diff --git a/.ci/update_windows/update.py b/.ci/update_windows/update.py index 6a04e5e16..59bee9804 100755 --- a/.ci/update_windows/update.py +++ b/.ci/update_windows/update.py @@ -33,12 +33,12 @@ def pull(repo, remote_name='origin', branch='master'): user = repo.default_signature tree = repo.index.write_tree() - commit = repo.create_commit('HEAD', - user, - user, - 'Merge!', - tree, - [repo.head.target, remote_master_id]) + repo.create_commit('HEAD', + user, + user, + 'Merge!', + tree, + [repo.head.target, remote_master_id]) # We need to do this or git CLI will think we are still merging. repo.state_cleanup() else: diff --git a/.github/workflows/pullrequest-ci-run.yml b/.github/workflows/pullrequest-ci-run.yml index 691480bcf..a2a4b265c 100644 --- a/.github/workflows/pullrequest-ci-run.yml +++ b/.github/workflows/pullrequest-ci-run.yml @@ -23,7 +23,7 @@ jobs: runner_label: [self-hosted, Linux] flags: "" - os: windows - runner_label: [self-hosted, win] + runner_label: [self-hosted, Windows] flags: "" runs-on: ${{ matrix.runner_label }} steps: diff --git a/.github/workflows/pylint.yml b/.github/workflows/ruff.yml similarity index 59% rename from .github/workflows/pylint.yml rename to .github/workflows/ruff.yml index 5effbea35..4c1a02594 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/ruff.yml @@ -3,8 +3,8 @@ name: Python Linting on: [push, pull_request] jobs: - pylint: - name: Run Pylint + ruff: + name: Run Ruff runs-on: ubuntu-latest steps: @@ -16,8 +16,8 @@ jobs: with: python-version: 3.x - - name: Install Pylint - run: pip install pylint + - name: Install Ruff + run: pip install ruff - - name: Run Pylint - run: pylint --rcfile=.pylintrc $(find . -type f -name "*.py") + - name: Run Ruff + run: ruff check . diff --git a/.github/workflows/stable-release.yml b/.github/workflows/stable-release.yml index 658816afe..0bdd5a3bd 100644 --- a/.github/workflows/stable-release.yml +++ b/.github/workflows/stable-release.yml @@ -12,17 +12,17 @@ on: description: 'CUDA version' required: true type: string - default: "121" + default: "124" python_minor: description: 'Python minor version' required: true type: string - default: "11" + default: "12" python_patch: description: 'Python patch version' required: true type: string - default: "9" + default: "7" jobs: diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml new file mode 100644 index 000000000..045996070 --- /dev/null +++ b/.github/workflows/stale-issues.yml @@ -0,0 +1,21 @@ +name: 'Close stale issues' +on: + schedule: + # Run daily at 430 am PT + - cron: '30 11 * * *' +permissions: + issues: write + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + stale-issue-message: "This issue is being marked stale because it has not had any activity for 30 days. Reply below within 7 days if your issue still isn't solved, and it will be left open. Otherwise, the issue will be closed automatically." + days-before-stale: 30 + days-before-close: 7 + stale-issue-label: 'Stale' + only-labels: 'User Support' + exempt-all-assignees: true + exempt-all-milestones: true diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml index be7622907..418dca0ab 100644 --- a/.github/workflows/test-ci.yml +++ b/.github/workflows/test-ci.yml @@ -20,7 +20,8 @@ jobs: strategy: fail-fast: false matrix: - os: [macos, linux, windows] + # os: [macos, linux, windows] + os: [macos, linux] python_version: ["3.9", "3.10", "3.11", "3.12"] cuda_version: ["12.1"] torch_version: ["stable"] @@ -31,9 +32,9 @@ jobs: - os: linux runner_label: [self-hosted, Linux] flags: "" - - os: windows - runner_label: [self-hosted, win] - flags: "" + # - os: windows + # runner_label: [self-hosted, Windows] + # flags: "" runs-on: ${{ matrix.runner_label }} steps: - name: Test Workflows @@ -45,28 +46,28 @@ jobs: google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} comfyui_flags: ${{ matrix.flags }} - test-win-nightly: - strategy: - fail-fast: true - matrix: - os: [windows] - python_version: ["3.9", "3.10", "3.11", "3.12"] - cuda_version: ["12.1"] - torch_version: ["nightly"] - include: - - os: windows - runner_label: [self-hosted, win] - flags: "" - runs-on: ${{ matrix.runner_label }} - steps: - - name: Test Workflows - uses: comfy-org/comfy-action@main - with: - os: ${{ matrix.os }} - python_version: ${{ matrix.python_version }} - torch_version: ${{ matrix.torch_version }} - google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} - comfyui_flags: ${{ matrix.flags }} + # test-win-nightly: + # strategy: + # fail-fast: true + # matrix: + # os: [windows] + # python_version: ["3.9", "3.10", "3.11", "3.12"] + # cuda_version: ["12.1"] + # torch_version: ["nightly"] + # include: + # - os: windows + # runner_label: [self-hosted, Windows] + # flags: "" + # runs-on: ${{ matrix.runner_label }} + # steps: + # - name: Test Workflows + # uses: comfy-org/comfy-action@main + # with: + # os: ${{ matrix.os }} + # python_version: ${{ matrix.python_version }} + # torch_version: ${{ matrix.torch_version }} + # google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} + # comfyui_flags: ${{ matrix.flags }} test-unix-nightly: strategy: diff --git a/.github/workflows/test-launch.yml b/.github/workflows/test-launch.yml index 42f1dbe99..5d665d6af 100644 --- a/.github/workflows/test-launch.yml +++ b/.github/workflows/test-launch.yml @@ -28,7 +28,7 @@ jobs: - name: Start ComfyUI server run: | python main.py --cpu 2>&1 | tee console_output.log & - wait-for-it --service 127.0.0.1:8188 -t 600 + wait-for-it --service 127.0.0.1:8188 -t 30 working-directory: ComfyUI - name: Check for unhandled exceptions in server log run: | diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml new file mode 100644 index 000000000..b3a4b4ea0 --- /dev/null +++ b/.github/workflows/test-unit.yml @@ -0,0 +1,30 @@ +name: Unit Tests + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + test: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install requirements + run: | + python -m pip install --upgrade pip + pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu + pip install -r requirements.txt + - name: Run Unit Tests + run: | + pip install -r tests-unit/requirements.txt + python -m pytest tests-unit diff --git a/.github/workflows/windows_release_dependencies.yml b/.github/workflows/windows_release_dependencies.yml index 8d3a8665d..85e6a52fd 100644 --- a/.github/workflows/windows_release_dependencies.yml +++ b/.github/workflows/windows_release_dependencies.yml @@ -12,7 +12,7 @@ on: description: 'extra dependencies' required: false type: string - default: "\"numpy<2\"" + default: "" cu: description: 'cuda version' required: true @@ -23,13 +23,13 @@ on: description: 'python minor version' required: true type: string - default: "11" + default: "12" python_patch: description: 'python patch version' required: true type: string - default: "9" + default: "7" # push: # branches: # - master diff --git a/.github/workflows/windows_release_package.yml b/.github/workflows/windows_release_package.yml index 84d99b8a6..11e724ba7 100644 --- a/.github/workflows/windows_release_package.yml +++ b/.github/workflows/windows_release_package.yml @@ -13,13 +13,13 @@ on: description: 'python minor version' required: true type: string - default: "11" + default: "12" python_patch: description: 'python patch version' required: true type: string - default: "9" + default: "7" # push: # branches: # - master diff --git a/.gitignore b/.gitignore index 15b2ee51a..f1d8b6dca 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ extra_model_paths.yaml .vscode/ .idea/ venv/ +.venv/ /web/extensions/* !/web/extensions/logging.js.example !/web/extensions/core/ diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index a5da56e57..000000000 --- a/.pylintrc +++ /dev/null @@ -1,3 +0,0 @@ -[MESSAGES CONTROL] -disable=all -enable=eval-used diff --git a/CODEOWNERS b/CODEOWNERS index 7c7c3e19e..f4f960603 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1,22 @@ -* @comfyanonymous +# Admins +* @comfyanonymous + +# Note: Github teams syntax cannot be used here as the repo is not owned by Comfy-Org. +# Inlined the team members for now. + +# Maintainers +*.md @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink +/tests/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink +/tests-unit/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink +/notebooks/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink +/script_examples/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata @Kosinkadink + +# Python web server +/api_server/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata +/app/ @yoland68 @robinjhuang @huchenlei @webfiltered @pythongosssss @ltdrdata + +# Frontend assets +/web/ @huchenlei @webfiltered @pythongosssss + +# Extra nodes +/comfy_extras/ @yoland68 @robinjhuang @huchenlei @pythongosssss @ltdrdata @Kosinkadink diff --git a/README.md b/README.md index 370f64100..1ec39d06f 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ [github-downloads-latest-shield]: https://img.shields.io/github/downloads/comfyanonymous/ComfyUI/latest/total?style=flat&label=downloads%40latest [github-downloads-link]: https://github.com/comfyanonymous/ComfyUI/releases -![ComfyUI Screenshot](comfyui_screenshot.png) +![ComfyUI Screenshot](https://github.com/user-attachments/assets/7ccaf2c1-9b72-41ae-9a89-5688c94b7abe) This ui will let you design and execute advanced stable diffusion pipelines using a graph/nodes/flowchart based interface. For some workflow examples and see what ComfyUI can do you can check out: @@ -39,7 +39,9 @@ This ui will let you design and execute advanced stable diffusion pipelines usin ## Features - Nodes/graph/flowchart interface to experiment and create complex Stable Diffusion workflows without needing to code anything. - Fully supports SD1.x, SD2.x, [SDXL](https://comfyanonymous.github.io/ComfyUI_examples/sdxl/), [Stable Video Diffusion](https://comfyanonymous.github.io/ComfyUI_examples/video/), [Stable Cascade](https://comfyanonymous.github.io/ComfyUI_examples/stable_cascade/), [SD3](https://comfyanonymous.github.io/ComfyUI_examples/sd3/) and [Stable Audio](https://comfyanonymous.github.io/ComfyUI_examples/audio/) +- [LTX-Video](https://comfyanonymous.github.io/ComfyUI_examples/ltxv/) - [Flux](https://comfyanonymous.github.io/ComfyUI_examples/flux/) +- [Mochi](https://comfyanonymous.github.io/ComfyUI_examples/mochi/) - Asynchronous Queue system - Many optimizations: Only re-executes the parts of the workflow that changes between executions. - Smart memory management: can automatically run models on GPUs with as low as 1GB vram. @@ -73,35 +75,39 @@ Workflow examples can be found on the [Examples page](https://comfyanonymous.git | Keybind | Explanation | |------------------------------------|--------------------------------------------------------------------------------------------------------------------| -| Ctrl + Enter | Queue up current graph for generation | -| Ctrl + Shift + Enter | Queue up current graph as first for generation | -| Ctrl + Alt + Enter | Cancel current generation | -| Ctrl + Z/Ctrl + Y | Undo/Redo | -| Ctrl + S | Save workflow | -| Ctrl + O | Load workflow | -| Ctrl + A | Select all nodes | -| Alt + C | Collapse/uncollapse selected nodes | -| Ctrl + M | Mute/unmute selected nodes | -| Ctrl + B | Bypass selected nodes (acts like the node was removed from the graph and the wires reconnected through) | -| Delete/Backspace | Delete selected nodes | -| Ctrl + Backspace | Delete the current graph | -| Space | Move the canvas around when held and moving the cursor | -| Ctrl/Shift + Click | Add clicked node to selection | -| Ctrl + C/Ctrl + V | Copy and paste selected nodes (without maintaining connections to outputs of unselected nodes) | -| Ctrl + C/Ctrl + Shift + V | Copy and paste selected nodes (maintaining connections from outputs of unselected nodes to inputs of pasted nodes) | -| Shift + Drag | Move multiple selected nodes at the same time | -| Ctrl + D | Load default graph | -| Alt + `+` | Canvas Zoom in | -| Alt + `-` | Canvas Zoom out | -| Ctrl + Shift + LMB + Vertical drag | Canvas Zoom in/out | -| Q | Toggle visibility of the queue | -| H | Toggle visibility of history | -| R | Refresh graph | +| `Ctrl` + `Enter` | Queue up current graph for generation | +| `Ctrl` + `Shift` + `Enter` | Queue up current graph as first for generation | +| `Ctrl` + `Alt` + `Enter` | Cancel current generation | +| `Ctrl` + `Z`/`Ctrl` + `Y` | Undo/Redo | +| `Ctrl` + `S` | Save workflow | +| `Ctrl` + `O` | Load workflow | +| `Ctrl` + `A` | Select all nodes | +| `Alt `+ `C` | Collapse/uncollapse selected nodes | +| `Ctrl` + `M` | Mute/unmute selected nodes | +| `Ctrl` + `B` | Bypass selected nodes (acts like the node was removed from the graph and the wires reconnected through) | +| `Delete`/`Backspace` | Delete selected nodes | +| `Ctrl` + `Backspace` | Delete the current graph | +| `Space` | Move the canvas around when held and moving the cursor | +| `Ctrl`/`Shift` + `Click` | Add clicked node to selection | +| `Ctrl` + `C`/`Ctrl` + `V` | Copy and paste selected nodes (without maintaining connections to outputs of unselected nodes) | +| `Ctrl` + `C`/`Ctrl` + `Shift` + `V` | Copy and paste selected nodes (maintaining connections from outputs of unselected nodes to inputs of pasted nodes) | +| `Shift` + `Drag` | Move multiple selected nodes at the same time | +| `Ctrl` + `D` | Load default graph | +| `Alt` + `+` | Canvas Zoom in | +| `Alt` + `-` | Canvas Zoom out | +| `Ctrl` + `Shift` + LMB + Vertical drag | Canvas Zoom in/out | +| `P` | Pin/Unpin selected nodes | +| `Ctrl` + `G` | Group selected nodes | +| `Q` | Toggle visibility of the queue | +| `H` | Toggle visibility of history | +| `R` | Refresh graph | +| `F` | Show/Hide menu | +| `.` | Fit view to selection (Whole graph when nothing is selected) | | Double-Click LMB | Open node quick search palette | -| Shift + Drag | Move multiple wires at once | -| Ctrl + Alt + LMB | Disconnect all wires from clicked slot | +| `Shift` + Drag | Move multiple wires at once | +| `Ctrl` + `Alt` + LMB | Disconnect all wires from clicked slot | -Ctrl can also be replaced with Cmd instead for macOS users +`Ctrl` can also be replaced with `Cmd` instead for macOS users # Installing @@ -125,6 +131,8 @@ To run it on services like paperspace, kaggle or colab you can use my [Jupyter N ## Manual Install (Windows, Linux) +Note that some dependencies do not yet support python 3.13 so using 3.12 is recommended. + Git clone this repo. Put your SD checkpoints (the huge ckpt/safetensors files) in: models/checkpoints @@ -135,17 +143,17 @@ Put your VAE in: models/vae ### AMD GPUs (Linux only) AMD users can install rocm and pytorch with pip if you don't have it already installed, this is the command to install the stable version: -```pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0``` +```pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.2``` -This is the command to install the nightly with ROCm 6.0 which might have some performance improvements: +This is the command to install the nightly with ROCm 6.2 which might have some performance improvements: -```pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.1``` +```pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.2.4``` ### NVIDIA Nvidia users should install stable pytorch using this command: -```pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121``` +```pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu124``` This is the command to install pytorch nightly instead which might have performance improvements: @@ -207,6 +215,14 @@ For 6700, 6600 and maybe other RDNA2 or older: ```HSA_OVERRIDE_GFX_VERSION=10.3. For AMD 7600 and maybe other RDNA3 cards: ```HSA_OVERRIDE_GFX_VERSION=11.0.0 python main.py``` +### AMD ROCm Tips + +You can enable experimental memory efficient attention on pytorch 2.5 in ComfyUI on RDNA3 and potentially other AMD GPUs using this command: + +```TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 python main.py --use-pytorch-cross-attention``` + +You can also try setting this env variable `PYTORCH_TUNABLEOP_ENABLED=1` which might speed things up at the cost of a very slow initial run. + # Notes Only parts of the graph that have an output with all the correct inputs will be executed. diff --git a/api_server/routes/internal/internal_routes.py b/api_server/routes/internal/internal_routes.py index 2234b3113..8f74529ba 100644 --- a/api_server/routes/internal/internal_routes.py +++ b/api_server/routes/internal/internal_routes.py @@ -1,16 +1,18 @@ from aiohttp import web from typing import Optional -from folder_paths import models_dir, user_directory, output_directory +from folder_paths import models_dir, user_directory, output_directory, folder_names_and_paths from api_server.services.file_service import FileService +from api_server.services.terminal_service import TerminalService +import app.logger class InternalRoutes: ''' The top level web router for internal routes: /internal/* The endpoints here should NOT be depended upon. It is for ComfyUI frontend use only. Check README.md for more information. - ''' - def __init__(self): + + def __init__(self, prompt_server): self.routes: web.RouteTableDef = web.RouteTableDef() self._app: Optional[web.Application] = None self.file_service = FileService({ @@ -18,6 +20,8 @@ class InternalRoutes: "user": user_directory, "output": output_directory }) + self.prompt_server = prompt_server + self.terminal_service = TerminalService(prompt_server) def setup_routes(self): @self.routes.get('/files') @@ -31,6 +35,37 @@ class InternalRoutes: except Exception as e: return web.json_response({"error": str(e)}, status=500) + @self.routes.get('/logs') + async def get_logs(request): + return web.json_response("".join([(l["t"] + " - " + l["m"]) for l in app.logger.get_logs()])) + + @self.routes.get('/logs/raw') + async def get_raw_logs(request): + self.terminal_service.update_size() + return web.json_response({ + "entries": list(app.logger.get_logs()), + "size": {"cols": self.terminal_service.cols, "rows": self.terminal_service.rows} + }) + + @self.routes.patch('/logs/subscribe') + async def subscribe_logs(request): + json_data = await request.json() + client_id = json_data["clientId"] + enabled = json_data["enabled"] + if enabled: + self.terminal_service.subscribe(client_id) + else: + self.terminal_service.unsubscribe(client_id) + + return web.Response(status=200) + + + @self.routes.get('/folder_paths') + async def get_folder_paths(request): + response = {} + for key in folder_names_and_paths: + response[key] = folder_names_and_paths[key][0] + return web.json_response(response) def get_app(self): if self._app is None: diff --git a/api_server/services/terminal_service.py b/api_server/services/terminal_service.py new file mode 100644 index 000000000..ed788d9a4 --- /dev/null +++ b/api_server/services/terminal_service.py @@ -0,0 +1,60 @@ +from app.logger import on_flush +import os +import shutil + + +class TerminalService: + def __init__(self, server): + self.server = server + self.cols = None + self.rows = None + self.subscriptions = set() + on_flush(self.send_messages) + + def get_terminal_size(self): + try: + size = os.get_terminal_size() + return (size.columns, size.lines) + except OSError: + try: + size = shutil.get_terminal_size() + return (size.columns, size.lines) + except OSError: + return (80, 24) # fallback to 80x24 + + def update_size(self): + columns, lines = self.get_terminal_size() + changed = False + + if columns != self.cols: + self.cols = columns + changed = True + + if lines != self.rows: + self.rows = lines + changed = True + + if changed: + return {"cols": self.cols, "rows": self.rows} + + return None + + def subscribe(self, client_id): + self.subscriptions.add(client_id) + + def unsubscribe(self, client_id): + self.subscriptions.discard(client_id) + + def send_messages(self, entries): + if not len(entries) or not len(self.subscriptions): + return + + new_size = self.update_size() + + for client_id in self.subscriptions.copy(): # prevent: Set changed size during iteration + if client_id not in self.server.sockets: + # Automatically unsub if the socket has disconnected + self.unsubscribe(client_id) + continue + + self.server.send_sync("logs", {"entries": entries, "size": new_size}, client_id) diff --git a/app/frontend_management.py b/app/frontend_management.py index 9c832e46d..6f20e439c 100644 --- a/app/frontend_management.py +++ b/app/frontend_management.py @@ -151,6 +151,15 @@ class FrontendManager: return cls.DEFAULT_FRONTEND_PATH repo_owner, repo_name, version = cls.parse_version_string(version_string) + + if version.startswith("v"): + expected_path = str(Path(cls.CUSTOM_FRONTENDS_ROOT) / f"{repo_owner}_{repo_name}" / version.lstrip("v")) + if os.path.exists(expected_path): + logging.info(f"Using existing copy of specific frontend version tag: {repo_owner}/{repo_name}@{version}") + return expected_path + + logging.info(f"Initializing frontend: {repo_owner}/{repo_name}@{version}, requesting version details from GitHub...") + provider = provider or FrontEndProvider(repo_owner, repo_name) release = provider.get_release(version) diff --git a/app/logger.py b/app/logger.py new file mode 100644 index 000000000..527be9fe7 --- /dev/null +++ b/app/logger.py @@ -0,0 +1,73 @@ +from collections import deque +from datetime import datetime +import io +import logging +import sys +import threading + +logs = None +stdout_interceptor = None +stderr_interceptor = None + + +class LogInterceptor(io.TextIOWrapper): + def __init__(self, stream, *args, **kwargs): + buffer = stream.buffer + encoding = stream.encoding + super().__init__(buffer, *args, **kwargs, encoding=encoding, line_buffering=stream.line_buffering) + self._lock = threading.Lock() + self._flush_callbacks = [] + self._logs_since_flush = [] + + def write(self, data): + entry = {"t": datetime.now().isoformat(), "m": data} + with self._lock: + self._logs_since_flush.append(entry) + + # Simple handling for cr to overwrite the last output if it isnt a full line + # else logs just get full of progress messages + if isinstance(data, str) and data.startswith("\r") and not logs[-1]["m"].endswith("\n"): + logs.pop() + logs.append(entry) + super().write(data) + + def flush(self): + super().flush() + for cb in self._flush_callbacks: + cb(self._logs_since_flush) + self._logs_since_flush = [] + + def on_flush(self, callback): + self._flush_callbacks.append(callback) + + +def get_logs(): + return logs + + +def on_flush(callback): + if stdout_interceptor is not None: + stdout_interceptor.on_flush(callback) + if stderr_interceptor is not None: + stderr_interceptor.on_flush(callback) + +def setup_logger(log_level: str = 'INFO', capacity: int = 300): + global logs + if logs: + return + + # Override output streams and log to buffer + logs = deque(maxlen=capacity) + + global stdout_interceptor + global stderr_interceptor + stdout_interceptor = sys.stdout = LogInterceptor(sys.stdout) + stderr_interceptor = sys.stderr = LogInterceptor(sys.stderr) + + # Setup default global logger + logger = logging.getLogger() + logger.setLevel(log_level) + + stream_handler = logging.StreamHandler() + stream_handler.setFormatter(logging.Formatter("%(message)s")) + logger.addHandler(stream_handler) diff --git a/app/model_manager.py b/app/model_manager.py new file mode 100644 index 000000000..475970d14 --- /dev/null +++ b/app/model_manager.py @@ -0,0 +1,167 @@ +from __future__ import annotations + +import os +import time +import logging +import folder_paths +import glob +from aiohttp import web +from PIL import Image +from io import BytesIO +from folder_paths import map_legacy, filter_files_extensions, filter_files_content_types + + +class ModelFileManager: + def __init__(self) -> None: + self.cache: dict[str, tuple[list[dict], dict[str, float], float]] = {} + + def get_cache(self, key: str, default=None) -> tuple[list[dict], dict[str, float], float] | None: + return self.cache.get(key, default) + + def set_cache(self, key: str, value: tuple[list[dict], dict[str, float], float]): + self.cache[key] = value + + def clear_cache(self): + self.cache.clear() + + def add_routes(self, routes): + # NOTE: This is an experiment to replace `/models` + @routes.get("/experiment/models") + async def get_model_folders(request): + model_types = list(folder_paths.folder_names_and_paths.keys()) + folder_black_list = ["configs", "custom_nodes"] + output_folders: list[dict] = [] + for folder in model_types: + if folder in folder_black_list: + continue + output_folders.append({"name": folder, "folders": folder_paths.get_folder_paths(folder)}) + return web.json_response(output_folders) + + # NOTE: This is an experiment to replace `/models/{folder}` + @routes.get("/experiment/models/{folder}") + async def get_all_models(request): + folder = request.match_info.get("folder", None) + if not folder in folder_paths.folder_names_and_paths: + return web.Response(status=404) + files = self.get_model_file_list(folder) + return web.json_response(files) + + @routes.get("/experiment/models/preview/{folder}/{path_index}/{filename:.*}") + async def get_model_preview(request): + folder_name = request.match_info.get("folder", None) + path_index = int(request.match_info.get("path_index", None)) + filename = request.match_info.get("filename", None) + + if not folder_name in folder_paths.folder_names_and_paths: + return web.Response(status=404) + + folders = folder_paths.folder_names_and_paths[folder_name] + folder = folders[0][path_index] + full_filename = os.path.join(folder, filename) + + preview_files = self.get_model_previews(full_filename) + default_preview_file = preview_files[0] if len(preview_files) > 0 else None + if default_preview_file is None or not os.path.isfile(default_preview_file): + return web.Response(status=404) + + try: + with Image.open(default_preview_file) as img: + img_bytes = BytesIO() + img.save(img_bytes, format="WEBP") + img_bytes.seek(0) + return web.Response(body=img_bytes.getvalue(), content_type="image/webp") + except: + return web.Response(status=404) + + def get_model_file_list(self, folder_name: str): + folder_name = map_legacy(folder_name) + folders = folder_paths.folder_names_and_paths[folder_name] + output_list: list[dict] = [] + + for index, folder in enumerate(folders[0]): + if not os.path.isdir(folder): + continue + out = self.cache_model_file_list_(folder) + if out is None: + out = self.recursive_search_models_(folder, index) + self.set_cache(folder, out) + output_list.extend(out[0]) + + return output_list + + def cache_model_file_list_(self, folder: str): + model_file_list_cache = self.get_cache(folder) + + if model_file_list_cache is None: + return None + if not os.path.isdir(folder): + return None + if os.path.getmtime(folder) != model_file_list_cache[1]: + return None + for x in model_file_list_cache[1]: + time_modified = model_file_list_cache[1][x] + folder = x + if os.path.getmtime(folder) != time_modified: + return None + + return model_file_list_cache + + def recursive_search_models_(self, directory: str, pathIndex: int) -> tuple[list[str], dict[str, float], float]: + if not os.path.isdir(directory): + return [], {}, time.perf_counter() + + excluded_dir_names = [".git"] + # TODO use settings + include_hidden_files = False + + result: list[str] = [] + dirs: dict[str, float] = {} + + for dirpath, subdirs, filenames in os.walk(directory, followlinks=True, topdown=True): + subdirs[:] = [d for d in subdirs if d not in excluded_dir_names] + if not include_hidden_files: + subdirs[:] = [d for d in subdirs if not d.startswith(".")] + filenames = [f for f in filenames if not f.startswith(".")] + + filenames = filter_files_extensions(filenames, folder_paths.supported_pt_extensions) + + for file_name in filenames: + try: + relative_path = os.path.relpath(os.path.join(dirpath, file_name), directory) + result.append(relative_path) + except: + logging.warning(f"Warning: Unable to access {file_name}. Skipping this file.") + continue + + for d in subdirs: + path: str = os.path.join(dirpath, d) + try: + dirs[path] = os.path.getmtime(path) + except FileNotFoundError: + logging.warning(f"Warning: Unable to access {path}. Skipping this path.") + continue + + return [{"name": f, "pathIndex": pathIndex} for f in result], dirs, time.perf_counter() + + def get_model_previews(self, filepath: str) -> list[str]: + dirname = os.path.dirname(filepath) + + if not os.path.exists(dirname): + return [] + + basename = os.path.splitext(filepath)[0] + match_files = glob.glob(f"{basename}.*", recursive=False) + image_files = filter_files_content_types(match_files, "image") + + result: list[str] = [] + + for filename in image_files: + _basename = os.path.splitext(filename)[0] + if _basename == basename: + result.append(filename) + if _basename == f"{basename}.preview": + result.append(filename) + return result + + def __exit__(self, exc_type, exc_value, traceback): + self.clear_cache() diff --git a/app/user_manager.py b/app/user_manager.py index 53dff18b7..e863b93dd 100644 --- a/app/user_manager.py +++ b/app/user_manager.py @@ -1,38 +1,58 @@ +from __future__ import annotations import json import os import re import uuid import glob import shutil +import logging from aiohttp import web +from urllib import parse from comfy.cli_args import args -from folder_paths import user_directory +import folder_paths from .app_settings import AppSettings +from typing import TypedDict default_user = "default" -users_file = os.path.join(user_directory, "users.json") + + +class FileInfo(TypedDict): + path: str + size: int + modified: int + + +def get_file_info(path: str, relative_to: str) -> FileInfo: + return { + "path": os.path.relpath(path, relative_to).replace(os.sep, '/'), + "size": os.path.getsize(path), + "modified": os.path.getmtime(path) + } class UserManager(): def __init__(self): - global user_directory + user_directory = folder_paths.get_user_directory() self.settings = AppSettings(self) if not os.path.exists(user_directory): - os.mkdir(user_directory) + os.makedirs(user_directory, exist_ok=True) if not args.multi_user: print("****** User settings have been changed to be stored on the server instead of browser storage. ******") print("****** For multi-user setups add the --multi-user CLI argument to enable multiple user profiles. ******") if args.multi_user: - if os.path.isfile(users_file): - with open(users_file) as f: + if os.path.isfile(self.get_users_file()): + with open(self.get_users_file()) as f: self.users = json.load(f) else: self.users = {} else: self.users = {"default": "default"} + def get_users_file(self): + return os.path.join(folder_paths.get_user_directory(), "users.json") + def get_request_user_id(self, request): user = "default" if args.multi_user and "comfy-user" in request.headers: @@ -44,7 +64,7 @@ class UserManager(): return user def get_request_user_filepath(self, request, file, type="userdata", create_dir=True): - global user_directory + user_directory = folder_paths.get_user_directory() if type == "userdata": root_dir = user_directory @@ -59,6 +79,10 @@ class UserManager(): return None if file is not None: + # Check if filename is url encoded + if "%" in file: + file = parse.unquote(file) + # prevent leaving /{type}/{user} path = os.path.abspath(os.path.join(user_root, file)) if os.path.commonpath((user_root, path)) != user_root: @@ -80,8 +104,7 @@ class UserManager(): self.users[user_id] = name - global users_file - with open(users_file, "w") as f: + with open(self.get_users_file(), "w") as f: json.dump(self.users, f) return user_id @@ -112,25 +135,65 @@ class UserManager(): @routes.get("/userdata") async def listuserdata(request): + """ + List user data files in a specified directory. + + This endpoint allows listing files in a user's data directory, with options for recursion, + full file information, and path splitting. + + Query Parameters: + - dir (required): The directory to list files from. + - recurse (optional): If "true", recursively list files in subdirectories. + - full_info (optional): If "true", return detailed file information (path, size, modified time). + - split (optional): If "true", split file paths into components (only applies when full_info is false). + + Returns: + - 400: If 'dir' parameter is missing. + - 403: If the requested path is not allowed. + - 404: If the requested directory does not exist. + - 200: JSON response with the list of files or file information. + + The response format depends on the query parameters: + - Default: List of relative file paths. + - full_info=true: List of dictionaries with file details. + - split=true (and full_info=false): List of lists, each containing path components. + """ directory = request.rel_url.query.get('dir', '') if not directory: - return web.Response(status=400) - + return web.Response(status=400, text="Directory not provided") + path = self.get_request_user_filepath(request, directory) if not path: - return web.Response(status=403) - + return web.Response(status=403, text="Invalid directory") + if not os.path.exists(path): - return web.Response(status=404) - + return web.Response(status=404, text="Directory not found") + recurse = request.rel_url.query.get('recurse', '').lower() == "true" - results = glob.glob(os.path.join( - glob.escape(path), '**/*'), recursive=recurse) - results = [os.path.relpath(x, path) for x in results if os.path.isfile(x)] - + full_info = request.rel_url.query.get('full_info', '').lower() == "true" split_path = request.rel_url.query.get('split', '').lower() == "true" - if split_path: - results = [[x] + x.split(os.sep) for x in results] + + # Use different patterns based on whether we're recursing or not + if recurse: + pattern = os.path.join(glob.escape(path), '**', '*') + else: + pattern = os.path.join(glob.escape(path), '*') + + def process_full_path(full_path: str) -> FileInfo | str | list[str]: + if full_info: + return get_file_info(full_path, path) + + rel_path = os.path.relpath(full_path, path).replace(os.sep, '/') + if split_path: + return [rel_path] + rel_path.split('/') + + return rel_path + + results = [ + process_full_path(full_path) + for full_path in glob.glob(pattern, recursive=recurse) + if os.path.isfile(full_path) + ] return web.json_response(results) @@ -138,14 +201,14 @@ class UserManager(): file = request.match_info.get(param, None) if not file: return web.Response(status=400) - + path = self.get_request_user_filepath(request, file) if not path: return web.Response(status=403) - + if check_exists and not os.path.exists(path): return web.Response(status=404) - + return path @routes.get("/userdata/{file}") @@ -153,25 +216,56 @@ class UserManager(): path = get_user_data_path(request, check_exists=True) if not isinstance(path, str): return path - + return web.FileResponse(path) @routes.post("/userdata/{file}") async def post_userdata(request): + """ + Upload or update a user data file. + + This endpoint handles file uploads to a user's data directory, with options for + controlling overwrite behavior and response format. + + Query Parameters: + - overwrite (optional): If "false", prevents overwriting existing files. Defaults to "true". + - full_info (optional): If "true", returns detailed file information (path, size, modified time). + If "false", returns only the relative file path. + + Path Parameters: + - file: The target file path (URL encoded if necessary). + + Returns: + - 400: If 'file' parameter is missing. + - 403: If the requested path is not allowed. + - 409: If overwrite=false and the file already exists. + - 200: JSON response with either: + - Full file information (if full_info=true) + - Relative file path (if full_info=false) + + The request body should contain the raw file content to be written. + """ path = get_user_data_path(request) if not isinstance(path, str): return path - - overwrite = request.query["overwrite"] != "false" + + overwrite = request.query.get("overwrite", 'true') != "false" + full_info = request.query.get('full_info', 'false').lower() == "true" + if not overwrite and os.path.exists(path): - return web.Response(status=409) + return web.Response(status=409, text="File already exists") body = await request.read() with open(path, "wb") as f: f.write(body) - - resp = os.path.relpath(path, self.get_request_user_filepath(request, None)) + + user_path = self.get_request_user_filepath(request, None) + if full_info: + resp = get_file_info(path, user_path) + else: + resp = os.path.relpath(path, user_path) + return web.json_response(resp) @routes.delete("/userdata/{file}") @@ -181,25 +275,56 @@ class UserManager(): return path os.remove(path) - + return web.Response(status=204) @routes.post("/userdata/{file}/move/{dest}") async def move_userdata(request): + """ + Move or rename a user data file. + + This endpoint handles moving or renaming files within a user's data directory, with options for + controlling overwrite behavior and response format. + + Path Parameters: + - file: The source file path (URL encoded if necessary) + - dest: The destination file path (URL encoded if necessary) + + Query Parameters: + - overwrite (optional): If "false", prevents overwriting existing files. Defaults to "true". + - full_info (optional): If "true", returns detailed file information (path, size, modified time). + If "false", returns only the relative file path. + + Returns: + - 400: If either 'file' or 'dest' parameter is missing + - 403: If either requested path is not allowed + - 404: If the source file does not exist + - 409: If overwrite=false and the destination file already exists + - 200: JSON response with either: + - Full file information (if full_info=true) + - Relative file path (if full_info=false) + """ source = get_user_data_path(request, check_exists=True) if not isinstance(source, str): return source - + dest = get_user_data_path(request, check_exists=False, param="dest") if not isinstance(source, str): return dest - - overwrite = request.query["overwrite"] != "false" - if not overwrite and os.path.exists(dest): - return web.Response(status=409) - print(f"moving '{source}' -> '{dest}'") + overwrite = request.query.get("overwrite", 'true') != "false" + full_info = request.query.get('full_info', 'false').lower() == "true" + + if not overwrite and os.path.exists(dest): + return web.Response(status=409, text="File already exists") + + logging.info(f"moving '{source}' -> '{dest}'") shutil.move(source, dest) - - resp = os.path.relpath(dest, self.get_request_user_filepath(request, None)) + + user_path = self.get_request_user_filepath(request, None) + if full_info: + resp = get_file_info(dest, user_path) + else: + resp = os.path.relpath(dest, user_path) + return web.json_response(resp) diff --git a/comfy/cldm/cldm.py b/comfy/cldm/cldm.py index 9ec64a227..f12cd6eeb 100644 --- a/comfy/cldm/cldm.py +++ b/comfy/cldm/cldm.py @@ -2,11 +2,9 @@ #and modified import torch -import torch as th import torch.nn as nn from ..ldm.modules.diffusionmodules.util import ( - zero_module, timestep_embedding, ) @@ -415,7 +413,6 @@ class ControlNet(nn.Module): out_output = [] out_middle = [] - hs = [] if self.num_classes is not None: assert y.shape[0] == x.shape[0] emb = emb + self.label_emb(y) diff --git a/comfy/cldm/dit_embedder.py b/comfy/cldm/dit_embedder.py new file mode 100644 index 000000000..f9bf31012 --- /dev/null +++ b/comfy/cldm/dit_embedder.py @@ -0,0 +1,120 @@ +import math +from typing import List, Optional, Tuple + +import torch +import torch.nn as nn +from torch import Tensor + +from comfy.ldm.modules.diffusionmodules.mmdit import DismantledBlock, PatchEmbed, VectorEmbedder, TimestepEmbedder, get_2d_sincos_pos_embed_torch + + +class ControlNetEmbedder(nn.Module): + + def __init__( + self, + img_size: int, + patch_size: int, + in_chans: int, + attention_head_dim: int, + num_attention_heads: int, + adm_in_channels: int, + num_layers: int, + main_model_double: int, + double_y_emb: bool, + device: torch.device, + dtype: torch.dtype, + pos_embed_max_size: Optional[int] = None, + operations = None, + ): + super().__init__() + self.main_model_double = main_model_double + self.dtype = dtype + self.hidden_size = num_attention_heads * attention_head_dim + self.patch_size = patch_size + self.x_embedder = PatchEmbed( + img_size=img_size, + patch_size=patch_size, + in_chans=in_chans, + embed_dim=self.hidden_size, + strict_img_size=pos_embed_max_size is None, + device=device, + dtype=dtype, + operations=operations, + ) + + self.t_embedder = TimestepEmbedder(self.hidden_size, dtype=dtype, device=device, operations=operations) + + self.double_y_emb = double_y_emb + if self.double_y_emb: + self.orig_y_embedder = VectorEmbedder( + adm_in_channels, self.hidden_size, dtype, device, operations=operations + ) + self.y_embedder = VectorEmbedder( + self.hidden_size, self.hidden_size, dtype, device, operations=operations + ) + else: + self.y_embedder = VectorEmbedder( + adm_in_channels, self.hidden_size, dtype, device, operations=operations + ) + + self.transformer_blocks = nn.ModuleList( + DismantledBlock( + hidden_size=self.hidden_size, num_heads=num_attention_heads, qkv_bias=True, + dtype=dtype, device=device, operations=operations + ) + for _ in range(num_layers) + ) + + # self.use_y_embedder = pooled_projection_dim != self.time_text_embed.text_embedder.linear_1.in_features + # TODO double check this logic when 8b + self.use_y_embedder = True + + self.controlnet_blocks = nn.ModuleList([]) + for _ in range(len(self.transformer_blocks)): + controlnet_block = operations.Linear(self.hidden_size, self.hidden_size, dtype=dtype, device=device) + self.controlnet_blocks.append(controlnet_block) + + self.pos_embed_input = PatchEmbed( + img_size=img_size, + patch_size=patch_size, + in_chans=in_chans, + embed_dim=self.hidden_size, + strict_img_size=False, + device=device, + dtype=dtype, + operations=operations, + ) + + def forward( + self, + x: torch.Tensor, + timesteps: torch.Tensor, + y: Optional[torch.Tensor] = None, + context: Optional[torch.Tensor] = None, + hint = None, + ) -> Tuple[Tensor, List[Tensor]]: + x_shape = list(x.shape) + x = self.x_embedder(x) + if not self.double_y_emb: + h = (x_shape[-2] + 1) // self.patch_size + w = (x_shape[-1] + 1) // self.patch_size + x += get_2d_sincos_pos_embed_torch(self.hidden_size, w, h, device=x.device) + c = self.t_embedder(timesteps, dtype=x.dtype) + if y is not None and self.y_embedder is not None: + if self.double_y_emb: + y = self.orig_y_embedder(y) + y = self.y_embedder(y) + c = c + y + + x = x + self.pos_embed_input(hint) + + block_out = () + + repeat = math.ceil(self.main_model_double / len(self.transformer_blocks)) + for i in range(len(self.transformer_blocks)): + out = self.transformer_blocks[i](x, c) + if not self.double_y_emb: + x = out + block_out += (self.controlnet_blocks[i](out),) * repeat + + return {"output": block_out} diff --git a/comfy/cldm/mmdit.py b/comfy/cldm/mmdit.py index 025c2fb5d..b7764085e 100644 --- a/comfy/cldm/mmdit.py +++ b/comfy/cldm/mmdit.py @@ -1,11 +1,12 @@ import torch -from typing import Dict, Optional +from typing import Optional import comfy.ldm.modules.diffusionmodules.mmdit class ControlNet(comfy.ldm.modules.diffusionmodules.mmdit.MMDiT): def __init__( self, num_blocks = None, + control_latent_channels = None, dtype = None, device = None, operations = None, @@ -17,10 +18,13 @@ class ControlNet(comfy.ldm.modules.diffusionmodules.mmdit.MMDiT): for _ in range(len(self.joint_blocks)): self.controlnet_blocks.append(operations.Linear(self.hidden_size, self.hidden_size, device=device, dtype=dtype)) + if control_latent_channels is None: + control_latent_channels = self.in_channels + self.pos_embed_input = comfy.ldm.modules.diffusionmodules.mmdit.PatchEmbed( None, self.patch_size, - self.in_channels, + control_latent_channels, self.hidden_size, bias=True, strict_img_size=False, diff --git a/comfy/cli_args.py b/comfy/cli_args.py index c98d4dfaf..847f35abd 100644 --- a/comfy/cli_args.py +++ b/comfy/cli_args.py @@ -36,7 +36,7 @@ class EnumAction(argparse.Action): parser = argparse.ArgumentParser() -parser.add_argument("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0", help="Specify the IP address to listen on (default: 127.0.0.1). If --listen is provided without an argument, it defaults to 0.0.0.0. (listens on all)") +parser.add_argument("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0,::", help="Specify the IP address to listen on (default: 127.0.0.1). You can give a list of ip addresses by separating them with a comma like: 127.2.2.2,127.3.3.3 If --listen is provided without an argument, it defaults to 0.0.0.0,:: (listens on all ipv4 and ipv6)") parser.add_argument("--port", type=int, default=8188, help="Set the listen port.") parser.add_argument("--tls-keyfile", type=str, help="Path to TLS (SSL) key file. Enables TLS, makes app accessible at https://... requires --tls-certfile to function") parser.add_argument("--tls-certfile", type=str, help="Path to TLS (SSL) certificate file. Enables TLS, makes app accessible at https://... requires --tls-keyfile to function") @@ -60,8 +60,10 @@ fp_group.add_argument("--force-fp32", action="store_true", help="Force fp32 (If fp_group.add_argument("--force-fp16", action="store_true", help="Force fp16.") fpunet_group = parser.add_mutually_exclusive_group() -fpunet_group.add_argument("--bf16-unet", action="store_true", help="Run the UNET in bf16. This should only be used for testing stuff.") -fpunet_group.add_argument("--fp16-unet", action="store_true", help="Store unet weights in fp16.") +fpunet_group.add_argument("--fp32-unet", action="store_true", help="Run the diffusion model in fp32.") +fpunet_group.add_argument("--fp64-unet", action="store_true", help="Run the diffusion model in fp64.") +fpunet_group.add_argument("--bf16-unet", action="store_true", help="Run the diffusion model in bf16.") +fpunet_group.add_argument("--fp16-unet", action="store_true", help="Run the diffusion model in fp16") fpunet_group.add_argument("--fp8_e4m3fn-unet", action="store_true", help="Store unet weights in fp8_e4m3fn.") fpunet_group.add_argument("--fp8_e5m2-unet", action="store_true", help="Store unet weights in fp8_e5m2.") @@ -92,6 +94,8 @@ class LatentPreviewMethod(enum.Enum): parser.add_argument("--preview-method", type=LatentPreviewMethod, default=LatentPreviewMethod.NoPreviews, help="Default preview method for sampler nodes.", action=EnumAction) +parser.add_argument("--preview-size", type=int, default=512, help="Sets the maximum preview size for sampler nodes.") + cache_group = parser.add_mutually_exclusive_group() cache_group.add_argument("--cache-classic", action="store_true", help="Use the old style (aggressive) caching.") cache_group.add_argument("--cache-lru", type=int, default=0, help="Use LRU caching with a maximum of N node results cached. May use more RAM/VRAM.") @@ -134,7 +138,7 @@ parser.add_argument("--disable-all-custom-nodes", action="store_true", help="Dis parser.add_argument("--multi-user", action="store_true", help="Enables per-user storage.") -parser.add_argument("--verbose", action="store_true", help="Enables more debug prints.") +parser.add_argument("--verbose", default='INFO', const='DEBUG', nargs="?", choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the logging level') # The default built-in provider hosted under web/ DEFAULT_VERSION_STRING = "comfyanonymous/ComfyUI@latest" @@ -169,6 +173,8 @@ parser.add_argument( help="The local filesystem path to the directory where the frontend is located. Overrides --front-end-version.", ) +parser.add_argument("--user-directory", type=is_valid_directory, default=None, help="Set the ComfyUI user directory with an absolute path.") + if comfy.options.args_parsing: args = parser.parse_args() else: @@ -179,10 +185,3 @@ if args.windows_standalone_build: if args.disable_auto_launch: args.auto_launch = False - -import logging -logging_level = logging.INFO -if args.verbose: - logging_level = logging.DEBUG - -logging.basicConfig(format="%(message)s", level=logging_level) diff --git a/comfy/clip_model.py b/comfy/clip_model.py index 42cdc4f6e..23ddea9c0 100644 --- a/comfy/clip_model.py +++ b/comfy/clip_model.py @@ -23,6 +23,7 @@ class CLIPAttention(torch.nn.Module): ACTIVATIONS = {"quick_gelu": lambda a: a * torch.sigmoid(1.702 * a), "gelu": torch.nn.functional.gelu, + "gelu_pytorch_tanh": lambda a: torch.nn.functional.gelu(a, approximate="tanh"), } class CLIPMLP(torch.nn.Module): @@ -139,27 +140,35 @@ class CLIPTextModel(torch.nn.Module): class CLIPVisionEmbeddings(torch.nn.Module): - def __init__(self, embed_dim, num_channels=3, patch_size=14, image_size=224, dtype=None, device=None, operations=None): + def __init__(self, embed_dim, num_channels=3, patch_size=14, image_size=224, model_type="", dtype=None, device=None, operations=None): super().__init__() - self.class_embedding = torch.nn.Parameter(torch.empty(embed_dim, dtype=dtype, device=device)) + + num_patches = (image_size // patch_size) ** 2 + if model_type == "siglip_vision_model": + self.class_embedding = None + patch_bias = True + else: + num_patches = num_patches + 1 + self.class_embedding = torch.nn.Parameter(torch.empty(embed_dim, dtype=dtype, device=device)) + patch_bias = False self.patch_embedding = operations.Conv2d( in_channels=num_channels, out_channels=embed_dim, kernel_size=patch_size, stride=patch_size, - bias=False, + bias=patch_bias, dtype=dtype, device=device ) - num_patches = (image_size // patch_size) ** 2 - num_positions = num_patches + 1 - self.position_embedding = operations.Embedding(num_positions, embed_dim, dtype=dtype, device=device) + self.position_embedding = operations.Embedding(num_patches, embed_dim, dtype=dtype, device=device) def forward(self, pixel_values): embeds = self.patch_embedding(pixel_values).flatten(2).transpose(1, 2) - return torch.cat([comfy.ops.cast_to_input(self.class_embedding, embeds).expand(pixel_values.shape[0], 1, -1), embeds], dim=1) + comfy.ops.cast_to_input(self.position_embedding.weight, embeds) + if self.class_embedding is not None: + embeds = torch.cat([comfy.ops.cast_to_input(self.class_embedding, embeds).expand(pixel_values.shape[0], 1, -1), embeds], dim=1) + return embeds + comfy.ops.cast_to_input(self.position_embedding.weight, embeds) class CLIPVision(torch.nn.Module): @@ -170,9 +179,15 @@ class CLIPVision(torch.nn.Module): heads = config_dict["num_attention_heads"] intermediate_size = config_dict["intermediate_size"] intermediate_activation = config_dict["hidden_act"] + model_type = config_dict["model_type"] - self.embeddings = CLIPVisionEmbeddings(embed_dim, config_dict["num_channels"], config_dict["patch_size"], config_dict["image_size"], dtype=dtype, device=device, operations=operations) - self.pre_layrnorm = operations.LayerNorm(embed_dim) + self.embeddings = CLIPVisionEmbeddings(embed_dim, config_dict["num_channels"], config_dict["patch_size"], config_dict["image_size"], model_type=model_type, dtype=dtype, device=device, operations=operations) + if model_type == "siglip_vision_model": + self.pre_layrnorm = lambda a: a + self.output_layernorm = True + else: + self.pre_layrnorm = operations.LayerNorm(embed_dim) + self.output_layernorm = False self.encoder = CLIPEncoder(num_layers, embed_dim, heads, intermediate_size, intermediate_activation, dtype, device, operations) self.post_layernorm = operations.LayerNorm(embed_dim) @@ -181,14 +196,21 @@ class CLIPVision(torch.nn.Module): x = self.pre_layrnorm(x) #TODO: attention_mask? x, i = self.encoder(x, mask=None, intermediate_output=intermediate_output) - pooled_output = self.post_layernorm(x[:, 0, :]) + if self.output_layernorm: + x = self.post_layernorm(x) + pooled_output = x + else: + pooled_output = self.post_layernorm(x[:, 0, :]) return x, i, pooled_output class CLIPVisionModelProjection(torch.nn.Module): def __init__(self, config_dict, dtype, device, operations): super().__init__() self.vision_model = CLIPVision(config_dict, dtype, device, operations) - self.visual_projection = operations.Linear(config_dict["hidden_size"], config_dict["projection_dim"], bias=False) + if "projection_dim" in config_dict: + self.visual_projection = operations.Linear(config_dict["hidden_size"], config_dict["projection_dim"], bias=False) + else: + self.visual_projection = lambda a: a def forward(self, *args, **kwargs): x = self.vision_model(*args, **kwargs) diff --git a/comfy/clip_vision.py b/comfy/clip_vision.py index 20dc3345d..c9c82e9ad 100644 --- a/comfy/clip_vision.py +++ b/comfy/clip_vision.py @@ -16,13 +16,18 @@ class Output: def __setitem__(self, key, item): setattr(self, key, item) -def clip_preprocess(image, size=224): - mean = torch.tensor([ 0.48145466,0.4578275,0.40821073], device=image.device, dtype=image.dtype) - std = torch.tensor([0.26862954,0.26130258,0.27577711], device=image.device, dtype=image.dtype) +def clip_preprocess(image, size=224, mean=[0.48145466, 0.4578275, 0.40821073], std=[0.26862954, 0.26130258, 0.27577711], crop=True): + mean = torch.tensor(mean, device=image.device, dtype=image.dtype) + std = torch.tensor(std, device=image.device, dtype=image.dtype) image = image.movedim(-1, 1) if not (image.shape[2] == size and image.shape[3] == size): - scale = (size / min(image.shape[2], image.shape[3])) - image = torch.nn.functional.interpolate(image, size=(round(scale * image.shape[2]), round(scale * image.shape[3])), mode="bicubic", antialias=True) + if crop: + scale = (size / min(image.shape[2], image.shape[3])) + scale_size = (round(scale * image.shape[2]), round(scale * image.shape[3])) + else: + scale_size = (size, size) + + image = torch.nn.functional.interpolate(image, size=scale_size, mode="bicubic", antialias=True) h = (image.shape[2] - size)//2 w = (image.shape[3] - size)//2 image = image[:,:,h:h+size,w:w+size] @@ -35,6 +40,8 @@ class ClipVisionModel(): config = json.load(f) self.image_size = config.get("image_size", 224) + self.image_mean = config.get("image_mean", [0.48145466, 0.4578275, 0.40821073]) + self.image_std = config.get("image_std", [0.26862954, 0.26130258, 0.27577711]) self.load_device = comfy.model_management.text_encoder_device() offload_device = comfy.model_management.text_encoder_offload_device() self.dtype = comfy.model_management.text_encoder_dtype(self.load_device) @@ -49,9 +56,9 @@ class ClipVisionModel(): def get_sd(self): return self.model.state_dict() - def encode_image(self, image): + def encode_image(self, image, crop=True): comfy.model_management.load_model_gpu(self.patcher) - pixel_values = clip_preprocess(image.to(self.load_device), size=self.image_size).float() + pixel_values = clip_preprocess(image.to(self.load_device), size=self.image_size, mean=self.image_mean, std=self.image_std, crop=crop).float() out = self.model(pixel_values=pixel_values, intermediate_output=-2) outputs = Output() @@ -94,7 +101,9 @@ def load_clipvision_from_sd(sd, prefix="", convert_keys=False): elif "vision_model.encoder.layers.30.layer_norm1.weight" in sd: json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "clip_vision_config_h.json") elif "vision_model.encoder.layers.22.layer_norm1.weight" in sd: - if sd["vision_model.embeddings.position_embedding.weight"].shape[0] == 577: + if sd["vision_model.encoder.layers.0.layer_norm1.weight"].shape[0] == 1152: + json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "clip_vision_siglip_384.json") + elif sd["vision_model.embeddings.position_embedding.weight"].shape[0] == 577: json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "clip_vision_config_vitl_336.json") else: json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "clip_vision_config_vitl.json") @@ -109,8 +118,7 @@ def load_clipvision_from_sd(sd, prefix="", convert_keys=False): keys = list(sd.keys()) for k in keys: if k not in u: - t = sd.pop(k) - del t + sd.pop(k) return clip def load(ckpt_path): diff --git a/comfy/clip_vision_siglip_384.json b/comfy/clip_vision_siglip_384.json new file mode 100644 index 000000000..532e03ac1 --- /dev/null +++ b/comfy/clip_vision_siglip_384.json @@ -0,0 +1,13 @@ +{ + "num_channels": 3, + "hidden_act": "gelu_pytorch_tanh", + "hidden_size": 1152, + "image_size": 384, + "intermediate_size": 4304, + "model_type": "siglip_vision_model", + "num_attention_heads": 16, + "num_hidden_layers": 27, + "patch_size": 14, + "image_mean": [0.5, 0.5, 0.5], + "image_std": [0.5, 0.5, 0.5] +} diff --git a/comfy/comfy_types/README.md b/comfy/comfy_types/README.md new file mode 100644 index 000000000..869851e7c --- /dev/null +++ b/comfy/comfy_types/README.md @@ -0,0 +1,43 @@ +# Comfy Typing +## Type hinting for ComfyUI Node development + +This module provides type hinting and concrete convenience types for node developers. +If cloned to the custom_nodes directory of ComfyUI, types can be imported using: + +```python +from comfy_types import IO, ComfyNodeABC, CheckLazyMixin + +class ExampleNode(ComfyNodeABC): + @classmethod + def INPUT_TYPES(s) -> InputTypeDict: + return {"required": {}} +``` + +Full example is in [examples/example_nodes.py](examples/example_nodes.py). + +# Types +A few primary types are documented below. More complete information is available via the docstrings on each type. + +## `IO` + +A string enum of built-in and a few custom data types. Includes the following special types and their requisite plumbing: + +- `ANY`: `"*"` +- `NUMBER`: `"FLOAT,INT"` +- `PRIMITIVE`: `"STRING,FLOAT,INT,BOOLEAN"` + +## `ComfyNodeABC` + +An abstract base class for nodes, offering type-hinting / autocomplete, and somewhat-alright docstrings. + +### Type hinting for `INPUT_TYPES` + +![INPUT_TYPES auto-completion in Visual Studio Code](examples/input_types.png) + +### `INPUT_TYPES` return dict + +![INPUT_TYPES return value type hinting in Visual Studio Code](examples/required_hint.png) + +### Options for individual inputs + +![INPUT_TYPES return value option auto-completion in Visual Studio Code](examples/input_options.png) diff --git a/comfy/types.py b/comfy/comfy_types/__init__.py similarity index 75% rename from comfy/types.py rename to comfy/comfy_types/__init__.py index 70cf4b158..19ec33f98 100644 --- a/comfy/types.py +++ b/comfy/comfy_types/__init__.py @@ -1,5 +1,6 @@ import torch from typing import Callable, Protocol, TypedDict, Optional, List +from .node_typing import IO, InputTypeDict, ComfyNodeABC, CheckLazyMixin class UnetApplyFunction(Protocol): @@ -30,3 +31,15 @@ class UnetParams(TypedDict): UnetWrapperFunction = Callable[[UnetApplyFunction, UnetParams], torch.Tensor] + + +__all__ = [ + "UnetWrapperFunction", + UnetApplyConds.__name__, + UnetParams.__name__, + UnetApplyFunction.__name__, + IO.__name__, + InputTypeDict.__name__, + ComfyNodeABC.__name__, + CheckLazyMixin.__name__, +] diff --git a/comfy/comfy_types/examples/example_nodes.py b/comfy/comfy_types/examples/example_nodes.py new file mode 100644 index 000000000..b6465f39e --- /dev/null +++ b/comfy/comfy_types/examples/example_nodes.py @@ -0,0 +1,28 @@ +from comfy_types import IO, ComfyNodeABC, InputTypeDict +from inspect import cleandoc + + +class ExampleNode(ComfyNodeABC): + """An example node that just adds 1 to an input integer. + + * Requires an IDE configured with analysis paths etc to be worth looking at. + * Not intended for use in ComfyUI. + """ + + DESCRIPTION = cleandoc(__doc__) + CATEGORY = "examples" + + @classmethod + def INPUT_TYPES(s) -> InputTypeDict: + return { + "required": { + "input_int": (IO.INT, {"defaultInput": True}), + } + } + + RETURN_TYPES = (IO.INT,) + RETURN_NAMES = ("input_plus_one",) + FUNCTION = "execute" + + def execute(self, input_int: int): + return (input_int + 1,) diff --git a/comfy/comfy_types/examples/input_options.png b/comfy/comfy_types/examples/input_options.png new file mode 100644 index 000000000..ac859bbc0 Binary files /dev/null and b/comfy/comfy_types/examples/input_options.png differ diff --git a/comfy/comfy_types/examples/input_types.png b/comfy/comfy_types/examples/input_types.png new file mode 100644 index 000000000..27e031ccf Binary files /dev/null and b/comfy/comfy_types/examples/input_types.png differ diff --git a/comfy/comfy_types/examples/required_hint.png b/comfy/comfy_types/examples/required_hint.png new file mode 100644 index 000000000..22c0182a0 Binary files /dev/null and b/comfy/comfy_types/examples/required_hint.png differ diff --git a/comfy/comfy_types/node_typing.py b/comfy/comfy_types/node_typing.py new file mode 100644 index 000000000..056b1aa65 --- /dev/null +++ b/comfy/comfy_types/node_typing.py @@ -0,0 +1,274 @@ +"""Comfy-specific type hinting""" + +from __future__ import annotations +from typing import Literal, TypedDict +from abc import ABC, abstractmethod +from enum import Enum + + +class StrEnum(str, Enum): + """Base class for string enums. Python's StrEnum is not available until 3.11.""" + + def __str__(self) -> str: + return self.value + + +class IO(StrEnum): + """Node input/output data types. + + Includes functionality for ``"*"`` (`ANY`) and ``"MULTI,TYPES"``. + """ + + STRING = "STRING" + IMAGE = "IMAGE" + MASK = "MASK" + LATENT = "LATENT" + BOOLEAN = "BOOLEAN" + INT = "INT" + FLOAT = "FLOAT" + CONDITIONING = "CONDITIONING" + SAMPLER = "SAMPLER" + SIGMAS = "SIGMAS" + GUIDER = "GUIDER" + NOISE = "NOISE" + CLIP = "CLIP" + CONTROL_NET = "CONTROL_NET" + VAE = "VAE" + MODEL = "MODEL" + CLIP_VISION = "CLIP_VISION" + CLIP_VISION_OUTPUT = "CLIP_VISION_OUTPUT" + STYLE_MODEL = "STYLE_MODEL" + GLIGEN = "GLIGEN" + UPSCALE_MODEL = "UPSCALE_MODEL" + AUDIO = "AUDIO" + WEBCAM = "WEBCAM" + POINT = "POINT" + FACE_ANALYSIS = "FACE_ANALYSIS" + BBOX = "BBOX" + SEGS = "SEGS" + + ANY = "*" + """Always matches any type, but at a price. + + Causes some functionality issues (e.g. reroutes, link types), and should be avoided whenever possible. + """ + NUMBER = "FLOAT,INT" + """A float or an int - could be either""" + PRIMITIVE = "STRING,FLOAT,INT,BOOLEAN" + """Could be any of: string, float, int, or bool""" + + def __ne__(self, value: object) -> bool: + if self == "*" or value == "*": + return False + if not isinstance(value, str): + return True + a = frozenset(self.split(",")) + b = frozenset(value.split(",")) + return not (b.issubset(a) or a.issubset(b)) + + +class InputTypeOptions(TypedDict): + """Provides type hinting for the return type of the INPUT_TYPES node function. + + Due to IDE limitations with unions, for now all options are available for all types (e.g. `label_on` is hinted even when the type is not `IO.BOOLEAN`). + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_datatypes + """ + + default: bool | str | float | int | list | tuple + """The default value of the widget""" + defaultInput: bool + """Defaults to an input slot rather than a widget""" + forceInput: bool + """`defaultInput` and also don't allow converting to a widget""" + lazy: bool + """Declares that this input uses lazy evaluation""" + rawLink: bool + """When a link exists, rather than receiving the evaluated value, you will receive the link (i.e. `["nodeId", ]`). Designed for node expansion.""" + tooltip: str + """Tooltip for the input (or widget), shown on pointer hover""" + # class InputTypeNumber(InputTypeOptions): + # default: float | int + min: float + """The minimum value of a number (``FLOAT`` | ``INT``)""" + max: float + """The maximum value of a number (``FLOAT`` | ``INT``)""" + step: float + """The amount to increment or decrement a widget by when stepping up/down (``FLOAT`` | ``INT``)""" + round: float + """Floats are rounded by this value (``FLOAT``)""" + # class InputTypeBoolean(InputTypeOptions): + # default: bool + label_on: str + """The label to use in the UI when the bool is True (``BOOLEAN``)""" + label_on: str + """The label to use in the UI when the bool is False (``BOOLEAN``)""" + # class InputTypeString(InputTypeOptions): + # default: str + multiline: bool + """Use a multiline text box (``STRING``)""" + placeholder: str + """Placeholder text to display in the UI when empty (``STRING``)""" + # Deprecated: + # defaultVal: str + dynamicPrompts: bool + """Causes the front-end to evaluate dynamic prompts (``STRING``)""" + + +class HiddenInputTypeDict(TypedDict): + """Provides type hinting for the hidden entry of node INPUT_TYPES.""" + + node_id: Literal["UNIQUE_ID"] + """UNIQUE_ID is the unique identifier of the node, and matches the id property of the node on the client side. It is commonly used in client-server communications (see messages).""" + unique_id: Literal["UNIQUE_ID"] + """UNIQUE_ID is the unique identifier of the node, and matches the id property of the node on the client side. It is commonly used in client-server communications (see messages).""" + prompt: Literal["PROMPT"] + """PROMPT is the complete prompt sent by the client to the server. See the prompt object for a full description.""" + extra_pnginfo: Literal["EXTRA_PNGINFO"] + """EXTRA_PNGINFO is a dictionary that will be copied into the metadata of any .png files saved. Custom nodes can store additional information in this dictionary for saving (or as a way to communicate with a downstream node).""" + dynprompt: Literal["DYNPROMPT"] + """DYNPROMPT is an instance of comfy_execution.graph.DynamicPrompt. It differs from PROMPT in that it may mutate during the course of execution in response to Node Expansion.""" + + +class InputTypeDict(TypedDict): + """Provides type hinting for node INPUT_TYPES. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_more_on_inputs + """ + + required: dict[str, tuple[IO, InputTypeOptions]] + """Describes all inputs that must be connected for the node to execute.""" + optional: dict[str, tuple[IO, InputTypeOptions]] + """Describes inputs which do not need to be connected.""" + hidden: HiddenInputTypeDict + """Offers advanced functionality and server-client communication. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_more_on_inputs#hidden-inputs + """ + + +class ComfyNodeABC(ABC): + """Abstract base class for Comfy nodes. Includes the names and expected types of attributes. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview + """ + + DESCRIPTION: str + """Node description, shown as a tooltip when hovering over the node. + + Usage:: + + # Explicitly define the description + DESCRIPTION = "Example description here." + + # Use the docstring of the node class. + DESCRIPTION = cleandoc(__doc__) + """ + CATEGORY: str + """The category of the node, as per the "Add Node" menu. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#category + """ + EXPERIMENTAL: bool + """Flags a node as experimental, informing users that it may change or not work as expected.""" + DEPRECATED: bool + """Flags a node as deprecated, indicating to users that they should find alternatives to this node.""" + + @classmethod + @abstractmethod + def INPUT_TYPES(s) -> InputTypeDict: + """Defines node inputs. + + * Must include the ``required`` key, which describes all inputs that must be connected for the node to execute. + * The ``optional`` key can be added to describe inputs which do not need to be connected. + * The ``hidden`` key offers some advanced functionality. More info at: https://docs.comfy.org/essentials/custom_node_more_on_inputs#hidden-inputs + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#input-types + """ + return {"required": {}} + + OUTPUT_NODE: bool + """Flags this node as an output node, causing any inputs it requires to be executed. + + If a node is not connected to any output nodes, that node will not be executed. Usage:: + + OUTPUT_NODE = True + + From the docs: + + By default, a node is not considered an output. Set ``OUTPUT_NODE = True`` to specify that it is. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#output-node + """ + INPUT_IS_LIST: bool + """A flag indicating if this node implements the additional code necessary to deal with OUTPUT_IS_LIST nodes. + + All inputs of ``type`` will become ``list[type]``, regardless of how many items are passed in. This also affects ``check_lazy_status``. + + From the docs: + + A node can also override the default input behaviour and receive the whole list in a single call. This is done by setting a class attribute `INPUT_IS_LIST` to ``True``. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_lists#list-processing + """ + OUTPUT_IS_LIST: tuple[bool] + """A tuple indicating which node outputs are lists, but will be connected to nodes that expect individual items. + + Connected nodes that do not implement `INPUT_IS_LIST` will be executed once for every item in the list. + + A ``tuple[bool]``, where the items match those in `RETURN_TYPES`:: + + RETURN_TYPES = (IO.INT, IO.INT, IO.STRING) + OUTPUT_IS_LIST = (True, True, False) # The string output will be handled normally + + From the docs: + + In order to tell Comfy that the list being returned should not be wrapped, but treated as a series of data for sequential processing, + the node should provide a class attribute `OUTPUT_IS_LIST`, which is a ``tuple[bool]``, of the same length as `RETURN_TYPES`, + specifying which outputs which should be so treated. + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_lists#list-processing + """ + + RETURN_TYPES: tuple[IO] + """A tuple representing the outputs of this node. + + Usage:: + + RETURN_TYPES = (IO.INT, "INT", "CUSTOM_TYPE") + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#return-types + """ + RETURN_NAMES: tuple[str] + """The output slot names for each item in `RETURN_TYPES`, e.g. ``RETURN_NAMES = ("count", "filter_string")`` + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#return-names + """ + OUTPUT_TOOLTIPS: tuple[str] + """A tuple of strings to use as tooltips for node outputs, one for each item in `RETURN_TYPES`.""" + FUNCTION: str + """The name of the function to execute as a literal string, e.g. `FUNCTION = "execute"` + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_server_overview#function + """ + + +class CheckLazyMixin: + """Provides a basic check_lazy_status implementation and type hinting for nodes that use lazy inputs.""" + + def check_lazy_status(self, **kwargs) -> list[str]: + """Returns a list of input names that should be evaluated. + + This basic mixin impl. requires all inputs. + + :kwargs: All node inputs will be included here. If the input is ``None``, it should be assumed that it has not yet been evaluated. \ + When using ``INPUT_IS_LIST = True``, unevaluated will instead be ``(None,)``. + + Params should match the nodes execution ``FUNCTION`` (self, and all inputs by name). + Will be executed repeatedly until it returns an empty list, or all requested items were already evaluated (and sent as params). + + Comfy Docs: https://docs.comfy.org/essentials/custom_node_lazy_evaluation#defining-check-lazy-status + """ + + need = [name for name in kwargs if kwargs[name] is None] + return need diff --git a/comfy/controlnet.py b/comfy/controlnet.py index d2d2cefaa..7f5988377 100644 --- a/comfy/controlnet.py +++ b/comfy/controlnet.py @@ -35,6 +35,10 @@ import comfy.ldm.cascade.controlnet import comfy.cldm.mmdit import comfy.ldm.hydit.controlnet import comfy.ldm.flux.controlnet +import comfy.cldm.dit_embedder +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from comfy.hooks import HookGroup def broadcast_image_to(tensor, target_batch_size, batched_number): @@ -60,7 +64,7 @@ class StrengthType(Enum): LINEAR_UP = 2 class ControlBase: - def __init__(self, device=None): + def __init__(self): self.cond_hint_original = None self.cond_hint = None self.strength = 1.0 @@ -72,20 +76,26 @@ class ControlBase: self.compression_ratio = 8 self.upscale_algorithm = 'nearest-exact' self.extra_args = {} - - if device is None: - device = comfy.model_management.get_torch_device() - self.device = device self.previous_controlnet = None self.extra_conds = [] self.strength_type = StrengthType.CONSTANT + self.concat_mask = False + self.extra_concat_orig = [] + self.extra_concat = None + self.extra_hooks: HookGroup = None + self.preprocess_image = lambda a: a - def set_cond_hint(self, cond_hint, strength=1.0, timestep_percent_range=(0.0, 1.0), vae=None): + def set_cond_hint(self, cond_hint, strength=1.0, timestep_percent_range=(0.0, 1.0), vae=None, extra_concat=[]): self.cond_hint_original = cond_hint self.strength = strength self.timestep_percent_range = timestep_percent_range if self.latent_format is not None: + if vae is None: + logging.warning("WARNING: no VAE provided to the controlnet apply node when this controlnet requires one.") self.vae = vae + self.extra_concat_orig = extra_concat.copy() + if self.concat_mask and len(self.extra_concat_orig) == 0: + self.extra_concat_orig.append(torch.tensor([[[[1.0]]]])) return self def pre_run(self, model, percent_to_timestep_function): @@ -100,9 +110,9 @@ class ControlBase: def cleanup(self): if self.previous_controlnet is not None: self.previous_controlnet.cleanup() - if self.cond_hint is not None: - del self.cond_hint - self.cond_hint = None + + self.cond_hint = None + self.extra_concat = None self.timestep_range = None def get_models(self): @@ -110,6 +120,14 @@ class ControlBase: if self.previous_controlnet is not None: out += self.previous_controlnet.get_models() return out + + def get_extra_hooks(self): + out = [] + if self.extra_hooks is not None: + out.append(self.extra_hooks) + if self.previous_controlnet is not None: + out += self.previous_controlnet.get_extra_hooks() + return out def copy_to(self, c): c.cond_hint_original = self.cond_hint_original @@ -123,6 +141,10 @@ class ControlBase: c.vae = self.vae c.extra_conds = self.extra_conds.copy() c.strength_type = self.strength_type + c.concat_mask = self.concat_mask + c.extra_concat_orig = self.extra_concat_orig.copy() + c.extra_hooks = self.extra_hooks.clone() if self.extra_hooks else None + c.preprocess_image = self.preprocess_image def inference_memory_requirements(self, dtype): if self.previous_controlnet is not None: @@ -175,8 +197,8 @@ class ControlBase: class ControlNet(ControlBase): - def __init__(self, control_model=None, global_average_pooling=False, compression_ratio=8, latent_format=None, device=None, load_device=None, manual_cast_dtype=None, extra_conds=["y"], strength_type=StrengthType.CONSTANT): - super().__init__(device) + def __init__(self, control_model=None, global_average_pooling=False, compression_ratio=8, latent_format=None, load_device=None, manual_cast_dtype=None, extra_conds=["y"], strength_type=StrengthType.CONSTANT, concat_mask=False, preprocess_image=lambda a: a): + super().__init__() self.control_model = control_model self.load_device = load_device if control_model is not None: @@ -189,11 +211,13 @@ class ControlNet(ControlBase): self.latent_format = latent_format self.extra_conds += extra_conds self.strength_type = strength_type + self.concat_mask = concat_mask + self.preprocess_image = preprocess_image - def get_control(self, x_noisy, t, cond, batched_number): + def get_control(self, x_noisy, t, cond, batched_number, transformer_options): control_prev = None if self.previous_controlnet is not None: - control_prev = self.previous_controlnet.get_control(x_noisy, t, cond, batched_number) + control_prev = self.previous_controlnet.get_control(x_noisy, t, cond, batched_number, transformer_options) if self.timestep_range is not None: if t[0] > self.timestep_range[0] or t[0] < self.timestep_range[1]: @@ -213,14 +237,26 @@ class ControlNet(ControlBase): compression_ratio = self.compression_ratio if self.vae is not None: compression_ratio *= self.vae.downscale_ratio + else: + if self.latent_format is not None: + raise ValueError("This Controlnet needs a VAE but none was provided, please use a ControlNetApply node with a VAE input and connect it.") self.cond_hint = comfy.utils.common_upscale(self.cond_hint_original, x_noisy.shape[3] * compression_ratio, x_noisy.shape[2] * compression_ratio, self.upscale_algorithm, "center") + self.cond_hint = self.preprocess_image(self.cond_hint) if self.vae is not None: loaded_models = comfy.model_management.loaded_models(only_currently_used=True) self.cond_hint = self.vae.encode(self.cond_hint.movedim(1, -1)) comfy.model_management.load_models_gpu(loaded_models) if self.latent_format is not None: self.cond_hint = self.latent_format.process_in(self.cond_hint) - self.cond_hint = self.cond_hint.to(device=self.device, dtype=dtype) + if len(self.extra_concat_orig) > 0: + to_concat = [] + for c in self.extra_concat_orig: + c = c.to(self.cond_hint.device) + c = comfy.utils.common_upscale(c, self.cond_hint.shape[3], self.cond_hint.shape[2], self.upscale_algorithm, "center") + to_concat.append(comfy.utils.repeat_to_batch_size(c, self.cond_hint.shape[0])) + self.cond_hint = torch.cat([self.cond_hint] + to_concat, dim=1) + + self.cond_hint = self.cond_hint.to(device=x_noisy.device, dtype=dtype) if x_noisy.shape[0] != self.cond_hint.shape[0]: self.cond_hint = broadcast_image_to(self.cond_hint, x_noisy.shape[0], batched_number) @@ -261,7 +297,6 @@ class ControlLoraOps: class Linear(torch.nn.Module, comfy.ops.CastWeightBiasOp): def __init__(self, in_features: int, out_features: int, bias: bool = True, device=None, dtype=None) -> None: - factory_kwargs = {'device': device, 'dtype': dtype} super().__init__() self.in_features = in_features self.out_features = out_features @@ -319,8 +354,8 @@ class ControlLoraOps: class ControlLora(ControlNet): - def __init__(self, control_weights, global_average_pooling=False, device=None): - ControlBase.__init__(self, device) + def __init__(self, control_weights, global_average_pooling=False, model_options={}): #TODO? model_options + ControlBase.__init__(self) self.control_weights = control_weights self.global_average_pooling = global_average_pooling self.extra_conds += ["y"] @@ -346,7 +381,6 @@ class ControlLora(ControlNet): self.control_model.to(comfy.model_management.get_torch_device()) diffusion_model = model.diffusion_model sd = diffusion_model.state_dict() - cm = self.control_model.state_dict() for k in sd: weight = sd[k] @@ -376,19 +410,25 @@ class ControlLora(ControlNet): def inference_memory_requirements(self, dtype): return comfy.utils.calculate_parameters(self.control_weights) * comfy.model_management.dtype_size(dtype) + ControlBase.inference_memory_requirements(self, dtype) -def controlnet_config(sd): +def controlnet_config(sd, model_options={}): model_config = comfy.model_detection.model_config_from_unet(sd, "", True) - supported_inference_dtypes = model_config.supported_inference_dtypes + unet_dtype = model_options.get("dtype", None) + if unet_dtype is None: + weight_dtype = comfy.utils.weight_dtype(sd) + + supported_inference_dtypes = list(model_config.supported_inference_dtypes) + if weight_dtype is not None: + supported_inference_dtypes.append(weight_dtype) + + unet_dtype = comfy.model_management.unet_dtype(model_params=-1, supported_dtypes=supported_inference_dtypes) - controlnet_config = model_config.unet_config - unet_dtype = comfy.model_management.unet_dtype(supported_dtypes=supported_inference_dtypes) load_device = comfy.model_management.get_torch_device() manual_cast_dtype = comfy.model_management.unet_manual_cast(unet_dtype, load_device) - if manual_cast_dtype is not None: - operations = comfy.ops.manual_cast - else: - operations = comfy.ops.disable_weight_init + + operations = model_options.get("custom_operations", None) + if operations is None: + operations = comfy.ops.pick_operations(unet_dtype, manual_cast_dtype, disable_fast_fp8=True) offload_device = comfy.model_management.unet_offload_device() return model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device @@ -403,24 +443,106 @@ def controlnet_load_state_dict(control_model, sd): logging.debug("unexpected controlnet keys: {}".format(unexpected)) return control_model -def load_controlnet_mmdit(sd): + +def load_controlnet_mmdit(sd, model_options={}): new_sd = comfy.model_detection.convert_diffusers_mmdit(sd, "") - model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(new_sd) + model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(new_sd, model_options=model_options) num_blocks = comfy.model_detection.count_blocks(new_sd, 'joint_blocks.{}.') for k in sd: new_sd[k] = sd[k] - control_model = comfy.cldm.mmdit.ControlNet(num_blocks=num_blocks, operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) + concat_mask = False + control_latent_channels = new_sd.get("pos_embed_input.proj.weight").shape[1] + if control_latent_channels == 17: #inpaint controlnet + concat_mask = True + + control_model = comfy.cldm.mmdit.ControlNet(num_blocks=num_blocks, control_latent_channels=control_latent_channels, operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) control_model = controlnet_load_state_dict(control_model, new_sd) latent_format = comfy.latent_formats.SD3() latent_format.shift_factor = 0 #SD3 controlnet weirdness - control = ControlNet(control_model, compression_ratio=1, latent_format=latent_format, load_device=load_device, manual_cast_dtype=manual_cast_dtype) + control = ControlNet(control_model, compression_ratio=1, latent_format=latent_format, concat_mask=concat_mask, load_device=load_device, manual_cast_dtype=manual_cast_dtype) return control -def load_controlnet_hunyuandit(controlnet_data): - model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(controlnet_data) +class ControlNetSD35(ControlNet): + def pre_run(self, model, percent_to_timestep_function): + if self.control_model.double_y_emb: + missing, unexpected = self.control_model.orig_y_embedder.load_state_dict(model.diffusion_model.y_embedder.state_dict(), strict=False) + else: + missing, unexpected = self.control_model.x_embedder.load_state_dict(model.diffusion_model.x_embedder.state_dict(), strict=False) + super().pre_run(model, percent_to_timestep_function) + + def copy(self): + c = ControlNetSD35(None, global_average_pooling=self.global_average_pooling, load_device=self.load_device, manual_cast_dtype=self.manual_cast_dtype) + c.control_model = self.control_model + c.control_model_wrapped = self.control_model_wrapped + self.copy_to(c) + return c + +def load_controlnet_sd35(sd, model_options={}): + control_type = -1 + if "control_type" in sd: + control_type = round(sd.pop("control_type").item()) + + # blur_cnet = control_type == 0 + canny_cnet = control_type == 1 + depth_cnet = control_type == 2 + + new_sd = {} + for k in comfy.utils.MMDIT_MAP_BASIC: + if k[1] in sd: + new_sd[k[0]] = sd.pop(k[1]) + for k in sd: + new_sd[k] = sd[k] + sd = new_sd + + y_emb_shape = sd["y_embedder.mlp.0.weight"].shape + depth = y_emb_shape[0] // 64 + hidden_size = 64 * depth + num_heads = depth + head_dim = hidden_size // num_heads + num_blocks = comfy.model_detection.count_blocks(new_sd, 'transformer_blocks.{}.') + + load_device = comfy.model_management.get_torch_device() + offload_device = comfy.model_management.unet_offload_device() + unet_dtype = comfy.model_management.unet_dtype(model_params=-1) + + manual_cast_dtype = comfy.model_management.unet_manual_cast(unet_dtype, load_device) + + operations = model_options.get("custom_operations", None) + if operations is None: + operations = comfy.ops.pick_operations(unet_dtype, manual_cast_dtype, disable_fast_fp8=True) + + control_model = comfy.cldm.dit_embedder.ControlNetEmbedder(img_size=None, + patch_size=2, + in_chans=16, + num_layers=num_blocks, + main_model_double=depth, + double_y_emb=y_emb_shape[0] == y_emb_shape[1], + attention_head_dim=head_dim, + num_attention_heads=num_heads, + adm_in_channels=2048, + device=offload_device, + dtype=unet_dtype, + operations=operations) + + control_model = controlnet_load_state_dict(control_model, sd) + + latent_format = comfy.latent_formats.SD3() + preprocess_image = lambda a: a + if canny_cnet: + preprocess_image = lambda a: (a * 255 * 0.5 + 0.5) + elif depth_cnet: + preprocess_image = lambda a: 1.0 - a + + control = ControlNetSD35(control_model, compression_ratio=1, latent_format=latent_format, load_device=load_device, manual_cast_dtype=manual_cast_dtype, preprocess_image=preprocess_image) + return control + + + +def load_controlnet_hunyuandit(controlnet_data, model_options={}): + model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(controlnet_data, model_options=model_options) control_model = comfy.ldm.hydit.controlnet.HunYuanControlNet(operations=operations, device=offload_device, dtype=unet_dtype) control_model = controlnet_load_state_dict(control_model, controlnet_data) @@ -430,17 +552,17 @@ def load_controlnet_hunyuandit(controlnet_data): control = ControlNet(control_model, compression_ratio=1, latent_format=latent_format, load_device=load_device, manual_cast_dtype=manual_cast_dtype, extra_conds=extra_conds, strength_type=StrengthType.CONSTANT) return control -def load_controlnet_flux_xlabs(sd): - model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(sd) - control_model = comfy.ldm.flux.controlnet.ControlNetFlux(operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) +def load_controlnet_flux_xlabs_mistoline(sd, mistoline=False, model_options={}): + model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(sd, model_options=model_options) + control_model = comfy.ldm.flux.controlnet.ControlNetFlux(mistoline=mistoline, operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) control_model = controlnet_load_state_dict(control_model, sd) extra_conds = ['y', 'guidance'] control = ControlNet(control_model, load_device=load_device, manual_cast_dtype=manual_cast_dtype, extra_conds=extra_conds) return control -def load_controlnet_flux_instantx(sd): +def load_controlnet_flux_instantx(sd, model_options={}): new_sd = comfy.model_detection.convert_diffusers_mmdit(sd, "") - model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(new_sd) + model_config, operations, load_device, unet_dtype, manual_cast_dtype, offload_device = controlnet_config(new_sd, model_options=model_options) for k in sd: new_sd[k] = sd[k] @@ -449,21 +571,30 @@ def load_controlnet_flux_instantx(sd): if union_cnet in new_sd: num_union_modes = new_sd[union_cnet].shape[0] - control_model = comfy.ldm.flux.controlnet.ControlNetFlux(latent_input=True, num_union_modes=num_union_modes, operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) + control_latent_channels = new_sd.get("pos_embed_input.weight").shape[1] // 4 + concat_mask = False + if control_latent_channels == 17: + concat_mask = True + + control_model = comfy.ldm.flux.controlnet.ControlNetFlux(latent_input=True, num_union_modes=num_union_modes, control_latent_channels=control_latent_channels, operations=operations, device=offload_device, dtype=unet_dtype, **model_config.unet_config) control_model = controlnet_load_state_dict(control_model, new_sd) latent_format = comfy.latent_formats.Flux() extra_conds = ['y', 'guidance'] - control = ControlNet(control_model, compression_ratio=1, latent_format=latent_format, load_device=load_device, manual_cast_dtype=manual_cast_dtype, extra_conds=extra_conds) + control = ControlNet(control_model, compression_ratio=1, latent_format=latent_format, concat_mask=concat_mask, load_device=load_device, manual_cast_dtype=manual_cast_dtype, extra_conds=extra_conds) return control -def load_controlnet(ckpt_path, model=None): - controlnet_data = comfy.utils.load_torch_file(ckpt_path, safe_load=True) +def convert_mistoline(sd): + return comfy.utils.state_dict_prefix_replace(sd, {"single_controlnet_blocks.": "controlnet_single_blocks."}) + + +def load_controlnet_state_dict(state_dict, model=None, model_options={}): + controlnet_data = state_dict if 'after_proj_list.18.bias' in controlnet_data.keys(): #Hunyuan DiT - return load_controlnet_hunyuandit(controlnet_data) + return load_controlnet_hunyuandit(controlnet_data, model_options=model_options) if "lora_controlnet" in controlnet_data: - return ControlLora(controlnet_data) + return ControlLora(controlnet_data, model_options=model_options) controlnet_config = None supported_inference_dtypes = None @@ -518,13 +649,18 @@ def load_controlnet(ckpt_path, model=None): if len(leftover_keys) > 0: logging.warning("leftover keys: {}".format(leftover_keys)) controlnet_data = new_sd - elif "controlnet_blocks.0.weight" in controlnet_data: #SD3 diffusers format + elif "controlnet_blocks.0.weight" in controlnet_data: if "double_blocks.0.img_attn.norm.key_norm.scale" in controlnet_data: - return load_controlnet_flux_xlabs(controlnet_data) + return load_controlnet_flux_xlabs_mistoline(controlnet_data, model_options=model_options) elif "pos_embed_input.proj.weight" in controlnet_data: - return load_controlnet_mmdit(controlnet_data) + if "transformer_blocks.0.adaLN_modulation.1.bias" in controlnet_data: + return load_controlnet_sd35(controlnet_data, model_options=model_options) #Stability sd3.5 format + else: + return load_controlnet_mmdit(controlnet_data, model_options=model_options) #SD3 diffusers controlnet elif "controlnet_x_embedder.weight" in controlnet_data: - return load_controlnet_flux_instantx(controlnet_data) + return load_controlnet_flux_instantx(controlnet_data, model_options=model_options) + elif "controlnet_blocks.0.linear.weight" in controlnet_data: #mistoline flux + return load_controlnet_flux_xlabs_mistoline(convert_mistoline(controlnet_data), mistoline=True, model_options=model_options) pth_key = 'control_model.zero_convs.0.0.weight' pth = False @@ -536,25 +672,36 @@ def load_controlnet(ckpt_path, model=None): elif key in controlnet_data: prefix = "" else: - net = load_t2i_adapter(controlnet_data) + net = load_t2i_adapter(controlnet_data, model_options=model_options) if net is None: - logging.error("error checkpoint does not contain controlnet or t2i adapter data {}".format(ckpt_path)) + logging.error("error could not detect control model type.") return net if controlnet_config is None: model_config = comfy.model_detection.model_config_from_unet(controlnet_data, prefix, True) - supported_inference_dtypes = model_config.supported_inference_dtypes + supported_inference_dtypes = list(model_config.supported_inference_dtypes) controlnet_config = model_config.unet_config + unet_dtype = model_options.get("dtype", None) + if unet_dtype is None: + weight_dtype = comfy.utils.weight_dtype(controlnet_data) + + if supported_inference_dtypes is None: + supported_inference_dtypes = [comfy.model_management.unet_dtype()] + + if weight_dtype is not None: + supported_inference_dtypes.append(weight_dtype) + + unet_dtype = comfy.model_management.unet_dtype(model_params=-1, supported_dtypes=supported_inference_dtypes) + load_device = comfy.model_management.get_torch_device() - if supported_inference_dtypes is None: - unet_dtype = comfy.model_management.unet_dtype() - else: - unet_dtype = comfy.model_management.unet_dtype(supported_dtypes=supported_inference_dtypes) manual_cast_dtype = comfy.model_management.unet_manual_cast(unet_dtype, load_device) - if manual_cast_dtype is not None: - controlnet_config["operations"] = comfy.ops.manual_cast + operations = model_options.get("custom_operations", None) + if operations is None: + operations = comfy.ops.pick_operations(unet_dtype, manual_cast_dtype) + + controlnet_config["operations"] = operations controlnet_config["dtype"] = unet_dtype controlnet_config["device"] = comfy.model_management.unet_offload_device() controlnet_config.pop("out_channels") @@ -590,22 +737,32 @@ def load_controlnet(ckpt_path, model=None): if len(unexpected) > 0: logging.debug("unexpected controlnet keys: {}".format(unexpected)) - global_average_pooling = False - filename = os.path.splitext(ckpt_path)[0] - if filename.endswith("_shuffle") or filename.endswith("_shuffle_fp16"): #TODO: smarter way of enabling global_average_pooling - global_average_pooling = True - + global_average_pooling = model_options.get("global_average_pooling", False) control = ControlNet(control_model, global_average_pooling=global_average_pooling, load_device=load_device, manual_cast_dtype=manual_cast_dtype) return control +def load_controlnet(ckpt_path, model=None, model_options={}): + if "global_average_pooling" not in model_options: + filename = os.path.splitext(ckpt_path)[0] + if filename.endswith("_shuffle") or filename.endswith("_shuffle_fp16"): #TODO: smarter way of enabling global_average_pooling + model_options["global_average_pooling"] = True + + cnet = load_controlnet_state_dict(comfy.utils.load_torch_file(ckpt_path, safe_load=True), model=model, model_options=model_options) + if cnet is None: + logging.error("error checkpoint does not contain controlnet or t2i adapter data {}".format(ckpt_path)) + return cnet + class T2IAdapter(ControlBase): def __init__(self, t2i_model, channels_in, compression_ratio, upscale_algorithm, device=None): - super().__init__(device) + super().__init__() self.t2i_model = t2i_model self.channels_in = channels_in self.control_input = None self.compression_ratio = compression_ratio self.upscale_algorithm = upscale_algorithm + if device is None: + device = comfy.model_management.get_torch_device() + self.device = device def scale_image_to(self, width, height): unshuffle_amount = self.t2i_model.unshuffle_amount @@ -613,10 +770,10 @@ class T2IAdapter(ControlBase): height = math.ceil(height / unshuffle_amount) * unshuffle_amount return width, height - def get_control(self, x_noisy, t, cond, batched_number): + def get_control(self, x_noisy, t, cond, batched_number, transformer_options): control_prev = None if self.previous_controlnet is not None: - control_prev = self.previous_controlnet.get_control(x_noisy, t, cond, batched_number) + control_prev = self.previous_controlnet.get_control(x_noisy, t, cond, batched_number, transformer_options) if self.timestep_range is not None: if t[0] > self.timestep_range[0] or t[0] < self.timestep_range[1]: @@ -653,7 +810,7 @@ class T2IAdapter(ControlBase): self.copy_to(c) return c -def load_t2i_adapter(t2i_data): +def load_t2i_adapter(t2i_data, model_options={}): #TODO: model_options compression_ratio = 8 upscale_algorithm = 'nearest-exact' @@ -664,7 +821,7 @@ def load_t2i_adapter(t2i_data): for i in range(4): for j in range(2): prefix_replace["adapter.body.{}.resnets.{}.".format(i, j)] = "body.{}.".format(i * 2 + j) - prefix_replace["adapter.body.{}.".format(i, j)] = "body.{}.".format(i * 2) + prefix_replace["adapter.body.{}.".format(i, )] = "body.{}.".format(i * 2) prefix_replace["adapter."] = "" t2i_data = comfy.utils.state_dict_prefix_replace(t2i_data, prefix_replace) keys = t2i_data.keys() diff --git a/comfy/diffusers_convert.py b/comfy/diffusers_convert.py index ed2a45fea..26e8d96d5 100644 --- a/comfy/diffusers_convert.py +++ b/comfy/diffusers_convert.py @@ -157,16 +157,23 @@ vae_conversion_map_attn = [ ] -def reshape_weight_for_sd(w): +def reshape_weight_for_sd(w, conv3d=False): # convert HF linear weights to SD conv2d weights - return w.reshape(*w.shape, 1, 1) + if conv3d: + return w.reshape(*w.shape, 1, 1, 1) + else: + return w.reshape(*w.shape, 1, 1) def convert_vae_state_dict(vae_state_dict): mapping = {k: k for k in vae_state_dict.keys()} + conv3d = False for k, v in mapping.items(): for sd_part, hf_part in vae_conversion_map: v = v.replace(hf_part, sd_part) + if v.endswith(".conv.weight"): + if not conv3d and vae_state_dict[k].ndim == 5: + conv3d = True mapping[k] = v for k, v in mapping.items(): if "attentions" in k: @@ -179,7 +186,7 @@ def convert_vae_state_dict(vae_state_dict): for weight_name in weights_to_convert: if f"mid.attn_1.{weight_name}.weight" in k: logging.debug(f"Reshaping {k} for SD format") - new_state_dict[k] = reshape_weight_for_sd(v) + new_state_dict[k] = reshape_weight_for_sd(v, conv3d=conv3d) return new_state_dict diff --git a/comfy/extra_samplers/uni_pc.py b/comfy/extra_samplers/uni_pc.py index a30d1d03f..18ff92663 100644 --- a/comfy/extra_samplers/uni_pc.py +++ b/comfy/extra_samplers/uni_pc.py @@ -1,10 +1,9 @@ #code taken from: https://github.com/wl-zhao/UniPC and modified import torch -import torch.nn.functional as F import math -from tqdm.auto import trange, tqdm +from tqdm.auto import trange class NoiseScheduleVP: @@ -16,7 +15,7 @@ class NoiseScheduleVP: continuous_beta_0=0.1, continuous_beta_1=20., ): - """Create a wrapper class for the forward SDE (VP type). + r"""Create a wrapper class for the forward SDE (VP type). *** Update: We support discrete-time diffusion models by implementing a picewise linear interpolation for log_alpha_t. @@ -704,7 +703,6 @@ class UniPC: ): # t_0 = 1. / self.noise_schedule.total_N if t_end is None else t_end # t_T = self.noise_schedule.T if t_start is None else t_start - device = x.device steps = len(timesteps) - 1 if method == 'multistep': assert steps >= order diff --git a/comfy/float.py b/comfy/float.py index 57fd07099..521316fd2 100644 --- a/comfy/float.py +++ b/comfy/float.py @@ -1,5 +1,4 @@ import torch -import math def calc_mantissa(abs_x, exponent, normal_mask, MANTISSA_BITS, EXPONENT_BIAS, generator=None): mantissa_scaled = torch.where( @@ -41,9 +40,10 @@ def manual_stochastic_round_to_float8(x, dtype, generator=None): (2.0 ** (exponent - EXPONENT_BIAS)) * (1.0 + abs_x), (2.0 ** (-EXPONENT_BIAS + 1)) * abs_x ) - del abs_x - return sign.to(dtype=dtype) + inf = torch.finfo(dtype) + torch.clamp(sign, min=inf.min, max=inf.max, out=sign) + return sign @@ -57,6 +57,11 @@ def stochastic_rounding(value, dtype, seed=0): if dtype == torch.float8_e4m3fn or dtype == torch.float8_e5m2: generator = torch.Generator(device=value.device) generator.manual_seed(seed) - return manual_stochastic_round_to_float8(value, dtype, generator=generator) + output = torch.empty_like(value, dtype=dtype) + num_slices = max(1, (value.numel() / (4096 * 4096))) + slice_size = max(1, round(value.shape[0] / num_slices)) + for i in range(0, value.shape[0], slice_size): + output[i:i+slice_size].copy_(manual_stochastic_round_to_float8(value[i:i+slice_size], dtype, generator=generator)) + return output return value.to(dtype=dtype) diff --git a/comfy/gligen.py b/comfy/gligen.py index 592522767..161d8a5e5 100644 --- a/comfy/gligen.py +++ b/comfy/gligen.py @@ -1,3 +1,4 @@ +import math import torch from torch import nn from .ldm.modules.attention import CrossAttention diff --git a/comfy/hooks.py b/comfy/hooks.py new file mode 100644 index 000000000..356b7d65b --- /dev/null +++ b/comfy/hooks.py @@ -0,0 +1,690 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Callable +import enum +import math +import torch +import numpy as np +import itertools + +if TYPE_CHECKING: + from comfy.model_patcher import ModelPatcher, PatcherInjection + from comfy.model_base import BaseModel + from comfy.sd import CLIP +import comfy.lora +import comfy.model_management +import comfy.patcher_extension +from node_helpers import conditioning_set_values + +class EnumHookMode(enum.Enum): + MinVram = "minvram" + MaxSpeed = "maxspeed" + +class EnumHookType(enum.Enum): + Weight = "weight" + Patch = "patch" + ObjectPatch = "object_patch" + AddModels = "add_models" + Callbacks = "callbacks" + Wrappers = "wrappers" + SetInjections = "add_injections" + +class EnumWeightTarget(enum.Enum): + Model = "model" + Clip = "clip" + +class _HookRef: + pass + +# NOTE: this is an example of how the should_register function should look +def default_should_register(hook: 'Hook', model: 'ModelPatcher', model_options: dict, target: EnumWeightTarget, registered: list[Hook]): + return True + + +class Hook: + def __init__(self, hook_type: EnumHookType=None, hook_ref: _HookRef=None, hook_id: str=None, + hook_keyframe: 'HookKeyframeGroup'=None): + self.hook_type = hook_type + self.hook_ref = hook_ref if hook_ref else _HookRef() + self.hook_id = hook_id + self.hook_keyframe = hook_keyframe if hook_keyframe else HookKeyframeGroup() + self.custom_should_register = default_should_register + self.auto_apply_to_nonpositive = False + + @property + def strength(self): + return self.hook_keyframe.strength + + def initialize_timesteps(self, model: 'BaseModel'): + self.reset() + self.hook_keyframe.initialize_timesteps(model) + + def reset(self): + self.hook_keyframe.reset() + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: Hook = subtype() + c.hook_type = self.hook_type + c.hook_ref = self.hook_ref + c.hook_id = self.hook_id + c.hook_keyframe = self.hook_keyframe + c.custom_should_register = self.custom_should_register + # TODO: make this do something + c.auto_apply_to_nonpositive = self.auto_apply_to_nonpositive + return c + + def should_register(self, model: 'ModelPatcher', model_options: dict, target: EnumWeightTarget, registered: list[Hook]): + return self.custom_should_register(self, model, model_options, target, registered) + + def add_hook_patches(self, model: 'ModelPatcher', model_options: dict, target: EnumWeightTarget, registered: list[Hook]): + raise NotImplementedError("add_hook_patches should be defined for Hook subclasses") + + def on_apply(self, model: 'ModelPatcher', transformer_options: dict[str]): + pass + + def on_unapply(self, model: 'ModelPatcher', transformer_options: dict[str]): + pass + + def __eq__(self, other: 'Hook'): + return self.__class__ == other.__class__ and self.hook_ref == other.hook_ref + + def __hash__(self): + return hash(self.hook_ref) + +class WeightHook(Hook): + def __init__(self, strength_model=1.0, strength_clip=1.0): + super().__init__(hook_type=EnumHookType.Weight) + self.weights: dict = None + self.weights_clip: dict = None + self.need_weight_init = True + self._strength_model = strength_model + self._strength_clip = strength_clip + + @property + def strength_model(self): + return self._strength_model * self.strength + + @property + def strength_clip(self): + return self._strength_clip * self.strength + + def add_hook_patches(self, model: 'ModelPatcher', model_options: dict, target: EnumWeightTarget, registered: list[Hook]): + if not self.should_register(model, model_options, target, registered): + return False + weights = None + if target == EnumWeightTarget.Model: + strength = self._strength_model + else: + strength = self._strength_clip + + if self.need_weight_init: + key_map = {} + if target == EnumWeightTarget.Model: + key_map = comfy.lora.model_lora_keys_unet(model.model, key_map) + else: + key_map = comfy.lora.model_lora_keys_clip(model.model, key_map) + weights = comfy.lora.load_lora(self.weights, key_map, log_missing=False) + else: + if target == EnumWeightTarget.Model: + weights = self.weights + else: + weights = self.weights_clip + model.add_hook_patches(hook=self, patches=weights, strength_patch=strength) + registered.append(self) + return True + # TODO: add logs about any keys that were not applied + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: WeightHook = super().clone(subtype) + c.weights = self.weights + c.weights_clip = self.weights_clip + c.need_weight_init = self.need_weight_init + c._strength_model = self._strength_model + c._strength_clip = self._strength_clip + return c + +class PatchHook(Hook): + def __init__(self): + super().__init__(hook_type=EnumHookType.Patch) + self.patches: dict = None + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: PatchHook = super().clone(subtype) + c.patches = self.patches + return c + # TODO: add functionality + +class ObjectPatchHook(Hook): + def __init__(self): + super().__init__(hook_type=EnumHookType.ObjectPatch) + self.object_patches: dict = None + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: ObjectPatchHook = super().clone(subtype) + c.object_patches = self.object_patches + return c + # TODO: add functionality + +class AddModelsHook(Hook): + def __init__(self, key: str=None, models: list['ModelPatcher']=None): + super().__init__(hook_type=EnumHookType.AddModels) + self.key = key + self.models = models + self.append_when_same = True + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: AddModelsHook = super().clone(subtype) + c.key = self.key + c.models = self.models.copy() if self.models else self.models + c.append_when_same = self.append_when_same + return c + # TODO: add functionality + +class CallbackHook(Hook): + def __init__(self, key: str=None, callback: Callable=None): + super().__init__(hook_type=EnumHookType.Callbacks) + self.key = key + self.callback = callback + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: CallbackHook = super().clone(subtype) + c.key = self.key + c.callback = self.callback + return c + # TODO: add functionality + +class WrapperHook(Hook): + def __init__(self, wrappers_dict: dict[str, dict[str, dict[str, list[Callable]]]]=None): + super().__init__(hook_type=EnumHookType.Wrappers) + self.wrappers_dict = wrappers_dict + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: WrapperHook = super().clone(subtype) + c.wrappers_dict = self.wrappers_dict + return c + + def add_hook_patches(self, model: 'ModelPatcher', model_options: dict, target: EnumWeightTarget, registered: list[Hook]): + if not self.should_register(model, model_options, target, registered): + return False + add_model_options = {"transformer_options": self.wrappers_dict} + comfy.patcher_extension.merge_nested_dicts(model_options, add_model_options, copy_dict1=False) + registered.append(self) + return True + +class SetInjectionsHook(Hook): + def __init__(self, key: str=None, injections: list['PatcherInjection']=None): + super().__init__(hook_type=EnumHookType.SetInjections) + self.key = key + self.injections = injections + + def clone(self, subtype: Callable=None): + if subtype is None: + subtype = type(self) + c: SetInjectionsHook = super().clone(subtype) + c.key = self.key + c.injections = self.injections.copy() if self.injections else self.injections + return c + + def add_hook_injections(self, model: 'ModelPatcher'): + # TODO: add functionality + pass + +class HookGroup: + def __init__(self): + self.hooks: list[Hook] = [] + + def add(self, hook: Hook): + if hook not in self.hooks: + self.hooks.append(hook) + + def contains(self, hook: Hook): + return hook in self.hooks + + def clone(self): + c = HookGroup() + for hook in self.hooks: + c.add(hook.clone()) + return c + + def clone_and_combine(self, other: 'HookGroup'): + c = self.clone() + if other is not None: + for hook in other.hooks: + c.add(hook.clone()) + return c + + def set_keyframes_on_hooks(self, hook_kf: 'HookKeyframeGroup'): + if hook_kf is None: + hook_kf = HookKeyframeGroup() + else: + hook_kf = hook_kf.clone() + for hook in self.hooks: + hook.hook_keyframe = hook_kf + + def get_dict_repr(self): + d: dict[EnumHookType, dict[Hook, None]] = {} + for hook in self.hooks: + with_type = d.setdefault(hook.hook_type, {}) + with_type[hook] = None + return d + + def get_hooks_for_clip_schedule(self): + scheduled_hooks: dict[WeightHook, list[tuple[tuple[float,float], HookKeyframe]]] = {} + for hook in self.hooks: + # only care about WeightHooks, for now + if hook.hook_type == EnumHookType.Weight: + hook_schedule = [] + # if no hook keyframes, assign default value + if len(hook.hook_keyframe.keyframes) == 0: + hook_schedule.append(((0.0, 1.0), None)) + scheduled_hooks[hook] = hook_schedule + continue + # find ranges of values + prev_keyframe = hook.hook_keyframe.keyframes[0] + for keyframe in hook.hook_keyframe.keyframes: + if keyframe.start_percent > prev_keyframe.start_percent and not math.isclose(keyframe.strength, prev_keyframe.strength): + hook_schedule.append(((prev_keyframe.start_percent, keyframe.start_percent), prev_keyframe)) + prev_keyframe = keyframe + elif keyframe.start_percent == prev_keyframe.start_percent: + prev_keyframe = keyframe + # create final range, assuming last start_percent was not 1.0 + if not math.isclose(prev_keyframe.start_percent, 1.0): + hook_schedule.append(((prev_keyframe.start_percent, 1.0), prev_keyframe)) + scheduled_hooks[hook] = hook_schedule + # hooks should not have their schedules in a list of tuples + all_ranges: list[tuple[float, float]] = [] + for range_kfs in scheduled_hooks.values(): + for t_range, keyframe in range_kfs: + all_ranges.append(t_range) + # turn list of ranges into boundaries + boundaries_set = set(itertools.chain.from_iterable(all_ranges)) + boundaries_set.add(0.0) + boundaries = sorted(boundaries_set) + real_ranges = [(boundaries[i], boundaries[i + 1]) for i in range(len(boundaries) - 1)] + # with real ranges defined, give appropriate hooks w/ keyframes for each range + scheduled_keyframes: list[tuple[tuple[float,float], list[tuple[WeightHook, HookKeyframe]]]] = [] + for t_range in real_ranges: + hooks_schedule = [] + for hook, val in scheduled_hooks.items(): + keyframe = None + # check if is a keyframe that works for the current t_range + for stored_range, stored_kf in val: + # if stored start is less than current end, then fits - give it assigned keyframe + if stored_range[0] < t_range[1] and stored_range[1] > t_range[0]: + keyframe = stored_kf + break + hooks_schedule.append((hook, keyframe)) + scheduled_keyframes.append((t_range, hooks_schedule)) + return scheduled_keyframes + + def reset(self): + for hook in self.hooks: + hook.reset() + + @staticmethod + def combine_all_hooks(hooks_list: list['HookGroup'], require_count=0) -> 'HookGroup': + actual: list[HookGroup] = [] + for group in hooks_list: + if group is not None: + actual.append(group) + if len(actual) < require_count: + raise Exception(f"Need at least {require_count} hooks to combine, but only had {len(actual)}.") + # if no hooks, then return None + if len(actual) == 0: + return None + # if only 1 hook, just return itself without cloning + elif len(actual) == 1: + return actual[0] + final_hook: HookGroup = None + for hook in actual: + if final_hook is None: + final_hook = hook.clone() + else: + final_hook = final_hook.clone_and_combine(hook) + return final_hook + + +class HookKeyframe: + def __init__(self, strength: float, start_percent=0.0, guarantee_steps=1): + self.strength = strength + # scheduling + self.start_percent = float(start_percent) + self.start_t = 999999999.9 + self.guarantee_steps = guarantee_steps + + def clone(self): + c = HookKeyframe(strength=self.strength, + start_percent=self.start_percent, guarantee_steps=self.guarantee_steps) + c.start_t = self.start_t + return c + +class HookKeyframeGroup: + def __init__(self): + self.keyframes: list[HookKeyframe] = [] + self._current_keyframe: HookKeyframe = None + self._current_used_steps = 0 + self._current_index = 0 + self._current_strength = None + self._curr_t = -1. + + # properties shadow those of HookWeightsKeyframe + @property + def strength(self): + if self._current_keyframe is not None: + return self._current_keyframe.strength + return 1.0 + + def reset(self): + self._current_keyframe = None + self._current_used_steps = 0 + self._current_index = 0 + self._current_strength = None + self.curr_t = -1. + self._set_first_as_current() + + def add(self, keyframe: HookKeyframe): + # add to end of list, then sort + self.keyframes.append(keyframe) + self.keyframes = get_sorted_list_via_attr(self.keyframes, "start_percent") + self._set_first_as_current() + + def _set_first_as_current(self): + if len(self.keyframes) > 0: + self._current_keyframe = self.keyframes[0] + else: + self._current_keyframe = None + + def has_index(self, index: int): + return index >= 0 and index < len(self.keyframes) + + def is_empty(self): + return len(self.keyframes) == 0 + + def clone(self): + c = HookKeyframeGroup() + for keyframe in self.keyframes: + c.keyframes.append(keyframe.clone()) + c._set_first_as_current() + return c + + def initialize_timesteps(self, model: 'BaseModel'): + for keyframe in self.keyframes: + keyframe.start_t = model.model_sampling.percent_to_sigma(keyframe.start_percent) + + def prepare_current_keyframe(self, curr_t: float) -> bool: + if self.is_empty(): + return False + if curr_t == self._curr_t: + return False + prev_index = self._current_index + prev_strength = self._current_strength + # if met guaranteed steps, look for next keyframe in case need to switch + if self._current_used_steps >= self._current_keyframe.guarantee_steps: + # if has next index, loop through and see if need to switch + if self.has_index(self._current_index+1): + for i in range(self._current_index+1, len(self.keyframes)): + eval_c = self.keyframes[i] + # check if start_t is greater or equal to curr_t + # NOTE: t is in terms of sigmas, not percent, so bigger number = earlier step in sampling + if eval_c.start_t >= curr_t: + self._current_index = i + self._current_strength = eval_c.strength + self._current_keyframe = eval_c + self._current_used_steps = 0 + # if guarantee_steps greater than zero, stop searching for other keyframes + if self._current_keyframe.guarantee_steps > 0: + break + # if eval_c is outside the percent range, stop looking further + else: break + # update steps current context is used + self._current_used_steps += 1 + # update current timestep this was performed on + self._curr_t = curr_t + # return True if keyframe changed, False if no change + return prev_index != self._current_index and prev_strength != self._current_strength + + +class InterpolationMethod: + LINEAR = "linear" + EASE_IN = "ease_in" + EASE_OUT = "ease_out" + EASE_IN_OUT = "ease_in_out" + + _LIST = [LINEAR, EASE_IN, EASE_OUT, EASE_IN_OUT] + + @classmethod + def get_weights(cls, num_from: float, num_to: float, length: int, method: str, reverse=False): + diff = num_to - num_from + if method == cls.LINEAR: + weights = torch.linspace(num_from, num_to, length) + elif method == cls.EASE_IN: + index = torch.linspace(0, 1, length) + weights = diff * np.power(index, 2) + num_from + elif method == cls.EASE_OUT: + index = torch.linspace(0, 1, length) + weights = diff * (1 - np.power(1 - index, 2)) + num_from + elif method == cls.EASE_IN_OUT: + index = torch.linspace(0, 1, length) + weights = diff * ((1 - np.cos(index * np.pi)) / 2) + num_from + else: + raise ValueError(f"Unrecognized interpolation method '{method}'.") + if reverse: + weights = weights.flip(dims=(0,)) + return weights + +def get_sorted_list_via_attr(objects: list, attr: str) -> list: + if not objects: + return objects + elif len(objects) <= 1: + return [x for x in objects] + # now that we know we have to sort, do it following these rules: + # a) if objects have same value of attribute, maintain their relative order + # b) perform sorting of the groups of objects with same attributes + unique_attrs = {} + for o in objects: + val_attr = getattr(o, attr) + attr_list: list = unique_attrs.get(val_attr, list()) + attr_list.append(o) + if val_attr not in unique_attrs: + unique_attrs[val_attr] = attr_list + # now that we have the unique attr values grouped together in relative order, sort them by key + sorted_attrs = dict(sorted(unique_attrs.items())) + # now flatten out the dict into a list to return + sorted_list = [] + for object_list in sorted_attrs.values(): + sorted_list.extend(object_list) + return sorted_list + +def create_hook_lora(lora: dict[str, torch.Tensor], strength_model: float, strength_clip: float): + hook_group = HookGroup() + hook = WeightHook(strength_model=strength_model, strength_clip=strength_clip) + hook_group.add(hook) + hook.weights = lora + return hook_group + +def create_hook_model_as_lora(weights_model, weights_clip, strength_model: float, strength_clip: float): + hook_group = HookGroup() + hook = WeightHook(strength_model=strength_model, strength_clip=strength_clip) + hook_group.add(hook) + patches_model = None + patches_clip = None + if weights_model is not None: + patches_model = {} + for key in weights_model: + patches_model[key] = ("model_as_lora", (weights_model[key],)) + if weights_clip is not None: + patches_clip = {} + for key in weights_clip: + patches_clip[key] = ("model_as_lora", (weights_clip[key],)) + hook.weights = patches_model + hook.weights_clip = patches_clip + hook.need_weight_init = False + return hook_group + +def get_patch_weights_from_model(model: 'ModelPatcher', discard_model_sampling=True): + if model is None: + return None + patches_model: dict[str, torch.Tensor] = model.model.state_dict() + if discard_model_sampling: + # do not include ANY model_sampling components of the model that should act as a patch + for key in list(patches_model.keys()): + if key.startswith("model_sampling"): + patches_model.pop(key, None) + return patches_model + +# NOTE: this function shows how to register weight hooks directly on the ModelPatchers +def load_hook_lora_for_models(model: 'ModelPatcher', clip: 'CLIP', lora: dict[str, torch.Tensor], + strength_model: float, strength_clip: float): + key_map = {} + if model is not None: + key_map = comfy.lora.model_lora_keys_unet(model.model, key_map) + if clip is not None: + key_map = comfy.lora.model_lora_keys_clip(clip.cond_stage_model, key_map) + + hook_group = HookGroup() + hook = WeightHook() + hook_group.add(hook) + loaded: dict[str] = comfy.lora.load_lora(lora, key_map) + if model is not None: + new_modelpatcher = model.clone() + k = new_modelpatcher.add_hook_patches(hook=hook, patches=loaded, strength_patch=strength_model) + else: + k = () + new_modelpatcher = None + + if clip is not None: + new_clip = clip.clone() + k1 = new_clip.patcher.add_hook_patches(hook=hook, patches=loaded, strength_patch=strength_clip) + else: + k1 = () + new_clip = None + k = set(k) + k1 = set(k1) + for x in loaded: + if (x not in k) and (x not in k1): + print(f"NOT LOADED {x}") + return (new_modelpatcher, new_clip, hook_group) + +def _combine_hooks_from_values(c_dict: dict[str, HookGroup], values: dict[str, HookGroup], cache: dict[tuple[HookGroup, HookGroup], HookGroup]): + hooks_key = 'hooks' + # if hooks only exist in one dict, do what's needed so that it ends up in c_dict + if hooks_key not in values: + return + if hooks_key not in c_dict: + hooks_value = values.get(hooks_key, None) + if hooks_value is not None: + c_dict[hooks_key] = hooks_value + return + # otherwise, need to combine with minimum duplication via cache + hooks_tuple = (c_dict[hooks_key], values[hooks_key]) + cached_hooks = cache.get(hooks_tuple, None) + if cached_hooks is None: + new_hooks = hooks_tuple[0].clone_and_combine(hooks_tuple[1]) + cache[hooks_tuple] = new_hooks + c_dict[hooks_key] = new_hooks + else: + c_dict[hooks_key] = cache[hooks_tuple] + +def conditioning_set_values_with_hooks(conditioning, values={}, append_hooks=True): + c = [] + hooks_combine_cache: dict[tuple[HookGroup, HookGroup], HookGroup] = {} + for t in conditioning: + n = [t[0], t[1].copy()] + for k in values: + if append_hooks and k == 'hooks': + _combine_hooks_from_values(n[1], values, hooks_combine_cache) + else: + n[1][k] = values[k] + c.append(n) + + return c + +def set_hooks_for_conditioning(cond, hooks: HookGroup, append_hooks=True): + if hooks is None: + return cond + return conditioning_set_values_with_hooks(cond, {'hooks': hooks}, append_hooks=append_hooks) + +def set_timesteps_for_conditioning(cond, timestep_range: tuple[float,float]): + if timestep_range is None: + return cond + return conditioning_set_values(cond, {"start_percent": timestep_range[0], + "end_percent": timestep_range[1]}) + +def set_mask_for_conditioning(cond, mask: torch.Tensor, set_cond_area: str, strength: float): + if mask is None: + return cond + set_area_to_bounds = False + if set_cond_area != 'default': + set_area_to_bounds = True + if len(mask.shape) < 3: + mask = mask.unsqueeze(0) + return conditioning_set_values(cond, {'mask': mask, + 'set_area_to_bounds': set_area_to_bounds, + 'mask_strength': strength}) + +def combine_conditioning(conds: list): + combined_conds = [] + for cond in conds: + combined_conds.extend(cond) + return combined_conds + +def combine_with_new_conds(conds: list, new_conds: list): + combined_conds = [] + for c, new_c in zip(conds, new_conds): + combined_conds.append(combine_conditioning([c, new_c])) + return combined_conds + +def set_conds_props(conds: list, strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: HookGroup=None, timesteps_range: tuple[float,float]=None, append_hooks=True): + final_conds = [] + for c in conds: + # first, apply lora_hook to conditioning, if provided + c = set_hooks_for_conditioning(c, hooks, append_hooks=append_hooks) + # next, apply mask to conditioning + c = set_mask_for_conditioning(cond=c, mask=mask, strength=strength, set_cond_area=set_cond_area) + # apply timesteps, if present + c = set_timesteps_for_conditioning(cond=c, timestep_range=timesteps_range) + # finally, apply mask to conditioning and store + final_conds.append(c) + return final_conds + +def set_conds_props_and_combine(conds: list, new_conds: list, strength: float=1.0, set_cond_area: str="default", + mask: torch.Tensor=None, hooks: HookGroup=None, timesteps_range: tuple[float,float]=None, append_hooks=True): + combined_conds = [] + for c, masked_c in zip(conds, new_conds): + # first, apply lora_hook to new conditioning, if provided + masked_c = set_hooks_for_conditioning(masked_c, hooks, append_hooks=append_hooks) + # next, apply mask to new conditioning, if provided + masked_c = set_mask_for_conditioning(cond=masked_c, mask=mask, set_cond_area=set_cond_area, strength=strength) + # apply timesteps, if present + masked_c = set_timesteps_for_conditioning(cond=masked_c, timestep_range=timesteps_range) + # finally, combine with existing conditioning and store + combined_conds.append(combine_conditioning([c, masked_c])) + return combined_conds + +def set_default_conds_and_combine(conds: list, new_conds: list, + hooks: HookGroup=None, timesteps_range: tuple[float,float]=None, append_hooks=True): + combined_conds = [] + for c, new_c in zip(conds, new_conds): + # first, apply lora_hook to new conditioning, if provided + new_c = set_hooks_for_conditioning(new_c, hooks, append_hooks=append_hooks) + # next, add default_cond key to cond so that during sampling, it can be identified + new_c = conditioning_set_values(new_c, {'default': True}) + # apply timesteps, if present + new_c = set_timesteps_for_conditioning(cond=new_c, timestep_range=timesteps_range) + # finally, combine with existing conditioning and store + combined_conds.append(combine_conditioning([c, new_c])) + return combined_conds diff --git a/comfy/k_diffusion/deis.py b/comfy/k_diffusion/deis.py index 607410656..a1167a4a3 100644 --- a/comfy/k_diffusion/deis.py +++ b/comfy/k_diffusion/deis.py @@ -11,7 +11,6 @@ import numpy as np # Transfer from the input time (sigma) used in EDM to that (t) used in DEIS. def edm2t(edm_steps, epsilon_s=1e-3, sigma_min=0.002, sigma_max=80): - vp_sigma = lambda beta_d, beta_min: lambda t: (np.e ** (0.5 * beta_d * (t ** 2) + beta_min * t) - 1) ** 0.5 vp_sigma_inv = lambda beta_d, beta_min: lambda sigma: ((beta_min ** 2 + 2 * beta_d * (sigma ** 2 + 1).log()).sqrt() - beta_min) / beta_d vp_beta_d = 2 * (np.log(torch.tensor(sigma_min).cpu() ** 2 + 1) / epsilon_s - np.log(torch.tensor(sigma_max).cpu() ** 2 + 1)) / (epsilon_s - 1) vp_beta_min = np.log(torch.tensor(sigma_max).cpu() ** 2 + 1) - 0.5 * vp_beta_d diff --git a/comfy/k_diffusion/sampling.py b/comfy/k_diffusion/sampling.py index 385a25164..f08370f83 100644 --- a/comfy/k_diffusion/sampling.py +++ b/comfy/k_diffusion/sampling.py @@ -44,6 +44,17 @@ def get_sigmas_vp(n, beta_d=19.9, beta_min=0.1, eps_s=1e-3, device='cpu'): return append_zero(sigmas) +def get_sigmas_laplace(n, sigma_min, sigma_max, mu=0., beta=0.5, device='cpu'): + """Constructs the noise schedule proposed by Tiankai et al. (2024). """ + epsilon = 1e-5 # avoid log(0) + x = torch.linspace(0, 1, n, device=device) + clamp = lambda x: torch.clamp(x, min=sigma_min, max=sigma_max) + lmb = mu - beta * torch.sign(0.5-x) * torch.log(1 - 2 * torch.abs(0.5-x) + epsilon) + sigmas = clamp(torch.exp(lmb)) + return sigmas + + + def to_d(x, sigma, denoised): """Converts a denoiser output to a Karras ODE derivative.""" return (x - denoised) / utils.append_dims(sigma, x.ndim) @@ -153,6 +164,8 @@ def sample_euler(model, x, sigmas, extra_args=None, callback=None, disable=None, @torch.no_grad() def sample_euler_ancestral(model, x, sigmas, extra_args=None, callback=None, disable=None, eta=1., s_noise=1., noise_sampler=None): + if isinstance(model.inner_model.inner_model.model_sampling, comfy.model_sampling.CONST): + return sample_euler_ancestral_RF(model, x, sigmas, extra_args, callback, disable, eta, s_noise, noise_sampler) """Ancestral sampling with Euler method steps.""" extra_args = {} if extra_args is None else extra_args noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler @@ -162,14 +175,42 @@ def sample_euler_ancestral(model, x, sigmas, extra_args=None, callback=None, dis sigma_down, sigma_up = get_ancestral_step(sigmas[i], sigmas[i + 1], eta=eta) if callback is not None: callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) - d = to_d(x, sigmas[i], denoised) - # Euler method - dt = sigma_down - sigmas[i] - x = x + d * dt - if sigmas[i + 1] > 0: - x = x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * sigma_up + + if sigma_down == 0: + x = denoised + else: + d = to_d(x, sigmas[i], denoised) + # Euler method + dt = sigma_down - sigmas[i] + x = x + d * dt + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * sigma_up return x +@torch.no_grad() +def sample_euler_ancestral_RF(model, x, sigmas, extra_args=None, callback=None, disable=None, eta=1.0, s_noise=1., noise_sampler=None): + """Ancestral sampling with Euler method steps.""" + extra_args = {} if extra_args is None else extra_args + noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler + s_in = x.new_ones([x.shape[0]]) + for i in trange(len(sigmas) - 1, disable=disable): + denoised = model(x, sigmas[i] * s_in, **extra_args) + # sigma_down, sigma_up = get_ancestral_step(sigmas[i], sigmas[i + 1], eta=eta) + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + + if sigmas[i + 1] == 0: + x = denoised + else: + downstep_ratio = 1 + (sigmas[i + 1] / sigmas[i] - 1) * eta + sigma_down = sigmas[i + 1] * downstep_ratio + alpha_ip1 = 1 - sigmas[i + 1] + alpha_down = 1 - sigma_down + renoise_coeff = (sigmas[i + 1]**2 - sigma_down**2 * alpha_ip1**2 / alpha_down**2)**0.5 + # Euler method + sigma_down_i_ratio = sigma_down / sigmas[i] + x = sigma_down_i_ratio * x + (1 - sigma_down_i_ratio) * denoised + if eta > 0: + x = (alpha_ip1 / alpha_down) * x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * renoise_coeff + return x @torch.no_grad() def sample_heun(model, x, sigmas, extra_args=None, callback=None, disable=None, s_churn=0., s_tmin=0., s_tmax=float('inf'), s_noise=1.): @@ -244,6 +285,9 @@ def sample_dpm_2(model, x, sigmas, extra_args=None, callback=None, disable=None, @torch.no_grad() def sample_dpm_2_ancestral(model, x, sigmas, extra_args=None, callback=None, disable=None, eta=1., s_noise=1., noise_sampler=None): + if isinstance(model.inner_model.inner_model.model_sampling, comfy.model_sampling.CONST): + return sample_dpm_2_ancestral_RF(model, x, sigmas, extra_args, callback, disable, eta, s_noise, noise_sampler) + """Ancestral sampling with DPM-Solver second-order steps.""" extra_args = {} if extra_args is None else extra_args noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler @@ -270,6 +314,38 @@ def sample_dpm_2_ancestral(model, x, sigmas, extra_args=None, callback=None, dis x = x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * sigma_up return x +@torch.no_grad() +def sample_dpm_2_ancestral_RF(model, x, sigmas, extra_args=None, callback=None, disable=None, eta=1., s_noise=1., noise_sampler=None): + """Ancestral sampling with DPM-Solver second-order steps.""" + extra_args = {} if extra_args is None else extra_args + noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler + s_in = x.new_ones([x.shape[0]]) + for i in trange(len(sigmas) - 1, disable=disable): + denoised = model(x, sigmas[i] * s_in, **extra_args) + downstep_ratio = 1 + (sigmas[i+1]/sigmas[i] - 1) * eta + sigma_down = sigmas[i+1] * downstep_ratio + alpha_ip1 = 1 - sigmas[i+1] + alpha_down = 1 - sigma_down + renoise_coeff = (sigmas[i+1]**2 - sigma_down**2*alpha_ip1**2/alpha_down**2)**0.5 + + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + d = to_d(x, sigmas[i], denoised) + if sigma_down == 0: + # Euler method + dt = sigma_down - sigmas[i] + x = x + d * dt + else: + # DPM-Solver-2 + sigma_mid = sigmas[i].log().lerp(sigma_down.log(), 0.5).exp() + dt_1 = sigma_mid - sigmas[i] + dt_2 = sigma_down - sigmas[i] + x_2 = x + d * dt_1 + denoised_2 = model(x_2, sigma_mid * s_in, **extra_args) + d_2 = to_d(x_2, sigma_mid, denoised_2) + x = x + d_2 * dt_2 + x = (alpha_ip1/alpha_down) * x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * renoise_coeff + return x def linear_multistep_coeff(order, t, i, j): if order - 1 > i: @@ -1069,7 +1145,6 @@ def sample_euler_cfg_pp(model, x, sigmas, extra_args=None, callback=None, disabl d = to_d(x, sigma_hat, temp[0]) if callback is not None: callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigma_hat, 'denoised': denoised}) - dt = sigmas[i + 1] - sigma_hat # Euler method x = denoised + d * sigmas[i + 1] return x @@ -1096,8 +1171,81 @@ def sample_euler_ancestral_cfg_pp(model, x, sigmas, extra_args=None, callback=No callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) d = to_d(x, sigmas[i], temp[0]) # Euler method - dt = sigma_down - sigmas[i] x = denoised + d * sigma_down if sigmas[i + 1] > 0: x = x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * sigma_up return x +@torch.no_grad() +def sample_dpmpp_2s_ancestral_cfg_pp(model, x, sigmas, extra_args=None, callback=None, disable=None, eta=1., s_noise=1., noise_sampler=None): + """Ancestral sampling with DPM-Solver++(2S) second-order steps.""" + extra_args = {} if extra_args is None else extra_args + noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler + + temp = [0] + def post_cfg_function(args): + temp[0] = args["uncond_denoised"] + return args["denoised"] + + model_options = extra_args.get("model_options", {}).copy() + extra_args["model_options"] = comfy.model_patcher.set_model_options_post_cfg_function(model_options, post_cfg_function, disable_cfg1_optimization=True) + + s_in = x.new_ones([x.shape[0]]) + sigma_fn = lambda t: t.neg().exp() + t_fn = lambda sigma: sigma.log().neg() + + for i in trange(len(sigmas) - 1, disable=disable): + denoised = model(x, sigmas[i] * s_in, **extra_args) + sigma_down, sigma_up = get_ancestral_step(sigmas[i], sigmas[i + 1], eta=eta) + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + if sigma_down == 0: + # Euler method + d = to_d(x, sigmas[i], temp[0]) + x = denoised + d * sigma_down + else: + # DPM-Solver++(2S) + t, t_next = t_fn(sigmas[i]), t_fn(sigma_down) + # r = torch.sinh(1 + (2 - eta) * (t_next - t) / (t - t_fn(sigma_up))) works only on non-cfgpp, weird + r = 1 / 2 + h = t_next - t + s = t + r * h + x_2 = (sigma_fn(s) / sigma_fn(t)) * (x + (denoised - temp[0])) - (-h * r).expm1() * denoised + denoised_2 = model(x_2, sigma_fn(s) * s_in, **extra_args) + x = (sigma_fn(t_next) / sigma_fn(t)) * (x + (denoised - temp[0])) - (-h).expm1() * denoised_2 + # Noise addition + if sigmas[i + 1] > 0: + x = x + noise_sampler(sigmas[i], sigmas[i + 1]) * s_noise * sigma_up + return x + +@torch.no_grad() +def sample_dpmpp_2m_cfg_pp(model, x, sigmas, extra_args=None, callback=None, disable=None): + """DPM-Solver++(2M).""" + extra_args = {} if extra_args is None else extra_args + s_in = x.new_ones([x.shape[0]]) + t_fn = lambda sigma: sigma.log().neg() + + old_uncond_denoised = None + uncond_denoised = None + def post_cfg_function(args): + nonlocal uncond_denoised + uncond_denoised = args["uncond_denoised"] + return args["denoised"] + + model_options = extra_args.get("model_options", {}).copy() + extra_args["model_options"] = comfy.model_patcher.set_model_options_post_cfg_function(model_options, post_cfg_function, disable_cfg1_optimization=True) + + for i in trange(len(sigmas) - 1, disable=disable): + denoised = model(x, sigmas[i] * s_in, **extra_args) + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + t, t_next = t_fn(sigmas[i]), t_fn(sigmas[i + 1]) + h = t_next - t + if old_uncond_denoised is None or sigmas[i + 1] == 0: + denoised_mix = -torch.exp(-h) * uncond_denoised + else: + h_last = t - t_fn(sigmas[i - 1]) + r = h_last / h + denoised_mix = -torch.exp(-h) * uncond_denoised - torch.expm1(-h) * (1 / (2 * r)) * (denoised - old_uncond_denoised) + x = denoised + denoised_mix + torch.exp(-h) * x + old_uncond_denoised = uncond_denoised + return x diff --git a/comfy/latent_formats.py b/comfy/latent_formats.py index ee19faeae..10fe59aac 100644 --- a/comfy/latent_formats.py +++ b/comfy/latent_formats.py @@ -4,6 +4,7 @@ class LatentFormat: scale_factor = 1.0 latent_channels = 4 latent_rgb_factors = None + latent_rgb_factors_bias = None taesd_decoder_name = None def process_in(self, latent): @@ -30,11 +31,13 @@ class SDXL(LatentFormat): def __init__(self): self.latent_rgb_factors = [ # R G B - [ 0.3920, 0.4054, 0.4549], - [-0.2634, -0.0196, 0.0653], - [ 0.0568, 0.1687, -0.0755], - [-0.3112, -0.2359, -0.2076] + [ 0.3651, 0.4232, 0.4341], + [-0.2533, -0.0042, 0.1068], + [ 0.1076, 0.1111, -0.0362], + [-0.3165, -0.2492, -0.2188] ] + self.latent_rgb_factors_bias = [ 0.1084, -0.0175, -0.0011] + self.taesd_decoder_name = "taesdxl_decoder" class SDXL_Playground_2_5(LatentFormat): @@ -112,23 +115,24 @@ class SD3(LatentFormat): self.scale_factor = 1.5305 self.shift_factor = 0.0609 self.latent_rgb_factors = [ - [-0.0645, 0.0177, 0.1052], - [ 0.0028, 0.0312, 0.0650], - [ 0.1848, 0.0762, 0.0360], - [ 0.0944, 0.0360, 0.0889], - [ 0.0897, 0.0506, -0.0364], - [-0.0020, 0.1203, 0.0284], - [ 0.0855, 0.0118, 0.0283], - [-0.0539, 0.0658, 0.1047], - [-0.0057, 0.0116, 0.0700], - [-0.0412, 0.0281, -0.0039], - [ 0.1106, 0.1171, 0.1220], - [-0.0248, 0.0682, -0.0481], - [ 0.0815, 0.0846, 0.1207], - [-0.0120, -0.0055, -0.0867], - [-0.0749, -0.0634, -0.0456], - [-0.1418, -0.1457, -0.1259] + [-0.0922, -0.0175, 0.0749], + [ 0.0311, 0.0633, 0.0954], + [ 0.1994, 0.0927, 0.0458], + [ 0.0856, 0.0339, 0.0902], + [ 0.0587, 0.0272, -0.0496], + [-0.0006, 0.1104, 0.0309], + [ 0.0978, 0.0306, 0.0427], + [-0.0042, 0.1038, 0.1358], + [-0.0194, 0.0020, 0.0669], + [-0.0488, 0.0130, -0.0268], + [ 0.0922, 0.0988, 0.0951], + [-0.0278, 0.0524, -0.0542], + [ 0.0332, 0.0456, 0.0895], + [-0.0069, -0.0030, -0.0810], + [-0.0596, -0.0465, -0.0293], + [-0.1448, -0.1463, -0.1189] ] + self.latent_rgb_factors_bias = [0.2394, 0.2135, 0.1925] self.taesd_decoder_name = "taesd3_decoder" def process_in(self, latent): @@ -146,23 +150,24 @@ class Flux(SD3): self.scale_factor = 0.3611 self.shift_factor = 0.1159 self.latent_rgb_factors =[ - [-0.0404, 0.0159, 0.0609], - [ 0.0043, 0.0298, 0.0850], - [ 0.0328, -0.0749, -0.0503], - [-0.0245, 0.0085, 0.0549], - [ 0.0966, 0.0894, 0.0530], - [ 0.0035, 0.0399, 0.0123], - [ 0.0583, 0.1184, 0.1262], - [-0.0191, -0.0206, -0.0306], - [-0.0324, 0.0055, 0.1001], - [ 0.0955, 0.0659, -0.0545], - [-0.0504, 0.0231, -0.0013], - [ 0.0500, -0.0008, -0.0088], - [ 0.0982, 0.0941, 0.0976], - [-0.1233, -0.0280, -0.0897], - [-0.0005, -0.0530, -0.0020], - [-0.1273, -0.0932, -0.0680] + [-0.0346, 0.0244, 0.0681], + [ 0.0034, 0.0210, 0.0687], + [ 0.0275, -0.0668, -0.0433], + [-0.0174, 0.0160, 0.0617], + [ 0.0859, 0.0721, 0.0329], + [ 0.0004, 0.0383, 0.0115], + [ 0.0405, 0.0861, 0.0915], + [-0.0236, -0.0185, -0.0259], + [-0.0245, 0.0250, 0.1180], + [ 0.1008, 0.0755, -0.0421], + [-0.0515, 0.0201, 0.0011], + [ 0.0428, -0.0012, -0.0036], + [ 0.0817, 0.0765, 0.0749], + [-0.1264, -0.0522, -0.1103], + [-0.0280, -0.0881, -0.0499], + [-0.1262, -0.0982, -0.0778] ] + self.latent_rgb_factors_bias = [-0.0329, -0.0718, -0.0851] self.taesd_decoder_name = "taef1_decoder" def process_in(self, latent): @@ -170,3 +175,184 @@ class Flux(SD3): def process_out(self, latent): return (latent / self.scale_factor) + self.shift_factor + +class Mochi(LatentFormat): + latent_channels = 12 + + def __init__(self): + self.scale_factor = 1.0 + self.latents_mean = torch.tensor([-0.06730895953510081, -0.038011381506090416, -0.07477820912866141, + -0.05565264470995561, 0.012767231469026969, -0.04703542746246419, + 0.043896967884726704, -0.09346305707025976, -0.09918314763016893, + -0.008729793427399178, -0.011931556316503654, -0.0321993391887285]).view(1, self.latent_channels, 1, 1, 1) + self.latents_std = torch.tensor([0.9263795028493863, 0.9248894543193766, 0.9393059390890617, + 0.959253732819592, 0.8244560132752793, 0.917259975397747, + 0.9294154431013696, 1.3720942357788521, 0.881393668867029, + 0.9168315692124348, 0.9185249279345552, 0.9274757570805041]).view(1, self.latent_channels, 1, 1, 1) + + self.latent_rgb_factors =[ + [-0.0069, -0.0045, 0.0018], + [ 0.0154, -0.0692, -0.0274], + [ 0.0333, 0.0019, 0.0206], + [-0.1390, 0.0628, 0.1678], + [-0.0725, 0.0134, -0.1898], + [ 0.0074, -0.0270, -0.0209], + [-0.0176, -0.0277, -0.0221], + [ 0.5294, 0.5204, 0.3852], + [-0.0326, -0.0446, -0.0143], + [-0.0659, 0.0153, -0.0153], + [ 0.0185, -0.0217, 0.0014], + [-0.0396, -0.0495, -0.0281] + ] + self.latent_rgb_factors_bias = [-0.0940, -0.1418, -0.1453] + self.taesd_decoder_name = None #TODO + + def process_in(self, latent): + latents_mean = self.latents_mean.to(latent.device, latent.dtype) + latents_std = self.latents_std.to(latent.device, latent.dtype) + return (latent - latents_mean) * self.scale_factor / latents_std + + def process_out(self, latent): + latents_mean = self.latents_mean.to(latent.device, latent.dtype) + latents_std = self.latents_std.to(latent.device, latent.dtype) + return latent * latents_std / self.scale_factor + latents_mean + +class LTXV(LatentFormat): + latent_channels = 128 + def __init__(self): + self.latent_rgb_factors = [ + [ 1.1202e-02, -6.3815e-04, -1.0021e-02], + [ 8.6031e-02, 6.5813e-02, 9.5409e-04], + [-1.2576e-02, -7.5734e-03, -4.0528e-03], + [ 9.4063e-03, -2.1688e-03, 2.6093e-03], + [ 3.7636e-03, 1.2765e-02, 9.1548e-03], + [ 2.1024e-02, -5.2973e-03, 3.4373e-03], + [-8.8896e-03, -1.9703e-02, -1.8761e-02], + [-1.3160e-02, -1.0523e-02, 1.9709e-03], + [-1.5152e-03, -6.9891e-03, -7.5810e-03], + [-1.7247e-03, 4.6560e-04, -3.3839e-03], + [ 1.3617e-02, 4.7077e-03, -2.0045e-03], + [ 1.0256e-02, 7.7318e-03, 1.3948e-02], + [-1.6108e-02, -6.2151e-03, 1.1561e-03], + [ 7.3407e-03, 1.5628e-02, 4.4865e-04], + [ 9.5357e-04, -2.9518e-03, -1.4760e-02], + [ 1.9143e-02, 1.0868e-02, 1.2264e-02], + [ 4.4575e-03, 3.6682e-05, -6.8508e-03], + [-4.5681e-04, 3.2570e-03, 7.7929e-03], + [ 3.3902e-02, 3.3405e-02, 3.7454e-02], + [-2.3001e-02, -2.4877e-03, -3.1033e-03], + [ 5.0265e-02, 3.8841e-02, 3.3539e-02], + [-4.1018e-03, -1.1095e-03, 1.5859e-03], + [-1.2689e-01, -1.3107e-01, -2.1005e-01], + [ 2.6276e-02, 1.4189e-02, -3.5963e-03], + [-4.8679e-03, 8.8486e-03, 7.8029e-03], + [-1.6610e-03, -4.8597e-03, -5.2060e-03], + [-2.1010e-03, 2.3610e-03, 9.3796e-03], + [-2.2482e-02, -2.1305e-02, -1.5087e-02], + [-1.5753e-02, -1.0646e-02, -6.5083e-03], + [-4.6975e-03, 5.0288e-03, -6.7390e-03], + [ 1.1951e-02, 2.0712e-02, 1.6191e-02], + [-6.3704e-03, -8.4827e-03, -9.5483e-03], + [ 7.2610e-03, -9.9326e-03, -2.2978e-02], + [-9.1904e-04, 6.2882e-03, 9.5720e-03], + [-3.7178e-02, -3.7123e-02, -5.6713e-02], + [-1.3373e-01, -1.0720e-01, -5.3801e-02], + [-5.3702e-03, 8.1256e-03, 8.8397e-03], + [-1.5247e-01, -2.1437e-01, -2.1843e-01], + [ 3.1441e-02, 7.0335e-03, -9.7541e-03], + [ 2.1528e-03, -8.9817e-03, -2.1023e-02], + [ 3.8461e-03, -5.8957e-03, -1.5014e-02], + [-4.3470e-03, -1.2940e-02, -1.5972e-02], + [-5.4781e-03, -1.0842e-02, -3.0204e-03], + [-6.5347e-03, 3.0806e-03, -1.0163e-02], + [-5.0414e-03, -7.1503e-03, -8.9686e-04], + [-8.5851e-03, -2.4351e-03, 1.0674e-03], + [-9.0016e-03, -9.6493e-03, 1.5692e-03], + [ 5.0914e-03, 1.2099e-02, 1.9968e-02], + [ 1.3758e-02, 1.1669e-02, 8.1958e-03], + [-1.0518e-02, -1.1575e-02, -4.1307e-03], + [-2.8410e-02, -3.1266e-02, -2.2149e-02], + [ 2.9336e-03, 3.6511e-02, 1.8717e-02], + [-1.6703e-02, -1.6696e-02, -4.4529e-03], + [ 4.8818e-02, 4.0063e-02, 8.7410e-03], + [-1.5066e-02, -5.7328e-04, 2.9785e-03], + [-1.7613e-02, -8.1034e-03, 1.3086e-02], + [-9.2633e-03, 1.0803e-02, -6.3489e-03], + [ 3.0851e-03, 4.7750e-04, 1.2347e-02], + [-2.2785e-02, -2.3043e-02, -2.6005e-02], + [-2.4787e-02, -1.5389e-02, -2.2104e-02], + [-2.3572e-02, 1.0544e-03, 1.2361e-02], + [-7.8915e-03, -1.2271e-03, -6.0968e-03], + [-1.1478e-02, -1.2543e-03, 6.2679e-03], + [-5.4229e-02, 2.6644e-02, 6.3394e-03], + [ 4.4216e-03, -7.3338e-03, -1.0464e-02], + [-4.5013e-03, 1.6082e-03, 1.4420e-02], + [ 1.3673e-02, 8.8877e-03, 4.1253e-03], + [-1.0145e-02, 9.0072e-03, 1.5695e-02], + [-5.6234e-03, 1.1847e-03, 8.1261e-03], + [-3.7171e-03, -5.3538e-03, 1.2590e-03], + [ 2.9476e-02, 2.1424e-02, 3.0424e-02], + [-3.4925e-02, -2.4340e-02, -2.5316e-02], + [-3.4127e-02, -2.2406e-02, -1.0589e-02], + [-1.7342e-02, -1.3249e-02, -1.0719e-02], + [-2.1478e-03, -8.6051e-03, -2.9878e-03], + [ 1.2089e-03, -4.2391e-03, -6.8569e-03], + [ 9.0411e-04, -6.6886e-03, -6.7547e-05], + [ 1.6048e-02, -1.0057e-02, -2.8929e-02], + [ 1.2290e-03, 1.0163e-02, 1.8861e-02], + [ 1.7264e-02, 2.7257e-04, 1.3785e-02], + [-1.3482e-02, -3.6427e-03, 6.7481e-04], + [ 4.6782e-03, -5.2423e-03, 2.4467e-03], + [-5.9113e-03, -6.2244e-03, -1.8162e-03], + [ 1.5496e-02, 1.4582e-02, 1.9514e-03], + [ 7.4958e-03, 1.5886e-03, -8.2305e-03], + [ 1.9086e-02, 1.6360e-03, -3.9674e-03], + [-5.7021e-03, -2.7307e-03, -4.1066e-03], + [ 1.7450e-03, 1.4602e-02, 2.5794e-02], + [-8.2788e-04, 2.2902e-03, 4.5161e-03], + [ 1.1632e-02, 8.9193e-03, -7.2813e-03], + [ 7.5721e-03, 2.6784e-03, 1.1393e-02], + [ 5.1939e-03, 3.6903e-03, 1.4049e-02], + [-1.8383e-02, -2.2529e-02, -2.4477e-02], + [ 5.8842e-04, -5.7874e-03, -1.4770e-02], + [-1.6125e-02, -8.6101e-03, -1.4533e-02], + [ 2.0540e-02, 2.0729e-02, 6.4338e-03], + [ 3.3587e-03, -1.1226e-02, -1.6444e-02], + [-1.4742e-03, -1.0489e-02, 1.7097e-03], + [ 2.8130e-02, 2.3546e-02, 3.2791e-02], + [-1.8532e-02, -1.2842e-02, -8.7756e-03], + [-8.0533e-03, -1.0771e-02, -1.7536e-02], + [-3.9009e-03, 1.6150e-02, 3.3359e-02], + [-7.4554e-03, -1.4154e-02, -6.1910e-03], + [ 3.4734e-03, -1.1370e-02, -1.0581e-02], + [ 1.1476e-02, 3.9281e-03, 2.8231e-03], + [ 7.1639e-03, -1.4741e-03, -3.8066e-03], + [ 2.2250e-03, -8.7552e-03, -9.5719e-03], + [ 2.4146e-02, 2.1696e-02, 2.8056e-02], + [-5.4365e-03, -2.4291e-02, -1.7802e-02], + [ 7.4263e-03, 1.0510e-02, 1.2705e-02], + [ 6.2669e-03, 6.2658e-03, 1.9211e-02], + [ 1.6378e-02, 9.4933e-03, 6.6971e-03], + [ 1.7173e-02, 2.3601e-02, 2.3296e-02], + [-1.4568e-02, -9.8279e-03, -1.1556e-02], + [ 1.4431e-02, 1.4430e-02, 6.6362e-03], + [-6.8230e-03, 1.8863e-02, 1.4555e-02], + [ 6.1156e-03, 3.4700e-03, -2.6662e-03], + [-2.6983e-03, -5.9402e-03, -9.2276e-03], + [ 1.0235e-02, 7.4173e-03, -7.6243e-03], + [-1.3255e-02, 1.9322e-02, -9.2153e-04], + [ 2.4222e-03, -4.8039e-03, -1.5759e-02], + [ 2.6244e-02, 2.5951e-02, 2.0249e-02], + [ 1.5711e-02, 1.8498e-02, 2.7407e-03], + [-2.1714e-03, 4.7214e-03, -2.2443e-02], + [-7.4747e-03, 7.4166e-03, 1.4430e-02], + [-8.3906e-03, -7.9776e-03, 9.7927e-03], + [ 3.8321e-02, 9.6622e-03, -1.9268e-02], + [-1.4605e-02, -6.7032e-03, 3.9675e-03] + ] + + self.latent_rgb_factors_bias = [-0.0571, -0.1657, -0.2512] + +class HunyuanVideo(LatentFormat): + latent_channels = 16 + scale_factor = 0.476986 diff --git a/comfy/ldm/audio/autoencoder.py b/comfy/ldm/audio/autoencoder.py index 8123e66a5..9e7e7c876 100644 --- a/comfy/ldm/audio/autoencoder.py +++ b/comfy/ldm/audio/autoencoder.py @@ -2,7 +2,7 @@ import torch from torch import nn -from typing import Literal, Dict, Any +from typing import Literal import math import comfy.ops ops = comfy.ops.disable_weight_init @@ -97,7 +97,7 @@ def get_activation(activation: Literal["elu", "snake", "none"], antialias=False, raise ValueError(f"Unknown activation {activation}") if antialias: - act = Activation1d(act) + act = Activation1d(act) # noqa: F821 Activation1d is not defined return act diff --git a/comfy/ldm/audio/dit.py b/comfy/ldm/audio/dit.py index 4d2185be8..179c5b67e 100644 --- a/comfy/ldm/audio/dit.py +++ b/comfy/ldm/audio/dit.py @@ -158,7 +158,6 @@ class RotaryEmbedding(nn.Module): def forward(self, t): # device = self.inv_freq.device device = t.device - dtype = t.dtype # t = t.to(torch.float32) @@ -170,7 +169,7 @@ class RotaryEmbedding(nn.Module): if self.scale is None: return freqs, 1. - power = (torch.arange(seq_len, device = device) - (seq_len // 2)) / self.scale_base + power = (torch.arange(seq_len, device = device) - (seq_len // 2)) / self.scale_base # noqa: F821 seq_len is not defined scale = comfy.ops.cast_to_input(self.scale, t) ** rearrange(power, 'n -> n 1') scale = torch.cat((scale, scale), dim = -1) @@ -229,9 +228,9 @@ class FeedForward(nn.Module): linear_in = GLU(dim, inner_dim, activation, dtype=dtype, device=device, operations=operations) else: linear_in = nn.Sequential( - Rearrange('b n d -> b d n') if use_conv else nn.Identity(), + rearrange('b n d -> b d n') if use_conv else nn.Identity(), operations.Linear(dim, inner_dim, bias = not no_bias, dtype=dtype, device=device) if not use_conv else operations.Conv1d(dim, inner_dim, conv_kernel_size, padding = (conv_kernel_size // 2), bias = not no_bias, dtype=dtype, device=device), - Rearrange('b n d -> b d n') if use_conv else nn.Identity(), + rearrange('b n d -> b d n') if use_conv else nn.Identity(), activation ) @@ -246,9 +245,9 @@ class FeedForward(nn.Module): self.ff = nn.Sequential( linear_in, - Rearrange('b d n -> b n d') if use_conv else nn.Identity(), + rearrange('b d n -> b n d') if use_conv else nn.Identity(), linear_out, - Rearrange('b n d -> b d n') if use_conv else nn.Identity(), + rearrange('b n d -> b d n') if use_conv else nn.Identity(), ) def forward(self, x): @@ -346,18 +345,13 @@ class Attention(nn.Module): # determine masking masks = [] - final_attn_mask = None # The mask that will be applied to the attention matrix, taking all masks into account if input_mask is not None: input_mask = rearrange(input_mask, 'b j -> b 1 1 j') masks.append(~input_mask) # Other masks will be added here later - - if len(masks) > 0: - final_attn_mask = ~or_reduce(masks) - - n, device = q.shape[-2], q.device + n = q.shape[-2] causal = self.causal if causal is None else causal @@ -612,7 +606,9 @@ class ContinuousTransformer(nn.Module): return_info = False, **kwargs ): + patches_replace = kwargs.get("transformer_options", {}).get("patches_replace", {}) batch, seq, device = *x.shape[:2], x.device + context = kwargs["context"] info = { "hidden_states": [], @@ -643,9 +639,19 @@ class ContinuousTransformer(nn.Module): if self.use_sinusoidal_emb or self.use_abs_pos_emb: x = x + self.pos_emb(x) + blocks_replace = patches_replace.get("dit", {}) # Iterate over the transformer layers - for layer in self.layers: - x = layer(x, rotary_pos_emb = rotary_pos_emb, global_cond=global_cond, **kwargs) + for i, layer in enumerate(self.layers): + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = layer(args["img"], rotary_pos_emb=args["pe"], global_cond=args["vec"], context=args["txt"]) + return out + + out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": global_cond, "pe": rotary_pos_emb}, {"original_block": block_wrap}) + x = out["img"] + else: + x = layer(x, rotary_pos_emb = rotary_pos_emb, global_cond=global_cond, context=context) # x = checkpoint(layer, x, rotary_pos_emb = rotary_pos_emb, global_cond=global_cond, **kwargs) if return_info: @@ -874,7 +880,6 @@ class AudioDiffusionTransformer(nn.Module): mask=None, return_info=False, control=None, - transformer_options={}, **kwargs): return self._forward( x, diff --git a/comfy/ldm/audio/embedders.py b/comfy/ldm/audio/embedders.py index 82a3210c6..20edb365a 100644 --- a/comfy/ldm/audio/embedders.py +++ b/comfy/ldm/audio/embedders.py @@ -2,8 +2,8 @@ import torch import torch.nn as nn -from torch import Tensor, einsum -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, TypeVar, Union +from torch import Tensor +from typing import List, Union from einops import rearrange import math import comfy.ops diff --git a/comfy/ldm/aura/mmdit.py b/comfy/ldm/aura/mmdit.py index cd9a42185..7792151aa 100644 --- a/comfy/ldm/aura/mmdit.py +++ b/comfy/ldm/aura/mmdit.py @@ -147,7 +147,6 @@ class DoubleAttention(nn.Module): bsz, seqlen1, _ = c.shape bsz, seqlen2, _ = x.shape - seqlen = seqlen1 + seqlen2 cq, ck, cv = self.w1q(c), self.w1k(c), self.w1v(c) cq = cq.view(bsz, seqlen1, self.n_heads, self.head_dim) @@ -437,7 +436,8 @@ class MMDiT(nn.Module): pos_encoding = pos_encoding[:,from_h:from_h+h,from_w:from_w+w] return x + pos_encoding.reshape(1, -1, self.positional_encoding.shape[-1]) - def forward(self, x, timestep, context, **kwargs): + def forward(self, x, timestep, context, transformer_options={}, **kwargs): + patches_replace = transformer_options.get("patches_replace", {}) # patchify x, add PE b, c, h, w = x.shape @@ -458,15 +458,36 @@ class MMDiT(nn.Module): global_cond = self.t_embedder(t, x.dtype) # B, D + blocks_replace = patches_replace.get("dit", {}) if len(self.double_layers) > 0: - for layer in self.double_layers: - c, x = layer(c, x, global_cond, **kwargs) + for i, layer in enumerate(self.double_layers): + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["txt"], out["img"] = layer(args["txt"], + args["img"], + args["vec"]) + return out + out = blocks_replace[("double_block", i)]({"img": x, "txt": c, "vec": global_cond}, {"original_block": block_wrap}) + c = out["txt"] + x = out["img"] + else: + c, x = layer(c, x, global_cond, **kwargs) if len(self.single_layers) > 0: c_len = c.size(1) cx = torch.cat([c, x], dim=1) - for layer in self.single_layers: - cx = layer(cx, global_cond, **kwargs) + for i, layer in enumerate(self.single_layers): + if ("single_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = layer(args["img"], args["vec"]) + return out + + out = blocks_replace[("single_block", i)]({"img": cx, "vec": global_cond}, {"original_block": block_wrap}) + cx = out["img"] + else: + cx = layer(cx, global_cond, **kwargs) x = cx[:, c_len:] diff --git a/comfy/ldm/cascade/controlnet.py b/comfy/ldm/cascade/controlnet.py index 7a52c3c26..90473481a 100644 --- a/comfy/ldm/cascade/controlnet.py +++ b/comfy/ldm/cascade/controlnet.py @@ -16,7 +16,6 @@ along with this program. If not, see . """ -import torch import torchvision from torch import nn from .common import LayerNorm2d_op diff --git a/comfy/ldm/common_dit.py b/comfy/ldm/common_dit.py index 9016abc44..e0f3057f7 100644 --- a/comfy/ldm/common_dit.py +++ b/comfy/ldm/common_dit.py @@ -2,20 +2,29 @@ import torch import comfy.ops def pad_to_patch_size(img, patch_size=(2, 2), padding_mode="circular"): - if padding_mode == "circular" and torch.jit.is_tracing() or torch.jit.is_scripting(): + if padding_mode == "circular" and (torch.jit.is_tracing() or torch.jit.is_scripting()): padding_mode = "reflect" - pad_h = (patch_size[0] - img.shape[-2] % patch_size[0]) % patch_size[0] - pad_w = (patch_size[1] - img.shape[-1] % patch_size[1]) % patch_size[1] - return torch.nn.functional.pad(img, (0, pad_w, 0, pad_h), mode=padding_mode) + + pad = () + for i in range(img.ndim - 2): + pad = (0, (patch_size[i] - img.shape[i + 2] % patch_size[i]) % patch_size[i]) + pad + + return torch.nn.functional.pad(img, pad, mode=padding_mode) try: rms_norm_torch = torch.nn.functional.rms_norm except: rms_norm_torch = None -def rms_norm(x, weight, eps=1e-6): - if rms_norm_torch is not None: - return rms_norm_torch(x, weight.shape, weight=comfy.ops.cast_to(weight, dtype=x.dtype, device=x.device), eps=eps) +def rms_norm(x, weight=None, eps=1e-6): + if rms_norm_torch is not None and not (torch.jit.is_tracing() or torch.jit.is_scripting()): + if weight is None: + return rms_norm_torch(x, (x.shape[-1],), eps=eps) + else: + return rms_norm_torch(x, weight.shape, weight=comfy.ops.cast_to(weight, dtype=x.dtype, device=x.device), eps=eps) else: - rrms = torch.rsqrt(torch.mean(x**2, dim=-1, keepdim=True) + eps) - return (x * rrms) * comfy.ops.cast_to(weight, dtype=x.dtype, device=x.device) + r = x * torch.rsqrt(torch.mean(x**2, dim=-1, keepdim=True) + eps) + if weight is None: + return r + else: + return r * comfy.ops.cast_to(weight, dtype=x.dtype, device=x.device) diff --git a/comfy/ldm/flux/controlnet.py b/comfy/ldm/flux/controlnet.py index 2598e7172..5322c4891 100644 --- a/comfy/ldm/flux/controlnet.py +++ b/comfy/ldm/flux/controlnet.py @@ -1,33 +1,75 @@ #Original code can be found on: https://github.com/XLabs-AI/x-flux/blob/main/src/flux/controlnet.py +#modified to support different types of flux controlnets import torch import math from torch import Tensor, nn from einops import rearrange, repeat -from .layers import (DoubleStreamBlock, EmbedND, LastLayer, - MLPEmbedder, SingleStreamBlock, - timestep_embedding) +from .layers import (timestep_embedding) from .model import Flux import comfy.ldm.common_dit +class MistolineCondDownsamplBlock(nn.Module): + def __init__(self, dtype=None, device=None, operations=None): + super().__init__() + self.encoder = nn.Sequential( + operations.Conv2d(3, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device) + ) + + def forward(self, x): + return self.encoder(x) + +class MistolineControlnetBlock(nn.Module): + def __init__(self, hidden_size, dtype=None, device=None, operations=None): + super().__init__() + self.linear = operations.Linear(hidden_size, hidden_size, dtype=dtype, device=device) + self.act = nn.SiLU() + + def forward(self, x): + return self.act(self.linear(x)) + class ControlNetFlux(Flux): - def __init__(self, latent_input=False, num_union_modes=0, image_model=None, dtype=None, device=None, operations=None, **kwargs): + def __init__(self, latent_input=False, num_union_modes=0, mistoline=False, control_latent_channels=None, image_model=None, dtype=None, device=None, operations=None, **kwargs): super().__init__(final_layer=False, dtype=dtype, device=device, operations=operations, **kwargs) self.main_model_double = 19 self.main_model_single = 38 + + self.mistoline = mistoline # add ControlNet blocks + if self.mistoline: + control_block = lambda : MistolineControlnetBlock(self.hidden_size, dtype=dtype, device=device, operations=operations) + else: + control_block = lambda : operations.Linear(self.hidden_size, self.hidden_size, dtype=dtype, device=device) + self.controlnet_blocks = nn.ModuleList([]) for _ in range(self.params.depth): - controlnet_block = operations.Linear(self.hidden_size, self.hidden_size, dtype=dtype, device=device) - self.controlnet_blocks.append(controlnet_block) + self.controlnet_blocks.append(control_block()) self.controlnet_single_blocks = nn.ModuleList([]) for _ in range(self.params.depth_single_blocks): - self.controlnet_single_blocks.append(operations.Linear(self.hidden_size, self.hidden_size, dtype=dtype, device=device)) + self.controlnet_single_blocks.append(control_block()) self.num_union_modes = num_union_modes self.controlnet_mode_embedder = None @@ -36,25 +78,33 @@ class ControlNetFlux(Flux): self.gradient_checkpointing = False self.latent_input = latent_input - self.pos_embed_input = operations.Linear(self.in_channels, self.hidden_size, bias=True, dtype=dtype, device=device) + if control_latent_channels is None: + control_latent_channels = self.in_channels + else: + control_latent_channels *= 2 * 2 #patch size + + self.pos_embed_input = operations.Linear(control_latent_channels, self.hidden_size, bias=True, dtype=dtype, device=device) if not self.latent_input: - self.input_hint_block = nn.Sequential( - operations.Conv2d(3, 16, 3, padding=1, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), - nn.SiLU(), - operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device) - ) + if self.mistoline: + self.input_cond_block = MistolineCondDownsamplBlock(dtype=dtype, device=device, operations=operations) + else: + self.input_hint_block = nn.Sequential( + operations.Conv2d(3, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, stride=2, dtype=dtype, device=device), + nn.SiLU(), + operations.Conv2d(16, 16, 3, padding=1, dtype=dtype, device=device) + ) def forward_orig( self, @@ -73,9 +123,6 @@ class ControlNetFlux(Flux): # running on sequences img img = self.img_in(img) - if not self.latent_input: - controlnet_cond = self.input_hint_block(controlnet_cond) - controlnet_cond = rearrange(controlnet_cond, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=2, pw=2) controlnet_cond = self.pos_embed_input(controlnet_cond) img = img + controlnet_cond @@ -131,9 +178,14 @@ class ControlNetFlux(Flux): patch_size = 2 if self.latent_input: hint = comfy.ldm.common_dit.pad_to_patch_size(hint, (patch_size, patch_size)) - hint = rearrange(hint, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=patch_size, pw=patch_size) + elif self.mistoline: + hint = hint * 2.0 - 1.0 + hint = self.input_cond_block(hint) else: hint = hint * 2.0 - 1.0 + hint = self.input_hint_block(hint) + + hint = rearrange(hint, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=patch_size, pw=patch_size) bs, c, h, w = x.shape x = comfy.ldm.common_dit.pad_to_patch_size(x, (patch_size, patch_size)) diff --git a/comfy/ldm/flux/layers.py b/comfy/ldm/flux/layers.py index dabab3e33..8e055151f 100644 --- a/comfy/ldm/flux/layers.py +++ b/comfy/ldm/flux/layers.py @@ -114,7 +114,7 @@ class Modulation(nn.Module): class DoubleStreamBlock(nn.Module): - def __init__(self, hidden_size: int, num_heads: int, mlp_ratio: float, qkv_bias: bool = False, dtype=None, device=None, operations=None): + def __init__(self, hidden_size: int, num_heads: int, mlp_ratio: float, qkv_bias: bool = False, flipped_img_txt=False, dtype=None, device=None, operations=None): super().__init__() mlp_hidden_dim = int(hidden_size * mlp_ratio) @@ -141,8 +141,9 @@ class DoubleStreamBlock(nn.Module): nn.GELU(approximate="tanh"), operations.Linear(mlp_hidden_dim, hidden_size, bias=True, dtype=dtype, device=device), ) + self.flipped_img_txt = flipped_img_txt - def forward(self, img: Tensor, txt: Tensor, vec: Tensor, pe: Tensor): + def forward(self, img: Tensor, txt: Tensor, vec: Tensor, pe: Tensor, attn_mask=None): img_mod1, img_mod2 = self.img_mod(vec) txt_mod1, txt_mod2 = self.txt_mod(vec) @@ -160,12 +161,22 @@ class DoubleStreamBlock(nn.Module): txt_q, txt_k, txt_v = txt_qkv.view(txt_qkv.shape[0], txt_qkv.shape[1], 3, self.num_heads, -1).permute(2, 0, 3, 1, 4) txt_q, txt_k = self.txt_attn.norm(txt_q, txt_k, txt_v) - # run actual attention - attn = attention(torch.cat((txt_q, img_q), dim=2), - torch.cat((txt_k, img_k), dim=2), - torch.cat((txt_v, img_v), dim=2), pe=pe) + if self.flipped_img_txt: + # run actual attention + attn = attention(torch.cat((img_q, txt_q), dim=2), + torch.cat((img_k, txt_k), dim=2), + torch.cat((img_v, txt_v), dim=2), + pe=pe, mask=attn_mask) - txt_attn, img_attn = attn[:, : txt.shape[1]], attn[:, txt.shape[1] :] + img_attn, txt_attn = attn[:, : img.shape[1]], attn[:, img.shape[1]:] + else: + # run actual attention + attn = attention(torch.cat((txt_q, img_q), dim=2), + torch.cat((txt_k, img_k), dim=2), + torch.cat((txt_v, img_v), dim=2), + pe=pe, mask=attn_mask) + + txt_attn, img_attn = attn[:, : txt.shape[1]], attn[:, txt.shape[1]:] # calculate the img bloks img = img + img_mod1.gate * self.img_attn.proj(img_attn) @@ -217,7 +228,7 @@ class SingleStreamBlock(nn.Module): self.mlp_act = nn.GELU(approximate="tanh") self.modulation = Modulation(hidden_size, double=False, dtype=dtype, device=device, operations=operations) - def forward(self, x: Tensor, vec: Tensor, pe: Tensor) -> Tensor: + def forward(self, x: Tensor, vec: Tensor, pe: Tensor, attn_mask=None) -> Tensor: mod, _ = self.modulation(vec) x_mod = (1 + mod.scale) * self.pre_norm(x) + mod.shift qkv, mlp = torch.split(self.linear1(x_mod), [3 * self.hidden_size, self.mlp_hidden_dim], dim=-1) @@ -226,7 +237,7 @@ class SingleStreamBlock(nn.Module): q, k = self.norm(q, k, v) # compute attention - attn = attention(q, k, v, pe=pe) + attn = attention(q, k, v, pe=pe, mask=attn_mask) # compute activation in mlp stream, cat again and run second linear layer output = self.linear2(torch.cat((attn, self.mlp_act(mlp)), 2)) x += mod.gate * output diff --git a/comfy/ldm/flux/math.py b/comfy/ldm/flux/math.py index 136ce2aa8..b6549585a 100644 --- a/comfy/ldm/flux/math.py +++ b/comfy/ldm/flux/math.py @@ -1,14 +1,15 @@ import torch from einops import rearrange from torch import Tensor + from comfy.ldm.modules.attention import optimized_attention import comfy.model_management -def attention(q: Tensor, k: Tensor, v: Tensor, pe: Tensor) -> Tensor: +def attention(q: Tensor, k: Tensor, v: Tensor, pe: Tensor, mask=None) -> Tensor: q, k = apply_rope(q, k, pe) heads = q.shape[1] - x = optimized_attention(q, k, v, heads, skip_reshape=True) + x = optimized_attention(q, k, v, heads, skip_reshape=True, mask=mask) return x @@ -33,3 +34,4 @@ def apply_rope(xq: Tensor, xk: Tensor, freqs_cis: Tensor): xq_out = freqs_cis[..., 0] * xq_[..., 0] + freqs_cis[..., 1] * xq_[..., 1] xk_out = freqs_cis[..., 0] * xk_[..., 0] + freqs_cis[..., 1] * xk_[..., 1] return xq_out.reshape(*xq.shape).type_as(xq), xk_out.reshape(*xk.shape).type_as(xk) + diff --git a/comfy/ldm/flux/model.py b/comfy/ldm/flux/model.py index 63970cad2..02be06845 100644 --- a/comfy/ldm/flux/model.py +++ b/comfy/ldm/flux/model.py @@ -4,6 +4,8 @@ from dataclasses import dataclass import torch from torch import Tensor, nn +from einops import rearrange, repeat +import comfy.ldm.common_dit from .layers import ( DoubleStreamBlock, @@ -14,12 +16,10 @@ from .layers import ( timestep_embedding, ) -from einops import rearrange, repeat -import comfy.ldm.common_dit - @dataclass class FluxParams: in_channels: int + out_channels: int vec_in_dim: int context_in_dim: int hidden_size: int @@ -29,6 +29,7 @@ class FluxParams: depth_single_blocks: int axes_dim: list theta: int + patch_size: int qkv_bias: bool guidance_embed: bool @@ -43,8 +44,9 @@ class Flux(nn.Module): self.dtype = dtype params = FluxParams(**kwargs) self.params = params - self.in_channels = params.in_channels * 2 * 2 - self.out_channels = self.in_channels + self.patch_size = params.patch_size + self.in_channels = params.in_channels * params.patch_size * params.patch_size + self.out_channels = params.out_channels * params.patch_size * params.patch_size if params.hidden_size % params.num_heads != 0: raise ValueError( f"Hidden size {params.hidden_size} must be divisible by num_heads {params.num_heads}" @@ -95,8 +97,11 @@ class Flux(nn.Module): timesteps: Tensor, y: Tensor, guidance: Tensor = None, - control=None, + control = None, + transformer_options={}, + attn_mask: Tensor = None, ) -> Tensor: + patches_replace = transformer_options.get("patches_replace", {}) if img.ndim != 3 or txt.ndim != 3: raise ValueError("Input img and txt tensors must have 3 dimensions.") @@ -108,14 +113,38 @@ class Flux(nn.Module): raise ValueError("Didn't get guidance strength for guidance distilled model.") vec = vec + self.guidance_in(timestep_embedding(guidance, 256).to(img.dtype)) - vec = vec + self.vector_in(y) + vec = vec + self.vector_in(y[:,:self.params.vec_in_dim]) txt = self.txt_in(txt) ids = torch.cat((txt_ids, img_ids), dim=1) pe = self.pe_embedder(ids) + blocks_replace = patches_replace.get("dit", {}) for i, block in enumerate(self.double_blocks): - img, txt = block(img=img, txt=txt, vec=vec, pe=pe) + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"], out["txt"] = block(img=args["img"], + txt=args["txt"], + vec=args["vec"], + pe=args["pe"], + attn_mask=args.get("attn_mask")) + return out + + out = blocks_replace[("double_block", i)]({"img": img, + "txt": txt, + "vec": vec, + "pe": pe, + "attn_mask": attn_mask}, + {"original_block": block_wrap}) + txt = out["txt"] + img = out["img"] + else: + img, txt = block(img=img, + txt=txt, + vec=vec, + pe=pe, + attn_mask=attn_mask) if control is not None: # Controlnet control_i = control.get("input") @@ -127,7 +156,23 @@ class Flux(nn.Module): img = torch.cat((txt, img), 1) for i, block in enumerate(self.single_blocks): - img = block(img, vec=vec, pe=pe) + if ("single_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = block(args["img"], + vec=args["vec"], + pe=args["pe"], + attn_mask=args.get("attn_mask")) + return out + + out = blocks_replace[("single_block", i)]({"img": img, + "vec": vec, + "pe": pe, + "attn_mask": attn_mask}, + {"original_block": block_wrap}) + img = out["img"] + else: + img = block(img, vec=vec, pe=pe, attn_mask=attn_mask) if control is not None: # Controlnet control_o = control.get("output") @@ -141,9 +186,9 @@ class Flux(nn.Module): img = self.final_layer(img, vec) # (N, T, patch_size ** 2 * out_channels) return img - def forward(self, x, timestep, context, y, guidance, control=None, **kwargs): + def forward(self, x, timestep, context, y, guidance, control=None, transformer_options={}, **kwargs): bs, c, h, w = x.shape - patch_size = 2 + patch_size = self.patch_size x = comfy.ldm.common_dit.pad_to_patch_size(x, (patch_size, patch_size)) img = rearrange(x, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=patch_size, pw=patch_size) @@ -151,10 +196,10 @@ class Flux(nn.Module): h_len = ((h + (patch_size // 2)) // patch_size) w_len = ((w + (patch_size // 2)) // patch_size) img_ids = torch.zeros((h_len, w_len, 3), device=x.device, dtype=x.dtype) - img_ids[..., 1] = img_ids[..., 1] + torch.linspace(0, h_len - 1, steps=h_len, device=x.device, dtype=x.dtype)[:, None] - img_ids[..., 2] = img_ids[..., 2] + torch.linspace(0, w_len - 1, steps=w_len, device=x.device, dtype=x.dtype)[None, :] + img_ids[:, :, 1] = img_ids[:, :, 1] + torch.linspace(0, h_len - 1, steps=h_len, device=x.device, dtype=x.dtype).unsqueeze(1) + img_ids[:, :, 2] = img_ids[:, :, 2] + torch.linspace(0, w_len - 1, steps=w_len, device=x.device, dtype=x.dtype).unsqueeze(0) img_ids = repeat(img_ids, "h w c -> b (h w) c", b=bs) txt_ids = torch.zeros((bs, context.shape[1], 3), device=x.device, dtype=x.dtype) - out = self.forward_orig(img, img_ids, context, txt_ids, timestep, y, guidance, control) + out = self.forward_orig(img, img_ids, context, txt_ids, timestep, y, guidance, control, transformer_options, attn_mask=kwargs.get("attention_mask", None)) return rearrange(out, "b (h w) (c ph pw) -> b c (h ph) (w pw)", h=h_len, w=w_len, ph=2, pw=2)[:,:,:h,:w] diff --git a/comfy/ldm/flux/redux.py b/comfy/ldm/flux/redux.py new file mode 100644 index 000000000..527e83164 --- /dev/null +++ b/comfy/ldm/flux/redux.py @@ -0,0 +1,25 @@ +import torch +import comfy.ops + +ops = comfy.ops.manual_cast + +class ReduxImageEncoder(torch.nn.Module): + def __init__( + self, + redux_dim: int = 1152, + txt_in_features: int = 4096, + device=None, + dtype=None, + ) -> None: + super().__init__() + + self.redux_dim = redux_dim + self.device = device + self.dtype = dtype + + self.redux_up = ops.Linear(redux_dim, txt_in_features * 3, dtype=dtype) + self.redux_down = ops.Linear(txt_in_features * 3, txt_in_features, dtype=dtype) + + def forward(self, sigclip_embeds) -> torch.Tensor: + projected_x = self.redux_down(torch.nn.functional.silu(self.redux_up(sigclip_embeds))) + return projected_x diff --git a/comfy/ldm/genmo/joint_model/asymm_models_joint.py b/comfy/ldm/genmo/joint_model/asymm_models_joint.py new file mode 100644 index 000000000..2c46c24bf --- /dev/null +++ b/comfy/ldm/genmo/joint_model/asymm_models_joint.py @@ -0,0 +1,557 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license +#adapted to ComfyUI + +from typing import Dict, List, Optional, Tuple + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange +# from flash_attn import flash_attn_varlen_qkvpacked_func +from comfy.ldm.modules.attention import optimized_attention + +from .layers import ( + FeedForward, + PatchEmbed, + RMSNorm, + TimestepEmbedder, +) + +from .rope_mixed import ( + compute_mixed_rotation, + create_position_matrix, +) +from .temporal_rope import apply_rotary_emb_qk_real +from .utils import ( + AttentionPool, + modulate, +) + +import comfy.ldm.common_dit +import comfy.ops + + +def modulated_rmsnorm(x, scale, eps=1e-6): + # Normalize and modulate + x_normed = comfy.ldm.common_dit.rms_norm(x, eps=eps) + x_modulated = x_normed * (1 + scale.unsqueeze(1)) + + return x_modulated + + +def residual_tanh_gated_rmsnorm(x, x_res, gate, eps=1e-6): + # Apply tanh to gate + tanh_gate = torch.tanh(gate).unsqueeze(1) + + # Normalize and apply gated scaling + x_normed = comfy.ldm.common_dit.rms_norm(x_res, eps=eps) * tanh_gate + + # Apply residual connection + output = x + x_normed + + return output + +class AsymmetricAttention(nn.Module): + def __init__( + self, + dim_x: int, + dim_y: int, + num_heads: int = 8, + qkv_bias: bool = True, + qk_norm: bool = False, + attn_drop: float = 0.0, + update_y: bool = True, + out_bias: bool = True, + attend_to_padding: bool = False, + softmax_scale: Optional[float] = None, + device: Optional[torch.device] = None, + dtype=None, + operations=None, + ): + super().__init__() + self.dim_x = dim_x + self.dim_y = dim_y + self.num_heads = num_heads + self.head_dim = dim_x // num_heads + self.attn_drop = attn_drop + self.update_y = update_y + self.attend_to_padding = attend_to_padding + self.softmax_scale = softmax_scale + if dim_x % num_heads != 0: + raise ValueError( + f"dim_x={dim_x} should be divisible by num_heads={num_heads}" + ) + + # Input layers. + self.qkv_bias = qkv_bias + self.qkv_x = operations.Linear(dim_x, 3 * dim_x, bias=qkv_bias, device=device, dtype=dtype) + # Project text features to match visual features (dim_y -> dim_x) + self.qkv_y = operations.Linear(dim_y, 3 * dim_x, bias=qkv_bias, device=device, dtype=dtype) + + # Query and key normalization for stability. + assert qk_norm + self.q_norm_x = RMSNorm(self.head_dim, device=device, dtype=dtype) + self.k_norm_x = RMSNorm(self.head_dim, device=device, dtype=dtype) + self.q_norm_y = RMSNorm(self.head_dim, device=device, dtype=dtype) + self.k_norm_y = RMSNorm(self.head_dim, device=device, dtype=dtype) + + # Output layers. y features go back down from dim_x -> dim_y. + self.proj_x = operations.Linear(dim_x, dim_x, bias=out_bias, device=device, dtype=dtype) + self.proj_y = ( + operations.Linear(dim_x, dim_y, bias=out_bias, device=device, dtype=dtype) + if update_y + else nn.Identity() + ) + + def forward( + self, + x: torch.Tensor, # (B, N, dim_x) + y: torch.Tensor, # (B, L, dim_y) + scale_x: torch.Tensor, # (B, dim_x), modulation for pre-RMSNorm. + scale_y: torch.Tensor, # (B, dim_y), modulation for pre-RMSNorm. + crop_y, + **rope_rotation, + ) -> Tuple[torch.Tensor, torch.Tensor]: + rope_cos = rope_rotation.get("rope_cos") + rope_sin = rope_rotation.get("rope_sin") + # Pre-norm for visual features + x = modulated_rmsnorm(x, scale_x) # (B, M, dim_x) where M = N / cp_group_size + + # Process visual features + # qkv_x = self.qkv_x(x) # (B, M, 3 * dim_x) + # assert qkv_x.dtype == torch.bfloat16 + # qkv_x = all_to_all_collect_tokens( + # qkv_x, self.num_heads + # ) # (3, B, N, local_h, head_dim) + + # Process text features + y = modulated_rmsnorm(y, scale_y) # (B, L, dim_y) + q_y, k_y, v_y = self.qkv_y(y).view(y.shape[0], y.shape[1], 3, self.num_heads, -1).unbind(2) # (B, N, local_h, head_dim) + + q_y = self.q_norm_y(q_y) + k_y = self.k_norm_y(k_y) + + # Split qkv_x into q, k, v + q_x, k_x, v_x = self.qkv_x(x).view(x.shape[0], x.shape[1], 3, self.num_heads, -1).unbind(2) # (B, N, local_h, head_dim) + q_x = self.q_norm_x(q_x) + q_x = apply_rotary_emb_qk_real(q_x, rope_cos, rope_sin) + k_x = self.k_norm_x(k_x) + k_x = apply_rotary_emb_qk_real(k_x, rope_cos, rope_sin) + + q = torch.cat([q_x, q_y[:, :crop_y]], dim=1).transpose(1, 2) + k = torch.cat([k_x, k_y[:, :crop_y]], dim=1).transpose(1, 2) + v = torch.cat([v_x, v_y[:, :crop_y]], dim=1).transpose(1, 2) + + xy = optimized_attention(q, + k, + v, self.num_heads, skip_reshape=True) + + x, y = torch.tensor_split(xy, (q_x.shape[1],), dim=1) + x = self.proj_x(x) + o = torch.zeros(y.shape[0], q_y.shape[1], y.shape[-1], device=y.device, dtype=y.dtype) + o[:, :y.shape[1]] = y + + y = self.proj_y(o) + # print("ox", x) + # print("oy", y) + return x, y + + +class AsymmetricJointBlock(nn.Module): + def __init__( + self, + hidden_size_x: int, + hidden_size_y: int, + num_heads: int, + *, + mlp_ratio_x: float = 8.0, # Ratio of hidden size to d_model for MLP for visual tokens. + mlp_ratio_y: float = 4.0, # Ratio of hidden size to d_model for MLP for text tokens. + update_y: bool = True, # Whether to update text tokens in this block. + device: Optional[torch.device] = None, + dtype=None, + operations=None, + **block_kwargs, + ): + super().__init__() + self.update_y = update_y + self.hidden_size_x = hidden_size_x + self.hidden_size_y = hidden_size_y + self.mod_x = operations.Linear(hidden_size_x, 4 * hidden_size_x, device=device, dtype=dtype) + if self.update_y: + self.mod_y = operations.Linear(hidden_size_x, 4 * hidden_size_y, device=device, dtype=dtype) + else: + self.mod_y = operations.Linear(hidden_size_x, hidden_size_y, device=device, dtype=dtype) + + # Self-attention: + self.attn = AsymmetricAttention( + hidden_size_x, + hidden_size_y, + num_heads=num_heads, + update_y=update_y, + device=device, + dtype=dtype, + operations=operations, + **block_kwargs, + ) + + # MLP. + mlp_hidden_dim_x = int(hidden_size_x * mlp_ratio_x) + assert mlp_hidden_dim_x == int(1536 * 8) + self.mlp_x = FeedForward( + in_features=hidden_size_x, + hidden_size=mlp_hidden_dim_x, + multiple_of=256, + ffn_dim_multiplier=None, + device=device, + dtype=dtype, + operations=operations, + ) + + # MLP for text not needed in last block. + if self.update_y: + mlp_hidden_dim_y = int(hidden_size_y * mlp_ratio_y) + self.mlp_y = FeedForward( + in_features=hidden_size_y, + hidden_size=mlp_hidden_dim_y, + multiple_of=256, + ffn_dim_multiplier=None, + device=device, + dtype=dtype, + operations=operations, + ) + + def forward( + self, + x: torch.Tensor, + c: torch.Tensor, + y: torch.Tensor, + **attn_kwargs, + ): + """Forward pass of a block. + + Args: + x: (B, N, dim) tensor of visual tokens + c: (B, dim) tensor of conditioned features + y: (B, L, dim) tensor of text tokens + num_frames: Number of frames in the video. N = num_frames * num_spatial_tokens + + Returns: + x: (B, N, dim) tensor of visual tokens after block + y: (B, L, dim) tensor of text tokens after block + """ + N = x.size(1) + + c = F.silu(c) + mod_x = self.mod_x(c) + scale_msa_x, gate_msa_x, scale_mlp_x, gate_mlp_x = mod_x.chunk(4, dim=1) + + mod_y = self.mod_y(c) + if self.update_y: + scale_msa_y, gate_msa_y, scale_mlp_y, gate_mlp_y = mod_y.chunk(4, dim=1) + else: + scale_msa_y = mod_y + + # Self-attention block. + x_attn, y_attn = self.attn( + x, + y, + scale_x=scale_msa_x, + scale_y=scale_msa_y, + **attn_kwargs, + ) + + assert x_attn.size(1) == N + x = residual_tanh_gated_rmsnorm(x, x_attn, gate_msa_x) + if self.update_y: + y = residual_tanh_gated_rmsnorm(y, y_attn, gate_msa_y) + + # MLP block. + x = self.ff_block_x(x, scale_mlp_x, gate_mlp_x) + if self.update_y: + y = self.ff_block_y(y, scale_mlp_y, gate_mlp_y) + + return x, y + + def ff_block_x(self, x, scale_x, gate_x): + x_mod = modulated_rmsnorm(x, scale_x) + x_res = self.mlp_x(x_mod) + x = residual_tanh_gated_rmsnorm(x, x_res, gate_x) # Sandwich norm + return x + + def ff_block_y(self, y, scale_y, gate_y): + y_mod = modulated_rmsnorm(y, scale_y) + y_res = self.mlp_y(y_mod) + y = residual_tanh_gated_rmsnorm(y, y_res, gate_y) # Sandwich norm + return y + + +class FinalLayer(nn.Module): + """ + The final layer of DiT. + """ + + def __init__( + self, + hidden_size, + patch_size, + out_channels, + device: Optional[torch.device] = None, + dtype=None, + operations=None, + ): + super().__init__() + self.norm_final = operations.LayerNorm( + hidden_size, elementwise_affine=False, eps=1e-6, device=device, dtype=dtype + ) + self.mod = operations.Linear(hidden_size, 2 * hidden_size, device=device, dtype=dtype) + self.linear = operations.Linear( + hidden_size, patch_size * patch_size * out_channels, device=device, dtype=dtype + ) + + def forward(self, x, c): + c = F.silu(c) + shift, scale = self.mod(c).chunk(2, dim=1) + x = modulate(self.norm_final(x), shift, scale) + x = self.linear(x) + return x + + +class AsymmDiTJoint(nn.Module): + """ + Diffusion model with a Transformer backbone. + + Ingests text embeddings instead of a label. + """ + + def __init__( + self, + *, + patch_size=2, + in_channels=4, + hidden_size_x=1152, + hidden_size_y=1152, + depth=48, + num_heads=16, + mlp_ratio_x=8.0, + mlp_ratio_y=4.0, + use_t5: bool = False, + t5_feat_dim: int = 4096, + t5_token_length: int = 256, + learn_sigma=True, + patch_embed_bias: bool = True, + timestep_mlp_bias: bool = True, + attend_to_padding: bool = False, + timestep_scale: Optional[float] = None, + use_extended_posenc: bool = False, + posenc_preserve_area: bool = False, + rope_theta: float = 10000.0, + image_model=None, + device: Optional[torch.device] = None, + dtype=None, + operations=None, + **block_kwargs, + ): + super().__init__() + + self.dtype = dtype + self.learn_sigma = learn_sigma + self.in_channels = in_channels + self.out_channels = in_channels * 2 if learn_sigma else in_channels + self.patch_size = patch_size + self.num_heads = num_heads + self.hidden_size_x = hidden_size_x + self.hidden_size_y = hidden_size_y + self.head_dim = ( + hidden_size_x // num_heads + ) # Head dimension and count is determined by visual. + self.attend_to_padding = attend_to_padding + self.use_extended_posenc = use_extended_posenc + self.posenc_preserve_area = posenc_preserve_area + self.use_t5 = use_t5 + self.t5_token_length = t5_token_length + self.t5_feat_dim = t5_feat_dim + self.rope_theta = ( + rope_theta # Scaling factor for frequency computation for temporal RoPE. + ) + + self.x_embedder = PatchEmbed( + patch_size=patch_size, + in_chans=in_channels, + embed_dim=hidden_size_x, + bias=patch_embed_bias, + dtype=dtype, + device=device, + operations=operations + ) + # Conditionings + # Timestep + self.t_embedder = TimestepEmbedder( + hidden_size_x, bias=timestep_mlp_bias, timestep_scale=timestep_scale, dtype=dtype, device=device, operations=operations + ) + + if self.use_t5: + # Caption Pooling (T5) + self.t5_y_embedder = AttentionPool( + t5_feat_dim, num_heads=8, output_dim=hidden_size_x, dtype=dtype, device=device, operations=operations + ) + + # Dense Embedding Projection (T5) + self.t5_yproj = operations.Linear( + t5_feat_dim, hidden_size_y, bias=True, dtype=dtype, device=device + ) + + # Initialize pos_frequencies as an empty parameter. + self.pos_frequencies = nn.Parameter( + torch.empty(3, self.num_heads, self.head_dim // 2, dtype=dtype, device=device) + ) + + assert not self.attend_to_padding + + # for depth 48: + # b = 0: AsymmetricJointBlock, update_y=True + # b = 1: AsymmetricJointBlock, update_y=True + # ... + # b = 46: AsymmetricJointBlock, update_y=True + # b = 47: AsymmetricJointBlock, update_y=False. No need to update text features. + blocks = [] + for b in range(depth): + # Joint multi-modal block + update_y = b < depth - 1 + block = AsymmetricJointBlock( + hidden_size_x, + hidden_size_y, + num_heads, + mlp_ratio_x=mlp_ratio_x, + mlp_ratio_y=mlp_ratio_y, + update_y=update_y, + attend_to_padding=attend_to_padding, + device=device, + dtype=dtype, + operations=operations, + **block_kwargs, + ) + + blocks.append(block) + self.blocks = nn.ModuleList(blocks) + + self.final_layer = FinalLayer( + hidden_size_x, patch_size, self.out_channels, dtype=dtype, device=device, operations=operations + ) + + def embed_x(self, x: torch.Tensor) -> torch.Tensor: + """ + Args: + x: (B, C=12, T, H, W) tensor of visual tokens + + Returns: + x: (B, C=3072, N) tensor of visual tokens with positional embedding. + """ + return self.x_embedder(x) # Convert BcTHW to BCN + + def prepare( + self, + x: torch.Tensor, + sigma: torch.Tensor, + t5_feat: torch.Tensor, + t5_mask: torch.Tensor, + ): + """Prepare input and conditioning embeddings.""" + # Visual patch embeddings with positional encoding. + T, H, W = x.shape[-3:] + pH, pW = H // self.patch_size, W // self.patch_size + x = self.embed_x(x) # (B, N, D), where N = T * H * W / patch_size ** 2 + assert x.ndim == 3 + + pH, pW = H // self.patch_size, W // self.patch_size + N = T * pH * pW + assert x.size(1) == N + pos = create_position_matrix( + T, pH=pH, pW=pW, device=x.device, dtype=torch.float32 + ) # (N, 3) + rope_cos, rope_sin = compute_mixed_rotation( + freqs=comfy.ops.cast_to(self.pos_frequencies, dtype=x.dtype, device=x.device), pos=pos + ) # Each are (N, num_heads, dim // 2) + + c_t = self.t_embedder(1 - sigma, out_dtype=x.dtype) # (B, D) + + t5_y_pool = self.t5_y_embedder(t5_feat, t5_mask) # (B, D) + + c = c_t + t5_y_pool + + y_feat = self.t5_yproj(t5_feat) # (B, L, t5_feat_dim) --> (B, L, D) + + return x, c, y_feat, rope_cos, rope_sin + + def forward( + self, + x: torch.Tensor, + timestep: torch.Tensor, + context: List[torch.Tensor], + attention_mask: List[torch.Tensor], + num_tokens=256, + packed_indices: Dict[str, torch.Tensor] = None, + rope_cos: torch.Tensor = None, + rope_sin: torch.Tensor = None, + control=None, transformer_options={}, **kwargs + ): + patches_replace = transformer_options.get("patches_replace", {}) + y_feat = context + y_mask = attention_mask + sigma = timestep + """Forward pass of DiT. + + Args: + x: (B, C, T, H, W) tensor of spatial inputs (images or latent representations of images) + sigma: (B,) tensor of noise standard deviations + y_feat: List((B, L, y_feat_dim) tensor of caption token features. For SDXL text encoders: L=77, y_feat_dim=2048) + y_mask: List((B, L) boolean tensor indicating which tokens are not padding) + packed_indices: Dict with keys for Flash Attention. Result of compute_packed_indices. + """ + B, _, T, H, W = x.shape + + x, c, y_feat, rope_cos, rope_sin = self.prepare( + x, sigma, y_feat, y_mask + ) + del y_mask + + blocks_replace = patches_replace.get("dit", {}) + for i, block in enumerate(self.blocks): + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"], out["txt"] = block( + args["img"], + args["vec"], + args["txt"], + rope_cos=args["rope_cos"], + rope_sin=args["rope_sin"], + crop_y=args["num_tokens"] + ) + return out + out = blocks_replace[("double_block", i)]({"img": x, "txt": y_feat, "vec": c, "rope_cos": rope_cos, "rope_sin": rope_sin, "num_tokens": num_tokens}, {"original_block": block_wrap}) + y_feat = out["txt"] + x = out["img"] + else: + x, y_feat = block( + x, + c, + y_feat, + rope_cos=rope_cos, + rope_sin=rope_sin, + crop_y=num_tokens, + ) # (B, M, D), (B, L, D) + del y_feat # Final layers don't use dense text features. + + x = self.final_layer(x, c) # (B, M, patch_size ** 2 * out_channels) + x = rearrange( + x, + "B (T hp wp) (p1 p2 c) -> B c T (hp p1) (wp p2)", + T=T, + hp=H // self.patch_size, + wp=W // self.patch_size, + p1=self.patch_size, + p2=self.patch_size, + c=self.out_channels, + ) + + return -x diff --git a/comfy/ldm/genmo/joint_model/layers.py b/comfy/ldm/genmo/joint_model/layers.py new file mode 100644 index 000000000..51d979559 --- /dev/null +++ b/comfy/ldm/genmo/joint_model/layers.py @@ -0,0 +1,164 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license +#adapted to ComfyUI + +import collections.abc +import math +from itertools import repeat +from typing import Callable, Optional + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange +import comfy.ldm.common_dit + + +# From PyTorch internals +def _ntuple(n): + def parse(x): + if isinstance(x, collections.abc.Iterable) and not isinstance(x, str): + return tuple(x) + return tuple(repeat(x, n)) + + return parse + + +to_2tuple = _ntuple(2) + + +class TimestepEmbedder(nn.Module): + def __init__( + self, + hidden_size: int, + frequency_embedding_size: int = 256, + *, + bias: bool = True, + timestep_scale: Optional[float] = None, + dtype=None, + device=None, + operations=None, + ): + super().__init__() + self.mlp = nn.Sequential( + operations.Linear(frequency_embedding_size, hidden_size, bias=bias, dtype=dtype, device=device), + nn.SiLU(), + operations.Linear(hidden_size, hidden_size, bias=bias, dtype=dtype, device=device), + ) + self.frequency_embedding_size = frequency_embedding_size + self.timestep_scale = timestep_scale + + @staticmethod + def timestep_embedding(t, dim, max_period=10000): + half = dim // 2 + freqs = torch.arange(start=0, end=half, dtype=torch.float32, device=t.device) + freqs.mul_(-math.log(max_period) / half).exp_() + args = t[:, None].float() * freqs[None] + embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1) + if dim % 2: + embedding = torch.cat( + [embedding, torch.zeros_like(embedding[:, :1])], dim=-1 + ) + return embedding + + def forward(self, t, out_dtype): + if self.timestep_scale is not None: + t = t * self.timestep_scale + t_freq = self.timestep_embedding(t, self.frequency_embedding_size).to(dtype=out_dtype) + t_emb = self.mlp(t_freq) + return t_emb + + +class FeedForward(nn.Module): + def __init__( + self, + in_features: int, + hidden_size: int, + multiple_of: int, + ffn_dim_multiplier: Optional[float], + device: Optional[torch.device] = None, + dtype=None, + operations=None, + ): + super().__init__() + # keep parameter count and computation constant compared to standard FFN + hidden_size = int(2 * hidden_size / 3) + # custom dim factor multiplier + if ffn_dim_multiplier is not None: + hidden_size = int(ffn_dim_multiplier * hidden_size) + hidden_size = multiple_of * ((hidden_size + multiple_of - 1) // multiple_of) + + self.hidden_dim = hidden_size + self.w1 = operations.Linear(in_features, 2 * hidden_size, bias=False, device=device, dtype=dtype) + self.w2 = operations.Linear(hidden_size, in_features, bias=False, device=device, dtype=dtype) + + def forward(self, x): + x, gate = self.w1(x).chunk(2, dim=-1) + x = self.w2(F.silu(x) * gate) + return x + + +class PatchEmbed(nn.Module): + def __init__( + self, + patch_size: int = 16, + in_chans: int = 3, + embed_dim: int = 768, + norm_layer: Optional[Callable] = None, + flatten: bool = True, + bias: bool = True, + dynamic_img_pad: bool = False, + dtype=None, + device=None, + operations=None, + ): + super().__init__() + self.patch_size = to_2tuple(patch_size) + self.flatten = flatten + self.dynamic_img_pad = dynamic_img_pad + + self.proj = operations.Conv2d( + in_chans, + embed_dim, + kernel_size=patch_size, + stride=patch_size, + bias=bias, + device=device, + dtype=dtype, + ) + assert norm_layer is None + self.norm = ( + norm_layer(embed_dim, device=device) if norm_layer else nn.Identity() + ) + + def forward(self, x): + B, _C, T, H, W = x.shape + if not self.dynamic_img_pad: + assert H % self.patch_size[0] == 0, f"Input height ({H}) should be divisible by patch size ({self.patch_size[0]})." + assert W % self.patch_size[1] == 0, f"Input width ({W}) should be divisible by patch size ({self.patch_size[1]})." + else: + pad_h = (self.patch_size[0] - H % self.patch_size[0]) % self.patch_size[0] + pad_w = (self.patch_size[1] - W % self.patch_size[1]) % self.patch_size[1] + x = F.pad(x, (0, pad_w, 0, pad_h)) + + x = rearrange(x, "B C T H W -> (B T) C H W", B=B, T=T) + x = comfy.ldm.common_dit.pad_to_patch_size(x, self.patch_size, padding_mode='circular') + x = self.proj(x) + + # Flatten temporal and spatial dimensions. + if not self.flatten: + raise NotImplementedError("Must flatten output.") + x = rearrange(x, "(B T) C H W -> B (T H W) C", B=B, T=T) + + x = self.norm(x) + return x + + +class RMSNorm(torch.nn.Module): + def __init__(self, hidden_size, eps=1e-5, device=None, dtype=None): + super().__init__() + self.eps = eps + self.weight = torch.nn.Parameter(torch.empty(hidden_size, device=device, dtype=dtype)) + self.register_parameter("bias", None) + + def forward(self, x): + return comfy.ldm.common_dit.rms_norm(x, self.weight, self.eps) diff --git a/comfy/ldm/genmo/joint_model/rope_mixed.py b/comfy/ldm/genmo/joint_model/rope_mixed.py new file mode 100644 index 000000000..dee3fa21f --- /dev/null +++ b/comfy/ldm/genmo/joint_model/rope_mixed.py @@ -0,0 +1,88 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license + +# import functools +import math + +import torch + + +def centers(start: float, stop, num, dtype=None, device=None): + """linspace through bin centers. + + Args: + start (float): Start of the range. + stop (float): End of the range. + num (int): Number of points. + dtype (torch.dtype): Data type of the points. + device (torch.device): Device of the points. + + Returns: + centers (Tensor): Centers of the bins. Shape: (num,). + """ + edges = torch.linspace(start, stop, num + 1, dtype=dtype, device=device) + return (edges[:-1] + edges[1:]) / 2 + + +# @functools.lru_cache(maxsize=1) +def create_position_matrix( + T: int, + pH: int, + pW: int, + device: torch.device, + dtype: torch.dtype, + *, + target_area: float = 36864, +): + """ + Args: + T: int - Temporal dimension + pH: int - Height dimension after patchify + pW: int - Width dimension after patchify + + Returns: + pos: [T * pH * pW, 3] - position matrix + """ + # Create 1D tensors for each dimension + t = torch.arange(T, dtype=dtype) + + # Positionally interpolate to area 36864. + # (3072x3072 frame with 16x16 patches = 192x192 latents). + # This automatically scales rope positions when the resolution changes. + # We use a large target area so the model is more sensitive + # to changes in the learned pos_frequencies matrix. + scale = math.sqrt(target_area / (pW * pH)) + w = centers(-pW * scale / 2, pW * scale / 2, pW) + h = centers(-pH * scale / 2, pH * scale / 2, pH) + + # Use meshgrid to create 3D grids + grid_t, grid_h, grid_w = torch.meshgrid(t, h, w, indexing="ij") + + # Stack and reshape the grids. + pos = torch.stack([grid_t, grid_h, grid_w], dim=-1) # [T, pH, pW, 3] + pos = pos.view(-1, 3) # [T * pH * pW, 3] + pos = pos.to(dtype=dtype, device=device) + + return pos + + +def compute_mixed_rotation( + freqs: torch.Tensor, + pos: torch.Tensor, +): + """ + Project each 3-dim position into per-head, per-head-dim 1D frequencies. + + Args: + freqs: [3, num_heads, num_freqs] - learned rotation frequency (for t, row, col) for each head position + pos: [N, 3] - position of each token + num_heads: int + + Returns: + freqs_cos: [N, num_heads, num_freqs] - cosine components + freqs_sin: [N, num_heads, num_freqs] - sine components + """ + assert freqs.ndim == 3 + freqs_sum = torch.einsum("Nd,dhf->Nhf", pos.to(freqs), freqs) + freqs_cos = torch.cos(freqs_sum) + freqs_sin = torch.sin(freqs_sum) + return freqs_cos, freqs_sin diff --git a/comfy/ldm/genmo/joint_model/temporal_rope.py b/comfy/ldm/genmo/joint_model/temporal_rope.py new file mode 100644 index 000000000..88f5d6d26 --- /dev/null +++ b/comfy/ldm/genmo/joint_model/temporal_rope.py @@ -0,0 +1,34 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license + +# Based on Llama3 Implementation. +import torch + + +def apply_rotary_emb_qk_real( + xqk: torch.Tensor, + freqs_cos: torch.Tensor, + freqs_sin: torch.Tensor, +) -> torch.Tensor: + """ + Apply rotary embeddings to input tensors using the given frequency tensor without complex numbers. + + Args: + xqk (torch.Tensor): Query and/or Key tensors to apply rotary embeddings. Shape: (B, S, *, num_heads, D) + Can be either just query or just key, or both stacked along some batch or * dim. + freqs_cos (torch.Tensor): Precomputed cosine frequency tensor. + freqs_sin (torch.Tensor): Precomputed sine frequency tensor. + + Returns: + torch.Tensor: The input tensor with rotary embeddings applied. + """ + # Split the last dimension into even and odd parts + xqk_even = xqk[..., 0::2] + xqk_odd = xqk[..., 1::2] + + # Apply rotation + cos_part = (xqk_even * freqs_cos - xqk_odd * freqs_sin).type_as(xqk) + sin_part = (xqk_even * freqs_sin + xqk_odd * freqs_cos).type_as(xqk) + + # Interleave the results back into the original shape + out = torch.stack([cos_part, sin_part], dim=-1).flatten(-2) + return out diff --git a/comfy/ldm/genmo/joint_model/utils.py b/comfy/ldm/genmo/joint_model/utils.py new file mode 100644 index 000000000..1b399d5d2 --- /dev/null +++ b/comfy/ldm/genmo/joint_model/utils.py @@ -0,0 +1,102 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license +#adapted to ComfyUI + +from typing import Optional + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +def modulate(x, shift, scale): + return x * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1) + + +def pool_tokens(x: torch.Tensor, mask: torch.Tensor, *, keepdim=False) -> torch.Tensor: + """ + Pool tokens in x using mask. + + NOTE: We assume x does not require gradients. + + Args: + x: (B, L, D) tensor of tokens. + mask: (B, L) boolean tensor indicating which tokens are not padding. + + Returns: + pooled: (B, D) tensor of pooled tokens. + """ + assert x.size(1) == mask.size(1) # Expected mask to have same length as tokens. + assert x.size(0) == mask.size(0) # Expected mask to have same batch size as tokens. + mask = mask[:, :, None].to(dtype=x.dtype) + mask = mask / mask.sum(dim=1, keepdim=True).clamp(min=1) + pooled = (x * mask).sum(dim=1, keepdim=keepdim) + return pooled + + +class AttentionPool(nn.Module): + def __init__( + self, + embed_dim: int, + num_heads: int, + output_dim: int = None, + device: Optional[torch.device] = None, + dtype=None, + operations=None, + ): + """ + Args: + spatial_dim (int): Number of tokens in sequence length. + embed_dim (int): Dimensionality of input tokens. + num_heads (int): Number of attention heads. + output_dim (int): Dimensionality of output tokens. Defaults to embed_dim. + """ + super().__init__() + self.num_heads = num_heads + self.to_kv = operations.Linear(embed_dim, 2 * embed_dim, device=device, dtype=dtype) + self.to_q = operations.Linear(embed_dim, embed_dim, device=device, dtype=dtype) + self.to_out = operations.Linear(embed_dim, output_dim or embed_dim, device=device, dtype=dtype) + + def forward(self, x, mask): + """ + Args: + x (torch.Tensor): (B, L, D) tensor of input tokens. + mask (torch.Tensor): (B, L) boolean tensor indicating which tokens are not padding. + + NOTE: We assume x does not require gradients. + + Returns: + x (torch.Tensor): (B, D) tensor of pooled tokens. + """ + D = x.size(2) + + # Construct attention mask, shape: (B, 1, num_queries=1, num_keys=1+L). + attn_mask = mask[:, None, None, :].bool() # (B, 1, 1, L). + attn_mask = F.pad(attn_mask, (1, 0), value=True) # (B, 1, 1, 1+L). + + # Average non-padding token features. These will be used as the query. + x_pool = pool_tokens(x, mask, keepdim=True) # (B, 1, D) + + # Concat pooled features to input sequence. + x = torch.cat([x_pool, x], dim=1) # (B, L+1, D) + + # Compute queries, keys, values. Only the mean token is used to create a query. + kv = self.to_kv(x) # (B, L+1, 2 * D) + q = self.to_q(x[:, 0]) # (B, D) + + # Extract heads. + head_dim = D // self.num_heads + kv = kv.unflatten(2, (2, self.num_heads, head_dim)) # (B, 1+L, 2, H, head_dim) + kv = kv.transpose(1, 3) # (B, H, 2, 1+L, head_dim) + k, v = kv.unbind(2) # (B, H, 1+L, head_dim) + q = q.unflatten(1, (self.num_heads, head_dim)) # (B, H, head_dim) + q = q.unsqueeze(2) # (B, H, 1, head_dim) + + # Compute attention. + x = F.scaled_dot_product_attention( + q, k, v, attn_mask=attn_mask, dropout_p=0.0 + ) # (B, H, 1, head_dim) + + # Concatenate heads and run output. + x = x.squeeze(2).flatten(1, 2) # (B, D = H * head_dim) + x = self.to_out(x) + return x diff --git a/comfy/ldm/genmo/vae/model.py b/comfy/ldm/genmo/vae/model.py new file mode 100644 index 000000000..1bde0c1ed --- /dev/null +++ b/comfy/ldm/genmo/vae/model.py @@ -0,0 +1,711 @@ +#original code from https://github.com/genmoai/models under apache 2.0 license +#adapted to ComfyUI + +from typing import List, Optional, Tuple, Union +from functools import partial +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange + +from comfy.ldm.modules.attention import optimized_attention + +import comfy.ops +ops = comfy.ops.disable_weight_init + +# import mochi_preview.dit.joint_model.context_parallel as cp +# from mochi_preview.vae.cp_conv import cp_pass_frames, gather_all_frames + + +def cast_tuple(t, length=1): + return t if isinstance(t, tuple) else ((t,) * length) + + +class GroupNormSpatial(ops.GroupNorm): + """ + GroupNorm applied per-frame. + """ + + def forward(self, x: torch.Tensor, *, chunk_size: int = 8): + B, C, T, H, W = x.shape + x = rearrange(x, "B C T H W -> (B T) C H W") + # Run group norm in chunks. + output = torch.empty_like(x) + for b in range(0, B * T, chunk_size): + output[b : b + chunk_size] = super().forward(x[b : b + chunk_size]) + return rearrange(output, "(B T) C H W -> B C T H W", B=B, T=T) + +class PConv3d(ops.Conv3d): + def __init__( + self, + in_channels, + out_channels, + kernel_size: Union[int, Tuple[int, int, int]], + stride: Union[int, Tuple[int, int, int]], + causal: bool = True, + context_parallel: bool = True, + **kwargs, + ): + self.causal = causal + self.context_parallel = context_parallel + kernel_size = cast_tuple(kernel_size, 3) + stride = cast_tuple(stride, 3) + height_pad = (kernel_size[1] - 1) // 2 + width_pad = (kernel_size[2] - 1) // 2 + + super().__init__( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + dilation=(1, 1, 1), + padding=(0, height_pad, width_pad), + **kwargs, + ) + + def forward(self, x: torch.Tensor): + # Compute padding amounts. + context_size = self.kernel_size[0] - 1 + if self.causal: + pad_front = context_size + pad_back = 0 + else: + pad_front = context_size // 2 + pad_back = context_size - pad_front + + # Apply padding. + assert self.padding_mode == "replicate" # DEBUG + mode = "constant" if self.padding_mode == "zeros" else self.padding_mode + x = F.pad(x, (0, 0, 0, 0, pad_front, pad_back), mode=mode) + return super().forward(x) + + +class Conv1x1(ops.Linear): + """*1x1 Conv implemented with a linear layer.""" + + def __init__(self, in_features: int, out_features: int, *args, **kwargs): + super().__init__(in_features, out_features, *args, **kwargs) + + def forward(self, x: torch.Tensor): + """Forward pass. + + Args: + x: Input tensor. Shape: [B, C, *] or [B, *, C]. + + Returns: + x: Output tensor. Shape: [B, C', *] or [B, *, C']. + """ + x = x.movedim(1, -1) + x = super().forward(x) + x = x.movedim(-1, 1) + return x + + +class DepthToSpaceTime(nn.Module): + def __init__( + self, + temporal_expansion: int, + spatial_expansion: int, + ): + super().__init__() + self.temporal_expansion = temporal_expansion + self.spatial_expansion = spatial_expansion + + # When printed, this module should show the temporal and spatial expansion factors. + def extra_repr(self): + return f"texp={self.temporal_expansion}, sexp={self.spatial_expansion}" + + def forward(self, x: torch.Tensor): + """Forward pass. + + Args: + x: Input tensor. Shape: [B, C, T, H, W]. + + Returns: + x: Rearranged tensor. Shape: [B, C/(st*s*s), T*st, H*s, W*s]. + """ + x = rearrange( + x, + "B (C st sh sw) T H W -> B C (T st) (H sh) (W sw)", + st=self.temporal_expansion, + sh=self.spatial_expansion, + sw=self.spatial_expansion, + ) + + # cp_rank, _ = cp.get_cp_rank_size() + if self.temporal_expansion > 1: # and cp_rank == 0: + # Drop the first self.temporal_expansion - 1 frames. + # This is because we always want the 3x3x3 conv filter to only apply + # to the first frame, and the first frame doesn't need to be repeated. + assert all(x.shape) + x = x[:, :, self.temporal_expansion - 1 :] + assert all(x.shape) + + return x + + +def norm_fn( + in_channels: int, + affine: bool = True, +): + return GroupNormSpatial(affine=affine, num_groups=32, num_channels=in_channels) + + +class ResBlock(nn.Module): + """Residual block that preserves the spatial dimensions.""" + + def __init__( + self, + channels: int, + *, + affine: bool = True, + attn_block: Optional[nn.Module] = None, + causal: bool = True, + prune_bottleneck: bool = False, + padding_mode: str, + bias: bool = True, + ): + super().__init__() + self.channels = channels + + assert causal + self.stack = nn.Sequential( + norm_fn(channels, affine=affine), + nn.SiLU(inplace=True), + PConv3d( + in_channels=channels, + out_channels=channels // 2 if prune_bottleneck else channels, + kernel_size=(3, 3, 3), + stride=(1, 1, 1), + padding_mode=padding_mode, + bias=bias, + causal=causal, + ), + norm_fn(channels, affine=affine), + nn.SiLU(inplace=True), + PConv3d( + in_channels=channels // 2 if prune_bottleneck else channels, + out_channels=channels, + kernel_size=(3, 3, 3), + stride=(1, 1, 1), + padding_mode=padding_mode, + bias=bias, + causal=causal, + ), + ) + + self.attn_block = attn_block if attn_block else nn.Identity() + + def forward(self, x: torch.Tensor): + """Forward pass. + + Args: + x: Input tensor. Shape: [B, C, T, H, W]. + """ + residual = x + x = self.stack(x) + x = x + residual + del residual + + return self.attn_block(x) + + +class Attention(nn.Module): + def __init__( + self, + dim: int, + head_dim: int = 32, + qkv_bias: bool = False, + out_bias: bool = True, + qk_norm: bool = True, + ) -> None: + super().__init__() + self.head_dim = head_dim + self.num_heads = dim // head_dim + self.qk_norm = qk_norm + + self.qkv = nn.Linear(dim, 3 * dim, bias=qkv_bias) + self.out = nn.Linear(dim, dim, bias=out_bias) + + def forward( + self, + x: torch.Tensor, + ) -> torch.Tensor: + """Compute temporal self-attention. + + Args: + x: Input tensor. Shape: [B, C, T, H, W]. + chunk_size: Chunk size for large tensors. + + Returns: + x: Output tensor. Shape: [B, C, T, H, W]. + """ + B, _, T, H, W = x.shape + + if T == 1: + # No attention for single frame. + x = x.movedim(1, -1) # [B, C, T, H, W] -> [B, T, H, W, C] + qkv = self.qkv(x) + _, _, x = qkv.chunk(3, dim=-1) # Throw away queries and keys. + x = self.out(x) + return x.movedim(-1, 1) # [B, T, H, W, C] -> [B, C, T, H, W] + + # 1D temporal attention. + x = rearrange(x, "B C t h w -> (B h w) t C") + qkv = self.qkv(x) + + # Input: qkv with shape [B, t, 3 * num_heads * head_dim] + # Output: x with shape [B, num_heads, t, head_dim] + q, k, v = qkv.view(qkv.shape[0], qkv.shape[1], 3, self.num_heads, self.head_dim).transpose(1, 3).unbind(2) + + if self.qk_norm: + q = F.normalize(q, p=2, dim=-1) + k = F.normalize(k, p=2, dim=-1) + + x = optimized_attention(q, k, v, self.num_heads, skip_reshape=True) + + assert x.size(0) == q.size(0) + + x = self.out(x) + x = rearrange(x, "(B h w) t C -> B C t h w", B=B, h=H, w=W) + return x + + +class AttentionBlock(nn.Module): + def __init__( + self, + dim: int, + **attn_kwargs, + ) -> None: + super().__init__() + self.norm = norm_fn(dim) + self.attn = Attention(dim, **attn_kwargs) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return x + self.attn(self.norm(x)) + + +class CausalUpsampleBlock(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + num_res_blocks: int, + *, + temporal_expansion: int = 2, + spatial_expansion: int = 2, + **block_kwargs, + ): + super().__init__() + + blocks = [] + for _ in range(num_res_blocks): + blocks.append(block_fn(in_channels, **block_kwargs)) + self.blocks = nn.Sequential(*blocks) + + self.temporal_expansion = temporal_expansion + self.spatial_expansion = spatial_expansion + + # Change channels in the final convolution layer. + self.proj = Conv1x1( + in_channels, + out_channels * temporal_expansion * (spatial_expansion**2), + ) + + self.d2st = DepthToSpaceTime( + temporal_expansion=temporal_expansion, spatial_expansion=spatial_expansion + ) + + def forward(self, x): + x = self.blocks(x) + x = self.proj(x) + x = self.d2st(x) + return x + + +def block_fn(channels, *, affine: bool = True, has_attention: bool = False, **block_kwargs): + attn_block = AttentionBlock(channels) if has_attention else None + return ResBlock(channels, affine=affine, attn_block=attn_block, **block_kwargs) + + +class DownsampleBlock(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + num_res_blocks, + *, + temporal_reduction=2, + spatial_reduction=2, + **block_kwargs, + ): + """ + Downsample block for the VAE encoder. + + Args: + in_channels: Number of input channels. + out_channels: Number of output channels. + num_res_blocks: Number of residual blocks. + temporal_reduction: Temporal reduction factor. + spatial_reduction: Spatial reduction factor. + """ + super().__init__() + layers = [] + + # Change the channel count in the strided convolution. + # This lets the ResBlock have uniform channel count, + # as in ConvNeXt. + assert in_channels != out_channels + layers.append( + PConv3d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=(temporal_reduction, spatial_reduction, spatial_reduction), + stride=(temporal_reduction, spatial_reduction, spatial_reduction), + # First layer in each block always uses replicate padding + padding_mode="replicate", + bias=block_kwargs["bias"], + ) + ) + + for _ in range(num_res_blocks): + layers.append(block_fn(out_channels, **block_kwargs)) + + self.layers = nn.Sequential(*layers) + + def forward(self, x): + return self.layers(x) + + +def add_fourier_features(inputs: torch.Tensor, start=6, stop=8, step=1): + num_freqs = (stop - start) // step + assert inputs.ndim == 5 + C = inputs.size(1) + + # Create Base 2 Fourier features. + freqs = torch.arange(start, stop, step, dtype=inputs.dtype, device=inputs.device) + assert num_freqs == len(freqs) + w = torch.pow(2.0, freqs) * (2 * torch.pi) # [num_freqs] + C = inputs.shape[1] + w = w.repeat(C)[None, :, None, None, None] # [1, C * num_freqs, 1, 1, 1] + + # Interleaved repeat of input channels to match w. + h = inputs.repeat_interleave(num_freqs, dim=1) # [B, C * num_freqs, T, H, W] + # Scale channels by frequency. + h = w * h + + return torch.cat( + [ + inputs, + torch.sin(h), + torch.cos(h), + ], + dim=1, + ) + + +class FourierFeatures(nn.Module): + def __init__(self, start: int = 6, stop: int = 8, step: int = 1): + super().__init__() + self.start = start + self.stop = stop + self.step = step + + def forward(self, inputs): + """Add Fourier features to inputs. + + Args: + inputs: Input tensor. Shape: [B, C, T, H, W] + + Returns: + h: Output tensor. Shape: [B, (1 + 2 * num_freqs) * C, T, H, W] + """ + return add_fourier_features(inputs, self.start, self.stop, self.step) + + +class Decoder(nn.Module): + def __init__( + self, + *, + out_channels: int = 3, + latent_dim: int, + base_channels: int, + channel_multipliers: List[int], + num_res_blocks: List[int], + temporal_expansions: Optional[List[int]] = None, + spatial_expansions: Optional[List[int]] = None, + has_attention: List[bool], + output_norm: bool = True, + nonlinearity: str = "silu", + output_nonlinearity: str = "silu", + causal: bool = True, + **block_kwargs, + ): + super().__init__() + self.input_channels = latent_dim + self.base_channels = base_channels + self.channel_multipliers = channel_multipliers + self.num_res_blocks = num_res_blocks + self.output_nonlinearity = output_nonlinearity + assert nonlinearity == "silu" + assert causal + + ch = [mult * base_channels for mult in channel_multipliers] + self.num_up_blocks = len(ch) - 1 + assert len(num_res_blocks) == self.num_up_blocks + 2 + + blocks = [] + + first_block = [ + ops.Conv3d(latent_dim, ch[-1], kernel_size=(1, 1, 1)) + ] # Input layer. + # First set of blocks preserve channel count. + for _ in range(num_res_blocks[-1]): + first_block.append( + block_fn( + ch[-1], + has_attention=has_attention[-1], + causal=causal, + **block_kwargs, + ) + ) + blocks.append(nn.Sequential(*first_block)) + + assert len(temporal_expansions) == len(spatial_expansions) == self.num_up_blocks + assert len(num_res_blocks) == len(has_attention) == self.num_up_blocks + 2 + + upsample_block_fn = CausalUpsampleBlock + + for i in range(self.num_up_blocks): + block = upsample_block_fn( + ch[-i - 1], + ch[-i - 2], + num_res_blocks=num_res_blocks[-i - 2], + has_attention=has_attention[-i - 2], + temporal_expansion=temporal_expansions[-i - 1], + spatial_expansion=spatial_expansions[-i - 1], + causal=causal, + **block_kwargs, + ) + blocks.append(block) + + assert not output_norm + + # Last block. Preserve channel count. + last_block = [] + for _ in range(num_res_blocks[0]): + last_block.append( + block_fn( + ch[0], has_attention=has_attention[0], causal=causal, **block_kwargs + ) + ) + blocks.append(nn.Sequential(*last_block)) + + self.blocks = nn.ModuleList(blocks) + self.output_proj = Conv1x1(ch[0], out_channels) + + def forward(self, x): + """Forward pass. + + Args: + x: Latent tensor. Shape: [B, input_channels, t, h, w]. Scaled [-1, 1]. + + Returns: + x: Reconstructed video tensor. Shape: [B, C, T, H, W]. Scaled to [-1, 1]. + T + 1 = (t - 1) * 4. + H = h * 16, W = w * 16. + """ + for block in self.blocks: + x = block(x) + + if self.output_nonlinearity == "silu": + x = F.silu(x, inplace=not self.training) + else: + assert ( + not self.output_nonlinearity + ) # StyleGAN3 omits the to-RGB nonlinearity. + + return self.output_proj(x).contiguous() + +class LatentDistribution: + def __init__(self, mean: torch.Tensor, logvar: torch.Tensor): + """Initialize latent distribution. + + Args: + mean: Mean of the distribution. Shape: [B, C, T, H, W]. + logvar: Logarithm of variance of the distribution. Shape: [B, C, T, H, W]. + """ + assert mean.shape == logvar.shape + self.mean = mean + self.logvar = logvar + + def sample(self, temperature=1.0, generator: torch.Generator = None, noise=None): + if temperature == 0.0: + return self.mean + + if noise is None: + noise = torch.randn(self.mean.shape, device=self.mean.device, dtype=self.mean.dtype, generator=generator) + else: + assert noise.device == self.mean.device + noise = noise.to(self.mean.dtype) + + if temperature != 1.0: + raise NotImplementedError(f"Temperature {temperature} is not supported.") + + # Just Gaussian sample with no scaling of variance. + return noise * torch.exp(self.logvar * 0.5) + self.mean + + def mode(self): + return self.mean + +class Encoder(nn.Module): + def __init__( + self, + *, + in_channels: int, + base_channels: int, + channel_multipliers: List[int], + num_res_blocks: List[int], + latent_dim: int, + temporal_reductions: List[int], + spatial_reductions: List[int], + prune_bottlenecks: List[bool], + has_attentions: List[bool], + affine: bool = True, + bias: bool = True, + input_is_conv_1x1: bool = False, + padding_mode: str, + ): + super().__init__() + self.temporal_reductions = temporal_reductions + self.spatial_reductions = spatial_reductions + self.base_channels = base_channels + self.channel_multipliers = channel_multipliers + self.num_res_blocks = num_res_blocks + self.latent_dim = latent_dim + + self.fourier_features = FourierFeatures() + ch = [mult * base_channels for mult in channel_multipliers] + num_down_blocks = len(ch) - 1 + assert len(num_res_blocks) == num_down_blocks + 2 + + layers = ( + [ops.Conv3d(in_channels, ch[0], kernel_size=(1, 1, 1), bias=True)] + if not input_is_conv_1x1 + else [Conv1x1(in_channels, ch[0])] + ) + + assert len(prune_bottlenecks) == num_down_blocks + 2 + assert len(has_attentions) == num_down_blocks + 2 + block = partial(block_fn, padding_mode=padding_mode, affine=affine, bias=bias) + + for _ in range(num_res_blocks[0]): + layers.append(block(ch[0], has_attention=has_attentions[0], prune_bottleneck=prune_bottlenecks[0])) + prune_bottlenecks = prune_bottlenecks[1:] + has_attentions = has_attentions[1:] + + assert len(temporal_reductions) == len(spatial_reductions) == len(ch) - 1 + for i in range(num_down_blocks): + layer = DownsampleBlock( + ch[i], + ch[i + 1], + num_res_blocks=num_res_blocks[i + 1], + temporal_reduction=temporal_reductions[i], + spatial_reduction=spatial_reductions[i], + prune_bottleneck=prune_bottlenecks[i], + has_attention=has_attentions[i], + affine=affine, + bias=bias, + padding_mode=padding_mode, + ) + + layers.append(layer) + + # Additional blocks. + for _ in range(num_res_blocks[-1]): + layers.append(block(ch[-1], has_attention=has_attentions[-1], prune_bottleneck=prune_bottlenecks[-1])) + + self.layers = nn.Sequential(*layers) + + # Output layers. + self.output_norm = norm_fn(ch[-1]) + self.output_proj = Conv1x1(ch[-1], 2 * latent_dim, bias=False) + + @property + def temporal_downsample(self): + return math.prod(self.temporal_reductions) + + @property + def spatial_downsample(self): + return math.prod(self.spatial_reductions) + + def forward(self, x) -> LatentDistribution: + """Forward pass. + + Args: + x: Input video tensor. Shape: [B, C, T, H, W]. Scaled to [-1, 1] + + Returns: + means: Latent tensor. Shape: [B, latent_dim, t, h, w]. Scaled [-1, 1]. + h = H // 8, w = W // 8, t - 1 = (T - 1) // 6 + logvar: Shape: [B, latent_dim, t, h, w]. + """ + assert x.ndim == 5, f"Expected 5D input, got {x.shape}" + x = self.fourier_features(x) + + x = self.layers(x) + + x = self.output_norm(x) + x = F.silu(x, inplace=True) + x = self.output_proj(x) + + means, logvar = torch.chunk(x, 2, dim=1) + + assert means.ndim == 5 + assert logvar.shape == means.shape + assert means.size(1) == self.latent_dim + + return LatentDistribution(means, logvar) + + +class VideoVAE(nn.Module): + def __init__(self): + super().__init__() + self.encoder = Encoder( + in_channels=15, + base_channels=64, + channel_multipliers=[1, 2, 4, 6], + num_res_blocks=[3, 3, 4, 6, 3], + latent_dim=12, + temporal_reductions=[1, 2, 3], + spatial_reductions=[2, 2, 2], + prune_bottlenecks=[False, False, False, False, False], + has_attentions=[False, True, True, True, True], + affine=True, + bias=True, + input_is_conv_1x1=True, + padding_mode="replicate" + ) + self.decoder = Decoder( + out_channels=3, + base_channels=128, + channel_multipliers=[1, 2, 4, 6], + temporal_expansions=[1, 2, 3], + spatial_expansions=[2, 2, 2], + num_res_blocks=[3, 3, 4, 6, 3], + latent_dim=12, + has_attention=[False, False, False, False, False], + padding_mode="replicate", + output_norm=False, + nonlinearity="silu", + output_nonlinearity="silu", + causal=True, + ) + + def encode(self, x): + return self.encoder(x).mode() + + def decode(self, x): + return self.decoder(x) diff --git a/comfy/ldm/hunyuan_video/model.py b/comfy/ldm/hunyuan_video/model.py new file mode 100644 index 000000000..d6d854089 --- /dev/null +++ b/comfy/ldm/hunyuan_video/model.py @@ -0,0 +1,330 @@ +#Based on Flux code because of weird hunyuan video code license. + +import torch +import comfy.ldm.flux.layers +import comfy.ldm.modules.diffusionmodules.mmdit +from comfy.ldm.modules.attention import optimized_attention + + +from dataclasses import dataclass +from einops import repeat + +from torch import Tensor, nn + +from comfy.ldm.flux.layers import ( + DoubleStreamBlock, + EmbedND, + LastLayer, + MLPEmbedder, + SingleStreamBlock, + timestep_embedding +) + +import comfy.ldm.common_dit + + +@dataclass +class HunyuanVideoParams: + in_channels: int + out_channels: int + vec_in_dim: int + context_in_dim: int + hidden_size: int + mlp_ratio: float + num_heads: int + depth: int + depth_single_blocks: int + axes_dim: list + theta: int + patch_size: list + qkv_bias: bool + guidance_embed: bool + + +class SelfAttentionRef(nn.Module): + def __init__(self, dim: int, qkv_bias: bool = False, dtype=None, device=None, operations=None): + super().__init__() + self.qkv = operations.Linear(dim, dim * 3, bias=qkv_bias, dtype=dtype, device=device) + self.proj = operations.Linear(dim, dim, dtype=dtype, device=device) + + +class TokenRefinerBlock(nn.Module): + def __init__( + self, + hidden_size, + heads, + dtype=None, + device=None, + operations=None + ): + super().__init__() + self.heads = heads + mlp_hidden_dim = hidden_size * 4 + + self.adaLN_modulation = nn.Sequential( + nn.SiLU(), + operations.Linear(hidden_size, 2 * hidden_size, bias=True, dtype=dtype, device=device), + ) + + self.norm1 = operations.LayerNorm(hidden_size, elementwise_affine=True, eps=1e-6, dtype=dtype, device=device) + self.self_attn = SelfAttentionRef(hidden_size, True, dtype=dtype, device=device, operations=operations) + + self.norm2 = operations.LayerNorm(hidden_size, elementwise_affine=True, eps=1e-6, dtype=dtype, device=device) + + self.mlp = nn.Sequential( + operations.Linear(hidden_size, mlp_hidden_dim, bias=True, dtype=dtype, device=device), + nn.SiLU(), + operations.Linear(mlp_hidden_dim, hidden_size, bias=True, dtype=dtype, device=device), + ) + + def forward(self, x, c, mask): + mod1, mod2 = self.adaLN_modulation(c).chunk(2, dim=1) + + norm_x = self.norm1(x) + qkv = self.self_attn.qkv(norm_x) + q, k, v = qkv.reshape(qkv.shape[0], qkv.shape[1], 3, self.heads, -1).permute(2, 0, 3, 1, 4) + attn = optimized_attention(q, k, v, self.heads, mask=mask, skip_reshape=True) + + x = x + self.self_attn.proj(attn) * mod1.unsqueeze(1) + x = x + self.mlp(self.norm2(x)) * mod2.unsqueeze(1) + return x + + +class IndividualTokenRefiner(nn.Module): + def __init__( + self, + hidden_size, + heads, + num_blocks, + dtype=None, + device=None, + operations=None + ): + super().__init__() + self.blocks = nn.ModuleList( + [ + TokenRefinerBlock( + hidden_size=hidden_size, + heads=heads, + dtype=dtype, + device=device, + operations=operations + ) + for _ in range(num_blocks) + ] + ) + + def forward(self, x, c, mask): + m = None + if mask is not None: + m = mask.view(mask.shape[0], 1, 1, mask.shape[1]).repeat(1, 1, mask.shape[1], 1) + m = m + m.transpose(2, 3) + + for block in self.blocks: + x = block(x, c, m) + return x + + + +class TokenRefiner(nn.Module): + def __init__( + self, + text_dim, + hidden_size, + heads, + num_blocks, + dtype=None, + device=None, + operations=None + ): + super().__init__() + + self.input_embedder = operations.Linear(text_dim, hidden_size, bias=True, dtype=dtype, device=device) + self.t_embedder = MLPEmbedder(256, hidden_size, dtype=dtype, device=device, operations=operations) + self.c_embedder = MLPEmbedder(text_dim, hidden_size, dtype=dtype, device=device, operations=operations) + self.individual_token_refiner = IndividualTokenRefiner(hidden_size, heads, num_blocks, dtype=dtype, device=device, operations=operations) + + def forward( + self, + x, + timesteps, + mask, + ): + t = self.t_embedder(timestep_embedding(timesteps, 256, time_factor=1.0).to(x.dtype)) + # m = mask.float().unsqueeze(-1) + # c = (x.float() * m).sum(dim=1) / m.sum(dim=1) #TODO: the following works when the x.shape is the same length as the tokens but might break otherwise + c = x.sum(dim=1) / x.shape[1] + + c = t + self.c_embedder(c.to(x.dtype)) + x = self.input_embedder(x) + x = self.individual_token_refiner(x, c, mask) + return x + +class HunyuanVideo(nn.Module): + """ + Transformer model for flow matching on sequences. + """ + + def __init__(self, image_model=None, final_layer=True, dtype=None, device=None, operations=None, **kwargs): + super().__init__() + self.dtype = dtype + params = HunyuanVideoParams(**kwargs) + self.params = params + self.patch_size = params.patch_size + self.in_channels = params.in_channels + self.out_channels = params.out_channels + if params.hidden_size % params.num_heads != 0: + raise ValueError( + f"Hidden size {params.hidden_size} must be divisible by num_heads {params.num_heads}" + ) + pe_dim = params.hidden_size // params.num_heads + if sum(params.axes_dim) != pe_dim: + raise ValueError(f"Got {params.axes_dim} but expected positional dim {pe_dim}") + self.hidden_size = params.hidden_size + self.num_heads = params.num_heads + self.pe_embedder = EmbedND(dim=pe_dim, theta=params.theta, axes_dim=params.axes_dim) + + self.img_in = comfy.ldm.modules.diffusionmodules.mmdit.PatchEmbed(None, self.patch_size, self.in_channels, self.hidden_size, conv3d=True, dtype=dtype, device=device, operations=operations) + self.time_in = MLPEmbedder(in_dim=256, hidden_dim=self.hidden_size, dtype=dtype, device=device, operations=operations) + self.vector_in = MLPEmbedder(params.vec_in_dim, self.hidden_size, dtype=dtype, device=device, operations=operations) + self.guidance_in = ( + MLPEmbedder(in_dim=256, hidden_dim=self.hidden_size, dtype=dtype, device=device, operations=operations) if params.guidance_embed else nn.Identity() + ) + + self.txt_in = TokenRefiner(params.context_in_dim, self.hidden_size, self.num_heads, 2, dtype=dtype, device=device, operations=operations) + + self.double_blocks = nn.ModuleList( + [ + DoubleStreamBlock( + self.hidden_size, + self.num_heads, + mlp_ratio=params.mlp_ratio, + qkv_bias=params.qkv_bias, + flipped_img_txt=True, + dtype=dtype, device=device, operations=operations + ) + for _ in range(params.depth) + ] + ) + + self.single_blocks = nn.ModuleList( + [ + SingleStreamBlock(self.hidden_size, self.num_heads, mlp_ratio=params.mlp_ratio, dtype=dtype, device=device, operations=operations) + for _ in range(params.depth_single_blocks) + ] + ) + + if final_layer: + self.final_layer = LastLayer(self.hidden_size, self.patch_size[-1], self.out_channels, dtype=dtype, device=device, operations=operations) + + def forward_orig( + self, + img: Tensor, + img_ids: Tensor, + txt: Tensor, + txt_ids: Tensor, + txt_mask: Tensor, + timesteps: Tensor, + y: Tensor, + guidance: Tensor = None, + control=None, + transformer_options={}, + ) -> Tensor: + patches_replace = transformer_options.get("patches_replace", {}) + + initial_shape = list(img.shape) + # running on sequences img + img = self.img_in(img) + vec = self.time_in(timestep_embedding(timesteps, 256, time_factor=1.0).to(img.dtype)) + + vec = vec + self.vector_in(y[:, :self.params.vec_in_dim]) + + if self.params.guidance_embed: + if guidance is None: + raise ValueError("Didn't get guidance strength for guidance distilled model.") + vec = vec + self.guidance_in(timestep_embedding(guidance, 256).to(img.dtype)) + + if txt_mask is not None and not torch.is_floating_point(txt_mask): + txt_mask = (txt_mask - 1).to(img.dtype) * torch.finfo(img.dtype).max + + txt = self.txt_in(txt, timesteps, txt_mask) + + ids = torch.cat((img_ids, txt_ids), dim=1) + pe = self.pe_embedder(ids) + + img_len = img.shape[1] + if txt_mask is not None: + attn_mask_len = img_len + txt.shape[1] + attn_mask = torch.zeros((1, 1, attn_mask_len), dtype=img.dtype, device=img.device) + attn_mask[:, 0, img_len:] = txt_mask + else: + attn_mask = None + + blocks_replace = patches_replace.get("dit", {}) + for i, block in enumerate(self.double_blocks): + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"], out["txt"] = block(img=args["img"], txt=args["txt"], vec=args["vec"], pe=args["pe"], attn_mask=args["attention_mask"]) + return out + + out = blocks_replace[("double_block", i)]({"img": img, "txt": txt, "vec": vec, "pe": pe, "attention_mask": attn_mask}, {"original_block": block_wrap}) + txt = out["txt"] + img = out["img"] + else: + img, txt = block(img=img, txt=txt, vec=vec, pe=pe, attn_mask=attn_mask) + + if control is not None: # Controlnet + control_i = control.get("input") + if i < len(control_i): + add = control_i[i] + if add is not None: + img += add + + img = torch.cat((img, txt), 1) + + for i, block in enumerate(self.single_blocks): + if ("single_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = block(args["img"], vec=args["vec"], pe=args["pe"], attn_mask=args["attention_mask"]) + return out + + out = blocks_replace[("single_block", i)]({"img": img, "vec": vec, "pe": pe, "attention_mask": attn_mask}, {"original_block": block_wrap}) + img = out["img"] + else: + img = block(img, vec=vec, pe=pe, attn_mask=attn_mask) + + if control is not None: # Controlnet + control_o = control.get("output") + if i < len(control_o): + add = control_o[i] + if add is not None: + img[:, : img_len] += add + + img = img[:, : img_len] + + img = self.final_layer(img, vec) # (N, T, patch_size ** 2 * out_channels) + + shape = initial_shape[-3:] + for i in range(len(shape)): + shape[i] = shape[i] // self.patch_size[i] + img = img.reshape([img.shape[0]] + shape + [self.out_channels] + self.patch_size) + img = img.permute(0, 4, 1, 5, 2, 6, 3, 7) + img = img.reshape(initial_shape) + return img + + def forward(self, x, timestep, context, y, guidance, attention_mask=None, control=None, transformer_options={}, **kwargs): + bs, c, t, h, w = x.shape + patch_size = self.patch_size + t_len = ((t + (patch_size[0] // 2)) // patch_size[0]) + h_len = ((h + (patch_size[1] // 2)) // patch_size[1]) + w_len = ((w + (patch_size[2] // 2)) // patch_size[2]) + img_ids = torch.zeros((t_len, h_len, w_len, 3), device=x.device, dtype=x.dtype) + img_ids[:, :, :, 0] = img_ids[:, :, :, 0] + torch.linspace(0, t_len - 1, steps=t_len, device=x.device, dtype=x.dtype).reshape(-1, 1, 1) + img_ids[:, :, :, 1] = img_ids[:, :, :, 1] + torch.linspace(0, h_len - 1, steps=h_len, device=x.device, dtype=x.dtype).reshape(1, -1, 1) + img_ids[:, :, :, 2] = img_ids[:, :, :, 2] + torch.linspace(0, w_len - 1, steps=w_len, device=x.device, dtype=x.dtype).reshape(1, 1, -1) + img_ids = repeat(img_ids, "t h w c -> b (t h w) c", b=bs) + txt_ids = torch.zeros((bs, context.shape[1], 3), device=x.device, dtype=x.dtype) + out = self.forward_orig(x, img_ids, context, txt_ids, attention_mask, timestep, y, guidance, control, transformer_options) + return out diff --git a/comfy/ldm/hydit/controlnet.py b/comfy/ldm/hydit/controlnet.py index cd71fca31..31a6bff94 100644 --- a/comfy/ldm/hydit/controlnet.py +++ b/comfy/ldm/hydit/controlnet.py @@ -1,24 +1,17 @@ -from typing import Any, Optional import torch import torch.nn as nn -import torch.nn.functional as F -from torch.utils import checkpoint from comfy.ldm.modules.diffusionmodules.mmdit import ( - Mlp, TimestepEmbedder, PatchEmbed, - RMSNorm, ) -from comfy.ldm.modules.diffusionmodules.util import timestep_embedding from .poolers import AttentionPool import comfy.latent_formats from .models import HunYuanDiTBlock, calc_rope -from .posemb_layers import get_2d_rotary_pos_embed, get_fill_resize_and_crop class HunYuanControlNet(nn.Module): @@ -171,9 +164,6 @@ class HunYuanControlNet(nn.Module): ), ) - # Image embedding - num_patches = self.x_embedder.num_patches - # HUnYuanDiT Blocks self.blocks = nn.ModuleList( [ diff --git a/comfy/ldm/hydit/models.py b/comfy/ldm/hydit/models.py index f3afaad34..359f6a965 100644 --- a/comfy/ldm/hydit/models.py +++ b/comfy/ldm/hydit/models.py @@ -1,8 +1,6 @@ -from typing import Any import torch import torch.nn as nn -import torch.nn.functional as F import comfy.ops from comfy.ldm.modules.diffusionmodules.mmdit import Mlp, TimestepEmbedder, PatchEmbed, RMSNorm @@ -250,9 +248,6 @@ class HunYuanDiT(nn.Module): operations.Linear(hidden_size * 4, hidden_size, bias=True, dtype=dtype, device=device), ) - # Image embedding - num_patches = self.x_embedder.num_patches - # HUnYuanDiT Blocks self.blocks = nn.ModuleList([ HunYuanDiTBlock(hidden_size=hidden_size, @@ -287,7 +282,7 @@ class HunYuanDiT(nn.Module): style=None, return_dict=False, control=None, - transformer_options=None, + transformer_options={}, ): """ Forward pass of the encoder. @@ -315,8 +310,7 @@ class HunYuanDiT(nn.Module): return_dict: bool Whether to return a dictionary. """ - #import pdb - #pdb.set_trace() + patches_replace = transformer_options.get("patches_replace", {}) encoder_hidden_states = context text_states = encoder_hidden_states # 2,77,1024 text_states_t5 = encoder_hidden_states_t5 # 2,256,2048 @@ -364,6 +358,8 @@ class HunYuanDiT(nn.Module): # Concatenate all extra vectors c = t + self.extra_embedder(extra_vec) # [B, D] + blocks_replace = patches_replace.get("dit", {}) + controls = None if control: controls = control.get("output", None) @@ -372,12 +368,23 @@ class HunYuanDiT(nn.Module): for layer, block in enumerate(self.blocks): if layer > self.depth // 2: if controls is not None: - skip = skips.pop() + controls.pop() + skip = skips.pop() + controls.pop().to(dtype=x.dtype) else: skip = skips.pop() - x = block(x, c, text_states, freqs_cis_img, skip) # (N, L, D) else: - x = block(x, c, text_states, freqs_cis_img) # (N, L, D) + skip = None + + if ("double_block", layer) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = block(args["img"], args["vec"], args["txt"], args["pe"], args["skip"]) + return out + + out = blocks_replace[("double_block", layer)]({"img": x, "txt": text_states, "vec": c, "pe": freqs_cis_img, "skip": skip}, {"original_block": block_wrap}) + x = out["img"] + else: + x = block(x, c, text_states, freqs_cis_img, skip) # (N, L, D) + if layer < (self.depth // 2 - 1): skips.append(x) diff --git a/comfy/ldm/hydit/poolers.py b/comfy/ldm/hydit/poolers.py index f5e5b406f..c1b878ed6 100644 --- a/comfy/ldm/hydit/poolers.py +++ b/comfy/ldm/hydit/poolers.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from comfy.ldm.modules.attention import optimized_attention import comfy.ops diff --git a/comfy/ldm/lightricks/model.py b/comfy/ldm/lightricks/model.py new file mode 100644 index 000000000..eeeeaea04 --- /dev/null +++ b/comfy/ldm/lightricks/model.py @@ -0,0 +1,527 @@ +import torch +from torch import nn +import comfy.ldm.modules.attention +from comfy.ldm.genmo.joint_model.layers import RMSNorm +import comfy.ldm.common_dit +from einops import rearrange +import math +from typing import Dict, Optional, Tuple + +from .symmetric_patchifier import SymmetricPatchifier + + +def get_timestep_embedding( + timesteps: torch.Tensor, + embedding_dim: int, + flip_sin_to_cos: bool = False, + downscale_freq_shift: float = 1, + scale: float = 1, + max_period: int = 10000, +): + """ + This matches the implementation in Denoising Diffusion Probabilistic Models: Create sinusoidal timestep embeddings. + + Args + timesteps (torch.Tensor): + a 1-D Tensor of N indices, one per batch element. These may be fractional. + embedding_dim (int): + the dimension of the output. + flip_sin_to_cos (bool): + Whether the embedding order should be `cos, sin` (if True) or `sin, cos` (if False) + downscale_freq_shift (float): + Controls the delta between frequencies between dimensions + scale (float): + Scaling factor applied to the embeddings. + max_period (int): + Controls the maximum frequency of the embeddings + Returns + torch.Tensor: an [N x dim] Tensor of positional embeddings. + """ + assert len(timesteps.shape) == 1, "Timesteps should be a 1d-array" + + half_dim = embedding_dim // 2 + exponent = -math.log(max_period) * torch.arange( + start=0, end=half_dim, dtype=torch.float32, device=timesteps.device + ) + exponent = exponent / (half_dim - downscale_freq_shift) + + emb = torch.exp(exponent) + emb = timesteps[:, None].float() * emb[None, :] + + # scale embeddings + emb = scale * emb + + # concat sine and cosine embeddings + emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=-1) + + # flip sine and cosine embeddings + if flip_sin_to_cos: + emb = torch.cat([emb[:, half_dim:], emb[:, :half_dim]], dim=-1) + + # zero pad + if embedding_dim % 2 == 1: + emb = torch.nn.functional.pad(emb, (0, 1, 0, 0)) + return emb + + +class TimestepEmbedding(nn.Module): + def __init__( + self, + in_channels: int, + time_embed_dim: int, + act_fn: str = "silu", + out_dim: int = None, + post_act_fn: Optional[str] = None, + cond_proj_dim=None, + sample_proj_bias=True, + dtype=None, device=None, operations=None, + ): + super().__init__() + + self.linear_1 = operations.Linear(in_channels, time_embed_dim, sample_proj_bias, dtype=dtype, device=device) + + if cond_proj_dim is not None: + self.cond_proj = operations.Linear(cond_proj_dim, in_channels, bias=False, dtype=dtype, device=device) + else: + self.cond_proj = None + + self.act = nn.SiLU() + + if out_dim is not None: + time_embed_dim_out = out_dim + else: + time_embed_dim_out = time_embed_dim + self.linear_2 = operations.Linear(time_embed_dim, time_embed_dim_out, sample_proj_bias, dtype=dtype, device=device) + + if post_act_fn is None: + self.post_act = None + # else: + # self.post_act = get_activation(post_act_fn) + + def forward(self, sample, condition=None): + if condition is not None: + sample = sample + self.cond_proj(condition) + sample = self.linear_1(sample) + + if self.act is not None: + sample = self.act(sample) + + sample = self.linear_2(sample) + + if self.post_act is not None: + sample = self.post_act(sample) + return sample + + +class Timesteps(nn.Module): + def __init__(self, num_channels: int, flip_sin_to_cos: bool, downscale_freq_shift: float, scale: int = 1): + super().__init__() + self.num_channels = num_channels + self.flip_sin_to_cos = flip_sin_to_cos + self.downscale_freq_shift = downscale_freq_shift + self.scale = scale + + def forward(self, timesteps): + t_emb = get_timestep_embedding( + timesteps, + self.num_channels, + flip_sin_to_cos=self.flip_sin_to_cos, + downscale_freq_shift=self.downscale_freq_shift, + scale=self.scale, + ) + return t_emb + + +class PixArtAlphaCombinedTimestepSizeEmbeddings(nn.Module): + """ + For PixArt-Alpha. + + Reference: + https://github.com/PixArt-alpha/PixArt-alpha/blob/0f55e922376d8b797edd44d25d0e7464b260dcab/diffusion/model/nets/PixArtMS.py#L164C9-L168C29 + """ + + def __init__(self, embedding_dim, size_emb_dim, use_additional_conditions: bool = False, dtype=None, device=None, operations=None): + super().__init__() + + self.outdim = size_emb_dim + self.time_proj = Timesteps(num_channels=256, flip_sin_to_cos=True, downscale_freq_shift=0) + self.timestep_embedder = TimestepEmbedding(in_channels=256, time_embed_dim=embedding_dim, dtype=dtype, device=device, operations=operations) + + def forward(self, timestep, resolution, aspect_ratio, batch_size, hidden_dtype): + timesteps_proj = self.time_proj(timestep) + timesteps_emb = self.timestep_embedder(timesteps_proj.to(dtype=hidden_dtype)) # (N, D) + return timesteps_emb + + +class AdaLayerNormSingle(nn.Module): + r""" + Norm layer adaptive layer norm single (adaLN-single). + + As proposed in PixArt-Alpha (see: https://arxiv.org/abs/2310.00426; Section 2.3). + + Parameters: + embedding_dim (`int`): The size of each embedding vector. + use_additional_conditions (`bool`): To use additional conditions for normalization or not. + """ + + def __init__(self, embedding_dim: int, use_additional_conditions: bool = False, dtype=None, device=None, operations=None): + super().__init__() + + self.emb = PixArtAlphaCombinedTimestepSizeEmbeddings( + embedding_dim, size_emb_dim=embedding_dim // 3, use_additional_conditions=use_additional_conditions, dtype=dtype, device=device, operations=operations + ) + + self.silu = nn.SiLU() + self.linear = operations.Linear(embedding_dim, 6 * embedding_dim, bias=True, dtype=dtype, device=device) + + def forward( + self, + timestep: torch.Tensor, + added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None, + batch_size: Optional[int] = None, + hidden_dtype: Optional[torch.dtype] = None, + ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + # No modulation happening here. + added_cond_kwargs = added_cond_kwargs or {"resolution": None, "aspect_ratio": None} + embedded_timestep = self.emb(timestep, **added_cond_kwargs, batch_size=batch_size, hidden_dtype=hidden_dtype) + return self.linear(self.silu(embedded_timestep)), embedded_timestep + +class PixArtAlphaTextProjection(nn.Module): + """ + Projects caption embeddings. Also handles dropout for classifier-free guidance. + + Adapted from https://github.com/PixArt-alpha/PixArt-alpha/blob/master/diffusion/model/nets/PixArt_blocks.py + """ + + def __init__(self, in_features, hidden_size, out_features=None, act_fn="gelu_tanh", dtype=None, device=None, operations=None): + super().__init__() + if out_features is None: + out_features = hidden_size + self.linear_1 = operations.Linear(in_features=in_features, out_features=hidden_size, bias=True, dtype=dtype, device=device) + if act_fn == "gelu_tanh": + self.act_1 = nn.GELU(approximate="tanh") + elif act_fn == "silu": + self.act_1 = nn.SiLU() + else: + raise ValueError(f"Unknown activation function: {act_fn}") + self.linear_2 = operations.Linear(in_features=hidden_size, out_features=out_features, bias=True, dtype=dtype, device=device) + + def forward(self, caption): + hidden_states = self.linear_1(caption) + hidden_states = self.act_1(hidden_states) + hidden_states = self.linear_2(hidden_states) + return hidden_states + + +class GELU_approx(nn.Module): + def __init__(self, dim_in, dim_out, dtype=None, device=None, operations=None): + super().__init__() + self.proj = operations.Linear(dim_in, dim_out, dtype=dtype, device=device) + + def forward(self, x): + return torch.nn.functional.gelu(self.proj(x), approximate="tanh") + + +class FeedForward(nn.Module): + def __init__(self, dim, dim_out, mult=4, glu=False, dropout=0., dtype=None, device=None, operations=None): + super().__init__() + inner_dim = int(dim * mult) + project_in = GELU_approx(dim, inner_dim, dtype=dtype, device=device, operations=operations) + + self.net = nn.Sequential( + project_in, + nn.Dropout(dropout), + operations.Linear(inner_dim, dim_out, dtype=dtype, device=device) + ) + + def forward(self, x): + return self.net(x) + + +def apply_rotary_emb(input_tensor, freqs_cis): #TODO: remove duplicate funcs and pick the best/fastest one + cos_freqs = freqs_cis[0] + sin_freqs = freqs_cis[1] + + t_dup = rearrange(input_tensor, "... (d r) -> ... d r", r=2) + t1, t2 = t_dup.unbind(dim=-1) + t_dup = torch.stack((-t2, t1), dim=-1) + input_tensor_rot = rearrange(t_dup, "... d r -> ... (d r)") + + out = input_tensor * cos_freqs + input_tensor_rot * sin_freqs + + return out + + +class CrossAttention(nn.Module): + def __init__(self, query_dim, context_dim=None, heads=8, dim_head=64, dropout=0., attn_precision=None, dtype=None, device=None, operations=None): + super().__init__() + inner_dim = dim_head * heads + context_dim = query_dim if context_dim is None else context_dim + self.attn_precision = attn_precision + + self.heads = heads + self.dim_head = dim_head + + self.q_norm = RMSNorm(inner_dim, dtype=dtype, device=device) + self.k_norm = RMSNorm(inner_dim, dtype=dtype, device=device) + + self.to_q = operations.Linear(query_dim, inner_dim, bias=True, dtype=dtype, device=device) + self.to_k = operations.Linear(context_dim, inner_dim, bias=True, dtype=dtype, device=device) + self.to_v = operations.Linear(context_dim, inner_dim, bias=True, dtype=dtype, device=device) + + self.to_out = nn.Sequential(operations.Linear(inner_dim, query_dim, dtype=dtype, device=device), nn.Dropout(dropout)) + + def forward(self, x, context=None, mask=None, pe=None): + q = self.to_q(x) + context = x if context is None else context + k = self.to_k(context) + v = self.to_v(context) + + q = self.q_norm(q) + k = self.k_norm(k) + + if pe is not None: + q = apply_rotary_emb(q, pe) + k = apply_rotary_emb(k, pe) + + if mask is None: + out = comfy.ldm.modules.attention.optimized_attention(q, k, v, self.heads, attn_precision=self.attn_precision) + else: + out = comfy.ldm.modules.attention.optimized_attention_masked(q, k, v, self.heads, mask, attn_precision=self.attn_precision) + return self.to_out(out) + + +class BasicTransformerBlock(nn.Module): + def __init__(self, dim, n_heads, d_head, context_dim=None, attn_precision=None, dtype=None, device=None, operations=None): + super().__init__() + + self.attn_precision = attn_precision + self.attn1 = CrossAttention(query_dim=dim, heads=n_heads, dim_head=d_head, context_dim=None, attn_precision=self.attn_precision, dtype=dtype, device=device, operations=operations) + self.ff = FeedForward(dim, dim_out=dim, glu=True, dtype=dtype, device=device, operations=operations) + + self.attn2 = CrossAttention(query_dim=dim, context_dim=context_dim, heads=n_heads, dim_head=d_head, attn_precision=self.attn_precision, dtype=dtype, device=device, operations=operations) + + self.scale_shift_table = nn.Parameter(torch.empty(6, dim, device=device, dtype=dtype)) + + def forward(self, x, context=None, attention_mask=None, timestep=None, pe=None): + shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = (self.scale_shift_table[None, None].to(device=x.device, dtype=x.dtype) + timestep.reshape(x.shape[0], timestep.shape[1], self.scale_shift_table.shape[0], -1)).unbind(dim=2) + + x += self.attn1(comfy.ldm.common_dit.rms_norm(x) * (1 + scale_msa) + shift_msa, pe=pe) * gate_msa + + x += self.attn2(x, context=context, mask=attention_mask) + + y = comfy.ldm.common_dit.rms_norm(x) * (1 + scale_mlp) + shift_mlp + x += self.ff(y) * gate_mlp + + return x + +def get_fractional_positions(indices_grid, max_pos): + fractional_positions = torch.stack( + [ + indices_grid[:, i] / max_pos[i] + for i in range(3) + ], + dim=-1, + ) + return fractional_positions + + +def precompute_freqs_cis(indices_grid, dim, out_dtype, theta=10000.0, max_pos=[20, 2048, 2048]): + dtype = torch.float32 #self.dtype + + fractional_positions = get_fractional_positions(indices_grid, max_pos) + + start = 1 + end = theta + device = fractional_positions.device + + indices = theta ** ( + torch.linspace( + math.log(start, theta), + math.log(end, theta), + dim // 6, + device=device, + dtype=dtype, + ) + ) + indices = indices.to(dtype=dtype) + + indices = indices * math.pi / 2 + + freqs = ( + (indices * (fractional_positions.unsqueeze(-1) * 2 - 1)) + .transpose(-1, -2) + .flatten(2) + ) + + cos_freq = freqs.cos().repeat_interleave(2, dim=-1) + sin_freq = freqs.sin().repeat_interleave(2, dim=-1) + if dim % 6 != 0: + cos_padding = torch.ones_like(cos_freq[:, :, : dim % 6]) + sin_padding = torch.zeros_like(cos_freq[:, :, : dim % 6]) + cos_freq = torch.cat([cos_padding, cos_freq], dim=-1) + sin_freq = torch.cat([sin_padding, sin_freq], dim=-1) + return cos_freq.to(out_dtype), sin_freq.to(out_dtype) + + +class LTXVModel(torch.nn.Module): + def __init__(self, + in_channels=128, + cross_attention_dim=2048, + attention_head_dim=64, + num_attention_heads=32, + + caption_channels=4096, + num_layers=28, + + + positional_embedding_theta=10000.0, + positional_embedding_max_pos=[20, 2048, 2048], + dtype=None, device=None, operations=None, **kwargs): + super().__init__() + self.generator = None + self.dtype = dtype + self.out_channels = in_channels + self.inner_dim = num_attention_heads * attention_head_dim + + self.patchify_proj = operations.Linear(in_channels, self.inner_dim, bias=True, dtype=dtype, device=device) + + self.adaln_single = AdaLayerNormSingle( + self.inner_dim, use_additional_conditions=False, dtype=dtype, device=device, operations=operations + ) + + # self.adaln_single.linear = operations.Linear(self.inner_dim, 4 * self.inner_dim, bias=True, dtype=dtype, device=device) + + self.caption_projection = PixArtAlphaTextProjection( + in_features=caption_channels, hidden_size=self.inner_dim, dtype=dtype, device=device, operations=operations + ) + + self.transformer_blocks = nn.ModuleList( + [ + BasicTransformerBlock( + self.inner_dim, + num_attention_heads, + attention_head_dim, + context_dim=cross_attention_dim, + # attn_precision=attn_precision, + dtype=dtype, device=device, operations=operations + ) + for d in range(num_layers) + ] + ) + + self.scale_shift_table = nn.Parameter(torch.empty(2, self.inner_dim, dtype=dtype, device=device)) + self.norm_out = operations.LayerNorm(self.inner_dim, elementwise_affine=False, eps=1e-6, dtype=dtype, device=device) + self.proj_out = operations.Linear(self.inner_dim, self.out_channels, dtype=dtype, device=device) + + self.patchifier = SymmetricPatchifier(1) + + def forward(self, x, timestep, context, attention_mask, frame_rate=25, guiding_latent=None, guiding_latent_noise_scale=0, transformer_options={}, **kwargs): + patches_replace = transformer_options.get("patches_replace", {}) + + indices_grid = self.patchifier.get_grid( + orig_num_frames=x.shape[2], + orig_height=x.shape[3], + orig_width=x.shape[4], + batch_size=x.shape[0], + scale_grid=((1 / frame_rate) * 8, 32, 32), + device=x.device, + ) + + if guiding_latent is not None: + ts = torch.ones([x.shape[0], 1, x.shape[2], x.shape[3], x.shape[4]], device=x.device, dtype=x.dtype) + input_ts = timestep.view([timestep.shape[0]] + [1] * (x.ndim - 1)) + ts *= input_ts + ts[:, :, 0] = guiding_latent_noise_scale * (input_ts[:, :, 0] ** 2) + timestep = self.patchifier.patchify(ts) + input_x = x.clone() + x[:, :, 0] = guiding_latent[:, :, 0] + if guiding_latent_noise_scale > 0: + if self.generator is None: + self.generator = torch.Generator(device=x.device).manual_seed(42) + elif self.generator.device != x.device: + self.generator = torch.Generator(device=x.device).set_state(self.generator.get_state()) + + noise_shape = [guiding_latent.shape[0], guiding_latent.shape[1], 1, guiding_latent.shape[3], guiding_latent.shape[4]] + scale = guiding_latent_noise_scale * (input_ts ** 2) + guiding_noise = scale * torch.randn(size=noise_shape, device=x.device, generator=self.generator) + + x[:, :, 0] = guiding_noise[:, :, 0] + x[:, :, 0] * (1.0 - scale[:, :, 0]) + + + orig_shape = list(x.shape) + + x = self.patchifier.patchify(x) + + x = self.patchify_proj(x) + timestep = timestep * 1000.0 + + attention_mask = 1.0 - attention_mask.to(x.dtype).reshape((attention_mask.shape[0], 1, -1, attention_mask.shape[-1])) + attention_mask = attention_mask.masked_fill(attention_mask.to(torch.bool), float("-inf")) # not sure about this + # attention_mask = (context != 0).any(dim=2).to(dtype=x.dtype) + + pe = precompute_freqs_cis(indices_grid, dim=self.inner_dim, out_dtype=x.dtype) + + batch_size = x.shape[0] + timestep, embedded_timestep = self.adaln_single( + timestep.flatten(), + {"resolution": None, "aspect_ratio": None}, + batch_size=batch_size, + hidden_dtype=x.dtype, + ) + # Second dimension is 1 or number of tokens (if timestep_per_token) + timestep = timestep.view(batch_size, -1, timestep.shape[-1]) + embedded_timestep = embedded_timestep.view( + batch_size, -1, embedded_timestep.shape[-1] + ) + + # 2. Blocks + if self.caption_projection is not None: + batch_size = x.shape[0] + context = self.caption_projection(context) + context = context.view( + batch_size, -1, x.shape[-1] + ) + + blocks_replace = patches_replace.get("dit", {}) + for i, block in enumerate(self.transformer_blocks): + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["img"] = block(args["img"], context=args["txt"], attention_mask=args["attention_mask"], timestep=args["vec"], pe=args["pe"]) + return out + + out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "attention_mask": attention_mask, "vec": timestep, "pe": pe}, {"original_block": block_wrap}) + x = out["img"] + else: + x = block( + x, + context=context, + attention_mask=attention_mask, + timestep=timestep, + pe=pe + ) + + # 3. Output + scale_shift_values = ( + self.scale_shift_table[None, None].to(device=x.device, dtype=x.dtype) + embedded_timestep[:, :, None] + ) + shift, scale = scale_shift_values[:, :, 0], scale_shift_values[:, :, 1] + x = self.norm_out(x) + # Modulation + x = x * (1 + scale) + shift + x = self.proj_out(x) + + x = self.patchifier.unpatchify( + latents=x, + output_height=orig_shape[3], + output_width=orig_shape[4], + output_num_frames=orig_shape[2], + out_channels=orig_shape[1] // math.prod(self.patchifier.patch_size), + ) + + if guiding_latent is not None: + x[:, :, 0] = (input_x[:, :, 0] - guiding_latent[:, :, 0]) / input_ts[:, :, 0] + + # print("res", x) + return x diff --git a/comfy/ldm/lightricks/symmetric_patchifier.py b/comfy/ldm/lightricks/symmetric_patchifier.py new file mode 100644 index 000000000..51ce50589 --- /dev/null +++ b/comfy/ldm/lightricks/symmetric_patchifier.py @@ -0,0 +1,105 @@ +from abc import ABC, abstractmethod +from typing import Tuple + +import torch +from einops import rearrange +from torch import Tensor + + +def append_dims(x: torch.Tensor, target_dims: int) -> torch.Tensor: + """Appends dimensions to the end of a tensor until it has target_dims dimensions.""" + dims_to_append = target_dims - x.ndim + if dims_to_append < 0: + raise ValueError( + f"input has {x.ndim} dims but target_dims is {target_dims}, which is less" + ) + elif dims_to_append == 0: + return x + return x[(...,) + (None,) * dims_to_append] + + +class Patchifier(ABC): + def __init__(self, patch_size: int): + super().__init__() + self._patch_size = (1, patch_size, patch_size) + + @abstractmethod + def patchify( + self, latents: Tensor, frame_rates: Tensor, scale_grid: bool + ) -> Tuple[Tensor, Tensor]: + pass + + @abstractmethod + def unpatchify( + self, + latents: Tensor, + output_height: int, + output_width: int, + output_num_frames: int, + out_channels: int, + ) -> Tuple[Tensor, Tensor]: + pass + + @property + def patch_size(self): + return self._patch_size + + def get_grid( + self, orig_num_frames, orig_height, orig_width, batch_size, scale_grid, device + ): + f = orig_num_frames // self._patch_size[0] + h = orig_height // self._patch_size[1] + w = orig_width // self._patch_size[2] + grid_h = torch.arange(h, dtype=torch.float32, device=device) + grid_w = torch.arange(w, dtype=torch.float32, device=device) + grid_f = torch.arange(f, dtype=torch.float32, device=device) + grid = torch.meshgrid(grid_f, grid_h, grid_w) + grid = torch.stack(grid, dim=0) + grid = grid.unsqueeze(0).repeat(batch_size, 1, 1, 1, 1) + + if scale_grid is not None: + for i in range(3): + if isinstance(scale_grid[i], Tensor): + scale = append_dims(scale_grid[i], grid.ndim - 1) + else: + scale = scale_grid[i] + grid[:, i, ...] = grid[:, i, ...] * scale * self._patch_size[i] + + grid = rearrange(grid, "b c f h w -> b c (f h w)", b=batch_size) + return grid + + +class SymmetricPatchifier(Patchifier): + def patchify( + self, + latents: Tensor, + ) -> Tuple[Tensor, Tensor]: + latents = rearrange( + latents, + "b c (f p1) (h p2) (w p3) -> b (f h w) (c p1 p2 p3)", + p1=self._patch_size[0], + p2=self._patch_size[1], + p3=self._patch_size[2], + ) + return latents + + def unpatchify( + self, + latents: Tensor, + output_height: int, + output_width: int, + output_num_frames: int, + out_channels: int, + ) -> Tuple[Tensor, Tensor]: + output_height = output_height // self._patch_size[1] + output_width = output_width // self._patch_size[2] + latents = rearrange( + latents, + "b (f h w) (c p q) -> b c f (h p) (w q) ", + f=output_num_frames, + h=output_height, + w=output_width, + p=self._patch_size[1], + q=self._patch_size[2], + ) + return latents diff --git a/comfy/ldm/lightricks/vae/causal_conv3d.py b/comfy/ldm/lightricks/vae/causal_conv3d.py new file mode 100644 index 000000000..c572e7e86 --- /dev/null +++ b/comfy/ldm/lightricks/vae/causal_conv3d.py @@ -0,0 +1,64 @@ +from typing import Tuple, Union + +import torch +import torch.nn as nn +import comfy.ops +ops = comfy.ops.disable_weight_init + + +class CausalConv3d(nn.Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size: int = 3, + stride: Union[int, Tuple[int]] = 1, + dilation: int = 1, + groups: int = 1, + **kwargs, + ): + super().__init__() + + self.in_channels = in_channels + self.out_channels = out_channels + + kernel_size = (kernel_size, kernel_size, kernel_size) + self.time_kernel_size = kernel_size[0] + + dilation = (dilation, 1, 1) + + height_pad = kernel_size[1] // 2 + width_pad = kernel_size[2] // 2 + padding = (0, height_pad, width_pad) + + self.conv = ops.Conv3d( + in_channels, + out_channels, + kernel_size, + stride=stride, + dilation=dilation, + padding=padding, + padding_mode="zeros", + groups=groups, + ) + + def forward(self, x, causal: bool = True): + if causal: + first_frame_pad = x[:, :, :1, :, :].repeat( + (1, 1, self.time_kernel_size - 1, 1, 1) + ) + x = torch.concatenate((first_frame_pad, x), dim=2) + else: + first_frame_pad = x[:, :, :1, :, :].repeat( + (1, 1, (self.time_kernel_size - 1) // 2, 1, 1) + ) + last_frame_pad = x[:, :, -1:, :, :].repeat( + (1, 1, (self.time_kernel_size - 1) // 2, 1, 1) + ) + x = torch.concatenate((first_frame_pad, x, last_frame_pad), dim=2) + x = self.conv(x) + return x + + @property + def weight(self): + return self.conv.weight diff --git a/comfy/ldm/lightricks/vae/causal_video_autoencoder.py b/comfy/ldm/lightricks/vae/causal_video_autoencoder.py new file mode 100644 index 000000000..3bd59a76e --- /dev/null +++ b/comfy/ldm/lightricks/vae/causal_video_autoencoder.py @@ -0,0 +1,698 @@ +import torch +from torch import nn +from functools import partial +import math +from einops import rearrange +from typing import Optional, Tuple, Union +from .conv_nd_factory import make_conv_nd, make_linear_nd +from .pixel_norm import PixelNorm + + +class Encoder(nn.Module): + r""" + The `Encoder` layer of a variational autoencoder that encodes its input into a latent representation. + + Args: + dims (`int` or `Tuple[int, int]`, *optional*, defaults to 3): + The number of dimensions to use in convolutions. + in_channels (`int`, *optional*, defaults to 3): + The number of input channels. + out_channels (`int`, *optional*, defaults to 3): + The number of output channels. + blocks (`List[Tuple[str, int]]`, *optional*, defaults to `[("res_x", 1)]`): + The blocks to use. Each block is a tuple of the block name and the number of layers. + base_channels (`int`, *optional*, defaults to 128): + The number of output channels for the first convolutional layer. + norm_num_groups (`int`, *optional*, defaults to 32): + The number of groups for normalization. + patch_size (`int`, *optional*, defaults to 1): + The patch size to use. Should be a power of 2. + norm_layer (`str`, *optional*, defaults to `group_norm`): + The normalization layer to use. Can be either `group_norm` or `pixel_norm`. + latent_log_var (`str`, *optional*, defaults to `per_channel`): + The number of channels for the log variance. Can be either `per_channel`, `uniform`, or `none`. + """ + + def __init__( + self, + dims: Union[int, Tuple[int, int]] = 3, + in_channels: int = 3, + out_channels: int = 3, + blocks=[("res_x", 1)], + base_channels: int = 128, + norm_num_groups: int = 32, + patch_size: Union[int, Tuple[int]] = 1, + norm_layer: str = "group_norm", # group_norm, pixel_norm + latent_log_var: str = "per_channel", + ): + super().__init__() + self.patch_size = patch_size + self.norm_layer = norm_layer + self.latent_channels = out_channels + self.latent_log_var = latent_log_var + self.blocks_desc = blocks + + in_channels = in_channels * patch_size**2 + output_channel = base_channels + + self.conv_in = make_conv_nd( + dims=dims, + in_channels=in_channels, + out_channels=output_channel, + kernel_size=3, + stride=1, + padding=1, + causal=True, + ) + + self.down_blocks = nn.ModuleList([]) + + for block_name, block_params in blocks: + input_channel = output_channel + if isinstance(block_params, int): + block_params = {"num_layers": block_params} + + if block_name == "res_x": + block = UNetMidBlock3D( + dims=dims, + in_channels=input_channel, + num_layers=block_params["num_layers"], + resnet_eps=1e-6, + resnet_groups=norm_num_groups, + norm_layer=norm_layer, + ) + elif block_name == "res_x_y": + output_channel = block_params.get("multiplier", 2) * output_channel + block = ResnetBlock3D( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + eps=1e-6, + groups=norm_num_groups, + norm_layer=norm_layer, + ) + elif block_name == "compress_time": + block = make_conv_nd( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + kernel_size=3, + stride=(2, 1, 1), + causal=True, + ) + elif block_name == "compress_space": + block = make_conv_nd( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + kernel_size=3, + stride=(1, 2, 2), + causal=True, + ) + elif block_name == "compress_all": + block = make_conv_nd( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + kernel_size=3, + stride=(2, 2, 2), + causal=True, + ) + elif block_name == "compress_all_x_y": + output_channel = block_params.get("multiplier", 2) * output_channel + block = make_conv_nd( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + kernel_size=3, + stride=(2, 2, 2), + causal=True, + ) + else: + raise ValueError(f"unknown block: {block_name}") + + self.down_blocks.append(block) + + # out + if norm_layer == "group_norm": + self.conv_norm_out = nn.GroupNorm( + num_channels=output_channel, num_groups=norm_num_groups, eps=1e-6 + ) + elif norm_layer == "pixel_norm": + self.conv_norm_out = PixelNorm() + elif norm_layer == "layer_norm": + self.conv_norm_out = LayerNorm(output_channel, eps=1e-6) + + self.conv_act = nn.SiLU() + + conv_out_channels = out_channels + if latent_log_var == "per_channel": + conv_out_channels *= 2 + elif latent_log_var == "uniform": + conv_out_channels += 1 + elif latent_log_var != "none": + raise ValueError(f"Invalid latent_log_var: {latent_log_var}") + self.conv_out = make_conv_nd( + dims, output_channel, conv_out_channels, 3, padding=1, causal=True + ) + + self.gradient_checkpointing = False + + def forward(self, sample: torch.FloatTensor) -> torch.FloatTensor: + r"""The forward method of the `Encoder` class.""" + + sample = patchify(sample, patch_size_hw=self.patch_size, patch_size_t=1) + sample = self.conv_in(sample) + + checkpoint_fn = ( + partial(torch.utils.checkpoint.checkpoint, use_reentrant=False) + if self.gradient_checkpointing and self.training + else lambda x: x + ) + + for down_block in self.down_blocks: + sample = checkpoint_fn(down_block)(sample) + + sample = self.conv_norm_out(sample) + sample = self.conv_act(sample) + sample = self.conv_out(sample) + + if self.latent_log_var == "uniform": + last_channel = sample[:, -1:, ...] + num_dims = sample.dim() + + if num_dims == 4: + # For shape (B, C, H, W) + repeated_last_channel = last_channel.repeat( + 1, sample.shape[1] - 2, 1, 1 + ) + sample = torch.cat([sample, repeated_last_channel], dim=1) + elif num_dims == 5: + # For shape (B, C, F, H, W) + repeated_last_channel = last_channel.repeat( + 1, sample.shape[1] - 2, 1, 1, 1 + ) + sample = torch.cat([sample, repeated_last_channel], dim=1) + else: + raise ValueError(f"Invalid input shape: {sample.shape}") + + return sample + + +class Decoder(nn.Module): + r""" + The `Decoder` layer of a variational autoencoder that decodes its latent representation into an output sample. + + Args: + dims (`int` or `Tuple[int, int]`, *optional*, defaults to 3): + The number of dimensions to use in convolutions. + in_channels (`int`, *optional*, defaults to 3): + The number of input channels. + out_channels (`int`, *optional*, defaults to 3): + The number of output channels. + blocks (`List[Tuple[str, int]]`, *optional*, defaults to `[("res_x", 1)]`): + The blocks to use. Each block is a tuple of the block name and the number of layers. + base_channels (`int`, *optional*, defaults to 128): + The number of output channels for the first convolutional layer. + norm_num_groups (`int`, *optional*, defaults to 32): + The number of groups for normalization. + patch_size (`int`, *optional*, defaults to 1): + The patch size to use. Should be a power of 2. + norm_layer (`str`, *optional*, defaults to `group_norm`): + The normalization layer to use. Can be either `group_norm` or `pixel_norm`. + causal (`bool`, *optional*, defaults to `True`): + Whether to use causal convolutions or not. + """ + + def __init__( + self, + dims, + in_channels: int = 3, + out_channels: int = 3, + blocks=[("res_x", 1)], + base_channels: int = 128, + layers_per_block: int = 2, + norm_num_groups: int = 32, + patch_size: int = 1, + norm_layer: str = "group_norm", + causal: bool = True, + ): + super().__init__() + self.patch_size = patch_size + self.layers_per_block = layers_per_block + out_channels = out_channels * patch_size**2 + self.causal = causal + self.blocks_desc = blocks + + # Compute output channel to be product of all channel-multiplier blocks + output_channel = base_channels + for block_name, block_params in list(reversed(blocks)): + block_params = block_params if isinstance(block_params, dict) else {} + if block_name == "res_x_y": + output_channel = output_channel * block_params.get("multiplier", 2) + + self.conv_in = make_conv_nd( + dims, + in_channels, + output_channel, + kernel_size=3, + stride=1, + padding=1, + causal=True, + ) + + self.up_blocks = nn.ModuleList([]) + + for block_name, block_params in list(reversed(blocks)): + input_channel = output_channel + if isinstance(block_params, int): + block_params = {"num_layers": block_params} + + if block_name == "res_x": + block = UNetMidBlock3D( + dims=dims, + in_channels=input_channel, + num_layers=block_params["num_layers"], + resnet_eps=1e-6, + resnet_groups=norm_num_groups, + norm_layer=norm_layer, + ) + elif block_name == "res_x_y": + output_channel = output_channel // block_params.get("multiplier", 2) + block = ResnetBlock3D( + dims=dims, + in_channels=input_channel, + out_channels=output_channel, + eps=1e-6, + groups=norm_num_groups, + norm_layer=norm_layer, + ) + elif block_name == "compress_time": + block = DepthToSpaceUpsample( + dims=dims, in_channels=input_channel, stride=(2, 1, 1) + ) + elif block_name == "compress_space": + block = DepthToSpaceUpsample( + dims=dims, in_channels=input_channel, stride=(1, 2, 2) + ) + elif block_name == "compress_all": + block = DepthToSpaceUpsample( + dims=dims, + in_channels=input_channel, + stride=(2, 2, 2), + residual=block_params.get("residual", False), + ) + else: + raise ValueError(f"unknown layer: {block_name}") + + self.up_blocks.append(block) + + if norm_layer == "group_norm": + self.conv_norm_out = nn.GroupNorm( + num_channels=output_channel, num_groups=norm_num_groups, eps=1e-6 + ) + elif norm_layer == "pixel_norm": + self.conv_norm_out = PixelNorm() + elif norm_layer == "layer_norm": + self.conv_norm_out = LayerNorm(output_channel, eps=1e-6) + + self.conv_act = nn.SiLU() + self.conv_out = make_conv_nd( + dims, output_channel, out_channels, 3, padding=1, causal=True + ) + + self.gradient_checkpointing = False + + # def forward(self, sample: torch.FloatTensor, target_shape) -> torch.FloatTensor: + def forward(self, sample: torch.FloatTensor) -> torch.FloatTensor: + r"""The forward method of the `Decoder` class.""" + # assert target_shape is not None, "target_shape must be provided" + + sample = self.conv_in(sample, causal=self.causal) + + upscale_dtype = next(iter(self.up_blocks.parameters())).dtype + + checkpoint_fn = ( + partial(torch.utils.checkpoint.checkpoint, use_reentrant=False) + if self.gradient_checkpointing and self.training + else lambda x: x + ) + + sample = sample.to(upscale_dtype) + + for up_block in self.up_blocks: + sample = checkpoint_fn(up_block)(sample, causal=self.causal) + + sample = self.conv_norm_out(sample) + sample = self.conv_act(sample) + sample = self.conv_out(sample, causal=self.causal) + + sample = unpatchify(sample, patch_size_hw=self.patch_size, patch_size_t=1) + + return sample + + +class UNetMidBlock3D(nn.Module): + """ + A 3D UNet mid-block [`UNetMidBlock3D`] with multiple residual blocks. + + Args: + in_channels (`int`): The number of input channels. + dropout (`float`, *optional*, defaults to 0.0): The dropout rate. + num_layers (`int`, *optional*, defaults to 1): The number of residual blocks. + resnet_eps (`float`, *optional*, 1e-6 ): The epsilon value for the resnet blocks. + resnet_groups (`int`, *optional*, defaults to 32): + The number of groups to use in the group normalization layers of the resnet blocks. + + Returns: + `torch.FloatTensor`: The output of the last residual block, which is a tensor of shape `(batch_size, + in_channels, height, width)`. + + """ + + def __init__( + self, + dims: Union[int, Tuple[int, int]], + in_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_groups: int = 32, + norm_layer: str = "group_norm", + ): + super().__init__() + resnet_groups = ( + resnet_groups if resnet_groups is not None else min(in_channels // 4, 32) + ) + + self.res_blocks = nn.ModuleList( + [ + ResnetBlock3D( + dims=dims, + in_channels=in_channels, + out_channels=in_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + norm_layer=norm_layer, + ) + for _ in range(num_layers) + ] + ) + + def forward( + self, hidden_states: torch.FloatTensor, causal: bool = True + ) -> torch.FloatTensor: + for resnet in self.res_blocks: + hidden_states = resnet(hidden_states, causal=causal) + + return hidden_states + + +class DepthToSpaceUpsample(nn.Module): + def __init__(self, dims, in_channels, stride, residual=False): + super().__init__() + self.stride = stride + self.out_channels = math.prod(stride) * in_channels + self.conv = make_conv_nd( + dims=dims, + in_channels=in_channels, + out_channels=self.out_channels, + kernel_size=3, + stride=1, + causal=True, + ) + self.residual = residual + + def forward(self, x, causal: bool = True): + if self.residual: + # Reshape and duplicate the input to match the output shape + x_in = rearrange( + x, + "b (c p1 p2 p3) d h w -> b c (d p1) (h p2) (w p3)", + p1=self.stride[0], + p2=self.stride[1], + p3=self.stride[2], + ) + x_in = x_in.repeat(1, math.prod(self.stride), 1, 1, 1) + if self.stride[0] == 2: + x_in = x_in[:, :, 1:, :, :] + x = self.conv(x, causal=causal) + x = rearrange( + x, + "b (c p1 p2 p3) d h w -> b c (d p1) (h p2) (w p3)", + p1=self.stride[0], + p2=self.stride[1], + p3=self.stride[2], + ) + if self.stride[0] == 2: + x = x[:, :, 1:, :, :] + if self.residual: + x = x + x_in + return x + + +class LayerNorm(nn.Module): + def __init__(self, dim, eps, elementwise_affine=True) -> None: + super().__init__() + self.norm = nn.LayerNorm(dim, eps=eps, elementwise_affine=elementwise_affine) + + def forward(self, x): + x = rearrange(x, "b c d h w -> b d h w c") + x = self.norm(x) + x = rearrange(x, "b d h w c -> b c d h w") + return x + + +class ResnetBlock3D(nn.Module): + r""" + A Resnet block. + + Parameters: + in_channels (`int`): The number of channels in the input. + out_channels (`int`, *optional*, default to be `None`): + The number of output channels for the first conv layer. If None, same as `in_channels`. + dropout (`float`, *optional*, defaults to `0.0`): The dropout probability to use. + groups (`int`, *optional*, default to `32`): The number of groups to use for the first normalization layer. + eps (`float`, *optional*, defaults to `1e-6`): The epsilon to use for the normalization. + """ + + def __init__( + self, + dims: Union[int, Tuple[int, int]], + in_channels: int, + out_channels: Optional[int] = None, + dropout: float = 0.0, + groups: int = 32, + eps: float = 1e-6, + norm_layer: str = "group_norm", + ): + super().__init__() + self.in_channels = in_channels + out_channels = in_channels if out_channels is None else out_channels + self.out_channels = out_channels + + if norm_layer == "group_norm": + self.norm1 = nn.GroupNorm( + num_groups=groups, num_channels=in_channels, eps=eps, affine=True + ) + elif norm_layer == "pixel_norm": + self.norm1 = PixelNorm() + elif norm_layer == "layer_norm": + self.norm1 = LayerNorm(in_channels, eps=eps, elementwise_affine=True) + + self.non_linearity = nn.SiLU() + + self.conv1 = make_conv_nd( + dims, + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + causal=True, + ) + + if norm_layer == "group_norm": + self.norm2 = nn.GroupNorm( + num_groups=groups, num_channels=out_channels, eps=eps, affine=True + ) + elif norm_layer == "pixel_norm": + self.norm2 = PixelNorm() + elif norm_layer == "layer_norm": + self.norm2 = LayerNorm(out_channels, eps=eps, elementwise_affine=True) + + self.dropout = torch.nn.Dropout(dropout) + + self.conv2 = make_conv_nd( + dims, + out_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + causal=True, + ) + + self.conv_shortcut = ( + make_linear_nd( + dims=dims, in_channels=in_channels, out_channels=out_channels + ) + if in_channels != out_channels + else nn.Identity() + ) + + self.norm3 = ( + LayerNorm(in_channels, eps=eps, elementwise_affine=True) + if in_channels != out_channels + else nn.Identity() + ) + + def forward( + self, + input_tensor: torch.FloatTensor, + causal: bool = True, + ) -> torch.FloatTensor: + hidden_states = input_tensor + + hidden_states = self.norm1(hidden_states) + + hidden_states = self.non_linearity(hidden_states) + + hidden_states = self.conv1(hidden_states, causal=causal) + + hidden_states = self.norm2(hidden_states) + + hidden_states = self.non_linearity(hidden_states) + + hidden_states = self.dropout(hidden_states) + + hidden_states = self.conv2(hidden_states, causal=causal) + + input_tensor = self.norm3(input_tensor) + + input_tensor = self.conv_shortcut(input_tensor) + + output_tensor = input_tensor + hidden_states + + return output_tensor + + +def patchify(x, patch_size_hw, patch_size_t=1): + if patch_size_hw == 1 and patch_size_t == 1: + return x + if x.dim() == 4: + x = rearrange( + x, "b c (h q) (w r) -> b (c r q) h w", q=patch_size_hw, r=patch_size_hw + ) + elif x.dim() == 5: + x = rearrange( + x, + "b c (f p) (h q) (w r) -> b (c p r q) f h w", + p=patch_size_t, + q=patch_size_hw, + r=patch_size_hw, + ) + else: + raise ValueError(f"Invalid input shape: {x.shape}") + + return x + + +def unpatchify(x, patch_size_hw, patch_size_t=1): + if patch_size_hw == 1 and patch_size_t == 1: + return x + + if x.dim() == 4: + x = rearrange( + x, "b (c r q) h w -> b c (h q) (w r)", q=patch_size_hw, r=patch_size_hw + ) + elif x.dim() == 5: + x = rearrange( + x, + "b (c p r q) f h w -> b c (f p) (h q) (w r)", + p=patch_size_t, + q=patch_size_hw, + r=patch_size_hw, + ) + + return x + +class processor(nn.Module): + def __init__(self): + super().__init__() + self.register_buffer("std-of-means", torch.empty(128)) + self.register_buffer("mean-of-means", torch.empty(128)) + self.register_buffer("mean-of-stds", torch.empty(128)) + self.register_buffer("mean-of-stds_over_std-of-means", torch.empty(128)) + self.register_buffer("channel", torch.empty(128)) + + def un_normalize(self, x): + return (x * self.get_buffer("std-of-means").view(1, -1, 1, 1, 1).to(x)) + self.get_buffer("mean-of-means").view(1, -1, 1, 1, 1).to(x) + + def normalize(self, x): + return (x - self.get_buffer("mean-of-means").view(1, -1, 1, 1, 1).to(x)) / self.get_buffer("std-of-means").view(1, -1, 1, 1, 1).to(x) + +class VideoVAE(nn.Module): + def __init__(self): + super().__init__() + config = { + "_class_name": "CausalVideoAutoencoder", + "dims": 3, + "in_channels": 3, + "out_channels": 3, + "latent_channels": 128, + "blocks": [ + ["res_x", 4], + ["compress_all", 1], + ["res_x_y", 1], + ["res_x", 3], + ["compress_all", 1], + ["res_x_y", 1], + ["res_x", 3], + ["compress_all", 1], + ["res_x", 3], + ["res_x", 4], + ], + "scaling_factor": 1.0, + "norm_layer": "pixel_norm", + "patch_size": 4, + "latent_log_var": "uniform", + "use_quant_conv": False, + "causal_decoder": False, + } + + double_z = config.get("double_z", True) + latent_log_var = config.get( + "latent_log_var", "per_channel" if double_z else "none" + ) + + self.encoder = Encoder( + dims=config["dims"], + in_channels=config.get("in_channels", 3), + out_channels=config["latent_channels"], + blocks=config.get("encoder_blocks", config.get("blocks")), + patch_size=config.get("patch_size", 1), + latent_log_var=latent_log_var, + norm_layer=config.get("norm_layer", "group_norm"), + ) + + self.decoder = Decoder( + dims=config["dims"], + in_channels=config["latent_channels"], + out_channels=config.get("out_channels", 3), + blocks=config.get("decoder_blocks", config.get("blocks")), + patch_size=config.get("patch_size", 1), + norm_layer=config.get("norm_layer", "group_norm"), + causal=config.get("causal_decoder", False), + ) + + self.per_channel_statistics = processor() + + def encode(self, x): + means, logvar = torch.chunk(self.encoder(x), 2, dim=1) + return self.per_channel_statistics.normalize(means) + + def decode(self, x): + return self.decoder(self.per_channel_statistics.un_normalize(x)) + diff --git a/comfy/ldm/lightricks/vae/conv_nd_factory.py b/comfy/ldm/lightricks/vae/conv_nd_factory.py new file mode 100644 index 000000000..52df4ee22 --- /dev/null +++ b/comfy/ldm/lightricks/vae/conv_nd_factory.py @@ -0,0 +1,82 @@ +from typing import Tuple, Union + + +from .dual_conv3d import DualConv3d +from .causal_conv3d import CausalConv3d +import comfy.ops +ops = comfy.ops.disable_weight_init + +def make_conv_nd( + dims: Union[int, Tuple[int, int]], + in_channels: int, + out_channels: int, + kernel_size: int, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=True, + causal=False, +): + if dims == 2: + return ops.Conv2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + elif dims == 3: + if causal: + return CausalConv3d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + return ops.Conv3d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + elif dims == (2, 1): + return DualConv3d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + bias=bias, + ) + else: + raise ValueError(f"unsupported dimensions: {dims}") + + +def make_linear_nd( + dims: int, + in_channels: int, + out_channels: int, + bias=True, +): + if dims == 2: + return ops.Conv2d( + in_channels=in_channels, out_channels=out_channels, kernel_size=1, bias=bias + ) + elif dims == 3 or dims == (2, 1): + return ops.Conv3d( + in_channels=in_channels, out_channels=out_channels, kernel_size=1, bias=bias + ) + else: + raise ValueError(f"unsupported dimensions: {dims}") diff --git a/comfy/ldm/lightricks/vae/dual_conv3d.py b/comfy/ldm/lightricks/vae/dual_conv3d.py new file mode 100644 index 000000000..6bd54c0a6 --- /dev/null +++ b/comfy/ldm/lightricks/vae/dual_conv3d.py @@ -0,0 +1,195 @@ +import math +from typing import Tuple, Union + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange + + +class DualConv3d(nn.Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride: Union[int, Tuple[int, int, int]] = 1, + padding: Union[int, Tuple[int, int, int]] = 0, + dilation: Union[int, Tuple[int, int, int]] = 1, + groups=1, + bias=True, + ): + super(DualConv3d, self).__init__() + + self.in_channels = in_channels + self.out_channels = out_channels + # Ensure kernel_size, stride, padding, and dilation are tuples of length 3 + if isinstance(kernel_size, int): + kernel_size = (kernel_size, kernel_size, kernel_size) + if kernel_size == (1, 1, 1): + raise ValueError( + "kernel_size must be greater than 1. Use make_linear_nd instead." + ) + if isinstance(stride, int): + stride = (stride, stride, stride) + if isinstance(padding, int): + padding = (padding, padding, padding) + if isinstance(dilation, int): + dilation = (dilation, dilation, dilation) + + # Set parameters for convolutions + self.groups = groups + self.bias = bias + + # Define the size of the channels after the first convolution + intermediate_channels = ( + out_channels if in_channels < out_channels else in_channels + ) + + # Define parameters for the first convolution + self.weight1 = nn.Parameter( + torch.Tensor( + intermediate_channels, + in_channels // groups, + 1, + kernel_size[1], + kernel_size[2], + ) + ) + self.stride1 = (1, stride[1], stride[2]) + self.padding1 = (0, padding[1], padding[2]) + self.dilation1 = (1, dilation[1], dilation[2]) + if bias: + self.bias1 = nn.Parameter(torch.Tensor(intermediate_channels)) + else: + self.register_parameter("bias1", None) + + # Define parameters for the second convolution + self.weight2 = nn.Parameter( + torch.Tensor( + out_channels, intermediate_channels // groups, kernel_size[0], 1, 1 + ) + ) + self.stride2 = (stride[0], 1, 1) + self.padding2 = (padding[0], 0, 0) + self.dilation2 = (dilation[0], 1, 1) + if bias: + self.bias2 = nn.Parameter(torch.Tensor(out_channels)) + else: + self.register_parameter("bias2", None) + + # Initialize weights and biases + self.reset_parameters() + + def reset_parameters(self): + nn.init.kaiming_uniform_(self.weight1, a=math.sqrt(5)) + nn.init.kaiming_uniform_(self.weight2, a=math.sqrt(5)) + if self.bias: + fan_in1, _ = nn.init._calculate_fan_in_and_fan_out(self.weight1) + bound1 = 1 / math.sqrt(fan_in1) + nn.init.uniform_(self.bias1, -bound1, bound1) + fan_in2, _ = nn.init._calculate_fan_in_and_fan_out(self.weight2) + bound2 = 1 / math.sqrt(fan_in2) + nn.init.uniform_(self.bias2, -bound2, bound2) + + def forward(self, x, use_conv3d=False, skip_time_conv=False): + if use_conv3d: + return self.forward_with_3d(x=x, skip_time_conv=skip_time_conv) + else: + return self.forward_with_2d(x=x, skip_time_conv=skip_time_conv) + + def forward_with_3d(self, x, skip_time_conv): + # First convolution + x = F.conv3d( + x, + self.weight1, + self.bias1, + self.stride1, + self.padding1, + self.dilation1, + self.groups, + ) + + if skip_time_conv: + return x + + # Second convolution + x = F.conv3d( + x, + self.weight2, + self.bias2, + self.stride2, + self.padding2, + self.dilation2, + self.groups, + ) + + return x + + def forward_with_2d(self, x, skip_time_conv): + b, c, d, h, w = x.shape + + # First 2D convolution + x = rearrange(x, "b c d h w -> (b d) c h w") + # Squeeze the depth dimension out of weight1 since it's 1 + weight1 = self.weight1.squeeze(2) + # Select stride, padding, and dilation for the 2D convolution + stride1 = (self.stride1[1], self.stride1[2]) + padding1 = (self.padding1[1], self.padding1[2]) + dilation1 = (self.dilation1[1], self.dilation1[2]) + x = F.conv2d(x, weight1, self.bias1, stride1, padding1, dilation1, self.groups) + + _, _, h, w = x.shape + + if skip_time_conv: + x = rearrange(x, "(b d) c h w -> b c d h w", b=b) + return x + + # Second convolution which is essentially treated as a 1D convolution across the 'd' dimension + x = rearrange(x, "(b d) c h w -> (b h w) c d", b=b) + + # Reshape weight2 to match the expected dimensions for conv1d + weight2 = self.weight2.squeeze(-1).squeeze(-1) + # Use only the relevant dimension for stride, padding, and dilation for the 1D convolution + stride2 = self.stride2[0] + padding2 = self.padding2[0] + dilation2 = self.dilation2[0] + x = F.conv1d(x, weight2, self.bias2, stride2, padding2, dilation2, self.groups) + x = rearrange(x, "(b h w) c d -> b c d h w", b=b, h=h, w=w) + + return x + + @property + def weight(self): + return self.weight2 + + +def test_dual_conv3d_consistency(): + # Initialize parameters + in_channels = 3 + out_channels = 5 + kernel_size = (3, 3, 3) + stride = (2, 2, 2) + padding = (1, 1, 1) + + # Create an instance of the DualConv3d class + dual_conv3d = DualConv3d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size, + stride=stride, + padding=padding, + bias=True, + ) + + # Example input tensor + test_input = torch.randn(1, 3, 10, 10, 10) + + # Perform forward passes with both 3D and 2D settings + output_conv3d = dual_conv3d(test_input, use_conv3d=True) + output_2d = dual_conv3d(test_input, use_conv3d=False) + + # Assert that the outputs from both methods are sufficiently close + assert torch.allclose( + output_conv3d, output_2d, atol=1e-6 + ), "Outputs are not consistent between 3D and 2D convolutions." diff --git a/comfy/ldm/lightricks/vae/pixel_norm.py b/comfy/ldm/lightricks/vae/pixel_norm.py new file mode 100644 index 000000000..9bc3ea60e --- /dev/null +++ b/comfy/ldm/lightricks/vae/pixel_norm.py @@ -0,0 +1,12 @@ +import torch +from torch import nn + + +class PixelNorm(nn.Module): + def __init__(self, dim=1, eps=1e-8): + super(PixelNorm, self).__init__() + self.dim = dim + self.eps = eps + + def forward(self, x): + return x / torch.sqrt(torch.mean(x**2, dim=self.dim, keepdim=True) + self.eps) diff --git a/comfy/ldm/models/autoencoder.py b/comfy/ldm/models/autoencoder.py index f5f4de288..e6493155e 100644 --- a/comfy/ldm/models/autoencoder.py +++ b/comfy/ldm/models/autoencoder.py @@ -1,10 +1,12 @@ +import logging +import math import torch from contextlib import contextmanager -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Dict, Tuple, Union from comfy.ldm.modules.distributions.distributions import DiagonalGaussianDistribution -from comfy.ldm.util import instantiate_from_config +from comfy.ldm.util import get_obj_from_str, instantiate_from_config from comfy.ldm.modules.ema import LitEma import comfy.ops @@ -52,7 +54,7 @@ class AbstractAutoencoder(torch.nn.Module): if self.use_ema: self.model_ema = LitEma(self, decay=ema_decay) - logpy.info(f"Keeping EMAs of {len(list(self.model_ema.buffers()))}.") + logging.info(f"Keeping EMAs of {len(list(self.model_ema.buffers()))}.") def get_input(self, batch) -> Any: raise NotImplementedError() @@ -68,14 +70,14 @@ class AbstractAutoencoder(torch.nn.Module): self.model_ema.store(self.parameters()) self.model_ema.copy_to(self) if context is not None: - logpy.info(f"{context}: Switched to EMA weights") + logging.info(f"{context}: Switched to EMA weights") try: yield None finally: if self.use_ema: self.model_ema.restore(self.parameters()) if context is not None: - logpy.info(f"{context}: Restored training weights") + logging.info(f"{context}: Restored training weights") def encode(self, *args, **kwargs) -> torch.Tensor: raise NotImplementedError("encode()-method of abstract base class called") @@ -84,7 +86,7 @@ class AbstractAutoencoder(torch.nn.Module): raise NotImplementedError("decode()-method of abstract base class called") def instantiate_optimizer_from_config(self, params, lr, cfg): - logpy.info(f"loading >>> {cfg['target']} <<< optimizer from config") + logging.info(f"loading >>> {cfg['target']} <<< optimizer from config") return get_obj_from_str(cfg["target"])( params, lr=lr, **cfg.get("params", dict()) ) @@ -112,7 +114,7 @@ class AutoencodingEngine(AbstractAutoencoder): self.encoder: torch.nn.Module = instantiate_from_config(encoder_config) self.decoder: torch.nn.Module = instantiate_from_config(decoder_config) - self.regularization: AbstractRegularizer = instantiate_from_config( + self.regularization = instantiate_from_config( regularizer_config ) @@ -160,12 +162,19 @@ class AutoencodingEngineLegacy(AutoencodingEngine): }, **kwargs, ) - self.quant_conv = comfy.ops.disable_weight_init.Conv2d( + + if ddconfig.get("conv3d", False): + conv_op = comfy.ops.disable_weight_init.Conv3d + else: + conv_op = comfy.ops.disable_weight_init.Conv2d + + self.quant_conv = conv_op( (1 + ddconfig["double_z"]) * ddconfig["z_channels"], (1 + ddconfig["double_z"]) * embed_dim, 1, ) - self.post_quant_conv = comfy.ops.disable_weight_init.Conv2d(embed_dim, ddconfig["z_channels"], 1) + + self.post_quant_conv = conv_op(embed_dim, ddconfig["z_channels"], 1) self.embed_dim = embed_dim def get_autoencoder_params(self) -> list: diff --git a/comfy/ldm/modules/attention.py b/comfy/ldm/modules/attention.py index 85ea406e0..e60d1ab25 100644 --- a/comfy/ldm/modules/attention.py +++ b/comfy/ldm/modules/attention.py @@ -157,8 +157,6 @@ def attention_sub_quad(query, key, value, heads, mask=None, attn_precision=None, b, _, dim_head = query.shape dim_head //= heads - scale = dim_head ** -0.5 - if skip_reshape: query = query.reshape(b * heads, -1, dim_head) value = value.reshape(b * heads, -1, dim_head) @@ -177,9 +175,8 @@ def attention_sub_quad(query, key, value, heads, mask=None, attn_precision=None, bytes_per_token = torch.finfo(query.dtype).bits//8 batch_x_heads, q_tokens, _ = query.shape _, _, k_tokens = key.shape - qk_matmul_size_bytes = batch_x_heads * bytes_per_token * q_tokens * k_tokens - mem_free_total, mem_free_torch = model_management.get_free_memory(query.device, True) + mem_free_total, _ = model_management.get_free_memory(query.device, True) kv_chunk_size_min = None kv_chunk_size = None @@ -230,7 +227,6 @@ def attention_split(q, k, v, heads, mask=None, attn_precision=None, skip_reshape scale = dim_head ** -0.5 - h = heads if skip_reshape: q, k, v = map( lambda t: t.reshape(b * heads, -1, dim_head), @@ -299,7 +295,10 @@ def attention_split(q, k, v, heads, mask=None, attn_precision=None, skip_reshape if len(mask.shape) == 2: s1 += mask[i:end] else: - s1 += mask[:, i:end] + if mask.shape[1] == 1: + s1 += mask + else: + s1 += mask[:, i:end] s2 = s1.softmax(dim=-1).to(v.dtype) del s1 @@ -341,12 +340,9 @@ except: pass def attention_xformers(q, k, v, heads, mask=None, attn_precision=None, skip_reshape=False): - if skip_reshape: - b, _, _, dim_head = q.shape - else: - b, _, dim_head = q.shape - dim_head //= heads - + b = q.shape[0] + dim_head = q.shape[-1] + # check to make sure xformers isn't broken disabled_xformers = False if BROKEN_XFORMERS: @@ -361,38 +357,54 @@ def attention_xformers(q, k, v, heads, mask=None, attn_precision=None, skip_resh return attention_pytorch(q, k, v, heads, mask, skip_reshape=skip_reshape) if skip_reshape: - q, k, v = map( - lambda t: t.reshape(b * heads, -1, dim_head), + # b h k d -> b k h d + q, k, v = map( + lambda t: t.permute(0, 2, 1, 3), (q, k, v), ) + # actually do the reshaping else: + dim_head //= heads q, k, v = map( lambda t: t.reshape(b, -1, heads, dim_head), (q, k, v), ) if mask is not None: - pad = 8 - q.shape[1] % 8 - mask_out = torch.empty([q.shape[0], q.shape[1], q.shape[1] + pad], dtype=q.dtype, device=q.device) - mask_out[:, :, :mask.shape[-1]] = mask - mask = mask_out[:, :, :mask.shape[-1]] + # add a singleton batch dimension + if mask.ndim == 2: + mask = mask.unsqueeze(0) + # add a singleton heads dimension + if mask.ndim == 3: + mask = mask.unsqueeze(1) + # pad to a multiple of 8 + pad = 8 - mask.shape[-1] % 8 + # the xformers docs says that it's allowed to have a mask of shape (1, Nq, Nk) + # but when using separated heads, the shape has to be (B, H, Nq, Nk) + # in flux, this matrix ends up being over 1GB + # here, we create a mask with the same batch/head size as the input mask (potentially singleton or full) + mask_out = torch.empty([mask.shape[0], mask.shape[1], q.shape[1], mask.shape[-1] + pad], dtype=q.dtype, device=q.device) + + mask_out[..., :mask.shape[-1]] = mask + # doesn't this remove the padding again?? + mask = mask_out[..., :mask.shape[-1]] + mask = mask.expand(b, heads, -1, -1) out = xformers.ops.memory_efficient_attention(q, k, v, attn_bias=mask) - if skip_reshape: - out = ( - out.unsqueeze(0) - .reshape(b, heads, -1, dim_head) - .permute(0, 2, 1, 3) - .reshape(b, -1, heads * dim_head) - ) - else: - out = ( - out.reshape(b, -1, heads * dim_head) - ) + out = ( + out.reshape(b, -1, heads * dim_head) + ) return out +if model_management.is_nvidia(): #pytorch 2.3 and up seem to have this issue. + SDP_BATCH_LIMIT = 2**15 +else: + #TODO: other GPUs ? + SDP_BATCH_LIMIT = 2**31 + + def attention_pytorch(q, k, v, heads, mask=None, attn_precision=None, skip_reshape=False): if skip_reshape: b, _, _, dim_head = q.shape @@ -404,10 +416,34 @@ def attention_pytorch(q, k, v, heads, mask=None, attn_precision=None, skip_resha (q, k, v), ) - out = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=mask, dropout_p=0.0, is_causal=False) - out = ( - out.transpose(1, 2).reshape(b, -1, heads * dim_head) - ) + if mask is not None: + # add a batch dimension if there isn't already one + if mask.ndim == 2: + mask = mask.unsqueeze(0) + # add a heads dimension if there isn't already one + if mask.ndim == 3: + mask = mask.unsqueeze(1) + + if SDP_BATCH_LIMIT >= b: + out = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=mask, dropout_p=0.0, is_causal=False) + out = ( + out.transpose(1, 2).reshape(b, -1, heads * dim_head) + ) + else: + out = torch.empty((b, q.shape[2], heads * dim_head), dtype=q.dtype, layout=q.layout, device=q.device) + for i in range(0, b, SDP_BATCH_LIMIT): + m = mask + if mask is not None: + if mask.shape[0] > 1: + m = mask[i : i + SDP_BATCH_LIMIT] + + out[i : i + SDP_BATCH_LIMIT] = torch.nn.functional.scaled_dot_product_attention( + q[i : i + SDP_BATCH_LIMIT], + k[i : i + SDP_BATCH_LIMIT], + v[i : i + SDP_BATCH_LIMIT], + attn_mask=m, + dropout_p=0.0, is_causal=False + ).transpose(1, 2).reshape(-1, q.shape[2], heads * dim_head) return out diff --git a/comfy/ldm/modules/diffusionmodules/mmdit.py b/comfy/ldm/modules/diffusionmodules/mmdit.py index 759788a97..e70f4431f 100644 --- a/comfy/ldm/modules/diffusionmodules/mmdit.py +++ b/comfy/ldm/modules/diffusionmodules/mmdit.py @@ -1,11 +1,10 @@ -import logging -import math -from typing import Dict, Optional +from functools import partial +from typing import Dict, Optional, List import numpy as np import torch import torch.nn as nn -from .. import attention +from ..attention import optimized_attention from einops import rearrange, repeat from .util import timestep_embedding import comfy.ops @@ -72,45 +71,33 @@ class PatchEmbed(nn.Module): strict_img_size: bool = True, dynamic_img_pad: bool = True, padding_mode='circular', + conv3d=False, dtype=None, device=None, operations=None, ): super().__init__() - self.patch_size = (patch_size, patch_size) + try: + len(patch_size) + self.patch_size = patch_size + except: + if conv3d: + self.patch_size = (patch_size, patch_size, patch_size) + else: + self.patch_size = (patch_size, patch_size) self.padding_mode = padding_mode - if img_size is not None: - self.img_size = (img_size, img_size) - self.grid_size = tuple([s // p for s, p in zip(self.img_size, self.patch_size)]) - self.num_patches = self.grid_size[0] * self.grid_size[1] - else: - self.img_size = None - self.grid_size = None - self.num_patches = None # flatten spatial dim and transpose to channels last, kept for bwd compat self.flatten = flatten self.strict_img_size = strict_img_size self.dynamic_img_pad = dynamic_img_pad - - self.proj = operations.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size, bias=bias, dtype=dtype, device=device) + if conv3d: + self.proj = operations.Conv3d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size, bias=bias, dtype=dtype, device=device) + else: + self.proj = operations.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size, bias=bias, dtype=dtype, device=device) self.norm = norm_layer(embed_dim) if norm_layer else nn.Identity() def forward(self, x): - B, C, H, W = x.shape - # if self.img_size is not None: - # if self.strict_img_size: - # _assert(H == self.img_size[0], f"Input height ({H}) doesn't match model ({self.img_size[0]}).") - # _assert(W == self.img_size[1], f"Input width ({W}) doesn't match model ({self.img_size[1]}).") - # elif not self.dynamic_img_pad: - # _assert( - # H % self.patch_size[0] == 0, - # f"Input height ({H}) should be divisible by patch size ({self.patch_size[0]})." - # ) - # _assert( - # W % self.patch_size[1] == 0, - # f"Input width ({W}) should be divisible by patch size ({self.patch_size[1]})." - # ) if self.dynamic_img_pad: x = comfy.ldm.common_dit.pad_to_patch_size(x, self.patch_size, padding_mode=self.padding_mode) x = self.proj(x) @@ -266,8 +253,6 @@ def split_qkv(qkv, head_dim): qkv = qkv.reshape(qkv.shape[0], qkv.shape[1], 3, -1, head_dim).movedim(2, 0) return qkv[0], qkv[1], qkv[2] -def optimized_attention(qkv, num_heads): - return attention.optimized_attention(qkv[0], qkv[1], qkv[2], num_heads) class SelfAttention(nn.Module): ATTENTION_MODES = ("xformers", "torch", "torch-hb", "math", "debug") @@ -326,9 +311,9 @@ class SelfAttention(nn.Module): return x def forward(self, x: torch.Tensor) -> torch.Tensor: - qkv = self.pre_attention(x) + q, k, v = self.pre_attention(x) x = optimized_attention( - qkv, num_heads=self.num_heads + q, k, v, heads=self.num_heads ) x = self.post_attention(x) return x @@ -417,6 +402,7 @@ class DismantledBlock(nn.Module): scale_mod_only: bool = False, swiglu: bool = False, qk_norm: Optional[str] = None, + x_block_self_attn: bool = False, dtype=None, device=None, operations=None, @@ -440,6 +426,24 @@ class DismantledBlock(nn.Module): device=device, operations=operations ) + if x_block_self_attn: + assert not pre_only + assert not scale_mod_only + self.x_block_self_attn = True + self.attn2 = SelfAttention( + dim=hidden_size, + num_heads=num_heads, + qkv_bias=qkv_bias, + attn_mode=attn_mode, + pre_only=False, + qk_norm=qk_norm, + rmsnorm=rmsnorm, + dtype=dtype, + device=device, + operations=operations + ) + else: + self.x_block_self_attn = False if not pre_only: if not rmsnorm: self.norm2 = operations.LayerNorm( @@ -466,7 +470,11 @@ class DismantledBlock(nn.Module): multiple_of=256, ) self.scale_mod_only = scale_mod_only - if not scale_mod_only: + if x_block_self_attn: + assert not pre_only + assert not scale_mod_only + n_mods = 9 + elif not scale_mod_only: n_mods = 6 if not pre_only else 2 else: n_mods = 4 if not pre_only else 1 @@ -527,14 +535,64 @@ class DismantledBlock(nn.Module): ) return x + def pre_attention_x(self, x: torch.Tensor, c: torch.Tensor) -> torch.Tensor: + assert self.x_block_self_attn + ( + shift_msa, + scale_msa, + gate_msa, + shift_mlp, + scale_mlp, + gate_mlp, + shift_msa2, + scale_msa2, + gate_msa2, + ) = self.adaLN_modulation(c).chunk(9, dim=1) + x_norm = self.norm1(x) + qkv = self.attn.pre_attention(modulate(x_norm, shift_msa, scale_msa)) + qkv2 = self.attn2.pre_attention(modulate(x_norm, shift_msa2, scale_msa2)) + return qkv, qkv2, ( + x, + gate_msa, + shift_mlp, + scale_mlp, + gate_mlp, + gate_msa2, + ) + + def post_attention_x(self, attn, attn2, x, gate_msa, shift_mlp, scale_mlp, gate_mlp, gate_msa2): + assert not self.pre_only + attn1 = self.attn.post_attention(attn) + attn2 = self.attn2.post_attention(attn2) + out1 = gate_msa.unsqueeze(1) * attn1 + out2 = gate_msa2.unsqueeze(1) * attn2 + x = x + out1 + x = x + out2 + x = x + gate_mlp.unsqueeze(1) * self.mlp( + modulate(self.norm2(x), shift_mlp, scale_mlp) + ) + return x + def forward(self, x: torch.Tensor, c: torch.Tensor) -> torch.Tensor: assert not self.pre_only - qkv, intermediates = self.pre_attention(x, c) - attn = optimized_attention( - qkv, - num_heads=self.attn.num_heads, - ) - return self.post_attention(attn, *intermediates) + if self.x_block_self_attn: + qkv, qkv2, intermediates = self.pre_attention_x(x, c) + attn, _ = optimized_attention( + qkv[0], qkv[1], qkv[2], + num_heads=self.attn.num_heads, + ) + attn2, _ = optimized_attention( + qkv2[0], qkv2[1], qkv2[2], + num_heads=self.attn2.num_heads, + ) + return self.post_attention_x(attn, attn2, *intermediates) + else: + qkv, intermediates = self.pre_attention(x, c) + attn = optimized_attention( + qkv[0], qkv[1], qkv[2], + heads=self.attn.num_heads, + ) + return self.post_attention(attn, *intermediates) def block_mixing(*args, use_checkpoint=True, **kwargs): @@ -549,7 +607,10 @@ def block_mixing(*args, use_checkpoint=True, **kwargs): def _block_mixing(context, x, context_block, x_block, c): context_qkv, context_intermediates = context_block.pre_attention(context, c) - x_qkv, x_intermediates = x_block.pre_attention(x, c) + if x_block.x_block_self_attn: + x_qkv, x_qkv2, x_intermediates = x_block.pre_attention_x(x, c) + else: + x_qkv, x_intermediates = x_block.pre_attention(x, c) o = [] for t in range(3): @@ -557,8 +618,8 @@ def _block_mixing(context, x, context_block, x_block, c): qkv = tuple(o) attn = optimized_attention( - qkv, - num_heads=x_block.attn.num_heads, + qkv[0], qkv[1], qkv[2], + heads=x_block.attn.num_heads, ) context_attn, x_attn = ( attn[:, : context_qkv[0].shape[1]], @@ -570,7 +631,14 @@ def _block_mixing(context, x, context_block, x_block, c): else: context = None - x = x_block.post_attention(x_attn, *x_intermediates) + if x_block.x_block_self_attn: + attn2 = optimized_attention( + x_qkv2[0], x_qkv2[1], x_qkv2[2], + heads=x_block.attn2.num_heads, + ) + x = x_block.post_attention_x(x_attn, attn2, *x_intermediates) + else: + x = x_block.post_attention(x_attn, *x_intermediates) return context, x @@ -585,8 +653,13 @@ class JointBlock(nn.Module): super().__init__() pre_only = kwargs.pop("pre_only") qk_norm = kwargs.pop("qk_norm", None) + x_block_self_attn = kwargs.pop("x_block_self_attn", False) self.context_block = DismantledBlock(*args, pre_only=pre_only, qk_norm=qk_norm, **kwargs) - self.x_block = DismantledBlock(*args, pre_only=False, qk_norm=qk_norm, **kwargs) + self.x_block = DismantledBlock(*args, + pre_only=False, + qk_norm=qk_norm, + x_block_self_attn=x_block_self_attn, + **kwargs) def forward(self, *args, **kwargs): return block_mixing( @@ -642,7 +715,7 @@ class SelfAttentionContext(nn.Module): def forward(self, x): qkv = self.qkv(x) q, k, v = split_qkv(qkv, self.dim_head) - x = optimized_attention((q.reshape(q.shape[0], q.shape[1], -1), k, v), self.heads) + x = optimized_attention(q.reshape(q.shape[0], q.shape[1], -1), k, v, heads=self.heads) return self.proj(x) class ContextProcessorBlock(nn.Module): @@ -701,9 +774,12 @@ class MMDiT(nn.Module): qk_norm: Optional[str] = None, qkv_bias: bool = True, context_processor_layers = None, + x_block_self_attn: bool = False, + x_block_self_attn_layers: Optional[List[int]] = [], context_size = 4096, num_blocks = None, final_layer = True, + skip_blocks = False, dtype = None, #TODO device = None, operations = None, @@ -718,6 +794,7 @@ class MMDiT(nn.Module): self.pos_embed_scaling_factor = pos_embed_scaling_factor self.pos_embed_offset = pos_embed_offset self.pos_embed_max_size = pos_embed_max_size + self.x_block_self_attn_layers = x_block_self_attn_layers # hidden_size = default(hidden_size, 64 * depth) # num_heads = default(num_heads, hidden_size // 64) @@ -775,26 +852,28 @@ class MMDiT(nn.Module): self.pos_embed = None self.use_checkpoint = use_checkpoint - self.joint_blocks = nn.ModuleList( - [ - JointBlock( - self.hidden_size, - num_heads, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - attn_mode=attn_mode, - pre_only=(i == num_blocks - 1) and final_layer, - rmsnorm=rmsnorm, - scale_mod_only=scale_mod_only, - swiglu=swiglu, - qk_norm=qk_norm, - dtype=dtype, - device=device, - operations=operations - ) - for i in range(num_blocks) - ] - ) + if not skip_blocks: + self.joint_blocks = nn.ModuleList( + [ + JointBlock( + self.hidden_size, + num_heads, + mlp_ratio=mlp_ratio, + qkv_bias=qkv_bias, + attn_mode=attn_mode, + pre_only=(i == num_blocks - 1) and final_layer, + rmsnorm=rmsnorm, + scale_mod_only=scale_mod_only, + swiglu=swiglu, + qk_norm=qk_norm, + x_block_self_attn=(i in self.x_block_self_attn_layers) or x_block_self_attn, + dtype=dtype, + device=device, + operations=operations, + ) + for i in range(num_blocks) + ] + ) if final_layer: self.final_layer = FinalLayer(self.hidden_size, patch_size, self.out_channels, dtype=dtype, device=device, operations=operations) @@ -857,7 +936,9 @@ class MMDiT(nn.Module): c_mod: torch.Tensor, context: Optional[torch.Tensor] = None, control = None, + transformer_options = {}, ) -> torch.Tensor: + patches_replace = transformer_options.get("patches_replace", {}) if self.register_length > 0: context = torch.cat( ( @@ -869,14 +950,25 @@ class MMDiT(nn.Module): # context is B, L', D # x is B, L, D + blocks_replace = patches_replace.get("dit", {}) blocks = len(self.joint_blocks) for i in range(blocks): - context, x = self.joint_blocks[i]( - context, - x, - c=c_mod, - use_checkpoint=self.use_checkpoint, - ) + if ("double_block", i) in blocks_replace: + def block_wrap(args): + out = {} + out["txt"], out["img"] = self.joint_blocks[i](args["txt"], args["img"], c=args["vec"]) + return out + + out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": c_mod}, {"original_block": block_wrap}) + context = out["txt"] + x = out["img"] + else: + context, x = self.joint_blocks[i]( + context, + x, + c=c_mod, + use_checkpoint=self.use_checkpoint, + ) if control is not None: control_o = control.get("output") if i < len(control_o): @@ -894,6 +986,7 @@ class MMDiT(nn.Module): y: Optional[torch.Tensor] = None, context: Optional[torch.Tensor] = None, control = None, + transformer_options = {}, ) -> torch.Tensor: """ Forward pass of DiT. @@ -915,7 +1008,7 @@ class MMDiT(nn.Module): if context is not None: context = self.context_embedder(context) - x = self.forward_core_with_concat(x, c, context, control) + x = self.forward_core_with_concat(x, c, context, control, transformer_options) x = self.unpatchify(x, hw=hw) # (N, out_channels, H, W) return x[:,:,:hw[-2],:hw[-1]] @@ -929,7 +1022,8 @@ class OpenAISignatureMMDITWrapper(MMDiT): context: Optional[torch.Tensor] = None, y: Optional[torch.Tensor] = None, control = None, + transformer_options = {}, **kwargs, ) -> torch.Tensor: - return super().forward(x, timesteps, context=context, y=y, control=control) + return super().forward(x, timesteps, context=context, y=y, control=control, transformer_options=transformer_options) diff --git a/comfy/ldm/modules/diffusionmodules/model.py b/comfy/ldm/modules/diffusionmodules/model.py index 04eb83b21..74322c272 100644 --- a/comfy/ldm/modules/diffusionmodules/model.py +++ b/comfy/ldm/modules/diffusionmodules/model.py @@ -3,7 +3,6 @@ import math import torch import torch.nn as nn import numpy as np -from typing import Optional, Any import logging from comfy import model_management @@ -44,51 +43,100 @@ def Normalize(in_channels, num_groups=32): return ops.GroupNorm(num_groups=num_groups, num_channels=in_channels, eps=1e-6, affine=True) +class VideoConv3d(nn.Module): + def __init__(self, n_channels, out_channels, kernel_size, stride=1, dilation=1, padding_mode='replicate', padding=1, **kwargs): + super().__init__() + + self.padding_mode = padding_mode + if padding != 0: + padding = (padding, padding, padding, padding, kernel_size - 1, 0) + else: + kwargs["padding"] = padding + + self.padding = padding + self.conv = ops.Conv3d(n_channels, out_channels, kernel_size, stride=stride, dilation=dilation, **kwargs) + + def forward(self, x): + if self.padding != 0: + x = torch.nn.functional.pad(x, self.padding, mode=self.padding_mode) + return self.conv(x) + +def interpolate_up(x, scale_factor): + try: + return torch.nn.functional.interpolate(x, scale_factor=scale_factor, mode="nearest") + except: #operation not implemented for bf16 + orig_shape = list(x.shape) + out_shape = orig_shape[:2] + for i in range(len(orig_shape) - 2): + out_shape.append(round(orig_shape[i + 2] * scale_factor[i])) + out = torch.empty(out_shape, dtype=x.dtype, layout=x.layout, device=x.device) + split = 8 + l = out.shape[1] // split + for i in range(0, out.shape[1], l): + out[:,i:i+l] = torch.nn.functional.interpolate(x[:,i:i+l].to(torch.float32), scale_factor=scale_factor, mode="nearest").to(x.dtype) + return out + class Upsample(nn.Module): - def __init__(self, in_channels, with_conv): + def __init__(self, in_channels, with_conv, conv_op=ops.Conv2d, scale_factor=2.0): super().__init__() self.with_conv = with_conv + self.scale_factor = scale_factor + if self.with_conv: - self.conv = ops.Conv2d(in_channels, + self.conv = conv_op(in_channels, in_channels, kernel_size=3, stride=1, padding=1) def forward(self, x): - try: - x = torch.nn.functional.interpolate(x, scale_factor=2.0, mode="nearest") - except: #operation not implemented for bf16 - b, c, h, w = x.shape - out = torch.empty((b, c, h*2, w*2), dtype=x.dtype, layout=x.layout, device=x.device) - split = 8 - l = out.shape[1] // split - for i in range(0, out.shape[1], l): - out[:,i:i+l] = torch.nn.functional.interpolate(x[:,i:i+l].to(torch.float32), scale_factor=2.0, mode="nearest").to(x.dtype) - del x - x = out + scale_factor = self.scale_factor + if not isinstance(scale_factor, tuple): + scale_factor = (scale_factor,) * (x.ndim - 2) + if x.ndim == 5 and scale_factor[0] > 1.0: + t = x.shape[2] + if t > 1: + a, b = x.split((1, t - 1), dim=2) + del x + b = interpolate_up(b, scale_factor) + else: + a = x + + a = interpolate_up(a.squeeze(2), scale_factor=scale_factor[1:]).unsqueeze(2) + if t > 1: + x = torch.cat((a, b), dim=2) + else: + x = a + else: + x = interpolate_up(x, self.scale_factor) if self.with_conv: x = self.conv(x) return x class Downsample(nn.Module): - def __init__(self, in_channels, with_conv): + def __init__(self, in_channels, with_conv, stride=2, conv_op=ops.Conv2d): super().__init__() self.with_conv = with_conv if self.with_conv: # no asymmetric padding in torch conv, must do it ourselves - self.conv = ops.Conv2d(in_channels, + self.conv = conv_op(in_channels, in_channels, kernel_size=3, - stride=2, + stride=stride, padding=0) def forward(self, x): if self.with_conv: - pad = (0,1,0,1) - x = torch.nn.functional.pad(x, pad, mode="constant", value=0) + if x.ndim == 4: + pad = (0, 1, 0, 1) + mode = "constant" + x = torch.nn.functional.pad(x, pad, mode=mode, value=0) + elif x.ndim == 5: + pad = (1, 1, 1, 1, 2, 0) + mode = "replicate" + x = torch.nn.functional.pad(x, pad, mode=mode) x = self.conv(x) else: x = torch.nn.functional.avg_pool2d(x, kernel_size=2, stride=2) @@ -97,7 +145,7 @@ class Downsample(nn.Module): class ResnetBlock(nn.Module): def __init__(self, *, in_channels, out_channels=None, conv_shortcut=False, - dropout, temb_channels=512): + dropout, temb_channels=512, conv_op=ops.Conv2d): super().__init__() self.in_channels = in_channels out_channels = in_channels if out_channels is None else out_channels @@ -106,7 +154,7 @@ class ResnetBlock(nn.Module): self.swish = torch.nn.SiLU(inplace=True) self.norm1 = Normalize(in_channels) - self.conv1 = ops.Conv2d(in_channels, + self.conv1 = conv_op(in_channels, out_channels, kernel_size=3, stride=1, @@ -116,20 +164,20 @@ class ResnetBlock(nn.Module): out_channels) self.norm2 = Normalize(out_channels) self.dropout = torch.nn.Dropout(dropout, inplace=True) - self.conv2 = ops.Conv2d(out_channels, + self.conv2 = conv_op(out_channels, out_channels, kernel_size=3, stride=1, padding=1) if self.in_channels != self.out_channels: if self.use_conv_shortcut: - self.conv_shortcut = ops.Conv2d(in_channels, + self.conv_shortcut = conv_op(in_channels, out_channels, kernel_size=3, stride=1, padding=1) else: - self.nin_shortcut = ops.Conv2d(in_channels, + self.nin_shortcut = conv_op(in_channels, out_channels, kernel_size=1, stride=1, @@ -163,7 +211,6 @@ def slice_attention(q, k, v): mem_free_total = model_management.get_free_memory(q.device) - gb = 1024 ** 3 tensor_size = q.shape[0] * q.shape[1] * k.shape[2] * q.element_size() modifier = 3 if q.element_size() == 2 else 2.5 mem_required = tensor_size * modifier @@ -196,21 +243,25 @@ def slice_attention(q, k, v): def normal_attention(q, k, v): # compute attention - b,c,h,w = q.shape + orig_shape = q.shape + b = orig_shape[0] + c = orig_shape[1] - q = q.reshape(b,c,h*w) - q = q.permute(0,2,1) # b,hw,c - k = k.reshape(b,c,h*w) # b,c,hw - v = v.reshape(b,c,h*w) + q = q.reshape(b, c, -1) + q = q.permute(0, 2, 1) # b,hw,c + k = k.reshape(b, c, -1) # b,c,hw + v = v.reshape(b, c, -1) r1 = slice_attention(q, k, v) - h_ = r1.reshape(b,c,h,w) + h_ = r1.reshape(orig_shape) del r1 return h_ def xformers_attention(q, k, v): # compute attention - B, C, H, W = q.shape + orig_shape = q.shape + B = orig_shape[0] + C = orig_shape[1] q, k, v = map( lambda t: t.view(B, C, -1).transpose(1, 2).contiguous(), (q, k, v), @@ -218,14 +269,16 @@ def xformers_attention(q, k, v): try: out = xformers.ops.memory_efficient_attention(q, k, v, attn_bias=None) - out = out.transpose(1, 2).reshape(B, C, H, W) - except NotImplementedError as e: - out = slice_attention(q.view(B, -1, C), k.view(B, -1, C).transpose(1, 2), v.view(B, -1, C).transpose(1, 2)).reshape(B, C, H, W) + out = out.transpose(1, 2).reshape(orig_shape) + except NotImplementedError: + out = slice_attention(q.view(B, -1, C), k.view(B, -1, C).transpose(1, 2), v.view(B, -1, C).transpose(1, 2)).reshape(orig_shape) return out def pytorch_attention(q, k, v): # compute attention - B, C, H, W = q.shape + orig_shape = q.shape + B = orig_shape[0] + C = orig_shape[1] q, k, v = map( lambda t: t.view(B, 1, C, -1).transpose(2, 3).contiguous(), (q, k, v), @@ -233,35 +286,35 @@ def pytorch_attention(q, k, v): try: out = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=None, dropout_p=0.0, is_causal=False) - out = out.transpose(2, 3).reshape(B, C, H, W) - except model_management.OOM_EXCEPTION as e: + out = out.transpose(2, 3).reshape(orig_shape) + except model_management.OOM_EXCEPTION: logging.warning("scaled_dot_product_attention OOMed: switched to slice attention") - out = slice_attention(q.view(B, -1, C), k.view(B, -1, C).transpose(1, 2), v.view(B, -1, C).transpose(1, 2)).reshape(B, C, H, W) + out = slice_attention(q.view(B, -1, C), k.view(B, -1, C).transpose(1, 2), v.view(B, -1, C).transpose(1, 2)).reshape(orig_shape) return out class AttnBlock(nn.Module): - def __init__(self, in_channels): + def __init__(self, in_channels, conv_op=ops.Conv2d): super().__init__() self.in_channels = in_channels self.norm = Normalize(in_channels) - self.q = ops.Conv2d(in_channels, + self.q = conv_op(in_channels, in_channels, kernel_size=1, stride=1, padding=0) - self.k = ops.Conv2d(in_channels, + self.k = conv_op(in_channels, in_channels, kernel_size=1, stride=1, padding=0) - self.v = ops.Conv2d(in_channels, + self.v = conv_op(in_channels, in_channels, kernel_size=1, stride=1, padding=0) - self.proj_out = ops.Conv2d(in_channels, + self.proj_out = conv_op(in_channels, in_channels, kernel_size=1, stride=1, @@ -291,8 +344,8 @@ class AttnBlock(nn.Module): return x+h_ -def make_attn(in_channels, attn_type="vanilla", attn_kwargs=None): - return AttnBlock(in_channels) +def make_attn(in_channels, attn_type="vanilla", attn_kwargs=None, conv_op=ops.Conv2d): + return AttnBlock(in_channels, conv_op=conv_op) class Model(nn.Module): @@ -451,6 +504,7 @@ class Encoder(nn.Module): def __init__(self, *, ch, out_ch, ch_mult=(1,2,4,8), num_res_blocks, attn_resolutions, dropout=0.0, resamp_with_conv=True, in_channels, resolution, z_channels, double_z=True, use_linear_attn=False, attn_type="vanilla", + conv3d=False, time_compress=None, **ignore_kwargs): super().__init__() if use_linear_attn: attn_type = "linear" @@ -461,8 +515,15 @@ class Encoder(nn.Module): self.resolution = resolution self.in_channels = in_channels + if conv3d: + conv_op = VideoConv3d + mid_attn_conv_op = ops.Conv3d + else: + conv_op = ops.Conv2d + mid_attn_conv_op = ops.Conv2d + # downsampling - self.conv_in = ops.Conv2d(in_channels, + self.conv_in = conv_op(in_channels, self.ch, kernel_size=3, stride=1, @@ -481,15 +542,20 @@ class Encoder(nn.Module): block.append(ResnetBlock(in_channels=block_in, out_channels=block_out, temb_channels=self.temb_ch, - dropout=dropout)) + dropout=dropout, + conv_op=conv_op)) block_in = block_out if curr_res in attn_resolutions: - attn.append(make_attn(block_in, attn_type=attn_type)) + attn.append(make_attn(block_in, attn_type=attn_type, conv_op=conv_op)) down = nn.Module() down.block = block down.attn = attn if i_level != self.num_resolutions-1: - down.downsample = Downsample(block_in, resamp_with_conv) + stride = 2 + if time_compress is not None: + if (self.num_resolutions - 1 - i_level) > math.log2(time_compress): + stride = (1, 2, 2) + down.downsample = Downsample(block_in, resamp_with_conv, stride=stride, conv_op=conv_op) curr_res = curr_res // 2 self.down.append(down) @@ -498,16 +564,18 @@ class Encoder(nn.Module): self.mid.block_1 = ResnetBlock(in_channels=block_in, out_channels=block_in, temb_channels=self.temb_ch, - dropout=dropout) - self.mid.attn_1 = make_attn(block_in, attn_type=attn_type) + dropout=dropout, + conv_op=conv_op) + self.mid.attn_1 = make_attn(block_in, attn_type=attn_type, conv_op=mid_attn_conv_op) self.mid.block_2 = ResnetBlock(in_channels=block_in, out_channels=block_in, temb_channels=self.temb_ch, - dropout=dropout) + dropout=dropout, + conv_op=conv_op) # end self.norm_out = Normalize(block_in) - self.conv_out = ops.Conv2d(block_in, + self.conv_out = conv_op(block_in, 2*z_channels if double_z else z_channels, kernel_size=3, stride=1, @@ -545,9 +613,10 @@ class Decoder(nn.Module): conv_out_op=ops.Conv2d, resnet_op=ResnetBlock, attn_op=AttnBlock, + conv3d=False, + time_compress=None, **ignorekwargs): super().__init__() - if use_linear_attn: attn_type = "linear" self.ch = ch self.temb_ch = 0 self.num_resolutions = len(ch_mult) @@ -557,8 +626,15 @@ class Decoder(nn.Module): self.give_pre_end = give_pre_end self.tanh_out = tanh_out - # compute in_ch_mult, block_in and curr_res at lowest res - in_ch_mult = (1,)+tuple(ch_mult) + if conv3d: + conv_op = VideoConv3d + conv_out_op = VideoConv3d + mid_attn_conv_op = ops.Conv3d + else: + conv_op = ops.Conv2d + mid_attn_conv_op = ops.Conv2d + + # compute block_in and curr_res at lowest res block_in = ch*ch_mult[self.num_resolutions-1] curr_res = resolution // 2**(self.num_resolutions-1) self.z_shape = (1,z_channels,curr_res,curr_res) @@ -566,7 +642,7 @@ class Decoder(nn.Module): self.z_shape, np.prod(self.z_shape))) # z to block_in - self.conv_in = ops.Conv2d(z_channels, + self.conv_in = conv_op(z_channels, block_in, kernel_size=3, stride=1, @@ -577,12 +653,14 @@ class Decoder(nn.Module): self.mid.block_1 = resnet_op(in_channels=block_in, out_channels=block_in, temb_channels=self.temb_ch, - dropout=dropout) - self.mid.attn_1 = attn_op(block_in) + dropout=dropout, + conv_op=conv_op) + self.mid.attn_1 = attn_op(block_in, conv_op=mid_attn_conv_op) self.mid.block_2 = resnet_op(in_channels=block_in, out_channels=block_in, temb_channels=self.temb_ch, - dropout=dropout) + dropout=dropout, + conv_op=conv_op) # upsampling self.up = nn.ModuleList() @@ -594,15 +672,21 @@ class Decoder(nn.Module): block.append(resnet_op(in_channels=block_in, out_channels=block_out, temb_channels=self.temb_ch, - dropout=dropout)) + dropout=dropout, + conv_op=conv_op)) block_in = block_out if curr_res in attn_resolutions: - attn.append(attn_op(block_in)) + attn.append(attn_op(block_in, conv_op=conv_op)) up = nn.Module() up.block = block up.attn = attn if i_level != 0: - up.upsample = Upsample(block_in, resamp_with_conv) + scale_factor = 2.0 + if time_compress is not None: + if i_level > math.log2(time_compress): + scale_factor = (1.0, 2.0, 2.0) + + up.upsample = Upsample(block_in, resamp_with_conv, conv_op=conv_op, scale_factor=scale_factor) curr_res = curr_res * 2 self.up.insert(0, up) # prepend to get consistent order diff --git a/comfy/ldm/modules/diffusionmodules/openaimodel.py b/comfy/ldm/modules/diffusionmodules/openaimodel.py index 6535e899c..4c8d53cac 100644 --- a/comfy/ldm/modules/diffusionmodules/openaimodel.py +++ b/comfy/ldm/modules/diffusionmodules/openaimodel.py @@ -9,12 +9,12 @@ import logging from .util import ( checkpoint, avg_pool_nd, - zero_module, timestep_embedding, AlphaBlender, ) from ..attention import SpatialTransformer, SpatialVideoTransformer, default from comfy.ldm.util import exists +import comfy.patcher_extension import comfy.ops ops = comfy.ops.disable_weight_init @@ -47,6 +47,15 @@ def forward_timestep_embed(ts, x, emb, context=None, transformer_options={}, out elif isinstance(layer, Upsample): x = layer(x, output_shape=output_shape) else: + if "patches" in transformer_options and "forward_timestep_embed_patch" in transformer_options["patches"]: + found_patched = False + for class_type, handler in transformer_options["patches"]["forward_timestep_embed_patch"]: + if isinstance(layer, class_type): + x = handler(layer, x, emb, context, transformer_options, output_shape, time_context, num_video_frames, image_only_indicator) + found_patched = True + break + if found_patched: + continue x = layer(x) return x @@ -819,6 +828,13 @@ class UNetModel(nn.Module): ) def forward(self, x, timesteps=None, context=None, y=None, control=None, transformer_options={}, **kwargs): + return comfy.patcher_extension.WrapperExecutor.new_class_executor( + self._forward, + self, + comfy.patcher_extension.get_all_wrappers(comfy.patcher_extension.WrappersMP.DIFFUSION_MODEL, transformer_options) + ).execute(x, timesteps, context, y, control, transformer_options, **kwargs) + + def _forward(self, x, timesteps=None, context=None, y=None, control=None, transformer_options={}, **kwargs): """ Apply the model to an input batch. :param x: an [N x C x ...] Tensor of inputs. @@ -842,6 +858,11 @@ class UNetModel(nn.Module): t_emb = timestep_embedding(timesteps, self.model_channels, repeat_only=False).to(x.dtype) emb = self.time_embed(t_emb) + if "emb_patch" in transformer_patches: + patch = transformer_patches["emb_patch"] + for p in patch: + emb = p(emb, self.model_channels, transformer_options) + if self.num_classes is not None: assert y.shape[0] == x.shape[0] emb = emb + self.label_emb(y) diff --git a/comfy/ldm/modules/diffusionmodules/upscaling.py b/comfy/ldm/modules/diffusionmodules/upscaling.py index f5ac7c2f9..9dbf1fe7b 100644 --- a/comfy/ldm/modules/diffusionmodules/upscaling.py +++ b/comfy/ldm/modules/diffusionmodules/upscaling.py @@ -4,7 +4,6 @@ import numpy as np from functools import partial from .util import extract_into_tensor, make_beta_schedule -from comfy.ldm.util import default class AbstractLowScaleModel(nn.Module): diff --git a/comfy/ldm/modules/diffusionmodules/util.py b/comfy/ldm/modules/diffusionmodules/util.py index ce14ad5e1..9377b0737 100644 --- a/comfy/ldm/modules/diffusionmodules/util.py +++ b/comfy/ldm/modules/diffusionmodules/util.py @@ -8,7 +8,6 @@ # thanks! -import os import math import torch import torch.nn as nn diff --git a/comfy/ldm/modules/sub_quadratic_attention.py b/comfy/ldm/modules/sub_quadratic_attention.py index 1bc4138c3..7c5f1d9f9 100644 --- a/comfy/ldm/modules/sub_quadratic_attention.py +++ b/comfy/ldm/modules/sub_quadratic_attention.py @@ -22,7 +22,6 @@ except ImportError: from typing import Optional, NamedTuple, List from typing_extensions import Protocol -from torch import Tensor from typing import List from comfy import model_management @@ -172,7 +171,7 @@ def _get_attention_scores_no_kv_chunking( del attn_scores except model_management.OOM_EXCEPTION: logging.warning("ran out of memory while running softmax in _get_attention_scores_no_kv_chunking, trying slower in place softmax instead") - attn_scores -= attn_scores.max(dim=-1, keepdim=True).values + attn_scores -= attn_scores.max(dim=-1, keepdim=True).values # noqa: F821 attn_scores is not defined torch.exp(attn_scores, out=attn_scores) summed = torch.sum(attn_scores, dim=-1, keepdim=True) attn_scores /= summed @@ -234,6 +233,8 @@ def efficient_dot_product_attention( def get_mask_chunk(chunk_idx: int) -> Tensor: if mask is None: return None + if mask.shape[1] == 1: + return mask chunk = min(query_chunk_size, q_tokens) return mask[:,chunk_idx:chunk_idx + chunk] diff --git a/comfy/ldm/modules/temporal_ae.py b/comfy/ldm/modules/temporal_ae.py index 2992aeafc..e0f78bf66 100644 --- a/comfy/ldm/modules/temporal_ae.py +++ b/comfy/ldm/modules/temporal_ae.py @@ -1,5 +1,5 @@ import functools -from typing import Callable, Iterable, Union +from typing import Iterable, Union import torch from einops import rearrange, repeat @@ -194,6 +194,7 @@ def make_time_attn( attn_kwargs=None, alpha: float = 0, merge_strategy: str = "learned", + conv_op=ops.Conv2d, ): return partialclass( AttnVideoBlock, in_channels, alpha=alpha, merge_strategy=merge_strategy diff --git a/comfy/ldm/util.py b/comfy/ldm/util.py index 8c09ca1c7..fdd8b84a2 100644 --- a/comfy/ldm/util.py +++ b/comfy/ldm/util.py @@ -133,7 +133,6 @@ class AdamWwithEMAandWings(optim.Optimizer): exp_avgs = [] exp_avg_sqs = [] ema_params_with_grad = [] - state_sums = [] max_exp_avg_sqs = [] state_steps = [] amsgrad = group['amsgrad'] diff --git a/comfy/lora.py b/comfy/lora.py index 3590496cc..e54b3b4ff 100644 --- a/comfy/lora.py +++ b/comfy/lora.py @@ -33,7 +33,7 @@ LORA_CLIP_MAP = { } -def load_lora(lora, to_load): +def load_lora(lora, to_load, log_missing=True): patch_dict = {} loaded_keys = set() for x in to_load: @@ -49,10 +49,20 @@ def load_lora(lora, to_load): dora_scale = lora[dora_scale_name] loaded_keys.add(dora_scale_name) + reshape_name = "{}.reshape_weight".format(x) + reshape = None + if reshape_name in lora.keys(): + try: + reshape = lora[reshape_name].tolist() + loaded_keys.add(reshape_name) + except: + pass + regular_lora = "{}.lora_up.weight".format(x) diffusers_lora = "{}_lora.up.weight".format(x) diffusers2_lora = "{}.lora_B.weight".format(x) diffusers3_lora = "{}.lora.up.weight".format(x) + mochi_lora = "{}.lora_B".format(x) transformers_lora = "{}.lora_linear_layer.up.weight".format(x) A_name = None @@ -72,6 +82,10 @@ def load_lora(lora, to_load): A_name = diffusers3_lora B_name = "{}.lora.down.weight".format(x) mid_name = None + elif mochi_lora in lora.keys(): + A_name = mochi_lora + B_name = "{}.lora_A".format(x) + mid_name = None elif transformers_lora in lora.keys(): A_name = transformers_lora B_name ="{}.lora_linear_layer.down.weight".format(x) @@ -82,7 +96,7 @@ def load_lora(lora, to_load): if mid_name is not None and mid_name in lora.keys(): mid = lora[mid_name] loaded_keys.add(mid_name) - patch_dict[to_load[x]] = ("lora", (lora[A_name], lora[B_name], alpha, mid, dora_scale)) + patch_dict[to_load[x]] = ("lora", (lora[A_name], lora[B_name], alpha, mid, dora_scale, reshape)) loaded_keys.add(A_name) loaded_keys.add(B_name) @@ -193,17 +207,28 @@ def load_lora(lora, to_load): patch_dict["{}.bias".format(to_load[x][:-len(".weight")])] = ("diff", (diff_bias,)) loaded_keys.add(diff_bias_name) - for x in lora.keys(): - if x not in loaded_keys: - logging.warning("lora key not loaded: {}".format(x)) + set_weight_name = "{}.set_weight".format(x) + set_weight = lora.get(set_weight_name, None) + if set_weight is not None: + patch_dict[to_load[x]] = ("set", (set_weight,)) + loaded_keys.add(set_weight_name) + + if log_missing: + for x in lora.keys(): + if x not in loaded_keys: + logging.warning("lora key not loaded: {}".format(x)) return patch_dict def model_lora_keys_clip(model, key_map={}): sdk = model.state_dict().keys() + for k in sdk: + if k.endswith(".weight"): + key_map["text_encoders.{}".format(k[:-len(".weight")])] = k #generic lora format without any weird key names text_model_lora_key = "lora_te_text_model_encoder_layers_{}_{}" clip_l_present = False + clip_g_present = False for b in range(32): #TODO: clean up for c in LORA_CLIP_MAP: k = "clip_h.transformer.text_model.encoder.layers.{}.{}.weight".format(b, c) @@ -227,6 +252,7 @@ def model_lora_keys_clip(model, key_map={}): k = "clip_g.transformer.text_model.encoder.layers.{}.{}.weight".format(b, c) if k in sdk: + clip_g_present = True if clip_l_present: lora_key = "lora_te2_text_model_encoder_layers_{}_{}".format(b, LORA_CLIP_MAP[c]) #SDXL base key_map[lora_key] = k @@ -242,10 +268,18 @@ def model_lora_keys_clip(model, key_map={}): for k in sdk: if k.endswith(".weight"): - if k.startswith("t5xxl.transformer."):#OneTrainer SD3 lora + if k.startswith("t5xxl.transformer."):#OneTrainer SD3 and Flux lora l_key = k[len("t5xxl.transformer."):-len(".weight")] - lora_key = "lora_te3_{}".format(l_key.replace(".", "_")) - key_map[lora_key] = k + t5_index = 1 + if clip_g_present: + t5_index += 1 + if clip_l_present: + t5_index += 1 + if t5_index == 2: + key_map["lora_te{}_{}".format(t5_index, l_key.replace(".", "_"))] = k #OneTrainer Flux + t5_index += 1 + + key_map["lora_te{}_{}".format(t5_index, l_key.replace(".", "_"))] = k elif k.startswith("hydit_clip.transformer.bert."): #HunyuanDiT Lora l_key = k[len("hydit_clip.transformer.bert."):-len(".weight")] lora_key = "lora_te1_{}".format(l_key.replace(".", "_")) @@ -269,11 +303,14 @@ def model_lora_keys_unet(model, key_map={}): sdk = sd.keys() for k in sdk: - if k.startswith("diffusion_model.") and k.endswith(".weight"): - key_lora = k[len("diffusion_model."):-len(".weight")].replace(".", "_") - key_map["lora_unet_{}".format(key_lora)] = k - key_map["lora_prior_unet_{}".format(key_lora)] = k #cascade lora: TODO put lora key prefix in the model config - key_map["{}".format(k[:-len(".weight")])] = k #generic lora format without any weird key names + if k.startswith("diffusion_model."): + if k.endswith(".weight"): + key_lora = k[len("diffusion_model."):-len(".weight")].replace(".", "_") + key_map["lora_unet_{}".format(key_lora)] = k + key_map["lora_prior_unet_{}".format(key_lora)] = k #cascade lora: TODO put lora key prefix in the model config + key_map["{}".format(k[:-len(".weight")])] = k #generic lora format without any weird key names + else: + key_map["{}".format(k)] = k #generic lora format for not .weight without any weird key names diffusers_keys = comfy.utils.unet_to_diffusers(model.model_config.unet_config) for k in diffusers_keys: @@ -281,6 +318,7 @@ def model_lora_keys_unet(model, key_map={}): unet_key = "diffusion_model.{}".format(diffusers_keys[k]) key_lora = k[:-len(".weight")].replace(".", "_") key_map["lora_unet_{}".format(key_lora)] = unet_key + key_map["lycoris_{}".format(key_lora)] = unet_key #simpletuner lycoris format diffusers_lora_prefix = ["", "unet."] for p in diffusers_lora_prefix: @@ -303,6 +341,10 @@ def model_lora_keys_unet(model, key_map={}): key_lora = "lora_transformer_{}".format(k[:-len(".weight")].replace(".", "_")) #OneTrainer lora key_map[key_lora] = to + key_lora = "lycoris_{}".format(k[:-len(".weight")].replace(".", "_")) #simpletuner lycoris format + key_map[key_lora] = to + + if isinstance(model, comfy.model_base.AuraFlow): #Diffusers lora AuraFlow diffusers_keys = comfy.utils.auraflow_to_diffusers(model.model_config.unet_config, output_prefix="diffusion_model.") for k in diffusers_keys: @@ -324,14 +366,32 @@ def model_lora_keys_unet(model, key_map={}): to = diffusers_keys[k] key_map["transformer.{}".format(k[:-len(".weight")])] = to #simpletrainer and probably regular diffusers flux lora format key_map["lycoris_{}".format(k[:-len(".weight")].replace(".", "_"))] = to #simpletrainer lycoris + key_map["lora_transformer_{}".format(k[:-len(".weight")].replace(".", "_"))] = to #onetrainer + + if isinstance(model, comfy.model_base.GenmoMochi): + for k in sdk: + if k.startswith("diffusion_model.") and k.endswith(".weight"): #Official Mochi lora format + key_lora = k[len("diffusion_model."):-len(".weight")] + key_map["{}".format(key_lora)] = k + + if isinstance(model, comfy.model_base.HunyuanVideo): + for k in sdk: + if k.startswith("diffusion_model.") and k.endswith(".weight"): + # diffusion-pipe lora format + key_lora = k + key_lora = key_lora.replace("_mod.lin.", "_mod.linear.").replace("_attn.qkv.", "_attn_qkv.").replace("_attn.proj.", "_attn_proj.") + key_lora = key_lora.replace("mlp.0.", "mlp.fc1.").replace("mlp.2.", "mlp.fc2.") + key_lora = key_lora.replace(".modulation.lin.", ".modulation.linear.") + key_lora = key_lora[len("diffusion_model."):-len(".weight")] + key_map["transformer.{}".format(key_lora)] = k return key_map -def weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype): +def weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype, function): dora_scale = comfy.model_management.cast_to_device(dora_scale, weight.device, intermediate_dtype) lora_diff *= alpha - weight_calc = weight + lora_diff.type(weight.dtype) + weight_calc = weight + function(lora_diff).type(weight.dtype) weight_norm = ( weight_calc.transpose(0, 1) .reshape(weight_calc.shape[1], -1) @@ -381,7 +441,7 @@ def pad_tensor_to_shape(tensor: torch.Tensor, new_shape: list[int]) -> torch.Ten return padded_tensor -def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): +def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32, original_weights=None): for p in patches: strength = p[0] v = p[1] @@ -400,7 +460,7 @@ def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): weight *= strength_model if isinstance(v, list): - v = (calculate_weight(v[1:], v[0].clone(), key, intermediate_dtype=intermediate_dtype), ) + v = (calculate_weight(v[1:], v[0][1](comfy.model_management.cast_to_device(v[0][0], weight.device, intermediate_dtype, copy=True), inplace=True), key, intermediate_dtype=intermediate_dtype), ) if len(v) == 1: patch_type = "diff" @@ -421,10 +481,22 @@ def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): logging.warning("WARNING SHAPE MISMATCH {} WEIGHT NOT MERGED {} != {}".format(key, diff.shape, weight.shape)) else: weight += function(strength * comfy.model_management.cast_to_device(diff, weight.device, weight.dtype)) + elif patch_type == "set": + weight.copy_(v[0]) + elif patch_type == "model_as_lora": + target_weight: torch.Tensor = v[0] + diff_weight = comfy.model_management.cast_to_device(target_weight, weight.device, intermediate_dtype) - \ + comfy.model_management.cast_to_device(original_weights[key][0][0], weight.device, intermediate_dtype) + weight += function(strength * comfy.model_management.cast_to_device(diff_weight, weight.device, weight.dtype)) elif patch_type == "lora": #lora/locon mat1 = comfy.model_management.cast_to_device(v[0], weight.device, intermediate_dtype) mat2 = comfy.model_management.cast_to_device(v[1], weight.device, intermediate_dtype) dora_scale = v[4] + reshape = v[5] + + if reshape is not None: + weight = pad_tensor_to_shape(weight, reshape) + if v[2] is not None: alpha = v[2] / mat2.shape[0] else: @@ -438,7 +510,7 @@ def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): try: lora_diff = torch.mm(mat1.flatten(start_dim=1), mat2.flatten(start_dim=1)).reshape(weight.shape) if dora_scale is not None: - weight = function(weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype)) + weight = weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype, function) else: weight += function(((strength * alpha) * lora_diff).type(weight.dtype)) except Exception as e: @@ -484,7 +556,7 @@ def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): try: lora_diff = torch.kron(w1, w2).reshape(weight.shape) if dora_scale is not None: - weight = function(weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype)) + weight = weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype, function) else: weight += function(((strength * alpha) * lora_diff).type(weight.dtype)) except Exception as e: @@ -521,28 +593,48 @@ def calculate_weight(patches, weight, key, intermediate_dtype=torch.float32): try: lora_diff = (m1 * m2).reshape(weight.shape) if dora_scale is not None: - weight = function(weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype)) + weight = weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype, function) else: weight += function(((strength * alpha) * lora_diff).type(weight.dtype)) except Exception as e: logging.error("ERROR {} {} {}".format(patch_type, key, e)) elif patch_type == "glora": - if v[4] is not None: - alpha = v[4] / v[0].shape[0] - else: - alpha = 1.0 - dora_scale = v[5] + old_glora = False + if v[3].shape[1] == v[2].shape[0] == v[0].shape[0] == v[1].shape[1]: + rank = v[0].shape[0] + old_glora = True + + if v[3].shape[0] == v[2].shape[1] == v[0].shape[1] == v[1].shape[0]: + if old_glora and v[1].shape[0] == weight.shape[0] and weight.shape[0] == weight.shape[1]: + pass + else: + old_glora = False + rank = v[1].shape[0] + a1 = comfy.model_management.cast_to_device(v[0].flatten(start_dim=1), weight.device, intermediate_dtype) a2 = comfy.model_management.cast_to_device(v[1].flatten(start_dim=1), weight.device, intermediate_dtype) b1 = comfy.model_management.cast_to_device(v[2].flatten(start_dim=1), weight.device, intermediate_dtype) b2 = comfy.model_management.cast_to_device(v[3].flatten(start_dim=1), weight.device, intermediate_dtype) + if v[4] is not None: + alpha = v[4] / rank + else: + alpha = 1.0 + try: - lora_diff = (torch.mm(b2, b1) + torch.mm(torch.mm(weight.flatten(start_dim=1).to(dtype=intermediate_dtype), a2), a1)).reshape(weight.shape) + if old_glora: + lora_diff = (torch.mm(b2, b1) + torch.mm(torch.mm(weight.flatten(start_dim=1).to(dtype=intermediate_dtype), a2), a1)).reshape(weight.shape) #old lycoris glora + else: + if weight.dim() > 2: + lora_diff = torch.einsum("o i ..., i j -> o j ...", torch.einsum("o i ..., i j -> o j ...", weight.to(dtype=intermediate_dtype), a1), a2).reshape(weight.shape) + else: + lora_diff = torch.mm(torch.mm(weight.to(dtype=intermediate_dtype), a1), a2).reshape(weight.shape) + lora_diff += torch.mm(b1, b2).reshape(weight.shape) + if dora_scale is not None: - weight = function(weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype)) + weight = weight_decompose(dora_scale, weight, lora_diff, alpha, strength, intermediate_dtype, function) else: weight += function(((strength * alpha) * lora_diff).type(weight.dtype)) except Exception as e: diff --git a/comfy/lora_convert.py b/comfy/lora_convert.py new file mode 100644 index 000000000..05032c690 --- /dev/null +++ b/comfy/lora_convert.py @@ -0,0 +1,17 @@ +import torch + + +def convert_lora_bfl_control(sd): #BFL loras for Flux + sd_out = {} + for k in sd: + k_to = "diffusion_model.{}".format(k.replace(".lora_B.bias", ".diff_b").replace("_norm.scale", "_norm.scale.set_weight")) + sd_out[k_to] = sd[k] + + sd_out["diffusion_model.img_in.reshape_weight"] = torch.tensor([sd["img_in.lora_B.weight"].shape[0], sd["img_in.lora_A.weight"].shape[1]]) + return sd_out + + +def convert_lora(sd): + if "img_in.lora_A.weight" in sd and "single_blocks.0.norm.key_norm.scale" in sd: + return convert_lora_bfl_control(sd) + return sd diff --git a/comfy/model_base.py b/comfy/model_base.py index 9bfdb3b3e..18c6f2244 100644 --- a/comfy/model_base.py +++ b/comfy/model_base.py @@ -24,19 +24,26 @@ from comfy.ldm.cascade.stage_b import StageB from comfy.ldm.modules.encoders.noise_aug_modules import CLIPEmbeddingNoiseAugmentation from comfy.ldm.modules.diffusionmodules.upscaling import ImageConcatWithNoiseAugmentation from comfy.ldm.modules.diffusionmodules.mmdit import OpenAISignatureMMDITWrapper +import comfy.ldm.genmo.joint_model.asymm_models_joint import comfy.ldm.aura.mmdit import comfy.ldm.hydit.models import comfy.ldm.audio.dit import comfy.ldm.audio.embedders import comfy.ldm.flux.model +import comfy.ldm.lightricks.model +import comfy.ldm.hunyuan_video.model import comfy.model_management +import comfy.patcher_extension import comfy.conds import comfy.ops from enum import Enum from . import utils import comfy.latent_formats import math +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from comfy.model_patcher import ModelPatcher class ModelType(Enum): EPS = 1 @@ -93,10 +100,12 @@ class BaseModel(torch.nn.Module): self.model_config = model_config self.manual_cast_dtype = model_config.manual_cast_dtype self.device = device + self.current_patcher: 'ModelPatcher' = None if not unet_config.get("disable_unet_model_creation", False): if model_config.custom_operations is None: - operations = comfy.ops.pick_operations(unet_config.get("dtype", None), self.manual_cast_dtype) + fp8 = model_config.optimizations.get("fp8", model_config.scaled_fp8 is not None) + operations = comfy.ops.pick_operations(unet_config.get("dtype", None), self.manual_cast_dtype, fp8_optimizations=fp8, scaled_fp8=model_config.scaled_fp8) else: operations = model_config.custom_operations self.diffusion_model = unet_model(**unet_config, device=device, operations=operations) @@ -117,6 +126,13 @@ class BaseModel(torch.nn.Module): self.memory_usage_factor = model_config.memory_usage_factor def apply_model(self, x, t, c_concat=None, c_crossattn=None, control=None, transformer_options={}, **kwargs): + return comfy.patcher_extension.WrapperExecutor.new_class_executor( + self._apply_model, + self, + comfy.patcher_extension.get_all_wrappers(comfy.patcher_extension.WrappersMP.APPLY_MODEL, transformer_options) + ).execute(x, t, c_concat, c_crossattn, control, transformer_options, **kwargs) + + def _apply_model(self, x, t, c_concat=None, c_crossattn=None, control=None, transformer_options={}, **kwargs): sigma = t xc = self.model_sampling.calculate_input(sigma, x) if c_concat is not None: @@ -151,8 +167,7 @@ class BaseModel(torch.nn.Module): def encode_adm(self, **kwargs): return None - def extra_conds(self, **kwargs): - out = {} + def concat_cond(self, **kwargs): if len(self.concat_keys) > 0: cond_concat = [] denoise_mask = kwargs.get("concat_mask", kwargs.get("denoise_mask", None)) @@ -191,7 +206,14 @@ class BaseModel(torch.nn.Module): elif ck == "masked_image": cond_concat.append(self.blank_inpaint_image_like(noise)) data = torch.cat(cond_concat, dim=1) - out['c_concat'] = comfy.conds.CONDNoiseShape(data) + return data + return None + + def extra_conds(self, **kwargs): + out = {} + concat_cond = self.concat_cond(**kwargs) + if concat_cond is not None: + out['c_concat'] = comfy.conds.CONDNoiseShape(concat_cond) adm = self.encode_adm(**kwargs) if adm is not None: @@ -244,6 +266,10 @@ class BaseModel(torch.nn.Module): extra_sds.append(self.model_config.process_clip_vision_state_dict_for_saving(clip_vision_state_dict)) unet_state_dict = self.diffusion_model.state_dict() + + if self.model_config.scaled_fp8 is not None: + unet_state_dict["scaled_fp8"] = torch.tensor([], dtype=self.model_config.scaled_fp8) + unet_state_dict = self.model_config.process_unet_state_dict_for_saving(unet_state_dict) if self.model_type == ModelType.V_PREDICTION: @@ -402,7 +428,6 @@ class SVD_img2vid(BaseModel): latent_image = kwargs.get("concat_latent_image", None) noise = kwargs.get("noise", None) - device = kwargs["device"] if latent_image is None: latent_image = torch.zeros_like(noise) @@ -517,9 +542,7 @@ class SD_X4Upscaler(BaseModel): return out class IP2P: - def extra_conds(self, **kwargs): - out = {} - + def concat_cond(self, **kwargs): image = kwargs.get("concat_latent_image", None) noise = kwargs.get("noise", None) device = kwargs["device"] @@ -531,18 +554,15 @@ class IP2P: image = utils.common_upscale(image.to(device), noise.shape[-1], noise.shape[-2], "bilinear", "center") image = utils.resize_to_batch_size(image, noise.shape[0]) + return self.process_ip2p_image_in(image) - out['c_concat'] = comfy.conds.CONDNoiseShape(self.process_ip2p_image_in(image)) - adm = self.encode_adm(**kwargs) - if adm is not None: - out['y'] = comfy.conds.CONDRegular(adm) - return out class SD15_instructpix2pix(IP2P, BaseModel): def __init__(self, model_config, model_type=ModelType.EPS, device=None): super().__init__(model_config, model_type, device=device) self.process_ip2p_image_in = lambda image: image + class SDXL_instructpix2pix(IP2P, SDXL): def __init__(self, model_config, model_type=ModelType.EPS, device=None): super().__init__(model_config, model_type, device=device) @@ -667,6 +687,7 @@ class StableAudio1(BaseModel): sd["{}{}".format(k, l)] = s[l] return sd + class HunyuanDiT(BaseModel): def __init__(self, model_config, model_type=ModelType.V_PREDICTION, device=None): super().__init__(model_config, model_type, device=device, unet_model=comfy.ldm.hydit.models.HunYuanDiT) @@ -691,8 +712,6 @@ class HunyuanDiT(BaseModel): width = kwargs.get("width", 768) height = kwargs.get("height", 768) - crop_w = kwargs.get("crop_w", 0) - crop_h = kwargs.get("crop_h", 0) target_width = kwargs.get("target_width", width) target_height = kwargs.get("target_height", height) @@ -703,6 +722,44 @@ class Flux(BaseModel): def __init__(self, model_config, model_type=ModelType.FLUX, device=None): super().__init__(model_config, model_type, device=device, unet_model=comfy.ldm.flux.model.Flux) + def concat_cond(self, **kwargs): + try: + #Handle Flux control loras dynamically changing the img_in weight. + num_channels = self.diffusion_model.img_in.weight.shape[1] // (self.diffusion_model.patch_size * self.diffusion_model.patch_size) + except: + #Some cases like tensorrt might not have the weights accessible + num_channels = self.model_config.unet_config["in_channels"] + + out_channels = self.model_config.unet_config["out_channels"] + + if num_channels <= out_channels: + return None + + image = kwargs.get("concat_latent_image", None) + noise = kwargs.get("noise", None) + device = kwargs["device"] + + if image is None: + image = torch.zeros_like(noise) + + image = utils.common_upscale(image.to(device), noise.shape[-1], noise.shape[-2], "bilinear", "center") + image = utils.resize_to_batch_size(image, noise.shape[0]) + image = self.process_latent_in(image) + if num_channels <= out_channels * 2: + return image + + #inpaint model + mask = kwargs.get("concat_mask", kwargs.get("denoise_mask", None)) + if mask is None: + mask = torch.ones_like(noise)[:, :1] + + mask = torch.mean(mask, dim=1, keepdim=True) + print(mask.shape) + mask = utils.common_upscale(mask.to(device), noise.shape[-1] * 8, noise.shape[-2] * 8, "bilinear", "center") + mask = mask.view(mask.shape[0], mask.shape[2] // 8, 8, mask.shape[3] // 8, 8).permute(0, 2, 4, 1, 3).reshape(mask.shape[0], -1, mask.shape[2] // 8, mask.shape[3] // 8) + mask = utils.resize_to_batch_size(mask, noise.shape[0]) + return torch.cat((image, mask), dim=1) + def encode_adm(self, **kwargs): return kwargs["pooled_output"] @@ -711,5 +768,72 @@ class Flux(BaseModel): cross_attn = kwargs.get("cross_attn", None) if cross_attn is not None: out['c_crossattn'] = comfy.conds.CONDRegular(cross_attn) + # upscale the attention mask, since now we + attention_mask = kwargs.get("attention_mask", None) + if attention_mask is not None: + shape = kwargs["noise"].shape + mask_ref_size = kwargs["attention_mask_img_shape"] + # the model will pad to the patch size, and then divide + # essentially dividing and rounding up + (h_tok, w_tok) = (math.ceil(shape[2] / self.diffusion_model.patch_size), math.ceil(shape[3] / self.diffusion_model.patch_size)) + attention_mask = utils.upscale_dit_mask(attention_mask, mask_ref_size, (h_tok, w_tok)) + out['attention_mask'] = comfy.conds.CONDRegular(attention_mask) out['guidance'] = comfy.conds.CONDRegular(torch.FloatTensor([kwargs.get("guidance", 3.5)])) return out + +class GenmoMochi(BaseModel): + def __init__(self, model_config, model_type=ModelType.FLOW, device=None): + super().__init__(model_config, model_type, device=device, unet_model=comfy.ldm.genmo.joint_model.asymm_models_joint.AsymmDiTJoint) + + def extra_conds(self, **kwargs): + out = super().extra_conds(**kwargs) + attention_mask = kwargs.get("attention_mask", None) + if attention_mask is not None: + out['attention_mask'] = comfy.conds.CONDRegular(attention_mask) + out['num_tokens'] = comfy.conds.CONDConstant(max(1, torch.sum(attention_mask).item())) + cross_attn = kwargs.get("cross_attn", None) + if cross_attn is not None: + out['c_crossattn'] = comfy.conds.CONDRegular(cross_attn) + return out + +class LTXV(BaseModel): + def __init__(self, model_config, model_type=ModelType.FLUX, device=None): + super().__init__(model_config, model_type, device=device, unet_model=comfy.ldm.lightricks.model.LTXVModel) #TODO + + def extra_conds(self, **kwargs): + out = super().extra_conds(**kwargs) + attention_mask = kwargs.get("attention_mask", None) + if attention_mask is not None: + out['attention_mask'] = comfy.conds.CONDRegular(attention_mask) + cross_attn = kwargs.get("cross_attn", None) + if cross_attn is not None: + out['c_crossattn'] = comfy.conds.CONDRegular(cross_attn) + + guiding_latent = kwargs.get("guiding_latent", None) + if guiding_latent is not None: + out['guiding_latent'] = comfy.conds.CONDRegular(guiding_latent) + + guiding_latent_noise_scale = kwargs.get("guiding_latent_noise_scale", None) + if guiding_latent_noise_scale is not None: + out["guiding_latent_noise_scale"] = comfy.conds.CONDConstant(guiding_latent_noise_scale) + + out['frame_rate'] = comfy.conds.CONDConstant(kwargs.get("frame_rate", 25)) + return out + +class HunyuanVideo(BaseModel): + def __init__(self, model_config, model_type=ModelType.FLOW, device=None): + super().__init__(model_config, model_type, device=device, unet_model=comfy.ldm.hunyuan_video.model.HunyuanVideo) + + def encode_adm(self, **kwargs): + return kwargs["pooled_output"] + + def extra_conds(self, **kwargs): + out = super().extra_conds(**kwargs) + attention_mask = kwargs.get("attention_mask", None) + if attention_mask is not None: + out['attention_mask'] = comfy.conds.CONDRegular(attention_mask) + cross_attn = kwargs.get("cross_attn", None) + if cross_attn is not None: + out['c_crossattn'] = comfy.conds.CONDRegular(cross_attn) + out['guidance'] = comfy.conds.CONDRegular(torch.FloatTensor([kwargs.get("guidance", 6.0)])) + return out diff --git a/comfy/model_detection.py b/comfy/model_detection.py index 1edbcda4d..d6b59fd7d 100644 --- a/comfy/model_detection.py +++ b/comfy/model_detection.py @@ -70,6 +70,11 @@ def detect_unet_config(state_dict, key_prefix): context_processor = '{}context_processor.layers.0.attn.qkv.weight'.format(key_prefix) if context_processor in state_dict_keys: unet_config["context_processor_layers"] = count_blocks(state_dict_keys, '{}context_processor.layers.'.format(key_prefix) + '{}.') + unet_config["x_block_self_attn_layers"] = [] + for key in state_dict_keys: + if key.startswith('{}joint_blocks.'.format(key_prefix)) and key.endswith('.x_block.attn2.qkv.weight'): + layer = key[len('{}joint_blocks.'.format(key_prefix)):-len('.x_block.attn2.qkv.weight')] + unet_config["x_block_self_attn_layers"].append(int(layer)) return unet_config if '{}clf.1.weight'.format(key_prefix) in state_dict_keys: #stable cascade @@ -128,10 +133,36 @@ def detect_unet_config(state_dict, key_prefix): unet_config["image_model"] = "hydit1" return unet_config + if '{}txt_in.individual_token_refiner.blocks.0.norm1.weight'.format(key_prefix) in state_dict_keys: #Hunyuan Video + dit_config = {} + dit_config["image_model"] = "hunyuan_video" + dit_config["in_channels"] = 16 + dit_config["patch_size"] = [1, 2, 2] + dit_config["out_channels"] = 16 + dit_config["vec_in_dim"] = 768 + dit_config["context_in_dim"] = 4096 + dit_config["hidden_size"] = 3072 + dit_config["mlp_ratio"] = 4.0 + dit_config["num_heads"] = 24 + dit_config["depth"] = count_blocks(state_dict_keys, '{}double_blocks.'.format(key_prefix) + '{}.') + dit_config["depth_single_blocks"] = count_blocks(state_dict_keys, '{}single_blocks.'.format(key_prefix) + '{}.') + dit_config["axes_dim"] = [16, 56, 56] + dit_config["theta"] = 256 + dit_config["qkv_bias"] = True + guidance_keys = list(filter(lambda a: a.startswith("{}guidance_in.".format(key_prefix)), state_dict_keys)) + dit_config["guidance_embed"] = len(guidance_keys) > 0 + return dit_config + if '{}double_blocks.0.img_attn.norm.key_norm.scale'.format(key_prefix) in state_dict_keys: #Flux dit_config = {} dit_config["image_model"] = "flux" dit_config["in_channels"] = 16 + patch_size = 2 + dit_config["patch_size"] = patch_size + in_key = "{}img_in.weight".format(key_prefix) + if in_key in state_dict_keys: + dit_config["in_channels"] = state_dict[in_key].shape[1] // (patch_size * patch_size) + dit_config["out_channels"] = 16 dit_config["vec_in_dim"] = 768 dit_config["context_in_dim"] = 4096 dit_config["hidden_size"] = 3072 @@ -145,6 +176,38 @@ def detect_unet_config(state_dict, key_prefix): dit_config["guidance_embed"] = "{}guidance_in.in_layer.weight".format(key_prefix) in state_dict_keys return dit_config + if '{}t5_yproj.weight'.format(key_prefix) in state_dict_keys: #Genmo mochi preview + dit_config = {} + dit_config["image_model"] = "mochi_preview" + dit_config["depth"] = 48 + dit_config["patch_size"] = 2 + dit_config["num_heads"] = 24 + dit_config["hidden_size_x"] = 3072 + dit_config["hidden_size_y"] = 1536 + dit_config["mlp_ratio_x"] = 4.0 + dit_config["mlp_ratio_y"] = 4.0 + dit_config["learn_sigma"] = False + dit_config["in_channels"] = 12 + dit_config["qk_norm"] = True + dit_config["qkv_bias"] = False + dit_config["out_bias"] = True + dit_config["attn_drop"] = 0.0 + dit_config["patch_embed_bias"] = True + dit_config["posenc_preserve_area"] = True + dit_config["timestep_mlp_bias"] = True + dit_config["attend_to_padding"] = False + dit_config["timestep_scale"] = 1000.0 + dit_config["use_t5"] = True + dit_config["t5_feat_dim"] = 4096 + dit_config["t5_token_length"] = 256 + dit_config["rope_theta"] = 10000.0 + return dit_config + + if '{}adaln_single.emb.timestep_embedder.linear_1.bias'.format(key_prefix) in state_dict_keys: #Lightricks ltxv + dit_config = {} + dit_config["image_model"] = "ltxv" + return dit_config + if '{}input_blocks.0.0.weight'.format(key_prefix) not in state_dict_keys: return None @@ -173,7 +236,6 @@ def detect_unet_config(state_dict, key_prefix): num_res_blocks = [] channel_mult = [] - attention_resolutions = [] transformer_depth = [] transformer_depth_output = [] context_dim = None @@ -286,9 +348,16 @@ def model_config_from_unet(state_dict, unet_key_prefix, use_base_if_no_match=Fal return None model_config = model_config_from_unet_config(unet_config, state_dict) if model_config is None and use_base_if_no_match: - return comfy.supported_models_base.BASE(unet_config) - else: - return model_config + model_config = comfy.supported_models_base.BASE(unet_config) + + scaled_fp8_key = "{}scaled_fp8".format(unet_key_prefix) + if scaled_fp8_key in state_dict: + scaled_fp8_weight = state_dict.pop(scaled_fp8_key) + model_config.scaled_fp8 = scaled_fp8_weight.dtype + if model_config.scaled_fp8 == torch.float32: + model_config.scaled_fp8 = torch.float8_e4m3fn + + return model_config def unet_prefix_from_state_dict(state_dict): candidates = ["model.diffusion_model.", #ldm/sgm models @@ -338,7 +407,6 @@ def convert_config(unet_config): t_out += [d] * (res + 1) s *= 2 transformer_depth = t_in - transformer_depth_output = t_out new_config["transformer_depth"] = t_in new_config["transformer_depth_output"] = t_out new_config["transformer_depth_middle"] = transformer_depth_middle @@ -501,7 +569,11 @@ def model_config_from_diffusers_unet(state_dict): def convert_diffusers_mmdit(state_dict, output_prefix=""): out_sd = {} - if 'transformer_blocks.0.attn.norm_added_k.weight' in state_dict: #Flux + if 'joint_transformer_blocks.0.attn.add_k_proj.weight' in state_dict: #AuraFlow + num_joint = count_blocks(state_dict, 'joint_transformer_blocks.{}.') + num_single = count_blocks(state_dict, 'single_transformer_blocks.{}.') + sd_map = comfy.utils.auraflow_to_diffusers({"n_double_layers": num_joint, "n_layers": num_joint + num_single}, output_prefix=output_prefix) + elif 'x_embedder.weight' in state_dict: #Flux depth = count_blocks(state_dict, 'transformer_blocks.{}.') depth_single_blocks = count_blocks(state_dict, 'single_transformer_blocks.{}.') hidden_size = state_dict["x_embedder.bias"].shape[0] @@ -510,10 +582,6 @@ def convert_diffusers_mmdit(state_dict, output_prefix=""): num_blocks = count_blocks(state_dict, 'transformer_blocks.{}.') depth = state_dict["pos_embed.proj.weight"].shape[0] // 64 sd_map = comfy.utils.mmdit_to_diffusers({"depth": depth, "num_blocks": num_blocks}, output_prefix=output_prefix) - elif 'joint_transformer_blocks.0.attn.add_k_proj.weight' in state_dict: #AuraFlow - num_joint = count_blocks(state_dict, 'joint_transformer_blocks.{}.') - num_single = count_blocks(state_dict, 'single_transformer_blocks.{}.') - sd_map = comfy.utils.auraflow_to_diffusers({"n_double_layers": num_joint, "n_layers": num_joint + num_single}, output_prefix=output_prefix) else: return None diff --git a/comfy/model_management.py b/comfy/model_management.py index 4147989e0..177c7998b 100644 --- a/comfy/model_management.py +++ b/comfy/model_management.py @@ -23,6 +23,8 @@ from comfy.cli_args import args import torch import sys import platform +import weakref +import gc class VRAMState(Enum): DISABLED = 0 #No vram present: no need to move models to vram @@ -45,6 +47,7 @@ cpu_state = CPUState.GPU total_vram = 0 xpu_available = False +torch_version = "" try: torch_version = torch.version.__version__ xpu_available = (int(torch_version[0]) < 2 or (int(torch_version[0]) == 2 and int(torch_version[2]) <= 4)) and torch.xpu.is_available() @@ -144,7 +147,7 @@ total_ram = psutil.virtual_memory().total / (1024 * 1024) logging.info("Total VRAM {:0.0f} MB, total RAM {:0.0f} MB".format(total_vram, total_ram)) try: - logging.info("pytorch version: {}".format(torch.version.__version__)) + logging.info("pytorch version: {}".format(torch_version)) except: pass @@ -286,11 +289,27 @@ def module_size(module): class LoadedModel: def __init__(self, model): - self.model = model + self._set_model(model) self.device = model.load_device - self.weights_loaded = False self.real_model = None self.currently_used = True + self.model_finalizer = None + self._patcher_finalizer = None + + def _set_model(self, model): + self._model = weakref.ref(model) + if model.parent is not None: + self._parent_model = weakref.ref(model.parent) + self._patcher_finalizer = weakref.finalize(model, self._switch_parent) + + def _switch_parent(self): + model = self._parent_model() + if model is not None: + self._set_model(model) + + @property + def model(self): + return self._model() def model_memory(self): return self.model.model_size() @@ -305,32 +324,23 @@ class LoadedModel: return self.model_memory() def model_load(self, lowvram_model_memory=0, force_patch_weights=False): - patch_model_to = self.device - self.model.model_patches_to(self.device) self.model.model_patches_to(self.model.model_dtype()) - load_weights = not self.weights_loaded + # if self.model.loaded_size() > 0: + use_more_vram = lowvram_model_memory + if use_more_vram == 0: + use_more_vram = 1e32 + self.model_use_more_vram(use_more_vram, force_patch_weights=force_patch_weights) + real_model = self.model.model - if self.model.loaded_size() > 0: - use_more_vram = lowvram_model_memory - if use_more_vram == 0: - use_more_vram = 1e32 - self.model_use_more_vram(use_more_vram) - else: - try: - self.real_model = self.model.patch_model(device_to=patch_model_to, lowvram_model_memory=lowvram_model_memory, load_weights=load_weights, force_patch_weights=force_patch_weights) - except Exception as e: - self.model.unpatch_model(self.model.offload_device) - self.model_unload() - raise e - - if is_intel_xpu() and not args.disable_ipex_optimize and self.real_model is not None: + if is_intel_xpu() and not args.disable_ipex_optimize and 'ipex' in globals() and real_model is not None: with torch.no_grad(): - self.real_model = ipex.optimize(self.real_model.eval(), inplace=True, graph_mode=True, concat_linear=True) + real_model = ipex.optimize(real_model.eval(), inplace=True, graph_mode=True, concat_linear=True) - self.weights_loaded = True - return self.real_model + self.real_model = weakref.ref(real_model) + self.model_finalizer = weakref.finalize(real_model, cleanup_models) + return real_model def should_reload_model(self, force_patch_weights=False): if force_patch_weights and self.model.lowvram_patch_counter() > 0: @@ -343,18 +353,26 @@ class LoadedModel: freed = self.model.partially_unload(self.model.offload_device, memory_to_free) if freed >= memory_to_free: return False - self.model.unpatch_model(self.model.offload_device, unpatch_weights=unpatch_weights) - self.model.model_patches_to(self.model.offload_device) - self.weights_loaded = self.weights_loaded and not unpatch_weights + self.model.detach(unpatch_weights) + self.model_finalizer.detach() + self.model_finalizer = None self.real_model = None return True - def model_use_more_vram(self, extra_memory): - return self.model.partially_load(self.device, extra_memory) + def model_use_more_vram(self, extra_memory, force_patch_weights=False): + return self.model.partially_load(self.device, extra_memory, force_patch_weights=force_patch_weights) def __eq__(self, other): return self.model is other.model + def __del__(self): + if self._patcher_finalizer is not None: + self._patcher_finalizer.detach() + + def is_dead(self): + return self.real_model() is not None and self.model is None + + def use_more_memory(extra_memory, loaded_models, device): for m in loaded_models: if m.device == device: @@ -369,12 +387,11 @@ def offloaded_memory(loaded_models, device): offloaded_mem += m.model_offloaded_memory() return offloaded_mem -def minimum_inference_memory(): - return (1024 * 1024 * 1024) * 1.2 +WINDOWS = any(platform.win32_ver()) -EXTRA_RESERVED_VRAM = 200 * 1024 * 1024 -if any(platform.win32_ver()): - EXTRA_RESERVED_VRAM = 500 * 1024 * 1024 #Windows is higher because of the shared vram issue +EXTRA_RESERVED_VRAM = 400 * 1024 * 1024 +if WINDOWS: + EXTRA_RESERVED_VRAM = 600 * 1024 * 1024 #Windows is higher because of the shared vram issue if args.reserve_vram is not None: EXTRA_RESERVED_VRAM = args.reserve_vram * 1024 * 1024 * 1024 @@ -383,38 +400,11 @@ if args.reserve_vram is not None: def extra_reserved_memory(): return EXTRA_RESERVED_VRAM -def unload_model_clones(model, unload_weights_only=True, force_unload=True): - to_unload = [] - for i in range(len(current_loaded_models)): - if model.is_clone(current_loaded_models[i].model): - to_unload = [i] + to_unload - - if len(to_unload) == 0: - return True - - same_weights = 0 - for i in to_unload: - if model.clone_has_same_weights(current_loaded_models[i].model): - same_weights += 1 - - if same_weights == len(to_unload): - unload_weight = False - else: - unload_weight = True - - if not force_unload: - if unload_weights_only and unload_weight == False: - return None - else: - unload_weight = True - - for i in to_unload: - logging.debug("unload clone {} {}".format(i, unload_weight)) - current_loaded_models.pop(i).model_unload(unpatch_weights=unload_weight) - - return unload_weight +def minimum_inference_memory(): + return (1024 * 1024 * 1024) * 0.8 + extra_reserved_memory() def free_memory(memory_required, device, keep_loaded=[]): + cleanup_models_gc() unloaded_model = [] can_unload = [] unloaded_models = [] @@ -422,8 +412,8 @@ def free_memory(memory_required, device, keep_loaded=[]): for i in range(len(current_loaded_models) -1, -1, -1): shift_model = current_loaded_models[i] if shift_model.device == device: - if shift_model not in keep_loaded: - can_unload.append((sys.getrefcount(shift_model.model), shift_model.model_memory(), i)) + if shift_model not in keep_loaded and not shift_model.is_dead(): + can_unload.append((-shift_model.model_offloaded_memory(), sys.getrefcount(shift_model.model), shift_model.model_memory(), i)) shift_model.currently_used = False for x in sorted(can_unload): @@ -451,6 +441,7 @@ def free_memory(memory_required, device, keep_loaded=[]): return unloaded_models def load_models_gpu(models, memory_required=0, force_patch_weights=False, minimum_memory_required=None, force_full_load=False): + cleanup_models_gc() global vram_state inference_memory = minimum_inference_memory() @@ -463,11 +454,9 @@ def load_models_gpu(models, memory_required=0, force_patch_weights=False, minimu models = set(models) models_to_load = [] - models_already_loaded = [] + for x in models: loaded_model = LoadedModel(x) - loaded = None - try: loaded_model_index = current_loaded_models.index(loaded_model) except: @@ -475,51 +464,35 @@ def load_models_gpu(models, memory_required=0, force_patch_weights=False, minimu if loaded_model_index is not None: loaded = current_loaded_models[loaded_model_index] - if loaded.should_reload_model(force_patch_weights=force_patch_weights): #TODO: cleanup this model reload logic - current_loaded_models.pop(loaded_model_index).model_unload(unpatch_weights=True) - loaded = None - else: - loaded.currently_used = True - models_already_loaded.append(loaded) - - if loaded is None: + loaded.currently_used = True + models_to_load.append(loaded) + else: if hasattr(x, "model"): logging.info(f"Requested to load {x.model.__class__.__name__}") models_to_load.append(loaded_model) - if len(models_to_load) == 0: - devs = set(map(lambda a: a.device, models_already_loaded)) - for d in devs: - if d != torch.device("cpu"): - free_memory(extra_mem + offloaded_memory(models_already_loaded, d), d, models_already_loaded) - free_mem = get_free_memory(d) - if free_mem < minimum_memory_required: - logging.info("Unloading models for lowram load.") #TODO: partial model unloading when this case happens, also handle the opposite case where models can be unlowvramed. - models_to_load = free_memory(minimum_memory_required, d) - logging.info("{} models unloaded.".format(len(models_to_load))) - else: - use_more_memory(free_mem - minimum_memory_required, models_already_loaded, d) - if len(models_to_load) == 0: - return - - logging.info(f"Loading {len(models_to_load)} new model{'s' if len(models_to_load) > 1 else ''}") + for loaded_model in models_to_load: + to_unload = [] + for i in range(len(current_loaded_models)): + if loaded_model.model.is_clone(current_loaded_models[i].model): + to_unload = [i] + to_unload + for i in to_unload: + current_loaded_models.pop(i).model.detach(unpatch_all=False) total_memory_required = {} for loaded_model in models_to_load: - unload_model_clones(loaded_model.model, unload_weights_only=True, force_unload=False) #unload clones where the weights are different total_memory_required[loaded_model.device] = total_memory_required.get(loaded_model.device, 0) + loaded_model.model_memory_required(loaded_model.device) - for loaded_model in models_already_loaded: - total_memory_required[loaded_model.device] = total_memory_required.get(loaded_model.device, 0) + loaded_model.model_memory_required(loaded_model.device) - - for loaded_model in models_to_load: - weights_unloaded = unload_model_clones(loaded_model.model, unload_weights_only=False, force_unload=False) #unload the rest of the clones where the weights can stay loaded - if weights_unloaded is not None: - loaded_model.weights_loaded = not weights_unloaded - for device in total_memory_required: if device != torch.device("cpu"): - free_memory(total_memory_required[device] * 1.1 + extra_mem, device, models_already_loaded) + free_memory(total_memory_required[device] * 1.1 + extra_mem, device) + + for device in total_memory_required: + if device != torch.device("cpu"): + free_mem = get_free_memory(device) + if free_mem < minimum_memory_required: + models_l = free_memory(minimum_memory_required, device) + logging.info("{} models unloaded.".format(len(models_l))) for loaded_model in models_to_load: model = loaded_model.model @@ -539,19 +512,10 @@ def load_models_gpu(models, memory_required=0, force_patch_weights=False, minimu if vram_set_state == VRAMState.NO_VRAM: lowvram_model_memory = 64 * 1024 * 1024 - cur_loaded_model = loaded_model.model_load(lowvram_model_memory, force_patch_weights=force_patch_weights) + loaded_model.model_load(lowvram_model_memory, force_patch_weights=force_patch_weights) current_loaded_models.insert(0, loaded_model) - - - devs = set(map(lambda a: a.device, models_already_loaded)) - for d in devs: - if d != torch.device("cpu"): - free_mem = get_free_memory(d) - if free_mem > minimum_memory_required: - use_more_memory(free_mem - minimum_memory_required, models_already_loaded, d) return - def load_model_gpu(model): return load_models_gpu([model]) @@ -565,21 +529,35 @@ def loaded_models(only_currently_used=False): output.append(m.model) return output -def cleanup_models(keep_clone_weights_loaded=False): + +def cleanup_models_gc(): + do_gc = False + for i in range(len(current_loaded_models)): + cur = current_loaded_models[i] + if cur.is_dead(): + logging.info("Potential memory leak detected with model {}, doing a full garbage collect, for maximum performance avoid circular references in the model code.".format(cur.real_model().__class__.__name__)) + do_gc = True + break + + if do_gc: + gc.collect() + soft_empty_cache() + + for i in range(len(current_loaded_models)): + cur = current_loaded_models[i] + if cur.is_dead(): + logging.warning("WARNING, memory leak with model {}. Please make sure it is not being referenced from somewhere.".format(cur.real_model().__class__.__name__)) + + + +def cleanup_models(): to_delete = [] for i in range(len(current_loaded_models)): - #TODO: very fragile function needs improvement - num_refs = sys.getrefcount(current_loaded_models[i].model) - if num_refs <= 2: - if not keep_clone_weights_loaded: - to_delete = [i] + to_delete - #TODO: find a less fragile way to do this. - elif sys.getrefcount(current_loaded_models[i].real_model) <= 3: #references from .real_model + the .model - to_delete = [i] + to_delete + if current_loaded_models[i].real_model() is None: + to_delete = [i] + to_delete for i in to_delete: x = current_loaded_models.pop(i) - x.model_unload() del x def dtype_size(dtype): @@ -603,7 +581,7 @@ def unet_offload_device(): def unet_inital_load_device(parameters, dtype): torch_dev = get_torch_device() - if vram_state == VRAMState.HIGH_VRAM: + if vram_state == VRAMState.HIGH_VRAM or vram_state == VRAMState.SHARED: return torch_dev cpu_dev = torch.device("cpu") @@ -623,6 +601,12 @@ def maximum_vram_for_weights(device=None): return (get_total_memory(device) * 0.88 - minimum_inference_memory()) def unet_dtype(device=None, model_params=0, supported_dtypes=[torch.float16, torch.bfloat16, torch.float32]): + if model_params < 0: + model_params = 1000000000000000000000 + if args.fp32_unet: + return torch.float32 + if args.fp64_unet: + return torch.float64 if args.bf16_unet: return torch.bfloat16 if args.fp16_unet: @@ -642,6 +626,9 @@ def unet_dtype(device=None, model_params=0, supported_dtypes=[torch.float16, tor pass if fp8_dtype is not None: + if supports_fp8_compute(device): #if fp8 compute is supported the casting is most likely not expensive + return fp8_dtype + free_model_memory = maximum_vram_for_weights(device) if model_params * 2 > free_model_memory: return fp8_dtype @@ -666,7 +653,7 @@ def unet_dtype(device=None, model_params=0, supported_dtypes=[torch.float16, tor # None means no manual cast def unet_manual_cast(weight_dtype, inference_device, supported_dtypes=[torch.float16, torch.bfloat16, torch.float32]): - if weight_dtype == torch.float32: + if weight_dtype == torch.float32 or weight_dtype == torch.float64: return None fp16_supported = should_use_fp16(inference_device, prioritize_performance=False) @@ -708,7 +695,7 @@ def text_encoder_initial_device(load_device, offload_device, model_size=0): return offload_device if is_device_mps(load_device): - return offload_device + return load_device mem_l = get_free_memory(load_device) mem_o = get_free_memory(offload_device) @@ -835,27 +822,21 @@ def force_channels_last(): #TODO return False +def cast_to(weight, dtype=None, device=None, non_blocking=False, copy=False): + if device is None or weight.device == device: + if not copy: + if dtype is None or weight.dtype == dtype: + return weight + return weight.to(dtype=dtype, copy=copy) + + r = torch.empty_like(weight, dtype=dtype, device=device) + r.copy_(weight, non_blocking=non_blocking) + return r + def cast_to_device(tensor, device, dtype, copy=False): - device_supports_cast = False - if tensor.dtype == torch.float32 or tensor.dtype == torch.float16: - device_supports_cast = True - elif tensor.dtype == torch.bfloat16: - if hasattr(device, 'type') and device.type.startswith("cuda"): - device_supports_cast = True - elif is_intel_xpu(): - device_supports_cast = True + non_blocking = device_supports_non_blocking(device) + return cast_to(tensor, dtype=dtype, device=device, non_blocking=non_blocking, copy=copy) - non_blocking = device_should_use_non_blocking(device) - - if device_supports_cast: - if copy: - if tensor.device == device: - return tensor.to(dtype, copy=copy, non_blocking=non_blocking) - return tensor.to(device, copy=copy, non_blocking=non_blocking).to(dtype, non_blocking=non_blocking) - else: - return tensor.to(device, non_blocking=non_blocking).to(dtype, non_blocking=non_blocking) - else: - return tensor.to(device, dtype, copy=copy, non_blocking=non_blocking) def xformers_enabled(): global directml_enabled @@ -894,7 +875,7 @@ def force_upcast_attention_dtype(): upcast = args.force_upcast_attention try: macos_version = tuple(int(n) for n in platform.mac_ver()[0].split(".")) - if (14, 5) <= macos_version < (14, 7): # black image bug on recent versions of MacOS + if (14, 5) <= macos_version <= (15, 2): # black image bug on recent versions of macOS upcast = True except: pass @@ -1001,7 +982,10 @@ def should_use_fp16(device=None, model_params=0, prioritize_performance=True, ma nvidia_10_series = ["1080", "1070", "titan x", "p3000", "p3200", "p4000", "p4200", "p5000", "p5200", "p6000", "1060", "1050", "p40", "p100", "p6", "p4"] for x in nvidia_10_series: if x in props.name.lower(): - return True + if WINDOWS or manual_cast: + return True + else: + return False #weird linux behavior where fp32 is faster if manual_cast: free_model_memory = maximum_vram_for_weights(device) @@ -1057,6 +1041,9 @@ def should_use_bf16(device=None, model_params=0, prioritize_performance=True, ma return False def supports_fp8_compute(device=None): + if not is_nvidia(): + return False + props = torch.cuda.get_device_properties(device) if props.major >= 9: return True @@ -1064,6 +1051,14 @@ def supports_fp8_compute(device=None): return False if props.minor < 9: return False + + if int(torch_version[0]) < 2 or (int(torch_version[0]) == 2 and int(torch_version[2]) < 3): + return False + + if WINDOWS: + if (int(torch_version[0]) == 2 and int(torch_version[2]) < 4): + return False + return True def soft_empty_cache(force=False): diff --git a/comfy/model_patcher.py b/comfy/model_patcher.py index 3f5d90273..fb651242b 100644 --- a/comfy/model_patcher.py +++ b/comfy/model_patcher.py @@ -16,6 +16,8 @@ along with this program. If not, see . """ +from __future__ import annotations +from typing import Optional, Callable import torch import copy import inspect @@ -28,7 +30,10 @@ import comfy.utils import comfy.float import comfy.model_management import comfy.lora -from comfy.types import UnetWrapperFunction +import comfy.hooks +import comfy.patcher_extension +from comfy.patcher_extension import CallbacksMP, WrappersMP, PatcherInjection +from comfy.comfy_types import UnetWrapperFunction def string_to_seed(data): crc = 0xFFFFFFFF @@ -76,6 +81,17 @@ def set_model_options_pre_cfg_function(model_options, pre_cfg_function, disable_ model_options["disable_cfg1_optimization"] = True return model_options +def create_model_options_clone(orig_model_options: dict): + return comfy.patcher_extension.copy_nested_dicts(orig_model_options) + +def create_hook_patches_clone(orig_hook_patches): + new_hook_patches = {} + for hook_ref in orig_hook_patches: + new_hook_patches[hook_ref] = {} + for k in orig_hook_patches[hook_ref]: + new_hook_patches[hook_ref][k] = orig_hook_patches[hook_ref][k][:] + return new_hook_patches + def wipe_lowvram_weight(m): if hasattr(m, "prev_comfy_cast_weights"): m.comfy_cast_weights = m.prev_comfy_cast_weights @@ -88,7 +104,79 @@ class LowVramPatch: self.key = key self.patches = patches def __call__(self, weight): - return comfy.lora.calculate_weight(self.patches[self.key], weight, self.key, intermediate_dtype=weight.dtype) + intermediate_dtype = weight.dtype + if intermediate_dtype not in [torch.float32, torch.float16, torch.bfloat16]: #intermediate_dtype has to be one that is supported in math ops + intermediate_dtype = torch.float32 + return comfy.float.stochastic_rounding(comfy.lora.calculate_weight(self.patches[self.key], weight.to(intermediate_dtype), self.key, intermediate_dtype=intermediate_dtype), weight.dtype, seed=string_to_seed(self.key)) + + return comfy.lora.calculate_weight(self.patches[self.key], weight, self.key, intermediate_dtype=intermediate_dtype) + +def get_key_weight(model, key): + set_func = None + convert_func = None + op_keys = key.rsplit('.', 1) + if len(op_keys) < 2: + weight = comfy.utils.get_attr(model, key) + else: + op = comfy.utils.get_attr(model, op_keys[0]) + try: + set_func = getattr(op, "set_{}".format(op_keys[1])) + except AttributeError: + pass + + try: + convert_func = getattr(op, "convert_{}".format(op_keys[1])) + except AttributeError: + pass + + weight = getattr(op, op_keys[1]) + if convert_func is not None: + weight = comfy.utils.get_attr(model, key) + + return weight, set_func, convert_func + +class AutoPatcherEjector: + def __init__(self, model: 'ModelPatcher', skip_and_inject_on_exit_only=False): + self.model = model + self.was_injected = False + self.prev_skip_injection = False + self.skip_and_inject_on_exit_only = skip_and_inject_on_exit_only + + def __enter__(self): + self.was_injected = False + self.prev_skip_injection = self.model.skip_injection + if self.skip_and_inject_on_exit_only: + self.model.skip_injection = True + if self.model.is_injected: + self.model.eject_model() + self.was_injected = True + + def __exit__(self, *args): + if self.skip_and_inject_on_exit_only: + self.model.skip_injection = self.prev_skip_injection + self.model.inject_model() + if self.was_injected and not self.model.skip_injection: + self.model.inject_model() + self.model.skip_injection = self.prev_skip_injection + +class MemoryCounter: + def __init__(self, initial: int, minimum=0): + self.value = initial + self.minimum = minimum + # TODO: add a safe limit besides 0 + + def use(self, weight: torch.Tensor): + weight_size = weight.nelement() * weight.element_size() + if self.is_useable(weight_size): + self.decrement(weight_size) + return True + return False + + def is_useable(self, used: int): + return self.value - used > self.minimum + + def decrement(self, used: int): + self.value -= used class ModelPatcher: def __init__(self, model, load_device, offload_device, size=0, weight_inplace_update=False): @@ -110,6 +198,25 @@ class ModelPatcher: self.offload_device = offload_device self.weight_inplace_update = weight_inplace_update self.patches_uuid = uuid.uuid4() + self.parent = None + + self.attachments: dict[str] = {} + self.additional_models: dict[str, list[ModelPatcher]] = {} + self.callbacks: dict[str, dict[str, list[Callable]]] = CallbacksMP.init_callbacks() + self.wrappers: dict[str, dict[str, list[Callable]]] = WrappersMP.init_wrappers() + + self.is_injected = False + self.skip_injection = False + self.injections: dict[str, list[PatcherInjection]] = {} + + self.hook_patches: dict[comfy.hooks._HookRef] = {} + self.hook_patches_backup: dict[comfy.hooks._HookRef] = {} + self.hook_backup: dict[str, tuple[torch.Tensor, torch.device]] = {} + self.cached_hook_patches: dict[comfy.hooks.HookGroup, dict[str, torch.Tensor]] = {} + self.current_hooks: Optional[comfy.hooks.HookGroup] = None + self.forced_hooks: Optional[comfy.hooks.HookGroup] = None # NOTE: only used for CLIP at this time + self.is_clip = False + self.hook_mode = comfy.hooks.EnumHookMode.MaxSpeed if not hasattr(self.model, 'model_loaded_weight_memory'): self.model.model_loaded_weight_memory = 0 @@ -120,6 +227,9 @@ class ModelPatcher: if not hasattr(self.model, 'model_lowvram'): self.model.model_lowvram = False + if not hasattr(self.model, 'current_weight_patches_uuid'): + self.model.current_weight_patches_uuid = None + def model_size(self): if self.size > 0: return self.size @@ -133,7 +243,7 @@ class ModelPatcher: return self.model.lowvram_patch_counter def clone(self): - n = ModelPatcher(self.model, self.load_device, self.offload_device, self.size, weight_inplace_update=self.weight_inplace_update) + n = self.__class__(self.model, self.load_device, self.offload_device, self.size, weight_inplace_update=self.weight_inplace_update) n.patches = {} for k in self.patches: n.patches[k] = self.patches[k][:] @@ -143,6 +253,48 @@ class ModelPatcher: n.model_options = copy.deepcopy(self.model_options) n.backup = self.backup n.object_patches_backup = self.object_patches_backup + n.parent = self + + # attachments + n.attachments = {} + for k in self.attachments: + if hasattr(self.attachments[k], "on_model_patcher_clone"): + n.attachments[k] = self.attachments[k].on_model_patcher_clone() + else: + n.attachments[k] = self.attachments[k] + # additional models + for k, c in self.additional_models.items(): + n.additional_models[k] = [x.clone() for x in c] + # callbacks + for k, c in self.callbacks.items(): + n.callbacks[k] = {} + for k1, c1 in c.items(): + n.callbacks[k][k1] = c1.copy() + # sample wrappers + for k, w in self.wrappers.items(): + n.wrappers[k] = {} + for k1, w1 in w.items(): + n.wrappers[k][k1] = w1.copy() + # injection + n.is_injected = self.is_injected + n.skip_injection = self.skip_injection + for k, i in self.injections.items(): + n.injections[k] = i.copy() + # hooks + n.hook_patches = create_hook_patches_clone(self.hook_patches) + n.hook_patches_backup = create_hook_patches_clone(self.hook_patches_backup) + for group in self.cached_hook_patches: + n.cached_hook_patches[group] = {} + for k in self.cached_hook_patches[group]: + n.cached_hook_patches[group][k] = self.cached_hook_patches[group][k] + n.hook_backup = self.hook_backup + n.current_hooks = self.current_hooks.clone() if self.current_hooks else self.current_hooks + n.forced_hooks = self.forced_hooks.clone() if self.forced_hooks else self.forced_hooks + n.is_clip = self.is_clip + n.hook_mode = self.hook_mode + + for callback in self.get_all_callbacks(CallbacksMP.ON_CLONE): + callback(self, n) return n def is_clone(self, other): @@ -150,10 +302,29 @@ class ModelPatcher: return True return False - def clone_has_same_weights(self, clone): + def clone_has_same_weights(self, clone: 'ModelPatcher'): if not self.is_clone(clone): return False + if self.current_hooks != clone.current_hooks: + return False + if self.forced_hooks != clone.forced_hooks: + return False + if self.hook_patches.keys() != clone.hook_patches.keys(): + return False + if self.attachments.keys() != clone.attachments.keys(): + return False + if self.additional_models.keys() != clone.additional_models.keys(): + return False + for key in self.callbacks: + if len(self.callbacks[key]) != len(clone.callbacks[key]): + return False + for key in self.wrappers: + if len(self.wrappers[key]) != len(clone.wrappers[key]): + return False + if self.injections.keys() != clone.injections.keys(): + return False + if len(self.patches) == 0 and len(clone.patches) == 0: return True @@ -222,6 +393,12 @@ class ModelPatcher: def set_model_output_block_patch(self, patch): self.set_model_patch(patch, "output_block_patch") + def set_model_emb_patch(self, patch): + self.set_model_patch(patch, "emb_patch") + + def set_model_forward_timestep_embed_patch(self, patch): + self.set_model_patch(patch, "forward_timestep_embed_patch") + def add_object_patch(self, name, obj): self.object_patches[name] = obj @@ -260,57 +437,67 @@ class ModelPatcher: return self.model.get_dtype() def add_patches(self, patches, strength_patch=1.0, strength_model=1.0): - p = set() - model_sd = self.model.state_dict() - for k in patches: - offset = None - function = None - if isinstance(k, str): - key = k - else: - offset = k[1] - key = k[0] - if len(k) > 2: - function = k[2] + with self.use_ejected(): + p = set() + model_sd = self.model.state_dict() + for k in patches: + offset = None + function = None + if isinstance(k, str): + key = k + else: + offset = k[1] + key = k[0] + if len(k) > 2: + function = k[2] - if key in model_sd: - p.add(k) - current_patches = self.patches.get(key, []) - current_patches.append((strength_patch, patches[k], strength_model, offset, function)) - self.patches[key] = current_patches + if key in model_sd: + p.add(k) + current_patches = self.patches.get(key, []) + current_patches.append((strength_patch, patches[k], strength_model, offset, function)) + self.patches[key] = current_patches - self.patches_uuid = uuid.uuid4() - return list(p) + self.patches_uuid = uuid.uuid4() + return list(p) def get_key_patches(self, filter_prefix=None): - comfy.model_management.unload_model_clones(self) model_sd = self.model_state_dict() p = {} for k in model_sd: if filter_prefix is not None: if not k.startswith(filter_prefix): continue + bk = self.backup.get(k, None) + hbk = self.hook_backup.get(k, None) + weight, set_func, convert_func = get_key_weight(self.model, k) + if bk is not None: + weight = bk.weight + if hbk is not None: + weight = hbk[0] + if convert_func is None: + convert_func = lambda a, **kwargs: a + if k in self.patches: - p[k] = [model_sd[k]] + self.patches[k] + p[k] = [(weight, convert_func)] + self.patches[k] else: - p[k] = (model_sd[k],) + p[k] = [(weight, convert_func)] return p def model_state_dict(self, filter_prefix=None): - sd = self.model.state_dict() - keys = list(sd.keys()) - if filter_prefix is not None: - for k in keys: - if not k.startswith(filter_prefix): - sd.pop(k) - return sd + with self.use_ejected(): + sd = self.model.state_dict() + keys = list(sd.keys()) + if filter_prefix is not None: + for k in keys: + if not k.startswith(filter_prefix): + sd.pop(k) + return sd def patch_weight_to_device(self, key, device_to=None, inplace_update=False): if key not in self.patches: return - weight = comfy.utils.get_attr(self.model, key) - + weight, set_func, convert_func = get_key_weight(self.model, key) inplace_update = self.weight_inplace_update or inplace_update if key not in self.backup: @@ -320,115 +507,146 @@ class ModelPatcher: temp_weight = comfy.model_management.cast_to_device(weight, device_to, torch.float32, copy=True) else: temp_weight = weight.to(torch.float32, copy=True) - out_weight = comfy.lora.calculate_weight(self.patches[key], temp_weight, key) - out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=string_to_seed(key)) - if inplace_update: - comfy.utils.copy_to_param(self.model, key, out_weight) - else: - comfy.utils.set_attr_param(self.model, key, out_weight) + if convert_func is not None: + temp_weight = convert_func(temp_weight, inplace=True) - def load(self, device_to=None, lowvram_model_memory=0, force_patch_weights=False, full_load=False): - mem_counter = 0 - patch_counter = 0 - lowvram_counter = 0 + out_weight = comfy.lora.calculate_weight(self.patches[key], temp_weight, key) + if set_func is None: + out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=string_to_seed(key)) + if inplace_update: + comfy.utils.copy_to_param(self.model, key, out_weight) + else: + comfy.utils.set_attr_param(self.model, key, out_weight) + else: + set_func(out_weight, inplace_update=inplace_update, seed=string_to_seed(key)) + + def _load_list(self): loading = [] for n, m in self.model.named_modules(): - if hasattr(m, "comfy_cast_weights") or hasattr(m, "weight"): - loading.append((comfy.model_management.module_size(m), n, m)) + params = [] + skip = False + for name, param in m.named_parameters(recurse=False): + params.append(name) + for name, param in m.named_parameters(recurse=True): + if name not in params: + skip = True # skip random weights in non leaf modules + break + if not skip and (hasattr(m, "comfy_cast_weights") or len(params) > 0): + loading.append((comfy.model_management.module_size(m), n, m, params)) + return loading - load_completely = [] - loading.sort(reverse=True) - for x in loading: - n = x[1] - m = x[2] - module_mem = x[0] + def load(self, device_to=None, lowvram_model_memory=0, force_patch_weights=False, full_load=False): + with self.use_ejected(): + self.unpatch_hooks() + mem_counter = 0 + patch_counter = 0 + lowvram_counter = 0 + loading = self._load_list() - lowvram_weight = False + load_completely = [] + loading.sort(reverse=True) + for x in loading: + n = x[1] + m = x[2] + params = x[3] + module_mem = x[0] - if not full_load and hasattr(m, "comfy_cast_weights"): - if mem_counter + module_mem >= lowvram_model_memory: - lowvram_weight = True - lowvram_counter += 1 - if hasattr(m, "prev_comfy_cast_weights"): #Already lowvramed + lowvram_weight = False + + if not full_load and hasattr(m, "comfy_cast_weights"): + if mem_counter + module_mem >= lowvram_model_memory: + lowvram_weight = True + lowvram_counter += 1 + if hasattr(m, "prev_comfy_cast_weights"): #Already lowvramed + continue + + weight_key = "{}.weight".format(n) + bias_key = "{}.bias".format(n) + + if lowvram_weight: + if weight_key in self.patches: + if force_patch_weights: + self.patch_weight_to_device(weight_key) + else: + m.weight_function = LowVramPatch(weight_key, self.patches) + patch_counter += 1 + if bias_key in self.patches: + if force_patch_weights: + self.patch_weight_to_device(bias_key) + else: + m.bias_function = LowVramPatch(bias_key, self.patches) + patch_counter += 1 + + m.prev_comfy_cast_weights = m.comfy_cast_weights + m.comfy_cast_weights = True + else: + if hasattr(m, "comfy_cast_weights"): + if m.comfy_cast_weights: + wipe_lowvram_weight(m) + + if full_load or mem_counter + module_mem < lowvram_model_memory: + mem_counter += module_mem + load_completely.append((module_mem, n, m, params)) + + load_completely.sort(reverse=True) + for x in load_completely: + n = x[1] + m = x[2] + params = x[3] + if hasattr(m, "comfy_patched_weights"): + if m.comfy_patched_weights == True: continue - weight_key = "{}.weight".format(n) - bias_key = "{}.bias".format(n) + for param in params: + self.patch_weight_to_device("{}.{}".format(n, param), device_to=device_to) - if lowvram_weight: - if weight_key in self.patches: - if force_patch_weights: - self.patch_weight_to_device(weight_key) - else: - m.weight_function = LowVramPatch(weight_key, self.patches) - patch_counter += 1 - if bias_key in self.patches: - if force_patch_weights: - self.patch_weight_to_device(bias_key) - else: - m.bias_function = LowVramPatch(bias_key, self.patches) - patch_counter += 1 + logging.debug("lowvram: loaded module regularly {} {}".format(n, m)) + m.comfy_patched_weights = True - m.prev_comfy_cast_weights = m.comfy_cast_weights - m.comfy_cast_weights = True + for x in load_completely: + x[2].to(device_to) + + if lowvram_counter > 0: + logging.info("loaded partially {} {} {}".format(lowvram_model_memory / (1024 * 1024), mem_counter / (1024 * 1024), patch_counter)) + self.model.model_lowvram = True else: - if hasattr(m, "comfy_cast_weights"): - if m.comfy_cast_weights: - wipe_lowvram_weight(m) + logging.info("loaded completely {} {} {}".format(lowvram_model_memory / (1024 * 1024), mem_counter / (1024 * 1024), full_load)) + self.model.model_lowvram = False + if full_load: + self.model.to(device_to) + mem_counter = self.model_size() - if hasattr(m, "weight"): - mem_counter += module_mem - load_completely.append((module_mem, n, m)) + self.model.lowvram_patch_counter += patch_counter + self.model.device = device_to + self.model.model_loaded_weight_memory = mem_counter + self.model.current_weight_patches_uuid = self.patches_uuid - load_completely.sort(reverse=True) - for x in load_completely: - n = x[1] - m = x[2] - weight_key = "{}.weight".format(n) - bias_key = "{}.bias".format(n) - if hasattr(m, "comfy_patched_weights"): - if m.comfy_patched_weights == True: - continue + for callback in self.get_all_callbacks(CallbacksMP.ON_LOAD): + callback(self, device_to, lowvram_model_memory, force_patch_weights, full_load) - self.patch_weight_to_device(weight_key, device_to=device_to) - self.patch_weight_to_device(bias_key, device_to=device_to) - logging.debug("lowvram: loaded module regularly {} {}".format(n, m)) - m.comfy_patched_weights = True - - for x in load_completely: - x[2].to(device_to) - - if lowvram_counter > 0: - logging.info("loaded partially {} {} {}".format(lowvram_model_memory / (1024 * 1024), mem_counter / (1024 * 1024), patch_counter)) - self.model.model_lowvram = True - else: - logging.info("loaded completely {} {} {}".format(lowvram_model_memory / (1024 * 1024), mem_counter / (1024 * 1024), full_load)) - self.model.model_lowvram = False - if full_load: - self.model.to(device_to) - mem_counter = self.model_size() - - self.model.lowvram_patch_counter += patch_counter - self.model.device = device_to - self.model.model_loaded_weight_memory = mem_counter + self.apply_hooks(self.forced_hooks, force_apply=True) def patch_model(self, device_to=None, lowvram_model_memory=0, load_weights=True, force_patch_weights=False): - for k in self.object_patches: - old = comfy.utils.set_attr(self.model, k, self.object_patches[k]) - if k not in self.object_patches_backup: - self.object_patches_backup[k] = old + with self.use_ejected(): + for k in self.object_patches: + old = comfy.utils.set_attr(self.model, k, self.object_patches[k]) + if k not in self.object_patches_backup: + self.object_patches_backup[k] = old - if lowvram_model_memory == 0: - full_load = True - else: - full_load = False + if lowvram_model_memory == 0: + full_load = True + else: + full_load = False - if load_weights: - self.load(device_to, lowvram_model_memory=lowvram_model_memory, force_patch_weights=force_patch_weights, full_load=full_load) + if load_weights: + self.load(device_to, lowvram_model_memory=lowvram_model_memory, force_patch_weights=force_patch_weights, full_load=full_load) + self.inject_model() return self.model def unpatch_model(self, device_to=None, unpatch_weights=True): + self.eject_model() if unpatch_weights: + self.unpatch_hooks() if self.model.model_lowvram: for m in self.model.modules(): wipe_lowvram_weight(m) @@ -445,6 +663,7 @@ class ModelPatcher: else: comfy.utils.set_attr_param(self.model, k, bk.weight) + self.model.current_weight_patches_uuid = None self.backup.clear() if device_to is not None: @@ -463,66 +682,92 @@ class ModelPatcher: self.object_patches_backup.clear() def partially_unload(self, device_to, memory_to_free=0): - memory_freed = 0 - patch_counter = 0 - unload_list = [] + with self.use_ejected(): + memory_freed = 0 + patch_counter = 0 + unload_list = self._load_list() + unload_list.sort() + for unload in unload_list: + if memory_to_free < memory_freed: + break + module_mem = unload[0] + n = unload[1] + m = unload[2] + params = unload[3] - for n, m in self.model.named_modules(): - shift_lowvram = False - if hasattr(m, "comfy_cast_weights"): - module_mem = comfy.model_management.module_size(m) - unload_list.append((module_mem, n, m)) + lowvram_possible = hasattr(m, "comfy_cast_weights") + if hasattr(m, "comfy_patched_weights") and m.comfy_patched_weights == True: + move_weight = True + for param in params: + key = "{}.{}".format(n, param) + bk = self.backup.get(key, None) + if bk is not None: + if not lowvram_possible: + move_weight = False + break - unload_list.sort() - for unload in unload_list: - if memory_to_free < memory_freed: - break - module_mem = unload[0] - n = unload[1] - m = unload[2] - weight_key = "{}.weight".format(n) - bias_key = "{}.bias".format(n) + if bk.inplace_update: + comfy.utils.copy_to_param(self.model, key, bk.weight) + else: + comfy.utils.set_attr_param(self.model, key, bk.weight) + self.backup.pop(key) + + weight_key = "{}.weight".format(n) + bias_key = "{}.bias".format(n) + if move_weight: + m.to(device_to) + if lowvram_possible: + if weight_key in self.patches: + m.weight_function = LowVramPatch(weight_key, self.patches) + patch_counter += 1 + if bias_key in self.patches: + m.bias_function = LowVramPatch(bias_key, self.patches) + patch_counter += 1 - if hasattr(m, "comfy_patched_weights") and m.comfy_patched_weights == True: - for key in [weight_key, bias_key]: - bk = self.backup.get(key, None) - if bk is not None: - if bk.inplace_update: - comfy.utils.copy_to_param(self.model, key, bk.weight) - else: - comfy.utils.set_attr_param(self.model, key, bk.weight) - self.backup.pop(key) + m.prev_comfy_cast_weights = m.comfy_cast_weights + m.comfy_cast_weights = True + m.comfy_patched_weights = False + memory_freed += module_mem + logging.debug("freed {}".format(n)) - m.to(device_to) - if weight_key in self.patches: - m.weight_function = LowVramPatch(weight_key, self.patches) - patch_counter += 1 - if bias_key in self.patches: - m.bias_function = LowVramPatch(bias_key, self.patches) - patch_counter += 1 + self.model.model_lowvram = True + self.model.lowvram_patch_counter += patch_counter + self.model.model_loaded_weight_memory -= memory_freed + return memory_freed - m.prev_comfy_cast_weights = m.comfy_cast_weights - m.comfy_cast_weights = True - m.comfy_patched_weights = False - memory_freed += module_mem - logging.debug("freed {}".format(n)) + def partially_load(self, device_to, extra_memory=0, force_patch_weights=False): + with self.use_ejected(skip_and_inject_on_exit_only=True): + unpatch_weights = self.model.current_weight_patches_uuid is not None and (self.model.current_weight_patches_uuid != self.patches_uuid or force_patch_weights) + # TODO: force_patch_weights should not unload + reload full model + used = self.model.model_loaded_weight_memory + self.unpatch_model(self.offload_device, unpatch_weights=unpatch_weights) + if unpatch_weights: + extra_memory += (used - self.model.model_loaded_weight_memory) - self.model.model_lowvram = True - self.model.lowvram_patch_counter += patch_counter - self.model.model_loaded_weight_memory -= memory_freed - return memory_freed + self.patch_model(load_weights=False) + full_load = False + if self.model.model_lowvram == False and self.model.model_loaded_weight_memory > 0: + self.apply_hooks(self.forced_hooks, force_apply=True) + return 0 + if self.model.model_loaded_weight_memory + extra_memory > self.model_size(): + full_load = True + current_used = self.model.model_loaded_weight_memory + try: + self.load(device_to, lowvram_model_memory=current_used + extra_memory, force_patch_weights=force_patch_weights, full_load=full_load) + except Exception as e: + self.detach() + raise e - def partially_load(self, device_to, extra_memory=0): - self.unpatch_model(unpatch_weights=False) - self.patch_model(load_weights=False) - full_load = False - if self.model.model_lowvram == False: - return 0 - if self.model.model_loaded_weight_memory + extra_memory > self.model_size(): - full_load = True - current_used = self.model.model_loaded_weight_memory - self.load(device_to, lowvram_model_memory=current_used + extra_memory, full_load=full_load) - return self.model.model_loaded_weight_memory - current_used + return self.model.model_loaded_weight_memory - current_used + + def detach(self, unpatch_all=True): + self.eject_model() + self.model_patches_to(self.offload_device) + if unpatch_all: + self.unpatch_model(self.offload_device, unpatch_weights=unpatch_all) + for callback in self.get_all_callbacks(CallbacksMP.ON_DETACH): + callback(self, unpatch_all) + return self.model def current_loaded_device(self): return self.model.device @@ -530,3 +775,346 @@ class ModelPatcher: def calculate_weight(self, patches, weight, key, intermediate_dtype=torch.float32): print("WARNING the ModelPatcher.calculate_weight function is deprecated, please use: comfy.lora.calculate_weight instead") return comfy.lora.calculate_weight(patches, weight, key, intermediate_dtype=intermediate_dtype) + + def cleanup(self): + self.clean_hooks() + if hasattr(self.model, "current_patcher"): + self.model.current_patcher = None + for callback in self.get_all_callbacks(CallbacksMP.ON_CLEANUP): + callback(self) + + def add_callback(self, call_type: str, callback: Callable): + self.add_callback_with_key(call_type, None, callback) + + def add_callback_with_key(self, call_type: str, key: str, callback: Callable): + c = self.callbacks.setdefault(call_type, {}).setdefault(key, []) + c.append(callback) + + def remove_callbacks_with_key(self, call_type: str, key: str): + c = self.callbacks.get(call_type, {}) + if key in c: + c.pop(key) + + def get_callbacks(self, call_type: str, key: str): + return self.callbacks.get(call_type, {}).get(key, []) + + def get_all_callbacks(self, call_type: str): + c_list = [] + for c in self.callbacks.get(call_type, {}).values(): + c_list.extend(c) + return c_list + + def add_wrapper(self, wrapper_type: str, wrapper: Callable): + self.add_wrapper_with_key(wrapper_type, None, wrapper) + + def add_wrapper_with_key(self, wrapper_type: str, key: str, wrapper: Callable): + w = self.wrappers.setdefault(wrapper_type, {}).setdefault(key, []) + w.append(wrapper) + + def remove_wrappers_with_key(self, wrapper_type: str, key: str): + w = self.wrappers.get(wrapper_type, {}) + if key in w: + w.pop(key) + + def get_wrappers(self, wrapper_type: str, key: str): + return self.wrappers.get(wrapper_type, {}).get(key, []) + + def get_all_wrappers(self, wrapper_type: str): + w_list = [] + for w in self.wrappers.get(wrapper_type, {}).values(): + w_list.extend(w) + return w_list + + def set_attachments(self, key: str, attachment): + self.attachments[key] = attachment + + def remove_attachments(self, key: str): + if key in self.attachments: + self.attachments.pop(key) + + def get_attachment(self, key: str): + return self.attachments.get(key, None) + + def set_injections(self, key: str, injections: list[PatcherInjection]): + self.injections[key] = injections + + def remove_injections(self, key: str): + if key in self.injections: + self.injections.pop(key) + + def set_additional_models(self, key: str, models: list['ModelPatcher']): + self.additional_models[key] = models + + def remove_additional_models(self, key: str): + if key in self.additional_models: + self.additional_models.pop(key) + + def get_additional_models_with_key(self, key: str): + return self.additional_models.get(key, []) + + def get_additional_models(self): + all_models = [] + for models in self.additional_models.values(): + all_models.extend(models) + return all_models + + def get_nested_additional_models(self): + def _evaluate_sub_additional_models(prev_models: list[ModelPatcher], cache_set: set[ModelPatcher]): + '''Make sure circular references do not cause infinite recursion.''' + next_models = [] + for model in prev_models: + candidates = model.get_additional_models() + for c in candidates: + if c not in cache_set: + next_models.append(c) + cache_set.add(c) + if len(next_models) == 0: + return prev_models + return prev_models + _evaluate_sub_additional_models(next_models, cache_set) + + all_models = self.get_additional_models() + models_set = set(all_models) + real_all_models = _evaluate_sub_additional_models(prev_models=all_models, cache_set=models_set) + return real_all_models + + def use_ejected(self, skip_and_inject_on_exit_only=False): + return AutoPatcherEjector(self, skip_and_inject_on_exit_only=skip_and_inject_on_exit_only) + + def inject_model(self): + if self.is_injected or self.skip_injection: + return + for injections in self.injections.values(): + for inj in injections: + inj.inject(self) + self.is_injected = True + if self.is_injected: + for callback in self.get_all_callbacks(CallbacksMP.ON_INJECT_MODEL): + callback(self) + + def eject_model(self): + if not self.is_injected: + return + for injections in self.injections.values(): + for inj in injections: + inj.eject(self) + self.is_injected = False + for callback in self.get_all_callbacks(CallbacksMP.ON_EJECT_MODEL): + callback(self) + + def pre_run(self): + if hasattr(self.model, "current_patcher"): + self.model.current_patcher = self + for callback in self.get_all_callbacks(CallbacksMP.ON_PRE_RUN): + callback(self) + + def prepare_state(self, timestep): + for callback in self.get_all_callbacks(CallbacksMP.ON_PREPARE_STATE): + callback(self, timestep) + + def restore_hook_patches(self): + if len(self.hook_patches_backup) > 0: + self.hook_patches = self.hook_patches_backup + self.hook_patches_backup = {} + + def set_hook_mode(self, hook_mode: comfy.hooks.EnumHookMode): + self.hook_mode = hook_mode + + def prepare_hook_patches_current_keyframe(self, t: torch.Tensor, hook_group: comfy.hooks.HookGroup): + curr_t = t[0] + reset_current_hooks = False + for hook in hook_group.hooks: + changed = hook.hook_keyframe.prepare_current_keyframe(curr_t=curr_t) + # if keyframe changed, remove any cached HookGroups that contain hook with the same hook_ref; + # this will cause the weights to be recalculated when sampling + if changed: + # reset current_hooks if contains hook that changed + if self.current_hooks is not None: + for current_hook in self.current_hooks.hooks: + if current_hook == hook: + reset_current_hooks = True + break + for cached_group in list(self.cached_hook_patches.keys()): + if cached_group.contains(hook): + self.cached_hook_patches.pop(cached_group) + if reset_current_hooks: + self.patch_hooks(None) + + def register_all_hook_patches(self, hooks_dict: dict[comfy.hooks.EnumHookType, dict[comfy.hooks.Hook, None]], target: comfy.hooks.EnumWeightTarget, model_options: dict=None): + self.restore_hook_patches() + registered_hooks: list[comfy.hooks.Hook] = [] + # handle WrapperHooks, if model_options provided + if model_options is not None: + for hook in hooks_dict.get(comfy.hooks.EnumHookType.Wrappers, {}): + hook.add_hook_patches(self, model_options, target, registered_hooks) + # handle WeightHooks + weight_hooks_to_register: list[comfy.hooks.WeightHook] = [] + for hook in hooks_dict.get(comfy.hooks.EnumHookType.Weight, {}): + if hook.hook_ref not in self.hook_patches: + weight_hooks_to_register.append(hook) + if len(weight_hooks_to_register) > 0: + # clone hook_patches to become backup so that any non-dynamic hooks will return to their original state + self.hook_patches_backup = create_hook_patches_clone(self.hook_patches) + for hook in weight_hooks_to_register: + hook.add_hook_patches(self, model_options, target, registered_hooks) + for callback in self.get_all_callbacks(CallbacksMP.ON_REGISTER_ALL_HOOK_PATCHES): + callback(self, hooks_dict, target) + + def add_hook_patches(self, hook: comfy.hooks.WeightHook, patches, strength_patch=1.0, strength_model=1.0): + with self.use_ejected(): + # NOTE: this mirrors behavior of add_patches func + current_hook_patches: dict[str,list] = self.hook_patches.get(hook.hook_ref, {}) + p = set() + model_sd = self.model.state_dict() + for k in patches: + offset = None + function = None + if isinstance(k, str): + key = k + else: + offset = k[1] + key = k[0] + if len(k) > 2: + function = k[2] + + if key in model_sd: + p.add(k) + current_patches: list[tuple] = current_hook_patches.get(key, []) + current_patches.append((strength_patch, patches[k], strength_model, offset, function)) + current_hook_patches[key] = current_patches + self.hook_patches[hook.hook_ref] = current_hook_patches + # since should care about these patches too to determine if same model, reroll patches_uuid + self.patches_uuid = uuid.uuid4() + return list(p) + + def get_combined_hook_patches(self, hooks: comfy.hooks.HookGroup): + # combined_patches will contain weights of all relevant hooks, per key + combined_patches = {} + if hooks is not None: + for hook in hooks.hooks: + hook_patches: dict = self.hook_patches.get(hook.hook_ref, {}) + for key in hook_patches.keys(): + current_patches: list[tuple] = combined_patches.get(key, []) + if math.isclose(hook.strength, 1.0): + current_patches.extend(hook_patches[key]) + else: + # patches are stored as tuples: (strength_patch, (tuple_with_weights,), strength_model) + for patch in hook_patches[key]: + new_patch = list(patch) + new_patch[0] *= hook.strength + current_patches.append(tuple(new_patch)) + combined_patches[key] = current_patches + return combined_patches + + def apply_hooks(self, hooks: comfy.hooks.HookGroup, transformer_options: dict=None, force_apply=False): + # TODO: return transformer_options dict with any additions from hooks + if self.current_hooks == hooks and (not force_apply or (not self.is_clip and hooks is None)): + return {} + self.patch_hooks(hooks=hooks) + for callback in self.get_all_callbacks(CallbacksMP.ON_APPLY_HOOKS): + callback(self, hooks) + return {} + + def patch_hooks(self, hooks: comfy.hooks.HookGroup): + with self.use_ejected(): + self.unpatch_hooks() + if hooks is not None: + model_sd_keys = list(self.model_state_dict().keys()) + memory_counter = None + if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed: + # TODO: minimum_counter should have a minimum that conforms to loaded model requirements + memory_counter = MemoryCounter(initial=comfy.model_management.get_free_memory(self.load_device), + minimum=comfy.model_management.minimum_inference_memory()*2) + # if have cached weights for hooks, use it + cached_weights = self.cached_hook_patches.get(hooks, None) + if cached_weights is not None: + for key in cached_weights: + if key not in model_sd_keys: + print(f"WARNING cached hook could not patch. key does not exist in model: {key}") + continue + self.patch_cached_hook_weights(cached_weights=cached_weights, key=key, memory_counter=memory_counter) + else: + relevant_patches = self.get_combined_hook_patches(hooks=hooks) + original_weights = None + if len(relevant_patches) > 0: + original_weights = self.get_key_patches() + for key in relevant_patches: + if key not in model_sd_keys: + print(f"WARNING cached hook would not patch. key does not exist in model: {key}") + continue + self.patch_hook_weight_to_device(hooks=hooks, combined_patches=relevant_patches, key=key, original_weights=original_weights, + memory_counter=memory_counter) + self.current_hooks = hooks + + def patch_cached_hook_weights(self, cached_weights: dict, key: str, memory_counter: MemoryCounter): + if key not in self.hook_backup: + weight: torch.Tensor = comfy.utils.get_attr(self.model, key) + target_device = self.offload_device + if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed: + used = memory_counter.use(weight) + if used: + target_device = weight.device + self.hook_backup[key] = (weight.to(device=target_device, copy=True), weight.device) + comfy.utils.copy_to_param(self.model, key, cached_weights[key][0].to(device=cached_weights[key][1])) + + def clear_cached_hook_weights(self): + self.cached_hook_patches.clear() + self.patch_hooks(None) + + def patch_hook_weight_to_device(self, hooks: comfy.hooks.HookGroup, combined_patches: dict, key: str, original_weights: dict, memory_counter: MemoryCounter): + if key not in combined_patches: + return + + weight, set_func, convert_func = get_key_weight(self.model, key) + weight: torch.Tensor + if key not in self.hook_backup: + target_device = self.offload_device + if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed: + used = memory_counter.use(weight) + if used: + target_device = weight.device + self.hook_backup[key] = (weight.to(device=target_device, copy=True), weight.device) + # TODO: properly handle LowVramPatch, if it ends up an issue + temp_weight = comfy.model_management.cast_to_device(weight, weight.device, torch.float32, copy=True) + if convert_func is not None: + temp_weight = convert_func(temp_weight, inplace=True) + + out_weight = comfy.lora.calculate_weight(combined_patches[key], + temp_weight, + key, original_weights=original_weights) + del original_weights[key] + if set_func is None: + out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype, seed=string_to_seed(key)) + comfy.utils.copy_to_param(self.model, key, out_weight) + else: + set_func(out_weight, inplace_update=True, seed=string_to_seed(key)) + if self.hook_mode == comfy.hooks.EnumHookMode.MaxSpeed: + # TODO: disable caching if not enough system RAM to do so + target_device = self.offload_device + used = memory_counter.use(weight) + if used: + target_device = weight.device + self.cached_hook_patches.setdefault(hooks, {}) + self.cached_hook_patches[hooks][key] = (out_weight.to(device=target_device, copy=False), weight.device) + del temp_weight + del out_weight + del weight + + def unpatch_hooks(self) -> None: + with self.use_ejected(): + if len(self.hook_backup) == 0: + self.current_hooks = None + return + keys = list(self.hook_backup.keys()) + for k in keys: + comfy.utils.copy_to_param(self.model, k, self.hook_backup[k][0].to(device=self.hook_backup[k][1])) + + self.hook_backup.clear() + self.current_hooks = None + + def clean_hooks(self): + self.unpatch_hooks() + self.clear_cached_hook_weights() + + def __del__(self): + self.detach(unpatch_all=False) + diff --git a/comfy/model_sampling.py b/comfy/model_sampling.py index 4a0f2db60..4370516b9 100644 --- a/comfy/model_sampling.py +++ b/comfy/model_sampling.py @@ -2,6 +2,25 @@ import torch from comfy.ldm.modules.diffusionmodules.util import make_beta_schedule import math +def rescale_zero_terminal_snr_sigmas(sigmas): + alphas_cumprod = 1 / ((sigmas * sigmas) + 1) + alphas_bar_sqrt = alphas_cumprod.sqrt() + + # Store old values. + alphas_bar_sqrt_0 = alphas_bar_sqrt[0].clone() + alphas_bar_sqrt_T = alphas_bar_sqrt[-1].clone() + + # Shift so the last timestep is zero. + alphas_bar_sqrt -= (alphas_bar_sqrt_T) + + # Scale so the first timestep is back to the old value. + alphas_bar_sqrt *= alphas_bar_sqrt_0 / (alphas_bar_sqrt_0 - alphas_bar_sqrt_T) + + # Convert alphas_bar_sqrt to betas + alphas_bar = alphas_bar_sqrt**2 # Revert sqrt + alphas_bar[-1] = 4.8973451890853435e-08 + return ((1 - alphas_bar) / alphas_bar) ** 0.5 + class EPS: def calculate_input(self, sigma, noise): sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) @@ -48,7 +67,7 @@ class CONST: return latent / (1.0 - sigma) class ModelSamplingDiscrete(torch.nn.Module): - def __init__(self, model_config=None): + def __init__(self, model_config=None, zsnr=None): super().__init__() if model_config is not None: @@ -61,11 +80,14 @@ class ModelSamplingDiscrete(torch.nn.Module): linear_end = sampling_settings.get("linear_end", 0.012) timesteps = sampling_settings.get("timesteps", 1000) - self._register_schedule(given_betas=None, beta_schedule=beta_schedule, timesteps=timesteps, linear_start=linear_start, linear_end=linear_end, cosine_s=8e-3) + if zsnr is None: + zsnr = sampling_settings.get("zsnr", False) + + self._register_schedule(given_betas=None, beta_schedule=beta_schedule, timesteps=timesteps, linear_start=linear_start, linear_end=linear_end, cosine_s=8e-3, zsnr=zsnr) self.sigma_data = 1.0 def _register_schedule(self, given_betas=None, beta_schedule="linear", timesteps=1000, - linear_start=1e-4, linear_end=2e-2, cosine_s=8e-3): + linear_start=1e-4, linear_end=2e-2, cosine_s=8e-3, zsnr=False): if given_betas is not None: betas = given_betas else: @@ -83,6 +105,9 @@ class ModelSamplingDiscrete(torch.nn.Module): # self.register_buffer('alphas_cumprod_prev', torch.tensor(alphas_cumprod_prev, dtype=torch.float32)) sigmas = ((1 - alphas_cumprod) / alphas_cumprod) ** 0.5 + if zsnr: + sigmas = rescale_zero_terminal_snr_sigmas(sigmas) + self.set_sigmas(sigmas) def set_sigmas(self, sigmas): @@ -218,7 +243,7 @@ class ModelSamplingDiscreteFlow(torch.nn.Module): return 1.0 if percent >= 1.0: return 0.0 - return 1.0 - percent + return time_snr_shift(self.shift, 1.0 - percent) class StableCascadeSampling(ModelSamplingDiscrete): def __init__(self, model_config=None): @@ -311,4 +336,4 @@ class ModelSamplingFlux(torch.nn.Module): return 1.0 if percent >= 1.0: return 0.0 - return 1.0 - percent + return flux_time_shift(self.shift, 1.0, 1.0 - percent) diff --git a/comfy/ops.py b/comfy/ops.py index 43ed55adb..8e0694232 100644 --- a/comfy/ops.py +++ b/comfy/ops.py @@ -19,20 +19,12 @@ import torch import comfy.model_management from comfy.cli_args import args +import comfy.float -def cast_to(weight, dtype=None, device=None, non_blocking=False, copy=False): - if device is None or weight.device == device: - if not copy: - if dtype is None or weight.dtype == dtype: - return weight - return weight.to(dtype=dtype, copy=copy) - - r = torch.empty_like(weight, dtype=dtype, device=device) - r.copy_(weight, non_blocking=non_blocking) - return r +cast_to = comfy.model_management.cast_to #TODO: remove once no more references def cast_to_input(weight, input, non_blocking=False, copy=True): - return cast_to(weight, input.dtype, input.device, non_blocking=non_blocking, copy=copy) + return comfy.model_management.cast_to(weight, input.dtype, input.device, non_blocking=non_blocking, copy=copy) def cast_bias_weight(s, input=None, dtype=None, device=None, bias_dtype=None): if input is not None: @@ -47,12 +39,12 @@ def cast_bias_weight(s, input=None, dtype=None, device=None, bias_dtype=None): non_blocking = comfy.model_management.device_supports_non_blocking(device) if s.bias is not None: has_function = s.bias_function is not None - bias = cast_to(s.bias, bias_dtype, device, non_blocking=non_blocking, copy=has_function) + bias = comfy.model_management.cast_to(s.bias, bias_dtype, device, non_blocking=non_blocking, copy=has_function) if has_function: bias = s.bias_function(bias) has_function = s.weight_function is not None - weight = cast_to(s.weight, dtype, device, non_blocking=non_blocking, copy=has_function) + weight = comfy.model_management.cast_to(s.weight, dtype, device, non_blocking=non_blocking, copy=has_function) if has_function: weight = s.weight_function(weight) return weight, bias @@ -258,20 +250,29 @@ def fp8_linear(self, input): if dtype not in [torch.float8_e4m3fn]: return None + tensor_2d = False + if len(input.shape) == 2: + tensor_2d = True + input = input.unsqueeze(1) + + if len(input.shape) == 3: - inn = input.reshape(-1, input.shape[2]).to(dtype) - non_blocking = comfy.model_management.device_supports_non_blocking(input.device) w, bias = cast_bias_weight(self, input, dtype=dtype, bias_dtype=input.dtype) w = w.t() scale_weight = self.scale_weight scale_input = self.scale_input if scale_weight is None: - scale_weight = torch.ones((1), device=input.device, dtype=torch.float32) - if scale_input is None: - scale_input = scale_weight + scale_weight = torch.ones((), device=input.device, dtype=torch.float32) + else: + scale_weight = scale_weight.to(input.device) + if scale_input is None: - scale_input = torch.ones((1), device=input.device, dtype=torch.float32) + scale_input = torch.ones((), device=input.device, dtype=torch.float32) + inn = torch.clamp(input, min=-448, max=448).reshape(-1, input.shape[2]).to(dtype) + else: + scale_input = scale_input.to(input.device) + inn = (input * (1.0 / scale_input).to(input.dtype)).reshape(-1, input.shape[2]).to(dtype) if bias is not None: o = torch._scaled_mm(inn, w, out_dtype=input.dtype, bias=bias, scale_a=scale_input, scale_b=scale_weight) @@ -281,7 +282,11 @@ def fp8_linear(self, input): if isinstance(o, tuple): o = o[0] + if tensor_2d: + return o.reshape(input.shape[0], -1) + return o.reshape((-1, input.shape[1], self.weight.shape[0])) + return None class fp8_ops(manual_cast): @@ -299,11 +304,63 @@ class fp8_ops(manual_cast): weight, bias = cast_bias_weight(self, input) return torch.nn.functional.linear(input, weight, bias) +def scaled_fp8_ops(fp8_matrix_mult=False, scale_input=False, override_dtype=None): + class scaled_fp8_op(manual_cast): + class Linear(manual_cast.Linear): + def __init__(self, *args, **kwargs): + if override_dtype is not None: + kwargs['dtype'] = override_dtype + super().__init__(*args, **kwargs) + + def reset_parameters(self): + if not hasattr(self, 'scale_weight'): + self.scale_weight = torch.nn.parameter.Parameter(data=torch.ones((), device=self.weight.device, dtype=torch.float32), requires_grad=False) + + if not scale_input: + self.scale_input = None + + if not hasattr(self, 'scale_input'): + self.scale_input = torch.nn.parameter.Parameter(data=torch.ones((), device=self.weight.device, dtype=torch.float32), requires_grad=False) + return None + + def forward_comfy_cast_weights(self, input): + if fp8_matrix_mult: + out = fp8_linear(self, input) + if out is not None: + return out + + weight, bias = cast_bias_weight(self, input) + + if weight.numel() < input.numel(): #TODO: optimize + return torch.nn.functional.linear(input, weight * self.scale_weight.to(device=weight.device, dtype=weight.dtype), bias) + else: + return torch.nn.functional.linear(input * self.scale_weight.to(device=weight.device, dtype=weight.dtype), weight, bias) + + def convert_weight(self, weight, inplace=False, **kwargs): + if inplace: + weight *= self.scale_weight.to(device=weight.device, dtype=weight.dtype) + return weight + else: + return weight * self.scale_weight.to(device=weight.device, dtype=weight.dtype) + + def set_weight(self, weight, inplace_update=False, seed=None, **kwargs): + weight = comfy.float.stochastic_rounding(weight / self.scale_weight.to(device=weight.device, dtype=weight.dtype), self.weight.dtype, seed=seed) + if inplace_update: + self.weight.data.copy_(weight) + else: + self.weight = torch.nn.Parameter(weight, requires_grad=False) + + return scaled_fp8_op + +def pick_operations(weight_dtype, compute_dtype, load_device=None, disable_fast_fp8=False, fp8_optimizations=False, scaled_fp8=None): + fp8_compute = comfy.model_management.supports_fp8_compute(load_device) + if scaled_fp8 is not None: + return scaled_fp8_ops(fp8_matrix_mult=fp8_compute, scale_input=True, override_dtype=scaled_fp8) + + if fp8_compute and (fp8_optimizations or args.fast) and not disable_fast_fp8: + return fp8_ops -def pick_operations(weight_dtype, compute_dtype, load_device=None): if compute_dtype is None or weight_dtype == compute_dtype: return disable_weight_init - if args.fast: - if comfy.model_management.supports_fp8_compute(load_device): - return fp8_ops + return manual_cast diff --git a/comfy/patcher_extension.py b/comfy/patcher_extension.py new file mode 100644 index 000000000..8367977a0 --- /dev/null +++ b/comfy/patcher_extension.py @@ -0,0 +1,156 @@ +from __future__ import annotations +from typing import Callable + +class CallbacksMP: + ON_CLONE = "on_clone" + ON_LOAD = "on_load_after" + ON_DETACH = "on_detach_after" + ON_CLEANUP = "on_cleanup" + ON_PRE_RUN = "on_pre_run" + ON_PREPARE_STATE = "on_prepare_state" + ON_APPLY_HOOKS = "on_apply_hooks" + ON_REGISTER_ALL_HOOK_PATCHES = "on_register_all_hook_patches" + ON_INJECT_MODEL = "on_inject_model" + ON_EJECT_MODEL = "on_eject_model" + + # callbacks dict is in the format: + # {"call_type": {"key": [Callable1, Callable2, ...]} } + @classmethod + def init_callbacks(cls) -> dict[str, dict[str, list[Callable]]]: + return {} + +def add_callback(call_type: str, callback: Callable, transformer_options: dict, is_model_options=False): + add_callback_with_key(call_type, None, callback, transformer_options, is_model_options) + +def add_callback_with_key(call_type: str, key: str, callback: Callable, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.setdefault("transformer_options", {}) + callbacks: dict[str, dict[str, list]] = transformer_options.setdefault("callbacks", {}) + c = callbacks.setdefault(call_type, {}).setdefault(key, []) + c.append(callback) + +def get_callbacks_with_key(call_type: str, key: str, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.get("transformer_options", {}) + c_list = [] + callbacks: dict[str, list] = transformer_options.get("callbacks", {}) + c_list.extend(callbacks.get(call_type, {}).get(key, [])) + return c_list + +def get_all_callbacks(call_type: str, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.get("transformer_options", {}) + c_list = [] + callbacks: dict[str, list] = transformer_options.get("callbacks", {}) + for c in callbacks.get(call_type, {}).values(): + c_list.extend(c) + return c_list + +class WrappersMP: + OUTER_SAMPLE = "outer_sample" + SAMPLER_SAMPLE = "sampler_sample" + CALC_COND_BATCH = "calc_cond_batch" + APPLY_MODEL = "apply_model" + DIFFUSION_MODEL = "diffusion_model" + + # wrappers dict is in the format: + # {"wrapper_type": {"key": [Callable1, Callable2, ...]} } + @classmethod + def init_wrappers(cls) -> dict[str, dict[str, list[Callable]]]: + return {} + +def add_wrapper(wrapper_type: str, wrapper: Callable, transformer_options: dict, is_model_options=False): + add_wrapper_with_key(wrapper_type, None, wrapper, transformer_options, is_model_options) + +def add_wrapper_with_key(wrapper_type: str, key: str, wrapper: Callable, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.setdefault("transformer_options", {}) + wrappers: dict[str, dict[str, list]] = transformer_options.setdefault("wrappers", {}) + w = wrappers.setdefault(wrapper_type, {}).setdefault(key, []) + w.append(wrapper) + +def get_wrappers_with_key(wrapper_type: str, key: str, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.get("transformer_options", {}) + w_list = [] + wrappers: dict[str, list] = transformer_options.get("wrappers", {}) + w_list.extend(wrappers.get(wrapper_type, {}).get(key, [])) + return w_list + +def get_all_wrappers(wrapper_type: str, transformer_options: dict, is_model_options=False): + if is_model_options: + transformer_options = transformer_options.get("transformer_options", {}) + w_list = [] + wrappers: dict[str, list] = transformer_options.get("wrappers", {}) + for w in wrappers.get(wrapper_type, {}).values(): + w_list.extend(w) + return w_list + +class WrapperExecutor: + """Handles call stack of wrappers around a function in an ordered manner.""" + def __init__(self, original: Callable, class_obj: object, wrappers: list[Callable], idx: int): + # NOTE: class_obj exists so that wrappers surrounding a class method can access + # the class instance at runtime via executor.class_obj + self.original = original + self.class_obj = class_obj + self.wrappers = wrappers.copy() + self.idx = idx + self.is_last = idx == len(wrappers) + + def __call__(self, *args, **kwargs): + """Calls the next wrapper or original function, whichever is appropriate.""" + new_executor = self._create_next_executor() + return new_executor.execute(*args, **kwargs) + + def execute(self, *args, **kwargs): + """Used to initiate executor internally - DO NOT use this if you received executor in wrapper.""" + args = list(args) + kwargs = dict(kwargs) + if self.is_last: + return self.original(*args, **kwargs) + return self.wrappers[self.idx](self, *args, **kwargs) + + def _create_next_executor(self) -> 'WrapperExecutor': + new_idx = self.idx + 1 + if new_idx > len(self.wrappers): + raise Exception("Wrapper idx exceeded available wrappers; something went very wrong.") + if self.class_obj is None: + return WrapperExecutor.new_executor(self.original, self.wrappers, new_idx) + return WrapperExecutor.new_class_executor(self.original, self.class_obj, self.wrappers, new_idx) + + @classmethod + def new_executor(cls, original: Callable, wrappers: list[Callable], idx=0): + return cls(original, class_obj=None, wrappers=wrappers, idx=idx) + + @classmethod + def new_class_executor(cls, original: Callable, class_obj: object, wrappers: list[Callable], idx=0): + return cls(original, class_obj, wrappers, idx=idx) + +class PatcherInjection: + def __init__(self, inject: Callable, eject: Callable): + self.inject = inject + self.eject = eject + +def copy_nested_dicts(input_dict: dict): + new_dict = input_dict.copy() + for key, value in input_dict.items(): + if isinstance(value, dict): + new_dict[key] = copy_nested_dicts(value) + elif isinstance(value, list): + new_dict[key] = value.copy() + return new_dict + +def merge_nested_dicts(dict1: dict, dict2: dict, copy_dict1=True): + if copy_dict1: + merged_dict = copy_nested_dicts(dict1) + else: + merged_dict = dict1 + for key, value in dict2.items(): + if isinstance(value, dict): + curr_value = merged_dict.setdefault(key, {}) + merged_dict[key] = merge_nested_dicts(value, curr_value) + elif isinstance(value, list): + merged_dict.setdefault(key, []).extend(value) + else: + merged_dict[key] = value + return merged_dict diff --git a/comfy/sampler_helpers.py b/comfy/sampler_helpers.py index 4a2ec123b..0691de63f 100644 --- a/comfy/sampler_helpers.py +++ b/comfy/sampler_helpers.py @@ -1,22 +1,60 @@ -import torch +from __future__ import annotations +import uuid import comfy.model_management import comfy.conds +import comfy.utils +import comfy.hooks +import comfy.patcher_extension +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from comfy.model_patcher import ModelPatcher + from comfy.model_base import BaseModel + from comfy.controlnet import ControlBase def prepare_mask(noise_mask, shape, device): - """ensures noise mask is of proper dimensions""" - noise_mask = torch.nn.functional.interpolate(noise_mask.reshape((-1, 1, noise_mask.shape[-2], noise_mask.shape[-1])), size=(shape[2], shape[3]), mode="bilinear") - noise_mask = torch.cat([noise_mask] * shape[1], dim=1) - noise_mask = comfy.utils.repeat_to_batch_size(noise_mask, shape[0]) - noise_mask = noise_mask.to(device) - return noise_mask + return comfy.utils.reshape_mask(noise_mask, shape).to(device) def get_models_from_cond(cond, model_type): models = [] for c in cond: if model_type in c: - models += [c[model_type]] + if isinstance(c[model_type], list): + models += c[model_type] + else: + models += [c[model_type]] return models +def get_hooks_from_cond(cond, hooks_dict: dict[comfy.hooks.EnumHookType, dict[comfy.hooks.Hook, None]]): + # get hooks from conds, and collect cnets so they can be checked for extra_hooks + cnets: list[ControlBase] = [] + for c in cond: + if 'hooks' in c: + for hook in c['hooks'].hooks: + hook: comfy.hooks.Hook + with_type = hooks_dict.setdefault(hook.hook_type, {}) + with_type[hook] = None + if 'control' in c: + cnets.append(c['control']) + + def get_extra_hooks_from_cnet(cnet: ControlBase, _list: list): + if cnet.extra_hooks is not None: + _list.append(cnet.extra_hooks) + if cnet.previous_controlnet is None: + return _list + return get_extra_hooks_from_cnet(cnet.previous_controlnet, _list) + + hooks_list = [] + cnets = set(cnets) + for base_cnet in cnets: + get_extra_hooks_from_cnet(base_cnet, hooks_list) + extra_hooks = comfy.hooks.HookGroup.combine_all_hooks(hooks_list) + if extra_hooks is not None: + for hook in extra_hooks.hooks: + with_type = hooks_dict.setdefault(hook.hook_type, {}) + with_type[hook] = None + + return hooks_dict + def convert_cond(cond): out = [] for c in cond: @@ -26,17 +64,22 @@ def convert_cond(cond): model_conds["c_crossattn"] = comfy.conds.CONDCrossAttn(c[0]) #TODO: remove temp["cross_attn"] = c[0] temp["model_conds"] = model_conds + temp["uuid"] = uuid.uuid4() out.append(temp) return out def get_additional_models(conds, dtype): """loads additional models in conditioning""" - cnets = [] + cnets: list[ControlBase] = [] gligen = [] + add_models = [] + hooks: dict[comfy.hooks.EnumHookType, dict[comfy.hooks.Hook, None]] = {} for k in conds: cnets += get_models_from_cond(conds[k], "control") gligen += get_models_from_cond(conds[k], "gligen") + add_models += get_models_from_cond(conds[k], "additional_models") + get_hooks_from_cond(conds[k], hooks) control_nets = set(cnets) @@ -47,7 +90,9 @@ def get_additional_models(conds, dtype): inference_memory += m.inference_memory_requirements(dtype) gligen = [x[1] for x in gligen] - models = control_models + gligen + hook_models = [x.model for x in hooks.get(comfy.hooks.EnumHookType.AddModels, {}).keys()] + models = control_models + gligen + add_models + hook_models + return models, inference_memory def cleanup_additional_models(models): @@ -57,10 +102,10 @@ def cleanup_additional_models(models): m.cleanup() -def prepare_sampling(model, noise_shape, conds): - device = model.load_device - real_model = None +def prepare_sampling(model: 'ModelPatcher', noise_shape, conds): + real_model: 'BaseModel' = None models, inference_memory = get_additional_models(conds, model.model_dtype()) + models += model.get_nested_additional_models() # TODO: does this require inference_memory update? memory_required = model.memory_required([noise_shape[0] * 2] + list(noise_shape[1:])) + inference_memory minimum_memory_required = model.memory_required([noise_shape[0]] + list(noise_shape[1:])) + inference_memory comfy.model_management.load_models_gpu([model] + models, memory_required=memory_required, minimum_memory_required=minimum_memory_required) @@ -76,3 +121,14 @@ def cleanup_models(conds, models): control_cleanup += get_models_from_cond(conds[k], "control") cleanup_additional_models(set(control_cleanup)) + +def prepare_model_patcher(model: 'ModelPatcher', conds, model_options: dict): + # check for hooks in conds - if not registered, see if can be applied + hooks = {} + for k in conds: + get_hooks_from_cond(conds[k], hooks) + # add wrappers and callbacks from ModelPatcher to transformer_options + model_options["transformer_options"]["wrappers"] = comfy.patcher_extension.copy_nested_dicts(model.wrappers) + model_options["transformer_options"]["callbacks"] = comfy.patcher_extension.copy_nested_dicts(model.callbacks) + # register hooks on model/model_options + model.register_all_hook_patches(hooks, comfy.hooks.EnumWeightTarget.Model, model_options) diff --git a/comfy/samplers.py b/comfy/samplers.py index ce4371d50..27686722d 100644 --- a/comfy/samplers.py +++ b/comfy/samplers.py @@ -1,12 +1,22 @@ +from __future__ import annotations from .k_diffusion import sampling as k_diffusion_sampling from .extra_samplers import uni_pc +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from comfy.model_patcher import ModelPatcher + from comfy.model_base import BaseModel + from comfy.controlnet import ControlBase import torch import collections from comfy import model_management import math import logging +import comfy.samplers import comfy.sampler_helpers -import scipy +import comfy.model_patcher +import comfy.patcher_extension +import comfy.hooks +import scipy.stats import numpy def get_area_and_mult(conds, x_in, timestep_in): @@ -70,6 +80,7 @@ def get_area_and_mult(conds, x_in, timestep_in): for c in model_conds: conditioning[c] = model_conds[c].process_cond(batch_size=x_in.shape[0], device=x_in.device, area=area) + hooks = conds.get('hooks', None) control = conds.get('control', None) patches = None @@ -85,8 +96,8 @@ def get_area_and_mult(conds, x_in, timestep_in): patches['middle_patch'] = [gligen_patch] - cond_obj = collections.namedtuple('cond_obj', ['input_x', 'mult', 'conditioning', 'area', 'control', 'patches']) - return cond_obj(input_x, mult, conditioning, area, control, patches) + cond_obj = collections.namedtuple('cond_obj', ['input_x', 'mult', 'conditioning', 'area', 'control', 'patches', 'uuid', 'hooks']) + return cond_obj(input_x, mult, conditioning, area, control, patches, conds['uuid'], hooks) def cond_equal_size(c1, c2): if c1 is c2: @@ -119,11 +130,6 @@ def can_concat_cond(c1, c2): return cond_equal_size(c1.conditioning, c2.conditioning) def cond_cat(c_list): - c_crossattn = [] - c_concat = [] - c_adm = [] - crossattn_max_len = 0 - temp = {} for x in c_list: for k in x: @@ -138,110 +144,184 @@ def cond_cat(c_list): return out -def calc_cond_batch(model, conds, x_in, timestep, model_options): +def finalize_default_conds(model: 'BaseModel', hooked_to_run: dict[comfy.hooks.HookGroup,list[tuple[tuple,int]]], default_conds: list[list[dict]], x_in, timestep): + # need to figure out remaining unmasked area for conds + default_mults = [] + for _ in default_conds: + default_mults.append(torch.ones_like(x_in)) + # look through each finalized cond in hooked_to_run for 'mult' and subtract it from each cond + for lora_hooks, to_run in hooked_to_run.items(): + for cond_obj, i in to_run: + # if no default_cond for cond_type, do nothing + if len(default_conds[i]) == 0: + continue + area: list[int] = cond_obj.area + if area is not None: + curr_default_mult: torch.Tensor = default_mults[i] + dims = len(area) // 2 + for i in range(dims): + curr_default_mult = curr_default_mult.narrow(i + 2, area[i + dims], area[i]) + curr_default_mult -= cond_obj.mult + else: + default_mults[i] -= cond_obj.mult + # for each default_mult, ReLU to make negatives=0, and then check for any nonzeros + for i, mult in enumerate(default_mults): + # if no default_cond for cond type, do nothing + if len(default_conds[i]) == 0: + continue + torch.nn.functional.relu(mult, inplace=True) + # if mult is all zeros, then don't add default_cond + if torch.max(mult) == 0.0: + continue + + cond = default_conds[i] + for x in cond: + # do get_area_and_mult to get all the expected values + p = comfy.samplers.get_area_and_mult(x, x_in, timestep) + if p is None: + continue + # replace p's mult with calculated mult + p = p._replace(mult=mult) + if p.hooks is not None: + model.current_patcher.prepare_hook_patches_current_keyframe(timestep, p.hooks) + hooked_to_run.setdefault(p.hooks, list()) + hooked_to_run[p.hooks] += [(p, i)] + +def calc_cond_batch(model: 'BaseModel', conds: list[list[dict]], x_in: torch.Tensor, timestep, model_options): + executor = comfy.patcher_extension.WrapperExecutor.new_executor( + _calc_cond_batch, + comfy.patcher_extension.get_all_wrappers(comfy.patcher_extension.WrappersMP.CALC_COND_BATCH, model_options, is_model_options=True) + ) + return executor.execute(model, conds, x_in, timestep, model_options) + +def _calc_cond_batch(model: 'BaseModel', conds: list[list[dict]], x_in: torch.Tensor, timestep, model_options): out_conds = [] out_counts = [] - to_run = [] + # separate conds by matching hooks + hooked_to_run: dict[comfy.hooks.HookGroup,list[tuple[tuple,int]]] = {} + default_conds = [] + has_default_conds = False for i in range(len(conds)): out_conds.append(torch.zeros_like(x_in)) out_counts.append(torch.ones_like(x_in) * 1e-37) cond = conds[i] + default_c = [] if cond is not None: for x in cond: - p = get_area_and_mult(x, x_in, timestep) + if 'default' in x: + default_c.append(x) + has_default_conds = True + continue + p = comfy.samplers.get_area_and_mult(x, x_in, timestep) if p is None: continue + if p.hooks is not None: + model.current_patcher.prepare_hook_patches_current_keyframe(timestep, p.hooks) + hooked_to_run.setdefault(p.hooks, list()) + hooked_to_run[p.hooks] += [(p, i)] + default_conds.append(default_c) - to_run += [(p, i)] + if has_default_conds: + finalize_default_conds(model, hooked_to_run, default_conds, x_in, timestep) - while len(to_run) > 0: - first = to_run[0] - first_shape = first[0][0].shape - to_batch_temp = [] - for x in range(len(to_run)): - if can_concat_cond(to_run[x][0], first[0]): - to_batch_temp += [x] + model.current_patcher.prepare_state(timestep) - to_batch_temp.reverse() - to_batch = to_batch_temp[:1] + # run every hooked_to_run separately + for hooks, to_run in hooked_to_run.items(): + while len(to_run) > 0: + first = to_run[0] + first_shape = first[0][0].shape + to_batch_temp = [] + for x in range(len(to_run)): + if can_concat_cond(to_run[x][0], first[0]): + to_batch_temp += [x] - free_memory = model_management.get_free_memory(x_in.device) - for i in range(1, len(to_batch_temp) + 1): - batch_amount = to_batch_temp[:len(to_batch_temp)//i] - input_shape = [len(batch_amount) * first_shape[0]] + list(first_shape)[1:] - if model.memory_required(input_shape) * 1.5 < free_memory: - to_batch = batch_amount - break + to_batch_temp.reverse() + to_batch = to_batch_temp[:1] - input_x = [] - mult = [] - c = [] - cond_or_uncond = [] - area = [] - control = None - patches = None - for x in to_batch: - o = to_run.pop(x) - p = o[0] - input_x.append(p.input_x) - mult.append(p.mult) - c.append(p.conditioning) - area.append(p.area) - cond_or_uncond.append(o[1]) - control = p.control - patches = p.patches + free_memory = model_management.get_free_memory(x_in.device) + for i in range(1, len(to_batch_temp) + 1): + batch_amount = to_batch_temp[:len(to_batch_temp)//i] + input_shape = [len(batch_amount) * first_shape[0]] + list(first_shape)[1:] + if model.memory_required(input_shape) * 1.5 < free_memory: + to_batch = batch_amount + break - batch_chunks = len(cond_or_uncond) - input_x = torch.cat(input_x) - c = cond_cat(c) - timestep_ = torch.cat([timestep] * batch_chunks) + input_x = [] + mult = [] + c = [] + cond_or_uncond = [] + uuids = [] + area = [] + control = None + patches = None + for x in to_batch: + o = to_run.pop(x) + p = o[0] + input_x.append(p.input_x) + mult.append(p.mult) + c.append(p.conditioning) + area.append(p.area) + cond_or_uncond.append(o[1]) + uuids.append(p.uuid) + control = p.control + patches = p.patches - if control is not None: - c['control'] = control.get_control(input_x, timestep_, c, len(cond_or_uncond)) + batch_chunks = len(cond_or_uncond) + input_x = torch.cat(input_x) + c = cond_cat(c) + timestep_ = torch.cat([timestep] * batch_chunks) - transformer_options = {} - if 'transformer_options' in model_options: - transformer_options = model_options['transformer_options'].copy() + transformer_options = model.current_patcher.apply_hooks(hooks=hooks) + if 'transformer_options' in model_options: + transformer_options = comfy.patcher_extension.merge_nested_dicts(transformer_options, + model_options['transformer_options'], + copy_dict1=False) - if patches is not None: - if "patches" in transformer_options: - cur_patches = transformer_options["patches"].copy() - for p in patches: - if p in cur_patches: - cur_patches[p] = cur_patches[p] + patches[p] - else: - cur_patches[p] = patches[p] - transformer_options["patches"] = cur_patches + if patches is not None: + # TODO: replace with merge_nested_dicts function + if "patches" in transformer_options: + cur_patches = transformer_options["patches"].copy() + for p in patches: + if p in cur_patches: + cur_patches[p] = cur_patches[p] + patches[p] + else: + cur_patches[p] = patches[p] + transformer_options["patches"] = cur_patches + else: + transformer_options["patches"] = patches + + transformer_options["cond_or_uncond"] = cond_or_uncond[:] + transformer_options["uuids"] = uuids[:] + transformer_options["sigmas"] = timestep + + c['transformer_options'] = transformer_options + + if control is not None: + c['control'] = control.get_control(input_x, timestep_, c, len(cond_or_uncond), transformer_options) + + if 'model_function_wrapper' in model_options: + output = model_options['model_function_wrapper'](model.apply_model, {"input": input_x, "timestep": timestep_, "c": c, "cond_or_uncond": cond_or_uncond}).chunk(batch_chunks) else: - transformer_options["patches"] = patches + output = model.apply_model(input_x, timestep_, **c).chunk(batch_chunks) - transformer_options["cond_or_uncond"] = cond_or_uncond[:] - transformer_options["sigmas"] = timestep - - c['transformer_options'] = transformer_options - - if 'model_function_wrapper' in model_options: - output = model_options['model_function_wrapper'](model.apply_model, {"input": input_x, "timestep": timestep_, "c": c, "cond_or_uncond": cond_or_uncond}).chunk(batch_chunks) - else: - output = model.apply_model(input_x, timestep_, **c).chunk(batch_chunks) - - for o in range(batch_chunks): - cond_index = cond_or_uncond[o] - a = area[o] - if a is None: - out_conds[cond_index] += output[o] * mult[o] - out_counts[cond_index] += mult[o] - else: - out_c = out_conds[cond_index] - out_cts = out_counts[cond_index] - dims = len(a) // 2 - for i in range(dims): - out_c = out_c.narrow(i + 2, a[i + dims], a[i]) - out_cts = out_cts.narrow(i + 2, a[i + dims], a[i]) - out_c += output[o] * mult[o] - out_cts += mult[o] + for o in range(batch_chunks): + cond_index = cond_or_uncond[o] + a = area[o] + if a is None: + out_conds[cond_index] += output[o] * mult[o] + out_counts[cond_index] += mult[o] + else: + out_c = out_conds[cond_index] + out_cts = out_counts[cond_index] + dims = len(a) // 2 + for i in range(dims): + out_c = out_c.narrow(i + 2, a[i + dims], a[i]) + out_cts = out_cts.narrow(i + 2, a[i + dims], a[i]) + out_c += output[o] * mult[o] + out_cts += mult[o] for i in range(len(out_conds)): out_conds[i] /= out_counts[i] @@ -261,7 +341,7 @@ def cfg_function(model, cond_pred, uncond_pred, cond_scale, x, timestep, model_o cfg_result = uncond_pred + (cond_pred - uncond_pred) * cond_scale for fn in model_options.get("sampler_post_cfg_function", []): - args = {"denoised": cfg_result, "cond": cond, "uncond": uncond, "model": model, "uncond_denoised": uncond_pred, "cond_denoised": cond_pred, + args = {"denoised": cfg_result, "cond": cond, "uncond": uncond, "cond_scale": cond_scale, "model": model, "uncond_denoised": uncond_pred, "cond_denoised": cond_pred, "sigma": timestep, "model_options": model_options, "input": x} cfg_result = fn(args) @@ -358,11 +438,35 @@ def beta_scheduler(model_sampling, steps, alpha=0.6, beta=0.6): ts = numpy.rint(scipy.stats.beta.ppf(ts, alpha, beta) * total_timesteps) sigs = [] + last_t = -1 for t in ts: - sigs += [float(model_sampling.sigmas[int(t)])] + if t != last_t: + sigs += [float(model_sampling.sigmas[int(t)])] + last_t = t sigs += [0.0] return torch.FloatTensor(sigs) +# from: https://github.com/genmoai/models/blob/main/src/mochi_preview/infer.py#L41 +def linear_quadratic_schedule(model_sampling, steps, threshold_noise=0.025, linear_steps=None): + if steps == 1: + sigma_schedule = [1.0, 0.0] + else: + if linear_steps is None: + linear_steps = steps // 2 + linear_sigma_schedule = [i * threshold_noise / linear_steps for i in range(linear_steps)] + threshold_noise_step_diff = linear_steps - threshold_noise * steps + quadratic_steps = steps - linear_steps + quadratic_coef = threshold_noise_step_diff / (linear_steps * quadratic_steps ** 2) + linear_coef = threshold_noise / linear_steps - 2 * threshold_noise_step_diff / (quadratic_steps ** 2) + const = quadratic_coef * (linear_steps ** 2) + quadratic_sigma_schedule = [ + quadratic_coef * (i ** 2) + linear_coef * i + const + for i in range(linear_steps, steps) + ] + sigma_schedule = linear_sigma_schedule + quadratic_sigma_schedule + [1.0] + sigma_schedule = [1.0 - x for x in sigma_schedule] + return torch.FloatTensor(sigma_schedule) * model_sampling.sigma_max.cpu() + def get_mask_aabb(masks): if masks.numel() == 0: return torch.zeros((0, 4), device=masks.device, dtype=torch.int) @@ -476,10 +580,15 @@ def calculate_start_end_timesteps(model, conds): timestep_start = None timestep_end = None - if 'start_percent' in x: - timestep_start = s.percent_to_sigma(x['start_percent']) - if 'end_percent' in x: - timestep_end = s.percent_to_sigma(x['end_percent']) + # handle clip hook schedule, if needed + if 'clip_start_percent' in x: + timestep_start = s.percent_to_sigma(max(x['clip_start_percent'], x.get('start_percent', 0.0))) + timestep_end = s.percent_to_sigma(min(x['clip_end_percent'], x.get('end_percent', 1.0))) + else: + if 'start_percent' in x: + timestep_start = s.percent_to_sigma(x['start_percent']) + if 'end_percent' in x: + timestep_end = s.percent_to_sigma(x['end_percent']) if (timestep_start is not None) or (timestep_end is not None): n = x.copy() @@ -494,8 +603,6 @@ def pre_run_control(model, conds): for t in range(len(conds)): x = conds[t] - timestep_start = None - timestep_end = None percent_to_timestep_function = lambda a: s.percent_to_sigma(a) if 'control' in x: x['control'].pre_run(model, percent_to_timestep_function) @@ -570,8 +677,8 @@ class Sampler: return math.isclose(max_sigma, sigma, rel_tol=1e-05) or sigma > max_sigma KSAMPLER_NAMES = ["euler", "euler_cfg_pp", "euler_ancestral", "euler_ancestral_cfg_pp", "heun", "heunpp2","dpm_2", "dpm_2_ancestral", - "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_sde", "dpmpp_sde_gpu", - "dpmpp_2m", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", + "lms", "dpm_fast", "dpm_adaptive", "dpmpp_2s_ancestral", "dpmpp_2s_ancestral_cfg_pp", "dpmpp_sde", "dpmpp_sde_gpu", + "dpmpp_2m", "dpmpp_2m_cfg_pp", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu", "ddpm", "lcm", "ipndm", "ipndm_v", "deis"] class KSAMPLER(Sampler): @@ -649,6 +756,12 @@ def process_conds(model, noise, conds, device, latent_image=None, denoise_mask=N if k != kk: create_cond_with_same_area_if_none(conds[kk], c) + for k in conds: + for c in conds[k]: + if 'hooks' in c: + for hook in c['hooks'].hooks: + hook.initialize_timesteps(model) + for k in conds: pre_run_control(model, conds[k]) @@ -661,9 +774,46 @@ def process_conds(model, noise, conds, device, latent_image=None, denoise_mask=N return conds + +def preprocess_conds_hooks(conds: dict[str, list[dict[str]]]): + # determine which ControlNets have extra_hooks that should be combined with normal hooks + hook_replacement: dict[tuple[ControlBase, comfy.hooks.HookGroup], list[dict]] = {} + for k in conds: + for kk in conds[k]: + if 'control' in kk: + control: 'ControlBase' = kk['control'] + extra_hooks = control.get_extra_hooks() + if len(extra_hooks) > 0: + hooks: comfy.hooks.HookGroup = kk.get('hooks', None) + to_replace = hook_replacement.setdefault((control, hooks), []) + to_replace.append(kk) + # if nothing to replace, do nothing + if len(hook_replacement) == 0: + return + + # for optimal sampling performance, common ControlNets + hook combos should have identical hooks + # on the cond dicts + for key, conds_to_modify in hook_replacement.items(): + control = key[0] + hooks = key[1] + hooks = comfy.hooks.HookGroup.combine_all_hooks(control.get_extra_hooks() + [hooks]) + # if combined hooks are not None, set as new hooks for all relevant conds + if hooks is not None: + for cond in conds_to_modify: + cond['hooks'] = hooks + + +def get_total_hook_groups_in_conds(conds: dict[str, list[dict[str]]]): + hooks_set = set() + for k in conds: + for kk in conds[k]: + hooks_set.add(kk.get('hooks', None)) + return len(hooks_set) + + class CFGGuider: def __init__(self, model_patcher): - self.model_patcher = model_patcher + self.model_patcher: 'ModelPatcher' = model_patcher self.model_options = model_patcher.model_options self.original_conds = {} self.cfg = 1.0 @@ -690,19 +840,17 @@ class CFGGuider: self.conds = process_conds(self.inner_model, noise, self.conds, device, latent_image, denoise_mask, seed) - extra_args = {"model_options": self.model_options, "seed":seed} + extra_args = {"model_options": comfy.model_patcher.create_model_options_clone(self.model_options), "seed": seed} - samples = sampler.sample(self, sigmas, extra_args, callback, noise, latent_image, denoise_mask, disable_pbar) + executor = comfy.patcher_extension.WrapperExecutor.new_class_executor( + sampler.sample, + sampler, + comfy.patcher_extension.get_all_wrappers(comfy.patcher_extension.WrappersMP.SAMPLER_SAMPLE, extra_args["model_options"], is_model_options=True) + ) + samples = executor.execute(self, sigmas, extra_args, callback, noise, latent_image, denoise_mask, disable_pbar) return self.inner_model.process_latent_out(samples.to(torch.float32)) - def sample(self, noise, latent_image, sampler, sigmas, denoise_mask=None, callback=None, disable_pbar=False, seed=None): - if sigmas.shape[-1] == 0: - return latent_image - - self.conds = {} - for k in self.original_conds: - self.conds[k] = list(map(lambda a: a.copy(), self.original_conds[k])) - + def outer_sample(self, noise, latent_image, sampler, sigmas, denoise_mask=None, callback=None, disable_pbar=False, seed=None): self.inner_model, self.conds, self.loaded_models = comfy.sampler_helpers.prepare_sampling(self.model_patcher, noise.shape, self.conds) device = self.model_patcher.load_device @@ -713,14 +861,48 @@ class CFGGuider: latent_image = latent_image.to(device) sigmas = sigmas.to(device) - output = self.inner_sample(noise, latent_image, device, sampler, sigmas, denoise_mask, callback, disable_pbar, seed) + try: + self.model_patcher.pre_run() + output = self.inner_sample(noise, latent_image, device, sampler, sigmas, denoise_mask, callback, disable_pbar, seed) + finally: + self.model_patcher.cleanup() comfy.sampler_helpers.cleanup_models(self.conds, self.loaded_models) del self.inner_model - del self.conds del self.loaded_models return output + def sample(self, noise, latent_image, sampler, sigmas, denoise_mask=None, callback=None, disable_pbar=False, seed=None): + if sigmas.shape[-1] == 0: + return latent_image + + self.conds = {} + for k in self.original_conds: + self.conds[k] = list(map(lambda a: a.copy(), self.original_conds[k])) + preprocess_conds_hooks(self.conds) + + try: + orig_model_options = self.model_options + self.model_options = comfy.model_patcher.create_model_options_clone(self.model_options) + # if one hook type (or just None), then don't bother caching weights for hooks (will never change after first step) + orig_hook_mode = self.model_patcher.hook_mode + if get_total_hook_groups_in_conds(self.conds) <= 1: + self.model_patcher.hook_mode = comfy.hooks.EnumHookMode.MinVram + comfy.sampler_helpers.prepare_model_patcher(self.model_patcher, self.conds, self.model_options) + executor = comfy.patcher_extension.WrapperExecutor.new_class_executor( + self.outer_sample, + self, + comfy.patcher_extension.get_all_wrappers(comfy.patcher_extension.WrappersMP.OUTER_SAMPLE, self.model_options, is_model_options=True) + ) + output = executor.execute(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed) + finally: + self.model_options = orig_model_options + self.model_patcher.hook_mode = orig_hook_mode + self.model_patcher.restore_hook_patches() + + del self.conds + return output + def sample(model, noise, positive, negative, cfg, device, sampler, sigmas, model_options={}, latent_image=None, denoise_mask=None, callback=None, disable_pbar=False, seed=None): cfg_guider = CFGGuider(model) @@ -729,7 +911,7 @@ def sample(model, noise, positive, negative, cfg, device, sampler, sigmas, model return cfg_guider.sample(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed) -SCHEDULER_NAMES = ["normal", "karras", "exponential", "sgm_uniform", "simple", "ddim_uniform", "beta"] +SCHEDULER_NAMES = ["normal", "karras", "exponential", "sgm_uniform", "simple", "ddim_uniform", "beta", "linear_quadratic"] SAMPLER_NAMES = KSAMPLER_NAMES + ["ddim", "uni_pc", "uni_pc_bh2"] def calculate_sigmas(model_sampling, scheduler_name, steps): @@ -747,6 +929,8 @@ def calculate_sigmas(model_sampling, scheduler_name, steps): sigmas = normal_scheduler(model_sampling, steps, sgm=True) elif scheduler_name == "beta": sigmas = beta_scheduler(model_sampling, steps) + elif scheduler_name == "linear_quadratic": + sigmas = linear_quadratic_schedule(model_sampling, steps) else: logging.error("error invalid scheduler {}".format(scheduler_name)) return sigmas diff --git a/comfy/sd.py b/comfy/sd.py index 1e1a6594b..3b29eecb4 100644 --- a/comfy/sd.py +++ b/comfy/sd.py @@ -1,12 +1,16 @@ +from __future__ import annotations import torch from enum import Enum import logging from comfy import model_management +from comfy.utils import ProgressBar from .ldm.models.autoencoder import AutoencoderKL, AutoencodingEngine from .ldm.cascade.stage_a import StageA from .ldm.cascade.stage_c_coder import StageC_coder from .ldm.audio.autoencoder import AudioOobleckVAE +import comfy.ldm.genmo.vae.model +import comfy.ldm.lightricks.vae.causal_video_autoencoder import yaml import comfy.utils @@ -25,13 +29,19 @@ import comfy.text_encoders.aura_t5 import comfy.text_encoders.hydit import comfy.text_encoders.flux import comfy.text_encoders.long_clipl +import comfy.text_encoders.genmo +import comfy.text_encoders.lt +import comfy.text_encoders.hunyuan_video import comfy.model_patcher import comfy.lora +import comfy.lora_convert +import comfy.hooks import comfy.t2i_adapter.adapter -import comfy.supported_models_base import comfy.taesd.taesd +import comfy.ldm.flux.redux + def load_lora_for_models(model, clip, lora, strength_model, strength_clip): key_map = {} if model is not None: @@ -39,6 +49,7 @@ def load_lora_for_models(model, clip, lora, strength_model, strength_clip): if clip is not None: key_map = comfy.lora.model_lora_keys_clip(clip.cond_stage_model, key_map) + lora = comfy.lora_convert.convert_lora(lora) loaded = comfy.lora.load_lora(lora, key_map) if model is not None: new_modelpatcher = model.clone() @@ -70,14 +81,14 @@ class CLIP: clip = target.clip tokenizer = target.tokenizer - load_device = model_management.text_encoder_device() - offload_device = model_management.text_encoder_offload_device() + load_device = model_options.get("load_device", model_management.text_encoder_device()) + offload_device = model_options.get("offload_device", model_management.text_encoder_offload_device()) dtype = model_options.get("dtype", None) if dtype is None: dtype = model_management.text_encoder_dtype(load_device) params['dtype'] = dtype - params['device'] = model_management.text_encoder_initial_device(load_device, offload_device, parameters * model_management.dtype_size(dtype)) + params['device'] = model_options.get("initial_device", model_management.text_encoder_initial_device(load_device, offload_device, parameters * model_management.dtype_size(dtype))) params['model_options'] = model_options self.cond_stage_model = clip(**(params)) @@ -91,9 +102,13 @@ class CLIP: self.tokenizer = tokenizer(embedding_directory=embedding_directory, tokenizer_data=tokenizer_data) self.patcher = comfy.model_patcher.ModelPatcher(self.cond_stage_model, load_device=load_device, offload_device=offload_device) + self.patcher.hook_mode = comfy.hooks.EnumHookMode.MinVram + self.patcher.is_clip = True + self.apply_hooks_to_conds = None if params['device'] == load_device: model_management.load_models_gpu([self.patcher], force_full_load=True) self.layer_idx = None + self.use_clip_schedule = False logging.debug("CLIP model load device: {}, offload device: {}, current: {}".format(load_device, offload_device, params['device'])) def clone(self): @@ -102,6 +117,8 @@ class CLIP: n.cond_stage_model = self.cond_stage_model n.tokenizer = self.tokenizer n.layer_idx = self.layer_idx + n.use_clip_schedule = self.use_clip_schedule + n.apply_hooks_to_conds = self.apply_hooks_to_conds return n def add_patches(self, patches, strength_patch=1.0, strength_model=1.0): @@ -113,6 +130,69 @@ class CLIP: def tokenize(self, text, return_word_ids=False): return self.tokenizer.tokenize_with_weights(text, return_word_ids) + def add_hooks_to_dict(self, pooled_dict: dict[str]): + if self.apply_hooks_to_conds: + pooled_dict["hooks"] = self.apply_hooks_to_conds + return pooled_dict + + def encode_from_tokens_scheduled(self, tokens, unprojected=False, add_dict: dict[str]={}, show_pbar=True): + all_cond_pooled: list[tuple[torch.Tensor, dict[str]]] = [] + all_hooks = self.patcher.forced_hooks + if all_hooks is None or not self.use_clip_schedule: + # if no hooks or shouldn't use clip schedule, do unscheduled encode_from_tokens and perform add_dict + return_pooled = "unprojected" if unprojected else True + pooled_dict = self.encode_from_tokens(tokens, return_pooled=return_pooled, return_dict=True) + cond = pooled_dict.pop("cond") + # add/update any keys with the provided add_dict + pooled_dict.update(add_dict) + all_cond_pooled.append([cond, pooled_dict]) + else: + scheduled_keyframes = all_hooks.get_hooks_for_clip_schedule() + + self.cond_stage_model.reset_clip_options() + if self.layer_idx is not None: + self.cond_stage_model.set_clip_options({"layer": self.layer_idx}) + if unprojected: + self.cond_stage_model.set_clip_options({"projected_pooled": False}) + + self.load_model() + all_hooks.reset() + self.patcher.patch_hooks(None) + if show_pbar: + pbar = ProgressBar(len(scheduled_keyframes)) + + for scheduled_opts in scheduled_keyframes: + t_range = scheduled_opts[0] + # don't bother encoding any conds outside of start_percent and end_percent bounds + if "start_percent" in add_dict: + if t_range[1] < add_dict["start_percent"]: + continue + if "end_percent" in add_dict: + if t_range[0] > add_dict["end_percent"]: + continue + hooks_keyframes = scheduled_opts[1] + for hook, keyframe in hooks_keyframes: + hook.hook_keyframe._current_keyframe = keyframe + # apply appropriate hooks with values that match new hook_keyframe + self.patcher.patch_hooks(all_hooks) + # perform encoding as normal + o = self.cond_stage_model.encode_token_weights(tokens) + cond, pooled = o[:2] + pooled_dict = {"pooled_output": pooled} + # add clip_start_percent and clip_end_percent in pooled + pooled_dict["clip_start_percent"] = t_range[0] + pooled_dict["clip_end_percent"] = t_range[1] + # add/update any keys with the provided add_dict + pooled_dict.update(add_dict) + # add hooks stored on clip + self.add_hooks_to_dict(pooled_dict) + all_cond_pooled.append([cond, pooled_dict]) + if show_pbar: + pbar.update(1) + model_management.throw_exception_if_processing_interrupted() + all_hooks.reset() + return all_cond_pooled + def encode_from_tokens(self, tokens, return_pooled=False, return_dict=False): self.cond_stage_model.reset_clip_options() @@ -130,6 +210,7 @@ class CLIP: if len(o) > 2: for k in o[2]: out[k] = o[2][k] + self.add_hooks_to_dict(out) return out if return_pooled: @@ -170,6 +251,7 @@ class VAE: self.downscale_ratio = 8 self.upscale_ratio = 8 self.latent_channels = 4 + self.latent_dim = 2 self.output_channels = 3 self.process_input = lambda image: image * 2.0 - 1.0 self.process_output = lambda image: torch.clamp((image + 1.0) / 2.0, min=0.0, max=1.0) @@ -225,8 +307,8 @@ class VAE: self.upscale_ratio = 4 self.latent_channels = ddconfig['z_channels'] = sd["decoder.conv_in.weight"].shape[1] - if 'quant_conv.weight' in sd: - self.first_stage_model = AutoencoderKL(ddconfig=ddconfig, embed_dim=4) + if 'post_quant_conv.weight' in sd: + self.first_stage_model = AutoencoderKL(ddconfig=ddconfig, embed_dim=sd['post_quant_conv.weight'].shape[1]) else: self.first_stage_model = AutoencodingEngine(regularizer_config={'target': "comfy.ldm.models.autoencoder.DiagonalGaussianRegularizer"}, encoder_config={'target': "comfy.ldm.modules.diffusionmodules.model.Encoder", 'params': ddconfig}, @@ -239,9 +321,41 @@ class VAE: self.output_channels = 2 self.upscale_ratio = 2048 self.downscale_ratio = 2048 + self.latent_dim = 1 self.process_output = lambda audio: audio self.process_input = lambda audio: audio self.working_dtypes = [torch.float16, torch.bfloat16, torch.float32] + elif "blocks.2.blocks.3.stack.5.weight" in sd or "decoder.blocks.2.blocks.3.stack.5.weight" in sd or "layers.4.layers.1.attn_block.attn.qkv.weight" in sd or "encoder.layers.4.layers.1.attn_block.attn.qkv.weight" in sd: #genmo mochi vae + if "blocks.2.blocks.3.stack.5.weight" in sd: + sd = comfy.utils.state_dict_prefix_replace(sd, {"": "decoder."}) + if "layers.4.layers.1.attn_block.attn.qkv.weight" in sd: + sd = comfy.utils.state_dict_prefix_replace(sd, {"": "encoder."}) + self.first_stage_model = comfy.ldm.genmo.vae.model.VideoVAE() + self.latent_channels = 12 + self.latent_dim = 3 + self.memory_used_decode = lambda shape, dtype: (1000 * shape[2] * shape[3] * shape[4] * (6 * 8 * 8)) * model_management.dtype_size(dtype) + self.memory_used_encode = lambda shape, dtype: (1.5 * max(shape[2], 7) * shape[3] * shape[4] * (6 * 8 * 8)) * model_management.dtype_size(dtype) + self.upscale_ratio = (lambda a: max(0, a * 6 - 5), 8, 8) + self.working_dtypes = [torch.float16, torch.float32] + elif "decoder.up_blocks.0.res_blocks.0.conv1.conv.weight" in sd: #lightricks ltxv + self.first_stage_model = comfy.ldm.lightricks.vae.causal_video_autoencoder.VideoVAE() + self.latent_channels = 128 + self.latent_dim = 3 + self.memory_used_decode = lambda shape, dtype: (900 * shape[2] * shape[3] * shape[4] * (8 * 8 * 8)) * model_management.dtype_size(dtype) + self.memory_used_encode = lambda shape, dtype: (70 * max(shape[2], 7) * shape[3] * shape[4]) * model_management.dtype_size(dtype) + self.upscale_ratio = (lambda a: max(0, a * 8 - 7), 32, 32) + self.working_dtypes = [torch.bfloat16, torch.float32] + elif "decoder.conv_in.conv.weight" in sd: + ddconfig = {'double_z': True, 'z_channels': 4, 'resolution': 256, 'in_channels': 3, 'out_ch': 3, 'ch': 128, 'ch_mult': [1, 2, 4, 4], 'num_res_blocks': 2, 'attn_resolutions': [], 'dropout': 0.0} + ddconfig["conv3d"] = True + ddconfig["time_compress"] = 4 + self.upscale_ratio = (lambda a: max(0, a * 4 - 3), 8, 8) + self.latent_dim = 3 + self.latent_channels = ddconfig['z_channels'] = sd["decoder.conv_in.conv.weight"].shape[1] + self.first_stage_model = AutoencoderKL(ddconfig=ddconfig, embed_dim=sd['post_quant_conv.weight'].shape[1]) + self.memory_used_decode = lambda shape, dtype: (1500 * shape[2] * shape[3] * shape[4] * (4 * 8 * 8)) * model_management.dtype_size(dtype) + self.memory_used_encode = lambda shape, dtype: (900 * max(shape[2], 2) * shape[3] * shape[4]) * model_management.dtype_size(dtype) + self.working_dtypes = [torch.bfloat16, torch.float16, torch.float32] else: logging.warning("WARNING: No VAE weights detected, VAE not initalized.") self.first_stage_model = None @@ -297,6 +411,10 @@ class VAE: decode_fn = lambda a: self.first_stage_model.decode(a.to(self.vae_dtype).to(self.device)).float() return comfy.utils.tiled_scale_multidim(samples, decode_fn, tile=(tile_x,), overlap=overlap, upscale_amount=self.upscale_ratio, out_channels=self.output_channels, output_device=self.output_device) + def decode_tiled_3d(self, samples, tile_t=999, tile_x=32, tile_y=32, overlap=(1, 8, 8)): + decode_fn = lambda a: self.first_stage_model.decode(a.to(self.vae_dtype).to(self.device)).float() + return self.process_output(comfy.utils.tiled_scale_multidim(samples, decode_fn, tile=(tile_t, tile_x, tile_y), overlap=overlap, upscale_amount=self.upscale_ratio, out_channels=self.output_channels, output_device=self.output_device)) + def encode_tiled_(self, pixel_samples, tile_x=512, tile_y=512, overlap = 64): steps = pixel_samples.shape[0] * comfy.utils.get_tiled_scale_steps(pixel_samples.shape[3], pixel_samples.shape[2], tile_x, tile_y, overlap) steps += pixel_samples.shape[0] * comfy.utils.get_tiled_scale_steps(pixel_samples.shape[3], pixel_samples.shape[2], tile_x // 2, tile_y * 2, overlap) @@ -315,6 +433,7 @@ class VAE: return comfy.utils.tiled_scale_multidim(samples, encode_fn, tile=(tile_x,), overlap=overlap, upscale_amount=(1/self.downscale_ratio), out_channels=self.latent_channels, output_device=self.output_device) def decode(self, samples_in): + pixel_samples = None try: memory_used = self.memory_used_decode(samples_in.shape, self.vae_dtype) model_management.load_models_gpu([self.patcher], memory_required=memory_used) @@ -322,40 +441,68 @@ class VAE: batch_number = int(free_memory / memory_used) batch_number = max(1, batch_number) - pixel_samples = torch.empty((samples_in.shape[0], self.output_channels) + tuple(map(lambda a: a * self.upscale_ratio, samples_in.shape[2:])), device=self.output_device) for x in range(0, samples_in.shape[0], batch_number): samples = samples_in[x:x+batch_number].to(self.vae_dtype).to(self.device) - pixel_samples[x:x+batch_number] = self.process_output(self.first_stage_model.decode(samples).to(self.output_device).float()) - except model_management.OOM_EXCEPTION as e: + out = self.process_output(self.first_stage_model.decode(samples).to(self.output_device).float()) + if pixel_samples is None: + pixel_samples = torch.empty((samples_in.shape[0],) + tuple(out.shape[1:]), device=self.output_device) + pixel_samples[x:x+batch_number] = out + except model_management.OOM_EXCEPTION: logging.warning("Warning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding.") - if len(samples_in.shape) == 3: + dims = samples_in.ndim - 2 + if dims == 1: pixel_samples = self.decode_tiled_1d(samples_in) - else: + elif dims == 2: pixel_samples = self.decode_tiled_(samples_in) + elif dims == 3: + tile = 256 // self.spacial_compression_decode() + overlap = tile // 4 + pixel_samples = self.decode_tiled_3d(samples_in, tile_x=tile, tile_y=tile, overlap=(1, overlap, overlap)) pixel_samples = pixel_samples.to(self.output_device).movedim(1,-1) return pixel_samples - def decode_tiled(self, samples, tile_x=64, tile_y=64, overlap = 16): - model_management.load_model_gpu(self.patcher) - output = self.decode_tiled_(samples, tile_x, tile_y, overlap) - return output.movedim(1,-1) + def decode_tiled(self, samples, tile_x=None, tile_y=None, overlap=None): + memory_used = self.memory_used_decode(samples.shape, self.vae_dtype) #TODO: calculate mem required for tile + model_management.load_models_gpu([self.patcher], memory_required=memory_used) + dims = samples.ndim - 2 + args = {} + if tile_x is not None: + args["tile_x"] = tile_x + if tile_y is not None: + args["tile_y"] = tile_y + if overlap is not None: + args["overlap"] = overlap + + if dims == 1: + args.pop("tile_y") + output = self.decode_tiled_1d(samples, **args) + elif dims == 2: + output = self.decode_tiled_(samples, **args) + elif dims == 3: + output = self.decode_tiled_3d(samples, **args) + return output.movedim(1, -1) def encode(self, pixel_samples): pixel_samples = self.vae_encode_crop_pixels(pixel_samples) - pixel_samples = pixel_samples.movedim(-1,1) + pixel_samples = pixel_samples.movedim(-1, 1) + if self.latent_dim == 3: + pixel_samples = pixel_samples.movedim(1, 0).unsqueeze(0) try: memory_used = self.memory_used_encode(pixel_samples.shape, self.vae_dtype) model_management.load_models_gpu([self.patcher], memory_required=memory_used) free_memory = model_management.get_free_memory(self.device) - batch_number = int(free_memory / memory_used) + batch_number = int(free_memory / max(1, memory_used)) batch_number = max(1, batch_number) - samples = torch.empty((pixel_samples.shape[0], self.latent_channels) + tuple(map(lambda a: a // self.downscale_ratio, pixel_samples.shape[2:])), device=self.output_device) + samples = None for x in range(0, pixel_samples.shape[0], batch_number): - pixels_in = self.process_input(pixel_samples[x:x+batch_number]).to(self.vae_dtype).to(self.device) - samples[x:x+batch_number] = self.first_stage_model.encode(pixels_in).to(self.output_device).float() + pixels_in = self.process_input(pixel_samples[x:x + batch_number]).to(self.vae_dtype).to(self.device) + out = self.first_stage_model.encode(pixels_in).to(self.output_device).float() + if samples is None: + samples = torch.empty((pixel_samples.shape[0],) + tuple(out.shape[1:]), device=self.output_device) + samples[x:x + batch_number] = out - except model_management.OOM_EXCEPTION as e: + except model_management.OOM_EXCEPTION: logging.warning("Warning: Ran out of memory when regular VAE encoding, retrying with tiled VAE encoding.") if len(pixel_samples.shape) == 3: samples = self.encode_tiled_1d(pixel_samples) @@ -374,6 +521,12 @@ class VAE: def get_sd(self): return self.first_stage_model.state_dict() + def spacial_compression_decode(self): + try: + return self.upscale_ratio[-1] + except: + return self.upscale_ratio + class StyleModel: def __init__(self, model, device="cpu"): self.model = model @@ -387,6 +540,8 @@ def load_style_model(ckpt_path): keys = model_data.keys() if "style_embedding" in keys: model = comfy.t2i_adapter.adapter.StyleAdapter(width=1024, context_dim=768, num_head=8, n_layes=3, num_token=8) + elif "redux_down.weight" in keys: + model = comfy.ldm.flux.redux.ReduxImageEncoder() else: raise Exception("invalid style model {}".format(ckpt_path)) model.load_state_dict(model_data) @@ -399,6 +554,9 @@ class CLIPType(Enum): STABLE_AUDIO = 4 HUNYUAN_DIT = 5 FLUX = 6 + MOCHI = 7 + LTXV = 8 + HUNYUAN_VIDEO = 9 def load_clip(ckpt_paths, embedding_directory=None, clip_type=CLIPType.STABLE_DIFFUSION, model_options={}): clip_data = [] @@ -406,8 +564,57 @@ def load_clip(ckpt_paths, embedding_directory=None, clip_type=CLIPType.STABLE_DI clip_data.append(comfy.utils.load_torch_file(p, safe_load=True)) return load_text_encoder_state_dicts(clip_data, embedding_directory=embedding_directory, clip_type=clip_type, model_options=model_options) + +class TEModel(Enum): + CLIP_L = 1 + CLIP_H = 2 + CLIP_G = 3 + T5_XXL = 4 + T5_XL = 5 + T5_BASE = 6 + LLAMA3_8 = 7 + +def detect_te_model(sd): + if "text_model.encoder.layers.30.mlp.fc1.weight" in sd: + return TEModel.CLIP_G + if "text_model.encoder.layers.22.mlp.fc1.weight" in sd: + return TEModel.CLIP_H + if "text_model.encoder.layers.0.mlp.fc1.weight" in sd: + return TEModel.CLIP_L + if "encoder.block.23.layer.1.DenseReluDense.wi_1.weight" in sd: + weight = sd["encoder.block.23.layer.1.DenseReluDense.wi_1.weight"] + if weight.shape[-1] == 4096: + return TEModel.T5_XXL + elif weight.shape[-1] == 2048: + return TEModel.T5_XL + if "encoder.block.0.layer.0.SelfAttention.k.weight" in sd: + return TEModel.T5_BASE + if "model.layers.0.post_attention_layernorm.weight" in sd: + return TEModel.LLAMA3_8 + return None + + +def t5xxl_detect(clip_data): + weight_name = "encoder.block.23.layer.1.DenseReluDense.wi_1.weight" + + for sd in clip_data: + if weight_name in sd: + return comfy.text_encoders.sd3_clip.t5_xxl_detect(sd) + + return {} + +def llama_detect(clip_data): + weight_name = "model.layers.0.self_attn.k_proj.weight" + + for sd in clip_data: + if weight_name in sd: + return comfy.text_encoders.hunyuan_video.llama_detect(sd) + + return {} + def load_text_encoder_state_dicts(state_dicts=[], embedding_directory=None, clip_type=CLIPType.STABLE_DIFFUSION, model_options={}): clip_data = state_dicts + class EmptyClass: pass @@ -421,64 +628,71 @@ def load_text_encoder_state_dicts(state_dicts=[], embedding_directory=None, clip clip_target = EmptyClass() clip_target.params = {} if len(clip_data) == 1: - if "text_model.encoder.layers.30.mlp.fc1.weight" in clip_data[0]: + te_model = detect_te_model(clip_data[0]) + if te_model == TEModel.CLIP_G: if clip_type == CLIPType.STABLE_CASCADE: clip_target.clip = sdxl_clip.StableCascadeClipModel clip_target.tokenizer = sdxl_clip.StableCascadeTokenizer + elif clip_type == CLIPType.SD3: + clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=False, clip_g=True, t5=False) + clip_target.tokenizer = comfy.text_encoders.sd3_clip.SD3Tokenizer else: clip_target.clip = sdxl_clip.SDXLRefinerClipModel clip_target.tokenizer = sdxl_clip.SDXLTokenizer - elif "text_model.encoder.layers.22.mlp.fc1.weight" in clip_data[0]: + elif te_model == TEModel.CLIP_H: clip_target.clip = comfy.text_encoders.sd2_clip.SD2ClipModel clip_target.tokenizer = comfy.text_encoders.sd2_clip.SD2Tokenizer - elif "encoder.block.23.layer.1.DenseReluDense.wi_1.weight" in clip_data[0]: - weight = clip_data[0]["encoder.block.23.layer.1.DenseReluDense.wi_1.weight"] - dtype_t5 = weight.dtype - if weight.shape[-1] == 4096: - clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=False, clip_g=False, t5=True, dtype_t5=dtype_t5) + elif te_model == TEModel.T5_XXL: + if clip_type == CLIPType.SD3: + clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=False, clip_g=False, t5=True, **t5xxl_detect(clip_data)) clip_target.tokenizer = comfy.text_encoders.sd3_clip.SD3Tokenizer - elif weight.shape[-1] == 2048: - clip_target.clip = comfy.text_encoders.aura_t5.AuraT5Model - clip_target.tokenizer = comfy.text_encoders.aura_t5.AuraT5Tokenizer - elif "encoder.block.0.layer.0.SelfAttention.k.weight" in clip_data[0]: + elif clip_type == CLIPType.LTXV: + clip_target.clip = comfy.text_encoders.lt.ltxv_te(**t5xxl_detect(clip_data)) + clip_target.tokenizer = comfy.text_encoders.lt.LTXVT5Tokenizer + else: #CLIPType.MOCHI + clip_target.clip = comfy.text_encoders.genmo.mochi_te(**t5xxl_detect(clip_data)) + clip_target.tokenizer = comfy.text_encoders.genmo.MochiT5Tokenizer + elif te_model == TEModel.T5_XL: + clip_target.clip = comfy.text_encoders.aura_t5.AuraT5Model + clip_target.tokenizer = comfy.text_encoders.aura_t5.AuraT5Tokenizer + elif te_model == TEModel.T5_BASE: clip_target.clip = comfy.text_encoders.sa_t5.SAT5Model clip_target.tokenizer = comfy.text_encoders.sa_t5.SAT5Tokenizer else: - w = clip_data[0].get("text_model.embeddings.position_embedding.weight", None) - if w is not None and w.shape[0] == 248: - clip_target.clip = comfy.text_encoders.long_clipl.LongClipModel - clip_target.tokenizer = comfy.text_encoders.long_clipl.LongClipTokenizer + if clip_type == CLIPType.SD3: + clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=True, clip_g=False, t5=False) + clip_target.tokenizer = comfy.text_encoders.sd3_clip.SD3Tokenizer else: clip_target.clip = sd1_clip.SD1ClipModel clip_target.tokenizer = sd1_clip.SD1Tokenizer elif len(clip_data) == 2: if clip_type == CLIPType.SD3: - clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=True, clip_g=True, t5=False) + te_models = [detect_te_model(clip_data[0]), detect_te_model(clip_data[1])] + clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(clip_l=TEModel.CLIP_L in te_models, clip_g=TEModel.CLIP_G in te_models, t5=TEModel.T5_XXL in te_models, **t5xxl_detect(clip_data)) clip_target.tokenizer = comfy.text_encoders.sd3_clip.SD3Tokenizer elif clip_type == CLIPType.HUNYUAN_DIT: clip_target.clip = comfy.text_encoders.hydit.HyditModel clip_target.tokenizer = comfy.text_encoders.hydit.HyditTokenizer elif clip_type == CLIPType.FLUX: - weight_name = "encoder.block.23.layer.1.DenseReluDense.wi_1.weight" - weight = clip_data[0].get(weight_name, clip_data[1].get(weight_name, None)) - dtype_t5 = None - if weight is not None: - dtype_t5 = weight.dtype - - clip_target.clip = comfy.text_encoders.flux.flux_clip(dtype_t5=dtype_t5) + clip_target.clip = comfy.text_encoders.flux.flux_clip(**t5xxl_detect(clip_data)) clip_target.tokenizer = comfy.text_encoders.flux.FluxTokenizer + elif clip_type == CLIPType.HUNYUAN_VIDEO: + clip_target.clip = comfy.text_encoders.hunyuan_video.hunyuan_video_clip(**llama_detect(clip_data)) + clip_target.tokenizer = comfy.text_encoders.hunyuan_video.HunyuanVideoTokenizer else: clip_target.clip = sdxl_clip.SDXLClipModel clip_target.tokenizer = sdxl_clip.SDXLTokenizer elif len(clip_data) == 3: - clip_target.clip = comfy.text_encoders.sd3_clip.SD3ClipModel + clip_target.clip = comfy.text_encoders.sd3_clip.sd3_clip(**t5xxl_detect(clip_data)) clip_target.tokenizer = comfy.text_encoders.sd3_clip.SD3Tokenizer parameters = 0 + tokenizer_data = {} for c in clip_data: parameters += comfy.utils.calculate_parameters(c) + tokenizer_data, model_options = comfy.text_encoders.long_clipl.model_options_long_clip(c, tokenizer_data, model_options) - clip = CLIP(clip_target, embedding_directory=embedding_directory, parameters=parameters, model_options=model_options) + clip = CLIP(clip_target, embedding_directory=embedding_directory, parameters=parameters, tokenizer_data=tokenizer_data, model_options=model_options) for c in clip_data: m, u = clip.load_sd(c) if len(m) > 0: @@ -504,7 +718,6 @@ def load_checkpoint(config_path=None, ckpt_path=None, output_vae=True, output_cl config = yaml.safe_load(stream) model_config_params = config['model']['params'] clip_config = model_config_params['cond_stage_config'] - scale_factor = model_config_params['scale_factor'] if "parameterization" in model_config_params: if model_config_params["parameterization"] == "v": @@ -544,11 +757,11 @@ def load_state_dict_guess_config(sd, output_vae=True, output_clip=True, output_c return None unet_weight_dtype = list(model_config.supported_inference_dtypes) - if weight_dtype is not None: + if weight_dtype is not None and model_config.scaled_fp8 is None: unet_weight_dtype.append(weight_dtype) model_config.custom_operations = model_options.get("custom_operations", None) - unet_dtype = model_options.get("weight_dtype", None) + unet_dtype = model_options.get("dtype", model_options.get("weight_dtype", None)) if unet_dtype is None: unet_dtype = model_management.unet_dtype(model_params=parameters, supported_dtypes=unet_weight_dtype) @@ -562,7 +775,6 @@ def load_state_dict_guess_config(sd, output_vae=True, output_clip=True, output_c if output_model: inital_load_device = model_management.unet_inital_load_device(parameters, unet_dtype) - offload_device = model_management.unet_offload_device() model = model_config.get_model(sd, diffusion_model_prefix, device=inital_load_device) model.load_model_weights(sd, diffusion_model_prefix) @@ -614,6 +826,8 @@ def load_diffusion_model_state_dict(sd, model_options={}): #load unet in diffuse sd = temp_sd parameters = comfy.utils.calculate_parameters(sd) + weight_dtype = comfy.utils.weight_dtype(sd) + load_device = model_management.get_torch_device() model_config = model_detection.model_config_from_unet(sd, "") @@ -640,14 +854,21 @@ def load_diffusion_model_state_dict(sd, model_options={}): #load unet in diffuse logging.warning("{} {}".format(diffusers_keys[k], k)) offload_device = model_management.unet_offload_device() + unet_weight_dtype = list(model_config.supported_inference_dtypes) + if weight_dtype is not None and model_config.scaled_fp8 is None: + unet_weight_dtype.append(weight_dtype) + if dtype is None: - unet_dtype = model_management.unet_dtype(model_params=parameters, supported_dtypes=model_config.supported_inference_dtypes) + unet_dtype = model_management.unet_dtype(model_params=parameters, supported_dtypes=unet_weight_dtype) else: unet_dtype = dtype manual_cast_dtype = model_management.unet_manual_cast(unet_dtype, load_device, model_config.supported_inference_dtypes) model_config.set_inference_dtype(unet_dtype, manual_cast_dtype) - model_config.custom_operations = model_options.get("custom_operations", None) + model_config.custom_operations = model_options.get("custom_operations", model_config.custom_operations) + if model_options.get("fp8_optimizations", False): + model_config.optimizations["fp8"] = True + model = model_config.get_model(new_sd, "") model = model.to(offload_device) model.load_model_weights(new_sd, "") diff --git a/comfy/sd1_clip.py b/comfy/sd1_clip.py index 676653f77..c0fe1ba52 100644 --- a/comfy/sd1_clip.py +++ b/comfy/sd1_clip.py @@ -10,6 +10,7 @@ import comfy.clip_model import json import logging import numbers +import re def gen_empty_tokens(special_tokens, length): start_token = special_tokens.get("start", None) @@ -80,7 +81,7 @@ class SDClipModel(torch.nn.Module, ClipTokenWeightEncoder): "pooled", "hidden" ] - def __init__(self, version="openai/clip-vit-large-patch14", device="cpu", max_length=77, + def __init__(self, device="cpu", max_length=77, freeze=True, layer="last", layer_idx=None, textmodel_json_config=None, dtype=None, model_class=comfy.clip_model.CLIPTextModel, special_tokens={"start": 49406, "end": 49407, "pad": 49407}, layer_norm_hidden_state=True, enable_attention_masks=False, zero_out_masked=False, return_projected_pooled=True, return_attention_masks=False, model_options={}): # clip-vit-base-patch32 @@ -90,15 +91,27 @@ class SDClipModel(torch.nn.Module, ClipTokenWeightEncoder): if textmodel_json_config is None: textmodel_json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "sd1_clip_config.json") - with open(textmodel_json_config) as f: - config = json.load(f) + if isinstance(textmodel_json_config, dict): + config = textmodel_json_config + else: + with open(textmodel_json_config) as f: + config = json.load(f) operations = model_options.get("custom_operations", None) + scaled_fp8 = None + if operations is None: - operations = comfy.ops.manual_cast + scaled_fp8 = model_options.get("scaled_fp8", None) + if scaled_fp8 is not None: + operations = comfy.ops.scaled_fp8_ops(fp8_matrix_mult=False, override_dtype=scaled_fp8) + else: + operations = comfy.ops.manual_cast self.operations = operations self.transformer = model_class(config, dtype, device, self.operations) + if scaled_fp8 is not None: + self.transformer.scaled_fp8 = torch.nn.Parameter(torch.tensor([], dtype=scaled_fp8)) + self.num_layers = self.transformer.num_layers self.max_length = max_length @@ -187,11 +200,18 @@ class SDClipModel(torch.nn.Module, ClipTokenWeightEncoder): attention_mask = None if self.enable_attention_masks or self.zero_out_masked or self.return_attention_masks: attention_mask = torch.zeros_like(tokens) - end_token = self.special_tokens.get("end", -1) + end_token = self.special_tokens.get("end", None) + if end_token is None: + cmp_token = self.special_tokens.get("pad", -1) + else: + cmp_token = end_token + for x in range(attention_mask.shape[0]): for y in range(attention_mask.shape[1]): attention_mask[x, y] = 1 - if tokens[x, y] == end_token: + if tokens[x, y] == cmp_token: + if end_token is None: + attention_mask[x, y] = 0 break attention_mask_model = None @@ -317,7 +337,6 @@ def expand_directory_list(directories): return list(dirs) def bundled_embed(embed, prefix, suffix): #bundled embedding in lora format - i = 0 out_list = [] for k in embed: if k.startswith(prefix) and k.endswith(suffix): @@ -373,7 +392,7 @@ def load_embed(embedding_name, embedding_directory, embedding_size, embed_key=No embed_out = safe_load_embed_zip(embed_path) else: embed = torch.load(embed_path, map_location="cpu") - except Exception as e: + except Exception: logging.warning("{}\n\nerror loading embedding, skipping loading: {}".format(traceback.format_exc(), embedding_name)) return None @@ -402,22 +421,31 @@ def load_embed(embedding_name, embedding_directory, embedding_size, embed_key=No return embed_out class SDTokenizer: - def __init__(self, tokenizer_path=None, max_length=77, pad_with_end=True, embedding_directory=None, embedding_size=768, embedding_key='clip_l', tokenizer_class=CLIPTokenizer, has_start_token=True, pad_to_max_length=True, min_length=None, pad_token=None, tokenizer_data={}): + def __init__(self, tokenizer_path=None, max_length=77, pad_with_end=True, embedding_directory=None, embedding_size=768, embedding_key='clip_l', tokenizer_class=CLIPTokenizer, has_start_token=True, has_end_token=True, pad_to_max_length=True, min_length=None, pad_token=None, end_token=None, tokenizer_data={}): if tokenizer_path is None: tokenizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "sd1_tokenizer") self.tokenizer = tokenizer_class.from_pretrained(tokenizer_path) self.max_length = max_length self.min_length = min_length + self.end_token = None empty = self.tokenizer('')["input_ids"] + self.tokenizer_adds_end_token = has_end_token if has_start_token: self.tokens_start = 1 self.start_token = empty[0] - self.end_token = empty[1] + if end_token is not None: + self.end_token = end_token + else: + if has_end_token: + self.end_token = empty[1] else: self.tokens_start = 0 self.start_token = None - self.end_token = empty[0] + if end_token is not None: + self.end_token = end_token + else: + self.end_token = empty[0] if pad_token is not None: self.pad_token = pad_token @@ -442,13 +470,16 @@ class SDTokenizer: Takes a potential embedding name and tries to retrieve it. Returns a Tuple consisting of the embedding and any leftover string, embedding can be None. ''' + split_embed = embedding_name.split() + embedding_name = split_embed[0] + leftover = ' '.join(split_embed[1:]) embed = load_embed(embedding_name, self.embedding_directory, self.embedding_size, self.embedding_key) if embed is None: stripped = embedding_name.strip(',') if len(stripped) < len(embedding_name): embed = load_embed(stripped, self.embedding_directory, self.embedding_size, self.embedding_key) - return (embed, embedding_name[len(stripped):]) - return (embed, "") + return (embed, "{} {}".format(embedding_name[len(stripped):], leftover)) + return (embed, leftover) def tokenize_with_weights(self, text:str, return_word_ids=False): @@ -462,13 +493,18 @@ class SDTokenizer: text = escape_important(text) parsed_weights = token_weights(text, 1.0) - #tokenize words + # tokenize words tokens = [] for weighted_segment, weight in parsed_weights: - to_tokenize = unescape_important(weighted_segment).replace("\n", " ").split(' ') + to_tokenize = unescape_important(weighted_segment) + split = re.split(' {0}|\n{0}'.format(self.embedding_identifier), to_tokenize) + to_tokenize = [split[0]] + for i in range(1, len(split)): + to_tokenize.append("{}{}".format(self.embedding_identifier, split[i])) + to_tokenize = [x for x in to_tokenize if x != ""] for word in to_tokenize: - #if we find an embedding, deal with the embedding + # if we find an embedding, deal with the embedding if word.startswith(self.embedding_identifier) and self.embedding_directory is not None: embedding_name = word[len(self.embedding_identifier):].strip('\n') embed, leftover = self._try_get_embedding(embedding_name) @@ -484,8 +520,11 @@ class SDTokenizer: word = leftover else: continue + end = 999999999999 + if self.tokenizer_adds_end_token: + end = -1 #parse word - tokens.append([(t, weight) for t in self.tokenizer(word)["input_ids"][self.tokens_start:-1]]) + tokens.append([(t, weight) for t in self.tokenizer(word)["input_ids"][self.tokens_start:end]]) #reshape token array to CLIP input size batched_tokens = [] @@ -496,18 +535,24 @@ class SDTokenizer: for i, t_group in enumerate(tokens): #determine if we're going to try and keep the tokens in a single batch is_large = len(t_group) >= self.max_word_length + if self.end_token is not None: + has_end_token = 1 + else: + has_end_token = 0 while len(t_group) > 0: - if len(t_group) + len(batch) > self.max_length - 1: - remaining_length = self.max_length - len(batch) - 1 + if len(t_group) + len(batch) > self.max_length - has_end_token: + remaining_length = self.max_length - len(batch) - has_end_token #break word in two and add end token if is_large: batch.extend([(t,w,i+1) for t,w in t_group[:remaining_length]]) - batch.append((self.end_token, 1.0, 0)) + if self.end_token is not None: + batch.append((self.end_token, 1.0, 0)) t_group = t_group[remaining_length:] #add end token and pad else: - batch.append((self.end_token, 1.0, 0)) + if self.end_token is not None: + batch.append((self.end_token, 1.0, 0)) if self.pad_to_max_length: batch.extend([(self.pad_token, 1.0, 0)] * (remaining_length)) #start new batch @@ -520,7 +565,8 @@ class SDTokenizer: t_group = [] #fill last batch - batch.append((self.end_token, 1.0, 0)) + if self.end_token is not None: + batch.append((self.end_token, 1.0, 0)) if self.pad_to_max_length: batch.extend([(self.pad_token, 1.0, 0)] * (self.max_length - len(batch))) if self.min_length is not None and len(batch) < self.min_length: @@ -542,6 +588,7 @@ class SD1Tokenizer: def __init__(self, embedding_directory=None, tokenizer_data={}, clip_name="l", tokenizer=SDTokenizer): self.clip_name = clip_name self.clip = "clip_{}".format(self.clip_name) + tokenizer = tokenizer_data.get("{}_tokenizer_class".format(self.clip), tokenizer) setattr(self, self.clip, tokenizer(embedding_directory=embedding_directory, tokenizer_data=tokenizer_data)) def tokenize_with_weights(self, text:str, return_word_ids=False): @@ -570,6 +617,7 @@ class SD1ClipModel(torch.nn.Module): self.clip_name = clip_name self.clip = "clip_{}".format(self.clip_name) + clip_model = model_options.get("{}_class".format(self.clip), clip_model) setattr(self, self.clip, clip_model(device=device, dtype=dtype, model_options=model_options, **kwargs)) self.dtypes = set() diff --git a/comfy/sdxl_clip.py b/comfy/sdxl_clip.py index a0145caa4..4d0a4e8e7 100644 --- a/comfy/sdxl_clip.py +++ b/comfy/sdxl_clip.py @@ -22,7 +22,8 @@ class SDXLClipGTokenizer(sd1_clip.SDTokenizer): class SDXLTokenizer: def __init__(self, embedding_directory=None, tokenizer_data={}): - self.clip_l = sd1_clip.SDTokenizer(embedding_directory=embedding_directory) + clip_l_tokenizer_class = tokenizer_data.get("clip_l_tokenizer_class", sd1_clip.SDTokenizer) + self.clip_l = clip_l_tokenizer_class(embedding_directory=embedding_directory) self.clip_g = SDXLClipGTokenizer(embedding_directory=embedding_directory) def tokenize_with_weights(self, text:str, return_word_ids=False): @@ -40,7 +41,8 @@ class SDXLTokenizer: class SDXLClipModel(torch.nn.Module): def __init__(self, device="cpu", dtype=None, model_options={}): super().__init__() - self.clip_l = sd1_clip.SDClipModel(layer="hidden", layer_idx=-2, device=device, dtype=dtype, layer_norm_hidden_state=False, model_options=model_options) + clip_l_class = model_options.get("clip_l_class", sd1_clip.SDClipModel) + self.clip_l = clip_l_class(layer="hidden", layer_idx=-2, device=device, dtype=dtype, layer_norm_hidden_state=False, model_options=model_options) self.clip_g = SDXLClipG(device=device, dtype=dtype, model_options=model_options) self.dtypes = set([dtype]) @@ -57,7 +59,8 @@ class SDXLClipModel(torch.nn.Module): token_weight_pairs_l = token_weight_pairs["l"] g_out, g_pooled = self.clip_g.encode_token_weights(token_weight_pairs_g) l_out, l_pooled = self.clip_l.encode_token_weights(token_weight_pairs_l) - return torch.cat([l_out, g_out], dim=-1), g_pooled + cut_to = min(l_out.shape[1], g_out.shape[1]) + return torch.cat([l_out[:,:cut_to], g_out[:,:cut_to]], dim=-1), g_pooled def load_sd(self, sd): if "text_model.encoder.layers.30.mlp.fc1.weight" in sd: diff --git a/comfy/supported_models.py b/comfy/supported_models.py index 3603313fa..68e2b13fa 100644 --- a/comfy/supported_models.py +++ b/comfy/supported_models.py @@ -10,6 +10,9 @@ import comfy.text_encoders.sa_t5 import comfy.text_encoders.aura_t5 import comfy.text_encoders.hydit import comfy.text_encoders.flux +import comfy.text_encoders.genmo +import comfy.text_encoders.lt +import comfy.text_encoders.hunyuan_video from . import supported_models_base from . import latent_formats @@ -196,6 +199,8 @@ class SDXL(supported_models_base.BASE): self.sampling_settings["sigma_min"] = float(state_dict["edm_vpred.sigma_min"].item()) return model_base.ModelType.V_PREDICTION_EDM elif "v_pred" in state_dict: + if "ztsnr" in state_dict: #Some zsnr anime checkpoints + self.sampling_settings["zsnr"] = True return model_base.ModelType.V_PREDICTION else: return model_base.ModelType.EPS @@ -220,7 +225,6 @@ class SDXL(supported_models_base.BASE): def process_clip_state_dict_for_saving(self, state_dict): replace_prefix = {} - keys_to_replace = {} state_dict_g = diffusers_convert.convert_text_enc_state_dict_v20(state_dict, "clip_g") for k in state_dict: if k.startswith("clip_l"): @@ -523,18 +527,16 @@ class SD3(supported_models_base.BASE): clip_l = False clip_g = False t5 = False - dtype_t5 = None pref = self.text_encoder_key_prefix[0] if "{}clip_l.transformer.text_model.final_layer_norm.weight".format(pref) in state_dict: clip_l = True if "{}clip_g.transformer.text_model.final_layer_norm.weight".format(pref) in state_dict: clip_g = True - t5_key = "{}t5xxl.transformer.encoder.final_layer_norm.weight".format(pref) - if t5_key in state_dict: + t5_detect = comfy.text_encoders.sd3_clip.t5_xxl_detect(state_dict, "{}t5xxl.transformer.".format(pref)) + if "dtype_t5" in t5_detect: t5 = True - dtype_t5 = state_dict[t5_key].dtype - return supported_models_base.ClipTarget(comfy.text_encoders.sd3_clip.SD3Tokenizer, comfy.text_encoders.sd3_clip.sd3_clip(clip_l=clip_l, clip_g=clip_g, t5=t5, dtype_t5=dtype_t5)) + return supported_models_base.ClipTarget(comfy.text_encoders.sd3_clip.SD3Tokenizer, comfy.text_encoders.sd3_clip.sd3_clip(clip_l=clip_l, clip_g=clip_g, t5=t5, **t5_detect)) class StableAudio(supported_models_base.BASE): unet_config = { @@ -653,11 +655,17 @@ class Flux(supported_models_base.BASE): def clip_target(self, state_dict={}): pref = self.text_encoder_key_prefix[0] - t5_key = "{}t5xxl.transformer.encoder.final_layer_norm.weight".format(pref) - dtype_t5 = None - if t5_key in state_dict: - dtype_t5 = state_dict[t5_key].dtype - return supported_models_base.ClipTarget(comfy.text_encoders.flux.FluxTokenizer, comfy.text_encoders.flux.flux_clip(dtype_t5=dtype_t5)) + t5_detect = comfy.text_encoders.sd3_clip.t5_xxl_detect(state_dict, "{}t5xxl.transformer.".format(pref)) + return supported_models_base.ClipTarget(comfy.text_encoders.flux.FluxTokenizer, comfy.text_encoders.flux.flux_clip(**t5_detect)) + +class FluxInpaint(Flux): + unet_config = { + "image_model": "flux", + "guidance_embed": True, + "in_channels": 96, + } + + supported_inference_dtypes = [torch.bfloat16, torch.float32] class FluxSchnell(Flux): unet_config = { @@ -674,7 +682,111 @@ class FluxSchnell(Flux): out = model_base.Flux(self, model_type=model_base.ModelType.FLOW, device=device) return out +class GenmoMochi(supported_models_base.BASE): + unet_config = { + "image_model": "mochi_preview", + } -models = [Stable_Zero123, SD15_instructpix2pix, SD15, SD20, SD21UnclipL, SD21UnclipH, SDXL_instructpix2pix, SDXLRefiner, SDXL, SSD1B, KOALA_700M, KOALA_1B, Segmind_Vega, SD_X4Upscaler, Stable_Cascade_C, Stable_Cascade_B, SV3D_u, SV3D_p, SD3, StableAudio, AuraFlow, HunyuanDiT, HunyuanDiT1, Flux, FluxSchnell] + sampling_settings = { + "multiplier": 1.0, + "shift": 6.0, + } + + unet_extra_config = {} + latent_format = latent_formats.Mochi + + memory_usage_factor = 2.0 #TODO + + supported_inference_dtypes = [torch.bfloat16, torch.float32] + + vae_key_prefix = ["vae."] + text_encoder_key_prefix = ["text_encoders."] + + def get_model(self, state_dict, prefix="", device=None): + out = model_base.GenmoMochi(self, device=device) + return out + + def clip_target(self, state_dict={}): + pref = self.text_encoder_key_prefix[0] + t5_detect = comfy.text_encoders.sd3_clip.t5_xxl_detect(state_dict, "{}t5xxl.transformer.".format(pref)) + return supported_models_base.ClipTarget(comfy.text_encoders.genmo.MochiT5Tokenizer, comfy.text_encoders.genmo.mochi_te(**t5_detect)) + +class LTXV(supported_models_base.BASE): + unet_config = { + "image_model": "ltxv", + } + + sampling_settings = { + "shift": 2.37, + } + + unet_extra_config = {} + latent_format = latent_formats.LTXV + + memory_usage_factor = 2.7 + + supported_inference_dtypes = [torch.bfloat16, torch.float32] + + vae_key_prefix = ["vae."] + text_encoder_key_prefix = ["text_encoders."] + + def get_model(self, state_dict, prefix="", device=None): + out = model_base.LTXV(self, device=device) + return out + + def clip_target(self, state_dict={}): + pref = self.text_encoder_key_prefix[0] + t5_detect = comfy.text_encoders.sd3_clip.t5_xxl_detect(state_dict, "{}t5xxl.transformer.".format(pref)) + return supported_models_base.ClipTarget(comfy.text_encoders.lt.LTXVT5Tokenizer, comfy.text_encoders.lt.ltxv_te(**t5_detect)) + +class HunyuanVideo(supported_models_base.BASE): + unet_config = { + "image_model": "hunyuan_video", + } + + sampling_settings = { + "shift": 7.0, + } + + unet_extra_config = {} + latent_format = latent_formats.HunyuanVideo + + memory_usage_factor = 2.0 #TODO + + supported_inference_dtypes = [torch.bfloat16, torch.float32] + + vae_key_prefix = ["vae."] + text_encoder_key_prefix = ["text_encoders."] + + def get_model(self, state_dict, prefix="", device=None): + out = model_base.HunyuanVideo(self, device=device) + return out + + def process_unet_state_dict(self, state_dict): + out_sd = {} + for k in list(state_dict.keys()): + key_out = k + key_out = key_out.replace("txt_in.t_embedder.mlp.0.", "txt_in.t_embedder.in_layer.").replace("txt_in.t_embedder.mlp.2.", "txt_in.t_embedder.out_layer.") + key_out = key_out.replace("txt_in.c_embedder.linear_1.", "txt_in.c_embedder.in_layer.").replace("txt_in.c_embedder.linear_2.", "txt_in.c_embedder.out_layer.") + key_out = key_out.replace("_mod.linear.", "_mod.lin.").replace("_attn_qkv.", "_attn.qkv.") + key_out = key_out.replace("mlp.fc1.", "mlp.0.").replace("mlp.fc2.", "mlp.2.") + key_out = key_out.replace("_attn_q_norm.weight", "_attn.norm.query_norm.scale").replace("_attn_k_norm.weight", "_attn.norm.key_norm.scale") + key_out = key_out.replace(".q_norm.weight", ".norm.query_norm.scale").replace(".k_norm.weight", ".norm.key_norm.scale") + key_out = key_out.replace("_attn_proj.", "_attn.proj.") + key_out = key_out.replace(".modulation.linear.", ".modulation.lin.") + key_out = key_out.replace("_in.mlp.2.", "_in.out_layer.").replace("_in.mlp.0.", "_in.in_layer.") + out_sd[key_out] = state_dict[k] + return out_sd + + def process_unet_state_dict_for_saving(self, state_dict): + replace_prefix = {"": "model.model."} + return utils.state_dict_prefix_replace(state_dict, replace_prefix) + + def clip_target(self, state_dict={}): + pref = self.text_encoder_key_prefix[0] + hunyuan_detect = comfy.text_encoders.hunyuan_video.llama_detect(state_dict, "{}llama.transformer.".format(pref)) + return supported_models_base.ClipTarget(comfy.text_encoders.hunyuan_video.HunyuanVideoTokenizer, comfy.text_encoders.hunyuan_video.hunyuan_video_clip(**hunyuan_detect)) + +models = [Stable_Zero123, SD15_instructpix2pix, SD15, SD20, SD21UnclipL, SD21UnclipH, SDXL_instructpix2pix, SDXLRefiner, SDXL, SSD1B, KOALA_700M, KOALA_1B, Segmind_Vega, SD_X4Upscaler, Stable_Cascade_C, Stable_Cascade_B, SV3D_u, SV3D_p, SD3, StableAudio, AuraFlow, HunyuanDiT, HunyuanDiT1, FluxInpaint, Flux, FluxSchnell, GenmoMochi, LTXV, HunyuanVideo] models += [SVD_img2vid] diff --git a/comfy/supported_models_base.py b/comfy/supported_models_base.py index 7a2152f91..54573abb1 100644 --- a/comfy/supported_models_base.py +++ b/comfy/supported_models_base.py @@ -49,6 +49,8 @@ class BASE: manual_cast_dtype = None custom_operations = None + scaled_fp8 = None + optimizations = {"fp8": False} @classmethod def matches(s, unet_config, state_dict=None): @@ -71,6 +73,7 @@ class BASE: self.unet_config = unet_config.copy() self.sampling_settings = self.sampling_settings.copy() self.latent_format = self.latent_format() + self.optimizations = self.optimizations.copy() for x in self.unet_extra_config: self.unet_config[x] = self.unet_extra_config[x] diff --git a/comfy/text_encoders/flux.py b/comfy/text_encoders/flux.py index 91d1f249d..b945b1aaa 100644 --- a/comfy/text_encoders/flux.py +++ b/comfy/text_encoders/flux.py @@ -1,24 +1,21 @@ from comfy import sd1_clip import comfy.text_encoders.t5 +import comfy.text_encoders.sd3_clip import comfy.model_management from transformers import T5TokenizerFast import torch import os -class T5XXLModel(sd1_clip.SDClipModel): - def __init__(self, device="cpu", layer="last", layer_idx=None, dtype=None, model_options={}): - textmodel_json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "t5_config_xxl.json") - super().__init__(device=device, layer=layer, layer_idx=layer_idx, textmodel_json_config=textmodel_json_config, dtype=dtype, special_tokens={"end": 1, "pad": 0}, model_class=comfy.text_encoders.t5.T5, model_options=model_options) - class T5XXLTokenizer(sd1_clip.SDTokenizer): def __init__(self, embedding_directory=None, tokenizer_data={}): tokenizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "t5_tokenizer") - super().__init__(tokenizer_path, pad_with_end=False, embedding_size=4096, embedding_key='t5xxl', tokenizer_class=T5TokenizerFast, has_start_token=False, pad_to_max_length=False, max_length=99999999, min_length=256) + super().__init__(tokenizer_path, embedding_directory=embedding_directory, pad_with_end=False, embedding_size=4096, embedding_key='t5xxl', tokenizer_class=T5TokenizerFast, has_start_token=False, pad_to_max_length=False, max_length=99999999, min_length=256) class FluxTokenizer: def __init__(self, embedding_directory=None, tokenizer_data={}): - self.clip_l = sd1_clip.SDTokenizer(embedding_directory=embedding_directory) + clip_l_tokenizer_class = tokenizer_data.get("clip_l_tokenizer_class", sd1_clip.SDTokenizer) + self.clip_l = clip_l_tokenizer_class(embedding_directory=embedding_directory) self.t5xxl = T5XXLTokenizer(embedding_directory=embedding_directory) def tokenize_with_weights(self, text:str, return_word_ids=False): @@ -38,8 +35,9 @@ class FluxClipModel(torch.nn.Module): def __init__(self, dtype_t5=None, device="cpu", dtype=None, model_options={}): super().__init__() dtype_t5 = comfy.model_management.pick_weight_dtype(dtype_t5, dtype, device) - self.clip_l = sd1_clip.SDClipModel(device=device, dtype=dtype, return_projected_pooled=False, model_options=model_options) - self.t5xxl = T5XXLModel(device=device, dtype=dtype_t5, model_options=model_options) + clip_l_class = model_options.get("clip_l_class", sd1_clip.SDClipModel) + self.clip_l = clip_l_class(device=device, dtype=dtype, return_projected_pooled=False, model_options=model_options) + self.t5xxl = comfy.text_encoders.sd3_clip.T5XXLModel(device=device, dtype=dtype_t5, model_options=model_options) self.dtypes = set([dtype, dtype_t5]) def set_clip_options(self, options): @@ -64,8 +62,11 @@ class FluxClipModel(torch.nn.Module): else: return self.t5xxl.load_sd(sd) -def flux_clip(dtype_t5=None): +def flux_clip(dtype_t5=None, t5xxl_scaled_fp8=None): class FluxClipModel_(FluxClipModel): def __init__(self, device="cpu", dtype=None, model_options={}): + if t5xxl_scaled_fp8 is not None and "t5xxl_scaled_fp8" not in model_options: + model_options = model_options.copy() + model_options["t5xxl_scaled_fp8"] = t5xxl_scaled_fp8 super().__init__(dtype_t5=dtype_t5, device=device, dtype=dtype, model_options=model_options) return FluxClipModel_ diff --git a/comfy/text_encoders/genmo.py b/comfy/text_encoders/genmo.py new file mode 100644 index 000000000..45987a480 --- /dev/null +++ b/comfy/text_encoders/genmo.py @@ -0,0 +1,38 @@ +from comfy import sd1_clip +import comfy.text_encoders.sd3_clip +import os +from transformers import T5TokenizerFast + + +class T5XXLModel(comfy.text_encoders.sd3_clip.T5XXLModel): + def __init__(self, **kwargs): + kwargs["attention_mask"] = True + super().__init__(**kwargs) + + +class MochiT5XXL(sd1_clip.SD1ClipModel): + def __init__(self, device="cpu", dtype=None, model_options={}): + super().__init__(device=device, dtype=dtype, name="t5xxl", clip_model=T5XXLModel, model_options=model_options) + + +class T5XXLTokenizer(sd1_clip.SDTokenizer): + def __init__(self, embedding_directory=None, tokenizer_data={}): + tokenizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "t5_tokenizer") + super().__init__(tokenizer_path, embedding_directory=embedding_directory, pad_with_end=False, embedding_size=4096, embedding_key='t5xxl', tokenizer_class=T5TokenizerFast, has_start_token=False, pad_to_max_length=False, max_length=99999999, min_length=256) + + +class MochiT5Tokenizer(sd1_clip.SD1Tokenizer): + def __init__(self, embedding_directory=None, tokenizer_data={}): + super().__init__(embedding_directory=embedding_directory, tokenizer_data=tokenizer_data, clip_name="t5xxl", tokenizer=T5XXLTokenizer) + + +def mochi_te(dtype_t5=None, t5xxl_scaled_fp8=None): + class MochiTEModel_(MochiT5XXL): + def __init__(self, device="cpu", dtype=None, model_options={}): + if t5xxl_scaled_fp8 is not None and "t5xxl_scaled_fp8" not in model_options: + model_options = model_options.copy() + model_options["t5xxl_scaled_fp8"] = t5xxl_scaled_fp8 + if dtype is None: + dtype = dtype_t5 + super().__init__(device=device, dtype=dtype, model_options=model_options) + return MochiTEModel_ diff --git a/comfy/text_encoders/hunyuan_video.py b/comfy/text_encoders/hunyuan_video.py new file mode 100644 index 000000000..7149d6878 --- /dev/null +++ b/comfy/text_encoders/hunyuan_video.py @@ -0,0 +1,112 @@ +from comfy import sd1_clip +import comfy.model_management +import comfy.text_encoders.llama +from transformers import LlamaTokenizerFast +import torch +import os + + +def llama_detect(state_dict, prefix=""): + out = {} + t5_key = "{}model.norm.weight".format(prefix) + if t5_key in state_dict: + out["dtype_llama"] = state_dict[t5_key].dtype + + scaled_fp8_key = "{}scaled_fp8".format(prefix) + if scaled_fp8_key in state_dict: + out["llama_scaled_fp8"] = state_dict[scaled_fp8_key].dtype + + return out + + +class LLAMA3Tokenizer(sd1_clip.SDTokenizer): + def __init__(self, embedding_directory=None, tokenizer_data={}, min_length=256): + tokenizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "llama_tokenizer") + super().__init__(tokenizer_path, embedding_directory=embedding_directory, pad_with_end=False, embedding_size=4096, embedding_key='llama', tokenizer_class=LlamaTokenizerFast, has_start_token=True, has_end_token=False, pad_to_max_length=False, max_length=99999999, pad_token=128258, end_token=128009, min_length=min_length) + +class LLAMAModel(sd1_clip.SDClipModel): + def __init__(self, device="cpu", layer="hidden", layer_idx=-3, dtype=None, attention_mask=True, model_options={}): + llama_scaled_fp8 = model_options.get("llama_scaled_fp8", None) + if llama_scaled_fp8 is not None: + model_options = model_options.copy() + model_options["scaled_fp8"] = llama_scaled_fp8 + + super().__init__(device=device, layer=layer, layer_idx=layer_idx, textmodel_json_config={}, dtype=dtype, special_tokens={"start": 128000, "pad": 128258}, layer_norm_hidden_state=False, model_class=comfy.text_encoders.llama.Llama2, enable_attention_masks=attention_mask, return_attention_masks=attention_mask, model_options=model_options) + + +class HunyuanVideoTokenizer: + def __init__(self, embedding_directory=None, tokenizer_data={}): + clip_l_tokenizer_class = tokenizer_data.get("clip_l_tokenizer_class", sd1_clip.SDTokenizer) + self.clip_l = clip_l_tokenizer_class(embedding_directory=embedding_directory) + self.llama_template = """<|start_header_id|>system<|end_header_id|>\n\nDescribe the video by detailing the following aspects: 1. The main content and theme of the video.2. The color, shape, size, texture, quantity, text, and spatial relationships of the objects.3. Actions, events, behaviors temporal relationships, physical movement changes of the objects.4. background environment, light, style and atmosphere.5. camera angles, movements, and transitions used in the video:<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n""" # 95 tokens + self.llama = LLAMA3Tokenizer(embedding_directory=embedding_directory, min_length=1) + + def tokenize_with_weights(self, text:str, return_word_ids=False): + out = {} + out["l"] = self.clip_l.tokenize_with_weights(text, return_word_ids) + + llama_text = "{}{}".format(self.llama_template, text) + out["llama"] = self.llama.tokenize_with_weights(llama_text, return_word_ids) + return out + + def untokenize(self, token_weight_pair): + return self.clip_l.untokenize(token_weight_pair) + + def state_dict(self): + return {} + + +class HunyuanVideoClipModel(torch.nn.Module): + def __init__(self, dtype_llama=None, device="cpu", dtype=None, model_options={}): + super().__init__() + dtype_llama = comfy.model_management.pick_weight_dtype(dtype_llama, dtype, device) + clip_l_class = model_options.get("clip_l_class", sd1_clip.SDClipModel) + self.clip_l = clip_l_class(device=device, dtype=dtype, return_projected_pooled=False, model_options=model_options) + self.llama = LLAMAModel(device=device, dtype=dtype_llama, model_options=model_options) + self.dtypes = set([dtype, dtype_llama]) + + def set_clip_options(self, options): + self.clip_l.set_clip_options(options) + self.llama.set_clip_options(options) + + def reset_clip_options(self): + self.clip_l.reset_clip_options() + self.llama.reset_clip_options() + + def encode_token_weights(self, token_weight_pairs): + token_weight_pairs_l = token_weight_pairs["l"] + token_weight_pairs_llama = token_weight_pairs["llama"] + + llama_out, llama_pooled, llama_extra_out = self.llama.encode_token_weights(token_weight_pairs_llama) + + template_end = 0 + for i, v in enumerate(token_weight_pairs_llama[0]): + if v[0] == 128007: # <|end_header_id|> + template_end = i + + if llama_out.shape[1] > (template_end + 2): + if token_weight_pairs_llama[0][template_end + 1][0] == 271: + template_end += 2 + llama_out = llama_out[:, template_end:] + llama_extra_out["attention_mask"] = llama_extra_out["attention_mask"][:, template_end:] + if llama_extra_out["attention_mask"].sum() == torch.numel(llama_extra_out["attention_mask"]): + llama_extra_out.pop("attention_mask") # attention mask is useless if no masked elements + + l_out, l_pooled = self.clip_l.encode_token_weights(token_weight_pairs_l) + return llama_out, l_pooled, llama_extra_out + + def load_sd(self, sd): + if "text_model.encoder.layers.1.mlp.fc1.weight" in sd: + return self.clip_l.load_sd(sd) + else: + return self.llama.load_sd(sd) + + +def hunyuan_video_clip(dtype_llama=None, llama_scaled_fp8=None): + class HunyuanVideoClipModel_(HunyuanVideoClipModel): + def __init__(self, device="cpu", dtype=None, model_options={}): + if llama_scaled_fp8 is not None and "llama_scaled_fp8" not in model_options: + model_options = model_options.copy() + model_options["llama_scaled_fp8"] = llama_scaled_fp8 + super().__init__(dtype_llama=dtype_llama, device=device, dtype=dtype, model_options=model_options) + return HunyuanVideoClipModel_ diff --git a/comfy/text_encoders/llama.py b/comfy/text_encoders/llama.py new file mode 100644 index 000000000..ad4b4623e --- /dev/null +++ b/comfy/text_encoders/llama.py @@ -0,0 +1,226 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from dataclasses import dataclass +from typing import Optional, Any + +from comfy.ldm.modules.attention import optimized_attention_for_device +import comfy.model_management +import comfy.ldm.common_dit + +import comfy.model_management + +@dataclass +class Llama2Config: + vocab_size: int = 128320 + hidden_size: int = 4096 + intermediate_size: int = 14336 + num_hidden_layers: int = 32 + num_attention_heads: int = 32 + num_key_value_heads: int = 8 + max_position_embeddings: int = 8192 + rms_norm_eps: float = 1e-5 + rope_theta: float = 500000.0 + +class RMSNorm(nn.Module): + def __init__(self, dim: int, eps: float = 1e-5, device=None, dtype=None): + super().__init__() + self.eps = eps + self.weight = nn.Parameter(torch.empty(dim, device=device, dtype=dtype)) + + def forward(self, x: torch.Tensor): + return comfy.ldm.common_dit.rms_norm(x, self.weight, self.eps) + + +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def precompute_freqs_cis(head_dim, seq_len, theta, device=None): + theta_numerator = torch.arange(0, head_dim, 2, device=device).float() + inv_freq = 1.0 / (theta ** (theta_numerator / head_dim)) + + position_ids = torch.arange(0, seq_len, device=device).unsqueeze(0) + + inv_freq_expanded = inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1) + position_ids_expanded = position_ids[:, None, :].float() + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() + sin = emb.sin() + return (cos, sin) + + +def apply_rope(xq, xk, freqs_cis): + cos = freqs_cis[0].unsqueeze(1) + sin = freqs_cis[1].unsqueeze(1) + q_embed = (xq * cos) + (rotate_half(xq) * sin) + k_embed = (xk * cos) + (rotate_half(xk) * sin) + return q_embed, k_embed + + +class Attention(nn.Module): + def __init__(self, config: Llama2Config, device=None, dtype=None, ops: Any = None): + super().__init__() + self.num_heads = config.num_attention_heads + self.num_kv_heads = config.num_key_value_heads + self.hidden_size = config.hidden_size + self.head_dim = self.hidden_size // self.num_heads + + ops = ops or nn + self.q_proj = ops.Linear(config.hidden_size, config.hidden_size, bias=False, device=device, dtype=dtype) + self.k_proj = ops.Linear(config.hidden_size, self.num_kv_heads * self.head_dim, bias=False, device=device, dtype=dtype) + self.v_proj = ops.Linear(config.hidden_size, self.num_kv_heads * self.head_dim, bias=False, device=device, dtype=dtype) + self.o_proj = ops.Linear(config.hidden_size, config.hidden_size, bias=False, device=device, dtype=dtype) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + freqs_cis: Optional[torch.Tensor] = None, + optimized_attention=None, + ): + batch_size, seq_length, _ = hidden_states.shape + + xq = self.q_proj(hidden_states) + xk = self.k_proj(hidden_states) + xv = self.v_proj(hidden_states) + + xq = xq.view(batch_size, seq_length, self.num_heads, self.head_dim).transpose(1, 2) + xk = xk.view(batch_size, seq_length, self.num_kv_heads, self.head_dim).transpose(1, 2) + xv = xv.view(batch_size, seq_length, self.num_kv_heads, self.head_dim).transpose(1, 2) + + xq, xk = apply_rope(xq, xk, freqs_cis=freqs_cis) + + xk = xk.repeat_interleave(self.num_heads // self.num_kv_heads, dim=1) + xv = xv.repeat_interleave(self.num_heads // self.num_kv_heads, dim=1) + + output = optimized_attention(xq, xk, xv, self.num_heads, mask=attention_mask, skip_reshape=True) + return self.o_proj(output) + +class MLP(nn.Module): + def __init__(self, config: Llama2Config, device=None, dtype=None, ops: Any = None): + super().__init__() + ops = ops or nn + self.gate_proj = ops.Linear(config.hidden_size, config.intermediate_size, bias=False, device=device, dtype=dtype) + self.up_proj = ops.Linear(config.hidden_size, config.intermediate_size, bias=False, device=device, dtype=dtype) + self.down_proj = ops.Linear(config.intermediate_size, config.hidden_size, bias=False, device=device, dtype=dtype) + + def forward(self, x): + return self.down_proj(F.silu(self.gate_proj(x)) * self.up_proj(x)) + +class TransformerBlock(nn.Module): + def __init__(self, config: Llama2Config, device=None, dtype=None, ops: Any = None): + super().__init__() + self.self_attn = Attention(config, device=device, dtype=dtype, ops=ops) + self.mlp = MLP(config, device=device, dtype=dtype, ops=ops) + self.input_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps, device=device, dtype=dtype) + self.post_attention_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps, device=device, dtype=dtype) + + def forward( + self, + x: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + freqs_cis: Optional[torch.Tensor] = None, + optimized_attention=None, + ): + # Self Attention + residual = x + x = self.input_layernorm(x) + x = self.self_attn( + hidden_states=x, + attention_mask=attention_mask, + freqs_cis=freqs_cis, + optimized_attention=optimized_attention, + ) + x = residual + x + + # MLP + residual = x + x = self.post_attention_layernorm(x) + x = self.mlp(x) + x = residual + x + + return x + +class Llama2_(nn.Module): + def __init__(self, config, device=None, dtype=None, ops=None): + super().__init__() + self.config = config + self.vocab_size = config.vocab_size + + self.embed_tokens = ops.Embedding( + config.vocab_size, + config.hidden_size, + device=device, + dtype=dtype + ) + self.layers = nn.ModuleList([ + TransformerBlock(config, device=device, dtype=dtype, ops=ops) + for _ in range(config.num_hidden_layers) + ]) + self.norm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps, device=device, dtype=dtype) + # self.lm_head = ops.Linear(config.hidden_size, config.vocab_size, bias=False, device=device, dtype=dtype) + + def forward(self, x, attention_mask=None, intermediate_output=None, final_layer_norm_intermediate=True, dtype=None): + x = self.embed_tokens(x, out_dtype=dtype) + + freqs_cis = precompute_freqs_cis(self.config.hidden_size // self.config.num_attention_heads, + x.shape[1], + self.config.rope_theta, + device=x.device) + + mask = None + if attention_mask is not None: + mask = 1.0 - attention_mask.to(x.dtype).reshape((attention_mask.shape[0], 1, -1, attention_mask.shape[-1])).expand(attention_mask.shape[0], 1, attention_mask.shape[-1], attention_mask.shape[-1]) + mask = mask.masked_fill(mask.to(torch.bool), float("-inf")) + + causal_mask = torch.empty(x.shape[1], x.shape[1], dtype=x.dtype, device=x.device).fill_(float("-inf")).triu_(1) + if mask is not None: + mask += causal_mask + else: + mask = causal_mask + optimized_attention = optimized_attention_for_device(x.device, mask=mask is not None, small_input=True) + + intermediate = None + if intermediate_output is not None: + if intermediate_output < 0: + intermediate_output = len(self.layers) + intermediate_output + + for i, layer in enumerate(self.layers): + x = layer( + x=x, + attention_mask=mask, + freqs_cis=freqs_cis, + optimized_attention=optimized_attention, + ) + if i == intermediate_output: + intermediate = x.clone() + + x = self.norm(x) + if intermediate is not None and final_layer_norm_intermediate: + intermediate = self.norm(intermediate) + + return x, intermediate + + +class Llama2(torch.nn.Module): + def __init__(self, config_dict, dtype, device, operations): + super().__init__() + config = Llama2Config(**config_dict) + self.num_layers = config.num_hidden_layers + + self.model = Llama2_(config, device=device, dtype=dtype, ops=operations) + self.dtype = dtype + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, embeddings): + self.model.embed_tokens = embeddings + + def forward(self, input_ids, *args, **kwargs): + return self.model(input_ids, *args, **kwargs) diff --git a/comfy/text_encoders/llama_tokenizer/tokenizer.json b/comfy/text_encoders/llama_tokenizer/tokenizer.json new file mode 100644 index 000000000..99f23954b --- /dev/null +++ b/comfy/text_encoders/llama_tokenizer/tokenizer.json @@ -0,0 +1,410579 @@ +{ + "version": "1.0", + "truncation": null, + "padding": null, + "added_tokens": [ + { + "id": 128000, + "content": "<|begin_of_text|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128001, + "content": "<|end_of_text|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128002, + "content": "<|reserved_special_token_0|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128003, + "content": "<|reserved_special_token_1|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128004, + "content": "<|reserved_special_token_2|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128005, + "content": "<|reserved_special_token_3|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128006, + "content": "<|start_header_id|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128007, + "content": "<|end_header_id|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128008, + "content": "<|reserved_special_token_4|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128009, + "content": "<|eot_id|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128010, + "content": "<|reserved_special_token_5|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128011, + "content": "<|reserved_special_token_6|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128012, + "content": "<|reserved_special_token_7|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128013, + "content": "<|reserved_special_token_8|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128014, + "content": "<|reserved_special_token_9|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128015, + "content": "<|reserved_special_token_10|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128016, + "content": "<|reserved_special_token_11|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128017, + "content": "<|reserved_special_token_12|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128018, + "content": "<|reserved_special_token_13|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128019, + "content": "<|reserved_special_token_14|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128020, + "content": "<|reserved_special_token_15|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128021, + "content": "<|reserved_special_token_16|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128022, + "content": "<|reserved_special_token_17|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128023, + "content": "<|reserved_special_token_18|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128024, + "content": "<|reserved_special_token_19|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128025, + "content": "<|reserved_special_token_20|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128026, + "content": "<|reserved_special_token_21|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128027, + "content": "<|reserved_special_token_22|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128028, + "content": "<|reserved_special_token_23|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128029, + "content": "<|reserved_special_token_24|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128030, + "content": "<|reserved_special_token_25|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128031, + "content": "<|reserved_special_token_26|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128032, + "content": "<|reserved_special_token_27|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128033, + "content": "<|reserved_special_token_28|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128034, + "content": "<|reserved_special_token_29|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128035, + "content": "<|reserved_special_token_30|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128036, + "content": "<|reserved_special_token_31|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128037, + "content": "<|reserved_special_token_32|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128038, + "content": "<|reserved_special_token_33|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128039, + "content": "<|reserved_special_token_34|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128040, + "content": "<|reserved_special_token_35|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128041, + "content": "<|reserved_special_token_36|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128042, + "content": "<|reserved_special_token_37|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128043, + "content": "<|reserved_special_token_38|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128044, + "content": "<|reserved_special_token_39|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128045, + "content": "<|reserved_special_token_40|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128046, + "content": "<|reserved_special_token_41|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128047, + "content": "<|reserved_special_token_42|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128048, + "content": "<|reserved_special_token_43|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128049, + "content": "<|reserved_special_token_44|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128050, + "content": "<|reserved_special_token_45|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128051, + "content": "<|reserved_special_token_46|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128052, + "content": "<|reserved_special_token_47|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128053, + "content": "<|reserved_special_token_48|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128054, + "content": "<|reserved_special_token_49|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128055, + "content": "<|reserved_special_token_50|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128056, + "content": "<|reserved_special_token_51|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128057, + "content": "<|reserved_special_token_52|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128058, + "content": "<|reserved_special_token_53|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128059, + "content": "<|reserved_special_token_54|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128060, + "content": "<|reserved_special_token_55|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128061, + "content": "<|reserved_special_token_56|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128062, + "content": "<|reserved_special_token_57|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128063, + "content": "<|reserved_special_token_58|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128064, + "content": "<|reserved_special_token_59|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128065, + "content": "<|reserved_special_token_60|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128066, + "content": "<|reserved_special_token_61|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128067, + "content": "<|reserved_special_token_62|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128068, + "content": "<|reserved_special_token_63|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128069, + "content": "<|reserved_special_token_64|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128070, + "content": "<|reserved_special_token_65|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128071, + "content": "<|reserved_special_token_66|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128072, + "content": "<|reserved_special_token_67|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128073, + "content": "<|reserved_special_token_68|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128074, + "content": "<|reserved_special_token_69|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128075, + "content": "<|reserved_special_token_70|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128076, + "content": "<|reserved_special_token_71|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128077, + "content": "<|reserved_special_token_72|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128078, + "content": "<|reserved_special_token_73|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128079, + "content": "<|reserved_special_token_74|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128080, + "content": "<|reserved_special_token_75|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128081, + "content": "<|reserved_special_token_76|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128082, + "content": "<|reserved_special_token_77|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128083, + "content": "<|reserved_special_token_78|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128084, + "content": "<|reserved_special_token_79|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128085, + "content": "<|reserved_special_token_80|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128086, + "content": "<|reserved_special_token_81|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128087, + "content": "<|reserved_special_token_82|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128088, + "content": "<|reserved_special_token_83|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128089, + "content": "<|reserved_special_token_84|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128090, + "content": "<|reserved_special_token_85|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128091, + "content": "<|reserved_special_token_86|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128092, + "content": "<|reserved_special_token_87|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128093, + "content": "<|reserved_special_token_88|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128094, + "content": "<|reserved_special_token_89|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128095, + "content": "<|reserved_special_token_90|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128096, + "content": "<|reserved_special_token_91|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128097, + "content": "<|reserved_special_token_92|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128098, + "content": "<|reserved_special_token_93|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128099, + "content": "<|reserved_special_token_94|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128100, + "content": "<|reserved_special_token_95|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128101, + "content": "<|reserved_special_token_96|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128102, + "content": "<|reserved_special_token_97|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128103, + "content": "<|reserved_special_token_98|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128104, + "content": "<|reserved_special_token_99|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128105, + "content": "<|reserved_special_token_100|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128106, + "content": "<|reserved_special_token_101|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128107, + "content": "<|reserved_special_token_102|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128108, + "content": "<|reserved_special_token_103|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128109, + "content": "<|reserved_special_token_104|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128110, + "content": "<|reserved_special_token_105|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128111, + "content": "<|reserved_special_token_106|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128112, + "content": "<|reserved_special_token_107|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128113, + "content": "<|reserved_special_token_108|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128114, + "content": "<|reserved_special_token_109|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128115, + "content": "<|reserved_special_token_110|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128116, + "content": "<|reserved_special_token_111|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128117, + "content": "<|reserved_special_token_112|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128118, + "content": "<|reserved_special_token_113|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128119, + "content": "<|reserved_special_token_114|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128120, + "content": "<|reserved_special_token_115|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128121, + "content": "<|reserved_special_token_116|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128122, + "content": "<|reserved_special_token_117|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128123, + "content": "<|reserved_special_token_118|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128124, + "content": "<|reserved_special_token_119|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128125, + "content": "<|reserved_special_token_120|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128126, + "content": "<|reserved_special_token_121|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128127, + "content": "<|reserved_special_token_122|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128128, + "content": "<|reserved_special_token_123|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128129, + "content": "<|reserved_special_token_124|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128130, + "content": "<|reserved_special_token_125|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128131, + "content": "<|reserved_special_token_126|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128132, + "content": "<|reserved_special_token_127|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128133, + "content": "<|reserved_special_token_128|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128134, + "content": "<|reserved_special_token_129|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128135, + "content": "<|reserved_special_token_130|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128136, + "content": "<|reserved_special_token_131|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128137, + "content": "<|reserved_special_token_132|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128138, + "content": "<|reserved_special_token_133|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128139, + "content": "<|reserved_special_token_134|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128140, + "content": "<|reserved_special_token_135|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128141, + "content": "<|reserved_special_token_136|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128142, + "content": "<|reserved_special_token_137|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128143, + "content": "<|reserved_special_token_138|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128144, + "content": "<|reserved_special_token_139|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128145, + "content": "<|reserved_special_token_140|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128146, + "content": "<|reserved_special_token_141|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128147, + "content": "<|reserved_special_token_142|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128148, + "content": "<|reserved_special_token_143|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128149, + "content": "<|reserved_special_token_144|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128150, + "content": "<|reserved_special_token_145|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128151, + "content": "<|reserved_special_token_146|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128152, + "content": "<|reserved_special_token_147|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128153, + "content": "<|reserved_special_token_148|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128154, + "content": "<|reserved_special_token_149|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128155, + "content": "<|reserved_special_token_150|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128156, + "content": "<|reserved_special_token_151|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128157, + "content": "<|reserved_special_token_152|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128158, + "content": "<|reserved_special_token_153|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128159, + "content": "<|reserved_special_token_154|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128160, + "content": "<|reserved_special_token_155|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128161, + "content": "<|reserved_special_token_156|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128162, + "content": "<|reserved_special_token_157|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128163, + "content": "<|reserved_special_token_158|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128164, + "content": "<|reserved_special_token_159|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128165, + "content": "<|reserved_special_token_160|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128166, + "content": "<|reserved_special_token_161|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128167, + "content": "<|reserved_special_token_162|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128168, + "content": "<|reserved_special_token_163|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128169, + "content": "<|reserved_special_token_164|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128170, + "content": "<|reserved_special_token_165|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128171, + "content": "<|reserved_special_token_166|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128172, + "content": "<|reserved_special_token_167|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128173, + "content": "<|reserved_special_token_168|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128174, + "content": "<|reserved_special_token_169|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128175, + "content": "<|reserved_special_token_170|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128176, + "content": "<|reserved_special_token_171|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128177, + "content": "<|reserved_special_token_172|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128178, + "content": "<|reserved_special_token_173|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128179, + "content": "<|reserved_special_token_174|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128180, + "content": "<|reserved_special_token_175|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128181, + "content": "<|reserved_special_token_176|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128182, + "content": "<|reserved_special_token_177|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128183, + "content": "<|reserved_special_token_178|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128184, + "content": "<|reserved_special_token_179|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128185, + "content": "<|reserved_special_token_180|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128186, + "content": "<|reserved_special_token_181|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128187, + "content": "<|reserved_special_token_182|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128188, + "content": "<|reserved_special_token_183|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128189, + "content": "<|reserved_special_token_184|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128190, + "content": "<|reserved_special_token_185|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128191, + "content": "<|reserved_special_token_186|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128192, + "content": "<|reserved_special_token_187|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128193, + "content": "<|reserved_special_token_188|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128194, + "content": "<|reserved_special_token_189|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128195, + "content": "<|reserved_special_token_190|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128196, + "content": "<|reserved_special_token_191|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128197, + "content": "<|reserved_special_token_192|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128198, + "content": "<|reserved_special_token_193|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128199, + "content": "<|reserved_special_token_194|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128200, + "content": "<|reserved_special_token_195|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128201, + "content": "<|reserved_special_token_196|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128202, + "content": "<|reserved_special_token_197|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128203, + "content": "<|reserved_special_token_198|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128204, + "content": "<|reserved_special_token_199|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128205, + "content": "<|reserved_special_token_200|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128206, + "content": "<|reserved_special_token_201|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128207, + "content": "<|reserved_special_token_202|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128208, + "content": "<|reserved_special_token_203|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128209, + "content": "<|reserved_special_token_204|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128210, + "content": "<|reserved_special_token_205|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128211, + "content": "<|reserved_special_token_206|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128212, + "content": "<|reserved_special_token_207|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128213, + "content": "<|reserved_special_token_208|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128214, + "content": "<|reserved_special_token_209|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128215, + "content": "<|reserved_special_token_210|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128216, + "content": "<|reserved_special_token_211|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128217, + "content": "<|reserved_special_token_212|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128218, + "content": "<|reserved_special_token_213|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128219, + "content": "<|reserved_special_token_214|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128220, + "content": "<|reserved_special_token_215|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128221, + "content": "<|reserved_special_token_216|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128222, + "content": "<|reserved_special_token_217|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128223, + "content": "<|reserved_special_token_218|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128224, + "content": "<|reserved_special_token_219|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128225, + "content": "<|reserved_special_token_220|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128226, + "content": "<|reserved_special_token_221|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128227, + "content": "<|reserved_special_token_222|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128228, + "content": "<|reserved_special_token_223|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128229, + "content": "<|reserved_special_token_224|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128230, + "content": "<|reserved_special_token_225|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128231, + "content": "<|reserved_special_token_226|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128232, + "content": "<|reserved_special_token_227|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128233, + "content": "<|reserved_special_token_228|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128234, + "content": "<|reserved_special_token_229|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128235, + "content": "<|reserved_special_token_230|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128236, + "content": "<|reserved_special_token_231|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128237, + "content": "<|reserved_special_token_232|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128238, + "content": "<|reserved_special_token_233|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128239, + "content": "<|reserved_special_token_234|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128240, + "content": "<|reserved_special_token_235|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128241, + "content": "<|reserved_special_token_236|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128242, + "content": "<|reserved_special_token_237|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128243, + "content": "<|reserved_special_token_238|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128244, + "content": "<|reserved_special_token_239|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128245, + "content": "<|reserved_special_token_240|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128246, + "content": "<|reserved_special_token_241|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128247, + "content": "<|reserved_special_token_242|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128248, + "content": "<|reserved_special_token_243|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128249, + "content": "<|reserved_special_token_244|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128250, + "content": "<|reserved_special_token_245|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128251, + "content": "<|reserved_special_token_246|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128252, + "content": "<|reserved_special_token_247|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128253, + "content": "<|reserved_special_token_248|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128254, + "content": "<|reserved_special_token_249|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128255, + "content": "<|reserved_special_token_250|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128256, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128257, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 128258, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + } + ], + "normalizer": null, + "pre_tokenizer": { + "type": "Sequence", + "pretokenizers": [ + { + "type": "Split", + "pattern": { + "Regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+" + }, + "behavior": "Isolated", + "invert": false + }, + { + "type": "ByteLevel", + "add_prefix_space": false, + "trim_offsets": true, + "use_regex": false + } + ] + }, + "post_processor": { + "type": "TemplateProcessing", + "single": [ + { + "SpecialToken": { + "id": "<|begin_of_text|>", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + } + ], + "pair": [ + { + "SpecialToken": { + "id": "<|begin_of_text|>", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "<|begin_of_text|>", + "type_id": 1 + } + }, + { + "Sequence": { + "id": "B", + "type_id": 1 + } + } + ], + "special_tokens": { + "<|begin_of_text|>": { + "id": "<|begin_of_text|>", + "ids": [ + 128000 + ], + "tokens": [ + "<|begin_of_text|>" + ] + } + } + }, + "decoder": { + "type": "ByteLevel", + "add_prefix_space": true, + "trim_offsets": true, + "use_regex": true + }, + "model": { + "type": "BPE", + "dropout": null, + "unk_token": null, + "continuing_subword_prefix": null, + "end_of_word_suffix": null, + "fuse_unk": false, + "byte_fallback": false, + "ignore_merges": true, + "vocab": { + "!": 0, + "\"": 1, + "#": 2, + "$": 3, + "%": 4, + "&": 5, + "'": 6, + "(": 7, + ")": 8, + "*": 9, + "+": 10, + ",": 11, + "-": 12, + ".": 13, + "/": 14, + "0": 15, + "1": 16, + "2": 17, + "3": 18, + "4": 19, + "5": 20, + "6": 21, + "7": 22, + "8": 23, + "9": 24, + ":": 25, + ";": 26, + "<": 27, + "=": 28, + ">": 29, + "?": 30, + "@": 31, + "A": 32, + "B": 33, + "C": 34, + "D": 35, + "E": 36, + "F": 37, + "G": 38, + "H": 39, + "I": 40, + "J": 41, + "K": 42, + "L": 43, + "M": 44, + "N": 45, + "O": 46, + "P": 47, + "Q": 48, + "R": 49, + "S": 50, + "T": 51, + "U": 52, + "V": 53, + "W": 54, + "X": 55, + "Y": 56, + "Z": 57, + "[": 58, + "\\": 59, + "]": 60, + "^": 61, + "_": 62, + "`": 63, + "a": 64, + "b": 65, + "c": 66, + "d": 67, + "e": 68, + "f": 69, + "g": 70, + "h": 71, + "i": 72, + "j": 73, + "k": 74, + "l": 75, + "m": 76, + "n": 77, + "o": 78, + "p": 79, + "q": 80, + "r": 81, + "s": 82, + "t": 83, + "u": 84, + "v": 85, + "w": 86, + "x": 87, + "y": 88, + "z": 89, + "{": 90, + "|": 91, + "}": 92, + "~": 93, + "¡": 94, + "¢": 95, + "£": 96, + "¤": 97, + "¥": 98, + "¦": 99, + "§": 100, + "¨": 101, + "©": 102, + "ª": 103, + "«": 104, + "¬": 105, + "®": 106, + "¯": 107, + "°": 108, + "±": 109, + "²": 110, + "³": 111, + "´": 112, + "µ": 113, + "¶": 114, + "·": 115, + "¸": 116, + "¹": 117, + "º": 118, + "»": 119, + "¼": 120, + "½": 121, + "¾": 122, + "¿": 123, + "À": 124, + "Á": 125, + "Â": 126, + "Ã": 127, + "Ä": 128, + "Å": 129, + "Æ": 130, + "Ç": 131, + "È": 132, + "É": 133, + "Ê": 134, + "Ë": 135, + "Ì": 136, + "Í": 137, + "Î": 138, + "Ï": 139, + "Ð": 140, + "Ñ": 141, + "Ò": 142, + "Ó": 143, + "Ô": 144, + "Õ": 145, + "Ö": 146, + "×": 147, + "Ø": 148, + "Ù": 149, + "Ú": 150, + "Û": 151, + "Ü": 152, + "Ý": 153, + "Þ": 154, + "ß": 155, + "à": 156, + "á": 157, + "â": 158, + "ã": 159, + "ä": 160, + "å": 161, + "æ": 162, + "ç": 163, + "è": 164, + "é": 165, + "ê": 166, + "ë": 167, + "ì": 168, + "í": 169, + "î": 170, + "ï": 171, + "ð": 172, + "ñ": 173, + "ò": 174, + "ó": 175, + "ô": 176, + "õ": 177, + "ö": 178, + "÷": 179, + "ø": 180, + "ù": 181, + "ú": 182, + "û": 183, + "ü": 184, + "ý": 185, + "þ": 186, + "ÿ": 187, + "Ā": 188, + "ā": 189, + "Ă": 190, + "ă": 191, + "Ą": 192, + "ą": 193, + "Ć": 194, + "ć": 195, + "Ĉ": 196, + "ĉ": 197, + "Ċ": 198, + "ċ": 199, + "Č": 200, + "č": 201, + "Ď": 202, + "ď": 203, + "Đ": 204, + "đ": 205, + "Ē": 206, + "ē": 207, + "Ĕ": 208, + "ĕ": 209, + "Ė": 210, + "ė": 211, + "Ę": 212, + "ę": 213, + "Ě": 214, + "ě": 215, + "Ĝ": 216, + "ĝ": 217, + "Ğ": 218, + "ğ": 219, + "Ġ": 220, + "ġ": 221, + "Ģ": 222, + "ģ": 223, + "Ĥ": 224, + "ĥ": 225, + "Ħ": 226, + "ħ": 227, + "Ĩ": 228, + "ĩ": 229, + "Ī": 230, + "ī": 231, + "Ĭ": 232, + "ĭ": 233, + "Į": 234, + "į": 235, + "İ": 236, + "ı": 237, + "IJ": 238, + "ij": 239, + "Ĵ": 240, + "ĵ": 241, + "Ķ": 242, + "ķ": 243, + "ĸ": 244, + "Ĺ": 245, + "ĺ": 246, + "Ļ": 247, + "ļ": 248, + "Ľ": 249, + "ľ": 250, + "Ŀ": 251, + "ŀ": 252, + "Ł": 253, + "ł": 254, + "Ń": 255, + "ĠĠ": 256, + "ĠĠĠĠ": 257, + "in": 258, + "Ġt": 259, + "ĠĠĠĠĠĠĠĠ": 260, + "er": 261, + "ĠĠĠ": 262, + "on": 263, + "Ġa": 264, + "re": 265, + "at": 266, + "st": 267, + "en": 268, + "or": 269, + "Ġth": 270, + "ĊĊ": 271, + "Ġc": 272, + "le": 273, + "Ġs": 274, + "it": 275, + "an": 276, + "ar": 277, + "al": 278, + "Ġthe": 279, + ";Ċ": 280, + "Ġp": 281, + "Ġf": 282, + "ou": 283, + "Ġ=": 284, + "is": 285, + "ĠĠĠĠĠĠĠ": 286, + "ing": 287, + "es": 288, + "Ġw": 289, + "ion": 290, + "ed": 291, + "ic": 292, + "Ġb": 293, + "Ġd": 294, + "et": 295, + "Ġm": 296, + "Ġo": 297, + "ĉĉ": 298, + "ro": 299, + "as": 300, + "el": 301, + "ct": 302, + "nd": 303, + "Ġin": 304, + "Ġh": 305, + "ent": 306, + "id": 307, + "Ġn": 308, + "am": 309, + "ĠĠĠĠĠĠĠĠĠĠĠ": 310, + "Ġto": 311, + "Ġre": 312, + "--": 313, + "Ġ{": 314, + "Ġof": 315, + "om": 316, + ");Ċ": 317, + "im": 318, + "čĊ": 319, + "Ġ(": 320, + "il": 321, + "//": 322, + "Ġand": 323, + "ur": 324, + "se": 325, + "Ġl": 326, + "ex": 327, + "ĠS": 328, + "ad": 329, + "Ġ\"": 330, + "ch": 331, + "ut": 332, + "if": 333, + "**": 334, + "Ġ}": 335, + "em": 336, + "ol": 337, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 338, + "th": 339, + ")Ċ": 340, + "Ġ{Ċ": 341, + "Ġg": 342, + "ig": 343, + "iv": 344, + ",Ċ": 345, + "ce": 346, + "od": 347, + "Ġv": 348, + "ate": 349, + "ĠT": 350, + "ag": 351, + "ay": 352, + "Ġ*": 353, + "ot": 354, + "us": 355, + "ĠC": 356, + "Ġst": 357, + "ĠI": 358, + "un": 359, + "ul": 360, + "ue": 361, + "ĠA": 362, + "ow": 363, + "Ġ'": 364, + "ew": 365, + "Ġ<": 366, + "ation": 367, + "()": 368, + "Ġfor": 369, + "ab": 370, + "ort": 371, + "um": 372, + "ame": 373, + "Ġis": 374, + "pe": 375, + "tr": 376, + "ck": 377, + "âĢ": 378, + "Ġy": 379, + "ist": 380, + "----": 381, + ".ĊĊ": 382, + "he": 383, + "Ġe": 384, + "lo": 385, + "ĠM": 386, + "Ġbe": 387, + "ers": 388, + "Ġon": 389, + "Ġcon": 390, + "ap": 391, + "ub": 392, + "ĠP": 393, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 394, + "ass": 395, + "int": 396, + ">Ċ": 397, + "ly": 398, + "urn": 399, + "Ġ$": 400, + ";ĊĊ": 401, + "av": 402, + "port": 403, + "ir": 404, + "->": 405, + "nt": 406, + "ction": 407, + "end": 408, + "Ġde": 409, + "00": 410, + "ith": 411, + "out": 412, + "turn": 413, + "our": 414, + "ĠĠĠĠĠ": 415, + "lic": 416, + "res": 417, + "pt": 418, + "==": 419, + "Ġthis": 420, + "Ġwh": 421, + "Ġif": 422, + "ĠD": 423, + "ver": 424, + "age": 425, + "ĠB": 426, + "ht": 427, + "ext": 428, + "=\"": 429, + "Ġthat": 430, + "****": 431, + "ĠR": 432, + "Ġit": 433, + "ess": 434, + "ĠF": 435, + "Ġr": 436, + "os": 437, + "and": 438, + "Ġas": 439, + "ect": 440, + "ke": 441, + "rom": 442, + "Ġ//": 443, + "con": 444, + "ĠL": 445, + "(\"": 446, + "qu": 447, + "lass": 448, + "Ġwith": 449, + "iz": 450, + "de": 451, + "ĠN": 452, + "Ġal": 453, + "op": 454, + "up": 455, + "get": 456, + "Ġ}Ċ": 457, + "ile": 458, + "Ġan": 459, + "ata": 460, + "ore": 461, + "ri": 462, + "Ġpro": 463, + ";čĊ": 464, + "ĉĉĉĉ": 465, + "ter": 466, + "ain": 467, + "ĠW": 468, + "ĠE": 469, + "Ġcom": 470, + "Ġreturn": 471, + "art": 472, + "ĠH": 473, + "ack": 474, + "import": 475, + "ublic": 476, + "Ġor": 477, + "est": 478, + "ment": 479, + "ĠG": 480, + "able": 481, + "Ġ-": 482, + "ine": 483, + "ill": 484, + "ind": 485, + "ere": 486, + "::": 487, + "ity": 488, + "Ġ+": 489, + "Ġtr": 490, + "elf": 491, + "ight": 492, + "('": 493, + "orm": 494, + "ult": 495, + "str": 496, + "..": 497, + "\",": 498, + "Ġyou": 499, + "ype": 500, + "pl": 501, + "Ġnew": 502, + "Ġj": 503, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 504, + "Ġfrom": 505, + "Ġex": 506, + "ĠO": 507, + "20": 508, + "ld": 509, + "Ġ[": 510, + "oc": 511, + ":Ċ": 512, + "Ġse": 513, + "Ġle": 514, + "--------": 515, + ".s": 516, + "{Ċ": 517, + "',": 518, + "ant": 519, + "Ġat": 520, + "ase": 521, + ".c": 522, + "Ġch": 523, + "": 591, + "ust": 592, + "que": 593, + "Ġres": 594, + "))": 595, + "'s": 596, + "Ġk": 597, + "ans": 598, + "yst": 599, + "unction": 600, + "********": 601, + "Ġi": 602, + "Ġus": 603, + "pp": 604, + "10": 605, + "one": 606, + "ail": 607, + "====": 608, + "name": 609, + "Ġstr": 610, + "Ġ/": 611, + "Ġ&": 612, + "ach": 613, + "div": 614, + "ystem": 615, + "ell": 616, + "Ġhave": 617, + "err": 618, + "ould": 619, + "ull": 620, + "pon": 621, + "ĠJ": 622, + "_p": 623, + "Ġ==": 624, + "ign": 625, + "St": 626, + ".Ċ": 627, + "Ġpl": 628, + ");ĊĊ": 629, + "form": 630, + "put": 631, + "ount": 632, + "}ĊĊ": 633, + "dd": 634, + "ite": 635, + "Ġget": 636, + "rr": 637, + "ome": 638, + "ĠâĢ": 639, + "aram": 640, + "cc": 641, + "Ġ*/": 642, + "ER": 643, + "In": 644, + "les": 645, + "_s": 646, + "ong": 647, + "ie": 648, + "Ġcan": 649, + "ĠV": 650, + "erv": 651, + "pr": 652, + "Ġun": 653, + "row": 654, + "ber": 655, + "Ġdo": 656, + "ll": 657, + "Ġel": 658, + "Ġself": 659, + "ated": 660, + "ary": 661, + "Ġ.": 662, + "']": 663, + "ud": 664, + "Ġen": 665, + "ĠTh": 666, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 667, + "te": 668, + "_c": 669, + "uct": 670, + "Ġab": 671, + "ork": 672, + ".get": 673, + "Ġ#": 674, + "aw": 675, + "ress": 676, + "ob": 677, + "Name": 678, + "201": 679, + "app": 680, + "['": 681, + "Ġall": 682, + "ory": 683, + "ition": 684, + "ance": 685, + "ear": 686, + "Ġcont": 687, + "vent": 688, + "ia": 689, + "Ġwill": 690, + "IN": 691, + "ĠĠĠĠĠĠĠĠĠ": 692, + "return": 693, + "Ġ": 760, + "\",Ċ": 761, + "ec": 762, + "ĠIn": 763, + "ph": 764, + "Ġ|": 765, + "_f": 766, + "Ġvar": 767, + "ence": 768, + "Id": 769, + "ree": 770, + "ink": 771, + "lect": 772, + "ug": 773, + "eth": 774, + "Ġelse": 775, + "----------------": 776, + "19": 777, + "cont": 778, + "Ġso": 779, + "atic": 780, + "Ġlo": 781, + "pro": 782, + "ton": 783, + "ss": 784, + "own": 785, + "abel": 786, + "oint": 787, + "ous": 788, + "eld": 789, + "ST": 790, + "The": 791, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 792, + "RE": 793, + "\":": 794, + "olor": 795, + "tp": 796, + "eg": 797, + "key": 798, + "ude": 799, + "ĠSt": 800, + "ound": 801, + "Ġar": 802, + "\");Ċ": 803, + "ener": 804, + "ser": 805, + "11": 806, + "bject": 807, + "essage": 808, + "fer": 809, + "Ġmore": 810, + "ations": 811, + "ents": 812, + "Ġhis": 813, + "Ġthey": 814, + ".S": 815, + "ĠY": 816, + "use": 817, + "ne": 818, + "ish": 819, + "old": 820, + "_d": 821, + "io": 822, + "ield": 823, + "Ġper": 824, + "Cont": 825, + "ings": 826, + "####": 827, + "Ġdata": 828, + "Ġsa": 829, + "ef": 830, + "fo": 831, + "Ġone": 832, + "eng": 833, + "Ġdis": 834, + "AT": 835, + "Ġname": 836, + "Ġtrue": 837, + "val": 838, + "led": 839, + ".f": 840, + "Ġne": 841, + "Ġend": 842, + "32": 843, + ".T": 844, + "16": 845, + "cre": 846, + "ark": 847, + "log": 848, + "Ex": 849, + "error": 850, + "_id": 851, + "urre": 852, + "ange": 853, + "Ġnull": 854, + "rray": 855, + "Ġmy": 856, + "pan": 857, + "ict": 858, + "ator": 859, + "View": 860, + "List": 861, + "ĉreturn": 862, + "âĢĿ": 863, + "Ġpre": 864, + "Ġx": 865, + "clude": 866, + "arg": 867, + "15": 868, + "ov": 869, + ".h": 870, + "Ġ>": 871, + "Ġtheir": 872, + "')": 873, + "irst": 874, + "ick": 875, + "gh": 876, + "LE": 877, + "OR": 878, + "Ġprivate": 879, + "tem": 880, + "čĊčĊ": 881, + "user": 882, + "Ġ)": 883, + "com": 884, + ".A": 885, + "\";Ċ": 886, + "Ġid": 887, + "read": 888, + "Ġwho": 889, + "_b": 890, + "\">Ċ": 891, + "Ġtime": 892, + "Ġman": 893, + "ry": 894, + "========": 895, + "roup": 896, + "rop": 897, + "public": 898, + "vel": 899, + "umber": 900, + "ble": 901, + "Ġwhich": 902, + "****************": 903, + "Ġany": 904, + "Ġfalse": 905, + "we": 906, + "Ġvalue": 907, + "Ġli": 908, + "\")": 909, + "nder": 910, + "gr": 911, + "Ġno": 912, + "param": 913, + "25": 914, + "fig": 915, + ".com": 916, + "Ġapp": 917, + "_l": 918, + "ions": 919, + ".D": 920, + "ĠCh": 921, + "Ġabout": 922, + "Ġadd": 923, + "Ġsu": 924, + "Ġstring": 925, + "ID": 926, + "Ġover": 927, + "string": 928, + ".l": 929, + "ource": 930, + "000": 931, + "_C": 932, + "]Ċ": 933, + "Ġqu": 934, + "ĠString": 935, + "ca": 936, + "SE": 937, + "Ġro": 938, + "sh": 939, + "ual": 940, + "Type": 941, + "son": 942, + "new": 943, + "ern": 944, + "Ġag": 945, + "AR": 946, + "];Ċ": 947, + "].": 948, + "Ġ?": 949, + "ical": 950, + "Ġdes": 951, + "uth": 952, + "ix": 953, + "ays": 954, + "Ġtype": 955, + "'t": 956, + "ault": 957, + "Ġinter": 958, + "var": 959, + ".b": 960, + "Ġpart": 961, + ".d": 962, + "urrent": 963, + "IT": 964, + "EN": 965, + "30": 966, + "enc": 967, + "(f": 968, + "ra": 969, + "value": 970, + "cho": 971, + "18": 972, + "utton": 973, + "ose": 974, + "14": 975, + "Ġ!=": 976, + "ater": 977, + "é": 978, + "reate": 979, + "oll": 980, + "pos": 981, + "yle": 982, + "ng": 983, + "AL": 984, + "using": 985, + "ames": 986, + "Ġ{čĊ": 987, + "ates": 988, + "ely": 989, + "Ġwork": 990, + "Ġem": 991, + "inal": 992, + "Ġsp": 993, + "Ġwhen": 994, + ".set": 995, + "ĠĠĠĠĠĠ": 996, + "):Ċ": 997, + "to": 998, + "quire": 999, + "indow": 1000, + "lement": 1001, + "pect": 1002, + "ash": 1003, + "[i": 1004, + "Ġuse": 1005, + ".F": 1006, + "pec": 1007, + "Ġad": 1008, + "ove": 1009, + "ception": 1010, + "ength": 1011, + "include": 1012, + "ader": 1013, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 1014, + "atus": 1015, + "Th": 1016, + "itle": 1017, + "rit": 1018, + "void": 1019, + "().": 1020, + "(Ċ": 1021, + "Ġoff": 1022, + "Ġother": 1023, + "Ġ&&": 1024, + "';Ċ": 1025, + "ms": 1026, + "Ġbeen": 1027, + "Ġte": 1028, + "ml": 1029, + "co": 1030, + "nc": 1031, + "13": 1032, + "ervice": 1033, + "Ġ%": 1034, + "**Ċ": 1035, + "ann": 1036, + "ade": 1037, + "ĊĊĊĊ": 1038, + "lock": 1039, + "const": 1040, + "100": 1041, + "ponse": 1042, + "Ġsup": 1043, + "++": 1044, + "date": 1045, + "Ġacc": 1046, + "Ġhad": 1047, + "Ġbu": 1048, + "200": 1049, + "ĠRe": 1050, + "Ġwere": 1051, + "Ġfile": 1052, + "Ġwould": 1053, + "ĠâĢľ": 1054, + "ven": 1055, + "iss": 1056, + "Ġour": 1057, + "class": 1058, + "raw": 1059, + "Ġyear": 1060, + "Data": 1061, + "Ġval": 1062, + "Ġsome": 1063, + "fter": 1064, + "ys": 1065, + "Ġ///": 1066, + "round": 1067, + "view": 1068, + "Ġpe": 1069, + "Ġthere": 1070, + "Ġsaid": 1071, + "du": 1072, + "of": 1073, + "line": 1074, + "/*": 1075, + "duct": 1076, + "Ġher": 1077, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ": 1078, + "Res": 1079, + "Ġco": 1080, + "Ġcomm": 1081, + "ise": 1082, + "min": 1083, + "ĠĠĠĠĊ": 1084, + "#include": 1085, + "ethod": 1086, + ".P": 1087, + "ute": 1088, + "Ġass": 1089, + "Int": 1090, + "ask": 1091, + "loc": 1092, + "Ġlike": 1093, + "ody": 1094, + "Ġlet": 1095, + "load": 1096, + "Ġam": 1097, + "rol": 1098, + "Ġgr": 1099, + "yp": 1100, + "Ġalso": 1101, + "ĠIt": 1102, + "url": 1103, + "ific": 1104, + "ors": 1105, + "_P": 1106, + "_n": 1107, + "igh": 1108, + "Ġthan": 1109, + "Com": 1110, + "AN": 1111, + "UL": 1112, + "ating": 1113, + "17": 1114, + "ĠThis": 1115, + "ref": 1116, + "_S": 1117, + "Ġstatic": 1118, + "roll": 1119, + "Ġjust": 1120, + "Ġresult": 1121, + "ian": 1122, + "idth": 1123, + "Ġthem": 1124, + "));Ċ": 1125, + "der": 1126, + "reak": 1127, + "Con": 1128, + "://": 1129, + "ule": 1130, + "...": 1131, + "arch": 1132, + "ement": 1133, + "Ġ<<": 1134, + "50": 1135, + "ush": 1136, + "ense": 1137, + "arr": 1138, + "Ġinto": 1139, + "cess": 1140, + "amp": 1141, + "ied": 1142, + "ument": 1143, + "Ġ\\": 1144, + "],": 1145, + "wo": 1146, + "als": 1147, + "Ġwhat": 1148, + "anc": 1149, + "Value": 1150, + "='": 1151, + "olum": 1152, + "Ġpos": 1153, + "ages": 1154, + "ayer": 1155, + "Ġsc": 1156, + "ues": 1157, + "\")Ċ": 1158, + "_T": 1159, + "Ġlist": 1160, + "(s": 1161, + "Ġcase": 1162, + "Ch": 1163, + "ĉĉĉĉĉ": 1164, + "////////": 1165, + "ponent": 1166, + "Ġz": 1167, + "Ġkn": 1168, + "let": 1169, + "DE": 1170, + "red": 1171, + "Ġfe": 1172, + "Ġ},Ċ": 1173, + "Ġ,": 1174, + "(t": 1175, + "Ġfirst": 1176, + "');Ċ": 1177, + "word": 1178, + "Ġimport": 1179, + "Ġact": 1180, + "Ġchar": 1181, + "CT": 1182, + "ĠTr": 1183, + "ople": 1184, + "={": 1185, + "ĉf": 1186, + "24": 1187, + "ient": 1188, + "cent": 1189, + ".j": 1190, + "lection": 1191, + "))Ċ": 1192, + "Ġonly": 1193, + "Ġprint": 1194, + "mer": 1195, + ".W": 1196, + "ock": 1197, + "Ġ--": 1198, + "Text": 1199, + "Ġop": 1200, + "ank": 1201, + "Ġits": 1202, + "Ġback": 1203, + "[\"": 1204, + "Ġneed": 1205, + "Ġcl": 1206, + "Ġsub": 1207, + "Ġla": 1208, + "((": 1209, + ".\"": 1210, + "Object": 1211, + "Ġstart": 1212, + "file": 1213, + "(self": 1214, + "ner": 1215, + "ey": 1216, + "Ġuser": 1217, + "Ġent": 1218, + "ĠCom": 1219, + "its": 1220, + "ĠCon": 1221, + "ouble": 1222, + "ower": 1223, + "item": 1224, + "very": 1225, + "ĠWe": 1226, + "64": 1227, + "lick": 1228, + "ĠQ": 1229, + "php": 1230, + "ttp": 1231, + "':": 1232, + "ics": 1233, + "Ġunder": 1234, + "Ġ*Ċ": 1235, + ".L": 1236, + ");": 1237, + "ices": 1238, + "Ġreg": 1239, + ")čĊ": 1240, + "ĉpublic": 1241, + "SS": 1242, + "Ġthen": 1243, + "reat": 1244, + "ious": 1245, + ".G": 1246, + "ek": 1247, + "irect": 1248, + "heck": 1249, + "cript": 1250, + "ning": 1251, + "ĠUn": 1252, + "Ġmay": 1253, + "ĠWh": 1254, + "Bo": 1255, + "Item": 1256, + "struct": 1257, + ".st": 1258, + "ream": 1259, + "ible": 1260, + "loat": 1261, + "Ġorg": 1262, + "und": 1263, + "sum": 1264, + "_in": 1265, + "../": 1266, + "_M": 1267, + "Ġhow": 1268, + "rite": 1269, + "'Ċ": 1270, + "To": 1271, + "40": 1272, + "ww": 1273, + "Ġpeople": 1274, + "index": 1275, + ".n": 1276, + "http": 1277, + "(m": 1278, + "ector": 1279, + "Ġind": 1280, + "Ġjav": 1281, + "],Ċ": 1282, + "ĠHe": 1283, + "_st": 1284, + "ful": 1285, + "ole": 1286, + "){Ċ": 1287, + "Ġshould": 1288, + "opy": 1289, + "elp": 1290, + "ier": 1291, + "_name": 1292, + "erson": 1293, + "ION": 1294, + "ote": 1295, + "Ġtest": 1296, + "Ġbet": 1297, + "rror": 1298, + "ular": 1299, + "ãĢ": 1300, + "ĠÐ": 1301, + "bs": 1302, + "ting": 1303, + "Ġmake": 1304, + "Tr": 1305, + "Ġafter": 1306, + "arget": 1307, + "RO": 1308, + "olumn": 1309, + "rc": 1310, + "_re": 1311, + "define": 1312, + "22": 1313, + "Ġright": 1314, + "right": 1315, + "day": 1316, + "Ġlong": 1317, + "[]": 1318, + "(p": 1319, + "td": 1320, + "cond": 1321, + "ĠPro": 1322, + "Ġrem": 1323, + "ptions": 1324, + "vid": 1325, + ".g": 1326, + "Ġext": 1327, + "Ġ__": 1328, + "')Ċ": 1329, + "pace": 1330, + "mp": 1331, + "Ġmin": 1332, + "stance": 1333, + "air": 1334, + "action": 1335, + "wh": 1336, + "type": 1337, + "util": 1338, + "ait": 1339, + "ĊĊ": 1363, + "Ġshe": 1364, + "\"]": 1365, + "aph": 1366, + "Ġexp": 1367, + "erty": 1368, + "ĠSe": 1369, + "Ġpar": 1370, + "unc": 1371, + "ET": 1372, + "Ġread": 1373, + "print": 1374, + "Ġrel": 1375, + "Ġform": 1376, + "Ġdr": 1377, + "Exception": 1378, + "input": 1379, + "Ġtrans": 1380, + "########": 1381, + "order": 1382, + "By": 1383, + "Ġaw": 1384, + "ities": 1385, + "uff": 1386, + "play": 1387, + ".add": 1388, + "ĠâĢĵ": 1389, + "Ġwant": 1390, + "Ġcomp": 1391, + "ments": 1392, + "Ġ||": 1393, + "az": 1394, + "be": 1395, + "Ġnumber": 1396, + "Ġrequire": 1397, + "ĠEx": 1398, + "60": 1399, + "Ġcol": 1400, + "Ġkey": 1401, + "ember": 1402, + "Ġtwo": 1403, + "Ġsize": 1404, + "Ġwhere": 1405, + "UT": 1406, + "result": 1407, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 1408, + "ough": 1409, + "orld": 1410, + "ood": 1411, + "uch": 1412, + "ative": 1413, + "ger": 1414, + "arent": 1415, + "Ġ/*": 1416, + "Ġarg": 1417, + "Ġwhile": 1418, + "23": 1419, + "(this": 1420, + "Ġrec": 1421, + "Ġdif": 1422, + "State": 1423, + "Ġspec": 1424, + "ride": 1425, + "_F": 1426, + "Ġlook": 1427, + "AM": 1428, + "ility": 1429, + "eter": 1430, + "âĢĻt": 1431, + "ĊĊĊ": 1432, + "ayout": 1433, + "--------------------------------": 1434, + "ager": 1435, + "Ġcould": 1436, + "Ġbr": 1437, + "ends": 1438, + "ures": 1439, + "Ġknow": 1440, + "ets": 1441, + "ĠIf": 1442, + "ĠSh": 1443, + ".w": 1444, + "back": 1445, + "Ġser": 1446, + "Ġ+=": 1447, + "Ġfr": 1448, + "());Ċ": 1449, + "Ġhand": 1450, + "Ind": 1451, + "ULL": 1452, + "Im": 1453, + "();ĊĊ": 1454, + "Ġmost": 1455, + "Ġtry": 1456, + "Ġnow": 1457, + "rough": 1458, + ">čĊ": 1459, + "ackage": 1460, + "Ġhim": 1461, + "._": 1462, + "ify": 1463, + "Ġbreak": 1464, + "Ġ);Ċ": 1465, + "ren": 1466, + "#define": 1467, + "itt": 1468, + "Ġap": 1469, + "ĉc": 1470, + "(n": 1471, + "ĠYou": 1472, + ":ĊĊ": 1473, + "-m": 1474, + "Ġevery": 1475, + "ustom": 1476, + "lient": 1477, + "ocument": 1478, + "cription": 1479, + "Error": 1480, + "-b": 1481, + "о": 1482, + "][": 1483, + "99": 1484, + "trans": 1485, + "Ġpoint": 1486, + "Ġstd": 1487, + "Ġfil": 1488, + "Time": 1489, + "80": 1490, + "Ġmod": 1491, + "Ġ->": 1492, + "Ġerror": 1493, + "ah": 1494, + "Ġtext": 1495, + "roller": 1496, + "lose": 1497, + "ql": 1498, + "Ġpol": 1499, + "><": 1822, + ".B": 1823, + "-c": 1824, + "Ġopen": 1825, + "Ġest": 1826, + "ĠĠĠĠĠĠĠĠĊ": 1827, + "Ġnext": 1828, + "IM": 1829, + "ÑĤ": 1830, + "OT": 1831, + "ó": 1832, + "Ġfollow": 1833, + "content": 1834, + "ĠĠĠĠĠĠĠĠĠĠĠĠ": 1835, + "Ġinclud": 1836, + "HE": 1837, + "ĠRes": 1838, + "Ġhref": 1839, + "и": 1840, + "Ġcar": 1841, + "ypes": 1842, + "image": 1843, + "Un": 1844, + "Ġbool": 1845, + "AD": 1846, + "Ġgame": 1847, + ".Form": 1848, + "rows": 1849, + "*/": 1850, + "velop": 1851, + ".Drawing": 1852, + "Ġpath": 1853, + "ision": 1854, + "Ġeach": 1855, + "ĠPl": 1856, + "_type": 1857, + "Path": 1858, + "nection": 1859, + "Ġav": 1860, + "').": 1861, + "Ġsupport": 1862, + "ENT": 1863, + "rem": 1864, + "\").": 1865, + "Ġown": 1866, + "Ġcor": 1867, + "count": 1868, + "miss": 1869, + "ually": 1870, + "Ġmem": 1871, + "std": 1872, + "ience": 1873, + "search": 1874, + "\"ĊĊ": 1875, + "Form": 1876, + "Ġsex": 1877, + "ename": 1878, + "Ġsign": 1879, + "Ġet": 1880, + "ĠĠĠĠĠĠĠĠĠĠ": 1881, + "','": 1882, + "ĠApp": 1883, + "Ġthose": 1884, + "off": 1885, + "Ġerr": 1886, + "Ġsystem": 1887, + "Ġbest": 1888, + "code": 1889, + "Ġsame": 1890, + "Ġdi": 1891, + "uss": 1892, + "Ġcreate": 1893, + "ather": 1894, + "Array": 1895, + ".in": 1896, + "fe": 1897, + "Service": 1898, + "UN": 1899, + "ats": 1900, + "ĠZ": 1901, + "alth": 1902, + "Ġmade": 1903, + "true": 1904, + "AB": 1905, + "Ġmark": 1906, + "rid": 1907, + "ified": 1908, + ",čĊ": 1909, + "yn": 1910, + "press": 1911, + "Ġgroup": 1912, + "Ġfin": 1913, + "ĠLicense": 1914, + "Field": 1915, + "eger": 1916, + "Ġworld": 1917, + "iness": 1918, + "ty": 1919, + "Ġprocess": 1920, + "(b": 1921, + "Ġcre": 1922, + "arn": 1923, + "ives": 1924, + "Ġmain": 1925, + "ideo": 1926, + "36": 1927, + "_g": 1928, + "AG": 1929, + "valid": 1930, + "img": 1931, + "PI": 1932, + "Ġcolor": 1933, + "Ġreport": 1934, + "Ġtake": 1935, + "rib": 1936, + "OM": 1937, + "Ġday": 1938, + "Request": 1939, + "Ġsk": 1940, + "bers": 1941, + "ĉs": 1942, + ".Add": 1943, + "oot": 1944, + "Image": 1945, + "Ġcomple": 1946, + "ollection": 1947, + "Ġtop": 1948, + "Ġfree": 1949, + "AS": 1950, + "De": 1951, + "ĠOn": 1952, + "IG": 1953, + "90": 1954, + "eta": 1955, + "Date": 1956, + "Ġaction": 1957, + "34": 1958, + "Over": 1959, + "itor": 1960, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 1961, + "not": 1962, + "Ġindex": 1963, + "her": 1964, + "icon": 1965, + "On": 1966, + ";čĊčĊ": 1967, + "ivity": 1968, + "mand": 1969, + ".Windows": 1970, + "OL": 1971, + "Ġreal": 1972, + "Ġmax": 1973, + "land": 1974, + "....": 1975, + "raph": 1976, + "Ġbuild": 1977, + "leg": 1978, + "assword": 1979, + "?ĊĊ": 1980, + "â̦": 1981, + "ook": 1982, + "uck": 1983, + "Ġmessage": 1984, + "test": 1985, + "ivers": 1986, + "38": 1987, + "Ġinput": 1988, + "Ġart": 1989, + "Ġbetween": 1990, + "Get": 1991, + "enter": 1992, + "ground": 1993, + "ene": 1994, + "á": 1995, + ".length": 1996, + "Node": 1997, + "(i": 1998, + "Class": 1999, + "for": 2000, + "ĠâĢĶ": 2001, + "ten": 2002, + "oin": 2003, + "Ġke": 2004, + "ui": 2005, + "ĠIN": 2006, + "Ġtable": 2007, + "sub": 2008, + "ĠLe": 2009, + "Ġhead": 2010, + "Ġmust": 2011, + "////////////////": 2012, + ".util": 2013, + "Context": 2014, + "Ġorder": 2015, + "Ġmov": 2016, + "over": 2017, + "Ġcontin": 2018, + "Ġsay": 2019, + "static": 2020, + ".Text": 2021, + "ĠclassName": 2022, + "pany": 2023, + "Ġter": 2024, + "head": 2025, + "rg": 2026, + "Ġproduct": 2027, + "This": 2028, + ".âĢĿ": 2029, + "ĠBut": 2030, + "70": 2031, + "loy": 2032, + "Ġdouble": 2033, + "sg": 2034, + "Ġplace": 2035, + ".x": 2036, + "message": 2037, + "Ġinformation": 2038, + "private": 2039, + "Ġoper": 2040, + "ced": 2041, + "db": 2042, + "\">": 2228, + "aterial": 2229, + "iled": 2230, + "Ġput": 2231, + "Qu": 2232, + "ÑĢ": 2233, + "ung": 2234, + "map": 2235, + "ĉĉĉĉĉĉĉĉ": 2236, + "Ġlevel": 2237, + "Component": 2238, + "book": 2239, + "creen": 2240, + "_RE": 2241, + "Ġconfig": 2242, + "ãģ": 2243, + "Or": 2244, + ".data": 2245, + "Ġdocument": 2246, + "\",\"": 2247, + "tribute": 2248, + "ux": 2249, + "Log": 2250, + "ference": 2251, + "post": 2252, + "_e": 2253, + "Ġlocal": 2254, + "andom": 2255, + "assert": 2256, + "Val": 2257, + "lected": 2258, + "ina": 2259, + "atabase": 2260, + "Add": 2261, + "Ġcontent": 2262, + ".print": 2263, + "signed": 2264, + "ric": 2265, + ".\"ĊĊ": 2266, + "Ġfa": 2267, + "!ĊĊ": 2268, + "-f": 2269, + "ived": 2270, + "Ġquest": 2271, + ".ex": 2272, + "Ġfloat": 2273, + "Ġdevelop": 2274, + "оÐ": 2275, + "Map": 2276, + "ading": 2277, + "Ġposs": 2278, + "UE": 2279, + "namespace": 2280, + "_O": 2281, + "ĉb": 2282, + ".Get": 2283, + ">(": 2284, + "json": 2285, + "etails": 2286, + "66": 2287, + "Ġtoo": 2288, + "Ġextends": 2289, + "ĠNone": 2290, + "Ġfore": 2291, + "(String": 2292, + "format": 2293, + "Ġgreat": 2294, + "inter": 2295, + "cale": 2296, + "Ñģ": 2297, + "ron": 2298, + "iving": 2299, + "Ent": 2300, + "ency": 2301, + "xt": 2302, + "oy": 2303, + "05": 2304, + "Ġmonth": 2305, + "Ġhapp": 2306, + "Ġsuper": 2307, + "bar": 2308, + "default": 2309, + "_de": 2310, + "ords": 2311, + "ln": 2312, + "({Ċ": 2313, + "ĠInd": 2314, + "ases": 2315, + "Ġtitle": 2316, + "Ġcontext": 2317, + "08": 2318, + "oh": 2319, + "-p": 2320, + "Em": 2321, + "Ġmet": 2322, + "Test": 2323, + "Ġlife": 2324, + "_v": 2325, + "ĠUS": 2326, + "UI": 2327, + "ocation": 2328, + "md": 2329, + "Ġ[Ċ": 2330, + "Ġ]": 2331, + "sw": 2332, + "Ġincre": 2333, + "script": 2334, + "ential": 2335, + "ways": 2336, + ".de": 2337, + "Ġsrc": 2338, + "Ġcatch": 2339, + "ĠAmeric": 2340, + "//Ċ": 2341, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 2342, + "Ġpay": 2343, + "plit": 2344, + "âĢĶ": 2345, + "Ġcoun": 2346, + "obj": 2347, + ".php": 2348, + "Ġchange": 2349, + "ething": 2350, + "'re": 2351, + "aster": 2352, + "los": 2353, + "lation": 2354, + "ĠĠĊ": 2355, + "Le": 2356, + "ä": 2357, + "({": 2358, + "ready": 2359, + "ĠNo": 2360, + "Ġposition": 2361, + "Ġold": 2362, + "Ġbook": 2363, + "abled": 2364, + "bug": 2365, + "202": 2366, + "Hand": 2367, + "};ĊĊ": 2368, + "isplay": 2369, + "aving": 2370, + "04": 2371, + "Ġgover": 2372, + "Ġversion": 2373, + "System": 2374, + "nect": 2375, + "response": 2376, + "Style": 2377, + "Up": 2378, + "angu": 2379, + "Ġthree": 2380, + "init": 2381, + "ero": 2382, + "Ġlaw": 2383, + "endif": 2384, + "Ġbase": 2385, + "email": 2386, + "(l": 2387, + "_V": 2388, + "Ġconf": 2389, + "ATE": 2390, + "Ġduring": 2391, + "tes": 2392, + "Ġconsole": 2393, + "ĠPr": 2394, + "Ġspe": 2395, + "ves": 2396, + "65": 2397, + "path": 2398, + "ialog": 2399, + "dition": 2400, + "_to": 2401, + "ards": 2402, + "Ġagainst": 2403, + "etwork": 2404, + "ĠPh": 2405, + "_L": 2406, + "cur": 2407, + "imit": 2408, + "With": 2409, + "Ġpower": 2410, + "ium": 2411, + "';ĊĊ": 2412, + "Ġwom": 2413, + "left": 2414, + "ources": 2415, + "atri": 2416, + "ĠIm": 2417, + "ĠMan": 2418, + "orth": 2419, + "${": 2420, + "88": 2421, + "quals": 2422, + "ese": 2423, + "_size": 2424, + "Ġiss": 2425, + "otal": 2426, + "-g": 2427, + "ique": 2428, + "rame": 2429, + "Ġwidth": 2430, + "erg": 2431, + ")(": 2432, + "ittle": 2433, + "TR": 2434, + "ĠThey": 2435, + "ences": 2436, + "02": 2437, + "rl": 2438, + "ons": 2439, + "Ġlabel": 2440, + ".y": 2441, + "-t": 2442, + "update": 2443, + "anel": 2444, + "sc": 2445, + ".to": 2446, + "Ġproject": 2447, + "ü": 2448, + "Ġelement": 2449, + "Ġsuccess": 2450, + "ĉĉĊ": 2451, + ".sh": 2452, + "ram": 2453, + "ched": 2454, + "())Ċ": 2455, + "Ġ(Ċ": 2456, + "Ġdate": 2457, + "Ġtot": 2458, + "_ST": 2459, + "All": 2460, + "ification": 2461, + "ĉvar": 2462, + "Ġtri": 2463, + "chem": 2464, + "my": 2465, + "Ġbig": 2466, + "ĠAd": 2467, + "ĠAt": 2468, + "ots": 2469, + "num": 2470, + "Act": 2471, + "Ġmap": 2472, + "era": 2473, + "cope": 2474, + ".$": 2475, + ",âĢĿ": 2476, + "Ġpop": 2477, + "Ġfew": 2478, + "Ġlen": 2479, + "uid": 2480, + "eters": 2481, + "ules": 2482, + "ÃŃ": 2483, + "source": 2484, + "https": 2485, + "Ġdem": 2486, + "Ġear": 2487, + "################": 2488, + "Ġmatch": 2489, + "ories": 2490, + "49": 2491, + "aces": 2492, + "ĠCl": 2493, + "Ġnode": 2494, + "78": 2495, + "irc": 2496, + "local": 2497, + "unity": 2498, + "};Ċ": 2499, + "Ġanother": 2500, + "<<": 2501, + "ogle": 2502, + "Ġsit": 2503, + "ework": 2504, + "TE": 2505, + ".I": 2506, + "NS": 2507, + "ology": 2508, + "ought": 2509, + ".Cont": 2510, + ">>": 2511, + "Ġcare": 2512, + "state": 2513, + "ĉprivate": 2514, + "Ġeffect": 2515, + "++)": 2516, + "_file": 2517, + "ending": 2518, + "Line": 2519, + "For": 2520, + "ior": 2521, + "ĠSc": 2522, + "Ġfun": 2523, + ".Size": 2524, + "ĉelse": 2525, + "])": 2526, + "start": 2527, + "vious": 2528, + "Ġ},": 2529, + "ours": 2530, + "Ġleg": 2531, + "Ġservice": 2532, + "Ġsince": 2533, + "iron": 2534, + "Label": 2535, + "Ġnon": 2536, + "Ġlos": 2537, + "iction": 2538, + "Ġfull": 2539, + "acter": 2540, + "board": 2541, + "gress": 2542, + "Ġturn": 2543, + "ither": 2544, + "09": 2545, + ".size": 2546, + "Ġbody": 2547, + "resh": 2548, + "eturn": 2549, + "199": 2550, + "(_": 2551, + "yles": 2552, + "ormal": 2553, + "pi": 2554, + "Ġsomething": 2555, + "!--": 2556, + "uint": 2557, + "Ġprodu": 2558, + "Ġstand": 2559, + "Ġproble": 2560, + "Ġavailable": 2561, + "mt": 2562, + "ĠBl": 2563, + "Ġ...": 2564, + "Ġblock": 2565, + "Input": 2566, + "Ġkeep": 2567, + "Count": 2568, + "open": 2569, + "Ġ['": 2570, + "Ġthrow": 2571, + "uilder": 2572, + "Action": 2573, + "Ġthings": 2574, + "True": 2575, + "Ġurl": 2576, + "ĠBo": 2577, + "printf": 2578, + "Ġred": 2579, + "js": 2580, + ".create": 2581, + "ĠOr": 2582, + "Status": 2583, + "Instance": 2584, + "Ġcontrol": 2585, + "Ġcome": 2586, + "Ġcustom": 2587, + "location": 2588, + "07": 2589, + "model": 2590, + "ĠčĊ": 2591, + "Ġsource": 2592, + "Ġeas": 2593, + ".out": 2594, + "]ĊĊ": 2595, + "oney": 2596, + "Ġawait": 2597, + "Ġpartic": 2598, + "AP": 2599, + "ublish": 2600, + "odes": 2601, + "_pro": 2602, + "ply": 2603, + "riter": 2604, + "Ġprov": 2605, + "Ġmill": 2606, + "HT": 2607, + "])Ċ": 2608, + "Ġchang": 2609, + "Ġask": 2610, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 2611, + "Ġoutput": 2612, + "Ġemail": 2613, + "68": 2614, + ".push": 2615, + "Ġ}čĊčĊ": 2616, + "ination": 2617, + "47": 2618, + "atrix": 2619, + "Table": 2620, + "uccess": 2621, + "]);Ċ": 2622, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 2623, + "Ġdisc": 2624, + "([": 2625, + "Ġbusiness": 2626, + "height": 2627, + ".html": 2628, + "ta": 2629, + "field": 2630, + "Ġrequired": 2631, + "_R": 2632, + "Ġgovern": 2633, + "}čĊčĊ": 2634, + "lex": 2635, + "500": 2636, + ".,": 2637, + "ĠSet": 2638, + "urch": 2639, + "///": 2640, + "ts": 2641, + "af": 2642, + "Ġmight": 2643, + "istory": 2644, + "Str": 2645, + "Ġnever": 2646, + "Response": 2647, + "arse": 2648, + "ada": 2649, + "ĠHow": 2650, + "Ġ*)": 2651, + "Ġ;": 2652, + "Ġhard": 2653, + "Ad": 2654, + "Ġintern": 2655, + "used": 2656, + "(data": 2657, + "mod": 2658, + "annel": 2659, + "Ġnp": 2660, + "ugg": 2661, + "Ġ/>Ċ": 2662, + "Ġcalled": 2663, + "body": 2664, + "Ġcho": 2665, + "(r": 2666, + "_set": 2667, + "ird": 2668, + "Ġ>=": 2669, + "Ġ};Ċ": 2670, + "Ġoptions": 2671, + "ĠGener": 2672, + "Ġheight": 2673, + "Point": 2674, + "You": 2675, + "ety": 2676, + "Click": 2677, + "Ġsmall": 2678, + "Ġide": 2679, + "Ġaccess": 2680, + "anguage": 2681, + "Ġprotected": 2682, + "Ġjob": 2683, + "ĠThere": 2684, + "Def": 2685, + "Ġaddress": 2686, + "Ġuint": 2687, + "Not": 2688, + "oo": 2689, + "aps": 2690, + "": 2828, + "ĉĠĠĠ": 2829, + "\"))": 2830, + "Content": 2831, + "_W": 2832, + "plement": 2833, + "Ġwon": 2834, + "Ġvideo": 2835, + "adi": 2836, + "point": 2837, + "%%": 2838, + "03": 2839, + "Ġgl": 2840, + "erved": 2841, + "viron": 2842, + "IF": 2843, + "uted": 2844, + "ãĥ": 2845, + "'m": 2846, + "Ġcert": 2847, + "Ġprof": 2848, + "Ġcell": 2849, + "ari": 2850, + "Ġplayer": 2851, + "ais": 2852, + "Ġcost": 2853, + "Ġhum": 2854, + "(R": 2855, + "Ġoffic": 2856, + "ks": 2857, + ".text": 2858, + "atures": 2859, + "Ġtotal": 2860, + "Ġ*/ĊĊ": 2861, + "ope": 2862, + "Ġstat": 2863, + "UM": 2864, + "Ġload": 2865, + "ights": 2866, + "Ġclear": 2867, + "uro": 2868, + "Ġtechn": 2869, + "upport": 2870, + "IR": 2871, + "Ġrow": 2872, + "Ġseem": 2873, + "Ġq": 2874, + "Ġshort": 2875, + "ĠNot": 2876, + "ipp": 2877, + "Group": 2878, + "section": 2879, + "max": 2880, + "irl": 2881, + "Ġoverride": 2882, + "Ġcompany": 2883, + "Ġdone": 2884, + "\");čĊ": 2885, + "Ġgre": 2886, + ".Re": 2887, + "Ġbelie": 2888, + "rist": 2889, + "Ġhealth": 2890, + "ANT": 2891, + "()ĊĊ": 2892, + "ĠBe": 2893, + ".value": 2894, + "ĠGr": 2895, + "ottom": 2896, + "Ġargs": 2897, + "PT": 2898, + "status": 2899, + "func": 2900, + "uments": 2901, + "-h": 2902, + "Number": 2903, + ":čĊ": 2904, + "ĠLog": 2905, + "erver": 2906, + "Ġ),Ċ": 2907, + "ament": 2908, + "Ġobj": 2909, + "inc": 2910, + "Ġchildren": 2911, + "icy": 2912, + "IZ": 2913, + "ands": 2914, + "ably": 2915, + "Ġdistrib": 2916, + "Ġcur": 2917, + "erial": 2918, + "Ġdays": 2919, + "reated": 2920, + "rect": 2921, + "-l": 2922, + "irm": 2923, + "idden": 2924, + "omb": 2925, + "Ġinitial": 2926, + ".js": 2927, + "Ġâ": 2928, + "Query": 2929, + "Ġonline": 2930, + "imal": 2931, + ".con": 2932, + "au": 2933, + "Url": 2934, + "control": 2935, + "irection": 2936, + "Ġinstance": 2937, + "ORT": 2938, + "ĠFr": 2939, + "where": 2940, + "Ġjavax": 2941, + "Ġorgan": 2942, + "apter": 2943, + "Ġreason": 2944, + "options": 2945, + "59": 2946, + "ĠMar": 2947, + "(a": 2948, + "Ġwithin": 2949, + ".âĢĿĊĊ": 2950, + "ODE": 2951, + "_DE": 2952, + "admin": 2953, + "ended": 2954, + "Ġdesign": 2955, + "ĠData": 2956, + "une": 2957, + "ĠFile": 2958, + "root": 2959, + "Ġcent": 2960, + "Ġarr": 2961, + "_add": 2962, + "len": 2963, + "page": 2964, + ",'": 2965, + "_str": 2966, + "Ġbro": 2967, + "ability": 2968, + "outh": 2969, + "58": 2970, + "/c": 2971, + "pose": 2972, + "irtual": 2973, + "earch": 2974, + "_url": 2975, + "argin": 2976, + "Http": 2977, + "Ġschool": 2978, + "ava": 2979, + "Ġconsider": 2980, + ".label": 2981, + "ĠArray": 2982, + "42": 2983, + "web": 2984, + "opt": 2985, + ".println": 2986, + "ulation": 2987, + "Ġfunc": 2988, + "PL": 2989, + "Ġ\"\\": 2990, + "ĠText": 2991, + "actory": 2992, + "(function": 2993, + "null": 2994, + "Ġeng": 2995, + "down": 2996, + "Ġinclude": 2997, + "ĠEn": 2998, + "ĠDr": 2999, + "Ġdb": 3000, + "!!": 3001, + "side": 3002, + "Ġinit": 3003, + "quired": 3004, + "ĠShe": 3005, + "Column": 3006, + "react": 3007, + "Ġann": 3008, + "Ġstop": 3009, + "Ġlater": 3010, + "ĠThat": 3011, + "ention": 3012, + "df": 3013, + "UG": 3014, + "ILE": 3015, + "Ġclient": 3016, + "raft": 3017, + "ffer": 3018, + "POST": 3019, + "elper": 3020, + "Ġlove": 3021, + "quote": 3022, + "oud": 3023, + "Ġjson": 3024, + "Ġable": 3025, + "Ġmen": 3026, + "AX": 3027, + "ĠCopyright": 3028, + "ö": 3029, + "avig": 3030, + "req": 3031, + "Client": 3032, + "});Ċ": 3033, + ".Com": 3034, + "erc": 3035, + "ilt": 3036, + "pecial": 3037, + "_com": 3038, + "room": 3039, + ".Name": 3040, + "Ġgive": 3041, + "amb": 3042, + "ike": 3043, + "Ġcondition": 3044, + "client": 3045, + "ators": 3046, + ":\"": 3047, + "Ġcopy": 3048, + "uture": 3049, + "iversity": 3050, + "ernal": 3051, + "{{": 3052, + "ĠCan": 3053, + "ounc": 3054, + "do": 3055, + "Ġocc": 3056, + "Ġappro": 3057, + "thers": 3058, + "ze": 3059, + "Ġeither": 3060, + "ĠFl": 3061, + "Ġimportant": 3062, + "Ġlead": 3063, + "attr": 3064, + "ART": 3065, + "Equal": 3066, + "Ġda": 3067, + "etch": 3068, + "entity": 3069, + "Ġfamily": 3070, + "adding": 3071, + "Ġoption": 3072, + "Ġexist": 3073, + "ica": 3074, + "ĠObject": 3075, + "69": 3076, + "'ve": 3077, + "vers": 3078, + "itional": 3079, + "67": 3080, + "output": 3081, + "ĠTrue": 3082, + "ĠOF": 3083, + "_time": 3084, + "Ġoffer": 3085, + "Ġ});ĊĊ": 3086, + "HER": 3087, + "egin": 3088, + "\"\"": 3089, + "Ġwater": 3090, + "Ġche": 3091, + "ĠMy": 3092, + "ored": 3093, + "Ġstep": 3094, + "ances": 3095, + "CK": 3096, + "AY": 3097, + "à¸": 3098, + "struction": 3099, + "(C": 3100, + "300": 3101, + "ouch": 3102, + "Stream": 3103, + "active": 3104, + "ama": 3105, + "Entity": 3106, + "product": 3107, + "(){Ċ": 3108, + "Ġgovernment": 3109, + "ĠID": 3110, + "ajor": 3111, + "And": 3112, + "Ġdisplay": 3113, + "л": 3114, + "Ġtimes": 3115, + "Ġfour": 3116, + "Ġfar": 3117, + "Ġpresent": 3118, + "ĠNS": 3119, + "Ġ\\Ċ": 3120, + "uest": 3121, + "Ġbas": 3122, + "echo": 3123, + "child": 3124, + "ifier": 3125, + "Handler": 3126, + "Ġlib": 3127, + "Property": 3128, + "translation": 3129, + "Ġroom": 3130, + "Ġonce": 3131, + "Ġ[]": 3132, + "center": 3133, + "================================": 3134, + "Ġresults": 3135, + "Ġcontinue": 3136, + "Ġtalk": 3137, + "_get": 3138, + "Ġgrow": 3139, + ".sw": 3140, + "eb": 3141, + "ĠPublic": 3142, + "OP": 3143, + "ecute": 3144, + "ols": 3145, + "Ġ**": 3146, + "\");ĊĊ": 3147, + "Ġmass": 3148, + "ured": 3149, + ".class": 3150, + "omic": 3151, + "Ġmean": 3152, + "ips": 3153, + "Ġaut": 3154, + ");čĊčĊ": 3155, + "Ġuntil": 3156, + "Ġmarket": 3157, + "Ġarea": 3158, + "uit": 3159, + "Ġlength": 3160, + "ĠWith": 3161, + "structor": 3162, + "event": 3163, + "\"><": 3164, + "ĠSp": 3165, + "IV": 3166, + "Ġmus": 3167, + "iff": 3168, + "Ġkind": 3169, + "author": 3170, + "ounds": 3171, + "mb": 3172, + "_key": 3173, + "41": 3174, + "width": 3175, + "pository": 3176, + "Ġlight": 3177, + "uk": 3178, + "Row": 3179, + "ohn": 3180, + "alf": 3181, + "vironment": 3182, + "apper": 3183, + "ollections": 3184, + "Ġside": 3185, + "_info": 3186, + "Ġexample": 3187, + "imary": 3188, + "Ġwr": 3189, + "Ġcamp": 3190, + "cribe": 3191, + "255": 3192, + "\"/": 3193, + "Ġmiss": 3194, + "way": 3195, + "Ġbased": 3196, + "Ġplan": 3197, + "Vis": 3198, + "omain": 3199, + "unk": 3200, + "Ġaway": 3201, + "UP": 3202, + "": 3452, + "Ġden": 3453, + "obile": 3454, + "change": 3455, + "ĠĠĠĠĠĠĠĠĠĠĠĠĊ": 3456, + "ici": 3457, + "na": 3458, + "ĠForm": 3459, + "Ġsort": 3460, + "Select": 3461, + "pare": 3462, + "Ġthought": 3463, + "_con": 3464, + "Ġtask": 3465, + "ocus": 3466, + "ĠDE": 3467, + "ĠMin": 3468, + "Ġopt": 3469, + "ĉbreak": 3470, + "umer": 3471, + "KE": 3472, + "then": 3473, + "Ġdet": 3474, + "ĠTest": 3475, + "ports": 3476, + "Ġreview": 3477, + "('/": 3478, + "move": 3479, + "Ġswitch": 3480, + "ERT": 3481, + "patch": 3482, + "annot": 3483, + "ãĤ": 3484, + "Ġabove": 3485, + "itive": 3486, + "56": 3487, + "Ġquestion": 3488, + "ĠQu": 3489, + "ãĢĤĊĊ": 3490, + "gle": 3491, + "Ġword": 3492, + "Ġprovide": 3493, + "ĠReturn": 3494, + "Ġresearch": 3495, + "ão": 3496, + "ustr": 3497, + "Ġpublish": 3498, + "chema": 3499, + "}}": 3500, + "ĠCON": 3501, + "-in": 3502, + "allback": 3503, + "Ġcover": 3504, + "\\\\": 3505, + "color": 3506, + "ĠIS": 3507, + "Ġwhether": 3508, + "imate": 3509, + "isc": 3510, + "Bar": 3511, + "Ġdiv": 3512, + "Be": 3513, + "ourn": 3514, + "Ġhaving": 3515, + "lem": 3516, + "player": 3517, + "abs": 3518, + "amera": 3519, + "ney": 3520, + "Ġexc": 3521, + "gether": 3522, + "plied": 3523, + "ao": 3524, + "[$": 3525, + "Ġ++": 3526, + "ipe": 3527, + "show": 3528, + "/d": 3529, + "[:": 3530, + "agement": 3531, + "lev": 3532, + "_ID": 3533, + "97": 3534, + "rary": 3535, + "ades": 3536, + "_se": 3537, + "ause": 3538, + "Ġemploy": 3539, + "Ġ*/čĊ": 3540, + "Ġfre": 3541, + "Ġ'@": 3542, + "Ġcomplet": 3543, + "Ġlarge": 3544, + "ral": 3545, + "\\x": 3546, + "Ġfac": 3547, + ">": 3662, + "Ġface": 3663, + "CTION": 3664, + "Ġsave": 3665, + "Ġtyp": 3666, + "dev": 3667, + "(\"#": 3668, + "AGE": 3669, + "container": 3670, + "edit": 3671, + "QL": 3672, + "Ġitems": 3673, + "Ġsocial": 3674, + "ien": 3675, + "ĠReact": 3676, + ").ĊĊ": 3677, + "Ġmar": 3678, + "Ġredu": 3679, + "ĠRE": 3680, + ".put": 3681, + "Ġmajor": 3682, + "Cell": 3683, + "next": 3684, + "Ġexpected": 3685, + "Ġyet": 3686, + "Ġindiv": 3687, + "tributes": 3688, + "atis": 3689, + "amed": 3690, + "Ġfood": 3691, + "Source": 3692, + "(string": 3693, + "Ġ+Ċ": 3694, + "ites": 3695, + "dr": 3696, + "Ġmembers": 3697, + "Ġcomb": 3698, + "items": 3699, + "ĠPer": 3700, + "TH": 3701, + "=True": 3702, + "Ġbar": 3703, + "_SE": 3704, + "comm": 3705, + "(w": 3706, + ")ĊĊĊ": 3707, + "Ġsend": 3708, + "Ġinc": 3709, + "unsigned": 3710, + "FA": 3711, + "Ġparams": 3712, + "apping": 3713, + "ros": 3714, + "ugin": 3715, + "fa": 3716, + "Ġconnection": 3717, + "Ġ};ĊĊ": 3718, + "Ġbecome": 3719, + "Mode": 3720, + "Ġev": 3721, + "Ġdiff": 3722, + "ĠUnited": 3723, + "Height": 3724, + "fully": 3725, + "images": 3726, + "Ġmakes": 3727, + "Ġglobal": 3728, + "Ġcontact": 3729, + "':Ċ": 3730, + "Ġabs": 3731, + "аÐ": 3732, + "float": 3733, + "Ġexcept": 3734, + "ĠPol": 3735, + "Child": 3736, + "typ": 3737, + "Ġcertain": 3738, + "ión": 3739, + "OUT": 3740, + "Ġimpro": 3741, + "iles": 3742, + "Ġ-->Ċ": 3743, + "ĠPart": 3744, + "values": 3745, + "oss": 3746, + "/**": 3747, + "ilit": 3748, + "ĠEvent": 3749, + "curity": 3750, + "ster": 3751, + "Ġcharacter": 3752, + "198": 3753, + "Ġnews": 3754, + "Ġ\",": 3755, + "Ġdevice": 3756, + "cel": 3757, + "login": 3758, + "heet": 3759, + "Default": 3760, + "@\"": 3761, + "ĉĠ": 3762, + "click": 3763, + "(value": 3764, + "ĠAb": 3765, + "Ġprevious": 3766, + "ERROR": 3767, + "ocal": 3768, + "Ġmaterial": 3769, + "Ġbelow": 3770, + "ĠChrist": 3771, + "Ġmedia": 3772, + "cover": 3773, + "ĠUI": 3774, + "Ġfail": 3775, + "Ġblack": 3776, + "Ġcomponent": 3777, + "ĠAmerican": 3778, + "Ġadded": 3779, + "Ġbuy": 3780, + "stit": 3781, + "Ġcame": 3782, + "Ġdelete": 3783, + "property": 3784, + "oding": 3785, + "Ġcard": 3786, + "rops": 3787, + "Ġhttps": 3788, + "Ġroot": 3789, + "Ġhandle": 3790, + "CC": 3791, + "Back": 3792, + "emplate": 3793, + "Ġgetting": 3794, + "_by": 3795, + "mail": 3796, + "_sh": 3797, + ".assert": 3798, + "ĠDec": 3799, + "(true": 3800, + "Ġcomput": 3801, + "Ġclaim": 3802, + "'=>": 3803, + "ĠSub": 3804, + "Ġair": 3805, + "ops": 3806, + "nav": 3807, + "ements": 3808, + "(id": 3809, + "Ġenter": 3810, + "anged": 3811, + "End": 3812, + "Ġlocation": 3813, + "Ġnight": 3814, + "Ġdoing": 3815, + "ĠRed": 3816, + "lin": 3817, + "}ĊĊĊ": 3818, + "vider": 3819, + "Ġpick": 3820, + "Ġwatch": 3821, + "essages": 3822, + "Ġhuman": 3823, + "Ġdam": 3824, + "pend": 3825, + "dir": 3826, + "Ġtax": 3827, + "Ġgirl": 3828, + "reet": 3829, + "Ġbox": 3830, + "Ġstrong": 3831, + "(v": 3832, + "rel": 3833, + "Ġinterface": 3834, + "Ġmsg": 3835, + "fect": 3836, + "_at": 3837, + "Ġhouse": 3838, + "Ġtrack": 3839, + "');ĊĊ": 3840, + "je": 3841, + "ĠJohn": 3842, + "istr": 3843, + "(S": 3844, + "ube": 3845, + "Ġce": 3846, + "itted": 3847, + "VER": 3848, + "*)": 3849, + "parent": 3850, + "Ġapplication": 3851, + "any": 3852, + ".swing": 3853, + "Ġpack": 3854, + "\\u": 3855, + "Ġpract": 3856, + "Ġsection": 3857, + "ctx": 3858, + "Ġunsigned": 3859, + ".Point": 3860, + "ĠOne": 3861, + "ı": 3862, + "iple": 3863, + "aid": 3864, + "Ñĥ": 3865, + "Vector": 3866, + "byte": 3867, + "Ġwait": 3868, + "ĠÃł": 3869, + "Ã¥": 3870, + "Ġtogether": 3871, + "Ġthrows": 3872, + "FO": 3873, + "'))": 3874, + "host": 3875, + "ising": 3876, + ".view": 3877, + "Ġterms": 3878, + "framework": 3879, + "-r": 3880, + "Ġapply": 3881, + "Ġsession": 3882, + "Options": 3883, + "uggest": 3884, + "Ġothers": 3885, + "witter": 3886, + "Ġfund": 3887, + "Init": 3888, + "__(": 3889, + "ensor": 3890, + "GET": 3891, + "Ġseveral": 3892, + "ii": 3893, + "[j": 3894, + "IO": 3895, + "Ġtemplate": 3896, + "Position": 3897, + "Ġecon": 3898, + "achine": 3899, + "Ġil": 3900, + ".spring": 3901, + "main": 3902, + "elt": 3903, + "iment": 3904, + "Rec": 3905, + "mm": 3906, + "ĠUniversity": 3907, + "ursor": 3908, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 3909, + "GL": 3910, + "icture": 3911, + "ithub": 3912, + "cer": 3913, + "cast": 3914, + "From": 3915, + "ales": 3916, + "Ġsubject": 3917, + "password": 3918, + "ny": 3919, + "Ġesc": 3920, + ".write": 3921, + "ï¼Į": 3922, + "What": 3923, + ".H": 3924, + "Ġhistory": 3925, + "ĠFe": 3926, + "Ġindividual": 3927, + "unit": 3928, + "Ġ-->": 3929, + "Ġdu": 3930, + "IST": 3931, + "Ġusers": 3932, + "fs": 3933, + "false": 3934, + "unt": 3935, + "Title": 3936, + "Ġmot": 3937, + "Ġfuture": 3938, + "ached": 3939, + "Ġstarted": 3940, + "Ġmode": 3941, + "Ġ'<": 3942, + "_array": 3943, + "Ġax": 3944, + "'];Ċ": 3945, + "ires": 3946, + "There": 3947, + "ught": 3948, + "tml": 3949, + "posed": 3950, + "icult": 3951, + "Ġtook": 3952, + "Ġgames": 3953, + "Ġ}}": 3954, + "Ġ?>Ċ": 3955, + "Ġproducts": 3956, + "Is": 3957, + "Ġbad": 3958, + "ĠDes": 3959, + ".path": 3960, + "'ĊĊ": 3961, + "ĠPost": 3962, + "avel": 3963, + "(:": 3964, + "150": 3965, + "Ġneeds": 3966, + "Ġknown": 3967, + "Fl": 3968, + "Ġexec": 3969, + "Ġseen": 3970, + "51": 3971, + "ume": 3972, + "Ġborder": 3973, + "Ġlive": 3974, + "temp": 3975, + "Per": 3976, + "Ġvariable": 3977, + "iet": 3978, + "ĠDef": 3979, + "Ġge": 3980, + "eme": 3981, + "_back": 3982, + "first": 3983, + "Ġprovided": 3984, + "////////////////////////////////": 3985, + "Ġfilename": 3986, + "Ġhope": 3987, + "uly": 3988, + "auto": 3989, + "find": 3990, + "_string": 3991, + "btn": 3992, + "itude": 3993, + "Attribute": 3994, + "Ġyoung": 3995, + ".txt": 3996, + "Ġwebsite": 3997, + "ĠProp": 3998, + "Ġey": 3999, + ">();Ċ": 4000, + "ional": 4001, + "ARR": 4002, + "ictionary": 4003, + "urther": 4004, + ".": 4085, + "tx": 4086, + "Ġpur": 4087, + "uel": 4088, + "ymbol": 4089, + "uation": 4090, + "anger": 4091, + "Ġbackground": 4092, + "ecess": 4093, + "efined": 4094, + "........": 4095, + "Ġdescription": 4096, + "Ġrepresent": 4097, + "\"));Ċ": 4098, + "pression": 4099, + "rowser": 4100, + "Ġseries": 4101, + "wards": 4102, + "52": 4103, + "($_": 4104, + "aise": 4105, + "Ġhot": 4106, + "acity": 4107, + "ries": 4108, + "actions": 4109, + "Create": 4110, + "adio": 4111, + "amples": 4112, + "Ġoriginal": 4113, + "ensive": 4114, + "font": 4115, + "stream": 4116, + "using": 4117, + ".springframework": 4118, + "001": 4119, + "server": 4120, + "Ġbill": 4121, + "ACK": 4122, + "ilename": 4123, + "Ġframe": 4124, + "Ġ=Ċ": 4125, + "Edit": 4126, + "adius": 4127, + "Ġdraw": 4128, + "anks": 4129, + "Ġdeter": 4130, + "Ġcomes": 4131, + "_int": 4132, + "Ġforeach": 4133, + "angle": 4134, + "Ġelect": 4135, + "pected": 4136, + "Header": 4137, + "istration": 4138, + "False": 4139, + "ĠGame": 4140, + "Ġfilter": 4141, + "Activity": 4142, + "Ġlarg": 4143, + "inition": 4144, + "Ġ\"<": 4145, + "256": 4146, + "ised": 4147, + "Ġremove": 4148, + "ĠTrans": 4149, + "met": 4150, + "see": 4151, + "Format": 4152, + "Command": 4153, + "ĠEX": 4154, + "None": 4155, + "Ġfront": 4156, + "ASE": 4157, + "ĠRec": 4158, + "oundation": 4159, + "Ġvo": 4160, + "96": 4161, + "=\\\"": 4162, + "(*": 4163, + "Change": 4164, + ".Write": 4165, + "group": 4166, + "ients": 4167, + "uy": 4168, + "****************************************************************": 4169, + "Ġdig": 4170, + "hr": 4171, + "(-": 4172, + "Ġgen": 4173, + "number": 4174, + "vec": 4175, + "urope": 4176, + "entry": 4177, + "LL": 4178, + "Ġste": 4179, + "Valid": 4180, + "'],": 4181, + "_param": 4182, + "Ġselected": 4183, + "Ġaccording": 4184, + "ĠDis": 4185, + "Ġutil": 4186, + "Buffer": 4187, + "_error": 4188, + "Ġassoci": 4189, + "_SIZE": 4190, + "Ġwor": 4191, + "Ġprintf": 4192, + "rag": 4193, + "Âł": 4194, + "DD": 4195, + "ĠVal": 4196, + "Ġactiv": 4197, + "Eng": 4198, + "etime": 4199, + "Ġvirtual": 4200, + "aign": 4201, + "aur": 4202, + "ĠPres": 4203, + "ĠException": 4204, + "Ġanything": 4205, + "ĠOff": 4206, + "Ġhours": 4207, + "Ġwar": 4208, + "Args": 4209, + "aging": 4210, + "Ġmodels": 4211, + "ĠTime": 4212, + "Ob": 4213, + "ams": 4214, + "joy": 4215, + "Ġearly": 4216, + ".read": 4217, + "86": 4218, + "Ġcenter": 4219, + "ĠInitial": 4220, + "Ġlanguage": 4221, + "length": 4222, + "xy": 4223, + "Ġsn": 4224, + "Ġinf": 4225, + "Post": 4226, + "Ġago": 4227, + "Ġeasy": 4228, + "_code": 4229, + "ĠANY": 4230, + "_ch": 4231, + "Ġdownload": 4232, + "(T": 4233, + "aved": 4234, + "âĢĵ": 4235, + "Ġstudents": 4236, + "Ġfig": 4237, + "light": 4238, + "xx": 4239, + "Ġbuffer": 4240, + "ĠDep": 4241, + "ĠMath": 4242, + "ITH": 4243, + "Ġvari": 4244, + "Ġdue": 4245, + "Factory": 4246, + "Ġpor": 4247, + "Ġep": 4248, + "otype": 4249, + "Ġcannot": 4250, + "Ġwhite": 4251, + "čĊ": 4524, + ".annot": 4525, + "Ġcollection": 4526, + "'.": 4527, + "Ġsimilar": 4528, + "Ġtaken": 4529, + "(\"%": 4530, + "Order": 4531, + "']Ċ": 4532, + "-md": 4533, + "ĠTH": 4534, + "aced": 4535, + "Ġisn": 4536, + "/j": 4537, + "Ġson": 4538, + "graph": 4539, + "ĠInteger": 4540, + "Ġnecess": 4541, + "reen": 4542, + "Ġum": 4543, + "Ġ\\<": 4544, + "Ġmoment": 4545, + "Ġbring": 4546, + "Ġindic": 4547, + "ysis": 4548, + "Level": 4549, + "verse": 4550, + "urrenc": 4551, + "_test": 4552, + "Ġentire": 4553, + "Down": 4554, + "Ġ}ĊĊĊ": 4555, + "(result": 4556, + "ĠRead": 4557, + "è": 4558, + "Mod": 4559, + "Ġtrying": 4560, + "\"),Ċ": 4561, + "Ġmember": 4562, + "ĠCor": 4563, + "ODO": 4564, + "-control": 4565, + "untime": 4566, + "ĠSim": 4567, + "Dialog": 4568, + "plot": 4569, + "_on": 4570, + "Ġphys": 4571, + "}/": 4572, + "Ġnamespace": 4573, + "ĉčĊ": 4574, + "acc": 4575, + "Player": 4576, + "ARE": 4577, + "89": 4578, + "Ġfoot": 4579, + "Ġboard": 4580, + "part": 4581, + "Ġsus": 4582, + "wise": 4583, + "ĠMc": 4584, + "Ġpush": 4585, + "ATA": 4586, + "Ġplease": 4587, + "ried": 4588, + "weet": 4589, + "bit": 4590, + "ided": 4591, + "VE": 4592, + "ĠSw": 4593, + "UB": 4594, + "Ġtypes": 4595, + "edia": 4596, + "Ġclos": 4597, + "acebook": 4598, + "When": 4599, + "Ġedit": 4600, + "igger": 4601, + "Ġenerg": 4602, + "Container": 4603, + "Ġphot": 4604, + "ĠCount": 4605, + "ĠEurope": 4606, + ".Is": 4607, + "ĠRuss": 4608, + "peed": 4609, + "ĠStr": 4610, + "Ġpy": 4611, + "Ġcult": 4612, + "Ġdefined": 4613, + "ccount": 4614, + "Ġobt": 4615, + ".Location": 4616, + "Ġthread": 4617, + "ille": 4618, + "Ġinstead": 4619, + "strong": 4620, + "ĠSec": 4621, + "URE": 4622, + "Ġidea": 4623, + ".se": 4624, + "emy": 4625, + "selected": 4626, + "Connection": 4627, + "acing": 4628, + "thread": 4629, + ".next": 4630, + "Ġcoll": 4631, + "Ġfilm": 4632, + "istic": 4633, + "Ġcompet": 4634, + "Ġconn": 4635, + "though": 4636, + "Ġcompan": 4637, + "ocket": 4638, + "Ġteach": 4639, + "=(": 4640, + "Ġphone": 4641, + "Ġactive": 4642, + "79": 4643, + "delete": 4644, + "101": 4645, + "tries": 4646, + "Ġmo": 4647, + "Ġdeath": 4648, + "});ĊĊ": 4649, + "ocol": 4650, + "Widget": 4651, + "Ġarticle": 4652, + "rodu": 4653, + "andid": 4654, + "Ñĭ": 4655, + "ĠCr": 4656, + "ka": 4657, + "():": 4658, + "lood": 4659, + "ĉĉĉĊ": 4660, + "Ġalmost": 4661, + "Ġsell": 4662, + "ervlet": 4663, + "rip": 4664, + "Unit": 4665, + "Ġapplic": 4666, + "Ġconnect": 4667, + "Ġfeature": 4668, + "Ġvia": 4669, + "'),": 4670, + "Ġlim": 4671, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 4672, + "ĠGu": 4673, + "Engine": 4674, + "Ġens": 4675, + "Ġenvironment": 4676, + "block": 4677, + "HERE": 4678, + "NULL": 4679, + "gy": 4680, + "tag": 4681, + ")).": 4682, + "exp": 4683, + "Ġcompl": 4684, + "Ġinstall": 4685, + "Ġcomplete": 4686, + "queue": 4687, + "atural": 4688, + "Ġgeneral": 4689, + "thon": 4690, + "Ġasked": 4691, + "ores": 4692, + "(res": 4693, + "Ġreserved": 4694, + "SP": 4695, + "Ġâ̦": 4696, + "ÅĤ": 4697, + "Ġsignific": 4698, + "Off": 4699, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 4700, + "ĠAg": 4701, + "ĠJust": 4702, + "ĠError": 4703, + "Ġinfl": 4704, + "adata": 4705, + "Ġicon": 4706, + "asks": 4707, + "''": 4708, + "_LO": 4709, + "?.": 4710, + "account": 4711, + "Ġ(*": 4712, + "')ĊĊ": 4713, + "rap": 4714, + "_var": 4715, + "ĠFOR": 4716, + "Ġparty": 4717, + "ĠYour": 4718, + "cat": 4719, + "stry": 4720, + ".new": 4721, + "boot": 4722, + "ĠNov": 4723, + "Ġvector": 4724, + "Ġnormal": 4725, + "Ġfurther": 4726, + "Repository": 4727, + "800": 4728, + "Ġdatabase": 4729, + "attle": 4730, + "Ġmusic": 4731, + "Ġspeed": 4732, + "Ġdoc": 4733, + "process": 4734, + "IGHT": 4735, + ".parse": 4736, + "Ġtaking": 4737, + "Ġviol": 4738, + "ceed": 4739, + "ĠAfter": 4740, + "Ġforward": 4741, + "Ġcrit": 4742, + "\"/>Ċ": 4743, + "rot": 4744, + "Ġfailed": 4745, + "efore": 4746, + "Ġconcern": 4747, + "oe": 4748, + "ba": 4749, + "Ġsender": 4750, + "Ġterm": 4751, + "has": 4752, + "=\"#": 4753, + "Ġpotential": 4754, + "Num": 4755, + "Ġpublished": 4756, + ".close": 4757, + "ĠImage": 4758, + "straint": 4759, + "UD": 4760, + "ĠOb": 4761, + "Ġprobably": 4762, + "lim": 4763, + "\":Ċ": 4764, + "olume": 4765, + "Ġconsum": 4766, + "76": 4767, + "ague": 4768, + "ensions": 4769, + "Ġinvestig": 4770, + "-year": 4771, + "');": 4772, + "-sm": 4773, + "Ġenjoy": 4774, + "orig": 4775, + "ering": 4776, + "cp": 4777, + "leased": 4778, + "plements": 4779, + "Ġreturns": 4780, + "pat": 4781, + "BO": 4782, + "ĠHouse": 4783, + ".Label": 4784, + "Ġweight": 4785, + "ighb": 4786, + "Ġconditions": 4787, + "Ġexception": 4788, + "description": 4789, + "Ġtrad": 4790, + "-to": 4791, + "Ġ{}": 4792, + "Ġmodule": 4793, + "END": 4794, + ".ap": 4795, + ".props": 4796, + "Ġconstructor": 4797, + "aves": 4798, + "Ġfavor": 4799, + "ĠNow": 4800, + ";i": 4801, + "ĠMain": 4802, + "_k": 4803, + "eries": 4804, + "âĢĻll": 4805, + "transform": 4806, + "imestamp": 4807, + "Pre": 4808, + "Ġmer": 4809, + ".res": 4810, + "stant": 4811, + "Location": 4812, + "_NAME": 4813, + "Ġloss": 4814, + "ĠĊĊ": 4815, + "net": 4816, + "Ġengine": 4817, + "Block": 4818, + "Ġissues": 4819, + "Ġparse": 4820, + "ĠBar": 4821, + "Ġstay": 4822, + "ĠJSON": 4823, + "Ġdom": 4824, + "airs": 4825, + "wner": 4826, + "Ġlower": 4827, + "\",čĊ": 4828, + "ĠDem": 4829, + "ufact": 4830, + "Ġps": 4831, + "Ġperfect": 4832, + "RL": 4833, + "Ġeduc": 4834, + "ls": 4835, + "emory": 4836, + "ARRANT": 4837, + "uge": 4838, + "Ġexact": 4839, + ".key": 4840, + "alled": 4841, + "ech": 4842, + "ief": 4843, + "\\/": 4844, + "oke": 4845, + "Ġformer": 4846, + "alloc": 4847, + "Ġsix": 4848, + "ida": 4849, + "Ġmargin": 4850, + "Ġheart": 4851, + "ald": 4852, + "pack": 4853, + ".getElementById": 4854, + "ĠWARRANT": 4855, + "Ġrather": 4856, + "Ġbuilding": 4857, + "erman": 4858, + "lice": 4859, + "Ġquestions": 4860, + "izes": 4861, + "lege": 4862, + "irectory": 4863, + "Ġje": 4864, + "Ġcas": 4865, + "props": 4866, + "utf": 4867, + "Ġsecurity": 4868, + "Ġhowever": 4869, + "weight": 4870, + "Ġinside": 4871, + "Ġpresident": 4872, + "Char": 4873, + "ĠWITH": 4874, + ".map": 4875, + "Ġgraph": 4876, + "Ġtag": 4877, + "_status": 4878, + "Ġattempt": 4879, + "opp": 4880, + "uses": 4881, + "ĉconst": 4882, + "Ġround": 4883, + ",$": 4884, + "Ġfriends": 4885, + "Email": 4886, + "?>": 4887, + "Resource": 4888, + "KEY": 4889, + "osp": 4890, + ".query": 4891, + "ĠNorth": 4892, + "ables": 4893, + "istrib": 4894, + "_class": 4895, + "ello": 4896, + "That": 4897, + "к": 4898, + "pecially": 4899, + "ĠPresident": 4900, + "Ġcampaign": 4901, + "Ġalt": 4902, + "area": 4903, + "Ġchall": 4904, + "Ġopport": 4905, + ".Con": 4906, + "Ġenergy": 4907, + "like": 4908, + ".string": 4909, + "ington": 4910, + ")*": 4911, + "yy": 4912, + "Ġprofession": 4913, + "irth": 4914, + "Ġseg": 4915, + "æľ": 4916, + "Ġhor": 4917, + "iers": 4918, + "can": 4919, + "Ġbehind": 4920, + "Product": 4921, + "fg": 4922, + "ĠSk": 4923, + ".jpg": 4924, + "?:": 4925, + "];ĊĊ": 4926, + "Ġcallback": 4927, + "ĠHttp": 4928, + "ÑĮ": 4929, + "long": 4930, + "MS": 4931, + "ATH": 4932, + "Ġraise": 4933, + "Ġwanted": 4934, + "rown": 4935, + "utor": 4936, + "lt": 4937, + "]=": 4938, + "eline": 4939, + "MA": 4940, + "Ġsepar": 4941, + "cs": 4942, + "semb": 4943, + "Dis": 4944, + "bserv": 4945, + "ĠWill": 4946, + "Ġpolicy": 4947, + "Ġthird": 4948, + "phone": 4949, + "Ġbed": 4950, + "/g": 4951, + ".__": 4952, + "ĠInc": 4953, + "izing": 4954, + ".remove": 4955, + "instance": 4956, + ".type": 4957, + "Ġserv": 4958, + "Each": 4959, + "Ġhar": 4960, + "ĠMessage": 4961, + "(key": 4962, + "SELECT": 4963, + "Pos": 4964, + "));čĊ": 4965, + "Ġrecomm": 4966, + "Ġtraining": 4967, + "ĠEnt": 4968, + "ĠChar": 4969, + "icht": 4970, + "(file": 4971, + "Ġprior": 4972, + "Game": 4973, + "Ġexit": 4974, + "Params": 4975, + ".core": 4976, + "PC": 4977, + "nes": 4978, + "anced": 4979, + "(request": 4980, + "Password": 4981, + "}>Ċ": 4982, + "Ġmag": 4983, + "Ġrelease": 4984, + "Ġshall": 4985, + "udent": 4986, + "ĠSouth": 4987, + "ando": 4988, + ":'": 4989, + ".TabIndex": 4990, + "sk": 4991, + "anner": 4992, + "isset": 4993, + "Ġoutside": 4994, + "ledge": 4995, + "Ġå": 4996, + "ĠRob": 4997, + "Ġimm": 4998, + "!Ċ": 4999, + "ĠWeb": 5000, + "Des": 5001, + "BC": 5002, + "ancial": 5003, + "Route": 5004, + "Dec": 5005, + "ferences": 5006, + "Ġpurch": 5007, + "ĠModel": 5008, + "ctor": 5009, + "gn": 5010, + "_start": 5011, + "_un": 5012, + ".*": 5013, + "ises": 5014, + "Ġground": 5015, + "Ġunique": 5016, + "Ġbeaut": 5017, + "{\"": 5018, + "Ġpour": 5019, + "ĠOct": 5020, + "Ġtree": 5021, + "sets": 5022, + "_res": 5023, + "')->": 5024, + "_reg": 5025, + "(\"\\": 5026, + "Ġbyte": 5027, + "Bl": 5028, + "Ġdating": 5029, + "Ġmatter": 5030, + "ĠRem": 5031, + "Ġ'../": 5032, + "ĠAug": 5033, + "ĠLa": 5034, + "Ġ$(": 5035, + "ournal": 5036, + "111": 5037, + "iam": 5038, + "Ġshows": 5039, + "write": 5040, + "Ġball": 5041, + "Ġsimply": 5042, + "Ġfast": 5043, + "Ġmemory": 5044, + "ASS": 5045, + "ĠOf": 5046, + "oved": 5047, + "ante": 5048, + "aul": 5049, + "istry": 5050, + ")));Ċ": 5051, + "Ġfit": 5052, + "_": 5239, + "\")ĊĊ": 5240, + "ox": 5241, + "application": 5242, + "Ġ]Ċ": 5243, + "ĊĊĊĊĊĊ": 5244, + "180": 5245, + "Ġsoon": 5246, + "ctions": 5247, + "inger": 5248, + "Ġjoin": 5249, + "ĠPe": 5250, + "Ġë": 5251, + "Ġlas": 5252, + ".E": 5253, + "css": 5254, + "/or": 5255, + "ĠStart": 5256, + "ĠTO": 5257, + "Ġsubs": 5258, + "conn": 5259, + "components": 5260, + "DEBUG": 5261, + "quare": 5262, + "Function": 5263, + "endar": 5264, + ".index": 5265, + "Ġfill": 5266, + "ÄĻ": 5267, + "Ġchoose": 5268, + "how": 5269, + "ĠAmerica": 5270, + "assets": 5271, + "------------": 5272, + "ĠValue": 5273, + "Ġoffice": 5274, + "Ġveh": 5275, + "Ġtransform": 5276, + "ĠArt": 5277, + "Ġinde": 5278, + "Ġfn": 5279, + "Ġimplements": 5280, + "ango": 5281, + "plete": 5282, + "+\"": 5283, + "tmp": 5284, + "amily": 5285, + "Ġhash": 5286, + "missions": 5287, + "EST": 5288, + "gt": 5289, + "Provider": 5290, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 5291, + "Ġflag": 5292, + "Ġparticip": 5293, + "den": 5294, + "ĠReturns": 5295, + "Ġnote": 5296, + "ür": 5297, + "pm": 5298, + "ideos": 5299, + "Ġspecified": 5300, + "ĠEN": 5301, + "ester": 5302, + "olid": 5303, + "Ġupon": 5304, + "(std": 5305, + "ĉv": 5306, + "Ġ'\\": 5307, + "uz": 5308, + "Ġvert": 5309, + "Ġvict": 5310, + "ĉself": 5311, + "Ġ\"$": 5312, + "85": 5313, + ".k": 5314, + "Ġgroups": 5315, + "github": 5316, + "lang": 5317, + "Ġmut": 5318, + "TO": 5319, + "Ġve": 5320, + "ĠPlease": 5321, + ";ĊĊĊ": 5322, + "access": 5323, + "Ġ{\"": 5324, + "rea": 5325, + "Ġrisk": 5326, + "icker": 5327, + "oggle": 5328, + "ĉwhile": 5329, + "ANG": 5330, + ".send": 5331, + "72": 5332, + "Ġwoman": 5333, + "Ġgets": 5334, + "Ġign": 5335, + "ĠId": 5336, + "_log": 5337, + "ONE": 5338, + "Ġevid": 5339, + "ĠHar": 5340, + "_sub": 5341, + "Ġendl": 5342, + "Ġincluded": 5343, + "());ĊĊ": 5344, + "ĠAp": 5345, + "igr": 5346, + "Ġsem": 5347, + "ĠBlack": 5348, + "doc": 5349, + "_table": 5350, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 5351, + "-up": 5352, + "Ġcause": 5353, + "Ġ..": 5354, + "Ġvan": 5355, + "_dict": 5356, + "Ġfocus": 5357, + "IND": 5358, + "CESS": 5359, + ".Log": 5360, + "Ġmultiple": 5361, + "ido": 5362, + "Ġregard": 5363, + "-M": 5364, + "andler": 5365, + "ourse": 5366, + "Ġdeg": 5367, + ".U": 5368, + "Ġaddition": 5369, + "Ġvarious": 5370, + "Ġreceive": 5371, + "ен": 5372, + "ĠHT": 5373, + "Obj": 5374, + "DF": 5375, + "Ġincrease": 5376, + "ĠOpen": 5377, + "];": 5378, + "Ġcommit": 5379, + "?Ċ": 5380, + "ategories": 5381, + "atory": 5382, + "ship": 5383, + "ĠMich": 5384, + "Ġhtml": 5385, + "romise": 5386, + "Ġleave": 5387, + "Ġstrateg": 5388, + "aven": 5389, + "ĠConsole": 5390, + "known": 5391, + "-n": 5392, + "_LE": 5393, + ".component": 5394, + "Ġbre": 5395, + "Session": 5396, + "iance": 5397, + "Ġalign": 5398, + "typedef": 5399, + "_result": 5400, + "ĠWHERE": 5401, + ".split": 5402, + "Ġreading": 5403, + "FAULT": 5404, + "Ġclo": 5405, + "Ġnotice": 5406, + "_pr": 5407, + "arter": 5408, + "Ġlock": 5409, + "Ġstandard": 5410, + "etic": 5411, + "ellow": 5412, + "Ġpadding": 5413, + "ĠHis": 5414, + "Ġstates": 5415, + "_cast": 5416, + "(P": 5417, + "aa": 5418, + "Ġinternal": 5419, + "ean": 5420, + "ĠPRO": 5421, + "ĠKey": 5422, + "Ġespecially": 5423, + "ming": 5424, + "Ġcross": 5425, + "Ġnational": 5426, + "_object": 5427, + "filter": 5428, + "Ġscript": 5429, + ".update": 5430, + "_i": 5431, + "ĠAssert": 5432, + "/core": 5433, + "%%%%": 5434, + "Ġproblems": 5435, + "istor": 5436, + "Ġ.=": 5437, + "Ġarch": 5438, + "Ġwritten": 5439, + "Ġmilit": 5440, + "MENT": 5441, + ".ch": 5442, + "cape": 5443, + "ĠMus": 5444, + "_config": 5445, + "ĠAPI": 5446, + "foot": 5447, + "Ġimages": 5448, + "endl": 5449, + ".In": 5450, + "First": 5451, + "Ġplatform": 5452, + ".prot": 5453, + "Option": 5454, + "ste": 5455, + "ĠTODO": 5456, + "Ġforce": 5457, + ".cont": 5458, + "ĉecho": 5459, + "ĠDav": 5460, + "Ptr": 5461, + "(B": 5462, + "RT": 5463, + "ĠBase": 5464, + "]['": 5465, + "Ġannounc": 5466, + "console": 5467, + "ĠPy": 5468, + "ds": 5469, + ".as": 5470, + "Ġprevent": 5471, + "apan": 5472, + "Ġ{'": 5473, + "}'": 5709, + "Ġdead": 5710, + "VAL": 5711, + "QUE": 5712, + "************************************************************************": 5713, + "Ġcharg": 5714, + "Return": 5715, + "Ġful": 5716, + "dom": 5717, + "Ġrules": 5718, + "Ġmodify": 5719, + "Ġeval": 5720, + "ham": 5721, + "atement": 5722, + "\\<": 5723, + "ula": 5724, + "=False": 5725, + "RA": 5726, + "Ġcontains": 5727, + "74": 5728, + "Ġstack": 5729, + "mar": 5730, + "Ġ{}Ċ": 5731, + "Ġundefined": 5732, + "Ass": 5733, + "ĠChina": 5734, + "vey": 5735, + "*Ċ": 5736, + "Ġplaying": 5737, + ")/": 5738, + "actor": 5739, + "Ġbottom": 5740, + "lier": 5741, + "ĠNumber": 5742, + "Ġcouple": 5743, + "DC": 5744, + "ĠSO": 5745, + "gor": 5746, + ".setText": 5747, + "success": 5748, + "command": 5749, + "Filter": 5750, + "ĠOur": 5751, + "_item": 5752, + "Ġctx": 5753, + "Ġroad": 5754, + "Version": 5755, + "case": 5756, + "urt": 5757, + "avior": 5758, + "ych": 5759, + "sembly": 5760, + "ĠProduct": 5761, + "Ġheld": 5762, + "afe": 5763, + "Ġincludes": 5764, + "&": 5909, + "CON": 5910, + "Ġrepl": 5911, + "Ġregular": 5912, + "Storage": 5913, + "ramework": 5914, + "Ġgoal": 5915, + "Ġtouch": 5916, + ".widget": 5917, + "Ġbuilt": 5918, + "des": 5919, + "Part": 5920, + "(re": 5921, + "Ġworth": 5922, + "hib": 5923, + "game": 5924, + "91": 5925, + "192": 5926, + "Ġв": 5927, + "acion": 5928, + "ĠWhite": 5929, + "(type": 5930, + "(`": 5931, + "81": 5932, + "Ġnatural": 5933, + "Ġinj": 5934, + "Ġcalcul": 5935, + "ĠApril": 5936, + ".List": 5937, + "Ġassociated": 5938, + "ĉSystem": 5939, + "~~": 5940, + "=[": 5941, + "Ġstorage": 5942, + "Ġbytes": 5943, + "Ġtravel": 5944, + "Ġsou": 5945, + "Ġpassed": 5946, + "!=": 5947, + "ascript": 5948, + ".open": 5949, + "Ġgrid": 5950, + "Ġbus": 5951, + "Ġrecogn": 5952, + "Ab": 5953, + "Ġhon": 5954, + "ĠCenter": 5955, + "Ġprec": 5956, + "build": 5957, + "73": 5958, + "HTML": 5959, + "ĠSan": 5960, + "Ġcountries": 5961, + "aled": 5962, + "token": 5963, + "kt": 5964, + "Ġqual": 5965, + "Last": 5966, + "adow": 5967, + "Ġmanufact": 5968, + "idad": 5969, + "jango": 5970, + "Next": 5971, + "xf": 5972, + ".a": 5973, + "Ġporno": 5974, + "ĠPM": 5975, + "erve": 5976, + "iting": 5977, + "_th": 5978, + "ci": 5979, + "=None": 5980, + "gs": 5981, + "Ġlogin": 5982, + "atives": 5983, + "']);Ċ": 5984, + "Äħ": 5985, + "Ġill": 5986, + "IA": 5987, + "children": 5988, + "DO": 5989, + "Ġlevels": 5990, + "Ġ{{": 5991, + "Ġlooks": 5992, + "Ġ\"#": 5993, + "ToString": 5994, + "Ġnecessary": 5995, + "ĠĠĠĊ": 5996, + "cell": 5997, + "Entry": 5998, + "Ġ'#": 5999, + "Ġextrem": 6000, + "Selector": 6001, + "Ġplaceholder": 6002, + "Load": 6003, + "Ġreleased": 6004, + "ORE": 6005, + "Enumer": 6006, + "ĠTV": 6007, + "SET": 6008, + "inq": 6009, + "Press": 6010, + "ĠDepartment": 6011, + "Ġproperties": 6012, + "Ġrespond": 6013, + "Search": 6014, + "ael": 6015, + "Ġrequ": 6016, + "ĠBook": 6017, + "/Ċ": 6018, + "(st": 6019, + "Ġfinancial": 6020, + "icket": 6021, + "_input": 6022, + "Ġthreat": 6023, + "(in": 6024, + "Strip": 6025, + "ìĿ": 6026, + "ção": 6027, + "71": 6028, + "Ġevidence": 6029, + "));": 6030, + "ĠBro": 6031, + "Ġ[];Ċ": 6032, + "Ġou": 6033, + "buf": 6034, + "Script": 6035, + "dat": 6036, + "Ġrule": 6037, + "#import": 6038, + "=\"/": 6039, + "Serial": 6040, + "Ġstarting": 6041, + "[index": 6042, + "ae": 6043, + "Ġcontrib": 6044, + "session": 6045, + "_new": 6046, + "utable": 6047, + "ober": 6048, + "Ġ\"./": 6049, + "Ġlogger": 6050, + "Ġrecently": 6051, + "Ġreturned": 6052, + "ččĊ": 6053, + ")))Ċ": 6054, + "itions": 6055, + "Ġseek": 6056, + "Ġcommunic": 6057, + "Ġ\".": 6058, + "Ġusername": 6059, + "ECT": 6060, + "DS": 6061, + "Ġotherwise": 6062, + "ĠGerman": 6063, + ".aw": 6064, + "Adapter": 6065, + "ixel": 6066, + "Ġsystems": 6067, + "Ġdrop": 6068, + "83": 6069, + "Ġstructure": 6070, + "Ġ$(\"#": 6071, + "encies": 6072, + "anning": 6073, + "ĠLink": 6074, + "ĠResponse": 6075, + "Ġstri": 6076, + "ż": 6077, + "ĠDB": 6078, + "æĹ": 6079, + "android": 6080, + "submit": 6081, + "otion": 6082, + "92": 6083, + "(@": 6084, + ".test": 6085, + "82": 6086, + "ĊĊĊĊĊĊĊĊ": 6087, + "];čĊ": 6088, + "Ġdirectly": 6089, + "Ġ\"%": 6090, + "ris": 6091, + "elta": 6092, + "AIL": 6093, + "){čĊ": 6094, + "mine": 6095, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 6096, + "(k": 6097, + "bon": 6098, + "asic": 6099, + "pite": 6100, + "___": 6101, + "Max": 6102, + "Ġerrors": 6103, + "ĠWhile": 6104, + "Ġarguments": 6105, + "Ġensure": 6106, + "Right": 6107, + "-based": 6108, + "Web": 6109, + "Ġ-=": 6110, + "Ġintrodu": 6111, + "ĠInst": 6112, + "ĠWash": 6113, + "ordin": 6114, + "join": 6115, + "Database": 6116, + "Ġgrad": 6117, + "Ġusually": 6118, + "ITE": 6119, + "Props": 6120, + "?>Ċ": 6121, + "ĠGo": 6122, + "@Override": 6123, + "REF": 6124, + "Ġip": 6125, + "ĠAustral": 6126, + "Ġist": 6127, + "ViewById": 6128, + "Ġserious": 6129, + "Ġcustomer": 6130, + ".prototype": 6131, + "odo": 6132, + "cor": 6133, + "Ġdoor": 6134, + "ĠWITHOUT": 6135, + "Ġplant": 6136, + "Ġbegan": 6137, + "Ġdistance": 6138, + "()).": 6139, + "Ġchance": 6140, + "Ġord": 6141, + "came": 6142, + "pragma": 6143, + "Ġprotect": 6144, + "ragment": 6145, + "ĠNode": 6146, + "ening": 6147, + "Ñĩ": 6148, + "Ġroute": 6149, + "ĠSchool": 6150, + "hi": 6151, + "Ġneighb": 6152, + "After": 6153, + "licit": 6154, + "Ġcontr": 6155, + "Ġprimary": 6156, + "AA": 6157, + ".WriteLine": 6158, + "utils": 6159, + "Ġbi": 6160, + "Red": 6161, + ".Linq": 6162, + ".object": 6163, + "Ġleaders": 6164, + "unities": 6165, + "Ġgun": 6166, + "onth": 6167, + "ĠDev": 6168, + "FILE": 6169, + "Ġcomments": 6170, + "_len": 6171, + "arrow": 6172, + "amount": 6173, + "Range": 6174, + "sert": 6175, + "GridView": 6176, + "Ġupdated": 6177, + "ĠMo": 6178, + "Ġinform": 6179, + "ociety": 6180, + "ala": 6181, + "Access": 6182, + "Ġhab": 6183, + "Ġcreat": 6184, + "_arg": 6185, + "ĠJanuary": 6186, + "ĠDay": 6187, + "\")čĊ": 6188, + "uple": 6189, + "document": 6190, + "gorith": 6191, + "menu": 6192, + "ĠOver": 6193, + "bb": 6194, + ".title": 6195, + "_out": 6196, + "Ġled": 6197, + "uri": 6198, + "Ġ?>Ċ": 6235, + "run": 6236, + "Ġscene": 6237, + "(array": 6238, + "device": 6239, + "_title": 6240, + "agon": 6241, + "]čĊ": 6242, + "aby": 6243, + "Ġbecame": 6244, + "boolean": 6245, + "Ġpark": 6246, + "ĠCode": 6247, + "upload": 6248, + "riday": 6249, + "ĠSeptember": 6250, + "Fe": 6251, + "Ġsen": 6252, + "cing": 6253, + "FL": 6254, + "Col": 6255, + "uts": 6256, + "_page": 6257, + "inn": 6258, + "Ġimplied": 6259, + "aling": 6260, + "Ġyourself": 6261, + ".Count": 6262, + "conf": 6263, + "Ġaud": 6264, + "_init": 6265, + ".)": 6266, + "Ġwrote": 6267, + "003": 6268, + "NG": 6269, + ".Error": 6270, + "ä»": 6271, + ".for": 6272, + "Ġequal": 6273, + "ĠRequest": 6274, + "Ġserial": 6275, + "Ġallows": 6276, + "XX": 6277, + "Ġmiddle": 6278, + "chor": 6279, + "195": 6280, + "94": 6281, + "ø": 6282, + "erval": 6283, + ".Column": 6284, + "reading": 6285, + "Ġescort": 6286, + "ĠAugust": 6287, + "Ġquickly": 6288, + "Ġweap": 6289, + "ĠCG": 6290, + "ropri": 6291, + "ho": 6292, + "Ġcop": 6293, + "(struct": 6294, + "ĠBig": 6295, + "Ġvs": 6296, + "Ġfrequ": 6297, + ".Value": 6298, + "Ġactions": 6299, + "Ġproper": 6300, + "Ġinn": 6301, + "Ġobjects": 6302, + "Ġmatrix": 6303, + "avascript": 6304, + "Ġones": 6305, + ".group": 6306, + "Ġgreen": 6307, + "Ġpaint": 6308, + "ools": 6309, + "ycl": 6310, + "encode": 6311, + "olt": 6312, + "comment": 6313, + ".api": 6314, + "Dir": 6315, + "Ġune": 6316, + "izont": 6317, + ".position": 6318, + "Ġdesigned": 6319, + "_val": 6320, + "avi": 6321, + "iring": 6322, + "tab": 6323, + "Ġlayer": 6324, + "Ġviews": 6325, + "Ġreve": 6326, + "rael": 6327, + "ĠON": 6328, + "rics": 6329, + "160": 6330, + "np": 6331, + "Ġcore": 6332, + "());čĊ": 6333, + "Main": 6334, + "Ġexpert": 6335, + "ĉĉčĊ": 6336, + "_en": 6337, + "Ġ/>": 6338, + "utter": 6339, + "IAL": 6340, + "ails": 6341, + "ĠKing": 6342, + "*/ĊĊ": 6343, + "ĠMet": 6344, + "_end": 6345, + "addr": 6346, + "ora": 6347, + "Ġir": 6348, + "Min": 6349, + "Ġsurpr": 6350, + "Ġrepe": 6351, + "Ġdirectory": 6352, + "PUT": 6353, + "-S": 6354, + "Ġelection": 6355, + "haps": 6356, + ".pre": 6357, + "cm": 6358, + "Values": 6359, + "Ġ\"Ċ": 6360, + "column": 6361, + "ivil": 6362, + "Login": 6363, + "inue": 6364, + "93": 6365, + "Ġbeautiful": 6366, + "Ġsecret": 6367, + "(event": 6368, + "Ġchat": 6369, + "ums": 6370, + "Ġorigin": 6371, + "Ġeffects": 6372, + "Ġmanagement": 6373, + "illa": 6374, + "tk": 6375, + "Ġsetting": 6376, + "ĠCour": 6377, + "Ġmassage": 6378, + "ĉend": 6379, + "Ġhappy": 6380, + "Ġfinish": 6381, + "Ġcamera": 6382, + "ĠVer": 6383, + "ĠDemocr": 6384, + "ĠHer": 6385, + "(Q": 6386, + "cons": 6387, + "ita": 6388, + "Ġ'.": 6389, + "{}": 6390, + "ĉC": 6391, + "Ġstuff": 6392, + "194": 6393, + "Ġ:Ċ": 6394, + "ĠAR": 6395, + "Task": 6396, + "hidden": 6397, + "eros": 6398, + "IGN": 6399, + "atio": 6400, + "ĠHealth": 6401, + "olute": 6402, + "Enter": 6403, + "'>": 6404, + "ĠTwitter": 6405, + "ĠCounty": 6406, + "scribe": 6407, + "Ġ=>Ċ": 6408, + "Ġhy": 6409, + "fit": 6410, + "Ġmilitary": 6411, + "Ġsale": 6412, + "required": 6413, + "non": 6414, + "bootstrap": 6415, + "hold": 6416, + "rim": 6417, + "-old": 6418, + "ĠDown": 6419, + "Ġmention": 6420, + "contact": 6421, + "_group": 6422, + "oday": 6423, + "Ġtown": 6424, + "Ġsolution": 6425, + "uate": 6426, + "elling": 6427, + "]->": 6428, + "otes": 6429, + "ental": 6430, + "omen": 6431, + "ospital": 6432, + "ĠSup": 6433, + "_EN": 6434, + "Ġslow": 6435, + "SESSION": 6436, + "Ġblue": 6437, + "ago": 6438, + "Ġlives": 6439, + "Ġ^": 6440, + ".un": 6441, + "inst": 6442, + "enge": 6443, + "Ġcustomers": 6444, + "Ġcast": 6445, + "udget": 6446, + "ï¼ģ": 6447, + "icens": 6448, + "Ġdetermin": 6449, + "Selected": 6450, + "_pl": 6451, + "ueue": 6452, + "Ġdark": 6453, + "//ĊĊ": 6454, + "si": 6455, + "thern": 6456, + "ĠJapan": 6457, + "/w": 6458, + "PU": 6459, + "ĠEast": 6460, + "ovie": 6461, + "Ġpackage": 6462, + "Ġnor": 6463, + "Ġapi": 6464, + "bot": 6465, + "\"];Ċ": 6466, + "_post": 6467, + "ulate": 6468, + "Ġclub": 6469, + "'));Ċ": 6470, + "Ġloop": 6471, + "PIO": 6472, + "ione": 6473, + "shot": 6474, + "Initial": 6475, + "Ġplayed": 6476, + "register": 6477, + "rought": 6478, + "_max": 6479, + "acement": 6480, + "match": 6481, + "raphics": 6482, + "AST": 6483, + "Ġexisting": 6484, + "Ġcomplex": 6485, + "DA": 6486, + ".Ch": 6487, + ".common": 6488, + "mo": 6489, + "Ġ'../../": 6490, + "ito": 6491, + "Ġanalysis": 6492, + "Ġdeliver": 6493, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 6494, + "idx": 6495, + "Ãł": 6496, + "ongo": 6497, + "ĠEnglish": 6498, + "Ċ": 10197, + "_default": 10198, + "ĠDatabase": 10199, + "rep": 10200, + "ESS": 10201, + "nergy": 10202, + ".Find": 10203, + "_mask": 10204, + "Ġrise": 10205, + "Ġkernel": 10206, + "::$": 10207, + ".Q": 10208, + "Ġoffering": 10209, + "decl": 10210, + "ĠCS": 10211, + "Ġlisted": 10212, + "Ġmostly": 10213, + "enger": 10214, + "Ġblocks": 10215, + "olo": 10216, + "Ġgoverning": 10217, + "\\F": 10218, + "Ġconcent": 10219, + ".getText": 10220, + "Ġmb": 10221, + "Ġoccurred": 10222, + "Ġchanging": 10223, + "Scene": 10224, + "_CODE": 10225, + "Beh": 10226, + "\"The": 10227, + "Ġtile": 10228, + "ĠAssociation": 10229, + "ĉP": 10230, + "alty": 10231, + "_ad": 10232, + "odies": 10233, + "iated": 10234, + "Ġprepared": 10235, + "possible": 10236, + "Ġmort": 10237, + "TEST": 10238, + "142": 10239, + "Ġignore": 10240, + "Ġcalc": 10241, + "Ġrs": 10242, + "ĠassertEquals": 10243, + "Ġsz": 10244, + "ĠTHIS": 10245, + ".\"Ċ": 10246, + "Ġcanvas": 10247, + "java": 10248, + "Ġdut": 10249, + "VALID": 10250, + ".sql": 10251, + ".input": 10252, + "Ġaux": 10253, + "Sup": 10254, + "Ġartist": 10255, + "Vec": 10256, + "_TIME": 10257, + ".stringify": 10258, + "etween": 10259, + "ĠCategory": 10260, + "Ġ[-": 10261, + "ĠDevExpress": 10262, + "ĠJul": 10263, + "Ġring": 10264, + ".ed": 10265, + "YY": 10266, + "Let": 10267, + "TextField": 10268, + "Ġflat": 10269, + "_print": 10270, + "ĠOTHER": 10271, + "adian": 10272, + "Ġchecked": 10273, + "ele": 10274, + "Align": 10275, + "standing": 10276, + "Ġ[],": 10277, + "Ġlab": 10278, + "ucky": 10279, + "ĠChristmas": 10280, + "(image": 10281, + ".module": 10282, + "Ġlots": 10283, + "Ġslightly": 10284, + "(final": 10285, + "erge": 10286, + "è¿": 10287, + "147": 10288, + "ĠPolice": 10289, + "143": 10290, + "ĠRight": 10291, + "Ġaward": 10292, + "ĠOS": 10293, + "Ġ{}ĊĊ": 10294, + "Ġptr": 10295, + "oves": 10296, + "icated": 10297, + "ем": 10298, + "Ġmanage": 10299, + "oliday": 10300, + "Amount": 10301, + "oolStrip": 10302, + "tbody": 10303, + "Nav": 10304, + "wrap": 10305, + "BB": 10306, + "Ġwatching": 10307, + "arios": 10308, + "Ġoptional": 10309, + "_K": 10310, + "ĠLicensed": 10311, + ".Map": 10312, + "Timer": 10313, + "ĠAP": 10314, + "ĠRev": 10315, + "(o": 10316, + ",c": 10317, + "umin": 10318, + "etailed": 10319, + "ĠHy": 10320, + "Ġblank": 10321, + "agger": 10322, + "ĠSelf": 10323, + "()[": 10324, + ".make": 10325, + "earn": 10326, + "channel": 10327, + ";Ċ": 10342, + "World": 10343, + "Ġpython": 10344, + "Ġlif": 10345, + "Ġtrav": 10346, + "Ġconven": 10347, + "company": 10348, + "ĠClub": 10349, + "138": 10350, + "Ver": 10351, + "Btn": 10352, + "Ġzone": 10353, + "products": 10354, + "ĠEduc": 10355, + "Ġverify": 10356, + "ĠMil": 10357, + "ono": 10358, + "]);ĊĊ": 10359, + "ENCE": 10360, + "Ġpacket": 10361, + "Ġcer": 10362, + "Ġenumer": 10363, + "Ġpars": 10364, + "formed": 10365, + "Ġoccup": 10366, + "tre": 10367, + "Ġexercise": 10368, + "Day": 10369, + "_sum": 10370, + "Ġasking": 10371, + "aption": 10372, + "Ġorders": 10373, + "Ġspending": 10374, + "ĠERR": 10375, + ".Dis": 10376, + "ĠUtil": 10377, + "âĢľI": 10378, + "\\'": 10379, + "?)": 10380, + "/>Ċ": 10381, + "Ġemot": 10382, + "Ġinfluence": 10383, + "ĠAfrica": 10384, + "atters": 10385, + "Ùħ": 10386, + ".session": 10387, + "Ġchief": 10388, + "ĉĉĉĉĉĉĉĉĉĉĉ": 10389, + "Ġtom": 10390, + "cluded": 10391, + "serial": 10392, + "_handler": 10393, + ".Type": 10394, + "aped": 10395, + "Ġpolicies": 10396, + "-ex": 10397, + "-tr": 10398, + "blank": 10399, + "merce": 10400, + "Ġcoverage": 10401, + "Ġrc": 10402, + "_matrix": 10403, + "_box": 10404, + "Ġcharges": 10405, + "ĠBoston": 10406, + "Pe": 10407, + "Ġcircum": 10408, + "Ġfilled": 10409, + "148": 10410, + "Ġnorth": 10411, + "ictureBox": 10412, + "ĉres": 10413, + "è®": 10414, + "Ġtermin": 10415, + "Ġ[â̦": 10416, + "IRECT": 10417, + "Ġber": 10418, + "Ġ\"../../": 10419, + "retch": 10420, + ".code": 10421, + "_col": 10422, + "ĠGovernment": 10423, + "Ġargv": 10424, + "ĠLord": 10425, + "asi": 10426, + "Exec": 10427, + "ĉlet": 10428, + "vertis": 10429, + "Ġdiscussion": 10430, + "enance": 10431, + "outube": 10432, + "typeof": 10433, + "Ġserved": 10434, + "ĠPut": 10435, + "ĉx": 10436, + "Ġsweet": 10437, + "Before": 10438, + "ategy": 10439, + ".of": 10440, + "ĠMaterial": 10441, + "Sort": 10442, + "ONT": 10443, + "igital": 10444, + "Why": 10445, + "Ġsust": 10446, + "Ġç": 10447, + "abet": 10448, + "Ġsegment": 10449, + "Ġ[],Ċ": 10450, + "ĠMuslim": 10451, + "ĠfindViewById": 10452, + "cut": 10453, + "_TEXT": 10454, + "ĠMary": 10455, + "Ġloved": 10456, + "Ġlie": 10457, + "ĠJO": 10458, + "Ġisset": 10459, + "month": 10460, + "Ġprime": 10461, + "ti": 10462, + "ĠCarol": 10463, + "Use": 10464, + "146": 10465, + "ĠPop": 10466, + "ĠSave": 10467, + "Interval": 10468, + "execute": 10469, + "dy": 10470, + "ĠIran": 10471, + "_cont": 10472, + "ĉT": 10473, + "Ġphase": 10474, + "checkbox": 10475, + "week": 10476, + "Ġhide": 10477, + "Ġtil": 10478, + "Ġju": 10479, + "Custom": 10480, + "burg": 10481, + "/M": 10482, + "TON": 10483, + "Ġquant": 10484, + "Ġrub": 10485, + "ixels": 10486, + "Ġinstalled": 10487, + "Ġdump": 10488, + "Ġproperly": 10489, + "(List": 10490, + "Ġdecide": 10491, + "apply": 10492, + "Has": 10493, + "Ġkeeping": 10494, + "Ġcitizens": 10495, + "Ġjoint": 10496, + "pool": 10497, + "Socket": 10498, + "_op": 10499, + "Ġweapon": 10500, + "gnore": 10501, + "ĠExec": 10502, + "otten": 10503, + "ĠMS": 10504, + "Ġ(-": 10505, + "ĠReview": 10506, + "Ġexamples": 10507, + "Ġtight": 10508, + "!(": 10509, + "DP": 10510, + "ĠMessageBox": 10511, + "Ġphotograph": 10512, + "164": 10513, + "URI": 10514, + "ét": 10515, + "low": 10516, + "ĠGrand": 10517, + ".persistence": 10518, + "Ġmaintain": 10519, + "Ġnums": 10520, + "Ġzip": 10521, + "ials": 10522, + "ĠGets": 10523, + "peg": 10524, + "ĠBuffer": 10525, + "~~~~": 10526, + "rastructure": 10527, + "ĠPL": 10528, + "uen": 10529, + "obby": 10530, + "sizeof": 10531, + "Ġpic": 10532, + "Ġseed": 10533, + "Ġexperienced": 10534, + "Ġodd": 10535, + "Ġkick": 10536, + "Ġprocedure": 10537, + "avigator": 10538, + "-on": 10539, + ",j": 10540, + "ĠAlthough": 10541, + "ĠuserId": 10542, + "accept": 10543, + "Blue": 10544, + "IColor": 10545, + "layer": 10546, + "available": 10547, + "Ġends": 10548, + ".table": 10549, + "Ġdataset": 10550, + "bus": 10551, + "Ġexplain": 10552, + "(pro": 10553, + "ĠCommittee": 10554, + "Ġnoted": 10555, + "]:Ċ": 10556, + "Dim": 10557, + "stdio": 10558, + "154": 10559, + ".\",Ċ": 10560, + "_source": 10561, + "181": 10562, + "ĠWeek": 10563, + "ĠEdge": 10564, + "Ġoperating": 10565, + "Ġeste": 10566, + "ipl": 10567, + "330": 10568, + "agination": 10569, + "Ġproceed": 10570, + "Ġanimation": 10571, + ".Models": 10572, + "ĠWatch": 10573, + "iat": 10574, + "Ġoppon": 10575, + "/A": 10576, + "Report": 10577, + "Ġsounds": 10578, + "_buf": 10579, + "IELD": 10580, + "Ġbund": 10581, + "ĉget": 10582, + ".pr": 10583, + "(tmp": 10584, + "Ġkid": 10585, + ">ĊĊĊ": 10586, + "Ġyang": 10587, + "NotFound": 10588, + "ÑĨ": 10589, + "math": 10590, + "@gmail": 10591, + "ĠLIMIT": 10592, + "redients": 10593, + "Ġvent": 10594, + "avigate": 10595, + "Look": 10596, + "Ġreligious": 10597, + "Ġrand": 10598, + "rio": 10599, + "(GL": 10600, + "_ip": 10601, + "uan": 10602, + "iciency": 10603, + "ĠChange": 10604, + ">čĊčĊ": 10605, + "ĠEntity": 10606, + "Ġrencontre": 10607, + "ĠRet": 10608, + "plan": 10609, + "én": 10610, + "BOOL": 10611, + "uries": 10612, + "train": 10613, + "Definition": 10614, + "============": 10615, + "zz": 10616, + "450": 10617, + "Animation": 10618, + "ĠOK": 10619, + "_menu": 10620, + ".bl": 10621, + "_score": 10622, + "Ġacad": 10623, + "(System": 10624, + "Ġrefresh": 10625, + "'=>$": 10626, + ".Graphics": 10627, + "amento": 10628, + "pid": 10629, + "tc": 10630, + "Ġtips": 10631, + "Ġhomes": 10632, + "Ġfuel": 10633, + "âĸ": 10634, + "_helper": 10635, + "ĠĠčĊ": 10636, + "ĠRoom": 10637, + ".Close": 10638, + "_attr": 10639, + "ĠMount": 10640, + "ĠEv": 10641, + "arser": 10642, + "_top": 10643, + "eah": 10644, + "ĠDelete": 10645, + "ãĢį": 10646, + "uke": 10647, + "Ġusage": 10648, + "aria": 10649, + "_dev": 10650, + "Ġtexture": 10651, + "Ġconversation": 10652, + "eper": 10653, + "Bean": 10654, + "done": 10655, + "nonatomic": 10656, + "ĠSecond": 10657, + "Ġshooting": 10658, + "_pre": 10659, + "Components": 10660, + "Ġ]ĊĊ": 10661, + "__,": 10662, + "stitution": 10663, + ".Char": 10664, + ">();ĊĊ": 10665, + "Ġpresented": 10666, + "Ġwa": 10667, + "oker": 10668, + "-ĊĊ": 10669, + "iner": 10670, + "Ġbecoming": 10671, + "Ġincident": 10672, + "Att": 10673, + "162": 10674, + "Ġrevealed": 10675, + "forc": 10676, + "Ġboot": 10677, + ".page": 10678, + "Enumerator": 10679, + "165": 10680, + "_->": 10681, + "Photo": 10682, + "Ġspring": 10683, + ".\",": 10684, + "ĠDictionary": 10685, + "BJECT": 10686, + "Ġlocations": 10687, + "Ġsamples": 10688, + "InputStream": 10689, + "ĠBrown": 10690, + "Ġstats": 10691, + "quality": 10692, + "Ñħ": 10693, + "-dis": 10694, + "Ġhelping": 10695, + "Ġped": 10696, + "224": 10697, + "(se": 10698, + "ĠWho": 10699, + "alian": 10700, + "internal": 10701, + "Ġft": 10702, + ">().": 10703, + "->{": 10704, + "Ġmine": 10705, + "Ġsector": 10706, + "Ġgro": 10707, + "Ġopportunities": 10708, + "Ġü": 10709, + "Ġmp": 10710, + "Ġalleged": 10711, + "Ġdoubt": 10712, + "Mouse": 10713, + "About": 10714, + "_part": 10715, + "Ġchair": 10716, + "Ġstopped": 10717, + "161": 10718, + "loop": 10719, + "entities": 10720, + "Ġapps": 10721, + "ansion": 10722, + "Ġmental": 10723, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 10724, + "FR": 10725, + "Ġdefend": 10726, + "care": 10727, + "Ġideal": 10728, + "/api": 10729, + "urface": 10730, + "011": 10731, + "Ġele": 10732, + "ulator": 10733, + "ĠRights": 10734, + "anguages": 10735, + "Ġfunds": 10736, + "Ġadapt": 10737, + "Attributes": 10738, + "Ġdeploy": 10739, + "opts": 10740, + "Ġvalidation": 10741, + "Ġconcerns": 10742, + "uce": 10743, + ".num": 10744, + "ulture": 10745, + "ila": 10746, + "Ġcup": 10747, + "Ġpure": 10748, + ".Fore": 10749, + "183": 10750, + "ĠHashMap": 10751, + ".valueOf": 10752, + "asm": 10753, + "MO": 10754, + "Ġcs": 10755, + "Ġstores": 10756, + "Ġ************************************************************************": 10757, + "Ġcommunication": 10758, + "mem": 10759, + ".EventHandler": 10760, + ".Status": 10761, + "_right": 10762, + ".setOn": 10763, + "Sheet": 10764, + "Ġidentify": 10765, + "enerated": 10766, + "ordered": 10767, + "Ġ\"[": 10768, + "Ġswe": 10769, + "Condition": 10770, + "ĠAccording": 10771, + "Ġprepare": 10772, + "Ġrob": 10773, + "Pool": 10774, + "Ġsport": 10775, + "rv": 10776, + "ĠRouter": 10777, + "Ġalternative": 10778, + "([]": 10779, + "ĠChicago": 10780, + "ipher": 10781, + "ische": 10782, + "ĠDirector": 10783, + "kl": 10784, + "ĠWil": 10785, + "keys": 10786, + "Ġmysql": 10787, + "Ġwelcome": 10788, + "king": 10789, + "ĠManager": 10790, + "Ġcaught": 10791, + ")}Ċ": 10792, + "Score": 10793, + "_PR": 10794, + "Ġsurvey": 10795, + "hab": 10796, + "Headers": 10797, + "ADER": 10798, + "Ġdecor": 10799, + "Ġturns": 10800, + "Ġradius": 10801, + "errupt": 10802, + "Cor": 10803, + "Ġmel": 10804, + "Ġintr": 10805, + "(q": 10806, + "ĠAC": 10807, + "amos": 10808, + "MAX": 10809, + "ĠGrid": 10810, + "ĠJesus": 10811, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 10812, + ".DE": 10813, + "Ġts": 10814, + "Ġlinked": 10815, + "free": 10816, + "ĠQt": 10817, + "Ġ/**čĊ": 10818, + "Ġfaster": 10819, + "ctr": 10820, + "_J": 10821, + "DT": 10822, + ".Check": 10823, + "Ġcombination": 10824, + "Ġintended": 10825, + "-the": 10826, + "-type": 10827, + "182": 10828, + "ectors": 10829, + "ami": 10830, + "uting": 10831, + "Ġuma": 10832, + "XML": 10833, + "UCT": 10834, + "Ap": 10835, + "ĠRandom": 10836, + "Ġran": 10837, + ".sort": 10838, + "Ġsorted": 10839, + ".Un": 10840, + "401": 10841, + "_PER": 10842, + "itory": 10843, + "Ġpriority": 10844, + "ĠGal": 10845, + "ĠOld": 10846, + "hot": 10847, + "ĠDisplay": 10848, + "(sub": 10849, + "_TH": 10850, + "_Y": 10851, + "ĠCare": 10852, + "loading": 10853, + "Kind": 10854, + "_handle": 10855, + ",,": 10856, + "rase": 10857, + "_replace": 10858, + ".addEventListener": 10859, + "ĠRT": 10860, + "172": 10861, + "Ġentered": 10862, + "gers": 10863, + "Ġich": 10864, + "(start": 10865, + "205": 10866, + "/app": 10867, + "Ġbrother": 10868, + "Memory": 10869, + "Outlet": 10870, + "Ġutf": 10871, + "prec": 10872, + "Ġnavigation": 10873, + "ORK": 10874, + "Ġdst": 10875, + "Detail": 10876, + "Ġaudience": 10877, + "Ġdur": 10878, + "Ġcluster": 10879, + "unched": 10880, + "Ġ],": 10881, + "Ġcomfortable": 10882, + ".values": 10883, + "ĠTotal": 10884, + "Ġsnap": 10885, + "Ġstandards": 10886, + "Ġperformed": 10887, + "hand": 10888, + "(\"@": 10889, + "åŃ": 10890, + "Ġphil": 10891, + "ibr": 10892, + "trim": 10893, + "Ġforget": 10894, + "157": 10895, + "Ġdoctor": 10896, + ".TextBox": 10897, + "377": 10898, + "icons": 10899, + ",s": 10900, + "ĠOp": 10901, + "Sm": 10902, + "Stop": 10903, + "ĉList": 10904, + "ĉu": 10905, + "Comment": 10906, + "_VERSION": 10907, + ".Xtra": 10908, + "Person": 10909, + "rb": 10910, + "LOB": 10911, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 10912, + "ĠCentral": 10913, + "270": 10914, + "ICK": 10915, + "raq": 10916, + "Ġputting": 10917, + "Ġmd": 10918, + "ĠLove": 10919, + "Program": 10920, + "Border": 10921, + "oor": 10922, + "Ġallowing": 10923, + "after": 10924, + "Ġentries": 10925, + "ĠMaybe": 10926, + "]).": 10927, + "ĠShort": 10928, + ")\\": 10929, + ".now": 10930, + "friend": 10931, + "Ġprefer": 10932, + "ĠGPIO": 10933, + "osis": 10934, + "ĠGameObject": 10935, + "Ġskip": 10936, + "Ġcompetition": 10937, + "_match": 10938, + "lications": 10939, + "_CONT": 10940, + ".groupBox": 10941, + "Ġals": 10942, + "666": 10943, + "\"We": 10944, + "_eq": 10945, + "lan": 10946, + "_search": 10947, + "ĠMusic": 10948, + "asis": 10949, + "Ġbind": 10950, + "ĠIsland": 10951, + "rum": 10952, + "(E": 10953, + "Ġseat": 10954, + "Video": 10955, + "Ġack": 10956, + "reek": 10957, + "={()": 10958, + "Ġrating": 10959, + "Ġrestaurant": 10960, + "456": 10961, + "DEX": 10962, + "(buf": 10963, + "pping": 10964, + "uality": 10965, + "Ġleague": 10966, + "176": 10967, + "Ġfocused": 10968, + "apon": 10969, + "$data": 10970, + "CLUD": 10971, + "CLUDING": 10972, + "Ġabsolute": 10973, + "(query": 10974, + "Ġtells": 10975, + "Ang": 10976, + "Ġcommunities": 10977, + "Ġhonest": 10978, + "oking": 10979, + "Ġapart": 10980, + "arity": 10981, + "/$": 10982, + "_module": 10983, + "ĠEnc": 10984, + ".an": 10985, + ".Config": 10986, + "Cre": 10987, + "Ġshock": 10988, + "ĠArab": 10989, + "IENT": 10990, + "/re": 10991, + "Ġretrie": 10992, + "ycler": 10993, + "isa": 10994, + "ĠOrgan": 10995, + ".graph": 10996, + "Ġí": 10997, + "ĠBAS": 10998, + "Enum": 10999, + "Ġpossibly": 11000, + "ÑĢаÐ": 11001, + "ĠJapanese": 11002, + "Ġcraft": 11003, + "ĠPlace": 11004, + "Ġtalent": 11005, + "Ġfunding": 11006, + "Ġconfirmed": 11007, + "Ġcycle": 11008, + "/x": 11009, + "GE": 11010, + "Ġhearing": 11011, + "Ġplants": 11012, + "Ġmouth": 11013, + "pages": 11014, + "oria": 11015, + "ĠRemove": 11016, + "_total": 11017, + "Ġod": 11018, + "ollapse": 11019, + "door": 11020, + "Ġbought": 11021, + "Ġaddr": 11022, + "ARCH": 11023, + "_dim": 11024, + "dden": 11025, + "Ġdecades": 11026, + "REQUEST": 11027, + "Ġversions": 11028, + "fire": 11029, + "006": 11030, + "Ġmoves": 11031, + "fb": 11032, + "Ġcoffee": 11033, + ".connect": 11034, + "ĠRow": 11035, + "Ġschema": 11036, + "Scope": 11037, + "-Type": 11038, + "Ġfighting": 11039, + "Ġretail": 11040, + "Ġmodified": 11041, + "TF": 11042, + "Files": 11043, + "nie": 11044, + "_command": 11045, + "stone": 11046, + "ĠÑĤ": 11047, + "_thread": 11048, + "Ġbond": 11049, + "ĠDevelopment": 11050, + "Ġpt": 11051, + "FORM": 11052, + "plet": 11053, + "Ġidentified": 11054, + "cpp": 11055, + "206": 11056, + "225": 11057, + "Ġcoding": 11058, + "oked": 11059, + "ĠMaster": 11060, + "IDTH": 11061, + "Ġresidents": 11062, + "redit": 11063, + "ĠPhoto": 11064, + "=-": 11065, + "unte": 11066, + "ateur": 11067, + "159": 11068, + "_STATE": 11069, + "ĠSing": 11070, + "Ġsheet": 11071, + ".val": 11072, + "orse": 11073, + "Ġhers": 11074, + "Ġdetermined": 11075, + "Common": 11076, + "Ġwed": 11077, + "_queue": 11078, + "PH": 11079, + "ĠAtl": 11080, + "cred": 11081, + "/LICENSE": 11082, + "Ġmes": 11083, + "Ġadvanced": 11084, + ".java": 11085, + ".Sh": 11086, + "Go": 11087, + "kill": 11088, + "fp": 11089, + "_settings": 11090, + "Ġpal": 11091, + "Ġtruck": 11092, + "Ġcombined": 11093, + "Ġ\"${": 11094, + "ĠCorpor": 11095, + "Ġjoined": 11096, + "ĠJose": 11097, + "ĠCup": 11098, + "uns": 11099, + "estival": 11100, + "levision": 11101, + "Ġbroken": 11102, + "Ġmarriage": 11103, + "ĠWestern": 11104, + "Ġrepresents": 11105, + "ĠTitle": 11106, + "Ġss": 11107, + ".Ass": 11108, + "ongoose": 11109, + "iento": 11110, + "<>();Ċ": 11111, + "Ġabsolutely": 11112, + "Ġsmooth": 11113, + "TERN": 11114, + "ĠUnless": 11115, + "Word": 11116, + "Ġmerge": 11117, + "igan": 11118, + "ĠVol": 11119, + "Ġnn": 11120, + ".getId": 11121, + "Ġз": 11122, + "171": 11123, + "Ġsexy": 11124, + "Ġseeking": 11125, + "Single": 11126, + ".this": 11127, + "179": 11128, + "Ġkom": 11129, + "bound": 11130, + ";\"": 11131, + "ĠfontSize": 11132, + "_df": 11133, + "Ġinjury": 11134, + "(H": 11135, + "Ġissued": 11136, + "_END": 11137, + ":self": 11138, + "020": 11139, + "Ġpatch": 11140, + "Ġleaves": 11141, + "Ġadopt": 11142, + "FileName": 11143, + "ãĢIJ": 11144, + "Ġexecutive": 11145, + "ĠByte": 11146, + "]))Ċ": 11147, + "Ġnu": 11148, + "outing": 11149, + "cluding": 11150, + "-R": 11151, + ".options": 11152, + "Ġsubstant": 11153, + "avax": 11154, + "ĠBUT": 11155, + "Ġtechnical": 11156, + "Ġtwice": 11157, + "Ġmás": 11158, + "Ġunivers": 11159, + "yr": 11160, + "Ġdrag": 11161, + "ĠDC": 11162, + "Ġsed": 11163, + "Ġbot": 11164, + "ĠPal": 11165, + "ĠHall": 11166, + "forcement": 11167, + "Ġauch": 11168, + ".mod": 11169, + "notation": 11170, + "_files": 11171, + ".line": 11172, + "_flag": 11173, + "[name": 11174, + "Ġresolution": 11175, + "Ġbott": 11176, + "(\"[": 11177, + "ende": 11178, + "(arr": 11179, + "Free": 11180, + "(@\"": 11181, + "ĠDistrict": 11182, + "PEC": 11183, + ":-": 11184, + "Picker": 11185, + "ĠJo": 11186, + "ĠĠĠĠĠĊ": 11187, + "ĠRiver": 11188, + "_rows": 11189, + "Ġhelpful": 11190, + "Ġmassive": 11191, + "---Ċ": 11192, + "Ġmeasures": 11193, + "007": 11194, + "ĠRuntime": 11195, + "Ġworry": 11196, + "ĠSpec": 11197, + "ĉD": 11198, + "ãĢij": 11199, + "Ġ){Ċ": 11200, + "Ġworse": 11201, + "(filename": 11202, + "Ġlay": 11203, + "Ġmagic": 11204, + "ĠTheir": 11205, + "oul": 11206, + "stroy": 11207, + "ĠWhere": 11208, + "280": 11209, + "Ġsudden": 11210, + "Ġdefe": 11211, + "Ġbinding": 11212, + "Ġflight": 11213, + "ĠOnInit": 11214, + "ĠWomen": 11215, + "ĠPolicy": 11216, + "Ġdrugs": 11217, + "ishing": 11218, + "('../": 11219, + "ĠMel": 11220, + "peat": 11221, + "tor": 11222, + "Ġproposed": 11223, + "Ġstated": 11224, + "_RES": 11225, + "Ġeast": 11226, + "212": 11227, + "ĠCONDITION": 11228, + "_desc": 11229, + "Ġwinning": 11230, + "folio": 11231, + "Mapper": 11232, + "ĠPan": 11233, + "ĠAnge": 11234, + ".servlet": 11235, + "Ġcopies": 11236, + "LM": 11237, + "Ġvm": 11238, + "åį": 11239, + "Ġdictionary": 11240, + "Seg": 11241, + "177": 11242, + "elines": 11243, + "ĠSend": 11244, + "Ġiron": 11245, + "ĠFort": 11246, + "166": 11247, + ".domain": 11248, + "Ġdebate": 11249, + "NotNull": 11250, + "eq": 11251, + "acher": 11252, + "lf": 11253, + "ĉfmt": 11254, + "Ġlawy": 11255, + "178": 11256, + "ÄŁ": 11257, + "ĠMen": 11258, + "Ġtrim": 11259, + "(NULL": 11260, + "Ġ!!": 11261, + "Ġpad": 11262, + "Ġfollows": 11263, + "\"][\"": 11264, + "requ": 11265, + "ĠEp": 11266, + ".github": 11267, + "(img": 11268, + "eto": 11269, + "('\\": 11270, + "Services": 11271, + "umbnail": 11272, + "_main": 11273, + "pleted": 11274, + "fortunately": 11275, + "Ġwindows": 11276, + "Ġplane": 11277, + "ĠConnection": 11278, + ".local": 11279, + "uard": 11280, + "}\\": 11281, + "==\"": 11282, + "andon": 11283, + "ĠRoy": 11284, + "west": 11285, + "158": 11286, + "iginal": 11287, + "emies": 11288, + "itz": 11289, + "'):Ċ": 11290, + "ĠPeter": 11291, + "Ġtough": 11292, + "Ġreduced": 11293, + "Ġcalculate": 11294, + "Ġrapid": 11295, + "customer": 11296, + "Ġefficient": 11297, + "Ġmedium": 11298, + "Ġfell": 11299, + ".ref": 11300, + "ĠCas": 11301, + "Ġfeedback": 11302, + "Speed": 11303, + "(output": 11304, + "aje": 11305, + "Ġcategories": 11306, + "Ġfee": 11307, + "};": 11308, + "Ġdeleted": 11309, + "reh": 11310, + "Ġproof": 11311, + "Desc": 11312, + "Build": 11313, + "Ġsides": 11314, + ".ArrayList": 11315, + "-%": 11316, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 11317, + "ر": 11318, + ".match": 11319, + "ли": 11320, + "Ġfeels": 11321, + "Ġachieve": 11322, + "Ġclim": 11323, + "_ON": 11324, + "ĠCD": 11325, + "Ġteacher": 11326, + "_current": 11327, + "bn": 11328, + "_PL": 11329, + "isting": 11330, + "Enable": 11331, + "GEN": 11332, + "Ġtv": 11333, + "Ġsock": 11334, + "Ġplays": 11335, + "Ġdiscount": 11336, + "ĠKE": 11337, + "ĠDebug": 11338, + "Fore": 11339, + "ĠIraq": 11340, + "Ġappearance": 11341, + "Mon": 11342, + "Ġstyled": 11343, + "ĠHuman": 11344, + "iot": 11345, + "ĠHistory": 11346, + "Ġsac": 11347, + "ĠCollection": 11348, + "Ġrecommended": 11349, + ".Selected": 11350, + "Ġorganizations": 11351, + "Ġdiscovered": 11352, + "cohol": 11353, + "adas": 11354, + "ĠThomas": 11355, + "May": 11356, + "Ġconserv": 11357, + "Ġdomin": 11358, + "ĠFollow": 11359, + "ĠSection": 11360, + "ĠThanks": 11361, + "Username": 11362, + "Ġrecipe": 11363, + "Ġwonderful": 11364, + ".sleep": 11365, + "_if": 11366, + "ĉĊĉĊ": 11367, + "orno": 11368, + "Ġru": 11369, + "_target": 11370, + ".\"\"": 11371, + "à¦": 11372, + "EventArgs": 11373, + "Ġinputs": 11374, + "Ġfif": 11375, + "Ġvision": 11376, + "cy": 11377, + "ĠSeries": 11378, + ")(((": 11379, + "Ġtrading": 11380, + "Ġmarker": 11381, + "Begin": 11382, + "Ġtypically": 11383, + "Ġcauses": 11384, + "dropdown": 11385, + "_DEBUG": 11386, + "260": 11387, + "Ġdetect": 11388, + "country": 11389, + "!\");Ċ": 11390, + "ĉR": 11391, + "appy": 11392, + "Ġcref": 11393, + "('<": 11394, + "\"=>": 11395, + "ĠLE": 11396, + "reader": 11397, + "Ġadministr": 11398, + "õ": 11399, + "ucket": 11400, + "Ġfashion": 11401, + ".char": 11402, + "izar": 11403, + "Ġdisable": 11404, + "Ġsuc": 11405, + "ĠLive": 11406, + "issue": 11407, + "Ġmetadata": 11408, + "flags": 11409, + "ĠðŁ": 11410, + "Ġcommitted": 11411, + "Ġva": 11412, + "Ġrough": 11413, + "Ġ'''Ċ": 11414, + "Ġhighlight": 11415, + "_vars": 11416, + "VO": 11417, + "Ġencoding": 11418, + "-Z": 11419, + "_sign": 11420, + "$(\"#": 11421, + "Ġrain": 11422, + "reatest": 11423, + "ĠEND": 11424, + "Selection": 11425, + "Ġcandidates": 11426, + "Ġsav": 11427, + ".Empty": 11428, + "Ġdecisions": 11429, + "Ġcollabor": 11430, + "ridge": 11431, + "feed": 11432, + "ression": 11433, + "Ġpersons": 11434, + "VM": 11435, + "008": 11436, + "ega": 11437, + "_BIT": 11438, + "According": 11439, + "acked": 11440, + "Ġdollars": 11441, + "_loss": 11442, + "ĠCost": 11443, + "}\"Ċ": 11444, + "Notification": 11445, + "Ġprostit": 11446, + "Ġauthority": 11447, + ".rec": 11448, + "Ġspokes": 11449, + "ĠToday": 11450, + "istant": 11451, + "ĠHead": 11452, + "âĢĿ.": 11453, + "ertainment": 11454, + "cean": 11455, + "culate": 11456, + "Ġven": 11457, + "However": 11458, + "_arr": 11459, + "Ġtokens": 11460, + "Graph": 11461, + "ĠJud": 11462, + "ĠVirgin": 11463, + "ĠSerial": 11464, + "unning": 11465, + "Mutable": 11466, + "agers": 11467, + ".csv": 11468, + "Ġdeveloping": 11469, + "Ġinstructions": 11470, + "Ġpromise": 11471, + "Ġrequested": 11472, + "_encode": 11473, + "/\"": 11474, + "ĠIcon": 11475, + "uilt": 11476, + "-day": 11477, + "Ġintelligence": 11478, + ".IS": 11479, + "ĠObservable": 11480, + "ĠHard": 11481, + "Bool": 11482, + "211": 11483, + "idential": 11484, + ".Anchor": 11485, + "Ġselling": 11486, + "CI": 11487, + "AGES": 11488, + "tle": 11489, + "bur": 11490, + "UFFER": 11491, + "RY": 11492, + "Ġbigger": 11493, + "Ġrat": 11494, + "Ġfamous": 11495, + "Ġtypename": 11496, + "Ġexplained": 11497, + "}}Ċ": 11498, + "Ġnuclear": 11499, + "-N": 11500, + "Ġcrisis": 11501, + "ĠEnter": 11502, + "Ġanswers": 11503, + "/${": 11504, + "/pl": 11505, + "Ġsequ": 11506, + "_next": 11507, + "mask": 11508, + "Ġstanding": 11509, + "Ġplenty": 11510, + "ĠCross": 11511, + "ĉret": 11512, + "dro": 11513, + "ĠCast": 11514, + "167": 11515, + "=true": 11516, + "ĠChris": 11517, + "icio": 11518, + "ĠMike": 11519, + "Decimal": 11520, + "addComponent": 11521, + "Len": 11522, + "Ġcock": 11523, + "Ġ#{": 11524, + "URN": 11525, + "": 11657, + "Ġ*=": 11658, + "ĠPS": 11659, + "Ġdangerous": 11660, + "[p": 11661, + "OME": 11662, + "Other": 11663, + "ĠStringBuilder": 11664, + "Points": 11665, + "heading": 11666, + "Ġcurrency": 11667, + "Ġpercentage": 11668, + "_API": 11669, + "Ġclassic": 11670, + "thead": 11671, + "ĠMO": 11672, + "FE": 11673, + "Idx": 11674, + "await": 11675, + "Ġè": 11676, + "Ġaccident": 11677, + "Ġvariant": 11678, + "Ġmyst": 11679, + "ĠLand": 11680, + "ĠBre": 11681, + "Ġharm": 11682, + "ĠAcc": 11683, + "Ġcharged": 11684, + "iones": 11685, + "Visibility": 11686, + "arry": 11687, + "ĠLanguage": 11688, + "Ġwalking": 11689, + "\".ĊĊ": 11690, + "ifer": 11691, + "Ġleadership": 11692, + ".From": 11693, + "ynam": 11694, + "Ġtimestamp": 11695, + "ipt": 11696, + "ĠHas": 11697, + "REFER": 11698, + "ĠIts": 11699, + "Ġlistener": 11700, + "UTE": 11701, + "213": 11702, + "_description": 11703, + "Ġexperiences": 11704, + "Ġcreates": 11705, + "RS": 11706, + "cart": 11707, + "black": 11708, + "Ġchoices": 11709, + "war": 11710, + "750": 11711, + "Ġ'''": 11712, + "Ġordered": 11713, + "Ġevening": 11714, + "Ġpil": 11715, + "Ġtun": 11716, + "ĠBad": 11717, + "(app": 11718, + "random": 11719, + "Ġexplicit": 11720, + "Ġarrived": 11721, + "Ġfly": 11722, + "Ġeconom": 11723, + "-mail": 11724, + "Ġlists": 11725, + "Ġarchitect": 11726, + "234": 11727, + "ĠPay": 11728, + "Ġds": 11729, + "ĠSol": 11730, + "Ġvehicles": 11731, + "Hz": 11732, + "-com": 11733, + "Ġking": 11734, + "_equal": 11735, + "ĠHelp": 11736, + "Ġabuse": 11737, + "480": 11738, + "169": 11739, + "--;Ċ": 11740, + "Ġextr": 11741, + "Ġchemical": 11742, + "ä¿": 11743, + "Ġorient": 11744, + "Ġbreath": 11745, + "ĠSpace": 11746, + "(element": 11747, + "wait": 11748, + "DED": 11749, + "igma": 11750, + "Ġentr": 11751, + "Ġsob": 11752, + "-name": 11753, + "Ġaffected": 11754, + "ika": 11755, + "Ġcoal": 11756, + "_work": 11757, + "Ġhundreds": 11758, + "Ġpolitics": 11759, + "subject": 11760, + "Ġconsumer": 11761, + "ANGE": 11762, + "Ġrepeated": 11763, + "Send": 11764, + "Ġ#[": 11765, + "Ġprotocol": 11766, + "Ġleads": 11767, + "useum": 11768, + "Every": 11769, + "808": 11770, + "174": 11771, + "Import": 11772, + "(count": 11773, + "Ġchallenges": 11774, + "Ġnovel": 11775, + "Ġdepart": 11776, + "bits": 11777, + ".Current": 11778, + "Ġ`${": 11779, + "oting": 11780, + "(\\": 11781, + "Ġcreative": 11782, + "Ġbuff": 11783, + "Ġintroduced": 11784, + "usic": 11785, + "modules": 11786, + "Are": 11787, + "-doc": 11788, + "language": 11789, + "_cache": 11790, + "Ġtod": 11791, + "?>{{": 12026, + "ĠResource": 12027, + "ĠStandard": 12028, + "ĠPrem": 12029, + "updated": 12030, + "ivalent": 12031, + "Ġassets": 12032, + "_temp": 12033, + "Ġinterests": 12034, + "Ġhardware": 12035, + "ĠRom": 12036, + "ĠShare": 12037, + "Ġ''Ċ": 12038, + "Ġ*,": 12039, + "ĠTake": 12040, + "ĠImages": 12041, + "_CHECK": 12042, + "(typeof": 12043, + "ĠJun": 12044, + "\\<^": 12045, + "Ġliqu": 12046, + "Ġworst": 12047, + "ymbols": 12048, + "ĉĉĉĠĠĠ": 12049, + "Ġdrivers": 12050, + "ĠDocument": 12051, + "eno": 12052, + "ĠTechnology": 12053, + "Ġapproved": 12054, + "umps": 12055, + "Ġsnow": 12056, + "formance": 12057, + "_ASSERT": 12058, + "uits": 12059, + "207": 12060, + "ÙĨ": 12061, + "Ġdifferences": 12062, + ".Visible": 12063, + "ĉĉĉčĊ": 12064, + "ĠPs": 12065, + "_fetch": 12066, + "Ġtodo": 12067, + ".',Ċ": 12068, + "Ġsel": 12069, + "urers": 12070, + "invalid": 12071, + "Ġtweet": 12072, + "VEL": 12073, + "Ġresearchers": 12074, + "Ġsprintf": 12075, + "ĠRO": 12076, + "Ġpel": 12077, + ".Trans": 12078, + "Ġillegal": 12079, + "dialog": 12080, + "smarty": 12081, + "lg": 12082, + "_MIN": 12083, + "Ġhero": 12084, + "final": 12085, + "Ġpp": 12086, + ".Le": 12087, + "Ġci": 12088, + "ĉRT": 12089, + "Ġsuggested": 12090, + "pdf": 12091, + "aching": 12092, + "ĠRo": 12093, + "ĠProperties": 12094, + "ĠSi": 12095, + "Ġbuying": 12096, + "Ġmu": 12097, + "Ġlands": 12098, + "ifiers": 12099, + "ĠFILE": 12100, + "ROUP": 12101, + "Ġholder": 12102, + "ĠSon": 12103, + "Ġsympt": 12104, + ".route": 12105, + ")?": 12106, + "Ġargc": 12107, + "Ġfort": 12108, + "Ġcasino": 12109, + "_category": 12110, + "Ġforum": 12111, + "215": 12112, + "prefix": 12113, + "apture": 12114, + "Tube": 12115, + "ems": 12116, + "imize": 12117, + "Ġnue": 12118, + "aus": 12119, + "course": 12120, + "ATOR": 12121, + "()),": 12122, + "Advertis": 12123, + "INGS": 12124, + "Ġacknow": 12125, + "ĠKorea": 12126, + "pling": 12127, + "Ġworker": 12128, + "PLIED": 12129, + "hal": 12130, + "ĠRichard": 12131, + "Elements": 12132, + "ĉĉĉĠ": 12133, + "star": 12134, + "Ġrelationships": 12135, + "Ġcheap": 12136, + "ACH": 12137, + "ĠXML": 12138, + ",&": 12139, + "ĠLouis": 12140, + "Ġride": 12141, + "_FAIL": 12142, + "Ġchunk": 12143, + "[s": 12144, + "_OUT": 12145, + "Ġchosen": 12146, + "_[": 12147, + "/(": 12148, + "ĠJeff": 12149, + "_sl": 12150, + "priv": 12151, + "ĠCanadian": 12152, + "Ġunable": 12153, + "_FLAG": 12154, + "Ġnos": 12155, + "high": 12156, + "Ġlift": 12157, + "fun": 12158, + "(){": 12159, + "elly": 12160, + "yclerView": 12161, + "_as": 12162, + "_LIST": 12163, + "Ġradi": 12164, + ".getValue": 12165, + "304": 12166, + "ĠAngeles": 12167, + "ĠSpan": 12168, + "_instance": 12169, + "itors": 12170, + "208": 12171, + "Ġmigration": 12172, + "AK": 12173, + "Oh": 12174, + "®": 12175, + ".selected": 12176, + "ĠGT": 12177, + "Ġadvance": 12178, + "ĠStyle": 12179, + ".DataGridView": 12180, + "ection": 12181, + "Ñİ": 12182, + "pio": 12183, + "rog": 12184, + "Ġshopping": 12185, + "ĠRect": 12186, + "Illuminate": 12187, + "OU": 12188, + "ĉarray": 12189, + "Ġsubstantial": 12190, + "Ġpregn": 12191, + "Ġpromote": 12192, + "IEW": 12193, + ".Layout": 12194, + "Ġsigns": 12195, + "/.": 12196, + "Ġletters": 12197, + "Board": 12198, + "ctrl": 12199, + "\"\\": 12200, + "ĠJones": 12201, + "Ġvertex": 12202, + "Ġja": 12203, + "Ġaffili": 12204, + "Ġwealth": 12205, + "ĉdefault": 12206, + "Ġsignificantly": 12207, + "Ġec": 12208, + "Ġxs": 12209, + "actual": 12210, + ".per": 12211, + "_step": 12212, + "anvas": 12213, + "mac": 12214, + "Ġtransl": 12215, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 12216, + "Iterator": 12217, + "Ġoch": 12218, + "agnostic": 12219, + "ĠDuring": 12220, + "ĠDEFAULT": 12221, + "Ġtill": 12222, + "Ġsignature": 12223, + "Ġbird": 12224, + "ĠOl": 12225, + "310": 12226, + "ĠIr": 12227, + "HS": 12228, + "avatar": 12229, + "ESSAGE": 12230, + "Ġelev": 12231, + "Ġmt": 12232, + "ĠNav": 12233, + "Ġrelax": 12234, + "Ġplate": 12235, + "ITEM": 12236, + "(date": 12237, + ".not": 12238, + "Ġgrade": 12239, + "Ġ}),Ċ": 12240, + "?\"ĊĊ": 12241, + "iences": 12242, + "High": 12243, + "ĠDIS": 12244, + "231": 12245, + "disabled": 12246, + "QUI": 12247, + "Ġnoise": 12248, + "aux": 12249, + "ĠUP": 12250, + "888": 12251, + "osa": 12252, + "Ġvoc": 12253, + "Ġ))": 12254, + "ocom": 12255, + "_OFF": 12256, + "ĠDb": 12257, + "Lock": 12258, + ".eclipse": 12259, + ",d": 12260, + "ĠDraw": 12261, + "Ġ\"(": 12262, + "Ġvisited": 12263, + "ĠâĪ": 12264, + "Ġsucceed": 12265, + "Ġimpossible": 12266, + "aire": 12267, + "ĠTurn": 12268, + "Ġdish": 12269, + "FG": 12270, + "Ġsensor": 12271, + "ANN": 12272, + "aba": 12273, + "Ġsurg": 12274, + "]);čĊ": 12275, + "Ġfp": 12276, + "_an": 12277, + "-J": 12278, + "-G": 12279, + "ĠJob": 12280, + "Convert": 12281, + "ĠKEY": 12282, + "Ġauthors": 12283, + "_server": 12284, + "\\r": 12285, + "Ġ-*-": 12286, + "flex": 12287, + "Ġsoc": 12288, + "Ret": 12289, + "Ġsalt": 12290, + "Ġâ̦ĊĊ": 12291, + "ĠClear": 12292, + "(page": 12293, + "-danger": 12294, + "Ġrooms": 12295, + "conv": 12296, + "#{": 12297, + ".op": 12298, + "ĠArea": 12299, + "_SC": 12300, + "hen": 12301, + "Ġbegins": 12302, + "-y": 12303, + "Ġexcited": 12304, + "Ġignored": 12305, + "Ġbonus": 12306, + "student": 12307, + "ĠMember": 12308, + "Ġrelatively": 12309, + "ĠLow": 12310, + "ĠProdu": 12311, + "ateway": 12312, + "posure": 12313, + "Ġthick": 12314, + "aniel": 12315, + "(view": 12316, + "ĠCrush": 12317, + "Extension": 12318, + "Il": 12319, + "eed": 12320, + "LOC": 12321, + ".im": 12322, + ".Items": 12323, + "Ġconflict": 12324, + ".prevent": 12325, + "252": 12326, + "ĠonCreate": 12327, + "uv": 12328, + "iser": 12329, + "Ġwave": 12330, + "Mar": 12331, + "ĠCommunity": 12332, + "iche": 12333, + "ĠNothing": 12334, + "[m": 12335, + "ĠLee": 12336, + "riends": 12337, + "232": 12338, + "ère": 12339, + "!!!": 12340, + "anz": 12341, + ".result": 12342, + "ĠSK": 12343, + "_PARAM": 12344, + "Ġdemocr": 12345, + "BackColor": 12346, + ".exists": 12347, + "\"It": 12348, + "(options": 12349, + "razy": 12350, + "aser": 12351, + "\\Database": 12352, + "alendar": 12353, + "_ass": 12354, + ";}Ċ": 12355, + "vertex": 12356, + "inecraft": 12357, + "Warning": 12358, + "argo": 12359, + "Ġactor": 12360, + "ĠInstead": 12361, + "ĠUsing": 12362, + "Self": 12363, + "@interface": 12364, + "Ġspeaking": 12365, + "ĠParis": 12366, + "ĠLICENSE": 12367, + ".node": 12368, + "ĠFood": 12369, + "EIF": 12370, + "ĠBi": 12371, + ".Start": 12372, + "ĠIB": 12373, + "Ġuniversity": 12374, + "254": 12375, + "ĠHeader": 12376, + ".product": 12377, + "409": 12378, + "Copy": 12379, + "etc": 12380, + "rical": 12381, + "Ġ>>>": 12382, + "books": 12383, + "Ġalgorithm": 12384, + "Ġ'__": 12385, + "(javax": 12386, + "Ġnumerous": 12387, + "Share": 12388, + "Have": 12389, + "Ġrecru": 12390, + "Ġprove": 12391, + ".substring": 12392, + "health": 12393, + "ел": 12394, + "Ġdecimal": 12395, + "Ġcommission": 12396, + "scription": 12397, + "xC": 12398, + "Ġsummary": 12399, + "atted": 12400, + "Ġcloser": 12401, + "finished": 12402, + "()){Ċ": 12403, + "ĠWood": 12404, + "301": 12405, + "_fields": 12406, + "ku": 12407, + "_items": 12408, + "Flag": 12409, + "Ġconfidence": 12410, + "ĠFederal": 12411, + "dux": 12412, + "Ġcompat": 12413, + "Ġvertical": 12414, + "й": 12415, + "ès": 12416, + ";\">Ċ": 12417, + "_manager": 12418, + "()))Ċ": 12419, + "IDE": 12420, + ":\",": 12421, + "235": 12422, + "__Ċ": 12423, + "ĠWay": 12424, + "221": 12425, + "ÑĪ": 12426, + "Temp": 12427, + "ĠSTR": 12428, + "ritten": 12429, + "Sync": 12430, + "ĠAV": 12431, + "ĠCEO": 12432, + "ĠGuid": 12433, + "Ġenvironmental": 12434, + "Ġcorresponding": 12435, + "ĉconsole": 12436, + "Ġjustice": 12437, + "ĠJS": 12438, + "Ġlived": 12439, + "gar": 12440, + "ĠGraph": 12441, + "ĠStat": 12442, + "ĠiPhone": 12443, + ".al": 12444, + "ĠHD": 12445, + "Ġoccur": 12446, + "Ġthreshold": 12447, + "509": 12448, + "Ġonclick": 12449, + "REG": 12450, + ".GraphicsUnit": 12451, + "Meta": 12452, + "ž": 12453, + "Ġcum": 12454, + ".gnu": 12455, + "ë": 12456, + "Ġobtained": 12457, + "Ġcomplaint": 12458, + "Ġeating": 12459, + "Ġtar": 12460, + "_task": 12461, + "Ġopts": 12462, + "216": 12463, + "(to": 12464, + "Pass": 12465, + "Ġplastic": 12466, + "tility": 12467, + "ĠWin": 12468, + ".preventDefault": 12469, + "pile": 12470, + "ĠGar": 12471, + "Ġquantity": 12472, + "_last": 12473, + "Ġgreatest": 12474, + "Dao": 12475, + "_DIS": 12476, + "ĠUsed": 12477, + "ĠHP": 12478, + "riting": 12479, + "SION": 12480, + "blue": 12481, + "domain": 12482, + "Ġscores": 12483, + "Normal": 12484, + "_admin": 12485, + "ĠASSERT": 12486, + "Then": 12487, + "***": 12488, + "dist": 12489, + "lon": 12490, + "Ġhate": 12491, + "shal": 12492, + "ImageView": 12493, + "database": 12494, + "Ġpand": 12495, + "Ġlogic": 12496, + "=false": 12497, + "bg": 12498, + "ĠConfiguration": 12499, + "Ġnur": 12500, + "OG": 12501, + "Ġmarried": 12502, + ":+": 12503, + "Ġdropped": 12504, + "040": 12505, + "Ġregistration": 12506, + "ом": 12507, + "ultiple": 12508, + "izers": 12509, + "shape": 12510, + ".copy": 12511, + "Ġwearing": 12512, + "ĠCath": 12513, + "Ġdedicated": 12514, + "Ġ...Ċ": 12515, + "Ġadvoc": 12516, + "ĠFamily": 12517, + "Ġstatements": 12518, + "ematic": 12519, + "ampionship": 12520, + "Ġmotiv": 12521, + "ĠHave": 12522, + "Ġblow": 12523, + "Job": 12524, + "cert": 12525, + "_vector": 12526, + "install": 12527, + "ĠCOPY": 12528, + "embed": 12529, + "DIR": 12530, + "ĠSpring": 12531, + "Ġexhib": 12532, + "223": 12533, + "cdn": 12534, + "ĠComment": 12535, + "ĠOptional": 12536, + ".player": 12537, + "ĠDark": 12538, + "(pos": 12539, + "ĠShould": 12540, + "Ġcentre": 12541, + "ĠGuard": 12542, + "ów": 12543, + "Ġtrouble": 12544, + "ENER": 12545, + "(unsigned": 12546, + "_service": 12547, + "Ġns": 12548, + "uling": 12549, + "ĠMexico": 12550, + "ĠNY": 12551, + "mysql": 12552, + "Ġlic": 12553, + "åľ": 12554, + "Mr": 12555, + "-fl": 12556, + "ĠCustomer": 12557, + "idi": 12558, + "Ġ?>ĊĊ": 12559, + "rible": 12560, + "ĠпÑĢ": 12561, + "Ġsizes": 12562, + "_STRING": 12563, + "validation": 12564, + "ĠJon": 12565, + "(Http": 12566, + "addClass": 12567, + "Nodes": 12568, + "Ġfragment": 12569, + "Ġspoke": 12570, + "Ġwaste": 12571, + "Join": 12572, + "Ġillustr": 12573, + "eli": 12574, + "cient": 12575, + "Ġaid": 12576, + "Ġprosec": 12577, + "'){Ċ": 12578, + "Ġpassing": 12579, + "Ġfaces": 12580, + "Shape": 12581, + "_Z": 12582, + "iti": 12583, + "Ġalle": 12584, + "Ġrobot": 12585, + "ĠĠĠĠĠĠĠĊ": 12586, + "ĠSpe": 12587, + "Ġreceiving": 12588, + "ĠDetails": 12589, + "Ġ\")": 12590, + "mg": 12591, + "_REF": 12592, + "Ġcomparison": 12593, + "*,": 12594, + "ĠFound": 12595, + "_session": 12596, + "(U": 12597, + "/F": 12598, + "Ġxxx": 12599, + "Network": 12600, + "ders": 12601, + "Ġcapture": 12602, + "Ġcorre": 12603, + "ĠLtd": 12604, + "ĠAdv": 12605, + "[@": 12606, + "Ġclip": 12607, + "Mill": 12608, + "ĠProfile": 12609, + "Ġendif": 12610, + "Ġoblig": 12611, + "describe": 12612, + ".element": 12613, + "riterion": 12614, + "LD": 12615, + "ered": 12616, + "Ġfavour": 12617, + "score": 12618, + "ĠFilter": 12619, + "attributes": 12620, + "Ġchecks": 12621, + "Inflater": 12622, + "ĠPlus": 12623, + "Ġscientific": 12624, + "Ġprivacy": 12625, + "Head": 12626, + "Ġfeat": 12627, + "Ġdegrees": 12628, + "ĠPale": 12629, + ";\">": 12630, + "Ġfilms": 12631, + "ĠAudio": 12632, + "ĠTag": 12633, + "ĠEnergy": 12634, + "itar": 12635, + "parator": 12636, + "Ġfellow": 12637, + "Ġevt": 12638, + "ĠTri": 12639, + "ĠDAM": 12640, + "cloud": 12641, + "ĠPassword": 12642, + "ĠDemocrats": 12643, + "ĠAcad": 12644, + "$lang": 12645, + "Ġreb": 12646, + "())ĊĊ": 12647, + "нÑĭ": 12648, + "ĠBur": 12649, + "readcr": 12650, + "Ġhex": 12651, + "209": 12652, + "Console": 12653, + "ctl": 12654, + "ousel": 12655, + "ĠWilliam": 12656, + "Ġaz": 12657, + "_PORT": 12658, + "Ġpractices": 12659, + "Ġanywhere": 12660, + "ĠPosition": 12661, + "Ġ->Ċ": 12662, + "iams": 12663, + ".username": 12664, + "placeholder": 12665, + "Ġoder": 12666, + "ĠSecretary": 12667, + "ĠiT": 12668, + "mond": 12669, + "events": 12670, + "?âĢĿ": 12671, + ".Sub": 12672, + "Ġattached": 12673, + "Ġnão": 12674, + "Ġestate": 12675, + "365": 12676, + ".action": 12677, + "Ġfigures": 12678, + "Ġ});čĊ": 12679, + "Ġsubscri": 12680, + ".tag": 12681, + "nam": 12682, + ".plot": 12683, + "noon": 12684, + "liament": 12685, + "Character": 12686, + ".tab": 12687, + "Ġwinter": 12688, + "ĠVariable": 12689, + "Ġtrees": 12690, + "Ġproud": 12691, + "(V": 12692, + "_load": 12693, + "Ġhier": 12694, + "ĠEcon": 12695, + "Ġfd": 12696, + "Ġvictims": 12697, + "Rest": 12698, + "iana": 12699, + "Ġfake": 12700, + ".Println": 12701, + "Ġstrlen": 12702, + "Ġsad": 12703, + "Ġble": 12704, + "Prot": 12705, + "Ġbuttons": 12706, + "Ġtelevision": 12707, + "Ġlogo": 12708, + "extension": 12709, + "ĉj": 12710, + "stein": 12711, + "aciones": 12712, + "Ġ\"\"\"ĊĊ": 12713, + "Ġsimp": 12714, + "Ġrecorded": 12715, + "Ġbrings": 12716, + "Ġprincipal": 12717, + "Ġfees": 12718, + "(source": 12719, + "kdir": 12720, + "Ġutils": 12721, + "Ġcorrectly": 12722, + "fil": 12723, + "Ġwel": 12724, + "Pair": 12725, + "-button": 12726, + "scale": 12727, + "verify": 12728, + "[c": 12729, + "Ġ---": 12730, + "Ġescape": 12731, + "ikes": 12732, + "LowerCase": 12733, + "ician": 12734, + "Ġchapter": 12735, + "ĠTYPE": 12736, + "Ġshadow": 12737, + "Ġawesome": 12738, + "WE": 12739, + "elif": 12740, + "Ġlambda": 12741, + "Ġdistinct": 12742, + "Ġbare": 12743, + "-off": 12744, + "Ġcolour": 12745, + ".appendChild": 12746, + "olec": 12747, + "aga": 12748, + ".fill": 12749, + "ĉsuper": 12750, + "Ġadj": 12751, + "(position": 12752, + ".getItem": 12753, + "242": 12754, + "Short": 12755, + "Ġtotally": 12756, + "VD": 12757, + "ĠTre": 12758, + "_ep": 12759, + "vements": 12760, + "ĠSolution": 12761, + "Ġfundament": 12762, + "Follow": 12763, + "Ġfacility": 12764, + "Ġhappening": 12765, + "OF": 12766, + ".textBox": 12767, + "Span": 12768, + "Ġ«": 12769, + "iden": 12770, + "Ġexceed": 12771, + "(parent": 12772, + "Ġcp": 12773, + "ç»": 12774, + "Ġhasn": 12775, + "Ġpri": 12776, + "Ġconsequ": 12777, + "nen": 12778, + "ĠINTO": 12779, + "Ignore": 12780, + "ĠFuture": 12781, + "Ġcarbon": 12782, + "ĠSteel": 12783, + "fmt": 12784, + "okie": 12785, + "Ġspl": 12786, + "(title": 12787, + "-info": 12788, + "Ġdeals": 12789, + "Ġfixture": 12790, + "ea": 12791, + "Div": 12792, + "Ġtested": 12793, + "_return": 12794, + ")ĊĊĊĊ": 12795, + "upported": 12796, + "ĠCook": 12797, + "Ġpaying": 12798, + "ĠIll": 12799, + "Ġarrested": 12800, + "ĠPrime": 12801, + "_callback": 12802, + ">,Ċ": 12803, + "driver": 12804, + "Once": 12805, + "abb": 12806, + "_bytes": 12807, + "ĠSets": 12808, + "(Object": 12809, + "Ġcc": 12810, + "Ġshell": 12811, + "alo": 12812, + ");//": 12813, + "(log": 12814, + "264": 12815, + "ctors": 12816, + ")": 13301, + "218": 13302, + "Ġ$(\".": 13303, + ".pos": 13304, + "Ġboys": 13305, + "Ġwedding": 13306, + "Ġagents": 13307, + "=\"_": 13308, + "ĠArmy": 13309, + "Ġhint": 13310, + "vision": 13311, + "Ġtech": 13312, + "ĠConnect": 13313, + "Ġlegend": 13314, + "ĠBet": 13315, + ".Base": 13316, + "Subject": 13317, + "Ġlit": 13318, + "Remove": 13319, + "Ġ\":": 13320, + "ĠFinal": 13321, + "pearance": 13322, + "ĠiTunes": 13323, + "Ġparticipants": 13324, + "ĠPython": 13325, + "Ġbusy": 13326, + "iel": 13327, + "vertices": 13328, + "ĠtemplateUrl": 13329, + "ĠClose": 13330, + "Img": 13331, + "ĠCorporation": 13332, + "timestamp": 13333, + "Ġextend": 13334, + "Ġwebsites": 13335, + "Ġpossibility": 13336, + "оÑĤ": 13337, + "Ġkö": 13338, + "Ġmeat": 13339, + "Ġrepresentation": 13340, + "241": 13341, + "Ġĉĉ": 13342, + "_START": 13343, + ".apply": 13344, + "ĠValley": 13345, + "ĠSuccess": 13346, + "Hi": 13347, + "Ġnob": 13348, + "ĠIEnumerable": 13349, + "_select": 13350, + "geo": 13351, + ".\")Ċ": 13352, + "Ġturning": 13353, + "Ġfabric": 13354, + "(\"\");Ċ": 13355, + "Ġperspective": 13356, + "éĹ": 13357, + "ĠSn": 13358, + "Thank": 13359, + ";j": 13360, + ".Parameters": 13361, + "ĉĠĠĠĠĠĠĠĠĠĠĠ": 13362, + "Ġfacts": 13363, + "305": 13364, + "Ġunt": 13365, + ".instance": 13366, + "################################################################": 13367, + "-end": 13368, + "ĠJOIN": 13369, + "ĠHen": 13370, + "Ġuri": 13371, + "åIJį": 13372, + "Ġна": 13373, + "ĠInfo": 13374, + "Ġconducted": 13375, + "ĠÃ¥": 13376, + "OURCE": 13377, + "Ġwine": 13378, + "John": 13379, + ".Errorf": 13380, + "ĠAge": 13381, + "ounded": 13382, + "Ġrealize": 13383, + "312": 13384, + "Ġ];": 13385, + "Ġsubsequ": 13386, + ",m": 13387, + "(User": 13388, + "iano": 13389, + "Ġaccompl": 13390, + "isp": 13391, + ".std": 13392, + "éĩ": 13393, + "ĠBed": 13394, + ".setAttribute": 13395, + "BR": 13396, + "keep": 13397, + "ĠALL": 13398, + "Ġisol": 13399, + "amma": 13400, + "Package": 13401, + "Ġoccasion": 13402, + "-success": 13403, + "ед": 13404, + "ĠLIMITED": 13405, + "strip": 13406, + "()ĊĊĊ": 13407, + "istribution": 13408, + "Colors": 13409, + "Ġ+:+": 13410, + "DidLoad": 13411, + "aler": 13412, + "Ġtid": 13413, + "ĠLED": 13414, + "ĠLinked": 13415, + "ĠCart": 13416, + "())čĊ": 13417, + "_READ": 13418, + "Ġkilling": 13419, + "ĠPHP": 13420, + "fection": 13421, + "Ġinstances": 13422, + "cv": 13423, + "\"/>": 13424, + "Ġsf": 13425, + "Ġtaxes": 13426, + "_location": 13427, + "ĠBitcoin": 13428, + "uable": 13429, + "rank": 13430, + "ignore": 13431, + "track": 13432, + "ка": 13433, + "Ġshouldn": 13434, + "ĠOP": 13435, + "=>{Ċ": 13436, + "Ġkm": 13437, + "Ġhelper": 13438, + "_head": 13439, + "ĠWhether": 13440, + "oco": 13441, + "_bl": 13442, + "Ġstatistics": 13443, + "Ġbeauty": 13444, + "Ġtog": 13445, + "tip": 13446, + "ëĭ¤": 13447, + "Ġcsv": 13448, + "(sql": 13449, + "stdlib": 13450, + "weak": 13451, + "Ġlikes": 13452, + "Äį": 13453, + "Ġrepeat": 13454, + "Ġapartment": 13455, + "Ġemph": 13456, + "_edit": 13457, + "Ġvit": 13458, + "ĉtype": 13459, + "217": 13460, + "Even": 13461, + "uten": 13462, + "Ġcircumstances": 13463, + "bian": 13464, + "Ġsugar": 13465, + "Windows": 13466, + "ìŀ": 13467, + "Ġobserved": 13468, + "/data": 13469, + "Ġcalendar": 13470, + "Ġstrike": 13471, + "ĠRES": 13472, + "_sc": 13473, + "fony": 13474, + "orem": 13475, + "(z": 13476, + "power": 13477, + "etect": 13478, + "ĠSat": 13479, + ".description": 13480, + "Ġgang": 13481, + "ĠSports": 13482, + "ongs": 13483, + "ĠBundle": 13484, + ".sum": 13485, + "once": 13486, + "Ġaccused": 13487, + "Ġexplore": 13488, + "Ġapproximately": 13489, + "Ġlosing": 13490, + "thesis": 13491, + "ĠFund": 13492, + "Ġdiagn": 13493, + "Autowired": 13494, + "properties": 13495, + "Ġ_.": 13496, + "Ġcnt": 13497, + "cedure": 13498, + "Ġyy": 13499, + "Ġgrant": 13500, + "sock": 13501, + ".innerHTML": 13502, + "Ġ]);Ċ": 13503, + "ĠCONFIG": 13504, + "='$": 13505, + "550": 13506, + "]];Ċ": 13507, + "UND": 13508, + "Ġglob": 13509, + "Ġdire": 13510, + "uffle": 13511, + "_MEM": 13512, + "Ġauthentic": 13513, + ">(\"": 13514, + "Ġdecade": 13515, + "ĠImport": 13516, + "Ġoriginally": 13517, + "ĠjQuery": 13518, + "Ġindicate": 13519, + "Ġourselves": 13520, + "Sw": 13521, + ".lbl": 13522, + "enerate": 13523, + "Ġbasically": 13524, + "ĠHom": 13525, + "Ġ+#+": 13526, + "ĠBritain": 13527, + "ĠKar": 13528, + "toEqual": 13529, + ".stop": 13530, + "Ġmodal": 13531, + "isi": 13532, + "Ġsuggests": 13533, + "Ġdtype": 13534, + "Ġtur": 13535, + "bf": 13536, + "Ġconnections": 13537, + "ĠBefore": 13538, + "isted": 13539, + "mouse": 13540, + "Ġpulled": 13541, + ".build": 13542, + "Ġlegislation": 13543, + "Ġforth": 13544, + "pad": 13545, + "ego": 13546, + ".Now": 13547, + "Ġexciting": 13548, + "}ĊĊĊĊ": 13549, + "Ġcompr": 13550, + "Ġshares": 13551, + "Ġrig": 13552, + "green": 13553, + "_vec": 13554, + "Ġenumerate": 13555, + "Auto": 13556, + "icator": 13557, + "ĠRay": 13558, + "asse": 13559, + "Ġholiday": 13560, + "Ġnullable": 13561, + "gun": 13562, + "_details": 13563, + "Ġwrapper": 13564, + "seq": 13565, + "ĠYoung": 13566, + "juana": 13567, + "Ġ\"__": 13568, + "license": 13569, + "serve": 13570, + "^(": 13571, + "iders": 13572, + ".Remove": 13573, + "ropdown": 13574, + "'S": 13575, + "pin": 13576, + "(token": 13577, + ".Default": 13578, + "Ġreasonable": 13579, + "ampion": 13580, + "ĠSociety": 13581, + "Ġbei": 13582, + "erves": 13583, + "rad": 13584, + "ĠFox": 13585, + "_images": 13586, + "Ġwheel": 13587, + "')[": 13588, + "Ġcfg": 13589, + "(By": 13590, + "Constructor": 13591, + "Ġvary": 13592, + ".swift": 13593, + "Ġproxy": 13594, + "ĉH": 13595, + "ĠAnother": 13596, + "ĠPen": 13597, + "Ġchecking": 13598, + "Ġjest": 13599, + "manager": 13600, + "Origin": 13601, + "ugs": 13602, + "oir": 13603, + ">čĊ": 16336, + "Ġrelief": 16337, + "lap": 16338, + "quer": 16339, + "_parent": 16340, + "heap": 16341, + "LOSE": 16342, + "Ġcombine": 16343, + "ĠRose": 16344, + "owers": 16345, + "Ġprocedures": 16346, + "ĠSort": 16347, + "anim": 16348, + "variant": 16349, + "ehicle": 16350, + "Ġsigning": 16351, + "Primary": 16352, + "currency": 16353, + "Ġsexe": 16354, + "oen": 16355, + "theta": 16356, + "eman": 16357, + "Ġimpressive": 16358, + "('_": 16359, + "ĉU": 16360, + "ĠTextStyle": 16361, + "_cnt": 16362, + "Ġslice": 16363, + "(':": 16364, + "Ġunderstood": 16365, + "His": 16366, + "277": 16367, + "013": 16368, + "Ġinformed": 16369, + "Ġnick": 16370, + "429": 16371, + "(TAG": 16372, + "hd": 16373, + "Ġelections": 16374, + "esture": 16375, + "ĠSanta": 16376, + "ĠCoast": 16377, + ".pdf": 16378, + "inciple": 16379, + ".clone": 16380, + "born": 16381, + "uta": 16382, + "Ġlicensed": 16383, + "Cr": 16384, + "Ġbread": 16385, + "ĠHouston": 16386, + "Ġnod": 16387, + "Ġhopes": 16388, + "ĠCGRect": 16389, + "Ġguilty": 16390, + ".gif": 16391, + "Ġrose": 16392, + ".Common": 16393, + "Tip": 16394, + "ANK": 16395, + "ĠFC": 16396, + "During": 16397, + "ĠSymfony": 16398, + "Ġdefensive": 16399, + "km": 16400, + ")>": 16401, + "archive": 16402, + "ĠURI": 16403, + "ycling": 16404, + "-o": 16405, + "ĠWebsite": 16406, + "AMP": 16407, + "405": 16408, + "ishment": 16409, + "Ġdoctors": 16410, + "Direct": 16411, + "ARI": 16412, + "ĠRedirect": 16413, + "ieren": 16414, + "960": 16415, + "_dist": 16416, + "yo": 16417, + "ĠProgress": 16418, + "Ġzum": 16419, + "Ġmemor": 16420, + "ĠED": 16421, + "Ġjur": 16422, + "æį®": 16423, + "_TABLE": 16424, + "Ġuuid": 16425, + "Expr": 16426, + ".head": 16427, + "('%": 16428, + "pointer": 16429, + "Ġestimate": 16430, + "ĠGreg": 16431, + "Ġloader": 16432, + "ĠiOS": 16433, + "Ġmens": 16434, + "[y": 16435, + "Ġrefused": 16436, + "Ġprecision": 16437, + "isch": 16438, + "ĠACTION": 16439, + "Cloud": 16440, + "sWith": 16441, + "(ret": 16442, + "292": 16443, + "_ADDR": 16444, + "_conf": 16445, + "(df": 16446, + "Ġlocked": 16447, + "Ġrising": 16448, + "ãĥ»ãĥ»": 16449, + "ĠMs": 16450, + "Ġscenes": 16451, + "_EXT": 16452, + "_raw": 16453, + "_the": 16454, + "people": 16455, + "Ġrecon": 16456, + "ĠFun": 16457, + "Ġbless": 16458, + "ĠUpdated": 16459, + "422": 16460, + "ün": 16461, + "ĠĠĠĠĠĠĠĠĠĠĠĠčĊ": 16462, + "pection": 16463, + "Release": 16464, + ".logger": 16465, + "ĠSY": 16466, + "Ġcounsel": 16467, + "urd": 16468, + "_true": 16469, + "Ġeverybody": 16470, + "ivot": 16471, + "Ġhence": 16472, + "ĠNAS": 16473, + "789": 16474, + "Ġopposed": 16475, + "unknown": 16476, + "ĠDESC": 16477, + "ĠChair": 16478, + "failed": 16479, + "ĠINCLUDING": 16480, + "386": 16481, + "352": 16482, + "Ġwriters": 16483, + "{}Ċ": 16484, + "ÃŃt": 16485, + "_copy": 16486, + "}:": 16487, + "ĠBat": 16488, + "Ġconverted": 16489, + "eding": 16490, + "placement": 16491, + "ĠHost": 16492, + "Sound": 16493, + "им": 16494, + "Ġsought": 16495, + "402": 16496, + "mid": 16497, + "Ġsalary": 16498, + "ogg": 16499, + "âĦ¢": 16500, + "bul": 16501, + "Ġwir": 16502, + "validator": 16503, + "_STAT": 16504, + ".store": 16505, + "ĠBattle": 16506, + "ın": 16507, + "Ġ-->ĊĊ": 16508, + "Trump": 16509, + "dot": 16510, + "ĠCONT": 16511, + ".fetch": 16512, + "Ġcontinu": 16513, + "was": 16514, + "Ġfraud": 16515, + "_tmp": 16516, + "mitter": 16517, + ".pictureBox": 16518, + "GA": 16519, + "Ġtournament": 16520, + ".Input": 16521, + "343": 16522, + "[r": 16523, + "exion": 16524, + "centage": 16525, + "ĠKorean": 16526, + "undef": 16527, + "ĠAvailable": 16528, + "reshape": 16529, + "Ġkit": 16530, + "ĠStruct": 16531, + "ĠSUB": 16532, + "Answer": 16533, + "_lib": 16534, + ".twitter": 16535, + "Ġore": 16536, + "ĠDragon": 16537, + ".Ext": 16538, + ",k": 16539, + "Ġexplanation": 16540, + "refs": 16541, + "ĠDrive": 16542, + "ĠTraining": 16543, + "282": 16544, + ".Has": 16545, + "341": 16546, + "intage": 16547, + "big": 16548, + "ologist": 16549, + "ennis": 16550, + "460": 16551, + "Ùĩ": 16552, + "Ġchicken": 16553, + "ĠĠĠĠĠĠĠĠĠĠĊ": 16554, + "çĽ": 16555, + "ãģ§": 16556, + "Ġpeak": 16557, + "Ġdrinking": 16558, + "Ġencode": 16559, + "ĠNEW": 16560, + "malloc": 16561, + "ĉfprintf": 16562, + "Ġ=================================================================": 16563, + "including": 16564, + "Ġprinciples": 16565, + "ĠMah": 16566, + "267": 16567, + "storage": 16568, + "-key": 16569, + "Ġkeyword": 16570, + "%;": 16571, + "Ġtrained": 16572, + ".contrib": 16573, + "Ġkv": 16574, + "__':Ċ": 16575, + "ĠBoy": 16576, + "parameter": 16577, + "Ġsuite": 16578, + "Ġthousand": 16579, + "Ġcoordinate": 16580, + "-generated": 16581, + "íķĺ": 16582, + "generated": 16583, + "Ġadmitted": 16584, + "Ġpussy": 16585, + "#w": 16586, + "Ġswim": 16587, + "union": 16588, + "Na": 16589, + "274": 16590, + "ĠRoyal": 16591, + ".channel": 16592, + "Updated": 16593, + "_ROOT": 16594, + "Ġvital": 16595, + "335": 16596, + "raction": 16597, + "ĠCrusher": 16598, + "Ġpreced": 16599, + "Ġhorizontal": 16600, + "Blueprint": 16601, + "Ġattrs": 16602, + "Ġsmoke": 16603, + "ÐĴ": 16604, + ".Equals": 16605, + "FB": 16606, + "ĠResources": 16607, + "rolling": 16608, + "Ġpasses": 16609, + "ĠNum": 16610, + "rotate": 16611, + "etype": 16612, + "\\\",": 16613, + "Ġsensitive": 16614, + "Ġtall": 16615, + "?âĢĿĊĊ": 16616, + "Proxy": 16617, + "iy": 16618, + "_section": 16619, + "âĢĶâĢĶâĢĶâĢĶ": 16620, + "brid": 16621, + "Ġcircuit": 16622, + "atan": 16623, + "ENC": 16624, + "Ġdriven": 16625, + "Ġvoted": 16626, + "Ġeducational": 16627, + "Ġinteraction": 16628, + "abetes": 16629, + "Ġtone": 16630, + "ĠInitializeComponent": 16631, + "Ġmerely": 16632, + "Ġìŀ": 16633, + "cookie": 16634, + "_div": 16635, + "ĠUILabel": 16636, + "vely": 16637, + "});čĊ": 16638, + "_ENT": 16639, + "#+#+": 16640, + "articles": 16641, + "ĠSouthern": 16642, + "Ġstronger": 16643, + "ĠGiven": 16644, + "ĠEric": 16645, + "ĠIR": 16646, + "abstract": 16647, + "Under": 16648, + "nable": 16649, + "Ġincrement": 16650, + "oven": 16651, + "Ġcoin": 16652, + "_timer": 16653, + "Ġsuffered": 16654, + "ĠFREE": 16655, + "'].\"": 16656, + "ĠQueen": 16657, + "stats": 16658, + "Ġmeetings": 16659, + "276": 16660, + "Ġentering": 16661, + "Ġalongside": 16662, + "(session": 16663, + "itals": 16664, + "Ġfoundation": 16665, + "ĠCredit": 16666, + ".div": 16667, + "_ALL": 16668, + "pcion": 16669, + "_stat": 16670, + "icking": 16671, + "Defaults": 16672, + "_src": 16673, + "Ġoutputs": 16674, + "/B": 16675, + "Ġenthus": 16676, + "-bl": 16677, + ".ForeColor": 16678, + "ĉtemp": 16679, + "Face": 16680, + "Ġinteract": 16681, + "Ġweird": 16682, + "Mount": 16683, + "rell": 16684, + "udents": 16685, + "Ġrequirement": 16686, + "ĠSus": 16687, + "IER": 16688, + "Ġelected": 16689, + "reference": 16690, + "ĠME": 16691, + "Ġservers": 16692, + ".wait": 16693, + "Ġsnapshot": 16694, + "ilton": 16695, + "Ġtries": 16696, + "Ġtipo": 16697, + ".Time": 16698, + ">w": 16699, + "Ġmountain": 16700, + "Ġpounds": 16701, + "Ġ[...": 16702, + "exists": 16703, + "ĠngOn": 16704, + "_MAP": 16705, + "Ġflying": 16706, + "331": 16707, + "xiety": 16708, + "ĉvalue": 16709, + "_DB": 16710, + "uno": 16711, + "Ġseats": 16712, + "TURN": 16713, + ".author": 16714, + "!)": 16715, + "orce": 16716, + "Ġindicated": 16717, + "317": 16718, + ".sin": 16719, + "Ġassignment": 16720, + "imiento": 16721, + "ĠFrame": 16722, + "324": 16723, + "_gen": 16724, + "inery": 16725, + "_)": 16726, + "messages": 16727, + ".settings": 16728, + "ĠMean": 16729, + "ĠMuseum": 16730, + "irq": 16731, + "attach": 16732, + "ĠPalestin": 16733, + "_QU": 16734, + "_tags": 16735, + "Ġcasual": 16736, + "emen": 16737, + "ASSWORD": 16738, + "432": 16739, + "$s": 16740, + "ĠCirc": 16741, + "ой": 16742, + "etric": 16743, + "/P": 16744, + "018": 16745, + "Ġepoch": 16746, + "The": 16761, + "ĠAk": 16762, + "Ġgrass": 16763, + "/*čĊ": 16764, + "(dis": 16765, + "Ġguns": 16766, + "Ġtb": 16767, + "ĠKevin": 16768, + ".args": 16769, + "ĠAh": 16770, + "oped": 16771, + "(J": 16772, + "columns": 16773, + "arguments": 16774, + "ĠWithEvents": 16775, + "_full": 16776, + "ĠDefense": 16777, + "Simple": 16778, + "Ġdeaths": 16779, + "295": 16780, + "Ġextensive": 16781, + "ĠStill": 16782, + "ĠExpression": 16783, + "ĠAgency": 16784, + "Ġperforming": 16785, + "FX": 16786, + "Ġusuario": 16787, + "UAL": 16788, + "Side": 16789, + "odos": 16790, + "aptop": 16791, + "Ġcredentials": 16792, + "_cap": 16793, + "atient": 16794, + "ĠDisney": 16795, + "Ġai": 16796, + "Ġchip": 16797, + "Ġvolt": 16798, + ".makeText": 16799, + "%%%%%%%%%%%%%%%%": 16800, + "Ġbelief": 16801, + "_LOC": 16802, + "ĠCivil": 16803, + "Navigation": 16804, + "Ġreveal": 16805, + "Ġviolent": 16806, + "ĠFil": 16807, + "Ġcatalog": 16808, + "emed": 16809, + "scan": 16810, + ".control": 16811, + "Ġconstitution": 16812, + "Country": 16813, + "Separator": 16814, + "_APP": 16815, + "topic": 16816, + "uetooth": 16817, + "MIN": 16818, + "Ġdescriptor": 16819, + "yt": 16820, + "ETHER": 16821, + "Ġdistribute": 16822, + "'}Ċ": 16823, + ".trim": 16824, + ".Line": 16825, + "Ġlbl": 16826, + "assertEquals": 16827, + "ĠDet": 16828, + "ombok": 16829, + "(width": 16830, + "Ġtort": 16831, + "ĠEXPRESS": 16832, + "aco": 16833, + "Using": 16834, + "ĠBrand": 16835, + "wall": 16836, + "EMENT": 16837, + "ĠCommunic": 16838, + "(Ċ": 17492, + "?>\"": 17493, + "Ġ///Ċ": 17494, + "Ġeiner": 17495, + "Ġweekly": 17496, + "ĉlogger": 17497, + "_pop": 17498, + "_man": 17499, + "Ġmigrations": 17500, + "Ġasks": 17501, + "Ġbs": 17502, + "Ġfalls": 17503, + ".Where": 17504, + "-height": 17505, + "_feature": 17506, + ".Min": 17507, + "Ġhyper": 17508, + "Ġvolatile": 17509, + "Ġtwenty": 17510, + "Typography": 17511, + "Unable": 17512, + "Det": 17513, + ",f": 17514, + "-mod": 17515, + "Ġsettlement": 17516, + "Ġcontracts": 17517, + "nome": 17518, + "Bad": 17519, + "ĠBrian": 17520, + "768": 17521, + "(username": 17522, + "!!!!": 17523, + "Ġhack": 17524, + ".Field": 17525, + "HR": 17526, + "ĠJordan": 17527, + "iza": 17528, + "ĠÂł": 17529, + "ĠSher": 17530, + ".header": 17531, + "(other": 17532, + "ĠDub": 17533, + "(op": 17534, + "ĠRound": 17535, + "Ġvie": 17536, + "Ġappl": 17537, + "ĉJ": 17538, + "ĠInsert": 17539, + "ĠLP": 17540, + "regon": 17541, + "ĠMPI": 17542, + "Ġanchor": 17543, + "aca": 17544, + "ør": 17545, + "Ġade": 17546, + "anchor": 17547, + "quee": 17548, + "ĠTreeNode": 17549, + "Ġtargeted": 17550, + "Ġlaid": 17551, + "ABEL": 17552, + "vet": 17553, + "ĠOrigin": 17554, + "Ant": 17555, + ".');Ċ": 17556, + "expect": 17557, + "edReader": 17558, + "ĠMajor": 17559, + "Ġinch": 17560, + "Compar": 17561, + "Ġpreview": 17562, + "Ġillness": 17563, + "ĠCONTRACT": 17564, + "ĠIndepend": 17565, + "uuid": 17566, + "Ġnome": 17567, + "Ġtc": 17568, + "ĠAvenue": 17569, + "isan": 17570, + "Ġphrase": 17571, + "_move": 17572, + "\")[": 17573, + "412": 17574, + "Ġprovision": 17575, + "Ġconcentr": 17576, + "_IR": 17577, + "ĠUt": 17578, + "()+": 17579, + "Ġnas": 17580, + "!,": 17581, + "ĠRobin": 17582, + "iations": 17583, + "atitude": 17584, + "Ġpx": 17585, + "ĠWithout": 17586, + "/bash": 17587, + "ekt": 17588, + "reement": 17589, + "342": 17590, + "Observer": 17591, + "318": 17592, + "ĠRegion": 17593, + "UBLIC": 17594, + "Ġ{//": 17595, + "KN": 17596, + "å·": 17597, + "GameObject": 17598, + "å¾": 17599, + "encoding": 17600, + "Ġ***": 17601, + "projects": 17602, + "Ġtk": 17603, + "Ġcheese": 17604, + "EMPL": 17605, + "aro": 17606, + "ĠاÙĦ": 17607, + "610": 17608, + "337": 17609, + "Ġconsists": 17610, + "refresh": 17611, + "ureau": 17612, + "ĠScanner": 17613, + "Ġsoil": 17614, + "Ġflavor": 17615, + "DataSource": 17616, + "Execute": 17617, + "ение": 17618, + "Ġshit": 17619, + "åĪĨ": 17620, + "Ċ": 17875, + "Ġsubsequent": 17876, + "posable": 17877, + "-fluid": 17878, + "Ġthorough": 17879, + "Ġpublicly": 17880, + "apters": 17881, + "ĠWilson": 17882, + "_PRE": 17883, + "yard": 17884, + "ä¼": 17885, + "ĉin": 17886, + "339": 17887, + "Ġrevers": 17888, + "Ġbullet": 17889, + "cribed": 17890, + "nesota": 17891, + "Ġ($_": 17892, + "annon": 17893, + "cursor": 17894, + "Ġclothing": 17895, + "ĠMulti": 17896, + "287": 17897, + ":',": 17898, + "Ġvess": 17899, + "ordinator": 17900, + "Ġeinem": 17901, + "Cannot": 17902, + "Ġarmed": 17903, + "ĉV": 17904, + "ä¸Ĭ": 17905, + ".Flat": 17906, + "ĠSep": 17907, + "ĠSubject": 17908, + "_font": 17909, + "Ġcharacteristics": 17910, + "Done": 17911, + "eln": 17912, + "############": 17913, + "POS": 17914, + "Ġdensity": 17915, + "ĠPlatform": 17916, + "-items": 17917, + "Ġovers": 17918, + "Ġpushing": 17919, + "ç¤": 17920, + ".Connection": 17921, + "_term": 17922, + "Ġinitialization": 17923, + "________________________________": 17924, + "ç¬": 17925, + ".document": 17926, + "lesh": 17927, + "ĉdocument": 17928, + "ĠPin": 17929, + "ça": 17930, + "Ġdefinitions": 17931, + ".Path": 17932, + "_WRITE": 17933, + "ĠĉĊ": 17934, + "?>ĊĊ": 17935, + "Ġterrible": 17936, + "bean": 17937, + "ickets": 17938, + "ĠSV": 17939, + "Buy": 17940, + "(task": 17941, + "Ġregime": 17942, + "google": 17943, + "Ġcrack": 17944, + ".visit": 17945, + "NUM": 17946, + "energy": 17947, + "Ġstruck": 17948, + "_sample": 17949, + ".payload": 17950, + "Ġrevis": 17951, + "ĠScene": 17952, + "Ġpg": 17953, + "Ġbreakfast": 17954, + "URRENT": 17955, + ".charAt": 17956, + "_exception": 17957, + "ĠAnton": 17958, + "Ġguidelines": 17959, + "Ġexhaust": 17960, + "ĠFinancial": 17961, + "Ġindent": 17962, + "Ġdesktop": 17963, + "Hidden": 17964, + "Failure": 17965, + "Ġprinciple": 17966, + "Ġiv": 17967, + "Ġseks": 17968, + "network": 17969, + "ĠnumberOf": 17970, + "ĠAlbert": 17971, + "ĉlong": 17972, + "801": 17973, + ",.": 17974, + "Ġzeros": 17975, + "fade": 17976, + "ĠTyp": 17977, + "ĠTerm": 17978, + "ĠArts": 17979, + ".Application": 17980, + "Ġbehalf": 17981, + "æĪ·": 17982, + "Ġmere": 17983, + "(`${": 17984, + "Ġawareness": 17985, + "elpers": 17986, + "flix": 17987, + "Ġweigh": 17988, + "Ġestimates": 17989, + ".child": 17990, + "/O": 17991, + "ĠBitmap": 17992, + ".bottom": 17993, + "Ġ**************************************************************************": 17994, + "Expect": 17995, + "ento": 17996, + "ĠForum": 17997, + "veral": 17998, + "Ġjail": 17999, + "Ġabilities": 18000, + "ĠHOLD": 18001, + "ĠCit": 18002, + "Ġdynam": 18003, + "Ġgray": 18004, + "ĉĉĉĉĉĉĉĉĉĉĉĉĉ": 18005, + ".nextInt": 18006, + "antly": 18007, + "ĠARISING": 18008, + "(private": 18009, + "Ġrejected": 18010, + "ĠNic": 18011, + "Ġleather": 18012, + "={Ċ": 18013, + "alytics": 18014, + "thetic": 18015, + ".Top": 18016, + "373": 18017, + ".Page": 18018, + "={`": 18019, + "Ġ;čĊ": 18020, + "depth": 18021, + "mann": 18022, + "WD": 18023, + "ĠSom": 18024, + ".Right": 18025, + "Ġ)}Ċ": 18026, + "Ġtrait": 18027, + "ÃĹ": 18028, + "iac": 18029, + "Ġrv": 18030, + "Sample": 18031, + ".Xml": 18032, + "opped": 18033, + "ĠÑĦ": 18034, + "lists": 18035, + "Ġtear": 18036, + "iversary": 18037, + ".collection": 18038, + "ĠConstitution": 18039, + "ĠHttpResponse": 18040, + "Ġbrill": 18041, + "ĠProm": 18042, + "hover": 18043, + "366": 18044, + "ĠMiami": 18045, + "Ġargue": 18046, + "_float": 18047, + "504": 18048, + "ĠãĤ": 18049, + "Ġnat": 18050, + "ĠTal": 18051, + "Ġintegration": 18052, + "(cur": 18053, + "Ġremoving": 18054, + "Ġcoeff": 18055, + "ĠThough": 18056, + "Ġforecast": 18057, + "408": 18058, + "ĠVegas": 18059, + "Site": 18060, + "346": 18061, + "Ġtrab": 18062, + "ĠHenry": 18063, + "-i": 18064, + "Ġinvolves": 18065, + "BT": 18066, + "Ġslo": 18067, + "Invoke": 18068, + "Ġlucky": 18069, + "025": 18070, + "rat": 18071, + "Ġ?Ċ": 18072, + "Ġhandled": 18073, + "(fd": 18074, + "contents": 18075, + "ĠOFF": 18076, + "RF": 18077, + "Ġsty": 18078, + "ĠMotor": 18079, + "tery": 18080, + "tax": 18081, + "MAP": 18082, + "ĠMrs": 18083, + "Ġphones": 18084, + "ĠUIView": 18085, + "\")));Ċ": 18086, + "(dev": 18087, + "ĠIrish": 18088, + "019": 18089, + "Ġws": 18090, + "DI": 18091, + "_OFFSET": 18092, + "ĠEvents": 18093, + "Ġstages": 18094, + "Ġ}//": 18095, + "Ġhaben": 18096, + "STANCE": 18097, + "ĠSin": 18098, + "ĠMoney": 18099, + "(top": 18100, + "Ġappointment": 18101, + "VERSION": 18102, + "metadata": 18103, + "_comment": 18104, + "Ġcolleagues": 18105, + "maps": 18106, + "âĺ": 18107, + "ĊĉĊ": 18108, + "(al": 18109, + "_req": 18110, + "Ġfut": 18111, + "Ġarchitecture": 18112, + "351": 18113, + "ĠWHETHER": 18114, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 18115, + "_screen": 18116, + "ĠstyleUrls": 18117, + "Ġmonster": 18118, + ".up": 18119, + "phia": 18120, + "Ġprocessor": 18121, + "ĠTerr": 18122, + "=',": 18123, + "ĠManufact": 18124, + "ĠNT": 18125, + "kel": 18126, + "ibern": 18127, + "ĉfile": 18128, + "Ali": 18129, + "rientation": 18130, + "Ġ//!": 18131, + "apore": 18132, + "aneous": 18133, + "ĠCreat": 18134, + "folder": 18135, + "415": 18136, + "Ġhay": 18137, + "Suppress": 18138, + "(left": 18139, + "Ġeuro": 18140, + "Ġdisclaimer": 18141, + "ustry": 18142, + "ships": 18143, + "_fd": 18144, + "ĠFa": 18145, + "_insert": 18146, + "Ġrol": 18147, + "ifting": 18148, + "ĠComments": 18149, + "_br": 18150, + "Ġlosses": 18151, + "ĠAdded": 18152, + "charg": 18153, + "Ġпо": 18154, + "_system": 18155, + "ĠSometimes": 18156, + "ĠSpain": 18157, + "(group": 18158, + "ialis": 18159, + "Ġdollar": 18160, + "ĠArgs": 18161, + "499": 18162, + "297": 18163, + "quires": 18164, + "ĠTen": 18165, + ".scss": 18166, + "Ġsurvive": 18167, + "usage": 18168, + "Ġjun": 18169, + "imiter": 18170, + "ï¼ģĊĊ": 18171, + "Ġfifth": 18172, + "toggle": 18173, + "Ġdecline": 18174, + "($\"": 18175, + "(Long": 18176, + "inge": 18177, + "Ġpilot": 18178, + "-light": 18179, + "-radius": 18180, + "Ġpodcast": 18181, + "Ġnaturally": 18182, + "Pages": 18183, + "为": 18184, + "ĠDespite": 18185, + "Ġlighting": 18186, + "Ġcrate": 18187, + "ĠBinary": 18188, + "Ġreducing": 18189, + "Ġeleg": 18190, + "ĠMouse": 18191, + "ĠTestBed": 18192, + "ĠbeforeEach": 18193, + "_ARRAY": 18194, + "Redirect": 18195, + "329": 18196, + "Ġflood": 18197, + "Ġships": 18198, + "363": 18199, + "Ġelectricity": 18200, + ")*(": 18201, + "ê¸": 18202, + "ĠViet": 18203, + "hero": 18204, + "Ġdia": 18205, + "ĠKent": 18206, + "heart": 18207, + "Ġthreats": 18208, + "_acc": 18209, + "Ġsymbols": 18210, + "ischen": 18211, + "_inst": 18212, + "Criterion": 18213, + "ĠTIM": 18214, + ".Height": 18215, + "580": 18216, + "ĠâĢĻ": 18217, + "();ĊĊĊ": 18218, + "Products": 18219, + "_SP": 18220, + "ĠCy": 18221, + "Ġdependent": 18222, + "este": 18223, + "Ġdatos": 18224, + "dit": 18225, + "ав": 18226, + "IGNAL": 18227, + "Ġlesson": 18228, + "\">'": 18229, + "ĠCover": 18230, + "ĠHope": 18231, + "ĠTimer": 18232, + "Ġdad": 18233, + "viders": 18234, + "ĠPhot": 18235, + "/?": 18236, + "ropy": 18237, + "oming": 18238, + "asion": 18239, + "Ġ\\(": 18240, + "ĠET": 18241, + "ĠReading": 18242, + "Ġepisodes": 18243, + "lm": 18244, + "421": 18245, + "echa": 18246, + "Ġneuro": 18247, + "820": 18248, + "Ġharmon": 18249, + "Ġliberal": 18250, + "-ind": 18251, + "393": 18252, + "DATA": 18253, + "Ġeveryday": 18254, + "Ġdivided": 18255, + "ĠActiveRecord": 18256, + "figure": 18257, + "UA": 18258, + "ä¹": 18259, + "riendly": 18260, + "tech": 18261, + "601": 18262, + ".gameObject": 18263, + "иÑĤÑĮ": 18264, + "374": 18265, + "Ġmoon": 18266, + "ftime": 18267, + "Ġnoch": 18268, + "ĠTORT": 18269, + "ĠVM": 18270, + ".initial": 18271, + "(child": 18272, + "Ġmusical": 18273, + "Ġoc": 18274, + "bas": 18275, + "ĠHay": 18276, + "361": 18277, + "_long": 18278, + "Ġmemset": 18279, + "iley": 18280, + "adelphia": 18281, + "SV": 18282, + "roat": 18283, + "_tx": 18284, + "Ġlon": 18285, + "ĠngOnInit": 18286, + "bp": 18287, + "ĠGolden": 18288, + "ACHE": 18289, + "Ġworried": 18290, + "azi": 18291, + "Ear": 18292, + "Take": 18293, + "(fp": 18294, + "burgh": 18295, + "_Data": 18296, + "gres": 18297, + "ĠOnt": 18298, + "pus": 18299, + "Ġtransparent": 18300, + "Ġpocket": 18301, + "Ġram": 18302, + "igrations": 18303, + ".čĊčĊ": 18304, + "Ġ[(": 18305, + "Ġadopted": 18306, + "Ġreportedly": 18307, + "ĠDream": 18308, + "Ġ}));Ċ": 18309, + "losing": 18310, + "Ġteeth": 18311, + "ĠBooks": 18312, + "\",&": 18313, + "enny": 18314, + "LEMENT": 18315, + "Ġgel": 18316, + "ĠPlant": 18317, + "437": 18318, + "!âĢĿ": 18319, + ".host": 18320, + "ĠReply": 18321, + "376": 18322, + "rength": 18323, + "Ġrecognition": 18324, + "Ġ}}>Ċ": 18325, + "LA": 18326, + "Ġmirror": 18327, + "Ġassistant": 18328, + "(device": 18329, + "Ġspiritual": 18330, + "builder": 18331, + "§": 18332, + "Ġoutr": 18333, + "Ġtt": 18334, + "ĠPER": 18335, + "Ġradical": 18336, + "Methods": 18337, + "Ġpace": 18338, + "udy": 18339, + "Ġgut": 18340, + "ĠGreek": 18341, + "Ġnonatomic": 18342, + "ĠPaper": 18343, + "_GPIO": 18344, + "Ġobst": 18345, + ".Ad": 18346, + "vironments": 18347, + "ĠSov": 18348, + "356": 18349, + "(con": 18350, + "ĠTransaction": 18351, + ".assign": 18352, + "ĉcatch": 18353, + "elter": 18354, + "Ġbitcoin": 18355, + "_GR": 18356, + "ĠčĊ": 18473, + "metic": 18474, + "Ġtransformation": 18475, + "åı·": 18476, + "Ġrgb": 18477, + "istributions": 18478, + "Ġimplicit": 18479, + "/in": 18480, + "destination": 18481, + "аÑĤÑĮ": 18482, + "Zero": 18483, + "Ġunset": 18484, + "920": 18485, + ".where": 18486, + ".go": 18487, + "Ġformation": 18488, + "Ġdeclaration": 18489, + "()čĊčĊ": 18490, + "ĠExpl": 18491, + "ĉĉĉĠĠ": 18492, + "/pro": 18493, + ".JSON": 18494, + "441": 18495, + "Ġdesk": 18496, + ".substr": 18497, + "//----------------------------------------------------------------------------": 18498, + "lyn": 18499, + "pson": 18500, + "407": 18501, + "disable": 18502, + "ĠFunc": 18503, + "ĉAssert": 18504, + "ĠMARK": 18505, + "Ġdefeat": 18506, + "Ġblind": 18507, + "Ġconstants": 18508, + "362": 18509, + ".headers": 18510, + "UILD": 18511, + "Ġexpenses": 18512, + "Pixel": 18513, + "Ġhr": 18514, + "Ġfel": 18515, + "ĠEastern": 18516, + "424": 18517, + "490": 18518, + "_del": 18519, + "357": 18520, + "ĠCub": 18521, + "Ġsq": 18522, + "ĉcount": 18523, + "ĠDirectory": 18524, + "Ġexclus": 18525, + "Ġhistoric": 18526, + "Ġ------------------------------------------------": 18527, + "Ġcomposition": 18528, + "ĠdataGridView": 18529, + "ĠBurn": 18530, + "ĠBC": 18531, + "Master": 18532, + "Ġspawn": 18533, + "Ġbearing": 18534, + ".SetActive": 18535, + "ilo": 18536, + "Ġgallery": 18537, + "Ġfounded": 18538, + "Ġavailability": 18539, + ".sqrt": 18540, + "Ġpes": 18541, + "ĠDOM": 18542, + "mate": 18543, + "Oct": 18544, + "Ġmatched": 18545, + "itivity": 18546, + "Ġanxiety": 18547, + ".price": 18548, + "ĠInstant": 18549, + "ìĬ": 18550, + "Ġtut": 18551, + "ICollection": 18552, + ".shared": 18553, + "_sql": 18554, + "tbl": 18555, + "library": 18556, + "_destroy": 18557, + "ermal": 18558, + "ĠNotes": 18559, + "ĠEin": 18560, + "Ġsouthern": 18561, + "ĠOTHERWISE": 18562, + "Ġmacro": 18563, + ".lower": 18564, + "cls": 18565, + "ContentView": 18566, + ".link": 18567, + "constant": 18568, + "ĠBes": 18569, + "Ġsomebody": 18570, + "nb": 18571, + "399": 18572, + "\">{": 18573, + "(local": 18574, + ".....": 18575, + "ĠNull": 18576, + "mx": 18577, + "Ġç": 18578, + "Ġpause": 18579, + "-----------": 18580, + "_MO": 18581, + "ĠCM": 18582, + "ĠforKey": 18583, + "ĠDVD": 18584, + "Ġclosest": 18585, + "_DEVICE": 18586, + "ĠStephen": 18587, + "ĠBBC": 18588, + "ĠTravel": 18589, + "Paint": 18590, + "ĠResults": 18591, + "ĠRule": 18592, + "Ġtp": 18593, + "Ġratings": 18594, + "cin": 18595, + "csv": 18596, + ">/": 18597, + "ĠGOP": 18598, + "lad": 18599, + "ĠÑĢ": 18600, + "ĠindexPath": 18601, + "matrix": 18602, + "=f": 18603, + "arsed": 18604, + "Ġ});": 18605, + "ĠCos": 18606, + "ĠScore": 18607, + "Ġtak": 18608, + "ĠESP": 18609, + "ĠINC": 18610, + "_NULL": 18611, + "-flex": 18612, + "\"][": 18613, + "into": 18614, + "eland": 18615, + "Authorization": 18616, + "_FALSE": 18617, + "Ġgate": 18618, + "Ġvid": 18619, + "istent": 18620, + "TIME": 18621, + "Ġrewrite": 18622, + "Ġtie": 18623, + "Ġarchive": 18624, + "511": 18625, + ".events": 18626, + ".getParameter": 18627, + "ĠPermission": 18628, + "Ġprogramme": 18629, + "Ġé": 18630, + "jud": 18631, + "Ġcameras": 18632, + "338": 18633, + "349": 18634, + "(sys": 18635, + "ĠSyrian": 18636, + "Ġimprovements": 18637, + "Ġhip": 18638, + "Ġsuicide": 18639, + "Ġscholar": 18640, + "Ġcompatible": 18641, + "022": 18642, + "remote": 18643, + ".down": 18644, + "FUNCTION": 18645, + "Ġmanaging": 18646, + "ĠUIKit": 18647, + ".raw": 18648, + ">>>>": 18649, + "371": 18650, + "Ġdemands": 18651, + "ellite": 18652, + "Ġdent": 18653, + "ĠMicro": 18654, + "åıĸ": 18655, + "'][$": 18656, + "ĠIE": 18657, + "imension": 18658, + "Ġtrem": 18659, + "630": 18660, + "Ġgained": 18661, + ".with": 18662, + ".ok": 18663, + "hou": 18664, + "Ġbom": 18665, + "ampaign": 18666, + "Ġjoining": 18667, + "fish": 18668, + "ĠaddSubview": 18669, + "860": 18670, + "Ġnorthern": 18671, + ".cor": 18672, + "oret": 18673, + "Die": 18674, + "inish": 18675, + "_comp": 18676, + "Ġattended": 18677, + "Ġcollapse": 18678, + "ĠSS": 18679, + "acent": 18680, + "_EQUAL": 18681, + "ĠDeep": 18682, + "RGB": 18683, + "ĉtest": 18684, + "olves": 18685, + "uset": 18686, + "UnityEngine": 18687, + "writer": 18688, + "Resolver": 18689, + ",%": 18690, + "ifference": 18691, + "_remove": 18692, + "onda": 18693, + "Ġfemme": 18694, + "385": 18695, + "decode": 18696, + "Branch": 18697, + "Ġflush": 18698, + "Ġinnovative": 18699, + "Tests": 18700, + "Ġ['./": 18701, + "Ġcovering": 18702, + ".admin": 18703, + "ultipart": 18704, + "(lambda": 18705, + "namespace": 18706, + "ĠSport": 18707, + "Ġ!(": 18708, + "acles": 18709, + "Ġdepression": 18710, + "ĠKong": 18711, + "570": 18712, + "Ġpert": 18713, + "ĠConn": 18714, + "ĠOtherwise": 18715, + "/home": 18716, + "supported": 18717, + "Ġpink": 18718, + "Ġinvited": 18719, + "ños": 18720, + "_enabled": 18721, + "Ġ-Ċ": 18722, + "FW": 18723, + "eners": 18724, + "ĠMY": 18725, + "Ġsuggestions": 18726, + "Canvas": 18727, + "Ġfer": 18728, + "ĠMarketing": 18729, + "@Test": 18730, + "untu": 18731, + "ĠVen": 18732, + "ĠCou": 18733, + "ivals": 18734, + "Donald": 18735, + "limited": 18736, + "ĉĉĉĉĉĉĊ": 18737, + "Ġanalyst": 18738, + "(entry": 18739, + "Ġrepresentative": 18740, + "_attributes": 18741, + "Ġfur": 18742, + ".hide": 18743, + "resp": 18744, + "adores": 18745, + "rides": 18746, + "ĠJosh": 18747, + "robot": 18748, + "ĠNAT": 18749, + "Ġsesso": 18750, + "Ġintegrated": 18751, + ":true": 18752, + "parts": 18753, + "Ġstupid": 18754, + ":event": 18755, + "@endsection": 18756, + "Ġpu": 18757, + ".Table": 18758, + "ĠYii": 18759, + "`;ĊĊ": 18760, + "Ġclang": 18761, + "=\"\">": 18762, + "engan": 18763, + "_parameters": 18764, + ".internal": 18765, + "ĠModern": 18766, + "Ġmetric": 18767, + "Ġsemi": 18768, + "={{Ċ": 18769, + "707": 18770, + ".amazon": 18771, + "ĠBB": 18772, + "ainty": 18773, + "viewport": 18774, + "367": 18775, + "ĠstartActivity": 18776, + "dispatch": 18777, + "*****": 18778, + "Ġflav": 18779, + "ifferent": 18780, + "382": 18781, + "[this": 18782, + "Ġstake": 18783, + "Ġargued": 18784, + "viously": 18785, + ".work": 18786, + "ĠOak": 18787, + "Old": 18788, + "(async": 18789, + "notes": 18790, + "Ġflip": 18791, + "Ġdisag": 18792, + "ĠTE": 18793, + "ĉerror": 18794, + "<'": 18795, + "Ġ»ĊĊ": 18796, + "Ġfiltered": 18797, + "ĠMach": 18798, + "Ġhung": 18799, + "_dump": 18800, + "_samples": 18801, + "-dismiss": 18802, + "Ġray": 18803, + "Implemented": 18804, + "DK": 18805, + "Ġjed": 18806, + "090": 18807, + "Ġbreaks": 18808, + "Ġfits": 18809, + ".gr": 18810, + "ĠZero": 18811, + "oro": 18812, + "Ġequally": 18813, + "Ġ'[": 18814, + "Ġconcerning": 18815, + "<": 18914, + "Ġpromot": 18915, + "Ġincl": 18916, + "_only": 18917, + "를": 18918, + "ĠAttorney": 18919, + "-date": 18920, + "Ġlandscape": 18921, + "Ġfu": 18922, + "SY": 18923, + ".prop": 18924, + "ĠArr": 18925, + "pag": 18926, + "ParallelGroup": 18927, + "':čĊ": 18928, + "Ġlogs": 18929, + "aunch": 18930, + "unci": 18931, + "nama": 18932, + "TableCell": 18933, + "issues": 18934, + ".{": 18935, + "ecurity": 18936, + "_exec": 18937, + "olds": 18938, + "Ġhosts": 18939, + "Ġproto": 18940, + "_import": 18941, + "_sort": 18942, + "ĠBow": 18943, + "ĠNormal": 18944, + "ĠFarm": 18945, + ".createParallelGroup": 18946, + "Rotation": 18947, + ".err": 18948, + "Ġpleased": 18949, + "itage": 18950, + ".Wh": 18951, + "ĉĉĠĠĠĠ": 18952, + "MR": 18953, + "ĠMORE": 18954, + "ĠNatural": 18955, + "_transform": 18956, + "BASE": 18957, + "eneral": 18958, + "utdown": 18959, + ".commons": 18960, + "WT": 18961, + "Ġaan": 18962, + ".Result": 18963, + "dog": 18964, + "Ġclicking": 18965, + "),ĊĊ": 18966, + "#line": 18967, + "Operator": 18968, + "Ġciv": 18969, + "Ġmerg": 18970, + "obuf": 18971, + "ngthen": 18972, + "Ġ[{": 18973, + "Ġcancell": 18974, + "trigger": 18975, + ".:": 18976, + "WORK": 18977, + "declare": 18978, + "Ġdecrease": 18979, + "ÅĽci": 18980, + "loom": 18981, + ".None": 18982, + "ĠMI": 18983, + "ĠJason": 18984, + "Ġhealthcare": 18985, + "iamond": 18986, + "sylvania": 18987, + "*x": 18988, + "ĠRa": 18989, + "[b": 18990, + "Ġprinting": 18991, + "phabet": 18992, + "ĠLabour": 18993, + "opper": 18994, + "Ġzijn": 18995, + "-target": 18996, + "_FUNCTION": 18997, + "Ġoct": 18998, + "ениÑı": 18999, + "åľ¨": 19000, + "Ġwestern": 19001, + "Ġcomputers": 19002, + "ĠRET": 19003, + "HashMap": 19004, + "[String": 19005, + "getValue": 19006, + "_DATE": 19007, + ".Next": 19008, + "ĠFif": 19009, + "él": 19010, + "icked": 19011, + "æİ": 19012, + "-MM": 19013, + "Ġ{ĊĊĊ": 19014, + "Ġcontacts": 19015, + "Ġdigits": 19016, + "Produ": 19017, + "Ġunusual": 19018, + "Ġrapidly": 19019, + "tures": 19020, + "Ġangry": 19021, + "cancel": 19022, + "xxxx": 19023, + "_parser": 19024, + "idity": 19025, + "_PREFIX": 19026, + "710": 19027, + "Ġmehr": 19028, + "Ġrarely": 19029, + "ethe": 19030, + "opes": 19031, + "Ġ%.": 19032, + "works": 19033, + "Ġtheta": 19034, + "Ġcontribution": 19035, + "ĠTony": 19036, + "Ġsquad": 19037, + "537": 19038, + "ай": 19039, + "Ġîn": 19040, + "there": 19041, + "outed": 19042, + "ĉq": 19043, + "ĻĤ": 19044, + "good": 19045, + "LI": 19046, + "页": 19047, + "ĠLiving": 19048, + "izabeth": 19049, + "Ġkt": 19050, + "ĠDallas": 19051, + "]],Ċ": 19052, + "Ġ/>ĊĊ": 19053, + "Ġraising": 19054, + "/router": 19055, + "_game": 19056, + "368": 19057, + "ĠCUR": 19058, + "zens": 19059, + ".es": 19060, + "ĠfontWeight": 19061, + "(func": 19062, + "notification": 19063, + "Ġ'../../../": 19064, + "Ġblame": 19065, + "ãĢĤĊĊĊĊ": 19066, + "anco": 19067, + "980": 19068, + "Identity": 19069, + "follow": 19070, + "Ġarts": 19071, + "xs": 19072, + "Ġofficially": 19073, + "ĠStudio": 19074, + "Ġrecommendations": 19075, + "Ġlocale": 19076, + "Ġamateur": 19077, + "ĠEnable": 19078, + "Ġcaps": 19079, + ".End": 19080, + "388": 19081, + "-add": 19082, + "_gshared": 19083, + "ĠCT": 19084, + "Force": 19085, + "ĊĠĠĠĠĠĠĠĠĠĠĠĠĊ": 19086, + "Ġorange": 19087, + "Ġlp": 19088, + "Ġanswered": 19089, + ".Grid": 19090, + "Ġdual": 19091, + "Ġstrategic": 19092, + "Ġnobody": 19093, + "Ġfatal": 19094, + "_est": 19095, + "(el": 19096, + "Ġìł": 19097, + "ĠBudd": 19098, + "AIT": 19099, + "_factor": 19100, + "-one": 19101, + "ĠHAVE": 19102, + "\"čĊčĊ": 19103, + "760": 19104, + "Prof": 19105, + "Ġär": 19106, + "strings": 19107, + "Ġdirty": 19108, + "ĠFace": 19109, + "ĠBegin": 19110, + "ĠBus": 19111, + "Ġwis": 19112, + "åŃĹ": 19113, + "Ġspeaker": 19114, + "Ġcarrier": 19115, + "ĠOm": 19116, + "Ġhadn": 19117, + "Allow": 19118, + "::__": 19119, + "Ġverb": 19120, + "ĠComplete": 19121, + "ĠEasy": 19122, + "Ġbills": 19123, + "ĠĠĊĊ": 19124, + "Vertical": 19125, + "Ġpron": 19126, + "ĠDefine": 19127, + "Ġlookup": 19128, + "variables": 19129, + "Ġpandas": 19130, + "umes": 19131, + "Ġinnoc": 19132, + "ĠsetUp": 19133, + "ĠChampionship": 19134, + "artist": 19135, + "ĠCType": 19136, + "Foundation": 19137, + "à¹Ī": 19138, + "ĠSetup": 19139, + "428": 19140, + "Ġrecipes": 19141, + "ĠUIColor": 19142, + "ĠFight": 19143, + "Ġauthorized": 19144, + "_click": 19145, + "990": 19146, + "_success": 19147, + "angan": 19148, + "ĠMountain": 19149, + "ĠDoctor": 19150, + "Ġegg": 19151, + "ĠMedicine": 19152, + "cles": 19153, + "`.Ċ": 19154, + "[int": 19155, + "dashboard": 19156, + "ĠAppro": 19157, + "-dr": 19158, + "Ġproduces": 19159, + "Ġrental": 19160, + "Ġreload": 19161, + "381": 19162, + "Ġarrival": 19163, + "spot": 19164, + "Ġundert": 19165, + "378": 19166, + "Ġequipped": 19167, + "Ġproved": 19168, + "Ġcenters": 19169, + "Ġdefines": 19170, + "also": 19171, + "Ġopacity": 19172, + "ĠUnfortunately": 19173, + "ĠIllinois": 19174, + "Ġне": 19175, + "ĠTemple": 19176, + "ĠTrail": 19177, + "ĠKelly": 19178, + "Ġmeasurement": 19179, + "Ġseparated": 19180, + "-circle": 19181, + "Hey": 19182, + "ĠREAD": 19183, + "igits": 19184, + "Ġib": 19185, + "ĠMOD": 19186, + "attery": 19187, + "аз": 19188, + "Ġvend": 19189, + "енÑĤ": 19190, + "ĠHttpClient": 19191, + "359": 19192, + "safe": 19193, + "_ASS": 19194, + "icit": 19195, + "ĠConstruct": 19196, + "ĠClo": 19197, + "ĠSix": 19198, + "_TOKEN": 19199, + "(block": 19200, + "Ġwarned": 19201, + "/*!": 19202, + "!Ċ": 19296, + "Ġinnovation": 19297, + "_\"": 19298, + "Ġ);čĊčĊ": 19299, + "Ġspots": 19300, + "Ġchoosing": 19301, + ".cs": 19302, + "Ġflexible": 19303, + "UInt": 19304, + "435": 19305, + "930": 19306, + "Ġscratch": 19307, + "-al": 19308, + "Ġfestival": 19309, + "Ġoutstanding": 19310, + "================================================": 19311, + "Mean": 19312, + "ĠOregon": 19313, + "symbol": 19314, + ".account": 19315, + "dney": 19316, + "'''": 19317, + "!\",": 19318, + "901": 19319, + "Ġparticle": 19320, + "Ãĥ": 19321, + "[MAX": 19322, + "IVER": 19323, + "ERENCE": 19324, + "NSMutable": 19325, + "ĠColumbia": 19326, + "_ĊĊ": 19327, + ".fr": 19328, + "Ġcogn": 19329, + "VR": 19330, + "ĠMethods": 19331, + "ĠMade": 19332, + "ĠBR": 19333, + "ĠElse": 19334, + "Ġeggs": 19335, + "Ġswing": 19336, + "ĠInv": 19337, + "Ġdiseases": 19338, + "Ġfirms": 19339, + "Ġlemma": 19340, + "}`);Ċ": 19341, + "lings": 19342, + "Ġgym": 19343, + "uminum": 19344, + ".Trim": 19345, + "Mem": 19346, + "Ġcriticism": 19347, + "ibernate": 19348, + "_TX": 19349, + "ioni": 19350, + "Ġguidance": 19351, + "Ġrepeatedly": 19352, + "Ġsupplier": 19353, + "Ġpainting": 19354, + "864": 19355, + ".Fragment": 19356, + "edException": 19357, + "Ġwiring": 19358, + "Ġcourts": 19359, + "WEB": 19360, + "æľī": 19361, + "\\.": 19362, + "illance": 19363, + "Ġbrows": 19364, + "ĠPattern": 19365, + "PLICATION": 19366, + "ĠSummer": 19367, + "Chain": 19368, + "Ġcute": 19369, + "mercial": 19370, + "Ġdil": 19371, + "ĠFranklin": 19372, + "ĉglobal": 19373, + "INCLUDING": 19374, + "history": 19375, + "Ġlst": 19376, + "Qt": 19377, + "SDL": 19378, + "alia": 19379, + "iere": 19380, + "(...": 19381, + "ĉcin": 19382, + "iffs": 19383, + "velope": 19384, + "ĠRoot": 19385, + "cluster": 19386, + "UserName": 19387, + "igne": 19388, + "()Ċ": 19485, + "Ġapplying": 19486, + "Ġpromised": 19487, + "Ġox": 19488, + "ncia": 19489, + "ĠValidation": 19490, + "orts": 19491, + "_cur": 19492, + "elect": 19493, + "eye": 19494, + "(Data": 19495, + "Ġreporter": 19496, + "ĠBuff": 19497, + "395": 19498, + "Ġsr": 19499, + "Ġ\";": 19500, + "icky": 19501, + "Ġtempor": 19502, + "SN": 19503, + "Ġresident": 19504, + "pires": 19505, + "ysical": 19506, + "Ġendorse": 19507, + "ĠSong": 19508, + "isEmpty": 19509, + "leet": 19510, + "_util": 19511, + "Ġdistingu": 19512, + "ĠTalk": 19513, + "ĠMot": 19514, + "(default": 19515, + ".Arg": 19516, + "gorithms": 19517, + "_words": 19518, + "immer": 19519, + "_reset": 19520, + "family": 19521, + "WW": 19522, + "Ġsavings": 19523, + "ĠâĢĿ": 19524, + "_enable": 19525, + "sidebar": 19526, + "Running": 19527, + "Ġali": 19528, + "Ġtestim": 19529, + "Ġwarnings": 19530, + "ĠChem": 19531, + "ĠExit": 19532, + "Ġfounder": 19533, + "pector": 19534, + "Ġrm": 19535, + "_dataset": 19536, + "ĠDas": 19537, + "Ġhan": 19538, + "Getty": 19539, + "ál": 19540, + "Ġny": 19541, + "Ġpoverty": 19542, + "Ġresulted": 19543, + ".by": 19544, + "ĠVisit": 19545, + "Ġobtaining": 19546, + "/'.$": 19547, + "ĠĠĠĠĠĠĠĠĠĠĠĊ": 19548, + "shall": 19549, + "_LEFT": 19550, + "UIImage": 19551, + "_Name": 19552, + "have": 19553, + "ĠNob": 19554, + "lr": 19555, + "-footer": 19556, + "Ġnaked": 19557, + "ĠGarden": 19558, + "\\Facades": 19559, + "Ġgraduate": 19560, + "417": 19561, + "Ġfranchise": 19562, + "plane": 19563, + "Ġcontributions": 19564, + "ĠstringWith": 19565, + "Ġcrypto": 19566, + "Ġmovements": 19567, + "athers": 19568, + "Ġlifetime": 19569, + "Ġcommunicate": 19570, + "jar": 19571, + "ĠFragment": 19572, + "_IF": 19573, + "ĠNavy": 19574, + "ĠFigure": 19575, + "Ġsimulation": 19576, + "_stop": 19577, + "Ġreporters": 19578, + "Ġversus": 19579, + "aja": 19580, + "Ġα": 19581, + "Ġgovernor": 19582, + "ListItem": 19583, + "Ġsealed": 19584, + ".Background": 19585, + "edi": 19586, + "ashing": 19587, + "Ġlip": 19588, + "ĠIh": 19589, + "merge": 19590, + "Ġnec": 19591, + "024": 19592, + "elocity": 19593, + "ATEG": 19594, + "Ġseeds": 19595, + "Ġfloating": 19596, + "701": 19597, + "_FA": 19598, + "walk": 19599, + "ĉuser": 19600, + "_depth": 19601, + "Ġwage": 19602, + "@app": 19603, + "Nil": 19604, + "([\"": 19605, + "(vector": 19606, + "Ġsecretary": 19607, + "461": 19608, + "ĠjPanel": 19609, + "vez": 19610, + "³³³³": 19611, + "direction": 19612, + "ĠEP": 19613, + "Ġhunt": 19614, + "396": 19615, + "JsonProperty": 19616, + "ĠPORT": 19617, + "]\",": 19618, + "ап": 19619, + "ĠForeign": 19620, + "panic": 19621, + "Ġtrials": 19622, + "ĠAle": 19623, + "Ġrural": 19624, + "-value": 19625, + "authorized": 19626, + "ĠScotland": 19627, + ".drop": 19628, + "ĠMT": 19629, + "ç±": 19630, + "391": 19631, + "rowth": 19632, + "515": 19633, + "FilePath": 19634, + "Ġrecall": 19635, + "ifle": 19636, + "Ġcel": 19637, + "ĠSELECT": 19638, + "kn": 19639, + "_case": 19640, + "Ġcrop": 19641, + "543": 19642, + "sure": 19643, + "pot": 19644, + "ICS": 19645, + "Ġstem": 19646, + "Ġindustries": 19647, + "Put": 19648, + "Ġaber": 19649, + "roadcast": 19650, + "Icons": 19651, + ")\")Ċ": 19652, + "æĪIJåĬŁ": 19653, + "gui": 19654, + "Ġassumed": 19655, + "Ġrx": 19656, + "EA": 19657, + "è§": 19658, + "ELL": 19659, + "Ġdose": 19660, + "Ġine": 19661, + "Ġdeeper": 19662, + "lider": 19663, + "Ġordinary": 19664, + "Ġgolf": 19665, + "605": 19666, + "_IMAGE": 19667, + "ĠNAME": 19668, + "(module": 19669, + "Ġatom": 19670, + "Ġbelt": 19671, + "Ġoffices": 19672, + "506": 19673, + "beta": 19674, + "Ġphilosophy": 19675, + "(JSON": 19676, + "-field": 19677, + "Ġintroduce": 19678, + "Ġconvenience": 19679, + "optim": 19680, + ">\"Ċ": 19681, + "athy": 19682, + "Ġemployer": 19683, + "quate": 19684, + "Ġedited": 19685, + "Arguments": 19686, + "ĠNations": 19687, + "__)": 19688, + "Ġnose": 19689, + "ĠSample": 19690, + "')ĊĊĊ": 19691, + "Ġcake": 19692, + ".getAttribute": 19693, + "HD": 19694, + "392": 19695, + "Modified": 19696, + "445": 19697, + "Ġpredicted": 19698, + "ÅĦ": 19699, + "anie": 19700, + "Sorry": 19701, + "(doc": 19702, + "wind": 19703, + "ieve": 19704, + "Ġprovisions": 19705, + "ATER": 19706, + "OTE": 19707, + "MY": 19708, + ".Autowired": 19709, + "ĠBath": 19710, + "423": 19711, + ".Boolean": 19712, + "Ġbackend": 19713, + ".Mouse": 19714, + "ateral": 19715, + "paper": 19716, + "Const": 19717, + "ĠVR": 19718, + "_entity": 19719, + "_CTRL": 19720, + "ĠProtection": 19721, + "ĠGM": 19722, + "ĠStudy": 19723, + "Ġsoup": 19724, + "otime": 19725, + "'use": 19726, + "]\"": 19727, + "/users": 19728, + "aug": 19729, + "ĠHong": 19730, + "_norm": 19731, + "ãģ¨": 19732, + "Ġsecre": 19733, + "(Build": 19734, + "ĠContract": 19735, + "olas": 19736, + "Ġsauce": 19737, + "Ġaggressive": 19738, + "Ġracial": 19739, + "character": 19740, + "@@": 19741, + "Ġcompile": 19742, + "ĠVoid": 19743, + "_rem": 19744, + "_memory": 19745, + "348": 19746, + "kk": 19747, + "Ġmic": 19748, + "Same": 19749, + "Utility": 19750, + "ĠHtml": 19751, + "ĠXml": 19752, + "Ready": 19753, + "Ġgall": 19754, + "Ġallegedly": 19755, + "ĉĉĉĉĠĠĠ": 19756, + "ĠMetal": 19757, + "ĠPersonal": 19758, + "ĠborderRadius": 19759, + "rxjs": 19760, + "objects": 19761, + "Ġwanting": 19762, + "Ġbowl": 19763, + "vendor": 19764, + "offsetof": 19765, + "ĠRs": 19766, + "ĠRating": 19767, + "Ġrally": 19768, + "_NODE": 19769, + "418": 19770, + "ĠMix": 19771, + "Ġadvertis": 19772, + "485": 19773, + "667": 19774, + "Ġnarrative": 19775, + "sal": 19776, + "Ġmc": 19777, + "SError": 19778, + "Ġfingers": 19779, + "Ġaccompany": 19780, + "Ġtired": 19781, + "Ġstride": 19782, + "Ġgui": 19783, + "elist": 19784, + "Locale": 19785, + "Ġreleases": 19786, + "iking": 19787, + "Ġanger": 19788, + ")))ĊĊ": 19789, + "allest": 19790, + "Summary": 19791, + "(O": 19792, + "(for": 19793, + "Ġbasketball": 19794, + "Ġroads": 19795, + "ĠInstall": 19796, + "ĠFab": 19797, + "itmap": 19798, + "475": 19799, + "Ġ))Ċ": 19800, + "Ġintersection": 19801, + "ighbor": 19802, + "ĠBry": 19803, + "ĠHERE": 19804, + "Software": 19805, + "elfare": 19806, + "acs": 19807, + "622": 19808, + "Ġtrailer": 19809, + ".getClass": 19810, + "chars": 19811, + "Ġregulation": 19812, + "Ġrefers": 19813, + "Ġdestruction": 19814, + "Ġcontinuous": 19815, + "ĠAustin": 19816, + "é¢": 19817, + "akan": 19818, + ".window": 19819, + "ĠTemplates": 19820, + "Ġabsence": 19821, + ":n": 19822, + "Ġdisorder": 19823, + "flash": 19824, + "Ġdelet": 19825, + "boards": 19826, + "ĠĠĉ": 19827, + "ROP": 19828, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 19829, + "Ġacqu": 19830, + "Ġlawsuit": 19831, + "ĠReviews": 19832, + "Ġgarage": 19833, + "timer": 19834, + "Ġej": 19835, + "ĠRectangle": 19836, + "Ġflowers": 19837, + "398": 19838, + "ilst": 19839, + "ĠInstance": 19840, + "Super": 19841, + "det": 19842, + "disposing": 19843, + "ĠES": 19844, + "ĠIC": 19845, + "vere": 19846, + "Sk": 19847, + "_channels": 19848, + "puted": 19849, + "/null": 19850, + "nnen": 19851, + "431": 19852, + "ĠGallery": 19853, + "_global": 19854, + "Authentication": 19855, + "ĠRank": 19856, + "Ġblocked": 19857, + "Ġcalm": 19858, + "market": 19859, + "ĉval": 19860, + "Ġaug": 19861, + "period": 19862, + "ĠConstant": 19863, + "Ġ?>\">Ċ": 19864, + "Ġlobby": 19865, + "pal": 19866, + "379": 19867, + "Ġsink": 19868, + "508": 19869, + "iah": 19870, + "С": 19871, + "urname": 19872, + "Ġconver": 19873, + "Ġinvestigate": 19874, + "Christ": 19875, + "Hub": 19876, + "ĠIND": 19877, + "ĠPed": 19878, + "uras": 19879, + "ĉurl": 19880, + "ĠTro": 19881, + "Ġpreferences": 19882, + "Ġguaranteed": 19883, + "`ĊĊ": 19884, + "Ġportions": 19885, + "Ġevalu": 19886, + "'>;ĊĊ": 19985, + ".AutoScaleMode": 19986, + "Ġcats": 19987, + "465": 19988, + "Ġregistry": 19989, + "ulus": 19990, + "FI": 19991, + "payload": 19992, + "-search": 19993, + "Ġstaying": 19994, + "acious": 19995, + "Decoration": 19996, + "Review": 19997, + "Inf": 19998, + "Keep": 19999, + "itis": 20000, + ",String": 20001, + "Coord": 20002, + "Ġpero": 20003, + "Sex": 20004, + "ĠAtlanta": 20005, + "uesta": 20006, + "Argb": 20007, + ">*": 20008, + "}_": 20009, + "Footer": 20010, + "Ġemployed": 20011, + "_bound": 20012, + "vide": 20013, + ".func": 20014, + "$scope": 20015, + "Ġspo": 20016, + "ĠAnal": 20017, + "ounced": 20018, + "around": 20019, + "Ġrestriction": 20020, + "Ġshops": 20021, + "åĢ": 20022, + "ĠLatin": 20023, + "-col": 20024, + "Ġbarely": 20025, + "ĠEuro": 20026, + "Er": 20027, + "Ġfaire": 20028, + "_distance": 20029, + "_unlock": 20030, + "Quote": 20031, + "IVATE": 20032, + "ĠåĪ": 20033, + "Ġaimed": 20034, + "ĠRetrie": 20035, + ".iter": 20036, + "Ġwrapped": 20037, + "Ġagreements": 20038, + "strument": 20039, + "(product": 20040, + "Ġstudied": 20041, + ".setValue": 20042, + "Ġye": 20043, + "ĠCache": 20044, + "MBOL": 20045, + "Ġquarterback": 20046, + "Ġsyntax": 20047, + ".getElementsBy": 20048, + ".version": 20049, + "website": 20050, + "Runner": 20051, + "_single": 20052, + "ativ": 20053, + "ĠAltern": 20054, + "ĠBeautiful": 20055, + "rightarrow": 20056, + "Ġdiversity": 20057, + "plash": 20058, + "(co": 20059, + ".Fill": 20060, + "Ġtyping": 20061, + "387": 20062, + "023": 20063, + "Ġclar": 20064, + "Hit": 20065, + "OO": 20066, + "acco": 20067, + "507": 20068, + "worth": 20069, + "Ġscripts": 20070, + "ĠMuslims": 20071, + "ĠLL": 20072, + "erving": 20073, + "(boolean": 20074, + "Ġbaseball": 20075, + "ĠCAN": 20076, + "394": 20077, + "044": 20078, + "MAIL": 20079, + "depend": 20080, + "Ġrespective": 20081, + "Ġconstexpr": 20082, + ".*;ĊĊ": 20083, + "']))Ċ": 20084, + "Ġyard": 20085, + "Ġidentical": 20086, + "ifecycle": 20087, + "USH": 20088, + "upiter": 20089, + ".validate": 20090, + "cli": 20091, + "ISTER": 20092, + "Indicator": 20093, + "Fail": 20094, + "Ġdemocracy": 20095, + ".var": 20096, + "Ġsatisfied": 20097, + "-------------": 20098, + "encer": 20099, + "hor": 20100, + "Ġrounds": 20101, + "DAO": 20102, + "oa": 20103, + "Ġflask": 20104, + "=c": 20105, + "[]Ċ": 20106, + "/dist": 20107, + "Ġparte": 20108, + "Ġconfirmation": 20109, + "eron": 20110, + "aware": 20111, + "": 20112, + "Ġdependencies": 20113, + "ĠVideos": 20114, + "-row": 20115, + "Ġ**/Ċ": 20116, + "Ġnou": 20117, + "Ġhover": 20118, + "æŀ": 20119, + "Ġnin": 20120, + "ĠUSD": 20121, + "Mac": 20122, + "_Load": 20123, + "Ġoutcomes": 20124, + "_socket": 20125, + "Ġqueries": 20126, + "wm": 20127, + "592": 20128, + "Ġhitting": 20129, + "inux": 20130, + "Mich": 20131, + "udge": 20132, + "ATAB": 20133, + "Ġvulnerable": 20134, + "ä¾": 20135, + "Ġportfolio": 20136, + ":YES": 20137, + "ĉmap": 20138, + "Bound": 20139, + "Ġiteration": 20140, + "incess": 20141, + "Ġactors": 20142, + "ĠQual": 20143, + "_clean": 20144, + "ãĢijãĢIJ": 20145, + "MSG": 20146, + "Green": 20147, + "ĠOfficer": 20148, + "Ġsmoking": 20149, + ">',": 20150, + "ĠFlo": 20151, + "++;": 20152, + "433": 20153, + "olygon": 20154, + "Ġbulk": 20155, + "Ġdrama": 20156, + "Ġexceptions": 20157, + "osed": 20158, + "Ġ+čĊ": 20159, + "Ġlegacy": 20160, + "CV": 20161, + "Ġcontributed": 20162, + "ĠTerms": 20163, + "Ġbt": 20164, + "434": 20165, + "Ġuntuk": 20166, + "Ġalien": 20167, + "===Ċ": 20168, + "ĉVector": 20169, + "Ġls": 20170, + "Online": 20171, + ".facebook": 20172, + "numeric": 20173, + "ockets": 20174, + "Aut": 20175, + "bury": 20176, + "-redux": 20177, + "ĠRedistributions": 20178, + "GLOBALS": 20179, + "urrencies": 20180, + "Ġtons": 20181, + "âĢĻ,": 20182, + "Ġê": 20183, + "(col": 20184, + "ĠSymbol": 20185, + "Ġstayed": 20186, + "ĠML": 20187, + "Ġmunicip": 20188, + "Ġsexo": 20189, + "Sen": 20190, + "nr": 20191, + "Ġgains": 20192, + "Ġshortly": 20193, + ".Menu": 20194, + "ý": 20195, + "KNOWN": 20196, + "Ġoperators": 20197, + "-V": 20198, + "ĠPatrick": 20199, + "/add": 20200, + "_CO": 20201, + "iration": 20202, + "(post": 20203, + "Posts": 20204, + "/_": 20205, + "Ġplug": 20206, + "Ġintellectual": 20207, + "Ġmetab": 20208, + "Ġpregnancy": 20209, + "ĠPremier": 20210, + "nm": 20211, + "Ġprediction": 20212, + "606": 20213, + "ĠMinistry": 20214, + "Three": 20215, + "valuate": 20216, + "ĠMini": 20217, + "bu": 20218, + "оз": 20219, + "\";čĊ": 20679, + "ĠSav": 20680, + ".Bold": 20681, + "Ġenables": 20682, + "ĉtmp": 20683, + "Ġmanually": 20684, + "ĠSqu": 20685, + "userid": 20686, + ".function": 20687, + ".cache": 20688, + "LOPT": 20689, + ".Services": 20690, + "588": 20691, + "ddit": 20692, + "tim": 20693, + ">>": 20761, + "station": 20762, + "lore": 20763, + "atype": 20764, + "ishop": 20765, + "/****************************************************************": 20766, + "521": 20767, + "ComboBox": 20768, + "Ġvacation": 20769, + "Ġinitiative": 20770, + "ĠdefaultValue": 20771, + "770": 20772, + "concat": 20773, + "ĠKh": 20774, + "632": 20775, + "ĠWelcome": 20776, + "izedName": 20777, + "Migration": 20778, + "Ġgradient": 20779, + "Hot": 20780, + "Ġhardly": 20781, + "elo": 20782, + "ĠStudents": 20783, + "Ġloose": 20784, + "730": 20785, + "atz": 20786, + ".Send": 20787, + "'/": 20788, + "Ġuniversal": 20789, + "Ġenterprise": 20790, + "Ġregex": 20791, + "Ġvisitor": 20792, + "ĠFly": 20793, + "Seq": 20794, + "à¸Ļ": 20795, + "ĠVisual": 20796, + "Ġlibraries": 20797, + "atoes": 20798, + "Payment": 20799, + "447": 20800, + "Ġpent": 20801, + "Ġgathered": 20802, + "VRTX": 20803, + "ĠDM": 20804, + "Split": 20805, + "Ġletting": 20806, + "ÐĿ": 20807, + "_errors": 20808, + "epoch": 20809, + "PARAM": 20810, + "cu": 20811, + "ÑģÑĤв": 20812, + "olutions": 20813, + "Editing": 20814, + "fonts": 20815, + "Ġallocated": 20816, + "ĠBased": 20817, + "(Y": 20818, + "ĠJudge": 20819, + "Ġbrothers": 20820, + "FILES": 20821, + "ço": 20822, + "531": 20823, + "wb": 20824, + "_PI": 20825, + "'^": 20826, + "Ġsword": 20827, + ".services": 20828, + "Ġnl": 20829, + "Tim": 20830, + "igg": 20831, + "ĠMoore": 20832, + "Ġcryptoc": 20833, + "åĩº": 20834, + "_posts": 20835, + "otate": 20836, + "?'": 20837, + "....ĊĊ": 20838, + "Ġkl": 20839, + "=\"$": 20840, + "Ġdecoration": 20841, + "ạ": 20842, + "ĠDIRECT": 20843, + "GUI": 20844, + ")=>{Ċ": 20845, + "Ġnewsletter": 20846, + "Ġprecis": 20847, + "(point": 20848, + "ĠEquipment": 20849, + "uty": 20850, + "ĠDave": 20851, + "Ġparticipation": 20852, + "uarios": 20853, + "xit": 20854, + ".As": 20855, + "ETER": 20856, + "orous": 20857, + "Ġshield": 20858, + "[]>": 20859, + "ilitary": 20860, + ".origin": 20861, + "Ġpromotion": 20862, + "Unt": 20863, + "Ġct": 20864, + "TRA": 20865, + "556": 20866, + "ViewHolder": 20867, + "Ġsigma": 20868, + "delta": 20869, + "arehouse": 20870, + "contract": 20871, + "(Vector": 20872, + "721": 20873, + "Ġcompete": 20874, + "/form": 20875, + "/components": 20876, + "Ġnr": 20877, + "ĠIndones": 20878, + "ĠоÑĤ": 20879, + "ĠVolume": 20880, + ".files": 20881, + "(resp": 20882, + "/models": 20883, + "Ġsurf": 20884, + "standard": 20885, + "/o": 20886, + "ĠXCTAssert": 20887, + "VICES": 20888, + ".Code": 20889, + "SED": 20890, + "Ġactivate": 20891, + "Delta": 20892, + "Ġlimitation": 20893, + "rij": 20894, + "Ġpregnant": 20895, + ":^(": 20896, + "Ġsour": 20897, + "pie": 20898, + "803": 20899, + "Ġexpense": 20900, + "ication": 20901, + "ĠLarge": 20902, + "Ġ±": 20903, + "ĠBowl": 20904, + "(models": 20905, + "/N": 20906, + "857": 20907, + "Pa": 20908, + ".reload": 20909, + "Ġwondering": 20910, + "462": 20911, + "Execution": 20912, + "ĉĠĠĠĠĠĠ": 20913, + "ĠGraphics": 20914, + "ĠContin": 20915, + "_job": 20916, + "ĠgetName": 20917, + "ĠMagn": 20918, + "ĠDWORD": 20919, + "mad": 20920, + "Ġnh": 20921, + "features": 20922, + "}\");Ċ": 20923, + "heets": 20924, + "(train": 20925, + "zn": 20926, + "Ġrecruit": 20927, + ".connection": 20928, + "Ġbarrel": 20929, + "Ġsteam": 20930, + "_setting": 20931, + "Ġangular": 20932, + "aneously": 20933, + "Ġbil": 20934, + "ĠNorm": 20935, + "522": 20936, + "(!$": 20937, + "ibt": 20938, + "%(": 20939, + "Ġposit": 20940, + "ĠFather": 20941, + "intendo": 20942, + "565": 20943, + "Live": 20944, + "041": 20945, + "Ġports": 20946, + "Ġmej": 20947, + "Ġlanding": 20948, + "ponder": 20949, + "Ġcod": 20950, + "_HEADER": 20951, + ".Margin": 20952, + "Ġballs": 20953, + "Ġdiscussions": 20954, + "Ġblend": 20955, + "Hex": 20956, + "Ġfarmers": 20957, + "Ġmaintaining": 20958, + "ĠĠĠčĊ": 20959, + "syn": 20960, + "[T": 20961, + "rus": 20962, + "439": 20963, + "uffers": 20964, + "Ġcontributors": 20965, + "_sys": 20966, + ".Debug": 20967, + "Ġconstructed": 20968, + "omes": 20969, + "?id": 20970, + "slider": 20971, + "Ġsuppliers": 20972, + "611": 20973, + "scriber": 20974, + "pes": 20975, + "Ðŀ": 20976, + "\":čĊ": 20977, + "\\Controller": 20978, + "))ĊĊĊ": 20979, + "Ġlua": 20980, + "Multi": 20981, + "ENS": 20982, + "Src": 20983, + "Ġpetition": 20984, + "Ġslave": 20985, + "looking": 20986, + "VERT": 20987, + "ĉvector": 20988, + "Special": 20989, + "hh": 20990, + "anne": 20991, + "ĠNiger": 20992, + "/views": 20993, + "zing": 20994, + "endant": 20995, + "(": 21238, + "544": 21239, + ".Product": 21240, + "Forms": 21241, + "NEW": 21242, + "Pay": 21243, + "ĉboolean": 21244, + "_contact": 21245, + "ĠElectric": 21246, + "skip": 21247, + "Ġwur": 21248, + "Ġchronic": 21249, + "_driver": 21250, + "940": 21251, + "ĠSab": 21252, + "ĠUlt": 21253, + "ĠRad": 21254, + "STATUS": 21255, + "ĠLewis": 21256, + "OB": 21257, + "Ġgifts": 21258, + ".Rec": 21259, + "TRUE": 21260, + "Ġintensity": 21261, + "Marker": 21262, + ".compare": 21263, + "ffic": 21264, + "Cookie": 21265, + "ĠBaby": 21266, + "ĠBigDecimal": 21267, + "ilet": 21268, + "ĠHOLDERS": 21269, + "ĠLady": 21270, + "Ġlung": 21271, + "ĠAlabama": 21272, + "Ġdess": 21273, + "`);Ċ": 21274, + "ĠBuilder": 21275, + "_region": 21276, + "Ġneutral": 21277, + "909": 21278, + "Both": 21279, + "Ġhp": 21280, + "Ġhorn": 21281, + "Ġsegments": 21282, + "ĠEC": 21283, + "\"=>\"": 21284, + "(rec": 21285, + "ĠPi": 21286, + "GM": 21287, + "Ġlaptop": 21288, + "Scalar": 21289, + "463": 21290, + "isd": 21291, + "-dialog": 21292, + "ĠAnderson": 21293, + "Ġmistakes": 21294, + "708": 21295, + "ĠHan": 21296, + "jes": 21297, + "estination": 21298, + "436": 21299, + "Ġpromises": 21300, + "bid": 21301, + "ĠScient": 21302, + "GIN": 21303, + "ĠPerformance": 21304, + "bage": 21305, + ".users": 21306, + "leading": 21307, + "Ġoral": 21308, + "Graphics": 21309, + "488": 21310, + "_PTR": 21311, + "518": 21312, + "hang": 21313, + "Ġinev": 21314, + "processing": 21315, + "Factor": 21316, + "ĠNA": 21317, + "$string": 21318, + "Ġgrounds": 21319, + ".SaveChanges": 21320, + "clock": 21321, + "941": 21322, + "cripcion": 21323, + "ĠNewton": 21324, + "gc": 21325, + ".includes": 21326, + "Ġblast": 21327, + "Ġ'-'": 21328, + "Ġpuede": 21329, + "469": 21330, + ".Session": 21331, + "Ġgrep": 21332, + "_final": 21333, + "ĠGay": 21334, + "ĠGive": 21335, + "iri": 21336, + "-star": 21337, + "ĠUIImage": 21338, + "_epoch": 21339, + "ubb": 21340, + "enth": 21341, + "Ġelite": 21342, + "Ġcampaigns": 21343, + "ĠPorno": 21344, + "_assign": 21345, + "Protocol": 21346, + "ĠBeing": 21347, + "ĠAirport": 21348, + "Ġconventional": 21349, + "ĠWat": 21350, + "ĠCI": 21351, + "ETA": 21352, + "ĠAnthony": 21353, + "Ġtablet": 21354, + "(format": 21355, + "Ġconsistently": 21356, + "ĠIowa": 21357, + "474": 21358, + "Ġavatar": 21359, + "027": 21360, + ".cursor": 21361, + "![": 21362, + "Ġhanging": 21363, + "Her": 21364, + "Such": 21365, + "';ĊĊĊ": 21366, + "orgeous": 21367, + "()==": 21368, + "ĠviewModel": 21369, + "Ġãĥ": 21370, + "Ġels": 21371, + "ĠAgent": 21372, + "Fetch": 21373, + "apor": 21374, + "Ġcx": 21375, + "pread": 21376, + "ĠPier": 21377, + "oeff": 21378, + "616": 21379, + "Sn": 21380, + "890": 21381, + "ĠVirtual": 21382, + "Apr": 21383, + ".White": 21384, + "615": 21385, + "_MOD": 21386, + "ĠPoints": 21387, + "失": 21388, + "Ġgenes": 21389, + "Ġvendor": 21390, + "Ġmainstream": 21391, + "Ċ": 21421, + "Filename": 21422, + "Ġsne": 21423, + "ĠFootball": 21424, + "Ġrival": 21425, + "Ġdisaster": 21426, + "ionic": 21427, + "ĠDamage": 21428, + ".Resource": 21429, + "-en": 21430, + "ĠTypes": 21431, + "getString": 21432, + "(board": 21433, + "Ġbol": 21434, + "plain": 21435, + "zym": 21436, + "า": 21437, + "Ġscanner": 21438, + "ilder": 21439, + "_msgs": 21440, + "æı": 21441, + "(intent": 21442, + "Ġdestruct": 21443, + "Ġbust": 21444, + "ĠEmploy": 21445, + "oni": 21446, + "ĠUIViewController": 21447, + "Ġodds": 21448, + "earer": 21449, + "Geometry": 21450, + "Ġyii": 21451, + "_EXPORT": 21452, + "ĠAttack": 21453, + "Ġniet": 21454, + "Ġimpression": 21455, + "ĠGil": 21456, + "_prob": 21457, + "528": 21458, + "ĠCF": 21459, + "ĠExperience": 21460, + "/plugins": 21461, + ".Method": 21462, + "Ġbeliefs": 21463, + "Native": 21464, + "_build": 21465, + "Ġvig": 21466, + "Ġranks": 21467, + "covered": 21468, + "705": 21469, + "such": 21470, + "Guard": 21471, + ".pack": 21472, + "adder": 21473, + "809": 21474, + "ivia": 21475, + "lng": 21476, + "ĠвÑĭ": 21477, + "552": 21478, + "Timestamp": 21479, + "_now": 21480, + "Ġpoker": 21481, + "Ġunc": 21482, + "Ġshapes": 21483, + "-types": 21484, + "_period": 21485, + "pk": 21486, + "Ġveteran": 21487, + "Ġsono": 21488, + "Ġappointed": 21489, + "overflow": 21490, + ".driver": 21491, + "_cat": 21492, + "utt": 21493, + "plant": 21494, + "imb": 21495, + "ĠAccept": 21496, + "Ġconcert": 21497, + "ĉnode": 21498, + "ĉz": 21499, + "?>čĊ": 21500, + "Ġbanned": 21501, + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 21502, + "Ġtoxic": 21503, + "Ġdisappe": 21504, + "473": 21505, + "ÈĽ": 21506, + "Ġgrace": 21507, + "ateful": 21508, + "Reply": 21509, + "ĠCruz": 21510, + "486": 21511, + "Ġscrap": 21512, + "Ġkeywords": 21513, + "simp": 21514, + "Ġmortgage": 21515, + "Ġcyber": 21516, + "ĠExecute": 21517, + "Ġlatitude": 21518, + "ifu": 21519, + ".COM": 21520, + "dbo": 21521, + "Ġsorts": 21522, + "ĠGas": 21523, + "omial": 21524, + ".Local": 21525, + "Cells": 21526, + ".Replace": 21527, + "Strings": 21528, + ".fit": 21529, + "ĠThird": 21530, + "%\",Ċ": 21531, + "Ġ{}\".": 21532, + "ĠSony": 21533, + "Ġ[:": 21534, + "585": 21535, + "Ġfallen": 21536, + ".')Ċ": 21537, + "inh": 21538, + "ĠMC": 21539, + "Ġredis": 21540, + "Codes": 21541, + "Ġprofiles": 21542, + "hook": 21543, + "Reducer": 21544, + "_FUNC": 21545, + "Ġnavigate": 21546, + "strlen": 21547, + "Ġhorm": 21548, + "áŀ": 21549, + "ĠSR": 21550, + ".boot": 21551, + "Ġdigest": 21552, + "ĉheader": 21553, + ".findOne": 21554, + "æģ": 21555, + "DbType": 21556, + "nia": 21557, + "_merge": 21558, + "Ġdonne": 21559, + "/Getty": 21560, + "_CHAR": 21561, + "Ġbands": 21562, + ".URL": 21563, + "artial": 21564, + "Ġfreq": 21565, + "Ġsist": 21566, + "Ng": 21567, + "Ġrendering": 21568, + "\\Core": 21569, + "Widgets": 21570, + "ĠVA": 21571, + "Ġactivists": 21572, + "Ste": 21573, + "=_": 21574, + "alla": 21575, + "Stamp": 21576, + "Ġloads": 21577, + "Ġxx": 21578, + "ĠLearning": 21579, + ".Mvc": 21580, + "uir": 21581, + "(\"$": 21582, + "Ġconnecting": 21583, + "ReadOnly": 21584, + "uru": 21585, + "ĠEag": 21586, + "BIT": 21587, + "_DEL": 21588, + "å§": 21589, + "arrass": 21590, + "external": 21591, + "ĠYOUR": 21592, + "ĠBrew": 21593, + "ĠFive": 21594, + "Ġresize": 21595, + "igid": 21596, + "eration": 21597, + "653": 21598, + "ĠÑį": 21599, + "536": 21600, + "åĬł": 21601, + "039": 21602, + "ĠCatch": 21603, + "Ùģ": 21604, + "ĠLeon": 21605, + "amil": 21606, + ".Body": 21607, + "Clip": 21608, + "/list": 21609, + ".br": 21610, + "EditText": 21611, + "ĉdb": 21612, + ".Game": 21613, + "(BuildContext": 21614, + "backend": 21615, + ".Red": 21616, + "facebook": 21617, + "529": 21618, + ".urls": 21619, + "mr": 21620, + "rolled": 21621, + "-------": 21622, + "Ġintervention": 21623, + "Ġretirement": 21624, + "ĠKit": 21625, + "ĠPRE": 21626, + "UpperCase": 21627, + "ĠSocket": 21628, + "Ġ:-": 21629, + "Ġstudying": 21630, + "ĠMetro": 21631, + "arded": 21632, + "Ġconversations": 21633, + "Called": 21634, + "Ġexamine": 21635, + "ertificate": 21636, + ".gz": 21637, + "-responsive": 21638, + "Ġrefund": 21639, + "_network": 21640, + "026": 21641, + "allowed": 21642, + "empt": 21643, + "Ġmeals": 21644, + "Categories": 21645, + "Ġtraveling": 21646, + "Ġkg": 21647, + "Ġshame": 21648, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 21649, + "Ġexplicitly": 21650, + "Ġmathematic": 21651, + "ĠSuite": 21652, + "ĠRGB": 21653, + "******/": 21654, + "Ġmixture": 21655, + "learning": 21656, + ".template": 21657, + "atts": 21658, + "wx": 21659, + "ĉctx": 21660, + ".properties": 21661, + "Ġdrinks": 21662, + "ĠEither": 21663, + "setText": 21664, + ".getData": 21665, + ".zip": 21666, + "Ġreveals": 21667, + ".Ċ": 21681, + "Ġranked": 21682, + "_impl": 21683, + "ĠHandles": 21684, + "Ġhosted": 21685, + "Ġupdating": 21686, + "album": 21687, + "éĿ": 21688, + "Ġshader": 21689, + "Editors": 21690, + "-round": 21691, + "[]{": 21692, + "Ġsep": 21693, + "ĠHi": 21694, + "TEM": 21695, + "lookup": 21696, + ".man": 21697, + "_INPUT": 21698, + "Ġthreatened": 21699, + "_IMPORT": 21700, + "Ġdrops": 21701, + "ruit": 21702, + "sid": 21703, + "both": 21704, + "ĠExcel": 21705, + "Ġjer": 21706, + "ordinary": 21707, + "ей": 21708, + "VIEW": 21709, + "reply": 21710, + "Ġ):Ċ": 21711, + "colors": 21712, + "verified": 21713, + "_Tr": 21714, + "_parse": 21715, + "Ġcongress": 21716, + "617": 21717, + "Promise": 21718, + "ints": 21719, + "ĠMother": 21720, + ".Api": 21721, + "ĠDuration": 21722, + "ĠfirstName": 21723, + "inheritdoc": 21724, + "ĠMars": 21725, + "Ġapr": 21726, + "ODY": 21727, + "Ġvisits": 21728, + "631": 21729, + "Ġhealing": 21730, + "letters": 21731, + ")));čĊ": 21732, + "future": 21733, + ".Framework": 21734, + "Ġkiss": 21735, + "Ġinvolve": 21736, + "Ġsilent": 21737, + "adows": 21738, + "Ġanybody": 21739, + "sch": 21740, + "690": 21741, + "Ġsolely": 21742, + "-img": 21743, + "Ġpropri": 21744, + "Ġinstruct": 21745, + "Ġlicenses": 21746, + "Ġmeth": 21747, + "Ġcondem": 21748, + "ĠDomain": 21749, + "ĠHarris": 21750, + "ĠsÃ¥": 21751, + "CEPT": 21752, + "Batch": 21753, + "@extends": 21754, + "ĠCONTRIBUT": 21755, + ".DataFrame": 21756, + "472": 21757, + "_packet": 21758, + "recision": 21759, + "Ġfocusing": 21760, + ".ht": 21761, + "__\":Ċ": 21762, + ":Get": 21763, + "ĠKC": 21764, + "Ġpassage": 21765, + "Segment": 21766, + "_center": 21767, + "-zA": 21768, + "_BL": 21769, + "Ġconvin": 21770, + "Ġclassified": 21771, + "ĠNSMutable": 21772, + "_ap": 21773, + "tile": 21774, + "Rectangle": 21775, + "492": 21776, + "(nums": 21777, + "vens": 21778, + "ĠUIButton": 21779, + "ĠFeder": 21780, + "amo": 21781, + "Ġoutline": 21782, + "ĠParser": 21783, + "Ġâī": 21784, + "ĠWorks": 21785, + ".Schema": 21786, + "Ġengines": 21787, + "637": 21788, + "563": 21789, + "_common": 21790, + "542": 21791, + "_old": 21792, + "ĠsetContentView": 21793, + "Ġ///<": 21794, + "ĠBT": 21795, + "fm": 21796, + "Ġdivers": 21797, + "_weights": 21798, + "emark": 21799, + "ĠACT": 21800, + "Ġproportion": 21801, + "overlay": 21802, + ".dirname": 21803, + "ĠGit": 21804, + "_REFERENCE": 21805, + "<>": 21806, + "lb": 21807, + "_rule": 21808, + "è´¥": 21809, + "ĠPutin": 21810, + "Ġsleeping": 21811, + "():čĊ": 21812, + "Ġpreserve": 21813, + "Ġparliament": 21814, + "ĠLooking": 21815, + "Ġpicking": 21816, + "ĠDispatch": 21817, + "Ġslip": 21818, + "ëĵ": 21819, + "ĠLyn": 21820, + "_signal": 21821, + "configuration": 21822, + "ĠPitt": 21823, + "491": 21824, + "aden": 21825, + "procedure": 21826, + "Ġenthusi": 21827, + "fight": 21828, + "ĠConsider": 21829, + "Ġtorn": 21830, + "Connected": 21831, + ".cos": 21832, + "_groups": 21833, + "ĠThink": 21834, + "Ġdeliber": 21835, + "Ġresid": 21836, + "working": 21837, + ".columns": 21838, + "ĠCalled": 21839, + "Ġeslint": 21840, + ">\",": 21841, + "_DOWN": 21842, + "hist": 21843, + "ĠAdvanced": 21844, + "Ġrewards": 21845, + "actors": 21846, + "Ġsilence": 21847, + "479": 21848, + "Ġmyth": 21849, + "Ġneur": 21850, + "519": 21851, + "Ġauction": 21852, + ".GetString": 21853, + "eks": 21854, + "(project": 21855, + "598": 21856, + "ĉmsg": 21857, + "ĉoutput": 21858, + "Ġcomplaints": 21859, + "551": 21860, + ",S": 21861, + "Ġtbl": 21862, + "Ġ,ĊĊ": 21863, + "riors": 21864, + "ahren": 21865, + "Ġlawyers": 21866, + "redux": 21867, + "_symbol": 21868, + "offee": 21869, + "_RESULT": 21870, + "(Name": 21871, + "UTC": 21872, + ".currentTime": 21873, + "Ġorganis": 21874, + ".arg": 21875, + "533": 21876, + "Ġminim": 21877, + "wick": 21878, + "Ġreceives": 21879, + "Balance": 21880, + "Ġspeaks": 21881, + "ĠDays": 21882, + "ĠBelow": 21883, + "483": 21884, + "tipo": 21885, + "Present": 21886, + "Ġreserv": 21887, + "hp": 21888, + "Ġrit": 21889, + "_RIGHT": 21890, + "--)": 21891, + "Ġchairman": 21892, + "781": 21893, + "DIS": 21894, + "ĠBOOST": 21895, + "Ġexperiments": 21896, + "687": 21897, + "__);Ċ": 21898, + "Ġstamp": 21899, + "Ġfert": 21900, + "Ġfond": 21901, + "Ter": 21902, + "elve": 21903, + "uren": 21904, + "+i": 21905, + "endency": 21906, + "Ġvirtually": 21907, + "...\"": 21908, + "ï½ŀ": 21909, + "925": 21910, + "-cent": 21911, + "_unique": 21912, + "Ġpricing": 21913, + "mic": 21914, + "RESH": 21915, + "Ġ:::": 21916, + "Ġannotation": 21917, + "ĠCircle": 21918, + "ongodb": 21919, + "itas": 21920, + "Ġ%(": 21921, + "(component": 21922, + "Ġоб": 21923, + "(port": 21924, + "-hour": 21925, + ".obj": 21926, + "LBL": 21927, + "Ġjury": 21928, + "GBT": 21929, + "Ġspy": 21930, + "ĠProfessional": 21931, + "Ġ\"\";ĊĊ": 21932, + "Ġstriking": 21933, + "Ġdiscrimination": 21934, + "Ġpays": 21935, + "937": 21936, + "lict": 21937, + "entes": 21938, + "Ġthrowing": 21939, + "ĠPlugin": 21940, + "(def": 21941, + "ĠRuntimeException": 21942, + "ĠMigration": 21943, + "599": 21944, + "Ġdic": 21945, + "bag": 21946, + "onia": 21947, + "Ġcorruption": 21948, + "704": 21949, + "(Map": 21950, + "Ġprz": 21951, + ".dto": 21952, + "Ġacquire": 21953, + "StateToProps": 21954, + "Ġloving": 21955, + "ож": 21956, + "_pattern": 21957, + "Ġemotions": 21958, + "Ġpublisher": 21959, + "_be": 21960, + "Ġcouples": 21961, + "498": 21962, + "oj": 21963, + "ĠChart": 21964, + "Ġtrop": 21965, + ".tool": 21966, + "Ġestablishment": 21967, + "Ġdol": 21968, + "654": 21969, + "Ġtower": 21970, + "Ġlane": 21971, + "ĠSydney": 21972, + "Ġfilling": 21973, + "claimed": 21974, + "644": 21975, + "Ġdialogue": 21976, + "Ġconvention": 21977, + "booking": 21978, + "parency": 21979, + "æ±": 21980, + "ĠGeneric": 21981, + "718": 21982, + "\\Schema": 21983, + "482": 21984, + "618": 21985, + "Ġranges": 21986, + "/ch": 21987, + "Ġpanels": 21988, + "Ġruled": 21989, + "çĶŁ": 21990, + ".ts": 21991, + "_sets": 21992, + "Ġcleanup": 21993, + "Previous": 21994, + "ĠAnimal": 21995, + "607": 21996, + "($(": 21997, + "ĠAve": 21998, + "ollar": 21999, + "028": 22000, + "_eval": 22001, + "ĉName": 22002, + "(tree": 22003, + "Ġ\"]": 22004, + "571": 22005, + "Ġduties": 22006, + "='/": 22007, + "Clicked": 22008, + "Ġdifferently": 22009, + "ĠClark": 22010, + "Ġdit": 22011, + "ologists": 22012, + "Ġsynd": 22013, + "Ġsends": 22014, + "-known": 22015, + "kb": 22016, + "ĠModal": 22017, + "itative": 22018, + "Ġracing": 22019, + "Ġhighlights": 22020, + "ĠSimon": 22021, + "ĠCaptain": 22022, + "ä¿¡": 22023, + "ĠCB": 22024, + "contin": 22025, + "aran": 22026, + "Ġphysics": 22027, + "retty": 22028, + "etal": 22029, + ".md": 22030, + "axios": 22031, + "Ġspeakers": 22032, + "Ġprep": 22033, + "Ġawarded": 22034, + "ì§Ģ": 22035, + "ĠCorn": 22036, + "ĠNature": 22037, + "UDIO": 22038, + "737": 22039, + "Ġproj": 22040, + "-pre": 22041, + "[u": 22042, + "Features": 22043, + "ĠisEqual": 22044, + "Binary": 22045, + "sig": 22046, + "Ġconfusion": 22047, + "546": 22048, + "568": 22049, + "ĠHat": 22050, + "Ġktó": 22051, + ".configure": 22052, + "MON": 22053, + "494": 22054, + "/edit": 22055, + "_Add": 22056, + ",true": 22057, + "541": 22058, + "Ġcli": 22059, + "ErrorMessage": 22060, + "-loader": 22061, + "Dimensions": 22062, + "ultiply": 22063, + "Ġ{!!": 22064, + "ĠSqlCommand": 22065, + "Ġspoken": 22066, + "Ġpics": 22067, + "Ġtoy": 22068, + "(Key": 22069, + "ĠLoop": 22070, + "ب": 22071, + "EATURE": 22072, + "inction": 22073, + "_setup": 22074, + "wrapper": 22075, + "Ġtong": 22076, + "cular": 22077, + "Opt": 22078, + ".Pl": 22079, + "=\",": 22080, + "(length": 22081, + "umn": 22082, + "Ġchrom": 22083, + "Ġsevent": 22084, + "ĠIllegalArgumentException": 22085, + "478": 22086, + "ĉstart": 22087, + "Ġbegun": 22088, + "CEPTION": 22089, + "dataset": 22090, + "825": 22091, + "ĠFailed": 22092, + "cols": 22093, + "459": 22094, + "Ġknee": 22095, + "imore": 22096, + ".splice": 22097, + "shell": 22098, + "iggers": 22099, + "Ġthemes": 22100, + "995": 22101, + "ĠDJ": 22102, + "ĠAssistant": 22103, + "-$": 22104, + "Maybe": 22105, + "Ġordering": 22106, + "ĠIntelligence": 22107, + "ĠMassachusetts": 22108, + "Ġfailing": 22109, + "elson": 22110, + "Great": 22111, + "=i": 22112, + ".rest": 22113, + "Ġinvite": 22114, + "-disable": 22115, + ".GroupBox": 22116, + "âĢĻest": 22117, + "Ġtackle": 22118, + "gv": 22119, + "etter": 22120, + "Ġ),čĊ": 22121, + "_rules": 22122, + ".warn": 22123, + "functions": 22124, + "ĠChristians": 22125, + "Ġbacked": 22126, + "Ġslider": 22127, + "Ġenjoying": 22128, + "nest": 22129, + "Ġhij": 22130, + "_ms": 22131, + "//*": 22132, + "Annotations": 22133, + "ĠVariables": 22134, + "": 22351, + "cycle": 22352, + "ĠBull": 22353, + "paths": 22354, + "Ġunp": 22355, + "ĠviewDidLoad": 22356, + "_Model": 22357, + "ĠassertTrue": 22358, + "Ġrated": 22359, + "Decl": 22360, + "verted": 22361, + "ĠDat": 22362, + "brew": 22363, + "Ġpointing": 22364, + "Ms": 22365, + "ĠPointer": 22366, + ")'": 22367, + "_non": 22368, + "527": 22369, + "ĠSEC": 22370, + "Ġyeah": 22371, + "gency": 22372, + "initialize": 22373, + "fly": 22374, + "711": 22375, + "[pos": 22376, + ",g": 22377, + "Tele": 22378, + "034": 22379, + "Ġjoke": 22380, + "Ġclause": 22381, + ".findById": 22382, + "enes": 22383, + "(instance": 22384, + "626": 22385, + "£": 22386, + "915": 22387, + "Ġslic": 22388, + "_home": 22389, + "Ġ*/}Ċ": 22390, + "_pages": 22391, + "(service": 22392, + "905": 22393, + "RP": 22394, + "ĠAmong": 22395, + ".getCurrent": 22396, + "806": 22397, + "ãĤ¹": 22398, + "Ġslee": 22399, + "=[Ċ": 22846, + "oler": 22847, + "Ġlibert": 22848, + "Ġ`Ċ": 22849, + "Ġwenn": 22850, + "lated": 22851, + "Ġimmune": 22852, + "(Node": 22853, + "ĠProblem": 22854, + "ĠAbs": 22855, + "logs": 22856, + "Ġ../": 22857, + "ĠADC": 22858, + "Ġ}}\">Ċ": 22859, + ">');Ċ": 22860, + "=b": 22861, + "ĠWind": 22862, + "lahoma": 22863, + "Ġallocate": 22864, + "orian": 22865, + "Ġprescription": 22866, + "-quality": 22867, + "ĠMayor": 22868, + "855": 22869, + "inely": 22870, + "endforeach": 22871, + "ĠComplex": 22872, + "kom": 22873, + "709": 22874, + "TY": 22875, + "790": 22876, + "]].": 22877, + ".Style": 22878, + "_many": 22879, + "','$": 22880, + "Ġbarrier": 22881, + "ĠFetch": 22882, + "ĠMarvel": 22883, + "Ġresist": 22884, + "ого": 22885, + "bidden": 22886, + "ĠRunnable": 22887, + ":false": 22888, + "899": 22889, + "Ġbuilds": 22890, + "ĠStage": 22891, + "Ġdub": 22892, + "empo": 22893, + ".site": 22894, + "558": 22895, + ";ĊĊĊĊ": 22896, + "994": 22897, + "ĠDenver": 22898, + "Ġrevel": 22899, + "Ġtriggered": 22900, + "Ġdice": 22901, + "_fail": 22902, + "Ġgc": 22903, + "833": 22904, + "589": 22905, + "ĉX": 22906, + "ĠThrowable": 22907, + "775": 22908, + ".router": 22909, + "ĠRevolution": 22910, + "ÑĢа": 22911, + "_NON": 22912, + "055": 22913, + "Ł¥": 22914, + "578": 22915, + "Ġelder": 22916, + "Ġabroad": 22917, + "Ġе": 22918, + "ĠAdult": 22919, + "blr": 22920, + "glyphicon": 22921, + "613": 22922, + "Ġpromoting": 22923, + "Ġiz": 22924, + "ĠSolid": 22925, + "645": 22926, + "_loader": 22927, + "early": 22928, + ".enabled": 22929, + "-edit": 22930, + "ĠUL": 22931, + "_play": 22932, + "ĠInterrupt": 22933, + "Ġadvantages": 22934, + "ucle": 22935, + "Ġmechanical": 22936, + ".tableLayoutPanel": 22937, + "ĠWorking": 22938, + "Ġanonymous": 22939, + "Rating": 22940, + "igious": 22941, + "_phone": 22942, + ".addActionListener": 22943, + "Ġfran": 22944, + "unden": 22945, + "Ġ*)&": 22946, + "_bool": 22947, + "ulative": 22948, + "Ġcone": 22949, + "ĠMult": 22950, + "Ġmö": 22951, + "ĠForward": 22952, + "]):Ċ": 22953, + "Ġconvinced": 22954, + "acted": 22955, + "643": 22956, + "ãģĵ": 22957, + "ĠConfigure": 22958, + "Ġceiling": 22959, + "Der": 22960, + "Ġpassengers": 22961, + "Groups": 22962, + "Ġsoccer": 22963, + "/W": 22964, + "aviors": 22965, + "swith": 22966, + "ĠZone": 22967, + ".Options": 22968, + "ĠMom": 22969, + "ieder": 22970, + "Arrays": 22971, + "Ġtreatments": 22972, + "Ġprotecting": 22973, + "fac": 22974, + "Ġpickle": 22975, + "ButtonItem": 22976, + "713": 22977, + "Ġblocking": 22978, + "strar": 22979, + "ò": 22980, + "ĠExport": 22981, + "Ġthrew": 22982, + "otta": 22983, + "ĠBASE": 22984, + ".ws": 22985, + ".LEADING": 22986, + "orderBy": 22987, + "_delay": 22988, + "ĠPu": 22989, + ".dll": 22990, + "ĠChoose": 22991, + "992": 22992, + "Police": 22993, + "ĠBEGIN": 22994, + "boxes": 22995, + "Ġdiamond": 22996, + ",l": 22997, + "Ġĉĉĉ": 22998, + "Ġcurious": 22999, + "624": 23000, + "tv": 23001, + "Ġerotische": 23002, + "ackages": 23003, + "ĉSet": 23004, + "Tick": 23005, + ".border": 23006, + "staticmethod": 23007, + "Ġcher": 23008, + "invoice": 23009, + "Ġcru": 23010, + "Ġdefect": 23011, + "_metadata": 23012, + "relation": 23013, + "ikan": 23014, + "[N": 23015, + "(Qt": 23016, + "(Base": 23017, + "æģ¯": 23018, + "beat": 23019, + "ĠEmpty": 23020, + "ĉo": 23021, + "_shift": 23022, + "Ġregret": 23023, + "722": 23024, + "Those": 23025, + "Cent": 23026, + "ĠPortug": 23027, + "ĠIslands": 23028, + "ĠTIME": 23029, + "Management": 23030, + "996": 23031, + "-sp": 23032, + "539": 23033, + "ême": 23034, + "Ġnotion": 23035, + "unifu": 23036, + "PK": 23037, + "826": 23038, + "è¡Į": 23039, + "ĠCURLOPT": 23040, + "\\\"\\": 23041, + "UV": 23042, + "çº": 23043, + "dra": 23044, + "cou": 23045, + "=`": 23046, + "ĠDestroy": 23047, + "rp": 23048, + ".cancel": 23049, + "GG": 23050, + "runtime": 23051, + "ĠVue": 23052, + "Ġprogressive": 23053, + "/services": 23054, + "Ġrunner": 23055, + "_FRAME": 23056, + ".ToolStripMenuItem": 23057, + "Ġ','": 23058, + "delay": 23059, + "=utf": 23060, + "Ġscreening": 23061, + "Ġpulling": 23062, + "omas": 23063, + "Ġanth": 23064, + "-new": 23065, + "/local": 23066, + "ĠiPad": 23067, + "Ġtwitter": 23068, + "Ġdying": 23069, + "Ġheaven": 23070, + "ĠUInt": 23071, + "ĠSenator": 23072, + "Ġpresum": 23073, + "ĠWalker": 23074, + "Ġovercome": 23075, + "etection": 23076, + "Ġembarrass": 23077, + "China": 23078, + "639": 23079, + "Include": 23080, + "ROLL": 23081, + "ĠdataType": 23082, + "David": 23083, + "ร": 23084, + "lop": 23085, + "-month": 23086, + "Ġscar": 23087, + "ĠSafe": 23088, + "Ġ****************************************************************": 23089, + "Ġaccessories": 23090, + "Ġramp": 23091, + "_USE": 23092, + "Ġcontrad": 23093, + "))]Ċ": 23094, + "Ġprest": 23095, + "ĠHR": 23096, + "ĠRap": 23097, + "Ġusize": 23098, + "Ġcapability": 23099, + "Ġcort": 23100, + "-next": 23101, + "077": 23102, + "627": 23103, + "Ġburden": 23104, + "822": 23105, + "_reader": 23106, + "Ġ@@": 23107, + "regular": 23108, + "ĠKa": 23109, + "036": 23110, + "MAN": 23111, + "Ġastr": 23112, + "Ġ'')Ċ": 23113, + "Ġfed": 23114, + "Ġparsing": 23115, + "ĠYears": 23116, + "Ġbroker": 23117, + "\":{\"": 23118, + "Ġakt": 23119, + "Inventory": 23120, + "abeled": 23121, + "Ġargparse": 23122, + "*******Ċ": 23123, + "versation": 23124, + "Ġcord": 23125, + "ĠTi": 23126, + "Ġhopefully": 23127, + "Ġah": 23128, + "verb": 23129, + "Ġstolen": 23130, + ".Entry": 23131, + "Ġexpecting": 23132, + "Orientation": 23133, + "Ġpowered": 23134, + "Ġpersist": 23135, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 23136, + "']);": 23137, + "')),Ċ": 23138, + "ĠCash": 23139, + "ĉitem": 23140, + "818": 23141, + "grades": 23142, + "ropol": 23143, + "basic": 23144, + "Ġ\");čĊ": 23145, + "Ġawards": 23146, + "(range": 23147, + "-all": 23148, + "ĠIBOutlet": 23149, + "ĠIndeed": 23150, + "----------------------------------------------------------------------------": 23151, + "Ġstomach": 23152, + "Ġflower": 23153, + "Ġsew": 23154, + "_times": 23155, + "avis": 23156, + "QString": 23157, + "ĠRoutes": 23158, + "_prot": 23159, + "Ġcomedy": 23160, + "Ġlogout": 23161, + "Ġwooden": 23162, + "Ġposter": 23163, + "piece": 23164, + ".Join": 23165, + "ĠPok": 23166, + "celona": 23167, + "mutex": 23168, + ";čĊčĊčĊ": 23169, + "Ġstrikes": 23170, + "787": 23171, + "Loaded": 23172, + ")arg": 23173, + "esa": 23174, + "United": 23175, + "Ep": 23176, + "PELL": 23177, + "807": 23178, + "ĠAtlantic": 23179, + "ullet": 23180, + "652": 23181, + "apple": 23182, + "Ġsettled": 23183, + "acon": 23184, + "Ġprinter": 23185, + "ĠGC": 23186, + "å®ļ": 23187, + "Ġrendered": 23188, + ",âĢĻ": 23189, + "heit": 23190, + "social": 23191, + ".ge": 23192, + "714": 23193, + "ĠRick": 23194, + "ĠUtah": 23195, + "got": 23196, + "onical": 23197, + "ĠScroll": 23198, + "ĠSciences": 23199, + "Ġjug": 23200, + "Ġampl": 23201, + "enti": 23202, + "LEFT": 23203, + "Ġtabs": 23204, + "Ġenormous": 23205, + ".getKey": 23206, + "locate": 23207, + ".EX": 23208, + ".storage": 23209, + ".We": 23210, + "Ġtoast": 23211, + "ĠAdditionally": 23212, + "882": 23213, + "ĠNOW": 23214, + "547": 23215, + "_UPDATE": 23216, + "Ġtransferred": 23217, + "tha": 23218, + ".Display": 23219, + "_ui": 23220, + "IDEO": 23221, + "Ġmeaningful": 23222, + "ĠMoscow": 23223, + ",this": 23224, + "ĠVictoria": 23225, + "æĶ¹": 23226, + "ĠÐŁ": 23227, + ".stack": 23228, + "ĠBarn": 23229, + "paredStatement": 23230, + ":string": 23231, + "Ġbij": 23232, + "ĠSTATE": 23233, + "Ġemployers": 23234, + "ĉinput": 23235, + "(|": 23236, + "Ġlex": 23237, + "invoke": 23238, + "ĉnum": 23239, + "++,": 23240, + "atial": 23241, + "orses": 23242, + "Ġfork": 23243, + "_txt": 23244, + "ĠAntonio": 23245, + "Ġ(<": 23246, + "averse": 23247, + "Ġdevast": 23248, + "ãĢĢ": 23249, + ".Dec": 23250, + "ĠGard": 23251, + "/ui": 23252, + ".%": 23253, + "tri": 23254, + "Ġrolled": 23255, + "ValuePair": 23256, + "itten": 23257, + "ĠTher": 23258, + "Ġvrou": 23259, + "ĠFlow": 23260, + "ĠFinance": 23261, + "ĠComb": 23262, + "HC": 23263, + ".setVisible": 23264, + "isl": 23265, + "Ġpk": 23266, + "773": 23267, + "Ġupset": 23268, + "(raw": 23269, + "ĠVice": 23270, + "eatures": 23271, + "ĠLang": 23272, + "029": 23273, + "Looking": 23274, + "767": 23275, + "ĠAST": 23276, + "Ġtrips": 23277, + "ĠJustin": 23278, + "browser": 23279, + "=\"'.$": 23280, + ".vertices": 23281, + "821": 23282, + "-co": 23283, + "}/{": 23284, + "Ġ?,": 23285, + "ĠDomin": 23286, + "ĠBelg": 23287, + "\"<": 23288, + "Ġsuppose": 23289, + "addy": 23290, + "Ġwalks": 23291, + "688": 23292, + "ERRU": 23293, + "_filters": 23294, + "Preferred": 23295, + "scene": 23296, + "еÑģ": 23297, + "ĠAffairs": 23298, + "Ġ\"#{": 23299, + "ĠonSubmit": 23300, + "Ġstocks": 23301, + "/view": 23302, + "gree": 23303, + "-get": 23304, + "903": 23305, + "hit": 23306, + "Jo": 23307, + ".getC": 23308, + "725": 23309, + "Initialized": 23310, + "ÑĤи": 23311, + "cuts": 23312, + "(Type": 23313, + "ĠAgreement": 23314, + "ĠVietnam": 23315, + "Ġ/*!": 23316, + "Ġpizza": 23317, + "-view": 23318, + "_em": 23319, + "Ġlhs": 23320, + "Ġmuy": 23321, + "ĠIdent": 23322, + "ĠFriends": 23323, + "061": 23324, + "Ġabund": 23325, + "_AD": 23326, + ".timestamp": 23327, + "-'": 23328, + "Ġduplicate": 23329, + "Ġhunting": 23330, + "Ġregulatory": 23331, + "iao": 23332, + "amous": 23333, + "ĠEntertainment": 23334, + "[A": 23335, + "iatric": 23336, + "_CLIENT": 23337, + "ĠKids": 23338, + "/pkg": 23339, + "Break": 23340, + ")));ĊĊ": 23341, + "ĠShape": 23342, + "Ġrelating": 23343, + "Interrupt": 23344, + "ableOpacity": 23345, + "embre": 23346, + "Ġmystery": 23347, + "Ġjournalists": 23348, + "ritable": 23349, + ".Link": 23350, + "Ġstopping": 23351, + "CRET": 23352, + ".DB": 23353, + "Ġpopularity": 23354, + "Ġgew": 23355, + "Ġimpr": 23356, + "setValue": 23357, + "FLAG": 23358, + "ĉmax": 23359, + "Ġbake": 23360, + "wy": 23361, + "ĠEconomic": 23362, + "Ġencontr": 23363, + "Ġfname": 23364, + "/de": 23365, + "Rank": 23366, + "Ġbugs": 23367, + ".sm": 23368, + "Ġmedian": 23369, + "DOWN": 23370, + "ĠSure": 23371, + "AtIndex": 23372, + "ĠDick": 23373, + "Ġ(__": 23374, + ".delta": 23375, + "Fr": 23376, + "Ġsuggesting": 23377, + "ĠRecyclerView": 23378, + ",e": 23379, + "START": 23380, + "/****************************************************************************": 23381, + "xford": 23382, + "Ġreceipt": 23383, + "CLAIM": 23384, + "readonly": 23385, + "968": 23386, + "Ġengaging": 23387, + "619": 23388, + "Ca": 23389, + "asma": 23390, + "Ġensuring": 23391, + "English": 23392, + "ĠVancouver": 23393, + "hyth": 23394, + "Ġpurchasing": 23395, + "ĠPI": 23396, + ".word": 23397, + "(sp": 23398, + ".home": 23399, + ":def": 23400, + "Ġgig": 23401, + "574": 23402, + "671": 23403, + "ĠVe": 23404, + "forum": 23405, + "ĠMitch": 23406, + "Bay": 23407, + "_FL": 23408, + "651": 23409, + "Ġsoll": 23410, + "577": 23411, + "_columns": 23412, + "Ġminority": 23413, + "bird": 23414, + "Ġhanded": 23415, + "SSL": 23416, + "STAT": 23417, + "Ġnervous": 23418, + "ĥ½": 23419, + "ĠfilePath": 23420, + "CREATE": 23421, + "Aw": 23422, + "Ġpens": 23423, + "835": 23424, + "seed": 23425, + "ĠCompute": 23426, + "olk": 23427, + "594": 23428, + "ĠAsset": 23429, + "reach": 23430, + "'),čĊ": 23431, + "navigation": 23432, + "LF": 23433, + "/util": 23434, + "ĠPub": 23435, + "ĠâĶ": 23436, + "cion": 23437, + "##Ċ": 23438, + "072": 23439, + "III": 23440, + "TagName": 23441, + "Ġamid": 23442, + "permission": 23443, + "ifiable": 23444, + "xFFFFFFFF": 23445, + "ни": 23446, + ".Buffer": 23447, + "_irq": 23448, + "dark": 23449, + "Ġretval": 23450, + ".fire": 23451, + "production": 23452, + ".listen": 23453, + "ĠWeather": 23454, + "Ġbuyers": 23455, + ".ne": 23456, + "erp": 23457, + "ĠPent": 23458, + "699": 23459, + "Ġwelfare": 23460, + "ĠpageSize": 23461, + "ĠStadium": 23462, + "erta": 23463, + "Ġlev": 23464, + "ampa": 23465, + "Pager": 23466, + "665": 23467, + "Ġcharging": 23468, + "ĠNetflix": 23469, + "|null": 23470, + "_random": 23471, + ".xpath": 23472, + "Ġstere": 23473, + "ĠISIS": 23474, + "ponses": 23475, + "(loc": 23476, + "566": 23477, + "eyond": 23478, + "ĠOfficial": 23479, + "657": 23480, + "ĠMaryland": 23481, + "DataType": 23482, + "_par": 23483, + "{},": 23484, + "ĠEnjoy": 23485, + "727": 23486, + "_SHIFT": 23487, + "ĠAwards": 23488, + "_ENTRY": 23489, + "Ġseemingly": 23490, + "enticate": 23491, + "Ġhearts": 23492, + "583": 23493, + "_;ĊĊ": 23494, + "ĠHIV": 23495, + "Ġindivid": 23496, + "ĠFlag": 23497, + "_ctrl": 23498, + "ĠCallback": 23499, + ",z": 23500, + "ĠGPU": 23501, + "ĉobj": 23502, + "ĠPhoenix": 23503, + "ĠBUS": 23504, + "907": 23505, + "Ġrubber": 23506, + "_AUTH": 23507, + "ĠSolutions": 23508, + "(location": 23509, + "Variables": 23510, + ".setEnabled": 23511, + "_high": 23512, + "WO": 23513, + "Gesture": 23514, + "Ġretry": 23515, + "ĠobjectForKey": 23516, + "alloween": 23517, + "Ġmos": 23518, + "ĠCele": 23519, + "Ġikke": 23520, + "(cell": 23521, + "ĠMODE": 23522, + "rena": 23523, + "Ġdescribing": 23524, + "641": 23525, + "Ġphi": 23526, + "Ġrd": 23527, + "Ġdeserve": 23528, + "Ġwheels": 23529, + "å¸Ĥ": 23530, + "Ġcritics": 23531, + "755": 23532, + "Namespace": 23533, + "ĠFra": 23534, + "ĠĊĊĊĊ": 23535, + "Ġalla": 23536, + "Ġrequiring": 23537, + "æľŁ": 23538, + "utation": 23539, + "Ġdelayed": 23540, + "Ġadministrative": 23541, + "Ġbay": 23542, + ".hidden": 23543, + "Tex": 23544, + "051": 23545, + "Ġboundaries": 23546, + "Ġ]);ĊĊ": 23547, + "ĠFollowing": 23548, + "~/": 23549, + "Fi": 23550, + "_conv": 23551, + "_TITLE": 23552, + "Ġdesde": 23553, + "ICollectionView": 23554, + "Alias": 23555, + "Ġbite": 23556, + "patient": 23557, + "_COMMAND": 23558, + "Completed": 23559, + "ĉelif": 23560, + "(<": 23561, + "Business": 23562, + "ĠPool": 23563, + "Ġpursue": 23564, + "ĠBan": 23565, + "_steps": 23566, + "_DECL": 23567, + "umble": 23568, + "Ġcombo": 23569, + "ĠLayer": 23570, + ".xr": 23571, + "Ġdup": 23572, + "---------": 23573, + "628": 23574, + "Ġmodifier": 23575, + "rob": 23576, + "rez": 23577, + "696": 23578, + "Ġathletes": 23579, + "Used": 23580, + "wear": 23581, + "815": 23582, + "Ġlegitimate": 23583, + "Ġ\"ĊĊ": 23584, + "Ġhv": 23585, + "Std": 23586, + "037": 23587, + "ĠHold": 23588, + "Ġsurviv": 23589, + "ĠAlliance": 23590, + "ĠEarly": 23591, + "778": 23592, + "Behavior": 23593, + "(font": 23594, + "/libs": 23595, + "Ġrectangle": 23596, + "Ġsinger": 23597, + "Ġamp": 23598, + "EqualTo": 23599, + "Ġ\".\"": 23600, + "Ġgirlfriend": 23601, + "å±": 23602, + "linear": 23603, + "observ": 23604, + "Ġpiù": 23605, + "Ġcomplement": 23606, + "WithValue": 23607, + "(password": 23608, + "take": 23609, + "Blank": 23610, + "ĠCompar": 23611, + "'\",": 23612, + "_policy": 23613, + "mongoose": 23614, + "_FAILED": 23615, + ".report": 23616, + "Ratio": 23617, + ".PerformLayout": 23618, + "747": 23619, + "usable": 23620, + "mers": 23621, + "_render": 23622, + "PEED": 23623, + "772": 23624, + "Ġlesb": 23625, + "ĉE": 23626, + "_tool": 23627, + "Ġladies": 23628, + "908": 23629, + "оÑģ": 23630, + "))))Ċ": 23631, + ";;;;": 23632, + ".dot": 23633, + "Ġnest": 23634, + "peak": 23635, + "ukkit": 23636, + "eca": 23637, + "_SW": 23638, + "Ġ&(": 23639, + "ĠOklahoma": 23640, + "Ġbanking": 23641, + "569": 23642, + "ĠNintendo": 23643, + "752": 23644, + "Ġreproduce": 23645, + "_elements": 23646, + "_mac": 23647, + "proxy": 23648, + "Ġremarkable": 23649, + "}/${": 23650, + "Ġouts": 23651, + ".hasNext": 23652, + "MODE": 23653, + "658": 23654, + "Ġanime": 23655, + ".conn": 23656, + "Unique": 23657, + "Dom": 23658, + "Ġimportantly": 23659, + "itty": 23660, + "Ġjuice": 23661, + "Tw": 23662, + "ĠPartners": 23663, + "Ġattacking": 23664, + "Ġportable": 23665, + "amiento": 23666, + ".PictureBox": 23667, + ".gen": 23668, + "Ġoptimal": 23669, + "582": 23670, + "Ġrecre": 23671, + "Ġjournalist": 23672, + "ĠExtract": 23673, + "ĠMoreover": 23674, + "ĠmarginTop": 23675, + ".Ap": 23676, + "Ġfiring": 23677, + "NaN": 23678, + "ĉtemplate": 23679, + "ад": 23680, + ".En": 23681, + "Ġdefence": 23682, + "ĠTel": 23683, + "ilen": 23684, + "jan": 23685, + "=data": 23686, + "ĠUrl": 23687, + "ĠReuters": 23688, + "(total": 23689, + "ĠFifth": 23690, + "Ġessays": 23691, + "Ġinterpretation": 23692, + "Ġcharity": 23693, + "ĠRules": 23694, + "Ġsubsection": 23695, + "styled": 23696, + "azer": 23697, + "lags": 23698, + "LIST": 23699, + "Ġuploaded": 23700, + "Ġtrash": 23701, + "Ġregistr": 23702, + "Ġseller": 23703, + ">';čĊ": 23704, + "ĠstartTime": 23705, + "çĻ": 23706, + "sy": 23707, + "(HttpServletRequest": 23708, + "Ġtrap": 23709, + "GC": 23710, + "Ġembedded": 23711, + "Ġsurrounded": 23712, + "816": 23713, + "imits": 23714, + "TX": 23715, + "ylinder": 23716, + "685": 23717, + "ĠFal": 23718, + "Ġsentences": 23719, + "ĠJa": 23720, + "IFICATION": 23721, + "weapon": 23722, + "ovation": 23723, + "Ġcoat": 23724, + "Ġinterpol": 23725, + "Ġlips": 23726, + "ĠKy": 23727, + "Ġvectors": 23728, + "_am": 23729, + "Ġintake": 23730, + ".world": 23731, + "Ġinbox": 23732, + "ĠMAC": 23733, + "_ab": 23734, + "(nameof": 23735, + "633": 23736, + "Ġentert": 23737, + "Ġgathering": 23738, + "ĠSIM": 23739, + "++.": 23740, + "nya": 23741, + "'}}": 23742, + "ĠUPDATE": 23743, + "Ġpac": 23744, + "(html": 23745, + "ĠSant": 23746, + "iating": 23747, + "ĠIdeas": 23748, + "Ġspray": 23749, + "ĠHart": 23750, + "Ġverification": 23751, + "adesh": 23752, + "/modules": 23753, + "ĠMind": 23754, + "ĠSizedBox": 23755, + "Ġshelter": 23756, + "Ġheroes": 23757, + "atty": 23758, + "Ġcertified": 23759, + "sj": 23760, + "Ġêtre": 23761, + "ÅĤo": 23762, + "Ġpublishing": 23763, + "ĠMalays": 23764, + ".getUser": 23765, + "ĠProvider": 23766, + "ĠLinkedList": 23767, + "ĠBor": 23768, + "ROUND": 23769, + "did": 23770, + "tain": 23771, + "pire": 23772, + "ĠJenn": 23773, + "tel": 23774, + "ande": 23775, + "757": 23776, + "_front": 23777, + "ĠMcG": 23778, + "TestMethod": 23779, + "à¸Ń": 23780, + "Ġoccasionally": 23781, + "ĠWales": 23782, + "Ġexercises": 23783, + "ĠÐĴ": 23784, + "045": 23785, + "-plus": 23786, + "Ġvalidator": 23787, + "Ġprayer": 23788, + "LATED": 23789, + "_author": 23790, + "Ġlabour": 23791, + "++Ċ": 23792, + "-equiv": 23793, + "ĠGPL": 23794, + "Ġfacebook": 23795, + "simple": 23796, + "gly": 23797, + "Processor": 23798, + "ipy": 23799, + "744": 23800, + "Ġ*>": 23801, + "648": 23802, + "Ġcleared": 23803, + "ĠPush": 23804, + "858": 23805, + "Ġpenis": 23806, + "Structure": 23807, + "lij": 23808, + "ĠMorgan": 23809, + "Ġhandful": 23810, + "\".Ċ": 23811, + "984": 23812, + "|\\": 23813, + "Ġ********************************": 23814, + "ĠAqu": 23815, + "584": 23816, + "_IC": 23817, + ".loads": 23818, + "Ġmeter": 23819, + "ĠMarine": 23820, + "::{": 23821, + "ĠTS": 23822, + "776": 23823, + "ĠArrays": 23824, + ".Title": 23825, + "GRAM": 23826, + "termin": 23827, + "Ġcoinc": 23828, + "Else": 23829, + "_states": 23830, + "-run": 23831, + "members": 23832, + "782": 23833, + "astro": 23834, + "066": 23835, + "ĠonPress": 23836, + "Ġbeings": 23837, + "Ġabandoned": 23838, + "Ġtaxp": 23839, + "owners": 23840, + ".mode": 23841, + "Ġdiagnosis": 23842, + "Ġ_Ċ": 23843, + "ĠKnight": 23844, + "ĉA": 23845, + "Ġobserve": 23846, + "),'": 23847, + "823": 23848, + "!\")Ċ": 23849, + "ĠPara": 23850, + "Ġvariation": 23851, + "(False": 23852, + "ĠAnti": 23853, + "Ġgri": 23854, + "Ġhomeless": 23855, + "?v": 23856, + "Ġbez": 23857, + ".Server": 23858, + "release": 23859, + "ĠPatri": 23860, + "Ġchars": 23861, + "Ġranking": 23862, + "activation": 23863, + "581": 23864, + "Ġwides": 23865, + "qr": 23866, + ".Sql": 23867, + "acular": 23868, + "ĠBot": 23869, + "_sync": 23870, + "Ġhappiness": 23871, + "Ġvolunteers": 23872, + "877": 23873, + "Ġsits": 23874, + "/<": 23875, + "[e": 23876, + "(fileName": 23877, + "Ġcapac": 23878, + "832": 23879, + "ĠMaria": 23880, + "father": 23881, + "Ġgram": 23882, + "*i": 23883, + "Ġcaso": 23884, + "_draw": 23885, + "ĠRaw": 23886, + "ĠIterator": 23887, + "664": 23888, + "ĠPadding": 23889, + "924": 23890, + "PD": 23891, + "BOX": 23892, + "ĠSPECIAL": 23893, + "Ġfecha": 23894, + "Ġvide": 23895, + "ĠLeader": 23896, + "以": 23897, + "$(\".": 23898, + "Ġdiameter": 23899, + "Ġmild": 23900, + "745": 23901, + "Ġrocks": 23902, + "appings": 23903, + "048": 23904, + "directory": 23905, + "557": 23906, + ".flush": 23907, + "ĠJess": 23908, + "UNIT": 23909, + "ĠPear": 23910, + "Ġmandatory": 23911, + "Sur": 23912, + "qt": 23913, + "Ġstreams": 23914, + "Ġcooperation": 23915, + "ĠSac": 23916, + "Ġcheaper": 23917, + "ĉch": 23918, + "animation": 23919, + "fare": 23920, + "(height": 23921, + "(True": 23922, + "NY": 23923, + "Ġwrest": 23924, + "Ġpolls": 23925, + "Ġencountered": 23926, + "ĠMarketable": 23927, + "_PASSWORD": 23928, + "716": 23929, + "_SELECT": 23930, + "ĠArabia": 23931, + "_clock": 23932, + "Ġvoy": 23933, + "Ġиз": 23934, + "Ġstir": 23935, + "isible": 23936, + "-effect": 23937, + ".created": 23938, + "Ġtoys": 23939, + "ĠTradable": 23940, + "Ġrust": 23941, + "Ġstrcpy": 23942, + "_timestamp": 23943, + "Ġtalented": 23944, + ",null": 23945, + "ĠJobs": 23946, + "ĠPortland": 23947, + "Ġweakness": 23948, + "Throw": 23949, + "ĠAngel": 23950, + "ä¿®": 23951, + "754": 23952, + "Ġuncert": 23953, + "ï¼īĊ": 23954, + "ĠìĿ´": 23955, + "Which": 23956, + "Ġ[-]:": 23957, + "Something": 23958, + "Ġconvicted": 23959, + "kle": 23960, + "edium": 23961, + "Ġbranches": 23962, + "Ġbases": 23963, + "ç®": 23964, + "Ġcomplexity": 23965, + "ĠFig": 23966, + ".reshape": 23967, + "$db": 23968, + "736": 23969, + "_CONST": 23970, + "ĠTes": 23971, + ".runtime": 23972, + "Ġdeny": 23973, + "ĠBSD": 23974, + "Ġkr": 23975, + "hatt": 23976, + "ĠStatic": 23977, + "Ġuniversities": 23978, + "Replace": 23979, + "Ġdrove": 23980, + "Ġadoles": 23981, + "_plugin": 23982, + "ĠLGBT": 23983, + "Ġtex": 23984, + "duction": 23985, + "751": 23986, + "799": 23987, + "EDI": 23988, + "ĠTed": 23989, + "_URI": 23990, + "Ġreception": 23991, + "arten": 23992, + ".Single": 23993, + "rice": 23994, + "scious": 23995, + "843": 23996, + "_bg": 23997, + "Ġwages": 23998, + "ĠServlet": 23999, + "UILayout": 24000, + "Ġformatted": 24001, + ".Mod": 24002, + "',Ċ": 24049, + "Ġexpanding": 24050, + "ĠHamilton": 24051, + "ĠContrib": 24052, + ".Tables": 24053, + "728": 24054, + "Activ": 24055, + "HH": 24056, + "ocommerce": 24057, + "_;": 24058, + "Ġamongst": 24059, + "owing": 24060, + "859": 24061, + "ĠCold": 24062, + "APH": 24063, + "Ġpsychological": 24064, + "_tensor": 24065, + "Ġpackaging": 24066, + "ĠSweden": 24067, + "Ġpare": 24068, + "Ġaggregate": 24069, + "Ġmoderate": 24070, + "862": 24071, + "_hand": 24072, + "Ġdesignated": 24073, + "Ġdrum": 24074, + "ĠgetUser": 24075, + "ĠCreek": 24076, + "_scope": 24077, + "ĠTransfer": 24078, + "ĠMarg": 24079, + "Ġfighters": 24080, + "Wnd": 24081, + "ĠSel": 24082, + "ĠLaunch": 24083, + "Ġemerging": 24084, + "iframe": 24085, + "ĠAdditional": 24086, + "Ġfears": 24087, + "Ġsatellite": 24088, + "_:": 24089, + "Ġdisposing": 24090, + "GetValue": 24091, + "HttpPost": 24092, + "ATIVE": 24093, + "ulary": 24094, + "Views": 24095, + "Ġattending": 24096, + "ĠTennessee": 24097, + "ĠMission": 24098, + "Ġmedication": 24099, + "ĠWy": 24100, + "ĠAnna": 24101, + "ع": 24102, + "ĠVertex": 24103, + ".types": 24104, + "Organ": 24105, + ".DataGridViewTextBoxColumn": 24106, + "ĠRS": 24107, + "Ġtempo": 24108, + "(App": 24109, + "892": 24110, + "VersionUID": 24111, + ".point": 24112, + "ĠDutch": 24113, + "Hours": 24114, + "LU": 24115, + "Ġquoted": 24116, + ".builder": 24117, + "ĠPerfect": 24118, + "ĠAlways": 24119, + "_two": 24120, + "Ġexclusively": 24121, + "ĠCra": 24122, + "ificar": 24123, + "ĠAWS": 24124, + "ingham": 24125, + "complex": 24126, + "kernel": 24127, + "Ġgravity": 24128, + "Ġwi": 24129, + "052": 24130, + "Ġoverview": 24131, + "661": 24132, + "ĠWant": 24133, + "ĠWP": 24134, + "(sh": 24135, + ".rotation": 24136, + "States": 24137, + "ĠTeen": 24138, + "_components": 24139, + "ìĪĺ": 24140, + "Received": 24141, + "Ġlyrics": 24142, + "rites": 24143, + "ĉĉĉĉĉĠ": 24144, + "-American": 24145, + "[num": 24146, + "/python": 24147, + "ĠUART": 24148, + "Ġapple": 24149, + "ĠJonathan": 24150, + "Ġmomentum": 24151, + "ั": 24152, + "Ĥ¹": 24153, + "Ġmich": 24154, + "andra": 24155, + "Ġbiological": 24156, + "ĠMens": 24157, + "Ġ%%": 24158, + "elsea": 24159, + "ĠMexican": 24160, + ".randint": 24161, + "Ġtale": 24162, + "ĠValidate": 24163, + "Ġdefeated": 24164, + ".htm": 24165, + "Ġcopper": 24166, + "=/": 24167, + "cosystem": 24168, + "Ġrip": 24169, + "decimal": 24170, + ".VISIBLE": 24171, + "ĠTa": 24172, + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉ": 24173, + "Ġdownloaded": 24174, + "environment": 24175, + "Ġnomine": 24176, + "building": 24177, + "ĠSpot": 24178, + "ipheral": 24179, + "Ġalto": 24180, + "quet": 24181, + "ĠFT": 24182, + "/get": 24183, + "/master": 24184, + "WIN": 24185, + "åħĥ": 24186, + "676": 24187, + "West": 24188, + "argc": 24189, + "Ġproducers": 24190, + "ĠMuch": 24191, + "_storage": 24192, + "credit": 24193, + "CONT": 24194, + "Ġvet": 24195, + "Ġvoices": 24196, + "('',": 24197, + "Ġinstruments": 24198, + "662": 24199, + "ĠMSG": 24200, + "esse": 24201, + "repository": 24202, + "omics": 24203, + "Ġdealer": 24204, + "Still": 24205, + "Ġbanner": 24206, + "ascii": 24207, + "Ġremarks": 24208, + "[js": 24209, + "Ġshorter": 24210, + "gulp": 24211, + "Ġmyster": 24212, + "Ġkun": 24213, + "ĠBird": 24214, + "Ġtiene": 24215, + "788": 24216, + "nut": 24217, + "ĠUm": 24218, + "Ġwise": 24219, + "Yeah": 24220, + "INESS": 24221, + "046": 24222, + "_begin": 24223, + "-heading": 24224, + "Course": 24225, + "ĠčĊčĊ": 24226, + "ombie": 24227, + "graded": 24228, + "ĠGPS": 24229, + "Ġże": 24230, + "Fit": 24231, + "caption": 24232, + "ön": 24233, + "/image": 24234, + "lia": 24235, + "(mod": 24236, + "Ġleak": 24237, + "enza": 24238, + "629": 24239, + "/H": 24240, + "ĠHappy": 24241, + "993": 24242, + "Dist": 24243, + "nx": 24244, + "ĠGovernor": 24245, + "(last": 24246, + "teacher": 24247, + "ĠSent": 24248, + "support": 24249, + "838": 24250, + "jectory": 24251, + "ĠÙħ": 24252, + "Registration": 24253, + "063": 24254, + "ĠGray": 24255, + ",false": 24256, + "Ġadjusted": 24257, + "(settings": 24258, + "'Ċ": 24324, + "-fold": 24325, + "æĬ": 24326, + "ĠBetter": 24327, + "Ġ\"\\<": 24328, + "spacing": 24329, + "Ġfurnished": 24330, + "913": 24331, + "oser": 24332, + "]}Ċ": 24333, + "Ġ$\"": 24334, + "pull": 24335, + ".Post": 24336, + "919": 24337, + "(ip": 24338, + "Ĺı": 24339, + ".front": 24340, + "nte": 24341, + "ĠFM": 24342, + "guid": 24343, + "844": 24344, + "Ġnegotiations": 24345, + "agonal": 24346, + "934": 24347, + "Ġtremend": 24348, + "ungeon": 24349, + "Adv": 24350, + "carousel": 24351, + "ÃŁe": 24352, + "_DESC": 24353, + "Ġhammer": 24354, + "áºŃ": 24355, + "ĠĠĠĠĠĠĠĠĊĊ": 24356, + "-core": 24357, + "-service": 24358, + "Ġcorners": 24359, + "ĠSF": 24360, + "pred": 24361, + ">A": 24362, + "ĠJLabel": 24363, + "Ġromantic": 24364, + "Ġtestimony": 24365, + "osc": 24366, + "ĠGeneration": 24367, + "asures": 24368, + "_internal": 24369, + "Ġprints": 24370, + "Ġ])Ċ": 24371, + "ĠCleveland": 24372, + "repo": 24373, + "Disc": 24374, + "677": 24375, + "762": 24376, + "Ġ\">Ċ": 24377, + "����": 24378, + "Ġnearest": 24379, + "591": 24380, + "_tb": 24381, + "(require": 24382, + "EOF": 24383, + "-child": 24384, + "Ġbudd": 24385, + ".XtraEditors": 24386, + "alties": 24387, + "723": 24388, + "\\\":\\\"": 24389, + "Words": 24390, + "917": 24391, + "Ġlocally": 24392, + "Ġpurchases": 24393, + "695": 24394, + "Drawer": 24395, + "extract": 24396, + "Ġexecut": 24397, + "}'.": 24398, + "userdata": 24399, + "Ġfocuses": 24400, + "-minute": 24401, + "764": 24402, + "ĠPublish": 24403, + "ogo": 24404, + "Ġmountains": 24405, + "Bot": 24406, + "}>{": 24407, + "Ġtension": 24408, + "rod": 24409, + "mesh": 24410, + "Ġtransformed": 24411, + ",R": 24412, + "()}Ċ": 24413, + ".long": 24414, + "Ġgorgeous": 24415, + "ĠSchedule": 24416, + "Ġoldest": 24417, + "Ġsubprocess": 24418, + "(IN": 24419, + "yect": 24420, + "ĠCooper": 24421, + "arness": 24422, + "ĠMonitor": 24423, + ".part": 24424, + "972": 24425, + "ĠNBC": 24426, + "668": 24427, + "Ġcotton": 24428, + "Ġhol": 24429, + "726": 24430, + "Ġrgba": 24431, + "ĠBio": 24432, + "Continue": 24433, + "Pod": 24434, + "Ġparticipating": 24435, + "clusions": 24436, + "(ByVal": 24437, + "734": 24438, + "ì": 24439, + "ĠHOW": 24440, + "_setopt": 24441, + "Ġaccompanying": 24442, + "091": 24443, + "aton": 24444, + "Ġ/\\": 24445, + "ĠAuthentication": 24446, + "ién": 24447, + "ĠBarack": 24448, + "/*.": 24449, + "Ġeager": 24450, + "ĠCancel": 24451, + "$": 24502, + "OLEAN": 24503, + "OKIE": 24504, + "IBILITY": 24505, + "UAGE": 24506, + "ĠSurvey": 24507, + "071": 24508, + "Ġresign": 24509, + "wing": 24510, + "Ġsecrets": 24511, + "Ġchips": 24512, + "JSONObject": 24513, + "Desktop": 24514, + "596": 24515, + "_SYMBOL": 24516, + "(resource": 24517, + "ĠĊ": 24518, + "Ġnewest": 24519, + "uli": 24520, + "Ġdesert": 24521, + "Ġdip": 24522, + "ĠPow": 24523, + "Ġequation": 24524, + "Ġpossibilities": 24525, + "ĠFed": 24526, + "osph": 24527, + "Ġ[%": 24528, + "Ġbubble": 24529, + "etherlands": 24530, + "793": 24531, + "Ġcement": 24532, + ".auto": 24533, + "_AN": 24534, + "âĢĻ.": 24535, + "selection": 24536, + "ĠBond": 24537, + "988": 24538, + "Den": 24539, + "-O": 24540, + ".getType": 24541, + "896": 24542, + ".Window": 24543, + "pres": 24544, + "Ġswinger": 24545, + "\"})Ċ": 24546, + "Ġpip": 24547, + "Ġmice": 24548, + "Ġcompound": 24549, + "-plugin": 24550, + "iko": 24551, + "Ġcenturies": 24552, + "icular": 24553, + "-inline": 24554, + "ĉkey": 24555, + ">\\<": 24556, + "ENSION": 24557, + "Ġ[čĊ": 24558, + "Ġprecisely": 24559, + "Ġété": 24560, + "ĠPast": 24561, + "ĠCambridge": 24562, + "-full": 24563, + "Ġanalyze": 24564, + "ĠSteven": 24565, + "Ġnem": 24566, + "due": 24567, + "oren": 24568, + "Ġmuscles": 24569, + "ijing": 24570, + "852": 24571, + "/-": 24572, + "ĠKennedy": 24573, + "597": 24574, + "RM": 24575, + "ossible": 24576, + "Ġactress": 24577, + "Ġdolor": 24578, + "914": 24579, + "å½ķ": 24580, + "Need": 24581, + ".toggle": 24582, + "ĠRace": 24583, + "wers": 24584, + ".material": 24585, + "ĠDue": 24586, + "ĠPel": 24587, + "#print": 24588, + "Ġindependence": 24589, + "exus": 24590, + "Shadow": 24591, + "Ġencoder": 24592, + "(level": 24593, + "ĠSwift": 24594, + ".doc": 24595, + "_selection": 24596, + "952": 24597, + "ĠserialVersionUID": 24598, + "945": 24599, + "Labels": 24600, + "Ġperformances": 24601, + ".Tag": 24602, + "ĠNHL": 24603, + "izen": 24604, + "/UIKit": 24605, + "991": 24606, + "_CONTROL": 24607, + "Ġearnings": 24608, + "975": 24609, + "ĠAlt": 24610, + "_HANDLE": 24611, + "Ctx": 24612, + "Ġpersu": 24613, + "Ġtran": 24614, + "ç¨": 24615, + "_CHANNEL": 24616, + "Ġsatisfaction": 24617, + "ĠGP": 24618, + "769": 24619, + "iox": 24620, + "mitt": 24621, + "lando": 24622, + "Ġpig": 24623, + "inals": 24624, + "ência": 24625, + "731": 24626, + "Surface": 24627, + "ĠUUID": 24628, + "Ġbeneficial": 24629, + "Ġsequences": 24630, + "ĉmemset": 24631, + "Ġmagical": 24632, + "«": 24633, + "Ġworn": 24634, + "ASC": 24635, + "popup": 24636, + "COMP": 24637, + "_before": 24638, + "eness": 24639, + "Ui": 24640, + "Les": 24641, + ".require": 24642, + ".Serializable": 24643, + "addGap": 24644, + "Ġauthorization": 24645, + "085": 24646, + ".pyplot": 24647, + "urray": 24648, + "latitude": 24649, + "845": 24650, + "frames": 24651, + "ajs": 24652, + "Ġcompass": 24653, + "Ġobservations": 24654, + "_sup": 24655, + ".environ": 24656, + "Ġtriple": 24657, + "ĠRuby": 24658, + "Ġdrain": 24659, + "_FILTER": 24660, + "San": 24661, + "UMP": 24662, + "NullException": 24663, + "ĠGab": 24664, + "owe": 24665, + "ĠTurkish": 24666, + "_sequence": 24667, + "ĠGrant": 24668, + "uela": 24669, + "Ġwo": 24670, + "Ġcube": 24671, + "iq": 24672, + "Ġdisorders": 24673, + "Ġextraordinary": 24674, + "Ġctrl": 24675, + "ĠSeq": 24676, + "entr": 24677, + "865": 24678, + "Ġsanctions": 24679, + "949": 24680, + "utsch": 24681, + "Reports": 24682, + "Ġinherit": 24683, + "Period": 24684, + "Ġphotography": 24685, + "ĠFramework": 24686, + "Ġspecialist": 24687, + "Ġ?ĊĊ": 24688, + "_selected": 24689, + ".Player": 24690, + "Ġallocation": 24691, + "(account": 24692, + "Ġstructural": 24693, + "vable": 24694, + "-offset": 24695, + ".AppCompatActivity": 24696, + "ам": 24697, + ".AddWithValue": 24698, + "Ġicons": 24699, + "Ġshutdown": 24700, + "_low": 24701, + "ĠCompare": 24702, + "ĠCe": 24703, + "=head": 24704, + "lam": 24705, + ".predict": 24706, + "_DEC": 24707, + "ĠSleep": 24708, + "ĠGratis": 24709, + "Ġsuggestion": 24710, + "ĠDEL": 24711, + "caff": 24712, + "avirus": 24713, + "Nothing": 24714, + "ŀĭ": 24715, + "Ġwidespread": 24716, + "Ġmechanisms": 24717, + "ĠtextAlign": 24718, + "occup": 24719, + "ĠRail": 24720, + ":NS": 24721, + "Ġfiber": 24722, + "Ġmk": 24723, + "Ġvintage": 24724, + "-long": 24725, + ".reduce": 24726, + ".Entities": 24727, + "(record": 24728, + "Ġpleasant": 24729, + "FRING": 24730, + ".Cells": 24731, + "OTT": 24732, + "ĉelseif": 24733, + "649": 24734, + "724": 24735, + "_confirm": 24736, + "ĠViewGroup": 24737, + "sym": 24738, + "Ġpray": 24739, + "Ġsuspected": 24740, + "Contains": 24741, + "983": 24742, + "Ġborders": 24743, + "ĠcomponentDid": 24744, + "ASSERT": 24745, + "Ġinfinite": 24746, + "-order": 24747, + "Ġhello": 24748, + "ĠGrade": 24749, + ".currentTimeMillis": 24750, + "apolis": 24751, + "zh": 24752, + "ĉObject": 24753, + ":\\\\": 24754, + "HO": 24755, + "valuation": 24756, + "Ġvocab": 24757, + "719": 24758, + "Ġcoupon": 24759, + "atabases": 24760, + ".GetType": 24761, + "Learn": 24762, + "792": 24763, + "]=\"": 24764, + "ĠGary": 24765, + "otive": 24766, + "Ġash": 24767, + "Ġbib": 24768, + "XXXX": 24769, + "Ġbalanced": 24770, + "VALUE": 24771, + "ĠNat": 24772, + "_Ad": 24773, + "<": 24930, + "Ġfool": 24931, + "Ġesk": 24932, + ".Null": 24933, + "ĠDies": 24934, + "_OUTPUT": 24935, + "_TYPED": 24936, + "Ġpainted": 24937, + "673": 24938, + "735": 24939, + "Ġsophistic": 24940, + "ĠBear": 24941, + "*n": 24942, + "_PACK": 24943, + "Ġdelivering": 24944, + "ĠCOUNT": 24945, + "åįķ": 24946, + "Ġjeg": 24947, + "-car": 24948, + "fname": 24949, + "Ġranging": 24950, + "848": 24951, + "ĠNeg": 24952, + "/******/": 24953, + "ĠCHAR": 24954, + "Ġultra": 24955, + "Grad": 24956, + "=t": 24957, + "Ġjudges": 24958, + "ĠDise": 24959, + "anners": 24960, + "985": 24961, + "891": 24962, + "861": 24963, + "Ġscal": 24964, + "_cal": 24965, + "ĠCONNECTION": 24966, + "_embed": 24967, + "(fn": 24968, + "ĠCraft": 24969, + "047": 24970, + "ĠPas": 24971, + "\")->": 24972, + ".convert": 24973, + ".resource": 24974, + "ĠSTATUS": 24975, + "ông": 24976, + "ĠTit": 24977, + "Ġclassroom": 24978, + "ĠArchitect": 24979, + "ĠKings": 24980, + "Ġsteady": 24981, + "/*!Ċ": 24982, + "ĠGene": 24983, + ")\";Ċ": 24984, + "icia": 24985, + "stan": 24986, + "ĠConstruction": 24987, + "umper": 24988, + "951": 24989, + "wc": 24990, + "ĠCBS": 24991, + "inging": 24992, + "-party": 24993, + "(driver": 24994, + "MARK": 24995, + "082": 24996, + "Ġnested": 24997, + "eward": 24998, + "Ġdependency": 24999, + "Ġmales": 25000, + "928": 25001, + "ĠONE": 25002, + "ĠProduction": 25003, + "][$": 25004, + "ãĥ¼ãĥ": 25005, + "_LOAD": 25006, + "ĠBol": 25007, + "elry": 25008, + "831": 25009, + "łéϤ": 25010, + "ĠRequire": 25011, + "Ġplacing": 25012, + "xxx": 25013, + "CALE": 25014, + "Ġthumb": 25015, + "824": 25016, + "Choose": 25017, + "Ġprototype": 25018, + "VOID": 25019, + "Ġlesbian": 25020, + "741": 25021, + "Ġtraits": 25022, + "Sharp": 25023, + "Ġconsume": 25024, + "Truth": 25025, + "ĠactionPerformed": 25026, + "ĠEnvironmental": 25027, + "ĠDean": 25028, + "Ġestado": 25029, + "same": 25030, + "Ġnumeric": 25031, + "Ġtransit": 25032, + ".Email": 25033, + "-side": 25034, + "_RUN": 25035, + "ĠVillage": 25036, + "_OPEN": 25037, + "è¦": 25038, + ".rem": 25039, + "-warning": 25040, + "anya": 25041, + "PropertyChanged": 25042, + "Ġ(!_": 25043, + "(check": 25044, + "ilia": 25045, + "ĠSoft": 25046, + "steps": 25047, + "ĠMadrid": 25048, + "MemoryWarning": 25049, + "Ġhandlers": 25050, + "Ġexperiencing": 25051, + "Ġinspect": 25052, + "buttons": 25053, + "ReceiveMemoryWarning": 25054, + "chemy": 25055, + "Links": 25056, + "Ġurllib": 25057, + ".SystemColors": 25058, + "ĠEigen": 25059, + "Ġpunishment": 25060, + ":UIControl": 25061, + "bara": 25062, + "-set": 25063, + "Ġ}čĊčĊčĊ": 25064, + "Ġtolerance": 25065, + "Ġinterfaces": 25066, + ".redirect": 25067, + "ighbors": 25068, + "csrf": 25069, + "_background": 25070, + ".Utils": 25071, + "_HT": 25072, + "692": 25073, + "ĠInterest": 25074, + "imos": 25075, + "Ġgrants": 25076, + "083": 25077, + "Ġexamined": 25078, + "ÐĶ": 25079, + "Ġcf": 25080, + "forge": 25081, + "backs": 25082, + "ĠObjects": 25083, + "_sent": 25084, + ".entry": 25085, + "ĠTHEN": 25086, + "ellido": 25087, + "cia": 25088, + ",res": 25089, + "659": 25090, + "681": 25091, + "/stdc": 25092, + ".nd": 25093, + "(Int": 25094, + "ĠAuthors": 25095, + "ĠAppCompatActivity": 25096, + "'{": 25097, + "Ġmedi": 25098, + "Music": 25099, + "igm": 25100, + "ceipt": 25101, + "Ġauss": 25102, + "Ġtargeting": 25103, + "ĠKeys": 25104, + "hn": 25105, + ":]Ċ": 25106, + "Ġmineral": 25107, + "î": 25108, + ".ca": 25109, + "761": 25110, + "omed": 25111, + "Ġsheets": 25112, + "Ġcamb": 25113, + "Ġdeadly": 25114, + ".inject": 25115, + "(unit": 25116, + "ĠSelection": 25117, + ".gms": 25118, + "(connection": 25119, + "Ġ$(\"": 25120, + "émon": 25121, + "ĠCurrently": 25122, + "pte": 25123, + "_paths": 25124, + "847": 25125, + "leaf": 25126, + "Ġimplications": 25127, + "posal": 25128, + "ä½į": 25129, + "[/": 25130, + "ancia": 25131, + "éĽ": 25132, + "mul": 25133, + "cie": 25134, + "Ġgeile": 25135, + "679": 25136, + "imals": 25137, + "UIView": 25138, + "Ġsurre": 25139, + "serialize": 25140, + "ISO": 25141, + "Ġarbitrary": 25142, + "Ġsockaddr": 25143, + ".fn": 25144, + "ĠMerc": 25145, + "Ġcasting": 25146, + "KeyDown": 25147, + "ĠnewValue": 25148, + "opens": 25149, + "717": 25150, + "Todo": 25151, + "Ġflexibility": 25152, + "ĉĉĉĉĠĠ": 25153, + "Velocity": 25154, + "ún": 25155, + "rowing": 25156, + "Ġcomputed": 25157, + "`)Ċ": 25158, + "statement": 25159, + "Ġri": 25160, + "_cart": 25161, + "Low": 25162, + "transfer": 25163, + ".nav": 25164, + "Ġgrave": 25165, + "ĠDoor": 25166, + "ĉalert": 25167, + "691": 25168, + "698": 25169, + ".subscribe": 25170, + "-profile": 25171, + "ĉbase": 25172, + "ĠâĪĴ": 25173, + "__ĊĊ": 25174, + "Ġengineers": 25175, + "Ġexplosion": 25176, + "Ġdari": 25177, + "682": 25178, + "ĉLog": 25179, + "onal": 25180, + "Ġisolated": 25181, + "{i": 25182, + "ĠMsg": 25183, + "Future": 25184, + "Ġracist": 25185, + "-wrap": 25186, + "ĠVers": 25187, + "borg": 25188, + "ISION": 25189, + "ĠÑĢаÐ": 25190, + "ĠYan": 25191, + "836": 25192, + "initWith": 25193, + "Ġnomin": 25194, + "(empty": 25195, + "ÃŃn": 25196, + "ãĤ¤": 25197, + "ĉwidth": 25198, + "Ġchamber": 25199, + "/ajax": 25200, + "EMP": 25201, + "093": 25202, + "Ġneces": 25203, + "ivos": 25204, + "logic": 25205, + "*)&": 25206, + "cripts": 25207, + "976": 25208, + "RowAt": 25209, + "053": 25210, + "iblings": 25211, + "Ġears": 25212, + "Ġcomputing": 25213, + "Ġmaker": 25214, + "ĠNeither": 25215, + "breadcrumb": 25216, + "Ġserialize": 25217, + "ĠWithin": 25218, + "Ġdell": 25219, + "_TRACE": 25220, + "092": 25221, + "=a": 25222, + "Ġwishes": 25223, + "-inch": 25224, + "ĠDor": 25225, + "Ġinnocent": 25226, + "ĠDol": 25227, + "Ġintens": 25228, + "forced": 25229, + "054": 25230, + "ĠBIT": 25231, + "Ġphotographs": 25232, + "Ġcasa": 25233, + "ĠLen": 25234, + "\\Framework": 25235, + ".Simple": 25236, + "Ġdear": 25237, + "895": 25238, + ")/(": 25239, + "ippi": 25240, + "Ġowns": 25241, + "Players": 25242, + "Ġproposals": 25243, + ".pi": 25244, + "usalem": 25245, + "Damage": 25246, + "Ġcalories": 25247, + "ĠCreative": 25248, + "Ġ[$": 25249, + "Ġ//čĊ": 25250, + "786": 25251, + "AndView": 25252, + "ème": 25253, + ".custom": 25254, + "_factory": 25255, + "commands": 25256, + "_look": 25257, + "Ġstrcmp": 25258, + "YN": 25259, + "aired": 25260, + "Ġaudit": 25261, + "оÑģÑĤ": 25262, + "ĠReverse": 25263, + "ropriate": 25264, + "etics": 25265, + "';Ċ": 25348, + "Ġpepper": 25349, + "989": 25350, + "Ġshed": 25351, + "ĠMedium": 25352, + "ĠCookie": 25353, + "889": 25354, + "Ġoverseas": 25355, + "edor": 25356, + "asurement": 25357, + "766": 25358, + "åŃĺ": 25359, + "Ġ'.'": 25360, + "Ġphp": 25361, + "ĠPROC": 25362, + "Ġexceptional": 25363, + "(th": 25364, + "ĠJet": 25365, + "Ġoccupied": 25366, + ".setImage": 25367, + "ĠRelated": 25368, + "ucker": 25369, + "Members": 25370, + "PRINT": 25371, + "ĠGlo": 25372, + "_VIEW": 25373, + "}\",Ċ": 25374, + "Ġadoption": 25375, + "[])Ċ": 25376, + "842": 25377, + "ĠMissouri": 25378, + "ĠLincoln": 25379, + "erald": 25380, + "Popup": 25381, + "Ġfate": 25382, + "-bootstrap": 25383, + "fections": 25384, + "ĠPoll": 25385, + "_ARGS": 25386, + "inance": 25387, + "697": 25388, + "-home": 25389, + ".),": 25390, + "_done": 25391, + "694": 25392, + ":ĊĊĊ": 25393, + "Ġdiscussing": 25394, + "ĠSQLException": 25395, + "Ġelectro": 25396, + "ĉreq": 25397, + "Ġzw": 25398, + "886": 25399, + "Ġlui": 25400, + "932": 25401, + "Ġovernight": 25402, + "$user": 25403, + "ĠWAY": 25404, + "Ġallerg": 25405, + "Ġdisappointed": 25406, + "Ġradiation": 25407, + "Ġimpressed": 25408, + "ificates": 25409, + "Ġtob": 25410, + "CLASS": 25411, + "Ġcuda": 25412, + "_det": 25413, + "-post": 25414, + "ulu": 25415, + "Translation": 25416, + "-hand": 25417, + ".year": 25418, + "ĠMongo": 25419, + "Ġunclear": 25420, + ".engine": 25421, + "WEBPACK": 25422, + "rices": 25423, + "_ACCESS": 25424, + "Ġholidays": 25425, + "percent": 25426, + ".Identity": 25427, + "ĠGov": 25428, + "Ġpassionate": 25429, + "!!.": 25430, + "ĠGreece": 25431, + "plusplus": 25432, + "'));": 25433, + "GP": 25434, + "Ġexcit": 25435, + ".tabPage": 25436, + "_cond": 25437, + "Ġsponsor": 25438, + "MODULE": 25439, + "_proc": 25440, + "Ġ$Ċ": 25441, + "Ġrational": 25442, + ".Tool": 25443, + "Ġihr": 25444, + "cca": 25445, + "åĵģ": 25446, + "ĠEstate": 25447, + "IBUTE": 25448, + "ActionPerformed": 25449, + "ĠSolar": 25450, + "¦Ĥ": 25451, + "Ġequity": 25452, + "tid": 25453, + "938": 25454, + "Ġrecip": 25455, + ".simple": 25456, + "mk": 25457, + "689": 25458, + "ĠLuke": 25459, + "ĠGuardian": 25460, + "Ġencrypted": 25461, + "Ġdominant": 25462, + ".place": 25463, + "ĠNV": 25464, + "839": 25465, + "Ġtongue": 25466, + "(Get": 25467, + "Ġstainless": 25468, + ".Play": 25469, + "Ġeb": 25470, + "aci": 25471, + ".buffer": 25472, + "readcrumbs": 25473, + "Ġvaccine": 25474, + "prom": 25475, + "979": 25476, + "ĠuserInfo": 25477, + "Ġslug": 25478, + "SerializedName": 25479, + "-wide": 25480, + "Ġreactions": 25481, + "ĠYang": 25482, + "ĠAdds": 25483, + "(userId": 25484, + "Ġplates": 25485, + "ĠMEM": 25486, + "Ġbail": 25487, + "Inside": 25488, + "eted": 25489, + "Ġelsif": 25490, + "Ġsake": 25491, + "Ġcycles": 25492, + "ĠìĹ": 25493, + "ĉI": 25494, + "-collapse": 25495, + "841": 25496, + "ĠGMT": 25497, + "814": 25498, + "Declaration": 25499, + "Ġgros": 25500, + "Ġreaches": 25501, + "Ġcustody": 25502, + "Until": 25503, + "753": 25504, + "856": 25505, + "tu": 25506, + "ĠChen": 25507, + "Ġnx": 25508, + "(addr": 25509, + "ĠOffer": 25510, + "Ġcolleg": 25511, + "assador": 25512, + "674": 25513, + "Ġmapper": 25514, + "854": 25515, + "ĠSIGNAL": 25516, + "ĠBloom": 25517, + "ĠHoll": 25518, + "ĠImper": 25519, + "-des": 25520, + "_site": 25521, + "Proc": 25522, + "Equ": 25523, + "Ġatomic": 25524, + "ĠWoman": 25525, + "sent": 25526, + "738": 25527, + "817": 25528, + "scar": 25529, + "Ġintelligent": 25530, + "ĠGetting": 25531, + "ĠRegistration": 25532, + "ĠPhill": 25533, + "Ġkiller": 25534, + "unicode": 25535, + "ĊĉĉĊ": 25536, + "ĠJacob": 25537, + "ĠConst": 25538, + "Ġlocate": 25539, + "Ġcaus": 25540, + "749": 25541, + "ĠScholar": 25542, + "Ġconstitutional": 25543, + "Ġinflation": 25544, + "ĠGot": 25545, + "=array": 25546, + "endum": 25547, + "Ġtranslated": 25548, + "Ġdivorce": 25549, + "Entries": 25550, + "Ġsor": 25551, + "ĠQuote": 25552, + "irlines": 25553, + "UK": 25554, + "Ġexcel": 25555, + "(opt": 25556, + "ĠADV": 25557, + ",:,": 25558, + "Ġcontacted": 25559, + "742": 25560, + "ĠDA": 25561, + "Ġrings": 25562, + "ĠIndustrial": 25563, + ".getContext": 25564, + "Ġforgotten": 25565, + "ĠTan": 25566, + "Ġpants": 25567, + "Ġov": 25568, + "Ġdecoder": 25569, + "ĠPartial": 25570, + "Ġvc": 25571, + "Ġbattles": 25572, + "Arial": 25573, + "FRINGEMENT": 25574, + "irates": 25575, + ",w": 25576, + "aintenance": 25577, + "ĠOd": 25578, + "ĠTechnologies": 25579, + "åīį": 25580, + "ĠCarter": 25581, + ".findAll": 25582, + "Nome": 25583, + "Ben": 25584, + "ĠUsage": 25585, + "ĠPicture": 25586, + "Ġbadly": 25587, + "_panel": 25588, + "Ġpatent": 25589, + "ĠProtocol": 25590, + "lotte": 25591, + "ĉplayer": 25592, + "jections": 25593, + "746": 25594, + "Ġdou": 25595, + "_release": 25596, + "urniture": 25597, + "_tax": 25598, + "ĠFields": 25599, + ".dataset": 25600, + "_master": 25601, + "CLUDE": 25602, + "ĠPharm": 25603, + "bst": 25604, + "Ġoperational": 25605, + ".cell": 25606, + "Ġidentifying": 25607, + "Ġjwt": 25608, + "tuple": 25609, + "ĠTC": 25610, + "ĠCro": 25611, + "936": 25612, + "ixmap": 25613, + "-components": 25614, + "general": 25615, + "Ġoz": 25616, + "_De": 25617, + "_double": 25618, + "ĠToo": 25619, + "088": 25620, + ".ViewGroup": 25621, + "879": 25622, + "gate": 25623, + "dings": 25624, + "photos": 25625, + "Ġgrande": 25626, + "ollect": 25627, + "_lin": 25628, + "Ġawful": 25629, + "filters": 25630, + "Ġalternate": 25631, + "esp": 25632, + "Ġcompress": 25633, + "eo": 25634, + "ĠScale": 25635, + "Ġindirect": 25636, + "Ġinvoice": 25637, + "ĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊ": 25638, + "Starting": 25639, + "ĠPlayers": 25640, + "iele": 25641, + ".then": 25642, + "981": 25643, + "Ord": 25644, + "ĠTuple": 25645, + "Ġbout": 25646, + "ĠStatistics": 25647, + "Preview": 25648, + "Ġpuzzle": 25649, + "ĠWidth": 25650, + "STATE": 25651, + "Ġoverlay": 25652, + "ĉon": 25653, + "Ġinfr": 25654, + "Ġsmallest": 25655, + "locked": 25656, + "ÑĤо": 25657, + "ssl": 25658, + "779": 25659, + "Ġdeemed": 25660, + "Ġsco": 25661, + "reck": 25662, + "ĠjButton": 25663, + "Ġmissions": 25664, + "871": 25665, + "ç§°": 25666, + ".SelectedIndex": 25667, + "TABLE": 25668, + "Sept": 25669, + "Ġacknowledge": 25670, + "Ġstrtotime": 25671, + "ĠTell": 25672, + "ĠDak": 25673, + "Ġaluminum": 25674, + "Ġfence": 25675, + "ĠStars": 25676, + "CONFIG": 25677, + "Ġretrofit": 25678, + "Ġemphasis": 25679, + "/header": 25680, + "ĠSomething": 25681, + "inished": 25682, + "='\".$": 25683, + "ĠValidators": 25684, + "Ġpolar": 25685, + "sections": 25686, + "944": 25687, + ".aspx": 25688, + "Ġaspir": 25689, + ".Mock": 25690, + "CodeGen": 25691, + "Ġpeut": 25692, + "971": 25693, + "Ġaccepting": 25694, + "Ġbacking": 25695, + "Picture": 25696, + "/ap": 25697, + "ег": 25698, + "_SEC": 25699, + "-use": 25700, + "annotation": 25701, + "Ġcognitive": 25702, + "Ġgrip": 25703, + "hour": 25704, + "ĠLegal": 25705, + "Ġepic": 25706, + ".toolStrip": 25707, + ".notify": 25708, + ".Last": 25709, + "ORIZ": 25710, + "Middleware": 25711, + "criptions": 25712, + "lash": 25713, + "_FOUND": 25714, + "ĠLiverpool": 25715, + "Ġ{}\",": 25716, + "931": 25717, + "Install": 25718, + "Ġnit": 25719, + "Ġfigured": 25720, + "[len": 25721, + ".Win": 25722, + ".platform": 25723, + "853": 25724, + "Ġgambling": 25725, + "(dt": 25726, + "avery": 25727, + "ĉinclude": 25728, + "Whether": 25729, + "Routing": 25730, + "Ġtherap": 25731, + "Remote": 25732, + "ĠLoss": 25733, + "yll": 25734, + "Ġapproached": 25735, + "ĠVehicle": 25736, + "ĠAlpha": 25737, + "Ġvocê": 25738, + "answers": 25739, + "NSDictionary": 25740, + "954": 25741, + "consider": 25742, + "unused": 25743, + "ĠFan": 25744, + "orable": 25745, + "fre": 25746, + "873": 25747, + "ĠDISCLAIM": 25748, + "ĠActor": 25749, + ".]": 25750, + "toHave": 25751, + ".userId": 25752, + "Ġspeeds": 25753, + "eway": 25754, + "Ġrecurs": 25755, + "Ġг": 25756, + "_priv": 25757, + "!âĢĿĊĊ": 25758, + "Choice": 25759, + "Ġsettle": 25760, + "Ġplanes": 25761, + "'},": 25762, + "Tom": 25763, + "ITER": 25764, + "!\"Ċ": 25765, + "å»": 25766, + "achelor": 25767, + "Ġseparation": 25768, + "Ġdal": 25769, + "adj": 25770, + "Ġregisters": 25771, + "riz": 25772, + "ĠNotice": 25773, + "Ġlu": 25774, + "Ġcourage": 25775, + "Ġaxes": 25776, + "cellent": 25777, + ".async": 25778, + "073": 25779, + "Ġcompatibility": 25780, + "ç«": 25781, + "Ġ!ĊĊ": 25782, + "ĉtitle": 25783, + "YLE": 25784, + "ĉmessage": 25785, + "UUID": 25786, + "OLDER": 25787, + "ĠHH": 25788, + "ĠStyleSheet": 25789, + "Ġaccessed": 25790, + ".validation": 25791, + "tasks": 25792, + "Ġpollution": 25793, + ".canvas": 25794, + "Ġingredient": 25795, + "ĠCabin": 25796, + "Ah": 25797, + "oldown": 25798, + "ĠNOI": 25799, + "ĠÃĹ": 25800, + "[f": 25801, + "educ": 25802, + "yalty": 25803, + "(not": 25804, + "_State": 25805, + "933": 25806, + "amen": 25807, + "795": 25808, + "739": 25809, + "Ġdao": 25810, + "udad": 25811, + "ellers": 25812, + "}&": 25813, + "licity": 25814, + "_WINDOW": 25815, + "Ġtatto": 25816, + "valor": 25817, + ".Range": 25818, + "Ġreferenced": 25819, + "ĠReserve": 25820, + "Money": 25821, + "874": 25822, + "SCRIPT": 25823, + "/product": 25824, + "choices": 25825, + "Ġtin": 25826, + "ãĤĵ": 25827, + "918": 25828, + "Ġseparator": 25829, + "Ġpkg": 25830, + "ammed": 25831, + "ĠMAT": 25832, + "!!ĊĊ": 25833, + "Ġraid": 25834, + "Ġmotivation": 25835, + "ĠXP": 25836, + "ĠBackground": 25837, + "ĠQuaternion": 25838, + ".defineProperty": 25839, + "iker": 25840, + "ĉparent": 25841, + "ĠOriginally": 25842, + "antage": 25843, + "ĠHans": 25844, + "Ġtimeline": 25845, + ".cur": 25846, + "opic": 25847, + "ĠSequ": 25848, + "must": 25849, + "ĠCoal": 25850, + "Ġformatter": 25851, + "_RGB": 25852, + "Ġ_(\"": 25853, + "'}),Ċ": 25854, + "Ġ=================": 25855, + "ĠFUNCTION": 25856, + "Ġlng": 25857, + "icates": 25858, + "live": 25859, + "_engine": 25860, + "Ġtowns": 25861, + "868": 25862, + "'))ĊĊ": 25863, + "ĠPK": 25864, + "(api": 25865, + "ĉscanf": 25866, + "089": 25867, + "packet": 25868, + ".phone": 25869, + "áĢ": 25870, + "ĠAndy": 25871, + "_NAMES": 25872, + "982": 25873, + "PLY": 25874, + "955": 25875, + "Ġmins": 25876, + "imi": 25877, + "Ġbrick": 25878, + "Ġblade": 25879, + ".stdout": 25880, + "}`;Ċ": 25881, + "Shift": 25882, + "ĉsb": 25883, + "ĠChecks": 25884, + "Ġphenomenon": 25885, + "Avatar": 25886, + "Ġministry": 25887, + "rose": 25888, + "ĉFile": 25889, + "878": 25890, + "Ġtitled": 25891, + "(LOG": 25892, + "Ġgan": 25893, + "design": 25894, + "(),čĊ": 25895, + "Ġbones": 25896, + "stm": 25897, + "ÅĽÄĩ": 25898, + "ĠInputStream": 25899, + "Ġvolunt": 25900, + "ĠSerializable": 25901, + "Ġfighter": 25902, + "ĠDrag": 25903, + "Twitter": 25904, + "Ġsubsid": 25905, + "ç¼": 25906, + "Ġforums": 25907, + ".loading": 25908, + "logged": 25909, + "_this": 25910, + "Ġterrain": 25911, + "Ġirre": 25912, + "ĠIng": 25913, + "ĠCN": 25914, + "_objects": 25915, + ".uid": 25916, + "Ġconsciousness": 25917, + "TINGS": 25918, + "ĠGall": 25919, + "Ġportray": 25920, + "056": 25921, + "ĠDeveloper": 25922, + "Ġparticipant": 25923, + "Ġ\";čĊ": 25924, + "/model": 25925, + "794": 25926, + "ĠOperations": 25927, + "^\\": 25928, + "ĠLater": 25929, + "Ġraises": 25930, + "-none": 25931, + ".meta": 25932, + "='.$": 25933, + "Finished": 25934, + "Ġreplacing": 25935, + "Ġsampling": 25936, + "ĠJen": 25937, + "\"There": 25938, + "REAL": 25939, + "ALE": 25940, + "ìĬ¤": 25941, + "Orders": 25942, + "_parameter": 25943, + "ĠOlympic": 25944, + "Ġtrès": 25945, + "Ġarena": 25946, + "iol": 25947, + ";?>": 25948, + "Ġimpacts": 25949, + "ĠWS": 25950, + ":get": 25951, + "Ġflights": 25952, + "ĠRussell": 25953, + "camera": 25954, + "Fn": 25955, + "sigma": 25956, + "Ġforcing": 25957, + "Ġlocals": 25958, + "Ġdeparture": 25959, + "Ġcelebration": 25960, + "ĠSay": 25961, + "884": 25962, + "ï¼Ĵ": 25963, + "ĠHills": 25964, + ".hasOwnProperty": 25965, + "Ġtypings": 25966, + ".API": 25967, + "Ġdonation": 25968, + "OperationException": 25969, + ".Activity": 25970, + "cplusplus": 25971, + "ĠCharlie": 25972, + "Ġimported": 25973, + "Ġdann": 25974, + "Ġoccasions": 25975, + "Ġimplementing": 25976, + "Ġpurple": 25977, + ".dialog": 25978, + "SQLException": 25979, + "erno": 25980, + "Ġwars": 25981, + "Ġpaste": 25982, + "Ġdecreased": 25983, + "Ġharsh": 25984, + "Ġelabor": 25985, + "inputs": 25986, + "ĠViews": 25987, + "ĠerrorMessage": 25988, + "_mul": 25989, + "ĉwrite": 25990, + "ĠCop": 25991, + "ĠAnnual": 25992, + "(button": 25993, + "Ġvida": 25994, + "bars": 25995, + "ĠHarvard": 25996, + "ĉexpect": 25997, + "Ġindexes": 25998, + "Ġdocumentary": 25999, + "Ġflesh": 26000, + "ORLD": 26001, + "ĠDelta": 26002, + "MAND": 26003, + "Brush": 26004, + "-column": 26005, + "Ġdevelopments": 26006, + "974": 26007, + "783": 26008, + "methodVisitor": 26009, + "slice": 26010, + "ĠPDO": 26011, + "Ġinvesting": 26012, + "867": 26013, + "irable": 26014, + "Ġxmlns": 26015, + "ï¼Ľ": 26016, + "arta": 26017, + "Ġtheories": 26018, + "_city": 26019, + "Ġ$__": 26020, + "Creating": 26021, + "(pr": 26022, + "Dropdown": 26023, + "ismatch": 26024, + "ĠNET": 26025, + "926": 26026, + "'])){Ċ": 26027, + "ĠValues": 26028, + "ĠSEO": 26029, + "ĠSTAT": 26030, + "Ġecosystem": 26031, + "Ġtempt": 26032, + "Ġ\\\\": 26033, + "Ġ//{Ċ": 26034, + "ĠChristopher": 26035, + "ĠKentucky": 26036, + "ĠHttpServletResponse": 26037, + "Ġhybrid": 26038, + "yon": 26039, + "Ġfeeding": 26040, + "ĠExtra": 26041, + "Norm": 26042, + "ITCH": 26043, + "ĠSean": 26044, + "ĠUpload": 26045, + "mun": 26046, + "pur": 26047, + "Ġpersistent": 26048, + "ĠIDC": 26049, + "ĠPerform": 26050, + "863": 26051, + ".merge": 26052, + "_room": 26053, + "Meanwhile": 26054, + "!='": 26055, + "ĠWel": 26056, + "ArgsConstructor": 26057, + "887": 26058, + ".Database": 26059, + "Ġcounting": 26060, + "()*": 26061, + "ĶåĽŀ": 26062, + "ĠTOP": 26063, + "mill": 26064, + "ĠDT": 26065, + "IGNED": 26066, + "956": 26067, + "ĠKB": 26068, + "Ġcomply": 26069, + "South": 26070, + "_collection": 26071, + "Chapter": 26072, + "Ġexplaining": 26073, + "_AM": 26074, + "_ts": 26075, + "cards": 26076, + "Ġquel": 26077, + "Ġpole": 26078, + "Ġtouchdown": 26079, + "ĠOthers": 26080, + "Ġpeers": 26081, + "ĠTypeError": 26082, + "763": 26083, + "Ġsixth": 26084, + "Ġcheer": 26085, + "Ġdispute": 26086, + "963": 26087, + "893": 26088, + "usc": 26089, + ")],": 26090, + "thumb": 26091, + "Ġhiding": 26092, + "ĠSIG": 26093, + "likes": 26094, + "ĠPAGE": 26095, + ".Reflection": 26096, + "Ġheadquarters": 26097, + "TING": 26098, + "ĠGhost": 26099, + "MLE": 26100, + "$Ċ": 26101, + "Ġcontrary": 26102, + "extend": 26103, + "']).": 26104, + "FFECT": 26105, + "ĠPinterest": 26106, + "úmero": 26107, + "ricane": 26108, + "ĉsession": 26109, + "Ġcrystal": 26110, + "-Control": 26111, + "overnment": 26112, + "ograf": 26113, + "961": 26114, + "-action": 26115, + "volume": 26116, + "ften": 26117, + "Ġuncon": 26118, + "Ġanimate": 26119, + "Ġlease": 26120, + "scr": 26121, + "Ġrefuse": 26122, + "ãĢĭ": 26123, + "ftp": 26124, + "information": 26125, + "Ġevaluated": 26126, + "Ġinjection": 26127, + "Ġjack": 26128, + "Ġworkshop": 26129, + "注": 26130, + "PTH": 26131, + "ĠTs": 26132, + "offer": 26133, + "ĉos": 26134, + "Ġkingdom": 26135, + "Missing": 26136, + "Ġlawmakers": 26137, + "extField": 26138, + "Ġsinging": 26139, + "abi": 26140, + "/client": 26141, + ".media": 26142, + "ATEGORY": 26143, + "Signature": 26144, + "%',Ċ": 26145, + "ĠFuck": 26146, + "][:": 26147, + "Ġsensors": 26148, + "/com": 26149, + "ĠPrimary": 26150, + ".SQL": 26151, + "_program": 26152, + "Ġpills": 26153, + "Ġintegral": 26154, + "Ġfleet": 26155, + "Ġdropping": 26156, + ".sl": 26157, + "Been": 26158, + "Ġpets": 26159, + "Ġadvised": 26160, + "Ġdragon": 26161, + "_EDIT": 26162, + "(im": 26163, + "939": 26164, + "FER": 26165, + "ĠDrug": 26166, + "(random": 26167, + "Ġcompression": 26168, + "oust": 26169, + "[%": 26170, + "Ġbuyer": 26171, + "hop": 26172, + "Roles": 26173, + "manage": 26174, + "Ġpainful": 26175, + "ĠBranch": 26176, + "-modal": 26177, + "enant": 26178, + "ĠMesh": 26179, + "/font": 26180, + "ĠGraham": 26181, + "Ġâĺ": 26182, + "Ġnc": 26183, + "ĠFrancis": 26184, + "Ġspecification": 26185, + "Ġdamages": 26186, + "-config": 26187, + "Ġtheoret": 26188, + "secure": 26189, + "_multi": 26190, + "aceutical": 26191, + "Ġdemanding": 26192, + "enne": 26193, + "ISTS": 26194, + "094": 26195, + "()));ĊĊ": 26196, + "Reason": 26197, + "Recent": 26198, + "phase": 26199, + "Ġpsy": 26200, + "_MAN": 26201, + "Ġvolunteer": 26202, + "å¿": 26203, + "istributed": 26204, + "lio": 26205, + "Ġproductivity": 26206, + "_comm": 26207, + "Spring": 26208, + "nis": 26209, + ".weight": 26210, + "ĠCancer": 26211, + "Alloc": 26212, + "ĠTweet": 26213, + "Ġseparately": 26214, + "ĉcheck": 26215, + "_properties": 26216, + ".Unit": 26217, + "829": 26218, + "_CLK": 26219, + "Ġgt": 26220, + "Ġ();ĊĊ": 26221, + "Ġhandy": 26222, + "834": 26223, + "ĠThompson": 26224, + "Ġunnecessary": 26225, + "ĠReader": 26226, + "894": 26227, + "GN": 26228, + "=request": 26229, + "ĠUtility": 26230, + ".Repository": 26231, + "ĠAx": 26232, + "hydr": 26233, + "791": 26234, + "ieu": 26235, + "Ġthy": 26236, + "Ġlt": 26237, + "_mail": 26238, + "ä¿®æĶ¹": 26239, + "ailand": 26240, + "ĠPhilip": 26241, + "Ġbitter": 26242, + "Ġbetting": 26243, + "837": 26244, + "Ġtimed": 26245, + "ocks": 26246, + "076": 26247, + "'a": 26248, + "Ġalgorithms": 26249, + "Ġreinterpret": 26250, + "Ġtoss": 26251, + "rogen": 26252, + "Ġhoped": 26253, + "(selected": 26254, + "Ġventure": 26255, + "TEX": 26256, + "ĠLeave": 26257, + ".Substring": 26258, + "Ġgrateful": 26259, + "743": 26260, + "uka": 26261, + "ĠConsumer": 26262, + "Ġaggreg": 26263, + "Circle": 26264, + "à¸ģ": 26265, + "_blocks": 26266, + "Ġlegally": 26267, + "Ġ\"|": 26268, + "ãĥĥ": 26269, + ".board": 26270, + ".Ab": 26271, + "Functions": 26272, + "recipe": 26273, + "èĩ": 26274, + "ĠOxford": 26275, + "Ġwholes": 26276, + ".Build": 26277, + "_changed": 26278, + "hai": 26279, + "Ġdepartments": 26280, + "964": 26281, + "Imp": 26282, + "Ġcoalition": 26283, + "INFRINGEMENT": 26284, + "Ġempower": 26285, + "itches": 26286, + "North": 26287, + "Ġinflamm": 26288, + "ONSE": 26289, + "Ġmissile": 26290, + "ĠRaj": 26291, + "ĠIssue": 26292, + "Ġatoi": 26293, + "caled": 26294, + ".Controllers": 26295, + "ĠWolf": 26296, + "Ġcrushers": 26297, + "á»ĩ": 26298, + ".Auth": 26299, + ".addAttribute": 26300, + "his": 26301, + "Ġboots": 26302, + ".clean": 26303, + "camp": 26304, + "Ġtenant": 26305, + "Ġtune": 26306, + "Ġ{}'.": 26307, + "Ġworkout": 26308, + "Repo": 26309, + "Ġpartially": 26310, + "MISSION": 26311, + "jamin": 26312, + "ĠSB": 26313, + "Ġdetermination": 26314, + "Ġ'');Ċ": 26315, + "ĠBeng": 26316, + "Ġvos": 26317, + "Ġinhab": 26318, + "/lang": 26319, + "sburgh": 26320, + "Executor": 26321, + "hone": 26322, + "ĠChallenge": 26323, + "_links": 26324, + ".Level": 26325, + "Ġunderground": 26326, + "-code": 26327, + "959": 26328, + "Ġoptimization": 26329, + "logging": 26330, + "_dest": 26331, + "Ġsnake": 26332, + "Ġchemicals": 26333, + "_IMPORTED": 26334, + "adoop": 26335, + "ĠTHAT": 26336, + "managed": 26337, + "Ġreduces": 26338, + "ĠREAL": 26339, + "ĠGuy": 26340, + "_GENERIC": 26341, + "/********************************": 26342, + ".amount": 26343, + "Ġdere": 26344, + "getTime": 26345, + "Ġpant": 26346, + "anonymous": 26347, + "Ġharmony": 26348, + "ĠAlan": 26349, + "Ġscenarios": 26350, + "Ġdirt": 26351, + "htags": 26352, + "Mc": 26353, + "Shell": 26354, + "rin": 26355, + "{čĊčĊ": 26356, + ".pow": 26357, + "ĉclient": 26358, + "Ġconspiracy": 26359, + "Ġadmission": 26360, + "ĠRegional": 26361, + "ĠViewController": 26362, + "ĠPhilippines": 26363, + "Ġdepos": 26364, + "Ġpap": 26365, + "962": 26366, + "ĠPad": 26367, + "Paul": 26368, + ".ComboBox": 26369, + "Ġtutor": 26370, + "ĠRecipe": 26371, + "writing": 26372, + "Ġcontributor": 26373, + "OTH": 26374, + "Small": 26375, + "VI": 26376, + "Ġhacer": 26377, + "equ": 26378, + "ĠExamples": 26379, + "human": 26380, + ".messages": 26381, + "ĉtyp": 26382, + "Ġ(čĊ": 26383, + "ĠSSL": 26384, + "LEN": 26385, + "ĠRomney": 26386, + "(grid": 26387, + "ĉmin": 26388, + "Ġ>ĊĊ": 26389, + "Ġfruits": 26390, + "Ġvoter": 26391, + "Inline": 26392, + "pane": 26393, + "ĠCollections": 26394, + "charset": 26395, + "Ġspam": 26396, + "zb": 26397, + "itemap": 26398, + "Ġsucceeded": 26399, + "_COL": 26400, + "Ġelapsed": 26401, + "imeter": 26402, + "Ġrecovered": 26403, + "Tensor": 26404, + "hattan": 26405, + ".setup": 26406, + "isto": 26407, + "(head": 26408, + "977": 26409, + "ĠSIZE": 26410, + "Ġtactics": 26411, + "Ġdistur": 26412, + "Ġpreval": 26413, + "icios": 26414, + "(Value": 26415, + "_cols": 26416, + "ĠFat": 26417, + "Ġseal": 26418, + "Ġsons": 26419, + "Ġensures": 26420, + "095": 26421, + "Ġpressing": 26422, + "=&": 26423, + "igenous": 26424, + "Ġharassment": 26425, + "_JSON": 26426, + "Ġignor": 26427, + "ynomial": 26428, + "omer": 26429, + "_static": 26430, + "Ġsignificance": 26431, + "Ġcircles": 26432, + "_System": 26433, + "Ġdiscipline": 26434, + "Ġdressed": 26435, + "Ġsphere": 26436, + "927": 26437, + "Ġclimb": 26438, + "759": 26439, + "_actions": 26440, + "ĠBab": 26441, + "Ġ'=',": 26442, + "_schema": 26443, + "\"use": 26444, + "Ġunders": 26445, + "Ġcups": 26446, + ".screen": 26447, + "/new": 26448, + "Ġappearing": 26449, + "TOP": 26450, + "vised": 26451, + "clang": 26452, + "Ġinvestigators": 26453, + "Ġmysterious": 26454, + "Ġpromising": 26455, + "Ġqualify": 26456, + "Ġcave": 26457, + "Ġequip": 26458, + "=x": 26459, + "GT": 26460, + "(link": 26461, + ".velocity": 26462, + ".erase": 26463, + "oter": 26464, + "++++++++": 26465, + "profit": 26466, + "Ġzones": 26467, + "_uid": 26468, + "-ser": 26469, + "Ġobjectives": 26470, + "Ġmilf": 26471, + "webkit": 26472, + "(match": 26473, + "neh": 26474, + "ĠAssociated": 26475, + "ĠTodo": 26476, + "=d": 26477, + "065": 26478, + "Cam": 26479, + "Ġvocal": 26480, + "Ġsudo": 26481, + "(EX": 26482, + "Ġtrou": 26483, + "ABC": 26484, + ".bean": 26485, + "ĠGround": 26486, + "ĠREST": 26487, + "weets": 26488, + "Ing": 26489, + "imon": 26490, + "946": 26491, + "_bus": 26492, + "ĠCOLOR": 26493, + "unto": 26494, + "Ġfoss": 26495, + "ĠLinks": 26496, + "869": 26497, + "äng": 26498, + "/forms": 26499, + "prises": 26500, + "Ġachievement": 26501, + "CALL": 26502, + "елÑĮ": 26503, + "ĠVerify": 26504, + "_SOURCE": 26505, + "aptcha": 26506, + "IDD": 26507, + "_reference": 26508, + "Gold": 26509, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 26510, + "947": 26511, + "Receiver": 26512, + "099": 26513, + "Ġaj": 26514, + "_direction": 26515, + "}]": 26516, + "ĠCompet": 26517, + "Ġbang": 26518, + "798": 26519, + "ĠCass": 26520, + "-url": 26521, + "techn": 26522, + "ĠJerusalem": 26523, + "longitude": 26524, + "');čĊčĊ": 26525, + "Ġwinners": 26526, + "Tasks": 26527, + "ĠDMA": 26528, + "Ġtooltip": 26529, + "İ·": 26530, + "ĠBra": 26531, + "_duration": 26532, + "cury": 26533, + "parents": 26534, + "---->(": 26607, + "ĠKir": 26608, + "Ġintros": 26609, + "Ġsketch": 26610, + "Ġskilled": 26611, + "Ġimmer": 26612, + "Ġadequate": 26613, + "_rep": 26614, + "(header": 26615, + "_like": 26616, + "Ġperceived": 26617, + "ssh": 26618, + "Ġassuming": 26619, + "Ġff": 26620, + "_uuid": 26621, + "ulas": 26622, + "Ġdemocratic": 26623, + ".entities": 26624, + "Series": 26625, + "aphore": 26626, + "Ġnewer": 26627, + "}(": 26628, + "SEC": 26629, + "airo": 26630, + "Ġcommod": 26631, + "Ġprivilege": 26632, + "Ġdeux": 26633, + "ĠHop": 26634, + ".'/": 26635, + "ctic": 26636, + ".';Ċ": 26637, + "C": 26712, + "ĠWarren": 26713, + "Ġoptimizer": 26714, + "ĠSERVICES": 26715, + "_oper": 26716, + "getAttribute": 26717, + "ĠMcK": 26718, + "_self": 26719, + "084": 26720, + ".rs": 26721, + "\")ĊĊĊ": 26722, + "GetComponent": 26723, + "erce": 26724, + "Ġtous": 26725, + "units": 26726, + "']);čĊ": 26727, + "Zoom": 26728, + "/E": 26729, + "Ġobsc": 26730, + "Ġfastest": 26731, + "online": 26732, + "Ġpeaceful": 26733, + "ffen": 26734, + "Ġcargo": 26735, + "ĉpr": 26736, + "Ġseeks": 26737, + "zu": 26738, + "074": 26739, + "Trim": 26740, + "Ġward": 26741, + "Ġverd": 26742, + "Ġblogs": 26743, + ".exceptions": 26744, + "ĠPremium": 26745, + "ĠNetherlands": 26746, + "Safe": 26747, + "Finish": 26748, + "ĠAlbum": 26749, + "_ACC": 26750, + "=this": 26751, + "virtual": 26752, + "]>": 26753, + "_LABEL": 26754, + "ĠNich": 26755, + "_win": 26756, + "ĠAaron": 26757, + "WP": 26758, + ";$": 26759, + "aims": 26760, + "ĠImageView": 26761, + "Ġendless": 26762, + "ERA": 26763, + "_DISABLE": 26764, + "Ġcancelled": 26765, + "-us": 26766, + "Ġinspection": 26767, + "emin": 26768, + "ĠGrey": 26769, + "-open": 26770, + "Ġiterations": 26771, + ".owner": 26772, + "Ġkeras": 26773, + ".Password": 26774, + "ĠRy": 26775, + "ĠINS": 26776, + "Air": 26777, + "ĠSeveral": 26778, + ".TabStop": 26779, + "INGLE": 26780, + "ĠHair": 26781, + "ĠCanvas": 26782, + "AAAA": 26783, + "Ġflaw": 26784, + "cedes": 26785, + ".Report": 26786, + "íĬ": 26787, + "ĠTips": 26788, + "criptors": 26789, + ".transaction": 26790, + ".Spring": 26791, + "Ġviewer": 26792, + "Ġinsights": 26793, + "è¾ĵ": 26794, + "ordion": 26795, + "UINT": 26796, + "seek": 26797, + "ĠAuf": 26798, + "ìŀIJ": 26799, + "Ġstrain": 26800, + "Tooltip": 26801, + "Ġdz": 26802, + "ignal": 26803, + "adt": 26804, + "Ġuc": 26805, + "finite": 26806, + "Ġnm": 26807, + ".cmd": 26808, + "ĠMySql": 26809, + "[data": 26810, + ".jackson": 26811, + ".tree": 26812, + "RequestParam": 26813, + "_agent": 26814, + "\")]čĊ": 26815, + "Ġassass": 26816, + "(Constants": 26817, + ":ss": 26818, + "ĠMAN": 26819, + "+-+-": 26820, + "ĠBottom": 26821, + "prints": 26822, + "ĠSame": 26823, + "@Autowired": 26824, + "swap": 26825, + "ición": 26826, + "Ġprotesters": 26827, + "Ġhoney": 26828, + "ĠVeter": 26829, + "(Calendar": 26830, + "-ad": 26831, + "ĠBrooklyn": 26832, + "Life": 26833, + "_VAR": 26834, + "zech": 26835, + "ĠCALL": 26836, + "_CAST": 26837, + "ĠElection": 26838, + "Ġthickness": 26839, + "Very": 26840, + "_INTEGER": 26841, + "-dev": 26842, + "))))": 26843, + "apat": 26844, + "oooo": 26845, + "demo": 26846, + "ĠparseFloat": 26847, + "ĠRather": 26848, + "STIT": 26849, + "maker": 26850, + "[current": 26851, + "chrono": 26852, + "Ġchrist": 26853, + "ãģª": 26854, + "ĠDetail": 26855, + "ưá»": 26856, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 26857, + "Ġsul": 26858, + "idency": 26859, + "Que": 26860, + "Ġelegant": 26861, + "apons": 26862, + "Ġdishes": 26863, + "Ġintegers": 26864, + "(read": 26865, + "057": 26866, + "findViewById": 26867, + "ĠAmount": 26868, + "ĠSkip": 26869, + "Ġhabits": 26870, + "*)(": 26871, + "Ġmonsters": 26872, + "MAC": 26873, + ":end": 26874, + "Ġfrank": 26875, + "Assembly": 26876, + "Ġdfs": 26877, + "Ġneut": 26878, + "_TYPES": 26879, + "equal": 26880, + "loyd": 26881, + "(uri": 26882, + "Ġchi": 26883, + "Ġdefendant": 26884, + "Ġconflicts": 26885, + "Ġvil": 26886, + "-js": 26887, + "ĠPeace": 26888, + "Ġmutable": 26889, + ")sender": 26890, + "ĠFocus": 26891, + "建": 26892, + "Ġappreciated": 26893, + "sleep": 26894, + "ĠRED": 26895, + "Culture": 26896, + "Ġdesigners": 26897, + "_generator": 26898, + "codes": 26899, + "/ex": 26900, + ".GetValue": 26901, + "umbled": 26902, + ".scalajs": 26903, + "peror": 26904, + "Ġveterans": 26905, + "Ġ})čĊ": 26906, + "Ġunfortunately": 26907, + "_CREATE": 26908, + "Mass": 26909, + "ĠCLAIM": 26910, + "ĠMeet": 26911, + "_support": 26912, + "Bank": 26913, + "().Ċ": 26914, + "Dark": 26915, + "_LOW": 26916, + "ĠMining": 26917, + "ĠOwner": 26918, + "iera": 26919, + "Cliente": 26920, + "Ġencouraging": 26921, + ">S": 26922, + "Ġboyfriend": 26923, + "ĠHalf": 26924, + "ĠACC": 26925, + "Aff": 26926, + "_ar": 26927, + "-life": 26928, + "cx": 26929, + ".JButton": 26930, + "izado": 26931, + ".zero": 26932, + ".openqa": 26933, + "oton": 26934, + ".textContent": 26935, + "Ġtoll": 26936, + "atie": 26937, + "Ġballot": 26938, + "-number": 26939, + ".Exception": 26940, + "ĉparams": 26941, + "circle": 26942, + "-map": 26943, + "Ġnap": 26944, + "ĠRobot": 26945, + "ĠIch": 26946, + "registration": 26947, + "Amazon": 26948, + "rollment": 26949, + "(exp": 26950, + "Ġtanks": 26951, + "ĠGordon": 26952, + "Ġmachinery": 26953, + "Ġbaseline": 26954, + "æĭ": 26955, + "086": 26956, + "Ø©": 26957, + "ĠConvention": 26958, + "ĉconfig": 26959, + "ookies": 26960, + "mult": 26961, + "Records": 26962, + "ĠEST": 26963, + "Ġgarbage": 26964, + "Ġconform": 26965, + "idal": 26966, + "Ġbarg": 26967, + "Ġsurvived": 26968, + "Ġinvestigations": 26969, + "935": 26970, + ".containsKey": 26971, + "--------------------------------------------------------------------------Ċ": 26972, + "ortion": 26973, + "Ġhorr": 26974, + "_http": 26975, + "Ġmant": 26976, + "];čĊčĊ": 26977, + "binary": 26978, + "948": 26979, + "empl": 26980, + "Ġinquiry": 26981, + "ĠMeanwhile": 26982, + "098": 26983, + "Ġcollecting": 26984, + ".EntityFramework": 26985, + "\",ĊĊ": 26986, + "ĠPic": 26987, + "@Inject": 26988, + "ickness": 26989, + "ĠBinding": 26990, + "Ġcontrolling": 26991, + "reverse": 26992, + "Ġchairs": 26993, + "sembled": 26994, + "(add": 26995, + "Disabled": 26996, + "anas": 26997, + ".translate": 26998, + "-----------Ċ": 26999, + "Ġreflected": 27000, + "\"]ĊĊ": 27001, + "External": 27002, + "Arrow": 27003, + "Singleton": 27004, + "%x": 27005, + "ĠÅ": 27006, + "Ġancest": 27007, + "ĠOrleans": 27008, + "ĉcmd": 27009, + "Ġprohibited": 27010, + "ithmetic": 27011, + "(channel": 27012, + "_css": 27013, + "Forward": 27014, + ".socket": 27015, + "Ġluc": 27016, + "âĨ": 27017, + "ĠFirefox": 27018, + "ĠMovies": 27019, + ")_": 27020, + ".ends": 27021, + "(shape": 27022, + "Ġdealt": 27023, + "Ġsaves": 27024, + "Ġglory": 27025, + "Ġmejor": 27026, + "Ġbreathing": 27027, + "Ġeller": 27028, + "getData": 27029, + "Ġangles": 27030, + "Ġtoolbar": 27031, + "Ġspacing": 27032, + "059": 27033, + "IPS": 27034, + "Ġfloors": 27035, + "_ACTIVE": 27036, + "Ġshuffle": 27037, + "/shared": 27038, + "ĠEle": 27039, + "edish": 27040, + "Ġwebcam": 27041, + ".expect": 27042, + "iloc": 27043, + "ĠIncludes": 27044, + "Ġtweeted": 27045, + "Ġ:)": 27046, + "ĠEssay": 27047, + "Fix": 27048, + "-between": 27049, + "_web": 27050, + ".conv": 27051, + "Ġracism": 27052, + "Ġreflects": 27053, + "umm": 27054, + "иÑĤе": 27055, + "_footer": 27056, + "/docs": 27057, + "ĠPour": 27058, + "NgModule": 27059, + ".initialize": 27060, + "patterns": 27061, + "_In": 27062, + "ĠAbb": 27063, + "*čĊ": 27064, + "Ġsentiment": 27065, + "buff": 27066, + "_counts": 27067, + "Ġreuse": 27068, + "chunk": 27069, + "Ġimposed": 27070, + "PrimaryKey": 27071, + "Foreground": 27072, + "Ġconsumed": 27073, + "?!": 27074, + "Ġdick": 27075, + "Ġchron": 27076, + "ĠFern": 27077, + "Ġresponsive": 27078, + "958": 27079, + "Ġinsect": 27080, + "iculty": 27081, + "Ġrw": 27082, + "Ġalike": 27083, + "Ġsubset": 27084, + "ĠCookies": 27085, + "ĠPair": 27086, + "Ġtier": 27087, + "IFO": 27088, + "avour": 27089, + "ĠQU": 27090, + ",sizeof": 27091, + "Ġmerged": 27092, + "mv": 27093, + "itol": 27094, + "ylon": 27095, + "Ġjumped": 27096, + ".role": 27097, + "ensaje": 27098, + "Rules": 27099, + "Ġbrowse": 27100, + "Animator": 27101, + "Ġyoga": 27102, + "Ġvariants": 27103, + "Ġcourtesy": 27104, + "uran": 27105, + "pbs": 27106, + "elseif": 27107, + "Alt": 27108, + "ĠLane": 27109, + "CLK": 27110, + "IMARY": 27111, + "_PROPERTY": 27112, + "ï¼IJ": 27113, + "Ġchan": 27114, + "Ġgradually": 27115, + "Ġshake": 27116, + "Ġblonde": 27117, + "...\");Ċ": 27118, + "-sex": 27119, + "Ġgameplay": 27120, + "acies": 27121, + ".refresh": 27122, + "USB": 27123, + "ĠPlot": 27124, + "Was": 27125, + "issippi": 27126, + "ĠTensor": 27127, + "Ġcryptocurrency": 27128, + "Ġdifficulties": 27129, + "Deleted": 27130, + "Without": 27131, + "_append": 27132, + "_ver": 27133, + "967": 27134, + "\"))čĊ": 27135, + "Ġhonestly": 27136, + "Ġpivot": 27137, + "Ġtemps": 27138, + "_ps": 27139, + "ĠUnlike": 27140, + "[:-": 27141, + "VS": 27142, + "_inf": 27143, + "Ġjunior": 27144, + "Ġanimations": 27145, + "Ġfilepath": 27146, + "?{{$": 27168, + "Ġunicode": 27169, + "places": 27170, + "ĠCoffee": 27171, + ".SE": 27172, + "ĠPAR": 27173, + "(txt": 27174, + "gebra": 27175, + "Ġfires": 27176, + "MainWindow": 27177, + "medium": 27178, + "Ġ(âĢľ": 27179, + "Ġlg": 27180, + "Ġcmp": 27181, + "/base": 27182, + "_layers": 27183, + "_entries": 27184, + "Ġadminister": 27185, + "ĠSUCH": 27186, + "BP": 27187, + "ĠScottish": 27188, + "ĉčĊĉčĊ": 27189, + "guard": 27190, + "ĠStrong": 27191, + "Insn": 27192, + "ĠCAP": 27193, + "asury": 27194, + "ĠSEE": 27195, + "Clock": 27196, + "erie": 27197, + "\\models": 27198, + "Ġ$$": 27199, + "ĠCab": 27200, + "Ġwurde": 27201, + "Ġsoldier": 27202, + "Ġclips": 27203, + "Ġarrangement": 27204, + "ĠWonder": 27205, + "ĠHorn": 27206, + "Ġscared": 27207, + "Ġcure": 27208, + "mkdir": 27209, + "Ġaligned": 27210, + "ĠPink": 27211, + "Ġlanded": 27212, + "Dimension": 27213, + "ScrollPane": 27214, + ".chat": 27215, + ".With": 27216, + "ĠTrain": 27217, + "].Ċ": 27218, + "Ġthirty": 27219, + "Ġdurable": 27220, + "Ġld": 27221, + "Ġlateinit": 27222, + "Ġcharts": 27223, + "Ġinsult": 27224, + ".Fatal": 27225, + "_ct": 27226, + "Ġmasks": 27227, + "CLUDED": 27228, + "President": 27229, + "Ġcolours": 27230, + "gments": 27231, + ".attributes": 27232, + "ĠFlex": 27233, + "ĠClock": 27234, + "ÃŃcul": 27235, + "imen": 27236, + "JO": 27237, + "ĠRegex": 27238, + "_LINK": 27239, + "Ġcouch": 27240, + "ĠINPUT": 27241, + "Ġbeating": 27242, + "business": 27243, + "preced": 27244, + ".unit": 27245, + "ĠFel": 27246, + "Never": 27247, + "ospel": 27248, + ".startswith": 27249, + "ĠEPA": 27250, + ".only": 27251, + "Ġpreventing": 27252, + "yer": 27253, + "ColumnName": 27254, + "Ġelevation": 27255, + "flu": 27256, + "icycle": 27257, + "Ġoffline": 27258, + "Toolbar": 27259, + "Ġcompeting": 27260, + ")].": 27261, + "Ġmog": 27262, + "ĠisValid": 27263, + "Ask": 27264, + "_av": 27265, + "_lat": 27266, + "ANC": 27267, + "ĠJoh": 27268, + "kers": 27269, + "Ġguards": 27270, + "Ġchains": 27271, + "ĠSimpleDateFormat": 27272, + ".static": 27273, + "Ġvessel": 27274, + "Ġmud": 27275, + "Ġstabil": 27276, + "Ġstret": 27277, + "gm": 27278, + "amation": 27279, + "çľ": 27280, + "-with": 27281, + "Ġros": 27282, + "_PA": 27283, + "Ġresultado": 27284, + "Ġconfidential": 27285, + "ĠTokyo": 27286, + "ĉusing": 27287, + "ĠMathf": 27288, + "ombine": 27289, + "ĠESPN": 27290, + "Ġdealers": 27291, + "Ġdismissed": 27292, + "TRY": 27293, + "Ġteens": 27294, + "records": 27295, + "Ġwings": 27296, + "gallery": 27297, + "accounts": 27298, + "_LIB": 27299, + "Ġjacket": 27300, + "ĠNSObject": 27301, + "Ġstones": 27302, + "ĠDelivery": 27303, + "ĠDiet": 27304, + "/watch": 27305, + "Ġtoilet": 27306, + "ĠGuest": 27307, + ".day": 27308, + "067": 27309, + "Ġintval": 27310, + "087": 27311, + "Visit": 27312, + "Ġinvestigated": 27313, + "Ġpentru": 27314, + "ĠTheatre": 27315, + "andidates": 27316, + "Lang": 27317, + "ĠServ": 27318, + "Ġcontrollers": 27319, + "ĠsetTitle": 27320, + "NP": 27321, + "amy": 27322, + "flat": 27323, + "(ui": 27324, + "069": 27325, + "_document": 27326, + "èĥ½": 27327, + "ĠCoin": 27328, + "ĠAdams": 27329, + "ptic": 27330, + "Ġproductive": 27331, + "Ġaccomplished": 27332, + "čĊčĊčĊčĊ": 27333, + "Ġdeferred": 27334, + "ientes": 27335, + "Ġsinc": 27336, + "olars": 27337, + "Rightarrow": 27338, + "Ġvariations": 27339, + "(offset": 27340, + "957": 27341, + ".LayoutInflater": 27342, + "Ġsuspend": 27343, + "Ġprevention": 27344, + "_private": 27345, + "_js": 27346, + "âĺħ": 27347, + "Ġwieder": 27348, + "atum": 27349, + "ĴĮ": 27350, + "Ġappearances": 27351, + ".Document": 27352, + "Ġvalidates": 27353, + "calendar": 27354, + "}\";Ċ": 27355, + ".demo": 27356, + "conut": 27357, + "Ġcorrection": 27358, + "ĠDeal": 27359, + "Ġbatteries": 27360, + ".duration": 27361, + ",\\": 27362, + "_marker": 27363, + "multi": 27364, + "Ġhalt": 27365, + "Ġcms": 27366, + "Ġshaped": 27367, + "Bro": 27368, + "reduce": 27369, + "Ġ####": 27370, + "CTOR": 27371, + "ĠBenef": 27372, + "Ġiconic": 27373, + "Ġpiano": 27374, + "Ġeffectiveness": 27375, + "|.Ċ": 27376, + "Ġajax": 27377, + "Ġvolumes": 27378, + "ม": 27379, + "Ġcljs": 27380, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 27381, + "aths": 27382, + "raits": 27383, + "大": 27384, + "Ñĸ": 27385, + "_mult": 27386, + "Ġfascinating": 27387, + "Average": 27388, + "Ġpré": 27389, + "ĠChairman": 27390, + ".findElement": 27391, + "_pin": 27392, + "Ġcomparing": 27393, + "Ġdarkness": 27394, + "-Fi": 27395, + "-server": 27396, + "Ġselecting": 27397, + "sterdam": 27398, + "ĠParts": 27399, + "FORMATION": 27400, + "Ġnoting": 27401, + "Ġpile": 27402, + "ogs": 27403, + "Ġpalette": 27404, + "_do": 27405, + "itize": 27406, + "079": 27407, + "()(": 27408, + "Ġdefining": 27409, + "Ġremainder": 27410, + "Units": 27411, + "_TASK": 27412, + "HttpClient": 27413, + "Social": 27414, + "Ġfundra": 27415, + "NR": 27416, + "chest": 27417, + "Currency": 27418, + ".adapter": 27419, + "Ġdop": 27420, + "unting": 27421, + "ANGUAGE": 27422, + "\"He": 27423, + "ĉindex": 27424, + "_package": 27425, + ".Icon": 27426, + "Ġrepet": 27427, + "mass": 27428, + "=\".$": 27429, + "ĠSud": 27430, + "Ġlid": 27431, + "province": 27432, + "ìľ": 27433, + "GPIO": 27434, + "Ðļ": 27435, + "ĠMySQL": 27436, + "Ġdocs": 27437, + "ĠGA": 27438, + "Ġipsum": 27439, + "Kernel": 27440, + "Ġaccepts": 27441, + "Ġfitting": 27442, + "Ġcuando": 27443, + "Ġduplic": 27444, + "ĠBrother": 27445, + "ĠKle": 27446, + "nums": 27447, + "Ġmorph": 27448, + "Ġ########": 27449, + "ĠCGPoint": 27450, + "manual": 27765, + "ĠTechnical": 27766, + "Ġcorporation": 27767, + "ĠHW": 27768, + "anka": 27769, + "TAIL": 27770, + "istas": 27771, + "Ġperforms": 27772, + "ĠBehavior": 27773, + ".For": 27774, + "_ORDER": 27775, + "ĠKick": 27776, + "Ġcallbacks": 27777, + "_dr": 27778, + "uego": 27779, + "hub": 27780, + "ufficient": 27781, + "sky": 27782, + "Ġbp": 27783, + "htable": 27784, + "ĠONLY": 27785, + "ĠAUTHORS": 27786, + ".Argument": 27787, + "\"};Ċ": 27788, + "ĠThunder": 27789, + "ĠKom": 27790, + ".Should": 27791, + "AUTH": 27792, + "ahu": 27793, + "_payment": 27794, + "Ġstarter": 27795, + "ìĦľ": 27796, + "ìļ©": 27797, + "Blog": 27798, + ".patch": 27799, + "Ġgoverned": 27800, + "assy": 27801, + "-found": 27802, + "Ġtheater": 27803, + "ĠFontWeight": 27804, + "ĠBatman": 27805, + "\"If": 27806, + ".Random": 27807, + "_delta": 27808, + "ĠCE": 27809, + "Authenticated": 27810, + "Ġdrone": 27811, + "Ġcous": 27812, + "radius": 27813, + "Mer": 27814, + "(None": 27815, + "ĠNJ": 27816, + "_headers": 27817, + "Ġamer": 27818, + "pytest": 27819, + "ĠActions": 27820, + "ĉĉĉĠĠĠĠ": 27821, + "Ġett": 27822, + "Ġholy": 27823, + "Ġuncomfort": 27824, + "ĠNin": 27825, + "ĠDecimal": 27826, + "ĠMessages": 27827, + ".sender": 27828, + "]])Ċ": 27829, + "Ġembrace": 27830, + "Though": 27831, + "/sp": 27832, + "Ġcultures": 27833, + "Ġhighway": 27834, + "tar": 27835, + ".fail": 27836, + "_hidden": 27837, + "ĠcomponentDidMount": 27838, + "ĠWright": 27839, + "Ġjag": 27840, + "_il": 27841, + "../../../": 27842, + "igu": 27843, + "Food": 27844, + "Ġace": 27845, + "Ġaños": 27846, + "USD": 27847, + "Ġmutual": 27848, + "Logic": 27849, + "Ġtemple": 27850, + "Ġbriefly": 27851, + "ĠTrip": 27852, + "classmethod": 27853, + "defaults": 27854, + "Ġchunks": 27855, + ",,,,": 27856, + "ĠReason": 27857, + "$id": 27858, + "-ups": 27859, + "Ġdamn": 27860, + "Ġtrucks": 27861, + "Ġunlimited": 27862, + "Ġsculpt": 27863, + "ĠCards": 27864, + "Ġautor": 27865, + "ĠTesting": 27866, + "Ġdiese": 27867, + "shops": 27868, + "ç´": 27869, + "(payload": 27870, + "ĠPATH": 27871, + "ĠMemorial": 27872, + "Ġridiculous": 27873, + "egree": 27874, + "-winning": 27875, + "Ġrehab": 27876, + "Ġsophisticated": 27877, + "wpdb": 27878, + "ĉpath": 27879, + "!\";Ċ": 27880, + "_SYS": 27881, + ".speed": 27882, + "Ġsoap": 27883, + "suffix": 27884, + "Wrap": 27885, + "Ġenhancement": 27886, + "Ãī": 27887, + "úb": 27888, + "Ġplaylist": 27889, + "Ġmixing": 27890, + "antidad": 27891, + "=\"\";Ċ": 27892, + "ĠRevision": 27893, + "ĠBeat": 27894, + ".inc": 27895, + "-way": 27896, + "encias": 27897, + "ulers": 27898, + "Cat": 27899, + "idel": 27900, + "ĠShip": 27901, + ".setColor": 27902, + "Ġthreatening": 27903, + ".modules": 27904, + "Ġafterwards": 27905, + "ĠDashboard": 27906, + "ĊĠĊ": 27907, + "Signal": 27908, + "Ġprimer": 27909, + "orneys": 27910, + "iciary": 27911, + "Ġligne": 27912, + "_predict": 27913, + "Ġaest": 27914, + "_https": 27915, + ">:": 27916, + "ĠLex": 27917, + "Ġrencontres": 27918, + "egral": 27919, + "scala": 27920, + "_family": 27921, + "ÃŁen": 27922, + "_sym": 27923, + "Ġuncertainty": 27924, + "ĠVALUE": 27925, + "Ġ};čĊčĊ": 27926, + "Ġbroader": 27927, + "Ġhorses": 27928, + "ãģĿ": 27929, + "ĠKal": 27930, + "oba": 27931, + "_INET": 27932, + "ĠKill": 27933, + "jquery": 27934, + "amination": 27935, + "[@\"": 27936, + "Ġmuj": 27937, + "###Ċ": 27938, + "FirstOrDefault": 27939, + "thenReturn": 27940, + "Che": 27941, + "/footer": 27942, + "Ġparks": 27943, + "asje": 27944, + "ĠGulf": 27945, + "Ġmodest": 27946, + ".Init": 27947, + "ï¼ŁĊĊ": 27948, + "Ġprospects": 27949, + "Ġsvg": 27950, + "Ġåı": 27951, + ".Dialog": 27952, + "_NET": 27953, + "Ġ(($": 27954, + "Ġek": 27955, + "ĠWarning": 27956, + "ĠMK": 27957, + "": 28265, + "ĠRepair": 28266, + "_BE": 28267, + "Brand": 28268, + "uart": 28269, + "preview": 28270, + "Ġinitiatives": 28271, + "running": 28272, + "bang": 28273, + "ĉupdate": 28274, + "ĠCoach": 28275, + "Rich": 28276, + "Ġyoutube": 28277, + "Ġritual": 28278, + "appa": 28279, + "ĠRobinson": 28280, + "precision": 28281, + "////////////////////////////////////////////////////////////////////////////": 28282, + "=[]Ċ": 28283, + "Ġcelebrated": 28284, + "OTO": 28285, + "Ġinclusion": 28286, + "JP": 28287, + "';čĊčĊ": 28288, + "Ġnotable": 28289, + "(_.": 28290, + "Managed": 28291, + "Ġguides": 28292, + " ": 28293, + "atedRoute": 28294, + "ĠAdjust": 28295, + "Ġcolored": 28296, + "_scores": 28297, + "ĠTesla": 28298, + "_progress": 28299, + ".inst": 28300, + "['_": 28301, + ".flags": 28302, + "Ġfclose": 28303, + "_OPER": 28304, + "ży": 28305, + "_note": 28306, + "Ġtransgender": 28307, + "åķ": 28308, + "RIPT": 28309, + "Ġabsent": 28310, + "Ġamet": 28311, + "Ġoperand": 28312, + "ë©": 28313, + "Ġhood": 28314, + "toLowerCase": 28315, + "avo": 28316, + "ĠCircuit": 28317, + "ĠLind": 28318, + "--}}Ċ": 28319, + "=m": 28320, + "Ġsuppress": 28321, + "ĠMAP": 28322, + "iang": 28323, + "-admin": 28324, + "Ġsidebar": 28325, + "ĠBu": 28326, + "ĠHex": 28327, + ",F": 28328, + "ĠSignal": 28329, + "Ġtransparency": 28330, + "ĠFederation": 28331, + "/V": 28332, + "Req": 28333, + "Ġpulse": 28334, + "Ġtends": 28335, + "Numbers": 28336, + "%'": 28337, + "Ġdeport": 28338, + "datas": 28339, + "_UINT": 28340, + "_tra": 28341, + "oko": 28342, + "Ġ\"?": 28343, + "compet": 28344, + "solete": 28345, + "undry": 28346, + "Ġoverlap": 28347, + "}`,Ċ": 28348, + ".ly": 28349, + "_summary": 28350, + "ĠLost": 28351, + ".Center": 28352, + "Ġdisability": 28353, + ".Serialization": 28354, + "Ġgeom": 28355, + "Ġ?:": 28356, + "ĠWo": 28357, + "Ġshipped": 28358, + "Ĥæķ°": 28359, + "Ġugly": 28360, + "Ġexcitement": 28361, + "Ġexterior": 28362, + "Ġcheckout": 28363, + "Ġkur": 28364, + ",D": 28365, + "ĠAlaska": 28366, + "Ġsynthetic": 28367, + "ĠBudget": 28368, + "ĠSubscribe": 28369, + "Ġ&Ċ": 28370, + "ÈĻi": 28371, + "ĠYu": 28372, + "ĉquery": 28373, + "}.Ċ": 28374, + "Ġtraged": 28375, + "assen": 28376, + "Ġaccommodation": 28377, + "Ġphysician": 28378, + "Ġrenamed": 28379, + "Ġtidak": 28380, + "zÄħ": 28381, + "Ġminus": 28382, + "nych": 28383, + "097": 28384, + "_EXCEPTION": 28385, + "threads": 28386, + "Ġtire": 28387, + "_created": 28388, + "ensure": 28389, + "Ġworthy": 28390, + "Ġexcuse": 28391, + "Ġcloth": 28392, + ".parentNode": 28393, + "/platform": 28394, + "ĠUFC": 28395, + "ĠGtk": 28396, + "unny": 28397, + "Ġgibt": 28398, + "keley": 28399, + "hum": 28400, + "(tx": 28401, + "ĉdev": 28402, + "Ġoutfit": 28403, + "doors": 28404, + "Ġfon": 28405, + "icut": 28406, + "volatile": 28407, + "Ġhomosex": 28408, + "Maximum": 28409, + "Ġexpend": 28410, + "Ġ});ĊĊĊ": 28411, + "Eq": 28412, + "onders": 28413, + "department": 28414, + "ĠPhysics": 28415, + "\"});Ċ": 28416, + "Ġparad": 28417, + ".Str": 28418, + "Ġsele": 28419, + "IFIED": 28420, + "Ġdelivers": 28421, + "ivan": 28422, + "Ġresponsibilities": 28423, + "Ġadvocates": 28424, + "èµ": 28425, + "ĠRID": 28426, + ".parameters": 28427, + "Metrics": 28428, + "ronics": 28429, + "ĠUITableViewCell": 28430, + "Absolute": 28431, + "ipse": 28432, + "ylum": 28433, + "MLElement": 28434, + "_VALID": 28435, + "\\<^": 28630, + "Ġios": 28631, + "sound": 28632, + "\"];": 28633, + "Ġfreed": 28634, + "rottle": 28635, + "ĠLower": 28636, + "[count": 28637, + "åĿ": 28638, + "Ġpale": 28639, + "ĠWayne": 28640, + "earth": 28641, + "_categories": 28642, + "UCK": 28643, + ".metadata": 28644, + "Ġsummon": 28645, + "HOME": 28646, + "олÑĮз": 28647, + "Ġmanufactured": 28648, + "Ġdock": 28649, + "Ġcompetitors": 28650, + "_MODEL": 28651, + "okia": 28652, + "ĠHey": 28653, + "ο": 28654, + "Ġbackward": 28655, + "ĠPOSS": 28656, + "ropa": 28657, + "Ġcri": 28658, + "_OBJ": 28659, + "Transport": 28660, + "-high": 28661, + "Ġerotik": 28662, + "_slot": 28663, + "Ġartic": 28664, + "_framework": 28665, + "-serif": 28666, + "ĠSqlDbType": 28667, + "')(": 28668, + "+\"/": 28669, + "Ġwore": 28670, + "Sil": 28671, + "Ġstoring": 28672, + "ĠPhase": 28673, + "uant": 28674, + "Ġbump": 28675, + "inho": 28676, + "Ġdign": 28677, + "Ġbacks": 28678, + "qq": 28679, + "(hash": 28680, + "Ġgeo": 28681, + "Ġtender": 28682, + "Logo": 28683, + "!)Ċ": 28684, + "ĠMX": 28685, + "ĠArthur": 28686, + "essoa": 28687, + "_Ch": 28688, + "Ġbedrooms": 28689, + "=\"#\"><": 28690, + "Ġthroat": 28691, + "insic": 28692, + ".integer": 28693, + "Ġprimitive": 28694, + "Truthy": 28695, + "Ġfacilitate": 28696, + "Ġcreativity": 28697, + "ĠDNS": 28698, + "Ġgra": 28699, + "uez": 28700, + "Ġcountless": 28701, + "ĠPoland": 28702, + "'M": 28703, + "ĠDist": 28704, + "Ġvest": 28705, + "Ġcertification": 28706, + "á»ij": 28707, + "held": 28708, + "extensions": 28709, + "(static": 28710, + "Ġgrades": 28711, + "ĠUber": 28712, + "ãģŁ": 28713, + "Ġ[])Ċ": 28714, + "datos": 28715, + "ĠgetData": 28716, + "ĠCharg": 28717, + "ĠBS": 28718, + ".microsoft": 28719, + ".video": 28720, + ".direction": 28721, + "->{'": 28722, + "lua": 28723, + "apest": 28724, + "Ġboiler": 28725, + "erek": 28726, + "Ġdecides": 28727, + ".jar": 28728, + "ISC": 28729, + "ĠWords": 28730, + "(CON": 28731, + "EMPLATE": 28732, + "reeze": 28733, + "shots": 28734, + "apps": 28735, + "unted": 28736, + ".setName": 28737, + "::<": 28738, + "-bold": 28739, + "ê²": 28740, + "å¯Ĩ": 28741, + "Longrightarrow": 28742, + "Ġunfair": 28743, + "Ġearning": 28744, + "Ġshelf": 28745, + "UREMENT": 28746, + "Ġidle": 28747, + "_MENU": 28748, + ".Custom": 28749, + "AGER": 28750, + "-\"": 28751, + "_switch": 28752, + "because": 28753, + ")view": 28754, + "mare": 28755, + "_condition": 28756, + "ĠStarting": 28757, + "Mvc": 28758, + "(pre": 28759, + "dump": 28760, + "_LOCK": 28761, + "atetime": 28762, + ".callback": 28763, + "ĠCer": 28764, + "opol": 28765, + "ibrary": 28766, + "Ġreservation": 28767, + "ĉĉĉĉĉĉĉĊ": 28768, + "lector": 28769, + "graduate": 28770, + "Ġgenerous": 28771, + "Ġion": 28772, + "ricao": 28773, + "mq": 28774, + "_complete": 28775, + "(cursor": 28776, + "ĠFormControl": 28777, + ":center": 28778, + "Ġsubstitute": 28779, + "ĠPlanning": 28780, + "Ġpension": 28781, + "Ġrecommendation": 28782, + "ĠTags": 28783, + "Ġgef": 28784, + "Ġalbums": 28785, + "Ġwashing": 28786, + "roc": 28787, + "Ġtrains": 28788, + "atings": 28789, + "Ġexponent": 28790, + "ackbar": 28791, + "-ln": 28792, + "ág": 28793, + ".DataAnnotations": 28794, + "ĠEIF": 28795, + "ĠMalaysia": 28796, + "ĉPORT": 28797, + "onus": 28798, + "Ġclever": 28799, + "Ġpeu": 28800, + ">ĊĊĊĊ": 28801, + "ĠArguments": 28802, + "Ġdebugging": 28803, + "(right": 28804, + "'D": 28805, + "compute": 28806, + "Ġfinest": 28807, + "ORAGE": 28808, + "Ġspectacular": 28809, + "phrase": 28810, + "Ġindia": 28811, + "Ġlegendary": 28812, + "birth": 28813, + "Ġcomposite": 28814, + "Ġgrows": 28815, + "ĠTD": 28816, + "Ġepid": 28817, + "Ġlaunching": 28818, + "]][": 28819, + "Minutes": 28820, + "ĠCha": 28821, + "Ġcleaned": 28822, + "Ġwitnesses": 28823, + "ukan": 28824, + "ĉType": 28825, + "Ġhabe": 28826, + "paragraph": 28827, + "ĠJPanel": 28828, + "ĠHann": 28829, + "Ġvaried": 28830, + "ĠPokemon": 28831, + "ĠMUST": 28832, + "åĬ¨": 28833, + ".visibility": 28834, + "opup": 28835, + "^[": 28836, + ".expand": 28837, + "Ġ\"',": 28838, + ".fasterxml": 28839, + "_auto": 28840, + "ĠSheet": 28841, + "marker": 28842, + "Parcel": 28843, + "ews": 28844, + "ĠStrategy": 28845, + "-making": 28846, + "Ġunve": 28847, + "Ġtrailing": 28848, + "Ġclicks": 28849, + "ĠGetComponent": 28850, + "ĉcontent": 28851, + "IGENCE": 28852, + "ERNEL": 28853, + "NSMutableArray": 28854, + "Ġbreat": 28855, + "Ġharmful": 28856, + "¶Ī": 28857, + "Ġbesides": 28858, + "Ġboring": 28859, + "Ġbrutal": 28860, + "vang": 28861, + "(parse": 28862, + "quick": 28863, + "Ġpytest": 28864, + "Ġswitching": 28865, + "()]Ċ": 28866, + "ĠìĦ": 28867, + "LER": 28868, + "ĉfont": 28869, + "Ġnett": 28870, + ")]ĊĊ": 28871, + "(/\\": 28872, + "æŀľ": 28873, + "toArray": 28874, + "Ġbreed": 28875, + "ĠCAR": 28876, + "ĠWeapon": 28877, + "Abs": 28878, + "tot": 28879, + "ĠsetName": 28880, + "aptive": 28881, + "Ġ:,": 28882, + "Ġescaped": 28883, + "orden": 28884, + "ĠPri": 28885, + "thumbnail": 28886, + "Ġdescriptions": 28887, + "/styles": 28888, + "ĠPCI": 28889, + "Ġalphabet": 28890, + "asticsearch": 28891, + "NOTE": 28892, + "Ġcialis": 28893, + "ĠGriff": 28894, + "Ġporque": 28895, + "Ġproteins": 28896, + "plays": 28897, + "Ġstating": 28898, + "Ġimagination": 28899, + "Ġfacial": 28900, + "ĠMechan": 28901, + "Ġarranged": 28902, + "_used": 28903, + "Ġarrangements": 28904, + "ĠPipe": 28905, + "hostname": 28906, + "Ġprovinc": 28907, + "Tit": 28908, + ".FlatStyle": 28909, + "ĠSplit": 28910, + "ĠLoader": 28911, + ".cc": 28912, + "Ġclinic": 28913, + "----------------------------": 28914, + "Ġbaking": 28915, + "ĠENT": 28916, + "neath": 28917, + "ãĢģĊĊ": 28918, + "ANE": 28919, + ".EntityFrameworkCore": 28920, + "appers": 28921, + ".ic": 28922, + "ĠNgModule": 28923, + "ĠFORM": 28924, + "Ġ';": 28925, + "-profit": 28926, + "hw": 28927, + "enemy": 28928, + "ĠEye": 28929, + "Ġcaution": 28930, + "town": 28931, + "Ġurged": 28932, + "ĠJimmy": 28933, + "ynchronous": 28934, + "-sized": 28935, + "making": 28936, + ",{": 28937, + "]',": 28938, + "_Object": 28939, + "ahoma": 28940, + "Ġactivist": 28941, + "INVAL": 28942, + "ĠCommercial": 28943, + "ĠOrlando": 28944, + "(tab": 28945, + "Ġب": 28946, + "Algorithm": 28947, + "Ġheritage": 28948, + "GetMapping": 28949, + "Ġfailures": 28950, + "rios": 28951, + "ativa": 28952, + "Ġtet": 28953, + "Ġcarpet": 28954, + "(Z": 28955, + "three": 28956, + "Ġdisclosure": 28957, + ".ERROR": 28958, + "_called": 28959, + "Ġdial": 28960, + "Ġoccasional": 28961, + ".Err": 28962, + "Ġfuncion": 28963, + "caffold": 28964, + "Ġreleasing": 28965, + "ï¼īĊĊ": 28966, + "_Value": 28967, + "ĠVari": 28968, + "yellow": 28969, + "Ġstruggles": 28970, + ".cal": 28971, + "ĠDakota": 28972, + "ĉclose": 28973, + "Ġsandwich": 28974, + "Ġanalytics": 28975, + "Ġ**)": 28976, + "&#": 28977, + "ĠJos": 28978, + "Ġpassive": 28979, + "ATTR": 28980, + "Throwable": 28981, + "ĠMun": 28982, + "ĠUint": 28983, + "(disposing": 28984, + "arak": 28985, + "ĠLeaders": 28986, + "Ġaffecting": 28987, + "ĠitemView": 28988, + "Ġeconomics": 28989, + "fv": 28990, + "à¹Ģ": 28991, + ".rb": 28992, + "ĠOverall": 28993, + "Ġwealthy": 28994, + "Ġevolved": 28995, + "nda": 28996, + "ĠHus": 28997, + "restrict": 28998, + "umen": 28999, + "ĠAgricult": 29000, + "!ĊĊĊ": 29001, + "Ġexpires": 29002, + "Ġspokesperson": 29003, + "interval": 29004, + "Ġâ": 29005, + "Ġqueen": 29006, + "(nil": 29007, + "ingo": 29008, + "Heap": 29009, + "Ùİ": 29010, + "Ġcomplain": 29011, + "Sym": 29012, + "ĠClone": 29013, + "ĠRu": 29014, + "ĠWILL": 29015, + "ĠCrystal": 29016, + "/content": 29017, + "ingen": 29018, + "ointment": 29019, + "LastName": 29020, + "avicon": 29021, + "ĠIBM": 29022, + "ĠDimension": 29023, + "anh": 29024, + "icipants": 29025, + "ĠAnne": 29026, + ".progress": 29027, + "Ġalgo": 29028, + "obil": 29029, + "ĠVoice": 29030, + "ĠFE": 29031, + "Ġgli": 29032, + "Ġved": 29033, + "Ġprevents": 29034, + "\\Column": 29035, + "Ġfolk": 29036, + "etti": 29037, + "Ġmn": 29038, + "ĠCLASS": 29039, + "Ġdisplaying": 29040, + "ĠKl": 29041, + "ĠFerr": 29042, + "duto": 29043, + ".ib": 29044, + "Ġdados": 29045, + "'name": 29046, + "-space": 29047, + "Ġitalian": 29048, + "Ġinverse": 29049, + "Ġdense": 29050, + "uter": 29051, + "ĠIEnumerator": 29052, + "-sign": 29053, + "Ġnationwide": 29054, + "Ġpersona": 29055, + "Ġsolved": 29056, + "Ġdramatically": 29057, + "Logout": 29058, + "Ġgrav": 29059, + "Ġanalyses": 29060, + "ollo": 29061, + "Ġlamp": 29062, + ".team": 29063, + "ĠErot": 29064, + "=[\"": 29065, + "Ġdancing": 29066, + "Ġ?>/": 29067, + "Ġcater": 29068, + "ffe": 29069, + "ĠSha": 29070, + "ĠBos": 29071, + "ĠREQUIRE": 29072, + "ĠMonster": 29073, + "ĠRB": 29074, + "ĠIDE": 29075, + "Ġsuits": 29076, + "ĠformData": 29077, + "(theta": 29078, + "Ġspatial": 29079, + "=NULL": 29080, + "ĠSqlConnection": 29081, + "Ġà": 29082, + "ĠVenez": 29083, + "ĠMorning": 29084, + "Ġpublications": 29085, + "ĠNONINFRINGEMENT": 29086, + "firstName": 29087, + "uds": 29088, + "Would": 29089, + "_HEAD": 29090, + "Ġinvested": 29091, + "stable": 29092, + "fred": 29093, + "Ġcommander": 29094, + "SES": 29095, + "âĢĶa": 29096, + "anche": 29097, + "ĠMovement": 29098, + "ë³": 29099, + "Suite": 29100, + "Ġjurisdiction": 29101, + "리": 29102, + "ĠBeth": 29103, + "jQuery": 29104, + "ĠIsa": 29105, + "Ġdental": 29106, + ",*": 29107, + "ĠLimit": 29108, + "iliation": 29109, + "=\"{": 29110, + "bast": 29111, + "Ġturb": 29112, + "isy": 29113, + "OOK": 29114, + "Ġadvocate": 29115, + "imag": 29116, + "LECTION": 29117, + "лÑĮ": 29118, + "(category": 29119, + ".dec": 29120, + "Ġuniqu": 29121, + "_sn": 29122, + "Ġattracted": 29123, + "ĠÃī": 29124, + "ĠRunning": 29125, + "_edges": 29126, + "ĠDisable": 29127, + "_AS": 29128, + "åĽ¾": 29129, + "Ġnetworking": 29130, + "_branch": 29131, + "Having": 29132, + "toBeTruthy": 29133, + "GI": 29134, + "Ġcamps": 29135, + "sep": 29136, + "-part": 29137, + "Ġ)ĊĊĊĊĊĊĊĊ": 29138, + "ustralia": 29139, + "ĠReports": 29140, + "rito": 29141, + "Ġwaist": 29142, + "_plus": 29143, + "ĠWW": 29144, + "-person": 29145, + "April": 29146, + "Ġsar": 29147, + ".tar": 29148, + "Ġagricultural": 29149, + "tic": 29150, + "Ġtcp": 29151, + "ĠsetValue": 29152, + "agento": 29153, + "ĠAppe": 29154, + "piler": 29155, + "CADE": 29156, + "Ġanche": 29157, + "atcher": 29158, + "Ġcomics": 29159, + "Ġlbs": 29160, + "_segment": 29161, + "']=$": 29162, + "itters": 29163, + "icher": 29164, + "GINE": 29165, + "Ġutilize": 29166, + "ĠCursor": 29167, + "_expression": 29168, + "Ġdag": 29169, + "x": 29357, + ".Task": 29358, + "money": 29359, + "ibaba": 29360, + "'});Ċ": 29361, + "ĠSpecific": 29362, + "ĠLinear": 29363, + "_OPT": 29364, + "HashCode": 29365, + "(Player": 29366, + ".ContainsKey": 29367, + "Ġcollapsed": 29368, + "transparent": 29369, + "_RANGE": 29370, + "Viewer": 29371, + "(cfg": 29372, + "Ġsorting": 29373, + "Ġinfected": 29374, + "ĠNach": 29375, + "Ġaccommodate": 29376, + ".elements": 29377, + "_PART": 29378, + "ĠSexy": 29379, + "=get": 29380, + "(year": 29381, + "Ġxhr": 29382, + ":]": 29383, + "owski": 29384, + "Ġsummar": 29385, + "Ġ¿": 29386, + "Ġinte": 29387, + "Ġworkflow": 29388, + "ĠTaiwan": 29389, + "versions": 29390, + "åıij": 29391, + "Ġsurprisingly": 29392, + "Ġoptical": 29393, + "Ġproces": 29394, + "Ġdisagree": 29395, + "Ġnuevo": 29396, + "ĠCAM": 29397, + "sorted": 29398, + "leases": 29399, + "istle": 29400, + "Ident": 29401, + "ĉevent": 29402, + "jected": 29403, + "Chunk": 29404, + "Vars": 29405, + ".provider": 29406, + "Ġproceedings": 29407, + "Ġinclusive": 29408, + "Ġartwork": 29409, + "endants": 29410, + "ï¼ļĊ": 29411, + "seen": 29412, + "Ġlig": 29413, + "Ġmakers": 29414, + "_fun": 29415, + "Ġlengths": 29416, + "PathVariable": 29417, + "[item": 29418, + "ี": 29419, + "Dead": 29420, + "FFFFFF": 29421, + "ĠUrban": 29422, + "uples": 29423, + "ichen": 29424, + "(nullptr": 29425, + ".spec": 29426, + ",System": 29427, + "URATION": 29428, + "(job": 29429, + "å¼ı": 29430, + "Ġtracker": 29431, + "ÅĻ": 29432, + "ĠMR": 29433, + "ĠSQLite": 29434, + "Ġdto": 29435, + "Ġ;;Ċ": 29436, + "Ġmint": 29437, + "ĠIntroduction": 29438, + "cao": 29439, + "Ġquestioned": 29440, + "Ġfitted": 29441, + "revision": 29442, + "sq": 29443, + "Ġmig": 29444, + "_units": 29445, + "_async": 29446, + "Ġflick": 29447, + "});ĊĊĊ": 29448, + "Ġnotre": 29449, + "}`,": 29450, + "Filters": 29451, + "Ġmundo": 29452, + "_days": 29453, + "Ġfrm": 29454, + "utc": 29455, + "Ġvals": 29456, + "ewidth": 29457, + "ĠGenerator": 29458, + "ĠArtist": 29459, + "ĠIDs": 29460, + "ĠArticles": 29461, + "reater": 29462, + "ĠComponentFixture": 29463, + ".=": 29464, + "Ġrou": 29465, + "-no": 29466, + ".bukkit": 29467, + "egg": 29468, + "ĠDiff": 29469, + "atics": 29470, + "ÑĥÑĩ": 29471, + "âĢĶĊĊ": 29472, + "ĠCharlotte": 29473, + "bye": 29474, + "Ġ});čĊčĊ": 29475, + "ĠVik": 29476, + "ĠBrow": 29477, + "Ġlv": 29478, + "ĠGib": 29479, + "-wing": 29480, + "GLIGENCE": 29481, + "(Il": 29482, + "ĠEngineer": 29483, + ".Wait": 29484, + "ĠPictures": 29485, + "Ġrhet": 29486, + "Ġthermal": 29487, + "Ġpraise": 29488, + "<>();ĊĊ": 29489, + "ĠSpider": 29490, + "Pause": 29491, + "ĠBaker": 29492, + "Ġslower": 29493, + "Ġ}]Ċ": 29494, + "_enqueue": 29495, + "Ġdisappeared": 29496, + "ĠTicket": 29497, + "INUX": 29498, + "_LOCAL": 29499, + "аÑģÑģ": 29500, + "@Injectable": 29501, + "community": 29502, + "GestureRecognizer": 29503, + "åĽ½": 29504, + "Ġscales": 29505, + "Ġ-(": 29506, + "/'+": 29507, + "ĠSit": 29508, + "Ġexecutives": 29509, + "arding": 29510, + "Ġadvers": 29511, + "Ġbackwards": 29512, + "ĉcontext": 29513, + "ĠHamp": 29514, + "ĠPF": 29515, + "ĠDeck": 29516, + "ĠCraig": 29517, + "American": 29518, + "Ġbell": 29519, + "Ġprol": 29520, + "ufen": 29521, + "Ġrng": 29522, + "arshal": 29523, + "ĠSimply": 29524, + "firstname": 29525, + "shore": 29526, + "July": 29527, + "Ġmortality": 29528, + "ĠâĨĴĊĊ": 29529, + "Helpers": 29530, + "Ġbenchmark": 29531, + "emade": 29532, + "Ġorganisations": 29533, + ".gson": 29534, + "ĠTextField": 29535, + "Ġcivilians": 29536, + ".Arrays": 29537, + "ĠMississippi": 29538, + "Ġintermediate": 29539, + "getUser": 29540, + "_cluster": 29541, + "Relative": 29542, + "foreign": 29543, + ".querySelectorAll": 29544, + "ForeignKey": 29545, + "Ġreasonably": 29546, + "---------Ċ": 29547, + "Cards": 29548, + "ĠKam": 29549, + "ĠThor": 29550, + "Ġroller": 29551, + "-element": 29552, + "ĠCurrency": 29553, + "ddie": 29554, + "ALLY": 29555, + "ĠRA": 29556, + "Ġpermet": 29557, + "aaaa": 29558, + "Ġhomework": 29559, + "ĠVit": 29560, + "Ġmold": 29561, + "ĠFer": 29562, + "[start": 29563, + "Ġstatistical": 29564, + "Ġscary": 29565, + "_HOME": 29566, + ".Begin": 29567, + "Construct": 29568, + "ogenic": 29569, + "ĠDEALINGS": 29570, + "Ġtambién": 29571, + "ixon": 29572, + ".ind": 29573, + "acre": 29574, + "Ġtransforms": 29575, + "ĠNap": 29576, + ".Block": 29577, + "ussia": 29578, + "piration": 29579, + "ulent": 29580, + "Ġceil": 29581, + "Clause": 29582, + "naire": 29583, + "TES": 29584, + "Ġneat": 29585, + "STD": 29586, + "ĠRegExp": 29587, + "perform": 29588, + ":)": 29589, + "Ġunions": 29590, + "Ġsublic": 29591, + "Ġwinds": 29592, + "loating": 29593, + "glich": 29594, + "Ġpagination": 29595, + "Skill": 29596, + "Apply": 29597, + "ĠOperator": 29598, + "istogram": 29599, + "Ġqualities": 29600, + "Cross": 29601, + "Ġdecom": 29602, + "],\"": 29603, + "ĠJuan": 29604, + ".modal": 29605, + ".Child": 29606, + "ĠRoger": 29607, + "STITUTE": 29608, + ":CGRectMake": 29609, + "alette": 29610, + "Ġsta": 29611, + "aside": 29612, + "Ġblur": 29613, + "ĠWa": 29614, + "ifetime": 29615, + "reed": 29616, + "controls": 29617, + "Ġbins": 29618, + "Ġпол": 29619, + "*/,Ċ": 29620, + "UIS": 29621, + "ĠRou": 29622, + "ĠDemo": 29623, + "-awesome": 29624, + "ĠChain": 29625, + "Ġhasta": 29626, + "ĠBart": 29627, + ".KEY": 29628, + "Ġvendors": 29629, + "nofollow": 29630, + "ĠDest": 29631, + "_builder": 29632, + "Ġargues": 29633, + "_answer": 29634, + "goto": 29635, + "ĠRESULT": 29636, + "ĠMON": 29637, + "Ġpoder": 29638, + "oons": 29639, + "_CASE": 29640, + "Ġreplic": 29641, + "Ġfinancing": 29642, + "ĠDATE": 29643, + "cern": 29644, + "_track": 29645, + "ties": 29646, + "/logo": 29647, + "ĠNEGLIGENCE": 29648, + "getType": 29649, + ">T": 29650, + "bet": 29651, + "girl": 29652, + "ĠINCIDENTAL": 29653, + "-site": 29654, + ".trigger": 29655, + "ĠLisa": 29656, + "_inputs": 29657, + "Ġrelatives": 29658, + "LoggedIn": 29659, + "Configure": 29660, + "IK": 29661, + ".accept": 29662, + "Resume": 29663, + "ĠDraft": 29664, + "Ġ*>(": 29665, + "ĠWA": 29666, + "edian": 29667, + "erness": 29668, + "ĠLayoutInflater": 29669, + "*/čĊčĊ": 29670, + "othy": 29671, + "Ġobligation": 29672, + "Subscribe": 29673, + "Ġthumbnail": 29674, + "exist": 29675, + "Ġinsisted": 29676, + "ĠUICollectionView": 29677, + "ĠAngular": 29678, + "Ġtablets": 29679, + "ĠImpact": 29680, + "ãĢįĊĊ": 29681, + "aho": 29682, + "Ġcharacteristic": 29683, + "gd": 29684, + "Ġ=================================================": 29685, + "ourt": 29686, + "`.": 29687, + "Appro": 29688, + "Coordinate": 29689, + "Remember": 29690, + "Ġmarine": 29691, + "]=='": 29692, + "ĠAdministrator": 29693, + ".getDefault": 29694, + "Ġforgot": 29695, + "ĠStructure": 29696, + "Vue": 29697, + "arsing": 29698, + "moment": 29699, + "kw": 29700, + "_cursor": 29701, + "Attack": 29702, + "Ġathletic": 29703, + "Ġdiagnosed": 29704, + "Ġende": 29705, + "åĪłéϤ": 29706, + "House": 29707, + "ĠPARAM": 29708, + "Ġwiki": 29709, + "ĠOpp": 29710, + "Ġconservation": 29711, + "Ġsnd": 29712, + "_tem": 29713, + "substr": 29714, + "ĠCape": 29715, + ".sim": 29716, + "UTION": 29717, + "anan": 29718, + "âĢĻun": 29719, + "Ġgy": 29720, + "-work": 29721, + "Ġcompelling": 29722, + "='#": 29723, + "ĉsub": 29724, + "Ġdirectories": 29725, + "íĬ¸": 29726, + "Ġtouches": 29727, + "outines": 29728, + ".Collection": 29729, + "schedule": 29730, + ".lat": 29731, + "ĠDoctrine": 29732, + "CAA": 29733, + "ĠRefer": 29734, + "Ġshifts": 29735, + "Ġlikelihood": 29736, + "preter": 29737, + "ĠFemale": 29738, + "Ġintercept": 29739, + "Ġlou": 29740, + "çĻ»": 29741, + "Ġrug": 29742, + "ĠCrown": 29743, + "Ġ****************************************************************************": 29744, + "-product": 29745, + "Ġprompted": 29746, + "ungle": 29747, + "docker": 29748, + "ĠTu": 29749, + "ĠUnique": 29750, + "_Error": 29751, + "ulos": 29752, + "ĠâĦ": 29753, + "Ġ(`": 29754, + "Getting": 29755, + "_scal": 29756, + "ĠEnh": 29757, + "üt": 29758, + "Ġsustained": 29759, + "Ġpatches": 29760, + "Ġprosper": 29761, + "ĠGaza": 29762, + "_light": 29763, + "Ġincons": 29764, + "--------Ċ": 29765, + "ĉĉĠĠĠĠĠĠ": 29766, + "SF": 29767, + "CN": 29768, + ":\";Ċ": 29769, + "ĠCollins": 29770, + "(*)": 29771, + "Ġcompilation": 29772, + "']čĊ": 29773, + "Ġconsequence": 29774, + ",...": 29775, + "Ġdm": 29776, + "ĠBLOCK": 29777, + "Cluster": 29778, + "Ġski": 29779, + "(argc": 29780, + "Tuple": 29781, + "Ġjoins": 29782, + "ĠSheriff": 29783, + "War": 29784, + "indi": 29785, + "Ġcommented": 29786, + "HOST": 29787, + "Ġinvitation": 29788, + "apanese": 29789, + "Ġpermits": 29790, + "precedented": 29791, + "_zone": 29792, + "ĠAmy": 29793, + "_RD": 29794, + "Minimum": 29795, + "Ġinvocation": 29796, + ".enable": 29797, + "ichten": 29798, + "-owned": 29799, + "\"id": 29800, + "_POINTER": 29801, + "Fac": 29802, + "Ġspecifications": 29803, + "Ġnomination": 29804, + "Ġgp": 29805, + "<(": 29806, + "Ġrobots": 29807, + "ĠJerry": 29808, + "Ġholders": 29809, + "Ġwand": 29810, + "cms": 29811, + "Ġ}))Ċ": 29812, + ".Toast": 29813, + "ĠIList": 29814, + "Based": 29815, + "zoom": 29816, + "/style": 29817, + "ĠBeck": 29818, + "Men": 29819, + "Ġcontributing": 29820, + "Ġundo": 29821, + "ĠOH": 29822, + "ĠaddObject": 29823, + "Ġeigen": 29824, + "signup": 29825, + "éĶĻ": 29826, + "Ġdistant": 29827, + "PARATOR": 29828, + "ĠMari": 29829, + "Ġmá": 29830, + "Emp": 29831, + "ós": 29832, + "ĠìĪĺ": 29833, + "evt": 29834, + "+j": 29835, + "park": 29836, + "ĠStay": 29837, + "ĠDun": 29838, + "Ġsoy": 29839, + ">%": 29840, + "azines": 29841, + "Ġtiempo": 29842, + "(me": 29843, + "present": 29844, + ".This": 29845, + "Ġeditors": 29846, + "FIELD": 29847, + ".Work": 29848, + "ĠUniverse": 29849, + "Ġdrunk": 29850, + ".timer": 29851, + "Ġaltered": 29852, + "ĠNar": 29853, + "ëł¥": 29854, + ".Active": 29855, + "idor": 29856, + "çŃ": 29857, + ".deltaTime": 29858, + "Ġawkward": 29859, + """: 29860, + "ĠSafari": 29861, + "Ġtricks": 29862, + "MENTS": 29863, + "division": 29864, + "Ġvarying": 29865, + "ĠHighway": 29866, + "Ġphotographer": 29867, + "ĠStewart": 29868, + "Ġlasting": 29869, + ".Pre": 29870, + ".amazonaws": 29871, + "ĠLuck": 29872, + ".Description": 29873, + "ĠNaz": 29874, + "neg": 29875, + "Ġcó": 29876, + "<<\"\\": 29877, + "ĠSurv": 29878, + "ĠUnc": 29879, + "Recipe": 29880, + ".BorderStyle": 29881, + "Ġmodifications": 29882, + "-at": 29883, + "ATFORM": 29884, + "hdr": 29885, + "ako": 29886, + "Ġsublicense": 29887, + "ĠJump": 29888, + "Ġbeim": 29889, + "ĠManhattan": 29890, + ".bool": 29891, + "_hw": 29892, + "ÑĤÑĮ": 29893, + "Bin": 29894, + "Ġgateway": 29895, + "\"\":": 29896, + "ĠUIS": 29897, + ":\"+": 29898, + "-def": 29899, + "ĠRegular": 29900, + "/testing": 29901, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 29902, + "stringstream": 29903, + "Ġdispar": 29904, + "Ġmobil": 29905, + "-read": 29906, + "ĠAdapter": 29907, + "ĠChampions": 29908, + "Ġscheduler": 29909, + "Ġkills": 29910, + "ĠMultiple": 29911, + "irror": 29912, + "Ġgods": 29913, + "ADO": 29914, + "akte": 29915, + "ĠUsuario": 29916, + ".circular": 29917, + "Ġrecept": 29918, + "ĠExpr": 29919, + "Ġelderly": 29920, + "Ġnicely": 29921, + "Ġbeste": 29922, + "Want": 29923, + "Ġclassical": 29924, + ".sprite": 29925, + "objc": 29926, + "ĠMason": 29927, + "Ġsistema": 29928, + ".Black": 29929, + "eso": 29930, + "ĠZeit": 29931, + "Ġdivid": 29932, + "Ġenters": 29933, + "_subject": 29934, + "ĠPlanet": 29935, + ".warning": 29936, + "ĠGram": 29937, + "_tokens": 29938, + "Ġhouseholds": 29939, + "_customer": 29940, + "userName": 29941, + "cross": 29942, + "Ġpione": 29943, + "Ġassists": 29944, + "_SM": 29945, + "ibo": 29946, + "Ġloyal": 29947, + "Ġuseless": 29948, + "#elif": 29949, + "ĠUltimate": 29950, + "Come": 29951, + "gel": 29952, + "Ġdich": 29953, + "xyz": 29954, + "ikel": 29955, + "obra": 29956, + "_scan": 29957, + "ĠInterior": 29958, + "ĠNice": 29959, + "Ġplac": 29960, + "ĉtarget": 29961, + "Ġviral": 29962, + "asso": 29963, + "()/": 29964, + "unde": 29965, + "ĠAdobe": 29966, + "Os": 29967, + "visited": 29968, + "ĠOW": 29969, + "ĠFeed": 29970, + "ĠSequence": 29971, + "Ġmanages": 29972, + "inson": 29973, + "ĠLouisiana": 29974, + "{})": 29975, + "ĠHab": 29976, + "ĠLD": 29977, + "Ġbip": 29978, + "prites": 29979, + "(elem": 29980, + ".hibernate": 29981, + "élé": 29982, + "Ġohne": 29983, + "_transaction": 29984, + "Ġannunci": 29985, + "Published": 29986, + "ĠHonda": 29987, + "ĠTam": 29988, + "ĠPacket": 29989, + "_selector": 29990, + "Ġchallenged": 29991, + "Processing": 29992, + "-hover": 29993, + "Ġtrainer": 29994, + "_cancel": 29995, + "ĠNSDictionary": 29996, + "abric": 29997, + "ĠMLS": 29998, + "_sensor": 29999, + "Ġshrink": 30000, + "ĠFX": 30001, + "threshold": 30002, + "ĉHX": 30003, + "-mark": 30004, + "`.`": 30005, + "Scheme": 30006, + "(full": 30007, + "_writer": 30008, + "ĠSys": 30009, + "Ġfled": 30010, + "ĠCin": 30011, + "-widget": 30012, + "ĠPrevious": 30013, + "Gender": 30014, + "_question": 30015, + "Feed": 30016, + "Ġscrut": 30017, + "(prefix": 30018, + "ãĢĤãĢĤ": 30019, + "Ġinfections": 30020, + "Parts": 30021, + "Ġhierarchy": 30022, + "_DELETE": 30023, + "ĠPatient": 30024, + "_pay": 30025, + "Ġpromoted": 30026, + "Ġìĭ": 30027, + "Ġcivilian": 30028, + "Ġagriculture": 30029, + "ĠPiece": 30030, + "Ġstance": 30031, + "utsche": 30032, + "Assign": 30033, + ".ACTION": 30034, + "Fig": 30035, + "_radius": 30036, + "ĠSync": 30037, + "ducer": 30038, + "failure": 30039, + "ensed": 30040, + "ptime": 30041, + "BM": 30042, + "_datetime": 30043, + "quivo": 30044, + "QUEUE": 30045, + "èĢħ": 30046, + "Appear": 30047, + "Ġsummit": 30048, + ":void": 30049, + "Ġvine": 30050, + "认": 30051, + "onne": 30052, + "_TRANS": 30053, + ".green": 30054, + "_cc": 30055, + "Ġhungry": 30056, + "Ġ\">": 30057, + "());čĊčĊ": 30058, + "Extract": 30059, + "izens": 30060, + "Ġsolver": 30061, + "Notify": 30062, + "Ġenglish": 30063, + "ĠShopping": 30064, + "interfaces": 30065, + "REQ": 30066, + "Ġilleg": 30067, + "ĠUIImageView": 30068, + "Ġdisconnect": 30069, + "ĠUntil": 30070, + "ĠConservative": 30071, + "@Column": 30072, + "Ġshifted": 30073, + "Ġ:čĊ": 30074, + "Ġfich": 30075, + "Ġdla": 30076, + "Ġshoe": 30077, + "\"),čĊ": 30078, + "ularity": 30079, + "_RESP": 30080, + "Weather": 30081, + "UIApplication": 30082, + ".iterator": 30083, + "Ġaging": 30084, + ".Parent": 30085, + "owie": 30086, + "(equal": 30087, + "ĠConv": 30088, + "/default": 30089, + "Ġmeasuring": 30090, + ".prev": 30091, + ".IsValid": 30092, + ".Fat": 30093, + "ĠsÄĥ": 30094, + "keywords": 30095, + "without": 30096, + "Ġsovere": 30097, + "Ġexchanges": 30098, + "Ġmelt": 30099, + "Ġislands": 30100, + "ĠIntegr": 30101, + "Ġjumping": 30102, + "Ġgle": 30103, + "Ġjournalism": 30104, + "Ġdated": 30105, + "Localized": 30106, + "ĠRefresh": 30107, + "Particle": 30108, + "Ġaa": 30109, + "ĠSTRICT": 30110, + "Ġbod": 30111, + ".Process": 30112, + "_AUTO": 30113, + "ĠPublished": 30114, + "every": 30115, + "Ġtechnological": 30116, + "lsx": 30117, + "Ġirrit": 30118, + "Additional": 30119, + "Ġdelimiter": 30120, + "_language": 30121, + "-area": 30122, + "boys": 30123, + "ĠTube": 30124, + "Ġwat": 30125, + "Ġmechanics": 30126, + "_owner": 30127, + "Spell": 30128, + "ĠStories": 30129, + ".AppendLine": 30130, + "TableView": 30131, + "hem": 30132, + "stick": 30133, + "ollower": 30134, + "IFF": 30135, + "ĠUV": 30136, + "ollision": 30137, + "SUB": 30138, + "Ġcomparable": 30139, + "Ġdonde": 30140, + "sales": 30141, + "llvm": 30142, + "Ġ}],Ċ": 30143, + "OTTOM": 30144, + "ĠPurpose": 30145, + "Lab": 30146, + "Ġinterviewed": 30147, + "ois": 30148, + "asil": 30149, + ".setId": 30150, + "ĠInstruction": 30151, + "-->": 30152, + "ĠModified": 30153, + "ationally": 30154, + "ĠMeeting": 30155, + "误": 30156, + "#region": 30157, + "Ġrouting": 30158, + ".focus": 30159, + "ĠYouth": 30160, + "<": 30448, + "Ġunto": 30449, + "ologically": 30450, + "ĠMul": 30451, + "VIDIA": 30452, + "Ġslim": 30453, + "ĠCommissioner": 30454, + "(on": 30455, + "Ġunderneath": 30456, + "/db": 30457, + "vote": 30458, + "(Message": 30459, + "ĠPope": 30460, + "Defined": 30461, + "Ġswift": 30462, + "urf": 30463, + "Ġadapted": 30464, + "SEL": 30465, + "Ġrevenues": 30466, + "Ġdivine": 30467, + "=y": 30468, + "Gradient": 30469, + "_act": 30470, + "Ġ/*!<": 30471, + "Ġpolygon": 30472, + "ĠFDA": 30473, + "ĠCarr": 30474, + "atables": 30475, + "(stdout": 30476, + "Ġrefriger": 30477, + "Ġcoordin": 30478, + "avorites": 30479, + "ÑĪи": 30480, + "Ġcompassion": 30481, + "ĠPOSSIBILITY": 30482, + "-secondary": 30483, + "uracy": 30484, + "Ġcompromise": 30485, + "_AV": 30486, + "_os": 30487, + "Ġbeside": 30488, + "ĥĿ": 30489, + "Ġln": 30490, + ".plugins": 30491, + "Capacity": 30492, + "alah": 30493, + ".bin": 30494, + "ĠCRC": 30495, + "_balance": 30496, + "ĠflexDirection": 30497, + "Ġambit": 30498, + "Ġnickname": 30499, + "ĠForces": 30500, + "CLE": 30501, + "ĠShell": 30502, + "Ġsail": 30503, + "ĠWriter": 30504, + "ĠAlice": 30505, + "dw": 30506, + "ĠIndians": 30507, + "ĠMarshall": 30508, + "_SRC": 30509, + "Ġnormalized": 30510, + "ĠJag": 30511, + "ãĤĴ": 30512, + "zeit": 30513, + "rpc": 30514, + "ÃŃc": 30515, + ".inline": 30516, + "Ġtravers": 30517, + "_numeric": 30518, + "Ġutilities": 30519, + "Ġevac": 30520, + "INPUT": 30521, + "ĉregister": 30522, + "MX": 30523, + "ĠCampbell": 30524, + "Ġdatasets": 30525, + "Ġdemanded": 30526, + "ĠinitialState": 30527, + "gan": 30528, + "Ġei": 30529, + "Unexpected": 30530, + "-web": 30531, + "trait": 30532, + ",Y": 30533, + "ĠTodd": 30534, + "Ġskeleton": 30535, + "Ġoptimize": 30536, + "第": 30537, + "ĠUpon": 30538, + "ĠStObject": 30539, + "Ġaplic": 30540, + ".'P": 30578, + "vron": 30579, + ".UN": 30580, + "Ġpainter": 30581, + "izarre": 30582, + "Ġlav": 30583, + "Ġpom": 30584, + "preg": 30585, + "=function": 30586, + "(serial": 30587, + "ifica": 30588, + "uming": 30589, + "åľ°": 30590, + "ãģĤ": 30591, + "-op": 30592, + "UCH": 30593, + "ĠHend": 30594, + ".propTypes": 30595, + "Ġyo": 30596, + "Ġroutines": 30597, + "Ġcaring": 30598, + "Sem": 30599, + "Ġreserves": 30600, + "Ġpriorities": 30601, + "redits": 30602, + "ISTR": 30603, + "ContentType": 30604, + "ĠSchw": 30605, + "/media": 30606, + "Ġestr": 30607, + "Ġclimbing": 30608, + "-week": 30609, + "cherche": 30610, + "sensor": 30611, + "ToArray": 30612, + "ĠMontreal": 30613, + "Ġclouds": 30614, + "ĠInjectable": 30615, + "ĠRice": 30616, + "Ġpropaganda": 30617, + "_provider": 30618, + "Ġindoor": 30619, + "Ġinaug": 30620, + "Ġdiplom": 30621, + "Ġmessaging": 30622, + "_mut": 30623, + "å¦Ĥ": 30624, + "Ġkw": 30625, + "ONS": 30626, + "arians": 30627, + "RPC": 30628, + ")]čĊ": 30629, + "-ray": 30630, + "ĠSor": 30631, + "mall": 30632, + "Ġmarketplace": 30633, + "Ġvtk": 30634, + "Ma": 30635, + "ogan": 30636, + "igi": 30637, + "Ġsponsored": 30638, + "ĠDani": 30639, + ".SEVER": 30640, + ">'.$": 30641, + "multipart": 30642, + "ĠWol": 30643, + "ĠtableName": 30644, + "ĠUsername": 30645, + "BackgroundColor": 30646, + "Ġfright": 30647, + "_EMAIL": 30648, + "September": 30649, + "_vals": 30650, + "opia": 30651, + "Ġspotted": 30652, + "-Ch": 30653, + "ĠdataSource": 30654, + "/\"Ċ": 30655, + "екÑĤ": 30656, + "ĠRequestMethod": 30657, + "ĠReplace": 30658, + "-do": 30659, + "ahn": 30660, + "ĠPhD": 30661, + "].ĊĊ": 30662, + "NON": 30663, + "gement": 30664, + "ĠThr": 30665, + "Ġquietly": 30666, + "Ġtorture": 30667, + "Ġteas": 30668, + "ĠCY": 30669, + "Ġatr": 30670, + "development": 30671, + "-detail": 30672, + "Ġlighter": 30673, + "Ġarguing": 30674, + "Ġdeserves": 30675, + "Ġcurriculum": 30676, + "_CONTEXT": 30677, + "ÅĤy": 30678, + "HITE": 30679, + "ĉID": 30680, + "/uploads": 30681, + "Ġtits": 30682, + "reo": 30683, + "_drop": 30684, + ".UTF": 30685, + "Ġpickup": 30686, + "Ġgrocery": 30687, + "ĠPure": 30688, + "Ġeasiest": 30689, + "Phil": 30690, + ".feature": 30691, + "(\"*": 30692, + "Ġinvestor": 30693, + "tok": 30694, + "Ġjar": 30695, + "Los": 30696, + "âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ": 30697, + ".queue": 30698, + "-speed": 30699, + "Mal": 30700, + "umblr": 30701, + "ĠCONST": 30702, + "ĠHRESULT": 30703, + "ĠDance": 30704, + "(filePath": 30705, + "Ġattributed": 30706, + "à¥į": 30707, + "ĠBund": 30708, + "coins": 30709, + "Ġsão": 30710, + "Ġpir": 30711, + "personal": 30712, + "Ġprelim": 30713, + "Ġpropose": 30714, + "ĠTL": 30715, + "]])": 30716, + "ĠSubscription": 30717, + "ĠKre": 30718, + ",len": 30719, + ".FirstOrDefault": 30720, + ")--": 30721, + "_products": 30722, + ".GetBytes": 30723, + "Ship": 30724, + "Ġencrypt": 30725, + "ĠSG": 30726, + "ĠMyst": 30727, + "hir": 30728, + "Ġiterate": 30729, + "Ġintend": 30730, + ".mockito": 30731, + "Ġchapters": 30732, + "(angle": 30733, + "ĠVlad": 30734, + "设": 30735, + "'.ĊĊ": 30736, + "ResponseBody": 30737, + "ĠAbd": 30738, + "deal": 30739, + "Ġbarriers": 30740, + "-outline": 30741, + "bill": 30742, + "ĠFalls": 30743, + "_second": 30744, + ".include": 30745, + ".ceil": 30746, + "Ġoccupation": 30747, + "phony": 30748, + ".moveTo": 30749, + "ĠJennifer": 30750, + "ASTER": 30751, + ";\"><": 30752, + "ĠEnabled": 30753, + "Ġterminate": 30754, + "ĠIo": 30755, + "lations": 30756, + "ĠTHEORY": 30757, + "Ġearliest": 30758, + "Ġrack": 30759, + "ĠScar": 30760, + "shake": 30761, + "chip": 30762, + "Ġuv": 30763, + "Ġalliance": 30764, + "пиÑģ": 30765, + "ĠGOODS": 30766, + "zione": 30767, + "ĠVI": 30768, + "Ġ{-": 30769, + "Ġfiltering": 30770, + "Ġmiscon": 30771, + ".DockStyle": 30772, + "Ġbush": 30773, + "Ġjunk": 30774, + "æĮ": 30775, + "ĠQUE": 30776, + "Ġhooks": 30777, + "Ġfirmware": 30778, + "Ġmiddleware": 30779, + "dic": 30780, + "ĠOakland": 30781, + "Ġarrives": 30782, + "Payload": 30783, + "pixel": 30784, + "]|": 30785, + "ĠstartDate": 30786, + ".PRO": 30787, + "_audio": 30788, + "Ġmidfield": 30789, + "igidbody": 30790, + "ĠSwiss": 30791, + "ĠClip": 30792, + "ĠDump": 30793, + "ĠTextBox": 30794, + "Ġgeh": 30795, + "yield": 30796, + "ods": 30797, + "Ġreferendum": 30798, + "Backend": 30799, + "ĠCream": 30800, + "Ġdominated": 30801, + "ĠArchive": 30802, + "Ġriders": 30803, + ".prepareStatement": 30804, + "Ġquando": 30805, + "Ġchef": 30806, + "wiki": 30807, + "inel": 30808, + "ampling": 30809, + "(\"\\\\": 30810, + "Ġsag": 30811, + "_proxy": 30812, + "ãģķ": 30813, + "pdo": 30814, + ".getElementsByTagName": 30815, + "Ġdemonstration": 30816, + "ĠNPC": 30817, + "Ġarchivo": 30818, + "endance": 30819, + "Ġefficiently": 30820, + "(actual": 30821, + ".tableView": 30822, + "Ġmush": 30823, + "Ġbears": 30824, + "_threads": 30825, + "jas": 30826, + "ahun": 30827, + "Ġneural": 30828, + "Ġdesigning": 30829, + "ĠGDP": 30830, + "Ġlifted": 30831, + "缮": 30832, + "ĠJoint": 30833, + "ĠInclude": 30834, + "ĠGiants": 30835, + "Ġwithdrawal": 30836, + "ĠRent": 30837, + "native": 30838, + "ĠSeek": 30839, + "gression": 30840, + "_CPU": 30841, + "\\S": 30842, + "ĠShield": 30843, + "Ġsolic": 30844, + "Ġboom": 30845, + "yecto": 30846, + "Ġmanufacture": 30847, + "ĠâĢĭ": 30848, + "Ġbbox": 30849, + "Ġearthqu": 30850, + "ollectors": 30851, + ":@\"%": 30852, + "Ġloops": 30853, + "Je": 30854, + "alking": 30855, + "ĠWhats": 30856, + "ĠBoys": 30857, + ".book": 30858, + "ARGE": 30859, + "_pixel": 30860, + "Ġsuspects": 30861, + "ι": 30862, + "usp": 30863, + "ĠBMW": 30864, + "ieces": 30865, + "(person": 30866, + "å¼Ģ": 30867, + "é»": 30868, + "ĠPodcast": 30869, + "Ġbou": 30870, + "(Item": 30871, + "û": 30872, + "(Input": 30873, + "HttpGet": 30874, + "Ġburg": 30875, + ")^": 30876, + "BOARD": 30877, + "*/,": 30878, + "Ġgulp": 30879, + "ĠBenn": 30880, + "Ġdecks": 30881, + ".statusCode": 30882, + "Ġacute": 30883, + "Ġhug": 30884, + "ugu": 30885, + "Ġpled": 30886, + ",\"%": 30887, + "hape": 30888, + "Ġзап": 30889, + "ĠMaine": 30890, + ".real": 30891, + "Ġdalam": 30892, + "ĠMinor": 30893, + ".Float": 30894, + "disp": 30895, + "Ġtl": 30896, + "Ġencount": 30897, + "=>$": 30898, + "Ġfg": 30899, + "tees": 30900, + "ĠRecomm": 30901, + "äl": 30902, + "Ġchemistry": 30903, + "Blocks": 30904, + "OID": 30905, + "Ġforex": 30906, + "ĠAppend": 30907, + "Ġ{*": 30908, + "ĠSupply": 30909, + "CGFloat": 30910, + "(bl": 30911, + "Ġate": 30912, + "adora": 30913, + "Ġgust": 30914, + "Associ": 30915, + ">.Ċ": 30916, + "FETCH": 30917, + ".serial": 30918, + "widgets": 30919, + "ardless": 30920, + "iefs": 30921, + "_FULL": 30922, + "ernetes": 30923, + "ĠPred": 30924, + "ØŃ": 30925, + "äºĭ": 30926, + "ubernetes": 30927, + "ĠLaura": 30928, + "Ġlabeled": 30929, + "Highlight": 30930, + "Ġannoying": 30931, + "/update": 30932, + "(description": 30933, + "Ġintimid": 30934, + "$c": 30935, + "\")))Ċ": 30936, + ".AP": 30937, + "Ġ[]*": 30938, + "ĠEXIT": 30939, + ".Host": 30940, + "ĠOPEN": 30941, + ".sendMessage": 30942, + "_camera": 30943, + "_tile": 30944, + "Ġtherm": 30945, + "onomous": 30946, + "Ġdisadv": 30947, + "Ġnaar": 30948, + "indexOf": 30949, + "ĠPP": 30950, + ".protocol": 30951, + "AFE": 30952, + "Ġtextures": 30953, + "################################################": 30954, + "umbai": 30955, + ".stats": 30956, + "ĠGE": 30957, + "Ġie": 30958, + "ĠSTD": 30959, + "ĠMann": 30960, + ".reflect": 30961, + "KB": 30962, + "Ġdive": 30963, + ".wav": 30964, + "/*----------------------------------------------------------------": 30965, + "/settings": 30966, + ".lifecycle": 30967, + "Ġdaughters": 30968, + "orus": 30969, + "uber": 30970, + "NING": 30971, + "stri": 30972, + "ĠTip": 30973, + "Ġzn": 30974, + "Ġswitched": 30975, + "inet": 30976, + "uffy": 30977, + "ĠTransportation": 30978, + "(conf": 30979, + "frica": 30980, + "ĠXL": 30981, + "ĠLead": 30982, + "_percent": 30983, + "__": 30999, + "permissions": 31000, + "ĠDetermine": 31001, + ".Man": 31002, + "Ġadvances": 31003, + ".InputStream": 31004, + "Ġstrongest": 31005, + "ĠeBay": 31006, + "Ġ#-": 31007, + "Ġdirname": 31008, + "ĠSMS": 31009, + "Ġmedications": 31010, + "Ġamended": 31011, + "Ġchurches": 31012, + "ĠImperial": 31013, + "$row": 31014, + "ĠMadison": 31015, + "ĠInsp": 31016, + "Ġaffair": 31017, + "Ġpsychology": 31018, + "vh": 31019, + "Ġseverity": 31020, + "âĢIJ": 31021, + "Ġstrips": 31022, + "AH": 31023, + "vertising": 31024, + "Ġconse": 31025, + "IMAGE": 31026, + "ĠStats": 31027, + "ĉsc": 31028, + ".Cursor": 31029, + "Ġfreeze": 31030, + "sson": 31031, + "(xml": 31032, + "ĠSusan": 31033, + ".tile": 31034, + "eded": 31035, + "ĠĠĠĠĉĉĉ": 31036, + "uelle": 31037, + "ĠMitchell": 31038, + "based": 31039, + "Operand": 31040, + "½æķ°": 31041, + "ĠFF": 31042, + "ĉstrcpy": 31043, + "ounces": 31044, + "ildo": 31045, + ".executeQuery": 31046, + "Ġapproaching": 31047, + "ĠSeven": 31048, + "Ġnuts": 31049, + "Ġric": 31050, + "assignment": 31051, + "Ġcalculator": 31052, + "ĠMurphy": 31053, + "ĠBou": 31054, + "íĦ": 31055, + "Ġbutt": 31056, + "Ġticks": 31057, + "Projects": 31058, + "ilib": 31059, + ".textColor": 31060, + "mov": 31061, + "_logo": 31062, + "(template": 31063, + "ĠINIT": 31064, + "ĠimageView": 31065, + "scriptions": 31066, + "ORITY": 31067, + "Consumer": 31068, + "Ġunprecedented": 31069, + "Ġtourist": 31070, + "Ġbron": 31071, + "Ġcontractor": 31072, + "Ġlicence": 31073, + "ĠNam": 31074, + "æ¯": 31075, + "(transform": 31076, + "_ATT": 31077, + "Pref": 31078, + "ĠGam": 31079, + "Ġvessels": 31080, + "Ġhav": 31081, + "Later": 31082, + ".ToLower": 31083, + "Ġurls": 31084, + "Ġbreakdown": 31085, + "Ġpenalties": 31086, + "Ġfoster": 31087, + "ĠUE": 31088, + "Ġclue": 31089, + "comed": 31090, + "åIJįç§°": 31091, + "-main": 31092, + "Ġpts": 31093, + "Ġcounted": 31094, + "icts": 31095, + "/post": 31096, + "Ġgetattr": 31097, + "Ġping": 31098, + "ANCEL": 31099, + "Ġpec": 31100, + "Ñħод": 31101, + "antom": 31102, + "ĠBlueprint": 31103, + "ĠEventEmitter": 31104, + "Ġlä": 31105, + "æ²": 31106, + "Ġstraw": 31107, + "(comp": 31108, + "'une": 31109, + ">N": 31110, + "-client": 31111, + "esModule": 31112, + "-base": 31113, + "Ġretreat": 31114, + "_simple": 31115, + "ĉĉĉĉĉĉĠ": 31116, + "fee": 31117, + "')čĊčĊ": 31118, + "ControlItem": 31119, + "Ġsubscribers": 31120, + "please": 31121, + "ĠEff": 31122, + "Ġpound": 31123, + "ĠBytes": 31124, + "ĠTea": 31125, + "_activity": 31126, + "Ġmaxim": 31127, + "Ġopcode": 31128, + "BSD": 31129, + ".constant": 31130, + ";}": 31131, + "ombres": 31132, + "Ġcareers": 31133, + ").ĊĊĊĊ": 31134, + "Ġspreading": 31135, + "-expanded": 31136, + "ĠOrd": 31137, + "amarin": 31138, + "Ġmobility": 31139, + "Unfortunately": 31140, + "akk": 31141, + "NL": 31142, + "_redirect": 31143, + "ĠPG": 31144, + "ĠSensor": 31145, + "bol": 31146, + "tap": 31147, + "_MEMORY": 31148, + "ĠUIAlert": 31149, + "plitude": 31150, + "Website": 31151, + "ĠLogo": 31152, + "love": 31153, + "[ind": 31154, + "Ġaltogether": 31155, + "Ġwondered": 31156, + "Ġesper": 31157, + "ĠLiberal": 31158, + "Ġoss": 31159, + "Ġelit": 31160, + "Ġstiff": 31161, + "odox": 31162, + "_mentions": 31163, + "ĠDouglas": 31164, + "_pid": 31165, + "ĠCK": 31166, + "ĠinitWithFrame": 31167, + ".blog": 31168, + "pkg": 31169, + "anghai": 31170, + "QUIRED": 31171, + "uu": 31172, + "Ġmkdir": 31173, + "ATAL": 31174, + "Ġunh": 31175, + "inces": 31176, + "sth": 31177, + "Ġhypothesis": 31178, + "Ġcata": 31179, + "ĠTB": 31180, + "ĠClar": 31181, + "Ġpredecess": 31182, + "Ġsituated": 31183, + "-world": 31184, + "))/": 31185, + "Ġheadlines": 31186, + ".stat": 31187, + "Ġoutbreak": 31188, + "spath": 31189, + "_FLAGS": 31190, + "ĠServletException": 31191, + "Sun": 31192, + "FROM": 31193, + "ĠDir": 31194, + "ãĥ»ãĥ»ãĥ»": 31195, + "_coord": 31196, + "ĠOptim": 31197, + "Monitor": 31198, + ".bit": 31199, + "XXX": 31200, + "Ġtodas": 31201, + "feld": 31202, + "ÑĢи": 31203, + "imir": 31204, + "Ġpolitically": 31205, + "Ġmolecular": 31206, + "Ġtraded": 31207, + "Ġ{{$": 31208, + "ĠSwedish": 31209, + "Ġ'@/": 31210, + "_REAL": 31211, + "Ġwarehouse": 31212, + "today": 31213, + ",L": 31214, + "orp": 31215, + "false": 31492, + "Ġspa": 31493, + "ĠNear": 31494, + "ìķ": 31495, + "Ġintrig": 31496, + "_members": 31497, + "wave": 31498, + "Ġanalysts": 31499, + "_OS": 31500, + "edin": 31501, + "ĠFri": 31502, + "Ġretrieved": 31503, + "Regular": 31504, + "_obs": 31505, + "EXPORT": 31506, + "')}}\"": 31507, + "\"class": 31508, + "__((": 31509, + "bucket": 31510, + "Ġstro": 31511, + "ĠPatch": 31512, + "ystick": 31513, + "fulness": 31514, + "apos": 31515, + "Da": 31516, + "ĉĉĉĉĉĠĠĠ": 31517, + "Ġenrich": 31518, + "unordered": 31519, + "hole": 31520, + "Cong": 31521, + "';ĊĊ": 31563, + "STRUCT": 31564, + "QR": 31565, + "IDs": 31566, + "(arguments": 31567, + "_aux": 31568, + "(Event": 31569, + "_PRIVATE": 31570, + "ĠTrek": 31571, + "Ġdownloads": 31572, + "mutable": 31573, + "_STRUCT": 31574, + "(wx": 31575, + "Ġdomains": 31576, + "jspx": 31577, + "ĠViagra": 31578, + "Commands": 31579, + "Js": 31580, + ".cfg": 31581, + "ContentPane": 31582, + "ĠEditText": 31583, + "à¥įà¤": 31584, + "Attach": 31585, + "ĠARM": 31586, + "positive": 31587, + "ĠGenerated": 31588, + "Ġseized": 31589, + "=:": 31590, + "Ġelectronics": 31591, + "ĠAppComponent": 31592, + "/',Ċ": 31593, + ".equalsIgnoreCase": 31594, + "Doctrine": 31595, + "disk": 31596, + "ĠPolitical": 31597, + "CHO": 31598, + "": 31684, + "ĠBeauty": 31685, + "Ġ`<": 31686, + "Ġtouching": 31687, + "Ġ|--": 31688, + "ĉflag": 31689, + "normalize": 31690, + "Ġtrapped": 31691, + "Ġestablishing": 31692, + "/build": 31693, + "AJ": 31694, + "fy": 31695, + "-react": 31696, + "avn": 31697, + "RIPTION": 31698, + "Ġkut": 31699, + "ĠFashion": 31700, + "ĠInform": 31701, + "curities": 31702, + "{Ċ": 31734, + "Ġgarlic": 31735, + "Ġrepr": 31736, + "Ġreplies": 31737, + "(prop": 31738, + "Ġspirits": 31739, + "Ġinspire": 31740, + "Ġbasement": 31741, + ".reject": 31742, + "Ġhints": 31743, + "Ġpolling": 31744, + "ĉĠĊ": 31745, + "_rating": 31746, + "Ġcath": 31747, + "avier": 31748, + "Ġcompressed": 31749, + "ĠVS": 31750, + "]'": 31751, + "Ġjudicial": 31752, + "ĠTrend": 31753, + "training": 31754, + "ESTAMP": 31755, + "ognition": 31756, + "Äģ": 31757, + "SENT": 31758, + "ventions": 31759, + "Ġconsultant": 31760, + "umph": 31761, + "ĠuserService": 31762, + ",NULL": 31763, + "kh": 31764, + "Dear": 31765, + "_BAD": 31766, + "itations": 31767, + "Ġmetaph": 31768, + "'é": 31769, + "andise": 31770, + "-font": 31771, + ".chart": 31772, + "Ġsg": 31773, + "_Controller": 31774, + ".jpeg": 31775, + "ĠULONG": 31776, + "ĉgame": 31777, + "(ss": 31778, + "ĠMaj": 31779, + "ĉgo": 31780, + "ĠSad": 31781, + "ĠBerg": 31782, + "ĠMine": 31783, + "Pack": 31784, + "Ġresistant": 31785, + "ĠROM": 31786, + "Ġpeg": 31787, + "ĠStanford": 31788, + "ĠYahoo": 31789, + "Ġscaled": 31790, + "Ġlan": 31791, + "=[]": 31792, + "\"/>ččĊ": 31836, + "Ġsud": 31837, + "ĉbackground": 31838, + "Ġscholars": 31839, + "-muted": 31840, + "ará": 31841, + "Ġ=====": 31842, + "Ġ____": 31843, + "Creat": 31844, + "enever": 31845, + "/wp": 31846, + "ĠVPN": 31847, + "ErrorCode": 31848, + ")],Ċ": 31849, + "(builder": 31850, + "ĠEnemy": 31851, + "Sensor": 31852, + "usa": 31853, + "Ġtriggers": 31854, + "Ġplayoffs": 31855, + "_REQ": 31856, + "Ġ(~": 31857, + "ĠBarry": 31858, + "Ġpermanently": 31859, + "ĠRUN": 31860, + "Ġbure": 31861, + ".Fatalf": 31862, + "Ġchick": 31863, + "ĉpanic": 31864, + "psi": 31865, + "oka": 31866, + "éĢī": 31867, + ">[": 31868, + "Ġunderstands": 31869, + "ĠJunior": 31870, + "ĠINFO": 31871, + "=mysqli": 31872, + "ustain": 31873, + "-source": 31874, + "serv": 31875, + "ĠCREATE": 31876, + ".au": 31877, + "Ġsells": 31878, + "ĠĠĊĠĠĊ": 31879, + "Europe": 31880, + "zw": 31881, + "preh": 31882, + "ĠNSA": 31883, + "Ġxy": 31884, + "ิ": 31885, + "ĠBeyond": 31886, + "Instead": 31887, + "NonQuery": 31888, + "Ġarise": 31889, + "Ġavoided": 31890, + ".emplace": 31891, + "_models": 31892, + "}),Ċ": 31893, + "Ġhid": 31894, + "Ġ&_": 31895, + ".points": 31896, + ".getWidth": 31897, + ".Exec": 31898, + "Ġ////": 31899, + "ĠSessions": 31900, + "...\\": 31901, + "ĠColomb": 31902, + "Ġacceleration": 31903, + "restore": 31904, + "Ġile": 31905, + "obic": 31906, + "}Ċ": 32396, + "plaint": 32397, + "getText": 32398, + "Ġindividually": 32399, + "Ġcheckbox": 32400, + "UY": 32401, + "ĠLamb": 32402, + "Ġdysfunction": 32403, + "ĠLar": 32404, + "à°": 32405, + "ĠCreating": 32406, + "');ĊĊĊ": 32407, + "\"They": 32408, + "locations": 32409, + "_CORE": 32410, + "Interaction": 32411, + "umbnails": 32412, + "ĠPartner": 32413, + "brit": 32414, + "Ġlesser": 32415, + "ĠSlot": 32416, + "setAttribute": 32417, + "ĠWave": 32418, + ".po": 32419, + "/store": 32420, + "Ġbrowsing": 32421, + "_pd": 32422, + "sume": 32423, + "sed": 32424, + "Curve": 32425, + "Ġplasma": 32426, + "Ġsuspicious": 32427, + "ìĿ¸": 32428, + "ĠBah": 32429, + "ĠExplicit": 32430, + "_CC": 32431, + ".ClientSize": 32432, + "\\View": 32433, + "Ġsubstit": 32434, + "loon": 32435, + "ĠGAME": 32436, + "ĠBrid": 32437, + "Ľå»º": 32438, + "_User": 32439, + "Ġsquares": 32440, + "fone": 32441, + "Ġsacred": 32442, + "ughs": 32443, + "]interface": 32444, + "ĠThrow": 32445, + "ĠKirk": 32446, + "Ġempire": 32447, + "Ġassessed": 32448, + "Tax": 32449, + "ĠHeaven": 32450, + "-buffer": 32451, + "_STATIC": 32452, + "éné": 32453, + "-bordered": 32454, + "Ġpunct": 32455, + "(mode": 32456, + "Ġkeine": 32457, + "Sent": 32458, + "ĠCalcul": 32459, + "ĠEve": 32460, + "Ġstylish": 32461, + "Ġoils": 32462, + ".TestCase": 32463, + "Ġtrademark": 32464, + "Ġliterary": 32465, + "Ġconcentrations": 32466, + "ĠRelations": 32467, + "(Class": 32468, + "Ġstdin": 32469, + "Ġvæ": 32470, + "backup": 32471, + ".VERSION": 32472, + ".AutoScaleDimensions": 32473, + "starter": 32474, + "Transactional": 32475, + "-panel": 32476, + "Studio": 32477, + "kc": 32478, + "ĠChamber": 32479, + "ĠSpiel": 32480, + "Ġrho": 32481, + "اÙĦ": 32482, + "!'": 32483, + ".Attributes": 32484, + "Ġmurdered": 32485, + "apeutic": 32486, + "Ġintimate": 32487, + "ĠtextField": 32488, + "ĠBuffalo": 32489, + "dummy": 32490, + "\"%": 32491, + "ĠLiberty": 32492, + "obar": 32493, + "ĠTank": 32494, + "ĠPopular": 32495, + "ervisor": 32496, + "ĠIniti": 32497, + "ĠMall": 32498, + "ĠPrior": 32499, + "CAP": 32500, + "ĠClay": 32501, + "ĠCertificate": 32502, + ".Lock": 32503, + "-strip": 32504, + "-driven": 32505, + "/all": 32506, + "ĠMessageBoxButtons": 32507, + "_SECRET": 32508, + "_pb": 32509, + "Ġrats": 32510, + "ाà¤": 32511, + "Ġnt": 32512, + ".Router": 32513, + "_topic": 32514, + "Ġtennis": 32515, + "ĠPUBLIC": 32516, + "ĠActivatedRoute": 32517, + "Ġ',Ċ": 32518, + "Ġcostume": 32519, + "Ġjokes": 32520, + ".Handle": 32521, + "ĉbyte": 32522, + "Ġflavors": 32523, + "(cc": 32524, + "Ġpersonas": 32525, + "ĉimage": 32526, + "ĠNazi": 32527, + "Ġgrammar": 32528, + "Ġúlt": 32529, + "Ġvalve": 32530, + "Ġvic": 32531, + "ĠRachel": 32532, + "_invalid": 32533, + "Prefs": 32534, + "stdint": 32535, + "(route": 32536, + "Ġhtmlspecialchars": 32537, + "Ġpeoples": 32538, + "pline": 32539, + "Ġnv": 32540, + "ĠQuant": 32541, + "oppers": 32542, + "ĠcurrentUser": 32543, + "ĠCatal": 32544, + "Ġreconc": 32545, + "Ġconjunction": 32546, + "lx": 32547, + "amburg": 32548, + "Ġinfluential": 32549, + "danger": 32550, + "inders": 32551, + "Ġ%@\",": 32552, + ".configuration": 32553, + "osome": 32554, + ".identity": 32555, + "Ġpicker": 32556, + "nost": 32557, + "ĠDIY": 32558, + "August": 32559, + "ablo": 32560, + "Leaf": 32561, + "ĠReco": 32562, + "cko": 32563, + "DOC": 32564, + "ĠHerm": 32565, + ":any": 32566, + "ĠInterview": 32567, + "ĠTex": 32568, + "xfe": 32569, + "(work": 32570, + "Ġleap": 32571, + "Heading": 32572, + "Ġquarters": 32573, + "\\Bundle": 32574, + "reb": 32575, + "Perhaps": 32576, + "ĠGmbH": 32577, + "Birth": 32578, + "ĉsum": 32579, + "ĠWatson": 32580, + ".nil": 32581, + "ç¡": 32582, + "{}ĊĊ": 32583, + "icaid": 32584, + "Getter": 32585, + "\"name": 32586, + "Ġ\"čĊ": 32587, + "_none": 32588, + "zm": 32589, + "acute": 32590, + "uesto": 32591, + "Ġsous": 32592, + "Ġrebuild": 32593, + "Ġnewspapers": 32594, + "ĠHaz": 32595, + "Ġkits": 32596, + "ifo": 32597, + "Blur": 32598, + "Ġsuited": 32599, + "-In": 32600, + "à¯": 32601, + "ĠKeith": 32602, + "ĠNorway": 32603, + "INIT": 32604, + "ireccion": 32605, + "ieties": 32606, + "_usage": 32607, + "ĠDoug": 32608, + "rise": 32609, + "Ġtrillion": 32610, + "imited": 32611, + "ĠREL": 32612, + "alic": 32613, + "Ġcriticized": 32614, + "theorem": 32615, + "Ġcease": 32616, + "Ġsidew": 32617, + "ĠTerry": 32618, + "Ġsubsidi": 32619, + "Ġfirmly": 32620, + "Ġaws": 32621, + "Ġhott": 32622, + "Ġdressing": 32623, + "badge": 32624, + "ĠApplications": 32625, + "è¿ĶåĽŀ": 32626, + "Ġlaughed": 32627, + "Ġhobby": 32628, + "Ġmusicians": 32629, + "Ġ*.": 32630, + ".placeholder": 32631, + "Ġcounters": 32632, + "ĠCapitol": 32633, + "SDK": 32634, + "Ġhelmet": 32635, + "andbox": 32636, + "quit": 32637, + "Ġcriminals": 32638, + "Ġteenager": 32639, + "(update": 32640, + "Gl": 32641, + ".selection": 32642, + "Ġdischarge": 32643, + "Ġpresenting": 32644, + "ufacturer": 32645, + "_UNKNOWN": 32646, + "Ġstressed": 32647, + "åύ": 32648, + "Proto": 32649, + "_correct": 32650, + "haus": 32651, + "Ġrenov": 32652, + "Ġfirearms": 32653, + "Ġtechnically": 32654, + "-browser": 32655, + "Ġcandy": 32656, + "Stroke": 32657, + "Ġexecutor": 32658, + "Ġoccurrence": 32659, + "ĠIPv": 32660, + "_INTERFACE": 32661, + "ĠRetrieve": 32662, + ".bad": 32663, + "Exchange": 32664, + "Navbar": 32665, + "ĠKid": 32666, + "(getApplicationContext": 32667, + "_STOP": 32668, + "ĠBoss": 32669, + "Listeners": 32670, + "Ġshooter": 32671, + "ĠAlb": 32672, + "äch": 32673, + "Ġpix": 32674, + ".keyCode": 32675, + "alone": 32676, + "Ġabsurd": 32677, + "ĠCum": 32678, + "ĠNewtonsoft": 32679, + "ikt": 32680, + "Ġlaughing": 32681, + "Ġcapitalism": 32682, + "reeNode": 32683, + "Tx": 32684, + "_QUERY": 32685, + ".Sleep": 32686, + "(login": 32687, + "WebElement": 32688, + "Ġcelebrating": 32689, + "Ġdeprecated": 32690, + "Ġmaar": 32691, + "Ġartistic": 32692, + "_ASSOC": 32693, + "ĠBorderRadius": 32694, + "ĉwp": 32695, + "Ġsurvivors": 32696, + "Inner": 32697, + "-red": 32698, + "Ġprosecution": 32699, + "_pp": 32700, + "(\"$": 32782, + "Ġcomma": 32783, + "unchecked": 32784, + "graphics": 32785, + "rors": 32786, + "GROUND": 32787, + "(public": 32788, + "Ġcustomized": 32789, + "ĠArkansas": 32790, + "ĠRew": 32791, + "Ġexpiration": 32792, + "×ķ": 32793, + "ĠCul": 32794, + "Ġnons": 32795, + ".Filter": 32796, + "Ġsenator": 32797, + "_definition": 32798, + "ashington": 32799, + "ymph": 32800, + "/J": 32801, + "Ġfuse": 32802, + "ramid": 32803, + "ĠSupplier": 32804, + "Ġautocomplete": 32805, + "Ġ}),": 32806, + ".\"ĊĊĊ": 32807, + "_functions": 32808, + "ĉto": 32809, + ".eval": 32810, + "ĠTObject": 32811, + "References": 32812, + "Ġheated": 32813, + "HAL": 32814, + "Ġ))}Ċ": 32815, + "}$": 32816, + "ĠBarr": 32817, + "_UNIT": 32818, + "+$": 32819, + "ĠgetValue": 32820, + "iped": 32821, + "chied": 32822, + "(vm": 32823, + "cue": 32824, + "_integer": 32825, + "_course": 32826, + "third": 32827, + "Ġrevised": 32828, + "**/Ċ": 32829, + "_DIRECT": 32830, + "OutOf": 32831, + "(\"(": 32832, + "ĠFeel": 32833, + "Ġreass": 32834, + "Ġsubtitle": 32835, + "peri": 32836, + "nf": 32837, + "Ġenjoys": 32838, + "Ġtreats": 32839, + ")this": 32840, + "-tabs": 32841, + "ancers": 32842, + "Ġcontinent": 32843, + "Ġcardio": 32844, + "Ser": 32845, + ".question": 32846, + "Ġphrases": 32847, + "Validators": 32848, + "Ġpopul": 32849, + "ĠlÃŃ": 32850, + "song": 32851, + "_INTERNAL": 32852, + "Ġadviser": 32853, + "Ġpuzz": 32854, + "Ġambitious": 32855, + "ĠTob": 32856, + "ĠDP": 32857, + "Ġpresidency": 32858, + "Ġsurrender": 32859, + "Ġwatches": 32860, + "_binary": 32861, + "ĠSoon": 32862, + "Ġcanada": 32863, + "(\"\")Ċ": 32864, + "]='": 32865, + "ĠBrandon": 32866, + "epsilon": 32867, + "rw": 32868, + ".addChild": 32869, + ".Copy": 32870, + "Principal": 32871, + "Photos": 32872, + "Ġmarginal": 32873, + "Ġbasics": 32874, + "eing": 32875, + "Must": 32876, + "_String": 32877, + "Ġole": 32878, + "Magento": 32879, + ".customer": 32880, + "(prev": 32881, + "ล": 32882, + "Ġloyalty": 32883, + "Cog": 32884, + "Ġprotocols": 32885, + "ĠCompanies": 32886, + "Ġtheoretical": 32887, + "Ġaccessing": 32888, + "ĠZen": 32889, + ".ones": 32890, + "attice": 32891, + "_world": 32892, + "zes": 32893, + "Ġtattoo": 32894, + "Ġmenos": 32895, + "Ġintersect": 32896, + "\"];ĊĊ": 32897, + "belie": 32898, + "Ġinactive": 32899, + ".readline": 32900, + "-labelled": 32901, + ".done": 32902, + "lickr": 32903, + "ĠWORK": 32904, + "Ġderivative": 32905, + "Ġdatabases": 32906, + "âĤĤ": 32907, + "Ġsx": 32908, + ".isArray": 32909, + "Ġys": 32910, + "Ġpada": 32911, + "ĠBullet": 32912, + "(`/": 32913, + "isActive": 32914, + "ĠCGSize": 32915, + "(equalTo": 32916, + "ĠColumbus": 32917, + "Ġmarry": 32918, + "DEV": 32919, + "_limits": 32920, + "rones": 32921, + "IAS": 32922, + "Ġtau": 32923, + "mino": 32924, + "_Write": 32925, + "ĠWine": 32926, + "Ġ[['": 32927, + "ĠPull": 32928, + "riters": 32929, + "rients": 32930, + "Ġshifting": 32931, + "upp": 32932, + "_TIMER": 32933, + "ĠConditions": 32934, + "ấ": 32935, + "ĠOrders": 32936, + "ĠStrength": 32937, + "æīĢ": 32938, + "Ġvalidity": 32939, + "Ġfot": 32940, + "etur": 32941, + "Ġbolt": 32942, + "åĨħ": 32943, + "ĠAlong": 32944, + "oshi": 32945, + "Ġassumptions": 32946, + "Ġmagazines": 32947, + "_SPI": 32948, + "Ġpunt": 32949, + "_PRODUCT": 32950, + "Ġrelay": 32951, + "ĠJavascript": 32952, + ".te": 32953, + "-es": 32954, + "Ġwidgets": 32955, + "(fs": 32956, + "\";": 33023, + "atching": 33024, + "ĠKnowledge": 33025, + "ĉThe": 33026, + ";margin": 33027, + "lessness": 33028, + "opard": 33029, + "umatic": 33030, + "()));čĊ": 33031, + "Ġfals": 33032, + "(cache": 33033, + "TypeId": 33034, + "éĢļ": 33035, + "_choice": 33036, + "ĠGoth": 33037, + "ĠSites": 33038, + "MG": 33039, + "_border": 33040, + "Indices": 33041, + "Comparer": 33042, + "ĠRedistribution": 33043, + "Ġcloset": 33044, + "Ġversatile": 33045, + "Inputs": 33046, + "********************": 33047, + "Ġobesity": 33048, + "quiz": 33049, + "gra": 33050, + "(global": 33051, + "åĬ¡": 33052, + "Ġcollector": 33053, + "Ġkor": 33054, + "ovable": 33055, + "ADC": 33056, + "ĠEventHandler": 33057, + ".nc": 33058, + "Ġplayback": 33059, + "ientos": 33060, + "_perm": 33061, + "_WARNING": 33062, + "ĠOlympics": 33063, + ".norm": 33064, + "ĠBroadcast": 33065, + "_small": 33066, + "drive": 33067, + ".iloc": 33068, + "Ġtyped": 33069, + "MEM": 33070, + "_cons": 33071, + "DMETHOD": 33072, + "Ġlun": 33073, + ".distance": 33074, + "(par": 33075, + "poon": 33076, + "Ġbast": 33077, + "activities": 33078, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 33079, + ":čĊčĊ": 33080, + "SER": 33081, + ")&&": 33082, + "_lst": 33083, + "ĠPolish": 33084, + "Ġknocked": 33085, + "Ġfrustration": 33086, + "aukee": 33087, + "Ġphosph": 33088, + "iquid": 33089, + "_coeff": 33090, + "æŃ¤": 33091, + "Latest": 33092, + "ĠDust": 33093, + "Tipo": 33094, + "Ġmaintains": 33095, + "Ġmarsh": 33096, + "incinn": 33097, + "lbl": 33098, + "Care": 33099, + "Ġneighborhoods": 33100, + "_gpio": 33101, + "ĠArsenal": 33102, + "Dem": 33103, + "ĠWhe": 33104, + "_hook": 33105, + "Ġldc": 33106, + "ĠHarper": 33107, + "ĠBerkeley": 33108, + "Ġgraduated": 33109, + "Percent": 33110, + "Ġarriving": 33111, + "ĠAdventure": 33112, + "(scope": 33113, + "('*": 33114, + "quarter": 33115, + "ĠMarie": 33116, + "Speaking": 33117, + "_codegen": 33118, + "Ġimmun": 33119, + "caster": 33120, + "ãĤĮ": 33121, + "åķĨ": 33122, + "ĠDimensions": 33123, + ".record": 33124, + "Ġtexto": 33125, + "ĠMichelle": 33126, + "Pending": 33127, + "(by": 33128, + "_PAR": 33129, + "ucht": 33130, + "bee": 33131, + ".Thread": 33132, + "ampire": 33133, + "know": 33134, + "ĠClinical": 33135, + "ĠmarginBottom": 33136, + "Ġdistinguish": 33137, + ".Full": 33138, + ".undefined": 33139, + "ĠSequelize": 33140, + "############################################################################": 33141, + "Ġeducated": 33142, + "_OVER": 33143, + "åºı": 33144, + "ĠÂłĠÂł": 33145, + "_each": 33146, + "Ġurge": 33147, + "depart": 33148, + "Ġdonors": 33149, + "ĠAu": 33150, + "Ġbillions": 33151, + "Ġbelonging": 33152, + "_age": 33153, + "_Int": 33154, + "Ġsubstances": 33155, + "machine": 33156, + "!!!ĊĊ": 33157, + "Ġjsonify": 33158, + "ibbean": 33159, + "ĠCad": 33160, + "ĠendTime": 33161, + "Ġcycling": 33162, + "ĠUITextField": 33163, + "Ġleverage": 33164, + "Ġvanilla": 33165, + "eat": 33166, + "Launch": 33167, + "(pt": 33168, + "states": 33169, + "ĠControls": 33170, + "ĠRespons": 33171, + "ĠJake": 33172, + "Ġasleep": 33173, + "fortunate": 33174, + ".nextLine": 33175, + "SizeMode": 33176, + "ìĿ¼": 33177, + "TestingModule": 33178, + "German": 33179, + "ĠInvestig": 33180, + ".reverse": 33181, + "ĠBACK": 33182, + "(DateTime": 33183, + "Ġnonprofit": 33184, + "ĠExpect": 33185, + "Ġtanto": 33186, + "']),": 33187, + "ĉthe": 33188, + "Multiple": 33189, + "(getActivity": 33190, + "_WAIT": 33191, + "Ġjá": 33192, + "decor": 33193, + "levance": 33194, + "ĠGitHub": 33195, + "mination": 33196, + "_quantity": 33197, + ".Scanner": 33198, + "ĠLion": 33199, + "éĶĻ误": 33200, + "Ġdre": 33201, + "Ġtantra": 33202, + "ĠcontentType": 33203, + "Ġfid": 33204, + "_alt": 33205, + "NSIndexPath": 33206, + "-pl": 33207, + "åĮĸ": 33208, + "Ġantibiot": 33209, + "tables": 33210, + "acial": 33211, + "ĠRegistry": 33212, + "Ġolive": 33213, + "igers": 33214, + "Ġsubscriber": 33215, + "_pres": 33216, + "ĠSyntax": 33217, + "Ġlovers": 33218, + ".Byte": 33219, + "olders": 33220, + "_forward": 33221, + "always": 33222, + "Caption": 33223, + "Priv": 33224, + "ĠTampa": 33225, + "isateur": 33226, + "-labelledby": 33227, + "ĠToString": 33228, + "ĠìĤ¬": 33229, + "Ġinitiated": 33230, + "WF": 33231, + "Ġinstitutional": 33232, + "inject": 33233, + "ĠScr": 33234, + "Ġdoctrine": 33235, + "Ġspacious": 33236, + "isure": 33237, + "ĠAna": 33238, + "\"time": 33239, + "essaging": 33240, + "Ġcid": 33241, + "ĠNan": 33242, + "Ġincomplete": 33243, + "TAG": 33244, + "-build": 33245, + "December": 33246, + "Ġresidual": 33247, + "(PDO": 33248, + "ĠListen": 33249, + "Ġglyph": 33250, + "Ġgaps": 33251, + "nea": 33252, + ".Rect": 33253, + "Ġsau": 33254, + "ĠPhotograph": 33255, + "Ġexecutable": 33256, + "ĠExpert": 33257, + "Coroutine": 33258, + "_sizes": 33259, + "ĠNL": 33260, + ".isValid": 33261, + ");}Ċ": 33262, + "-reg": 33263, + "Ġciting": 33264, + "cwd": 33265, + "ĠOttawa": 33266, + "ĠBatt": 33267, + "Ġrenewable": 33268, + "Ġpreliminary": 33269, + "Ġasylum": 33270, + "Ġwrist": 33271, + "Ġutiliz": 33272, + "Ġdetention": 33273, + "Fast": 33274, + "Ġange": 33275, + "incinnati": 33276, + "Ġsteering": 33277, + "ĠNaN": 33278, + "iosity": 33279, + "/page": 33280, + "Ġè¿": 33281, + "sterol": 33282, + "Ġdisg": 33283, + "(DB": 33284, + "ĠDESCRIPTION": 33285, + "Ġ_$": 33286, + "Ġobstacle": 33287, + "Ġbizarre": 33288, + "Ġextraction": 33289, + "_expected": 33290, + "Ġloses": 33291, + "ĠCelebr": 33292, + "ĠhtmlFor": 33293, + "Ġexploit": 33294, + "олÑĮзов": 33295, + "XYZ": 33296, + "Ġmagnet": 33297, + "amped": 33298, + "Ġatoms": 33299, + "Sources": 33300, + "pectives": 33301, + "Ñģли": 33302, + "Ġ=čĊ": 33303, + "Ġdare": 33304, + "ĠWalter": 33305, + "Ġbrightness": 33306, + "Ġannotations": 33307, + "ëı": 33308, + "iske": 33309, + "Schedule": 33310, + ".images": 33311, + "rosso": 33312, + "Ġ\"..": 33313, + "gamma": 33314, + "Ġinstructor": 33315, + "Ġoverwrite": 33316, + "-am": 33317, + "Ġdevastating": 33318, + "ĠSaints": 33319, + "Ġhs": 33320, + "Ġbonuses": 33321, + "$output": 33322, + "ijd": 33323, + "(ActionEvent": 33324, + "monitor": 33325, + "Ġmattress": 33326, + "January": 33327, + ".jp": 33328, + "Ġcaracter": 33329, + "Ġimpose": 33330, + "_rest": 33331, + "ĠSignature": 33332, + "Ġcoronavirus": 33333, + "ãģĬ": 33334, + "_compare": 33335, + "Measure": 33336, + "itated": 33337, + "elijk": 33338, + "igos": 33339, + "esar": 33340, + "Ġrushed": 33341, + "metry": 33342, + "_SEPARATOR": 33343, + "_WE": 33344, + "_ATTRIBUTE": 33345, + "Ġyaml": 33346, + "Ġspecs": 33347, + "ĠRah": 33348, + "pheric": 33349, + "ĠInvestment": 33350, + "äll": 33351, + "Ġappealing": 33352, + "Ġviewport": 33353, + "ç©": 33354, + "ĠmarginLeft": 33355, + "Ġsubtract": 33356, + "ĠEDIT": 33357, + "ĉArrayList": 33358, + "grading": 33359, + "ĠFailure": 33360, + "asper": 33361, + "EEK": 33362, + "(now": 33363, + ")Ċ": 33379, + "Collision": 33380, + "ĠGreater": 33381, + "ĠRacing": 33382, + "alan": 33383, + "Ġmonetary": 33384, + ",new": 33385, + "ĠSorry": 33386, + ".Enable": 33387, + "ĠInstantiate": 33388, + "ollen": 33389, + "ë©´": 33390, + "ĠCalling": 33391, + "_hour": 33392, + "ADA": 33393, + "Ġshy": 33394, + ")**": 33395, + "Ġ==>": 33396, + "Ġespecial": 33397, + "Ġinterpreted": 33398, + "!=\"": 33399, + "Ġpharmacy": 33400, + ".single": 33401, + "ĠCialis": 33402, + "Ġparas": 33403, + ".toUpperCase": 33404, + "ĠDemon": 33405, + "Prime": 33406, + "Ġrankings": 33407, + "Adding": 33408, + "_HASH": 33409, + "ĠExam": 33410, + "Ú©": 33411, + "ĠVictor": 33412, + "Okay": 33413, + "\"];čĊ": 33414, + "Ġfortune": 33415, + "ĠFETCH": 33416, + "expand": 33417, + ".Interop": 33418, + "Ġbarn": 33419, + "æ¶Ī": 33420, + "uevo": 33421, + "Ġspeculation": 33422, + "âĶĢâĶĢâĶĢâĶĢ": 33423, + "ĠNu": 33424, + "ĠBlues": 33425, + "(fname": 33426, + "Ġinhabit": 33427, + "Ġ\\\"%": 33428, + "CES": 33429, + "ulario": 33430, + "_cr": 33431, + "Ġvalidated": 33432, + "Ġmidnight": 33433, + "anking": 33434, + "Ġincorporate": 33435, + "Ġpursuit": 33436, + "EXP": 33437, + "prime": 33438, + "Pid": 33439, + "-US": 33440, + "ĠNurs": 33441, + "ĠWheel": 33442, + "éĺ": 33443, + "Ġinp": 33444, + "Ġsupportive": 33445, + ".member": 33446, + "ĠShot": 33447, + ".CheckBox": 33448, + "Ġaffirm": 33449, + "Tor": 33450, + "FullYear": 33451, + "Ġconsiderably": 33452, + "credentials": 33453, + "_opts": 33454, + "Roll": 33455, + "(round": 33456, + "Ġcoment": 33457, + "_UART": 33458, + "Ġextending": 33459, + "RG": 33460, + "resultado": 33461, + "itu": 33462, + ".getSession": 33463, + "Ġattraction": 33464, + "&D": 33465, + "$html": 33466, + "ĠJessica": 33467, + "ĠAssociate": 33468, + "añ": 33469, + "_ed": 33470, + "ĠLag": 33471, + "Ġorigins": 33472, + "())->": 33473, + "addEventListener": 33474, + "IALOG": 33475, + "åIJ¦": 33476, + ".Compare": 33477, + "Album": 33478, + "ĠKu": 33479, + "\";ĊĊ": 33523, + "quisite": 33524, + "channels": 33525, + "/res": 33526, + "ĠAnalytics": 33527, + ".appcompat": 33528, + "/to": 33529, + "ĠonError": 33530, + "(attr": 33531, + "IRM": 33532, + "Ġragaz": 33533, + "-as": 33534, + ".Second": 33535, + "oriented": 33536, + "Ġdonn": 33537, + "Ġlightning": 33538, + "fid": 33539, + "ĠPle": 33540, + "ãģ¾ãģĻ": 33541, + "tro": 33542, + ".True": 33543, + "Observable": 33544, + "×Ļ": 33545, + "umbing": 33546, + "Ġprospective": 33547, + "-filter": 33548, + "Ġpursuant": 33549, + "(points": 33550, + ".Bind": 33551, + "Ġpalm": 33552, + "clearfix": 33553, + "ös": 33554, + "ĠGonz": 33555, + "Ġweaken": 33556, + "Drive": 33557, + "enido": 33558, + "lld": 33559, + "obox": 33560, + "anean": 33561, + "Got": 33562, + "ä¿Ŀ": 33563, + "Regex": 33564, + "æĥ": 33565, + "Ġsalad": 33566, + "assis": 33567, + "\"net": 33568, + "inheritDoc": 33569, + "ĠRV": 33570, + "quier": 33571, + "Ġclazz": 33572, + "Ä±ÅŁ": 33573, + "osterone": 33574, + "Ġairline": 33575, + ".listdir": 33576, + "Ġdownloading": 33577, + "ĠPalm": 33578, + "waukee": 33579, + "<": 33580, + ".BL": 33581, + "_INLINE": 33582, + "offs": 33583, + "<<(": 33584, + "_news": 33585, + "Ġchase": 33586, + "/><": 33587, + "Ġeuros": 33588, + "ĠEgyptian": 33589, + "ĠStainless": 33590, + "_BOOL": 33591, + "ĠGuild": 33592, + "ĠDynam": 33593, + "[indexPath": 33594, + "Ġï": 33595, + "Ġmemorable": 33596, + "ĠChampion": 33597, + "ResourceManager": 33598, + ".Login": 33599, + "ĠFormer": 33600, + "yped": 33601, + "Ġlleg": 33602, + ";\",": 33603, + "DWORD": 33604, + "Ġtaxi": 33605, + "Ġbombs": 33606, + "rah": 33607, + ".tags": 33608, + "_tests": 33609, + "stones": 33610, + "âĢĿ)": 33611, + "[g": 33612, + "rtype": 33613, + "Ġvu": 33614, + "Ġhostile": 33615, + "Chars": 33616, + "ĠPatriots": 33617, + "/status": 33618, + "());Ċ": 33972, + "ajÄħ": 33973, + "_OCC": 33974, + "Ġplanets": 33975, + "æŁ¥": 33976, + "ĠDublin": 33977, + "Ġserie": 33978, + ".printf": 33979, + "deep": 33980, + "`)": 33981, + "Ġ\\$": 33982, + "Ġμ": 33983, + "_VIDEO": 33984, + "endors": 33985, + "ĠCrypto": 33986, + "Far": 33987, + ".Transparent": 33988, + ".TR": 33989, + "iasm": 33990, + "_training": 33991, + "Ġteaches": 33992, + "ĠBelt": 33993, + "Ġlimiting": 33994, + "ĠKath": 33995, + "ĠIndexPath": 33996, + "Ġachievements": 33997, + "Ġserá": 33998, + "interopRequire": 33999, + "Ġdisse": 34000, + ".If": 34001, + "arming": 34002, + "ulsion": 34003, + "Po": 34004, + "_DETAIL": 34005, + "Prototype": 34006, + "ĠCAL": 34007, + "Ġagrees": 34008, + ".vo": 34009, + ".ExecuteNonQuery": 34010, + "ĠTopic": 34011, + "Ġ'{}": 34012, + "Arm": 34013, + "Ġecc": 34014, + "Mag": 34015, + "Ġserialized": 34016, + "ĉconn": 34017, + "cached": 34018, + "=tf": 34019, + "ĠByteArray": 34020, + "protobuf": 34021, + "varchar": 34022, + "ĉASSERT": 34023, + "Ġliste": 34024, + "_trigger": 34025, + "·¸": 34026, + "Feel": 34027, + "Tahoma": 34028, + "ĠLik": 34029, + "Ġstructured": 34030, + "ergus": 34031, + ".Initial": 34032, + "_ge": 34033, + "cljs": 34034, + ".contact": 34035, + "Ġandere": 34036, + "$stmt": 34037, + "_CURRENT": 34038, + "ĠDiscover": 34039, + "$res": 34040, + "formatter": 34041, + "Ha": 34042, + "vangst": 34043, + "Ġemerge": 34044, + "ãĢĤâĢĿ": 34045, + "ĠCabinet": 34046, + "-square": 34047, + "éĥ¨": 34048, + "Ġrage": 34049, + "ĠAJ": 34050, + "ĠVT": 34051, + "shadow": 34052, + "ĠFaith": 34053, + "enames": 34054, + "pretty": 34055, + "hasil": 34056, + "party": 34057, + "Ġvarchar": 34058, + "Ġfotos": 34059, + "Ġalum": 34060, + "ĠBelgium": 34061, + ".ylabel": 34062, + "Ġdej": 34063, + "_numbers": 34064, + "Ġhu": 34065, + ".setAdapter": 34066, + "ĠUsually": 34067, + "(sample": 34068, + ".Shared": 34069, + "Ġbooked": 34070, + "Ġ>>=": 34071, + "Ġminerals": 34072, + "\">": 34091, + "prog": 34092, + "boo": 34093, + "_md": 34094, + "_pack": 34095, + "(express": 34096, + "utz": 34097, + "\\Auth": 34098, + ",id": 34099, + "ĠChile": 34100, + "actice": 34101, + "Ġrecruitment": 34102, + "Ġposes": 34103, + "Ġvulnerability": 34104, + "instanc": 34105, + "orum": 34106, + "dess": 34107, + "Ġxl": 34108, + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%": 34109, + "(fig": 34110, + "Ġdeleting": 34111, + ".del": 34112, + ")')Ċ": 34113, + "ĠWeekly": 34114, + "???": 34115, + "(strcmp": 34116, + "smith": 34117, + "Ġpursuing": 34118, + "-so": 34119, + "ĠApps": 34120, + "/'Ċ": 34121, + "Ġdecis": 34122, + "FORE": 34123, + "Everyone": 34124, + "Ġlanes": 34125, + "Virtual": 34126, + ".attach": 34127, + "(Log": 34128, + "ĠMedicaid": 34129, + "(Path": 34130, + "ĠTurner": 34131, + "/application": 34132, + "Ġportrait": 34133, + "Ġoppose": 34134, + "checkout": 34135, + "Ġfinishes": 34136, + "_ME": 34137, + "Barrier": 34138, + "Song": 34139, + "VAR": 34140, + "Earlier": 34141, + "rella": 34142, + "Ġhast": 34143, + "azar": 34144, + "Ġpulls": 34145, + "ngx": 34146, + "Ġinspiring": 34147, + "ÑĥÑİ": 34148, + "-direction": 34149, + "Ġexplosive": 34150, + "ĠcreatedAt": 34151, + "sto": 34152, + "Ġwheat": 34153, + "ĠBuilt": 34154, + "'ai": 34155, + "Ġtracked": 34156, + "hammad": 34157, + "RowAtIndexPath": 34158, + "_heap": 34159, + "Due": 34160, + "Ġconnects": 34161, + ".publish": 34162, + "emu": 34163, + "Ġbullets": 34164, + "BAR": 34165, + "olate": 34166, + "Ġinternally": 34167, + "Ġcatching": 34168, + "-password": 34169, + "ouched": 34170, + "æĢ§": 34171, + "eous": 34172, + "Ġxrange": 34173, + "Quality": 34174, + "vv": 34175, + "Manage": 34176, + "(($": 34177, + "acements": 34178, + "ĠBrothers": 34179, + "ĠHEAD": 34180, + "ĠUnsupported": 34181, + "san": 34182, + "esi": 34183, + "***Ċ": 34184, + "Ġadaptation": 34185, + "ĠWorker": 34186, + "']/": 34187, + ".savefig": 34188, + "(trans": 34189, + "ج": 34190, + "nee": 34191, + "Correct": 34192, + "...\")Ċ": 34193, + "Ġsubmitting": 34194, + "-path": 34195, + "ĉlast": 34196, + "issan": 34197, + ".xlabel": 34198, + "ĠSepar": 34199, + "/no": 34200, + "_best": 34201, + "ĠMills": 34202, + "_sock": 34203, + "(flag": 34204, + "Ġdestinations": 34205, + "emption": 34206, + "ĠFAIL": 34207, + "åĴĮ": 34208, + "Ġrp": 34209, + "fact": 34210, + "ĉlen": 34211, + "DAY": 34212, + "Ġseiz": 34213, + "_dst": 34214, + "lip": 34215, + ".Linear": 34216, + "ĠBasket": 34217, + "$t": 34218, + "$i": 34219, + "-brand": 34220, + "ĠNeil": 34221, + "ĠEq": 34222, + "Ġthou": 34223, + "ogene": 34224, + "Ġscholarship": 34225, + "æĽ´": 34226, + "Ġswo": 34227, + "aginator": 34228, + "eni": 34229, + "(book": 34230, + "Ġblink": 34231, + "thus": 34232, + "ĠcancellationToken": 34233, + "ĠPalestinians": 34234, + "Ġprofitable": 34235, + "Ġbackpack": 34236, + "enson": 34237, + "true": 34384, + "ĠNYC": 34385, + "Ġbored": 34386, + "ĠDetect": 34387, + "Ġappar": 34388, + "Ġjeans": 34389, + "ĠTak": 34390, + "IOD": 34391, + "ĠHorse": 34392, + "(FILE": 34393, + "(?": 34394, + "rique": 34395, + "optimizer": 34396, + "nat": 34397, + "loys": 34398, + "ĉToken": 34399, + "oubted": 34400, + "uess": 34401, + "ocoa": 34402, + "DataMember": 34403, + "_POWER": 34404, + "classList": 34405, + "PushButton": 34406, + "ĠWiFi": 34407, + ".Stream": 34408, + ".guild": 34409, + "Ġnog": 34410, + "ĠPortugal": 34411, + "ĠUnter": 34412, + "Primitive": 34413, + "boss": 34414, + "ĠDeutsch": 34415, + "Ġerotic": 34416, + "Ġstrconv": 34417, + ".TryParse": 34418, + "Ġgrams": 34419, + ".Success": 34420, + "_pk": 34421, + "ĠHarvey": 34422, + "-minded": 34423, + ".country": 34424, + "[]\"": 34425, + "Ġangel": 34426, + "Ġbeats": 34427, + "ĠVor": 34428, + "ilio": 34429, + ".master": 34430, + "something": 34431, + "ĠPACK": 34432, + "(if": 34433, + "RequestBody": 34434, + "Ġantes": 34435, + "/widget": 34436, + "Ġmodo": 34437, + "ĠAW": 34438, + "finder": 34439, + "Ġoptimized": 34440, + "Ġmissiles": 34441, + "NB": 34442, + "ĉinternal": 34443, + "tex": 34444, + "ĠSri": 34445, + "Ġdamaging": 34446, + "ĠMais": 34447, + "-Allow": 34448, + "ĠZh": 34449, + "-alt": 34450, + "Ġ));ĊĊ": 34451, + "èī": 34452, + "Ġinfluences": 34453, + "Ġcatal": 34454, + "_REGISTER": 34455, + "ĠAPIs": 34456, + "-century": 34457, + "Ġbiology": 34458, + "ĠActual": 34459, + "Ġheels": 34460, + "TRACE": 34461, + "_DIG": 34462, + "Dataset": 34463, + "ĠMatter": 34464, + "Ġclassifier": 34465, + ".wikipedia": 34466, + "ĠRogers": 34467, + "Ġdonated": 34468, + "rawler": 34469, + "enen": 34470, + "Ġcasinos": 34471, + "ortal": 34472, + "Ġprive": 34473, + "spe": 34474, + "ducers": 34475, + ".ep": 34476, + "Ġgrasp": 34477, + "acji": 34478, + "Ġdairy": 34479, + "Ġbuses": 34480, + ".comm": 34481, + ".ins": 34482, + "ĠIRS": 34483, + "ĠBeer": 34484, + "adc": 34485, + "oard": 34486, + "_MET": 34487, + "Ġ'+'": 34488, + "rans": 34489, + "Ġkinda": 34490, + "ĠâĶĤ": 34491, + "ĠMaur": 34492, + "аг": 34493, + "Ġbandwidth": 34494, + "ibus": 34495, + "ĠDifferent": 34496, + "(mat": 34497, + "ĠResume": 34498, + "_UNS": 34499, + "establish": 34500, + "Ġfonction": 34501, + "Subscription": 34502, + "_company": 34503, + "Ġlightly": 34504, + ".confirm": 34505, + ".yaml": 34506, + "ĠBoost": 34507, + "Commerce": 34508, + "-template": 34509, + "_DELAY": 34510, + "ĠHI": 34511, + "Ġnavig": 34512, + "(Sender": 34513, + "ĠHS": 34514, + "_\"+": 34515, + "ĠREQUEST": 34516, + "Ġwifi": 34517, + "=\"\"Ċ": 34518, + "])->": 34519, + "Ġrope": 34520, + "Ġviolated": 34521, + "Ġglance": 34522, + "ĠKurd": 34523, + "Ġè®": 34524, + "deck": 34525, + "ĠISBN": 34526, + "Ġinfect": 34527, + "ĠFoo": 34528, + "Ġgetter": 34529, + "Ġtener": 34530, + "appe": 34531, + ".hh": 34532, + "_hot": 34533, + "\".$": 34743, + "Ġrelies": 34744, + "(Console": 34745, + "International": 34746, + "->{$": 34747, + "Mid": 34748, + "Ġdissert": 34749, + "dds": 34750, + "Ġdeposits": 34751, + "ĉdriver": 34752, + "#ga": 34753, + "prising": 34754, + "println": 34755, + "Ġpresenter": 34756, + "Ġmines": 34757, + "CSS": 34758, + "ĠDual": 34759, + "(!(": 34760, + "Ġkam": 34761, + "ĠisLoading": 34762, + "ĠProtect": 34763, + ".upper": 34764, + "arium": 34765, + "]:ĊĊĊ": 34766, + "Yii": 34767, + "-shirt": 34768, + "ĠIMAGE": 34769, + "_colors": 34770, + "Ġurgent": 34771, + ".Container": 34772, + "!(Ċ": 34773, + "Saturday": 34774, + "Ġsocieties": 34775, + "ĠThan": 34776, + "ĠCod": 34777, + "=@": 34778, + "Ġattachments": 34779, + ".mobile": 34780, + "Ġspite": 34781, + "Ġbounce": 34782, + "rawl": 34783, + "instancetype": 34784, + "ĠTruck": 34785, + "Ġmanipulation": 34786, + "(Config": 34787, + "-inst": 34788, + "Ġstor": 34789, + "itution": 34790, + "PreferredGap": 34791, + "ĠmainAxisAlignment": 34792, + "Ġlistened": 34793, + "'''ĊĊ": 34794, + "ottage": 34795, + "-project": 34796, + ".APPLICATION": 34797, + "ĉroot": 34798, + "Ġwhit": 34799, + "Ġbilder": 34800, + "Ġker": 34801, + "Ġappliances": 34802, + "rowave": 34803, + "ìĿĢ": 34804, + "ematics": 34805, + "ĠOrg": 34806, + "oping": 34807, + "_SEARCH": 34808, + "Ġcham": 34809, + "addContainerGap": 34810, + "Ġ().": 34811, + "ĠArrow": 34812, + "Illegal": 34813, + "Currently": 34814, + "Ġusa": 34815, + "Ġpasswords": 34816, + "Ġrenown": 34817, + "avern": 34818, + "ĠEvil": 34819, + "Ġconcat": 34820, + "Ġduo": 34821, + "Ġvale": 34822, + "ĠBean": 34823, + "Ġindicators": 34824, + "cmath": 34825, + "ĠPump": 34826, + "November": 34827, + "ificant": 34828, + "_DOMAIN": 34829, + "regar": 34830, + "ĠPortal": 34831, + "\"$": 34832, + "Ġformerly": 34833, + "\"]:Ċ": 34834, + "ĠVisibility": 34835, + ".getElementsByClassName": 34836, + "_RED": 34837, + "Ġchampions": 34838, + "à´": 34839, + "Valor": 34840, + "_es": 34841, + "*a": 34842, + "-repeat": 34843, + "Band": 34844, + ".stage": 34845, + "Ġbureauc": 34846, + "Cnt": 34847, + "eten": 34848, + "-function": 34849, + "Ġmuito": 34850, + "PID": 34851, + "_editor": 34852, + "Ġcrashed": 34853, + "dead": 34854, + "kat": 34855, + "agh": 34856, + "ĠEXT": 34857, + "asser": 34858, + "-small": 34859, + "Ġrealiz": 34860, + "(Entity": 34861, + "ús": 34862, + "ĠActually": 34863, + "ĠElite": 34864, + "Ġhelm": 34865, + "(nonatomic": 34866, + "asher": 34867, + "Community": 34868, + "alleng": 34869, + "iry": 34870, + "ĠGrowth": 34871, + "Ġsue": 34872, + "Ġfrequencies": 34873, + "_descriptor": 34874, + ".Attribute": 34875, + "Ġrecipients": 34876, + "_NS": 34877, + "/\"+": 34878, + "iban": 34879, + "Ġathlete": 34880, + "ĠIgn": 34881, + "_DMA": 34882, + "(ds": 34883, + "ĠRequirements": 34884, + "ADI": 34885, + "erez": 34886, + "\\Admin": 34887, + "braska": 34888, + "ĠRust": 34889, + "Relation": 34890, + "COD": 34891, + "ĠVERSION": 34892, + "emma": 34893, + ")){": 34894, + ".Duration": 34895, + "ĠCamb": 34896, + "-logo": 34897, + "Ġreadable": 34898, + "Ġcreators": 34899, + "()];Ċ": 34900, + "UpDown": 34901, + "-half": 34902, + ".getMonth": 34903, + "(sf": 34904, + "Pic": 34905, + "Ġhunger": 34906, + ".tx": 34907, + "Ġexceeded": 34908, + "_seed": 34909, + "(^": 34910, + "_sk": 34911, + ".perform": 34912, + "Ġ>::": 34913, + "Ġmongo": 34914, + "=float": 34915, + "bindParam": 34916, + "Smart": 34917, + "ifa": 34918, + "Ġsecurities": 34919, + "Ġprejud": 34920, + "Ġ,\"": 34921, + "Ġcorps": 34922, + "Ġvra": 34923, + "amacare": 34924, + "iterr": 34925, + "(Media": 34926, + "uche": 34927, + "Ġcob": 34928, + "Ġliber": 34929, + ".geometry": 34930, + "Locator": 34931, + "Ġsliding": 34932, + "Ġsurgical": 34933, + "_CUR": 34934, + "Ġconsect": 34935, + "[*": 34936, + "ĠResort": 34937, + "Stub": 34938, + "_DOUBLE": 34939, + "ĠSoph": 34940, + "Ġelectoral": 34941, + "_disable": 34942, + "ĠÑģо": 34943, + "ĠLightning": 34944, + "Ġmentions": 34945, + "ocy": 34946, + "Ġleaked": 34947, + "Ġrelaxing": 34948, + "Presenter": 34949, + "vsp": 34950, + "Ġguilt": 34951, + "=-=-": 34952, + ".reply": 34953, + "ĠMirror": 34954, + "Camp": 34955, + "Ġ+#+#+#+": 34956, + "Ġ+#+#+#+#+#+": 34957, + ".Author": 34958, + "Ġdirective": 34959, + "-hook": 34960, + "íĦ°": 34961, + "}ĊĊĊĊĊ": 34962, + "@pytest": 34963, + "_rand": 34964, + "mis": 34965, + "Ġcolorful": 34966, + "uje": 34967, + "lasses": 34968, + "ĠClasses": 34969, + ".have": 34970, + "%),": 34971, + "é¢ĺ": 34972, + "Ġdisturbing": 34973, + "substring": 34974, + "ĠKoh": 34975, + "Invest": 34976, + "purchase": 34977, + "Ġrecycling": 34978, + "ĠART": 34979, + "ierarchy": 34980, + "Ġfps": 34981, + ".checkBox": 34982, + "íķ´": 34983, + "_material": 34984, + "ducation": 34985, + "Ġfw": 34986, + "udit": 34987, + "Ġreviewing": 34988, + "ĠSid": 34989, + "Syntax": 34990, + "ĠWritten": 34991, + "argar": 34992, + "UME": 34993, + "/q": 34994, + "Classifier": 34995, + "Official": 34996, + "Ġjazz": 34997, + "Ġomega": 34998, + "Physics": 34999, + "Ġlugar": 35000, + "_accessor": 35001, + ".commands": 35002, + "Ability": 35003, + "ĠBatch": 35004, + "RAM": 35005, + "Ġencounters": 35006, + ".Qu": 35007, + "BYTE": 35008, + "ĠDistribution": 35009, + "Ġuso": 35010, + "ĠRecovery": 35011, + "approved": 35012, + "Ġdenial": 35013, + "/share": 35014, + "LinkedList": 35015, + ")čĊčĊčĊ": 35016, + "uddy": 35017, + "Ġfines": 35018, + "Ġry": 35019, + "Unicode": 35020, + "ĉrender": 35021, + "Ġpremises": 35022, + "Ġpon": 35023, + "aliases": 35024, + "/Foundation": 35025, + "cuda": 35026, + "ĠCock": 35027, + ",:)": 35028, + "(folder": 35029, + "Ġméd": 35030, + "drag": 35031, + "Ġtalents": 35032, + "ĠĠĠĊĊ": 35033, + "еÑģÑĤв": 35034, + "mob": 35035, + ".yml": 35036, + "Ġaster": 35037, + "Ġdiscre": 35038, + "goal": 35039, + "ĠGTX": 35040, + "ĠSUCCESS": 35041, + "ĠLONG": 35042, + "(find": 35043, + "Ġsingular": 35044, + "_sz": 35045, + "ĠEthereum": 35046, + "..Ċ": 35047, + "Ġirres": 35048, + "')){Ċ": 35049, + "Ġministers": 35050, + "Steps": 35051, + "iversal": 35052, + "ĠNevertheless": 35053, + "-led": 35054, + "Ġ(%)": 35055, + "ç¡®": 35056, + "Ġtimezone": 35057, + "Ġstranger": 35058, + "(render": 35059, + "Ġshutil": 35060, + "Ġmph": 35061, + "Ġtrio": 35062, + "ppy": 35063, + "Ġpredomin": 35064, + "Ġendors": 35065, + "ĠRussians": 35066, + "ĉrow": 35067, + "Ġwizard": 35068, + ".serialize": 35069, + "Ġcomplained": 35070, + "Ġsido": 35071, + "Ġdelighted": 35072, + "-me": 35073, + "ĠRav": 35074, + "Human": 35075, + "adays": 35076, + "recv": 35077, + "Working": 35078, + "Jump": 35079, + "ĠÃ¥r": 35080, + "ĠAutomatic": 35081, + "_Base": 35082, + "æł¼": 35083, + "aurants": 35084, + "¯": 35085, + "æ¸": 35086, + "(CType": 35087, + "IFI": 35088, + "(amount": 35089, + "Ġbelieving": 35090, + "=mysql": 35091, + "Ġfir": 35092, + "Ġrestoration": 35093, + "ereco": 35094, + "Т": 35095, + "_'+": 35096, + "Ġebook": 35097, + "Ġdebris": 35098, + "(inputs": 35099, + "AYOUT": 35100, + "Ġscreaming": 35101, + "avia": 35102, + "lander": 35103, + "Ġdistress": 35104, + "Ġassembled": 35105, + "ĠAvoid": 35106, + "(thread": 35107, + "ĠRPC": 35108, + "_EXIT": 35109, + "(queue": 35110, + "иÑģÑĤ": 35111, + "Dll": 35112, + "Ġskull": 35113, + "_pub": 35114, + "chez": 35115, + "minate": 35116, + "ensen": 35117, + "Ġinsane": 35118, + "bounds": 35119, + "ĠRosen": 35120, + "Ġconditioning": 35121, + "processed": 35122, + "videos": 35123, + "four": 35124, + ".Conv": 35125, + "|;Ċ": 35126, + "Personal": 35127, + "cerpt": 35128, + ":UIControlStateNormal": 35129, + "Ġdoses": 35130, + "ĠKarl": 35131, + "ĠFrequ": 35132, + ".BASE": 35133, + "ĠVote": 35134, + "Ġconcurrent": 35135, + "ĠMessageBoxIcon": 35136, + "ĠÃĸ": 35137, + "ĠDubai": 35138, + "ĠRetail": 35139, + ":number": 35140, + "ĠObserver": 35141, + "ĠBigInteger": 35142, + "_origin": 35143, + "_WORK": 35144, + "Frames": 35145, + "Ġnotably": 35146, + ".âĢľ": 35147, + "Ġtropical": 35148, + "Ġniche": 35149, + "amina": 35150, + ".sys": 35151, + "(tokens": 35152, + "modify": 35153, + "osit": 35154, + "strom": 35155, + "ĠComics": 35156, + "OPTION": 35157, + "Ticket": 35158, + "Ġfactories": 35159, + "Ġdisput": 35160, + "_File": 35161, + "ĠFinn": 35162, + "eee": 35163, + "ĠDiscord": 35164, + "_money": 35165, + ".tpl": 35166, + "_safe": 35167, + "LB": 35168, + "Ġglut": 35169, + "JK": 35170, + ".flow": 35171, + "-cont": 35172, + "gos": 35173, + "Ġhorizon": 35174, + "ĠRush": 35175, + "::*": 35176, + "Pipe": 35177, + "ulla": 35178, + "borough": 35179, + "heimer": 35180, + "(move": 35181, + "(Text": 35182, + "});čĊčĊ": 35183, + "welcome": 35184, + "ĠComponents": 35185, + "Ġgovernance": 35186, + "closed": 35187, + "ĉmargin": 35188, + "Ġlaundry": 35189, + "ĠTerminal": 35190, + "izards": 35191, + ".âĢĶ": 35192, + ".remote": 35193, + ".radius": 35194, + "ĠQuebec": 35195, + "Ġdh": 35196, + "Tech": 35197, + "ĠMist": 35198, + "seller": 35199, + "_literal": 35200, + "Ġgenius": 35201, + "Ġbrains": 35202, + "gem": 35203, + "ĠMeasure": 35204, + "Ġcatast": 35205, + "rance": 35206, + ".TextField": 35207, + "Ġconsuming": 35208, + "Ġ'\\''": 35209, + "oubtedly": 35210, + "ĠCertain": 35211, + "Ev": 35212, + "erti": 35213, + "being": 35214, + "Experience": 35215, + "Ġ//[": 35216, + "ĠArabic": 35217, + "ĠCrist": 35218, + "ĠAzure": 35219, + "Ġhora": 35220, + "ladesh": 35221, + "\\Blueprint": 35222, + "dar": 35223, + ".rel": 35224, + "Ġsuprem": 35225, + "ĠReagan": 35226, + "ĠAttributes": 35227, + "-sidebar": 35228, + "ĠuseStyles": 35229, + "ĠAirlines": 35230, + "Ġhills": 35231, + "/xhtml": 35232, + "vinc": 35233, + "_mock": 35234, + "ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 35235, + "ĠPill": 35236, + ".LayoutStyle": 35237, + "ĠCommander": 35238, + "]<": 35239, + "signature": 35240, + "Ġ{}čĊ": 35241, + "Ġhatred": 35242, + "Ġëĭ": 35243, + "olesterol": 35244, + "Ġ********": 35245, + "ancellor": 35246, + "crop": 35247, + "TIM": 35248, + "ĉĉĊĊ": 35249, + "ysqli": 35250, + "uitive": 35251, + "ĉunset": 35252, + "_sel": 35253, + "Ġmenus": 35254, + "tick": 35255, + "Ġconstitute": 35256, + "ĠElements": 35257, + "ĠRedis": 35258, + "aggio": 35259, + "_fp": 35260, + "_depend": 35261, + "emas": 35262, + "CAST": 35263, + "orange": 35264, + "jon": 35265, + "ĠEmily": 35266, + "Ġpotatoes": 35267, + "Ġreceptor": 35268, + "ĠElectronic": 35269, + "ĠLights": 35270, + "Ġcombining": 35271, + "ĠSomeone": 35272, + "Ġ########.": 35273, + "ĠTOD": 35274, + "/show": 35275, + "Xd": 35276, + ".\"'": 35277, + "afx": 35278, + "Ġtragic": 35279, + "Styled": 35280, + "ĠMarco": 35281, + "Gallery": 35282, + "dale": 35283, + ".âĢĿĊĊĊĊ": 35284, + "érie": 35285, + "/service": 35286, + "äºĨ": 35287, + "Ġambient": 35288, + "_SETTINGS": 35289, + ".Adapter": 35290, + "lene": 35291, + "Ġtravels": 35292, + "Notice": 35293, + "Ġcleans": 35294, + "ĠFem": 35295, + "chair": 35296, + "Ñĥн": 35297, + "/my": 35298, + "_bad": 35299, + "ĠEconomics": 35300, + "ISA": 35301, + "_CNT": 35302, + "(Menu": 35303, + "äºİ": 35304, + "ĠRidge": 35305, + "Ġlengthy": 35306, + "Dot": 35307, + "Ġjumps": 35308, + "Ġhey": 35309, + "$pdf": 35310, + "Ġworm": 35311, + "Ġsut": 35312, + "Ġsher": 35313, + "iamo": 35314, + "ĠCalc": 35315, + "trieve": 35316, + "Ġcops": 35317, + "ĠChrom": 35318, + "Ġregulated": 35319, + "reatment": 35320, + "ĠHigher": 35321, + "oks": 35322, + "Ġdeze": 35323, + "LOCATION": 35324, + "ongsTo": 35325, + "Ġfinite": 35326, + "Ġvaries": 35327, + "Ġpositioned": 35328, + "'il": 35329, + "éĩij": 35330, + "Ġhike": 35331, + "(done": 35332, + "playlist": 35333, + "Ġada": 35334, + "Ġcoastal": 35335, + "ĠNancy": 35336, + ".DateTimeField": 35337, + "CppCodeGen": 35338, + "ĠSimilarly": 35339, + "reur": 35340, + "ĠContr": 35341, + "ĠHidden": 35342, + "ĠBeta": 35343, + "atched": 35344, + "_install": 35345, + ".Output": 35346, + "Lookup": 35347, + "ĠRichmond": 35348, + "quared": 35349, + "Ġmanga": 35350, + "-controls": 35351, + "ĠBernard": 35352, + "Large": 35353, + "Ġslices": 35354, + "Ġoffence": 35355, + "ĠMega": 35356, + "Ġestar": 35357, + "Ġjoints": 35358, + "Ġsumm": 35359, + "_platform": 35360, + "Buff": 35361, + ".addSubview": 35362, + "Ġretained": 35363, + "Letter": 35364, + ".dim": 35365, + "Ġessere": 35366, + "ĠScaffold": 35367, + "EXPECT": 35368, + "ĉRE": 35369, + ".longitude": 35370, + "ünd": 35371, + "Ġstatue": 35372, + ".addWidget": 35373, + "ĠCaribbean": 35374, + "addPreferredGap": 35375, + "ilde": 35376, + "UILabel": 35377, + "ĠOpport": 35378, + "Ġimperial": 35379, + "ursion": 35380, + "Ġmandate": 35381, + "Ġpromotional": 35382, + "Ġvk": 35383, + "iaÅĤ": 35384, + "Ġpyl": 35385, + "ĠCreation": 35386, + "озд": 35387, + "Ġsimpler": 35388, + ".what": 35389, + "ĠRecent": 35390, + "Storm": 35391, + ".quantity": 35392, + "ĠLov": 35393, + "\"-": 35394, + "ubbles": 35395, + "_notification": 35396, + "(world": 35397, + "urger": 35398, + "*(-": 35399, + ":\"Ċ": 35400, + "hm": 35401, + "anship": 35402, + "ĠAlmost": 35403, + "Ġmotorcycle": 35404, + "_fee": 35405, + "Ġabsorb": 35406, + "ĠVincent": 35407, + "Ġsounded": 35408, + "ÃŃst": 35409, + "Ġpharmaceutical": 35410, + "htag": 35411, + "ĠKindle": 35412, + "italize": 35413, + "ĠEmperor": 35414, + "oustic": 35415, + "Ġspecialists": 35416, + "åħ¬": 35417, + "BorderStyle": 35418, + "/\\": 35419, + "RELATED": 35420, + "(',',": 35421, + "(expr": 35422, + "Ġht": 35423, + "åįĪ": 35424, + "_Create": 35425, + "Ġspecially": 35426, + "Ġ[];čĊ": 35427, + "Ġheel": 35428, + "Ġsept": 35429, + "_arch": 35430, + "(initial": 35431, + "%.ĊĊ": 35432, + "\\\",\\\"": 35433, + "Ġdiscusses": 35434, + "Ġupt": 35435, + "Ġ[&": 35436, + "Ġmanus": 35437, + ".hand": 35438, + "ĠMAIN": 35439, + "ĠDenmark": 35440, + "Ġ],čĊ": 35441, + "Ġcryst": 35442, + "Ġnack": 35443, + "Coords": 35444, + "_inner": 35445, + "Ġmidst": 35446, + "Ġawake": 35447, + "ĠÐŀ": 35448, + "-break": 35449, + "ÃŃvel": 35450, + "_PASS": 35451, + "ĠParams": 35452, + "Ġdetr": 35453, + "Ġspider": 35454, + "ĠConcept": 35455, + "Ġprend": 35456, + "CHED": 35457, + ".Exit": 35458, + "Ġpopulated": 35459, + "Ġvirtue": 35460, + "_SESSION": 35461, + "Ġnouvel": 35462, + "oauth": 35463, + "ĠданнÑĭ": 35464, + "rink": 35465, + ".HeaderText": 35466, + "aturated": 35467, + "Ġerst": 35468, + "Ġåħ": 35469, + "à¥ĩ": 35470, + "_visible": 35471, + "eyer": 35472, + "Ġliable": 35473, + "Ġdebe": 35474, + "Ġbw": 35475, + "{-#": 35476, + "_WIN": 35477, + "dfs": 35478, + "Hover": 35479, + "ĠPUT": 35480, + "-angle": 35481, + "Ġnoble": 35482, + "Ġtraces": 35483, + "encv": 35484, + "ĠuserData": 35485, + "_ins": 35486, + "ĠSuz": 35487, + "Ġnewsletters": 35488, + "ĠModi": 35489, + "Ġentrepreneurs": 35490, + "Ġtribute": 35491, + "Ġrumors": 35492, + "Ġrr": 35493, + "ĠQuarter": 35494, + "ê³ł": 35495, + "Ġfeeds": 35496, + "óg": 35497, + "Ġenvelope": 35498, + "Ġlear": 35499, + "Ġkø": 35500, + "developer": 35501, + "Similar": 35502, + ":\")Ċ": 35503, + "subscription": 35504, + "Modifier": 35505, + "italic": 35506, + "Ġnasty": 35507, + "Ġtermination": 35508, + "Ġcharming": 35509, + "ĠâŁ": 35510, + "tons": 35511, + ".trace": 35512, + "hots": 35513, + "ĠUR": 35514, + "Mont": 35515, + "Ġjustified": 35516, + "ĠGang": 35517, + "inea": 35518, + "Ġbog": 35519, + "(ap": 35520, + "_$": 35521, + "Ġcontamin": 35522, + ".Dot": 35523, + "ĉDebug": 35524, + "(exports": 35525, + "Ġpaired": 35526, + "ĠAssignment": 35527, + "Ġautomobile": 35528, + "ĵį": 35529, + "Ġphases": 35530, + "vw": 35531, + "@SuppressWarnings": 35532, + "=\\": 35533, + "rant": 35534, + "-ed": 35535, + "ĉawait": 35536, + "Ġcertificates": 35537, + "'>\"": 35538, + "Ġintact": 35539, + "CTRL": 35540, + "Mike": 35541, + "gregation": 35542, + "ATTERN": 35543, + "Ġrepublic": 35544, + "_upper": 35545, + "iliary": 35546, + "Ġcomputation": 35547, + "hire": 35548, + "ĠShin": 35549, + "_ANY": 35550, + "ĠManufacturer": 35551, + "ĠCarm": 35552, + "Ġbearings": 35553, + "_comb": 35554, + "cad": 35555, + "uristic": 35556, + "Ġwholesale": 35557, + "Ġdonor": 35558, + ".interfaces": 35559, + "presso": 35560, + "ĠBrun": 35561, + "-close": 35562, + "prove": 35563, + "_SK": 35564, + "ĉframe": 35565, + "etros": 35566, + "ĠPain": 35567, + "_EXP": 35568, + "ĠLT": 35569, + "_fs": 35570, + ".datas": 35571, + "ĉss": 35572, + "voir": 35573, + "ĠAxis": 35574, + "Major": 35575, + "=\"<": 35576, + "[h": 35577, + "Ġprofess": 35578, + "igrate": 35579, + "(score": 35580, + "Keyword": 35581, + "\"os": 35582, + "ĠĠĠĠĉĊ": 35583, + "analysis": 35584, + "Ġreplay": 35585, + ".pass": 35586, + "\\d": 35587, + "tls": 35588, + "Ġsanct": 35589, + ".light": 35590, + "_mobile": 35591, + "ÑģÑĤÑĮ": 35592, + "ĉtotal": 35593, + "uity": 35594, + "Ġpaused": 35595, + "NAS": 35596, + "Ġencore": 35597, + "loe": 35598, + "Ġ-*-ĊĊ": 35599, + ".high": 35600, + "ampler": 35601, + "ĠSecure": 35602, + "Ġfragments": 35603, + "_vel": 35604, + "illary": 35605, + "ĠStein": 35606, + "ĠDawn": 35607, + "Ġmaximize": 35608, + "ย": 35609, + "Ġ/^": 35610, + "Ġcontinually": 35611, + "Ġshadows": 35612, + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 35613, + "ĠIActionResult": 35614, + "Ġinformación": 35615, + "CHECK": 35616, + ".SelectedItem": 35617, + "bundle": 35618, + "olley": 35619, + "<": 35781, + "Ġtrajectory": 35782, + "_ring": 35783, + "Ġhydrogen": 35784, + "tron": 35785, + "Ġstatute": 35786, + "Ġconditional": 35787, + "Ġtray": 35788, + "-school": 35789, + "(widget": 35790, + "$config": 35791, + "Ġrequesting": 35792, + ".uint": 35793, + "eton": 35794, + "brities": 35795, + "OfType": 35796, + "ADMIN": 35797, + "predict": 35798, + "Ġgegen": 35799, + "ĠHapp": 35800, + "OCUMENT": 35801, + "ĠApart": 35802, + "Ġ-----": 35803, + "roe": 35804, + "uide": 35805, + "justify": 35806, + "ĠSquad": 35807, + "Ġprofes": 35808, + ".bot": 35809, + "_currency": 35810, + "innen": 35811, + "ĠMumbai": 35812, + "ĠNumbers": 35813, + "avanaugh": 35814, + "agnitude": 35815, + "âĢľThere": 35816, + "=http": 35817, + "çīĩ": 35818, + "Ġvb": 35819, + "+'{{$": 35902, + "Ġinode": 35903, + "sil": 35904, + "Ġhace": 35905, + "Ġseverely": 35906, + "ĠOverview": 35907, + "Ġspraw": 35908, + "Ġbeaches": 35909, + ":left": 35910, + "·»": 35911, + "(${": 35912, + "ĠFIRST": 35913, + "ĠSpa": 35914, + "-ass": 35915, + "Ġbaise": 35916, + "ĠNODE": 35917, + "ĠPizza": 35918, + "Pet": 35919, + "(seq": 35920, + "\\\">Ċ": 35921, + "CppMethodPointer": 35922, + "Ġvp": 35923, + "Ġia": 35924, + "_seconds": 35925, + "emet": 35926, + "/blob": 35927, + "_THRESH": 35928, + "...čĊ": 35929, + "Dest": 35930, + "ĠNH": 35931, + ".dataSource": 35932, + "ités": 35933, + "ĠJak": 35934, + "sell": 35935, + "Ġworkshops": 35936, + "\",Ċ": 36552, + "_Pin": 36553, + "uese": 36554, + "Ġoverrides": 36555, + "_ready": 36556, + "Advanced": 36557, + "Ġopi": 36558, + "-cart": 36559, + "(\"/\",": 36560, + "ĠDeb": 36561, + "CRY": 36562, + "ĠVertical": 36563, + "ĠOVER": 36564, + "ĠCorporate": 36565, + "Ġ\"\";": 36566, + "Ġstepping": 36567, + "ej": 36568, + "Ġaccusations": 36569, + "Ġoraz": 36570, + "_tail": 36571, + "Ġinduced": 36572, + "Ġelastic": 36573, + "Ġblown": 36574, + ",//": 36575, + "Ġbackgrounds": 36576, + "âĢĻune": 36577, + "-sdk": 36578, + "ĠsetInterval": 36579, + "Ġincentives": 36580, + "Ġvegetable": 36581, + "_On": 36582, + "expanded": 36583, + "pix": 36584, + "_shader": 36585, + "ĠSPDX": 36586, + "@example": 36587, + "ĠWrapper": 36588, + ".Zero": 36589, + "Positive": 36590, + "Ġspinner": 36591, + "Ġinvented": 36592, + "ĠGates": 36593, + "оÑĤоÑĢ": 36594, + "Ġcomparisons": 36595, + "è·": 36596, + ".primary": 36597, + "dataProvider": 36598, + "additional": 36599, + "ĉoptions": 36600, + "snapshot": 36601, + ".setHorizontal": 36602, + "Ġ\"{}": 36603, + "ĠFisher": 36604, + "halten": 36605, + "": 36638, + "ĠRegistered": 36639, + "INED": 36640, + "kal": 36641, + "parison": 36642, + "Ġobjeto": 36643, + "Vi": 36644, + "manda": 36645, + "Ġrenewed": 36646, + "ĠSof": 36647, + "essel": 36648, + ".ndarray": 36649, + "Ġcrap": 36650, + "管": 36651, + ".abspath": 36652, + "(up": 36653, + "Ġclearance": 36654, + "ĠTW": 36655, + "_COPY": 36656, + "ĠĠĠĠĠĠĠĠĠĠĠĠĉ": 36657, + "Ġforests": 36658, + "Ġarguably": 36659, + "ĠASS": 36660, + "hey": 36661, + "amel": 36662, + "_fore": 36663, + "ĠSoutheast": 36664, + "Ġabused": 36665, + "Ġpracticing": 36666, + "akedirs": 36667, + "主": 36668, + "_resources": 36669, + "Ġpond": 36670, + ".Fixed": 36671, + "LastError": 36672, + "ĠPsychology": 36673, + "Ġ\"//": 36674, + "!:": 36675, + "Reusable": 36676, + "Ġmensaje": 36677, + "Ġrospy": 36678, + "Ġbour": 36679, + "Ġvarieties": 36680, + "Ġempath": 36681, + "(({": 36682, + "_org": 36683, + "ĠMes": 36684, + "ĠMagento": 36685, + "ISTORY": 36686, + "Unless": 36687, + "Ġhj": 36688, + "ĠDuty": 36689, + "Jun": 36690, + ",size": 36691, + "Ġpaintings": 36692, + "Ġdispens": 36693, + "dart": 36694, + "Ġbehavioral": 36695, + "Ġrpc": 36696, + "calculate": 36697, + "fruit": 36698, + "_mm": 36699, + "ĉpthread": 36700, + "MaxLength": 36701, + "Ġcurrencies": 36702, + "_capacity": 36703, + "ĠOz": 36704, + "Ġfirearm": 36705, + "Ġcoefficient": 36706, + "Ġbankruptcy": 36707, + "wart": 36708, + "Ġfatigue": 36709, + "AVA": 36710, + "Ġespa": 36711, + "_pc": 36712, + "ĠQuotes": 36713, + "_LIGHT": 36714, + "ĠTickets": 36715, + "Ġrelates": 36716, + "Ġpublishers": 36717, + "Ġunlocked": 36718, + "Ġ//----------------------------------------------------------------": 36719, + "ĠInterruptedException": 36720, + "Ġoutlook": 36721, + "rn": 36722, + "Ġrebels": 36723, + "Written": 36724, + "Ġasian": 36725, + "otto": 36726, + "Ġĉĉĉĉ": 36727, + "_gpu": 36728, + "Txt": 36729, + ".ImageView": 36730, + "Ġsuis": 36731, + "_tables": 36732, + ".RecyclerView": 36733, + "Ġwhatsoever": 36734, + "èģ": 36735, + "]++;Ċ": 36736, + "assertTrue": 36737, + "_verify": 36738, + "ĠRivers": 36739, + "Ġ][": 36740, + "Jet": 36741, + "idian": 36742, + "Sibling": 36743, + "Ġgenres": 36744, + ".Access": 36745, + "OPS": 36746, + "Ġtrivial": 36747, + "ส": 36748, + "alen": 36749, + "вед": 36750, + "ĠSword": 36751, + "Ġscrutiny": 36752, + "(cb": 36753, + "Ġcommerce": 36754, + "Ġguarantees": 36755, + "_adv": 36756, + "ĠLET": 36757, + "recio": 36758, + "Ġhilar": 36759, + "Ġbackyard": 36760, + "ãĢı": 36761, + "Ġillustrated": 36762, + "/vendor": 36763, + ".Util": 36764, + "Ġwow": 36765, + "LOY": 36766, + "ĠMarshal": 36767, + "\">'.$": 36768, + "ĠBak": 36769, + "Ġmodifiers": 36770, + "dictionary": 36771, + "ĠStre": 36772, + "multiple": 36773, + "\")),": 36774, + "ĠCort": 36775, + "']\").": 36776, + "(admin": 36777, + "ĠCreator": 36778, + "Internet": 36779, + "(ms": 36780, + "logy": 36781, + "DECLARE": 36782, + "ĠMarcus": 36783, + "<<<<": 36784, + "ãģł": 36785, + "_my": 36786, + "(inst": 36787, + "Ġsciences": 36788, + "NDER": 36789, + ".enter": 36790, + "Ġitu": 36791, + "Ġbehave": 36792, + "Pan": 36793, + "ombies": 36794, + "='<": 36795, + "'));čĊ": 36796, + "ĠMENU": 36797, + "ĠWorkers": 36798, + ".NoError": 36799, + "Ġbindings": 36800, + "Ġdisabilities": 36801, + "{\\": 36802, + "ĠMunicip": 36803, + "Ġcores": 36804, + "urple": 36805, + "ĠNokia": 36806, + "usions": 36807, + "ĠFitness": 36808, + ".handleChange": 36809, + "Ġjavascript": 36810, + "ìļĶ": 36811, + "(dec": 36812, + "Ġpacking": 36813, + "-depend": 36814, + "Ġtranscript": 36815, + "zeros": 36816, + "_alert": 36817, + "?\",Ċ": 36818, + "libs": 36819, + "±Ð¾ÑĤ": 36820, + "Ġ|ĊĊ": 36821, + "trained": 36822, + "ĠGent": 36823, + "ĠRab": 36824, + "xp": 36825, + "_configuration": 36826, + "天": 36827, + "_accept": 36828, + ".recyclerview": 36829, + ":url": 36830, + "ĠMuhammad": 36831, + "Ġprivileges": 36832, + "_bank": 36833, + "uku": 36834, + "wallet": 36835, + "ĠROOT": 36836, + "Ġencuent": 36837, + "?family": 36838, + "ĉposition": 36839, + "Ġcg": 36840, + "Ġprecip": 36841, + "methods": 36842, + "_fast": 36843, + "increment": 36844, + "ĠTiger": 36845, + "_OCCURRED": 36846, + "quip": 36847, + "ĠHAS": 36848, + "_dom": 36849, + "Ġwreck": 36850, + "bj": 36851, + "Ġdern": 36852, + "Ġorgans": 36853, + ".entries": 36854, + "Ġ_('": 36855, + "ramento": 36856, + "ĠJamie": 36857, + "Ġpunk": 36858, + "IPP": 36859, + "Ġprograma": 36860, + "Ġattain": 36861, + "Ġproves": 36862, + "/sign": 36863, + "Ġanswering": 36864, + "Ġladder": 36865, + "****************************": 36866, + "ĠWalmart": 36867, + "ĠCONTENT": 36868, + "ductor": 36869, + "Ġverbal": 36870, + "ĠPID": 36871, + "crypto": 36872, + "_CALLBACK": 36873, + "Ġ=================================": 36874, + "Ġpotent": 36875, + "Ġshorts": 36876, + ".Uri": 36877, + ".uniform": 36878, + ";border": 36879, + "ĠWer": 36880, + "Ġherein": 36881, + "lla": 36882, + "ĠIhr": 36883, + "Pixmap": 36884, + "literal": 36885, + "!)ĊĊ": 36886, + "generic": 36887, + "rust": 36888, + "_scripts": 36889, + "osto": 36890, + "itus": 36891, + "ĠCoalition": 36892, + "Ġremot": 36893, + "deploy": 36894, + "ĠEagle": 36895, + "ãĢģãĢĮ": 36896, + "Ġimportante": 36897, + "ĉobject": 36898, + "Ġseasonal": 36899, + "nej": 36900, + "aidu": 36901, + "BindView": 36902, + "ĠSierra": 36903, + "-bg": 36904, + "ĠmakeStyles": 36905, + "[offset": 36906, + "Games": 36907, + "Ġhormone": 36908, + "ARIO": 36909, + "heads": 36910, + "(select": 36911, + "ĠStarted": 36912, + "@param": 36913, + "_decl": 36914, + "_blog": 36915, + "Ġaño": 36916, + "\\Api": 36917, + "ĠMilwaukee": 36918, + "Provid": 36919, + "Animated": 36920, + "Ġcooler": 36921, + "ĠSeed": 36922, + ".Edit": 36923, + "ÏĦ": 36924, + "ĠTaking": 36925, + "ĠborderColor": 36926, + "-founder": 36927, + ".LoggerFactory": 36928, + "Ġ\"\"ĊĊ": 36929, + "ALT": 36930, + "ĠLate": 36931, + "EDIATE": 36932, + "Ġ);ĊĊĊ": 36933, + "afa": 36934, + "Ġcancellation": 36935, + "Atom": 36936, + "ĠBirmingham": 36937, + "empresa": 36938, + "HEMA": 36939, + "ascal": 36940, + "Ġupside": 36941, + ".Version": 36942, + "ĠFolder": 36943, + "ĠEight": 36944, + "ĠVintage": 36945, + "ĠAppDelegate": 36946, + "ĠPrevention": 36947, + ".separator": 36948, + "STM": 36949, + "(room": 36950, + "generator": 36951, + "Ġcattle": 36952, + "ĉZ": 36953, + "ĠParticle": 36954, + "'};Ċ": 36955, + "Ġneighbours": 36956, + "ĠStateless": 36957, + "Ġaltitude": 36958, + "Ġsaint": 36959, + "обав": 36960, + "Ġconvinc": 36961, + "ĠContents": 36962, + "Ġjeune": 36963, + "(ts": 36964, + "Serialization": 36965, + "(collection": 36966, + "ĠJazz": 36967, + "ĠDod": 36968, + "ĠRoch": 36969, + "acio": 36970, + "commended": 36971, + "DEFINE": 36972, + ".onload": 36973, + "Ġspecialty": 36974, + "PLACE": 36975, + "_MOVE": 36976, + "Ġaccountable": 36977, + "Reuters": 36978, + "Ġficken": 36979, + "Ġdepr": 36980, + "Wow": 36981, + "Void": 36982, + ".space": 36983, + "à¸Ĺ": 36984, + "Ġtq": 36985, + "ĠPets": 36986, + "<$": 36987, + "(Current": 36988, + "berries": 36989, + "planation": 36990, + "ĠlistOf": 36991, + "ĠThu": 36992, + "ĠPRINT": 36993, + "Ġmismo": 36994, + "Ġdoi": 36995, + "chk": 36996, + "ĠUnicode": 36997, + "(role": 36998, + "Ġvirgin": 36999, + "-->Ċ": 37460, + "Vol": 37461, + "ĠSSD": 37462, + "))),": 37463, + ".Optional": 37464, + "Ġnurses": 37465, + "Ġorb": 37466, + "_pe": 37467, + ");čĊčĊčĊ": 37468, + "placed": 37469, + "esser": 37470, + "Ġtherapeutic": 37471, + "Ġwhitespace": 37472, + "Ġaston": 37473, + "Successful": 37474, + "Ġpraised": 37475, + "ĠWes": 37476, + "Ġeighth": 37477, + "iral": 37478, + "Ġvrouw": 37479, + "Ġfaction": 37480, + "_bias": 37481, + "Ġwitch": 37482, + "Ġnpc": 37483, + "(sb": 37484, + "ĠRodrig": 37485, + "_big": 37486, + "Dependency": 37487, + "ĠAbraham": 37488, + "ardi": 37489, + "CAR": 37490, + "nos": 37491, + "Ġabundance": 37492, + "Ġnutrients": 37493, + "instein": 37494, + ".Vert": 37495, + "ĠISS": 37496, + "D": 37595, + "Ġservlet": 37596, + "bastian": 37597, + "Ġ>&": 37598, + "SID": 37599, + "_clk": 37600, + "Ġdivisions": 37601, + "}',Ċ": 37602, + "Ġdildo": 37603, + "Ġparade": 37604, + "major": 37605, + "Ġaboard": 37606, + ";++": 37607, + "Ġfusion": 37608, + "\"},{\"": 37609, + "ĠDialogResult": 37610, + "ĉarr": 37611, + "-em": 37612, + "_nr": 37613, + "(handler": 37614, + ".NET": 37615, + ".XtraReports": 37616, + "ĠShah": 37617, + "ĠBrief": 37618, + "-,": 37619, + "Ġprecio": 37620, + "ĉĉĉĠĠĠĠĠĠ": 37621, + "Ġtant": 37622, + "ĠGrande": 37623, + "/xml": 37624, + "_ICON": 37625, + "ĠRetro": 37626, + "unque": 37627, + "Ġnag": 37628, + "toFixed": 37629, + "XL": 37630, + "Ġdeclaring": 37631, + "ĠConcrete": 37632, + "ĠAmazing": 37633, + "ĉprintk": 37634, + "Ġdebates": 37635, + "DATED": 37636, + "Ġaesthetic": 37637, + "emetery": 37638, + "RoutingModule": 37639, + "ĠNashville": 37640, + "WAYS": 37641, + "Ġwolf": 37642, + "Ġobservers": 37643, + "OTA": 37644, + "anson": 37645, + "Ġea": 37646, + "Ġgreenhouse": 37647, + "ĵįä½ľ": 37648, + "Ġstair": 37649, + "Ġimmigrant": 37650, + "_apply": 37651, + "peare": 37652, + "ĠBloomberg": 37653, + "_PLAYER": 37654, + "Resp": 37655, + "æŃ£": 37656, + "Chooser": 37657, + "ĠICollection": 37658, + "Peter": 37659, + "Erro": 37660, + ".detectChanges": 37661, + "Maps": 37662, + "Ġsqueeze": 37663, + "ĠHomes": 37664, + "wegian": 37665, + "Ġformatting": 37666, + "Ġnegotiate": 37667, + "uld": 37668, + "ĠNep": 37669, + "ĠQB": 37670, + "Ġeconomies": 37671, + "Ġ*/,": 37672, + "Ġredund": 37673, + "ĠAber": 37674, + ".IsNullOrWhiteSpace": 37675, + "ycled": 37676, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 37677, + "_Sh": 37678, + "Ġskept": 37679, + "Ġrecreated": 37680, + "ĠgetType": 37681, + "Ġmargins": 37682, + "Ġcolonial": 37683, + "charts": 37684, + "//@": 37685, + "Ġprocessors": 37686, + "说": 37687, + "batis": 37688, + "æĦı": 37689, + "atorio": 37690, + "mentioned": 37691, + "Patient": 37692, + "Ġprey": 37693, + "Checkbox": 37694, + "_xpath": 37695, + ".skip": 37696, + "ĠMormon": 37697, + "ĠMemoryStream": 37698, + "CREMENT": 37699, + "Ġku": 37700, + "meld": 37701, + "\\Data": 37702, + "ĠKernel": 37703, + "iltr": 37704, + "éĢģ": 37705, + "(profile": 37706, + "Carbon": 37707, + "ROLE": 37708, + "(pl": 37709, + "]*(": 37710, + ".memory": 37711, + "Ġmedal": 37712, + "Ġadvisor": 37713, + "ität": 37714, + "Ġhdr": 37715, + "ierung": 37716, + "ĠProvides": 37717, + "(alpha": 37718, + "Ġteenagers": 37719, + "-parser": 37720, + ".LatLng": 37721, + "]()Ċ": 37722, + "Ġfelony": 37723, + "ĉĉĉĊĉĉĉĊ": 37724, + "BOOK": 37725, + "Ġslash": 37726, + "Ġclearfix": 37727, + "ĠProphet": 37728, + "容": 37729, + "rightness": 37730, + "-fi": 37731, + ".kind": 37732, + "erton": 37733, + "Jim": 37734, + "Ġmanipulate": 37735, + "Ġworksheet": 37736, + "olin": 37737, + "stars": 37738, + "Ġartifact": 37739, + "_EMPTY": 37740, + "ĉmain": 37741, + "-------------';": 37809, + "Ġexpressing": 37810, + "ĠIQ": 37811, + "ĠFact": 37812, + "/*******************************************************************************Ċ": 37813, + "_mass": 37814, + ")):": 37815, + "Ġcondom": 37816, + "ĠcreateState": 37817, + "ometown": 37818, + "Ġirr": 37819, + "Ġ>(": 37820, + ">B": 37821, + "iteration": 37822, + "ãĥª": 37823, + "Ġshirts": 37824, + "ounty": 37825, + "->$": 37826, + "_SIGN": 37827, + "ĠDale": 37828, + "Ġjj": 37829, + "Easy": 37830, + "Fre": 37831, + "ĠNy": 37832, + "Ġchlor": 37833, + "matched": 37834, + "ĠGerm": 37835, + "-UA": 37836, + "ĠNathan": 37837, + "education": 37838, + "-yard": 37839, + "-che": 37840, + "houses": 37841, + "ritional": 37842, + "Ġproximity": 37843, + "Ġdiesem": 37844, + "áºŃp": 37845, + "Ġdrought": 37846, + ".audio": 37847, + "ĠLeo": 37848, + "Ġfavorable": 37849, + "inch": 37850, + "ĠDaw": 37851, + "ribly": 37852, + "_student": 37853, + "idable": 37854, + "OVE": 37855, + "Ġlacks": 37856, + "ouncing": 37857, + ".business": 37858, + "Ġreopen": 37859, + "maybe": 37860, + "_GLOBAL": 37861, + "Ġdresses": 37862, + "ĠEdwards": 37863, + "ensible": 37864, + "ĠHardware": 37865, + "ĠExcellent": 37866, + "ĠTimeUnit": 37867, + "CTIONS": 37868, + "Ġschedules": 37869, + "Ġsegue": 37870, + "Opens": 37871, + "ammen": 37872, + "-Identifier": 37873, + "Ġstaring": 37874, + "Ġhappily": 37875, + "ĠHob": 37876, + "'_": 37877, + "Ġ\");": 37878, + "amentos": 37879, + "etched": 37880, + "Ġ/>}Ċ": 37881, + ".Users": 37882, + "Ġinterrupted": 37883, + "Contacts": 37884, + "Ġregistro": 37885, + "inburgh": 37886, + "CHA": 37887, + "_imp": 37888, + "phis": 37889, + "say": 37890, + "Ġretailer": 37891, + ".NODE": 37892, + "/maps": 37893, + "_LAST": 37894, + "ĠCharge": 37895, + "_guard": 37896, + "Collider": 37897, + "ĠStatelessWidget": 37898, + "\":[\"": 37899, + "(\"../../": 37900, + "ioxide": 37901, + "ĠSund": 37902, + "Ġ'';": 37903, + "unset": 37904, + "addWidget": 37905, + "лÑİ": 37906, + "elles": 37907, + "alker": 37908, + "Arc": 37909, + "Ġdeduct": 37910, + "GUILayout": 37911, + "ĠVilla": 37912, + "Ġforbidden": 37913, + "_where": 37914, + "Ġ\\/": 37915, + "ĠTib": 37916, + "_AX": 37917, + "]čĊčĊ": 37918, + "ĠBir": 37919, + "Ġbend": 37920, + "ĠMAKE": 37921, + "ĠMET": 37922, + "Ġfutures": 37923, + "Ġweighted": 37924, + "\"\"\"čĊ": 37925, + "Ġauthorize": 37926, + "(program": 37927, + "},{\"": 37928, + "Ġcoefficients": 37929, + "ês": 37930, + "PerPage": 37931, + "ĠBathroom": 37932, + "ĠPublishing": 37933, + "GPL": 37934, + "Ġsubmissions": 37935, + "ĠNUMBER": 37936, + "jÄħ": 37937, + "Ġadditionally": 37938, + "empre": 37939, + "ĠShel": 37940, + "otyp": 37941, + "Solution": 37942, + "Ġthunder": 37943, + "_ec": 37944, + "ĠĊĠĠĠĠĊ": 37945, + "ĠFellow": 37946, + "Ġkay": 37947, + "ĠnewState": 37948, + "ONTAL": 37949, + "Implementation": 37950, + ".Look": 37951, + "Ġents": 37952, + "Ġlors": 37953, + "ĠBIG": 37954, + "fab": 37955, + "Ġaveraged": 37956, + "ĠFeedback": 37957, + "ĠWells": 37958, + "Ġmartial": 37959, + "Ġindul": 37960, + "ĠCommunist": 37961, + "ĠForex": 37962, + "ĠAgriculture": 37963, + "\"[": 37964, + "Ġquar": 37965, + "ĠKont": 37966, + "ĉview": 37967, + ".Bytes": 37968, + "desktop": 37969, + "ĠMakes": 37970, + "akespeare": 37971, + ".Nullable": 37972, + "Ġspotlight": 37973, + "VB": 37974, + "owy": 37975, + "(torch": 37976, + "tridge": 37977, + "_bounds": 37978, + "Ġapologize": 37979, + ".addItem": 37980, + "antd": 37981, + "*);Ċ": 37982, + ",u": 37983, + "(gen": 37984, + "ç»ĵ": 37985, + "reator": 37986, + "ĠCord": 37987, + "oupper": 37988, + ".metro": 37989, + "Ġew": 37990, + "ĠWORD": 37991, + ".After": 37992, + "Ġdetained": 37993, + "ĠHammer": 37994, + "existing": 37995, + "Ġost": 37996, + "Ġmonument": 37997, + "-custom": 37998, + "UserID": 37999, + "ĠNom": 38000, + "Ġrejection": 38001, + "(dim": 38002, + "Ġsingleton": 38003, + "ĉdie": 38004, + "ariance": 38005, + "reports": 38006, + "]!=": 38007, + "elda": 38008, + "Ġprevalence": 38009, + "_regs": 38010, + ".\".": 38011, + "Ġfeminist": 38012, + "Codec": 38013, + "Ġ**Ċ": 38014, + "(labels": 38015, + "_MARK": 38016, + "FAILED": 38017, + "Ġadministered": 38018, + "WN": 38019, + "ĠĠĠĠĠĠĠĠĉĉ": 38020, + "Ġnoun": 38021, + "wig": 38022, + "Ġgotta": 38023, + "Ġrif": 38024, + "-im": 38025, + "ĠPaulo": 38026, + "ĠCommandType": 38027, + "]))ĊĊ": 38028, + "-zero": 38029, + "Training": 38030, + "Ġlord": 38031, + "_art": 38032, + "reddit": 38033, + "Cert": 38034, + "Ġpeso": 38035, + "Rot": 38036, + "Ġendanger": 38037, + ".dr": 38038, + "userInfo": 38039, + "unts": 38040, + "nv": 38041, + "ĠTrailer": 38042, + "-first": 38043, + "(make": 38044, + "Ġbenefici": 38045, + "-black": 38046, + "iÃŁ": 38047, + "Ġundoubtedly": 38048, + "Ġmex": 38049, + "ĠAncient": 38050, + "(as": 38051, + "Ġdescent": 38052, + "Pick": 38053, + "Ġreplica": 38054, + "$obj": 38055, + "ähr": 38056, + "Ġarrows": 38057, + "fty": 38058, + "ĠLibya": 38059, + "uga": 38060, + "charged": 38061, + "Tur": 38062, + "Ġhomic": 38063, + "issen": 38064, + "ĠFake": 38065, + "Ġbeers": 38066, + "Ġscattered": 38067, + "(Time": 38068, + "UTIL": 38069, + "Ġbureaucr": 38070, + "/plain": 38071, + "Ġsticking": 38072, + "FAIL": 38073, + "ĠCovid": 38074, + "Third": 38075, + "_present": 38076, + "ĠPierre": 38077, + "Ġëª": 38078, + "Ġ[...]ĊĊ": 38079, + "Prob": 38080, + "ĠTraffic": 38081, + "icao": 38082, + "doctor": 38083, + "Ġ),ĊĊ": 38084, + "Tabs": 38085, + "alu": 38086, + "ï¼ļâĢľ": 38087, + "Ġinherent": 38088, + "_No": 38089, + "ritis": 38090, + "ĠProof": 38091, + ".basename": 38092, + "ä¼ļ": 38093, + "Ġchim": 38094, + "ĠProtected": 38095, + "crit": 38096, + "Ġprone": 38097, + "Ġкон": 38098, + "ĠHeroes": 38099, + "Ġanxious": 38100, + "Ġanos": 38101, + "Ġweekends": 38102, + "Ġsext": 38103, + "Ġreducer": 38104, + "=UTF": 38105, + "half": 38106, + "ĠSaw": 38107, + ".mm": 38108, + "Ġnueva": 38109, + ".currentTarget": 38110, + ".lua": 38111, + "_EXTENSION": 38112, + "ĉreg": 38113, + "ĠCtrl": 38114, + "_align": 38115, + "acceptable": 38116, + "Ġrushing": 38117, + "frac": 38118, + "Ġboasts": 38119, + "Five": 38120, + "±": 38121, + "ĠTemperature": 38122, + ">):": 38123, + "Ġcharter": 38124, + "REATED": 38125, + "Ġsubjected": 38126, + "Ġopc": 38127, + "healthy": 38128, + "使ç͍": 38129, + "ĠScientific": 38130, + "Ġfrau": 38131, + "riages": 38132, + "à¸Ķ": 38133, + ".inventory": 38134, + "ationale": 38135, + "Mad": 38136, + "minutes": 38137, + ">>();Ċ": 38138, + "ĠEnv": 38139, + "Ġrecordings": 38140, + "Ġsuspicion": 38141, + "sqlite": 38142, + "ĉread": 38143, + "ãģ¦": 38144, + "Ġworries": 38145, + ".putString": 38146, + "ĠShanghai": 38147, + "(uid": 38148, + "rer": 38149, + "ĠvÃŃde": 38150, + "\"):": 38151, + "Ġmethodology": 38152, + "ĠкоÑĤоÑĢ": 38153, + "ccc": 38154, + "avad": 38155, + "Ġinduction": 38156, + "ĉThread": 38157, + ",string": 38158, + "ại": 38159, + "nehmen": 38160, + "uition": 38161, + "Ġ*__": 38162, + ".emf": 38163, + "Ġìľ": 38164, + "/themes": 38165, + "ĠNine": 38166, + ".One": 38167, + "ĠEmbed": 38168, + "Ġfaz": 38169, + "uations": 38170, + "Ġprivately": 38171, + "Ġling": 38172, + "[F": 38173, + "ushi": 38174, + "Ġlaunches": 38175, + "(KEY": 38176, + "GMT": 38177, + "Ġaiming": 38178, + "patible": 38179, + "ĠBiden": 38180, + "iw": 38181, + "ĠDegree": 38182, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 38183, + "Ġ$('<": 38184, + "ários": 38185, + "toUpperCase": 38186, + "ìłľ": 38187, + "ĠEUR": 38188, + "Ġoversight": 38189, + "Ġtablesp": 38190, + "Updates": 38191, + ".makedirs": 38192, + "Ġhumidity": 38193, + "/template": 38194, + "Always": 38195, + "(IS": 38196, + "_cert": 38197, + "Dig": 38198, + "Ġunderway": 38199, + "orton": 38200, + "ĠHurricane": 38201, + "Ġspends": 38202, + "ĠSegment": 38203, + "Ġflies": 38204, + "ĠToggle": 38205, + "ĠLynch": 38206, + "Ġsenses": 38207, + "ĠKos": 38208, + "setEnabled": 38209, + "istically": 38210, + "Ġtester": 38211, + "Ġadministrators": 38212, + "Ġtagged": 38213, + "Ðĵ": 38214, + "Ġshortcut": 38215, + "ĠResolution": 38216, + "Ġsupervision": 38217, + "ĠAshley": 38218, + "Tracking": 38219, + "ulatory": 38220, + "andel": 38221, + "isten": 38222, + "Ġunre": 38223, + "(diff": 38224, + "ANTS": 38225, + "Ġrider": 38226, + "ĠsÄħ": 38227, + ".Series": 38228, + "_orders": 38229, + "ORIZONTAL": 38230, + "Ġretention": 38231, + "ãĢĤčĊčĊ": 38335, + "Ġdiagonal": 38336, + "ĠCancellationToken": 38337, + "_Internal": 38338, + "Ġruin": 38339, + ".Qt": 38340, + "ocratic": 38341, + "Tel": 38342, + "ĠAnswers": 38343, + "matic": 38344, + "Ġxp": 38345, + "atem": 38346, + "_jobs": 38347, + "_any": 38348, + "Ġseniors": 38349, + "Ġlandmark": 38350, + "ĠQList": 38351, + "Ġmaneu": 38352, + "otify": 38353, + "/\";Ċ": 38354, + "/server": 38355, + "ĠPhilosoph": 38356, + "utenant": 38357, + "(io": 38358, + "hz": 38359, + "Ġauthenticated": 38360, + "dv": 38361, + "-Compatible": 38362, + "Originally": 38363, + ",function": 38364, + "ãĢĤčĊ": 38365, + "ĠRepresentative": 38366, + "asily": 38367, + "ircuit": 38368, + ".dt": 38369, + "(math": 38370, + ".Marshal": 38371, + "[,": 38372, + "ĠCities": 38373, + "_turn": 38374, + "|)Ċ": 38375, + "Ġcantidad": 38376, + "alter": 38377, + "ĉui": 38378, + "ĠNebraska": 38379, + "Ġskirt": 38380, + ".bg": 38381, + "SharedPreferences": 38382, + "(style": 38383, + "Ġgrief": 38384, + "gew": 38385, + "Ġsafeg": 38386, + "olang": 38387, + "_lists": 38388, + "ìĽ": 38389, + "Ġgranite": 38390, + "Ġhottest": 38391, + ".jdbc": 38392, + ".Customer": 38393, + "Ġâī¤": 38394, + "Ġwaar": 38395, + "_scene": 38396, + "+'/": 38397, + "ĠJTextField": 38398, + "Ġseating": 38399, + "Ġwears": 38400, + "Ġ`/": 38401, + "Cases": 38402, + "ĠYoutube": 38403, + "ım": 38404, + "Ġbalcon": 38405, + ",G": 38406, + "MetaData": 38407, + "-price": 38408, + "SCR": 38409, + "Unity": 38410, + "Ġtrunk": 38411, + "={`${": 38412, + "Ġearthquake": 38413, + "Partial": 38414, + "Ġsubst": 38415, + "Ġelimin": 38416, + "=\"'.": 38417, + "//*[@": 38418, + "Ġsupervisor": 38419, + "vrolet": 38420, + "_article": 38421, + "Ġpane": 38422, + "bio": 38423, + "Ġmotors": 38424, + "NM": 38425, + "Frank": 38426, + "Ġonion": 38427, + "-word": 38428, + "ItemClickListener": 38429, + "Ġbrit": 38430, + "endencies": 38431, + "Computer": 38432, + "_running": 38433, + "(day": 38434, + "-he": 38435, + "(named": 38436, + "ĠSach": 38437, + "оÑĩ": 38438, + "campaign": 38439, + ".Abstract": 38440, + "(wrapper": 38441, + ".pay": 38442, + "Ġuw": 38443, + "Geo": 38444, + "rails": 38445, + "/select": 38446, + "ichte": 38447, + "sons": 38448, + "EVENT": 38449, + "Ġaliment": 38450, + "Providers": 38451, + "Await": 38452, + "_INTERVAL": 38453, + ".off": 38454, + "Ġgluten": 38455, + "_cloud": 38456, + "Ġwen": 38457, + ".extract": 38458, + "ĉbutton": 38459, + "/MM": 38460, + "Party": 38461, + "Ġdemographic": 38462, + "_errno": 38463, + "Ġhiking": 38464, + "('')Ċ": 38465, + "\",@\"": 38466, + "Ġwit": 38467, + "rá": 38468, + "ologie": 38469, + "ĠStyles": 38470, + "ĠBrowserModule": 38471, + ".RequestMapping": 38472, + "icans": 38473, + "PAGE": 38474, + "creation": 38475, + "ĠFerguson": 38476, + "uded": 38477, + "numbers": 38478, + "ĠGTK": 38479, + "Ġpresentations": 38480, + "ĠBobby": 38481, + "_span": 38482, + "estyle": 38483, + "Ġillegally": 38484, + "abela": 38485, + "Ġbattlefield": 38486, + "capacity": 38487, + "terror": 38488, + "]\");Ċ": 38489, + "Ġwarrior": 38490, + "leader": 38491, + "ĠDBG": 38492, + "ĠRevenue": 38493, + "Ġvigil": 38494, + "Ġcounterparts": 38495, + "(Error": 38496, + "ACTER": 38497, + "Ġheeft": 38498, + "Ġselections": 38499, + "zeug": 38500, + "tom": 38501, + "-two": 38502, + ".;Ċ": 38503, + "_statement": 38504, + "ĠAid": 38505, + "ĠVul": 38506, + "_rgb": 38507, + "Ġprizes": 38508, + "Ġeditable": 38509, + "ĉform": 38510, + "ını": 38511, + ".decor": 38512, + "Demo": 38513, + "lices": 38514, + "Ġenctype": 38515, + "ratulations": 38516, + "ĠROS": 38517, + "_chars": 38518, + "ĠJahr": 38519, + "partial": 38520, + "ÑĥÑĤ": 38521, + "ĠReceive": 38522, + "ĠLands": 38523, + "APTER": 38524, + "Ġchopped": 38525, + "..\"": 38526, + "ĠAnaly": 38527, + "ĠUID": 38528, + "ĠRadeon": 38529, + "ĠBee": 38530, + "Ġunm": 38531, + ">M": 38532, + ".findall": 38533, + "Tokenizer": 38534, + "ĠWHAT": 38535, + "Ġsj": 38536, + "Drawing": 38537, + "Ess": 38538, + "OND": 38539, + "Ĭ¶": 38540, + "(packet": 38541, + "âĢĶbut": 38542, + "Invocation": 38543, + "ĠNuclear": 38544, + "?;Ċ": 38545, + "Ġgrandes": 38546, + "ĠCrypt": 38547, + "remark": 38548, + "Ġ'../../../../": 38549, + "Ġinability": 38550, + "magic": 38551, + "cats": 38552, + "Ġsimulate": 38553, + ":${": 38554, + "inflate": 38555, + "Ġener": 38556, + ":NO": 38557, + "iples": 38558, + "Ġmerit": 38559, + "ĠRated": 38560, + "Ġglue": 38561, + "/blog": 38562, + "Ġgren": 38563, + "Ġthrilled": 38564, + ".CH": 38565, + "uncan": 38566, + "ĠPRIMARY": 38567, + "Ġpersec": 38568, + "Ġfeared": 38569, + ".MIN": 38570, + "ĠTheater": 38571, + "éĴ": 38572, + "ategorie": 38573, + "段": 38574, + "Ġappetite": 38575, + "square": 38576, + "ĠAlexand": 38577, + ".UserId": 38578, + "_gt": 38579, + "_enter": 38580, + "Ġgraduates": 38581, + "FragmentManager": 38582, + "Authorize": 38583, + "-NLS": 38584, + "(My": 38585, + "Ġtriumph": 38586, + "usting": 38587, + "_PARAMS": 38588, + "Characters": 38589, + "(:,:,": 38590, + "_BUILD": 38591, + "MHz": 38592, + "Ġwashed": 38593, + "Ġuncle": 38594, + "Steve": 38595, + "ardown": 38596, + "${": 38780, + "_confirmation": 38781, + "Ġtrophy": 38782, + "Works": 38783, + "ĠElectronics": 38784, + "ĠMediterranean": 38785, + "_metrics": 38786, + "Ġannouncing": 38787, + "ĠDAY": 38788, + "_proto": 38789, + "Ġpear": 38790, + "baseUrl": 38791, + "ĉĉĉĉĉĉĉĉĊ": 38792, + "Ġcoordination": 38793, + ":N": 38794, + ".animate": 38795, + "ĠCotton": 38796, + "_hit": 38797, + "âľ": 38798, + "Ġjetzt": 38799, + "ifter": 38800, + "(fields": 38801, + "ownload": 38802, + "ificacion": 38803, + ".cuda": 38804, + "ĠLiu": 38805, + ">equals": 38806, + "ĠAce": 38807, + "ÑĢам": 38808, + "ĠSuperman": 38809, + "ĠGarcia": 38810, + "Ġarrests": 38811, + "agar": 38812, + "Ġ{})": 38813, + "Ġmacros": 38814, + "roupe": 38815, + "être": 38816, + "Ġtwisted": 38817, + "struments": 38818, + "_(\"": 38819, + "_vertices": 38820, + "ĠTransition": 38821, + "ик": 38822, + "[max": 38823, + "mind": 38824, + "ĠaccessToken": 38825, + "Ġunle": 38826, + "mus": 38827, + "cop": 38828, + "ĠFactor": 38829, + "Ġconced": 38830, + "Ġretr": 38831, + ".linalg": 38832, + "-slider": 38833, + "obl": 38834, + "_StaticFields": 38835, + "Ġzombie": 38836, + "selling": 38837, + "Ġchap": 38838, + "Ġshaking": 38839, + "ĠTranslate": 38840, + "ĠAmsterdam": 38841, + "ĠETH": 38842, + "_EXTERN": 38843, + "kd": 38844, + "_disc": 38845, + "Ġpreceding": 38846, + "Ġprix": 38847, + "ObjectName": 38848, + "_modified": 38849, + "ardware": 38850, + "Ġ?>\">": 38851, + "ĠDW": 38852, + "`${": 38853, + "Ġ?>\">ĊĊ": 38959, + "Ġspinning": 38960, + "_pending": 38961, + "Matchers": 38962, + ".Keys": 38963, + "ĠPV": 38964, + "enus": 38965, + "antis": 38966, + "Ġdiscard": 38967, + "Ġhaul": 38968, + "Ġempir": 38969, + "Ġpathway": 38970, + "Ġoak": 38971, + "мен": 38972, + "-induced": 38973, + "Ġimpair": 38974, + "ĠCalgary": 38975, + ".isHidden": 38976, + "dz": 38977, + "_include": 38978, + "Ġgm": 38979, + "Ġ'('": 38980, + "PY": 38981, + "uggestions": 38982, + "Ġcommodity": 38983, + "cro": 38984, + "/sub": 38985, + "ĠgetInstance": 38986, + "ĠLegacy": 38987, + "ĠKil": 38988, + "Bal": 38989, + "(short": 38990, + "Inform": 38991, + "+x": 38992, + "*r": 38993, + "ĠHopefully": 38994, + "orate": 38995, + "Ġmachen": 38996, + "Ġtreaty": 38997, + "ĠOri": 38998, + ".public": 38999, + "-horizontal": 39000, + "Ġtactic": 39001, + "Ġbord": 39002, + "wares": 39003, + "Ġammo": 39004, + "ĠLists": 39005, + "Ġequations": 39006, + "/her": 39007, + "ĠNSW": 39008, + "Bounding": 39009, + "_Collections": 39010, + "Ġavail": 39011, + ".DropDown": 39012, + "è°": 39013, + "Ġhh": 39014, + "ĠlÃł": 39015, + ".pb": 39016, + "Ġmemorial": 39017, + "ĠATTR": 39018, + "Ġexhausted": 39019, + "Ġtsp": 39020, + "ĉredirect": 39021, + "Ġlikewise": 39022, + "STER": 39023, + "Ljava": 39024, + "Ġcondemned": 39025, + "ocaust": 39026, + "(strict": 39027, + "Ġexempt": 39028, + "Ġsms": 39029, + "Ġexagger": 39030, + "SYS": 39031, + "Ġlounge": 39032, + ":^": 39033, + "Ġtodd": 39034, + "deb": 39035, + "atorial": 39036, + "ĠPorter": 39037, + "Ġtuition": 39038, + "Ġexempl": 39039, + "Ġparen": 39040, + ".lineTo": 39041, + "Ġkidney": 39042, + "Ġça": 39043, + "Ġcui": 39044, + "ï¼Į请": 39045, + "XC": 39046, + "Ġmoż": 39047, + "Ġnominated": 39048, + "lung": 39049, + "ImGui": 39050, + "ĠBuzz": 39051, + "Ġstereo": 39052, + "portal": 39053, + "resas": 39054, + "Ġklass": 39055, + "Ġdrafted": 39056, + "Ġprojectile": 39057, + "/gpl": 39058, + "(parameters": 39059, + "*)Ċ": 39060, + "Ġassisted": 39061, + "ĠNSInteger": 39062, + "sitemap": 39063, + ":nth": 39064, + ".Views": 39065, + ".ArgumentParser": 39066, + "Ġmeer": 39067, + "zier": 39068, + "ĠDig": 39069, + "Ċ": 39136, + "Ġplag": 39137, + "pine": 39138, + "Ġblanket": 39139, + "Ġ:-": 39743, + "Ġlcd": 39744, + "---------------": 39745, + "(\"\"": 39746, + "Ġtactical": 39747, + "ĠRonald": 39748, + "extr": 39749, + "ĠFest": 39750, + "Ġfuer": 39751, + "-navigation": 39752, + "Ġkb": 39753, + "ghost": 39754, + "ĠhandleChange": 39755, + "_cls": 39756, + "()!=": 39757, + "Comparator": 39758, + ".vm": 39759, + "ĠCox": 39760, + "_review": 39761, + "/@": 39762, + "_cookie": 39763, + "Ġrecognised": 39764, + "ldap": 39765, + "Threads": 39766, + "ĠSexual": 39767, + "ĠBearing": 39768, + "(SQL": 39769, + "Ġxr": 39770, + "Ġthigh": 39771, + "URLConnection": 39772, + "ĠSUV": 39773, + "ĠmContext": 39774, + "Ġincidence": 39775, + "ĠEste": 39776, + ".sup": 39777, + "_te": 39778, + "(EXIT": 39779, + "CMD": 39780, + "/\">": 39781, + "Almost": 39782, + "ĠUne": 39783, + "Ġanderen": 39784, + "ĠSingleton": 39785, + "Ġbore": 39786, + "Think": 39787, + "Ġnarc": 39788, + "]initWith": 39789, + "_shop": 39790, + "(strategy": 39791, + "!',": 39792, + "herits": 39793, + "ĠDesk": 39794, + "_machine": 39795, + ".netty": 39796, + "ında": 39797, + "=<": 39798, + "ĠQR": 39799, + "ĠSidebar": 39800, + ".splitContainer": 39801, + "ĠonSuccess": 39802, + "Ġmonkey": 39803, + "Enjoy": 39804, + "(nodes": 39805, + "pectrum": 39806, + "Ġ(*(": 39807, + "ĉUINT": 39808, + ",height": 39809, + "ĠNetworks": 39810, + ".tail": 39811, + ".linspace": 39812, + "Ġ\"...": 39813, + "Listen": 39814, + "Æ¡": 39815, + ".Channel": 39816, + "-defined": 39817, + "Repeat": 39818, + "adjust": 39819, + "ERM": 39820, + "_application": 39821, + ".assertNotNull": 39822, + "-stream": 39823, + "Ġrabbit": 39824, + "Ġpositioning": 39825, + "Ġwoke": 39826, + "Ġfing": 39827, + "Ġmultiplayer": 39828, + "Ġregistering": 39829, + "until": 39830, + "Ã¥n": 39831, + "(::": 39832, + "ussions": 39833, + "Ġpotato": 39834, + "ĠEquals": 39835, + ".Sup": 39836, + "/apache": 39837, + "Ġ(=": 39838, + ".\")": 39839, + ".ptr": 39840, + "ĠSpeech": 39841, + ".clip": 39842, + "ĠGabriel": 39843, + "Ġmusician": 39844, + "/issues": 39845, + ".shop": 39846, + "ĠHier": 39847, + "_RET": 39848, + "_bucket": 39849, + "ãĥ¡": 39850, + "avs": 39851, + "Ġroz": 39852, + "flower": 39853, + "WriteBarrier": 39854, + "ĠMilan": 39855, + "Ġlegislature": 39856, + "ĠDoll": 39857, + "Ġproving": 39858, + ".concatenate": 39859, + "âķIJ": 39860, + "Ġgchar": 39861, + "cdnjs": 39862, + "bles": 39863, + "ĠListing": 39864, + "ло": 39865, + ".xrLabel": 39866, + "ĠSak": 39867, + "justice": 39868, + "ĠValentine": 39869, + "unless": 39870, + "Ġpiger": 39871, + "(run": 39872, + "Ġtestified": 39873, + "ANA": 39874, + "ĠRemoves": 39875, + "))));Ċ": 39876, + "recated": 39877, + "ĠRuntimeMethod": 39878, + "Ġconqu": 39879, + "ãĤ¢": 39880, + "Ġtissues": 39881, + "ailer": 39882, + "été": 39883, + "-Star": 39884, + "Ġflames": 39885, + ".setIcon": 39886, + "Ġsupern": 39887, + "Ġvagina": 39888, + "-variable": 39889, + "Ġwellness": 39890, + "CUR": 39891, + "Ġbelle": 39892, + ".getRequest": 39893, + "Ġpoco": 39894, + "benh": 39895, + "agens": 39896, + "Ġspill": 39897, + "ĠJur": 39898, + "Ġdispatcher": 39899, + "ного": 39900, + "emonic": 39901, + "(dirname": 39902, + "ĠÐĶ": 39903, + "Ġpasse": 39904, + "Ġganz": 39905, + "ricing": 39906, + "EU": 39907, + "Ġmujeres": 39908, + "essen": 39909, + ".attribute": 39910, + "jj": 39911, + "ĉĉĠĊ": 39912, + "[^": 39913, + "Ġstrtolower": 39914, + "lexer": 39915, + "ectar": 39916, + "hotel": 39917, + ".square": 39918, + "Ġrall": 39919, + "Ġlowered": 39920, + "handled": 39921, + "Market": 39922, + "ĠUses": 39923, + "ivas": 39924, + ".Business": 39925, + "ãģĹãģ¦": 39926, + "DIV": 39927, + "Ġwasted": 39928, + "Ġavoir": 39929, + "êm": 39930, + "_ACCOUNT": 39931, + ".et": 39932, + "ĉSDL": 39933, + "kap": 39934, + "Ġfox": 39935, + "uppet": 39936, + "{},Ċ": 39937, + "\",'": 39938, + "Favorite": 39939, + "PEND": 39940, + "ĠAES": 39941, + "}),": 39942, + "Ġdeduction": 39943, + "ĠpolÃŃt": 39944, + "ĠcomponentWill": 39945, + "ĠTelerik": 39946, + "_SELF": 39947, + "Ġmuse": 39948, + "Craft": 39949, + "Ġdens": 39950, + "ि": 39951, + "(tp": 39952, + "Ġtasty": 39953, + "Ġbalances": 39954, + "Ġdedication": 39955, + "ĠWallace": 39956, + "Ġunlaw": 39957, + "\\\">\\": 39958, + "Ġmum": 39959, + "-update": 39960, + "emente": 39961, + "Ġsoda": 39962, + "Republic": 39963, + "asmine": 39964, + "éric": 39965, + "(Status": 39966, + "ĠJsonConvert": 39967, + "ĠDisk": 39968, + ".Redirect": 39969, + "Ġfilming": 39970, + "/mol": 39971, + "Ro": 39972, + "Ġville": 39973, + "Ġtrabaj": 39974, + "Ġsynthesis": 39975, + "rega": 39976, + "Ġrl": 39977, + "Scheduler": 39978, + "ISHED": 39979, + "currentUser": 39980, + "(errors": 39981, + "'h": 39982, + "_bot": 39983, + "ximo": 39984, + "ĠUSART": 39985, + "_super": 39986, + "_DECREF": 39987, + "ной": 39988, + "_ROW": 39989, + "Ġpromotes": 39990, + "ĠTA": 39991, + "Ġhoras": 39992, + "ĠRepresents": 39993, + "Ġnameof": 39994, + "ĠExc": 39995, + "ĠGarage": 39996, + "Ġseine": 39997, + ",#": 39998, + "Ġherb": 39999, + "/resources": 40000, + "Ġpleaded": 40001, + ".radioButton": 40002, + "Ġæĺ": 40003, + "Ops": 40004, + "ĠNest": 40005, + "cstring": 40006, + "ĠDefence": 40007, + "Ġrefere": 40008, + "_leaf": 40009, + "Ġrevelation": 40010, + "ë§": 40011, + ".executeUpdate": 40012, + "_WORLD": 40013, + "Ġexpans": 40014, + "(\"\\\"": 40015, + "jab": 40016, + "Ġdoubts": 40017, + "ĠGeometry": 40018, + "Ġintroduces": 40019, + "Ġsenators": 40020, + "Ġcanal": 40021, + ".helper": 40022, + "ĠBiology": 40023, + "_SENS": 40024, + ".previous": 40025, + "-touch": 40026, + "abit": 40027, + "Ġimpacted": 40028, + "Ġbrackets": 40029, + ".direct": 40030, + "accum": 40031, + "Ġtestosterone": 40032, + "ĉaction": 40033, + "ĠChance": 40034, + "Ġpeaks": 40035, + "CppCodeGenWriteBarrier": 40036, + "Ġunbelie": 40037, + "_press": 40038, + ".Rel": 40039, + "angled": 40040, + "/templates": 40041, + "-->čĊ": 40042, + "lime": 40043, + "Ġsufficiently": 40044, + "_nt": 40045, + "Expand": 40046, + ".isfile": 40047, + "ĠisEmpty": 40048, + "Ġqt": 40049, + "Ġmulher": 40050, + "acob": 40051, + "George": 40052, + "常": 40053, + "Ġassim": 40054, + "aso": 40055, + "Ġcomprised": 40056, + "OV": 40057, + "(CONFIG": 40058, + "ĉwriter": 40059, + "Ġdesp": 40060, + "Ġtenure": 40061, + "(cr": 40062, + ".pool": 40063, + "ĠBrend": 40064, + "Ġcensor": 40065, + "(timeout": 40066, + "Ġplea": 40067, + ".Wrap": 40068, + "Ġtightly": 40069, + "ĠWere": 40070, + "ĠIgnore": 40071, + "abei": 40072, + "Ġbridges": 40073, + "Ġcondemn": 40074, + "Ġsimplicity": 40075, + "Ġroutinely": 40076, + "Ġblacks": 40077, + "jb": 40078, + "ĠPit": 40079, + "Utf": 40080, + "Ġ/Ċ": 40081, + "reload": 40082, + "ĠsetObject": 40083, + "/global": 40084, + "Ġfatty": 40085, + "Ġsocks": 40086, + "Couldn": 40087, + "Ġerotisk": 40088, + "æĿ¡": 40089, + "ĠPressure": 40090, + "ĠMaz": 40091, + "npos": 40092, + "tolower": 40093, + "ĠEQ": 40094, + "uteur": 40095, + "ĠMoment": 40096, + "Ġeta": 40097, + "{{--": 40098, + "Ġgraphs": 40099, + "ĠGuar": 40100, + "rine": 40101, + "(--": 40102, + "ĠHttpStatus": 40103, + "(student": 40104, + "*np": 40105, + "Ġrailway": 40106, + "Ġasynchronous": 40107, + "_vm": 40108, + "'],'": 40109, + ",text": 40110, + "merchant": 40111, + "(Guid": 40112, + "ĠGra": 40113, + "ixer": 40114, + "fetchAll": 40115, + ".addListener": 40116, + "flip": 40117, + "*$": 40118, + ">(),": 40119, + "Ġsunlight": 40120, + "assigned": 40121, + "Ġabc": 40122, + "ĠCOLUMN": 40123, + "ĠðŁĻĤĊĊ": 40124, + ")...": 40125, + "Ġensemble": 40126, + "Ġnewline": 40127, + "_SINGLE": 40128, + "iedad": 40129, + "Ġdarker": 40130, + "ormap": 40131, + "Ġlion": 40132, + "plits": 40133, + "Ġillustration": 40134, + "ĠIEEE": 40135, + "Ġvista": 40136, + "ousands": 40137, + "*******": 40138, + "ĠTommy": 40139, + "Ġhue": 40140, + "Sel": 40141, + "Ġaura": 40142, + "ĠTherapy": 40143, + "Ġanimator": 40144, + ".constraints": 40145, + "Ġvague": 40146, + "(\"\")": 40147, + "Ġvillain": 40148, + "Ġblessing": 40149, + "ĠstringBuilder": 40150, + "ĠMisc": 40151, + "ĠDIR": 40152, + "fax": 40153, + "-node": 40154, + "ĠWalking": 40155, + "ĠAU": 40156, + "sess": 40157, + "Ġgrill": 40158, + "VERTISE": 40159, + "ĠFoods": 40160, + "Ġtournaments": 40161, + "Ãĵ": 40162, + "ĠMarsh": 40163, + "Ġwonders": 40164, + "Longitude": 40165, + ".CommandText": 40166, + "=input": 40167, + "_encoder": 40168, + "pageSize": 40169, + "ĠgetState": 40170, + ">>Ċ": 40171, + ".grey": 40172, + "pod": 40173, + "Ġreadings": 40174, + "Ġreconsider": 40175, + "Startup": 40176, + "Ġexcer": 40177, + ".balance": 40178, + "_cycle": 40179, + "_Time": 40180, + "LOCAL": 40181, + "ĠEFI": 40182, + "ĠReyn": 40183, + ".setForeground": 40184, + "byn": 40185, + "Ġdisconnected": 40186, + "ACTIVE": 40187, + "Ġembedding": 40188, + "ickers": 40189, + "Ġsurroundings": 40190, + "*c": 40191, + "Ġgarant": 40192, + "Ġbf": 40193, + "Ġwipe": 40194, + "Ġä¸ĭ": 40195, + "_TRA": 40196, + "adox": 40197, + "çķ": 40198, + "Ġsucks": 40199, + "ĠSongs": 40200, + "ĠAssociates": 40201, + "ĠBald": 40202, + "ĠBrett": 40203, + "venile": 40204, + "Ġvt": 40205, + "Ġinade": 40206, + "Ġresigned": 40207, + "ĠGlenn": 40208, + ".pattern": 40209, + ".DataBind": 40210, + "Ñĥм": 40211, + "LayoutInflater": 40212, + "chet": 40213, + "ĠTestament": 40214, + ".ms": 40215, + "Ġpav": 40216, + "ĠReactDOM": 40217, + "urdy": 40218, + "ADATA": 40219, + "Mu": 40220, + "/actions": 40221, + "ĠJs": 40222, + "_extract": 40223, + "ĠBring": 40224, + ":id": 40225, + "strt": 40226, + "ivation": 40227, + "Ġoutright": 40228, + "azu": 40229, + "loyment": 40230, + "иÑı": 40231, + "aldo": 40232, + "ĠPublisher": 40233, + "Education": 40234, + "Palette": 40235, + "_drv": 40236, + "Ġ($(": 40237, + "ĠAnda": 40238, + "Ġremedy": 40239, + "Ġinconsistent": 40240, + "tection": 40241, + "Ġregulators": 40242, + "Ġshortest": 40243, + "(pair": 40244, + "ĠInstallation": 40245, + "Ġdefendants": 40246, + "Ġ();": 40247, + "-large": 40248, + "Mel": 40249, + "Ġthreaten": 40250, + "нÑı": 40251, + "Ġfetish": 40252, + "otine": 40253, + "_dic": 40254, + "Ġ<$": 40255, + "Ġstagger": 40256, + "spi": 40257, + "$response": 40258, + "Serv": 40259, + "-born": 40260, + "jos": 40261, + "ĉimg": 40262, + "ĉWHERE": 40263, + "_lt": 40264, + "å½ĵ": 40265, + ".cost": 40266, + "ĠTue": 40267, + ".labels": 40268, + "ĠLV": 40269, + "wcsstore": 40270, + "ĠJesse": 40271, + "ห": 40272, + "Trade": 40273, + "Ġpredecessor": 40274, + "ëĤ": 40275, + "finally": 40276, + "_general": 40277, + "oggler": 40278, + "_REGION": 40279, + "nement": 40280, + "Ġblogger": 40281, + "ĠHarbor": 40282, + "ĠDataset": 40283, + "[w": 40284, + "Ġattendees": 40285, + ".ico": 40286, + "maximum": 40287, + ".Unlock": 40288, + "_SYNC": 40289, + "ágina": 40290, + "Ġdowns": 40291, + "ĠWii": 40292, + "])/": 40293, + "Ġkicking": 40294, + "unication": 40295, + "ĠDAC": 40296, + "ĠIDS": 40297, + "ĠRental": 40298, + "ĠcurrentTime": 40299, + "Ġvaccines": 40300, + "ĠDevil": 40301, + "Ġnors": 40302, + "_mouse": 40303, + "urrection": 40304, + "(no": 40305, + "Ġ>čĊ": 40306, + "Ġaggression": 40307, + "Ġbreeding": 40308, + ".symbol": 40309, + "iman": 40310, + "AbsolutePath": 40311, + "ĠWHO": 40312, + "_flush": 40313, + "-root": 40314, + "arna": 40315, + "&M": 40316, + "Ġfathers": 40317, + "ĠRocket": 40318, + "iveau": 40319, + "Ġwander": 40320, + "Ġcompos": 40321, + "ĠWarrior": 40322, + "ĠSeat": 40323, + "ĠClinic": 40324, + "_invoice": 40325, + "(dispatch": 40326, + "Producto": 40327, + "aturing": 40328, + "ossier": 40329, + "ĠMAY": 40330, + "Ġdagger": 40331, + "Ġsanitized": 40332, + "ĠRFC": 40333, + "Ġproph": 40334, + "Ġurine": 40335, + "Ġgrind": 40336, + "ĠExpanded": 40337, + "descripcion": 40338, + "-fw": 40339, + "ĠKerry": 40340, + "=name": 40341, + "Ġchk": 40342, + "Ġnationally": 40343, + "Ġthee": 40344, + "Inc": 40345, + "Ġ?>>": 40346, + ".RadioButton": 40347, + ".HttpServletResponse": 40348, + "/Y": 40349, + "ĉfield": 40350, + "Ġhomme": 40351, + "yper": 40352, + "Physical": 40353, + "=v": 40354, + "Ġdriv": 40355, + "ĠErrors": 40356, + "ĠcÄĥ": 40357, + "Death": 40358, + "ĠWINDOW": 40359, + "Ġpoet": 40360, + "ĠSharp": 40361, + "ĠImmutable": 40362, + "ĉcreate": 40363, + "Ġgeht": 40364, + "ĠReform": 40365, + "aiser": 40366, + "ĠInitialization": 40367, + "Ġimmunity": 40368, + ".compose": 40369, + "Ġlatency": 40370, + "ĠLebanon": 40371, + "ĠParad": 40372, + "Ġfuels": 40373, + "ĠExhib": 40374, + "coh": 40375, + "%\">Ċ": 40376, + "ĠCLI": 40377, + ")initWith": 40378, + "-Za": 40379, + "_CLEAR": 40380, + "regn": 40381, + "Ġfinances": 40382, + ".standard": 40383, + "_CATEGORY": 40384, + ".library": 40385, + "Ġtravelers": 40386, + "_wp": 40387, + "ĠEvaluation": 40388, + "starting": 40389, + "Ġ)),Ċ": 40390, + "episode": 40391, + "ĠVariant": 40392, + "Ġdaemon": 40393, + "ĠJulia": 40394, + "ĠNR": 40395, + "Ġdoubles": 40396, + "'": 40626, + "Ġqueryset": 40627, + ";}čĊ": 40628, + "ĠPopulation": 40629, + "utedString": 40630, + "resident": 40631, + "_FONT": 40632, + "ĠRespond": 40633, + "Ġobscure": 40634, + "Ġobservable": 40635, + "ĠContributors": 40636, + "kon": 40637, + "ĠMusk": 40638, + "exao": 40639, + "ĠTub": 40640, + "BootApplication": 40641, + "SOR": 40642, + ".Horizontal": 40643, + ".findBy": 40644, + ".power": 40645, + "Ġpositively": 40646, + "venience": 40647, + "ĠJong": 40648, + "Ġwhistle": 40649, + "ĠзнаÑĩ": 40650, + "Ġlending": 40651, + "Ġdestructive": 40652, + "ĠonDelete": 40653, + "authorization": 40654, + "();?>": 40655, + "_original": 40656, + "science": 40657, + "atra": 40658, + "?,?,": 40659, + "ĠAsc": 40660, + "Ġconvincing": 40661, + "$a": 40662, + "orgen": 40663, + "_Date": 40664, + "ĠProvide": 40665, + "Ġlonely": 40666, + ")'Ċ": 40667, + "exchange": 40668, + ";?>Ċ": 40669, + ".fast": 40670, + "Samples": 40671, + "London": 40672, + "'])čĊ": 40673, + "ĠIonic": 40674, + "Ġpesso": 40675, + "ĠKnights": 40676, + "ĠRaf": 40677, + "_attrs": 40678, + "Ġrepeal": 40679, + ">Main": 40680, + "ĠOrdered": 40681, + "_New": 40682, + "=\"\">\";Ċ": 40763, + "ĠSERVER": 40764, + "ĠHEADER": 40765, + "_velocity": 40766, + "ĠInvoke": 40767, + ".timestamps": 40768, + "Ġsulf": 40769, + "IQUE": 40770, + "Ġinhabitants": 40771, + "phins": 40772, + "azzo": 40773, + "Ġmono": 40774, + "Legend": 40775, + "Ġnonce": 40776, + "IFE": 40777, + ";\";Ċ": 40778, + "-create": 40779, + "\"\",Ċ": 40780, + "permit": 40781, + "ĠImmigration": 40782, + "Ġpathname": 40783, + "ffective": 40784, + "âĻĢâĻĢ": 40785, + "Ġexams": 40786, + "-event": 40787, + "ĠTill": 40788, + "[mid": 40789, + "FIX": 40790, + ";color": 40791, + "(Order": 40792, + "_traits": 40793, + "ĠorderBy": 40794, + "Ġsunt": 40795, + "ĠNicholas": 40796, + "ز": 40797, + "Ġsunny": 40798, + "iners": 40799, + "Ġaccessibility": 40800, + "ĠHB": 40801, + ".comp": 40802, + "ĉop": 40803, + "Ġminorities": 40804, + "etheus": 40805, + "Ġcollaborative": 40806, + "prit": 40807, + "HIR": 40808, + "Ġwraps": 40809, + "ĉdraw": 40810, + "god": 40811, + "ĠIX": 40812, + ".apps": 40813, + "ĠNM": 40814, + "Ġirrelevant": 40815, + "ĠTigers": 40816, + "Ġdiag": 40817, + "GV": 40818, + "ĠAccessories": 40819, + "kont": 40820, + "Ġsimplify": 40821, + "ĠFavorite": 40822, + "_tools": 40823, + "([]);Ċ": 40824, + "Ġtowers": 40825, + "Bes": 40826, + "Ġhunter": 40827, + "Ġsalon": 40828, + "(buff": 40829, + "ĉdebug": 40830, + "Ġmalware": 40831, + "Moving": 40832, + "-options": 40833, + ")+'": 40834, + "ĠLOVE": 40835, + "_SOCKET": 40836, + "_fin": 40837, + "ĠDelaware": 40838, + "Ġsheriff": 40839, + "-invalid": 40840, + "ĠFULL": 40841, + "Ġпод": 40842, + "elas": 40843, + "\"strings": 40844, + "ĠRepresentatives": 40845, + "surface": 40846, + "resolved": 40847, + "htdocs": 40848, + ")):čĊ": 40849, + "Ġpressures": 40850, + "Ġnorms": 40851, + "Ġpla": 40852, + "Ġsurname": 40853, + "Ġpostal": 40854, + "ĠDepart": 40855, + "Ġslaughter": 40856, + "orida": 40857, + "Ġhebben": 40858, + "Ġdesar": 40859, + "compact": 40860, + "_LANG": 40861, + "åIJĪ": 40862, + "opoly": 40863, + "_rad": 40864, + "ĠSTDMETHOD": 40865, + "Lazy": 40866, + "ĠĠĠĉ": 40867, + "...,": 40868, + "(web": 40869, + "ĠPont": 40870, + "Ġetwas": 40871, + "Ġupward": 40872, + "_hat": 40873, + "Ġ],ĊĊ": 40874, + "ĠbaseUrl": 40875, + "Ġworrying": 40876, + "-addon": 40877, + "(getClass": 40878, + "SPI": 40879, + "Ġcapturing": 40880, + ")},Ċ": 40881, + "Effects": 40882, + "Ġcompetent": 40883, + "Ġfoul": 40884, + "Ġsubscribing": 40885, + "ĠOBJECT": 40886, + "IXEL": 40887, + "bucks": 40888, + "(edge": 40889, + "(pass": 40890, + "ĠPeterson": 40891, + "Ġboobs": 40892, + "ĠDelay": 40893, + "_square": 40894, + "elim": 40895, + "oters": 40896, + "_PC": 40897, + "%E": 40898, + "onclick": 40899, + "ĠSVG": 40900, + "Ġtopped": 40901, + "Ġfist": 40902, + "smart": 40903, + "ĠRalph": 40904, + "(owner": 40905, + "jours": 40906, + "Ġbronze": 40907, + "ĠArgumentException": 40908, + "(original": 40909, + "_SCALE": 40910, + "_cp": 40911, + "Ġrecommends": 40912, + ".setStyle": 40913, + "Sure": 40914, + "LAND": 40915, + "Ġrepeating": 40916, + "Matt": 40917, + ".Visibility": 40918, + "Ġenterprises": 40919, + ".Setup": 40920, + "(scene": 40921, + "ĠReactive": 40922, + "urge": 40923, + "bw": 40924, + ".Put": 40925, + "persist": 40926, + ".cookie": 40927, + "ĠAudi": 40928, + "`s": 40929, + "supplier": 40930, + "(Form": 40931, + "¡": 40932, + "_so": 40933, + "ĮĢ": 40934, + "ĠLegion": 40935, + "tte": 40936, + "Nd": 40937, + "Loss": 40938, + "(attrs": 40939, + ".scatter": 40940, + "Ġgroom": 40941, + "Ġglimpse": 40942, + "Ġnails": 40943, + "Ġcumulative": 40944, + "Ġfazer": 40945, + "_services": 40946, + ".Num": 40947, + "ibilit": 40948, + "_resolution": 40949, + "ĠTx": 40950, + "uminium": 40951, + "opa": 40952, + ".schedule": 40953, + "smtp": 40954, + "à¸ķ": 40955, + "urry": 40956, + "ük": 40957, + "goog": 40958, + "_signature": 40959, + ".into": 40960, + "ĠSteps": 40961, + "Ġhomeowners": 40962, + "ĠNSURL": 40963, + "ĠPAC": 40964, + "ĠĠĠĠĠĠĠĠĠĠĠĠĊĊ": 40965, + ">')Ċ": 40966, + "enh": 40967, + "Ġincap": 40968, + "$MESS": 40969, + "Ġmoins": 40970, + "ĠFi": 40971, + "Ġoffseason": 40972, + "pressions": 40973, + ">.Ċ": 41045, + "ĠGrass": 41046, + "ĠGoal": 41047, + "_pdf": 41048, + "Handlers": 41049, + "Ġstacks": 41050, + ".getFullYear": 41051, + "=[];Ċ": 41052, + "车": 41053, + ",V": 41054, + "(split": 41055, + "Ñĥнк": 41056, + "Ġbakeca": 41057, + "Ġ~/.": 41058, + "pez": 41059, + "tails": 41060, + "ĠGlen": 41061, + "ĠsetImage": 41062, + "ĠComic": 41063, + "BLOCK": 41064, + "ĉThis": 41065, + "oader": 41066, + "Ġcapitalist": 41067, + "_STEP": 41068, + "(Boolean": 41069, + "ĠCorrect": 41070, + "rina": 41071, + "Ġconcaten": 41072, + "å®ŀ": 41073, + "():ĊĊ": 41074, + "Ġunanim": 41075, + "lli": 41076, + "alars": 41077, + "-ne": 41078, + "Ġdivor": 41079, + "ĠKickstarter": 41080, + "]._": 41081, + "*'+": 41722, + "åĿĢ": 41723, + "acency": 41724, + "(URL": 41725, + "_half": 41726, + "=l": 41727, + "ĠlistView": 41728, + "(section": 41729, + ".toArray": 41730, + "+/": 41731, + "ĠRodriguez": 41732, + "istream": 41733, + "Ġeligibility": 41734, + "::-": 41735, + ".newInstance": 41736, + "PB": 41737, + "ĠAssets": 41738, + "ĠComposite": 41739, + "ĠLabs": 41740, + "ĠHamas": 41741, + "++);Ċ": 41742, + "Ġblk": 41743, + "ĠNeo": 41744, + "Luc": 41745, + "@login": 41746, + "Ġunaware": 41747, + ".met": 41748, + "_RELEASE": 41749, + "(ST": 41750, + "AMIL": 41751, + "rike": 41752, + "Ġ(){Ċ": 41753, + "(sprintf": 41754, + "ĠAccounts": 41755, + "ĠVIEW": 41756, + "ĠAj": 41757, + "ãĤ°": 41758, + "Ġwhisk": 41759, + "Ġidi": 41760, + "Ġrode": 41761, + "Ġihn": 41762, + "ĠElementary": 41763, + "Qty": 41764, + "Ġintriguing": 41765, + "Ġå¤": 41766, + "Jobs": 41767, + "ĉoffset": 41768, + "ĠAhmed": 41769, + "ĠTaliban": 41770, + "Ġèİ·åıĸ": 41771, + "Ġinjected": 41772, + ".Authentication": 41773, + "_linear": 41774, + ".Decimal": 41775, + "Ġapples": 41776, + "Ġshareholders": 41777, + "Ġbaked": 41778, + ".diff": 41779, + "ĠEddie": 41780, + "okers": 41781, + "Ġconfronted": 41782, + "voices": 41783, + "Ġtus": 41784, + "ĠSpin": 41785, + "NODE": 41786, + "_Un": 41787, + "CTX": 41788, + "/google": 41789, + "Temperature": 41790, + "Ġ'').": 41791, + "Ġmagnificent": 41792, + "ĠstartIndex": 41793, + "sembles": 41794, + "Anyone": 41795, + "zk": 41796, + "ehen": 41797, + "ĠDame": 41798, + ".strict": 41799, + "Ġreplaces": 41800, + "Ġlineback": 41801, + "Ġpushes": 41802, + "Ġcheek": 41803, + "ĠShi": 41804, + "_BYTES": 41805, + "REA": 41806, + "ản": 41807, + "_CONNECTION": 41808, + "Gateway": 41809, + "ĠTravis": 41810, + "ĠAX": 41811, + "ĠBasically": 41812, + "ĠUpgrade": 41813, + "àª": 41814, + "themes": 41815, + "ermo": 41816, + "kor": 41817, + "Female": 41818, + "_attach": 41819, + "ĠìĤ¬ìļ©": 41820, + "Ġpoz": 41821, + "==============Ċ": 41822, + "(symbol": 41823, + "ĠSector": 41824, + "__)ĊĊ": 41825, + "_padding": 41826, + "ï¼ļ\"": 41827, + "Ġfabs": 41828, + "Ġranged": 41829, + "setName": 41830, + "Ġperror": 41831, + "âĹ": 41832, + "ĠFileReader": 41833, + "Ġfulfilled": 41834, + "_Current": 41835, + "Ġdominate": 41836, + "Ġsmugg": 41837, + "PostMapping": 41838, + "_force": 41839, + "Ġbloc": 41840, + "ĠGiant": 41841, + "(video": 41842, + "ĠCU": 41843, + "SystemService": 41844, + "Ġelf": 41845, + "Ġkontakt": 41846, + "ëª": 41847, + "kees": 41848, + "gtk": 41849, + "ĠparamInt": 41850, + "Ġmarkup": 41851, + "uales": 41852, + "Ġaccounted": 41853, + "Ġgangbang": 41854, + "RYPT": 41855, + "ĠWrong": 41856, + "Ġcredited": 41857, + "ĠMESSAGE": 41858, + "Ġflaws": 41859, + "Ġbbw": 41860, + "Ġmetabolic": 41861, + "ĠOEM": 41862, + "/event": 41863, + "(Collectors": 41864, + "monton": 41865, + "appear": 41866, + "Ġopted": 41867, + "Ġcheat": 41868, + "Ġdav": 41869, + "ĠProceed": 41870, + "Ġê¸": 41871, + "anked": 41872, + "из": 41873, + "ansk": 41874, + "ĠHang": 41875, + "ĠCler": 41876, + "Ġdisgu": 41877, + "Ġcmap": 41878, + ".cljs": 41879, + "Ġaument": 41880, + "lez": 41881, + "ĠJoined": 41882, + "_received": 41883, + "Ġaerial": 41884, + "otel": 41885, + "Ġgreet": 41886, + "\"s": 41887, + "ĠGenesis": 41888, + "ĠCalif": 41889, + "panion": 41890, + "Ġtailored": 41891, + "mapping": 41892, + "andExpect": 41893, + ".track": 41894, + "atomy": 41895, + "ĠOw": 41896, + "ullah": 41897, + ".Yes": 41898, + "ĠSimpleName": 41899, + "dbh": 41900, + "'en": 41901, + "Ġnonsense": 41902, + "Ġphilosophical": 41903, + "(getContext": 41904, + "Ġisso": 41905, + "ĠACE": 41906, + "startDate": 41907, + "ĠbÄĻd": 41908, + "ĠAUTHOR": 41909, + "ĠGlobe": 41910, + "Ġinsects": 41911, + "_Al": 41912, + "ushing": 41913, + "è®°": 41914, + "/Home": 41915, + "ĠLocalDate": 41916, + "needed": 41917, + "hesive": 41918, + "Ġillusion": 41919, + "äºĮ": 41920, + "Ġtrat": 41921, + "xo": 41922, + "/detail": 41923, + "_MATCH": 41924, + "Ġbroadband": 41925, + "Ġwal": 41926, + "ĠIllegalStateException": 41927, + "IRECTION": 41928, + "Ġnortheast": 41929, + "esium": 41930, + "ĠCliente": 41931, + "ulance": 41932, + "nty": 41933, + "Ġtecn": 41934, + "Devices": 41935, + "Ġgrains": 41936, + "ĠOg": 41937, + "ĠSEL": 41938, + "udiant": 41939, + "Ġ++;Ċ": 41940, + "Ġexplanations": 41941, + "occo": 41942, + "Ġdiets": 41943, + "Ġcohort": 41944, + "(controller": 41945, + ".Iterator": 41946, + "-rich": 41947, + "rocess": 41948, + "GD": 41949, + "Ġcarbohydr": 41950, + "Ġfried": 41951, + "ĠEmployment": 41952, + "ìŀ¥": 41953, + "ĠLeonard": 41954, + "_${": 41955, + "quares": 41956, + "Ġcompanions": 41957, + "Ġparis": 41958, + "Ġstimulation": 41959, + "ĠZoo": 41960, + "Ġrelevance": 41961, + "ĠColour": 41962, + "Ġspear": 41963, + "otional": 41964, + "ĠLite": 41965, + "ĠKosten": 41966, + "Ġó": 41967, + "_attachment": 41968, + "orphic": 41969, + "Ġdamit": 41970, + "Ġdlg": 41971, + "Ġthrive": 41972, + "CHANGE": 41973, + "ĠApparently": 41974, + "Ġatual": 41975, + "Ġrooted": 41976, + "(images": 41977, + "awi": 41978, + "ariat": 41979, + "Ġcherry": 41980, + "STATIC": 41981, + "mnt": 41982, + "ĠUserId": 41983, + "illet": 41984, + "ĠHispanic": 41985, + "Ġnak": 41986, + "Ġcentro": 41987, + "Ġdims": 41988, + "_initialize": 41989, + "ık": 41990, + "ĠCenters": 41991, + "REN": 41992, + "Ġevolutionary": 41993, + "ĠTopics": 41994, + "_damage": 41995, + "emer": 41996, + "Ġrund": 41997, + "Ġpunished": 41998, + "Ġcubic": 41999, + "fair": 42000, + "[];ĊĊ": 42001, + "Ġinstantiate": 42002, + "Ġoversee": 42003, + "-delete": 42004, + "unteer": 42005, + "startTime": 42006, + "ĠPipeline": 42007, + "_GAME": 42008, + "ĠCir": 42009, + "ĉNull": 42010, + ".Formatting": 42011, + "ucumber": 42012, + "ĠRide": 42013, + "Ġzoo": 42014, + "Ġchecker": 42015, + "åIJĮ": 42016, + "=C": 42017, + "Ġgrit": 42018, + "\");//": 42019, + "_xy": 42020, + "ĠDeclaration": 42021, + "Ġcallable": 42022, + "Foo": 42023, + "ĠListItem": 42024, + "Ġinaccur": 42025, + "mlin": 42026, + "ĉData": 42027, + "Ġevolving": 42028, + "awan": 42029, + "Ġcafe": 42030, + "folk": 42031, + "_IDX": 42032, + "ĠAnything": 42033, + "ĠPalestine": 42034, + "ĠGridView": 42035, + "Ġcolony": 42036, + "ĠGermans": 42037, + "(+": 42038, + ".pid": 42039, + ".jsx": 42040, + "ĠSuperior": 42041, + "Christian": 42042, + "ĠLect": 42043, + "ĉGame": 42044, + "Ġinstrumental": 42045, + "Animations": 42046, + "дал": 42047, + "ĠMoses": 42048, + "ĉĉčĊĉĉčĊ": 42049, + "zs": 42050, + "kte": 42051, + "ä¸ļ": 42052, + "_DIST": 42053, + "bitmap": 42054, + "dB": 42055, + "Ġpersistence": 42056, + "ÑĢоÑģ": 42057, + "$l": 42058, + "Bron": 42059, + "Ġ{|": 42060, + "_chart": 42061, + "ĠConsum": 42062, + "Ġhemp": 42063, + "Ġ\"))Ċ": 42064, + "Ġattackers": 42065, + "Ġknowledgeable": 42066, + "Ġcet": 42067, + "Ġviruses": 42068, + "'I": 42069, + "Ġpitcher": 42070, + "Ġsweeping": 42071, + "=list": 42072, + "aptops": 42073, + ".depth": 42074, + "Ġinstructed": 42075, + "ĠRus": 42076, + "benhavn": 42077, + "Ġин": 42078, + "Sports": 42079, + "Ġonset": 42080, + "æĿĥ": 42081, + ".RED": 42082, + "_si": 42083, + "ĠPST": 42084, + ".onChange": 42085, + ">tag": 42086, + "ĠRoh": 42087, + "_character": 42088, + "ĠLaws": 42089, + "ĠBachelor": 42090, + "_swap": 42091, + ".reactivex": 42092, + "Ġrewarding": 42093, + "Medium": 42094, + "-[": 42095, + "ĠRecently": 42096, + "Joint": 42097, + "partition": 42098, + "ĠMinutes": 42099, + "Ġindo": 42100, + "Ġabsorbed": 42101, + "ĠGN": 42102, + "_IND": 42103, + "Ġsaber": 42104, + "Spawn": 42105, + "outputs": 42106, + "ĠJeffrey": 42107, + "Ġmedieval": 42108, + "hed": 42109, + "Guide": 42110, + "Ġpsycho": 42111, + "Ġglam": 42112, + "Elim": 42113, + "ädchen": 42114, + "_plain": 42115, + "ĠSau": 42116, + "-four": 42117, + "Ġanalyzing": 42118, + "QUERY": 42119, + "Ġtomato": 42120, + "_buttons": 42121, + "VEN": 42122, + ".setStatus": 42123, + ".Url": 42124, + "+ĊĊ": 42125, + "Ġcomplaining": 42126, + "degree": 42127, + "confirmed": 42128, + "Ġsubt": 42129, + "parsed": 42130, + "Ġtorque": 42131, + "Ġtroubled": 42132, + "ĠTARGET": 42133, + "Ġtrademarks": 42134, + "ĠCoordinate": 42135, + "ĠViv": 42136, + "Ġ//}ĊĊ": 42137, + "Ġaprès": 42138, + ".getPosition": 42139, + "(KeyCode": 42140, + "ĠSilva": 42141, + "Ġmeteor": 42142, + "Ġendorsement": 42143, + "Overview": 42144, + "ĠPoss": 42145, + ".Inject": 42146, + "Ġevenly": 42147, + "Ġvisualization": 42148, + "Ġwchar": 42149, + "ĠHDMI": 42150, + "Ġfunct": 42151, + "ickname": 42152, + "','','": 42153, + "Ġforwards": 42154, + "ManagedObject": 42155, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 42156, + "ĉserver": 42157, + "ĠOutlook": 42158, + "ĠChronicle": 42159, + "Ġdubbed": 42160, + "Ġdok": 42161, + "ĠWear": 42162, + ".AL": 42163, + "paren": 42164, + ".Interface": 42165, + "Interfaces": 42166, + ".cod": 42167, + "Ġdib": 42168, + ".Globalization": 42169, + "ĠAcademic": 42170, + "Ġassms": 42171, + "Autom": 42172, + "Ġlw": 42173, + "ĠNW": 42174, + "Ġ&&čĊ": 42175, + "Ġproblema": 42176, + "ĠManufacturing": 42177, + "limits": 42178, + "-mobile": 42179, + "Ġfilme": 42180, + "/map": 42181, + "Ġdoit": 42182, + "ĠInk": 42183, + "Ġsued": 42184, + ".arr": 42185, + "Ġundermin": 42186, + "ĠProc": 42187, + "crollView": 42188, + "__$": 42189, + "Ġsidewalk": 42190, + "(that": 42191, + "ื": 42192, + "[q": 42193, + "grammar": 42194, + "Ġtë": 42195, + "quito": 42196, + "Ġspiral": 42197, + "extended": 42198, + "Ġfocal": 42199, + "Ġdigging": 42200, + "pas": 42201, + "ĠTall": 42202, + ".proxy": 42203, + "itures": 42204, + "TRACT": 42205, + "ĠRealm": 42206, + "Ġfeder": 42207, + "Ġoriented": 42208, + "ĠAlternative": 42209, + "Ġowe": 42210, + "Ġsourced": 42211, + "inker": 42212, + ".det": 42213, + "Sep": 42214, + "ĠQui": 42215, + "ĠPalmer": 42216, + "(_,": 42217, + "samples": 42218, + "oyer": 42219, + "ullan": 42220, + "quez": 42221, + "Edges": 42222, + "Ġshout": 42223, + "ĠAchie": 42224, + "Ġhaar": 42225, + "_Construct": 42226, + "Ġpremature": 42227, + "Ġrevert": 42228, + "').Ċ": 42229, + "Ġschn": 42230, + "filtered": 42231, + "nullptr": 42232, + "Saved": 42233, + "itecture": 42234, + "CLA": 42235, + "Ġvl": 42236, + "stell": 42237, + "ĉMe": 42238, + "ĠLip": 42239, + "national": 42240, + "Ġwholly": 42241, + "Ġsprings": 42242, + ".Timer": 42243, + "ĉsrc": 42244, + "elsen": 42245, + "åħ¶": 42246, + "Ġcommunicating": 42247, + "ĠQuiz": 42248, + "Ġteng": 42249, + "Ġgez": 42250, + "ĠOutside": 42251, + ".Sign": 42252, + "(cs": 42253, + "Ġdisputes": 42254, + "ĠWeiss": 42255, + "annes": 42256, + ">No": 42257, + "ĠBach": 42258, + ".removeAll": 42259, + "refer": 42260, + "/dashboard": 42261, + "ĠAjax": 42262, + "IndexChanged": 42263, + "ĠWeak": 42264, + "'\"Ċ": 42265, + "Ġsights": 42266, + "accessToken": 42267, + "ĠJoi": 42268, + "(domain": 42269, + "ĉcv": 42270, + "Ġcontinuation": 42271, + "Ġplum": 42272, + "adir": 42273, + ".setMessage": 42274, + "Ġï¼Į": 42275, + "Ġswallow": 42276, + "ĠLamp": 42277, + "Ġqw": 42278, + "Ġuu": 42279, + "Coin": 42280, + "ubic": 42281, + "ĠDeals": 42282, + "race": 42283, + "Ġdictator": 42284, + "Ġmeme": 42285, + "turned": 42286, + "ĠJulie": 42287, + ".gridColumn": 42288, + "Ġpuppy": 42289, + "Ġpam": 42290, + "Ġ){čĊ": 42291, + "Ġinviting": 42292, + "Ġfrench": 42293, + "vim": 42294, + "Ġwrapping": 42295, + "Ġ#-}Ċ": 42296, + "([-": 42297, + "Early": 42298, + "Ġshiny": 42299, + ".faces": 42300, + "Ġrebell": 42301, + "abcdef": 42302, + "ält": 42303, + "Ġestimation": 42304, + "phys": 42305, + "losures": 42306, + "_REL": 42307, + "Ġexclusion": 42308, + "ĠSkype": 42309, + "weise": 42310, + "-stop": 42311, + "nothing": 42312, + "ĠEgg": 42313, + "isors": 42314, + "Richard": 42315, + "Ġcounseling": 42316, + "Ġcommem": 42317, + "ĠQMessageBox": 42318, + "ĠSynd": 42319, + "ĠFrost": 42320, + "ĠCompetition": 42321, + "ĠAwake": 42322, + "Ġted": 42323, + "iciones": 42324, + "ĠDevComponents": 42325, + "VERTISEMENT": 42326, + "otti": 42327, + ".runner": 42328, + "Ġuniquely": 42329, + ".flag": 42330, + "ĉrs": 42331, + "_generic": 42332, + "Ġ```Ċ": 42333, + "ACHINE": 42334, + "Ġmein": 42335, + "(Application": 42336, + "(br": 42337, + "Ġratios": 42338, + ":,": 42339, + "ĠXCTest": 42340, + "ustainable": 42341, + "-www": 42342, + "itles": 42343, + "_TEMP": 42344, + "Ġsyst": 42345, + "umericUpDown": 42346, + "ĉassertTrue": 42347, + "Ġwf": 42348, + ".peek": 42349, + "ĠBulg": 42350, + "Ġterrifying": 42351, + ".MODE": 42352, + "ĠGW": 42353, + "ár": 42354, + "Ġfic": 42355, + "Ġcommitments": 42356, + "-tech": 42357, + "ĠLiquid": 42358, + "opez": 42359, + "zheimer": 42360, + "aña": 42361, + "-media": 42362, + "(animated": 42363, + "_goal": 42364, + "Ġgum": 42365, + "ystone": 42366, + ".SET": 42367, + "ĠWend": 42368, + "setCellValue": 42369, + "Ġmsgs": 42370, + "cash": 42371, + "ALLOC": 42372, + "/aws": 42373, + "Ġmicrowave": 42374, + ".Pointer": 42375, + "ĉConsole": 42376, + "_sorted": 42377, + "ĠFilip": 42378, + "Prod": 42379, + "Ġ//!<": 42380, + "ingroup": 42381, + "Ġks": 42382, + "_TRI": 42383, + "Ġteaspoon": 42384, + "ĠATT": 42385, + "Ġrecovering": 42386, + "ĠGLOBAL": 42387, + ".Par": 42388, + "Ġ/>;Ċ": 42389, + "Ġmarble": 42390, + "ulators": 42391, + "ĠCycle": 42392, + "Ġherbs": 42393, + "_metric": 42394, + ")!": 42395, + "_CLOCK": 42396, + "_Button": 42397, + "Harry": 42398, + "è¿Ľ": 42399, + "Ġstrains": 42400, + "ĠAppBar": 42401, + "ĠChan": 42402, + "/video": 42403, + "Ġbam": 42404, + ".Progress": 42405, + "$f": 42406, + "lemen": 42407, + "Ġirregular": 42408, + "ĠDuncan": 42409, + "ĠMint": 42410, + "-video": 42411, + "া": 42412, + "ówn": 42413, + "ĠEMPTY": 42414, + "Ġstacked": 42415, + "ĠHA": 42416, + "_cut": 42417, + "Ġwherein": 42418, + "ĠWays": 42419, + "(counter": 42420, + "è¯ķ": 42421, + "FormGroup": 42422, + "Ġblew": 42423, + "courses": 42424, + "Ġproductos": 42425, + "rys": 42426, + "ĠRestr": 42427, + "Ġstyling": 42428, + ">s": 42429, + "Ġpiv": 42430, + "Ġitertools": 42431, + "getRepository": 42432, + "ĠIk": 42433, + "_devices": 42434, + "layui": 42435, + "Ġhalfway": 42436, + "Ġfranç": 42437, + "Ġtuning": 42438, + "OA": 42439, + "_Node": 42440, + "arde": 42441, + "Ġfierce": 42442, + "licted": 42443, + "#čĊ": 42444, + "Ġbreakthrough": 42445, + "ĠErik": 42446, + "Ġbride": 42447, + "Ġ.\"": 42448, + "culus": 42449, + "inside": 42450, + "ĠIndianapolis": 42451, + "ĠEE": 42452, + "Ġyog": 42453, + "urret": 42454, + ".fs": 42455, + ".grad": 42456, + "_cards": 42457, + "_accuracy": 42458, + "_epi": 42459, + "queda": 42460, + "/org": 42461, + "éªĮ": 42462, + "Ġcompte": 42463, + "))[": 42464, + "Outside": 42465, + "Greater": 42466, + "ĠRenderer": 42467, + ".actor": 42468, + "Accounts": 42469, + "Idle": 42470, + "_hours": 42471, + "erner": 42472, + "Joined": 42473, + "Ġmenj": 42474, + "requires": 42475, + "ĠOPER": 42476, + ".removeChild": 42477, + "ĉsp": 42478, + "Ġesse": 42479, + "rift": 42480, + "xFE": 42481, + "ĠShakespeare": 42482, + "____________": 42483, + "Ġbudgets": 42484, + "ModelState": 42485, + "fillable": 42486, + "-component": 42487, + "ocos": 42488, + "ĠBUTTON": 42489, + "/io": 42490, + ",out": 42491, + "sms": 42492, + "Thomas": 42493, + "ĠArmed": 42494, + "resume": 42495, + "Ġrotating": 42496, + "ĠVault": 42497, + "Ġseus": 42498, + ".(*": 42499, + "Ġamino": 42500, + "Ġ[]);ĊĊ": 42501, + "Ġprovoc": 42502, + "nox": 42503, + ".GetEnumerator": 42504, + "=======Ċ": 42505, + "æĸĻ": 42506, + "_scroll": 42507, + "Ġfilmed": 42508, + "ĠSoci": 42509, + "gap": 42510, + "gro": 42511, + "Vote": 42512, + "\"But": 42513, + "_RC": 42514, + "Animal": 42515, + "ÂĢ": 42516, + "ibile": 42517, + "Ġawaken": 42518, + "orest": 42519, + "inja": 42520, + "ĠIvan": 42521, + "(Command": 42522, + "Ġ*****": 42523, + "η": 42524, + "Ġkvinder": 42525, + "/helpers": 42526, + "_cases": 42527, + "tg": 42528, + "ìĦ¸": 42529, + "Registered": 42530, + "ĉpass": 42531, + "_digits": 42532, + "Ġcontour": 42533, + "Ġinfants": 42534, + "Ġjustification": 42535, + "ĠFortunately": 42536, + "Contr": 42537, + "ĠonCreateView": 42538, + "_SAMPLE": 42539, + "ĠallowNull": 42540, + "Ġnud": 42541, + "Ġfetched": 42542, + "_equ": 42543, + "ĠUnable": 42544, + "=\\\"\"": 42545, + ">{Ċ": 42546, + "Ġcommittees": 42547, + "istema": 42548, + "+\".": 42549, + "ÃŃan": 42550, + "mant": 42551, + "Ġsoutheast": 42552, + "ï¼ĮĊ": 42553, + "dialogs": 42554, + "PROJECT": 42555, + "charger": 42556, + "-port": 42557, + "(uuid": 42558, + ".export": 42559, + "Six": 42560, + "ĠRP": 42561, + "Prem": 42562, + "Ġconscience": 42563, + "ĠmarginRight": 42564, + "_distribution": 42565, + "yaml": 42566, + "resizing": 42567, + "Dock": 42568, + "ĠLocations": 42569, + "GY": 42570, + "Seed": 42571, + "BUFFER": 42572, + "ossip": 42573, + "ullen": 42574, + "Things": 42575, + "-self": 42576, + ".poll": 42577, + "PLAYER": 42578, + "Ġå®": 42579, + "GROUP": 42580, + "ĠAway": 42581, + "Ġgospel": 42582, + "xfd": 42583, + "Mary": 42584, + "ĠPortable": 42585, + "TURE": 42586, + "Ġutilis": 42587, + "Ġseit": 42588, + "Ġstrand": 42589, + "Ġtransc": 42590, + "Ġ(^": 42591, + "ĠAlfred": 42592, + ".mem": 42593, + ".circle": 42594, + "Ġ~/": 42595, + "forcing": 42596, + "Ġriot": 42597, + "prox": 42598, + "THON": 42599, + "ización": 42600, + "ĠNI": 42601, + "rost": 42602, + "Ġdispro": 42603, + "_instances": 42604, + "ï¼ĮâĢľ": 42605, + "ographer": 42606, + "endas": 42607, + "ĠIsaac": 42608, + "ĠPine": 42609, + "/dis": 42610, + "ĠcolorWith": 42611, + "iterate": 42612, + "_stride": 42613, + "Ġpunto": 42614, + ".EventArgs": 42615, + "(center": 42616, + "Ġneighboring": 42617, + "ĠPrison": 42618, + "ĠMessenger": 42619, + "Ġepidemic": 42620, + "dao": 42621, + "_complex": 42622, + "Ġgravel": 42623, + "_DIP": 42624, + "ément": 42625, + "ĠAri": 42626, + "_bitmap": 42627, + ".quit": 42628, + "(valid": 42629, + "Ġpend": 42630, + "Ġrespiratory": 42631, + "Ġrebound": 42632, + "DefaultValue": 42633, + "ãĥŃ": 42634, + "Ġcommits": 42635, + ".tests": 42636, + "_fr": 42637, + "itet": 42638, + ".sf": 42639, + "Ġspacecraft": 42640, + "critical": 42641, + "Ġdepressed": 42642, + "ĠAnyObject": 42643, + "Ġunb": 42644, + "Ġdiscern": 42645, + "(mysql": 42646, + "Latin": 42647, + "ĠBog": 42648, + "ĠWildlife": 42649, + "ToFile": 42650, + "ioxid": 42651, + "@RestController": 42652, + "Ġ\"$(": 42653, + "Ġ<<\"": 42654, + "Ġdefects": 42655, + "Ġdatum": 42656, + "hin": 42657, + "Ġrealizar": 42658, + "anyahu": 42659, + "ĠSig": 42660, + "@Data": 42661, + "adaptive": 42662, + "ĠCatherine": 42663, + ".cr": 42664, + "ĠCOOKIE": 42665, + "Ġpictured": 42666, + "ĠFighter": 42667, + "Queryable": 42668, + "ĠAnyway": 42669, + "ĠGLFW": 42670, + "_namespace": 42671, + "_ft": 42672, + "Ġ])": 42673, + "Organization": 42674, + "Ġconstitutes": 42675, + "Ġquand": 42676, + "(chunk": 42677, + "\"/>čĊ": 42678, + "ĠLakes": 42679, + "mainwindow": 42680, + "Carthy": 42681, + "spin": 42682, + "(csv": 42683, + ":red": 42684, + "-commerce": 42685, + "ู": 42686, + "Ġdiscovering": 42687, + "Ġeco": 42688, + "_fac": 42689, + "inceton": 42690, + "ĠGreens": 42691, + "jwt": 42692, + "ص": 42693, + "ĠBroncos": 42694, + "ĠGoods": 42695, + "(GTK": 42696, + "ĠreturnValue": 42697, + "Ġsiempre": 42698, + "Ġneutr": 42699, + "went": 42700, + "ĠNatal": 42701, + "Ġenthusiastic": 42702, + "á»į": 42703, + "FN": 42704, + "/database": 42705, + "Catalog": 42706, + "Ġbrun": 42707, + "ĠKash": 42708, + "_Pl": 42709, + "iscrim": 42710, + ",width": 42711, + "Ġinmates": 42712, + "Assignment": 42713, + "ĠHaven": 42714, + "Ġplayground": 42715, + "exam": 42716, + "@Controller": 42717, + "uliar": 42718, + ".getParent": 42719, + "Ġ\";ĊĊ": 42720, + ":size": 42721, + "issors": 42722, + "Ġfis": 42723, + "Ġalc": 42724, + "ensation": 42725, + "ĠNixon": 42726, + "Ġmighty": 42727, + "-str": 42728, + "_special": 42729, + "_ADC": 42730, + "ĠTwig": 42731, + "umbling": 42732, + "-address": 42733, + "Ġheroin": 42734, + "YTE": 42735, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 42736, + "Friend": 42737, + "Ġave": 42738, + "ĠPNG": 42739, + "ĠKurdish": 42740, + "DataSetChanged": 42741, + "Ġblades": 42742, + "bral": 42743, + "Steam": 42744, + "Ġsigu": 42745, + "IRTUAL": 42746, + "acos": 42747, + "UDP": 42748, + "(database": 42749, + "hec": 42750, + "ĠStrings": 42751, + "_scalar": 42752, + "ĉdesc": 42753, + "ĠTLS": 42754, + ";\"Ċ": 42755, + "ĠCorbyn": 42756, + "SimpleName": 42757, + "uell": 42758, + "ĠEntre": 42759, + "ellites": 42760, + "-place": 42761, + "Ġfrankly": 42762, + "ĠErf": 42763, + "CEL": 42764, + "ĠpaÃŃs": 42765, + "Ġhedge": 42766, + "Ġlatent": 42767, + "ĠIRQ": 42768, + "ĠHerald": 42769, + "ĠPrec": 42770, + "ë³´": 42771, + ".TEXT": 42772, + "Salary": 42773, + "Ġautumn": 42774, + "Ġtravail": 42775, + ".Sum": 42776, + "Ġcared": 42777, + "Mor": 42778, + "Ġintuitive": 42779, + "Ġjournals": 42780, + "_IT": 42781, + "ĠTrou": 42782, + "ä¼ł": 42783, + "HasColumnName": 42784, + "Composite": 42785, + "Ġspice": 42786, + "_disk": 42787, + "_CODES": 42788, + "ĠIntroduced": 42789, + "iona": 42790, + "Ġnuestra": 42791, + "oct": 42792, + "ĠĠĠĠĊĠĠĠĠĊĠĠĠĠĊ": 42793, + "(parameter": 42794, + "Ġstudios": 42795, + "ĠprojectId": 42796, + "Ġbdsm": 42797, + ".SqlClient": 42798, + "imizer": 42799, + "ĠCARD": 42800, + "+t": 42801, + "aan": 42802, + ".sol": 42803, + "_Adjust": 42804, + "Ġrighteous": 42805, + "ĠLogging": 42806, + ".filters": 42807, + "_TAB": 42808, + "ĉsys": 42809, + "rophic": 42810, + "otherapy": 42811, + "ĠBrowse": 42812, + "keyboard": 42813, + "RON": 42814, + "+\\": 42815, + "ropped": 42816, + "Ġextensively": 42817, + "fk": 42818, + "Ġlime": 42819, + "years": 42820, + "Exc": 42821, + "Ġsph": 42822, + "Ġcheating": 42823, + "andro": 42824, + "ÃŃo": 42825, + "Ġprince": 42826, + "oire": 42827, + "ĠDestination": 42828, + "ĠConverts": 42829, + "Ġupstream": 42830, + "oled": 42831, + "Ġservants": 42832, + "Ġsemantic": 42833, + "Ġcrunch": 42834, + "Ġeventual": 42835, + "runner": 42836, + "/error": 42837, + "Spin": 42838, + "Ġsecretly": 42839, + "Ġassemble": 42840, + ".Person": 42841, + "enderror": 42842, + "_<": 42843, + "Ġpendant": 42844, + "Sleep": 42845, + "ĠChemistry": 42846, + "Ġbosses": 42847, + "lk": 42848, + "))),Ċ": 42849, + "Blockly": 42850, + "DEVICE": 42851, + "Ġreflecting": 42852, + "Ġample": 42853, + "Milliseconds": 42854, + "ĠPresidential": 42855, + "Ġusuarios": 42856, + "ĠNZ": 42857, + "ĠSalary": 42858, + "ĠAmanda": 42859, + "_np": 42860, + "jury": 42861, + "Ġkön": 42862, + "Ġtherapist": 42863, + "Ġhomosexual": 42864, + "ĠDrake": 42865, + "-window": 42866, + "ĠLocated": 42867, + ".Driver": 42868, + "ĠVIDEO": 42869, + "Ġmerchants": 42870, + "ĠChest": 42871, + "-lock": 42872, + "/php": 42873, + "Ġmilano": 42874, + "_STYLE": 42875, + "arger": 42876, + "idea": 42877, + "GUID": 42878, + "advanced": 42879, + "meal": 42880, + "OptionsItemSelected": 42881, + "='%": 42882, + "ĠCham": 42883, + ":data": 42884, + "(stat": 42885, + "WillAppear": 42886, + "Ġinformal": 42887, + "aji": 42888, + "Ġreproductive": 42889, + "ĠCAS": 42890, + "ãģ£": 42891, + "FUNC": 42892, + "ĠRuth": 42893, + ")+(": 42894, + "CONST": 42895, + "ĠFans": 42896, + "ĠgroupId": 42897, + "xffffffff": 42898, + "Ġsampler": 42899, + "Ġ}}\">": 42900, + ".the": 42901, + "Ġhollow": 42902, + "WAY": 42903, + "ĠFaculty": 42904, + "AttributedString": 42905, + "ĠLooks": 42906, + "ĠRex": 42907, + "jk": 42908, + "ĠMIL": 42909, + "Ġbard": 42910, + ".Long": 42911, + "Ġlivest": 42912, + "Ġskal": 42913, + "icism": 42914, + "MAIN": 42915, + "Ġmucho": 42916, + "BODY": 42917, + "Ġese": 42918, + "ĉuse": 42919, + "Foot": 42920, + ".SQLException": 42921, + "Ġinheritance": 42922, + "received": 42923, + "Ġputas": 42924, + "edis": 42925, + "alsa": 42926, + "ĠErrorMessage": 42927, + "Booking": 42928, + "Ġtract": 42929, + "acz": 42930, + "ĠCant": 42931, + "_regex": 42932, + "Ġideological": 42933, + "Ġjihad": 42934, + "hos": 42935, + "/sys": 42936, + "colm": 42937, + "(pool": 42938, + "Ġestán": 42939, + "ĠPending": 42940, + "emás": 42941, + "Ġktóry": 42942, + "));ĊĊĊ": 42943, + "transactions": 42944, + "Ġwield": 42945, + "itere": 42946, + "erture": 42947, + "_ss": 42948, + "Ġstretching": 42949, + "Ġprisoner": 42950, + ".ReadAll": 42951, + "Ġbesch": 42952, + "--;čĊ": 42953, + "Ġcrisp": 42954, + "_SCAN": 42955, + "Ġae": 42956, + "Strict": 42957, + "ĠMinneapolis": 42958, + "ĠBoeing": 42959, + "aris": 42960, + "rek": 42961, + "_pipe": 42962, + "Ġpriests": 42963, + "(EIF": 42964, + "ehicles": 42965, + "ĠInteractive": 42966, + "between": 42967, + "ĉNullCheck": 42968, + "ĠBlair": 42969, + "ĠLt": 42970, + "_inline": 42971, + "ethyl": 42972, + "¼": 42973, + "_packages": 42974, + "Ġbarrels": 42975, + "_he": 42976, + "Ġregexp": 42977, + "_pts": 42978, + "_Handler": 42979, + "ingular": 42980, + "ĠNissan": 42981, + "ĠRanch": 42982, + "Ġperch": 42983, + "Unsupported": 42984, + "Smith": 42985, + "ĠLegends": 42986, + "Mi": 42987, + "Ġgf": 42988, + "steder": 42989, + "Ġacquiring": 42990, + "Ġsimulator": 42991, + "(),\"": 42992, + "receive": 42993, + "Ġinplace": 42994, + "ACTION": 42995, + "ĠWebDriver": 42996, + "filesystem": 42997, + "'+Ċ": 43009, + "Ġcredible": 43010, + "amat": 43011, + "playing": 43012, + ".setImageResource": 43013, + "quel": 43014, + "Ġpodr": 43015, + "geom": 43016, + "Ek": 43017, + "ĠQatar": 43018, + "Ġgeld": 43019, + "?',Ċ": 43020, + "Ġcyl": 43021, + "(ax": 43022, + "ĠWI": 43023, + "urally": 43024, + "ĠBrasil": 43025, + "Ġsenza": 43026, + "aley": 43027, + "onen": 43028, + "Ġbah": 43029, + "Ġmolecule": 43030, + "Rad": 43031, + "è¿°": 43032, + "ANCH": 43033, + "-background": 43034, + "-agent": 43035, + "Ġprolifer": 43036, + ":boolean": 43037, + "Ġtide": 43038, + "erializer": 43039, + "_;čĊ": 43040, + "Fee": 43041, + "**)": 43042, + "ergy": 43043, + "ĠHonor": 43044, + ".Logging": 43045, + "iris": 43046, + "Ġundermine": 43047, + "ĠDy": 43048, + "Ġtyr": 43049, + "Ġdeque": 43050, + "Ġdamer": 43051, + "([])Ċ": 43052, + ".layoutControlItem": 43053, + "peated": 43054, + "CAN": 43055, + "ragments": 43056, + "Land": 43057, + ")]);Ċ": 43058, + "ĠSah": 43059, + "ĠDECL": 43060, + "Within": 43061, + "ĠNamespace": 43062, + "another": 43063, + "sembling": 43064, + ".describe": 43065, + "Consum": 43066, + "ĠFear": 43067, + "given": 43068, + "Orange": 43069, + "This": 43093, + "ĠdataIndex": 43094, + "Ġprintable": 43095, + "ĠEyes": 43096, + "_targets": 43097, + "(Py": 43098, + ".over": 43099, + "Ġbru": 43100, + "ampton": 43101, + "Ġplaintiff": 43102, + ");Ċ": 43113, + "invest": 43114, + ".*ĊĊ": 43115, + "Ġtélé": 43116, + "Ġsuperf": 43117, + "Ġcascade": 43118, + "DTD": 43119, + "Ġvivid": 43120, + "Ġsubsidies": 43121, + "ĠHass": 43122, + "Ġcollaps": 43123, + "Ġceramic": 43124, + "{}\".": 43125, + "ĠLeakage": 43126, + "-trash": 43127, + "collapsed": 43128, + "-social": 43129, + "ĠChad": 43130, + "Ġinclined": 43131, + "Ġsto": 43132, + "Ġstoryboard": 43133, + ".payment": 43134, + "stackoverflow": 43135, + "ĠRaiders": 43136, + "Ġ#'": 43137, + "olicies": 43138, + "ìľ¼ë¡ľ": 43139, + "emap": 43140, + "Ġkj": 43141, + "Ġquota": 43142, + "ĠGardens": 43143, + "ë²Ī": 43144, + "ĠAngels": 43145, + "Ġoft": 43146, + "Ġlowercase": 43147, + "ĠiParam": 43148, + "Ġcheapest": 43149, + "unta": 43150, + "_pkt": 43151, + "icators": 43152, + "Ġleurs": 43153, + "Ġdecreases": 43154, + "ĉdefine": 43155, + "PREC": 43156, + "ammers": 43157, + "ĠPreparedStatement": 43158, + "(direction": 43159, + "Ġcrews": 43160, + "arked": 43161, + "ĠMemphis": 43162, + "ĠSell": 43163, + "GTK": 43164, + "Ġmaid": 43165, + ":disable": 43166, + "éĽĨ": 43167, + "ĠPf": 43168, + "Ġalbeit": 43169, + "openh": 43170, + "?>\">Ċ": 43171, + ".getSource": 43172, + "(scale": 43173, + "Du": 43174, + "ĠPIL": 43175, + "_refresh": 43176, + "Ġbets": 43177, + "(car": 43178, + "ĠVon": 43179, + "|--------------------------------------------------------------------------Ċ": 43180, + "ĠGrat": 43181, + "Much": 43182, + "(Dialog": 43183, + ".stopPropagation": 43184, + "Ġtek": 43185, + "Ġexits": 43186, + "'],$": 43187, + "ĠphoneNumber": 43188, + "ucs": 43189, + "ecimal": 43190, + "--------------": 43191, + "inp": 43192, + ".pojo": 43193, + "Ġcorpus": 43194, + "Ġpractitioners": 43195, + ".pic": 43196, + "\"testing": 43197, + "ĠstringBy": 43198, + ".NotNull": 43199, + "Ġrang": 43200, + ".Dynamic": 43201, + "_Render": 43202, + "аÑĤа": 43203, + "Waiting": 43204, + "ĠWik": 43205, + "Ġoverwhelmed": 43206, + "%\">": 43207, + "ĠAE": 43208, + "}}>Ċ": 43209, + "uw": 43210, + "_typ": 43211, + "Ġbuckets": 43212, + "Ġgreeting": 43213, + "Ġlaughter": 43214, + "Ġantagon": 43215, + "uggestion": 43216, + "-email": 43217, + "ĉtop": 43218, + "Ġeros": 43219, + "_tri": 43220, + "Ġissuing": 43221, + "Ġhá": 43222, + "Ġisolate": 43223, + "Overflow": 43224, + ",E": 43225, + "Ġnutritional": 43226, + "ĠAbbott": 43227, + "Ġnf": 43228, + ".touch": 43229, + ".fetchall": 43230, + "_zip": 43231, + "\")}Ċ": 43232, + "Ġamat": 43233, + "ĠCisco": 43234, + "ĠnÃ¥": 43235, + "PLEX": 43236, + "Ġsei": 43237, + "foto": 43238, + ".toJson": 43239, + "å¤ļ": 43240, + "ĠKlein": 43241, + "Ġlibc": 43242, + "Ġminers": 43243, + "å¢": 43244, + "-print": 43245, + "ĠPride": 43246, + "Todos": 43247, + "Ġmasked": 43248, + "ĠsetData": 43249, + "Ġtelefon": 43250, + "Ġunhappy": 43251, + "ĠTables": 43252, + "geb": 43253, + "(debug": 43254, + "_allowed": 43255, + "-access": 43256, + "Ġlogistics": 43257, + "Ġgems": 43258, + "ĠMature": 43259, + "Ġrsp": 43260, + "ĠAlle": 43261, + ".getBytes": 43262, + "\\web": 43263, + "ynchronized": 43264, + "Paragraph": 43265, + "Ġthrottle": 43266, + ".sqlite": 43267, + "consulta": 43268, + "ĠSeah": 43269, + "Ce": 43270, + "Ġsubmar": 43271, + "ERE": 43272, + "Vous": 43273, + "Ġreddit": 43274, + "Ġsqlalchemy": 43275, + "-mile": 43276, + "ocide": 43277, + "Pour": 43278, + "}}\">Ċ": 43279, + "stead": 43280, + "Ġ@(": 43281, + "Ġ[])": 43282, + "ĠAds": 43283, + "Ġoverload": 43284, + "ridden": 43285, + "ĠDesert": 43286, + "ĠWrap": 43287, + "ĠPortuguese": 43288, + "etz": 43289, + "ĉfirst": 43290, + "Ġmilestone": 43291, + "æĹł": 43292, + "ÑĥÑī": 43293, + "(success": 43294, + "\")Ċ": 43463, + "ĠDollar": 43464, + "Ġemoji": 43465, + "Carousel": 43466, + "-player": 43467, + "Ġadjusting": 43468, + "Ġjuga": 43469, + "allenges": 43470, + "gene": 43471, + "(bodyParser": 43472, + "lopedia": 43473, + "ĠBehind": 43474, + "Ġsleeves": 43475, + "Ġdragging": 43476, + "ĠChevrolet": 43477, + "Ġbiz": 43478, + "ivities": 43479, + "ĠFrequency": 43480, + ",char": 43481, + ".WHITE": 43482, + "_preview": 43483, + ")';Ċ": 43484, + "_ax": 43485, + "IONS": 43486, + ".cpu": 43487, + ".inputs": 43488, + "UBE": 43489, + "_feed": 43490, + "ĠSupplement": 43491, + "!).": 43492, + "esus": 43493, + "ĠUDP": 43494, + "Ġmicrophone": 43495, + "Ġconfirms": 43496, + ".isNotEmpty": 43497, + "\":\"\",Ċ": 43498, + "_SCREEN": 43499, + "ĉexpected": 43500, + "+-+-+-+-": 43501, + "ĠHait": 43502, + "fastcall": 43503, + "Ġdepict": 43504, + "vb": 43505, + "_picture": 43506, + "ĉdescription": 43507, + "ĠWife": 43508, + "uci": 43509, + "Ġvicious": 43510, + "ä»ĸ": 43511, + "ueba": 43512, + "ĠsetUser": 43513, + "ãģ¡": 43514, + "Ġdiving": 43515, + "Ġopera": 43516, + "usercontent": 43517, + "arah": 43518, + ")},": 43519, + "yun": 43520, + "velt": 43521, + "Ġuncovered": 43522, + "Ġhips": 43523, + "Ġoscill": 43524, + "Ġasserting": 43525, + "ĠXi": 43526, + ".restore": 43527, + "kea": 43528, + "Ġspelling": 43529, + "Ġderive": 43530, + "abwe": 43531, + "ĠDow": 43532, + ".setType": 43533, + "_vs": 43534, + "Ġcozy": 43535, + ".categories": 43536, + "Org": 43537, + "_mgr": 43538, + "Ġdungeon": 43539, + "collectionView": 43540, + "ĠBlank": 43541, + "acias": 43542, + "ää": 43543, + "_cleanup": 43544, + "_ACTIVITY": 43545, + "Ġtriangles": 43546, + ".MenuItem": 43547, + "Ġiphone": 43548, + "ĠWon": 43549, + "]]ĊĊ": 43550, + "ĠComparison": 43551, + ".Doc": 43552, + "Ġcanonical": 43553, + "ĠSudan": 43554, + "'){": 43555, + "UpInside": 43556, + "builtin": 43557, + "ENCY": 43558, + "xbe": 43559, + "Ġchuck": 43560, + "Ġcontradict": 43561, + "Ġnuestro": 43562, + "Ġarchitectural": 43563, + "ĠFib": 43564, + "Ġcompares": 43565, + "*k": 43566, + "Cfg": 43567, + "çĦ¡": 43568, + "nten": 43569, + "Matches": 43570, + "ĠDOWNLOAD": 43571, + "_HANDLER": 43572, + "management": 43573, + "[S": 43574, + "ENG": 43575, + "ÂĢÂ": 43576, + "fang": 43577, + "Ġslipped": 43578, + "ĠLanka": 43579, + "escaping": 43580, + "Ġtackles": 43581, + "ĠPedro": 43582, + ".Prop": 43583, + ".''": 43584, + ".Generated": 43585, + ".NewGuid": 43586, + "atrigesimal": 43587, + "illon": 43588, + "Ġstatistic": 43589, + "species": 43590, + "holding": 43591, + "Drupal": 43592, + "Ġfundamentally": 43593, + "Ġbondage": 43594, + "Ġresolutions": 43595, + "InlineData": 43596, + "\\Type": 43597, + "estion": 43598, + ".wrap": 43599, + "Ġwarriors": 43600, + "ĠLOCAL": 43601, + "Archive": 43602, + "Ġembraced": 43603, + "á»§": 43604, + ".Ver": 43605, + "ĠAffordable": 43606, + "olesale": 43607, + "ĠApplied": 43608, + "ĠConversion": 43609, + "mega": 43610, + "_cam": 43611, + "Ġceremon": 43612, + "aurus": 43613, + "ĠVolk": 43614, + ".opens": 43615, + "/about": 43616, + "ĠStd": 43617, + "journal": 43618, + "()){čĊ": 43619, + ",\"\\": 43620, + "(Arrays": 43621, + "ĠDense": 43622, + "aseña": 43623, + "änner": 43624, + "/stat": 43625, + "userData": 43626, + "Ġgerman": 43627, + "Ġtz": 43628, + "worthy": 43629, + "FormatException": 43630, + "pherd": 43631, + "Ġsmiles": 43632, + "ĠWhenever": 43633, + "(adapter": 43634, + ".badlogic": 43635, + "Ġbriefing": 43636, + ".GridColumn": 43637, + "-char": 43638, + "dimension": 43639, + "ĠCopper": 43640, + "Ġninth": 43641, + "Ġ'{{": 43642, + "Ġrav": 43643, + "_Table": 43644, + "Ġderivatives": 43645, + "ĠRaise": 43646, + "ĠFut": 43647, + "armor": 43648, + "-padding": 43649, + "Ġremin": 43650, + "ĉstyle": 43651, + "ĠMembership": 43652, + "Ġspreads": 43653, + "Ġgalleries": 43654, + "ĠClarke": 43655, + "Ġconception": 43656, + "minute": 43657, + "Ġabusive": 43658, + "_adj": 43659, + "Ġterrific": 43660, + "Ġovert": 43661, + "ourcing": 43662, + "Ġentrada": 43663, + "levels": 43664, + "Ġcritique": 43665, + "Ġrespects": 43666, + "ĠMMA": 43667, + "iene": 43668, + "Ġencaps": 43669, + "ĠRaymond": 43670, + "Divider": 43671, + "ivable": 43672, + "baz": 43673, + "Ġ@_;Ċ": 43674, + "ĠClaire": 43675, + "Ġurging": 43676, + "CEE": 43677, + "Ġtransformer": 43678, + "discord": 43679, + "ĠJourney": 43680, + "tos": 43681, + "Ġcompetitions": 43682, + "ĠOBJ": 43683, + "ĠBis": 43684, + "Ġrelaxation": 43685, + "idy": 43686, + "_INSTANCE": 43687, + "ĠPref": 43688, + "dados": 43689, + "iciencies": 43690, + "ĠMediaQuery": 43691, + "ĠCube": 43692, + "ĠStrange": 43693, + "gpu": 43694, + "(days": 43695, + "_InitStruct": 43696, + "Ġfingerprint": 43697, + "emat": 43698, + "ĠGecko": 43699, + "Ġrails": 43700, + "ĠLum": 43701, + "straction": 43702, + "igung": 43703, + "(movie": 43704, + "_dictionary": 43705, + "_interrupt": 43706, + "ĠQC": 43707, + "iked": 43708, + "appendChild": 43709, + "recipient": 43710, + "ré": 43711, + "Ve": 43712, + "Ġtowel": 43713, + ".lastIndexOf": 43714, + "Ġplacebo": 43715, + "ĠWie": 43716, + ".esp": 43717, + "(Debug": 43718, + "operative": 43719, + "Ġdeceased": 43720, + "&id": 43721, + "ĉmutex": 43722, + "elic": 43723, + "Ġbapt": 43724, + "ĉčĊčĊ": 43725, + "Ġfarther": 43726, + "Half": 43727, + ".disable": 43728, + ".menuStrip": 43729, + "leccion": 43730, + "ĠresultCode": 43731, + "Ġcans": 43732, + "-election": 43733, + "female": 43734, + "_FIX": 43735, + "ausible": 43736, + "ĠPOWER": 43737, + "Ġreconstruction": 43738, + "Ġscans": 43739, + ".XtraBars": 43740, + "âĢĺs": 43741, + "Removed": 43742, + "Ġparagraphs": 43743, + "_margin": 43744, + "Ġlymph": 43745, + "Ġbos": 43746, + "lington": 43747, + "ĠBaptist": 43748, + "Ġadvertisements": 43749, + "ĠManage": 43750, + "/yyyy": 43751, + "IOUS": 43752, + "ENCES": 43753, + "ĠFiction": 43754, + "ĉmenu": 43755, + "ĠFileOutputStream": 43756, + "ovan": 43757, + "ĠFeng": 43758, + "Ġskipping": 43759, + "getClass": 43760, + "anni": 43761, + "Ġrebounds": 43762, + "Ġpublicity": 43763, + "Ġingres": 43764, + "usement": 43765, + "Ġthoughtful": 43766, + ".Chart": 43767, + "Ġhatte": 43768, + "passport": 43769, + "Ġhooked": 43770, + "ĠLens": 43771, + "Ġflagship": 43772, + "Ġstip": 43773, + "ĠGEN": 43774, + "Ġclues": 43775, + "ipv": 43776, + "ĠRise": 43777, + "ĠGew": 43778, + "tablename": 43779, + "Ġforemost": 43780, + "_validate": 43781, + "_analysis": 43782, + "olla": 43783, + "Ġqualifications": 43784, + "Ġdistributions": 43785, + "ĠFlower": 43786, + "Ġtense": 43787, + "Ġthankful": 43788, + "Ġclutch": 43789, + "Ġunified": 43790, + "roads": 43791, + "Ġsiti": 43792, + "Ġstall": 43793, + "_PRIORITY": 43794, + "cstdlib": 43795, + "_USERNAME": 43796, + ".bytes": 43797, + "?page": 43798, + "ermalink": 43799, + "ĠVeget": 43800, + "/vnd": 43801, + "-author": 43802, + ".NONE": 43803, + "ĠConcurrent": 43804, + "ĠCry": 43805, + "Ġstarters": 43806, + "ĠInteraction": 43807, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 43808, + "ĠLEVEL": 43809, + "Ell": 43810, + "ĠcomboBox": 43811, + "ĠTheresa": 43812, + "tek": 43813, + "_Handle": 43814, + "Ġaby": 43815, + ".gdx": 43816, + ",end": 43817, + "(Local": 43818, + "Ol": 43819, + "knife": 43820, + "arial": 43821, + "ĠHoff": 43822, + "Ġprostituerade": 43823, + "Doctor": 43824, + "Instances": 43825, + ".SetValue": 43826, + "ĉfrom": 43827, + "Ġluxurious": 43828, + "Indent": 43829, + "Allocator": 43830, + "_DRAW": 43831, + "(\",\",": 43832, + "ĠFrances": 43833, + "ĠgroupBox": 43834, + "(schema": 43835, + "Printf": 43836, + "ORIES": 43837, + "-gradient": 43838, + "Ġreput": 43839, + "arin": 43840, + "_DONE": 43841, + "incre": 43842, + "ignty": 43843, + "Ġexert": 43844, + "Ġ-.": 43845, + "/App": 43846, + "-through": 43847, + "Ġdeclining": 43848, + "Ġdessert": 43849, + "Ġincumb": 43850, + "Ġdesignation": 43851, + ".PORT": 43852, + ",strong": 43853, + "Ġsandbox": 43854, + "Ġwines": 43855, + "ĠPav": 43856, + "$str": 43857, + "askell": 43858, + "Ġhö": 43859, + "ĠPY": 43860, + "GetInstance": 43861, + "TextInput": 43862, + "gameObject": 43863, + "/events": 43864, + "createdAt": 43865, + "ĠlocalVar": 43866, + "ĠWHITE": 43867, + "pered": 43868, + "ilege": 43869, + "efficient": 43870, + ",color": 43871, + "cate": 43872, + "ĠCafe": 43873, + "Ġsimilarities": 43874, + "Ġpumps": 43875, + "ĠHungary": 43876, + ".Username": 43877, + "Ġskate": 43878, + "Ġtouchdowns": 43879, + "Ġaccelerate": 43880, + "ĠHelen": 43881, + "OMEM": 43882, + "ĠKun": 43883, + "_vol": 43884, + "ĠfindAll": 43885, + "ĠMenschen": 43886, + "ahead": 43887, + ");\"": 43888, + "kommen": 43889, + "Ġpossessed": 43890, + ".argmax": 43891, + ".transition": 43892, + "ARP": 43893, + "OLUME": 43894, + "(script": 43895, + "ĠÐĺ": 43896, + "ĠFinding": 43897, + "onces": 43898, + "Io": 43899, + "Bold": 43900, + "Ġrenewal": 43901, + "_DIALOG": 43902, + "Ġdisreg": 43903, + "INTERN": 43904, + "Ġtoute": 43905, + "Ġelectr": 43906, + "ĠGross": 43907, + "ĉtrue": 43908, + ".Fields": 43909, + "ĠWIDTH": 43910, + "ĠDent": 43911, + "ĠÃģ": 43912, + "NSNotification": 43913, + "Ġaos": 43914, + "Ġmelee": 43915, + ".Validation": 43916, + "ĠDEC": 43917, + "-dependent": 43918, + "Ġsuic": 43919, + "Traits": 43920, + "$message": 43921, + "ĠDear": 43922, + "ĉFILE": 43923, + "languages": 43924, + ".Prot": 43925, + ".addr": 43926, + "-generation": 43927, + "ICON": 43928, + "Ġtransplant": 43929, + "-description": 43930, + "Ġchasing": 43931, + "Ġchees": 43932, + "Ġ}*/Ċ": 43933, + "Trad": 43934, + "queries": 43935, + "/widgets": 43936, + "subpackage": 43937, + "Ġespec": 43938, + "Ġcracked": 43939, + "Ġcompetitor": 43940, + "Purchase": 43941, + "-team": 43942, + "olecular": 43943, + "orThunk": 43944, + "&P": 43945, + "Ġrelent": 43946, + "/#{": 43947, + "ĠproductId": 43948, + "Ġè¾": 43949, + "ĠLav": 43950, + "ĠAlter": 43951, + ".Mode": 43952, + "ADIO": 43953, + "grp": 43954, + "æ·»åĬł": 43955, + "Quit": 43956, + "Ġdepths": 43957, + "-category": 43958, + "ĠDATABASE": 43959, + "SPELL": 43960, + "ĠFalcon": 43961, + "ĠQStringList": 43962, + "Ġ''.": 43963, + "ĠInstitution": 43964, + "damage": 43965, + "azor": 43966, + "belongsTo": 43967, + "verages": 43968, + "ĠNONE": 43969, + "ippets": 43970, + ",\\Ċ": 43971, + "Ġfootprint": 43972, + "_archive": 43973, + "nak": 43974, + ".getField": 43975, + "ĠReflection": 43976, + "Ġ']": 43977, + "ĠHBO": 43978, + "_discount": 43979, + "Ġincest": 43980, + "ĠDodge": 43981, + "ĠWade": 43982, + ".NO": 43983, + "\"encoding": 43984, + "ĠBlockchain": 43985, + "Ġlawsuits": 43986, + "ĠMaint": 43987, + "chten": 43988, + "Ġétait": 43989, + "Ġktóre": 43990, + "_ctl": 43991, + "(timer": 43992, + "Battle": 43993, + "izo": 43994, + "ayed": 43995, + "IOR": 43996, + "ĠGlasgow": 43997, + "Ġsynth": 43998, + "_logs": 43999, + ".pose": 44000, + "_AdjustorThunk": 44001, + "((&": 44002, + "Ġunsure": 44003, + "ystate": 44004, + "íķĺëĬĶ": 44005, + "OULD": 44006, + ".ng": 44007, + "Ġdefaultdict": 44008, + "workspace": 44009, + "Ġselective": 44010, + "PickerController": 44011, + "YNAMIC": 44012, + ".methods": 44013, + "Ġpathways": 44014, + "ĠFew": 44015, + "KG": 44016, + "CRYPT": 44017, + "following": 44018, + "ĠDLC": 44019, + "ĠSara": 44020, + "Ġpreset": 44021, + "estructor": 44022, + "ĠKurt": 44023, + "Ġairplane": 44024, + "Ġomp": 44025, + "ĠParents": 44026, + "ĠMartinez": 44027, + ".complete": 44028, + "Ġbroadly": 44029, + "Ġscare": 44030, + "ĠMé": 44031, + "Ġelimination": 44032, + "Ġpoured": 44033, + "/sw": 44034, + "Ġcomun": 44035, + "Ġmasc": 44036, + "ĠOrganic": 44037, + "ĠStringUtils": 44038, + "ilateral": 44039, + "Ġreluctant": 44040, + "-age": 44041, + "Ġnz": 44042, + ".\"\\": 44043, + "Ġpastor": 44044, + "alez": 44045, + "Ġefect": 44046, + "prov": 44047, + "/init": 44048, + "Ġpenn": 44049, + "unds": 44050, + "Ġssize": 44051, + "ĠProj": 44052, + "basename": 44053, + "Ġshells": 44054, + "ĠNeck": 44055, + "ĠEnforcement": 44056, + "vided": 44057, + "stown": 44058, + "Sphere": 44059, + "$r": 44060, + "ussen": 44061, + "afil": 44062, + "ĠTelegram": 44063, + "Ġanalytical": 44064, + "нÑĭе": 44065, + "usually": 44066, + "xn": 44067, + "Ġhistorian": 44068, + "ĠGregory": 44069, + "olph": 44070, + "ĠUna": 44071, + "Ġcontributes": 44072, + "%-": 44073, + "antiago": 44074, + "ÑĢед": 44075, + ".region": 44076, + "Ġabrupt": 44077, + "ĠUnsupportedOperationException": 44078, + "ĠTASK": 44079, + "_finish": 44080, + "Ġnotorious": 44081, + "ĠVs": 44082, + "ĠMQ": 44083, + "Ġsunset": 44084, + "Ġunacceptable": 44085, + "arcer": 44086, + "Ġillumin": 44087, + "ĠOrb": 44088, + "Ġbh": 44089, + "Este": 44090, + "_dispatch": 44091, + "Ġripped": 44092, + "Ġtoujours": 44093, + "ĠParcel": 44094, + "_ll": 44095, + ".userName": 44096, + ".classes": 44097, + "SOURCE": 44098, + "(Number": 44099, + "елÑı": 44100, + "Ġheadphones": 44101, + "(side": 44102, + "constitution": 44103, + "annah": 44104, + "čĊĠĠĠĠĠĠĠĠčĊ": 44105, + "Ġcliff": 44106, + "-ref": 44107, + "Ġmostrar": 44108, + "ĠPowell": 44109, + "+y": 44110, + "ĠBG": 44111, + "_fragment": 44112, + ".Port": 44113, + "Ġrealizing": 44114, + "paramref": 44115, + "Ġhometown": 44116, + "@Table": 44117, + "+\"--}}Ċ": 44296, + "French": 44297, + "EntityManager": 44298, + "ĠPlain": 44299, + "////////////////////////////////////////////////////////////////////": 44300, + "³": 44301, + "(RE": 44302, + "capt": 44303, + "Ġorganisms": 44304, + "Ġjets": 44305, + "olocation": 44306, + "ĠAppRoutingModule": 44307, + "Ġglorious": 44308, + "æľį": 44309, + "Ġdiscarded": 44310, + "ĉĉĉĉĠĠĠĠĠ": 44311, + "ĠArnold": 44312, + "lug": 44313, + "Ġparl": 44314, + "Ġhormones": 44315, + "Ġmah": 44316, + "ĠSonic": 44317, + "Ġorganizers": 44318, + "_PLATFORM": 44319, + ".inv": 44320, + "Ġchord": 44321, + "ventional": 44322, + "ĉof": 44323, + "Episode": 44324, + ".Enum": 44325, + "unkt": 44326, + "ĠDh": 44327, + "ĠJared": 44328, + "ĠNak": 44329, + "Ġintends": 44330, + "Endian": 44331, + "Ġaustralia": 44332, + "_cv": 44333, + "(resolve": 44334, + "Ġclinics": 44335, + "liked": 44336, + "ASHINGTON": 44337, + "inha": 44338, + "'*": 44339, + "ĠNP": 44340, + "_beh": 44341, + "Ġhf": 44342, + "Ġwür": 44343, + "categoria": 44344, + "$form": 44345, + "Ġsubway": 44346, + "ĠisActive": 44347, + "popular": 44348, + "Cour": 44349, + "Ġcooldown": 44350, + "Ġainsi": 44351, + "ĠGLuint": 44352, + "ereal": 44353, + "ĠarrayOf": 44354, + "Ġhatch": 44355, + "==========": 44356, + "resses": 44357, + "_PP": 44358, + ".^": 44359, + "_decay": 44360, + "ĠBless": 44361, + "metrics": 44362, + "ĠCOPYING": 44363, + "ĠDumpster": 44364, + "ĠJosé": 44365, + "ĠDesigns": 44366, + "<": 44369, + "Ġ\"}Ċ": 44370, + "timezone": 44371, + "Ġeer": 44372, + "maxcdn": 44373, + "ĠESC": 44374, + "igaret": 44375, + "_connected": 44376, + "_reverse": 44377, + "Ġquestionable": 44378, + "ĠUSC": 44379, + "Ġtutti": 44380, + "Ġdropout": 44381, + "ĠActivities": 44382, + "ĠWinds": 44383, + "')));Ċ": 44384, + "Ġcongest": 44385, + "ģı": 44386, + "Ġprolonged": 44387, + "è¿Ļ": 44388, + "ĠCrossAxisAlignment": 44389, + "LEEP": 44390, + "ĠVALID": 44391, + "ĠGaz": 44392, + "Ġdependence": 44393, + "ĠPrix": 44394, + ".CompilerServices": 44395, + "jump": 44396, + "Ġstrat": 44397, + "circ": 44398, + "ĠCUSTOM": 44399, + "xaa": 44400, + "Ġbmp": 44401, + "Ġbureau": 44402, + "Ġwaren": 44403, + "NX": 44404, + "(Window": 44405, + "ĠChristie": 44406, + "_FE": 44407, + "Ġtn": 44408, + "ĠOmega": 44409, + "communications": 44410, + "HomePage": 44411, + "completion": 44412, + "Ġsupplying": 44413, + "YPES": 44414, + "ável": 44415, + "åζ": 44416, + "(click": 44417, + "\\Contracts": 44418, + "/questions": 44419, + "Ġez": 44420, + "AMS": 44421, + ".mesh": 44422, + "Ġ'\\Ċ": 44473, + "Robot": 44474, + "JsonObject": 44475, + "ĠDF": 44476, + "ĠProcessor": 44477, + "_should": 44478, + ".protobuf": 44479, + "-users": 44480, + "Ġembry": 44481, + "FONT": 44482, + "Ġstartups": 44483, + "ĠDataSource": 44484, + ")#": 44485, + "uros": 44486, + "_Color": 44487, + "Ġstandalone": 44488, + "}[": 44489, + "jd": 44490, + "Ġforgive": 44491, + "Ġngx": 44492, + "ĠGenerally": 44493, + "Ġconfigurable": 44494, + "/order": 44495, + "Ġvas": 44496, + "')\";Ċ": 44497, + "ĠRR": 44498, + "ĠTroy": 44499, + "Ġcompromised": 44500, + "ĠSwan": 44501, + "intendent": 44502, + "Central": 44503, + "_keeper": 44504, + "Ġarquivo": 44505, + "ĠReadOnly": 44506, + "_curve": 44507, + "kv": 44508, + "entin": 44509, + "è±": 44510, + "ĠEy": 44511, + ".imread": 44512, + "ĠPam": 44513, + "iffe": 44514, + "ativity": 44515, + "xbc": 44516, + "Ġgrim": 44517, + "-filled": 44518, + "namese": 44519, + "']:": 44520, + "Ġaur": 44521, + "ĠGibson": 44522, + ".MouseEvent": 44523, + "Ġlado": 44524, + "avadoc": 44525, + "Ġfamil": 44526, + "ĠModer": 44527, + "fps": 44528, + "ãĢĢãĢĢ": 44529, + "-example": 44530, + "ĠAlzheimer": 44531, + "ĠUtf": 44532, + "_arguments": 44533, + "Conclusion": 44534, + "textContent": 44535, + "remaining": 44536, + "Ġinterrupts": 44537, + "ĠBackup": 44538, + "ĠMong": 44539, + "Ġreceptors": 44540, + "histor": 44541, + ".coroutines": 44542, + "Ġshouted": 44543, + "Alarm": 44544, + "Ġcombust": 44545, + "Ġgrote": 44546, + "ultural": 44547, + "(ids": 44548, + "--------------------------------------------------------------------------------": 44549, + "iplinary": 44550, + "Opts": 44551, + "ĠYale": 44552, + "localStorage": 44553, + "Ġequival": 44554, + "ĠFleet": 44555, + "\\b": 44556, + "*pi": 44557, + "ĠQLabel": 44558, + "æ¡": 44559, + "Ġvx": 44560, + "ĠACL": 44561, + "Ġsucesso": 44562, + "Ġperc": 44563, + "ĠNotre": 44564, + "Ġanarch": 44565, + "Ring": 44566, + "spb": 44567, + "Ġstrpos": 44568, + "stores": 44569, + "ĠMaple": 44570, + "(MainActivity": 44571, + "(\"\"))": 44572, + "ĠviewHolder": 44573, + "Quad": 44574, + "Ġigual": 44575, + "orsche": 44576, + ".margin": 44577, + "Ġindie": 44578, + "Ġfranc": 44579, + "ĠFormBuilder": 44580, + "ĠParticip": 44581, + ".flash": 44582, + "Ġstorms": 44583, + "Ult": 44584, + "Ġfen": 44585, + "[new": 44586, + "Ever": 44587, + "=\"Ċ": 44588, + "Ġlocalized": 44589, + "_follow": 44590, + "Ġnave": 44591, + "Ġdominance": 44592, + "(tile": 44593, + "Journal": 44594, + "ĠVC": 44595, + "Ġpenetration": 44596, + "ï¼ķ": 44597, + "Ġcompartment": 44598, + "Ġbids": 44599, + "Formatted": 44600, + "******/ĊĊ": 44601, + "(city": 44602, + "âĢĶit": 44603, + "[C": 44604, + "ĠuseCallback": 44605, + "aub": 44606, + ")?.": 44607, + "ĠVAR": 44608, + "ĠSebastian": 44609, + "ĠMoss": 44610, + "Ġabundant": 44611, + "Greg": 44612, + "ÑĤа": 44613, + "_ci": 44614, + "Ġbibli": 44615, + "CRM": 44616, + "ĠAttempt": 44617, + "isme": 44618, + "dash": 44619, + "ãĢİ": 44620, + "_mu": 44621, + ".FormattingEnabled": 44622, + "Indeed": 44623, + "-direct": 44624, + "Ġsucking": 44625, + "Ġpne": 44626, + "ocabulary": 44627, + "ĠPackers": 44628, + ".Navigation": 44629, + "Ġpied": 44630, + "cribing": 44631, + "ĠStuart": 44632, + ".ToDouble": 44633, + "ĠSecondary": 44634, + "Saving": 44635, + "ĠDut": 44636, + "ĠMadd": 44637, + "Magic": 44638, + ",H": 44639, + ".documentElement": 44640, + "ĠBST": 44641, + "Ġdiffers": 44642, + "Ġmoreover": 44643, + "_nd": 44644, + "SEARCH": 44645, + "пÑĢав": 44646, + "æ´": 44647, + "toMatch": 44648, + "Ġdecreasing": 44649, + "-member": 44650, + "ampus": 44651, + "(boost": 44652, + "Daily": 44653, + "DataGridView": 44654, + "ĠHttpContext": 44655, + "Ġhipp": 44656, + "_workers": 44657, + "-language": 44658, + "éĵ": 44659, + "Ġconsisted": 44660, + "athing": 44661, + "ĠMercury": 44662, + "$content": 44663, + "Ġpracticed": 44664, + "ĠModules": 44665, + "_DAY": 44666, + "Ġweaknesses": 44667, + "ĠLodge": 44668, + "Ġnar": 44669, + "ĠMate": 44670, + "Ġjp": 44671, + "ĠHttpHeaders": 44672, + "Ġsmo": 44673, + "ĠTOKEN": 44674, + "])(": 44675, + "Ġaqui": 44676, + "swagen": 44677, + "Ġsrv": 44678, + "ĉans": 44679, + "Around": 44680, + "ĠManuel": 44681, + "Ġfictional": 44682, + "ĠIMG": 44683, + "Ġ.'": 44684, + "ĠBerry": 44685, + "Ġwallpaper": 44686, + "sexual": 44687, + "iero": 44688, + "ĠçļĦ": 44689, + "ìĨĮ": 44690, + "BackingField": 44691, + "ĠAdrian": 44692, + "BASEPATH": 44693, + "Ġrepeats": 44694, + "Ġblues": 44695, + "Ġunpredict": 44696, + "_coll": 44697, + "stacle": 44698, + "ĠTumblr": 44699, + "ĠElf": 44700, + "Ġassurance": 44701, + "Ġcensus": 44702, + "ĠIMPORT": 44703, + "ENDER": 44704, + "anos": 44705, + "Ġ=(": 44706, + "ĠEllis": 44707, + "\"ĊĊĊĊ": 44708, + ".win": 44709, + "ĠAbove": 44710, + "alon": 44711, + "_tick": 44712, + "Ġrepresentations": 44713, + "Ġæķ": 44714, + "wid": 44715, + "ĠArms": 44716, + "Lista": 44717, + "_failure": 44718, + "_cm": 44719, + ".FlatAppearance": 44720, + "Ġthrone": 44721, + "Patch": 44722, + "ĠVoy": 44723, + "engl": 44724, + "Ġnegotiating": 44725, + ">`": 44726, + "Ġshoots": 44727, + "ĠFPS": 44728, + ".Year": 44729, + "ĠKiss": 44730, + "ención": 44731, + "reeting": 44732, + "FromFile": 44733, + "Ġresignation": 44734, + "Ø·": 44735, + "Ġtwins": 44736, + "ượ": 44737, + "Ġgebru": 44738, + ".getContent": 44739, + ".Tree": 44740, + "ĠEmployees": 44741, + "ĠFIFA": 44742, + "Ġcertainty": 44743, + "(Cl": 44744, + "Ġtotals": 44745, + "editable": 44746, + "à¥Ģ": 44747, + ".Reporting": 44748, + "Mas": 44749, + "quiet": 44750, + ".rules": 44751, + "ĠVO": 44752, + "conexion": 44753, + ",K": 44754, + "Ġallocator": 44755, + "ĠPowder": 44756, + "\\Repository": 44757, + "Beat": 44758, + "_tipo": 44759, + "Ġ['',": 44760, + "_INTR": 44761, + "Ġ<<<": 44762, + "\");čĊ": 44791, + "dropIfExists": 44792, + "ĠBeg": 44793, + "_HAL": 44794, + "ĠcrossAxisAlignment": 44795, + "ĠEvidence": 44796, + "Ġpeculiar": 44797, + "Ġinstitute": 44798, + "veis": 44799, + "Ġfft": 44800, + "Ãģ": 44801, + "Ġzoekt": 44802, + "analy": 44803, + "ĠHomeland": 44804, + "Ġpenetr": 44805, + "uddenly": 44806, + "ĉelement": 44807, + "ĠBren": 44808, + "ĠTrudeau": 44809, + "ĠCuban": 44810, + "jam": 44811, + "uslim": 44812, + "_ev": 44813, + "Ġstems": 44814, + "}%": 44815, + "Ŀå§ĭ": 44816, + "Ġbranding": 44817, + "Ġcorrespondence": 44818, + ".jquery": 44819, + "¢åįķ": 44820, + "ĠReads": 44821, + "(HttpStatusCode": 44822, + "assin": 44823, + "(slot": 44824, + "ĠGraduate": 44825, + "///<": 44826, + "Ġinformations": 44827, + "ENABLE": 44828, + "Ġpuis": 44829, + "Ġfinder": 44830, + "ĠBris": 44831, + "Ġnettsteder": 44832, + "_mid": 44833, + "Ġogs": 44834, + "ĠSterling": 44835, + "Ġarrog": 44836, + "strftime": 44837, + "|ĊĊ": 44838, + "Ġvox": 44839, + "ĠRegardless": 44840, + "Ġeso": 44841, + "ĠComfort": 44842, + ".BooleanField": 44843, + "Ġuh": 44844, + "ACY": 44845, + "Ġsqueez": 44846, + "ĠVic": 44847, + "contro": 44848, + ".lo": 44849, + "Ġire": 44850, + "ĠComedy": 44851, + "ë¶": 44852, + "Ġoriginated": 44853, + "Ġshipment": 44854, + "|max": 44855, + "_guid": 44856, + "levation": 44857, + "наÑı": 44858, + "(undefined": 44859, + "ĠDDR": 44860, + "Ġshootings": 44861, + "ĠLatino": 44862, + "ENDOR": 44863, + "Ġaveraging": 44864, + "Ġgreeted": 44865, + "Ġtheaters": 44866, + "ое": 44867, + "ĠdB": 44868, + "Ġgst": 44869, + "Ġdefinite": 44870, + ".Storage": 44871, + ".her": 44872, + "Ġafore": 44873, + "ĠReality": 44874, + "ĠGods": 44875, + "versed": 44876, + "Ġhandsome": 44877, + "Ġexcluding": 44878, + "(ad": 44879, + "Quotes": 44880, + "ĠScheme": 44881, + "?q": 44882, + "ĠTamil": 44883, + "Ticks": 44884, + "Ġpest": 44885, + "'n": 44886, + "Ġpornography": 44887, + "_modal": 44888, + "Ġ----------": 44889, + "Ġdisposable": 44890, + "FREE": 44891, + "Ġshark": 44892, + "CHE": 44893, + "Ġdepicted": 44894, + "Ġdemonstrations": 44895, + "ĠKilled": 44896, + "ĠRULE": 44897, + "Ġobsessed": 44898, + "Ġsimplified": 44899, + "Postal": 44900, + "Ġconceptual": 44901, + "Ġpst": 44902, + "Las": 44903, + "_PROJECT": 44904, + "ucceeded": 44905, + "olu": 44906, + "ÄŁi": 44907, + "Ġpersonalities": 44908, + "Ġreshape": 44909, + "Ġenclosed": 44910, + "ĉptr": 44911, + "Ġtutorials": 44912, + "Ġexploded": 44913, + "_DIRECTORY": 44914, + "åĨħ容": 44915, + "Ġcanon": 44916, + "Ġrecognise": 44917, + "PAD": 44918, + "ĠApprox": 44919, + "ĠRestore": 44920, + "ĠImportant": 44921, + "Ġheavier": 44922, + ".Sequential": 44923, + "Earth": 44924, + "ĠMilk": 44925, + ".setRequest": 44926, + ".tem": 44927, + "Ġreconstruct": 44928, + "Ġskeptical": 44929, + "_Private": 44930, + "BUF": 44931, + "qua": 44932, + ":a": 44933, + "Ġsek": 44934, + "Ġdwell": 44935, + "ossa": 44936, + "Ġrewarded": 44937, + "ий": 44938, + "(topic": 44939, + "_partition": 44940, + "Ġ__________________": 44941, + "Keywords": 44942, + "ĠFranco": 44943, + "Lite": 44944, + "Ġnaken": 44945, + "Ġза": 44946, + "OBJECT": 44947, + "Ġcrafts": 44948, + "ĠSwap": 44949, + ".Xna": 44950, + ".Connect": 44951, + "Ġbalcony": 44952, + "(real": 44953, + "ĠBarnes": 44954, + "bir": 44955, + "ĠTwenty": 44956, + "ayan": 44957, + "atars": 44958, + "ĠPropel": 44959, + "ĠIhnen": 44960, + "Upgrade": 44961, + "Ġcurb": 44962, + "-second": 44963, + "Ġneph": 44964, + ".pres": 44965, + "ìŀħ": 44966, + ".seq": 44967, + "Ġpadded": 44968, + "\"?": 44969, + "jl": 44970, + "ãĥ¬": 44971, + "')a": 44975, + "Coordinates": 44976, + "Ġenacted": 44977, + "ENTS": 44978, + "Ġlac": 44979, + ".final": 44980, + "ĠPhpStorm": 44981, + "called": 44982, + "Ġinquiries": 44983, + ".middleware": 44984, + "ĠDowntown": 44985, + "/';Ċ": 44986, + "Ġkilomet": 44987, + "accel": 44988, + "Ġquien": 44989, + "wstring": 44990, + "setData": 44991, + "Ġmanera": 44992, + "Ġmodular": 44993, + "rimp": 44994, + "Ġtariffs": 44995, + "âĢĻil": 44996, + "_THROW": 44997, + "/color": 44998, + "ĠHTMLElement": 44999, + "Ġcarro": 45000, + "Ġprere": 45001, + "Ġplotting": 45002, + "ĠPositive": 45003, + "ĠMachines": 45004, + "OTES": 45005, + "Ỽ": 45006, + "pleasant": 45007, + "Ġalte": 45008, + "Ġainda": 45009, + "these": 45010, + "Ġcors": 45011, + "ipay": 45012, + "ĠAdvisory": 45013, + "ĠRubio": 45014, + "jq": 45015, + "Ġlimestone": 45016, + "Ġdetached": 45017, + "设置": 45018, + "tenant": 45019, + "ĠDepth": 45020, + "alore": 45021, + "ĠÑģÑĤÑĢок": 45022, + "ĠFORE": 45023, + "ĠLay": 45024, + "presentation": 45025, + ")');Ċ": 45026, + ".subplots": 45027, + "Ïĥ": 45028, + "NOW": 45029, + "Gar": 45030, + "handles": 45031, + "abra": 45032, + "puties": 45033, + "ĠElectrical": 45034, + "Middle": 45035, + "ropic": 45036, + "ĠJD": 45037, + "ĠDyn": 45038, + "ĠBristol": 45039, + "ĠMcCarthy": 45040, + "Ġstriker": 45041, + "Ġenumerable": 45042, + "ĠEvan": 45043, + ".defaults": 45044, + "quences": 45045, + ")||": 45046, + "ĉtoken": 45047, + "âĹı": 45048, + "-dropdown": 45049, + "STORE": 45050, + "ĠGraphic": 45051, + "(pp": 45052, + "Expl": 45053, + "Ġupwards": 45054, + "ĠDistributed": 45055, + "ĠWEB": 45056, + "Jer": 45057, + "isNaN": 45058, + "çĶŁæĪIJ": 45059, + ">R": 45060, + "üssen": 45061, + "efs": 45062, + "Ġuncover": 45063, + "Ġlud": 45064, + ".calculate": 45065, + "Ġintptr": 45066, + "Ġmidfielder": 45067, + ".Headers": 45068, + "Ġmf": 45069, + "eref": 45070, + ".Metro": 45071, + "ĠSpeaking": 45072, + ":b": 45073, + "Ġcryptocurrencies": 45074, + "Ġdemons": 45075, + "ĉEXPECT": 45076, + "Ġwicked": 45077, + "youtube": 45078, + ":Int": 45079, + "ĠHindi": 45080, + "ĠCAT": 45081, + "Ġع": 45082, + "rar": 45083, + "omore": 45084, + "/per": 45085, + "/license": 45086, + "Ġreim": 45087, + "Ġawaiting": 45088, + "Ġlethal": 45089, + "ĠEF": 45090, + "rounded": 45091, + "ĠPlatinum": 45092, + "ĠвÑģе": 45093, + ".coords": 45094, + ".Device": 45095, + "/item": 45096, + "ĠWenn": 45097, + "compileComponents": 45098, + "ĠKinder": 45099, + ".removeItem": 45100, + "Ġanda": 45101, + "bnb": 45102, + "Ġpra": 45103, + "(transaction": 45104, + "Ġembarrassing": 45105, + "ĉBOOL": 45106, + ".contentView": 45107, + "Ġeventdata": 45108, + "atore": 45109, + "ĠprovidedIn": 45110, + "irma": 45111, + "Ġzona": 45112, + "_HW": 45113, + "æĻ": 45114, + "Ġstove": 45115, + "Ġcounterpart": 45116, + "_Product": 45117, + "_MANAGER": 45118, + "Ġinfring": 45119, + "ĠERA": 45120, + "_party": 45121, + "Ñij": 45122, + "Ġinici": 45123, + "_Request": 45124, + "Ġmiracle": 45125, + "ĠcancelButton": 45126, + "Spy": 45127, + "ató": 45128, + "Ġpolish": 45129, + "ĠNicole": 45130, + ".displayName": 45131, + "\\Requests": 45132, + "ĠuseHistory": 45133, + "RouterModule": 45134, + "Ġstared": 45135, + "IDER": 45136, + "ÑĥнкÑĨи": 45137, + "Ġnota": 45138, + "$arr": 45139, + "pecified": 45140, + "Ġtopp": 45141, + "_DRIVER": 45142, + "/ng": 45143, + "åł": 45144, + "_tm": 45145, + "%timeout": 45146, + "\"": 45588, + "tlement": 45589, + "$(\"": 45590, + "FromString": 45591, + "ĠBild": 45592, + "Ġconventions": 45593, + "_native": 45594, + "ĠInspector": 45595, + "ĠPist": 45596, + "ubar": 45597, + "Ġregs": 45598, + "ĠPilot": 45599, + "Thus": 45600, + ">'+": 45601, + "Ġcela": 45602, + ".news": 45603, + "(Product": 45604, + "Living": 45605, + "Russia": 45606, + "Ġfacet": 45607, + "etical": 45608, + "Ġ['$": 45609, + "/[": 45610, + "ĠDire": 45611, + "Ġgases": 45612, + "ĠINFORMATION": 45613, + "ĠEat": 45614, + "ĠForums": 45615, + "ĠCharacters": 45616, + "_met": 45617, + "Ġìĭľ": 45618, + "Ġkings": 45619, + "achie": 45620, + "ĠLambda": 45621, + "Ġtimers": 45622, + "ĠLighting": 45623, + "ĠCasey": 45624, + "addir": 45625, + "andex": 45626, + ".answer": 45627, + "ĠHip": 45628, + "ĠPrincip": 45629, + "StartDate": 45630, + "ĠãĢĮ": 45631, + "tres": 45632, + "Ġ&#": 45633, + ".MaxValue": 45634, + "ĠProblems": 45635, + "Ġlatex": 45636, + "OfClass": 45637, + "ĠLynn": 45638, + "//'": 45639, + "Ġvoyage": 45640, + "Ġshuttle": 45641, + "ĠRoller": 45642, + "ĠRuntimeError": 45643, + "uya": 45644, + "Dic": 45645, + "ĉbuilder": 45646, + "Ġbullying": 45647, + "Ġsimplest": 45648, + ".called": 45649, + "ĠLR": 45650, + "Ġmorality": 45651, + "Ġsturdy": 45652, + "tracking": 45653, + ".swagger": 45654, + "_BIND": 45655, + "ITOR": 45656, + "-urlencoded": 45657, + "ĠÑħ": 45658, + "ĠTrinity": 45659, + "Ġtraps": 45660, + "Ġ|-": 45661, + "ĠsetText": 45662, + "Ġbargain": 45663, + "Ġbrakes": 45664, + ".getCode": 45665, + "Ġmigrate": 45666, + "Ġribbon": 45667, + ")return": 45668, + "Ġcharger": 45669, + "acom": 45670, + "ADIUS": 45671, + "ĠAmbassador": 45672, + "-after": 45673, + "Ġanni": 45674, + "ĉspin": 45675, + "Concept": 45676, + "ĠHenderson": 45677, + "ĠHOST": 45678, + ".rank": 45679, + "ĠNortheast": 45680, + "Ġberlin": 45681, + "Ġrequis": 45682, + ".feed": 45683, + "ĠsourceMapping": 45684, + "ĠRencontre": 45685, + ".ajax": 45686, + "nestjs": 45687, + "Ġtrek": 45688, + "ĠNacional": 45689, + "Ġ&[": 45690, + "Ġpayable": 45691, + "ortex": 45692, + "Ġdept": 45693, + "fieldName": 45694, + "Ġcompletes": 45695, + "ĠRVA": 45696, + "Ġonions": 45697, + "alignment": 45698, + "Formats": 45699, + "Ġ'{$": 45700, + "HashSet": 45701, + "ĠBod": 45702, + ".InvariantCulture": 45703, + "Ġsettlements": 45704, + "Ġhydr": 45705, + ".updated": 45706, + "venth": 45707, + "(seconds": 45708, + "=\"/\"": 45709, + "Ġwebpage": 45710, + "(ĊĊ": 45711, + "Ġtir": 45712, + "Ġtoes": 45713, + "ĠBrick": 45714, + "Ġambition": 45715, + "Pot": 45716, + "=max": 45717, + "ETIME": 45718, + "Ġdepot": 45719, + "calls": 45720, + "ĠNorwegian": 45721, + "`:": 45722, + "Ġburger": 45723, + "Ġprofessors": 45724, + "ĠAllocate": 45725, + "-thirds": 45726, + "-chart": 45727, + "Ġford": 45728, + "*N": 45729, + ".kotlin": 45730, + "Ġpaperwork": 45731, + "ĠDEVICE": 45732, + "%@\",": 45733, + "respect": 45734, + "(mp": 45735, + "é«ĺ": 45736, + "-if": 45737, + "Ġcushion": 45738, + "obot": 45739, + "Ġparc": 45740, + "SPACE": 45741, + "ĠNetanyahu": 45742, + "Ġselfish": 45743, + "feat": 45744, + "Ġclientes": 45745, + "-tools": 45746, + "Ġporch": 45747, + "Ġjq": 45748, + ".verbose": 45749, + "Ġliberals": 45750, + "])ĊĊĊ": 45751, + "pies": 45752, + "NotBlank": 45753, + "(term": 45754, + "ÈĽi": 45755, + "_Params": 45756, + ".normalize": 45757, + "Bullet": 45758, + "ASIC": 45759, + "(hex": 45760, + "_cliente": 45761, + "+,": 45762, + "_DI": 45763, + "Ġforthcoming": 45764, + "}\")]Ċ": 45765, + "seo": 45766, + "Um": 45767, + ">Name": 45768, + "Ġcomfortably": 45769, + "irectional": 45770, + "WITH": 45771, + "/pr": 45772, + "ĠPoor": 45773, + "ĠVitamin": 45774, + "vic": 45775, + "GH": 45776, + "Ġpriorit": 45777, + "ĠNN": 45778, + "ĠClosed": 45779, + "¤í": 45780, + "ĠisOpen": 45781, + "\\Console": 45782, + "AndFeel": 45783, + ".SUCCESS": 45784, + "_OPERATION": 45785, + "polation": 45786, + "ĠTas": 45787, + "psz": 45788, + ">'.": 45789, + "CURRENT": 45790, + "Vendor": 45791, + "hosts": 45792, + "ĠErd": 45793, + ">tagger": 45794, + "ĠsourceMappingURL": 45795, + "Ġmarathon": 45796, + "_closed": 45797, + "Ġexemption": 45798, + "Ġrecognizes": 45799, + "ideshow": 45800, + "'$": 45801, + "('/');Ċ": 45802, + "mits": 45803, + "warz": 45804, + "ĠCherry": 45805, + "µ¬": 45806, + "nor": 45807, + "porte": 45808, + "Ġwl": 45809, + "_backup": 45810, + ".getBoolean": 45811, + ".getResource": 45812, + "Ġdefinitive": 45813, + ".EditText": 45814, + "ĠsÃŃ": 45815, + ".CONT": 45816, + "ĠPLAYER": 45817, + ".cards": 45818, + "ĠShore": 45819, + "('/')Ċ": 45820, + "cluir": 45821, + "WebDriver": 45822, + "(month": 45823, + "-release": 45824, + "Ġinspector": 45825, + "å£": 45826, + "ĠNF": 45827, + "_clip": 45828, + "åŃIJ": 45829, + "Ġinteracting": 45830, + ".tmp": 45831, + "Ġ'''ĊĊ": 45832, + "Ġdee": 45833, + "Ġfrost": 45834, + "\"]))Ċ": 45835, + "ĠPlaces": 45836, + "Throws": 45837, + "fork": 45838, + "/day": 45839, + "iPhone": 45840, + "ĠMIC": 45841, + "Ġfolding": 45842, + "Ġcrore": 45843, + "ĠChiefs": 45844, + "pherical": 45845, + "(price": 45846, + ".WriteString": 45847, + "Ġexiting": 45848, + "]',Ċ": 45849, + "ighting": 45850, + "Ingredient": 45851, + "(vertex": 45852, + "ĠscrollView": 45853, + "hf": 45854, + ":new": 45855, + "SEN": 45856, + "sector": 45857, + "Ġspins": 45858, + "ĠScheduler": 45859, + "otechn": 45860, + "semicolon": 45861, + "FontOfSize": 45862, + "ĠSpecifically": 45863, + "flamm": 45864, + ".ObjectId": 45865, + "Ġconta": 45866, + "_permissions": 45867, + "ĉFROM": 45868, + "ICODE": 45869, + "/kg": 45870, + "ĠHotels": 45871, + "-med": 45872, + "ĠDin": 45873, + "Ġnavy": 45874, + "getParam": 45875, + "Ġmend": 45876, + "Ġportrayed": 45877, + "ĠMetropolitan": 45878, + "Painter": 45879, + "Ġreferral": 45880, + "_good": 45881, + "Ġmarvel": 45882, + "osaic": 45883, + ">(&": 45884, + ".ur": 45885, + "Ġestos": 45886, + "William": 45887, + "Ġtimber": 45888, + "Ġquelques": 45889, + "ĠDocuments": 45890, + ".Xaml": 45891, + "Ġbatches": 45892, + "éģĵ": 45893, + "ĠReleased": 45894, + "Tail": 45895, + "COOKIE": 45896, + "heid": 45897, + "_station": 45898, + "ĠVia": 45899, + "Sale": 45900, + "ĠRepeat": 45901, + "Ġpromin": 45902, + "ĠZo": 45903, + "-forward": 45904, + "ĠIon": 45905, + "itary": 45906, + "Ġjus": 45907, + "-request": 45908, + "Ġproudly": 45909, + "ĠStreaming": 45910, + "(MouseEvent": 45911, + "ĠSprint": 45912, + "_rotation": 45913, + "Repositories": 45914, + "Ġtart": 45915, + "ĠÑģв": 45916, + "Ġmappings": 45917, + "èª": 45918, + "Cu": 45919, + "Cycle": 45920, + "Ġbun": 45921, + "ĉlua": 45922, + "ãĥī": 45923, + "Ġ((!": 45924, + "Ġcollectively": 45925, + "ĠCond": 45926, + "Ġwszyst": 45927, + "(lib": 45928, + "openhagen": 45929, + "_skip": 45930, + ".ColumnHeader": 45931, + "éĤ": 45932, + "perienced": 45933, + "ıè¿°": 45934, + "_props": 45935, + "Ġcontrace": 45936, + "Ġmatchup": 45937, + "abetic": 45938, + ".members": 45939, + "RECT": 45940, + "(dat": 45941, + "Ġsog": 45942, + "renom": 45943, + "_Method": 45944, + "Customers": 45945, + "fullname": 45946, + "ZN": 45947, + "retry": 45948, + "Ġkap": 45949, + "ĠNeu": 45950, + "èĬ": 45951, + "addChild": 45952, + "willReturn": 45953, + "_permalink": 45954, + "Ġenergetic": 45955, + "ĠWet": 45956, + "ĠMorr": 45957, + "Ġgcd": 45958, + "counts": 45959, + ",type": 45960, + "dig": 45961, + "(Login": 45962, + "Ġcracks": 45963, + "Ġbacterial": 45964, + "ĠMeat": 45965, + "ĠArmstrong": 45966, + "ĠBronze": 45967, + "Ġapproximate": 45968, + "_dirs": 45969, + "liga": 45970, + "ÅĤad": 45971, + "Ġkindness": 45972, + "Ġcontre": 45973, + "ĠEVERY": 45974, + "MET": 45975, + "Ġannouncements": 45976, + "gpio": 45977, + "ĠWaitForSeconds": 45978, + "ĠPhotoshop": 45979, + "Ġdiscontin": 45980, + "/dd": 45981, + "Ġtopology": 45982, + "anical": 45983, + ".interface": 45984, + "aucoup": 45985, + ".HashSet": 45986, + "ARIANT": 45987, + "(routes": 45988, + "ĠTeh": 45989, + "Ġhype": 45990, + "]\").": 45991, + "Ġslam": 45992, + "Ġbroth": 45993, + "-inter": 45994, + "ĠRid": 45995, + "-manager": 45996, + "Cancelar": 45997, + "ĠPagination": 45998, + "Ġsoundtrack": 45999, + "Ġposterior": 46000, + "Ġscrub": 46001, + "creating": 46002, + "-*": 46003, + "irteen": 46004, + ".dy": 46005, + ".symmetric": 46006, + "Ġ\"\".": 46007, + "===============": 46008, + "Ġchassis": 46009, + "ĠnumberOfRows": 46010, + "Developer": 46011, + "_bins": 46012, + "ĠOUR": 46013, + "rieb": 46014, + "Pros": 46015, + "ĠwiÄĻ": 46016, + "\"d": 46017, + "Ġasyncio": 46018, + "zeigen": 46019, + "_spi": 46020, + ".ALL": 46021, + "Ġscrews": 46022, + "Chinese": 46023, + "ĠapiKey": 46024, + "Ġunsuccessful": 46025, + "ĠSeahawks": 46026, + "ORG": 46027, + "竳": 46028, + "Ġprofessionally": 46029, + "ĠCoupon": 46030, + "åŃĹæ®µ": 46031, + "Convention": 46032, + "Ġpolym": 46033, + "æīĭ": 46034, + "Ġsalvation": 46035, + "Ġengineered": 46036, + "ĠWrest": 46037, + "ĠGCC": 46038, + "Ġwarmer": 46039, + "LayoutConstraint": 46040, + "Ġaggrav": 46041, + "Scripts": 46042, + "venture": 46043, + "Ġrefrigerator": 46044, + "Ġinnovations": 46045, + "ĠRunner": 46046, + "NIC": 46047, + "ĠRolling": 46048, + "ControlEvents": 46049, + "Ġloos": 46050, + "pac": 46051, + "ĉpanel": 46052, + "efe": 46053, + "ĠBuddha": 46054, + "--------------Ċ": 46055, + "åºĵ": 46056, + "(forKey": 46057, + "Ġlumin": 46058, + "Ġ(?": 46059, + "ĠAIDS": 46060, + ",user": 46061, + "imientos": 46062, + "contentType": 46063, + "antlr": 46064, + "é¦": 46065, + "ĠWelt": 46066, + "Production": 46067, + "might": 46068, + "ĠVII": 46069, + "\",(": 46070, + "Ġobserving": 46071, + "Ġdeliberate": 46072, + "(control": 46073, + "Ġwithd": 46074, + "Ġsemana": 46075, + "STACK": 46076, + "uchen": 46077, + "Nice": 46078, + "ĠDeutschland": 46079, + "ĠSpecifies": 46080, + "dma": 46081, + "izio": 46082, + "ĠFacts": 46083, + "_popup": 46084, + "ĠDirectors": 46085, + "{:": 46086, + "[R": 46087, + "ĠÑįлеменÑĤ": 46088, + "Ġplat": 46089, + "Ġdirecting": 46090, + "ä¸ī": 46091, + "ĠGilbert": 46092, + "â̦.ĊĊ": 46093, + ".qml": 46094, + "Ġthereafter": 46095, + "Ġdisposition": 46096, + "draft": 46097, + "Ġsurgeon": 46098, + "ĠInsider": 46099, + "Blend": 46100, + "ĠTrev": 46101, + "trinsic": 46102, + "Topics": 46103, + "rieve": 46104, + "_FILENAME": 46105, + "Ġautres": 46106, + "Jose": 46107, + "Producer": 46108, + "erus": 46109, + "Ġpetit": 46110, + "ĠNEXT": 46111, + "ĠFilters": 46112, + "Ġreplicate": 46113, + "\"]).": 46114, + "Ġlenders": 46115, + "]\",Ċ": 46116, + ";charset": 46117, + "CppObject": 46118, + "Ġfloral": 46119, + "ĠTipo": 46120, + "Ġcircuits": 46121, + "easy": 46122, + "(&$": 46123, + "itta": 46124, + "eryl": 46125, + "_COMMON": 46126, + "'}}>Ċ": 46127, + "-backed": 46128, + "(variable": 46129, + "(Index": 46130, + "Ġvoir": 46131, + "_locations": 46132, + "++){": 46133, + "ĠLouisville": 46134, + "Ġgratitude": 46135, + ".Mockito": 46136, + "ĠPowers": 46137, + "ieurs": 46138, + "Ġgeographic": 46139, + "rale": 46140, + "Ġcra": 46141, + "ĠSpurs": 46142, + "iphertext": 46143, + "ACION": 46144, + "-common": 46145, + "Ġvictories": 46146, + "ĠFinals": 46147, + ".shuffle": 46148, + "-million": 46149, + "_PROC": 46150, + "assume": 46151, + "Ġils": 46152, + "DBC": 46153, + "BootTest": 46154, + "Ġlavor": 46155, + ".testing": 46156, + ".ast": 46157, + "\"]/": 46158, + "moid": 46159, + "Ġqualification": 46160, + "gesch": 46161, + "ĉput": 46162, + "Ġairports": 46163, + "JI": 46164, + "Teacher": 46165, + "_uniform": 46166, + "Ġnama": 46167, + "ĠBast": 46168, + "ertype": 46169, + "capture": 46170, + "getAll": 46171, + "ĠReynolds": 46172, + "ooled": 46173, + ".comments": 46174, + "Ġchin": 46175, + ").*": 46176, + "Ġили": 46177, + "tgl": 46178, + "udos": 46179, + "ĠdÃŃas": 46180, + "chai": 46181, + ".program": 46182, + "Ġpsz": 46183, + "ĉicon": 46184, + "phil": 46185, + "entral": 46186, + "_WRAP": 46187, + "ovi": 46188, + "Ġnostalg": 46189, + "Infinity": 46190, + "ĉyield": 46191, + "Ġvitamins": 46192, + "Quaternion": 46193, + "Sink": 46194, + "_goods": 46195, + "Ġ........": 46196, + "ĠWings": 46197, + "uridad": 46198, + "-story": 46199, + "\"])ĊĊ": 46200, + "idelity": 46201, + "TypeDef": 46202, + "Gtk": 46203, + "ĠíĮ": 46204, + "_Main": 46205, + "Ġchez": 46206, + "ĠRaven": 46207, + "Ġpayroll": 46208, + "Ġfreelance": 46209, + "LLU": 46210, + "ĠMend": 46211, + "eday": 46212, + "ApiModelProperty": 46213, + ".FormBorderStyle": 46214, + "Ġeconomist": 46215, + "stanbul": 46216, + "Ġfreight": 46217, + "-Agent": 46218, + "(meta": 46219, + "Ġsymmetry": 46220, + "Ġ'..": 46221, + ".Calendar": 46222, + "-aut": 46223, + "gf": 46224, + "pent": 46225, + "yclopedia": 46226, + "Ġwishing": 46227, + "ĊĊĊĊĊĊĊĊĊĊĊĊ": 46228, + "Ġgentleman": 46229, + "Ġê³": 46230, + "=#": 46231, + "Ġlectures": 46232, + "âĢľIn": 46233, + "Ġ!_": 46234, + "Ġhb": 46235, + "ĠVendor": 46236, + "Recently": 46237, + "_notes": 46238, + "æıIJ示": 46239, + "\"My": 46240, + "HeadersHeight": 46241, + "_SO": 46242, + "Ġunwilling": 46243, + "Ġsuperhero": 46244, + "gio": 46245, + "psy": 46246, + "ĠPeer": 46247, + "javax": 46248, + "&apos": 46249, + "ĠCrisis": 46250, + "ordinal": 46251, + "Memcpy": 46252, + "++++++++++++++++": 46253, + "-val": 46254, + "Ġworkbook": 46255, + "-ap": 46256, + "=k": 46257, + "Ġmetallic": 46258, + "_peer": 46259, + "ByPrimaryKey": 46260, + "_SD": 46261, + "uator": 46262, + "_SHADER": 46263, + ")Math": 46264, + ".Transform": 46265, + "Ġcows": 46266, + "Phi": 46267, + "ĠClem": 46268, + "(_(\"": 46269, + "ĠLud": 46270, + "-delay": 46271, + "ĠSecurities": 46272, + "ĠOrthodox": 46273, + "Symfony": 46274, + "(report": 46275, + "Ġentertain": 46276, + "EPS": 46277, + "izoph": 46278, + "exual": 46279, + "IRD": 46280, + "ä»İ": 46281, + "Ġlith": 46282, + "Ġsanitize": 46283, + "Ġfeminine": 46284, + "ISBN": 46285, + ".authentication": 46286, + "_pipeline": 46287, + "/constants": 46288, + "ĠCONF": 46289, + "Ġlucr": 46290, + "ricia": 46291, + ".ttf": 46292, + ".setContent": 46293, + "Ġstan": 46294, + "orean": 46295, + "ĠLloyd": 46296, + ".rawValue": 46297, + "Ġgor": 46298, + "ĠBrowns": 46299, + "Regression": 46300, + "Ġlowering": 46301, + "naissance": 46302, + "Ġblows": 46303, + "Ġamazed": 46304, + "Ġunrelated": 46305, + "Reviews": 46306, + "Ġruby": 46307, + "ĠModifier": 46308, + "Ġgiants": 46309, + ".thread": 46310, + "Ġcontainment": 46311, + "ĠStartCoroutine": 46312, + "umat": 46313, + "orelease": 46314, + "ĠRandy": 46315, + "@endif": 46316, + "Digest": 46317, + "Ġsuburban": 46318, + "=\");Ċ": 46319, + "Ġannonce": 46320, + ".variable": 46321, + "\\Foundation": 46322, + "Ġacre": 46323, + "Van": 46324, + "Ġtuples": 46325, + "dns": 46326, + "ĠStanding": 46327, + "_large": 46328, + "Ġboxing": 46329, + "SupportActionBar": 46330, + "ĠFortune": 46331, + "ĠRum": 46332, + "_multiple": 46333, + "archical": 46334, + "Ġfwrite": 46335, + "_quote": 46336, + "Ġfoolish": 46337, + "Ġcomprising": 46338, + "Ġоп": 46339, + "-selected": 46340, + "vf": 46341, + "maid": 46342, + "Nama": 46343, + "(datetime": 46344, + "Ġindirectly": 46345, + "gart": 46346, + "fixtures": 46347, + "chos": 46348, + "ĠHalo": 46349, + "Ġrecurring": 46350, + "-news": 46351, + "vil": 46352, + "ĠNursing": 46353, + "-produ": 46354, + "ĠHQ": 46355, + "\\HttpFoundation": 46356, + "enci": 46357, + "auen": 46358, + "Ġvy": 46359, + "ocracy": 46360, + "Ġdelegation": 46361, + "Ġasphalt": 46362, + "ĠsetSelected": 46363, + "kok": 46364, + "/rest": 46365, + "metics": 46366, + "ĠNSDate": 46367, + "Ġtravelled": 46368, + "Ġrecib": 46369, + "Ġmime": 46370, + "CLIENT": 46371, + "ĠGU": 46372, + "ĠHANDLE": 46373, + "/Q": 46374, + "[z": 46375, + "Ġbothered": 46376, + "ĠBBQ": 46377, + "ças": 46378, + "_examples": 46379, + "_FIN": 46380, + "ĠwhiteColor": 46381, + "Ġastronom": 46382, + "-dir": 46383, + "Ġsovereign": 46384, + "Ġbreeze": 46385, + "Ġinning": 46386, + "ĠEdmonton": 46387, + "gli": 46388, + ".blogspot": 46389, + "jsx": 46390, + "Ġversa": 46391, + "ĠMohammed": 46392, + ".Job": 46393, + "-toggler": 46394, + "ĠполÑĮзоваÑĤ": 46395, + "ardon": 46396, + "Ġnewborn": 46397, + "Ġnaval": 46398, + "noteq": 46399, + "Ġtumblr": 46400, + "Ġhentai": 46401, + "ĠTypically": 46402, + "Ġloot": 46403, + ".Sprite": 46404, + "Flight": 46405, + "Ġwavelength": 46406, + "-sk": 46407, + "ĠElle": 46408, + "_exports": 46409, + "ĠÑı": 46410, + "ĠIH": 46411, + "izophren": 46412, + "Ġíģ": 46413, + "_primary": 46414, + "Ġmois": 46415, + "ĠBN": 46416, + "Ġsystemic": 46417, + "Ġdiferentes": 46418, + "INCT": 46419, + "Ġ''ĊĊ": 46420, + "$q": 46421, + "WidgetItem": 46422, + "clide": 46423, + "$file": 46424, + "Lemma": 46425, + "/table": 46426, + "agrid": 46427, + "ĠMongoDB": 46428, + "inte": 46429, + "Ġapprent": 46430, + "ÂŃing": 46431, + ".Db": 46432, + "ĠÃĤ": 46433, + "hammer": 46434, + "='';Ċ": 46435, + "Ġbrokers": 46436, + "itlement": 46437, + "semblies": 46438, + "Ele": 46439, + "{x": 46440, + "Ġlastname": 46441, + "<-": 46442, + "Ġflatten": 46443, + "_band": 46444, + ".Root": 46445, + ".readFileSync": 46446, + "======": 46447, + ".rx": 46448, + "?čĊ": 46449, + "Ġmetaphor": 46450, + "Ti": 46451, + "conte": 46452, + "Ġdebit": 46453, + "Ġcontempt": 46454, + "CppType": 46455, + "æĶ¯": 46456, + "FormField": 46457, + "ratio": 46458, + "osopher": 46459, + "Ġimplant": 46460, + "PURE": 46461, + "Ġalta": 46462, + "_management": 46463, + "Ġrefine": 46464, + "ĠCheckBox": 46465, + "ĠCharl": 46466, + "-version": 46467, + "conditional": 46468, + "venues": 46469, + "Ġrifles": 46470, + "Ġoffspring": 46471, + "Ġmilling": 46472, + "Ġsharply": 46473, + "Ġunderwater": 46474, + "(origin": 46475, + "_Control": 46476, + "Ġ.$": 46477, + "Plugins": 46478, + "Ġdrying": 46479, + "Ġillustrates": 46480, + "-u": 46481, + "Ġvegetarian": 46482, + "npc": 46483, + "Heart": 46484, + ";',Ċ": 46485, + "comma": 46486, + "teenth": 46487, + "asan": 46488, + "/spec": 46489, + "_moves": 46490, + "-margin": 46491, + "Ġingen": 46492, + "³³³": 46493, + "Ġprojet": 46494, + "Ġotra": 46495, + "Ġbras": 46496, + ".utc": 46497, + "Ġslept": 46498, + "=sub": 46499, + "abilit": 46500, + "poster": 46501, + "Ġsdk": 46502, + "ouncill": 46503, + "Ġwd": 46504, + "PreparedStatement": 46505, + "ĠDrum": 46506, + "(attribute": 46507, + "ĠEthernet": 46508, + "ĉDB": 46509, + "California": 46510, + "cube": 46511, + "[I": 46512, + ".Created": 46513, + "ĠHM": 46514, + "Ġtracing": 46515, + "FormsModule": 46516, + "-you": 46517, + ".currency": 46518, + "feeding": 46519, + "Ġtbody": 46520, + "Li": 46521, + "accion": 46522, + "nas": 46523, + "Ġtrouver": 46524, + "NONE": 46525, + "\"},čĊ": 46526, + "Ġftp": 46527, + "WithIdentifier": 46528, + "polate": 46529, + "FileInfo": 46530, + "Ġpursued": 46531, + "ĠĠĠĠčĊĠĠĠĠčĊ": 46532, + "DESCRIPTION": 46533, + "}*/Ċ": 46534, + "FromNib": 46535, + "Ġdecorative": 46536, + "_SSL": 46537, + "(chat": 46538, + "TLS": 46539, + "Ġsurprises": 46540, + "alculate": 46541, + "ĠSplash": 46542, + "(Configuration": 46543, + "ĠSEM": 46544, + "imson": 46545, + "/library": 46546, + "": 46621, + "GED": 46622, + "faq": 46623, + "Ġoptionally": 46624, + "_Dis": 46625, + "ĠSuccessful": 46626, + "ĠCensus": 46627, + "Ġincarcer": 46628, + "_CARD": 46629, + "Ġaviation": 46630, + "ĠGym": 46631, + "Authority": 46632, + ".Bean": 46633, + "shader": 46634, + "NotExist": 46635, + "_TextChanged": 46636, + "ĠSTOP": 46637, + "(team": 46638, + "\"H": 46639, + "wg": 46640, + "Ġgrinder": 46641, + "Ġstripe": 46642, + "Ġpreservation": 46643, + "Claim": 46644, + "aversal": 46645, + "warehouse": 46646, + "targets": 46647, + "Trust": 46648, + "Ġallev": 46649, + ",www": 46650, + "ousse": 46651, + "_chan": 46652, + "_Size": 46653, + "systems": 46654, + "Ġobjection": 46655, + "ĠKane": 46656, + "Ġcorros": 46657, + "ĠDSL": 46658, + "Ġua": 46659, + "ĠMH": 46660, + "ĠStrategic": 46661, + "_tcp": 46662, + "Ġê°Ĵ": 46663, + "Ġborrowed": 46664, + "ĠAch": 46665, + "ĉcommand": 46666, + "Ġgps": 46667, + "leston": 46668, + "ichever": 46669, + "ĠUA": 46670, + "Ġassaulted": 46671, + "Ġspecializes": 46672, + "ĉsearch": 46673, + "Hotel": 46674, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠčĊ": 46675, + "ĠPitch": 46676, + "ĠÙģ": 46677, + "READY": 46678, + "Ġparental": 46679, + "Ġgéné": 46680, + "Ġdonnées": 46681, + "Ġdetain": 46682, + "TARGET": 46683, + "Ġprotagonist": 46684, + "ĠclearInterval": 46685, + "ĠIconButton": 46686, + "ĠGetAll": 46687, + "TypeInfo": 46688, + "EH": 46689, + "âĢľThey": 46690, + "Ġ{[": 46691, + "Ġgag": 46692, + "ĠÚ©": 46693, + "ĠDropdown": 46694, + ".free": 46695, + "gone": 46696, + "imens": 46697, + "Ġinstal": 46698, + "ĉcurl": 46699, + "_CAN": 46700, + "ĠBone": 46701, + "ï¼Ķ": 46702, + "onyms": 46703, + "-government": 46704, + ".bindingNavigator": 46705, + "ĠDans": 46706, + "ĠMcL": 46707, + "(en": 46708, + ">(_": 46709, + "ÐĴÑĭ": 46710, + ".*;čĊ": 46711, + "=j": 46712, + "-cor": 46713, + "Son": 46714, + ".ToolStripItem": 46715, + "-around": 46716, + "_XML": 46717, + "endDate": 46718, + "Ġslack": 46719, + "Ġrotated": 46720, + "Ġnoqa": 46721, + "Ġcottage": 46722, + "Ġencontrar": 46723, + "_skill": 46724, + "houette": 46725, + "!čĊ": 46726, + ".weather": 46727, + "Ġemphasized": 46728, + "å®¶": 46729, + "ĠÑģпиÑģ": 46730, + "ĠCompiler": 46731, + "(android": 46732, + "ĠâĢº": 46733, + ".turn": 46734, + "Ġsuppression": 46735, + "_calls": 46736, + "Ġ*@": 46737, + "(strlen": 46738, + ".hex": 46739, + "ĠBills": 46740, + "ĠRSA": 46741, + "ÏĤ": 46742, + "ĠEscape": 46743, + "ementia": 46744, + "Ġfrontend": 46745, + "Ġpint": 46746, + "_exc": 46747, + "zzo": 46748, + "[],Ċ": 46749, + "Ġ\"','\"": 46750, + ".Environment": 46751, + "Ġaforementioned": 46752, + "Ġendure": 46753, + "prototype": 46754, + "therapy": 46755, + "ssi": 46756, + "Deg": 46757, + "_plugins": 46758, + ".userInfo": 46759, + "Printer": 46760, + "ĠPROGRAM": 46761, + "Ġruins": 46762, + "Ġempirical": 46763, + "Ġcrawl": 46764, + "ĠBoiler": 46765, + "-comment": 46766, + ".subplot": 46767, + "_et": 46768, + "Ġ'.',": 46769, + "minor": 46770, + "ĠCustoms": 46771, + "Ġyaw": 46772, + "underline": 46773, + "ĠComo": 46774, + "(('": 46775, + "(mean": 46776, + "Ġchaque": 46777, + "ĠBlocks": 46778, + ".rad": 46779, + "ilibrium": 46780, + "Ġwebdriver": 46781, + "Ġmelhor": 46782, + "dana": 46783, + "ĠAbuse": 46784, + "ĠSouthwest": 46785, + "ĠParen": 46786, + "PERTIES": 46787, + "ĉIL": 46788, + "Ġscream": 46789, + "vu": 46790, + "Ġincomes": 46791, + "Ġnim": 46792, + "Ġlace": 46793, + "Ġcompensate": 46794, + "Reverse": 46795, + "Dat": 46796, + "_attack": 46797, + "Ġnour": 46798, + "achen": 46799, + "cek": 46800, + "\"+": 47057, + "Ġtokenizer": 47058, + "Ġsovereignty": 47059, + "ĠPence": 47060, + "()\");Ċ": 47061, + "Ġpessoas": 47062, + ".Ge": 47063, + "ĠIncluded": 47064, + "Ġpagina": 47065, + "Ġexposing": 47066, + "еÑĪ": 47067, + "_SCRIPT": 47068, + "/$',": 47069, + "Thumbnail": 47070, + "×Ķ": 47071, + "webElementX": 47072, + "webElementXpaths": 47073, + "pressure": 47074, + "ĠCurry": 47075, + "_CP": 47076, + "OLUTION": 47077, + "ILES": 47078, + "protect": 47079, + "oola": 47080, + "Workspace": 47081, + "{};Ċ": 47082, + "ĠUNS": 47083, + "Ġsympathy": 47084, + "roker": 47085, + "Ġremodel": 47086, + "ĉcell": 47087, + "Ġatop": 47088, + ".FullName": 47089, + "Ġfaut": 47090, + "ĠEasily": 47091, + "_dynamic": 47092, + "Ġframed": 47093, + "Ġmotive": 47094, + "è·¯": 47095, + "sam": 47096, + "Ġmarca": 47097, + "ĠTextEditingController": 47098, + "Ġdestructor": 47099, + "cream": 47100, + "Ġrude": 47101, + "ĠBold": 47102, + "ĠIndigenous": 47103, + "Ġgens": 47104, + "Ġrelacion": 47105, + "(system": 47106, + "ĠUIFont": 47107, + "_charge": 47108, + "USTER": 47109, + "EV": 47110, + ".Namespace": 47111, + "Ġmerger": 47112, + "Ġcalloc": 47113, + "gang": 47114, + "BadRequest": 47115, + "Ġsper": 47116, + "-design": 47117, + "Ġâĩ": 47118, + "Chan": 47119, + "Ġorganism": 47120, + ",)": 47121, + "=id": 47122, + "_plane": 47123, + "ĠCases": 47124, + "elfast": 47125, + "ĠLegislature": 47126, + "ĠFaker": 47127, + "Ġinvoking": 47128, + "-utils": 47129, + "().'": 47130, + ".face": 47131, + "Ġguardian": 47132, + "myModal": 47133, + "Ġclipboard": 47134, + "ĠATM": 47135, + "Ġpeas": 47136, + "ĠSylv": 47137, + ".calc": 47138, + "ĠContacts": 47139, + "intValue": 47140, + "Ġmodifying": 47141, + "ĠBarb": 47142, + ".loss": 47143, + "_percentage": 47144, + "Asked": 47145, + "(lst": 47146, + "ategorical": 47147, + "-files": 47148, + "ĠRomania": 47149, + ".Ac": 47150, + "Ġhai": 47151, + "ĠFlying": 47152, + "Ġż": 47153, + "jp": 47154, + "ĠTrainer": 47155, + ".arc": 47156, + "_deg": 47157, + "Ġtraceback": 47158, + "OrFail": 47159, + "FLOW": 47160, + ".old": 47161, + "oya": 47162, + "gmt": 47163, + "isempty": 47164, + "Ġvaccination": 47165, + "Ġobsolete": 47166, + "recognized": 47167, + "Ġruined": 47168, + "ĠRein": 47169, + "ĠTracking": 47170, + "xfb": 47171, + "اÛĮ": 47172, + "Ġvære": 47173, + "Ġbryster": 47174, + "ĠITS": 47175, + "Ġdestiny": 47176, + "Ġswear": 47177, + "Ġredes": 47178, + "Ġclf": 47179, + "Ġflipped": 47180, + "ĉhead": 47181, + "Bluetooth": 47182, + "ĠOverrides": 47183, + ":Boolean": 47184, + "_=": 47185, + "_lr": 47186, + "spawn": 47187, + ":index": 47188, + "VALUES": 47189, + "iskey": 47190, + "?\");Ċ": 47191, + ".synthetic": 47192, + "ĠChecking": 47193, + "structures": 47194, + "iping": 47195, + "Ġvocals": 47196, + "-Up": 47197, + "ĠManufacturers": 47198, + "ĠMarriage": 47199, + "代çłģ": 47200, + "Ġgarner": 47201, + "_Client": 47202, + "parallel": 47203, + "RIEND": 47204, + "Ġvinegar": 47205, + "segue": 47206, + "JB": 47207, + "Ġcontacting": 47208, + "ĠCarroll": 47209, + "Ġoutreach": 47210, + "tensor": 47211, + "_variant": 47212, + "Ġtheat": 47213, + "licable": 47214, + "{|": 47215, + "tiny": 47216, + "_letter": 47217, + "Ġpencil": 47218, + "HeadersHeightSizeMode": 47219, + "iltro": 47220, + ".autoconfigure": 47221, + ".drag": 47222, + ".useState": 47223, + "ĠBMI": 47224, + "hint": 47225, + "Compile": 47226, + "*\\": 47227, + "enary": 47228, + "Ġlvl": 47229, + ".Cache": 47230, + "+=\"": 47231, + "_tv": 47232, + "ruitment": 47233, + "Ġfread": 47234, + "Articles": 47235, + "fila": 47236, + "Ġpackaged": 47237, + "âĺĨ": 47238, + "ATHER": 47239, + "ĠPlanned": 47240, + "scheme": 47241, + "Ġdiary": 47242, + "Ġoffenses": 47243, + "/F": 47560, + "ĠStick": 47561, + "Ġcerc": 47562, + "ĠSlee": 47563, + "ĉĉĠĠĠĠĠĠĠĠ": 47564, + "": 47739, + "ĉcol": 47740, + "VG": 47741, + "_boolean": 47742, + "recent": 47743, + "Ġ*)ĊĊ": 47744, + "ĠRainbow": 47745, + "ommen": 47746, + "Ġlur": 47747, + "Ġoppression": 47748, + "(\",\");Ċ": 47749, + "ĠFacility": 47750, + "DEFINED": 47751, + "Ġneon": 47752, + "Ġoffender": 47753, + "AFP": 47754, + "ĠCleaning": 47755, + "[]):": 47756, + "Ġundocumented": 47757, + ".Repositories": 47758, + "ĠGuitar": 47759, + "аÑģÑģив": 47760, + "Skills": 47761, + "Ġtestimon": 47762, + "ryptography": 47763, + "ĠAmber": 47764, + "ĠStalin": 47765, + "Ġlone": 47766, + "Ġapenas": 47767, + "Ġdieses": 47768, + "ĠArduino": 47769, + "转": 47770, + "==-": 47771, + "_Act": 47772, + "Ġcoded": 47773, + "âĸł": 47774, + "amburger": 47775, + "-links": 47776, + "Ġarmour": 47777, + ".High": 47778, + "getContent": 47779, + "stag": 47780, + "Ġheck": 47781, + "ĠìĹĨ": 47782, + "ĠMcConnell": 47783, + "ĠConcert": 47784, + "ĠAlloc": 47785, + "äre": 47786, + ".replaceAll": 47787, + "Ġpartitions": 47788, + "rott": 47789, + "ĠFle": 47790, + "_TREE": 47791, + "reasonable": 47792, + "ĠReporting": 47793, + "Ġbillionaire": 47794, + "scores": 47795, + "mins": 47796, + "-eye": 47797, + "MORE": 47798, + "abort": 47799, + "ĠSWT": 47800, + "Ġinverted": 47801, + "ĠTeachers": 47802, + ";n": 47803, + "Ġastro": 47804, + "нов": 47805, + "аниÑĨ": 47806, + "producto": 47807, + "countries": 47808, + "ĠOwen": 47809, + "Ġcontamination": 47810, + "Ġvibe": 47811, + "ĠElli": 47812, + ".script": 47813, + "ĠOlive": 47814, + "DMA": 47815, + "vier": 47816, + ":semicolon": 47817, + "-module": 47818, + "gressive": 47819, + "agu": 47820, + "_players": 47821, + "Ġresultados": 47822, + "started": 47823, + "scrollTop": 47824, + "=====": 47825, + "Ġweighing": 47826, + "Ġ[[[": 47827, + "zahl": 47828, + "(NS": 47829, + "ĠAssertion": 47830, + "league": 47831, + ".setTextColor": 47832, + "ĉMessage": 47833, + "Ġmoms": 47834, + "_AF": 47835, + ".wh": 47836, + "ALS": 47837, + "Ġautre": 47838, + "]ĊĊĊĊ": 47839, + ".opacity": 47840, + "ĠBuddhist": 47841, + "Ġdeaf": 47842, + "ĠOrganisation": 47843, + "(Global": 47844, + "ensch": 47845, + "Ġheadache": 47846, + "ĠAlien": 47847, + "_inode": 47848, + "ĠStark": 47849, + "Ġæī": 47850, + "-lnd": 47851, + "oref": 47852, + "_feat": 47853, + "Ġpedestrian": 47854, + "Ġnominal": 47855, + "Ġballoon": 47856, + "Ġsprites": 47857, + "PrototypeOf": 47858, + "ĠApost": 47859, + "ĠFEATURE": 47860, + "OH": 47861, + "Ġrecess": 47862, + "ĠDonna": 47863, + "consumer": 47864, + "$GLOBALS": 47865, + "ĠGIF": 47866, + "-frame": 47867, + "Inicio": 47868, + "Ġpassages": 47869, + "DateString": 47870, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 47871, + ".byte": 47872, + "Bug": 47873, + "initializer": 47874, + "pkt": 47875, + "odium": 47876, + "ĠDER": 47877, + ".ops": 47878, + "leri": 47879, + "Ġgifted": 47880, + "Ġdetach": 47881, + "terrain": 47882, + "elters": 47883, + "ãģı": 47884, + ".loader": 47885, + "ĠNGO": 47886, + "strncmp": 47887, + "Kh": 47888, + "(fontSize": 47889, + "rocket": 47890, + "Ġprecedent": 47891, + "ĠAurora": 47892, + "ĠExperiment": 47893, + "isphere": 47894, + "Encoded": 47895, + "ĠâĢĵĊĊ": 47896, + "Ġpyramid": 47897, + "ĠAnniversary": 47898, + "ofil": 47899, + "ëŁ": 47900, + "(plugin": 47901, + "Coeff": 47902, + "Ġcooperate": 47903, + "Ġpredominantly": 47904, + "ISM": 47905, + "Phrase": 47906, + "_DEFINE": 47907, + "Flip": 47908, + "AMILY": 47909, + "ĠMarkets": 47910, + "ĠStreamReader": 47911, + "ĠCombine": 47912, + "Ġmanuscript": 47913, + "zza": 47914, + ",tp": 47915, + "Whatever": 47916, + "ITICAL": 47917, + "ighbour": 47918, + "DataProvider": 47919, + ".Texture": 47920, + "privacy": 47921, + ".SDK": 47922, + "Ġrecharge": 47923, + "Ġcpp": 47924, + "ĠCFG": 47925, + "(holder": 47926, + "(py": 47927, + "mot": 47928, + "Ġsavoir": 47929, + "ĠRosa": 47930, + "ĠPCs": 47931, + "ĠíĻ": 47932, + ".heroku": 47933, + "Ġfren": 47934, + "ĠRiley": 47935, + "agate": 47936, + "Ġsond": 47937, + ".xlsx": 47938, + "Ġhacked": 47939, + "stad": 47940, + "Gi": 47941, + "Ġsanity": 47942, + "ĠSqlDataAdapter": 47943, + "...\",": 47944, + "ĠPussy": 47945, + "Ġ****************": 47946, + "Ġhassle": 47947, + "_PARENT": 47948, + "ĠUAE": 47949, + "Ġbeginners": 47950, + "(Client": 47951, + "Ġstatistically": 47952, + ".hour": 47953, + "edelta": 47954, + "Ġtraction": 47955, + "uelve": 47956, + "arat": 47957, + "Ġsauna": 47958, + "INVALID": 47959, + "Ġindictment": 47960, + "ALLE": 47961, + "Ġdissent": 47962, + "ĠTypography": 47963, + "Ġintentional": 47964, + "sit": 47965, + "ĠAnimals": 47966, + "Ġcountryside": 47967, + "Ġuart": 47968, + "}\\\"": 47969, + "Ġseamless": 47970, + "¾ç¤º": 47971, + "Ġautos": 47972, + "Ġ\"'\";Ċ": 47973, + "Flush": 47974, + "ANNOT": 47975, + "Ġalgebra": 47976, + "assoc": 47977, + "ĠWaters": 47978, + "Ġpreparations": 47979, + "ronym": 47980, + "[,]": 47981, + "Sans": 47982, + "Ġarmies": 47983, + "ipeg": 47984, + "Ġcreamy": 47985, + ".art": 47986, + "etre": 47987, + "ĠAnimated": 47988, + "Ġunpleasant": 47989, + "emean": 47990, + "great": 47991, + "iÄħ": 47992, + "ĠEarlier": 47993, + "Ġchic": 47994, + "Ġpreserving": 47995, + "(exec": 47996, + "ĠInvestigation": 47997, + "ĉGPIO": 47998, + "Ġrigorous": 47999, + "ijo": 48000, + "=num": 48001, + "ĠtoolStrip": 48002, + ")set": 48003, + "+\"&": 48004, + "ĠAcceler": 48005, + "Ġdevelopmental": 48006, + "isposable": 48007, + "Ġflawed": 48008, + "rene": 48009, + "Updating": 48010, + "Ġwatchdog": 48011, + "Ġdenominator": 48012, + "Ġsuburbs": 48013, + "Ġ...)": 48014, + "Ġconvictions": 48015, + "closure": 48016, + ".IP": 48017, + "Ġtranslates": 48018, + ".swt": 48019, + ".Trace": 48020, + "Ġmettre": 48021, + ".isEnabled": 48022, + "ĠEffective": 48023, + ".toInt": 48024, + "Ġenchant": 48025, + "Ġstunned": 48026, + "Ġpoi": 48027, + "/code": 48028, + "adm": 48029, + ".databinding": 48030, + "ĠLorem": 48031, + "________________________________________________________________": 48032, + "Ġledger": 48033, + "Ġcara": 48034, + "ĠGir": 48035, + "Ġwaits": 48036, + "Uno": 48037, + "Ġcwd": 48038, + "è¾ij": 48039, + "ĠTResult": 48040, + "Ġrejo": 48041, + "Ġemitted": 48042, + "ĠWestminster": 48043, + "ä¸Ģ个": 48044, + "nek": 48045, + "_Tis": 48046, + "Ġenact": 48047, + "ĉwith": 48048, + "orgia": 48049, + "Ġjue": 48050, + "Perform": 48051, + "SPATH": 48052, + ".topic": 48053, + "ĠDaten": 48054, + "ầ": 48055, + "Ġsitio": 48056, + "_MM": 48057, + "\"So": 48058, + "bial": 48059, + "Ġscoped": 48060, + "Requires": 48061, + "ĠTOTAL": 48062, + "ĠChancellor": 48063, + "(contents": 48064, + "Ġstealth": 48065, + "devices": 48066, + "-pass": 48067, + "ilih": 48068, + "ĠMalcolm": 48069, + "ĠDepot": 48070, + "Ġconfigur": 48071, + "aussian": 48072, + "_constraint": 48073, + "веÑĤ": 48074, + "GRA": 48075, + "ĠRates": 48076, + ".dataGridViewTextBoxColumn": 48077, + "ĠNobel": 48078, + "itics": 48079, + "Ġignorant": 48080, + "ĠReporter": 48081, + "ĠEbola": 48082, + "ĠShock": 48083, + "_relation": 48084, + "ĠNinja": 48085, + ")c": 48086, + "Ġticker": 48087, + ".isChecked": 48088, + "ĠSuppliers": 48089, + "ĠRapid": 48090, + "Levels": 48091, + "âĤ¬âĦ¢": 48092, + "ĉqueue": 48093, + "Ġchop": 48094, + "ĠUnix": 48095, + "reject": 48096, + "-calendar": 48097, + "(sort": 48098, + "ène": 48099, + "ercicio": 48100, + "Ġhect": 48101, + "CALLTYPE": 48102, + "roupon": 48103, + "Ġrentals": 48104, + "authors": 48105, + "{name": 48106, + "ĠFIFO": 48107, + "Ġlassen": 48108, + "ĠNous": 48109, + "Ġsnapped": 48110, + "Ġfertility": 48111, + "\"log": 48112, + "clicked": 48113, + "Ġplanting": 48114, + "Ġgb": 48115, + "/output": 48116, + "PEAT": 48117, + "Ġcategoria": 48118, + "Ġbach": 48119, + "Professor": 48120, + "inth": 48121, + "\"]čĊ": 48122, + "Recorder": 48123, + "serde": 48124, + "ĠTransmission": 48125, + "trad": 48126, + "Ġturbo": 48127, + "_VERTEX": 48128, + "\\Event": 48129, + "ilver": 48130, + "Ġbodily": 48131, + "ĠSources": 48132, + "Ġkillings": 48133, + ".xrTableCell": 48134, + "Ġfolded": 48135, + "/legal": 48136, + "uner": 48137, + "ĠRifle": 48138, + "ĠMIDI": 48139, + "_SelectedIndexChanged": 48140, + ".SizeType": 48141, + "ĠWebSocket": 48142, + "Ġseleccion": 48143, + "Sand": 48144, + "otros": 48145, + "Ġenvision": 48146, + "/etc": 48147, + "ĠMelissa": 48148, + "Spot": 48149, + "ное": 48150, + "_ARM": 48151, + "Attempt": 48152, + "ĠBI": 48153, + "ãģĶ": 48154, + "ĠDU": 48155, + "Ġbacklash": 48156, + "stride": 48157, + "/classes": 48158, + "ĠtextColor": 48159, + "_staff": 48160, + "oblin": 48161, + "agenta": 48162, + ".collections": 48163, + "illage": 48164, + "'čĊčĊ": 48165, + "flatten": 48166, + "_sales": 48167, + "_MASTER": 48168, + "TW": 48169, + "_da": 48170, + "Pitch": 48171, + "phies": 48172, + "Ġzombies": 48173, + "ĠVERY": 48174, + "ĠPharmacy": 48175, + "ĠprogressBar": 48176, + "Ġhashtag": 48177, + "Sidebar": 48178, + "@stop": 48179, + "(pc": 48180, + "олж": 48181, + "MAKE": 48182, + "ĠCoron": 48183, + "Ġkvinner": 48184, + "ĠMaid": 48185, + "bob": 48186, + ".titleLabel": 48187, + "Ġsuccesses": 48188, + "ĠDemocracy": 48189, + "ĠSurgery": 48190, + "Ġcougar": 48191, + "Ġcurso": 48192, + "Ġloro": 48193, + "istency": 48194, + "Senior": 48195, + "æk": 48196, + "ĠAAA": 48197, + "ĠBOOK": 48198, + "ко": 48199, + "WSTR": 48200, + "Ġ*/,Ċ": 48201, + "oyal": 48202, + ".vector": 48203, + "ĠSPEC": 48204, + "SSF": 48205, + "Ġcompuls": 48206, + "ĠAppeals": 48207, + "ĠWinston": 48208, + "ĠMockito": 48209, + "contrib": 48210, + ".available": 48211, + "entityManager": 48212, + "arias": 48213, + "_sale": 48214, + "_rs": 48215, + "Ġdecoding": 48216, + "Ġlocator": 48217, + "olith": 48218, + "Ġkol": 48219, + "Ġascii": 48220, + "ĠRut": 48221, + "/interface": 48222, + "ĉĉĉĉĉĉĠĠĠ": 48223, + "ĠNumer": 48224, + ".flip": 48225, + "-del": 48226, + "Ġbolster": 48227, + "onomic": 48228, + "Ġzm": 48229, + "LG": 48230, + "FindBy": 48231, + "Ġadaptive": 48232, + "loo": 48233, + "Ġvue": 48234, + "(reverse": 48235, + "_canvas": 48236, + ".roles": 48237, + "ificado": 48238, + "venient": 48239, + "\"As": 48240, + "ĠEntr": 48241, + "aligned": 48242, + "Ġbereits": 48243, + "///ĊĊ": 48244, + ".gwt": 48245, + ".employee": 48246, + "_cli": 48247, + "Ġanticipate": 48248, + "éĻIJ": 48249, + "Ġpik": 48250, + "Ġmushrooms": 48251, + "(tt": 48252, + "Ġoma": 48253, + "ĠSanchez": 48254, + "_google": 48255, + ".Valid": 48256, + "ĠFileName": 48257, + "ivative": 48258, + "ked": 48259, + "-war": 48260, + "Ġmaturity": 48261, + "ид": 48262, + "Ġminer": 48263, + "Reducers": 48264, + "ĠLatLng": 48265, + "_STD": 48266, + "Digits": 48267, + "Calc": 48268, + "-upload": 48269, + "Ġhandic": 48270, + "ีà¹Ī": 48271, + "egrated": 48272, + "ĠSTM": 48273, + "Clients": 48274, + "ĠTurbo": 48275, + "SYNC": 48276, + "Ġphotographers": 48277, + ".Out": 48278, + ".character": 48279, + "BUILD": 48280, + ".unlock": 48281, + "Ġarises": 48282, + "ĠCommands": 48283, + "(\"\");čĊ": 48284, + "_FORE": 48285, + ";',": 48286, + "+\"'": 48287, + ".Images": 48288, + "\"){": 48289, + "ĠMeyer": 48290, + "Ġnegatively": 48291, + "ĠDLL": 48292, + "Ġexe": 48293, + "Ġdeficiency": 48294, + "Ġwildly": 48295, + "-switch": 48296, + "construction": 48297, + "Ġexceptionally": 48298, + "ĠLiz": 48299, + "/java": 48300, + "Ġtheirs": 48301, + "ĠContemporary": 48302, + "lis": 48303, + ".fillRect": 48304, + "ĠNFC": 48305, + "Ġrehe": 48306, + "(numbers": 48307, + "Ġraster": 48308, + "Ġfiguring": 48309, + "Ġshowc": 48310, + "ĠJill": 48311, + "Ġarcade": 48312, + "ĠConstructs": 48313, + "mdl": 48314, + "('|": 48315, + "Ġidentifiers": 48316, + "Ġstellar": 48317, + "(Connection": 48318, + "Ġ\"{{": 48319, + "yor": 48320, + "(mysqli": 48321, + "Ġdove": 48322, + "OfBirth": 48323, + ".disconnect": 48324, + "_hi": 48325, + "Ġzwischen": 48326, + "ĠGrund": 48327, + "iros": 48328, + "_Array": 48329, + ".onclick": 48330, + "ansom": 48331, + "Answers": 48332, + "ĉremove": 48333, + "Fa": 48334, + "Ġhurry": 48335, + "-inf": 48336, + "ĠgetClass": 48337, + "ĠRegulation": 48338, + "ĠFLAGS": 48339, + "misc": 48340, + "Ken": 48341, + "_heading": 48342, + "GHz": 48343, + "-entry": 48344, + "Ġbiography": 48345, + "Sig": 48346, + "-mf": 48347, + "Watcher": 48348, + "âĢľA": 48349, + "}px": 48350, + "Ġspicy": 48351, + "_sq": 48352, + "Lost": 48353, + "(track": 48354, + "али": 48355, + "Descending": 48356, + "((": 48553, + "survey": 48554, + "Ġíĺ": 48555, + "...')Ċ": 48556, + "ĠDivider": 48557, + "osl": 48558, + "_CANCEL": 48559, + "_prepare": 48560, + "stin": 48561, + "ĠHeath": 48562, + ".PrimaryKey": 48563, + "ĠâĨIJ": 48564, + "ĠLocalDateTime": 48565, + "Ġcooperative": 48566, + "Learning": 48567, + ".enqueue": 48568, + "Ġgoog": 48569, + "ĠRegression": 48570, + "imates": 48571, + "Ġvoyeur": 48572, + "ĠDrink": 48573, + "plug": 48574, + "Ġlender": 48575, + "mana": 48576, + "Ġpersonnes": 48577, + "ypse": 48578, + "Ġunlink": 48579, + "ĠRavens": 48580, + "Ġhurd": 48581, + "Ġperiodically": 48582, + "ARGS": 48583, + "ĠGH": 48584, + "characters": 48585, + "...\"ĊĊ": 48586, + "-establish": 48587, + "Ġdn": 48588, + "(condition": 48589, + "ĠGravity": 48590, + "Ġestas": 48591, + "_focus": 48592, + "Creature": 48593, + "(site": 48594, + "Ġcarr": 48595, + "ĠRL": 48596, + "ĠRI": 48597, + "ĠMoto": 48598, + "ASF": 48599, + "ĠLuckily": 48600, + "ĉRoute": 48601, + "Ġentropy": 48602, + "(\",\"": 48603, + "Collect": 48604, + "(contact": 48605, + "ĠFlorence": 48606, + "Ġpremiums": 48607, + "Ġlifecycle": 48608, + "Ġbans": 48609, + "xef": 48610, + "WebKit": 48611, + "ĠFloating": 48612, + "Ġcosa": 48613, + "Specific": 48614, + "ĠLoans": 48615, + "bread": 48616, + "Ġdescriptors": 48617, + "Ġ{:.": 48618, + "THREAD": 48619, + "ĠTrent": 48620, + "Ġscop": 48621, + "QA": 48622, + "ĠAntar": 48623, + "pel": 48624, + "_difference": 48625, + "_changes": 48626, + "(...)": 48627, + "ĠRotation": 48628, + "ĠLGPL": 48629, + "ĠJUST": 48630, + "(Task": 48631, + "_subset": 48632, + "ĠTRANS": 48633, + "åĬĽ": 48634, + "ĠScout": 48635, + "-popup": 48636, + "Ġsmoked": 48637, + "_Class": 48638, + "Ġturnover": 48639, + "brakk": 48640, + "ĠRocky": 48641, + "tas": 48642, + ".RegularExpressions": 48643, + "ĠElliott": 48644, + "ĠSpinner": 48645, + "DUCTION": 48646, + "Ġlibre": 48647, + "Ġmolto": 48648, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 48649, + "ĠFTP": 48650, + "mpeg": 48651, + "(features": 48652, + "Ġbald": 48653, + "ĠVid": 48654, + "Ġshouting": 48655, + "Lint": 48656, + "Ġsockets": 48657, + "Ġprow": 48658, + "Ġnouvelle": 48659, + "iscard": 48660, + "ĠSponsor": 48661, + "Ġconsulta": 48662, + ")));": 48663, + "Indian": 48664, + "ĠRaspberry": 48665, + "Ġteammate": 48666, + "ĠJWT": 48667, + "ĠGhana": 48668, + "Ġcakes": 48669, + "primer": 48670, + "forma": 48671, + "ergarten": 48672, + "_Manager": 48673, + "Ġpreseason": 48674, + "GAME": 48675, + "|\"": 48676, + "ĠBrock": 48677, + "Ġoccupy": 48678, + "Ġdecorations": 48679, + "ánd": 48680, + "Ġcot": 48681, + "Ġparan": 48682, + "Disk": 48683, + "remain": 48684, + ">?": 48685, + "Strong": 48686, + "Ġfrance": 48687, + "ĠEra": 48688, + "-cr": 48689, + ".BufferedReader": 48690, + "ĠParadise": 48691, + "ĠVAT": 48692, + "ĠAnders": 48693, + "Ġlimb": 48694, + "ampoo": 48695, + "Ġimperative": 48696, + "UTILITY": 48697, + "ĠRecognition": 48698, + "Ġragazze": 48699, + "Ġpops": 48700, + "ypress": 48701, + "Ġembargo": 48702, + "//{Ċ": 48703, + "Ġsyll": 48704, + "PTR": 48705, + "åŃĺåľ¨": 48706, + "Ġdidnt": 48707, + "Mailer": 48708, + "Ġacademics": 48709, + "ĠFrauen": 48710, + "neider": 48711, + "-rel": 48712, + "Ġrainbow": 48713, + "(In": 48714, + "Ġsliced": 48715, + "=============Ċ": 48716, + "(send": 48717, + "NSMutableDictionary": 48718, + "vos": 48719, + "(package": 48720, + "Ġordinance": 48721, + "viewer": 48722, + "ĠSantos": 48723, + "-selling": 48724, + "Ġgov": 48725, + "ettle": 48726, + "Ġfounders": 48727, + "Ġwaking": 48728, + "slashes": 48729, + "-pound": 48730, + "recht": 48731, + "ات": 48732, + ".onClick": 48733, + "Ġnord": 48734, + "ständ": 48735, + "_when": 48736, + "UTERS": 48737, + "icc": 48738, + "Ġcapsule": 48739, + "ĠWid": 48740, + "Marc": 48741, + "ุ": 48742, + "rored": 48743, + "UGE": 48744, + "LOUD": 48745, + "ĠAudit": 48746, + "ipients": 48747, + "opian": 48748, + "ĠSue": 48749, + "Ġwurden": 48750, + ".Helpers": 48751, + "Ġfactions": 48752, + "[np": 48753, + "-than": 48754, + "Ġreco": 48755, + "Ġkas": 48756, + "Ġcmds": 48757, + "/network": 48758, + "xbf": 48759, + "getColor": 48760, + "Ġbiased": 48761, + "ĠLak": 48762, + "Datas": 48763, + "vents": 48764, + "Ġë²": 48765, + "_PS": 48766, + ".Validate": 48767, + "Invoker": 48768, + "Ġneuen": 48769, + "Ġjuvenile": 48770, + "VISION": 48771, + "Ġdevote": 48772, + "Ġlinha": 48773, + "Ġdiscounted": 48774, + "\\Config": 48775, + "Ġworthwhile": 48776, + "Ġskinny": 48777, + "ĠCourses": 48778, + "leys": 48779, + "ĠMortgage": 48780, + "Kevin": 48781, + "Ġannounces": 48782, + "])*": 48783, + "reservation": 48784, + "Ġæķ°": 48785, + "Ġprejudice": 48786, + "ĠStringComparison": 48787, + "Ġbeard": 48788, + "-win": 48789, + "ĠSão": 48790, + "ĉms": 48791, + "jal": 48792, + "ĠEarn": 48793, + "_ports": 48794, + "ĠNombre": 48795, + "_COR": 48796, + "ĠBUILD": 48797, + ".sound": 48798, + "Yellow": 48799, + "Ġlinebacker": 48800, + "Ġcharitable": 48801, + "jug": 48802, + "_NONNULL": 48803, + "ĠDental": 48804, + "\">${": 48805, + "ĉmatch": 48806, + "Russian": 48807, + "Ġversch": 48808, + "Ġpinned": 48809, + "Ġadopting": 48810, + "OptionsMenu": 48811, + "Pag": 48812, + "Ġpairing": 48813, + "Ġtread": 48814, + "ercises": 48815, + "ĠSpread": 48816, + ")i": 48817, + "ĠBAD": 48818, + "_tf": 48819, + "UIImageView": 48820, + "populate": 48821, + "bab": 48822, + "ĠÏĥ": 48823, + "[++": 48824, + "Ġopioid": 48825, + "Ġ##Ċ": 48826, + "dtype": 48827, + "ĠStarts": 48828, + "('/')": 48829, + "Ġpersonals": 48830, + "-market": 48831, + "Ġredundant": 48832, + "ĠEssential": 48833, + "Ġscrapy": 48834, + "Ġим": 48835, + "acl": 48836, + "Ġcrear": 48837, + "ĠBend": 48838, + "Ġrelieve": 48839, + "-room": 48840, + "wife": 48841, + "ĠvÃł": 48842, + "ĠQPoint": 48843, + "Ġquasi": 48844, + "ĠmethodName": 48845, + "\\xc": 48846, + "ĠPeru": 48847, + "/The": 48848, + ".orm": 48849, + "Ġviz": 48850, + "/pdf": 48851, + "Located": 48852, + "Ġconfrontation": 48853, + "ĠChampionships": 48854, + "Ġhypert": 48855, + "Ġdj": 48856, + "ĠUserInfo": 48857, + "ĠåĪĽå»º": 48858, + "\\xb": 48859, + "(sim": 48860, + "Ġ==Ċ": 48861, + "Ġstaging": 48862, + "Ġdrastically": 48863, + "åѦ": 48864, + "lords": 48865, + ".less": 48866, + "ведиÑĤе": 48867, + "ĠBucket": 48868, + "ĠMam": 48869, + ".term": 48870, + "_pi": 48871, + "czy": 48872, + ".pub": 48873, + "precio": 48874, + "ĠVirt": 48875, + "Ġroman": 48876, + "itat": 48877, + "Lex": 48878, + "_infos": 48879, + "İ": 48880, + ".other": 48881, + "VELO": 48882, + "Ġponder": 48883, + "Ġhanno": 48884, + "(Page": 48885, + "doi": 48886, + "Ġpolite": 48887, + "Ġprogrammer": 48888, + "Dies": 48889, + "$d": 48890, + "Ġreplication": 48891, + "addColumn": 48892, + "frican": 48893, + "Ġleng": 48894, + "beer": 48895, + "oit": 48896, + "Ġwasting": 48897, + "ylim": 48898, + "measure": 48899, + "Neg": 48900, + "Ġpartie": 48901, + ".console": 48902, + "ĠGuinea": 48903, + "TEL": 48904, + "_fact": 48905, + ".chunk": 48906, + "Ġlent": 48907, + "Ġaller": 48908, + "Ġà¤ķ": 48909, + "_idle": 48910, + "Ġadmissions": 48911, + "JSONArray": 48912, + "Ġvibration": 48913, + ".helpers": 48914, + "å¤ĸ": 48915, + "Ġhen": 48916, + "john": 48917, + "ĠìĥĿ": 48918, + "Ġjudgement": 48919, + "Ġgeen": 48920, + "terra": 48921, + "^{": 48922, + "ĠIz": 48923, + "Ġcâ": 48924, + "instances": 48925, + "Ġthreatens": 48926, + "Ġmüssen": 48927, + "KindOfClass": 48928, + "Ġstorytelling": 48929, + "_demo": 48930, + "rias": 48931, + "Privacy": 48932, + "hift": 48933, + "ĠYi": 48934, + "esor": 48935, + "íķł": 48936, + "ensitivity": 48937, + ".Writer": 48938, + "à¸Ĥ": 48939, + "District": 48940, + ".getJSONObject": 48941, + "Impro": 48942, + "(getResources": 48943, + "ĠSPELL": 48944, + "roduce": 48945, + "Ġslowed": 48946, + "Ġlinewidth": 48947, + "Ġhonesty": 48948, + "ĠCoord": 48949, + "ĠFork": 48950, + "ĠDispatchQueue": 48951, + "ĠCliff": 48952, + "ĠWiring": 48953, + "_TIMESTAMP": 48954, + "ollah": 48955, + "avoid": 48956, + "++];Ċ": 48957, + "semantic": 48958, + "-css": 48959, + "Ġveto": 48960, + "ĠMerr": 48961, + "Ġlegislators": 48962, + "CEEDED": 48963, + "Ġquestionnaire": 48964, + "ĠPills": 48965, + "Calculate": 48966, + "(core": 48967, + "'e": 48968, + "Ġdislike": 48969, + "ĠPreferences": 48970, + "_EXTERNAL": 48971, + "è°ĥ": 48972, + "Ġdodge": 48973, + "æľįåĬ¡": 48974, + ".names": 48975, + ".drawImage": 48976, + "_prom": 48977, + "uckland": 48978, + "Ġ<$>": 48979, + "ız": 48980, + "/site": 48981, + "项": 48982, + "rophe": 48983, + "Ġcompelled": 48984, + "Ġlaptops": 48985, + "Ġuni": 48986, + "CLOSE": 48987, + "Ġcasualties": 48988, + "ĠUniform": 48989, + "Terminal": 48990, + ".\",\"": 48991, + "DAT": 48992, + "(TreeNode": 48993, + "ĠGandhi": 48994, + "(stmt": 48995, + "AXB": 48996, + "*M": 48997, + "Ġumbrella": 48998, + "animal": 48999, + "Ġgrpc": 49000, + "Ġwhereby": 49001, + "Ġfloats": 49002, + "ĉarg": 49003, + "Ġdbg": 49004, + "Ġexceeding": 49005, + "EventType": 49006, + ".SaveChangesAsync": 49007, + "Ġ{{{": 49008, + "Ġowed": 49009, + "ahrenheit": 49010, + "Ġì§": 49011, + "Ġequipo": 49012, + "urai": 49013, + "Ġidol": 49014, + "]\")Ċ": 49015, + "_major": 49016, + "Ġentirety": 49017, + "ingerprint": 49018, + "ços": 49019, + "/account": 49020, + "ĉright": 49021, + "ursos": 49022, + "ĠEDT": 49023, + "_INSERT": 49024, + "Ġshining": 49025, + "Ġ<:": 49026, + "EdgeInsets": 49027, + "Ġcolonies": 49028, + ".IM": 49029, + "ĉĠĉ": 49030, + "ROAD": 49031, + "CCCC": 49032, + "placing": 49033, + "ĠgetActivity": 49034, + "emacs": 49035, + "'%(": 49036, + ".clicked": 49037, + "ĠThem": 49038, + "isia": 49039, + "Buscar": 49040, + ".rename": 49041, + "Ġoath": 49042, + "Ġafterward": 49043, + "ĠUFO": 49044, + "APS": 49045, + "ĠJacksonville": 49046, + ".some": 49047, + "Confirmed": 49048, + ".scan": 49049, + "igInteger": 49050, + "Decorator": 49051, + "shield": 49052, + "ressive": 49053, + ".did": 49054, + "请è¾ĵåħ¥": 49055, + "Ġshutter": 49056, + "Dam": 49057, + "Ġparenting": 49058, + "eyed": 49059, + "$item": 49060, + "-develop": 49061, + "Ġextracts": 49062, + "Ġdecentralized": 49063, + "ĠElsa": 49064, + "_spin": 49065, + "])+": 49066, + "-initial": 49067, + "Ġmultitude": 49068, + "Ġsensory": 49069, + "ĠMODEL": 49070, + "Ġsafeguard": 49071, + "ì¹": 49072, + "Ġhunters": 49073, + "ĠTiny": 49074, + "INO": 49075, + "decorate": 49076, + "ĠNoSuch": 49077, + "Ho": 49078, + "(Response": 49079, + "Ġruler": 49080, + "ĉshort": 49081, + "Ġcaster": 49082, + "ĠclientId": 49083, + "Ġpdb": 49084, + "ëıĦ": 49085, + "itic": 49086, + "ĠGameState": 49087, + "ĠnewItem": 49088, + ")ĊĊĊĊĊĊ": 49089, + "ouis": 49090, + "noc": 49091, + ".BLACK": 49092, + "_VECTOR": 49093, + "----------();": 49381, + ".getP": 49382, + "anye": 49383, + "Ġneuron": 49384, + "ifold": 49385, + "ĠKnown": 49386, + "Bitcoin": 49387, + "Anyway": 49388, + "ayette": 49389, + "Ġ'['": 49390, + "Ãłnh": 49391, + "mgr": 49392, + "Ġcorrelated": 49393, + "Ġnause": 49394, + "Ġmentality": 49395, + "hasMany": 49396, + "ĠFG": 49397, + "ampie": 49398, + "ITU": 49399, + "Fs": 49400, + ".Sp": 49401, + "_between": 49402, + "Dependencies": 49403, + "oug": 49404, + "Placeholder": 49405, + "=text": 49406, + "ĠManaging": 49407, + "ocalypse": 49408, + "åĮĹ": 49409, + "_mag": 49410, + "fld": 49411, + "âij": 49412, + "CAM": 49413, + "ĠHelpers": 49414, + "Ġdost": 49415, + "/out": 49416, + "Ġassassination": 49417, + ".getImage": 49418, + "ĠKenny": 49419, + ".')ĊĊ": 49420, + "){//": 49421, + "ĠRanger": 49422, + "Ġgek": 49423, + "Ġsincere": 49424, + "čĊ": 49627, + ".getResources": 49628, + "Ġlump": 49629, + "_consts": 49630, + "(ext": 49631, + "ĉdir": 49632, + "âĿ": 49633, + "ĠpaddingTop": 49634, + "Ġobsession": 49635, + "Ġbanning": 49636, + "ĠAppModule": 49637, + "Ġpartisan": 49638, + "Ġcatalogue": 49639, + "Ġminors": 49640, + "Ġpitches": 49641, + "weep": 49642, + "Ġundertake": 49643, + "Ġthemed": 49644, + "audit": 49645, + ".scrollTop": 49646, + "Ġrer": 49647, + "Ġsymptom": 49648, + "Ġopenings": 49649, + ".blocks": 49650, + "openid": 49651, + "Ġassh": 49652, + "-save": 49653, + "ĠPig": 49654, + "Ġregain": 49655, + "Ġinicial": 49656, + "/favicon": 49657, + "ĉexp": 49658, + "Ġspices": 49659, + "iska": 49660, + "claims": 49661, + "mak": 49662, + "definitions": 49663, + "Ġcorrespondent": 49664, + "ĠCannabis": 49665, + "__,Ċ": 49666, + "ĠLucky": 49667, + "ĠGaussian": 49668, + "ĠNearly": 49669, + "CAD": 49670, + "']]Ċ": 49671, + "Ġadequately": 49672, + "ĠTITLE": 49673, + "constitutional": 49674, + "-mm": 49675, + "_override": 49676, + "Ġblas": 49677, + ".readyState": 49678, + "Ġreminis": 49679, + "Ġreinforced": 49680, + "ĠCollabor": 49681, + "Ġdecorating": 49682, + "Ġbachelor": 49683, + "ERRUPT": 49684, + "Ġupright": 49685, + "ipation": 49686, + "ĠNoble": 49687, + "ĠvalueForKey": 49688, + "ĠsetLoading": 49689, + ".Ignore": 49690, + "åģ": 49691, + "Globals": 49692, + "ĠMent": 49693, + "ASSES": 49694, + "Ġlimbs": 49695, + "ĠHUD": 49696, + "inci": 49697, + ".iv": 49698, + "ĠQModelIndex": 49699, + "Fuse": 49700, + "Ġpedal": 49701, + "_FREQ": 49702, + "(verbose": 49703, + "Ġlongitud": 49704, + "ĠCharter": 49705, + "ê·¸": 49706, + "Ġbundles": 49707, + ".ignore": 49708, + "umbo": 49709, + "EMA": 49710, + ".......": 49711, + "sx": 49712, + ".Card": 49713, + "Ġheute": 49714, + "Ġsteer": 49715, + "jumlah": 49716, + "Ġ{_": 49717, + "_Checked": 49718, + "Ġfax": 49719, + "ĠGust": 49720, + "itchens": 49721, + "Ġ))ĊĊ": 49722, + "Ġremarkably": 49723, + "/XML": 49724, + "-remove": 49725, + "_bt": 49726, + "Ġincub": 49727, + ".package": 49728, + ".currentThread": 49729, + "ĠHighlander": 49730, + ".side": 49731, + "splash": 49732, + "Ġici": 49733, + "=D": 49734, + "Ġpuck": 49735, + "Ġballots": 49736, + "Ġhugely": 49737, + "coeff": 49738, + "ĠpData": 49739, + ".COLUMN": 49740, + "ĠHealing": 49741, + "Ġordin": 49742, + "!),": 49743, + "Ġ'',čĊ": 49744, + "(md": 49745, + "ĠSask": 49746, + "čĊ": 49768, + "Ġrá": 49769, + "Ġblunt": 49770, + "ĠImageIcon": 49771, + "ifik": 49772, + "RTC": 49773, + "Ġfibers": 49774, + "Ġtoile": 49775, + ".sent": 49776, + "ĠPyQt": 49777, + "$app": 49778, + "Ġmedio": 49779, + "Ġgranting": 49780, + "Ġtslint": 49781, + "ĠMö": 49782, + "(figsize": 49783, + "Ġhurricane": 49784, + "Ġlifes": 49785, + "ĠÃĦ": 49786, + "rocessing": 49787, + "_standard": 49788, + "-option": 49789, + "')))": 49790, + "Ġvacant": 49791, + "å·¥": 49792, + "ĠHollow": 49793, + "handleChange": 49794, + "Ġdivider": 49795, + "ĠEngineers": 49796, + "Ġsvens": 49797, + "Ġcompliant": 49798, + "tanggal": 49799, + "ĠCredits": 49800, + "ĠEmirates": 49801, + "RuleContext": 49802, + "Ġrealization": 49803, + "Ġdistracted": 49804, + "]+=": 49805, + "Ġaugment": 49806, + "ĠDw": 49807, + "otp": 49808, + "orrent": 49809, + "Editar": 49810, + ".stock": 49811, + "Study": 49812, + "pections": 49813, + "ĠGameManager": 49814, + "=cut": 49815, + "Ġflock": 49816, + "ĠRomans": 49817, + "them": 49818, + "-hop": 49819, + "Ġscreenshots": 49820, + "Ġ/*!Ċ": 49821, + "Ġconversions": 49822, + "Ġnormalization": 49823, + "(configuration": 49824, + "Ġaeros": 49825, + "_security": 49826, + "!'Ċ": 49827, + "Bonus": 49828, + "ĠDRIVER": 49829, + "ĉDate": 49830, + "tie": 49831, + "ĠWyoming": 49832, + "Stand": 49833, + "itre": 49834, + "Ġshoppers": 49835, + "Ġdisadvantage": 49836, + "Ġliking": 49837, + "ç¬ij": 49838, + "Ġunderstandable": 49839, + "SEE": 49840, + "Ġhoy": 49841, + "Ġninete": 49842, + "Ġconfer": 49843, + "Ġnowrap": 49844, + "ĠVern": 49845, + ",čĊčĊ": 49846, + "imestep": 49847, + "LayoutManager": 49848, + "à·": 49849, + "ĉwait": 49850, + "PLETED": 49851, + "Japan": 49852, + "Ġinduce": 49853, + "Ġå¯": 49854, + "озв": 49855, + "_ENDPOINT": 49856, + ".horizontal": 49857, + "Ġaccelerated": 49858, + "rimon": 49859, + "IVES": 49860, + "Transactions": 49861, + "Lean": 49862, + "ĠSOUR": 49863, + "whether": 49864, + "yg": 49865, + "Ġoid": 49866, + "ĠEntityManager": 49867, + "OUNTRY": 49868, + "Ġfila": 49869, + "OLUMNS": 49870, + "INUE": 49871, + "ĠAnchor": 49872, + "TRAN": 49873, + "woo": 49874, + "blockquote": 49875, + "ĠNurse": 49876, + "ĠCarp": 49877, + "Ġredeem": 49878, + ".try": 49879, + "ĠJP": 49880, + "Ġtimestamps": 49881, + "Ġ?>\"><": 49882, + "ĠREMOVE": 49883, + "ĠStarbucks": 49884, + "Really": 49885, + "Ġflooded": 49886, + ".Callback": 49887, + "DropDown": 49888, + "ipro": 49889, + "Ġtended": 49890, + "lte": 49891, + "Ġproportions": 49892, + "-te": 49893, + "ĠRena": 49894, + "licate": 49895, + "forces": 49896, + ".extra": 49897, + ".authenticate": 49898, + "вод": 49899, + "¡°": 49900, + "ĠforControlEvents": 49901, + "Ġsenha": 49902, + "Ġkein": 49903, + "Ġminist": 49904, + "ĠPreference": 49905, + "ĠTelegraph": 49906, + "Ñĥп": 49907, + "strpos": 49908, + "Ġillnesses": 49909, + "Ġpigs": 49910, + "ĠgetIntent": 49911, + "Sol": 49912, + "Ġ¡": 49913, + "(cpu": 49914, + "[prop": 49915, + "screens": 49916, + "');?>": 49917, + "ĠActs": 49918, + "Ġstrdup": 49919, + "Ġaverages": 49920, + "anal": 49921, + "ĠCasual": 49922, + "GroupBox": 49923, + "ĠHandbook": 49924, + "/comments": 49925, + "Ġnumbered": 49926, + "Ġbroadcasting": 49927, + "çĽij": 49928, + ".nativeElement": 49929, + ".mu": 49930, + "ĠupdatedAt": 49931, + "ĠDoesn": 49932, + ".AC": 49933, + ".coll": 49934, + "Ġrecorder": 49935, + "_sha": 49936, + "Bg": 49937, + "bil": 49938, + "Ġbolts": 49939, + "Ġç¬": 49940, + "Ġimposing": 49941, + "ĠInformationen": 49942, + "_flashdata": 49943, + "economic": 49944, + "Remark": 49945, + "ucas": 49946, + "ĠOfficers": 49947, + "ĠTER": 49948, + "Walk": 49949, + "Ġmercado": 49950, + "_generate": 49951, + "HY": 49952, + "Calling": 49953, + "snap": 49954, + "scriptId": 49955, + ".operation": 49956, + "ĠFlame": 49957, + "liness": 49958, + "Ġrented": 49959, + "_toggle": 49960, + "-changing": 49961, + "ĠTY": 49962, + "'util": 49963, + "EEP": 49964, + "Ġgraphql": 49965, + "ĠUni": 49966, + "Ġimpulse": 49967, + ".Basic": 49968, + "Ġenergies": 49969, + "MARY": 49970, + "ĠMarcel": 49971, + "Ġmortal": 49972, + "Ġfres": 49973, + "mens": 49974, + "motion": 49975, + "Ġsampled": 49976, + "âĢľThat": 49977, + "iday": 49978, + "quipment": 49979, + "getInt": 49980, + "ĠAbsolute": 49981, + ",'\"": 49982, + "uned": 49983, + ".share": 49984, + "Ġ})(": 49985, + "mmm": 49986, + "ĠRising": 49987, + "ä»»": 49988, + "Ġunemployed": 49989, + "xfa": 49990, + ".follow": 49991, + "ĉĉĉĉĠĠĠĠĠĠ": 49992, + "slt": 49993, + ".Phone": 49994, + "Ġknives": 49995, + "Ġeve": 49996, + "onClick": 49997, + "]))čĊ": 49998, + "ĠWitness": 49999, + "ĉNS": 50000, + "ĠEOS": 50001, + "ĠStefan": 50002, + "ĠPriest": 50003, + "âĢĶwhich": 50004, + "GetString": 50005, + ".By": 50006, + "Ġupstairs": 50007, + "Ġdetriment": 50008, + "broken": 50009, + "embro": 50010, + "Ġnicotine": 50011, + "ilion": 50012, + "Ġastonishing": 50013, + "_aff": 50014, + "ĠLesson": 50015, + "Ġaccidental": 50016, + "odor": 50017, + "Ġdecir": 50018, + "ĠnewName": 50019, + "+.": 50020, + "缸": 50021, + "igslist": 50022, + "ĠGithub": 50023, + "Ġsuccessive": 50024, + "racial": 50025, + "Ġenviron": 50026, + "éªĮè¯ģ": 50027, + "Ġredirected": 50028, + "TOTAL": 50029, + "Ġgrabbing": 50030, + "ĠLance": 50031, + "Ġforfe": 50032, + "_CB": 50033, + "å¾®": 50034, + "Elapsed": 50035, + "_way": 50036, + "(DialogInterface": 50037, + "_measure": 50038, + "xbb": 50039, + "Dog": 50040, + "Depart": 50041, + "-src": 50042, + "resolver": 50043, + "withstanding": 50044, + "_shell": 50045, + "ĠLastName": 50046, + "ĠAviation": 50047, + "Ġbeginner": 50048, + "(\"%.": 50049, + "(tool": 50050, + "Ġнов": 50051, + ":init": 50052, + "(API": 50053, + "ĠMorrison": 50054, + "vtColor": 50055, + "Ġstaple": 50056, + "/INFO": 50057, + "Ġsupernatural": 50058, + "Ġsteak": 50059, + "timeline": 50060, + "zzle": 50061, + "\"`ĊĊ": 50062, + "Secondary": 50063, + "ĠNepal": 50064, + ".StringUtils": 50065, + "Ġadam": 50066, + "Ġ(...": 50067, + "Ġsubstitution": 50068, + "Ġboarding": 50069, + "ĠKeyword": 50070, + "ĠAssault": 50071, + "dbcTemplate": 50072, + "ĠorderId": 50073, + "(engine": 50074, + ".assertThat": 50075, + "ĠVenus": 50076, + "Ġhomicide": 50077, + "ĠAval": 50078, + "Ġgutter": 50079, + "ĠSupported": 50080, + "/part": 50081, + "Ġacclaimed": 50082, + "Histor": 50083, + "Ġmeses": 50084, + "über": 50085, + "ĠRenew": 50086, + "Ġgras": 50087, + "ĠEk": 50088, + "Ġinfile": 50089, + "indy": 50090, + ".music": 50091, + ".Scroll": 50092, + "ĠAges": 50093, + "ĠNaruto": 50094, + "ĠGather": 50095, + "Ġconfirming": 50096, + "=(\"": 50097, + "Ġpitched": 50098, + "oley": 50099, + "France": 50100, + "+'\"": 50101, + "$total": 50102, + "Ġonde": 50103, + "Ġditch": 50104, + "_sigma": 50105, + "Ġcontinuity": 50106, + "reward": 50107, + "-load": 50108, + "Ġproceso": 50109, + "Locked": 50110, + "staw": 50111, + "Ġspinal": 50112, + "lazy": 50113, + "!==": 50114, + "jest": 50115, + "Ġdun": 50116, + "ĠRodgers": 50117, + "ĉgrid": 50118, + "Ġlogos": 50119, + "ĠBengal": 50120, + ".super": 50121, + "Provides": 50122, + "Ġnutrient": 50123, + ".Timestamp": 50124, + "IZATION": 50125, + "åĨĮ": 50126, + "Ġfats": 50127, + "ĠXxx": 50128, + "ctica": 50129, + "Targets": 50130, + "Ġcontours": 50131, + "Ġreordered": 50132, + ":Array": 50133, + "Ġtolerate": 50134, + "Vir": 50135, + "Ġterribly": 50136, + "Ġbricks": 50137, + "(&_": 50138, + "hb": 50139, + "Portal": 50140, + "ĠBread": 50141, + ".which": 50142, + "ÂŃt": 50143, + "asInstanceOf": 50144, + "Ġjobject": 50145, + "ĉlength": 50146, + "_MT": 50147, + ";\">čĊ": 50148, + "_EXIST": 50149, + "Ġmaternal": 50150, + "REL": 50151, + "Ġê²½ìļ°": 50152, + "hee": 50153, + "Ġlayouts": 50154, + "ĠLap": 50155, + "aisy": 50156, + "Ġstumbled": 50157, + "ĠUIG": 50158, + "ĠSco": 50159, + "Ġimpaired": 50160, + "RESSED": 50161, + "Ġabuses": 50162, + "VF": 50163, + "ARB": 50164, + ".NAME": 50165, + "rch": 50166, + "primir": 50167, + "_completed": 50168, + "Ġpenny": 50169, + "Chrome": 50170, + "(begin": 50171, + "ernen": 50172, + "-checkbox": 50173, + "PlainOldData": 50174, + "ĠLPC": 50175, + "rade": 50176, + "spir": 50177, + "Ġconceived": 50178, + "Tips": 50179, + "ĠIoT": 50180, + "ĠGan": 50181, + "èģĶ": 50182, + "Ġbiases": 50183, + "Ġconsultants": 50184, + "pled": 50185, + "_ht": 50186, + "associated": 50187, + "],ĊĊ": 50188, + "Ġdelightful": 50189, + "ĠÑĤек": 50190, + "Helvetica": 50191, + "(load": 50192, + "-expand": 50193, + "_WIDGET": 50194, + "toa": 50195, + "ĠAkt": 50196, + "Ġomn": 50197, + "Ġclauses": 50198, + "Intel": 50199, + "*/}Ċ": 50200, + "_registration": 50201, + "ĠoldValue": 50202, + "Ġrestoring": 50203, + "Ġunreal": 50204, + "OVER": 50205, + "ĉĊĉĊĉĊ": 50206, + "ATS": 50207, + "_probe": 50208, + "Ġdivisor": 50209, + ".updateDynamic": 50210, + "å¹³": 50211, + "Produces": 50212, + "stamp": 50213, + ".jboss": 50214, + "ĉtask": 50215, + "!(:": 50216, + "Ġpsychic": 50217, + "@class": 50218, + "Martin": 50219, + "ĠPassed": 50220, + "clarations": 50221, + "hel": 50222, + "аÑĩ": 50223, + "ĉcopy": 50224, + "-bin": 50225, + "zan": 50226, + "igram": 50227, + "াà¦": 50228, + "(sig": 50229, + "ĠCaval": 50230, + "_##": 50231, + "Ġ%=": 50232, + "outlined": 50233, + "ĠAcid": 50234, + "Ġunpredictable": 50235, + "-dashboard": 50236, + "HexString": 50237, + "+c": 50238, + ".Public": 50239, + "ẩ": 50240, + "Ġconveyor": 50241, + "ĠEB": 50242, + "Ġselects": 50243, + "Ġknocking": 50244, + "ĠCec": 50245, + "IBUTES": 50246, + "owaÄĩ": 50247, + "gatsby": 50248, + "*v": 50249, + "entropy": 50250, + "Ġdispatched": 50251, + "Ġcamel": 50252, + "ĠSaturn": 50253, + "Ġoverweight": 50254, + "(phone": 50255, + "parable": 50256, + "%B": 50257, + "_vectors": 50258, + "Ġbrewing": 50259, + "ĠTk": 50260, + "ĠDownloads": 50261, + "ĠSaved": 50262, + ".Price": 50263, + "Ġcurved": 50264, + "ĠParenthood": 50265, + "è¶": 50266, + ".pnl": 50267, + "pletely": 50268, + ".Day": 50269, + "Ġadvertisers": 50270, + "Ġejec": 50271, + "Ġprzed": 50272, + "ë¯": 50273, + "!';Ċ": 50274, + "ĠKush": 50275, + "ĠTAB": 50276, + "Ġquests": 50277, + "Ġcoincidence": 50278, + "ummies": 50279, + "ĠKashmir": 50280, + "ĠEthics": 50281, + "_growth": 50282, + "Ġaktiv": 50283, + "Ġgrouping": 50284, + "å¢ŀ": 50285, + "_truth": 50286, + "åIJ¬": 50287, + "todos": 50288, + "iset": 50289, + "TexCoord": 50290, + "ätt": 50291, + "ĠZur": 50292, + "roys": 50293, + "_MAGIC": 50294, + "Ġbrewery": 50295, + "(State": 50296, + "ĠSMALL": 50297, + "ĠPlants": 50298, + "itbart": 50299, + "eacher": 50300, + "ĠAdelaide": 50301, + "Lu": 50302, + "Ġfick": 50303, + "undles": 50304, + "_loaded": 50305, + "ие": 50306, + "Poll": 50307, + "ritic": 50308, + "ELY": 50309, + "Ġ+'": 50310, + "ĠProfession": 50311, + "Ġstamps": 50312, + "ĠSew": 50313, + "scrollView": 50314, + "Ġcommunist": 50315, + "/problems": 50316, + "}čĊčĊčĊčĊ": 50317, + ",o": 50318, + "Ġudp": 50319, + "Ġobese": 50320, + "approve": 50321, + "ancellation": 50322, + "_Game": 50323, + "ĠHashtable": 50324, + "adaptiveStyles": 50325, + "Ġpossesses": 50326, + ".matcher": 50327, + "functional": 50328, + "Mrs": 50329, + "ĉsave": 50330, + "ĠDbType": 50331, + "Ġken": 50332, + "getContext": 50333, + "Ġmans": 50334, + "(rel": 50335, + "ĠBrotherhood": 50336, + ")`Ċ": 50337, + "è§£": 50338, + ".Information": 50339, + "OutOfRangeException": 50340, + "ĠSek": 50341, + "Cas": 50342, + "Ġbloggers": 50343, + "Either": 50344, + "(\"\"\"": 50345, + "Ġpinch": 50346, + "Ġcoarse": 50347, + ")p": 50348, + "ĠPulse": 50349, + "Ġlearnt": 50350, + "Ġdentist": 50351, + "Ġonchange": 50352, + "Ġdirectives": 50353, + "(actions": 50354, + "nyder": 50355, + "ĠShir": 50356, + "Trait": 50357, + "_dep": 50358, + "ĠPET": 50359, + "ĠREP": 50360, + ".AppSettings": 50361, + "cuador": 50362, + "idenav": 50363, + "Ġenvi": 50364, + "Ġslammed": 50365, + "ĠShoot": 50366, + "ĠdateFormat": 50367, + ".joda": 50368, + "veys": 50369, + "Ġ).ĊĊ": 50370, + "Ġcareg": 50371, + "ĠParallel": 50372, + "_translation": 50373, + ".functions": 50374, + ".obs": 50375, + "RuntimeException": 50376, + "[]=": 50377, + "overview": 50378, + "ĠSchl": 50379, + "Ġnoisy": 50380, + "ĠOnPropertyChanged": 50381, + "Sending": 50382, + "Ġunfamiliar": 50383, + "Upon": 50384, + "ĠPrints": 50385, + ".typ": 50386, + "Ġfleeing": 50387, + "ĉmove": 50388, + "(Un": 50389, + "Ġqr": 50390, + "׾": 50391, + "_beta": 50392, + "Ġskies": 50393, + "ĉme": 50394, + "WND": 50395, + "Ġstickers": 50396, + "blas": 50397, + "Ġinserts": 50398, + "Ġverses": 50399, + "ĠDew": 50400, + "Ġtangible": 50401, + "Ġhecho": 50402, + "POL": 50403, + "Ġteardown": 50404, + "omnia": 50405, + "IBE": 50406, + ".cover": 50407, + "_strategy": 50408, + "^-": 50409, + "setPosition": 50410, + "uale": 50411, + "Signed": 50412, + "Ġiface": 50413, + "aseline": 50414, + ".setTime": 50415, + "ĠMineral": 50416, + "ĠFighting": 50417, + "skins": 50418, + "Ġdiscrimin": 50419, + "Ġdansk": 50420, + "ĠPrinceton": 50421, + "acist": 50422, + "Ġ());Ċ": 50423, + "tracks": 50424, + "imonial": 50425, + "adecimal": 50426, + "EPROM": 50427, + "uggle": 50428, + ".Notification": 50429, + "$mail": 50430, + "cantidad": 50431, + "ĠJung": 50432, + "Ġseekers": 50433, + "Ġplausible": 50434, + "tier": 50435, + "еж": 50436, + "Ġrapper": 50437, + "ĠMana": 50438, + "ĠHttpStatusCode": 50439, + "Ġburnt": 50440, + "loses": 50441, + "ĠFoto": 50442, + "ĠJsonObject": 50443, + "Instagram": 50444, + "Ġsyscall": 50445, + "Ġrealities": 50446, + "ĠMATLAB": 50447, + ":^{Ċ": 50448, + "TERM": 50449, + "ĠCbd": 50450, + "ĠParagraph": 50451, + "Ġtravés": 50452, + "Ġconstructing": 50453, + "Ġswal": 50454, + "Ġpige": 50455, + "LLLL": 50456, + "-existing": 50457, + "Gets": 50458, + "Ġmelted": 50459, + "Ġmitigate": 50460, + "Hen": 50461, + "Ġhm": 50462, + "imas": 50463, + "ĠAo": 50464, + "ĠPerez": 50465, + "ĠDAL": 50466, + "Ġëĭ¤": 50467, + "Ġdivis": 50468, + "StoryboardSegue": 50469, + "ĠModify": 50470, + "ĠÃľber": 50471, + "_OVERRIDE": 50472, + ".pem": 50473, + "untos": 50474, + "Ġespañ": 50475, + "Ġ{?": 50476, + "ĠPAY": 50477, + "_ipv": 50478, + "ĠFury": 50479, + "__.__": 50480, + "elow": 50481, + "-centered": 50482, + "checks": 50483, + "_Reg": 50484, + "-Javadoc": 50485, + "ĉload": 50486, + "ĠLikewise": 50487, + "اÙħ": 50488, + "UNE": 50489, + ".sem": 50490, + "xcb": 50491, + "ĠCave": 50492, + "_sleep": 50493, + "Ġsilently": 50494, + "ĠExtreme": 50495, + ".ToUpper": 50496, + "ĉCHECK": 50497, + "Ġcue": 50498, + "ĠQByteArray": 50499, + "Ġcorrupted": 50500, + "ĠDé": 50501, + "Ġimped": 50502, + "GetName": 50503, + "Ġinaccurate": 50504, + "Ġsober": 50505, + "ее": 50506, + "Ġbarcode": 50507, + "--){Ċ": 50508, + "inki": 50509, + "Ġép": 50510, + "Ġdri": 50511, + "ĠALT": 50512, + ">>>>>>>>": 50513, + "onta": 50514, + "[L": 50515, + "Ġinteres": 50516, + "verting": 50517, + "Ġdiagnostics": 50518, + "pdev": 50519, + "è©": 50520, + "ĠIntegrated": 50521, + ").'": 50522, + "_gc": 50523, + "$text": 50524, + ".games": 50525, + "ĠTerra": 50526, + "'Re": 50527, + ".transfer": 50528, + "_FIFO": 50529, + "getModel": 50530, + "Ġbland": 50531, + "ĠColeman": 50532, + "Ġprimes": 50533, + "ĠæĪ": 50534, + "Ġcrosses": 50535, + "nk": 50536, + "GING": 50537, + "Ġ'^": 50538, + "ĠBlob": 50539, + "Ġintercourse": 50540, + "ĠBlvd": 50541, + "Ġweighs": 50542, + "_regular": 50543, + "ĠPerth": 50544, + "Ġseparating": 50545, + "Ġbilled": 50546, + ".tabControl": 50547, + "Ġpuppet": 50548, + "Ġutilization": 50549, + "Ġâĸł": 50550, + "Ġsucces": 50551, + "Ġlamps": 50552, + "_proj": 50553, + "Eric": 50554, + "Ġrenovation": 50555, + "ĠFamilies": 50556, + "ĠBits": 50557, + "partials": 50558, + "-Men": 50559, + "solution": 50560, + "Ġdwarf": 50561, + ".INTEGER": 50562, + "ĠLOCK": 50563, + ".ct": 50564, + "Ġexcerpt": 50565, + "ĠPix": 50566, + "ĠFirstName": 50567, + "ANTED": 50568, + "ĠAdmir": 50569, + "-help": 50570, + "Prior": 50571, + "ĠAlign": 50572, + ".INSTANCE": 50573, + "LineEdit": 50574, + "('/:": 50575, + "Ġinet": 50576, + "odus": 50577, + ".pkl": 50578, + "ĠKY": 50579, + "upert": 50580, + "Ġnerves": 50581, + "_gradient": 50582, + "}','": 50583, + "_unref": 50584, + "Ġsaturated": 50585, + "ĠConnected": 50586, + "ĠFN": 50587, + "EXIT": 50588, + "Ġteleport": 50589, + "Ġavait": 50590, + "PageRoute": 50591, + "Ġdivorced": 50592, + "(lang": 50593, + "fst": 50594, + "ĠTyr": 50595, + "Ġmessenger": 50596, + "ifstream": 50597, + "XS": 50598, + "ĠBanking": 50599, + "Ġinfectious": 50600, + "ĠMons": 50601, + "_LOOP": 50602, + "Ġzurück": 50603, + "Ġobtener": 50604, + "/repos": 50605, + "Vel": 50606, + "acro": 50607, + "ĠuserRepository": 50608, + "styleType": 50609, + "ĠSRC": 50610, + "VMLINUX": 50611, + "recursive": 50612, + "/bar": 50613, + "_chip": 50614, + "ominated": 50615, + "ĠNit": 50616, + "âĢĶto": 50617, + "ĠBuddh": 50618, + "омеÑĢ": 50619, + "ĠMAG": 50620, + "ĠCHE": 50621, + "_den": 50622, + ".raises": 50623, + "_degree": 50624, + "Ġpumpkin": 50625, + "_templates": 50626, + "_MEDIA": 50627, + "ĠTimeline": 50628, + "Ġbots": 50629, + "ObjectType": 50630, + "Ġbuys": 50631, + ".posts": 50632, + "CAL": 50633, + "waiting": 50634, + "ĠDaniels": 50635, + "Ġdabei": 50636, + "ĠSigma": 50637, + "ilor": 50638, + "igel": 50639, + ",W": 50640, + "ADS": 50641, + "(panel": 50642, + "ì²´": 50643, + "itating": 50644, + ".palette": 50645, + "Ġmosquito": 50646, + "Ġtego": 50647, + "(parseInt": 50648, + "Ġdespués": 50649, + "promise": 50650, + "Ġwij": 50651, + "typescript": 50652, + "ĠTv": 50653, + "_IDENTIFIER": 50654, + ").ĊĊĊ": 50655, + "_flat": 50656, + "itsu": 50657, + "USR": 50658, + "experience": 50659, + "-fit": 50660, + "phinx": 50661, + "_thresh": 50662, + "Ġideally": 50663, + "ĠFreeman": 50664, + ",DB": 50665, + "_rw": 50666, + "çŃī": 50667, + "Ub": 50668, + "_statistics": 50669, + "=\"\"><": 50670, + "Ġchore": 50671, + "Ġyork": 50672, + "installed": 50673, + "Additionally": 50674, + "Ġpstmt": 50675, + "ylko": 50676, + "::Ċ": 50677, + "Forest": 50678, + "Ġheadset": 50679, + "Ġgallon": 50680, + "ÑĢем": 50681, + "Ġwithdrawn": 50682, + "ĠCandidate": 50683, + "Ġmelting": 50684, + "Ġfreezer": 50685, + "Ġhl": 50686, + "_HELP": 50687, + "mime": 50688, + "(/*": 50689, + "Ġthirst": 50690, + "$return": 50691, + "memberof": 50692, + "еб": 50693, + "ĠHttpServletRequest": 50694, + "(ob": 50695, + "_Result": 50696, + "Ġasserted": 50697, + "Ġfulfilling": 50698, + "Ġstretches": 50699, + "parated": 50700, + "-funded": 50701, + "ĠåĽ": 50702, + "ingles": 50703, + "_ca": 50704, + ".condition": 50705, + "ĠDisplays": 50706, + "Ġorang": 50707, + "ĠCRE": 50708, + "ĠglBind": 50709, + "ĠSelector": 50710, + "/type": 50711, + "ĠAlexa": 50712, + "chedules": 50713, + "ĠPeninsula": 50714, + "Ġparity": 50715, + "ĉdest": 50716, + "ĠDoors": 50717, + "čĊĉčĊ": 50718, + "_dimension": 50719, + "Ġaload": 50720, + ".StoredProcedure": 50721, + "(paren": 50722, + "ĠBurke": 50723, + "')]Ċ": 50724, + "-engine": 50725, + "Ġquir": 50726, + "ĠHybrid": 50727, + "ĠDoe": 50728, + "Ġoutlines": 50729, + "ĠTrends": 50730, + "_NV": 50731, + "periments": 50732, + "ĠHin": 50733, + "?',": 50734, + "ĉText": 50735, + "FUL": 50736, + "Ġsmells": 50737, + "Ġslick": 50738, + "Ġmiserable": 50739, + "ĠArrayAdapter": 50740, + "ĠparamString": 50741, + "Hom": 50742, + "_literals": 50743, + "usuarios": 50744, + "Ġprompting": 50745, + "_lazy": 50746, + "ĠActivation": 50747, + "_oc": 50748, + "Weak": 50749, + "Ġanecd": 50750, + "ĠUCLA": 50751, + "=re": 50752, + "issement": 50753, + "ĠEscorts": 50754, + "Excellent": 50755, + "ĠPause": 50756, + "Ġrepositories": 50757, + "TOR": 50758, + "ariate": 50759, + "_iso": 50760, + "updates": 50761, + "halb": 50762, + "udiante": 50763, + "ë¡Ŀ": 50764, + "Ġnaive": 50765, + "ĠPeg": 50766, + "ĠLounge": 50767, + "ARGIN": 50768, + "(bin": 50769, + "OnClickListener": 50770, + "ĠFAILED": 50771, + "Ġlite": 50772, + "Ġdzie": 50773, + "ĠLiteral": 50774, + "ivor": 50775, + "fcntl": 50776, + "Ġeats": 50777, + "Ġqed": 50778, + "Unlock": 50779, + "riding": 50780, + "undai": 50781, + "=M": 50782, + "ATTER": 50783, + "ConfigureAwait": 50784, + "icias": 50785, + "ustomed": 50786, + "Ġsuccession": 50787, + "endTime": 50788, + "ĠJupiter": 50789, + "Ġjudging": 50790, + "dration": 50791, + "_docs": 50792, + ".mo": 50793, + "Ġeducators": 50794, + "ĠVine": 50795, + "Cond": 50796, + "[out": 50797, + "qb": 50798, + "\\Validator": 50799, + "Ġmeanings": 50800, + "Ġpresently": 50801, + "Ġdividing": 50802, + "ottenham": 50803, + "ascular": 50804, + "Ġtrailers": 50805, + "ĠCLOSE": 50806, + "ами": 50807, + "âĢĻai": 50808, + "ĠGain": 50809, + "wor": 50810, + "Ġplanner": 50811, + "Ġdistributing": 50812, + "vat": 50813, + "months": 50814, + "xlabel": 50815, + "HF": 50816, + "Viol": 50817, + ".BASELINE": 50818, + "еÑĤÑģÑı": 50819, + "ĠRotate": 50820, + "Ġtxn": 50821, + ":bold": 50822, + "Ġbloss": 50823, + "Forgery": 50824, + "(embed": 50825, + "Ġjako": 50826, + "sprintf": 50827, + "their": 50828, + "Ġexhibits": 50829, + "-static": 50830, + "hecy": 50831, + "getActiveSheet": 50832, + ".clients": 50833, + "ãģį": 50834, + "_hide": 50835, + "[word": 50836, + "Cb": 50837, + "addItem": 50838, + "axe": 50839, + "_radio": 50840, + "alion": 50841, + "modifier": 50842, + "Ġsaturation": 50843, + "Ġdenom": 50844, + "_pixels": 50845, + "mess": 50846, + "(fl": 50847, + "atif": 50848, + "Ġsecs": 50849, + "Ġprostitution": 50850, + "Ġgrandchildren": 50851, + "Ġparadise": 50852, + "ĠFeld": 50853, + "_BINARY": 50854, + "itous": 50855, + "à¹Ħ": 50856, + "Ġflashing": 50857, + "-sided": 50858, + "Ġcontradiction": 50859, + "/*ĊĊ": 50860, + "ylabel": 50861, + "ĠTet": 50862, + "Ġadmire": 50863, + "reso": 50864, + "Ġletz": 50865, + "ĠSEARCH": 50866, + "slots": 50867, + "ĠRewards": 50868, + "ĠHog": 50869, + "ĠNSData": 50870, + "stash": 50871, + "Fall": 50872, + "ĠAmer": 50873, + "LinearLayout": 50874, + "/photos": 50875, + "Ġfeather": 50876, + "Ġ|čĊ": 50877, + "Downloads": 50878, + ".StartsWith": 50879, + "Ġ//#": 50880, + "ineTransform": 50881, + "Ġaffid": 50882, + "Vtbl": 50883, + "ĠRogue": 50884, + "scribed": 50885, + "Ġfauc": 50886, + "ĠMonroe": 50887, + "Ġdeclares": 50888, + "modern": 50889, + "reon": 50890, + "aybe": 50891, + "PASS": 50892, + "fers": 50893, + "_MULTI": 50894, + "ĠMathematics": 50895, + "Ġsudah": 50896, + "_ATTACH": 50897, + "ĠnumberWith": 50898, + "ĠSolomon": 50899, + "jin": 50900, + "ografia": 50901, + "öl": 50902, + "_design": 50903, + "culated": 50904, + "ĠLuna": 50905, + "iesz": 50906, + "Ġ=>'": 50907, + "Ġrevelations": 50908, + "Along": 50909, + "(ed": 50910, + "ĠFilename": 50911, + "Ġylabel": 50912, + "Secure": 50913, + "Ġbusca": 50914, + "agnosis": 50915, + "_RECE": 50916, + "Ġoverlapping": 50917, + "Extent": 50918, + "Ġanticipation": 50919, + "Checks": 50920, + "ĠALSO": 50921, + "orc": 50922, + "ilingual": 50923, + "itational": 50924, + "Ġadvancement": 50925, + "ouro": 50926, + "ĠPredicate": 50927, + "å¾Ĺ": 50928, + "eria": 50929, + "ĠPierce": 50930, + "orio": 50931, + "Ġmerits": 50932, + "Ġpeanut": 50933, + ".Package": 50934, + "ĠConduct": 50935, + "_SENSOR": 50936, + "Ġboiling": 50937, + "Ġintra": 50938, + "ĠIGN": 50939, + "ĠFur": 50940, + ".Refresh": 50941, + "ĠReach": 50942, + "_decoder": 50943, + ".Exp": 50944, + "ĠÑĤак": 50945, + "pill": 50946, + ",Q": 50947, + "ĠGrill": 50948, + "Ġpopping": 50949, + ".Ag": 50950, + "Ġproyecto": 50951, + "Ġmileage": 50952, + "Ġecological": 50953, + "]]);Ċ": 50954, + "ĠÂŃ": 50955, + "subplot": 50956, + "acad": 50957, + "ĠTrying": 50958, + "recipes": 50959, + "$criteria": 50960, + "ĠPersian": 50961, + "-bound": 50962, + "MASK": 50963, + "ĠGesture": 50964, + "Ġkk": 50965, + "ĠPVC": 50966, + "Ġprohibition": 50967, + "Ġcomando": 50968, + "ĠLOOK": 50969, + "Shopping": 50970, + "Ġdistortion": 50971, + "čĊ": 51017, + ".Dependency": 51018, + ".QueryString": 51019, + ".Owner": 51020, + "Ġexpiry": 51021, + "Thu": 51022, + "(Vec": 51023, + "Ġhazardous": 51024, + "Ġrpm": 51025, + "APON": 51026, + "ĠaddTarget": 51027, + "sville": 51028, + "pNet": 51029, + "ĠImg": 51030, + "ĠTIMER": 51031, + ".Animation": 51032, + "Ġbek": 51033, + "Ġassort": 51034, + "Ġlebih": 51035, + "ĠbodyParser": 51036, + "Ġvibrating": 51037, + "IDL": 51038, + "Ġbutterknife": 51039, + "inters": 51040, + "Ġpersuade": 51041, + "ĠLGBTQ": 51042, + "èĭ": 51043, + ".soft": 51044, + "Ġbeams": 51045, + "_sur": 51046, + ".Def": 51047, + "Ġlabs": 51048, + "ĉplt": 51049, + "Ġskins": 51050, + "Ġtransferring": 51051, + "Ġimaginary": 51052, + "_End": 51053, + ";background": 51054, + "Ġlaps": 51055, + "_COMMENT": 51056, + "(SDL": 51057, + "onds": 51058, + ".Record": 51059, + "ĠImplements": 51060, + "_ticks": 51061, + "()))ĊĊ": 51062, + "Ġarose": 51063, + "]?": 51064, + "ĠMp": 51065, + "ĠICommand": 51066, + "Ġsculpture": 51067, + "Ġcontracted": 51068, + "\">'": 51546, + "kinson": 51547, + "Ġкол": 51548, + "ognitive": 51549, + "_li": 51550, + "Ġimminent": 51551, + "Ġaffinity": 51552, + ".signal": 51553, + "Ġnotch": 51554, + "ĠSteelers": 51555, + "maxlength": 51556, + "KK": 51557, + "ĠEugene": 51558, + "_PWM": 51559, + "roi": 51560, + "ĠâĹı": 51561, + "ĠHamburg": 51562, + ".Must": 51563, + "Ġaxe": 51564, + "enef": 51565, + "Ġambitions": 51566, + "ĠSpecies": 51567, + "ĠStress": 51568, + "Ġawhile": 51569, + "ĠбÑĥд": 51570, + "Ġwithstand": 51571, + "ĠDecoder": 51572, + "_inventory": 51573, + "Ġ{ččĊ": 51574, + "Ġtgt": 51575, + "Ġrailroad": 51576, + "WASHINGTON": 51577, + "Ġnegotiated": 51578, + "NST": 51579, + "-phone": 51580, + ",U": 51581, + "Ġexercising": 51582, + "ụ": 51583, + "_PIXEL": 51584, + "avors": 51585, + "iterated": 51586, + "Ġvampire": 51587, + "adal": 51588, + "Ingrese": 51589, + "Ġung": 51590, + "jective": 51591, + ".cells": 51592, + "Ġnano": 51593, + "Ġmarkdown": 51594, + "_RULE": 51595, + "(events": 51596, + "Ġluggage": 51597, + "MESSAGE": 51598, + "igkeit": 51599, + "$count": 51600, + "AttributeName": 51601, + "IGINAL": 51602, + "_Ent": 51603, + "ĠBF": 51604, + "ĠCOMMENT": 51605, + "_ini": 51606, + "ĠEuropeans": 51607, + "ĠBelle": 51608, + "åij½": 51609, + ")['": 51610, + "åºĶ": 51611, + "ĠUseful": 51612, + ".reference": 51613, + "()\",": 51614, + "_grade": 51615, + "ĠKaw": 51616, + "Ġsentencing": 51617, + "Ġsocialism": 51618, + "monster": 51619, + "_LAYER": 51620, + "Ġdeepest": 51621, + "wk": 51622, + "ĠNoise": 51623, + "###ĊĊ": 51624, + "Ġpréc": 51625, + "otle": 51626, + "ÑĤе": 51627, + "auf": 51628, + "ibal": 51629, + "Ġconquer": 51630, + ">Email": 51631, + "Ġambulance": 51632, + "OAD": 51633, + "Ġ(\"%": 51634, + "ĠFI": 51635, + ".fixture": 51636, + "Ġterse": 51637, + "ĠĠĠĠĉĉĉĉ": 51638, + "Ġsanctuary": 51639, + "ugi": 51640, + "ĠComparator": 51641, + "Definitions": 51642, + "Ġasthma": 51643, + "Ġlact": 51644, + "Ġhardwood": 51645, + ".clock": 51646, + "Ġattracting": 51647, + "ĠMour": 51648, + "(distance": 51649, + "icits": 51650, + "Ġbonne": 51651, + "ĠACCESS": 51652, + ".DeserializeObject": 51653, + "ĠTyped": 51654, + "Ġjeu": 51655, + "ĠappId": 51656, + "ĠClara": 51657, + "ĠHF": 51658, + "ĠReich": 51659, + "ipples": 51660, + "//--------------------------------------------------------------------------------": 51661, + "_delivery": 51662, + "erialization": 51663, + "Ġplaintiffs": 51664, + "Scient": 51665, + "shopping": 51666, + "ĠDummy": 51667, + "ĠWald": 51668, + "GroupName": 51669, + "Ġinscription": 51670, + "elog": 51671, + "::::::::": 51672, + "_ld": 51673, + "BackPressed": 51674, + ".Raw": 51675, + "ĠOnTrigger": 51676, + "Ġmuseums": 51677, + "ĠBeen": 51678, + "ĠAdventures": 51679, + "Ġslate": 51680, + "Ġlett": 51681, + "Ġsund": 51682, + "ĠGin": 51683, + "ĠMechanical": 51684, + ".ship": 51685, + "AppComponent": 51686, + "Ġdestined": 51687, + "Ġdwelling": 51688, + "Profiler": 51689, + "Prepare": 51690, + "zeich": 51691, + "Ġsilicon": 51692, + "(has": 51693, + "Ġ#%": 51694, + "VIDEO": 51695, + "Ġcollaborate": 51696, + "Lin": 51697, + "Ġscopes": 51698, + "(className": 51699, + "(sd": 51700, + "andin": 51701, + ".ham": 51702, + "ServiceImpl": 51703, + "-described": 51704, + "Ġirony": 51705, + "stial": 51706, + "ĠHuawei": 51707, + "(repo": 51708, + "Ġunexpectedly": 51709, + "ĠKai": 51710, + ".install": 51711, + "\\xf": 51712, + "Ġexhibited": 51713, + "_TCP": 51714, + "ĠOx": 51715, + "_CHO": 51716, + "Ġprostituerte": 51717, + "Ġvä": 51718, + "Ġsito": 51719, + "Ġconstituents": 51720, + "ĠContinued": 51721, + "ĠSAVE": 51722, + "rss": 51723, + "/message": 51724, + "ubes": 51725, + "Ġmisdemean": 51726, + "Ġtaxation": 51727, + "Ġstoryline": 51728, + "hair": 51729, + "ĠFinds": 51730, + "SIG": 51731, + "verification": 51732, + "~=": 51733, + ".hp": 51734, + "Iterable": 51735, + "Ñĭе": 51736, + "atori": 51737, + "Ġctr": 51738, + "Rx": 51739, + "_);ĊĊ": 51740, + "dag": 51741, + ".pin": 51742, + "Ġpseud": 51743, + "Ġinvo": 51744, + "ÑģÑĤÑĢ": 51745, + "_pix": 51746, + "为空": 51747, + "Ġsworn": 51748, + "âĢĶor": 51749, + "_registry": 51750, + "Ġdisasters": 51751, + "ĠROI": 51752, + "ĠâĢķ": 51753, + "aktu": 51754, + "forest": 51755, + "beiten": 51756, + "âĢĶI": 51757, + "ueva": 51758, + "egt": 51759, + "Ġspikes": 51760, + "URES": 51761, + "ĠRecommended": 51762, + "Ġexploited": 51763, + "ĠFrederick": 51764, + "_COMPLETE": 51765, + "ĠDrugs": 51766, + "!!!!!!!!": 51767, + "ĠRiv": 51768, + "STOP": 51769, + "ROOM": 51770, + "ĠPASSWORD": 51771, + "Cookies": 51772, + ".El": 51773, + "á»Ń": 51774, + "ĠBert": 51775, + "Ġhashed": 51776, + "icester": 51777, + "Ġdecorator": 51778, + "ĠqueryString": 51779, + ":;Ċ": 51780, + "Ġ\"[\"": 51781, + "otope": 51782, + "-Americ": 51783, + "ĠMatthews": 51784, + "URAL": 51785, + "âĢľ,": 51786, + "Summer": 51787, + "fos": 51788, + "_CONTAINER": 51789, + "_ACK": 51790, + "Ġfiltr": 51791, + "_disp": 51792, + "_Re": 51793, + "Ġfacile": 51794, + "аÑĪ": 51795, + "ĠìķĬ": 51796, + "Ġeben": 51797, + "Ġsprink": 51798, + "ĠQuint": 51799, + ">V": 51800, + "Ġhistorians": 51801, + "ourmet": 51802, + "ĠMonitoring": 51803, + "ledger": 51804, + "cott": 51805, + "Ġware": 51806, + "GGLE": 51807, + "cars": 51808, + "ĠMEDIATEK": 51809, + "Ġvolupt": 51810, + "_View": 51811, + "HEL": 51812, + "(copy": 51813, + "(stats": 51814, + "Ġchromosome": 51815, + "ĠCurtis": 51816, + "-conf": 51817, + "(asset": 51818, + "Ġhvor": 51819, + "FileSystem": 51820, + "<>();čĊ": 51821, + "ocoder": 51822, + "ĠCannon": 51823, + ")x": 51824, + "ĠSmooth": 51825, + "ĠSAS": 51826, + "_ce": 51827, + "ĉprev": 51828, + "_movie": 51829, + "Ec": 51830, + "_wall": 51831, + ".ĊĊ": 52378, + "ogenesis": 52379, + "ĠOPTIONS": 52380, + "uptools": 52381, + "Ġmilitant": 52382, + "Ġexited": 52383, + "igar": 52384, + "ĠCOMM": 52385, + "ĠDisposable": 52386, + "aycast": 52387, + "Ġrowspan": 52388, + "Ġsynthes": 52389, + "Ġsondern": 52390, + "ĠĊ": 55869, + "ĠJacket": 55870, + "RATION": 55871, + ".getSelectedItem": 55872, + "-init": 55873, + "ĠRegisters": 55874, + "_sep": 55875, + "ĠToolkit": 55876, + ".dict": 55877, + "Ġxlabel": 55878, + "\\Table": 55879, + "toc": 55880, + "_combo": 55881, + "ĠCompact": 55882, + "Ġrugged": 55883, + "à¥ĩà¤": 55884, + "-management": 55885, + "')}}\">Ċ": 55886, + "ĠStamp": 55887, + "ıl": 55888, + "rox": 55889, + "Ġlandscapes": 55890, + "_NOTE": 55891, + "monary": 55892, + "cab": 55893, + "Ġmoet": 55894, + "xaf": 55895, + "rcode": 55896, + "-cli": 55897, + "_gate": 55898, + "[event": 55899, + "SPORT": 55900, + "gia": 55901, + "ĠSUPER": 55902, + "/Login": 55903, + "_shutdown": 55904, + "interrupt": 55905, + "Ġpretending": 55906, + "Ġfringe": 55907, + "ĠReds": 55908, + "ĠCUDA": 55909, + "ĠUNIX": 55910, + "vit": 55911, + "Ġbrig": 55912, + "drv": 55913, + "ĠConnector": 55914, + "Therefore": 55915, + "Ġlia": 55916, + "Detection": 55917, + "_actor": 55918, + "Ġtempfile": 55919, + "Ġeccentric": 55920, + "-role": 55921, + "Ġpadx": 55922, + "dent": 55923, + "Western": 55924, + "Ġê·¸": 55925, + "ĠApplicationRecord": 55926, + "Ġcampaigning": 55927, + "_runner": 55928, + "ĠCivic": 55929, + "aleigh": 55930, + "Ġdirekt": 55931, + ".sul": 55932, + "ĠĠĉĉĉ": 55933, + "anten": 55934, + "Ġissuer": 55935, + "Ġassertions": 55936, + "(orig": 55937, + "ATIO": 55938, + "Ġleaned": 55939, + "äs": 55940, + ".DTO": 55941, + "explode": 55942, + ".Observable": 55943, + "Ġstaggering": 55944, + "Ġkidnapped": 55945, + "Ġprogrammers": 55946, + "ĠInnov": 55947, + ".parameter": 55948, + "Ġdomination": 55949, + "Ġskeptic": 55950, + "Ġæĺ¯": 55951, + "Ġavoids": 55952, + ".Verify": 55953, + "ubby": 55954, + "ĠASN": 55955, + "Ġformato": 55956, + "ĠBeatles": 55957, + "_brand": 55958, + "Ġinset": 55959, + "youtu": 55960, + "Ġtoc": 55961, + "-final": 55962, + "Showing": 55963, + "ĠDoub": 55964, + "ĠMesa": 55965, + "Adj": 55966, + "_medium": 55967, + "Creates": 55968, + "(endpoint": 55969, + "ĉUP": 55970, + "bbie": 55971, + "Ġstalk": 55972, + ".databind": 55973, + ".Scan": 55974, + "agents": 55975, + "$,": 55976, + "individual": 55977, + "+)/": 55978, + "ĉvm": 55979, + "(notification": 55980, + "Ġinex": 55981, + "ĠClassification": 55982, + "reno": 55983, + "Ġolig": 55984, + "-rated": 55985, + "Ġformulation": 55986, + "',{": 55987, + "Ġacept": 55988, + "_unpack": 55989, + "_CA": 55990, + ".Pow": 55991, + "ĉim": 55992, + "Ġaluminium": 55993, + "ANO": 55994, + "Ġxn": 55995, + "Ġcómo": 55996, + "ĠIngredient": 55997, + "Ġseizures": 55998, + "åħ±": 55999, + "ificador": 56000, + "Ġsiguiente": 56001, + "ĠInfragistics": 56002, + "Ġduplicated": 56003, + "ĠDee": 56004, + "Ġnø": 56005, + "ĠACCEPT": 56006, + "(crate": 56007, + "иÑĤелÑĮ": 56008, + "-less": 56009, + "Ġinfinity": 56010, + "Analyzer": 56011, + "-Day": 56012, + "ritt": 56013, + "(cin": 56014, + "ĠGy": 56015, + "Ġmultiplied": 56016, + "uchi": 56017, + "ĠBaldwin": 56018, + "/ip": 56019, + "Ġshortcuts": 56020, + ".ADD": 56021, + "Ġvigor": 56022, + "_instruction": 56023, + "(;": 56024, + "_eta": 56025, + "è¿ŀ": 56026, + "utorials": 56027, + "Ġboosting": 56028, + "bv": 56029, + "Ġacknowledges": 56030, + "Listening": 56031, + "FAQ": 56032, + ";b": 56033, + "((-": 56034, + "Ġarchitects": 56035, + "Ġzwe": 56036, + "Ġpuls": 56037, + "ĠgetCount": 56038, + "verbs": 56039, + "ãĢľ": 56040, + "(Collection": 56041, + "kre": 56042, + "Ġjurisdictions": 56043, + "_bridge": 56044, + "ĠCrack": 56045, + "ĠDifficulty": 56046, + "KO": 56047, + "Reservation": 56048, + "_requires": 56049, + "Tour": 56050, + "ãģĹãģŁ": 56051, + ".setCurrent": 56052, + "Ġky": 56053, + "ĠAlbany": 56054, + "Ġè§": 56055, + "ller": 56056, + "agna": 56057, + "workers": 56058, + ".blank": 56059, + "ĠPrayer": 56060, + "MIC": 56061, + "Ġresilience": 56062, + "TeX": 56063, + "ĠLanguages": 56064, + "study": 56065, + "ĉcurr": 56066, + "Ġenzymes": 56067, + "Slug": 56068, + "ĠíĮĮ": 56069, + "stral": 56070, + "Ġtumors": 56071, + "Ġsegunda": 56072, + "='{": 56073, + "instruction": 56074, + "ĠLisp": 56075, + "/info": 56076, + "Ġ\"{$": 56077, + ",:),": 56078, + "Ġgv": 56079, + "(ErrorMessage": 56080, + "Ġ'=": 56081, + "}-${": 56082, + ".Documents": 56083, + "\"Well": 56084, + "Ġreminiscent": 56085, + "Ġgaz": 56086, + "iropr": 56087, + "ehr": 56088, + "Ġsuppressed": 56089, + "ersh": 56090, + ".scrollTo": 56091, + "Ġcadena": 56092, + "ĠgameState": 56093, + "ÃŃm": 56094, + "(conv": 56095, + "ĠTomorrow": 56096, + "ĠCCT": 56097, + "Mongo": 56098, + "ulg": 56099, + ".Camera": 56100, + ".handlers": 56101, + "mph": 56102, + "Ġstk": 56103, + "Ġgenetics": 56104, + "ACING": 56105, + "Trivia": 56106, + "ĠBam": 56107, + "(marker": 56108, + ".Stretch": 56109, + "ĠSunni": 56110, + "ĠBetty": 56111, + ".tolist": 56112, + "unlikely": 56113, + ".Rectangle": 56114, + "obsolete": 56115, + "ILON": 56116, + "innerText": 56117, + "embourg": 56118, + "aN": 56119, + "ĠVehicles": 56120, + "unlock": 56121, + ":utf": 56122, + "nob": 56123, + "ĠSeeing": 56124, + "ĠNEVER": 56125, + "Ġtls": 56126, + "Ġfilles": 56127, + "Ġbenefited": 56128, + "ĠClint": 56129, + "*/),": 56130, + ".fold": 56131, + "Ġposible": 56132, + "ADED": 56133, + "thouse": 56134, + ".DAL": 56135, + "ĠOdd": 56136, + "rokes": 56137, + "ĠSunny": 56138, + "ĠPartialEq": 56139, + "_Buffer": 56140, + "ĠLevi": 56141, + "longrightarrow": 56142, + "eldon": 56143, + "gages": 56144, + "_warn": 56145, + ".CreateTable": 56146, + "ĠDip": 56147, + "_questions": 56148, + ".logic": 56149, + "Ġ#\"": 56150, + "={()=>": 56151, + "Ġtep": 56152, + "Ġjuicy": 56153, + "ìĤ¬": 56154, + "enko": 56155, + "ialect": 56156, + "Ùī": 56157, + "Ġonboard": 56158, + "Ġæı": 56159, + "ĉrt": 56160, + "_UTF": 56161, + "ĠQAction": 56162, + "âĢŀ": 56163, + "(Component": 56164, + "(audio": 56165, + ".hit": 56166, + "gte": 56167, + "Ġprogrammed": 56168, + "stateParams": 56169, + "Ġpolyester": 56170, + "fires": 56171, + "byss": 56172, + "]=(": 56173, + "_quality": 56174, + "OfDay": 56175, + "ĠFairy": 56176, + "Ġyelled": 56177, + "opl": 56178, + "(userName": 56179, + "ĠDifference": 56180, + "Ġevaluations": 56181, + "iffany": 56182, + "Ġcyclists": 56183, + "Ġcidade": 56184, + "Ġtextbook": 56185, + "Ġprofiling": 56186, + "__),": 56187, + "dea": 56188, + ".activate": 56189, + "Ġindications": 56190, + "Ðķ": 56191, + "TouchUpInside": 56192, + "Ġinvaluable": 56193, + "ĠMASK": 56194, + "Ġcontend": 56195, + "Freq": 56196, + "Ġrecruits": 56197, + "(interval": 56198, + "ĠUserProfile": 56199, + "Ġ'./../": 56200, + "edu": 56201, + "_Callback": 56202, + "Ġanalogy": 56203, + "ĠTrophy": 56204, + "apphire": 56205, + "Videos": 56206, + "ĠCher": 56207, + "ĠHav": 56208, + "â̦\"": 56209, + ".validator": 56210, + "gfx": 56211, + "ĠUObject": 56212, + "classnames": 56213, + "triangle": 56214, + "ĠEncoder": 56215, + ".spy": 56216, + "Ġpredators": 56217, + "=status": 56218, + "-safe": 56219, + ":\",Ċ": 56220, + "ĠIncluding": 56221, + "Ġ{};čĊ": 56222, + "*cos": 56223, + "Ġendured": 56224, + ".sulake": 56225, + "Ġnursery": 56226, + "Ġfragrance": 56227, + "Ġrebuilding": 56228, + "Ġnth": 56229, + "ĠFraser": 56230, + ".setDate": 56231, + "ĠVince": 56232, + "_REST": 56233, + "Ġventilation": 56234, + "æµ·": 56235, + "cribes": 56236, + ".asm": 56237, + "lpVtbl": 56238, + "ĠAbe": 56239, + "uisine": 56240, + ",array": 56241, + "ĉclassName": 56242, + "errals": 56243, + "Ġ'ĊĊ": 56244, + "Checkout": 56245, + "Ġsolicit": 56246, + "Aux": 56247, + "_capture": 56248, + "Ġribs": 56249, + "ragon": 56250, + "viol": 56251, + "topics": 56252, + "FunctionFlags": 56253, + "ĠMarty": 56254, + "bike": 56255, + "ĠTucker": 56256, + "(kernel": 56257, + "ĠOps": 56258, + "CloseOperation": 56259, + "/demo": 56260, + "ilda": 56261, + "ĠlÃŃnea": 56262, + "APPING": 56263, + "Ġsuites": 56264, + ".visitVarInsn": 56265, + "urus": 56266, + "ĠMinute": 56267, + "(manager": 56268, + "Ġbutterfly": 56269, + "Ġapare": 56270, + "Ġwolves": 56271, + "JWT": 56272, + "ĠSalon": 56273, + "ĉdelay": 56274, + "-eslint": 56275, + "isations": 56276, + ".rpc": 56277, + ")|(": 56278, + "ĠSnapchat": 56279, + "/mm": 56280, + "MN": 56281, + "ceries": 56282, + ".textAlignment": 56283, + "ĠFrankfurt": 56284, + "Ġado": 56285, + "(newValue": 56286, + "(access": 56287, + "(Expression": 56288, + "ĠSignIn": 56289, + "ĠHaiti": 56290, + "_tp": 56291, + ".setParameter": 56292, + "Minute": 56293, + "Ġmanuals": 56294, + "ricanes": 56295, + "ĠPTR": 56296, + "ĠOuter": 56297, + "Ġgetline": 56298, + "ocations": 56299, + "_CD": 56300, + "ĠLyon": 56301, + "/gui": 56302, + "_live": 56303, + "idan": 56304, + ".geom": 56305, + "ĠborderBottom": 56306, + "imuth": 56307, + "_checkpoint": 56308, + "Ġmeu": 56309, + "ĠIrving": 56310, + "Ġpeuvent": 56311, + "(MAX": 56312, + "ĠARCH": 56313, + "Ġpov": 56314, + ".sourceforge": 56315, + "Ġjamais": 56316, + "Ġark": 56317, + "ĠBaghdad": 56318, + "ĠCLEAR": 56319, + "MenuBar": 56320, + "Ġtrois": 56321, + "CHEDULE": 56322, + "Ġ#čĊ": 56323, + "(Call": 56324, + "$order": 56325, + "(Material": 56326, + "Ġencontrado": 56327, + "$list": 56328, + "ĠMETHODS": 56329, + ".beginTransaction": 56330, + "_MAG": 56331, + "StyleSheet": 56332, + "Ġmajors": 56333, + "Ġindefinitely": 56334, + "cleanup": 56335, + "Ġhomeland": 56336, + "(dto": 56337, + "Dates": 56338, + "Presentation": 56339, + "ĠDK": 56340, + "={`/": 56341, + "ĉKey": 56342, + "(Block": 56343, + "_checkbox": 56344, + "needs": 56345, + "ĠonComplete": 56346, + "rico": 56347, + "Ġgleich": 56348, + "Ġxm": 56349, + "OOD": 56350, + "Better": 56351, + "ĠSQLITE": 56352, + ".Book": 56353, + "xad": 56354, + "ĠGone": 56355, + "ĉdp": 56356, + "Ġdevotion": 56357, + "Ġstm": 56358, + "Ġobsess": 56359, + "ĠBackend": 56360, + "Queries": 56361, + "Ik": 56362, + "//****************************************************************": 56363, + "Ġdividends": 56364, + ".parentElement": 56365, + "}\")ĊĊ": 56366, + "ĠMaterialPageRoute": 56367, + ":num": 56368, + "Ġexplic": 56369, + "ĠOL": 56370, + "least": 56371, + "Oops": 56372, + "imentos": 56373, + "Ġinsurers": 56374, + "Ġheroic": 56375, + "ĉfields": 56376, + ".imgur": 56377, + ".btnCancel": 56378, + "ĠDetective": 56379, + "(sm": 56380, + "ĠMutableLiveData": 56381, + ".lab": 56382, + "(([": 56383, + "Ġhairst": 56384, + "ĠTransactions": 56385, + "å¼Ģå§ĭ": 56386, + "ĠstdClass": 56387, + "uento": 56388, + "GIS": 56389, + "_cod": 56390, + "Instructions": 56391, + "Calls": 56392, + "PointerType": 56393, + "ĠRw": 56394, + "Ġassortment": 56395, + "ĠDIG": 56396, + "+r": 56397, + "_CERT": 56398, + "Ġinstability": 56399, + "Ġvib": 56400, + "onas": 56401, + "Ġroku": 56402, + "apellido": 56403, + "Ġangl": 56404, + "preneur": 56405, + "Ġfluids": 56406, + "isease": 56407, + "Ġdeed": 56408, + "quist": 56409, + "_CONSTANT": 56410, + "Ġequilibrium": 56411, + "_delegate": 56412, + "ĠQuantum": 56413, + "rei": 56414, + "Capabilities": 56415, + "rectangle": 56416, + "?><": 56417, + "alien": 56418, + "ĠJug": 56419, + "DNA": 56420, + "Tickets": 56421, + "Occurs": 56422, + "ĠHawk": 56423, + ".setHorizontalGroup": 56424, + "\\Collection": 56425, + "ffiti": 56426, + "Ġrearr": 56427, + ".setVerticalGroup": 56428, + "Ġcavity": 56429, + "Ġadulte": 56430, + "Facade": 56431, + "-wh": 56432, + "ĠLOL": 56433, + "ذ": 56434, + "Ġgrandparents": 56435, + "Swift": 56436, + "ĉwx": 56437, + "æīĢæľī": 56438, + "ifen": 56439, + "ffset": 56440, + "Beyond": 56441, + "//}ĊĊ": 56442, + "Ġwager": 56443, + "Ġbury": 56444, + "Ġcommence": 56445, + "registro": 56446, + "scient": 56447, + "ĠPercent": 56448, + "Ġдолж": 56449, + "(identifier": 56450, + ".setModel": 56451, + "Ġseldom": 56452, + "nton": 56453, + "Ġappliance": 56454, + "amus": 56455, + "rysler": 56456, + "Ġpanties": 56457, + "enguins": 56458, + "Ġmimic": 56459, + "ĠonChanged": 56460, + "Ġalcoholic": 56461, + ".reloadData": 56462, + "Charge": 56463, + "ĠFax": 56464, + "ĠjScrollPane": 56465, + "Empresa": 56466, + "Ġshattered": 56467, + "xba": 56468, + "Fonts": 56469, + "?s": 56470, + "Ġpostseason": 56471, + "retain": 56472, + "_rates": 56473, + "ĠrequestCode": 56474, + ".todo": 56475, + "´s": 56476, + "CHK": 56477, + "ĠKeeping": 56478, + "engeance": 56479, + "Ġvscode": 56480, + "IPPING": 56481, + "DefaultCloseOperation": 56482, + "_raise": 56483, + "ĠOculus": 56484, + "ograms": 56485, + "raj": 56486, + "pci": 56487, + "Ġcorrosion": 56488, + ".handleSubmit": 56489, + "Accessible": 56490, + "ĠPiano": 56491, + "little": 56492, + "ACL": 56493, + "Äĩe": 56494, + ".unwrap": 56495, + "ĠConvers": 56496, + "ĠLeben": 56497, + "ioneer": 56498, + "ĠMerchant": 56499, + "ĠJorge": 56500, + "Ġembracing": 56501, + "Ġventa": 56502, + "ást": 56503, + "Ġviene": 56504, + "Ċ": 56656, + "-growing": 56657, + "Ġdeepcopy": 56658, + "Ack": 56659, + "eggies": 56660, + "Ġ__(\"": 56661, + "Ġnoir": 56662, + "terrorism": 56663, + "Ġanthem": 56664, + "agency": 56665, + "_PACKAGE": 56666, + "ĠClosure": 56667, + ".registry": 56668, + "Ġmammals": 56669, + "L": 56700, + "Ġbluetooth": 56701, + ".Deep": 56702, + "-standing": 56703, + "ácil": 56704, + "Ġrooft": 56705, + "ĠPaths": 56706, + "_iterations": 56707, + "InvalidArgumentException": 56708, + ".spi": 56709, + "ĠUIAlertAction": 56710, + "uye": 56711, + "signin": 56712, + ".priority": 56713, + "ĠEssays": 56714, + "='{$": 56715, + "Ġè¿ĶåĽŀ": 56716, + "_signed": 56717, + ".persist": 56718, + "Ġredesign": 56719, + "ToLower": 56720, + "ĠNewman": 56721, + "=start": 56722, + "ĠIsraelis": 56723, + "asiswa": 56724, + "Speech": 56725, + "Ġnumeros": 56726, + "handlers": 56727, + "ĠWong": 56728, + "ĠмеÑĤод": 56729, + "Weights": 56730, + "ĠGujar": 56731, + "teil": 56732, + "ĠNonetheless": 56733, + "_EFFECT": 56734, + "Ġvect": 56735, + "ĠOsc": 56736, + "Ġcoats": 56737, + "ĠWheat": 56738, + "Ġgeek": 56739, + "ĠPROPERTY": 56740, + "worm": 56741, + "_constants": 56742, + "ĠBoulder": 56743, + "ĠParm": 56744, + "cole": 56745, + "ĠdefaultCenter": 56746, + "ĠRouge": 56747, + ":A": 56748, + "xcf": 56749, + "ĠVenice": 56750, + "median": 56751, + "Ġredemption": 56752, + "Fresh": 56753, + "Ġcosm": 56754, + "Ġfigur": 56755, + "Ġrefurb": 56756, + "COPE": 56757, + ".cd": 56758, + "Ġchords": 56759, + "ĠSgt": 56760, + "Åį": 56761, + "VPN": 56762, + "ĠSEND": 56763, + "ainen": 56764, + "_accounts": 56765, + "Ġtenth": 56766, + "Ġdissolved": 56767, + "": 57007, + "Ġlegitimacy": 57008, + "Ġoo": 57009, + "Slinky": 57010, + "Ġnationals": 57011, + ".words": 57012, + ";p": 57013, + "trap": 57014, + "omanip": 57015, + "Ġcues": 57016, + "Ġgraduating": 57017, + "Ġsemaphore": 57018, + "\"]);ĊĊ": 57019, + "acey": 57020, + "REET": 57021, + "Grab": 57022, + "ĠFelix": 57023, + "(Id": 57024, + "_neighbors": 57025, + "Ġmeaningless": 57026, + "(del": 57027, + "Ġjeder": 57028, + "ĠContentValues": 57029, + ".absolute": 57030, + "/cl": 57031, + "Ġxb": 57032, + "datum": 57033, + "Ġtortured": 57034, + "Ġrubbing": 57035, + "Scores": 57036, + "ĠðŁĺī": 57037, + "Ġavons": 57038, + "Ġamsterdam": 57039, + "EOS": 57040, + "Hal": 57041, + "Ġtrustworthy": 57042, + "#=": 57043, + ".EXTRA": 57044, + "Ġmano": 57045, + "isicing": 57046, + "-support": 57047, + "ĉcursor": 57048, + "ĠSpo": 57049, + "aimassage": 57050, + "Mission": 57051, + "[]{\"": 57052, + "Ġprinters": 57053, + "GREEN": 57054, + "Ġteg": 57055, + "Ġabdominal": 57056, + "!ĊĊĊĊĊĊ": 57057, + ".Short": 57058, + "азв": 57059, + "ĠGifts": 57060, + "}\")": 57061, + "(binding": 57062, + "xce": 57063, + "âĢij": 57064, + "infos": 57065, + "FormData": 57066, + "Ġdart": 57067, + "Ġelems": 57068, + "(inv": 57069, + "YL": 57070, + "tin": 57071, + "GENER": 57072, + "ữ": 57073, + "ĠTaken": 57074, + "uckle": 57075, + ":e": 57076, + "Ġspectral": 57077, + ".baidu": 57078, + "/');Ċ": 57079, + "Ġgreedy": 57080, + "esion": 57081, + ",,,,,,,,": 57082, + "Ġ/>,Ċ": 57083, + "InternalServerError": 57084, + "NSNotificationCenter": 57085, + "ĠAi": 57086, + "Ġspit": 57087, + "Ġaugmented": 57088, + "ĠstandardUserDefaults": 57089, + "FINITY": 57090, + "Race": 57091, + ":C": 57092, + "ĠRECORD": 57093, + "ĠHighlight": 57094, + "Ġ'`": 57095, + "Ġdeficits": 57096, + "Ġnei": 57097, + "Ġresearched": 57098, + "Ta": 57099, + "Ġcopp": 57100, + ".GetHashCode": 57101, + "):čĊčĊ": 57102, + "OnClick": 57103, + "ĠWellington": 57104, + "Ġrevival": 57105, + "æ¯Ķ": 57106, + "éĹ®": 57107, + "ĠNSS": 57108, + "Ġforn": 57109, + "Ġinté": 57110, + "ĠKuwait": 57111, + "_flip": 57112, + "_bo": 57113, + "_\\": 57114, + "Ġoccurrences": 57115, + "ĠScientists": 57116, + "SRC": 57117, + "ogens": 57118, + "igrant": 57119, + "REMOTE": 57120, + "ĠSID": 57121, + ".opts": 57122, + "uve": 57123, + "()])Ċ": 57124, + "Ġlibertarian": 57125, + "ĠGlide": 57126, + "lesen": 57127, + "Ġforme": 57128, + "owania": 57129, + "Ġannoyed": 57130, + "Defs": 57131, + "ĠExecutor": 57132, + "Ġcasts": 57133, + ".setChecked": 57134, + "ĠSharing": 57135, + ".SerializeObject": 57136, + "Ġselectors": 57137, + "_OTHER": 57138, + "미": 57139, + "(super": 57140, + "(OS": 57141, + "_VERIFY": 57142, + "idunt": 57143, + "';Ċ": 57145, + "Ġvidéo": 57146, + "ĠNegro": 57147, + "ĠLords": 57148, + "ĠTours": 57149, + "Ġsoftly": 57150, + ".receive": 57151, + "ĠERC": 57152, + "ĠdataSet": 57153, + "Badge": 57154, + "ĉEvent": 57155, + "Ġperl": 57156, + "Ġ{}\\": 57157, + "(sentence": 57158, + "OrUpdate": 57159, + "Ġdiminish": 57160, + "PIN": 57161, + "(draw": 57162, + ".ToDateTime": 57163, + ".EqualTo": 57164, + "(pin": 57165, + "-pencil": 57166, + "luent": 57167, + "ĠCaller": 57168, + "Ġplayful": 57169, + "-'+": 57170, + "xca": 57171, + "swick": 57172, + "){}Ċ": 57173, + "}:${": 57174, + "ĠMeth": 57175, + ".getCell": 57176, + ".break": 57177, + "Ġymax": 57178, + "='Ċ": 57391, + "ĠHiro": 57392, + "(TRUE": 57393, + "asurer": 57394, + "Ġcuer": 57395, + "Uber": 57396, + ".Operation": 57397, + "Ġolan": 57398, + "Ġthrilling": 57399, + "'.": 57421, + "ĉvalid": 57422, + "\"\",": 57423, + "Instrument": 57424, + ">J": 57425, + "Ġnostr": 57426, + "ĠRift": 57427, + "_Port": 57428, + "Ġveces": 57429, + "[['": 57430, + "Ġrallies": 57431, + "-series": 57432, + "Ġvv": 57433, + ".uc": 57434, + "Ġrtn": 57435, + "StateChanged": 57436, + "(ins": 57437, + "ĠCla": 57438, + "------------Ċ": 57439, + "cus": 57440, + "ĠReload": 57441, + "//------------------------------------------------------------------------------------------------": 57442, + ".seconds": 57443, + "_destination": 57444, + "Ġscrewed": 57445, + ">c": 57446, + "Thickness": 57447, + "Designer": 57448, + "Ġgrids": 57449, + "nÄħ": 57450, + "(cookie": 57451, + "Trip": 57452, + "-Mobile": 57453, + "Ġvoll": 57454, + "Ġgenital": 57455, + "Ġconfisc": 57456, + "ĠConfederate": 57457, + "ĠwebView": 57458, + "Ġmise": 57459, + "Ġcler": 57460, + "(selection": 57461, + "$date": 57462, + "Ġsharpen": 57463, + "ragen": 57464, + "AndUpdate": 57465, + "Ġremix": 57466, + "Ġhtons": 57467, + "RW": 57468, + "MPI": 57469, + "Ġretrieval": 57470, + "Ġrichest": 57471, + ".Decode": 57472, + ":initComponents": 57473, + "ĠTValue": 57474, + "Saint": 57475, + "@include": 57476, + "ĠPERSON": 57477, + ".sep": 57478, + "ĠLDAP": 57479, + "gba": 57480, + "ĠgroÃŁe": 57481, + "Ġreliably": 57482, + "ĠDFS": 57483, + ".getItemId": 57484, + "Ġprésent": 57485, + ".getToken": 57486, + "Ġchinese": 57487, + "ĠMeal": 57488, + "YOU": 57489, + "\">>ĊĊ": 58048, + "bower": 58049, + "Ġswapped": 58050, + "/install": 58051, + "Ġsinks": 58052, + "etrize": 58053, + "Ġdeclines": 58054, + "ĉmysql": 58055, + "ĠCString": 58056, + "ĠMotionEvent": 58057, + ".Language": 58058, + "Road": 58059, + "ÑĤеÑĢ": 58060, + "ascimento": 58061, + "'))->": 58062, + ".about": 58063, + "(editor": 58064, + "ĠRatings": 58065, + "income": 58066, + "Å¡e": 58067, + ".dequeueReusableCell": 58068, + "ĠAustrian": 58069, + "Ġsulla": 58070, + "ĠTribunal": 58071, + "ĠDidn": 58072, + "оваÑĢ": 58073, + "Ġinspections": 58074, + "Boss": 58075, + "Ġcocktails": 58076, + "Ġapologized": 58077, + "_subplot": 58078, + "opal": 58079, + "+=(": 58080, + "Ġresonance": 58081, + "ibu": 58082, + "Ġ리": 58083, + "roma": 58084, + "reserve": 58085, + "pls": 58086, + "ĠTah": 58087, + "axies": 58088, + "OPLE": 58089, + "ĠDarren": 58090, + "ĠZombie": 58091, + "_Map": 58092, + "Ġ])ĊĊ": 58093, + "ĠQi": 58094, + "ĠSail": 58095, + "Ġrestrictive": 58096, + "Ġerosion": 58097, + "-par": 58098, + "WHITE": 58099, + "Ġoldu": 58100, + "Ġaperture": 58101, + "Ġbitcoins": 58102, + "texto": 58103, + "ĠComcast": 58104, + "Ġtimeless": 58105, + "enkins": 58106, + "Ġfeeder": 58107, + "/tmp": 58108, + "resden": 58109, + "+'_": 58110, + ".Destroy": 58111, + "Ġçok": 58112, + "ĠDOCUMENT": 58113, + ".lng": 58114, + ".tagName": 58115, + "Ġkullan": 58116, + "egrate": 58117, + "Ġ(*.": 58118, + "ç¼ĸè¾ij": 58119, + "Ġhandshake": 58120, + "soc": 58121, + "_geometry": 58122, + "ĠDamascus": 58123, + "Minor": 58124, + "ĠKafka": 58125, + "ìŬ": 58126, + "Florida": 58127, + "_compute": 58128, + ".expr": 58129, + "Ġparalle": 58130, + "ĠDiaz": 58131, + "cir": 58132, + "[target": 58133, + "Ġjoking": 58134, + "Ġglor": 58135, + "(setq": 58136, + "_handlers": 58137, + "Hang": 58138, + "Ġferr": 58139, + "riminal": 58140, + "ĉĠĠĠĠĉĉ": 58141, + "enties": 58142, + "defines": 58143, + "-tax": 58144, + "jsonp": 58145, + "ĠUPS": 58146, + "metro": 58147, + "__;Ċ": 58148, + "ĠUganda": 58149, + "])):Ċ": 58150, + "_td": 58151, + "xae": 58152, + "lw": 58153, + ".OS": 58154, + "ĠLogged": 58155, + "acid": 58156, + "ĠMayo": 58157, + "aspect": 58158, + "Ġvaginal": 58159, + "Ġinitializing": 58160, + "Ġsteroids": 58161, + "fiction": 58162, + "GRE": 58163, + "gend": 58164, + "Ġliabilities": 58165, + "ĠLets": 58166, + "Mech": 58167, + "(nc": 58168, + "(change": 58169, + "Ġconnectors": 58170, + ":k": 58171, + "Ġtast": 58172, + "!\");ĊĊ": 58173, + "things": 58174, + "rophy": 58175, + "luetooth": 58176, + "ĠSignUp": 58177, + ".ctrl": 58178, + "Ġtherein": 58179, + "orda": 58180, + ".escape": 58181, + "igator": 58182, + "Ġpetrol": 58183, + "Ġspecimen": 58184, + "Ġdebuted": 58185, + "-Pro": 58186, + "Ġcrises": 58187, + ".addView": 58188, + "ëıĻ": 58189, + "-door": 58190, + "Ġmonet": 58191, + "Ġmillis": 58192, + "Ġvier": 58193, + "InternalEnumerator": 58194, + "Ġadmins": 58195, + "ĠLair": 58196, + "zin": 58197, + "getQuery": 58198, + "umbles": 58199, + "LIMIT": 58200, + "ĠVig": 58201, + "_song": 58202, + "": 58515, + "Ġpasado": 58516, + "thank": 58517, + "_Delete": 58518, + "ĠBrighton": 58519, + ",unsigned": 58520, + "ä½ľèĢħ": 58521, + "Ġaspirations": 58522, + "-how": 58523, + "Rose": 58524, + "=((": 58525, + "_needed": 58526, + "_plural": 58527, + ">ĊĊ": 58645, + "Ġsurfaced": 58646, + "ĠìłĢìŀ¥": 58647, + "platz": 58648, + "ĉemail": 58649, + "ceptors": 58650, + "\">(": 58651, + "Ġepile": 58652, + "读": 58653, + "ĠDebt": 58654, + "åijĬ": 58655, + "NOP": 58656, + "\"https": 58657, + ":j": 58658, + "FormItem": 58659, + "_LICENSE": 58660, + ".getDouble": 58661, + "ĠAgenda": 58662, + "ĉfinally": 58663, + "(filters": 58664, + "(av": 58665, + "ç¾İ": 58666, + "APER": 58667, + "Ġlava": 58668, + "еÑĢж": 58669, + "))))ĊĊ": 58670, + "Ġfaulty": 58671, + "_nm": 58672, + "Ġtrava": 58673, + "(Bitmap": 58674, + "Ġspeeding": 58675, + ">').": 58676, + "Ġscreened": 58677, + "_roll": 58678, + "ĠMacBook": 58679, + "ĠAUD": 58680, + "Ġdiagnose": 58681, + ".Generate": 58682, + "Ġ^^": 58683, + "Ġstrs": 58684, + "[Test": 58685, + "Ġransom": 58686, + "ĠDHCP": 58687, + "elden": 58688, + "Ġinterpretations": 58689, + "()].": 58690, + "flatMap": 58691, + "ĠlineHeight": 58692, + "_mount": 58693, + "ĠWizards": 58694, + "Ġsluts": 58695, + "ehler": 58696, + "odal": 58697, + "Ġmilitia": 58698, + "å²": 58699, + "earned": 58700, + "Ġmisery": 58701, + "intval": 58702, + "fund": 58703, + "Ġhides": 58704, + "Ġdiarr": 58705, + "ĠWesley": 58706, + "Ġxmm": 58707, + "Ġquem": 58708, + "ĠArabs": 58709, + "ifth": 58710, + "ategorized": 58711, + "Disposable": 58712, + "Pure": 58713, + "_NOTIFY": 58714, + "snippet": 58715, + "ĠGarrett": 58716, + ".running": 58717, + ".weights": 58718, + "Ġ(--": 58719, + "Ġinvariant": 58720, + "äºĭä»¶": 58721, + "ĠAllowed": 58722, + "dirs": 58723, + "Ġpassions": 58724, + "Ġlad": 58725, + "ĠFlush": 58726, + "menus": 58727, + ":block": 58728, + "Ġcompra": 58729, + ".chomp": 58730, + "allocator": 58731, + "Ġcurated": 58732, + "ĠKnowing": 58733, + "ĠPatterson": 58734, + "Ġtelah": 58735, + "'ex": 58736, + "Ġdoomed": 58737, + "Ġphilanth": 58738, + "otty": 58739, + ".styles": 58740, + "Owned": 58741, + "Ġallergies": 58742, + "=params": 58743, + "ocese": 58744, + "itelist": 58745, + "ĠSending": 58746, + "bef": 58747, + "orrar": 58748, + "ĠNão": 58749, + "ĠFargo": 58750, + "ĠLub": 58751, + "ĠCombined": 58752, + "_given": 58753, + "ĉĉĉĉĉĠĠĠĠ": 58754, + "Ġreconciliation": 58755, + "Patterns": 58756, + "azard": 58757, + "Ġbiomass": 58758, + "ĠHouses": 58759, + "respuesta": 58760, + "cco": 58761, + "/topics": 58762, + "ĠYuk": 58763, + "Ġweakened": 58764, + "_calendar": 58765, + "Ġmulheres": 58766, + "ĠMarl": 58767, + "Ġsine": 58768, + "ĠTil": 58769, + "ĠSouls": 58770, + "ĠDeutsche": 58771, + "ĠFOLLOW": 58772, + "Ġpipelines": 58773, + "ĠBeverly": 58774, + "_DIPSETTING": 58775, + "\"#": 58776, + "ĠProto": 58777, + ".big": 58778, + "ĠSavings": 58779, + "ĠTanz": 58780, + "jun": 58781, + "ĠGamma": 58782, + "ĠSadd": 58783, + "Ġadvisors": 58784, + "Ġroast": 58785, + "Ġunters": 58786, + "udies": 58787, + "_lon": 58788, + "-pointer": 58789, + "ĠElementRef": 58790, + "\\Builder": 58791, + "exampleInput": 58792, + ".webdriver": 58793, + "dataType": 58794, + "ĠQuite": 58795, + "ĠCeltics": 58796, + "uil": 58797, + "-defense": 58798, + "bish": 58799, + "ĠUIWindow": 58800, + "ĠSuddenly": 58801, + ".hot": 58802, + ".reason": 58803, + "Ġgör": 58804, + "AMD": 58805, + ".Multi": 58806, + "authenticated": 58807, + "regions": 58808, + ";(": 58809, + "аÑĢам": 58810, + "ĠKirby": 58811, + "$route": 58812, + "PRECATED": 58813, + "ĠDurham": 58814, + "owo": 58815, + "ĠPerforms": 58816, + "Ġdisregard": 58817, + "nst": 58818, + "ĠPols": 58819, + "ĠgetP": 58820, + "\"]:": 58821, + "-colored": 58822, + "(Keys": 58823, + "ĠAlleg": 58824, + "_modify": 58825, + "_loading": 58826, + "strained": 58827, + "Ġatroc": 58828, + "_phr": 58829, + "": 59821, + "ceph": 59822, + ".DateTimePicker": 59823, + ".\";ĊĊ": 59824, + "ĠTie": 59825, + ",item": 59826, + "Ġmenn": 59827, + "Gas": 59828, + "ocha": 59829, + "_virtual": 59830, + "Ġmasterpiece": 59831, + "_sequences": 59832, + "LTE": 59833, + "ĠSubmission": 59834, + "Caller": 59835, + "$\\": 59836, + "Sport": 59837, + "agus": 59838, + "ConstraintMaker": 59839, + "Ġcoloc": 59840, + "Ġwig": 59841, + "ĠУ": 59842, + "ĉArray": 59843, + "Looks": 59844, + "ĠGTA": 59845, + ".steps": 59846, + "atchewan": 59847, + "_ranges": 59848, + "extAlignment": 59849, + "ĠBrennan": 59850, + "Ġabstraction": 59851, + "ulerAngles": 59852, + ".misc": 59853, + "Ġantibodies": 59854, + "Ġexponential": 59855, + "ĠCHANNEL": 59856, + "expense": 59857, + "'y": 59858, + "Ġdetectives": 59859, + "Ġpurported": 59860, + "YSTEM": 59861, + "Ġradioactive": 59862, + "ĠLatina": 59863, + ".Encoding": 59864, + ".TAG": 59865, + "xin": 59866, + "Degree": 59867, + "uracion": 59868, + "prices": 59869, + "ĠReferentialAction": 59870, + "Ġrarity": 59871, + "Ġpiles": 59872, + "gende": 59873, + "_projects": 59874, + "_globals": 59875, + ".startTime": 59876, + "Ġ구": 59877, + "SECTION": 59878, + "_publish": 59879, + "Fault": 59880, + "DDL": 59881, + "_prior": 59882, + "Mom": 59883, + "Ġthicker": 59884, + "Ġsequelize": 59885, + "Ġessentials": 59886, + "stras": 59887, + "intr": 59888, + ">(()": 59889, + ".management": 59890, + "eil": 59891, + "éĹŃ": 59892, + "Aware": 59893, + ".City": 59894, + "ĠArbit": 59895, + "_DM": 59896, + "_keyboard": 59897, + "LObject": 59898, + "-webpack": 59899, + "ĠNewport": 59900, + "ĠprincipalColumn": 59901, + "legant": 59902, + "Ġpallet": 59903, + "Ġfracture": 59904, + "Ġgmail": 59905, + ".Meta": 59906, + "Above": 59907, + ".KeyEvent": 59908, + "jit": 59909, + "_macro": 59910, + "_PUSH": 59911, + "ứ": 59912, + "/controller": 59913, + "åĬłè½½": 59914, + "Ġsuperficial": 59915, + "exterity": 59916, + "Ġmensagem": 59917, + "Wind": 59918, + "iston": 59919, + ".openapi": 59920, + "иÑĢов": 59921, + "ĠSerializer": 59922, + "uctive": 59923, + "Ġzar": 59924, + "Places": 59925, + ".Static": 59926, + "Ba": 59927, + "Ġinadvert": 59928, + "ĠIndonesian": 59929, + "_IPV": 59930, + "(horizontal": 59931, + "ĠgetTitle": 59932, + "idepress": 59933, + "ĠConsoleColor": 59934, + "ipers": 59935, + "$out": 59936, + "Ġfestive": 59937, + "Ġevenings": 59938, + ".GetData": 59939, + "uitka": 59940, + "ĠManuals": 59941, + "ussed": 59942, + "_Max": 59943, + ".Chat": 59944, + "ĠAircraft": 59945, + "=com": 59946, + "FOUND": 59947, + "apro": 59948, + "Ġtreasures": 59949, + "_alive": 59950, + "Ġgadget": 59951, + "eking": 59952, + "ButtonDown": 59953, + "Browsable": 59954, + ".PERMISSION": 59955, + "PASSWORD": 59956, + "ĠHASH": 59957, + "fé": 59958, + "\\TestCase": 59959, + "LOSS": 59960, + "others": 59961, + ",J": 59962, + "Ġasshole": 59963, + "werk": 59964, + "Ġmã": 59965, + ".ie": 59966, + "evil": 59967, + "kontakte": 59968, + "////////////////////////////////////////////////////////////////////////////////Ċ": 59969, + "=sys": 59970, + "ĉlock": 59971, + "--;ĊĊ": 59972, + "_FUN": 59973, + "FillColor": 59974, + "óa": 59975, + "prend": 59976, + "Ġcompressor": 59977, + "Mother": 59978, + "ĠArcher": 59979, + ".goto": 59980, + "Ġwürde": 59981, + "Ġbamboo": 59982, + "ï¼İ": 59983, + "ĠTrees": 59984, + "Ġbumper": 59985, + "Ġsausage": 59986, + "ĠElasticsearch": 59987, + "Ġhorizontally": 59988, + "ĠGul": 59989, + "Immutable": 59990, + "Ġloser": 59991, + "Ġaborted": 59992, + "-demo": 59993, + "ĠHatch": 59994, + "Ġunde": 59995, + "Ġprocesso": 59996, + "-call": 59997, + "Income": 59998, + "åĥ": 59999, + "_returns": 60000, + "'].\"'": 60001, + "(sw": 60002, + "CBS": 60003, + "amilies": 60004, + "ĠYourself": 60005, + "ĠHolt": 60006, + ".MON": 60007, + "à§ĩ": 60008, + "ÑĪе": 60009, + "anon": 60010, + "ĠFontAwesome": 60011, + "producer": 60012, + "jr": 60013, + "Ġmau": 60014, + "ĉinter": 60015, + "Ġdishonest": 60016, + "Ġmagna": 60017, + "ĠCollective": 60018, + "Ġvraiment": 60019, + "Ġchoix": 60020, + "stay": 60021, + "Ġwelding": 60022, + "rising": 60023, + ",min": 60024, + "ĠFate": 60025, + "glob": 60026, + "RGBA": 60027, + "Ġdette": 60028, + "Ven": 60029, + "Ġembarrassment": 60030, + ".DELETE": 60031, + "gregar": 60032, + "-render": 60033, + "(bucket": 60034, + "\">ĊĊĊ": 60035, + ".waitKey": 60036, + "Busy": 60037, + "Ġdifferentiation": 60038, + "ĠCST": 60039, + ".Constant": 60040, + "ĠlineNumber": 60041, + "(matches": 60042, + "Ġwebsocket": 60043, + "Ġbarred": 60044, + "Ġpuedes": 60045, + "Mono": 60046, + "CORE": 60047, + "IID": 60048, + "ĠĠĠĠčĊčĊ": 60049, + "Ġpúblico": 60050, + "leaning": 60051, + "Ġcleansing": 60052, + "Ġcris": 60053, + "ĠDevils": 60054, + "_SETTING": 60055, + "untary": 60056, + ".);Ċ": 60057, + "ĊĠĠĠĊ": 60058, + "[curr": 60059, + "tsy": 60060, + "ĠAlexis": 60061, + "ritel": 60062, + "Ġpetroleum": 60063, + ".preprocessing": 60064, + "matter": 60065, + "ForResult": 60066, + "-license": 60067, + "Ġtravellers": 60068, + "ĠDispatcher": 60069, + "ennifer": 60070, + "Ġdigestive": 60071, + "PED": 60072, + "hibition": 60073, + "MASConstraintMaker": 60074, + "ĠWatt": 60075, + "Benef": 60076, + ".setView": 60077, + "dto": 60078, + "TEE": 60079, + "ĠPelosi": 60080, + "_EXTRA": 60081, + "Ġmedals": 60082, + "xhr": 60083, + "forecast": 60084, + "Ġnargin": 60085, + "ouns": 60086, + "-fill": 60087, + "_CURSOR": 60088, + "Ġsupervised": 60089, + "Ġturf": 60090, + "ĠEdgar": 60091, + "POSITION": 60092, + "ĠcategoryId": 60093, + "âī": 60094, + "_ER": 60095, + "á»§a": 60096, + "Shown": 60097, + ".ll": 60098, + "_POLICY": 60099, + "(),'": 60100, + "ĠPrev": 60101, + "ĠStringField": 60102, + "ĉGlobal": 60103, + "assed": 60104, + "Throughout": 60105, + "ostringstream": 60106, + ".awtextra": 60107, + "Ġslopes": 60108, + "ĠSequential": 60109, + "Ġgiorn": 60110, + "Ġzelf": 60111, + "Ġversatility": 60112, + "leneck": 60113, + ".cgi": 60114, + "Ġdoubling": 60115, + "ĠBangkok": 60116, + "Ġbuurt": 60117, + "Ġusuário": 60118, + "studio": 60119, + "Ġjeunes": 60120, + "Ġmuted": 60121, + "Ġips": 60122, + "_fraction": 60123, + "&&(": 60124, + "Ġstunt": 60125, + "');?>čĊ": 60149, + "Ġevapor": 60150, + "bable": 60151, + "ĠPRICE": 60152, + "Ġæ³": 60153, + "lucent": 60154, + "Ġvamp": 60155, + "ĠTechnician": 60156, + "Ġuniqueness": 60157, + "Mes": 60158, + "urban": 60159, + ".parametrize": 60160, + "ĠReplay": 60161, + "Sessions": 60162, + "embr": 60163, + "-Americans": 60164, + "_PROXY": 60165, + "Ġpian": 60166, + "Ġtrie": 60167, + "ĠDestructor": 60168, + "GameState": 60169, + "ĠIMF": 60170, + "chin": 60171, + "Ġporte": 60172, + "ĠSwal": 60173, + "åŁİ": 60174, + "Substring": 60175, + "iming": 60176, + "/Library": 60177, + "Ġfrightened": 60178, + "writes": 60179, + "Ġrecursos": 60180, + "arResult": 60181, + "_INITIALIZ": 60182, + "ĠBadge": 60183, + "_crc": 60184, + "Eight": 60185, + "ĠDISTINCT": 60186, + "Ġthro": 60187, + "@Xml": 60188, + "ĠLegendary": 60189, + "-twitter": 60190, + "_easy": 60191, + "Ġ+++": 60192, + "(DATA": 60193, + ".Locale": 60194, + "Ġkä": 60195, + "Ġnurt": 60196, + "Ġcruis": 60197, + "_ios": 60198, + "Ġsensing": 60199, + "_Line": 60200, + "ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 60201, + "pong": 60202, + "oleon": 60203, + "Ġwildcard": 60204, + "ç͍æĪ·åIJį": 60205, + "Ġbegging": 60206, + "Rod": 60207, + "ĠÃİ": 60208, + "_CELL": 60209, + "Researchers": 60210, + ".selector": 60211, + "_ing": 60212, + "Ġaspiring": 60213, + "Ġimmortal": 60214, + "Ġymin": 60215, + "_robot": 60216, + "Ġplur": 60217, + "BTC": 60218, + "ĠDID": 60219, + "Ġpiercing": 60220, + "*u": 60221, + "_DEFINED": 60222, + "ĠThi": 60223, + "itaire": 60224, + "(media": 60225, + "-ons": 60226, + "Ġchefs": 60227, + "Ġ\"*.": 60228, + "/AP": 60229, + "Ġrazor": 60230, + "ĠsearchData": 60231, + "Ġ=&": 60232, + "ĠãĢĤ": 60233, + "Ġmourn": 60234, + "tingham": 60235, + "Ġoli": 60236, + "ĠVernon": 60237, + "_RS": 60238, + "ŀæĢ§": 60239, + "Ġfácil": 60240, + "angen": 60241, + "celain": 60242, + "Ġail": 60243, + "lest": 60244, + "ĠQCOMPARE": 60245, + "gain": 60246, + "Ġε": 60247, + "ĠKob": 60248, + "ĠFault": 60249, + "_configs": 60250, + "ç»ĵæŀľ": 60251, + ".+": 60252, + "calar": 60253, + "(colors": 60254, + "Mul": 60255, + "_ART": 60256, + "Ġexperimenting": 60257, + "ermen": 60258, + "ĠAnglo": 60259, + ".FixedSingle": 60260, + "Sea": 60261, + "Ġctxt": 60262, + ".slider": 60263, + "Collapse": 60264, + "Grey": 60265, + "Ġfld": 60266, + "-proof": 60267, + ".capacity": 60268, + "getParent": 60269, + "ĠCompliance": 60270, + "Ġburgl": 60271, + "-rec": 60272, + "Ġoverwritten": 60273, + "MU": 60274, + "Ġrouters": 60275, + "ĉModel": 60276, + "Ġfantasies": 60277, + "avian": 60278, + "_prec": 60279, + "ĠScandin": 60280, + "Ġ//<": 60281, + "/oct": 60282, + "Ġceremonies": 60283, + "Months": 60284, + "undy": 60285, + "Ġqued": 60286, + "ĠNou": 60287, + "ĠVibr": 60288, + ".rgb": 60289, + "Ġcitrus": 60290, + "Ġbraces": 60291, + "-uppercase": 60292, + "getTable": 60293, + "Ġdopo": 60294, + "ĠKerr": 60295, + "_CHILD": 60296, + "-cloud": 60297, + "ĉMatrix": 60298, + "Ġgardening": 60299, + "Sing": 60300, + "almost": 60301, + "Requirements": 60302, + "uguay": 60303, + "(Property": 60304, + "subscriber": 60305, + "FAST": 60306, + "reaction": 60307, + "(lp": 60308, + ")})Ċ": 60309, + "`).": 60310, + ".wallet": 60311, + "_exchange": 60312, + ".Maximum": 60313, + "ĠVerb": 60314, + "âĶģ": 60315, + "()<": 60316, + "ï¼ĽĊ": 60317, + "ROT": 60318, + "CARD": 60319, + "ubit": 60320, + "{@": 60321, + "_kel": 60322, + "ĠTooltip": 60323, + "MySQL": 60324, + "MainActivity": 60325, + "arf": 60326, + "Ġmalign": 60327, + "Ġseinen": 60328, + "apist": 60329, + "Ġ<%": 60330, + "MethodImpl": 60331, + "Mil": 60332, + "ĠMick": 60333, + ".depend": 60334, + ">&": 60367, + "ĉok": 60368, + "-low": 60369, + ".usuario": 60370, + "nested": 60371, + "XB": 60372, + "OURS": 60373, + ".BorderColor": 60374, + "Ġbrow": 60375, + "ĠÐķ": 60376, + "corr": 60377, + "ĠRedskins": 60378, + ".getTag": 60379, + ".getTransaction": 60380, + "Ġstigma": 60381, + "hardt": 60382, + "ĠPlayerPrefs": 60383, + "alsy": 60384, + "ucson": 60385, + "Languages": 60386, + "ĠOlivia": 60387, + "Ġtac": 60388, + "Ġbli": 60389, + "Ġcaval": 60390, + "Ġconsolidated": 60391, + "Ġperil": 60392, + "Ġdele": 60393, + "Ġformulated": 60394, + "Ġhighways": 60395, + ".spawn": 60396, + "==$": 60397, + "ĠNiet": 60398, + "Ġveggies": 60399, + "ypo": 60400, + "-rule": 60401, + "ĠVie": 60402, + "/epl": 60403, + "Ġenfants": 60404, + "stringLiteral": 60405, + "Ġtoughest": 60406, + "buyer": 60407, + "Ġcovariance": 60408, + "Ġili": 60409, + "ĠSophie": 60410, + "ĠBAB": 60411, + "Ġ\"),": 60412, + "ĠUk": 60413, + "currentIndex": 60414, + "_userdata": 60415, + ".codec": 60416, + "ĠPunjab": 60417, + "ĠSNP": 60418, + "lol": 60419, + "advance": 60420, + "Ġcomfy": 60421, + "JsonIgnore": 60422, + "Ġfashionable": 60423, + "ĠICON": 60424, + "Ġora": 60425, + "ĠPricing": 60426, + "E": 60484, + "tering": 60485, + "/screens": 60486, + "Ġheightened": 60487, + "аÑĢÑĤ": 60488, + "Authorities": 60489, + "_bbox": 60490, + "ünst": 60491, + ".fontSize": 60492, + "ĠBOOLEAN": 60493, + "divide": 60494, + "ĠSloven": 60495, + "ucer": 60496, + "ÙĴ": 60497, + "stub": 60498, + "Ġnavigating": 60499, + ":animated": 60500, + "_NOW": 60501, + "_vect": 60502, + "}{Ċ": 60503, + "@(": 60504, + "Ġtelecom": 60505, + "Ġcontracting": 60506, + "ĠAssange": 60507, + "Ġextracting": 60508, + "Ġgrö": 60509, + "cobra": 60510, + ".DIS": 60511, + "Ġcrab": 60512, + "Ġtwitch": 60513, + "Ġverts": 60514, + "Ġrejects": 60515, + "ĉformat": 60516, + "Ġregeneration": 60517, + ".Sys": 60518, + "solve": 60519, + "ĉdialog": 60520, + "shi": 60521, + "meter": 60522, + "(best": 60523, + "validators": 60524, + "Ġonwards": 60525, + "Ġguru": 60526, + "Ġmoderator": 60527, + "owied": 60528, + "experiment": 60529, + "rub": 60530, + "Ġmqtt": 60531, + "ĠCaucas": 60532, + "Ġnationalism": 60533, + "Ġmange": 60534, + "ĉImGui": 60535, + "/Edit": 60536, + "Ġinh": 60537, + "Ġintellig": 60538, + "erokee": 60539, + "ĉexport": 60540, + "Ġdiscriminate": 60541, + "subtract": 60542, + "ĠMoodle": 60543, + "enser": 60544, + "ĠGuides": 60545, + "RAP": 60546, + "-hot": 60547, + "_grp": 60548, + ".picture": 60549, + "XA": 60550, + "ĠinitView": 60551, + "_Comm": 60552, + "Ġoverdose": 60553, + "Ġ+ĊĊ": 60554, + "ĠSilent": 60555, + "shows": 60556, + "Ġinterpolate": 60557, + "Formation": 60558, + "Ġbisc": 60559, + "markets": 60560, + "(SC": 60561, + "Ze": 60562, + "ĠNetworking": 60563, + "Ġadrenal": 60564, + "ĠGuns": 60565, + "eteor": 60566, + "Declared": 60567, + "orgetown": 60568, + "Ġkarena": 60569, + "/password": 60570, + "_addresses": 60571, + "ITERAL": 60572, + "Buzz": 60573, + "ĠConway": 60574, + "(case": 60575, + "PWD": 60576, + "heiro": 60577, + "(act": 60578, + "**čĊ": 60579, + "());ĊĊĊ": 60580, + "Ġanv": 60581, + "Ġ..ĊĊ": 60582, + "(MenuItem": 60583, + "(mail": 60584, + "_sections": 60585, + "ĉnet": 60586, + "Ġplut": 60587, + "Ġwrench": 60588, + "/object": 60589, + "ĠIst": 60590, + "ĠVIS": 60591, + "/pub": 60592, + "alten": 60593, + "Ġguitars": 60594, + "Ġantibiotic": 60595, + "ï¼ĸ": 60596, + "¹": 60597, + "Ġ\"+\"": 60598, + "formula": 60599, + "Ġbabes": 60600, + "ĠPrompt": 60601, + "Ġenim": 60602, + "/player": 60603, + "ĉref": 60604, + "ĠbyÄĩ": 60605, + "Ġconsumes": 60606, + "ĠHast": 60607, + "ĠTao": 60608, + "Ġ'))Ċ": 60609, + "Ġclam": 60610, + "Ġthighs": 60611, + "Ġmotif": 60612, + "ApiOperation": 60613, + "ĠWL": 60614, + "getC": 60615, + "ĉflags": 60616, + "ointments": 60617, + "Ġeconomical": 60618, + "needle": 60619, + "xls": 60620, + "practice": 60621, + "utzer": 60622, + "timeofday": 60623, + "-output": 60624, + "ĠfindById": 60625, + "ĠBuddy": 60626, + "ÐŀÑĤ": 60627, + "Seven": 60628, + "ĠBark": 60629, + "Ġenvoy": 60630, + "_algorithm": 60631, + "åĪ©": 60632, + "Ġballistic": 60633, + "ç§»": 60634, + "rades": 60635, + "ĉdoc": 60636, + "roducing": 60637, + "ĠEating": 60638, + "Unmount": 60639, + "/dataTables": 60640, + "_bonus": 60641, + "Ġlitt": 60642, + "pps": 60643, + ")localObject": 60644, + "perf": 60645, + "ĠHelvetica": 60646, + "shutdown": 60647, + "/ml": 60648, + ".tokens": 60649, + "ĠHardcore": 60650, + ",row": 60651, + "/bg": 60652, + "Scaler": 60653, + "âĢĶas": 60654, + "_logits": 60655, + "âĢĻint": 60656, + "ĉApp": 60657, + "Implicit": 60658, + ".Fprintf": 60659, + "ETO": 60660, + "Ġterra": 60661, + "Ġpossessing": 60662, + ".rstrip": 60663, + ",),": 60664, + "=yes": 60665, + "ĠStripe": 60666, + "?=": 60667, + "neutral": 60668, + ".good": 60669, + "Ġkennen": 60670, + "ĠSung": 60671, + "fault": 60672, + "ystatechange": 60673, + "Canadian": 60674, + "','\".$": 60675, + "ĠMits": 60676, + "ænd": 60677, + "ĠSTRUCT": 60678, + "ĠURLWithString": 60679, + "ĠCompass": 60680, + "Ġ--ĊĊ": 60681, + "ĠNSLayoutConstraint": 60682, + "|min": 60683, + "-adjust": 60684, + "Ġrebuilt": 60685, + "LIGHT": 60686, + "/se": 60687, + "-mount": 60688, + "vpn": 60689, + "validated": 60690, + "(QObject": 60691, + "Ġignition": 60692, + "ĠChargers": 60693, + "RYPTO": 60694, + "]initWithFrame": 60695, + "ĠFluid": 60696, + "Ġcadre": 60697, + "Ġnominations": 60698, + "Neill": 60699, + "ĠHou": 60700, + "Ġcurrents": 60701, + "_gene": 60702, + "(inp": 60703, + "Paris": 60704, + "zÄĻ": 60705, + "aggregate": 60706, + "Ġassoc": 60707, + "weeted": 60708, + "errat": 60709, + "âĢĵĊĊ": 60710, + "Ġ'/',Ċ": 60711, + "fixture": 60712, + "ĠHighest": 60713, + "ambient": 60714, + "Ġchmod": 60715, + "Ġconte": 60716, + "Ġsensual": 60717, + "Ġgarment": 60718, + "zers": 60719, + "ĠPowered": 60720, + "domains": 60721, + "Reward": 60722, + "iomanip": 60723, + "Ġcockpit": 60724, + "outfile": 60725, + "Ġbuiltin": 60726, + "Ġinsisting": 60727, + ".vars": 60728, + "zipcode": 60729, + "Ġ����": 60730, + "fails": 60731, + "Ġconsolidation": 60732, + "_oid": 60733, + "Planet": 60734, + "Ġ=\",": 60735, + "ĉel": 60736, + "UILT": 60737, + "ätz": 60738, + "afari": 60739, + "ĠMcCl": 60740, + "Timeline": 60741, + "Esta": 60742, + "Ġfram": 60743, + "YE": 60744, + "Ġcerebral": 60745, + "OfMonth": 60746, + "ĠPregn": 60747, + "ĠклаÑģÑģ": 60748, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 60749, + "ĠFres": 60750, + "Approved": 60751, + ".Special": 60752, + "ĠProtestant": 60753, + "Ġallergy": 60754, + "_pcm": 60755, + "ĉCopyright": 60756, + "ĠsuperClass": 60757, + "\"strconv": 60758, + "ĠMohamed": 60759, + "Ġ'//": 60760, + "ForeColor": 60761, + "Arthur": 60762, + "ĠJungle": 60763, + "Ġveins": 60764, + "Sad": 60765, + "Ġbackups": 60766, + "ĠOpinion": 60767, + "ût": 60768, + "Ġintermitt": 60769, + "odyn": 60770, + "ĠChristina": 60771, + "Ġandre": 60772, + "Ġevacuation": 60773, + "palette": 60774, + "horse": 60775, + "ĠResident": 60776, + "ĠHassan": 60777, + ".Nil": 60778, + "Ġaisle": 60779, + "ĠGrowing": 60780, + "Ġbloginfo": 60781, + "/sql": 60782, + "_ioctl": 60783, + "Scaling": 60784, + "ĠMonad": 60785, + "_cpp": 60786, + "ĠHutch": 60787, + "ĠAppleWebKit": 60788, + "Expense": 60789, + "_JOB": 60790, + "Ġpointless": 60791, + "FromBody": 60792, + "antal": 60793, + "Ġdepicting": 60794, + "ĠCELL": 60795, + "Ġrefin": 60796, + "ĠCNC": 60797, + "ì¹ĺ": 60798, + "_dimensions": 60799, + "ĠSAN": 60800, + "Ġaft": 60801, + "Ġfootsteps": 60802, + "ccoli": 60803, + "_PHONE": 60804, + "/math": 60805, + "-kind": 60806, + "ĠMeans": 60807, + "ichael": 60808, + ".guna": 60809, + "Ġinauguration": 60810, + "-driving": 60811, + "(delete": 60812, + "ĠtotalCount": 60813, + "_MC": 60814, + ".Extension": 60815, + "Commercial": 60816, + "ĠzIndex": 60817, + "$": 60949, + "Ġebay": 60950, + "Ġcaptive": 60951, + "pliant": 60952, + "ĠCalculates": 60953, + "olta": 60954, + "esting": 60955, + "_revision": 60956, + "Ġmús": 60957, + "+m": 60958, + "\",\"\",\"": 60959, + "WHAT": 60960, + "Ġcompassionate": 60961, + "harga": 60962, + "[random": 60963, + "Ġmodulo": 60964, + "(sn": 60965, + "Ġoccupations": 60966, + "////Ċ": 60967, + "ĉboard": 60968, + "ĠBalk": 60969, + "wiÄħ": 60970, + "ĠWifi": 60971, + ".Profile": 60972, + ":maj": 60973, + "ĉmat": 60974, + "LOCKS": 60975, + "(jButton": 60976, + "Ġ('$": 60977, + "Mur": 60978, + "æĮī": 60979, + "bble": 60980, + "Ġfrog": 60981, + "-hide": 60982, + "Ġbroadcaster": 60983, + "à¸ŀ": 60984, + "haled": 60985, + "Ġamusing": 60986, + "_predictions": 60987, + "_intr": 60988, + "Ġeagle": 60989, + "аÑĤелÑĮ": 60990, + "ĠgetList": 60991, + "psilon": 60992, + "Ġcharacterization": 60993, + "ARDS": 60994, + "Ġrelocation": 60995, + "Ġrulers": 60996, + "PAY": 60997, + "ĠDefinitely": 60998, + "_Action": 60999, + "Ġclosures": 61000, + "Ġfactual": 61001, + "odynamic": 61002, + "Ġprecautions": 61003, + "niej": 61004, + "ĠParties": 61005, + "ĠSubaru": 61006, + "Ġcousins": 61007, + "arbeit": 61008, + ".money": 61009, + "gunta": 61010, + "(and": 61011, + "getitem": 61012, + ".StylePriority": 61013, + "Ġslid": 61014, + "singleton": 61015, + "Ġgarn": 61016, + "ĠPAS": 61017, + "Ġdazz": 61018, + "aż": 61019, + "Ġbogus": 61020, + "ĠMog": 61021, + "Ġrivalry": 61022, + "isol": 61023, + "Ġlandmarks": 61024, + "ñas": 61025, + "Bern": 61026, + "ĠSachs": 61027, + "Ġ\")ĊĊ": 61028, + "Ġhostility": 61029, + "_mex": 61030, + "mere": 61031, + "Mot": 61032, + "pictureBox": 61033, + "Defense": 61034, + "Ġaffidavit": 61035, + "otherwise": 61036, + ".directory": 61037, + "_UnityEngine": 61038, + "-blog": 61039, + ".skin": 61040, + "phem": 61041, + "Apellido": 61042, + "erchant": 61043, + "[class": 61044, + "Ġwart": 61045, + ".\"[": 61046, + "aleur": 61047, + "/back": 61048, + "ĠĠĠĠĉĠĠĠ": 61049, + "Ġprecipitation": 61050, + "Ġobstruction": 61051, + "ĠpObj": 61052, + "Ġrupt": 61053, + "UCKET": 61054, + "aye": 61055, + "æİĴ": 61056, + "gx": 61057, + "Ġecl": 61058, + "Ġsecrecy": 61059, + "/Header": 61060, + "ĠLesb": 61061, + "Ġlei": 61062, + "ĠBulletin": 61063, + "Ġgiveaway": 61064, + ".Home": 61065, + "_ROOM": 61066, + "\"W": 61067, + "Ġcowork": 61068, + "_ra": 61069, + "ĠCycling": 61070, + "ĠPaw": 61071, + "Ġpupil": 61072, + "/arch": 61073, + "ĠFileUtils": 61074, + "é¦ĸ": 61075, + "rsp": 61076, + "Ġfreedoms": 61077, + "ĠLear": 61078, + "}`).": 61079, + "Ġbowls": 61080, + "/block": 61081, + "_logging": 61082, + "Ġmethane": 61083, + "Ġhorns": 61084, + "Ġwonderfully": 61085, + "Ġalterations": 61086, + "Ġexile": 61087, + "lsen": 61088, + "_pause": 61089, + "_LANGUAGE": 61090, + "ĠUSDA": 61091, + "_mysql": 61092, + "_AMOUNT": 61093, + "ĠLIFE": 61094, + "Ġyoungsters": 61095, + "Ġriots": 61096, + "[E": 61097, + "Ġunforgettable": 61098, + ",},Ċ": 61099, + "Disposed": 61100, + "ĠAssassin": 61101, + "UNG": 61102, + "ĠNewsp": 61103, + "UserService": 61104, + ":aload": 61105, + "+',": 61106, + "Ġsettlers": 61107, + "Ġscreams": 61108, + "Ġinconvenience": 61109, + ".Rotate": 61110, + "Ġjars": 61111, + "ĠPuzzle": 61112, + "Ġmest": 61113, + "arsi": 61114, + "ĠSharma": 61115, + "|(": 61116, + ".ds": 61117, + "ĠSacred": 61118, + "_evt": 61119, + "Ġexpresses": 61120, + "Ġhoch": 61121, + "ĠDuch": 61122, + ".calls": 61123, + "thr": 61124, + "ĠSheffield": 61125, + ".AlertDialog": 61126, + "Ġradically": 61127, + "Ġtrous": 61128, + "Ġprevailing": 61129, + "ĠWWII": 61130, + "âĢĻn": 61131, + "ensely": 61132, + "ĠYesterday": 61133, + "ĠSirius": 61134, + "Ġkillers": 61135, + "ĠFFT": 61136, + "Ġoval": 61137, + "'):čĊ": 61138, + "Ġìłķë³´": 61139, + "ourage": 61140, + "ĠCheckbox": 61141, + "Workbook": 61142, + ".defer": 61143, + "_floor": 61144, + "Ġcouncill": 61145, + "Ġnorske": 61146, + "moil": 61147, + "orea": 61148, + "Ġmarketed": 61149, + "_SUR": 61150, + "xAA": 61151, + "Ġstained": 61152, + "eut": 61153, + "ĠMeng": 61154, + "Ġieee": 61155, + ".extern": 61156, + "egie": 61157, + "Ġrapp": 61158, + "ĠPyongyang": 61159, + "'class": 61160, + "Mob": 61161, + "ĠinitialValue": 61162, + "_wave": 61163, + "Ġjab": 61164, + "Ġmasculine": 61165, + "Ġamplifier": 61166, + "Ġtty": 61167, + "PathComponent": 61168, + "_xt": 61169, + "ĠGFP": 61170, + "/sec": 61171, + "ĉdispatch": 61172, + "markdown": 61173, + "ĠSchn": 61174, + "bole": 61175, + "··": 61176, + "mousemove": 61177, + "ĠerrMsg": 61178, + "Ġasign": 61179, + "_mono": 61180, + "ToSelector": 61181, + "ĠZu": 61182, + "(Rect": 61183, + "ĠErrorCode": 61184, + "latin": 61185, + "angible": 61186, + "vtk": 61187, + "CGSize": 61188, + "Pokemon": 61189, + "Ġclassmates": 61190, + "Ġattracts": 61191, + "ĠTatto": 61192, + "ultan": 61193, + "ológ": 61194, + "Ġhalted": 61195, + "न": 61196, + "ĠKart": 61197, + "Ġue": 61198, + "_InitStructure": 61199, + "TestClass": 61200, + "ĠAirbnb": 61201, + "_\",": 61202, + "Ġcharcoal": 61203, + "Ġipc": 61204, + "ĠStretch": 61205, + ".glide": 61206, + "latesAutoresizingMaskIntoConstraints": 61207, + "Ġpotion": 61208, + "ITTLE": 61209, + "Ġcountert": 61210, + "_hd": 61211, + "prepared": 61212, + "Ads": 61213, + "ĠVampire": 61214, + "robots": 61215, + ".CreateIndex": 61216, + "StatusLabel": 61217, + "Ġtucked": 61218, + "afür": 61219, + "Ut": 61220, + "Ġsweater": 61221, + "_FN": 61222, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĉ": 61223, + "ataka": 61224, + "Ġeyebrows": 61225, + "acoes": 61226, + "uden": 61227, + ".LinearLayoutManager": 61228, + "Ġsway": 61229, + "Ġmultin": 61230, + "())))Ċ": 61231, + "ĠNSUInteger": 61232, + "ĠMyBase": 61233, + "Partner": 61234, + "utschen": 61235, + "ĠCater": 61236, + ".setBackgroundColor": 61237, + "Ġaccomplishment": 61238, + "_problem": 61239, + ".dtd": 61240, + "ĠpageNumber": 61241, + "Ġjackets": 61242, + "Ġcropped": 61243, + "uels": 61244, + "ĠHep": 61245, + "Ġcapped": 61246, + "*Math": 61247, + "_callbacks": 61248, + "Ġpubb": 61249, + "ĠBrunswick": 61250, + ".respond": 61251, + "[\"_": 61252, + "Ġbedding": 61253, + "hythm": 61254, + "OX": 61255, + "(speed": 61256, + "Ġpesticides": 61257, + "Ġ-------": 61258, + ".Blue": 61259, + "Ġnoodles": 61260, + "ĠGoes": 61261, + "Ġsaver": 61262, + "oxy": 61263, + "_completion": 61264, + "ĠSwinger": 61265, + "ĠgetDate": 61266, + "Ġminded": 61267, + "integration": 61268, + "ĠLotus": 61269, + "(stop": 61270, + "(',');Ċ": 61271, + "Ġfloods": 61272, + "ĠWorkflow": 61273, + "Ġerupted": 61274, + "Macro": 61275, + "ĠSauce": 61276, + "ĠeventName": 61277, + "\\Input": 61278, + "Breaking": 61279, + "ĉwhen": 61280, + "_pw": 61281, + "INDER": 61282, + "ĠWellness": 61283, + "Ġvoxel": 61284, + "ĠMell": 61285, + "ĠMEDIA": 61286, + "SENS": 61287, + "ĠFunds": 61288, + "ĠMild": 61289, + "Ċ": 61298, + "Ġtempting": 61299, + "Ġtestament": 61300, + "Ġbible": 61301, + "Ġconsulted": 61302, + "ĠIndexError": 61303, + "è¨ĺ": 61304, + "Ġkeypad": 61305, + "izzo": 61306, + "(ok": 61307, + "Ġwhatsapp": 61308, + "ĠRemoteException": 61309, + "Ġteamed": 61310, + "âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ": 61311, + "»,": 61312, + "ĠgetTime": 61313, + "diag": 61314, + "issy": 61315, + "Ġhed": 61316, + "Ġknots": 61317, + "jom": 61318, + "Ġfunnel": 61319, + "-mails": 61320, + "Ġexporting": 61321, + "ĠVL": 61322, + "ĠKarn": 61323, + "ĠBuddhism": 61324, + "ĠAllan": 61325, + "_RADIUS": 61326, + "Ġwording": 61327, + "ĠForget": 61328, + "ĠCorona": 61329, + "iphy": 61330, + "Ġlimburg": 61331, + "uggy": 61332, + "ĠUserRepository": 61333, + "imin": 61334, + "(ele": 61335, + "Ġlabelled": 61336, + "社": 61337, + "ĠHerman": 61338, + ".qq": 61339, + "Ġ\"));Ċ": 61340, + "ieber": 61341, + ".Translate": 61342, + "ryn": 61343, + "Ġdesenv": 61344, + "umd": 61345, + "Simply": 61346, + "ĉmode": 61347, + "Rpc": 61348, + "ĠValencia": 61349, + "Ġstaffers": 61350, + "Ġselv": 61351, + "ĠSpike": 61352, + "Ġdelic": 61353, + "Ġeru": 61354, + "_DT": 61355, + "Judge": 61356, + "á»ķ": 61357, + "ĠBasin": 61358, + ".mutable": 61359, + "\"url": 61360, + "Ġtariff": 61361, + "ĠSleeve": 61362, + "Ġflare": 61363, + ".dropout": 61364, + "Ġbrides": 61365, + ")),čĊ": 61366, + "_constraints": 61367, + "destruct": 61368, + "Outline": 61369, + "Ġdisappears": 61370, + "_locked": 61371, + "ĠNSLocalizedString": 61372, + "cke": 61373, + "ĉnull": 61374, + "adresse": 61375, + "Ġtopping": 61376, + "ĠJoker": 61377, + "bishop": 61378, + "ноÑģÑĤÑĮ": 61379, + "andering": 61380, + "_amp": 61381, + "=time": 61382, + "_Space": 61383, + "_PULL": 61384, + "'=": 61385, + "Ġantiqu": 61386, + "Ġcach": 61387, + "___ĊĊ": 61388, + "ONES": 61389, + "оÑı": 61390, + "Ġunread": 61391, + ".policy": 61392, + "oooooooo": 61393, + "룬": 61394, + "Ġusted": 61395, + "ĠRece": 61396, + "Ġallem": 61397, + "ãĥ¼ãĤ¹": 61398, + "ĠThoughts": 61399, + "veillance": 61400, + "istrate": 61401, + "_lane": 61402, + "Ġfamed": 61403, + ".GetName": 61404, + "Ġsmoother": 61405, + "ĠQualified": 61406, + "azers": 61407, + "_geo": 61408, + "Fax": 61409, + "ĠMinds": 61410, + "ĠRaises": 61411, + "Ġtranscripts": 61412, + "Conversation": 61413, + "Ġremarked": 61414, + "ëĤĺ": 61415, + "dling": 61416, + "Ġdeploying": 61417, + "ĠsharedApplication": 61418, + "Ġkp": 61419, + "FontAwesomeIcon": 61420, + "_dummy": 61421, + "reiben": 61422, + "ĠJaneiro": 61423, + "Directions": 61424, + ".getBean": 61425, + "sass": 61426, + "Ġcommanders": 61427, + "vation": 61428, + "errorCode": 61429, + "ĠAlloy": 61430, + ".localized": 61431, + "Ðij": 61432, + "Ġdishwasher": 61433, + "ĠSoup": 61434, + "Nu": 61435, + "_Default": 61436, + "Ġuneven": 61437, + "Ġ/>\";Ċ": 61438, + "-Based": 61439, + "Ġseamlessly": 61440, + "-null": 61441, + "ĠXC": 61442, + "Ġstew": 61443, + "(delay": 61444, + "ATORS": 61445, + "ĠWheeler": 61446, + "\"H": 61600, + "east": 61601, + ".air": 61602, + "âĢľBut": 61603, + "ObjectContext": 61604, + "successfully": 61605, + "_land": 61606, + "Ġfolds": 61607, + "_COORD": 61608, + "Ġsubpo": 61609, + ".getAddress": 61610, + "instr": 61611, + "Materials": 61612, + "ÑĥÑģÑĤ": 61613, + "deposit": 61614, + "-last": 61615, + "_GRAY": 61616, + "=find": 61617, + "Ġmutant": 61618, + "Ġlesbienne": 61619, + "letcher": 61620, + "ROUGH": 61621, + "ureka": 61622, + ".capture": 61623, + "Ġenn": 61624, + "Ġ([[": 61625, + "ĠFlu": 61626, + "ĠtaskId": 61627, + "ĠHussein": 61628, + ".folder": 61629, + "Ġausterity": 61630, + "ISTRATION": 61631, + "_Impl": 61632, + "注æĦı": 61633, + "Ġdecree": 61634, + "-chat": 61635, + "Ġimplication": 61636, + "Ġguesses": 61637, + "ulkan": 61638, + "Analytics": 61639, + ".plus": 61640, + "COMMAND": 61641, + "ели": 61642, + "»ĊĊ": 61643, + "_SITE": 61644, + "ĠequalTo": 61645, + "SupportFragmentManager": 61646, + "ĠRecording": 61647, + "å®ĮæĪIJ": 61648, + "Ġbaggage": 61649, + "Ġpitchers": 61650, + "ĠEh": 61651, + "oque": 61652, + "ĉcnt": 61653, + "Ġ=>$": 61654, + "/foo": 61655, + "IRA": 61656, + "ĠSatellite": 61657, + "borah": 61658, + "Ġ}}\"Ċ": 61659, + "ĠEnds": 61660, + "ĠSpray": 61661, + ",param": 61662, + ".Chrome": 61663, + "*q": 61664, + "thought": 61665, + "ibrated": 61666, + "Ġthieves": 61667, + "Ġbeneficiaries": 61668, + "Entered": 61669, + "ottesville": 61670, + "Ġveterin": 61671, + "ByID": 61672, + "quipe": 61673, + "umption": 61674, + "-unit": 61675, + "ExecutionContext": 61676, + "@s": 61677, + "ĠGiov": 61678, + ".ToolTip": 61679, + "_friend": 61680, + "(attributes": 61681, + "Ġdumping": 61682, + "ĠJC": 61683, + "_DOCUMENT": 61684, + "ĠArmour": 61685, + "(insert": 61686, + ".HorizontalAlignment": 61687, + "ĠQed": 61688, + "ãģĦãģ¾ãģĻ": 61689, + "/git": 61690, + "ĠYYYY": 61691, + "ĠCardiff": 61692, + "Ġapa": 61693, + "organic": 61694, + "ĠWhereas": 61695, + "ĠæĿ": 61696, + "ĠMia": 61697, + "Ġdemolition": 61698, + "Ġscars": 61699, + "Ġpai": 61700, + "Ġretries": 61701, + "Ġrq": 61702, + "ĠDenis": 61703, + "(Utils": 61704, + "Ġalleviate": 61705, + "ĠPIC": 61706, + "idue": 61707, + "Ġacknowledging": 61708, + "Ġ//////////////////////////////////": 61709, + "ç¡®å®ļ": 61710, + "Ä«": 61711, + "\\Json": 61712, + ".binary": 61713, + "Ġxtype": 61714, + "signals": 61715, + "ĠAppearance": 61716, + "&r": 61717, + "}s": 61718, + "Ci": 61719, + "ĠIllum": 61720, + "porate": 61721, + "hog": 61722, + "ĠindexOf": 61723, + "\\Command": 61724, + "_parallel": 61725, + "ĠSherlock": 61726, + "íĥ": 61727, + "Ġ\"\")čĊ": 61728, + "////////////////////////////////////////////////////////////////////////////////////////////////": 61729, + "Ġcriticize": 61730, + "ĠSoap": 61731, + "ĠMatcher": 61732, + "Ġgrilled": 61733, + "*T": 61734, + "Ġadore": 61735, + "ulling": 61736, + "Ġjedoch": 61737, + "_refs": 61738, + "leanup": 61739, + "ĠJAXB": 61740, + "Ġroses": 61741, + "ĠLiam": 61742, + "sizei": 61743, + "Ġgetchar": 61744, + "Ġtarde": 61745, + "-tooltip": 61746, + "Ġqualifier": 61747, + "ĠIntermediate": 61748, + "_Window": 61749, + "ĠMalta": 61750, + "Disconnect": 61751, + "ewhere": 61752, + "Campo": 61753, + "Ġirrational": 61754, + "ledo": 61755, + "ĠDN": 61756, + "ARGV": 61757, + "Ġoutro": 61758, + "Ġthirteen": 61759, + "Joseph": 61760, + "MAR": 61761, + "/gl": 61762, + "Jess": 61763, + "ĠPsychiat": 61764, + "ĠpaddingBottom": 61765, + "-loop": 61766, + "/fonts": 61767, + "_seen": 61768, + "Teams": 61769, + "ReactDOM": 61770, + "(man": 61771, + "(xpath": 61772, + ".getSimpleName": 61773, + ">(*": 61774, + "ĠPvt": 61775, + "Ġelders": 61776, + "Ġpies": 61777, + ".userAgent": 61778, + "-region": 61779, + "ĠGreeks": 61780, + "(fragment": 61781, + "stu": 61782, + "Ġcouncils": 61783, + "Ġstamina": 61784, + "ĠGoddess": 61785, + "西": 61786, + "Ġphilosophers": 61787, + "Ġpersone": 61788, + "ĠLose": 61789, + "ĠCLR": 61790, + "ĠDocs": 61791, + "Ġsoak": 61792, + "ĠHOLDER": 61793, + "Ġbells": 61794, + "hashCode": 61795, + "RATE": 61796, + "_WEIGHT": 61797, + "inous": 61798, + "endra": 61799, + "ophobic": 61800, + "Ġprose": 61801, + "Ġfinely": 61802, + "/oauth": 61803, + "(space": 61804, + "adge": 61805, + "ĠMama": 61806, + "ĠstringBuffer": 61807, + "Ġstint": 61808, + "Ġmisma": 61809, + "Ġvillains": 61810, + "ĠCrimea": 61811, + "Ġdiploma": 61812, + "ĠпоÑģл": 61813, + "ĠBea": 61814, + "(join": 61815, + "Ġíķ´": 61816, + "CHAT": 61817, + "pering": 61818, + "ĠCros": 61819, + "Ġmonkeys": 61820, + "Ġpreds": 61821, + "yla": 61822, + ",,,": 61823, + "Ġvibrator": 61824, + "ĠNU": 61825, + "åħĪ": 61826, + "fant": 61827, + "zet": 61828, + "Ġbietet": 61829, + "unft": 61830, + "sworth": 61831, + ".Flow": 61832, + "Ġpsyched": 61833, + "ĠContinental": 61834, + ">t": 61835, + "Ġquilt": 61836, + ".UP": 61837, + "Ġexpansive": 61838, + "Dispose": 61839, + "(language": 61840, + "Caps": 61841, + "_ZONE": 61842, + "Ġrecycle": 61843, + "ĠManaged": 61844, + "currentColor": 61845, + ".broadcast": 61846, + "signIn": 61847, + ".prom": 61848, + "llu": 61849, + "ueblo": 61850, + "Ġpunches": 61851, + "Ġautomat": 61852, + "Ġassigning": 61853, + "ĠcreateUser": 61854, + "ĠAllied": 61855, + "Ġconductor": 61856, + "Ĥ¨": 61857, + "Ġsaddle": 61858, + "Ġdni": 61859, + "omedical": 61860, + "-West": 61861, + "PositiveButton": 61862, + "Ġitalic": 61863, + "?[": 61864, + "(trigger": 61865, + "Ġelephants": 61866, + "\":\"\",\"": 61867, + "Ġcaliber": 61868, + "rafted": 61869, + "digits": 61870, + "Ġmarshal": 61871, + "milliseconds": 61872, + "markers": 61873, + "mom": 61874, + "/place": 61875, + "Ġholistic": 61876, + ":t": 61877, + "#,": 61878, + "Ġboto": 61879, + "Ġnausea": 61880, + "ĠShooting": 61881, + "itech": 61882, + "ĠtextStatus": 61883, + "())Ċ": 62104, + "ADDRESS": 62105, + "BST": 62106, + "etzt": 62107, + "ĠQgs": 62108, + "Sense": 62109, + "ExceptionHandler": 62110, + "ĠChu": 62111, + ".getOwnProperty": 62112, + "Ġexercised": 62113, + "iotic": 62114, + "ĠReleases": 62115, + "Ġpinterest": 62116, + "olie": 62117, + "isoft": 62118, + "Ġsequencing": 62119, + "Ġpadre": 62120, + "]));čĊ": 62121, + "(radius": 62122, + ".med": 62123, + "ainties": 62124, + ".ObjectModel": 62125, + "Ġemple": 62126, + "Ġseguro": 62127, + "Stars": 62128, + "Ġqualitative": 62129, + "lemn": 62130, + "á»±": 62131, + ">\").": 62132, + "Ġgx": 62133, + "-cert": 62134, + "ĠASTM": 62135, + "Ġfullname": 62136, + "Ġtelemetry": 62137, + "ĠCambodia": 62138, + "_ul": 62139, + "ĠClare": 62140, + "CUSTOM": 62141, + "QC": 62142, + "ĠUns": 62143, + "ĠHTTPS": 62144, + "ĠParkinson": 62145, + "ancybox": 62146, + "','.": 62147, + "Tue": 62148, + ".getLast": 62149, + "Ġabi": 62150, + "Äħd": 62151, + "Ast": 62152, + "ĠEditing": 62153, + ".Unity": 62154, + "jmp": 62155, + "Ġmats": 62156, + "ĠsharedPreferences": 62157, + "Captain": 62158, + ".pageSize": 62159, + "Ġrtl": 62160, + "Ġanmeld": 62161, + "RuntimeObject": 62162, + "Ġdemande": 62163, + "(\";": 62164, + "seite": 62165, + "-headed": 62166, + "ĠKra": 62167, + "ĠFONT": 62168, + "`\\": 62169, + "ClassNotFoundException": 62170, + ".avg": 62171, + "atical": 62172, + "Aj": 62173, + "Ġpermitting": 62174, + "Proj": 62175, + "ERRQ": 62176, + "Ġcreampie": 62177, + "ĠBuyer": 62178, + "-modules": 62179, + "ĠSundays": 62180, + "|`Ċ": 62181, + "Ġdaytime": 62182, + "Ġ+(": 62183, + "Ġglitch": 62184, + "ĠOperand": 62185, + "Ġtoxins": 62186, + "inya": 62187, + "DNS": 62188, + "ĠSas": 62189, + "Cake": 62190, + "ĠNationals": 62191, + ".addTo": 62192, + "Ġsinking": 62193, + "Ġcomprehension": 62194, + "Ġscor": 62195, + "agements": 62196, + "Ġtard": 62197, + "Ġmarching": 62198, + "ĠMTV": 62199, + "Ġsane": 62200, + "CreateInfo": 62201, + "ắ": 62202, + "ĠendIndex": 62203, + "ĉlayout": 62204, + "ĠåIJį": 62205, + "SITE": 62206, + "ĠTHERE": 62207, + "Ġ[{'": 62208, + "opathic": 62209, + "Ġtransmitter": 62210, + "/body": 62211, + "Ġpund": 62212, + "ĠClosing": 62213, + "Ġsetattr": 62214, + "Ġbounded": 62215, + "Atlas": 62216, + "suming": 62217, + "(times": 62218, + "parer": 62219, + "ynom": 62220, + "feit": 62221, + "Ġfrem": 62222, + "-leg": 62223, + "ĠBras": 62224, + ">#": 62225, + "Ġì¶ľëł¥": 62226, + "ĠINSTANCE": 62227, + "ĠCouch": 62228, + "_hosts": 62229, + "likelihood": 62230, + ".Marker": 62231, + "ĠMasks": 62232, + "Ġcereal": 62233, + "utilities": 62234, + "Ġelemental": 62235, + "Ġdistorted": 62236, + "inactive": 62237, + "cry": 62238, + "WL": 62239, + "UPPORTED": 62240, + ".Throws": 62241, + "/schema": 62242, + "serie": 62243, + ".\"',": 62244, + "ĠBenedict": 62245, + "-picker": 62246, + "iggs": 62247, + "ĠPirate": 62248, + "åij¨æľŁ": 62249, + "ĠThema": 62250, + "ĠSouthampton": 62251, + "ĠarrayWith": 62252, + "ĠPaula": 62253, + "Ġpredictor": 62254, + "-Ass": 62255, + ".userid": 62256, + "Ġperi": 62257, + "Ġexaggerated": 62258, + "urate": 62259, + "arseille": 62260, + "ĠConcent": 62261, + "ĠPik": 62262, + "Ġ@_;ĊĊ": 62263, + "Ġformations": 62264, + "Ġdenomin": 62265, + "\"/>.Ċ": 62266, + "endedor": 62267, + "Ġpancre": 62268, + "Ġamt": 62269, + "ĠonResume": 62270, + "onDelete": 62271, + "ĠBCH": 62272, + ")(\"": 62273, + "movement": 62274, + "Ġpotassium": 62275, + "": 70826, + "ĠPPC": 70827, + "isz": 70828, + "akeFromNib": 70829, + "ĠDisp": 70830, + "ĠAthletics": 70831, + "Ġnightclub": 70832, + "GOOD": 70833, + ".setGeometry": 70834, + "+[": 70835, + "/send": 70836, + "Ġbinaries": 70837, + "Ġráp": 70838, + ":req": 70839, + "-consuming": 70840, + "ertime": 70841, + "UPDATED": 70842, + "_nullable": 70843, + "VIN": 70844, + "ulia": 70845, + "cyan": 70846, + "Ġmisunderstanding": 70847, + "orical": 70848, + "degrees": 70849, + "Leading": 70850, + ".AR": 70851, + "ickest": 70852, + "Nuevo": 70853, + "uforia": 70854, + "Ġgoodies": 70855, + "Ġfores": 70856, + "()<<\"": 70857, + "ademic": 70858, + "ActionCreators": 70859, + "servername": 70860, + "(nt": 70861, + "dbContext": 70862, + "Ġairborne": 70863, + "Ġexhibitions": 70864, + "cele": 70865, + "Ġtela": 70866, + "": 70882, + ".setPreferredSize": 70883, + "ĠMID": 70884, + "ĠAless": 70885, + "Ġhorsepower": 70886, + "Ġatm": 70887, + "ĠPackaging": 70888, + "Ġciphertext": 70889, + "RequestMethod": 70890, + "Ġbeiden": 70891, + "è£": 70892, + "ĠPOW": 70893, + ".WriteHeader": 70894, + "director": 70895, + "-but": 70896, + "ãģłãģķãģĦ": 70897, + "incer": 70898, + "_dn": 70899, + "!!!!!": 70900, + "Ġmanufactures": 70901, + ".TextUtils": 70902, + "Ġconsciously": 70903, + "Ġbounced": 70904, + "culture": 70905, + "ĠSpar": 70906, + "ĠPiper": 70907, + ".press": 70908, + "-owner": 70909, + "Ġevaluator": 70910, + "ĠSTREAM": 70911, + ".PictureBoxSizeMode": 70912, + "Ġsugars": 70913, + "ScreenWidth": 70914, + "ĠnextState": 70915, + "Ġivory": 70916, + "Ġbrunch": 70917, + "density": 70918, + "_OW": 70919, + "ĠCoronavirus": 70920, + "ĠCFR": 70921, + "bak": 70922, + "\\Category": 70923, + "æķ°ç»Ħ": 70924, + "Ġinvokevirtual": 70925, + "}()Ċ": 70926, + "Ġsujet": 70927, + "-marker": 70928, + "isdigit": 70929, + "ĠMobil": 70930, + "ĠJsonRequestBehavior": 70931, + "_REMOTE": 70932, + ".existsSync": 70933, + "Ġriches": 70934, + ".presenter": 70935, + "ĠglColor": 70936, + "Ġhanya": 70937, + "Ġfortress": 70938, + "Ġflashed": 70939, + "viz": 70940, + "requently": 70941, + "buat": 70942, + "$con": 70943, + ">|": 70944, + ".Func": 70945, + "Ġhumorous": 70946, + "uem": 70947, + ".ZERO": 70948, + "ĠSTL": 70949, + "ĠBuk": 70950, + "/sample": 70951, + "ĠGros": 70952, + "Recipes": 70953, + "Ġinflated": 70954, + "Ġswung": 70955, + ":F": 70956, + "Facing": 70957, + ".Theme": 70958, + "ник": 70959, + "Ġsplendid": 70960, + "ĠrequestId": 70961, + ".CenterScreen": 70962, + "/autoload": 70963, + "embedded": 70964, + "_depart": 70965, + "ĠPorts": 70966, + "à¹ĥ": 70967, + "айд": 70968, + "discussion": 70969, + "_consum": 70970, + "Ġscouts": 70971, + "Ġcolabor": 70972, + ".Stage": 70973, + ".nano": 70974, + "eldorf": 70975, + "Ġgemacht": 70976, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 70977, + "Ġpolicymakers": 70978, + "_PKT": 70979, + ",Th": 70980, + "oky": 70981, + "_UID": 70982, + "Ping": 70983, + "Ġorchest": 70984, + "Ġoptics": 70985, + "uhan": 70986, + "ĠXOR": 70987, + "Ġespañol": 70988, + "ĠAdidas": 70989, + "rng": 70990, + "mans": 70991, + ".vstack": 70992, + "Ġgetaway": 70993, + "Ġhierarchical": 70994, + "anoia": 70995, + "ĠBitmapFactory": 70996, + "realm": 70997, + "ĉap": 70998, + "_apps": 70999, + "-divider": 71000, + ".drawer": 71001, + "ĠHARD": 71002, + "'];?>Ċ": 71003, + "-packed": 71004, + "æ²»": 71005, + "_STRUCTURE": 71006, + "[Y": 71007, + "iParam": 71008, + "(eq": 71009, + "Ġencompasses": 71010, + "Ġ\\ĊĊ": 71011, + "->[": 71012, + "&utm": 71013, + "groupon": 71014, + "strate": 71015, + "DY": 71016, + "omorphic": 71017, + "':[": 71018, + "Ġgravitational": 71019, + "ĠMicha": 71020, + "ĠTencent": 71021, + "Ġcoached": 71022, + "ì¶ľ": 71023, + "ÑĥменÑĤ": 71024, + "/mobile": 71025, + "MouseDown": 71026, + "bud": 71027, + "ĠYas": 71028, + "ĠProviders": 71029, + "NZ": 71030, + "ĉreport": 71031, + "errmsg": 71032, + "ĠimagePath": 71033, + "acterial": 71034, + "ĠManga": 71035, + "wicklung": 71036, + "(usuario": 71037, + "\"));čĊčĊ": 71038, + "/***": 71039, + "Ġorganise": 71040, + "Indexed": 71041, + "_QUAL": 71042, + "(PyObject": 71043, + "Ġsurrendered": 71044, + "POCH": 71045, + "ĠNOTES": 71046, + "\\\\\"": 71047, + "-job": 71048, + "Ġseventy": 71049, + "####Ċ": 71050, + "ĠManor": 71051, + "Ġdownright": 71052, + "Ġtimeframe": 71053, + "insurance": 71054, + "checker": 71055, + "ĠSECRET": 71056, + "Ġechoes": 71057, + "ĠCarmen": 71058, + ".setHorizontalAlignment": 71059, + "ĠisChecked": 71060, + "ĠTOR": 71061, + "_nn": 71062, + "('(": 71063, + "FetchRequest": 71064, + "ĠPrinted": 71065, + "Fluid": 71066, + "ĠSTACK": 71067, + "GES": 71068, + "aigned": 71069, + "igor": 71070, + ".Unknown": 71071, + "CBC": 71072, + "ĠCarlson": 71073, + ".URI": 71074, + "Ġplight": 71075, + "/start": 71076, + "ĠPersonnel": 71077, + "ĠPREFIX": 71078, + ",**": 71079, + "Ġlimite": 71080, + "_heat": 71081, + "%ï¼Į": 71082, + "ĠDonne": 71083, + "getNode": 71084, + "ĠScientology": 71085, + "Ġcomet": 71086, + "Ġwenig": 71087, + "Aside": 71088, + "ĠMPEG": 71089, + "'?": 71090, + "variably": 71091, + ".endDate": 71092, + "Ġuncont": 71093, + "ĠScores": 71094, + "ĠLoginForm": 71095, + ".generated": 71096, + ",ch": 71097, + "-mar": 71098, + "ĠNed": 71099, + "ĠeventId": 71100, + "+p": 71101, + "ĠSIN": 71102, + "/reset": 71103, + ".REACT": 71104, + "ĠMessi": 71105, + "_RANK": 71106, + ".writeFile": 71107, + "Ġcripp": 71108, + "esthetic": 71109, + "ERSIST": 71110, + "Ġreimbursement": 71111, + "CurrentValue": 71112, + "Ġunin": 71113, + "DownLatch": 71114, + "ĠpaddingRight": 71115, + "Ġstocked": 71116, + "/'.": 71117, + "Ġrepayment": 71118, + "trak": 71119, + "/backend": 71120, + "Ġизмен": 71121, + "CSR": 71122, + "Ġpreventive": 71123, + "Ġpantalla": 71124, + "_trim": 71125, + "Pedido": 71126, + "hospital": 71127, + "Ġmanageable": 71128, + "routeParams": 71129, + "textures": 71130, + "......ĊĊ": 71131, + "Ġsélection": 71132, + "NameValuePair": 71133, + "Ġpollut": 71134, + "Modes": 71135, + "ĠLaud": 71136, + "jay": 71137, + "ĠUrs": 71138, + "Ġsigner": 71139, + "ĠJJ": 71140, + "ĠCherokee": 71141, + "_EXISTS": 71142, + "Ġdwar": 71143, + "Ġ($('#": 71144, + "Ġreef": 71145, + ">{$": 71146, + "ĠBaylor": 71147, + "ĠModelState": 71148, + "-_": 71149, + "ĠStructures": 71150, + "Ġsouvent": 71151, + "Specify": 71152, + "(pipe": 71153, + "Ġfracking": 71154, + "ĠGPA": 71155, + "Ġbele": 71156, + "ĉĉĉĉĉĉĉĠĠĠ": 71157, + "ĠMinority": 71158, + "Ġtud": 71159, + "Ġopenness": 71160, + "ĠIllustrated": 71161, + "Ġoxidation": 71162, + "ĠNK": 71163, + "ĉUpdate": 71164, + "ĠEMS": 71165, + "ĠTeddy": 71166, + "Ġgenerals": 71167, + "ĉMat": 71168, + "Ġradios": 71169, + "ĠAntique": 71170, + "conomy": 71171, + "ĠSquadron": 71172, + ")','": 71173, + "声": 71174, + "Ġyoure": 71175, + "ĠMainPage": 71176, + "Ġbehaviours": 71177, + "enght": 71178, + "(@\"%@\",": 71179, + "Ġtestcase": 71180, + "ĠCompilation": 71181, + "Ġflavours": 71182, + "ĠExtend": 71183, + "illator": 71184, + "Ġcoh": 71185, + "Ġspline": 71186, + "ĠKG": 71187, + "-pay": 71188, + "Ġcommunism": 71189, + "ĠBusinesses": 71190, + "ocking": 71191, + ".MaxLength": 71192, + "assandra": 71193, + "quiring": 71194, + "adden": 71195, + "ĠJeb": 71196, + "_fault": 71197, + "[file": 71198, + "Ġprominence": 71199, + "disciplinary": 71200, + "âĢĶthey": 71201, + "_extent": 71202, + "ĠVIC": 71203, + "Ġentails": 71204, + ".partner": 71205, + "Ġhippoc": 71206, + "League": 71207, + "çĶ·": 71208, + "wipe": 71209, + "-spinner": 71210, + "Ġsalute": 71211, + "ĠSurgical": 71212, + "(outputs": 71213, + "worked": 71214, + "[strlen": 71215, + "appointed": 71216, + "ĠHeg": 71217, + "ĠACPI": 71218, + "([^": 71219, + "uala": 71220, + "_tol": 71221, + "ĠRit": 71222, + ".Payment": 71223, + "kowski": 71224, + "Ġwalmart": 71225, + "requirements": 71226, + "ĠFINSEQ": 71227, + "_BACKGROUND": 71228, + "ĠOsborne": 71229, + "(errorMessage": 71230, + "Reporting": 71231, + "Ġauctions": 71232, + "Ġcombos": 71233, + "ĠNoticed": 71234, + "_oct": 71235, + "Ġprimero": 71236, + "taire": 71237, + "_hr": 71238, + "Ġмод": 71239, + "Ġcontradictory": 71240, + "=\"@": 71241, + "achines": 71242, + "(optarg": 71243, + "ĠPenguin": 71244, + "ĠAbbas": 71245, + "Ġsublime": 71246, + "Ġpageable": 71247, + "ĠDefensive": 71248, + "Ġdistinctly": 71249, + "ĠAutomatically": 71250, + "Understanding": 71251, + "EqualityComparer": 71252, + "gota": 71253, + "Ġ\"::": 71254, + "Ġpulver": 71255, + "ĠBattles": 71256, + "Ġunparalleled": 71257, + "TCHA": 71258, + "Ġconstrued": 71259, + "-aff": 71260, + "Ġprecursor": 71261, + "-lfs": 71262, + "Ġmaduras": 71263, + "ĠDaisy": 71264, + "ĠArbeits": 71265, + ".Management": 71266, + "ĉIn": 71267, + "Ġrobes": 71268, + "Ġspéc": 71269, + "âĢľ(": 71270, + "Ġmaternity": 71271, + "extent": 71272, + "ĠSpacer": 71273, + "DidAppear": 71274, + "ĉus": 71275, + ".getRequestDispatcher": 71276, + "(cols": 71277, + "Ġplummet": 71278, + "ìħ": 71279, + "Ġ{ĊĊĊĊ": 71280, + "érica": 71281, + "ĠSizes": 71282, + ".enum": 71283, + ".Highlight": 71284, + "Ġ!!}ĊĊĊ": 71293, + "Wenn": 71294, + "Ġclimax": 71295, + "Ġcrem": 71296, + "_that": 71297, + "[â̦": 71298, + "_domains": 71299, + "_REPLY": 71300, + "Ġcompleta": 71301, + "VEST": 71302, + "_particle": 71303, + "Ġsop": 71304, + "Ġfatalities": 71305, + "implify": 71306, + "ĠSKF": 71307, + "Ġinfusion": 71308, + "ĠJavier": 71309, + "Ġballet": 71310, + "Ġamigo": 71311, + ".want": 71312, + "Ġcollagen": 71313, + "ĠLawyer": 71314, + ".Statement": 71315, + ".rt": 71316, + "baar": 71317, + "EndPoint": 71318, + "ĠBek": 71319, + "SHIP": 71320, + "Ġpatriarch": 71321, + "ĠAunt": 71322, + "_TM": 71323, + "ĠmÃŃn": 71324, + "Ġmastered": 71325, + "WXYZ": 71326, + "Ġespos": 71327, + "=logging": 71328, + "Ġrighteousness": 71329, + "torrent": 71330, + "Ġbst": 71331, + "_CHAIN": 71332, + "Ġoutskirts": 71333, + "(rotation": 71334, + "Ġ'.')": 71335, + "igrants": 71336, + "+lsi": 71337, + "ĠCCTV": 71338, + "_PHASE": 71339, + ".azure": 71340, + "_Process": 71341, + "vae": 71342, + "ĠTropical": 71343, + "ĠAnkara": 71344, + "imageView": 71345, + "_RUNNING": 71346, + "Ġ*)__": 71347, + "ến": 71348, + "(cli": 71349, + "scatter": 71350, + "Ġsche": 71351, + "Registrar": 71352, + "Ġairing": 71353, + "Ġpyplot": 71354, + "isión": 71355, + "/customer": 71356, + "Ġsimplement": 71357, + "Ġclassy": 71358, + "ĠDWC": 71359, + "ĠBashar": 71360, + "ĠDEVELO": 71361, + "ĠVick": 71362, + "avail": 71363, + "ĠHö": 71364, + "_extend": 71365, + "drFc": 71366, + ".isNotBlank": 71367, + "Ġplais": 71368, + "|}Ċ": 71369, + "Ġpornofil": 71370, + "labs": 71371, + "Ġhaus": 71372, + "Ġoriginating": 71373, + "Ġsurrounds": 71374, + "ĠQUAL": 71375, + "meg": 71376, + "/logger": 71377, + "[obj": 71378, + "Ġirresponsible": 71379, + "ĠPublicKey": 71380, + "HONE": 71381, + ":'/": 71382, + "ibox": 71383, + "ĠFVector": 71384, + "|{Ċ": 71385, + "ataloader": 71386, + "hawks": 71387, + "HDR": 71388, + "Ġescalation": 71389, + "ĠPodsDummy": 71390, + "elite": 71391, + "Ġpresup": 71392, + "Cached": 71393, + ">G": 71394, + ".optimizer": 71395, + "ĠVisible": 71396, + "´Ģ": 71397, + "Ġnen": 71398, + "Ġpcs": 71399, + "ĠIdle": 71400, + "[Any": 71401, + "Ġkeyboards": 71402, + "ĠCOMPONENT": 71403, + "Ġtitanium": 71404, + "(mut": 71405, + "ĠLedger": 71406, + "Ġprosperous": 71407, + "etrofit": 71408, + "_LL": 71409, + "_patient": 71410, + "Ġpdata": 71411, + "Ġkontakte": 71412, + "Swipe": 71413, + "Ġcheerful": 71414, + "ĠHonduras": 71415, + "\"][$": 71416, + "Ġhemorrh": 71417, + "\":\"+": 71418, + "Ġleasing": 71419, + "Ġinstalls": 71420, + "ĠPax": 71421, + "ĠLogistics": 71422, + "Ġkinetic": 71423, + "ĠPhon": 71424, + "_movement": 71425, + "ĉbytes": 71426, + "Ġcinco": 71427, + "ĠMadness": 71428, + "\")+": 71429, + "ĠJE": 71430, + "_ij": 71431, + "SceneManager": 71432, + "ĠBust": 71433, + "ptest": 71434, + "aea": 71435, + "Ġbesser": 71436, + "ÃŃg": 71437, + "дин": 71438, + "(tasks": 71439, + "(\"(\"": 71440, + "setType": 71441, + "(outfile": 71442, + "ĉreset": 71443, + "ĠARC": 71444, + "Ġmúsica": 71445, + "ĠShelf": 71446, + "ĠminY": 71447, + "pch": 71448, + "Ġweiber": 71449, + "issor": 71450, + "Ġtrouve": 71451, + "ĉButton": 71452, + "Ġregenerated": 71453, + "Å£i": 71454, + "imachinery": 71455, + "blocking": 71456, + ".dataTables": 71457, + "_frac": 71458, + "ĠAdvantage": 71459, + ".visitMethod": 71460, + "éĩįæĸ°": 71461, + "Ġextrapol": 71462, + "Ġteasing": 71463, + "ĠHitch": 71464, + "ĠGeek": 71465, + "ESCO": 71466, + "Ġwich": 71467, + "ĉax": 71468, + "_decor": 71469, + "ĠscreenWidth": 71470, + "ĠSophia": 71471, + "Forgot": 71472, + ".uni": 71473, + "ĠVenture": 71474, + "_collision": 71475, + "Ġlawmaker": 71476, + "(Edit": 71477, + "blers": 71478, + "ĠgetNext": 71479, + "âĢĶyou": 71480, + "MediaPlayer": 71481, + "ĠHorde": 71482, + "ĠCongressman": 71483, + "observations": 71484, + "ĉproperty": 71485, + "Ġ<--": 71486, + "CreatedAt": 71487, + "ubyte": 71488, + "Ġquarantine": 71489, + "Ġdistressed": 71490, + "_APB": 71491, + "ĠGoodman": 71492, + "ãĤ«": 71493, + "Ġrecomend": 71494, + "_PRINTF": 71495, + "DONE": 71496, + "Bindable": 71497, + "rstrip": 71498, + "centaje": 71499, + "ĠUnexpected": 71500, + "ĠSCHOOL": 71501, + "ĠProfessionals": 71502, + "ĠGPUs": 71503, + "Lesson": 71504, + "Exclusive": 71505, + "Ġatrav": 71506, + "ĠDank": 71507, + "ĠLawyers": 71508, + "ĠWalton": 71509, + ">[]": 71510, + "Ġaloud": 71511, + "=\"../../../": 71512, + "Ġdebating": 71513, + "ĠAVG": 71514, + "_VOL": 71515, + "/cgi": 71516, + ".deg": 71517, + ":g": 71518, + ".Infof": 71519, + "MeasureSpec": 71520, + ".song": 71521, + "mtree": 71522, + "ulls": 71523, + "Jordan": 71524, + "ĠCovers": 71525, + "Ġattributable": 71526, + "Ġjedis": 71527, + "iatrics": 71528, + "Ġrotterdam": 71529, + "Ġmeld": 71530, + "ĠContentType": 71531, + "Ġmantle": 71532, + "Ġalice": 71533, + "_duplicate": 71534, + "/Internal": 71535, + "Ġfilesize": 71536, + "ĉfire": 71537, + "rese": 71538, + "ondere": 71539, + "Ġfamiliarity": 71540, + "ĠCrest": 71541, + "Ġkarma": 71542, + "Ġtorino": 71543, + "Ġmesa": 71544, + "/temp": 71545, + "Ġchir": 71546, + "ĠOverflow": 71547, + "Ġtenemos": 71548, + "unik": 71549, + "NEXT": 71550, + "Alle": 71551, + "Ġnxt": 71552, + "Mart": 71553, + "Ġatl": 71554, + "Ġperiodo": 71555, + "_you": 71556, + "Ġ})).": 71557, + "intestinal": 71558, + ".AdapterView": 71559, + "Ġhesitant": 71560, + "Ġcomparatively": 71561, + ".UInt": 71562, + "(viewModel": 71563, + "Ġsangat": 71564, + "ĠResponsive": 71565, + "ĠZack": 71566, + "âħ": 71567, + "JAVA": 71568, + "ĠFuller": 71569, + "ĠâĿ¤": 71570, + ".Consumer": 71571, + "Ġank": 71572, + "Ġreactors": 71573, + "fuck": 71574, + "_rat": 71575, + "ĠsessionFactory": 71576, + "_backward": 71577, + "Ġscrambled": 71578, + "ĉth": 71579, + "Ġinsensitive": 71580, + "Ġchamps": 71581, + "Ġnginx": 71582, + "Ġconhec": 71583, + "ĠJasper": 71584, + ".fm": 71585, + "StrictEqual": 71586, + "achsen": 71587, + "-Nov": 71588, + "lassen": 71589, + ".integration": 71590, + "(lbl": 71591, + "Compose": 71592, + "ĠFon": 71593, + "Ãļ": 71594, + "Gratis": 71595, + "ĠLime": 71596, + "ĠAdapterView": 71597, + "Ġpoisoned": 71598, + "anchors": 71599, + "设计": 71600, + "']?>\"": 71601, + "Ġprocur": 71602, + "Italy": 71603, + ".MONTH": 71604, + "ĠLUA": 71605, + "ĠLithuania": 71606, + "ĠHeads": 71607, + "_CHUNK": 71608, + "ĠPUSH": 71609, + "AspectRatio": 71610, + "Ġweg": 71611, + "Ġvids": 71612, + "ĠWein": 71613, + "ĉINT": 71614, + "sessionId": 71615, + "Industry": 71616, + "Ġdenounced": 71617, + "JKLM": 71618, + "ĠVanessa": 71619, + ".Identifier": 71620, + "propri": 71621, + "Ġиг": 71622, + "Ġtécn": 71623, + "Ġmosaic": 71624, + "StreamReader": 71625, + "-Th": 71626, + "forth": 71627, + "Ġadherence": 71628, + "bate": 71629, + "Ġknights": 71630, + "sounds": 71631, + "Ġsalle": 71632, + "OMET": 71633, + "ãĤ¹ãĥĪ": 71634, + "-tm": 71635, + "ĠRhe": 71636, + ".FileOutputStream": 71637, + "åĪĨç±»": 71638, + "ĠENG": 71639, + "holiday": 71640, + "ĠCongratulations": 71641, + ")(Ċ": 71642, + "Ġaggregates": 71643, + "HOOK": 71644, + "ewire": 71645, + "Senator": 71646, + "Ġembeddings": 71647, + "epy": 71648, + "(COM": 71649, + "Ġrobber": 71650, + "äter": 71651, + "wang": 71652, + "_teacher": 71653, + "Ġresentment": 71654, + "Ġlettuce": 71655, + "erreur": 71656, + "(ic": 71657, + "ĠTactical": 71658, + "ĠContracts": 71659, + "Ġmænd": 71660, + "Ġsitios": 71661, + "Ġbastante": 71662, + "Ġnuevos": 71663, + "ĉNdrFc": 71664, + "ĠprivateKey": 71665, + "ucch": 71666, + "MMdd": 71667, + "Ġè¾ĵåĩº": 71668, + "umba": 71669, + "@foreach": 71670, + ":\");ĊĊ": 71671, + "Ġslippery": 71672, + "ĠKeystone": 71673, + "Ġpioneering": 71674, + "_triangle": 71675, + "(\"Ċ": 71676, + "ĉĉĉĉĉĉĉĉĠĠ": 71677, + "ĠIntervention": 71678, + "SCI": 71679, + "ĠcJSON": 71680, + "Ġterminating": 71681, + "ë¹Ħ": 71682, + "Ġbabys": 71683, + "Subset": 71684, + "Ġë¡": 71685, + "Ġseulement": 71686, + "Ġmuestra": 71687, + "Entre": 71688, + "以ä¸Ĭ": 71689, + "ngo": 71690, + "\"bytes": 71691, + "QRST": 71692, + "Ġypos": 71693, + "persona": 71694, + "ĠDeploy": 71695, + "cee": 71696, + "Ġà®": 71697, + ".goal": 71698, + "Ġhabitats": 71699, + "ĠisAdmin": 71700, + "Ġexploiting": 71701, + "Ġventil": 71702, + "ĠBalls": 71703, + "اب": 71704, + "Ġmindfulness": 71705, + "(kwargs": 71706, + "Ġresembling": 71707, + "Ġchoir": 71708, + "ĠonBackPressed": 71709, + "ĠSECURITY": 71710, + "/gtest": 71711, + "Ġjustices": 71712, + "ĠintegerValue": 71713, + "blah": 71714, + "ĠAim": 71715, + "_finalize": 71716, + "keh": 71717, + "ĠComplexity": 71718, + "Ġaugust": 71719, + "getElementsByTagName": 71720, + "Ġpreach": 71721, + "Ġpronunciation": 71722, + "ĠTrash": 71723, + "-percent": 71724, + "_PRIV": 71725, + "ĠHunts": 71726, + "ĠCurse": 71727, + "uellen": 71728, + "Ġheavyweight": 71729, + "Xi": 71730, + "ĉselected": 71731, + "ĠMcCoy": 71732, + "å¼Ĥ常": 71733, + "|=Ċ": 71734, + "ĠBattlefield": 71735, + "ItemImage": 71736, + "Ġdeductions": 71737, + "ĠElemental": 71738, + "());//": 71739, + "ĠBurk": 71740, + "})čĊčĊ": 71741, + "swift": 71742, + "/function": 71743, + "Usually": 71744, + "_St": 71745, + "_feats": 71746, + "ĠIsValid": 71747, + "Ġzad": 71748, + "ImageContext": 71749, + "Ġclassname": 71750, + "Ġdonner": 71751, + "Ġ-->ĊĊĊ": 71752, + "Ġmotorcycles": 71753, + "+'/'+": 71754, + "ĠsetBackground": 71755, + "\\CMS": 71756, + ".AllArgsConstructor": 71757, + "ĠLexington": 71758, + ".examples": 71759, + "ĠPurs": 71760, + "PushMatrix": 71761, + "Ġ==============================================================": 71762, + ".addTarget": 71763, + "pora": 71764, + "Fullscreen": 71765, + "Ġgoof": 71766, + "hlen": 71767, + "äge": 71768, + "ĠCURL": 71769, + "ĠInteresting": 71770, + "Ġretrieves": 71771, + "_Obj": 71772, + "inness": 71773, + "-----ĊĊ": 71774, + ".tsv": 71775, + "(IM": 71776, + "ĠBraves": 71777, + "_ISR": 71778, + "osti": 71779, + "á»ĵ": 71780, + "ĠExterior": 71781, + "ĠCourtney": 71782, + "Ġresidues": 71783, + "Tier": 71784, + ".*;čĊčĊ": 71785, + ":black": 71786, + "webView": 71787, + "\"path": 71788, + "Ġmasa": 71789, + "]!='": 71790, + "ĠMatching": 71791, + "dur": 71792, + "Jvm": 71793, + "=context": 71794, + "_RING": 71795, + "Ġproponents": 71796, + "ĠQStringLiteral": 71797, + "Ġinflate": 71798, + "\">čĊ": 72031, + "_COST": 72032, + "ilinear": 72033, + "ĠWorkspace": 72034, + "Ġspel": 72035, + "agogue": 72036, + "ĠMillennium": 72037, + "ĠPopulate": 72038, + "Ġnid": 72039, + ".parseColor": 72040, + "Solar": 72041, + "ĠGad": 72042, + "Ġì¤ij": 72043, + "ĠKamp": 72044, + "ĉrm": 72045, + "Ġbenz": 72046, + "ĠHonestly": 72047, + "Ġelectrode": 72048, + "ĠPrairie": 72049, + "ĠPROFILE": 72050, + "ĠOriental": 72051, + "ĠOLED": 72052, + "/copyleft": 72053, + "awaii": 72054, + "(products": 72055, + ")\\<": 72056, + "-created": 72057, + ".ManyToMany": 72058, + "\"How": 72059, + "ĠвÑĭп": 72060, + "Ġmitochondrial": 72061, + "_testing": 72062, + "(created": 72063, + "ĠgetField": 72064, + "_EVAL": 72065, + "].\"": 72066, + "ĠFSM": 72067, + "ĠRita": 72068, + "ĠåıĤæķ°": 72069, + "Ġcôt": 72070, + "ĠInsight": 72071, + "ĉmysqli": 72072, + "_timing": 72073, + "IDO": 72074, + ")))))Ċ": 72075, + "COVERY": 72076, + ".imag": 72077, + "CDF": 72078, + "lust": 72079, + "ickt": 72080, + "_FP": 72081, + ".','": 72082, + "gcc": 72083, + "Ġkurz": 72084, + "_pwm": 72085, + "Ġodpowied": 72086, + "ĠBarrier": 72087, + "/***************************************************************************Ċ": 72088, + "pak": 72089, + "-Israel": 72090, + "ĠRutgers": 72091, + "ĠselectedItem": 72092, + "ĠRamirez": 72093, + "Farm": 72094, + "Ġcalendars": 72095, + "gzip": 72096, + "Ġblockbuster": 72097, + "ĠPlymouth": 72098, + "çľĮ": 72099, + "responses": 72100, + ".DialogInterface": 72101, + "-grand": 72102, + "ĠgetSource": 72103, + "Ġdejtings": 72104, + "Ġtieten": 72105, + "Ġcondemnation": 72106, + "Ġcontinuar": 72107, + ".MockMvc": 72108, + "/english": 72109, + "ĠMediaPlayer": 72110, + "computed": 72111, + "ĠClippers": 72112, + "(delegate": 72113, + ".Slf": 72114, + "Ġë¡ľ": 72115, + "ĠTide": 72116, + "Ġihrem": 72117, + "ĠWan": 72118, + "ÑĥÑİÑī": 72119, + "}><": 72120, + "Discussion": 72121, + "Ġwatts": 72122, + "-minus": 72123, + "ĠJuliet": 72124, + "éĽħ": 72125, + "Ġconcluding": 72126, + "andscape": 72127, + "Ġúltima": 72128, + "ĠDERP": 72129, + "ĠsignUp": 72130, + "ĠSecondly": 72131, + "WAIT": 72132, + "lds": 72133, + ".callbacks": 72134, + "(hour": 72135, + "imators": 72136, + "volent": 72137, + "AAF": 72138, + "edriver": 72139, + "ĠMathematic": 72140, + "'": 72142, + "{j": 72143, + "_ABORT": 72144, + "Ether": 72145, + "Ġeducator": 72146, + "Ġprecaution": 72147, + "Ġfingertips": 72148, + "getVar": 72149, + "camatan": 72150, + "-debug": 72151, + "ĠRAF": 72152, + "[arg": 72153, + "Ġraced": 72154, + "Ġtsunami": 72155, + ".flink": 72156, + "Ġglyc": 72157, + "uko": 72158, + "ĠMultiply": 72159, + "Ġredistribution": 72160, + "AGO": 72161, + "ĠRoutine": 72162, + "Ġopr": 72163, + "(lower": 72164, + "ĠFunktion": 72165, + ".dk": 72166, + "Ġegt": 72167, + "_BASIC": 72168, + "syscall": 72169, + "ĠLSD": 72170, + "ĠDuplicate": 72171, + "_sell": 72172, + "ĠerrorHandler": 72173, + "_ips": 72174, + "Ġerv": 72175, + "annie": 72176, + "(resourceName": 72177, + "Ġbottled": 72178, + "Ġcrawling": 72179, + "egment": 72180, + ".setTag": 72181, + "Ġrss": 72182, + "ĠQuarry": 72183, + "_exact": 72184, + ".jwt": 72185, + "ĠBoards": 72186, + "opi": 72187, + "Ġnasal": 72188, + "ĠXYZ": 72189, + ".ud": 72190, + "Northern": 72191, + "Ġactivating": 72192, + "edx": 72193, + "ovah": 72194, + "Ġindx": 72195, + "AlertDialog": 72196, + "Ġtienes": 72197, + "annya": 72198, + "_pan": 72199, + "(decimal": 72200, + ".Dict": 72201, + "Ġsubsidiaries": 72202, + "ProductName": 72203, + "Few": 72204, + "dato": 72205, + "odied": 72206, + "-under": 72207, + "Ġê²ĥ": 72208, + "çīĪæľ¬": 72209, + "atism": 72210, + "[Math": 72211, + ".'<": 72212, + "(infile": 72213, + "Ġdenotes": 72214, + "$class": 72215, + "_SECURITY": 72216, + "Ġsewage": 72217, + "melon": 72218, + "(Character": 72219, + "/github": 72220, + "Ġglaring": 72221, + ".Guid": 72222, + "_sparse": 72223, + "ĠMargin": 72224, + "_dns": 72225, + "Ġmeiner": 72226, + "Ġleftist": 72227, + "ĉloc": 72228, + "abytes": 72229, + "Ġequipments": 72230, + "expo": 72231, + "ĠSomerset": 72232, + "EK": 72233, + "æį¢": 72234, + "Ġlecturer": 72235, + "Ġmemiliki": 72236, + "æł¸": 72237, + "ç´ł": 72238, + "pron": 72239, + ":pointer": 72240, + "borrow": 72241, + "ĠProtective": 72242, + "_cf": 72243, + "ĠÐķÑģли": 72244, + "bpp": 72245, + "';ĊĊĊĊ": 72246, + "aturally": 72247, + "_NAV": 72248, + "Ġpeptide": 72249, + ">d": 72250, + "Ġifstream": 72251, + "_FACTORY": 72252, + "');//": 72253, + "joined": 72254, + "mong": 72255, + "Ġtimespec": 72256, + "Ġdestabil": 72257, + "Ġautop": 72258, + "-limit": 72259, + "publication": 72260, + "ĠDenn": 72261, + ".Memory": 72262, + "(skb": 72263, + "ĠAnaheim": 72264, + "_RETURNTRANSFER": 72265, + "oueur": 72266, + "(_('": 72267, + "legt": 72268, + "istingu": 72269, + "ĉpriv": 72270, + "Ġredirects": 72271, + "Mt": 72272, + "Ġalleen": 72273, + "ĠPointF": 72274, + "Ġomin": 72275, + "Ġcitt": 72276, + "ĠTage": 72277, + "ĠWalls": 72278, + "á»ī": 72279, + "Ġoccupying": 72280, + "xBF": 72281, + "rangle": 72282, + "Ġrelational": 72283, + "-org": 72284, + "Ġjpg": 72285, + "-derived": 72286, + "Ġmalfunction": 72287, + "ĠBenson": 72288, + "(scroll": 72289, + "ĠXD": 72290, + "Holy": 72291, + "(commands": 72292, + "Ġtipping": 72293, + "Ġprimitives": 72294, + "Ġsexle": 72295, + "CallCheck": 72296, + "ĠMASTER": 72297, + "_TEAM": 72298, + ".setRequestHeader": 72299, + "_specs": 72300, + "Ġserge": 72301, + ".Master": 72302, + "Ġims": 72303, + ".SpringBootTest": 72304, + "paypal": 72305, + "ĠWANT": 72306, + ".Inst": 72307, + "ĠCarpet": 72308, + "Ġwrongly": 72309, + "($('.": 72310, + "Ġbild": 72311, + ".Roll": 72312, + "ĠUrb": 72313, + "-can": 72314, + "ãģıãģłãģķãģĦ": 72315, + "oliberal": 72316, + "čĊčĊ": 72710, + "ĠMahm": 72711, + "}\";ĊĊ": 72712, + "Ġdq": 72713, + "ĠPublishers": 72714, + "ĠAmpl": 72715, + "ĠDanielle": 72716, + "Ġtern": 72717, + "èµ·": 72718, + "noÅĽÄĩ": 72719, + "ein": 72720, + "ĠAsyncStorage": 72721, + "unger": 72722, + "rouw": 72723, + "Ġscissors": 72724, + "/assert": 72725, + ".bucket": 72726, + "/archive": 72727, + "_Man": 72728, + "Ġintoler": 72729, + "Ġ()=>": 72730, + "ĠÐĴÑĭ": 72731, + "Ġsai": 72732, + ".xy": 72733, + ".\"čĊ": 72734, + "Ġurinary": 72735, + "esub": 72736, + "ISTICS": 72737, + "Ġκ": 72738, + "Ġcompliments": 72739, + "ĠtypingsJapgolly": 72740, + "ihar": 72741, + "Expansion": 72742, + "ĠServing": 72743, + "_students": 72744, + "ĠXBOOLE": 72745, + "(il": 72746, + "Ġì²ĺ": 72747, + "Ġjó": 72748, + "(tol": 72749, + "(JS": 72750, + "ĉCG": 72751, + "ĠDRAW": 72752, + "twig": 72753, + "Ġoat": 72754, + "_smooth": 72755, + "ĠCSL": 72756, + "Ġosob": 72757, + "Ġensuing": 72758, + "Ġbanker": 72759, + "ĠBackpack": 72760, + "_ping": 72761, + "Ġwishlist": 72762, + "=ax": 72763, + "ĉĠĠĠĊ": 72764, + "Disney": 72765, + "steady": 72766, + "\">%": 72767, + "Ġprophets": 72768, + "ĠZX": 72769, + "Ġminimalist": 72770, + ".PLAIN": 72771, + "Seattle": 72772, + ".ordinal": 72773, + "ĠPIPE": 72774, + "Ġretorna": 72775, + "Ġjugador": 72776, + "ĠBret": 72777, + "ĠâĶľ": 72778, + "Ġplush": 72779, + "ULATOR": 72780, + "Sorting": 72781, + ".gridy": 72782, + "ectomy": 72783, + "_activ": 72784, + "rack": 72785, + "Interactive": 72786, + "ĠAntarctica": 72787, + "Ġvengeance": 72788, + "enso": 72789, + "_known": 72790, + "upplier": 72791, + ".Modules": 72792, + "ĠConnectionState": 72793, + "éļIJèĹı": 72794, + "@FindBy": 72795, + "Ġplacer": 72796, + "\\model": 72797, + "<()>": 72798, + ".isSuccessful": 72799, + "-good": 72800, + "bz": 72801, + "ĠDraco": 72802, + "Assistant": 72803, + "-extra": 72804, + "аблиÑĨ": 72805, + "Ġhypocrisy": 72806, + "Ġtst": 72807, + "ĠAgr": 72808, + "$txt": 72809, + "Ġlogistic": 72810, + "licensed": 72811, + "ĠHof": 72812, + "Ġtat": 72813, + "(iv": 72814, + "Ġintoxic": 72815, + "postId": 72816, + "_strike": 72817, + "Ġhumiliation": 72818, + "pcodes": 72819, + "\"sync": 72820, + "(recipe": 72821, + "+N": 72822, + "rente": 72823, + "ĉClient": 72824, + "ycopg": 72825, + "ĠZurich": 72826, + "ĠProfiles": 72827, + "Countries": 72828, + "Ġpict": 72829, + "Ġrollout": 72830, + "requencies": 72831, + "Ġpatched": 72832, + "Ġcartridges": 72833, + "Ġshading": 72834, + "Jar": 72835, + "Ġsalvage": 72836, + "ĠTaxes": 72837, + "Ġstandby": 72838, + "aporan": 72839, + "Eigen": 72840, + ".angular": 72841, + "ĠNested": 72842, + "享": 72843, + "ĠisVisible": 72844, + "ĠDwight": 72845, + "_BRANCH": 72846, + ".Delay": 72847, + "Ġkend": 72848, + "Ġfacilitated": 72849, + ".flatMap": 72850, + "Ġsanta": 72851, + "ĉSend": 72852, + "/messages": 72853, + "ĠofType": 72854, + "ĉswap": 72855, + "#plt": 72856, + "ĠTurks": 72857, + "NES": 72858, + "Ġprogressively": 72859, + "ĠResidence": 72860, + "ĠTREE": 72861, + "Ġnoen": 72862, + "dio": 72863, + "Ġnelle": 72864, + "Ġsogar": 72865, + "itti": 72866, + "weekly": 72867, + "Ġambiguity": 72868, + "_Settings": 72869, + "Ware": 72870, + ".neo": 72871, + "_DST": 72872, + "Ġæĸ¹": 72873, + "prep": 72874, + "lobby": 72875, + "@email": 72876, + "/movie": 72877, + "Ġfunkc": 72878, + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ": 72879, + "ÂŃs": 72880, + "Ġguardians": 72881, + "-pos": 72882, + "Ġconfiguring": 72883, + "ĠCPS": 72884, + "ĠDeus": 72885, + "Ġvidéos": 72886, + "_empresa": 72887, + "Ġslapped": 72888, + "',Ċ": 72920, + "_XDECREF": 72921, + "ĠBuzzFeed": 72922, + "_MARGIN": 72923, + "PLOY": 72924, + ".small": 72925, + "ĠmimeType": 72926, + "Ġholog": 72927, + "ĉcamera": 72928, + "lias": 72929, + "Ġsuspense": 72930, + "odynam": 72931, + "bau": 72932, + "Ġgraveyard": 72933, + "_named": 72934, + "\":\"'": 72935, + "Ġ************************************************": 72936, + "ĠgameOver": 72937, + "ĠLENGTH": 72938, + "ĉscreen": 72939, + "ĠdoInBackground": 72940, + "_dependencies": 72941, + "Ġrtc": 72942, + "/up": 72943, + "_ROM": 72944, + "Hall": 72945, + "Ġdeficiencies": 72946, + "(te": 72947, + "'#": 72948, + "_equiv": 72949, + "Ġpreorder": 72950, + "ĠAxe": 72951, + "омÑĥ": 72952, + ".sendFile": 72953, + "Ġfilt": 72954, + "ĠLimits": 72955, + "ĠCavaliers": 72956, + ".discount": 72957, + "âĨIJ": 72958, + "ĠWit": 72959, + "QRSTUV": 72960, + "Ġij": 72961, + "Ġtegen": 72962, + "Ġ:\",": 72963, + "difficulty": 72964, + "punkt": 72965, + "ĠEmails": 72966, + "chlor": 72967, + "(fun": 72968, + ".Uint": 72969, + "ĠStall": 72970, + "_verified": 72971, + "uD": 72972, + "FileType": 72973, + "Ġpleasures": 72974, + "Ġjudiciary": 72975, + "Ġsham": 72976, + "ipur": 72977, + "_PLUS": 72978, + "offers": 72979, + "(foo": 72980, + "_GT": 72981, + "ĉcore": 72982, + "ENTION": 72983, + "ĠLiberation": 72984, + "CommandLine": 72985, + "_department": 72986, + ".Ar": 72987, + "_neighbor": 72988, + "ĠSubmitted": 72989, + "ĠĊ": 97221, + "Ġdroits": 97222, + "Ġhomosexuals": 97223, + "Ġabduction": 97224, + "ĉwidget": 97225, + "$headers": 97226, + "ĠDAR": 97227, + "Ġfla": 97228, + "threat": 97229, + "Ġlouis": 97230, + ".GetProperty": 97231, + "\"Just": 97232, + "(frames": 97233, + "ryo": 97234, + "profession": 97235, + "|i": 97236, + "íķ´ìĦľ": 97237, + "(sv": 97238, + "Ġunrecognized": 97239, + "Ionic": 97240, + "Fashion": 97241, + "ScreenState": 97242, + "ĠIncoming": 97243, + "NotNil": 97244, + "Ġsyncing": 97245, + "emie": 97246, + "Ġthermo": 97247, + "_procs": 97248, + "Ġinconsistency": 97249, + "religious": 97250, + ".mj": 97251, + "Ġpersonn": 97252, + "Ġmomentos": 97253, + "orarily": 97254, + "ĠæĬ": 97255, + "_neurons": 97256, + "Illustr": 97257, + "imoto": 97258, + "ilik": 97259, + "ĠWoj": 97260, + "Trading": 97261, + "Ġappare": 97262, + "Ġentreprises": 97263, + "achat": 97264, + "Ġ¬": 97265, + "Ġneigh": 97266, + "BUTTONDOWN": 97267, + "ĠMaher": 97268, + "aghan": 97269, + "-hash": 97270, + "\"f": 97271, + "Ġclientele": 97272, + ".addButton": 97273, + "ĉSP": 97274, + "Qi": 97275, + "Ġgrated": 97276, + "POSITE": 97277, + ":>": 97278, + "ĠHowell": 97279, + "ĠComparative": 97280, + "ĠISC": 97281, + "ÂŃi": 97282, + "Ocean": 97283, + "Davis": 97284, + "ĠFilme": 97285, + "Wins": 97286, + "ĠJIT": 97287, + "occer": 97288, + "ĠCorm": 97289, + "ENCHMARK": 97290, + "rchive": 97291, + "icação": 97292, + "Ġmata": 97293, + "Ġchildbirth": 97294, + "ĠOptionally": 97295, + "Ens": 97296, + "Ġxhttp": 97297, + "Ġelucid": 97298, + "_OscInitStruct": 97299, + "))):Ċ": 97300, + "Ġintuit": 97301, + "ĠDonate": 97302, + "Ġcorrelates": 97303, + ">Delete": 97304, + "Ġequipe": 97305, + "Ġboca": 97306, + "Ġinflatable": 97307, + "erah": 97308, + "ĠDateTimeKind": 97309, + "Ġcalves": 97310, + "\\Lib": 97311, + "Ġemlrt": 97312, + "ĠTrilogy": 97313, + "ĠPanc": 97314, + "ĠDuis": 97315, + "ĠpelÃŃcula": 97316, + "WARDS": 97317, + "_DETECT": 97318, + "-sectional": 97319, + "dhcp": 97320, + "ForRow": 97321, + "-destruct": 97322, + "ĠPresenter": 97323, + "/slick": 97324, + ",on": 97325, + "ĠCitadel": 97326, + "loggedin": 97327, + "_subtype": 97328, + "Ġsigue": 97329, + "Ġcuring": 97330, + "ĠFirewall": 97331, + "Ġfluorescence": 97332, + "ĠItalians": 97333, + "иÑĤÑģÑı": 97334, + ".getStyle": 97335, + "InSeconds": 97336, + "jie": 97337, + "-Smith": 97338, + "Ġxlink": 97339, + "Ġsubmissive": 97340, + "онÑĤ": 97341, + "arbonate": 97342, + "ĠFaul": 97343, + "_goals": 97344, + "ĠCommissioners": 97345, + "chartInstance": 97346, + "_POSTFIELDS": 97347, + "Ġmedial": 97348, + "Ġmanos": 97349, + "Ġdelt": 97350, + "svm": 97351, + ".Apis": 97352, + "ephy": 97353, + "Ġasympt": 97354, + "ĠappDelegate": 97355, + "Ġimprobable": 97356, + "cka": 97357, + "simd": 97358, + "/Error": 97359, + ".âĢĵ": 97360, + "ĠPTS": 97361, + "deer": 97362, + "Ġsina": 97363, + "magnitude": 97364, + "IDADE": 97365, + "']}'": 97366, + "Ġmayores": 97367, + "ĉcomment": 97368, + "/console": 97369, + "\"@": 97370, + "volt": 97371, + ".sell": 97372, + "ĠMacy": 97373, + "Ġmelod": 97374, + "Ġimágenes": 97375, + "_chg": 97376, + "Ġinout": 97377, + "idente": 97378, + ")'),Ċ": 97379, + "dni": 97380, + ".blob": 97381, + "Ġtypography": 97382, + "Ġeerie": 97383, + "_OID": 97384, + "pesan": 97385, + "ajan": 97386, + "Ġchopping": 97387, + "Ġbluff": 97388, + "adf": 97389, + "_bases": 97390, + ".Formatter": 97391, + "Ġ\\%": 97392, + "ĠPageInfo": 97393, + "Carrier": 97394, + "ĠCalibration": 97395, + "como": 97396, + "-bodied": 97397, + "Ġfinancier": 97398, + "ĠINA": 97399, + ".ERR": 97400, + "Ġhoodie": 97401, + "ĠSanity": 97402, + "guarded": 97403, + ".opendaylight": 97404, + "ISMATCH": 97405, + "Highlights": 97406, + "ünk": 97407, + "aniem": 97408, + "angered": 97409, + "assignments": 97410, + "Ġregistrado": 97411, + "ĠUPPER": 97412, + "ampilkan": 97413, + "ashire": 97414, + "ĠNikola": 97415, + "ĠCFL": 97416, + "ĠHDC": 97417, + "Ġpoids": 97418, + "ĠIPs": 97419, + "Ġpreventative": 97420, + "ipsoid": 97421, + "ifix": 97422, + ".camel": 97423, + ".ga": 97424, + "Volumes": 97425, + "-ste": 97426, + "Yahoo": 97427, + "_sibling": 97428, + "Highest": 97429, + "optgroup": 97430, + "Ġkvinna": 97431, + "âĢĿãĢĤĊĊ": 97432, + "ĠAppliances": 97433, + "Ġ\"><": 97434, + "')\")Ċ": 97435, + "htt": 97436, + "ĠIdentified": 97437, + "Ġpencils": 97438, + "ĠmemberId": 97439, + "ĠappendString": 97440, + ".loadData": 97441, + "ĠmockMvc": 97442, + "Ġjub": 97443, + "ĠSlut": 97444, + "ĠTaipei": 97445, + "statt": 97446, + "Polit": 97447, + "Ġpartager": 97448, + "DidChange": 97449, + "Increases": 97450, + ")}.": 97451, + "ĠBaba": 97452, + "_CLIP": 97453, + "[unit": 97454, + "ĠклÑİÑĩ": 97455, + "Ġalcuni": 97456, + "ĠLola": 97457, + "Ġclinging": 97458, + "@PostMapping": 97459, + "(concat": 97460, + "Ġssid": 97461, + "ĠFauc": 97462, + "okit": 97463, + "ĠRecorded": 97464, + "ález": 97465, + "($('<": 97466, + ".assertIsNot": 97467, + "Ġkali": 97468, + "Volt": 97469, + "Ġwarmly": 97470, + "Ġscares": 97471, + "getti": 97472, + "führt": 97473, + "_does": 97474, + ".EMAIL": 97475, + "imations": 97476, + "Ġspringfox": 97477, + "ĠDecom": 97478, + "arcy": 97479, + "Ġglitches": 97480, + "ĠMoff": 97481, + "ĠVoll": 97482, + ".between": 97483, + "Ġcoorden": 97484, + "ĠParticularly": 97485, + "GBP": 97486, + "Ġsemble": 97487, + "Eastern": 97488, + "_MSB": 97489, + "]){čĊ": 97490, + "morgan": 97491, + "ĠEVAL": 97492, + "dere": 97493, + "HOUSE": 97494, + "moire": 97495, + "istique": 97496, + "_lstm": 97497, + "-commit": 97498, + "ysterious": 97499, + "Ġtwink": 97500, + "-thumbnails": 97501, + "enÃŃ": 97502, + ":'',": 97503, + "Ġblackout": 97504, + "ĠFloors": 97505, + "Ġsofas": 97506, + "Ġoui": 97507, + "leshoot": 97508, + "ĠRaq": 97509, + "-abs": 97510, + "Ġkra": 97511, + "Mining": 97512, + "shaft": 97513, + ".setColumns": 97514, + "Clazz": 97515, + "PRETTY": 97516, + ".playlist": 97517, + "éĸ¢": 97518, + "-Saharan": 97519, + "MING": 97520, + "ĉbl": 97521, + "è®®": 97522, + "jf": 97523, + "DOCKER": 97524, + "hopefully": 97525, + "(ignore": 97526, + "ĠUsersController": 97527, + "ĠMitarbeiter": 97528, + "ĠLES": 97529, + "Hamilton": 97530, + "-metadata": 97531, + "ĠKK": 97532, + "iktig": 97533, + "Ġwollte": 97534, + "egrator": 97535, + "]bool": 97536, + ",current": 97537, + "ĠvalueType": 97538, + "Ġexcavation": 97539, + "oland": 97540, + "Ġverv": 97541, + "/filepath": 97542, + "AuthProvider": 97543, + "Ġprocrast": 97544, + "ĉULONG": 97545, + "_MEMBERS": 97546, + "Ġuplift": 97547, + "ĠAutonomous": 97548, + "Ġartworks": 97549, + "ĠOutreach": 97550, + "Ġpore": 97551, + "Homepage": 97552, + "DialogTitle": 97553, + "ĠGenerating": 97554, + "PARSE": 97555, + "Ġsemanas": 97556, + "Ġhumano": 97557, + "JSGlobalScope": 97558, + "Ġvolte": 97559, + "Ġbella": 97560, + "(isinstance": 97561, + "Ġplc": 97562, + "\\Catalog": 97563, + "Ġesteemed": 97564, + "鼷": 97565, + "(suffix": 97566, + "Ġsweeps": 97567, + "ĉORDER": 97568, + "Ġdoivent": 97569, + "ĠSwarm": 97570, + "ĠCompiled": 97571, + "getPage": 97572, + "ADR": 97573, + ".RichTextBox": 97574, + "ĠNaming": 97575, + "agged": 97576, + "ĠGANG": 97577, + "rasing": 97578, + "odeled": 97579, + "Ġgala": 97580, + "ĠJSName": 97581, + "ddf": 97582, + "Ġillust": 97583, + "ĠLansing": 97584, + "[port": 97585, + "-death": 97586, + "Ġdinheiro": 97587, + "ĠEighth": 97588, + "Ġbian": 97589, + "stÃ¥": 97590, + "Ġversión": 97591, + "ĠLinearGradient": 97592, + "ĠHarding": 97593, + ".*)": 97594, + "eczy": 97595, + "$header": 97596, + "ĠvÃ¥r": 97597, + "Unchecked": 97598, + "Ġkoje": 97599, + "ĠPaladin": 97600, + "())),": 97601, + "Giving": 97602, + "()})Ċ": 97603, + "Ġdips": 97604, + "Friendly": 97605, + "Ġportrays": 97606, + "Ġhelium": 97607, + "Ġinsurgency": 97608, + "_expiry": 97609, + "ĠstringByAppendingString": 97610, + "Ġaantal": 97611, + "slope": 97612, + "mast": 97613, + ".getInteger": 97614, + "Ġ########################": 97615, + "_PIPELINE": 97616, + "Ġdensely": 97617, + "Ġmutating": 97618, + "midi": 97619, + "ĠSeit": 97620, + "ayne": 97621, + "NOWLED": 97622, + "ĠDesmond": 97623, + "ĠFName": 97624, + "ĠNairobi": 97625, + "\\Context": 97626, + "Ġcalcular": 97627, + "-den": 97628, + "Ġcott": 97629, + "]):čĊ": 97630, + "ĠRecommendation": 97631, + "ĠRolex": 97632, + "ĠvalidationResult": 97633, + ".pat": 97634, + "ĠnÃły": 97635, + "ĠRestClient": 97636, + "ĠGPI": 97637, + "ĠAsheville": 97638, + "ĠOSP": 97639, + "ĠPERMISSION": 97640, + "ÐĶаÑĤа": 97641, + "/notification": 97642, + "Knight": 97643, + "_Word": 97644, + "ĠBender": 97645, + "ranking": 97646, + "Ġpartida": 97647, + "_reservation": 97648, + "ÌĢ": 97649, + "ĠmName": 97650, + "Ġgetch": 97651, + "Ġborr": 97652, + "Ġdiligent": 97653, + "Discuss": 97654, + "æŃ£åľ¨": 97655, + "apeake": 97656, + "ioned": 97657, + "-Nazi": 97658, + ".cum": 97659, + "ĠKron": 97660, + "=$('#": 97661, + "/single": 97662, + "Ġerotisch": 97663, + "ĠVib": 97664, + "Ġratified": 97665, + "Ġconcerted": 97666, + "ĠREGARD": 97667, + "Ġdobr": 97668, + ".DriverManager": 97669, + "'r": 97670, + "Portable": 97671, + "ĉsuite": 97672, + "Ġrelaciones": 97673, + "ĠDop": 97674, + "emploi": 97675, + "DOB": 97676, + "Ġcrumbs": 97677, + "Ġxls": 97678, + "_Application": 97679, + "(':',": 97680, + "Ġ------------------------------------------------------------------------Ċ": 97681, + "mse": 97682, + "Ġberk": 97683, + "ĠReturnValue": 97684, + "ĠBelly": 97685, + "Ġcamar": 97686, + "ĠPeek": 97687, + "elsing": 97688, + "Ġnotifies": 97689, + "ĠTristan": 97690, + "ĠGAR": 97691, + "emme": 97692, + "ĠElevated": 97693, + "_CSV": 97694, + "(chalk": 97695, + "Ġtwenties": 97696, + "ĠSearchResult": 97697, + "=search": 97698, + "ĠMixing": 97699, + "ýt": 97700, + "Ġrecruiter": 97701, + "ĠIDEOGRAPH": 97702, + "ĠAgo": 97703, + "(Operation": 97704, + "$values": 97705, + "Ġworldly": 97706, + "ĠRosenberg": 97707, + "ĠConfigureServices": 97708, + ">*Ċ": 97805, + "Ġsnork": 97806, + "_opacity": 97807, + "ĠinitWithNibName": 97808, + "iado": 97809, + "AAC": 97810, + "Ġ]).": 97811, + ";z": 97812, + "_paragraph": 97813, + "Ġnoses": 97814, + "stands": 97815, + "ifr": 97816, + "_mE": 97817, + "Iraq": 97818, + ".Predicate": 97819, + "enaire": 97820, + "]]];Ċ": 97821, + "Ġunidad": 97822, + "Ġretirees": 97823, + "_hello": 97824, + "Ġmodele": 97825, + "ĠUITableViewController": 97826, + "fwrite": 97827, + "_numero": 97828, + "_visited": 97829, + "Ġrecebe": 97830, + "(Notification": 97831, + "Fantastic": 97832, + "_submenu": 97833, + "ĠPEM": 97834, + "ĠCupertino": 97835, + "approximately": 97836, + "classed": 97837, + ".ReadString": 97838, + "Ġdomicile": 97839, + "_PW": 97840, + "Ġballpark": 97841, + "ĠKale": 97842, + "contra": 97843, + "_favorite": 97844, + "/of": 97845, + "Quite": 97846, + "ĠOTA": 97847, + "Ġaccelerometer": 97848, + "didn": 97849, + "|^": 97850, + "ĠRohingya": 97851, + "ivicrm": 97852, + "annabin": 97853, + "обÑĭÑĤи": 97854, + "orado": 97855, + "')+": 97856, + "Haunted": 97857, + ",ID": 97858, + "(UIAlertAction": 97859, + "urv": 97860, + "_bel": 97861, + "ĠMexicans": 97862, + "/terms": 97863, + "ĠPainter": 97864, + "InputLabel": 97865, + "ĠVinci": 97866, + "ĠRosie": 97867, + "\\uc": 97868, + "": 98029, + "_gs": 98030, + "Ġcompil": 98031, + "nard": 98032, + "-exc": 98033, + "Ġrhyme": 98034, + "Ġbutto": 98035, + "says": 98036, + "antasy": 98037, + "ë¸": 98038, + "ĠcittÃł": 98039, + "Ġcheg": 98040, + "TimeString": 98041, + "Ġpositivity": 98042, + "ĠDabei": 98043, + "Ġwang": 98044, + "Ġescre": 98045, + "\"c": 98046, + "ĉvideo": 98047, + "ĠRanked": 98048, + ".strings": 98049, + ">>>(": 98050, + "ĠинÑĤеÑĢ": 98051, + "Ġresta": 98052, + "[:,:": 98053, + "Ġrendre": 98054, + "Ġdeser": 98055, + "Jos": 98056, + "Ġdisruptions": 98057, + "ĠопеÑĢ": 98058, + "sampling": 98059, + "suppress": 98060, + "ĠcontainerView": 98061, + "ĠSeamless": 98062, + "Ġairy": 98063, + "Ġonload": 98064, + ".WindowManager": 98065, + "ĠPLA": 98066, + "braco": 98067, + ".setPositiveButton": 98068, + "Ġpdu": 98069, + "Ġgsi": 98070, + "ĠCli": 98071, + "_gradients": 98072, + "Ñıд": 98073, + "ĠWhisper": 98074, + "cstdint": 98075, + "Ġläng": 98076, + "Ġformulations": 98077, + "énom": 98078, + "ournemouth": 98079, + "[$_": 98080, + "Ġordinarily": 98081, + ".setUsername": 98082, + "Ġfaculties": 98083, + "MITTED": 98084, + "/values": 98085, + "Ġweir": 98086, + "ĠApt": 98087, + "MZ": 98088, + "ĉcf": 98089, + "ucken": 98090, + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ": 98091, + "defense": 98092, + "[iVar": 98093, + "ĠBusinessException": 98094, + "Selectors": 98095, + "(coordinates": 98096, + "ĠResets": 98097, + "ĠDrinks": 98098, + "oleans": 98099, + "(stypy": 98100, + "_IOC": 98101, + ".xxx": 98102, + "ĠSlater": 98103, + "ĠBelize": 98104, + "Ġ/************************************************************************": 98105, + "addin": 98106, + "_episodes": 98107, + "Ġischem": 98108, + "legalArgumentException": 98109, + "Danny": 98110, + "Ġpared": 98111, + ".codehaus": 98112, + "ĠAssy": 98113, + "ĉRect": 98114, + "âŀ": 98115, + ".lista": 98116, + "ĠваÑĪ": 98117, + "Ġvets": 98118, + "HWND": 98119, + "isoner": 98120, + "Ġxo": 98121, + "Ġorally": 98122, + "ĠStmt": 98123, + ".rnn": 98124, + "ĠDPI": 98125, + "ĠStrikes": 98126, + ".setViewportView": 98127, + "ĠèĩªåĬ¨çĶŁæĪIJ": 98128, + "YELLOW": 98129, + "GLenum": 98130, + "partners": 98131, + "ĠImplicit": 98132, + "Ġtako": 98133, + "âĢĻelle": 98134, + "Ġermög": 98135, + "totalCount": 98136, + "Gil": 98137, + "ĉwork": 98138, + "Ġpratic": 98139, + "inati": 98140, + "abies": 98141, + "ĠSkinner": 98142, + "Ġspirited": 98143, + "Ġpancreatic": 98144, + "Ġhdf": 98145, + "'em": 98146, + "Ġpsychosis": 98147, + "olicit": 98148, + "Ġ\"{\"": 98149, + "_atual": 98150, + "Ġélect": 98151, + "TEAM": 98152, + "Ġdak": 98153, + "ĠSWAT": 98154, + ".FragmentManager": 98155, + "Ġprovisioning": 98156, + "lifetime": 98157, + "_EXTENSIONS": 98158, + "ĠCASCADE": 98159, + "Ġ![": 98160, + "(KP": 98161, + "Ġvem": 98162, + "ĠInterracial": 98163, + "']},Ċ": 98164, + "spacer": 98165, + "_kv": 98166, + "Warehouse": 98167, + "RDD": 98168, + "_fsm": 98169, + ".StretchImage": 98170, + ",Yes": 98171, + "ĠRefugee": 98172, + "ĠBringing": 98173, + "Ġválido": 98174, + ".intersection": 98175, + "Ġspooky": 98176, + "_portal": 98177, + "Ġmoth": 98178, + "ĠZodiac": 98179, + "ĠSOCIAL": 98180, + "MimeType": 98181, + "']}}": 98300, + "_Blue": 98301, + "Ġbotanical": 98302, + "Ġfrags": 98303, + "Ġfamilial": 98304, + "-du": 98305, + "Ġseizing": 98306, + "(blocks": 98307, + ".rd": 98308, + ".checkNotNull": 98309, + "Ġmiser": 98310, + "Ġmaxx": 98311, + "ĠKnee": 98312, + "ViewItem": 98313, + "InnerHTML": 98314, + "Danger": 98315, + "((__": 98316, + "Ġprzypad": 98317, + "createUrl": 98318, + "**,": 98319, + "ĠDecorating": 98320, + "ATEGY": 98321, + "?>/": 98322, + ".Designer": 98323, + "hexdigest": 98324, + "ĠEverywhere": 98325, + "alleries": 98326, + ".TEXTURE": 98327, + ".Blocks": 98328, + "zell": 98329, + "Ġpreço": 98330, + "Suddenly": 98331, + "inputEmail": 98332, + "(sync": 98333, + ".bd": 98334, + "golden": 98335, + ">');": 98336, + "ĠDickinson": 98337, + ">>(Ċ": 98338, + "ĠQUEUE": 98339, + "ĠgetColumn": 98340, + "ĠSAND": 98341, + ".piece": 98342, + "licer": 98343, + "Flutter": 98344, + "ĠgetVersion": 98345, + "ĠresourceId": 98346, + "ogl": 98347, + "ÅĤaw": 98348, + ".Branch": 98349, + "ĉweb": 98350, + "Ġframerate": 98351, + "PPP": 98352, + "Ġfray": 98353, + "CNT": 98354, + "Ġinformatie": 98355, + "']čĊčĊ": 98356, + "neas": 98357, + "HeaderCode": 98358, + "Ġæ¸": 98359, + "Ġtrg": 98360, + "rawtypes": 98361, + "Honda": 98362, + "Ġmarketer": 98363, + "ĠrequestData": 98364, + "ĠPg": 98365, + "ĉnot": 98366, + "ĠpageInfo": 98367, + "Ġaktuellen": 98368, + "ãģķãĤĵ": 98369, + "ĠAMS": 98370, + "pushViewController": 98371, + "ĉAL": 98372, + "Ġvests": 98373, + "produce": 98374, + "-même": 98375, + "ĠRahman": 98376, + "Funny": 98377, + "EZ": 98378, + "_Valid": 98379, + "Ġsquadron": 98380, + "Ġlash": 98381, + "Ġirm": 98382, + "iasco": 98383, + "ĠParan": 98384, + "Ġpetites": 98385, + "ĠDecay": 98386, + "Ġuninitialized": 98387, + "privileged": 98388, + "Ġmbedtls": 98389, + "å¤ĩ注": 98390, + "Ġ^.": 98391, + "Ġecstatic": 98392, + "Detroit": 98393, + "Ġparten": 98394, + "Ġsouvenir": 98395, + ".getLogin": 98396, + "моÑĤÑĢ": 98397, + "enção": 98398, + "ĠmÃŃnimo": 98399, + "ĠAccessed": 98400, + "rió": 98401, + "Mic": 98402, + "ĠVocal": 98403, + ".SetString": 98404, + "Ġmensajes": 98405, + "åĢį": 98406, + "Ġattravers": 98407, + "ĠAph": 98408, + "Ġ');čĊ": 98409, + "ünde": 98410, + "Ġenchanted": 98411, + "ĠRootState": 98412, + "ĠCLOSED": 98413, + "ĉĉĉĉĉĉĉĉčĊ": 98414, + "Ġcaliente": 98415, + "orris": 98416, + "Ġphysicists": 98417, + "hwnd": 98418, + "_vi": 98419, + "Ġrápido": 98420, + "Ġcapitalized": 98421, + "edBy": 98422, + "Ġmachining": 98423, + "Ġhubby": 98424, + "ĠStacy": 98425, + ".Bus": 98426, + "drink": 98427, + "Hur": 98428, + "Ġpropia": 98429, + "UnitTest": 98430, + "Ġmisconception": 98431, + "__));Ċ": 98432, + "/dc": 98433, + "ĠMayweather": 98434, + "_mC": 98435, + ".createFrom": 98436, + "ĠQPainter": 98437, + "ropsych": 98438, + "innitus": 98439, + "ayas": 98440, + "Ġgeg": 98441, + "(dw": 98442, + "Ġusado": 98443, + "Ġtrickle": 98444, + "Ġannihil": 98445, + "ĠPasta": 98446, + "Ġ++Ċ": 98447, + "(ExpectedConditions": 98448, + ".postValue": 98449, + "icap": 98450, + "ĠDonetsk": 98451, + "_soup": 98452, + "-publish": 98453, + "ĠPb": 98454, + "mentions": 98455, + "ACCEPT": 98456, + ".Pull": 98457, + ",âĢĻâĢĻ": 98458, + "Ġretarded": 98459, + "_ATOM": 98460, + "ĠTerminator": 98461, + "-court": 98462, + "ĠCLLocationCoordinate": 98463, + "Ġreverence": 98464, + "ĠSSC": 98465, + "utely": 98466, + "ĠWON": 98467, + "ĠGSL": 98468, + "frei": 98469, + ".getLongitude": 98470, + "ĠopenFileDialog": 98471, + ".Butter": 98472, + "-important": 98473, + "_MANY": 98474, + "ĠGong": 98475, + "âĢľHow": 98476, + "Ġgorge": 98477, + "=msg": 98478, + "ĠEzek": 98479, + "createCommand": 98480, + ":checked": 98481, + "Ġinfographic": 98482, + ".WEST": 98483, + "Dirs": 98484, + "Ġguarda": 98485, + "Ġbeetle": 98486, + "Loading": 98560, + "_mA": 98561, + ".getRandom": 98562, + "blings": 98563, + "Ġcheeses": 98564, + "tti": 98565, + ".âĢ¢": 98566, + "ĠBurgess": 98567, + "enderit": 98568, + ".',čĊ": 98569, + "(\"\"+": 98570, + "acb": 98571, + "%p": 98572, + "indexed": 98573, + "_predicate": 98574, + "nesia": 98575, + "Ġbied": 98576, + "ĠCIT": 98577, + "(Pos": 98578, + "_radi": 98579, + "ä»·æł¼": 98580, + "Biz": 98581, + "ĠAdolescent": 98582, + "Ġviên": 98583, + "cycl": 98584, + "_Cancel": 98585, + "Ġconclusive": 98586, + "Ġappellate": 98587, + "informatics": 98588, + "SJ": 98589, + "Ġelective": 98590, + "roleId": 98591, + "Fetcher": 98592, + "ĉCommand": 98593, + "(\"(%": 98594, + "Ġfart": 98595, + "ILA": 98596, + "getBlock": 98597, + "AUSE": 98598, + "Ġдан": 98599, + "ĠArte": 98600, + "Ġnotifying": 98601, + "Ġgele": 98602, + ".same": 98603, + "ĠRegel": 98604, + "ĠBaÅŁ": 98605, + ".creation": 98606, + "ĠVN": 98607, + "_community": 98608, + "Ġunsustainable": 98609, + "SEX": 98610, + "ĠgridSize": 98611, + "rescia": 98612, + "aversable": 98613, + "(',')[": 98614, + "ĠPhelps": 98615, + "á»ķi": 98616, + "ANCELED": 98617, + "-IS": 98618, + ".runners": 98619, + "ĠStokes": 98620, + ".Produ": 98621, + "Ġwhipping": 98622, + "_acquire": 98623, + "Ġinvestigación": 98624, + "fried": 98625, + ".copyWith": 98626, + "ĠHardcover": 98627, + "-Se": 98628, + "áŀ¶áŀ": 98629, + "invitation": 98630, + "lesai": 98631, + "ĠDorm": 98632, + "ĠÑģпиÑģка": 98633, + "Ġconcatenated": 98634, + "ophil": 98635, + "Ġthinker": 98636, + "/fontawesome": 98637, + "ĠLeopard": 98638, + "Ġ\"/\");Ċ": 98639, + "Ġresiduals": 98640, + "ĠMicrowave": 98641, + "Ġconforme": 98642, + "throp": 98643, + "Ġdisemb": 98644, + "ĠOMG": 98645, + "ĠDiscipline": 98646, + "ĠAcrobat": 98647, + "/repository": 98648, + "dfa": 98649, + "_MED": 98650, + "bufio": 98651, + "Ġméthode": 98652, + "_HOLD": 98653, + "iasi": 98654, + "_legacy": 98655, + ")ččĊ": 98656, + "æ£Ģ": 98657, + "GetProcAddress": 98658, + "Ġyay": 98659, + "otence": 98660, + "orderid": 98661, + "-tw": 98662, + "Ġdearly": 98663, + "Incoming": 98664, + "/il": 98665, + "Ġneurop": 98666, + "ucz": 98667, + ");čččĊ": 98668, + "ĠInnovative": 98669, + "Ġprofund": 98670, + "igmat": 98671, + "SelectionMode": 98672, + "relevant": 98673, + ".GO": 98674, + "Ġbruises": 98675, + "Ġsach": 98676, + "odef": 98677, + "Ġreimb": 98678, + "/desktop": 98679, + "-spot": 98680, + "undance": 98681, + "Entropy": 98682, + "\\core": 98683, + "Ġsuger": 98684, + "ĠMvc": 98685, + "ĠGNOME": 98686, + "_indx": 98687, + "ĠYYSTYPE": 98688, + "ĠMatlab": 98689, + "ĠCIF": 98690, + "Ġ*))": 98691, + "ĠproductList": 98692, + "ĠAlright": 98693, + "acemark": 98694, + "ÑĤив": 98695, + "modification": 98696, + "international": 98697, + "Ġhomers": 98698, + "Ġdicts": 98699, + "ĠQFont": 98700, + ".SQLite": 98701, + "Ġtransplantation": 98702, + "ĠMessageBoxButton": 98703, + "ĠElves": 98704, + "']])Ċ": 98705, + "(QIcon": 98706, + "Ġcinemas": 98707, + "COORD": 98708, + "-China": 98709, + "Ġkhẩu": 98710, + "æĪijçļĦ": 98711, + "Ġskulls": 98712, + "Ġpainstaking": 98713, + "fce": 98714, + ".XRLabel": 98715, + "Ġspecifier": 98716, + "Ġpreferring": 98717, + "/activity": 98718, + "(Photo": 98719, + "ált": 98720, + ".lot": 98721, + "''.": 98722, + "annonce": 98723, + ".googlecode": 98724, + "-pdf": 98725, + "ĠPoke": 98726, + "_ACL": 98727, + "Ġendowed": 98728, + "discover": 98729, + ".omg": 98730, + "Ġwoodland": 98731, + ".Magic": 98732, + "Ġvolont": 98733, + "NotAllowed": 98734, + "Ġchave": 98735, + "BMW": 98736, + "','=',": 98737, + "ĠSIX": 98738, + "æĪij们": 98739, + "Ġkosher": 98740, + "Ġaspiration": 98741, + "intl": 98742, + "_refptr": 98743, + "'+Ċ": 98744, + "mentor": 98745, + ".club": 98746, + "WindowState": 98747, + ".ARR": 98748, + "Ġzza": 98749, + "ĠmessageType": 98750, + ".equ": 98751, + "Thor": 98752, + "Ġinjust": 98753, + "Ġgums": 98754, + "ĠborderSide": 98755, + "/////": 98756, + "ĠTransmit": 98757, + "Ġbufsize": 98758, + "Ġhak": 98759, + "Ġellas": 98760, + "RANDOM": 98761, + "ĉmc": 98762, + "Ġpea": 98763, + "eko": 98764, + "documento": 98765, + "Ġhysteria": 98766, + "Ġarenas": 98767, + "Ġgunmen": 98768, + "Ġmike": 98769, + "Ġimpunity": 98770, + "atisation": 98771, + "_Zero": 98772, + "_COMPANY": 98773, + "ĠGors": 98774, + "ĠuseClass": 98775, + "(redis": 98776, + "ĠRUNNING": 98777, + "ĠBair": 98778, + "velte": 98779, + "Ġ','.": 98780, + "аÑĤÑĮÑģÑı": 98781, + "öst": 98782, + "encodeURIComponent": 98783, + "_restrict": 98784, + "Ġdecals": 98785, + "ĠPedido": 98786, + "Ġaltercation": 98787, + "Displays": 98788, + "ĠApplicants": 98789, + "CUS": 98790, + "Textarea": 98791, + "ĠAngola": 98792, + ".future": 98793, + "ĠUSHORT": 98794, + "Ġsuppressing": 98795, + "Ġsetzen": 98796, + "APolynomial": 98797, + "Ġtoch": 98798, + "Ġhallmark": 98799, + "Ġ$$$": 98800, + "ĠCHARSET": 98801, + ".rpm": 98802, + "ĠDich": 98803, + "--------------------": 98804, + "_parm": 98805, + "è¿ĺ": 98806, + "acciones": 98807, + "hait": 98808, + "WARDED": 98809, + "_routing": 98810, + "ĠNOM": 98811, + "Ġenclave": 98812, + "ĠLotto": 98813, + "ĉfr": 98814, + "complexContent": 98815, + "ĠBallard": 98816, + "kube": 98817, + "/win": 98818, + ".getColumnModel": 98819, + "_REPLACE": 98820, + "HeaderValue": 98821, + "Ġestudiantes": 98822, + "Ġapis": 98823, + "Ġbpm": 98824, + "ĠTypeName": 98825, + "AndGet": 98826, + "rita": 98827, + "Plans": 98828, + ">Note": 98829, + "Ġfetisch": 98830, + "Ġtoned": 98831, + "_goto": 98832, + "onsense": 98833, + "Ġmolds": 98834, + "Ġinfiltration": 98835, + "ĠGuerrero": 98836, + "ubbo": 98837, + "cki": 98838, + "($(\".": 98839, + "_activities": 98840, + "(changes": 98841, + "ĠofApp": 98842, + "ĠKepler": 98843, + "ĠDemp": 98844, + "ĠContinent": 98845, + ".Ticks": 98846, + "ĠUnsigned": 98847, + "ĠJahres": 98848, + "Ġfreshmen": 98849, + "ĠArchived": 98850, + "ĠкоÑĤоÑĢÑĭй": 98851, + "Ġ'::": 98852, + "Tutorial": 98853, + "Cc": 98854, + "ĠtableLayoutPanel": 98855, + "fromJson": 98856, + ".levels": 98857, + "_transient": 98858, + "Ġendorsing": 98859, + "ĠDIC": 98860, + "lauf": 98861, + "Ġshred": 98862, + "_EMIT": 98863, + "ificantly": 98864, + "ALA": 98865, + "/proto": 98866, + "Ġnarrowing": 98867, + "Utc": 98868, + "Factors": 98869, + "Ġsentient": 98870, + "æŀIJ": 98871, + "lixir": 98872, + "ĠCROSS": 98873, + "meteor": 98874, + "Ġgroin": 98875, + "Ġmdb": 98876, + "ĠRotterdam": 98877, + "Ġcomida": 98878, + "ĠOpCode": 98879, + "ĠDefaultValue": 98880, + "PermissionsResult": 98881, + "Ġheterogeneous": 98882, + "Ġmoot": 98883, + "Ġdeceived": 98884, + "-independent": 98885, + "ĠObjectOutputStream": 98886, + "Ġoverpower": 98887, + ".dup": 98888, + "Ġldb": 98889, + "Ġdomestically": 98890, + "Ġbestellen": 98891, + "Ġlov": 98892, + "ĠContractors": 98893, + "Triangles": 98894, + "Ġfodder": 98895, + "Ġfilmes": 98896, + "ä¼ģ": 98897, + "Ġrevolver": 98898, + "StartupScript": 98899, + "/validation": 98900, + "ĠResourceType": 98901, + "iÅŁ": 98902, + "ĠLaz": 98903, + "fef": 98904, + "Ġlstm": 98905, + "{*": 98906, + ".attachment": 98907, + ".hits": 98908, + "ewith": 98909, + "DOG": 98910, + "Alabama": 98911, + "Ġmediums": 98912, + ".mContext": 98913, + "-cols": 98914, + "åıĭ": 98915, + ".notice": 98916, + "Ġattn": 98917, + "ĠPacking": 98918, + "ĠLn": 98919, + "_COMPLEX": 98920, + "/Users": 98921, + ".savetxt": 98922, + "ĠRounds": 98923, + "?,?,?,?,": 98924, + "Ġingl": 98925, + "ĠROC": 98926, + "_female": 98927, + "ĠStard": 98928, + "]];": 98929, + "Ġwrestlers": 98930, + "Ġtorrents": 98931, + "Ġsinh": 98932, + "ĊĊ": 98933, + "ë³µ": 98934, + "sense": 98935, + "however": 98936, + ".Physics": 98937, + "Infrastructure": 98938, + "ĠSacr": 98939, + "Fel": 98940, + "ĠDISTRIBUT": 98941, + "éments": 98942, + "ĠValidates": 98943, + "############################################################": 98944, + "Ġ|/": 98945, + "Ġesl": 98946, + "Ġréseau": 98947, + "ĠBip": 98948, + "BYTES": 98949, + "_WATER": 98950, + "Turning": 98951, + "ELS": 98952, + "Ġjuxtap": 98953, + "Ġlesbische": 98954, + "ých": 98955, + "(Unknown": 98956, + "Neo": 98957, + "@JsonProperty": 98958, + "Ġalumnos": 98959, + "ĠRaqqa": 98960, + "imei": 98961, + ".getBounds": 98962, + ".MouseEventHandler": 98963, + "#######": 98964, + "GenericType": 98965, + "/cms": 98966, + "Ġturno": 98967, + "Ġмин": 98968, + "Ġfolklore": 98969, + "ĠEvo": 98970, + "Ġconductivity": 98971, + "Ġleben": 98972, + "Ġgearbox": 98973, + "-vs": 98974, + "ĠÏĨ": 98975, + "Ġdrinkers": 98976, + "Ġconexao": 98977, + "ĠTeeth": 98978, + "ĠgetArguments": 98979, + "ĠRAT": 98980, + "entious": 98981, + "Educ": 98982, + "+W": 98983, + "ĠInstitutional": 98984, + "ĠBord": 98985, + "isEqual": 98986, + "(pwd": 98987, + "Ġignited": 98988, + "ĠRousse": 98989, + "Ġimpactful": 98990, + "ĠMalk": 98991, + "Ġgeral": 98992, + "ĠPivot": 98993, + "Ġazt": 98994, + "Ġcsvfile": 98995, + "ĠRope": 98996, + "ĠSOLUTION": 98997, + "ĠArbitrary": 98998, + "Ġletto": 98999, + ".MouseAdapter": 99000, + "Ġ}}}": 99001, + "ĠSailor": 99002, + "dera": 99003, + "Putting": 99004, + "Ġconcentrates": 99005, + "ĠauthDomain": 99006, + "âĢĿçļĦ": 99007, + "-finals": 99008, + ",strlen": 99009, + "Muon": 99010, + "ĠOrdinary": 99011, + "firefox": 99012, + "ĠLaTeX": 99013, + "ĠHund": 99014, + "engineering": 99015, + "/blue": 99016, + "edTextBox": 99017, + "(\"\");": 99018, + "ĠCDDL": 99019, + "kept": 99020, + "ĠGetString": 99021, + "Kir": 99022, + "()='": 99023, + "ĠOCD": 99024, + "antium": 99025, + "$menu": 99026, + "ĠAppalachian": 99027, + "Secretary": 99028, + "ë¥ĺ": 99029, + "ีย": 99030, + "Semantic": 99031, + "Ġ*[": 99032, + "estone": 99033, + "ungkin": 99034, + "MaxY": 99035, + "-tone": 99036, + "\"};čĊ": 99037, + "_Part": 99038, + "ĊĊ": 99240, + "Lic": 99241, + "ĠMirage": 99242, + "ĠAssemblyFileVersion": 99243, + "TeV": 99244, + "ĠValueEventListener": 99245, + "-solving": 99246, + "Tho": 99247, + "roulette": 99248, + "_WP": 99249, + "Ġuninterrupted": 99250, + "ĠfieldType": 99251, + ".Typed": 99252, + "Ġamour": 99253, + "Ġmockery": 99254, + "(vol": 99255, + "ĠSubcommittee": 99256, + "ĠRuf": 99257, + "erox": 99258, + ":UIButtonTypeCustom": 99259, + "ĠBlur": 99260, + "Ġwykon": 99261, + "nces": 99262, + "ASHBOARD": 99263, + "!!\");Ċ": 99264, + "Ġmurderers": 99265, + ".daily": 99266, + "ĠDIAG": 99267, + "jing": 99268, + "Ġdolphin": 99269, + "Ġlòng": 99270, + "Ġbö": 99271, + "ĠVocabulary": 99272, + ".StObject": 99273, + "')\">": 99274, + "Ġzun": 99275, + "Ġscrimmage": 99276, + "tréal": 99277, + "ĠLig": 99278, + "[vi": 99279, + "Cole": 99280, + "Ġfrosting": 99281, + ".Players": 99282, + "-translate": 99283, + "Feels": 99284, + "=\\\"/": 99285, + ".ButterKnife": 99286, + "Ġ?>;Ċ": 99287, + "Ġavi": 99288, + "innie": 99289, + ".Failure": 99290, + "Ġspindle": 99291, + "ConfigurationException": 99292, + "_hop": 99293, + "Ġposição": 99294, + "ĠAwait": 99295, + "UIImagePickerController": 99296, + "ĉday": 99297, + "Ġgenom": 99298, + "Cab": 99299, + "ĠÑĢезÑĥлÑĮÑĤаÑĤ": 99300, + "ORIGINAL": 99301, + "Ġejaculation": 99302, + "(tcp": 99303, + "SECOND": 99304, + "Ġtonic": 99305, + "ĠListBox": 99306, + "ĠĉĉĊ": 99307, + "()>Ċ": 99308, + "Ġquatre": 99309, + "ượng": 99310, + "withErrors": 99311, + ".Maybe": 99312, + ",â̦": 99313, + "tokenId": 99314, + "_UNDEF": 99315, + "Ġfreshness": 99316, + "ĠAmendments": 99317, + ".mapbox": 99318, + ".CV": 99319, + "(blog": 99320, + "_gettime": 99321, + ".quest": 99322, + "sparse": 99323, + "Ġresale": 99324, + "Ġenthusiastically": 99325, + "ĠProstitutas": 99326, + "Wa": 99327, + "Cargo": 99328, + ".Parcelable": 99329, + "SENSOR": 99330, + "ĠRyu": 99331, + "Laughs": 99332, + "_Native": 99333, + "/pg": 99334, + "ysts": 99335, + "Ġphotoc": 99336, + "ç®Ģ": 99337, + "adopt": 99338, + ".species": 99339, + "conciliation": 99340, + "Adjusted": 99341, + ".FirebaseAuth": 99342, + "uttle": 99343, + "ordination": 99344, + "Ġmunch": 99345, + "ĠStake": 99346, + ".ping": 99347, + "anker": 99348, + "(QStringLiteral": 99349, + "Ġsubscript": 99350, + "ĠĠĉĊ": 99351, + "ĠMCC": 99352, + "_Cmd": 99353, + "sexy": 99354, + "iou": 99355, + "ĠMANY": 99356, + "Ġnanny": 99357, + "TRAIN": 99358, + "Ġflourishing": 99359, + "ĠWatches": 99360, + "ĠQMap": 99361, + "ĠFerm": 99362, + "Ġwasm": 99363, + "ĠAbed": 99364, + "_UD": 99365, + "ĠGlasses": 99366, + "+v": 99367, + "Attend": 99368, + ".Chain": 99369, + "Ġdecency": 99370, + "ĠSupplementary": 99371, + "hunter": 99372, + "-txt": 99373, + "Ġ\"}\";Ċ": 99374, + ".setWindowTitle": 99375, + "(\"": 99477, + "Ġmascara": 99478, + "(Profile": 99479, + "åĬŁèĥ½": 99480, + "imité": 99481, + "Ġwildfires": 99482, + "-ROM": 99483, + ".isOn": 99484, + "(groupId": 99485, + "Repair": 99486, + "accumulate": 99487, + "Ġ<\",": 99488, + "Ġhandwritten": 99489, + "Ġacheter": 99490, + "ĠMGM": 99491, + "ĠIrma": 99492, + "->{_": 99493, + "gee": 99494, + "criminal": 99495, + "Ġèĭ¥è¦ģ": 99496, + "Ġmomentarily": 99497, + "\")!=": 99498, + "_lit": 99499, + "ĠexpiresIn": 99500, + ".\").": 99501, + "éķ¿åº¦": 99502, + "Ġfrække": 99503, + "vlc": 99504, + "Ġorbs": 99505, + "),$": 99506, + "Ġventured": 99507, + "/>\\": 99508, + "charm": 99509, + "Nuitka": 99510, + "eldig": 99511, + "atonin": 99512, + "Witness": 99513, + "-lat": 99514, + "ĠsetHidden": 99515, + "Ġrelics": 99516, + "Ġconsulate": 99517, + ".IGNORE": 99518, + "\"After": 99519, + "ĠsetAddress": 99520, + "Ġbesteht": 99521, + "Ġ'')ĊĊ": 99522, + ".xaxis": 99523, + "Ġserão": 99524, + "Ġmisled": 99525, + "_UNIFORM": 99526, + "ĠVIA": 99527, + "incr": 99528, + "Ġzenith": 99529, + "Ġviscosity": 99530, + "Ġthinly": 99531, + ".getSharedPreferences": 99532, + ".ErrorCode": 99533, + "\"),\"": 99534, + "ĠMillionen": 99535, + "Ġ/>)Ċ": 99536, + "ScrollIndicator": 99537, + "-seeking": 99538, + "ĠPOLITICO": 99539, + "asca": 99540, + "_rl": 99541, + "Navig": 99542, + "(fullfile": 99543, + "Ġsolitude": 99544, + "Ġjuven": 99545, + "Ġhauling": 99546, + "ĠMacros": 99547, + "ĠGry": 99548, + "Ġexercitation": 99549, + "ĠATTACK": 99550, + "TickCount": 99551, + "Ġrites": 99552, + "Ġdoe": 99553, + "ParticleSystem": 99554, + "Ġslu": 99555, + "WindowText": 99556, + "ĠClassName": 99557, + "Ġslander": 99558, + "ĉPort": 99559, + "jong": 99560, + "?a": 99561, + ".Dial": 99562, + "âĢĶat": 99563, + "$objPHPExcel": 99564, + "Ġsoar": 99565, + "ENN": 99566, + "appeared": 99567, + "Ġquotid": 99568, + "emachine": 99569, + "Ġnip": 99570, + "Ġmicrotime": 99571, + "ĠAlma": 99572, + ";!": 99573, + "------------------------------------------------------------------------------------------------": 99574, + "ĠPassage": 99575, + "Ġdumpsters": 99576, + "ĠExclude": 99577, + "Ġsuggestive": 99578, + "ĠCircularProgressIndicator": 99579, + "_clr": 99580, + "ArrayType": 99581, + "ILLA": 99582, + "ElapsedTime": 99583, + "Driven": 99584, + "ĠresourceName": 99585, + "ĠGarrison": 99586, + "serir": 99587, + "-ahead": 99588, + "Ġpinnacle": 99589, + "ĠEspresso": 99590, + "Sparse": 99591, + "Ġassays": 99592, + "ĠGirlfriend": 99593, + "imid": 99594, + "]='\\": 99595, + "ONGLONG": 99596, + "Ġportraying": 99597, + "Lane": 99598, + "Ġbúsqueda": 99599, + "Ġreinforcements": 99600, + "ĠSpreadsheet": 99601, + "ĠArrayCollection": 99602, + ",arr": 99603, + "lightbox": 99604, + "icana": 99605, + "<\"": 99606, + "builders": 99607, + "Kid": 99608, + "ĠMatSnackBar": 99609, + "EXPR": 99610, + "odcast": 99611, + "ĠFoundations": 99612, + "Ġinds": 99613, + "='${": 99614, + "Fizz": 99615, + "-functional": 99616, + "(workspace": 99617, + "Ġstemmed": 99618, + "_patches": 99619, + "ĠJarvis": 99620, + "READING": 99621, + "Ġdisrespectful": 99622, + "ĠQDom": 99623, + "Ġ${Ċ": 99624, + "estatus": 99625, + "Reached": 99626, + "!.ĊĊ": 99627, + "ILT": 99628, + "ĠNDEBUG": 99629, + "ĠCourage": 99630, + "birthdate": 99631, + "ĠTing": 99632, + "Ġutilizado": 99633, + "ánchez": 99634, + "Outdoor": 99635, + "Ġhandguns": 99636, + "RefCount": 99637, + "ÉĻ": 99638, + "romo": 99639, + "Ġtts": 99640, + ".She": 99641, + "ĠPane": 99642, + "ãĢij,ãĢIJ": 99643, + "ĠIOCTL": 99644, + "/black": 99645, + "inscription": 99646, + "Ġbiopsy": 99647, + "ĠTimeInterval": 99648, + ".TestCheck": 99649, + "ĠGUIStyle": 99650, + "ĠCapability": 99651, + "ĠBeitrag": 99652, + "donnees": 99653, + "Treatment": 99654, + ".backup": 99655, + "Ġsignings": 99656, + "ĠBoca": 99657, + "drm": 99658, + ".MAIN": 99659, + "Ġgoede": 99660, + "ĠMarkup": 99661, + "GREE": 99662, + "ĠBaseService": 99663, + ".Creator": 99664, + "Ġjails": 99665, + "ĠKahn": 99666, + "IpAddress": 99667, + "ACHI": 99668, + "Ġinhibited": 99669, + "Ġ@$_": 99670, + "ĠAssass": 99671, + "Ġenviado": 99672, + "Heroes": 99673, + "ÐŁÐµÑĢ": 99674, + "ĠMaven": 99675, + ".ls": 99676, + "Ġive": 99677, + "|RF": 99678, + "ĠresizeMode": 99679, + "Ġrumpe": 99680, + "_attachments": 99681, + "TU": 99682, + "Ġtactile": 99683, + "Attempting": 99684, + "Ġrobin": 99685, + "yaw": 99686, + "Ġmercenaries": 99687, + "ĠHabitat": 99688, + "enddate": 99689, + "Ġoxy": 99690, + "ĉRandom": 99691, + "ohon": 99692, + "IsNull": 99693, + "ĠValidationResult": 99694, + "ãĥļ": 99695, + "umbed": 99696, + "ppv": 99697, + "Ġarp": 99698, + "ichick": 99699, + "_rnn": 99700, + "ĠTFT": 99701, + "TexImage": 99702, + "\"On": 99703, + "ĠSampler": 99704, + "topl": 99705, + "Ġjane": 99706, + "yling": 99707, + "ĠUNICODE": 99708, + "TabIndex": 99709, + "<{Ċ": 99710, + "suspend": 99711, + "uvian": 99712, + ",application": 99713, + "олиÑĩеÑģÑĤво": 99714, + "yat": 99715, + "ezier": 99716, + "ĠCHUNK": 99717, + "ĠAdler": 99718, + "/Add": 99719, + "ĠKeyValue": 99720, + "Ġsposób": 99721, + "Sampling": 99722, + "chers": 99723, + "_AMD": 99724, + "Ru": 99725, + ".MustCompile": 99726, + "Nation": 99727, + "Assoc": 99728, + "Managing": 99729, + "ĠEngl": 99730, + "_GB": 99731, + "Ġsuccinct": 99732, + "Ġdisliked": 99733, + "ĠIke": 99734, + "Bulletin": 99735, + "_ARCHIVE": 99736, + "Proposal": 99737, + "Ġjogging": 99738, + ".CREATED": 99739, + "Ġchol": 99740, + "è£ħ": 99741, + "Į¨": 99742, + "-push": 99743, + "Ġreserva": 99744, + "corev": 99745, + "ètre": 99746, + "THR": 99747, + "Ġincompetence": 99748, + "Ġcharisma": 99749, + "æĦŁ": 99750, + "Ġ\"==": 99751, + "BTN": 99752, + "ĠLocator": 99753, + "ivet": 99754, + "('.')Ċ": 99755, + "ĠforIndexPath": 99756, + "ôme": 99757, + "Ġcapacit": 99758, + "waters": 99759, + "ĠWRONG": 99760, + "hoa": 99761, + "ĠMIPS": 99762, + "Ġemiss": 99763, + "ĠJacqueline": 99764, + "(cmp": 99765, + "Ġeens": 99766, + "Leo": 99767, + ".timing": 99768, + "CLUSION": 99769, + "Ġ(\"-": 99770, + "åĵĪ": 99771, + ".kode": 99772, + "ĠUndert": 99773, + "Ġbewild": 99774, + "ĠEssen": 99775, + ".hd": 99776, + "Ġrenegot": 99777, + "Ġmower": 99778, + "Ġlsp": 99779, + "Ġpenchant": 99780, + "Ġmanoe": 99781, + "Ġagli": 99782, + "Ġrecal": 99783, + "ĠOPERATION": 99784, + "(^)(": 99785, + "Ġν": 99786, + "ĠScoped": 99787, + "Ġ@\"Ċ": 99788, + "=label": 99789, + "[loc": 99790, + "Intl": 99791, + "ĠNz": 99792, + "tablet": 99793, + ".ColumnName": 99794, + "ĠscreenSize": 99795, + "DBus": 99796, + "cooked": 99797, + "-registration": 99798, + "âĢľOne": 99799, + "-non": 99800, + "ĠwiÄĻc": 99801, + "Ġcosta": 99802, + ".addTab": 99803, + ".conditions": 99804, + "ĠHess": 99805, + "MEMORY": 99806, + "ĠAvalanche": 99807, + "()}}Ċ": 99808, + "Ġtriplet": 99809, + "Ġlabyrinth": 99810, + "ĠNodeList": 99811, + "ĠNYT": 99812, + "Ġyeni": 99813, + "dff": 99814, + ".HtmlControls": 99815, + "AVIS": 99816, + "/Math": 99817, + "Ġmemcmp": 99818, + "اء": 99819, + "оÑģÑĮ": 99820, + "crap": 99821, + "(pages": 99822, + "Ġlxml": 99823, + "ĠQDateTime": 99824, + "_tcb": 99825, + "Ġopenid": 99826, + "Ġsynaptic": 99827, + "ĠMDMA": 99828, + "(slug": 99829, + "igmatic": 99830, + "enor": 99831, + "Ġcramped": 99832, + "GOP": 99833, + "ŃIJ": 99834, + ".isFile": 99835, + "ĠDifferential": 99836, + "Ġ=\"\";Ċ": 99837, + "ĉĉĉĠĠĠĠĉ": 99838, + "ĠCooke": 99839, + "ĉUFUNCTION": 99840, + "Ġperseverance": 99841, + "RelativeLayout": 99842, + "IMPORTANT": 99843, + "Ġexon": 99844, + "Ġон": 99845, + "ibase": 99846, + "(CONT": 99847, + "novation": 99848, + "ä½ķ": 99849, + "[sub": 99850, + "AdminController": 99851, + "HTTPHeader": 99852, + "crear": 99853, + "ĠNIR": 99854, + "ĠDropDownList": 99855, + "Ġvalide": 99856, + "Ġdehydration": 99857, + ".']": 99858, + "(WIN": 99859, + "Ġ...\\": 99860, + "Ġphotoshop": 99861, + "ĉInit": 99862, + "_cou": 99863, + "ĠtimeZone": 99864, + "darwin": 99865, + "romatic": 99866, + "NavigationItemSelectedListener": 99867, + "brates": 99868, + "]--;Ċ": 99869, + "Ġtragedies": 99870, + "ĠPediatrics": 99871, + "SMART": 99872, + "-API": 99873, + "ĠMessageLookup": 99874, + "ĉvo": 99875, + "Ġprejudices": 99876, + "ĠmA": 99877, + "Ups": 99878, + "ĠMISSING": 99879, + "ĉad": 99880, + "Cream": 99881, + "ĠTb": 99882, + "ĠMona": 99883, + "_ghost": 99884, + "ĉtypes": 99885, + "Emb": 99886, + "ĠDocumentary": 99887, + "');ĊĊĊĊ": 99888, + "Ġlup": 99889, + "_Reference": 99890, + "ĠBATCH": 99891, + "Ġintertwined": 99892, + "": 100015, + "Ġfoyer": 100016, + "'utilisation": 100017, + "ĠMüller": 100018, + "ĠFetish": 100019, + "ĠdefaultManager": 100020, + "Ġbacktrack": 100021, + "Bah": 100022, + "Explicit": 100023, + "_ASCII": 100024, + "ĠmActivity": 100025, + "(Msg": 100026, + "Ġê²Į": 100027, + "ĠTERMS": 100028, + "ĠAngie": 100029, + "HSV": 100030, + "ĠMosque": 100031, + ".Names": 100032, + "íĬ¼": 100033, + "reste": 100034, + "_parms": 100035, + "Ġgaping": 100036, + "Ġcropping": 100037, + "DataFrame": 100038, + "Ġresponsiveness": 100039, + "_undo": 100040, + "_tran": 100041, + ".terminate": 100042, + "Ġitaliane": 100043, + "Ġwalkthrough": 100044, + "Ġattractiveness": 100045, + "де": 100046, + "_STS": 100047, + "_learn": 100048, + "Ġchocolates": 100049, + "ierarchical": 100050, + "-thinking": 100051, + "Ġ)))": 100052, + "ishments": 100053, + ".Logf": 100054, + "ĠTMZ": 100055, + "ĠCanary": 100056, + "foil": 100057, + "ĠVaccine": 100058, + ".vx": 100059, + "ĠSurround": 100060, + "Intermediate": 100061, + "Ġiov": 100062, + "vais": 100063, + "';\";Ċ": 100064, + "ï½ŀĊĊ": 100065, + "éĢģæĸĻ": 100066, + "â̦it": 100067, + "Seats": 100068, + "Clar": 100069, + "Wars": 100070, + "ĠHutchinson": 100071, + "ĠHasan": 100072, + "!')ĊĊ": 100073, + "ĠRichie": 100074, + "cheiden": 100075, + "($('": 100076, + "York": 100077, + "Ġlids": 100078, + "Ġalphanumeric": 100079, + "ĠGlock": 100080, + ".shapes": 100081, + "Ġsparking": 100082, + "_epsilon": 100083, + "uplicated": 100084, + ".dirty": 100085, + "])==": 100086, + "ĠìľĦì¹ĺ": 100087, + "Ġscn": 100088, + "Ġ/****************************************************************": 100089, + "_PREVIEW": 100090, + "_HC": 100091, + "ielding": 100092, + "fgets": 100093, + "ĠAddison": 100094, + "ĠproductService": 100095, + "-figure": 100096, + "(retval": 100097, + "zano": 100098, + "Ġautob": 100099, + "ĉsd": 100100, + "_numer": 100101, + "ĠSetLastError": 100102, + "ĠFior": 100103, + "ificance": 100104, + "Untitled": 100105, + "Ġinfield": 100106, + "Ġ{}));Ċ": 100107, + "Ġspac": 100108, + "Ġrookies": 100109, + "(describing": 100110, + "ngen": 100111, + "ிà®": 100112, + ".rdf": 100113, + ".Mutex": 100114, + "Ġkneeling": 100115, + "ĠQE": 100116, + "setMax": 100117, + "ReadStream": 100118, + "Ġventas": 100119, + "sut": 100120, + "cmpeq": 100121, + ".WriteAllText": 100122, + "ĠExperienced": 100123, + "$__": 100124, + "Ġkaum": 100125, + "ĠLIS": 100126, + "Ġdocumentos": 100127, + "_HEALTH": 100128, + "icontains": 100129, + "Ġartisans": 100130, + "OWNER": 100131, + "Ġblinked": 100132, + "getDisplay": 100133, + "Ġtoen": 100134, + "ĠrowNum": 100135, + "Ġavril": 100136, + "Ġinvis": 100137, + "ĠKear": 100138, + "toBeInTheDocument": 100139, + "apur": 100140, + "Ġracked": 100141, + "ĠMcMaster": 100142, + "_ATTRIB": 100143, + "Haz": 100144, + "Ġfactura": 100145, + "/ts": 100146, + "ĠÑĢазмеÑĢ": 100147, + "Ġzf": 100148, + "Ġshortfall": 100149, + ".fasta": 100150, + "ĠCONSTANT": 100151, + ".managed": 100152, + "gems": 100153, + "SharedPointer": 100154, + "Ġblurry": 100155, + "brightness": 100156, + "(components": 100157, + "Ġ...\"ĊĊ": 100158, + "SELL": 100159, + "ĠIllustrator": 100160, + ".getChannel": 100161, + "Ġtrouvé": 100162, + "ysters": 100163, + "Ġvois": 100164, + "ĠLinden": 100165, + "Ġemojis": 100166, + "Ġbrawl": 100167, + "ĠMSR": 100168, + "ĠElo": 100169, + "ĠCroatian": 100170, + "PopupMenu": 100171, + "Lewis": 100172, + ".JWT": 100173, + "Ġastonished": 100174, + "Bush": 100175, + "(itemId": 100176, + "Ġdetachment": 100177, + "ĠEncore": 100178, + "å°Ķ": 100179, + "Ġrekl": 100180, + "Ġcram": 100181, + ")$/": 100182, + ".getHost": 100183, + "_recommend": 100184, + "-HT": 100185, + "_calibration": 100186, + "Authenticate": 100187, + ".firebaseapp": 100188, + "UNIX": 100189, + "ĉCamera": 100190, + "ĠHEAP": 100191, + "Ideal": 100192, + ".office": 100193, + "Ġgoofy": 100194, + "(Symbol": 100195, + "Ġjouer": 100196, + "_partitions": 100197, + "Ġrapidement": 100198, + "ĠGNUNET": 100199, + "idUser": 100200, + "Ġsupervise": 100201, + "(Contact": 100202, + "AWN": 100203, + "ãģĺ": 100204, + "Ġnaam": 100205, + "Ġaust": 100206, + "åľ¨çº¿": 100207, + "_softmax": 100208, + "AllowAnonymous": 100209, + "ammable": 100210, + "ROUTE": 100211, + "*D": 100212, + "Ġaden": 100213, + "ĠCristina": 100214, + "ĠCristiano": 100215, + "Ġbloodstream": 100216, + "subclass": 100217, + "_persona": 100218, + "CHILD": 100219, + "-know": 100220, + "ĠnavigationOptions": 100221, + "ĠZukunft": 100222, + "ĠPixar": 100223, + "Tyler": 100224, + "Ġunderworld": 100225, + "Ġsincerity": 100226, + "Ġdispenser": 100227, + "Ġkter": 100228, + "idders": 100229, + ".addNode": 100230, + "-checked": 100231, + "Ġkeyst": 100232, + "ĠWTO": 100233, + ".signals": 100234, + "Ġadventurer": 100235, + "ĠPang": 100236, + "\\R": 100237, + "=pos": 100238, + "Ġdispensaries": 100239, + "ĠCloset": 100240, + "(\"{\\\"": 100241, + "ideon": 100242, + "Ġnécessaire": 100243, + "()\"Ċ": 100244, + "_RECEIVED": 100245, + "Ġrésultats": 100246, + "Ġmoden": 100247, + "ĠIcelandic": 100248, + ";d": 100249, + ".allowed": 100250, + "(newUser": 100251, + "Ġmerciless": 100252, + ".WaitFor": 100253, + "Ġdaycare": 100254, + "ĠConveyor": 100255, + "ĠÙ": 100256, + "اÙ": 100257, + "าà¸": 100258, + "ÑŁ": 100259, + "ÑŁÑŁ": 100260, + "Ġà¸": 100261, + "à¹Ģà¸": 100262, + "iá»": 100263, + "ãĢĢãĢĢãĢĢãĢĢ": 100264, + "ĠاØ": 100265, + "à¥Ī": 100266, + "ĠãĢĢ": 100267, + "ÑĹ": 100268, + "iá»ĩ": 100269, + "ÑŁÑŁÑŁÑŁ": 100270, + "à¥ĩà¤Ĥ": 100271, + "Ñĸд": 100272, + "ार": 100273, + "ÙĨد": 100274, + "Ñĸв": 100275, + "Ġब": 100276, + "Ġà¤ľ": 100277, + "।": 100278, + "нÑĸ": 100279, + "à¤Ĺ": 100280, + "ĠØ¢": 100281, + "Ġन": 100282, + "ÑĶ": 100283, + "ĠÑĢа": 100284, + "Ġà¤ħ": 100285, + "ÑģÑĮ": 100286, + "Ġव": 100287, + "ÑĨÑĸ": 100288, + "Ġvá»": 100289, + "³Øª": 100290, + "Ġद": 100291, + "nÄĽ": 100292, + "Ġल": 100293, + "ĠãĢĢĠãĢĢ": 100294, + "à¥Ĥ": 100295, + "द": 100296, + "à¸Ńà¸ĩ": 100297, + "ÙĪÙĨ": 100298, + "व": 100299, + "aÅŁ": 100300, + "à¹Ĥ": 100301, + "ικ": 100302, + "Ġर": 100303, + "Ġви": 100304, + "à¥įय": 100305, + "ान": 100306, + "Ġاز": 100307, + "اÙĩ": 100308, + "Ľi": 100309, + "Ġhá»": 100310, + "à¥ĭà¤Ĥ": 100311, + "iế": 100312, + "ĠÄijá»": 100313, + "य": 100314, + "Ïį": 100315, + "Ġcá»§": 100316, + "Ġبر": 100317, + "ĠÙħÛĮ": 100318, + "ĠاÛĮ": 100319, + "Ġà¤Ĩ": 100320, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 100321, + "िय": 100322, + "ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ": 100323, + "ви": 100324, + "رد": 100325, + "нÑĥ": 100326, + "ÙĬÙĨ": 100327, + "ια": 100328, + "Ġत": 100329, + "Ñĩи": 100330, + "Ġà¤ķर": 100331, + "از": 100332, + "aÄŁ": 100333, + "Ġà¤ī": 100334, + "ब": 100335, + "ÏĦα": 100336, + "تر": 100337, + "Ùĩا": 100338, + "ระ": 100339, + "jÃŃ": 100340, + "Îij": 100341, + "аÑĤи": 100342, + "Ġà¤Ĺ": 100343, + "ĠÑĤа": 100344, + "ÚĨ": 100345, + "à¤ľ": 100346, + "าà¸Ļ": 100347, + "Ġà¤Ń": 100348, + "िà¤ķ": 100349, + "áv": 100350, + "ĠÚ¯": 100351, + "Ïİ": 100352, + "าย": 100353, + "Ġà¤Ķ": 100354, + "ÅĻÃŃ": 100355, + "اÙĪ": 100356, + "ĠÑī": 100357, + "Ġà¤Ķर": 100358, + "еннÑı": 100359, + "ĠÚ©Ùĩ": 100360, + "ड": 100361, + "ÏĦο": 100362, + "ει": 100363, + "Ġà¤ĩ": 100364, + "à¥įत": 100365, + "à¤Ł": 100366, + "Û±": 100367, + "ĠØĮ": 100368, + "Ïģο": 100369, + "ηÏĤ": 100370, + "ë¬": 100371, + "Ñĸн": 100372, + "iá»ģ": 100373, + "iên": 100374, + "ĠвÑĸд": 100375, + "dı": 100376, + "ÙĦÛĮ": 100377, + "Ġز": 100378, + "Ïģα": 100379, + "ĠÛĮ": 100380, + "าà¸ĩ": 100381, + "Ġthá»": 100382, + "Ġà¹Ģà¸": 100383, + "iá»ĩn": 100384, + "اÙĬ": 100385, + "аннÑı": 100386, + "ÑĢе": 100387, + "ÎŁ": 100388, + "åĴ": 100389, + "اش": 100390, + "ाल": 100391, + "ëħĦ": 100392, + "Ġय": 100393, + "Ġرا": 100394, + "़": 100395, + "Ñĥв": 100396, + "ÙĪÙħ": 100397, + "ĠعÙĦ": 100398, + "ία": 100399, + "à¥Īà¤Ĥ": 100400, + "à¥ģà¤": 100401, + "าม": 100402, + "Ġmá»Ļt": 100403, + "Ġà¤ı": 100404, + "ãĢĢãĢĢãĢĢ": 100405, + "Ġपर": 100406, + "ĠاÙĨ": 100407, + "ĠاÛĮÙĨ": 100408, + "ĠvỼi": 100409, + "Σ": 100410, + "à¤ļ": 100411, + "Û°": 100412, + "iá»ĥ": 100413, + "าà¸ģ": 100414, + "ÎĻ": 100415, + "اع": 100416, + "Ñĸй": 100417, + "à¹ģล": 100418, + "ÙĩاÛĮ": 100419, + "Ñĩа": 100420, + ".:.:": 100421, + "ÏĦη": 100422, + "ĠÎij": 100423, + "رÛĮ": 100424, + "Ġngh": 100425, + "να": 100426, + "à¹ĥà¸Ļ": 100427, + "ित": 100428, + "Ġκαι": 100429, + "ÏĦε": 100430, + "à¥įà¤Ł": 100431, + "μα": 100432, + "лÑĥ": 100433, + "ým": 100434, + "ÏĢο": 100435, + "à¥Ī।": 100436, + "ï¼¼": 100437, + "رÙĬ": 100438, + "ниÑħ": 100439, + "Ïģι": 100440, + "ÙĢ": 100441, + "ÑĢо": 100442, + "Ġà¤ļ": 100443, + "ात": 100444, + "اÙĤ": 100445, + "Ġश": 100446, + "ĠÄijá»Ļ": 100447, + "ého": 100448, + "iá»ģu": 100449, + "ศ": 100450, + "ÑĸлÑĮ": 100451, + "uyá»": 100452, + "Û²": 100453, + "ĠnÄĥ": 100454, + "Ïīν": 100455, + "ĠÏĦοÏħ": 100456, + "кий": 100457, + "íĸ": 100458, + "ĠÑīо": 100459, + "à¥įव": 100460, + "ĠاÙĦØ£": 100461, + "ائ": 100462, + "tı": 100463, + "ĠÏĦο": 100464, + "¬¬": 100465, + "ĠØ·": 100466, + "ÙħاÙĨ": 100467, + "ĠÎł": 100468, + "ди": 100469, + "ึ": 100470, + "िà¤ı": 100471, + "ãģ£ãģŁ": 100472, + "ÛĮÙħ": 100473, + "ÃŃnh": 100474, + "rav": 100475, + "ÄĽt": 100476, + "Îķ": 100477, + "ĠÑıк": 100478, + "çĤ": 100479, + "à¸Ńà¸Ļ": 100480, + "ãģ¦ãģĦ": 100481, + "िल": 100482, + "ÑĸÑĤ": 100483, + "за": 100484, + "áp": 100485, + "ध": 100486, + "Ġêµ": 100487, + "à¹ģละ": 100488, + "ÃŃch": 100489, + "ĠØ¢ÙĨ": 100490, + "تÙĩ": 100491, + "ĠÙħع": 100492, + "ний": 100493, + "Æ°á»Ľc": 100494, + "ĠاÙĦع": 100495, + "رب": 100496, + "ाम": 100497, + "ĠرÙĪ": 100498, + "é«": 100499, + "ıy": 100500, + "Ġhá»į": 100501, + "ÑĤÑĮÑģÑı": 100502, + "ĠÎļ": 100503, + "Ġà¤ĩस": 100504, + "_": 100505, + "ĠÚĨ": 100506, + "ĠÙĪØ§ÙĦ": 100507, + "íķĻ": 100508, + "ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ": 100509, + "Ġvý": 100510, + "िस": 100511, + "ững": 100512, + "سÛĮ": 100513, + "Ġìĥ": 100514, + "ाà¤Ĥ": 100515, + "、": 100516, + "à¹ĩà¸Ļ": 100517, + "Ġथ": 100518, + "larak": 100519, + "ây": 100520, + "tÄĽ": 100521, + "νο": 100522, + "ĠÙħÙĪ": 100523, + "Ġngưá»Ŀi": 100524, + "å¦": 100525, + "ÙĬد": 100526, + "ilir": 100527, + "اØŃ": 100528, + "ĠãĢ": 100529, + "Ùĭ": 100530, + "ĠÑĢоз": 100531, + "Ġй": 100532, + "Ġdụ": 100533, + "à¹Ģà¸Ľ": 100534, + "ัà¸ĩ": 100535, + "ле": 100536, + "ाय": 100537, + "ï¿£": 100538, + "ÙĪØ§ÙĨ": 100539, + "Ġthá»ĥ": 100540, + "ãĥ½": 100541, + "Ã¼ÅŁ": 100542, + "çŁ": 100543, + "Ġο": 100544, + "ĠΣ": 100545, + "ÛĮت": 100546, + "ัà¸ģ": 100547, + "Τ": 100548, + "Ġà¤ıà¤ķ": 100549, + "ĠÙĩÙħ": 100550, + "ìĽĶ": 100551, + "ĠÎľ": 100552, + "Ġà¸Ħ": 100553, + "¯¸": 100554, + "ارÛĮ": 100555, + "िन": 100556, + "Ġnhững": 100557, + "Ġnhư": 100558, + "иÑĤи": 100559, + "ãĥ³ãĥ": 100560, + "à¹Ģร": 100561, + "ĠÐĽ": 100562, + "ÑĢÑĸ": 100563, + "ád": 100564, + "üy": 100565, + "iye": 100566, + "ĠÎķ": 100567, + "Ġส": 100568, + "Ïĥη": 100569, + "Ġë¬": 100570, + "ï»": 100571, + "ण": 100572, + "ÎĹ": 100573, + "श": 100574, + "ĠÙħØŃ": 100575, + "ÙĦÙĬ": 100576, + "Ġμε": 100577, + "ĠpÅĻÃŃ": 100578, + "ÎĿ": 100579, + "à¥įष": 100580, + "tir": 100581, + "راÙĨ": 100582, + "ĠÄijá»ĭ": 100583, + "ĠкоÑĤ": 100584, + "кÑĢа": 100585, + "λο": 100586, + "ĠÏĦη": 100587, + "Ñīе": 100588, + "ÏĦικ": 100589, + "ัà¹ī": 100590, + "iết": 100591, + "αν": 100592, + "íĶ": 100593, + "киÑħ": 100594, + "ĠпоÑģ": 100595, + "tır": 100596, + "à¥įम": 100597, + "رÙģ": 100598, + "ÄĽl": 100599, + "à¤Ń": 100600, + "ové": 100601, + "Ġlá»": 100602, + "à¹Ħà¸Ķ": 100603, + "ãģªãģĦ": 100604, + "ษ": 100605, + "iá»ĩu": 100606, + "ξ": 100607, + "ĠعÙĦÙī": 100608, + "дÑĥ": 100609, + "Ġdụng": 100610, + "аÑĢа": 100611, + "ाद": 100612, + "ož": 100613, + "ÙĦÙĩ": 100614, + "ÙĦÙħ": 100615, + "ноÑĹ": 100616, + "Û±Û": 100617, + "à¸Ĥà¸Ńà¸ĩ": 100618, + "Ρ": 100619, + "à¥Ģà¤Ĥ": 100620, + "ĠпÑĸд": 100621, + "Ġफ": 100622, + "à¸ĺ": 100623, + "εÏĤ": 100624, + "ास": 100625, + "à¹ĥห": 100626, + "ова": 100627, + "تÛĮ": 100628, + "à¸Ńย": 100629, + "à¸į": 100630, + "ĠnÄĥm": 100631, + "ÏĦι": 100632, + "ÙĪÛĮ": 100633, + "ĠмÑĸ": 100634, + "ĠاÙħ": 100635, + "ÏĢÏĮ": 100636, + "Ġzá": 100637, + "à¤Ī": 100638, + "Ġà¤ĸ": 100639, + "ĠnÄĽ": 100640, + "cÃŃ": 100641, + "ÙĨÚ¯": 100642, + "Ñģи": 100643, + "ζ": 100644, + "ná": 100645, + "Ŀi": 100646, + "Å©": 100647, + "ئ": 100648, + "ĠاÙĦس": 100649, + "á»ijc": 100650, + "ẽ": 100651, + "اج": 100652, + "Ùħا": 100653, + "êµŃ": 100654, + "оÑİ": 100655, + "در": 100656, + "à¹Ģà¸ģ": 100657, + "à¸ł": 100658, + "áng": 100659, + "íķ©": 100660, + "ĠÏĦηÏĤ": 100661, + "ĠÑĸн": 100662, + "оÑĹ": 100663, + "à¥ĩश": 100664, + "à¸ĭ": 100665, + "à¥ĭà¤Ĺ": 100666, + "лÑĸ": 100667, + "ĠpÅĻed": 100668, + "ÄįnÃŃ": 100669, + "Ġка": 100670, + "ĠΤ": 100671, + "á»Ļi": 100672, + "vÃŃ": 100673, + "ÑĢÑı": 100674, + "à¤¾à¤ľ": 100675, + "аÑħ": 100676, + "िर": 100677, + "าส": 100678, + "dır": 100679, + "Ø¢": 100680, + "Îļ": 100681, + "ĠÎŃ": 100682, + "Ġtại": 100683, + "iá»ĩc": 100684, + "iến": 100685, + "Ġغ": 100686, + "اخ": 100687, + "ĠاÙĦØŃ": 100688, + "ĠбÑĥ": 100689, + "Ġvá»ģ": 100690, + "мÑĸ": 100691, + "ÙħÙĦ": 100692, + "mÄ±ÅŁ": 100693, + "à¸Ľà¸£à¸°": 100694, + "οÏį": 100695, + "εί": 100696, + "Ġरह": 100697, + "ним": 100698, + "عد": 100699, + "ĠباÙĦ": 100700, + "¤ij": 100701, + "çł": 100702, + "Ġolm": 100703, + "Ïİν": 100704, + "Ġhá»įc": 100705, + "است": 100706, + "าว": 100707, + "ÙĪØ¨": 100708, + "ÑĸÑı": 100709, + "ĠÙĩاÛĮ": 100710, + "ë§Ī": 100711, + "à¥Į": 100712, + "ĠÄĮ": 100713, + "à¤ı": 100714, + "ادÙĩ": 100715, + "ĠاÙĪ": 100716, + "нÑĭм": 100717, + "ằ": 100718, + "ÙħÙĨ": 100719, + "iá»ĩt": 100720, + "laÅŁ": 100721, + "Ñĸз": 100722, + "ÙĪØ³": 100723, + "ĠlÃłm": 100724, + "ĠÄijến": 100725, + "पन": 100726, + "ĠÛĮÚ©": 100727, + "ĠÙĦÙĦ": 100728, + "ĠmÄĽ": 100729, + "ĠبراÛĮ": 100730, + "ाह": 100731, + "ĠÙħر": 100732, + "eç": 100733, + "à¸Ńร": 100734, + "εÏģ": 100735, + "ัà¸Ķ": 100736, + "кон": 100737, + "nou": 100738, + "Ġгод": 100739, + "ูà¹ī": 100740, + "à¹Ģล": 100741, + "Úĺ": 100742, + "ĠÄijá»ĭnh": 100743, + "ĠÄijó": 100744, + "анов": 100745, + "ĠÙ쨱": 100746, + "ارد": 100747, + "ÑĸÑĹ": 100748, + "à¸Ħร": 100749, + "à¥įथ": 100750, + "cak": 100751, + "ÑĨÑĸÑĹ": 100752, + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 100753, + "Ùĩر": 100754, + "à¥ī": 100755, + "Ġgiá»": 100756, + "íĨ": 100757, + "âĢĮÙĩاÛĮ": 100758, + "à¥ģर": 100759, + "Ġà¸ģ": 100760, + "ÅĪ": 100761, + "æ¨": 100762, + "ÎŁÎ": 100763, + "าà¸Ħ": 100764, + "кÑĢаÑĹ": 100765, + "ảo": 100766, + "oÄŁ": 100767, + "Ġसम": 100768, + "Ġviá»ĩc": 100769, + "Ġsẽ": 100770, + "Ġná": 100771, + "ÙĬÙħ": 100772, + "£p": 100773, + "öy": 100774, + "ÙĪØ²": 100775, + "Ġκα": 100776, + "Ùħد": 100777, + "nÃŃm": 100778, + "ová": 100779, + "ाव": 100780, + "ा।": 100781, + "à¥įस": 100782, + "ç·": 100783, + "ặc": 100784, + "Ġà¸ŀ": 100785, + "ï½Ģ": 100786, + "ôi": 100787, + "Ġợ": 100788, + "οÏĤ": 100789, + "Ġtrên": 100790, + "мÑĥ": 100791, + "ÑģÑĮк": 100792, + "à¸Ł": 100793, + "ovat": 100794, + "Ġmá»": 100795, + "íı": 100796, + "Ġво": 100797, + "εν": 100798, + "à¥Ĥर": 100799, + "گاÙĩ": 100800, + "ĠÄijá»Ļng": 100801, + "Ú©ÙĨ": 100802, + "Ñīи": 100803, + "ĠпÑĢа": 100804, + "ürk": 100805, + "ÙĪØ¹": 100806, + "ấp": 100807, + "ný": 100808, + "Ġquan": 100809, + "ÑĸÑĩ": 100810, + "Ġνα": 100811, + "Ġनह": 100812, + "ĠÚ©ÙĨ": 100813, + "cı": 100814, + "çĿĢ": 100815, + "бо": 100816, + "Ġاس": 100817, + "è»": 100818, + "اÙĨÛĮ": 100819, + "à¸ķร": 100820, + "ÏĦά": 100821, + "ĠØ£ÙĨ": 100822, + "éĤ£": 100823, + "Ġม": 100824, + "кÑĤ": 100825, + "iê": 100826, + "Ġhợp": 100827, + "تÙħ": 100828, + "ĠبÙĨ": 100829, + "hod": 100830, + "ιÏĥ": 100831, + "หà¸Ļ": 100832, + "ĠÑĹ": 100833, + "лив": 100834, + "Ġکرد": 100835, + "ĠÙħØ´": 100836, + "اط": 100837, + "بÙĬ": 100838, + "Ġร": 100839, + "دÙħ": 100840, + "ÙĦاÙħ": 100841, + "à¹Īว": 100842, + "ĠÙĨÙħ": 100843, + "ĠæĹ": 100844, + "éħ": 100845, + "ноÑģÑĤ": 100846, + "iá»ĥm": 100847, + "êµIJ": 100848, + "ayı": 100849, + "ĠبÙĪØ¯": 100850, + "گر": 100851, + "Ġhiá»ĩn": 100852, + "ç³": 100853, + "ÑģÑĤвен": 100854, + "Ġà¤ķरन": 100855, + "ĠÏĦην": 100856, + "Ġà¸Ń": 100857, + "ĠÙħت": 100858, + "ģn": 100859, + "جÙħ": 100860, + "λλ": 100861, + "ĠÑĢе": 100862, + "ิà¸Ķ": 100863, + "ĠاÙĦÙĤ": 100864, + "αÏģ": 100865, + "Ġयह": 100866, + "nÃŃch": 100867, + "ÑĶÑĤÑĮÑģÑı": 100868, + "Ġà¸Ĺ": 100869, + "ÛĮØ´": 100870, + "ÅĻe": 100871, + "Ġnebo": 100872, + "ĠÑĩа": 100873, + "lou": 100874, + "ÑģÑĤво": 100875, + "ĠЧ": 100876, + "à¸Ħว": 100877, + "ÙĩÙħ": 100878, + "à¹Ģà¸Ķ": 100879, + "Ġà¹ģ": 100880, + "Ġà¹Ĥ": 100881, + "Û³": 100882, + "Å©ng": 100883, + "Ġnej": 100884, + "ÛĮÚ©": 100885, + "Ġsá»Ń": 100886, + "Ù쨱": 100887, + "Îł": 100888, + "Ġпок": 100889, + "ĠاÙĦÙĨ": 100890, + "ĠvÅ¡": 100891, + "ẫ": 100892, + "ĠnhÃł": 100893, + "ãĢĢãĢĢãĢĢãĢĢãĢĢ": 100894, + "ήÏĤ": 100895, + "οÏģ": 100896, + "ĠÏĩ": 100897, + "à¹Ģà¸Ĺ": 100898, + "ÑĥлÑĮ": 100899, + "ãħĩ": 100900, + "Ġyıl": 100901, + "ÑĢод": 100902, + "ίν": 100903, + "ìĹĪëĭ¤": 100904, + "اص": 100905, + "ĠÄijầu": 100906, + "à¥ĩà¤ķ": 100907, + "ÑĢом": 100908, + "ãģĵãģ¨": 100909, + "Ġار": 100910, + "她": 100911, + "ĠتØŃ": 100912, + "Å¡tÄĽ": 100913, + "à¥įल": 100914, + "à¥įà¤ķ": 100915, + "Ġکار": 100916, + "ujÃŃ": 100917, + "Ġà¤īन": 100918, + "ĠαÏĢÏĮ": 100919, + "ĠmÃł": 100920, + "žÃŃ": 100921, + "Ġà¸Ī": 100922, + "alı": 100923, + "फ": 100924, + "ÑĩеÑģ": 100925, + "ĠعÙĨ": 100926, + "æķĻ": 100927, + "ï¾Ĩ": 100928, + "िà¤Ĥ": 100929, + "Ġsá»±": 100930, + "воÑĢ": 100931, + "Ġthá»±c": 100932, + "ëį°": 100933, + "ãģ¦ãģĦãĤĭ": 100934, + "à¹Īà¸ĩ": 100935, + "تب": 100936, + "Ġnhiá»ģu": 100937, + "ĥn": 100938, + "ĠÄijá»ĵ": 100939, + "Ġห": 100940, + "Ûµ": 100941, + "mÄĽ": 100942, + "ạt": 100943, + "ĠchÃŃnh": 100944, + "μÎŃ": 100945, + "anı": 100946, + "Ġbá»ĭ": 100947, + "ằng": 100948, + "ÅĻed": 100949, + "éŁ": 100950, + "ánh": 100951, + "ÙĢÙĢ": 100952, + "ĠÙħس": 100953, + "á»ĭch": 100954, + "Äĥn": 100955, + "ovánÃŃ": 100956, + "à¹Īาà¸ĩ": 100957, + "Ġà¸Ľ": 100958, + "ĠnÆ°á»Ľc": 100959, + "боÑĤ": 100960, + "ıyor": 100961, + "ĠØ®ÙĪØ¯": 100962, + "Û¹": 100963, + "ĠÙħد": 100964, + "Ġüz": 100965, + "ì½": 100966, + "ÙĪÙĤ": 100967, + "르": 100968, + "лек": 100969, + "Ġcả": 100970, + "олог": 100971, + "à¹īà¸Ńà¸ĩ": 100972, + "miÅŁ": 100973, + "à¹īว": 100974, + "Ä©": 100975, + "Îľ": 100976, + "à¸Ńà¸ģ": 100977, + "__": 100978, + "à¤ĸ": 100979, + "ĠЯ": 100980, + "무": 100981, + "اÛĮÛĮ": 100982, + "ské": 100983, + "uyên": 100984, + "eÅŁ": 100985, + "ái": 100986, + "úng": 100987, + "Ãło": 100988, + "ÑĸÑģ": 100989, + "ç¶": 100990, + "Ġà¤Ĩप": 100991, + "ïº": 100992, + "ÎĽ": 100993, + "Ġê³µ": 100994, + "ĠÐĨ": 100995, + "Ġà¤ħपन": 100996, + "ứng": 100997, + "ÏĮÏĤ": 100998, + "Ġnghiá»ĩ": 100999, + "ĠاÙĦب": 101000, + "à¥ĭन": 101001, + "Ġà¤Ł": 101002, + "Ġìľł": 101003, + "ĠcÅ©ng": 101004, + "Ġà¤īस": 101005, + "Ġड": 101006, + "ĠشدÙĩ": 101007, + "ีà¹ī": 101008, + "Û´": 101009, + "ặt": 101010, + "æĸ¯": 101011, + "Ġëį": 101012, + "Ġпл": 101013, + "би": 101014, + "ê³Ħ": 101015, + "ον": 101016, + "Ġçık": 101017, + "Ġbulun": 101018, + "سÙħ": 101019, + "aç": 101020, + "اÙĨÙĩ": 101021, + "ÛĮز": 101022, + "leÅŁ": 101023, + "ắc": 101024, + "اک": 101025, + "Ġसà¤ķ": 101026, + "ĠоÑĢг": 101027, + "Ġà¸Ļ": 101028, + "ाथ": 101029, + "ĠÙħÙĤ": 101030, + "ĠÎĶE": 101031, + "ÑİÑĤÑĮ": 101032, + "á»Ļc": 101033, + "Ġη": 101034, + "sob": 101035, + "Ġtheo": 101036, + "åŀ": 101037, + "ĠاÙĦØ´": 101038, + "à¹Ģà¸ŀ": 101039, + "ÎŃÏĤ": 101040, + "à¹Ģà¸Ĥ": 101041, + "åĻ": 101042, + "िश": 101043, + "Ġباز": 101044, + "ÑĢоб": 101045, + "Ġγια": 101046, + "με": 101047, + "Ġباش": 101048, + "ाà¤ĩ": 101049, + "Ġquy": 101050, + "λε": 101051, + "اÙĥ": 101052, + "ĠÑĢок": 101053, + "ĠTürk": 101054, + "ĠÐ¥": 101055, + "ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ": 101056, + "æ©": 101057, + "Ġphải": 101058, + "à¸Ħวาม": 101059, + ":::": 101060, + "lÃŃ": 101061, + "Ġjsou": 101062, + "ÛĮÙĦ": 101063, + "álnÃŃ": 101064, + "ĶĶ": 101065, + "íĸī": 101066, + "æĥ³": 101067, + "lá": 101068, + "ĠÏĥÏħ": 101069, + "Ñĭва": 101070, + "Ġnhất": 101071, + "à¸Ńม": 101072, + "Û¸": 101073, + "ecek": 101074, + "ÑĸÑĢ": 101075, + "ÙĪØ´": 101076, + "λα": 101077, + "ĠÎĴ": 101078, + "оÑĢа": 101079, + "ÙģØª": 101080, + "edir": 101081, + "ÑĥÑħ": 101082, + "ä¸ĸ": 101083, + "ĠУкÑĢаÑĹ": 101084, + "ĠíĶ": 101085, + "άν": 101086, + "Ġشر": 101087, + "ĠاÙĦج": 101088, + "еÑĢед": 101089, + "ìĺģ": 101090, + "ĠhÃłnh": 101091, + " ̄ ̄": 101092, + "ме": 101093, + "ÑİÑĤÑģÑı": 101094, + "ĠØ¥ÙĦÙī": 101095, + "ìĹħ": 101096, + "Ġتر": 101097, + "ком": 101098, + "Ġشد": 101099, + "ĠاÙĦÙĥ": 101100, + "ĠÏĥÏĦο": 101101, + "à¥įद": 101102, + "볤": 101103, + "ÑĥваннÑı": 101104, + "Ġthì": 101105, + "ê´Ģ": 101106, + "κε": 101107, + "سب": 101108, + "íĥĢ": 101109, + "Ġï¼ı": 101110, + "Ġà¹ģละ": 101111, + "ĠÏĮ": 101112, + "ниÑĨ": 101113, + "ĠÐĿа": 101114, + "Ñıв": 101115, + "lü": 101116, + "ιο": 101117, + "ÙĨدÙĩ": 101118, + "ÙĦÙĥ": 101119, + "ĠngÃły": 101120, + "Ġnhân": 101121, + "Ġ^{": 101122, + "à¥ĥ": 101123, + "Ġgerek": 101124, + "ارÙĩ": 101125, + "ĠcÆ¡": 101126, + "Ġà¸ķ": 101127, + "æĤ": 101128, + "çͰ": 101129, + "à¥Īà¤Ĥ।": 101130, + "ัว": 101131, + "vÄĽ": 101132, + "öz": 101133, + "или": 101134, + "Ġpháp": 101135, + "ê¸Ī": 101136, + "ĠÎŁ": 101137, + "ĠpÅĻi": 101138, + "Ġìĸ´": 101139, + "Ġдол": 101140, + "ÙĪØ±Ø¯": 101141, + "à¹Ģม": 101142, + "Ïĥε": 101143, + "าà¸Ĺ": 101144, + "oÃłi": 101145, + "รม": 101146, + "Û¶": 101147, + "Ġà¸ļ": 101148, + "iyet": 101149, + "ÏĦαι": 101150, + "ìĦł": 101151, + "ĠεÏĢ": 101152, + "िव": 101153, + "ê¹Į": 101154, + "га": 101155, + "ĠÑģлÑĥ": 101156, + "Ġhình": 101157, + "ĠداÙĨ": 101158, + "Ġà¤Ĺय": 101159, + "ÙĬا": 101160, + "èij": 101161, + "à¤Ĥत": 101162, + "ĠساÙĦ": 101163, + "ëłĪ": 101164, + "lerin": 101165, + "à¥ĩत": 101166, + ".:.:.:.:": 101167, + "Ġëħ": 101168, + "ĠاÙĦØ¥": 101169, + "ảng": 101170, + "èĦ": 101171, + "ολ": 101172, + "пов": 101173, + "Ġθ": 101174, + "Û·": 101175, + "Ġnó": 101176, + "ĠdÃ¼ÅŁ": 101177, + "Ġtiế": 101178, + "ÙĪØ¬": 101179, + "Ġjsem": 101180, + "ạng": 101181, + "ãģĤãĤĭ": 101182, + "à¸Ńà¸ļ": 101183, + "ÙĪÙĬ": 101184, + "à¤ķर": 101185, + "Ġде": 101186, + "¯¼": 101187, + "Ġно": 101188, + "ÑĨÑĸй": 101189, + "ÏĥÏĦ": 101190, + "кие": 101191, + "Ïĥει": 101192, + "ìķĪ": 101193, + "ĠhÆ¡n": 101194, + "Ġà¤ķह": 101195, + "اض": 101196, + "ì¸": 101197, + "ãĥŁ": 101198, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 101199, + "ãĤĪãģĨ": 101200, + "ा,": 101201, + "еÑĢи": 101202, + "ë©°": 101203, + "íĶĦ": 101204, + "ĠпоÑģÑĤ": 101205, + "خر": 101206, + "à¥ĭत": 101207, + "âu": 101208, + "кой": 101209, + "daki": 101210, + "íħ": 101211, + "::::::::::::::::": 101212, + "Ġöz": 101213, + "ÑĢаж": 101214, + "nÃŃho": 101215, + "หล": 101216, + "ĠÏĥÏĦη": 101217, + "ĠÄijá»ģ": 101218, + "Ġká»": 101219, + "iá»ĥn": 101220, + "ÅĻi": 101221, + "Ġkteré": 101222, + "¢ħ": 101223, + "üç": 101224, + "ÙĬÙģ": 101225, + "Ġlý": 101226, + "Ġthá»Ŀi": 101227, + "ĠìĨĮ": 101228, + "нÑĮ": 101229, + "ÐĨ": 101230, + "ÑĤÑĢ": 101231, + "à¸ĩาà¸Ļ": 101232, + "коÑĹ": 101233, + "μο": 101234, + "Ġsür": 101235, + "uyá»ģn": 101236, + "ĠÙħا": 101237, + "à¤Ĥà¤Ĺ": 101238, + "ĠÄijá»ĵng": 101239, + "òn": 101240, + "à¥ģल": 101241, + "à¥įप": 101242, + "λη": 101243, + "Ùħر": 101244, + "пÑĢи": 101245, + "iyle": 101246, + "ाप": 101247, + "Ġà¤ħन": 101248, + "ĠÑĶ": 101249, + "Ġyön": 101250, + "ÙĦÙģ": 101251, + "adır": 101252, + "á½": 101253, + "Ġê³ł": 101254, + "خص": 101255, + "imiz": 101256, + "åľĭ": 101257, + "Ġнад": 101258, + "ĠÅĻ": 101259, + "ноÑģÑĤÑĸ": 101260, + "ĠاÙģ": 101261, + "анÑĸ": 101262, + "à¥ĩà¤Ł": 101263, + "Ġë§IJ": 101264, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 101265, + "ĠìĬ¤": 101266, + "ิà¸ķ": 101267, + "åĦ": 101268, + "ÛĮÙĩ": 101269, + "оÑĪ": 101270, + "žit": 101271, + "ìĭ¤": 101272, + "à¥Ģन": 101273, + "Ġî": 101274, + "æ¥Ń": 101275, + "à¥ĩन": 101276, + "Ġذ": 101277, + "Ġloại": 101278, + "à¹Ħà¸Ľ": 101279, + "Ñĸк": 101280, + "ĠкÑĢа": 101281, + "à¥ĭर": 101282, + "ุà¸Ķ": 101283, + "ĠاÙĦر": 101284, + "ĠÑģоб": 101285, + "าà¸Ĭ": 101286, + "Ġसà¤ķत": 101287, + "ĠÎĿ": 101288, + "اÙħÙĩ": 101289, + "à¹īาà¸Ļ": 101290, + "Ġtrình": 101291, + "ĠاÙĦÙģ": 101292, + "ĠاÙĦد": 101293, + "unun": 101294, + "оÑĤов": 101295, + "Æ°á»Ł": 101296, + "ĠÑģво": 101297, + "ίαÏĤ": 101298, + "ấn": 101299, + "огда": 101300, + "à¸Ĺย": 101301, + "Ġbyl": 101302, + "ØŃد": 101303, + "à¸ģล": 101304, + "بÙĩ": 101305, + "ĠvÄĽ": 101306, + "被": 101307, + "ĠØ¢Ùħ": 101308, + "ĠÄijiá»ģu": 101309, + "å¨": 101310, + "Ġkdy": 101311, + "ĠبÙĪ": 101312, + "ẫn": 101313, + "ìľł": 101314, + "ाà¤ķ": 101315, + "ků": 101316, + "Ġtrưá»Ŀng": 101317, + "ické": 101318, + "ниÑı": 101319, + "ĠÏĢοÏħ": 101320, + "Æ°á»Łng": 101321, + "номÑĥ": 101322, + "à¹Īà¸Ļ": 101323, + "ูà¹Ī": 101324, + "Ġkết": 101325, + "Ġï¼¼": 101326, + "Ġìĭł": 101327, + "iç": 101328, + "ĠnÄĥng": 101329, + "ÄįÃŃ": 101330, + "ÑĤÑı": 101331, + "ÑĢеб": 101332, + "Ùĭا": 101333, + "Ú¯ÛĮ": 101334, + "ãĥİ": 101335, + "ĠkarÅŁ": 101336, + "вÑĸ": 101337, + "Ġphần": 101338, + "à¸Īะ": 101339, + "ắt": 101340, + "رة": 101341, + "ิà¸ĩ": 101342, + "ิà¹Ī": 101343, + "ाà¤Ī": 101344, + "าà¸ŀ": 101345, + "ÙĨÛĮ": 101346, + "ìŰ": 101347, + "bÄĽ": 101348, + "ĠاÙĦص": 101349, + "íĹ": 101350, + "Ġسر": 101351, + "lara": 101352, + "ëĭ¨": 101353, + "ĠÙĤر": 101354, + "èİ": 101355, + "بد": 101356, + "Ġйого": 101357, + "à¥įह": 101358, + "Ġcách": 101359, + "íķĺê³ł": 101360, + "ĠÏĢÏģο": 101361, + "Ġتع": 101362, + "ĴĪ": 101363, + "Ġвод": 101364, + "ç¥ŀ": 101365, + "ким": 101366, + "Ġdá»±": 101367, + "à¹Ģห": 101368, + "ана": 101369, + "Ġï½": 101370, + "ĠbaÄŁ": 101371, + "Ġपह": 101372, + "Ġcao": 101373, + "ÏģÏĮ": 101374, + "ÙĨج": 101375, + "ाà¤ı": 101376, + "Ġå¹´": 101377, + "Ġnghiá»ĩp": 101378, + "Û²Û°": 101379, + "каÑı": 101380, + "Ïģί": 101381, + "Ġбол": 101382, + "Ġgiá": 101383, + "Ġзд": 101384, + "à¥ĩल": 101385, + "Ġcấp": 101386, + "à¹Ģส": 101387, + "Ïģγ": 101388, + "ĠìĤ": 101389, + "dÄĽ": 101390, + "à¥ģन": 101391, + "ìĪ": 101392, + "ılan": 101393, + "лаÑģ": 101394, + "Ġว": 101395, + "ĠÏĥε": 101396, + "ĠØ«": 101397, + "ĠЦ": 101398, + "çĤº": 101399, + "Ġbüy": 101400, + "еÑĨ": 101401, + "太": 101402, + "Ġबन": 101403, + "огÑĢа": 101404, + "ĠпÑĢоÑĤ": 101405, + "Ġlượng": 101406, + "Ġdön": 101407, + "รà¸ĩ": 101408, + "ало": 101409, + "ĠجÙħ": 101410, + "à¥Ī,": 101411, + "Ġ미": 101412, + "Ġê¹": 101413, + "ÙĪØª": 101414, + "à¥Ģय": 101415, + "à¸Īาà¸ģ": 101416, + "Ġchất": 101417, + "Ω": 101418, + "Ġkhác": 101419, + "Ġtháng": 101420, + "jÅ¡ÃŃ": 101421, + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł": 101422, + "á»ijt": 101423, + "หร": 101424, + "Ñĸл": 101425, + "åħī": 101426, + "åĤ": 101427, + "ÙĦØ©": 101428, + "Ġê±°": 101429, + "овоÑĢ": 101430, + "iá»ĥu": 101431, + "ĠмеÑĤ": 101432, + "аÑĶ": 101433, + "ĠÑĩаÑģ": 101434, + "Ïģε": 101435, + "ì¹´": 101436, + "âĢĮØ´": 101437, + "물": 101438, + "úc": 101439, + "âĢĮÙĩا": 101440, + "iá»ģn": 101441, + "stav": 101442, + "íŀ": 101443, + "ĠÙĨظ": 101444, + "ĨĴ": 101445, + "ĠÏĦα": 101446, + "Ġзаб": 101447, + "ÙĥØ©": 101448, + "ĠгÑĢÑĥ": 101449, + "во": 101450, + "ĠÙħج": 101451, + "Ġsah": 101452, + "بÙĦ": 101453, + "عة": 101454, + "ÑĥÑĪ": 101455, + "ĠÑĤем": 101456, + "íĭ": 101457, + "eck": 101458, + "ÏīÏĤ": 101459, + "ÙĬت": 101460, + "ìĹĪ": 101461, + "çĭ": 101462, + "ذا": 101463, + "ìłĢ": 101464, + "ĠнаÑģ": 101465, + "ĠпоÑĩ": 101466, + "æł¡": 101467, + "ÏĪ": 101468, + "Ñģкой": 101469, + "üc": 101470, + "ÙĤÙĦ": 101471, + "Ġпоз": 101472, + "ĠоÑģоб": 101473, + "าล": 101474, + "нÑĭми": 101475, + "олод": 101476, + "è¼": 101477, + "ĠدÛĮ": 101478, + "ĠÑĥÑģÑĤ": 101479, + "Ġ무": 101480, + "ÙĬس": 101481, + "ë°©": 101482, + "à¥įà¤ļ": 101483, + "ила": 101484, + "Ġnên": 101485, + "ние": 101486, + "ιν": 101487, + "larını": 101488, + "à¹Ģà¸Ļ": 101489, + "ÙĨت": 101490, + "aģı": 101491, + "ımız": 101492, + "ĠاÙĦØ®": 101493, + "à¹Ģว": 101494, + "à¥įन": 101495, + "ĠÏħ": 101496, + "ĠíĨ": 101497, + "ẻ": 101498, + "ิà¹Ĥ": 101499, + "αÏĤ": 101500, + "меÑĤ": 101501, + "Ġzp": 101502, + "Ġjeho": 101503, + "ียà¸Ļ": 101504, + "ÑĦоÑĢ": 101505, + "ınız": 101506, + "klad": 101507, + "íĮĮ": 101508, + "uyá»ĩ": 101509, + "ιά": 101510, + "ĠãĢģ": 101511, + "شر": 101512, + "æ©Ł": 101513, + "Ġتا": 101514, + "Ġзна": 101515, + "ستاÙĨ": 101516, + "à¥ĩर": 101517, + "매": 101518, + "çĥ": 101519, + "Ġже": 101520, + "าà¸Ķ": 101521, + "Ġض": 101522, + "éŃ": 101523, + "Ġназ": 101524, + "ĠÛĮا": 101525, + "ené": 101526, + "ัย": 101527, + "íĸĪëĭ¤": 101528, + "Ġبد": 101529, + "à¥ģà¤ķ": 101530, + "ÑĤов": 101531, + "ì°¨": 101532, + "Ùĩد": 101533, + "à¸Ķย": 101534, + "Ġhoặc": 101535, + "ĠÐŁÑĢи": 101536, + "ÙĨا": 101537, + "çİĭ": 101538, + "ÑĥваÑĤи": 101539, + "à¸ļร": 101540, + "Ġà¤ķरत": 101541, + "ÏĥηÏĤ": 101542, + "ؤ": 101543, + "éķ·": 101544, + "åħĭ": 101545, + "Ġدار": 101546, + "ัà¹Ī": 101547, + "Æ¡i": 101548, + "าà¸Ī": 101549, + "ými": 101550, + "ấu": 101551, + "Ġدست": 101552, + "kem": 101553, + "ĠоÑģнов": 101554, + "모": 101555, + "Ïģά": 101556, + "æħ": 101557, + "Ġاب": 101558, + "士": 101559, + "Ħĸ": 101560, + "ÎĶ": 101561, + "ÙĬÙĥ": 101562, + "íİ": 101563, + "Ġyüz": 101564, + "adı": 101565, + "าà¸ķ": 101566, + "ä»Ģ": 101567, + "ìĿ´ëĭ¤": 101568, + "Ġzv": 101569, + "ĠtÄĽ": 101570, + "Ġíĸ": 101571, + "थ": 101572, + "Ġलà¤Ĺ": 101573, + "ìĺĢ": 101574, + "Ġан": 101575, + "çĹ": 101576, + "ìĹŃ": 101577, + "нÑĸÑģÑĤÑĮ": 101578, + "Åŀ": 101579, + "Ġphát": 101580, + "ÙĤØ©": 101581, + "Ġthế": 101582, + "Ġï¾": 101583, + "ì²ľ": 101584, + "ĠìĦł": 101585, + "à¹ĥà¸Ĭ": 101586, + "iêu": 101587, + "ÄŁini": 101588, + "ÙĤد": 101589, + "Ġkterý": 101590, + "Ñģкий": 101591, + "à¥įड": 101592, + "tadır": 101593, + "ĠÑģм": 101594, + "ÙĪÙģ": 101595, + "ارÙĬ": 101596, + "å¾·": 101597, + "ิม": 101598, + "خت": 101599, + "å¾Ī": 101600, + "ĠгоÑĢ": 101601, + "ï¼ĮæĪij": 101602, + "Ġìĺģ": 101603, + "ĠëıĻ": 101604, + "Ñģа": 101605, + "à¹Ģà¸Ħ": 101606, + "민": 101607, + "ึà¹Ī": 101608, + "Ġliên": 101609, + "ĠÙĩا": 101610, + "lerini": 101611, + "ĠÑĨе": 101612, + "اÙĦÛĮ": 101613, + "Ġमह": 101614, + "Ġvụ": 101615, + "Ġxuất": 101616, + "ิà¸ģ": 101617, + "ĠпÑĢоÑĨ": 101618, + "Ġαν": 101619, + "ÑĢим": 101620, + "Ġcần": 101621, + "ĠиÑħ": 101622, + "ноÑİ": 101623, + "ĠtÃŃnh": 101624, + "Ġbá»Ļ": 101625, + "Ñĸм": 101626, + "ĠnháºŃn": 101627, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 101628, + "ÙĬÙĩ": 101629, + "äºļ": 101630, + "Ġобла": 101631, + "Ġà¤ĺ": 101632, + "ných": 101633, + "æĿij": 101634, + "ÙĦس": 101635, + "Ġнеоб": 101636, + "ابة": 101637, + "vá": 101638, + "οÏħν": 101639, + "ÑĢеÑĤ": 101640, + "asında": 101641, + "Ġyar": 101642, + "ĠÄijiá»ĥm": 101643, + "нÑİ": 101644, + "ाà¤Ĺ": 101645, + "ĠÚ©Ø´": 101646, + "Ñĥз": 101647, + "Ġà¸Ķ": 101648, + "ảm": 101649, + "ками": 101650, + "ĠÎĻ": 101651, + "à¹Ģà¸ķ": 101652, + "ĠlỼ": 101653, + "ÙĤÛĮ": 101654, + "kou": 101655, + "ÙĦب": 101656, + "ива": 101657, + "æĵ": 101658, + "ẹ": 101659, + "κα": 101660, + "ë²ķ": 101661, + "èĤ²": 101662, + "á»ijn": 101663, + "Ġbelir": 101664, + "íĨł": 101665, + "ÏĦή": 101666, + "ÑĭÑĪ": 101667, + "ãĤĥ": 101668, + "Ġабо": 101669, + "ský": 101670, + "à¥Īस": 101671, + "ĠпÑĢоÑģÑĤ": 101672, + "ektedir": 101673, + "až": 101674, + "à¹Īà¸Ń": 101675, + "ĠоÑģÑĤ": 101676, + "Ġbảo": 101677, + "Ġ大": 101678, + "Ñĭм": 101679, + "Ġmů": 101680, + "Æ°á»Ľng": 101681, + "åıĹ": 101682, + "ÙĪÙĩ": 101683, + "ĠÑĥп": 101684, + "ÙĥÙĨ": 101685, + "ĠÏĦÏīν": 101686, + "ëħ¸": 101687, + "Ġà¸Ĭ": 101688, + "ĠÑĤого": 101689, + "ĠШ": 101690, + "ìĿ´íĬ¸": 101691, + "à¹Ģà¸Ń": 101692, + "инÑĥ": 101693, + "ĺħ": 101694, + "uyá»ĥn": 101695, + "íĴĪ": 101696, + "ạnh": 101697, + "Ġãĥ½": 101698, + "ÑĤобÑĭ": 101699, + "Ġtạo": 101700, + "å·Ŀ": 101701, + "ĠÄijá»iji": 101702, + "ĠëıĦ": 101703, + "ä¹ħ": 101704, + "ĠتÙħ": 101705, + "аÑĢи": 101706, + "stvÃŃ": 101707, + "Ġcùng": 101708, + "íŀĪ": 101709, + "Ġtarih": 101710, + "ì¤ij": 101711, + "íĤ": 101712, + "ĠدÙĪ": 101713, + "ì¡": 101714, + "алÑĸ": 101715, + "à¸IJ": 101716, + "Ġcòn": 101717, + "иÑĤÑĮÑģÑı": 101718, + "Ġवह": 101719, + "ÅĻeb": 101720, + "鼻": 101721, + "Ġми": 101722, + "ovÄĽ": 101723, + "Ġdân": 101724, + "ÑĨÑĸÑı": 101725, + "ÛĮست": 101726, + "åѸ": 101727, + "Ġür": 101728, + "صÙĦ": 101729, + "ÑĢиÑĤ": 101730, + "าห": 101731, + "ãģ¦ãģĦãģŁ": 101732, + "θη": 101733, + "çĸ": 101734, + "ØŁ": 101735, + "iÅŁtir": 101736, + "ĠУкÑĢаÑĹни": 101737, + "ë°ĺ": 101738, + "à¥ĩà¤ĸ": 101739, + "Ġvá»ĭ": 101740, + "Î¥": 101741, + "ĠãĢĢĠãĢĢĠãĢĢ": 101742, + "Ġbằng": 101743, + "Ġtá»ķ": 101744, + "оли": 101745, + "à¹Ĩ": 101746, + "ezi": 101747, + "Ġни": 101748, + "ĠÎĽ": 101749, + "Ġrất": 101750, + "μÏĢ": 101751, + "жд": 101752, + "ारत": 101753, + "Ġuž": 101754, + "à¥ĩस": 101755, + "اÙĨد": 101756, + "Ġbý": 101757, + "à¥ĭल": 101758, + "dÄĽl": 101759, + "ìķĺ": 101760, + "Ġجد": 101761, + "å³": 101762, + "ืà¹ī": 101763, + "Ġbản": 101764, + "ạch": 101765, + "ĠÅŁey": 101766, + "ĠÙĩر": 101767, + "Ġjen": 101768, + "ĠвÑĸн": 101769, + "esinde": 101770, + "Ġहम": 101771, + "çłĶ": 101772, + "à¸ļà¸ļ": 101773, + "Ġchức": 101774, + "ึà¸ĩ": 101775, + "malar": 101776, + "ĠdeÄŁil": 101777, + "æĿ±": 101778, + "Ġtác": 101779, + "ĠkiÅŁ": 101780, + "Ġtá»±": 101781, + "à¥įध": 101782, + "à¸Ļà¸Ĺ": 101783, + "ÎŁÎ¥": 101784, + "ÑģÑĮкого": 101785, + "Ġध": 101786, + "ĠìĿĺ": 101787, + "ÙĨØ©": 101788, + "üs": 101789, + "è«": 101790, + "Ġtarafından": 101791, + "ħn": 101792, + "Ġkinh": 101793, + "Ïĥι": 101794, + "à¥Ģà¤ķ": 101795, + "íı¬": 101796, + "اÙħÙĦ": 101797, + "ĠViá»ĩt": 101798, + "ĠÏĦον": 101799, + "ĠتÙĨ": 101800, + "Ġà¤ħध": 101801, + "à¹Īาà¸Ļ": 101802, + "rı": 101803, + "à¤Ĥद": 101804, + "éª": 101805, + "Ġchúng": 101806, + "ги": 101807, + "ÏĦαν": 101808, + "Ġдоп": 101809, + "нÑĸй": 101810, + "оналÑĮ": 101811, + "Îĵ": 101812, + "Ġbüyük": 101813, + "á¼": 101814, + "à¥Ģर": 101815, + "ذÙĩ": 101816, + "ĠìķĦìĿ´": 101817, + "Ġdoanh": 101818, + "ĠÅĻÃŃ": 101819, + "ÑĨÑı": 101820, + "Ġtư": 101821, + "Ġसर": 101822, + "ĠmÃŃst": 101823, + "Ġë°ı": 101824, + "Ø´ÙĨ": 101825, + "Ñĸб": 101826, + "ĠãĢĢãĢĢ": 101827, + "çϽ": 101828, + "оÑģп": 101829, + "кÑĸв": 101830, + "Ġtế": 101831, + "ãģŃ": 101832, + "ĠtỼi": 101833, + "Ġìļ°": 101834, + "æľĥ": 101835, + "اÛĮد": 101836, + "æ§": 101837, + "ìłIJ": 101838, + "Ġdurum": 101839, + "à¹Ģà¸Ĭ": 101840, + "à¥Ģत": 101841, + "ĠÙĩÙĪ": 101842, + "à¥Ĥप": 101843, + "Ġgöre": 101844, + "ĠÑĢоб": 101845, + "Ġthiết": 101846, + "ajÃŃ": 101847, + "ĠاÛĮراÙĨ": 101848, + "âĢı": 101849, + "ÑģÑĮкоÑĹ": 101850, + "çħ": 101851, + "ĠìĦ¸": 101852, + "ừ": 101853, + "Ġà¸Ĥ": 101854, + "ům": 101855, + "ëŀĮ": 101856, + "ική": 101857, + "Ġмог": 101858, + "ÙĨÙĬ": 101859, + "ãģļ": 101860, + "ाब": 101861, + "æ¢": 101862, + "عÙĩ": 101863, + "ÑĶм": 101864, + "Ġά": 101865, + "οÏħÏĤ": 101866, + "زار": 101867, + "ê±´": 101868, + "ská": 101869, + "ĠاÙĬ": 101870, + "Ġilg": 101871, + "Ġsı": 101872, + "eleri": 101873, + "ĠÎĹ": 101874, + "uyor": 101875, + "ष": 101876, + "िम": 101877, + "ева": 101878, + "ä»Ģä¹Ī": 101879, + "ุà¹Ī": 101880, + "à¹īาà¸ĩ": 101881, + "Ġhiá»ĩu": 101882, + "Ġاع": 101883, + "Ġözel": 101884, + "νη": 101885, + "ëĦ¤": 101886, + "ĠtoÃłn": 101887, + "Ġmoh": 101888, + "ĠÑıкÑĸ": 101889, + "çĬ": 101890, + "maktadır": 101891, + "تاب": 101892, + "ĠÑģÑĥ": 101893, + "Ġyük": 101894, + "ĠΧ": 101895, + "зна": 101896, + "оÑħ": 101897, + "ưu": 101898, + "à¸Ĺร": 101899, + "ãħĭ": 101900, + "ĠkarÅŁÄ±": 101901, + "ÙħÛĮ": 101902, + "ĠÑĨÑĸ": 101903, + "ادÛĮ": 101904, + "à¥Ģ।": 101905, + "Ïģη": 101906, + "лов": 101907, + "夫": 101908, + "Ġphân": 101909, + "Ġпоп": 101910, + "ç·ļ": 101911, + "Ñıн": 101912, + "ุà¸ĵ": 101913, + "ÑģÑĤÑĥп": 101914, + "ίναι": 101915, + "ĠÑĢокÑĥ": 101916, + "larda": 101917, + "è»Ĭ": 101918, + "ÏģÏī": 101919, + "ÙĪØ§Ùĩ": 101920, + "èħ": 101921, + "à¥įरत": 101922, + "å·±": 101923, + "ĠÑĢÑĥ": 101924, + "Ġthá»ĭ": 101925, + "ĠÄijiá»ĩn": 101926, + "ìĸij": 101927, + "ného": 101928, + "สม": 101929, + "ê°ģ": 101930, + "acÃŃ": 101931, + "Ġгода": 101932, + "kaz": 101933, + "Ġböl": 101934, + "Ġgian": 101935, + "à¸Ľà¸£": 101936, + "ï¾ŀ": 101937, + "ัà¸ķ": 101938, + "Ġgerç": 101939, + "Ġاج": 101940, + "Ġή": 101941, + "ÙijÙİ": 101942, + "Ñģкого": 101943, + "ÑĢаÑħ": 101944, + "ĠÅł": 101945, + "Ġà¤Ľ": 101946, + "оÑģÑĤÑĸ": 101947, + "본": 101948, + "ÑģÑĮкий": 101949, + "Û±Û¹": 101950, + "Ñĥва": 101951, + "اÙĦÙħ": 101952, + "ĠÙħص": 101953, + "ëįĺ": 101954, + "bÃŃ": 101955, + "ĠÙĪØ¬": 101956, + "ÏĦÏĮ": 101957, + "ebilir": 101958, + "Ġtiếp": 101959, + "é¤": 101960, + "Ġä¸Ģ": 101961, + "ĠÑģÑĢед": 101962, + "ëĤ¨": 101963, + "εÏģι": 101964, + "اث": 101965, + "Ñģов": 101966, + "Ïĩε": 101967, + "Ġë¶Ħ": 101968, + "Ġtaké": 101969, + "Ġdüz": 101970, + "Ġíıī": 101971, + "Ġاص": 101972, + "ĠÏĥÏĦην": 101973, + "ë°Ķ": 101974, + "Ġhá»Ļi": 101975, + "رÙĩ": 101976, + "بÛĮ": 101977, + "ве": 101978, + "ĠاÙĦØ·": 101979, + "ĠÑĢез": 101980, + "بار": 101981, + "Ġgiải": 101982, + "ãģ«ãģª": 101983, + "oleÄį": 101984, + "à¤ł": 101985, + ";:": 101986, + "ä½ı": 101987, + "Ú©Ùĩ": 101988, + "ĠΦ": 101989, + "ĠÑĥÑĩ": 101990, + "âĹıâĹı": 101991, + "ูà¸ģ": 101992, + "à¥ĩव": 101993, + "Ïĥα": 101994, + "ĠاÙĨت": 101995, + "Ġвп": 101996, + "Ġquả": 101997, + "enin": 101998, + "ĠêµIJ": 101999, + "μά": 102000, + "کت": 102001, + "ÙĤÙĩ": 102002, + "ĠTürkiye": 102003, + "Ġthức": 102004, + "íĹĺ": 102005, + "iá»ĩm": 102006, + "Ġतà¤ķ": 102007, + "Ġéĩ": 102008, + "़ा": 102009, + "ĠØ£ÙĪ": 102010, + "ále": 102011, + "ç©¶": 102012, + "ĠÅŁekil": 102013, + "кого": 102014, + "ÑĪиÑħ": 102015, + "اÛĮØ´": 102016, + "تÙĨ": 102017, + "ней": 102018, + "à¸Ĺำ": 102019, + "ĠÑıв": 102020, + "رÙħ": 102021, + "Ġmáy": 102022, + "หม": 102023, + "ıyla": 102024, + "Ġcầu": 102025, + "Ġдоб": 102026, + "Ġìŀ¥": 102027, + "ový": 102028, + "ικÏĮ": 102029, + "Ġãħĩ": 102030, + "ĠÑĤеÑĢ": 102031, + "ĮĴ": 102032, + "سÙĬ": 102033, + "ĠoluÅŁ": 102034, + "Ġbyla": 102035, + "عÙĦ": 102036, + "ĠÙĥاÙĨ": 102037, + "боÑĢ": 102038, + "ì²Ń": 102039, + "ãĥı": 102040, + "ubl": 102041, + "Ġاخ": 102042, + "ÙĦÙĪØ¯": 102043, + "تÙĬ": 102044, + "ladı": 102045, + "ĠÃ¶ÄŁ": 102046, + "ruh": 102047, + "ç¿": 102048, + "Ġبعد": 102049, + "ÎĻÎij": 102050, + "idir": 102051, + "ãģ«ãģ¯": 102052, + "Ġsöy": 102053, + "Ġkhách": 102054, + "ÑĨе": 102055, + "ĠØ´ÙĪØ¯": 102056, + "ç¸": 102057, + "Ġëħ¸": 102058, + "úp": 102059, + "Ġneden": 102060, + "Ġhóa": 102061, + "Ġà¤īप": 102062, + "ÏĥειÏĤ": 102063, + "æĪ¿": 102064, + "Ġ³³": 102065, + "ĠìķĮ": 102066, + "à¥Ģ,": 102067, + "´ij": 102068, + "êu": 102069, + "ÑĢок": 102070, + "à¹Ģà¸Ī": 102071, + "Ġείναι": 102072, + "ĠبÙĦ": 102073, + "ĠÑģов": 102074, + "Ġönem": 102075, + "Ġà¸ĭ": 102076, + "ì§Ģë§Į": 102077, + "å®ĺ": 102078, + "격": 102079, + "ìĦĿ": 102080, + "Ġaž": 102081, + "Ġduy": 102082, + "ãģ¨ãģĦ": 102083, + "ØĽ": 102084, + "δο": 102085, + "θε": 102086, + "ÙĥاÙĨ": 102087, + "ढ": 102088, + "ाà¤ĵ": 102089, + "Ġdá»ĭch": 102090, + "á»Ļng": 102091, + "สำ": 102092, + "Äı": 102093, + "ĠÑĹÑħ": 102094, + "αλ": 102095, + "eÄį": 102096, + "ç²¾": 102097, + "Ġзв": 102098, + "èĩªå·±": 102099, + "ĠاÙĦÙĦÙĩ": 102100, + "ĠСÑĤ": 102101, + "ĠسÙĨÚ¯": 102102, + "Ġдом": 102103, + "гоÑĤов": 102104, + "повÑĸд": 102105, + "ĠBá»Ļ": 102106, + "à¥įयà¤ķ": 102107, + "طة": 102108, + "мов": 102109, + "à¸Ĺาà¸ĩ": 102110, + "ึà¸ģ": 102111, + "ĠÑĸз": 102112, + "à¥ĭà¤ľ": 102113, + "Ġgöster": 102114, + "Ġباشد": 102115, + "ileri": 102116, + "ĠÑģеб": 102117, + "Ñīо": 102118, + "Ġãħĩãħĩ": 102119, + "بت": 102120, + "Ñģе": 102121, + "à¥ĩà¤ľ": 102122, + "Ġlên": 102123, + "ĠتÙĪ": 102124, + "ÑĸÑģÑĤÑĮ": 102125, + "ï¾Ĩï¾Ĩ": 102126, + "Ġthưá»Ŀng": 102127, + "ĠolduÄŁu": 102128, + "vÄĽt": 102129, + "ìĨį": 102130, + "ãģĿãģĨ": 102131, + "ĠìĦ±": 102132, + "ë°ľ": 102133, + "Ġà¸ģาร": 102134, + "ĠØ´Ùĩر": 102135, + "sled": 102136, + "ảnh": 102137, + "æŀĹ": 102138, + "lacak": 102139, + "Ġmình": 102140, + "Ú©ÛĮ": 102141, + "Ġà¹ĥà¸Ļ": 102142, + "Ġdùng": 102143, + "ĠмаÑģ": 102144, + "ÑĦек": 102145, + "æ°Ķ": 102146, + "é§": 102147, + "ĠاØŃ": 102148, + "èµ°": 102149, + "ÎĻÎļ": 102150, + "à¥ĩ।": 102151, + "ÑģÑĮка": 102152, + "ĠÑĩаÑģÑĤ": 102153, + "larının": 102154, + "Ġê¹Ģ": 102155, + "층": 102156, + "ними": 102157, + "èªŀ": 102158, + "åĢĭ": 102159, + "ĠêµŃ": 102160, + "коÑĢ": 102161, + "maya": 102162, + "ิà¹Ĥà¸Ļ": 102163, + ".ศ": 102164, + "Ġhá»ĩ": 102165, + "ĠتÙĤ": 102166, + "γκ": 102167, + "Ġà¤Ĩपà¤ķ": 102168, + "ÑģÑĤоÑĢ": 102169, + "ĠÄijo": 102170, + "Ġchá»§": 102171, + "اÛĮت": 102172, + "ĠQuá»ijc": 102173, + "глÑı": 102174, + "ãĢĤãĢįĊĊ": 102175, + "ĠnÃło": 102176, + "à¸Ńล": 102177, + "æĬĬ": 102178, + "ÙĪØ±Øª": 102179, + "Ġbude": 102180, + "æĽ¸": 102181, + "elik": 102182, + "ĠجÙĩ": 102183, + "ĠبÙĪØ§Ø¨Ø©": 102184, + "èĬ±": 102185, + "دار": 102186, + "Ġbýt": 102187, + "Ñĩе": 102188, + "ãĤĵãģł": 102189, + "ĠÙħØ·": 102190, + "lere": 102191, + "ÎĹΣ": 102192, + "íĺķ": 102193, + "âĸį": 102194, + "ÄŁu": 102195, + "Ġвз": 102196, + "ÙĬز": 102197, + "ĠÐłÐ¾Ñģ": 102198, + "íĭ°": 102199, + "Ġداش": 102200, + "ì§ij": 102201, + "atı": 102202, + "mesi": 102203, + "ãĤīãĤĮ": 102204, + "ův": 102205, + "rát": 102206, + "оÑģоб": 102207, + "åIJĦ": 102208, + "uyá»ĩn": 102209, + "åģļ": 102210, + "üst": 102211, + "éĩİ": 102212, + "αÏĥ": 102213, + "Ġmặt": 102214, + "елов": 102215, + "åįļ": 102216, + "дж": 102217, + "Ġدارد": 102218, + "Ġfark": 102219, + "à¹īวย": 102220, + "они": 102221, + "Ġبخ": 102222, + "à¥ģत": 102223, + "ĠÄijây": 102224, + "αÏģα": 102225, + "Ġδια": 102226, + "Ġè¯": 102227, + "каÑħ": 102228, + "cház": 102229, + "zenÃŃ": 102230, + "ÑĢоп": 102231, + "à¥Ģम": 102232, + "íĨµ": 102233, + "dü": 102234, + "à¸łà¸²à¸ŀ": 102235, + "ĠíĬ": 102236, + "ÙĪØ§": 102237, + "Ġtá»ijt": 102238, + "ï¼ŁãĢįĊĊ": 102239, + "ĠæľĪ": 102240, + "Ġnhưng": 102241, + "Ġnež": 102242, + "à¥ĭड": 102243, + "ìĹIJê²Į": 102244, + "à¤Ĥड": 102245, + "¶Į": 102246, + "ĠмеÑģÑĤ": 102247, + "ाà¤ģ": 102248, + "ì¦Ŀ": 102249, + "ĠÄijang": 102250, + "à¸Ńà¸Ķ": 102251, + "íĽĦ": 102252, + "á»įi": 102253, + "ského": 102254, + "Ġдок": 102255, + "Ġتص": 102256, + "Ġphòng": 102257, + "Ġê°ķ": 102258, + "ĠtrÆ°á»Ľc": 102259, + "íijľ": 102260, + "ÙĶ": 102261, + "ĠphÃŃ": 102262, + "Ġchá»įn": 102263, + "ä¹IJ": 102264, + "ĠÅŁekilde": 102265, + "Ġíİ": 102266, + "éº": 102267, + "루": 102268, + "à¥Ī।Ċ": 102269, + "ÙĪØ±ÛĮ": 102270, + "ÑģÑĤÑĢа": 102271, + "ildi": 102272, + "ĠαÏħ": 102273, + "ваннÑı": 102274, + "ìļ¸": 102275, + ".âĢľĊĊ": 102276, + "ĠÑĤакже": 102277, + "ëĵ±": 102278, + "ека": 102279, + "æīį": 102280, + "ÙħØ©": 102281, + "Ġphương": 102282, + "马": 102283, + "ãĢĢĠãĢĢ": 102284, + "ových": 102285, + "ียà¸ĩ": 102286, + "ĠTru": 102287, + "еÑģп": 102288, + "stup": 102289, + "ÄĮ": 102290, + "ĠdalÅ¡ÃŃ": 102291, + "زÛĮ": 102292, + "Ġ매": 102293, + "ĠобÑĢаз": 102294, + "Ġaçık": 102295, + "ê°ķ": 102296, + "ÙģØ§Ø¯Ùĩ": 102297, + "گاÙĨ": 102298, + "à¹īà¸Ļ": 102299, + "ẩn": 102300, + "å·¥ä½ľ": 102301, + "Ġतर": 102302, + "ÙĬع": 102303, + "ĠãĢĬ": 102304, + ",âĢľ": 102305, + "Ġnev": 102306, + "ัà¸į": 102307, + "ģını": 102308, + "Ġjin": 102309, + "اخت": 102310, + "سر": 102311, + "ĠtÃłi": 102312, + "Ġkterá": 102313, + "ĠاÙĦÙĦ": 102314, + "à¤ħ": 102315, + "izmet": 102316, + "à¥ģम": 102317, + "าะ": 102318, + "Ġê·": 102319, + "lıģı": 102320, + "çı¾": 102321, + "liÄŁi": 102322, + "êµ°": 102323, + "alık": 102324, + "ĠدÙĪØ±": 102325, + "Ġìĭ¤": 102326, + "ĠзаÑģ": 102327, + "ÙĤÙĬ": 102328, + "Ġứng": 102329, + "ĠÙĥÙĩ": 102330, + "ÎŁÎ£": 102331, + "è¨Ń": 102332, + "çĮ": 102333, + "ãģĦãģŁ": 102334, + "íĺĦ": 102335, + "ĠÑĤе": 102336, + "еÑĢÑĸ": 102337, + "sız": 102338, + "Ġý": 102339, + "дов": 102340, + "Ġà¤ĩसà¤ķ": 102341, + "год": 102342, + "Ġbylo": 102343, + "าà¸Ħม": 102344, + "ением": 102345, + "Ш": 102346, + "æľ¯": 102347, + "Ġपहल": 102348, + "ĠaÅŁ": 102349, + "à¤¿à¤ľ": 102350, + "åĵ¡": 102351, + "ваÑĢ": 102352, + "à¹īำ": 102353, + "âĮĴ": 102354, + "ován": 102355, + "Ġgiúp": 102356, + "Ð¥": 102357, + "ĠÑģÑĥд": 102358, + "Ġà¤ķम": 102359, + "ạm": 102360, + "رس": 102361, + "Ġ人": 102362, + "ĠبÛĮ": 102363, + "Ġà¤īनà¤ķ": 102364, + "립": 102365, + "áºŃy": 102366, + "ĠváºŃt": 102367, + "лÑıеÑĤÑģÑı": 102368, + "Ġseç": 102369, + "Ġì½": 102370, + "ÑĢÑĥж": 102371, + "تص": 102372, + "|:": 102373, + "Ġëł": 102374, + "ими": 102375, + "ĠлÑİб": 102376, + "Ġà¸ľ": 102377, + "ï¼Įä½Ĩ": 102378, + "Ġнав": 102379, + "â̬": 102380, + "à¹Īาย": 102381, + "Ġرس": 102382, + "siniz": 102383, + "ë¨": 102384, + "ениÑİ": 102385, + "Ġล": 102386, + "اسÛĮ": 102387, + "à¥ľ": 102388, + "ĠÙ¾ÛĮØ´": 102389, + "ίδ": 102390, + "ĠÙ¾ÛĮ": 102391, + "еÑĢжав": 102392, + "à¤Ĩ": 102393, + "ĠdÃ¼ÅŁÃ¼n": 102394, + "å¿«": 102395, + "ÑĢеÑģ": 102396, + "åħ«": 102397, + "ÑĤÑĸ": 102398, + "à¤¿à¤Ł": 102399, + "ĠÑĤеÑħ": 102400, + "út": 102401, + "ÙĨÙĩ": 102402, + "ĠÙĨØ´": 102403, + "çĻº": 102404, + "Ġê°¤": 102405, + "лед": 102406, + "Ġëĵ¤": 102407, + "Ġbilg": 102408, + "ĠspoleÄį": 102409, + "ĠÄijÆ¡n": 102410, + "Ġà¤īत": 102411, + "Ġtrá»ĭ": 102412, + "ĠعÙħ": 102413, + "Ġ।": 102414, + "ĠúÄį": 102415, + "ãģ¸": 102416, + "วà¸ģ": 102417, + "ĠÑģлÑĥÑĩа": 102418, + "á»įng": 102419, + "åıĪ": 102420, + "иÑĤÑĥ": 102421, + "æľīéĻIJ": 102422, + "린": 102423, + "ëĭĺ": 102424, + "Ġhoạt": 102425, + "ĠìĿ´ëıĻ": 102426, + "знаÑĩ": 102427, + "ĠاستÙģØ§Ø¯Ùĩ": 102428, + "ĠпÑĢоÑĨеÑģ": 102429, + "anın": 102430, + "гÑĥ": 102431, + "ĠاÙĦØ«": 102432, + "æĹ¥æľ¬": 102433, + "ικά": 102434, + "ĠÑĹÑĹ": 102435, + "ì§ģ": 102436, + "inu": 102437, + "Ġساز": 102438, + "ãĤ¡": 102439, + "ï¾ī": 102440, + "ĠاÙĤ": 102441, + "Ġkế": 102442, + "ůsob": 102443, + "à¹ĩà¸ģ": 102444, + "åIJ§": 102445, + "æ¼Ķ": 102446, + "Ñīие": 102447, + "çĨ": 102448, + "ÑĮого": 102449, + "à¥ĭà¤Ł": 102450, + "اپ": 102451, + "室": 102452, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 102453, + "Ġtriá»ĥn": 102454, + "ĠtáºŃp": 102455, + "é£Ł": 102456, + "ë¹": 102457, + "ĠÑĩеÑĢез": 102458, + "ĠÑĨи": 102459, + "ÑģÑĥ": 102460, + "Ġнем": 102461, + "ĠаÑĢ": 102462, + "ĠÙĦا": 102463, + "Ġì§Ħ": 102464, + "çŁ³": 102465, + "ĠпÑĢоб": 102466, + "ĠìĽIJ": 102467, + "ÛĮÙĨÛĮ": 102468, + "ÑİÑĩи": 102469, + "âĢį": 102470, + "Û±Û³": 102471, + "ãĤ¬": 102472, + "çłĶç©¶": 102473, + "íĤ¤": 102474, + "Ġgerçek": 102475, + "ĠØŃس": 102476, + "íͼ": 102477, + "èĤ¡": 102478, + "ĠÏĦι": 102479, + "ĠvÅ¡ech": 102480, + "Ġvì": 102481, + "اÙĨÙĬ": 102482, + "ĠÙĩست": 102483, + "ĠëĤ¨": 102484, + "ÅĻej": 102485, + "еÑĢг": 102486, + "Ġsöz": 102487, + "ĠاÙĦÙħت": 102488, + "Ġchế": 102489, + "á»ĵi": 102490, + "åı¤": 102491, + "âĸįâĸį": 102492, + "á»ĵng": 102493, + "ãĥ¢": 102494, + "Ġди": 102495, + "ελ": 102496, + "Ġона": 102497, + "Ġнай": 102498, + "Ġ_{": 102499, + "пол": 102500, + "aliz": 102501, + "ĠtÄĥng": 102502, + "ĠdÃŃ": 102503, + "ép": 102504, + "ĠÙĦÙħ": 102505, + "Ġmož": 102506, + "ĠngoÃłi": 102507, + "èĹ": 102508, + "ĠÑĩем": 102509, + "ĠÄijá»ķ": 102510, + "еÑĤа": 102511, + "åı²": 102512, + "ĠÑģказ": 102513, + "ãĤ¿ãĥ¼": 102514, + "анÑĮ": 102515, + "Ġgöz": 102516, + "ë³Ħ": 102517, + "ãģĭãģ£ãģŁ": 102518, + "ĠëįĶ": 102519, + "ĠÙĨÙĤ": 102520, + "ĠÑĥÑĩа": 102521, + "Ġsahip": 102522, + "ĠÑģпе": 102523, + "ίοÏħ": 102524, + "ì½Ķ": 102525, + "ĠëĪ": 102526, + "mam": 102527, + "Ġroce": 102528, + "ĠÙĨاÙħ": 102529, + "еÑĢаÑĤÑĥ": 102530, + "ıp": 102531, + "ãģĦãģ¦": 102532, + "ĠíķĻ": 102533, + "Ġà¤ĩन": 102534, + "å©": 102535, + "Ġnhiên": 102536, + "atır": 102537, + "ÅĻenÃŃ": 102538, + "دة": 102539, + "ãĥªãĥ¼": 102540, + "ลà¸ĩ": 102541, + "ĠéĢ": 102542, + "Ġà¹Ģà¸Ľ": 102543, + "дÑĸ": 102544, + "ÎŃÏģ": 102545, + "ìĦ¤": 102546, + "гÑĢа": 102547, + "esine": 102548, + "Ġее": 102549, + "Ġiki": 102550, + "Ġتج": 102551, + "larına": 102552, + "dür": 102553, + "ĠاÙĦذ": 102554, + "Ùħت": 102555, + "Ġà¤IJ": 102556, + "िद": 102557, + "Ġë¹": 102558, + "ÑĦоÑĢма": 102559, + "Ġони": 102560, + "гоÑĢ": 102561, + "неÑģ": 102562, + "ìĺĢëĭ¤": 102563, + "ıldı": 102564, + "Ġçek": 102565, + "Ġдов": 102566, + "دÛĮ": 102567, + "ĠÄĮesk": 102568, + "ÑĪа": 102569, + "Ġات": 102570, + "å±ĭ": 102571, + "æĸ¼": 102572, + "Ġpráv": 102573, + "ému": 102574, + "å¸Ī": 102575, + "ãħĭãħĭ": 102576, + "Ġilgili": 102577, + "หว": 102578, + "à¤ĩ": 102579, + "ाष": 102580, + "ëŀij": 102581, + "asyon": 102582, + "ÑĨÑĮ": 102583, + "à¹ģà¸ķ": 102584, + "ợi": 102585, + "ĠвÑĭÑģ": 102586, + "ÑĸлÑĮки": 102587, + "ĠкоÑĤоÑĢÑĭе": 102588, + "ники": 102589, + "Ġاد": 102590, + "Ġživ": 102591, + "ĠαÏĢο": 102592, + "رض": 102593, + "اة": 102594, + "Ġkdyž": 102595, + "ữa": 102596, + "ĠëĮĢíķľ": 102597, + "Ġtôi": 102598, + "ÑĥÑĶ": 102599, + "زر": 102600, + "Ġå¥": 102601, + "ãĥĭãĥĭ": 102602, + "بة": 102603, + "ÏĦοÏĤ": 102604, + "ÑĨион": 102605, + "ĠÙħÙĬ": 102606, + "ĠÄĥn": 102607, + "à¥ĩà¤Ĺ": 102608, + "ĠÑĢег": 102609, + "ĠlỼn": 102610, + "ì¤Ģ": 102611, + "ìĭ¬": 102612, + "Ġbiết": 102613, + "aları": 102614, + "ÙģÙĬ": 102615, + "ä¸ĸçķĮ": 102616, + "ĠнеобÑħодим": 102617, + "à¸Ļว": 102618, + "νÏĦ": 102619, + "Ġảnh": 102620, + "íĸĪ": 102621, + "Ġवर": 102622, + "hled": 102623, + "ิà¸Ī": 102624, + "æŃ»": 102625, + "ĠاÙĦتÙĬ": 102626, + "ноÑģ": 102627, + "prav": 102628, + "ÑıÑĤи": 102629, + "Ñīа": 102630, + "ÙĪÙĨÙĩ": 102631, + "ĠaÄŁ": 102632, + "à¸ŀระ": 102633, + "Ġthá»ijng": 102634, + "ÑĦи": 102635, + "Ġголов": 102636, + "Ġkhoa": 102637, + "ĠëłĪ": 102638, + "ãģĴ": 102639, + "Ġgetir": 102640, + "شت": 102641, + "женнÑı": 102642, + "енÑĸ": 102643, + "Ġgiữ": 102644, + "lerinin": 102645, + "à¥Ģव": 102646, + "éģ¸": 102647, + "सर": 102648, + "ĠÑĩелов": 102649, + "à¥įà¤ľ": 102650, + "ĠбÑĥло": 102651, + "ĠاÙĨد": 102652, + "ัà¸Ļà¸Ĺ": 102653, + "让": 102654, + "Ġquyá»ģn": 102655, + "ĠØŃاÙĦ": 102656, + "ì²ĺ": 102657, + "ĠлÑİд": 102658, + "ÏģÏĩ": 102659, + "алÑĮно": 102660, + "ãĢĢãĥ½": 102661, + "ê¸ī": 102662, + "ãĤ±": 102663, + "ĠÙħرد": 102664, + "Ġông": 102665, + "Ġاش": 102666, + "大åѦ": 102667, + "ì¦Ī": 102668, + "æĪ¦": 102669, + "eyi": 102670, + "ĠÐIJн": 102671, + "िप": 102672, + "Ġtiêu": 102673, + "Ø´ÛĮ": 102674, + "ắn": 102675, + "éŃĶ": 102676, + "ãģ¨ãģĦãģĨ": 102677, + "ĠìłĢ": 102678, + "кÑĤи": 102679, + "ĠÙħØŃÙħد": 102680, + "ĠíĨµ": 102681, + "ุม": 102682, + "åį¡": 102683, + "оÑĢов": 102684, + "коÑİ": 102685, + "Ġlá»±c": 102686, + "å³¶": 102687, + "ĠرÙĪØ²": 102688, + "ÑħÑĸд": 102689, + "Ġhá»ĵ": 102690, + "Ġül": 102691, + "ĠØ´Ùħ": 102692, + "ÙĨس": 102693, + "بÙĪ": 102694, + "Ġthêm": 102695, + "ạc": 102696, + "åºľ": 102697, + "echn": 102698, + "ĠÎļα": 102699, + "èijĹ": 102700, + "çľ¼": 102701, + "áh": 102702, + "Ġι": 102703, + "ê¹Įì§Ģ": 102704, + "maz": 102705, + "λογ": 102706, + "Ġjsme": 102707, + "Ġá¼": 102708, + "ĠпÑĢави": 102709, + "клад": 102710, + "Ġthá»§": 102711, + "sah": 102712, + "ÄŁit": 102713, + "ĠÙģÛĮ": 102714, + "енно": 102715, + "à¥ģà¤Ľ": 102716, + "ãģ»": 102717, + "çϾ": 102718, + "иÑĤа": 102719, + "ĠбÑĭло": 102720, + "Ġvys": 102721, + "Ġì¶ľ": 102722, + "ắng": 102723, + "ĠÄijại": 102724, + "ĠÙħÙĪØ±Ø¯": 102725, + "ела": 102726, + "ÑĸÑĪ": 102727, + "леннÑı": 102728, + "æIJ": 102729, + "Ġнед": 102730, + "iyat": 102731, + "ì¼": 102732, + "ĠolduÄŁunu": 102733, + "داÙĨ": 102734, + "íĿ": 102735, + "ĠسÛĮ": 102736, + "ีà¸ģ": 102737, + "ÄĽst": 102738, + "ımı": 102739, + "ä¸īä¸ī": 102740, + "ãĤ½": 102741, + "ĠÑĤеп": 102742, + "ĠÑĢай": 102743, + "ाध": 102744, + "ĠìĤ¬ëŀĮ": 102745, + "ĠTrung": 102746, + "ï¼ıï¼ı": 102747, + "Ġtâm": 102748, + "Å¡enÃŃ": 102749, + "ãĥį": 102750, + "ĠÏĦοÏħÏĤ": 102751, + "ĠнÑĸ": 102752, + "вид": 102753, + "æ¿": 102754, + "Ġظ": 102755, + "ãĥ¯": 102756, + "ì¢ħ": 102757, + "ваÑĤи": 102758, + "Ġquá": 102759, + "ฤ": 102760, + "ĠÄijưá»Ŀng": 102761, + "à¥ģद": 102762, + "roj": 102763, + "ĠÑĥÑģ": 102764, + "é¦Ļ": 102765, + "ì½ĺ": 102766, + "ĠÙĪØª": 102767, + "มาà¸ģ": 102768, + "åĪĩ": 102769, + "Ġán": 102770, + "Ġмед": 102771, + "ìĹIJëĬĶ": 102772, + "Ġhlav": 102773, + "رت": 102774, + "à¹ĥà¸Ī": 102775, + "æ´²": 102776, + "ĠлÑĸ": 102777, + "æĪĺ": 102778, + "ÙĪÙĨد": 102779, + "è¶³": 102780, + "åĭĻ": 102781, + "çͳ": 102782, + "Ġì±": 102783, + "ĠìĿ´ëıĻíķ©ëĭĪëĭ¤": 102784, + "ÑīеÑģÑĤв": 102785, + "Ġë¶Ī": 102786, + "ÙĦÙĪ": 102787, + "üven": 102788, + "èĪĩ": 102789, + "ĠgiỼi": 102790, + "ĠÙĪÙĤ": 102791, + "Ġê°¤ë¡ľê·¸": 102792, + "ĠعاÙħ": 102793, + "ĺIJ": 102794, + ":::::": 102795, + "ĠÑĥд": 102796, + "-ÑĤо": 102797, + "ĠÑĦоÑĢ": 102798, + "ини": 102799, + "ãģĹãģĦ": 102800, + "Ġê°¤ë¡ľê·¸ë¡ľ": 102801, + "ãģ³": 102802, + "ãĥ©ãĤ¤": 102803, + "ená": 102804, + "Ġnez": 102805, + "Ġönemli": 102806, + "ĠниÑħ": 102807, + "à¤Ĥस": 102808, + "Ġà¤īसà¤ķ": 102809, + "à¥įरद": 102810, + "Ġnói": 102811, + "ÙĥÙĦ": 102812, + "ิว": 102813, + "κο": 102814, + "à¥ģà¤ĸ": 102815, + "öyle": 102816, + "άλ": 102817, + "óng": 102818, + "ĠداÙĨØ´": 102819, + "Ġзб": 102820, + "ì»": 102821, + "à¸ľà¸¥": 102822, + "ëĵ¤ìĿ´": 102823, + "Ġetk": 102824, + "رات": 102825, + "Ġεκ": 102826, + "ÑĤÑĢа": 102827, + "à¥įतर": 102828, + "à¤Ĥब": 102829, + "ĠмÑĸÑģ": 102830, + "æł¹": 102831, + "ãĥĻ": 102832, + "Ġtá»ī": 102833, + "à¹Ģà¸ĭ": 102834, + "ìĪł": 102835, + "ï¼Įä¸į": 102836, + "ìĺ¨": 102837, + "ĠmÄĽst": 102838, + "ģµ": 102839, + "azı": 102840, + "rada": 102841, + "ÏĢα": 102842, + "mé": 102843, + "ÙĨاÙħÙĩ": 102844, + "اÛĮÙĦ": 102845, + "μη": 102846, + "luk": 102847, + "ÙĥÙĬ": 102848, + "Ġï¼ī": 102849, + "ĠдеÑĤ": 102850, + "Ġiçinde": 102851, + "Ñıм": 102852, + "Ġdưá»": 102853, + "ĠпÑĢедÑģÑĤав": 102854, + "üre": 102855, + "åķĬ": 102856, + "ĠÑĤÑĢÑĥ": 102857, + "esini": 102858, + "Ġале": 102859, + "ãĥ³ãĥī": 102860, + "à¥ĥत": 102861, + "εÏħ": 102862, + "à¥ģà¤Ĩ": 102863, + "Ġhiç": 102864, + "çĶº": 102865, + "ĠÐĸ": 102866, + "çħ§": 102867, + "ká": 102868, + "Ġtrá»įng": 102869, + "Ġتش": 102870, + "ाश": 102871, + "ĠÙħØ«": 102872, + "etim": 102873, + "Ġthấy": 102874, + "Ġबह": 102875, + "عت": 102876, + "ึà¹ī": 102877, + "Ġsev": 102878, + "ÑģÑĤа": 102879, + "Ġcứ": 102880, + "Ġtiá»ģn": 102881, + "à¥Ģà¤ľ": 102882, + "Ñıг": 102883, + "ĠоÑĢгани": 102884, + "ĠбÑĭл": 102885, + "tür": 102886, + "ĠبازÛĮ": 102887, + "Ġìŀ¬": 102888, + "वर": 102889, + "æľīéĻIJåħ¬åı¸": 102890, + "kup": 102891, + "Ġiyi": 102892, + "íķĺê²Į": 102893, + "ãĢĢl": 102894, + "ãĤ·ãĥ§": 102895, + "ارة": 102896, + "สร": 102897, + "ĠtÃŃch": 102898, + "ĠкаÑĢ": 102899, + "иб": 102900, + "ĠвÑĸдповÑĸд": 102901, + "Ġpodle": 102902, + "à¥įरà¤ķ": 102903, + "iyon": 102904, + "коном": 102905, + "ĠμÎŃ": 102906, + "ĠпÑĢоиз": 102907, + "ĠâĢı": 102908, + "mektedir": 102909, + "ΩÎĿ": 102910, + "Ġbáo": 102911, + "à¸Īำ": 102912, + "ëįĶ": 102913, + "ë¸Į": 102914, + "Ġsợ": 102915, + "ÛĮرÛĮ": 102916, + "онÑĥ": 102917, + "ındaki": 102918, + "алÑĮного": 102919, + "μβ": 102920, + "лиз": 102921, + "Ġjejich": 102922, + "æĸ½": 102923, + "便": 102924, + "leÅŁtir": 102925, + "ĠÙĪØ£": 102926, + "Ġसब": 102927, + "lerde": 102928, + "ĠÚĨÙĩ": 102929, + "ÏĦÎŃ": 102930, + "Ġgì": 102931, + "ĠÃļ": 102932, + "ĠÑĢаÑģп": 102933, + "Ġtüm": 102934, + "à¹Ģà¸ĩ": 102935, + "èIJ½": 102936, + "ìĨ¡": 102937, + "à¹Ħà¸Ĺย": 102938, + "mÄ±ÅŁtır": 102939, + "ĠÙĤرار": 102940, + "Ġà¸Ħาส": 102941, + "Ġkıs": 102942, + "ованиÑı": 102943, + "ãĤĤãģ®": 102944, + "داÙħ": 102945, + "ìľ¡": 102946, + "oloj": 102947, + "ĠпоÑģле": 102948, + "ĠТак": 102949, + "Ġболее": 102950, + "ĠÄijá»ķi": 102951, + "lak": 102952, + "íħĮ": 102953, + "Ġayn": 102954, + "ÑıÑģ": 102955, + "Ġпог": 102956, + "Ġarasında": 102957, + "ά": 102958, + "à¥Ĥल": 102959, + "Ġανα": 102960, + "Ġquyết": 102961, + "Ġthuá»Ļc": 102962, + "Ġdün": 102963, + "ĠpÅĻes": 102964, + "ÑĦÑĸ": 102965, + "Ġå¸": 102966, + "اÙĦÙĬ": 102967, + "ĠповеÑĢ": 102968, + "Ñĩина": 102969, + "sko": 102970, + "çµIJ": 102971, + "Ø¡": 102972, + "ĠгÑĢа": 102973, + "оÑĤи": 102974, + "Ġquá»ijc": 102975, + "ÑĨÑĸв": 102976, + "lendir": 102977, + "вÑĸд": 102978, + "ĠжиÑĤ": 102979, + "üyor": 102980, + "ï¼Įä»ĸ": 102981, + "larında": 102982, + "Ġuyg": 102983, + "ĠtrÃŃ": 102984, + "ĠØ´ÙĨ": 102985, + "ابÙĦ": 102986, + "æ·±": 102987, + "Âłp": 102988, + "ÑģкаÑı": 102989, + "оÑĤа": 102990, + "ÙĪØ·": 102991, + "Ġاط": 102992, + "ä¾Ĩ": 102993, + "ĠзаÑĤ": 102994, + "Ġиме": 102995, + "à¹Ģà¸Ĺศ": 102996, + "ëĭ´": 102997, + "nÄĽnÃŃ": 102998, + "ÑĥлÑı": 102999, + "-п": 103000, + "åĺ": 103001, + "Ġвип": 103002, + "аÑĢакÑĤ": 103003, + "à¹Ģà¸ļ": 103004, + "ç¦ı": 103005, + "ÏģÏİ": 103006, + "سÙĩ": 103007, + "à¥Įर": 103008, + "ĠdiÄŁer": 103009, + "à¹Ĥà¸Ķย": 103010, + "ĠÑģпоÑģоб": 103011, + "åį·": 103012, + "èĸ": 103013, + "анÑĤ": 103014, + "ÑİÑĤÑĮÑģÑı": 103015, + "ĠÑįÑĤом": 103016, + "Ġï½Ģ": 103017, + "สาม": 103018, + "ìm": 103019, + "ĠÑĪк": 103020, + "Ġà¸Ľà¸£à¸°": 103021, + "़à¥Ģ": 103022, + "ekl": 103023, + "muÅŁ": 103024, + "ĠÑĤакож": 103025, + "ÙĪØ³Ø·": 103026, + "ĠÄįi": 103027, + "ีà¸Ļ": 103028, + "ÛĮÙĨÙĩ": 103029, + "ÄĽk": 103030, + "å½¼": 103031, + "lerine": 103032, + "ĠÄijất": 103033, + "à¥ģà¤ı": 103034, + "олоÑģ": 103035, + "Ġå°ı": 103036, + "زÙĬØ©": 103037, + "Ġвла": 103038, + "à¥Ģल": 103039, + "Ġetti": 103040, + "ĠÑģоÑģÑĤав": 103041, + "ÙĦاÙĦ": 103042, + "Ġçİ": 103043, + "ĠpÅĻÃŃpad": 103044, + "룰": 103045, + "ุà¸ģ": 103046, + "ĠÑĩи": 103047, + "åħį": 103048, + "nÄĽjÅ¡ÃŃ": 103049, + "ิล": 103050, + "åįĢ": 103051, + "ských": 103052, + "าศ": 103053, + "åIJĹ": 103054, + "ĠíĺĦ": 103055, + "Ġalın": 103056, + "å§Ķ": 103057, + "à¸ŀร": 103058, + "ažd": 103059, + "ĠбÑĸлÑĮ": 103060, + "à¹Īวà¸Ļ": 103061, + "oog": 103062, + "acı": 103063, + "lıģ": 103064, + "Ġkhu": 103065, + "Ġhizmet": 103066, + "ĠéĽ": 103067, + "ĠÎĺ": 103068, + "ĠdeÄŁer": 103069, + "åħŃ": 103070, + "ĠدÙĩ": 103071, + "ĠnÄĽk": 103072, + "à¸Ħà¸Ļ": 103073, + "еÑĤÑĮ": 103074, + "باÙĨ": 103075, + "ÏĦική": 103076, + "ĠÄijá»ĭa": 103077, + "ĠCông": 103078, + "íĮIJ": 103079, + "Ġкогда": 103080, + "ĠÚ©ÙĨد": 103081, + "ãģ§ãģį": 103082, + "ĠÏĢεÏģι": 103083, + "lardan": 103084, + "Ġзем": 103085, + "تÙĪØ§ÙĨ": 103086, + "è³ĩ": 103087, + "likle": 103088, + "Ġtụ": 103089, + "Ġdẫn": 103090, + "Ġnay": 103091, + "ĠÑģÑĤоÑĢ": 103092, + "ĠØ´Ùħا": 103093, + "ثر": 103094, + "Ġdedi": 103095, + "кое": 103096, + "ëijIJ": 103097, + "ÑĨев": 103098, + "جÙĩ": 103099, + "Ġmůže": 103100, + "à¥ģप": 103101, + "à¥įरम": 103102, + "ĠtaÅŁ": 103103, + "оÑĢÑĤ": 103104, + "γÏģα": 103105, + "çϼ": 103106, + "าà¸ļ": 103107, + "iá»ħn": 103108, + "ĠÙħست": 103109, + "лекÑģ": 103110, + "Ġprav": 103111, + "ĠдоÑģ": 103112, + "ĠdÄ±ÅŁ": 103113, + "Ġzem": 103114, + "Ġgiao": 103115, + "Ġvlast": 103116, + "ĠÑįÑĤого": 103117, + "ï½°": 103118, + "วà¸ĩ": 103119, + "ÑĢой": 103120, + "Ġbirlik": 103121, + "ený": 103122, + "Ġëĭ¨": 103123, + "овани": 103124, + "é£İ": 103125, + "íıī": 103126, + "Ġzah": 103127, + "ба": 103128, + "åĬ©": 103129, + "é̲": 103130, + "ê¶Į": 103131, + "Ġdiye": 103132, + "à¤Ĥà¤ķ": 103133, + "Ġchuyá»ĥn": 103134, + "ĠìĹŃ": 103135, + "ĠÑĤÑĢи": 103136, + "Ġönce": 103137, + "ï¼Įè¿Ļ": 103138, + "oại": 103139, + "леÑĤ": 103140, + "ĠÏĥÏħν": 103141, + "lád": 103142, + "çe": 103143, + "tü": 103144, + "ĠÄįást": 103145, + "Ġεν": 103146, + "Ġbiá»ĩt": 103147, + "Ġé«": 103148, + "à¥ĭà¤ķ": 103149, + "ÙĦات": 103150, + "باÙĦ": 103151, + "ecies": 103152, + "Ġëĭ¹": 103153, + "à¸Ĭà¸Ļ": 103154, + "ÏĦαÏĤ": 103155, + "à¥įण": 103156, + "ujÃŃcÃŃ": 103157, + "Äįet": 103158, + "Ġпоб": 103159, + "ÙĪØ§Ø±": 103160, + "iyas": 103161, + "Ġdruh": 103162, + "دد": 103163, + "ÏĮν": 103164, + "ÑĢен": 103165, + "ารà¸ĸ": 103166, + "ä½İ": 103167, + "ìķ½": 103168, + "ÑĢоз": 103169, + "ëĬĶëį°": 103170, + "ãĤĵãģª": 103171, + "ÄįenÃŃ": 103172, + "************": 103173, + "ĠΡ": 103174, + "ĠÑĤомÑĥ": 103175, + "รà¸ģ": 103176, + "à¥ģस": 103177, + "ä¹Ŀ": 103178, + "å°±æĺ¯": 103179, + "£i": 103180, + "éĺ²": 103181, + "Ùĥر": 103182, + "ĠÑįÑĤи": 103183, + "ĠÚ©Ø´ÙĪØ±": 103184, + "Ġê°IJ": 103185, + "Ġад": 103186, + "Ġداد": 103187, + "éģİ": 103188, + "Ù«": 103189, + "ĠláºŃp": 103190, + "ĠاÙĦÙĩ": 103191, + "æľĽ": 103192, + "ĠتÙĩ": 103193, + "ì§Ī": 103194, + "ãģ§ãģĤãĤĭ": 103195, + "Ġмеж": 103196, + "ĠÑĢезÑĥлÑĮÑĤ": 103197, + "çį": 103198, + "емÑĥ": 103199, + "ĠتÙĪØ§ÙĨ": 103200, + "ĠراÙĩ": 103201, + "ãĥ¼ãĥł": 103202, + "åĦ¿": 103203, + "å±ŀ": 103204, + "бÑĭ": 103205, + "á¿": 103206, + "à¸Ħล": 103207, + "à¥ĭà¤Ī": 103208, + "ütün": 103209, + "à¤Ĺर": 103210, + "ìķĺëĭ¤": 103211, + "âΧ": 103212, + "Ġì°¨": 103213, + "çµĦ": 103214, + "μαÏĦα": 103215, + "ุà¸Ļ": 103216, + "ĠÑĤом": 103217, + "еÑĢв": 103218, + "ÎijΣ": 103219, + "ĠiÅŁlem": 103220, + "عÙħ": 103221, + "ëĥ": 103222, + "ãĥĦ": 103223, + "اÙģØª": 103224, + "åĬŀ": 103225, + "Ġnes": 103226, + "avaÅŁ": 103227, + "ĠÙĨÛĮز": 103228, + "强": 103229, + "ĠéĻ": 103230, + "ÑĸннÑı": 103231, + "æ²³": 103232, + "áÅĻ": 103233, + "æĿIJ": 103234, + "ĠØ£ÙĬ": 103235, + "Ġì¹´": 103236, + "ĠnenÃŃ": 103237, + "ĠÙĪÙħ": 103238, + "ĠÚ©Ùħ": 103239, + "iếu": 103240, + "Ġæ°": 103241, + "åĮ»": 103242, + "Ġzor": 103243, + "ίÏĥ": 103244, + "िध": 103245, + "Ġпоказ": 103246, + "हर": 103247, + "Ġiçer": 103248, + "ØŃØ©": 103249, + "िà¤ĸ": 103250, + "ада": 103251, + "ترÛĮÙĨ": 103252, + "Ġbao": 103253, + "Ġxã": 103254, + "à¹Ģà¸Ħร": 103255, + "ĠnghÄ©": 103256, + "à¹ģà¸ļà¸ļ": 103257, + "ĠdoÄŁru": 103258, + "ÑĸÑĤи": 103259, + "ĠبÙĬÙĨ": 103260, + "ĠлеÑĤ": 103261, + "اغ": 103262, + "ÛĮÚ©ÛĮ": 103263, + "ráv": 103264, + "à¥įâĢį": 103265, + "âĢĻnin": 103266, + "Ġย": 103267, + "åįĬ": 103268, + "Ġколи": 103269, + "Ġtrợ": 103270, + "éĿĴ": 103271, + "ëŀĢ": 103272, + "Ġë¨": 103273, + "ĠÙĪØ±": 103274, + "ï¾Ĭ": 103275, + "è§Ĥ": 103276, + "Ġпи": 103277, + "нÑĥв": 103278, + "ilmesi": 103279, + "ستÙĩ": 103280, + "ĠдеÑĢжав": 103281, + "å®ĥ": 103282, + "åĪ¥": 103283, + "ëħĢ": 103284, + "лÑģÑı": 103285, + "à¤Ĥध": 103286, + "ĠÑĤи": 103287, + "ĠpÅĻip": 103288, + "пи": 103289, + "á»ĵn": 103290, + "оваÑĤÑĮ": 103291, + "ìĿ´ëĿ¼": 103292, + "æľĿ": 103293, + "ĠëĺIJ": 103294, + "ĠÎŃνα": 103295, + "ãģ¾ãģ§": 103296, + "جاÙħ": 103297, + "ĠëĬ": 103298, + "нÑĸв": 103299, + "ÏĢοÏħ": 103300, + "ĠزÙħاÙĨ": 103301, + "æĽ²": 103302, + "ĠÙħÙĩ": 103303, + "볨": 103304, + "ä¸ĥ": 103305, + "ãģ¨ãģĹãģ¦": 103306, + "labilir": 103307, + "оже": 103308, + "å¤ľ": 103309, + "ĠнÑĥжно": 103310, + "彩": 103311, + "çα": 103312, + "ĠhoÃłn": 103313, + "ünü": 103314, + "ĠëĦ¤": 103315, + "ĠجÙĨ": 103316, + "ĠnÄĽj": 103317, + "кими": 103318, + "Ġaynı": 103319, + "ĠÙĥÙĦ": 103320, + "Ġnhau": 103321, + "ẳ": 103322, + "ÙĬات": 103323, + "Ġmezi": 103324, + "ĠÑĢек": 103325, + "Ġtür": 103326, + "ĠговоÑĢ": 103327, + "Ġfazla": 103328, + "åĩĨ": 103329, + "ÑĪий": 103330, + "ÐŁÑĢи": 103331, + "ÑĢоÑģÑĤ": 103332, + "ĠоÑĢган": 103333, + "ným": 103334, + "ĠÑĢод": 103335, + "ĠÙĪÛĮ": 103336, + "ický": 103337, + "림": 103338, + "ï½²": 103339, + "æĢİ": 103340, + "ĠÙĩذا": 103341, + "ĠÑĩаÑģÑĤи": 103342, + "ÃŃr": 103343, + "á»ĩnh": 103344, + "ĠíĹ": 103345, + "ê»": 103346, + "luž": 103347, + "ÃŃl": 103348, + "cÃŃch": 103349, + "å®Ł": 103350, + "ãģłãģ£ãģŁ": 103351, + "ÙĬرة": 103352, + "ĠvÄĥn": 103353, + "港": 103354, + "ĠÏĦιÏĤ": 103355, + "ارت": 103356, + "Ġvấn": 103357, + "âĶģâĶģâĶģâĶģ": 103358, + "対": 103359, + "ÏģÎŃ": 103360, + "ĠгодÑĥ": 103361, + "Ġسب": 103362, + "ارات": 103363, + "елей": 103364, + "ĠзаÑħ": 103365, + "Ġваж": 103366, + "Ġtá»īnh": 103367, + "ابع": 103368, + "Ġà¤ľà¤¬": 103369, + "Ġà¤IJस": 103370, + "ĠдÑĥ": 103371, + "Ġé«ĺ": 103372, + "ê²ł": 103373, + "нее": 103374, + "ï½Į": 103375, + "Ġмал": 103376, + "è¾¹": 103377, + "ãģłãģij": 103378, + "à¹īร": 103379, + "ÙĤØ·": 103380, + "Ġbên": 103381, + "Ġseb": 103382, + "ĠØ®ÙĪØ§Ùĩ": 103383, + "siz": 103384, + "Ġolur": 103385, + "ĠëͰ": 103386, + "Ġì¢ĭ": 103387, + "ĠsvÄĽt": 103388, + "ická": 103389, + "ỹ": 103390, + "Ġquản": 103391, + "ĠиÑģ": 103392, + "ĠzaÄį": 103393, + "ืà¸Ńà¸Ļ": 103394, + "ÑĶÑİ": 103395, + "िष": 103396, + "çĬ¶": 103397, + "Ïĥμ": 103398, + "ัส": 103399, + "óc": 103400, + "ĠбеÑĢ": 103401, + "ĠíĿ": 103402, + ";:;:": 103403, + "Ġپس": 103404, + "ĠëijIJ": 103405, + "ниÑĩ": 103406, + "ĠоÑĩенÑĮ": 103407, + "ĠìķĦìĿ´ì½ĺ": 103408, + "Ġθα": 103409, + "ĠвÑģÑĤ": 103410, + "ادة": 103411, + "Ġdevam": 103412, + "ืà¸Ńà¸ĩ": 103413, + "ĠлÑİди": 103414, + "ìĺĪ": 103415, + "á»±a": 103416, + "ÑıÑħ": 103417, + "âĢĮاÛĮ": 103418, + "ĠسÙĪ": 103419, + "å°¼": 103420, + "Ġthứ": 103421, + "meye": 103422, + "Ġèµ": 103423, + "èī¯": 103424, + "ĠdeÄŁiÅŁ": 103425, + "ÑĪÑĸ": 103426, + "Ġtrợ": 103427, + "ĠâĢİ#": 103428, + "çĹħ": 103429, + "ìĽĮ": 103430, + "Ġkde": 103431, + "Χ": 103432, + "æ¤": 103433, + "ĠÑħаÑĢакÑĤ": 103434, + "æĩ": 103435, + "Ġbiến": 103436, + "ÙĤع": 103437, + "åŁŁ": 103438, + "Ġнеп": 103439, + "Ġdů": 103440, + "ĠпиÑĤ": 103441, + "ĠÑĤÑĢеб": 103442, + "ازÛĮ": 103443, + "Ġطر": 103444, + "ĠÙħÙĦ": 103445, + "Ġtham": 103446, + "ĠÙĪØ¬ÙĪØ¯": 103447, + "Ġsvé": 103448, + "é§ħ": 103449, + "اÛĮÙĨ": 103450, + "Ġtiên": 103451, + "stru": 103452, + "ĠváºŃy": 103453, + "üne": 103454, + "Ġà¹Ģม": 103455, + "Ġrằng": 103456, + "аÑĤÑĥ": 103457, + "äºij": 103458, + "ниÑĤ": 103459, + "ä¼Ĭ": 103460, + "ÙĪØµ": 103461, + "ĠéĿ": 103462, + "ĠпÑĢоблем": 103463, + "deki": 103464, + "**************": 103465, + "òa": 103466, + "ĠÄijá»ģu": 103467, + "ãĤĮãģŁ": 103468, + "ارس": 103469, + "ãģªãģı": 103470, + "اÙĤع": 103471, + "è»į": 103472, + "ÙĥÙħ": 103473, + "Äįas": 103474, + "Ġkỳ": 103475, + "Ø´Ùħ": 103476, + "à¥ĩड": 103477, + "éĺ¿": 103478, + "ĠjejÃŃ": 103479, + "ĠæĻ": 103480, + "ĠÄ°ÅŁ": 103481, + "ardım": 103482, + "Ġसमय": 103483, + "ĠÐĿо": 103484, + "ilerin": 103485, + "Ġعبد": 103486, + "nÃŃk": 103487, + "ĠØ´Ú©ÙĨ": 103488, + "ิà¸Ĺย": 103489, + "á»ħ": 103490, + "ÑĢез": 103491, + "Ġchứng": 103492, + "Ġ:.": 103493, + "Ġपत": 103494, + "Ġživot": 103495, + "å¢ĥ": 103496, + "«a": 103497, + "Ġtrung": 103498, + "никÑĸв": 103499, + "ĠاÙĦÙħÙĨ": 103500, + "ĠÑĢаÑģÑģ": 103501, + "Ġжив": 103502, + "Ġзакон": 103503, + "Ġ목": 103504, + "Ġzáv": 103505, + "Ġhakk": 103506, + "令": 103507, + "ĠÑıкий": 103508, + "ĠبÙĬ": 103509, + "λÎŃ": 103510, + "ocuk": 103511, + "ĠÑİ": 103512, + "à¸ģว": 103513, + "ĠاÙĨÚ¯": 103514, + "à¥ģà¤Ĥ": 103515, + "Ġnám": 103516, + "á»ķng": 103517, + "Ġжел": 103518, + "ĠÄijặc": 103519, + "Äįit": 103520, + "Ġê±´": 103521, + "ĠبÛĮØ´": 103522, + "кÑĢаÑĹн": 103523, + "ĠÙĪÙĩ": 103524, + "неннÑı": 103525, + "Ġà¹Ģà¸ŀ": 103526, + "омен": 103527, + "Ġlần": 103528, + "ĠعÙħÙĦ": 103529, + "Ġîģµ": 103530, + "Äŀ": 103531, + "ÑĸÑģлÑı": 103532, + "ưng": 103533, + "ाफ": 103534, + "à¸Ĺà¸ĺ": 103535, + "ден": 103536, + "ĠÑīоб": 103537, + "Ñĩив": 103538, + "ılır": 103539, + "اعات": 103540, + "jÃŃcÃŃ": 103541, + "벨": 103542, + "ÚĨÙĩ": 103543, + "ارج": 103544, + "ĠپرÙĪ": 103545, + "Ġодин": 103546, + "лин": 103547, + "бÑĥ": 103548, + "Ġसरà¤ķ": 103549, + "åĢĻ": 103550, + "ë¶ĢíĦ°": 103551, + "à¥Īà¤Ĥ,": 103552, + "å´": 103553, + "à¹Ĥล": 103554, + "ĠvÅ¡ak": 103555, + "ĠопÑĢед": 103556, + "ì±": 103557, + "æ½": 103558, + "Ġdá»±ng": 103559, + "práv": 103560, + "ิส": 103561, + "Ġnhiá»ĩm": 103562, + "ĠiliÅŁ": 103563, + "ĠеÑīе": 103564, + "ĠjeÅ¡tÄĽ": 103565, + "ĠÑĢаÑģÑĤ": 103566, + "ฮ": 103567, + "à¤Ĥà¤Ł": 103568, + "âĢĮÚ©": 103569, + "ĠبÛĮÙĨ": 103570, + "ovou": 103571, + "æĻ®": 103572, + "ίεÏĤ": 103573, + "оÑĢоÑĪ": 103574, + "Ġolmak": 103575, + "Ġstát": 103576, + "diÄŁi": 103577, + "Ġtình": 103578, + "ĠdÄĽ": 103579, + "ĠگرÙģ": 103580, + "Ïĥο": 103581, + "ĠÑĥÑĤ": 103582, + "íķĻêµIJ": 103583, + "ัà¸IJ": 103584, + "าà¸Ń": 103585, + "ĠÄijặt": 103586, + "ĠмогÑĥÑĤ": 103587, + "ë°°": 103588, + "tik": 103589, + "ª½": 103590, + "liÄŁ": 103591, + "ÏĢε": 103592, + "ĠèĢ": 103593, + "kü": 103594, + "adece": 103595, + "κÏĮ": 103596, + "ĠдÑĸ": 103597, + "ầm": 103598, + "çĦ¡ãģĹ": 103599, + "Û²Û°Û±": 103600, + "èµĽ": 103601, + "оÑģÑĥд": 103602, + "ĠìķĪëĤ´": 103603, + "ĠÐĶж": 103604, + "座": 103605, + "ických": 103606, + "Ġìłģ": 103607, + "à¥ĩ,": 103608, + "ového": 103609, + "Ġvẫn": 103610, + "Ġbirlikte": 103611, + "Ġरà¤ĸ": 103612, + "ĠÙĨÙĩ": 103613, + "ÙĤر": 103614, + "पर": 103615, + "etÃŃ": 103616, + "ĠÑĤÑĭ": 103617, + "ĢìĿ´": 103618, + "Ġà¤ħल": 103619, + "Ġможе": 103620, + "ãĤ´": 103621, + "Ġstran": 103622, + "طر": 103623, + "è¿Ļ个": 103624, + "Ġبع": 103625, + "åĨĽ": 103626, + "ektir": 103627, + "ĠhÆ°á»Ľng": 103628, + "ÙĨاÙĨ": 103629, + "Ġà¤ij": 103630, + "ÏĮÏĦη": 103631, + "оÑģк": 103632, + "åįĥ": 103633, + "asına": 103634, + "ĠØ´Ùĩ": 103635, + "ĠдеÑĢ": 103636, + "ĠÙħخت": 103637, + "ĠØŃÙĤ": 103638, + "ãĥ¾": 103639, + "ساÙĨ": 103640, + "Ġcung": 103641, + "коÑĢиÑģÑĤ": 103642, + "ÏĦικά": 103643, + "Ġвона": 103644, + "با": 103645, + "ãģķãĤĮãģŁ": 103646, + "nout": 103647, + "Ġı": 103648, + "è§ī": 103649, + "ĠÃ¶ÄŁren": 103650, + "Ġì½Ķ": 103651, + "带": 103652, + "Ñģлов": 103653, + "ĠεÏĢι": 103654, + "ê°IJ": 103655, + "ĠÙħرب": 103656, + "ĠÙģÛĮÙĦÙħ": 103657, + "ĠкÑĢов": 103658, + "Ġëį°": 103659, + "ाण": 103660, + "Ġelekt": 103661, + "ĠнаÑĢод": 103662, + "ÛĮدÙĩ": 103663, + "ç´Ħ": 103664, + "ĠпÑĢоÑĦ": 103665, + "ÏģοÏĤ": 103666, + "Ġãħ": 103667, + "ä¸įæĺ¯": 103668, + "Ġà¤ľà¤¨": 103669, + "ัล": 103670, + "ĠصÙĪØ±Øª": 103671, + "ãĥľ": 103672, + "Ġà¤Ĺà¤Ī": 103673, + "ÄŁitim": 103674, + "ÑģÑĮкиÑħ": 103675, + "Ġлег": 103676, + "ĠتÙĪÙĦ": 103677, + "Ġìļ´": 103678, + "عر": 103679, + "ĠmÃłu": 103680, + "гов": 103681, + "æ³¢": 103682, + "indeki": 103683, + "ìłģìĿ¸": 103684, + "ấm": 103685, + "ĠíĻķ": 103686, + "ĠباÛĮد": 103687, + "à¹Įà¸Ĺ": 103688, + "Ġkendi": 103689, + "ีว": 103690, + "ิà¸ģาร": 103691, + "ĠکردÙĩ": 103692, + "å·´": 103693, + "à¤ģ": 103694, + "ราà¸Ĭ": 103695, + "à¥įश": 103696, + "ĠÐĶлÑı": 103697, + "å¥ĩ": 103698, + "ĠÑĥÑģÑĤанов": 103699, + "йÑĤе": 103700, + "ãĤĩ": 103701, + "άÏģ": 103702, + "ĠЮ": 103703, + "ĠluáºŃt": 103704, + "ãĢī": 103705, + "è´¨": 103706, + "دا": 103707, + "Ġdüzen": 103708, + "สà¸Ļ": 103709, + "ÑĢон": 103710, + "dıģı": 103711, + "âĢĻda": 103712, + "Ġfarklı": 103713, + "Ñħов": 103714, + "lán": 103715, + "ÑĩаÑģ": 103716, + "Ñĩин": 103717, + "Ġì°¸": 103718, + "ì´Ī": 103719, + "ÑĨип": 103720, + "ç¹": 103721, + "éĸĢ": 103722, + "жа": 103723, + "ÑĢован": 103724, + "à¸ĵะ": 103725, + "ÙĦÙĬزÙĬØ©": 103726, + "Ïĩει": 103727, + "à¥Ī.": 103728, + "кÑģп": 103729, + "اÙĪØ±": 103730, + "Ġnguyên": 103731, + "ãģ«ãĤĪ": 103732, + "à¥ĩम": 103733, + "ÏĥÏĦε": 103734, + "تÙĪ": 103735, + "Äįek": 103736, + "ÑĨÑĭ": 103737, + "Ġ물": 103738, + "ÑįÑĤ": 103739, + "Ġkazan": 103740, + "Ù쨳": 103741, + "ehir": 103742, + "вÑĸÑĤ": 103743, + "ĠدÙĪÙĦ": 103744, + "Ġëĵľ": 103745, + "Ġà¤ļल": 103746, + "еÑģÑĤва": 103747, + "δα": 103748, + "ĠбÑĥв": 103749, + "ĠÐĿе": 103750, + "ØŃر": 103751, + "огÑĢаÑĦ": 103752, + "Ġrozhod": 103753, + "ĠвикоÑĢиÑģÑĤ": 103754, + "Ġyêu": 103755, + "λοÏĤ": 103756, + "کس": 103757, + "Ġشب": 103758, + "ิษ": 103759, + "æ¯į": 103760, + "ĠдоÑĢ": 103761, + "Ġnghá»ĩ": 103762, + "Ġtrang": 103763, + "à¥ĩद": 103764, + "Ġtìm": 103765, + "Ñĩно": 103766, + "ĠاÙħا": 103767, + "éģĭ": 103768, + "کر": 103769, + "ké": 103770, + "ĠvÄĽt": 103771, + "ĠнаÑģÑĤ": 103772, + "Ġæ±": 103773, + "ĠåĽ½": 103774, + "Ġgiảm": 103775, + "ادÙĬ": 103776, + "ëĤľ": 103777, + "ë¡ł": 103778, + "Ġ、": 103779, + "ĠденÑĮ": 103780, + "ÑĨÑĸÑİ": 103781, + "Ġhạn": 103782, + "ẳng": 103783, + "λή": 103784, + "eyen": 103785, + "ä¸Ķ": 103786, + "æŃ¦": 103787, + "ĠÑĦак": 103788, + "à¹Īà¸Ńà¸Ļ": 103789, + "Ġοι": 103790, + "زÙħ": 103791, + "ãģĹãģ¦ãģĦãĤĭ": 103792, + "лива": 103793, + "âĢķâĢķ": 103794, + "Ġöl": 103795, + "Ġà¤ĵ": 103796, + "ÑģÑĤÑĸ": 103797, + "à¸ģรรม": 103798, + "Ġtục": 103799, + "Ġgörün": 103800, + "ãģĹãģ¾": 103801, + "Ġì¦": 103802, + "馬": 103803, + "Ġможна": 103804, + "ĠÚ©ÙĦ": 103805, + "ĠÑĨенÑĤ": 103806, + "ĠìϏ": 103807, + "Îĺ": 103808, + "çĩ": 103809, + "Ġgelen": 103810, + "ĠاÙĬÙĨ": 103811, + "Ġآب": 103812, + "Ġà¤Ĩय": 103813, + "ัà¸ģษ": 103814, + "Ñģим": 103815, + "ĠболÑĮÑĪ": 103816, + "Ġмн": 103817, + "оди": 103818, + "Ġİl": 103819, + "Ġà¤Ĩर": 103820, + "еÑĤе": 103821, + "ÑĨиÑİ": 103822, + "áºŃu": 103823, + "Ġtiếng": 103824, + "ë¶ģ": 103825, + "æ§ĺ": 103826, + "ĠнаÑĪ": 103827, + "มา": 103828, + "âĢĻın": 103829, + "ãĥĥãĥĹ": 103830, + "ÙĪØ¬Ùĩ": 103831, + "ĠØŃد": 103832, + "ává": 103833, + "رÙĪØ´": 103834, + "ĠдейÑģÑĤв": 103835, + "ãģ£ãģ¦ãģĦãĤĭ": 103836, + "Ïģή": 103837, + "Ġüst": 103838, + "Ġtiết": 103839, + "acaÄŁ": 103840, + "ĠÐŁÐ¾": 103841, + "éĬ": 103842, + "머": 103843, + "chod": 103844, + "ĠØ¢ÙħÙĪØ²": 103845, + "ãģŁãĤģ": 103846, + "Ġchuyên": 103847, + "Ġuygu": 103848, + "нÑĸÑģÑĤ": 103849, + "ë´": 103850, + "æİ§": 103851, + "ÑĥÑİÑĤÑĮ": 103852, + "Äįi": 103853, + "ãģ¹": 103854, + "à¥Ĥन": 103855, + "æĹ©": 103856, + "ãĥĩãĤ£": 103857, + "èĴ": 103858, + "Ġشخص": 103859, + "ĠÑħоÑĤ": 103860, + "ĠÚ©ÙĨÛĮد": 103861, + "гл": 103862, + "à¸Ńà¸Ńà¸ģ": 103863, + "éĢĻ": 103864, + "ĠزÛĮر": 103865, + "íķŃ": 103866, + "ĠÃĸz": 103867, + "åij³": 103868, + "ØŃدة": 103869, + "Ġkažd": 103870, + "ĠÑĨвеÑĤ": 103871, + "Ġç¾": 103872, + "Ġкож": 103873, + "ĠÐŃÑĤо": 103874, + "ÑıÑĤелÑĮ": 103875, + "лаÑģÑĮ": 103876, + "âĢĮØ´ÙĪØ¯": 103877, + "μι": 103878, + "Ġæ²": 103879, + "Ġsüre": 103880, + "ละ": 103881, + "éħĴ": 103882, + "ึà¸ģษ": 103883, + "λλά": 103884, + "çij": 103885, + "ĠìĥĪ": 103886, + "Ġसह": 103887, + "ĠHÃł": 103888, + "ë¦¬ê³ł": 103889, + "صر": 103890, + "ĠæĬķ": 103891, + "éłŃ": 103892, + "Ġbá»ĩnh": 103893, + "ĠìĥĿê°ģ": 103894, + "Ġà¤ħà¤Ń": 103895, + "ê³µì§Ģ": 103896, + "ìĶ": 103897, + "á»Ŀi": 103898, + "çŃĶ": 103899, + "ĠbÃłi": 103900, + "одÑĸ": 103901, + "าà¸Ĥ": 103902, + "ников": 103903, + "Ġdönem": 103904, + "วม": 103905, + "ãĥĨãĤ£": 103906, + "ारण": 103907, + "оги": 103908, + "Ġkiá»ĥm": 103909, + "оÑĦ": 103910, + "äºĪ": 103911, + "åĨ³": 103912, + "اÙĦات": 103913, + "Ġnếu": 103914, + "Ġcest": 103915, + "زش": 103916, + "ÙİÙĦ": 103917, + "Ġتأ": 103918, + "ĠÄijạo": 103919, + "Ïįν": 103920, + "ĠвнÑĥ": 103921, + "ĠجاÙħ": 103922, + "ivnÃŃ": 103923, + "ĠìŀĪìĬµëĭĪëĭ¤": 103924, + "ÏĬ": 103925, + "æĦĽ": 103926, + "ãĥĽ": 103927, + "мÑĸн": 103928, + "ĠtÃŃm": 103929, + "ằm": 103930, + "ê·ł": 103931, + "äºķ": 103932, + "Ġxây": 103933, + "ĠìĽĶ": 103934, + "елен": 103935, + "Ġà¹Ĥà¸Ķย": 103936, + "اÙĦÙĩ": 103937, + "Ġbất": 103938, + "á»ĵm": 103939, + "âĢĮÚ¯": 103940, + "ÙĪØ±Ø©": 103941, + "بات": 103942, + "Ġbán": 103943, + "ẫu": 103944, + "اÙĨÙĪÙĨ": 103945, + "Ġzákon": 103946, + "áž": 103947, + "ì¶Ķ": 103948, + "à¹ģà¸ģ": 103949, + "ãĤįãģĨ": 103950, + "ÑĢоÑĤ": 103951, + "çĵ": 103952, + "Ġвони": 103953, + "Ġxác": 103954, + "ĠدÛĮگر": 103955, + "ÏĢοι": 103956, + "ĠнеÑģк": 103957, + "رسÛĮ": 103958, + "ĠëĿ¼": 103959, + "تÙĦ": 103960, + "λά": 103961, + "ĠÑıвлÑıеÑĤÑģÑı": 103962, + "ä¾Ŀ": 103963, + "Ġåħ¬": 103964, + "Ĺi": 103965, + "ĠíĬ¹": 103966, + "ÙĥÙĪÙĨ": 103967, + "ắp": 103968, + "جÙħÙĪØ¹": 103969, + "ÏĨοÏģ": 103970, + "ело": 103971, + "Ġgüven": 103972, + "Ġмай": 103973, + "ĠÑģоз": 103974, + "à¸ģระ": 103975, + "ĠاسÙĦاÙħ": 103976, + "ĠÑīе": 103977, + "Ġsá»ijng": 103978, + "à¥įब": 103979, + "کار": 103980, + "ĠthuáºŃt": 103981, + "ĠnÃŃ": 103982, + "第ä¸Ģ": 103983, + "è¦ĸ": 103984, + "à¹Ģà¸ģม": 103985, + "اÙĬØ©": 103986, + "ĠÎĪ": 103987, + "ãĤ¶": 103988, + "ĠÙħÙĪÙĤع": 103989, + "ĠåĴ": 103990, + "è¡ĵ": 103991, + "ĠÐŀд": 103992, + "Ġä¸ī": 103993, + "lerinde": 103994, + "ĠÑģвоÑĹ": 103995, + "à¥Ģà¤ı": 103996, + "Ġthương": 103997, + "ÏĥÏĦο": 103998, + "ĠغÙĬر": 103999, + "Ġپر": 104000, + "ĠÑģебе": 104001, + "Ġвк": 104002, + "Ġkhai": 104003, + "ãĤĢ": 104004, + "ĠÙĨظر": 104005, + "ĠдокÑĥм": 104006, + "à¹ĩà¸ļ": 104007, + "ĠíķľêµŃ": 104008, + "ï½ī": 104009, + "å·¥ç¨ĭ": 104010, + "ĠÙĪÙĦ": 104011, + "ØŃÙĬ": 104012, + "Ġпла": 104013, + "Ġİstanbul": 104014, + "âĢĻde": 104015, + "алÑģÑı": 104016, + "ĠØ¢ÙĨÙĩا": 104017, + "ĠاÙĩ": 104018, + "Ġê´Ģ리": 104019, + "Ġanh": 104020, + "Å¡ÃŃm": 104021, + "larla": 104022, + "ï¼Ŀ": 104023, + "nostÃŃ": 104024, + "ÑģÑĤве": 104025, + "ÛĮÙģ": 104026, + "Ġگرد": 104027, + "ãĤĮãĤĭ": 104028, + "Ġvá»±": 104029, + "ÄĽnÃŃ": 104030, + "Ġgörev": 104031, + "Ġyılında": 104032, + "Ġlợi": 104033, + "Ġanlam": 104034, + "ĠпÑĢовод": 104035, + "ÑĨÑİ": 104036, + "Ġåī": 104037, + "Ġë§İ": 104038, + "ÑĢаÑģ": 104039, + "ĠŽ": 104040, + "کاÙĨ": 104041, + "ÐĻ": 104042, + "ãģ£ãģ¨": 104043, + "Ú©ÙĦ": 104044, + "ายà¸Ļ": 104045, + "عاÙĦ": 104046, + "Ġký": 104047, + "ĠмаÑĤеÑĢи": 104048, + "ê»ĺ": 104049, + "ılması": 104050, + "μÎŃν": 104051, + "ĠÙĨÙħÛĮ": 104052, + "Ġcuá»Ļc": 104053, + "Ġδεν": 104054, + "å¹²": 104055, + "____": 104056, + "à¥Ģà¤Ł": 104057, + "Ġçıkar": 104058, + "ĠkonuÅŁ": 104059, + "иÑĤелÑĮно": 104060, + "lantı": 104061, + "à¹Ħล": 104062, + "å¾ĭ": 104063, + "Ġíͼ": 104064, + "ìϏ": 104065, + "Ġsáng": 104066, + "éģĶ": 104067, + "ожд": 104068, + "Ġآخر": 104069, + "ilece": 104070, + "à¥Īन": 104071, + "Ġjedn": 104072, + "ĠÑģпеÑĨи": 104073, + "´Ŀ": 104074, + "ĠÚĺ": 104075, + "ĠãĢĤĊ": 104076, + "èģĮ": 104077, + "ĠÙĨÛĮ": 104078, + "ÑĤоÑĢа": 104079, + "λι": 104080, + "ĠÙĪØ¨": 104081, + "iÅŁim": 104082, + "ç»´": 104083, + "ãĢĢi": 104084, + "Ġmua": 104085, + "Ġjiž": 104086, + "è¶Ĭ": 104087, + "ãĤĴè¦ĭ": 104088, + "Ġná»Ļi": 104089, + "à¥įà¤Ĺ": 104090, + "種": 104091, + "ĠãĢĢãĢĢãĢĢ": 104092, + "à¹ĥหม": 104093, + "ĠÎĨ": 104094, + "ÙĨدÛĮ": 104095, + "ĠÑģÑĩ": 104096, + "Ġlá»ĩ": 104097, + "lub": 104098, + "еÑĢÑĤ": 104099, + "ĠاطÙĦ": 104100, + "ĠÑģеÑĢед": 104101, + "Ġéģ": 104102, + "Ġзал": 104103, + "ÙĨÛĮÙĨ": 104104, + "çŁ¥éģĵ": 104105, + "Ø¢ÙĨ": 104106, + "Ġкап": 104107, + "Ġà¹Ħม": 104108, + "ůvod": 104109, + "ĠپاÛĮ": 104110, + "ÑĤÑĢи": 104111, + "Ġiht": 104112, + "à¹Ĭ": 104113, + "ĠвÑģÑĸ": 104114, + "Ġthay": 104115, + "åĨµ": 104116, + "ĠعÙĨÙĪØ§ÙĨ": 104117, + "ĠÎ¥": 104118, + "à¸Ŀ": 104119, + "εÏĦαι": 104120, + "iyordu": 104121, + "ï¼ĮèĢĮ": 104122, + "çļĦ人": 104123, + "Ġसà¤Ń": 104124, + "à¹īà¸Ńย": 104125, + "ικο": 104126, + "ãĤĵãģ§": 104127, + "족": 104128, + "ÙĨجÙĦÙĬزÙĬØ©": 104129, + "Ġžád": 104130, + "ÑĢави": 104131, + "γγ": 104132, + "æµĭ": 104133, + "оÑĨÑĸ": 104134, + "ãĢĢãĢĢĠãĢĢ": 104135, + "Ġतरह": 104136, + "ĠëĨ": 104137, + "à¥Ģà¤ļ": 104138, + "à¹Īม": 104139, + "Ġgá»ĵm": 104140, + "Ġkiá»ĩn": 104141, + "è·Ł": 104142, + "Φ": 104143, + "esinin": 104144, + "é¥": 104145, + "é«Ķ": 104146, + "оÑĩно": 104147, + "रण": 104148, + "æĺ¥": 104149, + "ç¶ĵ": 104150, + "Ġبار": 104151, + "ê·¼": 104152, + "éĻħ": 104153, + "ĠسÙĬ": 104154, + "ÑģÑĥÑĤ": 104155, + "ìµľ": 104156, + "å±ħ": 104157, + "ĠÄįesk": 104158, + "ÎijÎĿ": 104159, + "Ġdiá»ĩn": 104160, + "Ġεί": 104161, + "à¸ĩà¸Ĺ": 104162, + "ãĤ©": 104163, + "Ġvá»±c": 104164, + "вав": 104165, + "tıģı": 104166, + "Ġëªħ": 104167, + "ην": 104168, + "виÑĤ": 104169, + "ĠØ£Ùĥ": 104170, + "ĠпÑĢоп": 104171, + "rak": 104172, + "ÑĢаÑĤи": 104173, + "ĠÄijánh": 104174, + "ÑĢеп": 104175, + "ê´ij": 104176, + "еÑĨÑĮ": 104177, + "Ġबत": 104178, + "ĠåĮĹ": 104179, + "Ġsát": 104180, + "ledi": 104181, + "ìłģìľ¼ë¡ľ": 104182, + "ůj": 104183, + "Û°Û°": 104184, + "Ġnasıl": 104185, + "ĠÙĪØ³": 104186, + "Ġεξ": 104187, + "вÑĭ": 104188, + "ç½Ĺ": 104189, + "ارÛĮØ®": 104190, + "à¸Ľà¸¥": 104191, + "ίκ": 104192, + "Ġê¸Ī": 104193, + "åĩł": 104194, + "å¼·": 104195, + "è¿Ķ": 104196, + "Ġnhá»ı": 104197, + "å¾Ģ": 104198, + "Ġдаже": 104199, + "Ġçev": 104200, + "кÑĸ": 104201, + "ĠØ£Ùħ": 104202, + "ีส": 104203, + "สามารà¸ĸ": 104204, + "ĠÐĦ": 104205, + "ÑħодиÑĤ": 104206, + "ëĸ": 104207, + "Ġtruyá»ģn": 104208, + "ĠÑģÑĤан": 104209, + "ëĵ¤ìĿĢ": 104210, + "اÙĦت": 104211, + "़à¥ĩ": 104212, + "Ġà¤ħब": 104213, + "æķ¸": 104214, + "ĠдÑĸÑı": 104215, + "ĠÙħتر": 104216, + "Ġë¸": 104217, + "ï¾į": 104218, + "Ġê³¼": 104219, + "ĠزÛĮ": 104220, + "ëŁ¼": 104221, + "ĠÐŁÐµÑĢ": 104222, + "Ġsık": 104223, + "ноÑģÑĤÑĮÑİ": 104224, + "Ġeden": 104225, + "ادر": 104226, + "ãĦ": 104227, + "ĠлеÑĩ": 104228, + "ĠÙĩذÙĩ": 104229, + "ضÙĪØ¹": 104230, + "ĠìķĦëĭĪ": 104231, + "irket": 104232, + "Ġاگر": 104233, + "ĠÑħоÑĩ": 104234, + "Ġбан": 104235, + "íĶĮ": 104236, + "æĢİä¹Ī": 104237, + "èĽ": 104238, + "Ġबà¤ļ": 104239, + "Ġکتاب": 104240, + "çīĮ": 104241, + "Ġдва": 104242, + "جر": 104243, + "ĠпÑĢоÑģÑĤо": 104244, + "Ġà¤Ĩव": 104245, + "Ġmức": 104246, + "į¼": 104247, + "ĠjÃŃ": 104248, + "íİĺ": 104249, + "Ġtamam": 104250, + "åĪĽ": 104251, + "à¸Ĵ": 104252, + "пеÑĩ": 104253, + "à¥ĭस": 104254, + "ĠÑģем": 104255, + "Ġtương": 104256, + "ä¸ģ": 104257, + "ī´": 104258, + "ĠÑĢоÑģ": 104259, + "ĠмаÑĶ": 104260, + "æŃĮ": 104261, + "ĠداÙĨÙĦÙĪØ¯": 104262, + "ĠLoÃłi": 104263, + "Ġedilm": 104264, + "Ġkonu": 104265, + "ĠاÙĦÙħر": 104266, + "ĠulaÅŁ": 104267, + "Ġyüksek": 104268, + "οι": 104269, + "ÙİÙĨ": 104270, + "ĠbÄĽ": 104271, + "ãĤ·ãĥ§ãĥ³": 104272, + " ̄ ̄ ̄ ̄": 104273, + "Ġgüç": 104274, + "ĠاÙĪÙĦ": 104275, + "Ġма": 104276, + "Ġبخش": 104277, + "ाà¤ĸ": 104278, + "ĠвиÑģ": 104279, + "ženÃŃ": 104280, + "Ġzpůsob": 104281, + "znam": 104282, + "ĠرÙĪÛĮ": 104283, + "åĭĿ": 104284, + "।Ċ": 104285, + "ÙĦÙĤ": 104286, + "Ġжиз": 104287, + "ÑĢÑĸв": 104288, + "ĠÑĥпÑĢав": 104289, + "Ġphá»ij": 104290, + "icros": 104291, + "Ġà¹ģà¸ķ": 104292, + "Ġë°ķ": 104293, + "ÙĪØ§Øª": 104294, + "ï¼Įä¸Ģ": 104295, + "анÑģ": 104296, + "ç´ļ": 104297, + "ยà¸Ļ": 104298, + "à¹ģà¸Ĥ": 104299, + "Ġgiáo": 104300, + "äºĮäºĮ": 104301, + "Ġİs": 104302, + "ìĬ¹": 104303, + "Ġolacak": 104304, + "ĠCác": 104305, + "ĠÑĢÑĥб": 104306, + "ẹp": 104307, + "ÄŁiniz": 104308, + "ãģªãģ©": 104309, + "ĠмоÑĢ": 104310, + "ĠÑģдел": 104311, + "ÙĦÙħاÙĨ": 104312, + "ném": 104313, + "å°į": 104314, + "Ġdne": 104315, + "ì¶ľìŀ¥": 104316, + "عب": 104317, + ":::::::": 104318, + "ÎĴ": 104319, + "eket": 104320, + "ĠÑĢеÑĪ": 104321, + "èά": 104322, + "ĠíĻĶ": 104323, + "صد": 104324, + "ĠмаÑĢ": 104325, + "Ñıж": 104326, + "شار": 104327, + "ãģ²": 104328, + "ĠاÙĦÙĬ": 104329, + "Ùį": 104330, + "à¤Ĥà¤ľ": 104331, + "мÑĭ": 104332, + "Ġkarar": 104333, + "ÙĦÛĮسÛĮ": 104334, + "าà¸ĵ": 104335, + "群": 104336, + "Ġolması": 104337, + "Ġhazır": 104338, + "γÏģαÏĨ": 104339, + "¯u": 104340, + "вол": 104341, + "ĠÑģÑĤаÑĢ": 104342, + "ovala": 104343, + "Ġвозмож": 104344, + "Ġдав": 104345, + "風": 104346, + "را": 104347, + "Ġдопом": 104348, + "ê²ĥ": 104349, + "Ġìĺ¬": 104350, + "Ġåİ": 104351, + "Ġ못": 104352, + "uç": 104353, + "íļ": 104354, + "lük": 104355, + "ä¸Ńå¿ĥ": 104356, + "Ġदर": 104357, + "ĠâĹĨ": 104358, + "Ġtay": 104359, + "ĠبسÛĮ": 104360, + "ĠÏĥÏĦα": 104361, + "ĠÙħØ®": 104362, + "ÑıÑī": 104363, + "å·®": 104364, + "à¸ī": 104365, + "ëł¹": 104366, + "à¹ĥà¸Ļà¸ģาร": 104367, + "ĠÙĩÙĨ": 104368, + "ãģ¶": 104369, + "лÑĸд": 104370, + "åį°": 104371, + "Ġsao": 104372, + "ÅĻad": 104373, + "리ëĬĶ": 104374, + "Ñģлед": 104375, + "åĶ®": 104376, + "Ġ|:": 104377, + "æķĻèĤ²": 104378, + "Ġмол": 104379, + "ĠÙĩÙĬ": 104380, + "ëģ": 104381, + "ĠкÑĥлÑĮ": 104382, + "'nin": 104383, + "Ġخر": 104384, + "Ġgenel": 104385, + "Ġtá»Ń": 104386, + "Ġkurul": 104387, + "енÑĤи": 104388, + "à¥ĭà¤ľà¤¨": 104389, + "è¿Ļæł·": 104390, + "ĠмÑĸж": 104391, + "Ġnghiá»ĩm": 104392, + "ĠÏĢολ": 104393, + "æĭĽ": 104394, + "Ġà¤Ĺà¤ı": 104395, + "ầy": 104396, + "Ġcảm": 104397, + "ç´°": 104398, + "rıca": 104399, + "ĠعÙĦÛĮ": 104400, + "ิà¹ī": 104401, + "hur": 104402, + "Ġchưa": 104403, + "ÑĥÑĶÑĤÑĮÑģÑı": 104404, + "ãģ©ãģĨ": 104405, + "Ñĥл": 104406, + "ิร": 104407, + "Ġæľī": 104408, + "ä¼¼": 104409, + "ÑĦеÑĢ": 104410, + "ÑįÑĤомÑĥ": 104411, + "æĹħ": 104412, + "ĠÙħÙĪØ¬": 104413, + "Ġ본": 104414, + "Ġgiá»Ŀ": 104415, + "Ġkiến": 104416, + "à¹Īวย": 104417, + "Ġdüny": 104418, + "ĠزÙħ": 104419, + "овÑĸ": 104420, + "ĠÑĨÑĮого": 104421, + "ิà¸ļ": 104422, + "ĠìĨIJ": 104423, + "èIJ¥": 104424, + "ĠÑĢÑĸз": 104425, + "Ġhá»Ĺ": 104426, + "ÑĢÑĸб": 104427, + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 104428, + "ìľ¼ë©°": 104429, + "äºĨä¸Ģ": 104430, + "ĠÙĤبÙĦ": 104431, + "é¾Ļ": 104432, + "Ġگذ": 104433, + "ĠÙĤد": 104434, + "ãģªãģĭãģ£ãģŁ": 104435, + "Ġà¹Ģร": 104436, + "å¸Į": 104437, + "ĠÑģÑħ": 104438, + "ĠгÑĢом": 104439, + "åĽ¢": 104440, + "Ġì§ij": 104441, + "ĠлÑĥÑĩ": 104442, + "åħµ": 104443, + "ĠÐŀÑĤ": 104444, + "Ġmuá»ijn": 104445, + "ãģĺãĤĥ": 104446, + "ovnÃŃ": 104447, + "ë©´ìĦľ": 104448, + "ë³Ģ": 104449, + "Ġнеб": 104450, + "Ñģии": 104451, + "ÙĨÙħ": 104452, + "ÄŁin": 104453, + "Ġtoho": 104454, + "eniz": 104455, + "باش": 104456, + "ĠÑģлÑĥж": 104457, + "Ġbợi": 104458, + "Ġüzere": 104459, + "Ġsadece": 104460, + "ĠÏĢαÏģ": 104461, + "³³³³³³³³³³³³³³³³": 104462, + "èĮĥ": 104463, + "ÏĦικÏĮ": 104464, + "ĠäºĮ": 104465, + "ãĤĪãģĨãģ«": 104466, + "èŀ": 104467, + "ãģ®ãģ¯": 104468, + "ĠÑĥкÑĢаÑĹн": 104469, + "Ġbắt": 104470, + "ван": 104471, + "ĠÑģÑĤÑĢа": 104472, + "è¡Ģ": 104473, + "nutÃŃ": 104474, + "okt": 104475, + "รà¸ĩà¹Ģร": 104476, + "ĠصÙģ": 104477, + "åħļ": 104478, + "ÏĦί": 104479, + "ï¼ģãĢįĊĊ": 104480, + "ĠÑĤемп": 104481, + "é¡Į": 104482, + "Ġsluž": 104483, + "Ñĥков": 104484, + "ĠnghÄ©a": 104485, + "çͲ": 104486, + "Ġdá»ħ": 104487, + "ови": 104488, + "ÏĦÏħ": 104489, + "رÛĮÚ©": 104490, + "ĠAnh": 104491, + "ĠвÑģего": 104492, + "âĢĮÚ©ÙĨ": 104493, + "teÅĻÃŃ": 104494, + "Ġmục": 104495, + "ÙĩÙĨÚ¯": 104496, + "ĠÐŁÐ¾Ñģ": 104497, + "ÚĺÙĩ": 104498, + "ĠاÙĦغ": 104499, + "æĿ¾": 104500, + "ysl": 104501, + "Ġyapılan": 104502, + "çζ": 104503, + "Ġmạnh": 104504, + "راÙĩ": 104505, + "à¸Ķà¸ĩ": 104506, + "oÄį": 104507, + "ë§IJ": 104508, + "åłĤ": 104509, + "маÑĤ": 104510, + "ĠeÅŁ": 104511, + "ÙĪÙħات": 104512, + "Ġساخت": 104513, + "åĽłä¸º": 104514, + "ĠпÑĢий": 104515, + "ılmÄ±ÅŁ": 104516, + "館": 104517, + "ุà¸ĩ": 104518, + "Ġëģ": 104519, + "à¸ķาม": 104520, + "åIJī": 104521, + "μή": 104522, + "Ġæľ¬": 104523, + "Ġzáklad": 104524, + "تØŃ": 104525, + "è¾¼": 104526, + "ĠвÑĸй": 104527, + "ĠÙħÙĨØ·": 104528, + "Ġtoán": 104529, + "каÑĢ": 104530, + "ĠÐĹа": 104531, + "ĠпÑĢимен": 104532, + "ãĤĭãģ¨": 104533, + "ัà¸Ĺ": 104534, + "ÛĮس": 104535, + "ĠاÙĨجاÙħ": 104536, + "ĠعÙĦÙĬ": 104537, + "़ि": 104538, + "ených": 104539, + "ĠLiên": 104540, + "Ġпа": 104541, + "éļĬ": 104542, + "Ġmohou": 104543, + "ĠкÑĸлÑĮ": 104544, + "ĠΤο": 104545, + "اÙĦب": 104546, + "ÎŃν": 104547, + "ĠnabÃŃ": 104548, + "çi": 104549, + "lerden": 104550, + "Ġthanh": 104551, + "Ġbütün": 104552, + "ĠåŁ": 104553, + "ì¸ł": 104554, + "Ġzat": 104555, + "ÙĬÙĪ": 104556, + "Ġμια": 104557, + "uyết": 104558, + "Ñijн": 104559, + "åĪĴ": 104560, + "ливо": 104561, + "à¹Īà¸Ńà¸ĩ": 104562, + "ä»ĸ们": 104563, + "Ġбаг": 104564, + "िà¤Ń": 104565, + "ĠÑĤам": 104566, + "ĠпÑĢеп": 104567, + "ิà¸Ĭ": 104568, + "âĢĻÑıз": 104569, + "ĠPhân": 104570, + "жен": 104571, + "à¥Īà¤ķ": 104572, + "ĠÑģлÑĥÑĩае": 104573, + "Ġ.:": 104574, + "åŃ¦æł¡": 104575, + "İN": 104576, + "義": 104577, + "ĠÑģÑĤо": 104578, + "Ġहर": 104579, + "Ïħν": 104580, + "Ġxem": 104581, + "ĠбÑĥÑĤи": 104582, + "ÑģиÑĤ": 104583, + "çªģ": 104584, + "à¥įà¤Ľ": 104585, + "åij¢": 104586, + "ï¼Įä¹Ł": 104587, + "enÄĽ": 104588, + "Ġκά": 104589, + "iyorum": 104590, + "ĠÚ¯ÙģØª": 104591, + "âĹıâĹıâĹıâĹı": 104592, + "ัม": 104593, + "ĠÐļон": 104594, + "ноÑĪ": 104595, + "ниÑĨÑĤ": 104596, + "üzel": 104597, + "sÃŃ": 104598, + "師": 104599, + "صÙĪÙĦ": 104600, + "çĥŃ": 104601, + "ĠÄijá»§": 104602, + "ãĤ®": 104603, + "æķħ": 104604, + "ĠÅ¡kol": 104605, + "Ñĩен": 104606, + "à¹Ģย": 104607, + "à¸Ļà¸Ļ": 104608, + "ÙĢÙĢÙĢÙĢ": 104609, + "Ġüç": 104610, + "念": 104611, + "ãĥªãĤ¢": 104612, + "ĠíĻĺ": 104613, + "Ġéĩij": 104614, + "çıŃ": 104615, + "ĠÑģклад": 104616, + "Ñıми": 104617, + "üf": 104618, + "Ġhã": 104619, + "ĠÄIJại": 104620, + "ÂĤ": 104621, + "åĦª": 104622, + "Ġbulunan": 104623, + "ĠاÙĦÙħØŃ": 104624, + "æĪı": 104625, + "Ġè©": 104626, + "ĠноÑĢм": 104627, + "Ġchuẩn": 104628, + "ĠзаÑģÑĤ": 104629, + "ĠvÃŃce": 104630, + "Ðĸ": 104631, + "Ġà¤Ĩध": 104632, + "ĠÄįas": 104633, + "ĠбоÑĢ": 104634, + "Ïģια": 104635, + "ĠÙħاÙĩ": 104636, + "Ġíħ": 104637, + "ÅĻel": 104638, + "Ñıви": 104639, + "ÏĦεÏĤ": 104640, + "inÄĽ": 104641, + "ĠпеÑĢе": 104642, + "éķĩ": 104643, + "à¥įà¤ŀ": 104644, + "Ġéĺ": 104645, + "à¹Īาว": 104646, + "รร": 104647, + "ĠسÙĩ": 104648, + "вали": 104649, + "çķĻ": 104650, + "ĠÑĦÑĥнк": 104651, + "Ġíĸī": 104652, + "ÙģÙĩ": 104653, + "çĶŁæ´»": 104654, + "èģŀ": 104655, + "okud": 104656, + "ĠìĤ´": 104657, + "ızı": 104658, + "ĠполÑĥ": 104659, + "ï¼Įä½ł": 104660, + "شاÙĨ": 104661, + "決": 104662, + "бÑĢÑı": 104663, + "оÑģÑĥдаÑĢ": 104664, + "Ġoyun": 104665, + "ании": 104666, + "Ġprů": 104667, + "Ġnáv": 104668, + "ĠменÑı": 104669, + "Ġìŀĺ": 104670, + "Ġİn": 104671, + "ĠthÃŃch": 104672, + "ĠÄijảm": 104673, + "åľĴ": 104674, + "Ġвже": 104675, + "ĠloÃłi": 104676, + "ĠÐŀн": 104677, + "меÑģÑĤ": 104678, + "Ġξ": 104679, + "ãĢħ": 104680, + "Ġchiế": 104681, + "ÑĩÑĸ": 104682, + "Ġíijľ": 104683, + "ëĭ¬": 104684, + "Ġëĭ¬": 104685, + "à¥Ģड": 104686, + "ÑĢалÑĮ": 104687, + "dik": 104688, + "ĠíĨł": 104689, + "ëŁī": 104690, + "ĠصÙĨ": 104691, + "Ġstej": 104692, + "ĠакÑĤив": 104693, + "Ġé¦": 104694, + "Ġà¹Ħà¸Ķ": 104695, + "æĬĢæľ¯": 104696, + "ĠprostÅĻed": 104697, + "害": 104698, + "ãģIJ": 104699, + "ĠoluÅŁtur": 104700, + "elop": 104701, + "ãģ¡ãĤĥ": 104702, + "éĥİ": 104703, + "ضا": 104704, + "Ġخط": 104705, + "ë°ķ": 104706, + "еÑģÑı": 104707, + "ĠÙĩÛĮ": 104708, + "над": 104709, + "ĠngÃłnh": 104710, + "ÑĢÑĥÑĪ": 104711, + "ãģĦãģĦ": 104712, + "Ġürün": 104713, + "à¸Ńà¸ķ": 104714, + "à¥ĭप": 104715, + "Ġsayı": 104716, + "à¥Ģस": 104717, + "ениÑħ": 104718, + "ĠÑģим": 104719, + "à¥Ģद": 104720, + "å¤ī": 104721, + "à¹Īวม": 104722, + "Ġà¹Ģà¸Ĥ": 104723, + "å·²ç»ı": 104724, + "аÑĤо": 104725, + "ĠÑĢайон": 104726, + "íĥĿ": 104727, + "ĠÑĤÑĢа": 104728, + "layan": 104729, + "ếp": 104730, + "à¤¾à¤Ł": 104731, + "خاب": 104732, + "人æ°ij": 104733, + "å®Ŀ": 104734, + "èĨ": 104735, + "èªį": 104736, + "naÄį": 104737, + "Ġîł": 104738, + "ĠÐļи": 104739, + "ĠbaÅŁka": 104740, + "ců": 104741, + "ضع": 104742, + "èĪª": 104743, + "ีม": 104744, + "Ñĭми": 104745, + "ÎĻΣ": 104746, + "Ġشرکت": 104747, + "ยว": 104748, + "ĠmusÃŃ": 104749, + "Ġнал": 104750, + "ีà¸Ĺ": 104751, + "Ġáp": 104752, + "ราย": 104753, + "æ²¹": 104754, + "leme": 104755, + "Ġमन": 104756, + "à¹Ħà¸Ł": 104757, + "аÑĤив": 104758, + "¸ı": 104759, + "èѰ": 104760, + "ÏĥÏĦα": 104761, + "íĸ¥": 104762, + "еÑĤÑĥ": 104763, + "ĠÑģвÑıз": 104764, + "едеÑĢа": 104765, + "Ġخارج": 104766, + "าษ": 104767, + "âĢĮÙ¾": 104768, + "Ñĸг": 104769, + "é¡ŀ": 104770, + "Ġkhả": 104771, + "ĠÑģпÑĢав": 104772, + "è¡Ĺ": 104773, + "ãĥķãĤ¡": 104774, + "ĠмеждÑĥ": 104775, + "Ñĥли": 104776, + "Ġبزر": 104777, + "ÑĨен": 104778, + "Ġekonom": 104779, + "دÙĨ": 104780, + "اÙħÛĮ": 104781, + "าสà¸ķร": 104782, + "ĠnÄĽkol": 104783, + "gün": 104784, + "зи": 104785, + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł": 104786, + "离": 104787, + "ĠtrÆ°á»Łng": 104788, + "ıi": 104789, + "íݸ": 104790, + "ĠÑĢеб": 104791, + "åºķ": 104792, + "ĠتارÛĮØ®": 104793, + "нима": 104794, + "Ġthân": 104795, + "аÑĤелÑĮно": 104796, + "ĠاÙĦذÙĬ": 104797, + "ÙĪÙĨÛĮ": 104798, + "Ġéĥ": 104799, + "Ġbình": 104800, + "ικήÏĤ": 104801, + "à¸ŀล": 104802, + "تÙħاع": 104803, + "ĠPraha": 104804, + "ĠÑģÑĤав": 104805, + "دÙĬد": 104806, + "Ġgiữa": 104807, + "ĠпÑĢовед": 104808, + "Âłk": 104809, + "ÙĨدگÛĮ": 104810, + "ÑĨий": 104811, + "çĴ": 104812, + "ĠاÙĦØ£Ùħ": 104813, + "Ġè´": 104814, + "Ø¥ÙĨجÙĦÙĬزÙĬØ©": 104815, + "ĠìŀĪìĹĪëĭ¤": 104816, + "ç·¨": 104817, + "ัà¸Ļà¸ĺ": 104818, + "ĠÑĢокÑĸв": 104819, + "Ġcáo": 104820, + "Ġkhó": 104821, + "ĠÙĨÙĪØ¹": 104822, + "سÙĦ": 104823, + "ĠÑĥÑģлов": 104824, + "Ġcứu": 104825, + "ового": 104826, + "िà¤Ĺ": 104827, + "Ķëĭ¤": 104828, + "æĿİ": 104829, + "Ġbölg": 104830, + "Ġngu": 104831, + "Ġhữu": 104832, + "нии": 104833, + "ìłĪ": 104834, + "ĠпÑĢом": 104835, + "åıĮ": 104836, + "ĠdÆ°á»Ľi": 104837, + "Ю": 104838, + "ÙĬØ´": 104839, + "温": 104840, + "ëıħ": 104841, + "ĠзмÑĸ": 104842, + "θηκε": 104843, + "ĠbaÄŁlı": 104844, + "Ġüzerinde": 104845, + "Ġتغ": 104846, + "ĠпÑĢогÑĢа": 104847, + "iž": 104848, + "Ġç¥": 104849, + "Ġyardım": 104850, + "ÂĢÂĢ": 104851, + "ĠÑĥв": 104852, + "Ġrů": 104853, + "Ġchiến": 104854, + "νοÏĤ": 104855, + "ãģ¨ãģª": 104856, + "اÙĨت": 104857, + "è°·": 104858, + "ÃŃsk": 104859, + "isinde": 104860, + "Ġдог": 104861, + "追": 104862, + "ĠпÑĢоÑĤив": 104863, + "ÏģοÏħ": 104864, + "ãģ®ãģĭ": 104865, + "Ġbazı": 104866, + "ırak": 104867, + "à¥ĩष": 104868, + "ĠÙħشار": 104869, + "Ġìĸij": 104870, + "Ġнез": 104871, + "ĠذÙĦÙĥ": 104872, + "調": 104873, + "åĤĻ": 104874, + "ĠÑĤÑĢан": 104875, + "ĠÏĢαÏģα": 104876, + "ÛĮÙħت": 104877, + "Ġtiến": 104878, + "ĠÙĩÙħÙĩ": 104879, + "efon": 104880, + "».ĊĊ": 104881, + "ĠÙĨد": 104882, + "جÙĦ": 104883, + "ĠدادÙĩ": 104884, + "Ġвед": 104885, + "Ġsın": 104886, + "ĠÑģвÑĸÑĤ": 104887, + "elerin": 104888, + "â΍": 104889, + "Ġyür": 104890, + "дан": 104891, + "ĠÐŀÑģ": 104892, + "Ġhạng": 104893, + "许": 104894, + "ÏĥÏĦη": 104895, + "uyến": 104896, + "Ġнаб": 104897, + "ĠоÑħ": 104898, + "ÏĥÏī": 104899, + "Ġbyly": 104900, + "ÑģкиÑħ": 104901, + "lamak": 104902, + "иÑĤоÑĢ": 104903, + "Ġyatır": 104904, + "ĠпÑĢоизвод": 104905, + "ĠجÙħع": 104906, + "Åł": 104907, + "æıIJä¾Ľ": 104908, + "ĠprvnÃŃ": 104909, + "ĠαÏĢ": 104910, + "íĻ©": 104911, + "ĠпÑĢакÑĤи": 104912, + "lerinden": 104913, + "ĠнеобÑħодимо": 104914, + "康": 104915, + "ÙİØ§": 104916, + "ĠسÙĨ": 104917, + "İL": 104918, + "Ġê´ij": 104919, + "ĠPÅĻ": 104920, + "çŀ": 104921, + "ĠÑĤемпеÑĢаÑĤÑĥ": 104922, + "Ġkabul": 104923, + "Ġbudou": 104924, + "ÑĨÑĸоналÑĮ": 104925, + "ï½ľ": 104926, + "Ġçocuk": 104927, + "ĠÑĤÑĸлÑĮки": 104928, + "byt": 104929, + "ãĥ¤": 104930, + "ĠÑģÑĤаÑĤ": 104931, + "ĠæĿ±": 104932, + "ležit": 104933, + "اسطة": 104934, + "ุร": 104935, + "iêm": 104936, + "ĠкÑĥлÑĮÑĤÑĥ": 104937, + "Ġпон": 104938, + "Ä©nh": 104939, + "åĸľ": 104940, + "нев": 104941, + "ÑĶн": 104942, + "ĠÑģооÑĤ": 104943, + "ëĿ": 104944, + "çξ": 104945, + "Ġtuá»ķi": 104946, + "kanı": 104947, + "สำหร": 104948, + "اعت": 104949, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 104950, + "деÑĢж": 104951, + "ĠоблаÑģÑĤи": 104952, + "Ġvừa": 104953, + "ĠÙħÙħ": 104954, + "à¸ģำ": 104955, + "à¹ģม": 104956, + "iversit": 104957, + "à¹ģส": 104958, + "欧": 104959, + "lanan": 104960, + "ÙĬÙĨØ©": 104961, + "سة": 104962, + "ĠлÑİдей": 104963, + "รรม": 104964, + "Ġì±Ħ": 104965, + "Ġ天": 104966, + "еннÑĭÑħ": 104967, + "à¹ģห": 104968, + "Ġspráv": 104969, + "èѦ": 104970, + "ï¼ľ": 104971, + "ัà¸Ĵ": 104972, + "ilecek": 104973, + "ĠæŁ": 104974, + "Ġèĭ±": 104975, + "ĠÑħоÑĢоÑĪ": 104976, + "ëłĩ": 104977, + "Û²Û°Û°": 104978, + "æĬ¤": 104979, + "Ġlã": 104980, + "ÅĻÃŃzenÃŃ": 104981, + "ĠتÙĪÙĦÛĮد": 104982, + "éļĽ": 104983, + "ãĤĮãģ°": 104984, + "áš": 104985, + "ارÙĬØ®": 104986, + "æĶ»": 104987, + "Ġkhoảng": 104988, + "éĻį": 104989, + "ован": 104990, + "Ġgây": 104991, + "âĢĻnın": 104992, + "Ø£ÙĨ": 104993, + "miÅŁtir": 104994, + "Ġsức": 104995, + "кÑĥÑģ": 104996, + "Ġüzerine": 104997, + "ÄŁÃ¼": 104998, + "ابر": 104999, + "ï¼Įå°±": 105000, + "Ì£": 105001, + "ĠëıĮ": 105002, + "Ġtrá»±c": 105003, + "æĶ¶å½ķ": 105004, + "æī¿": 105005, + "ĠNá»Ļi": 105006, + "ĠçϾ": 105007, + "ÑĪÑĮ": 105008, + "جة": 105009, + "ë²ł": 105010, + "à¤ī": 105011, + "à¸ı": 105012, + "Ġülk": 105013, + "ĠÙĩستÙĨد": 105014, + "ัà¸ļà¸ģาร": 105015, + "ĠÑıка": 105016, + "ãİ": 105017, + "ĠЯк": 105018, + "Ġгде": 105019, + "tiv": 105020, + "ãĢĪ": 105021, + "лÑİÑĩа": 105022, + "ा।Ċ": 105023, + "ĠÙħاÙĨ": 105024, + "Ġdlou": 105025, + "Ġãĥķ": 105026, + "à¤Ľ": 105027, + "Ġphục": 105028, + "akat": 105029, + "Ь": 105030, + "asını": 105031, + "ĠæĬķ稿": 105032, + "ÑĢев": 105033, + "Ġvyt": 105034, + "ĠzmÄĽ": 105035, + "ÏĦÏī": 105036, + "è¬": 105037, + "ĠÑĥм": 105038, + "Ġuzun": 105039, + "Ġproti": 105040, + "ĠÑģоÑģÑĤоÑı": 105041, + "ัà¸Ĵà¸Ļ": 105042, + "atik": 105043, + "Ġà¸ł": 105044, + "Ġà¤Ĩद": 105045, + "larından": 105046, + "æĢ¥": 105047, + "ãĥ¼ãĤ¯": 105048, + "ĠÙĦÙĦÙħ": 105049, + "ÙģØªÙĩ": 105050, + ".:.": 105051, + "üçük": 105052, + "олева": 105053, + "à¹ĮĊ": 105054, + "ĠпеÑĢев": 105055, + "ĠÙĨسب": 105056, + "еленнÑı": 105057, + "'ın": 105058, + "νÏī": 105059, + "è¡£": 105060, + "ĠدÙĬ": 105061, + "åįĩ": 105062, + "Ġbelirt": 105063, + "Ġ/:": 105064, + "èijī": 105065, + "Ġvyh": 105066, + "çļĦä¸Ģ": 105067, + "èĥĮ": 105068, + "ĠìĹ´": 105069, + "ола": 105070, + "Ġتب": 105071, + "áci": 105072, + "ाà¤ī": 105073, + "à¸İ": 105074, + "çĶ¢": 105075, + "à¥Īल": 105076, + "ĠÙĤØ·": 105077, + "ëĦĪ": 105078, + "ắm": 105079, + "ÑĢÑıд": 105080, + "Ġphụ": 105081, + "ĠÙĪØ§ÙĤع": 105082, + "Ġmerk": 105083, + "Ġchá»ijng": 105084, + "å¯Ł": 105085, + "ابط": 105086, + "usunda": 105087, + "Ġодна": 105088, + "žel": 105089, + "ĠÑģÑĥм": 105090, + "Ġphù": 105091, + "Ġζ": 105092, + "Ġzav": 105093, + "edn": 105094, + "ĠpotÅĻeb": 105095, + "ĠÚ©ÙĨÙĨد": 105096, + "ĠÑĢазв": 105097, + "¿ł": 105098, + "ĠاÙĦز": 105099, + "ĠmÄĽl": 105100, + "ĠÑģÑĤанов": 105101, + "ĠدرÛĮ": 105102, + "Ġtượng": 105103, + "ãģµ": 105104, + "Ġдви": 105105, + "ÑĮÑı": 105106, + "製": 105107, + "ĠتÙĦ": 105108, + "šť": 105109, + "ãģªãĤī": 105110, + "Ġà¤ķà¤Ī": 105111, + "Å¡i": 105112, + "âĢĮاست": 105113, + "Ġkỹ": 105114, + "ë§Ŀ": 105115, + "Ġà¤Ĩà¤ľ": 105116, + "ãĥ´": 105117, + "Ġbá»ı": 105118, + "duÄŁu": 105119, + "Ġæ¯": 105120, + "пеÑĢ": 105121, + "اÙĦÙĬØ©": 105122, + "æīĢ以": 105123, + "åħ°": 105124, + "Ġoran": 105125, + "Ġíŀ": 105126, + "Ïĥία": 105127, + "Ġphá»§": 105128, + "ĠбÑĭла": 105129, + "Ñĩива": 105130, + "Ġê°Ħ": 105131, + "олÑĸ": 105132, + "Ùĥت": 105133, + "åħ§": 105134, + "à¥Ĥà¤Ł": 105135, + "Ġëĸ": 105136, + "ĠÙĦÙĩ": 105137, + "ëłĪìĿ´": 105138, + "Ġhız": 105139, + "å¤ı": 105140, + "ĠæĬķ稿æĹ¥": 105141, + "éļ¾": 105142, + "ĵ°": 105143, + "глÑıд": 105144, + "ìn": 105145, + "ĠмеÑĢ": 105146, + "ĠãĢij": 105147, + "ĠобÑī": 105148, + "umhur": 105149, + "çł´": 105150, + "лиÑģÑĮ": 105151, + "spÄĽ": 105152, + "رÙĬÙĤ": 105153, + "ĠتÙģ": 105154, + "ĠاÙĦÙĪ": 105155, + "çµ±": 105156, + "алоÑģÑĮ": 105157, + "Ġmô": 105158, + "Ġvá»ĩ": 105159, + "Ġδι": 105160, + "Ġзн": 105161, + "ĠبØŃ": 105162, + "تÙī": 105163, + "Ġì§ģ": 105164, + "Ġvelmi": 105165, + "uyá»ħn": 105166, + "Ġphạm": 105167, + "ÑģÑĤвом": 105168, + "ĠÙĪØ§ÙĦÙħ": 105169, + "ĠбÑĭли": 105170, + "اذ": 105171, + "ÄĽÅĻ": 105172, + "âĦĸ": 105173, + "Ġполож": 105174, + "าà¸ģาร": 105175, + "ĠÄįlán": 105176, + "ÎķΡ": 105177, + "ĠìĤ°": 105178, + "βα": 105179, + "ĠæĹ¥æľ¬": 105180, + "زد": 105181, + "ĠÙĨÛĮست": 105182, + "Ġhayat": 105183, + "確": 105184, + "à¹Ģวล": 105185, + "ĠChÃŃnh": 105186, + "ï¼Įæĺ¯": 105187, + "ĠÙĪØ§ØŃ": 105188, + "èı¯": 105189, + "ĠήÏĦαν": 105190, + "Ġxá»Ń": 105191, + "ĠÄįerv": 105192, + "ĠÙħدÛĮر": 105193, + "éĨ": 105194, + "ĠëĪĪ": 105195, + "ç»Ń": 105196, + "Ġtên": 105197, + "ìĸ¸": 105198, + "Ġortaya": 105199, + "Ġжен": 105200, + "ĠnÆ¡i": 105201, + "еннÑĭе": 105202, + "ÑĦекÑĤив": 105203, + "íĿ¬": 105204, + "Ġkhá»ı": 105205, + "ĠÄija": 105206, + "osyal": 105207, + "à¸Ľà¸£à¸°à¹Ģà¸Ĺศ": 105208, + "Ġodst": 105209, + "Ġà¸ĸ": 105210, + "ĠοÏĢο": 105211, + "æĶ¿åºľ": 105212, + "ĠbÃłn": 105213, + "ĠGiá»": 105214, + "Ġolduk": 105215, + "ование": 105216, + "à¸Ńส": 105217, + "Ġнев": 105218, + "ÏĦÏģο": 105219, + "ĠìĨį": 105220, + "kı": 105221, + "Ġबड": 105222, + "ĠÏħÏĢ": 105223, + "ĠVý": 105224, + "ï¾Ħ": 105225, + "çŃĸ": 105226, + "εÏĨ": 105227, + "Ġåħ¨": 105228, + "ĠÙ쨱ÙĪØ´": 105229, + "ÙĤÛĮÙĤ": 105230, + "ä¼ģä¸ļ": 105231, + "εÏį": 105232, + "èĻŁ": 105233, + "Ġayr": 105234, + "ضÙĪ": 105235, + "Å¡el": 105236, + "ĠпÑĸÑģлÑı": 105237, + "ÑĸйÑģ": 105238, + "é¢Ĩ": 105239, + "کتر": 105240, + "лÑĥб": 105241, + "è«ĸ": 105242, + "æ°¸": 105243, + "езпеÑĩ": 105244, + "Ġкам": 105245, + "عداد": 105246, + "ê±°ëŀĺ": 105247, + "ูà¸ĩ": 105248, + "ĠتÙĩراÙĨ": 105249, + "ĠëĦĪ": 105250, + "ÑĢив": 105251, + "ĠÑĤоÑĢ": 105252, + "اÙī": 105253, + "'Ñıз": 105254, + "ÙIJÙĬ": 105255, + "ĠkhÃŃ": 105256, + "ĠÑĪÑĤ": 105257, + "Ġξε": 105258, + "Ġbiri": 105259, + "èĩ´": 105260, + "Ñĥвав": 105261, + "ãģĪãĤĭ": 105262, + "ĠдиÑģ": 105263, + "аÑİÑĤ": 105264, + "صب": 105265, + "åĿĩ": 105266, + "олÑİ": 105267, + "èĭ¥": 105268, + "Ġاث": 105269, + "sou": 105270, + "åIJĥ": 105271, + "ãģ®ãģł": 105272, + "ublik": 105273, + "лей": 105274, + "Âłm": 105275, + "Ġíıīê·ł": 105276, + "ạy": 105277, + "εÏĢ": 105278, + "tık": 105279, + "Ġvyu": 105280, + "عÙĪØ¯": 105281, + "Ġдоз": 105282, + "Ġlá»ĭch": 105283, + "質": 105284, + "à¥ģà¤Ī": 105285, + "ัà¸ŀ": 105286, + "Ġtém": 105287, + "Ġkaç": 105288, + "Ġcái": 105289, + "Ġμα": 105290, + "â̦â̦ãĢįĊĊ": 105291, + "íά": 105292, + "رÙĪÙĩ": 105293, + "Ġrych": 105294, + "ÎijΤ": 105295, + "ĠÑĢÑĸв": 105296, + "ë³ij": 105297, + "åģ¥": 105298, + "Ġzdrav": 105299, + "Ġعدد": 105300, + "èįī": 105301, + "δια": 105302, + "ĠváºŃn": 105303, + "ÑĭÑĤ": 105304, + "ĠколиÑĩ": 105305, + "ÏĮÏĦε": 105306, + "Ġbırak": 105307, + "ĠØŃÙħ": 105308, + "Ġchá»ĭ": 105309, + "é»Ħ": 105310, + "ĠاÙĦÙħتØŃدة": 105311, + "ืà¸Ńà¸ģ": 105312, + "Ġзали": 105313, + "Ġnhanh": 105314, + "âĢĮتÙĪØ§ÙĨ": 105315, + "ëĿ½": 105316, + "ĠتÙĪØ³Ø·": 105317, + "è¦ģæ±Ĥ": 105318, + "алÑĥ": 105319, + "ünkü": 105320, + "ãģªãĤĵ": 105321, + "ĠTrong": 105322, + "à¸Ļะ": 105323, + "åij¼": 105324, + "ĠÙĬÙħ": 105325, + "ики": 105326, + "ĠÑĤÑĥÑĤ": 105327, + "ĠyaÅŁam": 105328, + "Ġmá»įi": 105329, + "éĽĦ": 105330, + "ĠØŃض": 105331, + "ĠавÑĤом": 105332, + "Ġसबस": 105333, + "Ġyếu": 105334, + "ãĤ¹ãĤ¿": 105335, + "Ïĩή": 105336, + "ÑĸÑİ": 105337, + "èĺ": 105338, + "ิย": 105339, + "Ġmev": 105340, + "ického": 105341, + "िह": 105342, + "åŃ£": 105343, + "θή": 105344, + "Ġबढ": 105345, + "ĠاÙĦÙħس": 105346, + "ÏĦοÏħ": 105347, + "ekli": 105348, + "ĠдеÑĢев": 105349, + "å¸Ń": 105350, + "æ²Ļ": 105351, + "ãģ«ãĤĤ": 105352, + "Ġoblast": 105353, + "Ġhá»Ļ": 105354, + "Ġå¹³": 105355, + ".:.:.:.:.:.:.:.:": 105356, + "Ġéĸ": 105357, + "Ġجز": 105358, + "ĠÙĩÙħÚĨ": 105359, + "並": 105360, + "ÑĨеп": 105361, + "ाĊ": 105362, + "ä¸ŃçļĦ": 105363, + "'nın": 105364, + "ĠíķĺëĬĶ": 105365, + "ÑĶÑĹ": 105366, + "Ġبش": 105367, + "åį´": 105368, + "ä¹ł": 105369, + "ĠاطÙĦاعات": 105370, + "Ġë²ł": 105371, + "ĠکردÙĨ": 105372, + "ाड": 105373, + "Ġà¤ħर": 105374, + "ĠHá»į": 105375, + "ĠгÑĢомад": 105376, + "Ġست": 105377, + "ÏĦιÏĤ": 105378, + "Ġancak": 105379, + "Ġог": 105380, + "ĠkteÅĻÃŃ": 105381, + "Ġæ¬": 105382, + "ĠNgh": 105383, + "Ġtedy": 105384, + "ĠÏĢο": 105385, + "Ġquân": 105386, + "ĠбÑĥли": 105387, + "è¯Ĩ": 105388, + "Ġtừng": 105389, + "人çļĦ": 105390, + "ีà¸ģาร": 105391, + "ĠκαÏĦα": 105392, + "Ġpouze": 105393, + "¡ng": 105394, + "Ġآر": 105395, + "ĠÑĤÑĥ": 105396, + "Ġtá»·": 105397, + "ĠDanh": 105398, + "оном": 105399, + "Ñģий": 105400, + "Ġà¹Ģà¸Ķ": 105401, + "£¨": 105402, + "Å¡k": 105403, + "ãĥĥãĥī": 105404, + "ardır": 105405, + "Ġyönet": 105406, + "Ñĥвали": 105407, + "åħĪçĶŁ": 105408, + "ĠÐIJÑĢ": 105409, + "Ġprotože": 105410, + "Ġíģ¬": 105411, + "Ġjednot": 105412, + "Ġtý": 105413, + "éĩĩ": 105414, + "Ġหร": 105415, + "Ġåľ°": 105416, + "红": 105417, + "Ġмолод": 105418, + "iêng": 105419, + "ĠÏĮÏĦι": 105420, + "ĠداشتÙĩ": 105421, + "Ġuygun": 105422, + "ĠопеÑĢа": 105423, + "åı«": 105424, + "Ġап": 105425, + "ĠкÑĥÑĢ": 105426, + "اعة": 105427, + "unuz": 105428, + "ĠìĤ¬ì§Ħ": 105429, + "Ġvô": 105430, + "çok": 105431, + "Ġèģ": 105432, + "ÑĤеÑĢеÑģ": 105433, + "ĠاستاÙĨ": 105434, + "алаÑģÑĮ": 105435, + "à¥ģव": 105436, + "ỳ": 105437, + "Ġlưu": 105438, + "ĠТа": 105439, + "Ġlá»±a": 105440, + "'ÑĶ": 105441, + "Ġüy": 105442, + "ĠÛĮÚ©ÛĮ": 105443, + "æ¾": 105444, + "нем": 105445, + "ĠخاÙĨ": 105446, + "ĠÑįлек": 105447, + "ÙĤاÙĦ": 105448, + "лок": 105449, + "ĠÄijẹp": 105450, + "à¥īल": 105451, + "Ġmůž": 105452, + "ëĭ¤ëĬĶ": 105453, + "ĠíķĺëĤĺ": 105454, + "ÙĦت": 105455, + "çİ°åľ¨": 105456, + "мо": 105457, + "ÏħÏĥ": 105458, + "ãģŁãģ¡": 105459, + "ĠìłĦìĦ¸": 105460, + "à¥įà¤Łà¤°": 105461, + "عات": 105462, + "دÙĪ": 105463, + "俺": 105464, + "楽": 105465, + "森": 105466, + "ĠлиÑģÑĤ": 105467, + "δι": 105468, + "å¯Į": 105469, + "ĠÄijưa": 105470, + "веÑģÑĤи": 105471, + "до": 105472, + "аннÑĸ": 105473, + "Ġüret": 105474, + "Ġgá»įi": 105475, + "ĠÑģвоÑİ": 105476, + "ừng": 105477, + "Ġtất": 105478, + "äºļæ´²": 105479, + "áce": 105480, + "NÃį": 105481, + "ĠÑĢÑĭ": 105482, + "满": 105483, + "ÏģεÏĤ": 105484, + "åħįè´¹": 105485, + "лоÑĤ": 105486, + "æĻº": 105487, + "Ġαγ": 105488, + "Ġà¤ħम": 105489, + "Ġç´": 105490, + "одо": 105491, + "Ñħи": 105492, + "Ġnguá»ĵn": 105493, + "éĥ¨åĪĨ": 105494, + "ваÑĤ": 105495, + "ĠÑĤеб": 105496, + "заÑĨÑĸÑĹ": 105497, + "ĠÐŁÑĢо": 105498, + "عÛĮ": 105499, + "ĠÙĪÙĬ": 105500, + "ëŀľ": 105501, + "Ġneby": 105502, + "ĠجدÛĮد": 105503, + "ÄŁimiz": 105504, + "£½": 105505, + "Ġà¤Ĩत": 105506, + "Ġà¤Ńर": 105507, + "æīĺ": 105508, + "å®īåħ¨": 105509, + "Ġëĵ¤ìĸ´": 105510, + "برد": 105511, + "Ġê²ĥìĿ´": 105512, + "亲": 105513, + "æ°ı": 105514, + "алÑĸз": 105515, + "lack": 105516, + "ĠÙħختÙĦÙģ": 105517, + "اÙĨÙĬØ©": 105518, + "Ġì²Ń": 105519, + "ĠвиÑĤ": 105520, + "Ġhareket": 105521, + "é¨": 105522, + "à¸Ļำ": 105523, + "Ġبرخ": 105524, + "売": 105525, + "Ñĩай": 105526, + "Ġanlat": 105527, + "Ġà¤ħव": 105528, + "ĠاÙ쨲": 105529, + "Ġhết": 105530, + "ĠÚĨÙĨد": 105531, + "éĹľ": 105532, + "пÑĢиÑĶм": 105533, + "gı": 105534, + "Ġkomp": 105535, + "ĠlỼp": 105536, + "Ġmá»Ĺi": 105537, + "à¸Ľà¸£à¸°à¸ģ": 105538, + "Ġhaf": 105539, + "Ġeder": 105540, + "ĠздоÑĢов": 105541, + "à¥Ĥम": 105542, + "본": 105543, + "Ġonun": 105544, + "ĠÙħردÙħ": 105545, + "ĠÐľÐ°ÑĢ": 105546, + "Ġìĸ´ëĸ": 105547, + "ман": 105548, + "ĠÑģилÑĮ": 105549, + "ç¶²": 105550, + "ë¸Ķ": 105551, + "лÑıеÑĤ": 105552, + "ĠнеÑģколÑĮко": 105553, + "landır": 105554, + "Ġвд": 105555, + "ĠÙĨÙĪ": 105556, + "ãģİ": 105557, + "ÑĤин": 105558, + "تش": 105559, + "аний": 105560, + "ĠtÅĻ": 105561, + "ÑģиÑħ": 105562, + "лом": 105563, + "æŃ©": 105564, + "ãİ¡": 105565, + "ĠØŃر": 105566, + "æĭį": 105567, + "enou": 105568, + "Ġвели": 105569, + "Ġδη": 105570, + "ska": 105571, + "主è¦ģ": 105572, + "اÙ쨩": 105573, + "ĠболÑĮÑĪе": 105574, + "ิศ": 105575, + "çĽĬ": 105576, + "ĠÙģÙĤØ·": 105577, + "å¨ģ": 105578, + "ĠhÆ°á»Łng": 105579, + "ĠDoÄŁ": 105580, + "ĠdÃłi": 105581, + "ĠгоÑĤов": 105582, + "Ġвам": 105583, + "âĢī": 105584, + "ाà¤ļ": 105585, + "åħ¸": 105586, + "à¹ĥหà¸į": 105587, + "Ġç«": 105588, + "ektör": 105589, + "Ġвел": 105590, + "ĠÙĦÙĪ": 105591, + "شتÙĩ": 105592, + "æĺ¾": 105593, + "ảy": 105594, + "à¹Ĥม": 105595, + "Ġtá»ķng": 105596, + "ĠповеÑĢÑħ": 105597, + "ÑĹв": 105598, + "Ġphép": 105599, + "çļĩ": 105600, + "ĠпоÑĢÑıд": 105601, + "ĠÑģооÑĤвеÑĤ": 105602, + "à¤Ŀ": 105603, + "ĠÑģебÑı": 105604, + "ĠëĤł": 105605, + "ĠбÑĥла": 105606, + "à¹īาย": 105607, + "ĠãĢĢãĢĢãĢĢãĢĢ": 105608, + "ĠÙħجÙħÙĪØ¹": 105609, + "ï¼Į以": 105610, + "ĠبÙĪØ¯Ùĩ": 105611, + "μÏĮ": 105612, + "Ġíݸ": 105613, + "eÅŁit": 105614, + "ÑİÑīие": 105615, + "ÑİÑīиÑħ": 105616, + "åŁºéĩij": 105617, + "ĠتØŃت": 105618, + "ĠвлаÑģ": 105619, + "lerle": 105620, + "ãĤ²": 105621, + "ëĬĺ": 105622, + "èĵ": 105623, + "manın": 105624, + "ìŀĪ": 105625, + "Ġzast": 105626, + "ĠÑĩеловек": 105627, + "à¥ĩब": 105628, + "peÄį": 105629, + "ĠبرÙĨاÙħÙĩ": 105630, + "Ġslov": 105631, + "ĠnÄĽjak": 105632, + "ê·ľ": 105633, + "à¥ĩह": 105634, + "èŤ": 105635, + "ĠبÛĮشتر": 105636, + "iliz": 105637, + "ĠëĶĶ": 105638, + "ازÙĩ": 105639, + "تد": 105640, + "Ġetm": 105641, + "Ġëĭ¤ë¥¸": 105642, + "Ġvů": 105643, + "å°Ħ": 105644, + "ĠклаÑģ": 105645, + "вÑĢоп": 105646, + "æ´¾": 105647, + "ĠÄijình": 105648, + "ÑĥÑİÑĤ": 105649, + "ÑĥеÑĤÑģÑı": 105650, + "éľ²": 105651, + "ĠÑģкоÑĢ": 105652, + "ĠваÑģ": 105653, + "íķĺìĺĢëĭ¤": 105654, + "Ġداشت": 105655, + "ĠçĦ": 105656, + "Ġ西": 105657, + "ĠκαÏĦά": 105658, + "०": 105659, + "ìĹĨ": 105660, + "ĠخدÙħ": 105661, + "اسÙħ": 105662, + "ÎijΡ": 105663, + "ĠAma": 105664, + "奥": 105665, + "Ġبزرگ": 105666, + "ĠÐĴÑĸн": 105667, + "ĠÅĺ": 105668, + "Ġà¸Īาà¸ģ": 105669, + "ĠÑħаÑĢакÑĤеÑĢ": 105670, + "ĠÄijá»Ļi": 105671, + "ĠÑĢозвиÑĤ": 105672, + "ĠпÑĢоÑĦеÑģ": 105673, + "ĠконÑĤÑĢ": 105674, + "ÎŁÎĽ": 105675, + "Ġminh": 105676, + "ä¼ij": 105677, + "쪽": 105678, + "ĠchÆ¡i": 105679, + "заÑĨии": 105680, + "ĠдÑĸÑıлÑĮ": 105681, + "ëĨ": 105682, + "Ġngay": 105683, + "à¥Ĥà¤Ĥ": 105684, + "Ġihtiy": 105685, + "éĽª": 105686, + "Ġê´Ģ리ìŀIJ": 105687, + "Ġcụ": 105688, + "Ġì§Ī": 105689, + "ÙĬØ«": 105690, + "ặp": 105691, + "ÙĪØ§Ø¹": 105692, + "ãģĤãģ£ãģŁ": 105693, + "Ġçľ": 105694, + "Ġìļ°ë¦¬": 105695, + "à¹Īà¸ĩà¸Ĥ": 105696, + "ĠçŃ": 105697, + ")ØĮ": 105698, + "Ãłm": 105699, + "ÙĦÛĮÙĦ": 105700, + "Ġ걸": 105701, + "алÑĮниÑħ": 105702, + "æĹ¶åĢĻ": 105703, + "undan": 105704, + "ĠGün": 105705, + "Ġtopl": 105706, + "ĠÑĢекомен": 105707, + "ĠاÙĨتخاب": 105708, + "Ãłu": 105709, + "Äįka": 105710, + "ë°Ģ": 105711, + "ĠкÑĢаÑģ": 105712, + "лоп": 105713, + "å¼µ": 105714, + "ĠاÙĦÙħع": 105715, + "mÃŃn": 105716, + "Ġviết": 105717, + "Ġê°ĻìĿĢ": 105718, + "uteÄį": 105719, + "Ġnech": 105720, + "çµĤ": 105721, + "ãģªãģĮ": 105722, + "ayın": 105723, + "ĠÄįin": 105724, + "cházÃŃ": 105725, + "اÙ쨏": 105726, + "ÑĢоваÑĤÑĮ": 105727, + "à¹Ħร": 105728, + "ĠãĤ¤": 105729, + "Ġзаболева": 105730, + "Ġå±±": 105731, + "Ġkadın": 105732, + "ÏĦηÏĤ": 105733, + "алиÑģÑĮ": 105734, + "Ġhük": 105735, + "åĵ¥": 105736, + "ĠпеÑĢи": 105737, + "ÅĻád": 105738, + "Ġà¤ħस": 105739, + "ĠÑģÑĤвоÑĢ": 105740, + "ĠÙĪÛĮÚ©ÛĮ": 105741, + "Ġì¡": 105742, + "Ġcá»Ńa": 105743, + "Ġhiá»ĥu": 105744, + "游æĪı": 105745, + "ÑĮомÑĥ": 105746, + "Ġgó": 105747, + "Ġtoh": 105748, + "Ġбла": 105749, + "Ġåij": 105750, + "Ġпло": 105751, + "иÑĪ": 105752, + "ĠÄijấu": 105753, + "skou": 105754, + "ãĤĪãĤĬ": 105755, + "à¸¹à¸Ľ": 105756, + "Ġrá»ĵi": 105757, + "опÑĢоÑģ": 105758, + "нолог": 105759, + "ĠÑĤÑĢав": 105760, + "ĠWayback": 105761, + "Ġà¹Ĩ": 105762, + "ĠÑĥÑĩаÑģÑĤ": 105763, + "ĠпÑĢепаÑĢа": 105764, + "Ġdạng": 105765, + "ĠÃľn": 105766, + "à¹Ħลà¸Ļ": 105767, + "Ġداخ": 105768, + "ĠsÆ¡": 105769, + "Ġkoy": 105770, + "ëĿ¼ê³ł": 105771, + "ĠÄijúng": 105772, + "à¥ĩà¤Ĥ,": 105773, + "Ġgeçir": 105774, + "ĠÑıкÑīо": 105775, + "ÑģÑĤÑĢо": 105776, + "енÑĤов": 105777, + "Ñĸж": 105778, + "кÑĥÑİ": 105779, + "ĠeÄŁitim": 105780, + "à¥įरस": 105781, + "ĠСп": 105782, + "اتÛĮ": 105783, + "ãģijãĤĭ": 105784, + "ÏĦÏīν": 105785, + "Ġкм": 105786, + "âĸįâĸįâĸįâĸį": 105787, + "jist": 105788, + "ÑĤак": 105789, + "ĠåIJįåīį": 105790, + "é¡Ķ": 105791, + "лÑĭ": 105792, + "Ġkhảo": 105793, + "âĢĻÑı": 105794, + "ĠÙħÙĦÛĮ": 105795, + "lož": 105796, + "Ġìĸ¸": 105797, + "Ġgần": 105798, + "Ġà¤ľà¤°": 105799, + "बर": 105800, + "ÎķΣ": 105801, + "à¸²à¸Ľ": 105802, + "Ġnás": 105803, + "formace": 105804, + "Ġetmek": 105805, + "веÑģÑĤ": 105806, + "ìĸ´ìļĶ": 105807, + "Ġतथ": 105808, + "ĠÑģек": 105809, + "ξη": 105810, + "æ¯Ľ": 105811, + "Bir": 105812, + "ĠìŀĦ": 105813, + "Ġvardır": 105814, + "ÙĪØ§ÙĦ": 105815, + "İR": 105816, + "ované": 105817, + "наÑĢод": 105818, + "à¸Ħำ": 105819, + "emek": 105820, + "ĠÎķÏĢ": 105821, + "ĠÅĻe": 105822, + "ãģ¾ãģĽ": 105823, + "uyá»ĩt": 105824, + "Ġìĸ¼": 105825, + "rů": 105826, + "Ġonu": 105827, + "à¹Ģà¸ķà¸Ńร": 105828, + "одаÑĢ": 105829, + "زÙĩ": 105830, + "Ġkav": 105831, + "онÑĭ": 105832, + "ĠвеÑģ": 105833, + "ìĤ¬ì§Ģ": 105834, + "Ġгла": 105835, + "ÃĿ": 105836, + "ĠÙĤÛĮÙħت": 105837, + "çķ¥": 105838, + "à¸ĸาà¸Ļ": 105839, + "Äįil": 105840, + "Ġä¸ĩ": 105841, + "è¾ĥ": 105842, + "åħħ": 105843, + "ĠÑĢед": 105844, + "มห": 105845, + "amilia": 105846, + "à¥ĩà¤ķर": 105847, + "Ġtá»iji": 105848, + "ÙģÛĮ": 105849, + "ÑĢÑĸÑĪ": 105850, + "ìķł": 105851, + "à¸Ļส": 105852, + "à¸Īร": 105853, + "à¥ĩशन": 105854, + "ĠÙħÙĪØ¶ÙĪØ¹": 105855, + "æī¹": 105856, + "Ġobsah": 105857, + "ĠнавÑĩ": 105858, + "Ġdestek": 105859, + "Ġzas": 105860, + "åĵį": 105861, + "ümüz": 105862, + "ĠçŁ": 105863, + "Ġè¨": 105864, + "Ù¬": 105865, + "ç»Ī": 105866, + "Ġzde": 105867, + "Ġzáp": 105868, + "à¥Ĥसर": 105869, + "ìĿ´ì§Ģ": 105870, + "çļ®": 105871, + "lom": 105872, + "१": 105873, + "ÙĦاÙĤ": 105874, + "à¸Ļà¸ķ": 105875, + "íĮħ": 105876, + "лада": 105877, + "masına": 105878, + "ãģ®ãģ§": 105879, + "ëĵ¤ìĿĦ": 105880, + "Ġнаг": 105881, + "masını": 105882, + "ãĤĿ": 105883, + "ınıf": 105884, + "åĽ´": 105885, + "Ġbölüm": 105886, + "å¥ĸ": 105887, + "æ¨Ļ": 105888, + "ÙĦاØŃ": 105889, + "ĠгоÑģÑĥдаÑĢ": 105890, + "داÙĨÙĦÙĪØ¯": 105891, + "ĠпоÑĤÑĢеб": 105892, + "ĠÑĢоÑĨÑĸ": 105893, + "ога": 105894, + "ĠÑģледÑĥеÑĤ": 105895, + "ĠпаÑĢа": 105896, + "é¼": 105897, + "ãģįãģŁ": 105898, + "ίζ": 105899, + "Ġbá»ij": 105900, + "ÑĤÑĸв": 105901, + "ï¼Į她": 105902, + "familia": 105903, + "éłħ": 105904, + "ĠدÙĦ": 105905, + "Ġskup": 105906, + "еÑĩение": 105907, + "ãģĵãģ¨ãģĮ": 105908, + "à¥Ģब": 105909, + "ุล": 105910, + "¨ë¶Ģ": 105911, + "ĠاÙĦعرب": 105912, + "Ġç¾İ": 105913, + "ĠاÙĦÙħÙĪ": 105914, + "ĠØ¥ÙĨ": 105915, + "Ġnásled": 105916, + "Ġtomu": 105917, + "ÎĦ": 105918, + "Ġзави": 105919, + "Ġnhu": 105920, + "ĠpÅĻedstav": 105921, + "ìłķë³´": 105922, + "okol": 105923, + "ĠкÑĢи": 105924, + "adu": 105925, + "ĠкаÑĤ": 105926, + "ĠÑįÑĦ": 105927, + "вал": 105928, + "mayı": 105929, + "ĠÑĩаÑģÑĤо": 105930, + "Ġtranh": 105931, + "ائÙĦ": 105932, + "ãĤĪãģĨãģª": 105933, + "Ġpoh": 105934, + "ìĥģìľĦ": 105935, + "Ġsắc": 105936, + "Ùĥس": 105937, + "ĠмÑĥ": 105938, + ".::": 105939, + "ëĪ": 105940, + "»Ċ": 105941, + "ĠÙĨÚ¯": 105942, + "ÙIJÙĨ": 105943, + "ником": 105944, + "Ñħа": 105945, + "ĠμοÏħ": 105946, + "ĠNguyá»ħn": 105947, + "ĠвÑĭÑģок": 105948, + "ĠÐŁÐ¾Ð´": 105949, + "ĠпÑĢиÑĢод": 105950, + "à¥ĭध": 105951, + "िà¤ķल": 105952, + "иÑĢа": 105953, + "ëĭ¤ê³ł": 105954, + "ĠmajÃŃ": 105955, + "Ġvùng": 105956, + "Ġtarihinde": 105957, + "ĠваÑĢ": 105958, + "ниÑĤÑĮ": 105959, + "ειÏĤ": 105960, + "Ġåĩº": 105961, + "dyž": 105962, + "ÏĦÏİν": 105963, + "ä½ĵèĤ²": 105964, + "Ġà¹Ģว": 105965, + "Ġà¤ħà¤ļ": 105966, + "ĠاÙĨÚ¯ÙĦÛĮسÛĮ": 105967, + "à¥įयम": 105968, + "ĠgeliÅŁ": 105969, + "æ¹ĸ": 105970, + "Ġاک": 105971, + "Ġплан": 105972, + "kyt": 105973, + "ابÛĮ": 105974, + "κι": 105975, + "Ġchung": 105976, + "ानà¤ķ": 105977, + "sı": 105978, + "Ġtinh": 105979, + "ĠÑģÑĤол": 105980, + "ÑģÑĤÑĢÑĥ": 105981, + "ĠлиÑĪе": 105982, + "ĠвиÑĢоб": 105983, + "ilmiÅŁ": 105984, + "ĠзÑĸ": 105985, + "ç»Ĩ": 105986, + "åĢĴ": 105987, + "ãĤ·ãĥ£": 105988, + "åŃ©": 105989, + "Ġà¹Ĥรà¸ĩà¹Ģร": 105990, + "íĻľ": 105991, + "ĠбÑĥде": 105992, + "ĠyaklaÅŁ": 105993, + "èĩªåĪĨ": 105994, + "ĠÙģÙĪ": 105995, + "СТ": 105996, + "Ġsorun": 105997, + "à¹Ģà¸ł": 105998, + "Ġcô": 105999, + "виÑĩ": 106000, + "ëĵ¤ìĿĺ": 106001, + "Ġtriá»ĩu": 106002, + "Ġrõ": 106003, + "Ġãģ«": 106004, + "ÄŁim": 106005, + "iyoruz": 106006, + "èľ": 106007, + "à¥įरव": 106008, + "Ġسپ": 106009, + "ĠìĦľìļ¸": 106010, + "δε": 106011, + "еÑĢÑĪ": 106012, + "Ġأس": 106013, + "äºŀ": 106014, + "è¯į": 106015, + "пÑĤом": 106016, + "ฤษ": 106017, + "ĠسازÙħاÙĨ": 106018, + "Ġluôn": 106019, + "ÙĩÙĪØ±": 106020, + "cü": 106021, + "аÑĤкÑĥ": 106022, + "Ġolabilir": 106023, + "ĠìĹ°êµ¬": 106024, + "енной": 106025, + "ĠæĪij": 106026, + "Ġнего": 106027, + "Ġ.**************": 106028, + "ิà¸ĺ": 106029, + "ĠãĤ·": 106030, + "تÙģ": 106031, + "ÐŁÑĢо": 106032, + "Ġhakkında": 106033, + "ÄįnÄĽ": 106034, + "ĠMỹ": 106035, + "é½": 106036, + "ĠÏĥÏĦον": 106037, + "Ġâm": 106038, + "§ظ": 106039, + "ĠÅŁirket": 106040, + "æĥħåĨµ": 106041, + "ĠØ¢ÙħÙĪØ²Ø´": 106042, + "λεÏħ": 106043, + "ÙħÙĩ": 106044, + "è¦ı": 106045, + "ã썿ĢĿ": 106046, + "ĠÙĪØ¹": 106047, + "ÏĪη": 106048, + "ÏģοÏį": 106049, + "ĠÂłĊ": 106050, + "δη": 106051, + "ÑĪов": 106052, + "åΤ": 106053, + "Ġmắt": 106054, + "æĭ¿": 106055, + "à¸Ļà¸Ķ": 106056, + "éĻĦ": 106057, + "à¹īม": 106058, + "ĠÄijạt": 106059, + "Ġgüzel": 106060, + "mÃ¼ÅŁ": 106061, + "ÐŀÐĴ": 106062, + "çĭ¬": 106063, + "리를": 106064, + "ĠплаÑĤ": 106065, + "Ġnghá»ĭ": 106066, + "ĠÑĤакиÑħ": 106067, + "биÑĢа": 106068, + "Ġнек": 106069, + "ÑģÑĮкÑĸ": 106070, + "رÙĬاض": 106071, + "onu": 106072, + "à¥ĭम": 106073, + "ĠGiỼi": 106074, + "èŀį": 106075, + "é²": 106076, + "ĠGenel": 106077, + "åĬ¿": 106078, + "ĠвÑĸ": 106079, + "å§IJ": 106080, + "試": 106081, + "ĠжиÑĤÑĤÑı": 106082, + "Ġìĺ¨": 106083, + "åĩºæĿ¥": 106084, + "Ġtá»ij": 106085, + "Ġlao": 106086, + "ίο": 106087, + "Ġγα": 106088, + "ниÑĤелÑĮ": 106089, + "éļİ": 106090, + "Ġвикон": 106091, + "ĠÙģØ¹Ø§ÙĦ": 106092, + "à¹Ģศ": 106093, + "ÏĮγ": 106094, + "ĠоÑĢганиз": 106095, + "ĠемÑĥ": 106096, + "ĠÙĬع": 106097, + "ĠÙħب": 106098, + "ालय": 106099, + "ĠÎľÏĢ": 106100, + "é¸": 106101, + "ùa": 106102, + "길": 106103, + "ĠÄIJiá»ģu": 106104, + "είο": 106105, + "äºī": 106106, + "ượt": 106107, + "ÑĢазÑĥ": 106108, + "ĠоÑĤÑĢим": 106109, + "Ġطب": 106110, + "Ġ以": 106111, + "æĸĹ": 106112, + "ë°±": 106113, + "à¤ĩस": 106114, + "ë§ĮìĽIJ": 106115, + "ãĢģãģĿãģ®": 106116, + "ĠëķĮ문": 106117, + "ĠØ¢ÛĮ": 106118, + "Ð¡Ðł": 106119, + "ضÙĦ": 106120, + "æĵį": 106121, + "kazy": 106122, + "สว": 106123, + "âng": 106124, + "à¤Ĥà¤Ń": 106125, + "нÑĸÑĩ": 106126, + "ัà¸ĩà¸ģ": 106127, + "ĠبررسÛĮ": 106128, + "ردÙĩ": 106129, + "Ġmẫu": 106130, + "à¹Īวà¸ĩ": 106131, + "ĠداÙĨشگاÙĩ": 106132, + "dıģ": 106133, + "ĠTá»ķng": 106134, + "第äºĮ": 106135, + "cÃŃm": 106136, + "Ġböyle": 106137, + "ë¶Ī": 106138, + "ĠÙħÙĨابع": 106139, + "à¥ĥष": 106140, + "еÑĤÑĭ": 106141, + "åĨ·": 106142, + "åĽŃ": 106143, + "ĠتÙĪØ¬Ùĩ": 106144, + "åĪ»": 106145, + "æŀģ": 106146, + "à¤Łà¤¨": 106147, + "лан": 106148, + "ĠíĥĢ": 106149, + "ä½IJ": 106150, + "ĠобÑĭ": 106151, + "å¸Ŀ": 106152, + "커": 106153, + "å®Ī": 106154, + "èµ·æĿ¥": 106155, + "Ġãĥ¬": 106156, + "çİī": 106157, + "à¹Ģหล": 106158, + "ине": 106159, + "หาร": 106160, + "éļı": 106161, + "Ġгаз": 106162, + "ĠاÙĦعÙħÙĦ": 106163, + "à¥ģà¤Ŀ": 106164, + "Ïģιο": 106165, + "Ġvám": 106166, + "ĠعÙĨد": 106167, + "ÙĨدگاÙĨ": 106168, + "ï¼ĮéĤ£": 106169, + "ĠнаÑħод": 106170, + "áno": 106171, + "ÛĮاÙĨ": 106172, + "Ġأع": 106173, + "ĠÑĢади": 106174, + "Ġмене": 106175, + "Ġúda": 106176, + "Ïĩν": 106177, + "ÑĥлÑıÑĢ": 106178, + "à¥Ģप": 106179, + "ĠpoužÃŃ": 106180, + "Ġä¸": 106181, + "ĠÙĤاÙĨÙĪÙĨ": 106182, + "ικοÏį": 106183, + "áy": 106184, + "Ġçöz": 106185, + "ÏĦÏģ": 106186, + "ÙĨاÙħ": 106187, + "ุà¸ķ": 106188, + "åĵª": 106189, + "ÙĬب": 106190, + "ä¹°": 106191, + "ÐĶлÑı": 106192, + "ĠëłĪ벨": 106193, + "ุà¸ļ": 106194, + "нÑĥÑĤи": 106195, + "è½»": 106196, + "Ġξα": 106197, + "Ġè¦": 106198, + "аÑĤков": 106199, + "ĠëĪĦ": 106200, + "Ġtuyá»ĥn": 106201, + "ÙİÙħ": 106202, + "ĠвÑĭпол": 106203, + "Ġstudi": 106204, + "ĠpÅĻek": 106205, + "Ġзам": 106206, + "Ġmateri": 106207, + "åİĭ": 106208, + "Ġал": 106209, + "Ġà¸ļร": 106210, + "Ø·ØŃ": 106211, + "ĠÙħرک": 106212, + "Ġìĭ¬": 106213, + "ĠÙĤابÙĦ": 106214, + "ĠÐIJле": 106215, + "ıntı": 106216, + "Ġå»": 106217, + "İK": 106218, + "ëħĦëıĦ": 106219, + "ÑĭваÑĤÑĮ": 106220, + "Ġdevlet": 106221, + "社ä¼ļ": 106222, + "ëĤł": 106223, + "Ġkolay": 106224, + "ĠÑĢазвиÑĤи": 106225, + "ади": 106226, + "ئÙĬس": 106227, + "adıģı": 106228, + "ÎijÎĽ": 106229, + "Ġhoa": 106230, + "Ġศ": 106231, + "Ä±ÅŁtır": 106232, + "ÑĢÑİ": 106233, + "ĠкаÑĩе": 106234, + "¼åIJĪ": 106235, + "åħ´": 106236, + "Ġê·¸ëŁ¬": 106237, + "ĠмÑĸÑģÑĤ": 106238, + "Ġмне": 106239, + "ãĥ¼ãĤº": 106240, + "ç§Ģ": 106241, + "ĠعÙĦÙĬÙĩ": 106242, + "Ġìĭľê°Ħ": 106243, + "Ġà¤ĺर": 106244, + "ĠÑĥг": 106245, + "åıijå±ķ": 106246, + "Ä±ÅŁÄ±": 106247, + "ĠìĪľ": 106248, + "ĠíĻľ": 106249, + "æ¡£": 106250, + "Ġnokt": 106251, + "lém": 106252, + "еннÑĭй": 106253, + "ĠبÙħ": 106254, + "à¥ĩय": 106255, + "одав": 106256, + "à¹Ĥร": 106257, + "ï¼Įæľī": 106258, + "اÙĬات": 106259, + "اÛĮÙĩ": 106260, + "Ġà¤īपय": 106261, + "ĠsmÄĽ": 106262, + "شد": 106263, + "ШÐIJ": 106264, + "ĠاÙħاÙħ": 106265, + "æ¿Ģ": 106266, + "Ġhoạch": 106267, + "обÑĢаз": 106268, + "à¥ĭह": 106269, + "ĠÑĢебен": 106270, + "иÑĤелÑı": 106271, + "ãģªãģĮãĤī": 106272, + "ساÙĦ": 106273, + "Ġà¸Īำ": 106274, + "Ġخاص": 106275, + "Ġgeri": 106276, + "à¤ĺ": 106277, + "Ġìº": 106278, + "à¹ģà¸Ĺ": 106279, + "âĢĮÛĮ": 106280, + "گرÛĮ": 106281, + "اÙħبر": 106282, + "ÑĪÑĥ": 106283, + "Ġphong": 106284, + "имо": 106285, + "па": 106286, + "Ġìµľê³ł": 106287, + "Ġнам": 106288, + "ostÃŃ": 106289, + "isini": 106290, + "ĠдÑĥже": 106291, + "Ñģком": 106292, + "ĠпÑĢодÑĥк": 106293, + "ÏĮÏĦηÏĦα": 106294, + "aln": 106295, + "isine": 106296, + "è¿ľ": 106297, + "алÑĮной": 106298, + "तर": 106299, + "tıģ": 106300, + "ĠëĴ": 106301, + "è¿ĺæĺ¯": 106302, + "ĠÙħØ«ÙĦ": 106303, + "ìľ¨": 106304, + "ï¾ĺ": 106305, + "åΏ": 106306, + "ç¶ļ": 106307, + "جاد": 106308, + "ĠкÑĥ": 106309, + "åĢij": 106310, + "ovu": 106311, + "ĠsÄ©": 106312, + "ĠìłIJ": 106313, + "ĠÑĥÑĢов": 106314, + "िà¤ļ": 106315, + "ovali": 106316, + "ĠÙĪÙĨ": 106317, + "ĠìĿĮ": 106318, + "Ġкг": 106319, + "าà¸ĺ": 106320, + "ÏĦÏģα": 106321, + "ždy": 106322, + "à¹Įà¸ķ": 106323, + "ĠnÄĽm": 106324, + "ĠЦе": 106325, + "noho": 106326, + "Ġëĭ¤ìĭľ": 106327, + "Ġtéto": 106328, + "Ġbiá»ĥu": 106329, + "ĠYön": 106330, + "Ġpráce": 106331, + "à¥īर": 106332, + "ĠchÃŃ": 106333, + "овой": 106334, + "Ġmợ": 106335, + "說": 106336, + "ÏİÏĤ": 106337, + "волÑı": 106338, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 106339, + "實": 106340, + "é»ŀ": 106341, + "Ġà¤ıव": 106342, + "Ïħνα": 106343, + "岡": 106344, + "không": 106345, + "ĠpÅĻÃŃpadÄĽ": 106346, + "åĹ": 106347, + "ĠبدÙĪÙĨ": 106348, + "Ïĥκε": 106349, + "Ġdikkat": 106350, + "ĠAncak": 106351, + "Ġtiá»ĩn": 106352, + "éĿĻ": 106353, + "ĠìĿ¼ë°ĺ": 106354, + "ĠÄįlen": 106355, + "ìķħ": 106356, + "ाà¤ĩन": 106357, + "ãģ£ãģ¦ãģĦãģŁ": 106358, + "ĠìĿ´ìļ©": 106359, + "ÙĪÙħÛĮ": 106360, + "iná": 106361, + "ặng": 106362, + "ÏİÏģα": 106363, + "ÙĨÙĬØ©": 106364, + "важ": 106365, + "èİ·": 106366, + "å©ļ": 106367, + "ĠÅŁu": 106368, + "ĠãģĬ": 106369, + "Ġدرب": 106370, + "Ġdiá»ħn": 106371, + "ÅĻeba": 106372, + "asının": 106373, + "ç½ijç«Ļ": 106374, + "нÑĮого": 106375, + "ĠاÙĦØ£ÙĪÙĦ": 106376, + "ικÎŃÏĤ": 106377, + "ĠzÃŃsk": 106378, + "оло": 106379, + "ĠÑįÑĤоÑĤ": 106380, + "Ġpokud": 106381, + "è²»": 106382, + "еÑĢÑĸв": 106383, + "ãĥķãĤ£": 106384, + "иÑĤÑĥа": 106385, + "Ġvyd": 106386, + "олож": 106387, + "лÑıÑĤÑĮ": 106388, + "ÙĤÙħ": 106389, + "æ´ĭ": 106390, + "æ§ĭ": 106391, + "ĠغÛĮر": 106392, + "ĠstÅĻed": 106393, + "ظر": 106394, + "Ġhiçbir": 106395, + "θεί": 106396, + "znik": 106397, + "дÑĭ": 106398, + "luv": 106399, + "ĠÙħؤ": 106400, + "ĠگرÙĪÙĩ": 106401, + "Ġï¼īĊ": 106402, + "teri": 106403, + "ĠÏħÏĢο": 106404, + "voj": 106405, + "Ġبعض": 106406, + "Ġbilin": 106407, + "ĠرÙĪØ´": 106408, + "ĠобÑıз": 106409, + "Ġï»": 106410, + "سÙĨ": 106411, + "ĠÏĢα": 106412, + "íį¼": 106413, + "ĠtÃŃn": 106414, + "Ġ´": 106415, + "ìĤ¬ìĿ´íĬ¸": 106416, + "Ġpodob": 106417, + "Ñīее": 106418, + "ĠåįĹ": 106419, + "Ġbych": 106420, + "ози": 106421, + "ĠVÄĥn": 106422, + "ØŃÙĩ": 106423, + "åѦéĻ¢": 106424, + "ĠÅĻekl": 106425, + "립ëĭĪëĭ¤": 106426, + "ĠпÑĢоÑģ": 106427, + "κά": 106428, + "ĠbaÅŁladı": 106429, + "á»§y": 106430, + "Ñİдж": 106431, + "ाà¤ıà¤Ĺ": 106432, + "à¤Ĥà¤ļ": 106433, + "Ġê´Ģ볨": 106434, + "ĠвопÑĢоÑģ": 106435, + "ĠÑģÑĤаÑĤÑĮ": 106436, + "Ġyatırım": 106437, + "нÑĥла": 106438, + "راÙģ": 106439, + "ĠçeÅŁit": 106440, + "Ġà¤īद": 106441, + "央": 106442, + "ĠпоÑıв": 106443, + "åĽ½å®¶": 106444, + "ĠÑģооÑĤвеÑĤÑģÑĤв": 106445, + "ìķ¡": 106446, + "ĠØ®ÙĪØ§Ùĩد": 106447, + "ššÃŃ": 106448, + "ÂłÐ¿": 106449, + "ĠNhÃł": 106450, + "''''": 106451, + "ィ": 106452, + "Ãħ": 106453, + "Ġïº": 106454, + "ĠØ¢ÙħرÛĮÚ©": 106455, + "larımız": 106456, + "جا": 106457, + "ÙģÙĤ": 106458, + "Ġá»": 106459, + "Ġìķł": 106460, + "ĠزباÙĨ": 106461, + "ĠÑĤвоÑĢ": 106462, + "ниÑĩеÑģ": 106463, + "Ġкни": 106464, + "خداÙħ": 106465, + "à¸Łà¸£": 106466, + "Ġì¹ĺ": 106467, + "วาม": 106468, + "ĠÙħÙĩÙħ": 106469, + "Ġstol": 106470, + "Ġedilen": 106471, + "Ġpek": 106472, + "اÙĨات": 106473, + "алÑĮнÑĸ": 106474, + "ĠнеобÑħÑĸд": 106475, + "à¹Ħว": 106476, + "Ġशर": 106477, + "ĠíĮIJ": 106478, + "Òij": 106479, + "Ġним": 106480, + "Ġà¸ĺ": 106481, + "æĺł": 106482, + "äºĴ": 106483, + "ĠbaÅŁar": 106484, + "ži": 106485, + "Ġмног": 106486, + "lendi": 106487, + "ávajÃŃ": 106488, + "nict": 106489, + "ĠдÑĥм": 106490, + "éĻ©": 106491, + "ÏĥÏĥ": 106492, + "iky": 106493, + "алÑĮнÑĭй": 106494, + "ĠÙħÙĨت": 106495, + "å®®": 106496, + "-за": 106497, + "еÑĢк": 106498, + "å¡Ķ": 106499, + "ĠμεÏĦα": 106500, + "oÄŁun": 106501, + "ÎĹÎľ": 106502, + "à¥Īà¤Ĥ।Ċ": 106503, + "Äįky": 106504, + "å¹³åı°": 106505, + "à¥ĭश": 106506, + "Ġona": 106507, + "Ġbec": 106508, + "ì¢": 106509, + "Ġcây": 106510, + "kün": 106511, + "Ġà¤Ī": 106512, + "Ġrá»Ļng": 106513, + "еÑĢб": 106514, + "幸": 106515, + "ï¾IJ": 106516, + "ĠпÑĸдпÑĢиÑĶм": 106517, + "çĶ£": 106518, + "ĠÏĦε": 106519, + "ĠÙĨÙĤØ´": 106520, + "овиÑħ": 106521, + "ĠÙģÙī": 106522, + "Ðļак": 106523, + "ÙİØ±": 106524, + "ĠЩ": 106525, + "алÑĮнÑĭÑħ": 106526, + "Ġküçük": 106527, + "èŃ·": 106528, + "æĭħ": 106529, + "icaret": 106530, + "ĠرÙģØª": 106531, + "Ġодного": 106532, + "ÑĪим": 106533, + "ĠбÑĸ": 106534, + "Ġuygulam": 106535, + "Ġæĭ": 106536, + "ä½Ľ": 106537, + "ucu": 106538, + "dÃŃ": 106539, + "Åĺ": 106540, + "ئة": 106541, + "걸": 106542, + "ÙĮ": 106543, + "ĠÎłÏģο": 106544, + "Ġyerine": 106545, + "ĠÑĸнÑĦоÑĢма": 106546, + "Ġå¤ĸ": 106547, + "ä»ķ": 106548, + "нав": 106549, + "arası": 106550, + "à¸Ńà¸Ļà¹Ħลà¸Ļ": 106551, + "اشت": 106552, + "زÙĬ": 106553, + "æ©ĭ": 106554, + "ĠãĤ«": 106555, + "èĥ½åĬĽ": 106556, + "å¥Ĺ": 106557, + "Ġproh": 106558, + "ĠпÑĢава": 106559, + "Ỽp": 106560, + "Ġà¸Ĥà¸Ńà¸ĩ": 106561, + "Ġë´": 106562, + "Ġlúc": 106563, + "Ġéķ": 106564, + "بÙĪØ¯": 106565, + "rupa": 106566, + "ازÙħ": 106567, + "Ġкан": 106568, + "ılım": 106569, + "ĠÙĩد": 106570, + "ãĢĢĠãĢĢĠãĢĢ": 106571, + "ÑĭваеÑĤ": 106572, + "خاÙĨÙĩ": 106573, + "ÑĥкÑĤ": 106574, + "ĠçĻ¾åº¦": 106575, + "ĠnÄĽco": 106576, + "емон": 106577, + "Ġà¤ħप": 106578, + "ĠÎĮ": 106579, + "ünün": 106580, + "æĸĩåĮĸ": 106581, + "ä¹İ": 106582, + "ä¸ĬçļĦ": 106583, + "ÙĦÙĬÙħ": 106584, + "ĠtÄĽch": 106585, + "اسب": 106586, + "âĢĻÑĶ": 106587, + "ĠÚ¯ÛĮ": 106588, + "Ġê·¼": 106589, + "Ġtrẻ": 106590, + "μÎŃνο": 106591, + "ãģĵãģ¨ãĤĴ": 106592, + "ìĿ´ëĤĺ": 106593, + "åĸĦ": 106594, + "Ġtrả": 106595, + "åĪĨæŀIJ": 106596, + "ĠdÄĽl": 106597, + "ÑĥÑģка": 106598, + "Ġмного": 106599, + "à¥Īर": 106600, + "μαÏĦοÏĤ": 106601, + "ĠmÃŃsto": 106602, + "Ġê°ģ": 106603, + "ĠпÑĢог": 106604, + "baÅŁ": 106605, + "айÑĤе": 106606, + "Ġcá»ķ": 106607, + "å¿ľ": 106608, + "ï¼ģĊ": 106609, + "çı": 106610, + "Ġbirçok": 106611, + "Ġíĺķ": 106612, + "çµĮ": 106613, + "ĠEvrop": 106614, + "ĠÑģоÑĨÑĸ": 106615, + "ä»ĸçļĦ": 106616, + "ĠμÏĢο": 106617, + "å¥Ī": 106618, + "ĠÚ¯ÙĦ": 106619, + "ÙĪÙĦØ©": 106620, + "æµİ": 106621, + "ĠÚ©ÙĪ": 106622, + "±ä¹IJ": 106623, + "ãģĹãģı": 106624, + "纳": 106625, + "ÑģÑĤвенно": 106626, + "éĽ¢": 106627, + "ा.": 106628, + "ĠgerçekleÅŁtir": 106629, + "Ġkır": 106630, + "ì³": 106631, + "ĠгоÑģп": 106632, + "å¹ķ": 106633, + "ìĦ¼": 106634, + "».Ċ": 106635, + "кÑĥÑĢ": 106636, + "ĠرÛĮ": 106637, + "æĽ¾": 106638, + "ÙĪØ±ÙĬ": 106639, + "лекÑģанд": 106640, + "صÙģ": 106641, + "Ġcảnh": 106642, + "å±Ĥ": 106643, + "ãĤĨ": 106644, + "Ġتس": 106645, + "ì°½": 106646, + "기를": 106647, + "Ġà¹Ģà¸Ħ": 106648, + "çŁŃ": 106649, + "ĠÑģÑĤÑĢо": 106650, + "ĠÏĥÏĦιÏĤ": 106651, + "à¥įयव": 106652, + "ĠعÙĦÙħ": 106653, + "ĠÑģиÑĤÑĥа": 106654, + "ĠÑīодо": 106655, + "åIJĽ": 106656, + "Ùħس": 106657, + "ĠоÑĤкÑĢÑĭ": 106658, + "Ġspoj": 106659, + "ĠÄijÄĥng": 106660, + "ĠsavaÅŁ": 106661, + "ีร": 106662, + "ském": 106663, + "Ġè¡Į": 106664, + "é¹": 106665, + "ĠÙĬÙħÙĥÙĨ": 106666, + "овано": 106667, + "ĠпÑĢавилÑĮ": 106668, + "Ġchiếc": 106669, + "èι": 106670, + "éĵ¶": 106671, + "ĠоÑĤд": 106672, + "ĠìĿĢ": 106673, + "íħĶ": 106674, + "ĠNej": 106675, + "оне": 106676, + "Ġkız": 106677, + "ологиÑĩеÑģ": 106678, + "ĠкÑĢаÑĹ": 106679, + "à¸ļà¸Ńล": 106680, + "楼": 106681, + "ĠتÙħاÙħ": 106682, + "ĠبÛĮÙħ": 106683, + "ĠÑģÑĥб": 106684, + "vý": 106685, + "Ñģкие": 106686, + "ëĮĢë¡ľ": 106687, + "????????": 106688, + "abilirsiniz": 106689, + "анÑģов": 106690, + "代表": 106691, + "Ġ매매": 106692, + "ологÑĸÑĩ": 106693, + "μαν": 106694, + "акÑģим": 106695, + "ãĤ¤ãĥ«": 106696, + "Ġtải": 106697, + "ÙħÙĪ": 106698, + "å®Ĺ": 106699, + "nem": 106700, + "Ġkhoản": 106701, + "ĠпаÑĤ": 106702, + "анÑĤа": 106703, + "ĠпомоÑī": 106704, + "Ġvod": 106705, + "Ġkaynak": 106706, + "ÏĥÏĨ": 106707, + "à¥Ĥत": 106708, + "duÄŁ": 106709, + "аÑĤиÑģÑı": 106710, + "Ġç¥ŀ": 106711, + "ĠÑģлова": 106712, + "ÑĢÑĥкÑĤÑĥ": 106713, + "ĠmÄĽsÃŃ": 106714, + "ÙıÙħ": 106715, + "знаÑĩа": 106716, + "Ġèī": 106717, + "åѦçĶŁ": 106718, + "æ´¥": 106719, + "ÙİÙĬ": 106720, + "è§Ī": 106721, + "Ġå®ī": 106722, + "ĠgörÃ¼ÅŁ": 106723, + "álnÄĽ": 106724, + "ĠëͰëĿ¼": 106725, + "ĠÙħÙĪØ¬ÙĪØ¯": 106726, + "ĠÄijứ": 106727, + "ĠçalÄ±ÅŁmalar": 106728, + "ĠÑıкиÑħ": 106729, + "ĠاجتÙħاع": 106730, + "μεν": 106731, + "èİī": 106732, + "积": 106733, + "ì¶ķ": 106734, + "à¥įशन": 106735, + "Ġxét": 106736, + "ĠвÑĤоÑĢ": 106737, + "çİ©": 106738, + "ÂłÐĿ": 106739, + "ÑĪие": 106740, + "оÑĢи": 106741, + "أس": 106742, + "Ġthuá»ijc": 106743, + "ëĭĪê¹Į": 106744, + "ëķĮ": 106745, + "ÑĢÑĥп": 106746, + "ÑģÑıÑĤ": 106747, + "зÑĭ": 106748, + "ĠÑģмеÑĢ": 106749, + "Ġvyb": 106750, + "ĠìĿ´ìĥģ": 106751, + "à¤ļन": 106752, + "Ġgeldi": 106753, + "Û±Û°": 106754, + "ικÏİν": 106755, + "ĠÄIJức": 106756, + "ĠдоÑģÑĤаÑĤ": 106757, + "Ġönc": 106758, + "親": 106759, + "Ġadı": 106760, + "unca": 106761, + "ĠاÙĦتر": 106762, + "çķ¶": 106763, + "ĠФедеÑĢа": 106764, + "лÑıÑİÑĤÑģÑı": 106765, + "ĠÙĥاÙĨت": 106766, + "æİ¢": 106767, + "ĠÑĥб": 106768, + "Ġκο": 106769, + "ाà¤ĩà¤Ł": 106770, + "зн": 106771, + "Ġmôi": 106772, + "ĠãĤµ": 106773, + "ĠнавÑĸ": 106774, + "综åIJĪ": 106775, + "ĠминÑĥÑĤ": 106776, + "dık": 106777, + "ÑĢÑĥд": 106778, + "åľĸ": 106779, + "ê°¤": 106780, + "ĠÄijoÃłn": 106781, + "è¤": 106782, + "à¥įवर": 106783, + "ĠÃľniversit": 106784, + "ано": 106785, + "鼨": 106786, + "ĠvÅ¡echny": 106787, + "Ġëĭ¤ìĿĮ": 106788, + "ĠCumhur": 106789, + "ĠмÑĥз": 106790, + "aÅŁtır": 106791, + "Ġê±°ëŀĺ": 106792, + "Ġé¡": 106793, + "žitÃŃ": 106794, + "Ġà¸Ł": 106795, + "Ġthuế": 106796, + "ĠмÑĥж": 106797, + "ĠÎijν": 106798, + "ĠدÙĪÙħ": 106799, + "ĠÑģин": 106800, + "ĠÏīÏĤ": 106801, + "meler": 106802, + "ĠpoÄį": 106803, + "ĠколиÑĩе": 106804, + "ĠKÄį": 106805, + "è³½": 106806, + "ĠоÑģÑĸб": 106807, + "åı¥": 106808, + "ĠBöl": 106809, + "à¸ĺรรม": 106810, + "Ġcạnh": 106811, + "å°ĩ": 106812, + "ĠноÑģ": 106813, + "èĦ¸": 106814, + "Ġgelir": 106815, + "оÑĢон": 106816, + "à¥įरà¤Ń": 106817, + "ç»ĩ": 106818, + "ุà¹ī": 106819, + "ामल": 106820, + "Ġcâu": 106821, + "ÑijÑĤ": 106822, + "Ġ:|": 106823, + "ãĤĮãģ¦": 106824, + "Ġposled": 106825, + "ãĤ¹ãĥĨ": 106826, + "ÑĸлÑĮÑĪ": 106827, + "енÑĤÑĭ": 106828, + "خدÙħ": 106829, + "ĠباشگاÙĩ": 106830, + "Ġthư": 106831, + "ávánÃŃ": 106832, + "ëĬIJ": 106833, + "ĠØ£ØŃ": 106834, + "راد": 106835, + "ĠبسÛĮار": 106836, + "åΰäºĨ": 106837, + "\";\"": 106838, + "å°İ": 106839, + "Ġör": 106840, + "à¸Ĭาà¸ķ": 106841, + "genus": 106842, + "Ġyakın": 106843, + "ĠÃŃt": 106844, + "regnum": 106845, + "Ġfiyat": 106846, + "нÑĸÑħ": 106847, + "åľ°æĸ¹": 106848, + "Ġbilgi": 106849, + "кам": 106850, + "Ġspol": 106851, + "ائÙĬ": 106852, + "ĠÙĬÙĨ": 106853, + "าหาร": 106854, + "Ġبگ": 106855, + "éĺħ": 106856, + "ĠاÙĦشر": 106857, + "Âģ": 106858, + "ĠÑĸнÑĪиÑħ": 106859, + "Ġtrạng": 106860, + "çģ£": 106861, + "Ġcá»±c": 106862, + "кан": 106863, + "èĭı": 106864, + "ÃĶ": 106865, + "Ġlá»Ŀi": 106866, + "ÑıÑĩ": 106867, + "ĠÙĪØŃ": 106868, + "ìĪľ": 106869, + "Ÿ": 106870, + "ĠвоÑģп": 106871, + "ì¡Į": 106872, + "ÄįnÃŃch": 106873, + "خرÙī": 106874, + "ائÙĬØ©": 106875, + "Ġsuất": 106876, + "æĩī": 106877, + "اØŃÛĮ": 106878, + "Ġnáz": 106879, + "è¿Ļç§į": 106880, + "ĠзабезпеÑĩ": 106881, + "ĠЧеÑĢ": 106882, + "ĠздÑĸйÑģ": 106883, + "åı¦": 106884, + "æĭ¬": 106885, + "à¥ģष": 106886, + "μÏĨ": 106887, + "ëĥIJ": 106888, + "ÐķÑģли": 106889, + "é¬": 106890, + "Ġíĥľ": 106891, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 106892, + "Ġмл": 106893, + "å´İ": 106894, + "Ù쨹": 106895, + "ĠÙĤدر": 106896, + "Ġvá»ijn": 106897, + "妹": 106898, + "ĠÐĿаÑģ": 106899, + "à¥įफ": 106900, + "ãĤ¸ãĥ£": 106901, + "Ġmı": 106902, + "енÑģ": 106903, + "бÑĥд": 106904, + "ĠØŃتÙī": 106905, + "Ġì²´": 106906, + "ĠÑĸÑģÑĤоÑĢ": 106907, + "Ġgiấy": 106908, + "γοÏģ": 106909, + "ëIJĺìĸ´": 106910, + "ĠíĤ": 106911, + "ĠÐŀдна": 106912, + "ĠÙĨÙħÙĪØ¯": 106913, + "Ġвипад": 106914, + "ĠìŀIJìĭł": 106915, + "Ġjste": 106916, + "Ġëĵ±ë¡Ŀ": 106917, + "ekten": 106918, + "ĠÑĢеÑĩ": 106919, + "rodnÃŃ": 106920, + "ستر": 106921, + "ıt": 106922, + "ä¹ħä¹ħ": 106923, + "ĠØ®ÙĦاÙĦ": 106924, + "Ġç¦": 106925, + "uluk": 106926, + "lenen": 106927, + "ilip": 106928, + "è´¢": 106929, + "Ġà¤ħà¤ķ": 106930, + "ĠYıl": 106931, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ": 106932, + "Ġà¤Ŀ": 106933, + "ĠBình": 106934, + "ĠolmuÅŁ": 106935, + "اÙĦØ¥ÙĨجÙĦÙĬزÙĬØ©": 106936, + "менно": 106937, + "alnız": 106938, + "ĠشرÙĥØ©": 106939, + "ĠسÙĨØ©": 106940, + "è´Ł": 106941, + "ä½ľåĵģ": 106942, + "Ġìķ½": 106943, + "ĠдÑĢÑĥгиÑħ": 106944, + "ĠbaÄŁlantı": 106945, + "одÑĥ": 106946, + "çļĦæĺ¯": 106947, + "ัà¸Ļà¸Ķ": 106948, + "ĠкоÑĤоÑĢÑĭÑħ": 106949, + "ĠاÙĦÙĪÙĦ": 106950, + "ê¸ĢìĥģìľĦ": 106951, + "ĠÏĢεÏģ": 106952, + "리ìķĦ": 106953, + "ibar": 106954, + "Ġèĥ": 106955, + "ãģŁãģĦ": 106956, + "áj": 106957, + "ĠìľĦíķ´": 106958, + "?âĢľĊĊ": 106959, + "Ġíİĺ": 106960, + "Ġней": 106961, + "ĠÐĹак": 106962, + "ĠÐĴÑĸд": 106963, + "елÑĸ": 106964, + "课": 106965, + "åī¯": 106966, + "madan": 106967, + "æľ«": 106968, + "ĠÏĢÏģÏĮ": 106969, + "ĠпÑģиÑħ": 106970, + "ĠÑĤÑĸ": 106971, + "Ùĥات": 106972, + "Ġvysok": 106973, + "ê´Ģ리": 106974, + "ültür": 106975, + "Ġà¹Ģà¸Ń": 106976, + "Ġíķ©": 106977, + "çĿ£": 106978, + "ĠÑĢиÑģ": 106979, + "еÑĢÑĮ": 106980, + "ĠÚ©ÙĦÛĮ": 106981, + "Ġãĥŀ": 106982, + "ĠphÃŃa": 106983, + "å«": 106984, + "اگ": 106985, + "Ġé¢": 106986, + "ĠÙĨÙ쨱": 106987, + "ĠجاÙĨ": 106988, + "Ġyas": 106989, + "жениÑı": 106990, + "ĠлÑĥÑĩÑĪе": 106991, + "Ġçº": 106992, + "Ġмон": 106993, + "Ġتخ": 106994, + "ĠØ´ÛĮ": 106995, + "ĠнекоÑĤоÑĢ": 106996, + "алÑĮнÑĭе": 106997, + "Ġobchod": 106998, + "Ġíķ¨ê»ĺ": 106999, + "Ġriêng": 107000, + "ãģķãĤĮãĤĭ": 107001, + "окÑĥ": 107002, + "ĠСШÐIJ": 107003, + "ë§ģ": 107004, + "ĠNếu": 107005, + "ĠAÄŁ": 107006, + "ĠдвеÑĢ": 107007, + "à¥ĭष": 107008, + "Ġkhiến": 107009, + "него": 107010, + "ì±ħ": 107011, + "ัà¸ķร": 107012, + "malı": 107013, + "ĠÙĬا": 107014, + "ç§ijæĬĢ": 107015, + "ืà¸Ļ": 107016, + "หมาย": 107017, + "Ġخص": 107018, + "åĨľ": 107019, + "ÃŃme": 107020, + "ĠÑįÑĤой": 107021, + "ĠìĹħ": 107022, + "Ġä¹": 107023, + "伯": 107024, + "'´": 107025, + "ÙħÙĬÙĦ": 107026, + "à¸Ńà¸ĩà¸Ħ": 107027, + "ková": 107028, + "è¿Ļä¹Ī": 107029, + "ãĢĤæĪij": 107030, + "ìĹIJìĦľëĬĶ": 107031, + "Ġìļ©": 107032, + "ë¹ĦìĬ¤": 107033, + "Ġì¦Ŀ": 107034, + "ITTE": 107035, + "Ġ모ëĵł": 107036, + "ĠspoleÄįnosti": 107037, + "Ġвик": 107038, + "ĠtÅĻÃŃ": 107039, + "é³": 107040, + "ĠØ®ÛĮ": 107041, + "Ġpož": 107042, + "ĠимееÑĤ": 107043, + "ĠdÄĽt": 107044, + "ĠÙħدÙĦ": 107045, + "Ġмо": 107046, + "åįı": 107047, + "enÃŃm": 107048, + "éī": 107049, + "اظ": 107050, + "ĠteÅŁ": 107051, + "ĠveÅĻej": 107052, + "LIC": 107053, + "ì§ĢëĬĶ": 107054, + "ÑĭваÑİÑĤ": 107055, + "ĠоÑĢганÑĸ": 107056, + "nÃŃmi": 107057, + "θÎŃ": 107058, + "ãĤ¯ãĥ©": 107059, + "ãĥ¼ãĥ³": 107060, + "лиÑģÑı": 107061, + "imdi": 107062, + "æĨ": 107063, + "ïºİ": 107064, + "Ġìļ´ìĺģ": 107065, + "καν": 107066, + "Ġë³µ": 107067, + "ĠÐĨн": 107068, + "plication": 107069, + "tah": 107070, + "ĠÐIJв": 107071, + "Ġcá»Ļng": 107072, + "алÑĮноÑĹ": 107073, + "ĠدÙĪØ±Ùĩ": 107074, + "à¥įरय": 107075, + "ĠØ®ÙĪ": 107076, + "ĠвÑĢа": 107077, + "Ø¥ÙĨ": 107078, + "èĤī": 107079, + "Ġoyn": 107080, + "ĠTư": 107081, + "ĠÙĩÙħاÙĨ": 107082, + "ĠбÑĸлÑĮÑĪе": 107083, + "æĮ¯": 107084, + "اÙħØ©": 107085, + "庫": 107086, + "ĠÑĢеж": 107087, + "ĠدارÙĨد": 107088, + "ÑĢий": 107089, + "ĠæĮ": 107090, + "Ġsonuç": 107091, + "Ġtả": 107092, + "ัà¸ĩà¸Ħ": 107093, + "ë°Ľ": 107094, + "Ġмом": 107095, + "виÑĩай": 107096, + ".à¸Ħ": 107097, + "Ġà¤Ĩà¤Ī": 107098, + "åģĩ": 107099, + "Ġposkyt": 107100, + "ĠÑģÑĥп": 107101, + "ıyordu": 107102, + "але": 107103, + "иÑĨ": 107104, + "ĠθÎŃ": 107105, + "ãĤĩãģĨ": 107106, + "ĠÑģвой": 107107, + "มà¸Ļ": 107108, + "Ġnữa": 107109, + "voÅĻ": 107110, + "اسÙĬ": 107111, + "éĴ±": 107112, + "ãģĹãģ¦ãģĦãģŁ": 107113, + "ĠÄijầy": 107114, + "اÙĬر": 107115, + "ĠaraÅŁtır": 107116, + "ì£": 107117, + "ãģ¨ãģ¯": 107118, + "ĠÑģпоÑĢ": 107119, + "Ġê°Ģìŀ¥": 107120, + "è¼ī": 107121, + "âĸ¡": 107122, + "ĠìĻĦ": 107123, + "оÑĢаÑı": 107124, + "Ïģεί": 107125, + "ĠÑįÑĤа": 107126, + "ë©´ìłģ": 107127, + "ìĿ´ìĬ¤": 107128, + "ä½³": 107129, + "æĻļ": 107130, + "Ġkval": 107131, + "Ġná»ķi": 107132, + "ÑĤами": 107133, + "ĠполÑĸÑĤи": 107134, + "Ġİng": 107135, + "нÑĸÑģÑĤÑİ": 107136, + "Ġà¹Ģà¸ģ": 107137, + "Ġ민": 107138, + "èĶ": 107139, + "Ïģία": 107140, + "æİĪ": 107141, + "ĠçĤ": 107142, + "ĠÙĨÙħاÛĮ": 107143, + "Ġìŀ¡": 107144, + "æŀ¶": 107145, + "ابÙĤ": 107146, + "Ñģон": 107147, + "енного": 107148, + "ĠÙħÛĮÙĦÛĮ": 107149, + "Ġkurum": 107150, + "à¹Įส": 107151, + "Ġì´Ŀ": 107152, + "ĠnÄĽkolik": 107153, + "ĠÙĢ": 107154, + "ĠзаÑģÑĤоÑģ": 107155, + "à¸Ķà¸Ļ": 107156, + "ÙĨداÙĨ": 107157, + "ĠJap": 107158, + "éĥ¡": 107159, + "à¥įà¤Ń": 107160, + "Ġà¹Ģà¸Ĭ": 107161, + "ĠâĢ«": 107162, + "é£ŀ": 107163, + "ovatel": 107164, + "ĠÑĩаÑģÑĤÑĮ": 107165, + "Ġbá»ķ": 107166, + "ãĤ¯ãĥª": 107167, + "ิà¹Į": 107168, + "Ġвиде": 107169, + "vail": 107170, + "Ìī": 107171, + "ÄŁinde": 107172, + "ãģ¨ãĤĤ": 107173, + "âĢĮÚ©ÙĨد": 107174, + "ĠëħĦ": 107175, + "ĠاÙĤتص": 107176, + "ï½Ĺ": 107177, + "ÏģιÏĥ": 107178, + "зд": 107179, + "èϽ": 107180, + "Ġthoại": 107181, + "ĠÙĪØ²": 107182, + "ĠmÃŃt": 107183, + "ĠÑħолод": 107184, + "ĠкÑĥп": 107185, + "аниÑħ": 107186, + "Ġnhìn": 107187, + "ãģĭãģª": 107188, + "ĠÐļом": 107189, + "ÏĦεÏģ": 107190, + "ï¼Įåıª": 107191, + "Ġolup": 107192, + "Ġhá»ıi": 107193, + "ëij": 107194, + "ĠnÄĽkter": 107195, + "isÃŃ": 107196, + "ĠвикоÑĢиÑģÑĤов": 107197, + "ìŀ¡": 107198, + "Ġà¤ķल": 107199, + "ĠìľłìłĢ": 107200, + "ĠпÑĢиб": 107201, + "èĭ¦": 107202, + "Ġмов": 107203, + "Ġหà¸Ļ": 107204, + "ëIJĺëĬĶ": 107205, + "око": 107206, + "ĠобеÑģп": 107207, + "Ġkez": 107208, + "лÑıÑħ": 107209, + "ĠпÑĢоиÑģ": 107210, + "Ġповин": 107211, + "ĠÐļоÑĢ": 107212, + "ì¼Ģ": 107213, + "ĠÑģи": 107214, + "Ġä¹ĭ": 107215, + "ĠâĢĶĊ": 107216, + "ÑģÑĥÑĤÑģÑĤв": 107217, + "ç°": 107218, + "Ġà¤ł": 107219, + "наÑĤ": 107220, + "Ġsuy": 107221, + "ĠÑģÑĭ": 107222, + "ĠÙĨشاÙĨ": 107223, + "ĠнапÑĢав": 107224, + "ĠÑĨÑĮомÑĥ": 107225, + "æĺ¯ä¸Ģ": 107226, + "Ġmüm": 107227, + "ÑĶмо": 107228, + "ĠاسÙĦاÙħÛĮ": 107229, + "Ġzamanda": 107230, + "ÙĪÙħاÙĨ": 107231, + "اÙĦØŃ": 107232, + "Å¡tÄĽnÃŃ": 107233, + "ĠÐļак": 107234, + "¤íĶĦ": 107235, + "Ġپرد": 107236, + "Các": 107237, + "εια": 107238, + "ĠجÙĪ": 107239, + "ĠÄijoạn": 107240, + "Ġà¤ĩत": 107241, + "Ġзан": 107242, + "ĠÙħÙĨØ·ÙĤÙĩ": 107243, + "ĠÙħعÙĦ": 107244, + "Ġdokon": 107245, + "åIJ¸": 107246, + "ickou": 107247, + "å°ģ": 107248, + "ĠкиÑģ": 107249, + "ัà¸ĩหว": 107250, + "ispecies": 107251, + "ĠнапÑĢÑı": 107252, + "æºĸ": 107253, + "Ġà¤ľà¤²": 107254, + "à¹Ģà¸ī": 107255, + "LAR": 107256, + "ĠÑĥÑģловиÑı": 107257, + "ĠWikispecies": 107258, + "ระà¸Ķ": 107259, + "Ġmey": 107260, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 107261, + "à¹ĩà¸Ī": 107262, + "å¾Ĵ": 107263, + "tach": 107264, + "umuz": 107265, + "κη": 107266, + "ÃĬ": 107267, + "Ġün": 107268, + "ĠBITTE": 107269, + "ĠÙħربع": 107270, + "ãĤ·ãĥ¥": 107271, + "िसà¤ķ": 107272, + "Ø·ÙĪØ±": 107273, + "ĠвоÑģ": 107274, + "ï¾Ł": 107275, + "Ġyayın": 107276, + "ãģĭãĤĬ": 107277, + "лиÑı": 107278, + "ĠпÑĢин": 107279, + "ijng": 107280, + "ĠÙĨØ®": 107281, + "Ġlze": 107282, + "à¥įषण": 107283, + "Ġбо": 107284, + "Ġê¸Ģ": 107285, + "ĠgeliÅŁtir": 107286, + "à¸Ľà¸£à¸°à¸Ĭ": 107287, + "彡": 107288, + "ĠãĤª": 107289, + "ãģĪãģ¦": 107290, + "нÑĥÑĤÑĮ": 107291, + "Ġç½": 107292, + "Ġмаг": 107293, + "ãģ«ãģ¤": 107294, + "ноÑģÑĤей": 107295, + "ĠÙĦÙĬ": 107296, + "æĢª": 107297, + "ÑıÑĤÑģÑı": 107298, + "à¸ij": 107299, + "ियम": 107300, + "ĠãĢİ": 107301, + "ÑĢÑĮ": 107302, + "Ġmạng": 107303, + "tım": 107304, + "ĠпеÑĢиод": 107305, + "огÑĥ": 107306, + "ĠкоÑĤоÑĢаÑı": 107307, + "리ê°Ģ": 107308, + "Ġãħ¡": 107309, + "ĠجاÛĮ": 107310, + "ĠпоÑĤÑĢÑĸб": 107311, + "Å¡en": 107312, + "à¸Ńะ": 107313, + "بع": 107314, + "ØŁĊ": 107315, + "Ġë°©ë²ķ": 107316, + "ĠгоÑĢод": 107317, + "ĠÐĺн": 107318, + "Ġоказ": 107319, + "رÙĪØ²": 107320, + "ĠiliÅŁk": 107321, + "宣": 107322, + "forman": 107323, + "adaÅŁ": 107324, + "ÙĬÙĦØ©": 107325, + "ĠÐļаÑĢ": 107326, + "Ġmất": 107327, + "æħĭ": 107328, + "мп": 107329, + "à¹Ĥà¸Ļ": 107330, + "ĠØŃÙĤÙĪÙĤ": 107331, + "ĠднÑı": 107332, + "ĠëĴ¤": 107333, + "ाà¤ķर": 107334, + "ì²ĺëŁ¼": 107335, + "âĢĮØ¢": 107336, + "hangi": 107337, + "è¡ĮæĶ¿": 107338, + "aliyet": 107339, + "Ġì²ľ": 107340, + "ĠYap": 107341, + "à¹Ĥรà¸ĩ": 107342, + "ì§Ģëħ¸": 107343, + "ÙİÙij": 107344, + "ÎijÎĻ": 107345, + "ána": 107346, + "andır": 107347, + "ระà¸ļà¸ļ": 107348, + "oÄŁlu": 107349, + "าà¸Īะ": 107350, + "ẩy": 107351, + "اÙĪÙĦ": 107352, + "ĠмаÑĤеÑĢÑĸ": 107353, + "ÎŁÎĿ": 107354, + "Ġinformace": 107355, + "تع": 107356, + "à¸ļà¸Ļ": 107357, + "ĠÄĮeské": 107358, + "Ġtemel": 107359, + "::::::::::::::::::::::::::::::::": 107360, + "Ġchia": 107361, + "-Ñģ": 107362, + "неÑĢг": 107363, + "Ġì°¾": 107364, + "ÑĢид": 107365, + "лоÑģÑĮ": 107366, + "زÙĦ": 107367, + "ê°ĢëĬĶ": 107368, + "ané": 107369, + "ĠнавÑĸÑĤÑĮ": 107370, + "ä¸ĵä¸ļ": 107371, + "Ġ경기": 107372, + "ĠpÅĻev": 107373, + "еÑĤи": 107374, + "ĠíĶĮ": 107375, + "нÑıÑĤ": 107376, + "à¥ģश": 107377, + "лÑİд": 107378, + "виÑī": 107379, + "å°¾": 107380, + "çļĦäºĭ": 107381, + "ĠëIJľ": 107382, + "رÙĪÙģ": 107383, + "Ġ女": 107384, + "κή": 107385, + "ĠTuy": 107386, + "Ġê²ĥìĿĦ": 107387, + "Ġbunu": 107388, + "ĠÑĢазлиÑĩ": 107389, + "ĠDün": 107390, + "ãĤŃãĥ£": 107391, + "ÑĢÑĥÑģ": 107392, + "Ġмм": 107393, + "loven": 107394, + "Ġotev": 107395, + "noloj": 107396, + "ESİ": 107397, + "üp": 107398, + "ĠèĤ": 107399, + "ικÏĮÏĤ": 107400, + "ضاء": 107401, + "ĠпеÑĩ": 107402, + "ÅĻÃŃklad": 107403, + "ãģĵãĤį": 107404, + "Å¡tÃŃ": 107405, + "Ġبرگ": 107406, + "ãģĮãģĤãĤĭ": 107407, + "ÑĸÑģÑĤ": 107408, + "à¥īà¤ķ": 107409, + "ÏĢη": 107410, + "ĠاÙĦÙħست": 107411, + "Ġзай": 107412, + "Ġchương": 107413, + "оÑĤÑĥ": 107414, + "ĠСам": 107415, + "Å¡et": 107416, + "ĠìŀĪìĹĪ": 107417, + "ĠÙģØ§Ø±": 107418, + "Ñĸон": 107419, + "ãĥĹãĥŃ": 107420, + "Ġnhiá»ĩt": 107421, + "inizi": 107422, + "Ġcož": 107423, + "Ġà¤Ĩन": 107424, + "Ġsystém": 107425, + "رÙĪØ¹": 107426, + "ayet": 107427, + "ĠÙ쨱ÙĩÙĨÚ¯": 107428, + "Ġè¶": 107429, + "èģ·": 107430, + "è§Ĥçľĭ": 107431, + "нок": 107432, + "à¸IJาà¸Ļ": 107433, + "êµIJìľ¡": 107434, + "kla": 107435, + "ãĤģãģ¦": 107436, + "ÎķÎĻ": 107437, + "åĿĹ": 107438, + "ĠskuteÄį": 107439, + "à¥Ĥà¤ľ": 107440, + "ãģijãģ¦": 107441, + "NGC": 107442, + "ĠåĢ": 107443, + "ĠÑĢозп": 107444, + "nÃŃků": 107445, + "ãĥ³ãĤ¹": 107446, + "ĠÐĴеÑĢ": 107447, + "Ġyüzde": 107448, + "Ġ미êµŃ": 107449, + "ĠÙħÙī": 107450, + "деÑĢ": 107451, + "ава": 107452, + "Ġmerkez": 107453, + "įng": 107454, + "ĠìĤ¼": 107455, + "ĠÑĢобоÑĤи": 107456, + "ĠнÑĮого": 107457, + "Ġеконом": 107458, + "ĠÑĩеловека": 107459, + "Ġà¸ŀระ": 107460, + "ãĥĴ": 107461, + "ãģ£ãģ¦ãģĦ": 107462, + "ä¼Ĺ": 107463, + "ĠпÑĢодÑĥкÑĤ": 107464, + "Ġyanı": 107465, + "à¥Ģवन": 107466, + "ĠcáºŃp": 107467, + "ĠAvrupa": 107468, + "ाà¤Ń": 107469, + "ĠìłĦìļ©": 107470, + "æķ£": 107471, + "ĠìľĦíķľ": 107472, + "ÑħодиÑĤÑĮ": 107473, + "Ġsınır": 107474, + "ücret": 107475, + "suz": 107476, + "æ¨Ĥ": 107477, + "Ġì°½": 107478, + "ÏģίοÏħ": 107479, + "åĪļ": 107480, + "Ø®ÙĦ": 107481, + "ëłĩê²Į": 107482, + "جد": 107483, + "ĠμαÏĤ": 107484, + "áºŃm": 107485, + "kara": 107486, + "ãĤ«ãĥ¼": 107487, + "Ġkterou": 107488, + "ìĽ¨": 107489, + "ÑĦиÑĨи": 107490, + "oÄŁraf": 107491, + "ĠнапÑĢи": 107492, + "ãģijãģ©": 107493, + "Ġéļ": 107494, + "تباÙĦ": 107495, + "ëŁ½": 107496, + "ì͍": 107497, + "íĮĮìĿ¼": 107498, + "Ïĩα": 107499, + "Ġuzak": 107500, + "Ġdòng": 107501, + "ĠголоÑģ": 107502, + "ÏĥÏĦή": 107503, + "ιλ": 107504, + "Ø·Ùģ": 107505, + "Ġê·¸ëħĢ": 107506, + "ãĤ¿ãĤ¤": 107507, + "اÙĨÚ¯": 107508, + "inou": 107509, + "лон": 107510, + "à¹ĩม": 107511, + "Ġबद": 107512, + "Ġkonusunda": 107513, + "Ġnâng": 107514, + "ãģ¾ãģĽãĤĵ": 107515, + "ÑĥÑİÑĤÑĮÑģÑı": 107516, + "åŁ¹": 107517, + "енко": 107518, + "ìłij": 107519, + "ĠÑĤов": 107520, + "ĠtÅĻeba": 107521, + "زاÙĨ": 107522, + "isyon": 107523, + "Ġген": 107524, + "ĠPokud": 107525, + "âĢĮاÙĨد": 107526, + "ĠгÑĢÑĥд": 107527, + "ĠخرÛĮد": 107528, + "λλα": 107529, + "ĠpÅĻÃŃm": 107530, + "Ġæ³ķ": 107531, + "ĠزÙĨدگÛĮ": 107532, + "ạp": 107533, + "ĠíĬ¸": 107534, + "ĠÄijá»Ļc": 107535, + "Ġê·¸ë¦¬ê³ł": 107536, + "низ": 107537, + "ĠÙĬÙĤ": 107538, + "laÅŁtır": 107539, + "ĠпÑĢаво": 107540, + "ÑĥÑģк": 107541, + "å°½": 107542, + "Ġपड": 107543, + "éĵģ": 107544, + "Ġì·¨": 107545, + "ĠاÙĦبÙĬ": 107546, + "¸": 107547, + "ิมà¸ŀ": 107548, + "ĠsvÄĽ": 107549, + "Ġбал": 107550, + "Ġmôn": 107551, + "ĠDữ": 107552, + "ĠشدÙĨ": 107553, + "ĠÙģÙĦ": 107554, + "Ġvznik": 107555, + "Ġchứ": 107556, + "ĠÑģÑĤÑĢÑĥкÑĤÑĥ": 107557, + "縣": 107558, + "ĠHoa": 107559, + "íĮĢ": 107560, + "ĠÑĢÑĸÑĪ": 107561, + "ĠвоздÑĥ": 107562, + "олÑĮÑĪ": 107563, + "οÏħμε": 107564, + "ูà¸Ļ": 107565, + "ĠпÑĢид": 107566, + "ilmek": 107567, + "ĠاÙĦÙĤر": 107568, + "Įĵ": 107569, + "Ġuç": 107570, + "å¨ĺ": 107571, + "ecektir": 107572, + "ĠíħĮ": 107573, + "ĠεÏħ": 107574, + "Ġhòa": 107575, + "ÏģÏħ": 107576, + "ึà¸ģษา": 107577, + "ĠÑĤеÑħнолог": 107578, + "úi": 107579, + "Ġbilgiler": 107580, + "ĠÙĤاÙĦ": 107581, + "edl": 107582, + "znám": 107583, + "ály": 107584, + "åºĶ该": 107585, + "алÑĮний": 107586, + "аÑĤелÑı": 107587, + "à¸Ļวà¸Ļ": 107588, + "ĠÐŁÐ¾Ð»": 107589, + "à¸ŀà¸Ļ": 107590, + "礼": 107591, + "Ġtasar": 107592, + "ĠÑĤой": 107593, + "ĠмеÑģÑı": 107594, + "ĠиÑģк": 107595, + "Ġपद": 107596, + "γή": 107597, + "اختÙĩ": 107598, + "è¿ĻéĩĮ": 107599, + "Ġchá»īnh": 107600, + "ĠÙĤسÙħ": 107601, + "ÙİÙĩ": 107602, + "erli": 107603, + "åĽ½éĻħ": 107604, + "iliyor": 107605, + "ĠØ´ÙĩرستاÙĨ": 107606, + "Ġvelk": 107607, + "åĽº": 107608, + "ĠбÑĸлÑĮÑĪ": 107609, + "ãĥ¼ãĥĹ": 107610, + "æŁIJ": 107611, + "ì§ľ": 107612, + "ĠÄĮR": 107613, + "Ġдек": 107614, + "ربÛĮ": 107615, + "овиÑĩ": 107616, + "Ġkapsam": 107617, + "ĠÙĦØ£": 107618, + "ĠанÑĤи": 107619, + "Ġücret": 107620, + "견": 107621, + "оÑĢож": 107622, + "ÛĮÙħÛĮ": 107623, + "è©ķ": 107624, + "Ġë§ŀ": 107625, + "ĠÑĢÑıд": 107626, + "ĠÙĩÙħراÙĩ": 107627, + "âr": 107628, + "ابت": 107629, + "ĠиÑģполÑĮзоваÑĤÑĮ": 107630, + "кÑģ": 107631, + "âī¡": 107632, + "Ġolay": 107633, + "èį¯": 107634, + "Ġoprav": 107635, + "ĠدربارÙĩ": 107636, + "Ġä¸ŃåĽ½": 107637, + "илÑģÑı": 107638, + "åį«": 107639, + "ĠاÙĦاست": 107640, + "ÙĪÛĮÛĮ": 107641, + "ÑĢеÑĪ": 107642, + "ĠÙĨس": 107643, + "ãĢĤåľ¨": 107644, + "ĠÙĦØŃ": 107645, + "Ġkorun": 107646, + "ĠÙģØ±Ø¯": 107647, + "ĠобоÑĢ": 107648, + "еÑĪÑĮ": 107649, + "ĠpodmÃŃn": 107650, + "Ġë¬¸ìłľ": 107651, + "ĠdeÄŁerlendir": 107652, + "ä¸įåIJĮ": 107653, + "æ¶²": 107654, + "ाहर": 107655, + "íļį": 107656, + "à¥įà¤ł": 107657, + "иÑĤиÑģÑı": 107658, + "اÙĦع": 107659, + "ĠdvÄĽ": 107660, + "ĠпеÑĢек": 107661, + "Ġåħĥ": 107662, + "Ġaras": 107663, + "Ġaltında": 107664, + "Ġвза": 107665, + "æĴĥ": 107666, + "Ġmilyon": 107667, + "ĠåѦ": 107668, + "ĠваÑĢи": 107669, + "ĠاÙĦعاÙĦÙħ": 107670, + "'Ñı": 107671, + "ÙĪÛĮس": 107672, + "ĠможÑĥÑĤÑĮ": 107673, + "ãģijãģŁ": 107674, + "ìĿ´ìĹĪëĭ¤": 107675, + "οÏįν": 107676, + "ĠéŁ": 107677, + "Ġpostup": 107678, + "üyük": 107679, + "åĪĬ": 107680, + "ĠÙĤب": 107681, + "ĠاصÙĦÛĮ": 107682, + "ÙĪÙī": 107683, + "Ġrepublik": 107684, + "ĠÐĻ": 107685, + "ģm": 107686, + "Ġбел": 107687, + "ा-": 107688, + "Ñģкое": 107689, + "Ġcuá»iji": 107690, + "è²·": 107691, + "ียว": 107692, + "éĩįè¦ģ": 107693, + "ูม": 107694, + "ĠÑĢозвиÑĤкÑĥ": 107695, + "Ġë°±": 107696, + "åĥ¹": 107697, + "Ġåīį": 107698, + "à¹Ħà¸ĭ": 107699, + "ãĢĮâ̦â̦": 107700, + "à¥Įत": 107701, + "کرد": 107702, + "ĠzaÅĻÃŃzenÃŃ": 107703, + "สาร": 107704, + "Ġletech": 107705, + "lemek": 107706, + "人ãģ®": 107707, + "Ġdưỡng": 107708, + "تÙĤ": 107709, + "Ġåĵ": 107710, + "åħ»": 107711, + "Ġëıħ": 107712, + "Ġ루": 107713, + "ذÙĦÙĥ": 107714, + "ĠìĿ¼ë³¸": 107715, + "ĠAyrıca": 107716, + "ĠÙ¾Úĺ": 107717, + "isinin": 107718, + "Ġìĭ¶": 107719, + "Ú¯ÛĮرÛĮ": 107720, + "خصص": 107721, + "³ç´°": 107722, + "ĠмаÑĤеÑĢиал": 107723, + "kové": 107724, + "ë§ī": 107725, + "ãģķãģĽ": 107726, + "ĠÑĤакой": 107727, + "ĠtráºŃn": 107728, + "ĠлиÑĨ": 107729, + "ĠåĽĽ": 107730, + "ÑĩÑĥ": 107731, + "Ġæ°´": 107732, + "Ġdolay": 107733, + "å½¹": 107734, + "ÑĢива": 107735, + "ĠгÑĢÑĥпп": 107736, + "Ġmümkün": 107737, + "лена": 107738, + "ëĿ¼ëĬĶ": 107739, + "åĪ©ç͍": 107740, + "Ġrahat": 107741, + "ï¼ıï¼ıï¼ıï¼ı": 107742, + "æģ©": 107743, + "ĠíķŃ": 107744, + "ĠíĴ": 107745, + "ĠìĬ¹": 107746, + "Ġchân": 107747, + "ĠãĤ¨": 107748, + "Ġжизни": 107749, + "çĸij": 107750, + "ãĢĤä»ĸ": 107751, + "리ìĬ¤": 107752, + "ÑĩиÑħ": 107753, + "Ġé¦ĸ": 107754, + "ÄĽr": 107755, + "ĠйомÑĥ": 107756, + "ĠtháºŃt": 107757, + "Ġìķŀ": 107758, + "cih": 107759, + "سÙĦاÙħ": 107760, + "Ġsiyas": 107761, + "ĠíĸĪ": 107762, + "ĠкоÑĪ": 107763, + "Ïĥαν": 107764, + "ÙĬاÙĨ": 107765, + "Ġdö": 107766, + "ाहत": 107767, + "оÑĢод": 107768, + "оваÑı": 107769, + "ÑĨионалÑĮ": 107770, + "ائÙĩ": 107771, + "Ġà¤ĸर": 107772, + "ĠÄijá»Ŀi": 107773, + "ä¸įä¼ļ": 107774, + "Ùĥز": 107775, + "ีà¸Ħวาม": 107776, + "lıyor": 107777, + "à¥ĭद": 107778, + "Ġì¶©": 107779, + "Ġcá»ij": 107780, + "à¹Ĥà¸ķ": 107781, + "ĠεÏĢί": 107782, + "ĠпÑĢÑıм": 107783, + "æ³°": 107784, + "اÙĦØ©": 107785, + "jÃŃm": 107786, + "Ġби": 107787, + "Å¡em": 107788, + "ĠHá»Ļi": 107789, + "à¸Ħรà¸ĩ": 107790, + "Ġhuyá»ĩn": 107791, + "ç¯Ģ": 107792, + "liÅ¡": 107793, + "ĠجÙĩت": 107794, + "ç§ĭ": 107795, + "ĠÑĨел": 107796, + "ĠлÑĸÑĤ": 107797, + "Ġæ·": 107798, + "жÑĥ": 107799, + "ãģĪãģŁ": 107800, + "ë´ī": 107801, + "Ġ머": 107802, + "åł´åIJĪ": 107803, + "éĿ©": 107804, + "ãĥªãĥ³": 107805, + "егда": 107806, + "Ġbenim": 107807, + "缣": 107808, + "ãģ®ä¸Ń": 107809, + "åĿIJ": 107810, + "ĠÃľniversitesi": 107811, + "ĠkoÅŁ": 107812, + "Ġпож": 107813, + "iá»ĩp": 107814, + "ĠpÅĻij": 107815, + "ëŀ¨": 107816, + "ĠاÙĦأس": 107817, + "árnÃŃ": 107818, + "iếm": 107819, + "ĠèĬ": 107820, + "Ġδε": 107821, + "娱ä¹IJ": 107822, + "Ġưu": 107823, + "ĠçĦ¡": 107824, + "ĠгÑĢи": 107825, + "ĠпоÑįÑĤомÑĥ": 107826, + "ĠÄijóng": 107827, + "جاÙĨ": 107828, + "Ġnghiên": 107829, + "ĠاÙĦاÙĨ": 107830, + "ÑĪей": 107831, + "à¹ģรà¸ģ": 107832, + "ĠÚĨÙĩار": 107833, + "ÑİÑīий": 107834, + "ÏĮÏģ": 107835, + "ĠرÙħ": 107836, + "ì²ł": 107837, + "ĠدستگاÙĩ": 107838, + "ĠدÛĮد": 107839, + "ãĥĥãĤ¯ãĤ¹": 107840, + "ामन": 107841, + "ĠThÃłnh": 107842, + "Ġthẩm": 107843, + "ĠcÃłng": 107844, + "ĠdönÃ¼ÅŁ": 107845, + "ĠпÑĢигоÑĤов": 107846, + "ĠkiÅŁi": 107847, + "ØŃت": 107848, + "Ġë²ķ": 107849, + "é£Ľ": 107850, + "Ġitibar": 107851, + "Ġглав": 107852, + "Ġortam": 107853, + "Ġmadd": 107854, + "ĠоÑģÑĤав": 107855, + "ĠÙģÙĪØªØ¨Ø§ÙĦ": 107856, + "ĠanlaÅŁ": 107857, + "leyen": 107858, + "ç´Ģ": 107859, + "Ġé£": 107860, + "/lo": 107861, + "ÙħÙĪÙĦ": 107862, + "ĠдÑĥÑħ": 107863, + "ĠÙĦب": 107864, + "лег": 107865, + "Ġgönder": 107866, + "ÙĬØ·": 107867, + "Ġสำ": 107868, + "Ġvás": 107869, + "ĠÐŁÐµÑĤ": 107870, + "алоÑģÑı": 107871, + "ì¿ł": 107872, + "éϽ": 107873, + "åĸ®": 107874, + "èĪŀ": 107875, + "нÑĥл": 107876, + "ÄŁine": 107877, + "Ġghi": 107878, + "Ġçµ": 107879, + "ÙĬÙĨÙĬ": 107880, + "Ž": 107881, + "Ġhüküm": 107882, + "ĠDÄ±ÅŁ": 107883, + "ĠÎŃÏĩει": 107884, + "ĠÑģка": 107885, + "ĠÑĤим": 107886, + "ĠпоÑģÑĤав": 107887, + "à¸Ļาà¸Ķ": 107888, + "dül": 107889, + "Ġdva": 107890, + "Ġà¸Ħà¸Ļ": 107891, + "Ġchá»ĭu": 107892, + "Ġèı": 107893, + "à¹ģสà¸Ķà¸ĩ": 107894, + "æ°£": 107895, + "Ġíά": 107896, + "ĠÑĩин": 107897, + "ãģ«ãģĬ": 107898, + "енноÑģÑĤи": 107899, + "ÐIJÐĿ": 107900, + "Ġhemen": 107901, + "Ġait": 107902, + "Ġà¤Ĭ": 107903, + "æī§": 107904, + "ĠABD": 107905, + "Ġκαθ": 107906, + "æ´Ľ": 107907, + "ãĤ¢ãĥ«": 107908, + "à¹īาà¸Ĺ": 107909, + "ÅĻez": 107910, + "dÄĽji": 107911, + "Ġtá»ĭch": 107912, + "еннÑıм": 107913, + "ĠвÑģÑĤанов": 107914, + "ĠاÙĦبر": 107915, + "ÙĪÙħتر": 107916, + "kách": 107917, + "åºĬ": 107918, + "лÑĥж": 107919, + "Ġتد": 107920, + "丽": 107921, + "رخ": 107922, + "à¤Ĥà¤ĸ": 107923, + "èĩªå·±çļĦ": 107924, + "å®ĺç½ij": 107925, + "-Ñı": 107926, + "à¹ĩà¸Ķ": 107927, + "èĦļ": 107928, + "Ġçķ": 107929, + "Ġiçerisinde": 107930, + "Ġbiá»ĥn": 107931, + "Ġà¸ģล": 107932, + "ĠyaÄŁ": 107933, + "Ġæ´": 107934, + "ĠбÑĢа": 107935, + "عار": 107936, + "æĪ°": 107937, + "à¥ĢĊ": 107938, + "ĠléÄį": 107939, + "aların": 107940, + "ĠÎĸ": 107941, + "аÑĢÑı": 107942, + "ãģĿãĤĵãģª": 107943, + "ÅĪuje": 107944, + "ãĢĢĠ": 107945, + "ĠsaÄŁlık": 107946, + "ĠдоÑģлÑĸд": 107947, + "ÃŃÅ¡": 107948, + "à¥įरश": 107949, + "à¥īन": 107950, + "Ġgiả": 107951, + "بÙĪØ§Ø³Ø·Ø©": 107952, + "å®ģ": 107953, + "Ġsoud": 107954, + "ĠкÑĤо": 107955, + "esel": 107956, + "Ġпам": 107957, + "ĠÂłĠ": 107958, + "ĠÄįlov": 107959, + "æ··": 107960, + "หà¸į": 107961, + "ĠOsman": 107962, + "æ¦Ĥ": 107963, + "Ġåĭ": 107964, + "ï¼Įåħ¶": 107965, + "Ġà¸Ħร": 107966, + "Ġmá»ģm": 107967, + "ĠÑģоÑĢ": 107968, + "çĨ±": 107969, + "Ġthuê": 107970, + "رج": 107971, + "à¹Ĥลà¸ģ": 107972, + "Ġíķĺê³ł": 107973, + "ÙĬدة": 107974, + "ĠaÅŁaģı": 107975, + "Ġká»ĥ": 107976, + "à¸ķำ": 107977, + "λει": 107978, + "çļĦè¯Ŀ": 107979, + "æ±ł": 107980, + "ĠÑģÑĤен": 107981, + "Ġincel": 107982, + "åºŃ": 107983, + "ÑĤоÑĩ": 107984, + "Ġproblém": 107985, + "ÏĦÏĥ": 107986, + "à¹īà¸Ńà¸Ļ": 107987, + "ë³´ëĭ¤": 107988, + "Ġà¤Ĩà¤Ĺ": 107989, + "ναÏĤ": 107990, + "ãģĦãĤĭ": 107991, + "Ġdục": 107992, + "Ġtohoto": 107993, + "ëIJĺìĹĪëĭ¤": 107994, + "TJ": 107995, + "ĠвизнаÑĩ": 107996, + "ĠBunun": 107997, + "à¤Ĥबर": 107998, + "ĠÙĩÙħÚĨÙĨÛĮÙĨ": 107999, + "ĠбÑİдж": 108000, + "ÑĥÑĢг": 108001, + "亮": 108002, + "Ġμεγ": 108003, + "Ġtoplum": 108004, + "ãģ£ãģ": 108005, + "оÑĤо": 108006, + ":|": 108007, + "éĿŀ常": 108008, + "ิà¸Ĺà¸ĺ": 108009, + "éģķ": 108010, + "âĢĮپدÛĮ": 108011, + "ĠзÑĢоб": 108012, + "à¹Įà¸Ķ": 108013, + "Ġдолжен": 108014, + "ĠmÄĽsta": 108015, + "ÛĮØ´Ùĩ": 108016, + "vatel": 108017, + "Ġprovoz": 108018, + "Ġinan": 108019, + "à¤Ĥप": 108020, + "Ġparç": 108021, + "ÑĢаÑģÑĤ": 108022, + "ümü": 108023, + "Ġgiá»ijng": 108024, + "欢": 108025, + "Ø«ÙĬر": 108026, + "ĠBakan": 108027, + "Ġâ΍": 108028, + "ĠباÙĨ": 108029, + "Û±Û¸": 108030, + "ãĤĤãģĨ": 108031, + "landı": 108032, + "Ġyeniden": 108033, + "ÑĨенÑĤ": 108034, + "ĠдеÑıÑĤелÑĮ": 108035, + "Щ": 108036, + "Ġrov": 108037, + "å®Įåħ¨": 108038, + "ĠKỳ": 108039, + "slu": 108040, + "Ġlấy": 108041, + "é¤IJ": 108042, + "ĠÑĩолов": 108043, + "ä¼Ŀ": 108044, + "ĠbaÅŁv": 108045, + "å°Ī": 108046, + "곡": 108047, + "ãĢģãģĿãĤĮ": 108048, + "ĠPÅĻÃŃ": 108049, + "дем": 108050, + "ĠпÑĢоек": 108051, + "รà¸ĸ": 108052, + "建设": 108053, + "Ġможлив": 108054, + "殺": 108055, + "ãģ¡ãĤĥãĤĵ": 108056, + "æķij": 108057, + "ĠÄįty": 108058, + "é¦Ĩ": 108059, + "оÑĢÑĥ": 108060, + "ĠæĦ": 108061, + "ĠkÃŃch": 108062, + "λοÏħ": 108063, + "ãģĦãģ¤": 108064, + "ĠcÄĥn": 108065, + "ẵ": 108066, + "Ġelde": 108067, + "麻": 108068, + "ÄŁe": 108069, + "ĠdobÄĽ": 108070, + "ायर": 108071, + "Ġãĥı": 108072, + "нен": 108073, + "Ġmůžete": 108074, + "ĠнаÑģÑĤÑĥп": 108075, + "ìĭľê°Ħ": 108076, + "ĠÑģимпÑĤом": 108077, + "ĠÏĥÏį": 108078, + "ĠسÙĦ": 108079, + "εκ": 108080, + "รà¸ĵ": 108081, + "áte": 108082, + "ekler": 108083, + "ĠвÑĢемени": 108084, + "âĢĮÙĩاÛĮÛĮ": 108085, + "ãģĬãĤĬ": 108086, + "жи": 108087, + "ÑĭваеÑĤÑģÑı": 108088, + "ÙħاÙĨÛĮ": 108089, + "à¸ķล": 108090, + "Ġصد": 108091, + "Ġвол": 108092, + "ìĬĪ": 108093, + "ĠÙĥÙħا": 108094, + "Ġnhằm": 108095, + "èģ¯": 108096, + "ovacÃŃ": 108097, + "Ġë§Įëĵ¤": 108098, + "ÙĪÙ¾": 108099, + "Ġë¸Į": 108100, + "بÙĬØ©": 108101, + "uyla": 108102, + "лено": 108103, + "èĮ¶": 108104, + "ÑĢей": 108105, + "Ġkli": 108106, + "Ġüzerinden": 108107, + "неÑĤ": 108108, + "raÄį": 108109, + "ĠпÑĢаÑĨÑİ": 108110, + "Ġediyor": 108111, + "ãģıãģł": 108112, + "ĠÄįast": 108113, + "iyi": 108114, + "éĬĢ": 108115, + "Ġdù": 108116, + "ÙİØ¨": 108117, + "ÙĪÙĬØ©": 108118, + "åª": 108119, + "Ġsınıf": 108120, + "Ġساعت": 108121, + "Ġราย": 108122, + "ĠзаÑıв": 108123, + "Ġgặp": 108124, + "à¸Ńว": 108125, + "ĠØ«Ùħ": 108126, + "ĠZá": 108127, + "ĠвÑĸдк": 108128, + "izik": 108129, + "Ġmón": 108130, + "ĠповÑĭÑĪ": 108131, + "Ġà¸ļาà¸Ĺ": 108132, + "ĠÑģил": 108133, + "æĥħåł±": 108134, + "Âłt": 108135, + "ĠÐľÐ¾Ñģк": 108136, + "Ġê²ĥìĿ´ëĭ¤": 108137, + "ĠçIJ": 108138, + "ĠÙħدÛĮرÛĮت": 108139, + "овоÑĹ": 108140, + "Το": 108141, + "纪": 108142, + "нÑĸÑĪе": 108143, + "ĠÐĽÑİ": 108144, + "ηÏĥη": 108145, + "ĠÙĨسبت": 108146, + "muz": 108147, + "รว": 108148, + "ãĢģãģĤ": 108149, + "Ġболез": 108150, + "Ġtrách": 108151, + "ãĥ¦": 108152, + "à¹Ģà¸Ĥา": 108153, + "Ġê·¸ëĬĶ": 108154, + "برÛĮ": 108155, + "æłª": 108156, + "ëĿ¼ìĿ´": 108157, + "ĠíĮ¨": 108158, + "íĬ¹": 108159, + "ľ´": 108160, + "िड": 108161, + "ÑĢоме": 108162, + "讲": 108163, + "ĠÑĤон": 108164, + "ÑģÑĸ": 108165, + "Ġç®": 108166, + "åıĸãĤĬ": 108167, + "ì°°": 108168, + "ĠÙĪÙĦÛĮ": 108169, + "ĠسطØŃ": 108170, + "èıľ": 108171, + "нами": 108172, + "Türk": 108173, + "åİĤ": 108174, + "Ġfinan": 108175, + "ãģ«ãģªãĤĭ": 108176, + "Ġoby": 108177, + "Trong": 108178, + "Ġvyp": 108179, + "à¥ģड": 108180, + "ìŀIJê°Ģ": 108181, + "ĠæīĢ": 108182, + "ÐĹа": 108183, + "umlu": 108184, + "ëĵĿ": 108185, + "ĠменÑĸ": 108186, + "олниÑĤелÑĮ": 108187, + "ĠúÄįin": 108188, + "Ġbunun": 108189, + "ĠÐłÐ¾ÑģÑģии": 108190, + "вÑģÑı": 108191, + "ĠнÑĸж": 108192, + "ิà¸Ķà¸ķ": 108193, + "غة": 108194, + "Äļ": 108195, + "ĠسÙħ": 108196, + "ĠÐĺз": 108197, + "à¥ĩप": 108198, + "大çļĦ": 108199, + "ì¹ľ": 108200, + "ĠиÑģÑĤ": 108201, + "ĠконÑģÑĤÑĢÑĥк": 108202, + "Û±Û²": 108203, + "âl": 108204, + "ĠÑĪиÑĢ": 108205, + "ï¼ł": 108206, + "Ġartık": 108207, + "æŁĵ": 108208, + "乡": 108209, + "ÃŃte": 108210, + "ĠNháºŃt": 108211, + "ĠÎĶη": 108212, + "Ġölç": 108213, + "êµ´": 108214, + "оÑıн": 108215, + "ëĵ±ë¡Ŀ": 108216, + "Ġngân": 108217, + "ĠбÑĥдÑĮ": 108218, + "ÎŁÎ¡": 108219, + "ì´": 108220, + "ÙħÙĪØ¯": 108221, + "νον": 108222, + "ÎķÎĿ": 108223, + "çijŀ": 108224, + "ĠÅĻek": 108225, + "-âĢIJ": 108226, + "ĠMerk": 108227, + "ĠопÑĢедел": 108228, + "Ïģιν": 108229, + "лаб": 108230, + "ëĦ¤ìļĶ": 108231, + "Ġблиз": 108232, + "Ġphá»iji": 108233, + "ĠдолжнÑĭ": 108234, + "ĠÑįкÑģп": 108235, + "à¸ļà¸Ĺ": 108236, + "à¸Ľà¸£à¸°à¸ª": 108237, + "ĠÙ¾ÚĺÙĪÙĩ": 108238, + "Ġíķľëĭ¤": 108239, + "ÏĦοÏį": 108240, + "ÙĩÙĨ": 108241, + "Ġдод": 108242, + "Ġkayı": 108243, + "Łģ": 108244, + "ÑģиÑı": 108245, + "à¤Ĥतर": 108246, + "Ġpodnik": 108247, + "evi": 108248, + "ÛĮÛĮر": 108249, + "Так": 108250, + "коп": 108251, + "наÑħ": 108252, + "اسÙĩ": 108253, + "à¸ĵà¸ij": 108254, + "Ġkhá": 108255, + "Ġyarat": 108256, + "ĠاÛĮÙĨÚ©Ùĩ": 108257, + "طبÙĬ": 108258, + "Ġsır": 108259, + "ĠØ¢ÙħرÛĮکا": 108260, + "Ġबल": 108261, + "kaç": 108262, + "Ġåı¯": 108263, + "Ġåħ¶": 108264, + ".***": 108265, + "лÑĸннÑı": 108266, + "ä¹±": 108267, + "oq": 108268, + "æ¦": 108269, + "ãĤ¼": 108270, + "Ġfır": 108271, + "Ġkê": 108272, + "Ġìłľê³µ": 108273, + "ĠÏĥη": 108274, + "анÑĭ": 108275, + "нова": 108276, + "à¸Ĭาย": 108277, + "ĠØ·ÙĪÙĦ": 108278, + "à¥Īय": 108279, + "Ġì¹ľ": 108280, + "ìĤ´": 108281, + "ĠпÑĸв": 108282, + "ĠluáºŃn": 108283, + "Ġà¤īम": 108284, + "åºĥ": 108285, + "à¹ĩà¸Ńà¸ķ": 108286, + "ĠساÛĮت": 108287, + "лÑıн": 108288, + "ĠíķĦìļĶ": 108289, + "Ġgörül": 108290, + "ĠÑĤеÑĢиÑĤоÑĢ": 108291, + "ĠÙĨØŃ": 108292, + "ема": 108293, + "Ġmnoh": 108294, + "Ġãģ¯": 108295, + "غÙĬر": 108296, + "ĠÑģделаÑĤÑĮ": 108297, + "çģµ": 108298, + "ĠÐłÐ°Ð·": 108299, + "ĠгеÑĢ": 108300, + "γμα": 108301, + "íķĺë©´": 108302, + "ĠdeÄŁiÅŁtir": 108303, + "ãĥ³ãĥĨ": 108304, + "å¸Ĥåľº": 108305, + "个人": 108306, + "ìĥĪ": 108307, + "침": 108308, + "èīº": 108309, + "ÙĤت": 108310, + "ĠگرÙģØªÙĩ": 108311, + "Ġçİĭ": 108312, + "ĠاÙĦذÙĩ": 108313, + "λÏħ": 108314, + "à¤ľà¤°": 108315, + "Ġвним": 108316, + "ë¦Ń": 108317, + "ิà¸Ĺ": 108318, + "ĠشاÙĩ": 108319, + "æĬķèµĦ": 108320, + "æĿIJæĸĻ": 108321, + "ĠÙĨÙģ": 108322, + "説": 108323, + "æĬĹ": 108324, + "Ġаб": 108325, + "iyeti": 108326, + "ç¾ħ": 108327, + "ÑĢÑĸз": 108328, + "Ġสม": 108329, + "icÃŃ": 108330, + "кÑĥваннÑı": 108331, + "Ġìķ¼": 108332, + "Ġè½": 108333, + "âĢ«": 108334, + "Ġδιά": 108335, + "Ġдеп": 108336, + "ãĥ¼ãĤ¿": 108337, + "Ġobjev": 108338, + "ména": 108339, + "Ġbelg": 108340, + "Ġæ¥": 108341, + "Ġná»ģn": 108342, + "Ġгол": 108343, + "Ġpostav": 108344, + "Ġتک": 108345, + "Ы": 108346, + "ĠпÑĸдÑĤ": 108347, + "ĠоÑĤноÑĪ": 108348, + "ĠпÑĢив": 108349, + "ĠåŁº": 108350, + "Ġнали": 108351, + "ůž": 108352, + "Ġyat": 108353, + "ÅŁa": 108354, + "ÏĦήÏĤ": 108355, + "ÑĨем": 108356, + "次æķ°": 108357, + "ĠbÃł": 108358, + "ÙĪÙĥ": 108359, + "ĠíĶĦë¡ľ": 108360, + "ĠPháp": 108361, + "Ġêµ°": 108362, + "è³ŀ": 108363, + "Ġochran": 108364, + "Ġgerekir": 108365, + "Ġíļ": 108366, + "à¸ļล": 108367, + "áme": 108368, + "ĠبÛĮر": 108369, + "à¸Ĥาย": 108370, + "ований": 108371, + "Ġmožné": 108372, + "âĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģ": 108373, + "álu": 108374, + "нÑĤ": 108375, + "¦æĥħ": 108376, + "à¹ģรม": 108377, + "ĠÑĦÑĸн": 108378, + "Ġİç": 108379, + "à¹Īà¸Ńย": 108380, + "겨": 108381, + "Ġhedef": 108382, + "ĠاÙĦÙħØ´": 108383, + "à¹īาม": 108384, + "å¯Ħ": 108385, + "Ġëĭµ": 108386, + "Ġô": 108387, + "лаÑģÑı": 108388, + "İT": 108389, + "à¸Ķำ": 108390, + "Ġherhangi": 108391, + "Ġgereken": 108392, + "еÑĢеж": 108393, + "ÙĪØ©": 108394, + "ĠpÅĻest": 108395, + "ç§ijåѦ": 108396, + "оÑģÑĤаÑĤ": 108397, + "ünden": 108398, + "åĮħæĭ¬": 108399, + "ĠدÙĩد": 108400, + "ÑĪиÑģÑĮ": 108401, + "неÑĢ": 108402, + "Ñĸдом": 108403, + "Ġbiç": 108404, + "ìĭŃ": 108405, + "Ġhodnot": 108406, + "ĠzemÄĽ": 108407, + "ĠاÛĮجاد": 108408, + "Ġyine": 108409, + "िण": 108410, + "ĠاÙĦبÙĦ": 108411, + "ĠNÄĽ": 108412, + "Ġpolož": 108413, + "éĺħ读": 108414, + "å¸ģ": 108415, + "å¼Ł": 108416, + "ξε": 108417, + "ĠMá»Ļt": 108418, + "ç£": 108419, + "Û±Û³Û¹": 108420, + "Ġآز": 108421, + "ãģŀ": 108422, + "ĠмеÑħ": 108423, + "ยม": 108424, + "Ġæ¨": 108425, + "Ġotur": 108426, + "Ġdầu": 108427, + "Ġëĭ¤ìļ´": 108428, + "çĮ«": 108429, + "ĠCó": 108430, + "ĠlidÃŃ": 108431, + "ĠarkadaÅŁ": 108432, + "Ġαλλά": 108433, + "é¡»": 108434, + "ĠÙĩÙħÛĮÙĨ": 108435, + "転": 108436, + "ĠâĹĭ": 108437, + "ëıĦë¡Ŀ": 108438, + "Âĥ": 108439, + "âĢĮشدÙĩ": 108440, + "ĠØŃÙĬØ«": 108441, + "Ġnhóm": 108442, + "ÏĥÏĩ": 108443, + "ĠÑĤÑĢанÑģп": 108444, + "Ġtanım": 108445, + "ç´į": 108446, + "Ġbahis": 108447, + "举": 108448, + "ĠинÑĦоÑĢма": 108449, + "ĠÑģлож": 108450, + "Ġkraj": 108451, + "ĠØŃÙĦ": 108452, + "Ġãĥĸ": 108453, + "ĠÙĨÙĤÙĦ": 108454, + "ĠÐłÐ¾Ð·": 108455, + "ĠÎijÏħ": 108456, + "lardı": 108457, + "Ġپاس": 108458, + "ĠìĭĿ": 108459, + "ĠìłĦìļ©ë©´ìłģ": 108460, + "ĠاÙĦسÙĬ": 108461, + "باشد": 108462, + "ศาสà¸ķร": 108463, + "Ġköy": 108464, + "Ġrok": 108465, + "Ġ죽": 108466, + "ĠÑģог": 108467, + "Ġchú": 108468, + "éĺª": 108469, + "ĠÄįásti": 108470, + "ĠзвеÑĢ": 108471, + "Ġниз": 108472, + "ĠÃ¶ÄŁret": 108473, + "Ġãĥİ": 108474, + "пе": 108475, + "çĴ°": 108476, + "Ġèª": 108477, + "ÙĪÙĦÙĩ": 108478, + "İM": 108479, + "/REC": 108480, + "å¡ŀ": 108481, + "ĠÐĴи": 108482, + "/loose": 108483, + "ĠпоÑħ": 108484, + "ĠgeniÅŁ": 108485, + "Ġthiá»ĩn": 108486, + "tiÄŁi": 108487, + "Ñĩие": 108488, + "онд": 108489, + "ĠпÑĢиÑģ": 108490, + "ázky": 108491, + "ĠDevlet": 108492, + "ç¦ģ": 108493, + "Ġаг": 108494, + "ilere": 108495, + "инкÑĥ": 108496, + "Ġvardı": 108497, + "ãĢĢãĢĢãĢĢĠãĢĢ": 108498, + "ĠëĨĴ": 108499, + "à¤Ĥपन": 108500, + "Ġözellik": 108501, + "éļľ": 108502, + "ìĸ´ìĦľ": 108503, + "رÙĬÙĥ": 108504, + "ÙĪØ¨ÛĮ": 108505, + "ãĥ³ãĥĢ": 108506, + "íĮ¨": 108507, + "Ġसमà¤Ŀ": 108508, + "ï¾Ĩï¾Ĩï¾Ĩï¾Ĩ": 108509, + "ĠÙģÙĨ": 108510, + "à¥Ŀ": 108511, + "Ġuveden": 108512, + "ÑĪими": 108513, + "Ġà¹Ģล": 108514, + "Ġ문ìĿĺ": 108515, + "ĠØŃرÙģ": 108516, + "Ġعب": 108517, + "ãĥ¬ãĥĵ": 108518, + "ĠæŃ£": 108519, + "ĠëĺIJëĬĶ": 108520, + "ĠÚ©ÙĨÙĨدÙĩ": 108521, + "ĠαÏħÏĦÏĮ": 108522, + "Ġ길": 108523, + "Ġifade": 108524, + "Ġyapmak": 108525, + "ãĥķãĤ©": 108526, + "Ġmẹ": 108527, + "Ġstrán": 108528, + "Ġsvou": 108529, + "Ġvždy": 108530, + "Ġtekrar": 108531, + "ิà¸į": 108532, + "Ġìĵ°": 108533, + "oÄŁu": 108534, + "ĠÚ©ÛĮÙĦ": 108535, + "ивÑģÑı": 108536, + "Ġë§IJíĸĪëĭ¤": 108537, + "ä¸Ŀ": 108538, + "à¤ıस": 108539, + "ĠÑģÑĤÑĢаÑħ": 108540, + "ĠsouÄįas": 108541, + "Ġê·¸ëŁ°": 108542, + "ĠmÃ¼ÅŁ": 108543, + "λοÏį": 108544, + "γÏī": 108545, + "ĠtÆ°á»Łng": 108546, + "Ġå·¥": 108547, + "ĠاسÙħ": 108548, + "ÑĢÑĸм": 108549, + "à¹Ģà¸Ľà¸¥": 108550, + "Ġ³³Ġ³³": 108551, + "ÙĩاÛĮÛĮ": 108552, + "寺": 108553, + "ĠسرÛĮ": 108554, + "ĠкваÑĢ": 108555, + "ĠØ´ÙħارÙĩ": 108556, + "ĠصØŃ": 108557, + "оÑģÑĤав": 108558, + "२": 108559, + "Ġà¸Ħวาม": 108560, + "íĥģ": 108561, + "éĢĤ": 108562, + "بØŃ": 108563, + "ĠdeÄŁiÅŁik": 108564, + "éĮ²": 108565, + "еди": 108566, + "Ġokol": 108567, + "ĠÑģоп": 108568, + "Ġolmayan": 108569, + "çŃij": 108570, + "Û±Û´": 108571, + "Ġinclu": 108572, + "Ġê²ĮìŀĦ": 108573, + "ÛĮستÙħ": 108574, + "Ġç©": 108575, + "ĠاÙĦÙĪÙĦاÙĬات": 108576, + "ilmektedir": 108577, + "ÃĮ": 108578, + "ÙİØ¹": 108579, + "Ġaģır": 108580, + "è¡Ľ": 108581, + "Ġeski": 108582, + "ê°Ŀ": 108583, + "본ëĭ¤": 108584, + "人åijĺ": 108585, + "ÚĺÛĮ": 108586, + "Ġç¨": 108587, + "ĠмеÑģÑĤо": 108588, + "vů": 108589, + "à¥įरह": 108590, + "ĠطرØŃ": 108591, + "ĠابÙĨ": 108592, + "Ġhiss": 108593, + "оÑĢÑıд": 108594, + "ĠدÙģ": 108595, + "ÑĢиÑģÑĤ": 108596, + "à¸Ĭม": 108597, + "деÑĤ": 108598, + "à¹Ģหม": 108599, + "ë§ĪìĤ¬ì§Ģ": 108600, + ":.:.:": 108601, + "éħ¸": 108602, + "ĠαÏģÏĩ": 108603, + "Ġnữ": 108604, + "ĠпоÑģад": 108605, + "lum": 108606, + "ìº": 108607, + "ãģ§ãģįãĤĭ": 108608, + "ìĸµ": 108609, + "ĠاÙĦÙħد": 108610, + "нÑĸм": 108611, + "راÙĤ": 108612, + "ĠãĥĪ": 108613, + "ĠodpovÄĽ": 108614, + "Ġbirbir": 108615, + "Ġhãy": 108616, + "овий": 108617, + "æ®ĭ": 108618, + "éĥ½æĺ¯": 108619, + "迪": 108620, + "Ġaraç": 108621, + "енÑĤÑĸв": 108622, + "æĬ±": 108623, + "dál": 108624, + "ĠÄIJông": 108625, + "Ġhesap": 108626, + "ĠاÙĨساÙĨ": 108627, + "ĠÙĬÙĪÙħ": 108628, + "ĠÙĨÙĪØ±": 108629, + "åīĩ": 108630, + "çĹĽ": 108631, + "ĠÙĨÙĬ": 108632, + "алÑĮна": 108633, + "تباط": 108634, + "लब": 108635, + "Ġkomun": 108636, + "Ġsnad": 108637, + "åĽ£": 108638, + "رÙĬد": 108639, + "elopment": 108640, + "ĠиÑİ": 108641, + "à¥Ģ.": 108642, + "Ġkısa": 108643, + "ĠdeÄŁildir": 108644, + "à¹īาร": 108645, + "Ġsvého": 108646, + "Ġoblasti": 108647, + "ÑĪли": 108648, + "à¹Ģà¸Ĺà¸ŀ": 108649, + "ÑĢеÑĤÑĮ": 108650, + "ово": 108651, + "ĠíĤ¤": 108652, + "átky": 108653, + "ĠاÙĦÙ쨱": 108654, + "èĺŃ": 108655, + "ÏĦον": 108656, + "ĠÑģÑĤоиÑĤ": 108657, + "ÙħØŃ": 108658, + "Ġà¹Ħ": 108659, + "ĠÑĤебе": 108660, + "íģ´": 108661, + "ĠmÄĽla": 108662, + "æİ§åζ": 108663, + "ĠChá»§": 108664, + "ìĬ¨": 108665, + "ÐIJТ": 108666, + "اجع": 108667, + "ìĻķ": 108668, + "ç©¿": 108669, + "олее": 108670, + "หลาย": 108671, + "Ġdvou": 108672, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 108673, + "ุà¸Ĥ": 108674, + "Ġboz": 108675, + "ิà¸Ļà¸Ħ": 108676, + "å¤Ł": 108677, + "Ġfaaliyet": 108678, + "ĠÄįÃŃs": 108679, + "ãģ»ãģ©": 108680, + "Ġ:/": 108681, + "кÑĸÑģÑĤÑĮ": 108682, + "Ġì¤Ģ": 108683, + "ÏģαÏĤ": 108684, + "Ġодно": 108685, + "æ¢ħ": 108686, + "Ñĥбли": 108687, + "ноз": 108688, + "à¹Įม": 108689, + "Ġvýrob": 108690, + "ĠκÏħ": 108691, + "ÅĻev": 108692, + "ÂłB": 108693, + "ůže": 108694, + "ä¼ļ社": 108695, + "ιβ": 108696, + "ÑĢованиÑı": 108697, + "Ġcev": 108698, + "ìĽĢ": 108699, + "álnÃŃch": 108700, + "ĠÑĢав": 108701, + "ç´§": 108702, + "åĢŁ": 108703, + "ĠÑŁ": 108704, + "ÙĪÙĨÙĬ": 108705, + "озÑı": 108706, + "Ġзов": 108707, + "Ġkolem": 108708, + "민êµŃ": 108709, + "ç¿Ĵ": 108710, + "ĠzamÄĽst": 108711, + "Ġìłij": 108712, + "ĠزÙĨ": 108713, + "ĠØ£Ùģ": 108714, + "Ġ먹": 108715, + "Ġtomto": 108716, + "Ġ첨ë¶Ģ": 108717, + "sage": 108718, + "ä¸įè¿ĩ": 108719, + "егод": 108720, + "ÑĢож": 108721, + "ĠпÑĢоÑĨед": 108722, + "à¹Įà¸Ļ": 108723, + "sanız": 108724, + "âĢŀØ·": 108725, + "æ´»åĬ¨": 108726, + "оÑĩки": 108727, + "보기": 108728, + "åŁºæľ¬": 108729, + "-Ñħ": 108730, + "лоÑģÑı": 108731, + "ĠÙĩÛĮÚĨ": 108732, + "ìĹĶ": 108733, + "Ñĩного": 108734, + "Ġà¤Ĺर": 108735, + "Ġà¤ħà¤Ĺ": 108736, + "ãħĭãħĭãħĭãħĭ": 108737, + "ĠãĤ¸": 108738, + "اسة": 108739, + "åĬĩ": 108740, + "à¹īà¸ĩ": 108741, + "Ġ커": 108742, + "nými": 108743, + "ãĥ¬ãĤ¹": 108744, + "åĭĴ": 108745, + "ĠоблаÑģÑĤÑĸ": 108746, + "ĠдÑĸÑıлÑĮноÑģÑĤÑĸ": 108747, + "ãĥ¬ãĤ¤": 108748, + "Ïĩαν": 108749, + "à¹Īาส": 108750, + "ĠФÑĢан": 108751, + "ÙĩÙĦ": 108752, + "lardır": 108753, + "ØŃات": 108754, + "ůst": 108755, + "ĠводÑĭ": 108756, + "ĠدÙĪÙĦت": 108757, + "ĠÑģпеÑĨÑĸ": 108758, + "Ġthất": 108759, + "à¸Ńาหาร": 108760, + "éłĺ": 108761, + "Ġtercih": 108762, + "ĠÏĢÏģοÏĥ": 108763, + "ĠÅĻÃŃzenÃŃ": 108764, + "è§īå¾Ĺ": 108765, + "Ġdnes": 108766, + "еÑĩно": 108767, + "ãĥĺ": 108768, + "ĠداراÛĮ": 108769, + "ĠÅŁart": 108770, + "벤": 108771, + "Ġë¶ģ": 108772, + "еÑı": 108773, + "нÑıÑĤÑĮ": 108774, + "ĠkvÄĽt": 108775, + "ĠتغÛĮÛĮر": 108776, + "é¾į": 108777, + "ĠرÙĨÚ¯": 108778, + "ï¼Įåı¯": 108779, + "Ġpiyas": 108780, + "Ġuygulan": 108781, + "ÙİØ©": 108782, + "بÙĬر": 108783, + "иваÑĤÑĮ": 108784, + "ĠíĹĪ": 108785, + "丶": 108786, + "è¿ĻäºĽ": 108787, + "Ġگر": 108788, + "罪": 108789, + "ä¸Ģæł·": 108790, + "Ġãĥª": 108791, + "Ġвой": 108792, + "Ġsosyal": 108793, + "ุà¸Ĺà¸ĺ": 108794, + "หมà¸Ķ": 108795, + "ç»Ŀ": 108796, + "ĠاÙĦجÙħ": 108797, + "Ġثبت": 108798, + "ĠجÙĨÚ¯": 108799, + "лении": 108800, + "ваÑı": 108801, + "ĠвоÑĤ": 108802, + "伤": 108803, + "Ġหล": 108804, + "ĠÙħÙĤاÙĦÙĩ": 108805, + "мÑĸнÑĸ": 108806, + "ìĺ¬": 108807, + "Ñĩий": 108808, + "ĠÙħÚ©": 108809, + "à¹Ĥà¸Ľà¸£": 108810, + "krv": 108811, + "ĠÃŃch": 108812, + "ÏīÏĥη": 108813, + "екÑĤоÑĢ": 108814, + "Як": 108815, + "ĠpÃŃs": 108816, + "ĠÃĸzel": 108817, + "ĠtÆ°á»Ľng": 108818, + "ĠÐĶо": 108819, + "διο": 108820, + "ูà¸Ķ": 108821, + "Ġtük": 108822, + "رÛĮÙĤ": 108823, + ".ÐĴ": 108824, + "ĠåIJĪ": 108825, + "ä¿Ĥ": 108826, + "Ġobdob": 108827, + "Ġistedi": 108828, + "ÑĪла": 108829, + "æľīä¸Ģ": 108830, + "ĠвклÑİÑĩа": 108831, + "ĠتØŃÙĤÛĮÙĤ": 108832, + "ĠÙĪÙĥ": 108833, + "ĠèĪ": 108834, + "ÆĴ": 108835, + "μεÏģ": 108836, + "Ġåģ": 108837, + "ĠìĹĨëĬĶ": 108838, + "Âłd": 108839, + "ĠBắc": 108840, + "à¸ģลาà¸ĩ": 108841, + "ĠÑĩÑĥв": 108842, + "Ġcấu": 108843, + "ĠHá»ĵ": 108844, + "ĠÙ쨧ÛĮÙĦ": 108845, + "ÏĦηγοÏģ": 108846, + "ç±į": 108847, + "Ġبت": 108848, + "ĠобÑĢазом": 108849, + "æ±ī": 108850, + "èĦij": 108851, + "Ġgiản": 108852, + "εÏģγ": 108853, + "ĠÐľÑĸ": 108854, + "èϽçĦ¶": 108855, + "ĠKhi": 108856, + "Ñĩини": 108857, + "Ġà¤ħà¤Ĺर": 108858, + "íķĺë©°": 108859, + "ë²Ķ": 108860, + "ãģģ": 108861, + "виÑħ": 108862, + "ĠвÑģегда": 108863, + "Ġç¶": 108864, + "ÑģÑĤвенной": 108865, + "Ġyüksel": 108866, + "測": 108867, + "Ġsıras": 108868, + "ĠÏĢÏģÏİ": 108869, + "è̳": 108870, + "اÛĮر": 108871, + "دÙĪØ¯": 108872, + "ĠAlman": 108873, + "Ġverdi": 108874, + "ĠاÙĦÙħج": 108875, + "ĠاÙĦتع": 108876, + "صة": 108877, + "Ġsıra": 108878, + "Äįin": 108879, + "ĠпеÑĢÑĪ": 108880, + "æĬĺ": 108881, + "ç©į": 108882, + "ĠÑĤоб": 108883, + "Ġï¾ī": 108884, + "ฬ": 108885, + "æĿĢ": 108886, + "iydi": 108887, + "ีà¸ŀ": 108888, + "çĵ¦": 108889, + "ĠавÑĤомоб": 108890, + "ä¸Ńæĸĩ": 108891, + "à¥Ĥद": 108892, + "ĠbÄĽhem": 108893, + "ĠPÅĻed": 108894, + "ãģĵãģĨ": 108895, + "ัà¸Ī": 108896, + "Ġï½Į": 108897, + "ĠÙĩاÙĬ": 108898, + "Ġsạch": 108899, + "æĸ¹éĿ¢": 108900, + "çķ°": 108901, + "ÑĥÑĢн": 108902, + "Ġvýsled": 108903, + "Ġthần": 108904, + "ï¼ĮæīĢ以": 108905, + "Ñĥка": 108906, + "íķĺëĭ¤": 108907, + "Ġबर": 108908, + "ĠжÑĸн": 108909, + "ÄįnÃŃho": 108910, + "ĠãģĮ": 108911, + "abı": 108912, + "vánÃŃ": 108913, + "æ´Ĺ": 108914, + "ĠиÑģÑĤоÑĢ": 108915, + "ìĿ´íĦ°": 108916, + "Ġелек": 108917, + "алаÑģÑı": 108918, + "Ġznám": 108919, + "ĠطرÙģ": 108920, + "Ġsektör": 108921, + "ê¹Ģ": 108922, + "ÙĪÙĤع": 108923, + "ĠÙħÙĥ": 108924, + "ÑĢежд": 108925, + "Ġknih": 108926, + "Ġتعداد": 108927, + "åįł": 108928, + "ÑģÑĮке": 108929, + "Ġç͵": 108930, + "京éĥ½": 108931, + "ĠراÛĮ": 108932, + "gın": 108933, + "ĠÙĨظاÙħ": 108934, + "ĠÎłÎ¿Î»": 108935, + "ä¸Ģèά": 108936, + "Ġstále": 108937, + "ĠиÑģÑģлед": 108938, + "Ġzpráv": 108939, + "ĠÑĩиÑģÑĤ": 108940, + "ãĥ¼ãĥŀ": 108941, + "ÐŀÑģ": 108942, + "ÑģÑĮкомÑĥ": 108943, + "ĠpÅĻiprav": 108944, + "ëĮĢíĸī": 108945, + "Ġhalk": 108946, + "çĪĨ": 108947, + "ãĢģãģĬ": 108948, + "ï¼ŁâĢĿĊĊ": 108949, + "éĢı": 108950, + "ç«ŀ": 108951, + "ниÑĨÑĮ": 108952, + "çĽĺ": 108953, + "à¹Ģà¸Ńà¸ĩ": 108954, + "ìŁģ": 108955, + "à¥ĩवल": 108956, + "ä¹ĭåIJİ": 108957, + "ãĥ«ãĥĪ": 108958, + "Ġstru": 108959, + "Ġ_": 108960, + "ÎķÎĽ": 108961, + "hle": 108962, + "ĠÙĨÙĪØ´": 108963, + "ìĿµ": 108964, + "ĠÙħÙģ": 108965, + "æĪĸèĢħ": 108966, + "Ġöld": 108967, + "éĢĶ": 108968, + "ãĥ³ãĥĹ": 108969, + "íĺ¼": 108970, + "ĠuÄŁ": 108971, + "ĠÄijá": 108972, + "ĠvlastnÃŃ": 108973, + "ĠÙħجÙĦس": 108974, + "åįĶ": 108975, + "ÏĦικήÏĤ": 108976, + "Ġpovin": 108977, + "ůl": 108978, + "ĠاÙĦØŃÙĬ": 108979, + "Ġsmlou": 108980, + "ãĥĥãĥģ": 108981, + "ĠÙĥÙĨ": 108982, + "Ġchấp": 108983, + "èIJ¬": 108984, + "جب": 108985, + "?âĢľ": 108986, + "дав": 108987, + "รวม": 108988, + "ÙİØ¯": 108989, + "ĠاÙĦدÙĪÙĦ": 108990, + "ĠëĦ¤ìĿ´íĬ¸": 108991, + "Ġà¤Ĩस": 108992, + "ظÙĬÙģ": 108993, + "ãĥ¼ãĥ©": 108994, + "ãģłãĤįãģĨ": 108995, + "ĠÙĪØ§ØŃد": 108996, + "رÙĪØ³": 108997, + "Ġzákona": 108998, + "ĠпеÑĢеб": 108999, + "à¥Ģ-": 109000, + "à¹Īà¹Ħà¸Ķ": 109001, + "为äºĨ": 109002, + "ÎĻÎĿ": 109003, + "ĠìĽĶìĦ¸": 109004, + "สà¸Ńà¸ĩ": 109005, + "Ġæīĭ": 109006, + "ĠÐĴÑģе": 109007, + "à¹Ĥย": 109008, + "Ġkaldır": 109009, + "ÏĦÎŃÏĤ": 109010, + "Ġï¿£": 109011, + "ĠíĸĪëĭ¤": 109012, + "ãĤģãģŁ": 109013, + "ĠÄįer": 109014, + "cela": 109015, + "üsü": 109016, + "ê³³": 109017, + "ìĹIJëıĦ": 109018, + "زة": 109019, + "ãģªãĤĭ": 109020, + "ÙĪÛĮÙĨ": 109021, + "çīĽ": 109022, + "Ġvoj": 109023, + "ĠëĬIJ": 109024, + "ĠÙĥÙħ": 109025, + "æ³ī": 109026, + "зÑı": 109027, + "è£Ŀ": 109028, + "ĠØ¢ÙĦ": 109029, + "Ġανά": 109030, + "ÂłÐĴ": 109031, + "Ġyapıl": 109032, + "æıĽ": 109033, + "ĠÑģÑĥÑīеÑģÑĤв": 109034, + "Ġná»iji": 109035, + "ÙĪØ¦": 109036, + "ĠëĦ¤ìĿ´íĬ¸ìĺ¨": 109037, + "Ġpolitik": 109038, + "Å¡ka": 109039, + "ebilirsiniz": 109040, + "ldkf": 109041, + "ÑĥблÑĸ": 109042, + "Ġeoq": 109043, + "ĠÙħØŃصÙĪÙĦ": 109044, + "krvldkf": 109045, + "Ġeoqkrvldkf": 109046, + "ÏĥεÏīν": 109047, + "بÙĦغ": 109048, + "Įĵê¸Ģ": 109049, + "ĠÑģÑĢок": 109050, + "ĠUy": 109051, + "ĠNÄĽk": 109052, + "Ġдив": 109053, + "ãĤµãĤ¤": 109054, + "ĠìĤ¬ìĿ´": 109055, + "ĠéĹ": 109056, + "ĠбаÑĤÑĮ": 109057, + "ĠпеÑĢÑĸ": 109058, + "Âĸ": 109059, + "交éĢļ": 109060, + "енз": 109061, + "ÙĪØ³Øª": 109062, + "ียà¸ļ": 109063, + "Ġà¸Īะ": 109064, + "ë¡Ģ": 109065, + "üfus": 109066, + "ÙijÙIJ": 109067, + "總": 109068, + "ัà¸Ķส": 109069, + "ê²Ģ": 109070, + "ĠÑĤиÑħ": 109071, + "ĠآزÙħ": 109072, + "Ġاض": 109073, + "ì¡´": 109074, + "ÙĴت": 109075, + "æĪ¸": 109076, + "ĠìŀĪìĿĦ": 109077, + "ĠçĶ·": 109078, + "ÑīÑĸ": 109079, + "ома": 109080, + "ĠاÙģØ²Ø§ÛĮØ´": 109081, + "ĠThông": 109082, + "ĠاجتÙħاعÛĮ": 109083, + "елÑİ": 109084, + "ĠÑħоÑĢоÑĪо": 109085, + "à¸łà¸²à¸©": 109086, + "Ġrám": 109087, + "御": 109088, + "ãĥ¼ãĥĦ": 109089, + "ĠLỼp": 109090, + "ĠØ´ÙĬ": 109091, + "Ġhiá»ĥm": 109092, + "θν": 109093, + "οÏħÏĥ": 109094, + "復": 109095, + "Ġúzem": 109096, + "à¹ģà¸ľ": 109097, + "å·¨": 109098, + "à¸Īà¸Ļ": 109099, + "گراÙĨ": 109100, + "ĠتÛĮÙħ": 109101, + "Ġilet": 109102, + "าà¸Ĥà¸Ńà¸ĩ": 109103, + "ĠتÙĪØ±": 109104, + "ĠдоговоÑĢ": 109105, + "Ġtento": 109106, + "вÑĥ": 109107, + "Ġзада": 109108, + "ĠstoletÃŃ": 109109, + "ÂłĠ": 109110, + "âĢĮاÙĦ": 109111, + "Ëĺ": 109112, + "ÅŁiv": 109113, + "нÑıÑĤи": 109114, + "ãĤīãĤĮãģŁ": 109115, + "ĠSb": 109116, + "ĠاÙĦÙħص": 109117, + "ĠУкÑĢаÑĹнÑĸ": 109118, + "ĠØ´Ú©": 109119, + "iếng": 109120, + "ÑĮÑĤе": 109121, + "è°¢": 109122, + "ĠÙħتÙĨ": 109123, + "ĠÑĢад": 109124, + "ĠÙħÙĪØ§Ø¯": 109125, + "ì±Ħ": 109126, + "é¡¶": 109127, + "ĠboÅŁ": 109128, + "تÙĪØ±": 109129, + "ĠÄijáng": 109130, + "Ġkitap": 109131, + "Ġhodin": 109132, + "Ġtarihi": 109133, + "ãĤĦãĤĭ": 109134, + "ÑģÑĤеÑĢ": 109135, + "ĠÑħод": 109136, + "вание": 109137, + "ĠоÑģвÑĸ": 109138, + "ĠÑģиÑģÑĤемÑĭ": 109139, + "़न": 109140, + "Ïĩο": 109141, + "Ġåı°": 109142, + "oÅĻ": 109143, + "ç»ıæµİ": 109144, + "Ġä½ľ": 109145, + "ĠthuáºŃn": 109146, + "ĽĪ": 109147, + "Ġyalnız": 109148, + "alet": 109149, + "ì¦Ŀê¸Ī": 109150, + "ĠзаÑī": 109151, + "ĠекÑģп": 109152, + "âĦĸâĦĸ": 109153, + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 109154, + "ĠÚ¯ÙĪØ´": 109155, + "ãģ«åħ¥": 109156, + "ĠudÄĽl": 109157, + "Ġáº": 109158, + "à¤Ĩà¤Ī": 109159, + "âĢĮدÙĩ": 109160, + "æĤª": 109161, + "Ġtrò": 109162, + "æļĹ": 109163, + "λλην": 109164, + "ĠпÑĢизна": 109165, + "ĠسÛĮستÙħ": 109166, + "Ġà¤ħत": 109167, + "èo": 109168, + "è¿İ": 109169, + "ĠзÑĥб": 109170, + "ĠзаÑģоб": 109171, + "ĠسÙģ": 109172, + "ĠÙħاÙĨÙĨد": 109173, + "خش": 109174, + "vajÃŃ": 109175, + "nitÅĻ": 109176, + "æ¯Ĵ": 109177, + "æ¤į": 109178, + "ĠgiriÅŁ": 109179, + "ĠÄijáp": 109180, + "@n": 109181, + "оваÑĢи": 109182, + "Ġخدا": 109183, + "ĠvÄĽtÅ¡": 109184, + "ĠΣÏħ": 109185, + "Ù쨩": 109186, + "аннÑıм": 109187, + "ĠÑĩлен": 109188, + "æĶ¯æĮģ": 109189, + "å¨ľ": 109190, + "lararası": 109191, + "ΡÎij": 109192, + "Ġziy": 109193, + "ĠêµIJìľ¡": 109194, + "Ġhá»ĵi": 109195, + "าà¸Ħาร": 109196, + "imleri": 109197, + "è³¼": 109198, + "ĠجÙĩاÙĨ": 109199, + "ĠÑĢозмÑĸ": 109200, + "ÑħÑĸв": 109201, + "γε": 109202, + "横": 109203, + "ÎĻÎijΣ": 109204, + "ç¶Ń": 109205, + "Ġbiraz": 109206, + "ĠÑĤакого": 109207, + "íĥĦ": 109208, + "ĠбÑĥдÑĥÑĤ": 109209, + "ĠÑĪвид": 109210, + "ĠнеÑģ": 109211, + "ĠÙħعÙĦÙĪÙħات": 109212, + "à¥ĩयर": 109213, + "ĠдвÑĥÑħ": 109214, + "å¿ħè¦ģ": 109215, + "å§Ĩ": 109216, + "Ġpohled": 109217, + "ìĬ¤íĦ°": 109218, + "Ġåįģ": 109219, + "Ġأب": 109220, + "веÑĢдж": 109221, + "Ġà¤ľà¤®": 109222, + "लत": 109223, + "åľ°åĮº": 109224, + "Ġ|[": 109225, + "ĠвмеÑģÑĤ": 109226, + "ĠکاÙħ": 109227, + "ĠãĥIJ": 109228, + "ãĥ¼ãĥĸ": 109229, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 109230, + "ĠìĥģíĴĪ": 109231, + "à¹Ģลย": 109232, + "Äįné": 109233, + "ĠÑģÑĢедÑģÑĤва": 109234, + "ĠÑĤаб": 109235, + "ĠÙħار": 109236, + "Ġhled": 109237, + "даÑĤ": 109238, + "ÙĪÛĮد": 109239, + "Ġãĥ©": 109240, + "Ġخد": 109241, + "è¤ĩ": 109242, + "ç§ĺ": 109243, + "Ġبرد": 109244, + "ĠÏĥαÏĤ": 109245, + "ÏİÏĥειÏĤ": 109246, + "æĿ¯": 109247, + "λÏį": 109248, + "宿": 109249, + "ĠëĤľ": 109250, + "ï»Ł": 109251, + "Ġözellikle": 109252, + "ĠконÑģ": 109253, + "ĠÙħغ": 109254, + "عÙĬ": 109255, + "à¹Įà¸ģ": 109256, + "ĠÙĬت": 109257, + "ĠÙħشاÙĩ": 109258, + "ĠThanh": 109259, + "à¤¾à¤ľà¤¨": 109260, + "¥¤": 109261, + "Ġvlá": 109262, + "ĠÙ쨶": 109263, + "ΤÎĻÎļ": 109264, + "ĠнаÑĥков": 109265, + "елем": 109266, + "ĠdÃłng": 109267, + "ĠгоÑģподаÑĢ": 109268, + "ÂłS": 109269, + "иÑĩеÑģкиÑħ": 109270, + "ĠتÙĨÙĩا": 109271, + "à¤ľà¤¨": 109272, + "Ġпан": 109273, + "åĨł": 109274, + "ĠëĤĺëĬĶ": 109275, + "tÃŃ": 109276, + "ä¸Ģèµ·": 109277, + "Ġlãnh": 109278, + "Âłv": 109279, + "ovým": 109280, + "زب": 109281, + "ĠجÙħعÛĮت": 109282, + "Ġæµ·": 109283, + "ĠоÑģÑĥÑīеÑģÑĤв": 109284, + "ãi": 109285, + "ائر": 109286, + "Ġë³ij": 109287, + "á»ĭnh": 109288, + "Ġsá»Ńa": 109289, + "à¥ĩà¤Ĥ।": 109290, + "ÄĽjÅ¡ÃŃ": 109291, + "ĠдÑĸÑĤ": 109292, + "Ġæĥ": 109293, + "mÄ±ÅŁtı": 109294, + "رØŃ": 109295, + "Ġì§Ģê¸Ī": 109296, + "妻": 109297, + "âĹĭ": 109298, + "Ġì§ĢìĹŃ": 109299, + "ÙĴÙĨ": 109300, + "ĠurÄįit": 109301, + "ÙĴÙħ": 109302, + "zÃŃ": 109303, + "èķ": 109304, + "ĠØ´ÙĪØ±": 109305, + "ĠKhông": 109306, + "ÛĮزÛĮ": 109307, + "Ġзг": 109308, + "Ġвне": 109309, + "ĠprávÄĽ": 109310, + "è«ĭ": 109311, + "اÙĬت": 109312, + "ัà¸ģร": 109313, + "Ġoldukça": 109314, + "ãĤģãĤĭ": 109315, + "ĠTây": 109316, + "ëĿ¼ìĿ¸": 109317, + "èĻķ": 109318, + "Ġsư": 109319, + "Ġник": 109320, + "Ùł": 109321, + "اشÛĮÙĨ": 109322, + "elerde": 109323, + "ìĭľìķĦ": 109324, + "ĠÑĥмов": 109325, + "ĠçalÄ±ÅŁan": 109326, + "Ġë¸Ķ": 109327, + "ĠÑĤаким": 109328, + "ÑĢин": 109329, + "ĠØ®ÙĦ": 109330, + "ayd": 109331, + "Ġãĥ¡": 109332, + "ейÑĩаÑģ": 109333, + "Ġdoprav": 109334, + "ãģĵãģ¨ãģ¯": 109335, + "Ġì¶Ķì²ľ": 109336, + "å»¶": 109337, + "Ġkı": 109338, + "åı¶": 109339, + "ÑĢиг": 109340, + "íħľ": 109341, + "çͳåįļ": 109342, + "ĠвеÑĤ": 109343, + "ĠпомоÑīÑĮÑİ": 109344, + "ĠاÙģØ±Ø§Ø¯": 109345, + "ÏĢει": 109346, + "à¹Ģสร": 109347, + "Ġgiám": 109348, + "éİ": 109349, + "hlas": 109350, + "manız": 109351, + "англ": 109352, + "Ġmuž": 109353, + "ÂłK": 109354, + "ÑĢедиÑĤ": 109355, + "设å¤ĩ": 109356, + "ιÏĥμ": 109357, + "Ġcải": 109358, + "ĠéĢļ": 109359, + "ĠÙĥار": 109360, + "Ġподоб": 109361, + "ĠмеÑĤал": 109362, + "ĠÑģаме": 109363, + "лÑĥÑĩ": 109364, + "åĤ³": 109365, + "ĠÙĪÙĩÙĪ": 109366, + "Ġéĩį": 109367, + "вий": 109368, + "æ³ģ": 109369, + "ĠæĿİ": 109370, + "ĠiliÅŁkin": 109371, + "ĠείÏĩε": 109372, + "çĬ¯": 109373, + "ÅĻejmÄĽ": 109374, + "èŃĺ": 109375, + "稱": 109376, + "μμα": 109377, + "ĠÙĦÛĮ": 109378, + "ÙĩاÙĬ": 109379, + "ĠопиÑģ": 109380, + "گرد": 109381, + "ĠгÑĢ": 109382, + "ĠAnimalia": 109383, + "ÐŁÐ¾": 109384, + "Ġbóng": 109385, + "ĠдеÑĤей": 109386, + "Ġlâu": 109387, + "ĠæķĻ": 109388, + "ĠпоÑıÑģ": 109389, + "ĠاÙĦØ¢": 109390, + "ัà¸Ļà¸ķ": 109391, + "Ġдев": 109392, + "ĠÑĨей": 109393, + "ÑĮв": 109394, + "æĥł": 109395, + "maları": 109396, + "imler": 109397, + "à¥Ī।ĊĊ": 109398, + "Ġном": 109399, + "zv": 109400, + "Ġà¸ģร": 109401, + "ĠpaylaÅŁ": 109402, + "Âłs": 109403, + "िसम": 109404, + "ÑģÑĤвеннÑĭÑħ": 109405, + "stoup": 109406, + "онÑĸ": 109407, + "stÃŃ": 109408, + "ĠØŃÚ©": 109409, + "ĠگرÙģØª": 109410, + "าà¸Ħา": 109411, + "дÑı": 109412, + "ÙĦاث": 109413, + "Ġzdravot": 109414, + "ä¸ĬãģĴ": 109415, + "ãģ¼": 109416, + "elere": 109417, + "ظÙħ": 109418, + "ĠÑģвеÑĤ": 109419, + "оÑĢг": 109420, + "ç«¥": 109421, + "ĠпеÑĢеп": 109422, + "Ġमद": 109423, + "аза": 109424, + "å¦Ĥä½ķ": 109425, + "ÑģÑĮкÑĸй": 109426, + "ĠbÆ°á»Ľc": 109427, + "Ġgerekli": 109428, + "大家": 109429, + "Ġtrái": 109430, + "éģ©": 109431, + "ä¸Ń央": 109432, + "Ġphản": 109433, + "Ġعرض": 109434, + "ĠÙĥتاب": 109435, + "æĭ©": 109436, + "ÑĪего": 109437, + "帮": 109438, + "ĠÙĨÛĮاز": 109439, + "è¿·": 109440, + "à¸¸à¸Ľ": 109441, + "à¸´à¸Ľ": 109442, + "Ġدخ": 109443, + "ÏĦικÎŃÏĤ": 109444, + "ĠUz": 109445, + "ĠتÙĪÙħاÙĨ": 109446, + "ĠÙĪØ§ÙĦØ£": 109447, + "ÅĻes": 109448, + "Ñijм": 109449, + "Ġå¸Ĥ": 109450, + "ĠÑĤоже": 109451, + "Ġyapan": 109452, + "彼女": 109453, + "ĠÙħدر": 109454, + "¶ģ": 109455, + "ĠæĹ¶": 109456, + "à¹Ģà¸ĺ": 109457, + "ĠÙħاÙĦ": 109458, + "ĠBüyük": 109459, + "ĠÙĦت": 109460, + "å°ļ": 109461, + "deme": 109462, + "üb": 109463, + "ĠÑħÑĥд": 109464, + "Ġléka": 109465, + "缼": 109466, + "缴æİ¥": 109467, + "ниÑĨÑĤва": 109468, + "ĠпÑĢиÑĩин": 109469, + "еÑĢап": 109470, + "ĠÑģозда": 109471, + "械": 109472, + "Ġmüz": 109473, + "ç³»åĪĹ": 109474, + "ouz": 109475, + "Ġà¤ĵर": 109476, + "ÑĢÑĥÑĩ": 109477, + "Ġá½": 109478, + "μÎŃνα": 109479, + "ĠпÑĢедмеÑĤ": 109480, + "Ġå²": 109481, + "ãĥ³ãĥģ": 109482, + "μÎŃνη": 109483, + "лÑĥг": 109484, + "Âłn": 109485, + "ĠTarih": 109486, + "ĠãĢĪ": 109487, + "Ġbana": 109488, + "ĠcÃŃ": 109489, + "Ġvýkon": 109490, + "åĽłæŃ¤": 109491, + "ĠtÅĻi": 109492, + "าà¸ĭ": 109493, + "vailable": 109494, + "Ġistem": 109495, + "ãĥ¥ãĥ¼": 109496, + "ÐķÐĿ": 109497, + "ĠгаÑĢ": 109498, + "οÏħλ": 109499, + "à¥Ľ": 109500, + "ĠÙĪØ¶Ø¹": 109501, + "สะ": 109502, + "è·Ŀ": 109503, + "ĠØŃÙģ": 109504, + "ิà¸Ĺยาล": 109505, + "她çļĦ": 109506, + "нÑĸÑĪ": 109507, + "жение": 109508, + "기ìĹIJ": 109509, + "Ġéĺ¿": 109510, + "ĠÙħارس": 109511, + "ĠçeÅŁitli": 109512, + "ĠÅŁehir": 109513, + "átor": 109514, + "à¹īà¸Ĺ": 109515, + "ìĿ´ëĬĶ": 109516, + "Ġè²": 109517, + "é¡į": 109518, + "çĻĤ": 109519, + "ĠниÑĩ": 109520, + "Ġê°Ģì§Ģ": 109521, + "伦": 109522, + "rán": 109523, + "ostat": 109524, + "ĠÙĦÙĥ": 109525, + "èº": 109526, + "ĠNgÃłnh": 109527, + "Ġसद": 109528, + "æľĹ": 109529, + "çĦ¶åIJİ": 109530, + "ãĤ¸ãĤ§": 109531, + "леÑĢ": 109532, + "ĠÐŀна": 109533, + "سÙĪÙĨ": 109534, + "Ïģον": 109535, + "ĠدرÛĮاÙģØª": 109536, + "à¸Ńà¸Ńà¸Ļà¹Ħลà¸Ļ": 109537, + "Ġdál": 109538, + "ĠмÑĸÑģÑĨе": 109539, + "Ġдней": 109540, + "ĠاÙĦات": 109541, + "Ġरहत": 109542, + "ï¼Į对": 109543, + "è³ĩæĸĻ": 109544, + "ä»»ä½ķ": 109545, + "éĦ": 109546, + "taj": 109547, + "βά": 109548, + "Ġнадо": 109549, + "ĠÑģÑĤÑĥд": 109550, + "ĠÅŁeh": 109551, + "ัà¸įà¸į": 109552, + "à¥ĭब": 109553, + "ãĥ©ãĥ¼": 109554, + "Û±Ûµ": 109555, + "ept": 109556, + "Ġbildir": 109557, + "สà¸ĸาà¸Ļ": 109558, + "еÑĤÑĮÑģÑı": 109559, + "ským": 109560, + "ĠоблаÑģÑĤÑĮ": 109561, + "Ġìŀł": 109562, + "ĠGör": 109563, + "Ġdayan": 109564, + "ĠÛĮاد": 109565, + "çĶŁäº§": 109566, + "íĺij": 109567, + "å¾ģ": 109568, + "Ġاجر": 109569, + "ĠпÑĢе": 109570, + "ä¸īä¸īä¸īä¸ī": 109571, + "åŁİå¸Ĥ": 109572, + "ĠпÑĢимеÑĢ": 109573, + "Äįást": 109574, + "èģĺ": 109575, + "ĠÙħربÙĪØ·": 109576, + "æŀļ": 109577, + "åĪĢ": 109578, + "æŁ¥çľĭ": 109579, + "Ġ모ëijIJ": 109580, + "ìŀIJë£Į": 109581, + "-、": 109582, + "Ġê°ĻìĿ´": 109583, + "Ġì¡´": 109584, + "егоÑĢ": 109585, + "edik": 109586, + "имÑĥ": 109587, + "ĠArth": 109588, + "åºĶç͍": 109589, + "miÅŁti": 109590, + "Ġkhá»ıe": 109591, + "ĠÑĸд": 109592, + "λλη": 109593, + "âh": 109594, + "маг": 109595, + "éļĨ": 109596, + "ĠвнÑĥÑĤÑĢ": 109597, + "Ġبط": 109598, + "(æĹ¥": 109599, + "İY": 109600, + "лик": 109601, + "ĠBản": 109602, + "ĠتÙĪØ³": 109603, + "़त": 109604, + "amak": 109605, + "åķıé¡Į": 109606, + "ĠÑģамоÑģÑĤ": 109607, + "ï¼¼Ċ": 109608, + "Ġç¦ı": 109609, + "Ù¡": 109610, + "ĠÑĦоÑĢми": 109611, + "ĠÑĢозÑĥм": 109612, + "ĠÙħطاÙĦ": 109613, + "ä¹Łæĺ¯": 109614, + "ç¾İåĽ½": 109615, + "ëĵľë¦½ëĭĪëĭ¤": 109616, + "ĠlÄ©nh": 109617, + "ĠпоÑĤомÑĥ": 109618, + "ÑıбÑĢÑı": 109619, + "漫": 109620, + "Ġngoại": 109621, + "à¸Ńำ": 109622, + "ÙĬÙĨا": 109623, + "Ġmlad": 109624, + "ÏĥÏĦά": 109625, + "اتر": 109626, + "주ìĿĺ": 109627, + "еннÑĸ": 109628, + "оза": 109629, + "ÙĤات": 109630, + "ĠÐĴаÑģ": 109631, + "è®Ń": 109632, + "éIJ": 109633, + "ÑĥÑİÑĩи": 109634, + "Ġکر": 109635, + "Ġ.|": 109636, + "Ġgenç": 109637, + "該": 109638, + "ä»ģ": 109639, + "одÑĭ": 109640, + "ĠØ£ÙĪÙĦ": 109641, + "ĠìĤ¬íļĮ": 109642, + "Ġà¹Ģส": 109643, + "ĠëķĮ문ìĹIJ": 109644, + "âĢĮب": 109645, + "ĠлиÑĪÑĮ": 109646, + "Ġименно": 109647, + "madı": 109648, + "ĠéĤ": 109649, + "ĠÙĪØ§Ø±Ø¯": 109650, + "Ġtakım": 109651, + "Ġà¹Ģห": 109652, + "Ġà¸Ńย": 109653, + "Ġkonusu": 109654, + "Ø®ÙĪ": 109655, + "ĠÑģид": 109656, + "赤": 109657, + "оÑıÑĤелÑĮ": 109658, + "ëĭµ": 109659, + "εÏī": 109660, + "ÑĸÑħ": 109661, + "Ġयद": 109662, + "ĠÚ©ÛĮÙģ": 109663, + "μοÏĤ": 109664, + "Ġaldı": 109665, + "ĠíĻį": 109666, + "кÑĥп": 109667, + "ĠÙĨÙħاÛĮØ´": 109668, + "ãģ¥": 109669, + "Ġíķ©ëĭĪëĭ¤": 109670, + "ĠëĮĵê¸Ģ": 109671, + "боÑĢа": 109672, + "éīĦ": 109673, + "Ġà¹Ģà¸Ī": 109674, + "à¹īà¸ģ": 109675, + "§ط": 109676, + "ربÙĩ": 109677, + "ĠÑĥз": 109678, + "ĠмаÑİÑĤÑĮ": 109679, + "Ġbyli": 109680, + "ีà¸ķ": 109681, + "Ġì§ĢìĽIJ": 109682, + "èĩªçĦ¶": 109683, + "ùy": 109684, + "ĠçaÄŁ": 109685, + "един": 109686, + "ëī´": 109687, + "åį±": 109688, + "ĠпозволÑı": 109689, + "ØŃاد": 109690, + "ĠÑĩего": 109691, + "ียร": 109692, + "Ġyöntem": 109693, + "Ġders": 109694, + "ĠÑģÑĤоÑı": 109695, + "ĠкÑĢÑĥп": 109696, + "Ġð": 109697, + "ĠдомаÑĪ": 109698, + "енд": 109699, + "ç»§": 109700, + "ĠÄijô": 109701, + "ĠchtÄĽ": 109702, + "计åĪĴ": 109703, + "ÎŃα": 109704, + "ĠdobÅĻe": 109705, + "สà¸Ńà¸ļ": 109706, + "еление": 109707, + "ĠÄijông": 109708, + "ãģ¾ãĤĬ": 109709, + "Ġboyunca": 109710, + "à¥ģà¤Ĺ": 109711, + "ĠÑĦиз": 109712, + "ãĤ³ãĥ³": 109713, + "Ġdeney": 109714, + "ÑĩеÑģкиÑħ": 109715, + "λον": 109716, + "以åıĬ": 109717, + "اÙĪØª": 109718, + "³³³³³": 109719, + "Ġì¤Ħ": 109720, + "िफ": 109721, + "ĠÑĤол": 109722, + "ĠëĤ´ê°Ģ": 109723, + "âĸı": 109724, + "Ġphá": 109725, + "ĠÑģпÑĸв": 109726, + "ĠجÙħÙĬع": 109727, + "ĠbezpeÄį": 109728, + "ĠæĹł": 109729, + "ĠvÅ¡e": 109730, + "ÑģÑĤвÑĥ": 109731, + "dust": 109732, + "oÅ¡": 109733, + "ĠتارÙĬØ®": 109734, + "اØŃØ©": 109735, + "ĠÙħشارÙĥØ©": 109736, + "Ġακ": 109737, + "ัà¸Ļà¸Ļ": 109738, + "éģĬ": 109739, + "ĠÑģоÑĤ": 109740, + "Ġказ": 109741, + "ĠÑĤеÑĩение": 109742, + "긴": 109743, + "acaktır": 109744, + "ê±°ëĤĺ": 109745, + "ียม": 109746, + "ĠÑģÑĥÑħ": 109747, + "ĠëĦĪ무": 109748, + "ãģıãĤĭ": 109749, + "ĠкоÑĤоÑĢой": 109750, + "اÙĤØ©": 109751, + "yıl": 109752, + "ãĤ»ãĥĥãĥĪ": 109753, + "ĠÑįлем": 109754, + "æģIJ": 109755, + "ÙĨاء": 109756, + "åħ©": 109757, + "ĠteÄı": 109758, + "严": 109759, + "Ġì§Ī문": 109760, + "Ġ为": 109761, + "ìĭľíĹĺ": 109762, + "ĠпÑĢок": 109763, + "ujeme": 109764, + "ücü": 109765, + "ĠاÙĦÙħغ": 109766, + "ĠØŃساب": 109767, + "ãģĹãģ¦ãģĦ": 109768, + "кова": 109769, + "ĠÄijÃło": 109770, + "ĠпÑĢиз": 109771, + "ĠÙĪÙħÙĨ": 109772, + "ĠоÑĢ": 109773, + "à¸ģà¸ķ": 109774, + "аÑĦ": 109775, + "Ġà¸ŀร": 109776, + "ÑĨией": 109777, + "æª": 109778, + "Ġpůsob": 109779, + "åŃ©åŃIJ": 109780, + "Ġbánh": 109781, + "ĠÑĦоÑĢмÑĥ": 109782, + "Ġá»ķ": 109783, + "Ġменее": 109784, + "à¹īาห": 109785, + "ниÑĨа": 109786, + "ีĊ": 109787, + "ĠволоÑģ": 109788, + "ĠارائÙĩ": 109789, + "第ä¸ī": 109790, + "ëIJĺìĹĪ": 109791, + "Ġkısm": 109792, + "ãĥ¼ãĥĬ": 109793, + "lerimiz": 109794, + "ÙĨÙĬÙĨ": 109795, + "ĠNgưá»Ŀi": 109796, + "ĠоÑĤдел": 109797, + "çļĦæĹ¶åĢĻ": 109798, + "онов": 109799, + "Äįan": 109800, + "izm": 109801, + "ĠÑģобой": 109802, + "à¹ĩà¸ķ": 109803, + "ĠÑģлÑĸд": 109804, + "Ġà¤ľà¤¹": 109805, + "ï¼ĮæĪij们": 109806, + "ãĢĤãģĿãģ®": 109807, + "ÏĢÏīÏĤ": 109808, + "çĨŁ": 109809, + "ฯ": 109810, + "ëĦIJ": 109811, + "æľĭ": 109812, + "Ġë¹Ħë°Ģ": 109813, + "ëįķ": 109814, + "ĠmÃłn": 109815, + "ìĿ´ê³ł": 109816, + "ëŀľëĵľ": 109817, + "éĤĦ": 109818, + "Ä±ÅŁÄ±k": 109819, + "Ġ个": 109820, + "Ġnád": 109821, + "бÑĢа": 109822, + "æĮĩå®ļ": 109823, + "larıyla": 109824, + "ĠÐŀни": 109825, + "Ġhra": 109826, + "ĠÑĢеÑĨеп": 109827, + "ĠÐłÐ¾ÑģÑģий": 109828, + "å½±åĵį": 109829, + "ĠKdyž": 109830, + "ĠÃ¶ÄŁrenc": 109831, + "åīµ": 109832, + "Ġjist": 109833, + "èĪĪ": 109834, + "触": 109835, + "åıijçݰ": 109836, + "มาย": 109837, + "erken": 109838, + "ĠздеÑģÑĮ": 109839, + "ĠÙħسئ": 109840, + "@nate": 109841, + "ĠëĤ´ìļ©": 109842, + "ĠnabÃŃd": 109843, + "ÛĢ": 109844, + "ĠмоменÑĤ": 109845, + "ãģłãģĮ": 109846, + "ίδα": 109847, + "Tak": 109848, + "Ġë³´ê³ł": 109849, + ":::::::::": 109850, + "ÄŁmen": 109851, + "ĠпомеÑī": 109852, + "ãģ«ãģ¤ãģĦãģ¦": 109853, + "ĠÙģÙĪÙĤ": 109854, + "ĠعضÙĪ": 109855, + "ĠÙħÛĮاÙĨ": 109856, + "Ġmüc": 109857, + "ĠпÑĢоÑıв": 109858, + "ÑĩеÑģки": 109859, + "ãģłãģĭãĤī": 109860, + "éĤ¦": 109861, + "Ġë¶ĦìĦĿ": 109862, + "飩": 109863, + "į¨": 109864, + "ĠDaha": 109865, + "ĠκÏĮ": 109866, + "ĠнаÑĩина": 109867, + "ĠÐŁÐ¾ÑĤ": 109868, + "ÏĥκεÏħ": 109869, + "ĠÑĢан": 109870, + "ÙĪÙĬس": 109871, + "::::::::::": 109872, + "Û±Û¹Û¹": 109873, + "Ġardından": 109874, + "à¹Ĥà¸Ķ": 109875, + "اراÙĨ": 109876, + "داد": 109877, + "Ġquý": 109878, + "ĠØ£Ùĥثر": 109879, + "âĹĨ": 109880, + "ĠأخرÙī": 109881, + "Ġë§ĪìĿĮ": 109882, + "릴": 109883, + "ĠعÙĦÙĪÙħ": 109884, + "ĠeÄŁ": 109885, + "воÑĢÑİ": 109886, + "ĠãĥĹ": 109887, + "ÑĥÑĩаÑģ": 109888, + "Ġبأ": 109889, + "ÏĨο": 109890, + "никами": 109891, + "à¹ĥà¸ķ": 109892, + "ÄįetnÄĽ": 109893, + "à¸ļาà¸ĩ": 109894, + "çīĻ": 109895, + "ãĥªãĤ«": 109896, + "íĴ": 109897, + "åĩºçīĪ": 109898, + "γι": 109899, + "ãĢĤãģĿãĤĮ": 109900, + "Ġyani": 109901, + "lech": 109902, + "ĠLuáºŃt": 109903, + "çļĦãģª": 109904, + "Ġnedeniyle": 109905, + "dej": 109906, + "ĠÑģовеÑĢÑĪ": 109907, + "Ġphá»ķ": 109908, + "ısından": 109909, + "Ġchắc": 109910, + "deÅŁ": 109911, + "Ġкоман": 109912, + "æĽ¿": 109913, + "Ġplán": 109914, + "Ġdữ": 109915, + "ĠêµŃê°Ģ": 109916, + "Ġtakip": 109917, + "Ġthá»§y": 109918, + "ÑģлÑĸд": 109919, + "âī§": 109920, + "ĠIIC": 109921, + "θÏħ": 109922, + "ávat": 109923, + "ĠÑģок": 109924, + "ĠбагаÑĤо": 109925, + ";:;:;:;:": 109926, + "ÏģιοÏĤ": 109927, + "ilmiÅŁtir": 109928, + "Ġznam": 109929, + "ĠΤα": 109930, + "amaz": 109931, + "à¹ģà¸ŀ": 109932, + "ãĥģãĥ£": 109933, + "Ġkullanı": 109934, + "æĶ¾éĢģ": 109935, + "дн": 109936, + "ĠÙĪØ§Ø¨": 109937, + "Ġtrắng": 109938, + "ÑģÑıг": 109939, + "Ġارتباط": 109940, + "ĠвÑħод": 109941, + "å·ŀå¸Ĥ": 109942, + "Ġसत": 109943, + "ÑĩаеÑĤÑģÑı": 109944, + "íĮĮíĬ¸": 109945, + "ĠNhững": 109946, + "ä¸įåı¯": 109947, + "å±Ĭ": 109948, + "ĠãĤŃ": 109949, + "ارÙĩاÛĮ": 109950, + "ĠarÅŁiv": 109951, + "ĠاÙĦÙī": 109952, + "ायà¤ķ": 109953, + "ãģĹãĤĩãģĨ": 109954, + "Ġulus": 109955, + "alaxy": 109956, + "기ê°Ģ": 109957, + "ãİ¡(": 109958, + "μάÏĦÏīν": 109959, + "èn": 109960, + "ùi": 109961, + "ĠнаÑģÑĤоÑı": 109962, + "ĠСв": 109963, + "ĠоÑģоби": 109964, + "ково": 109965, + "ĠÑĢебенка": 109966, + "ĠÑĤÑıж": 109967, + "Ġxuá»ijng": 109968, + "Ġê¶Į": 109969, + "огод": 109970, + "Ġấy": 109971, + "è²ł": 109972, + "วà¸Ļ": 109973, + "Ġstanov": 109974, + "Ġkrál": 109975, + "Ġà¤ĩसल": 109976, + "ebe": 109977, + "宾": 109978, + "ĠдоÑģÑĤаÑĤоÑĩно": 109979, + "IIIK": 109980, + "ÏĢά": 109981, + "Ġbirkaç": 109982, + "ĠاÙĦÙħÙĤ": 109983, + "ãĥ¶": 109984, + "ĠBaÅŁkanı": 109985, + "Ġ첨ë¶ĢíĮĮìĿ¼": 109986, + "Ġyarar": 109987, + "亡": 109988, + "ĠÏĢÏĮ": 109989, + "ÂłÑģ": 109990, + "δή": 109991, + "elerini": 109992, + "Ġsuç": 109993, + "Ġдома": 109994, + "ĠнаÑĢÑĥÑĪ": 109995, + "Ġί": 109996, + "Ġê·¸ìĿĺ": 109997, + "ç͵影": 109998, + "ابÙĩ": 109999, + "комÑĥ": 110000, + "Ġतब": 110001, + "à¥Īà¤ł": 110002, + "Ġ모ì§ij": 110003, + "Ġæ±Ł": 110004, + "Ġê²ĥìĿĢ": 110005, + "ονÏĦαι": 110006, + "ĠاÙĦرÙĬاض": 110007, + "許": 110008, + "Ġhalinde": 110009, + "ĠاشارÙĩ": 110010, + "ĠкÑĢÑĭ": 110011, + "лений": 110012, + "luÄŁ": 110013, + "Ġdobu": 110014, + "sik": 110015, + "à¥ģà¤Ł": 110016, + "ĠкÑĸн": 110017, + "ãģ¨ãģį": 110018, + "à¥Ĥस": 110019, + "æħ¢": 110020, + "ĠdÄ±ÅŁÄ±nda": 110021, + "ç·ı": 110022, + "ĠbÃŃ": 110023, + "ĠCLIIIK": 110024, + "ĠIICIII": 110025, + "Ġherk": 110026, + "ãĤıãģĽ": 110027, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 110028, + "³³³³³³": 110029, + "اÙĦد": 110030, + "Ġdavran": 110031, + "Äįer": 110032, + "ĠØŁ": 110033, + "ãģĺãĤĥãģªãģĦ": 110034, + "Ġdair": 110035, + "Ġ": 110036, + "ัà¸ĩส": 110037, + "Ġëĭ´": 110038, + "å¾ŀ": 110039, + "ĠÑįÑĤиÑħ": 110040, + "诺": 110041, + "á»·": 110042, + "еÑĢиÑģÑĤи": 110043, + "овÑĭÑħ": 110044, + "Ġãĥĩ": 110045, + "ضÙĬ": 110046, + "Ġà¤īà¤ł": 110047, + "ĠnapÅĻÃŃklad": 110048, + "è´Ŀ": 110049, + "ĠÅ¡k": 110050, + "ĠبÙĪØ¯ÙĨد": 110051, + "vůli": 110052, + "éģĩ": 110053, + "Ġзнай": 110054, + "ĠTham": 110055, + "rani": 110056, + "اØŃت": 110057, + "Ø´Ùĩ": 110058, + "мÑĸнÑĸÑģÑĤÑĢа": 110059, + "à¹ĭ": 110060, + "ĠÎijνα": 110061, + "à¥ĭà¤ļ": 110062, + "ç»Ħç»ĩ": 110063, + "ÑģÑĤиÑĤ": 110064, + "imli": 110065, + "åIJįçĦ¡ãģĹãģķãĤĵ": 110066, + "ÙijØ©": 110067, + "θμ": 110068, + "олоÑĤ": 110069, + "ยà¸ĩ": 110070, + "ãĤīãĤĮãĤĭ": 110071, + "ĠлиÑĩ": 110072, + "овÑĭе": 110073, + "éĢĥ": 110074, + "Ġ广": 110075, + "ìĬ¬": 110076, + "ÙħÛĮÙĨ": 110077, + "ĠìłĦì²´": 110078, + "ĠÎŃÏĩ": 110079, + "Ġì±ħ": 110080, + "Ġhlas": 110081, + "екÑĤив": 110082, + "ĠÏĢλη": 110083, + "luÄŁu": 110084, + "好çļĦ": 110085, + "ĠÚĨÙĪÙĨ": 110086, + "ĠBeled": 110087, + "Ġengel": 110088, + "нÑıÑı": 110089, + "ĠyaÅŁan": 110090, + "ÑĩниÑħ": 110091, + "ارÙĬØ©": 110092, + "मत": 110093, + "ãĥĭãĥĭãĥĭãĥĭ": 110094, + "åĭ¢": 110095, + "ĠåĨħ": 110096, + "Ġíı¬íķ¨": 110097, + "ĠобÑģ": 110098, + "Ġthấp": 110099, + "Ġdây": 110100, + "ãĥĸãĥ©": 110101, + "аÑĤÑĭ": 110102, + "ĠÑģвоей": 110103, + "ãĤīãģªãģĦ": 110104, + "åıijçĶŁ": 110105, + "erece": 110106, + "Ġodbor": 110107, + "ĠвнеÑģ": 110108, + "ĠÄIJảng": 110109, + "ĠëıĮìķĦ": 110110, + "ÄĽli": 110111, + "ısında": 110112, + "Ġबदल": 110113, + "vnÃŃ": 110114, + "ãģ®ãģ«": 110115, + "ĠпоÑĤом": 110116, + "imde": 110117, + "alama": 110118, + "âĢª": 110119, + "ĠstejnÄĽ": 110120, + "еÑĢе": 110121, + "éĴ¢": 110122, + "æľºæŀĦ": 110123, + "Ġè³": 110124, + "åͱ": 110125, + "Ġëħ¸ì¶ľ": 110126, + "Ġлибо": 110127, + "âĢĬ": 110128, + "Ġcez": 110129, + "romÄĽ": 110130, + "ίÏīν": 110131, + "ÏĨή": 110132, + "ĠíĻ©": 110133, + "Ġdlouh": 110134, + "骨": 110135, + "åħ¬éĩĮ": 110136, + "伸": 110137, + "Ġãĥij": 110138, + "ä»Ļ": 110139, + "Ġolmadı": 110140, + "елиÑĩ": 110141, + "ождениÑı": 110142, + "Ġsöyledi": 110143, + "átek": 110144, + "ìĥµ": 110145, + "ยวà¸ģ": 110146, + "Ġ鼻": 110147, + "Ġпев": 110148, + "ĠдÑĢÑĥгие": 110149, + "átku": 110150, + "ĠعÙĪ": 110151, + "ována": 110152, + "ضر": 110153, + "ĠëģĿ": 110154, + "ĠíĨµíķ´": 110155, + "Îĸ": 110156, + "Ġvur": 110157, + "åĨ²": 110158, + "ĠпÑĢек": 110159, + "Ġपà¤ķ": 110160, + "Ġà¹Ģà¸Ĺ": 110161, + "ãģ¨ãģĭ": 110162, + "عÙĨ": 110163, + "å®ĩ": 110164, + "ÏĦζ": 110165, + "Ġnằm": 110166, + "ĠÑģвоб": 110167, + "ĠδÏį": 110168, + "çĸĹ": 110169, + "-й": 110170, + "é¦Ļ港": 110171, + "تا": 110172, + "Ïĥιμο": 110173, + "íķĦ": 110174, + "Ġ详æĥħ": 110175, + "両": 110176, + "ÙİØ§ÙĦ": 110177, + "ĠTrưá»Ŀng": 110178, + "eného": 110179, + "ĠÑĢекомендÑĥ": 110180, + "ÛĮرÙĩ": 110181, + "าà¸ĸ": 110182, + "ĠکاÙħÙĦ": 110183, + "بط": 110184, + "زÛĮÙĨÙĩ": 110185, + "Ġдолжна": 110186, + "Ġë§İìĿĢ": 110187, + "âĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹı": 110188, + "lepÅ¡ÃŃ": 110189, + "алог": 110190, + "ãĤªãĥ³": 110191, + "Ġë³Ħ": 110192, + "ırı": 110193, + "ĠجاÙħعÙĩ": 110194, + "æĽľ": 110195, + "ojÃŃ": 110196, + "ĠÑĪлÑıÑħ": 110197, + "Ġhızlı": 110198, + "ĠخصÙĪØµ": 110199, + "ÐIJÑĢ": 110200, + "åľĺ": 110201, + "ĠживоÑĤ": 110202, + "é±": 110203, + "Ġngữ": 110204, + "Ġvòng": 110205, + "èİ«": 110206, + "ĠзаÑħод": 110207, + "ìĻĦ": 110208, + "ĠÑģледÑĥÑİÑī": 110209, + "éĹ»": 110210, + "ÑijÑĢ": 110211, + "ĠchvÃŃ": 110212, + "èĥľ": 110213, + "ãģªãģĹ": 110214, + "Ġteknoloj": 110215, + "ejména": 110216, + "ĠìłĪ": 110217, + "ì³IJ": 110218, + "æĻ®éĢļ": 110219, + "Ġvýro": 110220, + "Ġayrı": 110221, + "ĠпÑĢев": 110222, + "Ġgóp": 110223, + "à¹Ĥà¸ģ": 110224, + "à¸Ĺำà¹ĥห": 110225, + "åıİ": 110226, + "åĺī": 110227, + "Ġtelev": 110228, + "ãģ¨ãģĵãĤį": 110229, + "ëıĮ": 110230, + "phyl": 110231, + "ราะ": 110232, + "ĠçĪ": 110233, + "ÑģÑĤиÑĤÑĥ": 110234, + "ï¼Įè¿ĺ": 110235, + "ĠÎijγ": 110236, + "Äįku": 110237, + "æı´": 110238, + "ायत": 110239, + "æıı": 110240, + "ãĤĤãģĹ": 110241, + "ĠпеÑĢеÑģ": 110242, + "ĠìĺģíĻĶ": 110243, + "idla": 110244, + "åİħ": 110245, + "ï¼ı:": 110246, + "ترÛĮ": 110247, + "à¸Ľà¸ı": 110248, + "ĠнаÑģеленнÑı": 110249, + "Ġamaç": 110250, + "Ġkdo": 110251, + "ĠизвеÑģÑĤ": 110252, + "ÑĪиÑĢ": 110253, + "ì£ł": 110254, + "Å¡it": 110255, + "Ġtá»ijc": 110256, + "ìŀIJìĿĺ": 110257, + "ÑĩаÑĤ": 110258, + "åıĥ": 110259, + "鼶": 110260, + "å°º": 110261, + "Ġindir": 110262, + "ĠнаÑĨÑĸоналÑĮ": 110263, + "Ġxanh": 110264, + "ÛĮدÛĮ": 110265, + "ĠинÑĤеÑĢеÑģ": 110266, + "ĠآسÛĮ": 110267, + "éĤ£ä¸ª": 110268, + "Ġbilm": 110269, + "ане": 110270, + "ĠtÄĽchto": 110271, + "Ñĩик": 110272, + "ĠдоÑħод": 110273, + "èĤ¡ä»½": 110274, + "åħ³ç³»": 110275, + "ãģ«ãģªãģ£ãģŁ": 110276, + "ĠпÑĢедпÑĢи": 110277, + "Ġgeçen": 110278, + "ĠبÙĤ": 110279, + "Ġvýznam": 110280, + "Ġà¹Ģà¸Ħร": 110281, + "ĠÑħÑĤо": 110282, + "Ø´ÙĬ": 110283, + "åıĤåĬł": 110284, + "ÑģÑĤвенного": 110285, + "ÑĤÑĢон": 110286, + "ÂĢÂĢÂĢÂĢ": 110287, + "æ¢Ŀ": 110288, + "бав": 110289, + "Û±Û¶": 110290, + "顺": 110291, + "Ġjaz": 110292, + "ĠاÙĦÙħÙĦ": 110293, + "Ġاثر": 110294, + "ĠпÑĢивод": 110295, + "анÑĥ": 110296, + "à¥ģà¤Ń": 110297, + "æĹ§": 110298, + "ÑĮе": 110299, + "สล": 110300, + "лÑıÑİÑĤ": 110301, + "วà¸Ķ": 110302, + "Æ°á»Ľi": 110303, + "ÙĬÙħØ©": 110304, + "ãĤ¯ãĥŃ": 110305, + "лий": 110306, + "γÏģά": 110307, + "Ġperforman": 110308, + "è¯ī": 110309, + "ä½łçļĦ": 110310, + "ìħĶ": 110311, + "нениÑı": 110312, + "á»Ńi": 110313, + "ÙĪØ²ÛĮ": 110314, + "éŁ¿": 110315, + "à¥Īद": 110316, + "Ġ몸": 110317, + "Ġeser": 110318, + "ĠÙģØ¹Ø§ÙĦÛĮت": 110319, + "нÑĸвеÑĢ": 110320, + "κÏģα": 110321, + "証": 110322, + "Ġnemoc": 110323, + "Ġyardımcı": 110324, + "Ġçī¹": 110325, + "Ġкоп": 110326, + "ĠÐľÐ¾Ð¶": 110327, + "़à¤ķ": 110328, + "Ġëľ": 110329, + "ĠÑĢеак": 110330, + "Ġpozor": 110331, + "ÂłÐIJ": 110332, + "ĠÙĬÙĥ": 110333, + "ĠÑģад": 110334, + "Ġåħ«": 110335, + "ĠполÑĮз": 110336, + "ĠraÄŁmen": 110337, + "ternÃŃ": 110338, + "siyon": 110339, + "ÑģÑıÑĩ": 110340, + "ovaný": 110341, + "ĠëĮĢíķľë¯¼êµŃ": 110342, + "ĠвÑĸдб": 110343, + "ĠÐIJнд": 110344, + "stva": 110345, + "éĮĦ": 110346, + "Ġëij": 110347, + "ิà¸Ħ": 110348, + "jÃŃt": 110349, + "Ġkullanıcı": 110350, + "ĠæŁ¥çľĭ": 110351, + "ÙģÙĦ": 110352, + "ĠЯкÑīо": 110353, + "çľĭåΰ": 110354, + "ÑĢеÑħ": 110355, + "ĠاÙĦعربÙĬØ©": 110356, + "ë¡ľê·¸ëŀ¨": 110357, + "Ġà¤¬à¤ľ": 110358, + "ĠпÑĢип": 110359, + "Ġschop": 110360, + "ĠباÙĦا": 110361, + "å®ħ": 110362, + "ĠاÙĦÙħÙĩ": 110363, + "ανα": 110364, + "à¥ĭव": 110365, + "åģ´": 110366, + "å¼Ģåıij": 110367, + "ÙħاÙĦ": 110368, + "Ġधर": 110369, + "Ġdahil": 110370, + "ãĢģãģĵãģ®": 110371, + "ัà¸Īà¸Ī": 110372, + "ÑģпÑĸлÑĮ": 110373, + "Ġà¤ķप": 110374, + "ĠвеÑĩ": 110375, + "Ġвида": 110376, + "ĠÙħعÙĨ": 110377, + "ĠоÑĤли": 110378, + "iá»ħ": 110379, + "лиÑĪ": 110380, + "ĠÐŁÐ¾Ñģле": 110381, + "ãģĵãģĵ": 110382, + "Ġkültür": 110383, + "Ġجر": 110384, + "Ġæ¼": 110385, + "èĩº": 110386, + "Ġmevcut": 110387, + "Ù¾ÛĮ": 110388, + "ĠاÙĦسÙĦاÙħ": 110389, + "иÑĤелей": 110390, + "ĠÑĢоÑģÑĤ": 110391, + "Ġedil": 110392, + "Ġå·²": 110393, + "ç²¾åĵģ": 110394, + "ä»ħ": 110395, + "âĢĻye": 110396, + "à¥Īà¤Ĥ.": 110397, + "ĠåĨĨ": 110398, + "ëĪĦ": 110399, + "ĠìĻķ": 110400, + "æĺŃ": 110401, + "ĠÎļο": 110402, + "meden": 110403, + "Ġolab": 110404, + "ĠÚ©ÙĪØ¯": 110405, + "à¸Ħาส": 110406, + "еннаÑı": 110407, + "æĬ¼": 110408, + "ylül": 110409, + "Ġseviy": 110410, + "ĠdÄĽti": 110411, + "â̬Ċ": 110412, + "Ġعز": 110413, + "Ġuá»ijng": 110414, + "ĠسرÙħ": 110415, + "ене": 110416, + "ĠмаленÑĮ": 110417, + "ĠвÑĸдом": 110418, + "ัà¸ļà¸Ĺ": 110419, + "ĠThái": 110420, + "Ġà¤Ĩवश": 110421, + "roveÅĪ": 110422, + "çĽ£": 110423, + "ĠÑıзÑĭ": 110424, + "ĠOy": 110425, + "å£ģ": 110426, + "ваÑĤÑĮ": 110427, + "ладÑĥ": 110428, + "اصÙĦ": 110429, + "otÅĻeb": 110430, + "دÙĬØ«": 110431, + "íı°": 110432, + "νομ": 110433, + "гоÑĢод": 110434, + "Ġmuh": 110435, + "âĢĻl": 110436, + "ÑģÑĤвоÑĢ": 110437, + "åħĦ": 110438, + "ÐķÐł": 110439, + "Ø·ÙĦ": 110440, + "éľĩ": 110441, + "ÙİØª": 110442, + "ĠblÃŃ": 110443, + "Ġedildi": 110444, + "éĿł": 110445, + "äºĮåįģ": 110446, + "æĹĹ": 110447, + "Ġçiz": 110448, + "ĠÄijảo": 110449, + "Ġopat": 110450, + "oÄŁan": 110451, + "ë²Į": 110452, + "Ġéł": 110453, + "Ġsebep": 110454, + "ÑĥÑĤи": 110455, + "åĪº": 110456, + "طب": 110457, + "evÅ¡ÃŃm": 110458, + "chop": 110459, + "çĶļ": 110460, + "Ġnghá»ģ": 110461, + "ĠпаÑĢÑĤ": 110462, + "ุà¸Ħ": 110463, + "Ú©ÛĮÙĦ": 110464, + "dum": 110465, + "Ġortak": 110466, + "ãģŁãģĹ": 110467, + "Ġobyvatel": 110468, + "Ġvých": 110469, + "Ġveren": 110470, + "ĠвеÑģÑĮ": 110471, + "ĠÐĶа": 110472, + "Ġíķĺì§Ģë§Į": 110473, + "å¦ĤæŃ¤": 110474, + "Ġमहत": 110475, + "ัà¸ĩà¸ģฤษ": 110476, + "ãĢĤè¿Ļ": 110477, + "Ġгал": 110478, + "Ġsanat": 110479, + "éłĨ": 110480, + "ĠÑģамо": 110481, + "åĽ°": 110482, + "ีà¸Ń": 110483, + "ĠBaÅŁkan": 110484, + "ÏĦοÏħÏĤ": 110485, + "Ġyaptıģı": 110486, + "ÅĻit": 110487, + "ĠÑģÑĸлÑĮ": 110488, + "ानत": 110489, + "ĠÙĨت": 110490, + "ĠkhÄĥn": 110491, + "à¸Ĭà¸Ļะ": 110492, + "мини": 110493, + "ãĥ¬ãĥ¼": 110494, + "ëĤ¬": 110495, + "éħĴåºĹ": 110496, + "ĠاÙĦÙĬÙĪÙħ": 110497, + "ä¹Ĺ": 110498, + "à¸Ħรà¸ĩà¸ģาร": 110499, + "Ù쨧ÙĤ": 110500, + "Ġà¤ıस": 110501, + "Ġæ¡": 110502, + "گذ": 110503, + "Ġà¤ĩल": 110504, + "елениÑı": 110505, + "à¸ģรà¸ĵ": 110506, + "ä¸ľè¥¿": 110507, + "ÎŁÎľ": 110508, + "ĠmáºŃt": 110509, + "ĠsnÃŃ": 110510, + "ÂIJ": 110511, + "à¹Ģรา": 110512, + "íķ´ìķ¼": 110513, + "ĠìĦľë¹ĦìĬ¤": 110514, + "ĠداخÙĦ": 110515, + "Ġthắng": 110516, + "íĥĪ": 110517, + "авÑģÑı": 110518, + "ĠÑĸм": 110519, + "اÙħت": 110520, + "ĠÙĪÙĤت": 110521, + "à¥Ĥà¤ģ": 110522, + "ĠèIJ": 110523, + "ĠسÙĦاÙħ": 110524, + "ĠvzdÄĽl": 110525, + "å¸ĮæľĽ": 110526, + "åŃĺæ¡£": 110527, + "Ġà¸Ĺำ": 110528, + "ĠвÑĸйÑģÑĮ": 110529, + "аÑĢан": 110530, + "ĠÑĢÑĸк": 110531, + "ĠпиÑģÑĮ": 110532, + "Ġá¼IJ": 110533, + "기ëıĦ": 110534, + "ĠпоÑģÑĤоÑıн": 110535, + "ĠåĮĹ京": 110536, + "ĠNÄĽm": 110537, + "Ø´ÙĨاÙħÙĩ": 110538, + "ĠdalÅ¡ÃŃch": 110539, + "Ġباع": 110540, + "Ġpohy": 110541, + "اÙĦÙģ": 110542, + "à¸ŀวà¸ģ": 110543, + "éĭ": 110544, + "Ġcih": 110545, + "Ù¢": 110546, + "临": 110547, + "ãĤ¯ãĥĪ": 110548, + "пнÑı": 110549, + "Ġдал": 110550, + "ÙĴر": 110551, + "ãĢĢãĢĢĠãĢĢĠãĢĢ": 110552, + "æĬ¥åijĬ": 110553, + "ÙĪØ¯ÛĮ": 110554, + "ợi": 110555, + "ÑĨÑĸÑĶÑİ": 110556, + "ĠãĥĢ": 110557, + "ĠÑģÑĤеп": 110558, + "raž": 110559, + "ĠSaÄŁ": 110560, + "Ġtuyến": 110561, + "Ġalmak": 110562, + "ĠзаболеваниÑı": 110563, + "ĠÏĥÏĩ": 110564, + "Ġíĭ": 110565, + "Ġвим": 110566, + "硬": 110567, + "ĠäºĶ": 110568, + "Ġikinci": 110569, + "ุà¸į": 110570, + "สาว": 110571, + "ĠìĦ¸ê³Ħ": 110572, + "ĠÙħØŃÙĦ": 110573, + "ระหว": 110574, + "Ġelektron": 110575, + "Ġhại": 110576, + "æĹ¢": 110577, + "Ġíĸ¥": 110578, + "Ġjiné": 110579, + "Ġnghe": 110580, + "æij©": 110581, + "ĠÑģобÑĸ": 110582, + "Ư": 110583, + "ÑĤÑĥÑĢ": 110584, + "汽车": 110585, + "شاÙĩ": 110586, + "ĠdÃłnh": 110587, + "丹": 110588, + "ä»ĬæĹ¥": 110589, + "ãĥIJãĥ¼": 110590, + "ваниÑı": 110591, + "ĠساÙħ": 110592, + "çݯå¢ĥ": 110593, + "ĠاÙĦÙħÙĨت": 110594, + "ĠÑģеÑĢд": 110595, + "éģł": 110596, + "εÏĦ": 110597, + "ĠавÑĤ": 110598, + "าà¸ĩว": 110599, + "Ġvztah": 110600, + "ruž": 110601, + "алÑĮнаÑı": 110602, + "ĠطراØŃÛĮ": 110603, + "à¹Ĥรà¸ĩà¹ģรม": 110604, + "ĠÄįasto": 110605, + "Ġê¼": 110606, + "ÏĥÏĦÏĮ": 110607, + "Ġburada": 110608, + "Ġİz": 110609, + "Ġê·¸ëŀĺ": 110610, + "å²Ľ": 110611, + "ĠØ´ÙĪÙĨد": 110612, + "Å¡ek": 110613, + "ĠìĿ´ìķ¼": 110614, + "ãĤĮãģªãģĦ": 110615, + "ê·¹": 110616, + "lamÄ±ÅŁ": 110617, + "ä»į": 110618, + "cházet": 110619, + "ĠÑģÑĥÑĤ": 110620, + "æĹłæ³ķ": 110621, + "浦": 110622, + "ÄĽla": 110623, + "à¹ĥà¸Ļà¸Ĭ": 110624, + "Ġcân": 110625, + "ÎŁÎĵ": 110626, + "Ġzvý": 110627, + "Ġپار": 110628, + "ĠклÑĸ": 110629, + "Ġnové": 110630, + "çĶĺ": 110631, + "ë¹ł": 110632, + "má": 110633, + "ĠÑģол": 110634, + "à¤ķरण": 110635, + "ноÑĩ": 110636, + "Ġfik": 110637, + "Ġà¤ľà¤Ĺ": 110638, + "à¹ĩà¸Ļà¸ķ": 110639, + "ĠÙħتØŃ": 110640, + "Ġphiên": 110641, + "Ġolsun": 110642, + "Ġкаб": 110643, + "Ġhút": 110644, + "èĦ±": 110645, + "Ġåĸ": 110646, + "ĠHải": 110647, + "ĠtÄĽÅ¾": 110648, + "Ġthái": 110649, + "Ġتاب": 110650, + "-ÐŁ": 110651, + "ثار": 110652, + "çĨĬ": 110653, + "Ġними": 110654, + "Ġzprac": 110655, + "Ġतह": 110656, + "ĠмакÑģим": 110657, + "meyi": 110658, + "ĠÑģоÑĨи": 110659, + "æ²Ĵ": 110660, + "ĠìķĬëĬĶ": 110661, + "__": 110662, + "åķ¦": 110663, + "ĠاÙĨÙĪØ§Ø¹": 110664, + "æļ´": 110665, + "ä¸Ĭæµ·": 110666, + "åħ·æľī": 110667, + "à¥ģब": 110668, + "ìķĻ": 110669, + "Ġíģ°": 110670, + "Ġíŀĺ": 110671, + "Ġtránh": 110672, + "ियन": 110673, + "ãģ¾ãģ¾": 110674, + "поÑĩ": 110675, + "mÄĽr": 110676, + "å³°": 110677, + "ĠÙħصر": 110678, + "ĠÑįÑĦÑĦекÑĤив": 110679, + "Ġçı": 110680, + "leriyle": 110681, + "âĪļ": 110682, + "Ġì¶ķ": 110683, + "Ġê²Įìĭľ": 110684, + "ìĿij": 110685, + "ĠpoÅĻád": 110686, + "ĠشبکÙĩ": 110687, + "اÙĩØ´": 110688, + "ĠخدÙħات": 110689, + "ĠnaÅ¡e": 110690, + "νοÏį": 110691, + "Ġyönelik": 110692, + "Ġkork": 110693, + "اÙĩÙħ": 110694, + "è°Ī": 110695, + "Ġμη": 110696, + "Ġdolar": 110697, + "給": 110698, + "ĠÎķÏħ": 110699, + "ĠobdobÃŃ": 110700, + "ĠμÏĮ": 110701, + "à¹Ģà¸Ńà¸ģ": 110702, + "Ġپاسخ": 110703, + "è¡¥": 110704, + "اعد": 110705, + "ãĤīãģĦ": 110706, + "ÎŃλ": 110707, + "иÑĤÑĭ": 110708, + "Ġëħ¼": 110709, + "Ġ^{[": 110710, + "ίγ": 110711, + "æłij": 110712, + "lında": 110713, + "ĠìŬ룬": 110714, + "££": 110715, + "ÅĻil": 110716, + "ĠавÑĤоÑĢ": 110717, + "ÏĦικÏĮÏĤ": 110718, + "udur": 110719, + "Ġcư": 110720, + "Ġkıy": 110721, + "Ñģем": 110722, + "ĠأبÙĪ": 110723, + "ÏĦικÏİν": 110724, + "Û±Û·": 110725, + "貸": 110726, + "ĠпÑĢож": 110727, + "üncü": 110728, + "ĠнÑĸÑĩ": 110729, + "Ġमत": 110730, + "ãģķãĤĮãģ¦ãģĦãĤĭ": 110731, + "اصر": 110732, + "ĠعÙĤ": 110733, + "ĠкаÑĩеÑģÑĤве": 110734, + "ĠÐĵеÑĢ": 110735, + "åºĨ": 110736, + "Ù¹": 110737, + "alarda": 110738, + "Ġپرس": 110739, + "иÑĩеÑģкой": 110740, + "Ġphim": 110741, + "ίνη": 110742, + "ä¸ĩåĨĨ": 110743, + "ilerini": 110744, + "ãĢģ大": 110745, + "Ġolsa": 110746, + "æł¹æį®": 110747, + "âĢĮس": 110748, + "ĠThá»§": 110749, + "roje": 110750, + "нÑĮоÑĹ": 110751, + "Ġslou": 110752, + "ีฬ": 110753, + "ıyorum": 110754, + "ÄĽj": 110755, + "Ġخبر": 110756, + "è®Ĭ": 110757, + "Ġ缸": 110758, + "elerinin": 110759, + "íķĻëħĦëıĦ": 110760, + "ÑĩеÑģкие": 110761, + "ĠÅŁekl": 110762, + "ĠزÙħاÙĨÛĮ": 110763, + "Ġxin": 110764, + "ัà¸ģà¸ĩาà¸Ļ": 110765, + "ĠEkim": 110766, + "æĦ¿": 110767, + "Ġодной": 110768, + "νή": 110769, + "æľĢæĸ°": 110770, + "ĩ¼": 110771, + "Ġниж": 110772, + "Ġë³¼": 110773, + "è·ij": 110774, + "ĠнапиÑģ": 110775, + "èģĸ": 110776, + "ĠâĢĮ": 110777, + "æłĩåĩĨ": 110778, + "Ġvrát": 110779, + "ĠVì": 110780, + "ĠÙģØ±Ø§ÙĨ": 110781, + "æĿ¥çļĦ": 110782, + "å§¿": 110783, + "ÑħÑĥ": 110784, + "ĠبÛĮرÙĪÙĨ": 110785, + "ĠдÑĥÑĪ": 110786, + "ваÑİÑĤ": 110787, + "Ġsebe": 110788, + "é»ĺ": 110789, + "Ġkayıt": 110790, + "Ïģθ": 110791, + "ãģ¨ãģ®": 110792, + "ĠпÑĢоÑĨеÑģÑģ": 110793, + "æĮģãģ¡": 110794, + "Ñĸна": 110795, + "ĠÑĤоÑĤ": 110796, + "ĠÑĤакие": 110797, + "Theo": 110798, + "ĠÙĨÛĮر": 110799, + "ÑĨÑĥ": 110800, + "Ġayak": 110801, + "à¸Ļà¸Ń": 110802, + "Ġsitesinde": 110803, + "ĠÚ©ÙĨÛĮÙħ": 110804, + "ĠÑģоÑħ": 110805, + "Ġà¤®à¤ľ": 110806, + "Ġoluyor": 110807, + "ç½ijåĿĢ": 110808, + "Ġپزش": 110809, + "ĠEylül": 110810, + "dÃ¼ÄŁ": 110811, + "ĠبرخÛĮ": 110812, + "ĠÙħعرÙģ": 110813, + "Ġobec": 110814, + "ĠçalÄ±ÅŁma": 110815, + "ìĦ¼íĦ°": 110816, + "ĠÑģвоÑĶ": 110817, + "оÑģÑĤей": 110818, + ":::::::::::": 110819, + "ĠалÑĮ": 110820, + "竣": 110821, + "ĠباشÙĨد": 110822, + "اÙĦØ«": 110823, + "Ġнайб": 110824, + "Ġпока": 110825, + "Îŀ": 110826, + "ĠÙĪØ¥": 110827, + "ĠØ®ÙĪØ§ÙĨ": 110828, + "à¥ģपय": 110829, + "Ġà¹ĥห": 110830, + "ĠбÑĭÑģÑĤÑĢо": 110831, + "Ġthá»Ń": 110832, + "ëģ¼": 110833, + "Ġå¤ļ": 110834, + "两个": 110835, + "มà¸ķ": 110836, + "زارش": 110837, + "ĠëŁ": 110838, + "यह": 110839, + "Ñīина": 110840, + "ầng": 110841, + "ï½Ĺï½Ĺ": 110842, + "à¹Ģà¸ŀลà¸ĩ": 110843, + "tvrt": 110844, + "ĠÑĸнÑĪÑĸ": 110845, + "λεί": 110846, + "Ġviá»ĩn": 110847, + "ij¸": 110848, + "ĠçϽ": 110849, + "ÙİÙĪ": 110850, + "Ġchứa": 110851, + "stvo": 110852, + "ĠdoÄŁr": 110853, + "Ġiler": 110854, + "à¥ĭ,": 110855, + "à¹ĥà¸Ļà¸Ľ": 110856, + "ĠرÙĪØ³Øª": 110857, + "ÙĪÙĦÙĪ": 110858, + "Å¡lo": 110859, + "алиÑģÑĤ": 110860, + "åħ±åĴĮ": 110861, + "à¸ŀย": 110862, + "ĠìĻĢ": 110863, + "ÙĦÙĬÙĦ": 110864, + "ĠÑıкого": 110865, + "еÑģÑĤÑĮ": 110866, + "ĠÑĦин": 110867, + "ĠØ£ÙĨÙĩ": 110868, + "ĠMüdür": 110869, + "ĠÎĶια": 110870, + "ĠÑĤел": 110871, + "ि,": 110872, + "Ñĥки": 110873, + "ĠÐłÐ¤": 110874, + "ĠMayıs": 110875, + "à¹Īà¸Ńม": 110876, + "arken": 110877, + "æĢķ": 110878, + "بÛĮÙĨ": 110879, + "ÑĤаÑħ": 110880, + "ebo": 110881, + "ë³´ì¦Ŀê¸Ī": 110882, + "ĠÙ¾ÙĦ": 110883, + "ĠгÑĥб": 110884, + "ĠвклÑİÑĩ": 110885, + "æĶ¿æ²»": 110886, + "ĠεÏĢιÏĥ": 110887, + "ĠÙģØ§Ø±Ø³ÛĮ": 110888, + "èŃī": 110889, + "ÏĨη": 110890, + "(éĩij": 110891, + "ศร": 110892, + "åī§": 110893, + "âĢĻya": 110894, + "年度": 110895, + "ĠÙĨرÙħ": 110896, + "ÙĥÙĪÙħ": 110897, + "è¢ĭ": 110898, + "Ġnedenle": 110899, + "à¹īà¸Ńà¸ĩà¸ģาร": 110900, + "ãĢĮãģĤ": 110901, + "ĠпоÑģÑĤÑĥп": 110902, + "ìľĦìĽIJ": 110903, + "åįĺ": 110904, + "èݱ": 110905, + "Ġumož": 110906, + "pok": 110907, + "ÑĥÑģÑĤи": 110908, + "Ġéħ": 110909, + "ĠÑĦÑĸз": 110910, + "廣": 110911, + "ิหาร": 110912, + "ĠжÑĥÑĢн": 110913, + "ĠдÑĸÑĤей": 110914, + "ÑĥÑİÑīие": 110915, + "ä»Ĭ天": 110916, + "ìĿ´ëĿ¼ê³ł": 110917, + "ç²ī": 110918, + "èĴĻ": 110919, + "ĠDünya": 110920, + "егоднÑı": 110921, + "Ġmimo": 110922, + "Ġвин": 110923, + "ãģĿãģĵ": 110924, + "æ¯ķ": 110925, + "Ġأخ": 110926, + "ĠåIJĮ": 110927, + "ساÙĨÛĮ": 110928, + "Ġkah": 110929, + "ियर": 110930, + "ÏĢοÏĤ": 110931, + "jez": 110932, + "ÙĬج": 110933, + "ĠsaÄŁlay": 110934, + "اجÙĩ": 110935, + "Ġçł": 110936, + "ïľ": 110937, + "Ġجست": 110938, + "Ġtức": 110939, + "ươi": 110940, + "Ø´Ùģ": 110941, + "สà¸ķ": 110942, + "ĠÑĢеÑģ": 110943, + "Ġå£": 110944, + "Ġbizim": 110945, + "Ġê·Ģ": 110946, + "िब": 110947, + "ë¡ľìļ´": 110948, + "ĠÑģÑĤал": 110949, + "ĠÑĢÑĥÑģ": 110950, + "ĠOcak": 110951, + "åľ£": 110952, + "ĠúÄįast": 110953, + "iverz": 110954, + "ëĤĺëĬĶ": 110955, + "оÑĢоÑĤ": 110956, + "ÑĩинÑĭ": 110957, + "Ġihtiyaç": 110958, + "ÐĿÐŀ": 110959, + "ĠÐĿов": 110960, + "ียà¸Ķ": 110961, + "ĠпоÑĤÑĢÑĸбно": 110962, + "گز": 110963, + "ĠÑģказал": 110964, + "ĠGia": 110965, + "mesini": 110966, + "Ġbulunur": 110967, + "渡": 110968, + "гоÑĤ": 110969, + "Ġhuku": 110970, + "ëĦ·": 110971, + "ãĨ": 110972, + "ĠاÙĥ": 110973, + "ĠدÙĦÛĮÙĦ": 110974, + "Ġاساس": 110975, + "ìĹ°êµ¬": 110976, + "ĠÎĺε": 110977, + "ĠسÙĪØ±": 110978, + "Ġì¢Ģ": 110979, + "ĠاÙĦدر": 110980, + "ĠÑģÑĤÑĢоиÑĤелÑĮ": 110981, + "ĠÑĥк": 110982, + "ĠìĻľ": 110983, + "елик": 110984, + "OVID": 110985, + "Ġtemiz": 110986, + "亦": 110987, + "Ġthiếu": 110988, + "ĠпÑĥÑĤ": 110989, + "ÑİÑīей": 110990, + "ĠurÄį": 110991, + "ĠÄIJây": 110992, + "極": 110993, + "μοÏħ": 110994, + "Ġà¹Ģà¸Ļ": 110995, + "евеÑĢ": 110996, + "ÂłÐĶ": 110997, + "ì´Ŀ": 110998, + "è¶£": 110999, + "Ġà¤ħलà¤Ĺ": 111000, + "ưá»Ŀn": 111001, + "ĠãĥŃ": 111002, + "Ġê³³": 111003, + "é²ģ": 111004, + "ĠرسÛĮد": 111005, + "身ä½ĵ": 111006, + "ัà¸ĵà¸ij": 111007, + "ynÃŃ": 111008, + "جات": 111009, + "ì§Ģ를": 111010, + "नल": 111011, + "ìķĮ": 111012, + "Ñĸп": 111013, + "ĠvÃłng": 111014, + "ĠплоÑī": 111015, + "озмож": 111016, + "åī²": 111017, + "Ġthảo": 111018, + "лади": 111019, + "ĠåĿ": 111020, + "ĠÐľÐ¸": 111021, + "ĠделаÑĤÑĮ": 111022, + "éij": 111023, + "Ġhuy": 111024, + "اÛĮØ·": 111025, + "ĠповÑĤоÑĢ": 111026, + "ülen": 111027, + "ĠÙĪÙģ": 111028, + "ĠÙĬتÙħ": 111029, + "ĠÑĢежим": 111030, + "ĠìºIJ": 111031, + "ĠÃĩünkü": 111032, + "عدد": 111033, + "нивеÑĢ": 111034, + "ĠÐĿик": 111035, + "å¸ĸ": 111036, + "ÏįÏĢ": 111037, + "anlar": 111038, + "ستÛĮ": 111039, + "Ġbulunmaktadır": 111040, + "à¹ģà¸ļ": 111041, + "vek": 111042, + "Ġглаза": 111043, + "å¹ħ": 111044, + "Ġúdaj": 111045, + "ĠгÑĢо": 111046, + "ĠконкÑĥÑĢ": 111047, + "Ġdůležit": 111048, + "ĠØ·ÙĪØ±": 111049, + "à¸ĺาà¸Ļ": 111050, + "ĠÙĦÙĥÙĨ": 111051, + "رÙĤ": 111052, + "ÐļÐIJ": 111053, + "ĠéĿĴ": 111054, + "ĠìĤ¬ëŀij": 111055, + "ĠÑħвоÑĢ": 111056, + "sunuz": 111057, + "ĠÙħشخص": 111058, + "éϏ": 111059, + "Ġढ": 111060, + "Ġvaz": 111061, + "交æĺĵ": 111062, + "ĠÑĤеÑĢÑĢиÑĤ": 111063, + "ÑĩеÑģкой": 111064, + "ีà¹Ĥ": 111065, + "ropoda": 111066, + "ıldıģı": 111067, + "Ġëī´": 111068, + "íķĻ기": 111069, + "ë³´íĹĺ": 111070, + "ĠзаÑĤем": 111071, + "ÂłÐ²": 111072, + "ãĥ¼ãĥĨ": 111073, + "ĠÐŀÑģнов": 111074, + "ãĨį": 111075, + "Ġدع": 111076, + "ÐŁÐ¾Ñģ": 111077, + "æ²ī": 111078, + "Ġлож": 111079, + "ç͵åŃIJ": 111080, + "Ġرد": 111081, + "ĠÑģÑĢазÑĥ": 111082, + "ejte": 111083, + "Ġà¤ijफ": 111084, + "ĠtÃłu": 111085, + "ÃŃk": 111086, + "lanması": 111087, + "каÑĤ": 111088, + "าà¸ģาศ": 111089, + "ãĤ¢ãĤ¤": 111090, + "ÏĦιο": 111091, + "Ġå§": 111092, + "पत": 111093, + "EY": 111094, + "Ġjmé": 111095, + "Ġodkazy": 111096, + "Ġê°ľìĿ¸": 111097, + "éģ¿": 111098, + "bÄĽh": 111099, + "ÐłÐŀ": 111100, + "çĥĪ": 111101, + "Ġzarar": 111102, + "Ú¯ÙĪÙĨÙĩ": 111103, + "Ġtrì": 111104, + "Ġmại": 111105, + "еннÑĭм": 111106, + "ĠÑįконом": 111107, + "éĽ£": 111108, + "ĠíĦ": 111109, + "æİī": 111110, + "Ġsoru": 111111, + "ĠФедеÑĢаÑĨии": 111112, + "ĠÑģиÑģÑĤеми": 111113, + "æĸĻçĦ¡æĸĻ": 111114, + "Ġà¤ķà¤Ń": 111115, + "ĠÙĩÙĨد": 111116, + "ุà¸ĩà¹Ģà¸Ĺà¸ŀ": 111117, + "ĠOsmanlı": 111118, + "ĠпÑĢодолж": 111119, + "ĠÙĪÙĦا": 111120, + "ĠÄįlánku": 111121, + "Ġadım": 111122, + "ĠÏĢαÏģά": 111123, + "ĠzáÅĻÃŃ": 111124, + "Ġà¸Īำà¸ģ": 111125, + "Ġпен": 111126, + "menin": 111127, + "Ġìĺ¤ëĬĺ": 111128, + "emiz": 111129, + "οÏįÏĤ": 111130, + "-स": 111131, + "íķĺìĭľ": 111132, + "ĠÑħви": 111133, + "ãĤ°ãĥ©": 111134, + "ĠпоÑĪ": 111135, + "ĠÐŀднако": 111136, + "Ñĸдно": 111137, + "íĺľ": 111138, + "Ñīими": 111139, + "èĥ¸": 111140, + "Ġİlk": 111141, + "mey": 111142, + "Ġзда": 111143, + "κλη": 111144, + "алом": 111145, + "à¹Ģศษ": 111146, + "اÙĨا": 111147, + "ĠÎŁÎ¹": 111148, + "ĠåıĮ": 111149, + "ีà¸Ĥ": 111150, + "Ġبس": 111151, + "è§Ħå®ļ": 111152, + "isay": 111153, + "ukarı": 111154, + "æµģéĩı": 111155, + "vÃŃm": 111156, + "λÏİ": 111157, + "ä¹Ļ": 111158, + "Ġलड": 111159, + "ĠÙĨدارد": 111160, + "еÑĢом": 111161, + "Ġsırasında": 111162, + "ĠrÄĥng": 111163, + "Æ¡m": 111164, + "Ġlạnh": 111165, + "à¤ĥ": 111166, + "à¥ģण": 111167, + "uzey": 111168, + "ĠÑĥва": 111169, + "vÄĽd": 111170, + "ÑĭÑģ": 111171, + "Ġκι": 111172, + "Ñķ": 111173, + "ÛĮا": 111174, + "à¸ĩà¸Ħ": 111175, + "phylum": 111176, + "Ġberaber": 111177, + "ีà¸Ķ": 111178, + "æµ®": 111179, + "ासन": 111180, + "ovice": 111181, + "覧": 111182, + "Ġसफ": 111183, + "å°ij女": 111184, + "анÑĤи": 111185, + "é¨ĵ": 111186, + "Ġsoát": 111187, + "鬼": 111188, + "lanmÄ±ÅŁ": 111189, + "Ġbếp": 111190, + "ÙIJÙĦ": 111191, + "Ġsayısı": 111192, + "ĠÙĤدÙħ": 111193, + "à¥Īम": 111194, + "हम": 111195, + "ĠÑĢÑĥки": 111196, + "ĠصÙģØŃÙĩ": 111197, + "Å¡ky": 111198, + "é»Ĵ": 111199, + "èģļ": 111200, + "ãģĭãģ«": 111201, + "Ġsâu": 111202, + "едаг": 111203, + "ĠÑģÑĤоÑĢонÑĭ": 111204, + "Ġruk": 111205, + "âĢĮâĢĮ": 111206, + "ĠØ¢ÙĪØ±": 111207, + "ĠعدÙħ": 111208, + "õi": 111209, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 111210, + "Ġبازار": 111211, + "Ġedeb": 111212, + "ĠvÄįetnÄĽ": 111213, + "опаÑģ": 111214, + "Ġнег": 111215, + "mayan": 111216, + "коÑģÑĤÑĮ": 111217, + "Ġsvůj": 111218, + "ģında": 111219, + "ذÛĮر": 111220, + "Má»Ļt": 111221, + "ÐĦ": 111222, + "Ġyaptı": 111223, + "िथ": 111224, + "ĠÙħÙĩر": 111225, + "ĠдоÑģÑĤи": 111226, + "ĠصÙĪØ±": 111227, + "mesine": 111228, + "ĠDân": 111229, + "ä¸Ģä¸ĭ": 111230, + "çįİ": 111231, + "ĠÐľÐ¸Ñħ": 111232, + "ĠоÑĩи": 111233, + "ãĤ¦ãĤ§": 111234, + "ĠÑĸÑģ": 111235, + "Ġgiác": 111236, + "åľ¨çº¿è§Ĥçľĭ": 111237, + "ĠاداÙħÙĩ": 111238, + "ÑĨов": 111239, + "ĠкомÑĥ": 111240, + "Ġİngiliz": 111241, + "ĠгÑĢаж": 111242, + "ãģ¦ãĤĤ": 111243, + "Ġchữ": 111244, + "олÑĮкÑĥ": 111245, + "mÄĽt": 111246, + "Ñıгом": 111247, + "ÑĩаÑģÑĤ": 111248, + "ìĸ¼": 111249, + "Ġkhóa": 111250, + "ĠÐIJд": 111251, + "ĠØ¢ÙĤ": 111252, + "ĠkuruluÅŁ": 111253, + "άζ": 111254, + "Ġжов": 111255, + "ĠвÑģÑĤÑĢе": 111256, + "ĠÙĪÙĦÙĥ": 111257, + "Ġtuyá»ĩt": 111258, + "yı": 111259, + "ĠÐĴо": 111260, + "Ġvá»įng": 111261, + "عÙĬØ©": 111262, + "ĠopÄĽt": 111263, + "اÙĬد": 111264, + "à¥Ī.Ċ": 111265, + "ĠÑģами": 111266, + "åªĴ": 111267, + "Ġsvých": 111268, + "ĠëĤĺíĥĢ": 111269, + "ìĨIJ": 111270, + "ĠÙĦع": 111271, + "Ġetkin": 111272, + "ĠNá": 111273, + "ĠsoutÄĽ": 111274, + "층ìĿĺ": 111275, + "ĠçŃī": 111276, + "ĠرسÙħ": 111277, + "ĠخاÙĨÙĩ": 111278, + "Ġå®¶": 111279, + "iá»ģm": 111280, + "ëħIJ": 111281, + "ê°Ī": 111282, + "ì°©": 111283, + "žil": 111284, + "ÑģÑĤиÑĤÑĥÑĤ": 111285, + "oruÄį": 111286, + "Ġإذا": 111287, + "à¹Ħà¸Ĥ": 111288, + "ีà¸Ĭ": 111289, + "ÑĢаб": 111290, + "íķĻìĥĿ": 111291, + "Ġìī": 111292, + "rnek": 111293, + "ĠاستخداÙħ": 111294, + "ãĢĢĠãĢĢĠãĢĢĠãĢĢ": 111295, + "ĠвÑģем": 111296, + "ĠìłķëıĦ": 111297, + "Ġvyj": 111298, + "é̱": 111299, + "алÑĮное": 111300, + "Ġchuyá»ĩn": 111301, + "ì§ĢìĽIJ": 111302, + "ilerine": 111303, + "ĠìķĦ무": 111304, + "Ġоколо": 111305, + "ावन": 111306, + "à¸Ļา": 111307, + "опÑĢи": 111308, + "drž": 111309, + "ĠÑģÑĥÑģпÑĸлÑĮ": 111310, + "ĠبÙĥ": 111311, + "uky": 111312, + "ĠÏĩÏī": 111313, + "Ġtuần": 111314, + "nictvÃŃ": 111315, + "ĠÙĩدÙģ": 111316, + "Ġchiá»ģu": 111317, + "ÎĹÎĿ": 111318, + "å°ıå§IJ": 111319, + "íķĺìĺĢ": 111320, + "Ġklas": 111321, + "á»Ļn": 111322, + "ĠìĿ´íĽĦ": 111323, + "ÙĨاÙħج": 111324, + "Äįast": 111325, + "ĠاÙĦخاص": 111326, + "lÄ±ÅŁ": 111327, + "ĠعÙħر": 111328, + "ãĢįĊ": 111329, + "иболее": 111330, + "ãĤĬãģ®": 111331, + "ãħł": 111332, + "ä¹Łä¸į": 111333, + "кÑĢеÑĤ": 111334, + "ĠìĶ": 111335, + "ÏĦια": 111336, + "ĠÑĥпÑĢавлÑĸннÑı": 111337, + "æ²¢": 111338, + "Ġkesin": 111339, + "ì¡Įëĭ¤": 111340, + "머ëĭĪ": 111341, + "羣çļĦ": 111342, + "Ġbakım": 111343, + "æĿ±äº¬": 111344, + "¾¸": 111345, + "ÙħÙĦÙĥØ©": 111346, + "оÑĤÑĢеб": 111347, + "dın": 111348, + "ĠPÅĻi": 111349, + "ĠmÄĽli": 111350, + "Ġδημο": 111351, + "寸": 111352, + "ĠÙĪÙĥاÙĨ": 111353, + "Ġपढ": 111354, + "ĠвеÑĢÑħ": 111355, + "ĠеÑij": 111356, + "Cách": 111357, + "ä½ľä¸º": 111358, + "ĠÐļол": 111359, + "Ġве": 111360, + "ĠдеÑĢж": 111361, + "emoc": 111362, + "ãģ¸ãģ®": 111363, + "ĠаÑĢÑħ": 111364, + "Ġkiếm": 111365, + "Ġæĺİ": 111366, + "ĠлÑİдини": 111367, + "ë·": 111368, + "ĠÙĪØ§ÙĦت": 111369, + "Ġè°": 111370, + "çģ¯": 111371, + "íĻķ": 111372, + "Ġ구매": 111373, + "Ġç§ij": 111374, + "itnÃŃ": 111375, + "иÑĩеÑģкие": 111376, + "ĠÙĨÙ쨳": 111377, + "ĠتÙĦÙģ": 111378, + "اÙģÛĮ": 111379, + "ĠØŃسÙĨ": 111380, + "âĸ¡âĸ¡": 111381, + "ývá": 111382, + "ģın": 111383, + "ıyoruz": 111384, + "ĠChÃŃ": 111385, + "ĠÙ¾ÚĺÙĪÙĩØ´": 111386, + "ĠÏĦÎŃ": 111387, + "ĠÏĥÏĩε": 111388, + "олеÑĤ": 111389, + "αιδ": 111390, + "Ġhạt": 111391, + "à¸łà¸²à¸Ħ": 111392, + "åĨ°": 111393, + "Ġrychle": 111394, + "iteli": 111395, + "Âłz": 111396, + "ยà¸ģ": 111397, + "樹": 111398, + "ĠجÙĪØ§ÙĨ": 111399, + "æĺĮ": 111400, + "Ġüretim": 111401, + "ระà¸ļ": 111402, + "à¸Ľà¸£à¸°à¸¡": 111403, + "άÏĥ": 111404, + "岩": 111405, + "ĠÑĥÑģÑĤÑĢой": 111406, + "Ġverilen": 111407, + "ichni": 111408, + "ĠpÅĻÃŃmo": 111409, + "ĠاÙĦذÙĩاب": 111410, + "ì½ľ": 111411, + "æľ±": 111412, + "Ġسخ": 111413, + "Ñĸла": 111414, + "Ñĥма": 111415, + "หา": 111416, + "ÛĮدا": 111417, + "岸": 111418, + "ä¸Ģå®ļ": 111419, + "Ġä¼ļ": 111420, + "ĠÐŁÑĸд": 111421, + "ĠÑĩиÑĤ": 111422, + "иÑİ": 111423, + "ĠÐĹап": 111424, + "ÑĤиÑı": 111425, + "Ġê°ľë°ľ": 111426, + "ĠÑĤеоÑĢ": 111427, + "ÑıÑģÑĮ": 111428, + "ĠpÅĻÃŃprav": 111429, + "(åľŁ": 111430, + "ÙħÙĬ": 111431, + "ĠpÅĻedevÅ¡ÃŃm": 111432, + "ĠTemmuz": 111433, + "ĠподдеÑĢж": 111434, + "ĠнедоÑģÑĤаÑĤ": 111435, + "ĠìĿ´ìľł": 111436, + "Ġkhá»ıi": 111437, + "ĠاÙĦتØŃ": 111438, + "ĠÙħÙħÚ©ÙĨ": 111439, + "Ġvhod": 111440, + "евой": 111441, + "овал": 111442, + "Ġналеж": 111443, + "ï¼¼:": 111444, + "ยะ": 111445, + "ĠÙħاشÛĮÙĨ": 111446, + "Ġgá»Ńi": 111447, + "alım": 111448, + "ĠìµľìłĢ": 111449, + "ÙijÙĩ": 111450, + "á»Ļp": 111451, + "à¥Ģ।Ċ": 111452, + "ĠпиÑģ": 111453, + "ĠвÑģÑı": 111454, + "Ñĩем": 111455, + "ozenÃŃ": 111456, + "Ġäºļæ´²": 111457, + "еÑĢалÑĮ": 111458, + "기ëĬĶ": 111459, + "ĠпÑĢез": 111460, + "ĠعÙħÙĪÙħÛĮ": 111461, + "иÑĩниÑħ": 111462, + "Ġæ²³": 111463, + "odnÃŃ": 111464, + "åıªæĺ¯": 111465, + "Ġpodp": 111466, + "à¹īà¸Ńà¸ĩà¸ŀ": 111467, + "ायद": 111468, + "ाà¤ĩल": 111469, + "ลà¸Ķ": 111470, + "ĠÑĢÑĸÑĪеннÑı": 111471, + "ĠÑĤÑĥÑĢ": 111472, + "ÑģÑĮкÑĥ": 111473, + "Ġsaldır": 111474, + "ĠÐĽÑĮв": 111475, + "ãĢģĊ": 111476, + "ĠÙ¾ÛĮÙĪÙĨد": 111477, + "åŃ¦ä¹ł": 111478, + "λÏī": 111479, + "ovit": 111480, + "üle": 111481, + "女æĢ§": 111482, + "ÂŁ": 111483, + "emez": 111484, + "Ġhale": 111485, + "âī¦": 111486, + "ĠÎķκ": 111487, + "ÏĦηγοÏģία": 111488, + "ký": 111489, + "ìĦ±ìĿĦ": 111490, + "Ġtým": 111491, + "à¥ĩ-": 111492, + "Ġzejména": 111493, + "æĻ¶": 111494, + "Ġngon": 111495, + "ãĢıĊĊ": 111496, + "软件": 111497, + "éĤ£ä¹Ī": 111498, + "ĠкваÑĢÑĤи": 111499, + "ĠÙħÙĨظ": 111500, + "onec": 111501, + "Ġгли": 111502, + "à¥ģरà¤ķ": 111503, + "ĠSokol": 111504, + "Ġä¿Ŀ": 111505, + "див": 111506, + "álnÃŃm": 111507, + "acaģı": 111508, + "aÅŁa": 111509, + "ĠÙħاÙĦÛĮ": 111510, + "ĠÃĸn": 111511, + "иÑĤели": 111512, + "Ġخرد": 111513, + "Ġkullanıl": 111514, + "ĠÙħÛĮÙĦ": 111515, + "Ġíļ¨": 111516, + "ãn": 111517, + "Ġrost": 111518, + "Ġëĸł": 111519, + "ubat": 111520, + "ĠåıĤ": 111521, + "ĠبراÙĬ": 111522, + "ĠменÑĮ": 111523, + "ัà¸Ħร": 111524, + "Ġпомог": 111525, + "ĠØŃضÙĪØ±": 111526, + "Ġthá»ĭt": 111527, + "ä¹³": 111528, + "Ġìĭłì²Ń": 111529, + "ĠíĺĦìŀ¬": 111530, + "Ġë¹ł": 111531, + "вÑĢопей": 111532, + "Ġnejen": 111533, + "Ñĸка": 111534, + "Ġìļ¸": 111535, + "ĠÙħبار": 111536, + "ĠÄįek": 111537, + "Ġkalk": 111538, + "Ġamac": 111539, + "ادت": 111540, + "ĠÙħاسÙĩ": 111541, + "Ġarasındaki": 111542, + "ĠбеÑģ": 111543, + "ĠоÑĤделÑĮ": 111544, + "á½¶": 111545, + "ĠΤζ": 111546, + "vyk": 111547, + "جÙĨ": 111548, + "»ê²Į": 111549, + "ĠниÑĩего": 111550, + "ĠشاÙħÙĦ": 111551, + "ĠÑĥÑģловиÑıÑħ": 111552, + "laması": 111553, + "è½ī": 111554, + "ç¾½": 111555, + "Ġжид": 111556, + "ĠоÑĤноÑģ": 111557, + "ĠздÑĸйÑģнÑİ": 111558, + "ĠVỼi": 111559, + "ÙĪÙĦÛĮ": 111560, + "ĠtisÃŃ": 111561, + "ĠÏĩÏģÏĮ": 111562, + "ĠpracovnÃŃ": 111563, + "ĠÙĬÙĥÙĪÙĨ": 111564, + "ĠbeÅŁ": 111565, + "جز": 111566, + "ัà¸ļร": 111567, + "ĠYönet": 111568, + "ĠشراÛĮØ·": 111569, + "ĠتÙĪØ³Ø¹Ùĩ": 111570, + "çĹĩ": 111571, + "à¸ĩà¹Ģà¸Ľ": 111572, + "ä¸Ģ次": 111573, + "ĠÐłÐ¾ÑģÑģийÑģкой": 111574, + "æľĢé«ĺ": 111575, + "Ġspolu": 111576, + "даеÑĤÑģÑı": 111577, + "ÑĸÑĤÑĥ": 111578, + "ĠобÑĢаÑĤ": 111579, + "enek": 111580, + "Ġmek": 111581, + "å¦Ī": 111582, + "ĠдополниÑĤелÑĮ": 111583, + "Ġç²": 111584, + "ĠÙĦÙĦت": 111585, + "ĠHaziran": 111586, + "æ¸Ī": 111587, + "à¹Įà¸Ĥà¸Ńà¸ĩ": 111588, + "ĠÑĦон": 111589, + "Ġê²ĥìľ¼ë¡ľ": 111590, + "Ġnhé": 111591, + "Ġbugün": 111592, + "ovém": 111593, + "ĠзавеÑĢ": 111594, + "Ġдвиг": 111595, + "ä¼Ļ": 111596, + "Ġnuôi": 111597, + "меÑĢик": 111598, + "ĠÙĨÙħÙĪÙĨÙĩ": 111599, + "èį·": 111600, + "Ñĥвала": 111601, + "ç¿»": 111602, + "Ġsân": 111603, + "огоÑİ": 111604, + "اسÙĬØ©": 111605, + "ÑĥнкÑĤ": 111606, + "ánÃŃm": 111607, + "енное": 111608, + "Ġphút": 111609, + "Ġमर": 111610, + "ĠاÙĦÙĪØ·": 111611, + "Ġлегко": 111612, + "ĠãĢĭ": 111613, + "ë¡ľëĵľ": 111614, + "ĠKasım": 111615, + "ÙĬÙĦÙĬ": 111616, + "ĠbaÄŁlantılar": 111617, + "ĠÑĤÑĢÑĥд": 111618, + "Ø·Ùĩ": 111619, + "Ġkvůli": 111620, + "ÑģÑĤоÑı": 111621, + "ĠsatÄ±ÅŁ": 111622, + "ĠháºŃu": 111623, + "ĠبÙĩترÛĮÙĨ": 111624, + "ĠÑģелÑĮ": 111625, + "ัà¸Ļว": 111626, + "osu": 111627, + "यन": 111628, + "åĽ³": 111629, + "ιδ": 111630, + "ÛĮتÛĮ": 111631, + "ĠQuáºŃn": 111632, + "Ġей": 111633, + "à¹Ģวลา": 111634, + "ìĬ¤íĥĢ": 111635, + "ìĤ¬ë¥¼": 111636, + "ĠاÙĩÙĦ": 111637, + "ηγ": 111638, + "Ġká»·": 111639, + "ĠнаÑĤ": 111640, + "âĢ¡": 111641, + "ÑĸÑĩниÑħ": 111642, + "ĠÑĢазвиÑĤиÑı": 111643, + "ecial": 111644, + "ĠÑħозÑı": 111645, + "ваеÑĤ": 111646, + "ĠÄIJá»Ļ": 111647, + "Ġéĵ": 111648, + "Ġokam": 111649, + "ĠвÑģÑĸÑħ": 111650, + "ĠPraze": 111651, + "ë¥ł": 111652, + "ικα": 111653, + "欲": 111654, + "ĠgerçekleÅŁ": 111655, + "ç¥ĸ": 111656, + "Ġодним": 111657, + "ÂłM": 111658, + "Ġrenk": 111659, + "Ġलà¤ķ": 111660, + "ãĥķãĤ§": 111661, + "ĠÙĨزد": 111662, + "å¹»": 111663, + "ĠúzemÃŃ": 111664, + "æı¡": 111665, + "алиÑģÑı": 111666, + "ĠÃĶ": 111667, + "Ġyorum": 111668, + "ĠÏĢÏģÏī": 111669, + "ãĥ³ãĥĩ": 111670, + "éĸĭå§ĭ": 111671, + "ãĥ¼ãĥª": 111672, + "Ġìĸ¼êµ´": 111673, + "Û±Û±": 111674, + "lÃ¼ÄŁÃ¼": 111675, + "ÙĨØ´": 111676, + "à¹Īำ": 111677, + "èĽĭ": 111678, + "Ġأد": 111679, + "ĠWilli": 111680, + "課": 111681, + "Ġsürdür": 111682, + "ĠExternÃŃ": 111683, + "Ġpůvod": 111684, + "ĠخاÙĨÙĪ": 111685, + "ĠкоÑĤоÑĢое": 111686, + "Ġmohl": 111687, + "ĠstÄĽ": 111688, + "åĩı": 111689, + "ìĤ¼": 111690, + "abancı": 111691, + "à¹ģà¸Ļ": 111692, + "สำà¸Ħ": 111693, + "æĤ£": 111694, + "abilece": 111695, + "éĺ³åŁİ": 111696, + "ÎijÎļ": 111697, + "Ġchữa": 111698, + "ĠìķĦëĭ": 111699, + "طبÙĬÙĤ": 111700, + "ÎĻÎŁÎ¥": 111701, + "ÑĢование": 111702, + "åĩ½": 111703, + "Ġì¼": 111704, + "ÑĢоÑĦ": 111705, + "à¹ĩà¸Ļส": 111706, + "ĠãĤ¦": 111707, + "ï¼ļãĢĮ": 111708, + "á»ĭa": 111709, + "ĠhPa": 111710, + "manı": 111711, + "álnÃŃho": 111712, + "ÙĪØªÛĮ": 111713, + "ĠлеÑĩениÑı": 111714, + "jte": 111715, + "-д": 111716, + "åħ¨åĽ½": 111717, + "ĠбÑĥдÑĸв": 111718, + "ĠzatÃŃm": 111719, + "Ġöyle": 111720, + "ìĿ´ê°Ģ": 111721, + "stal": 111722, + "ivatel": 111723, + "Ġæľª": 111724, + "Ġpožad": 111725, + "ĠÑģни": 111726, + "ĠposlednÃŃ": 111727, + "ĠÑģÑĤанд": 111728, + "à¥Ģà¤ıम": 111729, + "Ġعکس": 111730, + "ÑĢиÑı": 111731, + "ãy": 111732, + "á»ĭp": 111733, + "Ġokul": 111734, + "à¸ĩหมà¸Ķ": 111735, + "Ġвозник": 111736, + "mÃŃ": 111737, + "ç§Ł": 111738, + "ĠÄijá»ijc": 111739, + "ĠpodÃŃ": 111740, + "ĠÅĻÃŃj": 111741, + "ĠÑĤакÑĸ": 111742, + "à¸ļาà¸Ĺ": 111743, + "Ġ보기": 111744, + "ลา": 111745, + "еÑģÑĤо": 111746, + "Ġç͍": 111747, + "инÑĭ": 111748, + "ĠÑĢÑĥÑħ": 111749, + "ĠÑĢаÑģполож": 111750, + "ÑīеннÑı": 111751, + "Ġcá»Ń": 111752, + "à¹īà¸ļร": 111753, + "à¥įयवस": 111754, + "ï¾ļ": 111755, + "ĠдалÑĮ": 111756, + "Ġضد": 111757, + "ÙĦÙĬØ©": 111758, + "ĠкоÑĤоÑĢого": 111759, + "Ġdve": 111760, + "Ġnhạc": 111761, + "ÑĦÑĸка": 111762, + "à¥Īà¤Ł": 111763, + "èĩªçͱ": 111764, + "ĠпоÑĢÑĥÑĪ": 111765, + "æľĭåıĭ": 111766, + "Ġdört": 111767, + "ĠÑĢаÑģпÑĢоÑģÑĤ": 111768, + "ãģ§ãģ¯ãģªãģĦ": 111769, + "ĠпеÑĢег": 111770, + "Ġánh": 111771, + "ĠVÃŃ": 111772, + "ظٹ": 111773, + "à¥įरण": 111774, + "Ġbilim": 111775, + "Ġlidé": 111776, + "ĠdÃŃky": 111777, + "ĠÄIJá»ĵng": 111778, + "ĠεÏģγ": 111779, + "Ġznovu": 111780, + "Ïĥια": 111781, + "Ñŀ": 111782, + "सà¤Ń": 111783, + "ekk": 111784, + "ĠμεÏĦά": 111785, + "ÑģÑĤиÑĩ": 111786, + "ÛĮÙĨÚ¯": 111787, + "ĠÑıвлÑıÑİÑĤÑģÑı": 111788, + "Ġ建": 111789, + "ÏĥÏĥα": 111790, + "авлива": 111791, + "à¸ģรม": 111792, + "ç¬Ķ": 111793, + "Ġге": 111794, + "ĠرÙĩ": 111795, + "Ġмел": 111796, + "ĠнапÑĢимеÑĢ": 111797, + "Ġмик": 111798, + "ĠاÙĦسÙĥاÙĨ": 111799, + "æ¤ľ": 111800, + "ĠÐļÑĢа": 111801, + "ĠvÃłi": 111802, + "ائÙħ": 111803, + "ĠÏĩÏģή": 111804, + "leÅŁme": 111805, + "Ġjas": 111806, + "ê²ĮìŀĦ": 111807, + "Ġmaç": 111808, + "Ġì§Ħíĸī": 111809, + "à¥ĩदन": 111810, + "Ġvůbec": 111811, + "ĠÙĦÙĨ": 111812, + "è«ĩ": 111813, + "âī¡âī¡": 111814, + "лением": 111815, + "عÙĨÛĮ": 111816, + "ãĥŀãĥ³": 111817, + "İZ": 111818, + "ĠÃĸÄŁ": 111819, + "ĠìŬìŀIJ": 111820, + "yÅ¡": 111821, + "ĠÑģÑĤа": 111822, + "Ġสำหร": 111823, + "Ġनव": 111824, + "ãĢĤä½Ĩ": 111825, + "олÑĮно": 111826, + "Ġyanında": 111827, + "è²´": 111828, + "Ġjednotliv": 111829, + "ĠåİŁ": 111830, + "éłħ缮": 111831, + "Ġमदद": 111832, + "리ìĹIJ": 111833, + "ĠÙħاÙĬ": 111834, + "ĠÑĩеÑĢв": 111835, + "Ġdáv": 111836, + "ÙĦÛĮÙĩ": 111837, + "?#": 111838, + "ÄįnÃŃm": 111839, + "ÑĢег": 111840, + "ĠпÑĢименÑı": 111841, + "ãĤĬãģ¨": 111842, + "ê°Ļ": 111843, + "Ġtoplam": 111844, + "ileÅŁ": 111845, + "Ġkategor": 111846, + "ÑĤал": 111847, + "ãģ«ãĤĪãĤĭ": 111848, + "Ġdomác": 111849, + "Ġê·ľ": 111850, + "ĠÙĩزار": 111851, + "ĠpÅĻÃŃstup": 111852, + "ılıyor": 111853, + "жди": 111854, + "ĠDương": 111855, + "ĠPháºŃt": 111856, + "Ġçünkü": 111857, + "구ê¸ĢìĥģìľĦ": 111858, + "ovaných": 111859, + "Ġعش": 111860, + "Ġà¤ķरà¤ķ": 111861, + "žÃŃt": 111862, + "ĠvÄĽtÅ¡ÃŃ": 111863, + "ĠاÙħکاÙĨ": 111864, + "Ġnông": 111865, + "Ġzám": 111866, + "à¥Įन": 111867, + "екаÑĢ": 111868, + "ÂłÐ¢": 111869, + "kami": 111870, + "ĠÑĢеÑģÑĥÑĢ": 111871, + "поÑģ": 111872, + "ÙİÙĤ": 111873, + "ίλ": 111874, + "ĠسازÛĮ": 111875, + "Ġçıkan": 111876, + "ĠdÃŃtÄĽ": 111877, + "ĠتصÙĪ": 111878, + "ç¯ĩ": 111879, + "нд": 111880, + "Ġrámci": 111881, + "hong": 111882, + "ĠÑģÑĸм": 111883, + "sak": 111884, + "кеÑĤ": 111885, + "дÑĸл": 111886, + "ç¹Ķ": 111887, + "ĠthÆ°á»Łng": 111888, + "ĠнеÑĹ": 111889, + "зÑĸ": 111890, + "ÅĻÃŃd": 111891, + "ितन": 111892, + "à¤ıà¤ķ": 111893, + "Ġsữa": 111894, + "ĠÙħرØŃ": 111895, + "éŀ": 111896, + "Ġcưá»Ŀng": 111897, + ":.:": 111898, + "ÑĤен": 111899, + "èī¦": 111900, + "Ġkhợi": 111901, + "Ġ기ì¤Ģ": 111902, + "lanır": 111903, + "彩票": 111904, + "ضÛĮ": 111905, + "Ġuzav": 111906, + "Ġboh": 111907, + "èm": 111908, + "Ġæ£": 111909, + "nici": 111910, + "(çģ«": 111911, + "åħ³äºİ": 111912, + "ÑĸÑĩнÑĸ": 111913, + "à¸ģารà¸ĵ": 111914, + "Ġ첫": 111915, + "ÑĢÑĥеÑĤ": 111916, + "ĠarÅŁivlendi": 111917, + "ÑĤим": 111918, + "à¸²à¸ł": 111919, + "Ġبرابر": 111920, + "Ġà¹Ģà¸ĭ": 111921, + "ĠÄijêm": 111922, + "è·³": 111923, + "Ġyönetim": 111924, + "Ġéķ·": 111925, + "ãĥĨãĥ¬ãĥĵ": 111926, + "маÑĤи": 111927, + "责任": 111928, + "ickým": 111929, + "è¸": 111930, + "à¹Ģหà¸ķ": 111931, + "ëłĮ": 111932, + "ĠرÙĬ": 111933, + "ĠвÑĭдел": 111934, + "åĩºçݰ": 111935, + "ĠпеÑģ": 111936, + "Ġì¢ĭìĿĢ": 111937, + "Ġà¤īसन": 111938, + "ĠAralık": 111939, + "ĠÑĩаÑģÑĥ": 111940, + "lava": 111941, + "Ġï½ŀ": 111942, + "æģĭ": 111943, + "دÛĮد": 111944, + "âĢĻden": 111945, + "ĠåĪĿ": 111946, + "ÙĪØ¯Ø©": 111947, + "Ñĩили": 111948, + "ĠÑħаÑĢакÑĤеÑĢиÑģÑĤи": 111949, + "استاÙĨ": 111950, + "दर": 111951, + "ĠبÙĪØ¯ÙĨ": 111952, + "ĠпалÑĮ": 111953, + "ĠÑĤÑĢади": 111954, + "ĠдеÑı": 111955, + "Ġخش": 111956, + "ĠpokraÄį": 111957, + "Ġ구ê¸Ģ": 111958, + "ковÑĸ": 111959, + "Ġtık": 111960, + "Ġhấp": 111961, + "Ġzalož": 111962, + "१à¥": 111963, + "Ġëĭµë³Ģ": 111964, + "меÑĪ": 111965, + "íļ¨": 111966, + "Ġspolup": 111967, + "ËĨ": 111968, + "辦": 111969, + "Ġgá»Ĺ": 111970, + "Ġå®ļ": 111971, + "ĵn": 111972, + "asından": 111973, + "-ı": 111974, + "ĠбеÑĢез": 111975, + "大åѸ": 111976, + "Ġзнов": 111977, + "ĠHoÃłng": 111978, + "ĠدÙĪÙĨ": 111979, + "Ġanlay": 111980, + "ĠÙĪØ²Ø§Ø±": 111981, + "ĠعÙĦÙħÛĮ": 111982, + "è£ľ": 111983, + "Ġdünya": 111984, + "ĠзалиÑĪ": 111985, + "даеÑĤ": 111986, + "νε": 111987, + "иÑĩеÑģкого": 111988, + "ìĬ¤íħľ": 111989, + "ĠÐijеÑĢ": 111990, + "Ġдж": 111991, + "ĠопаÑģ": 111992, + "ÏĨα": 111993, + "Ġzvlá": 111994, + "Ġtô": 111995, + "беÑĢ": 111996, + "ĠξαÏģ": 111997, + "tiÄŁini": 111998, + "ãĥ¬ãĥ³": 111999, + "ĠKho": 112000, + "ĠÑĸнÑĪ": 112001, + "Ġï¿¥": 112002, + "ì°¬": 112003, + "。": 112004, + "ĠноÑĩ": 112005, + "è¨Ĭ": 112006, + "ÄĽti": 112007, + "å¿Ļ": 112008, + "ĠکردÙĨد": 112009, + "ĠÄijẩy": 112010, + "ĠÑģказав": 112011, + "ëĥ¥": 112012, + "屬": 112013, + "Ġशहर": 112014, + "ĠÚ©ÙħÚ©": 112015, + "ÂłÐŁ": 112016, + "ınca": 112017, + "нÑĸвеÑĢÑģиÑĤ": 112018, + "ĠÚ¯ÙĪÙĨÙĩ": 112019, + "ĠToplam": 112020, + "ĠiÅŁaret": 112021, + "ä½łä»¬": 112022, + "Ġderece": 112023, + "ĠìĤ¬ìĭ¤": 112024, + "ĠìŀIJ기": 112025, + "å®ŀçݰ": 112026, + "çĶŁçī©": 112027, + "ãģ®ä¸Ģ": 112028, + "ĠÑĢом": 112029, + "ÙĪØ²Ùĩ": 112030, + "Ġãģ¨": 112031, + "íĻį": 112032, + "ÙĬÙĤ": 112033, + "ĠåIJįçĦ¡ãģĹãģķãĤĵ": 112034, + "ĠÙ¾ÛĮر": 112035, + "Ġполез": 112036, + "ì¶©": 112037, + "ĠкоÑĢп": 112038, + "IJëĭ¤": 112039, + "ừa": 112040, + "ÎķΤ": 112041, + "Ġжелез": 112042, + "ãģ£ãģ±": 112043, + "Ġxuyên": 112044, + "Ġë¥": 112045, + "à¥ĩ।Ċ": 112046, + "ĠÑģÑĤали": 112047, + "ĠpomocÃŃ": 112048, + "Ġdurumda": 112049, + "ĠпÑĢоÑĪ": 112050, + "lenÃŃ": 112051, + "βολ": 112052, + "Ġæĸĩ竳": 112053, + "tÄĽz": 112054, + "dÃŃl": 112055, + "Ġdruhé": 112056, + "ĠÑĤогда": 112057, + "Ġhrá": 112058, + "оÑĤÑĮ": 112059, + "าà¸ģร": 112060, + "ĠتصÙħ": 112061, + "ĠÙħدت": 112062, + "кадем": 112063, + "ĠpatÅĻÃŃ": 112064, + "ä¹ĭåīį": 112065, + "سبة": 112066, + "ĠпокÑĢÑĭ": 112067, + "Ġnáp": 112068, + "Ġ_{}": 112069, + "ëĵ±íķĻêµIJ": 112070, + "ĠØ¥ÙĦÙĬ": 112071, + "Ġözg": 112072, + "çļĨ": 112073, + "Ġhayvan": 112074, + "ĠNisan": 112075, + "غاز": 112076, + "Ġتت": 112077, + "ĠдÑĥÑħов": 112078, + "ĠÐŁÐ¾ÑįÑĤомÑĥ": 112079, + "ÑĮогод": 112080, + "ĠkuÅŁ": 112081, + "Ġà¤ĩसम": 112082, + "جÛĮ": 112083, + "ĠãĤ¿": 112084, + "ĠвкÑĥÑģ": 112085, + "çĢ": 112086, + "ĠвÑĭÑĪе": 112087, + "âĢĻdan": 112088, + "ĠاØŃÙħد": 112089, + "Ġtalep": 112090, + "ĠÏĪ": 112091, + "Ġdolayı": 112092, + "Ġگزارش": 112093, + "бол": 112094, + "ĠاÛĮÙĨتر": 112095, + "ÑĢоÑĩ": 112096, + ")âĢı": 112097, + "ĠëIJł": 112098, + "Ġkoup": 112099, + "(æľĪ": 112100, + "é±¼": 112101, + "ĠогÑĢа": 112102, + "ĠÑĢазм": 112103, + "Ġتست": 112104, + "ĠpÅĻÃŃslu": 112105, + "íĽĪ": 112106, + "ĠëĮĢíķ´": 112107, + "à¹ģà¸Ľ": 112108, + "аннÑĭе": 112109, + "ĠìĿ¸íĦ°": 112110, + "Ġkullanılan": 112111, + "Ġztr": 112112, + "æĬĢè¡ĵ": 112113, + "à¤¿à¤Ľ": 112114, + "ĠاÙĦÙħؤ": 112115, + "ovaly": 112116, + "ustos": 112117, + "Ġörg": 112118, + "Ġ太": 112119, + "ειο": 112120, + "ĠuÄį": 112121, + "ĠØ´Ú©ÙĦ": 112122, + "建çŃij": 112123, + "Ġchạy": 112124, + "ĠÏĩÏģη": 112125, + "нÑĥÑĤ": 112126, + "Ġباعث": 112127, + "ĠNÄĽkter": 112128, + "ÑĥÑĤÑĤÑı": 112129, + "ãģ§ãģĻãģĭ": 112130, + "Ġsayılı": 112131, + "имоÑģÑĤÑĮ": 112132, + "ĠпиÑĤаннÑı": 112133, + "ĠkÃŃnh": 112134, + "Ġhran": 112135, + "okrat": 112136, + "Ġedilir": 112137, + "Ġà¤ķहत": 112138, + "Ġpaci": 112139, + "ालन": 112140, + "Ġиде": 112141, + "ĠZem": 112142, + "Ġslužby": 112143, + "ÑģÑĤвеннÑĭй": 112144, + "ĠØ¢ÙĨاÙĨ": 112145, + "ĠÑĤоваÑĢи": 112146, + "ĠتØŃÙħÙĬÙĦ": 112147, + "ĠYük": 112148, + "ĠкаÑĤегоÑĢ": 112149, + "íĭĢ": 112150, + "ĠкоÑģ": 112151, + "Ġобов": 112152, + "ĠprostÅĻedÃŃ": 112153, + "ĠÑģоÑģ": 112154, + "ĠÐIJлекÑģанд": 112155, + "Ġà¹Ģà¸Ĥà¸ķ": 112156, + "å¿ħé¡»": 112157, + "ัà¸Ĭ": 112158, + "ĠÙĦد": 112159, + "ãĢģä¸Ģ": 112160, + "ĠÎľÎŃ": 112161, + "ÑĥваÑĤиÑģÑı": 112162, + "æķı": 112163, + "ãĥ¼ãĥIJ": 112164, + "اÙĦÙĦÙĩ": 112165, + "ĠبÙĩا": 112166, + "åĸ¶": 112167, + "è´µ": 112168, + "æĸ¹åIJij": 112169, + "Ġì¸": 112170, + "ĠÙĨاÙħÙĩ": 112171, + "ÑĮко": 112172, + "Ġvody": 112173, + "vÃŃc": 112174, + "à¹ģà¸Ī": 112175, + "ĠعÙĦÛĮÙĩ": 112176, + "à¹ģรà¸ĩ": 112177, + "ίνα": 112178, + "ãģ¬": 112179, + "ĠÐŀп": 112180, + "Ġsayf": 112181, + "ï¼Įçͱ": 112182, + "ä¼´": 112183, + "ĠÑĥдоб": 112184, + "ãģ¾ãģł": 112185, + "ĠнепÑĢи": 112186, + "Âİ": 112187, + "à¤¾à¤ľà¤ª": 112188, + "plnÄĽ": 112189, + "ĠìĹĦ": 112190, + "Ġrůzn": 112191, + "Ġxếp": 112192, + "ãĥĸãĥ«": 112193, + "ĠзаÑħиÑģÑĤ": 112194, + "ĠÙħصرÙģ": 112195, + "ĠvÅ¡echno": 112196, + "ãģ®ãģĬ": 112197, + "ĠThá»ĭ": 112198, + "Ġmùa": 112199, + "¿IJ": 112200, + "ĠпÑĢинÑĨип": 112201, + "ĠاÙĨÙĤÙĦ": 112202, + "гаÑĢ": 112203, + "Ġmožnost": 112204, + "ÙĤÙĬÙĤ": 112205, + "ĠotevÅĻ": 112206, + "Ġfak": 112207, + "Ġnguy": 112208, + "бов": 112209, + "lacaÄŁ": 112210, + "اطر": 112211, + "ãģ«ãĤĪãĤĬ": 112212, + "æĺ¯åľ¨": 112213, + "Ġtầng": 112214, + "ìĿ¸ìĿ´": 112215, + "aÅĻ": 112216, + "碰": 112217, + "ÏĮμε": 112218, + "Ġê°Ī": 112219, + "ĠØ£ØŃد": 112220, + "غراÙģ": 112221, + "ĠÙĬØŃ": 112222, + "ï½§": 112223, + "ĠاÙĦØŃÙĬاة": 112224, + "Ġlep": 112225, + "Ġฮ": 112226, + "tae": 112227, + "Ġlương": 112228, + "è½®": 112229, + "ĠзмÑĸн": 112230, + "ĠÐļиÑĹв": 112231, + "ĠмÑĸÑģÑı": 112232, + "кав": 112233, + "à¸ķะ": 112234, + "Ġmnoho": 112235, + "ĠNghá»ĭ": 112236, + "èĻİ": 112237, + "ĠãĥŁ": 112238, + "Ġpráci": 112239, + "Ġgá»ijc": 112240, + "ĠYeni": 112241, + "اضÙĬ": 112242, + "Ġèij": 112243, + "Ġкла": 112244, + "ıng": 112245, + "ÏĦεί": 112246, + "Ġbeni": 112247, + "Ġعد": 112248, + "Ġaktu": 112249, + "ĠÙĪÙĤد": 112250, + "ĠподгоÑĤов": 112251, + "Ġgiai": 112252, + "(æ°´": 112253, + "Ġsaç": 112254, + "ĠÙħÙĨاسب": 112255, + "âĸĭ": 112256, + "ÙIJÙĩ": 112257, + "éį": 112258, + "à¸Ńà¸Ĺ": 112259, + "ĠسÛĮاسÛĮ": 112260, + "olit": 112261, + "ĠاÙĦجز": 112262, + "Ø·ÙĦب": 112263, + "Ġsey": 112264, + "erence": 112265, + "ì´Į": 112266, + "ĠвнÑĥÑĤÑĢен": 112267, + "Ġà¸Ļาย": 112268, + "ĠìķĬìķĺëĭ¤": 112269, + "olik": 112270, + "æľĢåIJİ": 112271, + "仪": 112272, + "ĠÑĢÑĸд": 112273, + "è¼ĥ": 112274, + "Ġباب": 112275, + "Ñĥди": 112276, + "ĠÑģÑĤÑĥп": 112277, + "ĠÄijứng": 112278, + "ĠÅŁÃ¶yle": 112279, + "ĠíķĻìĥĿ": 112280, + "ĠвлаÑģÑĤи": 112281, + "Ġhãng": 112282, + "à¹īาว": 112283, + "ĠکاÙĩØ´": 112284, + "Ġëĵ¯": 112285, + "ĠجÙħÙĦÙĩ": 112286, + "Ġدکتر": 112287, + "adolu": 112288, + "Ġتبد": 112289, + "ظاÙħ": 112290, + "ĠznaÄį": 112291, + "ĠدÙĨÛĮ": 112292, + "Ġsạn": 112293, + "å¼±": 112294, + "ÏĢι": 112295, + "ĠçIJĨ": 112296, + "ĠÙ쨵ÙĦ": 112297, + "инг": 112298, + "ÐļÐŀ": 112299, + "ĠСов": 112300, + "Ġziyaret": 112301, + "ĠدÙħ": 112302, + "竹": 112303, + "Ġsahibi": 112304, + "isayar": 112305, + "ÄŁa": 112306, + "ĠпеÑĢÑĸод": 112307, + "Ġsna": 112308, + "(æľ¨": 112309, + "Ġнее": 112310, + "ĠÑĦакÑĤоÑĢ": 112311, + "меж": 112312, + "åºĦ": 112313, + "ráž": 112314, + "окÑĢем": 112315, + "Ġžal": 112316, + "ิà¹Ģศษ": 112317, + "豪": 112318, + "oucÃŃ": 112319, + "ĠUlus": 112320, + "Ġtakže": 112321, + "اÙĪÙĨ": 112322, + "ниÑĤи": 112323, + "нÑĮо": 112324, + "ëį¸": 112325, + "ĠÙĥرة": 112326, + "åľ³": 112327, + "ĠArthropoda": 112328, + "ĠÑĤодÑĸ": 112329, + "Ġدرصد": 112330, + "ุรà¸ģ": 112331, + "ĠÑģвого": 112332, + "说éģĵ": 112333, + "Ġcánh": 112334, + "æĵĬ": 112335, + "Ġä¸ĭè½½": 112336, + "èī¾": 112337, + "Ġnikdy": 112338, + "خط": 112339, + "ĠÑģейÑĩаÑģ": 112340, + "ÙĪÙĬÙĦ": 112341, + "amet": 112342, + "문ìĿĺ": 112343, + "ĠEÄŁitim": 112344, + "大ä¼ļ": 112345, + "ĠbÅĻez": 112346, + "заÑĨÑĸÑı": 112347, + "Ġtyto": 112348, + "най": 112349, + "غÙħ": 112350, + "Ġé©": 112351, + "计ç®Ĺ": 112352, + "Türkiye": 112353, + "Ġmnož": 112354, + "åIJĪä½ľ": 112355, + "æľįåĭĻ": 112356, + "Ġkaždý": 112357, + "ĠÑİÑĢид": 112358, + "Ġβα": 112359, + "à¥Ĥà¤ļ": 112360, + "åIJĮãģĺ": 112361, + "Ġçĭ": 112362, + "ίÏĦ": 112363, + "ÙĪÛĮÙĨت": 112364, + "اÙĨس": 112365, + "æľĢ大": 112366, + "ĠTừ": 112367, + "éŃĶæ³ķ": 112368, + "Ġбли": 112369, + "ĠÑĤакое": 112370, + "ãģľ": 112371, + "ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 112372, + "ìĿ´ë©°": 112373, + "ĠÙĤسÙħت": 112374, + "ĠоÑĨÑĸ": 112375, + "никÑĥ": 112376, + "ĠBạn": 112377, + "ĠоÑĢганÑĸз": 112378, + "üph": 112379, + "Ġizin": 112380, + "Ġï¾Ĭ": 112381, + "είÏĤ": 112382, + "à¸ĩà¹ģà¸ķ": 112383, + "ãģ¡ãĤī": 112384, + "важа": 112385, + "Ġ欧": 112386, + "ιÏİ": 112387, + "ÏĢÎŃ": 112388, + "ĠкÑĢеп": 112389, + "ĠÑĨиÑħ": 112390, + "æĦŁãģĺ": 112391, + "çķ«": 112392, + "ÙĥÙĪ": 112393, + "емо": 112394, + "žen": 112395, + "å¹³æĸ¹": 112396, + "ĠÙħجÙħÙĪØ¹Ùĩ": 112397, + "ĠÑģвои": 112398, + "ĠãĦ": 112399, + "à¸Ľà¸£à¸°à¸ģà¸Ńà¸ļ": 112400, + "ĠпÑĢоÑĤи": 112401, + "ÙĪÛĮÙĩ": 112402, + "认为": 112403, + "ÏĨÎŃ": 112404, + "иÑĩеÑģкий": 112405, + "æ¥ļ": 112406, + "Ġпап": 112407, + "δÏģο": 112408, + "Ġkullanım": 112409, + "Ġzbo": 112410, + "ĠúspÄĽ": 112411, + "ĠÙħز": 112412, + "ĠFak": 112413, + "елÑĮзÑı": 112414, + "æ´»åĭķ": 112415, + "ĠÐŁÑĢав": 112416, + "¦y": 112417, + "åĥķ": 112418, + "æijĺ": 112419, + "Ġرئ": 112420, + "ĠÏĨοÏģ": 112421, + "миÑĤ": 112422, + "Ġticaret": 112423, + "æ³ķå¾ĭ": 112424, + "年代": 112425, + "ìĪĻ": 112426, + "å¿ł": 112427, + "à¹ĩà¸Ļà¸Ĺ": 112428, + "ĠÑĥж": 112429, + "ĠÙħتØŃدÙĩ": 112430, + "Ġtrá»Ŀi": 112431, + "ĠرØŃ": 112432, + "ĠÚ©ÙĪÚĨ": 112433, + "ĠопÑĢеделен": 112434, + "ĠزÙħÛĮÙĨÙĩ": 112435, + "Ġnóng": 112436, + "Ġngá»§": 112437, + "Những": 112438, + "ĠкиÑĪ": 112439, + "Ġjde": 112440, + "Ġä¸Ĭæµ·": 112441, + "åĭĩ": 112442, + "Ġtanı": 112443, + "à¹Įà¹ģละ": 112444, + "ĠÑĢаÑģÑĤвоÑĢ": 112445, + "ĠÑģÑĢедÑģÑĤв": 112446, + "Ġcán": 112447, + "Ġsystému": 112448, + "ÛĮØ·": 112449, + "ĠÑģиÑģÑĤема": 112450, + "Ġëŀ": 112451, + "ĠÑĩеÑĤ": 112452, + "éĥ¨éŨ": 112453, + "帰": 112454, + "Ġmillet": 112455, + "ĠÎķλλά": 112456, + "à¥ĩà¤ĸन": 112457, + "Ġrepubliky": 112458, + "ÑĢами": 112459, + "Ġसमस": 112460, + "Ġaçısından": 112461, + "ادÙĦ": 112462, + "ĠбеÑģп": 112463, + "ãĥ»âĶģ": 112464, + "åľŃ": 112465, + "ocu": 112466, + "kánÃŃ": 112467, + "ÙĪØ±Ø´": 112468, + "ëŀµ": 112469, + "Ġçģ": 112470, + "è°ģ": 112471, + "Ġsám": 112472, + "ĠνεÏĨ": 112473, + "bilir": 112474, + "ĠmÃŃstÄĽ": 112475, + "Ġžen": 112476, + "Ġilç": 112477, + "Ġë§ģ": 112478, + "ãĢijĊ": 112479, + "ĠÙħÙĪØ§Ø±Ø¯": 112480, + "ĠاÙĦØ´ÙĬ": 112481, + "Ġ기ë¡Ŀ": 112482, + "Ġtady": 112483, + "à¸Ńาà¸Ī": 112484, + "ĠÑģÑĦ": 112485, + "ĠspoleÄįnost": 112486, + "Ġtématu": 112487, + "ÙħاÙħ": 112488, + "Ùħع": 112489, + "Ġлеж": 112490, + "ĠÚĨØ´Ùħ": 112491, + "ĠiÅŁlet": 112492, + "ĠÙĨسخ": 112493, + "ä¼°": 112494, + "ãģįãģª": 112495, + "ãĢĥ": 112496, + "å²Ĺ": 112497, + "ĠåŃIJ": 112498, + "Ġbảng": 112499, + "çĮ®": 112500, + "Ġcứng": 112501, + "ĠкÑĢай": 112502, + "Ġèĭ±è¯Ń": 112503, + "ÐłÐIJ": 112504, + "زÙĨ": 112505, + "èĥŀ": 112506, + "Ġsüreç": 112507, + "ãĥķãĥĪ": 112508, + "ĠкÑĸлÑĮка": 112509, + "neÄŁin": 112510, + "ovány": 112511, + "лÑĸн": 112512, + "Ġvýraz": 112513, + "ĠÑģÑĩиÑĤа": 112514, + "ĠпÑĢавило": 112515, + "ĠиÑģполÑĮзÑĥ": 112516, + "Ġkéo": 112517, + "ĠyaklaÅŁÄ±k": 112518, + "ĠÙĪØ§Ø¨Ø³ØªÙĩ": 112519, + "оваÑĤелÑĮ": 112520, + "Ġì²ł": 112521, + "ĠاÙĦعاÙħ": 112522, + "åĿı": 112523, + "Ġà¸ī": 112524, + "ĠSÆ¡n": 112525, + "λιο": 112526, + "ì¶Ķì²ľ": 112527, + "Ġslužeb": 112528, + "ĠдеÑıÑĤелÑĮноÑģÑĤи": 112529, + "зм": 112530, + "Ġпози": 112531, + ".;.;": 112532, + "ĠпÑĢоиÑģÑħодиÑĤ": 112533, + "ายà¹ĥà¸Ļ": 112534, + "çļĦãģ«": 112535, + "Ġà¤ĩसस": 112536, + "омеÑĤ": 112537, + "ĠαÏģ": 112538, + "ाà¤Ĺर": 112539, + "icÃŃch": 112540, + "Ġpoložky": 112541, + "골": 112542, + "æĥĬ": 112543, + "Ġöner": 112544, + "Ġxảy": 112545, + "ĠÙĨظرÛĮ": 112546, + "Ġnghá»ī": 112547, + "Ġà¸ľà¸¥": 112548, + "ĠÑĢолÑĮ": 112549, + "ĠÑĢемон": 112550, + "صÙĪØ±": 112551, + "Vý": 112552, + "ĠSá»ij": 112553, + "ĠÑģÑĥÑĩаÑģ": 112554, + "หย": 112555, + "ĠاÙĤداÙħ": 112556, + "Ġerkek": 112557, + "Ġèį": 112558, + "ĠÄijôi": 112559, + "ĠконкÑĢеÑĤ": 112560, + "æ¬Ĭ": 112561, + "Ġ缮": 112562, + "ÙĪÚ©": 112563, + "lıkla": 112564, + "Ġpazar": 112565, + "άνÏī": 112566, + "ÑĥÑģÑĤа": 112567, + "ãģªãģŁ": 112568, + "ĠÙĩÙĨÚ¯": 112569, + "Ð®ÐĽ": 112570, + "Ġвелик": 112571, + "ĠnhỼ": 112572, + "ĠìĭľíĹĺ": 112573, + ")ìĿĺ": 112574, + "ÙĥÙĩ": 112575, + "Ġà¹ģล": 112576, + "Û²Ûµ": 112577, + "ĠارساÙĦ": 112578, + "ĠокÑĢем": 112579, + "άÏĤ": 112580, + "ĠвÑĭÑħод": 112581, + "vÄĽtÅ¡ÃŃ": 112582, + "ĠطرÛĮÙĤ": 112583, + "ĠкоÑĢоÑĤ": 112584, + "нÑĶ": 112585, + "ãĤĬãģ«": 112586, + "Ġä¹Ł": 112587, + "ØŃص": 112588, + "عÙħاÙĦ": 112589, + "olojik": 112590, + "Ġرابط": 112591, + "çªĹ": 112592, + "Ġgiz": 112593, + "Ġchết": 112594, + "樣": 112595, + "สà¸ĩ": 112596, + "ÙĪØªØ±": 112597, + "ĠÑıкÑĥ": 112598, + "çı¾åľ¨": 112599, + "ĠоÑĤÑģÑĥÑĤÑģÑĤв": 112600, + "Ġê´ijê³ł": 112601, + "Ñĸки": 112602, + "å̤": 112603, + "订": 112604, + "Ġdle": 112605, + "Ġåł": 112606, + "権": 112607, + "讯": 112608, + "åĶIJ": 112609, + "Ġâĸ²": 112610, + "Ġlistop": 112611, + "Ġdatové": 112612, + "ÏĦÏĮÏĤ": 112613, + "Ġоз": 112614, + "δÏĮ": 112615, + "èĴĤ": 112616, + "Û³Û°": 112617, + "ãĥªãĥ¼ãĤº": 112618, + "ĠÙħرکز": 112619, + "ĠпÑĸдÑĤÑĢим": 112620, + "ĠÑģез": 112621, + "é¡ĺ": 112622, + "Ġolacaktır": 112623, + "æºĢ": 112624, + "ĠÏĢεÏģιο": 112625, + "ÑĦа": 112626, + "ÏĦηÏĥη": 112627, + "ç»ĥ": 112628, + "Ðŀд": 112629, + "δÏħ": 112630, + "âĦĥ": 112631, + "Ġlắp": 112632, + "ĠëĦĺ": 112633, + "طاÙĨ": 112634, + "ĠÙ¾ÙĨج": 112635, + "تاÙĨ": 112636, + "ilerinin": 112637, + "ÃĪ": 112638, + "ĠØ®ÙĪØ´": 112639, + "ĠìĬ¬": 112640, + "ĠاÙĦرئÙĬس": 112641, + "ẵn": 112642, + "Ġشار": 112643, + "eru": 112644, + "жив": 112645, + "à¸Ļาย": 112646, + "Ġsẻ": 112647, + "Ġà¤īà¤ļ": 112648, + "ãģ«ãģĭ": 112649, + "ç¡Ģ": 112650, + "Ġyürüt": 112651, + "ĠСеÑĢг": 112652, + "ĠкаÑģ": 112653, + "ĠÐijог": 112654, + "Ġìĸ´ëĸ»ê²Į": 112655, + "ĠçŁ³": 112656, + "Ġöldür": 112657, + "лÑĸв": 112658, + "ĠhoÃłng": 112659, + "Ġbá»Ļt": 112660, + "çŀ¬": 112661, + "Ġ침": 112662, + "Nếu": 112663, + "Ġnevy": 112664, + "Ġìľ¤": 112665, + "ĠsouÄįást": 112666, + "ısıyla": 112667, + "Ġtüket": 112668, + "bou": 112669, + "Ġдво": 112670, + "سط": 112671, + "å½ĵçĦ¶": 112672, + "ãĥ¨": 112673, + "ĠزادÙĩ": 112674, + "Ġéĥ¨": 112675, + "ĠرÙĪØŃ": 112676, + "Ġï¼į": 112677, + "ĠмÑĸÑģÑĨев": 112678, + "θεν": 112679, + "à¸Ĩ": 112680, + "ленÑĸ": 112681, + "çį²": 112682, + "ĠHOH": 112683, + "sın": 112684, + "ิà¸ķร": 112685, + "財": 112686, + "ĠpÅĻid": 112687, + "à¹Ģหà¸Ļ": 112688, + "lý": 112689, + "è¨Ģèijī": 112690, + "à¤ĵ": 112691, + "âĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸį": 112692, + "باب": 112693, + "ãĥ¼ãĥķ": 112694, + "моÑĢ": 112695, + "è¿ĩç¨ĭ": 112696, + "ĠãĥĽ": 112697, + "ĠKinh": 112698, + "íķľêµŃ": 112699, + "Ġìĸ´ëĸ¤": 112700, + "ĠвлиÑı": 112701, + "Ġfayd": 112702, + "ĠصÙĨع": 112703, + "Ġalır": 112704, + "ĠettiÄŁi": 112705, + "άκ": 112706, + "imizin": 112707, + "ัà¸ļà¸ľ": 112708, + "ĠземелÑĮ": 112709, + "ÙĬÙĦاد": 112710, + "涨": 112711, + "çıł": 112712, + "Ġأغ": 112713, + "Ġzku": 112714, + "âĢŀA": 112715, + "าà¸ķร": 112716, + "ayi": 112717, + "ãĥ©ãĤ¹": 112718, + "ило": 112719, + "ĠÄijá»į": 112720, + ".Îķ": 112721, + "ëľ": 112722, + "ĠμÏĢοÏģεί": 112723, + "帶": 112724, + "Ġartır": 112725, + "าà¸į": 112726, + "å¿ĺ": 112727, + "talya": 112728, + "ĠpozdÄĽji": 112729, + "ĠnepÅĻ": 112730, + "Ġæ¹": 112731, + "اÙĩÛĮ": 112732, + "Ġsatın": 112733, + "Ġë²Į": 112734, + "جÙĪ": 112735, + "ä¸Ģ缴": 112736, + "ìķĦìļĶ": 112737, + "ÂłP": 112738, + "ĠØĽ": 112739, + "Ġпал": 112740, + "表æĥħ": 112741, + "Ġcanlı": 112742, + "æĪIJ为": 112743, + "ÙĪÙĨا": 112744, + "Ġâ̝": 112745, + "à¸ģำล": 112746, + "åįĸ": 112747, + "ĠαÏĥ": 112748, + "инок": 112749, + "амп": 112750, + "ลà¸Ńà¸ĩ": 112751, + "ÙĤÙĤ": 112752, + "ĠпÑĢоÑħод": 112753, + "ãĤĦãĤĭ夫": 112754, + "Ïĩη": 112755, + "貨": 112756, + "ĠÙģÙĬÙĩ": 112757, + "ÙĬرÙĬ": 112758, + "ĠвнеÑĪ": 112759, + "Ġkarak": 112760, + "Ø«ÙĦ": 112761, + "ÙĩÙĪØ±ÛĮ": 112762, + "اÙĪØ±Ù¾": 112763, + "ĠÄijá»ı": 112764, + "jiÅ¡tÄĽnÃŃ": 112765, + "تبر": 112766, + "Ġê·¸ê²ĥ": 112767, + "Ġgül": 112768, + "ĠпокÑĥп": 112769, + "lilik": 112770, + "Ġzda": 112771, + "åīįãģ«": 112772, + "ĠÙħÙĩÙĨد": 112773, + "ĠÎijÎĿ": 112774, + "ĠÚ©ÛĮÙĦÙĪÙħتر": 112775, + "ĠpÅĻeh": 112776, + "алеж": 112777, + "Ġkayn": 112778, + "访": 112779, + "Ġì¤ijêµŃ": 112780, + "ĠÑĪиÑĢок": 112781, + "ĠÙħشارکت": 112782, + "âĢĤ": 112783, + "ĠíŤ": 112784, + "ĠìłľíĴĪ": 112785, + "ĠØ´ÛĮر": 112786, + "esinden": 112787, + "ÑĢÑĸÑĩ": 112788, + "èı²": 112789, + "ÑģкоÑĢ": 112790, + "etik": 112791, + "à¸²à¸ľ": 112792, + "ĠطبÛĮ": 112793, + "κÎŃ": 112794, + "ĠìŀĪìĸ´": 112795, + "Ġdek": 112796, + "ÑĢÑĸй": 112797, + "åĨĴ": 112798, + "nÃŃci": 112799, + "®¤": 112800, + "ĠÙħرتب": 112801, + "Ġyazı": 112802, + "üslü": 112803, + "ìľ¼ëĤĺ": 112804, + "elerine": 112805, + "ĠyoÄŁun": 112806, + "Ġбак": 112807, + "ÎĻÎŁ": 112808, + "άλÏħ": 112809, + "ç´Ļ": 112810, + "ĠÑĢÑĥками": 112811, + "Ġçözüm": 112812, + "ìłķìĿĦ": 112813, + "Ġgüçlü": 112814, + "λÏĮ": 112815, + "Ġbelli": 112816, + "ÃŃÅ¡e": 112817, + "ĠÏĮÏĢÏīÏĤ": 112818, + "ĠnaÅ¡": 112819, + "Ġpár": 112820, + "ÑĪÑĤ": 112821, + "ĠìĨ¡": 112822, + "à¥Ĥरत": 112823, + "ĠÏĢολÏį": 112824, + "ç°¡": 112825, + "èĤ¯": 112826, + "æ¹¾": 112827, + "Ġäºĭ": 112828, + "Ġबस": 112829, + "Ġ무ë£Į": 112830, + "дина": 112831, + "誰": 112832, + "леж": 112833, + "ĠúÅĻad": 112834, + "ĠоÑģвÑĸÑĤи": 112835, + "ĠвÑĸдÑĩ": 112836, + "ĠпÑĢизнаÑĩ": 112837, + "çĶ³è¯·": 112838, + "'ya": 112839, + "ä¿Ĭ": 112840, + "ĠÙĬÙĪÙĨ": 112841, + "Ġسع": 112842, + "ĠÐĶаÑĤа": 112843, + "è¨ĢãģĨ": 112844, + "ĠØŃتÛĮ": 112845, + "ĠJiÅĻÃŃ": 112846, + "ĠХаÑĢ": 112847, + "éĻĪ": 112848, + "à¹Īาà¸Īะ": 112849, + "Ġsayesinde": 112850, + "ĠÑĤÑĢеба": 112851, + "ê°Ģì§Ģ": 112852, + "Ġyemek": 112853, + "è¦ļ": 112854, + "ặn": 112855, + "ãĢĢãĢĢãĢĢãĢĢĠãĢĢ": 112856, + "Ġ举": 112857, + "ĠÙĪØ§": 112858, + "ĠÙħÙĪØ³": 112859, + "Ġкоманд": 112860, + "Ġseçim": 112861, + "ÑĩеннÑı": 112862, + "Ġtotiž": 112863, + "Ġrá»Ńa": 112864, + "ıa": 112865, + "Ø¢Ùħ": 112866, + "ÑĨÑĸон": 112867, + "::::::::::::": 112868, + "ÐĿÐIJ": 112869, + "ıza": 112870, + "hend": 112871, + "Ġफर": 112872, + "ัà¸Ķà¸ģาร": 112873, + "ĠCách": 112874, + "ĠпоÑĤÑĸм": 112875, + "Ġá¼Ģ": 112876, + "اÙĦا": 112877, + "ỡ": 112878, + "رÛĮÙħ": 112879, + "宫": 112880, + "ĠزÙħÛĮÙĨ": 112881, + "ÑĢеÑģÑĤ": 112882, + "баÑĩ": 112883, + "Ùĩرست": 112884, + "ног": 112885, + "ï¼Į大": 112886, + "ĠëĺIJíķľ": 112887, + "Ġzůst": 112888, + "ĠÐĴона": 112889, + "å¤ĩ份": 112890, + "ĠاÙģØª": 112891, + "oje": 112892, + "ÑģкÑĸлÑĮки": 112893, + "Ġnhẹ": 112894, + "ĠкеÑĢÑĸв": 112895, + "ῦ": 112896, + "æĸ¹æ¡Ī": 112897, + "заÑĨиÑı": 112898, + "ĠвÑĸдповÑĸдно": 112899, + "ãĤ¤ãĤ¹": 112900, + "гал": 112901, + "ĠобÑĭÑĩно": 112902, + "اÙĪØ±Ù¾ÙĪÛĮÙĨت": 112903, + "å®ľ": 112904, + "losti": 112905, + "è¿Ľåħ¥": 112906, + "uyordu": 112907, + "벤íĬ¸": 112908, + "æīĭãĤĴ": 112909, + "ÐŁÐ¾Ð´": 112910, + "ĠÙħØŃدÙĪØ¯": 112911, + "ĠØ¢Ùħد": 112912, + "arakter": 112913, + "çļĦ大": 112914, + "Ġsıcak": 112915, + "lant": 112916, + "Ġdấu": 112917, + "ĠÙĨÚ©": 112918, + "èĢħãģ®": 112919, + "Ġkendini": 112920, + "ĠпаÑĨи": 112921, + "Ġ기íĥĢ": 112922, + "ĠвмеÑģÑĤе": 112923, + "ваеÑĤÑģÑı": 112924, + "Ġë§ī": 112925, + "ĠchvÃŃli": 112926, + "Ø®ÛĮ": 112927, + "ÙĦع": 112928, + "nÃŃky": 112929, + "、:": 112930, + "ëIJľëĭ¤": 112931, + "ì§ķ": 112932, + "ĠквÑĸÑĤ": 112933, + "¨ìĸ´": 112934, + "liž": 112935, + "Ġë¹Ħë°Ģê¸Ģ": 112936, + "Ġkhá»iji": 112937, + "Ġë°©ìĨ¡": 112938, + "echan": 112939, + "Ġзаконодав": 112940, + "ĠакÑĤ": 112941, + "ë¬¸ìłľ": 112942, + "ĠNó": 112943, + "ĠçĤ¹": 112944, + "hledem": 112945, + "ĠÑģвоÑĹÑħ": 112946, + "ĠرÙĤÙħ": 112947, + "æĽ¼": 112948, + "िवर": 112949, + "åİļ": 112950, + "ĠÐļод": 112951, + "à¤Ńà¤Ĺ": 112952, + "ìŀIJëĬĶ": 112953, + "à¸Ļม": 112954, + "ÑĥÑģа": 112955, + "Ġgünü": 112956, + "ĠÄijÃŃch": 112957, + "Ġtrữ": 112958, + "å·»": 112959, + "éĵ¶è¡Į": 112960, + "ØŃÙĨ": 112961, + "讨": 112962, + "γÏĩ": 112963, + "ὸ": 112964, + "alarında": 112965, + "Ġkaf": 112966, + "ÙĪØ§Ø¬": 112967, + "ĠиÑģклÑİÑĩ": 112968, + "Ġnhiá»ħ": 112969, + "á»įt": 112970, + "ĠìĽ¹": 112971, + "ĠéĿ¢": 112972, + "ãģ®ãģĮ": 112973, + "Ġмало": 112974, + "ÑĸлÑĸ": 112975, + "Ġbiên": 112976, + "nému": 112977, + "пÑĢимеÑĢ": 112978, + "âĸłâĸł": 112979, + "Ġkamp": 112980, + "ĠвеÑī": 112981, + "Äįem": 112982, + "à¥ģध": 112983, + "æŁ»": 112984, + "تÙĪÙĨ": 112985, + "åıªæľī": 112986, + "ãģ¯ãģĦ": 112987, + "Ġรวม": 112988, + "ãĤŀ": 112989, + "ãģĻãĤĭãģ¨": 112990, + "å¾Īå¤ļ": 112991, + "à¹Īà¸ķ": 112992, + "ĠsvÄĽta": 112993, + "Ġê°Ģ격": 112994, + "Ú¯Ùĩ": 112995, + "andaÅŁ": 112996, + "ãĥªãĤ¹": 112997, + "Ïīμα": 112998, + "ĠØ®ÙĪØ¨": 112999, + "ç´ħ": 113000, + "ÑĩиÑģ": 113001, + "ì¢Į": 113002, + "ĠØŃضرت": 113003, + "ĠвиÑĢÑĸÑĪ": 113004, + "پر": 113005, + "Ġtýd": 113006, + "Ġkontro": 113007, + "дейÑģÑĤв": 113008, + "ãģŁãĤģãģ«": 113009, + "ìī": 113010, + "миниÑģÑĤÑĢа": 113011, + "â̝": 113012, + "åīij": 113013, + "ниÑĨÑĸ": 113014, + "å¦ĩ": 113015, + "ĠлиÑĪ": 113016, + "ãģ£ãģ¦ãĤĭ": 113017, + "наÑĢÑĥж": 113018, + "ÑīиÑħ": 113019, + "ÏĦοκ": 113020, + "ováno": 113021, + "ترÙĦ": 113022, + "ÑĢек": 113023, + "غات": 113024, + "Ġomez": 113025, + "ìĵ°": 113026, + "ĠÃľl": 113027, + "ï½Ĵ": 113028, + "lıģını": 113029, + "Ġvượt": 113030, + "ĠbÄĽÅ¾": 113031, + "ÃľR": 113032, + "Ġãĥ¾": 113033, + "ĠdoÄŁal": 113034, + "Ġhatır": 113035, + "Ġsvým": 113036, + "ì§ĢëıĦ": 113037, + "à¹Ģà¸łà¸Ĺ": 113038, + "Ġvay": 113039, + "ĠæĻĤ": 113040, + "à¥įवप": 113041, + "Ġplo": 113042, + "é¢Ħè§Ī": 113043, + "Ġçıktı": 113044, + "ĠدÙĨ": 113045, + "nánÃŃ": 113046, + "ê·Ģ": 113047, + "íĺĢ": 113048, + "à¸ŀà¸ļ": 113049, + "muÅŁtur": 113050, + "å®ĺæĸ¹": 113051, + "ĠíĶĦë¡ľê·¸ëŀ¨": 113052, + "éĢŁåº¦": 113053, + "lerdir": 113054, + "ÑĩеÑģкого": 113055, + "Ġİnsan": 113056, + "âĶĥ": 113057, + "Ġà¤ĩतन": 113058, + "Ð¡Ð¡Ðł": 113059, + "ĠاÙħر": 113060, + "Ġkötü": 113061, + "Ù쨴": 113062, + "Ġboj": 113063, + "ĠÑĨÑĸÑĶÑĹ": 113064, + "Ġsöylem": 113065, + "ниÑĨÑĭ": 113066, + "ãĢĤ她": 113067, + "âĢĿ.Ċ": 113068, + "Ġmilion": 113069, + "Ġsonunda": 113070, + "зÑĥ": 113071, + "à¥įमà¤ķ": 113072, + "人åı£": 113073, + "nÄĽÅ¾": 113074, + "ĠÑģмоÑĤ": 113075, + "ĠкомплекÑģ": 113076, + "ĠзавиÑģим": 113077, + "ĠимеÑİÑĤ": 113078, + "Ġlạc": 113079, + "Ġhangi": 113080, + "ëĶ©": 113081, + "åĬ³": 113082, + "ĠvÄĽci": 113083, + "еÑĢов": 113084, + "κÏģι": 113085, + "Ġdurumu": 113086, + "ĠبÙĪØ§Ø³Ø·Ø©": 113087, + "ĠأبÙĬ": 113088, + "ĠAÄŁustos": 113089, + "εÏĩ": 113090, + "ĠдиÑĤи": 113091, + "ÑĦика": 113092, + "ĠNÄĥm": 113093, + "Ġ기ìĪł": 113094, + "ĠhlavnÃŃ": 113095, + "ä¿ĥ": 113096, + "Ġलà¤Ĺत": 113097, + "ĠObr": 113098, + ".ย": 113099, + "ковод": 113100, + "opis": 113101, + "Ġãĥī": 113102, + "ĠبشÙĥÙĦ": 113103, + "нием": 113104, + "ĠtémÄĽÅĻ": 113105, + "ĠاÙĦØŃر": 113106, + "ĠÙĦازÙħ": 113107, + "Ġmái": 113108, + "iliÄŁi": 113109, + "ë³¼": 113110, + "Ġyık": 113111, + "ç½²": 113112, + "ÑĢава": 113113, + "Ñīин": 113114, + "ãģ«å¯¾": 113115, + "ç²¾ç¥ŀ": 113116, + "à¹īส": 113117, + "Ġtemsil": 113118, + "ÃĨ": 113119, + "ìķĶ": 113120, + "ĠпÑĢавилÑĮно": 113121, + "ÑĢоÑİ": 113122, + "Û±Û³Û¸": 113123, + "è©ŀ": 113124, + "اءة": 113125, + "ÙĪØ§Ø±Ùĩ": 113126, + "ï¼ħ": 113127, + "ĠÐľÐ¸Ðº": 113128, + "æģ¶": 113129, + "æıĴ": 113130, + "ापन": 113131, + "ĠÚ©ÛĮÙģÛĮت": 113132, + "ĠTÃłi": 113133, + "Ġtiá»ĥu": 113134, + "ovalo": 113135, + "çĿ¡": 113136, + "Ñĩил": 113137, + "ĠлиÑĤ": 113138, + "λεÏħÏĦα": 113139, + "Ġокон": 113140, + "::|": 113141, + "вала": 113142, + "ĠÙħرکزÛĮ": 113143, + "ĠalÄ±ÅŁ": 113144, + "Ġдолжно": 113145, + "æĻĤ代": 113146, + "Ġsert": 113147, + "еÑĤом": 113148, + "ัà¸Ļย": 113149, + "åģ·": 113150, + "ĠvÃŃc": 113151, + "ĠÑħоÑĤÑı": 113152, + "alarını": 113153, + "lenmesi": 113154, + "ãĥ³ãĥIJ": 113155, + "Ġëªĩ": 113156, + "ĠỦy": 113157, + "ĠاÙĦکتر": 113158, + "vyššÃŃ": 113159, + "責": 113160, + "주ìĭľ": 113161, + "áÅĻe": 113162, + "Ġyere": 113163, + "ãĤ¢ãĥ³": 113164, + "ĠاÙĦسعÙĪØ¯": 113165, + "Ġآش": 113166, + "Ġchóng": 113167, + "Ġè»": 113168, + "гаÑĶ": 113169, + "ĠãģĤ": 113170, + "稳": 113171, + "δεÏĤ": 113172, + "缮çļĦ": 113173, + "Ġcevap": 113174, + "ÑģÑĤе": 113175, + "é¡¿": 113176, + "मन": 113177, + "顾": 113178, + "ĠкÑĢедиÑĤ": 113179, + "ĠÙħستÙĤ": 113180, + "ĠмиÑĤ": 113181, + "Ġtá»ĵn": 113182, + "ĠجÙĦ": 113183, + "Ä©a": 113184, + "ĠاÙĦعÙĦÙħ": 113185, + "áků": 113186, + "ĠíķĻêµIJ": 113187, + "à¸Ĺà¸Ńà¸ĩ": 113188, + "หà¸Ļà¸Ķ": 113189, + "ĠлÑĸÑĤеÑĢаÑĤÑĥ": 113190, + "ëIJł": 113191, + "άÏģÏĩ": 113192, + "ĠÙĤدرت": 113193, + "à¸Ļาà¸ĩ": 113194, + "Ġarac": 113195, + "ĠjÃŃd": 113196, + "Ġtürlü": 113197, + "íͽ": 113198, + "ersiz": 113199, + "еним": 113200, + "Ġyüzyıl": 113201, + "ĠãģĦ": 113202, + "ĠÎļÏħ": 113203, + "Ġæļ": 113204, + "Ġpůj": 113205, + "Ġtá»Ļi": 113206, + "Ġthiên": 113207, + "İS": 113208, + "Ġthúc": 113209, + "æĹģ": 113210, + "ìŀIJìĿ¸": 113211, + "Ġölüm": 113212, + "رÛĮÙģ": 113213, + "ÑĢеж": 113214, + "صاÙĦ": 113215, + "رÙ쨩": 113216, + "iếp": 113217, + "ÑıÑĤиÑı": 113218, + "Ġpoužit": 113219, + "átu": 113220, + "为ä»Ģä¹Ī": 113221, + "ìģ": 113222, + "Ġkrát": 113223, + "ĠپرÙĪÚĺÙĩ": 113224, + "ĠrozhodnutÃŃ": 113225, + "ĠÑĥнивеÑĢ": 113226, + "Ñĸйно": 113227, + "Ġåij¨": 113228, + "Ġkiá»ĥu": 113229, + "缮åīį": 113230, + "ä¿Ħ": 113231, + "ÏĦοι": 113232, + "ÑĦеÑĢен": 113233, + "uÅŁtur": 113234, + "ĠnÃŃm": 113235, + "âĢĮØ®": 113236, + "Ġá»§y": 113237, + "ĠÑģÑĤаÑĤи": 113238, + "ÑĩеÑģкий": 113239, + "Ġjestli": 113240, + "ĠÙ¾ÙĨ": 113241, + "Ġobce": 113242, + "ĠجÙĩاÙĨÛĮ": 113243, + "едагог": 113244, + "ãģ§ãģ®": 113245, + "Ġbuá»Ļc": 113246, + "ì¹´ì§Ģëħ¸": 113247, + "à¹ĩà¸Ħ": 113248, + "ĠÄįtvrt": 113249, + "Ġника": 113250, + "Ġвплив": 113251, + "ĠдиÑĢ": 113252, + "ĠÑģобÑģÑĤвен": 113253, + "Ġë§İìĿ´": 113254, + "æ¾³": 113255, + "ÑĢÑĥб": 113256, + "æ£ĭ": 113257, + "å£°éŁ³": 113258, + "ä¹ĥ": 113259, + "تÛĮجÙĩ": 113260, + "å¹¼": 113261, + "onya": 113262, + "ĠPlantae": 113263, + "ЧÑĤо": 113264, + "æIJŃ": 113265, + "ä½ľç͍": 113266, + "ìħ¨": 113267, + "ĠкÑĢÑĥг": 113268, + "ĠÙĪÙģÙĬ": 113269, + "Ġï¼ŀ": 113270, + "ÑĪки": 113271, + "ÂłÐľ": 113272, + "اشÛĮ": 113273, + "ĠÅŀubat": 113274, + "Ġعشر": 113275, + "lif": 113276, + "ĠpoužitÃŃ": 113277, + "íĨ¡": 113278, + "Ġблок": 113279, + "è̶": 113280, + "ูร": 113281, + "Ġvüc": 113282, + "Ø´ÙĪØ¯": 113283, + "има": 113284, + "ниÑĨип": 113285, + "ìĿ´ëĵľ": 113286, + "ĠâĢIJ": 113287, + "ĠназнаÑĩ": 113288, + "Ġstrany": 113289, + "殿": 113290, + "ĠاÙĦرÙĪ": 113291, + "纸": 113292, + "åĪij": 113293, + "ï¼Įä»İ": 113294, + "Ġë©´": 113295, + "ĠпÑĢоведеннÑı": 113296, + "Ġhava": 113297, + "ĠìĹĨìĹĪëĭ¤": 113298, + "å¢ŀåĬł": 113299, + "Ú¾": 113300, + "缺": 113301, + "Ġعبار": 113302, + "Ġtắc": 113303, + "ĠinÅŁa": 113304, + "erse": 113305, + "رÙĬب": 113306, + "Ġá»ķn": 113307, + "أة": 113308, + "ĠÏĢολι": 113309, + "Ġmắc": 113310, + "Ñģол": 113311, + "æ´ŀ": 113312, + "-го": 113313, + "ç¨ĭ度": 113314, + "ĠвикоÑĢиÑģÑĤаннÑı": 113315, + "âĢŀظ": 113316, + "elerinde": 113317, + "ĠNhưng": 113318, + "stÅĻed": 113319, + "Ġhastalık": 113320, + "à¹īà¹Ģà¸Ľ": 113321, + "Ġdefa": 113322, + "ĠزÙĬ": 113323, + "اطÙĤ": 113324, + "ĠпÑĢой": 113325, + "ĠокÑĢÑĥг": 113326, + "νια": 113327, + "ladu": 113328, + "koli": 113329, + "ĠoÄŁ": 113330, + "ĠвиÑģок": 113331, + "Ðĩ": 113332, + "çĽĸ": 113333, + "ãĤıãģij": 113334, + "ãĥ¼ãĥģ": 113335, + "æ¡¥": 113336, + "ĠÅ¡koly": 113337, + "itom": 113338, + "ĠتØŃص": 113339, + "alara": 113340, + "Ġкал": 113341, + "ĠпÑĢиÑħод": 113342, + "Ġé¦ĸ页": 113343, + "Âį": 113344, + "ĠÛĮعÙĨÛĮ": 113345, + "Ġtùy": 113346, + "Ģë¡ľ": 113347, + "ëł¤ê³ł": 113348, + "áze": 113349, + "Ġек": 113350, + "èħ¹": 113351, + "ĠFakat": 113352, + "по": 113353, + "ĠÄijá»įc": 113354, + "åĪĺ": 113355, + "ázal": 113356, + "ÑĤон": 113357, + "Ú¯ÙĪ": 113358, + "ä¸Ī": 113359, + "ìĹ¼": 113360, + "ĠÙĦÙĦØ£": 113361, + "ĠEÄŁer": 113362, + "åħ±åĴĮåĽ½": 113363, + "ذر": 113364, + "ĠdaÄŁ": 113365, + "è¡Įä¸ļ": 113366, + "ê±°ëŀĺê°Ģ": 113367, + "è´Łè´£": 113368, + "Công": 113369, + "ĠÑĦилÑĮ": 113370, + "ĠаÑģ": 113371, + "Ġchẳng": 113372, + "нимаÑĤÑĮ": 113373, + "Ġifad": 113374, + "Ġìħ": 113375, + "çε": 113376, + "ĠÅĻeÅ¡enÃŃ": 113377, + "åĽ½äº§": 113378, + "Ġкакой": 113379, + "Ġमध": 113380, + "ĠYar": 113381, + "obraz": 113382, + "Ġonemoc": 113383, + "ĠâĤ": 113384, + "åİŁåĽł": 113385, + "ĠÙĥرد": 113386, + "Ġآزاد": 113387, + "Ġadlı": 113388, + "ĠHizmet": 113389, + "ãĥ¼ãĥij": 113390, + "ÙĨسÙĬØ©": 113391, + "ĠвнÑĥÑĤ": 113392, + "Ġdále": 113393, + "ÎķÎ¥": 113394, + "ĠÑĥÑħ": 113395, + "ĠÑĢев": 113396, + "ĠмеÑĪ": 113397, + "ĠkoÅŁul": 113398, + "ĠاÛĮراÙĨÛĮ": 113399, + "éĺµ": 113400, + "ĠëıĻìķĪ": 113401, + "à¹Ģà¸Ł": 113402, + "ëłĪ벨": 113403, + "è¨Ńè¨Ī": 113404, + "prak": 113405, + "poÄį": 113406, + "اعدة": 113407, + "Ġasker": 113408, + "ĠÙĪÛĮÚĺÙĩ": 113409, + "ĠТеÑĢ": 113410, + "makta": 113411, + "ĠÄįtyÅĻ": 113412, + "ÂłÐ¡": 113413, + "âĢĮÚ©ÙĨÙĨد": 113414, + "ï¼Į並": 113415, + "ĠÑĢоÑģÑĸй": 113416, + "Ġunut": 113417, + "è¿Ļä¸Ģ": 113418, + "opak": 113419, + "èĢIJ": 113420, + "ĠзамеÑĤ": 113421, + "à¹Įล": 113422, + "بÙĨ": 113423, + "Ġ몰": 113424, + "Ġinsanlar": 113425, + "åı¯æĺ¯": 113426, + "梦": 113427, + "код": 113428, + "èĽĽ": 113429, + "kladnÃŃ": 113430, + "ÑĢовод": 113431, + "ĠмÑĸÑģÑĤа": 113432, + "åĩºäºĨ": 113433, + "ĠпаÑģ": 113434, + "обов": 113435, + "گاÙĩÛĮ": 113436, + "вин": 113437, + "à¥įरध": 113438, + "Ġкомпон": 113439, + "ĠаÑĤ": 113440, + "Ġadet": 113441, + "Ġãĥģ": 113442, + "Ġذات": 113443, + "ĠØŃÙĪ": 113444, + "Ġtrochu": 113445, + "à¹ģหà¸Ļ": 113446, + "Ġзавжди": 113447, + "ĠPartisi": 113448, + "ĠSavaÅŁ": 113449, + "ĠsÃŃd": 113450, + "ĠÑģон": 113451, + "رÙĬÙģ": 113452, + "Ġzcela": 113453, + "åĺ´": 113454, + "ĠÑĦÑĥÑĤ": 113455, + "ilerek": 113456, + "malıdır": 113457, + "Ġdá»±a": 113458, + "à¸Ĺำà¸ĩาà¸Ļ": 113459, + "ĠÙĪÙĦÙĥÙĨ": 113460, + "ãģªãĤĵãģł": 113461, + "ĠÚ©ÙħÛĮ": 113462, + "ĠlékaÅĻ": 113463, + "ÏģÏį": 113464, + "جÙħع": 113465, + "ınızı": 113466, + "ĠAnadolu": 113467, + "ãģ«ãĤĪãģ£ãģ¦": 113468, + "Ġê·¸ëŁ¬ëĤĺ": 113469, + "ĠíĮĶ": 113470, + "ÑĸÑĤÑĮ": 113471, + "Ġ¦": 113472, + "ä¸įè¦ģ": 113473, + "à¸ĸม": 113474, + "ĠÙĬد": 113475, + "ĠpÅĻep": 113476, + "Ġè¦ģ": 113477, + "ĠпÑĢоекÑĤ": 113478, + "ĠÑĢеги": 113479, + "Ġdạy": 113480, + "кового": 113481, + "Ġıs": 113482, + "ĠKı": 113483, + "ĠÙģÙĬÙĩا": 113484, + "ÛĮات": 113485, + "ĠÑģÑĤала": 113486, + "æĬľ": 113487, + "ÑĥÑĢа": 113488, + "ĠپاÛĮاÙĨ": 113489, + "Ġitibaren": 113490, + "анÑĸÑĹ": 113491, + "ĠоÑĦоÑĢм": 113492, + "леÑĩ": 113493, + "εξ": 113494, + "æĶ¿çŃĸ": 113495, + "Ġç½ij": 113496, + "åĤ¬": 113497, + "ĠìĿ´ëٰ": 113498, + "ĠkardeÅŁ": 113499, + "ÑİÑīего": 113500, + "лки": 113501, + "ĠاÛĮاÙĦات": 113502, + "تÙĩا": 113503, + "ĠподÑħод": 113504, + "ĠØŃÙĪÙĦ": 113505, + "ĠÑģовÑĢем": 113506, + "íĿ¥": 113507, + "Ġ詳細": 113508, + "ıyı": 113509, + "ĠتÙĤÙĪ": 113510, + "æ¯Ķè¾ĥ": 113511, + "ĠανÏĦι": 113512, + "ĠΣΤ": 113513, + "jišť": 113514, + "ynı": 113515, + "Ġpocházet": 113516, + "-Ðļ": 113517, + "Ġзавд": 113518, + "ÙİØ³": 113519, + "ç»ĵæŀĦ": 113520, + "Ùħار": 113521, + "νοι": 113522, + "ĠγεÏģι": 113523, + "èĩ£": 113524, + "ĠnacházÃŃ": 113525, + "ÏĦÏİ": 113526, + "à¥įयत": 113527, + "uyu": 113528, + "æķĹ": 113529, + "ebi": 113530, + "Ġë°Ķë¡ľ": 113531, + "ĠгÑĢн": 113532, + "ĠاÙĦاس": 113533, + "Ġorgán": 113534, + "Ġedin": 113535, + "åŁĥ": 113536, + "à¹ģà¸Ħ": 113537, + "ĠØŃدÙĪØ¯": 113538, + "ĠдÑĢÑĥгой": 113539, + "оÑģков": 113540, + "ĠSợ": 113541, + "ĠpÅĻib": 113542, + "ä¿ĿæĬ¤": 113543, + "Ùħبر": 113544, + "ĠãĥĨ": 113545, + "Ġdoz": 113546, + "optera": 113547, + "à¸´à¸¥à¸Ľ": 113548, + "دارÛĮ": 113549, + "æĦŁè§ī": 113550, + "代çIJĨ": 113551, + "ÙĨدا": 113552, + "اÙĬا": 113553, + "صÙĨ": 113554, + "Ġcelé": 113555, + "Ġè©ķ": 113556, + "à¸ĩà¸Ļ": 113557, + "Ġleh": 113558, + "èİ·å¾Ĺ": 113559, + "ãĢĢï¾ī": 113560, + "ĠìĦłìĪĺ": 113561, + "르ëĬĶ": 113562, + "à¤Ĩर": 113563, + "å§Ķåijĺ": 113564, + "æĹłçłģ": 113565, + "Ġè·": 113566, + "ĠzajÃŃm": 113567, + "ecké": 113568, + "æµľ": 113569, + "ĠÑĥнÑĸвеÑĢÑģиÑĤ": 113570, + "ĠбÑİджеÑĤ": 113571, + "à¥ĩ.": 113572, + "Ġvstup": 113573, + "ĠоÑī": 113574, + "Ġåľĭ": 113575, + "ä¸ģ缮": 113576, + "ĠведÑĮ": 113577, + "Ġë§IJìĿĦ": 113578, + "Ġteknik": 113579, + "ãĢĢï½Į": 113580, + "ĠпÑĸдвиÑī": 113581, + "ĠÑģвÑıзи": 113582, + "ĠترجÙħ": 113583, + "Âī": 113584, + "ĠÄijâu": 113585, + "ÑĸÑĩного": 113586, + "å°ijå¹´": 113587, + "ecta": 113588, + "िलत": 113589, + "ιοÏĤ": 113590, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 113591, + "teg": 113592, + "á»īnh": 113593, + "¯¿": 113594, + "Ġnebu": 113595, + "ÙĬÙĬÙĨ": 113596, + "оÑıÑĤ": 113597, + "é¤Ĭ": 113598, + "ĠاÙĤتصادÛĮ": 113599, + "âĢĻnun": 113600, + "ĠÐĴÑĸк": 113601, + "ĠngÄĥn": 113602, + "ëĮĢíķĻêµIJ": 113603, + "éı": 113604, + "़र": 113605, + "اباÙĨ": 113606, + "ÙİÙĥ": 113607, + "Ġetkil": 113608, + "Ġchắn": 113609, + "Ġë°ľìĥĿ": 113610, + "Ġtamamen": 113611, + "ĠÙħØŃÛĮØ·": 113612, + "ülü": 113613, + "åģ¥åº·": 113614, + "ĠÑĢаÑģÑĤениÑı": 113615, + "ÏĢοί": 113616, + "Ġè¶ħ": 113617, + "áÄį": 113618, + "ĠìϏë¶Ģ": 113619, + "ĠØ®ÛĮÙĦÛĮ": 113620, + "ĠدÙĪØ³Øª": 113621, + "à¹Ģà¸Ĥà¸ķ": 113622, + "Ġkalan": 113623, + "먼": 113624, + "avÄĽ": 113625, + "문íĻĶ": 113626, + "Ġдиаг": 113627, + "ĠÙĨÙĪÙĬس": 113628, + "íķij": 113629, + "à¸ŀาะ": 113630, + "ëĭ¤ê°Ģ": 113631, + "Ġniá»ĩm": 113632, + "ĠسÙĪÙħ": 113633, + "-м": 113634, + "à¸Ķำà¹Ģà¸Ļ": 113635, + "à¹ĩว": 113636, + "ãĢĤãģĵãģ®": 113637, + "ç¯ī": 113638, + "WidthSpace": 113639, + "ZeroWidthSpace": 113640, + "ائÙħØ©": 113641, + "à¹Ħà¸ĭà¸ķ": 113642, + "ä¸ĭ载次æķ°": 113643, + "ä¼¼ä¹İ": 113644, + "ĠÑĤв": 113645, + "Ġzákaz": 113646, + "Ġجدا": 113647, + "Ġgider": 113648, + "ãĥ¼ãĥĵ": 113649, + "nů": 113650, + "Ġë§ģíģ¬": 113651, + "ĠdÃ¼ÅŁÃ¼k": 113652, + "Ñĥнок": 113653, + "Ġtóc": 113654, + "ĠÑĤÑĢÑĥб": 113655, + "окÑģ": 113656, + "Ġtrải": 113657, + "Ġmiá»ħn": 113658, + "ĠthÆ°á»Ľc": 113659, + "ĠnháºŃt": 113660, + "ÂłD": 113661, + "masının": 113662, + "輪": 113663, + "ĠÎĿο": 113664, + "erç": 113665, + "Ġdokonce": 113666, + "ĠGüven": 113667, + "ovaná": 113668, + "езд": 113669, + "ÑĸнÑĮ": 113670, + "èģ²": 113671, + "اÙĦØ£": 113672, + "ï¼Įä½Ĩæĺ¯": 113673, + "ĠполноÑģÑĤÑĮÑİ": 113674, + "Portály": 113675, + "ĠØŃاÙ쨏": 113676, + "à¥Ĥà¤ķ": 113677, + "ÑĢÑĥн": 113678, + "人çī©": 113679, + "Ġaçı": 113680, + "Ġporu": 113681, + "eriod": 113682, + "ĠAmerika": 113683, + "çĩŁ": 113684, + "ĠرÙĪØ¯": 113685, + "ĠкÑĢови": 113686, + "ÙĪÙĤت": 113687, + "éĺ¶": 113688, + "ãĥ»âĶģãĥ»âĶģ": 113689, + "رÙĬÙħ": 113690, + "åİĨåı²": 113691, + "丸": 113692, + "ĠзновÑĥ": 113693, + "ĠÑģвоего": 113694, + "бÑĥдÑĮ": 113695, + "ĠØŃجÙħ": 113696, + "ĠδÏįο": 113697, + "ìķĪëĤ´": 113698, + "Ġãģ§": 113699, + "à¹Īะ": 113700, + "ÙijÙı": 113701, + "çµIJæŀľ": 113702, + "âĢĻi": 113703, + "à¹Į,": 113704, + "åŃĺäºİ": 113705, + "Ġरà¤ĸन": 113706, + "ĠسرÙħاÛĮÙĩ": 113707, + "ĠглÑĥб": 113708, + "ĠÑĢазÑĸ": 113709, + "ÑĩнÑĸ": 113710, + "ï¼ĮåıĪ": 113711, + "cısı": 113712, + "æľīåħ³": 113713, + "ãĤ»ãĥ³": 113714, + "èIJ¨": 113715, + "ĠGiáo": 113716, + "ĠاÙĦثاÙĨÙĬ": 113717, + "ĠÑĢазом": 113718, + "ĠÑĤÑĢо": 113719, + "Ġaçıklam": 113720, + "åĨ³å®ļ": 113721, + "à¸Ńà¸Ľ": 113722, + "å͝": 113723, + "ĠÅŁark": 113724, + "Ġsistemi": 113725, + "Ġtoprak": 113726, + "èĢĥãģĪ": 113727, + "ĠпопÑĥлÑıÑĢ": 113728, + "ĠëĨį": 113729, + "اÙĬÙĨ": 113730, + "सम": 113731, + "ĠÂĢ": 113732, + "Ġederek": 113733, + "Ġgec": 113734, + "ìĤ¬ìĹħ": 113735, + "ĠÑĢоки": 113736, + "ĠбеÑĢем": 113737, + "ĠخاÙĨÙĪØ§Ø¯Ùĩ": 113738, + "Ġèµ·": 113739, + "ĠЧÑĤо": 113740, + "ĠobÄĽ": 113741, + "инÑĸ": 113742, + "ìĿ´ìĹĪ": 113743, + "ĠIndi": 113744, + "ĠдиÑĤ": 113745, + "ãĥ¶æľĪ": 113746, + "Ġнемного": 113747, + "ĠzákladÄĽ": 113748, + "à¹Ĥà¸Ħ": 113749, + "ĠÑģамого": 113750, + "ĠبØŃØ«": 113751, + "Ġæ¶": 113752, + "овж": 113753, + "ĠобÑĢаÑī": 113754, + "ÃĴ": 113755, + "วรร": 113756, + "à¤Ĥश": 113757, + "ĠоÑĩеÑĢед": 113758, + "ĠÙģØ±Ø²": 113759, + "ëĮĢíķľ": 113760, + "Ġsizin": 113761, + "رÙģØª": 113762, + "ÑİÑīим": 113763, + "æ»ij": 113764, + "avir": 113765, + "ĠÙĪØµÙĦ": 113766, + "Ġquay": 113767, + "Ġгип": 113768, + "ÑĢениÑı": 113769, + "à¥įवत": 113770, + "ινÏīν": 113771, + "à¤ľà¤¹": 113772, + "ĠhÆ¡i": 113773, + "Ġpovaž": 113774, + "Ġعرب": 113775, + "менÑĤа": 113776, + "ĠоÑģÑĤан": 113777, + "ä¹ĭéĹ´": 113778, + "acÃŃch": 113779, + "ĠÑģказала": 113780, + "ìĿ´ëĿ¼ëĬĶ": 113781, + "Ġشاخ": 113782, + "Ġëĭ¹ìĭł": 113783, + "arlar": 113784, + "Ġмлн": 113785, + "åĨ¬": 113786, + ".:.:.:": 113787, + "Ġθε": 113788, + "Ġherkes": 113789, + "лÑıд": 113790, + "اÙħا": 113791, + "ĠëŃIJ": 113792, + "ÏĥιμοÏĢοι": 113793, + "Ġobraz": 113794, + "غاÙĦ": 113795, + "BÆ°á»Ľc": 113796, + "å°Ĭ": 113797, + "ìŀIJ를": 113798, + "æĢĴ": 113799, + "οÏħÏģγ": 113800, + "å¼ķãģį": 113801, + "Ġkonuda": 113802, + "ĠاÙĦتج": 113803, + "Ġkrit": 113804, + "å¿į": 113805, + "ĠìłĦìĦ¸ê°Ģ": 113806, + "говоÑĢ": 113807, + "Ġistiyor": 113808, + "оки": 113809, + "ĠобеÑģпеÑĩ": 113810, + "Ġayrıca": 113811, + "à¹Ģà¸ľ": 113812, + "аÑĢод": 113813, + "İÅŀ": 113814, + "ĠجÙħÙĩÙĪØ±ÛĮ": 113815, + "ĠÑģвоиÑħ": 113816, + "Ġprovád": 113817, + "ĠÑĢам": 113818, + "ĠÙĤض": 113819, + "лиÑĤелÑĮ": 113820, + "ãĤ±ãĥĥãĥĪ": 113821, + "оÑģоÑĦ": 113822, + "Ġरहन": 113823, + "kový": 113824, + "ì°¸": 113825, + "γκα": 113826, + "λοι": 113827, + "μÏĢο": 113828, + "ĠÄijau": 113829, + "ниÑİ": 113830, + "Ġmanžel": 113831, + "Ġíĺ¼": 113832, + "ĠÑĤиÑģ": 113833, + "ãĥĨãĥ«": 113834, + "abilecek": 113835, + "нин": 113836, + "à¸ģรรมà¸ģาร": 113837, + "éłIJ": 113838, + "Ġphê": 113839, + "jedn": 113840, + "交æµģ": 113841, + "Ġвнимание": 113842, + "обÑĢеÑĤ": 113843, + "ĠжизнÑĮ": 113844, + "ÑĢиÑģÑĤи": 113845, + "à¥Īà¤ļ": 113846, + "Ġyüzden": 113847, + "Ġgiy": 113848, + "éļĶ": 113849, + "仲": 113850, + "ĠèĻ": 113851, + "ĠParti": 113852, + "Ġéĸ¢": 113853, + "ัà¸ļส": 113854, + "ĠnejlepÅ¡ÃŃ": 113855, + "ÙİÙī": 113856, + "ĠìĿ´ìłľ": 113857, + "Ġcắt": 113858, + "ÑĢозÑĥм": 113859, + "Ġnejsou": 113860, + "lÃŃd": 113861, + "θο": 113862, + "à¹ĩà¸ĩ": 113863, + "ĠÑģпÑĢоÑģ": 113864, + "mamÄ±ÅŁ": 113865, + "Ġ쪽": 113866, + "اÙģÙĤ": 113867, + "ÑĨÑĸйниÑħ": 113868, + "Ġé¦Ļ": 113869, + "ĠÙħÛĮÙĦÛĮÙĪÙĨ": 113870, + "夢": 113871, + "ĠÙģÙĩرست": 113872, + "rý": 113873, + "ĠповÑĸдом": 113874, + "eceÄŁi": 113875, + "ĠзабезпеÑĩеннÑı": 113876, + "ÂĶ": 113877, + "ãģĹãģªãģĦ": 113878, + "åŁºç¡Ģ": 113879, + "ĠÚĨÙĨÛĮÙĨ": 113880, + "ĠÑĢозÑĢоб": 113881, + "ä¸ĢäºĽ": 113882, + "ãĥ³ãģ®": 113883, + "ĠпÑĢаÑĨÑĸв": 113884, + "å¾Ĺåΰ": 113885, + "Ġtấn": 113886, + "åŃĺæ¡£å¤ĩ份": 113887, + "ĠíĻĪ": 113888, + "Ġà¸Ķาว": 113889, + "ìĭ±": 113890, + "лина": 113891, + "ĠвоÑģпал": 113892, + "ÄŁinden": 113893, + "аÑĤелей": 113894, + "rž": 113895, + "ĠÑĦÑĥн": 113896, + "ĠÐIJл": 113897, + "ĠпоÑĩÑĤи": 113898, + "овÑĸд": 113899, + "اعب": 113900, + "าะห": 113901, + "ĠвозÑĢаÑģÑĤ": 113902, + "ิà¸ĩห": 113903, + "ĠÙģÙĦس": 113904, + "ĠÅ¡est": 113905, + "à¸Ĭาว": 113906, + "Ġ골": 113907, + "ĠoÄį": 113908, + "ãĤ¸ãĥ§": 113909, + "коÑģÑĤи": 113910, + "éĽĨåĽ¢": 113911, + "æ±ĩ": 113912, + "ĠpÅĻÃŃliÅ¡": 113913, + "ĠìĿij": 113914, + "диви": 113915, + "ĠдокÑĥменÑĤа": 113916, + "ĠChâu": 113917, + "Ġmáu": 113918, + "Ġkhô": 113919, + "Ãķ": 113920, + "Ñīий": 113921, + "Ġsẵn": 113922, + "ĠконÑĦ": 113923, + "ĠзÑĥÑģÑĤ": 113924, + "åĽŀçŃĶ": 113925, + "ĠкоÑĢиÑģÑĤ": 113926, + "ĠÏĢεÏģί": 113927, + "丰": 113928, + "Ġmạch": 113929, + "анк": 113930, + "ä¸ĭæĿ¥": 113931, + "èµĦæĸĻ": 113932, + "ยà¸Ńà¸Ķ": 113933, + "ĠÏĢιο": 113934, + "à¹īà¸ĩาà¸Ļ": 113935, + "ĠumÃŃst": 113936, + "æ½®": 113937, + "çªģçĦ¶": 113938, + "Ġkultur": 113939, + "ĠاÙĦصÙģ": 113940, + "alarının": 113941, + "ĠÎĶημο": 113942, + "ĠвиконаннÑı": 113943, + "ソ": 113944, + "ĠбезопаÑģ": 113945, + "ĠÑģаÑħ": 113946, + "Ġnoh": 113947, + "à¹ĥà¸ļ": 113948, + "éĥ½å¸Ĥ": 113949, + "ÅŁam": 113950, + "бÑĥÑĤ": 113951, + "Ġ모ìĬµ": 113952, + "Ġваг": 113953, + "çIJĨè§£": 113954, + "Ġekonomik": 113955, + "Ġkhắc": 113956, + "Ġsvat": 113957, + "лиÑĪком": 113958, + "ัà¸ĩà¸Īาà¸ģ": 113959, + "izyon": 113960, + "èĥ½å¤Ł": 113961, + "ίνει": 113962, + "ÂĬ": 113963, + "ì¦Į": 113964, + "ĠÙĩاÛĮÛĮ": 113965, + "ĠkiÅŁiler": 113966, + "ĠклеÑĤ": 113967, + "íĺģ": 113968, + "à¥ĥद": 113969, + "iÅ¡": 113970, + "ëĶĶìĺ¤": 113971, + "ÙĬراÙĨ": 113972, + "ĠÐĿÑĥ": 113973, + "à¸Ńà¸Ļà¸Ĺ": 113974, + "ĠÑģоÑĩ": 113975, + "Ġisteyen": 113976, + "ĠSez": 113977, + "ĠãĤ»": 113978, + "ĠAç": 113979, + "âĢĮÙĨ": 113980, + "ĠÑĤоп": 113981, + "ĠÑĤеÑĢÑĢиÑĤоÑĢ": 113982, + "acılık": 113983, + "ĠоднÑĥ": 113984, + "Ġveri": 113985, + "Ġکد": 113986, + "ĠÚ¯ÙģØªÙĩ": 113987, + "Ġcinsel": 113988, + "ологии": 113989, + "ĠpÅĻedmÄĽt": 113990, + "à¤Ĥà¤ĺ": 113991, + "Ġ空": 113992, + "γα": 113993, + "'ye": 113994, + "ترة": 113995, + "ĠdÅĻÃŃ": 113996, + "ĠHÃłn": 113997, + "ĠرشتÙĩ": 113998, + "Ġvidea": 113999, + "Ġног": 114000, + "æ·»": 114001, + "è¿ĺæľī": 114002, + "ÙĨدر": 114003, + "Ġyerde": 114004, + "Ġkent": 114005, + "à¸ļาล": 114006, + "ĠдеÑģÑı": 114007, + "ä¸ļåĬ¡": 114008, + "ĠобÑĬек": 114009, + "ĠвнÑĥÑĤÑĢÑĸÑĪ": 114010, + "kola": 114011, + "ebnÃŃ": 114012, + "ีล": 114013, + "Ġ,.": 114014, + "ĠмÑĸжнаÑĢод": 114015, + "ãģªãĤĵãģ¦": 114016, + "ĠSöz": 114017, + "Ġchod": 114018, + "Ġtrúc": 114019, + "ìļĶìĿ¼": 114020, + "ĠpháºŃn": 114021, + "Ñģка": 114022, + "ĠÑħлоп": 114023, + "Ñģким": 114024, + "Ġkapit": 114025, + "ëĵ¤ìĹIJê²Į": 114026, + "ĠbÃło": 114027, + "lıģın": 114028, + "Ä°ÅŁ": 114029, + "ÄįnÃŃk": 114030, + "ĠNgoÃłi": 114031, + "ĠبÛĮاÙĨ": 114032, + "ĠproÄį": 114033, + "ĠпÑĢоÑĤÑıгом": 114034, + "åĢī": 114035, + "еÑİ": 114036, + "Ġνο": 114037, + "ëĿ¼ëıĦ": 114038, + "ì·¨": 114039, + "ĠвиÑıв": 114040, + "Ġпонад": 114041, + "ĠжовÑĤ": 114042, + "Ġæ¯Ķ": 114043, + "Ġdoby": 114044, + "лам": 114045, + "Ñijл": 114046, + "ĠÑĢаÑħ": 114047, + "Ġвозника": 114048, + "ниÑĨÑĤво": 114049, + "層": 114050, + "ĠоÑĤлиÑĩ": 114051, + "çĤİ": 114052, + "飯": 114053, + "Ġživota": 114054, + "atör": 114055, + "Ġcelý": 114056, + "Ġaday": 114057, + "رÙĬÙĥÙĬ": 114058, + "Ġبص": 114059, + "meyen": 114060, + "ìļ°ìĬ¤": 114061, + "بÙĪÙĦ": 114062, + "Ġозна": 114063, + "麼": 114064, + "æĵļ": 114065, + "Ġzkou": 114066, + "ëĤĺìļĶ": 114067, + "Ġkry": 114068, + "Ġnemoh": 114069, + "ĠvyužÃŃ": 114070, + "Ġæľ¨": 114071, + "ĠадмÑĸнÑĸÑģÑĤÑĢа": 114072, + "اÙĩا": 114073, + "à¹ĥà¸ģล": 114074, + "________": 114075, + "ĠгоÑĤ": 114076, + "ĠدÛĮگرÛĮ": 114077, + "ĠлекаÑĢ": 114078, + "è§Ģ": 114079, + "Ġíĺij": 114080, + "ĠBöyle": 114081, + "istrov": 114082, + "女åŃIJ": 114083, + "ĠпопеÑĢед": 114084, + "ĠÙĨÙĪÙĬسÙĨدÙĩ": 114085, + "ÙĴÙĦ": 114086, + "ĠÐŁÐ°Ð²": 114087, + "Ġörnek": 114088, + "ĠпÑĢик": 114089, + "ĠÑĪи": 114090, + "üslüman": 114091, + "ĠÙħÙĤابÙĦ": 114092, + "åįģäºĮ": 114093, + "Ġbekl": 114094, + "Ġverir": 114095, + "ÙĪØ°": 114096, + "ضة": 114097, + "ÑĢоÑĤив": 114098, + "æĮij": 114099, + "..:": 114100, + "ĠخارجÙĬØ©": 114101, + "adık": 114102, + "ĠÐŁÐ¾Ñĩ": 114103, + "ĠÑħÑĥдож": 114104, + "客æĪ·": 114105, + "μον": 114106, + "ektiv": 114107, + "Ġtvá": 114108, + "Û²Û²": 114109, + "Ġlá»įc": 114110, + "Ġоно": 114111, + "ÑĨиÑĤ": 114112, + "ĠÐĴÑģ": 114113, + "Ġå¢": 114114, + "浪": 114115, + "аÑĢÑĸ": 114116, + "Ġsürekli": 114117, + "Ġstra": 114118, + "Ġbize": 114119, + "Ġtespit": 114120, + "Ġchâu": 114121, + "ĠاÙĦض": 114122, + "à¹īà¸Ńà¸ĩà¸ģ": 114123, + "ĠèĢħ": 114124, + "ĠHá»": 114125, + "ĠкаждÑĭй": 114126, + "аÑİ": 114127, + "à¸Ļà¸Ħร": 114128, + "à¸Ĺะ": 114129, + "ĠÙħراجع": 114130, + "Ġhaline": 114131, + "δοÏĤ": 114132, + "eÄŁi": 114133, + "ĠÙħÛĮزاÙĨ": 114134, + "ĠÙĩÙĦ": 114135, + "Ġbolest": 114136, + "ĠåľŁ": 114137, + "Ġuzman": 114138, + "ÑĢог": 114139, + "確èªį": 114140, + "ĠÑĢÑĸзниÑħ": 114141, + "ĠзакÑĢÑĭ": 114142, + "лÑĥги": 114143, + "ĠÑģовеÑĤ": 114144, + "iddi": 114145, + "åIJĪãĤıãģĽ": 114146, + "ĠåIJī": 114147, + "Ġkiá»ĩm": 114148, + "ë²½": 114149, + "ĠÙħعÙħÙĪÙĦ": 114150, + "ĠопÑĢеделÑı": 114151, + "Ġmiktar": 114152, + "ĠìŀIJëıĻ": 114153, + "Ġilaç": 114154, + "лоÑĩ": 114155, + "Ġyılı": 114156, + "ĠÄIJá»ĥ": 114157, + "Ġabych": 114158, + "Ġreklam": 114159, + "Ġvypad": 114160, + "ĠнаÑĥÑĩ": 114161, + "à¹Ģà¸Ħราะห": 114162, + "Ġä»ĸ": 114163, + "povÄĽ": 114164, + "ï¼Į让": 114165, + "ç¥Ŀ": 114166, + "اÙĪÙĨد": 114167, + "Ġ:|:": 114168, + "Ġrež": 114169, + "Ġvybav": 114170, + "ìľ¤": 114171, + "æŃ´": 114172, + "огÑĢаÑĦиÑı": 114173, + "ezpeÄį": 114174, + "±n": 114175, + "овÑĥ": 114176, + "ĠдÑĥма": 114177, + "Ġjednodu": 114178, + "оÑīи": 114179, + "ĠÙħشتر": 114180, + "観": 114181, + "Ġyoktur": 114182, + "ĠobÄįan": 114183, + "ĠTrần": 114184, + "ımsız": 114185, + "αιν": 114186, + "ÂĮ": 114187, + "رÛĮاÙĨ": 114188, + "ĠJeho": 114189, + "ĠاÙĦØ¢ÙĨ": 114190, + "ÑģÑĮким": 114191, + "Ġkdyby": 114192, + "ĠbaÅŁÄ±na": 114193, + "Ġprezident": 114194, + "ĠViá»ĩc": 114195, + "åħ¼": 114196, + "à¥Įà¤ľ": 114197, + "Ġ매매ê°Ģ": 114198, + "模å¼ı": 114199, + "nÃŃmu": 114200, + "ĠåĤ": 114201, + "Ġdeniz": 114202, + "ĺèĽĽ": 114203, + "ĠèĢĮ": 114204, + "ÙĪØŃ": 114205, + "Ñĭп": 114206, + "Ġâĸ¼": 114207, + "nul": 114208, + "ĠSev": 114209, + "Ġruh": 114210, + "Ġhạ": 114211, + "ĠÑıн": 114212, + "Ġ기본": 114213, + "Ġvelik": 114214, + "ĠTân": 114215, + "илиÑģÑĮ": 114216, + "ĠÑħÑĢа": 114217, + "åĤ·": 114218, + "Ġà¤Ĩà¤ı": 114219, + "ĠnynÃŃ": 114220, + "»ØĮ": 114221, + "Ġشع": 114222, + "æĿĤ": 114223, + "ĠмÑĭÑĪ": 114224, + "ãģĻãģIJ": 114225, + "Ġê³µì§Ģ": 114226, + "Ġtá»Ļc": 114227, + "ãĥ¼ãĥĩ": 114228, + "ĠÑģело": 114229, + "ĠاعÙĦاÙħ": 114230, + "ĠÅŁimdi": 114231, + "ĠاÙĦÙħÙĬÙĦاد": 114232, + "ĠاÙĨÙĤÙĦاب": 114233, + "ĠشخصÙĬØ©": 114234, + "ĠKür": 114235, + "ĠвÑĸÑĤ": 114236, + "ĠاÙĨدازÙĩ": 114237, + "ĠмоÑī": 114238, + "ternet": 114239, + "ĠαÏħÏĦή": 114240, + "ĠÑĢозÑĤа": 114241, + "Ġвив": 114242, + "lej": 114243, + "Ġ表": 114244, + "ÏĥÏĥÏĮÏĦε": 114245, + "ĠÙĬست": 114246, + "ĠмаÑĪ": 114247, + "åĿļ": 114248, + "ĠкомнаÑĤ": 114249, + "าหล": 114250, + "Ġçϼ": 114251, + "ĠاÙĪÙĦÛĮÙĨ": 114252, + "è¿IJåĬ¨": 114253, + "ĠпÑĥнкÑĤ": 114254, + "ĠоÑģобенно": 114255, + "Ġмам": 114256, + "绩": 114257, + " ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄": 114258, + "алÑĮнÑĭм": 114259, + "ĠЦенÑĤ": 114260, + "-Ðľ": 114261, + "ç·Ĵ": 114262, + "Ġà¤¹à¤ľ": 114263, + "оÑĤÑĭ": 114264, + "ãĤ¤ãĥī": 114265, + "دارة": 114266, + "ãģ¨ãģĹãģŁ": 114267, + "ัà¸ŀย": 114268, + "Ġotáz": 114269, + "ĠдопомогоÑİ": 114270, + "à¹ģละà¸ģาร": 114271, + "ĠÑĤÑĢанÑģпоÑĢÑĤ": 114272, + "ĠÙĤرآÙĨ": 114273, + "Ġ第ä¸Ģ": 114274, + "Ġмил": 114275, + "Ġngôi": 114276, + "Ġlinh": 114277, + "ĠNhân": 114278, + "ÑĮогоднÑĸ": 114279, + "æĢĢ": 114280, + "à¹īาส": 114281, + ".::.::": 114282, + "Ġbirey": 114283, + "æĢĿãģĦ": 114284, + "à¹ĥà¸Ķ": 114285, + "веÑĢд": 114286, + "Ġlistopadu": 114287, + "Ġà¹ģม": 114288, + "ге": 114289, + "ĠкÑĥÑħ": 114290, + "ĠíĻľëıĻ": 114291, + "Ġèİ": 114292, + "ĠÐIJлÑĮ": 114293, + "íļĮìĿĺ": 114294, + "ĠÏĢÏģα": 114295, + "Ġvui": 114296, + "วร": 114297, + "à¤Ĥव": 114298, + "Ġgece": 114299, + "ç«¶": 114300, + "Ġkuv": 114301, + "меÑī": 114302, + "ĠÑĤепеÑĢÑĮ": 114303, + "à¸Ńà¹Ģม": 114304, + "åĪ¶åº¦": 114305, + "ĠÑĤÑĢеÑĤ": 114306, + "ĠÙĨتÛĮجÙĩ": 114307, + "ä»ĺãģį": 114308, + "Ġï¾ŀ": 114309, + "ĠÑĩого": 114310, + "âĢIJ-": 114311, + "ĠÅĻÃŃká": 114312, + "à¸ĩà¹ĥà¸Ļ": 114313, + "ĠnÄĽkolika": 114314, + "Ġbuna": 114315, + "ï¼ĮåŃĺäºİ": 114316, + "ลำ": 114317, + "ãĢģãģ¨": 114318, + "Ġná»Ļp": 114319, + "ĠاÙĦجÙĨ": 114320, + "ĠÎłÎ±Î½": 114321, + "ÐŀÐł": 114322, + "Ġدختر": 114323, + "Ġúdaje": 114324, + "Ġå¼ł": 114325, + "retim": 114326, + "sınız": 114327, + "ĠÙĩÙĨاÙĥ": 114328, + "ÐĽÐ¬": 114329, + "æķ¬": 114330, + "ÎijÎľ": 114331, + "页éĿ¢åŃĺæ¡£å¤ĩ份": 114332, + "ìĤ¬ê°Ģ": 114333, + "Ġtrest": 114334, + "viÄį": 114335, + "ĠÙ¾ÛĮدا": 114336, + "ζε": 114337, + "ĠÐŁÐ¾Ð²": 114338, + "ÙĦÙħات": 114339, + "orex": 114340, + "è¬Ľ": 114341, + "ĠвÑĸдкÑĢиÑĤ": 114342, + "маÑħ": 114343, + "ĠÑĩиÑģле": 114344, + "تبار": 114345, + "ĠÎŃκ": 114346, + "ìķĦíĮĮíĬ¸": 114347, + "ravel": 114348, + "αÏĥία": 114349, + "aÄį": 114350, + "Ġà¤ıन": 114351, + "ละà¹Ģà¸Ń": 114352, + "Ġзалеж": 114353, + "Ġæģ": 114354, + "ĠможеÑĤе": 114355, + "Ġповед": 114356, + "ĠبسÛĮارÛĮ": 114357, + "ĠpoÄįet": 114358, + "ربع": 114359, + "elez": 114360, + "اÙĪØ±ÛĮ": 114361, + "ĠbaÅŁk": 114362, + "å°Ĥ": 114363, + "Ġhalde": 114364, + "æĭŁ": 114365, + "Sau": 114366, + "оÑĨи": 114367, + "ีà¸Ħ": 114368, + "Ġвлади": 114369, + "ÙIJÙħ": 114370, + "kud": 114371, + "à¥Ĥब": 114372, + "å§Ķåĵ¡": 114373, + "ารà¸ĵ": 114374, + "orů": 114375, + "ĠÙħÙĪÙĦ": 114376, + "Ġbyt": 114377, + "ĠpÅĻÃŃsluÅ¡": 114378, + "èĭ±è¯Ń": 114379, + "éĢIJ": 114380, + "Ġvelké": 114381, + "Ġà¤Ĩश": 114382, + "Ġphiếu": 114383, + "à¹ĥส": 114384, + "Ġاسپ": 114385, + "ĠzbožÃŃ": 114386, + "ãģĵãĤĵãģª": 114387, + "ĠÙĪÙĩÙĬ": 114388, + "ĠÑĥÑĩаÑģÑĤÑĮ": 114389, + "à¸Īำà¸Ļวà¸Ļ": 114390, + "Ġترک": 114391, + "åįģåĪĨ": 114392, + "ÎŁÎł": 114393, + "κολ": 114394, + "Ġfakat": 114395, + "Ġchá»Ĺ": 114396, + "éĢļçŁ¥": 114397, + "ĠводÑĥ": 114398, + "ĠÎļαÏĦηγοÏģία": 114399, + "acaģını": 114400, + "лого": 114401, + "ĠmÃ¼ÅŁter": 114402, + "Ġjednou": 114403, + "ĠбаÑĢ": 114404, + "idae": 114405, + "dım": 114406, + "è¾²": 114407, + "åIJ¹": 114408, + "ëIJ©ëĭĪëĭ¤": 114409, + "ĠÅŁeklinde": 114410, + "eným": 114411, + "ëĵ¯": 114412, + "itÄĽ": 114413, + "ĠколÑĮ": 114414, + "ëĮĢíķĻ": 114415, + "ĠÃĸr": 114416, + "Ġê½": 114417, + "ĠUBND": 114418, + "Ġhik": 114419, + "ãĤīãģĹãģĦ": 114420, + "åĩºåĵģ": 114421, + "Có": 114422, + "ĠÎŀ": 114423, + "Ġåħ¥": 114424, + "ĠNguyên": 114425, + "ĠÙ¾ÙĪØ´": 114426, + "лÑıÑĶ": 114427, + "Ġآغاز": 114428, + "Ġnhiá»ħm": 114429, + "divid": 114430, + "çĺ": 114431, + "اÙģØªÙĩ": 114432, + "амеÑĤ": 114433, + "нÑĥлÑģÑı": 114434, + "ä¼ģæ¥Ń": 114435, + "ÑĢобÑĸÑĤ": 114436, + "dÃ¼ÄŁÃ¼": 114437, + "ĠکاÙĨ": 114438, + "à¸Ńà¸ĩà¸Ĺ": 114439, + "йн": 114440, + "Ġpohyb": 114441, + "Ġbiá»ĩn": 114442, + "Ġï¼Ľ": 114443, + "ÙħÙĨد": 114444, + "Ġà¤Ĩà¤ķ": 114445, + "ĠÄįlovÄĽk": 114446, + "ãĤĴè¦ĭãĤĭ": 114447, + "ë·°": 114448, + "ĠÑĥвелиÑĩ": 114449, + "Ġê´": 114450, + "ĠyanlÄ±ÅŁ": 114451, + "麦": 114452, + "Ġå¤ĸéĥ¨": 114453, + "ÏĦοÏħÏģγ": 114454, + "ĠпÑĢоÑĩ": 114455, + "ĠÑĢÑĥковод": 114456, + "缤": 114457, + "èľĺèĽĽ": 114458, + "å®īè£ħ": 114459, + "ĠУкÑĢа": 114460, + "ĠtartÄ±ÅŁ": 114461, + "ÑĤаж": 114462, + "ĠoluÅŁan": 114463, + "ĠRusya": 114464, + "ĠклÑĥб": 114465, + "ĠÎłÎ¡": 114466, + "alıdır": 114467, + "kın": 114468, + "ĠзмÑĸни": 114469, + "leÅŁik": 114470, + "еÑĢп": 114471, + "обÑīе": 114472, + "ĠquáºŃn": 114473, + "Ġपश": 114474, + "ãĤĴåıĹ": 114475, + "à¹Ģลà¸Ĥ": 114476, + "اضر": 114477, + "Ġuživatel": 114478, + "λία": 114479, + "ĠÐĴони": 114480, + "ุà¸Ķà¸Ĺ": 114481, + "ĠVÃł": 114482, + "ãĥ³ãĤ¿": 114483, + ")ëĬĶ": 114484, + "æ¸Ľ": 114485, + "ĠμÏĢ": 114486, + "å·§": 114487, + "ĠÑĪкол": 114488, + "Ġì²ĺìĿĮ": 114489, + "ัà¸ģà¸Ķ": 114490, + "æ®Ĭ": 114491, + "Ġnhá»Ŀ": 114492, + "ĠοÏĢοία": 114493, + "à¹ģà¸Ļว": 114494, + "меÑĢикан": 114495, + "nÃŃka": 114496, + "Ġíĺ¸íħĶ": 114497, + "سبب": 114498, + "à¸ĩม": 114499, + "ìŀĪëĬĶ": 114500, + "غط": 114501, + "ÙıÙĦ": 114502, + "¹æŀľ": 114503, + "ÑĩÑĸв": 114504, + "ÑĪаÑı": 114505, + "ĠØ¥ÙĦا": 114506, + "خصÙĪØµ": 114507, + "llll": 114508, + "ĠÑįÑĤим": 114509, + "ĠzvÃŃ": 114510, + "Ġquán": 114511, + "à¸Ļà¸ģ": 114512, + "Ġполов": 114513, + "Ġæ·±": 114514, + "Ġmiá»ģn": 114515, + "人éĸĵ": 114516, + "Ġзим": 114517, + "Ġmeydana": 114518, + "еÑĦ": 114519, + "Ġbá»ģn": 114520, + "زÙĬد": 114521, + "ĠÐłÐµÑģп": 114522, + "ÎĻΣΤ": 114523, + "ĠæĶ¶": 114524, + "raya": 114525, + "ĠتÙĪØ§ÙĨد": 114526, + "Ġister": 114527, + "Ġë°Ģ": 114528, + "ĠмеÑħани": 114529, + "Ġà¸ķำ": 114530, + "Ġдека": 114531, + "à¤Ĥà¤Ĺल": 114532, + "ãĥ¼ãĤ«ãĥ¼": 114533, + "ĠnepÅĻÃŃ": 114534, + "ĠÑģÑĩиÑĤ": 114535, + "Ġομά": 114536, + "Ġçift": 114537, + "بÛĮÙĨÛĮ": 114538, + "meleri": 114539, + "ĠвоздейÑģÑĤв": 114540, + "dou": 114541, + "ìĥģìĿĦ": 114542, + "ĠÐĴолод": 114543, + "εβ": 114544, + "ÐĿÐĺ": 114545, + "Ñıк": 114546, + "ÏįÏĦε": 114547, + "зано": 114548, + "lenir": 114549, + "celik": 114550, + "ĠÑģоÑģÑĤавлÑıеÑĤ": 114551, + "ιαÏĤ": 114552, + "ĠÐĵоÑĢ": 114553, + "ä¹ĭä¸Ģ": 114554, + "ÏĥμÏĮÏĤ": 114555, + "ãģ«éĸ¢": 114556, + "ĠвÑĩ": 114557, + "ĠпоÑģк": 114558, + "輯": 114559, + "à¥Ģश": 114560, + "Ġآثار": 114561, + "à¸Ħวามร": 114562, + "Ġедин": 114563, + "íħIJ": 114564, + "å¹³æĪIJ": 114565, + "ĠkiÅŁinin": 114566, + "ãĤ²ãĥ¼ãĥł": 114567, + "à¥įतव": 114568, + "Ġkapsamında": 114569, + "Ġaktar": 114570, + "Ġtrừ": 114571, + "Ġرشد": 114572, + "Ġнаказ": 114573, + "رÙĬÙĦ": 114574, + "à¸Ńà¸Ħ": 114575, + "ĠگذشتÙĩ": 114576, + "Ġæ°ij": 114577, + "ĠÑĤебÑı": 114578, + "spor": 114579, + "ÑİÑīаÑı": 114580, + "окÑĢема": 114581, + "вад": 114582, + "ĠChúng": 114583, + "ĠزÛĮادÛĮ": 114584, + "еного": 114585, + "ĠکسÛĮ": 114586, + "Ãŀ": 114587, + "Ġadına": 114588, + "Ñĥда": 114589, + "ÑĸÑĶ": 114590, + "аÑĤели": 114591, + "ĠnávÅ¡tÄĽ": 114592, + "ç͍äºİ": 114593, + "ĠپرÙĪÙĨدÙĩ": 114594, + "ĠÙĨبÙĪØ¯": 114595, + "سات": 114596, + "ìĹĺ": 114597, + "ãģ£ãģ¦ãĤĤ": 114598, + "Ġçī©": 114599, + "Ðĺз": 114600, + "åĪ·": 114601, + "Ġíľ´": 114602, + "ĠоÑģоблив": 114603, + "ãģĹãģ¾ãģ£ãģŁ": 114604, + "aydı": 114605, + "åĩºçļĦ": 114606, + "ĠìķĦëĭĪëĿ¼": 114607, + "ısını": 114608, + "à¸Ĺาà¸ĩà¸ģาร": 114609, + "Ġzvuky": 114610, + "Ġ管": 114611, + "âĸĭâĸĭ": 114612, + "ĠÑĤелеÑĦ": 114613, + "ĠнелÑĮзÑı": 114614, + "ãĥ«ãģ®": 114615, + "ÏĥÏĢ": 114616, + "Ġç³": 114617, + "åł¡": 114618, + "ÑĨÑĥз": 114619, + "رÙĬÙĤØ©": 114620, + "à¤¿à¤Ľà¤²": 114621, + "販": 114622, + "ĠУкÑĢаÑĹн": 114623, + "ĠÙħسئÙĪÙĦ": 114624, + "ĠоÑĩÑĸ": 114625, + "æľĢå¾Į": 114626, + "ĠзнаÑİ": 114627, + "à¹īà¸Ļà¸Ĺ": 114628, + "ĠÑĤеÑĢап": 114629, + "ĠÑģпок": 114630, + "ĠØ®ÙĪØ¯Ø±ÙĪ": 114631, + "éĺ»": 114632, + "Ġdüzey": 114633, + "ä¸ĢåĢĭ": 114634, + "اÙģÙĩ": 114635, + "à¤Ĥय": 114636, + "èµĦ产": 114637, + "ç»§ç»Ń": 114638, + "ĠÑģлаб": 114639, + "æĦıæĢĿ": 114640, + "ĠíĻĺìĤ°": 114641, + "ĠÑıÑĢ": 114642, + "Ġdůvod": 114643, + "çĿĽ": 114644, + "تÛĮب": 114645, + "ĠÙĪÛĮر": 114646, + "ĠÙĩزÛĮÙĨÙĩ": 114647, + "Ġbenzer": 114648, + "ĠÙħادÙĩ": 114649, + "à¥Įà¤ķ": 114650, + "Ġà¹Ģà¸ķ": 114651, + "ãĤĪãģı": 114652, + "иденÑĤ": 114653, + "èĭ±èªŀ": 114654, + "еÑĢÑĭ": 114655, + "Ġê¸Īìķ¡": 114656, + "Ġãĥ¼": 114657, + "Ġëį¤íĶĦ": 114658, + "ÑĢаÑĤÑĮ": 114659, + "Ġåįķ": 114660, + "à¹Ģà¸īà¸ŀาะ": 114661, + "ĠæĶ¿": 114662, + "Ġà¤Ĩम": 114663, + "Ġзни": 114664, + "ĠëĿ¼ìĿ´": 114665, + "æİĮ": 114666, + "çIJĨçͱ": 114667, + "Ġاغ": 114668, + "ĠÑģиг": 114669, + "ĠеÑĦекÑĤив": 114670, + "ĠÐŁÑĢед": 114671, + "ãĥ´ãĤ£": 114672, + "Ġвико": 114673, + "Ġtvrd": 114674, + "ëĤ´ê¸°": 114675, + "ãĥĭãĤ¢": 114676, + "ĠÙħشاÙĩدÙĩ": 114677, + "Ġसà¤ļ": 114678, + "lÃ¼ÄŁ": 114679, + "è¯ģåΏ": 114680, + "Ġsiêu": 114681, + "ĠоÑĤв": 114682, + "ĠvytvoÅĻ": 114683, + "ĠØŃÙħÙĦ": 114684, + "ĠÑĦÑĢан": 114685, + "à¹īà¸Ķ": 114686, + "åĮ»éĻ¢": 114687, + "Ġвлад": 114688, + "غÙĦ": 114689, + "建ç«ĭ": 114690, + "osloven": 114691, + "илаÑģÑĮ": 114692, + "عÙĦÙĪÙħات": 114693, + "ĠترÛĮÙĨ": 114694, + "ÎŃÏģει": 114695, + "ĠbáºŃt": 114696, + "ĠÙħØ´Ú©": 114697, + "ĠرئÙĬس": 114698, + "Ġìłľìŀij": 114699, + "γη": 114700, + "ĠнÑĸк": 114701, + "Ġ구ìĦ±": 114702, + "ĠÄijen": 114703, + "Ġà¤ļर": 114704, + "ĠgeçmiÅŁ": 114705, + "äºĨè§£": 114706, + "ĠлеÑģ": 114707, + "Ġquanh": 114708, + "ãĢĮæĪij": 114709, + "ĠNÄĽkterá": 114710, + "ëŀį": 114711, + "ÃħŸ": 114712, + "à¤Ĥदर": 114713, + "ìķĦìĿ´": 114714, + "å°ijãģĹ": 114715, + "ĠØ´ÙĩرÛĮ": 114716, + "κÏĦη": 114717, + "ĠâĹĦ": 114718, + "ĠÙĥس": 114719, + "è·Į": 114720, + "Ãı": 114721, + "å·¥åħ·": 114722, + "åĬĥ": 114723, + "pom": 114724, + "ĠнавÑĩаннÑı": 114725, + "Ġرج": 114726, + "ÑĢÑĥеÑĤÑģÑı": 114727, + "ĠνÎŃ": 114728, + "ÛĮÙĨÚ©": 114729, + "à¹Ĥà¸ĭ": 114730, + "åĭ¤": 114731, + "ãģĹãģ¾ãģĨ": 114732, + "ĠÑģоглаÑģ": 114733, + "éĩijèŀį": 114734, + "绿": 114735, + "ĠСан": 114736, + "æķµ": 114737, + "ĠповÑĸÑĤ": 114738, + "ĠпомоÑīи": 114739, + "ãĥ¡ãĥªãĤ«": 114740, + "ãĤ·ãĤ¢": 114741, + "ĠÏĢÏģοÏĤ": 114742, + "èĪªç©º": 114743, + "ĠваÑĢианÑĤ": 114744, + "Ġyalnızca": 114745, + "系統": 114746, + "ĠÙģÙĪØ±": 114747, + "оÑĩной": 114748, + "à¹Ģวà¸Ńร": 114749, + "ĠкÑĥлÑĮÑĤÑĥÑĢ": 114750, + "Ïĩι": 114751, + "ÄįÃŃta": 114752, + "Âĵ": 114753, + "人ãģĮ": 114754, + "κοÏį": 114755, + "ĠÑĢеÑĶ": 114756, + "ĠвÑģÑİ": 114757, + "éºĹ": 114758, + "ĠزÙĨاÙĨ": 114759, + "çĭĤ": 114760, + "Ġหม": 114761, + "Ġxúc": 114762, + "åħĴ": 114763, + "ÄŁinin": 114764, + "åĸľæ¬¢": 114765, + "ĠÑģÑĤад": 114766, + "iyesi": 114767, + "ìļ±": 114768, + "èĿ": 114769, + "Ġkus": 114770, + "ÏĦολ": 114771, + "гÑĸв": 114772, + "Ñĸли": 114773, + "ãģĦãĤĦ": 114774, + "é©Ĺ": 114775, + "ontrol": 114776, + "اÙĦÙĥ": 114777, + "ковиÑħ": 114778, + "ĠÑģÑĤало": 114779, + "ĠγαÏģα": 114780, + "Ġchy": 114781, + "Ġcihaz": 114782, + "ĩ´": 114783, + "ìŀ¥ìĿ´": 114784, + "aceae": 114785, + "Ø´Ùĩر": 114786, + "иланнÑı": 114787, + "çļĦå°ı": 114788, + "Ġthụ": 114789, + "ÙĪÙĨت": 114790, + "лоÑĢ": 114791, + "ãĤĴæĮģ": 114792, + "ĠÎĶι": 114793, + "Ġ羣": 114794, + "ÐĽÐŀ": 114795, + "é½IJ": 114796, + "çİĦ": 114797, + "اÙĪÙĩ": 114798, + "ĠинÑĤ": 114799, + "à¥Ģà¤Łà¤°": 114800, + "ĠобÑīе": 114801, + "ĠдепÑĥÑĤ": 114802, + "μÎŃνεÏĤ": 114803, + "ĠÙĥÙĬÙģ": 114804, + "عÙħÙĦ": 114805, + "ï¼Įå¦Ĥæŀľ": 114806, + "ĠинÑĦек": 114807, + "itele": 114808, + "ĠãĢĢãĢĢĠãĢĢ": 114809, + "ãĤ¤ãĥ³ãĥĪ": 114810, + "лÑĸÑĤ": 114811, + "ĠÑģÑİ": 114812, + "Ġzase": 114813, + "dech": 114814, + "еко": 114815, + "è®ĵ": 114816, + "åı¬": 114817, + "зем": 114818, + "ÎłÎij": 114819, + "Ġvzdu": 114820, + "าà¸Īาà¸ģ": 114821, + "koliv": 114822, + "zkum": 114823, + "èģĬ": 114824, + "Ġì±Ħìļ©": 114825, + "à¹į": 114826, + "Ġasp": 114827, + "Û²Û´": 114828, + "ìĿ¸ëį°": 114829, + "ĠkarÅŁÄ±laÅŁ": 114830, + "ï¼Įåı¯ä»¥": 114831, + "Ġà¤ĩनà¤ķ": 114832, + "ĠìĬ¤íĥĢ": 114833, + "éĥ¨å±ĭ": 114834, + "åĪ¶ä½ľ": 114835, + "ãĥ¼ãĤ·ãĥ§ãĥ³": 114836, + "ονÏĦαÏĤ": 114837, + "γο": 114838, + "ĠìŀijìĦ±": 114839, + "èij£": 114840, + "ozÅĻejmÄĽ": 114841, + "ĠÑĢезÑĥлÑĮÑĤаÑĤе": 114842, + "ĠInsecta": 114843, + "Ġskon": 114844, + "otu": 114845, + "ĠpÄĽt": 114846, + "ÑģÑĮого": 114847, + "Ġİslam": 114848, + "Ġlá»ħ": 114849, + "ä¸Ńåľĭ": 114850, + "ĠÐľÑĸнÑĸÑģÑĤ": 114851, + "åIJĪåIJĮ": 114852, + "asyonu": 114853, + "ожеÑĤ": 114854, + "èĩªåĬ¨": 114855, + "ÑģÑĮкоÑİ": 114856, + "ĠkiÅŁisel": 114857, + "ÏĦικοÏį": 114858, + "ĠÑĥÑĩаÑģ": 114859, + "ılmÄ±ÅŁtır": 114860, + "ĠÑıке": 114861, + "ÑīинÑĭ": 114862, + "маÑĢ": 114863, + "Ġsoudu": 114864, + "ÂłÐ¯": 114865, + "ĠдÑĢÑĥ": 114866, + "ãģ¡ãĤĩ": 114867, + "à¥ĭà¥ľ": 114868, + "ï¾ij": 114869, + "ĠÏĦÏĮ": 114870, + "Ġضر": 114871, + "láš": 114872, + "ĠдÑĸв": 114873, + "ĠجدÙĬد": 114874, + "ĠнеболÑĮÑĪ": 114875, + "éģŃ": 114876, + "ç»į": 114877, + "ĠKurulu": 114878, + "ÑģÑĤÑĢÑĥменÑĤ": 114879, + "è¿Ļæĺ¯": 114880, + "ìĻĶëĭ¤": 114881, + "мелÑĮ": 114882, + "Ġä¼Ĭ": 114883, + "á»§ng": 114884, + "ĠзавиÑģимоÑģÑĤи": 114885, + "ëį¤íĶĦ": 114886, + "çĩĥ": 114887, + "è¿ĩåİ»": 114888, + "ĠзаÑģÑĤоÑģÑĥваннÑı": 114889, + "ĠداخÙĦÛĮ": 114890, + "ÑīÑij": 114891, + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł": 114892, + "ﺮ": 114893, + "ĠاÙĦÙħÙħÙĦÙĥØ©": 114894, + "sında": 114895, + "è³Ģ": 114896, + "å±ı": 114897, + "Ġê¿": 114898, + "Ġdoktor": 114899, + "ĠÙĤاب": 114900, + "ĠSist": 114901, + "ĠмеÑģÑĤе": 114902, + "ĠÑģоÑħÑĢа": 114903, + "اشتÙĩ": 114904, + "ĠæľŁ": 114905, + "ĠпоÑģколÑĮкÑĥ": 114906, + "Ġpev": 114907, + "اگر": 114908, + "Ùħز": 114909, + "ĠضÙħÙĨ": 114910, + "३": 114911, + "gesi": 114912, + "aÄŁa": 114913, + "è§£åĨ³": 114914, + "ëħ¸ì¶ľ": 114915, + "Ġluyá»ĩn": 114916, + "ĠконÑĤак": 114917, + "ฺ": 114918, + "ĠNgÃły": 114919, + "Ġvýstav": 114920, + "Ġthuyết": 114921, + "اÛĮع": 114922, + "Ġ:/:": 114923, + "Ġphạt": 114924, + "ĠÎijÏĢÏĮ": 114925, + "Ġmuz": 114926, + "Ġìĥī": 114927, + "ĠÃĩin": 114928, + "Ġکاربرد": 114929, + "ائد": 114930, + "باد": 114931, + "à¥įतम": 114932, + "Ġëijĺ": 114933, + "Ġмоз": 114934, + "Å¡ÃŃch": 114935, + "Ġมห": 114936, + "Ġآس": 114937, + "ĠÑģлиÑĪком": 114938, + "èĥ¡": 114939, + "è£ģ": 114940, + "æĪ»": 114941, + "ĠìĦ¤ëªħ": 114942, + "Ġotom": 114943, + "Ġलà¤Ĺà¤Ńà¤Ĺ": 114944, + "à¸ĩà¸ģ": 114945, + "ابد": 114946, + "à¸Ļาม": 114947, + "èĤ©": 114948, + "ĠشدÙĨد": 114949, + "ãģĿãģ®ä»ĸ": 114950, + "adlo": 114951, + "ÄĽn": 114952, + "ĠÙĦÙĩا": 114953, + "Ġминим": 114954, + "ĠdÅĻev": 114955, + "ĠThiên": 114956, + "ëŀĻ": 114957, + "engin": 114958, + "à¥Ģमत": 114959, + "ĠÑĥпоÑĤÑĢеб": 114960, + "âĢĮتر": 114961, + "Ġç¥ŀ马": 114962, + "ovánÃŃm": 114963, + "Ġдело": 114964, + "Ġç¼ĸ": 114965, + "ĠاÙĦظ": 114966, + "Ġвий": 114967, + "аÑĤом": 114968, + "åħ¬åijĬ": 114969, + "ĠÄijem": 114970, + "ãĤ·ãĥªãĥ¼ãĤº": 114971, + "ä¸ĭçļĦ": 114972, + "lası": 114973, + "ĠвÑĭбоÑĢ": 114974, + "ÑĤоÑĤ": 114975, + "ëıĦë³Ħ": 114976, + "ĠÑĥÑģÑĤан": 114977, + "ĠíŀĪ": 114978, + "лÑĥаÑĤа": 114979, + "Ġthác": 114980, + "анием": 114981, + "оваÑĤÑĮÑģÑı": 114982, + "ÑĤÑĶ": 114983, + "ÐŃÑĤо": 114984, + "ï¼Įè¦ģ": 114985, + "ĠVz": 114986, + "ĠØŃÙĪØ²Ùĩ": 114987, + "-к": 114988, + "VỼi": 114989, + "entů": 114990, + "ĠbulunduÄŁu": 114991, + "رÙĪØ·": 114992, + "ĠÑĹй": 114993, + "Ġçevr": 114994, + "ĠÅĻed": 114995, + "ĠساختÙĩ": 114996, + "åĬŀæ³ķ": 114997, + "ĠÙĤÙĦ": 114998, + "iÅŁi": 114999, + "ï¼Ŀï¼Ŀ": 115000, + "ساس": 115001, + "Ġúdajů": 115002, + "å¬": 115003, + "æįŁ": 115004, + "áct": 115005, + "ĠÎijÏĢ": 115006, + "çĪ·": 115007, + "ĠÅĻád": 115008, + "Ġlá»Ĺi": 115009, + "ontent": 115010, + "ĠÙħذ": 115011, + "oloji": 115012, + "Ġپرداخت": 115013, + "à¹īาà¸ŀ": 115014, + "ĠдейÑģÑĤвиÑı": 115015, + "ĠmnožstvÃŃ": 115016, + "ìķĪë§Ī": 115017, + "åģ¶": 115018, + "ĠÃĶng": 115019, + "Ġdakika": 115020, + "hendis": 115021, + "Ġbác": 115022, + "寶": 115023, + "à¹ĩà¸ģหà¸į": 115024, + "nocenÃŃ": 115025, + "ĠErdoÄŁan": 115026, + ":::::::::::::": 115027, + "аÑĤем": 115028, + "dız": 115029, + "ĠØ£ÙĬضا": 115030, + "ĠÑįÑĦÑĦек": 115031, + "ãĤĮãģ¦ãģĦãĤĭ": 115032, + "ĠbaÅŁvuru": 115033, + "άνει": 115034, + "ĠÏĦελεÏħÏĦα": 115035, + "Ġê²Ģìĥī": 115036, + "ĠÚ©ÙĨترÙĦ": 115037, + "Ġशà¤ķ": 115038, + "å¼¹": 115039, + "ĠolmuÅŁtur": 115040, + "ĠвÑģÑĤÑĥп": 115041, + "Ñĩила": 115042, + "ยา": 115043, + "ĠØ£ØŃÙħد": 115044, + "oslav": 115045, + "ĠÑĩаÑģов": 115046, + "ĠzákladnÃŃ": 115047, + "Ġसव": 115048, + "дон": 115049, + "ĠÅĻÃŃjna": 115050, + "κοÏħ": 115051, + "éĢģæĸĻçĦ¡æĸĻ": 115052, + "ÏĥίαÏĤ": 115053, + "ãĤ´ãĥª": 115054, + "Ġвиб": 115055, + "å½Ĵ": 115056, + "Ġназад": 115057, + "ĠçĻ¾åº¦æĶ¶å½ķ": 115058, + "á»Ĩ": 115059, + "Ġkaldı": 115060, + "ì¼ľ": 115061, + "ĠíıŃ": 115062, + "ĠÑĩином": 115063, + "è¹": 115064, + "Ñıл": 115065, + "ĠÑĢаздел": 115066, + "dG": 115067, + "ĠTento": 115068, + "ÑıÑĤÑĮÑģÑı": 115069, + "éĿ¢çļĦ": 115070, + "ĠÎķÏĢι": 115071, + "ê°ij": 115072, + "Ġkèm": 115073, + "ниÑĨÑı": 115074, + "çĸ«": 115075, + "éĽĻ": 115076, + "ĠÙħرÙĥز": 115077, + "ĠнаÑĥк": 115078, + "å¢Ĺ": 115079, + "ĠÑĤепеÑĢ": 115080, + "à¤¾à¤ł": 115081, + "à¹ĩà¸ļà¹Ħà¸ĭà¸ķ": 115082, + "μβÏģίοÏħ": 115083, + "ĠÑĦÑĸнанÑģов": 115084, + "ÑĸÑĶÑİ": 115085, + "Ïģίζ": 115086, + "ì¤Ħ": 115087, + "ĠباÙĨÚ©": 115088, + "tul": 115089, + "liÄŁini": 115090, + "ĠпозволÑıеÑĤ": 115091, + "Ïĥί": 115092, + "ĠìĽĥ": 115093, + "à¹Įà¸Ħ": 115094, + "Ġpolov": 115095, + "ìŀ¥ìĿĦ": 115096, + "isté": 115097, + "ĠÐ¡Ð¡Ð¡Ðł": 115098, + "áhl": 115099, + "è¥": 115100, + "Ġкомплек": 115101, + "à¸Ĥà¸Ļาà¸Ķ": 115102, + "ัศ": 115103, + "ναν": 115104, + "Ġç¥ŀ马æĶ¶å½ķ": 115105, + "ìĭľìĺ¤": 115106, + "Ġé¦ĸ页第": 115107, + "ĠçĻ¾åº¦æµģéĩı": 115108, + "åij¨æĶ¶å½ķ": 115109, + "Ġhatta": 115110, + "ÐĴÑĸд": 115111, + "ĠвÑĭÑģÑĤÑĥп": 115112, + "کارÛĮ": 115113, + "Khi": 115114, + "Ġì°¾ìķĦ": 115115, + "Ġnặng": 115116, + "éĨ«": 115117, + "ĠVÅ¡": 115118, + "ĠпеÑĢен": 115119, + "лава": 115120, + "ÙĬÙħÙĬ": 115121, + "ĠvatandaÅŁ": 115122, + "ĠιÏĥÏĦο": 115123, + "Ġà¸ĵ": 115124, + "सल": 115125, + "ген": 115126, + "ĠبÙĪØ±": 115127, + "âĢĮدÙĩد": 115128, + "lıklı": 115129, + "Ġstrate": 115130, + "بÙĪØ±": 115131, + "ãĢģãĤ¢": 115132, + "Ġsonuc": 115133, + "Ġнаиболее": 115134, + "-в": 115135, + "Ġводой": 115136, + "ojenÃŃ": 115137, + "Ġغرب": 115138, + "Ġberi": 115139, + "adÄĽ": 115140, + "Ġdovol": 115141, + "âĢĮÚ©ÙĨÙĨدگاÙĨ": 115142, + "ãģķãĤī": 115143, + "ãĥ³ãĤº": 115144, + "ãĤ«ãĥ«": 115145, + "ometr": 115146, + "åĩĢ": 115147, + "ĠÙģÙĪÙĦ": 115148, + "ĠÙħÙĪØ³ÛĮ": 115149, + "ĠاÙĦÙħغرب": 115150, + "ecko": 115151, + "ÙĢÙĢÙĢÙĢÙĢÙĢÙĢÙĢ": 115152, + "ê°Ģ격": 115153, + "ÑĢÑĥÑĤ": 115154, + "Ġë¶Ģë¶Ħ": 115155, + "ĠpÅĻedpis": 115156, + "Ġopravdu": 115157, + "еÑĤиÑĩ": 115158, + "à¹Ĥà¸Ħรà¸ĩà¸ģาร": 115159, + "æħ§": 115160, + "æĭľ": 115161, + "سÙĥ": 115162, + "ìŀ¡ëĭ´": 115163, + "à¸Ľà¸£à¸°à¸¡à¸²à¸ĵ": 115164, + "è´¨éĩı": 115165, + "ĠголовÑĥ": 115166, + "лениÑİ": 115167, + "Ġनà¤ı": 115168, + "Ġprojektu": 115169, + "اÙ쨱": 115170, + "ativnÃŃ": 115171, + "ÎŃνÏĦ": 115172, + "ãĥīãĥ©": 115173, + "Ġtedav": 115174, + "ê¼": 115175, + "à¸Ľà¸£à¸°à¸ģาศ": 115176, + "Ġtuto": 115177, + "Ġchiếu": 115178, + "Ġvyz": 115179, + "ÑĢоÑĪ": 115180, + "åıĸå¾Ĺ": 115181, + "ĠмиÑģÑĤ": 115182, + "ĠÑģлÑĥÑĩаÑıÑħ": 115183, + "Ġغذ": 115184, + "ĠÑĥклад": 115185, + "ĠÑĥÑģÑĤановлен": 115186, + "Ġteslim": 115187, + "ĠãĢį": 115188, + "Ġè£": 115189, + "毫": 115190, + "éĬĢè¡Į": 115191, + "ects": 115192, + "kemiz": 115193, + "νηÏĤ": 115194, + "辺": 115195, + "ĠпÑĢем": 115196, + "Ġsonucu": 115197, + "Pokud": 115198, + "ĠÐŀÑģоб": 115199, + "è¾Ľ": 115200, + "輸": 115201, + "ë³´ê³ł": 115202, + "à¸ļà¸Ħ": 115203, + "ãĢĤãĢį": 115204, + "ा।ĊĊ": 115205, + "ĠÑģамоÑģÑĤоÑıÑĤелÑĮ": 115206, + "ÙĦÛĮت": 115207, + "λεκ": 115208, + "ĠÑĢайона": 115209, + "ÑĮи": 115210, + "à¹Īาà¸Ĺ": 115211, + "Ġà¸Ľà¸£à¸°à¹Ģà¸Ĺศ": 115212, + "มà¸Ń": 115213, + "اÙĩر": 115214, + "ĠвибоÑĢ": 115215, + "ÑİÑĩиÑģÑĮ": 115216, + "Ġpovol": 115217, + "abase": 115218, + "â̳N": 115219, + "Ú©ÙĪ": 115220, + "ĠУкÑĢаÑĹна": 115221, + "stanov": 115222, + "ĠÑĥÑĩаÑģÑĤи": 115223, + "Ġhlad": 115224, + "ĠÑĢаÑģÑģказ": 115225, + "ãģ¿ãģŁãģĦ": 115226, + "á½°": 115227, + "ĠåĽŀ": 115228, + "Ġương": 115229, + "αÏģά": 115230, + "خب": 115231, + "æįķ": 115232, + "ÃŃÅĻ": 115233, + "ĠسÛĮÙĨ": 115234, + "Âłin": 115235, + "ĠMÄĽst": 115236, + "æķĻåѦ": 115237, + "ĠоÑģобиÑģÑĤ": 115238, + "uji": 115239, + "çĶ»åĥı": 115240, + "ĠداÙĨØ´ÙĨاÙħÙĩ": 115241, + "ìĿ´ìķ¼": 115242, + "ĠзапиÑĤ": 115243, + "ĠÑģвоими": 115244, + "Û²Û°Û²": 115245, + "ï¼Įå°Ĩ": 115246, + "ãĥ¼ãģ®": 115247, + "ĠthÃŃ": 115248, + "ĠÙħتÙĪØ³Ø·": 115249, + "à¥ĩĊ": 115250, + "å¤ļå°ij": 115251, + "ï¼ĮçĦ¶åIJİ": 115252, + "íĹĪ": 115253, + "Ġà¤Ńà¤Ĺ": 115254, + "Ġåı·": 115255, + "Ġteor": 115256, + "åĤ¨": 115257, + "ĠÑĢÑĸÑĩ": 115258, + "ĠÑģÑĤаÑĤÑĤÑĸ": 115259, + "ĠرابطÙĩ": 115260, + "Ġï¼ľ": 115261, + "باØŃ": 115262, + "ิà¸Ļà¸Ĺาà¸ĩ": 115263, + "à¥ĩà¤ĤĊ": 115264, + "ائÙĤ": 115265, + "ĠاÙĦجدÙĬد": 115266, + "liÄį": 115267, + "اØŃÙĦ": 115268, + "ménÄĽ": 115269, + "Ġbầu": 115270, + "ĠÐĴал": 115271, + "Ġблагод": 115272, + "еÑĤелÑĮ": 115273, + "å¹³åĿĩ": 115274, + "мин": 115275, + "Ġsürec": 115276, + "Ġзавод": 115277, + "èįIJ": 115278, + "ÑĤий": 115279, + "лоб": 115280, + "Ġвок": 115281, + "ladıģı": 115282, + "اÙĬÙĬ": 115283, + "ê²łìĬµëĭĪëĭ¤": 115284, + "Ġamacıyla": 115285, + "ï¼ĮåĽłä¸º": 115286, + "ãģ§ãģĤãģ£ãģŁ": 115287, + "ĠشرÙĪØ¹": 115288, + "æŁĶ": 115289, + "'nun": 115290, + "окол": 115291, + "Ġciddi": 115292, + "Ġbụ": 115293, + "Ġyapılacak": 115294, + "ĠÑĩÑĥвÑģÑĤв": 115295, + "ìĤ¬ìĿĺ": 115296, + "à¸Ńà¸Ļà¸Ķ": 115297, + "ÎĹΤ": 115298, + "Ġëĭ¤ìĸij": 115299, + "ëĭ¤ë©´": 115300, + "imizi": 115301, + "ä¹Ĥ": 115302, + "ãģ²ãģ¨": 115303, + "ĠéĿŀ": 115304, + "âĢĮپدÛĮا": 115305, + "ä¹ĺ": 115306, + "ãĥĬãĥ«": 115307, + "ĠпÑĸдпÑĢиÑĶмÑģÑĤва": 115308, + "à¹ij": 115309, + "è¿Ŀ": 115310, + "ĠÙħÙĨÙĩ": 115311, + "ÑĢик": 115312, + "аÑĢÑĸв": 115313, + "Ġкого": 115314, + "ĠÙĤص": 115315, + "ĠæĿ¥": 115316, + "ĠPhòng": 115317, + "Ġово": 115318, + "ĠпеÑĢева": 115319, + "飲": 115320, + "à¤Ĥà¤Łà¤°": 115321, + "ÙĬرا": 115322, + "ildiÄŁi": 115323, + "etin": 115324, + "Ïĩεία": 115325, + "Ġzahrani": 115326, + "ÙĪØ¬Ø¯": 115327, + "Ġç¯": 115328, + "ารย": 115329, + "Ġзако": 115330, + "ĠتÙĤس": 115331, + "ãĤ¹ãĤ¿ãĥ¼": 115332, + "æĿ°": 115333, + "ĠãĤ°": 115334, + "Ġé»Ħ": 115335, + "ĠÐļогда": 115336, + "५": 115337, + "Ġ次": 115338, + "ĠвÑĭÑĢаж": 115339, + "ĠchÄĥm": 115340, + "лÑıÑĶÑĤÑĮÑģÑı": 115341, + "دÙĩÙħ": 115342, + "Ġvrch": 115343, + "çºĮ": 115344, + "поÑĢ": 115345, + "ĠmaÄŁ": 115346, + "å¾ĴæŃ©": 115347, + "podob": 115348, + "ะà¹ģ": 115349, + "é쏿īĭ": 115350, + "帯": 115351, + "Ġsebou": 115352, + "inize": 115353, + "ĠÐľÐ°Ðº": 115354, + "ĠæĻ®": 115355, + "ĠÏħÏĢάÏģÏĩ": 115356, + "ĠÄIJÃł": 115357, + "ĠBrno": 115358, + "ĠÅ¡ÃŃ": 115359, + "اÙĦص": 115360, + "Ġnghiêm": 115361, + "Ġonları": 115362, + "ĠužÃŃ": 115363, + "èĩªåĪĨãģ®": 115364, + "ĠнаÑħодиÑĤÑģÑı": 115365, + "Ġjsi": 115366, + "Ġसमर": 115367, + "ĠÏĨÏī": 115368, + "Û±Û¹Û¸": 115369, + "Ġà¤ľà¤Ĺह": 115370, + "éŃļ": 115371, + "ìĿ¸ê°Ģ": 115372, + "ÄIJiá»ģu": 115373, + "ĠأعÙĦاÙħ": 115374, + "à¥ĩà¤Ĥ।Ċ": 115375, + "å½¢æĪIJ": 115376, + "Ġikt": 115377, + "Ġzdroj": 115378, + "ĠAmerik": 115379, + "ΡÎĵ": 115380, + "à¸ĩส": 115381, + "ĠíĴĢ": 115382, + "ÑģолÑİÑĤ": 115383, + "ÙĪÙĬت": 115384, + "Ġgörüntü": 115385, + "аннÑĭÑħ": 115386, + "ĠØ£ÙĤ": 115387, + "ĠмиÑĢ": 115388, + "å«Į": 115389, + "Ġmá»iji": 115390, + "Ġderin": 115391, + "éĴĪ": 115392, + "ĠмаÑĪи": 115393, + "측": 115394, + "ĠجÙĨÙĪØ¨": 115395, + "ĠÑģло": 115396, + "ãĢĤä¸Ģ": 115397, + "ениÑıÑħ": 115398, + "ĠÑĩоловÑĸк": 115399, + "Ġyana": 115400, + "ĠокÑĤ": 115401, + "ĠнеÑĢ": 115402, + "æĪ¶": 115403, + "нÑĮомÑĥ": 115404, + "ĠÑĸмен": 115405, + "ãĤıãģŁãģĹ": 115406, + "ĠÎĵια": 115407, + "ãĢģç§ģ": 115408, + "Ġkou": 115409, + "ĠÑĨеÑĢк": 115410, + "layarak": 115411, + "ãĢĩ": 115412, + "اÙĦس": 115413, + "ÂłT": 115414, + "ĠдÑĢÑĥж": 115415, + "ĠдвоÑĢ": 115416, + "λί": 115417, + "ĠëĨĢ": 115418, + "Ġteplot": 115419, + "ÙģØ§Øª": 115420, + "бÑĸ": 115421, + "Ġgüvenlik": 115422, + "nÄĽn": 115423, + "è©©": 115424, + "Ġinsanların": 115425, + "ĠìĦ¤ì¹ĺ": 115426, + "èĵĿ": 115427, + "avatel": 115428, + "jev": 115429, + "ĠÚĨرا": 115430, + "Ġgerekiyor": 115431, + "ãĥĥãĤ°": 115432, + "ĠÃĩok": 115433, + "ĠÙĪØ¬Ùĩ": 115434, + "ĠÑĥли": 115435, + "Âij": 115436, + "åijĢ": 115437, + "ĠоÑĢганизаÑĨии": 115438, + "ĠÑĸÑģнÑĥ": 115439, + "Ġnebude": 115440, + "Ġë°¤": 115441, + "ä¸ĬãģĮ": 115442, + "Ġधन": 115443, + "ĠرÙĪØ§Ø¨Ø·": 115444, + "γγελ": 115445, + "ĠдоÑģÑıг": 115446, + "ĠاÙĦÙĤدÙħ": 115447, + "ĠзнаÑħод": 115448, + "ĠÄįÃŃslo": 115449, + "ÅŁk": 115450, + "ĠاÙĦدÙĬÙĨ": 115451, + "Ġgünlük": 115452, + "ÙĥÙĬÙĬÙģ": 115453, + "ÎŃÏģα": 115454, + "à¸ķรว": 115455, + "ĠналиÑĩи": 115456, + "اÙħÛĮÙĨ": 115457, + "Ġμικ": 115458, + "Ġdönemde": 115459, + "à¹Īà¸Ĺ": 115460, + "æĥij": 115461, + "à¥ĭà¤Ĥ,": 115462, + "ÑĩÑı": 115463, + "ãģ¾ãĤĭ": 115464, + "ĠاÙĦتÙĨ": 115465, + "ÑĢаг": 115466, + "ëĵ¤ê³¼": 115467, + "ŃĶ": 115468, + "ĠÙħÙĨÙĩا": 115469, + "ĠThế": 115470, + "éIJµ": 115471, + "Ġï¾Ħ": 115472, + "ĠاÙĦإسÙĦاÙħ": 115473, + "ãĤ¦ãĤ¹": 115474, + "ÙĬدÙĬ": 115475, + "Ġå¾Ĺ": 115476, + "ĠзаÑĢаз": 115477, + "ãĤ¸ãĥ¥": 115478, + "Ġتعد": 115479, + "iÃŃ": 115480, + "Ġçocu": 115481, + "ozici": 115482, + "Ġë²Ķ": 115483, + "ĠØ¢ÙħدÙĩ": 115484, + "ÑĦик": 115485, + "ĠпоÑģÑĤанов": 115486, + "Ġkrálov": 115487, + "¨¨": 115488, + "Ġì¤ijìļĶ": 115489, + "ĠGWei": 115490, + "Ġvývoj": 115491, + "Ġboyut": 115492, + "Ġnek": 115493, + "اÙĩاÛĮ": 115494, + "ĠstranÄĽ": 115495, + "ием": 115496, + "ĠпоÑĢаж": 115497, + "à¥įरदर": 115498, + "é¡ĶãĤĴ": 115499, + "ĠYüz": 115500, + "ĠознаÑĩа": 115501, + "à¹ģลà¸Ļà¸Ķ": 115502, + "ĠبÙĩرÙĩ": 115503, + "енÑĤÑĥ": 115504, + "ĠÐĿад": 115505, + "ĠÐŁÐ¾Ð»ÑĮ": 115506, + "ãĥĹãĥª": 115507, + "á¿¶": 115508, + "âĢĮپدÛĮاÛĮ": 115509, + "ĠپاÙĪØ±Ù¾ÙĪÛĮÙĨت": 115510, + "ิà¸ģา": 115511, + "ĠενÏİ": 115512, + "ĠساÛĮر": 115513, + "éģº": 115514, + "ãĢģä»Ĭ": 115515, + "ĠLê": 115516, + "äºĭæĥħ": 115517, + "ĠYer": 115518, + "èħ°": 115519, + "ĠاÙĦرسÙħ": 115520, + "ĠاÙĦÙħÙĪÙĤع": 115521, + "ĠhÃłm": 115522, + "ĠдÑĢев": 115523, + "átel": 115524, + "ĠвÑģÑij": 115525, + "ìĺ¥": 115526, + "ĠMec": 115527, + "ãĤĽ": 115528, + "Ġصاد": 115529, + "Ġگردد": 115530, + "Ġkrás": 115531, + "èĮĥåĽ´": 115532, + "alarına": 115533, + "èĻļ": 115534, + "ĠØ¢ÙĪØ±Ø¯": 115535, + "ç¼ĵ": 115536, + "ิà¸ŀ": 115537, + "Ġãĥĭ": 115538, + "ĠæĢ§": 115539, + "ĠÙħÙĨذ": 115540, + "ç·´": 115541, + "Ġê¶ģ": 115542, + "ваем": 115543, + "ĠζÏī": 115544, + "Ġnavr": 115545, + "ÏĥÏĦαÏĥη": 115546, + "Ġرأ": 115547, + "Ġdopl": 115548, + "___": 115549, + "çĶļèĩ³": 115550, + "Äįel": 115551, + "æĦıåij³": 115552, + "ç¥Ń": 115553, + "Ãĺ": 115554, + "ÑģÑĤвеннÑĭе": 115555, + "裡": 115556, + "ĠãĢī": 115557, + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 115558, + "Ġвал": 115559, + "Ġẩm": 115560, + "Ġdiyor": 115561, + "à¸Ńà¸ĩà¸Īาà¸ģ": 115562, + "ĠPhó": 115563, + "ĠÐĵе": 115564, + "ĠвеÑĢеÑģ": 115565, + "Ġkonz": 115566, + "رز": 115567, + "ĠÑģобоÑİ": 115568, + "Ġεκεί": 115569, + "ìĺģìĸ´": 115570, + "iag": 115571, + "ĠÑģенÑĤ": 115572, + "Ġnấu": 115573, + "Ġjaké": 115574, + "Ġrozh": 115575, + "Ġбог": 115576, + "ÙĨاد": 115577, + "ĠاÙħÙĪØ±": 115578, + "à¹Įà¸ģาร": 115579, + "ĠYaÅŁ": 115580, + "éĪ": 115581, + "åķª": 115582, + "Ġonay": 115583, + "ìĹĩ": 115584, + "omu": 115585, + "ÑĨÑĸйного": 115586, + "ĠÑģал": 115587, + "ĠΣÏħν": 115588, + "Ġsavun": 115589, + "å¦Ļ": 115590, + "à¸Īะม": 115591, + "ãĤ¹ãĤ¯": 115592, + "Ġdosy": 115593, + "ľĺ": 115594, + "먹": 115595, + "Ġminul": 115596, + "ãĢĭĊ": 115597, + "åģı": 115598, + "ĠÐļаÑĤ": 115599, + "Ġedilmesi": 115600, + "ÑĨÑĸÑĶн": 115601, + "ìĦ±ìĿ´": 115602, + "åĸĶ": 115603, + "ĠвÑĸÑĢ": 115604, + "è¯ij": 115605, + "ाà¤ĩड": 115606, + "ĠÙĪÙĤتÛĮ": 115607, + "ÄIJá»ĥ": 115608, + "ĠvyššÃŃ": 115609, + "Äįila": 115610, + "адÑĥ": 115611, + "çī¹åĪ¥": 115612, + "ĠìĿ¸ê¸°": 115613, + "ujÃŃcÃŃch": 115614, + "ĠPodle": 115615, + "ĠyavaÅŁ": 115616, + "Ļæ±Ł": 115617, + "Ġkayb": 115618, + "åĬª": 115619, + "ç´¹": 115620, + "ĠобÑĢабоÑĤ": 115621, + "ĠмаÑı": 115622, + "ĠåıĬ": 115623, + "æİ¥åıĹ": 115624, + "ÙĨتÛĮ": 115625, + "ĠÏĩÏİ": 115626, + "ÑĤÑĢо": 115627, + "Ġuyar": 115628, + "ĠعÙħÙĦکرد": 115629, + "ĠоÑĨен": 115630, + "ĠмеÑģÑĤа": 115631, + "à¸ķลาà¸Ķ": 115632, + "ÙħÙĤ": 115633, + "ildren": 115634, + "ĠзавиÑģиÑĤ": 115635, + "ÂłĠÂł": 115636, + "Ġmožná": 115637, + "æĺŃåĴĮ": 115638, + "ırken": 115639, + "кин": 115640, + "åĿĤ": 115641, + "ÏĦÏĥι": 115642, + "ĠÑĩÑĥд": 115643, + "Ðļон": 115644, + "islav": 115645, + "ĠÐļÑĢаÑģ": 115646, + "Nej": 115647, + "Âłb": 115648, + "rof": 115649, + "Ġileri": 115650, + "ĠÐŀÑĢ": 115651, + "ĠChá»ī": 115652, + "Ġnüfus": 115653, + "ĠÑĸнÑĤ": 115654, + "!âĢľ": 115655, + "Ġनर": 115656, + "主ä¹ī": 115657, + "ĠتÙĨظ": 115658, + "ůvodu": 115659, + "ĠгоÑĢода": 115660, + "Ġkural": 115661, + "Ġjedin": 115662, + "ÑĢаÑĤег": 115663, + "åĢº": 115664, + "Ġzpůsobem": 115665, + "ìĿ¸ìĿĺ": 115666, + "ĠÙĨب": 115667, + "ĠNga": 115668, + "ĠÐĿай": 115669, + "ĠاÙģØ²Ø§Ø±": 115670, + "нÑĥвÑģÑı": 115671, + "ĠдвоÑħ": 115672, + "Ġrozp": 115673, + "είοÏħ": 115674, + "Ġοικο": 115675, + "ĠGeç": 115676, + "ÂĹ": 115677, + "Ġchiếm": 115678, + "ĠÑĢаÑģпÑĢоÑģÑĤÑĢан": 115679, + "Ġhương": 115680, + "èĩªåĭķ": 115681, + "ĠÙħÙĪÙģÙĤ": 115682, + "æĮ¥": 115683, + "ï¼ģâĢĿĊĊ": 115684, + "ÏģοÏĨοÏģ": 115685, + "èıĮ": 115686, + "ãĥ´ãĤ¡": 115687, + "欧ç¾İ": 115688, + "ĠÑĤепло": 115689, + "ãģĤãģĤ": 115690, + "ãĤ¦ãĥ³": 115691, + "ĠÅŁeyi": 115692, + "Ġsüt": 115693, + "ãģ¹ãģ¦": 115694, + "ãĥ³ãĥij": 115695, + "μÎŃνÏīν": 115696, + "Ġgenellikle": 115697, + "ĠدرÙħاÙĨ": 115698, + "Ùª": 115699, + "Ġakıl": 115700, + "ĠÐľÑĭ": 115701, + "ĠetmiÅŁ": 115702, + "Å¡la": 115703, + "ĠвозможноÑģÑĤÑĮ": 115704, + "Ġgüncel": 115705, + "Ġnáro": 115706, + "å½¢å¼ı": 115707, + "ĠαÏĢοÏĦε": 115708, + "ĠмÑĸÑģÑĨÑı": 115709, + "Ġرض": 115710, + "ä¸įçŁ¥éģĵ": 115711, + "rava": 115712, + "ĠÎļά": 115713, + "ิà¸Ļà¸Ĺร": 115714, + "ĠлиÑģÑĤÑĮ": 115715, + "èĨľ": 115716, + "ãģ«ãģªãĤĬ": 115717, + "ĠæĿ¾": 115718, + "å®ı": 115719, + "ĠмиÑģ": 115720, + "átnÃŃ": 115721, + "Ġyıllık": 115722, + "ĠMerkezi": 115723, + "Ġiçeri": 115724, + "ÅĻÃŃž": 115725, + "ĠpÅĻe": 115726, + "ÏĩÏģι": 115727, + "Ġåįĥ": 115728, + "Ġsrp": 115729, + "à¹Ĥà¸Ĺร": 115730, + "ĠKrál": 115731, + ".Σ": 115732, + "ával": 115733, + "léd": 115734, + "Ġλα": 115735, + "ียวà¸ģ": 115736, + "ãģıãģª": 115737, + "ĠvÅ¡ichni": 115738, + "ĠпÑĢедоÑģÑĤав": 115739, + "ì¿": 115740, + "Ġ구ê¸ĢìĥģìľĦ": 115741, + "Ġà¤īपलब": 115742, + "воз": 115743, + "ĠëħĦëıĦë³Ħ": 115744, + "、_": 115745, + "à¸ļรร": 115746, + "ĠÑģвÑĸÑĤÑĥ": 115747, + "ĠÑĢÑĥблей": 115748, + "lenme": 115749, + "lÃŃÄį": 115750, + "ÏĦει": 115751, + "Ġåı¤": 115752, + "ĠObrázky": 115753, + "Ġìĺģíĸ¥": 115754, + "ĠгÑĢаждан": 115755, + "íĤ¹": 115756, + "Ġsahiptir": 115757, + "ĠпоÑĩаÑĤкÑĥ": 115758, + "ĠØ£ÙĬض": 115759, + "ĠÑĤоÑĢгов": 115760, + "Ġgelecek": 115761, + "Ġ문íĻĶ": 115762, + "ikleri": 115763, + "ĠнеобÑħÑĸдно": 115764, + "Ġäºij": 115765, + "ovol": 115766, + "Ġदल": 115767, + "ĠìķĬê³ł": 115768, + "Ġмг": 115769, + "Ġzjist": 115770, + "anlı": 115771, + "ัà¸ĩà¸Ļ": 115772, + "ÑĢаÑħов": 115773, + "ινη": 115774, + "ĠплоÑĤ": 115775, + "Ġnitel": 115776, + "ìĬ¤íģ¬": 115777, + "ĠSonra": 115778, + "ĠÑģбоÑĢ": 115779, + "ĠÏĥοÏħ": 115780, + "Ġolmam": 115781, + "Ġanaliz": 115782, + "à¹Įว": 115783, + "Ġmỹ": 115784, + "ceae": 115785, + "Ġден": 115786, + "веÑĢжд": 115787, + "Ả": 115788, + "ãģĵãģ¨ãĤĤ": 115789, + "ìĤ¬íķŃ": 115790, + "è¨Ģãģ£ãģŁ": 115791, + "Ġì¹´ì§Ģëħ¸": 115792, + "ÑĢиÑĤи": 115793, + "Ġchce": 115794, + "Ġçevir": 115795, + "ÛĮÛĮÙĨ": 115796, + "ä¼ļè®®": 115797, + "ัมà¸ŀ": 115798, + "ĠåĦ": 115799, + "Ġپدر": 115800, + "å¼ıä¼ļ社": 115801, + "ĠÑĨен": 115802, + "ิà¸ĸ": 115803, + "Ġjinak": 115804, + "ĠблÑİ": 115805, + "иÑĨин": 115806, + "ÙĴÙĩ": 115807, + "Ú©ÙĪØ±": 115808, + "Ġìķħ": 115809, + "eksiyon": 115810, + "ĠÑģвеÑĢ": 115811, + "ĠобÑĢазованиÑı": 115812, + "ĠãĥĻ": 115813, + "æľī人": 115814, + "Ġbilgileri": 115815, + "Ġhầu": 115816, + "еÑĢÑĸг": 115817, + "ĠvaÅ¡e": 115818, + "Ġnedir": 115819, + "ä¸įå¾Ĺ": 115820, + "ĠbaÅŁarılı": 115821, + "Ġkaybet": 115822, + "å©·": 115823, + "ĠÐĿав": 115824, + "Ġê´Ģíķľ": 115825, + "ÑģÑĤÑİ": 115826, + "å®ŀéĻħ": 115827, + "klady": 115828, + "даÑĤÑĮ": 115829, + "raç": 115830, + "Ġkuvvet": 115831, + "à¸ģารà¸Ĺ": 115832, + "åļ": 115833, + "ĠÑĢеп": 115834, + "Ġà¸Ŀ": 115835, + "ĠDiÄŁer": 115836, + "íĶĦíĬ¸": 115837, + "ĠnejvÄĽtÅ¡ÃŃ": 115838, + "Ġìłģìļ©": 115839, + "ĠonemocnÄĽnÃŃ": 115840, + "ака": 115841, + "ÐłÐ°Ð·": 115842, + "ĠÙ쨥ÙĨ": 115843, + "ãĤµãĤ¤ãĤº": 115844, + "Ġvlád": 115845, + "Ġrady": 115846, + "ãĢģãģĵãĤĮ": 115847, + "ÑģÑĤвие": 115848, + "lıģa": 115849, + "åŃĶ": 115850, + "Ġáo": 115851, + "à¸Ńาà¸ģาศ": 115852, + "Ġà¤ıम": 115853, + "δαÏĤ": 115854, + "ĠапÑĢ": 115855, + "æİĽ": 115856, + "Ġç«ĭ": 115857, + "âĸıâĸı": 115858, + "ĠСм": 115859, + "Ġnemá": 115860, + "Ġè¢": 115861, + "νομα": 115862, + "ĠÙ쨱ÙĪØ¯": 115863, + "Ġülke": 115864, + "ĠæĺŁ": 115865, + "ัà¸Ļà¸ģ": 115866, + "ãģķãĤĵãģ®": 115867, + "eÅŁil": 115868, + "ÄŁiz": 115869, + "ĠÐijоÑĢ": 115870, + "Ġtầm": 115871, + "ειÏĦοÏħÏģγ": 115872, + "ĠγÏģα": 115873, + "à¥įषà¤ķ": 115874, + "Ġvẻ": 115875, + "Ġkendisine": 115876, + "ĠìķĮê³ł": 115877, + "ĠêµŃìłľ": 115878, + "ĠnÄĽkdo": 115879, + "ĠÛĮÙĩ": 115880, + "Ġکاربر": 115881, + "ãĥĻãĥ«": 115882, + "ï»´": 115883, + "Ġtuyên": 115884, + "Ġçat": 115885, + "âĢIJâĢIJ": 115886, + "Âı": 115887, + "ĠìĤ¬ìĹħ": 115888, + "éĨĴ": 115889, + "æıIJé«ĺ": 115890, + "æ·¡": 115891, + "ĠÄŁ": 115892, + "èĸ¦": 115893, + "ãĢĭï¼Ī": 115894, + "æ¡ĥ": 115895, + "ìĹĦ": 115896, + "ĠæŀĹ": 115897, + "ÄĤ": 115898, + "ĠÄĮech": 115899, + "αιο": 115900, + "ĠطرÙĬÙĤ": 115901, + "ĠзавеÑĢÑĪ": 115902, + "تÙĪØ¨Ø±": 115903, + "ĠØŃج": 115904, + "ĠÎŃÏĩοÏħν": 115905, + "¿ÃĤ": 115906, + "ĠdÄĽtÃŃ": 115907, + "Ġiçine": 115908, + "ĠChúa": 115909, + "аннÑĭй": 115910, + "ĠÙĪÛĮÚĺ": 115911, + "Ġnastav": 115912, + "ısına": 115913, + "ĠÑĹм": 115914, + "пон": 115915, + "енÑı": 115916, + "ĠÙĪØ¸": 115917, + "Ú¯ÙĦ": 115918, + "หลวà¸ĩ": 115919, + "Ġzastav": 115920, + "акон": 115921, + "³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³": 115922, + "ĠKır": 115923, + "çµ¶": 115924, + "ĠоÑĢганÑĸзаÑĨÑĸÑĹ": 115925, + "ãģŁãĤĬ": 115926, + "ذÙĬ": 115927, + "Ġरà¤ķ": 115928, + "ampiyon": 115929, + "Ġæ¸ħ": 115930, + "çľ¼çĿĽ": 115931, + "ĠìķĬìĿĢ": 115932, + "鹿": 115933, + "Ġå¿ĥ": 115934, + "ĠпÑĢекÑĢаÑģ": 115935, + "ĠÑģегоднÑı": 115936, + "Ġसल": 115937, + "ĠÏħÏĢÏĮ": 115938, + "ĠÐķго": 115939, + "ĠÐĽÐ¸": 115940, + "ãĤ¨ãĥ«": 115941, + "ĠлÑİÑĤ": 115942, + "饰": 115943, + "Ġvzdál": 115944, + "¯ÃĤ": 115945, + "ĠнаÑıв": 115946, + "ĠتشکÛĮÙĦ": 115947, + "ĠسÙĪÛĮ": 115948, + "Ġtái": 115949, + "Ġkapı": 115950, + "ĠsvÄĽtÄĽ": 115951, + "δÏĮν": 115952, + "æ¼¢": 115953, + "ìį¨": 115954, + "ĠbaÅŁvur": 115955, + "ÑĢина": 115956, + "Ġkelim": 115957, + "аÑĤок": 115958, + "Ġκάθε": 115959, + "ĠYüksek": 115960, + "à¹ĩà¸Ļà¸ľ": 115961, + "éłĤ": 115962, + "åIJĮæĻĤ": 115963, + "ÅŁtır": 115964, + "วà¸ĩศ": 115965, + "oty": 115966, + "Ġارد": 115967, + "ĠìŀIJìĭłìĿĺ": 115968, + "ĠÑıнва": 115969, + "üyordu": 115970, + "æĿ¨": 115971, + "ĠâĢĵĊ": 115972, + "ï¼Įå®ĥ": 115973, + "ейн": 115974, + "ĠпеÑĢеÑĤ": 115975, + "ĠdeÄŁiÅŁiklik": 115976, + "ĠогÑĢаниÑĩ": 115977, + "ìĦľìļ¸": 115978, + "Ġgeliyor": 115979, + "ĠپذÛĮر": 115980, + "åĵ²": 115981, + "eyin": 115982, + "ĠëıĪ": 115983, + "Ġuniverz": 115984, + "Ġhned": 115985, + "ĠtáºŃn": 115986, + "voÅĻÃŃ": 115987, + "Ġniên": 115988, + "dÄĽpodob": 115989, + "ìĤ¬íļĮ": 115990, + "ãģĮãģĤãĤĬ": 115991, + "ĠÑģÑĸÑĩ": 115992, + "''\"": 115993, + "Ġtoplantı": 115994, + "ĠÑģÑĩеÑĤ": 115995, + "åĩĨå¤ĩ": 115996, + "анÑĸÑı": 115997, + "Ġzel": 115998, + "vala": 115999, + "Ġапп": 116000, + "ĠاÙĦÙħÙĦÙĥ": 116001, + "ĠhoÅŁ": 116002, + "ĠÐĵен": 116003, + "ÑĤаб": 116004, + "ĠÄĮesko": 116005, + "Ġмайже": 116006, + "ĠmÄĽsto": 116007, + "yonel": 116008, + "거리": 116009, + "Ġìĺ¨ëĿ¼ìĿ¸": 116010, + "ç´¯": 116011, + "Ġderec": 116012, + "ĠокÑĢÑĥж": 116013, + "Ġyabancı": 116014, + "ĠíĦ°": 116015, + "ĠèµĦ": 116016, + "ÎĻÎļÎĹ": 116017, + "ĠпÑĭ": 116018, + "ĠvÄĽn": 116019, + "инки": 116020, + "ụp": 116021, + "æľºæ¢°": 116022, + "ĠìķĮ볤": 116023, + "ëħķ": 116024, + "ĠλÏĮγ": 116025, + "eyn": 116026, + "ĠëIJĺìĹĪëĭ¤": 116027, + "污": 116028, + "Ġvedle": 116029, + "ĠÙĥتب": 116030, + "맨": 116031, + "ĠÙħÙĤاÙĪ": 116032, + "å¹´ãģ«": 116033, + "ाà¤ĩà¤ķ": 116034, + "ĠÑģÑĤоÑģ": 116035, + "ĠÏĥÏĦοÏħÏĤ": 116036, + "меÑĤÑĮ": 116037, + "Ġesas": 116038, + "ëIJĺê³ł": 116039, + "ĠkvÄĽtna": 116040, + "Ġéľ": 116041, + "dük": 116042, + "åŁ·": 116043, + "èªĮ": 116044, + "Ġmluv": 116045, + "ĠпÑĢинÑı": 116046, + "Ġpoté": 116047, + "ĠÚ©ÙĨÙħ": 116048, + "ĠпÑĢедлож": 116049, + "ĠÐľÐ¾Ñģква": 116050, + "ï¼Įå¦Ĥ": 116051, + "Ġsvém": 116052, + "ĠاÙħÙĨ": 116053, + "สาย": 116054, + "ĠÑĥменÑĮ": 116055, + "Ġãģĵãģ®": 116056, + "åīĤ": 116057, + "ĠÑģеÑĢÑĮ": 116058, + "Ġmá»ĩ": 116059, + "Ġä¹Ŀ": 116060, + "ĠзакÑĸн": 116061, + "ĠвелиÑĩ": 116062, + "ĠконÑĤÑĢа": 116063, + "ĠSosyal": 116064, + "Ġyukarı": 116065, + "ĠدÙĪØ¨": 116066, + "ä¾§": 116067, + "Ġзамен": 116068, + "ï»®": 116069, + "ĠsobÄĽ": 116070, + "ĠТакже": 116071, + "Ðİ": 116072, + "εδ": 116073, + "ÙħارÛĮ": 116074, + "ξι": 116075, + "ì¹Ń": 116076, + "ĠплаÑģÑĤи": 116077, + "ÏĥοÏħν": 116078, + "èľĺèĽĽè¯į": 116079, + "ÙĪÛĮزÛĮ": 116080, + "ĠnapÅĻ": 116081, + "ĠÑĤипа": 116082, + "à¥Ĥà¤Ľ": 116083, + "ĠÅŁah": 116084, + "лÑıÑĤи": 116085, + "بÛĮر": 116086, + "ระยะ": 116087, + "ĠболÑĮÑĪин": 116088, + "ÏĦηÏĦα": 116089, + "Ġíıīê°Ģ": 116090, + "Ġprojev": 116091, + "òi": 116092, + "ĠкнÑı": 116093, + "ÏĨεÏģ": 116094, + "еÑĢÑĥ": 116095, + "Ñįн": 116096, + "ĠعÙħÙĦÛĮ": 116097, + "à¤łà¤¨": 116098, + "ãĥ³ãĤ¯": 116099, + "ĠìķĦëŀĺ": 116100, + "ÎĪ": 116101, + "Ġباست": 116102, + "ĠتÙĥ": 116103, + "aÄįnÃŃ": 116104, + "ĠлÑĸкÑĥваннÑı": 116105, + "à¸Ħà¹Ĥà¸Ļ": 116106, + "Ġèĥ½": 116107, + "θλη": 116108, + "lenmiÅŁ": 116109, + "Ġlá»Ļ": 116110, + "Ġsilah": 116111, + "ĠAustr": 116112, + "ØŃÙĤ": 116113, + ".***.***": 116114, + "ì©": 116115, + "ĠgÃł": 116116, + "ĠبازبÛĮÙĨÛĮ": 116117, + "ĠÄijÃłn": 116118, + "ÃŃky": 116119, + "ĠÎķν": 116120, + "ضÙħ": 116121, + "å§ĵ": 116122, + "ĠÙĨÙĪÛĮس": 116123, + "Ġskupiny": 116124, + "ĠسÛĮد": 116125, + "Ġaldıģı": 116126, + "meli": 116127, + "виж": 116128, + "ì¹ĺëĬĶ": 116129, + "оваÑħ": 116130, + "Ġæ©": 116131, + "Ø´ÙĨاسÛĮ": 116132, + "Ġnimi": 116133, + "ĠÐĵÑĢи": 116134, + "íĹĮ": 116135, + "Ġкв": 116136, + "éŁĵ": 116137, + "ĠíĽĦ기": 116138, + "ĠstÅĻÃŃ": 116139, + "ĠкÑĸлÑĮкÑĸÑģÑĤÑĮ": 116140, + "ĠBakanlıģı": 116141, + "ĠменÑĮÑĪе": 116142, + "اÙĪÛĮ": 116143, + "ĠارÙĪÙ¾": 116144, + "Ġèī²": 116145, + "ĠÚ©ÙĪÚĨÚ©": 116146, + "ĠAynı": 116147, + "ĠäºĨ": 116148, + "ĠسÙ쨱": 116149, + "ĠÑĤеаÑĤ": 116150, + "ĠvÄĽd": 116151, + "аÑĢов": 116152, + "Ġобмеж": 116153, + "ĠìķĬìķĺ": 116154, + "追åĬł": 116155, + "éłĪ": 116156, + "dÄĽlenÃŃ": 116157, + "Ġkims": 116158, + "Ġèı²": 116159, + "ĠгÑĢÑĥн": 116160, + "ĠØ¢ÙĦÙħاÙĨ": 116161, + "Ġавг": 116162, + "ĠÑīоÑģÑĮ": 116163, + "Ġå¾·": 116164, + "ĠÐĿаÑĨÑĸоналÑĮ": 116165, + "æĪIJç«ĭ": 116166, + "ูà¸Ļย": 116167, + "ãĥ¼ãĥ«ãĥī": 116168, + "éĽ²": 116169, + "ĠTá»ķ": 116170, + "cılık": 116171, + "ĠAlmanya": 116172, + "ĠovÅ¡em": 116173, + "Âĭ": 116174, + "ĠÏĩÏģηÏĥιμοÏĢοι": 116175, + "Ġörgüt": 116176, + "िसस": 116177, + "èĹĿ": 116178, + "ĠGiải": 116179, + "Ġsvob": 116180, + "Ġrůzných": 116181, + "Ġsmlouvy": 116182, + "ÑĢеÑģÑģ": 116183, + "ีà¹Ģà¸Ķ": 116184, + "ĠاÙħرÙĪØ²": 116185, + "ãĤħ": 116186, + "åĿ¦": 116187, + "à¹īà¸Ħ": 116188, + "Ġкаж": 116189, + "å¼Ĺ": 116190, + "ÑĩноÑĹ": 116191, + "åľĪ": 116192, + "ĠØ¢ÙĩÙĨÚ¯": 116193, + "몰": 116194, + "Ġæº": 116195, + "ĠèĦ": 116196, + "ä¸ĢæŃ¥": 116197, + "оÑĩка": 116198, + "Ġprostor": 116199, + "Ġngắn": 116200, + "Ġç·": 116201, + "наÑĢ": 116202, + "Ġà¤ľà¤µ": 116203, + "ĠнаÑĩалÑĮ": 116204, + "Ġнедел": 116205, + "ĠÑģиÑģÑĤемÑĥ": 116206, + "جÙĬ": 116207, + "ادات": 116208, + "Ġæ¢": 116209, + "ĠجاÙħعة": 116210, + "Ġä»İ": 116211, + "Ġà¤ħफ": 116212, + "èĸĦ": 116213, + "ĠباÙĤ": 116214, + "بÙĬع": 116215, + "ãģķãĤĮãģ¦": 116216, + "ĠÃĩalÄ±ÅŁ": 116217, + "Ø®ÙĪØ§Ø³Øª": 116218, + "ãĥĥãĤ·ãĥ¥": 116219, + "ĠØŃسÛĮÙĨ": 116220, + "ĠобнаÑĢÑĥж": 116221, + "вÑĸдом": 116222, + "Ġhôm": 116223, + "ланд": 116224, + "Ġà¤µà¤ľà¤¹": 116225, + "سÙĬÙĨ": 116226, + "æłı": 116227, + "ĠnavÃŃc": 116228, + "ãĤµãĤ¤ãĥĪ": 116229, + "ĠÑıкомÑĥ": 116230, + "ĠíĽ": 116231, + "ĠYani": 116232, + "ãĤĵãģ§ãģĻ": 116233, + "ĠгÑĢÑĥп": 116234, + "Äįný": 116235, + "ÑĨик": 116236, + "ÙĪÙĬر": 116237, + "ĠXã": 116238, + "Ġfyz": 116239, + "Ġï½ī": 116240, + "âĢĮترÛĮÙĨ": 116241, + "à¤Łà¤ķ": 116242, + "ÑĦоÑĢми": 116243, + "ĠOyun": 116244, + "åł´æīĢ": 116245, + "ØŃØ«": 116246, + "ĠìķĮìķĦ": 116247, + "ÑĢавилÑĮ": 116248, + "ï¼ĮâĢĿ": 116249, + "boru": 116250, + "ĠKullan": 116251, + "ĠKaynak": 116252, + "Ġê°ĸ": 116253, + "ç´Ķ": 116254, + "ï¼Įæ¯ı": 116255, + "ÎĹΡ": 116256, + "Ġpůl": 116257, + "ĠгоÑģÑĤ": 116258, + "رÙĪÙħ": 116259, + "ï¼Įåį³": 116260, + "Û²Û³": 116261, + "ĠÙĨخست": 116262, + "Ġکسب": 116263, + "Ġà¹Ģà¸ļ": 116264, + "Ġyazar": 116265, + "jekt": 116266, + "à¹Ĥลย": 116267, + "ĠдобÑĢе": 116268, + "ĠپزشکÛĮ": 116269, + "ĠتÙĩÛĮÙĩ": 116270, + "ç¾İåľĭ": 116271, + "ноÑģÑıÑĤ": 116272, + "ëłĪìĬ¤": 116273, + "åĹ¯": 116274, + "ĠrÃłng": 116275, + "ĠÎķξ": 116276, + "аÑĤаÑĢ": 116277, + "kova": 116278, + "ĠÅŁeyler": 116279, + "خاص": 116280, + "ĠìķĪìłĦ": 116281, + "Ñīей": 116282, + "Ġë°Ŀ": 116283, + "âĢĮتÙĪØ§ÙĨد": 116284, + "ãģĪãģ°": 116285, + "Ġvữ": 116286, + "ĠÑģама": 116287, + "ĠобоÑĢÑĥд": 116288, + "âĢĮباشد": 116289, + "à¹Įà¸Ń": 116290, + "Ġdetay": 116291, + "æĤ²": 116292, + "ÂĪ": 116293, + "ãĤ¦ãĤ£": 116294, + "ĠпÑĢавила": 116295, + "krét": 116296, + "à¹Įร": 116297, + "åĮ¹": 116298, + "Ġåħį": 116299, + "ĠÑģилÑĮно": 116300, + "ĠиÑģÑĤоÑĩ": 116301, + "ĠsaÄŁlar": 116302, + "ĠæŃ¦": 116303, + "íĸĪìĬµëĭĪëĭ¤": 116304, + "Không": 116305, + "à¹Īาà¸ĩà¹Ĩ": 116306, + "Û°Û°Û°": 116307, + "ĠرÙĤ": 116308, + "âĢĻÑıÑĤ": 116309, + "åĽ²": 116310, + "à¹ģà¸Ķà¸ĩ": 116311, + "Ġžádné": 116312, + "couz": 116313, + "Ãĭ": 116314, + "ĠпÑĸдгоÑĤов": 116315, + "ĠëĮĢíķĻ": 116316, + "Ġdünyanın": 116317, + "èĢģå¸Ī": 116318, + "èģĮä¸ļ": 116319, + "Ġyeri": 116320, + "à¥ĭà¤ķर": 116321, + "ĠبÙĩتر": 116322, + "ëĭĪìķĦ": 116323, + "ìĿĮìĿĦ": 116324, + "ĠæĮĩ": 116325, + "ãĢįï¼Ī": 116326, + "ĠÑģооÑĤвеÑĤÑģÑĤвии": 116327, + "æĬĵ": 116328, + "à¹Ĥà¸Ĺ": 116329, + "Ġtrá»ĵng": 116330, + "ĠпÑĢаÑĨÑĸ": 116331, + "ĠëĨĵ": 116332, + "à¤ĩन": 116333, + "Ġìłķë§IJ": 116334, + "ãĢķ": 116335, + "ĠcáºŃn": 116336, + "åĸĿ": 116337, + "Ġê³ĦìĨį": 116338, + "Ġä¸İ": 116339, + "å¥ı": 116340, + "ĠعاÙĦÙħ": 116341, + "ĠvysvÄĽt": 116342, + "ĠдоÑĢог": 116343, + "ĠнеÑĢв": 116344, + "ĠбеÑĤ": 116345, + "ĠпÑĢиÑĤ": 116346, + "овÑĭй": 116347, + "å·¡": 116348, + "ÙģØ§Ø¹": 116349, + "ÐļÐĺ": 116350, + "à¸ķรวà¸Ī": 116351, + "ĠÐľÐ°Ð¹": 116352, + "ëıĦë¡ľ": 116353, + "Ġzlat": 116354, + "ĠsaÄŁlam": 116355, + "Ïģαν": 116356, + "à¸Ĭร": 116357, + "å¹´ãģ®": 116358, + "à¸Ħรà¸Ńà¸ĩ": 116359, + "Âħ": 116360, + "Ġhoá": 116361, + "ĠдоволÑĮно": 116362, + "Ġolmaz": 116363, + "ĠpodmÃŃnky": 116364, + "ĠÑħозÑıй": 116365, + "æĻ´": 116366, + "ÑĢова": 116367, + "Ġlược": 116368, + "ानन": 116369, + "ĠкапиÑĤ": 116370, + "ĠÚĺØ§ÙĨ": 116371, + "æľīäºĽ": 116372, + "ĠповеÑĢÑħноÑģÑĤи": 116373, + "ĠÑĨÑĸн": 116374, + "üyle": 116375, + "Ġjazy": 116376, + "ĠPhú": 116377, + "Ġसन": 116378, + "åĩºåĶ®": 116379, + "ÂłÐ´": 116380, + "ĠãĤ¯": 116381, + "çͱäºİ": 116382, + "à¥įपत": 116383, + "ĠاÙĦخاÙħ": 116384, + "ĠاصÙĦاØŃ": 116385, + "ĠتÛĮ": 116386, + "Ġtato": 116387, + "å¹¹": 116388, + "æ³½": 116389, + "à¸Ńà¸ģà¸Īาà¸ģ": 116390, + "ÑĥлÑİ": 116391, + "ĠвÑģп": 116392, + "mekte": 116393, + "à¥Ģफ": 116394, + "ĠÚĺÙĪØ¦": 116395, + "Ġlá»ĩnh": 116396, + "âĢĮکرد": 116397, + "íı¬ì¸ł": 116398, + "anki": 116399, + "Ġëĵ±ë¡ĿëĮĢíĸī": 116400, + "ĠãĤĿ": 116401, + "Ġارزش": 116402, + "Ġthú": 116403, + "Ġấn": 116404, + "è¡Į为": 116405, + "ĠÑģнова": 116406, + "꾸": 116407, + "Ġsouhlas": 116408, + "Ġвозв": 116409, + "ÏģÎŃÏĢει": 116410, + "ĠнÑĸÑĩого": 116411, + "нож": 116412, + "ÑĤик": 116413, + "ãģ©ãģĵ": 116414, + "ĠоÑģнове": 116415, + "ãĤ¥": 116416, + "à¸Ľà¸£à¸°à¸Īำ": 116417, + "Ġà¸Ĺà¸Ńà¸ĩ": 116418, + "Ġeksik": 116419, + "ĠÙĦØ¥": 116420, + "ãģĭãģ®": 116421, + "Ġãģª": 116422, + "-प": 116423, + "Ïģει": 116424, + "ĠìłĦ문": 116425, + "าà¸ģล": 116426, + "βε": 116427, + "íĬ¹ë³Ħ": 116428, + "íķĺë©´ìĦľ": 116429, + "à¸Ħà¹Ĥà¸Ļà¹Ĥลย": 116430, + "Ġ好": 116431, + "Ġyayım": 116432, + "ë§ĮëĤ¨": 116433, + "ĠкиÑģлоÑĤ": 116434, + "ĠÑįнеÑĢг": 116435, + "çĸ¾": 116436, + "Ġدش": 116437, + "Ġsoruml": 116438, + "Ġзаклад": 116439, + "à¸Ĭà¸Ńà¸ļ": 116440, + "ĠÙ쨱ÙĩÙĨÚ¯ÛĮ": 116441, + "Ġà¤ıल": 116442, + "Ġë¹ĦêµIJ": 116443, + "lerce": 116444, + "ĠØ·ÙĦب": 116445, + "ãģ«ãģĹãģ¦": 116446, + "ĠÑıкоÑĹ": 116447, + "ĠاÙĦبتÙĩ": 116448, + "ĠÐľÐ°ÑĤ": 116449, + "åįĵ": 116450, + "Ġåħ¬åı¸": 116451, + "Ġsöyley": 116452, + "ĠìĥĪë¡ľìļ´": 116453, + "ĠÑĦаÑĢ": 116454, + "Ġaltına": 116455, + "Ġstavu": 116456, + "âĢĻı": 116457, + "alizace": 116458, + "ĠвиÑģÑĤÑĥп": 116459, + "æķĻå¸Ī": 116460, + "à¥Ģà¤ıस": 116461, + "odÄĽ": 116462, + "ĠÑĨÑĸл": 116463, + "ĠëĮĢìĥģ": 116464, + "ĠкоÑĤоÑĢом": 116465, + "ĠظرÙģ": 116466, + "éİ®": 116467, + "اÙģÙĬØ©": 116468, + "ĠìĹĨìĿ´": 116469, + "ĠμÏĮνο": 116470, + "ĠCÆ¡": 116471, + "寻": 116472, + "ÏĦιÏĥ": 116473, + "ĠãĤĦ": 116474, + "Ġjednoho": 116475, + "اا": 116476, + "etler": 116477, + "Ġवस": 116478, + "ĠÑĢазлиÑĩнÑĭÑħ": 116479, + "ĠجغراÙģ": 116480, + "Ġthừa": 116481, + "ĠгÑĢомадÑıн": 116482, + "॰": 116483, + "ĠاÙĦأخ": 116484, + "ĠнагÑĢÑĥз": 116485, + "績": 116486, + "à¥Ĥह": 116487, + "ĠпÑĢÑıмо": 116488, + "âĬ": 116489, + "ĠاÙĦØ£ÙĪÙĦÙī": 116490, + "æĸ°èģŀ": 116491, + "ĠìĥģíĻ©": 116492, + "itesi": 116493, + "ëį°ìĿ´íĬ¸": 116494, + "æŃ·": 116495, + "ï¼ĮèĢĮä¸Ķ": 116496, + "ãģ¯ãģļ": 116497, + "产çĶŁ": 116498, + "æ°ĹãģĮ": 116499, + "yslu": 116500, + "ìĸ´ëĤĺ": 116501, + "اکÙħ": 116502, + "âĢĥ": 116503, + ")ìĿĢ": 116504, + "ĠجستارÙĩاÛĮ": 116505, + "ÙĪØ«": 116506, + "ãħİ": 116507, + "Ġkavram": 116508, + "vál": 116509, + "æľŃ": 116510, + "æĤł": 116511, + "ìħĢ": 116512, + "hrad": 116513, + "ĠتÙĥÙĪÙĨ": 116514, + "ĠHòa": 116515, + "å¹´çļĦ": 116516, + "Ġçarp": 116517, + "Ġyolu": 116518, + "Ġdubna": 116519, + "ĠÐĴелик": 116520, + "Ġtôn": 116521, + "æķĮ": 116522, + "Ġcoi": 116523, + "Ġnakonec": 116524, + "ĠÑįÑĤÑĥ": 116525, + "íĨµëł¹": 116526, + "ÑĪел": 116527, + "Ġnebyl": 116528, + "inç": 116529, + "باÙĦØ¥ÙĨجÙĦÙĬزÙĬØ©": 116530, + "A": 116531, + "онÑĮ": 116532, + "ĠнемаÑĶ": 116533, + "Ġê³łê°Ŀ": 116534, + "ĠÙĤطع": 116535, + "ĠÑĤеÑĢиÑĤоÑĢÑĸÑĹ": 116536, + "人ãģ¯": 116537, + "ĠΣα": 116538, + "éĤ£äºĽ": 116539, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 116540, + "iosper": 116541, + "íĤ¨": 116542, + "raki": 116543, + "اÛĮج": 116544, + "ÂłC": 116545, + "ĠаналÑĸз": 116546, + "ãĤıãĤĬ": 116547, + "ĠìķĦëĭĮ": 116548, + "ĠاÙĦعÙħÙĦÙĬØ©": 116549, + "lament": 116550, + "黨": 116551, + "ujÃŃcÃŃm": 116552, + "Ġrẻ": 116553, + "ä¸įåΰ": 116554, + "Ġrezerv": 116555, + "ĠاÙĦذÙĬÙĨ": 116556, + "æĭ¥": 116557, + "Ðĺн": 116558, + "Ġतहत": 116559, + "resi": 116560, + "Ġãĥ¢": 116561, + "лев": 116562, + "ãĢĢr": 116563, + "Ġä»Ĭ": 116564, + "Ġödem": 116565, + "Ġpotrav": 116566, + "ĠêµIJìĪĺ": 116567, + "ÑĢеди": 116568, + "ĠÎļÎijÎĻ": 116569, + "ĠнаÑĩала": 116570, + "Ġизб": 116571, + "ĠbÅĻezna": 116572, + "Ġledna": 116573, + "ÑĢÑĥÑİÑĤ": 116574, + "ĠмоÑĤ": 116575, + "åıĹåΰ": 116576, + "ĠÑĢÑĥкÑĥ": 116577, + "Ỽm": 116578, + "adele": 116579, + "ĠÑĢозглÑı": 116580, + "åħIJ": 116581, + "ĠرÙĪØ§ÙĨ": 116582, + "аков": 116583, + "ÑĥÑĢÑĭ": 116584, + "Ġazal": 116585, + "ĠÑĥкÑĢа": 116586, + "пион": 116587, + "ĠÄįlovÄĽ": 116588, + "äºĮäºĮäºĮäºĮ": 116589, + "ابÙĬ": 116590, + "Ġaslında": 116591, + "ë¹Ī": 116592, + "ĠвÑĢаÑĩ": 116593, + "룹": 116594, + "ĠгенеÑĢа": 116595, + "à¸ģารส": 116596, + "ĠÑģовÑģем": 116597, + "ÙĪÙĦا": 116598, + "Ġशब": 116599, + "ाà¤ĸण": 116600, + "ستاÙĨÛĮ": 116601, + "æĬ½": 116602, + "Ġrůz": 116603, + "ĠíĮIJ매": 116604, + "à¸ģารà¸ķ": 116605, + "ائÛĮ": 116606, + "asal": 116607, + "ĠÑĢабоÑĤÑĥ": 116608, + "à¥ĭलन": 116609, + "Ġ马": 116610, + "Ġlai": 116611, + "ói": 116612, + "vap": 116613, + "ëħĦìĹIJëĬĶ": 116614, + "ĠпеÑĢедбаÑĩ": 116615, + "ĠплеÑĩ": 116616, + "iddet": 116617, + "ĠÑĩоÑĢ": 116618, + "iyan": 116619, + "ãĢĢãĢĢãĢĢãĢĢãĢĢĠãĢĢ": 116620, + "ĠØŃرÙģÙĩ": 116621, + "大éĺª": 116622, + "Ñĩого": 116623, + "Ġки": 116624, + "اÙĪÙĬ": 116625, + "ĠbaÅŁlan": 116626, + "Ġmerkezi": 116627, + "©©": 116628, + "Ġراست": 116629, + "ĠëĬĶ": 116630, + "ĠÑģÑĢав": 116631, + "ĠвнÑĥÑĤÑĢи": 116632, + "ãĢĢãĥİ": 116633, + "åĿĽ": 116634, + "ĠвÑĤ": 116635, + "::/": 116636, + "ĠsözleÅŁ": 116637, + "ĠverdiÄŁi": 116638, + "ิยม": 116639, + "ĠÐŁÑĢоÑĤ": 116640, + "Ùĥار": 116641, + "ĠبÙĨدÛĮ": 116642, + "ÙıÙĪ": 116643, + "缴æĴŃ": 116644, + "ĠÙħÙĦÙĬ": 116645, + "Ġnutné": 116646, + "ะà¹ģà¸Ļà¸Ļ": 116647, + "ĠMã": 116648, + "Ġì´": 116649, + "à¹Īาม": 116650, + "моÑģ": 116651, + "ĠпоÑıви": 116652, + "Ġnghi": 116653, + "ĠëIJĺëĬĶ": 116654, + "Ñģклад": 116655, + "à¤Ĺल": 116656, + "ĠCá»Ļng": 116657, + "çŁ¥è¯Ĩ": 116658, + "Ġtaj": 116659, + "Ġعبر": 116660, + "éĻĦè¿ij": 116661, + "Ã¼ÄŁ": 116662, + "Ġê³µê³ł": 116663, + "è£ķ": 116664, + "âĢĮØ´ÙĨ": 116665, + "Ġgerçekten": 116666, + "nun": 116667, + "ÙħØ´": 116668, + "ê°ĢëĬ¥": 116669, + "ãĥ©ãĥ³ãĥī": 116670, + "ayacak": 116671, + "åįģä¸Ģ": 116672, + "ĠBảo": 116673, + "Ġyeterli": 116674, + "živ": 116675, + "ĠÙĬÙĨاÙĬر": 116676, + "Ġbýval": 116677, + "ìĽĶê¹Įì§Ģ": 116678, + "Ġnợ": 116679, + "Ġê´Ģê³Ħ": 116680, + "ĠíĿ¬": 116681, + "аÑİÑĤÑĮ": 116682, + "Ġgötür": 116683, + "Ġважно": 116684, + "浩": 116685, + "ĠìĿ¼ë¶Ģ": 116686, + "ÑĨÑĸйний": 116687, + "ëł¥ìĿĦ": 116688, + "ĠлеÑĩение": 116689, + "éĸ¢ä¿Ĥ": 116690, + "ĠTüm": 116691, + "ìĻĶ": 116692, + "éģĹ": 116693, + "ĠDön": 116694, + "ĠÑģпÑĸлÑĮ": 116695, + "ãĥģãĤ§": 116696, + "нÑıеÑĤÑģÑı": 116697, + "iltere": 116698, + "ĠíĮĢ": 116699, + "è¨Ńå®ļ": 116700, + "Ġrodin": 116701, + "ĠاÙĤتصاد": 116702, + "алÑĮне": 116703, + "à¥įà¤ķर": 116704, + "ĠvýbÄĽ": 116705, + "Ġtehlik": 116706, + "âĶIJ": 116707, + "ĠçͰ": 116708, + "ÏģίÏĤ": 116709, + "iyel": 116710, + "Ġthiá»ĩu": 116711, + "ÏĪηÏĤ": 116712, + "Ġдве": 116713, + "ĠElekt": 116714, + "à¸ģà¸İ": 116715, + "оÑĢÑĥж": 116716, + "aÅŁÄ±": 116717, + "詳細": 116718, + "ĠاتÙ쨧ÙĤ": 116719, + "Ġgắn": 116720, + "æ²Ĵæľī": 116721, + "ĠÙħطاÙĦعÙĩ": 116722, + "ÏĦιν": 116723, + "Ġokres": 116724, + "Ñľ": 116725, + "ê°Ķëĭ¤": 116726, + "ÐłÐ¾Ð·": 116727, + "å¾ĭ宾": 116728, + "ï¼īï¼Ī": 116729, + "Ġìļ´ìĺģìŀIJ": 116730, + "ãĤ«ãĥĨ": 116731, + "laÄį": 116732, + "à¥ĩबस": 116733, + "ĠoÄįi": 116734, + "-б": 116735, + "elerden": 116736, + "kových": 116737, + "Ġİzmir": 116738, + "สมาà¸Ĭ": 116739, + "ladatel": 116740, + "Ġæ»": 116741, + "éĶĢåĶ®": 116742, + "ĠдоÑģлÑĸдженнÑı": 116743, + "ĠлÑĸкаÑĢ": 116744, + "Ġоднако": 116745, + "ĠVác": 116746, + "Ġè«": 116747, + "é̲è¡Į": 116748, + "以å¤ĸ": 116749, + "é³¥": 116750, + "ĠÙĨج": 116751, + "ĠbaÅŁkan": 116752, + "ĠopatÅĻenÃŃ": 116753, + "ارش": 116754, + "ضاÙ쨩": 116755, + "ãĤ¹ãĥ¬": 116756, + "ήν": 116757, + "ÄĽtÃŃ": 116758, + "วย": 116759, + "ĠرسÙĪÙĦ": 116760, + "ÅĻich": 116761, + "ĠpÅĻih": 116762, + "ÑĮми": 116763, + "çĦ¶èĢĮ": 116764, + "Ġthẳng": 116765, + "lamaz": 116766, + "ÙĢÙĢÙĢ": 116767, + "Ġì°¸ìŬ": 116768, + "ĠÙĨÙĪØ´ØªÙĩ": 116769, + "ĠÑģÑĤек": 116770, + "ãģ®ãģ¿": 116771, + "ĠÙĪØ§ÙĦع": 116772, + "æķ¢": 116773, + "à¥Ģà¤Ĥ,": 116774, + "ÐŀÑģнов": 116775, + "имоÑģÑĤи": 116776, + "ĠÄĮeská": 116777, + "ÑĸÑĩний": 116778, + "ามารà¸ĸ": 116779, + "ekkür": 116780, + "Âłh": 116781, + "ικη": 116782, + "ĠتعÛĮÛĮÙĨ": 116783, + "коÑģÑĤÑĸ": 116784, + "ĠMustafa": 116785, + "Ġì¦ī": 116786, + "ãģ§ãģĤãĤĬ": 116787, + "å·¥ä¸ļ": 116788, + "ovÃŃd": 116789, + "ÐĿо": 116790, + "Ġسپس": 116791, + "Ú¯ÛĮرد": 116792, + "Ġпедагог": 116793, + "ĠکارÛĮ": 116794, + "ĠÑĪÑĤÑĥ": 116795, + "æĮĤ": 116796, + "Ø¢Ùħد": 116797, + "羣æĺ¯": 116798, + "Ġابت": 116799, + "ĠرئÛĮس": 116800, + "ĠدÛĮÙĨ": 116801, + "ÏĪε": 116802, + "Ġsezon": 116803, + "ĠçĨ": 116804, + "सन": 116805, + "ãĥ»ãĤ¢": 116806, + "ĠåħŃ": 116807, + "Ġè±": 116808, + "Ġìłľëª©": 116809, + "ĠÙħعد": 116810, + "ĠÙģÙĤد": 116811, + "éĤĬ": 116812, + "ΩΣ": 116813, + "Ġå¡": 116814, + "Ġobvyk": 116815, + "ĠìĿ´ëłĩê²Į": 116816, + "ĠбоÑĢоÑĤÑĮ": 116817, + "Û²Û±": 116818, + "Ġá»ijng": 116819, + "è¯Ĺ": 116820, + "ĠÄIJá»iji": 116821, + "ĠбеÑĢезнÑı": 116822, + "ĠsoÄŁ": 116823, + "Ġï¾į": 116824, + "ãĤĴãģ¤": 116825, + "ãģĹãĤĥ": 116826, + "еÑĢеÑĩ": 116827, + "ãĢĢãĢĢĠãĢĢĠãĢĢĠãĢĢ": 116828, + "æĪª": 116829, + "ĠاÙĦسعÙĪØ¯ÙĬØ©": 116830, + "ĠëĤ¨ìŀIJ": 116831, + "ĠAngiosper": 116832, + "????????????????": 116833, + "Ġprům": 116834, + "ĠплоÑīад": 116835, + "ĠÏĦÏģα": 116836, + "даÑİÑĤ": 116837, + "Ġsınav": 116838, + "Ġmặc": 116839, + "æ°´å¹³": 116840, + "ĠвиглÑı": 116841, + "Ġnást": 116842, + "ĠобÑĭÑĩ": 116843, + "ĠìĿ´ìķ¼ê¸°": 116844, + "ë¹Ľ": 116845, + "ĠBaÄŁ": 116846, + "ĠاÙĦثاÙĦØ«": 116847, + "Ġservis": 116848, + "Ġ룬": 116849, + "омина": 116850, + "ίθ": 116851, + "ĠẤ": 116852, + "경기": 116853, + "Ġ졸": 116854, + "ีà¸ļ": 116855, + "Ġà¤ĺà¤Łà¤¨": 116856, + "Ġà¸Ļาà¸ĩ": 116857, + ".Îł": 116858, + "ìķķ": 116859, + "rün": 116860, + "Ġonların": 116861, + "ĠзбÑĸлÑĮÑĪ": 116862, + "à¹ģà¸Ł": 116863, + "ĠìĹ¬ê¸°": 116864, + "ĠëĮĢíijľ": 116865, + "ĠÑģилÑĥ": 116866, + "à¹Ĥà¸Ľ": 116867, + "ĠتÙĤد": 116868, + "ĠÐŁÐ¾Ð¼": 116869, + "ĠмаÑģла": 116870, + "Ġìĺģìĥģ": 116871, + "нение": 116872, + "λαμβ": 116873, + "ĠByl": 116874, + "æĬµ": 116875, + "æİª": 116876, + "ĠκαθÏİÏĤ": 116877, + "mızı": 116878, + "æĸ°çļĦ": 116879, + "éĩįè¤ĩ": 116880, + "à¸±à¸Ľ": 116881, + "çŃĨ": 116882, + "ĠÑĤка": 116883, + "ĠзнаÑĩеннÑı": 116884, + "лаÑĤи": 116885, + "Ġvliv": 116886, + "ÐIJн": 116887, + "ĠÚĨاپ": 116888, + "ĠпиÑĤанÑĮ": 116889, + ":ï½ī": 116890, + "æķĻæİĪ": 116891, + "Ġì¹ľêµ¬": 116892, + "Ġtrao": 116893, + "à¥įयà¤ķत": 116894, + "ุà¸Ħà¸Ħล": 116895, + "ĠرÙĪØ´ÙĨ": 116896, + "ĠعÙĦÙĬÙĩا": 116897, + "ãĢģãģĦ": 116898, + "ëħĦìĹIJ": 116899, + "éĢĨ": 116900, + "Ġмагаз": 116901, + "ï¾ŀï¾ŀ": 116902, + "Ġsice": 116903, + "âĢĻte": 116904, + "ĠاÙĦÙĦغة": 116905, + "áu": 116906, + "èĩªèº«": 116907, + "ĠngÅ©": 116908, + "ĠÑģкладÑĥ": 116909, + "Ġzru": 116910, + "Ġtruy": 116911, + "Ġilan": 116912, + "ĠپاÛĮÙĩ": 116913, + "::::::::::::::": 116914, + "fak": 116915, + "ÑĤеÑħ": 116916, + "Ġtaky": 116917, + "Ġìĸ¸ìĸ´": 116918, + "edenÃŃ": 116919, + "Ġà¤ļलत": 116920, + "Ġë°°ìļ°": 116921, + "Ġjméno": 116922, + "ĠÙĦØ£ÙĨ": 116923, + "ανά": 116924, + "кÑĥлÑĮ": 116925, + "ĠØŃÙ쨏": 116926, + "ĠآزÙħÙĪÙĨ": 116927, + "иÑĤелÑĮнÑĭе": 116928, + "ĠÐŀлекÑģанд": 116929, + "èį£": 116930, + "Ġà¤ľà¤¬à¤ķ": 116931, + "Ġrodi": 116932, + "ĠبرخÙĪØ±Ø¯": 116933, + "Ġhafta": 116934, + "λικά": 116935, + "à¸ķà¸Ļ": 116936, + "ĠбеÑĢег": 116937, + "ανδ": 116938, + "-С": 116939, + "Ġpravidel": 116940, + "ĠбÑĸлÑı": 116941, + "íĴį": 116942, + "ĠпÑĢедÑĥÑģ": 116943, + "ĠмÑĥниÑĨип": 116944, + "åĮĸåѦ": 116945, + "ĠتÙħاس": 116946, + "Ġà¤īल": 116947, + "ÐĵÐŀ": 116948, + "غر": 116949, + "radan": 116950, + "ĠëĤĺìĺ¤": 116951, + "è¨Ĥ": 116952, + "à¹Ģà¸ĺà¸Ń": 116953, + "âĢĮسÛĮ": 116954, + "ĠобÑıзаÑĤелÑĮно": 116955, + "оÑĤе": 116956, + "à¹Įà¸Ĭ": 116957, + "ç͍çļĦ": 116958, + "Ġaltın": 116959, + "ĠÑģоÑĤÑĢÑĥд": 116960, + "Ñĸнки": 116961, + "озможно": 116962, + "ÎIJ": 116963, + "ë¹Į": 116964, + "Âķ": 116965, + "ĠÑĤоÑĩно": 116966, + "Ġjmen": 116967, + "اÙĦÛĮا": 116968, + "èĪį": 116969, + "chodu": 116970, + "곤": 116971, + "ickém": 116972, + "ĠÙħÙĪØ±": 116973, + "ãĥªãĥ³ãĤ¯": 116974, + "ĠaÅŁam": 116975, + "ĠиÑĤ": 116976, + "Ġनय": 116977, + "Ġμο": 116978, + "éķľ": 116979, + "ĠبÙĨابر": 116980, + "Ġتخصص": 116981, + "Ġสà¸ŀ": 116982, + "ĠпÑĢоÑĦеÑģÑģи": 116983, + "Ġpuan": 116984, + "ĠÙ쨱ÙħاÙĨ": 116985, + "ëĮĢíļĮ": 116986, + "ĠпÑıÑĤ": 116987, + "ĠÙħÙĪØ¨": 116988, + "ĠvÄĽku": 116989, + "Ġëĥ": 116990, + "ecký": 116991, + "ĠìĪĺëıĦ": 116992, + "Ġthao": 116993, + "Ġkapat": 116994, + "ĠзаÑħвоÑĢÑİ": 116995, + "Ġåħī": 116996, + "راÙĨÛĮ": 116997, + "éĢłæĪIJ": 116998, + "ĠÑģвÑĸй": 116999, + "ĠдоÑģиÑĤÑĮ": 117000, + "Ġmilyar": 117001, + "Ġenerji": 117002, + "Ġкип": 117003, + "Ġì¢ĭìķĦ": 117004, + "Ġبإ": 117005, + "ê²Įìĭľ": 117006, + "ĠLưu": 117007, + "ĠÙħÙĨظÙĪØ±": 117008, + "Ïīμά": 117009, + "ζί": 117010, + "ımda": 117011, + "ĠìĿ´ë¥¼": 117012, + "à¹Ĵ": 117013, + "Ġвваж": 117014, + "Ġgazet": 117015, + "à¥įतन": 117016, + "à¹īำหà¸Ļ": 117017, + "åľŁåľ°": 117018, + "Ġसदस": 117019, + "تبة": 117020, + "ĠpoÄįÃŃta": 117021, + "ĠìĭľìĬ¤íħľ": 117022, + "รà¸Ħ": 117023, + "Ġedecek": 117024, + "ĠتØŃÙĦÛĮÙĦ": 117025, + "æĮīçħ§": 117026, + "åĿª": 117027, + "Ġê·¸ê°Ģ": 117028, + "تÙĩÙħ": 117029, + "Ġбаж": 117030, + "اÙ쨹": 117031, + "éĢļ常": 117032, + "ĠТи": 117033, + "γνÏī": 117034, + "ì¹Ļ": 117035, + "Ġznamená": 117036, + "\\": 117037, + "αÏĢÏĮ": 117038, + "åĨĻ羣": 117039, + "Ġï¼¼Ċ": 117040, + "åĬłå·¥": 117041, + "èĤ¡ä»½æľīéĻIJåħ¬åı¸": 117042, + "ÑıÑĤий": 117043, + "Ġhâl": 117044, + "Ġçab": 117045, + "ĠØŃاضر": 117046, + "PÅĻ": 117047, + "ĠاÙĦتÙĤ": 117048, + "ξηÏĤ": 117049, + "бе": 117050, + "Ġkhám": 117051, + "ĠâĮĴ": 117052, + "Ġéķ¿": 117053, + "Ġâ̦Ċ": 117054, + "दम": 117055, + "ĠStudi": 117056, + "Ġkodu": 117057, + "Ġkomunik": 117058, + "Ġkatkı": 117059, + "nete": 117060, + "Ġrapor": 117061, + "éĨ´": 117062, + "ãĤīãģĽ": 117063, + "ĠнеÑģколÑĮ": 117064, + "Ġhá»įp": 117065, + " ̄ ̄ ̄": 117066, + "º¼": 117067, + "è£Ĥ": 117068, + "едÑĮ": 117069, + "ĠاÙĦاØŃ": 117070, + "ladık": 117071, + "ĠfotoÄŁraf": 117072, + "æĹ¥ãģ®": 117073, + "ĠØŃاÙĦت": 117074, + "ĠØ«ÙĦاث": 117075, + "аÑĤов": 117076, + "eyse": 117077, + "Ġê°IJìĤ¬": 117078, + "áže": 117079, + "Ġнада": 117080, + "Ġà¤ķहन": 117081, + "ĠãĥĿ": 117082, + "ãģ«ãģĤãĤĭ": 117083, + "ãģ«ãģªãģ£ãģ¦": 117084, + "ÙĪØ¯Ùĩ": 117085, + "ĠpoÅ¡k": 117086, + "太éĺ³åŁİ": 117087, + "ç»ıéªĮ": 117088, + "æĴѿ;": 117089, + "Ġmajet": 117090, + "Ñħо": 117091, + "ĠÑĤеÑģÑĤ": 117092, + "ï¼ıĊ": 117093, + "ÏĥεÏĦε": 117094, + "ĠТомÑĥ": 117095, + "ÙİØŃ": 117096, + "ĠìŀĪìľ¼ë©°": 117097, + "ĠзазнаÑĩ": 117098, + "éļIJ": 117099, + "ĠдÑĸÑĹ": 117100, + "кÑĤив": 117101, + "ÙĪÙģÙĬ": 117102, + "Ġtá»Ŀ": 117103, + "à¸¹à¸Ľà¹ģà¸ļà¸ļ": 117104, + "ĠÑĢедак": 117105, + "ĠateÅŁ": 117106, + "Ġkhiá»ĥn": 117107, + "üny": 117108, + "ียà¸ģ": 117109, + "ĠÑĩаÑīе": 117110, + "Ġtuy": 117111, + "γÏīν": 117112, + "รà¸Ńà¸ļ": 117113, + "Ġtrùng": 117114, + "à¹ģà¸Ĺà¸Ļ": 117115, + "ĠακÏĮ": 117116, + "ĠÐĴеÑĢÑħов": 117117, + "à¹ĥà¸Ļส": 117118, + "ãĢģä½ķ": 117119, + "åĩ¦": 117120, + "Ġç»ı": 117121, + "æ¨ĵ": 117122, + "اÙĨÚ¯ÙĦÛĮسÛĮ": 117123, + "ĠlepÅ¡ÃŃ": 117124, + "Ġå¼Ģå§ĭ": 117125, + "éĻº": 117126, + "ĠÑĩеÑĤÑĭ": 117127, + "ĠСеÑĢ": 117128, + "оÑİз": 117129, + "Ġxung": 117130, + "åĵģçīĮ": 117131, + "Ġìĥģíĥľ": 117132, + "ĠÙĨصب": 117133, + "ĠÑĩомÑĥ": 117134, + "ĠترکÛĮ": 117135, + "-ли": 117136, + "ovÃŃ": 117137, + "ĠاÙĨج": 117138, + "絡": 117139, + "ĠتÙĪØµ": 117140, + "Ġì¿ł": 117141, + "Ġvarsa": 117142, + "ĠÑĢазÑĢабоÑĤ": 117143, + "à¸Ĥà¸Ńà¸ĩà¸Ħ": 117144, + "éŃĤ": 117145, + "Ġà¤Ĭपर": 117146, + "æĿ¥è¯´": 117147, + "ĠÑĨенÑĤÑĢалÑĮ": 117148, + "ĠTakım": 117149, + "Ġonlar": 117150, + "Ġسرعت": 117151, + "好åĥı": 117152, + "Ġbuá»ķi": 117153, + "ĠÐijел": 117154, + "Âłc": 117155, + "أت": 117156, + "à¸Ĥà¸ĵะ": 117157, + "ãģ«åĩº": 117158, + "Ġ+**************": 117159, + "ÏĦηκε": 117160, + "اجر": 117161, + "Ġâ̲": 117162, + "ãĥ¼ãĥ¬": 117163, + "é¥Ń": 117164, + "ĠجÙĦس": 117165, + "ĠبستÙĩ": 117166, + "วาà¸ĩ": 117167, + "Ġβά": 117168, + "ĠамеÑĢикан": 117169, + "ĠPremi": 117170, + "mae": 117171, + "ĠÑģÑĢеди": 117172, + "áºł": 117173, + "ĠвÑĢед": 117174, + "ãĢĤèĢĮ": 117175, + "åĴ²": 117176, + "Ġê³µê°ľ": 117177, + "èĤ¥": 117178, + "звиÑĩай": 117179, + "Ġprocent": 117180, + "илоÑģÑĮ": 117181, + "शन": 117182, + "éłģ": 117183, + "екÑĤи": 117184, + "داشت": 117185, + "íķĻíļĮ": 117186, + "ãĢĢãĢĢãĢĢĠãĢĢĠãĢĢ": 117187, + "ĠÙħدÙĬÙĨØ©": 117188, + "िलन": 117189, + "ĠèĹ": 117190, + "миÑĢ": 117191, + "ĠноÑĢ": 117192, + "Ġíķĺì§Ģ": 117193, + "веÑī": 117194, + "nÄĽm": 117195, + "еÑĢами": 117196, + "Ġpracov": 117197, + "ĠبÙĬاÙĨات": 117198, + "ĠÏĥÏįν": 117199, + "Ġجذ": 117200, + "ãģĦãģ§": 117201, + "ĠBÃŃ": 117202, + "è±Ĩ": 117203, + "Ġhmot": 117204, + "ileceÄŁi": 117205, + "Ġتاث": 117206, + "è´´": 117207, + "Ġê¸ī": 117208, + "Ġmysl": 117209, + "ĠìĿ´íķ´": 117210, + "Ġ기ëĬ¥": 117211, + "ĠТам": 117212, + "ĠнаÑģелениÑı": 117213, + "ĠMez": 117214, + "Ġ모르": 117215, + "íĻĶ를": 117216, + "ĠÙĨسخÙĩ": 117217, + "ĠتÙĦÙĪÛĮزÛĮ": 117218, + "ĠÄįervna": 117219, + "ưỡng": 117220, + "صØŃ": 117221, + "ĠÑĤÑĢен": 117222, + "Õ¡": 117223, + "Ġcelou": 117224, + "Å©i": 117225, + "ìĹĨìĿ´": 117226, + "nÃŃku": 117227, + "Ġprogramu": 117228, + "à¥įपन": 117229, + "ĠпÑĢеж": 117230, + "ارب": 117231, + "æľŁéĸĵ": 117232, + "Ġμά": 117233, + "ëįĶëĭĪ": 117234, + "ụn": 117235, + "ĠпеÑĢеÑģÑĤ": 117236, + "对äºİ": 117237, + "è¿IJè¡Į": 117238, + "ĠÑĤан": 117239, + "ĠìĤ¬ìĿ´íĬ¸": 117240, + "ĠQuảng": 117241, + "ĠstojÃŃ": 117242, + "ãĥŃãĥ¼": 117243, + "گار": 117244, + "ĠенеÑĢг": 117245, + "Ġkterým": 117246, + "ĠпÑĢимÑĸ": 117247, + "ĠкаÑĢÑĤи": 117248, + "Ġzengin": 117249, + "ï¼ĮåĨį": 117250, + "Ġترب": 117251, + "ĠÑĨенÑĤÑĢ": 117252, + "ĠsaÄŁlamak": 117253, + "ëĭĿ": 117254, + "ãģ®åŃIJ": 117255, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 117256, + "ĠsÆ¡n": 117257, + "zı": 117258, + "ÑĤаки": 117259, + "ÄĽstÃŃ": 117260, + "Ġà¥": 117261, + "é®": 117262, + "åŁ¹è®Ń": 117263, + "Ġì͍": 117264, + "Ġbelki": 117265, + "ĠìĿ´ë²¤íĬ¸": 117266, + "ëĶĶìĸ´": 117267, + "ĠsÃłn": 117268, + "никам": 117269, + "alim": 117270, + "å¯¾å¿ľ": 117271, + "ĠSá»±": 117272, + "éģĵè·¯": 117273, + "é«ĺæ¸ħ": 117274, + "Ġdõi": 117275, + "ĠÙĦÙĢ": 117276, + "ĠèĤ¡": 117277, + "νι": 117278, + "âĢŀJ": 117279, + "'nde": 117280, + "ÎijÎĵ": 117281, + "ãģ¨ãģªãĤĭ": 117282, + "çΏ": 117283, + "عÙĦÛĮ": 117284, + "ÏģιÏĥÏĦ": 117285, + "ĠeÄŁit": 117286, + "ĠзовнÑĸÑĪ": 117287, + "ĠпÑĢим": 117288, + "سÙħبر": 117289, + "ĠmÄĽstÄĽ": 117290, + "ĠÏĢεÏģιÏĥÏĥÏĮÏĦε": 117291, + "ÐIJÐł": 117292, + "æĦŁåΰ": 117293, + "Ġ문ìĦľ": 117294, + "ãģĭãĤĭ": 117295, + "ÙĤÙĬÙĤØ©": 117296, + "ĠвÑĤÑĢа": 117297, + "Ġà¸Ńำ": 117298, + "ÑģкÑĥÑİ": 117299, + "دÙĩاÛĮ": 117300, + "Ġİst": 117301, + "ĠÐĹав": 117302, + "Ġéĥ½": 117303, + "ÑĪем": 117304, + "ĠеÑīÑij": 117305, + "ĠÐľÐ¸Ñħай": 117306, + "ĠÑĥпÑĢавлениÑı": 117307, + "леннÑĭе": 117308, + "ĠzaÄįal": 117309, + "æ¡Į": 117310, + "ĠпÑĸз": 117311, + "лÑıÑĤÑĮÑģÑı": 117312, + "ĠìŀIJë£Į": 117313, + "ãĢĢãĢĢĠ": 117314, + "ĠKral": 117315, + "èĪī": 117316, + "Ġà¤Ńव": 117317, + "ĠØ®Ùħ": 117318, + "Ġакадем": 117319, + "Ġisten": 117320, + "ĠиÑģкÑĥÑģ": 117321, + "ĠعÙĨدÙħا": 117322, + "ĠاÙĦاÙħ": 117323, + "ismus": 117324, + "Ġayrıntı": 117325, + "ĠЩо": 117326, + "ĠÙĩÙĪØ´": 117327, + "دÙĪØ§Ø¬": 117328, + "лаж": 117329, + "ĠÚ©ÙĨار": 117330, + "ÂłR": 117331, + "æĢ§çļĦ": 117332, + "ÑģÑĸм": 117333, + "ĠMüz": 117334, + "ÑĢовиÑĩ": 117335, + "ĠΩ": 117336, + "Ġìĸ´ëĶĶ": 117337, + "سÙħØ©": 117338, + "ĠÑĢÑı": 117339, + "Ġtươi": 117340, + "ĠÑĢаÑģÑħод": 117341, + "åı°çģ£": 117342, + "ĠاÙĦÙĪÙĤت": 117343, + "براÛĮ": 117344, + "ĠзÑĢобиÑĤи": 117345, + "ĠбÑĥÑĢ": 117346, + "ĠÄįinnosti": 117347, + "ĠصاØŃ": 117348, + "ĠصÙĨعت": 117349, + "ĠØ·ÙĦ": 117350, + "ξÏį": 117351, + "ĠtisÃŃc": 117352, + "ĠFransa": 117353, + "ì¦ĺ": 117354, + "軽": 117355, + "Ñĺ": 117356, + "ÏĮÏĦηÏĦαÏĤ": 117357, + "ĠMillet": 117358, + "ãĢĢãĥ¾": 117359, + "ĠпÑĢием": 117360, + "ĠترجÙħÙĩ": 117361, + "ĠسÙĪØ¯": 117362, + "ĠsouÄįástÃŃ": 117363, + "ÐĶо": 117364, + "Ġtrụ": 117365, + "è¶³çIJĥ": 117366, + "à¸Ľà¸ģ": 117367, + "Ġustanov": 117368, + "ÎŁÎĻ": 117369, + "Ðŀн": 117370, + "Ġнеж": 117371, + "ког": 117372, + "ä¸ĢçĤ¹": 117373, + "ĠدÙĪØ±Ø§ÙĨ": 117374, + "å½±éŁ¿": 117375, + "elidir": 117376, + "âĢŀN": 117377, + "esiyle": 117378, + "ÑĢеменно": 117379, + "ĠiletiÅŁim": 117380, + "มà¹Ģà¸ķ": 117381, + "以åīį": 117382, + "ãĥĭãĥ¼": 117383, + "éĽ»è©±": 117384, + "à¹Ĥà¸ŀ": 117385, + "ovky": 117386, + "ĠзамÑĸ": 117387, + "Ġवà¤ķ": 117388, + "ÂĻ": 117389, + "ĠвÑĸйни": 117390, + "Ġolmadıģı": 117391, + "æ¢ģ": 117392, + "ĠТеп": 117393, + "nÄĽte": 117394, + "èħķ": 117395, + "ìĤ¬ëĬĶ": 117396, + "mamak": 117397, + "Ġciz": 117398, + "æ£Ĵ": 117399, + "Ġï¼ı:": 117400, + "éģĭåĭķ": 117401, + "ĠÙĩÙĨا": 117402, + "Ġê°ij": 117403, + "ĠÙĩÙĨگاÙħ": 117404, + "ĠuÄŁra": 117405, + "彦": 117406, + "Ġobjekt": 117407, + "ãģ¨ãģĻãĤĭ": 117408, + "åĽ½åĨħ": 117409, + "ĠдеÑĢжави": 117410, + "ĠèĮ": 117411, + "Ġuluslararası": 117412, + "Ù£": 117413, + "Ġmutlak": 117414, + "Ġзобов": 117415, + "Ġγεν": 117416, + "à¹Ħà¸Łà¸Ł": 117417, + "Ġözgür": 117418, + "íĦ¸": 117419, + "ĠвипадкÑĥ": 117420, + "Ġà¤ķब": 117421, + "ĠاÙĦخط": 117422, + "θηκαν": 117423, + "ï¼ĮæĬĬ": 117424, + "ÑıÑĤÑĤÑı": 117425, + "Ġolmadıģını": 117426, + "ÂłkW": 117427, + "ĠnÄĽkterých": 117428, + "ãĥĩãĥ«": 117429, + "æ¤įçī©": 117430, + "μιλοÏĤ": 117431, + "ÐIJÑĢÑħÑĸв": 117432, + "ĠТо": 117433, + "èĸ¬": 117434, + "ÑģÑĤвиÑı": 117435, + "ĠØ®ÙĪØ§Ø³Øª": 117436, + "ологÑĸÑĹ": 117437, + "ÙĪØ§Ùĩد": 117438, + "Ġнак": 117439, + "ĠкоÑĤоÑĢÑĥÑİ": 117440, + "Ġदà¤ķ": 117441, + "âĢŀM": 117442, + "λια": 117443, + "æŃ²": 117444, + "ç¬¬åĽĽ": 117445, + "à¤¾à¤ľà¤¸": 117446, + "Ġ(«": 117447, + "Ġthẻ": 117448, + "、Ċ": 117449, + "ç£ģ": 117450, + "ĠÙĦÙĤ": 117451, + "ĠìķĶ": 117452, + "Ġнового": 117453, + "ĠìķĦ주": 117454, + "ĠëIJĺìĸ´": 117455, + "Ġolun": 117456, + "þ": 117457, + "Ġkariy": 117458, + "ĠØŃسب": 117459, + "ĠìĿĺ미": 117460, + ".Ðľ": 117461, + "ĠoznaÄį": 117462, + "ÙĦسÙĦ": 117463, + "ĠÐĴид": 117464, + "ë¡ľëĤĺ": 117465, + "à¥įà¤Łà¤®": 117466, + "íľ´": 117467, + "Ġbilgisayar": 117468, + "ìĿ¸ì§Ģ": 117469, + "Ġвов": 117470, + "nictvÃŃm": 117471, + "าà¸Ńย": 117472, + "ĠشخصÛĮ": 117473, + "пÑĸон": 117474, + "æľ¬å½ĵ": 117475, + "ĠبÙĢ": 117476, + "ĠмаÑģло": 117477, + "ĠPhát": 117478, + "Ġба": 117479, + "алÑĮномÑĥ": 117480, + "社åĮº": 117481, + "ĠÒ": 117482, + ":::|": 117483, + "ê´": 117484, + "Ġä¸ĥ": 117485, + "ĠÙĪØ§ÙĦد": 117486, + "нике": 117487, + "à¸Ńลล": 117488, + "ĠyerleÅŁ": 117489, + "Ġkombin": 117490, + "uÅ¡": 117491, + "ĠоÑĤÑĢи": 117492, + "ä¹Į": 117493, + "iÅŁti": 117494, + "Ġsóng": 117495, + "ληÏĤ": 117496, + "ĠкÑĥÑĢÑģ": 117497, + "à¹Īาà¸Ħ": 117498, + "ĠÙĬس": 117499, + "ĠداÙħ": 117500, + "çĴ°å¢ĥ": 117501, + "Ñĩенко": 117502, + "ãĢįãģ®": 117503, + "ĠmÃŃsta": 117504, + "ĠÑĦоÑĤ": 117505, + "ĠpÅĻÃŃzn": 117506, + "ĠÑĢаза": 117507, + "ç´«": 117508, + "láda": 117509, + "ĠÑģпеÑĨиалиÑģÑĤ": 117510, + "ĠبÛĮÙħارÛĮ": 117511, + "Ġëĵ£": 117512, + "çĭĹ": 117513, + "ÙĪÙĪ": 117514, + "анÑĸÑĤ": 117515, + "ĠدÙĨباÙĦ": 117516, + "ĠÙħجÙħÙĪØ¹Ø©": 117517, + "ÃŃna": 117518, + "ĠHalk": 117519, + "ájem": 117520, + "enÃŃze": 117521, + "Ġimz": 117522, + "«ng": 117523, + "ĠÎķÎł": 117524, + "ĠÙħÙĩد": 117525, + "ìľĦìĽIJíļĮ": 117526, + "Ġìľłíĺķ": 117527, + "ापस": 117528, + "Ġjež": 117529, + "анÑĸз": 117530, + "иÑĤай": 117531, + "á¿ĸ": 117532, + "irler": 117533, + "기ê°Ħ": 117534, + "ĠвоÑĢ": 117535, + "ĠÏİ": 117536, + "Ġpozn": 117537, + "ĠساÙĨ": 117538, + "寿": 117539, + "æĸ¯çī¹": 117540, + "Ġturist": 117541, + "ĠìŀIJìľł": 117542, + "à¥Ģà¤ĸ": 117543, + "μμε": 117544, + "ansı": 117545, + "ìĨĮëħĦ": 117546, + "Ġtedavi": 117547, + "ÑĩеÑģÑĤва": 117548, + "å£ĵ": 117549, + "ове": 117550, + "ï¼Įçľĭ": 117551, + "ĠпоÑģлÑĥг": 117552, + "ĠÑĤÑĢанÑģ": 117553, + "Ġzáz": 117554, + "æĪ´": 117555, + "Ġмона": 117556, + "ิà¹Ģà¸Ħราะห": 117557, + "ĠÙĨÛĮÙħ": 117558, + "ĠìĤ¬ëŀĮìĿ´": 117559, + "ahat": 117560, + "Ïħκ": 117561, + "ĠоÑĤказ": 117562, + "ĠÐĴолодими": 117563, + "ĠСк": 117564, + "िà¤ķत": 117565, + "å¦ĸ": 117566, + "Ġëĭ¤ìļ´ë¡ľëĵľ": 117567, + "ìĺģìĥģ": 117568, + "Ġनà¤Ī": 117569, + "cete": 117570, + "ĠгÑĢиб": 117571, + "eceÄŁini": 117572, + "ĠçoÄŁu": 117573, + "ĠмаÑĤеÑĢиала": 117574, + "ứt": 117575, + "Ġzaten": 117576, + "ĠFRA": 117577, + "ĠBirliÄŁi": 117578, + "Ġsitesi": 117579, + "ĠåĶ": 117580, + "ĠÐĴол": 117581, + "ÂłPS": 117582, + "ालत": 117583, + "ĠбаÑĩ": 117584, + "алÑĸзаÑĨÑĸÑĹ": 117585, + "ĠSlov": 117586, + "ç³ĸ": 117587, + "ĠговоÑĢиÑĤ": 117588, + "Ġввед": 117589, + "ุà¸ķà¸ļà¸Ńล": 117590, + "ãģĨãģ¡": 117591, + "Ġyaptık": 117592, + "Ġìłķì¹ĺ": 117593, + "ê°ľë¥¼": 117594, + "à¥Īसल": 117595, + "جÙĬÙĦ": 117596, + "ĠзаÑģÑĤоÑģов": 117597, + "è¿«": 117598, + "ĠKurul": 117599, + "ĠNasıl": 117600, + "ĠнапÑĢÑıм": 117601, + "Ġä½į": 117602, + "à¹Įà¸ļ": 117603, + "Ġéģĵ": 117604, + "Ġниже": 117605, + "ĠкоÑģÑĤ": 117606, + "ظÙĩر": 117607, + "Та": 117608, + "ì§Ŀ": 117609, + "Ġönünde": 117610, + "жÑĸ": 117611, + "ĠاجراÛĮ": 117612, + "ĠоÑĢганÑĸв": 117613, + "vise": 117614, + "ĠìĿĦ": 117615, + "à¸ķรà¸ĩ": 117616, + "Ú©ÙĨÙĪÙĨ": 117617, + "Ġdlouho": 117618, + "ÐŀÐĿ": 117619, + "Ġìľ¡": 117620, + "缮æłĩ": 117621, + "ë¯Ģë¡ľ": 117622, + "ï¼ıï¼ıï¼ıï¼ıï¼ıï¼ıï¼ıï¼ı": 117623, + "ĠпоÑĩемÑĥ": 117624, + "æķħäºĭ": 117625, + "ÑĤеÑģÑĮ": 117626, + "ĠÙĤÙĦب": 117627, + "ĠتجÙĩ": 117628, + "ilendir": 117629, + "ĠигÑĢа": 117630, + "ĠÐĶон": 117631, + "ĠpÅĻÃŃjem": 117632, + "è¦Ĩ": 117633, + "Сп": 117634, + "-ни": 117635, + "onse": 117636, + "иной": 117637, + "оÑĩного": 117638, + "اساÙĨ": 117639, + "ĠполÑĥÑĩиÑĤÑĮ": 117640, + "ÑĤап": 117641, + "ĠLý": 117642, + "ĠÃĤu": 117643, + "Ġhüc": 117644, + "ebek": 117645, + "ĠYayın": 117646, + "æĹĭ": 117647, + "ัà¸Ļà¸Ĺร": 117648, + "Ġвиконав": 117649, + "Ġsông": 117650, + "à¥ģà¤ľ": 117651, + "ĠÐĹаг": 117652, + "¤ëĭ¤": 117653, + "ĠcÅ©": 117654, + "ĠگرÙħ": 117655, + "ä¼ı": 117656, + "ãģ«ãģĻãĤĭ": 117657, + "-Ф": 117658, + "ĠÙĤÙħ": 117659, + "ĠolacaÄŁ": 117660, + "æĿ¥äºĨ": 117661, + "æĭĽèģĺ": 117662, + "ĠÐĿаÑģеленнÑı": 117663, + "Ġìĺģìĸ´": 117664, + "ĠæŃ¤": 117665, + "ĠبدÙĨ": 117666, + "Û²Û¸": 117667, + "оÑĢаÑĤив": 117668, + "ï¼³": 117669, + "Ġnebylo": 117670, + "ĠÑĥÑĩиÑĤ": 117671, + "æĿľ": 117672, + "ĠданÑĸ": 117673, + "ĠspotÅĻeb": 117674, + "ãĥ¼ãĥĨãĤ£": 117675, + "еннÑĥÑİ": 117676, + "ê¹ĮìļĶ": 117677, + "vem": 117678, + "PÅĻÃŃ": 117679, + "Ġyandan": 117680, + "é¼ĵ": 117681, + "ĠدستÙĪØ±": 117682, + "Ġhafif": 117683, + "hů": 117684, + "Ġváž": 117685, + "ĠìķĦì§ģ": 117686, + "Ùıر": 117687, + "Ġла": 117688, + "ëłī": 117689, + "à¸²à¸Ľà¸£à¸°": 117690, + "lıklar": 117691, + "ĠÑģÑĤандаÑĢÑĤ": 117692, + "à¸Ńà¹ĥห": 117693, + "奴": 117694, + "ĠоÑĤп": 117695, + "âĪł": 117696, + "ãĥ¼ãĥĢ": 117697, + "cháze": 117698, + "Ġê·¸ëłĩê²Į": 117699, + "ostel": 117700, + "ĠгалÑĥз": 117701, + "âk": 117702, + "еÑĨÑĤ": 117703, + "ëŀijìĬ¤": 117704, + "ĠÄįist": 117705, + "ÑĢана": 117706, + "Ġvững": 117707, + "Ġseni": 117708, + "Ġgóc": 117709, + "ÏĨÏĮ": 117710, + "ánu": 117711, + "Ġöt": 117712, + "Ġsóc": 117713, + "ãģĦãģ®": 117714, + "ĠÑģклада": 117715, + "ÐIJÑĢÑħÑĸвовано": 117716, + "ĠìĿ´ë²Ī": 117717, + "ãĤ¹ãģ®": 117718, + "ilebilir": 117719, + "ï½Ģãĥ½": 117720, + "ียà¸į": 117721, + "Ġκαὶ": 117722, + "Ġ믿": 117723, + "æĽ´å¤ļ": 117724, + "ısının": 117725, + "ĠGiám": 117726, + "æŃ£å¼ı": 117727, + "ÏĥμÏĮ": 117728, + "Ġarchit": 117729, + "Ġï½²": 117730, + "ÑĩаÑİÑĤÑģÑı": 117731, + "ë²Ħì§Ģ": 117732, + "ãĤ¤ãĥ¤": 117733, + "é«ĺæł¡": 117734, + "訳": 117735, + "ĠÙħÛĮÚ©": 117736, + "Ġæĥħ": 117737, + "Ġpha": 117738, + "太éĥİ": 117739, + "à¸ŀระราà¸Ĭ": 117740, + "ÙĤÙĬØ©": 117741, + "ĠÑĥлÑĥÑĩ": 117742, + "ÑģÑĤвÑĥеÑĤ": 117743, + "ĠkeÅŁ": 117744, + "é«ĺçŃī": 117745, + "ĠsỼm": 117746, + "Ïģκε": 117747, + "μοÏģ": 117748, + "Ġzástup": 117749, + "ozÃŃ": 117750, + "Ġmili": 117751, + "Ġмогли": 117752, + "ĠзÑĢозÑĥм": 117753, + "ĠباشÛĮد": 117754, + "Ġakci": 117755, + "ĠдÑĢа": 117756, + "ĠαÏģι": 117757, + "ãģĭãĤīãģ®": 117758, + "å¯Ĵ": 117759, + "ĠZaman": 117760, + "ĠÑĸде": 117761, + "ĠãĢĢĠ": 117762, + "Ġklu": 117763, + "aklı": 117764, + "à¥ĩà¤ļ": 117765, + "ĠÑģвобод": 117766, + "ساÙħ": 117767, + "Ġов": 117768, + "Ġubyt": 117769, + "éĩĩç͍": 117770, + "ĠdavranÄ±ÅŁ": 117771, + "ĠnabÃŃzÃŃ": 117772, + "ĠÐijÑĥд": 117773, + "ĠÏī": 117774, + "ĠاÙĦرØŃ": 117775, + "ัà¸ķà¸Ļ": 117776, + "име": 117777, + "ĠتÙĦÙĥ": 117778, + "تÙħع": 117779, + "ĠадминиÑģÑĤÑĢа": 117780, + "Ġzorunda": 117781, + "ĠÙĨسبة": 117782, + "ĠصÙĨعتÛĮ": 117783, + "ĠÑĦÑĥнда": 117784, + "éı¡": 117785, + "Ġpotom": 117786, + "ĠпÑĢеÑģÑĤ": 117787, + "Ġsırada": 117788, + "Ġayar": 117789, + "اÙĤÙĦ": 117790, + "溪": 117791, + "ĠØ¢ÙĤاÛĮ": 117792, + "ĠпеÑĢеÑħод": 117793, + "ĠпÑĢакÑĤиÑĩеÑģки": 117794, + "é»ĥ": 117795, + "ĠÑĥÑħод": 117796, + "ĠÙħتÙģ": 117797, + "Ġsiyasi": 117798, + "ĠпоÑĤен": 117799, + "ÙİÙģ": 117800, + "ĠÐĽÑĥ": 117801, + "ĠконÑĤÑĢолÑĮ": 117802, + "ĠÑģказаÑĤÑĮ": 117803, + "à¥Ģà¤ķरण": 117804, + "åħ¨çIJĥ": 117805, + "Û²Û¶": 117806, + "Ġtoto": 117807, + "ĠÙĪØ¯": 117808, + "ãĤ¿ãĤ¤ãĥĹ": 117809, + "åľį": 117810, + "å¼ķç͍": 117811, + "ï¼£": 117812, + "èĬ¸": 117813, + "ä»ĭç»į": 117814, + "ĠÑĤеÑĢÑĢиÑĤоÑĢии": 117815, + "æĹ¥ãģ«": 117816, + "mÃŃt": 117817, + "amız": 117818, + "ìĿ´ìĸ´": 117819, + "ĠyarÄ±ÅŁ": 117820, + "Ġgüc": 117821, + "ĠÏĩα": 117822, + "ัà¸Ļยายà¸Ļ": 117823, + "ãĤĴè¡Į": 117824, + "Ġmilli": 117825, + "Ġçı¾": 117826, + "Když": 117827, + "mazon": 117828, + "ë³´ëĤ´ê¸°": 117829, + "ĠÑĤÑĢÑĥдов": 117830, + "飾": 117831, + "Ġвиник": 117832, + "ĠÙĪØ²Ø§Ø±Øª": 117833, + "éĩĮçļĦ": 117834, + "маз": 117835, + "ĠRUS": 117836, + "екÑĤÑĥ": 117837, + "Ġعاش": 117838, + "Ġkonce": 117839, + "ãĤĪãģĨãģ§ãģĻ": 117840, + "ĠмалÑĭÑĪ": 117841, + "meni": 117842, + "еÑģа": 117843, + "اضÛĮ": 117844, + "Ġbrat": 117845, + "ĠвÑĸдноÑģ": 117846, + "θεÏģ": 117847, + "ĠЧем": 117848, + "æijĩ": 117849, + "ĠÙħادر": 117850, + "ç͍åĵģ": 117851, + "ĠÙħØŃاÙ쨏": 117852, + "ĠmyÅ¡": 117853, + "جع": 117854, + "Ġisim": 117855, + "æ³Ĭ": 117856, + "ılmaz": 117857, + "Ġμα": 117858, + "審": 117859, + "Ġayır": 117860, + "еними": 117861, + "à¥ĩहतर": 117862, + "åľĨ": 117863, + "ãģ¾ãģ£ãģŁ": 117864, + "çĶ¢åĵģ": 117865, + "ĠÑĸнÑĦоÑĢмаÑĨÑĸÑĹ": 117866, + "Ġtá»§": 117867, + "สมà¸ļ": 117868, + "ĠstÅĻ": 117869, + "Ġë°ľíijľ": 117870, + "аÑĢÑĮ": 117871, + "ĠCao": 117872, + "ΡÎĻ": 117873, + "à¸ģารà¸Ī": 117874, + "ĠподÑĥм": 117875, + "ä»ķäºĭ": 117876, + "ĠÐļÑĢоме": 117877, + "ĠìĹĶ": 117878, + "ĠÑĥда": 117879, + "ĠавÑĤомаÑĤи": 117880, + "Ġà¸Ħà¸ĵะ": 117881, + "ĠKiÅŁ": 117882, + "ĠÑģоÑģÑĤоÑıние": 117883, + "lisi": 117884, + "Ġëĸ¨ìĸ´": 117885, + "ootball": 117886, + "Ġíį¼": 117887, + "Ġлим": 117888, + "Ġçerç": 117889, + "ÙĪÙĦÙĬÙĪ": 117890, + "Ġslož": 117891, + "Ġ먼": 117892, + "รà¸Ńà¸ĩ": 117893, + "ÑĪее": 117894, + "â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦â̦": 117895, + "ãģĵãģ¡ãĤī": 117896, + "оÑĢÑĭ": 117897, + "çĥŁ": 117898, + "ÂłF": 117899, + "аного": 117900, + "Ø«ÛĮر": 117901, + "çıį": 117902, + "å¸Ĥåł´": 117903, + "vÄĽdom": 117904, + "첨ë¶Ģ": 117905, + "ĠìĤ¬ê±´": 117906, + "ï¾Į": 117907, + "à¹ĥà¸Ļว": 117908, + "Ġzvlášt": 117909, + "ÏĦεÏħ": 117910, + "Ġкакие": 117911, + "ÏĨοÏģά": 117912, + "åĦĦ": 117913, + "ĠzpÄĽt": 117914, + "íķľíħĮ": 117915, + "Ġzvol": 117916, + "ĠçĹ": 117917, + "ÑĢанениÑı": 117918, + "ĠسÛĮاست": 117919, + "ĠÐļоли": 117920, + "ĠоÑĢганизма": 117921, + "ĠÑıнваÑĢÑı": 117922, + "ĠدادÙĨ": 117923, + "пÑĢа": 117924, + "ï¼Įä»ĸ们": 117925, + "æijĺè¦ģ": 117926, + "Ġquần": 117927, + "ÙĬÙĪÙĨ": 117928, + "ĠвиÑħов": 117929, + "Âłà¹Ģà¸Ķ": 117930, + "Ġелем": 117931, + "ebilecek": 117932, + "ĠдоÑĩ": 117933, + "Ġблаг": 117934, + "ĠÑıй": 117935, + "adnÃŃ": 117936, + "ĠzároveÅĪ": 117937, + "enstvÃŃ": 117938, + "âĢĮاÙĨ": 117939, + "ãģķãĤĵãģ¯": 117940, + "/|": 117941, + "ĠاÙĦعاÙħØ©": 117942, + "éł¼": 117943, + "ĠخداÙĪÙĨد": 117944, + "нам": 117945, + "ĠÑģлиз": 117946, + "æ¶ī": 117947, + "รษ": 117948, + "eÅŁtir": 117949, + "ĠÙĨدار": 117950, + "ราà¸Ħ": 117951, + "è¨ĢãĤı": 117952, + "ĠèŃ": 117953, + "ĠкÑĢиÑĤ": 117954, + "ĠвоздÑĥÑħа": 117955, + "Ġà¤Ĺत": 117956, + "Ġprávo": 117957, + "à¥ĭषण": 117958, + "Ġsắp": 117959, + "íıŃ": 117960, + "ĠصرÙģ": 117961, + "ĠراÛĮگاÙĨ": 117962, + "ĠоÑĤк": 117963, + "ëĨĵ": 117964, + "ĠÑģекÑĢеÑĤ": 117965, + "İn": 117966, + "onavir": 117967, + "ĠVys": 117968, + "ĠbaÅŁlat": 117969, + "ĠMuham": 117970, + "ĠлиÑģÑĤоп": 117971, + "ĠTicaret": 117972, + "Ġadlandır": 117973, + "ĠÐĶмиÑĤ": 117974, + "ÏĥμοÏį": 117975, + "ä¾µ": 117976, + "ìĭľëĬĶ": 117977, + "à¹ģà¸Ľà¸¥à¸ĩ": 117978, + "ınıza": 117979, + "-г": 117980, + "иÑĩноÑĹ": 117981, + "ÑĥÑĢи": 117982, + "UZ": 117983, + "ìĽł": 117984, + "ĠتبدÛĮÙĦ": 117985, + "溫": 117986, + "ĠÑĢамкаÑħ": 117987, + "Ġnét": 117988, + "沿": 117989, + "ĠrozÅ¡ÃŃ": 117990, + "Ġसप": 117991, + "ĠÑĤаке": 117992, + "ÑĢаÑĩ": 117993, + "ĠاÙĦÙĤد": 117994, + "íķĻê³¼": 117995, + "ÑĥваннÑıм": 117996, + "Ġmám": 117997, + "롯": 117998, + "á½IJ": 117999, + "Ġetkili": 118000, + "ĠارتÙģ": 118001, + "Ġtechnolog": 118002, + "Ġì½ĺ": 118003, + "ĠتÙĥÙĬÙĬÙģ": 118004, + "ĠpÅĻece": 118005, + "å®¶åºŃ": 118006, + "Ġãģı": 118007, + "âĶ´": 118008, + "íģ¼": 118009, + "Ġξά": 118010, + "à¹Ģà¸ķร": 118011, + "ĠÑģÑĤановиÑĤÑģÑı": 118012, + "ç«ĭãģ¡": 118013, + "Ġéĸĭ": 118014, + "Ġİyi": 118015, + "ĠnÄĽkteré": 118016, + "ĠÑĢобоÑĤ": 118017, + "ĠÄIJưá»Ŀng": 118018, + "ĠاÙĦاج": 118019, + "Ġspeci": 118020, + "çī¹åĪ«": 118021, + "åŃĿ": 118022, + "âĢĮگذ": 118023, + "alıģı": 118024, + "ĠмиÑĢа": 118025, + "íİĺìĿ´ì§Ģ": 118026, + "Ø®Ùģ": 118027, + "ãĤªãĥª": 118028, + "ĠسÛĮÙħ": 118029, + "Ġìĸ´ëĬIJ": 118030, + "алÑĮнÑĥ": 118031, + "Ñĩний": 118032, + "ümüzde": 118033, + "æĻºèĥ½": 118034, + "ýn": 118035, + "ĠتÙĤÙĪÛĮت": 118036, + "ĠпÑĢиг": 118037, + "ĠгÑĢÑĥппÑĭ": 118038, + "amı": 118039, + "γοÏį": 118040, + "оÑĢÑĤÑĥ": 118041, + "ĠGiang": 118042, + "ÅĻen": 118043, + "ĠokolÃŃ": 118044, + "产ä¸ļ": 118045, + "Ġзм": 118046, + "Ġé¾": 118047, + "ÙĬار": 118048, + "ĠاÙĦØ´ÙĬØ®": 118049, + "иÑĤелÑĮнÑĭй": 118050, + "ĠاÙĩÙħ": 118051, + "ĠباÙĦرÙĬاض": 118052, + "ĠÙ¾ÛĮاÙħ": 118053, + "Ġkredi": 118054, + "ĠArap": 118055, + "ĠÑĢаб": 118056, + "ĠнекоÑĤоÑĢÑĭÑħ": 118057, + "ĠØŃاÙ쨏Ùĩ": 118058, + "иÑĤелÑĮного": 118059, + "Ġgerekmektedir": 118060, + "ĠDeniz": 118061, + "ĠتÙĦاش": 118062, + "stagram": 118063, + "ávky": 118064, + "åĬłåħ¥": 118065, + "ozor": 118066, + "Ġdurumunda": 118067, + "Ġíıīëĭ¹": 118068, + "Ġë´ī": 118069, + "ĠpenÄĽ": 118070, + "گاÙĨÛĮ": 118071, + "ĠKup": 118072, + "ĠÑĨеÑĢ": 118073, + "ulması": 118074, + "âijł": 118075, + "ĠÑģÑĸÑĩнÑı": 118076, + "ımıza": 118077, + "å®ļçļĦ": 118078, + "ÂłÑĤ": 118079, + "åĬŀåħ¬": 118080, + "ìľ¼ëĭĪ": 118081, + "ĠاÙĦØ¥ÙĨ": 118082, + "Ġçĥ": 118083, + "ãĢįï¼Į": 118084, + "ÑĹна": 118085, + "ĠпÑĢигоÑĤовлениÑı": 118086, + "Ðħ": 118087, + "ĠÑģолн": 118088, + "Ġë¶ĢìĤ°": 118089, + "æħ¶": 118090, + "ãĤ¾": 118091, + "voje": 118092, + "ÛĮدÙĨ": 118093, + "ìĥĿëĭĺ": 118094, + "ç¹ģ": 118095, + "ádu": 118096, + ":::::::::::::::": 118097, + "سÙĨÚ¯": 118098, + "éĶĭ": 118099, + "ĠзвиÑĩай": 118100, + "å§Ķåijĺä¼ļ": 118101, + "ĠμÎŃÏĥα": 118102, + "ĠÑĢождениÑı": 118103, + "æĪIJ人": 118104, + "ĠdÃŃl": 118105, + "ĠÐĶоб": 118106, + "Ġà¹ĥà¸Ĭ": 118107, + "ÏĢί": 118108, + "gamber": 118109, + "ĠÙĪÛĮÚĺÚ¯ÛĮ": 118110, + "ĠèĬ±": 118111, + "ĠbÃły": 118112, + "ĠжовÑĤнÑı": 118113, + "åħ¬å¼Ģ": 118114, + "ĠÑĤоÑĩки": 118115, + "ãģĤãģ®": 118116, + "алÑĸв": 118117, + "Ġcharakter": 118118, + "ĠÎĴα": 118119, + "ĠzkuÅ¡en": 118120, + "Ġà¤Ńà¤Ĺव": 118121, + "Ñĩика": 118122, + "à¥Ģà¤Ĥ।": 118123, + "è£ı": 118124, + "åijĬè¯ī": 118125, + "iyatı": 118126, + "ĠÑĨелÑĮ": 118127, + "ĠìĬĪ": 118128, + "аÑĢд": 118129, + "ĠÃľlke": 118130, + "Ġprosince": 118131, + "ĠÙĨگاÙĩ": 118132, + "ãĢĮãģĬ": 118133, + "ΣΤ": 118134, + "ìĦľëĬĶ": 118135, + "ÙĪگر": 118136, + "ضاÙĨ": 118137, + "Ġdůsled": 118138, + "çIJ´": 118139, + "à¸ķำà¹ģหà¸Ļ": 118140, + "кÑĤÑĸв": 118141, + "ládá": 118142, + "á¿Ĩ": 118143, + "ĠDoÄŁu": 118144, + "ãģijãĤĮãģ°": 118145, + "缮ãĤĴ": 118146, + "Ġ缴": 118147, + "æĽ°": 118148, + "ĠвÑĤоÑĢой": 118149, + "ĠглÑĥ": 118150, + "ĠìĿ½": 118151, + "기ì¤Ģ": 118152, + "Ġmadde": 118153, + "Ġjedné": 118154, + "ĠоÑĦÑĸ": 118155, + "ìĭĿìĿĦ": 118156, + "Ġchút": 118157, + "åĩºãģĹãģŁ": 118158, + "иÑĩеÑģкаÑı": 118159, + "Ġлок": 118160, + "Ġaltı": 118161, + "ëĵľëĬĶ": 118162, + "eygamber": 118163, + "ĠÑģвое": 118164, + "ĠtaÅŁÄ±m": 118165, + "ĠÑĤоÑīо": 118166, + "Ġgeçti": 118167, + "Ġpremi": 118168, + "ĠMehmet": 118169, + "ï¼ĮåĽłæŃ¤": 118170, + "ίκη": 118171, + "Ġönceki": 118172, + "Ġà¤ķन": 118173, + "ĠÑĤемпеÑĢаÑĤÑĥÑĢа": 118174, + "éĺ´": 118175, + "Ġìĸ¼ë§Ī": 118176, + "شب": 118177, + "áky": 118178, + "ãĢĢV": 118179, + "воÑĢеннÑı": 118180, + "lasyon": 118181, + "Ġдоказ": 118182, + "Ġëľ»": 118183, + "ĠоблиÑĩ": 118184, + "ÎĻÎijÎļ": 118185, + "ĠÑĢазд": 118186, + "ï¼Į为": 118187, + "宽": 118188, + "Ġkorum": 118189, + "åķĬåķĬ": 118190, + "ĠÅĻekla": 118191, + "ãĥĹãĥ¬": 118192, + "ĠваÑĢÑĤ": 118193, + "ĠпÑĢоблемÑĭ": 118194, + "Ġä½ł": 118195, + "ĠthÆ¡m": 118196, + "Ġtakové": 118197, + "ленÑĭ": 118198, + "Ġåζ": 118199, + "Ġjiných": 118200, + "ĠÙĨص": 118201, + "ĠгÑĢÑĥднÑı": 118202, + "ĠãģĹ": 118203, + "иÑĤелÑĮной": 118204, + "ĠاØŃتÙħ": 118205, + "ÑİÑĢ": 118206, + "ÏĨÏħ": 118207, + "ĠØ´ÙħاÙĦÛĮ": 118208, + "Ġì»´": 118209, + "acaģız": 118210, + "ì§Ģë§ī": 118211, + "ĠÑĦинанÑģов": 118212, + "Ġê·¹": 118213, + "ĠÚĨÛĮزÛĮ": 118214, + "à¥Ģà¤Ľ": 118215, + "صات": 118216, + "ानम": 118217, + "Ġвозможно": 118218, + "è¨İ": 118219, + "çĦ¦": 118220, + "ĠاÙĦبÙĦد": 118221, + "Ġçͳåįļ": 118222, + "祥": 118223, + "Ġë°ĶëĿ¼": 118224, + "Ú¯ÛĮر": 118225, + "ÛµÛ°": 118226, + "μιοÏħÏģγ": 118227, + "ĠpÅĻedsed": 118228, + "ç»ıèIJ¥": 118229, + "å§ij": 118230, + "emey": 118231, + "ĠÙĨÙĪÙģ": 118232, + "å¾½": 118233, + "Ġpráva": 118234, + "ĠвообÑīе": 118235, + "Ġíĭ°": 118236, + "ĠبأÙĨ": 118237, + "ĠFranti": 118238, + "ĠPaÅŁa": 118239, + "Ġپست": 118240, + "kân": 118241, + "ĠÑģигн": 118242, + "Ġdần": 118243, + "æIJľ": 118244, + "Ġroky": 118245, + "ÙĥÙĪØ±": 118246, + "ĠÎĶή": 118247, + "ализаÑĨии": 118248, + "ä¼łå¥ĩ": 118249, + "ıda": 118250, + "lÃŃb": 118251, + "ĠÑĢÑĸвнÑı": 118252, + "ĠноÑı": 118253, + "bÄĽhu": 118254, + "ิà¸ĩหาà¸Ħม": 118255, + "ï¼Įåį´": 118256, + "ĠÑĩеÑģ": 118257, + "lanmÄ±ÅŁtır": 118258, + "ĠÆ°á»Ľc": 118259, + "ávacÃŃ": 118260, + "ีฬา": 118261, + "δÎŃ": 118262, + "âĢĮØ´ÙĪÙĨد": 118263, + "ĠÑĢобÑĸÑĤ": 118264, + "Ġå·´": 118265, + "ĠMev": 118266, + "ĠÙħرØŃÙĦÙĩ": 118267, + "ĠвзÑĢоÑģ": 118268, + "ç½ļ": 118269, + "ĠباÙĦÙħ": 118270, + "ĠизгоÑĤов": 118271, + "ĠSpor": 118272, + "åĦĢ": 118273, + "ĠاÙĦØ£ÙĨ": 118274, + "à¹Īาà¸ĩà¸ģ": 118275, + "лаÑģÑĤи": 118276, + "ÎŁÎļ": 118277, + "ĠÚ©ÛĮ": 118278, + "åij½ä»¤": 118279, + "ØŃدث": 118280, + "ÙĬÙĥÙĬ": 118281, + "ĠпеÑĢвÑĭй": 118282, + "ãĤ¹ãĤ³": 118283, + "ĠÅ¡pat": 118284, + "Ġnikdo": 118285, + "ัà¸ĩม": 118286, + "赫": 118287, + "æĺ¨": 118288, + "ĠвÑĥли": 118289, + "ĠÐļа": 118290, + "à¹Īละ": 118291, + "Ġsamot": 118292, + "ĠобеÑģпе": 118293, + "ĠÙħعرÙģÛĮ": 118294, + "ĠÙħØŃصÙĪÙĦات": 118295, + "ванов": 118296, + "ĠÙħستÙĤÛĮÙħ": 118297, + "å¢Ļ": 118298, + "ÂłÐļ": 118299, + "ĠдоÑĤ": 118300, + "zim": 118301, + "ÙIJر": 118302, + "ĠØ´ÙĪ": 118303, + "åľ¨åľ°": 118304, + "Ġçݰ": 118305, + "ĠåĮĸ": 118306, + "زÙĪ": 118307, + "Ġyaygın": 118308, + "ĠоÑĢиг": 118309, + "ÙıÙĨ": 118310, + "Ġevrop": 118311, + "Ġï½ľ": 118312, + "Ġëħ¸ì¶ľëĵ±ë¡Ŀ": 118313, + "åĩĿ": 118314, + "леннÑĭÑħ": 118315, + "Ġjenom": 118316, + "ĠЧÑĤобÑĭ": 118317, + "ĠìĹĨëĭ¤": 118318, + "ĠìŬìĦ±": 118319, + "Ġresmi": 118320, + "imálnÃŃ": 118321, + "缮ãģ®": 118322, + "sian": 118323, + "-нибÑĥдÑĮ": 118324, + "οκ": 118325, + "çĭ¬ç«ĭ": 118326, + "ÅŁehir": 118327, + "åIJIJ": 118328, + "åζéĢł": 118329, + "ĠÎĶεν": 118330, + "ãĥĭãĥ¥": 118331, + "иÑĤелÑĮнÑĭÑħ": 118332, + "ĠÙĥاÙħ": 118333, + "Ïģκ": 118334, + "Ġrau": 118335, + "ĠÑģмеÑĢÑĤи": 118336, + "ĠÏĮÏĦαν": 118337, + "ĠTại": 118338, + "Ġرب": 118339, + "ενο": 118340, + "ردد": 118341, + "Ġà¸ģระ": 118342, + "Ïĥμο": 118343, + "Ġæ¼Ķ": 118344, + "ิà¸Īà¸ģรรม": 118345, + "ĠÑĢазви": 118346, + "ãĤ¹ãĥļ": 118347, + "ÑĸÑĩноÑĹ": 118348, + "lášenÃŃ": 118349, + "ابعة": 118350, + "ovými": 118351, + "анг": 118352, + "ĠкапÑĸÑĤ": 118353, + "ãĢģâĢĭ": 118354, + "íĸĪëįĺ": 118355, + "ĠÑĥÑģÑĸ": 118356, + "ยาว": 118357, + "Ø£Ùħ": 118358, + "ãĥ©ãĥĥãĤ¯": 118359, + "Ġëķ": 118360, + "ĠسÙĨÙĪØ§Øª": 118361, + "ĠÑģÑĤаÑĤÑĮи": 118362, + "ÑĹÑħ": 118363, + "ÏģοÏĩή": 118364, + "ĠØ£ÙĥتÙĪØ¨Ø±": 118365, + "lanma": 118366, + "Ġmalzem": 118367, + "磨": 118368, + "ĠбокÑĥ": 118369, + "åŃĹå¹ķ": 118370, + "ĠоÑĢганÑĸза": 118371, + "ãĥ©ãĤ¤ãĥ³": 118372, + "ĠÙħعدÙĨ": 118373, + "çĶ·åŃIJ": 118374, + "ĠæĤ": 118375, + "Ế": 118376, + "Ġmeziná": 118377, + "иваÑİÑĤ": 118378, + "ĠطبÛĮعÛĮ": 118379, + "èĻij": 118380, + "à¤Łà¤°": 118381, + "ĠподÑģ": 118382, + "ĠÅŁaÅŁ": 118383, + "à¸Ļà¹Ĩ": 118384, + "ĠÅ¡p": 118385, + "vÄĽÅĻ": 118386, + "зÑĮ": 118387, + "ëĿ¼ë§Ī": 118388, + "ุà¸ĺ": 118389, + "âĢ¦Ø·": 118390, + "리ì§Ģ": 118391, + "âĦĸâĦĸâĦĸâĦĸ": 118392, + "Ġbức": 118393, + "ĠSpoj": 118394, + "ĠиÑģполÑĮзовани": 118395, + "å·¦åı³": 118396, + "enler": 118397, + "ĠоÑīÑĥÑī": 118398, + "ĠоблÑĸ": 118399, + "ظËĨ": 118400, + "ÙĦÛĮس": 118401, + "æıIJåįĩ": 118402, + "ĠговоÑĢиÑĤÑĮ": 118403, + "Ġkür": 118404, + "ĠλειÏĦοÏħÏģγ": 118405, + "лага": 118406, + "ĠÑģÑĥдÑĥ": 118407, + "Ġ측": 118408, + "θεÏĥη": 118409, + "Ġнен": 118410, + "Ġbiçimde": 118411, + "ÑĨÑĸйноÑĹ": 118412, + "à¹Ģà¸Ħย": 118413, + "ĠDalÅ¡ÃŃ": 118414, + "ĠимеÑĤÑĮ": 118415, + "èĭĹ": 118416, + "ĠÙħعرÙĪÙģ": 118417, + "Ġtạp": 118418, + "ĠmeÅŁ": 118419, + "ÂłN": 118420, + "оÑĢони": 118421, + "عÙģ": 118422, + "à¹Ĥรà¸ĩà¹Ģร": 118423, + "âͬ": 118424, + "Ġà¹Ģà¸ŀราะ": 118425, + "Ġèı²å¾ĭ宾": 118426, + "ÑģÑĤвенное": 118427, + "ĠازدÙĪØ§Ø¬": 118428, + "ĠÑĦев": 118429, + "éł»": 118430, + "Ġสล": 118431, + "à¸ķà¸Ńà¸Ļ": 118432, + "Ġ기ê°Ħ": 118433, + "佩": 118434, + "ÏĦην": 118435, + "ëĤ¬ëĭ¤": 118436, + "ĠQuy": 118437, + "Ġë¶Ļ": 118438, + "ĠСÑĥд": 118439, + "иж": 118440, + "Ġà¹Ģà¸ģม": 118441, + "ĠÑģвÑıÑĤ": 118442, + "etooth": 118443, + "εÏģο": 118444, + "ÙĦÙħØ©": 118445, + "Ø´ÙĪØ±": 118446, + "Ġdomu": 118447, + "èįĴ": 118448, + "mî": 118449, + "ëıĦ를": 118450, + "ĠÑĢекомендÑĥеÑĤÑģÑı": 118451, + "Ġsonrasında": 118452, + "ĠднÑĸв": 118453, + "Ġçal": 118454, + "ãĤ«ãĥĨãĤ´ãĥª": 118455, + "Ġеж": 118456, + "Ġìķī": 118457, + "èī²çļĦ": 118458, + "âĢĻnde": 118459, + "ĠÏĢÏīÏĤ": 118460, + "ĠÑĩеÑĤвеÑĢ": 118461, + "kili": 118462, + "æĢ§èĥ½": 118463, + "ادÙĬØ©": 118464, + "纯": 118465, + "ĠاÙĦتش": 118466, + "ĠÑĤела": 118467, + "ĠобÑĬем": 118468, + "å²Ĺä½į": 118469, + "Ġkonkrét": 118470, + "Ġarada": 118471, + "ìĭľìĹIJ": 118472, + "Ġoranı": 118473, + "رÙĥ": 118474, + "ÐĽÐIJ": 118475, + "ĠménÄĽ": 118476, + "جÙĪÛĮ": 118477, + "Ġvợ": 118478, + "ĠAngiospermae": 118479, + "èĥİ": 118480, + "Ġhôn": 118481, + "äºĭæ¥Ń": 118482, + "ĠоÑĤвеÑĢ": 118483, + "Ġsrd": 118484, + "Å¡li": 118485, + "สà¸ģ": 118486, + "æ¼ı": 118487, + "ĠشرØŃ": 118488, + "ÑĨÑıми": 118489, + "Ġslav": 118490, + "Ġceny": 118491, + "à¸Ńà¹Ģร": 118492, + "ĠÙĪÙĦد": 118493, + "ĠкоÑĢа": 118494, + "ĠбÑĢон": 118495, + ":.:.:.:.:": 118496, + "Ġnemus": 118497, + "è¿Ļæł·çļĦ": 118498, + "ĠبرÙĨاÙħج": 118499, + "ĠúplnÄĽ": 118500, + "ีà¸Ļาà¸Ħม": 118501, + "Ġë°ĽìķĦ": 118502, + "μεÏģα": 118503, + "缩": 118504, + "Ġnắm": 118505, + "ĠобÑĬÑıÑģ": 118506, + "ĠконÑĤÑĢолÑİ": 118507, + "ávajÃŃcÃŃ": 118508, + "Ġkum": 118509, + "çĶ·äºº": 118510, + "ĠvnitÅĻ": 118511, + "ĠبدÙĩ": 118512, + "ĠأبرÙĬÙĦ": 118513, + "人æ°ijåħ±åĴĮåĽ½": 118514, + "Ġyapılır": 118515, + "ĠnaÅ¡ÃŃ": 118516, + "ãĥ¼ãĥŃ": 118517, + "Ġtạm": 118518, + "Ġhenüz": 118519, + "Ġzemi": 118520, + "Ġkháng": 118521, + "åħ¬åħ±": 118522, + "ĠèĢģ": 118523, + "ĠعÙĪØ§ÙħÙĦ": 118524, + "ÂłV": 118525, + "à¹īà¹ģà¸ģ": 118526, + "άνÏĦα": 118527, + "ĠÑĤÑĢавнÑı": 118528, + "ĠημÎŃ": 118529, + "è´¸": 118530, + "สà¸Ķ": 118531, + "ĠسÙħت": 118532, + "Ġخاک": 118533, + "ĠÑĤакий": 118534, + "Ġettik": 118535, + "ĠÏĮλ": 118536, + "Ġполи": 118537, + "Ġнож": 118538, + "غاÙĨ": 118539, + "ÙĨدÙĬ": 118540, + "ĠÄįtyÅĻi": 118541, + "ĠPhương": 118542, + "ĠÙĪØ±Ø²Ø´": 118543, + "ãģĦãģĭ": 118544, + "rvé": 118545, + "Ġतरफ": 118546, + "Ġनà¤Ĺर": 118547, + "masında": 118548, + "евиÑĩ": 118549, + "veÅĻej": 118550, + "ä¿ĿæĮģ": 118551, + "æĬĢèĥ½": 118552, + "æİ¨èįIJ": 118553, + "lâm": 118554, + "ĠÏį": 118555, + "å¢ŀéķ¿": 118556, + "ĠاصÙģÙĩ": 118557, + "ĠÐĹаконÑĥ": 118558, + "ĠÐŁÑĢез": 118559, + "Ġpodpor": 118560, + "기íĥĢ": 118561, + "ĠíıIJ": 118562, + "ĠëĭĪ": 118563, + "larınız": 118564, + "ãĥĸãĥŃ": 118565, + "ĠÑĦÑĢанÑĨÑĥз": 118566, + "ãĥĬãĥ¼": 118567, + "Ġbeled": 118568, + "ัà¸Ļวาà¸Ħม": 118569, + "ĠÙ쨱ÙĪ": 118570, + "ÑĦÑĢов": 118571, + "ĠìĿ´ë٬": 118572, + "ượu": 118573, + "Ġê³µìĭĿ": 118574, + "Ġbirden": 118575, + "Ġзелен": 118576, + "çĴĥ": 118577, + "Ġhá»ĵng": 118578, + "ĠÅ¡kola": 118579, + "ĠÑģамом": 118580, + "anlık": 118581, + "空éĹ´": 118582, + "åįĹçľģ": 118583, + "леÑĢг": 118584, + "ÑĸзнеÑģ": 118585, + "ÂłA": 118586, + "ãĢįãĤĴ": 118587, + "Ġkendine": 118588, + "ĠاÙĪÙĨ": 118589, + "ãĢĶ": 118590, + "ĠΣÏį": 118591, + "à¹Ģà¸Ħล": 118592, + "奶": 118593, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 118594, + "ĠúÄįet": 118595, + "Ñĥла": 118596, + "éĢļä¿¡": 118597, + "Ġì¦IJ": 118598, + ".čĊĊ": 118599, + "ĠÐľÐµÐ´": 118600, + "اعÙĬ": 118601, + "Ġjehož": 118602, + "ĠGüney": 118603, + "ĠÎijÏĢο": 118604, + "ĠполÑĸ": 118605, + "üme": 118606, + "hodob": 118607, + "ĠÎĿα": 118608, + "ĠØ¢ÙĦات": 118609, + "ĠpÅĻiz": 118610, + "Ġtavs": 118611, + "ĠتبÙĦÛĮ": 118612, + "ãĥ³ãĥĶ": 118613, + "خرج": 118614, + "ĠаккÑĥ": 118615, + "Ġúprav": 118616, + "ĠاØŃساس": 118617, + "ì¹´ëĿ¼": 118618, + "ımızı": 118619, + "ĠдокÑĥменÑĤ": 118620, + "ĠاصÙĦ": 118621, + "ظÙĩ": 118622, + "ĠìĿ¸ê°Ħ": 118623, + "ĠجرÛĮاÙĨ": 118624, + "Î¥ÎĿ": 118625, + "ÑĩеÑģкаÑı": 118626, + "ÙĬÙĨÙĬØ©": 118627, + "åĴ¨": 118628, + "æĹħ游": 118629, + "Ġà¸Īำà¸Ļวà¸Ļ": 118630, + "Ġанг": 118631, + "ÏħÏĩ": 118632, + "èĻ«": 118633, + "ĠÙħÙĤر": 118634, + "ĠÙħÙĪØ³ÛĮÙĤÛĮ": 118635, + "utut": 118636, + "ĠÐĽÐµ": 118637, + "ĠÐŁÑĸÑģлÑı": 118638, + "ãĤŃãĥ¼": 118639, + "ุลาà¸Ħม": 118640, + "åĩ¡": 118641, + "ÏĢοÏį": 118642, + "ĠÃĸdül": 118643, + "Ïĥκ": 118644, + "ĠÑĨÑİ": 118645, + "ÑĭваÑı": 118646, + "ï½ŀï½ŀ": 118647, + "ĠØ´ÙħاÙĦ": 118648, + "è¿ħ": 118649, + "ĠبÙĦÚ©Ùĩ": 118650, + "çİĽ": 118651, + "Ġì§ĢëĤĺ": 118652, + "ĠÙģکر": 118653, + "ĠÑģÑĤепени": 118654, + "ĠнаÑĥки": 118655, + "çī©çIJĨ": 118656, + "ÄĽle": 118657, + "ĠоÑģкÑĸлÑĮки": 118658, + "ĠкÑĥлÑĮÑĤÑĥÑĢи": 118659, + "èĢĥè¯ķ": 118660, + "Ġmateriál": 118661, + "ĠÑģÑĤвоÑĢеннÑı": 118662, + "Ġà¤ħद": 118663, + "æıIJåĩº": 118664, + "Ġè©ķ価": 118665, + "ÙĴد": 118666, + "Ġë§Įëĵ¤ìĸ´": 118667, + "duÄŁunu": 118668, + "ÙĬÙĨÙĩ": 118669, + "åĵ¦": 118670, + "оÑĩнÑĭÑħ": 118671, + "ĠÙħض": 118672, + "ismu": 118673, + "ĠÑĩай": 118674, + "ÙĪØ±ÙĪØ¨": 118675, + "Ġангл": 118676, + "oÄŁunluk": 118677, + "ĠпÑĢедпол": 118678, + "ĠÎŃÏīÏĤ": 118679, + "สà¸ĸ": 118680, + "ĠÎķλλάδα": 118681, + "ĠBilg": 118682, + "Ġبات": 118683, + "ĠÐĽÑĮвÑĸв": 118684, + "Ġyapılması": 118685, + "æ£ĢæŁ¥": 118686, + "æķ°åѦ": 118687, + "Ġ:.:": 118688, + "Ġçİ©": 118689, + "Îļα": 118690, + "à¹Ģà¸Ĺà¸Ħà¹Ĥà¸Ļà¹Ĥลย": 118691, + "ĠساختÙħاÙĨ": 118692, + "ĠìĨĮ리": 118693, + "é¼»": 118694, + "Ġsmr": 118695, + "Ġëĭ¤ìĸijíķľ": 118696, + "ĠjednánÃŃ": 118697, + "Ġservisi": 118698, + "Ġeylem": 118699, + "Ġмали": 118700, + "Ġvýhod": 118701, + "éϤäºĨ": 118702, + "ĠпоÑĢÑıдкÑĥ": 118703, + "Ġnový": 118704, + "å¤ķ": 118705, + "ĠнекоÑĤоÑĢÑĭе": 118706, + "Ġ^{}": 118707, + "γÏīγ": 118708, + "ÑĥÑĪки": 118709, + "Ġpsik": 118710, + "ĠíĶĦ리": 118711, + "شاء": 118712, + "Ġван": 118713, + "ĠسÙĥاÙĨ": 118714, + "碼": 118715, + "Ġξη": 118716, + "ĠÑĥÑĢовенÑĮ": 118717, + "ãĤµãĥ¼": 118718, + "ĠاÙĦبØŃر": 118719, + "ĠdnÃŃ": 118720, + "à¸ģารศ": 118721, + "ediÄŁi": 118722, + "Ġbelirli": 118723, + "ÙĭØĮ": 118724, + "ĠzamÄĽstnan": 118725, + "æŁ±": 118726, + "اÙģÙĬ": 118727, + "Ġhải": 118728, + "æĢĿæĥ³": 118729, + "Ġneler": 118730, + "ĠرسÙħÛĮ": 118731, + "ÑģеÑĢ": 118732, + "ãģĵãģ¨ãģ§": 118733, + "ĠZákladnÃŃ": 118734, + "лова": 118735, + "кÑĤÑĥ": 118736, + "ÙĪØ³Ùģ": 118737, + "ÑĸблÑĸ": 118738, + "ÌĤ": 118739, + "ÑĢд": 118740, + "éϳ": 118741, + "æį·": 118742, + "ĠyaÅŁayan": 118743, + "à¥ģà¤ļ": 118744, + "ÑĸÑĤÑĤÑı": 118745, + "Ġbá»ģ": 118746, + "ëĤĺëĿ¼": 118747, + "ĠмÑıÑģ": 118748, + "Ġ{[%": 118749, + "θα": 118750, + "ĠдозволÑı": 118751, + "ĠåIJĦ": 118752, + "ĠÐŁÐµÑĢв": 118753, + "ĠSaÄŁlık": 118754, + "ÑģÑĤоÑĢиÑı": 118755, + "Ġbunlar": 118756, + "Ġsá»ķ": 118757, + "़à¥į": 118758, + "ĠåĪ©": 118759, + "ĠÑģпоÑģ": 118760, + "Ġyaptır": 118761, + "Ġtưá»Ŀng": 118762, + "ÙĪÙĨØ©": 118763, + "Ġеп": 118764, + "ãģ§ãģįãģªãģĦ": 118765, + "ÙģØªÙħ": 118766, + "ĠÐĵол": 118767, + "íķĺì§Ģë§Į": 118768, + "Ġì§Ħì§ľ": 118769, + "Ġobjedn": 118770, + "ĠизменениÑı": 118771, + "女人": 118772, + "Ġплани": 118773, + "ĠFakült": 118774, + "Ġtzv": 118775, + "ĠобÑıзаÑĤелÑĮ": 118776, + "ĠблизÑĮко": 118777, + "rası": 118778, + "ĠεÏĢίÏĥηÏĤ": 118779, + "ĠÑĦакÑĤи": 118780, + "ĠÄIJặc": 118781, + "ĠAltın": 118782, + "лиÑĤ": 118783, + "ĠлÑĸÑģ": 118784, + "çī§": 118785, + "ĠпÑĥÑģÑĤ": 118786, + "ĠкомÑĸÑģ": 118787, + "ä¿Ŀéļľ": 118788, + "åħ·ä½ĵ": 118789, + "-ÑĤ": 118790, + "Ġtrhu": 118791, + "ĠâīĪ": 118792, + "ĠдекабÑĢÑı": 118793, + "ĠÑĦоÑĢмÑĭ": 118794, + "NgoÃłi": 118795, + "Ġdohod": 118796, + "رÙĬÙĥÙĬØ©": 118797, + "ĠØ¢ÙħÙĪØ²Ø´ÛĮ": 118798, + "ĠzajÃŃmav": 118799, + "Ġkatılım": 118800, + "ä¸ĺ": 118801, + "Ġkonum": 118802, + "ĠмоÑĩ": 118803, + "ãĥ³ãĥķ": 118804, + "дивидÑĥ": 118805, + "Ġäºļ": 118806, + "ĠæĴ": 118807, + "γÏģάÏĨ": 118808, + "ãĥIJãĤ¹": 118809, + "ĠпÑĥнк": 118810, + "ĠBirleÅŁik": 118811, + "Ġquen": 118812, + "Ġвказ": 118813, + "à¥ĩशà¤ķ": 118814, + "ĠYunan": 118815, + "ãģłãģ¨": 118816, + "Û±Û¹Û·": 118817, + "áty": 118818, + "ĠÙĪØµ": 118819, + "ĠнегаÑĤив": 118820, + "ãģ¤ãģ®": 118821, + "ĠåĬ¨": 118822, + "ãĥįãĥĥãĥĪ": 118823, + "ĠдÑĸй": 118824, + "ĠbaÅŁÄ±nda": 118825, + "Ġtrưng": 118826, + "Ġmakin": 118827, + "ĠæĦĽ": 118828, + "меÑĩ": 118829, + "Ġè¿ij": 118830, + "ÙĤدر": 118831, + "ĠاستاÙĨد": 118832, + "ĠinformacÃŃ": 118833, + "ारà¤ķ": 118834, + "è¬Ŀ": 118835, + "ÑĢабаÑĤ": 118836, + "ĠçŃĶ": 118837, + "Ġèĩ³": 118838, + "ĠполÑĮ": 118839, + "ĠÙĩÙĨر": 118840, + "ëĮĢë¹Ħ": 118841, + "ĠخارجÛĮ": 118842, + "ract": 118843, + "ãĢĤãģĵãĤĮ": 118844, + "ĠØ´ÙĪØ±Ø§ÛĮ": 118845, + "ленно": 118846, + "Ġhisset": 118847, + "ĠcÃłi": 118848, + "ĠÑĦоÑĤо": 118849, + "æģĴ": 118850, + "ĠмедиÑĨин": 118851, + "ÑģÑĤвÑĸ": 118852, + "ĠاÙĦعÙĦ": 118853, + "ĠпиÑģÑĮмен": 118854, + "ãĢĤãģ¾ãģŁ": 118855, + "ĠvlastnÄĽ": 118856, + "Ġпода": 118857, + "Ïģοι": 118858, + "ĠìĦĿ": 118859, + "ĠìĿ¼ìĿ´": 118860, + "ĠìĽĮ": 118861, + "окÑģи": 118862, + "Ġosoby": 118863, + "ÐŁÐ¾Ñģле": 118864, + "ĠÑĸÑģÑĤоÑĢÑĸÑĹ": 118865, + "عÙĦÙī": 118866, + "нка": 118867, + "تÙħبر": 118868, + "à¥ĩहर": 118869, + "ĠJana": 118870, + "ÙĦÙĬات": 118871, + "ĠмаÑĢÑĤа": 118872, + "ĠÐļиÑĶ": 118873, + "ĠÑĢобоÑĤÑĥ": 118874, + "Ġnhấn": 118875, + "иÑģлов": 118876, + "ëŁŃ": 118877, + "Ġodv": 118878, + "ĠTá»īnh": 118879, + "âĢľê·¸": 118880, + "ãģ»ãģĨ": 118881, + "é²ľ": 118882, + "меÑĨÑĮ": 118883, + "าศาสà¸ķร": 118884, + "à¥ģà¤ĵ": 118885, + "ิà¸Ļà¸Ĺ": 118886, + "mada": 118887, + "زاÙħ": 118888, + "ĠÙĥبÙĬر": 118889, + "å®ŀæĸ½": 118890, + "zeÅĪ": 118891, + "Ġlái": 118892, + "Ïĥμα": 118893, + "اسات": 118894, + "ÑĦÑĤ": 118895, + "è°±": 118896, + "çĮľ": 118897, + "ĠprobÃŃ": 118898, + "æľĢè¿ij": 118899, + "ÑĢад": 118900, + "ãĤ½ãĥ³": 118901, + "Ġклад": 118902, + "à¥ľà¤ķ": 118903, + "év": 118904, + "ลาย": 118905, + "èİİ": 118906, + "ĠμÎŃÏĩÏģι": 118907, + "ĠкÑĥÑģ": 118908, + "ĠíĻĺê²½": 118909, + "ÑĩоÑĹ": 118910, + "åıĺåĮĸ": 118911, + "ĠبتÙĪØ§ÙĨ": 118912, + "Ġtắt": 118913, + "Ġgösteren": 118914, + "алÑİ": 118915, + "Ġкоманди": 118916, + "Ġ컨": 118917, + "Ñĥнд": 118918, + "ĠجÙĦÙĪ": 118919, + "åŃIJçļĦ": 118920, + "ĠÑģб": 118921, + "ĠÐłÐ°Ñģ": 118922, + "PCP": 118923, + "ĠCumhurbaÅŁ": 118924, + "одаÑĤелÑĮ": 118925, + "ÃŃsto": 118926, + "Ġoznám": 118927, + "ãĥ¼ãĥĭ": 118928, + "Ġokuy": 118929, + "ophy": 118930, + "าà¸Ļà¸Ħร": 118931, + "ĠÎķθν": 118932, + "ayım": 118933, + "ÙİØ£": 118934, + "æİ¡": 118935, + "Ġfunkce": 118936, + "æļĸ": 118937, + "طار": 118938, + "ĠÐĿаг": 118939, + "Ġä¸ĩåĨĨ": 118940, + "ĠíĴį": 118941, + "Ġä½ı": 118942, + "Ġï¼İ": 118943, + "ÑĭваÑİÑĤÑģÑı": 118944, + "ĠPla": 118945, + "اÙĬÙĦ": 118946, + "Ġ무ìĹĩ": 118947, + "ĠконеÑĩно": 118948, + "км": 118949, + "à¤Ĥपर": 118950, + "Ġìłķë¶Ģ": 118951, + "ĠëĤ´ëł¤": 118952, + "ãĤ°ãĥ«": 118953, + "çģ°": 118954, + "Ġcyk": 118955, + "ĠжелÑĥд": 118956, + "ĠëĨĴìĿĢ": 118957, + "çĶŁåij½": 118958, + "æµ´": 118959, + "ĠartÄ±ÅŁ": 118960, + "ĠÐĩ": 118961, + "ï¼²": 118962, + "ekim": 118963, + "ĠÑĦедеÑĢа": 118964, + "ĠвеÑĢеÑģнÑı": 118965, + "ниÑĤе": 118966, + "ĠÄ°ÅŁte": 118967, + "ĠÙĪØ¶Ø¹ÛĮت": 118968, + "ãģķãģ¾": 118969, + "ĠtÅĻetÃŃ": 118970, + "uluÄŁ": 118971, + "ĠCumhuriyet": 118972, + "ä¼Ł": 118973, + "Ġë§Ŀ": 118974, + "Ġvermek": 118975, + "Ġnalez": 118976, + "çĵ¶": 118977, + "ĠdiÅŁ": 118978, + "ĠHá»ĵng": 118979, + "غÙĬرة": 118980, + "å©Ĩ": 118981, + "нив": 118982, + "Ġrút": 118983, + "'nda": 118984, + "Ġhroz": 118985, + "à¥īप": 118986, + "Ġзаконом": 118987, + "Ġjednu": 118988, + "ĠKadın": 118989, + "indir": 118990, + "سازÛĮ": 118991, + "åĮºåŁŁ": 118992, + "ĠkonuÅŁtu": 118993, + "ĠزÙĨد": 118994, + "ाĊĊ": 118995, + "ĠÐIJз": 118996, + "à¸ĩà¸Ĥà¸Ńà¸ĩ": 118997, + "ĠÑģвойÑģÑĤва": 118998, + "ĠìŀijíĴĪ": 118999, + "пеки": 119000, + "Ġå°±": 119001, + "евого": 119002, + "ĠtaÅŁÄ±y": 119003, + "ĠÙħÙĨØ·ÙĤØ©": 119004, + "ĠÃĩocuk": 119005, + "Û²Û·": 119006, + "ĠÏĥÏħμÏĢ": 119007, + "é£Łåĵģ": 119008, + "há": 119009, + "O": 119010, + "ÙĦÙħÙĩ": 119011, + "ãģ¨ãģªãģ£ãģŁ": 119012, + "оÑĢÑĸ": 119013, + "°}": 119014, + "ĠtaÅŁÄ±n": 119015, + "çŁ¿": 119016, + "ĠÑĩаÑģÑĤини": 119017, + "ĠدÙĬسÙħبر": 119018, + "Ġèī¯": 119019, + "stÅĻÃŃ": 119020, + "ĠÑĨик": 119021, + "âĢķâĢķâĢķâĢķ": 119022, + "Ġİngiltere": 119023, + "ĠÑģÑĤÑĢаÑĤег": 119024, + "ÃĦŸ": 119025, + "иÑĩного": 119026, + "ÃŃrk": 119027, + "ĠÎijÏģ": 119028, + "!âĢľĊĊ": 119029, + "Ġ깨": 119030, + "à¥ģà¤Ĩत": 119031, + "ĠدÙĨÛĮا": 119032, + "lÃŃn": 119033, + "Ġà¤ķड": 119034, + "ĠÙħبت": 119035, + "емÑĭÑħ": 119036, + "оби": 119037, + "ยà¸Ļà¸ķ": 119038, + "à¤Ĥधन": 119039, + "ÚĨÛĮ": 119040, + "ĠçŁ¥": 119041, + "ĠXuân": 119042, + "adaki": 119043, + "Ġorta": 119044, + "æł¹æľ¬": 119045, + "åħ±åIJĮ": 119046, + "нений": 119047, + "بÙĬرة": 119048, + "çŃĭ": 119049, + "ïºĶ": 119050, + "âĢĮÙĩاÙĬ": 119051, + "Ġödeme": 119052, + "ĠØ¢ÙĨÚĨÙĩ": 119053, + "ĠзаÑıви": 119054, + "ĠÙĨÙĤØ´Ùĩ": 119055, + "Ġç³»": 119056, + "à¥ĭ।": 119057, + "Ġì§Ģìłķ": 119058, + "Ġinsp": 119059, + "ĠÑĤен": 119060, + "Ġتط": 119061, + "Ġquảng": 119062, + "åī£": 119063, + "ãģıãģ®": 119064, + "ĠÑĨим": 119065, + "kovi": 119066, + "iyah": 119067, + "ĠëIJľëĭ¤": 119068, + "صÙĩ": 119069, + "ĠÄiju": 119070, + "Ġsuá»ijt": 119071, + "ıma": 119072, + "ì§Ģê³ł": 119073, + "Ìĥ": 119074, + "à¸ļาย": 119075, + "ĠCertif": 119076, + "ĠÑĥÑģÑĸÑħ": 119077, + "à¸ķะว": 119078, + "είÏĦε": 119079, + "Ġč": 119080, + "ĠможливÑĸÑģÑĤÑĮ": 119081, + "Ġ-âĢIJ": 119082, + "Ġíĺ¹": 119083, + "ìĤ¬ì§Ħ": 119084, + "ĠданиÑħ": 119085, + "Ġzaháj": 119086, + "주ëĬĶ": 119087, + "Ġгид": 119088, + "niž": 119089, + "Ġ^{°}": 119090, + "Ġkro": 119091, + "Äįen": 119092, + "ÏĨι": 119093, + "ımızda": 119094, + "Ġæ¹ĸ": 119095, + "ĠповÑĢежд": 119096, + "Ġì¡´ìŀ¬": 119097, + "à¸Ļาà¸Ļ": 119098, + "μÎŃνοÏĤ": 119099, + "æ½ľ": 119100, + "ï¼Į使": 119101, + "Ġdosp": 119102, + "Ġliá»ģn": 119103, + "ัà¸ļà¸Ħวาม": 119104, + "ĠÑĢабоÑĤе": 119105, + "ĠмайбÑĥÑĤ": 119106, + "à¹Ģà¸ģษ": 119107, + "BaÅŁ": 119108, + "ĠæĿ±äº¬": 119109, + "наÑĩала": 119110, + "δει": 119111, + "à¥Īप": 119112, + "ÑĸмÑĸ": 119113, + "Ġfizik": 119114, + "วล": 119115, + "ä¼į": 119116, + "Ġà¸Ĭà¸Ļะ": 119117, + "'ÑıÑĤ": 119118, + "нил": 119119, + "инов": 119120, + "ĠÄijoán": 119121, + "รวà¸Ī": 119122, + "fet": 119123, + "à¹Įà¹Ĥ": 119124, + "ĠмаÑĤи": 119125, + "é¨İ": 119126, + "ÐļТ": 119127, + "à¹Ģสà¸Ļà¸Ń": 119128, + "Ġмав": 119129, + "lıģına": 119130, + "ĠпоÑĩина": 119131, + "ูà¸ķร": 119132, + "ÑĨеÑĢ": 119133, + "ujete": 119134, + "Ġtahmin": 119135, + "Ġвимог": 119136, + "à¸²à¸Ł": 119137, + "едж": 119138, + "ÏĦεÏį": 119139, + "adla": 119140, + "ĠÄijương": 119141, + "ĠداستاÙĨ": 119142, + "Ġbasın": 119143, + "ĠÑħв": 119144, + "Ġreak": 119145, + "ĠоÑĤмеÑĤ": 119146, + "æ³¥": 119147, + "Ġmáte": 119148, + "Ġzorun": 119149, + "ã썿ĢĿãģĨ": 119150, + "Ġدرجة": 119151, + "ĠвÑĸдÑģÑĥÑĤ": 119152, + "ĠعاÙħÙĦ": 119153, + "è͵": 119154, + "Ġsonraki": 119155, + "Ġmohli": 119156, + "иваеÑĤ": 119157, + "ĠпÑĸдÑģÑĤав": 119158, + "Ġostrov": 119159, + "ानव": 119160, + "âĢŀP": 119161, + "ĠвизнаÑĩа": 119162, + "ĠpravdÄĽpodob": 119163, + "Ġzaz": 119164, + "ìĿ´ë¥¼": 119165, + "ĠджеÑĢ": 119166, + "ĠÐłÐ°Ð´": 119167, + "ĠÑģеÑĢÑĮез": 119168, + "Ġдем": 119169, + "ÏĢή": 119170, + "ĠÐĦвÑĢоп": 119171, + "ĠÄįeské": 119172, + "ï¾ı": 119173, + "ĠØŃÙĬ": 119174, + "ì¼ĢìĿ´": 119175, + "ĠØ®ÙĪÙĨ": 119176, + "ÂłL": 119177, + "ãģĦãģ«": 119178, + "изнеÑģ": 119179, + "ĠÙħÙĤاÙħ": 119180, + "ĠاÙĦØŃÙĦ": 119181, + "ëĨį": 119182, + "ĠØ¢ÛĮا": 119183, + "翼": 119184, + "ï¼½": 119185, + "æ¸IJ": 119186, + "ливÑĸ": 119187, + "ãģĦãģ¦ãģĦãĤĭ": 119188, + "ĠÎijÎł": 119189, + "ĠиÑģполÑĮзÑĥеÑĤÑģÑı": 119190, + "Ġmát": 119191, + "Ġμεγά": 119192, + "ëħ¼": 119193, + "æµ·éģĵ": 119194, + "ĠÙħØ´Ú©ÙĦات": 119195, + "Ñĩна": 119196, + "';';": 119197, + "Ġμία": 119198, + "ÏģÏİν": 119199, + "Ġbyste": 119200, + "ĠÑįлекÑĤÑĢи": 119201, + "ĠYardım": 119202, + "Ġhát": 119203, + "ĠÐĶеÑĢжав": 119204, + ".С": 119205, + "Ġorada": 119206, + "Ġalanı": 119207, + "åľ°åŁŁ": 119208, + "ĠدÙĩÙĨد": 119209, + "менÑĪ": 119210, + "ĠоÑĢганов": 119211, + "Ġعص": 119212, + "ูà¸ĩส": 119213, + "Ġشعر": 119214, + "Ġìĸ»": 119215, + "Ġάλλ": 119216, + "Ġgói": 119217, + "ĠÙĨاØŃ": 119218, + "å¼ĺ": 119219, + "à¥įथल": 119220, + "ilim": 119221, + "ëIJĺì§Ģ": 119222, + "ĠконÑĨе": 119223, + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł": 119224, + "Ġì¤Ģë¹Ħ": 119225, + "ĠostatnÃŃ": 119226, + "Ġvlády": 119227, + "ĠÑģобиÑĢа": 119228, + "ĠìĹŃìĤ¬": 119229, + "à¹ģà¸ģรม": 119230, + ".ï¼ı": 119231, + "ÙıÙĪÙĨ": 119232, + "پس": 119233, + "ĠWikip": 119234, + "Ġæ¾": 119235, + "ĠжаÑĢ": 119236, + "容æĺĵ": 119237, + "ĠprostÅĻednictvÃŃm": 119238, + "Ġženy": 119239, + "Ġèı²å¾ĭ宾çͳåįļ": 119240, + "аÑİÑĤÑģÑı": 119241, + "Ġmiêu": 119242, + "ĠpenÃŃze": 119243, + "διά": 119244, + "oldur": 119245, + "ĠпÑĢимеÑĢно": 119246, + "ĠìŀĪê³ł": 119247, + "à¸ĩà¸Ńย": 119248, + "ковий": 119249, + ".ÎŁ": 119250, + "à¹ĥà¸Ħร": 119251, + "çĭł": 119252, + "ĠÐŁÑĸв": 119253, + "æĶ¹éĿ©": 119254, + "ĠÐĿаÑģеление": 119255, + "Å¡etÅĻ": 119256, + "ÙĴب": 119257, + "ĠâĶĢ": 119258, + "غÙĬÙĦ": 119259, + "ĠдÑĸÑıлÑĮнÑĸÑģÑĤÑĮ": 119260, + "ĠÙĦÙĬس": 119261, + "Ġìĭľìŀ¥": 119262, + "ãĥŁãĥ¥": 119263, + "ĠÚ©ÙĪØª": 119264, + "ĠÎĵι": 119265, + "ิà¹Ģว": 119266, + "ektor": 119267, + "ĠбÑĥдÑĥ": 119268, + "новаж": 119269, + "ÑīаеÑĤÑģÑı": 119270, + "Ġngôn": 119271, + "ĠvÄĽc": 119272, + "å¾IJ": 119273, + "à¸Ńà¹Ģมร": 119274, + "ัà¸įà¸Ĭ": 119275, + "ĠиÑģполÑĮзÑĥÑİÑĤ": 119276, + "rubu": 119277, + "Ġnhá»±a": 119278, + "ãģĮãģĬ": 119279, + "ĠÐĵаÑĢ": 119280, + "оÑĢе": 119281, + "ĠзолоÑĤ": 119282, + "æŁ³": 119283, + "ĠÙĬØ´": 119284, + "ĠповиннÑĸ": 119285, + "اÙĤتص": 119286, + "ÙĦØŃ": 119287, + "ĠокÑĤÑıбÑĢÑı": 119288, + "ĠnÄĽkdy": 119289, + "ĠобÑĢа": 119290, + "ستگÛĮ": 119291, + "符åIJĪ": 119292, + "Ġthiá»ĥu": 119293, + "æĺ¯ä»Ģä¹Ī": 119294, + "Ġrozs": 119295, + "ì½ľê±¸": 119296, + "ĠкаÑĦ": 119297, + "åIJĮæŃ¥": 119298, + "ì¼ĵ": 119299, + "ÏĢÏĦÏħ": 119300, + "à¸łà¸²à¸¢à¹ĥà¸Ļ": 119301, + "ιÏĥÏĦή": 119302, + "ĠدÙĪÙĦار": 119303, + "ĠÙħاÙĬÙĪ": 119304, + "ĠpeÄį": 119305, + "ัà¸ļม": 119306, + "ÎĻÎĶ": 119307, + "ıydı": 119308, + "ัà¸ģà¸Ĺ": 119309, + "à¸Ľà¸£à¸°à¸ĸม": 119310, + "και": 119311, + "Ġprodej": 119312, + "ĠиÑİлÑı": 119313, + "ĠvÅ©": 119314, + "驱": 119315, + "ĠhvÄĽ": 119316, + "æĥ³è¦ģ": 119317, + "ç¯Ħ": 119318, + "çak": 119319, + "ĠмÑıг": 119320, + "ımın": 119321, + "Ġdispozici": 119322, + "Ġukaz": 119323, + "racak": 119324, + "Ġболезни": 119325, + "วà¹Ĥม": 119326, + "Ġзел": 119327, + "ĠÐĴики": 119328, + "ĠÐłÐ¾Ð´": 119329, + "ูà¸ģà¸Ħ": 119330, + "íij¸": 119331, + "Ġthải": 119332, + "Ġbaģımsız": 119333, + "ĠÑĢоÑģÑģий": 119334, + "ĠÐļам": 119335, + "ĠиÑģполÑĮзованиÑı": 119336, + "ĠØŃذ": 119337, + "³³³³³³³³³": 119338, + "ĠاÙĨتÙĤاÙĦ": 119339, + "ĠабÑģолÑİÑĤ": 119340, + "ĠÄ±ÅŁÄ±k": 119341, + "ÏĦογÏģαÏĨ": 119342, + "ĠболÑĮÑĪой": 119343, + "Ġعبارت": 119344, + "ÃŃž": 119345, + "Ġدرست": 119346, + "ĠÑģлово": 119347, + "à¥ĪĊ": 119348, + "بÙĪØ¨": 119349, + "ĠÐĴоÑĤ": 119350, + "วà¹Ħà¸Ľ": 119351, + "Ġbilinen": 119352, + "ĠÙĤÙĬ": 119353, + "Ġbunların": 119354, + "Ùijت": 119355, + "Ġbasit": 119356, + "릿": 119357, + "ائرة": 119358, + "Ġpů": 119359, + "ĠedilmiÅŁ": 119360, + "Ġä½IJ": 119361, + "ĠYönetim": 119362, + "ÙħÛĮر": 119363, + "Ġspou": 119364, + "æ·±åľ³": 119365, + "ĠвзаÑĶм": 119366, + "ÎĻÎĽ": 119367, + "Ðĥ": 119368, + "ĠдеÑĢжавноÑĹ": 119369, + "Ġmrt": 119370, + "ĠDemir": 119371, + "é»İ": 119372, + "ĠÑĢегÑĥлÑıÑĢ": 119373, + "Ġникогда": 119374, + "å¼¾": 119375, + "à¥īड": 119376, + "Ġглаз": 119377, + "ĠÙħÛĮÚ©ÙĨ": 119378, + "éĻIJå®ļ": 119379, + "Ġнавк": 119380, + "ĠподÑĤ": 119381, + "ĠتصÙĪÛĮر": 119382, + "ĠاÙĦØŃدÙĬØ«": 119383, + "ĠdoÅ¡lo": 119384, + "нÑİÑİ": 119385, + "ĠÑģÑħод": 119386, + "Ø·ÙĤØ©": 119387, + "ĠÑģенÑĤÑıбÑĢÑı": 119388, + "ç®Ĭ": 119389, + "à¸ģารà¹ģà¸Ĥ": 119390, + "ázd": 119391, + "ÑĶÑĤе": 119392, + "ĠΣε": 119393, + "ĠÙĦÙĥÙĦ": 119394, + "åIJįåŃĹ": 119395, + "اÙĨÛĮا": 119396, + "Ġcins": 119397, + "기ìĹħ": 119398, + "ĠéŁ³": 119399, + "éłĥ": 119400, + "ยาย": 119401, + "ìļķ": 119402, + "ĠvÃŃtÄĽz": 119403, + "à¥įरब": 119404, + "ĠشرÙĤÛĮ": 119405, + "ĠbezpeÄįnost": 119406, + "Ġçerçev": 119407, + "Ġë§Ľ": 119408, + "cky": 119409, + "ĵ¨": 119410, + "ĠÑĥмоваÑħ": 119411, + "лиÑħ": 119412, + "meniz": 119413, + "ĠبگÛĮر": 119414, + "ÙĨÙī": 119415, + "Ġà¸ģารà¹ģà¸Ĥ": 119416, + "ιÏĥε": 119417, + "â̳E": 119418, + "Ġdöneminde": 119419, + "리카": 119420, + "Ġåΰ": 119421, + "Ġhukuk": 119422, + "аÑĤоÑĢа": 119423, + "ĠاÙĦعÙĨ": 119424, + "ïºĺ": 119425, + "ünüz": 119426, + "ÑģоÑĤ": 119427, + "ุษ": 119428, + "Ġdương": 119429, + "ovny": 119430, + "ĠÑĦоÑĢма": 119431, + "ãģĹãģ®": 119432, + "زÙĬز": 119433, + "ĠاÙĦÙĨاس": 119434, + "ĠÑĩим": 119435, + "大人": 119436, + "Ú¯ÙĬ": 119437, + "ĠÐĵоÑģп": 119438, + "é¢Ĩ导": 119439, + "Ġninh": 119440, + "Ġราà¸Ħา": 119441, + "ÙĤاء": 119442, + "ìī¬": 119443, + "ĠìĿ´ìłĦ": 119444, + "ĠÃ¶ÄŁretmen": 119445, + "ĠÑĨвеÑĤа": 119446, + "енноÑģÑĤÑĮ": 119447, + "大ãģį": 119448, + "ĠмиÑģÑĤеÑĨÑĤ": 119449, + "رÙĪØª": 119450, + "poÅĪ": 119451, + "ĠÅŀirket": 119452, + "ĠкÑĢаÑģив": 119453, + "ĠÑĢеÑģÑĥÑĢÑģ": 119454, + "ä¹¾": 119455, + "ĠÙģÙĩ": 119456, + "ĠYÃĸ": 119457, + "èĬ³": 119458, + "μÏīÏĤ": 119459, + "ÄĽji": 119460, + "Ġвлаж": 119461, + "ĠÑĥвели": 119462, + "اذا": 119463, + "ãĢĤå¦Ĥæŀľ": 119464, + "ĠпÑĢиÑģÑĥÑĤÑģÑĤв": 119465, + "ĠẤn": 119466, + "æĢĸ": 119467, + "ĠÐľÐµÑĤ": 119468, + "Ġjedna": 119469, + "Ġcục": 119470, + "ĠاÙĨتشار": 119471, + "ĠзокÑĢема": 119472, + "иÑĩеÑģки": 119473, + "ĠкÑĢаÑĹни": 119474, + "иÑĢÑĥ": 119475, + "ĠÑĸнÑĤеÑĢ": 119476, + "Ġаналог": 119477, + "ÑĽ": 119478, + "ีà¸ĭ": 119479, + "нÑĥли": 119480, + "ĠNinh": 119481, + "еÑĢаÑĤоÑĢ": 119482, + "Ġruce": 119483, + "ĠÑĪкÑĸ": 119484, + "ترÙĨت": 119485, + "Ġsonrası": 119486, + "Ġæį": 119487, + "ÑĨенÑĤÑĢа": 119488, + "Ġà¸Ńำà¹Ģà¸ł": 119489, + "Ø·ÙĬ": 119490, + "ï¼Įå½ĵ": 119491, + "ĠÑĤÑĢеÑħ": 119492, + "ÂłH": 119493, + "æ´ª": 119494, + "ãĥ³ãĥĦ": 119495, + "ĠвÑĸдповÑĸдалÑĮ": 119496, + "âĢĻdaki": 119497, + "áÅĻi": 119498, + "ĠpÅĻem": 119499, + "tuk": 119500, + "ĠÙ쨱ÙħÙĪØ¯": 119501, + "ĠìĿ¸ì¦Ŀ": 119502, + "สำà¸Ļ": 119503, + "ìĥģìĿĺ": 119504, + "ÅĻÃŃm": 119505, + "澤": 119506, + "ĠÑĢей": 119507, + "ĠлÑİбой": 119508, + "ujte": 119509, + "ë³µì§Ģ": 119510, + "Ġدرس": 119511, + "ĠÐĴлади": 119512, + "ĠÑģвоим": 119513, + "ĠìĿ¸íĦ°ëĦ·": 119514, + "è±Ĭ": 119515, + "Ġналог": 119516, + "ãĤĪãģ³": 119517, + "Ġخاطر": 119518, + "ĠìŀħëĭĪëĭ¤": 119519, + "ãĢĤãģĹãģĭãģĹ": 119520, + "лаг": 119521, + "å°ĸ": 119522, + "ëĭ¥": 119523, + "ìĬ¤ëĬĶ": 119524, + "ìĭłì²Ń": 119525, + "ãĥĩãĥ¼ãĤ¿": 119526, + "ĠÑĥÑĢовнÑı": 119527, + "Ġ무ìĬ¨": 119528, + "ĠاÙĦأرض": 119529, + "à¹īà¸ķ": 119530, + "Ỽt": 119531, + "ĠÙĨÛĮرÙĪ": 119532, + "墨": 119533, + "ãĤ¶ãĥ¼": 119534, + "ruba": 119535, + "ĠÙĨشدÙĩ": 119536, + "илÑı": 119537, + "acÃŃm": 119538, + "ãĥ©ãĤ¯": 119539, + "XH": 119540, + "Ġسرد": 119541, + "Ġदस": 119542, + "tember": 119543, + "ĠDoÄŁum": 119544, + "ĠпÑĢоÑĢ": 119545, + "θοÏĤ": 119546, + "ĠiÅŁe": 119547, + "à¸Ńà¸Ł": 119548, + "лаÑĪ": 119549, + "اصÙĦÙĩ": 119550, + "livÄĽ": 119551, + "ë¶Ģë¶Ħ": 119552, + "нак": 119553, + "åįģä¸ī": 119554, + "สาห": 119555, + "à¸Ľà¸£à¸°à¹Ģà¸Ĺศà¹Ħà¸Ĺย": 119556, + "ãĤŃãĥ³ãĤ°": 119557, + "ĠмеÑĤоÑİ": 119558, + "Ġkullanarak": 119559, + "âij¡": 119560, + "ÛĮزات": 119561, + "ĠÙħÙĪØ¨Ø§ÛĮÙĦ": 119562, + "ĠзнаÑĩиÑĤ": 119563, + "Ġorganizace": 119564, + "ÑĢии": 119565, + "ovna": 119566, + "Ġê²½ìłľ": 119567, + "ãĢģå½¼": 119568, + "Ġमस": 119569, + "Ġà¹Ĥà¸Ľà¸£": 119570, + "LARI": 119571, + "æĩĤ": 119572, + "Ġва": 119573, + "ĠÙĥÙĨت": 119574, + "ĠÑĢабоÑĤа": 119575, + "ÂłĠÂłĠÂł": 119576, + "好äºĨ": 119577, + "ĠzamÄĽstn": 119578, + "женÑĮ": 119579, + "Ġukon": 119580, + "nÄĽné": 119581, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 119582, + "ĠاÙĦخاصة": 119583, + "ĠÄįasu": 119584, + "å°ı说": 119585, + "ĠØŃرکت": 119586, + "æijĦ": 119587, + "ÏĩÏī": 119588, + "ĠÑģвеж": 119589, + "æĸ°éĹ»": 119590, + "Ġìĭ±": 119591, + "ĠeÄŁer": 119592, + "Ġsituace": 119593, + "Ġç·¨": 119594, + "fik": 119595, + "ë§Īëĭ¤": 119596, + "ÎķÎļ": 119597, + "Ġê°ľìµľ": 119598, + "ĠcÃł": 119599, + "ادث": 119600, + "Ġsayıda": 119601, + "ĠØ£Ù쨶ÙĦ": 119602, + "æ³ķéĻ¢": 119603, + "Ġ.,": 119604, + "ĠThương": 119605, + "ÏģÏĮÏĤ": 119606, + "ãģĹãĤĪãģĨ": 119607, + "Çİ": 119608, + "æij¸": 119609, + "Ġéϳ": 119610, + "¥IJ": 119611, + "ฤà¸Ķ": 119612, + "Ġgiảng": 119613, + "ĠлÑİбов": 119614, + "Ġekran": 119615, + "опиÑģ": 119616, + "еждÑĥ": 119617, + "Ġназва": 119618, + "æĭĵ": 119619, + "ıf": 119620, + "à¹Īà¸ģ": 119621, + "иÑĩнÑĸ": 119622, + "Ġê³Ħíļį": 119623, + "à¸łà¸²à¸Ħม": 119624, + "Ġاپ": 119625, + "리ìĿĺ": 119626, + "ãģ§ãģĻãģĮ": 119627, + "Ġkonci": 119628, + "ĠکارخاÙĨÙĩ": 119629, + "Ġä½ķ": 119630, + "ĠÑĤва": 119631, + "ĠÐŁÐ¾ÑģÑĤ": 119632, + "ĠапÑĢелÑı": 119633, + "ĠاÙĦعراÙĤ": 119634, + "ä¸Ńåįİ": 119635, + "à¹ĩà¸Ńà¸ģ": 119636, + "à¥įतà¤ķ": 119637, + "Ġzájem": 119638, + "ĠدرجÙĩ": 119639, + "Ġà¤¬à¥ľ": 119640, + "ĠÑģÑĤÑĢан": 119641, + "èŃ¦å¯Ł": 119642, + "ĠyerleÅŁtir": 119643, + "ĠVÅ©": 119644, + "ç¾İåħĥ": 119645, + "Ġì¡°ê¸Ī": 119646, + "Ġรà¸Ńà¸ĩ": 119647, + "Ġakadem": 119648, + "à¸Ħà¸ĵะ": 119649, + "Ġpozit": 119650, + "ĠkoneÄį": 119651, + "è°ĥæŁ¥": 119652, + "Ġãģĭ": 119653, + "ĠÄįervence": 119654, + "ĠOdkazy": 119655, + "ĠëıĦìĭľ": 119656, + "ัสà¸Ķ": 119657, + "Ġgái": 119658, + "ĠÐłÐ¾Ð±": 119659, + "ĠбоÑı": 119660, + "æī©": 119661, + "å¼Ģå±ķ": 119662, + "anik": 119663, + "Ġvyž": 119664, + "ĠbaÅŁlay": 119665, + "ĠbakÄ±ÅŁ": 119666, + "ekce": 119667, + "ÑģÑĤика": 119668, + "еÑĢаÑĤÑĥÑĢа": 119669, + "Ġë¶Ħë¥ĺ": 119670, + "ĠPoÄįet": 119671, + "odáÅĻ": 119672, + "ëĭĺìĿĺ": 119673, + "Ġklid": 119674, + "Û²Û¹": 119675, + "ĠÚĨÛĮز": 119676, + "mür": 119677, + "Ġsứ": 119678, + "ÙĬاÙĨØ©": 119679, + "åĬ±": 119680, + "Ġoku": 119681, + "Ġводи": 119682, + "ĠزÛĮرا": 119683, + "大åĪ©": 119684, + "ĠÙĦÛĮÙĨÚ©": 119685, + "ĠÙĬجب": 119686, + "ÙħÛĮÙĦ": 119687, + "ĠÏĥÏĦÏģα": 119688, + "æĻĵ": 119689, + "ิสà¸ķ": 119690, + "ĠÅŁiddet": 119691, + "ĠÑĢекоменда": 119692, + "Ġpožadav": 119693, + "ĠпÑĸÑģ": 119694, + "åħ¬å¼ı": 119695, + "ĠÚ¯ÛĮرÛĮ": 119696, + "кÑĤа": 119697, + "ĠÙħÙĨاطÙĤ": 119698, + "Ġfirmy": 119699, + "Ġà¹Ħà¸Ľ": 119700, + "ĠÎŃÏģγ": 119701, + "å¿«éĢŁ": 119702, + "ãģĮãģªãģĦ": 119703, + "неÑģÑĤи": 119704, + "Ġç²¾": 119705, + "ÑĢади": 119706, + "ãĤĴãģĭ": 119707, + "ﺪ": 119708, + "kynÄĽ": 119709, + "Ġहत": 119710, + "tak": 119711, + "ĠÙĬÙĪÙĨÙĬÙĪ": 119712, + "Ã¶ÄŁ": 119713, + "ĠÑĢÑĥк": 119714, + "åľĭéļĽ": 119715, + "ÑİÑģÑĮ": 119716, + "Ġдавно": 119717, + "Ġpopis": 119718, + "ĠBİL": 119719, + "ĠÙĨÙĤد": 119720, + "ĠÑģпож": 119721, + "ÑĨионнÑĭÑħ": 119722, + "ĠÑĪп": 119723, + "ÑĥÑİÑīиÑħ": 119724, + "ĠвоздÑĥÑħ": 119725, + "ÑĤие": 119726, + "ĠUž": 119727, + "ÏĮδ": 119728, + "à¸ģราà¸Ħม": 119729, + "Ġalanında": 119730, + "Ġsắt": 119731, + "ãĥIJãĤ¤": 119732, + "NgÃły": 119733, + "Ġë¹Į": 119734, + "ï¼īãģ¯": 119735, + "Ġä¿¡": 119736, + "ÐķС": 119737, + "ĠTato": 119738, + "Ġúnora": 119739, + "erap": 119740, + "Äł": 119741, + "ĠTáºŃp": 119742, + "Ġкомпании": 119743, + "ãĥ©ãĤ¤ãĥĪ": 119744, + "éľĢæ±Ĥ": 119745, + "ĠتÙĪÙĤ": 119746, + "âĢĻâĢĻ": 119747, + "ëŀįëĭĪëĭ¤": 119748, + "ĠквÑĸÑĤнÑı": 119749, + "Ġoyuncu": 119750, + "ÂĢÂĢÂĢÂĢÂĢÂĢÂĢÂĢ": 119751, + "åĨĬ": 119752, + "ĠyapmÄ±ÅŁ": 119753, + "ัà¸ĩà¹Ħม": 119754, + "ĠзапаÑħ": 119755, + "ála": 119756, + "ĠÑĤеÑħниÑĩеÑģ": 119757, + "ĠØŃص": 119758, + "รà¸Ķ": 119759, + "å¼Ħ": 119760, + "ĠÚ¯ÛĮاÙĩ": 119761, + "اÙĩرة": 119762, + "Ġà¤ıड": 119763, + "нимаеÑĤ": 119764, + "ادÙĨ": 119765, + "ÎľÎij": 119766, + "Ġ社": 119767, + "аÑĢÑĩ": 119768, + "تز": 119769, + "润": 119770, + "inizin": 119771, + "Ġbeyaz": 119772, + "ĠبÙĪÙĦ": 119773, + "åĿ¡": 119774, + "ãģ®ãĤĪãģĨãģ«": 119775, + "Ġyaptıģ": 119776, + "Ġdaģı": 119777, + "ĠbaÅŁarı": 119778, + "ĠÏĢά": 119779, + "ĠпÑĢодаж": 119780, + "Bá»Ļ": 119781, + "Ġतत": 119782, + "Ġpodstat": 119783, + "Ġæµģ": 119784, + "ĠzdravÃŃ": 119785, + "Ġç¡": 119786, + "Ġopak": 119787, + "Ġhá»įa": 119788, + "æĭĶ": 119789, + "Ñĥжд": 119790, + "Ġtrứng": 119791, + "ÙĪØ±ÙĬØ©": 119792, + "Ñĭл": 119793, + "umsuz": 119794, + "Ġسبب": 119795, + "许å¤ļ": 119796, + "å®ŀéªĮ": 119797, + "Ġболи": 119798, + "Ġduyá»ĩt": 119799, + "áºŃc": 119800, + "ĠÐijез": 119801, + "ĠبÙĦÙĨد": 119802, + "мм": 119803, + "ÑĢел": 119804, + "Nİ": 119805, + "Ġãĥ¯": 119806, + "éĭ¼": 119807, + "ĠÑģвÑı": 119808, + "ĠåIJİ": 119809, + "Ġmuht": 119810, + "ĠпÑĢоблеми": 119811, + "ĠÑĤÑıжел": 119812, + "ĠСем": 119813, + "à¸¤à¸©à¸łà¸²à¸Ħม": 119814, + "à¹Īาà¸ķ": 119815, + "örü": 119816, + "üyorum": 119817, + "ĠاÙĦØ£ØŃ": 119818, + "ĠÑģÑĤÑĢаÑĪ": 119819, + "hoo": 119820, + "धर": 119821, + "Ġtlak": 119822, + "Ġsrpna": 119823, + "ifikace": 119824, + "Ġreh": 119825, + "ĠминÑĥ": 119826, + "ãĢĢj": 119827, + "ĠгÑĢÑĥпи": 119828, + "Ġάλ": 119829, + "Ġolursa": 119830, + "λογία": 119831, + "ĠÐĴик": 119832, + "Ġmücadel": 119833, + "ĠzávÄĽ": 119834, + "ĠÑĦевÑĢа": 119835, + "Äįná": 119836, + "à¹Įà¹Ģà¸ĭ": 119837, + "ĠÙĦÙĦØŃ": 119838, + "ÑĢип": 119839, + "ĠбÑĥк": 119840, + "ãģĪãģªãģĦ": 119841, + "Ġporad": 119842, + "Ġsamostat": 119843, + "Ġtesis": 119844, + "ابÙĤÙĩ": 119845, + "ĠجدÙĬدة": 119846, + "éĢĴ": 119847, + "âĶģâĶ": 119848, + "سÛĮÙĨ": 119849, + "ĠgerektiÄŁini": 119850, + "ียà¸Ļà¸ļ": 119851, + "è¨Ģãģ£ãģ¦": 119852, + "ĠÑĸнÑĤеÑĢеÑģ": 119853, + "ĠÑıким": 119854, + "ĠæĢ»": 119855, + "kovou": 119856, + "Ġdemek": 119857, + "اÙĨÙĬا": 119858, + "Ġdomů": 119859, + "Å¡nÃŃ": 119860, + "ateÅĻ": 119861, + "åĢ«": 119862, + "δοÏĥη": 119863, + "Ġ기ìĹħ": 119864, + "åĶĩ": 119865, + "ì¹ł": 119866, + "ÑĸдÑĥ": 119867, + "린ìĿ´": 119868, + "æľĢåĪĿ": 119869, + "è¸ı": 119870, + "æĥ³åΰ": 119871, + "à¥įबर": 119872, + "ĠìŀĶ": 119873, + "ĠÑĢазнÑĭÑħ": 119874, + "krom": 119875, + "ιαν": 119876, + "ĠдÑĢÑĥз": 119877, + "仿": 119878, + "Ġê·¸ëłĩ": 119879, + "ĠдалÑĸ": 119880, + "æķĪæŀľ": 119881, + "Ġहव": 119882, + "è¼Ŀ": 119883, + "Ġì°¸ê³ł": 119884, + "ĠìĨĶ": 119885, + "Ġznal": 119886, + "ĠпеÑĢÑģ": 119887, + "ÙIJÙij": 119888, + "ĠÑĤеж": 119889, + "åĭŁ": 119890, + "ιθ": 119891, + "Äįů": 119892, + "Ġekip": 119893, + "Ġkhung": 119894, + "éĹĺ": 119895, + "ĠتصÙħÛĮÙħ": 119896, + "оиÑĤ": 119897, + "ĠÑħол": 119898, + "æĬŀ": 119899, + "amam": 119900, + "Ġâĸ³": 119901, + "ãģĩ": 119902, + "ĠعÙĨÙĩ": 119903, + "Ġì°¸ê°Ģ": 119904, + "ĠÎļÏĮ": 119905, + "åı¤å±ĭ": 119906, + "ковоÑĹ": 119907, + "ศà¸Ī": 119908, + "ологиÑı": 119909, + "ĠÙħثبت": 119910, + "ĠÐļÑĢаÑĹна": 119911, + "ĠмеÑģÑıÑĨев": 119912, + "Ġalınan": 119913, + "ĠÏĢÏģαγμα": 119914, + "Ġìŀ¡ëĭ´": 119915, + "Ġплод": 119916, + "ĠÑĤкани": 119917, + "ÑģÑĭлки": 119918, + "سطس": 119919, + "ranÄĽ": 119920, + "каж": 119921, + "емаÑĤи": 119922, + "ĠزÛĮست": 119923, + "æ¿Ł": 119924, + "Ġpoplat": 119925, + "γÎŃν": 119926, + "íĨłíĨł": 119927, + "Ġtây": 119928, + "Ġìµľê·¼": 119929, + "ãĥ©ãĥ³ãĤ¹": 119930, + "ĠgüneÅŁ": 119931, + "ĠÙģÙĤ": 119932, + "ĠsaÄŁlayan": 119933, + "ĠØŃزب": 119934, + "à¥ģलन": 119935, + "ĠBilim": 119936, + "ĠBatı": 119937, + "æł·çļĦ": 119938, + "δικ": 119939, + "αÏģίοÏħ": 119940, + "ĠìĽĢ": 119941, + "Ġlá»Ńa": 119942, + "ÙĨÙĪØ¹": 119943, + "çݲ": 119944, + "аном": 119945, + "ĠstátnÃŃ": 119946, + "Ġäºİ": 119947, + "Ġmùi": 119948, + "ĠÄijá»Ļt": 119949, + "æ²ĥ": 119950, + "åħ¬åľĴ": 119951, + "ĠÑģÑĮогоднÑĸ": 119952, + "ноÑģи": 119953, + "Za": 119954, + "Ġдли": 119955, + "ĠÏĥÏħνÎŃ": 119956, + "ĠVá»ĭ": 119957, + "mav": 119958, + "ĠMüslüman": 119959, + "/ï¼ı": 119960, + "ĠзаÑīиÑĤ": 119961, + "éĸī": 119962, + "Ġçģ«": 119963, + "Ġå·Ŀ": 119964, + "Ġаж": 119965, + "è¿ĩæĿ¥": 119966, + "à¸Ĺาà¸Ļ": 119967, + "ĠAraÅŁtır": 119968, + "Õ¡Õ": 119969, + "ĠpomÄĽr": 119970, + "Ġdům": 119971, + "妮": 119972, + "ĠhlavnÄĽ": 119973, + "Ġfinans": 119974, + "ĠγνÏī": 119975, + "ÏĥÏĦημα": 119976, + "ï¼Įç͍": 119977, + "ìĭŃìĭľìĺ¤": 119978, + "ĠÙħثاÙĦ": 119979, + "-Ðij": 119980, + "ÑĨÑĸйнÑĸ": 119981, + "ĠدستÙĩ": 119982, + "à¥īस": 119983, + "ÑĢÑĸп": 119984, + "ĠpÅĻipom": 119985, + "ĠÙĪÙĦÙĬ": 119986, + "ĠÙĪØ²ÙĨ": 119987, + "Ġelektrik": 119988, + "ĠQuân": 119989, + "ivé": 119990, + "Ġlẽ": 119991, + "ç®Ģåįķ": 119992, + "Ġonlara": 119993, + "оÑģлав": 119994, + "ìĭľíĤ¤": 119995, + "몬": 119996, + "ĠÙħÙĤدار": 119997, + "ĠOrta": 119998, + "ĠSeç": 119999, + "ĠÙĨÙĪÙģÙħبر": 120000, + "ุà¸Ļายà¸Ļ": 120001, + "ĠÑĥмови": 120002, + "Ġपरम": 120003, + "Ġstrom": 120004, + "ĠкÑĢаÑīе": 120005, + "秦": 120006, + "缸æīĭ": 120007, + "鼻è¦ĸ": 120008, + "Ġuygulama": 120009, + "ĠÑĢиз": 120010, + "æĪ²": 120011, + "यर": 120012, + "ĠHlav": 120013, + "Ġìĭ¸": 120014, + "ĠлипнÑı": 120015, + "ÅĪujÃŃ": 120016, + "ÑĢиз": 120017, + "é«ĺéĢŁ": 120018, + "缸å½ĵ": 120019, + "kenin": 120020, + "ĠоÑģÑĤанов": 120021, + "Ġbitk": 120022, + "ovaného": 120023, + "ĠÐľÐ°ÑĢи": 120024, + "èµ¶": 120025, + "콩": 120026, + "Ġölçü": 120027, + "ĠСеÑĢед": 120028, + "ĠThá»Ŀi": 120029, + "Ïīνα": 120030, + "ÙĪØ¨Ø©": 120031, + "Ġchụp": 120032, + "âĢĮد": 120033, + "Ġcháy": 120034, + "ĠÐĴели": 120035, + "ĠобÑģÑĤ": 120036, + "Ġìĭľì¦Į": 120037, + "دÙħØ©": 120038, + "под": 120039, + "lue": 120040, + "ĠдÑĸлÑıн": 120041, + "ĠÙ¾ÙĪØ³Øª": 120042, + "ĠاÙĦÙĨس": 120043, + "èĤĮ": 120044, + "ìĪĺ를": 120045, + "Ġúrov": 120046, + "ĠÙħØ´Ú©ÙĦ": 120047, + "éĩįè¤ĩéĩįè¤ĩ": 120048, + "нез": 120049, + "ĠdoporuÄį": 120050, + "Ġtasarım": 120051, + "íģ¬ê¸°": 120052, + "ìĿ´ìħĺ": 120053, + "Ġdeset": 120054, + "ĠÙħرتبط": 120055, + "ัà¸Ĵà¸Ļา": 120056, + "'ı": 120057, + "Ñĩки": 120058, + "ĠìŀĪëįĺ": 120059, + "ÑĪка": 120060, + "nám": 120061, + "ÑģÑĤÑĢов": 120062, + "à¥įसर": 120063, + "нÑĥлаÑģÑĮ": 120064, + "ãģ¡ãĤĩãģ£ãģ¨": 120065, + "Ġå¦": 120066, + "γÏĮ": 120067, + "Ġé»ij": 120068, + "Xem": 120069, + "Ġtá»ĩ": 120070, + "ĠëĮĢíĨµëł¹": 120071, + "기ê´Ģ": 120072, + "æīįèĥ½": 120073, + "è¯Ńè¨Ģ": 120074, + "edeyse": 120075, + "ĠТÑĭ": 120076, + "ĠÑģоедин": 120077, + "ĠìĹĨìĬµëĭĪëĭ¤": 120078, + "ÑıÑİÑĤ": 120079, + "à¹ģหล": 120080, + "Ġì§Ģë°©": 120081, + "ĠosobnÃŃ": 120082, + "ÛĮÙĦÛĮ": 120083, + "ĠавгÑĥÑģÑĤа": 120084, + "Ñīик": 120085, + "Ġvýše": 120086, + "gth": 120087, + "ĠÏĢαν": 120088, + "جار": 120089, + "Ġвидов": 120090, + "ìĿ´ìĬĪ": 120091, + "ĠÐijаÑĢ": 120092, + "ĠÏĮÏĢοÏħ": 120093, + "æ¤ħ": 120094, + "ĠعاÙĦÛĮ": 120095, + "ĠQuyết": 120096, + "ÃľM": 120097, + "ãĥĿãĤ¤ãĥ³ãĥĪ": 120098, + "Ġê¹Į": 120099, + "Ġканди": 120100, + "kového": 120101, + "ĠMerkez": 120102, + "Ġyiy": 120103, + "ĠpÅĻÃŃspÄĽ": 120104, + "ĠÑĤемпеÑĢаÑĤÑĥÑĢÑĭ": 120105, + "ĠÙ¾ÙĬ": 120106, + "ฤศà¸Ī": 120107, + "è°ĥç͍": 120108, + "ĠÑģÑĤоÑĢонÑĥ": 120109, + "à¹īà¸Ĭ": 120110, + "好ãģį": 120111, + ".Åŀ": 120112, + "ĠпÑĢоз": 120113, + "ÙĨتاج": 120114, + "鼻åŃIJ": 120115, + ".:.:.": 120116, + "è¨ĵ": 120117, + "иÑĩеÑģкое": 120118, + "Ġноги": 120119, + "ĠλÎŃ": 120120, + "Ġsıkıntı": 120121, + "Ġê°Ģ족": 120122, + "ĠتÙĨظÙĬÙģ": 120123, + "Ġödül": 120124, + "ĠaÅŁaģıdaki": 120125, + "Ġželez": 120126, + "ĠاÙĦعدÙĬد": 120127, + "غÙĨ": 120128, + "ĠоконÑĩ": 120129, + "ÑĢемÑı": 120130, + "Lİ": 120131, + "Ġnejd": 120132, + "ĠÏĢλα": 120133, + "Ñģко": 120134, + "ĠìĪĻ": 120135, + "ĠÙ¾ÙĪÙĦ": 120136, + "θενήÏĤ": 120137, + "Ġ주ìļĶ": 120138, + "ĠæĬ¥": 120139, + "ĠÙħÙħا": 120140, + "ÐłÐ¡Ðł": 120141, + "ĠÑĢадÑĸ": 120142, + "ä¸Ģç§į": 120143, + "é¾Ħ": 120144, + "Ġsöyl": 120145, + "Ïģκεια": 120146, + "ĠземлÑĸ": 120147, + "ĠveÄįer": 120148, + "geç": 120149, + "ستÙħ": 120150, + "Ġsefer": 120151, + "ĠÑģвÑĸд": 120152, + "ï»Łï»": 120153, + "алов": 120154, + "ìĬ¤ë¥¼": 120155, + "âī¥": 120156, + "ĠتÙĦÙģÙĨ": 120157, + "åİ»äºĨ": 120158, + "़à¥ĭà¤Ĥ": 120159, + "ĠÑĦоÑĢме": 120160, + "düm": 120161, + "åħģ": 120162, + "ÑĢап": 120163, + "ĠVương": 120164, + "à¸Ńะà¹Ħร": 120165, + "ัà¸ģษà¸ĵ": 120166, + "Ġåį³": 120167, + "ĠاÙĦرÙħ": 120168, + "ĠзаÑħиÑģÑĤÑĥ": 120169, + "°E": 120170, + "odÃŃ": 120171, + "Ġवन": 120172, + "ĠÄijèn": 120173, + "ĠåıĹ": 120174, + "èIJ½ãģ¡": 120175, + "Ġzim": 120176, + "리ì¦Ī": 120177, + "èĪĴ": 120178, + "ĠзбÑĸÑĢ": 120179, + "Ġä»·æł¼": 120180, + "ĠлÑİдина": 120181, + "ĠÐŁÐ¾ÑģиланнÑı": 120182, + "иÑī": 120183, + "ĠΨ": 120184, + "ิà¸ģายà¸Ļ": 120185, + "Ġbudete": 120186, + "ĠзÑĢоÑģÑĤ": 120187, + "Ġvyk": 120188, + "ĠÐĹем": 120189, + "ĠиÑİнÑı": 120190, + "ĠmÄĽlo": 120191, + "ÙĦاÙģ": 120192, + "ĠÙĪØ´": 120193, + "ĠÑģпÑĢави": 120194, + "ãģĻãģİ": 120195, + "ĠгÑĢадÑĥ": 120196, + "Roz": 120197, + "ινή": 120198, + "Ġchá»ĵng": 120199, + "ä¸Ģåį·": 120200, + "ĠXem": 120201, + "ĠÑģимвол": 120202, + "ĠodmÃŃt": 120203, + "ĠÑĢÑıдом": 120204, + "ĠÑĩеÑĢвнÑı": 120205, + "à¸ģระà¸Ĺ": 120206, + "人人": 120207, + "æ°ĹæĮģãģ¡": 120208, + "undaki": 120209, + "åľĭå®¶": 120210, + "εÏģμαν": 120211, + "ĠлÑĮ": 120212, + "ĠNüfus": 120213, + "ĠмеÑĢе": 120214, + "براÙĬر": 120215, + "наннÑı": 120216, + "ĠнаÑĢ": 120217, + "Ġtấm": 120218, + "æĸ½å·¥": 120219, + "顯": 120220, + "Ġhè": 120221, + "æĺİçϽ": 120222, + "Ġдогов": 120223, + "ĠÙ쨱Ùħ": 120224, + "èĢĹ": 120225, + "ìĬ¤ìĿĺ": 120226, + "ìĦ¸ëĮĢ": 120227, + "è¯ļ": 120228, + "ĠнеболÑĮ": 120229, + "Ġà¸Ľà¸£à¸°à¸ģ": 120230, + "Ġì¹¼": 120231, + "Ġovliv": 120232, + "ĠNGC": 120233, + "ãĢĤä¸į": 120234, + "اÙĦÙī": 120235, + "æī£": 120236, + ".ÐIJ": 120237, + "ÑĢаÑģÑĤа": 120238, + "ĠÃĩev": 120239, + "ãģ£ãģ¡": 120240, + "ï¼Įéĥ½": 120241, + "ĠrovnÄĽÅ¾": 120242, + "ĠÏĩÏģÏĮνια": 120243, + "Ġì¡°ìĦł": 120244, + "Ġآباد": 120245, + "ĠÐľÐ°Ñģ": 120246, + "çϼå±ķ": 120247, + "ä»Ķ": 120248, + "Ġkendisini": 120249, + "à¹Īà¸Ńà¸ĩà¹Ģà¸Ĺ": 120250, + "ĠVÄĽ": 120251, + "Ġrượu": 120252, + "Ġmáme": 120253, + "ĠоÑĩеÑĢедÑĮ": 120254, + "ĠسبتÙħبر": 120255, + "Ġбок": 120256, + "ì§ĢìĹŃ": 120257, + "ĠتاثÛĮر": 120258, + "Ġlisans": 120259, + "Ġgerektir": 120260, + "Ġsizi": 120261, + "Ñĸно": 120262, + "ĠMÃ¼ÅŁ": 120263, + "ãģıãĤīãģĦ": 120264, + "ĠзаклÑİÑĩ": 120265, + "ãģĵãģ¨ãģ«": 120266, + "è¨ĢãģĦ": 120267, + "ãĢģå°ı": 120268, + "Ġetmektedir": 120269, + "åł±åijĬ": 120270, + "ĠkarÄ±ÅŁ": 120271, + "Ġоблад": 120272, + "å¥ij": 120273, + "racat": 120274, + "ĠارتÙģØ§Ø¹": 120275, + "μαι": 120276, + "íĶĪ": 120277, + "ĠÙĪÙĦÙħ": 120278, + "ëĬĶì§Ģ": 120279, + "lomou": 120280, + "ĠлиÑĨа": 120281, + "ĠìĿĮìķħ": 120282, + "ĠhodnÄĽ": 120283, + "èĭ±æĸĩ": 120284, + "ÂĦ": 120285, + "à¹īาà¸Ĥà¸Ńà¸ĩ": 120286, + "Ġê³Ħìķ½": 120287, + "åIJĦç§į": 120288, + "ĠÙħرگ": 120289, + "éĶģ": 120290, + "Ġनद": 120291, + "ãĥĭãĥ¡": 120292, + "Ġем": 120293, + "ĠeleÅŁtir": 120294, + "ĠíĬ¹ë³Ħ": 120295, + "ĠÎ¥ÏĢο": 120296, + "Å¡ker": 120297, + "LERİ": 120298, + "æ²Ī": 120299, + "likleri": 120300, + "ĠÙħÙĩÙĨدسÛĮ": 120301, + "Ġbaģır": 120302, + "dıģını": 120303, + "ĠاÙĦتد": 120304, + "à¸¸à¸Ľà¸ģรà¸ĵ": 120305, + "ĠÑģледÑĥÑİÑīие": 120306, + "Ġì§ģìłij": 120307, + "å°¤": 120308, + "ĠоÑģновÑĸ": 120309, + "ĠtÄĽla": 120310, + "Ġпак": 120311, + "izace": 120312, + "Ġnárod": 120313, + "aný": 120314, + "ĠÑįп": 120315, + "Ġüçüncü": 120316, + "ΥΡ": 120317, + "éĨ´éĨ´": 120318, + "à¹Ģà¸ģà¸Ńร": 120319, + "âĢĮاÙĨبار": 120320, + "ç¶Ļ": 120321, + "ÎijÎł": 120322, + "ılıģı": 120323, + "ĠÃľrün": 120324, + "Ġдозвол": 120325, + "ĠíĥĪ": 120326, + "Ġà¤ĵवर": 120327, + "諸": 120328, + "èĺĩ": 120329, + "ĠпÑĢоÑģÑĤÑĢан": 120330, + "éĿĴå¹´": 120331, + "ã쮿ĸ¹": 120332, + "ĠÚĨÚ¯ÙĪÙĨÙĩ": 120333, + "ÙĦØ·": 120334, + "âĢľæĪij": 120335, + "Ġëĭ¤ìļ´ë°Ľ": 120336, + "ा.Ċ": 120337, + "Ġmücadele": 120338, + "ĠcÃŃt": 120339, + "à¹Īวมà¸ģ": 120340, + "ģına": 120341, + "ê°ľë°ľ": 120342, + "ĠÏĢαιδ": 120343, + "ضاÛĮ": 120344, + "Ġborç": 120345, + "íĬľ": 120346, + "ĠخدÙħت": 120347, + "Ġudál": 120348, + "Ġвиг": 120349, + "Ġë°°ìĨ¡": 120350, + "å¹¾": 120351, + "ÙİØ¬": 120352, + "ĠìĹĺ": 120353, + "ç̬": 120354, + "ïĢ": 120355, + "ĠÎijθή": 120356, + "пÑĢиклад": 120357, + "ĠпÑĢиÑĩина": 120358, + "ĠÙģØ´Ø§Ø±": 120359, + "滿": 120360, + "Ġdostat": 120361, + "Ġ졸ìĹħ": 120362, + "Ġارز": 120363, + "ÙĪÙĦÙĪØ¬": 120364, + "سÙĪ": 120365, + "æĺłçĶ»": 120366, + "Ġthôi": 120367, + "Ġ³³³": 120368, + "à¹ģà¸Ļะ": 120369, + "è¨ŃåĤĻ": 120370, + "Ġмногие": 120371, + "ÑĤоÑĦ": 120372, + "iÅ¡tÄĽ": 120373, + "à¤Ĺढ": 120374, + "ĠиндивидÑĥ": 120375, + "ĠìĥĿíĻľ": 120376, + "ĠзовÑģÑĸм": 120377, + "íĥķ": 120378, + "çľł": 120379, + "ĠêµŃëĤ´": 120380, + "eptal": 120381, + "raci": 120382, + "è¡¡": 120383, + "ãĦ·": 120384, + "ĠStÅĻed": 120385, + "اÙĦÙĬا": 120386, + "ΣΤ": 120387, + "Ľ°": 120388, + "ãĥīãĥ«": 120389, + "ázÃŃ": 120390, + "ĠаÑģп": 120391, + "ĠdÄ±ÅŁarı": 120392, + "ĠвиÑĢобниÑĨÑĤва": 120393, + "eza": 120394, + "ï¼Įä¸įè¿ĩ": 120395, + "çĥ¦": 120396, + "ãĥ³ãĤ°ãĥ«": 120397, + "Ġrozvoj": 120398, + "ĠÙħÙĨتشر": 120399, + "ĠÑĥÑĤеп": 120400, + "ĠدÙĬÙĨ": 120401, + "ĠзаÑģобÑĸв": 120402, + "Ngưá»Ŀi": 120403, + "ãĤ·ãĥ¼": 120404, + "ĠFransız": 120405, + "ÎĻΤ": 120406, + "ائÙģ": 120407, + "ιÏĩ": 120408, + "ีà¹Ģม": 120409, + "à¥įमन": 120410, + "à¥įमà¤ļ": 120411, + "Ġسعر": 120412, + "ï¾Ŀ": 120413, + "ë°©ë²ķ": 120414, + "ĠСо": 120415, + "Ġà¤ĸबर": 120416, + "ìĨĮê°ľ": 120417, + "Ġslova": 120418, + "QPCP": 120419, + "ĠKız": 120420, + "Ø·Ù쨧ÙĦ": 120421, + "ĠкоÑĢм": 120422, + "ĠìĹħëį°ìĿ´íĬ¸": 120423, + "espoÅĪ": 120424, + "à¸Ķาว": 120425, + "оÑĢом": 120426, + "ĠгÑĢаÑĦ": 120427, + "ĠпÑĸÑĪ": 120428, + "Ġë¿IJ": 120429, + "ýv": 120430, + "Сам": 120431, + "Ġkrev": 120432, + "ĠBunu": 120433, + "Ġzobraz": 120434, + "ĠسخÙĨ": 120435, + "ĠæĶ¯": 120436, + "лÑİб": 120437, + "ÙİØ§ÙĨ": 120438, + "маÑĤÑĢива": 120439, + "λεÏį": 120440, + "ĠпоÑħод": 120441, + "ĠгÑĢе": 120442, + "çľĭçĿĢ": 120443, + "à¸Īำà¸ģ": 120444, + "ัà¸ĩà¸Ħม": 120445, + "Ġseçenek": 120446, + "İstanbul": 120447, + "ĠвÑĸдмов": 120448, + "miyor": 120449, + "Ġmụn": 120450, + "ìĿ´ìĹIJ": 120451, + "ĠNhư": 120452, + "Âłtom": 120453, + "lıkları": 120454, + "ÂłÄij": 120455, + "ãĥ»ãĥŀ": 120456, + "ĠÙģØª": 120457, + "ĠFakültesi": 120458, + "ìłĦíŀĪ": 120459, + "éªij": 120460, + "ĠìŀijìĿĢ": 120461, + "ç¼ĺ": 120462, + "ìºIJ": 120463, + "Ġmüzik": 120464, + "алÑĭ": 120465, + "Ġpozem": 120466, + "çĥ§": 120467, + "Ġ常": 120468, + "Å¡il": 120469, + "à¤Ĩप": 120470, + "à¸ģำหà¸Ļà¸Ķ": 120471, + "Ġگردش": 120472, + "λιά": 120473, + "Ġöden": 120474, + "åıªè¦ģ": 120475, + "ĠÄIJo": 120476, + "Ġstratej": 120477, + "ĠÙĩتÙĦ": 120478, + "ÙĤÙģ": 120479, + "Ġkullanılır": 120480, + "ĠÑģпоÑģÑĤ": 120481, + "ĠnÄĽho": 120482, + "ĠÐŁÐµÑĢед": 120483, + "ĠизмеÑĢ": 120484, + "]]>": 120485, + "ĠнÑĸколи": 120486, + "Ġhayal": 120487, + "ĠдодаÑĤков": 120488, + "Ġनà¤ķ": 120489, + "Ġinsanın": 120490, + "à¸¸à¸¡à¸łà¸²à¸ŀ": 120491, + "ografie": 120492, + "воб": 120493, + "ĠاÙĨساÙĨÛĮ": 120494, + "Ġmük": 120495, + "ĠÑĥмеÑĢ": 120496, + "оÑĩнÑĭе": 120497, + "ëıĦìĿĺ": 120498, + "Ġara": 120499, + "Ġ빨": 120500, + "ĠκÏį": 120501, + "лой": 120502, + "Ñģион": 120503, + "ĠrozdÃŃl": 120504, + "ayıf": 120505, + "ĠÙĪØ§ØŃدة": 120506, + "оÑĢалÑĮ": 120507, + "Ġpochop": 120508, + "éļ¨": 120509, + "à¹īà¸Ńà¸ĩà¸Ļ": 120510, + "ĠÙĪØ§ÙĨ": 120511, + "ξε": 120512, + "Ġμον": 120513, + "ÑĥÑĪка": 120514, + "ordum": 120515, + "æ¸ħæ¥ļ": 120516, + "ĠDeÄŁ": 120517, + "ÏĢÏģο": 120518, + "ĠÙĪØ§ÙĦتÙĬ": 120519, + "Ġpokus": 120520, + "íĽĦ기": 120521, + "饮": 120522, + "æĹħè¡Į": 120523, + "ĠженÑīин": 120524, + "ĠdoÄŁrudan": 120525, + "ĠÑıб": 120526, + "ĠzaÄįÃŃ": 120527, + "Ġë³´ìŬ": 120528, + "-CP": 120529, + "åIJ¨": 120530, + "à¥ĭà¤ĸ": 120531, + "ÑĢогÑĢа": 120532, + "lerdi": 120533, + "ìĬ´": 120534, + "ÙıÙĪØ§": 120535, + "ĠustanovenÃŃ": 120536, + "ĠдоÑģÑĤав": 120537, + "Ġfırsat": 120538, + "ĠاÙĦÙħÙĩÙĨØ©": 120539, + "ĠвеÑīеÑģÑĤва": 120540, + "ĠнеÑģп": 120541, + "ĠاÙĦکترÙĪÙĨ": 120542, + "taÅŁ": 120543, + "æĪĴ": 120544, + "Ġyurt": 120545, + "Ġgirdi": 120546, + "ĠÐļÑĥб": 120547, + "Ġ를": 120548, + "ุà¹Į": 120549, + "ãģĿãģĨãģª": 120550, + "à¹īĊ": 120551, + "ĠвÑĭбÑĢа": 120552, + "kovÄĽ": 120553, + "ĠSiz": 120554, + "ĠگاÙĩ": 120555, + "ĠЧаÑģ": 120556, + "ĠзгÑĸдно": 120557, + ".ÐŁ": 120558, + "å§Ĭ": 120559, + "ĠÐļÑĥÑĢ": 120560, + "ĠìĿĺíķ´": 120561, + "Ġetraf": 120562, + "ĠкаÑĪ": 120563, + "ĠØ·ÛĮ": 120564, + "ξει": 120565, + "ç²Ĵ": 120566, + "Ġآذ": 120567, + "Ġbölge": 120568, + "Ġà¤®à¤ľà¤¬": 120569, + "ÙIJÙĥ": 120570, + "Ġválky": 120571, + "ãģłãĤĪ": 120572, + "Ġmesaj": 120573, + "ĠpÅĻist": 120574, + "Ġtypu": 120575, + "ĠкиÑĪеÑĩ": 120576, + "ãĤīãģ®": 120577, + "Ġkendisi": 120578, + "ĠвÑĸдбÑĥва": 120579, + "侯": 120580, + "Ġдиза": 120581, + "ãĢĢĊ": 120582, + "ĠпÑĢоÑĨеÑģÑĥ": 120583, + "ĠÑįлекÑĤÑĢ": 120584, + "_PUS": 120585, + "ĠмногиÑħ": 120586, + "Ġkém": 120587, + "æŀª": 120588, + "çݰ代": 120589, + "Ġéħį": 120590, + "ë¡Ń": 120591, + "ÑĤиÑģÑı": 120592, + "Ġlục": 120593, + "ĠÙĪØ§ÙĦØŃ": 120594, + "ptal": 120595, + "ẵng": 120596, + "ÏĢλ": 120597, + "Ġdolu": 120598, + "Ġtòa": 120599, + "Ġиногда": 120600, + "ĠпоÑĢÑıдок": 120601, + "ЯкÑīо": 120602, + "âĶĺ": 120603, + "ĠغربÛĮ": 120604, + "ç§»åĬ¨": 120605, + "ยà¸Ļà¸ķร": 120606, + "HDATA": 120607, + "_PUSHDATA": 120608, + "Ġثابت": 120609, + "åĮħåIJ«": 120610, + "ĠÏĢÏģÎŃÏĢει": 120611, + "़à¥ĭ": 120612, + "åIJįåīį": 120613, + "ÑĤеÑĢи": 120614, + "ッ": 120615, + "ĠåħĪ": 120616, + "нед": 120617, + "ÏģοÏįν": 120618, + "вей": 120619, + "èĤĸ": 120620, + "ĠÅĻeditel": 120621, + "Ġthép": 120622, + "ĠÙĩÙģØªÙĩ": 120623, + "ĠдÑĢÑĥга": 120624, + "ERİ": 120625, + "ĠẢ": 120626, + "ĠпеÑĢеÑĢ": 120627, + "ĠжеÑģÑĤ": 120628, + "ĠÄijẳng": 120629, + "禮": 120630, + "алÑĮном": 120631, + "िषय": 120632, + "иденÑĤа": 120633, + "ĠآخرÛĮÙĨ": 120634, + "Ġæĵ": 120635, + "Ġมหาว": 120636, + "ĠлÑİÑĤого": 120637, + "ĠбÑĸзнеÑģ": 120638, + "gıç": 120639, + "Ġngá»ĵi": 120640, + "оÑĩнÑĭй": 120641, + "ĠoÄįek": 120642, + "ĠÙħرة": 120643, + "Ġtvar": 120644, + "ĠsamozÅĻejmÄĽ": 120645, + "ĠBelediye": 120646, + "Ġвода": 120647, + "ĠÚ¯ÛĮرد": 120648, + "ĠгодÑĭ": 120649, + "ãģ«è¡Į": 120650, + "æĺ¯æĪij": 120651, + "ÑĪили": 120652, + "ĠåĽ½äº§": 120653, + "á»§i": 120654, + "ĠбÑĥдÑĥÑĤÑĮ": 120655, + "ĠÑĢайонÑĥ": 120656, + "Ġìĵ": 120657, + "ĠÙĪØ§Ø³": 120658, + "ĠاÛĮشاÙĨ": 120659, + "ενοδο": 120660, + "Ġнезалеж": 120661, + "Ġپشت": 120662, + "ĠgiriÅŁim": 120663, + "Ġделе": 120664, + "ĠاصÙģÙĩاÙĨ": 120665, + "à¸Ķวà¸ģ": 120666, + "ĠاÙĦÙĤÙĬ": 120667, + "à¹Įà¸Ī": 120668, + "못": 120669, + "Ġdru": 120670, + "迹": 120671, + "адженнÑı": 120672, + "ÙģÙĨ": 120673, + "ÏĩοÏĤ": 120674, + "à¹Ĥà¸Ī": 120675, + "eyle": 120676, + "å¡ij": 120677, + "Ġuprav": 120678, + "ĠздаÑĤ": 120679, + "ĠvidÄĽt": 120680, + "Ġà¸Ľà¸£": 120681, + "ĠÑĦеÑĢ": 120682, + "ÐĨн": 120683, + "Ġìµľìĭł": 120684, + "loha": 120685, + "ĠиÑģпÑĭÑĤ": 120686, + "Ġavan": 120687, + "γοÏħ": 120688, + "ĠGiấy": 120689, + "ãĤ»ãĥ³ãĤ¿ãĥ¼": 120690, + "éģį": 120691, + "еÑĢаÑħ": 120692, + "Ġê°Ģì§Ģê³ł": 120693, + "Ġид": 120694, + "Ġmnohem": 120695, + "æ£Ģæµĭ": 120696, + "Ġetme": 120697, + "ĠتÙħر": 120698, + "ĠbaÅŁlayan": 120699, + "ãģıãĤĮ": 120700, + "à¹ĩà¸Ļà¸ģาร": 120701, + "ĠÑħаÑĢакÑĤеÑĢиз": 120702, + "Ġanlamına": 120703, + "ÙıÙĩ": 120704, + "ĠÑģеÑĢпнÑı": 120705, + "çķªçµĦ": 120706, + "Ġmsgid": 120707, + "ĠzvÃŃÅĻ": 120708, + "ĠíļĮìĽIJ": 120709, + "Ġyapar": 120710, + "ä¼ĺåĬ¿": 120711, + "еннÑĭми": 120712, + "Ġأث": 120713, + "ì²Ļ": 120714, + "Ġjiného": 120715, + "ĠدÙģØ§Ø¹": 120716, + "ĠØŃÚ©ÙĪÙħ": 120717, + "Ġrizik": 120718, + "άλι": 120719, + "à¸ĩà¸Ĥ": 120720, + "èµ¢": 120721, + "ĠÎķÎĽ": 120722, + "Ġokum": 120723, + "æĶ¶åħ¥": 120724, + "ĠÚĨÛĮÙĨ": 120725, + "æľīçļĦ": 120726, + "ÑĨами": 120727, + "dÄĽnÃŃ": 120728, + "ĠкоÑĢаб": 120729, + "Ġalanda": 120730, + "สà¸Ļาม": 120731, + "ï¼īãģ®": 120732, + "ısız": 120733, + "ÙĬÙĬر": 120734, + "ÙĥÙĬØ©": 120735, + "ĠneboÅ¥": 120736, + "Ġbitir": 120737, + "Ġãĥľ": 120738, + "Ùijا": 120739, + "ï¼Ĩ": 120740, + "ĠاÙĦتارÙĬØ®": 120741, + "มหาà¸Ļà¸Ħร": 120742, + "atürk": 120743, + "ãĤ¹ãĥĨãĥł": 120744, + "θήκη": 120745, + "Ġκαν": 120746, + "ĠSür": 120747, + "ĠdÄ±ÅŁÄ±": 120748, + "Ġkancel": 120749, + "Ġپخش": 120750, + "hPa": 120751, + "ĠÄįt": 120752, + "ĠпÑĢоÑħ": 120753, + "à¹īà¸Ī": 120754, + "Ġê±°ìķ¼": 120755, + "ĠдеÑĢжавного": 120756, + "èĤ¡ä¸ľ": 120757, + "ìĿ´íģ¬": 120758, + "ÙĥتÙĪØ±": 120759, + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 120760, + "診": 120761, + "ĠبÙħا": 120762, + "ĠноÑĢмаÑĤив": 120763, + "çiler": 120764, + "à¸ĩศ": 120765, + "éĽĨä¸Ń": 120766, + "ÑĢиÑģ": 120767, + "ÑĩаÑĶ": 120768, + "liÄŁin": 120769, + "ãĥ¼ãĤ¿ãĥ¼": 120770, + "аÑĢаÑĤ": 120771, + "åĬĽéĩı": 120772, + "ĠÑģÑħем": 120773, + "åħ¥åı£": 120774, + "离å¼Ģ": 120775, + "ÏģοÏĨοÏģίεÏĤ": 120776, + "ĠÐĹаÑĤем": 120777, + "ĠkarÅŁÄ±sında": 120778, + "ĠاÙĨتظ": 120779, + "ï½Ĭ": 120780, + "ĠeÅŁit": 120781, + "Ġyazılı": 120782, + "Ðļом": 120783, + "ازÙĬ": 120784, + "Ġkimse": 120785, + "ÑĢаÑīи": 120786, + "ัà¸ģส": 120787, + "Ġkanun": 120788, + "ĠëIJĺìĹĪ": 120789, + "ĠιÏĥÏĩ": 120790, + "Ġмеди": 120791, + "æ°§": 120792, + "ï¼Įåħ¶ä¸Ń": 120793, + "Ġyoktu": 120794, + "ĠãĤ½": 120795, + "ĠпÑĢиобÑĢеÑĤ": 120796, + "ÙĪÛĮØ´": 120797, + "ãħłãħł": 120798, + "ĠکردÙħ": 120799, + "Ġduvar": 120800, + "Ġç¸": 120801, + "ısır": 120802, + "Ġïºį": 120803, + "ĠÐłÐ¾ÑģÑģиÑı": 120804, + "à¹īà¹ĥà¸Ļ": 120805, + "ĠiÅŁi": 120806, + "dol": 120807, + "ĠÙħØŃÙħÙĪØ¯": 120808, + "ĠÑģамÑĭÑħ": 120809, + "ĠبÙĨابراÛĮÙĨ": 120810, + "ãĤĮãģ©": 120811, + "ุà¸ķสาห": 120812, + ".»": 120813, + "ูà¸Ĭ": 120814, + "ĠTep": 120815, + "ãģıãĤĵ": 120816, + "Ġå¸ĥ": 120817, + "Ġतल": 120818, + "Ġserm": 120819, + "λÏĮγ": 120820, + "ĠÅŀimdi": 120821, + "Ġà¤ľà¤¨à¤¤": 120822, + "-ÐĴ": 120823, + "訪": 120824, + "ĠвÑĸдпов": 120825, + "ิà¸Ļà¸Ķ": 120826, + "ιÏĥμÏĮÏĤ": 120827, + "ΩΤ": 120828, + "âĨĴâĨĴ": 120829, + "ικοί": 120830, + "ĠÑģпÑĢава": 120831, + "æľºåħ³": 120832, + "ĠÃĿ": 120833, + "Ġмова": 120834, + "Ġмогла": 120835, + "ĠдлиÑĤелÑĮ": 120836, + "ãģĹãģ¦ãĤĤ": 120837, + "ĠβÏģί": 120838, + "Ġжод": 120839, + "éĹª": 120840, + "ĠмÑĸÑģÑĮкоÑĹ": 120841, + "ηÏģε": 120842, + "çłĤ": 120843, + "Ġkterých": 120844, + "ĠÐĵолов": 120845, + "Ġhá»Ļp": 120846, + "ĠpanÃŃ": 120847, + "تÙħاد": 120848, + "Âľ": 120849, + "åįģåħŃ": 120850, + "κοÏĤ": 120851, + "евÑĭÑħ": 120852, + "æĭĴ": 120853, + "ĠÑģÑĤоÑĢон": 120854, + "Ġphóng": 120855, + "ĠÑĥлÑĥÑĩÑĪ": 120856, + "mrt": 120857, + "mpar": 120858, + "ĠSlav": 120859, + "Ġkov": 120860, + "ìĿ¸ìĿĢ": 120861, + "ĠåºĶ": 120862, + "ัà¸ļà¸Ħ": 120863, + "Ġkì": 120864, + "ĠaÅ¥": 120865, + "ÅĻÃŃt": 120866, + "ì°Į": 120867, + "ÙħÙĨت": 120868, + "ıyorlar": 120869, + "æŃ£å¸¸": 120870, + "нÑıÑĤÑĤÑı": 120871, + "racÃŃ": 120872, + "ĠпиÑĤаниÑı": 120873, + "à¸Īะà¹Ģà¸Ľ": 120874, + "ĠاÙĦÙĩÙĨد": 120875, + "ĠDost": 120876, + "ĠÐĴаÑģилÑĮ": 120877, + "ĠíĥĦ": 120878, + "Ġnạn": 120879, + "à¹Īà¸Ńà¹Ħà¸Ľ": 120880, + "رÙĪØ¶": 120881, + "±ظ": 120882, + "Ġbychom": 120883, + "à¸Ļวย": 120884, + "ãģłãģ£ãģ¦": 120885, + "ĠÐĺÑģп": 120886, + "à¸Ħรà¸ļ": 120887, + "Ġสà¸ĸาà¸Ļ": 120888, + "ĠëĤ®": 120889, + "jiÅ¡tÄĽ": 120890, + "ĠÙģÙĪØª": 120891, + "ĠChương": 120892, + "ĠìĿ´ë£¨": 120893, + "ĠpÅĻÃŃtom": 120894, + "tual": 120895, + "bette": 120896, + "Ġsabah": 120897, + "μί": 120898, + "Ġmá»ĩnh": 120899, + "ãģ®ãģłãĤįãģĨ": 120900, + "ĠzamÄĽÅĻ": 120901, + "åįģäºĶ": 120902, + "ĠìķĬìĿĦ": 120903, + "اÙĨÙĪ": 120904, + "енÑĥ": 120905, + "ĠÑĥгод": 120906, + "ĠVưá»Ŀn": 120907, + "Ġëĵ±ìĿĦ": 120908, + "Ġbelirtilen": 120909, + "æŁĦ": 120910, + "Ġteklif": 120911, + "¬Ĥ": 120912, + "ĠподаÑĤков": 120913, + "ĠاÙĦÙĨÙĩ": 120914, + "ï¼´": 120915, + "ìĽĥ": 120916, + "Ġहल": 120917, + "ĠимÑĥ": 120918, + "ĠкоÑĤоÑĢÑĭм": 120919, + "ï¼Į以åıĬ": 120920, + "ĠÑĤабли": 120921, + "ा:": 120922, + "Ġبرج": 120923, + "ĠÎŃναν": 120924, + "ĠÙĬÙĪÙĦÙĬÙĪ": 120925, + "ýš": 120926, + "ĠÙĬج": 120927, + "ĠÑĤÑĢоÑħи": 120928, + "æŀĿ": 120929, + "ĠdÃły": 120930, + "ĠBurada": 120931, + "ĠÏĥÏħμβ": 120932, + "ĠÎijÏģÏĩ": 120933, + "ĠsociálnÃŃ": 120934, + "ĠÚ¯ÙĪ": 120935, + "Ġyanıt": 120936, + "ãģ¯ãģªãģĦ": 120937, + "ãģ®ä¸Ĭ": 120938, + "Ġnúi": 120939, + "ĠرÙģØªØ§Ø±": 120940, + "ĠÙħرات": 120941, + "زÙħاÙĨ": 120942, + "าà¸Īารย": 120943, + "ĠÑĩиÑģлÑĸ": 120944, + "ĠسÙĨت": 120945, + "ĠÃĸzellikle": 120946, + "ìĩ¼": 120947, + "ĠÄįÃŃm": 120948, + "ADDE": 120949, + "ãģ®ãĤĪãģĨãģª": 120950, + "ÙĪÙĦÙĪÚĺÛĮ": 120951, + "ĠíĻľìļ©": 120952, + "ãĢģãģ©ãģĨ": 120953, + "ĠÎłÏģÏī": 120954, + "çĻ»åł´": 120955, + "ĠнаданнÑı": 120956, + "ĠмеÑĢеж": 120957, + "ĠìĿµ": 120958, + "jÃŃcÃŃch": 120959, + "itou": 120960, + "ÙĤÙĪÙĦ": 120961, + "Ùħج": 120962, + "ĠبÙĨد": 120963, + "Ġönüne": 120964, + "Ġï½°": 120965, + "зв": 120966, + "ĠеÑģÑĤе": 120967, + "ÐłÐĺ": 120968, + "ÑĢол": 120969, + "ayla": 120970, + "ĠклÑĥ": 120971, + "æİ¨èĸ¦": 120972, + "ĠÑĢозÑĢаÑħ": 120973, + "Ġìĥģëĭ´": 120974, + "ĠÙĨسÙħØ©": 120975, + "ĠвиÑħод": 120976, + "à¥Ģà¤Ĩà¤Ī": 120977, + "ĠпÑĢиÑģÑĤÑĥп": 120978, + "ÙĴع": 120979, + "ĠteÅŁekkür": 120980, + "дÑıки": 120981, + "Ġfikir": 120982, + "ัศà¸Ļ": 120983, + "ĠآزÙħاÛĮØ´": 120984, + "Ġbizi": 120985, + "ÏĨαÏģ": 120986, + "æľªæĿ¥": 120987, + "æIJº": 120988, + "ĠδÏħνα": 120989, + "ĠرÙĪÙħ": 120990, + "Ġbundan": 120991, + "ĠÙĤاÙĦب": 120992, + "Ġhaft": 120993, + "忽": 120994, + "ĠÐľÐ¾ÑĢ": 120995, + "Ġzápas": 120996, + "Ġë¹Ľ": 120997, + "å»·": 120998, + "äºĪç´Ħ": 120999, + "Ġkhuyến": 121000, + "ĠÎijÎĵ": 121001, + "ĠìŀijìĹħ": 121002, + "डर": 121003, + "Ġjednoduch": 121004, + "à¥īम": 121005, + "ĠdeÄŁildi": 121006, + "Ġkolo": 121007, + "ĠدÙĤÛĮ": 121008, + "лами": 121009, + "ĠHá»įc": 121010, + "Ġपस": 121011, + "ĠÎłÏģÏĮ": 121012, + "ĠâĹij": 121013, + "ĠнаÑģлÑĸд": 121014, + "Ġдиви": 121015, + "ĠpÅĻesnÄĽ": 121016, + "ĠТаким": 121017, + "Ġrukou": 121018, + "ä¸ĢåĪĩ": 121019, + "ĠÑģпÑĢи": 121020, + "enské": 121021, + "æĹ¦": 121022, + "ĠÙĤÙĨ": 121023, + "Ġústav": 121024, + "िशत": 121025, + "à¹Į)": 121026, + "ĠTrang": 121027, + "Ġmohla": 121028, + "ĠÎķλλην": 121029, + "Ġпоки": 121030, + "ĠØ¢Ùħار": 121031, + "åIJ¾": 121032, + "ĠÑĢеÑģп": 121033, + "Ġtakdir": 121034, + "Ġrahatsız": 121035, + "éŁ³ä¹IJ": 121036, + "ĠâĶĥ": 121037, + "ilis": 121038, + "ĠÙĪØ§ÙĦØ¥": 121039, + "å®Ļ": 121040, + "Ñĥмов": 121041, + "ĠÐĽÐ¸ÑĤ": 121042, + "::::|": 121043, + "åħ½": 121044, + "ĠÙĨزدÛĮÚ©": 121045, + "елÑĸв": 121046, + "θοÏįν": 121047, + "ìĹIJìĦľëıĦ": 121048, + "èµĦæł¼": 121049, + "çIJĨ论": 121050, + "ĠKemal": 121051, + "ĠкеÑĢ": 121052, + "ษายà¸Ļ": 121053, + "Ġåįİ": 121054, + ")ìĹIJ": 121055, + "ĠëĬĺ": 121056, + "ãĥĿãĥ¼ãĥĪ": 121057, + "ĠÐĹд": 121058, + "اصÙĬÙĦ": 121059, + "Ġkatı": 121060, + "ãĤĤãģĹãĤĮãģªãģĦ": 121061, + "Ġкаждого": 121062, + "ĠдÑĢ": 121063, + "Ġfutbol": 121064, + "ÙĦÙĬÙģ": 121065, + "Ġì§ĢëĤľ": 121066, + "ĠÙ¾ÛĮØ´ÙĨÙĩ": 121067, + "ülük": 121068, + "Ġà¸ķำà¸ļล": 121069, + "ĠbáºŃc": 121070, + "ĠåĽł": 121071, + "ikler": 121072, + "Ïģιά": 121073, + "Ġвважа": 121074, + "Ġvypl": 121075, + "Ġвниз": 121076, + "íĢ": 121077, + "çľ¾": 121078, + "ĠÑģила": 121079, + "ĠналиÑĩии": 121080, + "ĠعراÙĤ": 121081, + "ĠاÙĦÙħÙĥ": 121082, + "å°±ä¼ļ": 121083, + "ĠмÑĸг": 121084, + "ĠÎĮμιλοÏĤ": 121085, + "Ñīего": 121086, + "Ġíĸīìłķ": 121087, + "Âłmph": 121088, + "Ġmalé": 121089, + "ĠÛĮاÙģØªÙĩ": 121090, + "Ġmnoha": 121091, + "γά": 121092, + "ĠпоÑģÑĤÑĢо": 121093, + "ĠاÙĦÙħÙĪØ³": 121094, + "Ġolma": 121095, + "ëī´ìĬ¤": 121096, + "Ġtutar": 121097, + "ãĥ¼ãĥĵãĤ¹": 121098, + "à¥įथन": 121099, + "-либо": 121100, + "æ¥ŃåĭĻ": 121101, + "ĠоÑģобливо": 121102, + "è®Ģ": 121103, + "ÙģÙĩÙĪÙħ": 121104, + "Ġkẻ": 121105, + "ĠÅ¡tÄĽ": 121106, + "Ġcầm": 121107, + "ĠÄįlánky": 121108, + "ĠÄIJiá»ĩn": 121109, + "(=": 121110, + "OVÃģ": 121111, + "uldu": 121112, + "aft": 121113, + "Ġlãi": 121114, + "Ġdoldur": 121115, + "³³³³³³³³³³³": 121116, + "βι": 121117, + "ãģ£ãģ¦ãģįãģŁ": 121118, + "ì¶ľìŀ¥ìķĪë§Ī": 121119, + "å¯Ŀ": 121120, + "Ġë¶Ģíĥģ": 121121, + "ĠاÙĦاخ": 121122, + "ĠγÏħνα": 121123, + "à¤ıम": 121124, + "à¥Įल": 121125, + "عادة": 121126, + "ĠκοÏħ": 121127, + "ĠÙħطرØŃ": 121128, + "ĠÑĩеловеÑĩ": 121129, + "Ġnumar": 121130, + "Ġдина": 121131, + "ÏĦÏģÎŃ": 121132, + "λικ": 121133, + "Ġдолго": 121134, + "Ġnhiêu": 121135, + "ĠвоÑģÑģÑĤанов": 121136, + "apı": 121137, + "Ġkanı": 121138, + "ĠKế": 121139, + "ãĤīãģļ": 121140, + "Ġharek": 121141, + "ãģłãģijãģ§": 121142, + "æ»ħ": 121143, + "Ġohled": 121144, + "еÑĢим": 121145, + "ĠØŃÙĬÙĨ": 121146, + "ĠÙĤÙĩر": 121147, + "Ġबà¥Ŀ": 121148, + "اپÛĮÙħ": 121149, + "è¶ħè¿ĩ": 121150, + "Ġæħ": 121151, + "ĠتÙ쨳": 121152, + "asıyla": 121153, + "биÑĤ": 121154, + "ĠØŃاج": 121155, + "ĠÑĤÑĢебованиÑı": 121156, + "Ġæİ¨": 121157, + "Ġç±³": 121158, + "ãĤ³ãĥ¼ãĥī": 121159, + "ĠÑĥÑģи": 121160, + "ĠاخÙĦاÙĤ": 121161, + "Ġdostup": 121162, + "ĠعÙĦاÙĤ": 121163, + "िवस": 121164, + "Ġоди": 121165, + "tej": 121166, + "Ġthá»ıa": 121167, + "ัà¸ģษà¸ĵะ": 121168, + "ĠÑĢаÑģк": 121169, + "ĠÐĿаÑĢод": 121170, + "ĠзакÑĥп": 121171, + "ože": 121172, + "Ġاجرا": 121173, + "ê´ijê³ł": 121174, + "аÑĢÑĤам": 121175, + "ĠпеÑĢеж": 121176, + "èij£äºĭ": 121177, + "ĠÑıкоÑģÑĤÑĸ": 121178, + "ĠвÑĥл": 121179, + "мон": 121180, + "Ġchlap": 121181, + "ĠÑįÑĤомÑĥ": 121182, + "аÑĤÑĸ": 121183, + "ĠíĴĪ": 121184, + "è¡Ĺéģĵ": 121185, + "سد": 121186, + "ÙĪØ±Ùĩ": 121187, + "ĠزÛĮاد": 121188, + "åľ¨çº¿è§Ĩé¢ij": 121189, + "اÙĪÙĬØ©": 121190, + "ï¼Įå°±æĺ¯": 121191, + "elerinden": 121192, + "ÑĢажд": 121193, + "Ġпозд": 121194, + "ĠзнаÑĤÑĮ": 121195, + "ัà¸ļสà¸Ļ": 121196, + "à¥ĩà¤ĸत": 121197, + "ĠæĽ°": 121198, + "ê³¼ìłķ": 121199, + "é®®": 121200, + "ĠViá»ĩn": 121201, + "Ġdvoj": 121202, + "ίνεÏĦαι": 121203, + "ĠosobnÃŃch": 121204, + "ĠâĢª": 121205, + "éϵ": 121206, + "ĠØ®ÙĪØ¯Ø´": 121207, + "ĠاÙĨر": 121208, + "ĠпÑĢоÑĦеÑģÑģионалÑĮ": 121209, + "kám": 121210, + "ĠÙħÙĥاÙĨ": 121211, + "ĠاÙĦأد": 121212, + "Ġê³µë¶Ģ": 121213, + "ĠÄijức": 121214, + "ĠCumhuriyeti": 121215, + "åĩºãģĹ": 121216, + "дами": 121217, + "ĠìĪĺìĥģ": 121218, + "ĠÙģØ¨Ø±Ø§ÙĬر": 121219, + "Ġsüresi": 121220, + "Ġبج": 121221, + "ĠæĶ¾": 121222, + "ØŃÛĮ": 121223, + "çłĶç©¶æīĢ": 121224, + "åĩºçīĪ社": 121225, + "ĠÙħÙĪØªÙĪØ±": 121226, + "&&&&": 121227, + "ĠпеÑĢей": 121228, + "ĠìĦłê±°": 121229, + "ĠúspÄĽÅ¡": 121230, + "ارک": 121231, + "Ġettir": 121232, + "Ġì¶ľìŀ¥": 121233, + "ĠKanun": 121234, + "ĠÑĥменÑĮÑĪ": 121235, + "ĠзаÑĤвеÑĢдж": 121236, + "ĠاÙĦدÙĪÙĦÙĬ": 121237, + "Ġãĥĵ": 121238, + "ĠBazı": 121239, + "åŃIJãģ®": 121240, + "åĩ¯": 121241, + "Ġsebeb": 121242, + "Ġåħ±": 121243, + "Ġdnů": 121244, + "ä½įäºİ": 121245, + "ĠZd": 121246, + "æī±": 121247, + "ĠتجربÙĩ": 121248, + "ÃĶNG": 121249, + "Ġìĺ¬ëĿ¼": 121250, + "ÏīÏĦεÏģ": 121251, + "ĠÑģвид": 121252, + "æ¯ĶèµĽ": 121253, + "ãģ«åIJij": 121254, + "ìľĦ를": 121255, + "ãģĹãģ¾ãģĹãģŁ": 121256, + "Ġdá»ĭ": 121257, + "ĠÐłÑĥÑģ": 121258, + "Ġvá»ı": 121259, + "à¤Ĥडल": 121260, + "ĠпиÑī": 121261, + "Ġsmrti": 121262, + "à¸Īาà¸ģà¸ģาร": 121263, + "ĠÑģаÑħаÑĢ": 121264, + "Ġthoát": 121265, + "جÙħØ©": 121266, + "Ġпозвол": 121267, + "ĠاÙĦثاÙĨÙĬØ©": 121268, + "زادÙĩ": 121269, + "ãĢģä¸Ń": 121270, + "ήμεÏģα": 121271, + "æ¦ľ": 121272, + "lacaģı": 121273, + "ĠнаÑĪиÑħ": 121274, + "ìĶĢ": 121275, + "ĠÐĺÑģÑĤоÑĢиÑı": 121276, + "ündeki": 121277, + "ĠпеÑĢел": 121278, + "Ġ목ìĨĮ": 121279, + "ĠÑģÑĤаÑĤÑĥÑģ": 121280, + "овали": 121281, + "ÅĻaz": 121282, + "ĠдÑĢÑĥгого": 121283, + "ÙĥÙĪÙħØ©": 121284, + "ÑĩиÑģÑĤ": 121285, + "μμ": 121286, + "åıįåºĶ": 121287, + "icari": 121288, + "Ġپاک": 121289, + "алÑĮним": 121290, + "ĠBuna": 121291, + "иÑĤив": 121292, + "ÑĦÑĢа": 121293, + "ãĥ¼ãĥĸãĥ«": 121294, + "ĠÑĤобÑĤо": 121295, + "룬ìĬ¤": 121296, + "ĠاÙĦاع": 121297, + "åħ¬éĸĭ": 121298, + "å¥ī": 121299, + "ÙĪÙĦد": 121300, + "åIJįçĦ¡ãģĹ": 121301, + "æ°ij主": 121302, + "à¥ģà¤ľà¤°": 121303, + "ìĤ¬ë¬´": 121304, + "Ġöncelik": 121305, + "Ġå¨": 121306, + "Ñıб": 121307, + "çľī": 121308, + "à¥įवय": 121309, + "ĠHình": 121310, + "çļĦåľ°æĸ¹": 121311, + "ĠاÙĦتس": 121312, + "ä¸Ī夫": 121313, + "ĠпÑĥблÑĸ": 121314, + "ĠnÄĽjaké": 121315, + "ÄIJá»iji": 121316, + "ĠÑģоÑģÑĤоÑıниÑı": 121317, + "à¥Ģ)": 121318, + "ĠÄijáºŃu": 121319, + "jed": 121320, + "ê¶ģ": 121321, + "Ġsenin": 121322, + "ĠHóa": 121323, + "âĻł": 121324, + "лÑıÑİÑĤÑĮ": 121325, + "éĹ²": 121326, + "ìĿ¸íĬ¸": 121327, + "تبÙĩ": 121328, + "Ġरà¤ĸत": 121329, + "ĠÑģловами": 121330, + "ĠطبÙĤ": 121331, + "Ġuydu": 121332, + "ุà¸ĩà¹Ģà¸Ĺà¸ŀมหาà¸Ļà¸Ħร": 121333, + "ĠSanat": 121334, + "à¹īาà¸Ĭ": 121335, + "Ġкниж": 121336, + "Ìģc": 121337, + "اÙħج": 121338, + "δÏİ": 121339, + "Å®": 121340, + "Ġbinh": 121341, + "è¾Ĩ": 121342, + "neÄŁi": 121343, + "Ø·ÙĨ": 121344, + "å¸ķ": 121345, + "Ġìĩ¼": 121346, + "оÑģÑĢед": 121347, + "ĠοÏĢοίο": 121348, + "kır": 121349, + "à¥Īश": 121350, + "Ġà¸ĩาà¸Ļ": 121351, + "Ġdruž": 121352, + "ematik": 121353, + "adıģ": 121354, + "è¾ŀ": 121355, + "ĠpoužÃŃvá": 121356, + "Ġkurtar": 121357, + "ĠsaÄŁlan": 121358, + "ãĢıï¼Ī": 121359, + "Ġmůžeme": 121360, + "Ġباد": 121361, + "æľŁéĹ´": 121362, + "اتÙģ": 121363, + "Ġyazılım": 121364, + "ĠìĹ°ê²°": 121365, + "ÙĬÙ쨩": 121366, + "Ġemin": 121367, + "ĠнеÑģколÑĮкиÑħ": 121368, + "Û´Û°": 121369, + "寧": 121370, + "ίζει": 121371, + "Ġdél": 121372, + "veriÅŁ": 121373, + "ä¾¡æł¼": 121374, + "Ġاستاد": 121375, + "Ġалког": 121376, + ".HCM": 121377, + "ίοÏĤ": 121378, + "ακ": 121379, + "طع": 121380, + "ãģ£ãģį": 121381, + "ÑıеÑĤÑģÑı": 121382, + "лика": 121383, + "ĠÑĨÑı": 121384, + "Ġë§Īì§Ģë§ī": 121385, + "ĠаÑĢми": 121386, + "ĠγλÏİ": 121387, + "ENÃį": 121388, + "뮤": 121389, + "ŃIJï¸ı": 121390, + "Ġæ¯ı": 121391, + "Ġæĸ¼": 121392, + "ĠκαλÏį": 121393, + "ĠТом": 121394, + "ulur": 121395, + "Ġakce": 121396, + "ĠÙħÙĪØ¬Ø¨": 121397, + "esiz": 121398, + "нÑıв": 121399, + "алÑĮнÑĥÑİ": 121400, + "алÑĸÑģÑĤ": 121401, + "ĠваÑĢÑĸ": 121402, + "ĠÙħؤس": 121403, + "ĠÙħاÛĮÙĦ": 121404, + "ĠμεÏĦαξÏį": 121405, + "åĩºãģĻ": 121406, + "Ġvá»Ŀi": 121407, + "룴": 121408, + "ï¼ĭ": 121409, + "æ¯İ": 121410, + "Ġtabi": 121411, + "âĤĥ": 121412, + "æ£ĭçīĮ": 121413, + "ĠÃIJ": 121414, + "ĠпÑĢоÑĦеÑģÑĸй": 121415, + "ÑĥваннÑĸ": 121416, + "ξγ": 121417, + "Ġжил": 121418, + "ÚĺÙĨ": 121419, + "лÑĥÑĪ": 121420, + "á½´": 121421, + "овеÑĢ": 121422, + "è¾¼ãģ¿": 121423, + "ĠÐľÐ°ÐºÑģим": 121424, + "ĠвзглÑıд": 121425, + "ĠнаÑĤÑĥ": 121426, + "मà¤ķ": 121427, + "ĠÑħими": 121428, + "ĠÑĢозÑĤаÑĪ": 121429, + "ÙĪØ±Ø§ÙĨ": 121430, + "ĠØ´ÙĩرÙĩاÛĮ": 121431, + "æ©Łèĥ½": 121432, + "خذ": 121433, + "ĠÑģвоÑĶÑĹ": 121434, + "нÑıеÑĤ": 121435, + "Ġghế": 121436, + "ĠpÅĻedch": 121437, + "ÑĶÑĪ": 121438, + "огÑĢаÑĦÑĸÑı": 121439, + "Ġà¸Ĺำà¹ĥห": 121440, + "åĿĬ": 121441, + "ÏģÏīν": 121442, + "าระ": 121443, + "ĠKết": 121444, + "Ġchặt": 121445, + "ĠéĻĪ": 121446, + "ĠdÄĽlat": 121447, + "ĠбÑĥдÑĥÑī": 121448, + "ĠAçık": 121449, + "æłªå¼ıä¼ļ社": 121450, + "ĠÐŁÐ°ÑĢ": 121451, + "ĠKhu": 121452, + "ãĢģæĸ°": 121453, + "Ġбой": 121454, + "ë§ĪíĬ¸": 121455, + "ĠÑģопÑĢов": 121456, + "ساب": 121457, + "ниÑģÑĤ": 121458, + "å¼ĥ": 121459, + "ĠØ´ÙĨاس": 121460, + "енном": 121461, + "Ġ项": 121462, + "èīºæľ¯": 121463, + "озем": 121464, + "ĠÑĢеÑĪениÑı": 121465, + "lady": 121466, + "ĠвÑģей": 121467, + "æĶ»åĩ»": 121468, + "Ġê²°ìłķ": 121469, + "ãĢĢï¾ŀ": 121470, + "Ġê°IJëıħ": 121471, + "-ÐIJ": 121472, + "ĠmÃŃr": 121473, + "à¥ģपà¤ı": 121474, + "нÑĸÑĨип": 121475, + "бом": 121476, + "ĠÅ¡t": 121477, + "éľį": 121478, + "ĠÑĢеÑĪение": 121479, + "ĠдиагноÑģÑĤи": 121480, + "ipar": 121481, + "اÛĮز": 121482, + "ãng": 121483, + "ัวร": 121484, + "ĠÑĨаÑĢ": 121485, + "Ġsly": 121486, + "νÏİ": 121487, + "ĠKuzey": 121488, + "رÛĮب": 121489, + "Ġcenu": 121490, + "Ġcertif": 121491, + "ĠÑĤÑĢеÑĤÑĮ": 121492, + "ิà¸Ķà¸Ĥ": 121493, + "ĠпаÑĨÑĸÑĶн": 121494, + "ÅĻiv": 121495, + "èĦĤ": 121496, + "¢°": 121497, + "ĠPhần": 121498, + "ĠмеÑĤоди": 121499, + "Ấ": 121500, + "ìĨĶ": 121501, + "åIJĮåѦ": 121502, + "ĠåĢĭ": 121503, + "моÑĤÑĢÑı": 121504, + "Ġuvád": 121505, + "Û±Û¹Û¶": 121506, + "é쏿Ĭŀ": 121507, + "!»": 121508, + "ëĺIJ": 121509, + "ĠÛĮÙĪØªÛĮ": 121510, + "ĠاÙĦØŃرب": 121511, + "ологÑĸÑı": 121512, + "nila": 121513, + "ĠÄijảng": 121514, + "ázi": 121515, + "ÑĢоÑī": 121516, + "Ġortadan": 121517, + "Ġاخبار": 121518, + "Ġà¤ħà¤ľ": 121519, + "Ġ매ìļ°": 121520, + "Ġпой": 121521, + "ĠجÙĬ": 121522, + "кÑĥваÑĤи": 121523, + "Ġá»ŀ": 121524, + "Ġبشر": 121525, + "ĠÙĥÙĬÙĦ": 121526, + "ÑīеÑģÑĤво": 121527, + "ĠìŬíĸī": 121528, + "اÙħÙĬ": 121529, + "вÑĸлÑĮ": 121530, + "ĠPrvnÃŃ": 121531, + "ĠÙĪØ³ÛĮ": 121532, + "ĠÄIJá»": 121533, + "æĪ¿éĹ´": 121534, + "åľ¨çº¿éĺħ读": 121535, + "æķ·": 121536, + "Ġtrai": 121537, + "ä¿Ĺ": 121538, + "ĠÑģамоÑģÑĤоÑıÑĤелÑĮно": 121539, + "ĠÑĤÑĢебÑĥеÑĤÑģÑı": 121540, + "δÏģα": 121541, + "ĠÑĢеÑĩов": 121542, + "ĠвÑĸк": 121543, + "ĠÑĢÑĥÑĩ": 121544, + "奧": 121545, + "ĠolduÄŁuna": 121546, + "евÑĭе": 121547, + "Ġà¸Ħล": 121548, + "اÙĦÙĤ": 121549, + "ĠÑĸменÑĸ": 121550, + "æĶ»æĴĥ": 121551, + "ĠÑĥнивеÑĢÑģиÑĤ": 121552, + "ĠthÄĥm": 121553, + "ĠлиÑģÑĤопада": 121554, + "२०": 121555, + "Ø®ÙĬ": 121556, + "ÎķÎł": 121557, + "Ġarttır": 121558, + "Ġسخت": 121559, + "ï¼ĪæĺŃåĴĮ": 121560, + "ĠÎŁÏħ": 121561, + "иваниÑı": 121562, + "Ġstaveb": 121563, + "âħ¥": 121564, + "γÏīγή": 121565, + "Ù©": 121566, + "ĠиÑģÑģледованиÑı": 121567, + "åĢĭ人": 121568, + "Ġëĭ¤ìļ´ë°Ľê¸°": 121569, + "ĠÏĦελ": 121570, + "°N": 121571, + "ĠباÙĦÙĨ": 121572, + "à¹Įà¸ŀ": 121573, + "Ġnemůže": 121574, + "Ġголова": 121575, + "à¹Įà¹ģ": 121576, + "梯": 121577, + "Âĺ": 121578, + "δηÏĤ": 121579, + "ìĿ¸ì¦Ŀ": 121580, + "layın": 121581, + "á½·": 121582, + "ĠÙĨتاÛĮج": 121583, + "ĠÑģоблÑİд": 121584, + "ĠдвижениÑı": 121585, + "ìĮ": 121586, + "ĠpovÄĽ": 121587, + "ĠìłĦìĹIJ": 121588, + "å¦Ĥä¸ĭ": 121589, + "ĠاÙĦÙħدر": 121590, + "ï¼ĮæĪĸ": 121591, + "ارا": 121592, + "æ°ijæĹı": 121593, + "ĠبرÙĤ": 121594, + "ĠзапаÑģ": 121595, + "à¸Ļà¹ĥà¸Ī": 121596, + "éf": 121597, + "Ġà¸Łà¸£": 121598, + "Ġë³´ëĤ´": 121599, + "Ġ欧ç¾İ": 121600, + "-ÑĤаки": 121601, + "é©ļ": 121602, + "ÑĢÑĸÑı": 121603, + "æŁı": 121604, + "ĠповÑĸÑĤÑĢÑı": 121605, + "çµĦç¹Ķ": 121606, + "daÅŁ": 121607, + "Ġहमल": 121608, + "ĠÑĢеÑĶÑģÑĤÑĢа": 121609, + "άβ": 121610, + "ĠÎłÎ¿": 121611, + "Ġ그림": 121612, + "ÑĩаÑİÑĤ": 121613, + "à¸ĩà¸ķ": 121614, + "íĥĢìĿ´": 121615, + "æī¬": 121616, + "Ġpojist": 121617, + "ĠçłĶ": 121618, + "Ġåıĸ": 121619, + "Ġüzerindeki": 121620, + "jÅ¡ÃŃch": 121621, + "à¥Ģदव": 121622, + "檢": 121623, + "ĠмаÑĤеÑĢиалов": 121624, + "иваннÑı": 121625, + "Ġå°Ĩ": 121626, + "лл": 121627, + "ĠнаблÑİд": 121628, + "ĠGöz": 121629, + "ĠвзÑı": 121630, + "ç͵è§Ĩ": 121631, + "Ġвак": 121632, + "ç¿Ķ": 121633, + "Ġвзаим": 121634, + "Ġgitti": 121635, + "iteleri": 121636, + "ä»·å̼": 121637, + "ĠاÙĦتص": 121638, + "िनà¤ķ": 121639, + "éĢļãĤĬ": 121640, + "ĠÑģÑĦеÑĢ": 121641, + "çĻºå£²": 121642, + "âĿ¤": 121643, + "ĠÚ¯ÙĪØ´ÛĮ": 121644, + "агаÑĤо": 121645, + "ĠÏĥÏħγκ": 121646, + "авиÑģ": 121647, + "æĤ£èĢħ": 121648, + "ĠخاÙħ": 121649, + "ÎĻÎļÎĹΣ": 121650, + "ınızda": 121651, + "panÄĽl": 121652, + "ĠÄIJá»ĭa": 121653, + "à¹ģละส": 121654, + "ĠãĤĤ": 121655, + "Ġsonucunda": 121656, + "ìĿį": 121657, + "eless": 121658, + "ĠNha": 121659, + "Ġzakáz": 121660, + "ĠвоÑģÑĤ": 121661, + "ĠvzdÄĽlávánÃŃ": 121662, + "-ม": 121663, + "Ġmetrů": 121664, + "ĠپاÛĮÛĮÙĨ": 121665, + "ĠÑĢаÑģÑĤение": 121666, + "Ġmuá»iji": 121667, + "èµĦéĩij": 121668, + "ĠÅŁÃ¼ph": 121669, + "ÙĬÙĦÙħ": 121670, + "ĠdÃ¼ÅŁÃ¼nc": 121671, + "ĠкÑĸм": 121672, + "ĠÏĩÏīÏģίÏĤ": 121673, + "ázev": 121674, + "ĠDeÄŁer": 121675, + "å·¥æ¥Ń": 121676, + "ĠرÙħز": 121677, + "ĠalespoÅĪ": 121678, + "ĠпÑĢеÑģÑĤÑĥп": 121679, + "ĠعÙĦاÙĪÙĩ": 121680, + "Ġmerak": 121681, + "à¹Į:": 121682, + "çİ°åľº": 121683, + "ÑĨвеÑĤ": 121684, + "Ġà¤ªà¥ľ": 121685, + "Ġëĭ¤ìĿĮê³¼": 121686, + "udic": 121687, + "ĠLep": 121688, + "ĠоднÑĸ": 121689, + "Ġalarak": 121690, + "å®īæİĴ": 121691, + "Ġà¸Ĥà¸Ļาà¸Ķ": 121692, + "rezent": 121693, + "isinden": 121694, + "رÙĪÛĮ": 121695, + "Ġplu": 121696, + "ç«ĭãģ¦": 121697, + "ÑĭваниÑı": 121698, + "Ġrast": 121699, + "Ġdüzenlem": 121700, + "jezd": 121701, + "ĠвеÑīеÑģÑĤв": 121702, + "ĠдиÑĢекÑĤоÑĢ": 121703, + "ÑĦÑĦ": 121704, + "tainment": 121705, + "ĠاÙĦÙĪØ²": 121706, + "landa": 121707, + "ĠÙĨÚ¯Ùĩد": 121708, + "ĠпÑĢоÑĤивоп": 121709, + "ãģ£ãģı": 121710, + "ãģ¨ãģªãĤĬ": 121711, + "Ġë°ľê²¬": 121712, + "ictor": 121713, + "ãĤ¸ãĤª": 121714, + "ΣΦ": 121715, + "ĠÑģкладÑĸ": 121716, + "Ġobsahuje": 121717, + "ĠUkra": 121718, + "æķ¦": 121719, + "ĠÏĩαÏģα": 121720, + "ĠÑĢегÑĥли": 121721, + "俺ãģ¯": 121722, + "ัà¸ķว": 121723, + "éĦī": 121724, + "ĠباÛĮ": 121725, + "éĬ·": 121726, + "ĠNẵng": 121727, + "лод": 121728, + "ارÙģ": 121729, + "æ´ģ": 121730, + "ĠëıĻìĿ¼": 121731, + "ÑĤивного": 121732, + "âĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģ": 121733, + "Ġ-:-": 121734, + "컬": 121735, + "ĠÑĪаг": 121736, + "ìłĦìŀIJ": 121737, + "çļĦäºĭæĥħ": 121738, + "ĠÑĢегÑĸ": 121739, + "ियल": 121740, + "ĠÐĿаз": 121741, + "ĠÐĻого": 121742, + "ĠÐłÐ¾Ð¼": 121743, + "ĠÃĸrneÄŁin": 121744, + "ĠпÑĢеÑģ": 121745, + "uluÄŁu": 121746, + "Ġзадов": 121747, + "ÅĻeh": 121748, + "æ¯ķä¸ļ": 121749, + "ĠtháºŃp": 121750, + "ëĤ¸": 121751, + "Ġdlouhodob": 121752, + "дÑĸлÑĥ": 121753, + "alat": 121754, + "ä»°": 121755, + "оком": 121756, + "ĠÑĦÑĸлÑĮ": 121757, + "ĠNgân": 121758, + "ĠترÙĥ": 121759, + "ĠÑĤÑī": 121760, + "رÙĪØ¯": 121761, + "çuk": 121762, + "ranÃŃ": 121763, + "ĠdolaÅŁ": 121764, + "ĠQuang": 121765, + "ĠpÅĻedpok": 121766, + "ĠnámÄĽstÃŃ": 121767, + "ойÑĩив": 121768, + "çĭĢ": 121769, + "ĠбизнеÑģ": 121770, + "ãģŁãģı": 121771, + "ĠìĿ¸ì²ľ": 121772, + "оÑĢо": 121773, + "ĠKürt": 121774, + "ê·¸ëŁ¬": 121775, + "ÑĨаÑĤÑĮ": 121776, + "ĠBên": 121777, + "Ġacı": 121778, + "Ú©Ø´": 121779, + "ï¼Īå¹³æĪIJ": 121780, + "ĠèģĶ": 121781, + ")ãĢģ": 121782, + "diler": 121783, + "ÑĩиÑĤÑĮ": 121784, + "Ưá»": 121785, + "é϶": 121786, + "ileceÄŁini": 121787, + "ĠvÅ¡em": 121788, + "å¼Ģå¥ĸ": 121789, + "è§Ħ模": 121790, + "ulmuÅŁ": 121791, + "ĠåĪĺ": 121792, + "ео": 121793, + "ĠпеÑĢевÑĸÑĢ": 121794, + "åĪĨåĪ«": 121795, + "Ġjedná": 121796, + "liÄŁe": 121797, + "ĠرÙħضاÙĨ": 121798, + "ıklı": 121799, + "ÙĩÙĢ": 121800, + "éĩįçĤ¹": 121801, + "ÑĩиваеÑĤÑģÑı": 121802, + "ë¡ľìĦľ": 121803, + "ÏĦεÏģο": 121804, + "åľ°ä¸ĭ": 121805, + "днаннÑı": 121806, + "Ġngược": 121807, + "४": 121808, + "ĠÎijλ": 121809, + "Ġalacak": 121810, + "Ġà¹Ģà¸ĩ": 121811, + "اÛĮÙĨد": 121812, + "ĠhÃłi": 121813, + "ÑĢоиз": 121814, + "ĠЧи": 121815, + "ĠÑıÑģ": 121816, + "خرÛĮد": 121817, + "Ġhudeb": 121818, + "åľ§": 121819, + "ĠìĦ¼": 121820, + "å͝ä¸Ģ": 121821, + "ĠвÑĸлÑĮ": 121822, + "ĠباÙĦاتر": 121823, + "à¸Ńà¸ģาส": 121824, + "ĠTôi": 121825, + "มà¸Ĥ": 121826, + "omor": 121827, + "ĠOlomou": 121828, + "Ġxong": 121829, + "ĠdomácÃŃ": 121830, + "ĠاختÛĮ": 121831, + "ĠÑĤеÑħнÑĸÑĩ": 121832, + "ĠiÅŁte": 121833, + "à¥Įद": 121834, + "Ġнадеж": 121835, + "Ø®ÛĮص": 121836, + "åĬªåĬĽ": 121837, + "ĠتجÙĩÛĮزات": 121838, + "Ġvole": 121839, + "kinci": 121840, + "Ġhesab": 121841, + "ĠÑģеÑģÑĤ": 121842, + "کا": 121843, + "ÑĤеÑĢн": 121844, + "รรà¸Ħ": 121845, + "åıĤèĢĥ": 121846, + "ĠÐļаб": 121847, + "Ġİmpar": 121848, + "Ġnávrh": 121849, + "åĴ¨è¯¢": 121850, + "à¸ĸาม": 121851, + "Ġyerel": 121852, + "ĠÃĸl": 121853, + "çĮĽ": 121854, + "ĠاÙĦÙĪØ·ÙĨÙĬ": 121855, + "ĠìĿ´ìĸ´": 121856, + "ิà¸Ĺยาศาสà¸ķร": 121857, + "ĠAÅŁ": 121858, + "ĠземлÑİ": 121859, + "ĠдомаÑĪниÑħ": 121860, + "ĠÑĥвеÑĢ": 121861, + "ALI": 121862, + "ган": 121863, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 121864, + "Ġdostan": 121865, + "ezpe": 121866, + "ãģĭãģĦ": 121867, + "رÙģØªÙĩ": 121868, + "ĠмÑĥÑģ": 121869, + "à¹Įà¸Ł": 121870, + "覺": 121871, + "ализа": 121872, + "ĠÑĥÑĩÑĢежд": 121873, + "ĠکاÙĦ": 121874, + "Ġetkisi": 121875, + "ä½Ĩæĺ¯": 121876, + "Ġsouvis": 121877, + "ĠSavaÅŁÄ±": 121878, + "Ġبسبب": 121879, + "ÎŁÎ¹": 121880, + "èļ": 121881, + "Ġæ®": 121882, + "ĠìĺģêµŃ": 121883, + "اسÛĮÙĪÙĨ": 121884, + "ĠاÙĦاتØŃاد": 121885, + "ĠглÑı": 121886, + "à¹ĩà¸ģà¸ĭ": 121887, + "ĠجÙĪÙĨ": 121888, + "ĠاÙĦرسÙħÙĬ": 121889, + "ÂłG": 121890, + "ĠÑĤобÑĸ": 121891, + "Âĩ": 121892, + "ĠëĮĢíĸī": 121893, + "çĬ¶æħĭ": 121894, + "Ġê·¸ëĥ¥": 121895, + "Ġимп": 121896, + "ĠتÙĨظÛĮÙħ": 121897, + "ÙĦاÛĮÙĨ": 121898, + "ÑģÑĤвеннÑĭм": 121899, + "опол": 121900, + "رÙĪØ¬": 121901, + "Ġà¸ĩ": 121902, + "ĠçĤº": 121903, + "ĠUluslararası": 121904, + "à¥Įà¤Ĥ": 121905, + "ãĢģãģĿãģĨ": 121906, + "ĠسادÙĩ": 121907, + "ÎŃαÏĤ": 121908, + "Ġà¤Ĩल": 121909, + "-ÑĦ": 121910, + "ĠÎłÎ¿Î»Î¹": 121911, + "ĠноÑıбÑĢÑı": 121912, + "ÙĪÙĦÙĬ": 121913, + "æĽľæĹ¥": 121914, + "æĮģç»Ń": 121915, + "Ġê¼Ń": 121916, + "eceÄŁiz": 121917, + "ĠÛĮاÙģØª": 121918, + "Ġåı¸": 121919, + "ाà¤Ĺत": 121920, + "Ġæķħ": 121921, + "ĠаллеÑĢг": 121922, + "Ġtuz": 121923, + "еÑĢÑĤи": 121924, + "Ġthầu": 121925, + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢĠãĢĢ": 121926, + "-à¤ħ": 121927, + "ĠиммÑĥ": 121928, + "ÑĢай": 121929, + "主義": 121930, + "ĠbaÅŁlar": 121931, + "Ġä¸Ĭ涨": 121932, + "عا": 121933, + "ĠÎĻÏī": 121934, + "ียà¸ĩà¹ĥหม": 121935, + "ĠاÙĦÙħدÙĬÙĨØ©": 121936, + "ÑģÑĮко": 121937, + "ĠتارÛĮØ®ÛĮ": 121938, + "atÃŃm": 121939, + "âĢ嘆": 121940, + "آخر": 121941, + "ĠëĦ£": 121942, + "ĠÙĨÙħاÛĮد": 121943, + "ãģķãĤĵãģĮ": 121944, + "Ġbò": 121945, + "Ġà¸ķาม": 121946, + "ë³´ìķĺëĭ¤": 121947, + "аÑĤÑĸв": 121948, + "ĠÑĦил": 121949, + "Ġkısmı": 121950, + "iá»ĩng": 121951, + "Ġaydın": 121952, + "éģķãģĦ": 121953, + "еви": 121954, + "Ġå¾®": 121955, + "(íģ¬ê¸°": 121956, + "ĠÚ¯ÛĮر": 121957, + "ìķĦìĦľ": 121958, + "ĠδημιοÏħÏģγ": 121959, + "ãģ«ãģĬãģĦãģ¦": 121960, + "ĠÃľNİ": 121961, + "иÑĤом": 121962, + "عÙĦاÙħ": 121963, + "åIJİçļĦ": 121964, + "Ġplá": 121965, + "à¸Ľà¸£à¸°à¹Ĥย": 121966, + "ç¢İ": 121967, + "Ġéĺ²": 121968, + "ëĬĶëĭ¤": 121969, + "ĠæĹ¥æľŁ": 121970, + "Ġgeçerli": 121971, + "лаÑĤÑĭ": 121972, + "Ġmutlaka": 121973, + "ÙĪØº": 121974, + "à¹Ģฮ": 121975, + "Ġﻣ": 121976, + "edeki": 121977, + "à¹Įà¹Ģà¸Ļ": 121978, + "ĠнайбÑĸлÑĮÑĪ": 121979, + "ï¼Ĭ": 121980, + "Ġà¹Ĥรà¸ĩ": 121981, + "Ġfotbal": 121982, + "ĠéĢģ": 121983, + "âĢĮاÙĦÙħÙĦ": 121984, + "ÏīμάÏĦιο": 121985, + "Ġúkol": 121986, + "åįļ士": 121987, + "dub": 121988, + "ılıģ": 121989, + "ëĵľë¥¼": 121990, + "çĭIJ": 121991, + "αλλ": 121992, + "æŃ»äº¡": 121993, + "ĠпÑĢедпоÑĩ": 121994, + "çµµ": 121995, + "ĠмÑĥзÑĭ": 121996, + "еÑĢÑĤв": 121997, + "ĠÙĥÙĨد": 121998, + "Ġulož": 121999, + "ÎŁÎ¥ÎĽ": 122000, + "gili": 122001, + "üstü": 122002, + "нки": 122003, + "ĠÙĤÙĪØ§ÙĨ": 122004, + "ιακ": 122005, + "ĠÅŁer": 122006, + "ĠкиÑģл": 122007, + "Ù쨶ÙĦ": 122008, + "ĠÐIJÑĦ": 122009, + "γεν": 122010, + "Ġdostal": 122011, + "ĠsaÄŁlıklı": 122012, + "å®¶æĹı": 122013, + "ÄIJT": 122014, + "еÑĢин": 122015, + "ĠìĿ´ë٬íķľ": 122016, + "Ġdünyada": 122017, + "Ġnhắc": 122018, + "³³Ċ": 122019, + "νηÏĥη": 122020, + "γÏģαμμα": 122021, + "Ġtakson": 122022, + "ĠTürkçe": 122023, + "ĠÙģØ±Ø§ÙĨسÙĩ": 122024, + "天åłĤ": 122025, + "溶": 122026, + "Ġoto": 122027, + "èµµ": 122028, + "chyb": 122029, + "Ġå¾Ĵ": 122030, + "ÏĦÏį": 122031, + "áhnout": 122032, + "à¥įपर": 122033, + "Ġvlas": 122034, + "Ġíļ¨ê³¼": 122035, + "Ġthang": 122036, + "Ġolmasına": 122037, + "ĠпоÑĢÑĥÑĪеннÑı": 122038, + "Ġquỹ": 122039, + "ĠíĿIJ": 122040, + "Ġì΍": 122041, + "Ġë²Ī째": 122042, + "ẹn": 122043, + "Ġзгод": 122044, + "Ġتز": 122045, + "Ġاختص": 122046, + "ĠзÑĥÑģÑĤÑĢÑĸ": 122047, + "Ġtặng": 122048, + "ῶν": 122049, + "Ġì½ľ": 122050, + "ованиÑħ": 122051, + "âĢĮشد": 122052, + "Ġaraya": 122053, + "rové": 122054, + "ĠاختÙĦ": 122055, + "ливий": 122056, + "ĠاتØŃاد": 122057, + "ĠakÅŁam": 122058, + "ĠÚ©ÙĦاس": 122059, + "ãĤ¢ãĥĥãĥĹ": 122060, + "Ġzih": 122061, + "åĩĮ": 122062, + "å±±å¸Ĥ": 122063, + "Ġçevres": 122064, + "ĠогÑĢом": 122065, + "ĠآدÙħ": 122066, + "ĠtÄĽlo": 122067, + "ï¼Įæľ¬": 122068, + "ĠÚĺØ§ÙĨÙĪÛĮÙĩ": 122069, + "Ġkraje": 122070, + "μία": 122071, + "èħ¿": 122072, + "âĢŀTo": 122073, + "決å®ļ": 122074, + "ìĩ": 122075, + "ĠéĴ": 122076, + "ĠΣÏĦα": 122077, + "ĠجÙħÙĩÙĪØ±": 122078, + "ĠGenç": 122079, + "rám": 122080, + "ĠÐłÐµÐ·": 122081, + "Ġvytvá": 122082, + "ĠпÑĢоизводÑģÑĤва": 122083, + "ĠÙħذÙĩ": 122084, + "Ġihtiyac": 122085, + "ãĤ¯ãĤ»": 122086, + "Ġnêu": 122087, + "å¾³": 122088, + "ĠëĵĿ": 122089, + "наÑĩе": 122090, + "ĠÏĥÏħμμε": 122091, + "ÏĨÏīν": 122092, + "вавÑģÑı": 122093, + "ĠвиÑĤами": 122094, + "Ìģt": 122095, + "ĠfinanÄįnÃŃ": 122096, + "åıĬåħ¶": 122097, + "âĢħ": 122098, + "çĭ¼": 122099, + "ัà¸ļà¸ķ": 122100, + "ãģĽãĤĭ": 122101, + "ÎĻÎļÎŁ": 122102, + "λλι": 122103, + "ÑĤоÑİ": 122104, + "اعÙĬØ©": 122105, + "vÃŃce": 122106, + "онÑĸв": 122107, + "ì£Ħ": 122108, + "å»ł": 122109, + "ĠØ´ÙĬØ¡": 122110, + "ĠТем": 122111, + "Ġابزار": 122112, + "ĠTHPT": 122113, + "γγÏģαÏĨ": 122114, + "ĠëĮĢíķ´ìĦľ": 122115, + "ĠPhạm": 122116, + "ÑĨионной": 122117, + "|/": 122118, + "ĠãĤ¸ãĥ£": 122119, + "ÑĮÑİÑĤ": 122120, + "ÑĥзÑĭ": 122121, + "ĠÙħاد": 122122, + "ĠmÄĽly": 122123, + "Ġçα": 122124, + "Ġrád": 122125, + "à¸Ħวà¸ļà¸Ħ": 122126, + "à¥Ī?": 122127, + "Ġlidi": 122128, + "mamız": 122129, + "Ġà¹ģà¸ģ": 122130, + "ãĤ¯ãĤ·ãĥ§ãĥ³": 122131, + "à¸Ńำà¸Ļวย": 122132, + "esát": 122133, + "Ġviêm": 122134, + "è¡ĮåĬ¨": 122135, + "มาà¸ģà¸ģว": 122136, + "ĠØ®ÙĪØ§Ø¨": 122137, + "Ġserbest": 122138, + "ÅĻÃŃz": 122139, + "ĠíĺĦëĮĢ": 122140, + "ãĢĮãģĿãģĨ": 122141, + "çĤ¸": 122142, + "omik": 122143, + "Ġİran": 122144, + "ĠeriÅŁ": 122145, + "ĠÑģела": 122146, + "ĠارزÛĮ": 122147, + "ãĥĪãĥª": 122148, + "ĠBÄĽ": 122149, + "екÑĥ": 122150, + "ЧÑĤобÑĭ": 122151, + "Ġanlamda": 122152, + "ÎijÎĺ": 122153, + "ĠLINEAR": 122154, + "æľīçĤ¹": 122155, + "ÑĤаÑĢ": 122156, + "itler": 122157, + "ĠnÃŃž": 122158, + "ĠСÑģÑĭлки": 122159, + "å¶": 122160, + "Ġвпол": 122161, + "ĠدÙĤÛĮÙĤÙĩ": 122162, + "Ġä½ĵ": 122163, + "رÙī": 122164, + "ëͰ": 122165, + "Ġà¤ķव": 122166, + "ĠжиÑĢ": 122167, + "æijĨ": 122168, + "Ġì¤ijìĭ¬": 122169, + "ĠкÑĥб": 122170, + "Ġzlep": 122171, + "ĠÑĢÑĭб": 122172, + "é³´": 122173, + "à¹ģà¸ľà¸Ļ": 122174, + "ĠíĢ": 122175, + "ĠÐĿеÑĤ": 122176, + "žitÄĽ": 122177, + "ĠbÄĥng": 122178, + "ĠHava": 122179, + "Ġ모ëį¸": 122180, + "ĠHãy": 122181, + "ĠìĿ´ê²ĥ": 122182, + "ĠìĥģìĦ¸": 122183, + "memiÅŁ": 122184, + "ĠθÎŃÏĥη": 122185, + "णन": 122186, + "ĠskuteÄįnÄĽ": 122187, + "ĠTarihi": 122188, + "Ġtextu": 122189, + "ï¼ĮéĢĻ": 122190, + "ĠاÛĮÙĨترÙĨتÛĮ": 122191, + "Ġپاد": 122192, + "ิà¸Ļà¸ģาร": 122193, + "ĠNgá»įc": 122194, + "ĠÑĢобиÑĤи": 122195, + "íĸĪê³ł": 122196, + "Ġमण": 122197, + "ÐĽÐĺ": 122198, + "ĠпоÑĤеÑĢ": 122199, + "Ñģом": 122200, + "ĠاÙĪÙĦÛĮÙĩ": 122201, + "éĽij": 122202, + "ĠGiá": 122203, + "Ġkanal": 122204, + "Ġavantaj": 122205, + "Ġryb": 122206, + "ختÙĩ": 122207, + "ĠÙĪØ±ÙĪØ¯": 122208, + "ÐĴÑĤ": 122209, + "ÏīÏĥε": 122210, + "ê¸°ë¡ľ": 122211, + "ĠÐĽÑĸ": 122212, + "Ġtảng": 122213, + "ĠصÙĦÙī": 122214, + "ĠÑĥлÑĭ": 122215, + "Ġcuá»ijn": 122216, + "ĠÐIJнг": 122217, + "ĠداÙĪ": 122218, + "ĠÑĪлÑıÑħом": 122219, + "ĠÄįlovÄĽka": 122220, + "dete": 122221, + "ÑĬем": 122222, + "à¹Įà¹ĥà¸Ļ": 122223, + "à¤ķन": 122224, + "åΤæĸŃ": 122225, + "ĸìĹIJ": 122226, + "ÏĦÏīÏĥη": 122227, + "ĠÙģÙĨاÙĪØ±ÛĮ": 122228, + "ĠyaÅŁÄ±nda": 122229, + "ĠÏĥÏĩÎŃ": 122230, + "Ġyı": 122231, + "ĠpÅĻen": 122232, + "ĠÑĦоÑĢмÑĥваннÑı": 122233, + "ümÃ¼ÅŁ": 122234, + "Ġδο": 122235, + "ımızın": 122236, + "Ġé¢Ħ": 122237, + "оÑģÑĤÑĮÑİ": 122238, + "ĠоÑĤкÑĢÑĭÑĤ": 122239, + "Ġأغسطس": 122240, + "ĠAsp": 122241, + "ĠÑĥзн": 122242, + "ĠÙĪØ§Ø³Øª": 122243, + "elerle": 122244, + "èķī": 122245, + "ĠتکÙĨ": 122246, + "ÑĥмÑĥ": 122247, + "à¹Įà¸ĭ": 122248, + "ादन": 122249, + "ĠâĢĭâĢĭâĢĭ": 122250, + "Ġalıyor": 122251, + "Ġî¡": 122252, + "Ùħدة": 122253, + "ĠÏĥει": 122254, + "Ġè¿Ļ": 122255, + "ĠÅŀehir": 122256, + "енÑĤами": 122257, + "ãĤ¿ãĥ«": 122258, + "หาย": 122259, + "айÑĤ": 122260, + "Ġharc": 122261, + "ãĢĤãģĬ": 122262, + "ĠتأثÛĮر": 122263, + "าà¸Ĭà¸Ļ": 122264, + "ĠtháºŃm": 122265, + "Ġæ¿": 122266, + "ĠmÅ©i": 122267, + "ĠprvnÃŃm": 122268, + "ĠбагаÑĤÑĮ": 122269, + "ãģķãĤīãģ«": 122270, + "biên": 122271, + "åºĶå½ĵ": 122272, + "ìĿ´ë²Ħ": 122273, + "ĠpoužÃŃt": 122274, + "Ġokamž": 122275, + "esin": 122276, + "vÄĽl": 122277, + "ĠضÙĪ": 122278, + "è»Ł": 122279, + "-з": 122280, + "à¥Īत": 122281, + "è¨Īç®Ĺ": 122282, + "rabilir": 122283, + "ĠÐłÐ¾ÑģÑĸÑĹ": 122284, + "ĠplatÃŃ": 122285, + "ĠdospÄĽl": 122286, + "Ġرضا": 122287, + "Ġnového": 122288, + "ĠнаÑĨионалÑĮ": 122289, + "ĠÐIJб": 122290, + "ãģĮãģĤãģ£ãģŁ": 122291, + "Ġë¹Ī": 122292, + "âĢĮÙħ": 122293, + "å±ŀäºİ": 122294, + "Ġtane": 122295, + "ÙĬاÙĩ": 122296, + "Ġβο": 122297, + "ĠëĬ¥": 122298, + "ãĥĩãĤ£ãĥ¼ãĤ¹": 122299, + "ĠذÙĥر": 122300, + "Ġobvykle": 122301, + "Ġbirinci": 122302, + "ĠاÙĦزر": 122303, + "ìĿ´ë¹Ħ": 122304, + "Ġإد": 122305, + "ĠEkon": 122306, + "ÐŁÐ¾Ð»": 122307, + "ĠвеÑĢоÑıÑĤ": 122308, + "Ġyararlan": 122309, + "ĠаÑĢом": 122310, + "ĠéĦ": 122311, + "Ġiddi": 122312, + "iÄįka": 122313, + "strukce": 122314, + "mÃ¼ÅŁtür": 122315, + "ÏħÏĦÏĮ": 122316, + "롱": 122317, + "Ġalmaktadır": 122318, + "ениÑıми": 122319, + "ียà¸Ļร": 122320, + "à¹ĩà¸Ļว": 122321, + "икÑĥ": 122322, + "енка": 122323, + "âĢĻyi": 122324, + "Ġpohod": 122325, + "Ġزر": 122326, + "Ġxấu": 122327, + "Ġà¸łà¸²à¸©": 122328, + "ÂłÐŀ": 122329, + "Ġδικ": 122330, + "Ġназива": 122331, + "åıªèĥ½": 122332, + "大éĩı": 122333, + "ĠÄijế": 122334, + "Ġ第äºĮ": 122335, + "ĠkiÅŁilerin": 122336, + "Ġdobré": 122337, + "驾": 122338, + "Ġdůležité": 122339, + "롤": 122340, + "μÎŃνοÏħ": 122341, + "Ġtrú": 122342, + "Ġbiçim": 122343, + "ĠÐĿÐIJ": 122344, + "Ġå¾Į": 122345, + "Ġduyg": 122346, + "åŀĤ": 122347, + "ÐĨÐĨ": 122348, + "Ġetmeye": 122349, + "ĠÙĦباس": 122350, + "ĠдвÑĸ": 122351, + "Ġ긴": 122352, + "ÑĨÑĸйно": 122353, + "κÏĦή": 122354, + "ï½Ŀ": 122355, + "ĠÑĦевÑĢалÑı": 122356, + "寫": 122357, + "Ġ겨": 122358, + "Ġyıllarda": 122359, + "ĠзÑĥп": 122360, + "ĠobchodnÃŃ": 122361, + "ĠاضاÙģÙĩ": 122362, + "веÑĢж": 122363, + "Ġæłĩ": 122364, + "جاج": 122365, + "ĠرÙĪØ³ÛĮ": 122366, + "Ġstandart": 122367, + "éru": 122368, + ")ìĿĦ": 122369, + "декÑģ": 122370, + "ĠâĪļ": 122371, + "Ġİngilizce": 122372, + "èĬĿ": 122373, + "身ä¸Ĭ": 122374, + "ØŁØŁ": 122375, + "Ġmẽ": 122376, + "ÎijÎĶ": 122377, + "енÑģив": 122378, + "âĢĻta": 122379, + "à¹īาà¸ģ": 122380, + "ÎŁÎĽÎŁÎĵ": 122381, + "ä»ĺãģij": 122382, + "ĠsÃłng": 122383, + "Ġà¤¹à¤Ł": 122384, + "ÑĭÑĪлен": 122385, + "Ġخطر": 122386, + "ĠнайÑĤи": 122387, + "çĽ¸ä¿¡": 122388, + "Ïīδ": 122389, + "à¤Ķ": 122390, + "Ġdopad": 122391, + "à¹Ħà¸Łà¸¥": 122392, + "æģµ": 122393, + "íĤ¬": 122394, + "Ä±ÅŁma": 122395, + "ãģıãĤĮãģŁ": 122396, + "Ġnaprost": 122397, + "ĠÑģоÑģÑĤаве": 122398, + "ĠÙĪØ³Ø·": 122399, + "à¹ķ": 122400, + "éĸĭçĻº": 122401, + "ĠдеÑĢева": 122402, + "-ÐĶ": 122403, + "à¸ĩà¸Ĭ": 122404, + "ิà¸ķย": 122405, + "ĠاÙĦÙĤاÙĨÙĪÙĨ": 122406, + "ãĤ¹ãĤ«": 122407, + "lÃŃž": 122408, + "Ġанализ": 122409, + "Ġproblémy": 122410, + "æĸĩåѦ": 122411, + "çĹħéĻ¢": 122412, + "Ñģед": 122413, + "ï¼Įå°ı": 122414, + "ĠعشÙĤ": 122415, + "ãģ°ãģĭãĤĬ": 122416, + "ĠعÙĤد": 122417, + "ØŃÙĬØ©": 122418, + "Ġë°ĶëŀįëĭĪëĭ¤": 122419, + "inclu": 122420, + "Ġëĵľë¦½ëĭĪëĭ¤": 122421, + "åį«çĶŁ": 122422, + "ĠвидÑĥ": 122423, + "ุà¸ļาล": 122424, + "ÑĢÑĥкÑĤ": 122425, + "ĠоÑģвÑĸÑĤ": 122426, + "Ġvelký": 122427, + "ĠchtÄĽl": 122428, + "æīĵå¼Ģ": 122429, + "ĠзаконодаÑĤелÑĮ": 122430, + "анÑģи": 122431, + "ì¶ĺ": 122432, + "ĠÙħراج": 122433, + "åģľæŃ¢": 122434, + "Ġвоно": 122435, + "ìłķìĿ´": 122436, + "Ġrozsah": 122437, + "ĠæĻ´": 122438, + "Ġzajist": 122439, + "ÂłÐ¼": 122440, + "tıģını": 122441, + "Ġhizmeti": 122442, + ".Îij": 122443, + "ĠÙħعÙħÙĪÙĦا": 122444, + "Ġži": 122445, + "Ġgá»įn": 122446, + "èĮĤ": 122447, + "Ġhuz": 122448, + "ζει": 122449, + "à¥īà¤Ł": 122450, + "Ġиздел": 122451, + "ìŀĸ": 122452, + "ĠëĶ°ë¥¸": 122453, + "Ġkia": 122454, + "ĠznÄĽnÃŃ": 122455, + "ĠоÑĢганиза": 122456, + "ازات": 122457, + "Ġrežim": 122458, + "ĠвенÑĤи": 122459, + "bách": 122460, + "ĠодномÑĥ": 122461, + "Ġkitab": 122462, + "Ġfrancouz": 122463, + "ĠØ£ÙĦ": 122464, + "ĠسرÙĪ": 122465, + "ÙijÙĦ": 122466, + "Ġман": 122467, + "ë°į": 122468, + "ĠкÑĥда": 122469, + "Ùıس": 122470, + "ãĢĤæŃ¤": 122471, + "اشة": 122472, + "à¸Ĥà¸Ńà¸ĩà¸ľ": 122473, + "主任": 122474, + "ивÑĪи": 122475, + "Ġà¸ģรà¸ģ": 122476, + "екÑģи": 122477, + "иÑĤеÑĤ": 122478, + "ĠØ£ÙĦÙģ": 122479, + "аними": 122480, + "ãĥļãĥ¼ãĤ¸": 122481, + "ĠпÑĢавил": 122482, + "åªĴä½ĵ": 122483, + "ÑİÑīее": 122484, + "ä¸Ģ人": 122485, + "βο": 122486, + "ìĭ¸": 122487, + "озна": 122488, + "å¤īæĽ´": 122489, + "ĠÙħØ´Ùĩد": 122490, + "æ³ķ人": 122491, + "ĠBakanı": 122492, + "ĠÑħоÑĩа": 122493, + "Ġαξ": 122494, + "Ġverilm": 122495, + "Ġkonus": 122496, + "μενη": 122497, + "Ġ馬": 122498, + "Ġìĭ¤ìłľ": 122499, + "Ġjedno": 122500, + "Ġбаб": 122501, + "åĥį": 122502, + "æĺ¯ä¸Ģ个": 122503, + "-е": 122504, + "ĠpÅĻekvap": 122505, + "à¸Ńà¸ŀ": 122506, + "ĠYol": 122507, + "ĠÑĥÑģÑĤанавлива": 122508, + "ê²¼": 122509, + "Ġä»¶": 122510, + "اÙĦØ´": 122511, + "ĠобÑĥÑĩ": 122512, + "åĺĽ": 122513, + "ĠÑħоÑĩÑĥ": 122514, + "ĠÐķв": 122515, + "ÑĦоÑĢÑĤ": 122516, + "Ġरन": 122517, + "âĢŀV": 122518, + "èľľ": 122519, + "Ġdoma": 122520, + "æĶ¯æı´": 122521, + "Ġاخت": 122522, + "循": 122523, + "à¥Ĥà¤ļन": 122524, + "ाहन": 122525, + "Ġå¤ı": 122526, + "ĠاÙĦØ£Ùħر": 122527, + "ĠбеÑĢеменноÑģÑĤи": 122528, + "ĠThá»±c": 122529, + "é£İéĻ©": 122530, + "Ġülkemiz": 122531, + "çķªåı·": 122532, + "ÑģÑĤÑĢе": 122533, + "ÑĪло": 122534, + "ĠصاØŃب": 122535, + "ινε": 122536, + "ĠKıs": 122537, + "ĠPrahy": 122538, + "湿": 122539, + "Ġvým": 122540, + "çĽĴ": 122541, + "ÎŁÎĶ": 122542, + "ãģłãģª": 122543, + "ĠpÅĻÃŃležit": 122544, + "Ġìĸ¸ìłľ": 122545, + "ĠÑĪвидко": 122546, + "Ġsituaci": 122547, + "åħĥç´ł": 122548, + "İTESİ": 122549, + "ĠVak": 122550, + "Ġneredeyse": 122551, + "iiii": 122552, + "ÑĢазд": 122553, + "ĠполиÑĤ": 122554, + "Ġпогод": 122555, + "ĠпÑĢоÑĨеÑģÑģе": 122556, + "ĠменÑĪе": 122557, + "äºĮ人": 122558, + "ĠÙħÙĪØ§Ø·": 122559, + "ĠpÅĻik": 122560, + "è·¡": 122561, + "Ġserg": 122562, + "ĠÑĢаÑģÑģÑĤоÑı": 122563, + "иÑĩно": 122564, + "ĠÎĶÎĹÎľ": 122565, + "¨ط": 122566, + "صبØŃ": 122567, + "สะà¸Ķวà¸ģ": 122568, + "درÛĮ": 122569, + "kům": 122570, + "ç§ģãģ¯": 122571, + "Ġtvor": 122572, + "à¥įवव": 122573, + "ĠpÅĻiv": 122574, + "Ġíı´": 122575, + "Ġstátu": 122576, + "ĠedilmiÅŁtir": 122577, + "ØŃÙħ": 122578, + "ĠбÑĥÑħ": 122579, + "สำà¹Ģร": 122580, + "ĠتÙĪØ¶ÛĮ": 122581, + "ãģĿãĤĮãģ¯": 122582, + "Ġà¤ħवध": 122583, + "éŀĭ": 122584, + "âĤ¬Ċ": 122585, + "Ġéº": 122586, + "ĠÄĮes": 122587, + "Ġpoprvé": 122588, + "ï¼ĮåĽł": 122589, + "ĠalmÄ±ÅŁ": 122590, + "lal": 122591, + "ĠØ®ÙĪØ¨ÛĮ": 122592, + "ĠκοÏģ": 122593, + "ìļ´ëıĻ": 122594, + "mayın": 122595, + "Ġaktif": 122596, + "ĠاÙĨجÙħÙĨ": 122597, + "ĠÑģÑĤак": 122598, + "ĠÑģÑĤаÑĢа": 122599, + "ÙĦÙ쨩": 122600, + "Ġparçası": 122601, + "ĠкоÑĢпÑĥÑģ": 122602, + "ãĢģé«ĺ": 122603, + "!..": 122604, + "ĠÎłÎijÎĿ": 122605, + "ĠÙĩÙĨÙĪØ²": 122606, + "ionálnÃŃ": 122607, + "ĠprávnÃŃ": 122608, + "ÂĿ": 122609, + "ĠتÛĮر": 122610, + "ĠåŁİ": 122611, + "Ġзгад": 122612, + "Ġsaldırı": 122613, + "æŁ¥çľĭæijĺè¦ģ": 122614, + "髪": 122615, + "Ù쨵ÙĦ": 122616, + "ãģĻãģ¹ãģ¦": 122617, + "ево": 122618, + "ê´Ģ리ìŀIJ": 122619, + "ĠìĺĨ": 122620, + "udicots": 122621, + "ÙĪØ±ÙĨ": 122622, + "Ġcelkem": 122623, + "ãĤ¤ãĤº": 122624, + "ìĬ¤ê°Ģ": 122625, + "販売": 122626, + "ĠíĮĮìĿ¼ì²¨ë¶Ģ": 122627, + "뢰": 122628, + "Ġenergie": 122629, + "esidir": 122630, + "Ġmiá»ĩng": 122631, + "éĻ·": 122632, + "ĠгаÑĢа": 122633, + "Ġbiliyor": 122634, + "çį²å¾Ĺ": 122635, + "еÑĤеÑĢб": 122636, + "à¹Īาà¹Ģà¸Ľ": 122637, + "Ġμαζί": 122638, + "ĠzpracovánÃŃ": 122639, + "Ñģм": 122640, + "Ġhala": 122641, + "ĠزÙĪØ¬": 122642, + "ĠвÑĸднов": 122643, + "à¹Ģหมาะ": 122644, + "ĠÐłÐµÑģпÑĥбли": 122645, + "åĩºåĵģèĢħ": 122646, + "Ñīини": 122647, + "ัà¸Ļà¹Ģà¸Ľ": 122648, + "Ġtýden": 122649, + "ĠبÙĬت": 122650, + "ÑģкомÑĥ": 122651, + "ĠÙĩÙĪØ§Ù¾ÛĮÙħ": 122652, + "оÑģнов": 122653, + "鸣": 122654, + "Ġsoukrom": 122655, + "Ġfaiz": 122656, + "Ġdemok": 122657, + "Ġkterém": 122658, + "Ġëħ¹": 122659, + "лаÑĩ": 122660, + "ĠоÑĤвеÑĤÑģÑĤвен": 122661, + "Ġï¼¼:": 122662, + "Ġλο": 122663, + "ÄĮesk": 122664, + "ê°ĢìļĶ": 122665, + "ĠãĥĬ": 122666, + "ĠnhuáºŃn": 122667, + "ĠÑģили": 122668, + "ĠÐľÐ¾Ð½": 122669, + "Ġçap": 122670, + "ĠRowBox": 122671, + "ĠмаÑģÑĤ": 122672, + "ĠÐľÐ°": 122673, + "ĠдÑĢÑĥго": 122674, + "Ġأش": 122675, + "ë°©ìĨ¡": 122676, + "ĠпÑĸдпиÑģ": 122677, + "èĩ¨": 122678, + "åī©": 122679, + "Ġhiá»ĥn": 122680, + "ĠÙĤرارد": 122681, + "istrat": 122682, + "ÐŁÑĸд": 122683, + "ÏĦεÏģα": 122684, + "ĠpozdÄĽ": 122685, + "ĠbaÅŁta": 122686, + "夫人": 122687, + "лини": 122688, + "ĠкаÑĩеÑģÑĤва": 122689, + "Ġkurtul": 122690, + "Ġì¢Į": 122691, + "ãģ«ãģĬãģijãĤĭ": 122692, + "åľ°åįĢ": 122693, + "ĠÑĩаÑģом": 122694, + "ìµľê³ł": 122695, + "Ġngang": 122696, + "اÙĩد": 122697, + "ĠШев": 122698, + "ĠpÅĻitom": 122699, + "Ġchấm": 122700, + "ĠÐľÐµÑģÑĤо": 122701, + "ĠÑģовеÑĢÑĪенно": 122702, + "ÃŃcÃŃ": 122703, + "Ńå·ŀ": 122704, + "åĪĽæĸ°": 122705, + "äºĶæľĪ": 122706, + "ĠاعÙħاÙĦ": 122707, + "ĠвозможноÑģÑĤи": 122708, + "ĠпÑĢодовж": 122709, + "nÄĽt": 122710, + "ĠÐĿапÑĢимеÑĢ": 122711, + "ĠاÙĦدÙħ": 122712, + "Ġà¹ģà¸ļà¸ļ": 122713, + "çĶŁçļĦ": 122714, + "ĠÑħаÑĢÑĩ": 122715, + "ĠSonuç": 122716, + "Ġrůzné": 122717, + "Ġاذ": 122718, + "à¸ķà¸Ńà¸ļ": 122719, + "PÅĻed": 122720, + "ĠдеÑĢевÑıн": 122721, + "ë´IJ": 122722, + "ĠëĬIJëĤ": 122723, + "جÙħÙĬع": 122724, + "ĠBöylece": 122725, + "èµı": 122726, + "ĠبسÙĬ": 122727, + "ĠÃĩaÄŁ": 122728, + "ĠتاÛĮ": 122729, + "ĠnejvyššÃŃ": 122730, + "èĸ©": 122731, + "ÏĩεδÏĮν": 122732, + "Ġëĵ±ìĿĺ": 122733, + "eyh": 122734, + "æĸĻçIJĨ": 122735, + "اتÙĩ": 122736, + "æī«": 122737, + "Ġå©": 122738, + "ĠпÑĢивед": 122739, + "æī¶": 122740, + "Ġ견": 122741, + "ĠاÙħÛĮر": 122742, + "ायल": 122743, + "æ¡ij": 122744, + "à¸Ļà¹Ģà¸ķ": 122745, + "илакÑĤи": 122746, + "å®¶ä¼Ļ": 122747, + "Ġbulunuyor": 122748, + "ysa": 122749, + "ÂĨ": 122750, + "ĠBİR": 122751, + "íĨ¤": 122752, + "à¤Ĥà¤Ĺà¤łà¤¨": 122753, + "ÎĶεν": 122754, + "à¥Įà¤ķर": 122755, + "éĸĵãģ«": 122756, + "Ġмоб": 122757, + "ĠMorav": 122758, + "è§ĦåĪĴ": 122759, + "ĠÑģвÑĸÑĤÑĸ": 122760, + "ults": 122761, + "ĠzemÃŃ": 122762, + "ÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł": 122763, + "ĠÐŁÐ¾Ð¿": 122764, + "ãģĤãģĴ": 122765, + "Ġpomoci": 122766, + "ĠзмÑĸÑģÑĤ": 122767, + "主人": 122768, + "ĠSı": 122769, + "ãĥĽãĥĨãĥ«": 122770, + "ĠÑĥвагÑĥ": 122771, + "廳": 122772, + "à¹Ģมà¸ķร": 122773, + "estli": 122774, + "Ġloạt": 122775, + "ãĤ¢ãĥ¼": 122776, + "ĠÎĶε": 122777, + "Ġbunları": 122778, + "ĠçĤ¹åĩ»": 122779, + "ĠBÃłi": 122780, + "Ġä¸ĸ": 122781, + "Ġê³łê°ľë¥¼": 122782, + "ĠÐŃÑĤоÑĤ": 122783, + "Ġmemnun": 122784, + "Ġ।Ċ": 122785, + "ĠиÑģÑĤоÑĢии": 122786, + "Ġì°©": 122787, + "१९": 122788, + "ĠÐŀднак": 122789, + "Ġvede": 122790, + "ÏĨÎŃÏģει": 122791, + "âb": 122792, + "çĬ¶åĨµ": 122793, + "åįıè®®": 122794, + "Ġê°Ŀ": 122795, + "евид": 122796, + "jmu": 122797, + "ĠколиÑĩеÑģÑĤва": 122798, + "ÃĽ": 122799, + "iÄįe": 122800, + "Ġfirmalar": 122801, + "èĢĢ": 122802, + "кÑĸн": 122803, + "ĠêµŃ민": 122804, + "Ġ목ë¡Ŀ": 122805, + "ĠÎļαÏģ": 122806, + "Ġhissed": 122807, + "K": 122808, + "ĠTên": 122809, + "ĠÑĤÑĭÑģÑıÑĩ": 122810, + "ØŃÙĬØŃ": 122811, + "Ġвполне": 122812, + "ĠSınıf": 122813, + "Ġμην": 122814, + "Ġíij¸": 122815, + "ĠاÙĦطبÙĬ": 122816, + "ĠزÛĮب": 122817, + "ĠпÑĥ": 122818, + "Ġpraž": 122819, + "ìĹĨëĬĶ": 122820, + "θÏģÏī": 122821, + "Ġiçi": 122822, + "ĠбÑĸл": 122823, + "ÐłÑij": 122824, + "Ġì¶ķ구": 122825, + "Ġlạ": 122826, + "ĠãĥķãĤ¡": 122827, + "Ġèĸ": 122828, + "μαÏĦο": 122829, + "éĩijå±ŀ": 122830, + "áli": 122831, + "ĠÙ쨣": 122832, + "ĠKarlov": 122833, + "ĠZáp": 122834, + "ãĥªãĥ³ãĤ°": 122835, + "abilmek": 122836, + "ĠСи": 122837, + "ĠcÃŃrk": 122838, + "Ġká»ĭp": 122839, + "Ġà¤ijनल": 122840, + "ĠÙĪØŃØ¯Ø©": 122841, + "ãĥĭãĥĥãĤ¯": 122842, + "ĠnÆ°á»Ľng": 122843, + "ĠакÑĤÑĥ": 122844, + "å¸ĿåĽ½": 122845, + "Ġnázev": 122846, + "ĠÑĢемонÑĤ": 122847, + "ĠÑĢинкÑĥ": 122848, + "ĠÏĢάνÏī": 122849, + "ÏĦικο": 122850, + "ĠìĤ¼ìĦ±": 122851, + "ĠÑģимпÑĤомÑĭ": 122852, + "ĠÑĢанÑĸÑĪе": 122853, + "ĠJá": 122854, + "ĠÑģÑĩиÑĤаеÑĤÑģÑı": 122855, + "ĠпоÑĢÑĸв": 122856, + "ĠÐľÐ°Ð»": 122857, + "éĿ¢ç§¯": 122858, + "ĠÙĦغ": 122859, + "ĠجشÙĨ": 122860, + "Ġнедели": 122861, + "Ġì¦Ŀê°Ģ": 122862, + "ãĨįëıĻ": 122863, + "Ġlượt": 122864, + "ĠÄIJá»ĭnh": 122865, + "Ġà¸Ńà¸Ńà¸Ļà¹Ħลà¸Ļ": 122866, + "Ġyaparak": 122867, + "ĠÄijai": 122868, + "ĠоÑĦиÑĨи": 122869, + "ĠεμÏĢ": 122870, + "ξειÏĤ": 122871, + "ĠконÑĦеÑĢен": 122872, + "Ġarası": 122873, + "à¸ķา": 122874, + "Ġë´IJ": 122875, + "ована": 122876, + "ì§Ģê°Ģ": 122877, + "ĠVám": 122878, + "à¤¿à¤ľà¤¨": 122879, + "Ġç¼ĸè¾ij": 122880, + "ζÏĮ": 122881, + "ĠÏĦÏģÏĮ": 122882, + "Ġücretsiz": 122883, + "ĠکاÙħÙĦا": 122884, + ":::/": 122885, + "à¹ĮĊĊ": 122886, + "Ġéĸ¢éĢ£": 122887, + "Ġkara": 122888, + "Ġбезпеки": 122889, + "ĠzmÄĽny": 122890, + "Ġê¿Ī": 122891, + "vrd": 122892, + "liÄŁine": 122893, + "ĠاÙĨتخابات": 122894, + "ĠдоÑģвÑĸд": 122895, + "Ġkterého": 122896, + "енÑĤом": 122897, + "ê³µë¶Ģ": 122898, + "ìłĿ": 122899, + "Ġë§Į족": 122900, + "Ġæij": 122901, + "åĩºåı£": 122902, + "建议": 122903, + "оÑĤÑı": 122904, + "ĠÒij": 122905, + "íĶĦë¡ľ": 122906, + "Ġgió": 122907, + "ãĤ·ãĤ§": 122908, + "ĠλεÏĢ": 122909, + "íķĺ볤": 122910, + "Ġyoksa": 122911, + "Ġistih": 122912, + "ï¼¶": 122913, + "ĠاÙĦعÙħ": 122914, + "Ġکارگرد": 122915, + "à¹Ģà¸ŀราะ": 122916, + "Ġnových": 122917, + "ĠÑģна": 122918, + "Ġsana": 122919, + "वत": 122920, + "Ä±ÅŁman": 122921, + "åı¦å¤ĸ": 122922, + "ì¶ľìŀ¥ìĥµ": 122923, + "婦": 122924, + "ĠкоÑĪÑĤÑĸв": 122925, + "ĠÙĪØ§ÙĦÙĨ": 122926, + "ĠباÙĦØ¥": 122927, + "ĠæĬĢ": 122928, + "Ġмноже": 122929, + "à¥Ĥड": 122930, + "ĠCục": 122931, + "Ġevet": 122932, + "èģĶåIJĪ": 122933, + "Ġ³³Ġ³³Ġ³³Ġ³³": 122934, + "çļĦå¿ĥ": 122935, + "Ġdáng": 122936, + "اÛĮسÙĩ": 122937, + "Ġerken": 122938, + "泡": 122939, + "ائب": 122940, + "Ġyapıldı": 122941, + "ĠQuản": 122942, + "æĹ¶ä»£": 122943, + "ìĽ¨ìĸ´": 122944, + "ĠгÑĸÑĢ": 122945, + "okoj": 122946, + "Ùĥرة": 122947, + "Ñİк": 122948, + "Ġvýj": 122949, + "Ġhodiny": 122950, + "ĠелекÑĤÑĢон": 122951, + "mıyor": 122952, + "ĠìŀĪëĭ¤ëĬĶ": 122953, + "à¹īà¹ī": 122954, + "иÑĤелÑĮное": 122955, + "Ġyıllar": 122956, + "Äıte": 122957, + "ĠÄįinnost": 122958, + "ุà¸ĵà¸łà¸²à¸ŀ": 122959, + "íĵ¨": 122960, + "нг": 122961, + "ูรà¸ĵ": 122962, + "ĠпоÑĢÑıдке": 122963, + "Ġëĭ¹ìĭľ": 122964, + "ĠÐľÐ¾Ñģков": 122965, + "Ġkred": 122966, + "urum": 122967, + "ĠÑĤÑı": 122968, + "Ú©ÙĨاÙĨ": 122969, + "дии": 122970, + "ÑĢимÑĸн": 122971, + "ĠоÑĢганизм": 122972, + "ĠéĽĨ": 122973, + "ιÏĥÏĦο": 122974, + "ä¿¡ç͍": 122975, + "åįģåĽĽ": 122976, + "à¹Īà¹ĥà¸Ĭ": 122977, + "ĠÑĥвид": 122978, + "ัà¸ĩà¸ģล": 122979, + "åı¦ä¸Ģ": 122980, + "ãĥ«ãĥķ": 122981, + "ัà¸ļà¸Ľà¸£": 122982, + "ĠÃľst": 122983, + "説æĺİ": 122984, + "вай": 122985, + "аÑĩе": 122986, + "欣": 122987, + "Ġkatıl": 122988, + "ĠCem": 122989, + "ĠاÙĦجÙĩ": 122990, + "ĠгÑĢÑĥз": 122991, + "ĠзаÑģÑĤав": 122992, + "cılar": 122993, + "ĠÑħоÑĤел": 122994, + "ĠsnÃŃm": 122995, + "ï¼Į被": 122996, + "ĠвиÑī": 122997, + "Ġdemokrat": 122998, + "à¥ĩà¤Łà¤°": 122999, + "åij¨å¹´": 123000, + "Ġodpad": 123001, + "ĠdaÅĪ": 123002, + "Ġ代": 123003, + "à¹ĩà¸Ļà¸Ń": 123004, + "ĠÑģколÑĮко": 123005, + "ĠαÏĨ": 123006, + "ĠpÅĻesvÄĽd": 123007, + "Ġåĵģ": 123008, + "ĠинÑĦоÑĢмаÑĨии": 123009, + "çĽĹ": 123010, + "ãģ¾ãģ¨": 123011, + "ĠÑģамов": 123012, + "Ġpocit": 123013, + "Ġíݸì§ij": 123014, + "ĠÑģмеÑģÑĮ": 123015, + "ĠpojiÅ¡tÄĽnÃŃ": 123016, + "ãģ®ãĤĤ": 123017, + "à¹Īาà¸ģาร": 123018, + "ĠÛĮÙĪÙĨ": 123019, + "Ġ기ìĸµ": 123020, + "ickými": 123021, + "alace": 123022, + "éĽ»å½±": 123023, + "ÑİваннÑı": 123024, + "缸åIJĮ": 123025, + "ĠãĢĥ": 123026, + "ĠдокÑĥменÑĤÑĸв": 123027, + "ï¼¹": 123028, + "åΰåºķ": 123029, + "óz": 123030, + "ĠAhmet": 123031, + "ĠÙħساØŃت": 123032, + "Ġhlavou": 123033, + "ülebilir": 123034, + "ãĢĤä½ł": 123035, + "à¹ĩà¸ģà¸Ĭาย": 123036, + "¤¤": 123037, + "ĠæĦı": 123038, + "ĠcháºŃm": 123039, + ".д": 123040, + "Ġcca": 123041, + "Ġolumsuz": 123042, + "Âŀ": 123043, + "çĬ¬": 123044, + "ĠпоÑģÑĤоÑıнно": 123045, + "Ġ.**************Ċ": 123046, + "Ġاستر": 123047, + "ĠдалÑĮней": 123048, + "ůr": 123049, + "ä¿ĿèŃ·": 123050, + "боÑĢаÑĤоÑĢ": 123051, + "÷": 123052, + "ÏĥÏĦαν": 123053, + "ĠÙģÙĬÙĦÙħ": 123054, + "çek": 123055, + "ìŀIJ기": 123056, + "Ġæ¥Ń": 123057, + "нÑĸп": 123058, + "èīĩ": 123059, + "Ġmoci": 123060, + "ìľµ": 123061, + "리그": 123062, + "ĠÐļо": 123063, + "éĤ£éĩĮ": 123064, + "ĠСÑĤаÑĢ": 123065, + "ĠتÙĪØ§ÙĨÛĮد": 123066, + "Ġnguyá»ĩn": 123067, + "Ġสามารà¸ĸ": 123068, + "ÑĸÑĩна": 123069, + "Ġ被": 123070, + "ุà¸ķสาหà¸ģรรม": 123071, + "Ġعصر": 123072, + "ĠÃľNİVERS": 123073, + "Ġtehdy": 123074, + "ĠÙĪØµÙĦات": 123075, + "ä¿Ŀè¯ģ": 123076, + "ĠEudicots": 123077, + "ĠÎłÎŃ": 123078, + "建è¨Ń": 123079, + "ĠìłĦêµŃ": 123080, + "ĠØŃÛĮ": 123081, + "ãĤ¤ãĥĦ": 123082, + "ĠØŃاصÙĦ": 123083, + "ĠجÙĨÙĪØ¨ÛĮ": 123084, + "ãĢģæĹ¥æľ¬": 123085, + "ÃĻ": 123086, + "Ġà¸Ĺาà¸ĩ": 123087, + "ĠÙĨØŃÙĪ": 123088, + "اÙĩÙĬÙħ": 123089, + "å¾Įãģ«": 123090, + "à¸Īะà¹Ħà¸Ķ": 123091, + "åĩłä¸ª": 123092, + "à¥ģà¤ģ": 123093, + "ëĮĢìĿĺ": 123094, + "ĠlÃłn": 123095, + "ìĽĶë¶ĢíĦ°": 123096, + "Æł": 123097, + "Ġеди": 123098, + "Ġspis": 123099, + "æľīä»Ģä¹Ī": 123100, + "Ġnebyla": 123101, + "Ġíķ´ìϏ": 123102, + "ë¡ľë¶ĢíĦ°": 123103, + "аÑĢÑħ": 123104, + "lili": 123105, + "Ġíķĺ루": 123106, + "maması": 123107, + "ÑĩаеÑĤ": 123108, + "ĠØŃاÙĦØ©": 123109, + "ĠBölüm": 123110, + "缸éĹľ": 123111, + "ĠдÑĢÑĥгими": 123112, + "çĽ£çĿ£": 123113, + "à¥Īà¤ľ": 123114, + "ĠعبداÙĦÙĦÙĩ": 123115, + "Ġè¿ŀ": 123116, + "ĠÐľÐ¸Ð½": 123117, + "Ġ기ëĭ¤": 123118, + "Ġ공격": 123119, + "è¡Įåĭķ": 123120, + "ामà¤ķ": 123121, + "æ±Ĥè´Ń": 123122, + "模åŀĭ": 123123, + "ÑģоÑĢ": 123124, + "rane": 123125, + "à¹ĩà¸Īà¸ŀระ": 123126, + "ĠÙħسÛĮر": 123127, + "è£ħç½®": 123128, + "ìķ¤": 123129, + "nÄĽjÅ¡ÃŃch": 123130, + "αλÏįÏĦε": 123131, + "ĠHakk": 123132, + "访éĹ®": 123133, + "ĠÑĤеÑĩ": 123134, + "ĠLá»ĭch": 123135, + "ĠدشÙħÙĨ": 123136, + "ÎĮ": 123137, + "ĠÏĢε": 123138, + "Ġзамов": 123139, + "Ġbirim": 123140, + "ãĤ·ãĤ¹ãĥĨãĥł": 123141, + "ĠÏĢÏģοÏĬ": 123142, + "ĬìĿĢ": 123143, + "виг": 123144, + "ĠëıħìĿ¼": 123145, + "ĠÑĢеволÑİ": 123146, + "Ġé¦Ļ港": 123147, + "Ġlez": 123148, + "ĠبÛĮÙħار": 123149, + "Ġduygu": 123150, + "Ġ뼰": 123151, + "Ġamacı": 123152, + "à¥įयप": 123153, + "ĠìŀIJìĦ¸": 123154, + "اÙĪÛĮر": 123155, + "Ġspole": 123156, + "ÃĸL": 123157, + "Ġجع": 123158, + "ÙĦÛĮÙħ": 123159, + "ãģªãģ©ãģ®": 123160, + "à¸Ľà¸£à¸°à¸ªà¸ļ": 123161, + "ĠnaÅ¡ich": 123162, + "ĠпÑĢедÑģÑĤавлÑıеÑĤ": 123163, + "Ġздоб": 123164, + "Ġobou": 123165, + "Ø®ÙĪØ§ÙĨ": 123166, + "ãĥ¬ãĥĥãĥĪ": 123167, + "одейÑģÑĤв": 123168, + "کرÛĮ": 123169, + "ĠاتاÙĤ": 123170, + "ĠÑįкÑģплÑĥаÑĤа": 123171, + "ï½¢": 123172, + "ĠÙĦÙĦØ¥": 123173, + "ĠاÙĦÙĨظاÙħ": 123174, + "ĠíĶĦëŀijìĬ¤": 123175, + "ısıt": 123176, + "åŃĻ": 123177, + "Ġžádný": 123178, + "ÙĤÙī": 123179, + "ัà¸ģà¹Ģร": 123180, + "Ġë²łìĬ¤íĬ¸": 123181, + "Ġãĥ«": 123182, + "åıĶ": 123183, + "nické": 123184, + "ĠειÏĥ": 123185, + "ãĥ«ãĥī": 123186, + "ĠدارÙħ": 123187, + "Ġгем": 123188, + "ĠåѸ": 123189, + "ानसà¤Ń": 123190, + "ализи": 123191, + "ованÑĸ": 123192, + "Ġобо": 123193, + "ìłĦìĹIJ": 123194, + "ĠSinh": 123195, + "ĠÙĨع": 123196, + "ĠоблаÑģ": 123197, + "ÏħÏĢ": 123198, + "èĥ¶": 123199, + "Ġazalt": 123200, + "åħ¨éĿ¢": 123201, + "ĠKromÄĽ": 123202, + "ĠCz": 123203, + "æĬ¥åIJį": 123204, + "ĠnásledujÃŃcÃŃ": 123205, + "ĠнапÑĢиклад": 123206, + "ãģªãģijãĤĮãģ°": 123207, + "à¸Ńาย": 123208, + "çľĭçľĭ": 123209, + "Ġà¸ģรà¸ģà¸İ": 123210, + "ednou": 123211, + "ازÙĦ": 123212, + "ãĢģæľ¬": 123213, + "еÑģи": 123214, + "Ġtarz": 123215, + "ãĢĢï¾Ĭ": 123216, + "Ġrozum": 123217, + "ãĤ«ãĥ¼ãĥī": 123218, + "Ġà¤ĩà¤ķ": 123219, + "ĠprostÄĽ": 123220, + "ĠÎĵκ": 123221, + "ç©´": 123222, + "ĠHük": 123223, + "lavÃŃ": 123224, + "ê¿": 123225, + "鸡": 123226, + "ĠвозникаеÑĤ": 123227, + "ÑŁÑŁÑŁ": 123228, + "Ġпонима": 123229, + "ÐŁÐŀ": 123230, + "ãģĶãģĸãģĦãģ¾ãģĻ": 123231, + "ãģħ": 123232, + "Ġtrval": 123233, + "Ġдалеко": 123234, + "ĠÙĨÙĬز": 123235, + "ĠвÑĭÑıв": 123236, + "ิà¸Ĺยา": 123237, + "Ġlá»Ĺ": 123238, + "à¹Ģสà¸Ļ": 123239, + "ĠÑģÑĤенÑĭ": 123240, + "à¥įडल": 123241, + "Ġjednotlivých": 123242, + "ĠпÑĢиблиз": 123243, + "ikat": 123244, + "Ġподав": 123245, + "رÛĮز": 123246, + "ĠØ¢ÙĨجا": 123247, + "社æľĥ": 123248, + "Ġà¤ľà¤¨à¤µà¤°": 123249, + "Ġaile": 123250, + "à¸µà¸Ľ": 123251, + "Ġèħ": 123252, + "ãģ§ãģĹãĤĩãģĨ": 123253, + "СÐŀ": 123254, + "ãĢģãĢĬ": 123255, + "ìĿ¼ë³¸": 123256, + "ovanou": 123257, + "νÏĮ": 123258, + "å±¥": 123259, + "عÙĦÙĤ": 123260, + "Ġìī½": 123261, + "Ġглиб": 123262, + "Ġê²ĥìŀħëĭĪëĭ¤": 123263, + "ĠнеобÑħодимоÑģÑĤи": 123264, + "ĠتخصصÛĮ": 123265, + "اسر": 123266, + "ï¼Į说": 123267, + "ĠÐĿÑĸ": 123268, + "Ġvyrob": 123269, + "ÑĪÑĥÑİ": 123270, + "æĪ¿å±ĭ": 123271, + "ÂłÐĹ": 123272, + "à¹Ģà¸ŀล": 123273, + "åĨħéĥ¨": 123274, + "ĠدÙĦار": 123275, + "ĠпÑĤи": 123276, + "Å¡ti": 123277, + "ĠaraÅŁtırma": 123278, + "Ġзнаком": 123279, + "Ġελλην": 123280, + "Ġấm": 123281, + "ÑĢак": 123282, + "ãĤŃãĥ¥": 123283, + "ĠtháºŃn": 123284, + "èŃľ": 123285, + "ëªħìĿĺ": 123286, + "Ġyeter": 123287, + "ĠнаÑģлед": 123288, + "ĠÐļан": 123289, + "ĠвÑĭбиÑĢа": 123290, + "ĠΣÏĩ": 123291, + "ĠÑĤеÑĢмÑĸн": 123292, + "Ġæ´»": 123293, + "ĠاÙĦتÙģ": 123294, + "ĠJapon": 123295, + "éĤª": 123296, + "ë¶ĦìĦĿ": 123297, + "ĠлиÑĨо": 123298, + "Ġmê": 123299, + "à¸Ħวร": 123300, + "Ġà¤ħà¤Ĺल": 123301, + "ĠÙĩج": 123302, + "룬ìļ´": 123303, + "ĠвойнÑĭ": 123304, + "اÙĪØ±Ø²ÛĮ": 123305, + "ĠÑģпÑĢÑı": 123306, + "çĦ¼": 123307, + "è¢ĸ": 123308, + "Ġiçeren": 123309, + "Ġëħ¸ëŀĺ": 123310, + "ĠЧеÑĢез": 123311, + "ÙĪØ¬ÙĪØ¯": 123312, + "ÑıÑĤие": 123313, + "à¸Ńลลาร": 123314, + "è·¨": 123315, + "ĠMilli": 123316, + "ä»¶äºĭ": 123317, + "ĠæľĿ": 123318, + "βολή": 123319, + "Ġков": 123320, + "ĠØ´ÙĩÛĮد": 123321, + "ä¸ĭåİ»": 123322, + "Ġìłķìĭł": 123323, + "оÑĩкÑĥ": 123324, + "ï¼Į便": 123325, + "γκε": 123326, + "ĠÙħباش": 123327, + "Ġayında": 123328, + "Ġä»»": 123329, + "ÑģÑĤоÑĢÑĸÑı": 123330, + "ä¸ŃåѦ": 123331, + "縮": 123332, + "ĠÑĦÑĸл": 123333, + "ãĢģãĤĦ": 123334, + "Ġæĺ¥": 123335, + "Ġterör": 123336, + "Ġповинен": 123337, + "Ġmilionů": 123338, + "ĠÙģØ§Ø±Ø³": 123339, + "Ġввод": 123340, + "طاÙĦ": 123341, + "Ġê¶ģê¸Ī": 123342, + "Ġukáz": 123343, + "çĶľ": 123344, + "æļĤ": 123345, + "صت": 123346, + "Ðļогда": 123347, + "Ġमल": 123348, + "άνα": 123349, + "ĠдокÑĤоÑĢ": 123350, + "ĠкоммÑĥ": 123351, + "ĠпÑĸдÑģ": 123352, + "Ġà¸ģรà¸ģà¸İาà¸Ħม": 123353, + "ÂłÐ³": 123354, + "Ġöne": 123355, + "ĠÄIJá»ģ": 123356, + "äºĭåĭĻ": 123357, + "Ġsrov": 123358, + "Ġάν": 123359, + "ëıĦê°Ģ": 123360, + "acaģım": 123361, + "кол": 123362, + "Ġbá»ĵi": 123363, + "Ġپرداز": 123364, + "Ġä¸ļ": 123365, + "ëĭ¤ìļ´": 123366, + "ĠпÑĢедел": 123367, + "ĠÑĦедеÑĢалÑĮ": 123368, + "ĠاÙĦØ£Ùĥ": 123369, + "ãĢĢãĢĢãĢĢãĢĢĠãĢĢĠãĢĢ": 123370, + "Ġtrấn": 123371, + "Ġдлин": 123372, + "ĠÑĸмп": 123373, + "ĠsmÄĽrem": 123374, + "°ëĭ¤": 123375, + "Ġrừng": 123376, + "iciálnÃŃ": 123377, + "è¡Ĩ": 123378, + "μιο": 123379, + "ĠادارÙĩ": 123380, + "ĠÑĤÑĢÑĮ": 123381, + "Ġİli": 123382, + "มà¸Ļà¸ķร": 123383, + "à¥įवà¤ļ": 123384, + "еÑĢо": 123385, + "ĠKUR": 123386, + "skými": 123387, + "δί": 123388, + "utin": 123389, + "Ġveriler": 123390, + "สà¸ĸาà¸Ļà¸Ĺ": 123391, + "ĠзаÑħодÑĸв": 123392, + "ĠÙ쨱ÙĪØ¯Ú¯Ø§Ùĩ": 123393, + "Ġçͱ": 123394, + "ูà¹ģล": 123395, + "éĥij": 123396, + "ĠJako": 123397, + "ĠÑĢазвиÑĤие": 123398, + "à¤īन": 123399, + "ÙĬدا": 123400, + "Ġà¸ŀà¸¤à¸©à¸łà¸²à¸Ħม": 123401, + "물ìĿĦ": 123402, + "ëłĢ": 123403, + "-ÐĽ": 123404, + "ãĢĤãģĤ": 123405, + "Ġподв": 123406, + "ï¼īï¼ļ": 123407, + "论åĿĽ": 123408, + "ائع": 123409, + "ãĤĴãģĻãĤĭ": 123410, + "Ġأص": 123411, + "Ñĩики": 123412, + "ĠÑģÑĤил": 123413, + "leyici": 123414, + "ÑģилÑĮ": 123415, + "Ġbulundu": 123416, + "ĠÑģеÑĢедови": 123417, + "à¤Ĥर": 123418, + "ĠاÛĮÙĨجا": 123419, + "åľŃåľŃ": 123420, + "ĠmyÅ¡len": 123421, + "ĠÑĢозвиÑĤок": 123422, + "ĠiyileÅŁ": 123423, + "ĠвÑĸз": 123424, + "ëĤĺ무": 123425, + "æĦıè§ģ": 123426, + "ιÏĥÏĦη": 123427, + "ãĥĥãĥĦ": 123428, + "äºĭæķħ": 123429, + "madıģı": 123430, + "Ġà¤ħपर": 123431, + "ĠÚĨرخ": 123432, + "Ġплав": 123433, + "以æĿ¥": 123434, + "Ġë©Ģ": 123435, + "Tuy": 123436, + "ãĥ¼ãĥį": 123437, + "ĠизÑĥÑĩ": 123438, + "ĠstÅĻednÃŃ": 123439, + "课ç¨ĭ": 123440, + "Ġê·¸ëħĢëĬĶ": 123441, + "ĠдоговоÑĢÑĥ": 123442, + "ĠÄijá»ĭch": 123443, + "Ġkararı": 123444, + "åIJ´": 123445, + "ÙĥاÙħ": 123446, + "ĠпоÑĤол": 123447, + "вок": 123448, + "ĠDüz": 123449, + "Τα": 123450, + "åµ": 123451, + "âĢĻna": 123452, + "адж": 123453, + "ĠdÅĻÃŃve": 123454, + "梨": 123455, + "ĠAvust": 123456, + "åĬĽãĤĴ": 123457, + "à¹Ģà¸ģล": 123458, + "Ġпобед": 123459, + "ĠпÑĢиÑĩ": 123460, + "ĠÐijÑĸ": 123461, + "åѤ": 123462, + "ĠÐłÐµÐ³": 123463, + "ĠyetiÅŁ": 123464, + "ĠнеÑİ": 123465, + "ĠbÃŃl": 123466, + "ìĹĨìĿĮ": 123467, + "Ġİtalya": 123468, + "ÐĴÑģе": 123469, + "å¾Įãģ®": 123470, + "ĠjejÃŃm": 123471, + "ĠвиглÑıдÑĸ": 123472, + "огÑĢад": 123473, + "Ġbohat": 123474, + "Ġåħĭ": 123475, + "ĠдиÑĤини": 123476, + "лÑıÑĤоÑĢ": 123477, + "мага": 123478, + "ëĭĪìĬ¤": 123479, + "ĠÐłÐ°Ð´Ð¸": 123480, + "ÏĢοÏħÏģγ": 123481, + "&ZeroWidthSpace": 123482, + "Ġstruk": 123483, + "æIJŀ": 123484, + "ĠãģĿãģ®ä»ĸ": 123485, + "ìĿ¸ìĿĦ": 123486, + "ĠпÑĢовеÑģÑĤи": 123487, + "漫çĶ»": 123488, + "Ġçݩ家": 123489, + "ĠÙĪØ±Ø²": 123490, + "ĠÑģвоÑĹм": 123491, + "ĠLRV": 123492, + "ิà¸ķà¸ł": 123493, + "सत": 123494, + "ĠíĿĶ": 123495, + "âĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹı": 123496, + "ĠtvoÅĻÃŃ": 123497, + "ĠÐŁÐŀ": 123498, + "é«ĺ度": 123499, + ".hwp": 123500, + "à¸ķำà¸ļล": 123501, + "Ġدس": 123502, + "ìĪĺê°Ģ": 123503, + "ìĶ©": 123504, + "ï¼īãĢĤĊ": 123505, + "æĭ³": 123506, + "Ġlô": 123507, + "ĠKültür": 123508, + "اطعة": 123509, + "Ġkuchy": 123510, + "Ġstroj": 123511, + "μενο": 123512, + "ĠконÑģÑĤÑĢÑĥкÑĨии": 123513, + "å°ıåѦ": 123514, + "Ġåįļ": 123515, + "ĠèĢĥ": 123516, + "Ġasıl": 123517, + "æĪijåĢij": 123518, + "خراج": 123519, + "ĠOnun": 123520, + "Ġç¾İåĽ½": 123521, + "à¥Ĥबर": 123522, + "Ġmuži": 123523, + "å§«": 123524, + "Ġвб": 123525, + "Ġдоме": 123526, + "Ġам": 123527, + "Ġkuru": 123528, + "æ±Ĺ": 123529, + "lediÄŁi": 123530, + "Ġvẽ": 123531, + "å¾ĵ": 123532, + "ĠгÑĥбеÑĢ": 123533, + "ĠÑģÑĤановиÑĤÑĮ": 123534, + "ĠzemÄĽdÄĽl": 123535, + "ÙĦÙĦ": 123536, + "Ġramen": 123537, + "ĠprůbÄĽhu": 123538, + "Ġblok": 123539, + "ýval": 123540, + "vou": 123541, + "νά": 123542, + "ëĶĶìĭľ": 123543, + "ÑĨионнÑĭе": 123544, + "Ġê²ĮìĭľíĮIJ": 123545, + "ãĥ³ãĥĩãĤ£": 123546, + "ä¸Ģ级": 123547, + "иÑĩа": 123548, + "ĠسرÛĮاÙĦ": 123549, + "ilin": 123550, + "ायन": 123551, + "ÙĨÙĪÛĮس": 123552, + "ĠÐĶи": 123553, + "ĠادبÛĮ": 123554, + "ĠÑĥдов": 123555, + "ĠÐĹам": 123556, + "à¥ģà¤Ńव": 123557, + "Ñģок": 123558, + "ĠÑĢайоне": 123559, + "ĠEK": 123560, + "æĤī": 123561, + "Ġsorumlu": 123562, + "ĠzvyÅ¡": 123563, + "à¹Ģà¸ĭà¸Ńร": 123564, + "ináÅĻ": 123565, + "Ġudrž": 123566, + "новид": 123567, + "ĠspoleÄįnÄĽ": 123568, + "æĪIJäºĨ": 123569, + "D": 123570, + "ัà¸ŀà¸Ĺ": 123571, + "аÑĪа": 123572, + "ĠÙĨادÙĬ": 123573, + "à¹ĥà¸Ļà¸Ĺ": 123574, + "å¡ļ": 123575, + "Ġسک": 123576, + "ãĥģãĥ¥": 123577, + "ĠмаÑĢÑĪ": 123578, + "аленнÑı": 123579, + "ĠØŃÙħاÛĮت": 123580, + "ãĥ³ãĤ¸": 123581, + "รษà¸IJ": 123582, + "ĠкÑĢем": 123583, + "ĠKažd": 123584, + "ê½": 123585, + "Ġparlament": 123586, + "ĠÅŁun": 123587, + "Ġkys": 123588, + "ÏĦÏĤ": 123589, + "ê°ľìĿĺ": 123590, + "Ġvelice": 123591, + "Ġcestu": 123592, + "ظة": 123593, + "è¯Ĭ": 123594, + "Ġút": 123595, + "ĠØ®ÙĪØ±": 123596, + "ĠТе": 123597, + "ĠоблаÑģÑĤ": 123598, + "à¹Īà¸Ńà¸ķ": 123599, + "ĠAcadem": 123600, + "ãĢĤæľ¬": 123601, + "Ġ風": 123602, + "Ñģен": 123603, + "ãĥ¢ãĥĩãĥ«": 123604, + "ĠзавданнÑı": 123605, + "ãģ¾ãĤĮ": 123606, + "моÑĤÑĢеÑĤÑĮ": 123607, + "Ġkhá»ķ": 123608, + "à¹Īร": 123609, + "درس": 123610, + "ĠÄĮeskosloven": 123611, + "Ġ计": 123612, + "ĠÑĤаком": 123613, + "ĠÙĦاعب": 123614, + "ĠMuhammed": 123615, + "ĠÙħÙĦÙģ": 123616, + "ĠÙĪØ³ÙĦÙħ": 123617, + "ãĤ·ãĥ£ãĥ«": 123618, + "ĠокÑĢа": 123619, + "à¥ģमत": 123620, + "ĠëĪĦ구": 123621, + "Ġnedeni": 123622, + "ĠëĤłì§ľ": 123623, + "/km": 123624, + "Ġдемон": 123625, + "ĠصÙĨاÛĮع": 123626, + "masından": 123627, + "åīįãģ®": 123628, + "æĪIJ绩": 123629, + "लà¤Ĺ": 123630, + "ĠåĮħ": 123631, + "à¸Ńà¸ģà¸Īาà¸ģà¸Ļ": 123632, + "ادا": 123633, + "Ġaylık": 123634, + "ĠÙħÙĤد": 123635, + "Ġönemlidir": 123636, + "ĠìĪľê°Ħ": 123637, + "Ġdinh": 123638, + "Ġnákup": 123639, + "istické": 123640, + "åºŁ": 123641, + "ìĬ¤íĨł": 123642, + "Ġdny": 123643, + "ĠìŀĪëıĦë¡Ŀ": 123644, + "ìĽIJìĿĺ": 123645, + "ãĥķãĥ¬": 123646, + "poz": 123647, + "Ġев": 123648, + "ĠdÃ¼ÅŁÃ¼r": 123649, + "à¥įरà¤ļ": 123650, + "Ġê²°íĺ¼": 123651, + "ĠÑĨенÑĤÑĢа": 123652, + "åŁĭ": 123653, + "ï¿£ï½Ģ": 123654, + "æŃ¦åύ": 123655, + "à¹Īาà¸Ļมา": 123656, + "Ġरव": 123657, + "Ùijد": 123658, + "μÎŃνοι": 123659, + "Ġë§IJìĶĢ": 123660, + "ĠpoÅĻad": 123661, + "Ġبغ": 123662, + "ĠÏĮλα": 123663, + "à¹īà¹Ħà¸Ĥ": 123664, + "à¹Ģà¸ģาะ": 123665, + "Ġbạc": 123666, + "Ġdá": 123667, + "dÄĽla": 123668, + "Ġteb": 123669, + "Ġkèo": 123670, + "ãĤıãĤĮ": 123671, + "Ġistiyorum": 123672, + "λήÏĤ": 123673, + "ÐIJв": 123674, + "Ġasla": 123675, + "Ġperformans": 123676, + "ĠVáclav": 123677, + "ÏģίαÏĤ": 123678, + "ĠtÄĽl": 123679, + "æĮĻ": 123680, + "оба": 123681, + "ãģijãĤĮãģ©": 123682, + "Ġë͏": 123683, + "ÙĪØ§Ø¡": 123684, + "ĠÚ©ÙĪØ¯Ú©Ø§ÙĨ": 123685, + "ĠплиÑĤ": 123686, + "Ġbilir": 123687, + "Ñĥже": 123688, + "ÏĦÎŃλε": 123689, + "Ġà¤Ĩà¤ķर": 123690, + "ĠÑĤÑĢÑĥда": 123691, + "ĠدرÛĮا": 123692, + "̧": 123693, + "Ġngá»įt": 123694, + "ÙĨسا": 123695, + "аÑģÑĤи": 123696, + "ï½£": 123697, + "ÂłÐ½Ð°": 123698, + "емÑĭе": 123699, + "ĠسعÙĪØ¯": 123700, + "Ġalım": 123701, + "è´«": 123702, + "åΰçļĦ": 123703, + "Ġkesinlikle": 123704, + "Ġzásad": 123705, + "ĠìĬ¤íĬ¸": 123706, + "Ġdahi": 123707, + "té": 123708, + "åįģåħ«": 123709, + "Ġzayıf": 123710, + "ذار": 123711, + "ĠاÙĬراÙĨ": 123712, + "ĠhodnocenÃŃ": 123713, + "DST": 123714, + "Ġìĸĺ": 123715, + "æĺĩ": 123716, + "éĻ£": 123717, + "Ġкле": 123718, + "Ġuplat": 123719, + "ĠاÙĦتعÙĦÙĬÙħ": 123720, + "ÏĢοίηÏĥη": 123721, + "екÑĤоÑĢа": 123722, + "Ġë§IJìĿ´": 123723, + "ĠÙ쨱ÙĬÙĤ": 123724, + "帮åĬ©": 123725, + "çĶŁãģį": 123726, + "åĨħãģ®": 123727, + "èģĶ缣": 123728, + "гÑĢад": 123729, + "Ġchuyến": 123730, + "ãĤĤãĤĬ": 123731, + "ĠÑĩаÑģÑĤина": 123732, + "ãģªãģıãģª": 123733, + "ÑĶв": 123734, + "ĠÑĦаÑħ": 123735, + "kuk": 123736, + "çĶ·æĢ§": 123737, + "ĠÙħÛĮÙĦادÛĮ": 123738, + "Ġbeden": 123739, + "ê°Ģ를": 123740, + "मर": 123741, + "Ġìĸ´ë¨¸ëĭĪ": 123742, + "èģĶç½ij": 123743, + "Âłmi": 123744, + "Ġzahrn": 123745, + "æ²ĸ": 123746, + "Ġkhuẩn": 123747, + "Ġopráv": 123748, + "ाहà¤ķ": 123749, + "ĠÚ©ÙĪØªØ§Ùĩ": 123750, + "Ġобол": 123751, + "Ġphúc": 123752, + "ránÃŃ": 123753, + "à¥įरथ": 123754, + "æİªæĸ½": 123755, + "Ġволод": 123756, + "ĠspÃŃÅ¡e": 123757, + "ĠmÆ¡": 123758, + "ÑĬек": 123759, + "ngör": 123760, + "à¤īत": 123761, + "ksiyon": 123762, + "аÑĤе": 123763, + "Ġجزء": 123764, + "ávka": 123765, + "ÐĴС": 123766, + "laÅŁma": 123767, + "Ġç¿": 123768, + "à¸Ńาà¸Ĭ": 123769, + "ниÑĨÑĥ": 123770, + "Ġหาà¸ģ": 123771, + "ãģĭãģĹ": 123772, + "íı´": 123773, + "ĠгаÑĢан": 123774, + "ĠÏĥαν": 123775, + "ĠдобавиÑĤÑĮ": 123776, + "ĠÑĢазÑĢеÑĪ": 123777, + "á¾": 123778, + "æĺ¯ä¸ª": 123779, + "μÎŃÏĤ": 123780, + "Ġİmparator": 123781, + "æ¨Ļæºĸ": 123782, + "ÑģÑĤÑĭ": 123783, + "Ġgücü": 123784, + "ĠíĥĢìĿ´": 123785, + "Ġåħ¶ä»ĸ": 123786, + "Ġtông": 123787, + "ĠvedenÃŃ": 123788, + "ëĵľë¡ľ": 123789, + "Ġmesel": 123790, + "ĠÄįe": 123791, + "jde": 123792, + "Ïģεια": 123793, + "ãĤĪãģŃ": 123794, + "ÐłÐĿ": 123795, + "è·Ŀ离": 123796, + "ĠÙĤائÙħØ©": 123797, + "าà¸ļาล": 123798, + "ĠÑģайÑĤÑĸ": 123799, + "Ġरस": 123800, + "ĠÙĤرÙĨ": 123801, + "Ġnávr": 123802, + "Ú©Ùħ": 123803, + "çļĦæīĭ": 123804, + "Ġsorunu": 123805, + "/NÄIJ": 123806, + "nutÃŃm": 123807, + "ĠØ®ÙĪØ±Ø¯": 123808, + "Ġngá»Ŀ": 123809, + "Ġ:.|": 123810, + "Ġbudouc": 123811, + "iÄįky": 123812, + "Ġدرد": 123813, + "ÑĢониÑĩеÑģ": 123814, + "ç¾Ĭ": 123815, + "ĠìķĦë²Ħì§Ģ": 123816, + "ĠKanunu": 123817, + "ĠпÑĢиводиÑĤ": 123818, + "άλÏħÏĪηÏĤ": 123819, + "ĠVladim": 123820, + "Ġalıp": 123821, + "ĠеÑĤап": 123822, + "Ġà¤Ĺलत": 123823, + "ĠراÙĩÙĨÙħ": 123824, + "Ġpozisyon": 123825, + "Ġgöç": 123826, + "èµŀ": 123827, + "Ġмой": 123828, + "Ġγά": 123829, + "ĠìĪł": 123830, + "ĠØ¢ÛĮÙĨدÙĩ": 123831, + "aná": 123832, + "举çľģ": 123833, + "ĠÙħتعدد": 123834, + "ĠåįĬ": 123835, + "ãĢĢãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 123836, + "Ġthá»Ŀ": 123837, + "ĠвдÑĢÑĥг": 123838, + "паÑĤ": 123839, + "ĠпÑĢоведениÑı": 123840, + "ÙĨز": 123841, + "ĠاÙĦبØŃØ«": 123842, + "æģ¢": 123843, + "Ġbaktı": 123844, + "Ġè·¯": 123845, + "Ġзаболеваний": 123846, + "ĠÐķвÑĢоп": 123847, + "Ġtarihli": 123848, + "깨": 123849, + "ĠÚ©ÙĪÙĩ": 123850, + "Ġìĸ´ëł¤": 123851, + "Ġtitul": 123852, + "ĠvydánÃŃ": 123853, + "éĺ¶æ®µ": 123854, + "à¸Īะà¸ķ": 123855, + "ĠмоÑı": 123856, + "ĠкоÑĢол": 123857, + "Ġбанк": 123858, + "วรรà¸ĵ": 123859, + "ĠÙĥسارة": 123860, + "ĠKhoa": 123861, + "ĠÑĥнÑĸвеÑĢÑģиÑĤеÑĤ": 123862, + "ãģ«éĸ¢ãģĻãĤĭ": 123863, + "ruary": 123864, + "Ġà¸Ĥาย": 123865, + "Ġsvaz": 123866, + "ĠشرÙĤ": 123867, + "ĠдÑĭÑħ": 123868, + "Ġизбав": 123869, + "ĠÑıкÑĸй": 123870, + "ĠÎľÎ¿Î½": 123871, + "Ġgön": 123872, + "ĠUkraj": 123873, + "ัà¸Ļà¸Ńà¸Ńà¸ģ": 123874, + "Ġมà¸ģราà¸Ħม": 123875, + "иÑĤов": 123876, + "Ġanalý": 123877, + "ĠоÑĤмеÑĩ": 123878, + "ĠبراÙī": 123879, + "âĪı": 123880, + "ัà¸ģà¸ģ": 123881, + "æĭ¥æľī": 123882, + "ĠÑĸнÑĪого": 123883, + "ĠкомпанÑĸÑĹ": 123884, + "ĠkÅĻes": 123885, + "ĠÑĢабоÑĩ": 123886, + "adÃŃ": 123887, + "ìłł": 123888, + "à¹Ħหà¸Ļ": 123889, + "à¥ģबह": 123890, + "âĢĻdeki": 123891, + "çħ¤": 123892, + "ĠпаÑĢÑĥ": 123893, + "ìĦŃ": 123894, + "ĠнепоÑģÑĢед": 123895, + "Ġİb": 123896, + "Ġà¸ŀฤศà¸Ī": 123897, + "íĭ´": 123898, + "ĠëłĪìĿ´": 123899, + "ĠThá»ķ": 123900, + "ÑıеÑĤ": 123901, + "ائج": 123902, + "»çĴĥ": 123903, + "ÐĴÐŀ": 123904, + "åĸĬ": 123905, + "Ġ第ä¸ī": 123906, + "ĠвокÑĢÑĥг": 123907, + "ÑĩенÑĮ": 123908, + "Ġolanak": 123909, + "tura": 123910, + "ĠÙħÙĬÙĦ": 123911, + "eydi": 123912, + "ĠÙħدÙĬر": 123913, + "Ġnelze": 123914, + "ัวà¸Ńย": 123915, + "ìħľ": 123916, + "Ġhlavu": 123917, + "Ġkoruy": 123918, + "ÑĨин": 123919, + "ĠдиÑģÑĨип": 123920, + "ĠÙħاÙĨد": 123921, + "ĠподÑĢоб": 123922, + "ТÐŀ": 123923, + "ÙĤرار": 123924, + "à¹ģà¸Ļะà¸Ļำ": 123925, + "문ìĿĦ": 123926, + "æĮ¯ãĤĬ": 123927, + "PÅĻi": 123928, + "Ġyên": 123929, + "शà¤ķ": 123930, + "Âłje": 123931, + "ĠÐļонÑģÑĤиÑĤÑĥ": 123932, + "à¥ģह": 123933, + "Ġپا": 123934, + "ìĨĮ를": 123935, + "Ġдела": 123936, + "кид": 123937, + "à¹Ĥà¸Ĭ": 123938, + "커ìĬ¤": 123939, + "dÄĽlen": 123940, + "à¤Ķर": 123941, + "äºİæĺ¯": 123942, + "ĠÙĩÙħÛĮØ´Ùĩ": 123943, + "ĠbaÅŁlam": 123944, + "ĠìĽ¨": 123945, + "Ġdeneyim": 123946, + "Ġüye": 123947, + "ĠνÏĮ": 123948, + "Ġà¤ĸड": 123949, + "nÄĽl": 123950, + "ĠÑģÑĦеÑĢÑĸ": 123951, + "à¸Ńà¸Ķà¸ł": 123952, + "ä¸Ģå¹´": 123953, + "Ġvurgu": 123954, + "Äŀİ": 123955, + "âĢĻĊ": 123956, + "ĠÑĸнÑĪими": 123957, + "ĠзменÑĪ": 123958, + "Ġà¤ĭ": 123959, + "Ġвека": 123960, + "ĠØŃÚ©ÙĪÙħت": 123961, + "ĠتÙħاÙħÛĮ": 123962, + "Ġsmrt": 123963, + "Ġhá»§y": 123964, + "ĠyapılmÄ±ÅŁ": 123965, + "à¹īà¸ľ": 123966, + "ĠYen": 123967, + "ĠÑĥл": 123968, + "ĠSvÄĽt": 123969, + "ัà¸Ħ": 123970, + "ĠmÄĽsÃŃců": 123971, + "денÑĤи": 123972, + "Ġï¾ĺ": 123973, + "ĠполиÑĤи": 123974, + "skyt": 123975, + "ä¹Łæľī": 123976, + "Ġê°ĻìĬµëĭĪëĭ¤": 123977, + "Ġê·¸ëŀĺìĦľ": 123978, + "ÏĦεÏģη": 123979, + "ÑĩеÑĢ": 123980, + "ĠÃľNİVERSİTESİ": 123981, + "à¸ªà¸ł": 123982, + "Ġสร": 123983, + "ानद": 123984, + "ĠaÅŁÄ±rı": 123985, + "λίοÏħ": 123986, + "ĠÙĦÙģ": 123987, + "ÃŃnu": 123988, + "à¸Ńาร": 123989, + "ÑĤÑĥÑĢа": 123990, + "ĠÄįeských": 123991, + "Ġphức": 123992, + "以为": 123993, + "ÏģÏīÏĢα": 123994, + "ĠاÙĨرÚĺÛĮ": 123995, + "»)": 123996, + "alardan": 123997, + "ĠÑģÑĤвоÑĢÑİ": 123998, + "Ġtráv": 123999, + "६": 124000, + "ãģĬãĤĪãģ³": 124001, + "ïľĭ": 124002, + "adil": 124003, + "ĠΤι": 124004, + "ĠëIJ©ëĭĪëĭ¤": 124005, + "ĠεμÏĨ": 124006, + "Ġ구조": 124007, + "ìĹŃìĭľ": 124008, + "ĠاÙĦجاÙħ": 124009, + "主é¢ĺ": 124010, + "ãĤ¹ãĥĿ": 124011, + "ĠìĹŃìĭľ": 124012, + "ĠÚ©Ùħتر": 124013, + "ĠSpoleÄį": 124014, + "олоÑĪ": 124015, + "ĠSuriye": 124016, + "ЧеÑĢ": 124017, + "æĪĺæĸĹ": 124018, + "Ġzávis": 124019, + "æĽ¸é¤¨": 124020, + "Ġmusel": 124021, + "ĠçĿ": 124022, + "ÙħÙħ": 124023, + "ĠاÙĦخارج": 124024, + "ĠÐĵÐŀ": 124025, + "ĠваÑĢÑĤо": 124026, + "Ïģαβ": 124027, + "Ġपहà¤ļ": 124028, + "ublice": 124029, + "ÑĨионного": 124030, + "èĮ¨": 124031, + "ĠدÙģØªØ±": 124032, + "ĠÙ쨳": 124033, + "Ġà¤¨à¤ľà¤°": 124034, + "tarı": 124035, + "ĠобÑĢоб": 124036, + "ĠÐłÐ°": 124037, + "ĠاÙĦصÙĨ": 124038, + "شة": 124039, + "ĠìĹĨìĹĪ": 124040, + "ožná": 124041, + "æľĢçµĤ": 124042, + "Ù¥": 124043, + "rech": 124044, + "ĠاÙĦأسر": 124045, + "Ġмови": 124046, + "Ġì¡°êµIJ": 124047, + "ÑĸмеÑĩ": 124048, + "ãĥ¯ãĥ¼": 124049, + "бÑĥÑĢг": 124050, + "ĠسÙĦس": 124051, + "åѦä¼ļ": 124052, + "Ġë¦": 124053, + "åħĭæĸ¯": 124054, + "æĸĩçĮ®": 124055, + "Ġxương": 124056, + "Ġyolc": 124057, + "ĠìĤ¬ë¬´": 124058, + "ãĤıãģļ": 124059, + "ĠÑĢаÑģÑĤений": 124060, + "ĠÙģØ¶Ø§ÛĮ": 124061, + "Ġnaopak": 124062, + "ĠпÑĢивÑĭ": 124063, + "ĠدÛĮدÙĩ": 124064, + "à¸ģารà¹ĥà¸Ĭ": 124065, + "Ġåŀ": 124066, + "çijŁ": 124067, + "以åIJİ": 124068, + "ĠpÅĻibliž": 124069, + "ĠdÃ¼ÅŁman": 124070, + "Ġtemin": 124071, + "ĠÑĥÑģлÑĥг": 124072, + "Ġदब": 124073, + "ĠìĥĪê¸Ģ": 124074, + "ĠÑĥÑģÑĤÑĢойÑģÑĤва": 124075, + "ĠТÑĥÑĤ": 124076, + "ÏĦίοÏħ": 124077, + "Ġİslâm": 124078, + "Ù¤": 124079, + "åıĤä¸İ": 124080, + "ĠкÑĥÑģÑĤ": 124081, + "éĻIJåζ": 124082, + "تÙĬÙĨ": 124083, + "ĠоÑģÑĤаннÑĸ": 124084, + "ications": 124085, + "اکÛĮ": 124086, + "ноÑģÑı": 124087, + "ÄŁan": 124088, + "ãģıãĤĮãĤĭ": 124089, + "Ġyapıyor": 124090, + "Ġê°ķëĤ¨": 124091, + "ÙħÙĬÙħ": 124092, + "æŃIJ": 124093, + "Ġرع": 124094, + "ĠboÄŁ": 124095, + "ĠиÑģÑħод": 124096, + "èªł": 124097, + "æł·åŃIJ": 124098, + "Ġbudeme": 124099, + "ĠÑģеÑĤ": 124100, + "ιÏĥμοÏį": 124101, + "Ġå¾ĴæŃ©": 124102, + "uálnÃŃ": 124103, + "ĠاÙĦعÙĤ": 124104, + "Ġسبک": 124105, + "ĠاÙĦأخرÙī": 124106, + "EFA": 124107, + "åĽºå®ļ": 124108, + "ĠãĤ¬": 124109, + "ĠìŀIJìŰ": 124110, + "ยวà¸Ĥ": 124111, + "بس": 124112, + "unma": 124113, + "Ġзаним": 124114, + "à¹ĥà¸Ļร": 124115, + "èĢĥèĻij": 124116, + "æ··åIJĪ": 124117, + "å°ĭ": 124118, + "ĠçıkÄ±ÅŁ": 124119, + "Ġmaliyet": 124120, + "éľĬ": 124121, + "ãģŁãĤģãģ®": 124122, + "Ġپش": 124123, + "ĠзлоÑĩ": 124124, + "Ġvýši": 124125, + "Ġschvál": 124126, + "ĠÙĨÙħÙĪØ¯Ùĩ": 124127, + "ÎĨ": 124128, + "Ġzách": 124129, + "ĠÏĥκ": 124130, + "ãĤ¹ãĥŀ": 124131, + "ĠÙħسائÙĦ": 124132, + "ĠاÙĦاجتÙħاع": 124133, + "åľ°çĤ¹": 124134, + "اÛĮاÙĨ": 124135, + "ĠÐŀк": 124136, + "ê¸Ķ": 124137, + "elease": 124138, + "ĠطبÙĤÙĩ": 124139, + "éijij": 124140, + "Ġì½Ķë¡ľëĤĺ": 124141, + "é¼ł": 124142, + "大åħ¨": 124143, + "ĠпÑĢивеÑģÑĤи": 124144, + "Ġابتد": 124145, + "ë¦¬ë¡ľ": 124146, + "ĠÑģÑĤÑĢанÑĭ": 124147, + "ĠzatÃŃmco": 124148, + "Ġhuyết": 124149, + "سÛĮÙĪÙĨ": 124150, + "Ġsordu": 124151, + "âĢĮرس": 124152, + "ĠÑĦÑĢон": 124153, + "Ġedip": 124154, + "ÙĨÚ¯ÛĮ": 124155, + "ĠкиÑĢ": 124156, + "Ġíķ´ìķ¼": 124157, + "ì»´": 124158, + "ÑĨиклоп": 124159, + "ĠпÑĢименениÑı": 124160, + "Ġобл": 124161, + "éļª": 124162, + "ĠkromÄĽ": 124163, + "æł¸å¿ĥ": 124164, + "rahim": 124165, + "оÑĢд": 124166, + "ĠlÃłnh": 124167, + "ĠоÑģÑĤÑĢов": 124168, + ";|": 124169, + "buz": 124170, + "ĠÏĦÏģο": 124171, + "ĠÐĴаÑĢ": 124172, + "æīİ": 124173, + "ılÄ±ÅŁ": 124174, + "éĿ¢ç©į": 124175, + "身份": 124176, + "é¢ĨåŁŁ": 124177, + "ĠاÙĦÙĤرÙĨ": 124178, + "ĠпÑĢиклад": 124179, + "ãĥģãĥ¼ãĥł": 124180, + "Ġสà¸ŀà¸Ľ": 124181, + "ĠоÑĩиÑģÑĤ": 124182, + "Ġмилли": 124183, + "аÑĨÑĸÑĹ": 124184, + "ีà¹Ģà¸Ń": 124185, + "Ġtanın": 124186, + "çĪ¶äº²": 124187, + "Ġmsgstr": 124188, + "ĠØ´ÛĮÙħÛĮ": 124189, + "ĠÙģØ±Ø§ÙĩÙħ": 124190, + "Ġë§¥": 124191, + "ãĢĤå½ĵ": 124192, + "ĠконÑĨенÑĤÑĢа": 124193, + "êµIJíļĮ": 124194, + "ãĤīãĤĮãģ¦": 124195, + "Ġyasak": 124196, + "ĠÐijол": 124197, + "Ġæ¾³": 124198, + "çĩķ": 124199, + "Ġجا": 124200, + "ëijĺ": 124201, + "ĠدرخÙĪØ§Ø³Øª": 124202, + "ĠmÃŃstnÃŃ": 124203, + "ÂĤÃĮ": 124204, + "Ġbaskı": 124205, + "Ġuçak": 124206, + "ä»ĵ": 124207, + "Ġìľłì§Ģ": 124208, + "Ġпоба": 124209, + "Ġzeptal": 124210, + "ç»ĻæĪij": 124211, + "ĠAtatürk": 124212, + "ĠÙħÙĨاس": 124213, + "ÑĴ": 124214, + "Ġaracı": 124215, + "лÑİÑĶ": 124216, + "Ġnitelik": 124217, + "ĠMezi": 124218, + "ĠÎŃναÏĤ": 124219, + "ÏİνÏĦαÏĤ": 124220, + "važ": 124221, + "Ġkuzey": 124222, + "ĠÏİÏģα": 124223, + "ĠÑĢозпов": 124224, + "à¹Īาà¸ģ": 124225, + "ãĢģä¸ī": 124226, + "ĠÑģÑĤаÑĢи": 124227, + "Ġhakkı": 124228, + "ĠØ¢ÙħادÙĩ": 124229, + "íĮĶ": 124230, + "омÑĸ": 124231, + "ĠâĢł": 124232, + "ãģĭãĤı": 124233, + "ãĢĮä½ł": 124234, + "æ³ķåĽ½": 124235, + "ÙIJÙĬÙĨ": 124236, + "æīķ": 124237, + "нили": 124238, + "ĠÑĥÑģÑĤановки": 124239, + "Ġlông": 124240, + "तम": 124241, + "ÙĪÙĨÙĬØ©": 124242, + "ÙĬتÙĬ": 124243, + "Ġê²Įìĭľë¬¼": 124244, + "ĠveÅ¡ker": 124245, + "ÎŃÏģγ": 124246, + "ĠÑĥÑģе": 124247, + "Ġkıl": 124248, + "Ġilgi": 124249, + "μÏīν": 124250, + "ĠзвÑĸлÑĮ": 124251, + "Ġönlem": 124252, + "à¸ģà¸İหมาย": 124253, + "ĠHiá»ĩp": 124254, + "ĠгоÑĢм": 124255, + "лÑıÑİÑĤÑĮÑģÑı": 124256, + "lamaya": 124257, + "ĠÑģпоÑģобом": 124258, + "ãģ¸ãģ¨": 124259, + "ç¦ģæŃ¢": 124260, + "ĠÑĢаÑħÑĥнок": 124261, + "ĠоÑĤвеÑĢÑģÑĤи": 124262, + ".:.:.:.": 124263, + "Ġmüda": 124264, + "онаÑħ": 124265, + "Ì£c": 124266, + "Ġyapacak": 124267, + "Ġназвание": 124268, + "对æĸ¹": 124269, + "ëĮĢíijľ": 124270, + "çĪŃ": 124271, + "вана": 124272, + "हन": 124273, + "ĠпÑĢоблема": 124274, + "ĠженÑīинÑĭ": 124275, + "èŀº": 124276, + "ĠhospodáÅĻ": 124277, + "ĠСÑĤеп": 124278, + "ĠodpovÄĽd": 124279, + "ĠSá»Ń": 124280, + "eview": 124281, + "åĩłä¹İ": 124282, + "çŁ¢": 124283, + "æĿ¥ãģŁ": 124284, + "ĠполоÑģ": 124285, + "ĠÑģел": 124286, + "å±Ĩ": 124287, + "ĠпеÑĢвой": 124288, + "ĠпÑĢоÑĨеÑģÑģа": 124289, + "ãĢĢãĤĿ": 124290, + "تاÙħبر": 124291, + "илаÑģÑı": 124292, + "ï¼ĮæĹł": 124293, + "ĠвлаÑģноÑģÑĤÑĸ": 124294, + "íķĺìŀIJ": 124295, + "аÑĤки": 124296, + "ĠBÃł": 124297, + "ĠKarel": 124298, + "è·µ": 124299, + "رÛĮÙĩ": 124300, + "ĠëĤĺ를": 124301, + "ĠобеÑģпеÑĩива": 124302, + "à¥įरपत": 124303, + "ãģĹãĤĩ": 124304, + "åįĴ": 124305, + "Ġ奥": 124306, + "ĠпÑĢоÑĤе": 124307, + "ĠæĭĽ": 124308, + "ĠСÑĤÑĢана": 124309, + "ĠÑĢабоÑĤаÑĤÑĮ": 124310, + "ĠتشخÛĮص": 124311, + "екÑģÑĥ": 124312, + "Ġ리그": 124313, + "ĠصاÙĦØŃ": 124314, + "ĠbaÅŁlamÄ±ÅŁ": 124315, + "ĠÙ¾ÛĮاÙħبر": 124316, + "زا": 124317, + "ĠмаÑģÑģ": 124318, + "ĠγαÏģ": 124319, + "ëĿ¼íͼ": 124320, + "Ġyarı": 124321, + "ĠÑĤипÑĥ": 124322, + "Ðŀп": 124323, + "ãģijãģªãģĦ": 124324, + "emem": 124325, + "ĠnÄĽmu": 124326, + "ĠÙĨشر": 124327, + "ĠÎijθήνα": 124328, + "ÙģØ±Ø§ÙĨ": 124329, + "Ġç¶²": 124330, + "ĠпÑĢомиÑģлов": 124331, + "ĠBugün": 124332, + "ìŀĶ": 124333, + "ĠжÑĸнок": 124334, + "Ġà¸Ľà¸£à¸°à¹Ģà¸łà¸Ĺ": 124335, + "ĠвикоÑĢиÑģÑĤовÑĥваÑĤи": 124336, + "ĠТим": 124337, + ")를": 124338, + "ежаÑĤÑĮ": 124339, + "Ġsona": 124340, + "Ø´ÙĨبÙĩ": 124341, + "Ġnichž": 124342, + "åīĽ": 124343, + "ĠÙģØªØŃ": 124344, + "ĠÙħÙĤدÙħ": 124345, + "ĠGüvenlik": 124346, + "eum": 124347, + "ç»ıè¿ĩ": 124348, + "è·ĿéĽ¢": 124349, + "ÂłÐ½Ðµ": 124350, + "ĠاصÙĪÙĦ": 124351, + "ĠzaÄįátku": 124352, + "ิà¹Ģวà¸ĵ": 124353, + "Ġà¤ķà¤Ł": 124354, + "Ġkriz": 124355, + "Ġpán": 124356, + "ĠбоÑĢÑĮ": 124357, + "ظÙħØ©": 124358, + "Ġê²½ë¶ģ": 124359, + "ĠاÙĦÙĬÙħÙĨ": 124360, + "ĠاÙĦعربÙĬ": 124361, + "Ġhlub": 124362, + "Ġchá»Ŀ": 124363, + "襲": 124364, + "ëĵľë¦¬": 124365, + "ãĥĸãĥª": 124366, + "ĠÑģÑĤолÑĸÑĤÑĤÑı": 124367, + "ربÙĬØ©": 124368, + "Ġæ°¸": 124369, + "Ġê±°ìĿĺ": 124370, + "ĠβαÏĥ": 124371, + "Ġarz": 124372, + "ãĥ¢ãĥ³": 124373, + "ĠÑĢÑĸвенÑĮ": 124374, + "ä¸įçŁ¥": 124375, + "导èĩ´": 124376, + "اÙĬØ´": 124377, + "ĠпÑĢевÑĭÑĪ": 124378, + "Ġпн": 124379, + "ĠÎĴÏģοÏĩή": 124380, + "Ġ身": 124381, + "ĠÄIJầu": 124382, + "ĠÏĮμÏīÏĤ": 124383, + "jÃŃž": 124384, + "Ġλίγ": 124385, + "ĠÑĪколи": 124386, + "ãģ£ãģ±ãģĦ": 124387, + "zdy": 124388, + "Ġê³§": 124389, + "teÅŁ": 124390, + "ÑĢеÑī": 124391, + "κει": 124392, + "sahuje": 124393, + "Ġà¤īसस": 124394, + "ĠTanrı": 124395, + "ä¸į好": 124396, + "éĥŃ": 124397, + "ĠвÑĭглÑıд": 124398, + "ĠçoÄŁ": 124399, + "ĠинÑģÑĤÑĢÑĥменÑĤ": 124400, + "rej": 124401, + "èĪĮ": 124402, + "ãģĭãĤīãģªãģĦ": 124403, + "ĠнепÑĢиÑıÑĤ": 124404, + "ĠкÑĢоме": 124405, + "ζη": 124406, + "Ġлог": 124407, + "ावर": 124408, + "ëħķíķĺìĦ¸ìļĶ": 124409, + "ाहरण": 124410, + "Ġgüvenilir": 124411, + "Tại": 124412, + "ĠØ´Ùĩرد": 124413, + "ĠΤε": 124414, + "оÑĢаз": 124415, + "ĠlÃłng": 124416, + "I": 124417, + "æĬķæ³¨": 124418, + "Ġsiyaset": 124419, + "ÐĽÑİ": 124420, + "ĠtÅĻet": 124421, + "ĠÏĢÏģÏİÏĦη": 124422, + "ĠÑĥлÑĭб": 124423, + "ĠLâm": 124424, + "ÑĥлÑĮÑĤа": 124425, + "åŁºåľ°": 124426, + "Ġskupina": 124427, + "æ°¸ä¹ħ": 124428, + "лÑĥгов": 124429, + "ĠÑĨÑĸй": 124430, + "ĠPoh": 124431, + "iд": 124432, + "ĠTruy": 124433, + "çļĦä¸Ģ个": 124434, + "ë²ĦìłĦ": 124435, + "Ġxứ": 124436, + "à¸ĩà¹ģรà¸ģ": 124437, + "à¸Ħà¸Ńม": 124438, + "Ġelektronik": 124439, + "ĠaÄŁaç": 124440, + "Ġà¤ľà¤¯": 124441, + "ĠповеÑĢÑħноÑģÑĤÑĮ": 124442, + "ĠاÙĩÙħÛĮت": 124443, + "ливиÑħ": 124444, + "ĠolduÄŁundan": 124445, + "ï¼ī:": 124446, + "ÑĨиÑıÑħ": 124447, + "è£½ä½ľ": 124448, + "à¸Ĺรà¸ĩ": 124449, + "eyim": 124450, + "Ġnáklad": 124451, + "cilik": 124452, + "ĠÐĵлав": 124453, + "ĠUygu": 124454, + "ĠÑĢегÑĥлÑİ": 124455, + "à¤Ĥà¤ľà¤¨": 124456, + "Ġkaynaģı": 124457, + "à¹īาà¸Ń": 124458, + "Ġgörmek": 124459, + "ĠíĮ¬": 124460, + "Ġå®Į": 124461, + "Ø«ÙħاÙĨ": 124462, + "ĠÑĤакаÑı": 124463, + "Ġнеиз": 124464, + "Ġzprávy": 124465, + "ĠاÙĦشخص": 124466, + "Ġìĺ¤íĽĦ": 124467, + "ĠاÙĦطب": 124468, + "atırım": 124469, + "رÙĬر": 124470, + "ĠÙħعÙħارÛĮ": 124471, + "ÃľRK": 124472, + "ĠÒIJ": 124473, + "ĠìĦ¬": 124474, + "æīĭãģ«": 124475, + "Ġë³ĢíĻĶ": 124476, + "ulace": 124477, + "Ġsợ": 124478, + "ÑĢиÑĩ": 124479, + "มหาว": 124480, + "Ġkâ": 124481, + "ĠÑģпÑĢоб": 124482, + "ÙĩرÙĩ": 124483, + "ाधन": 124484, + "ĠÏĢαι": 124485, + "بعد": 124486, + "ĠاÙĦتÙĪ": 124487, + "ç»ıçIJĨ": 124488, + "působ": 124489, + "æ¬ł": 124490, + "ĠзаÑħвоÑĢÑİваннÑı": 124491, + "خة": 124492, + "ÚĨار": 124493, + "Ġbozuk": 124494, + "]âĢı": 124495, + "ĠSocorro": 124496, + "Ġhrad": 124497, + "надлеж": 124498, + "ĠÑĥÑĩаÑģÑĤие": 124499, + "å¤īãĤı": 124500, + "Ġyans": 124501, + "ĠØ¥ÙĦ": 124502, + "خبر": 124503, + "ÑĨиклопед": 124504, + "ιÏİν": 124505, + "ÏĥÏĦÏģο": 124506, + "Ġbanka": 124507, + "ĠsoÄŁuk": 124508, + "Ġünlü": 124509, + "é¢ľ": 124510, + "ĠرÙ쨹": 124511, + "çIJ³": 124512, + "ĠÑģоÑģÑĤоÑıнии": 124513, + "νονÏĦαÏĤ": 124514, + "ĠакÑĤи": 124515, + "ĠÏĢολÏħ": 124516, + "ĠмоÑĹ": 124517, + "Ġæł¼": 124518, + "ç²Ĺ": 124519, + "ĠÑģлÑĥÑĩай": 124520, + "ìĿ¼ìĹIJ": 124521, + "ĠÑĤÑĢебÑĥеÑĤ": 124522, + "ĠåıĤèĢĥ": 124523, + "angl": 124524, + "amik": 124525, + "ĠİÅŀ": 124526, + "湯": 124527, + "ĠÄijáo": 124528, + "ละà¸Ħร": 124529, + "Ñģо": 124530, + "Âłob": 124531, + "Ġklim": 124532, + "èĥĨ": 124533, + "ìĥĿíĻľ": 124534, + "ãĥijãĥ³": 124535, + "-ब": 124536, + "Ġкад": 124537, + "à¹Īสามารà¸ĸ": 124538, + "ĠÙħسÙĦÙħاÙĨ": 124539, + "ç¿°": 124540, + "ĠBütün": 124541, + "ĠKraj": 124542, + "ĠпеÑĢÑģп": 124543, + "Ġenerj": 124544, + "ãģķãģĽãĤĭ": 124545, + "è¾¾åΰ": 124546, + "ाà¤Ĭ": 124547, + "ĠگرÙģØªÙĨ": 124548, + "ÑĪкÑĥ": 124549, + "ĠÐŁÐ»Ð¾": 124550, + "ÃŃny": 124551, + "ĠHra": 124552, + "ĠÚĨÙĨاÙĨ": 124553, + "Ġà¹Ħà¸Ĺย": 124554, + "visejÃŃcÃŃ": 124555, + "Û³Û³": 124556, + "ĠÐľÑĸнÑĸÑģÑĤеÑĢ": 124557, + "à¹Ĥà¸Ń": 124558, + "ĠدÙĩÛĮد": 124559, + "æ¯Ķä¾ĭ": 124560, + "ÏĥιεÏį": 124561, + "ÇIJ": 124562, + "ãĢģãģª": 124563, + "Ġतस": 124564, + "Ġİt": 124565, + "ĠìłĦìŁģ": 124566, + "à¹Ģà¸Īร": 124567, + "Ġelektr": 124568, + "Ġdư": 124569, + "âĶĶ": 124570, + "Ġìĥ¤": 124571, + "ä»®": 124572, + "à¸ģารà¹Ģล": 124573, + "ĠмÑĥлÑĮ": 124574, + "Ġ度": 124575, + "ĠHuyá»ĩn": 124576, + "вен": 124577, + "ĠlÆ°á»Ľi": 124578, + "Ġprovozu": 124579, + "ÑĥÑĢÑĥ": 124580, + "ÑĢÑĸÑĹ": 124581, + "ĠçocuÄŁ": 124582, + "ัà¸IJà¸ļาล": 124583, + "ÙĦÙĬÙĩ": 124584, + "Ġ[â̦]...Ċ": 124585, + "åİŁå§ĭ": 124586, + "Ġsklad": 124587, + "ĠسپتاÙħبر": 124588, + "ĠTomáš": 124589, + "ĠسÙĪØ§ÙĦ": 124590, + "çģŃ": 124591, + "ãĤĵãģ©": 124592, + "назнаÑĩ": 124593, + "ĠÄijÄ©a": 124594, + "ĠudÄĽlat": 124595, + "Ġà¤Ĩदम": 124596, + "L": 124597, + "ινÏĮ": 124598, + "iÅŁleri": 124599, + "ÄIJây": 124600, + "ĠرساÙĨÙĩ": 124601, + "عاÙħ": 124602, + "ãĥ¼ãĥijãĥ¼": 124603, + "Ġdoprov": 124604, + "ĠмÑĸÑģÑĤо": 124605, + "ï¼¥": 124606, + "елÑĸг": 124607, + "ائز": 124608, + "ä¸įäºĨ": 124609, + "ĠÐIJлекÑģандÑĢ": 124610, + "ĠвÑĢемен": 124611, + "ĠdveÅĻe": 124612, + "Ġchảy": 124613, + "Ġotel": 124614, + "èĤ¯å®ļ": 124615, + "ĠÑĥÑĤвеÑĢжд": 124616, + "ĠÐļомп": 124617, + "ĠëĤĺëĿ¼": 124618, + "ĠвÑĸдбÑĥваÑĶÑĤÑĮÑģÑı": 124619, + "ãĢģãĢİ": 124620, + "ĠkarÅŁÄ±lık": 124621, + "Ġlẫn": 124622, + "çħĻ": 124623, + "عکس": 124624, + "å¼¥": 124625, + "Ġtecr": 124626, + "Ġneod": 124627, + "æĪIJçĤº": 124628, + "åħ¥ãĤĬ": 124629, + "ĠÐŁÑĢод": 124630, + "ĠÏĢÏģά": 124631, + "ืà¸Ńà¸Ķ": 124632, + "ÑģÑĤаÑĤи": 124633, + "еноÑĹ": 124634, + "ÑĩиÑģл": 124635, + "羣æŃ£": 124636, + "Ġราà¸Ħ": 124637, + "ÑĥÑĢе": 124638, + "ĠشاÙĩد": 124639, + "اعر": 124640, + "Ġê²½íĹĺ": 124641, + "à¸Ļà¸Ħ": 124642, + "ãĥįãĥ«": 124643, + "ÏĢοÏħλοÏĤ": 124644, + "Ġमà¤Ī": 124645, + "ìĬ¤ì½Ķ": 124646, + "itelné": 124647, + "å¼ĢæĶ¾": 124648, + "çį¨": 124649, + "ĠpÅĻech": 124650, + "úÄįast": 124651, + "å¢ĵ": 124652, + "Ġå½±": 124653, + "ÙĨساÙĨ": 124654, + "Ġдвад": 124655, + "ĠидеÑĤ": 124656, + "ĠподклÑİÑĩ": 124657, + "íĬ¹ë³Ħìĭľ": 124658, + "BÃłi": 124659, + "Å¡ku": 124660, + "ilerden": 124661, + "åıĺå¾Ĺ": 124662, + "ëıĻìķĪ": 124663, + "ĠpostupnÄĽ": 124664, + "ĠиÑĤог": 124665, + "Ġdůvodu": 124666, + "sizlik": 124667, + "ÙĦاÙĨ": 124668, + "éĤ£ç§į": 124669, + "ĠÑĩаÑģа": 124670, + "ä¸įæĸŃ": 124671, + "ĠØ®ÛĮاباÙĨ": 124672, + "ĠاÙĦداخ": 124673, + "ĠÑģÑĤоÑĢÑĸн": 124674, + "Ġì¶ľìŰ": 124675, + "æ²Ł": 124676, + "Ġhry": 124677, + "ĠGÃľ": 124678, + "ĠìĿ¸êµ¬": 124679, + "lied": 124680, + "ĠعاÙĦÙĬØ©": 124681, + "ĠпÑĢедваÑĢ": 124682, + "анной": 124683, + "åı¥è¯Ŀ": 124684, + "éłĵ": 124685, + "ë°ĶìĿ¼": 124686, + "ï¼ı/": 124687, + "ĠÙħختصات": 124688, + "ëŀ«": 124689, + "ĠçalÄ±ÅŁmaları": 124690, + "Ġrepublika": 124691, + "Ġì³": 124692, + "ा)": 124693, + "Ġê±´ê°ķ": 124694, + "Ġê³µëıĻ": 124695, + "èħ¦": 124696, + "ĠìĦľë¡ľ": 124697, + "ĠпÑĢоводиÑĤÑĮ": 124698, + "ĠдейÑģÑĤвиÑĤелÑĮно": 124699, + "veç": 124700, + "ثاÙĦ": 124701, + "Ġgösterir": 124702, + "ırlar": 124703, + "ĠÑģамÑĭм": 124704, + "álo": 124705, + "é¢ij次": 124706, + "à¥Īà¤Ĺ": 124707, + "ادÙħ": 124708, + "çĮª": 124709, + "ĠSản": 124710, + "Ġçı": 124711, + "Ġlety": 124712, + "Ġrepublice": 124713, + "æĿ¥èĩª": 124714, + "Ġvết": 124715, + "Ġbirik": 124716, + "Ġmekt": 124717, + "ĠاÙĦÙĪÙģ": 124718, + "Ġjich": 124719, + "ä¸Ģ覧": 124720, + "éľ²åĩº": 124721, + "ĠHiá»ĩn": 124722, + "Ġdiá»ĩt": 124723, + "ĠÑħÑĢиÑģÑĤи": 124724, + "åĪļæīį": 124725, + "kate": 124726, + "Ġbazen": 124727, + "ĠurÄįitÄĽ": 124728, + "ĠumožÅĪuje": 124729, + "é¡ĺãģĦ": 124730, + "/QÄIJ": 124731, + "ĠmenÅ¡ÃŃ": 124732, + "ÏĥκεÏħή": 124733, + "ĠÑĨеÑĢков": 124734, + "Ġè´Ń": 124735, + "окÑĢаÑĤи": 124736, + "ĠÑĢозк": 124737, + "ανοÏħ": 124738, + "Ġyönetic": 124739, + "Ġolmadan": 124740, + "åĨľä¸ļ": 124741, + "Ġë°ĶëŀĮ": 124742, + "çĵľ": 124743, + "ÑĪаеÑĤÑģÑı": 124744, + "ĠÐļоÑģÑĤ": 124745, + "ĠÙħعت": 124746, + "Ġà¸ŀล": 124747, + "ĠÙħتÙ쨧ÙĪØª": 124748, + "ãĤīãģı": 124749, + "èĪĹ": 124750, + "ĠتعرÛĮÙģ": 124751, + "éīĦéģĵ": 124752, + "ĠpéÄįe": 124753, + "컵": 124754, + "ĠподÑĢаз": 124755, + "ĠбанкÑĥ": 124756, + "İSİ": 124757, + "æ¡IJ": 124758, + "à¹Ĥรà¸Ħ": 124759, + "ĠØŃذÙģ": 124760, + "Ġë£": 124761, + "лиж": 124762, + "ĠìĤ°ìĹħ": 124763, + "ĠпÑĢиÑĩинÑĭ": 124764, + "Ġназна": 124765, + "ãĥªãĤ¹ãĥĪ": 124766, + "ìłķë¶Ģ": 124767, + "ÏĥÏĨα": 124768, + "å¦ĥ": 124769, + "Ġголови": 124770, + "ëIJĺìĹĪìĬµëĭĪëĭ¤": 124771, + "ĠενÏĮÏĤ": 124772, + "ãĤ¤ãĥ³ãĤ¿": 124773, + "Ġslun": 124774, + "ëł´": 124775, + "ĠÑģÑĥÑīеÑģÑĤвÑĥеÑĤ": 124776, + "заб": 124777, + "æĽ´åĬł": 124778, + "ĠблагодаÑĢÑı": 124779, + "ĠëĮĢ구": 124780, + "è¾ħ": 124781, + "หาà¸ģ": 124782, + "Ġæİ¥": 124783, + "ëĮĢ를": 124784, + "人类": 124785, + "jeme": 124786, + "åĪĨå¸ĥ": 124787, + "ìŀ¥ìĿĢ": 124788, + "Ġдопомоги": 124789, + "ìĻĦë£Į": 124790, + "osy": 124791, + "èĭ±éĽĦ": 124792, + "ĠÙĦس": 124793, + "मह": 124794, + "Ġà¸ģำ": 124795, + "ĠداشتÙĨ": 124796, + "Ńìłľ": 124797, + "İng": 124798, + "ĠThưá»Ŀng": 124799, + "íĻĢ": 124800, + "ÑįÑĦ": 124801, + "íķ´ìļĶ": 124802, + "ĠÐľÑĸж": 124803, + "еÑĢÑĸга": 124804, + "Ġεá¼": 124805, + "à¹ģสà¸ĩ": 124806, + "ãĥĢãĤ¤": 124807, + "Ġcesty": 124808, + "Ġprázd": 124809, + "第ä¸Ģ次": 124810, + "ĠÙĩÙħسر": 124811, + "Ġzev": 124812, + "ÂłE": 124813, + "ĠBelediyesi": 124814, + "ĠпÑĢопози": 124815, + "ĠanlayÄ±ÅŁ": 124816, + "ÂłÙħ": 124817, + "ĠÑĢаÑģÑģÑĩиÑĤ": 124818, + "ĠاÙĦØ£ÙħرÙĬÙĥÙĬØ©": 124819, + "Ġžena": 124820, + "deniz": 124821, + "Ġnoci": 124822, + "Ġstál": 124823, + "ุย": 124824, + "주ìĨĮ": 124825, + "ĠзеÑĢ": 124826, + "ĠìĨĮê°ľ": 124827, + "Ġkhẳng": 124828, + "atıcı": 124829, + "ÄĽÅ¾": 124830, + "ĠÑĩÑĥÑĤÑĮ": 124831, + "ĠcáºŃu": 124832, + "ĠاطÙĦاع": 124833, + "æµħ": 124834, + "Ġstrav": 124835, + "ĠSanayi": 124836, + "ĠطبÙĬ": 124837, + "Ġhızla": 124838, + "Ïİνα": 124839, + "à¤¿à¤ľà¤²": 124840, + "ÙħØŃÙħد": 124841, + "à¸ļà¸ģ": 124842, + "Ġvzdálen": 124843, + "ĠÑĤакими": 124844, + "ãĢĤãģĿãģĹãģ¦": 124845, + "Ġkalp": 124846, + "Ġкожного": 124847, + "ÐłÂµ": 124848, + "ÙĦعاب": 124849, + "ĠÙħÙĪÙĨ": 124850, + "ĠìĿ¼ìĿĦ": 124851, + "Ġë°ĶìĿ´": 124852, + "Ġmekan": 124853, + "ĠجاÙħع": 124854, + "ĠÙĨÙģØª": 124855, + "ĠاÙĦسÙħ": 124856, + "лÑĭÑħ": 124857, + "èĥĮæĻ¯": 124858, + "Ġê²ĥëıĦ": 124859, + "ĠìĤ´ìķĦ": 124860, + "ydı": 124861, + "ĠнавеÑĢ": 124862, + "åŃIJãģ¯": 124863, + "luluk": 124864, + "Ġhá»Ĺn": 124865, + "ĠØ´Ùģ": 124866, + "ĠعÙĦت": 124867, + "à¸Ħราม": 124868, + "ĠÎļÏįÏĢ": 124869, + "Ġà¹Ģมษายà¸Ļ": 124870, + "ÙĨدÙĤ": 124871, + "ĠÑĥÑģÑĤÑĢа": 124872, + "ĠÎĵεν": 124873, + "ĠÐĨван": 124874, + "ĠPhong": 124875, + "å®¶çļĦ": 124876, + "ĠÐIJлекÑģ": 124877, + "ĠзбеÑĢÑĸг": 124878, + "ĠÅŁarkı": 124879, + "ĠظرÙģÛĮت": 124880, + "ĠÙħعÙĨÛĮ": 124881, + "Ġлов": 124882, + "ĠìĤ¶": 124883, + "èħIJ": 124884, + "Ġå¯Į": 124885, + "ERG": 124886, + "ĠÑģÑĤоимоÑģÑĤÑĮ": 124887, + "ÅĻet": 124888, + "à¥īय": 124889, + "à¹Īาร": 124890, + "ĠارÙĪپا": 124891, + "ĠбÑĢоÑģ": 124892, + "ĠоÑĤноÑģÑıÑĤ": 124893, + "ĠÎŁÎº": 124894, + "ÑĨÑĮкий": 124895, + "ÏĬκ": 124896, + "ãģĤãĤĬãģ¾ãģĽãĤĵ": 124897, + "ĠÑĥник": 124898, + "ĠÄijiá»ĥn": 124899, + "Ġvýzkum": 124900, + "Ġhứ": 124901, + "ĠÙĪØ§Øª": 124902, + "Ġå¹³æĸ¹": 124903, + "Ïħμ": 124904, + "ãĤĴ使": 124905, + "είÏĦαι": 124906, + "两人": 124907, + "ĠåĮ»": 124908, + "ÑĢаÑĤиÑĤÑĮ": 124909, + "ĠاÙĦاÙĨت": 124910, + "ãģ®äºº": 124911, + "رش": 124912, + "ĠТÑĥÑĢ": 124913, + "rnÄĽ": 124914, + "天天": 124915, + "มาร": 124916, + "Ġortalama": 124917, + "ĠпеÑĢепиÑģ": 124918, + "ĠìĥĿìĤ°": 124919, + "å¿Ĩ": 124920, + "íĩ´": 124921, + "ï¼Į该": 124922, + "éĮ¢": 124923, + "ÏĢαίδ": 124924, + "ĠмеÑĢопÑĢи": 124925, + "ĠгÑĢав": 124926, + "ÃĶng": 124927, + "Ġæ¤": 124928, + "ĠاÙĦدÙĪÙĦØ©": 124929, + "ĠоÑģÑĮ": 124930, + "å¥Ķ": 124931, + "Ġgüvenli": 124932, + "íķĺìĭł": 124933, + "ĠéĬ": 124934, + "éŁ³æ¨Ĥ": 124935, + "Ġmedya": 124936, + "ĠبÙĨا": 124937, + "ама": 124938, + "ĠãĤŃãĥ£": 124939, + "èĹ¥": 124940, + "larım": 124941, + "ĠTiếng": 124942, + "iyorlar": 124943, + "ï¼¢": 124944, + "æĶĿ": 124945, + "ÑĸйÑģÑĮкоÑĹ": 124946, + "ĠyetiÅŁtir": 124947, + "Ġپسر": 124948, + "ãĤīãģĹ": 124949, + "Âļ": 124950, + "ìĥ¤": 124951, + "à¸Ķาห": 124952, + "ĠتØŃصÛĮÙĦ": 124953, + "Ġбенз": 124954, + "éģ£": 124955, + "ĠнаблÑİ": 124956, + "ä½ĵç³»": 124957, + "ãĥ¯ãĤ¤ãĥĪ": 124958, + "³³Ġ": 124959, + "书记": 124960, + "ĠMühendis": 124961, + "plor": 124962, + "laz": 124963, + "лÑıли": 124964, + "Ġpomáh": 124965, + "Ġближ": 124966, + "ĠÑĩиÑģла": 124967, + "ĠubytovánÃŃ": 124968, + "ÑĢаÑĤно": 124969, + "ĠtrÄĥm": 124970, + "ĠابراÙĩ": 124971, + "átka": 124972, + "Ġiçindeki": 124973, + "ัà¸ļà¸Ļ": 124974, + "ĠاÙħÛĮد": 124975, + "nave": 124976, + "ecut": 124977, + "å°±åľ¨": 124978, + "Ġtradi": 124979, + "Ø·ÙĦÙĤ": 124980, + "ãĤ¦ãĤ©": 124981, + "Ġkhuôn": 124982, + "ìĬ¤ë¡ľ": 124983, + "ÏĦÎŃÏģα": 124984, + "ĠÏĥκο": 124985, + "ë§Ľ": 124986, + "ĠÙģÙĨÛĮ": 124987, + "à¹Įà¹Ģà¸ŀ": 124988, + "ĠاÙĦعظ": 124989, + "Ġthôn": 124990, + "기ìĿĺ": 124991, + "Ġ฿": 124992, + "ÑĥÑİÑĤÑģÑı": 124993, + "ĠÙħکاÙĨ": 124994, + "ĠâĹİ": 124995, + "Ġçľģ": 124996, + "Ġåį¡": 124997, + "ĠпеÑĢÑĪий": 124998, + "ĠíĽĦë³´": 124999, + "ĠآراÙħ": 125000, + "ãģĮãģĦ": 125001, + "ยาà¸Ļ": 125002, + "μει": 125003, + "ĠMáy": 125004, + "Ġzů": 125005, + "Ġpodporu": 125006, + "컨": 125007, + "ÑģÑĤÑĢи": 125008, + "ÏĢÏĦÏīÏĥη": 125009, + "Ð¤ÐĽ": 125010, + "åĵªéĩĮ": 125011, + "ĠпеÑĢвÑĥÑİ": 125012, + "Ġyerinde": 125013, + "ĠزÛĮبا": 125014, + "Ġodstran": 125015, + "à¥Ģà¤Ĺ": 125016, + "ĠÑĢÑĸзнÑĸ": 125017, + "ÏģηÏĥη": 125018, + "âĢĮاÙĦÙħÙĦÙĦÛĮ": 125019, + "عاد": 125020, + "à¥įपष": 125021, + "ÑŁN": 125022, + "ï½Ľ": 125023, + "ãĥ¼ãĥľ": 125024, + "è´Ńä¹°": 125025, + "ĠìĿ¸ê¸°ê¸Ģ": 125026, + "ĠÙħÛĮØ´ÙĪØ¯": 125027, + "ĠбезопаÑģноÑģÑĤи": 125028, + "ĠνεÏĨοκ": 125029, + "ãģ«ãģ¨": 125030, + "ĠÑĨеÑĢкви": 125031, + "تÙĥ": 125032, + "ĠHÃłng": 125033, + "ĠÙĦÙĦس": 125034, + "ĠνεÏĨοκάλÏħÏĪηÏĤ": 125035, + "raman": 125036, + "Ġvyvol": 125037, + "niÄį": 125038, + "راÙĨÙĩ": 125039, + "ĠpeÅŁ": 125040, + "ãĥ«ãĤ¯": 125041, + "å´ĩ": 125042, + "Ġimkân": 125043, + "åĮ»çĸĹ": 125044, + "Ġपà¥Ŀ": 125045, + "άννηÏĤ": 125046, + "ĠجÛĮ": 125047, + "Ġproje": 125048, + "Ġülkenin": 125049, + "ĠKew": 125050, + "ĠاÙĦÙħÙģ": 125051, + "Ø£Ùĥ": 125052, + "çĻºè¡¨": 125053, + "ĠδÏħ": 125054, + "ĠåĽ½å®¶": 125055, + "ĠKiÅŁisel": 125056, + "ãĥ³ãĤ¬": 125057, + "Ġzpráva": 125058, + "Viá»ĩc": 125059, + "erif": 125060, + "Ġstránky": 125061, + "éļł": 125062, + "è¼ķ": 125063, + "коз": 125064, + "Ġà¤¸à¤ľ": 125065, + "ÙĩداÙģ": 125066, + "loub": 125067, + "à¸łà¸²à¸ŀยà¸Ļà¸ķร": 125068, + "ĠíķłìĿ¸": 125069, + "ĠÄIJÃło": 125070, + "ĠÙĨاØŃÛĮÙĩ": 125071, + "(=)": 125072, + "ĠÅŀampiyon": 125073, + "ĠpiÅŁ": 125074, + "ĠذÙĩ": 125075, + "९": 125076, + "ĠÑģÑĢедÑģÑĤво": 125077, + "Ġà¹Ģวลา": 125078, + "ĠÑĩÑĥж": 125079, + "Ġverileri": 125080, + "Ġکارت": 125081, + "ави": 125082, + "Ġà¤ķरव": 125083, + "Ġrestau": 125084, + "ê°ľìĽĶ": 125085, + "ĠмиÑĢов": 125086, + "ì°®": 125087, + "ĠnÄĽjaký": 125088, + "Ġsessiz": 125089, + "اءات": 125090, + "ĠÐĹаÑħ": 125091, + "ÑıÑīиÑħ": 125092, + "пÑĢ": 125093, + "ĠподалÑĮ": 125094, + "ĠопÑĢеделиÑĤÑĮ": 125095, + "à¥Ń": 125096, + "ĠرÙģ": 125097, + "幸ç¦ı": 125098, + "à»": 125099, + "ĠvÄĽdom": 125100, + "ĠÑģвидеÑĤелÑĮ": 125101, + "ĠÎĵοÏħ": 125102, + "ılıģıyla": 125103, + "çĻ»éĮ²": 125104, + "Ġä¸ĭè·Į": 125105, + "ĠплÑİ": 125106, + "нод": 125107, + "ĠأجÙĦ": 125108, + "Ġà¤ķथ": 125109, + "éĥ½ä¸į": 125110, + "Ġsene": 125111, + "ĠpÄĽ": 125112, + "è¨ĪåĬĥ": 125113, + "ĠаÑĥд": 125114, + "Ġодном": 125115, + "Ġä¸ĩåħĥ": 125116, + "ĠÙĪÙħا": 125117, + "ĠÐĶÑĢÑĥг": 125118, + "èµ·ãģĵ": 125119, + "ваÑİÑĤÑģÑı": 125120, + "лаÑĤÑĥ": 125121, + "ĠتÙĪÙĨ": 125122, + "ÑīаÑı": 125123, + "ήλ": 125124, + "ĠÐŁÑĢа": 125125, + "Ġاسترات": 125126, + "ิà¸Ļà¹Ģà¸Ķ": 125127, + "à¥įà¤Ĺत": 125128, + "ÂłÐ·": 125129, + "ĠполоÑĤ": 125130, + "æ®ĸ": 125131, + "æ¡Ĩ": 125132, + "ĠSistem": 125133, + "Ġruku": 125134, + "ãĥĥãĤ«ãĥ¼": 125135, + "ĠобÑıзан": 125136, + "ĠkÃ¶ÅŁ": 125137, + "Ġadını": 125138, + "Ø´ÙħاÙĦÛĮ": 125139, + "naÄįenÃŃ": 125140, + "Ġ.ï¼ı": 125141, + "Ġå®ĺ": 125142, + "Ġtoplumsal": 125143, + "誤": 125144, + "ĠبÙĩبÙĪØ¯": 125145, + "ÑģÑĤвеннаÑı": 125146, + "Ġآپ": 125147, + "ĠجÙĦسÙĩ": 125148, + "ãĢĢï½": 125149, + "åĵŃ": 125150, + "æīĢå±ŀ": 125151, + "æĴ®": 125152, + "ì¢Ģ": 125153, + "Ġει": 125154, + "ì¹ĺ를": 125155, + "Ġê³¼ìłķ": 125156, + "uuml": 125157, + "δά": 125158, + "Ġزد": 125159, + "ìĽIJìĿĦ": 125160, + "ĠvÄĽcÃŃ": 125161, + "دث": 125162, + "Ġsanki": 125163, + "åĥıæĺ¯": 125164, + "лаÑĢа": 125165, + "ìĤ¬ìĿ´": 125166, + "ãĤıãĤĮãģŁ": 125167, + "ĠÄijón": 125168, + "åIJ¯åĬ¨": 125169, + "ĠgiÃłnh": 125170, + "Ġkırmızı": 125171, + "Ø®Ùħ": 125172, + "æIJį": 125173, + "åĪĩãĤĬ": 125174, + "ãĤµãĥ¼ãĥĵãĤ¹": 125175, + "Ùĩار": 125176, + "ذÙĥر": 125177, + "оÑĢоз": 125178, + "à¥Īà¤Ĥ।ĊĊ": 125179, + "ĠíĻĪíİĺìĿ´ì§Ģ": 125180, + "ĠÙĥبÙĬرة": 125181, + "нина": 125182, + "íķĺìļ°": 125183, + "å¼ķç͍é¢ij次": 125184, + "८": 125185, + "ĠбаÑĤÑĮкÑĸв": 125186, + "à¸Łà¸Ńร": 125187, + "ี.": 125188, + "ìłĿíĬ¸": 125189, + "éĺħ读次æķ°": 125190, + "Ġitir": 125191, + "ÑĪин": 125192, + "ĠVáºŃy": 125193, + "çĤ®": 125194, + "лагод": 125195, + "Ø´ÙĨاس": 125196, + "á»IJ": 125197, + "ĠÑıгод": 125198, + "Ġì¤ijìķĻ": 125199, + "رÙĬØ·": 125200, + "ĠìĪĺíĸī": 125201, + "Ġä¸Ģèά": 125202, + "ĠÑħвилин": 125203, + "ĠÐľÐ¾Ð¶Ð½Ð¾": 125204, + "ĠнаÑĩале": 125205, + "Ġоднов": 125206, + "ĠÃľÃ§": 125207, + "ÑĨионнÑĭй": 125208, + "Ġìļķ": 125209, + "æ¼Ĥ": 125210, + "å²³": 125211, + "تدÙī": 125212, + "κηÏĤ": 125213, + "âĢĻnda": 125214, + "ï¼IJï¼IJ": 125215, + "èªī": 125216, + "é§ħå¾ĴæŃ©": 125217, + "ĠÙģØ±Ø²ÙĨد": 125218, + "åħ¬è·¯": 125219, + "αÏĥίαÏĤ": 125220, + "าà¸ĵาà¸Ī": 125221, + "ëij¥": 125222, + "ĠÏĢοι": 125223, + "ĠبداÙĨ": 125224, + "кап": 125225, + "ĠìŀĪëĬĶëį°": 125226, + "ï¼ĮæŃ¤": 125227, + "à¸Ľà¸£à¸°à¹Ĥยà¸Ĭà¸Ļ": 125228, + "ĠÚ©Ø´ÙĪØ±ÙĩاÛĮ": 125229, + "ุส": 125230, + "ãģ¹ãģį": 125231, + "ĠÑģамÑĭй": 125232, + "ĠплÑı": 125233, + "Ġбед": 125234, + "人æīį": 125235, + "สหร": 125236, + "ูà¸ķ": 125237, + "Ġkullanımı": 125238, + "íķĻëħĦ": 125239, + "æ²»çĸĹ": 125240, + "ãĢĤä¸įè¿ĩ": 125241, + "æ£ļ": 125242, + "ëĤ¨ëıĦ": 125243, + "Ġآتش": 125244, + "ÏĩÎŃÏĤ": 125245, + "Ġfunkci": 125246, + "нообÑĢаз": 125247, + "à¥ĭफ": 125248, + "Ġkaps": 125249, + "าษà¸İ": 125250, + "(ع": 125251, + "ï¼ĮåĬł": 125252, + "à¹Ĭà¸ģ": 125253, + "ĠÙĩØ´": 125254, + "ĠدرÙĪÙĨ": 125255, + "ĠмеÑĩ": 125256, + "ĠпÑĢежде": 125257, + "à¹Īย": 125258, + "Ġارشد": 125259, + "าà¹Ģล": 125260, + "æ¯Ķè¼ĥ": 125261, + "Ġذکر": 125262, + "ĠæĿ¡": 125263, + "ÐĬ": 125264, + "ÑĥкÑĢаÑĹн": 125265, + "ÙĬÙĨات": 125266, + "ì¢ĭ": 125267, + "диÑı": 125268, + "ÏĦÏģι": 125269, + "ĠÐļаз": 125270, + "ÙĤÙĦاÙĦ": 125271, + "_,,": 125272, + "ĠÚĨت": 125273, + "ĠìĿ¼ìłķ": 125274, + "ĠÐŁÑĢоÑĦ": 125275, + "æ³Ľ": 125276, + "Ġdruhý": 125277, + "ÑĩÑĥк": 125278, + "ledik": 125279, + "Ġheyec": 125280, + "Ñĭвал": 125281, + "ĠDüny": 125282, + "ĠçĻº": 125283, + "ĠpÅĻátel": 125284, + "βάλ": 125285, + "Ġغر": 125286, + "ëĭ¨ì²´": 125287, + "ìĽ¨ëĶĶìĭľ": 125288, + "ÑĢаÑīениÑı": 125289, + "нÑĨиклопед": 125290, + "Ġpodnikatel": 125291, + "Ġìĭłìŀħ": 125292, + "ĠÙģØ±Ø¢": 125293, + "илиÑģÑı": 125294, + "Ġolumlu": 125295, + "à¥įषमत": 125296, + "ĠÙħتخصص": 125297, + "йом": 125298, + "ؤاÙĦ": 125299, + "ĠÐĿаÑĤ": 125300, + "ìĺ¤ëĬĶ": 125301, + "ĠMüdürlÃ¼ÄŁÃ¼": 125302, + "ĠHÃłnh": 125303, + "ĠسابÙĤ": 125304, + "ï¼īçļĦ": 125305, + "ĠQuý": 125306, + "ládánÃŃ": 125307, + "Ġìļ´ëıĻ": 125308, + "ĠÐĺÑħ": 125309, + "諾": 125310, + "lıģının": 125311, + "lil": 125312, + "uÄį": 125313, + "ĠÑĩемпÑĸон": 125314, + "ÑĤож": 125315, + "Ġä½Ľ": 125316, + "ниÑĨе": 125317, + "ĠпеÑĢвого": 125318, + "ĠÑģом": 125319, + "ÏĩÏİ": 125320, + "ÅĻik": 125321, + "иÑĤелÑĮÑģÑĤва": 125322, + "Ġİki": 125323, + "Ġaskeri": 125324, + "cisi": 125325, + "ĠjednÃŃm": 125326, + "Ġstanice": 125327, + "èĤ¡ç¥¨": 125328, + "à¸ľà¸¡": 125329, + "Từ": 125330, + "Å¡ak": 125331, + "ÏĦία": 125332, + "мами": 125333, + "ãģĮåĩº": 125334, + "μοί": 125335, + "маÑĶ": 125336, + "ëł¥ìĿ´": 125337, + "ãĤĦãģ£ãģ¦": 125338, + "Ġå¼µ": 125339, + "ØĮĊ": 125340, + "Ġ»Ċ": 125341, + "اجات": 125342, + "á½³": 125343, + "æĻĤãģ®": 125344, + "Ġпокол": 125345, + "ÑĸÑĤеÑĤ": 125346, + "Ġíķ´ê²°": 125347, + "Ġdedim": 125348, + "ĠÑĤвеÑĢд": 125349, + "ĠженÑīина": 125350, + "едини": 125351, + "ĠÙ¾ÛĮÚ©": 125352, + "iversite": 125353, + "ĠآسÛĮاب": 125354, + "ĠÑħаÑĢакÑĤеÑĢиÑģÑĤики": 125355, + "ĠØ£ÙĨÙĩا": 125356, + "ĠÑĥкÑĢаÑĹнÑģÑĮкоÑĹ": 125357, + "ĠاختÙĦاÙģ": 125358, + "Ġtez": 125359, + "ÏģεÏħ": 125360, + "Ġkonumu": 125361, + "ĠÑĤеÑħнÑĸ": 125362, + "мÑĸв": 125363, + "èĬ¯": 125364, + "ĠÏĥελ": 125365, + "Ä¢": 125366, + "μιÏĥ": 125367, + "ีà¹īĊ": 125368, + "Ġmne": 125369, + "ĠоÑĤвеÑĩ": 125370, + "ĠÎī": 125371, + "Ġéĩİ": 125372, + "Ġgấp": 125373, + "ĠпÑĢодÑĥкÑĤÑĭ": 125374, + "ĠСÑĢед": 125375, + "ÑĸллÑı": 125376, + "à¸ļà¸Ńà¸ģ": 125377, + "ĠtÅĻÃŃdy": 125378, + "Ġthá»ķ": 125379, + "ãĥĩãĤ£ãĤ¢": 125380, + "ÏĢοιη": 125381, + "νει": 125382, + "æĪij们çļĦ": 125383, + "Ġprofesyonel": 125384, + "ĠRakou": 125385, + "Ġвидно": 125386, + "Ġzby": 125387, + "ĠØŃاÙĦÛĮ": 125388, + "Ġé£Ł": 125389, + "ĠLÃłm": 125390, + "Ġگست": 125391, + "ĠТип": 125392, + "θι": 125393, + "ávis": 125394, + "ÙIJب": 125395, + "åı¯èĥ½æĢ§": 125396, + "ĠÑģемей": 125397, + "ãĤīãĤĮãģ¦ãģĦãĤĭ": 125398, + "ìĥģíĴĪ": 125399, + "ĠοÏħ": 125400, + "Ġà¤ħà¤Ĺस": 125401, + "олом": 125402, + "γον": 125403, + "ĠÑģвÑıÑī": 125404, + "æĵ¦": 125405, + "ÏĥÏĦηκε": 125406, + "èĢħçļĦ": 125407, + "-à¤ķ": 125408, + "ÑĤии": 125409, + "ĠвизнаÑĩеннÑı": 125410, + "åıijåĩº": 125411, + "даÑħ": 125412, + "ĠмоÑĢÑı": 125413, + "æī¾åΰ": 125414, + "ÙĦÙĪØ¨": 125415, + "èĬĻ": 125416, + "ĠÑĦакÑĤ": 125417, + "æ¯į亲": 125418, + "idlo": 125419, + "ĠStad": 125420, + "Ñįй": 125421, + "ìĽIJìĿ´": 125422, + "à¤ıन": 125423, + "æķ´ä¸ª": 125424, + "Ġfık": 125425, + "ĠÙħات": 125426, + "ÏĢον": 125427, + "Ġ경기ëıĦ": 125428, + "Ġαδ": 125429, + "Ġvzpom": 125430, + "Ġná»ĵi": 125431, + "ĠÙĨÙĤاط": 125432, + "ождение": 125433, + "ĠзалÑĸз": 125434, + "Ġrá»§i": 125435, + "è¾°": 125436, + ".:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:": 125437, + "ĠMÃľ": 125438, + "Ġkari": 125439, + "ĠÑģобÑĭ": 125440, + "ìĸ´ì§Ħ": 125441, + "رÙĬس": 125442, + "ubu": 125443, + "ĠØ®ÙĦÙģ": 125444, + "ظٹط": 125445, + "æĿī": 125446, + "ĠæĻ®éĢļ": 125447, + "ĠÙħÙĪØ§Ø·ÙĨØ©": 125448, + "ĠÑģÑĤанÑĥ": 125449, + "Ġê·¸ëħĢìĿĺ": 125450, + "ĠÙĦÙĥرة": 125451, + "Ġosm": 125452, + "ĠÑĥÑĢож": 125453, + "ега": 125454, + "Ġfelse": 125455, + "æĢĿèĢĥ": 125456, + "ãĢĮãģĪ": 125457, + "ĠновиÑħ": 125458, + "à¹IJ": 125459, + "üml": 125460, + "Ġíͼíķ´": 125461, + "ìĿ¼ë°ĺ": 125462, + "Ġtürü": 125463, + "ĠмÑĸÑģÑĤÑĸ": 125464, + "Ġkaždé": 125465, + "ĠÙħسجد": 125466, + "ấc": 125467, + "ĠÙģÚ©ÛĮ": 125468, + "Ġyasal": 125469, + "å°±ç®Ĺ": 125470, + "ĠоблиÑĩÑĩÑı": 125471, + "ĠÙĦدÙĬ": 125472, + "ابات": 125473, + "ĠÑģпаÑģ": 125474, + "êµ°ìļĶ": 125475, + "Ġпад": 125476, + "ĠбÑĢаÑĤ": 125477, + "éĩį大": 125478, + "Ġdüzenlenen": 125479, + "Gün": 125480, + "Ġaplikace": 125481, + "à¸Ńห": 125482, + "Ġçħ": 125483, + "ĠÑģоÑģÑĤоиÑĤ": 125484, + "è¯Ħä»·": 125485, + "ĠDuy": 125486, + "طاÙĤ": 125487, + "ĠпÑĢидеÑĤÑģÑı": 125488, + "Ġtolik": 125489, + "Ġobrov": 125490, + "ĠpÅĻipoj": 125491, + "ĠÄ±ÅŁÄ±": 125492, + "Ú¯ÙĪÛĮ": 125493, + "æľŁå¾ħ": 125494, + "иплом": 125495, + "Ġince": 125496, + "ĠСоб": 125497, + "енÑĮÑİ": 125498, + "è§Ĵèī²": 125499, + "Ġà¸ķร": 125500, + "Ġbại": 125501, + "Ġê°ĢëĬ¥íķľ": 125502, + "ĠblÃŃzk": 125503, + "Ġtách": 125504, + "ĠвидÑĭ": 125505, + "иÑĩна": 125506, + "Ġvyžad": 125507, + "ĠìĨIJìĿĦ": 125508, + "ĠÐĿÑĸмеÑĩ": 125509, + "åŁºäºİ": 125510, + "ĠÐļÑĢи": 125511, + "ĠعزÛĮز": 125512, + "tiler": 125513, + "евÑĸ": 125514, + "Ġmožnosti": 125515, + "باز": 125516, + "ĠìĤ¬ë§Ŀ": 125517, + "ĠzÅĻejmÄĽ": 125518, + "íŤ": 125519, + "Ġürünleri": 125520, + "Ġγλη": 125521, + "аки": 125522, + "ãĤĴéĸĭ": 125523, + "anou": 125524, + "åĽ½ãģ®": 125525, + "ĠyaÅŁanan": 125526, + "ĠÑģевеÑĢ": 125527, + "Ġæ©Ł": 125528, + "มาà¸ģมาย": 125529, + "ĠíijľíĺĦ": 125530, + "รส": 125531, + "ĠضربÙĩ": 125532, + "ĠEvet": 125533, + "æĨ¶": 125534, + "ĠدÙĤÛĮÙĤ": 125535, + "Ġвозникнов": 125536, + "ìľłë¨¸": 125537, + "Ġíijľìĭľ": 125538, + "ÛĮØ´ÙĨ": 125539, + "ãĥĹãĥ©": 125540, + "ÑĤÑİ": 125541, + "ÙĪØ³ÛĮ": 125542, + ")ìĿ´": 125543, + "è¯ģæĺİ": 125544, + "ãģ§ãģįãģ¾ãģĻ": 125545, + "ìĪĺìĿĺ": 125546, + "çĸĨ": 125547, + "ĠÙħÙģÙĩÙĪÙħ": 125548, + "оÑĩаÑĤкÑĥ": 125549, + "ालà¤ķ": 125550, + "æ¡Ĥ": 125551, + "ĠоÑħоÑĢони": 125552, + "ĠارزÛĮابÛĮ": 125553, + "ĠìµľëĮĢ": 125554, + "Ġthoải": 125555, + "ĠЦенÑĤÑĢалÑĮ": 125556, + "ĠçķĻ": 125557, + "à¸Ľà¸£à¸°à¹Ģà¸łà¸Ĺ": 125558, + "æµ·å¤ĸ": 125559, + "ĠÅŀu": 125560, + "íĻľëıĻ": 125561, + "ĠdvÄĽma": 125562, + "istrovstvÃŃ": 125563, + "Ġaracılıģıyla": 125564, + "Ġtrá»Ļn": 125565, + "»:": 125566, + "íĭ±": 125567, + "ĠÙĦÛĮÚ¯": 125568, + ".Ðļ": 125569, + "ĠÙħÙĤاÛĮسÙĩ": 125570, + "ĠвмÑĸ": 125571, + "رÙĪØ¨": 125572, + "ĠاÙĦØ´Ùħ": 125573, + "ĠdennÄĽ": 125574, + "ÑĥÑĩа": 125575, + "åħ¹": 125576, + "Ñīим": 125577, + "ĠíĬ¹íŀĪ": 125578, + "ĠاستاÙĨدارد": 125579, + "à¥Ģध": 125580, + "ãĤ¸ãĤ¢": 125581, + "à¹ĩà¹ĩ": 125582, + "иÑģÑģ": 125583, + "Ġkazanç": 125584, + "ĠzÃŃskal": 125585, + "åĽŀæĿ¥": 125586, + "ĠпÑıÑĤÑĮ": 125587, + "ĠÄijãi": 125588, + "ĠÙĪØ±Ø¯": 125589, + "Ġìķķ": 125590, + "ุà¸Ĺร": 125591, + "åĬ¨çī©": 125592, + "Ġpublik": 125593, + "æĪIJæľ¬": 125594, + "æĪIJåijĺ": 125595, + "ãĤ¤ãĤ¯": 125596, + "شرÙĥØ©": 125597, + "á¿ĨÏĤ": 125598, + "Ġyola": 125599, + "üyoruz": 125600, + "ĠкÑĥÑĢи": 125601, + "ĠпоÑħож": 125602, + "Ġìłľê°Ģ": 125603, + "ियत": 125604, + "ائÙĦØ©": 125605, + "Ġãģ¾": 125606, + "़à¥ĩà¤Ĥ": 125607, + "ÑģÑĮкими": 125608, + "âĢľä½ł": 125609, + "imizde": 125610, + "ìµľìĭł": 125611, + "Ậ": 125612, + "èŁ": 125613, + "à¸Ħรà¸Ńà¸ļ": 125614, + "ãĢĢãĢĢãĢĢĠãĢĢĠãĢĢĠãĢĢ": 125615, + "تغ": 125616, + "ĠVÅ¡ech": 125617, + "à¸±à¸Ľà¸Ķาห": 125618, + "Ġatd": 125619, + "воÑİ": 125620, + "Ġyapım": 125621, + "ologické": 125622, + "Ġплен": 125623, + "Ġlazım": 125624, + "rung": 125625, + "ìĦľê´Ģ": 125626, + "Ġjiný": 125627, + "Ġtròn": 125628, + "ĠполÑĸÑĤики": 125629, + "اÙĥÙħ": 125630, + "دÛĮگر": 125631, + "à¥Īà¤Ĥ.Ċ": 125632, + "ĠاÙĩد": 125633, + "Ġãĥį": 125634, + "ĠпÑĢодÑĥкÑĤов": 125635, + "æĤŁ": 125636, + "ĠpÅĻÃŃpadech": 125637, + "ĠzaÄįala": 125638, + "åħ¥ãĤĮ": 125639, + "ĠÑĢÑĸвнÑĸ": 125640, + "æĦŁæĥħ": 125641, + "ĠΧα": 125642, + "죽": 125643, + "ิà¸Īารà¸ĵ": 125644, + "ÂłÐ±": 125645, + "ÑĸÑĹв": 125646, + "بش": 125647, + "çļĦéĹ®é¢ĺ": 125648, + "Ġzastup": 125649, + "볤ìļĶ": 125650, + "ãģ§ãģĻãģŃ": 125651, + "âĢĮداÙĨ": 125652, + "ï¼ĮæĤ¨": 125653, + "ĠuvÄĽdom": 125654, + "ãģ¦ãĤĭ": 125655, + "ìĤ¬ëŀĮ": 125656, + "lun": 125657, + "éĽĨåIJĪ": 125658, + "ë§¹": 125659, + "Ġžid": 125660, + "à¤Ĭ": 125661, + "Ġtrp": 125662, + "лениÑħ": 125663, + "___": 125664, + "ÐľÐŀ": 125665, + "å¼ĭ": 125666, + "λÎŃον": 125667, + "ĠÄijòi": 125668, + "ĠкÑĢок": 125669, + "layıcı": 125670, + "ì¶ľìŀ¥ë§ĪìĤ¬ì§Ģ": 125671, + "åijĪ": 125672, + "éľŀ": 125673, + "ĠпоглÑıд": 125674, + "ترÙĥ": 125675, + "ĠتÙ쨧ÙĪØª": 125676, + "Ġå®®": 125677, + "ĠدÙĪØ±Ø¨ÛĮÙĨ": 125678, + "æĶ¾åľ¨": 125679, + "ĠÑģлÑĥÑĩаев": 125680, + "ĠÏħÏĢηÏģε": 125681, + "ë§ŀ": 125682, + "ãģĻãģĻ": 125683, + "ê²łëĭ¤": 125684, + "รายà¸ģาร": 125685, + "ĠÏĢÏģιν": 125686, + "ĠÑģмеÑĪ": 125687, + "å§ī": 125688, + "Ġvýsledky": 125689, + "Ġpotvr": 125690, + "åıijè¡Į": 125691, + "Ġtúi": 125692, + "ĠìĤ¬ëĿ¼": 125693, + "ç«Ļåľ¨": 125694, + "Ġjaký": 125695, + "Ġà¸ļาà¸ĩ": 125696, + "Ġdikkate": 125697, + "ĠدرآÙħد": 125698, + "æİĴåIJį": 125699, + "rálnÃŃ": 125700, + "ê³¼ìĿĺ": 125701, + "ä½µ": 125702, + "олаг": 125703, + "isiyle": 125704, + "Ġæ½": 125705, + "Ġतम": 125706, + "Ġdij": 125707, + "Ġnhánh": 125708, + "ĠRek": 125709, + "设æĸ½": 125710, + "ĠpodmÃŃnek": 125711, + "å¹¶ä¸į": 125712, + "кÑĥÑĤ": 125713, + "Ġê³łëł¤": 125714, + "çļĦå£°éŁ³": 125715, + "æĪĺäºī": 125716, + "даÑı": 125717, + "Ġê´Ģìĭ¬": 125718, + "ĠÑĦÑĸнанÑģ": 125719, + "ĠKöy": 125720, + "Ġжал": 125721, + "ĠÑģлÑĥжби": 125722, + "мена": 125723, + "تÙĬار": 125724, + "ĠÑĩемпион": 125725, + "ÏĢιÏĥ": 125726, + "landırma": 125727, + "maktan": 125728, + "Ġ丶": 125729, + "à¹Īà¸Ńส": 125730, + "ĠmÃ¼ÅŁteri": 125731, + "ĠصÙĨد": 125732, + "Ġetmesi": 125733, + "ĠпоÑĢÑĤ": 125734, + "νονÏĦαι": 125735, + "Ġãħĭãħĭ": 125736, + "ĠKAR": 125737, + "Ġuch": 125738, + "ĠØ®ÙĦÙĤ": 125739, + "าษà¸İร": 125740, + "æŃ¡": 125741, + "Ġимени": 125742, + "ãģłãģijãģ©": 125743, + "Ġìĭ¤ìĭľ": 125744, + "ÏĥÏīÏĢ": 125745, + "Ġì£": 125746, + "tÄĽÅ¾": 125747, + "Ġözellikleri": 125748, + "Ġبپ": 125749, + "ĠизобÑĢаж": 125750, + "ÙĬÙħÙĥÙĨ": 125751, + "ĠãĥĶ": 125752, + "ĠÐĶив": 125753, + "ĠØ¥ÙĬ": 125754, + "ÙĥÙĬÙĦ": 125755, + "ĠÅŁik": 125756, + "Ġà¤Ĩà¤ĸ": 125757, + "larınızı": 125758, + "ĠвÑĸдÑĢÑĸз": 125759, + "ĠÑĢобоÑĤа": 125760, + "Ġtarif": 125761, + "ĠاÙĪØª": 125762, + "ınma": 125763, + "é£Łãģ¹": 125764, + "ĠuzavÅĻ": 125765, + "룸": 125766, + "çĽijçĿ£": 125767, + "Ġ:ï¼¼": 125768, + "θÏħν": 125769, + "à¸Ķร": 125770, + "alarından": 125771, + "èĩªæĭį": 125772, + "ĠroÄįnÃŃ": 125773, + "ाà¤ĩव": 125774, + "ĠÙĥÙĪØ±": 125775, + "ĠÏĦαιν": 125776, + "ĠÑĸндив": 125777, + "rve": 125778, + "ĠνεÏĨÏİÏĥειÏĤ": 125779, + "Ġbá»ijn": 125780, + "Ġå¿«": 125781, + "ĠÑģолÑĮ": 125782, + "liÄŁinde": 125783, + "à¤¿à¤¨à¤Ł": 125784, + "ahtar": 125785, + "ĠnebezpeÄį": 125786, + "æĹ¢çĦ¶": 125787, + "ĠëĮĢìłĦ": 125788, + "ĠÙĨÚ¯ÙĩدارÛĮ": 125789, + "ĠzÃŃskat": 125790, + "ĠналиÑĩие": 125791, + "Ġaks": 125792, + "ï¼īãĢĤĊĊ": 125793, + "Ġrodiny": 125794, + "ĠзаÑħÑĸд": 125795, + "å¾®ç¬ij": 125796, + "ÂłÐĶа": 125797, + "radu": 125798, + "īnh": 125799, + "ples": 125800, + "ĠKons": 125801, + "ิà¹Ĥล": 125802, + "ĠاÙĦÙĪØµ": 125803, + "åIJ¬åΰ": 125804, + "ĠÑģпоÑĢÑĤив": 125805, + "ĠÑģайÑĤе": 125806, + "Ġاظ": 125807, + "larındaki": 125808, + "Ġtá»ķn": 125809, + "ÐĿÐĨ": 125810, + "Ġnedost": 125811, + "ĠÑĤоÑĢгÑĸв": 125812, + "ĠاÛĮت": 125813, + "Ġاختصاص": 125814, + "ĠÃľy": 125815, + "ĠSadece": 125816, + "ĠÙħخرÙĪØ·": 125817, + "Äģn": 125818, + "çesi": 125819, + "ĠçĬ": 125820, + "ãĤĤãģ£ãģ¨": 125821, + "ĠéŁĵ": 125822, + "èµĸ": 125823, + "ĠполÑĥÑĩениÑı": 125824, + "Ġëĺ": 125825, + "âĢĻÑĹ": 125826, + "bÃŃr": 125827, + "ĠбÑĸблÑĸ": 125828, + "ĠDá»±": 125829, + "женеÑĢ": 125830, + "ç½ijåĪĬ": 125831, + "Ġà¤²à¥ľà¤ķ": 125832, + "ĠÑĥÑĩнÑĸв": 125833, + "èΰ": 125834, + "ĠÃĸÄŁren": 125835, + "Ġola": 125836, + "Ġ।âĢĿĊĊ": 125837, + "ระà¹Ģà¸ļ": 125838, + "á½²": 125839, + "Ġرز": 125840, + "еи": 125841, + "ÑıÑĩи": 125842, + "ØŃب": 125843, + "æĴ¤": 125844, + "ãģ¾ãģŁãģ¯": 125845, + "бина": 125846, + "ĠγεÏģ": 125847, + "ĠоÑĤноÑģиÑĤÑģÑı": 125848, + "åīįçļĦ": 125849, + "Ġšť": 125850, + "Ġyılda": 125851, + ":::::|": 125852, + "ustil": 125853, + "اÙĦØ¥": 125854, + "ĠsouÄįasné": 125855, + "ĠÙĨÛĮرÙĪÛĮ": 125856, + "ÑĩеÑģкое": 125857, + "ظÙģ": 125858, + "ĠÙ¾ÛĮØ´ÛĮÙĨÙĩ": 125859, + "ĠعÙ쨴": 125860, + "Ġrostlin": 125861, + "ç½ijåĪĬä¸ĭ载次æķ°": 125862, + "ĠпÑĢигоÑĤовиÑĤÑĮ": 125863, + "ãĥĮ": 125864, + "ĠÙĪÙħع": 125865, + "Ġbecer": 125866, + "ĠãĤ±": 125867, + "ÏĩήÏĤ": 125868, + "оÑģÑĤÑĥп": 125869, + "Ġ밾매": 125870, + "Ñĸйного": 125871, + "Ġhrd": 125872, + "ĠпÑĢепаÑĢаÑĤÑĭ": 125873, + "ĠÙģØ±Ø¶": 125874, + "ĠTyto": 125875, + "ĠкÑĢаÑĹн": 125876, + "Ġزاد": 125877, + "Ġiktidar": 125878, + "ì§ĵ": 125879, + "Ùijر": 125880, + "ÑĢÑıдÑĥ": 125881, + "кÑĸй": 125882, + "âĶ£": 125883, + "Ġкожи": 125884, + "ĠتازÙĩ": 125885, + "obec": 125886, + "inae": 125887, + "Ġvyjád": 125888, + "ĠرÙģØªÙĩ": 125889, + "Що": 125890, + "ĠBylo": 125891, + "оÑĤв": 125892, + "ĠденÑĮги": 125893, + "é§Ĩ": 125894, + "ĠмаÑĪин": 125895, + "Ġأج": 125896, + "ì´Īëĵ±íķĻêµIJ": 125897, + "dıģında": 125898, + "баÑģ": 125899, + "Ġæł¹": 125900, + "ÎijÎĿΤ": 125901, + "ÙĴØŃ": 125902, + "Ġjejichž": 125903, + "ìĹIJìĦľìĿĺ": 125904, + "Ġадже": 125905, + "Ġìı": 125906, + "ÏĥοÏħ": 125907, + "etleri": 125908, + "ĠبعدÛĮ": 125909, + "ĠìŀIJëıĻì°¨": 125910, + "ิà¸įà¸į": 125911, + "Ġtisk": 125912, + "ãĥ¼ãĤ¹ãĥĪ": 125913, + "Ġमतलब": 125914, + "ê³Ħíļį": 125915, + "ãĤ¦ãĥĪ": 125916, + "Ġà¹Ģมà¸ķร": 125917, + "Ġopsiyon": 125918, + "ĠÑĢавно": 125919, + "ĠبÛĮÙħÙĩ": 125920, + "Ġ먼ìłĢ": 125921, + "иÑĤелÑĮнÑĭм": 125922, + "ĠнÑĸби": 125923, + "ĠдеÑģÑıÑĤ": 125924, + "ĠÑģиÑĤÑĥаÑĨии": 125925, + "еÑĢÑĪе": 125926, + "ľ": 125927, + "ุà¸ķร": 125928, + "Ġyönetimi": 125929, + "éIJĺ": 125930, + "ĠÙħÛĮتÙĪØ§ÙĨ": 125931, + "ĠزÙĨدÙĩ": 125932, + "ãĥŃãĥ³": 125933, + "ĠKBS": 125934, + "ìĦľë¹ĦìĬ¤": 125935, + "ï»ł": 125936, + "eckého": 125937, + "ĠÙĤابÙĦÛĮت": 125938, + "ãĢĤä»Ĭ": 125939, + "ÃŃnÄĽ": 125940, + "ĠÑģмог": 125941, + "ĠÑģлÑĭÑĪ": 125942, + "ÙĴÙģ": 125943, + "poÅĻád": 125944, + "елÑĮно": 125945, + "ĠείÏĩαν": 125946, + "-ÐŁÐµÑĤеÑĢб": 125947, + "ĠChiến": 125948, + "éry": 125949, + "ĠÑĸнÑģÑĤиÑĤÑĥÑĤ": 125950, + "ç»Ĩèĥŀ": 125951, + "ÑĭÑŁN": 125952, + "Ġvua": 125953, + "Ġà¤ħश": 125954, + "ÑĢоÑģÑĤо": 125955, + "ĠvůÄįi": 125956, + "ë¿IJ": 125957, + "Ġliá»ĩt": 125958, + "Ġíķµ": 125959, + "ĠاÙ쨱": 125960, + "ĠTeknik": 125961, + "Ġroli": 125962, + "ĠпопÑĭÑĤ": 125963, + "аÑĤкÑĸв": 125964, + "Ġüniversit": 125965, + "аÑĤоÑĢÑĭ": 125966, + "ÑİÑīиÑħÑģÑı": 125967, + "Ġتض": 125968, + "лÑİÑĩаеÑĤÑģÑı": 125969, + "Ġíĸīë³µ": 125970, + "Ġayrıntılı": 125971, + "ĠкиÑĢп": 125972, + "æĭ¼": 125973, + "ëģĶ": 125974, + "лаÑĤа": 125975, + "Ġkhoán": 125976, + "Ġhâlâ": 125977, + "ÏĥÏħ": 125978, + "оглаÑģ": 125979, + "æİ¥çĿĢ": 125980, + "éĿ©åij½": 125981, + "ĠpÅĻeb": 125982, + "à¹Ģà¸īล": 125983, + "ĠاÙĦÙħÙĦÙĦÛĮ": 125984, + "åłĨ": 125985, + "íıIJ": 125986, + "à¸ķลà¸Ńà¸Ķ": 125987, + "°С": 125988, + "ìĤ¬ëŀij": 125989, + "Ġгиб": 125990, + "ë²Ī째": 125991, + "æĶ¹åıĺ": 125992, + "表çݰ": 125993, + "иÑĩеÑģким": 125994, + "สมà¹Ģà¸Ķ": 125995, + "å±ħæ°ij": 125996, + "ÂĽ": 125997, + "ĠìķĦìĿ´ëĶĶ": 125998, + "ĠмеждÑĥнаÑĢод": 125999, + "Ġyem": 126000, + "Ġmül": 126001, + "ĠاÛĮست": 126002, + "Ġãĥ´": 126003, + "ัà¸Ļà¹Ħà¸Ķ": 126004, + "à¥Ģण": 126005, + "åħ¶å®ŀ": 126006, + "Ġgelenek": 126007, + "ë¶ģëıĦ": 126008, + "à¹īาà¸ķ": 126009, + "Ġìī¬": 126010, + "ĠÏĢÎŃ": 126011, + "ĠÙĥاÙħÙĦ": 126012, + "ĠتعÙħÛĮر": 126013, + "訴": 126014, + "ë¹Ļ": 126015, + "iyim": 126016, + "å°¿": 126017, + "éĤ£æł·": 126018, + "êµŃìĿĺ": 126019, + "ãģĹãģ¦ãģĬãĤĬ": 126020, + "Ġniž": 126021, + "Ġκον": 126022, + "à¹Īาà¸Ń": 126023, + "Ġγε": 126024, + "ĠСевеÑĢ": 126025, + "ediálnÃŃ": 126026, + "ãģŁãģ¡ãģ®": 126027, + "mayacak": 126028, + "ÑĻ": 126029, + "ĠÑĥгл": 126030, + "Ġkapas": 126031, + "ÑĥвалиÑģÑı": 126032, + "ĠмеÑģÑıÑĨа": 126033, + "ữu": 126034, + "ิลล": 126035, + "ãĤĪãĤĬãĤĤ": 126036, + "à¥ĩण": 126037, + "Ġ客": 126038, + "ĠdeÄŁerli": 126039, + "ÙĪØ§Ø²": 126040, + "ีà¸Ńย": 126041, + "ĠåıĪ": 126042, + "Ġà¸Ķร": 126043, + "ĠÙĨاب": 126044, + "ĠتÙĦÙĪÛĮزÛĮÙĪÙĨ": 126045, + "Ġolanlar": 126046, + "ä¼ĺç§Ģ": 126047, + "ÙĥاÙĦ": 126048, + "ĠдеÑģÑıÑĤи": 126049, + "mán": 126050, + "ĠÑĢанÑĮ": 126051, + "Ġìłľì¶ľ": 126052, + "è³¢": 126053, + "або": 126054, + "Ġtechnik": 126055, + "ĠKiá»ĥm": 126056, + "teki": 126057, + "á¹": 126058, + "ĠmnÄĽ": 126059, + "Ġê³µê°Ħ": 126060, + "ĠMek": 126061, + "ĠاعتÙħاد": 126062, + "à¹Įà¹Ħà¸Ķ": 126063, + "εÏģÏĮ": 126064, + "ĠÑĥдаÑĢ": 126065, + "оÑĩÑĮ": 126066, + "æ¦Ĥ念": 126067, + "ÑĢал": 126068, + "алÑĮнÑĭми": 126069, + "à¥ģरस": 126070, + "ráci": 126071, + "ĠÙĤÙĪÙĦ": 126072, + "Ġदव": 126073, + "ĠпÑĢавда": 126074, + "Ġå¿ħ": 126075, + "Ġdosud": 126076, + "нÑĥÑĤÑĮÑģÑı": 126077, + "NÄĥm": 126078, + "à¸ĺà¸Ļ": 126079, + "Ġdokun": 126080, + "Ġåľ¨çº¿": 126081, + "ูà¹Ħ": 126082, + "ụy": 126083, + "ĠновÑĭÑħ": 126084, + "Ġmezun": 126085, + "ĠCần": 126086, + "à¸ģารà¸ŀ": 126087, + "ĠìĺĪìłķ": 126088, + "Ïĥή": 126089, + "à¹Īà¸Ļà¹Ģà¸ģม": 126090, + "ĠÙĪØ§ÙĦس": 126091, + "ãĥ³ãĥĨãĤ£": 126092, + "çľĭè§ģ": 126093, + "ĠساÙĦÙħ": 126094, + "ĠбагаÑĤÑĮоÑħ": 126095, + "ĠÄijÃłi": 126096, + "ĠدستÛĮ": 126097, + "à¸ŀà¸Ń": 126098, + "епÑĤи": 126099, + "ĠìłĦíĻĶ": 126100, + "æĻĤãģ«": 126101, + "ĠSeznam": 126102, + "мÑĸнÑĥ": 126103, + ";?#": 126104, + "à¥Ģसर": 126105, + "ĠÚĨÛĮست": 126106, + "νοια": 126107, + "ัà¸Ļà¸Ń": 126108, + "Ġà¸Ħำ": 126109, + "Ġë³´íĺ¸": 126110, + "Ġiddia": 126111, + "Ġβιβ": 126112, + "é«ĺä¸Ń": 126113, + "Ù¨": 126114, + "ÐĴаж": 126115, + "ĠиÑģполн": 126116, + "ÑĪÑĤов": 126117, + "ĠTaÅŁ": 126118, + "ìĽħ": 126119, + "åĬ¹": 126120, + "Ġåıĥ": 126121, + "Ġprostoru": 126122, + "ĠÑģпад": 126123, + "еÑĢина": 126124, + "ĠpÅĻeklad": 126125, + "Å¡ov": 126126, + "ĠÙģÙĩÙħ": 126127, + "æĬij": 126128, + "Ġابتدا": 126129, + "ãĤĴãģĬ": 126130, + "likler": 126131, + "ĠÙħاÙĥ": 126132, + "Ġkonut": 126133, + "ĠداÙĨشجÙĪÛĮ": 126134, + "ĠопÑĤим": 126135, + "ĠбÑĥма": 126136, + "ĠлÑİдÑıм": 126137, + "ĠлÑĸка": 126138, + "ĠÑĢозповÑĸд": 126139, + "nesenÃŃ": 126140, + "Ġà¸łà¸²à¸ŀ": 126141, + "иÑĩний": 126142, + "اطÙĦ": 126143, + "ÑİÑīими": 126144, + "ãģıãģ¨": 126145, + "éѝ": 126146, + "ĠجÙĨسÛĮ": 126147, + "ÐĺТ": 126148, + "रल": 126149, + "ĠÚ©ÙĪØ¯Ú©": 126150, + "олиÑĤ": 126151, + "ĠÑģÑĤÑĢÑĥкÑĤÑĥÑĢ": 126152, + "vekili": 126153, + "Ġबय": 126154, + "ĠgelmiÅŁ": 126155, + "िरफ": 126156, + "ĠнайкÑĢа": 126157, + "ĠÐĶжон": 126158, + "ĠãĥĹãĥŃ": 126159, + "ĠyaÅŁlı": 126160, + "ĠkarÄ±ÅŁtır": 126161, + "ĠvÄĽtÅ¡inou": 126162, + "Ġvazgeç": 126163, + "à¹īาà¸Ħ": 126164, + "lendirme": 126165, + "Ġç¨ĭ": 126166, + "说è¯Ŀ": 126167, + "ĠíķĦìļĶíķľ": 126168, + "aÅĻilo": 126169, + "ĠležÃŃ": 126170, + "ĠAmerikan": 126171, + "ãĤĦãģĻ": 126172, + "vajÃŃcÃŃ": 126173, + "ÐĿЯ": 126174, + "ĠìĹĦë§Ī": 126175, + "Ġåĥ": 126176, + "rál": 126177, + "Ġçay": 126178, + "tuÄŁ": 126179, + "ุà¸įาà¸ķ": 126180, + "ĠÑģлив": 126181, + "νοÏħ": 126182, + "ĠOv": 126183, + "ĠCHP": 126184, + "ĠZemÄĽ": 126185, + "ĠÄįeský": 126186, + "ĠThánh": 126187, + "иÑĤелÑĮноÑģÑĤÑĮ": 126188, + "æĦıä¹ī": 126189, + "à¥įरमण": 126190, + "ĠдиамеÑĤ": 126191, + "Ġklin": 126192, + "ĠکرÛĮ": 126193, + "ãģ§ãģ¯ãģªãģı": 126194, + "飯åºĹ": 126195, + "Ġkênh": 126196, + "ĠÑĢанÑĮÑĪе": 126197, + "ãĤĴãģĹãģŁ": 126198, + "ĠпÑĢибоÑĢ": 126199, + "Ġà¤ĸतर": 126200, + "Ġyu": 126201, + "é§IJ": 126202, + "ĠÑĢабо": 126203, + "ĠÐ¡ÐłÐ¡Ðł": 126204, + "èĬ¬": 126205, + "žila": 126206, + "еÑĢÑĤа": 126207, + "иÑģÑĤÑĢа": 126208, + "Ġкниги": 126209, + "ĠFrancie": 126210, + "ĠÚĺØ§Ù¾": 126211, + "ĠÎļοÏħ": 126212, + "ัวà¹Ģà¸Ńà¸ĩ": 126213, + "Ġlắng": 126214, + "Ġнами": 126215, + "Ġподой": 126216, + "дÑĢом": 126217, + "obus": 126218, + "ÐĴÑĸн": 126219, + "Ġstalo": 126220, + "Ġà¤ıà¤ľ": 126221, + "ĠLinh": 126222, + "ebiliriz": 126223, + "ĠзавÑĤÑĢа": 126224, + "μεÏģο": 126225, + "ĠÎŃν": 126226, + "ÑıÑĤно": 126227, + "ĠдоÑĢож": 126228, + "åıĤçħ§": 126229, + "Ïĥιο": 126230, + "à¹īà¹Ģà¸ģ": 126231, + "aných": 126232, + "ç·ł": 126233, + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ": 126234, + "åĬĽçļĦ": 126235, + "ĠSır": 126236, + "Ġì§ĢëıĦ": 126237, + "ç·Ĭ": 126238, + "ĠpoÄįtu": 126239, + "ï¼Įä¸İ": 126240, + "ä¸ĸç´Ģ": 126241, + "емого": 126242, + "Ġhusus": 126243, + "Ġölçüde": 126244, + "Ġtrục": 126245, + "à¸Ľà¸¥à¸Ńà¸Ķà¸ł": 126246, + "ÂłpÅĻÃŃ": 126247, + "ĠBölgesi": 126248, + "мом": 126249, + "ãģ«ãģ¦": 126250, + "Ġ쪽ì§Ģ": 126251, + "ÄĽtÅ¡": 126252, + "ĠìĦ±ê³µ": 126253, + "रत": 126254, + "urdu": 126255, + "ĠìĽĢì§ģ": 126256, + "ÑŁÐŃ": 126257, + "nÃŃkem": 126258, + "ĠskuteÄįnosti": 126259, + "ĠдаÑĤ": 126260, + "neum": 126261, + "ĠÑĤаблеÑĤ": 126262, + "jvu": 126263, + "Ġsedm": 126264, + "سÙĬØ©": 126265, + "ĠкоÑĢоб": 126266, + "emmel": 126267, + "ãģ¤ãģij": 126268, + "é¦Ļèķī": 126269, + "ĠشخصÛĮت": 126270, + "ä¸ĬäºĨ": 126271, + "ÙĪØ±Ø§": 126272, + "ĠаÑĤмоÑģ": 126273, + "Ġлей": 126274, + "Ġzprav": 126275, + "Ġëķħ": 126276, + "ูà¸Ĺ": 126277, + "Ġاسر": 126278, + "ĠAydın": 126279, + "ĠعÙħÙĦÙĬØ©": 126280, + "ĠдÑĸÑĶ": 126281, + "Ġdök": 126282, + "Ġफल": 126283, + "ĠìĤ¬ëŀĮëĵ¤ìĿ´": 126284, + "ĠнаÑĤÑĥÑĢалÑĮ": 126285, + "æŁľ": 126286, + "温度": 126287, + "Ġkles": 126288, + "ĠинвеÑģÑĤи": 126289, + "süz": 126290, + "æĴ°": 126291, + "ĠãĤ¢ãĥ«": 126292, + "ĠèĴ": 126293, + "адки": 126294, + "ĠklÃŃÄį": 126295, + "Ïĩεί": 126296, + "ĠThiết": 126297, + "ĠسرÛĮع": 126298, + "ĠÏĢεÏģιοÏĩή": 126299, + "ÙĪÙĤÙģ": 126300, + "ÏģÏīÏĥη": 126301, + "ĠسÙĦاÙħت": 126302, + "ëĵ¤ëıĦ": 126303, + "ĠveÅĻejné": 126304, + "Ġvitam": 126305, + "ĠبازÛĮگر": 126306, + "ĠÑĢеÑĨепÑĤ": 126307, + "ĠìľĦíķ´ìĦľ": 126308, + "ĠØ£Ùĥبر": 126309, + "Ġküt": 126310, + "민주": 126311, + "Ġtéž": 126312, + "Ġå¼ķ": 126313, + "ÑĩаÑģно": 126314, + "çļĦåľ°": 126315, + "Ġarchitekt": 126316, + "ĠбакÑĤеÑĢ": 126317, + "Ġãģį": 126318, + "ĠодеÑĢж": 126319, + "ĠتجارÛĮ": 126320, + "éĿĪ": 126321, + "Ġrecep": 126322, + "é©¶": 126323, + "ĠدÙĩÙĩ": 126324, + "è²Į": 126325, + "çµIJå©ļ": 126326, + "ılıç": 126327, + "ãģĭãĤīãģ¯": 126328, + "å¿ĥéĩĮ": 126329, + "æĬķè³ĩ": 126330, + "è²Ŀ": 126331, + "ĠкÑĥлÑĮÑĤÑĥÑĢÑĭ": 126332, + "Ġå°ij": 126333, + "à¹ģà¸ŀร": 126334, + "γκÏĮ": 126335, + "arım": 126336, + "ĠاساسÛĮ": 126337, + "ĠposlednÃŃch": 126338, + "ĠÙħÙħÙĨ": 126339, + "ĠпозиÑĤив": 126340, + "ìł¤": 126341, + "ÑĥвавÑģÑı": 126342, + "Ġجزئ": 126343, + "ìĿ´ìŀIJ": 126344, + "ĠинÑģÑĤÑĢÑĥк": 126345, + "Ġηλεκ": 126346, + "Ġdemir": 126347, + "ä¸ŃæĸĩåŃĹå¹ķ": 126348, + "ĠعاشÙĤ": 126349, + "ĠباÙĦÙĤ": 126350, + "Ġmaz": 126351, + "άνι": 126352, + "ĠdÃ¼ÄŁ": 126353, + "ĠκÏģα": 126354, + "ĠбÑĥдÑĤо": 126355, + "ç¦ıåĪ©": 126356, + "ĠпÑĢедназнаÑĩ": 126357, + "ÙħÙĦØ©": 126358, + "ĠбÑĥдинкÑĥ": 126359, + "Å¥an": 126360, + "íķĢ": 126361, + "ç´¹ä»ĭ": 126362, + "کز": 126363, + "ĠкаÑĦед": 126364, + "ãģ«è¦ĭ": 126365, + "าà¸ķรà¸IJาà¸Ļ": 126366, + "ë¡ľëĬĶ": 126367, + "ivÄĽ": 126368, + "èĥ½æºIJ": 126369, + "ï¼Įåħ¨": 126370, + "ĠÑĥдив": 126371, + "Ġë§ĮëĤĺ": 126372, + "ÐĴÐIJ": 126373, + "ĠGür": 126374, + "ĠдÑĢÑĥгим": 126375, + "ÏĥÏį": 126376, + "ĠoÄŁlu": 126377, + "Ġê°Ģê¹Į": 126378, + "ĠзнаÑĩиÑĤелÑĮно": 126379, + "озÑĸ": 126380, + "Ġmá»±c": 126381, + "ĠBeÅŁ": 126382, + "Ġjezd": 126383, + "ávÄĽ": 126384, + "ÏĦηÏĥε": 126385, + "ãģ¦ãģĦãģªãģĦ": 126386, + "ĠСвÑıÑĤ": 126387, + "Ġमश": 126388, + "ĠΤοÏħ": 126389, + "声ãĤĴ": 126390, + "ĠÑģамое": 126391, + "ĠåĮº": 126392, + "ĠìĤ¬ëŀĮìĿĢ": 126393, + "ĠÙħÙĦت": 126394, + "Ġjoker": 126395, + "Ġneob": 126396, + "ĠÑĤака": 126397, + "ĠÙĩÙģØª": 126398, + "Ġδεδο": 126399, + "ĠзаÑħоп": 126400, + "ĠاÙĦÙħخت": 126401, + "езда": 126402, + "Ġíķľë²Ī": 126403, + "ĠعاÙħØ©": 126404, + "Ġdostate": 126405, + "Ġplav": 126406, + "楽ãģĹ": 126407, + ".;.;.;.;": 126408, + "ваÑĶ": 126409, + "Ġbụi": 126410, + "ĠÄijỡ": 126411, + "ĠmyslÃŃ": 126412, + "ĠÙĨار": 126413, + "Ġnút": 126414, + "Ġмала": 126415, + "ΤΡ": 126416, + "ĠاÙĦرÙħزÙĬØ©": 126417, + "ladım": 126418, + "ä¸Ģç·Ĵ": 126419, + "ĠiÅŁÃ§": 126420, + "livé": 126421, + "르ê²Į": 126422, + "аннаÑı": 126423, + "ظËĨØ·": 126424, + "Ġdừng": 126425, + "ÙĦÙĥتر": 126426, + "çŃĶæ¡Ī": 126427, + "ĠÙħÙĪÙĤعÛĮت": 126428, + "ĠÑĸнозем": 126429, + "ĠиÑģÑĩ": 126430, + "ĠнепÑĢавилÑĮ": 126431, + "bakan": 126432, + "ĠçīĪ": 126433, + "еннÑİ": 126434, + "à¸ĩà¹Ģศ": 126435, + "à¸Ħวามà¸Ħ": 126436, + "%.Ċ": 126437, + "à¹Īà¹Ģà¸Ľ": 126438, + "ĠآبÛĮ": 126439, + "Ġstáty": 126440, + "ĠترتÛĮب": 126441, + "Äįemž": 126442, + "Ġé¹": 126443, + "ĠÙ쨧ÙĦ": 126444, + "Ġbelirlen": 126445, + "ĠâĨĺ": 126446, + "èĩ³å°ij": 126447, + "ĠBunlar": 126448, + "Ġä¸ĵ": 126449, + "ĠÙħØŃاس": 126450, + "ĠìĦľë²Ħ": 126451, + "Ġcanh": 126452, + "ĠпÑĢоÑĤÑıж": 126453, + "ĠнÑĸмеÑĨÑĮ": 126454, + "à¥Īà¤łà¤ķ": 126455, + "ëĭī": 126456, + "ĠнанеÑģ": 126457, + "ĠвозÑĢаÑģÑĤа": 126458, + "Ġ[â̦]Ċ": 126459, + ".à¸ŀ": 126460, + "ิศาสà¸ķร": 126461, + "çģ½": 126462, + "ê°ĻìĿĢ": 126463, + "ลà¸ĩà¸Ĺ": 126464, + "ãĤ±ãĥ¼ãĤ¹": 126465, + "ĠãĤ¢ãĤ¤": 126466, + "ÑģÑİ": 126467, + "ĠÙĦر": 126468, + "ãģĭãģ£ãģ¦": 126469, + "Ġ기ë°ĺ": 126470, + "Ġ!:": 126471, + "ĠÑģÑĬ": 126472, + "ĠØ´ÙĨاسÛĮ": 126473, + "ĠìķĦ침": 126474, + "Ġعباس": 126475, + "Ġà¸ķà¸Ńà¸Ļ": 126476, + "ĠмеÑĤалли": 126477, + "ÑĪила": 126478, + "Ġpodrob": 126479, + "ÑĸÑģно": 126480, + "Ġ赤": 126481, + "ciler": 126482, + "ozem": 126483, + "ĠоÑģновнÑĭÑħ": 126484, + "Âłà¤ķ": 126485, + "à¸ĸà¸Ļà¸Ļ": 126486, + "анÑĤаж": 126487, + "ĠDÃŃky": 126488, + "ĠگذارÛĮ": 126489, + "æľºä¼ļ": 126490, + "οÏħλίοÏħ": 126491, + "оÑĩек": 126492, + "ĠнапиÑĤ": 126493, + "ĠبÛĮشترÛĮ": 126494, + "ä¾į": 126495, + "ĠاÙĦÙħÙħ": 126496, + "ÙĪØ²ÙĬع": 126497, + "Ġgözlem": 126498, + "è°ĥæķ´": 126499, + "Âłmiles": 126500, + "Ġkoc": 126501, + "ัà¸įห": 126502, + "æ³³": 126503, + "ĠÎijγγ": 126504, + "ĠÙĨÙħاز": 126505, + "ุà¸Ĺ": 126506, + "ãĥıãĤ¤": 126507, + "Ġthù": 126508, + "кÑĥлÑı": 126509, + "ĠпÑĥÑĤем": 126510, + "èĩºçģ£": 126511, + "Ġvergi": 126512, + "åł´åIJĪãģ¯": 126513, + "ĠÑĤÑĢÑĮоÑħ": 126514, + "Ġë³´ë©´": 126515, + "âĸ²": 126516, + "Ïħγ": 126517, + "ĠдоÑĤÑĢим": 126518, + "æľµ": 126519, + "ĠumÄĽnÃŃ": 126520, + "èī¯ãģĦ": 126521, + "Âłà¸Ļาà¸ĩ": 126522, + "ÐİÑĭÑŁN": 126523, + "ä¸ī个": 126524, + "ียรà¸ķ": 126525, + "ï¼ĮåIJĮæĹ¶": 126526, + "ĠÑĢозÑĢаÑħÑĥн": 126527, + "ĠDers": 126528, + "ãģªãģ®": 126529, + "Ġ그를": 126530, + "dikleri": 126531, + "Ġhayata": 126532, + "è§ĦèĮĥ": 126533, + "ç»ĵåIJĪ": 126534, + "Ġscé": 126535, + "ĠcÆ¡m": 126536, + "åѸéĻ¢": 126537, + "ĠÐĦв": 126538, + "ĠÄįlánek": 126539, + "ĠдоÑģÑĤиг": 126540, + "ाà¤ĩस": 126541, + "εÏħÏĥη": 126542, + "éģ©ç͍": 126543, + "Ïĥον": 126544, + "ılmaktadır": 126545, + "ëªħìĿĦ": 126546, + "ıb": 126547, + "ĠstarÅ¡ÃŃ": 126548, + "ĠchÃŃn": 126549, + "ä¸Ģ个人": 126550, + "ĠFrantiÅ¡ek": 126551, + "nÄĽji": 126552, + "ﻨ": 126553, + "ĠÙĦÙĦد": 126554, + "Ġpokoj": 126555, + "Ġjih": 126556, + "ãĢįãĢĤ": 126557, + "ĠعبداÙĦ": 126558, + "ãĤĵãģ§ãģĦãĤĭ": 126559, + "ĠмоделÑĮ": 126560, + "ĠteÅŁkil": 126561, + "ĠÄĮer": 126562, + "à¹Ģà¸Ķà¸Ńร": 126563, + "'na": 126564, + "λογή": 126565, + "Ġkola": 126566, + "ãĥĢãĥ¼": 126567, + "иÑĤелем": 126568, + "ĠÏĥÏħνο": 126569, + "ĠKurum": 126570, + "Ġsnadno": 126571, + "ĠاÙĦÙĤرآÙĨ": 126572, + "ĠVá»ģ": 126573, + "é«ĺãģĦ": 126574, + "Ġyıldız": 126575, + "Ġbirisi": 126576, + "Ġkhúc": 126577, + "ÙĪÛĮÙĦ": 126578, + "æľĢä½³": 126579, + "Ġสาà¸Ĥ": 126580, + "ĠÐŁÐ¾Ðº": 126581, + "âīł": 126582, + "à¹Ĥà¸Ľà¸£à¹ģà¸ģรม": 126583, + "à¥įययन": 126584, + "èij¡": 126585, + "ĠnovÄĽ": 126586, + "ayıp": 126587, + "ĠSingap": 126588, + "è°ĵ": 126589, + "ãĤ¶ãĤ¤ãĥ³": 126590, + "ĠновÑĭе": 126591, + "Ġhảo": 126592, + "ĠèŤ": 126593, + "ãĥ³ãĥĸ": 126594, + "ÂłĊĊ": 126595, + "θεια": 126596, + "Ġпопада": 126597, + "ĠëĶĶìŀIJìĿ¸": 126598, + "ĠداشتÙĨد": 126599, + "ĠØ´ÙĨاختÙĩ": 126600, + "ÏĥμαÏĦα": 126601, + "å¹³æĸ¹åħ¬éĩĮ": 126602, + "Ġgöl": 126603, + "екоÑĤоÑĢ": 126604, + "Ġmálo": 126605, + "ĠاجازÙĩ": 126606, + "کاراÙĨ": 126607, + "ĠпÑĸдпÑĢиÑĶмÑģÑĤв": 126608, + "ä¸īå¹´": 126609, + "ĠسÙģÛĮد": 126610, + "ĠμÎŃÏģοÏĤ": 126611, + "ÐĻÐĻ": 126612, + "Ġhư": 126613, + "سÙĪØ¨": 126614, + "ĠÙĦذا": 126615, + "Ġnemovit": 126616, + "ĠdÃŃv": 126617, + "İs": 126618, + "¶¶": 126619, + "Ġphưá»Ŀng": 126620, + "ĠÙĨØŃÙĪÙĩ": 126621, + "Ðĭ": 126622, + "Ġzbyt": 126623, + "edii": 126624, + "nech": 126625, + "ĠадмÑĸнÑĸÑģÑĤÑĢаÑĤив": 126626, + "ĠnevÄĽ": 126627, + "Ġож": 126628, + "ĠÄIJó": 126629, + "à¸Ľà¸£à¸°à¸§": 126630, + "Ġvhodné": 126631, + "ĠumÄĽl": 126632, + "ĠÑĢазлиÑĩнÑĭе": 126633, + "ĠpÅĻiroz": 126634, + "ĠبخشÛĮ": 126635, + "ãģ®å¤§": 126636, + "ĠاÙĦÙĥÙĩ": 126637, + "ecká": 126638, + "Ġzorunlu": 126639, + "ĠÐľÐ¸ÐºÐ¾Ð»Ð°": 126640, + "Ġamel": 126641, + "ковÑĭе": 126642, + "::::/": 126643, + "ä¸įåIJĮçļĦ": 126644, + "ĠÙĪÙĥاÙĨت": 126645, + "à¸Ńà¸Ń": 126646, + "lásil": 126647, + "ĠпÑĢедполаг": 126648, + "ï½±": 126649, + "Ġνε": 126650, + "ĠновÑĭй": 126651, + "Ġìĺģíĸ¥ìĿĦ": 126652, + "Ġê°Ģì§Ħ": 126653, + "åĥħ": 126654, + "YD": 126655, + "Ġباغ": 126656, + "Ġشکست": 126657, + "Ġgüney": 126658, + "иÑģÑĮ": 126659, + "ãģĭãģªãģĦ": 126660, + "ĠTòa": 126661, + "ĠگردÛĮد": 126662, + "ØŃÙĦ": 126663, + "luvÃŃ": 126664, + "véd": 126665, + "Ġìĺ·": 126666, + "ĠεÏĢα": 126667, + "ĠÑĤиÑģÑıÑĩ": 126668, + "Ġê½ĥ": 126669, + "ĠPUS": 126670, + "ĠдÑĥмкÑĥ": 126671, + "ĠâĢĿĊ": 126672, + "ĠìĬ¤íı¬ì¸ł": 126673, + "ÙĩÙĩ": 126674, + "Ġgắng": 126675, + "à¸´à¸łà¸²à¸ŀ": 126676, + "éĩĮéĿ¢": 126677, + "brıs": 126678, + "Ġzáb": 126679, + "καÏĤ": 126680, + "ĠåıĮ线": 126681, + "ลล": 126682, + "ĠÄIJÃłi": 126683, + "åŃ¸æł¡": 126684, + "ĠÑĢаÑģпÑĢед": 126685, + "ĠÑģÑĤанеÑĤ": 126686, + "Ġлак": 126687, + "Ġподк": 126688, + "Ġgören": 126689, + "ë¥´ê³ł": 126690, + "ĠÑĦÑĢÑĥкÑĤ": 126691, + "íĵ¨íĦ°": 126692, + "ãģĻãĤĮãģ°": 126693, + "ãĤĴä½ľ": 126694, + "à¸Ńà¸Ńà¸ģà¹ģà¸ļà¸ļ": 126695, + "Ġkulak": 126696, + "ĠíĶĮëłĪìĿ´": 126697, + "ĠØŃدÙĬØ«": 126698, + "ãģĨãĤĵ": 126699, + "ĠмÑĸк": 126700, + "à¤ĩसà¤ķ": 126701, + "ĠÑĥÑĤоÑĩ": 126702, + "ĠÙĥØ«ÙĬر": 126703, + "ĠYine": 126704, + "ัวหà¸Ļ": 126705, + "нÑĸÑĹ": 126706, + "åį¢": 126707, + "ÑĥÑģлов": 126708, + "ìĽĮíģ¬": 126709, + "Ġà¤ħà¤ĸ": 126710, + "ĠÑĨÑĸка": 126711, + "ìĦłìĿĦ": 126712, + "Ġأر": 126713, + "галÑĤеÑĢ": 126714, + "anglicky": 126715, + "ĠÑģоÑģÑĥд": 126716, + "ĠÑĥÑıв": 126717, + "ĠпÑĢодÑĥкÑĨÑĸÑĹ": 126718, + "Ġchua": 126719, + "Ġdán": 126720, + "ामà¤Ĺ": 126721, + "ئت": 126722, + "ĠФед": 126723, + "Ġhrom": 126724, + "íķ´ë³´": 126725, + "ĠØ¢ÙĨÙĦاÛĮÙĨ": 126726, + "-пÑĢав": 126727, + "Ġì¤ijìļĶíķľ": 126728, + "ĠвкÑĥ": 126729, + "Ġ大éĺª": 126730, + "Ġterk": 126731, + "ĠподÑĸб": 126732, + "ĠвÑĸдвÑĸд": 126733, + "à¥Įà¤Ł": 126734, + "è³£": 126735, + "ĠبتÙĨ": 126736, + "ĠبعضÛĮ": 126737, + "ãģªãģĬ": 126738, + "ä»ĸåĢij": 126739, + "Ġtavsiye": 126740, + "ĠMısır": 126741, + "Ġإذ": 126742, + "ĠæIJ": 126743, + "íķĺëĤĺ": 126744, + "ĠÙĪØ®": 126745, + "ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ": 126746, + "Ġtakový": 126747, + "Ġबनन": 126748, + "ĠзÑĢениÑı": 126749, + "ĠÙĪÙģÙĤ": 126750, + "ë¹ĦìķĦ": 126751, + "ĠпоможеÑĤ": 126752, + "åĮĹå¸Ĥ": 126753, + "dıkları": 126754, + "Ġéĵģ": 126755, + "ĠaktuálnÃŃ": 126756, + "Ġвв": 126757, + "ãĤĤãģªãģĦ": 126758, + "íĨµìĭł": 126759, + "ÏĦαÏĥη": 126760, + "ĠìĥģëĮĢ": 126761, + "Ġæł¡": 126762, + "ãĢĤéĤ£": 126763, + "ĠرÙĪØ³ÛĮÙĩ": 126764, + "Ġtelevizyon": 126765, + "å¹´é¾Ħ": 126766, + "ĠÐijоÑĢиÑģ": 126767, + "리ìĸ´": 126768, + "ĠzveÅĻej": 126769, + "жно": 126770, + "ĠÐŀÑģÑĤ": 126771, + "ĠмÑĥжÑĩин": 126772, + "ĠyeÅŁil": 126773, + "ĠСовеÑĤ": 126774, + "ĠBÃĸL": 126775, + "ĠТакож": 126776, + "Ġobnov": 126777, + "ĠпÑĢинадлеж": 126778, + "ĠвиÑģнов": 126779, + "Ø·Ùħ": 126780, + "ĠìĹĨìĸ´": 126781, + "ĠMùa": 126782, + "ä½ıå®ħ": 126783, + "åĮ»åѦ": 126784, + "ĠнаÑĢез": 126785, + "ãĥĭï¾Ĩ": 126786, + "ĠMặt": 126787, + "Ġvuông": 126788, + "ä¸ĢåĮº": 126789, + "ĠẢnh": 126790, + "ÑĢиÑĦ": 126791, + "ä¿ĿéĻ©": 126792, + "ĠÏĩÏģήÏĥη": 126793, + "åIJĮæĦı": 126794, + "Ġæīĵ": 126795, + "etÄĽ": 126796, + "ĠÙĪØ°ÙĦÙĥ": 126797, + "ĠÑĤиж": 126798, + "ĠÎŁÎ¹ÎºÎ¿": 126799, + "ĠмÑĸÑģÑĨÑĸ": 126800, + "ĠÑĢебенок": 126801, + "ĠÅŀah": 126802, + "عÙĦÙĪÙħ": 126803, + "ladıģ": 126804, + "Ġgiden": 126805, + "ливоÑģÑĤÑĸ": 126806, + "ÙĴس": 126807, + "ĠTHB": 126808, + "Ġmeslek": 126809, + "ÂłÐĿе": 126810, + "μÏĨÏīνα": 126811, + "ĠÙĪØ§Ø¬": 126812, + "наÑģлÑĸд": 126813, + "æĺŁæľŁ": 126814, + "ÐĶж": 126815, + "ĠÑĢабоÑĤаеÑĤ": 126816, + "Ġsánh": 126817, + "ìļ°ë¦¬": 126818, + "ĠابÙĪ": 126819, + "çļĦæĥħ": 126820, + "ĠìϏêµŃ": 126821, + "Ġkabil": 126822, + "еÑĢвÑĭе": 126823, + "ĠgiÃłu": 126824, + "Ġtá»ı": 126825, + "ÂłÐij": 126826, + "å®Įæķ´": 126827, + "Ġmužů": 126828, + "ĠpomÄĽrnÄĽ": 126829, + "ĠÙħخصÙĪØµ": 126830, + "ĠÐĶем": 126831, + "ãĤıãĤĮãĤĭ": 126832, + "ĠпÑĢибÑĭ": 126833, + "ĠکاÙħÙ¾ÛĮ": 126834, + "ï¼Ń": 126835, + "Ġtrh": 126836, + "ĠÐijолÑĮÑĪ": 126837, + "´:": 126838, + "иваеÑĤÑģÑı": 126839, + "ĠìĤ¬íķŃ": 126840, + "è¿Ľä¸ĢæŃ¥": 126841, + "ÑĨей": 126842, + "ãģ¾ãģļ": 126843, + "аÑĤелем": 126844, + "éĮ¯": 126845, + "Ġžalob": 126846, + "ÑĨез": 126847, + "инÑĥв": 126848, + "Ġverze": 126849, + "åĽŀåΰ": 126850, + "Ġdược": 126851, + "ائÙĬÙĦ": 126852, + "stoupil": 126853, + "论æĸĩ": 126854, + "ĠÐŁÐ°ÑĢи": 126855, + "ĠдекоÑĢаÑĤив": 126856, + "اختÛĮ": 126857, + "ĠÑģÑĤÑĢем": 126858, + "ãĥ»âĶģãĥ»âĶģãĥ»âĶģãĥ»âĶģ": 126859, + "ĠÑģамой": 126860, + "ÑĩÑĤо": 126861, + "ìĥģëĭ´": 126862, + "âī¤": 126863, + "ÑĤого": 126864, + "ëIJ¨": 126865, + "ılacak": 126866, + "ä¸Ńãģ«": 126867, + "ĠÏħÏĢάÏģÏĩοÏħν": 126868, + "ĠвÑĸдбÑĥ": 126869, + "çİ»çĴĥ": 126870, + "ĠвпеÑĢед": 126871, + "ĠPlzeÅĪ": 126872, + "گاب": 126873, + "à¹Ģศรษà¸IJ": 126874, + "ï¼ĮæľĢ": 126875, + "ÙħÙĨÛĮ": 126876, + "çħ§çīĩ": 126877, + "缮å½ķ": 126878, + "ÑĢиÑĤÑĤÑı": 126879, + "âĢĮاش": 126880, + "ĠëĮĢíļĮ": 126881, + "ĠÅĻadu": 126882, + "-ÑĤеÑħ": 126883, + "ĠÙĬÙĪ": 126884, + "Ġà¹ģà¸ŀ": 126885, + "اÙĥÙĨ": 126886, + "Ġ기ìŀIJ": 126887, + "ĠгÑĸд": 126888, + "Ġìļ°ë¦¬ëĬĶ": 126889, + "Ø´ÙħارÛĮ": 126890, + "Ġticari": 126891, + "âij¢": 126892, + "ĠاÙĦبد": 126893, + "ĠÑĢаÑģÑĩ": 126894, + "ĠاÙĦÛĮ": 126895, + "Ġsürede": 126896, + "Ġاعتر": 126897, + "ĠпонÑıÑĤÑĮ": 126898, + "γκο": 126899, + "ï¼Įæ¯Ķ": 126900, + "ĠSeb": 126901, + "Ġìĭłê·ľ": 126902, + "æĶ¶çĽĬ": 126903, + "ĠÙ¾ÛĮØ´ÙĨÙĩاد": 126904, + "ÎľÎijΤ": 126905, + "ë°ĶìĿ´": 126906, + "ä¾ĽåºĶ": 126907, + "бин": 126908, + "人æ°Ĺ": 126909, + "ãģıãĤī": 126910, + "ĠskvÄĽl": 126911, + "Ġëĵ±ìŀ¥": 126912, + "æĭħå½ĵ": 126913, + "Ġimkan": 126914, + "æĻ¨": 126915, + "ï¼Įçİ°åľ¨": 126916, + "Ġsrdce": 126917, + "ìĤ°ìĹħ": 126918, + "Ġмодели": 126919, + "æľ¬å½ĵãģ«": 126920, + "анка": 126921, + "Ġyürüy": 126922, + "ĠоÑĩевид": 126923, + "ĠØŃسÙĬÙĨ": 126924, + "ÑīаÑİÑĤ": 126925, + "lédl": 126926, + "ÑĨо": 126927, + "ĠcÃŃsa": 126928, + "ãģĭãģij": 126929, + "èĹį": 126930, + "ĠØ®ÙĪØ§ÙĩÙĨد": 126931, + "Ġmuže": 126932, + "Ġнакоп": 126933, + "diÄŁini": 126934, + "erseniz": 126935, + "ĠпÑĢаÑĨÑĸвникÑĸв": 126936, + "длÑı": 126937, + "ĠαÏĥÏĦ": 126938, + "æ¶Īè´¹": 126939, + "Ġè¨Ģ": 126940, + "Ġbát": 126941, + "ĠØ´ÙĥÙĦ": 126942, + "ĠÑģпиÑĢ": 126943, + "ÏĢοÏĦε": 126944, + "ĠساÙĦÙĩ": 126945, + "ekil": 126946, + "à¹ģà¸Ĭม": 126947, + "ĠÏĥÏĦι": 126948, + "ĠÙħØ·ÙĦب": 126949, + "Ġìłķì±ħ": 126950, + "ê´Ģê³Ħ": 126951, + "å¹¹ç·ļ": 126952, + "Ġ京": 126953, + "éĢļéģİ": 126954, + "ĠدÛĮگراÙĨ": 126955, + "ĠØ£Ùħا": 126956, + "æĺ¯ä¸į": 126957, + "ĠëĮĢëĭµ": 126958, + "ĠErk": 126959, + "perty": 126960, + "ĠнаÑĩинаеÑĤ": 126961, + "Ġ그리": 126962, + "룡": 126963, + "ĠìĽ¹ìĤ¬ìĿ´íĬ¸": 126964, + "ारन": 126965, + "æĦıè¯Ĩ": 126966, + "ĠÐ¡ÐŁ": 126967, + "ĠباÙĬد": 126968, + "Ġbakımından": 126969, + "/TT": 126970, + "ĠÙģØ§ØµÙĦÙĩ": 126971, + "ĠÙħØ«ÙĦا": 126972, + "Ġквад": 126973, + "ĠشاÛĮد": 126974, + "ĠuÄįitel": 126975, + "çν": 126976, + "ĠعرضÙĩ": 126977, + "Ġ交": 126978, + "ĠÑĩеÑģÑĤÑĮ": 126979, + "à¥Ī?Ċ": 126980, + "ĠخاÙĨÙħ": 126981, + "etiyle": 126982, + "Ġεγκα": 126983, + "ĠÑģÑĥÑīе": 126984, + "ĠìĿ¼ìĸ´": 126985, + "ĠÐĽÐµÐ½Ð¸": 126986, + "Ġ声": 126987, + "álie": 126988, + "ãĥ¡ãĥ¼ãĤ¸": 126989, + "à¥Ģतर": 126990, + "галÑĸ": 126991, + "ĠмÑĸнÑĸм": 126992, + "ĠEÅŁ": 126993, + "ĠпÑĢоизоÑĪ": 126994, + "ÐĿаÑģ": 126995, + "ĠبÙĨÛĮ": 126996, + "让æĪij": 126997, + "ĠпоÑģÑĤеп": 126998, + "ĠìļĶ구": 126999, + "ılıp": 127000, + "ĠجÙĪØ±": 127001, + "ĠëĮĢë¶Ģë¶Ħ": 127002, + "à¹ĩà¸ķาม": 127003, + "ĠÑĦаÑģ": 127004, + "Ġìłķê·ľ": 127005, + "ламенÑĤ": 127006, + "ÄŁen": 127007, + "à¥ĩà¤ĤĊĊ": 127008, + "ĠÐĺванов": 127009, + "ĠØŃÚ©Ùħ": 127010, + "Ġï¾ļ": 127011, + "ï¼»": 127012, + "Ġnevid": 127013, + "ĠлабоÑĢаÑĤоÑĢ": 127014, + "à¸ŀยาà¸ļาล": 127015, + "Ġediyorum": 127016, + "Ġhlavy": 127017, + "ĠEvropské": 127018, + "Ġphái": 127019, + "ãĥĵãĥ¼": 127020, + "ê´ijìĹŃìĭľ": 127021, + "äºľ": 127022, + "ØŃداث": 127023, + "ĠпÑĢоÑĦилакÑĤи": 127024, + "rostÅĻed": 127025, + "ĠмалÑĮ": 127026, + "Ġmüdür": 127027, + "اساس": 127028, + "ĠгалÑĥзÑĸ": 127029, + "à¸µà¸Ł": 127030, + "ĠغذاÛĮÛĮ": 127031, + "åŃIJä¾Ľ": 127032, + "Ġbahsed": 127033, + "ĠKrálové": 127034, + "åį»": 127035, + "Ġ%,": 127036, + "ç½Ĺæĸ¯": 127037, + "ëļ": 127038, + "Ġçij": 127039, + "ĠξεÏĦα": 127040, + "ĠÐŃÑĤи": 127041, + "ĠíĨµíķ©": 127042, + "Ġاکتبر": 127043, + "ĠmÄĽsÃŃce": 127044, + "ìĪĺë¡ľ": 127045, + "ÑĦÑĸк": 127046, + "ĠÐĴоз": 127047, + "ÑĩеÑģким": 127048, + "ìļ´ëĵľ": 127049, + "Ġnáklady": 127050, + "ĠпоÑĤÑĢап": 127051, + "ĠÑĢÑĥкаÑħ": 127052, + "ιλο": 127053, + "ĠGül": 127054, + "ë©ĺ": 127055, + "à¹īย": 127056, + "makt": 127057, + "ãĥ³ãĥIJãĥ¼": 127058, + "ĠнÑĸÑı": 127059, + "ĠоÑĤÑĤен": 127060, + "mesinin": 127061, + "ĠвÑģпом": 127062, + "ĠìĿ´ëĬĶ": 127063, + "dyby": 127064, + "ãĤ¿ãĥ³": 127065, + "âĹİ": 127066, + "à¹īาหà¸Ļ": 127067, + "ادگÛĮ": 127068, + "Ïĩία": 127069, + "ĠsnažÃŃ": 127070, + "Ġà¤ļà¤ķ": 127071, + "μήμα": 127072, + "ĠÙĥر": 127073, + "Ġκοι": 127074, + "é̏": 127075, + "Ġneust": 127076, + "ĠÙĨظاÙħÛĮ": 127077, + "åįļçī©": 127078, + "Ġë²½": 127079, + "á½±": 127080, + "Ġì¶ľìĭľ": 127081, + "Ġarmá": 127082, + "ĠÙĩÙħکارÛĮ": 127083, + "çļĦæĥħåĨµ": 127084, + "ÙĤاÙħ": 127085, + "ÙĤب": 127086, + "ĠéĤ£": 127087, + "Ġë§¡": 127088, + "Ġolası": 127089, + "βÎŃÏģ": 127090, + "ä½ķãģĭ": 127091, + "ĠÑĥÑĩеб": 127092, + "ĠвÑĥз": 127093, + "Ġبرگز": 127094, + "'yi": 127095, + "ĠпÑĢазд": 127096, + "ĠÐŀÑĢг": 127097, + "Ġå¹¶": 127098, + "ĠÑģви": 127099, + "ĠÙħÛĮداÙĨ": 127100, + "ĠnaÅ¡eho": 127101, + "ĠBAÅŀ": 127102, + "å»Ĭ": 127103, + "ÌĪ": 127104, + "ãģĵãģĿ": 127105, + "à¹ĩà¸Ļà¸ŀ": 127106, + "οÏģειο": 127107, + "ĠбагаÑĤ": 127108, + "γει": 127109, + "μείο": 127110, + "à¹Īà¸ĩà¸Ĭาà¸ķ": 127111, + "ĠHizmetleri": 127112, + "ĠAfrika": 127113, + "Ġtedbir": 127114, + ",、": 127115, + "ä¸ī级": 127116, + "ÐİÑĭÑŁNÐİÑĭÑŁN": 127117, + "ĠÐļÑĢÑĸм": 127118, + "Ġaray": 127119, + "Ġböylece": 127120, + "коÑĤ": 127121, + "éϰ": 127122, + "åĽ½éļĽ": 127123, + "tÄĽl": 127124, + "Ġpolis": 127125, + "Ġuvol": 127126, + "ĠìĪĺê°ķ": 127127, + "ç͵èĦij": 127128, + "Ġsami": 127129, + "ĠشاخÙĩ": 127130, + "ĠвÑģÑĮого": 127131, + "ĠØŃداÙĤÙĦ": 127132, + "Ġiken": 127133, + "ãĤ¯ãĥ©ãĥĸ": 127134, + "Ġzávod": 127135, + "बल": 127136, + "ë°°ìĨ¡": 127137, + "éĩĩè´Ń": 127138, + "볬": 127139, + "Ġ।ĊĊ": 127140, + "Ġê°ģê°ģ": 127141, + "Ġмак": 127142, + "ÏģαÏĥη": 127143, + "ĠiÅŁlemi": 127144, + "ãģĹãģ¦ãģĦãģ¾ãģĻ": 127145, + "ĠPek": 127146, + "Ñİн": 127147, + "Ġvelkou": 127148, + "åĬŀçIJĨ": 127149, + "å®ĥ们": 127150, + "ĠèIJ¬": 127151, + "ĠнаÑĢодÑĥ": 127152, + "Ġchó": 127153, + "ĠHiç": 127154, + "Û³Ûµ": 127155, + "Ġรà¸Ńà¸ļ": 127156, + "Û³Û¶": 127157, + "à¸Ĥว": 127158, + "ä½įæĸ¼": 127159, + "ĠСÑĤа": 127160, + "ัà¸Ļม": 127161, + "ापà¤ķ": 127162, + "ĠÑĥÑĢок": 127163, + "ãĤ¢ãĥ¡ãĥªãĤ«": 127164, + "Ġзмож": 127165, + "skému": 127166, + "Ġè»Ĭ": 127167, + "ĠاختÛĮار": 127168, + "ĠPÅĺ": 127169, + "лÑıв": 127170, + "Ġмаз": 127171, + "ĠözelliÄŁi": 127172, + "åij¼ãģ°": 127173, + "Ġbirinin": 127174, + "Ġодне": 127175, + "ÌĨ": 127176, + "ä»ĸãģ®": 127177, + "建ç¯ī": 127178, + "поÑģеÑĢед": 127179, + "หลà¸Ķ": 127180, + "å¤ļãģĦ": 127181, + "ÏĦήÏĥειÏĤ": 127182, + "ĠرÙĪÙĨد": 127183, + "èģ½": 127184, + "ì¤ijìĹIJ": 127185, + "ìĬ¤íĭ°": 127186, + "ĠзвÑĸÑĤ": 127187, + "ĠаÑĢÑĤи": 127188, + "Ġcưá»Ŀi": 127189, + "ındır": 127190, + "Ġголод": 127191, + "ازد": 127192, + "à¹Īาวว": 127193, + "ãĥ¡ãĥ©": 127194, + "عÙĨÙĪØ§ÙĨ": 127195, + "%)Ċ": 127196, + "ĠÑħолодилÑĮ": 127197, + "人们": 127198, + "Cİ": 127199, + "ÐĹап": 127200, + "ĠpÅĻisp": 127201, + "Ġdurumlarda": 127202, + "ÑĢÑĸд": 127203, + "ÂłÐ£": 127204, + "ĠεÏĨαÏģ": 127205, + "Ġsprav": 127206, + "ĠоÑĤÑĢиманнÑı": 127207, + "ï¼Į没æľī": 127208, + "овала": 127209, + "Ġngại": 127210, + "ãĢĤ大": 127211, + "ĠдаеÑĤ": 127212, + "ĠpÃŃsem": 127213, + "ÑĨÑıÑĤÑĮ": 127214, + "ovnÄĽ": 127215, + "ë¦ī": 127216, + "Ġê²ģ": 127217, + "ÑģÑĤин": 127218, + "ĠSayı": 127219, + "ãĢĭçļĦ": 127220, + "Ġyoluyla": 127221, + "елеÑĦон": 127222, + "Ġráno": 127223, + "ĠíĸīëıĻ": 127224, + "ĠاÙĦخاÙħسة": 127225, + "Ġповинна": 127226, + "ÅĻila": 127227, + "Ġà¤ļरण": 127228, + "Ġبرگزار": 127229, + "ìļ´ëį°": 127230, + "à¹Ģà¸Ľà¸Ńร": 127231, + "Ġdaleko": 127232, + "lednÃŃ": 127233, + "åIJį稱": 127234, + "ливÑĸÑģÑĤÑĮ": 127235, + "Ġ몸ìĿĦ": 127236, + "оÑĢÑĸв": 127237, + "Це": 127238, + "بدأ": 127239, + "ë°ĺ기": 127240, + "krát": 127241, + "ä¸įè¶³": 127242, + "Ġoldukları": 127243, + "leniyor": 127244, + "Ġìĭľíĸī": 127245, + "ĠпÑĢинимаÑĤÑĮ": 127246, + "à¸Ĥà¸Ńà¸ĩร": 127247, + "ÏĪει": 127248, + "Ġẩn": 127249, + "تس": 127250, + "ĠÑĤай": 127251, + "Ġневозможно": 127252, + "åıĬãģ³": 127253, + "roti": 127254, + "ï½Ń": 127255, + "дом": 127256, + "ойно": 127257, + "å£Ĭ": 127258, + "说çļĦ": 127259, + "Ġskoro": 127260, + "niÄįnÃŃ": 127261, + "ĠProfes": 127262, + "ĠÑħÑĢониÑĩеÑģ": 127263, + "Ġ주문": 127264, + "ĠZn": 127265, + "ĠÑģлой": 127266, + "ÎłÏģο": 127267, + "æĮĩæķ°": 127268, + "ĠпеÑĢеÑĪ": 127269, + "à¥ģà¤ķस": 127270, + "Ġê°Ģìłķ": 127271, + "Ġíķĺë©´": 127272, + "Û±Û¹Û´": 127273, + "кÑĥл": 127274, + "ÙĬÙĦا": 127275, + "ĠدÙĪØ¨Ø§Ø±Ùĩ": 127276, + "|l": 127277, + "ĠÐľÑĥ": 127278, + "нила": 127279, + "ãģ¦ãģĦãģ¾ãģĻ": 127280, + "macı": 127281, + "ãģŁãģ¡ãģ¯": 127282, + "ĠاÙĦÙĥتاب": 127283, + "ç§»åĭķ": 127284, + "λμ": 127285, + "_ï¼ı": 127286, + "Ġê°Ģìŀħ": 127287, + "èħ¾": 127288, + "ĠпÑĢезиденÑĤ": 127289, + "Ġë¶Ħìķ¼": 127290, + "ahy": 127291, + "Å¡etÅĻenÃŃ": 127292, + "éĵº": 127293, + "ĠpÅĻÃŃro": 127294, + "ÐķТ": 127295, + "ĠìļĶì²Ń": 127296, + "Ġmohlo": 127297, + "å¿ĥçIJĨ": 127298, + "Ġvysoké": 127299, + "ü": 127300, + "ÏĦικα": 127301, + "ìĹħì²´": 127302, + "ãģ§ãģĤ": 127303, + "รายà¸ĩาà¸Ļ": 127304, + "ĠpÅĻÃŃspÄĽv": 127305, + "ĠetmiÅŁtir": 127306, + "她们": 127307, + "ÏĢλα": 127308, + "ứa": 127309, + "Ġ说": 127310, + "ĠÑģоÑģед": 127311, + "åĩī": 127312, + "ĠÐłÐµ": 127313, + "åİŁæĿ¥": 127314, + "ĠÐIJÑĢÑħ": 127315, + "بÙĬÙĨ": 127316, + "åľ°è¯´": 127317, + "Ġört": 127318, + "ĠΣεÏĢ": 127319, + "ÂŃÙĩاÛĮ": 127320, + "ĠاÙĦاÙĤتص": 127321, + "尽管": 127322, + "ÑĤÑĭй": 127323, + "tains": 127324, + "ÙĢÙĦ": 127325, + "ç§ijæĬĢæľīéĻIJåħ¬åı¸": 127326, + "æı®": 127327, + "ัà¸ķà¸ĸ": 127328, + "á»Ĺng": 127329, + "ลาà¸Ķ": 127330, + "æļ®": 127331, + "ĠÙĨÙ쨳Ùĩ": 127332, + "Ġçľĭ": 127333, + "Ġãģ¿": 127334, + "Ġtarım": 127335, + "Û±Û¹Ûµ": 127336, + "ĠÎĬ": 127337, + "Ġkomplex": 127338, + "ĠNhÄ©": 127339, + "è´¹ç͍": 127340, + "ĠکاربراÙĨ": 127341, + "ÅĪovánÃŃ": 127342, + "Ġků": 127343, + "дап": 127344, + "ÎķΧ": 127345, + "ê·¸ëŀĺ": 127346, + "Ġdöndü": 127347, + "人åĵ¡": 127348, + "ĠTiá»ĥu": 127349, + "ĠÙĪÛĮراÛĮØ´": 127350, + "Ġöngör": 127351, + "ĠÙĪØºÙĬر": 127352, + "ĠÑģкÑĢÑĭ": 127353, + "âĢIJ'": 127354, + "ĠнемÑĥ": 127355, + "ĠHá»ĩ": 127356, + "Ġdüzenli": 127357, + "ĠsoutÄĽÅ¾e": 127358, + "ãĢģãĥŀ": 127359, + "ÏĦομα": 127360, + "ÄĽlÃŃ": 127361, + "ĠØ£ÙĦÙħاÙĨ": 127362, + "çł²": 127363, + "ĠtrÃł": 127364, + "Ġä¸ĸçķĮ": 127365, + "ayız": 127366, + "ımlı": 127367, + "ĠاÙĦØ£Ùģ": 127368, + "íķĺëĬĶëį°": 127369, + "вано": 127370, + "ĠpÅĻiÄįemž": 127371, + "ÙĥÙĬب": 127372, + "ĠмаÑĤемаÑĤи": 127373, + "мени": 127374, + "ĠпÑĢоекÑĤÑĥ": 127375, + "ีà¹Ĥà¸Ń": 127376, + "оÑĥ": 127377, + "ĠاÙĦشرÙĥØ©": 127378, + "æ³£": 127379, + "ÙĪÙĤÙĬت": 127380, + "ÑĪив": 127381, + "Ġpersonel": 127382, + "شتر": 127383, + "à¸Ķา": 127384, + "Ġ몽": 127385, + "åĿIJåľ¨": 127386, + "оке": 127387, + "Ġë§Īë²ķ": 127388, + "ĠØ£ÙĨا": 127389, + "ëłµ": 127390, + "ĠÙħباÙĨÛĮ": 127391, + "èĭ¹æŀľ": 127392, + "Ġศร": 127393, + "ĠÐĽÑĥÑĩ": 127394, + "ÎŁÎ¥Î£": 127395, + "ĠÄįá": 127396, + "ãģĽãģ¦": 127397, + "ĠkÄ±ÅŁ": 127398, + "ÑĪев": 127399, + "æĮĩ导": 127400, + "à¹ģละม": 127401, + "Ġvoleb": 127402, + "ĠÑģилÑĭ": 127403, + "Ġdruhou": 127404, + "Ġì°¬": 127405, + "ĠìŀĪìĿĮ": 127406, + "ΥΣ": 127407, + "ä¸įå®ī": 127408, + "ĠìĹĨìĿĮ": 127409, + "Ġdeterm": 127410, + "ĠاÙĦÙħعÙĦÙĪÙħات": 127411, + "íĺ¹": 127412, + "âĻ¡": 127413, + "à¥įबन": 127414, + "Ġخشک": 127415, + "ĠNová": 127416, + "ĠÑĦÑĥндаменÑĤ": 127417, + "ĠпÑĢогÑĢами": 127418, + "ĠعÙĦÙĬÙĥ": 127419, + "।ĊĊ": 127420, + "Ġveriyor": 127421, + "ĠÑĶв": 127422, + "ĠìŀĪëĭ¤ê³ł": 127423, + "ĠاÙĦØ£ÙħرÙĬÙĥÙĬ": 127424, + "Ġå¤ĸéĥ¨ãĥªãĥ³ãĤ¯": 127425, + "Ġä¿®": 127426, + "ĠпÑĥÑĤи": 127427, + "ĠοÏģγ": 127428, + "ĠоÑģновном": 127429, + "ĠнаÑĢÑĥж": 127430, + "ĠмиÑĢе": 127431, + "ovÄĽt": 127432, + "ĠíĥIJ": 127433, + "Ġsokak": 127434, + "Ġspolupráci": 127435, + "ÐĶÐļ": 127436, + "Ġåĺ": 127437, + "âĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸį": 127438, + "Ġ³³³³": 127439, + "Ġhayır": 127440, + "ĠìĻĶ": 127441, + "æĤ¨çļĦ": 127442, + "æĮº": 127443, + "Ġ민주": 127444, + "Ġhotelu": 127445, + "à¸µà¸ľ": 127446, + "ìŀIJëıĻ": 127447, + "ä¼¼çļĦ": 127448, + "ÎŃνÏĦÏģο": 127449, + "Ø´ÙĪ": 127450, + "Ġé¤": 127451, + "Ġλι": 127452, + "Ġolmaktadır": 127453, + "ĠоÑģвеÑī": 127454, + "Ġвина": 127455, + "Ġخاصة": 127456, + "rana": 127457, + "γÏģαÏĨή": 127458, + "ÑĨеÑģ": 127459, + "ĠdoÄŁrult": 127460, + "ĠÙĤرارداد": 127461, + "ĠÐļал": 127462, + "ê²½ìłľ": 127463, + "ÏĩÏĮ": 127464, + "ÑĥÑİÑīий": 127465, + "ëĭĺìĿ´": 127466, + "ëĮ": 127467, + "лаз": 127468, + "Ġngừng": 127469, + "isku": 127470, + "ìĦłê±°": 127471, + "ĠÑįлекÑĤÑĢон": 127472, + "ĠVoj": 127473, + "нÑıми": 127474, + "ĠÙĪØ£ÙĨ": 127475, + "äºŃ": 127476, + "ç»Łè®¡": 127477, + "ĠÅŁiÅŁ": 127478, + "ãĢįçļĦ": 127479, + "æŃ¯": 127480, + "Ġколлек": 127481, + "Ġдвиж": 127482, + "Ġná»Ńa": 127483, + "ÄįasÃŃ": 127484, + "Ġsonu": 127485, + "ĠмеÑħанÑĸз": 127486, + "žený": 127487, + "ĠзаÑģÑĤÑĥп": 127488, + "ê´Ģ볨": 127489, + "ĠÑĤоваÑĢÑĸв": 127490, + "Ġì¼ĢìĿ´": 127491, + "à¥ģà¤Ĺत": 127492, + "Ġzásob": 127493, + "мовÑĸÑĢ": 127494, + "ufac": 127495, + "ůležit": 127496, + "ĠвигоÑĤов": 127497, + "ĠاÙĦÙĨÙĪ": 127498, + "ĠعاÙħا": 127499, + "æģ¨": 127500, + "ĠìĿ´ë¯¸ì§Ģ": 127501, + "ĠtvoÅĻ": 127502, + "ĠvyužitÃŃ": 127503, + "ĠgeliÅŁim": 127504, + "쳤ëĭ¤": 127505, + "หà¸Ļà¸Ńà¸ĩ": 127506, + "ĠìĿ¸ìłķ": 127507, + "à¥įदर": 127508, + "ĠпеÑĢеда": 127509, + "ĠздÑĸйÑģненнÑı": 127510, + "ÙĨع": 127511, + "è¡£æľį": 127512, + "Ġloa": 127513, + "íĻĪ": 127514, + "èĭ±åĽ½": 127515, + "ĠDruh": 127516, + "خاÙĨ": 127517, + "дам": 127518, + "аÑĤелÑĮнÑĭÑħ": 127519, + "θÏģÏİ": 127520, + "ĠØ£Ùħر": 127521, + "ĠÅĻada": 127522, + "ĠbuluÅŁ": 127523, + "ĠÑĤÑĢанÑģпоÑĢ": 127524, + "ĠÙĤتÙĦ": 127525, + "ĠTarif": 127526, + "Rus": 127527, + "ĠзаÑģÑĸд": 127528, + "Ġİh": 127529, + "leyin": 127530, + "Ġvyrá": 127531, + "ĠDÄĽ": 127532, + "ибли": 127533, + "avou": 127534, + "ĠÐĵеÑĢм": 127535, + "немÑĥ": 127536, + "ĠконÑĨеп": 127537, + "ĠÙĤادر": 127538, + "Ġsoubor": 127539, + "Ġlá»iji": 127540, + "ĠçµIJ": 127541, + "леннÑĭй": 127542, + "κÏħ": 127543, + "Ġдопомаг": 127544, + "à¸ŀวà¸ģà¹Ģà¸Ĥ": 127545, + "Ġquang": 127546, + "ĠØ·ÙĦا": 127547, + "ĠéĩĮ": 127548, + "ĠÙĨÙħÙĪØ¯Ø§Ø±": 127549, + "ĠÅŁar": 127550, + "ĠÑģпÑĸл": 127551, + "ÂŃn": 127552, + "ì§ĢìļĶ": 127553, + "åīįå¾Ģ": 127554, + "åħ³éĶ®": 127555, + "å®ŀåľ¨": 127556, + "éŁ³æ¥½": 127557, + "ĠÙħسئÙĦÙĩ": 127558, + "Ġyeme": 127559, + "ĠÑĪаÑħ": 127560, + "기ìĪł": 127561, + "Ġสำà¸Ļ": 127562, + "ĠÙĪØ±Ø²Ø´ÛĮ": 127563, + "ãģĹãģŁãĤī": 127564, + "ίÏĥÏī": 127565, + "окон": 127566, + "ãģŁãĤī": 127567, + "ĠØ¥ÙĦÙĬÙĩ": 127568, + "Ġآذرب": 127569, + "Ġrá»Ŀi": 127570, + "Ġodak": 127571, + "ĠмогÑĥ": 127572, + "ĠÚ¯ÙĨ": 127573, + "è²¼": 127574, + "edla": 127575, + "ĠопÑĭÑĤ": 127576, + "lamaktadır": 127577, + "å°¼äºļ": 127578, + "éĥ½ä¼ļ": 127579, + "ĠÎĺεÏĥÏĥα": 127580, + "Ġвог": 127581, + "ç»Īäºİ": 127582, + "ĠÑĥÑĢовне": 127583, + "Ġvlak": 127584, + "ĠØ¢ÙĦØ©": 127585, + "Ġειδ": 127586, + "âĩ": 127587, + "дÑĥÑĤ": 127588, + "Ñĸнг": 127589, + "ĠØ£ÙħرÙĬÙĥÙĬ": 127590, + "ازÙĨد": 127591, + "ĠباÙĦØ£": 127592, + "Ġतन": 127593, + "Ġkaydet": 127594, + "룬리": 127595, + "Ġdrž": 127596, + "ĠпенÑģ": 127597, + "ĠpÅĻÃŃÄį": 127598, + "ĠТолÑĮко": 127599, + "ĠбаÑĤаÑĢ": 127600, + "éĵģè·¯": 127601, + "ĠÙ¾ÛĮÚĨ": 127602, + "ĠÎĵεÏī": 127603, + "ĠαÏħÏĦά": 127604, + "ÄŀI": 127605, + "ĠакÑĤивно": 127606, + "ÎĹÎľÎij": 127607, + "Ġvarlık": 127608, + "Ġåıª": 127609, + "ĠзаÑīиÑĤÑĭ": 127610, + "лим": 127611, + "ĠÙħشاÙĩدة": 127612, + "иком": 127613, + "Ġì¡°ìĤ¬": 127614, + "оген": 127615, + "Ġmấy": 127616, + "gii": 127617, + "èĽĩ": 127618, + "ĠØ®ÙĪÛĮØ´": 127619, + "Ġnová": 127620, + "ковой": 127621, + "Ġkanıt": 127622, + "éĿ¢è®®": 127623, + "ĠرÙĪØ³ØªØ§": 127624, + "ìĸ´ê°Ģ": 127625, + "ĠоÑĤноÑĪениÑı": 127626, + "Ġhodnoty": 127627, + "ÙĪØ±Ø§Øª": 127628, + "ĠpÅĻÃŃst": 127629, + "Ġthá»į": 127630, + "Ġçıkart": 127631, + "ообÑĢаз": 127632, + "ĠnemÄĽl": 127633, + "Âłro": 127634, + "ĠدÙĪÙĦتÛĮ": 127635, + "ี,": 127636, + "ä¸Ģ度": 127637, + "iaomi": 127638, + "åĹİ": 127639, + "Ùıع": 127640, + "ĠваÑĢиан": 127641, + "ĠpodaÅĻilo": 127642, + "ĠëĤĺê°Ģ": 127643, + "èIJ¥ä¸ļ": 127644, + "ĠабÑģолÑİÑĤно": 127645, + "Ġë¸ĮëĿ¼": 127646, + "ĠгоÑĢиз": 127647, + "aģın": 127648, + "Ġyerini": 127649, + "à¹īาà¸Ļà¸Ķ": 127650, + "æIJ¬": 127651, + "Ġbalık": 127652, + "ĠÅŁans": 127653, + "认è¯Ĩ": 127654, + "ĠistediÄŁiniz": 127655, + "ĠjistÄĽ": 127656, + "ĠìĪĺê°Ģ": 127657, + "ï¼Įä¸Ĭ": 127658, + "à¤ľà¤¬": 127659, + "ĠвиÑıви": 127660, + "ë§¥": 127661, + "ãģĹãģ¦ãĤĭ": 127662, + "ÙĬÙĥا": 127663, + "ĠHüs": 127664, + "cının": 127665, + "Ġशत": 127666, + "ĠÑĢаÑģполаг": 127667, + "ĠÑģпÑĢавж": 127668, + "ืà¸Ńà¸ĸ": 127669, + "ĠвеÑĢÑĤик": 127670, + "Ġvystav": 127671, + "ĠÑĢеалÑĸзаÑĨÑĸÑĹ": 127672, + "вами": 127673, + "ãĤ¹ãĥĨãĤ£": 127674, + "ëħģ": 127675, + "ĠÑĢеÑĩÑĸ": 127676, + "Ù쨧ÙĦ": 127677, + "िà¤ķà¤Ł": 127678, + "ĠвозÑĢаÑģÑĤе": 127679, + "каÑģ": 127680, + "ĠÐĺÑģ": 127681, + "ĠлÑĸк": 127682, + "ĠÏĥημαν": 127683, + "менÑĤÑĥ": 127684, + "нÑıÑİÑĤ": 127685, + "æŁ´": 127686, + "ĠθεÏī": 127687, + "çĬ¯ç½ª": 127688, + "ĠÙĤطر": 127689, + "ÐĶÐIJ": 127690, + "-|": 127691, + "ĠÑģÑĤÑĸ": 127692, + "Ġuyum": 127693, + "ĠpotÅĻeba": 127694, + "ĠعÙħÙĦÛĮات": 127695, + "奪": 127696, + "اخر": 127697, + "ĠکساÙĨÛĮ": 127698, + "تÙħر": 127699, + "ÑĮеÑĢ": 127700, + "ĠNez": 127701, + "íļĮìĤ¬": 127702, + "ĠBankası": 127703, + "егÑĢа": 127704, + "à¸Ĥà¸ĵะà¸Ĺ": 127705, + "åIJĪæł¼": 127706, + "ĠìŬ룬ë¶Ħ": 127707, + "yasal": 127708, + "Ġè¡ĮæĶ¿": 127709, + "åĬī": 127710, + "dıktan": 127711, + "ãĤ¢ãĥ«ãĥIJ": 127712, + "ĠاÛĮÙĨÚĨ": 127713, + "Ġdijital": 127714, + "å°ĺ": 127715, + "ĠÑĢазмеÑī": 127716, + "ĠкÑĸлÑĮкоÑģÑĤÑĸ": 127717, + "ĠEvropy": 127718, + "ĠÑĢозви": 127719, + "ÑİÑīÑĥÑİ": 127720, + "Ġong": 127721, + "Ġhepsi": 127722, + "vailability": 127723, + "ĠتصÙħÙĬÙħ": 127724, + "ÑĥйÑĤе": 127725, + "हल": 127726, + "ĠÅ¡iro": 127727, + "Ġpás": 127728, + ";;;;;;": 127729, + "éħįåIJĪ": 127730, + "ĠاÙĦعاÙĦÙħÙĬØ©": 127731, + "ÐĴо": 127732, + "haf": 127733, + "láv": 127734, + "Ġbì": 127735, + "Ġmůj": 127736, + "ê»ĺìĦľ": 127737, + "ÂłBf": 127738, + "ĠÑģпÑĢоÑģил": 127739, + "âĢĮÚ©ÙĨÙĨدÙĩ": 127740, + "ÙĨدÙĬØ©": 127741, + "çī¹èī²": 127742, + "Ġìķ¨": 127743, + "ุษย": 127744, + "ĠФоÑĢ": 127745, + "пиÑģок": 127746, + "užel": 127747, + "ımlar": 127748, + "çĬ¶æ³ģ": 127749, + "Ġãĥ¬ãĥĩãĤ£ãĥ¼ãĤ¹": 127750, + "Ñħови": 127751, + "ÂłKÄį": 127752, + "Ñĩим": 127753, + "ĠتÙĪÙħ": 127754, + "à¹Ģà¸ģษà¸ķร": 127755, + "Ġìĭ±ê¸Ģ": 127756, + "Ùħارات": 127757, + "ênh": 127758, + "ĠÅĻid": 127759, + "æĬ¬": 127760, + "ÑģиÑİ": 127761, + "æħİ": 127762, + "Ġçevre": 127763, + "ãĥĪãĥ«": 127764, + "Ġyıldır": 127765, + "Ġzáznam": 127766, + "æľºåľº": 127767, + "ĠпоÑĶ": 127768, + "ĠвÑĭÑĢаÑīи": 127769, + "ĠÙ쨹": 127770, + "ë»": 127771, + "ĠدارÛĮÙħ": 127772, + "ï¼ĮæĽ´": 127773, + "Ġземли": 127774, + "ابÙĤات": 127775, + "Ġmá»Ŀi": 127776, + "kých": 127777, + "ÙĦاة": 127778, + "帽": 127779, + "براÙĩÙĬÙħ": 127780, + "ĠпобаÑĩ": 127781, + "ाà¤ĩम": 127782, + "à¹Īาà¸ĩà¸Ľà¸£à¸°à¹Ģà¸Ĺศ": 127783, + "ĠìĦ¸ìĥģ": 127784, + "ĠпомогаеÑĤ": 127785, + "ĠÏĦÏĮÏĥο": 127786, + "æĸ·": 127787, + "ĠÙģØ±Ø§ÙĪ": 127788, + "à¹Ħà¸Ľà¸¢": 127789, + "ergisi": 127790, + "ĠéĻIJ": 127791, + ".xz": 127792, + "ĠÑģлÑĥÑħ": 127793, + "економ": 127794, + "ĠNhất": 127795, + "±ط": 127796, + "ĠëĪĪìĿĦ": 127797, + "ĠíļĮìĤ¬": 127798, + "Ñĵ": 127799, + "ĠåIJįçĦ¡ãģĹ": 127800, + "Ġομάδα": 127801, + "ĩĮ": 127802, + "liÄŁinin": 127803, + "عاÙĨ": 127804, + "ĠزÙĨÛĮ": 127805, + "Tôi": 127806, + "Ġetki": 127807, + "ĠìŰëĿ½": 127808, + "ĠконÑĨа": 127809, + "è°ĭ": 127810, + "ĠземлÑı": 127811, + "íĻĺê²½": 127812, + "ĠÙħکاÙĨÛĮ": 127813, + "çĸ²": 127814, + "Ġç¢": 127815, + "Ġkurulan": 127816, + "ؤÙĪÙĦ": 127817, + "دÙī": 127818, + "ĠاÙĦÙħÙĨØ·ÙĤØ©": 127819, + "Ġnắng": 127820, + "ÐŁÐļ": 127821, + "олай": 127822, + "YK": 127823, + "åijĨ": 127824, + "λαν": 127825, + "西çľģ": 127826, + "ĠÎĴαÏĥ": 127827, + "ĠíĻķìĭ¤": 127828, + "ZD": 127829, + "пÑĸд": 127830, + "ĠнаÑĩе": 127831, + "ĠÏĦά": 127832, + "å½»": 127833, + "âĢŀD": 127834, + "Ġèĩº": 127835, + "ĠнаÑĪей": 127836, + "ĠtÃŃmto": 127837, + "ĠتسÙħ": 127838, + "ÏģθÏģο": 127839, + "令人": 127840, + "ĠPazar": 127841, + "ãĤĵãģ¨": 127842, + "ç«ĭåĪ»": 127843, + "Âģ@": 127844, + "Ġbắc": 127845, + "ìĬ¤íħĮ": 127846, + "Ġkadınlar": 127847, + "figur": 127848, + "ãģ¤ãģ¶": 127849, + "ĠæµĻæ±Ł": 127850, + "ĠдекÑĸлÑĮ": 127851, + "è¡Ŀ": 127852, + "ยà¸Ļà¹ģà¸Ľà¸¥à¸ĩ": 127853, + "olet": 127854, + "Ġnedok": 127855, + "namen": 127856, + "åħĦå¼Ł": 127857, + "ืà¸Ńà¸Ĥ": 127858, + "èĤĥ": 127859, + "Ġbüny": 127860, + "ĠÑĢадÑıн": 127861, + "ãĢģäºĮ": 127862, + "аннÑİ": 127863, + "Ġæīĭæľº": 127864, + "ĠоÑģлож": 127865, + "ĠоглÑı": 127866, + "Ġسبز": 127867, + "Ġaktivit": 127868, + "Ġà¤ıप": 127869, + "竾": 127870, + "Ġdiren": 127871, + "iв": 127872, + "ĠYatırım": 127873, + "ÑĨÑĸйна": 127874, + "Ġдомов": 127875, + "ẳn": 127876, + "ĠCoÄŁraf": 127877, + "ÙģÙĪ": 127878, + "æ°Ĺãģ«åħ¥": 127879, + "ç§ģãģ®": 127880, + "ï½į": 127881, + "à¥Įड": 127882, + "ĠÐĵÑĢигоÑĢ": 127883, + "ĠPeygamber": 127884, + "Ġαγα": 127885, + "Ġefekt": 127886, + "ĠìŀĪìĸ´ìĦľ": 127887, + "ĠплаÑĤеж": 127888, + "ĠTrab": 127889, + "overy": 127890, + "â̦â̦ãĢĤ": 127891, + "Ġyapmaya": 127892, + "ĠнайбÑĸлÑĮ": 127893, + "ĠÙħÙĨزÙĦ": 127894, + "ÙĪÙĬÙĥ": 127895, + "ıldıģında": 127896, + "ĠpÅĻÃŃpadnÄĽ": 127897, + "ĠμÏĢοÏģοÏį": 127898, + "ĠëĵľëĿ¼ë§Ī": 127899, + "Ġ방문": 127900, + "ĠСим": 127901, + "کات": 127902, + "еком": 127903, + "رÙĬع": 127904, + "ÙĩدÙģ": 127905, + "æĹıèĩªæ²»": 127906, + "ĠzmÄĽn": 127907, + "Ġвклад": 127908, + "ĠبÙĦغ": 127909, + "Ġç§ĭ": 127910, + "Ngh": 127911, + "ĠendiÅŁ": 127912, + "ĠCumhurbaÅŁkanı": 127913, + "ĠKaf": 127914, + "Ġà¹ģหล": 127915, + "Ġmutlu": 127916, + "ĠÑģиÑĢ": 127917, + "ĠгÑĥм": 127918, + "æ¿ĥ": 127919, + "çĤī": 127920, + "ĠBáo": 127921, + "à¥Ĥष": 127922, + "ĠìłķíĻķ": 127923, + "ानस": 127924, + "ﻤ": 127925, + "наÑģлÑĸдок": 127926, + "poÄįet": 127927, + "ë§ĮìĽIJìŀħëĭĪëĭ¤": 127928, + "ĠìĦľìļ¸íĬ¹ë³Ħìĭľ": 127929, + "ÎķÎĻΣ": 127930, + "ุมà¸Ĭà¸Ļ": 127931, + "ĠмÑĸлÑĮ": 127932, + "æħĮ": 127933, + "ÏĥκεÏĦαι": 127934, + "ĠãĢľ": 127935, + "Ġkaliteli": 127936, + "ĠÑģмеÑĢÑĤÑĮ": 127937, + "è¼Ķ": 127938, + "ĠбиÑĤ": 127939, + "ĠΣÏĦο": 127940, + "à¸ĩà¹Ģศส": 127941, + "åİŁæľ¬": 127942, + "ĠknÃŃ": 127943, + "äºĴèģĶç½ij": 127944, + "ĠÑĩеловеÑĩеÑģ": 127945, + "çŃĴ": 127946, + "à¸Īำหà¸Ļ": 127947, + "åĩºåİ»": 127948, + "ãĤ¢ãĥĭãĥ¡": 127949, + "å±ķ示": 127950, + "rych": 127951, + "à¤ħब": 127952, + "oÅĪ": 127953, + "jÃŃcÃŃm": 127954, + "اØŃØ«": 127955, + "ĠÙĪØ§ÙĤعÛĮ": 127956, + "ĠФедеÑĢалÑĮ": 127957, + "Ñģам": 127958, + "Ġìĺ¥": 127959, + "åľ°çIJĥ": 127960, + "Ġsuyu": 127961, + "seniz": 127962, + "à¥īफ": 127963, + "Ġê°Ļëĭ¤": 127964, + "ĠпÑĢизнаÑĩеннÑı": 127965, + "ĠSın": 127966, + "ĠاÙħÙĨÛĮت": 127967, + "Ġlátky": 127968, + "ĠÐijи": 127969, + "Ġsüreci": 127970, + "····": 127971, + "Ġ경찰": 127972, + "ĠкалÑĮ": 127973, + "ĠникÑĤо": 127974, + "ÙijÙħ": 127975, + "ĠدÙĬگر": 127976, + "Ġalınması": 127977, + "леннÑĸ": 127978, + "ิวà¹Ģà¸ķà¸Ńร": 127979, + "à¸Ľà¸ģà¸Ħรà¸Ńà¸ĩ": 127980, + "ĠзаконодавÑģÑĤва": 127981, + "ãĢĢãĤ¤": 127982, + "Ġëħ¸íķĺìļ°": 127983, + "ĠDÃ¼ÅŁ": 127984, + "ĠгÑĥÑģÑĤ": 127985, + "ĠÐĴаÑĪ": 127986, + "ĠاÙħتÛĮ": 127987, + "Ġparamet": 127988, + "ĠÎłÎ±Î½ÎµÏĢ": 127989, + "à¹Įà¸ģร": 127990, + "ζα": 127991, + "ĠëįĶìļ±": 127992, + "ÙĪÙĦات": 127993, + "ваÑĤиÑģÑı": 127994, + "Ġkök": 127995, + "ÙĨب": 127996, + "ĠвÑĭÑģокой": 127997, + "ãĥ¼ãĥ¼": 127998, + "éͦ": 127999 + }, + "merges": [ + "Ġ Ġ", + "Ġ ĠĠĠ", + "ĠĠ ĠĠ", + "ĠĠĠ Ġ", + "i n", + "Ġ t", + "Ġ ĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠ ĠĠ", + "e r", + "Ġ ĠĠ", + "ĠĠ Ġ", + "o n", + "Ġ a", + "r e", + "a t", + "s t", + "e n", + "o r", + "Ġ th", + "Ġt h", + "Ċ Ċ", + "Ġ c", + "l e", + "Ġ s", + "i t", + "a n", + "a r", + "a l", + "Ġ the", + "Ġt he", + "Ġth e", + "; Ċ", + "Ġ p", + "Ġ f", + "o u", + "Ġ =", + "i s", + "Ġ ĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠ", + "ĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠ Ġ", + "i ng", + "in g", + "e s", + "Ġ w", + "i on", + "io n", + "e d", + "i c", + "Ġ b", + "Ġ d", + "e t", + "Ġ m", + "Ġ o", + "ĉ ĉ", + "r o", + "a s", + "e l", + "c t", + "n d", + "Ġ in", + "Ġi n", + "Ġ h", + "e nt", + "en t", + "i d", + "Ġ n", + "a m", + "Ġ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ to", + "Ġt o", + "Ġ re", + "Ġr e", + "- -", + "Ġ {", + "Ġ of", + "Ġo f", + "o m", + ") ;Ċ", + "); Ċ", + "i m", + "č Ċ", + "Ġ (", + "i l", + "/ /", + "Ġ and", + "Ġa nd", + "Ġan d", + "u r", + "s e", + "Ġ l", + "e x", + "Ġ S", + "a d", + "Ġ \"", + "c h", + "u t", + "i f", + "* *", + "Ġ }", + "e m", + "o l", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "t h", + ") Ċ", + "Ġ {Ċ", + "Ġ{ Ċ", + "Ġ g", + "i g", + "i v", + ", Ċ", + "c e", + "o d", + "Ġ v", + "a te", + "at e", + "Ġ T", + "a g", + "a y", + "Ġ *", + "o t", + "u s", + "Ġ C", + "Ġ st", + "Ġs t", + "Ġ I", + "u n", + "u l", + "u e", + "Ġ A", + "o w", + "Ġ '", + "e w", + "Ġ <", + "a tion", + "at ion", + "atio n", + "ati on", + "( )", + "Ġ for", + "Ġf or", + "Ġfo r", + "a b", + "o rt", + "or t", + "u m", + "a me", + "am e", + "Ġ is", + "Ġi s", + "p e", + "t r", + "c k", + "â Ģ", + "Ġ y", + "i st", + "is t", + "- ---", + "-- --", + "--- -", + ". ĊĊ", + ".Ċ Ċ", + "h e", + "Ġ e", + "l o", + "Ġ M", + "Ġ be", + "Ġb e", + "e rs", + "er s", + "Ġ on", + "Ġo n", + "Ġ con", + "Ġc on", + "Ġco n", + "a p", + "u b", + "Ġ P", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "a ss", + "as s", + "i nt", + "in t", + "> Ċ", + "l y", + "u rn", + "ur n", + "Ġ $", + "; ĊĊ", + ";Ċ Ċ", + "a v", + "p ort", + "por t", + "po rt", + "i r", + "- >", + "n t", + "c tion", + "ct ion", + "e nd", + "en d", + "Ġ de", + "Ġd e", + "0 0", + "i th", + "it h", + "o ut", + "ou t", + "t urn", + "tu rn", + "tur n", + "o ur", + "ou r", + "Ġ ĠĠĠĠ", + "ĠĠ ĠĠĠ", + "ĠĠĠĠ Ġ", + "ĠĠĠ ĠĠ", + "l ic", + "li c", + "r es", + "re s", + "p t", + "= =", + "Ġ this", + "Ġt his", + "Ġth is", + "Ġthi s", + "Ġ wh", + "Ġw h", + "Ġ if", + "Ġi f", + "Ġ D", + "v er", + "ve r", + "a ge", + "ag e", + "Ġ B", + "h t", + "e xt", + "ex t", + "= \"", + "Ġ that", + "Ġt hat", + "Ġth at", + "Ġtha t", + "* ***", + "** **", + "*** *", + "Ġ R", + "Ġ it", + "Ġi t", + "e ss", + "es s", + "Ġ F", + "Ġ r", + "o s", + "a nd", + "an d", + "Ġ as", + "Ġa s", + "e ct", + "ec t", + "k e", + "r om", + "ro m", + "Ġ //", + "Ġ/ /", + "c on", + "co n", + "Ġ L", + "( \"", + "q u", + "l ass", + "la ss", + "las s", + "Ġ with", + "Ġw ith", + "Ġwi th", + "Ġwit h", + "i z", + "d e", + "Ġ N", + "Ġ al", + "Ġa l", + "o p", + "u p", + "g et", + "ge t", + "Ġ }Ċ", + "Ġ} Ċ", + "i le", + "il e", + "Ġ an", + "Ġa n", + "a ta", + "at a", + "o re", + "or e", + "r i", + "Ġ pro", + "Ġp ro", + "Ġpr o", + "; čĊ", + "ĉ ĉĉĉ", + "ĉĉ ĉĉ", + "ĉĉĉ ĉ", + "t er", + "te r", + "a in", + "ai n", + "Ġ W", + "Ġ E", + "Ġ com", + "Ġc om", + "Ġco m", + "Ġ return", + "Ġre turn", + "Ġr eturn", + "Ġret urn", + "a rt", + "ar t", + "Ġ H", + "a ck", + "ac k", + "im port", + "imp ort", + "ub lic", + "ubl ic", + "Ġ or", + "Ġo r", + "e st", + "es t", + "m ent", + "me nt", + "men t", + "Ġ G", + "a ble", + "ab le", + "abl e", + "Ġ -", + "i ne", + "in e", + "i ll", + "il l", + "i nd", + "in d", + "e re", + "er e", + ": :", + "i ty", + "it y", + "Ġ +", + "Ġ tr", + "Ġt r", + "e lf", + "el f", + "i ght", + "ig ht", + "igh t", + "( '", + "o rm", + "or m", + "u lt", + "ul t", + "s tr", + "st r", + ". .", + "\" ,", + "Ġ you", + "Ġy ou", + "Ġyo u", + "y pe", + "yp e", + "p l", + "Ġ new", + "Ġn ew", + "Ġne w", + "Ġ j", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ from", + "Ġf rom", + "Ġfr om", + "Ġfro m", + "Ġ ex", + "Ġe x", + "Ġ O", + "2 0", + "l d", + "Ġ [", + "o c", + ": Ċ", + "Ġ se", + "Ġs e", + "Ġ le", + "Ġl e", + "- -------", + "-- ------", + "---- ----", + "--- -----", + "----- ---", + "------ --", + "------- -", + ". s", + "{ Ċ", + "' ,", + "a nt", + "an t", + "Ġ at", + "Ġa t", + "a se", + "as e", + ". c", + "Ġ ch", + "Ġc h", + "< /", + "a ve", + "av e", + "a ng", + "an g", + "Ġ are", + "Ġa re", + "Ġar e", + "Ġ int", + "Ġin t", + "Ġi nt", + "âĢ Ļ", + "_ t", + "e rt", + "er t", + "i al", + "ia l", + "a ct", + "ac t", + "} Ċ", + "i ve", + "iv e", + "o de", + "od e", + "o st", + "os t", + "Ġ class", + "Ġc lass", + "Ġcl ass", + "Ġclas s", + "Ġcla ss", + "Ġ not", + "Ġn ot", + "Ġno t", + "o g", + "o rd", + "or d", + "a lue", + "al ue", + "alu e", + "a ll", + "al l", + "f f", + "( );Ċ", + "() ;Ċ", + "(); Ċ", + "o nt", + "on t", + "i me", + "im e", + "a re", + "ar e", + "Ġ U", + "Ġ pr", + "Ġp r", + "Ġ :", + "i es", + "ie s", + "i ze", + "iz e", + "u re", + "ur e", + "Ġ by", + "Ġb y", + "i re", + "ir e", + "Ġ }ĊĊ", + "Ġ} ĊĊ", + "Ġ}Ċ Ċ", + ". p", + "Ġ sh", + "Ġs h", + "i ce", + "ic e", + "a st", + "as t", + "p tion", + "pt ion", + "t ring", + "tr ing", + "tri ng", + "o k", + "_ _", + "c l", + "# #", + "Ġ he", + "Ġh e", + "a rd", + "ar d", + ") .", + "Ġ @", + "i ew", + "ie w", + "ĉ ĉĉ", + "ĉĉ ĉ", + "Ġ was", + "Ġw as", + "Ġwa s", + "i p", + "t his", + "th is", + "Ġ u", + "Ġ The", + "ĠT he", + "ĠTh e", + "i de", + "id e", + "a ce", + "ac e", + "i b", + "a c", + "r ou", + "ro u", + "Ġ we", + "Ġw e", + "j ect", + "je ct", + "jec t", + "Ġ public", + "Ġp ublic", + "Ġpub lic", + "Ġpubli c", + "a k", + "v e", + "a th", + "at h", + "o id", + "oi d", + "Ġ =>", + "Ġ= >", + "u st", + "us t", + "q ue", + "qu e", + "Ġ res", + "Ġre s", + "Ġr es", + ") )", + "' s", + "Ġ k", + "a ns", + "an s", + "y st", + "ys t", + "un ction", + "unc tion", + "unct ion", + "* *******", + "** ******", + "**** ****", + "****** **", + "*** *****", + "***** ***", + "******* *", + "Ġ i", + "Ġ us", + "Ġu s", + "p p", + "1 0", + "o ne", + "on e", + "a il", + "ai l", + "= ===", + "== ==", + "=== =", + "n ame", + "na me", + "nam e", + "Ġ str", + "Ġs tr", + "Ġst r", + "Ġ /", + "Ġ &", + "a ch", + "ac h", + "d iv", + "di v", + "y stem", + "yst em", + "ys tem", + "e ll", + "el l", + "Ġ have", + "Ġh ave", + "Ġha ve", + "Ġhav e", + "e rr", + "er r", + "o uld", + "ou ld", + "oul d", + "u ll", + "ul l", + "p on", + "po n", + "Ġ J", + "_ p", + "Ġ ==", + "Ġ= =", + "i gn", + "ig n", + "S t", + ". Ċ", + "Ġ pl", + "Ġp l", + ") ;ĊĊ", + ");Ċ Ċ", + "); ĊĊ", + "f orm", + "fo rm", + "for m", + "p ut", + "pu t", + "o unt", + "ou nt", + "oun t", + "} ĊĊ", + "}Ċ Ċ", + "d d", + "i te", + "it e", + "Ġ get", + "Ġg et", + "Ġge t", + "r r", + "o me", + "om e", + "Ġ âĢ", + "Ġâ Ģ", + "a ram", + "ar am", + "ara m", + "c c", + "Ġ */", + "Ġ* /", + "E R", + "I n", + "l es", + "le s", + "_ s", + "o ng", + "on g", + "i e", + "Ġ can", + "Ġc an", + "Ġca n", + "Ġ V", + "e rv", + "er v", + "p r", + "Ġ un", + "Ġu n", + "r ow", + "ro w", + "b er", + "be r", + "Ġ do", + "Ġd o", + "l l", + "Ġ el", + "Ġe l", + "Ġ self", + "Ġs elf", + "Ġse lf", + "Ġsel f", + "a ted", + "at ed", + "ate d", + "a ry", + "ar y", + "Ġ .", + "' ]", + "u d", + "Ġ en", + "Ġe n", + "Ġ Th", + "ĠT h", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "t e", + "_ c", + "u ct", + "uc t", + "Ġ ab", + "Ġa b", + "o rk", + "or k", + ". get", + ".g et", + ".ge t", + "Ġ #", + "a w", + "r ess", + "re ss", + "res s", + "o b", + "N ame", + "Na me", + "Nam e", + "2 01", + "20 1", + "a pp", + "ap p", + "[ '", + "Ġ all", + "Ġa ll", + "Ġal l", + "o ry", + "or y", + "i tion", + "it ion", + "iti on", + "a nce", + "an ce", + "anc e", + "e ar", + "ea r", + "Ġ cont", + "Ġc ont", + "Ġcon t", + "Ġco nt", + "v ent", + "ve nt", + "ven t", + "i a", + "Ġ will", + "Ġw ill", + "Ġwi ll", + "Ġwil l", + "I N", + "Ġ ĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠ", + "r eturn", + "re turn", + "ret urn", + "Ġ ", + "\" ,Ċ", + "\", Ċ", + "e c", + "Ġ In", + "ĠI n", + "p h", + "Ġ |", + "_ f", + "Ġ var", + "Ġv ar", + "Ġva r", + "e nce", + "en ce", + "enc e", + "I d", + "r ee", + "re e", + "i nk", + "in k", + "l ect", + "le ct", + "lec t", + "u g", + "e th", + "et h", + "Ġ else", + "Ġe lse", + "Ġel se", + "Ġels e", + "- ---------------", + "-- --------------", + "---- ------------", + "-------- --------", + "--- -------------", + "------------ ----", + "----- -----------", + "---------- ------", + "------ ----------", + "----------- -----", + "------------- ---", + "------- ---------", + "--------- -------", + "--------------- -", + "-------------- --", + "1 9", + "c ont", + "con t", + "co nt", + "Ġ so", + "Ġs o", + "a tic", + "at ic", + "ati c", + "Ġ lo", + "Ġl o", + "p ro", + "pr o", + "t on", + "to n", + "s s", + "o wn", + "ow n", + "a bel", + "ab el", + "abe l", + "o int", + "oin t", + "oi nt", + "o us", + "ou s", + "e ld", + "el d", + "S T", + "T he", + "Th e", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "R E", + "\" :", + "o lor", + "ol or", + "olo r", + "t p", + "e g", + "k ey", + "ke y", + "u de", + "ud e", + "Ġ St", + "ĠS t", + "o und", + "ou nd", + "oun d", + "Ġ ar", + "Ġa r", + "\" );Ċ", + "\") ;Ċ", + "\"); Ċ", + "e ner", + "en er", + "ene r", + "s er", + "se r", + "1 1", + "b ject", + "bj ect", + "es sage", + "ess age", + "essa ge", + "f er", + "fe r", + "Ġ more", + "Ġm ore", + "Ġmor e", + "Ġmo re", + "at ions", + "ation s", + "atio ns", + "ati ons", + "e nts", + "en ts", + "ent s", + "Ġ his", + "Ġh is", + "Ġhi s", + "Ġ they", + "Ġt hey", + "Ġth ey", + "Ġthe y", + ". S", + "Ġ Y", + "u se", + "us e", + "n e", + "i sh", + "is h", + "o ld", + "ol d", + "_ d", + "i o", + "i eld", + "ie ld", + "iel d", + "Ġ per", + "Ġp er", + "Ġpe r", + "C ont", + "Con t", + "Co nt", + "in gs", + "ing s", + "# ###", + "## ##", + "### #", + "Ġ data", + "Ġd ata", + "Ġda ta", + "Ġdat a", + "Ġ sa", + "Ġs a", + "e f", + "f o", + "Ġ one", + "Ġo ne", + "Ġon e", + "e ng", + "en g", + "Ġ dis", + "Ġd is", + "Ġdi s", + "A T", + "Ġ name", + "Ġn ame", + "Ġna me", + "Ġnam e", + "Ġ true", + "Ġtr ue", + "v al", + "va l", + "l ed", + "le d", + ". f", + "Ġ ne", + "Ġn e", + "Ġ end", + "Ġe nd", + "Ġen d", + "3 2", + ". T", + "1 6", + "c re", + "cr e", + "a rk", + "ar k", + "l og", + "lo g", + "E x", + "e rror", + "er ror", + "err or", + "erro r", + "_ id", + "_i d", + "ur re", + "urr e", + "a nge", + "an ge", + "ang e", + "Ġ null", + "Ġn ull", + "Ġnu ll", + "r ray", + "rr ay", + "Ġ my", + "Ġm y", + "p an", + "pa n", + "i ct", + "ic t", + "a tor", + "at or", + "ato r", + "V iew", + "Vi ew", + "L ist", + "Li st", + "ĉ return", + "ĉr eturn", + "ĉret urn", + "ĉre turn", + "âĢ Ŀ", + "Ġ pre", + "Ġp re", + "Ġpr e", + "Ġ x", + "c lude", + "cl ude", + "clud e", + "a rg", + "ar g", + "1 5", + "o v", + ". h", + "Ġ >", + "Ġ their", + "Ġthe ir", + "' )", + "i rst", + "ir st", + "irs t", + "i ck", + "ic k", + "g h", + "L E", + "O R", + "Ġ private", + "Ġpr ivate", + "Ġpriv ate", + "Ġprivat e", + "t em", + "te m", + "čĊ čĊ", + "u ser", + "us er", + "use r", + "Ġ )", + "c om", + "co m", + ". A", + "\" ;Ċ", + "\"; Ċ", + "Ġ id", + "Ġi d", + "r ead", + "re ad", + "rea d", + "Ġ who", + "Ġw ho", + "Ġwh o", + "_ b", + "\" >Ċ", + "\"> Ċ", + "Ġ time", + "Ġt ime", + "Ġtim e", + "Ġti me", + "Ġ man", + "Ġm an", + "Ġma n", + "r y", + "= =======", + "== ======", + "==== ====", + "=== =====", + "====== ==", + "===== ===", + "======= =", + "r oup", + "ro up", + "rou p", + "r op", + "ro p", + "p ublic", + "pub lic", + "v el", + "ve l", + "um ber", + "umb er", + "b le", + "bl e", + "Ġ which", + "Ġwh ich", + "** **************", + "**** ************", + "******** ********", + "************ ****", + "************** **", + "Ġ any", + "Ġa ny", + "Ġan y", + "Ġ false", + "Ġf alse", + "Ġfa lse", + "Ġfal se", + "Ġfals e", + "w e", + "Ġ value", + "Ġv alue", + "Ġval ue", + "Ġva lue", + "Ġvalu e", + "Ġ li", + "Ġl i", + "\" )", + "n der", + "nd er", + "nde r", + "g r", + "Ġ no", + "Ġn o", + "p aram", + "par am", + "pa ram", + "para m", + "2 5", + "f ig", + "fi g", + ". com", + ".c om", + ".co m", + "Ġ app", + "Ġa pp", + "Ġap p", + "_ l", + "i ons", + "ion s", + "io ns", + ". D", + "Ġ Ch", + "ĠC h", + "Ġ about", + "Ġa bout", + "Ġab out", + "Ġ add", + "Ġa dd", + "Ġad d", + "Ġ su", + "Ġs u", + "Ġ string", + "Ġs tring", + "Ġst ring", + "Ġstr ing", + "Ġstri ng", + "I D", + "Ġ over", + "Ġo ver", + "Ġov er", + "s tring", + "st ring", + "str ing", + "stri ng", + ". l", + "our ce", + "0 00", + "00 0", + "_ C", + "] Ċ", + "Ġ qu", + "Ġq u", + "Ġ String", + "ĠS tring", + "ĠSt ring", + "ĠStr ing", + "c a", + "S E", + "Ġ ro", + "Ġr o", + "s h", + "u al", + "ua l", + "T ype", + "Typ e", + "Ty pe", + "s on", + "so n", + "n ew", + "ne w", + "e rn", + "er n", + "Ġ ag", + "Ġa g", + "A R", + "] ;Ċ", + "]; Ċ", + "] .", + "Ġ ?", + "i cal", + "ic al", + "ica l", + "Ġ des", + "Ġd es", + "Ġde s", + "u th", + "ut h", + "i x", + "a ys", + "ay s", + "Ġ type", + "Ġt ype", + "Ġtyp e", + "Ġty pe", + "' t", + "a ult", + "au lt", + "aul t", + "Ġ inter", + "Ġin ter", + "Ġint er", + "Ġinte r", + "v ar", + "va r", + ". b", + "Ġ part", + "Ġp art", + "Ġpar t", + "Ġpa rt", + ". d", + "ur rent", + "urre nt", + "urr ent", + "I T", + "E N", + "3 0", + "e nc", + "en c", + "( f", + "r a", + "v alue", + "val ue", + "va lue", + "valu e", + "c ho", + "ch o", + "1 8", + "ut ton", + "utt on", + "utto n", + "o se", + "os e", + "1 4", + "Ġ !=", + "Ġ! =", + "a ter", + "at er", + "ate r", + "à ©", + "re ate", + "reat e", + "rea te", + "o ll", + "ol l", + "p os", + "po s", + "y le", + "yl e", + "n g", + "A L", + "u sing", + "us ing", + "usi ng", + "a mes", + "am es", + "ame s", + "Ġ {čĊ", + "Ġ{ čĊ", + "a tes", + "at es", + "ate s", + "e ly", + "el y", + "Ġ work", + "Ġw ork", + "Ġwor k", + "Ġwo rk", + "Ġ em", + "Ġe m", + "i nal", + "in al", + "ina l", + "Ġ sp", + "Ġs p", + "Ġ when", + "Ġw hen", + "Ġwh en", + "Ġwhe n", + ". set", + ".s et", + ".se t", + "Ġ ĠĠĠĠĠ", + "ĠĠ ĠĠĠĠ", + "ĠĠĠĠ ĠĠ", + "ĠĠĠ ĠĠĠ", + "ĠĠĠĠĠ Ġ", + ") :Ċ", + "): Ċ", + "t o", + "q uire", + "qu ire", + "quir e", + "qui re", + "ind ow", + "indo w", + "l ement", + "le ment", + "lem ent", + "lemen t", + "leme nt", + "p ect", + "pe ct", + "pec t", + "a sh", + "as h", + "[ i", + "Ġ use", + "Ġu se", + "Ġus e", + ". F", + "p ec", + "pe c", + "Ġ ad", + "Ġa d", + "o ve", + "ov e", + "ce ption", + "cept ion", + "cep tion", + "e ngth", + "en gth", + "eng th", + "in clude", + "inc lude", + "incl ude", + "inclu de", + "a der", + "ad er", + "ade r", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "at us", + "atu s", + "T h", + "i tle", + "it le", + "r it", + "ri t", + "v oid", + "vo id", + "( ).", + "() .", + "( Ċ", + "Ġ off", + "Ġo ff", + "Ġof f", + "Ġ other", + "Ġo ther", + "Ġot her", + "Ġ &&", + "Ġ& &", + "' ;Ċ", + "'; Ċ", + "m s", + "Ġ been", + "Ġb een", + "Ġbe en", + "Ġbee n", + "Ġ te", + "Ġt e", + "m l", + "c o", + "n c", + "1 3", + "er vice", + "erv ice", + "Ġ %", + "* *Ċ", + "** Ċ", + "a nn", + "an n", + "a de", + "ad e", + "Ċ ĊĊĊ", + "ĊĊ ĊĊ", + "ĊĊĊ Ċ", + "l ock", + "lo ck", + "loc k", + "con st", + "co nst", + "cons t", + "1 00", + "10 0", + "p onse", + "pon se", + "pons e", + "Ġ sup", + "Ġs up", + "Ġsu p", + "+ +", + "d ate", + "da te", + "dat e", + "Ġ acc", + "Ġa cc", + "Ġac c", + "Ġ had", + "Ġh ad", + "Ġha d", + "Ġ bu", + "Ġb u", + "2 00", + "20 0", + "Ġ Re", + "ĠR e", + "Ġ were", + "Ġw ere", + "Ġwe re", + "Ġwer e", + "Ġ file", + "Ġf ile", + "Ġfil e", + "Ġfi le", + "Ġ would", + "Ġw ould", + "Ġwo uld", + "Ġ âĢľ", + "ĠâĢ ľ", + "v en", + "ve n", + "i ss", + "is s", + "Ġ our", + "Ġo ur", + "Ġou r", + "c lass", + "cl ass", + "cla ss", + "clas s", + "r aw", + "ra w", + "Ġ year", + "Ġy ear", + "Ġye ar", + "D ata", + "Da ta", + "Dat a", + "Ġ val", + "Ġv al", + "Ġva l", + "Ġ some", + "Ġs ome", + "Ġso me", + "Ġsom e", + "f ter", + "ft er", + "fte r", + "y s", + "Ġ ///", + "Ġ// /", + "Ġ/ //", + "r ound", + "ro und", + "rou nd", + "v iew", + "vi ew", + "vie w", + "Ġ pe", + "Ġp e", + "Ġ there", + "Ġt here", + "Ġth ere", + "Ġthe re", + "Ġther e", + "Ġ said", + "Ġs aid", + "Ġsa id", + "Ġsai d", + "d u", + "o f", + "l ine", + "li ne", + "lin e", + "/ *", + "d uct", + "du ct", + "duc t", + "Ġ her", + "Ġh er", + "Ġhe r", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "R es", + "Re s", + "Ġ co", + "Ġc o", + "Ġ comm", + "Ġc omm", + "Ġcom m", + "Ġco mm", + "i se", + "is e", + "m in", + "mi n", + "Ġ ĠĠĠĊ", + "ĠĠ ĠĠĊ", + "ĠĠĠĠ Ċ", + "ĠĠĠ ĠĊ", + "# include", + "et hod", + "eth od", + ". P", + "u te", + "ut e", + "Ġ ass", + "Ġa ss", + "Ġas s", + "I nt", + "In t", + "a sk", + "as k", + "l oc", + "lo c", + "Ġ like", + "Ġl ike", + "Ġli ke", + "Ġlik e", + "o dy", + "od y", + "Ġ let", + "Ġl et", + "Ġle t", + "l oad", + "lo ad", + "Ġ am", + "Ġa m", + "r ol", + "ro l", + "Ġ gr", + "Ġg r", + "y p", + "Ġ also", + "Ġal so", + "Ġals o", + "Ġ It", + "ĠI t", + "u rl", + "ur l", + "i fic", + "if ic", + "ifi c", + "o rs", + "or s", + "_ P", + "_ n", + "i gh", + "ig h", + "Ġ than", + "Ġt han", + "Ġth an", + "Ġtha n", + "C om", + "Co m", + "A N", + "U L", + "a ting", + "at ing", + "ati ng", + "atin g", + "1 7", + "Ġ This", + "ĠT his", + "ĠTh is", + "ĠThi s", + "r ef", + "re f", + "_ S", + "Ġ static", + "Ġst atic", + "Ġstat ic", + "Ġsta tic", + "Ġstati c", + "r oll", + "ro ll", + "rol l", + "Ġ just", + "Ġj ust", + "Ġju st", + "Ġjus t", + "Ġ result", + "Ġres ult", + "i an", + "ia n", + "id th", + "Ġ them", + "Ġt hem", + "Ġth em", + "Ġthe m", + ") );Ċ", + ")) ;Ċ", + ")); Ċ", + "d er", + "de r", + "re ak", + "rea k", + "C on", + "Co n", + ": //", + ":/ /", + "u le", + "ul e", + ". ..", + ".. .", + "a rch", + "ar ch", + "arc h", + "e ment", + "em ent", + "eme nt", + "emen t", + "Ġ <<", + "Ġ< <", + "5 0", + "u sh", + "us h", + "en se", + "ens e", + "a rr", + "ar r", + "Ġ into", + "Ġin to", + "Ġint o", + "c ess", + "ce ss", + "ces s", + "a mp", + "am p", + "i ed", + "ie d", + "u ment", + "um ent", + "ume nt", + "umen t", + "Ġ \\", + "] ,", + "w o", + "a ls", + "al s", + "Ġ what", + "Ġw hat", + "Ġwh at", + "a nc", + "an c", + "V alue", + "Val ue", + "Va lue", + "= '", + "o lum", + "ol um", + "olu m", + "Ġ pos", + "Ġp os", + "Ġpo s", + "a ges", + "ag es", + "age s", + "a yer", + "ay er", + "aye r", + "Ġ sc", + "Ġs c", + "u es", + "ue s", + "\" )Ċ", + "\") Ċ", + "_ T", + "Ġ list", + "Ġl ist", + "Ġli st", + "Ġlis t", + "( s", + "Ġ case", + "Ġc ase", + "Ġca se", + "Ġcas e", + "C h", + "ĉ ĉĉĉĉ", + "ĉĉ ĉĉĉ", + "ĉĉĉĉ ĉ", + "ĉĉĉ ĉĉ", + "//// ////", + "/// /////", + "///// ///", + "p onent", + "pon ent", + "pone nt", + "Ġ z", + "Ġ kn", + "Ġk n", + "l et", + "le t", + "D E", + "r ed", + "re d", + "Ġ fe", + "Ġf e", + "Ġ },Ċ", + "Ġ} ,Ċ", + "Ġ}, Ċ", + "Ġ ,", + "( t", + "Ġ first", + "Ġf irst", + "Ġfi rst", + "Ġfir st", + "' );Ċ", + "') ;Ċ", + "'); Ċ", + "w ord", + "wo rd", + "wor d", + "Ġ import", + "Ġim port", + "Ġimp ort", + "Ġ act", + "Ġa ct", + "Ġac t", + "Ġ char", + "Ġc har", + "Ġch ar", + "Ġcha r", + "C T", + "Ġ Tr", + "ĠT r", + "o ple", + "op le", + "opl e", + "= {", + "ĉ f", + "2 4", + "i ent", + "ie nt", + "ien t", + "c ent", + "ce nt", + "cen t", + ". j", + "l ection", + "le ction", + "lect ion", + "lec tion", + ") )Ċ", + ")) Ċ", + "Ġ only", + "Ġon ly", + "Ġ print", + "Ġp rint", + "Ġpr int", + "Ġpri nt", + "Ġprin t", + "m er", + "me r", + ". W", + "o ck", + "oc k", + "Ġ --", + "Ġ- -", + "T ext", + "Te xt", + "Tex t", + "Ġ op", + "Ġo p", + "a nk", + "an k", + "Ġ its", + "Ġit s", + "Ġi ts", + "Ġ back", + "Ġb ack", + "Ġba ck", + "Ġbac k", + "[ \"", + "Ġ need", + "Ġn eed", + "Ġne ed", + "Ġ cl", + "Ġc l", + "Ġ sub", + "Ġs ub", + "Ġsu b", + "Ġ la", + "Ġl a", + "( (", + ". \"", + "O bject", + "Ob ject", + "Obj ect", + "Ġ start", + "Ġst art", + "Ġstar t", + "Ġsta rt", + "f ile", + "fi le", + "fil e", + "( self", + "(s elf", + "(se lf", + "(sel f", + "n er", + "ne r", + "e y", + "Ġ user", + "Ġu ser", + "Ġus er", + "Ġuse r", + "Ġ ent", + "Ġe nt", + "Ġen t", + "Ġ Com", + "ĠC om", + "ĠCo m", + "i ts", + "it s", + "Ġ Con", + "ĠC on", + "ĠCo n", + "o uble", + "ou ble", + "oub le", + "o wer", + "ow er", + "owe r", + "i tem", + "it em", + "ite m", + "v ery", + "ver y", + "ve ry", + "Ġ We", + "ĠW e", + "6 4", + "l ick", + "lic k", + "li ck", + "Ġ Q", + "p hp", + "ph p", + "t tp", + "tt p", + "' :", + "i cs", + "ic s", + "Ġ under", + "Ġu nder", + "Ġun der", + "Ġund er", + "Ġunde r", + "Ġ *Ċ", + "Ġ* Ċ", + ". L", + ") ;", + "i ces", + "ic es", + "ice s", + "Ġ reg", + "Ġre g", + "Ġr eg", + ") čĊ", + "ĉ public", + "ĉp ublic", + "ĉpub lic", + "S S", + "Ġ then", + "Ġt hen", + "Ġth en", + "Ġthe n", + "r eat", + "re at", + "rea t", + "i ous", + "io us", + "iou s", + ". G", + "e k", + "i rect", + "ir ect", + "ire ct", + "h eck", + "he ck", + "hec k", + "cri pt", + "cr ipt", + "n ing", + "ni ng", + "nin g", + "Ġ Un", + "ĠU n", + "Ġ may", + "Ġm ay", + "Ġma y", + "Ġ Wh", + "ĠW h", + "B o", + "I tem", + "It em", + "str uct", + "stru ct", + ". st", + ".s t", + "r eam", + "re am", + "rea m", + "i ble", + "ib le", + "lo at", + "Ġ org", + "Ġo rg", + "Ġor g", + "u nd", + "un d", + "s um", + "su m", + "_ in", + "_i n", + ". ./", + ".. /", + "_ M", + "Ġ how", + "Ġh ow", + "Ġho w", + "r ite", + "ri te", + "rit e", + "' Ċ", + "T o", + "4 0", + "w w", + "Ġ people", + "Ġpe ople", + "in dex", + "ind ex", + "inde x", + ". n", + "h ttp", + "ht tp", + "htt p", + "( m", + "e ctor", + "ect or", + "ec tor", + "Ġ ind", + "Ġin d", + "Ġi nd", + "Ġ jav", + "Ġj av", + "Ġja v", + "] ,Ċ", + "], Ċ", + "Ġ He", + "ĠH e", + "_ st", + "_s t", + "f ul", + "fu l", + "o le", + "ol e", + ") {Ċ", + "){ Ċ", + "Ġ should", + "Ġsh ould", + "Ġsho uld", + "o py", + "op y", + "e lp", + "el p", + "i er", + "ie r", + "_ name", + "_n ame", + "_na me", + "er son", + "ers on", + "I ON", + "IO N", + "o te", + "ot e", + "Ġ test", + "Ġt est", + "Ġte st", + "Ġtes t", + "Ġ bet", + "Ġb et", + "Ġbe t", + "r ror", + "rr or", + "u lar", + "ul ar", + "ula r", + "ã Ģ", + "Ġ Ð", + "b s", + "t ing", + "ti ng", + "tin g", + "Ġ make", + "Ġm ake", + "Ġma ke", + "Ġmak e", + "T r", + "Ġ after", + "Ġa fter", + "Ġaf ter", + "Ġaft er", + "ar get", + "arg et", + "arge t", + "R O", + "ol umn", + "olum n", + "olu mn", + "r c", + "_ re", + "_r e", + "de fine", + "def ine", + "2 2", + "Ġ right", + "Ġr ight", + "Ġrig ht", + "Ġri ght", + "r ight", + "ri ght", + "rig ht", + "d ay", + "da y", + "Ġ long", + "Ġl ong", + "Ġlo ng", + "Ġlon g", + "[ ]", + "( p", + "t d", + "c ond", + "con d", + "co nd", + "Ġ Pro", + "ĠP ro", + "ĠPr o", + "Ġ rem", + "Ġre m", + "Ġr em", + "pt ions", + "ption s", + "v id", + "vi d", + ". g", + "Ġ ext", + "Ġe xt", + "Ġex t", + "Ġ __", + "Ġ_ _", + "' )Ċ", + "') Ċ", + "p ace", + "pa ce", + "pac e", + "m p", + "Ġ min", + "Ġm in", + "Ġmi n", + "st ance", + "sta nce", + "stan ce", + "a ir", + "ai r", + "a ction", + "act ion", + "ac tion", + "w h", + "t ype", + "ty pe", + "typ e", + "u til", + "ut il", + "uti l", + "a it", + "ai t", + "< ?", + "I C", + "t ext", + "te xt", + "tex t", + "Ġ ph", + "Ġp h", + "Ġ fl", + "Ġf l", + ". M", + "c cess", + "cc ess", + "cce ss", + "b r", + "f ore", + "fo re", + "for e", + "ers ion", + ") ,Ċ", + "), Ċ", + ". re", + ".r e", + "a teg", + "at eg", + "ate g", + "Ġ loc", + "Ġl oc", + "Ġlo c", + "i ns", + "in s", + "- s", + "t rib", + "tr ib", + "tri b", + "Ġ Int", + "ĠI nt", + "ĠIn t", + "Ġ array", + "Ġa rray", + "Ġar ray", + "Ġarr ay", + ", \"", + "P ro", + "Pr o", + "( c", + "ess ion", + "> ĊĊ", + ">Ċ Ċ", + "Ġ she", + "Ġs he", + "Ġsh e", + "\" ]", + "a ph", + "ap h", + "Ġ exp", + "Ġe xp", + "Ġex p", + "er ty", + "ert y", + "Ġ Se", + "ĠS e", + "Ġ par", + "Ġp ar", + "Ġpa r", + "u nc", + "un c", + "E T", + "Ġ read", + "Ġre ad", + "Ġr ead", + "p rint", + "pr int", + "pri nt", + "Ġ rel", + "Ġre l", + "Ġr el", + "Ġ form", + "Ġf orm", + "Ġfor m", + "Ġfo rm", + "Ġ dr", + "Ġd r", + "Ex ception", + "Except ion", + "in put", + "inp ut", + "Ġ trans", + "Ġt rans", + "Ġtr ans", + "Ġtra ns", + "Ġtran s", + "# #######", + "## ######", + "#### ####", + "### #####", + "##### ###", + "###### ##", + "####### #", + "or der", + "ord er", + "orde r", + "B y", + "Ġ aw", + "Ġa w", + "i ties", + "it ies", + "iti es", + "u ff", + "uf f", + "p lay", + "pl ay", + "pla y", + ". add", + ".a dd", + ".ad d", + "Ġ âĢĵ", + "ĠâĢ ĵ", + "Ġ want", + "Ġw ant", + "Ġwa nt", + "Ġwan t", + "Ġ comp", + "Ġc omp", + "Ġcom p", + "Ġco mp", + "m ents", + "ment s", + "me nts", + "men ts", + "Ġ ||", + "Ġ| |", + "a z", + "b e", + "Ġ number", + "Ġn umber", + "Ġnum ber", + "Ġnumb er", + "Ġ require", + "Ġre quire", + "Ġreq uire", + "Ġrequ ire", + "Ġ Ex", + "ĠE x", + "6 0", + "Ġ col", + "Ġc ol", + "Ġco l", + "Ġ key", + "Ġk ey", + "Ġke y", + "em ber", + "emb er", + "Ġ two", + "Ġt wo", + "Ġtw o", + "Ġ size", + "Ġs ize", + "Ġsi ze", + "Ġsiz e", + "Ġ where", + "Ġw here", + "Ġwh ere", + "Ġwhe re", + "U T", + "res ult", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "o ugh", + "ou gh", + "oug h", + "or ld", + "o od", + "oo d", + "u ch", + "uc h", + "at ive", + "ati ve", + "ativ e", + "g er", + "ge r", + "a rent", + "ar ent", + "are nt", + "aren t", + "Ġ /*", + "Ġ/ *", + "Ġ arg", + "Ġa rg", + "Ġar g", + "Ġ while", + "Ġwh ile", + "2 3", + "( this", + "(t his", + "(th is", + "Ġ rec", + "Ġre c", + "Ġr ec", + "Ġ dif", + "Ġd if", + "Ġdi f", + "St ate", + "Stat e", + "Ġ spec", + "Ġs pec", + "Ġsp ec", + "Ġspe c", + "r ide", + "ri de", + "rid e", + "_ F", + "Ġ look", + "Ġl ook", + "Ġlo ok", + "A M", + "il ity", + "ilit y", + "ili ty", + "e ter", + "et er", + "ete r", + "âĢĻ t", + "Ċ ĊĊ", + "ĊĊ Ċ", + "ay out", + "ayo ut", + "-- ------------------------------", + "---- ----------------------------", + "---------------- ----------------", + "------------ --------------------", + "---------------------------- ----", + "------------------------------ --", + "-------------------- ------------", + "a ger", + "ag er", + "age r", + "Ġ could", + "Ġc ould", + "Ġco uld", + "Ġcou ld", + "Ġ br", + "Ġb r", + "e nds", + "en ds", + "end s", + "u res", + "ur es", + "ure s", + "Ġ know", + "Ġk now", + "Ġkn ow", + "e ts", + "et s", + "Ġ If", + "ĠI f", + "Ġ Sh", + "ĠS h", + ". w", + "b ack", + "ba ck", + "bac k", + "Ġ ser", + "Ġs er", + "Ġse r", + "Ġ +=", + "Ġ+ =", + "Ġ fr", + "Ġf r", + "( ));Ċ", + "() );Ċ", + "()) ;Ċ", + "()); Ċ", + "Ġ hand", + "Ġh and", + "Ġha nd", + "Ġhan d", + "I nd", + "In d", + "U LL", + "UL L", + "I m", + "( );ĊĊ", + "() ;ĊĊ", + "();Ċ Ċ", + "(); ĊĊ", + "Ġ most", + "Ġm ost", + "Ġmo st", + "Ġmos t", + "Ġ try", + "Ġt ry", + "Ġtr y", + "Ġ now", + "Ġn ow", + "Ġno w", + "r ough", + "ro ugh", + "rou gh", + "> čĊ", + "ack age", + "Ġ him", + "Ġh im", + "Ġhi m", + ". _", + "i fy", + "if y", + "Ġ break", + "Ġb reak", + "Ġbre ak", + "Ġ );Ċ", + "Ġ) ;Ċ", + "Ġ); Ċ", + "r en", + "re n", + "# define", + "i tt", + "it t", + "Ġ ap", + "Ġa p", + "ĉ c", + "( n", + "Ġ You", + "ĠY ou", + "ĠYo u", + ": ĊĊ", + ":Ċ Ċ", + "- m", + "Ġ every", + "Ġe very", + "Ġever y", + "Ġev ery", + "Ġeve ry", + "us tom", + "ust om", + "usto m", + "l ient", + "li ent", + "lie nt", + "lien t", + "oc ument", + "ocu ment", + "cri ption", + "cript ion", + "E rror", + "Err or", + "Er ror", + "Erro r", + "- b", + "Ð ¾", + "] [", + "9 9", + "t rans", + "tr ans", + "tra ns", + "tran s", + "Ġ point", + "Ġp oint", + "Ġpo int", + "Ġpoi nt", + "Ġ std", + "Ġs td", + "Ġst d", + "Ġ fil", + "Ġf il", + "Ġfi l", + "T ime", + "Tim e", + "Ti me", + "8 0", + "Ġ mod", + "Ġm od", + "Ġmo d", + "Ġ ->", + "Ġ- >", + "Ġ error", + "Ġe rror", + "Ġerr or", + "Ġer ror", + "Ġerro r", + "a h", + "Ġ text", + "Ġt ext", + "Ġte xt", + "Ġtex t", + "r oller", + "ro ller", + "rol ler", + "roll er", + "l ose", + "lo se", + "los e", + "q l", + "Ġ pol", + "Ġp ol", + "Ġpo l", + "> < /", + "Ġ show", + "Ġs how", + "Ġsh ow", + "Ġsho w", + "U ser", + "Us er", + "Use r", + "a sed", + "as ed", + "ase d", + "Ġ {ĊĊ", + "Ġ{ ĊĊ", + "Ġ{Ċ Ċ", + "Ġ find", + "Ġf ind", + "Ġfin d", + "Ġfi nd", + "Ð °", + "E D", + "s pan", + "sp an", + "spa n", + "e nu", + "en u", + "Ġ current", + "Ġc urrent", + "Ġcur rent", + "Ġcurr ent", + "Ġ used", + "Ġu sed", + "Ġus ed", + "Ġuse d", + "c ept", + "ce pt", + "cep t", + "cl ud", + "Ġ play", + "Ġp lay", + "Ġpl ay", + "Ġpla y", + "Ġ log", + "Ġl og", + "Ġlo g", + "u tion", + "ut ion", + "uti on", + "f l", + "Ġ see", + "Ġs ee", + "Ġse e", + "ind ows", + "indow s", + "indo ws", + "Ġ help", + "Ġh elp", + "Ġhe lp", + "Ġhel p", + "Ġ these", + "Ġth ese", + "Ġthe se", + "Ġ pass", + "Ġp ass", + "Ġpas s", + "Ġpa ss", + "Ġ down", + "Ġd own", + "Ġdo wn", + "Ġdow n", + "Ġ even", + "Ġe ven", + "Ġev en", + "Ġeve n", + "a son", + "as on", + "aso n", + "u ild", + "ui ld", + "uil d", + "f rom", + "fr om", + "( d", + "Ġ bl", + "Ġb l", + "l abel", + "la bel", + "lab el", + "e lse", + "el se", + "els e", + "Ð µ", + "Ġ (!", + "Ġ( !", + "i zed", + "iz ed", + "ize d", + "( ),", + "() ,", + "Ġ ob", + "Ġo b", + "Ġ item", + "Ġit em", + "Ġi tem", + "u mp", + "um p", + "U R", + "o rn", + "or n", + "Ġ don", + "Ġd on", + "Ġdo n", + "S e", + "m an", + "ma n", + "2 7", + "am ple", + "amp le", + "t n", + "= ===============", + "== ==============", + "==== ============", + "======== ========", + "=== =============", + "============ ====", + "============= ===", + "=========== =====", + "============== ==", + "========= =======", + "========== ======", + "=============== =", + "====== ==========", + "===== ===========", + "======= =========", + "H e", + "g ram", + "gr am", + "gra m", + "Ġ did", + "Ġd id", + "Ġdi d", + "w n", + "_ h", + "i ver", + "iv er", + "ive r", + "Ġ sm", + "Ġs m", + "Ġ through", + "Ġth rough", + "Ġthr ough", + "Ġthro ugh", + "Ġ An", + "ĠA n", + "c he", + "ch e", + "Ġ inv", + "Ġin v", + "Ġi nv", + "o use", + "ou se", + "ous e", + "Ġ es", + "Ġe s", + "Ġ New", + "ĠN ew", + "ĠNe w", + "ex port", + "exp ort", + "expo rt", + "m ary", + "ma ry", + "mar y", + "u to", + "ut o", + "l er", + "le r", + "Ġ last", + "Ġl ast", + "Ġla st", + "Ġlas t", + "Ġ event", + "Ġe vent", + "Ġeven t", + "Ġev ent", + "Ġeve nt", + "t ry", + "tr y", + "ï ¼", + "i ly", + "il y", + "ig ned", + "ign ed", + "igne d", + "i nes", + "in es", + "ine s", + "ol low", + "oll ow", + "ollo w", + "ic ense", + "icens e", + "s ole", + "so le", + "sol e", + "l ear", + "le ar", + "lea r", + "( int", + "(i nt", + "(in t", + "Ġ again", + "Ġa gain", + "Ġag ain", + "Ġ high", + "Ġh igh", + "Ġhi gh", + "h tml", + "ht ml", + "htm l", + "In dex", + "Ind ex", + "ut hor", + "uth or", + "Ġ /**Ċ", + "Ġ/ **Ċ", + "Ġ/* *Ċ", + "Ġ/** Ċ", + "Ġ line", + "Ġl ine", + "Ġli ne", + "Ġlin e", + "E vent", + "Even t", + "Ev ent", + "_ D", + "Ġ does", + "Ġd oes", + "Ġdo es", + "Ġdoe s", + "it ial", + "iti al", + "itia l", + "Ġ cr", + "Ġc r", + "a rs", + "ar s", + "2 8", + "Ġ tem", + "Ġt em", + "Ġte m", + "c ause", + "ca use", + "f ace", + "fa ce", + "fac e", + "Ġ `", + "_ A", + "B utton", + "But ton", + "a ture", + "at ure", + "atur e", + "atu re", + "ect ed", + "ec ted", + "E S", + "i ster", + "is ter", + "ist er", + "iste r", + "ĉ Ċ", + "Ġ before", + "Ġb efore", + "Ġbe fore", + "Ġbef ore", + "a le", + "al e", + "o ther", + "ot her", + "oth er", + "Ġ because", + "Ġb ecause", + "Ġbe cause", + "Ġbec ause", + "r oid", + "ro id", + "roi d", + "Ġ ed", + "Ġe d", + "i k", + "r eg", + "re g", + "Ġ De", + "ĠD e", + "Ġ dist", + "Ġd ist", + "Ġdis t", + "Ġdi st", + "} ,Ċ", + "}, Ċ", + "Ġ state", + "Ġst ate", + "Ġstat e", + "Ġsta te", + "Ġ cons", + "Ġc ons", + "Ġcon s", + "Ġco ns", + "r int", + "ri nt", + "rin t", + "a tt", + "at t", + "Ġ here", + "Ġh ere", + "Ġhe re", + "Ġher e", + "i ned", + "in ed", + "ine d", + "Ġ final", + "Ġf inal", + "Ġfin al", + "Ġfi nal", + "Ġ \"\"", + "Ġ\" \"", + "K ey", + "Ke y", + "L O", + "Ġ del", + "Ġd el", + "Ġde l", + "p ty", + "pt y", + "th ing", + "thin g", + "2 6", + "Ġ And", + "ĠA nd", + "ĠAn d", + "Ġ run", + "Ġr un", + "Ġru n", + "Ġ X", + "y m", + ". app", + ".ap p", + ".a pp", + "Ġ very", + "Ġv ery", + "Ġver y", + "Ġve ry", + "c es", + "ce s", + "_ N", + "a red", + "ar ed", + "are d", + "w ard", + "wa rd", + "war d", + "l ist", + "li st", + "lis t", + "i ted", + "it ed", + "ite d", + "o log", + "ol og", + "olo g", + "it ch", + "B ox", + "Bo x", + "i fe", + "if e", + "3 3", + "Ġ ac", + "Ġa c", + "Ġ model", + "Ġm odel", + "Ġmod el", + "Ġmode l", + "Ġmo del", + "Ġ mon", + "Ġm on", + "Ġmo n", + "Ġ way", + "Ġw ay", + "Ġwa y", + "l ete", + "le te", + "let e", + "Ġ call", + "Ġc all", + "Ġcal l", + "Ġca ll", + "Ġ att", + "Ġa tt", + "Ġat t", + "Ġ cal", + "Ġc al", + "Ġca l", + "v ert", + "ver t", + "ve rt", + "Ġ dec", + "Ġd ec", + "Ġde c", + "l ease", + "le ase", + "lea se", + "o un", + "ou n", + "Ġ });Ċ", + "Ġ} );Ċ", + "Ġ}) ;Ċ", + "Ġ}); Ċ", + "f r", + "form ation", + "format ion", + "forma tion", + "e tail", + "et ail", + "eta il", + "Ġ num", + "Ġn um", + "Ġnu m", + "a j", + "qu ery", + "que ry", + "quer y", + "Ġ well", + "Ġw ell", + "Ġwe ll", + "Ġwel l", + "Ġ object", + "Ġo bject", + "Ġob ject", + "Ġobj ect", + "Ġ As", + "ĠA s", + "Ġ years", + "Ġy ears", + "Ġyear s", + "Ġye ars", + "C olor", + "Col or", + "Co lor", + "I S", + "Ġ default", + "Ġd efault", + "Ġde fault", + "Ġdef ault", + "Ġdefa ult", + "W h", + "Ġ ins", + "Ġin s", + "Ġi ns", + "a int", + "ain t", + "ai nt", + "Ġ java", + "Ġj ava", + "Ġjav a", + "Ġja va", + "Ġ sim", + "Ġs im", + "Ġsi m", + "Ġ Ar", + "ĠA r", + "m on", + "mo n", + "t il", + "ti l", + "( );čĊ", + "() ;čĊ", + "(); čĊ", + ") :", + "S et", + "Se t", + "2 9", + "at ter", + "att er", + "atte r", + "Ġ view", + "Ġv iew", + "Ġvi ew", + "Ġvie w", + "Ġ pres", + "Ġp res", + "Ġpr es", + "Ġpre s", + "a rray", + "ar ray", + "arr ay", + "arra y", + "W e", + "A t", + "Ġ bel", + "Ġb el", + "Ġbe l", + "Ġ many", + "Ġm any", + "Ġman y", + "Ġma ny", + "2 1", + "M an", + "Ma n", + "e nder", + "en der", + "end er", + "ende r", + "Ġ being", + "Ġb eing", + "Ġbe ing", + "Ġbei ng", + "Ġ good", + "Ġg ood", + "Ġgo od", + "Ġgoo d", + "ĉ ĉĉĉĉĉ", + "ĉĉ ĉĉĉĉ", + "ĉĉĉĉ ĉĉ", + "ĉĉĉ ĉĉĉ", + "ĉĉĉĉĉ ĉ", + "at ional", + "ation al", + "atio nal", + "ati onal", + "w are", + "wa re", + "war e", + ". log", + ".l og", + ".lo g", + "{ čĊ", + "Ġ using", + "Ġu sing", + "Ġus ing", + "_ B", + "Ġ :=", + "Ġ: =", + "_ w", + "i sts", + "is ts", + "ist s", + "l ish", + "li sh", + "lis h", + "Ġ stud", + "Ġst ud", + "Ġstu d", + "Ġ Al", + "ĠA l", + "Ġ gu", + "Ġg u", + "con fig", + "conf ig", + "u ring", + "ur ing", + "uri ng", + "t ime", + "ti me", + "tim e", + "o ken", + "ok en", + "oke n", + "ame space", + "ames pace", + "Ġ request", + "Ġre quest", + "Ġreq uest", + "Ġrequ est", + "Ġ child", + "Ġch ild", + "Ġchi ld", + "Ġ Ã", + "l ob", + "lo b", + "Ġ param", + "Ġp aram", + "Ġpar am", + "Ġpara m", + "Ġpa ram", + "Ġ }čĊ", + "Ġ} čĊ", + "0 1", + "Ġ echo", + "Ġe cho", + "Ġec ho", + "Ġech o", + "f unction", + "func tion", + "fun ction", + "**** ****************************", + "******** ************************", + "**************** ****************", + "************************ ********", + "******************** ************", + "**************************** ****", + "************ ********************", + "p s", + "E lement", + "El ement", + "Elem ent", + "Ele ment", + "a lk", + "al k", + "l ication", + "lic ation", + "li cation", + "lica tion", + "b y", + "S ize", + "Si ze", + "ra wing", + "raw ing", + "Ġ person", + "Ġp erson", + "Ġper son", + "Ġpers on", + "Ġperso n", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "\\ n", + "o bject", + "ob ject", + "obj ect", + "i nce", + "in ce", + "inc e", + "E n", + "F ile", + "Fi le", + "Fil e", + "u f", + "f fect", + "ff ect", + "ffe ct", + "A C", + "Ġ style", + "Ġst yle", + "Ġsty le", + "Ġstyl e", + "sum mary", + "summ ary", + "Ġ que", + "Ġqu e", + "Ġq ue", + "_ r", + "Ġ ($", + "Ġ( $", + "M odel", + "Mode l", + "Mod el", + "Mo del", + "i dent", + "id ent", + "ide nt", + "iden t", + "Ġ method", + "Ġm ethod", + "Ġmet hod", + "Ġmeth od", + "I L", + "o tt", + "ot t", + "l ess", + "le ss", + "les s", + "I NG", + "IN G", + "Ġ ()", + "Ġ( )", + "Ġ expect", + "Ġex pect", + "Ġexp ect", + "y nc", + "yn c", + "p ackage", + "pack age", + "3 5", + "u rs", + "ur s", + "Ġ prot", + "Ġp rot", + "Ġpro t", + "Ġpr ot", + ". /", + "p re", + "pr e", + "Ġ )Ċ", + "Ġ) Ċ", + "m a", + "Ġ sur", + "Ġs ur", + "Ġsu r", + "Ġ found", + "Ġf ound", + "Ġfo und", + "Ġfou nd", + "In fo", + "Inf o", + "p ar", + "pa r", + "i mes", + "im es", + "ime s", + ". e", + "a ins", + "ain s", + "ai ns", + "Ġ post", + "Ġp ost", + "Ġpos t", + "Ġpo st", + "- d", + "4 5", + "o lean", + "ol ean", + "ole an", + "Ġ sl", + "Ġs l", + "P E", + "Ġ such", + "Ġs uch", + "Ġsu ch", + "Ġsuc h", + "s elect", + "se lect", + "sel ect", + "a iner", + "ain er", + "ai ner", + "aine r", + "Ġ think", + "Ġth ink", + "Ġthin k", + "Ġthi nk", + "Ġd iffer", + "Ġdif fer", + "Ġdi ffer", + "Ġdiff er", + ". r", + "/ **Ċ", + "/* *Ċ", + "/** Ċ", + "F F", + "o ol", + "oo l", + "p late", + "pl ate", + "plat e", + "pla te", + "q ual", + "qu al", + "qua l", + "Ġ For", + "ĠF or", + "ĠFo r", + "Ġ much", + "Ġm uch", + "Ġmu ch", + "Ġmuc h", + "u c", + "( new", + "(n ew", + "(ne w", + "od ule", + "odu le", + "Ġ som", + "Ġs om", + "Ġso m", + "Ġ http", + "Ġh ttp", + "Ġht tp", + "Ġhtt p", + "Ġ List", + "ĠL ist", + "ĠLi st", + "ĠLis t", + "Ġ count", + "Ġc ount", + "Ġco unt", + "Ġcoun t", + "Ġcou nt", + "Ġ inst", + "Ġin st", + "Ġi nst", + "Ġins t", + "c har", + "ch ar", + "cha r", + "m it", + "mi t", + ". id", + ".i d", + "a king", + "ak ing", + "aki ng", + "akin g", + "Ġ gener", + "Ġg ener", + "Ġge ner", + "Ġgen er", + "Ġgene r", + "p x", + "v ice", + "vi ce", + "vic e", + "3 7", + "_ data", + "_d ata", + "_dat a", + "_da ta", + "Ġ NULL", + "ĠN ULL", + "ĠNU LL", + "} čĊ", + "i dd", + "id d", + "ãĢ Ĥ", + "Ġ med", + "Ġm ed", + "Ġme d", + "o rg", + "or g", + "i der", + "id er", + "ide r", + "a che", + "ac he", + "ach e", + "w ork", + "wo rk", + "wor k", + "Ġ check", + "Ġc heck", + "Ġch eck", + "Ġche ck", + "w een", + "we en", + "Ġ ((", + "Ġ( (", + "t he", + "th e", + "a nts", + "an ts", + "ant s", + "> <", + ". B", + "- c", + "Ġ open", + "Ġo pen", + "Ġop en", + "Ġ est", + "Ġe st", + "Ġes t", + "Ġ ĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĊ", + "Ġ next", + "Ġn ext", + "Ġne xt", + "Ġnex t", + "I M", + "Ñ Ĥ", + "O T", + "à ³", + "Ġ follow", + "Ġf ollow", + "Ġfol low", + "Ġfoll ow", + "c ontent", + "con tent", + "cont ent", + "conte nt", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "Ġin clud", + "Ġincl ud", + "Ġinclu d", + "H E", + "Ġ Res", + "ĠR es", + "ĠRe s", + "Ġ href", + "Ġh ref", + "Ġhr ef", + "Ð ¸", + "Ġ car", + "Ġc ar", + "Ġca r", + "y pes", + "ype s", + "yp es", + "i mage", + "im age", + "ima ge", + "imag e", + "U n", + "Ġ bool", + "Ġb ool", + "Ġbo ol", + "Ġboo l", + "A D", + "Ġ game", + "Ġg ame", + "Ġgam e", + "Ġga me", + ". Form", + ".F orm", + ".For m", + "r ows", + "ro ws", + "row s", + "* /", + "v elop", + "ve lop", + "vel op", + ". Drawing", + ".D rawing", + ".Draw ing", + "Ġ path", + "Ġp ath", + "Ġpat h", + "Ġpa th", + "is ion", + "isi on", + "Ġ each", + "Ġe ach", + "Ġea ch", + "Ġ Pl", + "ĠP l", + "_ type", + "_t ype", + "_typ e", + "_ty pe", + "P ath", + "Pa th", + "Pat h", + "n ection", + "ne ction", + "nect ion", + "Ġ av", + "Ġa v", + "' ).", + "') .", + "Ġ support", + "Ġs upport", + "Ġsup port", + "Ġsupp ort", + "E NT", + "EN T", + "r em", + "re m", + "\" ).", + "\") .", + "Ġ own", + "Ġo wn", + "Ġow n", + "Ġ cor", + "Ġc or", + "Ġco r", + "c ount", + "co unt", + "cou nt", + "m iss", + "mi ss", + "mis s", + "u ally", + "ual ly", + "Ġ mem", + "Ġm em", + "Ġme m", + "s td", + "st d", + "i ence", + "ie nce", + "ien ce", + "s earch", + "se arch", + "sea rch", + "\" ĊĊ", + "\"Ċ Ċ", + "F orm", + "For m", + "Fo rm", + "Ġ sex", + "Ġs ex", + "Ġse x", + "e name", + "en ame", + "ena me", + "Ġ sign", + "Ġs ign", + "Ġsi gn", + "Ġsig n", + "Ġ et", + "Ġe t", + "Ġ ĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠ ĠĠĠĠ", + "' ,'", + "', '", + "Ġ App", + "ĠA pp", + "ĠAp p", + "Ġ those", + "Ġth ose", + "Ġtho se", + "o ff", + "of f", + "Ġ err", + "Ġe rr", + "Ġer r", + "Ġ system", + "Ġs ystem", + "Ġsys tem", + "Ġsy stem", + "Ġsyst em", + "Ġ best", + "Ġb est", + "Ġbe st", + "Ġbes t", + "c ode", + "co de", + "cod e", + "Ġ same", + "Ġs ame", + "Ġsa me", + "Ġsam e", + "Ġ di", + "Ġd i", + "u ss", + "us s", + "Ġ create", + "Ġc reate", + "Ġcre ate", + "Ġcreat e", + "Ġcrea te", + "a ther", + "at her", + "ath er", + "athe r", + "A rray", + "Ar ray", + "Arr ay", + ". in", + ".i n", + "f e", + "S ervice", + "Ser vice", + "Serv ice", + "U N", + "a ts", + "at s", + "Ġ Z", + "al th", + "alt h", + "Ġ made", + "Ġm ade", + "Ġma de", + "Ġmad e", + "tr ue", + "tru e", + "A B", + "Ġ mark", + "Ġm ark", + "Ġmar k", + "Ġma rk", + "r id", + "ri d", + "if ied", + "ifi ed", + "ifie d", + ", čĊ", + "y n", + "p ress", + "pr ess", + "pre ss", + "pres s", + "Ġ group", + "Ġg roup", + "Ġgr oup", + "Ġgro up", + "Ġgrou p", + "Ġ fin", + "Ġf in", + "Ġfi n", + "Ġ License", + "ĠL icense", + "ĠLic ense", + "F ield", + "Fi eld", + "e ger", + "eg er", + "Ġ world", + "Ġw orld", + "Ġwor ld", + "i ness", + "in ess", + "ine ss", + "ines s", + "t y", + "Ġ process", + "Ġp rocess", + "Ġpro cess", + "Ġproc ess", + "Ġproces s", + "( b", + "Ġ cre", + "Ġc re", + "Ġcr e", + "a rn", + "ar n", + "i ves", + "iv es", + "ive s", + "Ġ main", + "Ġm ain", + "Ġma in", + "Ġmai n", + "i deo", + "id eo", + "ide o", + "3 6", + "_ g", + "A G", + "val id", + "va lid", + "i mg", + "im g", + "P I", + "Ġ color", + "Ġc olor", + "Ġco lor", + "Ġcol or", + "Ġ report", + "Ġre port", + "Ġrep ort", + "Ġrepo rt", + "Ġ take", + "Ġt ake", + "Ġta ke", + "Ġtak e", + "r ib", + "ri b", + "O M", + "Ġ day", + "Ġd ay", + "Ġda y", + "Re quest", + "Req uest", + "Ġ sk", + "Ġs k", + "b ers", + "ber s", + "be rs", + "ĉ s", + ". Add", + ".A dd", + ".Ad d", + "o ot", + "oo t", + "I mage", + "Im age", + "Ġcom ple", + "Ġcomp le", + "Ġcompl e", + "ol lection", + "oll ection", + "ollect ion", + "olle ction", + "Ġ top", + "Ġt op", + "Ġto p", + "Ġ free", + "Ġf ree", + "Ġfr ee", + "Ġfre e", + "A S", + "D e", + "Ġ On", + "ĠO n", + "I G", + "9 0", + "e ta", + "et a", + "D ate", + "Da te", + "Dat e", + "Ġ action", + "Ġa ction", + "Ġact ion", + "Ġac tion", + "3 4", + "O ver", + "i tor", + "it or", + "ito r", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "n ot", + "no t", + "Ġ index", + "Ġin dex", + "Ġind ex", + "Ġinde x", + "h er", + "he r", + "i con", + "ic on", + "ico n", + "O n", + "; čĊčĊ", + ";čĊ čĊ", + "iv ity", + "ivi ty", + "m and", + "man d", + "ma nd", + ". Windows", + ".W indows", + ".Window s", + "O L", + "Ġ real", + "Ġre al", + "Ġ max", + "Ġm ax", + "Ġma x", + "l and", + "la nd", + "lan d", + ". ...", + ".. ..", + "... .", + "r aph", + "ra ph", + "rap h", + "Ġ build", + "Ġb uild", + "Ġbu ild", + "l eg", + "le g", + "as sword", + "ass word", + "? ĊĊ", + "?Ċ Ċ", + "âĢ ¦", + "o ok", + "oo k", + "u ck", + "uc k", + "Ġ message", + "Ġm essage", + "Ġmess age", + "Ġmes sage", + "t est", + "te st", + "tes t", + "i vers", + "iv ers", + "ive rs", + "iver s", + "3 8", + "Ġ input", + "Ġin put", + "Ġinp ut", + "Ġ art", + "Ġa rt", + "Ġar t", + "Ġ between", + "Ġb etween", + "Ġbet ween", + "G et", + "Ge t", + "en ter", + "ent er", + "ente r", + "g round", + "gr ound", + "gro und", + "e ne", + "en e", + "à ¡", + ". length", + ".l ength", + ".len gth", + ".le ngth", + "N ode", + "No de", + "( i", + "C lass", + "Cl ass", + "Cla ss", + "f or", + "fo r", + "Ġ âĢĶ", + "ĠâĢ Ķ", + "t en", + "te n", + "o in", + "oi n", + "Ġ ke", + "Ġk e", + "u i", + "Ġ IN", + "ĠI N", + "Ġ table", + "Ġt able", + "Ġtab le", + "Ġta ble", + "s ub", + "su b", + "Ġ Le", + "ĠL e", + "Ġ head", + "Ġh ead", + "Ġhe ad", + "Ġ must", + "Ġm ust", + "Ġmus t", + "Ġmu st", + "//// ////////////", + "//////// ////////", + "//////////// ////", + ". util", + ".u til", + ".ut il", + "Cont ext", + "Con text", + "Ġ order", + "Ġor der", + "Ġord er", + "Ġ mov", + "Ġm ov", + "Ġmo v", + "o ver", + "ov er", + "ove r", + "Ġ contin", + "Ġcon tin", + "Ġcont in", + "Ġ say", + "Ġs ay", + "Ġsa y", + "st atic", + "stat ic", + "sta tic", + ". Text", + ".T ext", + ".Te xt", + "Ġ className", + "Ġclass Name", + "p any", + "pan y", + "pa ny", + "Ġ ter", + "Ġt er", + "Ġte r", + "h ead", + "he ad", + "hea d", + "r g", + "Ġ product", + "Ġpro duct", + "Ġprodu ct", + "Ġprod uct", + "T his", + "Th is", + ". âĢĿ", + "Ġ But", + "ĠB ut", + "ĠBu t", + "7 0", + "l oy", + "lo y", + "Ġ double", + "Ġd ouble", + "Ġdo uble", + "Ġdoub le", + "Ġdou ble", + "s g", + "Ġ place", + "Ġp lace", + "Ġpl ace", + "Ġplac e", + "Ġpla ce", + ". x", + "m essage", + "mes sage", + "mess age", + "Ġ information", + "Ġin formation", + "Ġinform ation", + "Ġinformat ion", + "pr ivate", + "priv ate", + "Ġ oper", + "Ġo per", + "Ġop er", + "c ed", + "ce d", + "d b", + "\" > < /", + "P aram", + "Par am", + "Pa ram", + "Para m", + "i cle", + "ic le", + "icl e", + "Ġ week", + "Ġwe ek", + "Ġwee k", + "Ġ prop", + "Ġp rop", + "Ġpro p", + "Ġpr op", + "t able", + "ta ble", + "tab le", + "tabl e", + "id get", + "idge t", + "p lace", + "pl ace", + "pla ce", + "P rop", + "Pro p", + "Pr op", + "Ġ All", + "ĠA ll", + "ĠAl l", + "e ls", + "el s", + "b ox", + "bo x", + ". ĊĊĊĊ", + ".ĊĊ ĊĊ", + ".Ċ ĊĊĊ", + ".ĊĊĊ Ċ", + ". R", + "Ġ To", + "ĠT o", + "i ter", + "it er", + "ite r", + "S h", + "u ration", + "ur ation", + "ura tion", + "urat ion", + "o lder", + "ol der", + "old er", + "_ list", + "_l ist", + "_li st", + "c ome", + "com e", + "co me", + "Ġ sw", + "Ġs w", + "iz ation", + "iza tion", + "ĉ for", + "ĉf or", + "b l", + "Ġ program", + "Ġp rogram", + "Ġpro gram", + "Ġpr ogram", + "Ġprog ram", + "( e", + "a pe", + "ap e", + "c heck", + "ch eck", + "che ck", + ". Forms", + ".Form s", + ".For ms", + "Ġ und", + "Ġu nd", + "Ġun d", + "ateg ory", + "ategor y", + "atego ry", + "7 5", + "a gs", + "ag s", + "Ġ response", + "Ġres ponse", + "Ġrespons e", + "Ġresp onse", + "U S", + "re quest", + "req uest", + "requ est", + "Ġ struct", + "Ġstr uct", + "Ġstru ct", + "e scription", + "es cription", + "Ġ code", + "Ġc ode", + "Ġco de", + "Ġcod e", + "_ H", + "u ffer", + "uff er", + "uf fer", + "Ġ without", + "Ġwith out", + "lo bal", + "lob al", + "M anager", + "Man ager", + "Manage r", + "Mana ger", + "il ter", + "ilt er", + "P O", + "ĉ this", + "ĉt his", + "ĉth is", + "o ption", + "op tion", + "opt ion", + "Ġ sol", + "Ġs ol", + "Ġso l", + "Ġ ===", + "Ġ= ==", + "Ġ== =", + "a kes", + "ak es", + "ake s", + "Cont roller", + "Control ler", + "Contr oller", + "4 4", + "M essage", + "Mes sage", + "Mess age", + "Ġ ref", + "Ġre f", + "Ġr ef", + "e ver", + "ev er", + "eve r", + "Ġ So", + "ĠS o", + "a ining", + "ain ing", + "ai ning", + ". append", + ".app end", + ".ap pend", + "Ġ still", + "Ġst ill", + "Ġstil l", + "Ġpro vid", + "Ġpr ovid", + "Ġprov id", + "Ġ assert", + "Ġas sert", + "Ġass ert", + "m ed", + "me d", + "Ġ cap", + "Ġc ap", + "Ġca p", + "us iness", + "usi ness", + "Ġ rep", + "Ġre p", + "Ġr ep", + "t ings", + "ting s", + "tin gs", + "v ed", + "ve d", + ". N", + "a pi", + "ap i", + "O D", + "Ġ field", + "Ġf ield", + "Ġfi eld", + "Ġfie ld", + "i ven", + "iv en", + "ive n", + "o to", + "ot o", + "âĢ ľ", + "c ol", + "co l", + "( x", + "g ht", + "gh t", + "Res ult", + "C ode", + "Co de", + "Cod e", + ". is", + ".i s", + "l ink", + "li nk", + "lin k", + "Ġ cour", + "Ġc our", + "Ġco ur", + "Ġcou r", + "A n", + "Ġ team", + "Ġt eam", + "Ġte am", + "Ġtea m", + "ĉ int", + "ĉi nt", + "ĉin t", + "i ft", + "if t", + "5 5", + "Ġ second", + "Ġse cond", + "Ġsec ond", + "Ġ going", + "Ġgo ing", + "Ġ range", + "Ġr ange", + "Ġran ge", + "Ġra nge", + "Ġrang e", + "_ E", + "n ess", + "ne ss", + "nes s", + "3 9", + "Ġf am", + "Ġfa m", + "Ġ nil", + "Ġn il", + "Ġni l", + "Ġ Cont", + "ĠC ont", + "ĠCon t", + "ĠCo nt", + "ail able", + "u tes", + "ut es", + "ute s", + "a tab", + "at ab", + "ata b", + "Ġ fact", + "Ġf act", + "Ġfa ct", + "Ġfac t", + "Ġ vis", + "Ġv is", + "Ġvi s", + "( &", + "Ġ AN", + "ĠA N", + "3 1", + "A l", + "t itle", + "ti tle", + "tit le", + "Ġ android", + "Ġand roid", + "C E", + "\\ \"", + "i rt", + "ir t", + "Ġw rit", + "Ġwr it", + "Ð ½", + "ĉ m", + "ft ware", + "o nd", + "on d", + "Ġ ret", + "Ġre t", + "Ġr et", + "os ition", + "osi tion", + "osit ion", + "Ġ home", + "Ġh ome", + "Ġhom e", + "Ġho me", + "Ġ left", + "Ġl eft", + "Ġle ft", + "ar gs", + "arg s", + "m eric", + "mer ic", + "me ric", + "4 8", + "Ġ direct", + "Ġd irect", + "Ġdi rect", + "Ġdir ect", + "Ġdire ct", + "o ci", + "oc i", + "P l", + "A s", + "r et", + "re t", + "a do", + "ad o", + "O f", + "c hn", + "ch n", + "Ġ Get", + "ĠG et", + "ĠGe t", + "e e", + "r oss", + "ro ss", + "ros s", + "( );", + "() ;", + "_ ___", + "__ __", + "___ _", + ". ph", + ".p h", + "I t", + "o ute", + "ou te", + "out e", + "Ġex per", + "Ġexp er", + "ch ool", + "cho ol", + "w ww", + "ww w", + "} ,", + "Ġ allow", + "Ġal low", + "Ġall ow", + "Ġallo w", + "Ġ Â", + "( ))", + "() )", + "s ize", + "si ze", + "siz e", + "i sm", + "is m", + "a i", + "t ract", + "tr act", + "tra ct", + "a ne", + "an e", + ". ..ĊĊ", + ".. .ĊĊ", + "... ĊĊ", + "...Ċ Ċ", + "con text", + "cont ext", + "conte xt", + "Ġ beg", + "Ġb eg", + "Ġbe g", + "C H", + "Ġ page", + "Ġp age", + "Ġpa ge", + "Ġpag e", + "h ip", + "hi p", + "n o", + "c ore", + "co re", + "cor e", + "s p", + "Ġ different", + "Ġd ifferent", + "Ġdiffer ent", + "i able", + "ia ble", + "Ġ Me", + "ĠM e", + "_ IN", + "_I N", + "b utton", + "but ton", + "butt on", + "Ġ Is", + "ĠI s", + "erv ices", + "ervice s", + "Ġ ca", + "Ġc a", + "Ġ around", + "Ġa round", + "Ġar ound", + "Ġarou nd", + "A pp", + "Ap p", + "r ation", + "ra tion", + "rat ion", + "ratio n", + "Ġ rece", + "Ġre ce", + "Ġr ece", + "Ġrec e", + "Ġ really", + "Ġre ally", + "Ġreal ly", + "Ġ image", + "Ġi mage", + "Ġim age", + "Ġimag e", + "Ġima ge", + "Ġ target", + "Ġt arget", + "Ġtar get", + "Ġtarg et", + "Ġ dep", + "Ġd ep", + "Ġde p", + "opy right", + "t ra", + "tr a", + "i ngle", + "in gle", + "ing le", + "i tal", + "it al", + "ita l", + "L ayout", + "Ġ both", + "Ġb oth", + "Ġbo th", + "Ġbot h", + "Over ride", + "a rm", + "ar m", + "= >", + "at erial", + "ate rial", + "ater ial", + "ateria l", + "i led", + "il ed", + "ile d", + "Ġ put", + "Ġp ut", + "Ġpu t", + "Q u", + "Ñ Ģ", + "u ng", + "un g", + "m ap", + "ma p", + "ĉ ĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉ ĉ", + "Ġ level", + "Ġle vel", + "Ġlev el", + "Ġleve l", + "Com ponent", + "Comp onent", + "b ook", + "bo ok", + "boo k", + "c reen", + "cre en", + "cr een", + "_ RE", + "_R E", + "Ġ config", + "Ġcon fig", + "Ġconf ig", + "ã ģ", + "O r", + ". data", + ".d ata", + ".dat a", + ".da ta", + "Ġ document", + "Ġd ocument", + "Ġdoc ument", + "\" ,\"", + "\", \"", + "trib ute", + "u x", + "L og", + "Lo g", + "f erence", + "fer ence", + "fe rence", + "p ost", + "pos t", + "po st", + "_ e", + "Ġ local", + "Ġl ocal", + "Ġlo cal", + "Ġloc al", + "an dom", + "and om", + "ando m", + "as sert", + "ass ert", + "asse rt", + "asser t", + "V al", + "Va l", + "l ected", + "lect ed", + "lec ted", + "i na", + "in a", + "at abase", + "ata base", + "atab ase", + "A dd", + "Ad d", + "Ġ content", + "Ġc ontent", + "Ġcon tent", + "Ġcont ent", + "Ġconten t", + "Ġconte nt", + ". print", + ".p rint", + ".pr int", + "s igned", + "sign ed", + "sig ned", + "r ic", + "ri c", + ". \"ĊĊ", + ".\" ĊĊ", + ".\"Ċ Ċ", + "Ġ fa", + "Ġf a", + "! ĊĊ", + "!Ċ Ċ", + "- f", + "i ved", + "iv ed", + "ive d", + "Ġ quest", + "Ġqu est", + "Ġque st", + "Ġq uest", + "Ġques t", + ". ex", + ".e x", + "Ġ float", + "Ġf loat", + "Ġflo at", + "Ġ develop", + "Ġde velop", + "Ġdev elop", + "Ġdeve lop", + "Ġdevel op", + "о Ð", + "M ap", + "Ma p", + "a ding", + "ad ing", + "adi ng", + "adin g", + "Ġ poss", + "Ġp oss", + "Ġpos s", + "Ġpo ss", + "U E", + "n amespace", + "name space", + "names pace", + "_ O", + "ĉ b", + ". Get", + ".G et", + ".Ge t", + "> (", + "j son", + "js on", + "e tails", + "et ails", + "etail s", + "eta ils", + "6 6", + "Ġ too", + "Ġt oo", + "Ġto o", + "Ġ extends", + "Ġext ends", + "Ġextend s", + "Ġ None", + "ĠN one", + "ĠNo ne", + "ĠNon e", + "Ġ fore", + "Ġf ore", + "Ġfor e", + "Ġfo re", + "( String", + "(S tring", + "(Str ing", + "form at", + "for mat", + "forma t", + "Ġ great", + "Ġg reat", + "Ġgr eat", + "Ġgre at", + "in ter", + "int er", + "inte r", + "c ale", + "ca le", + "cal e", + "Ñ ģ", + "r on", + "ro n", + "i ving", + "iv ing", + "ivi ng", + "E nt", + "En t", + "e ncy", + "en cy", + "enc y", + "x t", + "o y", + "0 5", + "Ġ month", + "Ġm onth", + "Ġmon th", + "Ġmo nth", + "Ġmont h", + "Ġh app", + "Ġha pp", + "Ġhap p", + "Ġ super", + "Ġs uper", + "Ġsu per", + "Ġsup er", + "b ar", + "ba r", + "d efault", + "de fault", + "def ault", + "_ de", + "_d e", + "or ds", + "ord s", + "l n", + "( {Ċ", + "({ Ċ", + "Ġ Ind", + "ĠI nd", + "ĠIn d", + "a ses", + "as es", + "ase s", + "Ġ title", + "Ġt itle", + "Ġtit le", + "Ġti tle", + "Ġ context", + "Ġcon text", + "Ġcont ext", + "Ġconte xt", + "0 8", + "o h", + "- p", + "E m", + "Ġ met", + "Ġm et", + "Ġme t", + "T est", + "Te st", + "Tes t", + "Ġ life", + "Ġl ife", + "Ġli fe", + "Ġlif e", + "_ v", + "Ġ US", + "ĠU S", + "U I", + "o cation", + "oc ation", + "oca tion", + "m d", + "Ġ [Ċ", + "Ġ[ Ċ", + "Ġ ]", + "s w", + "Ġ incre", + "Ġin cre", + "Ġinc re", + "Ġincr e", + "s cript", + "scri pt", + "scr ipt", + "ent ial", + "enti al", + "w ays", + "way s", + "wa ys", + ". de", + ".d e", + "Ġ src", + "Ġs rc", + "Ġsr c", + "Ġ catch", + "Ġc atch", + "Ġcat ch", + "Ġ Americ", + "ĠA meric", + "ĠAm eric", + "ĠAmer ic", + "/ /Ċ", + "// Ċ", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "Ġ pay", + "Ġp ay", + "Ġpa y", + "p lit", + "pl it", + "âĢ Ķ", + "Ġc oun", + "Ġco un", + "Ġcou n", + "o bj", + "ob j", + ". php", + ".p hp", + ".ph p", + "Ġ change", + "Ġch ange", + "Ġchang e", + "Ġcha nge", + "Ġchan ge", + "e thing", + "eth ing", + "' re", + "'r e", + "a ster", + "as ter", + "ast er", + "aste r", + "l os", + "lo s", + "l ation", + "la tion", + "lat ion", + "Ġ ĠĊ", + "ĠĠ Ċ", + "L e", + "à ¤", + "( {", + "re ady", + "read y", + "rea dy", + "Ġ No", + "ĠN o", + "Ġ position", + "Ġp osition", + "Ġpos ition", + "Ġposit ion", + "Ġposi tion", + "Ġ old", + "Ġo ld", + "Ġol d", + "Ġ book", + "Ġb ook", + "Ġbo ok", + "Ġboo k", + "a bled", + "ab led", + "able d", + "abl ed", + "b ug", + "bu g", + "2 02", + "20 2", + "H and", + "Ha nd", + "Han d", + "} ;ĊĊ", + "};Ċ Ċ", + "}; ĊĊ", + "is play", + "isp lay", + "a ving", + "av ing", + "avi ng", + "avin g", + "0 4", + "Ġg over", + "Ġgo ver", + "Ġgov er", + "Ġ version", + "Ġv ersion", + "Ġvers ion", + "S ystem", + "Sys tem", + "Sy stem", + "n ect", + "ne ct", + "res ponse", + "resp onse", + "respons e", + "St yle", + "U p", + "an gu", + "ang u", + "Ġ three", + "Ġth ree", + "Ġthr ee", + "i nit", + "in it", + "ini t", + "e ro", + "er o", + "Ġ law", + "Ġl aw", + "Ġla w", + "en dif", + "end if", + "endi f", + "Ġ base", + "Ġb ase", + "Ġbas e", + "Ġba se", + "e mail", + "em ail", + "ema il", + "( l", + "_ V", + "Ġ conf", + "Ġcon f", + "Ġco nf", + "A TE", + "AT E", + "Ġ during", + "Ġd uring", + "Ġdu ring", + "Ġdur ing", + "t es", + "te s", + "Ġ console", + "Ġcon sole", + "Ġcons ole", + "Ġ Pr", + "ĠP r", + "Ġ spe", + "Ġs pe", + "Ġsp e", + "v es", + "ve s", + "6 5", + "p ath", + "pat h", + "pa th", + "i alog", + "ial og", + "ia log", + "d ition", + "di tion", + "dit ion", + "_ to", + "_t o", + "ar ds", + "ard s", + "Ġ against", + "Ġagain st", + "et work", + "Ġ Ph", + "ĠP h", + "_ L", + "c ur", + "cu r", + "i mit", + "im it", + "imi t", + "W ith", + "Wi th", + "Ġ power", + "Ġp ower", + "Ġpo wer", + "Ġpow er", + "i um", + "iu m", + "' ;ĊĊ", + "';Ċ Ċ", + "'; ĊĊ", + "Ġw om", + "Ġwo m", + "l eft", + "le ft", + "lef t", + "our ces", + "ource s", + "a tri", + "at ri", + "atr i", + "Ġ Im", + "ĠI m", + "Ġ Man", + "ĠM an", + "ĠMa n", + "or th", + "ort h", + "$ {", + "8 8", + "qu als", + "qual s", + "qua ls", + "e se", + "es e", + "_ size", + "_s ize", + "_si ze", + "Ġ iss", + "Ġis s", + "Ġi ss", + "o tal", + "ot al", + "ota l", + "- g", + "i que", + "iqu e", + "iq ue", + "r ame", + "ra me", + "ram e", + "Ġ width", + "Ġw idth", + "Ġwid th", + "e rg", + "er g", + ") (", + "it tle", + "itt le", + "T R", + "Ġ They", + "ĠT hey", + "ĠThe y", + "ĠTh ey", + "e nces", + "en ces", + "ence s", + "enc es", + "0 2", + "r l", + "o ns", + "on s", + "Ġ label", + "Ġl abel", + "Ġla bel", + "Ġlab el", + ". y", + "- t", + "up date", + "upd ate", + "a nel", + "an el", + "ane l", + "s c", + ". to", + ".t o", + "Ġ project", + "Ġpro ject", + "Ġproj ect", + "Ġproje ct", + "à ¼", + "Ġ element", + "Ġe lement", + "Ġel ement", + "Ġele ment", + "Ġelem ent", + "Ġ success", + "Ġs uccess", + "Ġsu ccess", + "Ġsuc cess", + "Ġsucc ess", + "Ġsucces s", + "ĉ ĉĊ", + "ĉĉ Ċ", + ". sh", + ".s h", + "r am", + "ra m", + "c hed", + "ch ed", + "che d", + "( ))Ċ", + "() )Ċ", + "()) Ċ", + "Ġ (Ċ", + "Ġ( Ċ", + "Ġ date", + "Ġd ate", + "Ġda te", + "Ġdat e", + "Ġ tot", + "Ġt ot", + "Ġto t", + "_ ST", + "_S T", + "A ll", + "Al l", + "if ication", + "ific ation", + "ifi cation", + "ifica tion", + "ĉ var", + "ĉv ar", + "ĉva r", + "Ġ tri", + "Ġt ri", + "Ġtr i", + "c hem", + "ch em", + "che m", + "m y", + "Ġ big", + "Ġb ig", + "Ġbi g", + "Ġ Ad", + "ĠA d", + "Ġ At", + "ĠA t", + "o ts", + "ot s", + "n um", + "nu m", + "A ct", + "Ac t", + "Ġ map", + "Ġm ap", + "Ġma p", + "e ra", + "er a", + "c ope", + "co pe", + "cop e", + ". $", + ", âĢĿ", + "Ġ pop", + "Ġp op", + "Ġpo p", + "Ġ few", + "Ġf ew", + "Ġfe w", + "Ġ len", + "Ġl en", + "Ġle n", + "u id", + "ui d", + "e ters", + "et ers", + "eter s", + "ete rs", + "u les", + "ul es", + "ule s", + "à Ń", + "s ource", + "ht tps", + "http s", + "htt ps", + "Ġ dem", + "Ġd em", + "Ġde m", + "Ġ ear", + "Ġe ar", + "Ġea r", + "#### ############", + "######## ########", + "############ ####", + "Ġ match", + "Ġm atch", + "Ġmat ch", + "o ries", + "or ies", + "ori es", + "orie s", + "4 9", + "a ces", + "ace s", + "ac es", + "Ġ Cl", + "ĠC l", + "Ġ node", + "Ġn ode", + "Ġno de", + "Ġnod e", + "7 8", + "i rc", + "ir c", + "l ocal", + "lo cal", + "loc al", + "un ity", + "unit y", + "uni ty", + "} ;Ċ", + "}; Ċ", + "Ġ another", + "Ġan other", + "Ġano ther", + "< <", + "o gle", + "og le", + "ogl e", + "Ġ sit", + "Ġs it", + "Ġsi t", + "e work", + "ew ork", + "T E", + ". I", + "N S", + "o logy", + "ol ogy", + "olog y", + "olo gy", + "o ught", + "ou ght", + "ough t", + "oug ht", + ". Cont", + ".C ont", + ".Con t", + ".Co nt", + "> >", + "Ġ care", + "Ġc are", + "Ġcar e", + "Ġca re", + "st ate", + "stat e", + "sta te", + "ĉ private", + "ĉpr ivate", + "ĉpriv ate", + "Ġ effect", + "Ġe ffect", + "Ġeff ect", + "Ġef fect", + "+ +)", + "++ )", + "_ file", + "_f ile", + "_fil e", + "en ding", + "end ing", + "endi ng", + "L ine", + "Li ne", + "Lin e", + "F or", + "Fo r", + "i or", + "io r", + "Ġ Sc", + "ĠS c", + "Ġ fun", + "Ġf un", + "Ġfu n", + ". Size", + ".S ize", + "ĉ else", + "ĉe lse", + "ĉel se", + "] )", + "st art", + "star t", + "sta rt", + "v ious", + "vi ous", + "vio us", + "Ġ },", + "Ġ} ,", + "o urs", + "ou rs", + "our s", + "Ġ leg", + "Ġl eg", + "Ġle g", + "Ġ service", + "Ġs ervice", + "Ġser vice", + "Ġserv ice", + "Ġservi ce", + "Ġservic e", + "Ġ since", + "Ġs ince", + "Ġsi nce", + "Ġsin ce", + "Ġsinc e", + "i ron", + "ir on", + "iro n", + "L abel", + "La bel", + "Lab el", + "Ġ non", + "Ġn on", + "Ġno n", + "Ġ los", + "Ġl os", + "Ġlo s", + "i ction", + "ic tion", + "ict ion", + "Ġ full", + "Ġf ull", + "Ġful l", + "Ġfu ll", + "a cter", + "act er", + "ac ter", + "b oard", + "bo ard", + "boa rd", + "g ress", + "gr ess", + "gre ss", + "gres s", + "Ġ turn", + "Ġt urn", + "Ġtu rn", + "Ġtur n", + "i ther", + "it her", + "ith er", + "ithe r", + "0 9", + ". size", + ".s ize", + ".si ze", + "Ġ body", + "Ġb ody", + "Ġbo dy", + "Ġbod y", + "r esh", + "re sh", + "res h", + "e turn", + "et urn", + "etur n", + "etu rn", + "1 99", + "19 9", + "( _", + "y les", + "yle s", + "yl es", + "or mal", + "orm al", + "p i", + "Ġ something", + "Ġs omething", + "Ġsome thing", + "Ġsom ething", + "! --", + "u int", + "ui nt", + "uin t", + "Ġ produ", + "Ġp rodu", + "Ġpro du", + "Ġpr odu", + "Ġprod u", + "Ġ stand", + "Ġst and", + "Ġsta nd", + "Ġstan d", + "Ġpro ble", + "Ġpr oble", + "Ġprob le", + "Ġprobl e", + "Ġ available", + "Ġa vailable", + "Ġav ailable", + "Ġavail able", + "m t", + "Ġ Bl", + "ĠB l", + "Ġ ...", + "Ġ. ..", + "Ġ.. .", + "Ġ block", + "Ġb lock", + "Ġbl ock", + "Ġblo ck", + "Ġbloc k", + "In put", + "Ġ keep", + "Ġke ep", + "C ount", + "Co unt", + "Cou nt", + "o pen", + "op en", + "ope n", + "Ġ ['", + "Ġ[ '", + "Ġ throw", + "Ġth row", + "Ġthr ow", + "Ġthro w", + "u ilder", + "uild er", + "ui lder", + "uil der", + "A ction", + "Act ion", + "Ac tion", + "Ġ things", + "Ġth ings", + "Ġthing s", + "Ġthin gs", + "Tr ue", + "Ġ url", + "Ġu rl", + "Ġur l", + "Ġ Bo", + "ĠB o", + "print f", + "Ġ red", + "Ġre d", + "Ġr ed", + "j s", + ". create", + ".c reate", + "Ġ Or", + "ĠO r", + "S tatus", + "St atus", + "Stat us", + "In stance", + "Inst ance", + "Ġ control", + "Ġc ontrol", + "Ġcont rol", + "Ġcontr ol", + "Ġcontro l", + "Ġ come", + "Ġc ome", + "Ġcom e", + "Ġco me", + "Ġ custom", + "Ġc ustom", + "Ġcust om", + "Ġcus tom", + "l ocation", + "lo cation", + "loc ation", + "0 7", + "m odel", + "mod el", + "mo del", + "mode l", + "Ġ čĊ", + "Ġč Ċ", + "Ġ source", + "Ġs ource", + "Ġsour ce", + "Ġe as", + "Ġea s", + ". out", + ".o ut", + "] ĊĊ", + "]Ċ Ċ", + "o ney", + "on ey", + "one y", + "Ġ await", + "Ġa wait", + "Ġaw ait", + "Ġp artic", + "Ġpart ic", + "Ġpar tic", + "Ġparti c", + "A P", + "ub lish", + "ubl ish", + "o des", + "od es", + "ode s", + "_ pro", + "_p ro", + "_pr o", + "p ly", + "pl y", + "r iter", + "ri ter", + "rit er", + "rite r", + "Ġ prov", + "Ġp rov", + "Ġpro v", + "Ġpr ov", + "Ġ mill", + "Ġm ill", + "Ġmil l", + "Ġmi ll", + "H T", + "] )Ċ", + "]) Ċ", + "Ġ chang", + "Ġc hang", + "Ġch ang", + "Ġcha ng", + "Ġchan g", + "Ġ ask", + "Ġa sk", + "Ġas k", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "Ġ output", + "Ġout put", + "Ġ email", + "Ġe mail", + "Ġem ail", + "6 8", + ". push", + ".p ush", + "Ġ }čĊčĊ", + "Ġ} čĊčĊ", + "Ġ}čĊ čĊ", + "i nation", + "in ation", + "ina tion", + "inati on", + "4 7", + "at rix", + "atri x", + "atr ix", + "T able", + "Tab le", + "Ta ble", + "u ccess", + "uc cess", + "ucc ess", + "] );Ċ", + "]) ;Ċ", + "]); Ċ", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ disc", + "Ġd isc", + "Ġdis c", + "Ġdi sc", + "( [", + "Ġ business", + "Ġb usiness", + "Ġbus iness", + "h eight", + "he ight", + "hei ght", + ". html", + ".h tml", + ".ht ml", + ".htm l", + "t a", + "f ield", + "fi eld", + "Ġ required", + "Ġre quired", + "Ġrequire d", + "Ġrequ ired", + "_ R", + "Ġg overn", + "Ġgo vern", + "Ġgover n", + "Ġgov ern", + "} čĊčĊ", + "}čĊ čĊ", + "l ex", + "le x", + "5 00", + "50 0", + ". ,", + "Ġ Set", + "ĠS et", + "ĠSe t", + "u rch", + "ur ch", + "/ //", + "// /", + "t s", + "a f", + "Ġ might", + "Ġm ight", + "Ġmi ght", + "Ġmig ht", + "i story", + "ist ory", + "istor y", + "isto ry", + "S tr", + "St r", + "Ġ never", + "Ġn ever", + "Ġne ver", + "Ġnev er", + "Res ponse", + "Resp onse", + "Respons e", + "ar se", + "ars e", + "a da", + "ad a", + "Ġ How", + "ĠH ow", + "ĠHo w", + "Ġ *)", + "Ġ* )", + "Ġ ;", + "Ġ hard", + "Ġh ard", + "Ġhar d", + "Ġha rd", + "A d", + "Ġ intern", + "Ġin tern", + "Ġint ern", + "Ġinter n", + "Ġinte rn", + "u sed", + "us ed", + "use d", + "( data", + "(d ata", + "(dat a", + "(da ta", + "m od", + "mo d", + "an nel", + "ann el", + "anne l", + "Ġ np", + "Ġn p", + "u gg", + "ug g", + "Ġ />Ċ", + "Ġ/ >Ċ", + "Ġ/> Ċ", + "Ġ called", + "Ġc alled", + "Ġcall ed", + "Ġcal led", + "Ġcalle d", + "b ody", + "bo dy", + "Ġ cho", + "Ġc ho", + "Ġch o", + "( r", + "_ set", + "_s et", + "_se t", + "i rd", + "ir d", + "Ġ >=", + "Ġ> =", + "Ġ };Ċ", + "Ġ} ;Ċ", + "Ġ}; Ċ", + "Ġ options", + "Ġo ptions", + "Ġoption s", + "Ġopt ions", + "Ġ Gener", + "ĠG ener", + "ĠGe ner", + "ĠGen er", + "ĠGene r", + "Ġ height", + "Ġh eight", + "Ġhe ight", + "Ġhei ght", + "P oint", + "Po int", + "Y ou", + "Yo u", + "e ty", + "et y", + "C lick", + "Cl ick", + "Cli ck", + "Ġ small", + "Ġs mall", + "Ġsm all", + "Ġ ide", + "Ġi de", + "Ġid e", + "Ġ access", + "Ġa ccess", + "Ġacc ess", + "Ġac cess", + "Ġacces s", + "angu age", + "Ġ protected", + "Ġprot ected", + "Ġprotect ed", + "Ġ job", + "Ġj ob", + "Ġjo b", + "Ġ There", + "ĠT here", + "ĠThe re", + "ĠTh ere", + "ĠTher e", + "D ef", + "De f", + "Ġ address", + "Ġadd ress", + "Ġad dress", + "Ġaddr ess", + "Ġ uint", + "Ġu int", + "Ġui nt", + "N ot", + "No t", + "o o", + "a ps", + "ap s", + "< div", + "", + "() ->", + "()- >", + "ĉ ĠĠĠ", + "ĉĠ ĠĠ", + "ĉĠĠ Ġ", + "\" ))", + "\") )", + "C ontent", + "Cont ent", + "Con tent", + "_ W", + "p lement", + "pl ement", + "ple ment", + "Ġ won", + "Ġw on", + "Ġwo n", + "Ġ video", + "Ġv ideo", + "Ġvi deo", + "Ġvid eo", + "Ġvide o", + "a di", + "ad i", + "p oint", + "po int", + "poi nt", + "% %", + "0 3", + "Ġ gl", + "Ġg l", + "er ved", + "erv ed", + "erve d", + "v iron", + "vi ron", + "vir on", + "I F", + "u ted", + "ut ed", + "ute d", + "ã ĥ", + "' m", + "Ġ cert", + "Ġc ert", + "Ġce rt", + "Ġcer t", + "Ġ prof", + "Ġp rof", + "Ġpro f", + "Ġpr of", + "Ġ cell", + "Ġc ell", + "Ġce ll", + "Ġcel l", + "a ri", + "ar i", + "Ġ player", + "Ġp layer", + "Ġpl ayer", + "Ġplay er", + "Ġpla yer", + "a is", + "ai s", + "Ġ cost", + "Ġc ost", + "Ġco st", + "Ġcos t", + "Ġ hum", + "Ġh um", + "Ġhu m", + "( R", + "Ġo ffic", + "Ġof fic", + "Ġoff ic", + "k s", + ". text", + ".t ext", + ".te xt", + ".tex t", + "a tures", + "at ures", + "ature s", + "atur es", + "atu res", + "Ġ total", + "Ġt otal", + "Ġto tal", + "Ġtot al", + "Ġ */ĊĊ", + "Ġ* /ĊĊ", + "Ġ*/ ĊĊ", + "Ġ*/Ċ Ċ", + "o pe", + "op e", + "Ġ stat", + "Ġs tat", + "Ġst at", + "Ġsta t", + "U M", + "Ġ load", + "Ġl oad", + "Ġlo ad", + "Ġloa d", + "ight s", + "igh ts", + "Ġ clear", + "Ġc lear", + "Ġcl ear", + "Ġcle ar", + "u ro", + "ur o", + "Ġ techn", + "Ġt echn", + "Ġte chn", + "Ġtech n", + "Ġtec hn", + "up port", + "upp ort", + "I R", + "Ġ row", + "Ġr ow", + "Ġro w", + "Ġse em", + "Ġsee m", + "Ġ q", + "Ġ short", + "Ġs hort", + "Ġsh ort", + "Ġsho rt", + "Ġ Not", + "ĠN ot", + "ĠNo t", + "i pp", + "ip p", + "G roup", + "Gr oup", + "Gro up", + "s ection", + "se ction", + "sec tion", + "sect ion", + "m ax", + "ma x", + "i rl", + "ir l", + "Ġ override", + "Ġover ride", + "Ġ company", + "Ġcom pany", + "Ġcomp any", + "Ġcompan y", + "Ġ done", + "Ġd one", + "Ġdo ne", + "Ġdon e", + "\" );čĊ", + "\") ;čĊ", + "\"); čĊ", + "Ġ gre", + "Ġg re", + "Ġgr e", + ". Re", + ".R e", + "Ġ belie", + "Ġbe lie", + "Ġbel ie", + "r ist", + "ri st", + "ris t", + "Ġ health", + "Ġhe alth", + "Ġheal th", + "A NT", + "AN T", + "( )ĊĊ", + "() ĊĊ", + "()Ċ Ċ", + "Ġ Be", + "ĠB e", + ". value", + ".v alue", + ".val ue", + ".va lue", + "Ġ Gr", + "ĠG r", + "ot tom", + "ott om", + "otto m", + "Ġ args", + "Ġar gs", + "Ġarg s", + "P T", + "s tatus", + "st atus", + "stat us", + "f unc", + "fun c", + "fu nc", + "u ments", + "um ents", + "ument s", + "ume nts", + "umen ts", + "- h", + "N umber", + "Num ber", + ": čĊ", + "Ġ Log", + "ĠL og", + "ĠLo g", + "er ver", + "erv er", + "erve r", + "Ġ ),Ċ", + "Ġ) ,Ċ", + "Ġ), Ċ", + "a ment", + "am ent", + "ame nt", + "amen t", + "Ġ obj", + "Ġo bj", + "Ġob j", + "i nc", + "in c", + "Ġ children", + "Ġch ildren", + "Ġchild ren", + "i cy", + "ic y", + "I Z", + "a nds", + "an ds", + "and s", + "ab ly", + "abl y", + "Ġd istrib", + "Ġdis trib", + "Ġdist rib", + "Ġdistr ib", + "Ġ cur", + "Ġc ur", + "Ġcu r", + "e rial", + "er ial", + "eri al", + "eria l", + "Ġ days", + "Ġd ays", + "Ġday s", + "Ġda ys", + "r eated", + "re ated", + "reate d", + "reat ed", + "rea ted", + "r ect", + "re ct", + "rec t", + "- l", + "i rm", + "ir m", + "i dden", + "id den", + "idd en", + "o mb", + "om b", + "Ġ initial", + "Ġin itial", + "Ġinit ial", + "Ġiniti al", + ". js", + ".j s", + "Ġ â", + "Qu ery", + "Que ry", + "Ġ online", + "Ġon line", + "i mal", + "im al", + "ima l", + ". con", + ".c on", + ".co n", + "a u", + "U rl", + "Ur l", + "c ontrol", + "cont rol", + "contr ol", + "contro l", + "i rection", + "ir ection", + "ire ction", + "irect ion", + "Ġ instance", + "Ġin stance", + "Ġinst ance", + "O RT", + "OR T", + "Ġ Fr", + "ĠF r", + "w here", + "wh ere", + "Ġ javax", + "Ġj avax", + "Ġjav ax", + "Ġjava x", + "Ġ organ", + "Ġo rgan", + "Ġor gan", + "Ġorg an", + "a pter", + "ap ter", + "apt er", + "Ġ reason", + "Ġre ason", + "o ptions", + "option s", + "opt ions", + "5 9", + "Ġ Mar", + "ĠM ar", + "ĠMa r", + "( a", + "Ġ within", + "Ġwith in", + "Ġwi thin", + "Ġwit hin", + ". âĢĿĊĊ", + ".âĢĿ ĊĊ", + ".âĢĿĊ Ċ", + "O DE", + "OD E", + "_ DE", + "_D E", + "ad min", + "adm in", + "en ded", + "end ed", + "ende d", + "Ġ design", + "Ġd esign", + "Ġde sign", + "Ġdes ign", + "Ġdesi gn", + "Ġ Data", + "ĠD ata", + "ĠDa ta", + "ĠDat a", + "u ne", + "un e", + "Ġ File", + "ĠF ile", + "ĠFil e", + "ĠFi le", + "r oot", + "ro ot", + "Ġ cent", + "Ġc ent", + "Ġce nt", + "Ġcen t", + "Ġ arr", + "Ġa rr", + "Ġar r", + "_ add", + "_a dd", + "_ad d", + "l en", + "le n", + "p age", + "pa ge", + "pag e", + ", '", + "_ str", + "_s tr", + "_st r", + "Ġ bro", + "Ġb ro", + "Ġbr o", + "ab ility", + "abil ity", + "abilit y", + "o uth", + "ou th", + "out h", + "5 8", + "/ c", + "p ose", + "pos e", + "po se", + "ir tual", + "irt ual", + "e arch", + "ear ch", + "ea rch", + "_ url", + "_u rl", + "_ur l", + "ar gin", + "arg in", + "H ttp", + "Ġ school", + "Ġs chool", + "Ġsch ool", + "Ġscho ol", + "a va", + "av a", + "Ġ consider", + "Ġcons ider", + "Ġconsid er", + ". label", + ".l abel", + ".lab el", + "Ġ Array", + "ĠA rray", + "ĠAr ray", + "ĠArr ay", + "4 2", + "w eb", + "we b", + "o pt", + "op t", + ". println", + ".print ln", + "u lation", + "ul ation", + "ula tion", + "Ġ func", + "Ġf unc", + "Ġfun c", + "Ġfu nc", + "P L", + "Ġ \"\\", + "Ġ\" \\", + "Ġ Text", + "ĠT ext", + "ĠTe xt", + "ĠTex t", + "act ory", + "actor y", + "( function", + "(f unction", + "(func tion", + "(fun ction", + "n ull", + "nu ll", + "nul l", + "Ġ eng", + "Ġe ng", + "Ġen g", + "d own", + "do wn", + "Ġ include", + "Ġin clude", + "Ġinclud e", + "Ġinc lude", + "Ġincl ude", + "Ġinclu de", + "Ġ En", + "ĠE n", + "Ġ Dr", + "ĠD r", + "Ġ db", + "Ġd b", + "! !", + "s ide", + "si de", + "sid e", + "Ġ init", + "Ġin it", + "Ġi nit", + "Ġini t", + "qu ired", + "quire d", + "quir ed", + "qui red", + "Ġ She", + "ĠS he", + "ĠSh e", + "C olumn", + "Col umn", + "re act", + "rea ct", + "Ġ ann", + "Ġa nn", + "Ġan n", + "Ġ stop", + "Ġs top", + "Ġst op", + "Ġsto p", + "Ġ later", + "Ġl ater", + "Ġla ter", + "Ġlate r", + "Ġlat er", + "Ġ That", + "ĠT hat", + "ĠTh at", + "en tion", + "ent ion", + "enti on", + "d f", + "U G", + "I LE", + "IL E", + "Ġ client", + "Ġc lient", + "Ġcl ient", + "Ġcli ent", + "r aft", + "ra ft", + "raf t", + "f fer", + "ff er", + "ffe r", + "P OST", + "PO ST", + "POS T", + "el per", + "elp er", + "Ġ love", + "Ġl ove", + "Ġlo ve", + "Ġlov e", + "qu ote", + "quot e", + "quo te", + "o ud", + "ou d", + "Ġ json", + "Ġj son", + "Ġjs on", + "Ġ able", + "Ġa ble", + "Ġab le", + "Ġabl e", + "Ġ men", + "Ġm en", + "Ġme n", + "A X", + "Ġ Copyright", + "ĠC opyright", + "ĠCopy right", + "à ¶", + "a vig", + "av ig", + "avi g", + "r eq", + "re q", + "C lient", + "Cl ient", + "Cli ent", + "} );Ċ", + "}) ;Ċ", + "}); Ċ", + ". Com", + ".C om", + ".Co m", + "e rc", + "er c", + "i lt", + "il t", + "p ecial", + "pe cial", + "pec ial", + "pecia l", + "_ com", + "_c om", + "_co m", + "r oom", + "ro om", + ". Name", + ".N ame", + "Ġ give", + "Ġg ive", + "Ġgi ve", + "a mb", + "am b", + "i ke", + "ik e", + "Ġ condition", + "Ġcon dition", + "Ġcond ition", + "Ġcondi tion", + "c lient", + "cl ient", + "cli ent", + "a tors", + "at ors", + "ator s", + "ato rs", + ": \"", + "Ġ copy", + "Ġc opy", + "Ġco py", + "Ġcop y", + "u ture", + "ut ure", + "ivers ity", + "iversit y", + "er nal", + "ern al", + "erna l", + "{ {", + "Ġ Can", + "ĠC an", + "ĠCa n", + "o unc", + "ou nc", + "oun c", + "d o", + "Ġ occ", + "Ġo cc", + "Ġoc c", + "Ġ appro", + "Ġapp ro", + "Ġap pro", + "th ers", + "ther s", + "the rs", + "z e", + "Ġ either", + "Ġe ither", + "Ġei ther", + "Ġ Fl", + "ĠF l", + "Ġ important", + "Ġimport ant", + "Ġ lead", + "Ġl ead", + "Ġle ad", + "at tr", + "att r", + "A RT", + "AR T", + "E qual", + "Equ al", + "Eq ual", + "Ġ da", + "Ġd a", + "et ch", + "etc h", + "e ntity", + "ent ity", + "enti ty", + "Ġ family", + "Ġf amily", + "Ġfam ily", + "Ġfamil y", + "ad ding", + "add ing", + "addin g", + "Ġ option", + "Ġo ption", + "Ġop tion", + "Ġopt ion", + "Ġ exist", + "Ġex ist", + "i ca", + "ic a", + "Ġ Object", + "ĠO bject", + "ĠOb ject", + "ĠObj ect", + "6 9", + "' ve", + "v ers", + "ver s", + "ve rs", + "it ional", + "ition al", + "iti onal", + "6 7", + "out put", + "Ġ True", + "ĠTr ue", + "ĠTru e", + "Ġ OF", + "ĠO F", + "_ time", + "_t ime", + "_tim e", + "_ti me", + "Ġ offer", + "Ġo ffer", + "Ġof fer", + "Ġoff er", + "Ġ });ĊĊ", + "Ġ} );ĊĊ", + "Ġ});Ċ Ċ", + "Ġ}) ;ĊĊ", + "Ġ}); ĊĊ", + "H ER", + "HE R", + "e gin", + "eg in", + "\" \"", + "Ġ water", + "Ġw ater", + "Ġwa ter", + "Ġwat er", + "Ġ che", + "Ġc he", + "Ġch e", + "Ġ My", + "ĠM y", + "o red", + "or ed", + "ore d", + "Ġ step", + "Ġs tep", + "Ġst ep", + "Ġste p", + "a nces", + "an ces", + "ance s", + "anc es", + "C K", + "A Y", + "à ¸", + "str uction", + "struct ion", + "stru ction", + "( C", + "3 00", + "30 0", + "o uch", + "ou ch", + "St ream", + "Str eam", + "act ive", + "activ e", + "a ma", + "am a", + "E ntity", + "Ent ity", + "pro duct", + "produ ct", + "prod uct", + "( ){Ċ", + "() {Ċ", + "(){ Ċ", + "Ġ government", + "Ġg overnment", + "Ġgovern ment", + "Ġ ID", + "ĠI D", + "aj or", + "ajo r", + "A nd", + "An d", + "Ġ display", + "Ġd isplay", + "Ġdis play", + "Ġdisp lay", + "Ġdispl ay", + "Ð »", + "Ġ times", + "Ġt imes", + "Ġtime s", + "Ġtim es", + "Ġti mes", + "Ġ four", + "Ġf our", + "Ġfo ur", + "Ġfou r", + "Ġ far", + "Ġf ar", + "Ġfa r", + "Ġ present", + "Ġp resent", + "Ġpre sent", + "Ġpres ent", + "Ġ NS", + "ĠN S", + "Ġ \\Ċ", + "Ġ\\ Ċ", + "u est", + "ue st", + "ues t", + "Ġ bas", + "Ġb as", + "Ġba s", + "e cho", + "ec ho", + "ech o", + "ch ild", + "chi ld", + "if ier", + "ifi er", + "ifie r", + "H andler", + "Hand ler", + "Handle r", + "Ġ lib", + "Ġl ib", + "Ġli b", + "P roperty", + "Pro perty", + "Prop erty", + "trans lation", + "Ġ room", + "Ġr oom", + "Ġro om", + "Ġ once", + "Ġo nce", + "Ġon ce", + "Ġonc e", + "Ġ []", + "Ġ[ ]", + "c enter", + "cent er", + "cen ter", + "cente r", + "================ ================", + "Ġ results", + "Ġres ults", + "Ġresult s", + "Ġ continue", + "Ġcont inue", + "Ġcontin ue", + "Ġcontinu e", + "Ġ talk", + "Ġt alk", + "Ġtal k", + "Ġta lk", + "_ get", + "_g et", + "_ge t", + "Ġ grow", + "Ġg row", + "Ġgr ow", + "Ġgro w", + ". sw", + ".s w", + "e b", + "Ġ Public", + "ĠP ublic", + "ĠPub lic", + "O P", + "ec ute", + "ecut e", + "o ls", + "ol s", + "Ġ **", + "Ġ* *", + "\" );ĊĊ", + "\");Ċ Ċ", + "\") ;ĊĊ", + "\"); ĊĊ", + "Ġ mass", + "Ġm ass", + "Ġma ss", + "Ġmas s", + "u red", + "ur ed", + "ure d", + ". class", + ".c lass", + ".cl ass", + "o mic", + "om ic", + "omi c", + "Ġ mean", + "Ġm ean", + "Ġme an", + "i ps", + "ip s", + "Ġ aut", + "Ġa ut", + "Ġau t", + ") ;čĊčĊ", + ");čĊ čĊ", + "); čĊčĊ", + "Ġ until", + "Ġun til", + "Ġunt il", + "Ġ market", + "Ġm arket", + "Ġmark et", + "Ġmar ket", + "Ġ area", + "Ġa rea", + "Ġare a", + "Ġar ea", + "u it", + "ui t", + "Ġ length", + "Ġl ength", + "Ġle ngth", + "Ġlen gth", + "Ġleng th", + "Ġ With", + "ĠW ith", + "ĠWi th", + "ĠWit h", + "str uctor", + "struct or", + "stru ctor", + "e vent", + "ev ent", + "even t", + "eve nt", + "\" ><", + "\"> <", + "Ġ Sp", + "ĠS p", + "I V", + "Ġ mus", + "Ġm us", + "Ġmu s", + "i ff", + "if f", + "Ġ kind", + "Ġk ind", + "Ġki nd", + "Ġkin d", + "a uthor", + "aut hor", + "auth or", + "o unds", + "ou nds", + "ound s", + "oun ds", + "m b", + "_ key", + "_k ey", + "_ke y", + "4 1", + "w idth", + "wid th", + "pos itory", + "posit ory", + "positor y", + "Ġ light", + "Ġl ight", + "Ġli ght", + "Ġlig ht", + "u k", + "R ow", + "Ro w", + "o hn", + "oh n", + "a lf", + "al f", + "viron ment", + "a pper", + "ap per", + "app er", + "appe r", + "ol lections", + "oll ections", + "ollection s", + "ollect ions", + "olle ctions", + "Ġ side", + "Ġs ide", + "Ġsi de", + "Ġsid e", + "_ info", + "_in fo", + "_inf o", + "Ġ example", + "Ġex ample", + "Ġexam ple", + "i mary", + "im ary", + "ima ry", + "imar y", + "Ġ wr", + "Ġw r", + "Ġ camp", + "Ġc amp", + "Ġca mp", + "Ġcam p", + "cri be", + "cr ibe", + "2 55", + "25 5", + "\" /", + "Ġ miss", + "Ġm iss", + "Ġmis s", + "Ġmi ss", + "w ay", + "wa y", + "Ġ based", + "Ġb ased", + "Ġbase d", + "Ġbas ed", + "Ġba sed", + "Ġ plan", + "Ġp lan", + "Ġpl an", + "Ġpla n", + "V is", + "Vi s", + "o main", + "om ain", + "oma in", + "u nk", + "un k", + "Ġ away", + "Ġa way", + "Ġaw ay", + "U P", + "< T", + "O S", + "i od", + "io d", + "Ġ Mon", + "ĠM on", + "ĠMo n", + "âĢĻ re", + "Ġ lik", + "Ġl ik", + "Ġli k", + "à §", + "i vely", + "iv ely", + "ive ly", + "ivel y", + ". v", + "i mer", + "im er", + "ime r", + "i zer", + "iz er", + "ize r", + "S ub", + "Su b", + "Ġ button", + "Ġb utton", + "Ġbut ton", + "Ġbutt on", + "Ġbutto n", + "Ġ Up", + "ĠU p", + "Ġ experience", + "Ġex perience", + "Ġexper ience", + "Ġexperi ence", + "C L", + "Ġ render", + "Ġre nder", + "Ġr ender", + "Ġren der", + "Ġrend er", + "_ value", + "_v alue", + "_val ue", + "_va lue", + "Ġ near", + "Ġn ear", + "Ġne ar", + "U RL", + "UR L", + "a lt", + "al t", + "Ġ country", + "Ġc ountry", + "Ġcount ry", + "Ġcoun try", + "ib ility", + "ibil ity", + "ibilit y", + "ibili ty", + "5 7", + "( ),Ċ", + "() ,Ċ", + "(), Ċ", + "e ad", + "ea d", + "Ġ author", + "Ġa uthor", + "Ġaut hor", + "Ġauth or", + "Ġ specific", + "Ġs pecific", + "Ġspec ific", + "Ġspeci fic", + "b ase", + "ba se", + "bas e", + "( name", + "(n ame", + "o nes", + "on es", + "one s", + "Ġ Do", + "ĠD o", + "Ġ along", + "Ġa long", + "Ġal ong", + "Ġalo ng", + "y ear", + "ye ar", + "Ġ express", + "Ġex press", + "Ġexp ress", + "Ġexpr ess", + "Ġexpres s", + ". '", + "e nv", + "en v", + "Ġ begin", + "Ġb egin", + "Ġbe gin", + "Ġbeg in", + "Ġ software", + "Ġs oftware", + "Ġso ftware", + "Ġsoft ware", + "Ġ imp", + "Ġi mp", + "Ġim p", + "Ġ win", + "Ġw in", + "Ġwi n", + "ó n", + "Ġ thing", + "Ġth ing", + "Ġthin g", + "Ġthi ng", + "T rans", + "Tr ans", + "Tra ns", + "Ġ THE", + "ĠT HE", + "ĠTH E", + "Ġ ", + "Ġ? >", + "Ġ den", + "Ġd en", + "Ġde n", + "ob ile", + "obi le", + "obil e", + "ch ange", + "chan ge", + "cha nge", + "chang e", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "i ci", + "ic i", + "n a", + "Ġ Form", + "ĠF orm", + "ĠFor m", + "ĠFo rm", + "Ġ sort", + "Ġs ort", + "Ġso rt", + "Ġsor t", + "S elect", + "Se lect", + "Sel ect", + "Sele ct", + "p are", + "par e", + "pa re", + "Ġ thought", + "Ġth ought", + "Ġthough t", + "Ġthou ght", + "Ġtho ught", + "_ con", + "_c on", + "_co n", + "Ġ task", + "Ġt ask", + "Ġta sk", + "Ġtas k", + "o cus", + "oc us", + "ocu s", + "Ġ DE", + "ĠD E", + "Ġ Min", + "ĠM in", + "ĠMi n", + "Ġ opt", + "Ġo pt", + "Ġop t", + "ĉ break", + "ĉb reak", + "u mer", + "um er", + "ume r", + "K E", + "t hen", + "th en", + "the n", + "Ġ det", + "Ġd et", + "Ġde t", + "Ġ Test", + "ĠT est", + "ĠTe st", + "ĠTes t", + "p orts", + "port s", + "por ts", + "po rts", + "Ġ review", + "Ġre view", + "Ġr eview", + "Ġrev iew", + "( '/", + "(' /", + "m ove", + "mo ve", + "mov e", + "Ġ switch", + "Ġs witch", + "Ġsw itch", + "E RT", + "ER T", + "p atch", + "pat ch", + "an not", + "ann ot", + "anno t", + "ã Ĥ", + "Ġ above", + "Ġa bove", + "Ġab ove", + "it ive", + "iti ve", + "5 6", + "Ġ question", + "Ġqu estion", + "Ġquest ion", + "Ġq uestion", + "Ġquesti on", + "Ġques tion", + "Ġ Qu", + "ĠQ u", + "ãĢĤ ĊĊ", + "ãĢĤĊ Ċ", + "g le", + "gl e", + "Ġ word", + "Ġw ord", + "Ġwor d", + "Ġwo rd", + "Ġ provide", + "Ġpro vide", + "Ġprovid e", + "Ġprov ide", + "Ġ Return", + "ĠR eturn", + "ĠRe turn", + "ĠRet urn", + "Ġ research", + "Ġre search", + "Ġres earch", + "ã o", + "u str", + "us tr", + "ust r", + "Ġ publish", + "Ġp ublish", + "Ġpub lish", + "Ġpubli sh", + "ch ema", + "che ma", + "chem a", + "} }", + "Ġ CON", + "ĠC ON", + "ĠCO N", + "- in", + "-i n", + "all back", + "Ġ cover", + "Ġc over", + "Ġco ver", + "Ġcov er", + "\\ \\", + "c olor", + "co lor", + "col or", + "colo r", + "Ġ IS", + "ĠI S", + "Ġ whether", + "Ġwh ether", + "Ġwhe ther", + "i mate", + "im ate", + "ima te", + "imat e", + "i sc", + "is c", + "B ar", + "Ba r", + "Ġ div", + "Ġd iv", + "Ġdi v", + "B e", + "o urn", + "ou rn", + "our n", + "Ġ having", + "Ġh aving", + "Ġha ving", + "Ġhav ing", + "l em", + "le m", + "p layer", + "pl ayer", + "play er", + "pla yer", + "a bs", + "ab s", + "am era", + "ame ra", + "amer a", + "n ey", + "ne y", + "Ġ exc", + "Ġe xc", + "Ġex c", + "g ether", + "get her", + "ge ther", + "p lied", + "pl ied", + "a o", + "[ $", + "Ġ ++", + "Ġ+ +", + "i pe", + "ip e", + "s how", + "sh ow", + "/ d", + "[ :", + "a gement", + "ag ement", + "age ment", + "agem ent", + "l ev", + "le v", + "_ ID", + "_I D", + "9 7", + "r ary", + "ra ry", + "rar y", + "a des", + "ad es", + "ade s", + "_ se", + "_s e", + "a use", + "au se", + "aus e", + "Ġ employ", + "Ġe mploy", + "Ġem ploy", + "Ġemp loy", + "Ġ */čĊ", + "Ġ* /čĊ", + "Ġ*/ čĊ", + "Ġ fre", + "Ġf re", + "Ġfr e", + "Ġ' @", + "Ġcom plet", + "Ġcomp let", + "Ġcomple t", + "Ġcompl et", + "Ġ large", + "Ġl arge", + "Ġlarg e", + "Ġlar ge", + "r al", + "ra l", + "\\ x", + "Ġ fac", + "Ġf ac", + "Ġfa c", + "< String", + ">", + "Ġ> >", + "Ġ face", + "Ġf ace", + "Ġfa ce", + "Ġfac e", + "C TION", + "CT ION", + "Ġ save", + "Ġs ave", + "Ġsa ve", + "Ġsav e", + "Ġ typ", + "Ġt yp", + "Ġty p", + "d ev", + "de v", + "( \"#", + "(\" #", + "A GE", + "AG E", + "cont ainer", + "contain er", + "e dit", + "ed it", + "edi t", + "Q L", + "Ġ items", + "Ġit ems", + "Ġi tems", + "Ġitem s", + "Ġ social", + "Ġs ocial", + "Ġso cial", + "Ġsoc ial", + "Ġsoci al", + "i en", + "ie n", + "Ġ React", + "ĠRe act", + ") .ĊĊ", + "). ĊĊ", + ").Ċ Ċ", + "Ġ mar", + "Ġm ar", + "Ġma r", + "Ġre du", + "Ġr edu", + "Ġred u", + "Ġ RE", + "ĠR E", + ". put", + ".p ut", + "Ġ major", + "Ġm ajor", + "Ġmaj or", + "C ell", + "Ce ll", + "Cel l", + "n ext", + "ne xt", + "nex t", + "Ġ expected", + "Ġex pected", + "Ġexp ected", + "Ġexpect ed", + "Ġ yet", + "Ġy et", + "Ġye t", + "Ġin div", + "Ġind iv", + "trib utes", + "tribute s", + "at is", + "ati s", + "a med", + "am ed", + "ame d", + "Ġ food", + "Ġf ood", + "Ġfo od", + "Ġfoo d", + "S ource", + "( string", + "(s tring", + "(str ing", + "(st ring", + "Ġ +Ċ", + "Ġ+ Ċ", + "i tes", + "it es", + "ite s", + "d r", + "Ġ members", + "Ġm embers", + "Ġmem bers", + "Ġmember s", + "Ġmemb ers", + "Ġ comb", + "Ġc omb", + "Ġcom b", + "Ġco mb", + "i tems", + "it ems", + "ite ms", + "item s", + "Ġ Per", + "ĠP er", + "ĠPe r", + "T H", + "= True", + "Ġ bar", + "Ġb ar", + "Ġba r", + "_ SE", + "_S E", + "c omm", + "com m", + "co mm", + "( w", + ") ĊĊĊ", + ")Ċ ĊĊ", + ")ĊĊ Ċ", + "Ġ send", + "Ġs end", + "Ġse nd", + "Ġsen d", + "Ġ inc", + "Ġin c", + "Ġi nc", + "un signed", + "uns igned", + "F A", + "Ġ params", + "Ġpar ams", + "Ġparam s", + "Ġpara ms", + "Ġpa rams", + "a pping", + "ap ping", + "app ing", + "r os", + "ro s", + "u gin", + "ug in", + "ugi n", + "f a", + "Ġ connection", + "Ġcon nection", + "Ġconn ection", + "Ġconnect ion", + "Ġ };ĊĊ", + "Ġ} ;ĊĊ", + "Ġ};Ċ Ċ", + "Ġ}; ĊĊ", + "Ġb ecome", + "Ġbe come", + "Ġbec ome", + "M ode", + "Mod e", + "Mo de", + "Ġ ev", + "Ġe v", + "Ġ diff", + "Ġd iff", + "Ġdif f", + "Ġdi ff", + "Ġ United", + "ĠUn ited", + "ĠUnit ed", + "ĠUni ted", + "H eight", + "He ight", + "f ully", + "ful ly", + "full y", + "im ages", + "image s", + "ima ges", + "imag es", + "Ġ makes", + "Ġm akes", + "Ġmake s", + "Ġma kes", + "Ġmak es", + "Ġ global", + "Ġg lobal", + "Ġglob al", + "Ġglo bal", + "Ġ contact", + "Ġcont act", + "Ġconta ct", + "' :Ċ", + "': Ċ", + "Ġ abs", + "Ġa bs", + "Ġab s", + "а Ð", + "f loat", + "flo at", + "Ġ except", + "Ġex cept", + "Ġexc ept", + "Ġexce pt", + "Ġ Pol", + "ĠP ol", + "ĠPo l", + "Ch ild", + "Chi ld", + "t yp", + "ty p", + "Ġc ertain", + "Ġcert ain", + "Ġcer tain", + "i ón", + "ió n", + "O UT", + "OU T", + "Ġim pro", + "Ġimp ro", + "Ġimpr o", + "i les", + "il es", + "ile s", + "Ġ -->Ċ", + "Ġ- ->Ċ", + "Ġ-- >Ċ", + "Ġ--> Ċ", + "Ġ Part", + "ĠP art", + "ĠPar t", + "ĠPa rt", + "val ues", + "value s", + "valu es", + "o ss", + "os s", + "/ **", + "/* *", + "i lit", + "il it", + "ili t", + "Ġ Event", + "ĠE vent", + "ĠEven t", + "ĠEv ent", + "ĠEve nt", + "c urity", + "cur ity", + "s ter", + "st er", + "ste r", + "Ġ character", + "Ġchar acter", + "1 98", + "19 8", + "Ġ news", + "Ġn ews", + "Ġnew s", + "Ġne ws", + "Ġ \",", + "Ġ\" ,", + "Ġ device", + "Ġd evice", + "Ġde vice", + "Ġdev ice", + "c el", + "ce l", + "lo gin", + "log in", + "he et", + "hee t", + "D efault", + "De fault", + "Def ault", + "@ \"", + "ĉ Ġ", + "c lick", + "cl ick", + "cli ck", + "( value", + "(v alue", + "(val ue", + "(va lue", + "Ġ Ab", + "ĠA b", + "Ġ previous", + "Ġpre vious", + "Ġprev ious", + "ERR OR", + "o cal", + "oc al", + "oca l", + "Ġ material", + "Ġm aterial", + "Ġmat erial", + "Ġmate rial", + "Ġmateria l", + "Ġmater ial", + "Ġmateri al", + "Ġ below", + "Ġb elow", + "Ġbe low", + "Ġbel ow", + "Ġ Christ", + "ĠCh rist", + "ĠChris t", + "ĠChr ist", + "Ġ media", + "Ġm edia", + "Ġme dia", + "Ġmed ia", + "Ġmedi a", + "c over", + "co ver", + "cov er", + "Ġ UI", + "ĠU I", + "Ġ fail", + "Ġf ail", + "Ġfa il", + "Ġ black", + "Ġb lack", + "Ġbl ack", + "Ġbla ck", + "Ġ component", + "Ġcom ponent", + "Ġcomp onent", + "Ġ American", + "ĠA merican", + "ĠAmeric an", + "ĠAmerica n", + "ĠAmer ican", + "Ġ added", + "Ġadd ed", + "Ġad ded", + "Ġ buy", + "Ġb uy", + "Ġbu y", + "s tit", + "st it", + "sti t", + "Ġ came", + "Ġc ame", + "Ġca me", + "Ġcam e", + "Ġ delete", + "Ġde lete", + "Ġdel ete", + "Ġdelet e", + "Ġdele te", + "p roperty", + "pro perty", + "prop erty", + "proper ty", + "o ding", + "od ing", + "odi ng", + "Ġ card", + "Ġc ard", + "Ġcar d", + "Ġca rd", + "r ops", + "ro ps", + "rop s", + "Ġ https", + "Ġhttp s", + "Ġht tps", + "Ġhtt ps", + "Ġ root", + "Ġr oot", + "Ġro ot", + "Ġ handle", + "Ġh andle", + "Ġhand le", + "Ġhan dle", + "C C", + "B ack", + "Ba ck", + "em plate", + "emp late", + "empl ate", + "Ġ getting", + "Ġg etting", + "Ġget ting", + "_ by", + "_b y", + "m ail", + "ma il", + "mai l", + "_ sh", + "_s h", + ". assert", + ".as sert", + "Ġ Dec", + "ĠD ec", + "ĠDe c", + "( true", + "(tr ue", + "Ġ comput", + "Ġcom put", + "Ġcomp ut", + "Ġ claim", + "Ġcl aim", + "Ġcla im", + "' =>", + "'= >", + "Ġ Sub", + "ĠS ub", + "ĠSu b", + "Ġ air", + "Ġa ir", + "Ġai r", + "o ps", + "op s", + "n av", + "na v", + "e ments", + "em ents", + "ement s", + "eme nts", + "emen ts", + "( id", + "(i d", + "Ġ enter", + "Ġen ter", + "Ġent er", + "an ged", + "ang ed", + "ange d", + "E nd", + "En d", + "Ġ location", + "Ġl ocation", + "Ġlo cation", + "Ġloc ation", + "Ġ night", + "Ġn ight", + "Ġni ght", + "Ġnig ht", + "Ġ doing", + "Ġdo ing", + "Ġdoi ng", + "Ġ Red", + "ĠR ed", + "ĠRe d", + "l in", + "li n", + "} ĊĊĊ", + "}Ċ ĊĊ", + "}ĊĊ Ċ", + "v ider", + "vid er", + "vi der", + "vide r", + "Ġ pick", + "Ġp ick", + "Ġpi ck", + "Ġpic k", + "Ġ watch", + "Ġw atch", + "Ġwat ch", + "ess ages", + "essage s", + "essa ges", + "Ġ human", + "Ġh uman", + "Ġhum an", + "Ġhu man", + "Ġ dam", + "Ġd am", + "Ġda m", + "p end", + "pe nd", + "pen d", + "d ir", + "di r", + "Ġ tax", + "Ġt ax", + "Ġta x", + "Ġ girl", + "Ġg irl", + "Ġgi rl", + "Ġgir l", + "re et", + "ree t", + "Ġ box", + "Ġb ox", + "Ġbo x", + "Ġ strong", + "Ġst rong", + "Ġstr ong", + "Ġstro ng", + "Ġstron g", + "( v", + "r el", + "re l", + "Ġ interface", + "Ġinter face", + "Ġinterf ace", + "Ġ msg", + "Ġm sg", + "Ġms g", + "f ect", + "fe ct", + "fec t", + "_ at", + "_a t", + "Ġ house", + "Ġh ouse", + "Ġhous e", + "Ġho use", + "Ġ track", + "Ġt rack", + "Ġtr ack", + "Ġtra ck", + "' );ĊĊ", + "') ;ĊĊ", + "');Ċ Ċ", + "'); ĊĊ", + "j e", + "Ġ John", + "ĠJ ohn", + "ĠJo hn", + "ĠJoh n", + "i str", + "is tr", + "ist r", + "( S", + "u be", + "ub e", + "Ġ ce", + "Ġc e", + "it ted", + "itt ed", + "itte d", + "V ER", + "VE R", + "* )", + "p arent", + "par ent", + "pare nt", + "pa rent", + "paren t", + "Ġ application", + "Ġapp lication", + "Ġap plication", + "Ġapplic ation", + "Ġappl ication", + "a ny", + "an y", + ". swing", + ".s wing", + ".sw ing", + "Ġ pack", + "Ġp ack", + "Ġpa ck", + "Ġpac k", + "\\ u", + "Ġp ract", + "Ġpr act", + "Ġpra ct", + "Ġprac t", + "Ġ section", + "Ġs ection", + "Ġse ction", + "Ġsec tion", + "Ġsect ion", + "c tx", + "ct x", + "Ġ unsigned", + "Ġun signed", + "Ġuns igned", + ". Point", + ".P oint", + "Ġ One", + "ĠO ne", + "ĠOn e", + "Ä ±", + "i ple", + "ip le", + "ipl e", + "a id", + "ai d", + "Ñ ĥ", + "V ector", + "Vec tor", + "Ve ctor", + "Vect or", + "b yte", + "by te", + "byt e", + "Ġ wait", + "Ġw ait", + "Ġwa it", + "Ġ Ãł", + "Ġà ł", + "à ¥", + "Ġto gether", + "Ġtog ether", + "Ġ throws", + "Ġth rows", + "Ġthrow s", + "Ġthr ows", + "Ġthro ws", + "F O", + "' ))", + "') )", + "h ost", + "ho st", + "hos t", + "i sing", + "is ing", + "isi ng", + "isin g", + ". view", + ".v iew", + "Ġ terms", + "Ġte rms", + "Ġter ms", + "Ġterm s", + "f ramework", + "fr amework", + "frame work", + "fram ework", + "- r", + "Ġ apply", + "Ġapp ly", + "Ġap ply", + "Ġappl y", + "Ġ session", + "Ġs ession", + "Ġsess ion", + "O ptions", + "Option s", + "Opt ions", + "ug gest", + "ugg est", + "Ġ others", + "Ġo thers", + "Ġother s", + "w itter", + "wit ter", + "Ġ fund", + "Ġf und", + "Ġfun d", + "Ġfu nd", + "I nit", + "In it", + "Ini t", + "_ _(", + "__ (", + "ens or", + "enso r", + "G ET", + "GE T", + "Ġse veral", + "Ġsever al", + "Ġsev eral", + "i i", + "[ j", + "I O", + "Ġ template", + "Ġt emplate", + "Ġtem plate", + "Ġtemp late", + "Ġtempl ate", + "P osition", + "Pos ition", + "Ġe con", + "Ġec on", + "Ġeco n", + "a chine", + "ach ine", + "achi ne", + "Ġ il", + "Ġi l", + ". spring", + ".s pring", + ".sp ring", + "m ain", + "ma in", + "mai n", + "e lt", + "el t", + "i ment", + "im ent", + "ime nt", + "imen t", + "R ec", + "Re c", + "m m", + "Ġ University", + "ĠUn iversity", + "ĠUnivers ity", + "urs or", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "G L", + "ic ture", + "ict ure", + "it hub", + "ith ub", + "c er", + "ce r", + "c ast", + "ca st", + "cas t", + "F rom", + "Fr om", + "a les", + "al es", + "ale s", + "Ġ subject", + "Ġsu bject", + "Ġsub ject", + "Ġsubj ect", + "p assword", + "pass word", + "pas sword", + "n y", + "Ġ esc", + "Ġe sc", + "Ġes c", + ". write", + ".w rite", + ".writ e", + ".wr ite", + "ï¼ Į", + "W hat", + "Wh at", + ". H", + "Ġ history", + "Ġh istory", + "Ġhistor y", + "Ġhist ory", + "Ġhi story", + "Ġhisto ry", + "Ġ Fe", + "ĠF e", + "Ġ individual", + "Ġind ividual", + "Ġindiv idual", + "Ġindivid ual", + "u nit", + "un it", + "uni t", + "Ġ -->", + "Ġ- ->", + "Ġ-- >", + "Ġ du", + "Ġd u", + "I ST", + "IS T", + "Ġ users", + "Ġus ers", + "Ġuse rs", + "Ġuser s", + "f s", + "f alse", + "fa lse", + "fal se", + "u nt", + "un t", + "T itle", + "Tit le", + "Ti tle", + "Ġ mot", + "Ġm ot", + "Ġmo t", + "Ġ future", + "Ġf uture", + "Ġfut ure", + "Ġfu ture", + "a ched", + "ac hed", + "ach ed", + "ache d", + "Ġ started", + "Ġstart ed", + "Ġstar ted", + "Ġ mode", + "Ġm ode", + "Ġmod e", + "Ġmo de", + "Ġ '<", + "Ġ' <", + "_ array", + "_a rray", + "_arr ay", + "_ar ray", + "Ġ ax", + "Ġa x", + "' ];Ċ", + "'] ;Ċ", + "']; Ċ", + "i res", + "ir es", + "ire s", + "T here", + "The re", + "Th ere", + "u ght", + "ug ht", + "ugh t", + "t ml", + "tm l", + "p osed", + "pos ed", + "pose d", + "po sed", + "i cult", + "ic ult", + "Ġ took", + "Ġt ook", + "Ġto ok", + "Ġtoo k", + "Ġ games", + "Ġg ames", + "Ġgame s", + "Ġgam es", + "Ġga mes", + "Ġ }}", + "Ġ} }", + "Ġ ?>Ċ", + "Ġ? >Ċ", + "Ġ?> Ċ", + "Ġ products", + "Ġproduct s", + "Ġprodu cts", + "I s", + "Ġ bad", + "Ġb ad", + "Ġba d", + "Ġ Des", + "ĠD es", + "ĠDe s", + ". path", + ".p ath", + ".pa th", + ".pat h", + "' ĊĊ", + "'Ċ Ċ", + "Ġ Post", + "ĠP ost", + "ĠPo st", + "ĠPos t", + "a vel", + "av el", + "ave l", + "( :", + "1 50", + "15 0", + "Ġ needs", + "Ġne eds", + "Ġneed s", + "Ġ known", + "Ġk nown", + "Ġkn own", + "Ġknow n", + "F l", + "Ġ exec", + "Ġe xec", + "Ġex ec", + "Ġexe c", + "Ġ seen", + "Ġs een", + "Ġse en", + "Ġsee n", + "5 1", + "u me", + "um e", + "Ġ border", + "Ġb order", + "Ġbor der", + "Ġbord er", + "Ġ live", + "Ġl ive", + "Ġli ve", + "Ġliv e", + "t emp", + "te mp", + "tem p", + "P er", + "Pe r", + "Ġ variable", + "Ġvar iable", + "Ġvari able", + "i et", + "ie t", + "Ġ Def", + "ĠD ef", + "ĠDe f", + "Ġ ge", + "Ġg e", + "e me", + "em e", + "_ back", + "_b ack", + "f irst", + "fi rst", + "fir st", + "Ġ provided", + "Ġpro vided", + "Ġprovid ed", + "Ġprov ided", + "Ġprovide d", + "//////////////// ////////////////", + "Ġ filename", + "Ġf ilename", + "Ġfile name", + "Ġfil ename", + "Ġfi lename", + "Ġ hope", + "Ġh ope", + "Ġhop e", + "Ġho pe", + "u ly", + "ul y", + "a uto", + "aut o", + "au to", + "f ind", + "fin d", + "fi nd", + "_ string", + "_s tring", + "_st ring", + "_str ing", + "b tn", + "bt n", + "it ude", + "itud e", + "itu de", + "At tribute", + "Attrib ute", + "Ġ young", + "Ġyou ng", + "Ġyo ung", + ". txt", + ".t xt", + ".tx t", + "Ġ website", + "Ġwe bsite", + "Ġweb site", + "Ġwebs ite", + "Ġ Prop", + "ĠP rop", + "ĠPro p", + "ĠPr op", + "Ġ ey", + "Ġe y", + "> ();Ċ", + ">( );Ċ", + ">() ;Ċ", + ">(); Ċ", + "i onal", + "ion al", + "io nal", + "iona l", + "A RR", + "AR R", + "iction ary", + "ur ther", + "urt her", + ". ", + ")- >", + "t x", + "Ġ pur", + "Ġp ur", + "Ġpu r", + "u el", + "ue l", + "ym bol", + "ymb ol", + "u ation", + "ua tion", + "uat ion", + "a nger", + "an ger", + "ang er", + "ange r", + "Ġ background", + "Ġback ground", + "e cess", + "ec ess", + "ece ss", + "ef ined", + ". .......", + ".. ......", + "... .....", + ".... ....", + "..... ...", + "...... ..", + "....... .", + "Ġ description", + "Ġd escription", + "Ġde scription", + "Ġdes cription", + "Ġdescri ption", + "Ġ represent", + "Ġre present", + "Ġrep resent", + "\" ));Ċ", + "\") );Ċ", + "\")) ;Ċ", + "\")); Ċ", + "p ression", + "pr ession", + "press ion", + "row ser", + "rows er", + "rowse r", + "Ġ series", + "Ġs eries", + "Ġse ries", + "Ġser ies", + "Ġserie s", + "Ġseri es", + "w ards", + "ward s", + "war ds", + "5 2", + "( $_", + "($ _", + "a ise", + "ai se", + "ais e", + "Ġ hot", + "Ġh ot", + "Ġho t", + "a city", + "ac ity", + "aci ty", + "r ies", + "ri es", + "rie s", + "a ctions", + "act ions", + "action s", + "C reate", + "Cre ate", + "Creat e", + "a dio", + "ad io", + "adi o", + "am ples", + "amp les", + "ample s", + "Ġ original", + "Ġor iginal", + "Ġorig inal", + "Ġorigin al", + "ens ive", + "ensi ve", + "f ont", + "fo nt", + "fon t", + "st ream", + "str eam", + "stre am", + " using", + ".spring framework", + "0 01", + "00 1", + "s erver", + "ser ver", + "serve r", + "serv er", + "Ġ bill", + "Ġb ill", + "Ġbi ll", + "Ġbil l", + "A CK", + "AC K", + "i lename", + "il ename", + "ile name", + "ilen ame", + "Ġ frame", + "Ġf rame", + "Ġfr ame", + "Ġfra me", + "Ġfram e", + "Ġ =Ċ", + "Ġ= Ċ", + "E dit", + "Ed it", + "ad ius", + "adi us", + "Ġ draw", + "Ġd raw", + "Ġdr aw", + "Ġdra w", + "an ks", + "ank s", + "Ġd eter", + "Ġde ter", + "Ġdet er", + "Ġ comes", + "Ġc omes", + "Ġcom es", + "Ġco mes", + "Ġcome s", + "_ int", + "_in t", + "_i nt", + "Ġ foreach", + "Ġf oreach", + "Ġfor each", + "Ġfore ach", + "Ġfo reach", + "a ngle", + "an gle", + "ang le", + "angl e", + "Ġ elect", + "Ġe lect", + "Ġel ect", + "Ġele ct", + "p ected", + "pect ed", + "pec ted", + "He ader", + "Head er", + "i stration", + "ist ration", + "istr ation", + "istra tion", + "istrat ion", + "F alse", + "Fa lse", + "Fal se", + "Ġ Game", + "ĠG ame", + "ĠGa me", + "ĠGam e", + "Ġ filter", + "Ġf ilter", + "Ġfil ter", + "Ġfilt er", + "Act ivity", + "Activ ity", + "Ġ larg", + "Ġl arg", + "Ġla rg", + "Ġlar g", + "in ition", + "init ion", + "ini tion", + "Ġ \"<", + "Ġ\" <", + "2 56", + "25 6", + "i sed", + "is ed", + "ise d", + "Ġ remove", + "Ġre move", + "Ġrem ove", + "Ġ Trans", + "ĠT rans", + "ĠTr ans", + "ĠTra ns", + "ĠTran s", + "m et", + "me t", + "s ee", + "se e", + "Form at", + "For mat", + "Com mand", + "Comm and", + "Ġ EX", + "ĠE X", + "N one", + "No ne", + "Non e", + "Ġ front", + "Ġf ront", + "Ġfr ont", + "Ġfro nt", + "Ġfron t", + "A SE", + "AS E", + "Ġ Rec", + "ĠR ec", + "ĠRe c", + "ound ation", + "Ġ vo", + "Ġv o", + "9 6", + "= \\\"", + "=\\ \"", + "( *", + "Ch ange", + "Chan ge", + "Cha nge", + ". Write", + ".W rite", + "g roup", + "gr oup", + "gro up", + "i ents", + "ie nts", + "ient s", + "ien ts", + "u y", + "******** ********************************************************", + "**************** ************************************************", + "******************************** ********************************", + "************************ ****************************************", + "**************************************** ************************", + "************************************************ ****************", + "******************************************************** ********", + "Ġ dig", + "Ġd ig", + "Ġdi g", + "h r", + "( -", + "Ġ gen", + "Ġg en", + "Ġge n", + "n umber", + "num ber", + "v ec", + "ve c", + "ur ope", + "uro pe", + "en try", + "ent ry", + "entr y", + "L L", + "Ġ ste", + "Ġs te", + "Ġst e", + "Val id", + "Va lid", + "' ],", + "'] ,", + "_ param", + "_p aram", + "_par am", + "_para m", + "_pa ram", + "Ġ selected", + "Ġse lected", + "Ġselect ed", + "Ġsel ected", + "Ġ according", + "Ġa ccording", + "Ġacc ording", + "Ġaccord ing", + "Ġ Dis", + "ĠD is", + "ĠDi s", + "Ġ util", + "Ġu til", + "Ġut il", + "B uffer", + "Buf fer", + "Buff er", + "Bu ffer", + "_ error", + "_e rror", + "_err or", + "_er ror", + "Ġ associ", + "Ġass oci", + "Ġassoc i", + "_ SIZE", + "_S IZE", + "_SI ZE", + "Ġ wor", + "Ġw or", + "Ġwo r", + "Ġ printf", + "Ġprint f", + "Ġprin tf", + "r ag", + "ra g", + " ł", + "D D", + "Ġ Val", + "ĠV al", + "ĠVa l", + "Ġ activ", + "Ġact iv", + "Ġac tiv", + "E ng", + "En g", + "e time", + "et ime", + "eti me", + "etim e", + "Ġ virtual", + "Ġv irtual", + "Ġvir tual", + "Ġvirt ual", + "a ign", + "ai gn", + "a ur", + "au r", + "Ġ Pres", + "ĠP res", + "ĠPr es", + "ĠPre s", + "Ġ Exception", + "ĠEx ception", + "ĠExcept ion", + "Ġ anything", + "Ġany thing", + "Ġ Off", + "ĠO ff", + "ĠOf f", + "Ġ hours", + "Ġh ours", + "Ġhour s", + "Ġho urs", + "Ġ war", + "Ġw ar", + "Ġwa r", + "Arg s", + "Ar gs", + "a ging", + "ag ing", + "agi ng", + "Ġ models", + "Ġmod els", + "Ġmodel s", + "Ġmode ls", + "Ġ Time", + "ĠT ime", + "ĠTim e", + "ĠTi me", + "O b", + "a ms", + "am s", + "j oy", + "jo y", + "Ġ early", + "Ġear ly", + ". read", + ".re ad", + ".r ead", + "8 6", + "Ġ center", + "Ġc enter", + "Ġcent er", + "Ġcen ter", + "Ġ Initial", + "ĠIn itial", + "ĠInit ial", + "ĠIniti al", + "Ġ language", + "Ġl anguage", + "Ġlangu age", + "l ength", + "le ngth", + "len gth", + "x y", + "Ġ sn", + "Ġs n", + "Ġ inf", + "Ġin f", + "Ġi nf", + "P ost", + "Pos t", + "Po st", + "Ġ ago", + "Ġa go", + "Ġag o", + "Ġ easy", + "Ġe asy", + "Ġeas y", + "Ġea sy", + "_ code", + "_c ode", + "_co de", + "_cod e", + "Ġ ANY", + "ĠA NY", + "ĠAN Y", + "_ ch", + "_c h", + "Ġ download", + "Ġd ownload", + "Ġdown load", + "( T", + "a ved", + "av ed", + "ave d", + "âĢ ĵ", + "Ġ students", + "Ġst udents", + "Ġstud ents", + "Ġstudent s", + "Ġ fig", + "Ġf ig", + "Ġfi g", + "l ight", + "li ght", + "lig ht", + "x x", + "Ġ buffer", + "Ġb uffer", + "Ġbu ffer", + "Ġbuf fer", + "Ġbuff er", + "Ġ Dep", + "ĠD ep", + "ĠDe p", + "Ġ Math", + "ĠM ath", + "ĠMat h", + "ĠMa th", + "I TH", + "IT H", + "Ġ vari", + "Ġv ari", + "Ġvar i", + "Ġva ri", + "Ġ due", + "Ġd ue", + "Ġdu e", + "F actory", + "Fact ory", + "Factor y", + "Ġ por", + "Ġp or", + "Ġpo r", + "Ġ ep", + "Ġe p", + "o type", + "ot ype", + "otyp e", + "oty pe", + "Ġ cannot", + "Ġc annot", + "Ġcan not", + "Ġcann ot", + "Ġ white", + "Ġwh ite", + "Ġwhit e", + "< int", + "čĊ", + "\"> čĊ", + ". annot", + ".an not", + "Ġ collection", + "Ġc ollection", + "Ġcol lection", + "Ġcoll ection", + "Ġcollect ion", + "Ġcolle ction", + "' .", + "Ġ similar", + "Ġs imilar", + "Ġsim ilar", + "Ġsimil ar", + "Ġ taken", + "Ġt aken", + "Ġtake n", + "Ġta ken", + "Ġtak en", + "( \"%", + "(\" %", + "Or der", + "Ord er", + "' ]Ċ", + "'] Ċ", + "- md", + "-m d", + "Ġ TH", + "ĠT H", + "a ced", + "ace d", + "ac ed", + "Ġis n", + "Ġi sn", + "/ j", + "Ġ son", + "Ġs on", + "Ġso n", + "g raph", + "gr aph", + "gra ph", + "Ġ Integer", + "ĠInt eger", + "Ġn ecess", + "Ġne cess", + "Ġnec ess", + "Ġneces s", + "r een", + "re en", + "ree n", + "Ġ um", + "Ġu m", + "Ġ \\<", + "Ġ\\ <", + "Ġ moment", + "Ġm oment", + "Ġmom ent", + "Ġmo ment", + "Ġ bring", + "Ġb ring", + "Ġbr ing", + "Ġbri ng", + "Ġ indic", + "Ġin dic", + "Ġind ic", + "y sis", + "ys is", + "ysi s", + "Le vel", + "v erse", + "ver se", + "vers e", + "ur renc", + "urre nc", + "urr enc", + "_ test", + "_t est", + "_te st", + "Ġent ire", + "D own", + "Do wn", + "Ġ }ĊĊĊ", + "Ġ} ĊĊĊ", + "Ġ}Ċ ĊĊ", + "Ġ}ĊĊ Ċ", + "( result", + "(res ult", + "Ġ Read", + "ĠR ead", + "ĠRe ad", + "à ¨", + "M od", + "Mo d", + "Ġ trying", + "Ġt rying", + "Ġtr ying", + "Ġtry ing", + "\" ),Ċ", + "\") ,Ċ", + "\"), Ċ", + "Ġ member", + "Ġm ember", + "Ġmem ber", + "Ġmemb er", + "Ġ Cor", + "ĠC or", + "ĠCo r", + "O DO", + "OD O", + "- control", + "-c ontrol", + "-cont rol", + "un time", + "unt ime", + "Ġ Sim", + "ĠS im", + "ĠSi m", + "D ialog", + "Di alog", + "Dia log", + "p lot", + "pl ot", + "_ on", + "_o n", + "Ġ phys", + "Ġph ys", + "Ġphy s", + "} /", + "Ġ namespace", + "Ġn amespace", + "Ġname space", + "Ġnames pace", + "ĉ čĊ", + "a cc", + "ac c", + "P layer", + "Pl ayer", + "Play er", + "A RE", + "AR E", + "8 9", + "Ġ foot", + "Ġf oot", + "Ġfo ot", + "Ġfoo t", + "Ġ board", + "Ġb oard", + "Ġbo ard", + "Ġboa rd", + "p art", + "par t", + "pa rt", + "Ġ sus", + "Ġs us", + "Ġsu s", + "w ise", + "wi se", + "wis e", + "Ġ Mc", + "ĠM c", + "Ġ push", + "Ġp ush", + "Ġpu sh", + "Ġpus h", + "A TA", + "AT A", + "Ġ please", + "Ġp lease", + "Ġpl ease", + "Ġple ase", + "Ġplea se", + "Ġpleas e", + "r ied", + "ri ed", + "rie d", + "we et", + "b it", + "bi t", + "i ded", + "id ed", + "ide d", + "V E", + "Ġ Sw", + "ĠS w", + "U B", + "Ġ types", + "Ġt ypes", + "Ġtype s", + "Ġtyp es", + "Ġty pes", + "e dia", + "ed ia", + "edi a", + "Ġc los", + "Ġcl os", + "Ġclo s", + "ace book", + "W hen", + "Wh en", + "Ġ edit", + "Ġe dit", + "Ġed it", + "Ġedi t", + "i gger", + "ig ger", + "igg er", + "Ġe nerg", + "Ġen erg", + "Ġener g", + "Cont ainer", + "Contain er", + "Conta iner", + "Ġ phot", + "Ġp hot", + "Ġph ot", + "Ġ Count", + "ĠC ount", + "ĠCo unt", + "ĠCou nt", + "ĠCoun t", + "Ġ Europe", + "ĠE urope", + "ĠEuro pe", + "ĠEurop e", + "ĠEur ope", + ". Is", + ".I s", + "Ġ Russ", + "ĠR uss", + "ĠRu ss", + "ĠRus s", + "p eed", + "pe ed", + "pee d", + "Ġ Str", + "ĠS tr", + "ĠSt r", + "Ġ py", + "Ġp y", + "Ġ cult", + "Ġc ult", + "Ġcu lt", + "Ġcul t", + "Ġ defined", + "Ġd efined", + "Ġdef ined", + "Ġdefine d", + "Ġdefin ed", + "c count", + "cc ount", + "cco unt", + "Ġo bt", + "Ġob t", + ". Location", + ".L ocation", + ".Lo cation", + "Ġ thread", + "Ġt hread", + "Ġth read", + "Ġthr ead", + "i lle", + "il le", + "ill e", + "Ġ instead", + "Ġin stead", + "Ġinst ead", + "st rong", + "str ong", + "stro ng", + "Ġ Sec", + "ĠS ec", + "ĠSe c", + "U RE", + "UR E", + "Ġ idea", + "Ġi dea", + "Ġid ea", + "Ġide a", + ". se", + ".s e", + "e my", + "em y", + "se lected", + "select ed", + "sel ected", + "Con nection", + "Conn ection", + "Connect ion", + "a cing", + "ac ing", + "aci ng", + "acin g", + "t hread", + "th read", + "thr ead", + ". next", + ".n ext", + ".ne xt", + "Ġ coll", + "Ġc oll", + "Ġco ll", + "Ġcol l", + "Ġ film", + "Ġf ilm", + "Ġfil m", + "Ġfi lm", + "is tic", + "ist ic", + "isti c", + "Ġ compet", + "Ġcom pet", + "Ġcomp et", + "Ġ conn", + "Ġc onn", + "Ġcon n", + "Ġco nn", + "th ough", + "Ġ compan", + "Ġcom pan", + "Ġcomp an", + "o cket", + "oc ket", + "ock et", + "Ġt each", + "Ġte ach", + "Ġtea ch", + "= (", + "Ġ phone", + "Ġp hone", + "Ġph one", + "Ġphon e", + "Ġ active", + "Ġact ive", + "Ġactiv e", + "7 9", + "de lete", + "del ete", + "1 01", + "10 1", + "t ries", + "tr ies", + "trie s", + "tri es", + "Ġ mo", + "Ġm o", + "Ġ death", + "Ġde ath", + "} );ĊĊ", + "});Ċ Ċ", + "}) ;ĊĊ", + "}); ĊĊ", + "o col", + "oc ol", + "oco l", + "W idget", + "Ġ article", + "Ġart icle", + "Ġartic le", + "r odu", + "ro du", + "rod u", + "an did", + "and id", + "andi d", + "Ñ ĭ", + "Ġ Cr", + "ĠC r", + "k a", + "( ):", + "() :", + "l ood", + "lo od", + "loo d", + "ĉ ĉĉĊ", + "ĉĉ ĉĊ", + "ĉĉĉ Ċ", + "Ġ almost", + "Ġal most", + "Ġalm ost", + "Ġ sell", + "Ġs ell", + "Ġse ll", + "Ġsel l", + "erv let", + "r ip", + "ri p", + "U nit", + "Un it", + "Uni t", + "Ġapp lic", + "Ġappl ic", + "Ġ connect", + "Ġcon nect", + "Ġconn ect", + "Ġ feature", + "Ġf eature", + "Ġfe ature", + "Ġfeat ure", + "Ġ via", + "Ġv ia", + "Ġvi a", + "' ),", + "') ,", + "Ġ lim", + "Ġl im", + "Ġli m", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ Gu", + "ĠG u", + "E ngine", + "Eng ine", + "Ġ ens", + "Ġe ns", + "Ġen s", + "Ġ environment", + "Ġen vironment", + "Ġenviron ment", + "b lock", + "bl ock", + "blo ck", + "H ERE", + "HE RE", + "HER E", + "N ULL", + "NU LL", + "g y", + "t ag", + "ta g", + ") ).", + ")) .", + "e xp", + "ex p", + "Ġcom pl", + "Ġco mpl", + "Ġcomp l", + "Ġ install", + "Ġinst all", + "Ġinstal l", + "Ġ complete", + "Ġcom plete", + "Ġcomp lete", + "Ġcomple te", + "Ġcomplet e", + "Ġcompl ete", + "q ueue", + "que ue", + "at ural", + "atur al", + "atura l", + "atu ral", + "Ġ general", + "Ġg eneral", + "Ġgener al", + "Ġgen eral", + "Ġgene ral", + "Ġgenera l", + "t hon", + "th on", + "Ġas ked", + "Ġask ed", + "o res", + "or es", + "ore s", + "( res", + "(r es", + "(re s", + "Ġ reserved", + "Ġres erved", + "Ġreserve d", + "Ġreserv ed", + "S P", + "Ġ â̦", + "ĠâĢ ¦", + "Å Ĥ", + "Ġsign ific", + "O ff", + "Of f", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ Ag", + "ĠA g", + "Ġ Just", + "ĠJ ust", + "ĠJu st", + "Ġ Error", + "ĠE rror", + "ĠEr ror", + "ĠErr or", + "Ġin fl", + "Ġinf l", + "a data", + "ad ata", + "ada ta", + "Ġ icon", + "Ġi con", + "Ġic on", + "as ks", + "ask s", + "' '", + "_ LO", + "_L O", + "? .", + "a ccount", + "ac count", + "acc ount", + "acco unt", + "Ġ (*", + "Ġ( *", + "' )ĊĊ", + "') ĊĊ", + "')Ċ Ċ", + "r ap", + "ra p", + "_ var", + "_v ar", + "_va r", + "Ġ FOR", + "ĠF OR", + "ĠFO R", + "Ġ party", + "Ġp arty", + "Ġpart y", + "Ġpar ty", + "Ġ Your", + "ĠY our", + "ĠYou r", + "ĠYo ur", + "c at", + "ca t", + "s try", + "st ry", + "str y", + ". new", + ".n ew", + ".ne w", + "b oot", + "bo ot", + "boo t", + "Ġ Nov", + "ĠN ov", + "ĠNo v", + "Ġ vector", + "Ġv ector", + "Ġve ctor", + "Ġvec tor", + "Ġvect or", + "Ġ normal", + "Ġn ormal", + "Ġnor mal", + "Ġnorm al", + "Ġf urther", + "Ġfur ther", + "Re pository", + "8 00", + "80 0", + "Ġ database", + "Ġd atabase", + "Ġdata base", + "Ġdat abase", + "Ġdatab ase", + "at tle", + "att le", + "Ġ music", + "Ġm usic", + "Ġmus ic", + "Ġmu sic", + "Ġ speed", + "Ġs peed", + "Ġsp eed", + "Ġspe ed", + "Ġ doc", + "Ġd oc", + "Ġdo c", + "p rocess", + "pro cess", + "proc ess", + "IG HT", + "IGH T", + ". parse", + ".p arse", + ".par se", + "Ġ taking", + "Ġt aking", + "Ġta king", + "Ġtak ing", + "Ġ viol", + "Ġv iol", + "Ġvi ol", + "c eed", + "ce ed", + "cee d", + "Ġ After", + "ĠA fter", + "ĠAf ter", + "Ġ forward", + "Ġfor ward", + "Ġ crit", + "Ġc rit", + "Ġcr it", + "Ġcri t", + "\" />Ċ", + "\"/ >Ċ", + "\"/> Ċ", + "r ot", + "ro t", + "Ġ failed", + "Ġf ailed", + "Ġfa iled", + "Ġfail ed", + "e fore", + "ef ore", + "Ġcon cern", + "Ġconc ern", + "Ġconce rn", + "o e", + "b a", + "Ġ sender", + "Ġs ender", + "Ġse nder", + "Ġsend er", + "Ġsen der", + "Ġ term", + "Ġt erm", + "Ġte rm", + "Ġter m", + "h as", + "ha s", + "= \"#", + "=\" #", + "Ġ potential", + "Ġpot ential", + "Ġpotent ial", + "N um", + "Nu m", + "Ġ published", + "Ġp ublished", + "Ġpublish ed", + "Ġpubli shed", + ". close", + ".c lose", + ".cl ose", + "Ġ Image", + "ĠI mage", + "ĠIm age", + "ĠImag e", + "str aint", + "stra int", + "strain t", + "U D", + "Ġ Ob", + "ĠO b", + "Ġ probably", + "Ġprob ably", + "l im", + "li m", + "\" :Ċ", + "\": Ċ", + "ol ume", + "olum e", + "olu me", + "Ġ consum", + "Ġcon sum", + "Ġcons um", + "7 6", + "a gue", + "ag ue", + "agu e", + "ens ions", + "ension s", + "ensi ons", + "Ġinvest ig", + "- year", + "-y ear", + "' );", + "') ;", + "- sm", + "-s m", + "Ġen joy", + "Ġenjo y", + "o rig", + "or ig", + "ori g", + "e ring", + "er ing", + "eri ng", + "erin g", + "c p", + "le ased", + "lease d", + "lea sed", + "p lements", + "pl ements", + "ple ments", + "plement s", + "Ġ returns", + "Ġreturn s", + "p at", + "pa t", + "B O", + "Ġ House", + "ĠH ouse", + "ĠHo use", + "ĠHou se", + ". Label", + ".L abel", + "Ġ weight", + "Ġw eight", + "Ġwe ight", + "Ġweigh t", + "Ġwei ght", + "ig hb", + "igh b", + "Ġ conditions", + "Ġcondition s", + "Ġcond itions", + "Ġ exception", + "Ġex ception", + "Ġexcept ion", + "Ġexce ption", + "d escription", + "de scription", + "des cription", + "Ġ trad", + "Ġt rad", + "Ġtr ad", + "Ġtra d", + "- to", + "-t o", + "Ġ {}", + "Ġ{ }", + "Ġ module", + "Ġm odule", + "Ġmod ule", + "E ND", + "EN D", + ". ap", + ".a p", + ". props", + ".p rops", + ".pro ps", + ".pr ops", + ".prop s", + "Ġ constructor", + "Ġcon structor", + "Ġconstruct or", + "Ġconstr uctor", + "a ves", + "av es", + "ave s", + "Ġ favor", + "Ġf avor", + "Ġfa vor", + "Ġfav or", + "Ġ Now", + "ĠN ow", + "ĠNo w", + "; i", + "Ġ Main", + "ĠM ain", + "ĠMa in", + "ĠMai n", + "_ k", + "e ries", + "er ies", + "erie s", + "eri es", + "âĢĻ ll", + "âĢĻl l", + "trans form", + "ime stamp", + "imest amp", + "P re", + "Pr e", + "Ġ mer", + "Ġm er", + "Ġme r", + ". res", + ".re s", + ".r es", + "s tant", + "st ant", + "sta nt", + "stan t", + "L ocation", + "Lo cation", + "Loc ation", + "_ NAME", + "_N AME", + "Ġ loss", + "Ġl oss", + "Ġlo ss", + "Ġlos s", + "Ġ ĊĊ", + "ĠĊ Ċ", + "n et", + "ne t", + "Ġ engine", + "Ġe ngine", + "Ġeng ine", + "B lock", + "Bl ock", + "Bloc k", + "Blo ck", + "Ġ issues", + "Ġiss ues", + "Ġissue s", + "Ġissu es", + "Ġ parse", + "Ġp arse", + "Ġpar se", + "Ġpars e", + "Ġ Bar", + "ĠB ar", + "ĠBa r", + "Ġ stay", + "Ġst ay", + "Ġsta y", + "Ġ JSON", + "ĠJ SON", + "ĠJS ON", + "Ġ dom", + "Ġd om", + "Ġdo m", + "a irs", + "air s", + "ai rs", + "w ner", + "wn er", + "Ġ lower", + "Ġl ower", + "Ġlo wer", + "Ġlow er", + "\" ,čĊ", + "\", čĊ", + "Ġ Dem", + "ĠD em", + "ĠDe m", + "u fact", + "uf act", + "ufac t", + "Ġ ps", + "Ġp s", + "Ġ perfect", + "Ġper fect", + "Ġperf ect", + "R L", + "Ġ educ", + "Ġe duc", + "Ġed uc", + "Ġedu c", + "l s", + "em ory", + "emo ry", + "ARR ANT", + "u ge", + "ug e", + "Ġ exact", + "Ġex act", + ". key", + ".k ey", + ".ke y", + "al led", + "all ed", + "alle d", + "e ch", + "ec h", + "i ef", + "ie f", + "\\ /", + "o ke", + "ok e", + "Ġ former", + "Ġfor mer", + "Ġform er", + "Ġforme r", + "al loc", + "all oc", + "allo c", + "Ġ six", + "Ġs ix", + "Ġsi x", + "i da", + "id a", + "Ġ margin", + "Ġm argin", + "Ġmar gin", + "Ġmarg in", + "Ġ heart", + "Ġhe art", + "Ġhear t", + "a ld", + "al d", + "p ack", + "pa ck", + "pac k", + ".getElement ById", + "ĠW ARRANT", + "Ġ rather", + "Ġr ather", + "Ġrat her", + "Ġra ther", + "Ġ building", + "Ġbuild ing", + "er man", + "erm an", + "l ice", + "lic e", + "li ce", + "Ġ questions", + "Ġquest ions", + "Ġquestion s", + "Ġquesti ons", + "i zes", + "iz es", + "ize s", + "le ge", + "leg e", + "irect ory", + "irector y", + "Ġ je", + "Ġj e", + "Ġ cas", + "Ġc as", + "Ġca s", + "p rops", + "pr ops", + "pro ps", + "prop s", + "u tf", + "ut f", + "Ġ security", + "Ġs ecurity", + "Ġse curity", + "Ġsec urity", + "Ġ however", + "Ġhow ever", + "w eight", + "we ight", + "wei ght", + "weigh t", + "Ġ inside", + "Ġin side", + "Ġins ide", + "Ġp resident", + "Ġpres ident", + "C har", + "Ch ar", + "Cha r", + "Ġ WITH", + "ĠW ITH", + "ĠWI TH", + ". map", + ".m ap", + ".ma p", + "Ġ graph", + "Ġg raph", + "Ġgr aph", + "Ġgra ph", + "Ġgrap h", + "Ġ tag", + "Ġt ag", + "Ġta g", + "_ status", + "_s tatus", + "_st atus", + "_stat us", + "Ġ attempt", + "Ġat tempt", + "Ġatt empt", + "o pp", + "op p", + "u ses", + "us es", + "use s", + "ĉ const", + "ĉcon st", + "Ġ round", + "Ġr ound", + "Ġro und", + "Ġrou nd", + ", $", + "Ġ friends", + "Ġf riends", + "Ġfri ends", + "Ġfriend s", + "E mail", + "Em ail", + "? >", + "Re source", + "Res ource", + "K EY", + "KE Y", + "o sp", + "os p", + ". query", + ".qu ery", + "Ġ North", + "ĠN orth", + "ĠNor th", + "a bles", + "ab les", + "able s", + "abl es", + "is trib", + "ist rib", + "istr ib", + "_ class", + "_c lass", + "_cl ass", + "el lo", + "ell o", + "T hat", + "Th at", + "Ð º", + "pec ially", + "pecial ly", + "Ġ President", + "ĠP resident", + "ĠPres ident", + "Ġ campaign", + "Ġc ampaign", + "Ġcamp aign", + "Ġ alt", + "Ġa lt", + "Ġal t", + "a rea", + "ar ea", + "are a", + "Ġc hall", + "Ġch all", + "Ġcha ll", + "Ġop port", + "Ġopp ort", + ". Con", + ".C on", + ".Co n", + "Ġ energy", + "Ġe nergy", + "Ġen ergy", + "Ġenerg y", + "Ġener gy", + "l ike", + "li ke", + "lik e", + ". string", + ".s tring", + ".st ring", + ".str ing", + "ing ton", + "ingt on", + ") *", + "y y", + "Ġ profession", + "Ġprof ession", + "Ġprofess ion", + "ir th", + "irt h", + "Ġ seg", + "Ġs eg", + "Ġse g", + "æ ľ", + "Ġ hor", + "Ġh or", + "Ġho r", + "i ers", + "ie rs", + "ier s", + "c an", + "ca n", + "Ġbe hind", + "Ġbeh ind", + "Pro duct", + "Produ ct", + "Prod uct", + "f g", + "Ġ Sk", + "ĠS k", + ". jpg", + ".j pg", + ".jp g", + "? :", + "] ;ĊĊ", + "];Ċ Ċ", + "]; ĊĊ", + "Ġ callback", + "Ġc allback", + "Ġcall back", + "Ġ Http", + "ĠH ttp", + "Ñ Į", + "l ong", + "lo ng", + "lon g", + "M S", + "A TH", + "AT H", + "Ġ raise", + "Ġr aise", + "Ġrais e", + "Ġra ise", + "Ġ wanted", + "Ġw anted", + "Ġwant ed", + "Ġwan ted", + "r own", + "ro wn", + "row n", + "u tor", + "ut or", + "uto r", + "l t", + "] =", + "e line", + "el ine", + "eli ne", + "elin e", + "M A", + "Ġs epar", + "Ġse par", + "Ġsep ar", + "c s", + "s emb", + "se mb", + "sem b", + "D is", + "Di s", + "b serv", + "bs erv", + "Ġ Will", + "ĠW ill", + "ĠWil l", + "ĠWi ll", + "Ġ policy", + "Ġp olicy", + "Ġpol icy", + "Ġpolic y", + "Ġ third", + "Ġth ird", + "Ġthi rd", + "p hone", + "ph one", + "phon e", + "Ġ bed", + "Ġb ed", + "Ġbe d", + "/ g", + ". __", + "._ _", + "Ġ Inc", + "ĠI nc", + "ĠIn c", + "i zing", + "iz ing", + "izi ng", + "izin g", + ". remove", + ".re move", + ".rem ove", + "in stance", + "inst ance", + "instanc e", + ". type", + ".t ype", + ".typ e", + "Ġ serv", + "Ġs erv", + "Ġse rv", + "Ġser v", + "E ach", + "Ġ har", + "Ġh ar", + "Ġha r", + "Ġ Message", + "ĠM essage", + "ĠMess age", + "ĠMes sage", + "( key", + "(k ey", + "SE LECT", + "SEL ECT", + "P os", + "Po s", + ") );čĊ", + ")) ;čĊ", + ")); čĊ", + "Ġre comm", + "Ġrec omm", + "Ġrecom m", + "Ġreco mm", + "Ġ training", + "Ġtr aining", + "Ġtrain ing", + "Ġtra ining", + "Ġtrai ning", + "Ġ Ent", + "ĠE nt", + "ĠEn t", + "Ġ Char", + "ĠC har", + "ĠCh ar", + "ĠCha r", + "i cht", + "ic ht", + "ich t", + "( file", + "(f ile", + "(fi le", + "(fil e", + "Ġ prior", + "Ġp rior", + "Ġpr ior", + "Ġpri or", + "Ġprio r", + "G ame", + "Gam e", + "Ga me", + "Ġ exit", + "Ġe xit", + "Ġex it", + "Param s", + "Par ams", + "Pa rams", + "Para ms", + ". core", + ".c ore", + ".co re", + ".cor e", + "P C", + "n es", + "ne s", + "an ced", + "ance d", + "anc ed", + "( request", + "(re quest", + "(req uest", + "P assword", + "Pass word", + "Pas sword", + "} >Ċ", + "}> Ċ", + "Ġ mag", + "Ġm ag", + "Ġma g", + "Ġ release", + "Ġre lease", + "Ġr elease", + "Ġrel ease", + "Ġrele ase", + "Ġ shall", + "Ġs hall", + "Ġsh all", + "Ġsha ll", + "u dent", + "ud ent", + "ude nt", + "uden t", + "Ġ South", + "ĠS outh", + "ĠSo uth", + "ĠSou th", + "a ndo", + "an do", + "and o", + ": '", + ". TabIndex", + ".Tab Index", + "s k", + "an ner", + "ann er", + "anne r", + "is set", + "iss et", + "isse t", + "Ġ outside", + "Ġout side", + "Ġouts ide", + "l edge", + "le dge", + "led ge", + "Ġ å", + "Ġ Rob", + "ĠR ob", + "ĠRo b", + "Ġ imm", + "Ġi mm", + "Ġim m", + "! Ċ", + "Ġ Web", + "ĠW eb", + "ĠWe b", + "D es", + "De s", + "B C", + "an cial", + "anc ial", + "ancia l", + "R oute", + "Ro ute", + "D ec", + "De c", + "fer ences", + "ference s", + "Ġp urch", + "Ġpur ch", + "Ġpu rch", + "Ġ Model", + "ĠM odel", + "ĠMod el", + "ĠMo del", + "ĠMode l", + "c tor", + "ct or", + "g n", + "_ start", + "_st art", + "_star t", + "_sta rt", + "_ un", + "_u n", + ". *", + "i ses", + "is es", + "ise s", + "Ġ ground", + "Ġg round", + "Ġgr ound", + "Ġgro und", + "Ġgrou nd", + "Ġ unique", + "Ġun ique", + "Ġuniqu e", + "Ġuni que", + "Ġuniq ue", + "Ġbe aut", + "Ġbeau t", + "{ \"", + "Ġ pour", + "Ġp our", + "Ġpo ur", + "Ġpou r", + "Ġ Oct", + "ĠO ct", + "ĠOc t", + "Ġ tree", + "Ġt ree", + "Ġtr ee", + "Ġtre e", + "s ets", + "se ts", + "set s", + "_ res", + "_re s", + "_r es", + "' )->", + "') ->", + "_ reg", + "_re g", + "_r eg", + "( \"\\", + "(\" \\", + "Ġ byte", + "Ġb yte", + "Ġby te", + "Ġbyt e", + "B l", + "Ġ dating", + "Ġd ating", + "Ġda ting", + "Ġdat ing", + "Ġdati ng", + "Ġ matter", + "Ġm atter", + "Ġmat ter", + "Ġmatt er", + "Ġmatte r", + "Ġ Rem", + "ĠR em", + "ĠRe m", + "Ġ' ../", + "Ġ'. ./", + "Ġ'.. /", + "Ġ Aug", + "ĠA ug", + "ĠAu g", + "Ġ La", + "ĠL a", + "Ġ $(", + "Ġ$ (", + "o urnal", + "our nal", + "ourn al", + "1 11", + "11 1", + "i am", + "ia m", + "Ġ shows", + "Ġsh ows", + "Ġshow s", + "Ġsho ws", + "w rite", + "wr ite", + "Ġ ball", + "Ġb all", + "Ġbal l", + "Ġba ll", + "Ġsim ply", + "Ġsimp ly", + "Ġsimpl y", + "Ġ fast", + "Ġf ast", + "Ġfa st", + "Ġfas t", + "Ġ memory", + "Ġm emory", + "Ġmem ory", + "Ġmemor y", + "Ġmemo ry", + "A SS", + "AS S", + "Ġ Of", + "ĠO f", + "o ved", + "ov ed", + "ove d", + "a nte", + "an te", + "ant e", + "a ul", + "au l", + "i stry", + "is try", + "ist ry", + "istr y", + ") ));Ċ", + ")) );Ċ", + "))) ;Ċ", + "))); Ċ", + "Ġ fit", + "Ġf it", + "Ġfi t", + "< string", + "_", + "-> _", + "\" )ĊĊ", + "\") ĊĊ", + "\")Ċ Ċ", + "o x", + "ap plication", + "app lication", + "appl ication", + "Ġ ]Ċ", + "Ġ] Ċ", + "Ċ ĊĊĊĊĊ", + "ĊĊ ĊĊĊĊ", + "ĊĊĊĊ ĊĊ", + "ĊĊĊ ĊĊĊ", + "ĊĊĊĊĊ Ċ", + "1 80", + "18 0", + "Ġ soon", + "Ġs oon", + "Ġso on", + "Ġsoo n", + "ct ions", + "ction s", + "i nger", + "in ger", + "ing er", + "inge r", + "Ġ join", + "Ġj oin", + "Ġjo in", + "Ġ Pe", + "ĠP e", + "Ġ ë", + "Ġ las", + "Ġl as", + "Ġla s", + ". E", + "c ss", + "cs s", + "/ or", + "/o r", + "Ġ Start", + "ĠSt art", + "ĠStar t", + "ĠSta rt", + "Ġ TO", + "ĠT O", + "Ġ subs", + "Ġs ubs", + "Ġsu bs", + "Ġsub s", + "c onn", + "con n", + "co nn", + "com ponents", + "comp onents", + "component s", + "DE BUG", + "qu are", + "qua re", + "F unction", + "Func tion", + "Fun ction", + "en dar", + "end ar", + "enda r", + ". index", + ".in dex", + ".ind ex", + "Ġ fill", + "Ġf ill", + "Ġfil l", + "Ġfi ll", + "Ä Ļ", + "Ġ choose", + "Ġch oose", + "Ġcho ose", + "h ow", + "ho w", + "Ġ America", + "ĠAmeric a", + "ĠAmer ica", + "as sets", + "ass ets", + "asset s", + "asse ts", + "- -----------", + "-- ----------", + "---- --------", + "-------- ----", + "--- ---------", + "----- -------", + "---------- --", + "------ ------", + "----------- -", + "------- -----", + "--------- ---", + "Ġ Value", + "ĠV alue", + "ĠVal ue", + "ĠVa lue", + "Ġ office", + "Ġoff ice", + "Ġoffic e", + "Ġ veh", + "Ġv eh", + "Ġve h", + "Ġ transform", + "Ġtrans form", + "Ġtransf orm", + "Ġ Art", + "ĠA rt", + "ĠAr t", + "Ġ inde", + "Ġin de", + "Ġi nde", + "Ġind e", + "Ġ fn", + "Ġf n", + "Ġ implements", + "Ġim plements", + "Ġimp lements", + "Ġimplement s", + "Ġimpl ements", + "a ngo", + "an go", + "ang o", + "p lete", + "pl ete", + "ple te", + "plet e", + "+ \"", + "t mp", + "tm p", + "am ily", + "ami ly", + "amil y", + "Ġ hash", + "Ġh ash", + "Ġhas h", + "Ġha sh", + "m issions", + "miss ions", + "mission s", + "E ST", + "ES T", + "g t", + "Pro vider", + "Provid er", + "Provide r", + "Prov ider", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "Ġ flag", + "Ġf lag", + "Ġfl ag", + "Ġfla g", + "Ġpart icip", + "Ġpartic ip", + "Ġparti cip", + "d en", + "de n", + "Ġ Returns", + "ĠReturn s", + "Ġ note", + "Ġn ote", + "Ġnot e", + "Ġno te", + "ü r", + "p m", + "id eos", + "ide os", + "ideo s", + "Ġ specified", + "Ġs pecified", + "Ġspec ified", + "Ġ EN", + "ĠE N", + "e ster", + "es ter", + "est er", + "este r", + "o lid", + "ol id", + "oli d", + "Ġ upon", + "Ġu pon", + "Ġup on", + "( std", + "(s td", + "(st d", + "ĉ v", + "Ġ '\\", + "Ġ' \\", + "u z", + "Ġ vert", + "Ġv ert", + "Ġver t", + "Ġve rt", + "Ġv ict", + "Ġvi ct", + "Ġvic t", + "ĉ self", + "ĉs elf", + "ĉse lf", + "Ġ \"$", + "Ġ\" $", + "8 5", + ". k", + "Ġ groups", + "Ġg roups", + "Ġgroup s", + "Ġgro ups", + "Ġgrou ps", + "g ithub", + "git hub", + "l ang", + "la ng", + "lan g", + "Ġ mut", + "Ġm ut", + "Ġmu t", + "T O", + "Ġ ve", + "Ġv e", + "Ġ Please", + "ĠP lease", + "ĠPl ease", + "ĠPle ase", + "; ĊĊĊ", + ";Ċ ĊĊ", + ";ĊĊ Ċ", + "a ccess", + "ac cess", + "acc ess", + "Ġ {\"", + "Ġ{ \"", + "r ea", + "re a", + "Ġ risk", + "Ġr isk", + "Ġris k", + "Ġri sk", + "i cker", + "ic ker", + "ick er", + "og gle", + "ogg le", + "ĉ while", + "A NG", + "AN G", + ". send", + ".s end", + ".se nd", + "7 2", + "Ġ woman", + "Ġw oman", + "Ġwom an", + "Ġwo man", + "Ġ gets", + "Ġg ets", + "Ġget s", + "Ġge ts", + "Ġ ign", + "Ġi gn", + "Ġig n", + "Ġ Id", + "ĠI d", + "_ log", + "_l og", + "_lo g", + "O NE", + "ON E", + "Ġe vid", + "Ġev id", + "Ġ Har", + "ĠH ar", + "ĠHa r", + "_ sub", + "_s ub", + "_su b", + "Ġ endl", + "Ġe ndl", + "Ġen dl", + "Ġend l", + "Ġ included", + "Ġin cluded", + "Ġinclud ed", + "Ġinclude d", + "Ġincl uded", + "Ġinclu ded", + "( ));ĊĊ", + "() );ĊĊ", + "());Ċ Ċ", + "()) ;ĊĊ", + "()); ĊĊ", + "Ġ Ap", + "ĠA p", + "i gr", + "ig r", + "Ġ sem", + "Ġs em", + "Ġse m", + "Ġ Black", + "ĠB lack", + "ĠBl ack", + "d oc", + "do c", + "_ table", + "_t able", + "_tab le", + "_ta ble", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "- up", + "-u p", + "Ġ cause", + "Ġc ause", + "Ġca use", + "Ġcaus e", + "Ġ ..", + "Ġ. .", + "Ġ van", + "Ġv an", + "Ġva n", + "_ dict", + "_d ict", + "_di ct", + "_dic t", + "Ġ focus", + "Ġf ocus", + "Ġfoc us", + "Ġfo cus", + "I ND", + "IN D", + "C ESS", + "CE SS", + "CES S", + ". Log", + ".L og", + ".Lo g", + "Ġ multiple", + "Ġm ultiple", + "Ġmult iple", + "Ġmulti ple", + "Ġmultip le", + "i do", + "id o", + "Ġre gard", + "Ġreg ard", + "- M", + "and ler", + "andle r", + "o urse", + "our se", + "ours e", + "Ġ deg", + "Ġd eg", + "Ġde g", + ". U", + "Ġadd ition", + "Ġad dition", + "Ġv arious", + "Ġvar ious", + "Ġvari ous", + "Ġva rious", + "Ġ receive", + "Ġre ceive", + "Ġrece ive", + "е н", + "еР½", + "Ġ HT", + "ĠH T", + "O bj", + "Ob j", + "D F", + "Ġ increase", + "Ġin crease", + "Ġincre ase", + "Ġincr ease", + "Ġ Open", + "ĠO pen", + "ĠOp en", + "] ;", + "Ġ commit", + "Ġcom mit", + "Ġcomm it", + "? Ċ", + "ateg ories", + "ategor ies", + "ategori es", + "ategorie s", + "atego ries", + "at ory", + "ator y", + "ato ry", + "s hip", + "sh ip", + "shi p", + "Ġ Mich", + "ĠM ich", + "ĠMi ch", + "ĠMic h", + "Ġ html", + "Ġh tml", + "Ġht ml", + "ro mise", + "rom ise", + "Ġ leave", + "Ġle ave", + "Ġstr ateg", + "Ġstrat eg", + "Ġstra teg", + "Ġstrate g", + "a ven", + "av en", + "ave n", + "Ġ Console", + "ĠCon sole", + "ĠCons ole", + "k nown", + "kn own", + "know n", + "- n", + "_ LE", + "_L E", + ". component", + ".com ponent", + ".comp onent", + "Ġ bre", + "Ġb re", + "Ġbr e", + "S ession", + "i ance", + "ia nce", + "ian ce", + "Ġ align", + "Ġal ign", + "Ġali gn", + "type def", + "typ edef", + "typed ef", + "_ result", + "_res ult", + "Ġ WHERE", + "ĠW HERE", + "ĠWH ERE", + ". split", + ".s plit", + ".sp lit", + "Ġ reading", + "Ġre ading", + "Ġread ing", + "FA ULT", + "Ġ clo", + "Ġc lo", + "Ġcl o", + "Ġ notice", + "Ġnot ice", + "_ pr", + "_p r", + "ar ter", + "art er", + "arte r", + "Ġ lock", + "Ġl ock", + "Ġlo ck", + "Ġloc k", + "Ġ standard", + "Ġst andard", + "Ġstand ard", + "e tic", + "et ic", + "eti c", + "el low", + "ell ow", + "ello w", + "Ġ padding", + "Ġp adding", + "Ġpad ding", + "Ġpadd ing", + "Ġ His", + "ĠH is", + "ĠHi s", + "Ġ states", + "Ġst ates", + "Ġstate s", + "Ġstat es", + "Ġsta tes", + "_ cast", + "_c ast", + "_ca st", + "( P", + "a a", + "Ġ internal", + "Ġin ternal", + "Ġint ernal", + "Ġinter nal", + "Ġintern al", + "e an", + "ea n", + "Ġ PRO", + "ĠP RO", + "ĠPR O", + "Ġ Key", + "ĠK ey", + "ĠKe y", + "Ġ especially", + "Ġes pecially", + "Ġespecial ly", + "Ġespec ially", + "m ing", + "min g", + "mi ng", + "Ġ cross", + "Ġc ross", + "Ġcr oss", + "Ġcro ss", + "Ġ national", + "Ġn ational", + "Ġnation al", + "Ġnat ional", + "_ object", + "_obj ect", + "_o bject", + "_ob ject", + "f ilter", + "fil ter", + "filt er", + "Ġ script", + "Ġs cript", + "Ġscr ipt", + "Ġscri pt", + ". update", + ".up date", + "_ i", + "Ġ Assert", + "ĠAs sert", + "ĠAss ert", + "/ core", + "/c ore", + "/co re", + "% %%%", + "%% %%", + "%%% %", + "Ġ problems", + "Ġpro blems", + "Ġproble ms", + "Ġproblem s", + "Ġprob lems", + "Ġprobl ems", + "i stor", + "is tor", + "ist or", + "isto r", + "Ġ .=", + "Ġ. =", + "Ġ arch", + "Ġa rch", + "Ġar ch", + "Ġarc h", + "Ġ written", + "Ġw ritten", + "Ġwrit ten", + "Ġwr itten", + "Ġm ilit", + "Ġmil it", + "Ġmi lit", + "Ġmili t", + "M ENT", + "ME NT", + ". ch", + ".c h", + "c ape", + "ca pe", + "cap e", + "Ġ Mus", + "ĠM us", + "ĠMu s", + "_ config", + "_con fig", + "_conf ig", + "Ġ API", + "ĠA PI", + "ĠAP I", + "f oot", + "fo ot", + "foo t", + "Ġ images", + "Ġim ages", + "Ġimage s", + "Ġimag es", + "Ġima ges", + "e ndl", + "en dl", + "end l", + ". In", + ".I n", + "F irst", + "Fi rst", + "Ġ platform", + "Ġpl atform", + "Ġplat form", + ". prot", + ".p rot", + ".pro t", + ".pr ot", + "O ption", + "Op tion", + "Opt ion", + "s te", + "st e", + "Ġ TODO", + "ĠT ODO", + "ĠTO DO", + "ĠTOD O", + "Ġ force", + "Ġf orce", + "Ġfor ce", + "Ġforc e", + ". cont", + ".c ont", + ".con t", + ".co nt", + "ĉ echo", + "ĉe cho", + "ĠD av", + "ĠDa v", + "P tr", + "Pt r", + "( B", + "R T", + "Ġ Base", + "ĠB ase", + "ĠBa se", + "ĠBas e", + "] ['", + "][ '", + "Ġann ounc", + "Ġanno unc", + "con sole", + "cons ole", + "Ġ Py", + "ĠP y", + "d s", + ". as", + ".a s", + "Ġ prevent", + "Ġpr event", + "Ġpre vent", + "Ġprev ent", + "a pan", + "ap an", + "apa n", + "Ġ {'", + "Ġ{ '", + "} '", + "Ġ dead", + "Ġd ead", + "Ġde ad", + "V AL", + "VA L", + "Q UE", + "QU E", + "******** ****************************************************************", + "**************** ********************************************************", + "******************************** ****************************************", + "**************************************************************** ********", + "************************ ************************************************", + "**************************************** ********************************", + "************************************************ ************************", + "******************************************************** ****************", + "Ġ charg", + "Ġch arg", + "Ġchar g", + "Ġcha rg", + "R eturn", + "Re turn", + "Ret urn", + "Ġ ful", + "Ġf ul", + "Ġfu l", + "d om", + "do m", + "Ġ rules", + "Ġr ules", + "Ġrule s", + "Ġru les", + "Ġ modify", + "Ġmod ify", + "Ġ eval", + "Ġe val", + "Ġev al", + "h am", + "ha m", + "a tement", + "at ement", + "ate ment", + "atem ent", + "\\ <", + "u la", + "ul a", + "= False", + "=F alse", + "R A", + "Ġ contains", + "Ġcon tains", + "Ġcont ains", + "Ġcontain s", + "Ġconta ins", + "7 4", + "Ġ stack", + "Ġst ack", + "Ġsta ck", + "m ar", + "ma r", + "Ġ {}Ċ", + "Ġ{ }Ċ", + "Ġ{} Ċ", + "Ġ undefined", + "Ġun defined", + "Ġund efined", + "Ġundef ined", + "A ss", + "As s", + "Ġ China", + "ĠCh ina", + "ĠChi na", + "ĠChin a", + "v ey", + "ve y", + "* Ċ", + "Ġ playing", + "Ġpl aying", + "Ġplay ing", + "Ġpla ying", + ") /", + "a ctor", + "act or", + "ac tor", + "Ġ bottom", + "Ġb ottom", + "Ġbot tom", + "Ġbott om", + "l ier", + "li er", + "lie r", + "Ġ Number", + "ĠN umber", + "ĠNum ber", + "Ġc ouple", + "Ġco uple", + "Ġcou ple", + "Ġcoup le", + "D C", + "Ġ SO", + "ĠS O", + "g or", + "go r", + ". setText", + ".set Text", + "s uccess", + "su ccess", + "succ ess", + "com mand", + "comm and", + "comma nd", + "F ilter", + "Fil ter", + "Ġ Our", + "ĠO ur", + "ĠOu r", + "_ item", + "_i tem", + "_it em", + "Ġ ctx", + "Ġc tx", + "Ġct x", + "Ġ road", + "Ġr oad", + "Ġro ad", + "V ersion", + "Vers ion", + "c ase", + "ca se", + "cas e", + "u rt", + "ur t", + "av ior", + "avi or", + "y ch", + "yc h", + "semb ly", + "sembl y", + "Ġ Product", + "ĠPro duct", + "ĠProdu ct", + "ĠProd uct", + "Ġ held", + "Ġh eld", + "Ġhe ld", + "Ġhel d", + "a fe", + "af e", + "Ġ includes", + "Ġin cludes", + "Ġinclud es", + "Ġinclude s", + "Ġincl udes", + "Ġinclu des", + "< quote", + "Ġ avoid", + "Ġa void", + "Ġav oid", + "Ġ Fin", + "ĠF in", + "ĠFi n", + "Ġ Mod", + "ĠM od", + "ĠMo d", + "Ġ tab", + "Ġt ab", + "Ġta b", + "a no", + "an o", + "à ±", + "i pping", + "ip ping", + "ipp ing", + "ippi ng", + "- e", + "Ġ insert", + "Ġin sert", + "Ġins ert", + "Ġinser t", + "Ġinse rt", + "t arget", + "tar get", + "c han", + "ch an", + "cha n", + ". Model", + ".M odel", + ".Mod el", + ".Mode l", + "I ME", + "IM E", + "\\ Ċ", + "Ġ machine", + "Ġm achine", + "Ġma chine", + "Ġmach ine", + "a vy", + "av y", + "Ġ NO", + "ĠN O", + "Ġ Inter", + "ĠIn ter", + "ĠInt er", + "Ġ operation", + "Ġo peration", + "Ġop eration", + "Ġoper ation", + "Ġopera tion", + "m odal", + "mod al", + "mo dal", + "T ag", + "Ta g", + "] :", + "Ġ production", + "Ġp roduction", + "Ġpro duction", + "Ġproduct ion", + "Ġprodu ction", + "Ġprod uction", + "Ġ areas", + "Ġa reas", + "Ġare as", + "Ġarea s", + "Ġ ren", + "Ġre n", + "Ġr en", + "_ from", + "_f rom", + "_fr om", + "n bsp", + "nb sp", + "Ġ operator", + "Ġo perator", + "Ġop erator", + "Ġoper ator", + "Ġopera tor", + "m en", + "me n", + "a pped", + "ap ped", + "app ed", + "appe d", + "_ per", + "_p er", + "_pe r", + "z en", + "ze n", + "( \".", + "(\" .", + ". save", + ".s ave", + ".sa ve", + ".sav e", + "=\" {{", + "=\"{ {", + "Ġ tor", + "Ġt or", + "Ġto r", + "( response", + "(res ponse", + "(resp onse", + "Ġc andid", + "Ġcan did", + "Ġcand id", + "Ġ conv", + "Ġcon v", + "Ġco nv", + "a iled", + "ail ed", + "ai led", + "Ġ Lib", + "ĠL ib", + "ĠLi b", + "c omp", + "com p", + "co mp", + "u ra", + "ur a", + "ï¿ ½", + "Ġ Here", + "ĠH ere", + "ĠHe re", + "ĠHer e", + "Ġ argument", + "Ġarg ument", + "h ood", + "ho od", + "hoo d", + "Ġ establish", + "Ġest ablish", + "ograph y", + "ogra phy", + "Ġ onClick", + "Ġon Click", + "amb da", + "Ġ sch", + "Ġs ch", + "Ġsc h", + "Ġ movie", + "Ġm ovie", + "Ġmov ie", + "Ġmo vie", + "Ġ sec", + "Ġs ec", + "Ġse c", + "Ġ activity", + "Ġact ivity", + "Ġactiv ity", + "Ø §", + "Ġ sql", + "Ġs ql", + "Ġsq l", + "_ all", + "_a ll", + "_al l", + "in cip", + "inc ip", + "inci p", + "Ġpro vides", + "Ġprovid es", + "Ġprov ides", + "Ġprovide s", + "Ġ sys", + "Ġs ys", + "Ġsy s", + "a cket", + "ack et", + "ac ket", + "Ġw asn", + "Ġwas n", + "Ġwa sn", + "Ġ uses", + "Ġu ses", + "Ġus es", + "Ġuse s", + "Ġ Function", + "ĠF unction", + "ĠFun ction", + "ĠFunc tion", + ". google", + ".g oogle", + ".go ogle", + "Ġ Result", + "ĠRes ult", + "8 4", + "V isible", + "Vis ible", + "ag ma", + "el come", + "Ġ Sy", + "ĠS y", + "Ġ Cent", + "ĠC ent", + "ĠCe nt", + "AL SE", + "ALS E", + "a ción", + "ac ión", + "aci ón", + "E XT", + "EX T", + "Ġ license", + "Ġl icense", + "Ġlic ense", + "Ġlicens e", + "Ġ Long", + "ĠL ong", + "ĠLo ng", + "ĠLon g", + "Ġ accom", + "Ġacc om", + "Ġac com", + "Ġ ability", + "Ġab ility", + ". height", + ".h eight", + ".he ight", + "Act ive", + "Activ e", + "o logical", + "olog ical", + "ologic al", + "ologi cal", + "o ly", + "ol y", + ") ),", + ")) ,", + ". Se", + ".S e", + "Ġ parameter", + "Ġparam eter", + "Ġpara meter", + "Ġparamet er", + "p rite", + "pr ite", + "prit e", + "pri te", + "AB ILITY", + ". service", + ".s ervice", + ".serv ice", + ".ser vice", + "Ġ Group", + "ĠG roup", + "ĠGr oup", + "ĠGro up", + "_ query", + "_qu ery", + "_que ry", + "Ġ Item", + "ĠI tem", + "ĠIt em", + "i ning", + "in ing", + "ini ng", + "inin g", + "Ġ jud", + "Ġj ud", + "Ġju d", + "i ms", + "im s", + "f ix", + "fi x", + "i nder", + "in der", + "ind er", + "inde r", + "a gram", + "ag ram", + "agra m", + "agr am", + "Ġ functions", + "Ġfunction s", + "Ġfun ctions", + "Ġfunct ions", + "Ġex peri", + "Ġexp eri", + "Ġexper i", + "Ġ Em", + "ĠE m", + "Ġ rot", + "Ġr ot", + "Ġro t", + "Ġ pen", + "Ġp en", + "Ġpe n", + ". btn", + ".b tn", + ".bt n", + "Ġ AS", + "ĠA S", + "# ifdef", + "#if def", + "Ġ choice", + "Ġch oice", + "Ġcho ice", + "Ġ Page", + "ĠP age", + "ĠPa ge", + "ĠPag e", + "_ PRO", + "_P RO", + "_PR O", + "Q U", + "å ı", + "a ntity", + "ant ity", + "anti ty", + " Ń", + "w ords", + "word s", + "wor ds", + "Ġ readonly", + "Ġread only", + "Ġ flex", + "Ġf lex", + "Ġfl ex", + "Ġfle x", + "prot ected", + "protect ed", + "Ġ Any", + "ĠA ny", + "ĠAn y", + "Ġ characters", + "Ġchar acters", + "Ġcharacter s", + "en ced", + "ence d", + "enc ed", + "Ġ July", + "ĠJ uly", + "ĠJul y", + "ĠJu ly", + "i ler", + "il er", + "ile r", + "C ard", + "Car d", + "Ca rd", + "u rance", + "ur ance", + "ura nce", + "uran ce", + "Ġ rev", + "Ġre v", + "Ġr ev", + ". event", + ".e vent", + ".ev ent", + "a ly", + "al y", + "1 30", + "13 0", + "Ġw onder", + "Ġwon der", + "Ġwo nder", + "Ġ Port", + "ĠP ort", + "ĠPo rt", + "ĠPor t", + "Ġ legal", + "Ġl egal", + "Ġle gal", + "Ġleg al", + "r ole", + "ro le", + "rol e", + "Ġ ten", + "Ġt en", + "Ġte n", + "Ġg oes", + "Ġgo es", + "M P", + "wh ite", + ") :čĊ", + "): čĊ", + ") )čĊ", + ")) čĊ", + "Ġ reference", + "Ġre ference", + "Ġref erence", + "Ġrefer ence", + "Ġrefere nce", + "Ġ mis", + "Ġm is", + "Ġmi s", + "Ġ Project", + "ĠPro ject", + "ĠProj ect", + "i cks", + "ic ks", + "ick s", + "> &", + "C ON", + "CO N", + "Ġre pl", + "Ġrep l", + "Ġ regular", + "Ġreg ular", + "Ġregul ar", + "St orage", + "r amework", + "rame work", + "ram ework", + "Ġ goal", + "Ġgo al", + "Ġ touch", + "Ġt ouch", + "Ġto uch", + "Ġtou ch", + ". widget", + ".w idget", + "Ġ built", + "Ġb uilt", + "Ġbu ilt", + "d es", + "de s", + "P art", + "Par t", + "Pa rt", + "( re", + "(r e", + "Ġ worth", + "Ġw orth", + "Ġwor th", + "h ib", + "hi b", + "g ame", + "ga me", + "gam e", + "9 1", + "1 92", + "19 2", + "Ġ в", + "ĠÐ ²", + "a cion", + "ac ion", + "aci on", + "acio n", + "Ġ White", + "ĠWh ite", + "ĠWhit e", + "( type", + "(t ype", + "(typ e", + "( `", + "8 1", + "Ġ natural", + "Ġn atural", + "Ġnatur al", + "Ġnat ural", + "Ġin j", + "Ġi nj", + "Ġ calcul", + "Ġcal cul", + "Ġcalc ul", + "Ġ April", + "ĠApr il", + "ĠAp ril", + ". List", + ".L ist", + "Ġ associated", + "Ġassoci ated", + "Ġassociate d", + "Ġassoc iated", + "ĉ System", + "ĉS ystem", + "~ ~", + "= [", + "Ġ storage", + "Ġst orage", + "Ġstor age", + "Ġsto rage", + "Ġ bytes", + "Ġby tes", + "Ġbyte s", + "Ġbyt es", + "Ġ travel", + "Ġt ravel", + "Ġtr avel", + "Ġtra vel", + "Ġtrav el", + "Ġ sou", + "Ġs ou", + "Ġso u", + "Ġ passed", + "Ġp assed", + "Ġpass ed", + "Ġpas sed", + "Ġpasse d", + "! =", + "a script", + "as cript", + ". open", + ".op en", + ".o pen", + "Ġ grid", + "Ġg rid", + "Ġgr id", + "Ġgri d", + "Ġ bus", + "Ġb us", + "Ġbu s", + "Ġ recogn", + "Ġrec ogn", + "Ġreco gn", + "A b", + "Ġ hon", + "Ġh on", + "Ġho n", + "Ġ Center", + "ĠC enter", + "ĠCent er", + "Ġ prec", + "Ġp rec", + "Ġpr ec", + "Ġpre c", + "b uild", + "bu ild", + "7 3", + "HT ML", + "Ġ San", + "ĠS an", + "ĠSa n", + "Ġ countries", + "Ġc ountries", + "Ġcount ries", + "Ġcoun tries", + "a led", + "al ed", + "ale d", + "t oken", + "to ken", + "tok en", + "k t", + "Ġ qual", + "Ġqu al", + "Ġq ual", + "Ġqua l", + "L ast", + "La st", + "Las t", + "ad ow", + "ado w", + "Ġ manufact", + "Ġman ufact", + "i dad", + "id ad", + "ida d", + "j ango", + "ja ngo", + "jan go", + "jang o", + "N ext", + "Ne xt", + "x f", + ". a", + "Ġ porno", + "Ġp orno", + "Ġporn o", + "Ġpor no", + "Ġ PM", + "ĠP M", + "e rve", + "er ve", + "erv e", + "i ting", + "it ing", + "iti ng", + "itin g", + "_ th", + "_t h", + "c i", + "= None", + "=N one", + "g s", + "Ġ login", + "Ġlo gin", + "Ġlog in", + "at ives", + "ative s", + "ati ves", + "ativ es", + "' ]);Ċ", + "'] );Ċ", + "']) ;Ċ", + "']); Ċ", + "Ä ħ", + "Ġ ill", + "Ġi ll", + "Ġil l", + "I A", + "ch ildren", + "child ren", + "D O", + "Ġ levels", + "Ġlevel s", + "Ġlev els", + "Ġleve ls", + "Ġ {{", + "Ġ{ {", + "Ġ looks", + "Ġl ooks", + "Ġlo oks", + "Ġlook s", + "Ġ \"#", + "Ġ\" #", + "To String", + "ToStr ing", + "Ġ necessary", + "Ġn ecessary", + "Ġnecess ary", + "Ġ ĠĠĊ", + "ĠĠ ĠĊ", + "ĠĠĠ Ċ", + "c ell", + "ce ll", + "cel l", + "En try", + "Ent ry", + "Entr y", + "Ġ '#", + "Ġ' #", + "Ġext rem", + "Ġextr em", + "Se lector", + "Select or", + "Sel ector", + "Sele ctor", + "Ġ placeholder", + "Ġplace holder", + "L oad", + "Lo ad", + "Ġ released", + "Ġre leased", + "Ġrelease d", + "Ġrele ased", + "O RE", + "OR E", + "E numer", + "En umer", + "Enum er", + "Ġ TV", + "ĠT V", + "S ET", + "SE T", + "in q", + "P ress", + "Pr ess", + "Pre ss", + "Pres s", + "Ġ Department", + "ĠDe partment", + "ĠDep artment", + "ĠDepart ment", + "Ġ properties", + "Ġp roperties", + "Ġprop erties", + "Ġproper ties", + "Ġ respond", + "Ġres pond", + "Ġresp ond", + "S earch", + "Se arch", + "Sea rch", + "a el", + "ae l", + "Ġ requ", + "Ġre qu", + "Ġr equ", + "Ġreq u", + "Ġ Book", + "ĠB ook", + "ĠBo ok", + "ĠBoo k", + "/ Ċ", + "( st", + "(s t", + "Ġ financial", + "Ġfin ancial", + "Ġfinanc ial", + "Ġfinan cial", + "i cket", + "ic ket", + "ick et", + "_ input", + "_in put", + "_inp ut", + "Ġ threat", + "Ġth reat", + "Ġthr eat", + "( in", + "(i n", + "S trip", + "St rip", + "Str ip", + "ì Ŀ", + "ç ão", + "7 1", + "Ġe vidence", + "Ġev idence", + "Ġevid ence", + ") );", + ")) ;", + "Ġ Bro", + "ĠB ro", + "ĠBr o", + "Ġ [];Ċ", + "Ġ[ ];Ċ", + "Ġ[] ;Ċ", + "Ġ[]; Ċ", + "Ġ ou", + "Ġo u", + "b uf", + "bu f", + "S cript", + "Scr ipt", + "d at", + "da t", + "Ġ rule", + "Ġr ule", + "Ġru le", + "# import", + "= \"/", + "=\" /", + "S erial", + "Se rial", + "Ser ial", + "Ġ starting", + "Ġstart ing", + "Ġstar ting", + "[ index", + "[in dex", + "[ind ex", + "a e", + "Ġ contrib", + "Ġcon trib", + "Ġcont rib", + "Ġcontr ib", + "s ession", + "sess ion", + "_ new", + "_n ew", + "_ne w", + "u table", + "ut able", + "uta ble", + "o ber", + "ob er", + "obe r", + "Ġ \"./", + "Ġ\" ./", + "Ġ\". /", + "Ġ logger", + "Ġlo gger", + "Ġlog ger", + "Ġrec ently", + "Ġrecent ly", + "Ġ returned", + "Ġre turned", + "Ġreturn ed", + "č čĊ", + ") ))Ċ", + ")) )Ċ", + "))) Ċ", + "it ions", + "ition s", + "iti ons", + "Ġ seek", + "Ġse ek", + "Ġsee k", + "Ġ communic", + "Ġcomm unic", + "Ġcommun ic", + "Ġ \".", + "Ġ\" .", + "Ġ username", + "Ġuser name", + "Ġusern ame", + "E CT", + "EC T", + "D S", + "Ġ otherwise", + "Ġother wise", + "Ġ German", + "ĠG erman", + "ĠGer man", + "ĠGerm an", + ". aw", + ".a w", + "Ad apter", + "Ada pter", + "ix el", + "ixe l", + "Ġ systems", + "Ġs ystems", + "Ġsystem s", + "Ġsys tems", + "Ġsyst ems", + "Ġ drop", + "Ġd rop", + "Ġdr op", + "Ġdro p", + "8 3", + "Ġ structure", + "Ġstruct ure", + "Ġ $(\"#", + "Ġ$ (\"#", + "Ġ$( \"#", + "Ġ$(\" #", + "en cies", + "enc ies", + "enci es", + "an ning", + "ann ing", + "anni ng", + "Ġ Link", + "ĠL ink", + "ĠLin k", + "ĠLi nk", + "Ġ Response", + "ĠRes ponse", + "ĠRespons e", + "ĠResp onse", + "Ġ stri", + "Ġs tri", + "Ġst ri", + "Ġstr i", + "Å ¼", + "Ġ DB", + "ĠD B", + "æ Ĺ", + "and roid", + "andro id", + "andr oid", + "sub mit", + "o tion", + "ot ion", + "oti on", + "9 2", + "( @", + ". test", + ".t est", + ".te st", + "8 2", + "Ċ ĊĊĊĊĊĊĊ", + "ĊĊ ĊĊĊĊĊĊ", + "ĊĊĊĊ ĊĊĊĊ", + "ĊĊĊ ĊĊĊĊĊ", + "ĊĊĊĊĊĊ ĊĊ", + "ĊĊĊĊĊ ĊĊĊ", + "ĊĊĊĊĊĊĊ Ċ", + "] ;čĊ", + "]; čĊ", + "Ġdirect ly", + "Ġ \"%", + "Ġ\" %", + "r is", + "ri s", + "el ta", + "elt a", + "A IL", + "AI L", + ") {čĊ", + "){ čĊ", + "m ine", + "min e", + "mi ne", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "( k", + "b on", + "bo n", + "a sic", + "as ic", + "asi c", + "p ite", + "pi te", + "pit e", + "_ __", + "__ _", + "M ax", + "Ma x", + "Ġ errors", + "Ġerror s", + "Ġerr ors", + "Ġer rors", + "Ġerro rs", + "Ġ While", + "ĠWh ile", + "Ġ arguments", + "Ġarg uments", + "Ġargument s", + "Ġ ensure", + "Ġen sure", + "Ġens ure", + "R ight", + "- based", + "-b ased", + "-base d", + "W eb", + "We b", + "Ġ -=", + "Ġ- =", + "Ġint rodu", + "Ġintr odu", + "Ġintro du", + "Ġ Inst", + "ĠI nst", + "ĠIn st", + "ĠIns t", + "ĠW ash", + "ĠWas h", + "ĠWa sh", + "or din", + "ord in", + "j oin", + "jo in", + "D atabase", + "Data base", + "Dat abase", + "Ġ grad", + "Ġg rad", + "Ġgr ad", + "Ġgra d", + "Ġ usually", + "Ġus ually", + "Ġusual ly", + "Ġusu ally", + "I TE", + "IT E", + "P rops", + "Pro ps", + "Prop s", + "Pr ops", + "? >Ċ", + "?> Ċ", + "Ġ Go", + "ĠG o", + "@ Override", + "R EF", + "RE F", + "Ġ ip", + "Ġi p", + "ĠA ustral", + "ĠAust ral", + "ĠAu stral", + "ĠAustr al", + "Ġ ist", + "Ġis t", + "Ġi st", + "View ById", + "Ġ serious", + "Ġse rious", + "Ġser ious", + "Ġseri ous", + "Ġ customer", + "Ġc ustomer", + "Ġcustom er", + "Ġcust omer", + ". prototype", + ".prot otype", + ".proto type", + "o do", + "od o", + "c or", + "co r", + "Ġ door", + "Ġd oor", + "Ġdo or", + "Ġ WITHOUT", + "ĠWITH OUT", + "Ġ plant", + "Ġp lant", + "Ġpl ant", + "Ġplan t", + "Ġpla nt", + "Ġb egan", + "Ġbe gan", + "Ġbeg an", + "Ġ distance", + "Ġd istance", + "Ġdist ance", + "Ġdi stance", + "( )).", + "() ).", + "()) .", + "Ġch ance", + "Ġcha nce", + "Ġchan ce", + "Ġ ord", + "Ġo rd", + "Ġor d", + "c ame", + "ca me", + "cam e", + "pr agma", + "Ġ protect", + "Ġprot ect", + "Ġprote ct", + "r agment", + "ra gment", + "rag ment", + "Ġ Node", + "ĠN ode", + "ĠNo de", + "e ning", + "en ing", + "eni ng", + "enin g", + "Ñ ĩ", + "Ġ route", + "Ġr oute", + "Ġro ute", + "Ġrout e", + "Ġrou te", + "Ġ School", + "ĠS chool", + "ĠSch ool", + "ĠScho ol", + "h i", + "Ġne ighb", + "Ġneigh b", + "A fter", + "Af ter", + "l icit", + "lic it", + "li cit", + "Ġ contr", + "Ġcon tr", + "Ġcont r", + "Ġ primary", + "Ġpr imary", + "Ġprim ary", + "Ġpri mary", + "Ġprima ry", + "A A", + ".Write Line", + "ut ils", + "util s", + "uti ls", + "Ġ bi", + "Ġb i", + "R ed", + "Re d", + ".L inq", + ". object", + ".o bject", + ".obj ect", + ".ob ject", + "Ġ leaders", + "Ġle aders", + "Ġlead ers", + "Ġleader s", + "un ities", + "unit ies", + "uni ties", + "Ġ gun", + "Ġg un", + "Ġgu n", + "o nth", + "on th", + "ont h", + "Ġ Dev", + "ĠD ev", + "ĠDe v", + "F ILE", + "FI LE", + "Ġ comments", + "Ġcom ments", + "Ġcomm ents", + "Ġcomment s", + "Ġcomme nts", + "_ len", + "_l en", + "_le n", + "ar row", + "arr ow", + "arro w", + "a mount", + "am ount", + "amo unt", + "R ange", + "Ra nge", + "s ert", + "se rt", + "ser t", + "Grid View", + "Ġ updated", + "Ġup dated", + "Ġupdate d", + "Ġupd ated", + "Ġ Mo", + "ĠM o", + "Ġ inform", + "Ġin form", + "Ġinfo rm", + "Ġinf orm", + "oci ety", + "a la", + "al a", + "A ccess", + "Ac cess", + "Acc ess", + "Ġ hab", + "Ġh ab", + "Ġha b", + "Ġ creat", + "Ġc reat", + "Ġcr eat", + "Ġcre at", + "Ġcrea t", + "_ arg", + "_a rg", + "_ar g", + "Ġ January", + "ĠJan uary", + "Ġ Day", + "ĠD ay", + "ĠDa y", + "\" )čĊ", + "\") čĊ", + "u ple", + "up le", + "d ocument", + "doc ument", + "gor ith", + "gorit h", + "m enu", + "me nu", + "men u", + "Ġ Over", + "ĠO ver", + "ĠOv er", + "b b", + ". title", + ".t itle", + "_ out", + "_o ut", + "Ġ led", + "Ġl ed", + "Ġle d", + "u ri", + "ur i", + "Ġ ?> < /", + "g l", + "Ġ bank", + "Ġb ank", + "Ġban k", + "Ġba nk", + "ay ment", + "ĉ printf", + "ĉprint f", + "M D", + "Ġ sample", + "Ġs ample", + "Ġsam ple", + "Ġsamp le", + "Ġ hands", + "Ġh ands", + "Ġhand s", + "Ġha nds", + "Ġhan ds", + "Ġ Version", + "ĠV ersion", + "ĠVers ion", + "u ario", + "ua rio", + "uar io", + "Ġ offers", + "Ġof fers", + "Ġoff ers", + "Ġoffer s", + "ity Engine", + "Ġ shape", + "Ġs hape", + "Ġsh ape", + "Ġsha pe", + "Ġ sleep", + "Ġs leep", + "Ġsle ep", + "Ġslee p", + "_ point", + "_p oint", + "_po int", + "S ettings", + "Set tings", + "Setting s", + "Ġ achie", + "Ġa chie", + "Ġach ie", + "Ġ sold", + "Ġs old", + "Ġso ld", + "Ġsol d", + "o ta", + "ot a", + ". bind", + ".b ind", + ".bin d", + ".bi nd", + "A m", + "Ġ safe", + "Ġs afe", + "Ġsa fe", + "Ġsaf e", + "St ore", + "Ġ shared", + "Ġsh ared", + "Ġshare d", + "Ġsha red", + "Ġshar ed", + "Ġ priv", + "Ġp riv", + "Ġpr iv", + "Ġpri v", + "_ VAL", + "_V AL", + "Ġs ens", + "Ġse ns", + "Ġsen s", + ") {", + "Ġ remember", + "Ġre member", + "Ġrem ember", + "sh ared", + "sha red", + "share d", + "e lement", + "el ement", + "ele ment", + "elem ent", + "Ġ shoot", + "Ġs hoot", + "Ġsh oot", + "Ġsho ot", + "V ert", + "Ver t", + "Ve rt", + "c out", + "co ut", + "cou t", + "Ġ env", + "Ġe nv", + "Ġen v", + "_ label", + "_l abel", + "_lab el", + "_la bel", + "Ġ >Ċ", + "Ġ> Ċ", + "r un", + "ru n", + "Ġ scene", + "Ġs cene", + "Ġsc ene", + "Ġscen e", + "Ġsce ne", + "( array", + "(a rray", + "(arr ay", + "(ar ray", + "d evice", + "de vice", + "dev ice", + "_ title", + "_t itle", + "_ti tle", + "a gon", + "ag on", + "ago n", + "] čĊ", + "a by", + "ab y", + "Ġbe came", + "Ġbec ame", + "bo olean", + "bool ean", + "boo lean", + "Ġ park", + "Ġp ark", + "Ġpar k", + "Ġpa rk", + "Ġ Code", + "ĠC ode", + "ĠCo de", + "ĠCod e", + "up load", + "r iday", + "ri day", + "rid ay", + "Ġ September", + "ĠSept ember", + "ĠSep tember", + "F e", + "Ġ sen", + "Ġs en", + "Ġse n", + "c ing", + "ci ng", + "cin g", + "F L", + "C ol", + "Co l", + "u ts", + "ut s", + "_ page", + "_p age", + "_pag e", + "_pa ge", + "i nn", + "in n", + "Ġim plied", + "Ġimp lied", + "Ġimpl ied", + "a ling", + "al ing", + "ali ng", + "alin g", + "Ġyour self", + "Ġyours elf", + ". Count", + ".C ount", + ".Co unt", + "con f", + "co nf", + "Ġ aud", + "Ġa ud", + "Ġau d", + "_ init", + "_in it", + "_i nit", + "_ini t", + ". )", + "Ġw rote", + "Ġwr ote", + "0 03", + "00 3", + "N G", + ". Error", + ".E rror", + ".Err or", + "ä »", + ". for", + ".f or", + "Ġ equal", + "Ġe qual", + "Ġequ al", + "Ġeq ual", + "Ġ Request", + "ĠRe quest", + "ĠReq uest", + "Ġ serial", + "Ġs erial", + "Ġse rial", + "Ġser ial", + "Ġseria l", + "Ġseri al", + "Ġ allows", + "Ġall ows", + "Ġallow s", + "Ġallo ws", + "X X", + "Ġ middle", + "Ġm iddle", + "Ġmid dle", + "Ġmidd le", + "c hor", + "ch or", + "cho r", + "1 95", + "19 5", + "9 4", + "à ¸", + "er val", + "erv al", + "erva l", + ". Column", + ".C olumn", + ".Col umn", + "re ading", + "read ing", + "rea ding", + "Ġ escort", + "Ġesc ort", + "Ġ August", + "ĠAug ust", + "Ġquick ly", + "Ġwe ap", + "Ġ CG", + "ĠC G", + "ro pri", + "rop ri", + "h o", + "Ġ cop", + "Ġc op", + "Ġco p", + "( struct", + "(str uct", + "Ġ Big", + "ĠB ig", + "ĠBi g", + "Ġ vs", + "Ġv s", + "Ġf requ", + "Ġfr equ", + "Ġfre qu", + "Ġfreq u", + ". Value", + ".V alue", + ".Val ue", + "Ġ actions", + "Ġa ctions", + "Ġact ions", + "Ġaction s", + "Ġ proper", + "Ġpro per", + "Ġpr oper", + "Ġprop er", + "Ġ inn", + "Ġin n", + "Ġi nn", + "Ġ objects", + "Ġobject s", + "Ġobj ects", + "Ġ matrix", + "Ġm atrix", + "Ġmat rix", + "av ascript", + "ava script", + "Ġ ones", + "Ġo nes", + "Ġon es", + "Ġone s", + ". group", + ".g roup", + ".gr oup", + "Ġ green", + "Ġg reen", + "Ġgr een", + "Ġgre en", + "Ġ paint", + "Ġp aint", + "Ġpain t", + "Ġpa int", + "Ġpai nt", + "o ols", + "ool s", + "oo ls", + "y cl", + "yc l", + "en code", + "enc ode", + "enco de", + "o lt", + "ol t", + "com ment", + "comm ent", + ". api", + ".ap i", + ".a pi", + "D ir", + "Di r", + "Ġ une", + "Ġu ne", + "Ġun e", + "iz ont", + "izon t", + "izo nt", + ". position", + ".p osition", + ".pos ition", + "Ġde signed", + "Ġdes igned", + "Ġdesign ed", + "_ val", + "_v al", + "_va l", + "a vi", + "av i", + "i ring", + "ir ing", + "iri ng", + "t ab", + "ta b", + "Ġ layer", + "Ġl ayer", + "Ġla yer", + "Ġlay er", + "Ġ views", + "Ġview s", + "Ġvi ews", + "Ġvie ws", + "Ġ reve", + "Ġre ve", + "Ġr eve", + "Ġrev e", + "r ael", + "ra el", + "Ġ ON", + "ĠO N", + "r ics", + "ri cs", + "ric s", + "1 60", + "16 0", + "n p", + "Ġ core", + "Ġc ore", + "Ġco re", + "Ġcor e", + "( ));čĊ", + "() );čĊ", + "()) ;čĊ", + "()); čĊ", + "M ain", + "Ma in", + "Ġ expert", + "Ġex pert", + "Ġexp ert", + "Ġexper t", + "ĉ ĉčĊ", + "ĉĉ čĊ", + "_ en", + "_e n", + "Ġ />", + "Ġ/ >", + "ut ter", + "utt er", + "I AL", + "IA L", + "a ils", + "ail s", + "ai ls", + "Ġ King", + "ĠK ing", + "ĠKi ng", + "ĠKin g", + "* /ĊĊ", + "*/ ĊĊ", + "*/Ċ Ċ", + "Ġ Met", + "ĠM et", + "ĠMe t", + "_ end", + "_e nd", + "_en d", + "ad dr", + "add r", + "o ra", + "or a", + "Ġ ir", + "Ġi r", + "M in", + "Mi n", + "Ġsur pr", + "Ġre pe", + "Ġrep e", + "Ġ directory", + "Ġd irectory", + "Ġdirect ory", + "Ġdirector y", + "P UT", + "PU T", + "- S", + "Ġ election", + "Ġe lection", + "Ġel ection", + "Ġelect ion", + "Ġele ction", + "h aps", + "ha ps", + "hap s", + ". pre", + ".p re", + ".pr e", + "c m", + "Value s", + "Val ues", + "Ġ \"Ċ", + "Ġ\" Ċ", + "c olumn", + "col umn", + "i vil", + "iv il", + "ivi l", + "Log in", + "Lo gin", + "in ue", + "inu e", + "9 3", + "Ġ beautiful", + "Ġbe autiful", + "Ġbeaut iful", + "Ġ secret", + "Ġs ecret", + "Ġse cret", + "Ġsec ret", + "Ġsecre t", + "( event", + "(e vent", + "(ev ent", + "Ġ chat", + "Ġc hat", + "Ġch at", + "Ġcha t", + "u ms", + "um s", + "Ġ origin", + "Ġor igin", + "Ġorig in", + "Ġori gin", + "Ġ effects", + "Ġe ffects", + "Ġeffect s", + "Ġeff ects", + "Ġ management", + "Ġman agement", + "Ġmanage ment", + "Ġmana gement", + "i lla", + "il la", + "ill a", + "t k", + "Ġ setting", + "Ġs etting", + "Ġset ting", + "Ġsett ing", + "Ġ Cour", + "ĠC our", + "ĠCo ur", + "ĠCou r", + "Ġ massage", + "Ġm assage", + "Ġmass age", + "Ġmas sage", + "Ġmassa ge", + "ĉ end", + "ĉe nd", + "ĉen d", + "Ġ happy", + "Ġh appy", + "Ġhapp y", + "Ġha ppy", + "Ġhap py", + "Ġ finish", + "Ġf inish", + "Ġfin ish", + "Ġfi nish", + "Ġ camera", + "Ġc amera", + "Ġcame ra", + "Ġcam era", + "Ġcamer a", + "Ġ Ver", + "ĠV er", + "ĠVe r", + "ĠDem ocr", + "ĠDemo cr", + "Ġ Her", + "ĠH er", + "ĠHe r", + "( Q", + "c ons", + "con s", + "co ns", + "i ta", + "it a", + "Ġ '.", + "Ġ' .", + "{ }", + "ĉ C", + "Ġ stuff", + "Ġst uff", + "Ġstu ff", + "1 94", + "19 4", + "Ġ :Ċ", + "Ġ: Ċ", + "Ġ AR", + "ĠA R", + "T ask", + "Ta sk", + "h idden", + "hi dden", + "hid den", + "e ros", + "er os", + "ero s", + "I GN", + "IG N", + "at io", + "ati o", + "Ġ Health", + "ĠHe alth", + "ĠHeal th", + "ol ute", + "olut e", + "olu te", + "En ter", + "Ent er", + "' >", + "Ġ Twitter", + "ĠT witter", + "ĠTw itter", + "Ġ County", + "ĠC ounty", + "ĠCount y", + "ĠCou nty", + "ĠCoun ty", + "s cribe", + "scri be", + "scr ibe", + "Ġ= >Ċ", + "Ġ=> Ċ", + "Ġ hy", + "Ġh y", + "f it", + "fi t", + "Ġm ilitary", + "Ġmilit ary", + "Ġmil itary", + "Ġmilitar y", + "Ġ sale", + "Ġs ale", + "Ġsa le", + "Ġsal e", + "re quired", + "require d", + "requ ired", + "n on", + "no n", + "boot strap", + "h old", + "ho ld", + "hol d", + "r im", + "ri m", + "- old", + "-o ld", + "Ġ Down", + "ĠD own", + "ĠDo wn", + "ĠDow n", + "Ġ mention", + "Ġm ention", + "Ġmen tion", + "Ġment ion", + "cont act", + "_ group", + "_g roup", + "_gr oup", + "o day", + "od ay", + "oda y", + "Ġ town", + "Ġt own", + "Ġto wn", + "Ġtow n", + "Ġ solution", + "Ġs olution", + "Ġsol ution", + "u ate", + "ua te", + "uat e", + "el ling", + "ell ing", + "elli ng", + "] ->", + "]- >", + "o tes", + "ot es", + "ote s", + "en tal", + "ent al", + "enta l", + "o men", + "om en", + "ome n", + "osp ital", + "Ġ Sup", + "ĠS up", + "ĠSu p", + "_ EN", + "_E N", + "Ġ slow", + "Ġs low", + "Ġsl ow", + "Ġslo w", + "SE SSION", + "SES SION", + "Ġ blue", + "Ġb lue", + "Ġbl ue", + "a go", + "ag o", + "Ġl ives", + "Ġli ves", + "Ġlive s", + "Ġliv es", + "Ġ ^", + ". un", + ".u n", + "i nst", + "in st", + "ins t", + "e nge", + "en ge", + "eng e", + "Ġ customers", + "Ġcustom ers", + "Ġcustomer s", + "Ġcust omers", + "Ġ cast", + "Ġc ast", + "Ġca st", + "Ġcas t", + "ud get", + "udge t", + "ï¼ ģ", + "ic ens", + "ice ns", + "Ġd etermin", + "Ġde termin", + "Ġdeter min", + "Ġdeterm in", + "Se lected", + "Select ed", + "Sel ected", + "_ pl", + "_p l", + "ue ue", + "Ġ dark", + "Ġd ark", + "Ġda rk", + "Ġdar k", + "/ /ĊĊ", + "// ĊĊ", + "//Ċ Ċ", + "s i", + "th ern", + "ther n", + "the rn", + "Ġ Japan", + "ĠJ apan", + "ĠJa pan", + "ĠJap an", + "/ w", + "P U", + "Ġ East", + "ĠE ast", + "ĠEa st", + "o vie", + "ov ie", + "ovi e", + "Ġ package", + "Ġp ackage", + "Ġpack age", + "Ġ nor", + "Ġn or", + "Ġno r", + "Ġ api", + "Ġa pi", + "Ġap i", + "b ot", + "bo t", + "\" ];Ċ", + "\"] ;Ċ", + "\"]; Ċ", + "_ post", + "_p ost", + "_pos t", + "_po st", + "u late", + "ul ate", + "ula te", + "Ġ club", + "Ġc lub", + "Ġcl ub", + "' ));Ċ", + "') );Ċ", + "')) ;Ċ", + "')); Ċ", + "Ġ loop", + "Ġl oop", + "Ġlo op", + "P IO", + "PI O", + "i one", + "ion e", + "io ne", + "s hot", + "sh ot", + "In itial", + "Init ial", + "Ġ played", + "Ġpl ayed", + "Ġplay ed", + "reg ister", + "regist er", + "r ought", + "ro ught", + "rou ght", + "rough t", + "_ max", + "_m ax", + "_ma x", + "ace ment", + "ac ement", + "m atch", + "mat ch", + "raph ics", + "raphic s", + "A ST", + "AS T", + "Ġ existing", + "Ġex isting", + "Ġexist ing", + "Ġ complex", + "Ġcom plex", + "Ġcomp lex", + "Ġcomple x", + "Ġcompl ex", + "D A", + ". Ch", + ".C h", + ". common", + ".com mon", + ".comm on", + "m o", + "Ġ' ../../", + "Ġ'../ ../", + "Ġ'.. /../", + "i to", + "it o", + "Ġ analysis", + "Ġan alysis", + "Ġanal ysis", + "Ġanaly sis", + "Ġanalys is", + "Ġ deliver", + "Ġdel iver", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "i dx", + "id x", + "à ł", + "o ngo", + "on go", + "ong o", + "Ġ English", + "ĠEng lish", + "ĠEngl ish", + "< !--", + " \";Ċ", + ">\" ;Ċ", + ">\"; Ċ", + "_ UN", + "_U N", + "ĉ std", + "ĉs td", + "ĉst d", + "o ded", + "od ed", + "ode d", + "Ġ calls", + "Ġc alls", + "Ġcall s", + "Ġcal ls", + "h ere", + "he re", + "her e", + "R el", + "Re l", + "Ġ brand", + "Ġb rand", + "Ġbr and", + "Ġbra nd", + "Ġbran d", + "back ground", + "g a", + "_ address", + "_add ress", + "_addr ess", + "_ad dress", + "_ params", + "_param s", + "_par ams", + "_para ms", + "_pa rams", + "C ategory", + "1 03", + "10 3", + "Ġ India", + "ĠIn dia", + "ĠInd ia", + "ĠIndi a", + "_ event", + "_e vent", + "_ev ent", + "_even t", + "Ġ ing", + "Ġin g", + "Ġi ng", + "R ender", + "Re nder", + "Ren der", + ". cl", + ".c l", + "um py", + "ump y", + "Ġ pet", + "Ġp et", + "Ġpe t", + "F C", + "Ġ Ant", + "ĠA nt", + "ĠAn t", + "E xt", + "Ex t", + "Ġ charge", + "Ġch arge", + "Ġchar ge", + "Ġcharg e", + "e ned", + "en ed", + "ene d", + "g rad", + "gr ad", + "gra d", + "E O", + "Ġ depend", + "Ġd epend", + "Ġde pend", + "Ġdep end", + "Ġ .ĊĊ", + "Ġ. ĊĊ", + "Ġ.Ċ Ċ", + "f rame", + "fr ame", + "fra me", + "fram e", + "Ġ df", + "Ġd f", + "Ġ huge", + "Ġh uge", + "Ġhug e", + "Ġhu ge", + "Ġ PART", + "ĠP ART", + "ĠPA RT", + "ĠPAR T", + "e ds", + "ed s", + "; ;", + "Ġ AM", + "ĠA M", + "Ġ basic", + "Ġb asic", + "Ġbas ic", + "Ġba sic", + "Ġ Let", + "ĠL et", + "ĠLe t", + "l ich", + "lic h", + "li ch", + "Ġ arm", + "Ġa rm", + "Ġar m", + "Ġ star", + "Ġs tar", + "Ġst ar", + "Ġsta r", + "Ġf ederal", + "Ġfed eral", + "Ġfeder al", + "W ork", + "Wo rk", + "Ġ carry", + "Ġc arry", + "Ġcar ry", + "Ġcarr y", + "Ġ Israel", + "ĠIs rael", + "( obj", + "(o bj", + "(ob j", + "= {{", + "={ {", + "Ġ saved", + "Ġs aved", + "Ġsa ved", + "Ġsave d", + "Ġsav ed", + "Ġ syn", + "Ġs yn", + "Ġsy n", + "Ġ constant", + "Ġcon stant", + "Ġconst ant", + "Ġcons tant", + "V ENT", + "VE NT", + "VEN T", + "Ġ positive", + "Ġpos itive", + "Ġposit ive", + "Ġ conduct", + "Ġcon duct", + "Ġcond uct", + "Ġconduc t", + "Ġcondu ct", + "Ġ skin", + "Ġs kin", + "Ġsk in", + "Ġski n", + "Ġear lier", + "Ġ layout", + "Ġl ayout", + "Ġlay out", + "Ġ IP", + "ĠI P", + "O UR", + "OU R", + "Ġ tim", + "Ġt im", + "Ġti m", + "style sheet", + "styles heet", + "_ cl", + "_c l", + "Ġ Card", + "ĠC ard", + "ĠCar d", + "ĠCa rd", + "++ ){Ċ", + "++) {Ċ", + "++){ Ċ", + "Ġtem per", + "Ġtemp er", + "Ġ David", + "ĠD avid", + "ĠDav id", + "ĠDa vid", + "ĉ try", + "ĉt ry", + "ĉtr y", + ". dart", + ".d art", + ".da rt", + "Ġw ants", + "Ġwant s", + "Ġwa nts", + "Ġwan ts", + "Ġ picture", + "Ġp icture", + "Ġpic ture", + "Ġpict ure", + "Ġ videos", + "Ġv ideos", + "Ġvideo s", + "Ġvid eos", + "Ġvide os", + "Ġ Comm", + "ĠC omm", + "ĠCom m", + "ĠCo mm", + "is ions", + "ision s", + "isi ons", + "_ MAX", + "_M AX", + "_MA X", + "M apping", + "Map ping", + "Ma pping", + "- content", + "-c ontent", + "-con tent", + "-cont ent", + "Ġ Ear", + "ĠE ar", + "ĠEa r", + "- de", + "-d e", + "Ġp rem", + "Ġpr em", + "Ġpre m", + "b ruary", + "br uary", + "bru ary", + "bruar y", + "Ġ components", + "Ġcom ponents", + "Ġcomp onents", + "Ġcomponent s", + "Ġthrough out", + "Ġ pull", + "Ġp ull", + "Ġpul l", + "Ġpu ll", + "Ġ pages", + "Ġp ages", + "Ġpage s", + "Ġpa ges", + "Ġpag es", + "e nte", + "en te", + "ent e", + "res pond", + "resp ond", + "Ġ gas", + "Ġg as", + "Ġga s", + "cript or", + "Ġ edge", + "Ġe dge", + "Ġed ge", + "Ġ bound", + "Ġb ound", + "Ġbo und", + "Ġbou nd", + "A CT", + "AC T", + "* *****", + "** ****", + "**** **", + "*** ***", + "***** *", + "Ġ creating", + "Ġc reating", + "Ġcr eating", + "Ġcre ating", + "Ġcreat ing", + "Ġcrea ting", + "Ġ CH", + "ĠC H", + "Ġ nullptr", + "Ġnull ptr", + "B r", + "+ '", + ". co", + ".c o", + "> ::", + ">: :", + "Ġ learning", + "Ġl earning", + "Ġle arning", + "Ġlearn ing", + "Ġlear ning", + ". Length", + ".L ength", + ".Le ngth", + ".Len gth", + "_ SH", + "_S H", + "Ġ patients", + "Ġpat ients", + "Ġpatient s", + "A IN", + "AI N", + "Ġ kids", + "Ġk ids", + "Ġkid s", + "Ġki ds", + "Ġ comfort", + "Ġcom fort", + "Ġ shown", + "Ġsh own", + "Ġshow n", + "Ġsho wn", + "ug ins", + "ugin s", + "ugi ns", + "Ġ Back", + "ĠB ack", + "ĠBa ck", + "ĠBac k", + "e lla", + "el la", + "ell a", + "_ CL", + "_C L", + "Ġ lat", + "Ġl at", + "Ġla t", + "Ġ dispatch", + "Ġdis patch", + "Ġdisp atch", + "Ġ classes", + "Ġc lasses", + "Ġclass es", + "Ġcl asses", + "Ġclasse s", + "Ġclas ses", + ". at", + ".a t", + ". begin", + ".b egin", + ".be gin", + "Ġ successful", + "Ġsuccess ful", + "b an", + "ba n", + "Ġob tain", + "Ġobt ain", + "Ġ Sl", + "ĠS l", + "Ġ lack", + "Ġl ack", + "Ġla ck", + "Ġlac k", + "it erator", + "iter ator", + "T hread", + "Th read", + "Thr ead", + "( size", + "(s ize", + "(si ze", + "Ġ none", + "Ġn one", + "Ġno ne", + "Ġnon e", + ". has", + ".h as", + "_ X", + "s ort", + "so rt", + "n ap", + "na p", + "p et", + "pe t", + "b in", + "bi n", + "7 00", + "70 0", + "Ġ Canada", + "ĠCan ada", + "T hey", + "The y", + "Th ey", + "Ġd ans", + "Ġda ns", + "Ġdan s", + "Ġ Mat", + "ĠM at", + "ĠMa t", + "< td", + "'", + "'=> '", + "'= >'", + "Ġ Paul", + "ĠP aul", + "ĠPa ul", + "m as", + "ma s", + "ĉ print", + "ĉp rint", + "ĉpr int", + "( len", + "(l en", + "(le n", + "f d", + "Ġ );", + "Ġ) ;", + ". Event", + ".E vent", + "q li", + "ql i", + "i rit", + "ir it", + "iri t", + "ie lds", + "ield s", + "iel ds", + "o man", + "om an", + "oma n", + "Ġ Top", + "ĠT op", + "ĠTo p", + "Ġ vote", + "Ġv ote", + "Ġvo te", + "Ġvot e", + "Ġ mask", + "Ġm ask", + "Ġma sk", + "Ġmas k", + "Ġ theme", + "Ġth eme", + "Ġthe me", + "Ġthem e", + "- Ċ", + "Ġ props", + "Ġp rops", + "Ġpro ps", + "Ġpr ops", + "Ġprop s", + "Ġ fine", + "Ġf ine", + "Ġfin e", + "Ġfi ne", + "Ġ writer", + "Ġw riter", + "Ġwrit er", + "Ġwr iter", + "Ġwrite r", + "_ offset", + "_off set", + "_o ffset", + "c ar", + "ca r", + "Ġ altern", + "Ġal tern", + "Ġalt ern", + "Ġalter n", + "Ġalte rn", + "Ġ copyright", + "Ġc opyright", + "Ġcopy right", + "Ġ destroy", + "Ġd estroy", + "Ġde stroy", + "Ġdest roy", + "p per", + "pp er", + "ppe r", + "Ġ generate", + "Ġg enerate", + "Ġgener ate", + "Ġgen erate", + "Ġgene rate", + "Ġgenera te", + "p ped", + "pp ed", + "ppe d", + "âĢĻ d", + "Ġ ĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĊ", + "ĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠ Ċ", + "m ake", + "ma ke", + "mak e", + "Ġ Show", + "ĠS how", + "ĠSh ow", + "ĠSho w", + "Ġ browser", + "Ġb rowser", + "Ġbrows er", + "Ġbrowse r", + "Ġbrow ser", + "Ġ favorite", + "Ġf avorite", + "Ġfavor ite", + "Ġ career", + "Ġcar eer", + "Ġcare er", + "Ġhapp ened", + "Ġhappen ed", + "( char", + "(c har", + "(ch ar", + "Ġ recommend", + "Ġre commend", + "Ġrecomm end", + "Ġ liter", + "Ġl iter", + "Ġli ter", + "Ġlit er", + "Ġlite r", + ". filter", + ".f ilter", + ".fil ter", + "g rade", + "gr ade", + "grad e", + "gra de", + "Ġ £", + "Ġ £", + "P hone", + "Ph one", + "o ms", + "om s", + "Ġ named", + "Ġn amed", + "Ġname d", + "Ġna med", + "Ġnam ed", + "- label", + "-l abel", + "-la bel", + "i po", + "ip o", + "Ġ Other", + "ĠO ther", + "ĠOt her", + "Ġ panel", + "Ġp anel", + "Ġpa nel", + "Ġpan el", + "Ġpane l", + "Ġ rock", + "Ġr ock", + "Ġro ck", + "Ġroc k", + "S cale", + "Sc ale", + "ĉ assert", + "ĉas sert", + "Ð ´", + "Ġ trust", + "Ġt rust", + "Ġtr ust", + "f ront", + "fr ont", + "Ġd emon", + "Ġde mon", + "Ġdem on", + "Ġdemo n", + "A r", + "N et", + "Ne t", + "Ġ economic", + "Ġe conomic", + "Ġecon omic", + "Ġeconom ic", + "Ġec onomic", + "f ooter", + "fo oter", + "foot er", + "foo ter", + "Ġ race", + "Ġr ace", + "Ġrac e", + "Ġra ce", + "( node", + "(n ode", + "(no de", + "Ġ Option", + "ĠO ption", + "ĠOp tion", + "ĠOpt ion", + "s plit", + "sp lit", + "spl it", + "Ġ physical", + "Ġph ysical", + "Ġphys ical", + "Ġphysic al", + "i fest", + "if est", + "ife st", + "ifes t", + "Ġ removed", + "Ġre moved", + "Ġrem oved", + "Ġremove d", + ". http", + ".h ttp", + ".ht tp", + ") ),Ċ", + ")) ,Ċ", + ")), Ċ", + "Ġlo oked", + "Ġlook ed", + "' ;", + "d ing", + "di ng", + "din g", + "g est", + "ge st", + "ges t", + "atur day", + "/ licenses", + "/lic enses", + "/license s", + "P rice", + "Pr ice", + "Pri ce", + "Ġ dro", + "Ġd ro", + "Ġdr o", + "Ġt owards", + "Ġto wards", + "Ġtoward s", + "Ġtow ards", + "Ġ uns", + "Ġu ns", + "Ġun s", + "Ġ CL", + "ĠC L", + "ĉ static", + "ĉst atic", + "ĉstat ic", + "Ġ rows", + "Ġr ows", + "Ġro ws", + "Ġrow s", + "Ġ define", + "Ġde fine", + "Ġdef ine", + "Ġdefin e", + ". replace", + ".re place", + ".rep lace", + "Ġ father", + "Ġf ather", + "Ġfa ther", + "Ġfat her", + "Ġ Design", + "ĠD esign", + "ĠDe sign", + "ĠDes ign", + "as sign", + "ass ign", + "assi gn", + "m ut", + "mu t", + "D evice", + "De vice", + "Dev ice", + "D id", + "Di d", + "' ))Ċ", + "') )Ċ", + "')) Ċ", + "o metry", + "om etry", + "ome try", + "omet ry", + "ometr y", + "ay load", + "Ġ histor", + "Ġh istor", + "Ġhis tor", + "Ġhist or", + "Ġhi stor", + "Ġhisto r", + "Ġ Param", + "ĠP aram", + "ĠPar am", + "ĠPa ram", + "ĠPara m", + "Ġ Boolean", + "ĠBo olean", + "ĠBool ean", + "ĠBoo lean", + "Ġ nature", + "Ġn ature", + "Ġna ture", + "Ġnatur e", + "Ġnat ure", + "Ġ js", + "Ġj s", + "Ġ nation", + "Ġn ation", + "Ġna tion", + "Ġnat ion", + "i h", + "Ġ discover", + "Ġdis cover", + "Ġdisc over", + "Ġdisco ver", + "s em", + "se m", + "H andle", + "Hand le", + "Han dle", + "ĉ r", + "Ġ Techn", + "ĠT echn", + "ĠTe chn", + "ĠTech n", + "ĠTec hn", + "Ġ wall", + "Ġw all", + "Ġwa ll", + "Ġwal l", + "{ $", + "@ property", + "Ġ\" ../", + "Ġ\". ./", + "Ġ\".. /", + "Ġ exam", + "Ġex am", + ". draw", + ".d raw", + ".dr aw", + "o pping", + "op ping", + "opp ing", + "Ġn early", + "Ġnear ly", + "Ġ cool", + "Ġc ool", + "Ġco ol", + "Ġin depend", + "Ġind epend", + "Ġinde pend", + "R ES", + "RE S", + "Ġ handler", + "Ġh andler", + "Ġhand ler", + "Ġhandle r", + "Ġ Monday", + "ĠMon day", + "ĠMond ay", + "Ġ sun", + "Ġs un", + "Ġsu n", + "St yles", + "Style s", + "ous ly", + "Ġ ĉ", + "v est", + "ve st", + "ves t", + "D isplay", + "Dis play", + "Disp lay", + "( y", + "at ically", + "atic ally", + "atical ly", + "Ġ predict", + "Ġp redict", + "Ġpre dict", + "Ġpred ict", + "Ġpredic t", + "y ing", + "yi ng", + "Ġ sometimes", + "Ġs ometimes", + "Ġsome times", + "Ġsom etimes", + "Ġsometime s", + "\" ]Ċ", + "\"] Ċ", + "Ġ drink", + "Ġd rink", + "Ġdr ink", + "Ġdri nk", + "Ġ bul", + "Ġb ul", + "Ġbu l", + "if ications", + "ific ations", + "ification s", + ". insert", + ".in sert", + ".ins ert", + ". reg", + ".re g", + ".r eg", + "Ġ tests", + "Ġt ests", + "Ġte sts", + "Ġtest s", + "Ġtes ts", + "Al ignment", + "Align ment", + "Ġal leg", + "Ġall eg", + "Ġalle g", + "Ġ attribute", + "Ġat tribute", + "Ġattrib ute", + "Ġ Note", + "ĠN ote", + "ĠNo te", + "ĠNot e", + "Ġmy self", + "Ġmys elf", + "a rts", + "ar ts", + "art s", + "N ow", + "No w", + "Ġ interesting", + "Ġinter esting", + "Ġinterest ing", + "Ġinteres ting", + "l ients", + "li ents", + "lient s", + "lie nts", + "lien ts", + "Ġ population", + "Ġpop ulation", + "Ġpopul ation", + "Ġ California", + "ĠCal ifornia", + "ĠCaliforn ia", + "\" I", + "å ¹", + "Ġ greater", + "Ġg reater", + "Ġgreat er", + "Ġgre ater", + "ues day", + "Ġth ous", + "Ġthou s", + "Ġtho us", + "Ġco sts", + "Ġcost s", + "Ġcos ts", + "Ġ launch", + "Ġl aunch", + "Ġla unch", + "\\ Http", + "k er", + "ke r", + "b and", + "ba nd", + "ban d", + "Ġ Play", + "ĠP lay", + "ĠPl ay", + "ĠPla y", + "Ġ band", + "Ġb and", + "Ġban d", + "Ġba nd", + ". shape", + ".s hape", + ".sh ape", + ".sha pe", + "e some", + "es ome", + "eso me", + "art icle", + "arti cle", + "artic le", + ". rf", + ".r f", + "Ġ wer", + "Ġw er", + "Ġwe r", + "á s", + "em bers", + "ember s", + "emb ers", + "u sr", + "us r", + "B A", + "i can", + "ic an", + "ica n", + "e tt", + "et t", + "valid ate", + "ul ti", + "ult i", + "Ġim mediately", + "Ġimmedi ately", + "Ġimmediate ly", + "z er", + "ze r", + "Ġ figure", + "Ġf igure", + "Ġfig ure", + "Ġfigur e", + "o es", + "oe s", + "e ller", + "el ler", + "ell er", + "elle r", + "ir cle", + "irc le", + "Ġ Sign", + "ĠS ign", + "ĠSi gn", + "ĠSig n", + ". db", + ".d b", + "Ġ rank", + "Ġr ank", + "Ġran k", + "Ġra nk", + "By tes", + "Byte s", + "Ġ projects", + "Ġproject s", + "Ġproj ects", + "Ġproje cts", + "_ rec", + "_re c", + "_r ec", + "U LAR", + "UL AR", + "ULA R", + "A PI", + "AP I", + "Ġ Line", + "ĠL ine", + "ĠLin e", + "ĠLi ne", + "P ort", + "Por t", + "Po rt", + "Ġ poll", + "Ġp oll", + "Ġpol l", + "Ġpo ll", + "Ġg iving", + "Ġgi ving", + "id ence", + "ide nce", + "iden ce", + "- -Ċ", + "-- Ċ", + "Ġ plot", + "Ġp lot", + "Ġpl ot", + "Ġplo t", + "i cial", + "ic ial", + "ici al", + "icia l", + "Ġw arrant", + "Ġwar rant", + "I TION", + "IT ION", + "Ġ Double", + "ĠD ouble", + "ĠDo uble", + "ĠDou ble", + "ĠDoub le", + "Ġb illion", + "Ġbill ion", + "Ġbil lion", + "gorith m", + "gorit hm", + "Ġ equipment", + "Ġe quipment", + "Ġequ ipment", + "Ġequip ment", + "D ATE", + "DA TE", + "DAT E", + "Ġ @\"", + "Ġ@ \"", + "E E", + "Ġ ple", + "Ġp le", + "Ġpl e", + "i ation", + "ia tion", + "iat ion", + "Ġ headers", + "Ġhe aders", + "Ġhead ers", + "Ġheader s", + "Ġpro ced", + "Ġproc ed", + ".Component Model", + "Ġ Obama", + "ĠOb ama", + "Ġ pa", + "Ġp a", + "Ġ Best", + "ĠB est", + "ĠBe st", + "ĠBes t", + "im ately", + "imate ly", + "imat ely", + ". getString", + ".get String", + ".getS tring", + ". \\", + "m ploy", + "mp loy", + "mpl oy", + "Ġ raw", + "Ġr aw", + "Ġra w", + "_ block", + "_b lock", + "_bl ock", + "_bloc k", + "und red", + "\" },Ċ", + "\"} ,Ċ", + "\"}, Ċ", + "1 12", + "11 2", + ".Group Layout", + "Ġb rought", + "Ġbr ought", + "Ġbro ught", + "NS String", + "NSS tring", + "th row", + "thr ow", + "thro w", + "c reated", + "cre ated", + "create d", + "cr eated", + "creat ed", + ". New", + ".N ew", + "_ view", + "_v iew", + "_vi ew", + "C P", + "e ps", + "ep s", + "O p", + "Ġ gratis", + "Ġgr atis", + "Ġgrat is", + "Ġ '\"", + "Ġ' \"", + "Ġint erview", + "Ġinter view", + "Ġinterv iew", + "\" \"\"Ċ", + "\"\" \"Ċ", + "\"\"\" Ċ", + "Ġ partial", + "Ġp artial", + "Ġpart ial", + "Ġparti al", + "Ġ aria", + "Ġa ria", + "Ġar ia", + "b ing", + "bin g", + "bi ng", + "A uthor", + "Auth or", + "Aut hor", + "B ook", + "Bo ok", + "Ġ Pat", + "ĠP at", + "ĠPa t", + "u man", + "um an", + "uma n", + "User s", + "Us ers", + "Use rs", + "p lus", + "pl us", + "1 93", + "19 3", + "Ġ Direct", + "ĠD irect", + "ĠDi rect", + "ĠDir ect", + "ĠDire ct", + "ven ue", + "al pha", + "alph a", + "UC CESS", + "Ġ Call", + "ĠC all", + "ĠCal l", + "ĠCa ll", + "Ġ );čĊ", + "Ġ) ;čĊ", + "Ġ); čĊ", + "im ated", + "imate d", + "ima ted", + "imat ed", + "Ġ remain", + "Ġre main", + "Ġr emain", + "Ġrem ain", + "Ġ anti", + "Ġan ti", + "Ġant i", + "Ġ London", + "ĠL ondon", + "ĠLo ndon", + "ĠLon don", + "ĠLond on", + "Ġs afety", + "Ġsaf ety", + "Ġsafe ty", + "P OSE", + "PO SE", + "POS E", + "o les", + "ol es", + "ole s", + "cont roller", + "control ler", + "contr oller", + "contro ller", + "B yte", + "By te", + "Ġ Court", + "ĠC ourt", + "ĠCo urt", + "ĠCour t", + "ĠCou rt", + "Ġ Phil", + "ĠP hil", + "ĠPh il", + "ĠPhi l", + "Ġ Associ", + "ĠAss oci", + "ĠAssoc i", + "e na", + "en a", + "å IJ", + "_ STR", + "_S TR", + "_ST R", + "c oin", + "co in", + "res hold", + "resh old", + "Ġ batch", + "Ġb atch", + "Ġbat ch", + "_ Click", + "_C lick", + "_Cl ick", + "ent ication", + "entic ation", + "enti cation", + "> ';Ċ", + ">' ;Ċ", + ">'; Ċ", + "e nty", + "en ty", + "ent y", + "Ġbeg inning", + "Ġbegin ning", + "Ġ zero", + "Ġz ero", + "Ġze ro", + "Ġzer o", + "Ġ Convert", + "ĠCon vert", + "ĠConv ert", + "Ġ terr", + "Ġt err", + "Ġte rr", + "Ġter r", + "Ġ paid", + "Ġp aid", + "Ġpa id", + "Ġpai d", + "Ġincre ased", + "Ġincrease d", + "c atch", + "cat ch", + "- size", + "-s ize", + "1 15", + "11 5", + "act ivity", + "activ ity", + "e quals", + "equ als", + "equal s", + "Ġ queue", + "Ġque ue", + "Ġq ueue", + "Ġ \"'", + "Ġ\" '", + "Ġ International", + "ĠInt ernational", + "ĠIntern ational", + "ĠInter national", + "Ġf ür", + "urs day", + "Ġ scient", + "Ġs cient", + "Ġsc ient", + "Ġsci ent", + "al low", + "all ow", + "allo w", + "a xis", + "ax is", + "Ġ appropri", + "Ġapp ropri", + "Ġap propri", + "Ġappro pri", + "e dge", + "ed ge", + "Ġ idx", + "Ġi dx", + "Ġid x", + "S uccess", + "Su ccess", + "Suc cess", + "ent ifier", + ": \\", + "x is", + "xi s", + "Ġ maximum", + "Ġmax imum", + "Ġmaxim um", + "ar ks", + "ark s", + "Ġ birth", + "Ġb irth", + "Ġbir th", + "( index", + "(in dex", + "(ind ex", + "Ġ maybe", + "Ġm aybe", + "Ġmay be", + ". py", + ".p y", + "f iles", + "file s", + "fi les", + "fil es", + "Ġ limited", + "Ġl imited", + "Ġlimit ed", + "Ġlim ited", + "Ġlimite d", + "_ check", + "_c heck", + "_ch eck", + "_che ck", + "l ook", + "lo ok", + "loo k", + "p lies", + "pl ies", + "Ġ movement", + "Ġm ovement", + "Ġmov ement", + "Ġmove ment", + "Ġmo vement", + "' ].", + "'] .", + "Ġb road", + "Ġbr oad", + "Ġbro ad", + "Ġ BE", + "ĠB E", + "Ġ UnityEngine", + "ĠUn ityEngine", + "ĠUnity Engine", + ". cpp", + ".c pp", + ".cp p", + "Ġ Every", + "ĠE very", + "ĠEv ery", + "ĠEver y", + "ĠEve ry", + "Ad min", + "Ġ fans", + "Ġf ans", + "Ġfa ns", + "Ġfan s", + "p ared", + "par ed", + "pare d", + "pa red", + "Ċ ĠĠĠĠĊ", + "Ġ foreign", + "Ġfore ign", + "Ġ pan", + "Ġp an", + "Ġpa n", + "Ġ tour", + "Ġt our", + "Ġto ur", + "Ġtou r", + "Ġ Order", + "ĠOr der", + "ĠOrd er", + "Ġ moving", + "Ġm oving", + "Ġmov ing", + "Ġmo ving", + "Ġ auf", + "Ġa uf", + "Ġau f", + "C all", + "Cal l", + "Ca ll", + "c b", + "Å Ł", + "vent ory", + "Ġ Sql", + "ĠS ql", + "ĠSq l", + "Ġ fully", + "Ġf ully", + "Ġfull y", + "Ġful ly", + "Click Listener", + "W ORD", + "WO RD", + "Ġann ounced", + "Ġannounc ed", + "Ġannounce d", + ") čĊčĊ", + ")čĊ čĊ", + "Ġag reed", + "Ġagre ed", + "Ġagree d", + "Ġagr eed", + "r ie", + "ri e", + "Ġ earn", + "Ġe arn", + "Ġear n", + "Ġea rn", + "_ link", + "_l ink", + "_lin k", + "_li nk", + ". array", + ".a rray", + ".ar ray", + ".arr ay", + "( text", + "(t ext", + "(te xt", + "(tex t", + "Ġ materials", + "Ġmaterial s", + "Ġmateria ls", + "Ġmater ials", + "Ġmateri als", + ", p", + "f fff", + "ff ff", + "fff f", + "v g", + "Ġ ©", + "Ġ ©", + "Ġ unless", + "Ġun less", + "Ġunle ss", + "Ġunl ess", + "a jax", + "aj ax", + "aja x", + "L OG", + "LO G", + "Ġ sexual", + "Ġs exual", + "Ġsex ual", + "Ġ \\\"", + "Ġ\\ \"", + "- time", + "-t ime", + "Ġ coach", + "Ġco ach", + "Ġ supported", + "Ġs upported", + "Ġsup ported", + "Ġsupport ed", + "Ġsupp orted", + "Ġ photos", + "Ġph otos", + "Ġphot os", + "Ġphoto s", + "i form", + "if orm", + "ifo rm", + ". Create", + ".C reate", + ") ]", + "r ier", + "ri er", + "rie r", + "Ġ dialog", + "Ġd ialog", + "Ġdi alog", + "Ġdia log", + "Ġdial og", + "a ver", + "av er", + "ave r", + "i ge", + "ig e", + ") +", + "_ idx", + "_id x", + "_i dx", + ": [", + "_ min", + "_m in", + "_mi n", + "Ġ Cong", + "ĠC ong", + "ĠCon g", + "ĠCo ng", + "Ġ pressure", + "Ġpres sure", + "Ġpress ure", + "Ġ teams", + "Ġte ams", + "Ġteam s", + "Ġtea ms", + "S ign", + "Si gn", + "Sig n", + "b egin", + "be gin", + "beg in", + "r ian", + "ri an", + "ria n", + "N ESS", + "NE SS", + "NES S", + "L S", + "Ġim prove", + "Ġimp rove", + "Ġimpro ve", + "Ġimpr ove", + "Ġimprov e", + "Ġ Sunday", + "ĠS unday", + "ĠSun day", + "ĠSund ay", + "Ġ definition", + "Ġdef inition", + "Ġdefinit ion", + "Ġdefin ition", + "i ger", + "ig er", + "ige r", + "rol lers", + "roll ers", + "roller s", + "Ġ thinking", + "Ġth inking", + "Ġthink ing", + "Ġthin king", + "T emplate", + "Temp late", + "Tem plate", + "- F", + "Ġem erg", + "p lates", + "pl ates", + "plate s", + "plat es", + "pla tes", + "Ġ USA", + "ĠU SA", + "ĠUS A", + ". setState", + ".set State", + "Ġ Also", + "ĠAl so", + "ĠAls o", + "r ev", + "re v", + "Ġ enable", + "Ġe nable", + "Ġen able", + "Ġ CO", + "ĠC O", + "P ECT", + "PE CT", + "PEC T", + "Ġ concept", + "Ġcon cept", + "Ġconc ept", + "Ġconce pt", + ") -", + "Ġ âĢ¢", + "ĠâĢ ¢", + "Ġ sets", + "Ġs ets", + "Ġse ts", + "Ġset s", + "Ġ meaning", + "Ġme aning", + "Ġmean ing", + "e mon", + "em on", + "emo n", + "Ġ Cons", + "ĠC ons", + "ĠCon s", + "ĠCo ns", + "c mp", + "cm p", + "e der", + "ed er", + "ede r", + "an ned", + "ann ed", + "anne d", + "ic ensed", + "icense d", + "icens ed", + "Ġ Super", + "ĠS uper", + "ĠSup er", + "ĠSu per", + "Ġ daily", + "Ġd aily", + "Ġda ily", + "Ġdai ly", + "Ġ multi", + "Ġm ulti", + "Ġmult i", + "Ġmul ti", + "_ u", + "Ġch alleng", + "Ġchall eng", + "_ mode", + "_m ode", + "_mod e", + "_mo de", + "Ġ Promise", + "ĠP romise", + "ĠPro mise", + "ĠProm ise", + "Ġ strict", + "Ġstr ict", + "Ġstri ct", + "j o", + "i nton", + "in ton", + "int on", + "into n", + "( list", + "(l ist", + "(li st", + "On ly", + "> {", + "Ġ vehicle", + "Ġv ehicle", + "Ġveh icle", + "í ķ", + "Ġ Player", + "ĠP layer", + "ĠPl ayer", + "ĠPlay er", + "ĠPla yer", + "1 06", + "10 6", + "Ġ Del", + "ĠD el", + "ĠDe l", + "Ġ pool", + "Ġp ool", + "Ġpo ol", + "Ġpoo l", + ". url", + ".u rl", + ".ur l", + "nes day", + "( );čĊčĊ", + "() ;čĊčĊ", + "();čĊ čĊ", + "(); čĊčĊ", + "9 00", + "90 0", + "Ġ \");Ċ", + "Ġ\" );Ċ", + "Ġ\") ;Ċ", + "Ġ\"); Ċ", + "L ocal", + "Lo cal", + "Loc al", + ". \");Ċ", + ".\" );Ċ", + ".\") ;Ċ", + ".\"); Ċ", + "Ġ organization", + "Ġo rganization", + "Ġorgan ization", + "Ġorganiz ation", + "r ender", + "re nder", + "ren der", + "rend er", + "rende r", + "Ġ Application", + "ĠApp lication", + "ĠAp plication", + "ĠAppl ication", + "Ġ summer", + "Ġs ummer", + "Ġsum mer", + "Ġsumm er", + "ex pected", + "exp ected", + "expect ed", + "N A", + "Ġ rap", + "Ġr ap", + "Ġra p", + "_ obj", + "_o bj", + "_ob j", + "Ġ surface", + "Ġs urface", + "Ġsur face", + "Ġsurf ace", + "Ġ PUR", + "ĠP UR", + "ĠPU R", + "Ġ },ĊĊ", + "Ġ} ,ĊĊ", + "Ġ},Ċ Ċ", + "Ġ}, ĊĊ", + "Ġ variables", + "Ġvariable s", + "Ġvari ables", + "( message", + "(m essage", + "Ġo pin", + "Ġop in", + "Ġopi n", + ". back", + ".b ack", + ".ba ck", + "а н", + "аР½", + "Ġ workers", + "Ġwork ers", + "Ġwor kers", + "Ġworker s", + "v m", + "C o", + "ught er", + "ugh ter", + "Ġ master", + "Ġm aster", + "Ġma ster", + "Ġmas ter", + "Ġmast er", + "Ġ \"\",", + "Ġ\" \",", + "Ġ\"\" ,", + "Ġ stories", + "Ġst ories", + "Ġstor ies", + "Ġsto ries", + ". User", + ".U ser", + ".Use r", + "Ġcele br", + "in ese", + "ine se", + "ines e", + "B S", + "Ġ Command", + "ĠCom mand", + "ĠComm and", + "ash board", + "Ġ og", + "Ġo g", + "k g", + ". image", + ".i mage", + ".im age", + ".imag e", + ". style", + ".st yle", + "Ġ steps", + "Ġst eps", + "Ġstep s", + "Ġste ps", + "Ġ Ben", + "ĠB en", + "ĠBe n", + "( args", + "(arg s", + "(ar gs", + "4 04", + "40 4", + "Ġ Person", + "ĠP erson", + "ĠPer son", + "ĠPers on", + ", y", + "Ġoffic ials", + "Ġofficial s", + "| Ċ", + "Ġ skills", + "Ġs kills", + "Ġsk ills", + "Ġskill s", + "v c", + "Ġ builder", + "Ġb uilder", + "Ġbu ilder", + "Ġbuild er", + "Ġ gar", + "Ġg ar", + "Ġga r", + "A ccount", + "Ac count", + "Acc ount", + "Ġ Auth", + "ĠA uth", + "ĠAut h", + "ĠAu th", + "ç Ķ", + "' ])Ċ", + "'] )Ċ", + "']) Ċ", + "Ġ AT", + "ĠA T", + "n n", + ". Int", + ".I nt", + ".In t", + "SS ERT", + "Ġ effective", + "Ġe ffective", + "Ġeffect ive", + "Ġeff ective", + "LE TE", + "LET E", + "Ġ tools", + "Ġt ools", + "Ġto ols", + "Ġtoo ls", + "Ġtool s", + "A RD", + "AR D", + "Ġ digital", + "Ġd igital", + "Ġdig ital", + "Ġdigit al", + "1 91", + "19 1", + "D ouble", + "Do uble", + "Dou ble", + "Ġ Find", + "ĠF ind", + "ĠFin d", + "ĠFi nd", + "R C", + "Ġ inline", + "Ġin line", + "/ r", + "A RAM", + "AR AM", + "ARA M", + "A SK", + "AS K", + "Ġ intent", + "Ġin tent", + "Ġint ent", + "Ġinte nt", + "a ight", + "ai ght", + "_ addr", + "_add r", + "_ad dr", + "Ġ requests", + "Ġre quests", + "Ġrequest s", + "Ġrequ ests", + ". first", + ".f irst", + ".fi rst", + "Ġ debug", + "Ġde bug", + "Ġdeb ug", + "Ġ spent", + "Ġs pent", + "Ġsp ent", + "Ġspe nt", + "( )));Ċ", + "() ));Ċ", + "()) );Ċ", + "())) ;Ċ", + "())); Ċ", + "Å Ľ", + "Ġpr incip", + "Ġprin cip", + "Ġprinc ip", + "Log ger", + "Lo gger", + "cl udes", + "clude s", + "clud es", + ". use", + ".u se", + ".us e", + "Ġs urv", + "Ġsu rv", + "Ġsur v", + "m edia", + "med ia", + "me dia", + "medi a", + "Ġ February", + "ĠFe bruary", + "ĠFeb ruary", + "Ġ Mac", + "ĠM ac", + "ĠMa c", + "Ġ missing", + "Ġm issing", + "Ġmiss ing", + "Ġmis sing", + "Ġ wife", + "Ġw ife", + "Ġwi fe", + "Ġt alking", + "Ġtalk ing", + "Ġtal king", + "Ġ Make", + "ĠM ake", + "ĠMa ke", + "ĠMak e", + "Ġ cart", + "Ġc art", + "Ġcar t", + "Ġca rt", + "Ġ located", + "Ġloc ated", + "Ġlocate d", + "E nc", + "En c", + "- a", + "ch ron", + "chr on", + "Ġ cards", + "Ġc ards", + "Ġcar ds", + "Ġcard s", + "Ġg uy", + "Ġgu y", + "Ġ pers", + "Ġp ers", + "Ġper s", + "Ġpe rs", + "Ġ Yes", + "ĠY es", + "ĠYe s", + "at ever", + "ate ver", + "Ġ Ang", + "ĠA ng", + "ĠAn g", + "o lar", + "ol ar", + "ola r", + "Ġ Even", + "ĠE ven", + "ĠEv en", + "ĠEve n", + "Ġ accur", + "Ġacc ur", + "Ġac cur", + "Ġ Power", + "ĠP ower", + "ĠPo wer", + "ĠPow er", + "Ġ Gold", + "ĠG old", + "ĠGo ld", + "ĠGol d", + "c lear", + "cl ear", + "cle ar", + "P rocess", + "Pro cess", + "Proc ess", + "Ġ records", + "Ġrec ords", + "Ġrecord s", + "Ġk illed", + "Ġkill ed", + "Ġkil led", + ". clear", + ".c lear", + ".cl ear", + "ĠWARRANT IES", + "Ġ purpose", + "Ġp urpose", + "Ġpur pose", + "Ġpurpos e", + "p anel", + "pan el", + "pa nel", + "pane l", + "J ECT", + "JE CT", + "ÃŃ a", + "Ġex erc", + "Ġexe rc", + "W S", + "/ L", + ". exports", + ".ex ports", + ".exp orts", + ".export s", + "Ġ ___", + "Ġ_ __", + "Ġ__ _", + "Ġ sin", + "Ġs in", + "Ġsi n", + "S ervlet", + "Serv let", + "Ġd é", + ". delete", + ".de lete", + ".del ete", + "r oke", + "ro ke", + "rok e", + "S l", + "u gh", + "ug h", + "e ars", + "ear s", + "ea rs", + "Ġ pointer", + "Ġpoint er", + "Ġpo inter", + "Ġ hop", + "Ġh op", + "Ġho p", + "all ery", + "alle ry", + "aller y", + "Ġ obs", + "Ġo bs", + "Ġob s", + "c overy", + "co very", + "cover y", + "cov ery", + "ĉ char", + "ĉc har", + "ĉch ar", + "ĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉ", + "ĉ def", + "ĉd ef", + "ĉde f", + "o city", + "oc ity", + "oci ty", + "it chen", + "itch en", + "u lations", + "ul ations", + "ulation s", + "Ġ FIT", + "ĠF IT", + "ĠFI T", + "Ġ ).", + "Ġ) .", + "straint s", + "stra ints", + "strain ts", + "v ention", + "vent ion", + "ven tion", + "Ġ requires", + "Ġre quires", + "Ġrequire s", + "Ġrequ ires", + "Ġ Oper", + "ĠO per", + "ĠOp er", + "M E", + "O UNT", + "OUN T", + "OU NT", + "al let", + "all et", + "alle t", + "Ġ norm", + "Ġn orm", + "Ġno rm", + "Ġnor m", + "I RE", + "IR E", + "ex as", + "Ġ programs", + "Ġpro grams", + "Ġpr ograms", + "Ġprogram s", + "Ġprog rams", + "Ġ weak", + "Ġwe ak", + "' .$", + "'. $", + "u ing", + "ui ng", + "uin g", + "ĉ ĠĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠĠ", + "ĉĠ ĠĠĠĠĠĠ", + "ĉĠĠ ĠĠĠĠĠ", + "ĉĠĠĠĠĠ ĠĠ", + "ĉĠĠĠĠ ĠĠĠ", + "ĉĠĠĠĠĠĠ Ġ", + "Ġ mil", + "Ġm il", + "Ġmi l", + "Ġ firm", + "Ġf irm", + "Ġfi rm", + "Ġfir m", + "init ely", + "inite ly", + "_ VALUE", + "_VAL UE", + "ap se", + "aps e", + "atis f", + "ati sf", + "Ġ demand", + "Ġd emand", + "Ġde mand", + "Ġdem and", + "_ mod", + "_m od", + "_mo d", + "Ġde scribed", + "Ġdes cribed", + "Ġdescri bed", + "Ġdescribe d", + "Ġ places", + "Ġp laces", + "Ġpl aces", + "Ġplace s", + "Ġplac es", + "Ġpla ces", + "V ID", + "VI D", + "Ġ alone", + "Ġal one", + "Ġalo ne", + "Ġ export", + "Ġex port", + "Ġexp ort", + "Ġexpo rt", + "Ġ vec", + "Ġv ec", + "Ġve c", + "Ġ Max", + "ĠM ax", + "ĠMa x", + "Ġ activities", + "Ġact ivities", + "Ġactiv ities", + "ic tures", + "ict ures", + "icture s", + "g ener", + "ge ner", + "gen er", + "gene r", + "Ġ ma", + "Ġm a", + "Ĥ ¬", + "Ġ expression", + "Ġex pression", + "Ġexp ression", + "Ġexpress ion", + "Ġexpr ession", + "C allback", + "Call back", + "_ content", + "_c ontent", + "_con tent", + "_cont ent", + "Ġ Most", + "ĠM ost", + "ĠMo st", + "ĠMos t", + "Ġ testing", + "Ġt esting", + "Ġtest ing", + "Ġtes ting", + "E C", + "CH ANT", + "CHA NT", + "CHAN T", + "Ġ adjust", + "Ġad just", + "Ġadj ust", + ".Th reading", + ".Thread ing", + "( ctx", + "(c tx", + "(ct x", + "Ġ agree", + "Ġa gree", + "Ġag ree", + "Ġagre e", + "Ġagr ee", + "i ghest", + "ig hest", + "igh est", + "Ġ ui", + "Ġu i", + "Ġ Law", + "ĠL aw", + "ĠLa w", + ". Y", + "> < ?", + "Ġ pod", + "Ġp od", + "Ġpo d", + "- lg", + "-l g", + "âĢĿ ĊĊ", + "âĢĿĊ Ċ", + "Ġ describe", + "Ġde scribe", + "Ġdes cribe", + "Ġdescri be", + "Ġdescr ibe", + "Ġ European", + "ĠE uropean", + "ĠEurope an", + "ĠEurop ean", + "- sh", + "-s h", + "ĠPUR POSE", + "O RY", + "OR Y", + "Ġcon vers", + "Ġconv ers", + "Ġconver s", + "Ġ Illuminate", + "ĠI lluminate", + "ĠIllum inate", + "Ġ Av", + "ĠA v", + "( ch", + "(c h", + "? \"", + "c hen", + "ch en", + "che n", + "i ma", + "im a", + "D ocument", + "Doc ument", + "Ġ operations", + "Ġoper ations", + "Ġoperation s", + "w in", + "wi n", + "ĉ function", + "ĉf unction", + "ĉfunc tion", + "ĉfun ction", + ". Image", + ".I mage", + ".Im age", + "Ġs cen", + "Ġsc en", + "Ġsce n", + "/ h", + "Ġ SC", + "ĠS C", + "Ġ explo", + "Ġexp lo", + "Ġexpl o", + ": %", + "/ **čĊ", + "/* *čĊ", + "/** čĊ", + "N AME", + "NA ME", + "æ Ī", + "( var", + "(v ar", + "(va r", + "Ġ director", + "Ġd irector", + "Ġdirect or", + "Ġdir ector", + "Ġdire ctor", + "O NG", + "ON G", + "Ġ yield", + "Ġy ield", + "Ġyi eld", + "Ġfe et", + "Ġfee t", + "Ġ Search", + "ĠS earch", + "ĠSe arch", + "ĠSea rch", + "Ġ Il", + "ĠI l", + "Ġrest aur", + "Ġresta ur", + "Ġrestau r", + "d uc", + "du c", + "Ġ integer", + "Ġint eger", + "Ġinteg er", + "Ġinte ger", + "1 07", + "10 7", + "Ġ' ';Ċ", + "Ġ'' ;Ċ", + "Ġ''; Ċ", + "Ġhigh ly", + "check ed", + "ĠPART IC", + "ER CHANT", + "ï¼ ī", + "Ġ optim", + "Ġop tim", + "Ġopt im", + "Q ueue", + "Que ue", + "Ġ LI", + "ĠL I", + "it ation", + "ita tion", + "itat ion", + "Ġ transport", + "Ġtrans port", + "Ġtran sport", + "iss ion", + "f ill", + "fi ll", + "fil l", + "us ion", + "usi on", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĉ bool", + "ĉb ool", + "- th", + "-t h", + "u pt", + "up t", + "Ġ essential", + "Ġess ential", + "an ted", + "ant ed", + "ante d", + "Ġbenef its", + "Ġbenefit s", + "Ġbene fits", + "ĉ S", + "' ;čĊ", + "'; čĊ", + "i ki", + "ik i", + "Ġ girls", + "Ġgirl s", + "Ġgir ls", + "i ced", + "ic ed", + "ice d", + "b uffer", + "buf fer", + "bu ffer", + "buff er", + "] +", + "Ġ socket", + "Ġs ocket", + "Ġso cket", + "Ġsock et", + "Ġsoc ket", + "Ġ prices", + "Ġp rices", + "Ġpr ices", + "Ġprice s", + "Ġpri ces", + "Ġ Fre", + "ĠF re", + "ĠFr e", + "Ġ sat", + "Ġs at", + "Ġsa t", + "Ġ wood", + "Ġw ood", + "Ġwo od", + "Ġwoo d", + "Menu Item", + "A RG", + "AR G", + "Ġ Admin", + "ĠAd min", + "O WN", + "OW N", + "d k", + "Ġ reset", + "Ġre set", + "Ġres et", + "Ġ forms", + "Ġfor ms", + "Ġform s", + "Ġfo rms", + "Ġ и", + "ĠÐ ¸", + "æ ĸ", + "Ġ Tuesday", + "ĠT uesday", + "ĠTues day", + "1 09", + "10 9", + "Ġ Initialized", + "ĠInitial ized", + "ĠInitialize d", + "ĠInit ialized", + "_ train", + "_t rain", + "_tr ain", + "_tra in", + "o rary", + "or ary", + "ora ry", + "ate gor", + "ateg or", + "atego r", + "Ġ dt", + "Ġd t", + "T otal", + "To tal", + "Tot al", + "con struct", + "i lies", + "il ies", + "ili es", + "Ġgu ys", + "Ġguy s", + "е ÑĢ", + "Ġ instruction", + "Ġin struction", + "Ġinstr uction", + "Ġinstruct ion", + "0 10", + "01 0", + "y led", + "yle d", + "yl ed", + "Ġ internet", + "Ġin ternet", + "Ġint ernet", + "Ġinter net", + "Ġintern et", + "et adata", + "eta data", + "a dy", + "ad y", + "f aces", + "face s", + "fa ces", + "fac es", + "j ection", + "ject ion", + "je ction", + "jec tion", + "Ġ Jack", + "ĠJ ack", + "ĠJac k", + "ĠJa ck", + "Ġ rect", + "Ġre ct", + "Ġr ect", + "Ġrec t", + "[ -", + "Ġ Leg", + "ĠL eg", + "ĠLe g", + "Ġ devices", + "Ġdev ices", + "Ġdevice s", + "O C", + "Ġ *čĊ", + "Ġ* čĊ", + "o ration", + "or ation", + "ora tion", + "er tain", + "ert ain", + "erta in", + "Ġ guard", + "Ġg uard", + "Ġgu ard", + "Ġguar d", + "o stream", + "ost ream", + "Ġ enum", + "Ġe num", + "Ġen um", + ". layout", + ".l ayout", + "Ġ \";Ċ", + "Ġ\" ;Ċ", + "Ġ\"; Ċ", + "v oke", + "vo ke", + "Ġ Ok", + "ĠO k", + "H ome", + "Ho me", + "Hom e", + "( tr", + "(t r", + "E TH", + "ET H", + "Ġ delay", + "Ġd elay", + "Ġde lay", + "Ġdel ay", + "Ġdela y", + "Ġ purchase", + "Ġp urchase", + "Ġpurch ase", + "d c", + "Ġ aren", + "Ġa ren", + "Ġare n", + "Ġar en", + "_ once", + "_on ce", + "_o nce", + "ĉ ĉĉĉĊ", + "ĉĉ ĉĉĊ", + "ĉĉĉĉ Ċ", + "ĉĉĉ ĉĊ", + "r or", + "ro r", + "d raw", + "dr aw", + "dra w", + ". run", + ".r un", + ".ru n", + "( model", + "(m odel", + "(mod el", + "(mode l", + "Time out", + "l ik", + "li k", + "Ġ Arg", + "ĠA rg", + "ĠAr g", + ". en", + ".e n", + "Ġ fish", + "Ġf ish", + "Ġfi sh", + "Ġfis h", + "c py", + "cp y", + "_ fe", + "_f e", + "ERCHANT ABILITY", + "( X", + "_ output", + "_out put", + "? ?", + "Ġ jo", + "Ġj o", + "and ard", + "anda rd", + "Ġ doll", + "Ġd oll", + "Ġdo ll", + "Ġdol l", + "er rors", + "err ors", + "error s", + "erro rs", + "_ base", + "_b ase", + "ĠPARTIC ULAR", + "Ġ leader", + "Ġle ader", + "Ġlead er", + "Ġcom par", + "Ġco mpar", + "Ġcomp ar", + "Ġd oub", + "Ġdo ub", + "Ġdou b", + "Ġ Vis", + "ĠV is", + "ĠVi s", + "Stack Trace", + "- C", + "ĠSt ud", + "stit ute", + "M ore", + "Mo re", + "Mor e", + "Ġ Description", + "ĠD escription", + "ĠDe scription", + "ĠDes cription", + "W ARE", + "WA RE", + "WAR E", + "a ds", + "ad s", + "Ġ к", + "ĠÐ º", + "b ind", + "bin d", + "bi nd", + "= self", + "=s elf", + "e mploy", + "em ploy", + "emp loy", + "empl oy", + "emplo y", + "[ n", + ". all", + ".a ll", + ".al l", + "- B", + "& &", + "a lm", + "al m", + "Ġ culture", + "Ġc ulture", + "Ġcult ure", + "Ġcul ture", + "h ouse", + "ho use", + "hou se", + "Ġs uffer", + "Ġsu ffer", + "Ġsuff er", + "Ġsuf fer", + "Ġ '%", + "Ġ' %", + "Ġ straight", + "Ġstr aight", + "Ġstra ight", + "Ġ Star", + "ĠS tar", + "ĠSt ar", + "ĠSta r", + "u do", + "ud o", + "Ġ ded", + "Ġd ed", + "Ġde d", + "Ġ COM", + "ĠC OM", + "ĠCO M", + "Ġ confirm", + "Ġcon firm", + "Ġconf irm", + "Ġ Good", + "ĠG ood", + "ĠGo od", + ". sc", + ".s c", + "____ ____________", + "________ ________", + "____________ ____", + "D R", + "Config uration", + "Date Time", + "Ġ advert", + "Ġad vert", + "Ġadv ert", + "Ġ couldn", + "Ġcould n", + "a sync", + "as ync", + "asy nc", + "st ack", + "sta ck", + "' )čĊ", + "') čĊ", + "K it", + "Ki t", + "Ġh ous", + "Ġho us", + "Ġm echan", + "Ġme chan", + "Ġmec han", + "Ġmech an", + "r ate", + "ra te", + "rat e", + "2 04", + "20 4", + "Ġ audio", + "Ġa udio", + "Ġaud io", + "Ġau dio", + "Ġaudi o", + "ĉ cout", + "ĉc out", + "c ores", + "co res", + "core s", + "cor es", + "Ġ spot", + "Ġs pot", + "Ġsp ot", + "Ġspo t", + "Ġin creasing", + "Ġincre asing", + "Ġ ##", + "Ġ# #", + ") ))", + ")) )", + "p oints", + "point s", + "po ints", + "poi nts", + "Ġcom pared", + "Ġcomp ared", + "Ġcompar ed", + "Ġcompare d", + "l ig", + "li g", + "Ġ behavior", + "Ġbeh avior", + "Ġ BY", + "ĠB Y", + "Ġ Att", + "ĠA tt", + "ĠAt t", + "c raft", + "cr aft", + "he aders", + "head ers", + "header s", + "hea ders", + "e te", + "et e", + "end region", + "Ġ detail", + "Ġd etail", + "Ġde tail", + "Ġdet ail", + "U LE", + "UL E", + "Ġ Common", + "ĠCom mon", + "ĠComm on", + "ĉ protected", + "s ton", + "st on", + "sto n", + "ĠFIT NESS", + "Ġ fresh", + "Ġf resh", + "Ġfr esh", + "Ġfre sh", + "Ġfres h", + "\" >ĊĊ", + "\"> ĊĊ", + "\">Ċ Ċ", + ". example", + ".ex ample", + ".exam ple", + "b erg", + "ber g", + "be rg", + "Ġ moved", + "Ġm oved", + "Ġmov ed", + "Ġmove d", + "Ġmo ved", + "ĉ e", + "Ġ Saturday", + "ĠS aturday", + "Ġ payload", + "Ġp ayload", + "Ġpay load", + "Ä ĩ", + ") :ĊĊ", + "):Ċ Ċ", + "): ĊĊ", + "Ġb ey", + "Ġbe y", + "u rer", + "ur er", + "ure r", + "< script", + " ,", + "\" > < ?", + "( num", + "(n um", + "ĉ inline", + "ĉin line", + "Trans action", + ". On", + ".O n", + "Ġ mail", + "Ġm ail", + "Ġma il", + "Ġmai l", + "r ey", + "re y", + "res ults", + "result s", + "Ġ nav", + "Ġn av", + "Ġna v", + "I MIT", + "IM IT", + "_ ids", + "_id s", + "_i ds", + "M ake", + "Ma ke", + "å Ĭ", + "M odal", + "Mod al", + "Mo dal", + "Ġ LOG", + "ĠL OG", + "ĠLO G", + "Ġ Sur", + "ĠS ur", + "ĠSu r", + "Ġinstance of", + "Ġ overall", + "Ġover all", + "Ġ Information", + "ĠIn formation", + "ĠInform ation", + "Ġ construction", + "Ġcon struction", + "Ġconstruct ion", + "Ġconstr uction", + "_ FILE", + "_F ILE", + "b ut", + "bu t", + "Ġm edic", + "Ġme dic", + "Ġmed ic", + "Ġmedi c", + "Ġ duration", + "Ġd uration", + "Ġdu ration", + "Ġdur ation", + "it ness", + "a gent", + "ag ent", + "age nt", + "agen t", + "A V", + "Ġ seven", + "Ġs even", + "Ġse ven", + "Ġsev en", + "o lf", + "ol f", + "Ġ }}Ċ", + "Ġ} }Ċ", + "Ġ}} Ċ", + "\" ],Ċ", + "\"] ,Ċ", + "\"], Ċ", + "1 70", + "17 0", + "1 22", + "12 2", + "Ġ calling", + "Ġc alling", + "Ġcall ing", + "Ġcal ling", + "Ġ ans", + "Ġa ns", + "Ġan s", + "th rows", + "throw s", + "thr ows", + "thro ws", + "or izontal", + "Ġ useState", + "Ġuse State", + ". fl", + ".f l", + "Ġ Status", + "ĠS tatus", + "ĠSt atus", + "ĠStat us", + "Ġ Online", + "ĠOn line", + "R R", + "Ġ Rich", + "ĠR ich", + "ĠRic h", + "ĠRi ch", + "ĠH ill", + "ĠHi ll", + "ĠHil l", + "Ġ brain", + "Ġb rain", + "Ġbr ain", + "Ġbra in", + "Ġfollow ed", + "Ġfoll owed", + "2 40", + "24 0", + "e mic", + "em ic", + "emi c", + "Ġs light", + "Ġsl ight", + "Ġ insurance", + "Ġins urance", + ". Array", + ".A rray", + ".Ar ray", + "Ġ abstract", + "Ġa bstract", + "Ġab stract", + "Ġabs tract", + "Ġabst ract", + "Ġ Sum", + "ĠS um", + "ĠSu m", + "re direct", + "red irect", + "redi rect", + "o wner", + "ow ner", + "own er", + "( msg", + "(m sg", + "(ms g", + "Ġ Clinton", + "ĠCl inton", + "ĠClin ton", + "ĠClint on", + "ĠCli nton", + "N on", + "No n", + "ĉ ex", + "ĉe x", + "Ġ volume", + "Ġv olume", + "Ġvol ume", + "Ġvolum e", + "Ġ EventArgs", + "ĠEvent Args", + "- L", + "Ġ Dim", + "ĠD im", + "ĠDi m", + "Ġ Mart", + "ĠM art", + "ĠMar t", + "ĠMa rt", + "Ġ cursor", + "Ġc ursor", + "Ġcurs or", + "Ġcurso r", + "Ġ implementation", + "Ġim plementation", + "Ġimplement ation", + "ur red", + "urre d", + "urr ed", + "Ġl arger", + "Ġlarge r", + "Ġlarg er", + "Ġlar ger", + ") ;ĊĊĊ", + ");Ċ ĊĊ", + ");ĊĊ Ċ", + "); ĊĊĊ", + "' +", + ". transform", + ".trans form", + "Ġ upload", + "Ġup load", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "D raw", + "Dr aw", + "n el", + "ne l", + "ĉ float", + "ĉf loat", + "q rt", + "qr t", + "Ġ Network", + "ĠN etwork", + "ĠNet work", + "Ġ tit", + "Ġt it", + "Ġti t", + "A xis", + "Ax is", + ". android", + ".and roid", + "Ġ completed", + "Ġcom pleted", + "Ġcomp leted", + "Ġcomple ted", + "Ġcomplet ed", + "Ġcompl eted", + "Ġcomplete d", + "Ġ mur", + "Ġm ur", + "Ġmu r", + "Ġ columns", + "Ġcolumn s", + "Ġcolum ns", + "x c", + "Ġ supply", + "Ġs upply", + "Ġsup ply", + "Ġsuppl y", + "Ġsupp ly", + "im inal", + "imi nal", + "imin al", + "Ġ spr", + "Ġs pr", + "Ġsp r", + "================ ================================================", + "================================ ================================", + "================================================ ================", + "Ġ units", + "Ġun its", + "Ġunit s", + "Ġuni ts", + "( u", + "m i", + "re place", + "rep lace", + "[ key", + "[k ey", + "à ¹", + "an tic", + "ant ic", + "anti c", + "Ġ payment", + "Ġp ayment", + "Ġpay ment", + ", B", + "Ġ Apple", + "ĠApp le", + "ĠAp ple", + "ĠAppl e", + "g in", + "gi n", + "Re quired", + "Require d", + "# +", + "l ands", + "land s", + "la nds", + "lan ds", + "Ġ squ", + "Ġs qu", + "Ġsq u", + "Ġ factor", + "Ġf actor", + "Ġfact or", + "Ġfa ctor", + "Ġfac tor", + "Ġfacto r", + "d ec", + "de c", + "Ġ strength", + "Ġst rength", + "Ġstr ength", + "Ġstre ngth", + "Ġstren gth", + "Ġ boy", + "Ġb oy", + "Ġbo y", + "Ġ balance", + "Ġb alance", + "Ġbal ance", + "Ġ sources", + "Ġs ources", + "Ġsource s", + "Ġsour ces", + "s creen", + "sc reen", + "scr een", + "- top", + "-t op", + "-to p", + "Ġ Amazon", + "ĠA mazon", + "ĠAm azon", + "ĠAma zon", + "Ġ hidden", + "Ġh idden", + "Ġhi dden", + "Ġhid den", + "е ÑĤ", + "_ client", + "_c lient", + "_cl ient", + "_cli ent", + "Ġ eat", + "Ġe at", + "Ġea t", + ". display", + ".d isplay", + ".dis play", + "Ġ »", + "Ġ »", + "Ġ trigger", + "Ġtr igger", + "Ġtri gger", + "Ġtrig ger", + "an ager", + "ana ger", + "Ġ tro", + "Ġt ro", + "Ġtr o", + "Ġ claims", + "Ġcl aims", + "Ġclaim s", + "Ġcla ims", + "f ord", + "fo rd", + "for d", + "Ġ Company", + "ĠCom pany", + "ĠComp any", + "Ġ gift", + "Ġg ift", + "Ġgi ft", + "Ġgif t", + ", :", + "_ app", + "_a pp", + "_ap p", + "h andle", + "han dle", + "hand le", + "Ġ produce", + "Ġp roduce", + "Ġpro duce", + "Ġprodu ce", + "Ġprod uce", + "/ lib", + "/l ib", + "/li b", + "5 12", + "51 2", + "Ġ -*", + "Ġ- *", + "ĉ set", + "ĉs et", + "ĉse t", + "' ];", + "'] ;", + "a rc", + "ar c", + "a nder", + "an der", + "and er", + "ande r", + "Ġ Engine", + "ĠE ngine", + "ĠEng ine", + "Ġ attributes", + "Ġat tributes", + "Ġattribute s", + "Ġattrib utes", + "t ask", + "ta sk", + "tas k", + "< =", + "( N", + "Ġ warm", + "Ġw arm", + "Ġwar m", + "Ġwa rm", + "wh ich", + "Ġ Fore", + "ĠF ore", + "ĠFor e", + "ĠFo re", + "ag nost", + "agn ost", + "m ys", + "my s", + "Ġ tal", + "Ġt al", + "Ġta l", + "Ġ Sal", + "ĠS al", + "ĠSa l", + "g i", + "Ġ Print", + "ĠP rint", + "ĠPr int", + "ĠPri nt", + "Ġ TRUE", + "ĠTR UE", + "Ġ о", + "ĠÐ ¾", + ". UI", + ".U I", + "Ġ flash", + "Ġf lash", + "Ġfl ash", + "Ġfla sh", + "ro perty", + "rop erty", + ". location", + ".l ocation", + ".loc ation", + ".lo cation", + "Ġ Mill", + "ĠM ill", + "ĠMil l", + "ĠMi ll", + "b i", + "con tr", + "cont r", + ". request", + ".re quest", + ".req uest", + "Ġ Sam", + "ĠS am", + "ĠSa m", + "Ġ negative", + "Ġn egative", + "Ġneg ative", + "k it", + "ki t", + "Ġ sett", + "Ġs ett", + "Ġse tt", + "Ġset t", + ".print StackTrace", + "a be", + "ab e", + "ĉ i", + "Ġ burn", + "Ġb urn", + "Ġbu rn", + "Ġbur n", + "Ġs ociety", + "Ġsoci ety", + "C ache", + "Ca che", + "Ġ Security", + "ĠS ecurity", + "ĠSe curity", + "ĠSec urity", + ". models", + ".model s", + ".mod els", + ".mode ls", + "ĠWARRANT Y", + "_ up", + "_u p", + "ce ive", + "Ġ clients", + "Ġc lients", + "Ġcl ients", + "Ġclient s", + "Ġcli ents", + ". Tr", + ".T r", + "Ġprovid ing", + "Ġprov iding", + "Ġr out", + "Ġro ut", + "Ġrou t", + "m aterial", + "mat erial", + "mate rial", + "Ġ ||Ċ", + "Ġ| |Ċ", + "Ġ|| Ċ", + "Ġ Ser", + "ĠS er", + "ĠSe r", + "Ġ Office", + "ĠOff ice", + "FT WARE", + "Ġ '$", + "Ġ' $", + "Ġf oc", + "Ġfo c", + "Ġex cell", + "Ġexc ell", + "Ġexcel l", + "Ġexce ll", + "Ġ cat", + "Ġc at", + "Ġca t", + "n ormal", + "norm al", + "nor mal", + "Ġd etermine", + "Ġdeter mine", + "Ġdetermin e", + "Ġdeterm ine", + "ĉ uint", + "ĉu int", + "ĉui nt", + "P ane", + "Pa ne", + "Pan e", + "Ġ employees", + "Ġemploy ees", + "Ġemployee s", + "Ġ Texas", + "ĠT exas", + "ĠTex as", + "Ġtr aff", + "Ġtra ff", + "Ġtraf f", + "Ġ Report", + "ĠRe port", + "ĠRep ort", + "ĠRepo rt", + "an ta", + "ant a", + "Ġ Box", + "ĠB ox", + "ĠBo x", + "Ġ django", + "Ġd jango", + "Ġdj ango", + "Ġ partner", + "Ġp artner", + "Ġpart ner", + "E B", + "L INE", + "LI NE", + "LIN E", + "Ġfe eling", + "Ġfeel ing", + "Ġfee ling", + "Ġ civil", + "Ġc ivil", + "Ġci vil", + "Ġciv il", + "( float", + "(f loat", + "S ql", + "Sq l", + "Ġwould n", + ". init", + ".in it", + ".i nit", + ".ini t", + ". left", + ".l eft", + ".le ft", + "- v", + "_ level", + "_le vel", + "' }", + "A F", + "Ġ loading", + "Ġlo ading", + "Ġload ing", + "Ġloa ding", + "Ġ Only", + "ĠOn ly", + "Ġ cookies", + "Ġc ookies", + "Ġco okies", + "Ġcook ies", + "Ġcookie s", + "Ġ Gl", + "ĠG l", + "C O", + "Ġ strategy", + "Ġstr ategy", + "Ġstrateg y", + "Ġstrate gy", + "(' ./", + "('. /", + "Ġ ship", + "Ġs hip", + "Ġsh ip", + "p oses", + "pos es", + "pose s", + "po ses", + "Ġ signal", + "Ġs ignal", + "Ġsign al", + "Ġsig nal", + "Ġ alpha", + "Ġal pha", + "Ġalph a", + ". pop", + ".p op", + ".po p", + "R adius", + "Rad ius", + "Radi us", + "Ġ replace", + "Ġre place", + "Ġrep lace", + "Ġrepl ace", + "_ DIR", + "_D IR", + "_DI R", + "c ounter", + "co unter", + "count er", + "bserv able", + "e la", + "el a", + "W eight", + "We ight", + "Wei ght", + "h ash", + "ha sh", + "has h", + "b ose", + "bo se", + "bos e", + "f x", + "Ġ Email", + "ĠE mail", + "ĠEm ail", + "Ġ refer", + "Ġre fer", + "Ġref er", + "local host", + "_ RO", + "_R O", + "i ques", + "ique s", + "iqu es", + "iq ues", + "S tep", + "St ep", + "Ste p", + "Ġ ahead", + "Ġa head", + "Ġah ead", + "( View", + "(V iew", + "Ġ Services", + "ĠS ervices", + "ĠService s", + "ĠServ ices", + "Ġ Json", + "ĠJ son", + "ĠJs on", + "ess or", + "esso r", + "Ġ pun", + "Ġp un", + "Ġpu n", + "Ġ appropriate", + "Ġapp ropriate", + "Ġappropri ate", + "a kers", + "ak ers", + "ake rs", + "aker s", + "o sen", + "os en", + "ose n", + "p osing", + "pos ing", + "po sing", + "Ġ agent", + "Ġa gent", + "Ġag ent", + "Ġage nt", + "f c", + "Ġ transfer", + "Ġtrans fer", + "Ġtransf er", + "Ġ invalid", + "Ġin valid", + "Ġinval id", + "Ġ Research", + "ĠRe search", + "ĠRes earch", + "Vert ex", + "Ver tex", + "Ġ gay", + "Ġg ay", + "Ġga y", + "Ġ journal", + "Ġj ournal", + "Ġjo urnal", + "Ġjour nal", + "[ x", + "Ġ \"\",Ċ", + "Ġ\" \",Ċ", + "Ġ\"\" ,Ċ", + "Ġ\"\", Ċ", + "Ġ Well", + "ĠW ell", + "ĠWe ll", + "ĠWel l", + ". Tasks", + ".T asks", + ".Task s", + "S pec", + "Sp ec", + "Spe c", + "Ġ ol", + "Ġo l", + "Ġs pend", + "Ġsp end", + "Ġspe nd", + "Ġ Australia", + "ĠA ustralia", + "ĠAustral ia", + "ĠAustr alia", + "M atch", + "Mat ch", + ".j unit", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ MAX", + "ĠM AX", + "ĠMA X", + "iz able", + "iza ble", + "cl usive", + "clus ive", + "_ valid", + "_val id", + "_va lid", + "Ġ quarter", + "Ġqu arter", + "Ġquar ter", + "Ġquart er", + "y an", + "ya n", + "0 05", + "00 5", + "Ġ Edit", + "ĠE dit", + "ĠEd it", + "ar den", + "ard en", + "arde n", + "= new", + "=n ew", + "Ġ frag", + "Ġf rag", + "Ġfr ag", + "Ġfra g", + "B it", + "Bi t", + "z i", + "a ine", + "ain e", + "ai ne", + "u dd", + "ud d", + ". Object", + ".O bject", + ".Obj ect", + "de bug", + "deb ug", + "Ġ cash", + "Ġc ash", + "Ġca sh", + "Ġcas h", + "_ IM", + "_I M", + "Ġ een", + "Ġe en", + "Ġee n", + "Ġ commercial", + "Ġcom mercial", + "Ġcomm ercial", + "Ġcommerc ial", + "Ġ Video", + "ĠV ideo", + "ĠVi deo", + "ĠVid eo", + "ĠVide o", + "l oader", + "lo ader", + "load er", + "Ġ fixed", + "Ġf ixed", + "Ġfix ed", + "Ġfi xed", + "Ġ applications", + "Ġapp lications", + "Ġapplication s", + "Ġapplic ations", + "Ġappl ications", + "Ġ _,", + "Ġ_ ,", + "Ġ Russia", + "ĠR ussia", + "ĠRuss ia", + "it ect", + "ite ct", + "_ (", + "Ġ Block", + "ĠB lock", + "ĠBl ock", + "ĠBlo ck", + "ĠBloc k", + "Ġ san", + "Ġs an", + "Ġsa n", + "Ġ Tom", + "ĠT om", + "ĠTo m", + "Ġ perhaps", + "Ġper haps", + "Ġ sig", + "Ġs ig", + "Ġsi g", + "le vant", + "lev ant", + "Ġc orpor", + "Ġcor por", + "Ġcorp or", + "Ġcorpo r", + "at aset", + "ata set", + "atas et", + "r onic", + "ro nic", + "ron ic", + "x e", + "Ġ eth", + "Ġe th", + "Ġet h", + "S ome", + "So me", + "Som e", + "p op", + "po p", + "_ OK", + "_O K", + "Ġt end", + "Ġte nd", + "Ġten d", + ". Res", + ".R es", + ".Re s", + "_ and", + "_a nd", + "_an d", + "Ġ reviews", + "Ġre views", + "Ġreview s", + "Ġ wild", + "Ġw ild", + "Ġwi ld", + "Ġwil d", + "1 17", + "11 7", + "Ġ degree", + "Ġd egree", + "Ġde gree", + "Ġdeg ree", + ". O", + ". objects", + ".object s", + ".obj ects", + "_ args", + "_arg s", + "_ar gs", + "n il", + "ni l", + "Ġ disabled", + "Ġdis abled", + "Ġdisable d", + "P arent", + "Par ent", + "Pa rent", + "Paren t", + "Ġ notes", + "Ġn otes", + "Ġnot es", + "Ġno tes", + "Ġnote s", + "Ġ \"\"Ċ", + "Ġ\" \"Ċ", + "Ġ\"\" Ċ", + "( state", + "(st ate", + "(stat e", + "i strict", + "istr ict", + "Ġ logging", + "Ġlog ging", + ". IO", + ".I O", + "Ġ Mal", + "ĠM al", + "ĠMa l", + "D M", + "Ġ xml", + "Ġx ml", + "Ġxm l", + "Ġ Robert", + "ĠRob ert", + "ĠRo bert", + "e len", + "el en", + "ele n", + "l ayout", + "lay out", + "f ol", + "fo l", + "' ]))", + "'] ))", + "']) )", + ", b", + "Ġ Jer", + "ĠJ er", + "ĠJe r", + "f ilename", + "file name", + "fi lename", + "fil ename", + "Ġ fan", + "Ġf an", + "Ġfa n", + "Ġ Custom", + "ĠC ustom", + "ĠCust om", + "= \"\"", + "=\" \"", + "Ġ Die", + "ĠD ie", + "ĠDi e", + "B undle", + ". utils", + ".util s", + ".ut ils", + "Ġ trip", + "Ġt rip", + "Ġtr ip", + "Ġtri p", + "M B", + "Ġ soft", + "Ġs oft", + "Ġso ft", + "Ġsof t", + "_ MODE", + "_M ODE", + "_MO DE", + "_MOD E", + "Ġapp licable", + "Ġapplic able", + "Ġappl icable", + "Ġ upper", + "Ġu pper", + "Ġup per", + "Ġupp er", + "ER VER", + "ERV ER", + "ERVE R", + "_ al", + "_a l", + "_ LOG", + "_L OG", + "_LO G", + "H ere", + "He re", + "Her e", + "w p", + "Ġ Server", + "ĠS erver", + "ĠSer ver", + "ĠServ er", + "ĠServe r", + "Ġ Client", + "ĠC lient", + "ĠCl ient", + "ĠCli ent", + "Ġ chem", + "Ġc hem", + "Ġch em", + "Ġche m", + "S croll", + "Sc roll", + "Scr oll", + "Ġ highest", + "Ġh ighest", + "Ġhigh est", + "Ġhi ghest", + "Ġ Select", + "ĠS elect", + "ĠSe lect", + "ĠSel ect", + "ĠSele ct", + "Ġ \"@", + "Ġ\" @", + "Ġ Why", + "ĠW hy", + "ĠWh y", + "S ec", + "Se c", + "h eel", + "he el", + "hee l", + "O peration", + "Oper ation", + "Op eration", + "Opera tion", + "Ġ connected", + "Ġconn ected", + "Ġconnect ed", + "ir med", + "irm ed", + "Ġcit iz", + "Ġ Che", + "ĠC he", + "ĠCh e", + "Ġ forces", + "Ġfor ces", + "Ġforce s", + "Ġforc es", + "Ġ www", + "Ġw ww", + "Ġww w", + "R oot", + "Ro ot", + "AN CE", + "ANC E", + "M any", + "Man y", + "Ma ny", + "i cip", + "ic ip", + "ici p", + "r gan", + "rg an", + "2 20", + "22 0", + "Ġ Tor", + "ĠT or", + "ĠTo r", + "Ġ Press", + "ĠP ress", + "ĠPr ess", + "ĠPres s", + "ĠPre ss", + "Ġ Mor", + "ĠM or", + "ĠMo r", + "- line", + "-l ine", + "-li ne", + "u led", + "ul ed", + "ule d", + "> \\", + "Ġ thus", + "Ġt hus", + "Ġth us", + "Ġthu s", + "Ġ Register", + "ĠReg ister", + "h ol", + "ho l", + "Ġ Chinese", + "ĠCh inese", + "ĠChin ese", + "Ġ posted", + "Ġpos ted", + "Ġpost ed", + "Ġpo sted", + "Ġposte d", + "Ġm agn", + "Ġmag n", + "Ġma gn", + "ab ilities", + "abil ities", + "abilit ies", + "Ġd isease", + "Ġdis ease", + "Ġdise ase", + "Ġrem ains", + "Ġremain s", + "Ġ Prof", + "ĠP rof", + "ĠPro f", + "ĠPr of", + "- form", + "-f orm", + "-for m", + "Ġ cin", + "Ġc in", + "Ġci n", + "o rgan", + "or gan", + "org an", + "i cate", + "ic ate", + "ica te", + "Ġ stress", + "Ġst ress", + "Ġstr ess", + "Ġstre ss", + "] *", + "Ġ ----------------------------------------------------------------", + "Ġ---------------- ------------------------------------------------", + "Ġ------------------------------------------------ ----------------", + "Ġ-------------------------------- --------------------------------", + "Ġ------------------------------------------------------------ ----", + "_ context", + "_con text", + "_cont ext", + "or ry", + "orr y", + "Ġd ied", + "Ġdi ed", + "Ġdie d", + "m at", + "ma t", + "Ġ starts", + "Ġst arts", + "Ġstart s", + "Ġstar ts", + "Ġsta rts", + ". Message", + ".M essage", + "Ġ runs", + "Ġr uns", + "Ġrun s", + "Ġru ns", + "Ġ guide", + "Ġg uide", + "Ġgu ide", + "Ġguid e", + "Ġgui de", + "Ġw arranty", + "Ġwarrant y", + "ent ials", + "ential s", + "enti als", + "d ict", + "di ct", + "dic t", + "Ġ Size", + "ĠS ize", + "ĠSi ze", + "ĠSiz e", + "u ler", + "ul er", + "ule r", + "Ġres ponsible", + "Ġrespons ible", + "_ SET", + "_S ET", + "_SE T", + "Ġcont aining", + "Ġcontain ing", + "Ġconta ining", + "Ġ Price", + "ĠP rice", + "ĠPr ice", + "ĠPri ce", + "| |", + "3 50", + "35 0", + "F S", + "Ġ emp", + "Ġe mp", + "Ġem p", + "_ button", + "_b utton", + "_but ton", + "( uint", + "(u int", + "(ui nt", + "Ġs uff", + "Ġsu ff", + "Ġsuf f", + "p th", + "pt h", + "Ġdef initely", + "Ġdefinit ely", + "Ġdefinite ly", + "p ute", + "put e", + "pu te", + "Ġ marketing", + "Ġmark eting", + "Ġmarket ing", + "Ġ WH", + "ĠW H", + "Ġ Sie", + "ĠS ie", + "ĠSi e", + "+ =", + "OL OR", + "Ġ consult", + "Ġcons ult", + "Ġconsul t", + "Ġ signed", + "Ġs igned", + "Ġsign ed", + "Ġsig ned", + "Ġ sequence", + "Ġse quence", + "Ġsequ ence", + "l ee", + "le e", + "Ġ requirements", + "Ġrequire ments", + "Ġrequirement s", + "h y", + "Ex press", + "Exp ress", + "Expr ess", + "M T", + "s ey", + "se y", + "Ġ ult", + "Ġu lt", + "Ġul t", + "å ®", + "ellig ence", + "elli gence", + "Ġ analy", + "Ġan aly", + "Ġanal y", + "Ġana ly", + "Ġ dress", + "Ġd ress", + "Ġdr ess", + "Ġdre ss", + "e ngine", + "eng ine", + "engin e", + "Ġ Great", + "ĠG reat", + "ĠGr eat", + "ĠGre at", + "Ġ Android", + "ĠAnd roid", + "ĠAndr oid", + "Ġ Alex", + "ĠA lex", + "ĠAl ex", + "ĠAle x", + "m ode", + "mod e", + "mo de", + "D ictionary", + ". Date", + ".D ate", + "ä ½", + "V ICE", + "VI CE", + "VIC E", + "Ġf amilies", + "Ġfam ilies", + "Ġfamil ies", + "Ġ Russian", + "ĠR ussian", + "ĠRuss ian", + "ĠRussia n", + "ĠRus sian", + "Ġ Times", + "ĠT imes", + "ĠTime s", + "ĠTim es", + "ĠTi mes", + ". call", + ".c all", + ".ca ll", + ".cal l", + "$ (", + "Pro file", + "Pr ofile", + "Prof ile", + "Ġ folder", + "Ġf older", + "Ġfol der", + "Ġfold er", + "Ġfo lder", + "c hes", + "ch es", + "che s", + "Ġl egis", + "Ġle gis", + "Ġleg is", + "_ row", + "_r ow", + "_ro w", + "u nes", + "un es", + "une s", + "Ù Ħ", + "Ġ }).", + "Ġ} ).", + "Ġ}) .", + "As sert", + "Ass ert", + "a gen", + "ag en", + "age n", + "Ġ Hand", + "ĠH and", + "ĠHa nd", + "ĠHan d", + "I ter", + "It er", + "Ġbig gest", + "o reach", + "or each", + "ore ach", + "orea ch", + "Ġp olic", + "Ġpol ic", + "Ġpo lic", + "Ġ permissions", + "Ġper missions", + "Ġpermission s", + "Ġperm issions", + "Ġsh owed", + "Ġshow ed", + "Ġsho wed", + "Ġ Element", + "ĠE lement", + "ĠEl ement", + "ĠEle ment", + "ĠElem ent", + "Ġ topic", + "Ġt opic", + "Ġto pic", + "Ġtop ic", + "âĢĶ âĢĶ", + "r oad", + "ro ad", + "Ġ Bank", + "ĠB ank", + "ĠBa nk", + "ĠBan k", + "re cord", + "rec ord", + "Ġ partners", + "Ġpart ners", + "Ġpartner s", + "Ġ Ref", + "ĠR ef", + "ĠRe f", + "ess ions", + "ession s", + "Ġas sess", + "Ġass ess", + "Ġasses s", + "U ST", + "US T", + "Ġ Party", + "ĠP arty", + "ĠPart y", + "ĠPar ty", + "p rodu", + "pr odu", + "pro du", + "prod u", + "L C", + "Ġ ul", + "Ġu l", + ". form", + ".f orm", + ".for m", + "h ide", + "hi de", + "hid e", + "c opy", + "co py", + "cop y", + "U TF", + "UT F", + "Ġ SOFTWARE", + "ĠSO FTWARE", + "čĊ čĊčĊ", + "čĊčĊ čĊ", + "Ġ Lin", + "ĠL in", + "ĠLi n", + "u na", + "un a", + "u gar", + "ug ar", + "uga r", + "Ġ administration", + "Ġadmin istration", + "Ġadministr ation", + "Ġ opening", + "Ġop ening", + "Ġopen ing", + "Ġ scan", + "Ġs can", + "Ġsc an", + "Ġsca n", + "Ġ continued", + "Ġcontin ued", + "Ġcontinue d", + "Ġcontinu ed", + "com ponent", + "comp onent", + ". sp", + ".s p", + "Ġhapp ens", + "Ġhappen s", + "um my", + "umm y", + "Ġ PR", + "ĠP R", + ". File", + ".F ile", + "Ġ Download", + "ĠD ownload", + "ĠDown load", + "Lo ading", + "Load ing", + "d i", + "Ġ waiting", + "Ġwait ing", + "Ġwa iting", + "_ ADD", + "_A DD", + "_AD D", + "T ab", + "Ta b", + ". querySelector", + ".query Selector", + "Ġe conomy", + "Ġecon omy", + "Ġeconom y", + "Ġec onomy", + "Ġ French", + "ĠF rench", + "ĠFr ench", + "t xt", + "tx t", + "Ġ fant", + "Ġf ant", + "Ġfa nt", + "Ġfan t", + "_ ;Ċ", + "_; Ċ", + "H older", + "Hold er", + "Ho lder", + "Hol der", + "S H", + "0 04", + "00 4", + "Ġ numpy", + "Ġn umpy", + "Ġnum py", + "Ġ street", + "Ġst reet", + "Ġstre et", + "Ġ male", + "Ġm ale", + "Ġma le", + "Ġmal e", + "\\ Model", + "\\M odel", + "an ging", + "ang ing", + "angi ng", + "3 33", + "33 3", + "Ġ Bill", + "ĠB ill", + "ĠBi ll", + "ĠBil l", + "Ġpre viously", + "Ġprevious ly", + "Ġprev iously", + "B I", + "Ġ Secret", + "ĠS ecret", + "ĠSe cret", + "ĠSec ret", + "Ġ mist", + "Ġm ist", + "Ġmis t", + "Ġmi st", + "Ġ Field", + "ĠF ield", + "ĠFi eld", + "u ps", + "up s", + "Ġ Process", + "ĠP rocess", + "ĠPro cess", + "ĠProc ess", + "Ġ kept", + "Ġk ept", + "Ġke pt", + "Ġkep t", + "Ġ OT", + "ĠO T", + "Ġ traditional", + "Ġtrad itional", + "Ġtradition al", + ". i", + "a min", + "am in", + "ami n", + "Ġh elps", + "Ġhelp s", + "Ġhel ps", + "A ny", + "An y", + "or igin", + "orig in", + "ori gin", + "il ters", + "ilter s", + "ilt ers", + "j u", + "d esc", + "de sc", + "des c", + "Ġ Account", + "ĠA ccount", + "ĠAc count", + "ĠAcc ount", + "Ġ )čĊ", + "Ġ) čĊ", + "k top", + "kt op", + "ol ly", + "oll y", + "Ġ fs", + "Ġf s", + "Ġ ê", + "Ġ ut", + "Ġu t", + "Ġ central", + "Ġc entral", + "Ġcent ral", + "Ġcentr al", + "( test", + "(t est", + "(te st", + ". An", + ".A n", + "Ġs atisf", + "G R", + "Ġ Full", + "ĠF ull", + "ĠFu ll", + "ĠFul l", + "Ġ heat", + "Ġh eat", + "Ġhe at", + "i ber", + "ib er", + "ibe r", + "Ġ onto", + "Ġon to", + "Ġont o", + "m os", + "mo s", + "S chema", + "Sch ema", + "Ġ factory", + "Ġf actory", + "Ġfact ory", + "Ġfactor y", + "Ġfacto ry", + "\" .$", + "\". $", + "a ws", + "aw s", + "St atement", + "State ment", + "Stat ement", + "( target", + "(t arget", + "ĉ new", + "ĉn ew", + ". be", + ".b e", + "Ġ guest", + "Ġg uest", + "Ġgu est", + "Ġ mal", + "Ġm al", + "Ġma l", + "A RY", + "AR Y", + "Ġre ached", + "Ġreach ed", + "Ġ mouse", + "Ġm ouse", + "Ġmo use", + "Ġmou se", + "Ġ challenge", + "Ġch allenge", + "Ġchall enge", + "Ġchalleng e", + "ĉ double", + "ĉd ouble", + "ĉdo uble", + "Ġ Tem", + "ĠT em", + "ĠTe m", + "Ġ terror", + "Ġt error", + "Ġte rror", + "Ġter ror", + "Ġterr or", + "Ġ extract", + "Ġex tract", + "Ġext ract", + "Ġextra ct", + "Ġextr act", + "_ TO", + "_T O", + "Ġse parate", + "Ġsepar ate", + "Ġseparat e", + "Ġ mir", + "Ġm ir", + "Ġmi r", + "h elp", + "he lp", + "hel p", + "Ġ capacity", + "Ġcap acity", + "Ġcapac ity", + "Ġcapacit y", + "Ġ Property", + "ĠP roperty", + "ĠPro perty", + "ĠProp erty", + "ĠProper ty", + "k an", + "ka n", + "_ create", + "_c reate", + "_cre ate", + "Ġ Light", + "ĠL ight", + "ĠLi ght", + "ĠLig ht", + ". parent", + ".p arent", + ".par ent", + ".pa rent", + "Ġunder standing", + "Ġunderstand ing", + "Ġunderst anding", + "Ġe asier", + "Ġeas ier", + "Ġ |=", + "Ġ| =", + "Ġ enh", + "Ġe nh", + "Ġen h", + "Ġ fat", + "Ġf at", + "Ġfa t", + "Ġpro test", + "Ġprot est", + "Ġprote st", + "a mm", + "am m", + "_ AT", + "_A T", + "- of", + "-o f", + "i ls", + "il s", + "Ġ Oh", + "ĠO h", + "Ġ psych", + "Ġps ych", + "Ġpsy ch", + "Ġ $.", + "Ġ$ .", + "i nds", + "in ds", + "ind s", + "Ġ relative", + "Ġrel ative", + "Ġrelativ e", + "Ġrelat ive", + "s hop", + "sh op", + "s hort", + "sh ort", + "Ġ Sand", + "ĠS and", + "ĠSan d", + "ĠSa nd", + "2 10", + "21 0", + "u estion", + "ues tion", + "uest ion", + "Ġf ear", + "Ġfe ar", + "/ ĊĊ", + "/Ċ Ċ", + ". context", + ".con text", + ".cont ext", + "Ġ schools", + "Ġschool s", + "Ġsch ools", + "Ġscho ols", + "Ġ serve", + "Ġs erve", + "Ġse rve", + "Ġser ve", + "Ġserv e", + "z one", + "zo ne", + "zon e", + "_ db", + "_d b", + "Ġmajor ity", + "ex ample", + "exam ple", + "Ġ lang", + "Ġl ang", + "Ġla ng", + "Ġlan g", + "ĉ ĠĠ", + "ĉĠ Ġ", + "Reg ister", + "e ndo", + "en do", + "end o", + "Ġ processing", + "Ġp rocessing", + "Ġprocess ing", + "Ġproces sing", + "_ template", + "_t emplate", + "_temp late", + "_tem plate", + "- user", + "-use r", + "-us er", + "-u ser", + "Ġ eg", + "Ġe g", + "C OM", + "CO M", + "Ġ Blue", + "ĠB lue", + "ĠBl ue", + "ĠBlu e", + "i ro", + "ir o", + "Ġ remote", + "Ġrem ote", + "Ġremot e", + "Ġ IT", + "ĠI T", + "# !/", + "#! /", + "Ġred istrib", + "Ġredis trib", + "1 24", + "12 4", + "r az", + "ra z", + "Ġ Since", + "ĠS ince", + "ĠSi nce", + "ĠSin ce", + "Ġ Tur", + "ĠT ur", + "ĠTu r", + "1 35", + "13 5", + "Back ground", + "= ==", + "== =", + "Ġ reflect", + "Ġref lect", + "Ġrefl ect", + "Ġp ros", + "Ġpro s", + "Ġpr os", + "c md", + "cm d", + "Ġw hom", + "Ġwh om", + "Ġwho m", + "Com pat", + "Comp at", + "Ġ Are", + "ĠA re", + "ĠAr e", + "Id entifier", + "Ident ifier", + "ĠT hom", + "ĠTh om", + "_ port", + "_p ort", + "_po rt", + "_por t", + "g u", + "Ġ monitor", + "Ġm onitor", + "Ġmon itor", + "r m", + "Ġ patient", + "Ġp atient", + "Ġpat ient", + "ver ter", + "vert er", + "verte r", + "Ġ gain", + "Ġg ain", + "Ġga in", + "- ui", + "-u i", + "I nst", + "In st", + "Ins t", + "Ġd ies", + "Ġdi es", + "Ġdie s", + "1 18", + "11 8", + "A rea", + "Ar ea", + "Are a", + "_ filter", + "_f ilter", + "_fil ter", + "_filt er", + "Ġg rat", + "Ġgr at", + "Ġgra t", + "Ġre ality", + "Ġreal ity", + "ord inate", + "ordin ate", + "ol ved", + "olve d", + "olv ed", + "Cont act", + "Conta ct", + "Ġcom pliance", + "Ġcompl iance", + "_ or", + "_o r", + "Ġ Var", + "ĠV ar", + "ĠVa r", + "d l", + "Ġ append", + "Ġapp end", + "Ġap pend", + "Ġappe nd", + "G ER", + "GE R", + "( max", + "(m ax", + ". render", + ".re nder", + ".r ender", + "Ġ dynamic", + "Ġd ynamic", + "Ġdynam ic", + "Ġdyn amic", + "ordin ates", + "ordinate s", + "_ options", + "_option s", + "_o ptions", + "_opt ions", + "_ column", + "_c olumn", + "_col umn", + "Ġb atter", + "Ġbatt er", + "Ġbat ter", + "s pace", + "sp ace", + "spa ce", + "L a", + "Ġ Source", + "ĠS ource", + "ĠSour ce", + "/ bin", + "/b in", + "Ġ dos", + "Ġd os", + "Ġdo s", + "Ġ Board", + "ĠB oard", + "ĠBo ard", + "Ġ Thread", + "ĠT hread", + "ĠTh read", + "ĠThr ead", + "Ġ AL", + "ĠA L", + "( config", + "(con fig", + "(conf ig", + "1 44", + "14 4", + "Ġ Mer", + "ĠM er", + "ĠMe r", + "Ġm iles", + "Ġmil es", + "Ġmi les", + "Ġmile s", + "_ header", + "_head er", + "_he ader", + "ETH OD", + "i zz", + "iz z", + "Ġb enefit", + "Ġbenef it", + "Ġbene fit", + "Ġ integr", + "Ġint egr", + "Ġinteg r", + "Ġinte gr", + "( current", + "(c urrent", + "(cur rent", + "(curr ent", + "u lo", + "ul o", + ". default", + ".d efault", + ".de fault", + ".def ault", + "Ġ Div", + "ĠD iv", + "ĠDi v", + "Ġ ton", + "Ġt on", + "Ġto n", + "o th", + "ot h", + "er vation", + "erv ation", + "erva tion", + "e dom", + "ed om", + "edo m", + "Ġ baby", + "Ġb aby", + "Ġba by", + "Ġbab y", + "ce ived", + "ceive d", + ". top", + ".t op", + ".to p", + "rior ity", + "Ġ Local", + "ĠL ocal", + "ĠLo cal", + "ĠLoc al", + "r iage", + "ri age", + "ria ge", + "Ġ attacks", + "Ġatt acks", + "Ġattack s", + "Ġ hospital", + "Ġh ospital", + "Ġhosp ital", + "1 68", + "16 8", + "Ġ female", + "Ġf emale", + "Ġfe male", + "Ġfem ale", + "Ġ Login", + "ĠLog in", + "ĠLo gin", + "ĠF lor", + "ĠFl or", + "ĠFlo r", + "Ġ chain", + "Ġch ain", + "Ġcha in", + "Ġchai n", + "ash ion", + "ashi on", + "Text ure", + "Tex ture", + "S ave", + "Sa ve", + "Ġ farm", + "Ġf arm", + "Ġfa rm", + "Ġfar m", + ". contains", + ".con tains", + ".cont ains", + ". Test", + ".T est", + ".Te st", + "Ġkn ows", + "Ġknow s", + "Ġgener ally", + "Ġgeneral ly", + "ip eline", + "ipe line", + "ipel ine", + "Ġme ant", + "Ġmean t", + "e ncia", + "en cia", + "enc ia", + "enci a", + "Ġn icht", + "Ġni cht", + "Ġnic ht", + "Ġnich t", + "Ġ contents", + "Ġcont ents", + "Ġcontent s", + "Ġconten ts", + "Ġconte nts", + "P M", + "ched ule", + "( line", + "(l ine", + "(li ne", + "C G", + "j ob", + "jo b", + "Ġ Real", + "ĠRe al", + "u er", + "ue r", + "f irm", + "fi rm", + "fir m", + "Ġ Ø", + "e tro", + "et ro", + "etr o", + "\" `Ċ", + "\"` Ċ", + "Ġ speech", + "Ġs peech", + "Ġspe ech", + "Ġ thr", + "Ġt hr", + "Ġth r", + "f oreach", + "fo reach", + "fore ach", + "for each", + "Ġ warn", + "Ġw arn", + "Ġwar n", + "Ġwa rn", + "ĉ l", + "Ġ heavy", + "Ġhe avy", + "Ġheav y", + "< li", + " )", + "_ char", + "_c har", + "_ch ar", + "re source", + "res ource", + "Ġ episode", + "Ġep isode", + "Ġepis ode", + "Ġ '_", + "Ġ' _", + "Ġ Es", + "ĠE s", + "Ġ Earth", + "ĠE arth", + "ĠEar th", + "Âł Âł", + "UP DATE", + "1 33", + "13 3", + "Ġ Sou", + "ĠS ou", + "ĠSo u", + "u is", + "ui s", + "t ypes", + "type s", + "ty pes", + "typ es", + "Ġ mas", + "Ġm as", + "Ġma s", + "Ġ fav", + "Ġf av", + "Ġfa v", + "Ġ construct", + "Ġcon struct", + "Ġconstr uct", + "_ rate", + "_r ate", + "_ra te", + "_rat e", + "e ras", + "er as", + "era s", + "Ġ |Ċ", + "Ġ| Ċ", + "rop erties", + "Ġ external", + "Ġex ternal", + "Ġext ernal", + "Ġextern al", + "Ġexter nal", + "Ġapp lied", + "Ġap plied", + "Ġappl ied", + "Ġ prefix", + "Ġp refix", + "Ġpre fix", + "Ġpref ix", + "o ted", + "ot ed", + "ote d", + "l ers", + "le rs", + "ler s", + "Ġ cold", + "Ġc old", + "Ġco ld", + "Ġcol d", + "Ġ SP", + "ĠS P", + "Ġ Church", + "ĠCh urch", + "ĠChu rch", + "Ġ Output", + "ĠOut put", + "l osed", + "lo sed", + "lose d", + "los ed", + "ç ļ", + "if icate", + "ific ate", + "ifi cate", + "ifica te", + "o peration", + "op eration", + "ope ration", + "oper ation", + "he rit", + "her it", + "x FF", + "xF F", + ". env", + ".e nv", + ".en v", + "_ err", + "_e rr", + "_er r", + "o sh", + "os h", + "D irection", + "Dir ection", + "Direct ion", + "Di rection", + "Dire ction", + "C ancel", + "Can cel", + "Ġ Frank", + "ĠF rank", + "ĠFr ank", + "ĠFra nk", + "ĠFran k", + "Ġ finding", + "Ġf inding", + "Ġfind ing", + "Ġfin ding", + ". )ĊĊ", + ".) ĊĊ", + ".)Ċ Ċ", + "Ġ router", + "Ġr outer", + "Ġro uter", + "Ġroute r", + "Ġrout er", + "Ġrou ter", + "ãĥ »", + "s es", + "se s", + "Ġ crow", + "Ġc row", + "Ġcr ow", + "Ġcro w", + "= ='", + "== '", + "Ġ sand", + "Ġs and", + "Ġsa nd", + "Ġsan d", + "Ġ rid", + "Ġr id", + "Ġri d", + "i ture", + "it ure", + "itu re", + "itur e", + "Ġ entre", + "Ġen tre", + "Ġent re", + "Ġentr e", + "Ġ observ", + "Ġo bserv", + "Ġob serv", + "Ġobs erv", + "Ġ vac", + "Ġv ac", + "Ġva c", + "ð Ł", + "- T", + "A rt", + "Ar t", + "n ight", + "ni ght", + ". search", + ".s earch", + ".se arch", + "Ġ exchange", + "Ġex change", + "Ġ district", + "Ġd istrict", + "Ġdi strict", + "Ġdistr ict", + ". os", + ".o s", + "Ġ department", + "Ġde partment", + "Ġdep artment", + "Ġdepart ment", + "Ġ documents", + "Ġdocument s", + "Ġdoc uments", + "Ġcent ury", + "Ġ Next", + "ĠN ext", + "ĠNe xt", + "ĠNex t", + "H ost", + "Ho st", + "ĠK IND", + "Ġs usp", + "Ġsu sp", + "Ġsus p", + "- P", + "r end", + "re nd", + "ren d", + ". em", + ".e m", + "u ite", + "ui te", + "uit e", + "i sters", + "is ters", + "ist ers", + "ister s", + "iste rs", + "( json", + "(j son", + "(js on", + "Ġ Ann", + "ĠA nn", + "ĠAn n", + "w t", + "a ti", + "at i", + "Ġ HTML", + "ĠHT ML", + "w hen", + "wh en", + "D irectory", + "Direct ory", + "Director y", + "Ġsh ut", + "< a", + "e dy", + "ed y", + "Ġ healthy", + "Ġhealth y", + "Ġheal thy", + "Ġ temperature", + "Ġt emperature", + "Ġtem perature", + "Ġtemper ature", + "Ġ Gen", + "ĠG en", + "ĠGe n", + "Ġ metal", + "Ġm etal", + "Ġme tal", + "Ġmet al", + "Ġmeta l", + "Ġ submit", + "Ġsub mit", + "Ġ DO", + "ĠD O", + "Ġat tract", + "Ġatt ract", + "Ġattr act", + "Ġ {};Ċ", + "Ġ{ };Ċ", + "Ġ{} ;Ċ", + "Ġ{}; Ċ", + "Ġ Word", + "ĠW ord", + "ĠWo rd", + "ĠWor d", + "Ġ ll", + "Ġl l", + "Ġse emed", + "Ġsee med", + "Ġseem ed", + "k o", + "I ED", + "IE D", + "Ġl abor", + "Ġla bor", + "Ġlab or", + ". Context", + ".Cont ext", + ".Con text", + "Ġ asset", + "Ġas set", + "Ġass et", + "y ou", + "yo u", + "Ġ cars", + "Ġc ars", + "Ġcar s", + "Ġca rs", + "Ġ Column", + "ĠC olumn", + "ĠCol umn", + "ĠColum n", + "Ġ ré", + "Ġr é", + "Ġ square", + "Ġs quare", + "Ġsqu are", + "Ġ NSString", + "ĠNS String", + "ĠNSS tring", + "âĢĿ ,", + "a pes", + "ap es", + "ape s", + ". ..Ċ", + ".. .Ċ", + "... Ċ", + "Ġ thanks", + "Ġth anks", + "Ġthan ks", + "Ġthank s", + "( props", + "(p rops", + "(pro ps", + "(pr ops", + "(prop s", + "Ġ tick", + "Ġt ick", + "Ġti ck", + "Ġtic k", + "Ġ experiment", + "Ġex periment", + "Ġexper iment", + "Ġexperi ment", + "Ġpr ison", + "Ġpri son", + "Ġpris on", + "t ree", + "tr ee", + "tre e", + "- text", + "-t ext", + "-te xt", + "Ġ IOException", + "ĠIO Exception", + "- width", + "-w idth", + "_ STATUS", + "_ST ATUS", + "_STAT US", + "f ast", + "fa st", + "fas t", + "- body", + "-b ody", + "-bo dy", + "- header", + "-head er", + "-he ader", + "Ġg uar", + "Ġgu ar", + "c rete", + "cre te", + "cret e", + "cr ete", + "Ġ Tim", + "ĠT im", + "ĠTi m", + "Ġcl early", + "Ġclear ly", + "Ġ Republican", + "ĠRepublic an", + "Ġ justify", + "Ġjust ify", + "и ÑĤ", + "ĉ ĠĠĠĠ", + "ĉĠĠĠ Ġ", + "ĉĠ ĠĠĠ", + "ĉĠĠ ĠĠ", + "c ache", + "ca che", + "cac he", + "; //", + ";/ /", + "Ġ presence", + "Ġpres ence", + "Ġf actors", + "Ġfact ors", + "Ġfa ctors", + "Ġfac tors", + "Ġfactor s", + "Ġfacto rs", + "Ġ employee", + "Ġe mployee", + "Ġemploy ee", + "] ))", + "]) )", + "M ember", + "Mem ber", + "Ġ selector", + "Ġse lector", + "Ġselect or", + "Ġsel ector", + "Ġsele ctor", + "b or", + "bo r", + "Ġ Mex", + "ĠM ex", + "ĠMe x", + "çļ Ħ", + "u tex", + "ut ex", + "ute x", + "_ tag", + "_t ag", + "_ta g", + "ail ure", + "Ġ Net", + "ĠN et", + "ĠNe t", + "Ġre li", + "Ġr eli", + "Ġrel i", + "E G", + "Ġ fprintf", + "Ġf printf", + "Ġ teen", + "Ġt een", + "Ġte en", + "Ġtee n", + "l oss", + "lo ss", + "los s", + "Ġle aving", + "1 34", + "13 4", + "De legate", + "Ġ beat", + "Ġb eat", + "Ġbe at", + "Ġ minute", + "Ġmin ute", + "Ġminut e", + "sub scribe", + "subs cribe", + "Ġred istribute", + "Ġredistrib ute", + "Ġredis tribute", + "Con stants", + "Constant s", + "Const ants", + "Ġc ancer", + "Ġcan cer", + "Ġcanc er", + "/ {", + "B L", + "Ġ span", + "Ġs pan", + "Ġsp an", + "Ġspa n", + "Ġ Child", + "ĠCh ild", + "ĠChi ld", + "C enter", + "Cent er", + "Ġ earth", + "Ġe arth", + "Ġear th", + "Y S", + "Ġ Level", + "ĠLe vel", + "ĠLev el", + "Ġ sea", + "Ġs ea", + "Ġse a", + ". support", + ".s upport", + ".sup port", + ". inner", + ".in ner", + ". Item", + ".I tem", + ".It em", + "il ling", + "ill ing", + "illi ng", + "illin g", + "Ġ ĠĠĠĊĠĠĠĠĊ", + "ĠĠ ĠĠĊĠĠĠĠĊ", + "ĠĠĠĠ ĊĠĠĠĠĊ", + "ĠĠĠ ĠĊĠĠĠĠĊ", + "ĠĠĠĠĊ ĠĠĠĠĊ", + "Ġ Label", + "ĠL abel", + "ĠLa bel", + "ĠLab el", + "3 20", + "32 0", + "Ġ Est", + "ĠE st", + "ĠEs t", + "( arg", + "(a rg", + "(ar g", + "1 45", + "14 5", + "bo Box", + "ĉ foreach", + "ĉf oreach", + "ĉfor each", + "c os", + "co s", + "F ailed", + "Fail ed", + "Fa iled", + "s wers", + "sw ers", + "swer s", + "E ditor", + "Ed itor", + "Edit or", + "r ont", + "ro nt", + "ron t", + "Ġ MP", + "ĠM P", + "ex pr", + "exp r", + "Ġ Life", + "ĠL ife", + "ĠLi fe", + "ĠLif e", + "Ġ ??", + "Ġ? ?", + "ö r", + "Ġ attend", + "Ġatt end", + "Ġatte nd", + "Ġ Que", + "ĠQ ue", + "ĠQu e", + "Ġ species", + "Ġs pecies", + "Ġsp ecies", + "Ġspec ies", + "Ġspe cies", + "Ġspeci es", + "- D", + "Ġ aus", + "Ġa us", + "Ġau s", + "Str uct", + "Ġadv antage", + "Ġadvant age", + "o ston", + "os ton", + "ost on", + "osto n", + "- block", + "-b lock", + "-bl ock", + "in itial", + "init ial", + "C RE", + "CR E", + "Ġtr uly", + "Ġ compare", + "Ġcom pare", + "Ġcomp are", + "Ġcompar e", + "or ney", + "orn ey", + "orne y", + "Ġ spect", + "Ġs pect", + "Ġsp ect", + "Ġspec t", + "Ġspe ct", + "F ull", + "Fu ll", + "b es", + "be s", + "Ġ visible", + "Ġv isible", + "Ġvis ible", + "Ġ mess", + "Ġm ess", + "Ġme ss", + "Ġmes s", + "st ances", + "stance s", + "sta nces", + "stan ces", + "Ġ cloud", + "Ġc loud", + "Ġcl oud", + "Ġclo ud", + "_ version", + "_v ersion", + "Ġf urn", + "Ġfur n", + "Ġfu rn", + "ic ago", + "ica go", + "L OW", + "LO W", + "Ġ traffic", + "Ġtraff ic", + "Ġtra ffic", + "Ġtraf fic", + "Ġ fol", + "Ġf ol", + "Ġfo l", + "ry pto", + "rypt o", + "Ġ declar", + "Ġde clar", + "Ġdec lar", + "Ġdecl ar", + "Ġ slot", + "Ġs lot", + "Ġsl ot", + "Ġslo t", + "Ġ Ext", + "ĠE xt", + "ĠEx t", + "Ġ England", + "ĠEng land", + "ĠEngl and", + "Ġ Under", + "ĠU nder", + "ĠUn der", + "ĠUnd er", + "Ġ ta", + "Ġt a", + "l etter", + "let ter", + "lette r", + "lett er", + "2 03", + "20 3", + "Ġoff icer", + "Ġoffic er", + "Ġoffice r", + "Ġ Donald", + "ĠD onald", + "ĠDon ald", + "Y es", + "Ye s", + "_ json", + "_j son", + "_js on", + "I TableView", + "IT ableView", + "Ġ USE", + "ĠU SE", + "ĠUS E", + "mploy ee", + "Ġop inion", + "Ġopin ion", + "Ġ Aut", + "ĠA ut", + "ĠAu t", + "b order", + "bor der", + "Ġad vice", + "Ġadv ice", + "Ġautom atically", + "Ġautomatic ally", + "Ġautomat ically", + "is co", + "isc o", + "Ġ mm", + "Ġm m", + ". vis", + ".v is", + "a ml", + "am l", + "Ġ initialize", + "Ġinitial ize", + "Ġ ({", + "Ġ( {", + "Ġ ;ĊĊ", + "Ġ; ĊĊ", + "Ġ;Ċ Ċ", + "Ġ generation", + "Ġg eneration", + "Ġgener ation", + "Ġgen eration", + "Ġgene ration", + "Ġgenera tion", + "Ġ bits", + "Ġb its", + "Ġbit s", + "Ġbi ts", + "cl ipse", + "clip se", + "Ġu nf", + "Ġun f", + "u tors", + "ut ors", + "uto rs", + "utor s", + "p lt", + "pl t", + "Ġ delta", + "Ġd elta", + "Ġdel ta", + "Ġdelt a", + "e stroy", + "est roy", + "estr oy", + "estro y", + "i sis", + "is is", + "isi s", + "< br", + "Ċ", + "'> Ċ", + "a pers", + "ap ers", + "ape rs", + "aper s", + "] (", + "cont inue", + "contin ue", + "s pec", + "sp ec", + "spe c", + "Ġ Road", + "ĠR oad", + "ĠRo ad", + "A SH", + "AS H", + "il iar", + "ili ar", + "ilia r", + "Ġcontin ues", + "Ġcontinue s", + "Ġcontinu es", + "Ġ appoint", + "Ġapp oint", + "Ġap point", + "Ġ #Ċ", + "Ġ# Ċ", + "Ġ Vir", + "ĠV ir", + "ĠVi r", + "Ġ ?>\"", + "Ġ? >\"", + "Ġ?> \"", + "Ġ bin", + "Ġb in", + "Ġbi n", + "} \",", + "}\" ,", + "go ing", + "e ach", + "ea ch", + "B D", + "1 85", + "18 5", + "Ġ Access", + "ĠA ccess", + "ĠAc cess", + "ĠAcc ess", + "D oc", + "Do c", + "Ġ Management", + "ĠMan agement", + "ĠManage ment", + "ĠMana gement", + "B ER", + "BE R", + "as ket", + "ask et", + ". getInstance", + ".get Instance", + ".getIn stance", + "1 29", + "12 9", + "Ġestablish ed", + "s ocket", + "so cket", + "sock et", + "soc ket", + "I NS", + "IN S", + "ĉ virtual", + "ĉv irtual", + "ĉ result", + "ĉres ult", + "RE AD", + "REA D", + "_ height", + "_h eight", + "_he ight", + "1 52", + "15 2", + "Ġ Font", + "ĠF ont", + "ĠFo nt", + "ĠFon t", + "Ġ ();Ċ", + "Ġ( );Ċ", + "Ġ() ;Ċ", + "Ġ(); Ċ", + "_ html", + "_h tml", + "_ht ml", + "Ġ neighbor", + "Ġne ighbor", + "Ġneighb or", + "Ġneigh bor", + "l or", + "lo r", + "Ġ gather", + "Ġg ather", + "Ġga ther", + "Ġ })ĊĊ", + "Ġ} )ĊĊ", + "Ġ})Ċ Ċ", + "Ġ}) ĊĊ", + "Ġ identity", + "Ġid entity", + "Ġide ntity", + "Ġident ity", + "Ġ fab", + "Ġf ab", + "Ġfa b", + "p adding", + "pad ding", + "Ġ Route", + "ĠR oute", + "ĠRo ute", + "ĠRou te", + "ĠRout e", + "Enumer able", + "Enum erable", + "à ´", + "Ġ forced", + "Ġfor ced", + "Ġforce d", + "Ġforc ed", + "/ jquery", + "/j query", + ". ĊĊĊĊĊĊ", + ".ĊĊ ĊĊĊĊ", + ".Ċ ĊĊĊĊĊ", + ".ĊĊĊĊ ĊĊ", + ".ĊĊĊ ĊĊĊ", + ".ĊĊĊĊĊ Ċ", + "res ents", + "resent s", + "rese nts", + "_ left", + "_l eft", + "_le ft", + ". Param", + ".P aram", + ".Par am", + "ĉ throw", + "ĉth row", + "Ġ Ham", + "ĠH am", + "ĠHa m", + "Ġevent ually", + "Ġeventual ly", + "a cer", + "ace r", + "ac er", + "p ub", + "pu b", + "Ġ tra", + "Ġt ra", + "Ġtr a", + "un ique", + "uni que", + "uniq ue", + "d el", + "de l", + "Ġ Florida", + "ĠFl orida", + "ĠFlor ida", + "Ġ Clean", + "ĠC lean", + "ĠCl ean", + "ĠCle an", + "x a", + "Ġ ·", + "Ġ ·", + "Ġ validate", + "Ġvalid ate", + "Ġvalida te", + "Vis ual", + "Ex pression", + "Exp ression", + "Express ion", + "Expr ession", + "_ func", + "_f unc", + "_fun c", + "_fu nc", + "m ember", + "mem ber", + "ĉ h", + "t rl", + "tr l", + "1 36", + "13 6", + "ĉ G", + "nap shot", + "Ġ PropTypes", + "ĠProp Types", + "v in", + "vi n", + "1 53", + "15 3", + "] )ĊĊ", + "]) ĊĊ", + "])Ċ Ċ", + "o wl", + "ow l", + "if ies", + "ifi es", + "ifie s", + "Ġ $('.", + "Ġ$ ('.", + "Ġ$( '.", + "Ġ$(' .", + "Ġ Context", + "ĠCon text", + "ĠCont ext", + "ĠConte xt", + "Ġ Toast", + "ĠTo ast", + ". Key", + ".K ey", + "Ġoff icers", + "Ġoffic ers", + "Ġoffice rs", + "Ġofficer s", + "/ n", + "s n", + "un defined", + "und efined", + "undef ined", + ". items", + ".i tems", + ".item s", + ".it ems", + "ut ow", + "uto w", + "a mage", + "am age", + "ama ge", + "Ġ accounts", + "Ġac counts", + "Ġaccount s", + "o okie", + "ook ie", + "oo kie", + "S ection", + "Se ction", + "Sec tion", + "ic ians", + "ici ans", + "ician s", + "icia ns", + "Ġad vis", + "Ġadv is", + "( is", + "(i s", + "[ :,", + "[: ,", + "Ġ France", + "ĠF rance", + "ĠFr ance", + "ĠFranc e", + "ĠFra nce", + "ĠFran ce", + "F unc", + "Fun c", + "Fu nc", + "ic ious", + "ici ous", + "icio us", + "Ġ tok", + "Ġt ok", + "Ġto k", + "Ch annel", + "Chan nel", + "Ġ AD", + "ĠA D", + "_ NUM", + "_N UM", + "Ġ timeout", + "Ġtime out", + "l emma", + "le mma", + "lem ma", + "r eme", + "re me", + "rem e", + "u j", + ". Al", + ".A l", + "u clear", + "uc lear", + "ucle ar", + "( os", + "(o s", + "( \"<", + "(\" <", + "[ Ċ", + "f etch", + "fet ch", + "Ġ bal", + "Ġb al", + "Ġba l", + "Ġ guid", + "Ġg uid", + "Ġgu id", + "Ġgui d", + "- align", + "-al ign", + "Ġ Write", + "ĠW rite", + "ĠWr ite", + "Ġ Once", + "ĠO nce", + "ĠOn ce", + "ĠOnc e", + "utow ired", + "OD ULE", + "Ġ pitch", + "Ġp itch", + "Ġpit ch", + "C F", + "by tes", + "byte s", + "byt es", + "Ġ Commission", + "ĠCom mission", + "ĠComm ission", + "Ġin cred", + "Ġincre d", + "Ġinc red", + "Ġincr ed", + "P ER", + "PE R", + "_ response", + "_res ponse", + "_resp onse", + "Ġ Los", + "ĠL os", + "ĠLo s", + "p arser", + "par ser", + "parse r", + "pars er", + "Ġ assume", + "Ġas sume", + "Ġass ume", + "Ġassum e", + ". Request", + ".Re quest", + "Ġ Token", + "ĠT oken", + "ĠTo ken", + "ĠTok en", + "_ position", + "_p osition", + "_pos ition", + "Ġ nom", + "Ġn om", + "Ġno m", + "- term", + "-t erm", + "-te rm", + "Ġ remaining", + "Ġrem aining", + "Ġremain ing", + "i ostream", + "io stream", + "Ġ pieces", + "Ġp ieces", + "Ġpie ces", + "Ġpiece s", + "a py", + "ap y", + "Ġ Less", + "ĠL ess", + "ĠLe ss", + "ĠLes s", + "r ange", + "ra nge", + "ran ge", + "rang e", + "um bn", + "umb n", + "p rise", + "pr ise", + "pri se", + "_ option", + "_op tion", + "_o ption", + "_opt ion", + "2 30", + "23 0", + "I mpl", + "Im pl", + "Imp l", + "k wargs", + "kw args", + "Ġbusiness es", + "Al ert", + "Ale rt", + "Ġpart ies", + "Ġpar ties", + "Ġpartie s", + "Ġparti es", + "Ġ Container", + "ĠCont ainer", + "Ġ Private", + "ĠPr ivate", + "ĠPriv ate", + "Ġ Plan", + "ĠP lan", + "ĠPl an", + "ĠPla n", + "Ġ registered", + "Ġregister ed", + "Ġregist ered", + "Ġ jour", + "Ġj our", + "Ġjo ur", + "Ġjou r", + "a cker", + "ack er", + "ac ker", + "е ни", + "ен и", + "/ >", + "c hat", + "ch at", + "cha t", + "s ect", + "se ct", + "sec t", + "Ġ creation", + "Ġc reation", + "Ġcre ation", + "Ġcreat ion", + "Ġcrea tion", + "ol utely", + "olute ly", + "olut ely", + "Ġ instant", + "Ġin stant", + "Ġins tant", + "Ġinst ant", + "Ġ delivery", + "Ġd elivery", + "Ġdel ivery", + "Ġdeliver y", + "i cken", + "ic ken", + "ick en", + "y es", + "ye s", + "1 63", + "16 3", + "Ġ Franc", + "ĠFr anc", + "ĠFra nc", + "ĠFran c", + "b ling", + "bl ing", + "e nda", + "en da", + "end a", + "[ (", + "_ range", + "_r ange", + "_ra nge", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "Ġ schedule", + "Ġs chedule", + "Ġsched ule", + "C onn", + "Con n", + "Co nn", + "Ġ thank", + "Ġth ank", + "Ġthan k", + "Ġtha nk", + "x d", + "Ġ hook", + "Ġh ook", + "Ġho ok", + "Ġ documentation", + "Ġdocument ation", + "Param eters", + "Parameter s", + "H ello", + "Hel lo", + "Hell o", + "v t", + "Ġ articles", + "Ġart icles", + "Ġarticle s", + "Ġartic les", + "Ġ west", + "Ġw est", + "Ġwe st", + "Ġwes t", + "d efined", + "def ined", + "define d", + ". select", + ".s elect", + ".se lect", + ".sel ect", + "ok ens", + "oken s", + "oke ns", + "Ġ VAL", + "ĠV AL", + "ĠVA L", + ". file", + ".f ile", + ".fi le", + ".fil e", + "re set", + "res et", + "rese t", + "Ġ mys", + "Ġm ys", + "Ġmy s", + "Ġ MA", + "ĠM A", + "] ),", + "]) ,", + "Ġ cities", + "Ġc ities", + "Ġcit ies", + "Ġci ties", + "re lated", + "rel ated", + "å Ľ", + "Ġ appeared", + "Ġappe ared", + "Ġappear ed", + "Ġ wid", + "Ġw id", + "Ġwi d", + ". panel", + ".p anel", + ".pa nel", + ".pan el", + "Ġ Ins", + "ĠI ns", + "ĠIn s", + ". entity", + ".e ntity", + ".ent ity", + "Ġde cre", + "Ġdec re", + "Ġ Lou", + "ĠL ou", + "ĠLo u", + "( time", + "(t ime", + "(ti me", + "Ġ Thank", + "ĠTh ank", + "ĠThan k", + ". createElement", + ".create Element", + "Ġ mentioned", + "Ġmention ed", + "Ġment ioned", + "o unce", + "ou nce", + "oun ce", + "ounc e", + "Ġ Try", + "ĠT ry", + "ĠTr y", + "Ġ Wall", + "ĠW all", + "ĠWal l", + "ĠWa ll", + "/ images", + "/image s", + "/im ages", + "Ġ Menu", + "ĠM enu", + "ĠMe nu", + "ĠMen u", + "' čĊ", + "Ġ Er", + "ĠE r", + "Ġc ritic", + "Ġcr itic", + "Ġcrit ic", + "Ġcri tic", + "Ġ Year", + "ĠY ear", + "ĠYe ar", + "( param", + "(p aram", + "(par am", + "(pa ram", + "(para m", + "Ġ flo", + "Ġf lo", + "Ġfl o", + "N N", + "o oter", + "oot er", + "oo ter", + "Ġ ];Ċ", + "Ġ] ;Ċ", + "Ġ]; Ċ", + "Ġ Aff", + "ĠA ff", + "ĠAf f", + "\" github", + "\"g ithub", + "ro oms", + "room s", + "Ġ hyp", + "Ġh yp", + "Ġhy p", + "g lobal", + "glob al", + "Ġ avec", + "Ġa vec", + "Ġav ec", + "Ġave c", + "æľ Ī", + "Ġ completion", + "Ġcom pletion", + "Ġcomp letion", + "Ġcomple tion", + "Ġcomplet ion", + "Ġ cond", + "Ġc ond", + "Ġcon d", + "Ġco nd", + "on ymous", + "onym ous", + "( temp", + "(t emp", + "(te mp", + "Ġ stars", + "Ġst ars", + "Ġstar s", + "Ġsta rs", + "Ġ relevant", + "Ġre levant", + "Ġrele vant", + "Ġrelev ant", + "Ġ covered", + "Ġcover ed", + "Ġcov ered", + "Ġ elim", + "Ġe lim", + "Ġel im", + "_ types", + "_t ypes", + "_type s", + "_typ es", + "_ty pes", + "( bool", + "(b ool", + "Ġ tu", + "Ġt u", + "_ exists", + "_ex ists", + "_exist s", + "Ġ secure", + "Ġs ecure", + "Ġsec ure", + "Ġ stored", + "Ġst ored", + "Ġstore d", + "Ġstor ed", + "Ġsto red", + "] /", + "x F", + "Ġ Controller", + "ĠCont roller", + "ĠControl ler", + "ĠContr oller", + "Ġm igr", + "Ġmi gr", + "Ġmig r", + "M I", + "Ġ Den", + "ĠD en", + "ĠDe n", + "Ġ annual", + "Ġann ual", + "U IL", + "UI L", + "- and", + "-a nd", + "-an d", + "Ġ crime", + "Ġcr ime", + "Ġcri me", + "Ġcrim e", + "b el", + "be l", + "Ġk itchen", + "Ġkit chen", + "@ g", + "_ ph", + "_p h", + "ourn ament", + "Ġ Social", + "ĠS ocial", + "ĠSo cial", + "ĠSoc ial", + "ĠSoci al", + "Ġ Special", + "ĠS pecial", + "ĠSp ecial", + "ĠSpec ial", + "ĠSpe cial", + "lo gger", + "log ger", + "logg er", + "Ġ tail", + "Ġt ail", + "Ġta il", + "Ġtai l", + "Ġ unknown", + "Ġun known", + "Ġunk nown", + "Ġunknow n", + "d ed", + "de d", + "Ġapp rec", + "Ġap prec", + "( db", + "(d b", + "c f", + "1 55", + "15 5", + "Ġ assign", + "Ġas sign", + "Ġass ign", + "- out", + "-o ut", + "Ġ Mont", + "ĠM ont", + "ĠMon t", + "ĠMo nt", + "d p", + "w idget", + "wid get", + "Ġ stone", + "Ġs tone", + "Ġst one", + "Ġsto ne", + "- primary", + "-pr imary", + ". grid", + ".g rid", + ".gr id", + "Res ults", + "Result s", + "a zz", + "az z", + "Ġ daughter", + "Ġda ughter", + "Ġ curr", + "Ġc urr", + "Ġcur r", + "Ġcu rr", + "1 75", + "17 5", + "Ġ lin", + "Ġl in", + "Ġli n", + "Ġ south", + "Ġs outh", + "Ġso uth", + "Ġsou th", + "Ġsout h", + "form s", + "fo rms", + "for ms", + "Ġ OUT", + "ĠO UT", + "ĠOU T", + "l ette", + "le tte", + "let te", + "lett e", + "a ks", + "ak s", + "ig ure", + "igu re", + "Ġ EU", + "ĠE U", + "var iable", + "vari able", + "Ġ brief", + "Ġb rief", + "Ġbr ief", + "Ġbri ef", + "Ġ Scott", + "ĠS cott", + "ĠSc ott", + "ĠScot t", + "ĠSco tt", + "Ġ conference", + "Ġcon ference", + "Ġconf erence", + "Ġconfer ence", + "a nda", + "an da", + "and a", + "_ lock", + "_l ock", + "_lo ck", + "_loc k", + "o ral", + "or al", + "ora l", + "Ġe ine", + "Ġein e", + "Ġei ne", + "O RS", + "OR S", + "//// ////////////////////////////////////////////////////////////", + "//////// ////////////////////////////////////////////////////////", + "//////////////// ////////////////////////////////////////////////", + "//////////////////////////////// ////////////////////////////////", + "//////////// ////////////////////////////////////////////////////", + "//////////////////////////////////////////////// ////////////////", + "//////////////////////////////////////////////////////// ////////", + "//////////////////////////////////////////////////////////// ////", + "//////////////////////////////////////////////////// ////////////", + "es so", + "ess o", + "Ġ ris", + "Ġr is", + "Ġri s", + "Ġ gender", + "Ġg ender", + "Ġge nder", + "Ġgen der", + "es tic", + "est ic", + "esti c", + "L icense", + "Lic ense", + "( out", + "(o ut", + "Ġ ms", + "Ġm s", + "S ee", + "Se e", + "Ġw illing", + "Ġwill ing", + "Ġwil ling", + "a ze", + "az e", + "Ġ sports", + "Ġs ports", + "Ġsp orts", + "Ġsport s", + "Ġspo rts", + "Ġspor ts", + "Ġ yes", + "Ġy es", + "Ġye s", + "l u", + "Ġp urs", + "Ġpur s", + "Ġpu rs", + "/ javascript", + "/j avascript", + "/java script", + "/jav ascript", + "- pro", + "-p ro", + "-pr o", + "nav bar", + "_ product", + "_pro duct", + "_prod uct", + "/ bootstrap", + "/boot strap", + "Ġdr iving", + "Ġdriv ing", + "Ġdri ving", + "Ġ Ä", + "Ġpro pos", + "Ġprop os", + "ul tip", + "ult ip", + "ulti p", + "up lic", + ". email", + ".e mail", + ".em ail", + "Ġ approx", + "Ġapp rox", + "Ġap prox", + "Ġappro x", + "( cl", + "(c l", + "Ġ wear", + "Ġw ear", + "Ġwe ar", + "Ġ reply", + "Ġre ply", + "Ġrep ly", + "Ġrepl y", + "as set", + "ass et", + "asse t", + "Ġ ice", + "Ġi ce", + "Ġic e", + "Ġ tx", + "Ġt x", + "k r", + "Ġ Germany", + "ĠGerman y", + "ĠGer many", + "ĠGerm any", + "Ġ George", + "ĠGe orge", + "ĠGeorg e", + "Ġ cb", + "Ġc b", + "ĉ err", + "ĉe rr", + "M ove", + "Mo ve", + "Mov e", + "Ġ poly", + "Ġp oly", + "Ġpol y", + "Ġpo ly", + "v oice", + "vo ice", + "} \"", + "Ġ animal", + "Ġan imal", + "Ġanim al", + "Ġani mal", + "A v", + "Ġ Location", + "ĠL ocation", + "ĠLo cation", + "ĠLoc ation", + "Ġ native", + "Ġn ative", + "Ġnat ive", + "] [\"", + "][ \"", + "< double", + " \"", + "s tat", + "st at", + "sta t", + "Ġ },čĊ", + "Ġ} ,čĊ", + "Ġ}, čĊ", + "< span", + " =", + "Ð ±", + "1 39", + "13 9", + "i va", + "iv a", + ". AutoSize", + ".Auto Size", + "Ġ Lat", + "ĠL at", + "ĠLa t", + "_ ext", + "_e xt", + "_ex t", + "Initial ize", + ". register", + ".reg ister", + "1 56", + "15 6", + "O PY", + "OP Y", + "Ġ reverse", + "Ġre verse", + "Ġrev erse", + "Ġrevers e", + "Ġrever se", + "_ dis", + "_d is", + "_di s", + "' ][", + "'] [", + "Ġ prompt", + "Ġp rompt", + "Ġprom pt", + "on to", + "ont o", + "Ġ Journal", + "ĠJ ournal", + "ĠJo urnal", + "r outer", + "ro uter", + "rou ter", + "route r", + "Ġ mysqli", + "Ġm ysqli", + "Ġmys qli", + "Ġmysql i", + "# else", + ") \"", + "- xs", + "-x s", + "l ets", + "le ts", + "let s", + "p han", + "ph an", + "pha n", + ". LE", + ".L E", + "1 37", + "13 7", + "W ill", + "Wil l", + "Wi ll", + "Ġaff ord", + "Ġaf ford", + "Ġ skill", + "Ġs kill", + "Ġsk ill", + "Ġski ll", + "- toggle", + "-t oggle", + "N C", + "B ind", + "Bin d", + "Bi nd", + "T S", + "J ust", + "Ju st", + "it eral", + "ite ral", + "iter al", + "Y P", + "ĉ unsigned", + "ĉun signed", + "Ġ wind", + "Ġw ind", + "Ġwin d", + "Ġwi nd", + "1 49", + "14 9", + ") ):Ċ", + ")) :Ċ", + ")): Ċ", + "Ġ warning", + "Ġw arning", + "Ġwar ning", + "Ġwarn ing", + "Ġ Water", + "ĠW ater", + "ĠWat er", + "ĠWa ter", + "Ġ draft", + "Ġd raft", + "Ġdr aft", + "Ġdra ft", + "Ġ cm", + "Ġc m", + "Ġ sam", + "Ġs am", + "Ġsa m", + "Ġ holding", + "Ġh olding", + "Ġhold ing", + "Ġhol ding", + "z ip", + "zi p", + "Ġ Science", + "ĠSc ience", + "ĠSci ence", + "Ġsup posed", + "Ġsuppose d", + "Ġsupp osed", + "G en", + "Ge n", + "Ġ diet", + "Ġd iet", + "Ġdi et", + "Ġdie t", + "< h", + "Ġ Pass", + "ĠP ass", + "ĠPa ss", + "ĠPas s", + "v i", + "Ġh usband", + "Ġhus band", + "� �", + "n ote", + "not e", + "no te", + "Ġ About", + "ĠA bout", + "ĠAb out", + "ĠIn stitute", + "ĠInstit ute", + "ĠInstitut e", + "Ġ climate", + "Ġcl imate", + "Ġclim ate", + "Ġcli mate", + ". Format", + ".Form at", + ".For mat", + "Ġ nut", + "Ġn ut", + "Ġnu t", + "e sted", + "es ted", + "est ed", + "este d", + "Ġapp arent", + "Ġap parent", + "Ġappar ent", + "Ġappare nt", + "Ġ holds", + "Ġh olds", + "Ġhold s", + "Ġho lds", + "Ġhol ds", + "f i", + "n ews", + "ne ws", + "new s", + "C M", + "v ideo", + "vid eo", + "vi deo", + "vide o", + "' :'", + "': '", + "D ITION", + "DI TION", + "p ing", + "pi ng", + "pin g", + "Ġsen ior", + "Ġseni or", + "w a", + "- ->Ċ", + "-- >Ċ", + "--> Ċ", + "_ default", + "_d efault", + "_de fault", + "_def ault", + "Ġ Database", + "ĠD atabase", + "ĠData base", + "ĠDat abase", + "r ep", + "re p", + "E SS", + "ES S", + "n ergy", + "ner gy", + "nerg y", + ". Find", + ".F ind", + "_ mask", + "_m ask", + "_ma sk", + "_mas k", + "Ġ rise", + "Ġr ise", + "Ġris e", + "Ġri se", + "Ġ kernel", + "Ġk ernel", + "Ġker nel", + "Ġkern el", + ": :$", + ":: $", + ". Q", + "Ġoff ering", + "Ġoffer ing", + "de cl", + "dec l", + "Ġ CS", + "ĠC S", + "Ġ listed", + "Ġl isted", + "Ġli sted", + "Ġlist ed", + "Ġliste d", + "Ġlis ted", + "Ġ mostly", + "Ġmost ly", + "e nger", + "en ger", + "eng er", + "enge r", + "Ġ blocks", + "Ġb locks", + "Ġbl ocks", + "Ġblock s", + "Ġblo cks", + "Ġbloc ks", + "o lo", + "ol o", + "Ġgover ning", + "Ġgovern ing", + "\\ F", + "Ġcon cent", + "Ġconc ent", + "Ġconce nt", + ". getText", + ".get Text", + "Ġ mb", + "Ġm b", + "Ġocc urred", + "Ġoccur red", + "Ġ changing", + "Ġch anging", + "Ġchang ing", + "Ġchan ging", + "S cene", + "Sc ene", + "_ CODE", + "_C ODE", + "_CO DE", + "_COD E", + "B eh", + "Be h", + "\" The", + "\"T he", + "Ġ tile", + "Ġt ile", + "Ġti le", + "Ġtil e", + "Ġ Association", + "ĠAssoci ation", + "ĠAssoc iation", + "ĉ P", + "al ty", + "alt y", + "_ ad", + "_a d", + "od ies", + "odi es", + "odie s", + "i ated", + "ia ted", + "iate d", + "iat ed", + "Ġ prepared", + "Ġpre pared", + "Ġprepar ed", + "Ġprepare d", + "Ġprep ared", + "p ossible", + "poss ible", + "Ġ mort", + "Ġm ort", + "Ġmor t", + "Ġmo rt", + "T EST", + "TE ST", + "TES T", + "1 42", + "14 2", + "Ġ ignore", + "Ġi gnore", + "Ġign ore", + "Ġig nore", + "Ġignor e", + "Ġ calc", + "Ġc alc", + "Ġcal c", + "Ġca lc", + "Ġ rs", + "Ġr s", + "Ġ assertEquals", + "Ġassert Equals", + "Ġ sz", + "Ġs z", + "Ġ THIS", + "ĠTH IS", + ". \"Ċ", + ".\" Ċ", + "Ġ canvas", + "Ġc anvas", + "Ġcan vas", + "Ġcanv as", + "j ava", + "ja va", + "jav a", + "Ġd ut", + "Ġdu t", + "VAL ID", + ". sql", + ".s ql", + ". input", + ".in put", + "Ġ aux", + "Ġa ux", + "Ġau x", + "S up", + "Su p", + "Ġ artist", + "Ġart ist", + "V ec", + "Ve c", + "_ TIME", + "_T IME", + "_TIM E", + "_TI ME", + ".string ify", + "et ween", + "Ġ Category", + "ĠC ategory", + "Ġ [-", + "Ġ[ -", + "Ġ DevExpress", + "ĠDev Express", + "Ġ Jul", + "ĠJ ul", + "ĠJu l", + "Ġ ring", + "Ġr ing", + "Ġri ng", + "Ġrin g", + ". ed", + ".e d", + "Y Y", + "L et", + "Le t", + "T extField", + "Text Field", + "Ġ flat", + "Ġf lat", + "Ġfl at", + "Ġfla t", + "_ print", + "_p rint", + "_pr int", + "_pri nt", + "Ġ OTHER", + "ĠOT HER", + "ad ian", + "adi an", + "adia n", + "Ġ checked", + "Ġcheck ed", + "e le", + "el e", + "Al ign", + "Ali gn", + "st anding", + "stand ing", + "stan ding", + "Ġ [],", + "Ġ[ ],", + "Ġ[] ,", + "Ġ lab", + "Ġl ab", + "Ġla b", + "u cky", + "uc ky", + "uck y", + "Ġ Christmas", + "ĠChrist mas", + "( image", + "(i mage", + "(im age", + ". module", + ".m odule", + ".mod ule", + "Ġ lots", + "Ġl ots", + "Ġlo ts", + "Ġlot s", + "Ġs lightly", + "Ġsl ightly", + "Ġslight ly", + "( final", + "(f inal", + "(fin al", + "(fi nal", + "er ge", + "erg e", + "è ¿", + "1 47", + "14 7", + "Ġ Police", + "ĠPol ice", + "ĠPo lice", + "ĠPolic e", + "1 43", + "14 3", + "Ġ Right", + "ĠR ight", + "ĠRig ht", + "ĠRi ght", + "Ġ award", + "Ġa ward", + "Ġaw ard", + "Ġ OS", + "ĠO S", + "Ġ {}ĊĊ", + "Ġ{ }ĊĊ", + "Ġ{} ĊĊ", + "Ġ{}Ċ Ċ", + "Ġ ptr", + "Ġp tr", + "Ġpt r", + "o ves", + "ov es", + "ove s", + "ic ated", + "ica ted", + "icate d", + "е м", + "еР¼", + "Ġ manage", + "Ġman age", + "Ġma nage", + "Ġmana ge", + "ol iday", + "olid ay", + "oli day", + "A mount", + "Am ount", + "ool Strip", + "t body", + "tb ody", + "N av", + "Na v", + "w rap", + "wr ap", + "B B", + "Ġw atching", + "Ġwatch ing", + "Ġwat ching", + "a rios", + "ar ios", + "ari os", + "ario s", + "Ġ optional", + "Ġoption al", + "Ġopt ional", + "_ K", + "Ġ Licensed", + "ĠL icensed", + "ĠLicense d", + "ĠLic ensed", + ". Map", + ".M ap", + ".Ma p", + "T imer", + "Time r", + "Tim er", + "Ti mer", + "Ġ AP", + "ĠA P", + "Ġ Rev", + "ĠR ev", + "ĠRe v", + "( o", + ", c", + "u min", + "um in", + "umi n", + "et ailed", + "etail ed", + "eta iled", + "Ġ Hy", + "ĠH y", + "Ġ blank", + "Ġbl ank", + "Ġbla nk", + "a gger", + "ag ger", + "agg er", + "Ġ Self", + "ĠS elf", + "ĠSe lf", + "ĠSel f", + "( )[", + "() [", + ". make", + ".m ake", + ".ma ke", + "e arn", + "ear n", + "ea rn", + "ch annel", + "chan nel", + "< pre", + "

;Ċ", + ">; Ċ", + "W orld", + "Ġ python", + "Ġp ython", + "Ġpy thon", + "Ġpyt hon", + "Ġ lif", + "Ġl if", + "Ġli f", + "Ġt rav", + "Ġtr av", + "Ġtra v", + "Ġcon ven", + "Ġconv en", + "com pany", + "comp any", + "compan y", + "Ġ Club", + "ĠC lub", + "ĠCl ub", + "1 38", + "13 8", + "V er", + "Ve r", + "B tn", + "Ġ zone", + "Ġz one", + "Ġzo ne", + "product s", + "produ cts", + "Ġ Educ", + "ĠE duc", + "ĠEd uc", + "ĠEdu c", + "Ġ verify", + "Ġver ify", + "Ġveri fy", + "Ġ Mil", + "ĠM il", + "ĠMi l", + "o no", + "on o", + "] );ĊĊ", + "]) ;ĊĊ", + "]);Ċ Ċ", + "]); ĊĊ", + "EN CE", + "ENC E", + "Ġ packet", + "Ġp acket", + "Ġpack et", + "Ġpa cket", + "Ġpac ket", + "Ġ cer", + "Ġc er", + "Ġce r", + "Ġ enumer", + "Ġe numer", + "Ġen umer", + "Ġenum er", + "Ġ pars", + "Ġp ars", + "Ġpar s", + "Ġpa rs", + "form ed", + "for med", + "forme d", + "Ġ occup", + "Ġocc up", + "Ġoc cup", + "t re", + "tr e", + "Ġ exercise", + "Ġex ercise", + "Ġexerc ise", + "D ay", + "Da y", + "_ sum", + "_s um", + "_su m", + "Ġ asking", + "Ġas king", + "Ġask ing", + "a ption", + "ap tion", + "apt ion", + "Ġ orders", + "Ġor ders", + "Ġorder s", + "Ġord ers", + "Ġs pending", + "Ġsp ending", + "Ġspend ing", + "Ġ ERR", + "ĠE RR", + "ĠER R", + ". Dis", + ".D is", + ".Di s", + "Ġ Util", + "ĠU til", + "ĠUt il", + "âĢľ I", + "\\ '", + "? )", + "/ >Ċ", + "/> Ċ", + "Ġe mot", + "Ġem ot", + "Ġemo t", + "Ġin fluence", + "Ġinflu ence", + "Ġ Africa", + "ĠA frica", + "ĠAfr ica", + "ĠAf rica", + "at ters", + "att ers", + "atter s", + "atte rs", + "Ù ħ", + ". session", + ".s ession", + ".sess ion", + "Ġ chief", + "Ġch ief", + "Ġchi ef", + "ĉ ĉĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉĉĉĉ ĉ", + "Ġ tom", + "Ġt om", + "Ġto m", + "cl uded", + "clude d", + "clud ed", + "s erial", + "se rial", + "ser ial", + "_ handler", + "_h andler", + "_handle r", + "_hand ler", + ". Type", + ".T ype", + "a ped", + "ap ed", + "ape d", + "Ġp olicies", + "Ġpol icies", + "Ġpolic ies", + "- ex", + "-e x", + "- tr", + "-t r", + "bl ank", + "bla nk", + "m erce", + "mer ce", + "merc e", + "Ġ coverage", + "Ġco verage", + "Ġcover age", + "Ġ rc", + "Ġr c", + "_ matrix", + "_m atrix", + "_mat rix", + "_ box", + "_b ox", + "_bo x", + "Ġ charges", + "Ġch arges", + "Ġchar ges", + "Ġcharg es", + "Ġcharge s", + "Ġ Boston", + "ĠB oston", + "ĠBo ston", + "ĠBos ton", + "P e", + "Ġcirc um", + "Ġcir cum", + "Ġ filled", + "Ġf illed", + "Ġfil led", + "Ġfill ed", + "Ġfille d", + "1 48", + "14 8", + "Ġ north", + "Ġn orth", + "Ġnor th", + "icture Box", + "ĉ res", + "ĉr es", + "ĉre s", + "è ®", + "Ġ termin", + "Ġter min", + "Ġterm in", + "Ġ [â̦", + "Ġ[ â̦", + "I RECT", + "IR ECT", + "IRE CT", + "Ġ ber", + "Ġb er", + "Ġbe r", + "Ġ\" ../../", + "Ġ\"../ ../", + "Ġ\".. /../", + "r etch", + "ret ch", + ". code", + ".c ode", + ".co de", + ".cod e", + "_ col", + "_c ol", + "_co l", + "Ġ Government", + "ĠG overnment", + "ĠGovern ment", + "Ġ argv", + "Ġar gv", + "Ġarg v", + "Ġ Lord", + "ĠL ord", + "ĠLo rd", + "ĠLor d", + "a si", + "as i", + "E xec", + "Ex ec", + "ĉ let", + "ĉl et", + "vert is", + "Ġ discussion", + "Ġdisc ussion", + "Ġdiscuss ion", + "en ance", + "ena nce", + "enan ce", + "ou tube", + "out ube", + "outu be", + "type of", + "typ eof", + "Ġs erved", + "Ġser ved", + "Ġserv ed", + "Ġserve d", + "Ġ Put", + "ĠP ut", + "ĠPu t", + "ĉ x", + "Ġ sweet", + "Ġs weet", + "Ġswe et", + "B efore", + "Be fore", + "ate gy", + "ateg y", + ". of", + ".o f", + "Ġ Material", + "ĠM aterial", + "ĠMat erial", + "ĠMate rial", + "ĠMater ial", + "S ort", + "So rt", + "O NT", + "ON T", + "ig ital", + "igit al", + "igi tal", + "W hy", + "Wh y", + "Ġs ust", + "Ġsu st", + "Ġsus t", + "Ġ ç", + "a bet", + "ab et", + "abe t", + "Ġ segment", + "Ġs egment", + "Ġse gment", + "Ġseg ment", + "Ġ [],Ċ", + "Ġ[ ],Ċ", + "Ġ[] ,Ċ", + "Ġ[], Ċ", + "Ġ Muslim", + "ĠM uslim", + "ĠMus lim", + "Ġ findViewById", + "Ġfind ViewById", + "c ut", + "cu t", + "_ TEXT", + "_T EXT", + "_TE XT", + "_TEX T", + "Ġ Mary", + "ĠM ary", + "ĠMar y", + "ĠMa ry", + "Ġl oved", + "Ġlo ved", + "Ġlove d", + "Ġlov ed", + "Ġ lie", + "Ġl ie", + "Ġli e", + "Ġ JO", + "ĠJ O", + "Ġ isset", + "Ġis set", + "Ġiss et", + "m onth", + "mon th", + "mo nth", + "mont h", + "Ġ prime", + "Ġpr ime", + "Ġprim e", + "Ġpri me", + "t i", + "Ġ Carol", + "ĠCar ol", + "ĠCa rol", + "U se", + "Us e", + "1 46", + "14 6", + "Ġ Pop", + "ĠP op", + "ĠPo p", + "Ġ Save", + "ĠS ave", + "ĠSa ve", + "ĠSav e", + "Int erval", + "Inter val", + "ex ecute", + "exec ute", + "d y", + "Ġ Iran", + "ĠI ran", + "ĠIr an", + "_ cont", + "_c ont", + "_con t", + "_co nt", + "ĉ T", + "Ġ phase", + "Ġph ase", + "Ġpha se", + "check box", + "we ek", + "Ġ hide", + "Ġh ide", + "Ġhi de", + "Ġhid e", + "Ġ til", + "Ġt il", + "Ġti l", + "Ġ ju", + "Ġj u", + "C ustom", + "b urg", + "bur g", + "bu rg", + "/ M", + "T ON", + "TO N", + "Ġ quant", + "Ġqu ant", + "Ġq uant", + "Ġqua nt", + "Ġquan t", + "Ġ rub", + "Ġr ub", + "Ġru b", + "ix els", + "ixel s", + "ixe ls", + "Ġ installed", + "Ġinst alled", + "Ġinstall ed", + "Ġinstal led", + "Ġ dump", + "Ġd ump", + "Ġdu mp", + "Ġdum p", + "Ġproper ly", + "( List", + "(L ist", + "Ġdec ide", + "Ġdecid e", + "ap ply", + "app ly", + "appl y", + "H as", + "Ha s", + "Ġ keeping", + "Ġke eping", + "Ġkeep ing", + "Ġcit izens", + "Ġcitiz ens", + "Ġcitizen s", + "Ġ joint", + "Ġj oint", + "Ġjoin t", + "Ġjo int", + "p ool", + "po ol", + "S ocket", + "So cket", + "Sock et", + "_ op", + "_o p", + "Ġ weapon", + "Ġwe apon", + "Ġweap on", + "g nore", + "gn ore", + "Ġ Exec", + "ĠE xec", + "ĠEx ec", + "ot ten", + "ott en", + "otte n", + "Ġ MS", + "ĠM S", + "Ġ (-", + "Ġ( -", + "Ġ Review", + "ĠR eview", + "ĠRe view", + "ĠRev iew", + "Ġ examples", + "Ġex amples", + "Ġexample s", + "Ġexam ples", + "Ġ tight", + "Ġt ight", + "Ġti ght", + "! (", + "D P", + "Ġ MessageBox", + "ĠMessage Box", + "Ġphot ograph", + "Ġphoto graph", + "1 64", + "16 4", + "U RI", + "UR I", + "é t", + "l ow", + "lo w", + "Ġ Grand", + "ĠG rand", + "ĠGr and", + "ĠGran d", + "ĠGra nd", + ".p ersistence", + ".persist ence", + "Ġmain tain", + "Ġmaint ain", + "Ġ nums", + "Ġn ums", + "Ġnum s", + "Ġnu ms", + "Ġ zip", + "Ġz ip", + "Ġzi p", + "i als", + "ial s", + "ia ls", + "Ġ Gets", + "ĠG ets", + "ĠGet s", + "ĠGe ts", + "p eg", + "pe g", + "Ġ Buffer", + "ĠB uffer", + "ĠBuff er", + "ĠBu ffer", + "ĠBuf fer", + "~~ ~~", + "ra structure", + "Ġ PL", + "ĠP L", + "u en", + "ue n", + "ob by", + "obb y", + "size of", + "siz eof", + "Ġ pic", + "Ġp ic", + "Ġpi c", + "Ġ seed", + "Ġs eed", + "Ġse ed", + "Ġsee d", + "Ġex perienced", + "Ġexperience d", + "Ġexperi enced", + "Ġ odd", + "Ġo dd", + "Ġod d", + "Ġ kick", + "Ġk ick", + "Ġki ck", + "Ġ procedure", + "Ġpro cedure", + "Ġproced ure", + "av igator", + "avig ator", + "- on", + "-o n", + ", j", + "Ġ Although", + "ĠAl though", + "Ġ userId", + "Ġuser Id", + "ac cept", + "acc ept", + "B lue", + "Bl ue", + "I Color", + "IC olor", + "l ayer", + "la yer", + "lay er", + "a vailable", + "av ailable", + "avail able", + "Ġ ends", + "Ġe nds", + "Ġen ds", + "Ġend s", + ". table", + ".t able", + ".tab le", + ".ta ble", + "Ġ dataset", + "Ġd ataset", + "Ġdata set", + "Ġdat aset", + "Ġdatas et", + "b us", + "bu s", + "Ġ explain", + "Ġex plain", + "Ġexp lain", + "Ġexpl ain", + "( pro", + "(p ro", + "(pr o", + "ĠCommit tee", + "Ġn oted", + "Ġnot ed", + "Ġno ted", + "Ġnote d", + "] :Ċ", + "]: Ċ", + "D im", + "Di m", + "st dio", + "std io", + "1 54", + "15 4", + ". \",Ċ", + ".\" ,Ċ", + ".\", Ċ", + "_ source", + "_s ource", + "1 81", + "18 1", + "Ġ Week", + "ĠWe ek", + "Ġ Edge", + "ĠE dge", + "ĠEd ge", + "Ġoper ating", + "Ġopera ting", + "Ġ este", + "Ġe ste", + "Ġes te", + "Ġest e", + "i pl", + "ip l", + "3 30", + "33 0", + "ag ination", + "agi nation", + "agina tion", + "Ġpro ceed", + "Ġproc eed", + "Ġ animation", + "Ġan imation", + "Ġanim ation", + ". Models", + ".Model s", + ".Mod els", + ".Mode ls", + "Ġ Watch", + "ĠW atch", + "ĠWat ch", + "i at", + "ia t", + "Ġop pon", + "Ġopp on", + "/ A", + "Re port", + "Rep ort", + "Repo rt", + "Ġ sounds", + "Ġs ounds", + "Ġso unds", + "Ġsound s", + "Ġsou nds", + "_ buf", + "_b uf", + "IE LD", + "IEL D", + "Ġb und", + "Ġbu nd", + "Ġbun d", + "ĉ get", + "ĉg et", + ". pr", + ".p r", + "( tmp", + "(t mp", + "(tm p", + "Ġ kid", + "Ġk id", + "Ġki d", + "> ĊĊĊ", + ">Ċ ĊĊ", + ">ĊĊ Ċ", + "Ġ yang", + "Ġy ang", + "Ġya ng", + "Ġyan g", + "Not Found", + "Ñ Ĩ", + "m ath", + "ma th", + "mat h", + "@ gmail", + "@g mail", + "Ġ LIMIT", + "ĠL IMIT", + "ĠLI MIT", + "red ients", + "redient s", + "redi ents", + "Ġ vent", + "Ġv ent", + "Ġve nt", + "Ġven t", + "av igate", + "avig ate", + "avi gate", + "L ook", + "Lo ok", + "Ġ religious", + "Ġrel igious", + "Ġrelig ious", + "Ġ rand", + "Ġr and", + "Ġran d", + "Ġra nd", + "r io", + "ri o", + "( GL", + "(G L", + "_ ip", + "_i p", + "u an", + "ua n", + "ici ency", + "icie ncy", + "Ġ Change", + "ĠCh ange", + "ĠCha nge", + "ĠChan ge", + "ĠChang e", + "> čĊčĊ", + ">čĊ čĊ", + "Ġ Entity", + "ĠE ntity", + "ĠEnt ity", + "Ġren contre", + "Ġrencont re", + "Ġrencontr e", + "Ġ Ret", + "ĠR et", + "ĠRe t", + "p lan", + "pl an", + "pla n", + "é n", + "BO OL", + "u ries", + "ur ies", + "uri es", + "t rain", + "tr ain", + "tra in", + "Def inition", + "= ===========", + "== ==========", + "==== ========", + "======== ====", + "=== =========", + "=========== =", + "========= ===", + "========== ==", + "====== ======", + "===== =======", + "======= =====", + "z z", + "4 50", + "45 0", + "An imation", + "Anim ation", + "Ġ OK", + "ĠO K", + "_ menu", + "_m enu", + "_me nu", + ". bl", + ".b l", + "_ score", + "_s core", + "_sc ore", + "Ġ acad", + "Ġa cad", + "Ġac ad", + "( System", + "(S ystem", + "Ġ refresh", + "Ġre fresh", + "Ġref resh", + "Ġrefr esh", + "' =>$", + "'=> $", + "'= >$", + ". Graphics", + ".G raphics", + ".Graph ics", + "am ento", + "ament o", + "amen to", + "p id", + "pi d", + "t c", + "Ġ tips", + "Ġt ips", + "Ġti ps", + "Ġtip s", + "Ġ homes", + "Ġh omes", + "Ġhome s", + "Ġhom es", + "Ġho mes", + "Ġ fuel", + "Ġf uel", + "Ġfu el", + "Ġfue l", + "â ĸ", + "_ helper", + "_h elper", + "_help er", + "Ġ ĠčĊ", + "ĠĠ čĊ", + "Ġ Room", + "ĠR oom", + "ĠRo om", + "ĠRoo m", + ". Close", + ".C lose", + ".Cl ose", + "_ attr", + "_at tr", + "_att r", + "Ġ Mount", + "ĠM ount", + "ĠMo unt", + "ĠMou nt", + "Ġ Ev", + "ĠE v", + "ar ser", + "ars er", + "arse r", + "_ top", + "_t op", + "_to p", + "e ah", + "ea h", + "Ġ Delete", + "ĠDe lete", + "ĠDel ete", + "ãĢ į", + "u ke", + "uk e", + "Ġ usage", + "Ġu sage", + "Ġus age", + "Ġusa ge", + "a ria", + "ar ia", + "ari a", + "_ dev", + "_d ev", + "_de v", + "Ġ texture", + "Ġtext ure", + "Ġtex ture", + "Ġtextu re", + "Ġ conversation", + "Ġcon versation", + "Ġconvers ation", + "e per", + "ep er", + "B ean", + "Be an", + "d one", + "do ne", + "don e", + "non atomic", + "Ġ Second", + "ĠSe cond", + "ĠSec ond", + "Ġsh ooting", + "Ġshoot ing", + "Ġsho oting", + "_ pre", + "_p re", + "_pr e", + "Com ponents", + "Component s", + "Comp onents", + "Ġ ]ĊĊ", + "Ġ] ĊĊ", + "Ġ]Ċ Ċ", + "_ _,", + "__ ,", + "st itution", + "stit ution", + ". Char", + ".C har", + ".Ch ar", + "> ();ĊĊ", + ">( );ĊĊ", + ">();Ċ Ċ", + ">() ;ĊĊ", + ">(); ĊĊ", + "Ġpres ented", + "Ġpresent ed", + "Ġpresente d", + "Ġ wa", + "Ġw a", + "o ker", + "ok er", + "oke r", + "- ĊĊ", + "-Ċ Ċ", + "i ner", + "in er", + "ine r", + "Ġbe coming", + "Ġbec oming", + "Ġ incident", + "Ġinc ident", + "Ġincid ent", + "A tt", + "At t", + "1 62", + "16 2", + "Ġreve aled", + "Ġreveal ed", + "f orc", + "fo rc", + "for c", + "Ġ boot", + "Ġb oot", + "Ġbo ot", + "Ġboo t", + ". page", + ".p age", + ".pa ge", + ".pag e", + "En umerator", + "Enumer ator", + "Enum erator", + "1 65", + "16 5", + "_ ->", + "_- >", + "Ph oto", + "Phot o", + "Ġ spring", + "Ġs pring", + "Ġsp ring", + "Ġspr ing", + ". \",", + ".\" ,", + "Ġ Dictionary", + "ĠD ictionary", + "B JECT", + "BJ ECT", + "Ġ locations", + "Ġl ocations", + "Ġloc ations", + "Ġlocation s", + "Ġ samples", + "Ġs amples", + "Ġsample s", + "Ġsam ples", + "Ġsamp les", + "Input Stream", + "Ġ Brown", + "ĠB rown", + "ĠBr own", + "ĠBro wn", + "ĠBrow n", + "Ġ stats", + "Ġst ats", + "Ġstat s", + "Ġsta ts", + "q uality", + "qu ality", + "qual ity", + "Ñ ħ", + "- dis", + "-d is", + "-di s", + "Ġhelp ing", + "Ġhel ping", + "Ġ ped", + "Ġp ed", + "Ġpe d", + "2 24", + "22 4", + "( se", + "(s e", + "Ġ Who", + "ĠW ho", + "ĠWh o", + "a lian", + "al ian", + "ali an", + "alia n", + "in ternal", + "int ernal", + "inter nal", + "intern al", + "Ġ ft", + "Ġf t", + "> ().", + ">( ).", + ">() .", + "- >{", + "-> {", + "Ġ mine", + "Ġm ine", + "Ġmin e", + "Ġmi ne", + "Ġ sector", + "Ġs ector", + "Ġse ctor", + "Ġsec tor", + "Ġsect or", + "Ġ gro", + "Ġg ro", + "Ġgr o", + "Ġopport unities", + "Ġopportun ities", + "Ġ ü", + "Ġà ¼", + "Ġ mp", + "Ġm p", + "Ġalleg ed", + "Ġalle ged", + "Ġallege d", + "Ġdoub t", + "Ġdou bt", + "M ouse", + "Mo use", + "A bout", + "Ab out", + "_ part", + "_p art", + "_par t", + "_pa rt", + "Ġ chair", + "Ġc hair", + "Ġch air", + "Ġcha ir", + "Ġchai r", + "Ġ stopped", + "Ġst opped", + "Ġstop ped", + "Ġsto pped", + "1 61", + "16 1", + "l oop", + "lo op", + "loo p", + "ent ities", + "enti ties", + "Ġ apps", + "Ġa pps", + "Ġapp s", + "Ġap ps", + "ans ion", + "ansi on", + "Ġ mental", + "Ġm ental", + "Ġmen tal", + "Ġment al", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "F R", + "Ġdef end", + "Ġdefe nd", + "c are", + "ca re", + "car e", + "Ġ ideal", + "Ġi deal", + "Ġide al", + "Ġidea l", + "/ api", + "/a pi", + "/ap i", + "ur face", + "urf ace", + "0 11", + "01 1", + "Ġ ele", + "Ġe le", + "Ġel e", + "u lator", + "ul ator", + "ula tor", + "Ġ Rights", + "ĠR ights", + "ĠRight s", + "angu ages", + "anguage s", + "Ġf unds", + "Ġfun ds", + "Ġfund s", + "Ġfu nds", + "Ġ adapt", + "Ġad apt", + "Ġada pt", + "Ġadap t", + "At tributes", + "Attribute s", + "Attrib utes", + "Ġ deploy", + "Ġde ploy", + "Ġdep loy", + "o pts", + "op ts", + "opt s", + "Ġ validation", + "Ġvalid ation", + "Ġvalida tion", + "Ġconcern s", + "u ce", + "uc e", + ". num", + ".n um", + "ul ture", + "ult ure", + "ultur e", + "i la", + "il a", + "Ġ cup", + "Ġc up", + "Ġcu p", + "Ġ pure", + "Ġp ure", + "Ġpur e", + "Ġpu re", + ". Fore", + ".F ore", + ".For e", + "1 83", + "18 3", + "Ġ HashMap", + "ĠHash Map", + ". valueOf", + ".value Of", + "a sm", + "as m", + "M O", + "Ġ cs", + "Ġc s", + "Ġ stores", + "Ġst ores", + "Ġstore s", + "Ġstor es", + "Ġsto res", + "Ġ ************************************************************************", + "Ġ**************************************************************** ********", + "Ġ******************************** ****************************************", + "Ġ******** ****************************************************************", + "Ġ**************** ********************************************************", + "Ġ************************ ************************************************", + "Ġ**************************************** ********************************", + "Ġ******************************************************** ****************", + "Ġ************************************************ ************************", + "Ġ communication", + "Ġcomm unication", + "Ġcommunic ation", + "Ġcommun ication", + "m em", + "me m", + ". EventHandler", + ".Event Handler", + ". Status", + ".S tatus", + ".St atus", + ".Stat us", + "_ right", + "_r ight", + ".set On", + "S heet", + "She et", + "Ġ identify", + "Ġident ify", + "ener ated", + "ene rated", + "enerate d", + "ord ered", + "order ed", + "orde red", + "Ġ \"[", + "Ġ\" [", + "Ġs we", + "Ġsw e", + "Con dition", + "Cond ition", + "Ġ According", + "ĠA ccording", + "ĠAcc ording", + "ĠAccord ing", + "Ġ prepare", + "Ġpre pare", + "Ġprepar e", + "Ġprep are", + "Ġ rob", + "Ġr ob", + "Ġro b", + "P ool", + "Po ol", + "Ġ sport", + "Ġs port", + "Ġsp ort", + "Ġspo rt", + "Ġspor t", + "r v", + "Ġ Router", + "ĠR outer", + "ĠRoute r", + "ĠRo uter", + "ĠRou ter", + "ĠRout er", + "Ġ alternative", + "Ġaltern ative", + "Ġalter native", + "( []", + "([ ]", + "Ġ Chicago", + "ĠCh icago", + "ĠChic ago", + "i pher", + "ip her", + "iph er", + "is che", + "isc he", + "isch e", + "Ġ Director", + "ĠD irector", + "ĠDirect or", + "ĠDir ector", + "ĠDire ctor", + "k l", + "Ġ Wil", + "ĠW il", + "ĠWi l", + "ke ys", + "key s", + "Ġ mysql", + "Ġm ysql", + "Ġmy sql", + "Ġmys ql", + "Ġ welcome", + "Ġw elcome", + "Ġwel come", + "k ing", + "ki ng", + "kin g", + "Ġ Manager", + "ĠM anager", + "ĠMan ager", + "ĠManage r", + "ĠMana ger", + "Ġ caught", + "Ġca ught", + ") }Ċ", + ")} Ċ", + "S core", + "Sc ore", + "_ PR", + "_P R", + "Ġ survey", + "Ġs urvey", + "Ġsur vey", + "Ġsurv ey", + "Ġsurve y", + "h ab", + "ha b", + "He aders", + "Header s", + "Head ers", + "A DER", + "AD ER", + "ADE R", + "Ġ decor", + "Ġde cor", + "Ġdec or", + "Ġdeco r", + "Ġturn s", + "Ġtur ns", + "Ġ radius", + "Ġr adius", + "Ġrad ius", + "Ġradi us", + "er rupt", + "err upt", + "C or", + "Co r", + "Ġ mel", + "Ġm el", + "Ġme l", + "Ġ intr", + "Ġin tr", + "Ġint r", + "( q", + "Ġ AC", + "ĠA C", + "a mos", + "am os", + "amo s", + "M AX", + "MA X", + "Ġ Grid", + "ĠG rid", + "ĠGr id", + "ĠGri d", + "Ġ Jesus", + "ĠJ esus", + "ĠJes us", + "ĠJe sus", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + ". DE", + ".D E", + "Ġ ts", + "Ġt s", + "Ġ linked", + "Ġlink ed", + "Ġlin ked", + "f ree", + "fr ee", + "fre e", + "Ġ Qt", + "ĠQ t", + "Ġ /**čĊ", + "Ġ/ **čĊ", + "Ġ/* *čĊ", + "Ġ/** čĊ", + "Ġf aster", + "Ġfa ster", + "Ġfast er", + "Ġfas ter", + "c tr", + "ct r", + "_ J", + "D T", + ". Check", + ".C heck", + ".Ch eck", + "Ġ combination", + "Ġcomb ination", + "Ġcombin ation", + "Ġint ended", + "Ġintend ed", + "- the", + "-t he", + "-th e", + "- type", + "-t ype", + "1 82", + "18 2", + "e ctors", + "ect ors", + "ec tors", + "ector s", + "a mi", + "am i", + "u ting", + "ut ing", + "uti ng", + "utin g", + "Ġ uma", + "Ġu ma", + "Ġum a", + "X ML", + "XM L", + "U CT", + "UC T", + "A p", + "Ġ Random", + "ĠR andom", + "ĠRand om", + "ĠRan dom", + "Ġ ran", + "Ġr an", + "Ġra n", + ". sort", + ".s ort", + ".so rt", + "Ġ sorted", + "Ġs orted", + "Ġsort ed", + "Ġsor ted", + "Ġsorte d", + ". Un", + ".U n", + "4 01", + "40 1", + "_ PER", + "_P ER", + "_PE R", + "it ory", + "itor y", + "ito ry", + "Ġ priority", + "Ġp riority", + "Ġprior ity", + "Ġpriorit y", + "Ġ Gal", + "ĠG al", + "ĠGa l", + "Ġ Old", + "ĠO ld", + "ĠOl d", + "h ot", + "ho t", + "Ġ Display", + "ĠD isplay", + "ĠDis play", + "ĠDisp lay", + "( sub", + "(s ub", + "_ TH", + "_T H", + "_ Y", + "Ġ Care", + "ĠC are", + "ĠCar e", + "ĠCa re", + "lo ading", + "load ing", + "K ind", + "Kin d", + "Ki nd", + "_ handle", + "_h andle", + "_hand le", + ", ,", + "r ase", + "ra se", + "ras e", + "_ replace", + "_re place", + "_rep lace", + ". addEventListener", + ".add EventListener", + "Ġ RT", + "ĠR T", + "1 72", + "17 2", + "Ġ entered", + "Ġen tered", + "Ġent ered", + "Ġenter ed", + "g ers", + "ge rs", + "ger s", + "Ġ ich", + "Ġi ch", + "Ġic h", + "( start", + "(st art", + "2 05", + "20 5", + "/ app", + "/a pp", + "/ap p", + "Ġbr other", + "Ġbro ther", + "Ġbroth er", + "M emory", + "Mem ory", + "Memo ry", + "Out let", + "Ġ utf", + "Ġu tf", + "Ġut f", + "p rec", + "pr ec", + "pre c", + "Ġ navigation", + "Ġn avigation", + "Ġnav igation", + "Ġnavig ation", + "O RK", + "OR K", + "Ġ dst", + "Ġd st", + "Ġds t", + "D etail", + "De tail", + "Det ail", + "Ġaud ience", + "Ġaudi ence", + "Ġ dur", + "Ġd ur", + "Ġdu r", + "Ġ cluster", + "Ġcl uster", + "un ched", + "unc hed", + "unch ed", + "Ġ ],", + "Ġ] ,", + "Ġcomfort able", + ". values", + ".value s", + ".val ues", + "Ġ Total", + "ĠT otal", + "ĠTo tal", + "ĠTot al", + "Ġ snap", + "Ġs nap", + "Ġsn ap", + "Ġsna p", + "Ġstand ards", + "Ġstandard s", + "Ġper formed", + "Ġperform ed", + "Ġperfor med", + "h and", + "ha nd", + "han d", + "( \"@", + "(\" @", + "å Ń", + "Ġ phil", + "Ġp hil", + "Ġph il", + "Ġphi l", + "i br", + "ib r", + "t rim", + "tr im", + "tri m", + "Ġ forget", + "Ġf orget", + "Ġfor get", + "Ġforg et", + "Ġforge t", + "1 57", + "15 7", + "Ġ doctor", + "Ġdo ctor", + "Ġdoc tor", + ". TextBox", + ".Text Box", + "3 77", + "37 7", + "i cons", + "ic ons", + "icon s", + "ico ns", + ", s", + "Ġ Op", + "ĠO p", + "S m", + "S top", + "St op", + "ĉ List", + "ĉL ist", + "ĉ u", + "Com ment", + "Comm ent", + "_ VERSION", + "_V ERSION", + "_VER SION", + ".X tra", + "P erson", + "Per son", + "Pers on", + "r b", + "L OB", + "LO B", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "Ġ Central", + "ĠC entral", + "ĠCent ral", + "2 70", + "27 0", + "I CK", + "IC K", + "r aq", + "ra q", + "Ġp utting", + "Ġput ting", + "Ġputt ing", + "Ġ md", + "Ġm d", + "Ġ Love", + "ĠL ove", + "ĠLo ve", + "ĠLov e", + "P rogram", + "Pro gram", + "Pr ogram", + "Prog ram", + "B order", + "o or", + "oo r", + "Ġall owing", + "Ġallow ing", + "Ġallo wing", + "a fter", + "af ter", + "aft er", + "Ġ entries", + "Ġen tries", + "Ġent ries", + "Ġentr ies", + "Ġ Maybe", + "ĠM aybe", + "ĠMay be", + "] ).", + "]) .", + "Ġ Short", + "ĠS hort", + "ĠSh ort", + "ĠSho rt", + ") \\", + ". now", + ".n ow", + ".no w", + "f riend", + "Ġ prefer", + "Ġp refer", + "Ġpre fer", + "Ġpref er", + "Ġ GPIO", + "ĠG PIO", + "ĠGP IO", + "ĠGPI O", + "o sis", + "os is", + "osi s", + "Ġ GameObject", + "ĠGame Object", + "Ġ skip", + "Ġs kip", + "Ġsk ip", + "Ġski p", + "Ġ competition", + "Ġcom petition", + "Ġcompet ition", + "Ġcompetit ion", + "_ match", + "_m atch", + "_mat ch", + "l ications", + "lic ations", + "lication s", + "_ CONT", + "_C ONT", + "_CON T", + "_CO NT", + ". groupBox", + ".group Box", + "Ġ als", + "Ġa ls", + "Ġal s", + "6 66", + "66 6", + "\" We", + "\"W e", + "_ eq", + "_e q", + "l an", + "la n", + "_ search", + "_s earch", + "_se arch", + "Ġ Music", + "ĠM usic", + "ĠMus ic", + "ĠMu sic", + "a sis", + "as is", + "asi s", + "Ġ bind", + "Ġb ind", + "Ġbi nd", + "Ġbin d", + "ĠIs land", + "ĠIsl and", + "r um", + "ru m", + "( E", + "Ġ seat", + "Ġs eat", + "Ġse at", + "Ġsea t", + "V ideo", + "Vi deo", + "Ġ ack", + "Ġa ck", + "Ġac k", + "re ek", + "ree k", + "={ ()", + "={( )", + "Ġ rating", + "Ġr ating", + "Ġrat ing", + "Ġra ting", + "Ġ restaurant", + "Ġrest aurant", + "Ġrestaur ant", + "Ġrestau rant", + "4 56", + "45 6", + "D EX", + "DE X", + "( buf", + "(b uf", + "p ping", + "pp ing", + "u ality", + "ual ity", + "uali ty", + "Ġ league", + "Ġle ague", + "1 76", + "17 6", + "Ġ focused", + "Ġf ocused", + "Ġfocus ed", + "Ġfoc used", + "a pon", + "ap on", + "apo n", + "$ data", + "$d ata", + "CL UD", + "CLU D", + "CLUD ING", + "Ġ absolute", + "Ġa bsolute", + "Ġabs olute", + "Ġabsolut e", + "Ġabsol ute", + "( query", + "(qu ery", + "Ġt ells", + "Ġtell s", + "Ġtel ls", + "A ng", + "An g", + "Ġcomm unities", + "Ġcommun ities", + "Ġh onest", + "Ġhon est", + "Ġho nest", + "Ġhone st", + "o king", + "ok ing", + "oki ng", + "okin g", + "Ġa part", + "Ġap art", + "Ġapar t", + "Ġapa rt", + "ar ity", + "ari ty", + "/ $", + "_ module", + "_m odule", + "_mod ule", + "Ġ Enc", + "ĠE nc", + "ĠEn c", + ". an", + ".a n", + ". Config", + ".Con fig", + "C re", + "Cr e", + "Ġsh ock", + "Ġsho ck", + "ĠA rab", + "ĠAr ab", + "ĠAra b", + "I ENT", + "IE NT", + "/ re", + "/r e", + "Ġre trie", + "Ġret rie", + "Ġretr ie", + "yc ler", + "ycle r", + "ycl er", + "i sa", + "is a", + "Ġ Organ", + "ĠO rgan", + "ĠOr gan", + "ĠOrg an", + ". graph", + ".g raph", + ".gr aph", + "Ġ í", + "ĠB AS", + "ĠBA S", + "E num", + "En um", + "Ġ possibly", + "Ġposs ibly", + "ÑĢ Ð°Ð", + "ÑĢа Ð", + "Ġ Japanese", + "ĠJ apanese", + "ĠJapan ese", + "Ġ craft", + "Ġc raft", + "Ġcr aft", + "Ġcra ft", + "Ġ Place", + "ĠP lace", + "ĠPl ace", + "ĠPla ce", + "Ġt alent", + "Ġtal ent", + "Ġtale nt", + "Ġf unding", + "Ġfun ding", + "Ġfund ing", + "Ġ confirmed", + "Ġconf irmed", + "Ġconfirm ed", + "Ġ cycle", + "Ġc ycle", + "Ġcy cle", + "Ġcycl e", + "Ġcyc le", + "/ x", + "G E", + "Ġh earing", + "Ġhe aring", + "Ġhear ing", + "Ġ plants", + "Ġpl ants", + "Ġplan ts", + "Ġplant s", + "Ġpla nts", + "Ġ mouth", + "Ġm outh", + "Ġmo uth", + "Ġmou th", + "p ages", + "page s", + "pa ges", + "pag es", + "o ria", + "or ia", + "ori a", + "Ġ Remove", + "ĠRe move", + "ĠRem ove", + "_ total", + "_t otal", + "_to tal", + "_tot al", + "Ġ od", + "Ġo d", + "oll apse", + "d oor", + "do or", + "Ġb ought", + "Ġbo ught", + "Ġbou ght", + "Ġ addr", + "Ġadd r", + "Ġad dr", + "AR CH", + "ARC H", + "_ dim", + "_d im", + "_di m", + "d den", + "dd en", + "dde n", + "Ġdec ades", + "Ġdecade s", + "Ġdecad es", + "RE QUEST", + "REQ UEST", + "Ġ versions", + "Ġv ersions", + "Ġversion s", + "Ġvers ions", + "f ire", + "fi re", + "fir e", + "0 06", + "00 6", + "Ġ moves", + "Ġm oves", + "Ġmov es", + "Ġmove s", + "Ġmo ves", + "f b", + "Ġ coffee", + "Ġc offee", + "Ġco ffee", + "Ġcoff ee", + "Ġcof fee", + ". connect", + ".con nect", + ".conn ect", + "Ġ Row", + "ĠR ow", + "ĠRo w", + "Ġ schema", + "Ġs chema", + "Ġsch ema", + "Ġschem a", + "Ġsche ma", + "S cope", + "Sc ope", + "- Type", + "-T ype", + "Ġf ighting", + "Ġfight ing", + "Ġre tail", + "Ġr etail", + "Ġret ail", + "Ġ modified", + "Ġmod ified", + "T F", + "F iles", + "File s", + "Fi les", + "Fil es", + "n ie", + "ni e", + "_ command", + "_com mand", + "_comm and", + "s tone", + "st one", + "ston e", + "sto ne", + "Ġ ÑĤ", + "ĠÑ Ĥ", + "_ thread", + "_t hread", + "_th read", + "_thr ead", + "Ġ bond", + "Ġb ond", + "Ġbo nd", + "Ġbon d", + "Ġ Development", + "ĠDe velopment", + "ĠDev elopment", + "ĠDevelop ment", + "Ġ pt", + "Ġp t", + "F ORM", + "FO RM", + "FOR M", + "p let", + "pl et", + "ple t", + "Ġ identified", + "Ġident ified", + "c pp", + "cp p", + "2 06", + "20 6", + "2 25", + "22 5", + "Ġ coding", + "Ġc oding", + "Ġco ding", + "Ġcod ing", + "o ked", + "ok ed", + "oke d", + "Ġ Master", + "ĠM aster", + "ĠMa ster", + "ĠMas ter", + "ĠMast er", + "ID TH", + "Ġres idents", + "Ġresident s", + "Ġresid ents", + "Ġreside nts", + "r edit", + "re dit", + "red it", + "redi t", + "Ġ Photo", + "ĠPh oto", + "ĠPhot o", + "= -", + "u nte", + "un te", + "unt e", + "at eur", + "ate ur", + "1 59", + "15 9", + "_ STATE", + "_ST ATE", + "_STAT E", + "_STA TE", + "Ġ Sing", + "ĠS ing", + "ĠSi ng", + "ĠSin g", + "Ġ sheet", + "Ġs heet", + "Ġshe et", + ". val", + ".v al", + ".va l", + "or se", + "ors e", + "Ġh ers", + "Ġhe rs", + "Ġher s", + "Ġd etermined", + "Ġdetermin ed", + "Ġdetermine d", + "Ġdeterm ined", + "Com mon", + "Comm on", + "Ġ wed", + "Ġw ed", + "Ġwe d", + "_ queue", + "_q ueue", + "_que ue", + "P H", + "Ġ Atl", + "ĠA tl", + "ĠAt l", + "c red", + "cre d", + "cr ed", + "/ LICENSE", + "/L ICENSE", + "Ġ mes", + "Ġm es", + "Ġme s", + "Ġ advanced", + "Ġad vanced", + "Ġadv anced", + "Ġadvance d", + ". java", + ".j ava", + ".jav a", + ". Sh", + ".S h", + "G o", + "k ill", + "ki ll", + "kil l", + "f p", + "_ settings", + "_s ettings", + "_set tings", + "_setting s", + "Ġ pal", + "Ġp al", + "Ġpa l", + "Ġ truck", + "Ġtr uck", + "Ġ combined", + "Ġcomb ined", + "Ġcombine d", + "Ġcombin ed", + "Ġ \"${", + "Ġ\" ${", + "Ġ\"$ {", + "ĠC orpor", + "ĠCor por", + "ĠCorp or", + "Ġ joined", + "Ġj oined", + "Ġjoin ed", + "Ġjo ined", + "Ġ Jose", + "ĠJ ose", + "ĠJo se", + "ĠJos e", + "ĠC up", + "ĠCu p", + "u ns", + "un s", + "est ival", + "esti val", + "le vision", + "lev ision", + "Ġ broken", + "Ġb roken", + "Ġbr oken", + "Ġbro ken", + "Ġbroke n", + "Ġmar riage", + "Ġ Western", + "ĠWest ern", + "ĠWes tern", + "Ġrep resents", + "Ġrepresent s", + "Ġ Title", + "ĠT itle", + "ĠTi tle", + "ĠTit le", + "Ġ ss", + "Ġs s", + ". Ass", + ".A ss", + ".As s", + "ong oose", + "ongo ose", + "i ento", + "ient o", + "ien to", + "< >();Ċ", + "<>( );Ċ", + "<> ();Ċ", + "Ġabs olutely", + "Ġabsolute ly", + "Ġabsolut ely", + "Ġabsol utely", + "Ġ smooth", + "Ġsm ooth", + "Ġsmo oth", + "T ERN", + "TE RN", + "TER N", + "Ġ Unless", + "ĠUn less", + "W ord", + "Wo rd", + "Ġ merge", + "Ġm erge", + "Ġmer ge", + "Ġmerg e", + "i gan", + "ig an", + "iga n", + "Ġ Vol", + "ĠV ol", + "ĠVo l", + "Ġ nn", + "Ġn n", + ". getId", + ".get Id", + "Ġ з", + "ĠÐ ·", + "1 71", + "17 1", + "Ġ sexy", + "Ġse xy", + "Ġsex y", + "Ġse eking", + "Ġsee king", + "Ġseek ing", + "S ingle", + "Si ngle", + "Sin gle", + "Sing le", + ". this", + ".t his", + ".th is", + "1 79", + "17 9", + "Ġ kom", + "Ġk om", + "Ġko m", + "b ound", + "bo und", + "bou nd", + "; \"", + "Ġ fontSize", + "Ġfont Size", + "_ df", + "_d f", + "Ġin jury", + "Ġinj ury", + "( H", + "Ġ issued", + "Ġiss ued", + "Ġissue d", + "Ġissu ed", + "_ END", + "_E ND", + "_EN D", + ": self", + ":s elf", + "0 20", + "02 0", + "Ġ patch", + "Ġp atch", + "Ġpat ch", + "Ġle aves", + "Ġleave s", + "Ġ adopt", + "Ġad opt", + "Ġado pt", + "File Name", + "ãĢ IJ", + "Ġexec utive", + "Ġexecut ive", + "Ġ Byte", + "ĠB yte", + "ĠBy te", + "] ))Ċ", + "]) )Ċ", + "])) Ċ", + "Ġ nu", + "Ġn u", + "o uting", + "ou ting", + "out ing", + "cl uding", + "clud ing", + "- R", + ". options", + ".o ptions", + ".opt ions", + ".option s", + "Ġsub stant", + "Ġsubs tant", + "Ġsubst ant", + "av ax", + "ava x", + "ĠB UT", + "ĠBU T", + "Ġ technical", + "Ġtechn ical", + "Ġtw ice", + "Ġm ás", + "Ġmá s", + "Ġun ivers", + "Ġuni vers", + "y r", + "Ġ drag", + "Ġd rag", + "Ġdr ag", + "Ġdra g", + "Ġ DC", + "ĠD C", + "Ġ sed", + "Ġs ed", + "Ġse d", + "Ġ bot", + "Ġb ot", + "Ġbo t", + "Ġ Pal", + "ĠP al", + "ĠPa l", + "Ġ Hall", + "ĠH all", + "ĠHa ll", + "ĠHal l", + "force ment", + "forc ement", + "Ġa uch", + "Ġau ch", + "Ġauc h", + ". mod", + ".m od", + ".mo d", + "n otation", + "not ation", + "nota tion", + "_ files", + "_f iles", + "_file s", + "_fil es", + ". line", + ".l ine", + ".li ne", + ".lin e", + "_ flag", + "_f lag", + "_fl ag", + "[ name", + "[n ame", + "Ġ resolution", + "Ġre solution", + "Ġres olution", + "Ġb ott", + "Ġbo tt", + "Ġbot t", + "( \"[", + "(\" [", + "e nde", + "en de", + "end e", + "( arr", + "(a rr", + "(ar r", + "F ree", + "Fr ee", + "Fre e", + "( @\"", + "(@ \"", + "Ġ District", + "ĠD istrict", + "ĠDi strict", + "P EC", + "PE C", + ": -", + "P icker", + "Pic ker", + "Pi cker", + "Pick er", + "Ġ Jo", + "ĠJ o", + "Ġ ĠĠĠĠĊ", + "ĠĠ ĠĠĠĊ", + "ĠĠĠĠ ĠĊ", + "ĠĠĠ ĠĠĊ", + "ĠĠĠĠĠ Ċ", + "Ġ River", + "ĠR iver", + "ĠRiv er", + "ĠRi ver", + "_ rows", + "_r ows", + "_row s", + "_ro ws", + "Ġhelp ful", + "Ġmass ive", + "- --Ċ", + "-- -Ċ", + "--- Ċ", + "Ġme asures", + "Ġmeasure s", + "Ġmeas ures", + "0 07", + "00 7", + "Ġ Runtime", + "ĠR untime", + "ĠRun time", + "Ġw orry", + "Ġwor ry", + "Ġ Spec", + "ĠS pec", + "ĠSp ec", + "ĠSpe c", + "ĉ D", + "ãĢ ij", + "Ġ ){Ċ", + "Ġ) {Ċ", + "Ġ){ Ċ", + "Ġw orse", + "Ġwor se", + "Ġwors e", + "( filename", + "(f ilename", + "(file name", + "(fi lename", + "(fil ename", + "Ġ lay", + "Ġl ay", + "Ġla y", + "Ġ magic", + "Ġm agic", + "Ġmag ic", + "Ġ Their", + "ĠThe ir", + "o ul", + "ou l", + "st roy", + "str oy", + "stro y", + "Ġ Where", + "ĠW here", + "ĠWh ere", + "ĠWhe re", + "2 80", + "28 0", + "Ġs udden", + "Ġsu dden", + "Ġsud den", + "Ġd efe", + "Ġde fe", + "Ġdef e", + "Ġ binding", + "Ġb inding", + "Ġbin ding", + "Ġbind ing", + "Ġ flight", + "Ġf light", + "Ġfl ight", + "Ġ OnInit", + "ĠOn Init", + "Ġ Women", + "ĠW omen", + "ĠWo men", + "Ġ Policy", + "ĠP olicy", + "ĠPol icy", + "ĠPolic y", + "Ġdr ugs", + "Ġdrug s", + "Ġdru gs", + "ish ing", + "ishi ng", + "(' ../", + "('. ./", + "Ġ Mel", + "ĠM el", + "ĠMe l", + "p eat", + "pe at", + "t or", + "to r", + "Ġpro posed", + "Ġprop osed", + "Ġpropos ed", + "Ġpropose d", + "Ġst ated", + "Ġstate d", + "Ġstat ed", + "Ġsta ted", + "_ RES", + "_RE S", + "_R ES", + "Ġ east", + "Ġe ast", + "Ġeas t", + "Ġea st", + "2 12", + "21 2", + "Ġ CONDITION", + "ĠCON DITION", + "_ desc", + "_d esc", + "_de sc", + "_des c", + "Ġw inning", + "Ġwin ning", + "f olio", + "fo lio", + "fol io", + "M apper", + "Map per", + "Ma pper", + "Ġ Pan", + "ĠP an", + "ĠPa n", + "ĠA nge", + "ĠAn ge", + "ĠAng e", + ".s ervlet", + ".serv let", + "Ġ copies", + "Ġc opies", + "Ġco pies", + "Ġcop ies", + "L M", + "Ġ vm", + "Ġv m", + "å į", + "Ġ dictionary", + "Ġd ictionary", + "S eg", + "Se g", + "1 77", + "17 7", + "e lines", + "el ines", + "eline s", + "eli nes", + "elin es", + "Ġ Send", + "ĠS end", + "ĠSe nd", + "ĠSen d", + "Ġ iron", + "Ġi ron", + "Ġir on", + "Ġ Fort", + "ĠF ort", + "ĠFor t", + "ĠFo rt", + "1 66", + "16 6", + ". domain", + ".d omain", + ".do main", + ".dom ain", + "Ġde bate", + "Ġdeb ate", + "Not Null", + "e q", + "a cher", + "ac her", + "ach er", + "ache r", + "l f", + "ĉ fmt", + "ĉf mt", + "Ġl awy", + "Ġla wy", + "Ġlaw y", + "1 78", + "17 8", + "Ä Ł", + "Ġ Men", + "ĠM en", + "ĠMe n", + "Ġ trim", + "Ġt rim", + "Ġtr im", + "Ġtri m", + "( NULL", + "(N ULL", + "Ġ !!", + "Ġ! !", + "Ġ pad", + "Ġp ad", + "Ġpa d", + "Ġfollow s", + "Ġfoll ows", + "\" ][\"", + "\"] [\"", + "\"][ \"", + "r equ", + "re qu", + "req u", + "Ġ Ep", + "ĠE p", + ". github", + ".g ithub", + ".git hub", + "( img", + "(i mg", + "(im g", + "e to", + "et o", + "( '\\", + "(' \\", + "S ervices", + "Service s", + "Serv ices", + "umbn ail", + "_ main", + "_m ain", + "_ma in", + "p leted", + "pl eted", + "ple ted", + "plete d", + "plet ed", + "fort unately", + "fortunate ly", + "Ġ windows", + "Ġw indows", + "Ġwindow s", + "Ġwind ows", + "Ġ plane", + "Ġp lane", + "Ġpl ane", + "Ġplan e", + "Ġpla ne", + "Ġ Connection", + "ĠCon nection", + "ĠConnect ion", + "ĠConn ection", + ". local", + ".l ocal", + ".loc al", + ".lo cal", + "u ard", + "ua rd", + "uar d", + "} \\", + "= =\"", + "== \"", + "a ndon", + "an don", + "and on", + "ando n", + "Ġ Roy", + "ĠR oy", + "ĠRo y", + "w est", + "we st", + "1 58", + "15 8", + "ig inal", + "igin al", + "igi nal", + "em ies", + "emi es", + "emie s", + "i tz", + "it z", + "' ):Ċ", + "') :Ċ", + "'): Ċ", + "Ġ Peter", + "ĠP eter", + "ĠPe ter", + "ĠPet er", + "ĠPete r", + "Ġt ough", + "Ġto ugh", + "Ġtou gh", + "Ġre duced", + "Ġred uced", + "Ġredu ced", + "Ġreduce d", + "Ġ calculate", + "Ġc alculate", + "Ġcal culate", + "Ġcalcul ate", + "Ġcalc ulate", + "Ġ rapid", + "Ġr apid", + "Ġrap id", + "Ġra pid", + "c ustomer", + "custom er", + "cust omer", + "Ġ efficient", + "Ġeff icient", + "Ġeffic ient", + "Ġ medium", + "Ġm edium", + "Ġmed ium", + "Ġmedi um", + "Ġ fell", + "Ġf ell", + "Ġfe ll", + "Ġfel l", + ". ref", + ".re f", + ".r ef", + "Ġ Cas", + "ĠC as", + "ĠCa s", + "Ġ feedback", + "Ġfe edback", + "Ġfeed back", + "S peed", + "Sp eed", + "Spe ed", + "( output", + "(out put", + "a je", + "aj e", + "Ġ categories", + "Ġc ategories", + "Ġcategor ies", + "Ġcategorie s", + "Ġ fee", + "Ġf ee", + "Ġfe e", + "} ;", + "Ġ deleted", + "Ġde leted", + "Ġdel eted", + "Ġdelete d", + "Ġdelet ed", + "Ġdele ted", + "r eh", + "re h", + "Ġ proof", + "Ġp roof", + "Ġpro of", + "D esc", + "De sc", + "Des c", + "B uild", + "Bu ild", + "Ġs ides", + "Ġside s", + "Ġsi des", + "Ġsid es", + ". ArrayList", + ".Array List", + "- %", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "Ø ±", + ". match", + ".m atch", + ".mat ch", + "л и", + "Ġfe els", + "Ġfeel s", + "Ġfee ls", + "Ġachie ve", + "Ġach ieve", + "Ġc lim", + "Ġcl im", + "Ġcli m", + "_ ON", + "_O N", + "Ġ CD", + "ĠC D", + "Ġ teacher", + "Ġt eacher", + "Ġte acher", + "Ġteach er", + "Ġtea cher", + "_ current", + "_c urrent", + "_cur rent", + "_curr ent", + "b n", + "_ PL", + "_P L", + "is ting", + "ist ing", + "isti ng", + "E nable", + "En able", + "G EN", + "GE N", + "Ġ tv", + "Ġt v", + "Ġ sock", + "Ġs ock", + "Ġso ck", + "Ġsoc k", + "Ġ plays", + "Ġp lays", + "Ġpl ays", + "Ġplay s", + "Ġpla ys", + "Ġ discount", + "Ġdis count", + "Ġdisc ount", + "Ġdisco unt", + "Ġ KE", + "ĠK E", + "Ġ Debug", + "ĠDe bug", + "ĠDeb ug", + "F ore", + "For e", + "Fo re", + "Ġ Iraq", + "ĠI raq", + "ĠIr aq", + "Ġ appearance", + "Ġap pearance", + "Ġappear ance", + "M on", + "Mo n", + "Ġ styled", + "Ġst yled", + "Ġstyle d", + "Ġsty led", + "Ġstyl ed", + "Ġ Human", + "ĠH uman", + "ĠHum an", + "ĠHu man", + "i ot", + "io t", + "Ġ History", + "ĠH istory", + "ĠHi story", + "ĠHistor y", + "ĠHist ory", + "Ġs ac", + "Ġsa c", + "Ġ Collection", + "ĠC ollection", + "ĠCol lection", + "ĠColl ection", + "ĠCollect ion", + "Ġ recommended", + "Ġre commended", + "Ġrecomm ended", + "Ġrecommend ed", + ". Selected", + ".Se lected", + ".Select ed", + "Ġ organizations", + "Ġorgan izations", + "Ġorganization s", + "Ġorganiz ations", + "Ġdis covered", + "Ġdiscover ed", + "co hol", + "coh ol", + "a das", + "ad as", + "ada s", + "Ġ Thomas", + "ĠTh omas", + "ĠThom as", + "M ay", + "Ma y", + "Ġcon serv", + "Ġcons erv", + "Ġconse rv", + "Ġd omin", + "Ġdo min", + "Ġdom in", + "Ġ Follow", + "ĠF ollow", + "ĠFol low", + "Ġ Section", + "ĠS ection", + "ĠSe ction", + "ĠSec tion", + "ĠSect ion", + "Ġ Thanks", + "ĠTh anks", + "ĠThank s", + "ĠThan ks", + "User name", + "Ġ recipe", + "Ġrec ipe", + "Ġrecip e", + "Ġwonder ful", + ". sleep", + ".s leep", + "_ if", + "_i f", + "ĉ ĊĉĊ", + "ĉĊ ĉĊ", + "or no", + "orn o", + "Ġ ru", + "Ġr u", + "_ target", + "_t arget", + "_tar get", + ". \"\"", + ".\" \"", + "à ¦", + "Event Args", + "Ġ inputs", + "Ġin puts", + "Ġinput s", + "Ġinp uts", + "Ġf if", + "Ġfi f", + "Ġ vision", + "Ġv ision", + "Ġvis ion", + "c y", + "Ġ Series", + "ĠS eries", + "ĠSe ries", + "ĠSer ies", + "ĠSerie s", + ") (((", + ")( ((", + ")(( (", + "Ġtr ading", + "Ġtrad ing", + "Ġtra ding", + "Ġtradi ng", + "Ġ marker", + "Ġm arker", + "Ġmark er", + "Ġmar ker", + "B egin", + "Be gin", + "Ġ typically", + "Ġtyp ically", + "Ġtypical ly", + "Ġc auses", + "Ġca uses", + "Ġcause s", + "Ġcaus es", + "d ropdown", + "drop down", + "_ DEBUG", + "_DE BUG", + "2 60", + "26 0", + "Ġ detect", + "Ġd etect", + "Ġdet ect", + "c ountry", + "count ry", + "! \");Ċ", + "!\" );Ċ", + "!\"); Ċ", + "!\") ;Ċ", + "ĉ R", + "a ppy", + "ap py", + "app y", + "Ġc ref", + "Ġcr ef", + "Ġcre f", + "( '<", + "(' <", + "\" =>", + "Ġ LE", + "ĠL E", + "re ader", + "read er", + "rea der", + "Ġ administr", + "Ġadmin istr", + "à µ", + "u cket", + "uc ket", + "uck et", + "Ġf ashion", + ". char", + ".c har", + ".ch ar", + "i zar", + "iz ar", + "iza r", + "Ġ disable", + "Ġd isable", + "Ġdis able", + "Ġs uc", + "Ġsu c", + "Ġ Live", + "ĠL ive", + "ĠLi ve", + "ĠLiv e", + "i ssue", + "iss ue", + "Ġ metadata", + "Ġm etadata", + "Ġmet adata", + "Ġmeta data", + "f lags", + "fl ags", + "flag s", + "Ġ ðŁ", + "Ġð Ł", + "Ġ committed", + "Ġcom mitted", + "Ġcomm itted", + "Ġcommit ted", + "Ġ va", + "Ġv a", + "Ġ rough", + "Ġr ough", + "Ġro ugh", + "Ġrou gh", + "Ġ '''Ċ", + "Ġ' ''Ċ", + "Ġ'' 'Ċ", + "Ġ''' Ċ", + "Ġ highlight", + "Ġhigh light", + "_ vars", + "_v ars", + "_var s", + "_va rs", + "V O", + "Ġ encoding", + "Ġen coding", + "Ġenc oding", + "- Z", + "_ sign", + "_s ign", + "_sig n", + "_si gn", + "$ (\"#", + "$( \"#", + "$(\" #", + "Ġ rain", + "Ġr ain", + "Ġra in", + "re atest", + "reate st", + "reat est", + "rea test", + "Ġ END", + "ĠE ND", + "ĠEN D", + "S election", + "Se lection", + "Select ion", + "Sel ection", + "Sele ction", + "Ġ candidates", + "Ġc andidates", + "Ġcandid ates", + "Ġcandidate s", + "Ġ sav", + "Ġs av", + "Ġsa v", + ". Empty", + "Ġdec isions", + "Ġdecision s", + "Ġdecis ions", + "Ġcoll abor", + "r idge", + "ri dge", + "rid ge", + "f eed", + "fe ed", + "fee d", + "r ession", + "ress ion", + "Ġ persons", + "Ġper sons", + "Ġperson s", + "Ġpers ons", + "Ġperso ns", + "V M", + "0 08", + "00 8", + "e ga", + "eg a", + "_ BIT", + "_B IT", + "A ccording", + "Acc ording", + "ack ed", + "ac ked", + "Ġdoll ars", + "Ġdollar s", + "_ loss", + "_l oss", + "_lo ss", + "Ġ Cost", + "ĠC ost", + "ĠCo st", + "ĠCos t", + "} \"Ċ", + "}\" Ċ", + "Not ification", + "Ġpro stit", + "Ġpros tit", + "Ġprost it", + "Ġ authority", + "Ġauthor ity", + ". rec", + ".re c", + ".r ec", + "Ġsp okes", + "Ġspoke s", + "Ġspo kes", + "Ġ Today", + "ĠT oday", + "ĠTo day", + "ĠTod ay", + "i stant", + "is tant", + "ist ant", + "istan t", + "ista nt", + "Ġ Head", + "ĠH ead", + "ĠHe ad", + "âĢĿ .", + "er tainment", + "ert ainment", + "ertain ment", + "c ean", + "ce an", + "cea n", + "c ulate", + "cul ate", + "cu late", + "Ġ ven", + "Ġv en", + "Ġve n", + "How ever", + "_ arr", + "_a rr", + "_ar r", + "Ġ tokens", + "Ġt okens", + "Ġtoken s", + "Ġtok ens", + "G raph", + "Gr aph", + "Ġ Jud", + "ĠJ ud", + "ĠJu d", + "Ġ Virgin", + "ĠVir gin", + "Ġ Serial", + "ĠS erial", + "ĠSe rial", + "ĠSer ial", + "un ning", + "unn ing", + "M utable", + "Mu table", + "Mut able", + "a gers", + "ag ers", + "age rs", + "ager s", + ". csv", + ".c sv", + ".cs v", + "Ġdevelop ing", + "Ġdevel oping", + "Ġ instructions", + "Ġin structions", + "Ġinstruction s", + "Ġinstr uctions", + "Ġinstruct ions", + "Ġ promise", + "Ġp romise", + "Ġpro mise", + "Ġprom ise", + "Ġ requested", + "Ġrequest ed", + "Ġrequ ested", + "_ encode", + "_en code", + "_enc ode", + "/ \"", + "Ġ Icon", + "ĠI con", + "u ilt", + "ui lt", + "uil t", + "- day", + "-d ay", + "-da y", + "Ġ intelligence", + "Ġint elligence", + "Ġintellig ence", + ". IS", + ".I S", + "Ġ Observable", + "ĠO bservable", + "ĠObserv able", + "Ġ Hard", + "ĠH ard", + "ĠHar d", + "ĠHa rd", + "B ool", + "Bo ol", + "2 11", + "21 1", + "id ential", + "ident ial", + ". Anchor", + ".An chor", + "Ġ selling", + "Ġs elling", + "Ġsell ing", + "Ġsel ling", + "C I", + "A GES", + "AG ES", + "AGE S", + "t le", + "tl e", + "b ur", + "bu r", + "UFF ER", + "UF FER", + "R Y", + "Ġb igger", + "Ġbig ger", + "Ġbi gger", + "Ġ rat", + "Ġr at", + "Ġra t", + "Ġf amous", + "Ġfam ous", + "Ġ typename", + "Ġtype name", + "Ġtyp ename", + "Ġ explained", + "Ġexpl ained", + "Ġexplain ed", + "} }Ċ", + "}} Ċ", + "Ġn uclear", + "Ġnu clear", + "Ġnucle ar", + "- N", + "Ġcr isis", + "Ġcri sis", + "Ġcris is", + "Ġ Enter", + "ĠEn ter", + "ĠEnt er", + "Ġ answers", + "Ġan swers", + "Ġanswer s", + "Ġans wers", + "/ ${", + "/$ {", + "/ pl", + "/p l", + "Ġ sequ", + "Ġs equ", + "Ġse qu", + "Ġseq u", + "_ next", + "_n ext", + "_ne xt", + "m ask", + "ma sk", + "mas k", + "Ġ standing", + "Ġst anding", + "Ġstand ing", + "Ġstan ding", + "Ġpl enty", + "Ġple nty", + "Ġ Cross", + "ĠC ross", + "ĠCr oss", + "ĠCro ss", + "ĠCros s", + "ĉ ret", + "ĉr et", + "ĉre t", + "d ro", + "dr o", + "Ġ Cast", + "ĠC ast", + "ĠCas t", + "ĠCa st", + "1 67", + "16 7", + "= true", + "Ġ Chris", + "ĠCh ris", + "ĠChr is", + "i cio", + "ic io", + "ici o", + "Ġ Mike", + "ĠM ike", + "ĠMi ke", + "ĠMik e", + "D ecimal", + "De cimal", + "Dec imal", + "add Component", + "L en", + "Le n", + "Ġ cock", + "Ġc ock", + "Ġco ck", + "Ġcoc k", + "Ġ #{", + "Ġ# {", + "U RN", + "UR N", + "< tr", + "", + "\\\" >", + "Ġ *=", + "Ġ* =", + "Ġ PS", + "ĠP S", + "Ġdanger ous", + "[ p", + "O ME", + "OM E", + "O ther", + "Ot her", + "Ġ StringBuilder", + "ĠString Builder", + "P oints", + "Point s", + "Po ints", + "he ading", + "head ing", + "hea ding", + "Ġ currency", + "Ġc urrency", + "Ġcurr ency", + "Ġ percentage", + "Ġper centage", + "Ġpercent age", + "_ API", + "_A PI", + "_AP I", + "Ġ classic", + "Ġclass ic", + "Ġcl assic", + "Ġclas sic", + "t head", + "th ead", + "the ad", + "Ġ MO", + "ĠM O", + "F E", + "I dx", + "Id x", + "a wait", + "aw ait", + "awa it", + "awai t", + "Ġ è", + "Ġà ¨", + "Ġacc ident", + "Ġ variant", + "Ġv ariant", + "Ġvar iant", + "Ġvari ant", + "Ġm yst", + "Ġmy st", + "Ġmys t", + "Ġ Land", + "ĠL and", + "ĠLa nd", + "ĠLan d", + "Ġ Bre", + "ĠB re", + "ĠBr e", + "Ġh arm", + "Ġhar m", + "Ġha rm", + "Ġ Acc", + "ĠA cc", + "ĠAc c", + "Ġ charged", + "Ġch arged", + "Ġchar ged", + "Ġcharg ed", + "Ġcharge d", + "i ones", + "ion es", + "io nes", + "ione s", + "Vis ibility", + "ar ry", + "arr y", + "Ġ Language", + "ĠL anguage", + "Ġ walking", + "Ġw alking", + "Ġwalk ing", + "Ġwal king", + "\" .ĊĊ", + "\". ĊĊ", + "\".Ċ Ċ", + "i fer", + "if er", + "ife r", + "Ġleaders hip", + "Ġleader ship", + ". From", + ".F rom", + "y nam", + "yn am", + "yna m", + "Ġ timestamp", + "Ġt imestamp", + "Ġtime stamp", + "i pt", + "ip t", + "Ġ Has", + "ĠH as", + "ĠHa s", + "RE FER", + "REF ER", + "Ġ Its", + "ĠI ts", + "ĠIt s", + "Ġ listener", + "Ġlist ener", + "Ġlisten er", + "Ġliste ner", + "Ġlis tener", + "U TE", + "UT E", + "2 13", + "21 3", + "_ description", + "_d escription", + "_de scription", + "_des cription", + "Ġex periences", + "Ġexper iences", + "Ġexperience s", + "Ġexperi ences", + "Ġ creates", + "Ġcreate s", + "Ġcre ates", + "Ġcreat es", + "Ġcrea tes", + "R S", + "c art", + "ca rt", + "car t", + "b lack", + "bl ack", + "bla ck", + "Ġ choices", + "Ġcho ices", + "Ġchoice s", + "w ar", + "wa r", + "7 50", + "75 0", + "Ġ '''", + "Ġ' ''", + "Ġ'' '", + "Ġ ordered", + "Ġorder ed", + "Ġord ered", + "Ġeven ing", + "Ġev ening", + "Ġeve ning", + "Ġp il", + "Ġpi l", + "Ġt un", + "Ġtu n", + "Ġ Bad", + "ĠB ad", + "ĠBa d", + "( app", + "(a pp", + "(ap p", + "r andom", + "ran dom", + "rand om", + "Ġ explicit", + "Ġexp licit", + "Ġexpl icit", + "Ġexplic it", + "Ġarr ived", + "Ġarrive d", + "Ġarriv ed", + "Ġ fly", + "Ġf ly", + "Ġfl y", + "Ġe conom", + "Ġecon om", + "Ġec onom", + "Ġeco nom", + "- mail", + "-m ail", + "Ġ lists", + "Ġl ists", + "Ġli sts", + "Ġlist s", + "Ġlis ts", + "Ġarch itect", + "Ġarchit ect", + "2 34", + "23 4", + "Ġ Pay", + "ĠP ay", + "ĠPa y", + "Ġ ds", + "Ġd s", + "Ġ Sol", + "ĠS ol", + "ĠSo l", + "Ġ vehicles", + "Ġv ehicles", + "Ġveh icles", + "Ġvehicle s", + "H z", + "- com", + "-c om", + "-co m", + "Ġ king", + "Ġk ing", + "Ġki ng", + "Ġkin g", + "_ equal", + "_e qual", + "_eq ual", + "_equ al", + "Ġ Help", + "ĠH elp", + "ĠHe lp", + "ĠHel p", + "Ġab use", + "4 80", + "48 0", + "1 69", + "16 9", + "-- ;Ċ", + "--; Ċ", + "Ġ extr", + "Ġex tr", + "Ġext r", + "Ġ chemical", + "Ġchem ical", + "ä ¿", + "Ġ orient", + "Ġo rient", + "Ġor ient", + "Ġori ent", + "Ġbre ath", + "Ġbreat h", + "Ġ Space", + "ĠS pace", + "ĠSp ace", + "ĠSpa ce", + "( element", + "(e lement", + "(el ement", + "(elem ent", + "(ele ment", + "w ait", + "wa it", + "D ED", + "DE D", + "ig ma", + "igm a", + "Ġ entr", + "Ġen tr", + "Ġent r", + "Ġ sob", + "Ġs ob", + "Ġso b", + "- name", + "-n ame", + "-na me", + "Ġ affected", + "Ġaff ected", + "Ġaffect ed", + "i ka", + "ik a", + "Ġ coal", + "Ġco al", + "_ work", + "_w ork", + "_wo rk", + "Ġh undreds", + "Ġhundred s", + "Ġpol itics", + "Ġpolit ics", + "Ġpolitic s", + "sub ject", + "su bject", + "subj ect", + "Ġ consumer", + "Ġcon sumer", + "Ġcons umer", + "Ġconsum er", + "Ġconsume r", + "AN GE", + "ANG E", + "Ġre peated", + "Ġrep eated", + "Ġrepe ated", + "Ġrepeat ed", + "S end", + "Se nd", + "Sen d", + "Ġ #[", + "Ġ# [", + "Ġ protocol", + "Ġprot ocol", + "Ġproto col", + "Ġ leads", + "Ġle ads", + "Ġlead s", + "us eum", + "use um", + "E very", + "Ev ery", + "Ever y", + "8 08", + "80 8", + "1 74", + "17 4", + "Im port", + "Imp ort", + "( count", + "(c ount", + "(co unt", + "Ġch allenges", + "Ġchalleng es", + "Ġchallenge s", + "Ġn ovel", + "Ġno vel", + "Ġnov el", + "Ġ depart", + "Ġde part", + "Ġdep art", + "b its", + "bit s", + "bi ts", + ". Current", + ".C urrent", + "Ġ `${", + "Ġ` ${", + "Ġ`$ {", + "o ting", + "ot ing", + "oti ng", + "( \\", + "Ġ creative", + "Ġc reative", + "Ġcre ative", + "Ġcreat ive", + "Ġ buff", + "Ġb uff", + "Ġbu ff", + "Ġbuf f", + "Ġint roduced", + "Ġintrodu ced", + "Ġintroduce d", + "Ġintro duced", + "u sic", + "us ic", + "usi c", + "mod ules", + "module s", + "A re", + "Ar e", + "- doc", + "-d oc", + "-do c", + "l anguage", + "_ cache", + "_c ache", + "_ca che", + "Ġ tod", + "Ġt od", + "Ġto d", + "? > < /", + "om ething", + "ome thing", + "Ġh un", + "Ġhu n", + "å º", + "a ters", + "at ers", + "ate rs", + "ater s", + "In tent", + "Int ent", + "Ġ implemented", + "Ġim plemented", + "Ġimplement ed", + "Ġ Case", + "ĠC ase", + "ĠCas e", + "ĠCa se", + "Ch ildren", + "Child ren", + "Ġ notification", + "Ġnot ification", + "Render er", + "W rapper", + "Wrap per", + "Wr apper", + "Object s", + "Obj ects", + "t l", + ". Contains", + ".Cont ains", + ".Con tains", + "Pl ugin", + "Plug in", + ". row", + ".r ow", + ".ro w", + "Ġ forg", + "Ġf org", + "Ġfor g", + "Ġfo rg", + "Ġ permit", + "Ġper mit", + "Ġperm it", + "Ġ targets", + "Ġtarget s", + "Ġtar gets", + "Ġtarg ets", + "Ġ IF", + "ĠI F", + "Ġ tip", + "Ġt ip", + "Ġti p", + "s ex", + "se x", + "Ġ supports", + "Ġsup ports", + "Ġsupport s", + "Ġsupp orts", + "Ġ fold", + "Ġf old", + "Ġfol d", + "Ġfo ld", + "ph oto", + "phot o", + "} ,čĊ", + "}, čĊ", + "Ġ google", + "Ġg oogle", + "Ġgo ogle", + "Ġgoog le", + "Ġgoo gle", + "$ ('#", + "$( '#", + "$(' #", + "Ġ sharing", + "Ġsh aring", + "Ġsha ring", + "Ġshar ing", + "Ġ goods", + "Ġg oods", + "Ġgo ods", + "Ġgood s", + "Ġgoo ds", + "v s", + "Ġ Dan", + "ĠD an", + "ĠDa n", + "R ate", + "Ra te", + "Ġ Martin", + "ĠM artin", + "ĠMar tin", + "ĠMart in", + "Ġm anner", + "Ġman ner", + "Ġmann er", + "l ie", + "li e", + ". The", + ".T he", + ".Th e", + "In ternal", + "Int ernal", + "Inter nal", + "Intern al", + "ĠCON TR", + "ĠCONT R", + "M ock", + "Mo ck", + "R IGHT", + "Ġ '{", + "Ġ' {", + "Ġ controls", + "Ġcontrol s", + "Ġcontr ols", + "Ġcontro ls", + "M at", + "Ma t", + "Ġ mand", + "Ġm and", + "Ġman d", + "Ġma nd", + "Ġ extended", + "Ġext ended", + "Ġextend ed", + "O k", + "Ġ embed", + "Ġem bed", + "Ġemb ed", + "Ġ planet", + "Ġplan et", + "Ġplane t", + "Ġpla net", + "Ġ Non", + "ĠN on", + "ĠNo n", + "- ch", + "-c h", + ") \",", + ")\" ,", + "e par", + "ep ar", + "Ġbel ieved", + "Ġbelie ved", + "Ġbelieve d", + "Ġ Environment", + "ĠEn vironment", + "Ġ Friend", + "ĠF riend", + "ĠFri end", + "- res", + "-r es", + "-re s", + "Ġ handling", + "Ġhand ling", + "Ġhan dling", + "n ic", + "ni c", + "- level", + "-le vel", + "s cri", + "sc ri", + "scr i", + "X ml", + "B E", + "u ngen", + "un gen", + "ung en", + "unge n", + "Ġ alter", + "Ġal ter", + "Ġalt er", + "Ġalte r", + "[ idx", + "[i dx", + "[id x", + "P op", + "Po p", + "c am", + "ca m", + "Ġ (((", + "Ġ( ((", + "Ġ(( (", + "Ġ shipping", + "Ġsh ipping", + "Ġship ping", + "Ġ battery", + "Ġb attery", + "Ġbatter y", + "Ġbatt ery", + "Ġbat tery", + "iddle ware", + "M C", + "Ġ impl", + "Ġi mpl", + "Ġim pl", + "Ġimp l", + "ot ation", + "ota tion", + "Ġ Lab", + "ĠL ab", + "ĠLa b", + "< form", + " {{", + ">{ {", + "Ġ Resource", + "ĠRe source", + "ĠRes ource", + "Ġ Standard", + "ĠSt andard", + "ĠStand ard", + "Ġ Prem", + "ĠP rem", + "ĠPr em", + "ĠPre m", + "up dated", + "update d", + "upd ated", + "iv alent", + "ival ent", + "Ġ assets", + "Ġas sets", + "Ġass ets", + "Ġasset s", + "_ temp", + "_t emp", + "_tem p", + "_te mp", + "Ġinter ests", + "Ġinterest s", + "Ġinteres ts", + "Ġ hardware", + "Ġh ardware", + "Ġhard ware", + "Ġ Rom", + "ĠR om", + "ĠRo m", + "Ġ Share", + "ĠS hare", + "ĠSh are", + "ĠSha re", + "ĠShar e", + "Ġ ''Ċ", + "Ġ' 'Ċ", + "Ġ'' Ċ", + "Ġ *,", + "Ġ* ,", + "Ġ Take", + "ĠT ake", + "ĠTa ke", + "ĠTak e", + "Ġ Images", + "ĠIm ages", + "ĠImage s", + "ĠImag es", + "_ CHECK", + "_C HECK", + "( typeof", + "(type of", + "(typ eof", + "Ġ Jun", + "ĠJ un", + "ĠJu n", + "\\< ^", + "Ġ liqu", + "Ġl iqu", + "Ġli qu", + "Ġw orst", + "Ġwor st", + "Ġwo rst", + "Ġwors t", + "ymb ols", + "ymbol s", + "ĉ ĉĉĠĠĠ", + "ĉĉ ĉĠĠĠ", + "ĉĉĉ ĠĠĠ", + "ĉĉĉĠ ĠĠ", + "ĉĉĉĠĠ Ġ", + "Ġ drivers", + "Ġdr ivers", + "Ġdriver s", + "Ġdrive rs", + "Ġdriv ers", + "Ġdri vers", + "Ġ Document", + "ĠD ocument", + "ĠDoc ument", + "e no", + "en o", + "Ġ Technology", + "ĠTechn ology", + "Ġ approved", + "Ġap proved", + "Ġappro ved", + "Ġapprove d", + "u mps", + "um ps", + "ump s", + "Ġ snow", + "Ġs now", + "Ġsn ow", + "Ġsno w", + "form ance", + "forma nce", + "forman ce", + "_ ASSERT", + "_A SSERT", + "_ASS ERT", + "u its", + "ui ts", + "uit s", + "2 07", + "20 7", + "Ù Ĩ", + "Ġd ifferences", + "Ġdif ferences", + "Ġdiffer ences", + "Ġdifference s", + ". Visible", + ".V isible", + "ĉ ĉĉčĊ", + "ĉĉ ĉčĊ", + "ĉĉĉ čĊ", + "Ġ Ps", + "ĠP s", + "_ fetch", + "_f etch", + "Ġ todo", + "Ġt odo", + "Ġto do", + "Ġtod o", + ". ',Ċ", + ".' ,Ċ", + ".', Ċ", + "Ġ sel", + "Ġs el", + "Ġse l", + "ur ers", + "ure rs", + "urer s", + "in valid", + "Ġ tweet", + "Ġt weet", + "Ġtwe et", + "Ġtwee t", + "V EL", + "VE L", + "Ġresearch ers", + "Ġresearcher s", + "Ġ sprintf", + "Ġs printf", + "Ġsprint f", + "Ġ RO", + "ĠR O", + "Ġ pel", + "Ġp el", + "Ġpe l", + ". Trans", + ".T rans", + ".Tr ans", + "Ġ illegal", + "Ġil legal", + "Ġill egal", + "Ġilleg al", + "d ialog", + "di alog", + "dia log", + "sm arty", + "smart y", + "l g", + "_ MIN", + "_M IN", + "_MI N", + "Ġ hero", + "Ġh ero", + "Ġhe ro", + "Ġher o", + "f inal", + "fin al", + "fi nal", + "Ġ pp", + "Ġp p", + ". Le", + ".L e", + "Ġ ci", + "Ġc i", + "ĉ RT", + "ĉR T", + "Ġs uggested", + "Ġsuggest ed", + "p df", + "pd f", + "a ching", + "ach ing", + "achi ng", + "Ġ Ro", + "ĠR o", + "Ġ Properties", + "ĠP roperties", + "ĠProp erties", + "ĠProper ties", + "Ġ Si", + "ĠS i", + "Ġbu ying", + "Ġbuy ing", + "Ġ mu", + "Ġm u", + "Ġ lands", + "Ġl ands", + "Ġla nds", + "Ġland s", + "Ġlan ds", + "if iers", + "ifier s", + "ifi ers", + "ifie rs", + "Ġ FILE", + "ĠF ILE", + "ĠFI LE", + "ĠFIL E", + "RO UP", + "Ġ holder", + "Ġh older", + "Ġhold er", + "Ġho lder", + "Ġhol der", + "Ġ Son", + "ĠS on", + "ĠSo n", + "Ġsym pt", + "Ġsymp t", + ". route", + ".r oute", + ".ro ute", + ") ?", + "Ġ argc", + "Ġar gc", + "Ġarg c", + "Ġ fort", + "Ġf ort", + "Ġfor t", + "Ġfo rt", + "Ġcas ino", + "Ġcasi no", + "_ category", + "_c ategory", + "Ġ forum", + "Ġf orum", + "Ġfor um", + "Ġfo rum", + "2 15", + "21 5", + "p refix", + "pre fix", + "pref ix", + "ap ture", + "apt ure", + "T ube", + "Tu be", + "e ms", + "em s", + "im ize", + "imi ze", + "imiz e", + "Ġn ue", + "Ġnu e", + "a us", + "au s", + "c ourse", + "co urse", + "cour se", + "A TOR", + "AT OR", + "ATO R", + "( )),", + "() ),", + "()) ,", + "Ad vertis", + "IN GS", + "ING S", + "Ġac know", + "Ġack now", + "ĠK orea", + "ĠKore a", + "ĠKo rea", + "ĠKor ea", + "p ling", + "pl ing", + "Ġ worker", + "Ġwork er", + "Ġwor ker", + "PL IED", + "h al", + "ha l", + "Ġ Richard", + "ĠRich ard", + "ĠRic hard", + "E lements", + "Element s", + "El ements", + "Elem ents", + "Ele ments", + "ĉ ĉĉĠ", + "ĉĉ ĉĠ", + "ĉĉĉ Ġ", + "s tar", + "st ar", + "sta r", + "Ġ relationships", + "Ġrelations hips", + "Ġrelationship s", + "Ġrelation ships", + "Ġ cheap", + "Ġc heap", + "Ġche ap", + "A CH", + "AC H", + "Ġ XML", + "ĠX ML", + "ĠXM L", + ", &", + "Ġ Louis", + "ĠL ouis", + "ĠLo uis", + "ĠLou is", + "Ġ ride", + "Ġr ide", + "Ġrid e", + "Ġri de", + "_ FAIL", + "_F AIL", + "_FA IL", + "Ġ chunk", + "Ġch unk", + "Ġchu nk", + "[ s", + "_ OUT", + "_O UT", + "Ġ chosen", + "Ġch osen", + "Ġcho sen", + "Ġchose n", + "_ [", + "/ (", + "Ġ Jeff", + "ĠJ eff", + "ĠJe ff", + "_ sl", + "_s l", + "p riv", + "pr iv", + "pri v", + "Ġ Canadian", + "ĠCan adian", + "Ġ unable", + "Ġu nable", + "Ġun able", + "Ġuna ble", + "Ġunab le", + "_ FLAG", + "_F LAG", + "_FL AG", + "Ġ nos", + "Ġn os", + "Ġno s", + "h igh", + "hi gh", + "Ġ lift", + "Ġl ift", + "Ġli ft", + "Ġlif t", + "f un", + "fu n", + "( ){", + "() {", + "el ly", + "ell y", + "ycler View", + "_ as", + "_a s", + "_ LIST", + "_L IST", + "Ġ radi", + "Ġr adi", + "Ġrad i", + "Ġra di", + ". getValue", + ".get Value", + "3 04", + "30 4", + "ĠAnge les", + "ĠAngel es", + "Ġ Span", + "ĠS pan", + "ĠSp an", + "ĠSpa n", + "_ instance", + "_in stance", + "_inst ance", + "i tors", + "it ors", + "itor s", + "ito rs", + "2 08", + "20 8", + "Ġ migration", + "Ġm igration", + "Ġmigr ation", + "Ġmig ration", + "A K", + "O h", + " ®", + ". selected", + ".se lected", + ".select ed", + ".sel ected", + "Ġ GT", + "ĠG T", + "Ġ advance", + "Ġadv ance", + "Ġ Style", + "ĠSt yle", + "ĠSty le", + ". DataGridView", + ".Data GridView", + "e ction", + "ect ion", + "ec tion", + "Ñ İ", + "p io", + "pi o", + "r og", + "ro g", + "Ġ shopping", + "Ġsh opping", + "Ġshop ping", + "Ġsho pping", + "Ġ Rect", + "ĠR ect", + "ĠRe ct", + "ĠRec t", + "I lluminate", + "O U", + "ĉ array", + "ĉa rray", + "ĉarr ay", + "ĉar ray", + "Ġsub stantial", + "Ġsubstant ial", + "Ġp regn", + "Ġpre gn", + "Ġpreg n", + "Ġprom ote", + "Ġpromot e", + "Ġpromo te", + "I EW", + "IE W", + ". Layout", + ".L ayout", + "Ġsign s", + "Ġsig ns", + "/ .", + "Ġ letters", + "Ġlet ters", + "Ġletter s", + "Ġlett ers", + "B oard", + "Bo ard", + "c trl", + "ct rl", + "ctr l", + "\" \\", + "Ġ Jones", + "ĠJ ones", + "ĠJo nes", + "ĠJon es", + "Ġ vertex", + "Ġver tex", + "Ġvert ex", + "Ġverte x", + "Ġ ja", + "Ġj a", + "Ġaff ili", + "Ġ wealth", + "Ġwe alth", + "ĉ default", + "ĉd efault", + "ĉdef ault", + "ĉde fault", + "Ġsign ificantly", + "Ġsignific antly", + "Ġsignificant ly", + "Ġ ec", + "Ġe c", + "Ġ xs", + "Ġx s", + "act ual", + "ac tual", + ". per", + ".p er", + ".pe r", + "_ step", + "_s tep", + "_st ep", + "_ste p", + "an vas", + "m ac", + "ma c", + "Ġtrans l", + "Ġtran sl", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "It erator", + "Iter ator", + "Ġ och", + "Ġo ch", + "Ġoc h", + "ag nostic", + "agnost ic", + "Ġ During", + "ĠD uring", + "ĠDu ring", + "ĠDur ing", + "Ġ DEFAULT", + "ĠD EFAULT", + "ĠDE FAULT", + "Ġt ill", + "Ġti ll", + "Ġtil l", + "Ġ signature", + "Ġsign ature", + "Ġsig nature", + "Ġ bird", + "Ġb ird", + "Ġbi rd", + "Ġbir d", + "Ġ Ol", + "ĠO l", + "3 10", + "31 0", + "Ġ Ir", + "ĠI r", + "H S", + "av atar", + "ava tar", + "ESS AGE", + "Ġe lev", + "Ġel ev", + "Ġele v", + "Ġ mt", + "Ġm t", + "Ġ Nav", + "ĠN av", + "ĠNa v", + "Ġrel ax", + "Ġ plate", + "Ġp late", + "Ġpl ate", + "Ġpla te", + "Ġplat e", + "I TEM", + "IT EM", + "ITE M", + "( date", + "(d ate", + "(dat e", + "(da te", + ". not", + ".n ot", + ".no t", + "Ġ grade", + "Ġg rade", + "Ġgr ade", + "Ġgrad e", + "Ġgra de", + "Ġ }),Ċ", + "Ġ} ),Ċ", + "Ġ}) ,Ċ", + "Ġ}), Ċ", + "? \"ĊĊ", + "?\" ĊĊ", + "?\"Ċ Ċ", + "i ences", + "ie nces", + "ience s", + "ien ces", + "H igh", + "Hi gh", + "Ġ DIS", + "ĠD IS", + "ĠDI S", + "2 31", + "23 1", + "dis abled", + "disable d", + "Q UI", + "QU I", + "Ġ noise", + "Ġn oise", + "Ġno ise", + "Ġnoi se", + "a ux", + "au x", + "Ġ UP", + "ĠU P", + "8 88", + "88 8", + "o sa", + "os a", + "Ġv oc", + "Ġvo c", + "Ġ ))", + "Ġ) )", + "o com", + "oc om", + "oco m", + "_ OFF", + "_O FF", + "_OF F", + "Ġ Db", + "ĠD b", + "L ock", + "Lo ck", + "Loc k", + ".e clipse", + ", d", + "Ġ Draw", + "ĠD raw", + "ĠDr aw", + "ĠDra w", + "Ġ \"(", + "Ġ\" (", + "Ġ visited", + "Ġvis ited", + "Ġvisit ed", + "Ġvisite d", + "Ġ âĪ", + "Ġâ Ī", + "Ġs ucceed", + "Ġsuc ceed", + "Ġsucc eed", + "Ġim possible", + "Ġimp ossible", + "Ġimposs ible", + "a ire", + "air e", + "ai re", + "Ġ Turn", + "ĠT urn", + "ĠTur n", + "ĠTu rn", + "Ġ dish", + "Ġd ish", + "Ġdis h", + "Ġdi sh", + "F G", + "Ġ sensor", + "Ġs ensor", + "Ġsens or", + "A NN", + "AN N", + "a ba", + "ab a", + "Ġs urg", + "Ġsu rg", + "Ġsur g", + "] );čĊ", + "]) ;čĊ", + "]); čĊ", + "Ġ fp", + "Ġf p", + "_ an", + "_a n", + "- J", + "- G", + "Ġ Job", + "ĠJ ob", + "ĠJo b", + "Con vert", + "Conv ert", + "Ġ KEY", + "ĠK EY", + "ĠKE Y", + "Ġ authors", + "Ġauthor s", + "Ġauth ors", + "_ server", + "_s erver", + "_serv er", + "_ser ver", + "\\ r", + "Ġ -*-", + "Ġ- *-", + "Ġ-* -", + "f lex", + "fl ex", + "Ġ soc", + "Ġs oc", + "Ġso c", + "R et", + "Re t", + "Ġ salt", + "Ġs alt", + "Ġsa lt", + "Ġsal t", + "Ġ â̦ĊĊ", + "Ġâ̦ ĊĊ", + "Ġâ̦Ċ Ċ", + "Ġ Clear", + "ĠC lear", + "ĠCl ear", + "ĠCle ar", + "( page", + "(p age", + "(pa ge", + "- danger", + "-d anger", + "-da nger", + "Ġ rooms", + "Ġro oms", + "Ġroom s", + "con v", + "co nv", + "# {", + ". op", + ".o p", + "Ġ Area", + "ĠA rea", + "ĠAr ea", + "ĠAre a", + "_ SC", + "_S C", + "h en", + "he n", + "Ġbeg ins", + "Ġbegin s", + "- y", + "Ġexc ited", + "Ġexcit ed", + "Ġ ignored", + "Ġign ored", + "Ġignore d", + "Ġignor ed", + "Ġ bonus", + "Ġb onus", + "Ġbon us", + "st udent", + "stu dent", + "stud ent", + "Ġ Member", + "ĠM ember", + "ĠMem ber", + "Ġrel atively", + "Ġrelative ly", + "Ġrelativ ely", + "Ġrelat ively", + "Ġ Low", + "ĠL ow", + "ĠLo w", + "Ġ Produ", + "ĠP rodu", + "ĠPro du", + "ĠPr odu", + "ĠProd u", + "at eway", + "ate way", + "pos ure", + "po sure", + "Ġth ick", + "Ġthi ck", + "an iel", + "ani el", + "anie l", + "( view", + "(v iew", + "ĠC rush", + "ĠCr ush", + "ĠCru sh", + "ĠCrus h", + "Ext ension", + "I l", + "e ed", + "ee d", + "L OC", + "LO C", + ". im", + ".i m", + ". Items", + ".I tems", + ".Item s", + ".It ems", + "Ġconf lict", + "Ġconflic t", + "Ġconfl ict", + ". prevent", + ".pre vent", + ".pr event", + ".prev ent", + "2 52", + "25 2", + "Ġon Create", + "u v", + "i ser", + "is er", + "ise r", + "Ġ wave", + "Ġw ave", + "Ġwa ve", + "Ġwav e", + "M ar", + "Ma r", + "Ġ Community", + "ĠComm unity", + "ĠCommun ity", + "i che", + "ic he", + "ich e", + "Ġ Nothing", + "ĠNo thing", + "[ m", + "Ġ Lee", + "ĠL ee", + "ĠLe e", + "ri ends", + "riend s", + "rie nds", + "rien ds", + "2 32", + "23 2", + "è re", + "! !!", + "!! !", + "a nz", + "an z", + ". result", + ".res ult", + "Ġ SK", + "ĠS K", + "_ PARAM", + "_P ARAM", + "_PA RAM", + "_PAR AM", + "Ġdem ocr", + "Ġdemo cr", + "Back Color", + ". exists", + ".ex ists", + ".exist s", + "\" It", + "\"I t", + "( options", + "(o ptions", + "(opt ions", + "(option s", + "r azy", + "ra zy", + "raz y", + "a ser", + "as er", + "ase r", + "\\ Database", + "\\Data base", + "\\D atabase", + "al endar", + "alen dar", + "_ ass", + "_a ss", + "_as s", + "; }Ċ", + ";} Ċ", + "ver tex", + "vert ex", + "verte x", + "ine craft", + "W arning", + "War ning", + "Warn ing", + "ar go", + "arg o", + "Ġ actor", + "Ġa ctor", + "Ġact or", + "Ġac tor", + "Ġ Instead", + "ĠIn stead", + "ĠInst ead", + "Ġ Using", + "ĠU sing", + "ĠUs ing", + "S elf", + "Se lf", + "Sel f", + "@ interface", + "Ġspe aking", + "Ġspeak ing", + "Ġ Paris", + "ĠP aris", + "ĠPar is", + "ĠPa ris", + "Ġ LICENSE", + "ĠL ICENSE", + "ĠLIC ENSE", + ". node", + ".n ode", + ".no de", + "Ġ Food", + "ĠF ood", + "ĠFo od", + "ĠFoo d", + "E IF", + "EI F", + "Ġ Bi", + "ĠB i", + ". Start", + ".St art", + "Ġ IB", + "ĠI B", + "Ġun iversity", + "Ġunivers ity", + "2 54", + "25 4", + "Ġ Header", + "ĠHe ader", + "ĠHead er", + ". product", + ".pro duct", + ".prod uct", + "4 09", + "40 9", + "C opy", + "Co py", + "Cop y", + "e tc", + "et c", + "r ical", + "ri cal", + "ric al", + "rica l", + "Ġ >>>", + "Ġ> >>", + "Ġ>> >", + "b ooks", + "bo oks", + "book s", + "boo ks", + "Ġ algorithm", + "Ġal gorithm", + "Ġ' __", + "Ġ'_ _", + "( javax", + "(j avax", + "(java x", + "Ġnumer ous", + "Ġnumero us", + "S hare", + "Sh are", + "Shar e", + "Sha re", + "H ave", + "Ha ve", + "Ġrec ru", + "Ġ prove", + "Ġp rove", + "Ġpro ve", + "Ġpr ove", + "Ġprov e", + ". substring", + ".sub string", + ".substr ing", + "he alth", + "е л", + "еР»", + "Ġ decimal", + "Ġd ecimal", + "Ġde cimal", + "Ġdec imal", + "Ġ commission", + "Ġcom mission", + "Ġcomm ission", + "s cription", + "script ion", + "scri ption", + "x C", + "Ġ summary", + "Ġsum mary", + "Ġsummar y", + "Ġsumm ary", + "at ted", + "att ed", + "atte d", + "Ġc loser", + "Ġcl oser", + "Ġclose r", + "Ġclos er", + "Ġclo ser", + "f inished", + "fin ished", + "finish ed", + "( )){Ċ", + "() ){Ċ", + "()) {Ċ", + "()){ Ċ", + "Ġ Wood", + "ĠW ood", + "ĠWo od", + "ĠWoo d", + "3 01", + "30 1", + "_ fields", + "_f ields", + "_field s", + "k u", + "_ items", + "_i tems", + "_item s", + "_it ems", + "F lag", + "Fl ag", + "Ġ confidence", + "Ġconf idence", + "Ġ Federal", + "ĠF ederal", + "ĠFeder al", + "ĠFed eral", + "d ux", + "du x", + "Ġ compat", + "Ġcom pat", + "Ġcomp at", + "Ġ vertical", + "Ġver tical", + "Ġvert ical", + "Ð ¹", + "è s", + "; \">Ċ", + ";\" >Ċ", + ";\"> Ċ", + "_ manager", + "_m anager", + "_man ager", + "_manage r", + "( )))Ċ", + "() ))Ċ", + "()) )Ċ", + "())) Ċ", + "I DE", + "ID E", + ": \",", + ":\" ,", + "2 35", + "23 5", + "_ _Ċ", + "__ Ċ", + "Ġ Way", + "ĠW ay", + "ĠWa y", + "2 21", + "22 1", + "Ñ Ī", + "T emp", + "Te mp", + "Tem p", + "Ġ STR", + "ĠS TR", + "ĠST R", + "r itten", + "rit ten", + "ritt en", + "ritte n", + "S ync", + "Sy nc", + "Syn c", + "Ġ AV", + "ĠA V", + "Ġ CEO", + "ĠC EO", + "ĠCE O", + "Ġ Guid", + "ĠG uid", + "ĠGu id", + "ĠGui d", + "Ġenvironment al", + "Ġenviron mental", + "Ġcorrespond ing", + "ĉ console", + "ĉcon sole", + "Ġ justice", + "Ġjust ice", + "Ġju stice", + "Ġ JS", + "ĠJ S", + "Ġl ived", + "Ġli ved", + "Ġlive d", + "Ġliv ed", + "g ar", + "ga r", + "Ġ Graph", + "ĠG raph", + "ĠGr aph", + "ĠGra ph", + "Ġ Stat", + "ĠS tat", + "ĠSt at", + "ĠSta t", + "Ġ iPhone", + "Ġi Phone", + "ĠiP hone", + ". al", + ".a l", + "Ġ HD", + "ĠH D", + "Ġocc ur", + "Ġoc cur", + "Ġ threshold", + "Ġth reshold", + "Ġthresh old", + "5 09", + "50 9", + "Ġ onclick", + "Ġon click", + "Ġonc lick", + "R EG", + "RE G", + ".Graphics Unit", + "M eta", + "Me ta", + "Met a", + "Å ¾", + "Ġ cum", + "Ġc um", + "Ġcu m", + ". gnu", + ".g nu", + "à «", + "Ġobt ained", + "Ġobtain ed", + "Ġcom plaint", + "Ġcompl aint", + "Ġcomplain t", + "Ġ eating", + "Ġe ating", + "Ġeat ing", + "Ġea ting", + "Ġ tar", + "Ġt ar", + "Ġta r", + "_ task", + "_t ask", + "_ta sk", + "Ġ opts", + "Ġo pts", + "Ġop ts", + "Ġopt s", + "2 16", + "21 6", + "( to", + "(t o", + "P ass", + "Pa ss", + "Pas s", + "Ġp lastic", + "Ġpl astic", + "Ġplast ic", + "t ility", + "til ity", + "Ġ Win", + "ĠW in", + "ĠWi n", + ".prevent Default", + "p ile", + "pi le", + "Ġ Gar", + "ĠG ar", + "ĠGa r", + "Ġ quantity", + "Ġqu antity", + "Ġquant ity", + "Ġqua ntity", + "_ last", + "_l ast", + "_la st", + "Ġg reatest", + "Ġgreat est", + "Ġgre atest", + "D ao", + "Da o", + "_ DIS", + "_D IS", + "_DI S", + "Ġ Used", + "ĠU sed", + "ĠUs ed", + "ĠUse d", + "Ġ HP", + "ĠH P", + "r iting", + "ri ting", + "rit ing", + "S ION", + "SI ON", + "b lue", + "bl ue", + "d omain", + "do main", + "dom ain", + "Ġ scores", + "Ġs cores", + "Ġsc ores", + "Ġscore s", + "Ġsco res", + "Ġscor es", + "N ormal", + "Norm al", + "Nor mal", + "_ admin", + "_ad min", + "Ġ ASSERT", + "ĠA SSERT", + "ĠASS ERT", + "T hen", + "The n", + "Th en", + "* **", + "** *", + "d ist", + "dis t", + "di st", + "l on", + "lo n", + "Ġh ate", + "Ġha te", + "Ġhat e", + "s hal", + "sh al", + "sha l", + "Image View", + "d atabase", + "data base", + "dat abase", + "Ġp and", + "Ġpa nd", + "Ġpan d", + "Ġ logic", + "Ġlog ic", + "= false", + "=f alse", + "b g", + "Ġ Configuration", + "ĠConfig uration", + "Ġn ur", + "Ġnu r", + "O G", + "Ġ married", + "Ġmar ried", + ": +", + "Ġd ropped", + "Ġdr opped", + "Ġdrop ped", + "Ġdro pped", + "0 40", + "04 0", + "Ġ registration", + "Ġreg istration", + "Ġregistr ation", + "Ġregist ration", + "о м", + "оР¼", + "ult iple", + "ulti ple", + "ultip le", + "i zers", + "iz ers", + "ize rs", + "izer s", + "s hape", + "sh ape", + "sha pe", + ". copy", + ".c opy", + ".co py", + "Ġw earing", + "Ġwe aring", + "Ġwear ing", + "ĠC ath", + "ĠCa th", + "ĠCat h", + "Ġded icated", + "Ġdedic ated", + "Ġdedicate d", + "Ġ ...Ċ", + "Ġ. ..Ċ", + "Ġ... Ċ", + "Ġ.. .Ċ", + "Ġadv oc", + "Ġ Family", + "ĠF amily", + "ĠFam ily", + "ĠFamil y", + "Ġ statements", + "Ġstate ments", + "Ġstat ements", + "Ġstatement s", + "e matic", + "em atic", + "ema tic", + "emat ic", + "ampions hip", + "ampion ship", + "Ġmot iv", + "Ġmo tiv", + "Ġ Have", + "ĠH ave", + "ĠHa ve", + "ĠHav e", + "Ġb low", + "Ġbl ow", + "Ġblo w", + "J ob", + "Jo b", + "c ert", + "ce rt", + "cer t", + "_ vector", + "_v ector", + "_vec tor", + "_vect or", + "_ve ctor", + "inst all", + "Ġ COPY", + "ĠC OPY", + "ĠCO PY", + "ĠCOP Y", + "em bed", + "emb ed", + "D IR", + "DI R", + "Ġ Spring", + "ĠS pring", + "ĠSp ring", + "ĠSpr ing", + "Ġex hib", + "Ġexh ib", + "2 23", + "22 3", + "c dn", + "cd n", + "Ġ Comment", + "ĠCom ment", + "ĠComm ent", + "Ġ Optional", + "ĠOption al", + "ĠOpt ional", + ". player", + ".p layer", + ".pl ayer", + ".play er", + "Ġ Dark", + "ĠD ark", + "ĠDa rk", + "ĠDar k", + "( pos", + "(p os", + "(po s", + "Ġ Should", + "ĠSh ould", + "ĠSho uld", + "Ġ centre", + "Ġc entre", + "Ġcent re", + "Ġcentr e", + "Ġcen tre", + "Ġ Guard", + "ĠG uard", + "ĠGu ard", + "ĠGuar d", + "ó w", + "Ġtr ouble", + "Ġtro uble", + "Ġtroub le", + "Ġtrou ble", + "E NER", + "EN ER", + "ENE R", + "( unsigned", + "(un signed", + "_ service", + "_s ervice", + "_serv ice", + "_ser vice", + "Ġ ns", + "Ġn s", + "u ling", + "ul ing", + "ulin g", + "uli ng", + "Ġ Mexico", + "ĠMe xico", + "ĠMex ico", + "Ġ NY", + "ĠN Y", + "m ysql", + "my sql", + "mys ql", + "Ġ lic", + "Ġl ic", + "Ġli c", + "å ľ", + "M r", + "- fl", + "-f l", + "Ġ Customer", + "ĠC ustomer", + "ĠCustom er", + "ĠCust omer", + "i di", + "id i", + "Ġ ?>ĊĊ", + "Ġ? >ĊĊ", + "Ġ?> ĊĊ", + "Ġ?>Ċ Ċ", + "r ible", + "ri ble", + "rib le", + "Ġ пÑĢ", + "Ġп ÑĢ", + "Ġ sizes", + "Ġs izes", + "Ġsize s", + "Ġsi zes", + "Ġsiz es", + "_ STRING", + "_ST RING", + "_STR ING", + "valid ation", + "Ġ Jon", + "ĠJ on", + "ĠJo n", + "( Http", + "(H ttp", + "add Class", + "N odes", + "Node s", + "No des", + "Ġ fragment", + "Ġf ragment", + "Ġfr agment", + "Ġfra gment", + "Ġfrag ment", + "Ġs poke", + "Ġsp oke", + "Ġspo ke", + "Ġw aste", + "Ġwas te", + "Ġwa ste", + "Ġwast e", + "J oin", + "Jo in", + "Ġ illustr", + "Ġill ustr", + "Ġillust r", + "e li", + "el i", + "c ient", + "ci ent", + "cie nt", + "Ġ aid", + "Ġa id", + "Ġai d", + "Ġpro sec", + "Ġpros ec", + "Ġprose c", + "' ){Ċ", + "') {Ċ", + "'){ Ċ", + "Ġp assing", + "Ġpass ing", + "Ġpas sing", + "Ġ faces", + "Ġf aces", + "Ġfa ces", + "Ġfac es", + "Ġface s", + "S hape", + "Sh ape", + "Sha pe", + "_ Z", + "i ti", + "it i", + "Ġ alle", + "Ġa lle", + "Ġal le", + "Ġall e", + "Ġ robot", + "Ġr obot", + "Ġro bot", + "Ġrob ot", + "Ġ ĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠ ĠĊ", + "Ġ Spe", + "ĠS pe", + "ĠSp e", + "Ġre ceiving", + "Ġrece iving", + "Ġ Details", + "ĠD etails", + "ĠDe tails", + "ĠDet ails", + "ĠDetail s", + "Ġ \")", + "Ġ\" )", + "m g", + "_ REF", + "_RE F", + "_R EF", + "Ġ comparison", + "Ġcom parison", + "Ġcompar ison", + "* ,", + "Ġ Found", + "ĠF ound", + "ĠFo und", + "ĠFou nd", + "_ session", + "_s ession", + "_sess ion", + "( U", + "/ F", + "Ġ xxx", + "Ġx xx", + "Ġxx x", + "N etwork", + "Net work", + "d ers", + "de rs", + "der s", + "Ġ capture", + "Ġc apture", + "Ġcap ture", + "Ġcapt ure", + "Ġc orre", + "Ġcor re", + "Ġcorr e", + "Ġ Ltd", + "ĠL td", + "ĠLt d", + "Ġ Adv", + "ĠA dv", + "ĠAd v", + "[ @", + "Ġ clip", + "Ġc lip", + "Ġcl ip", + "Ġcli p", + "M ill", + "Mi ll", + "Mil l", + "Ġ Profile", + "ĠPro file", + "ĠPr ofile", + "ĠProf ile", + "Ġ endif", + "Ġen dif", + "Ġend if", + "Ġob lig", + "Ġobl ig", + "de scribe", + "des cribe", + "descr ibe", + ". element", + ".e lement", + ".el ement", + ".elem ent", + "riter ion", + "L D", + "e red", + "er ed", + "ere d", + "Ġf avour", + "Ġfav our", + "s core", + "sc ore", + "Ġ Filter", + "ĠF ilter", + "ĠFil ter", + "at tributes", + "attribute s", + "attrib utes", + "Ġ checks", + "Ġcheck s", + "Ġche cks", + "In flater", + "Inf later", + "Ġ Plus", + "ĠP lus", + "ĠPl us", + "Ġ scientific", + "Ġscient ific", + "Ġ privacy", + "Ġpriv acy", + "H ead", + "He ad", + "Ġ feat", + "Ġf eat", + "Ġfe at", + "Ġ degrees", + "Ġdeg rees", + "Ġdegree s", + "Ġ Pale", + "ĠP ale", + "ĠPal e", + "ĠPa le", + "; \">", + ";\" >", + "Ġ films", + "Ġfil ms", + "Ġfilm s", + "Ġ Audio", + "ĠA udio", + "ĠAud io", + "ĠAu dio", + "ĠAudi o", + "Ġ Tag", + "ĠT ag", + "ĠTa g", + "Ġ Energy", + "ĠE nergy", + "ĠEn ergy", + "ĠEnerg y", + "i tar", + "it ar", + "ita r", + "par ator", + "para tor", + "Ġf ellow", + "Ġfell ow", + "Ġfel low", + "Ġ evt", + "Ġe vt", + "Ġev t", + "Ġ Tri", + "ĠT ri", + "ĠTr i", + "ĠD AM", + "ĠDA M", + "c loud", + "cl oud", + "clo ud", + "Ġ Password", + "ĠP assword", + "ĠPass word", + "ĠPas sword", + "Ġ Democrats", + "ĠDem ocrats", + "ĠDemocr ats", + "ĠDemocrat s", + "ĠA cad", + "ĠAc ad", + "$ lang", + "$l ang", + "Ġ reb", + "Ġre b", + "Ġr eb", + "( ))ĊĊ", + "() )ĊĊ", + "()) ĊĊ", + "())Ċ Ċ", + "н Ñĭ", + "Ġ Bur", + "ĠB ur", + "ĠBu r", + "read cr", + "Ġ hex", + "Ġh ex", + "Ġhe x", + "2 09", + "20 9", + "Con sole", + "Cons ole", + "c tl", + "ct l", + "ou sel", + "ous el", + "ouse l", + "Ġ William", + "ĠWill iam", + "ĠWilli am", + "Ġ az", + "Ġa z", + "_ PORT", + "_P ORT", + "_PO RT", + "Ġpr actices", + "Ġpract ices", + "Ġpractice s", + "Ġany where", + "Ġ Position", + "ĠP osition", + "ĠPos ition", + "Ġ ->Ċ", + "Ġ- >Ċ", + "Ġ-> Ċ", + "i ams", + "ia ms", + "iam s", + ". username", + ".user name", + "place holder", + "Ġ oder", + "Ġo der", + "Ġod er", + "Ġode r", + "Ġ Secretary", + "ĠSecret ary", + "Ġ iT", + "Ġi T", + "m ond", + "mon d", + "mo nd", + "e vents", + "event s", + "ev ents", + "even ts", + "eve nts", + "? âĢĿ", + ". Sub", + ".S ub", + "Ġ attached", + "Ġatt ached", + "Ġattach ed", + "Ġn ão", + "Ġ estate", + "Ġe state", + "Ġest ate", + "Ġesta te", + "3 65", + "36 5", + ". action", + ".a ction", + ".ac tion", + ".act ion", + "Ġ figures", + "Ġfig ures", + "Ġfigure s", + "Ġfigur es", + "Ġ });čĊ", + "Ġ} );čĊ", + "Ġ}) ;čĊ", + "Ġ}); čĊ", + "Ġsub scri", + "Ġsubs cri", + ". tag", + ".t ag", + ".ta g", + "n am", + "na m", + ". plot", + ".p lot", + ".pl ot", + "n oon", + "no on", + "li ament", + "lia ment", + "Char acter", + ". tab", + ".t ab", + ".ta b", + "Ġ winter", + "Ġw inter", + "Ġwin ter", + "Ġ Variable", + "ĠVar iable", + "ĠVari able", + "Ġ trees", + "Ġt rees", + "Ġtr ees", + "Ġtre es", + "Ġtree s", + "Ġp roud", + "Ġpro ud", + "Ġpr oud", + "( V", + "_ load", + "_l oad", + "_lo ad", + "Ġh ier", + "Ġhi er", + "ĠE con", + "ĠEc on", + "ĠEco n", + "Ġ fd", + "Ġf d", + "Ġvict ims", + "Ġvictim s", + "R est", + "Re st", + "Res t", + "i ana", + "ia na", + "ian a", + "Ġ fake", + "Ġf ake", + "Ġfa ke", + "Ġfak e", + ".Print ln", + "Ġ strlen", + "Ġst rlen", + "Ġstr len", + "Ġ sad", + "Ġs ad", + "Ġsa d", + "Ġ ble", + "Ġb le", + "Ġbl e", + "P rot", + "Pro t", + "Pr ot", + "Ġ buttons", + "Ġbut tons", + "Ġbutton s", + "Ġbutt ons", + "Ġbutto ns", + "Ġte levision", + "Ġtele vision", + "Ġtelevis ion", + "Ġtelev ision", + "Ġ logo", + "Ġl ogo", + "Ġlo go", + "Ġlog o", + "ext ension", + "ĉ j", + "s tein", + "st ein", + "ste in", + "ac iones", + "acion es", + "aci ones", + "acio nes", + "Ġ \"\"\"ĊĊ", + "Ġ\"\" \"ĊĊ", + "Ġ\"\"\"Ċ Ċ", + "Ġ\"\"\" ĊĊ", + "Ġ simp", + "Ġs imp", + "Ġsim p", + "Ġsi mp", + "Ġrecord ed", + "Ġbr ings", + "Ġbring s", + "Ġ principal", + "Ġpr incipal", + "Ġprincip al", + "Ġf ees", + "Ġfe es", + "Ġfee s", + "( source", + "(s ource", + "k dir", + "kd ir", + "Ġ utils", + "Ġutil s", + "Ġut ils", + "Ġcorrect ly", + "f il", + "fi l", + "Ġ wel", + "Ġw el", + "Ġwe l", + "P air", + "Pa ir", + "- button", + "-b utton", + "-but ton", + "s cale", + "sc ale", + "scal e", + "ver ify", + "[ c", + "Ġ ---", + "Ġ- --", + "Ġ-- -", + "Ġ escape", + "Ġe scape", + "Ġes cape", + "Ġesc ape", + "Ġescap e", + "i kes", + "ik es", + "ike s", + "Lower Case", + "ic ian", + "ici an", + "icia n", + "Ġ chapter", + "Ġch apter", + "Ġcha pter", + "Ġchap ter", + "Ġ TYPE", + "ĠT YPE", + "ĠTY PE", + "Ġ shadow", + "Ġsh adow", + "Ġ awesome", + "Ġaw esome", + "Ġawe some", + "W E", + "e lif", + "el if", + "eli f", + "Ġ lambda", + "Ġl ambda", + "Ġlamb da", + "Ġ distinct", + "Ġdist inct", + "Ġ bare", + "Ġb are", + "Ġbar e", + "Ġba re", + "- off", + "-of f", + "-o ff", + "Ġ colour", + "Ġcol our", + ". appendChild", + ".append Child", + "o lec", + "ol ec", + "ole c", + "a ga", + "ag a", + ". fill", + ".f ill", + ".fi ll", + ".fil l", + "ĉ super", + "ĉs uper", + "Ġ adj", + "Ġa dj", + "Ġad j", + "( position", + "(p osition", + "(pos ition", + ". getItem", + ".get Item", + "2 42", + "24 2", + "S hort", + "Sh ort", + "Ġtot ally", + "Ġtotal ly", + "V D", + "Ġ Tre", + "ĠT re", + "ĠTr e", + "_ ep", + "_e p", + "v ements", + "ve ments", + "vement s", + "vem ents", + "Ġ Solution", + "ĠS olution", + "ĠSol ution", + "Ġfund ament", + "F ollow", + "Ġ facility", + "Ġfac ility", + "Ġfacilit y", + "Ġfacil ity", + "Ġhapp ening", + "Ġhappen ing", + "O F", + ". textBox", + ".text Box", + "S pan", + "Sp an", + "Ġ «", + "Ġ «", + "i den", + "id en", + "ide n", + "Ġex ceed", + "Ġexc eed", + "Ġexce ed", + "( parent", + "(p arent", + "(par ent", + "(paren t", + "(pa rent", + "Ġ cp", + "Ġc p", + "ç »", + "Ġh asn", + "Ġhas n", + "Ġha sn", + "Ġ pri", + "Ġp ri", + "Ġpr i", + "Ġcon sequ", + "Ġcons equ", + "Ġconse qu", + "n en", + "ne n", + "ĠIN TO", + "ĠINT O", + "I gnore", + "Ign ore", + "Ġ Future", + "ĠF uture", + "ĠFu ture", + "ĠFut ure", + "Ġ carbon", + "Ġc arbon", + "Ġcar bon", + "Ġcarb on", + "Ġ Steel", + "ĠSt eel", + "ĠSte el", + "f mt", + "fm t", + "o kie", + "ok ie", + "oki e", + "Ġ spl", + "Ġs pl", + "Ġsp l", + "( title", + "(t itle", + "(ti tle", + "- info", + "-in fo", + "-inf o", + "Ġde als", + "Ġdeal s", + "Ġ fixture", + "Ġf ixture", + "Ġfix ture", + "e a", + "D iv", + "Di v", + "Ġ tested", + "Ġt ested", + "Ġte sted", + "Ġtest ed", + "Ġtes ted", + "Ġteste d", + "_ return", + "_re turn", + "_r eturn", + "_ret urn", + ") ĊĊĊĊ", + ")Ċ ĊĊĊ", + ")ĊĊ ĊĊ", + ")ĊĊĊ Ċ", + "up ported", + "upport ed", + "upp orted", + "Ġ Cook", + "ĠC ook", + "ĠCo ok", + "Ġp aying", + "Ġpay ing", + "Ġpa ying", + "Ġ Ill", + "ĠI ll", + "ĠIl l", + "Ġarr ested", + "Ġarrest ed", + "Ġ Prime", + "ĠPr ime", + "ĠPri me", + "ĠPrim e", + "_ callback", + "_c allback", + "_call back", + "> ,Ċ", + ">, Ċ", + "d river", + "dr iver", + "drive r", + "O nce", + "On ce", + "a bb", + "ab b", + "_ bytes", + "_by tes", + "_byte s", + "Ġ Sets", + "ĠS ets", + "ĠSe ts", + "ĠSet s", + "( Object", + "(O bject", + "Ġ cc", + "Ġc c", + "Ġ shell", + "Ġs hell", + "Ġsh ell", + "Ġshe ll", + "Ġshel l", + "a lo", + "al o", + ") ;//", + "); //", + "( log", + "(l og", + "(lo g", + "2 64", + "26 4", + "c tors", + "ct ors", + "ctor s", + ") ", + "2 18", + "21 8", + "Ġ $(\".", + "Ġ$ (\".", + "Ġ$( \".", + "Ġ$(\" .", + ". pos", + ".p os", + ".po s", + "Ġ boys", + "Ġbo ys", + "Ġboy s", + "Ġwed ding", + "Ġ agents", + "Ġag ents", + "Ġage nts", + "Ġagent s", + "= \"_", + "=\" _", + "Ġ Army", + "ĠAr my", + "ĠArm y", + "Ġ hint", + "Ġh int", + "Ġhi nt", + "Ġhin t", + "v ision", + "vis ion", + "Ġ tech", + "Ġt ech", + "Ġte ch", + "Ġtec h", + "Ġ Connect", + "ĠCon nect", + "ĠConn ect", + "Ġ legend", + "Ġl egend", + "Ġle gend", + "Ġleg end", + "Ġ Bet", + "ĠB et", + "ĠBe t", + ". Base", + ".B ase", + "Sub ject", + "Su bject", + "Ġ lit", + "Ġl it", + "Ġli t", + "Re move", + "Rem ove", + "Ġ \":", + "Ġ\" :", + "Ġ Final", + "ĠF inal", + "ĠFin al", + "ĠFi nal", + "pear ance", + "ĠiT unes", + "Ġ participants", + "Ġpart icipants", + "Ġparticip ants", + "Ġparticipant s", + "Ġ Python", + "ĠP ython", + "ĠPy thon", + "Ġ busy", + "Ġbu sy", + "Ġbus y", + "i el", + "ie l", + "vert ices", + "Ġtemplate Url", + "Ġ Close", + "ĠC lose", + "ĠCl ose", + "ĠClo se", + "I mg", + "Im g", + "ĠCorpor ation", + "ĠCorp oration", + "t imestamp", + "time stamp", + "Ġ extend", + "Ġext end", + "Ġwe bsites", + "Ġweb sites", + "Ġwebsite s", + "Ġwebs ites", + "Ġposs ibility", + "Ġpossibilit y", + "о ÑĤ", + "Ġ kö", + "Ġk ö", + "Ġm eat", + "Ġme at", + "Ġ representation", + "Ġre presentation", + "Ġrep resentation", + "Ġrepresent ation", + "Ġrepresenta tion", + "2 41", + "24 1", + "Ġ ĉĉ", + "Ġĉ ĉ", + "_ START", + "_ST ART", + "_STAR T", + "_STA RT", + ". apply", + ".app ly", + ".ap ply", + "ĠV alley", + "ĠVal ley", + "ĠValle y", + "ĠVall ey", + "Ġ Success", + "ĠS uccess", + "ĠSu ccess", + "ĠSuc cess", + "ĠSucc ess", + "H i", + "Ġ nob", + "Ġn ob", + "Ġno b", + "Ġ IEnumerable", + "ĠI Enumerable", + "_ select", + "_s elect", + "_se lect", + "_sel ect", + "g eo", + "ge o", + ". \")Ċ", + ".\" )Ċ", + ".\") Ċ", + "Ġt urning", + "Ġturn ing", + "Ġtur ning", + "Ġ fabric", + "Ġf abric", + "Ġfab ric", + "(\" \");Ċ", + "(\"\" );Ċ", + "(\"\") ;Ċ", + "(\"\"); Ċ", + "Ġp erspective", + "Ġpers pective", + "é Ĺ", + "Ġ Sn", + "ĠS n", + "Th ank", + "Than k", + "; j", + ". Parameters", + ".Param eters", + ".Parameter s", + "ĉ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĉĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĉĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĉĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ facts", + "Ġf acts", + "Ġfact s", + "Ġfa cts", + "Ġfac ts", + "3 05", + "30 5", + "Ġ unt", + "Ġu nt", + "Ġun t", + ". instance", + ".in stance", + ".inst ance", + "#### ############################################################", + "######## ########################################################", + "################ ################################################", + "################################ ################################", + "################################################ ################", + "######################################## ########################", + "######################## ########################################", + "######################################################## ########", + "############################################################ ####", + "- end", + "-e nd", + "-en d", + "Ġ JOIN", + "ĠJO IN", + "Ġ Hen", + "ĠH en", + "ĠHe n", + "Ġ uri", + "Ġu ri", + "Ġur i", + "åIJ į", + "Ġ на", + "Ġн а", + "Ġ Info", + "ĠIn fo", + "ĠInf o", + "Ġcon ducted", + "Ġconduct ed", + "Ġconduc ted", + "Ġ Ã¥", + "Ġà ¥", + "OUR CE", + "Ġ wine", + "Ġw ine", + "Ġwin e", + "Ġwi ne", + "J ohn", + "Jo hn", + ".Error f", + ".Err orf", + "Ġ Age", + "ĠA ge", + "ĠAg e", + "o unded", + "ound ed", + "oun ded", + "Ġreal ize", + "Ġrealiz e", + "3 12", + "31 2", + "Ġ ];", + "Ġ] ;", + "Ġsub sequ", + "Ġsubs equ", + ", m", + "( User", + "(U ser", + "i ano", + "ia no", + "ian o", + "Ġaccom pl", + "Ġaccomp l", + "i sp", + "is p", + ". std", + ".s td", + ".st d", + "é ĩ", + "Ġ Bed", + "ĠB ed", + "ĠBe d", + ". setAttribute", + ".set Attribute", + "B R", + "ke ep", + "kee p", + "Ġ ALL", + "ĠA LL", + "ĠAL L", + "Ġ isol", + "Ġis ol", + "Ġi sol", + "Ġiso l", + "a mma", + "am ma", + "amm a", + "P ackage", + "Pack age", + "Ġ occasion", + "Ġocc asion", + "Ġoccas ion", + "- success", + "-s uccess", + "-su ccess", + "е д", + "еР´", + "ĠLIMIT ED", + "s trip", + "st rip", + "str ip", + "stri p", + "( )ĊĊĊ", + "() ĊĊĊ", + "()Ċ ĊĊ", + "()ĊĊ Ċ", + "is tribution", + "istrib ution", + "Color s", + "Col ors", + "Ġ+ :+", + "Did Load", + "a ler", + "al er", + "ale r", + "Ġ tid", + "Ġt id", + "Ġti d", + "Ġ LED", + "ĠL ED", + "ĠLE D", + "Ġ Linked", + "ĠLink ed", + "ĠLin ked", + "Ġ Cart", + "ĠC art", + "ĠCar t", + "ĠCa rt", + "( ))čĊ", + "() )čĊ", + "()) čĊ", + "_ READ", + "_RE AD", + "Ġk illing", + "Ġkill ing", + "Ġkil ling", + "Ġ PHP", + "ĠP HP", + "ĠPH P", + "f ection", + "fe ction", + "fect ion", + "fec tion", + "Ġ instances", + "Ġin stances", + "Ġinst ances", + "Ġinstance s", + "c v", + "\" />", + "\"/ >", + "Ġ sf", + "Ġs f", + "Ġt axes", + "Ġtax es", + "Ġta xes", + "_ location", + "_l ocation", + "_lo cation", + "_loc ation", + "Ġ Bitcoin", + "ĠBit coin", + "u able", + "ua ble", + "r ank", + "ra nk", + "ran k", + "i gnore", + "ig nore", + "ign ore", + "t rack", + "tr ack", + "tra ck", + "к а", + "Ġshould n", + "Ġ OP", + "ĠO P", + "= >{Ċ", + "=> {Ċ", + "Ġ km", + "Ġk m", + "Ġ helper", + "Ġh elper", + "Ġhelp er", + "Ġhel per", + "_ head", + "_h ead", + "_he ad", + "Ġ Whether", + "ĠWh ether", + "ĠWhe ther", + "o co", + "oc o", + "_ bl", + "_b l", + "Ġ statistics", + "Ġstat istics", + "Ġstatist ics", + "Ġstatistic s", + "Ġbe auty", + "Ġbeaut y", + "Ġbeau ty", + "Ġ tog", + "Ġt og", + "Ġto g", + "t ip", + "ti p", + "ëĭ ¤", + "Ġ csv", + "Ġc sv", + "Ġcs v", + "( sql", + "(s ql", + "(sq l", + "std lib", + "we ak", + "Ġ likes", + "Ġl ikes", + "Ġli kes", + "Ġlike s", + "Ġlik es", + "Ä į", + "Ġ repeat", + "Ġre peat", + "Ġrep eat", + "Ġrepe at", + "Ġa partment", + "Ġap artment", + "Ġapart ment", + "Ġe mph", + "Ġem ph", + "Ġemp h", + "_ edit", + "_e dit", + "_ed it", + "Ġ vit", + "Ġv it", + "Ġvi t", + "ĉ type", + "ĉt ype", + "ĉtyp e", + "2 17", + "21 7", + "E ven", + "Ev en", + "u ten", + "ut en", + "ute n", + "Ġcircum stances", + "Ġcircumstance s", + "b ian", + "bi an", + "bia n", + "Ġs ugar", + "Ġsu gar", + "Ġsug ar", + "W indows", + "Window s", + "Wind ows", + "ì ŀ", + "Ġobs erved", + "Ġobserv ed", + "Ġobserve d", + "/ data", + "/d ata", + "/dat a", + "Ġ calendar", + "Ġc alendar", + "Ġcal endar", + "Ġcalend ar", + "Ġ strike", + "Ġst rike", + "Ġstr ike", + "Ġstri ke", + "Ġ RES", + "ĠR ES", + "ĠRE S", + "_ sc", + "_s c", + "f ony", + "fo ny", + "fon y", + "o rem", + "or em", + "ore m", + "( z", + "p ower", + "po wer", + "pow er", + "et ect", + "ete ct", + "Ġ Sat", + "ĠS at", + "ĠSa t", + ". description", + ".d escription", + ".de scription", + ".des cription", + "Ġ gang", + "Ġg ang", + "Ġga ng", + "Ġgan g", + "Ġ Sports", + "ĠS ports", + "ĠSp orts", + "ĠSport s", + "ĠSpo rts", + "ĠSpor ts", + "on gs", + "ong s", + "Ġ Bundle", + "ĠB undle", + "ĠBund le", + "ĠBun dle", + ". sum", + ".s um", + "o nce", + "on ce", + "Ġacc used", + "Ġaccus ed", + "Ġaccuse d", + "Ġexp lore", + "Ġexpl ore", + "Ġexplo re", + "Ġexplor e", + "Ġ approximately", + "Ġapprox imately", + "Ġapproximate ly", + "Ġ losing", + "Ġl osing", + "Ġlo sing", + "Ġlos ing", + "th esis", + "the sis", + "thes is", + "Ġ Fund", + "ĠF und", + "ĠFun d", + "ĠFu nd", + "Ġdi agn", + "Ġdia gn", + "Ġdiag n", + "A utowired", + "p roperties", + "prop erties", + "proper ties", + "Ġ _.", + "Ġ_ .", + "Ġ cnt", + "Ġc nt", + "Ġcn t", + "ced ure", + "Ġ yy", + "Ġy y", + "Ġ grant", + "Ġg rant", + "Ġgr ant", + "Ġgran t", + "Ġgra nt", + "s ock", + "so ck", + "soc k", + ". innerHTML", + ".inner HTML", + "Ġ ]);Ċ", + "Ġ] );Ċ", + "Ġ]) ;Ċ", + "Ġ]); Ċ", + "Ġ CONFIG", + "ĠCON FIG", + "ĠCONF IG", + "= '$", + "=' $", + "5 50", + "55 0", + "] ];Ċ", + "]] ;Ċ", + "]]; Ċ", + "U ND", + "UN D", + "Ġ glob", + "Ġg lob", + "Ġgl ob", + "Ġglo b", + "Ġ dire", + "Ġd ire", + "Ġdi re", + "Ġdir e", + "uff le", + "_ MEM", + "_M EM", + "_ME M", + "Ġauth entic", + "> (\"", + ">( \"", + "Ġde cade", + "Ġdec ade", + "Ġdecad e", + "Ġ Import", + "ĠIm port", + "ĠImp ort", + "Ġorig inally", + "Ġoriginal ly", + "Ġorigin ally", + "Ġ jQuery", + "Ġj Query", + "Ġind icate", + "Ġindic ate", + "Ġindica te", + "Ġours elves", + "S w", + ". lbl", + ".l bl", + ".lb l", + "en erate", + "ener ate", + "ene rate", + "Ġbas ically", + "Ġbasic ally", + "Ġ Hom", + "ĠH om", + "ĠHo m", + "Ġ+ #+", + "Ġ+# +", + "Ġ Britain", + "ĠBrit ain", + "ĠBri tain", + "Ġ Kar", + "ĠK ar", + "ĠKa r", + "to Equal", + ". stop", + ".s top", + ".st op", + "Ġ modal", + "Ġm odal", + "Ġmod al", + "Ġmo dal", + "Ġmoda l", + "i si", + "is i", + "Ġsuggest s", + "Ġ dtype", + "Ġd type", + "Ġdt ype", + "Ġ tur", + "Ġt ur", + "Ġtu r", + "b f", + "Ġ connections", + "Ġconnection s", + "Ġconn ections", + "Ġconnect ions", + "Ġ Before", + "ĠB efore", + "ĠBe fore", + "i sted", + "is ted", + "ist ed", + "iste d", + "m ouse", + "mo use", + "Ġp ulled", + "Ġpull ed", + "Ġpul led", + ". build", + ".b uild", + "Ġleg islation", + "Ġlegis lation", + "Ġlegisl ation", + "Ġ forth", + "Ġf orth", + "Ġfor th", + "Ġfort h", + "p ad", + "pa d", + "e go", + "eg o", + ". Now", + ".N ow", + ".No w", + "Ġexc iting", + "Ġexcit ing", + "} ĊĊĊĊ", + "}Ċ ĊĊĊ", + "}ĊĊ ĊĊ", + "}ĊĊĊ Ċ", + "Ġcom pr", + "Ġco mpr", + "Ġcomp r", + "Ġ shares", + "Ġsh ares", + "Ġshare s", + "Ġsha res", + "Ġshar es", + "Ġ rig", + "Ġr ig", + "Ġri g", + "g reen", + "gr een", + "gre en", + "gree n", + "_ vec", + "_v ec", + "_ve c", + "Ġ enumerate", + "Ġenum erate", + "Ġenumer ate", + "A uto", + "Aut o", + "Au to", + "ic ator", + "ica tor", + "Ġ Ray", + "ĠR ay", + "ĠRa y", + "a sse", + "as se", + "ass e", + "Ġ holiday", + "Ġh oliday", + "Ġhol iday", + "Ġ nullable", + "Ġnull able", + "Ġnulla ble", + "g un", + "gu n", + "_ details", + "_d etails", + "_de tails", + "_detail s", + "_det ails", + "Ġ wrapper", + "Ġw rapper", + "Ġwr apper", + "Ġwrap per", + "s eq", + "se q", + "Ġ Young", + "ĠYou ng", + "ĠYo ung", + "ju ana", + "juan a", + "Ġ\" __", + "Ġ\"_ _", + "l icense", + "lic ense", + "s erve", + "se rve", + "ser ve", + "serv e", + "^ (", + "i ders", + "id ers", + "ide rs", + "ider s", + ". Remove", + ".Re move", + ".Rem ove", + "rop down", + "' S", + "p in", + "pi n", + "( token", + "(t oken", + "(to ken", + "(tok en", + ". Default", + ".D efault", + ".De fault", + ".Def ault", + "Ġ reasonable", + "Ġreason able", + "amp ion", + "ĠS ociety", + "ĠSoci ety", + "Ġ bei", + "Ġb ei", + "Ġbe i", + "er ves", + "erv es", + "erve s", + "r ad", + "ra d", + "Ġ Fox", + "ĠF ox", + "ĠFo x", + "_ images", + "_image s", + "_im ages", + "_imag es", + "Ġ wheel", + "Ġw heel", + "Ġwh eel", + "Ġwhe el", + "' )[", + "') [", + "Ġ cfg", + "Ġc fg", + "Ġcf g", + "( By", + "(B y", + "Con structor", + "Construct or", + "Ġ vary", + "Ġv ary", + "Ġvar y", + "Ġva ry", + ". swift", + ".sw ift", + "Ġ proxy", + "Ġpro xy", + "Ġpr oxy", + "Ġprox y", + "ĉ H", + "Ġ Another", + "ĠAn other", + "Ġ Pen", + "ĠP en", + "ĠPe n", + "Ġ checking", + "Ġcheck ing", + "Ġ jest", + "Ġj est", + "Ġje st", + "Ġjes t", + "m anager", + "man ager", + "manage r", + "mana ger", + "Or igin", + "Orig in", + "u gs", + "ug s", + "o ir", + "oi r", + "> čĊ", + "Ġ-- >čĊ", + "Ġ--> čĊ", + "Ġrel ief", + "Ġreli ef", + "Ġrelie f", + "l ap", + "la p", + "q uer", + "qu er", + "que r", + "_ parent", + "_p arent", + "_par ent", + "_pa rent", + "he ap", + "hea p", + "L OSE", + "LO SE", + "LOS E", + "Ġ combine", + "Ġc ombine", + "Ġcom bine", + "Ġcomb ine", + "Ġcombin e", + "Ġ Rose", + "ĠR ose", + "ĠRo se", + "ĠRos e", + "o wers", + "ow ers", + "ower s", + "owe rs", + "Ġpro cedures", + "Ġproced ures", + "Ġprocedure s", + "Ġ Sort", + "ĠS ort", + "ĠSo rt", + "ĠSor t", + "a nim", + "an im", + "ani m", + "v ariant", + "var iant", + "vari ant", + "eh icle", + "Ġsign ing", + "Ġsig ning", + "Ġsignin g", + "Pr imary", + "Prim ary", + "Pri mary", + "c urrency", + "curr ency", + "Ġs exe", + "Ġse xe", + "Ġsex e", + "o en", + "oe n", + "th eta", + "the ta", + "e man", + "em an", + "ema n", + "Ġim pressive", + "Ġimp ressive", + "Ġimpress ive", + "( '_", + "(' _", + "ĉ U", + "Ġ TextStyle", + "ĠText Style", + "_ cnt", + "_c nt", + "_cn t", + "Ġ slice", + "Ġs lice", + "Ġsl ice", + "Ġslic e", + "( ':", + "(' :", + "Ġunder stood", + "Ġunderst ood", + "H is", + "Hi s", + "2 77", + "27 7", + "0 13", + "01 3", + "Ġin formed", + "Ġinform ed", + "Ġ nick", + "Ġn ick", + "Ġni ck", + "Ġnic k", + "4 29", + "42 9", + "( TAG", + "(T AG", + "h d", + "Ġe lections", + "Ġel ections", + "Ġelect ions", + "Ġelection s", + "Ġele ctions", + "es ture", + "est ure", + "Ġ Santa", + "ĠS anta", + "ĠSan ta", + "ĠSant a", + "ĠCo ast", + ". pdf", + ".p df", + "inc iple", + "incip le", + "inci ple", + ". clone", + ".cl one", + "b orn", + "bo rn", + "bor n", + "u ta", + "ut a", + "Ġ licensed", + "Ġl icensed", + "Ġlicense d", + "Ġlic ensed", + "Ġlicens ed", + "C r", + "Ġ bread", + "Ġb read", + "Ġbr ead", + "Ġbre ad", + "Ġ Houston", + "ĠH ouston", + "ĠHou ston", + "Ġ nod", + "Ġn od", + "Ġno d", + "Ġh opes", + "Ġhope s", + "Ġhop es", + "Ġho pes", + "Ġ CGRect", + "ĠCG Rect", + "Ġgu ilty", + "Ġguilt y", + ". gif", + ".g if", + "Ġ rose", + "Ġr ose", + "Ġro se", + "Ġros e", + ". Common", + ".Com mon", + ".Comm on", + "T ip", + "Ti p", + "A NK", + "AN K", + "Ġ FC", + "ĠF C", + "D uring", + "Du ring", + "Dur ing", + "Ġ Symfony", + "ĠSym fony", + "Ġdef ensive", + "k m", + ") >", + "a rchive", + "arch ive", + "arc hive", + "Ġ URI", + "ĠU RI", + "ĠUR I", + "y cling", + "yc ling", + "ycl ing", + "- o", + "Ġ Website", + "ĠWe bsite", + "ĠWeb site", + "A MP", + "AM P", + "4 05", + "40 5", + "ish ment", + "Ġdo ctors", + "Ġdoc tors", + "Ġdoctor s", + "D irect", + "Dir ect", + "Di rect", + "Dire ct", + "A RI", + "AR I", + "Ġ Redirect", + "ĠRe direct", + "ĠRed irect", + "i eren", + "ie ren", + "ier en", + "iere n", + "9 60", + "96 0", + "_ dist", + "_d ist", + "_dis t", + "_di st", + "y o", + "Ġ Progress", + "ĠPro gress", + "Ġz um", + "Ġzu m", + "Ġme mor", + "Ġmem or", + "Ġmemo r", + "Ġ ED", + "ĠE D", + "Ġ jur", + "Ġj ur", + "Ġju r", + "æį ®", + "_ TABLE", + "_T ABLE", + "_TAB LE", + "_TA BLE", + "Ġ uuid", + "Ġu uid", + "Ġuu id", + "Ex pr", + "Exp r", + ". head", + ".h ead", + ".he ad", + "( '%", + "(' %", + "point er", + "po inter", + "Ġ estimate", + "Ġest imate", + "Ġestim ate", + "Ġ Greg", + "ĠG reg", + "ĠGr eg", + "ĠGre g", + "Ġ loader", + "Ġl oader", + "Ġlo ader", + "Ġload er", + "Ġloa der", + "Ġ iOS", + "Ġi OS", + "Ġ mens", + "Ġm ens", + "Ġme ns", + "Ġmen s", + "[ y", + "Ġref used", + "Ġrefuse d", + "Ġ precision", + "Ġp recision", + "Ġpre cision", + "Ġprec ision", + "Ġprecis ion", + "i sch", + "is ch", + "isc h", + "Ġ ACTION", + "ĠA CTION", + "ĠAC TION", + "ĠACT ION", + "C loud", + "Cl oud", + "Clo ud", + "s With", + "( ret", + "(r et", + "(re t", + "2 92", + "29 2", + "_ ADDR", + "_A DDR", + "_ADD R", + "_AD DR", + "_ conf", + "_con f", + "_co nf", + "( df", + "(d f", + "Ġ locked", + "Ġl ocked", + "Ġloc ked", + "Ġlock ed", + "Ġ rising", + "Ġr ising", + "Ġris ing", + "Ġri sing", + "ãĥ» ãĥ»", + "Ġ Ms", + "ĠM s", + "Ġ scenes", + "Ġsc enes", + "Ġscene s", + "Ġscen es", + "Ġsce nes", + "_ EXT", + "_E XT", + "_EX T", + "_ raw", + "_r aw", + "_ra w", + "_ the", + "_t he", + "_th e", + "pe ople", + "Ġre con", + "Ġrec on", + "Ġreco n", + "Ġ Fun", + "ĠF un", + "ĠFu n", + "Ġb less", + "Ġbl ess", + "Ġble ss", + "Ġ Updated", + "ĠUp dated", + "ĠUpdate d", + "4 22", + "42 2", + "ü n", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠčĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠčĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠčĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ čĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠčĊ", + "p ection", + "pe ction", + "pect ion", + "pec tion", + "R elease", + "Re lease", + "Rel ease", + ". logger", + ".log ger", + ".lo gger", + "Ġ SY", + "ĠS Y", + "Ġc ounsel", + "Ġcoun sel", + "u rd", + "ur d", + "_ true", + "_tr ue", + "Ġevery body", + "iv ot", + "ivo t", + "Ġh ence", + "Ġhe nce", + "Ġhen ce", + "Ġ NAS", + "ĠN AS", + "ĠNA S", + "7 89", + "78 9", + "Ġop posed", + "Ġopp osed", + "Ġoppos ed", + "Ġoppose d", + "un known", + "unk nown", + "Ġ DESC", + "ĠD ESC", + "ĠDE SC", + "ĠDES C", + "Ġ Chair", + "ĠC hair", + "ĠCh air", + "ĠCha ir", + "f ailed", + "fa iled", + "fail ed", + "Ġ INCLUDING", + "ĠIN CLUDING", + "3 86", + "38 6", + "3 52", + "35 2", + "Ġ writers", + "Ġw riters", + "Ġwrit ers", + "Ġwrite rs", + "Ġwriter s", + "{ }Ċ", + "{} Ċ", + "ÃŃ t", + "_ copy", + "_c opy", + "_co py", + "} :", + "Ġ Bat", + "ĠB at", + "ĠBa t", + "Ġ converted", + "Ġcon verted", + "Ġconvert ed", + "Ġconver ted", + "e ding", + "ed ing", + "edi ng", + "edin g", + "pl acement", + "place ment", + "Ġ Host", + "ĠH ost", + "ĠHo st", + "ĠHos t", + "S ound", + "So und", + "Sou nd", + "и м", + "Ġs ought", + "Ġso ught", + "Ġsou ght", + "4 02", + "40 2", + "m id", + "mi d", + "Ġ salary", + "Ġs alary", + "Ġsal ary", + "Ġsala ry", + "o gg", + "og g", + "âĦ ¢", + "b ul", + "bu l", + "Ġw ir", + "Ġwi r", + "valid ator", + "_ STAT", + "_ST AT", + "_STA T", + ". store", + ".st ore", + "Ġ Battle", + "ĠB attle", + "ĠBat tle", + "ĠBatt le", + "ı n", + "Ġ -->ĊĊ", + "Ġ-- >ĊĊ", + "Ġ-->Ċ Ċ", + "Ġ--> ĊĊ", + "Tr ump", + "d ot", + "do t", + "Ġ CONT", + "ĠC ONT", + "ĠCON T", + "ĠCO NT", + ". fetch", + ".f etch", + "Ġcont inu", + "Ġcontin u", + "w as", + "wa s", + "Ġf raud", + "Ġfr aud", + "Ġfra ud", + "Ġfrau d", + "_ tmp", + "_t mp", + "_tm p", + "m itter", + "mit ter", + "mitt er", + ". pictureBox", + ".p ictureBox", + ".picture Box", + "G A", + "Ġ tournament", + "Ġt ournament", + ". Input", + ".In put", + "3 43", + "34 3", + "[ r", + "ex ion", + "cent age", + "ĠK orean", + "ĠKore an", + "ĠKorea n", + "ĠKor ean", + "u ndef", + "un def", + "und ef", + "unde f", + "Ġ Available", + "ĠA vailable", + "ĠAv ailable", + "re shape", + "res hape", + "resh ape", + "Ġ kit", + "Ġk it", + "Ġki t", + "Ġ Struct", + "ĠStr uct", + "Ġ SUB", + "ĠS UB", + "ĠSU B", + "An swer", + "Ans wer", + "_ lib", + "_l ib", + "_li b", + ". twitter", + ".t witter", + ".tw itter", + "Ġ ore", + "Ġo re", + "Ġor e", + "Ġ Dragon", + "ĠD ragon", + "ĠDr agon", + "ĠDrag on", + "ĠDra gon", + ". Ext", + ".Ex t", + ".E xt", + ", k", + "Ġex planation", + "Ġexplan ation", + "r efs", + "re fs", + "ref s", + "Ġ Drive", + "ĠD rive", + "ĠDr ive", + "Ġ Training", + "ĠTr aining", + "ĠTra ining", + "ĠTrain ing", + "2 82", + "28 2", + ". Has", + ".H as", + "3 41", + "34 1", + "int age", + "inta ge", + "b ig", + "bi g", + "olog ist", + "olo gist", + "ologi st", + "en nis", + "enn is", + "4 60", + "46 0", + "Ù ĩ", + "Ġch icken", + "Ġchi cken", + "Ġchick en", + "Ġchic ken", + "Ġ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ Ċ", + "ç Ľ", + "ãģ §", + "Ġ peak", + "Ġpe ak", + "Ġpea k", + "Ġdr inking", + "Ġdrink ing", + "Ġ encode", + "Ġen code", + "Ġenc ode", + "Ġ NEW", + "ĠN EW", + "ĠNE W", + "m alloc", + "mal loc", + "mall oc", + "ĉ fprintf", + "ĉf printf", + "Ġ= ================================================================", + "Ġ================= ================================================", + "Ġ================================================= ================", + "Ġ================================= ================================", + "Ġ============================================================== ===", + "in cluding", + "incl uding", + "inclu ding", + "Ġprincip les", + "Ġprinciple s", + "Ġprinc iples", + "Ġ Mah", + "ĠM ah", + "ĠMa h", + "2 67", + "26 7", + "st orage", + "sto rage", + "stor age", + "- key", + "-k ey", + "Ġ keyword", + "Ġkey word", + "% ;", + "Ġ trained", + "Ġtr ained", + "Ġtrain ed", + "Ġtra ined", + "Ġtrai ned", + ". contrib", + ".con trib", + ".cont rib", + "Ġ kv", + "Ġk v", + "__ ':Ċ", + "Ġ Boy", + "ĠB oy", + "ĠBo y", + "param eter", + "para meter", + "Ġ suite", + "Ġs uite", + "Ġsu ite", + "Ġsuit e", + "Ġsui te", + "Ġth ousand", + "Ġthous and", + "Ġthou sand", + "Ġ coordinate", + "Ġco ordinate", + "Ġcoord inate", + "Ġcoordin ate", + "- generated", + "-g enerated", + "íķ ĺ", + "g enerated", + "gener ated", + "generate d", + "gene rated", + "Ġad mitted", + "Ġadm itted", + "Ġadmit ted", + "Ġp ussy", + "Ġpus sy", + "Ġpuss y", + "# w", + "Ġsw im", + "un ion", + "uni on", + "N a", + "2 74", + "27 4", + "Ġ Royal", + "ĠR oyal", + "ĠRoy al", + "ĠRo yal", + ". channel", + ".ch annel", + "Up dated", + "Update d", + "_ ROOT", + "_R OOT", + "_RO OT", + "Ġv ital", + "Ġvi tal", + "Ġvit al", + "Ġvita l", + "3 35", + "33 5", + "r action", + "ra ction", + "rac tion", + "ract ion", + "ĠCr usher", + "ĠCrush er", + "ĠCru sher", + "ĠCrus her", + "Ġ preced", + "Ġpr eced", + "Ġpre ced", + "Ġprec ed", + "Ġ horizontal", + "Ġh orizontal", + "Ġhor izontal", + "Ġhorizon tal", + "Blue print", + "Ġ attrs", + "Ġat trs", + "Ġatt rs", + "Ġattr s", + "Ġsm oke", + "Ġsmo ke", + "Ð Ĵ", + ". Equals", + ".E quals", + ".Equal s", + "F B", + "Ġ Resources", + "ĠRe sources", + "ĠRes ources", + "ĠResource s", + "rol ling", + "roll ing", + "Ġ passes", + "Ġp asses", + "Ġpass es", + "Ġpas ses", + "Ġpasse s", + "Ġ Num", + "ĠN um", + "ĠNu m", + "r otate", + "rot ate", + "e type", + "et ype", + "ety pe", + "\\ \",", + "\\\" ,", + "Ġs ensitive", + "Ġsens itive", + "Ġsensit ive", + "Ġt all", + "Ġtal l", + "Ġta ll", + "? âĢĿĊĊ", + "?âĢĿ ĊĊ", + "Pro xy", + "Pr oxy", + "i y", + "_ section", + "_s ection", + "_se ction", + "_sec tion", + "âĢĶâĢĶ âĢĶâĢĶ", + "b rid", + "br id", + "Ġc ircuit", + "Ġcirc uit", + "a tan", + "at an", + "ata n", + "E NC", + "EN C", + "Ġdr iven", + "Ġdrive n", + "Ġdriv en", + "Ġdri ven", + "Ġv oted", + "Ġvo ted", + "Ġvot ed", + "Ġvote d", + "Ġeduc ational", + "Ġeducation al", + "Ġ interaction", + "Ġinter action", + "Ġinteract ion", + "Ġinte raction", + "ab etes", + "abe tes", + "abet es", + "Ġ tone", + "Ġt one", + "Ġto ne", + "Ġton e", + "ĠInitialize Component", + "Ġmer ely", + "Ġmere ly", + "Ġ ìŀ", + "Ġì ŀ", + "c ookie", + "co okie", + "cook ie", + "_ div", + "_d iv", + "_di v", + "Ġ UILabel", + "ĠUI Label", + "ĠUIL abel", + "v ely", + "ve ly", + "vel y", + "} );čĊ", + "}) ;čĊ", + "}); čĊ", + "_ ENT", + "_E NT", + "_EN T", + "#+ #+", + "art icles", + "article s", + "arti cles", + "artic les", + "Ġ Southern", + "ĠSouth ern", + "ĠSou thern", + "Ġstrong er", + "Ġstro nger", + "Ġstron ger", + "Ġ Given", + "ĠG iven", + "ĠGi ven", + "ĠGive n", + "Ġ Eric", + "ĠE ric", + "ĠEr ic", + "Ġ IR", + "ĠI R", + "a bstract", + "ab stract", + "abs tract", + "U nder", + "Un der", + "Und er", + "n able", + "na ble", + "Ġ increment", + "Ġin crement", + "Ġincre ment", + "Ġinc rement", + "Ġincr ement", + "o ven", + "ov en", + "ove n", + "Ġ coin", + "Ġc oin", + "Ġco in", + "Ġcoi n", + "_ timer", + "_t imer", + "_time r", + "_tim er", + "_ti mer", + "Ġsuffer ed", + "Ġsuff ered", + "Ġ FREE", + "ĠF REE", + "ĠFR EE", + "ĠFRE E", + "' ].\"", + "'] .\"", + "']. \"", + "Ġ Queen", + "ĠQu een", + "ĠQue en", + "st ats", + "stat s", + "sta ts", + "Ġmeet ings", + "Ġmeeting s", + "Ġmee tings", + "2 76", + "27 6", + "Ġen tering", + "Ġent ering", + "Ġenter ing", + "Ġalong side", + "( session", + "(s ession", + "(sess ion", + "it als", + "ital s", + "ita ls", + "Ġ foundation", + "Ġf oundation", + "Ġfound ation", + "Ġ Credit", + "ĠC redit", + "ĠCr edit", + "ĠCre dit", + ". div", + ".d iv", + ".di v", + "_ ALL", + "_A LL", + "_AL L", + "p cion", + "pc ion", + "pci on", + "_ stat", + "_s tat", + "_st at", + "_sta t", + "ic king", + "ick ing", + "Default s", + "_ src", + "_s rc", + "_sr c", + "Ġ outputs", + "Ġout puts", + "Ġoutput s", + "/ B", + "Ġen thus", + "Ġent hus", + "Ġenth us", + "- bl", + "-b l", + ". ForeColor", + ".Fore Color", + "ĉ temp", + "ĉt emp", + "F ace", + "Fac e", + "Fa ce", + "Ġinter act", + "Ġinte ract", + "Ġwe ird", + "Ġwei rd", + "Ġweir d", + "M ount", + "Mo unt", + "r ell", + "re ll", + "rel l", + "ud ents", + "ude nts", + "udent s", + "uden ts", + "Ġrequire ment", + "Ġrequ irement", + "Ġ Sus", + "ĠS us", + "ĠSu s", + "I ER", + "IE R", + "Ġe lected", + "Ġel ected", + "Ġelect ed", + "re ference", + "ref erence", + "refer ence", + "Ġ ME", + "ĠM E", + "Ġ servers", + "Ġs ervers", + "Ġser vers", + "Ġserver s", + "Ġserv ers", + "Ġserve rs", + ". wait", + ".w ait", + "Ġ snapshot", + "Ġs napshot", + "Ġsnap shot", + "Ġsnaps hot", + "il ton", + "ilt on", + "Ġ tries", + "Ġt ries", + "Ġtr ies", + "Ġtri es", + "Ġtrie s", + "Ġ tipo", + "Ġt ipo", + "Ġti po", + "Ġtip o", + ". Time", + ".T ime", + "> w", + "Ġm ountain", + "Ġmount ain", + "Ġp ounds", + "Ġpo unds", + "Ġpou nds", + "Ġpound s", + "Ġ[ ...", + "Ġ[. ..", + "ex ists", + "exist s", + "Ġng On", + "_ MAP", + "_M AP", + "_MA P", + "Ġf lying", + "Ġfl ying", + "Ġfly ing", + "3 31", + "33 1", + "xi ety", + "ĉ value", + "ĉv alue", + "ĉval ue", + "ĉva lue", + "_ DB", + "_D B", + "u no", + "un o", + "Ġse ats", + "Ġsea ts", + "Ġseat s", + "T URN", + "TU RN", + ". author", + ".a uthor", + ".auth or", + ".aut hor", + "! )", + "or ce", + "orc e", + "Ġind icated", + "Ġindic ated", + "Ġindicate d", + "Ġindica ted", + "3 17", + "31 7", + ". sin", + ".s in", + ".si n", + "Ġ assignment", + "Ġass ignment", + "Ġassign ment", + "im iento", + "imi ento", + "Ġ Frame", + "ĠF rame", + "ĠFr ame", + "ĠFra me", + "ĠFram e", + "3 24", + "32 4", + "_ gen", + "_g en", + "_ge n", + "in ery", + "ine ry", + "iner y", + "_ )", + "m essages", + "message s", + "mess ages", + ". settings", + ".s ettings", + ".set tings", + ".setting s", + "Ġ Mean", + "ĠM ean", + "ĠMe an", + "ĠM useum", + "ĠMus eum", + "ĠMuse um", + "i rq", + "ir q", + "at tach", + "att ach", + "atta ch", + "ĠPale stin", + "ĠPalest in", + "_ QU", + "_Q U", + "_ tags", + "_t ags", + "_tag s", + "_ta gs", + "Ġcas ual", + "e men", + "em en", + "eme n", + "ASS WORD", + "4 32", + "43 2", + "$ s", + "ĠC irc", + "ĠCi rc", + "ĠCir c", + "о й", + "оР¹", + "et ric", + "etr ic", + "etri c", + "/ P", + "0 18", + "01 8", + "Ġ epoch", + "Ġep och", + "< head", + " The", + ">T he", + "Ġ Ak", + "ĠA k", + "Ġ grass", + "Ġgr ass", + "Ġgra ss", + "Ġgras s", + "/ *čĊ", + "/* čĊ", + "( dis", + "(d is", + "(di s", + "Ġ guns", + "Ġg uns", + "Ġgu ns", + "Ġgun s", + "Ġ tb", + "Ġt b", + "Ġ Kevin", + "ĠK evin", + "ĠKe vin", + ". args", + ".ar gs", + ".arg s", + "Ġ Ah", + "ĠA h", + "o ped", + "op ed", + "ope d", + "( J", + "column s", + "arg uments", + "argument s", + "ĠWith Events", + "_ full", + "_f ull", + "_fu ll", + "Ġ Defense", + "ĠDef ense", + "S imple", + "Sim ple", + "Ġde aths", + "Ġdeath s", + "2 95", + "29 5", + "Ġext ensive", + "Ġ Still", + "ĠSt ill", + "Ġ Expression", + "ĠEx pression", + "ĠExp ression", + "ĠExpress ion", + "ĠExpr ession", + "Ġ Agency", + "ĠA gency", + "ĠAg ency", + "ĠAge ncy", + "Ġper forming", + "Ġperform ing", + "Ġperfor ming", + "F X", + "Ġ usuario", + "Ġus uario", + "Ġusu ario", + "U AL", + "UA L", + "S ide", + "Si de", + "Sid e", + "o dos", + "od os", + "odo s", + "ap top", + "apt op", + "Ġ credentials", + "Ġc redentials", + "Ġcred entials", + "Ġcredential s", + "_ cap", + "_c ap", + "_ca p", + "at ient", + "ati ent", + "atie nt", + "Ġ Disney", + "ĠDis ney", + "Ġ ai", + "Ġa i", + "Ġ chip", + "Ġc hip", + "Ġch ip", + "Ġchi p", + "Ġ volt", + "Ġv olt", + "Ġvo lt", + "Ġvol t", + ".make Text", + "%%%%%%%% %%%%%%%%", + "Ġ belief", + "Ġbel ief", + "Ġbelie f", + "_ LOC", + "_L OC", + "_LO C", + "Ġ Civil", + "ĠC ivil", + "ĠCi vil", + "ĠCiv il", + "N avigation", + "Nav igation", + "Navig ation", + "Ġ reveal", + "Ġre veal", + "Ġreve al", + "Ġ violent", + "Ġviol ent", + "Ġ Fil", + "ĠF il", + "ĠFi l", + "Ġ catalog", + "Ġc atalog", + "Ġcat alog", + "Ġcata log", + "Ġcatal og", + "e med", + "em ed", + "eme d", + "s can", + "sc an", + ". control", + ".c ontrol", + ".cont rol", + "Ġ constitution", + "Ġcon stitution", + "Ġconst itution", + "Ġconstit ution", + "Ġconstitu tion", + "C ountry", + "Count ry", + "S eparator", + "Se parator", + "Separ ator", + "_ APP", + "_A PP", + "_AP P", + "t opic", + "to pic", + "top ic", + "u etooth", + "uet ooth", + "M IN", + "MI N", + "Ġ descriptor", + "Ġdes criptor", + "y t", + "ET HER", + "ETH ER", + "Ġd istribute", + "Ġdis tribute", + "Ġdistrib ute", + "' }Ċ", + "'} Ċ", + ". trim", + ".t rim", + ".tr im", + ". Line", + ".L ine", + "Ġ lbl", + "Ġl bl", + "Ġlb l", + "assert Equals", + "Ġ Det", + "ĠD et", + "ĠDe t", + "omb ok", + "ombo k", + "( width", + "(w idth", + "Ġt ort", + "Ġto rt", + "Ġtor t", + "ĠEX PRESS", + "ĠEXP RESS", + "a co", + "ac o", + "U sing", + "Us ing", + "Ġ Brand", + "ĠB rand", + "ĠBr and", + "ĠBra nd", + "ĠBran d", + "w all", + "wa ll", + "wal l", + "E MENT", + "EM ENT", + "Ġ Communic", + "ĠComm unic", + "ĠCommun ic", + "< uint", + " (Ċ", + ">( Ċ", + "? >\"", + "?> \"", + "Ġ ///Ċ", + "Ġ// /Ċ", + "Ġ/ //Ċ", + "Ġ/// Ċ", + "Ġe iner", + "Ġein er", + "Ġeine r", + "Ġei ner", + "Ġ weekly", + "Ġweek ly", + "ĉ logger", + "ĉlog ger", + "_ pop", + "_p op", + "_po p", + "_ man", + "_m an", + "_ma n", + "Ġm igrations", + "Ġmigr ations", + "Ġmigration s", + "Ġ asks", + "Ġas ks", + "Ġask s", + "Ġ bs", + "Ġb s", + "Ġ falls", + "Ġf alls", + "Ġfall s", + "Ġfal ls", + ". Where", + ".W here", + ".Wh ere", + "- height", + "-h eight", + "-he ight", + "_ feature", + "_f eature", + "_fe ature", + "_feat ure", + ". Min", + ".M in", + "Ġ hyper", + "Ġh yper", + "Ġhy per", + "Ġhyp er", + "Ġhype r", + "Ġ volatile", + "Ġv olatile", + "Ġvol atile", + "Ġ twenty", + "Ġtw enty", + "Ġtwe nty", + "Typ ography", + "U nable", + "Un able", + "Una ble", + "D et", + "De t", + ", f", + "- mod", + "-m od", + "Ġset tlement", + "Ġsett lement", + "Ġsettle ment", + "Ġ contracts", + "Ġcon tracts", + "Ġcontract s", + "Ġcontr acts", + "Ġcontra cts", + "n ome", + "no me", + "nom e", + "B ad", + "Ba d", + "Ġ Brian", + "ĠB rian", + "ĠBr ian", + "ĠBri an", + "7 68", + "76 8", + "( username", + "(user name", + "! !!!", + "!! !!", + "!!! !", + "Ġ hack", + "Ġh ack", + "Ġha ck", + "Ġhac k", + ". Field", + ".F ield", + "H R", + "Ġ Jordan", + "ĠJ ordan", + "ĠJord an", + "i za", + "iz a", + "Ġ Âł", + "Ġ ł", + "Ġ Sher", + "ĠS her", + "ĠSh er", + "ĠShe r", + ". header", + ".head er", + ".he ader", + "( other", + "(o ther", + "Ġ Dub", + "ĠD ub", + "ĠDu b", + "( op", + "(o p", + "Ġ Round", + "ĠR ound", + "ĠRo und", + "ĠRou nd", + "Ġ vie", + "Ġv ie", + "Ġvi e", + "Ġ appl", + "Ġapp l", + "Ġap pl", + "ĉ J", + "Ġ Insert", + "ĠIn sert", + "ĠIns ert", + "Ġ LP", + "ĠL P", + "re gon", + "reg on", + "rego n", + "Ġ MPI", + "ĠM PI", + "ĠMP I", + "Ġ anchor", + "Ġan chor", + "Ġanch or", + "Ġanc hor", + "a ca", + "ac a", + "ø r", + "Ġ ade", + "Ġa de", + "Ġad e", + "an chor", + "anc hor", + "anch or", + "qu ee", + "que e", + "Ġ TreeNode", + "ĠT reeNode", + "ĠTree Node", + "Ġtarget ed", + "Ġtarg eted", + "Ġl aid", + "Ġla id", + "Ġlai d", + "A BEL", + "AB EL", + "v et", + "ve t", + "Ġ Origin", + "ĠOr igin", + "ĠOri gin", + "ĠOrig in", + "A nt", + "An t", + ". ');Ċ", + ".' );Ċ", + ".') ;Ċ", + ".'); Ċ", + "ex pect", + "exp ect", + "ed Reader", + "Ġ Major", + "ĠM ajor", + "ĠMaj or", + "Ġ inch", + "Ġin ch", + "Ġinc h", + "Com par", + "Co mpar", + "Comp ar", + "Ġ preview", + "Ġp review", + "Ġpr eview", + "Ġpre view", + "Ġprev iew", + "Ġill ness", + "ĠCON TRACT", + "ĠCONTR ACT", + "ĠCONT RACT", + "Ġ Independ", + "ĠIn depend", + "ĠInd epend", + "u uid", + "uu id", + "Ġ nome", + "Ġn ome", + "Ġno me", + "Ġnom e", + "Ġ tc", + "Ġt c", + "ĠA venue", + "i san", + "is an", + "isa n", + "Ġ phrase", + "Ġph rase", + "_ move", + "_m ove", + "_mov e", + "_mo ve", + "\" )[", + "\") [", + "4 12", + "41 2", + "Ġpro vision", + "Ġprov ision", + "Ġconc entr", + "Ġconcent r", + "_ IR", + "_I R", + "Ġ Ut", + "ĠU t", + "( )+", + "() +", + "Ġ nas", + "Ġn as", + "Ġna s", + "! ,", + "Ġ Robin", + "ĠRob in", + "ĠRo bin", + "i ations", + "iation s", + "iat ions", + "at itude", + "Ġ px", + "Ġp x", + "Ġ Without", + "ĠWith out", + "/ bash", + "/b ash", + "e kt", + "ek t", + "re ement", + "ree ment", + "3 42", + "34 2", + "Ob server", + "Observ er", + "Obs erver", + "3 18", + "31 8", + "Ġ Region", + "ĠReg ion", + "UB LIC", + "UBL IC", + "Ġ {//", + "Ġ{ //", + "K N", + "å ·", + "Game Object", + "å ¾", + "en coding", + "enc oding", + "enco ding", + "Ġ ***", + "Ġ* **", + "Ġ** *", + "project s", + "proj ects", + "Ġ tk", + "Ġt k", + "Ġche ese", + "Ġchees e", + "EM PL", + "EMP L", + "a ro", + "ar o", + "Ġ اÙĦ", + "Ġا ÙĦ", + "6 10", + "61 0", + "3 37", + "33 7", + "Ġcons ists", + "Ġconsist s", + "re fresh", + "ref resh", + "u reau", + "ure au", + "Ġ Scanner", + "ĠSc anner", + "ĠScan ner", + "Ġs oil", + "Ġso il", + "Ġfl avor", + "Ġflav or", + "Ġfla vor", + "Data Source", + "Ex ecute", + "Exec ute", + "е ние", + "ен ие", + "ени е", + "Ġ shit", + "Ġs hit", + "Ġsh it", + "åĪ Ĩ", + "< any", + " < /", + "Qu antity", + "Quant ity", + "qu iry", + "quir y", + "qui ry", + "_ tab", + "_t ab", + "_ta b", + "Ġ alg", + "Ġa lg", + "Ġal g", + "To ast", + "re size", + "res ize", + "resi ze", + "quest ions", + "question s", + "s chema", + "sch ema", + "L iteral", + "Lite ral", + "Lit eral", + "Liter al", + "( entity", + "(e ntity", + "(ent ity", + "NE CTION", + "NECT ION", + "ch anged", + "change d", + "chan ged", + "chang ed", + "_ FIELD", + "_F IELD", + "_ HEIGHT", + "_HE IGHT", + "Ġ organic", + "Ġorg anic", + "Ġorgan ic", + "P RE", + "PR E", + "Ġ Cat", + "ĠC at", + "ĠCa t", + ". Draw", + ".D raw", + "E s", + "Ġ loud", + "Ġl oud", + "Ġlo ud", + "Ġlou d", + "6 80", + "68 0", + "Ġ ĠĠĠĠĠĠĠĉ", + "ĠĠ ĠĠĠĠĠĠĉ", + "ĠĠĠĠ ĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠ ĉ", + "ĠĠĠ ĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠ Ġĉ", + "ĠĠĠĠĠ ĠĠĠĉ", + "ĠĠĠĠĠĠ ĠĠĉ", + "Ġ Kat", + "ĠK at", + "ĠKa t", + "Ġ heap", + "Ġhe ap", + "âĢľ It", + "âĢľI t", + "0 70", + "07 0", + "e tr", + "et r", + "Ġ unlikely", + "Ġun likely", + "Ġunlike ly", + "er als", + "era ls", + "eral s", + "/ auth", + "/a uth", + "5 02", + "50 2", + "t odo", + "to do", + "tod o", + "P lace", + "Pl ace", + "Post ed", + "Pos ted", + "Po sted", + "Com ments", + "Comment s", + "Comm ents", + "Ġ Tech", + "ĠT ech", + "ĠTe ch", + "ĠTec h", + "Ġ Finally", + "ĠF inally", + "ĠFin ally", + "ĠFinal ly", + "eg ration", + "egr ation", + "egra tion", + "Ġ minimal", + "Ġmin imal", + "Ġmini mal", + "Ġminim al", + "Ġ Files", + "ĠF iles", + "ĠFile s", + "ĠFil es", + "ĠFi les", + "Ġt amb", + "Ġta mb", + "Ġtam b", + "ë¡ ľ", + "Ġ Release", + "ĠR elease", + "ĠRe lease", + "ĠRel ease", + "4 25", + "42 5", + ". resize", + ".re size", + ".res ize", + "Ġ Ï", + "c ollect", + "col lect", + "coll ect", + "= p", + "ĠLI ABLE", + "Ġp roducing", + "Ġprodu cing", + "Ġprod ucing", + "- wrapper", + "-w rapper", + "-wrap per", + "Ġs ingles", + "Ġsingle s", + "Ġsin gles", + "Ġsing les", + "ĠN BA", + "ĠNB A", + "o rr", + "or r", + "e ren", + "er en", + "ere n", + ". addAction", + ".add Action", + "Ġ thesis", + "Ġth esis", + "Ġthe sis", + "d n", + "P TY", + "PT Y", + ". des", + ".d es", + ".de s", + "Ġb acter", + "Ġba cter", + "Ġbac ter", + "Ġ Express", + "ĠEx press", + "ĠExp ress", + "ĠExpr ess", + "Ġ *)Ċ", + "Ġ* )Ċ", + "Ġ*) Ċ", + "å ij", + "/ admin", + "/ad min", + "se conds", + "sec onds", + "second s", + "åĬ Ł", + "uss ion", + "a beth", + "ab eth", + "abe th", + "abet h", + "Ġ Computer", + "ĠCom puter", + "ĠComp uter", + "ĠCompute r", + "ĠComput er", + "Ġr uling", + "Ġru ling", + "(\" ../", + "(\". ./", + "(\".. /", + ". GET", + ".G ET", + "ĠMe dal", + "ĠMed al", + "ition ally", + "itional ly", + "com mit", + "comm it", + "f ocus", + "fo cus", + "_ LEVEL", + "_LE VEL", + "i nda", + "in da", + "ind a", + "F act", + "Fac t", + "Fa ct", + "= np", + "=n p", + "=\" \">Ċ", + "=\"\" >Ċ", + "=\"\"> Ċ", + "Ġsub sequent", + "Ġsubsequ ent", + "pos able", + "- fluid", + "-fl uid", + "Ġth orough", + "Ġtho rough", + "Ġthor ough", + "Ġpublic ly", + "Ġpubli cly", + "ap ters", + "apt ers", + "apter s", + "Ġ Wilson", + "ĠWil son", + "_ PRE", + "_P RE", + "_PR E", + "y ard", + "ya rd", + "yar d", + "ä ¼", + "ĉ in", + "ĉi n", + "3 39", + "33 9", + "Ġre vers", + "Ġrev ers", + "Ġreve rs", + "Ġrever s", + "Ġ bullet", + "Ġb ullet", + "Ġbul let", + "Ġbull et", + "cri bed", + "cribe d", + "nes ota", + "Ġ ($_", + "Ġ( $_", + "Ġ($ _", + "an non", + "ann on", + "anno n", + "c ursor", + "curso r", + "Ġclo thing", + "Ġcloth ing", + "Ġ Multi", + "ĠM ulti", + "ĠMult i", + "ĠMul ti", + "2 87", + "28 7", + ": ',", + ":' ,", + "Ġv ess", + "Ġve ss", + "Ġves s", + "ord inator", + "ordin ator", + "Ġe inem", + "Ġein em", + "Ġeine m", + "Ġei nem", + "C annot", + "Can not", + "Ġ armed", + "Ġar med", + "Ġarm ed", + "ĉ V", + "ä¸ Ĭ", + ". Flat", + ".F lat", + ".Fl at", + "Ġ Sep", + "ĠS ep", + "ĠSe p", + "Ġ Subject", + "ĠSub ject", + "ĠSu bject", + "_ font", + "_f ont", + "Ġcharacter istics", + "Ġcharacteristic s", + "D one", + "Do ne", + "Don e", + "e ln", + "el n", + "#### ########", + "######## ####", + "##### #######", + "###### ######", + "####### #####", + "P OS", + "PO S", + "Ġ density", + "Ġd ensity", + "Ġdens ity", + "Ġ Platform", + "ĠPl atform", + "ĠPlat form", + "- items", + "-item s", + "-i tems", + "-it ems", + "Ġ overs", + "Ġo vers", + "Ġover s", + "Ġov ers", + "Ġp ushing", + "Ġpush ing", + "ç ¤", + ". Connection", + ".Con nection", + ".Connect ion", + ".Conn ection", + "_ term", + "_t erm", + "_te rm", + "_ter m", + "Ġinitial ization", + "________________ ________________", + "ç ¬", + ". document", + ".d ocument", + ".doc ument", + "l esh", + "le sh", + "les h", + "ĉ document", + "ĉd ocument", + "ĉdoc ument", + "Ġ Pin", + "ĠP in", + "ĠPi n", + "ç a", + "Ġ definitions", + "Ġdefinition s", + "Ġdefinit ions", + "Ġdefin itions", + ". Path", + ".P ath", + "_ WRITE", + "_W RITE", + "_WR ITE", + "Ġ ĉĊ", + "Ġĉ Ċ", + "? >ĊĊ", + "?> ĊĊ", + "?>Ċ Ċ", + "Ġter rible", + "Ġterr ible", + "b ean", + "be an", + "ick ets", + "icket s", + "Ġ SV", + "ĠS V", + "B uy", + "Bu y", + "( task", + "(t ask", + "Ġreg ime", + "g oogle", + "go ogle", + "goog le", + "goo gle", + "Ġc rack", + "Ġcr ack", + "Ġcra ck", + ". visit", + ".vis it", + "N UM", + "NU M", + "e nergy", + "en ergy", + "ener gy", + "Ġs truck", + "Ġstr uck", + "Ġstru ck", + "_ sample", + "_s ample", + ". payload", + ".p ayload", + ".pay load", + "Ġre vis", + "Ġrev is", + "Ġ Scene", + "ĠS cene", + "ĠSc ene", + "Ġ pg", + "Ġp g", + "Ġbreak fast", + "URRE NT", + ". charAt", + ".char At", + "_ exception", + "_ex ception", + "_except ion", + "ĠA nton", + "ĠAn ton", + "ĠAnt on", + "Ġguide lines", + "Ġguid elines", + "Ġguideline s", + "Ġex haust", + "Ġ Financial", + "ĠFin ancial", + "Ġ indent", + "Ġin dent", + "Ġind ent", + "Ġinde nt", + "Ġ desktop", + "Ġd esktop", + "Ġdes ktop", + "Ġdesk top", + "H idden", + "Hi dden", + "F ailure", + "Fail ure", + "Ġpr inciple", + "Ġprincip le", + "Ġprinc iple", + "Ġ iv", + "Ġi v", + "Ġs eks", + "Ġse ks", + "Ġsek s", + "n etwork", + "net work", + "Ġ numberOf", + "Ġnumber Of", + "Ġ Albert", + "ĠAl bert", + "ĠAlb ert", + "ĉ long", + "ĉl ong", + "8 01", + "80 1", + ", .", + "Ġ zeros", + "Ġz eros", + "Ġzero s", + "Ġze ros", + "Ġzer os", + "f ade", + "fa de", + "fad e", + "Ġ Typ", + "ĠT yp", + "ĠTy p", + "Ġ Term", + "ĠT erm", + "ĠTe rm", + "ĠTer m", + "ĠA rts", + "ĠAr ts", + "ĠArt s", + ". Application", + ".App lication", + ".Ap plication", + "Ġbe half", + "Ġbeh alf", + "æĪ ·", + "Ġ mere", + "Ġm ere", + "Ġme re", + "Ġmer e", + "( `${", + "(` ${", + "Ġaware ness", + "el pers", + "elp ers", + "elper s", + "f lix", + "fl ix", + "Ġ weigh", + "Ġwe igh", + "Ġwei gh", + "Ġest imates", + "Ġestim ates", + "Ġestimate s", + ". child", + ".ch ild", + "/ O", + "Ġ Bitmap", + "ĠB itmap", + "ĠBit map", + ". bottom", + ".b ottom", + ".bot tom", + "Ġ** ************************************************************************", + "Ġ************************************************************************ **", + "Ex pect", + "Exp ect", + "en to", + "ent o", + "Ġ Forum", + "ĠF orum", + "ĠFor um", + "ĠFo rum", + "v eral", + "ver al", + "ve ral", + "Ġj ail", + "Ġja il", + "Ġ abilities", + "Ġab ilities", + "ĠH OLD", + "ĠHO LD", + "ĠHOL D", + "Ġ Cit", + "ĠC it", + "ĠCi t", + "Ġd ynam", + "Ġdy nam", + "Ġdyn am", + "Ġ gray", + "Ġg ray", + "Ġgr ay", + "Ġgra y", + "ĉ ĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉ ĉ", + ". nextInt", + ".next Int", + "ant ly", + "ĠAR ISING", + "( private", + "(pr ivate", + "(priv ate", + "Ġ rejected", + "Ġre jected", + "Ġreject ed", + "Ġrej ected", + "Ġ Nic", + "ĠN ic", + "ĠNi c", + "Ġle ather", + "= {Ċ", + "={ Ċ", + "aly tics", + "t hetic", + "th etic", + "the tic", + ". Top", + ".T op", + ".To p", + "3 73", + "37 3", + ". Page", + ".P age", + "={ `", + "Ġ ;čĊ", + "Ġ; čĊ", + "de pth", + "dep th", + "dept h", + "m ann", + "man n", + "ma nn", + "W D", + "Ġ Som", + "ĠS om", + "ĠSo m", + ". Right", + ".R ight", + "Ġ )}Ċ", + "Ġ) }Ċ", + "Ġ trait", + "Ġt rait", + "Ġtr ait", + "Ġtra it", + "Ġtrai t", + "à Ĺ", + "i ac", + "ia c", + "Ġ rv", + "Ġr v", + "S ample", + "Sam ple", + ". Xml", + ".X ml", + "o pped", + "op ped", + "opp ed", + "Ġ ÑĦ", + "ĠÑ Ħ", + "l ists", + "li sts", + "list s", + "lis ts", + "Ġt ear", + "Ġte ar", + "Ġtea r", + "ivers ary", + ". collection", + ".c ollection", + ".col lection", + ".collect ion", + ".coll ection", + "ĠCon stitution", + "ĠConst itution", + "ĠConstit ution", + "Ġ HttpResponse", + "ĠHttp Response", + "Ġbr ill", + "Ġbri ll", + "Ġ Prom", + "ĠP rom", + "ĠPro m", + "ĠPr om", + "h over", + "ho ver", + "3 66", + "36 6", + "Ġ Miami", + "ĠM iami", + "ĠMi ami", + "ĠMia mi", + "Ġar gue", + "Ġarg ue", + "_ float", + "_f loat", + "5 04", + "50 4", + "Ġ ãĤ", + "Ġ nat", + "Ġn at", + "Ġna t", + "ĠT al", + "ĠTa l", + "Ġ integration", + "Ġint egration", + "Ġinteg ration", + "Ġintegr ation", + "( cur", + "(c ur", + "Ġre moving", + "Ġrem oving", + "Ġ coeff", + "Ġc oeff", + "Ġco eff", + "Ġcoef f", + "Ġ Though", + "ĠTh ough", + "ĠThou gh", + "Ġ forecast", + "Ġfor ecast", + "Ġfore cast", + "4 08", + "40 8", + "ĠV egas", + "ĠVe gas", + "ĠVega s", + "ĠVeg as", + "S ite", + "Si te", + "Sit e", + "3 46", + "34 6", + "Ġt rab", + "Ġtr ab", + "Ġtra b", + "Ġ Henry", + "ĠHen ry", + "- i", + "Ġinv olves", + "Ġinvol ves", + "Ġinvolve s", + "B T", + "Ġs lo", + "Ġsl o", + "In voke", + "Inv oke", + "Ġl ucky", + "Ġluck y", + "Ġlu cky", + "Ġluc ky", + "0 25", + "02 5", + "r at", + "ra t", + "Ġ ?Ċ", + "Ġ? Ċ", + "Ġ handled", + "Ġhand led", + "Ġhandle d", + "( fd", + "(f d", + "cont ents", + "content s", + "conte nts", + "Ġ OFF", + "ĠO FF", + "ĠOF F", + "R F", + "Ġ sty", + "Ġs ty", + "Ġst y", + "Ġ Motor", + "ĠM otor", + "ĠMo tor", + "ĠMot or", + "ĠMoto r", + "t ery", + "ter y", + "te ry", + "t ax", + "ta x", + "M AP", + "MA P", + "Ġ Mrs", + "ĠM rs", + "ĠMr s", + "Ġ phones", + "Ġph ones", + "Ġphone s", + "Ġphon es", + "Ġ UIView", + "ĠUI View", + "\" )));Ċ", + "\") ));Ċ", + "\")) );Ċ", + "\"))) ;Ċ", + "\"))); Ċ", + "( dev", + "(d ev", + "(de v", + "ĠI rish", + "ĠIr ish", + "ĠIris h", + "0 19", + "01 9", + "Ġ ws", + "Ġw s", + "D I", + "_ OFFSET", + "_OFF SET", + "Ġ Events", + "ĠE vents", + "ĠEvent s", + "ĠEven ts", + "ĠEv ents", + "ĠEve nts", + "Ġst ages", + "Ġstage s", + "Ġsta ges", + "Ġstag es", + "Ġ }//", + "Ġ} //", + "Ġh aben", + "Ġhab en", + "Ġha ben", + "Ġhabe n", + "ST ANCE", + "Ġ Sin", + "ĠS in", + "ĠSi n", + "Ġ Money", + "ĠM oney", + "ĠMon ey", + "ĠMo ney", + "( top", + "(t op", + "(to p", + "Ġ appointment", + "Ġapp ointment", + "Ġappoint ment", + "V ERSION", + "VER SION", + "VERS ION", + "m etadata", + "met adata", + "meta data", + "_ comment", + "_com ment", + "_comm ent", + "Ġcolle agues", + "Ġcolleague s", + "m aps", + "ma ps", + "map s", + "â ĺ", + "Ċ ĉĊ", + "( al", + "(a l", + "_ req", + "_re q", + "_r eq", + "Ġf ut", + "Ġfu t", + "Ġ architecture", + "Ġarch itecture", + "Ġarchitect ure", + "Ġarchit ecture", + "3 51", + "35 1", + "ĠWH ETHER", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "_ screen", + "_s creen", + "_sc reen", + "_scr een", + "Ġstyle Urls", + "Ġ monster", + "Ġmon ster", + ". up", + ".u p", + "ph ia", + "phi a", + "Ġ processor", + "Ġprocess or", + "Ġproc essor", + "Ġprocesso r", + "Ġ Terr", + "ĠT err", + "ĠTe rr", + "ĠTer r", + "= ',", + "=' ,", + "Ġ Manufact", + "ĠMan ufact", + "Ġ NT", + "ĠN T", + "k el", + "ke l", + "i bern", + "ib ern", + "iber n", + "ibe rn", + "ĉ file", + "ĉf ile", + "ĉfi le", + "A li", + "Al i", + "rient ation", + "Ġ //!", + "Ġ// !", + "ap ore", + "apor e", + "apo re", + "an eous", + "ane ous", + "Ġ Creat", + "ĠC reat", + "ĠCr eat", + "ĠCre at", + "f older", + "fo lder", + "fol der", + "fold er", + "4 15", + "41 5", + "Ġ hay", + "Ġh ay", + "Ġha y", + "Sup press", + "( left", + "(l eft", + "(le ft", + "Ġe uro", + "Ġeu ro", + "Ġdis claimer", + "u stry", + "us try", + "ust ry", + "ustr y", + "s hips", + "sh ips", + "ship s", + "shi ps", + "_ fd", + "_f d", + "Ġ Fa", + "ĠF a", + "_ insert", + "_in sert", + "_ins ert", + "Ġ rol", + "Ġr ol", + "Ġro l", + "if ting", + "ift ing", + "Ġ Comments", + "ĠCom ments", + "ĠComm ents", + "ĠComment s", + "_ br", + "_b r", + "Ġlos ses", + "Ġloss es", + "Ġ Added", + "ĠAd ded", + "ĠAdd ed", + "ch arg", + "char g", + "cha rg", + "Ġ по", + "Ġп о", + "_ system", + "_s ystem", + "_sys tem", + "_sy stem", + "Ġ Sometimes", + "ĠS ometimes", + "ĠSome times", + "ĠSom etimes", + "Ġ Spain", + "ĠS pain", + "ĠSp ain", + "ĠSpa in", + "( group", + "(g roup", + "(gr oup", + "i alis", + "ial is", + "ia lis", + "iali s", + "Ġd ollar", + "Ġdoll ar", + "Ġdol lar", + "Ġ Args", + "ĠAr gs", + "ĠArg s", + "4 99", + "49 9", + "2 97", + "29 7", + "qu ires", + "quire s", + "quir es", + "qui res", + "Ġ Ten", + "ĠT en", + "ĠTe n", + ". scss", + ".s css", + ".sc ss", + "Ġsurv ive", + "Ġsurviv e", + "u sage", + "us age", + "usa ge", + "Ġ jun", + "Ġj un", + "Ġju n", + "im iter", + "imit er", + "imi ter", + "ï¼ģ ĊĊ", + "ï¼ģĊ Ċ", + "Ġf ifth", + "Ġfif th", + "t oggle", + "tog gle", + "Ġde cline", + "Ġdec line", + "Ġdecl ine", + "( $\"", + "($ \"", + "( Long", + "(L ong", + "i nge", + "in ge", + "ing e", + "Ġp ilot", + "Ġpi lot", + "Ġpil ot", + "- light", + "-l ight", + "-li ght", + "- radius", + "-r adius", + "-rad ius", + "Ġp odcast", + "Ġpod cast", + "Ġn aturally", + "Ġnatural ly", + "Ġnatur ally", + "Ġnat urally", + "P ages", + "Page s", + "Pa ges", + "Pag es", + "ä¸ º", + "Ġ Despite", + "ĠDes pite", + "Ġl ighting", + "Ġlight ing", + "Ġ crate", + "Ġc rate", + "Ġcr ate", + "Ġcra te", + "Ġ Binary", + "ĠB inary", + "ĠBin ary", + "Ġred ucing", + "Ġredu cing", + "Ġe leg", + "Ġel eg", + "Ġele g", + "Ġ Mouse", + "ĠM ouse", + "ĠMo use", + "ĠMou se", + "ĠTest Bed", + "Ġbefore Each", + "_ ARRAY", + "_AR RAY", + "_ARR AY", + "Re direct", + "Red irect", + "3 29", + "32 9", + "Ġf lood", + "Ġfl ood", + "Ġflo od", + "Ġ ships", + "Ġs hips", + "Ġsh ips", + "Ġship s", + "3 63", + "36 3", + "Ġelectric ity", + "Ġelectr icity", + ") *(", + ")* (", + "ê ¸", + "Ġ Viet", + "ĠV iet", + "ĠVi et", + "ĠVie t", + "h ero", + "he ro", + "her o", + "Ġ dia", + "Ġd ia", + "Ġdi a", + "Ġ Kent", + "ĠK ent", + "ĠKe nt", + "ĠKen t", + "he art", + "hea rt", + "hear t", + "Ġthreat s", + "_ acc", + "_a cc", + "_ac c", + "Ġ symbols", + "Ġs ymbols", + "Ġsymbol s", + "Ġsymb ols", + "is chen", + "isc hen", + "ische n", + "isch en", + "_ inst", + "_in st", + "_i nst", + "_ins t", + "C riterion", + "Ġ TIM", + "ĠT IM", + "ĠTI M", + ". Height", + ".H eight", + ".He ight", + "5 80", + "58 0", + "Ġ âĢĻ", + "ĠâĢ Ļ", + "( );ĊĊĊ", + "() ;ĊĊĊ", + "();Ċ ĊĊ", + "();ĊĊ Ċ", + "(); ĊĊĊ", + "Product s", + "Produ cts", + "_ SP", + "_S P", + "Ġ Cy", + "ĠC y", + "Ġ dependent", + "Ġdep endent", + "Ġdepend ent", + "e ste", + "es te", + "est e", + "Ġ datos", + "Ġd atos", + "Ġda tos", + "Ġdat os", + "Ġdato s", + "d it", + "di t", + "а в", + "аР²", + "IG NAL", + "IGN AL", + "Ġ lesson", + "Ġl esson", + "Ġle sson", + "Ġless on", + "Ġles son", + "\" >'", + "\"> '", + "Ġ Cover", + "ĠC over", + "ĠCo ver", + "ĠCov er", + "ĠCove r", + "Ġ Hope", + "ĠH ope", + "ĠHo pe", + "ĠHop e", + "Ġ Timer", + "ĠT imer", + "ĠTime r", + "ĠTim er", + "ĠTi mer", + "Ġ dad", + "Ġd ad", + "Ġda d", + "v iders", + "vid ers", + "vider s", + "vi ders", + "vide rs", + "Ġ Phot", + "ĠP hot", + "ĠPh ot", + "/ ?", + "r opy", + "ro py", + "rop y", + "o ming", + "om ing", + "omin g", + "omi ng", + "as ion", + "asi on", + "asio n", + "Ġ \\(", + "Ġ\\ (", + "Ġ ET", + "ĠE T", + "Ġ Reading", + "ĠRe ading", + "ĠRead ing", + "Ġep isodes", + "Ġepisode s", + "Ġepis odes", + "l m", + "4 21", + "42 1", + "e cha", + "ec ha", + "ech a", + "Ġne uro", + "Ġneu ro", + "Ġneur o", + "8 20", + "82 0", + "Ġhar mon", + "Ġharm on", + "Ġlib eral", + "Ġliber al", + "- ind", + "-in d", + "-i nd", + "3 93", + "39 3", + "D ATA", + "DA TA", + "DAT A", + "Ġevery day", + "Ġdi vided", + "Ġdiv ided", + "Ġdivide d", + "Ġdivid ed", + "ĠActive Record", + "f igure", + "fig ure", + "figur e", + "U A", + "ä ¹", + "riend ly", + "t ech", + "te ch", + "tec h", + "6 01", + "60 1", + ". gameObject", + ".game Object", + "и ÑĤÑĮ", + "иÑĤ ÑĮ", + "3 74", + "37 4", + "Ġ moon", + "Ġm oon", + "Ġmo on", + "Ġmoo n", + "f time", + "ft ime", + "Ġ noch", + "Ġn och", + "Ġno ch", + "Ġnoc h", + "ĠT ORT", + "ĠTO RT", + "ĠTOR T", + "Ġ VM", + "ĠV M", + ". initial", + ".in itial", + ".init ial", + "( child", + "(ch ild", + "Ġmus ical", + "Ġmusic al", + "Ġmusica l", + "Ġ oc", + "Ġo c", + "b as", + "ba s", + "Ġ Hay", + "ĠH ay", + "ĠHa y", + "3 61", + "36 1", + "_ long", + "_l ong", + "_lo ng", + "_lon g", + "Ġ memset", + "Ġmem set", + "i ley", + "il ey", + "ile y", + "adel phia", + "S V", + "ro at", + "_ tx", + "_t x", + "Ġ lon", + "Ġl on", + "Ġlo n", + "Ġng OnInit", + "ĠngOn Init", + "b p", + "Ġ Golden", + "ĠGold en", + "ĠGol den", + "A CHE", + "AC HE", + "ACH E", + "Ġwor ried", + "a zi", + "az i", + "E ar", + "T ake", + "Ta ke", + "Tak e", + "( fp", + "(f p", + "burg h", + "bur gh", + "_ Data", + "_D ata", + "g res", + "gr es", + "gre s", + "Ġ Ont", + "ĠO nt", + "ĠOn t", + "p us", + "pu s", + "Ġ transparent", + "Ġtrans parent", + "Ġp ocket", + "Ġpo cket", + "Ġpoc ket", + "Ġ ram", + "Ġr am", + "Ġra m", + "igration s", + "igr ations", + ". čĊčĊ", + ".čĊ čĊ", + "Ġ [(", + "Ġ[ (", + "Ġadopt ed", + "Ġreport edly", + "Ġreported ly", + "Ġ Dream", + "ĠD ream", + "ĠDr eam", + "ĠDre am", + "Ġ }));Ċ", + "Ġ} ));Ċ", + "Ġ}) );Ċ", + "Ġ})) ;Ċ", + "l osing", + "lo sing", + "los ing", + "Ġte eth", + "Ġtee th", + "Ġ Books", + "ĠB ooks", + "ĠBo oks", + "ĠBook s", + "ĠBoo ks", + "\" ,&", + "\", &", + "en ny", + "enn y", + "L EMENT", + "LE MENT", + "LEM ENT", + "Ġ gel", + "Ġg el", + "Ġge l", + "Ġ Plant", + "ĠP lant", + "ĠPl ant", + "ĠPlan t", + "ĠPla nt", + "4 37", + "43 7", + "! âĢĿ", + ". host", + ".h ost", + "Ġ Reply", + "ĠRe ply", + "ĠRep ly", + "3 76", + "37 6", + "r ength", + "re ngth", + "ren gth", + "Ġrec ognition", + "Ġrecogn ition", + "Ġ }}>Ċ", + "Ġ} }>Ċ", + "Ġ}} >Ċ", + "Ġ}}> Ċ", + "L A", + "Ġ mirror", + "Ġm irror", + "Ġmir ror", + "Ġmi rror", + "Ġ assistant", + "Ġass istant", + "Ġassist ant", + "( device", + "(d evice", + "(de vice", + "(dev ice", + "Ġspirit ual", + "b uilder", + "build er", + "bu ilder", + " §", + "Ġo utr", + "Ġout r", + "Ġou tr", + "Ġ tt", + "Ġt t", + "Ġ PER", + "ĠP ER", + "ĠPE R", + "Ġrad ical", + "Ġradi cal", + "Method s", + "Ġ pace", + "Ġp ace", + "Ġpa ce", + "Ġpac e", + "u dy", + "ud y", + "Ġg ut", + "Ġgu t", + "Ġ Greek", + "ĠG reek", + "ĠGre ek", + "ĠGree k", + "Ġ nonatomic", + "Ġnon atomic", + "Ġ Paper", + "ĠP aper", + "ĠPa per", + "ĠPap er", + "_ GPIO", + "_G PIO", + "_GP IO", + "Ġo bst", + "Ġob st", + "Ġobs t", + ". Ad", + ".A d", + "viron ments", + "vironment s", + "ĠS ov", + "ĠSo v", + "3 56", + "35 6", + "( con", + "(c on", + "(co n", + "Ġ Transaction", + "ĠTrans action", + ". assign", + ".as sign", + "ĉ catch", + "ĉc atch", + "ĉcat ch", + "el ter", + "elt er", + "Ġ bitcoin", + "Ġbit coin", + "_ GR", + "_G R", + "Ġ čĊ", + "Ġ/ >čĊ", + "Ġ/> čĊ", + "m etic", + "me tic", + "met ic", + "Ġtrans formation", + "Ġtransform ation", + "åı ·", + "Ġ rgb", + "Ġr gb", + "Ġrg b", + "istrib utions", + "istribution s", + "Ġ implicit", + "Ġimp licit", + "Ġimpl icit", + "Ġimplic it", + "/ in", + "/i n", + "d estination", + "dest ination", + "а ÑĤÑĮ", + "аÑĤ ÑĮ", + "Z ero", + "Ze ro", + "Ġ unset", + "Ġun set", + "Ġuns et", + "9 20", + "92 0", + ". where", + ".w here", + ".wh ere", + ". go", + ".g o", + "Ġ formation", + "Ġform ation", + "Ġformat ion", + "Ġforma tion", + "Ġ declaration", + "Ġde claration", + "Ġdeclar ation", + "( )čĊčĊ", + "() čĊčĊ", + "()čĊ čĊ", + "Ġ Expl", + "ĠEx pl", + "ĠExp l", + "ĉ ĉĉĠĠ", + "ĉĉ ĉĠĠ", + "ĉĉĉ ĠĠ", + "ĉĉĉĠ Ġ", + "/ pro", + "/p ro", + "/pr o", + ". JSON", + ".J SON", + "4 41", + "44 1", + "Ġ desk", + "Ġd esk", + "Ġde sk", + "Ġdes k", + ". substr", + ".sub str", + "// ----------------------------------------------------------------------------", + "//---------------------------------------------------------------- ------------", + "//------------------------------------------------ ----------------------------", + "l yn", + "ly n", + "p son", + "ps on", + "4 07", + "40 7", + "d isable", + "dis able", + "Ġ Func", + "ĠF unc", + "ĠFun c", + "ĠFu nc", + "ĉ Assert", + "Ġ MARK", + "ĠM ARK", + "ĠMA RK", + "ĠMAR K", + "Ġde feat", + "Ġdef eat", + "Ġdefe at", + "Ġ blind", + "Ġbl ind", + "Ġbli nd", + "Ġ constants", + "Ġcon stants", + "Ġconst ants", + "Ġconstant s", + "3 62", + "36 2", + ". headers", + ".head ers", + ".header s", + ".he aders", + "U ILD", + "UI LD", + "UIL D", + "Ġ expenses", + "Ġexp enses", + "Ġexpense s", + "P ixel", + "Pix el", + "Ġ hr", + "Ġh r", + "Ġ fel", + "Ġf el", + "Ġfe l", + "Ġ Eastern", + "ĠEast ern", + "ĠEaster n", + "4 24", + "42 4", + "4 90", + "49 0", + "_ del", + "_d el", + "_de l", + "3 57", + "35 7", + "ĠC ub", + "ĠCu b", + "Ġ sq", + "Ġs q", + "ĉ count", + "ĉc ount", + "Ġ Directory", + "ĠD irectory", + "ĠDirect ory", + "ĠDirector y", + "Ġex clus", + "Ġexc lus", + "Ġexcl us", + "Ġ historic", + "Ġhistor ic", + "Ġhist oric", + "Ġhisto ric", + "Ġ ------------------------------------------------", + "Ġ---------------- --------------------------------", + "Ġ-------------------------------- ----------------", + "Ġ-------------------- ----------------------------", + "Ġ composition", + "Ġcom position", + "Ġcomp osition", + "Ġcompos ition", + "Ġ dataGridView", + "Ġdata GridView", + "Ġ Burn", + "ĠB urn", + "ĠBur n", + "ĠBu rn", + "Ġ BC", + "ĠB C", + "M aster", + "Ma ster", + "Mas ter", + "Ġ spawn", + "Ġs pawn", + "Ġsp awn", + "Ġspa wn", + "Ġ bearing", + "Ġb earing", + "Ġbe aring", + "Ġbear ing", + ". SetActive", + ".Set Active", + "i lo", + "il o", + "Ġ gallery", + "Ġg allery", + "Ġgall ery", + "Ġf ounded", + "Ġfound ed", + "Ġfo unded", + "Ġ availability", + "Ġa vailability", + "Ġav ailability", + "Ġavail ability", + ". sqrt", + ".s qrt", + "Ġ pes", + "Ġp es", + "Ġpe s", + "Ġ DOM", + "ĠD OM", + "ĠDO M", + "m ate", + "ma te", + "mat e", + "O ct", + "Ġ matched", + "Ġm atched", + "Ġmatch ed", + "Ġmat ched", + "it ivity", + "Ġan xiety", + ". price", + ".p rice", + ".pr ice", + "Ġ Instant", + "ĠIn stant", + "ĠInst ant", + "ĠIns tant", + "ì Ĭ", + "Ġt ut", + "Ġtu t", + "I Collection", + "IC ollection", + ". shared", + ".sh ared", + ".share d", + ".sha red", + "_ sql", + "_s ql", + "_sq l", + "t bl", + "tb l", + "l ibrary", + "lib rary", + "_ destroy", + "_d estroy", + "_de stroy", + "_dest roy", + "er mal", + "erm al", + "Ġ Notes", + "ĠN otes", + "ĠNo tes", + "ĠNot es", + "ĠNote s", + "Ġ Ein", + "ĠE in", + "Ġsou thern", + "Ġsouth ern", + "ĠOTHER WISE", + "Ġ macro", + "Ġm acro", + "Ġma cro", + "Ġmac ro", + ". lower", + ".l ower", + ".lo wer", + ".low er", + "c ls", + "cl s", + "Content View", + ". link", + ".l ink", + ".li nk", + ".lin k", + "con stant", + "const ant", + "cons tant", + "Ġ Bes", + "ĠB es", + "ĠBe s", + "Ġsome body", + "n b", + "3 99", + "39 9", + "\" >{", + "\"> {", + "( local", + "(l ocal", + "(loc al", + "(lo cal", + ". ....", + ".. ...", + "... ..", + ".... .", + "Ġ Null", + "ĠN ull", + "ĠNu ll", + "m x", + "Ġ ç", + "Ġà §", + "Ġ pause", + "Ġp ause", + "Ġpa use", + "Ġpau se", + "- ----------", + "-- ---------", + "---- -------", + "-------- ---", + "--- --------", + "----- ------", + "---------- -", + "------ -----", + "------- ----", + "--------- --", + "_ MO", + "_M O", + "Ġ CM", + "ĠC M", + "Ġfor Key", + "Ġ DVD", + "ĠD VD", + "ĠDV D", + "Ġ closest", + "Ġclose st", + "Ġclos est", + "Ġcloses t", + "_ DEVICE", + "_DE VICE", + "_DEV ICE", + "Ġ Stephen", + "ĠSte phen", + "ĠStep hen", + "ĠSteph en", + "Ġ BBC", + "ĠB BC", + "ĠBB C", + "Ġ Travel", + "ĠT ravel", + "ĠTr avel", + "ĠTra vel", + "ĠTrav el", + "P aint", + "Pa int", + "Ġ Results", + "ĠRes ults", + "ĠResult s", + "Ġ Rule", + "ĠR ule", + "ĠRu le", + "Ġ tp", + "Ġt p", + "Ġ ratings", + "Ġr atings", + "Ġrating s", + "Ġrat ings", + "Ġra tings", + "c in", + "ci n", + "c sv", + "cs v", + "> /", + "Ġ GOP", + "ĠG OP", + "ĠGO P", + "l ad", + "la d", + "Ġ ÑĢ", + "ĠÑ Ģ", + "Ġ indexPath", + "Ġindex Path", + "m atrix", + "mat rix", + "= f", + "ar sed", + "ars ed", + "arse d", + "Ġ });", + "Ġ} );", + "Ġ}) ;", + "Ġ Cos", + "ĠC os", + "ĠCo s", + "Ġ Score", + "ĠS core", + "ĠSc ore", + "ĠSco re", + "ĠScor e", + "Ġ tak", + "Ġt ak", + "Ġta k", + "Ġ ESP", + "ĠE SP", + "ĠES P", + "Ġ INC", + "ĠI NC", + "ĠIN C", + "_ NULL", + "_N ULL", + "- flex", + "-f lex", + "-fl ex", + "\" ][", + "\"] [", + "in to", + "int o", + "e land", + "el and", + "ela nd", + "elan d", + "Author ization", + "_ FALSE", + "_F ALSE", + "Ġ gate", + "Ġg ate", + "Ġga te", + "Ġ vid", + "Ġv id", + "Ġvi d", + "is tent", + "ist ent", + "iste nt", + "isten t", + "T IME", + "TI ME", + "TIM E", + "Ġ rewrite", + "Ġre write", + "Ġrew rite", + "Ġ tie", + "Ġt ie", + "Ġti e", + "Ġ archive", + "Ġa rchive", + "Ġarch ive", + "Ġarc hive", + "5 11", + "51 1", + ". events", + ".e vents", + ".event s", + ".ev ents", + ". getParameter", + ".get Parameter", + ".getParam eter", + "Ġ Permission", + "ĠPer mission", + "ĠPerm ission", + "Ġprogram me", + "Ġprogramm e", + "Ġ é", + "j ud", + "ju d", + "Ġcame ras", + "Ġcamera s", + "Ġcam eras", + "Ġcamer as", + "3 38", + "33 8", + "3 49", + "34 9", + "( sys", + "(s ys", + "ĠSy rian", + "ĠSyria n", + "Ġimpro vements", + "Ġimprove ments", + "Ġimprovement s", + "Ġimprov ements", + "Ġ hip", + "Ġh ip", + "Ġhi p", + "Ġsu icide", + "Ġsuic ide", + "Ġsch olar", + "Ġscho lar", + "Ġ compatible", + "Ġcom patible", + "Ġcompat ible", + "0 22", + "02 2", + "rem ote", + ". down", + ".d own", + ".do wn", + "F UNCTION", + "FUNC TION", + "FUN CTION", + "Ġman aging", + "Ġmana ging", + "Ġ UIKit", + "ĠUI Kit", + ". raw", + ".r aw", + ".ra w", + "> >>>", + ">> >>", + ">>> >", + "3 71", + "37 1", + "Ġdem ands", + "Ġdemand s", + "el lite", + "ell ite", + "elli te", + "Ġ dent", + "Ġd ent", + "Ġde nt", + "Ġden t", + "Ġ Micro", + "ĠM icro", + "ĠMi cro", + "ĠMic ro", + "åı ĸ", + "' ][$", + "'] [$", + "'][ $", + "Ġ IE", + "ĠI E", + "im ension", + "imens ion", + "Ġt rem", + "Ġtr em", + "Ġtre m", + "6 30", + "63 0", + "Ġg ained", + "Ġgain ed", + "Ġga ined", + ". with", + ".w ith", + ". ok", + ".o k", + "h ou", + "ho u", + "Ġb om", + "Ġbo m", + "amp aign", + "ampa ign", + "Ġ joining", + "Ġjoin ing", + "Ġjo ining", + "f ish", + "fi sh", + "Ġadd Subview", + "8 60", + "86 0", + "Ġnor thern", + "Ġnorth ern", + ". cor", + ".c or", + ".co r", + "o ret", + "or et", + "ore t", + "D ie", + "Di e", + "i nish", + "in ish", + "ini sh", + "inis h", + "_ comp", + "_c omp", + "_com p", + "_co mp", + "Ġ attended", + "Ġatt ended", + "Ġattend ed", + "Ġ collapse", + "Ġc ollapse", + "Ġcoll apse", + "Ġcollaps e", + "Ġ SS", + "ĠS S", + "a cent", + "ace nt", + "ac ent", + "acen t", + "_ EQUAL", + "_E QUAL", + "_EQ UAL", + "Ġ Deep", + "ĠDe ep", + "ĠDee p", + "R GB", + "RG B", + "ĉ test", + "ĉt est", + "ol ves", + "olve s", + "olv es", + "u set", + "us et", + "use t", + "Un ityEngine", + "Unity Engine", + "w riter", + "write r", + "wr iter", + "Re solver", + "Res olver", + "Resolve r", + ", %", + "if ference", + "iff erence", + "iffer ence", + "iffe rence", + "_ remove", + "_re move", + "_rem ove", + "o nda", + "on da", + "ond a", + "Ġf emme", + "Ġfem me", + "3 85", + "38 5", + "de code", + "dec ode", + "Br anch", + "Ġ flush", + "Ġf lush", + "Ġfl ush", + "Ġflu sh", + "Ġinnov ative", + "T ests", + "Test s", + "Te sts", + "Tes ts", + "Ġ[' ./", + "Ġ['. /", + "Ġ covering", + "Ġcover ing", + "Ġcov ering", + ". admin", + ".ad min", + "ulti part", + "ultip art", + "( lambda", + "(l ambda", + " namespace", + "Ġ Sport", + "ĠS port", + "ĠSp ort", + "ĠSpo rt", + "ĠSpor t", + "Ġ !(", + "Ġ! (", + "a cles", + "ac les", + "acle s", + "acl es", + "Ġde pression", + "Ġdep ression", + "Ġdepr ession", + "Ġdepress ion", + "ĠK ong", + "ĠKon g", + "ĠKo ng", + "5 70", + "57 0", + "Ġ pert", + "Ġp ert", + "Ġper t", + "Ġpe rt", + "Ġ Conn", + "ĠC onn", + "ĠCon n", + "ĠCo nn", + "Ġ Otherwise", + "ĠOther wise", + "/ home", + "/h ome", + "s upported", + "sup ported", + "support ed", + "Ġ pink", + "Ġp ink", + "Ġpi nk", + "Ġpin k", + "Ġinv ited", + "Ġinvite d", + "Ġinvit ed", + "ñ os", + "ño s", + "_ enabled", + "_en abled", + "_enable d", + "Ġ -Ċ", + "Ġ- Ċ", + "F W", + "e ners", + "en ers", + "ener s", + "ene rs", + "Ġ MY", + "ĠM Y", + "Ġs uggestions", + "Ġsuggest ions", + "Ġsuggestion s", + "C anvas", + "Can vas", + "Ġ fer", + "Ġf er", + "Ġfe r", + "Ġ Marketing", + "ĠMark eting", + "ĠMarket ing", + "@ Test", + "un tu", + "unt u", + "Ġ Ven", + "ĠV en", + "ĠVe n", + "Ġ Cou", + "ĠC ou", + "ĠCo u", + "i vals", + "iv als", + "ival s", + "iva ls", + "D onald", + "Don ald", + "l imited", + "lim ited", + "limit ed", + "ĉ ĉĉĉĉĉĊ", + "ĉĉ ĉĉĉĉĊ", + "ĉĉĉĉ ĉĉĊ", + "ĉĉĉ ĉĉĉĊ", + "ĉĉĉĉĉ ĉĊ", + "ĉĉĉĉĉĉ Ċ", + "Ġanal yst", + "Ġanaly st", + "Ġanalys t", + "( entry", + "(en try", + "(ent ry", + "Ġrepresent ative", + "_ attributes", + "_at tributes", + "_attribute s", + "_attrib utes", + "Ġ fur", + "Ġf ur", + "Ġfu r", + ". hide", + ".h ide", + "r esp", + "re sp", + "res p", + "ad ores", + "ado res", + "ador es", + "r ides", + "ri des", + "ride s", + "rid es", + "Ġ Josh", + "ĠJ osh", + "ĠJo sh", + "ĠJos h", + "r obot", + "ro bot", + "rob ot", + "ĠN AT", + "ĠNA T", + "Ġs esso", + "Ġses so", + "Ġsess o", + "Ġint egrated", + "Ġinteg rated", + "Ġintegr ated", + "Ġintegrate d", + ": true", + "p arts", + "par ts", + "part s", + "pa rts", + "Ġst upid", + "Ġstu pid", + "Ġstup id", + ": event", + ":e vent", + "@end section", + "Ġ pu", + "Ġp u", + ". Table", + ".T able", + ".Tab le", + "Ġ Yii", + "ĠY ii", + "ĠYi i", + "` ;ĊĊ", + "`;Ċ Ċ", + "`; ĊĊ", + "Ġ clang", + "Ġc lang", + "Ġcl ang", + "Ġclan g", + "Ġcla ng", + "=\" \">", + "=\"\" >", + "en gan", + "eng an", + "enga n", + "_ parameters", + "_param eters", + "_parameter s", + ". internal", + ".in ternal", + ".int ernal", + ".inter nal", + "Ġ Modern", + "ĠMod ern", + "ĠMode rn", + "ĠModer n", + "Ġ metric", + "Ġm etric", + "Ġmet ric", + "Ġ semi", + "Ġs emi", + "Ġse mi", + "Ġsem i", + "={ {Ċ", + "={{ Ċ", + "7 07", + "70 7", + ". amazon", + ".a mazon", + ".am azon", + "Ġ BB", + "ĠB B", + "ain ty", + "aint y", + "ai nty", + "view port", + "3 67", + "36 7", + "Ġstart Activity", + "dis patch", + "disp atch", + "* ****", + "** ***", + "**** *", + "*** **", + "Ġf lav", + "Ġfl av", + "Ġfla v", + "iffer ent", + "iffe rent", + "3 82", + "38 2", + "[ this", + "[t his", + "Ġs take", + "Ġst ake", + "Ġsta ke", + "Ġarg ued", + "Ġargue d", + "v iously", + "vious ly", + "vi ously", + ". work", + ".w ork", + "Ġ Oak", + "ĠO ak", + "O ld", + "Ol d", + "( async", + "(a sync", + "(as ync", + "n otes", + "not es", + "no tes", + "note s", + "Ġ flip", + "Ġf lip", + "Ġfl ip", + "Ġdis ag", + "Ġ TE", + "ĠT E", + "ĉ error", + "ĉe rror", + "ĉerr or", + "< '", + "Ġ »ĊĊ", + "Ġ» ĊĊ", + "Ġ»Ċ Ċ", + "Ġ filtered", + "Ġfil tered", + "Ġfilter ed", + "Ġfilt ered", + "ĠM ach", + "ĠMac h", + "ĠMa ch", + "Ġ hung", + "Ġh ung", + "Ġhun g", + "Ġhu ng", + "_ dump", + "_d ump", + "_ samples", + "_s amples", + "_sample s", + "- dismiss", + "-dis miss", + "Ġ ray", + "Ġr ay", + "Ġra y", + "Im plemented", + "Implement ed", + "D K", + "Ġ jed", + "Ġj ed", + "Ġje d", + "0 90", + "09 0", + "Ġbreak s", + "Ġbre aks", + "Ġ fits", + "Ġf its", + "Ġfit s", + "Ġfi ts", + ". gr", + ".g r", + "Ġ Zero", + "ĠZ ero", + "ĠZe ro", + "o ro", + "or o", + "Ġequ ally", + "Ġequal ly", + "Ġeq ually", + "Ġ '[", + "Ġ' [", + "Ġconcern ing", + "< meta", + "<", + "'> <", + "Ġpro mot", + "Ġprom ot", + "Ġpromo t", + "Ġ incl", + "Ġin cl", + "Ġinc l", + "_ only", + "_on ly", + "ë¥ ¼", + "ĠAtt orney", + "- date", + "-d ate", + "-da te", + "-dat e", + "Ġ landscape", + "Ġl andscape", + "Ġland scape", + "Ġlands cape", + "Ġlandsc ape", + "Ġ fu", + "Ġf u", + "S Y", + ". prop", + ".p rop", + ".pro p", + ".pr op", + "Ġ Arr", + "ĠA rr", + "ĠAr r", + "p ag", + "pa g", + "Parallel Group", + "' :čĊ", + "': čĊ", + "Ġ logs", + "Ġl ogs", + "Ġlo gs", + "Ġlog s", + "a unch", + "un ci", + "unc i", + "n ama", + "na ma", + "nam a", + "Table Cell", + "iss ues", + "issue s", + ". {", + "e curity", + "ec urity", + "_ exec", + "_e xec", + "_ex ec", + "_exe c", + "o lds", + "ol ds", + "old s", + "Ġ hosts", + "Ġhost s", + "Ġho sts", + "Ġhos ts", + "Ġ proto", + "Ġpro to", + "Ġpr oto", + "Ġprot o", + "_ import", + "_im port", + "_imp ort", + "_ sort", + "_s ort", + "_so rt", + "Ġ Bow", + "ĠB ow", + "ĠBo w", + "Ġ Normal", + "ĠN ormal", + "ĠNor mal", + "ĠNorm al", + "Ġ Farm", + "ĠF arm", + "ĠFar m", + "ĠFa rm", + ".create ParallelGroup", + "R otation", + "Rot ation", + ". err", + ".e rr", + ".er r", + "Ġp leased", + "Ġplease d", + "Ġple ased", + "Ġplea sed", + "Ġpleas ed", + "it age", + "ita ge", + "itag e", + ". Wh", + ".W h", + "ĉ ĉĠĠĠĠ", + "ĉĉ ĠĠĠĠ", + "ĉĉĠĠĠ Ġ", + "ĉĉĠ ĠĠĠ", + "ĉĉĠĠ ĠĠ", + "M R", + "Ġ MORE", + "ĠM ORE", + "ĠMO RE", + "ĠMOR E", + "Ġ Natural", + "ĠN atural", + "ĠNat ural", + "ĠNatur al", + "_ transform", + "_trans form", + "B ASE", + "BA SE", + "en eral", + "ener al", + "ene ral", + "u tdown", + "ut down", + ". commons", + ".com mons", + ".common s", + ".comm ons", + "W T", + "Ġ aan", + "Ġa an", + "Ġaa n", + ". Result", + ".Res ult", + "d og", + "do g", + "Ġcl icking", + "Ġclick ing", + "Ġclic king", + ") ,ĊĊ", + "), ĊĊ", + "),Ċ Ċ", + "# line", + "O perator", + "Oper ator", + "Op erator", + "Opera tor", + "Ġc iv", + "Ġci v", + "Ġm erg", + "Ġme rg", + "Ġmer g", + "o buf", + "ob uf", + "ng then", + "ngth en", + "Ġ [{", + "Ġ[ {", + "Ġc ancell", + "Ġcan cell", + "Ġcancel l", + "Ġcanc ell", + "tr igger", + "tri gger", + ". :", + "W ORK", + "WO RK", + "de clare", + "decl are", + "declar e", + "Ġde crease", + "Ġdecre ase", + "ÅĽ ci", + "l oom", + "lo om", + "loo m", + ". None", + ".N one", + ".No ne", + ".Non e", + "Ġ MI", + "ĠM I", + "Ġ Jason", + "ĠJ ason", + "ĠJa son", + "ĠJas on", + "Ġhealth care", + "ia mond", + "iam ond", + "iamo nd", + "s ylvania", + "* x", + "Ġ Ra", + "ĠR a", + "[ b", + "Ġ printing", + "Ġprint ing", + "Ġprin ting", + "ph abet", + "pha bet", + "Ġ Labour", + "ĠLa bour", + "ĠLab our", + "o pper", + "op per", + "opp er", + "Ġz ijn", + "Ġzi jn", + "Ġzij n", + "- target", + "-t arget", + "_ FUNCTION", + "_F UNCTION", + "_FUNC TION", + "_FUN CTION", + "Ġ oct", + "Ġo ct", + "Ġoc t", + "е ниÑı", + "ен иÑı", + "ени Ñı", + "åľ ¨", + "Ġ western", + "Ġwest ern", + "Ġwes tern", + "Ġcomp uters", + "Ġcomput ers", + "Ġcomputer s", + "Ġcompute rs", + "Ġ RET", + "ĠR ET", + "ĠRE T", + "Hash Map", + "[ String", + "[S tring", + "get Value", + "_ DATE", + "_D ATE", + "_DAT E", + "_DA TE", + ". Next", + ".N ext", + "ĠF if", + "ĠFi f", + "é l", + "ic ked", + "ick ed", + "æ İ", + "- MM", + "-M M", + "Ġ {ĊĊĊ", + "Ġ{ ĊĊĊ", + "Ġ{Ċ ĊĊ", + "Ġ{ĊĊ Ċ", + "Ġ contacts", + "Ġcont acts", + "Ġcontact s", + "Ġconta cts", + "Ġ digits", + "Ġd igits", + "Ġdig its", + "Ġdigit s", + "P rodu", + "Pro du", + "Pr odu", + "Prod u", + "Ġun usual", + "Ġunus ual", + "Ġrapid ly", + "t ures", + "ture s", + "tu res", + "tur es", + "Ġang ry", + "c ancel", + "can cel", + "x xxx", + "xx xx", + "xxx x", + "_ parser", + "_p arser", + "_parse r", + "_par ser", + "_pars er", + "id ity", + "idi ty", + "_ PREFIX", + "_P REFIX", + "_PRE FIX", + "_PREF IX", + "7 10", + "71 0", + "Ġm ehr", + "Ġme hr", + "Ġrare ly", + "Ġrar ely", + "e the", + "et he", + "eth e", + "o pes", + "op es", + "ope s", + "Ġ %.", + "Ġ% .", + "w orks", + "work s", + "wor ks", + "Ġ theta", + "Ġth eta", + "Ġthe ta", + "Ġcon tribution", + "Ġcontrib ution", + "Ġ Tony", + "ĠT ony", + "ĠTo ny", + "ĠTon y", + "Ġs quad", + "Ġsqu ad", + "5 37", + "53 7", + "а й", + "аР¹", + "Ġî n", + "t here", + "th ere", + "ther e", + "the re", + "o uted", + "ou ted", + "out ed", + "oute d", + "ĉ q", + "Ļ Ĥ", + "g ood", + "go od", + "goo d", + "L I", + "é¡ µ", + "Ġ Living", + "ĠL iving", + "ĠLi ving", + "ĠLiv ing", + "iz abeth", + "iza beth", + "Ġ kt", + "Ġk t", + "Ġ Dallas", + "ĠD allas", + "ĠDal las", + "] ],Ċ", + "]] ,Ċ", + "]], Ċ", + "Ġ />ĊĊ", + "Ġ/ >ĊĊ", + "Ġ/>Ċ Ċ", + "Ġ/> ĊĊ", + "Ġ raising", + "Ġr aising", + "Ġrais ing", + "Ġra ising", + "/ router", + "/r outer", + "_ game", + "_g ame", + "3 68", + "36 8", + "Ġ CUR", + "ĠC UR", + "ĠCU R", + "z ens", + "ze ns", + "zen s", + ". es", + ".e s", + "Ġ fontWeight", + "Ġfont Weight", + "( func", + "(f unc", + "(fun c", + "not ification", + "notif ication", + "Ġ' ../../../", + "Ġ'../ ../../", + "Ġ'../../ ../", + "Ġbl ame", + "Ġbla me", + "ãĢĤ ĊĊĊĊ", + "ãĢĤĊĊ ĊĊ", + "ãĢĤĊ ĊĊĊ", + "an co", + "anc o", + "9 80", + "98 0", + "Id entity", + "Ident ity", + "Ide ntity", + "f ollow", + "fol low", + "Ġ arts", + "Ġa rts", + "Ġar ts", + "Ġart s", + "x s", + "Ġoffic ially", + "Ġofficial ly", + "Ġ Studio", + "ĠSt udio", + "ĠStud io", + "ĠStudi o", + "Ġrecommend ations", + "Ġrecommendation s", + "Ġ locale", + "Ġl ocale", + "Ġlo cale", + "Ġloc ale", + "Ġlocal e", + "Ġam ateur", + "Ġamat eur", + "Ġ Enable", + "ĠE nable", + "ĠEn able", + "Ġ caps", + "Ġc aps", + "Ġcap s", + "Ġca ps", + ". End", + ".E nd", + ".En d", + "3 88", + "38 8", + "- add", + "-a dd", + "-ad d", + "_g shared", + "Ġ CT", + "ĠC T", + "F orce", + "For ce", + "Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "Ġ orange", + "Ġo range", + "Ġor ange", + "Ġorang e", + "Ġora nge", + "Ġoran ge", + "Ġ lp", + "Ġl p", + "Ġ answered", + "Ġanswer ed", + ". Grid", + ".G rid", + ".Gr id", + "Ġd ual", + "Ġdu al", + "Ġdua l", + "Ġstr ategic", + "Ġstrateg ic", + "Ġn obody", + "Ġno body", + "Ġnob ody", + "Ġ fatal", + "Ġf atal", + "Ġfa tal", + "Ġfat al", + "_ est", + "_e st", + "_es t", + "( el", + "(e l", + "Ġ ìł", + "Ġì ł", + "ĠB udd", + "ĠBu dd", + "ĠBud d", + "A IT", + "AI T", + "_ factor", + "_f actor", + "_fac tor", + "_fact or", + "_fa ctor", + "- one", + "-on e", + "-o ne", + "Ġ HAVE", + "ĠH AVE", + "ĠHA VE", + "\" čĊčĊ", + "\"čĊ čĊ", + "7 60", + "76 0", + "P rof", + "Pro f", + "Pr of", + "Ġ är", + "Ġä r", + "str ings", + "string s", + "Ġ dirty", + "Ġd irty", + "Ġdir ty", + "Ġdirt y", + "Ġ Face", + "ĠF ace", + "ĠFac e", + "ĠFa ce", + "Ġ Begin", + "ĠB egin", + "ĠBe gin", + "ĠBeg in", + "Ġ Bus", + "ĠB us", + "ĠBu s", + "Ġ wis", + "Ġw is", + "Ġwi s", + "åŃ Ĺ", + "Ġ speaker", + "Ġs peaker", + "Ġspe aker", + "Ġspeak er", + "Ġ carrier", + "Ġcar rier", + "Ġcarr ier", + "Ġ Om", + "ĠO m", + "Ġhad n", + "Ġha dn", + "Al low", + "All ow", + ":: __", + "::_ _", + "Ġ verb", + "Ġv erb", + "Ġver b", + "Ġve rb", + "Ġ Complete", + "ĠCom plete", + "ĠComp lete", + "ĠComple te", + "Ġ Easy", + "ĠE asy", + "ĠEa sy", + "Ġb ills", + "Ġbill s", + "Ġbil ls", + "Ġ ĠĊĊ", + "ĠĠ ĊĊ", + "ĠĠĊ Ċ", + "Vert ical", + "Ver tical", + "Ġ pron", + "Ġp ron", + "Ġpro n", + "Ġpr on", + "Ġ Define", + "ĠDe fine", + "ĠDef ine", + "Ġ lookup", + "Ġlook up", + "variable s", + "vari ables", + "Ġp andas", + "Ġpan das", + "Ġpand as", + "Ġpanda s", + "u mes", + "um es", + "ume s", + "Ġin noc", + "Ġinn oc", + "Ġ setUp", + "Ġset Up", + "ĠCh ampionship", + "ĠChampions hip", + "ĠChampion ship", + "art ist", + "arti st", + "ĠC Type", + "ĠCT ype", + "F oundation", + "Found ation", + "๠Ī", + "Ġ Setup", + "ĠSet up", + "4 28", + "42 8", + "Ġ recipes", + "Ġrec ipes", + "Ġrecipe s", + "Ġrecip es", + "Ġ UIColor", + "ĠU IColor", + "ĠUI Color", + "Ġ Fight", + "ĠF ight", + "ĠFig ht", + "ĠFi ght", + "Ġ authorized", + "Ġauthor ized", + "Ġauthorize d", + "_ click", + "_c lick", + "_cl ick", + "_cli ck", + "9 90", + "99 0", + "_ success", + "_s uccess", + "_succ ess", + "_su ccess", + "an gan", + "ang an", + "anga n", + "Ġ Mountain", + "ĠM ountain", + "ĠMount ain", + "Ġ Doctor", + "ĠDo ctor", + "ĠDoc tor", + "Ġ egg", + "Ġe gg", + "Ġeg g", + "ĠM edicine", + "ĠMed icine", + "ĠMedic ine", + "c les", + "cl es", + "cle s", + "` .Ċ", + "`. Ċ", + "[ int", + "[i nt", + "[in t", + "d ashboard", + "dash board", + "Ġ Appro", + "ĠApp ro", + "ĠAp pro", + "- dr", + "-d r", + "Ġprodu ces", + "Ġproduce s", + "Ġprod uces", + "Ġr ental", + "Ġren tal", + "Ġrent al", + "Ġ reload", + "Ġre load", + "Ġr eload", + "Ġrel oad", + "3 81", + "38 1", + "Ġ arrival", + "Ġarr ival", + "Ġarriv al", + "s pot", + "sp ot", + "spo t", + "Ġunder t", + "Ġund ert", + "Ġunde rt", + "3 78", + "37 8", + "Ġequ ipped", + "Ġequip ped", + "Ġ proved", + "Ġpro ved", + "Ġpr oved", + "Ġprov ed", + "Ġprove d", + "Ġ centers", + "Ġcent ers", + "Ġcenter s", + "Ġcen ters", + "Ġ defines", + "Ġdef ines", + "Ġdefine s", + "Ġdefin es", + "al so", + "als o", + "Ġ opacity", + "Ġop acity", + "Ġ Unfortunately", + "ĠUn fortunately", + "ĠIll inois", + "Ġ не", + "Ġн е", + "ĠT emple", + "ĠTem ple", + "ĠTemp le", + "ĠTempl e", + "Ġ Trail", + "ĠT rail", + "ĠTr ail", + "ĠTra il", + "Ġ Kelly", + "ĠK elly", + "ĠKel ly", + "Ġ measurement", + "Ġme asurement", + "Ġmeasure ment", + "Ġmeas urement", + "Ġse parated", + "Ġsepar ated", + "Ġseparate d", + "Ġseparat ed", + "- circle", + "-c ircle", + "H ey", + "He y", + "Ġ READ", + "ĠRE AD", + "ig its", + "igit s", + "igi ts", + "Ġ ib", + "Ġi b", + "Ġ MOD", + "ĠM OD", + "ĠMO D", + "at tery", + "att ery", + "atter y", + "atte ry", + "а з", + "аР·", + "Ġv end", + "Ġve nd", + "Ġven d", + "е нÑĤ", + "ен ÑĤ", + "Ġ HttpClient", + "ĠHttp Client", + "3 59", + "35 9", + "s afe", + "sa fe", + "_ ASS", + "_A SS", + "_AS S", + "i cit", + "ic it", + "ici t", + "Ġ Construct", + "ĠCon struct", + "ĠConstr uct", + "Ġ Clo", + "ĠC lo", + "ĠCl o", + "Ġ Six", + "ĠS ix", + "ĠSi x", + "_ TOKEN", + "_T OKEN", + "_TO KEN", + "( block", + "(b lock", + "(bl ock", + "Ġwar ned", + "Ġwarn ed", + "/* !", + "! Ċ", + "}/ >Ċ", + "}/> Ċ", + "Ġin novation", + "Ġinn ovation", + "Ġinnov ation", + "_ \"", + "Ġ );čĊčĊ", + "Ġ) ;čĊčĊ", + "Ġ); čĊčĊ", + "Ġ);čĊ čĊ", + "Ġ spots", + "Ġsp ots", + "Ġspot s", + "Ġspo ts", + "Ġcho osing", + ". cs", + ".c s", + "Ġf lexible", + "Ġflex ible", + "U Int", + "UI nt", + "4 35", + "43 5", + "9 30", + "93 0", + "Ġ scratch", + "Ġs cratch", + "Ġscr atch", + "- al", + "-a l", + "Ġf estival", + "Ġfest ival", + "Ġout standing", + "================ ================================", + "================================ ================", + "M ean", + "Me an", + "Ġ Oregon", + "ĠO regon", + "ĠOre gon", + "s ymbol", + "sym bol", + ". account", + ".a ccount", + ".ac count", + ".acc ount", + "d ney", + "dn ey", + "' ''", + "'' '", + "! \",", + "!\" ,", + "9 01", + "90 1", + "Ġ particle", + "Ġp article", + "Ġpart icle", + "Ġpartic le", + "Ġparti cle", + "à ĥ", + "[ MAX", + "[M AX", + "I VER", + "IV ER", + "IVE R", + "ER ENCE", + "NS Mutable", + "ĠC olumbia", + "ĠColum bia", + "_ ĊĊ", + "_Ċ Ċ", + ". fr", + ".f r", + "Ġc ogn", + "Ġco gn", + "Ġcog n", + "V R", + "Ġ Methods", + "ĠMethod s", + "ĠMeth ods", + "Ġ Made", + "ĠM ade", + "ĠMad e", + "ĠMa de", + "Ġ BR", + "ĠB R", + "Ġ Else", + "ĠE lse", + "ĠEl se", + "Ġeg gs", + "Ġegg s", + "Ġ swing", + "Ġs wing", + "Ġsw ing", + "Ġ Inv", + "ĠI nv", + "ĠIn v", + "Ġdise ases", + "Ġdisease s", + "Ġf irms", + "Ġfirm s", + "Ġfi rms", + "Ġfir ms", + "Ġ lemma", + "Ġl emma", + "Ġle mma", + "Ġlem ma", + "} `);Ċ", + "}` );Ċ", + "l ings", + "ling s", + "lin gs", + "Ġg ym", + "Ġgy m", + "umin um", + "umi num", + ". Trim", + ".T rim", + ".Tr im", + "M em", + "Me m", + "Ġcrit icism", + "Ġcritic ism", + "ibern ate", + "_ TX", + "_T X", + "i oni", + "ion i", + "io ni", + "Ġguid ance", + "Ġgui dance", + "Ġrepeated ly", + "Ġrepeat edly", + "Ġ supplier", + "Ġs upplier", + "Ġsup plier", + "Ġsuppl ier", + "Ġsupp lier", + "Ġp ainting", + "Ġpaint ing", + "Ġpain ting", + "8 64", + "86 4", + ". Fragment", + ".F ragment", + "ed Exception", + "Ġw iring", + "Ġwir ing", + "Ġwi ring", + "Ġcour ts", + "Ġcou rts", + "Ġcourt s", + "W EB", + "WE B", + "æľ ī", + "\\ .", + "ill ance", + "illa nce", + "Ġb rows", + "Ġbr ows", + "Ġbro ws", + "Ġbrow s", + "Ġ Pattern", + "ĠP attern", + "ĠPat tern", + "ĠPatt ern", + "PL ICATION", + "PLIC ATION", + "Ġ Summer", + "ĠS ummer", + "ĠSum mer", + "Ch ain", + "Cha in", + "Ġc ute", + "Ġcut e", + "Ġcu te", + "m ercial", + "mer cial", + "merc ial", + "Ġd il", + "Ġdi l", + "ĠFrank lin", + "ĉ global", + "ĉg lobal", + "IN CLUDING", + "h istory", + "hi story", + "hist ory", + "histor y", + "Ġ lst", + "Ġl st", + "Ġls t", + "Q t", + "S DL", + "SD L", + "a lia", + "al ia", + "ali a", + "i ere", + "ie re", + "ier e", + "( ...", + "(. ..", + "(.. .", + "ĉ cin", + "ĉc in", + "if fs", + "iff s", + "v elope", + "ve lope", + "vel ope", + "velop e", + "Ġ Root", + "ĠR oot", + "ĠRo ot", + "ĠRoo t", + "cl uster", + "clus ter", + "User Name", + "i gne", + "ig ne", + "ign e", + "< S", + "Ġ fest", + "Ġf est", + "Ġfe st", + "4 19", + "41 9", + "Ġindic ating", + "Ġindica ting", + "k eeper", + "ke eper", + "keep er", + "kee per", + "Ġc ada", + "Ġca da", + "Ġcad a", + "é g", + "con sin", + "cons in", + "Ġ GB", + "ĠG B", + "Ġ lb", + "Ġl b", + "e mony", + "em ony", + "emo ny", + "emon y", + "- icons", + "-icon s", + "-i cons", + "_ doc", + "_d oc", + "_do c", + "A ctor", + "Act or", + "Ac tor", + "e lem", + "el em", + "ele m", + ". Delete", + ".De lete", + "Ġin fection", + "Ġinf ection", + "Ġinfect ion", + "Ġ Privacy", + "ĠPriv acy", + "Ġgreat ly", + "Ġ Pos", + "ĠP os", + "ĠPo s", + "ĠT reat", + "ĠTr eat", + "ĠTre at", + "F low", + "Fl ow", + "Flo w", + "Ġat tractive", + "Ġattr active", + "Ġattract ive", + "Ġ Marc", + "ĠM arc", + "ĠMar c", + "ĠMa rc", + "s udo", + "su do", + "t esy", + "te sy", + "tes y", + "- an", + "-a n", + "9 98", + "99 8", + "ab ama", + "aba ma", + "Ġ Would", + "ĠW ould", + "ĠWo uld", + "Ġs uck", + "Ġsu ck", + "Ġsuc k", + "index Path", + "Ġ Et", + "ĠE t", + "T imes", + "Time s", + "Tim es", + "Ti mes", + "7 80", + "78 0", + "Ġ clubs", + "Ġcl ubs", + "Ġclub s", + "_ assoc", + "_as soc", + "_ass oc", + "Ġac quired", + "Ġacqu ired", + "Ġacquire d", + "( \":", + "(\" :", + "Ġint ense", + "Ġintens e", + ". maps", + ".m aps", + ".map s", + ".ma ps", + "Ex pected", + "Exp ected", + "Expect ed", + "T oggle", + "Ġ ay", + "Ġa y", + "Ġl ifestyle", + "Ġlife style", + "Ġlif estyle", + "- called", + "-c alled", + "-cal led", + "-call ed", + "Ġ Snow", + "ĠS now", + "ĠSn ow", + "ĠSno w", + "V olume", + "Vol ume", + "Ġcann abis", + "Ġ Direction", + "ĠD irection", + "ĠDirect ion", + "ĠDi rection", + "ĠDir ection", + "ĠDire ction", + "Ġ Limited", + "ĠL imited", + "ĠLim ited", + "ĠLimit ed", + "- specific", + "-s pecific", + "-spec ific", + "Ġd owntown", + "Ġdown town", + "Ġdownt own", + "/ icons", + "/i cons", + "/icon s", + "/ic ons", + "Ġre ven", + "Ġr even", + "Ġrev en", + "Ġreve n", + "L eg", + "Le g", + "8 85", + "88 5", + "= null", + "=n ull", + "4 96", + "49 6", + "Key board", + "' )).", + "') ).", + "')) .", + "Ġ\" \";čĊ", + "Ġ\"\" ;čĊ", + "Ġ\"\"; čĊ", + "Ġatt itude", + ". navigate", + ".n avigate", + ".nav igate", + "- error", + "-e rror", + "AM PLE", + "AMP LE", + "AMPL E", + "Ġ Jay", + "ĠJ ay", + "ĠJa y", + "v r", + "c ow", + "co w", + ". compile", + ".com pile", + ".comp ile", + "Ġmem ories", + "Ġmemor ies", + "Ġmemo ries", + "_ mark", + "_m ark", + "_mar k", + "_ma rk", + "Ġ Minnesota", + "ĠMin nesota", + "Ġk osten", + "Ġko sten", + "Ġkos ten", + "Ġkost en", + "Ġ probability", + "Ġprob ability", + "Ġprobabil ity", + "w arning", + "war ning", + "warn ing", + "Ġgen etic", + "Ġgene tic", + "F ixture", + "Fix ture", + "Ġ HashSet", + "ĠHash Set", + "N ombre", + "Nom bre", + "_ month", + "_m onth", + "_mon th", + "_mo nth", + "Æ °", + "- start", + "-st art", + "-star t", + "xy gen", + "ĉ ft", + "ĉf t", + "i agnostics", + "Ġ Matthew", + "ĠMat thew", + "ĠMatth ew", + "Ġcon cepts", + "Ġconcept s", + "Ġconce pts", + "Ġcon str", + "Ġconst r", + "Ġcons tr", + ". State", + ".St ate", + ".Stat e", + "и н", + "N ov", + "No v", + "Î ±", + "Ġ Panel", + "ĠP anel", + "ĠPan el", + "ĠPa nel", + "ĠPane l", + "ä¸ ª", + "com pare", + "comp are", + "> ()Ċ", + ">( )Ċ", + ">() Ċ", + "Ġapp lying", + "Ġapply ing", + "Ġappl ying", + "Ġprom ised", + "Ġpromise d", + "Ġ ox", + "Ġo x", + "n cia", + "nc ia", + "Ġ Validation", + "ĠValid ation", + "o rts", + "or ts", + "ort s", + "_ cur", + "_c ur", + "_cu r", + "e lect", + "el ect", + "ele ct", + "e ye", + "ey e", + "( Data", + "(D ata", + "Ġre porter", + "Ġreport er", + "Ġ Buff", + "ĠB uff", + "ĠBu ff", + "ĠBuf f", + "3 95", + "39 5", + "Ġ sr", + "Ġs r", + "Ġ \";", + "Ġ\" ;", + "i cky", + "ic ky", + "ick y", + "Ġt empor", + "Ġtem por", + "Ġtemp or", + "Ġtempo r", + "S N", + "Ġ resident", + "Ġres ident", + "Ġresid ent", + "Ġreside nt", + "p ires", + "pi res", + "pir es", + "pire s", + "ys ical", + "ysi cal", + "Ġend orse", + "Ġendors e", + "Ġ Song", + "ĠS ong", + "ĠSo ng", + "ĠSon g", + "is Empty", + "le et", + "lee t", + "_ util", + "_u til", + "_ut il", + "Ġd istingu", + "Ġdist ingu", + "Ġ Talk", + "ĠT alk", + "ĠTal k", + "ĠTa lk", + "Ġ Mot", + "ĠM ot", + "ĠMo t", + "( default", + "(d efault", + "(de fault", + "(def ault", + ". Arg", + ".A rg", + ".Ar g", + "gorith ms", + "gorithm s", + "_ words", + "_w ords", + "_word s", + "im mer", + "imm er", + "_ reset", + "_re set", + "_res et", + "f amily", + "W W", + "Ġs avings", + "Ġsav ings", + "Ġsaving s", + "Ġ âĢĿ", + "ĠâĢ Ŀ", + "_ enable", + "_e nable", + "_en able", + "s idebar", + "side bar", + "R unning", + "Run ning", + "Ġ ali", + "Ġa li", + "Ġal i", + "Ġte stim", + "Ġtest im", + "Ġtes tim", + "Ġ warnings", + "Ġw arnings", + "Ġwar nings", + "Ġwarn ings", + "Ġwarning s", + "Ġ Chem", + "ĠC hem", + "ĠCh em", + "ĠChe m", + "Ġ Exit", + "ĠE xit", + "ĠEx it", + "Ġf ounder", + "Ġfound er", + "Ġfo under", + "Ġfou nder", + "p ector", + "pe ctor", + "pect or", + "pec tor", + "Ġ rm", + "Ġr m", + "_ dataset", + "_d ataset", + "_data set", + "_dat aset", + "_datas et", + "Ġ Das", + "ĠD as", + "ĠDa s", + "Ġ han", + "Ġh an", + "Ġha n", + "G etty", + "Get ty", + "Ge tty", + "á l", + "Ġ ny", + "Ġn y", + "Ġpo verty", + "Ġpov erty", + "Ġresult ed", + ". by", + ".b y", + "Ġ Visit", + "ĠVis it", + "ĠVi sit", + "Ġobt aining", + "Ġobtain ing", + "/ '.$", + "/' .$", + "/'. $", + "Ġ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "s hall", + "sh all", + "shal l", + "sha ll", + "_ LEFT", + "_LE FT", + "UI Image", + "_ Name", + "_N ame", + "h ave", + "ha ve", + "ĠN ob", + "ĠNo b", + "l r", + "- footer", + "-f ooter", + "-foot er", + "Ġn aked", + "Ġna ked", + "Ġnak ed", + "ĠG arden", + "ĠGar den", + "ĠGard en", + "\\F acades", + "Ġ graduate", + "Ġgrad uate", + "Ġgradu ate", + "4 17", + "41 7", + "Ġfr anchise", + "Ġfranch ise", + "p lane", + "pl ane", + "plan e", + "pla ne", + "Ġcontrib utions", + "Ġcontribution s", + "Ġstring With", + "Ġ crypto", + "Ġc rypto", + "Ġcrypt o", + "Ġcry pto", + "Ġmov ements", + "Ġmove ments", + "Ġmo vements", + "Ġmovement s", + "a thers", + "ath ers", + "ather s", + "athe rs", + "Ġ lifetime", + "Ġl ifetime", + "Ġlife time", + "Ġlif etime", + "Ġcommunic ate", + "Ġcommun icate", + "j ar", + "ja r", + "Ġ Fragment", + "ĠF ragment", + "ĠFr agment", + "ĠFra gment", + "ĠFrag ment", + "_ IF", + "_I F", + "ĠN avy", + "ĠNav y", + "ĠNa vy", + "Ġ Figure", + "ĠF igure", + "ĠFig ure", + "Ġ simulation", + "Ġs imulation", + "Ġsim ulation", + "Ġsimul ation", + "_ stop", + "_s top", + "_st op", + "Ġreport ers", + "Ġreporter s", + "Ġver sus", + "Ġvers us", + "a ja", + "aj a", + "Ġ α", + "ĠÎ ±", + "Ġgover nor", + "Ġgovern or", + "Ġgoverno r", + "List Item", + "Ġ sealed", + "Ġse aled", + "Ġsea led", + "Ġseal ed", + ". Background", + ".Back ground", + "e di", + "ed i", + "ash ing", + "ashi ng", + "Ġ lip", + "Ġl ip", + "Ġli p", + "ĠI h", + "m erge", + "mer ge", + "Ġn ec", + "Ġne c", + "0 24", + "02 4", + "el ocity", + "elo city", + "AT EG", + "ATE G", + "Ġse eds", + "Ġsee ds", + "Ġseed s", + "Ġ floating", + "Ġf loating", + "Ġfloat ing", + "Ġflo ating", + "7 01", + "70 1", + "_ FA", + "_F A", + "w alk", + "wa lk", + "wal k", + "ĉ user", + "ĉu ser", + "ĉuse r", + "ĉus er", + "_ depth", + "_de pth", + "_dep th", + "_dept h", + "Ġw age", + "Ġwa ge", + "Ġwag e", + "@ app", + "@a pp", + "N il", + "Ni l", + "( [\"", + "([ \"", + "( vector", + "(v ector", + "(vec tor", + "Ġsecret ary", + "4 61", + "46 1", + "Ġj Panel", + "v ez", + "ve z", + "Âł ³³³", + "³³ ³³", + "³³³ Âł", + "d irection", + "dir ection", + "di rection", + "direct ion", + "dire ction", + "Ġ EP", + "ĠE P", + "Ġ hunt", + "Ġh unt", + "Ġhun t", + "Ġhu nt", + "3 96", + "39 6", + "Json Property", + "Ġ PORT", + "ĠP ORT", + "ĠPO RT", + "ĠPOR T", + "] \",", + "]\" ,", + "а п", + "аР¿", + "Ġ Foreign", + "ĠFore ign", + "p anic", + "pan ic", + "pa nic", + "Ġtr ials", + "Ġtri als", + "Ġtrial s", + "Ġ Ale", + "ĠA le", + "ĠAl e", + "Ġr ural", + "Ġru ral", + "- value", + "-v alue", + "-val ue", + "-valu e", + "author ized", + "authorize d", + "Ġ Scotland", + "ĠSc otland", + "ĠScot land", + ". drop", + ".d rop", + ".dr op", + "Ġ MT", + "ĠM T", + "ç ±", + "3 91", + "39 1", + "row th", + "5 15", + "51 5", + "File Path", + "Ġ recall", + "Ġre call", + "Ġrec all", + "Ġrecal l", + "if le", + "Ġ cel", + "Ġc el", + "Ġce l", + "Ġ SELECT", + "ĠSE LECT", + "ĠSEL ECT", + "k n", + "_ case", + "_c ase", + "_ca se", + "Ġ crop", + "Ġc rop", + "Ġcr op", + "Ġcro p", + "5 43", + "54 3", + "s ure", + "sur e", + "su re", + "p ot", + "po t", + "I CS", + "IC S", + "Ġ stem", + "Ġs tem", + "Ġst em", + "Ġste m", + "Ġindust ries", + "Ġindustri es", + "P ut", + "Pu t", + "Ġ aber", + "Ġa ber", + "Ġab er", + "road cast", + "I cons", + "Icon s", + ") \")Ċ", + ")\" )Ċ", + ")\") Ċ", + "æĪIJ åĬŁ", + "g ui", + "gu i", + "Ġass umed", + "Ġassum ed", + "Ġassume d", + "Ġ rx", + "Ġr x", + "E A", + "è §", + "E LL", + "EL L", + "Ġd ose", + "Ġdo se", + "Ġdos e", + "Ġ ine", + "Ġin e", + "Ġi ne", + "Ġd eeper", + "Ġde eper", + "Ġdeep er", + "Ġdee per", + "l ider", + "li der", + "lide r", + "lid er", + "Ġ ordinary", + "Ġord inary", + "Ġordin ary", + "Ġg olf", + "Ġgo lf", + "Ġgol f", + "6 05", + "60 5", + "_ IMAGE", + "_IM AGE", + "Ġ NAME", + "ĠN AME", + "ĠNA ME", + "( module", + "(m odule", + "(mod ule", + "Ġ atom", + "Ġa tom", + "Ġat om", + "Ġ belt", + "Ġb elt", + "Ġbe lt", + "Ġbel t", + "Ġoff ices", + "Ġoffic es", + "Ġoffice s", + "5 06", + "50 6", + "b eta", + "be ta", + "bet a", + "Ġphilosoph y", + "( JSON", + "(J SON", + "(JS ON", + "- field", + "-f ield", + "-fi eld", + "Ġint roduce", + "Ġintrodu ce", + "Ġintro duce", + "Ġcon venience", + "Ġconven ience", + "op tim", + "opt im", + "> \"Ċ", + ">\" Ċ", + "a thy", + "at hy", + "ath y", + "Ġ employer", + "Ġemploy er", + "q uate", + "qu ate", + "qua te", + "quat e", + "Ġ edited", + "Ġed ited", + "Ġedit ed", + "Ġedi ted", + "Arg uments", + "Argument s", + "ĠN ations", + "ĠNation s", + "ĠNat ions", + "_ _)", + "__ )", + "Ġn ose", + "Ġno se", + "Ġnos e", + "Ġ Sample", + "ĠS ample", + "ĠSam ple", + "ĠSamp le", + "' )ĊĊĊ", + "') ĊĊĊ", + "')Ċ ĊĊ", + "')ĊĊ Ċ", + "Ġ cake", + "Ġc ake", + "Ġca ke", + ". getAttribute", + ".get Attribute", + "H D", + "3 92", + "39 2", + "Mod ified", + "4 45", + "44 5", + "Ġ predicted", + "Ġpred icted", + "Ġpredict ed", + "Ġpredic ted", + "Å Ħ", + "a nie", + "an ie", + "ani e", + "S orry", + "( doc", + "(d oc", + "(do c", + "w ind", + "win d", + "wi nd", + "i eve", + "ie ve", + "iev e", + "Ġpro visions", + "Ġprov isions", + "Ġprovision s", + "A TER", + "AT ER", + "ATE R", + "O TE", + "OT E", + "M Y", + ". Autowired", + ".A utowired", + "ĠB ath", + "ĠBa th", + "ĠBat h", + "4 23", + "42 3", + ". Boolean", + ".Bool ean", + "Ġ backend", + "Ġback end", + ". Mouse", + ".M ouse", + "at eral", + "ate ral", + "ater al", + "p aper", + "pa per", + "Con st", + "Co nst", + "Cons t", + "Ġ VR", + "ĠV R", + "_ entity", + "_e ntity", + "_ent ity", + "_ CTRL", + "_C TRL", + "_CT RL", + "Ġ Protection", + "ĠPro tection", + "ĠProt ection", + "ĠProte ction", + "ĠProtect ion", + "Ġ GM", + "ĠG M", + "Ġ Study", + "ĠSt udy", + "ĠStud y", + "Ġ soup", + "Ġs oup", + "Ġso up", + "Ġsou p", + "o time", + "ot ime", + "oti me", + "' use", + "'u se", + "] \"", + "/ users", + "/user s", + "/use rs", + "/us ers", + "a ug", + "au g", + "Ġ Hong", + "ĠH ong", + "ĠHon g", + "ĠHo ng", + "_ norm", + "_n orm", + "_no rm", + "ãģ ¨", + "Ġse cre", + "Ġsec re", + "( Build", + "(B uild", + "Ġ Contract", + "ĠCon tract", + "ĠCont ract", + "ĠContr act", + "o las", + "ol as", + "ola s", + "Ġs auce", + "Ġsa uce", + "Ġsau ce", + "Ġag gressive", + "Ġaggress ive", + "Ġagg ressive", + "Ġ racial", + "Ġr acial", + "Ġrac ial", + "Ġra cial", + "char acter", + "@ @", + "Ġ compile", + "Ġcom pile", + "Ġcomp ile", + "Ġcompil e", + "Ġ Void", + "ĠV oid", + "ĠVo id", + "_ rem", + "_re m", + "_r em", + "_ memory", + "_m emory", + "_mem ory", + "3 48", + "34 8", + "k k", + "Ġ mic", + "Ġm ic", + "Ġmi c", + "S ame", + "Sam e", + "Sa me", + "U tility", + "Util ity", + "Ut ility", + "Ġ Html", + "ĠH tml", + "Ġ Xml", + "ĠX ml", + "ĠXm l", + "Re ady", + "Read y", + "Ġg all", + "Ġga ll", + "Ġgal l", + "Ġalleg edly", + "Ġalleged ly", + "ĉ ĉĉĉĠĠĠ", + "ĉĉ ĉĉĠĠĠ", + "ĉĉĉĉ ĠĠĠ", + "ĉĉĉ ĉĠĠĠ", + "ĉĉĉĉĠ ĠĠ", + "ĉĉĉĉĠĠ Ġ", + "Ġ Metal", + "ĠM etal", + "ĠMe tal", + "ĠMet al", + "ĠMeta l", + "Ġ Personal", + "ĠPerson al", + "ĠPers onal", + "ĠPersona l", + "Ġborder Radius", + "rx js", + "object s", + "obj ects", + "Ġwant ing", + "Ġwan ting", + "Ġb owl", + "Ġbo wl", + "Ġbow l", + "v endor", + "offset of", + "Ġ Rs", + "ĠR s", + "Ġ Rating", + "ĠR ating", + "ĠRa ting", + "ĠRat ing", + "Ġr ally", + "Ġrall y", + "_ NODE", + "_N ODE", + "_NO DE", + "4 18", + "41 8", + "Ġ Mix", + "ĠM ix", + "ĠMi x", + "Ġad vertis", + "Ġadvert is", + "4 85", + "48 5", + "6 67", + "66 7", + "Ġnarr ative", + "s al", + "sa l", + "Ġ mc", + "Ġm c", + "S Error", + "SE rror", + "Ġf ingers", + "Ġfin gers", + "Ġfinger s", + "Ġfing ers", + "Ġac company", + "Ġaccom pany", + "Ġaccomp any", + "Ġt ired", + "Ġti red", + "Ġtire d", + "Ġtir ed", + "Ġ stride", + "Ġst ride", + "Ġstr ide", + "Ġstri de", + "Ġ gui", + "Ġg ui", + "Ġgu i", + "e list", + "el ist", + "eli st", + "L ocale", + "Lo cale", + "Local e", + "Loc ale", + "Ġre leases", + "Ġrelease s", + "Ġrele ases", + "i king", + "ik ing", + "iki ng", + "Ġ anger", + "Ġa nger", + "Ġan ger", + "Ġang er", + "Ġange r", + ") ))ĊĊ", + ")) )ĊĊ", + ")))Ċ Ċ", + "))) ĊĊ", + "al lest", + "all est", + "alle st", + "alles t", + "Sum mary", + "( O", + "( for", + "(f or", + "Ġbasket ball", + "Ġ roads", + "Ġro ads", + "Ġroad s", + "Ġ Install", + "ĠInst all", + "Ġ Fab", + "ĠF ab", + "ĠFa b", + "it map", + "itm ap", + "4 75", + "47 5", + "Ġ ))Ċ", + "Ġ) )Ċ", + "Ġ)) Ċ", + "Ġ intersection", + "Ġinter section", + "Ġintersect ion", + "Ġinters ection", + "igh bor", + "ighb or", + "ĠB ry", + "ĠBr y", + "Ġ HERE", + "ĠH ERE", + "ĠHE RE", + "ĠHER E", + "S oftware", + "So ftware", + "Soft ware", + "el fare", + "elf are", + "a cs", + "ac s", + "6 22", + "62 2", + "Ġtr ailer", + "Ġtrail er", + "Ġtra iler", + "Ġtrai ler", + ". getClass", + ".get Class", + ".getC lass", + "ch ars", + "char s", + "cha rs", + "Ġreg ulation", + "Ġregul ation", + "Ġre fers", + "Ġref ers", + "Ġrefer s", + "Ġd estruction", + "Ġde struction", + "Ġdestruct ion", + "Ġ continuous", + "Ġcontin uous", + "Ġcontinu ous", + "Ġ Austin", + "ĠA ustin", + "ĠAust in", + "ĠAus tin", + "ĠAu stin", + "é ¢", + "a kan", + "ak an", + "aka n", + ". window", + ".w indow", + ".wind ow", + "Ġ Templates", + "ĠT emplates", + "ĠTem plates", + "ĠTemplate s", + "ĠTemp lates", + "ĠTempl ates", + "Ġabs ence", + ": n", + "Ġdis order", + "f lash", + "fl ash", + "Ġde let", + "Ġdel et", + "Ġdele t", + "bo ards", + "board s", + "Ġ Ġĉ", + "ĠĠ ĉ", + "R OP", + "RO P", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġac qu", + "Ġlaw suit", + "Ġlaws uit", + "Ġ Reviews", + "ĠRe views", + "ĠReview s", + "Ġgar age", + "Ġga rage", + "t imer", + "time r", + "ti mer", + "tim er", + "Ġ ej", + "Ġe j", + "Ġ Rectangle", + "ĠRect angle", + "Ġ flowers", + "Ġfl owers", + "Ġflow ers", + "Ġflo wers", + "Ġflower s", + "3 98", + "39 8", + "i lst", + "il st", + "ils t", + "Ġ Instance", + "ĠIn stance", + "ĠInst ance", + "S uper", + "Sup er", + "Su per", + "d et", + "de t", + "dis posing", + "disp osing", + "Ġ ES", + "ĠE S", + "Ġ IC", + "ĠI C", + "v ere", + "ver e", + "ve re", + "S k", + "_ channels", + "_ch annels", + "_channel s", + "_chan nels", + "p uted", + "put ed", + "pu ted", + "pute d", + "/ null", + "/n ull", + "n nen", + "nn en", + "4 31", + "43 1", + "Ġ Gallery", + "ĠG allery", + "ĠGall ery", + "_ global", + "_g lobal", + "_glob al", + "Auth entication", + "Ġ Rank", + "ĠR ank", + "ĠRa nk", + "ĠRan k", + "Ġ blocked", + "Ġb locked", + "Ġbl ocked", + "Ġblock ed", + "Ġbloc ked", + "Ġc alm", + "Ġcal m", + "Ġca lm", + "m arket", + "mark et", + "mar ket", + "ĉ val", + "ĉv al", + "ĉva l", + "Ġ aug", + "Ġa ug", + "Ġau g", + "p eriod", + "per iod", + "peri od", + "Ġ Constant", + "ĠCon stant", + "ĠCons tant", + "ĠConst ant", + "Ġ ?>\">Ċ", + "Ġ?> \">Ċ", + "Ġ?>\" >Ċ", + "Ġ?>\"> Ċ", + "Ġ lobby", + "Ġl obby", + "Ġlob by", + "p al", + "pa l", + "3 79", + "37 9", + "Ġ sink", + "Ġs ink", + "Ġsi nk", + "Ġsin k", + "5 08", + "50 8", + "i ah", + "ia h", + "Ð ¡", + "ur name", + "urn ame", + "Ġcon ver", + "Ġconv er", + "Ġinvest igate", + "Ġinvestig ate", + "Ch rist", + "Chris t", + "Chr ist", + "H ub", + "Hu b", + "Ġ IND", + "ĠI ND", + "ĠIN D", + "Ġ Ped", + "ĠP ed", + "ĠPe d", + "u ras", + "ur as", + "ura s", + "ĉ url", + "ĉu rl", + "Ġ Tro", + "ĠT ro", + "ĠTr o", + "Ġ preferences", + "Ġp references", + "Ġpre ferences", + "Ġprefer ences", + "Ġpreference s", + "Ġguar anteed", + "Ġguarante ed", + "Ġguarantee d", + "` ĊĊ", + "`Ċ Ċ", + "Ġport ions", + "Ġportion s", + "Ġe valu", + "Ġev alu", + "Ġeval u", + "' > < /", + "( ){ĊĊ", + "() {ĊĊ", + "(){Ċ Ċ", + "(){ ĊĊ", + "en coded", + "enc oded", + "encode d", + "enco ded", + "z illa", + "zi lla", + ". Class", + ".C lass", + ".Cl ass", + "Ġ *_", + "Ġ* _", + "_ '", + "Ġview ed", + "Ġvi ewed", + "Ġvie wed", + "Ġ Philadelphia", + "ĠPhil adelphia", + ". rows", + ".r ows", + ".row s", + ".ro ws", + "Add ed", + "Ad ded", + "Ġ Touch", + "ĠT ouch", + "ĠTo uch", + "ĠTou ch", + "8 40", + "84 0", + ". delegate", + ".de legate", + "quee ze", + "s lide", + "sl ide", + "Ġ Senior", + "ĠSen ior", + "( tag", + "(t ag", + "Ġinter views", + "Ġinterview s", + "Ġs ua", + "Ġsu a", + "a tas", + "at as", + "ata s", + "@ ĊĊ", + "@Ċ Ċ", + "d istance", + "di stance", + "dist ance", + "Ġ sein", + "Ġs ein", + "Ġse in", + "Ġsei n", + "l atest", + "la test", + "late st", + "lat est", + "lates t", + "Ġ Prince", + "ĠPr ince", + "ĠPri nce", + "Ġlux ury", + "Ġre fr", + "Ġref r", + "Ġ Kitchen", + "ĠK itchen", + "ĠKit chen", + "Ñ Ħ", + "( at", + "(a t", + "F inal", + "Fin al", + "Fi nal", + "ü ck", + "üc k", + "_ zero", + "_z ero", + "Ġ ABC", + "ĠA BC", + "ĠAB C", + "Ġ Manchester", + "ĠMan chester", + "Ġ cow", + "Ġc ow", + "Ġco w", + "C OL", + "CO L", + "_ NUMBER", + "_NUM BER", + "ch anges", + "change s", + "chan ges", + "chang es", + "g enerate", + "gen erate", + "gener ate", + "gene rate", + ". Printf", + ".Print f", + "3 69", + "36 9", + "s hare", + "sh are", + "sha re", + "St ock", + "Ġ PT", + "ĠP T", + "A nim", + "An im", + "a nga", + "an ga", + "ang a", + "Ġ ig", + "Ġi g", + "up loads", + "upload s", + "Ġ packed", + "Ġp acked", + "Ġpack ed", + "Ġpac ked", + "Ġ }];Ċ", + "Ġ} ];Ċ", + "Ġ}] ;Ċ", + "( sender", + "(s ender", + "(se nder", + "(send er", + "Ġ Wire", + "ĠW ire", + "ĠWi re", + "ĠWir e", + "i sons", + "is ons", + "ison s", + "iso ns", + "Ġplay off", + "\\ E", + "6 08", + "60 8", + "/ R", + "Ġ headed", + "Ġhe aded", + "Ġhead ed", + "Al pha", + "( order", + "(ord er", + "(or der", + "Ġop ponents", + "Ġopp onents", + "Ġoppon ents", + "Ġopponent s", + "ack son", + "acks on", + "_ member", + "_m ember", + "_mem ber", + "T urn", + "Tur n", + "Tu rn", + "ĠSov iet", + "ìĹ IJ", + "a uge", + "au ge", + "aug e", + "4 48", + "44 8", + "Ġ incoming", + "Ġin coming", + "Ġinc oming", + "Ġincom ing", + "Ġ jak", + "Ġj ak", + "Ġja k", + "- game", + "-g ame", + "Ġ Male", + "ĠM ale", + "ĠMal e", + "ĠMa le", + "Ġ Month", + "ĠM onth", + "ĠMon th", + "ĠMo nth", + "ĠMont h", + "St age", + ". exe", + ".e xe", + ".ex e", + "Own Property", + ". setItem", + ".set Item", + "Ġ dc", + "Ġd c", + "ä½ ľ", + "Ġb rut", + "Ġbr ut", + "Ġbru t", + "Ġattempt ing", + ". len", + ".l en", + ".le n", + "Ġjud gment", + "Ġs ab", + "Ġsa b", + "Ġ cad", + "Ġc ad", + "Ġca d", + "Ġ Items", + "ĠI tems", + "ĠIt ems", + "ĠItem s", + "com fort", + "el ize", + "eli ze", + "/ log", + "/l og", + "/lo g", + "Ġentre prene", + "Ġ compiler", + "Ġc ompiler", + "Ġcom piler", + "Ġcomp iler", + "Ġcompile r", + "Ġcompil er", + "_ validation", + "_valid ation", + "r eview", + "re view", + "rev iew", + "Ġ textBox", + "Ġtext Box", + "Ġ fraction", + "Ġf raction", + "Ġfr action", + "Ġfra ction", + "Ġfract ion", + "Ġfrac tion", + "Ġ Bal", + "ĠB al", + "ĠBa l", + "> ;ĊĊ", + ">;Ċ Ċ", + ">; ĊĊ", + ".AutoScale Mode", + "Ġ cats", + "Ġc ats", + "Ġca ts", + "Ġcat s", + "4 65", + "46 5", + "Ġ registry", + "Ġreg istry", + "Ġregistr y", + "Ġregist ry", + "u lus", + "ul us", + "ulu s", + "F I", + "p ayload", + "pay load", + "- search", + "-s earch", + "-se arch", + "Ġst aying", + "Ġstay ing", + "Ġsta ying", + "ac ious", + "aci ous", + "acio us", + "De coration", + "Dec oration", + "Decor ation", + "R eview", + "Re view", + "Rev iew", + "I nf", + "In f", + "Ke ep", + "it is", + "iti s", + ", String", + ",S tring", + "C oord", + "Co ord", + "Ġp ero", + "Ġper o", + "Ġpe ro", + "S ex", + "Se x", + "Ġ Atlanta", + "ĠAtl anta", + "u esta", + "ue sta", + "ues ta", + "uest a", + "A rgb", + "Arg b", + "Ar gb", + "> *", + "} _", + "F ooter", + "Foo ter", + "Foot er", + "Fo oter", + "Ġ employed", + "Ġemploy ed", + "_ bound", + "_b ound", + "_bo und", + "v ide", + "vid e", + "vi de", + ". func", + ".f unc", + ".fun c", + "$ scope", + "$s cope", + "Ġ spo", + "Ġs po", + "Ġsp o", + "Ġ Anal", + "ĠA nal", + "ĠAn al", + "ĠAna l", + "oun ced", + "ounc ed", + "ounce d", + "a round", + "ar ound", + "aro und", + "Ġ restriction", + "Ġre striction", + "Ġrestrict ion", + "Ġrestr iction", + "Ġ shops", + "Ġsh ops", + "Ġshop s", + "Ġsho ps", + "å Ģ", + "Ġ Latin", + "ĠL atin", + "ĠLa tin", + "ĠLat in", + "- col", + "-c ol", + "-co l", + "Ġbar ely", + "Ġbare ly", + "Ġ Euro", + "ĠE uro", + "ĠEu ro", + "ĠEur o", + "E r", + "Ġf aire", + "Ġfa ire", + "Ġfair e", + "_ distance", + "_d istance", + "_dist ance", + "_di stance", + "_ unlock", + "_un lock", + "Qu ote", + "IV ATE", + "IVA TE", + "Ġ åĪ", + "Ġå Ī", + "Ġa imed", + "Ġaim ed", + "Ġai med", + "Ġaime d", + "ĠRe trie", + "ĠRet rie", + ". iter", + ".i ter", + ".it er", + "Ġ wrapped", + "Ġw rapped", + "Ġwr apped", + "Ġwrap ped", + "Ġag reements", + "Ġagre ements", + "Ġagree ments", + "Ġagreement s", + "str ument", + "stru ment", + "( product", + "(pro duct", + "(prod uct", + "Ġstud ied", + "Ġstudi ed", + ". setValue", + ".set Value", + "Ġ ye", + "Ġy e", + "Ġ Cache", + "ĠC ache", + "ĠCa che", + "MB OL", + "Ġquarter back", + "Ġ syntax", + "Ġs yntax", + "Ġsy ntax", + "Ġsyn tax", + "Ġsynt ax", + ".get ElementsBy", + ".getElements By", + ". version", + ".v ersion", + "we bsite", + "web site", + "webs ite", + "R unner", + "Run ner", + "_ single", + "_s ingle", + "_si ngle", + "_sin gle", + "a tiv", + "at iv", + "ati v", + "Ġ Altern", + "ĠAl tern", + "ĠAlt ern", + "ĠAlter n", + "Ġ Beautiful", + "ĠBe autiful", + "ĠBeaut iful", + "right arrow", + "Ġd iversity", + "Ġdivers ity", + "p lash", + "pl ash", + "pla sh", + "( co", + "(c o", + ". Fill", + ".F ill", + "Ġ typing", + "Ġtyp ing", + "Ġty ping", + "3 87", + "38 7", + "0 23", + "02 3", + "Ġ clar", + "Ġc lar", + "Ġcl ar", + "Ġcla r", + "H it", + "Hi t", + "O O", + "a cco", + "ac co", + "acc o", + "5 07", + "50 7", + "w orth", + "wort h", + "wor th", + "Ġ scripts", + "Ġs cripts", + "Ġscript s", + "Ġscri pts", + "ĠMuslim s", + "Ġ LL", + "ĠL L", + "er ving", + "erv ing", + "( boolean", + "(bool ean", + "Ġbase ball", + "Ġ CAN", + "ĠC AN", + "ĠCA N", + "3 94", + "39 4", + "0 44", + "04 4", + "M AIL", + "MA IL", + "d epend", + "de pend", + "dep end", + "Ġres pective", + "Ġrespect ive", + "Ġresp ective", + "Ġ constexpr", + "Ġconst expr", + ".* ;ĊĊ", + ".*;Ċ Ċ", + "' ]))Ċ", + "'] ))Ċ", + "']) )Ċ", + "'])) Ċ", + "Ġ yard", + "Ġy ard", + "Ġya rd", + "Ġyar d", + "Ġident ical", + "if ecycle", + "ife cycle", + "U SH", + "US H", + "up iter", + ". validate", + ".valid ate", + "c li", + "cl i", + "I STER", + "IS TER", + "IST ER", + "Ind icator", + "F ail", + "Fa il", + "Ġdem ocracy", + "Ġdemocr acy", + ". var", + ".v ar", + ".va r", + "Ġs atisfied", + "Ġsatisf ied", + "- ------------", + "-- -----------", + "---- ---------", + "-------- -----", + "--- ----------", + "------------ -", + "----- --------", + "---------- ---", + "------ -------", + "----------- --", + "------- ------", + "--------- ----", + "en cer", + "ence r", + "enc er", + "h or", + "ho r", + "Ġr ounds", + "Ġro unds", + "Ġround s", + "Ġrou nds", + "D AO", + "DA O", + "o a", + "Ġfl ask", + "Ġfla sk", + "= c", + "[ ]Ċ", + "[] Ċ", + "/ dist", + "/d ist", + "/dis t", + "Ġp arte", + "Ġpart e", + "Ġpar te", + "Ġ confirmation", + "Ġconfirm ation", + "e ron", + "er on", + "ero n", + "a ware", + "aw are", + "awa re", + "< ?>", + "", + "Ġ dependencies", + "Ġdep endencies", + "Ġdepend encies", + "Ġ Videos", + "ĠV ideos", + "ĠVideo s", + "ĠVid eos", + "ĠVide os", + "- row", + "-r ow", + "-ro w", + "Ġ **/Ċ", + "Ġ* */Ċ", + "Ġ** /Ċ", + "Ġ nou", + "Ġn ou", + "Ġno u", + "Ġ hover", + "Ġh over", + "Ġho ver", + "æ ŀ", + "Ġ nin", + "Ġn in", + "Ġni n", + "Ġ USD", + "ĠU SD", + "ĠUS D", + "M ac", + "Ma c", + "_ Load", + "_L oad", + "Ġout comes", + "Ġoutcome s", + "_ socket", + "_s ocket", + "_sock et", + "_so cket", + "_soc ket", + "Ġ queries", + "Ġqu eries", + "Ġque ries", + "Ġquer ies", + "w m", + "5 92", + "59 2", + "Ġh itting", + "Ġhit ting", + "in ux", + "inu x", + "M ich", + "Mi ch", + "Mic h", + "u dge", + "ud ge", + "A TAB", + "AT AB", + "ATA B", + "Ġv ulnerable", + "Ġvulner able", + "ä ¾", + "Ġ portfolio", + "Ġport folio", + ": YES", + "ĉ map", + "ĉm ap", + "B ound", + "Bo und", + "Ġ iteration", + "Ġit eration", + "Ġiter ation", + "in cess", + "ince ss", + "inc ess", + "inces s", + "Ġ actors", + "Ġa ctors", + "Ġact ors", + "Ġac tors", + "Ġactor s", + "Ġ Qual", + "ĠQ ual", + "ĠQu al", + "_ clean", + "_c lean", + "_cl ean", + "ãĢij ãĢIJ", + "M SG", + "MS G", + "G reen", + "Gr een", + "Gre en", + "ĠOff icer", + "ĠOffice r", + "Ġsm oking", + "Ġsmo king", + "> ',", + ">' ,", + "Ġ Flo", + "ĠF lo", + "ĠFl o", + "++ ;", + "4 33", + "43 3", + "oly gon", + "Ġ bulk", + "Ġb ulk", + "Ġbu lk", + "Ġbul k", + "Ġd rama", + "Ġdr ama", + "Ġdram a", + "Ġdra ma", + "Ġ exceptions", + "Ġex ceptions", + "Ġexcept ions", + "Ġexception s", + "Ġexce ptions", + "o sed", + "os ed", + "ose d", + "Ġ+ čĊ", + "Ġ legacy", + "Ġleg acy", + "C V", + "Ġcontrib uted", + "Ġcontribute d", + "Ġ Terms", + "ĠTe rms", + "ĠTer ms", + "ĠTerm s", + "Ġ bt", + "Ġb t", + "4 34", + "43 4", + "Ġun tuk", + "Ġunt uk", + "Ġ alien", + "Ġa lien", + "Ġal ien", + "Ġali en", + "= ==Ċ", + "== =Ċ", + "=== Ċ", + "ĉ Vector", + "ĉV ector", + "ĉVec tor", + "Ġ ls", + "Ġl s", + "On line", + ". facebook", + ".f acebook", + ".face book", + "n umeric", + "num eric", + "nu meric", + "numer ic", + "ock ets", + "ocket s", + "A ut", + "Au t", + "b ury", + "bur y", + "bu ry", + "- redux", + "-re dux", + "-red ux", + "ĠRed istributions", + "ĠRedistribution s", + "GLOBAL S", + "urrenc ies", + "urr encies", + "Ġ tons", + "Ġt ons", + "Ġto ns", + "Ġton s", + "âĢĻ ,", + "Ġ ê", + "Ġà ª", + "( col", + "(c ol", + "(co l", + "Ġ Symbol", + "ĠS ymbol", + "ĠSym bol", + "Ġst ayed", + "Ġstay ed", + "Ġ ML", + "ĠM L", + "Ġm unicip", + "Ġmun icip", + "Ġ sexo", + "Ġs exo", + "Ġse xo", + "Ġsex o", + "S en", + "Se n", + "n r", + "Ġg ains", + "Ġgain s", + "Ġga ins", + "Ġshort ly", + ". Menu", + ".M enu", + ".Me nu", + "à ½", + "KN OWN", + "Ġ operators", + "Ġoper ators", + "Ġoperator s", + "Ġopera tors", + "- V", + "Ġ Patrick", + "ĠPat rick", + "ĠPatri ck", + "/ add", + "/a dd", + "/ad d", + "_ CO", + "_C O", + "i ration", + "ir ation", + "ira tion", + "( post", + "(p ost", + "(pos t", + "(po st", + "Post s", + "Pos ts", + "Po sts", + "/ _", + "Ġ plug", + "Ġp lug", + "Ġpl ug", + "Ġplu g", + "Ġintel lectual", + "Ġintellect ual", + "Ġme tab", + "Ġmet ab", + "Ġmeta b", + "Ġpregn ancy", + "ĠPrem ier", + "ĠPremi er", + "n m", + "Ġ prediction", + "Ġpred iction", + "Ġpredict ion", + "Ġpredic tion", + "6 06", + "60 6", + "ĠMin istry", + "ĠMini stry", + "ĠMinist ry", + "Th ree", + "Thr ee", + "val uate", + "valu ate", + "Ġ Mini", + "ĠM ini", + "ĠMin i", + "ĠMi ni", + "b u", + "о з", + "оР·", + "< ul", + " \";čĊ", + ">\" ;čĊ", + ">\"; čĊ", + "ĠS av", + "ĠSa v", + ". Bold", + ".B old", + "Ġen ables", + "Ġenable s", + "ĉ tmp", + "ĉt mp", + "Ġman ually", + "Ġmanual ly", + "ĠS qu", + "ĠSq u", + "use rid", + "user id", + ". function", + ".f unction", + ".func tion", + ".fun ction", + ". cache", + ".c ache", + ".ca che", + "L OPT", + "LO PT", + ". Services", + ".S ervices", + ".Service s", + "5 88", + "58 8", + "d dit", + "dd it", + "t im", + "ti m", + "< img", + " >>", + ">> >", + "st ation", + "stat ion", + "sta tion", + "l ore", + "lo re", + "lor e", + "a type", + "at ype", + "aty pe", + "i shop", + "is hop", + "ish op", + "/ ****************************************************************", + "/******************************** ********************************", + "/************************ ****************************************", + "/******************************************************** ********", + "/******** ********************************************************", + "/**************** ************************************************", + "/**************************************** ************************", + "/************************************************ ****************", + "5 21", + "52 1", + "Com boBox", + "Combo Box", + "Ġvac ation", + "Ġva cation", + "Ġinit iative", + "Ġiniti ative", + "Ġ defaultValue", + "Ġdefault Value", + "7 70", + "77 0", + "con cat", + "conc at", + "Ġ Kh", + "ĠK h", + "6 32", + "63 2", + "Ġ Welcome", + "ĠW elcome", + "ĠWel come", + "ized Name", + "M igration", + "Ġ gradient", + "Ġg radient", + "Ġgrad ient", + "H ot", + "Ho t", + "Ġhard ly", + "e lo", + "el o", + "Ġ Students", + "ĠSt udents", + "ĠStud ents", + "ĠStudent s", + "Ġl oose", + "Ġlo ose", + "Ġloos e", + "7 30", + "73 0", + "a tz", + "at z", + ". Send", + ".S end", + ".Se nd", + "' /", + "Ġ universal", + "Ġun iversal", + "Ġunivers al", + "Ġ enterprise", + "Ġenter prise", + "Ġ regex", + "Ġreg ex", + "Ġ visitor", + "Ġvis itor", + "Ġvisit or", + "Ġ Fly", + "ĠF ly", + "ĠFl y", + "S eq", + "Se q", + "ภĻ", + "Ġ Visual", + "ĠVis ual", + "Ġ libraries", + "Ġl ibraries", + "Ġlib raries", + "Ġlibr aries", + "at oes", + "ato es", + "P ayment", + "Pay ment", + "4 47", + "44 7", + "Ġ pent", + "Ġp ent", + "Ġpe nt", + "Ġpen t", + "Ġgather ed", + "VR TX", + "VRT X", + "Ġ DM", + "ĠD M", + "S plit", + "Sp lit", + "Spl it", + "Ġl etting", + "Ġlet ting", + "Ġlett ing", + "Ð Ŀ", + "_ errors", + "_error s", + "_err ors", + "_er rors", + "ep och", + "P ARAM", + "PA RAM", + "PAR AM", + "c u", + "ÑģÑĤ в", + "ol utions", + "olution s", + "olut ions", + "Ed iting", + "Edit ing", + "fo nts", + "font s", + "fon ts", + "Ġ allocated", + "Ġal located", + "Ġalloc ated", + "Ġallocate d", + "Ġ Based", + "ĠB ased", + "ĠBase d", + "ĠBa sed", + "ĠBas ed", + "( Y", + "Ġ Judge", + "ĠJ udge", + "ĠJud ge", + "ĠJu dge", + "Ġbr others", + "Ġbro thers", + "Ġbrother s", + "Ġbroth ers", + "F ILES", + "FILE S", + "FI LES", + "ç o", + "5 31", + "53 1", + "w b", + "_ PI", + "_P I", + "' ^", + "Ġ sword", + "Ġs word", + "Ġsw ord", + "Ġswo rd", + ". services", + ".s ervices", + ".service s", + ".serv ices", + "Ġ nl", + "Ġn l", + "T im", + "Ti m", + "i gg", + "ig g", + "ĠMo ore", + "ĠMoo re", + "ĠMoor e", + "Ġcrypt oc", + "Ġcrypto c", + "åĩ º", + "_ posts", + "_post s", + "_pos ts", + "_po sts", + "ot ate", + "ota te", + "? '", + ". ...ĊĊ", + ".. ..ĊĊ", + "... .ĊĊ", + ".... ĊĊ", + "....Ċ Ċ", + "Ġ kl", + "Ġk l", + "= \"$", + "=\" $", + "Ġde coration", + "Ġdec oration", + "Ġdecor ation", + "Ġdeco ration", + "Ạ¡", + "Ġ DIRECT", + "ĠD IRECT", + "ĠDI RECT", + "ĠDIR ECT", + "G UI", + "GU I", + ") =>{Ċ", + ")= >{Ċ", + ")=> {Ċ", + "Ġ newsletter", + "Ġnews letter", + "Ġpre cis", + "Ġprec is", + "( point", + "(p oint", + "(po int", + "Ġ Equipment", + "ĠE quipment", + "ĠEqu ipment", + "ĠEquip ment", + "u ty", + "ut y", + "Ġ Dave", + "ĠD ave", + "ĠDav e", + "ĠDa ve", + "Ġpart icipation", + "Ġpartic ipation", + "Ġparticip ation", + "u arios", + "ua rios", + "uario s", + "uar ios", + "x it", + "xi t", + ". As", + ".A s", + "E TER", + "ET ER", + "o rous", + "or ous", + "oro us", + "Ġ shield", + "Ġsh ield", + "[ ]>", + "[] >", + "il itary", + "ilit ary", + ". origin", + ".or igin", + ".orig in", + "Ġ promotion", + "Ġpro motion", + "Ġprom otion", + "Ġpromot ion", + "Ġpromo tion", + "U nt", + "Un t", + "Ġ ct", + "Ġc t", + "T RA", + "TR A", + "5 56", + "55 6", + "View Holder", + "Ġ sigma", + "Ġs igma", + "Ġsig ma", + "d elta", + "del ta", + "are house", + "con tract", + "cont ract", + "contr act", + "contra ct", + "( Vector", + "(V ector", + "(Vec tor", + "7 21", + "72 1", + "Ġcomp ete", + "Ġcompet e", + "/ form", + "/f orm", + "/ components", + "/com ponents", + "/component s", + "Ġ nr", + "Ġn r", + "ĠInd ones", + "ĠIndo nes", + "Ġ оÑĤ", + "Ġо ÑĤ", + "Ġ Volume", + "ĠV olume", + "ĠVol ume", + ". files", + ".f iles", + ".file s", + ".fi les", + ".fil es", + "( resp", + "(r esp", + "(res p", + "(re sp", + "/ models", + "/model s", + "/mod els", + "Ġ surf", + "Ġs urf", + "Ġsu rf", + "Ġsur f", + "st andard", + "stand ard", + "/ o", + "ĠXCT Assert", + "V ICES", + "VICE S", + "VI CES", + "VIC ES", + ". Code", + ".C ode", + ".Co de", + "S ED", + "SE D", + "Ġ activate", + "Ġact ivate", + "Ġactiv ate", + "D elta", + "Del ta", + "Ġlimit ation", + "Ġlim itation", + "r ij", + "ri j", + "Ġpregn ant", + "Ġpreg nant", + ": ^(", + ":^ (", + "Ġs our", + "Ġso ur", + "Ġsou r", + "p ie", + "pi e", + "8 03", + "80 3", + "Ġ expense", + "Ġexp ense", + "i cation", + "ic ation", + "ica tion", + "Ġ Large", + "ĠL arge", + "ĠLar ge", + "Ġ ±", + "Ġ ±", + "ĠB owl", + "ĠBo wl", + "ĠBow l", + "( models", + "(model s", + "(mod els", + "(mode ls", + "/ N", + "8 57", + "85 7", + "P a", + ". reload", + ".re load", + ".r eload", + ".rel oad", + "Ġwonder ing", + "4 62", + "46 2", + "Exec ution", + "ĉ ĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠ", + "ĉĠ ĠĠĠĠĠ", + "ĉĠĠ ĠĠĠĠ", + "ĉĠĠĠĠĠ Ġ", + "ĉĠĠĠĠ ĠĠ", + "Ġ Graphics", + "ĠG raphics", + "ĠGraph ics", + "ĠGraphic s", + "Ġ Contin", + "ĠCon tin", + "ĠCont in", + "_ job", + "_j ob", + "Ġ getName", + "Ġget Name", + "Ġ Magn", + "ĠM agn", + "ĠMag n", + "ĠMa gn", + "Ġ DWORD", + "ĠD WORD", + "ĠDW ORD", + "m ad", + "ma d", + "Ġ nh", + "Ġn h", + "f eatures", + "fe atures", + "feature s", + "feat ures", + "fea tures", + "} \");Ċ", + "}\" );Ċ", + "}\") ;Ċ", + "he ets", + "heet s", + "hee ts", + "( train", + "(t rain", + "(tr ain", + "z n", + "Ġrec ruit", + "Ġrecru it", + ". connection", + ".con nection", + ".connect ion", + ".conn ection", + "Ġbar rel", + "Ġbarr el", + "Ġ steam", + "Ġs team", + "Ġst eam", + "Ġste am", + "_ setting", + "_s etting", + "_set ting", + "Ġ angular", + "Ġang ular", + "ane ously", + "aneous ly", + "Ġ bil", + "Ġb il", + "Ġbi l", + "Ġ Norm", + "ĠN orm", + "ĠNo rm", + "ĠNor m", + "5 22", + "52 2", + "(! $", + "i bt", + "ib t", + "% (", + "Ġ posit", + "Ġp osit", + "Ġpos it", + "Ġpo sit", + "Ġposi t", + "Ġ Father", + "ĠF ather", + "ĠFa ther", + "ĠFat her", + "int endo", + "inte ndo", + "5 65", + "56 5", + "L ive", + "Li ve", + "Liv e", + "0 41", + "04 1", + "Ġ ports", + "Ġp orts", + "Ġport s", + "Ġpo rts", + "Ġpor ts", + "Ġm ej", + "Ġme j", + "Ġ landing", + "Ġl anding", + "Ġland ing", + "Ġlan ding", + "p onder", + "pon der", + "pond er", + "po nder", + "ponde r", + "Ġ cod", + "Ġc od", + "Ġco d", + "_ HEADER", + "_HE ADER", + "_HEAD ER", + ". Margin", + ".M argin", + ".Mar gin", + "Ġ balls", + "Ġb alls", + "Ġball s", + "Ġbal ls", + "Ġdisc ussions", + "Ġdiscuss ions", + "Ġdiscussion s", + "Ġ blend", + "Ġbl end", + "Ġble nd", + "H ex", + "He x", + "Ġfar mers", + "Ġfarm ers", + "Ġfarmer s", + "Ġmaint aining", + "Ġmaintain ing", + "Ġ ĠĠčĊ", + "ĠĠ ĠčĊ", + "ĠĠĠ čĊ", + "s yn", + "sy n", + "[ T", + "r us", + "ru s", + "4 39", + "43 9", + "uff ers", + "uf fers", + "uffer s", + "Ġ contributors", + "Ġcontrib utors", + "Ġcontributor s", + "_ sys", + "_s ys", + "_sy s", + ". Debug", + ".De bug", + "Ġ constructed", + "Ġconstruct ed", + "o mes", + "om es", + "ome s", + "? id", + "s lider", + "sl ider", + "slide r", + "Ġsup pliers", + "Ġsupplier s", + "Ġsuppl iers", + "Ġsupp liers", + "6 11", + "61 1", + "scribe r", + "scri ber", + "scr iber", + "p es", + "pe s", + "Ð ŀ", + "\" :čĊ", + "\": čĊ", + "\\ Controller", + ") )ĊĊĊ", + ")) ĊĊĊ", + "))Ċ ĊĊ", + "))ĊĊ Ċ", + "Ġ lua", + "Ġl ua", + "Ġlu a", + "M ulti", + "Mult i", + "Mul ti", + "E NS", + "EN S", + "S rc", + "Sr c", + "Ġ petition", + "Ġpet ition", + "Ġpetit ion", + "Ġ slave", + "Ġsl ave", + "Ġsla ve", + "Ġslav e", + "lo oking", + "look ing", + "loo king", + "V ERT", + "VER T", + "VE RT", + "ĉ vector", + "ĉv ector", + "ĉvec tor", + "S pecial", + "Sp ecial", + "Spec ial", + "Spe cial", + "h h", + "an ne", + "ann e", + "ĠN iger", + "ĠNi ger", + "/ views", + "/view s", + "z ing", + "zi ng", + "zin g", + "end ant", + "enda nt", + "< C", + "s peed", + "sp eed", + "spe ed", + "5 14", + "51 4", + "Ġ{ };ĊĊ", + "Ġ{} ;ĊĊ", + "Ġ{};Ċ Ċ", + "Ġ{}; ĊĊ", + "Begin Init", + "Ġf open", + "Ġfo pen", + "@ RequestMapping", + "End Init", + "Ġp unch", + "Ġpun ch", + "S ender", + "Se nder", + "Send er", + "Sen der", + "6 03", + "60 3", + "é Ķ", + "get Message", + "/ types", + "/t ypes", + "/type s", + ". PI", + ".P I", + "(' ');Ċ", + "oc used", + "ocus ed", + "ocu sed", + "( all", + "(a ll", + "(al l", + "Ġ dropdown", + "Ġd ropdown", + "Ġdrop down", + ") .__", + "). __", + ")._ _", + "Ġ Vin", + "ĠV in", + "ĠVi n", + ". ForeignKey", + ".Fore ignKey", + "6 12", + "61 2", + "ca nf", + "can f", + "o ured", + "ou red", + "our ed", + "oure d", + "Ġ Organization", + "ĠO rganization", + "ĠOrgan ization", + "Ġ а", + "ĠÐ °", + "Ġ Culture", + "ĠC ulture", + "ĠCult ure", + "ĠCul ture", + "( cls", + "(c ls", + "(cl s", + ", _", + "9 02", + "90 2", + "r gba", + "rg ba", + "rgb a", + "ìĿ ĺ", + ". dataGridView", + ".data GridView", + "Ġdo zen", + "Ġdoz en", + "ĠG es", + "ĠGe s", + "8 05", + "80 5", + "4 64", + "46 4", + "_ shared", + "_sh ared", + "_share d", + "_sha red", + "n ick", + "ni ck", + "nic k", + "Ġh osp", + "Ġho sp", + "Ġhos p", + "o meter", + "om eter", + "ome ter", + "omet er", + "4 95", + "49 5", + "Ġclaim ing", + "Ġcla iming", + "0 32", + "03 2", + "i bles", + "ib les", + "ible s", + "r ik", + "ri k", + "æĺ ¯", + "en ario", + "ena rio", + "Ġd engan", + "Ġden gan", + "o bb", + "ob b", + "m ont", + "mon t", + "mo nt", + "_ rank", + "_r ank", + "_ra nk", + "(' /',", + "('/ ',", + "Ġap olog", + "Ġapo log", + "P s", + "_ power", + "_p ower", + "_pow er", + "_po wer", + "ĠG ree", + "ĠGr ee", + "ĠGre e", + "Ġf ulfill", + "Ġful fill", + "Ġfulfil l", + "Ġ firebase", + "Ġf irebase", + "Ġfire base", + "9 10", + "91 0", + "Ġ fare", + "Ġf are", + "Ġfa re", + "Ġfar e", + "ĠH im", + "ĠHi m", + "Ġ bean", + "Ġb ean", + "Ġbe an", + "â̦ .", + "Ġ SPI", + "ĠS PI", + "ĠSP I", + "_ RX", + "_R X", + "Ġper ception", + "Ġperce ption", + "Ġpercept ion", + "rel ative", + "com pile", + "comp ile", + "u um", + "uu m", + "u tos", + "ut os", + "uto s", + "a uc", + "au c", + "Ġ Ask", + "ĠA sk", + "ĠAs k", + "Ġ indicator", + "Ġind icator", + "Ġindic ator", + "Ġindica tor", + "/ th", + "/t h", + ".set String", + "ĠWis consin", + ". Domain", + ".D omain", + ".Do main", + ".Dom ain", + "Ġart ificial", + "De velop", + "Dev elop", + "Ġ Sarah", + "ĠS arah", + "ĠSar ah", + "ĠSa rah", + "ĠSara h", + "Ġ lying", + "Ġl ying", + "Ġly ing", + "( search", + "(s earch", + "(se arch", + "ĠEm pire", + "ĠEmp ire", + "ur ring", + "urr ing", + "æĹ¶ éĹ´", + "= \"${", + "=\" ${", + "=\"$ {", + "Ġ getId", + "Ġget Id", + "Ġ Payment", + "ĠP ayment", + "ĠPay ment", + "t ransition", + "trans ition", + "Ġ ].", + "Ġ] .", + "i xin", + "ix in", + "V T", + "- select", + "-s elect", + "-se lect", + "Ġdemonstr ated", + "Ġdemonstrate d", + "Ġ lastName", + "Ġlast Name", + "em ployment", + "emp loyment", + "employ ment", + ". getProperty", + ".get Property", + ".getP roperty", + "Ġf ought", + "Ġfo ught", + "Ġfou ght", + "file Name", + "Ġ Pers", + "ĠP ers", + "ĠPer s", + "ĠPe rs", + "4 52", + "45 2", + "- card", + "-c ard", + "-car d", + "-ca rd", + "a str", + "as tr", + "ast r", + "at trs", + "att rs", + "attr s", + "Ġpro minent", + "Ġprom inent", + "Ġpromin ent", + "D esign", + "De sign", + "Des ign", + "anc ouver", + "ãģĹ ãģ", + "ar do", + "ard o", + "s ecret", + "se cret", + "sec ret", + "Ġ rag", + "Ġr ag", + "Ġra g", + "Ġpo ison", + "Ġpoi son", + "Ġpois on", + "- man", + "-m an", + ", omitempty", + "7 40", + "74 0", + "ĉ un", + "ĉu n", + "it zer", + "itz er", + "ĠCas ino", + "Ġ Ross", + "ĠR oss", + "ĠRo ss", + "ĠRos s", + "- foot", + "-f oot", + "( results", + "(result s", + "(res ults", + "P lan", + "Pl an", + "Ġl aser", + "Ġla ser", + "Ġlas er", + "ê¸ °", + "_ DR", + "_D R", + "5 23", + "52 3", + "F acebook", + "Face book", + "4 49", + "44 9", + "Ġ boards", + "Ġbo ards", + "Ġboard s", + "s ta", + "st a", + "] ],", + "]] ,", + "6 75", + "67 5", + "Ġ tiles", + "Ġt iles", + "Ġti les", + "Ġtile s", + "Ġtil es", + "S IZE", + "SI ZE", + "Ġ =~", + "Ġ= ~", + "9 70", + "97 0", + "Ġprem ier", + "Ġpremi er", + "o cab", + "oc ab", + "oca b", + "Ġ encoded", + "Ġen coded", + "Ġenc oded", + "Ġencode d", + "Ġ reserve", + "Ġre serve", + "Ġres erve", + "Ġreserv e", + "6 09", + "60 9", + "ĠAfghan istan", + "Ġ ListNode", + "ĠList Node", + "ur ls", + "url s", + "Ġ submission", + "Ġsub mission", + "Ġn eu", + "Ġne u", + "4 77", + "47 7", + "Ġ# +#", + "_ POST", + "_P OST", + "_PO ST", + "_POS T", + "Ġmo ist", + "Ġmoi st", + "Ġmois t", + "e lli", + "el li", + "ell i", + "ellig ent", + "elli gent", + ". alert", + ".al ert", + "ó d", + "b re", + "br e", + "Ġ Collect", + "ĠC ollect", + "ĠCol lect", + "ĠColl ect", + "Ġ graphic", + "Ġg raphic", + "Ġgraph ic", + "Ġgrap hic", + "Ġ longitude", + "Ġlong itude", + "Ġlongitud e", + "Ġ Provid", + "ĠPro vid", + "ĠPr ovid", + "ĠProv id", + "Ġ Calculate", + "ĠC alculate", + "ĠCal culate", + "ĠCalcul ate", + "ĠCalc ulate", + "x ffff", + "xf fff", + "xff ff", + "xfff f", + "c riteria", + "crit eria", + "Ġ waters", + "Ġw aters", + "Ġwater s", + "Ġwa ters", + "Ġwat ers", + "r ock", + "ro ck", + "roc k", + "lo quent", + "ĠT rib", + "ĠTr ib", + "ĠTri b", + "5 13", + "51 3", + "Ġ burst", + "Ġb urst", + "Ġbu rst", + "Ġbur st", + "Ġ suffix", + "Ġs uffix", + "Ġsuff ix", + "Ġsuf fix", + ". Extensions", + ".Ext ensions", + ".Extension s", + "is hes", + "ish es", + "i vel", + "iv el", + "ive l", + "Ġ LIKE", + "ĠL IKE", + "ĠLI KE", + "Ġ Getty", + "ĠG etty", + "ĠGet ty", + "ĠGe tty", + ".Action Event", + ".s lf", + ".sl f", + "Ġ HAL", + "ĠH AL", + "ĠHA L", + "u pal", + "up al", + "upa l", + "E AR", + "EA R", + "5 24", + "52 4", + "u di", + "ud i", + "_ timeout", + "_time out", + "U F", + "Ġ Singapore", + "ĠSing apore", + "ĠSingap ore", + "ĠAd vent", + "ĠAdv ent", + "_ interval", + "_int erval", + "_inter val", + "c haft", + "ch aft", + "cha ft", + "Ġ Emer", + "ĠE mer", + "ĠEm er", + "Ġ telephone", + "Ġtele phone", + "ĠTur k", + "ĠTu rk", + "_ interface", + "_inter face", + "Ġ Own", + "ĠO wn", + "ĠOw n", + "Ġencour aged", + "Ġencourage d", + "< Object", + "(", + "<> (", + "5 44", + "54 4", + ". Product", + ".Pro duct", + ".Produ ct", + "Form s", + "For ms", + "Fo rms", + "N EW", + "NE W", + "P ay", + "Pa y", + "ĉ boolean", + "ĉbool ean", + "_ contact", + "_cont act", + "Ġ Electric", + "ĠE lectric", + "ĠElect ric", + "s kip", + "sk ip", + "ski p", + "Ġw ur", + "Ġch ronic", + "Ġchron ic", + "Ġchr onic", + "_ driver", + "_d river", + "_dr iver", + "_drive r", + "9 40", + "94 0", + "Ġ Sab", + "ĠS ab", + "ĠSa b", + "Ġ Ult", + "ĠU lt", + "ĠUl t", + "Ġ Rad", + "ĠR ad", + "ĠRa d", + "ST ATUS", + "STAT US", + "Ġ Lewis", + "ĠL ewis", + "ĠLe wis", + "ĠLew is", + "O B", + "Ġgift s", + "Ġgi fts", + "Ġgif ts", + ". Rec", + ".R ec", + ".Re c", + "TR UE", + "Ġint ensity", + "Ġintens ity", + "M arker", + "Mark er", + "Mar ker", + ". compare", + ".com pare", + ".comp are", + "f fic", + "ff ic", + "ffi c", + "C ookie", + "Co okie", + "Cook ie", + "Ġ Baby", + "ĠB aby", + "ĠBa by", + "ĠBab y", + "Ġ BigDecimal", + "ĠB igDecimal", + "ĠBig Decimal", + "i let", + "il et", + "ile t", + "ĠHOLD ERS", + "ĠHOLDER S", + "Ġ Lady", + "ĠL ady", + "ĠLa dy", + "ĠLad y", + "Ġ lung", + "Ġl ung", + "Ġlu ng", + "Ġlun g", + "Ġ Alabama", + "ĠAl abama", + "Ġ dess", + "Ġd ess", + "Ġde ss", + "Ġdes s", + "` );Ċ", + "`) ;Ċ", + "Ġ Builder", + "ĠB uilder", + "ĠBuild er", + "ĠBu ilder", + "_ region", + "_reg ion", + "Ġ neutral", + "Ġne utral", + "Ġneut ral", + "Ġneutr al", + "9 09", + "90 9", + "B oth", + "Bo th", + "Bot h", + "Ġ hp", + "Ġh p", + "Ġ horn", + "Ġh orn", + "Ġhor n", + "Ġho rn", + "Ġ segments", + "Ġse gments", + "Ġseg ments", + "Ġsegment s", + "Ġ EC", + "ĠE C", + "\" =>\"", + "\"=> \"", + "( rec", + "(r ec", + "(re c", + "Ġ Pi", + "ĠP i", + "G M", + "Ġl aptop", + "Ġlap top", + "S calar", + "Sc alar", + "Scala r", + "4 63", + "46 3", + "i sd", + "is d", + "- dialog", + "-d ialog", + "-di alog", + "Ġ Anderson", + "ĠAnd erson", + "ĠAnders on", + "Ġmis takes", + "Ġmist akes", + "Ġmi stakes", + "Ġmistake s", + "7 08", + "70 8", + "Ġ Han", + "ĠH an", + "ĠHa n", + "j es", + "je s", + "est ination", + "esti nation", + "4 36", + "43 6", + "Ġprom ises", + "Ġpromise s", + "b id", + "bi d", + "Ġ Scient", + "ĠS cient", + "ĠSc ient", + "ĠSci ent", + "G IN", + "GI N", + "Ġ Performance", + "ĠPer formance", + "ĠPerform ance", + "b age", + "ba ge", + "bag e", + ". users", + ".user s", + ".use rs", + ".us ers", + "le ading", + "lead ing", + "lea ding", + "Ġ oral", + "Ġo ral", + "Ġor al", + "Ġora l", + "G raphics", + "Graph ics", + "Graphic s", + "4 88", + "48 8", + "_ PTR", + "_P TR", + "_PT R", + "5 18", + "51 8", + "h ang", + "ha ng", + "han g", + "Ġin ev", + "Ġi nev", + "Ġine v", + "p rocessing", + "process ing", + "F actor", + "Fact or", + "Fac tor", + "Fa ctor", + "Ġ NA", + "ĠN A", + "$ string", + "$s tring", + "$str ing", + "Ġ grounds", + "Ġgr ounds", + "Ġground s", + "Ġgro unds", + "Ġgrou nds", + ".Save Changes", + "c lock", + "cl ock", + "clo ck", + "9 41", + "94 1", + "cri pcion", + "Ġ Newton", + "ĠNew ton", + "g c", + ". includes", + ".in cludes", + ".include s", + "Ġ blast", + "Ġb last", + "Ġbl ast", + "Ġblas t", + "Ġbla st", + "Ġ' -'", + "Ġ'- '", + "Ġp uede", + "Ġpued e", + "Ġpu ede", + "4 69", + "46 9", + ". Session", + ".S ession", + "Ġ grep", + "Ġg rep", + "Ġgr ep", + "Ġgre p", + "_ final", + "_f inal", + "_fin al", + "Ġ Gay", + "ĠG ay", + "ĠGa y", + "Ġ Give", + "ĠG ive", + "ĠGi ve", + "i ri", + "ir i", + "- star", + "-s tar", + "-st ar", + "Ġ UIImage", + "ĠUI Image", + "_ epoch", + "_ep och", + "u bb", + "ub b", + "e nth", + "en th", + "ent h", + "Ġ elite", + "Ġe lite", + "Ġel ite", + "Ġelit e", + "Ġcampaign s", + "Ġ Porno", + "ĠP orno", + "ĠPorn o", + "ĠPor no", + "_ assign", + "_as sign", + "_ass ign", + "Prot ocol", + "Proto col", + "Ġ Being", + "ĠB eing", + "ĠBe ing", + "ĠBei ng", + "Ġ Airport", + "ĠAir port", + "Ġcon ventional", + "Ġconvent ional", + "Ġconvention al", + "Ġ Wat", + "ĠW at", + "ĠWa t", + "Ġ CI", + "ĠC I", + "E TA", + "ET A", + "Ġ Anthony", + "ĠAnth ony", + "Ġ tablet", + "Ġtable t", + "Ġtab let", + "( format", + "(form at", + "(for mat", + "Ġconsist ently", + "Ġconsistent ly", + "ĠI owa", + "ĠIo wa", + "4 74", + "47 4", + "Ġ avatar", + "Ġav atar", + "Ġava tar", + "0 27", + "02 7", + ". cursor", + ".c ursor", + "! [", + "Ġh anging", + "Ġhang ing", + "Ġhan ging", + "Ġhangi ng", + "H er", + "He r", + "S uch", + "Su ch", + "Suc h", + "' ;ĊĊĊ", + "';Ċ ĊĊ", + "';ĊĊ Ċ", + "'; ĊĊĊ", + "org eous", + "orge ous", + "( )==", + "() ==", + "Ġ viewModel", + "Ġview Model", + "Ġ ãĥ", + "Ġ els", + "Ġe ls", + "Ġel s", + "Ġ Agent", + "ĠA gent", + "ĠAg ent", + "ĠAge nt", + "F etch", + "a por", + "ap or", + "apo r", + "Ġ cx", + "Ġc x", + "p read", + "pr ead", + "pre ad", + "ĠP ier", + "ĠPi er", + "ĠPie r", + "o eff", + "oe ff", + "6 16", + "61 6", + "S n", + "8 90", + "89 0", + "Ġ Virtual", + "ĠV irtual", + "ĠVir tual", + "ĠVirt ual", + "A pr", + "Ap r", + ". White", + ".Wh ite", + "6 15", + "61 5", + "_ MOD", + "_M OD", + "_MO D", + "Ġ Points", + "ĠP oints", + "ĠPoint s", + "ĠPo ints", + "å¤ ±", + "Ġ genes", + "Ġg enes", + "Ġge nes", + "Ġgen es", + "Ġgene s", + "Ġ vendor", + "Ġv endor", + "Ġvend or", + "Ġmain stream", + "< src", + "Ċ", + "Ġ< >Ċ", + "Ġ<> Ċ", + "F ilename", + "File name", + "Fi lename", + "Fil ename", + "Ġs ne", + "Ġsn e", + "Ġ Football", + "ĠF ootball", + "ĠFoot ball", + "Ġr ival", + "Ġri val", + "Ġriv al", + "Ġdis aster", + "i onic", + "ion ic", + "io nic", + "ioni c", + "Ġ Damage", + "ĠD amage", + "ĠDa mage", + "ĠDam age", + ". Resource", + ".Re source", + ".Res ource", + "- en", + "-e n", + "Ġ Types", + "ĠT ypes", + "ĠType s", + "ĠTy pes", + "ĠTyp es", + "get String", + "( board", + "(b oard", + "Ġ bol", + "Ġb ol", + "Ġbo l", + "p lain", + "pl ain", + "pla in", + "z ym", + "zy m", + "ภ²", + "Ġ scanner", + "Ġsc anner", + "Ġscan ner", + "i lder", + "il der", + "ild er", + "ilde r", + "_ msgs", + "_msg s", + "_ms gs", + "æ ı", + "( intent", + "(int ent", + "(in tent", + "Ġ destruct", + "Ġd estruct", + "Ġde struct", + "Ġb ust", + "Ġbu st", + "Ġbus t", + "Ġ Employ", + "ĠE mploy", + "ĠEm ploy", + "ĠEmp loy", + "o ni", + "on i", + "Ġ UIViewController", + "ĠUI ViewController", + "ĠUIView Controller", + "Ġo dds", + "Ġodd s", + "Ġod ds", + "e arer", + "ear er", + "ea rer", + "Ge ometry", + "Geo metry", + "Geom etry", + "Ġ yii", + "Ġy ii", + "Ġyi i", + "_ EXPORT", + "_EX PORT", + "_EXP ORT", + "Ġ Attack", + "ĠAtt ack", + "Ġn iet", + "Ġnie t", + "Ġni et", + "Ġim pression", + "Ġimp ression", + "Ġimpress ion", + "Ġimpr ession", + "Ġ Gil", + "ĠG il", + "ĠGi l", + "_ prob", + "_p rob", + "_pro b", + "_pr ob", + "5 28", + "52 8", + "Ġ CF", + "ĠC F", + "Ġ Experience", + "ĠEx perience", + "/ plugins", + "/pl ugins", + "/plugin s", + ". Method", + ".M ethod", + "Ġbel iefs", + "Ġbelie fs", + "Ġbelief s", + "N ative", + "Nat ive", + "_ build", + "_b uild", + "Ġ vig", + "Ġv ig", + "Ġvi g", + "Ġr anks", + "Ġrank s", + "Ġran ks", + "cover ed", + "cov ered", + "7 05", + "70 5", + "s uch", + "su ch", + "G uard", + "Gu ard", + ". pack", + ".p ack", + ".pa ck", + "ad der", + "add er", + "8 09", + "80 9", + "i via", + "iv ia", + "ivi a", + "l ng", + "ln g", + "Ġ вÑĭ", + "Ġв Ñĭ", + "5 52", + "55 2", + "T imestamp", + "Time stamp", + "_ now", + "_n ow", + "_no w", + "Ġp oker", + "Ġpo ker", + "Ġpok er", + "Ġpoke r", + "Ġ unc", + "Ġu nc", + "Ġun c", + "Ġ shapes", + "Ġsh apes", + "Ġshape s", + "Ġsha pes", + "- types", + "-t ypes", + "-type s", + "_ period", + "_p eriod", + "_per iod", + "p k", + "Ġveter an", + "Ġ sono", + "Ġs ono", + "Ġso no", + "Ġson o", + "Ġ appointed", + "Ġapp ointed", + "Ġappoint ed", + "over flow", + ". driver", + ".d river", + ".dr iver", + ".drive r", + "_ cat", + "_c at", + "_ca t", + "u tt", + "ut t", + "p lant", + "pl ant", + "plan t", + "pla nt", + "i mb", + "im b", + "Ġ Accept", + "ĠAc cept", + "ĠAcc ept", + "Ġ concert", + "Ġcon cert", + "Ġconc ert", + "Ġconce rt", + "ĉ node", + "ĉn ode", + "ĉno de", + "ĉ z", + "? >čĊ", + "?> čĊ", + "Ġb anned", + "Ġban ned", + "ĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĉĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĉĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġt oxic", + "Ġto xic", + "Ġtox ic", + "Ġdis appe", + "Ġdisap pe", + "4 73", + "47 3", + "È Ľ", + "Ġg race", + "Ġgr ace", + "Ġgra ce", + "Ġgrac e", + "at eful", + "ate ful", + "Re ply", + "Rep ly", + "ĠC ruz", + "ĠCr uz", + "ĠCru z", + "4 86", + "48 6", + "Ġs crap", + "Ġsc rap", + "Ġscr ap", + "Ġ keywords", + "Ġkey words", + "Ġkeyword s", + "s imp", + "si mp", + "sim p", + "Ġmort gage", + "Ġcy ber", + "Ġ Execute", + "ĠEx ecute", + "ĠExec ute", + "Ġ latitude", + "Ġl atitude", + "Ġlat itude", + "i fu", + "if u", + ". COM", + ".C OM", + ".CO M", + "d bo", + "db o", + "Ġs orts", + "Ġso rts", + "Ġsort s", + "Ġsor ts", + "Ġ Gas", + "ĠG as", + "ĠGa s", + "om ial", + "omi al", + ". Local", + ".L ocal", + ".Lo cal", + "C ells", + "Cell s", + "Cel ls", + ". Replace", + ".Re place", + "String s", + "Str ings", + ". fit", + ".f it", + ".fi t", + "Ġ Third", + "ĠTh ird", + "ĠThi rd", + "% \",Ċ", + "%\" ,Ċ", + "%\", Ċ", + "Ġ {}\".", + "Ġ{ }\".", + "Ġ{} \".", + "Ġ Sony", + "ĠS ony", + "ĠSo ny", + "ĠSon y", + "Ġ [:", + "Ġ[ :", + "5 85", + "58 5", + "Ġf allen", + "Ġfa llen", + "Ġfall en", + "Ġfal len", + ". ')Ċ", + ".' )Ċ", + ".') Ċ", + "i nh", + "in h", + "Ġ MC", + "ĠM C", + "Ġ redis", + "Ġre dis", + "Ġr edis", + "Ġred is", + "C odes", + "Code s", + "Co des", + "Cod es", + "Ġ profiles", + "Ġpro files", + "Ġprof iles", + "Ġprofile s", + "Ġprofil es", + "h ook", + "ho ok", + "hoo k", + "Re ducer", + "Red ucer", + "Reduc er", + "Reduce r", + "_ FUNC", + "_F UNC", + "_FUN C", + "Ġ navigate", + "Ġn avigate", + "Ġnav igate", + "Ġnavig ate", + "st rlen", + "str len", + "Ġh orm", + "Ġhor m", + "Ġho rm", + "á ŀ", + "Ġ SR", + "ĠS R", + ". boot", + ".b oot", + ".bo ot", + "Ġ digest", + "Ġd igest", + "Ġdi gest", + "Ġdig est", + "ĉ header", + "ĉhead er", + ". findOne", + ".find One", + "æ ģ", + "Db Type", + "n ia", + "ni a", + "_ merge", + "_m erge", + "Ġd onne", + "Ġdon ne", + "Ġdonn e", + "/ Getty", + "/G etty", + "_ CHAR", + "_CH AR", + "Ġ bands", + "Ġb ands", + "Ġband s", + "Ġban ds", + "Ġba nds", + ". URL", + ".U RL", + ".UR L", + "art ial", + "arti al", + "Ġ freq", + "Ġf req", + "Ġfr eq", + "Ġfre q", + "Ġs ist", + "Ġsi st", + "Ġsis t", + "N g", + "Ġrender ing", + "Ġrend ering", + "\\ Core", + "\\C ore", + "Widget s", + "Ġ VA", + "ĠV A", + "Ġactiv ists", + "Ġactivist s", + "S te", + "St e", + "= _", + "a lla", + "al la", + "all a", + "St amp", + "Ġ loads", + "Ġlo ads", + "Ġload s", + "Ġloa ds", + "Ġ xx", + "Ġx x", + "Ġ Learning", + "ĠL earning", + "ĠLe arning", + "ĠLearn ing", + "ĠLear ning", + ". Mvc", + ".M vc", + "u ir", + "ui r", + "( \"$", + "(\" $", + "Ġ connecting", + "Ġconnect ing", + "Read Only", + "u ru", + "ur u", + "ĠE ag", + "ĠEa g", + "B IT", + "BI T", + "_ DEL", + "_D EL", + "_DE L", + "å §", + "arr ass", + "arra ss", + "ex ternal", + "ext ernal", + "extern al", + "exter nal", + "Ġ YOUR", + "ĠY OUR", + "ĠYOU R", + "ĠB rew", + "ĠBr ew", + "ĠBre w", + "Ġ Five", + "ĠF ive", + "ĠFi ve", + "Ġ resize", + "Ġre size", + "Ġres ize", + "i gid", + "ig id", + "igi d", + "e ration", + "er ation", + "era tion", + "6 53", + "65 3", + "Ġ Ñį", + "ĠÑ į", + "5 36", + "53 6", + "åĬ ł", + "0 39", + "03 9", + "Ġ Catch", + "ĠC atch", + "ĠCat ch", + "Ù ģ", + "Ġ Leon", + "ĠL eon", + "ĠLe on", + "ĠLeo n", + "a mil", + "am il", + "ami l", + ". Body", + ".B ody", + "C lip", + "Cl ip", + "Cli p", + "/ list", + "/l ist", + "/li st", + ". br", + ".b r", + "Edit Text", + "ĉ db", + "ĉd b", + ". Game", + ".G ame", + "( BuildContext", + "(Build Context", + "back end", + ". Red", + ".R ed", + ".Re d", + "f acebook", + "face book", + "5 29", + "52 9", + ". urls", + ".url s", + ".ur ls", + "m r", + "rol led", + "roll ed", + "- ------", + "-- -----", + "---- ---", + "--- ----", + "----- --", + "------ -", + "Ġint ervention", + "Ġinter vention", + "Ġinterven tion", + "Ġinterv ention", + "Ġret irement", + "Ġretire ment", + "Ġretir ement", + "Ġ Kit", + "ĠK it", + "ĠKi t", + "Ġ PRE", + "ĠP RE", + "ĠPR E", + "Upper Case", + "Ġ Socket", + "ĠS ocket", + "ĠSo cket", + "ĠSoc ket", + "Ġ :-", + "Ġ: -", + "Ġstud ying", + "Ġstudy ing", + "Ġ Metro", + "ĠM etro", + "ĠMe tro", + "ĠMet ro", + "ar ded", + "ard ed", + "arde d", + "Ġcon versations", + "Ġconvers ations", + "Ġconversation s", + "C alled", + "Call ed", + "Cal led", + "Ġex amine", + "Ġexam ine", + "ert ificate", + ". gz", + ".g z", + "- responsive", + "-res ponsive", + "Ġ refund", + "Ġre fund", + "Ġref und", + "_ network", + "_n etwork", + "_net work", + "0 26", + "02 6", + "all owed", + "allow ed", + "allo wed", + "em pt", + "emp t", + "Ġme als", + "Ġmeal s", + "C ategories", + "Ġtravel ing", + "Ġtrav eling", + "Ġ kg", + "Ġk g", + "Ġsh ame", + "Ġsha me", + "Ġsham e", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġexplicit ly", + "Ġmath ematic", + "Ġ Suite", + "ĠS uite", + "ĠSu ite", + "ĠSuit e", + "Ġ RGB", + "ĠR GB", + "ĠRG B", + "****** /", + "***** */", + "Ġm ixture", + "Ġmix ture", + "l earning", + "le arning", + "lear ning", + "learn ing", + ". template", + ".t emplate", + ".temp late", + ".tem plate", + "at ts", + "att s", + "w x", + "ĉ ctx", + "ĉc tx", + "ĉct x", + ". properties", + ".p roperties", + ".prop erties", + "Ġdr inks", + "Ġdrink s", + "Ġ Either", + "ĠE ither", + "set Text", + ". getData", + ".get Data", + ".getD ata", + ". zip", + ".z ip", + "Ġreve als", + "Ġreveal s", + "< table", + ".Ċ", + "/> .Ċ", + "/>. Ċ", + "Ġr anked", + "Ġrank ed", + "Ġran ked", + "_ impl", + "_i mpl", + "_im pl", + "_imp l", + "Ġ Handles", + "ĠH andles", + "ĠHand les", + "ĠHandle s", + "Ġhost ed", + "Ġho sted", + "Ġhos ted", + "Ġ updating", + "Ġup dating", + "Ġupd ating", + "al bum", + "é Ŀ", + "Ġ shader", + "Ġsh ader", + "Ġsha der", + "Ġshade r", + "Ed itors", + "Edit ors", + "Editor s", + "- round", + "-r ound", + "-ro und", + "[ ]{", + "[] {", + "Ġ sep", + "Ġs ep", + "Ġse p", + "Ġ Hi", + "ĠH i", + "T EM", + "TE M", + "look up", + "loo kup", + ". man", + ".m an", + ".ma n", + "_ INPUT", + "_IN PUT", + "Ġthreat ened", + "Ġthreaten ed", + "_ IMPORT", + "_IM PORT", + "_IMP ORT", + "Ġ drops", + "Ġd rops", + "Ġdr ops", + "Ġdrop s", + "Ġdro ps", + "r uit", + "ru it", + "s id", + "si d", + "b oth", + "bo th", + "bot h", + "Ġ Excel", + "ĠEx cel", + "ĠExc el", + "Ġ jer", + "Ġj er", + "Ġje r", + "ord inary", + "ordin ary", + "е й", + "еР¹", + "V IEW", + "VI EW", + "re ply", + "rep ly", + "Ġ ):Ċ", + "Ġ) :Ċ", + "Ġ): Ċ", + "col ors", + "color s", + "colo rs", + "ver ified", + "_ Tr", + "_T r", + "_ parse", + "_p arse", + "_par se", + "_pars e", + "Ġcon gress", + "Ġcongr ess", + "Ġcong ress", + "6 17", + "61 7", + "P romise", + "Pro mise", + "Prom ise", + "i nts", + "in ts", + "int s", + "Ġ Mother", + "ĠM other", + "ĠMo ther", + "ĠMot her", + ". Api", + ".A pi", + ".Ap i", + "Ġ Duration", + "ĠD uration", + "ĠDu ration", + "ĠDur ation", + "Ġ firstName", + "Ġfirst Name", + "inherit doc", + "ĠM ars", + "ĠMar s", + "ĠMa rs", + "Ġ apr", + "Ġa pr", + "Ġap r", + "O DY", + "OD Y", + "Ġvis its", + "Ġvisit s", + "6 31", + "63 1", + "Ġhe aling", + "Ġheal ing", + "let ters", + "letter s", + "lette rs", + "lett ers", + ") ));čĊ", + ")) );čĊ", + "))) ;čĊ", + "))); čĊ", + "f uture", + "fu ture", + ". Framework", + ".F ramework", + ".Frame work", + "Ġk iss", + "Ġki ss", + "Ġinv olve", + "Ġinvol ve", + "Ġ silent", + "Ġs ilent", + "Ġsil ent", + "ad ows", + "ado ws", + "adow s", + "Ġany body", + "s ch", + "sc h", + "6 90", + "69 0", + "Ġsol ely", + "Ġsole ly", + "- img", + "-i mg", + "-im g", + "Ġ propri", + "Ġp ropri", + "Ġpro pri", + "Ġprop ri", + "Ġin struct", + "Ġinstr uct", + "Ġ licenses", + "Ġlicense s", + "Ġlic enses", + "Ġlicens es", + "Ġ meth", + "Ġm eth", + "Ġme th", + "Ġmet h", + "Ġcon dem", + "Ġcond em", + "Ġ Domain", + "ĠD omain", + "ĠDo main", + "ĠDom ain", + "ĠH arris", + "ĠHar ris", + "ĠHarr is", + "Ġs Ã¥", + "CE PT", + "B atch", + "Bat ch", + "@ extends", + "ĠCONTR IBUT", + ". DataFrame", + ".Data Frame", + "4 72", + "47 2", + "_ packet", + "_p acket", + "_pack et", + "_pa cket", + "re cision", + "rec ision", + "Ġf ocusing", + "Ġfocus ing", + "Ġfoc using", + ". ht", + ".h t", + "__ \":Ċ", + ": Get", + "Ġ KC", + "ĠK C", + "Ġp assage", + "Ġpass age", + "Ġpas sage", + "S egment", + "Se gment", + "Seg ment", + "_ center", + "_c enter", + "_cent er", + "-z A", + "_ BL", + "_B L", + "Ġcon vin", + "Ġconv in", + "Ġ classified", + "Ġclass ified", + "Ġ NSMutable", + "ĠNS Mutable", + "_ ap", + "_a p", + "t ile", + "til e", + "ti le", + "Rect angle", + "4 92", + "49 2", + "( nums", + "(n ums", + "(num s", + "v ens", + "ve ns", + "ven s", + "Ġ UIButton", + "ĠUI Button", + "ĠUIB utton", + "ĠF eder", + "ĠFe der", + "ĠFed er", + "a mo", + "am o", + "Ġ outline", + "Ġout line", + "Ġ Parser", + "ĠP arser", + "ĠPar ser", + "ĠParse r", + "ĠPars er", + "Ġ âī", + "Ġâ ī", + "Ġ Works", + "ĠW orks", + "ĠWork s", + "ĠWor ks", + ". Schema", + ".S chema", + "Ġeng ines", + "Ġengine s", + "6 37", + "63 7", + "5 63", + "56 3", + "_ common", + "_com mon", + "_comm on", + "5 42", + "54 2", + "_ old", + "_o ld", + "Ġset ContentView", + "ĠsetContent View", + "Ġ ///<", + "Ġ// /<", + "Ġ/// <", + "Ġ BT", + "ĠB T", + "f m", + "Ġd ivers", + "Ġdi vers", + "Ġdiv ers", + "Ġdive rs", + "Ġdiver s", + "_ weights", + "_weight s", + "_we ights", + "e mark", + "em ark", + "ema rk", + "Ġ ACT", + "ĠA CT", + "ĠAC T", + "Ġpro portion", + "Ġprop ortion", + "Ġproport ion", + "Ġpropor tion", + "over lay", + ". dirname", + ".dir name", + "Ġ Git", + "ĠG it", + "ĠGi t", + "_ REFERENCE", + "_REF ERENCE", + "_REFER ENCE", + "< >", + "l b", + "_ rule", + "_r ule", + "_ru le", + "è´ ¥", + "Ġ Putin", + "ĠP utin", + "ĠPut in", + "ĠPu tin", + "Ġsleep ing", + "Ġsle eping", + "Ġslee ping", + "( ):čĊ", + "() :čĊ", + "(): čĊ", + "Ġ preserve", + "Ġp reserve", + "Ġpre serve", + "Ġpres erve", + "Ġpar liament", + "Ġ Looking", + "ĠLo oking", + "ĠLook ing", + "Ġp icking", + "Ġpick ing", + "Ġpic king", + "Ġ Dispatch", + "ĠDis patch", + "ĠDisp atch", + "Ġs lip", + "Ġsl ip", + "ë ĵ", + "ĠL yn", + "ĠLy n", + "_ signal", + "_s ignal", + "_sign al", + "_sig nal", + "config uration", + "ĠP itt", + "ĠPi tt", + "ĠPit t", + "4 91", + "49 1", + "a den", + "ad en", + "ade n", + "pro cedure", + "Ġenthus i", + "Ġenth usi", + "f ight", + "fig ht", + "fi ght", + "Ġ Consider", + "ĠCons ider", + "Ġt orn", + "Ġto rn", + "Ġtor n", + "Conn ected", + "Connect ed", + ". cos", + ".c os", + ".co s", + "_ groups", + "_g roups", + "_group s", + "Ġ Think", + "ĠTh ink", + "ĠThi nk", + "ĠThin k", + "Ġdel iber", + "Ġre sid", + "Ġres id", + "work ing", + "wor king", + ". columns", + ".column s", + "Ġ Called", + "ĠC alled", + "ĠCal led", + "ĠCall ed", + "Ġ eslint", + "Ġes lint", + "Ġesl int", + "> \",", + ">\" ,", + "_ DOWN", + "_D OWN", + "_DO WN", + "h ist", + "hi st", + "his t", + "Ġ Advanced", + "ĠAd vanced", + "ĠAdv anced", + "ĠAdvance d", + "Ġre wards", + "Ġreward s", + "Ġrew ards", + "a ctors", + "act ors", + "ac tors", + "actor s", + "Ġsil ence", + "4 79", + "47 9", + "Ġm yth", + "Ġmy th", + "Ġn eur", + "Ġne ur", + "Ġneu r", + "5 19", + "51 9", + "Ġ auction", + "Ġa uction", + "Ġau ction", + "Ġauc tion", + ". GetString", + ".Get String", + "e ks", + "ek s", + "( project", + "(pro ject", + "(proj ect", + "5 98", + "59 8", + "ĉ msg", + "ĉm sg", + "ĉms g", + "ĉ output", + "ĉout put", + "Ġcomplaint s", + "Ġcomplain ts", + "5 51", + "55 1", + ", S", + "Ġ tbl", + "Ġt bl", + "Ġtb l", + "Ġ ,ĊĊ", + "Ġ, ĊĊ", + "Ġ,Ċ Ċ", + "r iors", + "ri ors", + "rior s", + "rio rs", + "ah ren", + "ahr en", + "Ġlaw yers", + "Ġlawy ers", + "Ġlawyer s", + "re dux", + "red ux", + "_ symbol", + "_s ymbol", + "_sym bol", + "o ffee", + "of fee", + "off ee", + "_ RESULT", + "_RES ULT", + "( Name", + "(N ame", + "U TC", + "UT C", + ". currentTime", + ".current Time", + "Ġorgan is", + ". arg", + ".a rg", + ".ar g", + "5 33", + "53 3", + "Ġmin im", + "Ġmi nim", + "Ġmini m", + "w ick", + "wi ck", + "Ġrece ives", + "Ġreceive s", + "B alance", + "Bal ance", + "Ġspe aks", + "Ġspeak s", + "Ġ Days", + "ĠD ays", + "ĠDay s", + "ĠDa ys", + "Ġ Below", + "ĠB elow", + "ĠBe low", + "ĠBel ow", + "4 83", + "48 3", + "t ipo", + "ti po", + "tip o", + "P resent", + "Pre sent", + "Pres ent", + "Ġre serv", + "Ġres erv", + "h p", + "Ġ rit", + "Ġr it", + "Ġri t", + "_ RIGHT", + "_R IGHT", + "- -)", + "-- )", + "Ġchair man", + "7 81", + "78 1", + "D IS", + "DI S", + "Ġ BOOST", + "ĠBO OST", + "Ġex periments", + "Ġexper iments", + "Ġexperi ments", + "Ġexperiment s", + "6 87", + "68 7", + "_ _);Ċ", + "__ );Ċ", + "__) ;Ċ", + "__); Ċ", + "Ġ stamp", + "Ġst amp", + "Ġsta mp", + "Ġf ert", + "Ġfe rt", + "Ġfer t", + "Ġf ond", + "Ġfo nd", + "Ġfon d", + "T er", + "Te r", + "el ve", + "u ren", + "ur en", + "ure n", + "+ i", + "end ency", + "ende ncy", + "enden cy", + "Ġvirtual ly", + "Ġvirt ually", + ". ..\"", + ".. .\"", + "... \"", + "ï½ ŀ", + "9 25", + "92 5", + "- cent", + "-c ent", + "-ce nt", + "_ unique", + "_un ique", + "Ġ pricing", + "Ġp ricing", + "Ġpr icing", + "Ġpri cing", + "m ic", + "mi c", + "R ESH", + "RE SH", + "RES H", + "Ġ :::", + "Ġ: ::", + "Ġ:: :", + "Ġ annotation", + "Ġan notation", + "Ġann otation", + "Ġannot ation", + "Ġ Circle", + "ĠC ircle", + "ĠCirc le", + "ĠCir cle", + "ong odb", + "ongo db", + "i tas", + "it as", + "ita s", + "Ġ %(", + "Ġ% (", + "( component", + "(com ponent", + "(comp onent", + "Ġ об", + "Ġо б", + "( port", + "(p ort", + "(po rt", + "- hour", + "-h our", + ". obj", + ".o bj", + ".ob j", + "L BL", + "LB L", + "Ġ jury", + "Ġj ury", + "Ġju ry", + "Ġjur y", + "G BT", + "GB T", + "Ġ spy", + "Ġs py", + "Ġsp y", + "Ġ Professional", + "ĠProf essional", + "ĠProfession al", + "Ġ\" \";ĊĊ", + "Ġ\"\" ;ĊĊ", + "Ġ\"\";Ċ Ċ", + "Ġ\"\"; ĊĊ", + "Ġstr iking", + "Ġstri king", + "Ġd iscrimination", + "Ġdiscrim ination", + "Ġdiscrimin ation", + "Ġp ays", + "Ġpay s", + "Ġpa ys", + "9 37", + "93 7", + "l ict", + "lic t", + "li ct", + "en tes", + "ent es", + "ente s", + "Ġth rowing", + "Ġthrow ing", + "Ġthr owing", + "Ġthro wing", + "Ġ Plugin", + "ĠPl ugin", + "ĠPlug in", + "( def", + "(d ef", + "(de f", + "Ġ RuntimeException", + "ĠRuntime Exception", + "Ġ Migration", + "ĠM igration", + "ĠMig ration", + "5 99", + "59 9", + "Ġ dic", + "Ġd ic", + "Ġdi c", + "b ag", + "ba g", + "o nia", + "on ia", + "oni a", + "Ġcor ruption", + "Ġcorrupt ion", + "7 04", + "70 4", + "( Map", + "(M ap", + "Ġp rz", + "Ġpr z", + ". dto", + ".d to", + ".dt o", + "Ġac quire", + "Ġacqu ire", + "State ToProps", + "Ġl oving", + "Ġlo ving", + "Ġlov ing", + "о ж", + "оР¶", + "_ pattern", + "_p attern", + "_pat tern", + "Ġem otions", + "Ġemot ions", + "Ġemotion s", + "Ġ publisher", + "Ġp ublisher", + "Ġpublish er", + "Ġpubli sher", + "_ be", + "_b e", + "Ġc ouples", + "Ġco uples", + "Ġcou ples", + "Ġcouple s", + "Ġcoup les", + "4 98", + "49 8", + "o j", + "Ġ Chart", + "ĠC hart", + "ĠCh art", + "ĠChar t", + "ĠCha rt", + "Ġt rop", + "Ġtr op", + "Ġtro p", + ". tool", + ".t ool", + ".to ol", + "Ġestablish ment", + "Ġ dol", + "Ġd ol", + "Ġdo l", + "6 54", + "65 4", + "Ġ tower", + "Ġt ower", + "Ġto wer", + "Ġtow er", + "Ġ lane", + "Ġl ane", + "Ġla ne", + "Ġlan e", + "ĠSy dney", + "Ġf illing", + "Ġfil ling", + "Ġfill ing", + "claim ed", + "cla imed", + "6 44", + "64 4", + "Ġdialog ue", + "Ġdia logue", + "Ġdial ogue", + "Ġcon vention", + "Ġconv ention", + "Ġconven tion", + "Ġconvent ion", + "bo oking", + "book ing", + "boo king", + "par ency", + "pare ncy", + "paren cy", + "æ ±", + "Ġ Generic", + "ĠG eneric", + "ĠGener ic", + "ĠGen eric", + "ĠGene ric", + "7 18", + "71 8", + "\\ Schema", + "\\S chema", + "4 82", + "48 2", + "6 18", + "61 8", + "Ġ ranges", + "Ġr anges", + "Ġrange s", + "Ġran ges", + "Ġrang es", + "/ ch", + "/c h", + "Ġ panels", + "Ġpanel s", + "Ġpa nels", + "Ġpan els", + "Ġpane ls", + "Ġr uled", + "Ġrule d", + "Ġru led", + "çĶ Ł", + ". ts", + ".t s", + "_ sets", + "_s ets", + "_set s", + "_se ts", + "Ġ cleanup", + "Ġc leanup", + "Ġclean up", + "Pre vious", + "Prev ious", + "Ġ Animal", + "ĠAn imal", + "ĠAnim al", + "6 07", + "60 7", + "( $(", + "($ (", + "ĠA ve", + "ĠAv e", + "ol lar", + "oll ar", + "olla r", + "0 28", + "02 8", + "_ eval", + "_e val", + "_ev al", + "ĉ Name", + "ĉN ame", + "( tree", + "(t ree", + "(tr ee", + "Ġ \"]", + "Ġ\" ]", + "5 71", + "57 1", + "Ġdu ties", + "Ġdut ies", + "= '/", + "=' /", + "Click ed", + "Cl icked", + "Ġdiffer ently", + "Ġdifferent ly", + "Ġ Clark", + "ĠCl ark", + "ĠClar k", + "ĠCla rk", + "Ġ dit", + "Ġd it", + "Ġdi t", + "olog ists", + "ologist s", + "ologi sts", + "Ġsy nd", + "Ġsyn d", + "Ġs ends", + "Ġse nds", + "Ġsend s", + "Ġsen ds", + "- known", + "-k nown", + "-know n", + "k b", + "Ġ Modal", + "ĠM odal", + "ĠMod al", + "ĠMo dal", + "it ative", + "itat ive", + "Ġr acing", + "Ġrac ing", + "Ġra cing", + "Ġhigh lights", + "Ġhighlight s", + "Ġ Simon", + "ĠS imon", + "ĠSim on", + "ĠSi mon", + "Ġ Captain", + "ĠCap tain", + "ĠCapt ain", + "ä¿ ¡", + "Ġ CB", + "ĠC B", + "con tin", + "cont in", + "conti n", + "a ran", + "ar an", + "ara n", + "Ġ physics", + "Ġph ysics", + "Ġphys ics", + "Ġphysic s", + "r etty", + "re tty", + "ret ty", + "rett y", + "e tal", + "et al", + "eta l", + ". md", + ".m d", + "ax ios", + "Ġspe akers", + "Ġspeak ers", + "Ġspeaker s", + "Ġ prep", + "Ġp rep", + "Ġpr ep", + "Ġpre p", + "Ġaw arded", + "Ġaward ed", + "ì§ Ģ", + "Ġ Corn", + "ĠC orn", + "ĠCo rn", + "ĠCor n", + "Ġ Nature", + "ĠN ature", + "ĠNa ture", + "ĠNat ure", + "ĠNatur e", + "UD IO", + "7 37", + "73 7", + "Ġ proj", + "Ġp roj", + "Ġpro j", + "Ġpr oj", + "- pre", + "-p re", + "-pr e", + "[ u", + "F eatures", + "Fe atures", + "Feature s", + "Feat ures", + "Ġ isEqual", + "Ġis Equal", + "B inary", + "Bin ary", + "s ig", + "si g", + "Ġcon fusion", + "Ġconf usion", + "5 46", + "54 6", + "5 68", + "56 8", + "Ġ Hat", + "ĠH at", + "ĠHa t", + "Ġkt ó", + ". configure", + ".con figure", + ".config ure", + ".conf igure", + "M ON", + "MO N", + "4 94", + "49 4", + "/ edit", + "/e dit", + "_ Add", + "_A dd", + "_Ad d", + ", true", + ",tr ue", + "5 41", + "54 1", + "Ġ cli", + "Ġc li", + "Ġcl i", + "Error Message", + "- loader", + "-l oader", + "-lo ader", + "-load er", + "Dim ensions", + "Dimension s", + "ulti ply", + "ultip ly", + "Ġ {!!", + "Ġ{ !!", + "Ġ{! !", + "Ġ SqlCommand", + "ĠSql Command", + "Ġ spoken", + "Ġsp oken", + "Ġspoke n", + "Ġspo ken", + "Ġ pics", + "Ġp ics", + "Ġpi cs", + "Ġpic s", + "Ġ toy", + "Ġt oy", + "Ġto y", + "( Key", + "(K ey", + "Ġ Loop", + "ĠL oop", + "ĠLo op", + "Ø ¨", + "E ATURE", + "EA TURE", + "in ction", + "inc tion", + "inct ion", + "_ setup", + "_set up", + "w rapper", + "wrap per", + "wr apper", + "Ġt ong", + "Ġto ng", + "Ġton g", + "c ular", + "cul ar", + "cu lar", + "O pt", + "Op t", + ". Pl", + ".P l", + "= \",", + "=\" ,", + "( length", + "(l ength", + "(len gth", + "(le ngth", + "u mn", + "um n", + "Ġ chrom", + "Ġch rom", + "Ġchr om", + "Ġs event", + "Ġse vent", + "Ġseven t", + "Ġsev ent", + "Ġ IllegalArgumentException", + "ĠIl legalArgumentException", + "ĠIllegal ArgumentException", + "4 78", + "47 8", + "ĉ start", + "ĉst art", + "Ġbe gun", + "Ġbeg un", + "CE PTION", + "CEPT ION", + "d ataset", + "data set", + "dat aset", + "datas et", + "8 25", + "82 5", + "Ġ Failed", + "ĠF ailed", + "ĠFa iled", + "ĠFail ed", + "c ols", + "co ls", + "col s", + "4 59", + "45 9", + "Ġk nee", + "Ġkn ee", + "Ġkne e", + "i more", + "im ore", + "imo re", + ". splice", + ".sp lice", + "s hell", + "sh ell", + "she ll", + "ig gers", + "igger s", + "igg ers", + "Ġ themes", + "Ġth emes", + "Ġthe mes", + "Ġthem es", + "Ġtheme s", + "9 95", + "99 5", + "Ġ DJ", + "ĠD J", + "Ġ Assistant", + "ĠAss istant", + "ĠAssist ant", + "- $", + "M aybe", + "May be", + "Ġ ordering", + "Ġorder ing", + "Ġord ering", + "ĠInt elligence", + "ĠIntelli gence", + "ĠMass achusetts", + "Ġf ailing", + "Ġfa iling", + "Ġfail ing", + "el son", + "els on", + "G reat", + "Gr eat", + "Gre at", + "= i", + ". rest", + ".re st", + ".r est", + ".res t", + "Ġ invite", + "Ġinv ite", + "Ġinvit e", + "- disable", + "-d isable", + "-dis able", + ". GroupBox", + ".Group Box", + "âĢĻ est", + "âĢĻe st", + "âĢĻes t", + "Ġt ackle", + "Ġtack le", + "Ġtac kle", + "g v", + "et ter", + "ette r", + "ett er", + "Ġ ),čĊ", + "Ġ) ,čĊ", + "Ġ), čĊ", + "_ rules", + "_r ules", + "_rule s", + "_ru les", + ". warn", + ".w arn", + "function s", + "fun ctions", + "ĠChrist ians", + "ĠChristian s", + "Ġb acked", + "Ġback ed", + "Ġbac ked", + "Ġ slider", + "Ġs lider", + "Ġsl ider", + "Ġslide r", + "Ġslid er", + "Ġenjoy ing", + "Ġenjo ying", + "n est", + "ne st", + "nes t", + "Ġh ij", + "Ġhi j", + "_ ms", + "_m s", + "/ /*", + "// *", + "An notations", + "Annotation s", + "Ġ Variables", + "ĠVariable s", + "ĠVari ables", + "< V", + "( server", + "(s erver", + "(serv er", + "Ġ Oracle", + "ĠOr acle", + "e lements", + "el ements", + "element s", + "ele ments", + "elem ents", + "Ġ organisation", + "Ġorgan isation", + "Ġorganis ation", + "_ pointer", + "_point er", + "_po inter", + "Ġ Headers", + "ĠHe aders", + "ĠHead ers", + "ĠHeader s", + "[ d", + "Ġ deadline", + "Ġdead line", + "i ssa", + "is sa", + "iss a", + "Ġ knife", + "Ġkn ife", + "Ġ NASA", + "ĠN ASA", + "ĠNAS A", + "ĠNA SA", + "Ġ Height", + "ĠH eight", + "ĠHe ight", + "7 84", + "78 4", + "Ġ Async", + "ĠA sync", + "ĠAs ync", + "Ġ venue", + "Ġven ue", + ". dom", + ".d om", + ".do m", + "bour ne", + "bou rne", + "ĠH awai", + "ĠHaw ai", + "Ġ memo", + "Ġm emo", + "Ġme mo", + "Ġmem o", + "i ctions", + "ict ions", + "iction s", + "Ġsur veillance", + "Ġsurve illance", + "o mi", + "om i", + "/ assets", + "/as sets", + "5 87", + "58 7", + "Ġ edu", + "Ġe du", + "Ġed u", + "Ä Ľ", + "Ġr oster", + "Ġro ster", + "Ġros ter", + "Ġrost er", + "Ġh ired", + "Ġhi red", + "Ġhire d", + "Ġ Tok", + "ĠT ok", + "ĠTo k", + "Ġ placement", + "Ġpl acement", + "Ġplace ment", + "Ġplac ement", + "ur ations", + "uration s", + "urat ions", + "Ġ setState", + "Ġset State", + "ĠMag azine", + "Ġhor ror", + "Ġho rror", + "Ġhorr or", + "T ry", + "Tr y", + "Ġ lag", + "Ġl ag", + "Ġla g", + "Ġ Everyone", + "ĠEvery one", + "t hur", + "th ur", + ") );čĊčĊ", + ")) ;čĊčĊ", + "));čĊ čĊ", + ")); čĊčĊ", + ". return", + ".re turn", + ".r eturn", + ".ret urn", + "Ġsy mp", + "Ġsym p", + "âĸĪ âĸĪ", + "Ġn ights", + "Ġnight s", + "work er", + "wor ker", + "Ġ ale", + "Ġa le", + "Ġal e", + "ennes see", + ". step", + ".s tep", + ".st ep", + "Ġs ynchronized", + "Ġsynchron ized", + "Ġsynchronize d", + "4 87", + "48 7", + "o uri", + "ou ri", + "our i", + "D oes", + "Do es", + ". change", + ".ch ange", + "f on", + "fo n", + ". setBackground", + ".set Background", + "ir cular", + "irc ular", + "4 76", + "47 6", + "+ -", + "ĠC IA", + "ĠCI A", + "7 29", + "72 9", + "Ġ Jane", + "ĠJ ane", + "ĠJan e", + "ĠJa ne", + "Ġ Similar", + "ĠS imilar", + "ĠSim ilar", + "- I", + "level and", + "lev eland", + "Ġpro spect", + "Ġpros pect", + "_ found", + "_f ound", + "ĉ color", + "ĉc olor", + "ĉcol or", + ".D iagnostics", + ".Di agnostics", + "Ġ announce", + "Ġann ounce", + "Ġannounc e", + "Ġanno unce", + "Ġass umes", + "Ġassum es", + "Ġassume s", + "/ tr", + "/t r", + "Ġ bd", + "Ġb d", + "9 87", + "98 7", + "Ġ Carbon", + "ĠC arbon", + "ĠCar bon", + "ĠCarb on", + "Ġanal ys", + "Ġanaly s", + "Ġana lys", + "5 64", + "56 4", + ". dest", + ".d est", + ".de st", + ".des t", + "n ik", + "ni k", + "Ġ Lie", + "ĠL ie", + "ĠLi e", + "- index", + "-in dex", + "-ind ex", + "Draw able", + "Ġ TAG", + "ĠT AG", + "ĠTA G", + "Ġ triangle", + "Ġt riangle", + "Ġtr iangle", + "Ġtri angle", + "Ġtriang le", + "_ FLOAT", + "_F LOAT", + "ĉ ĉĠĠĠĠĠ", + "ĉĉ ĠĠĠĠĠ", + "ĉĉĠĠĠ ĠĠ", + "ĉĉĠ ĠĠĠĠ", + "ĉĉĠĠ ĠĠĠ", + "ĉĉĠĠĠĠ Ġ", + ". black", + ".b lack", + ".bl ack", + "v ue", + "vu e", + "c uracy", + "cur acy", + "cura cy", + "Ġa ffects", + "Ġaff ects", + "Ġaffect s", + "9 06", + "90 6", + "Ġsur ely", + "Ġsure ly", + "S lider", + "Sl ider", + "Slide r", + "u ki", + "uk i", + "c ery", + "ce ry", + "cer y", + "Ġ unter", + "Ġun ter", + "Ġunt er", + ". profile", + ".pro file", + ".pr ofile", + ".prof ile", + "or don", + "ord on", + "ordo n", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "le ave", + "lea ve", + "Ġsmart phone", + "g ie", + "gi e", + "Ġcon spir", + "Ġcons pir", + "Ġ tutorial", + "Ġt utorial", + "Ġtut orial", + "Ġtutor ial", + "Ġtuto rial", + "ç± »", + "Ġ cab", + "Ġc ab", + "Ġca b", + "7 65", + "76 5", + "Ġ Summary", + "ĠSum mary", + "* ĊĊ", + "*Ċ Ċ", + "ä h", + "\" This", + "\"T his", + "Ġ slides", + "Ġsl ides", + "Ġslide s", + "Ġslid es", + "\" ", + "() >", + "c ycle", + "cy cle", + "cycl e", + "ĠB ull", + "ĠBul l", + "ĠBu ll", + "p aths", + "path s", + "pat hs", + "pa ths", + "Ġu np", + "Ġun p", + "Ġview DidLoad", + "_ Model", + "_M odel", + "_Mode l", + "_Mod el", + "Ġ assertTrue", + "Ġassert True", + "Ġ rated", + "Ġr ated", + "Ġrate d", + "Ġrat ed", + "Ġra ted", + "De cl", + "Dec l", + "ver ted", + "vert ed", + "verte d", + "Ġ Dat", + "ĠD at", + "ĠDa t", + "b rew", + "br ew", + "bre w", + "Ġpoint ing", + "M s", + "Ġ Pointer", + "ĠPoint er", + "ĠPo inter", + ") '", + "_ non", + "_n on", + "_no n", + "5 27", + "52 7", + "Ġ SEC", + "ĠS EC", + "ĠSE C", + "Ġ yeah", + "Ġy eah", + "Ġye ah", + "g ency", + "ge ncy", + "gen cy", + "initial ize", + "f ly", + "fl y", + "7 11", + "71 1", + "[ pos", + "[p os", + ", g", + "T ele", + "Te le", + "Tel e", + "0 34", + "03 4", + "Ġj oke", + "Ġjo ke", + "Ġ clause", + "Ġcl ause", + "Ġcla use", + ". findById", + ".find ById", + ".findBy Id", + "e nes", + "en es", + "ene s", + "( instance", + "(in stance", + "(inst ance", + "6 26", + "62 6", + " £", + "9 15", + "91 5", + "Ġs lic", + "Ġsl ic", + "_ home", + "_h ome", + "_hom e", + "Ġ */}Ċ", + "Ġ*/ }Ċ", + "_ pages", + "_p ages", + "_page s", + "_pag es", + "_pa ges", + "( service", + "(s ervice", + "(serv ice", + "9 05", + "90 5", + "R P", + "Ġ Among", + "ĠA mong", + "ĠAm ong", + ". getCurrent", + ".get Current", + ".getC urrent", + "8 06", + "80 6", + "ã Ĥ¹", + "ãĤ ¹", + "Ġs lee", + "Ġsl ee", + "Ġsle e", + "= [Ċ", + ">[ Ċ", + "o ler", + "ol er", + "ole r", + "Ġli bert", + "Ġlib ert", + "Ġliber t", + "Ġ `Ċ", + "Ġ` Ċ", + "Ġw enn", + "Ġwe nn", + "Ġwen n", + "l ated", + "la ted", + "late d", + "lat ed", + "Ġ immune", + "Ġimm une", + "Ġimmun e", + "( Node", + "(N ode", + "Ġ Problem", + "ĠPro blem", + "ĠProb lem", + "ĠProble m", + "Ġ Abs", + "ĠA bs", + "ĠAb s", + "l ogs", + "lo gs", + "log s", + "Ġ ../", + "Ġ. ./", + "Ġ.. /", + "Ġ ADC", + "ĠA DC", + "ĠAD C", + "Ġ }}\">Ċ", + "Ġ} }\">Ċ", + "Ġ}} \">Ċ", + "Ġ}}\" >Ċ", + "Ġ}}\"> Ċ", + "> ');Ċ", + ">' );Ċ", + ">') ;Ċ", + ">'); Ċ", + "= b", + "Ġ Wind", + "ĠW ind", + "ĠWin d", + "ĠWi nd", + "l ahoma", + "lah oma", + "Ġ allocate", + "Ġal locate", + "Ġall ocate", + "Ġalloc ate", + "Ġallo cate", + "o rian", + "or ian", + "oria n", + "ori an", + "Ġpr escription", + "Ġpre scription", + "Ġpres cription", + "- quality", + "-q uality", + "-qu ality", + "Ġ Mayor", + "ĠMay or", + "ĠMa yor", + "ĠMayo r", + "8 55", + "85 5", + "in ely", + "ine ly", + "inel y", + "end foreach", + "Ġ Complex", + "ĠCom plex", + "ĠComp lex", + "ĠComple x", + "k om", + "ko m", + "7 09", + "70 9", + "T Y", + "7 90", + "79 0", + "] ].", + "]] .", + ". Style", + ".St yle", + "_ many", + "_m any", + "_man y", + "_ma ny", + "', '$", + "',' $", + "Ġbar rier", + "Ġbarr ier", + "Ġ Fetch", + "ĠF etch", + "ĠFet ch", + "Ġ Marvel", + "ĠMar vel", + "Ġres ist", + "о го", + "ог о", + "b idden", + "bi dden", + "bid den", + "Ġ Runnable", + "ĠR unnable", + "ĠRun nable", + ": false", + ":f alse", + "8 99", + "89 9", + "Ġbuild s", + "Ġ Stage", + "ĠSt age", + "ĠSta ge", + "Ġ dub", + "Ġd ub", + "Ġdu b", + "em po", + "emp o", + ". site", + ".s ite", + ".si te", + "5 58", + "55 8", + "; ĊĊĊĊ", + ";Ċ ĊĊĊ", + ";ĊĊ ĊĊ", + ";ĊĊĊ Ċ", + "9 94", + "99 4", + "Ġ Denver", + "ĠDen ver", + "Ġre vel", + "Ġrev el", + "Ġreve l", + "Ġtrigger ed", + "Ġ dice", + "Ġd ice", + "Ġdi ce", + "Ġdic e", + "_ fail", + "_f ail", + "_fa il", + "Ġ gc", + "Ġg c", + "8 33", + "83 3", + "5 89", + "58 9", + "ĉ X", + "Ġ Throwable", + "ĠTh rowable", + "ĠThrow able", + "7 75", + "77 5", + ". router", + ".r outer", + ".route r", + ".ro uter", + "ĠRe volution", + "ĠRev olution", + "ÑĢ Ð°", + "_ NON", + "_N ON", + "_NO N", + "0 55", + "05 5", + "Ł ¥", + "5 78", + "57 8", + "Ġ elder", + "Ġe lder", + "Ġel der", + "Ġelde r", + "Ġab road", + "Ġ е", + "ĠÐ µ", + "Ġ Adult", + "ĠAd ult", + "b lr", + "bl r", + "g lyphicon", + "glyph icon", + "6 13", + "61 3", + "Ġprom oting", + "Ġpromot ing", + "Ġpromo ting", + "Ġ iz", + "Ġi z", + "Ġ Solid", + "ĠS olid", + "ĠSo lid", + "ĠSol id", + "6 45", + "64 5", + "_ loader", + "_l oader", + "_lo ader", + "_load er", + "ear ly", + ". enabled", + ".en abled", + ".enable d", + "- edit", + "-e dit", + "-ed it", + "Ġ UL", + "ĠU L", + "_ play", + "_p lay", + "_pl ay", + "Ġ Interrupt", + "ĠInt errupt", + "ĠInter rupt", + "ĠInterr upt", + "Ġadv antages", + "Ġadvant ages", + "Ġadvantage s", + "u cle", + "uc le", + "Ġmechan ical", + "Ġmechanic al", + "Ġmech anical", + ".table LayoutPanel", + "Ġ Working", + "ĠWork ing", + "ĠWor king", + "Ġ anonymous", + "Ġan onymous", + "Ġanonym ous", + "Ġanon ymous", + "R ating", + "Ra ting", + "ig ious", + "igi ous", + "_ phone", + "_p hone", + "_ph one", + ".addAction Listener", + "Ġf ran", + "Ġfr an", + "Ġfra n", + "un den", + "und en", + "unde n", + "Ġ *)&", + "Ġ* )&", + "Ġ*) &", + "_ bool", + "_b ool", + "_bo ol", + "ul ative", + "Ġ cone", + "Ġc one", + "Ġcon e", + "Ġco ne", + "Ġ Mult", + "ĠM ult", + "ĠMu lt", + "ĠMul t", + "Ġm ö", + "Ġ Forward", + "ĠFor ward", + "] ):Ċ", + "]) :Ċ", + "]): Ċ", + "Ġconvin ced", + "Ġconvince d", + "Ġconvinc ed", + "act ed", + "ac ted", + "6 43", + "64 3", + "ãģ ĵ", + "Ġ Configure", + "ĠCon figure", + "ĠConfig ure", + "ĠConf igure", + "Ġce iling", + "Ġceil ing", + "D er", + "De r", + "Ġpass engers", + "Ġpassenger s", + "G roups", + "Group s", + "Gro ups", + "Ġs occer", + "Ġsoc cer", + "/ W", + "av iors", + "avior s", + "avi ors", + "s with", + "sw ith", + "Ġ Zone", + "ĠZ one", + "ĠZo ne", + ". Options", + ".O ptions", + ".Option s", + "Ġ Mom", + "ĠM om", + "ĠMo m", + "i eder", + "ie der", + "ied er", + "Array s", + "Ar rays", + "Arr ays", + "Ġtreat ments", + "Ġtreatment s", + "Ġprotect ing", + "f ac", + "fa c", + "Ġ pickle", + "Ġp ickle", + "Ġpick le", + "Ġpic kle", + "Button Item", + "7 13", + "71 3", + "Ġ blocking", + "Ġb locking", + "Ġbl ocking", + "Ġblock ing", + "Ġbloc king", + "st rar", + "str ar", + "stra r", + "à ²", + "Ġ Export", + "ĠEx port", + "ĠExp ort", + "ĠExpo rt", + "Ġth rew", + "Ġthr ew", + "ot ta", + "ott a", + "Ġ BASE", + "ĠB ASE", + "ĠBAS E", + "ĠBA SE", + ". ws", + ".w s", + ".LE ADING", + "order By", + "_ delay", + "_d elay", + "_de lay", + "_del ay", + "Ġ Pu", + "ĠP u", + ". dll", + ".d ll", + "Ġ Choose", + "ĠCh oose", + "ĠCho ose", + "9 92", + "99 2", + "Pol ice", + "Po lice", + "Ġ BEGIN", + "ĠB EGIN", + "ĠBE GIN", + "bo xes", + "box es", + "Ġ diamond", + "Ġd iamond", + "Ġdiam ond", + "Ġdia mond", + ", l", + "Ġ ĉĉĉ", + "Ġĉ ĉĉ", + "Ġĉĉ ĉ", + "Ġc urious", + "Ġcur ious", + "Ġcu rious", + "6 24", + "62 4", + "t v", + "Ġerot ische", + "Ġerotisch e", + "ack ages", + "ackage s", + "ĉ Set", + "ĉS et", + "T ick", + "Ti ck", + ". border", + ".b order", + "static method", + "Ġ cher", + "Ġc her", + "Ġch er", + "Ġche r", + "in voice", + "inv oice", + "Ġc ru", + "Ġcr u", + "Ġde fect", + "Ġdef ect", + "Ġdefe ct", + "_ metadata", + "_m etadata", + "_meta data", + "_met adata", + "re lation", + "rel ation", + "i kan", + "ik an", + "ika n", + "[ N", + "( Qt", + "(Q t", + "( Base", + "(B ase", + "æģ ¯", + "b eat", + "be at", + "Ġ Empty", + "ĠEm pty", + "ĠEmp ty", + "ĉ o", + "_ shift", + "_s hift", + "_sh ift", + "Ġreg ret", + "7 22", + "72 2", + "Th ose", + "Tho se", + "C ent", + "Ce nt", + "ĠPort ug", + "ĠIs lands", + "ĠIsl ands", + "ĠIsland s", + "Ġ TIME", + "ĠT IME", + "ĠTIM E", + "ĠTI ME", + "Man agement", + "Manage ment", + "Mana gement", + "9 96", + "99 6", + "- sp", + "-s p", + "5 39", + "53 9", + "ê me", + "êm e", + "Ġn otion", + "Ġnot ion", + "Ġno tion", + "un ifu", + "uni fu", + "P K", + "8 26", + "82 6", + "è¡ Į", + "ĠC URLOPT", + "ĠCUR LOPT", + "ĠCURL OPT", + "\\ \"\\", + "\\\" \\", + "U V", + "ç º", + "d ra", + "dr a", + "c ou", + "co u", + "= `", + "Ġ Destroy", + "ĠD estroy", + "ĠDe stroy", + "ĠDest roy", + "r p", + ". cancel", + ".c ancel", + ".can cel", + "G G", + "r untime", + "run time", + "Ġ Vue", + "ĠV ue", + "ĠVu e", + "Ġpro gressive", + "Ġprogress ive", + "Ġprog ressive", + "/ services", + "/s ervices", + "/service s", + "Ġ runner", + "Ġr unner", + "Ġrun ner", + "_ FRAME", + "_FR AME", + ". ToolStripMenuItem", + ".ToolStrip MenuItem", + "Ġ ','", + "Ġ' ,'", + "Ġ', '", + "d elay", + "de lay", + "del ay", + "= utf", + "=u tf", + "Ġscreen ing", + "Ġscre ening", + "Ġp ulling", + "Ġpull ing", + "Ġpul ling", + "o mas", + "om as", + "oma s", + "Ġ anth", + "Ġa nth", + "Ġan th", + "Ġant h", + "- new", + "-n ew", + "-ne w", + "/ local", + "/l ocal", + "/lo cal", + "Ġ iPad", + "Ġi Pad", + "ĠiP ad", + "Ġ twitter", + "Ġt witter", + "Ġtw itter", + "Ġd ying", + "Ġdy ing", + "Ġhe aven", + "Ġheav en", + "Ġ UInt", + "ĠU Int", + "ĠUI nt", + "Ġ Senator", + "ĠSen ator", + "Ġpre sum", + "Ġpres um", + "Ġ Walker", + "ĠW alker", + "ĠWalk er", + "ĠWal ker", + "Ġover come", + "e tection", + "et ection", + "ete ction", + "etect ion", + "Ġemb arrass", + "Ch ina", + "Chi na", + "6 39", + "63 9", + "In clude", + "Inc lude", + "R OLL", + "RO LL", + "ROL L", + "Ġ dataType", + "Ġdata Type", + "D avid", + "Da vid", + "ภ£", + "l op", + "lo p", + "- month", + "-m onth", + "-mon th", + "Ġ scar", + "Ġs car", + "Ġsc ar", + "Ġsca r", + "Ġ Safe", + "ĠS afe", + "ĠSaf e", + "ĠSa fe", + "Ġ ****************************************************************", + "Ġ******************************** ********************************", + "Ġ******** ********************************************************", + "Ġ**************** ************************************************", + "Ġ************************ ****************************************", + "Ġ**************************************** ************************", + "Ġ******************************************************** ********", + "Ġ************************************************ ****************", + "Ġaccess ories", + "Ġaccessor ies", + "Ġr amp", + "Ġra mp", + "Ġram p", + "_ USE", + "_U SE", + "_US E", + "Ġcon trad", + "Ġcont rad", + "Ġcontr ad", + "Ġcontra d", + ") )]Ċ", + ")) ]Ċ", + "))] Ċ", + "Ġp rest", + "Ġpr est", + "Ġpre st", + "Ġpres t", + "Ġ HR", + "ĠH R", + "ĠR ap", + "ĠRa p", + "Ġ usize", + "Ġu size", + "Ġus ize", + "Ġ capability", + "Ġcap ability", + "Ġc ort", + "Ġco rt", + "Ġcor t", + "- next", + "-n ext", + "-ne xt", + "0 77", + "07 7", + "6 27", + "62 7", + "Ġbur den", + "8 22", + "82 2", + "_ reader", + "_re ader", + "_read er", + "Ġ @@", + "Ġ@ @", + "reg ular", + "Ġ Ka", + "ĠK a", + "0 36", + "03 6", + "M AN", + "MA N", + "Ġ astr", + "Ġa str", + "Ġas tr", + "Ġast r", + "Ġ' ')Ċ", + "Ġ'' )Ċ", + "Ġ'') Ċ", + "Ġ fed", + "Ġf ed", + "Ġfe d", + "Ġp arsing", + "Ġpar sing", + "Ġpars ing", + "Ġ Years", + "ĠY ears", + "ĠYear s", + "ĠYe ars", + "Ġ broker", + "Ġb roker", + "Ġbr oker", + "Ġbro ker", + "Ġbroke r", + "\": {\"", + "Ġ akt", + "Ġa kt", + "Ġak t", + "In ventory", + "ab eled", + "abel ed", + "abe led", + "Ġarg parse", + "* ******Ċ", + "** *****Ċ", + "**** ***Ċ", + "****** *Ċ", + "*** ****Ċ", + "***** **Ċ", + "******* Ċ", + "vers ation", + "Ġ cord", + "Ġc ord", + "Ġco rd", + "Ġcor d", + "Ġ Ti", + "ĠT i", + "Ġ hopefully", + "Ġhope fully", + "Ġhop efully", + "Ġhopeful ly", + "Ġ ah", + "Ġa h", + "v erb", + "ver b", + "ve rb", + "Ġst olen", + "Ġstole n", + "Ġsto len", + "Ġstol en", + ". Entry", + ".En try", + ".Ent ry", + "Ġex pecting", + "Ġexpect ing", + "O rientation", + "Ġ powered", + "Ġp owered", + "Ġpower ed", + "Ġpow ered", + "Ġ persist", + "Ġp ersist", + "Ġpers ist", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "' ]);", + "'] );", + "']) ;", + "' )),Ċ", + "') ),Ċ", + "')) ,Ċ", + "')), Ċ", + "Ġ Cash", + "ĠC ash", + "ĠCas h", + "ĠCa sh", + "ĉ item", + "ĉi tem", + "ĉit em", + "8 18", + "81 8", + "g rades", + "gr ades", + "grad es", + "grade s", + "gra des", + "r opol", + "ro pol", + "rop ol", + "b asic", + "ba sic", + "bas ic", + "Ġ \");čĊ", + "Ġ\" );čĊ", + "Ġ\") ;čĊ", + "Ġ\"); čĊ", + "Ġa wards", + "Ġaw ards", + "Ġaward s", + "( range", + "(r ange", + "(ra nge", + "- all", + "-a ll", + "-al l", + "Ġ IBOutlet", + "ĠIB Outlet", + "Ġ Indeed", + "ĠInd eed", + "---------------------------------------------------------------- ------------", + "------------ ----------------------------------------------------------------", + "------------------------------------------------ ----------------------------", + "------ ----------------------------------------------------------------------", + "---------------------------- ------------------------------------------------", + "---------------------------------------------------------------------- ------", + "Ġstom ach", + "Ġsto mach", + "Ġ flower", + "Ġf lower", + "Ġfl ower", + "Ġflow er", + "Ġflo wer", + "Ġs ew", + "Ġse w", + "_ times", + "_t imes", + "_time s", + "_tim es", + "_ti mes", + "a vis", + "av is", + "avi s", + "Q String", + "QS tring", + "Ġ Routes", + "ĠR outes", + "ĠRoute s", + "ĠRo utes", + "ĠRou tes", + "ĠRout es", + "_ prot", + "_p rot", + "_pro t", + "_pr ot", + "Ġcom edy", + "Ġcome dy", + "Ġcomed y", + "Ġ logout", + "Ġlog out", + "Ġlogo ut", + "Ġwood en", + "Ġwo oden", + "Ġwoo den", + "Ġ poster", + "Ġp oster", + "Ġpos ter", + "Ġpost er", + "Ġpo ster", + "Ġposte r", + "p iece", + "pi ece", + "pie ce", + ". Join", + ".J oin", + "Ġ Pok", + "ĠP ok", + "ĠPo k", + "cel ona", + "m utex", + "mut ex", + "mu tex", + "mute x", + "; čĊčĊčĊ", + ";čĊ čĊčĊ", + ";čĊčĊ čĊ", + "Ġst rikes", + "Ġstr ikes", + "Ġstri kes", + "Ġstrike s", + "7 87", + "78 7", + "Lo aded", + "Load ed", + ") arg", + ")a rg", + "e sa", + "es a", + "Un ited", + "Unit ed", + "Uni ted", + "E p", + "P ELL", + "PE LL", + "8 07", + "80 7", + "Ġ Atlantic", + "ĠAtl antic", + "ul let", + "ull et", + "ulle t", + "6 52", + "65 2", + "ap ple", + "app le", + "appl e", + "Ġsett led", + "Ġsettle d", + "a con", + "ac on", + "aco n", + "Ġ printer", + "Ġpr inter", + "Ġprint er", + "Ġprin ter", + "Ġ GC", + "ĠG C", + "å® ļ", + "Ġrender ed", + "Ġrend ered", + ", âĢĻ", + "he it", + "hei t", + "s ocial", + "so cial", + "soc ial", + ". ge", + ".g e", + "7 14", + "71 4", + "Ġ Rick", + "ĠR ick", + "ĠRic k", + "ĠRi ck", + "ĠU tah", + "ĠUt ah", + "g ot", + "go t", + "on ical", + "onic al", + "oni cal", + "onica l", + "Ġ Scroll", + "ĠS croll", + "ĠSc roll", + "ĠScr oll", + "ĠSc iences", + "ĠScience s", + "ĠSci ences", + "Ġ jug", + "Ġj ug", + "Ġju g", + "Ġa mpl", + "Ġam pl", + "Ġamp l", + "en ti", + "ent i", + "LE FT", + "Ġ tabs", + "Ġt abs", + "Ġtab s", + "Ġta bs", + "Ġenorm ous", + ". getKey", + ".get Key", + "l ocate", + "lo cate", + "loc ate", + ". EX", + ".E X", + ". storage", + ".st orage", + ". We", + ".W e", + "Ġ toast", + "Ġto ast", + "Ġ Additionally", + "ĠAdd itionally", + "ĠAdditional ly", + "ĠAddition ally", + "8 82", + "88 2", + "Ġ NOW", + "ĠN OW", + "ĠNO W", + "5 47", + "54 7", + "_ UPDATE", + "_UP DATE", + "Ġtrans ferred", + "Ġtransfer red", + "t ha", + "th a", + ". Display", + ".D isplay", + ".Dis play", + "_ ui", + "_u i", + "ID EO", + "IDE O", + "Ġmeaning ful", + "ĠMos cow", + ", this", + ",t his", + "Ġ Victoria", + "ĠVict oria", + "ĠVictor ia", + "æĶ ¹", + "Ġ ÐŁ", + "ĠÐ Ł", + ". stack", + ".st ack", + "ĠB arn", + "ĠBar n", + "ĠBa rn", + "pared Statement", + ": string", + ":s tring", + ":str ing", + "Ġ bij", + "Ġb ij", + "Ġbi j", + "Ġ STATE", + "ĠST ATE", + "ĠSTAT E", + "ĠSTA TE", + "Ġemploy ers", + "Ġemployer s", + "ĉ input", + "ĉin put", + "( |", + "Ġ lex", + "Ġl ex", + "Ġle x", + "in voke", + "inv oke", + "ĉ num", + "ĉn um", + "+ +,", + "++ ,", + "at ial", + "ati al", + "or ses", + "ors es", + "orse s", + "Ġ fork", + "Ġf ork", + "Ġfor k", + "Ġfo rk", + "_ txt", + "_t xt", + "_tx t", + "ĠAnt onio", + "ĠAnton io", + "Ġ (<", + "Ġ( <", + "a verse", + "av erse", + "aver se", + "avers e", + "Ġdev ast", + "ãĢ Ģ", + ". Dec", + ".D ec", + ".De c", + "ĠG ard", + "ĠGar d", + "ĠGa rd", + "/ ui", + "/u i", + ". %", + "t ri", + "tr i", + "Ġ rolled", + "Ġroll ed", + "Ġrol led", + "Value Pair", + "it ten", + "itt en", + "itte n", + "ĠT her", + "ĠThe r", + "ĠTh er", + "Ġv rou", + "Ġvr ou", + "Ġ Flow", + "ĠF low", + "ĠFl ow", + "ĠFlo w", + "Ġ Finance", + "ĠF inance", + "ĠFin ance", + "Ġ Comb", + "ĠC omb", + "ĠCom b", + "ĠCo mb", + "H C", + ". setVisible", + ".set Visible", + "i sl", + "is l", + "Ġ pk", + "Ġp k", + "7 73", + "77 3", + "Ġup set", + "Ġups et", + "( raw", + "(r aw", + "(ra w", + "ĠV ice", + "ĠVi ce", + "ĠVic e", + "e atures", + "ea tures", + "eature s", + "eat ures", + "Ġ Lang", + "ĠL ang", + "ĠLa ng", + "ĠLan g", + "0 29", + "02 9", + "Lo oking", + "Look ing", + "7 67", + "76 7", + "Ġ AST", + "ĠA ST", + "ĠAS T", + "Ġt rips", + "Ġtr ips", + "Ġtri ps", + "Ġtrip s", + "Ġ Justin", + "ĠJ ustin", + "ĠJust in", + "ĠJu stin", + "b rowser", + "browse r", + "=\" '.$", + "=\"' .$", + "=\"'. $", + ". vertices", + ".vert ices", + "8 21", + "82 1", + "- co", + "-c o", + "} /{", + "}/ {", + "Ġ ?,", + "Ġ? ,", + "Ġ Domin", + "ĠD omin", + "ĠDo min", + "ĠDom in", + "ĠBe lg", + "ĠBel g", + "\" <", + "Ġsup pose", + "Ġsupp ose", + "a ddy", + "ad dy", + "add y", + "Ġwalk s", + "Ġwal ks", + "6 88", + "68 8", + "ER RU", + "ERR U", + "_ filters", + "_f ilters", + "_filter s", + "_fil ters", + "_filt ers", + "Pre ferred", + "s cene", + "sc ene", + "е Ñģ", + "ĠAff airs", + "Ġ\" #{", + "Ġ\"# {", + "Ġon Submit", + "Ġ stocks", + "Ġst ocks", + "Ġstock s", + "Ġsto cks", + "/ view", + "/v iew", + "g ree", + "gr ee", + "gre e", + "- get", + "-g et", + "9 03", + "90 3", + "h it", + "hi t", + "J o", + ". getC", + ".get C", + "7 25", + "72 5", + "Init ialized", + "Initial ized", + "Initialize d", + "ÑĤ и", + "c uts", + "cut s", + "cu ts", + "( Type", + "(T ype", + "ĠAg reement", + "ĠAgree ment", + "ĠViet nam", + "Ġ /*!", + "Ġ/* !", + "Ġ pizza", + "Ġp izza", + "Ġpi zza", + "- view", + "-v iew", + "_ em", + "_e m", + "Ġ lhs", + "Ġl hs", + "Ġlh s", + "Ġm uy", + "Ġmu y", + "Ġ Ident", + "ĠI dent", + "ĠId ent", + "ĠIde nt", + "Ġ Friends", + "ĠF riends", + "ĠFriend s", + "ĠFri ends", + "0 61", + "06 1", + "Ġab und", + "_ AD", + "_A D", + ". timestamp", + ".t imestamp", + ".time stamp", + "- '", + "Ġ duplicate", + "Ġd uplicate", + "Ġdup licate", + "Ġduplic ate", + "Ġh unting", + "Ġhun ting", + "Ġhunt ing", + "Ġreg ulatory", + "Ġregul atory", + "Ġregulator y", + "i ao", + "ia o", + "am ous", + "amo us", + "ĠEnt ertainment", + "ĠEnter tainment", + "[ A", + "iat ric", + "_ CLIENT", + "_CL IENT", + "_CLI ENT", + "Ġ Kids", + "ĠK ids", + "ĠKi ds", + "ĠKid s", + "/ pkg", + "/p kg", + "B reak", + "Bre ak", + ") ));ĊĊ", + ")) );ĊĊ", + ")));Ċ Ċ", + "))) ;ĊĊ", + "))); ĊĊ", + "Ġ Shape", + "ĠS hape", + "ĠSh ape", + "ĠSha pe", + "Ġrel ating", + "Ġrelat ing", + "Int errupt", + "Inter rupt", + "able Opacity", + "em bre", + "emb re", + "embr e", + "Ġm ystery", + "Ġmy stery", + "Ġmys tery", + "Ġmyst ery", + "Ġmyster y", + "Ġjournal ists", + "Ġjournalist s", + "r itable", + "ri table", + "rit able", + "rita ble", + ". Link", + ".L ink", + "Ġst opping", + "Ġstop ping", + "Ġsto pping", + "C RET", + "CR ET", + "CRE T", + ". DB", + ".D B", + "Ġpop ularity", + "Ġpopular ity", + "Ġpopul arity", + "Ġ gew", + "Ġg ew", + "Ġge w", + "Ġi mpr", + "Ġim pr", + "Ġimp r", + "set Value", + "F LAG", + "FL AG", + "ĉ max", + "ĉm ax", + "Ġb ake", + "Ġba ke", + "Ġbak e", + "w y", + "ĠE conomic", + "ĠEcon omic", + "ĠEc onomic", + "ĠEconom ic", + "Ġen contr", + "Ġ fname", + "Ġf name", + "Ġfn ame", + "/ de", + "/d e", + "R ank", + "Ra nk", + "Ġ bugs", + "Ġb ugs", + "Ġbu gs", + "Ġbug s", + ". sm", + ".s m", + "Ġ median", + "Ġm edian", + "Ġmed ian", + "Ġmedia n", + "Ġmedi an", + "D OWN", + "DO WN", + "Ġ Sure", + "ĠS ure", + "ĠSur e", + "ĠSu re", + "At Index", + "Ġ Dick", + "ĠD ick", + "ĠDi ck", + "Ġ (__", + "Ġ( __", + "Ġ(_ _", + ". delta", + ".d elta", + ".del ta", + "F r", + "Ġsuggest ing", + "Ġ RecyclerView", + "ĠRec yclerView", + ", e", + "ST ART", + "STAR T", + "STA RT", + "/ ****************************************************************************", + "/************************************************************************ ****", + "/**************************************************************** ************", + "/******************************************************** ********************", + "/************************************************ ****************************", + "x ford", + "xf ord", + "Ġ receipt", + "Ġre ceipt", + "Ġrece ipt", + "CL AIM", + "CLA IM", + "read only", + "9 68", + "96 8", + "Ġeng aging", + "6 19", + "61 9", + "C a", + "as ma", + "asm a", + "Ġens uring", + "Eng lish", + "ĠV ancouver", + "h yth", + "hy th", + "Ġpurch asing", + "Ġ PI", + "ĠP I", + ". word", + ".w ord", + "( sp", + "(s p", + ". home", + ".h ome", + ".hom e", + ": def", + ":d ef", + "Ġg ig", + "Ġgi g", + "5 74", + "57 4", + "6 71", + "67 1", + "Ġ Ve", + "ĠV e", + "f orum", + "fo rum", + "for um", + "Ġ Mitch", + "ĠM itch", + "ĠMit ch", + "B ay", + "Ba y", + "_ FL", + "_F L", + "6 51", + "65 1", + "Ġs oll", + "Ġso ll", + "Ġsol l", + "5 77", + "57 7", + "_ columns", + "_column s", + "Ġminor ity", + "b ird", + "bi rd", + "bir d", + "Ġh anded", + "Ġhand ed", + "Ġhan ded", + "S SL", + "SS L", + "ST AT", + "STA T", + "Ġnerv ous", + "Ġner vous", + "ĥ ½", + "Ġ filePath", + "Ġfile Path", + "C REATE", + "CRE ATE", + "A w", + "Ġp ens", + "Ġpe ns", + "Ġpen s", + "8 35", + "83 5", + "s eed", + "se ed", + "see d", + "Ġ Compute", + "ĠCom pute", + "ĠComp ute", + "ĠComput e", + "o lk", + "ol k", + "5 94", + "59 4", + "Ġ Asset", + "ĠAs set", + "ĠAss et", + "r each", + "re ach", + "rea ch", + "' ),čĊ", + "') ,čĊ", + "'), čĊ", + "n avigation", + "nav igation", + "L F", + "/ util", + "/u til", + "Ġ Pub", + "ĠP ub", + "ĠPu b", + "Ġ âĶ", + "Ġâ Ķ", + "c ion", + "ci on", + "cio n", + "# #Ċ", + "## Ċ", + "0 72", + "07 2", + "I II", + "II I", + "Tag Name", + "Ġa mid", + "Ġam id", + "Ġami d", + "per mission", + "perm ission", + "if iable", + "ifi able", + "x FFFFFFFF", + "xFF FFFFFF", + "xFFFF FFFF", + "xFFFFFF FF", + "н и", + ". Buffer", + ".B uffer", + "_ irq", + "_i rq", + "_ir q", + "d ark", + "da rk", + "dar k", + "Ġ retval", + "Ġret val", + ". fire", + ".f ire", + ".fi re", + "p roduction", + "pro duction", + "product ion", + "produ ction", + "prod uction", + ". listen", + ".l isten", + ".list en", + ".li sten", + "Ġ Weather", + "ĠWe ather", + "Ġbu yers", + "Ġbuy ers", + "Ġbuyer s", + ". ne", + ".n e", + "e rp", + "er p", + "ĠP ent", + "ĠPe nt", + "ĠPen t", + "6 99", + "69 9", + "Ġw elfare", + "Ġwel fare", + "Ġ pageSize", + "Ġpage Size", + "ĠSt adium", + "ĠStad ium", + "er ta", + "ert a", + "Ġ lev", + "Ġl ev", + "Ġle v", + "am pa", + "amp a", + "P ager", + "Page r", + "Pa ger", + "Pag er", + "6 65", + "66 5", + "Ġ charging", + "Ġch arging", + "Ġchar ging", + "Ġcharg ing", + "Ġ Netflix", + "ĠNet flix", + "| null", + "_ random", + "_r andom", + "_rand om", + ". xpath", + ".x path", + "Ġs tere", + "Ġst ere", + "Ġste re", + "Ġster e", + "Ġ ISIS", + "ĠIS IS", + "ĠISI S", + "pon ses", + "ponse s", + "pons es", + "( loc", + "(l oc", + "(lo c", + "5 66", + "56 6", + "ey ond", + "Ġ Official", + "ĠOff icial", + "6 57", + "65 7", + "ĠMary land", + "Data Type", + "_ par", + "_p ar", + "_pa r", + "{ },", + "{} ,", + "Ġ Enjoy", + "ĠEn joy", + "7 27", + "72 7", + "_ SHIFT", + "_SH IFT", + "ĠA wards", + "ĠAward s", + "ĠAw ards", + "_ ENTRY", + "_EN TRY", + "_ENT RY", + "Ġseem ingly", + "Ġseeming ly", + "ent icate", + "entic ate", + "enti cate", + "Ġhe arts", + "Ġheart s", + "Ġhear ts", + "5 83", + "58 3", + "_ ;ĊĊ", + "_;Ċ Ċ", + "_; ĊĊ", + "ĠH IV", + "ĠHI V", + "Ġin divid", + "Ġind ivid", + "Ġindiv id", + "Ġ Flag", + "ĠF lag", + "ĠFl ag", + "ĠFla g", + "_ ctrl", + "_c trl", + "_ct rl", + "_ctr l", + "Ġ Callback", + "ĠC allback", + "ĠCall back", + ", z", + "Ġ GPU", + "ĠG PU", + "ĠGP U", + "ĉ obj", + "ĉo bj", + "ĉob j", + "Ġ Phoenix", + "ĠPh oenix", + "Ġ BUS", + "ĠB US", + "ĠBU S", + "9 07", + "90 7", + "Ġr ubber", + "Ġrub ber", + "_ AUTH", + "_A UTH", + "_AUT H", + "ĠS olutions", + "ĠSol utions", + "ĠSolution s", + "( location", + "(l ocation", + "(loc ation", + "(lo cation", + "Variable s", + "Vari ables", + ". setEnabled", + ".set Enabled", + "_ high", + "_h igh", + "_hi gh", + "W O", + "G esture", + "Ġ retry", + "Ġre try", + "Ġr etry", + "Ġret ry", + "Ġretr y", + "Ġobject ForKey", + "allow een", + "allo ween", + "Ġ mos", + "Ġm os", + "Ġmo s", + "Ġ Cele", + "ĠC ele", + "ĠCe le", + "ĠCel e", + "Ġi kke", + "Ġik ke", + "( cell", + "(c ell", + "Ġ MODE", + "ĠM ODE", + "ĠMO DE", + "ĠMOD E", + "r ena", + "re na", + "ren a", + "Ġdes cribing", + "Ġdescri bing", + "6 41", + "64 1", + "Ġ phi", + "Ġp hi", + "Ġph i", + "Ġ rd", + "Ġr d", + "Ġde serve", + "Ġdes erve", + "Ġdese rve", + "Ġdeser ve", + "Ġw heels", + "Ġwheel s", + "Ġwhe els", + "å¸ Ĥ", + "Ġcr itics", + "Ġcrit ics", + "Ġcritic s", + "Ġcri tics", + "7 55", + "75 5", + "N amespace", + "Name space", + "Names pace", + "Ġ Fra", + "ĠF ra", + "ĠFr a", + "Ġ ĊĊĊĊ", + "ĠĊ ĊĊĊ", + "ĠĊĊ ĊĊ", + "ĠĊĊĊ Ċ", + "Ġ alla", + "Ġa lla", + "Ġal la", + "Ġall a", + "Ġre quiring", + "Ġrequ iring", + "æľ Ł", + "ut ation", + "uta tion", + "Ġdel ayed", + "Ġdelay ed", + "Ġadministr ative", + "Ġ bay", + "Ġb ay", + "Ġba y", + ". hidden", + ".h idden", + "T ex", + "Te x", + "0 51", + "05 1", + "Ġbound aries", + "Ġ ]);ĊĊ", + "Ġ] );ĊĊ", + "Ġ]);Ċ Ċ", + "Ġ]) ;ĊĊ", + "Ġ]); ĊĊ", + "Ġ Following", + "ĠFollow ing", + "~ /", + "F i", + "_ conv", + "_con v", + "_co nv", + "_ TITLE", + "_T ITLE", + "Ġdes de", + "I CollectionView", + "ICollection View", + "A lias", + "Al ias", + "Ali as", + "Ġ bite", + "Ġb ite", + "Ġbit e", + "Ġbi te", + "p atient", + "pat ient", + "_ COMMAND", + "_COM MAND", + "_COMM AND", + "Com pleted", + "Complete d", + "Comp leted", + "Comple ted", + "ĉ elif", + "ĉe lif", + "ĉel if", + "( <", + "B usiness", + "Bus iness", + "Ġ Pool", + "ĠP ool", + "ĠPo ol", + "Ġpurs ue", + "Ġ Ban", + "ĠB an", + "ĠBa n", + "_ steps", + "_st eps", + "_step s", + "_ste ps", + "_ DECL", + "_DE CL", + "_DEC L", + "um ble", + "umb le", + "Ġ combo", + "Ġc ombo", + "Ġcom bo", + "Ġcomb o", + "Ġ Layer", + "ĠL ayer", + "ĠLa yer", + "ĠLay er", + ". xr", + ".x r", + "Ġ dup", + "Ġd up", + "Ġdu p", + "- --------", + "-- -------", + "---- -----", + "-------- -", + "--- ------", + "----- ----", + "------ ---", + "------- --", + "6 28", + "62 8", + "Ġ modifier", + "Ġmod ifier", + "r ob", + "ro b", + "r ez", + "re z", + "6 96", + "69 6", + "Ġath letes", + "Ġathlete s", + "U sed", + "Us ed", + "Use d", + "w ear", + "we ar", + "8 15", + "81 5", + "Ġleg itimate", + "Ġlegit imate", + "Ġlegitim ate", + "Ġ \"ĊĊ", + "Ġ\" ĊĊ", + "Ġ\"Ċ Ċ", + "Ġ hv", + "Ġh v", + "S td", + "St d", + "0 37", + "03 7", + "Ġ Hold", + "ĠH old", + "ĠHol d", + "ĠHo ld", + "Ġsurv iv", + "ĠAll iance", + "Ġ Early", + "ĠEar ly", + "ĠEarl y", + "7 78", + "77 8", + "Beh avior", + "( font", + "(f ont", + "/ libs", + "/lib s", + "/l ibs", + "/li bs", + "Ġ rectangle", + "Ġrect angle", + "Ġs inger", + "Ġsi nger", + "Ġsin ger", + "Ġsing er", + "Ġ amp", + "Ġa mp", + "Ġam p", + "Equal To", + "Ġ \".\"", + "Ġ\" .\"", + "Ġ\". \"", + "Ġgirl friend", + "å ±", + "l inear", + "li near", + "line ar", + "lin ear", + "o bserv", + "ob serv", + "obs erv", + "Ġpi ù", + "Ġcom plement", + "Ġcomp lement", + "Ġcomple ment", + "Ġcompl ement", + "With Value", + "( password", + "(p assword", + "(pass word", + "t ake", + "ta ke", + "tak e", + "Bl ank", + "Ġ Compar", + "ĠCom par", + "ĠCo mpar", + "ĠComp ar", + "' \",", + "'\" ,", + "_ policy", + "_p olicy", + "_pol icy", + "m ongoose", + "mongo ose", + "mong oose", + "_ FAILED", + "_FAIL ED", + "_FA ILED", + ". report", + ".re port", + ".repo rt", + ".rep ort", + "R atio", + ".Perform Layout", + "7 47", + "74 7", + "us able", + "usa ble", + "m ers", + "mer s", + "me rs", + "_ render", + "_re nder", + "_r ender", + "PE ED", + "7 72", + "77 2", + "Ġle sb", + "Ġles b", + "ĉ E", + "_ tool", + "_t ool", + "_to ol", + "Ġl adies", + "Ġlad ies", + "9 08", + "90 8", + "о Ñģ", + ") )))Ċ", + ")) ))Ċ", + "))) )Ċ", + ")))) Ċ", + "; ;;;", + ";; ;;", + ";;; ;", + ". dot", + ".d ot", + ".do t", + "Ġ nest", + "Ġn est", + "Ġne st", + "Ġnes t", + "pe ak", + "uk kit", + "e ca", + "ec a", + "_ SW", + "_S W", + "Ġ &(", + "Ġ& (", + "ĠOk lahoma", + "Ġb anking", + "Ġbank ing", + "Ġban king", + "5 69", + "56 9", + "Ġ Nintendo", + "ĠN intendo", + "7 52", + "75 2", + "Ġre produce", + "Ġrep roduce", + "Ġreprodu ce", + "Ġrepro duce", + "_ elements", + "_e lements", + "_element s", + "_el ements", + "_elem ents", + "_ele ments", + "_ mac", + "_m ac", + "_ma c", + "pr oxy", + "pro xy", + "prox y", + "Ġremark able", + "} /${", + "}/ ${", + "Ġ outs", + "Ġo uts", + "Ġout s", + "Ġou ts", + ".has Next", + "M ODE", + "MO DE", + "MOD E", + "6 58", + "65 8", + "Ġ anime", + "Ġan ime", + "Ġanim e", + "Ġani me", + ". conn", + ".c onn", + ".con n", + ".co nn", + "Un ique", + "Uni que", + "D om", + "Do m", + "Ġimport antly", + "Ġimportant ly", + "i tty", + "it ty", + "itt y", + "Ġju ice", + "T w", + "ĠPart ners", + "ĠPartner s", + "Ġatt acking", + "Ġattack ing", + "Ġport able", + "Ġpor table", + "Ġporta ble", + "am iento", + "ami ento", + "amient o", + ". PictureBox", + ".P ictureBox", + ". gen", + ".g en", + ".ge n", + "Ġopt imal", + "Ġoptim al", + "5 82", + "58 2", + "Ġre cre", + "Ġrec re", + "Ġjournal ist", + "Ġ Extract", + "ĠEx tract", + "ĠExt ract", + "ĠExtra ct", + "ĠExtr act", + "Ġ Moreover", + "ĠMore over", + "Ġ marginTop", + "Ġmargin Top", + ". Ap", + ".A p", + "Ġf iring", + "Ġfi ring", + "Ġfir ing", + "N aN", + "Na N", + "ĉ template", + "ĉt emplate", + "ĉtemp late", + "а д", + "аР´", + ". En", + ".E n", + "Ġdef ence", + "Ġdefe nce", + "Ġ Tel", + "ĠT el", + "ĠTe l", + "i len", + "il en", + "ile n", + "j an", + "ja n", + "= data", + "=d ata", + "Ġ Url", + "ĠU rl", + "ĠUr l", + "Ġ Reuters", + "ĠRe uters", + "( total", + "(t otal", + "(to tal", + "ĠF ifth", + "ĠFif th", + "Ġes says", + "Ġess ays", + "Ġessay s", + "Ġessa ys", + "Ġinterpret ation", + "Ġch arity", + "Ġchar ity", + "Ġ Rules", + "ĠR ules", + "ĠRule s", + "ĠRu les", + "Ġ subsection", + "Ġsub section", + "Ġsubs ection", + "st yled", + "style d", + "sty led", + "styl ed", + "a zer", + "az er", + "aze r", + "l ags", + "la gs", + "lag s", + "L IST", + "LI ST", + "Ġ uploaded", + "Ġup loaded", + "Ġupload ed", + "Ġ trash", + "Ġtr ash", + "Ġtra sh", + "Ġtras h", + "Ġ registr", + "Ġreg istr", + "Ġregist r", + "Ġ seller", + "Ġs eller", + "Ġse ller", + "Ġsell er", + "Ġsel ler", + "> ';čĊ", + ">' ;čĊ", + ">'; čĊ", + "Ġ startTime", + "Ġstart Time", + "ç Ļ", + "s y", + "( HttpServletRequest", + "(Http ServletRequest", + "Ġ trap", + "Ġt rap", + "Ġtr ap", + "Ġtra p", + "G C", + "Ġ embedded", + "Ġembed ded", + "Ġsur rounded", + "Ġsurround ed", + "8 16", + "81 6", + "i mits", + "im its", + "imit s", + "imi ts", + "T X", + "yl inder", + "6 85", + "68 5", + "Ġ Fal", + "ĠF al", + "ĠFa l", + "Ġsent ences", + "Ġsentence s", + "Ġ Ja", + "ĠJ a", + "IF ICATION", + "IFIC ATION", + "we apon", + "o vation", + "ov ation", + "ova tion", + "ovat ion", + "Ġ coat", + "Ġco at", + "Ġinter pol", + "Ġinterp ol", + "Ġl ips", + "Ġli ps", + "Ġlip s", + "Ġ Ky", + "ĠK y", + "Ġv ectors", + "Ġvector s", + "Ġve ctors", + "Ġvec tors", + "Ġvect ors", + "_ am", + "_a m", + "Ġin take", + "Ġint ake", + ". world", + ".w orld", + "Ġ inbox", + "Ġin box", + "Ġ MAC", + "ĠM AC", + "ĠMA C", + "_ ab", + "_a b", + "( nameof", + "(name of", + "6 33", + "63 3", + "Ġent ert", + "Ġenter t", + "Ġg athering", + "Ġgather ing", + "Ġ SIM", + "ĠS IM", + "ĠSI M", + "+ +.", + "++ .", + "n ya", + "ny a", + "' }}", + "'} }", + "Ġ UPDATE", + "ĠUP DATE", + "Ġ pac", + "Ġp ac", + "Ġpa c", + "( html", + "(h tml", + "(ht ml", + "ĠS ant", + "ĠSan t", + "ĠSa nt", + "i ating", + "ia ting", + "iat ing", + "ĠIde as", + "ĠIdea s", + "Ġs pray", + "Ġsp ray", + "Ġspr ay", + "ĠH art", + "ĠHar t", + "ĠHa rt", + "Ġ verification", + "Ġver ification", + "Ġverifica tion", + "ad esh", + "ade sh", + "ades h", + "/ modules", + "/mod ules", + "/module s", + "Ġ Mind", + "ĠM ind", + "ĠMin d", + "ĠMi nd", + "ĠSized Box", + "Ġsh elter", + "Ġshel ter", + "Ġ heroes", + "Ġher oes", + "Ġhero es", + "a tty", + "at ty", + "att y", + "Ġcert ified", + "Ġcertif ied", + "s j", + "Ġ être", + "Ġê tre", + "ÅĤ o", + "Ġpublish ing", + "ĠMal ays", + "ĠMa lays", + "ĠMalay s", + ". getUser", + ".get User", + "Ġ Provider", + "ĠPro vider", + "ĠProvid er", + "ĠProvide r", + "ĠProv ider", + "Ġ LinkedList", + "ĠLink edList", + "ĠLinked List", + "ĠB or", + "ĠBo r", + "R OUND", + "RO UND", + "d id", + "di d", + "t ain", + "ta in", + "p ire", + "pi re", + "pir e", + "ĠJ enn", + "ĠJe nn", + "ĠJen n", + "t el", + "te l", + "a nde", + "an de", + "and e", + "7 57", + "75 7", + "_ front", + "_f ront", + "_fr ont", + "ĠMc G", + "Test Method", + "ภŃ", + "Ġocc asionally", + "Ġoccasion ally", + "Ġoccasional ly", + "ĠW ales", + "ĠWal es", + "ĠWa les", + "Ġex ercises", + "Ġexerc ises", + "Ġexercise s", + "Ġ ÐĴ", + "ĠÐ Ĵ", + "0 45", + "04 5", + "- plus", + "-p lus", + "-pl us", + "Ġ validator", + "Ġvalid ator", + "Ġvalida tor", + "Ġpr ayer", + "Ġpray er", + "Ġpra yer", + "L ATED", + "LA TED", + "LAT ED", + "_ author", + "_a uthor", + "_auth or", + "_aut hor", + "Ġla bour", + "Ġlab our", + "+ +Ċ", + "++ Ċ", + "- equiv", + "-e quiv", + "-equ iv", + "Ġ GPL", + "ĠG PL", + "ĠGP L", + "Ġ facebook", + "Ġf acebook", + "Ġface book", + "s imple", + "sim ple", + "simp le", + "g ly", + "gl y", + "Process or", + "Proc essor", + "i py", + "ip y", + "7 44", + "74 4", + "Ġ *>", + "Ġ* >", + "6 48", + "64 8", + "Ġc leared", + "Ġclear ed", + "Ġcle ared", + "Ġ Push", + "ĠP ush", + "ĠPu sh", + "8 58", + "85 8", + "Ġp enis", + "Ġpe nis", + "Ġpen is", + "Struct ure", + "l ij", + "li j", + "ĠM organ", + "ĠMo rgan", + "ĠMor gan", + "ĠMorg an", + "Ġhand ful", + "\" .Ċ", + "\". Ċ", + "9 84", + "98 4", + "| \\", + "Ġ ********************************", + "Ġ**** ****************************", + "Ġ******** ************************", + "Ġ**************** ****************", + "Ġ************************ ********", + "Ġ Aqu", + "ĠA qu", + "5 84", + "58 4", + "_ IC", + "_I C", + ". loads", + ".load s", + ".lo ads", + "Ġ meter", + "Ġm eter", + "Ġme ter", + "Ġmet er", + "ĠM arine", + "ĠMar ine", + "ĠMa rine", + "ĠMari ne", + "ĠMarin e", + ": :{", + ":: {", + "Ġ TS", + "ĠT S", + "7 76", + "77 6", + "Ġ Arrays", + "ĠAr rays", + "ĠArray s", + "ĠArr ays", + ". Title", + ".T itle", + "G RAM", + "GR AM", + "GRA M", + "ter min", + "term in", + "Ġco inc", + "Ġcoin c", + "Ġcoi nc", + "E lse", + "El se", + "_ states", + "_st ates", + "_state s", + "_stat es", + "_sta tes", + "- run", + "-r un", + "m embers", + "member s", + "mem bers", + "7 82", + "78 2", + "a stro", + "as tro", + "ast ro", + "astr o", + "0 66", + "06 6", + "Ġon Press", + "Ġbe ings", + "Ġbeing s", + "Ġab andoned", + "Ġabandon ed", + "Ġtax p", + "Ġta xp", + "ow ners", + "own ers", + "owner s", + ". mode", + ".m ode", + ".mod e", + ".mo de", + "Ġdi agnosis", + "Ġdiagn osis", + "Ġdiag nosis", + "Ġ _Ċ", + "Ġ_ Ċ", + "Ġ Knight", + "ĠK night", + "ĠKn ight", + "ĉ A", + "Ġ observe", + "Ġob serve", + "Ġobs erve", + "Ġobserv e", + ") ,'", + "), '", + "8 23", + "82 3", + "! \")Ċ", + "!\" )Ċ", + "!\") Ċ", + "Ġ Para", + "ĠP ara", + "ĠPar a", + "ĠPa ra", + "Ġ variation", + "Ġvar iation", + "Ġvari ation", + "( False", + "(F alse", + "Ġ Anti", + "ĠAn ti", + "ĠAnt i", + "Ġg ri", + "Ġgr i", + "Ġhome less", + "Ġhom eless", + "? v", + "Ġb ez", + "Ġbe z", + ". Server", + ".S erver", + ".Serve r", + "r elease", + "re lease", + "rel ease", + "ĠP atri", + "ĠPat ri", + "ĠPa tri", + "Ġ chars", + "Ġch ars", + "Ġchar s", + "Ġcha rs", + "Ġ ranking", + "Ġr anking", + "Ġrank ing", + "Ġran king", + "act ivation", + "activ ation", + "5 81", + "58 1", + "Ġw ides", + "Ġwide s", + "Ġwid es", + "Ġwi des", + "q r", + ". Sql", + ".S ql", + "a cular", + "ac ular", + "acula r", + "Ġ Bot", + "ĠB ot", + "ĠBo t", + "_ sync", + "_s ync", + "_syn c", + "_sy nc", + "Ġh appiness", + "Ġhapp iness", + "Ġvol unteers", + "Ġvolunte ers", + "Ġvolunteer s", + "8 77", + "87 7", + "Ġs its", + "Ġsit s", + "Ġsi ts", + "/ <", + "[ e", + "( fileName", + "(file Name", + "Ġcap ac", + "Ġca pac", + "8 32", + "83 2", + "Ġ Maria", + "ĠM aria", + "ĠMar ia", + "ĠMa ria", + "ĠMari a", + "f ather", + "fa ther", + "fat her", + "Ġ gram", + "Ġg ram", + "Ġgr am", + "Ġgra m", + "* i", + "Ġc aso", + "Ġca so", + "Ġcas o", + "_ draw", + "_d raw", + "_dr aw", + "Ġ Raw", + "ĠR aw", + "ĠRa w", + "Ġ Iterator", + "ĠIt erator", + "ĠIter ator", + "6 64", + "66 4", + "Ġ Padding", + "ĠP adding", + "ĠPad ding", + "9 24", + "92 4", + "P D", + "B OX", + "BO X", + "ĠS PECIAL", + "ĠSPEC IAL", + "Ġ fecha", + "Ġf echa", + "Ġfe cha", + "Ġfec ha", + "Ġ vide", + "Ġv ide", + "Ġvi de", + "Ġvid e", + "Ġ Leader", + "ĠLe ader", + "ĠLead er", + "ä» ¥", + "$ (\".", + "$( \".", + "$(\" .", + "Ġd iameter", + "Ġdiam eter", + "Ġdia meter", + "Ġm ild", + "Ġmil d", + "Ġmi ld", + "7 45", + "74 5", + "Ġr ocks", + "Ġro cks", + "Ġrock s", + "Ġroc ks", + "app ings", + "apping s", + "0 48", + "04 8", + "d irectory", + "direct ory", + "director y", + "5 57", + "55 7", + ". flush", + ".f lush", + ".fl ush", + "Ġ Jess", + "ĠJ ess", + "ĠJes s", + "ĠJe ss", + "UN IT", + "Ġ Pear", + "ĠP ear", + "ĠPe ar", + "Ġ mandatory", + "Ġm andatory", + "Ġmand atory", + "S ur", + "Su r", + "q t", + "Ġ streams", + "Ġstream s", + "Ġstre ams", + "Ġco operation", + "Ġcooper ation", + "Ġcoop eration", + "Ġ Sac", + "ĠS ac", + "ĠSa c", + "Ġche aper", + "Ġcheap er", + "ĉ ch", + "ĉc h", + "an imation", + "anim ation", + "f are", + "fa re", + "far e", + "( height", + "(h eight", + "( True", + "N Y", + "Ġw rest", + "Ġwr est", + "Ġwre st", + "Ġp olls", + "Ġpol ls", + "Ġpoll s", + "Ġencounter ed", + "Ġencount ered", + "ĠMark etable", + "ĠMarket able", + "_ PASSWORD", + "_P ASSWORD", + "_PASS WORD", + "7 16", + "71 6", + "_ SELECT", + "_SE LECT", + "_SEL ECT", + "ĠArab ia", + "ĠAra bia", + "_ clock", + "_c lock", + "_cl ock", + "Ġ voy", + "Ġv oy", + "Ġvo y", + "Ġ из", + "Ġи з", + "Ġs tir", + "Ġst ir", + "is ible", + "isi ble", + "- effect", + "-e ffect", + "-eff ect", + ". created", + ".c reated", + ".create d", + ".cr eated", + "Ġto ys", + "Ġtoy s", + "ĠTrad able", + "Ġ rust", + "Ġr ust", + "Ġru st", + "Ġrus t", + "Ġ strcpy", + "Ġstr cpy", + "_ timestamp", + "_t imestamp", + "_time stamp", + "Ġtal ented", + "Ġtalent ed", + ", null", + ",n ull", + "Ġ Jobs", + "ĠJ obs", + "ĠJo bs", + "ĠJob s", + "Ġ Portland", + "ĠPort land", + "Ġweak ness", + "Th row", + "Thr ow", + "Ġ Angel", + "ĠAn gel", + "ĠAng el", + "ĠAnge l", + "ä¿ ®", + "7 54", + "75 4", + "Ġun cert", + "Ġunc ert", + "ï¼ī Ċ", + "Ġ ìĿ´", + "ĠìĿ ´", + "Wh ich", + "Ġ[- ]:", + "S omething", + "Some thing", + "Som ething", + "Ġconv icted", + "Ġconvict ed", + "k le", + "kl e", + "ed ium", + "edi um", + "Ġ branches", + "Ġbr anches", + "Ġbranch es", + "Ġbran ches", + "Ġ bases", + "Ġb ases", + "Ġbase s", + "Ġbas es", + "Ġba ses", + "ç ®", + "Ġcomplex ity", + "Ġ Fig", + "ĠF ig", + "ĠFi g", + ". reshape", + ".re shape", + ".res hape", + "$ db", + "$d b", + "7 36", + "73 6", + "_ CONST", + "_CON ST", + "_CO NST", + "Ġ Tes", + "ĠT es", + "ĠTe s", + ". runtime", + ".r untime", + ".run time", + "Ġ deny", + "Ġd eny", + "Ġde ny", + "Ġden y", + "Ġ BSD", + "ĠB SD", + "ĠBS D", + "Ġ kr", + "Ġk r", + "h att", + "ha tt", + "hat t", + "Ġ Static", + "ĠSt atic", + "ĠStat ic", + "ĠSta tic", + "Ġunivers ities", + "Re place", + "Rep lace", + "Ġd rove", + "Ġdr ove", + "Ġdro ve", + "Ġad oles", + "Ġado les", + "_ plugin", + "_pl ugin", + "ĠL GBT", + "ĠLG BT", + "Ġ tex", + "Ġt ex", + "Ġte x", + "d uction", + "du ction", + "duct ion", + "duc tion", + "7 51", + "75 1", + "7 99", + "79 9", + "E DI", + "ED I", + "Ġ Ted", + "ĠT ed", + "ĠTe d", + "_ URI", + "_U RI", + "Ġre ception", + "Ġrece ption", + "Ġrecept ion", + "Ġrecep tion", + "ar ten", + "art en", + "arte n", + ". Single", + ".S ingle", + ".Sin gle", + "r ice", + "ri ce", + "ric e", + "sc ious", + "sci ous", + "8 43", + "84 3", + "_ bg", + "_b g", + "Ġw ages", + "Ġwa ges", + "Ġwage s", + "Ġwag es", + "Ġ Servlet", + "ĠS ervlet", + "ĠServ let", + "UI Layout", + "UIL ayout", + "Ġ formatted", + "Ġform atted", + "Ġformat ted", + ". Mod", + ".M od", + "< class", + " ',Ċ", + ">' ,Ċ", + ">', Ċ", + "Ġexp anding", + "Ġexpand ing", + "Ġ Hamilton", + "ĠHam ilton", + "Ġ Contrib", + "ĠCon trib", + "ĠCont rib", + "ĠContr ib", + ". Tables", + ".T ables", + ".Tab les", + ".Table s", + "7 28", + "72 8", + "Act iv", + "Ac tiv", + "H H", + "o commerce", + "ocom merce", + "_ ;", + "Ġamong st", + "o wing", + "ow ing", + "owi ng", + "8 59", + "85 9", + "Ġ Cold", + "ĠC old", + "ĠCo ld", + "ĠCol d", + "A PH", + "AP H", + "Ġpsych ological", + "Ġpsycho logical", + "_ tensor", + "_t ensor", + "Ġpack aging", + "Ġ Sweden", + "ĠSw eden", + "ĠSwe den", + "Ġ pare", + "Ġp are", + "Ġpar e", + "Ġpa re", + "Ġ aggregate", + "Ġag gregate", + "Ġaggreg ate", + "Ġmod erate", + "Ġmode rate", + "Ġmoder ate", + "8 62", + "86 2", + "_ hand", + "_h and", + "Ġdesign ated", + "Ġdesignate d", + "Ġd rum", + "Ġdr um", + "Ġdru m", + "Ġ getUser", + "Ġget User", + "ĠC reek", + "ĠCre ek", + "ĠCree k", + "_ scope", + "_s cope", + "_sc ope", + "Ġ Transfer", + "ĠTrans fer", + "Ġ Marg", + "ĠM arg", + "ĠMar g", + "ĠMa rg", + "Ġ fighters", + "Ġfight ers", + "Ġfighter s", + "W nd", + "Ġ Sel", + "ĠS el", + "ĠSe l", + "Ġ Launch", + "ĠL aunch", + "ĠLa unch", + "Ġem erging", + "Ġemerg ing", + "i frame", + "if rame", + "ifr ame", + "Ġ Additional", + "ĠAdd itional", + "ĠAddition al", + "Ġf ears", + "Ġfe ars", + "Ġfear s", + "Ġsat ellite", + "_ :", + "Ġ disposing", + "Ġdis posing", + "Ġdisp osing", + "Ġdispos ing", + "Get Value", + "Http Post", + "AT IVE", + "ul ary", + "ular y", + "ula ry", + "View s", + "Vi ews", + "Ġatt ending", + "Ġattend ing", + "ĠT ennessee", + "Ġ Mission", + "ĠM ission", + "ĠMiss ion", + "Ġmed ication", + "Ġmedic ation", + "Ġmedi cation", + "Ġ Wy", + "ĠW y", + "Ġ Anna", + "ĠAn na", + "ĠAnn a", + "Ø ¹", + "Ġ Vertex", + "ĠVer tex", + "ĠVert ex", + ". types", + ".t ypes", + ".type s", + ".typ es", + "O rgan", + "Or gan", + "Org an", + ". DataGridViewTextBoxColumn", + ".DataGridView TextBoxColumn", + "Ġ RS", + "ĠR S", + "Ġt empo", + "Ġtem po", + "Ġtemp o", + "( App", + "(A pp", + "8 92", + "89 2", + "Version UID", + ". point", + ".p oint", + ".po int", + ".poi nt", + "ĠD utch", + "ĠDut ch", + "H ours", + "Hour s", + "Ho urs", + "L U", + "Ġ quoted", + "Ġqu oted", + "Ġquote d", + "Ġquot ed", + "Ġquo ted", + ". builder", + ".b uilder", + ".build er", + "Ġ Perfect", + "ĠPer fect", + "ĠPerf ect", + "Ġ Always", + "ĠAl ways", + "_ two", + "_t wo", + "_tw o", + "Ġexclusive ly", + "Ġexclus ively", + "ĠC ra", + "ĠCr a", + "ific ar", + "ifi car", + "ifica r", + "Ġ AWS", + "ĠA WS", + "ĠAW S", + "ing ham", + "com plex", + "comp lex", + "k ernel", + "ker nel", + "Ġ gravity", + "Ġgr avity", + "Ġgrav ity", + "Ġ wi", + "Ġw i", + "0 52", + "05 2", + "Ġ overview", + "Ġover view", + "Ġov erview", + "6 61", + "66 1", + "Ġ Want", + "ĠW ant", + "ĠWa nt", + "ĠWan t", + "Ġ WP", + "ĠW P", + "( sh", + "(s h", + ". rotation", + ".r otation", + ".rot ation", + "St ates", + "State s", + "Stat es", + "Ġ Teen", + "ĠT een", + "ĠTe en", + "ĠTee n", + "_ components", + "_com ponents", + "_comp onents", + "_component s", + "ì Īĺ", + "ìĪ ĺ", + "Re ceived", + "Receive d", + "Ġly rics", + "Ġlyric s", + "Ġlyr ics", + "r ites", + "ri tes", + "rit es", + "rite s", + "ĉ ĉĉĉĉĠ", + "ĉĉ ĉĉĉĠ", + "ĉĉĉĉ ĉĠ", + "ĉĉĉ ĉĉĠ", + "ĉĉĉĉĉ Ġ", + "- American", + "-A merican", + "-Americ an", + "[ num", + "[n um", + "/ python", + "/p ython", + "/py thon", + "Ġ UART", + "ĠU ART", + "ĠUA RT", + "Ġ apple", + "Ġapp le", + "Ġap ple", + "Ġappl e", + "Ġ Jonathan", + "ĠJon athan", + "Ġm omentum", + "Ġmoment um", + "ภ±", + "Ĥ ¹", + "Ġm ich", + "Ġmi ch", + "Ġmic h", + "an dra", + "and ra", + "andr a", + "Ġb iological", + "Ġbi ological", + "Ġbio logical", + "ĠM ens", + "ĠMe ns", + "ĠMen s", + "Ġ %%", + "Ġ% %", + "el sea", + "else a", + "els ea", + "ĠMex ican", + ".rand int", + "Ġt ale", + "Ġtal e", + "Ġta le", + "Ġ Validate", + "ĠValid ate", + "Ġdef eated", + "Ġdefe ated", + "Ġdefeat ed", + ". htm", + ".h tm", + ".ht m", + "Ġc opper", + "Ġco pper", + "Ġcop per", + "Ġcopp er", + "= /", + "co system", + "cos ystem", + "Ġ rip", + "Ġr ip", + "Ġri p", + "d ecimal", + "de cimal", + "dec imal", + ". VISIBLE", + ".V ISIBLE", + "Ġ Ta", + "ĠT a", + "ĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉ", + "Ġdown loaded", + "Ġdownload ed", + "en vironment", + "Ġno mine", + "Ġnom ine", + "Ġnomin e", + "build ing", + "Ġ Spot", + "ĠS pot", + "ĠSp ot", + "ĠSpo t", + "ipher al", + "iph eral", + "Ġ alto", + "Ġal to", + "Ġalt o", + "q uet", + "qu et", + "que t", + "Ġ FT", + "ĠF T", + "/ get", + "/g et", + "/ge t", + "/ master", + "/m aster", + "W IN", + "WI N", + "åħ ĥ", + "6 76", + "67 6", + "W est", + "We st", + "ar gc", + "arg c", + "Ġpro ducers", + "Ġprodu cers", + "Ġproduce rs", + "Ġproducer s", + "Ġ Much", + "ĠM uch", + "ĠMu ch", + "_ storage", + "_st orage", + "c redit", + "cre dit", + "cr edit", + "cred it", + "C ONT", + "CON T", + "CO NT", + "Ġ vet", + "Ġv et", + "Ġve t", + "Ġ voices", + "Ġvo ices", + "Ġvoice s", + "Ġvoi ces", + "( '',", + "(' ',", + "Ġin struments", + "Ġinstr uments", + "Ġinstrument s", + "6 62", + "66 2", + "Ġ MSG", + "ĠM SG", + "ĠMS G", + "e sse", + "es se", + "ess e", + "re pository", + "repos itory", + "om ics", + "omic s", + "omi cs", + "Ġ dealer", + "Ġde aler", + "Ġdeal er", + "St ill", + "Ġ banner", + "Ġb anner", + "Ġban ner", + "asc ii", + "Ġ remarks", + "Ġre marks", + "Ġr emarks", + "Ġrem arks", + "Ġremark s", + "Ġremar ks", + "[ js", + "[j s", + "Ġshort er", + "g ulp", + "gu lp", + "Ġm yster", + "Ġmy ster", + "Ġmys ter", + "Ġmyst er", + "Ġk un", + "Ġku n", + "Ġ Bird", + "ĠB ird", + "ĠBi rd", + "ĠBir d", + "Ġt iene", + "Ġti ene", + "Ġtie ne", + "7 88", + "78 8", + "n ut", + "nu t", + "Ġ Um", + "ĠU m", + "Ġ wise", + "Ġw ise", + "Ġwis e", + "Ġwi se", + "Y eah", + "Ye ah", + "I NESS", + "IN ESS", + "INE SS", + "INES S", + "0 46", + "04 6", + "_ begin", + "_b egin", + "_be gin", + "_beg in", + "- heading", + "-head ing", + "-he ading", + "C ourse", + "Co urse", + "Cour se", + "Ġ čĊčĊ", + "ĠčĊ čĊ", + "om bie", + "omb ie", + "gr aded", + "grad ed", + "grade d", + "gra ded", + "Ġ GPS", + "ĠG PS", + "ĠGP S", + "Ġ że", + "Ġż e", + "F it", + "Fi t", + "c aption", + "ca ption", + "cap tion", + "capt ion", + "ö n", + "/ image", + "/i mage", + "/im age", + "l ia", + "li a", + "( mod", + "(m od", + "Ġle ak", + "en za", + "enz a", + "6 29", + "62 9", + "/ H", + "Ġ Happy", + "ĠH appy", + "ĠHa ppy", + "ĠHapp y", + "9 93", + "99 3", + "D ist", + "Dis t", + "Di st", + "n x", + "ĠGovern or", + "ĠGover nor", + "( last", + "(l ast", + "t eacher", + "te acher", + "tea cher", + "Ġ Sent", + "ĠS ent", + "ĠSe nt", + "ĠSen t", + "s upport", + "sup port", + "8 38", + "83 8", + "ject ory", + "Ġ Ùħ", + "ĠÙ ħ", + "Reg istration", + "Registr ation", + "0 63", + "06 3", + "Ġ Gray", + "ĠG ray", + "ĠGr ay", + "ĠGra y", + ", false", + ",f alse", + "Ġ adjusted", + "Ġadjust ed", + "Ġadj usted", + "( settings", + "(s ettings", + "(set tings", + "(setting s", + "< R", + "Ġ Mage", + "ĠM age", + "ĠMag e", + "ĠMa ge", + "Ġ plaint", + "Ġpl aint", + "Ġplain t", + "Ġpla int", + "_ )Ċ", + "_) Ċ", + "ĉ it", + "ĉi t", + "o metric", + "om etric", + "omet ric", + "ometr ic", + ". bootstrap", + ".boot strap", + "Ġcar ries", + "Ġcarr ies", + "I p", + "Ġ! $", + "Ġsw imming", + "Ġswim ming", + "Ġ Mario", + "ĠM ario", + "ĠMar io", + "ĠMa rio", + "ĠMari o", + "Ġ Questions", + "ĠQuest ions", + "ĠQuestion s", + "P ACE", + "PA CE", + "æĸ ¹", + "e or", + "eo r", + "} }\"", + "}} \"", + "Ġ oven", + "Ġo ven", + "Ġov en", + "Ġ Kon", + "ĠK on", + "ĠKo n", + "Ġwis dom", + "Ġac quisition", + "ess ment", + "ag ine", + "agi ne", + "Ġex pressions", + "Ġexpress ions", + "Ġexpression s", + "Ġexpr essions", + "Sequential Group", + "F ront", + "Fr ont", + "ul pt", + "ulp t", + "a wk", + "aw k", + "' ])ĊĊ", + "'] )ĊĊ", + "']) ĊĊ", + "'])Ċ Ċ", + "8 13", + "81 3", + "7 32", + "73 2", + "_ AR", + "_A R", + "Ġan alog", + "Ġanal og", + "Ġana log", + "u lin", + "ul in", + "uli n", + "_ PRINT", + "_PR INT", + "_PRI NT", + "Ġ LG", + "ĠL G", + "Ġ blob", + "Ġb lob", + "Ġbl ob", + "Ġblo b", + "Ġ Furthermore", + "ĠFurther more", + "_ component", + "_com ponent", + "_comp onent", + "Ġ Cole", + "ĠC ole", + "ĠCo le", + "ĠCol e", + "L AN", + "LA N", + "SC RIPTION", + "SCRI PTION", + "SCRIPT ION", + "Ġ lap", + "Ġl ap", + "Ġla p", + "ic ensing", + "icens ing", + "_TIME OUT", + "ĠF ro", + "ĠFr o", + "Ġl iability", + "Ġli ability", + "Ġ composed", + "Ġcom posed", + "Ġcomp osed", + "Ġcompose d", + "Ġcompos ed", + "6 34", + "63 4", + ".create SequentialGroup", + "_ person", + "_p erson", + "_per son", + "Ġ beam", + "Ġb eam", + "Ġbe am", + "ĉ ĠĠĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠĠĠ", + "ĉĠ ĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠ Ġ", + "ĉĠĠ ĠĠĠĠĠĠ", + "ĉĠĠĠĠĠ ĠĠĠ", + "ĉĠĠĠĠ ĠĠĠĠ", + "ĉĠĠĠĠĠĠ ĠĠ", + "Ġ NotFound", + "ĠNot Found", + "6 84", + "68 4", + ". 'Ċ", + ".' Ċ", + "ÃŃ s", + ". TextView", + ".T extView", + ".Text View", + "P DF", + "PD F", + "Ġ kar", + "Ġk ar", + "Ġka r", + "_ _('", + "__ ('", + "__( '", + "Ġ \":\"", + "Ġ\" :\"", + "Ġ\": \"", + "_ messages", + "_m essages", + "_message s", + "Ġhar vest", + ". history", + ".h istory", + ".hist ory", + "> 'Ċ", + ">' Ċ", + "- fold", + "-f old", + "æ Ĭ", + "Ġ Better", + "ĠB etter", + "ĠBet ter", + "ĠBett er", + "Ġ\" \\<", + "Ġ\"\\ <", + "sp acing", + "spa cing", + "Ġf urnished", + "Ġfurn ished", + "Ġfurnish ed", + "9 13", + "91 3", + "o ser", + "os er", + "ose r", + "] }Ċ", + "]} Ċ", + "Ġ $\"", + "Ġ$ \"", + "p ull", + "pu ll", + ". Post", + ".P ost", + ".Pos t", + "9 19", + "91 9", + "( ip", + "(i p", + "Ĺ ı", + ". front", + ".f ront", + ".fr ont", + "n te", + "nt e", + "Ġ FM", + "ĠF M", + "g uid", + "gu id", + "gui d", + "8 44", + "84 4", + "Ġnegot iations", + "Ġnegotiation s", + "ag onal", + "agon al", + "ago nal", + "9 34", + "93 4", + "Ġtrem end", + "ung eon", + "unge on", + "A dv", + "Ad v", + "car ousel", + "ÃŁ e", + "_ DESC", + "_D ESC", + "_DE SC", + "Ġ hammer", + "Ġh ammer", + "Ġham mer", + "Ġhamm er", + "ẠŃ", + "Ġ ĠĠĠĠĠĠĠĊĊ", + "ĠĠ ĠĠĠĠĠĠĊĊ", + "ĠĠĠĠ ĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠĠ ĊĊ", + "ĠĠĠ ĠĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠ ĠĊĊ", + "ĠĠĠĠĠ ĠĠĠĊĊ", + "ĠĠĠĠĠĠ ĠĠĊĊ", + "ĠĠĠĠĠĠĠĠĊ Ċ", + "- core", + "-c ore", + "-co re", + "-cor e", + "- service", + "-s ervice", + "-ser vice", + "Ġc orners", + "Ġcor ners", + "Ġcorner s", + "Ġcorn ers", + "Ġ SF", + "ĠS F", + "p red", + "pr ed", + "pre d", + "> A", + "ĠJ Label", + "ĠJL abel", + "Ġrom antic", + "Ġroman tic", + "Ġromant ic", + "Ġtest imony", + "Ġtestim ony", + "Ġtestimon y", + "o sc", + "os c", + "Ġ Generation", + "ĠG eneration", + "ĠGener ation", + "ĠGen eration", + "ĠGene ration", + "as ures", + "asure s", + "asu res", + "_ internal", + "_in ternal", + "_int ernal", + "_inter nal", + "Ġ prints", + "Ġpr ints", + "Ġprint s", + "Ġpri nts", + "Ġprin ts", + "Ġ ])Ċ", + "Ġ] )Ċ", + "Ġ]) Ċ", + "ĠC leveland", + "re po", + "rep o", + "D isc", + "Dis c", + "Di sc", + "6 77", + "67 7", + "7 62", + "76 2", + "Ġ \">Ċ", + "Ġ\" >Ċ", + "Ġ\"> Ċ", + "� ���", + "�� ��", + "��� �", + "Ġ nearest", + "Ġne arest", + "Ġnear est", + "5 91", + "59 1", + "_ tb", + "_t b", + "( require", + "(re quire", + "(req uire", + "E OF", + "EO F", + "- child", + "-ch ild", + "Ġb udd", + "Ġbu dd", + "Ġbud d", + ".Xtra Editors", + "al ties", + "alt ies", + "7 23", + "72 3", + "\\\" :\\\"", + "\\\": \\\"", + "W ords", + "Word s", + "9 17", + "91 7", + "Ġloc ally", + "Ġlocal ly", + "Ġp urchases", + "Ġpurch ases", + "Ġpurchase s", + "6 95", + "69 5", + "D rawer", + "Draw er", + "ex tract", + "ext ract", + "extra ct", + "extr act", + "Ġex ecut", + "Ġexec ut", + "Ġexe cut", + "} '.", + "}' .", + "user data", + "Ġfocus es", + "Ġfoc uses", + "- minute", + "-min ute", + "7 64", + "76 4", + "Ġ Publish", + "ĠP ublish", + "ĠPub lish", + "o go", + "og o", + "Ġm ountains", + "Ġmount ains", + "Ġmountain s", + "B ot", + "Bo t", + "} >{", + "}> {", + "Ġt ension", + "Ġtens ion", + "r od", + "ro d", + "m esh", + "me sh", + "mes h", + "Ġtrans formed", + "Ġtransform ed", + ", R", + "( )}Ċ", + "() }Ċ", + "()} Ċ", + ". long", + ".l ong", + ".lo ng", + ".lon g", + "Ġg orgeous", + "Ġgorge ous", + "Ġ Schedule", + "ĠS chedule", + "Ġold est", + "Ġol dest", + "Ġsub process", + "( IN", + "(I N", + "y ect", + "ye ct", + "ĠCo oper", + "ar ness", + "arn ess", + "Ġ Monitor", + "ĠM onitor", + "ĠMon itor", + ". part", + ".p art", + ".par t", + ".pa rt", + "9 72", + "97 2", + "Ġ NBC", + "ĠN BC", + "ĠNB C", + "6 68", + "66 8", + "Ġc otton", + "Ġcot ton", + "Ġcott on", + "Ġ hol", + "Ġh ol", + "Ġho l", + "7 26", + "72 6", + "Ġ rgba", + "Ġr gba", + "Ġrgb a", + "Ġrg ba", + "Ġ Bio", + "ĠB io", + "ĠBi o", + "Cont inue", + "Contin ue", + "P od", + "Po d", + "Ġparticip ating", + "cl usions", + "clus ions", + "clusion s", + "(By Val", + "7 34", + "73 4", + "à ¬", + "Ġ HOW", + "ĠH OW", + "ĠHO W", + "_set opt", + "Ġaccompany ing", + "0 91", + "09 1", + "a ton", + "at on", + "ato n", + "Ġ /\\", + "Ġ/ \\", + "Ġ Authentication", + "ĠAuth entication", + "ĠAuthentic ation", + "i én", + "ĠBar ack", + "ĠBa rack", + "/ *.", + "/* .", + "Ġe ager", + "Ġea ger", + "Ġeag er", + "Ġ Cancel", + "ĠC ancel", + "ĠCan cel", + "ĠCanc el", + "< lemma", + " $", + "O LEAN", + "OLE AN", + "OK IE", + "IB ILITY", + "U AGE", + "UA GE", + "Ġ Survey", + "ĠS urvey", + "ĠSur vey", + "ĠSurv ey", + "0 71", + "07 1", + "Ġre sign", + "Ġr esign", + "Ġres ign", + "w ing", + "win g", + "wi ng", + "Ġse crets", + "Ġsec rets", + "Ġsecret s", + "Ġsecre ts", + "Ġc hips", + "Ġch ips", + "Ġchip s", + "Ġchi ps", + "JSON Object", + "D esktop", + "Des ktop", + "Desk top", + "5 96", + "59 6", + "_SY MBOL", + "( resource", + "(res ource", + "(re source", + "Ġ< />Ċ", + "ĠĊ", + "Ġnew est", + "Ġne west", + "u li", + "ul i", + "Ġde sert", + "Ġdes ert", + "Ġdese rt", + "Ġdeser t", + "Ġd ip", + "Ġdi p", + "Ġ Pow", + "ĠP ow", + "ĠPo w", + "Ġequ ation", + "Ġeq uation", + "Ġposs ibilities", + "Ġpossibilit ies", + "Ġ Fed", + "ĠF ed", + "ĠFe d", + "os ph", + "osp h", + "Ġ [%", + "Ġ[ %", + "Ġ bubble", + "Ġb ubble", + "Ġbu bble", + "Ġbub ble", + "Ġbubb le", + "ether lands", + "7 93", + "79 3", + "Ġc ement", + "Ġce ment", + ". auto", + ".a uto", + ".au to", + ".aut o", + "_ AN", + "_A N", + "âĢĻ .", + "s election", + "se lection", + "select ion", + "sel ection", + "Ġ Bond", + "ĠB ond", + "ĠBo nd", + "ĠBon d", + "9 88", + "98 8", + "D en", + "De n", + "- O", + ". getType", + ".get Type", + "8 96", + "89 6", + ". Window", + ".W indow", + "p res", + "pr es", + "pre s", + "Ġsw inger", + "Ġswing er", + "\" })Ċ", + "\"} )Ċ", + "\"}) Ċ", + "Ġ pip", + "Ġp ip", + "Ġpi p", + "Ġm ice", + "Ġmi ce", + "Ġmic e", + "Ġ compound", + "Ġcomp ound", + "- plugin", + "-pl ugin", + "i ko", + "ik o", + "Ġcent uries", + "i cular", + "ic ular", + "- inline", + "-in line", + "ĉ key", + "ĉk ey", + "> \\<", + ">\\ <", + "EN SION", + "ENS ION", + "Ġ[ čĊ", + "Ġprecis ely", + "Ġprecise ly", + "Ġ été", + "Ġé té", + "Ġét é", + "Ġ Past", + "ĠP ast", + "ĠPa st", + "ĠPas t", + "ĠCam bridge", + "ĠCamb ridge", + "- full", + "-f ull", + "Ġ analyze", + "Ġan alyze", + "Ġanaly ze", + "Ġ Steven", + "ĠSt even", + "ĠSte ven", + "ĠSteve n", + "Ġ nem", + "Ġn em", + "Ġne m", + "d ue", + "du e", + "o ren", + "or en", + "ore n", + "Ġmus cles", + "Ġmuscle s", + "i jing", + "ij ing", + "iji ng", + "8 52", + "85 2", + "/ -", + "ĠKenn edy", + "5 97", + "59 7", + "R M", + "oss ible", + "Ġact ress", + "Ġd olor", + "Ġdo lor", + "Ġdol or", + "9 14", + "91 4", + "å½ ķ", + "N eed", + "Ne ed", + ". toggle", + ".t oggle", + "Ġ Race", + "ĠR ace", + "ĠRa ce", + "ĠRac e", + "w ers", + "we rs", + "wer s", + ". material", + ".m aterial", + ".mat erial", + "Ġ Due", + "ĠD ue", + "ĠDu e", + "Ġ Pel", + "ĠP el", + "ĠPe l", + "# print", + "Ġin dependence", + "Ġindepend ence", + "ex us", + "Sh adow", + "Ġ encoder", + "Ġe ncoder", + "Ġen coder", + "Ġenc oder", + "Ġencode r", + "( level", + "(le vel", + "Ġ Swift", + "ĠSw ift", + ". doc", + ".d oc", + ".do c", + "_ selection", + "_s election", + "_se lection", + "_select ion", + "_sel ection", + "9 52", + "95 2", + "Ġserial VersionUID", + "9 45", + "94 5", + "Label s", + "Lab els", + "Ġperform ances", + "Ġperformance s", + "Ġperforman ces", + ". Tag", + ".T ag", + "ĠN HL", + "ĠNH L", + "i zen", + "iz en", + "ize n", + "/ UIKit", + "/UI Kit", + "9 91", + "99 1", + "_ CONTROL", + "_CONT ROL", + "Ġe arnings", + "Ġear nings", + "Ġearn ings", + "Ġearning s", + "9 75", + "97 5", + "Ġ Alt", + "ĠA lt", + "ĠAl t", + "_ HANDLE", + "_H ANDLE", + "_HAND LE", + "C tx", + "Ġper su", + "Ġpers u", + "Ġ tran", + "Ġt ran", + "Ġtr an", + "Ġtra n", + "ç ¨", + "_ CHANNEL", + "_CH ANNEL", + "_CHAN NEL", + "Ġs atisfaction", + "Ġsatisf action", + "Ġ GP", + "ĠG P", + "7 69", + "76 9", + "i ox", + "io x", + "m itt", + "mit t", + "mi tt", + "l ando", + "land o", + "la ndo", + "lan do", + "Ġ pig", + "Ġp ig", + "Ġpi g", + "in als", + "inal s", + "ina ls", + "ê ncia", + "ên cia", + "7 31", + "73 1", + "S urface", + "Sur face", + "Ġ UUID", + "ĠU UID", + "Ġbenef icial", + "Ġbenefici al", + "Ġ sequences", + "Ġse quences", + "Ġsequence s", + "Ġsequ ences", + "ĉ memset", + "ĉmem set", + "Ġmag ical", + "Ġmagic al", + " «", + "Ġw orn", + "Ġwor n", + "Ġwo rn", + "A SC", + "AS C", + "p opup", + "pop up", + "C OMP", + "CO MP", + "COM P", + "_ before", + "_b efore", + "_be fore", + "e ness", + "en ess", + "ene ss", + "enes s", + "U i", + "L es", + "Le s", + ". require", + ".re quire", + ".req uire", + ". Serializable", + ".Serial izable", + "add Gap", + "Ġ authorization", + "Ġauthor ization", + "0 85", + "08 5", + ".py plot", + "u rray", + "ur ray", + "urr ay", + "l atitude", + "lat itude", + "8 45", + "84 5", + "f rames", + "fr ames", + "frame s", + "fra mes", + "fram es", + "a js", + "aj s", + "Ġ compass", + "Ġcom pass", + "Ġcomp ass", + "Ġ observations", + "Ġobs ervations", + "Ġobserv ations", + "Ġobservation s", + "_ sup", + "_s up", + "_su p", + ".en viron", + ".env iron", + "Ġtr iple", + "Ġtri ple", + "Ġtrip le", + "Ġ Ruby", + "ĠR uby", + "ĠRub y", + "ĠRu by", + "Ġd rain", + "Ġdr ain", + "Ġdra in", + "_ FILTER", + "_F ILTER", + "S an", + "Sa n", + "U MP", + "UM P", + "Null Exception", + "Ġ Gab", + "ĠG ab", + "ĠGa b", + "o we", + "ow e", + "ĠTur kish", + "ĠTurk ish", + "_ sequence", + "_se quence", + "Ġ Grant", + "ĠG rant", + "ĠGr ant", + "ĠGran t", + "ĠGra nt", + "u ela", + "ue la", + "uel a", + "Ġ wo", + "Ġw o", + "Ġ cube", + "Ġc ube", + "Ġcu be", + "Ġcub e", + "i q", + "Ġdis orders", + "Ġdisorder s", + "Ġextra ordinary", + "Ġextraordin ary", + "Ġ ctrl", + "Ġc trl", + "Ġct rl", + "Ġctr l", + "Ġ Seq", + "ĠS eq", + "ĠSe q", + "en tr", + "ent r", + "8 65", + "86 5", + "Ġsan ctions", + "Ġsanct ions", + "Ġsanction s", + "9 49", + "94 9", + "ut sch", + "uts ch", + "Re ports", + "Report s", + "Rep orts", + "Repo rts", + "Ġ inherit", + "Ġin herit", + "Ġinher it", + "P eriod", + "Per iod", + "Ġphot ography", + "Ġphotograph y", + "Ġ Framework", + "ĠF ramework", + "ĠFr amework", + "ĠFrame work", + "ĠFram ework", + "Ġspecial ist", + "Ġspeci alist", + "Ġ ?ĊĊ", + "Ġ? ĊĊ", + "Ġ?Ċ Ċ", + "_ selected", + "_se lected", + "_select ed", + "_sel ected", + ". Player", + ".P layer", + ".Pl ayer", + ".Play er", + "Ġ allocation", + "Ġal location", + "Ġall ocation", + "Ġalloc ation", + "Ġallo cation", + "( account", + "(a ccount", + "(ac count", + "(acc ount", + "Ġ structural", + "Ġstruct ural", + "v able", + "va ble", + "- offset", + "-off set", + "-o ffset", + "-offs et", + ".App CompatActivity", + "а м", + "аР¼", + ".Add WithValue", + "Ġ icons", + "Ġi cons", + "Ġicon s", + "Ġic ons", + "Ġ shutdown", + "Ġsh utdown", + "Ġshut down", + "_ low", + "_l ow", + "_lo w", + "Ġ Compare", + "ĠCom pare", + "ĠComp are", + "ĠCompar e", + "Ġ Ce", + "ĠC e", + "= head", + "=h ead", + "l am", + "la m", + ". predict", + ".p redict", + ".pre dict", + ".pred ict", + "_ DEC", + "_D EC", + "_DE C", + "Ġ Sleep", + "ĠS leep", + "ĠSlee p", + "ĠSle ep", + "Ġ Gratis", + "ĠGr atis", + "ĠGrat is", + "Ġs uggestion", + "Ġsuggest ion", + "Ġ DEL", + "ĠD EL", + "ĠDE L", + "c aff", + "ca ff", + "caf f", + "av irus", + "avi rus", + "avir us", + "No thing", + "ŀ ĭ", + "Ġwide spread", + "Ġwides pread", + "Ġmechan isms", + "Ġmechanism s", + "Ġ textAlign", + "Ġtext Align", + "oc cup", + "occ up", + "Ġ Rail", + "ĠR ail", + "ĠRa il", + "ĠRai l", + ": NS", + ":N S", + "Ġ fiber", + "Ġf iber", + "Ġfi ber", + "Ġfib er", + "Ġ mk", + "Ġm k", + "Ġv intage", + "- long", + "-l ong", + "-lo ng", + ". reduce", + ".re duce", + ".red uce", + ". Entities", + ".Ent ities", + "( record", + "(re cord", + "(rec ord", + "Ġ pleasant", + "Ġple asant", + "Ġpleas ant", + "F RING", + "FR ING", + ". Cells", + ".C ells", + ".Cell s", + "O TT", + "OT T", + "ĉ elseif", + "ĉelse if", + "6 49", + "64 9", + "7 24", + "72 4", + "_ confirm", + "_con firm", + "_conf irm", + "ĠView Group", + "s ym", + "sy m", + "Ġ pray", + "Ġp ray", + "Ġpr ay", + "Ġpra y", + "Ġsus pected", + "Ġsusp ected", + "Ġsuspect ed", + "Cont ains", + "Con tains", + "Contain s", + "Conta ins", + "9 83", + "98 3", + "Ġb orders", + "Ġborder s", + "Ġbor ders", + "Ġbord ers", + "Ġcomponent Did", + "A SSERT", + "ASS ERT", + "Ġin finite", + "Ġinf inite", + "Ġinfinit e", + "- order", + "-or der", + "Ġ hello", + "Ġh ello", + "Ġhel lo", + "Ġhell o", + "Ġ Grade", + "ĠG rade", + "ĠGr ade", + "ĠGrad e", + "ĠGra de", + ".currentTime Millis", + "ap olis", + "apol is", + "apo lis", + "z h", + "ĉ Object", + "ĉO bject", + ": \\\\", + ":\\ \\", + "H O", + "val uation", + "valu ation", + "Ġ vocab", + "Ġv ocab", + "Ġvo cab", + "Ġvoc ab", + "7 19", + "71 9", + "Ġ coupon", + "Ġc oupon", + "Ġco upon", + "Ġcou pon", + "Ġcoup on", + "ata bases", + "atab ases", + "atabase s", + ". GetType", + ".Get Type", + "L earn", + "Le arn", + "7 92", + "79 2", + "] =\"", + "]= \"", + "Ġ Gary", + "ĠG ary", + "ĠGar y", + "ĠGa ry", + "ot ive", + "oti ve", + "Ġ ash", + "Ġa sh", + "Ġas h", + "Ġ bib", + "Ġb ib", + "Ġbi b", + "X XXX", + "XX XX", + "XXX X", + "Ġ balanced", + "Ġbalance d", + "Ġbal anced", + "VAL UE", + "Ġ Nat", + "ĠN at", + "ĠNa t", + "_ Ad", + "_A d", + "< E", + "åĮ º", + "Ġ MethodInfo", + "ĠMethod Info", + "8 97", + "89 7", + "L IB", + "LI B", + "Ġconsider able", + "Ġconsid erable", + "Ġ Industry", + "ĠInd ustry", + "ĠIndust ry", + "t ests", + "te sts", + "test s", + "tes ts", + ". setTitle", + ".set Title", + "Ġ Bluetooth", + "ĠB luetooth", + "ĠBl uetooth", + "ĠBlu etooth", + "Ġ mapped", + "Ġm apped", + "Ġmap ped", + "Ġma pped", + "Ġ Bruce", + "ĠBr uce", + "ĠBru ce", + "Ġ MainWindow", + "ĠMain Window", + "ĉ status", + "ĉs tatus", + "ĉst atus", + "ĉstat us", + "Ġ raz", + "Ġr az", + "Ġra z", + "ĠM and", + "ĠMan d", + "ĠMa nd", + "Ġ classification", + "Ġclass ification", + "Per missions", + "Permission s", + "Perm issions", + "9 69", + "96 9", + "Ġ ----------------------------------------------------------------------------", + "Ġ---------------------------------------------------------------- ------------", + "Ġ------------------------------------------------ ----------------------------", + "Ġ------------ ----------------------------------------------------------------", + "Ġ------ ----------------------------------------------------------------------", + "Ġ------------------------------------------------------------ ----------------", + "Ġ------------------------------------------------------------------------- ---", + "Ġ containers", + "Ġcont ainers", + "Ġcontainer s", + "Ġcontain ers", + "Ġconta iners", + ": set", + ":s et", + "_ xml", + "_x ml", + "Ġwh ilst", + "Th rough", + "Thr ough", + "Ġv align", + "Ġval ign", + "Ġworld s", + "Ġwor lds", + "C ORD", + "CO RD", + "COR D", + "ED IA", + "EDI A", + "ÑĢ Ð¾Ð²", + "ÑĢо в", + "Ġs pare", + "Ġsp are", + "Ġspa re", + "Ġspar e", + "Ġ Had", + "ĠH ad", + "ĠHa d", + "Ġ DEF", + "ĠD EF", + "ĠDE F", + "( ptr", + "(p tr", + "(pt r", + "Ġw arming", + "Ġwar ming", + "Ġwarm ing", + "8 98", + "89 8", + "ठ¾", + "Ġcons ensus", + "a gne", + "ag ne", + "agn e", + "C TL", + "CT L", + "Ġ ìķ", + "Ġì ķ", + ". Main", + ".M ain", + ".Ma in", + "web Element", + "Ġp ist", + "Ġpi st", + "Ġpis t", + "F lash", + "Fl ash", + "App end", + "Ap pend", + "Appe nd", + ".tw img", + "T ap", + "Ta p", + "Ġveget ables", + "Ġvegetable s", + "a lg", + "al g", + "0 58", + "05 8", + ". sample", + ".s ample", + ".sam ple", + "Ġco aching", + "Ġcoach ing", + "( ind", + "(i nd", + "(in d", + "Cell Value", + "Check Box", + "Ġ Hell", + "ĠH ell", + "ĠHe ll", + "ĠHel l", + "R OOT", + "RO OT", + "7 96", + "79 6", + "Ġst adium", + "Ġstad ium", + "Ġinvestig ating", + ") %", + "s ted", + "st ed", + "ste d", + "9 65", + "96 5", + "Ġ Writing", + "ĠW riting", + "ĠWr iting", + "Ġ ê²", + "Ġê ²", + "Ġ uno", + "Ġu no", + "Ġun o", + "Ġ {{--", + "Ġ{{ --", + "Ġ coords", + "Ġco ords", + "Ġcoord s", + "Ġun ser", + "Ġuns er", + "o rganization", + "organ ization", + "Ġ Crime", + "ĠCr ime", + "ĠCri me", + "ĠDem ocrat", + "ĠDemocr at", + "5 79", + "57 9", + "Ġ vin", + "Ġv in", + "Ġvi n", + "/ file", + "/f ile", + "0 78", + "07 8", + "- api", + "-a pi", + "-ap i", + "Ġ Ay", + "ĠA y", + "Ġf unded", + "Ġfun ded", + "Ġfund ed", + "ĠBr exit", + "ĠBre xit", + "ĠG h", + "ent ina", + "enti na", + "entin a", + "c ases", + "ca ses", + "case s", + "cas es", + "Ġ dash", + "Ġd ash", + "Ġda sh", + "Ġdas h", + "Ġ!! }Ċ", + "Ġ!!} Ċ", + "H I", + "Off ice", + "Ġcap tain", + "Ġcapt ain", + "Ġwor ship", + "Ġwors hip", + "Ġworsh ip", + "\\ C", + "7 33", + "73 3", + "8 51", + "85 1", + "Ġg lobe", + "Ġgl obe", + "Ġglob e", + "Ġglo be", + "_ board", + "_b oard", + "_bo ard", + "Ġb abies", + "Ġba bies", + "Ġbab ies", + "8 76", + "87 6", + "Ġcon secutive", + "Ġconsec utive", + "Ġenh anced", + "Ġenhance d", + "er eum", + "ere um", + "ĠAd vis", + "ĠAdv is", + "Ġg rain", + "Ġgr ain", + "Ġgra in", + "7 71", + "77 1", + "Ġc raw", + "Ġcr aw", + "Ġcra w", + "ancell ationToken", + "ancellation Token", + ". alpha", + ".al pha", + "_ WITH", + "_W ITH", + "ĠO tt", + "ĠOt t", + "Ġ Cool", + "ĠC ool", + "ĠCo ol", + ". batch", + ".b atch", + ".bat ch", + "Ġ verified", + "Ġver ified", + "( callback", + "(c allback", + "(call back", + "Ġreg ards", + "Ġregard s", + "6 83", + "68 3", + "Ġ IntPtr", + "ĠInt Ptr", + "o ucher", + "ou cher", + "ouch er", + "Ġ kin", + "Ġk in", + "Ġki n", + "Ġt ouched", + "Ġtouch ed", + "Ġtou ched", + "it Ãł", + "a thon", + "at hon", + "ath on", + "Ġadj acent", + "Ġaccom panied", + "L EAR", + "LE AR", + "Ġim plies", + "Ġimp lies", + "Ġimpl ies", + "Ġ hill", + "Ġh ill", + "Ġhi ll", + "Ġhil l", + "ĠB altimore", + "ĠBalt imore", + "= \"-", + "=\" -", + "F inally", + "Fin ally", + "Final ly", + "8 83", + "88 3", + "S am", + "Sa m", + "ic opt", + "ico pt", + "Ġs od", + "Ġso d", + "Ġ maj", + "Ġm aj", + "Ġma j", + "Ġ Shipping", + "ĠSh ipping", + "ĠShip ping", + "ĠShi pping", + "Ġ getAll", + "Ġget All", + "Ġco aches", + "Ġcoach es", + "Ġdon ations", + "Ġdonation s", + "i lot", + "il ot", + "ilo t", + "Ġ Tar", + "ĠT ar", + "ĠTa r", + "c err", + "ce rr", + "cer r", + "Ġ badge", + "Ġb adge", + "Ġbad ge", + "Ġba dge", + "Ġ markers", + "Ġm arkers", + "Ġmark ers", + "Ġmar kers", + "Ġmarker s", + "Ġ Rand", + "ĠR and", + "ĠRa nd", + "ĠRan d", + "a ised", + "ai sed", + "ais ed", + "aise d", + "iss ance", + "issa nce", + "issan ce", + "Ġexpl oring", + "Ġexplo ring", + "Ġexplor ing", + "8 27", + "82 7", + "u ced", + "uc ed", + "uce d", + "ĠInd onesia", + "ĠIndones ia", + "ĠIndo nesia", + "Ġbe neath", + "Ġbene ath", + "Ġm agnetic", + "Ġmagn etic", + "Ġmagnet ic", + "Ġm useum", + "Ġmus eum", + "Ġmuse um", + "match Condition", + "Ġdis rupt", + "Ġre mind", + "Ġrem ind", + "Ġremin d", + "Ġ TM", + "ĠT M", + "Ġ /><", + "Ġ/ ><", + "Ġ/> <", + "Ġf ool", + "Ġfo ol", + "Ġfoo l", + "Ġ esk", + "Ġe sk", + "Ġes k", + ". Null", + ".N ull", + "Ġ Dies", + "ĠD ies", + "ĠDi es", + "ĠDie s", + "_ OUTPUT", + "_OUT PUT", + "_TYPE D", + "_TYP ED", + "Ġp ainted", + "Ġpaint ed", + "Ġpain ted", + "6 73", + "67 3", + "7 35", + "73 5", + "Ġsoph istic", + "Ġ Bear", + "ĠB ear", + "ĠBe ar", + "ĠBea r", + "* n", + "_ PACK", + "_P ACK", + "_PA CK", + "Ġdel ivering", + "Ġdeliver ing", + "Ġ COUNT", + "ĠC OUNT", + "ĠCO UNT", + "åį ķ", + "Ġj eg", + "Ġje g", + "- car", + "-c ar", + "-ca r", + "f name", + "fn ame", + "Ġr anging", + "Ġran ging", + "Ġrang ing", + "8 48", + "84 8", + "Ġ Neg", + "ĠN eg", + "ĠNe g", + "/ ******/", + "Ġ CHAR", + "ĠCH AR", + "Ġu ltra", + "Ġult ra", + "Ġul tra", + "Ġultr a", + "G rad", + "Gr ad", + "= t", + "Ġjud ges", + "Ġjudge s", + "ĠD ise", + "ĠDis e", + "ĠDi se", + "an ners", + "ann ers", + "anner s", + "anne rs", + "9 85", + "98 5", + "8 91", + "89 1", + "8 61", + "86 1", + "Ġ scal", + "Ġs cal", + "Ġsc al", + "Ġsca l", + "_ cal", + "_c al", + "_ca l", + "ĠCON NECTION", + "ĠCONNECT ION", + "_ embed", + "_em bed", + "_emb ed", + "( fn", + "(f n", + "Ġ Craft", + "ĠC raft", + "ĠCr aft", + "ĠCra ft", + "0 47", + "04 7", + "Ġ Pas", + "ĠP as", + "ĠPa s", + "\" )->", + "\") ->", + ". convert", + ".con vert", + ".conv ert", + ". resource", + ".re source", + ".res ource", + "Ġ STATUS", + "ĠST ATUS", + "ĠSTAT US", + "ô ng", + "ôn g", + "Ġ Tit", + "ĠT it", + "ĠTi t", + "Ġclass room", + "ĠArch itect", + "ĠK ings", + "ĠKing s", + "ĠKin gs", + "Ġ steady", + "Ġste ady", + "Ġstead y", + "/* !Ċ", + "/*! Ċ", + "Ġ Gene", + "ĠG ene", + "ĠGe ne", + "ĠGen e", + ") \";Ċ", + ")\" ;Ċ", + "i cia", + "ic ia", + "ici a", + "s tan", + "st an", + "sta n", + "Ġ Construction", + "ĠCon struction", + "ĠConstruct ion", + "ĠConstr uction", + "um per", + "ump er", + "9 51", + "95 1", + "w c", + "Ġ CBS", + "ĠC BS", + "ĠCB S", + "in ging", + "ing ing", + "- party", + "-p arty", + "-part y", + "-par ty", + "( driver", + "(d river", + "(dr iver", + "M ARK", + "MA RK", + "MAR K", + "0 82", + "08 2", + "Ġ nested", + "Ġn ested", + "Ġne sted", + "Ġnest ed", + "Ġneste d", + "Ġnes ted", + "e ward", + "ew ard", + "Ġ dependency", + "Ġd ependency", + "Ġdep endency", + "Ġdepend ency", + "Ġm ales", + "Ġma les", + "Ġmale s", + "Ġmal es", + "9 28", + "92 8", + "Ġ ONE", + "ĠO NE", + "ĠON E", + "Ġ Production", + "ĠP roduction", + "ĠPro duction", + "ĠProduct ion", + "ĠProdu ction", + "ĠProd uction", + "] [$", + "][ $", + "ãĥ¼ ãĥ", + "_ LOAD", + "_L OAD", + "_LO AD", + "ĠB ol", + "ĠBo l", + "el ry", + "8 31", + "83 1", + "ł éϤ", + "Ġ Require", + "ĠRe quire", + "ĠReq uire", + "Ġ placing", + "Ġpl acing", + "Ġplac ing", + "Ġpla cing", + "x xx", + "xx x", + "C ALE", + "CA LE", + "CAL E", + "Ġ thumb", + "Ġth umb", + "Ġthu mb", + "8 24", + "82 4", + "Ch oose", + "Cho ose", + "Ġ prototype", + "Ġprot otype", + "Ġproto type", + "V OID", + "VO ID", + "Ġles bian", + "Ġlesb ian", + "Ġlesbi an", + "7 41", + "74 1", + "Ġ traits", + "Ġt raits", + "Ġtr aits", + "Ġtra its", + "Ġtrait s", + "Ġtrai ts", + "Sh arp", + "Shar p", + "Sha rp", + "Ġ consume", + "Ġcon sume", + "Ġcons ume", + "Ġconsum e", + "Tr uth", + "Ġaction Performed", + "Ġ Environmental", + "ĠEnvironment al", + "Ġ Dean", + "ĠD ean", + "ĠDe an", + "Ġ estado", + "Ġest ado", + "Ġesta do", + "Ġestad o", + "s ame", + "sa me", + "sam e", + "Ġ numeric", + "Ġn umeric", + "Ġnum eric", + "Ġnumer ic", + "Ġnu meric", + "Ġtrans it", + "Ġtran sit", + ". Email", + ".E mail", + "- side", + "-s ide", + "_ RUN", + "_R UN", + "ĠV illage", + "ĠVill age", + "ĠVilla ge", + "ĠVil lage", + "_ OPEN", + "_OP EN", + "è ¦", + ". rem", + ".re m", + ".r em", + "- warning", + "-w arning", + "-war ning", + "a nya", + "an ya", + "any a", + "Property Changed", + "Ġ (!_", + "Ġ(! _", + "( check", + "(c heck", + "(ch eck", + "i lia", + "il ia", + "ili a", + "Ġ Soft", + "ĠS oft", + "ĠSo ft", + "ĠSof t", + "st eps", + "ste ps", + "step s", + "ĠMad rid", + "Memory Warning", + "Ġ handlers", + "Ġhand lers", + "Ġhandle rs", + "Ġhandler s", + "Ġexperi encing", + "Ġ inspect", + "Ġin spect", + "Ġins pect", + "Ġinsp ect", + "button s", + "but tons", + "butt ons", + "Receive MemoryWarning", + "ch emy", + "che my", + "chem y", + "L inks", + "Link s", + "Lin ks", + "Ġurl lib", + "Ġur llib", + ".System Colors", + "Ġ Eigen", + "ĠE igen", + "ĠEig en", + "Ġpun ishment", + "Ġpunish ment", + ":UI Control", + "b ara", + "bar a", + "ba ra", + "- set", + "-s et", + "-se t", + "Ġ }čĊčĊčĊ", + "Ġ} čĊčĊčĊ", + "Ġ}čĊ čĊčĊ", + "Ġ}čĊčĊ čĊ", + "Ġt olerance", + "Ġtoler ance", + "Ġ interfaces", + "Ġinter faces", + "Ġinterface s", + "Ġinterf aces", + ". redirect", + ".re direct", + ".red irect", + "ighb ors", + "ighbor s", + "cs rf", + "csr f", + "_ background", + "_back ground", + ". Utils", + ".Util s", + "_ HT", + "_H T", + "6 92", + "69 2", + "Ġ Interest", + "ĠInter est", + "i mos", + "im os", + "imo s", + "Ġgr ants", + "Ġgrant s", + "Ġgran ts", + "Ġgra nts", + "0 83", + "08 3", + "Ġexam ined", + "Ġexamine d", + "Ð Ķ", + "Ġ cf", + "Ġc f", + "f orge", + "for ge", + "forg e", + "b acks", + "back s", + "ba cks", + "bac ks", + "Ġ Objects", + "ĠObject s", + "ĠObj ects", + "_ sent", + "_s ent", + "_se nt", + ". entry", + ".en try", + ".ent ry", + "Ġ THEN", + "ĠT HEN", + "ĠTHE N", + "ĠTH EN", + "ell ido", + "elli do", + "c ia", + "ci a", + ", res", + ",r es", + ",re s", + "6 59", + "65 9", + "6 81", + "68 1", + "/st dc", + "/std c", + ". nd", + ".n d", + "( Int", + "(I nt", + "(In t", + "Ġ Authors", + "ĠAuthor s", + "ĠAuth ors", + "ĠApp CompatActivity", + "' {", + "Ġ medi", + "Ġm edi", + "Ġme di", + "Ġmed i", + "M usic", + "Mu sic", + "Mus ic", + "i gm", + "ig m", + "ce ipt", + "Ġ auss", + "Ġa uss", + "Ġau ss", + "Ġaus s", + "Ġtarget ing", + "Ġtarg eting", + "Ġ Keys", + "ĠKey s", + "ĠKe ys", + "h n", + ": ]Ċ", + ":] Ċ", + "Ġmin eral", + "Ġmine ral", + "Ġminer al", + "à ®", + ". ca", + ".c a", + "7 61", + "76 1", + "o med", + "om ed", + "ome d", + "Ġ sheets", + "Ġs heets", + "Ġshe ets", + "Ġsheet s", + "Ġc amb", + "Ġca mb", + "Ġcam b", + "Ġdead ly", + ". inject", + ".in ject", + "( unit", + "(u nit", + "(un it", + "Ġ Selection", + "ĠS election", + "ĠSe lection", + "ĠSelect ion", + "ĠSel ection", + "ĠSele ction", + ".g ms", + "( connection", + "(con nection", + "(conn ection", + "(connect ion", + "Ġ $(\"", + "Ġ$ (\"", + "Ġ$( \"", + "é mon", + "ém on", + "Ġ Currently", + "ĠCurrent ly", + "p te", + "pt e", + "_ paths", + "_p aths", + "_path s", + "_pa ths", + "_pat hs", + "8 47", + "84 7", + "le af", + "lea f", + "Ġimp lications", + "Ġimpl ications", + "Ġimplication s", + "Ġimplic ations", + "p osal", + "pos al", + "po sal", + "ä½ į", + "[ /", + "a ncia", + "an cia", + "anc ia", + "é Ľ", + "m ul", + "mu l", + "c ie", + "ci e", + "Ġge ile", + "Ġgeil e", + "6 79", + "67 9", + "im als", + "imal s", + "ima ls", + "UI View", + "Ġs urre", + "Ġsur re", + "s erialize", + "serial ize", + "I SO", + "IS O", + "Ġar bitrary", + "Ġarbit rary", + "Ġarbitr ary", + "Ġsock addr", + ". fn", + ".f n", + "Ġ Merc", + "ĠM erc", + "ĠMe rc", + "ĠMer c", + "Ġ casting", + "Ġc asting", + "Ġcas ting", + "Ġcast ing", + "Key Down", + "Ġ newValue", + "Ġnew Value", + "ĠnewVal ue", + "op ens", + "open s", + "ope ns", + "7 17", + "71 7", + "T odo", + "To do", + "Ġflex ibility", + "ĉ ĉĉĉĠĠ", + "ĉĉ ĉĉĠĠ", + "ĉĉĉĉ ĠĠ", + "ĉĉĉ ĉĠĠ", + "ĉĉĉĉĠ Ġ", + "V elocity", + "Vel ocity", + "ú n", + "r owing", + "ro wing", + "row ing", + "Ġ computed", + "Ġcom puted", + "Ġcomp uted", + "Ġcomput ed", + "Ġcompute d", + "` )Ċ", + "`) Ċ", + "st atement", + "state ment", + "stat ement", + "sta tement", + "Ġ ri", + "Ġr i", + "_ cart", + "_c art", + "_car t", + "_ca rt", + "L ow", + "Lo w", + "trans fer", + ". nav", + ".n av", + "Ġ grave", + "Ġgr ave", + "Ġgra ve", + "Ġgrav e", + "Ġ Door", + "ĠD oor", + "ĠDo or", + "ĉ alert", + "ĉal ert", + "6 91", + "69 1", + "6 98", + "69 8", + ". subscribe", + ".sub scribe", + "- profile", + "-pro file", + "-pr ofile", + "-prof ile", + "ĉ base", + "ĉb ase", + "Ġ âĪĴ", + "ĠâĪ Ĵ", + "_ _ĊĊ", + "__ ĊĊ", + "__Ċ Ċ", + "Ġengine ers", + "Ġengineer s", + "Ġexp losion", + "Ġexplos ion", + "Ġd ari", + "Ġda ri", + "Ġdar i", + "6 82", + "68 2", + "ĉ Log", + "ĉL og", + "o nal", + "on al", + "ona l", + "Ġis olated", + "Ġisol ated", + "Ġiso lated", + "Ġisolate d", + "{ i", + "Ġ Msg", + "ĠM sg", + "ĠMs g", + "F uture", + "Fu ture", + "Ġr acist", + "Ġrac ist", + "- wrap", + "-w rap", + "Ġ Vers", + "ĠV ers", + "ĠVer s", + "ĠVe rs", + "b org", + "bo rg", + "bor g", + "I SION", + "IS ION", + "Ġ ÑĢаÐ", + "ĠÑĢ Ð°Ð", + "ĠÑĢа Ð", + "ĠY an", + "ĠYa n", + "8 36", + "83 6", + "init With", + "Ġn omin", + "Ġno min", + "Ġnom in", + "( empty", + "(em pty", + "(emp ty", + "ÃŃ n", + "ã Ĥ¤", + "ãĤ ¤", + "ĉ width", + "ĉw idth", + "Ġch amber", + "Ġcham ber", + "/ ajax", + "/a jax", + "E MP", + "EM P", + "0 93", + "09 3", + "Ġne ces", + "Ġnec es", + "i vos", + "iv os", + "ivo s", + "log ic", + "* )&", + "*) &", + "cri pts", + "cript s", + "9 76", + "97 6", + "Row At", + "0 53", + "05 3", + "i blings", + "ib lings", + "ibling s", + "Ġ ears", + "Ġe ars", + "Ġear s", + "Ġea rs", + "Ġcomp uting", + "Ġcomput ing", + "Ġ maker", + "Ġm aker", + "Ġmake r", + "Ġma ker", + "Ġmak er", + "Ġ Neither", + "ĠN either", + "ĠNe ither", + "b readcrumb", + "Ġ serialize", + "Ġs erialize", + "Ġserial ize", + "Ġ Within", + "ĠWith in", + "ĠWi thin", + "ĠWit hin", + "Ġd ell", + "Ġde ll", + "Ġdel l", + "_ TRACE", + "_TR ACE", + "_TRA CE", + "0 92", + "09 2", + "= a", + "Ġw ishes", + "Ġwish es", + "Ġwis hes", + "- inch", + "-in ch", + "-inc h", + "ĠD or", + "ĠDo r", + "Ġinnoc ent", + "ĠD ol", + "ĠDo l", + "Ġint ens", + "Ġinte ns", + "for ced", + "force d", + "forc ed", + "0 54", + "05 4", + "Ġ BIT", + "ĠB IT", + "ĠBI T", + "Ġphot ographs", + "Ġphoto graphs", + "Ġphotograph s", + "Ġc asa", + "Ġca sa", + "Ġcas a", + "Ġ Len", + "ĠL en", + "ĠLe n", + "\\ Framework", + "\\F ramework", + ". Simple", + ".S imple", + "Ġd ear", + "Ġde ar", + "8 95", + "89 5", + ") /(", + ")/ (", + "ip pi", + "ipp i", + "Ġ owns", + "Ġown s", + "Ġow ns", + "P layers", + "Pl ayers", + "Player s", + "Play ers", + "Ġprop osals", + "Ġpropos als", + "Ġproposal s", + ". pi", + ".p i", + "us alem", + "usa lem", + "usal em", + "D amage", + "Da mage", + "Dam age", + "Ġcal ories", + "Ġcalorie s", + "Ġcalor ies", + "Ġ Creative", + "ĠC reative", + "ĠCre ative", + "ĠCreat ive", + "Ġ [$", + "Ġ[ $", + "Ġ //čĊ", + "Ġ// čĊ", + "Ġ/ /čĊ", + "7 86", + "78 6", + "And View", + "è me", + "èm e", + ". custom", + ".c ustom", + "_ factory", + "_f actory", + "_factor y", + "_fact ory", + "comm ands", + "command s", + "comma nds", + "_ look", + "_l ook", + "_lo ok", + "Ġ strcmp", + "Ġstr cmp", + "Y N", + "a ired", + "air ed", + "ai red", + "aire d", + "Ġ audit", + "Ġa udit", + "Ġaud it", + "Ġau dit", + "Ġaudi t", + "о ÑģÑĤ", + "оÑģ ÑĤ", + "Ġ Reverse", + "ĠRe verse", + "ĠRev erse", + "ĠRever se", + "ropri ate", + "e tics", + "et ics", + "etic s", + "eti cs", + "< vector", + "';Ċ", + "\"> ';Ċ", + "\">' ;Ċ", + "Ġpe pper", + "Ġpepp er", + "Ġpep per", + "9 89", + "98 9", + "Ġ shed", + "Ġs hed", + "Ġsh ed", + "Ġshe d", + "Ġ Medium", + "ĠM edium", + "ĠMed ium", + "ĠMedi um", + "Ġ Cookie", + "ĠC ookie", + "ĠCo okie", + "ĠCook ie", + "8 89", + "88 9", + "Ġoverse as", + "ed or", + "edo r", + "as urement", + "asure ment", + "asu rement", + "7 66", + "76 6", + "åŃ ĺ", + "Ġ' .'", + "Ġ'. '", + "Ġ php", + "Ġp hp", + "Ġph p", + "Ġ PROC", + "ĠP ROC", + "ĠPRO C", + "ĠPR OC", + "Ġexcept ional", + "Ġexception al", + "( th", + "(t h", + "Ġ Jet", + "ĠJ et", + "ĠJe t", + "Ġ occupied", + "Ġoccup ied", + ". setImage", + ".set Image", + "Ġ Related", + "ĠRe lated", + "ĠRel ated", + "u cker", + "uc ker", + "uck er", + "M embers", + "Member s", + "Mem bers", + "PR INT", + "PRI NT", + "ĠG lo", + "ĠGl o", + "_ VIEW", + "_V IEW", + "} \",Ċ", + "}\", Ċ", + "}\" ,Ċ", + "Ġad option", + "Ġadopt ion", + "Ġado ption", + "[ ])Ċ", + "[] )Ċ", + "[]) Ċ", + "8 42", + "84 2", + "ĠMiss ouri", + "ĠLin coln", + "er ald", + "era ld", + "eral d", + "P opup", + "Pop up", + "Ġf ate", + "Ġfa te", + "Ġfat e", + "- bootstrap", + "-boot strap", + "f ections", + "fe ctions", + "fect ions", + "fection s", + "Ġ Poll", + "ĠP oll", + "ĠPol l", + "ĠPo ll", + "_ ARGS", + "_ARG S", + "_AR GS", + "in ance", + "ina nce", + "inan ce", + "6 97", + "69 7", + "- home", + "-h ome", + ". ),", + ".) ,", + "_ done", + "_d one", + "_do ne", + "_don e", + "6 94", + "69 4", + ": ĊĊĊ", + ":Ċ ĊĊ", + ":ĊĊ Ċ", + "Ġdiscuss ing", + "Ġ SQLException", + "ĠSQL Exception", + "Ġelect ro", + "Ġelectr o", + "ĉ req", + "ĉr eq", + "ĉre q", + "Ġ zw", + "Ġz w", + "8 86", + "88 6", + "Ġl ui", + "Ġlu i", + "9 32", + "93 2", + "Ġover night", + "$ user", + "Ġ WAY", + "ĠW AY", + "ĠWA Y", + "Ġall erg", + "Ġalle rg", + "Ġaller g", + "Ġdis appointed", + "Ġdisappoint ed", + "Ġrad iation", + "Ġradi ation", + "Ġim pressed", + "Ġimp ressed", + "Ġimpress ed", + "Ġimpr essed", + "Ġimpres sed", + "if icates", + "ific ates", + "ificate s", + "ifica tes", + "Ġt ob", + "Ġto b", + "CL ASS", + "CLA SS", + "Ġ cuda", + "Ġc uda", + "Ġcu da", + "Ġcud a", + "_ det", + "_d et", + "_de t", + "- post", + "-p ost", + "-pos t", + "-po st", + "u lu", + "ul u", + "Trans lation", + "- hand", + "-h and", + ". year", + ".y ear", + "Ġ Mongo", + "ĠM ongo", + "ĠMon go", + "ĠMo ngo", + "ĠMong o", + "Ġun clear", + "Ġunc lear", + "Ġuncle ar", + ". engine", + ".e ngine", + ".eng ine", + "WEB PACK", + "r ices", + "ri ces", + "ric es", + "rice s", + "_ ACCESS", + "_AC CESS", + "_ACC ESS", + "Ġh olidays", + "Ġholiday s", + "per cent", + "perc ent", + ". Identity", + ".Id entity", + "Ġ Gov", + "ĠG ov", + "ĠGo v", + "Ġpass ionate", + "Ġpassion ate", + "! !.", + "!! .", + "ĠG reece", + "ĠGre ece", + "ĠGree ce", + "plus plus", + "' ));", + "') );", + "')) ;", + "G P", + "Ġex cit", + "Ġexc it", + ".tab Page", + "_ cond", + "_c ond", + "_con d", + "_co nd", + "Ġ sponsor", + "Ġs ponsor", + "Ġspons or", + "M ODULE", + "MOD ULE", + "_ proc", + "_p roc", + "_pro c", + "_pr oc", + "Ġ $Ċ", + "Ġ$ Ċ", + "Ġr ational", + "Ġrat ional", + "Ġratio nal", + "Ġration al", + ". Tool", + ".T ool", + ".To ol", + "Ġi hr", + "Ġih r", + "c ca", + "cc a", + "åĵ ģ", + "ĠE state", + "ĠEst ate", + "ĠEsta te", + "IB UTE", + "IBUT E", + "Action Performed", + "Ġ Solar", + "ĠS olar", + "ĠSo lar", + "ĠSol ar", + "¦ Ĥ", + "Ġequ ity", + "Ġeq uity", + "t id", + "ti d", + "9 38", + "93 8", + "Ġre cip", + "Ġrec ip", + ". simple", + ".s imple", + ".sim ple", + "m k", + "6 89", + "68 9", + "Ġ Luke", + "ĠL uke", + "ĠLu ke", + "ĠLuk e", + "ĠGuard ian", + "Ġ encrypted", + "Ġenc rypted", + "Ġencrypt ed", + "Ġdom inant", + "Ġdomin ant", + "Ġdomina nt", + ". place", + ".p lace", + ".pl ace", + "Ġ NV", + "ĠN V", + "8 39", + "83 9", + "Ġton gue", + "Ġtong ue", + "( Get", + "(G et", + "Ġst ainless", + "Ġstain less", + ". Play", + ".P lay", + ".Pl ay", + "Ġ eb", + "Ġe b", + "a ci", + "ac i", + ". buffer", + ".b uffer", + ".buf fer", + "readcr umbs", + "readcrumb s", + "Ġv accine", + "Ġvacc ine", + "p rom", + "pr om", + "pro m", + "9 79", + "97 9", + "Ġ userInfo", + "Ġuser Info", + "Ġ slug", + "Ġs lug", + "Ġsl ug", + "Ġslu g", + "Serial izedName", + "Serialized Name", + "- wide", + "-w ide", + "Ġre actions", + "Ġreaction s", + "Ġreact ions", + "Ġ Yang", + "ĠY ang", + "ĠYan g", + "ĠYa ng", + "Ġ Adds", + "ĠA dds", + "ĠAd ds", + "ĠAdd s", + "( userId", + "(user Id", + "Ġ plates", + "Ġp lates", + "Ġpl ates", + "Ġplate s", + "Ġpla tes", + "Ġplat es", + "Ġ MEM", + "ĠM EM", + "ĠME M", + "Ġb ail", + "Ġba il", + "In side", + "Ins ide", + "e ted", + "et ed", + "ete d", + "Ġ elsif", + "Ġels if", + "Ġs ake", + "Ġsa ke", + "Ġsak e", + "Ġ cycles", + "Ġc ycles", + "Ġcy cles", + "Ġcycle s", + "Ġcycl es", + "Ġcyc les", + "Ġ ìĹ", + "Ġì Ĺ", + "ĉ I", + "- collapse", + "-c ollapse", + "8 41", + "84 1", + "Ġ GMT", + "ĠG MT", + "ĠGM T", + "8 14", + "81 4", + "De claration", + "Ġg ros", + "Ġgr os", + "Ġgro s", + "Ġre aches", + "Ġreach es", + "Ġcust ody", + "Un til", + "Unt il", + "7 53", + "75 3", + "8 56", + "85 6", + "t u", + "ĠC hen", + "ĠCh en", + "ĠChe n", + "Ġ nx", + "Ġn x", + "( addr", + "(add r", + "(ad dr", + "Ġ Offer", + "ĠO ffer", + "ĠOff er", + "ĠOf fer", + "Ġcol leg", + "Ġcoll eg", + "Ġcolle g", + "ass ador", + "6 74", + "67 4", + "Ġ mapper", + "Ġm apper", + "Ġmap per", + "Ġma pper", + "8 54", + "85 4", + "ĠS IGNAL", + "ĠSIG NAL", + "ĠSIGN AL", + "ĠB loom", + "ĠBl oom", + "ĠBlo om", + "ĠH oll", + "ĠHol l", + "ĠHo ll", + "ĠIm per", + "ĠImp er", + "- des", + "-d es", + "-de s", + "_ site", + "_s ite", + "_si te", + "P roc", + "Pro c", + "Pr oc", + "E qu", + "Eq u", + "Ġ atomic", + "Ġat omic", + "Ġatom ic", + "Ġ Woman", + "ĠW oman", + "ĠWo man", + "s ent", + "se nt", + "sen t", + "7 38", + "73 8", + "8 17", + "81 7", + "s car", + "sc ar", + "Ġint elligent", + "Ġintellig ent", + "Ġ Getting", + "ĠG etting", + "ĠGet ting", + "Ġ Registration", + "ĠReg istration", + "ĠRegistr ation", + "Ġ Phill", + "ĠP hill", + "ĠPh ill", + "ĠPhil l", + "ĠPhi ll", + "Ġ killer", + "Ġk iller", + "Ġkill er", + "Ġkil ler", + "Ġki ller", + "un icode", + "unic ode", + "uni code", + "Ċ ĉĉĊ", + "Ġ Jacob", + "ĠJ acob", + "ĠJac ob", + "ĠJa cob", + "Ġ Const", + "ĠCon st", + "ĠCo nst", + "ĠCons t", + "Ġ locate", + "Ġl ocate", + "Ġlo cate", + "Ġloc ate", + "Ġc aus", + "Ġca us", + "7 49", + "74 9", + "ĠSch olar", + "ĠScho lar", + "Ġ constitutional", + "Ġconstitution al", + "Ġin flation", + "Ġinf lation", + "Ġinfl ation", + "Ġ Got", + "ĠG ot", + "ĠGo t", + "= array", + "=a rray", + "en dum", + "end um", + "Ġ translated", + "Ġtrans lated", + "Ġtransl ated", + "Ġtranslate d", + "Ġdiv orce", + "Ġdivor ce", + "En tries", + "Ent ries", + "Entr ies", + "Ġs or", + "Ġso r", + "Ġ Quote", + "ĠQu ote", + "ir lines", + "irl ines", + "U K", + "Ġ excel", + "Ġex cel", + "Ġexc el", + "Ġexce l", + "( opt", + "(o pt", + "(op t", + "Ġ ADV", + "ĠA DV", + "ĠAD V", + ", :,", + ",: ,", + "Ġcont acted", + "Ġcontact ed", + "7 42", + "74 2", + "Ġ DA", + "ĠD A", + "Ġr ings", + "Ġring s", + "Ġrin gs", + "Ġ Industrial", + "ĠInd ustrial", + "ĠIndust rial", + ". getContext", + ".get Context", + "Ġforg otten", + "Ġforgot ten", + "Ġ Tan", + "ĠT an", + "ĠTa n", + "Ġ pants", + "Ġp ants", + "Ġpa nts", + "Ġpan ts", + "Ġpant s", + "Ġ ov", + "Ġo v", + "Ġ decoder", + "Ġde coder", + "Ġdec oder", + "Ġdecode r", + "Ġdeco der", + "Ġ Partial", + "ĠP artial", + "ĠPart ial", + "ĠParti al", + "Ġ vc", + "Ġv c", + "Ġb attles", + "Ġbattle s", + "Ġbatt les", + "A rial", + "Ar ial", + "FRING EMENT", + "i rates", + "ir ates", + "ira tes", + "irate s", + ", w", + "aint enance", + "Ġ Od", + "ĠO d", + "ĠTechn ologies", + "åī į", + "ĠC arter", + "ĠCar ter", + "ĠCart er", + ". findAll", + ".find All", + "N ome", + "No me", + "Nom e", + "B en", + "Be n", + "Ġ Usage", + "ĠU sage", + "ĠUs age", + "ĠUsa ge", + "Ġ Picture", + "ĠP icture", + "ĠPic ture", + "Ġbad ly", + "_ panel", + "_p anel", + "_pa nel", + "_pan el", + "Ġpat ent", + "Ġpa tent", + "Ġ Protocol", + "ĠProt ocol", + "ĠProto col", + "l otte", + "lo tte", + "lot te", + "ĉ player", + "ĉp layer", + "ĉpl ayer", + "ĉplay er", + "j ections", + "ject ions", + "je ctions", + "jection s", + "7 46", + "74 6", + "Ġ dou", + "Ġd ou", + "Ġdo u", + "_ release", + "_re lease", + "_r elease", + "_rel ease", + "urn iture", + "_ tax", + "_t ax", + "_ta x", + "Ġ Fields", + "ĠF ields", + "ĠField s", + ". dataset", + ".d ataset", + ".data set", + ".dat aset", + ".datas et", + "_ master", + "_m aster", + "_ma ster", + "_mas ter", + "CLUD E", + "CLU DE", + "ĠPh arm", + "ĠPhar m", + "b st", + "bs t", + "Ġoper ational", + "Ġoperation al", + ". cell", + ".c ell", + ".ce ll", + "Ġident ifying", + "Ġidentify ing", + "Ġ jwt", + "Ġj wt", + "t uple", + "tu ple", + "Ġ TC", + "ĠT C", + "Ġ Cro", + "ĠC ro", + "ĠCr o", + "9 36", + "93 6", + "ix map", + "- components", + "-com ponents", + "-component s", + "-comp onents", + "g eneral", + "gen eral", + "gener al", + "gene ral", + "Ġ oz", + "Ġo z", + "_ De", + "_D e", + "_ double", + "_d ouble", + "_do uble", + "Ġ Too", + "ĠT oo", + "ĠTo o", + "0 88", + "08 8", + ".View Group", + "8 79", + "87 9", + "g ate", + "ga te", + "d ings", + "ding s", + "din gs", + "ph otos", + "photo s", + "phot os", + "Ġgr ande", + "Ġgrand e", + "Ġgran de", + "Ġgra nde", + "ol lect", + "oll ect", + "olle ct", + "_ lin", + "_l in", + "_li n", + "Ġaw ful", + "f ilters", + "filter s", + "fil ters", + "filt ers", + "Ġ alternate", + "Ġaltern ate", + "e sp", + "es p", + "Ġ compress", + "Ġcom press", + "Ġcomp ress", + "Ġcompr ess", + "e o", + "Ġ Scale", + "ĠS cale", + "ĠSc ale", + "ĠScal e", + "Ġin direct", + "Ġind irect", + "Ġindir ect", + "Ġ invoice", + "Ġin voice", + "Ġinv oice", + "Ġinvo ice", + "ĊĊ ĊĊĊĊĊĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊ ĊĊĊĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊ ĊĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊ ĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊ ĊĊĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊ ĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊ ĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊĊĊĊĊĊ ĊĊ", + "ĊĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊĊ", + "Start ing", + "Star ting", + "Ġ Players", + "ĠP layers", + "ĠPl ayers", + "ĠPlay ers", + "ĠPlayer s", + "ĠPla yers", + "i ele", + "ie le", + "iel e", + ". then", + ".t hen", + ".th en", + ".the n", + "9 81", + "98 1", + "O rd", + "Or d", + "Ġ Tuple", + "ĠT uple", + "ĠTu ple", + "ĠTup le", + "Ġ bout", + "Ġb out", + "Ġbo ut", + "Ġbou t", + "Ġ Statistics", + "ĠStat istics", + "P review", + "Pr eview", + "Pre view", + "Prev iew", + "Ġp uzzle", + "Ġpu zzle", + "Ġpuzz le", + "Ġ Width", + "ĠW idth", + "ĠWid th", + "ST ATE", + "STAT E", + "STA TE", + "Ġ overlay", + "Ġover lay", + "Ġoverl ay", + "ĉ on", + "ĉo n", + "Ġin fr", + "Ġinf r", + "Ġsm allest", + "Ġsmall est", + "l ocked", + "lock ed", + "loc ked", + "ÑĤ о", + "s sl", + "ss l", + "7 79", + "77 9", + "Ġde emed", + "Ġdee med", + "Ġdeem ed", + "Ġs co", + "Ġsc o", + "r eck", + "re ck", + "rec k", + "Ġj Button", + "Ġ missions", + "Ġm issions", + "Ġmiss ions", + "Ġmission s", + "8 71", + "87 1", + "ç§ °", + ".Selected Index", + "T ABLE", + "TA BLE", + "TAB LE", + "S ept", + "Se pt", + "Sep t", + "Ġac knowledge", + "Ġack nowledge", + "Ġacknow ledge", + "Ġacknowled ge", + "Ġ strtotime", + "Ġstrt otime", + "Ġ Tell", + "ĠT ell", + "ĠTe ll", + "ĠTel l", + "ĠD ak", + "ĠDa k", + "Ġal uminum", + "Ġf ence", + "Ġfe nce", + "Ġfen ce", + "Ġ Stars", + "ĠSt ars", + "ĠStar s", + "ĠSta rs", + "CON FIG", + "CONF IG", + "Ġr etrofit", + "Ġretro fit", + "Ġ emphasis", + "Ġem phasis", + "Ġemph asis", + "Ġemphas is", + "/ header", + "/head er", + "/he ader", + "Ġ Something", + "ĠS omething", + "ĠSome thing", + "ĠSom ething", + "in ished", + "ini shed", + "inish ed", + "inis hed", + "=' \".$", + "='\" .$", + "='\". $", + "Ġ Validators", + "ĠValid ators", + "ĠValidator s", + "Ġp olar", + "Ġpol ar", + "Ġpo lar", + "s ections", + "se ctions", + "section s", + "sect ions", + "9 44", + "94 4", + ".as px", + ".asp x", + "Ġa spir", + "Ġas pir", + "Ġasp ir", + ". Mock", + ".M ock", + "Code Gen", + "Ġp eut", + "Ġpe ut", + "Ġpeu t", + "9 71", + "97 1", + "Ġaccept ing", + "Ġb acking", + "Ġback ing", + "Ġbac king", + "P icture", + "Pic ture", + "/ ap", + "/a p", + "е г", + "еР³", + "_ SEC", + "_S EC", + "_SE C", + "- use", + "-us e", + "-u se", + "an notation", + "ann otation", + "annot ation", + "Ġc ognitive", + "Ġcogn itive", + "Ġg rip", + "Ġgr ip", + "Ġgri p", + "h our", + "ho ur", + "hou r", + "Ġ Legal", + "ĠL egal", + "ĠLe gal", + "ĠLeg al", + "Ġe pic", + "Ġep ic", + ". toolStrip", + ".t oolStrip", + ".tool Strip", + ". notify", + ".n otify", + ".not ify", + ". Last", + ".L ast", + "OR IZ", + "M iddleware", + "Middle ware", + "cri ptions", + "cript ions", + "cription s", + "l ash", + "la sh", + "las h", + "_ FOUND", + "_F OUND", + "Ġ Liverpool", + "ĠLiver pool", + "Ġ {}\",", + "Ġ{ }\",", + "Ġ{} \",", + "9 31", + "93 1", + "Inst all", + "Ġ nit", + "Ġn it", + "Ġni t", + "Ġfig ured", + "Ġfigure d", + "Ġfigur ed", + "[ len", + "[l en", + ". Win", + ".W in", + ". platform", + ".pl atform", + "8 53", + "85 3", + "Ġgam bling", + "Ġgamb ling", + "( dt", + "(d t", + "a very", + "av ery", + "ave ry", + "aver y", + "ĉ include", + "ĉin clude", + "Wh ether", + "R outing", + "Ro uting", + "Ġth erap", + "Ġthe rap", + "Ġther ap", + "Rem ote", + "Ġ Loss", + "ĠL oss", + "ĠLo ss", + "ĠLos s", + "y ll", + "yl l", + "Ġappro ached", + "Ġapproach ed", + "Ġ Vehicle", + "ĠV ehicle", + "Ġ Alpha", + "ĠAl pha", + "Ġv ocê", + "Ġvoc ê", + "an swers", + "ans wers", + "answer s", + "NS Dictionary", + "9 54", + "95 4", + "cons ider", + "un used", + "unu sed", + "Ġ Fan", + "ĠF an", + "ĠFa n", + "or able", + "ora ble", + "f re", + "fr e", + "8 73", + "87 3", + "ĠDIS CLAIM", + "Ġ Actor", + "ĠA ctor", + "ĠAct or", + "ĠAc tor", + ". ]", + "to Have", + ". userId", + ".user Id", + "Ġspe eds", + "Ġspeed s", + "e way", + "ew ay", + "Ġrec urs", + "Ġrecur s", + "Ġ г", + "ĠÐ ³", + "_ priv", + "_p riv", + "_pr iv", + "_pri v", + "! âĢĿĊĊ", + "!âĢĿ ĊĊ", + "Ch oice", + "Cho ice", + "Ġs ettle", + "Ġset tle", + "Ġsett le", + "Ġ planes", + "Ġpl anes", + "Ġplan es", + "Ġplane s", + "Ġpla nes", + "' },", + "'} ,", + "T om", + "To m", + "I TER", + "IT ER", + "ITE R", + "! \"Ċ", + "!\" Ċ", + "å »", + "ach elor", + "ache lor", + "achel or", + "Ġse paration", + "Ġsepar ation", + "Ġseparat ion", + "Ġ dal", + "Ġd al", + "Ġda l", + "a dj", + "ad j", + "Ġ registers", + "Ġreg isters", + "Ġregister s", + "Ġregist ers", + "r iz", + "ri z", + "Ġ Notice", + "ĠNot ice", + "Ġ lu", + "Ġl u", + "Ġc ourage", + "Ġcour age", + "Ġcou rage", + "Ġ axes", + "Ġa xes", + "Ġax es", + "Ġaxe s", + "cell ent", + ". async", + ".as ync", + ".a sync", + "0 73", + "07 3", + "Ġcom patibility", + "Ġcompat ibility", + "ç «", + "Ġ !ĊĊ", + "Ġ! ĊĊ", + "Ġ!Ċ Ċ", + "ĉ title", + "ĉt itle", + "ĉti tle", + "Y LE", + "YL E", + "ĉ message", + "ĉm essage", + "U UID", + "UU ID", + "OL DER", + "OLD ER", + "Ġ HH", + "ĠH H", + "Ġ StyleSheet", + "ĠStyle Sheet", + "Ġacc essed", + "Ġaccess ed", + "Ġacces sed", + ". validation", + ".valid ation", + "t asks", + "task s", + "tas ks", + "Ġpoll ution", + "Ġpollut ion", + ". canvas", + ".c anvas", + ".can vas", + "Ġ ingredient", + "Ġing redient", + "ĠC abin", + "ĠCa bin", + "ĠCab in", + "A h", + "ol down", + "old own", + "ĠN OI", + "ĠNO I", + "Ġ ÃĹ", + "Ġà Ĺ", + "[ f", + "e duc", + "ed uc", + "edu c", + "y alty", + "yal ty", + "( not", + "(n ot", + "(no t", + "_ State", + "_St ate", + "9 33", + "93 3", + "a men", + "am en", + "ame n", + "7 95", + "79 5", + "7 39", + "73 9", + "Ġ dao", + "Ġd ao", + "Ġda o", + "u dad", + "ud ad", + "uda d", + "el lers", + "ell ers", + "elle rs", + "eller s", + "} &", + "l icity", + "lic ity", + "li city", + "licit y", + "_ WINDOW", + "_W INDOW", + "Ġt atto", + "Ġtat to", + "val or", + "va lor", + ". Range", + ".R ange", + "Ġreference d", + "Ġrefer enced", + "ĠRe serve", + "ĠRes erve", + "M oney", + "Mon ey", + "Mo ney", + "8 74", + "87 4", + "SC RIPT", + "SCRI PT", + "/ product", + "/pro duct", + "cho ices", + "choice s", + "Ġ tin", + "Ġt in", + "Ġti n", + "ãĤ ĵ", + "9 18", + "91 8", + "Ġ separator", + "Ġs eparator", + "Ġse parator", + "Ġsepar ator", + "Ġseparat or", + "Ġ pkg", + "Ġp kg", + "Ġpk g", + "am med", + "amm ed", + "Ġ MAT", + "ĠM AT", + "ĠMA T", + "! !ĊĊ", + "!! ĊĊ", + "!!Ċ Ċ", + "Ġ raid", + "Ġr aid", + "Ġra id", + "Ġmot ivation", + "Ġmotiv ation", + "Ġ XP", + "ĠX P", + "Ġ Background", + "ĠBack ground", + "Ġ Quaternion", + "ĠQu aternion", + ".define Property", + "i ker", + "ik er", + "ike r", + "ĉ parent", + "ĉp arent", + "Ġ Originally", + "ĠOrigin ally", + "ĠOriginal ly", + "ĠOrig inally", + "ant age", + "anta ge", + "ĠH ans", + "ĠHa ns", + "ĠHan s", + "Ġ timeline", + "Ġt imeline", + "Ġtime line", + "Ġtim eline", + ". cur", + ".c ur", + "o pic", + "op ic", + "opi c", + "ĠS equ", + "ĠSe qu", + "ĠSeq u", + "m ust", + "mu st", + "mus t", + "Ġ Coal", + "ĠCo al", + "Ġ formatter", + "Ġfor matter", + "Ġform atter", + "Ġformat ter", + "_ RGB", + "_R GB", + "_RG B", + "Ġ _(\"", + "Ġ_ (\"", + "Ġ_( \"", + "' }),Ċ", + "'} ),Ċ", + "'}) ,Ċ", + "Ġ= ================", + "Ġ== ===============", + "Ġ=== ==============", + "Ġ===== ============", + "Ġ==== =============", + "Ġ========== =======", + "Ġ======= ==========", + "Ġ FUNCTION", + "ĠF UNCTION", + "ĠFUN CTION", + "ĠFUNC TION", + "ĠFUNCT ION", + "Ġ lng", + "Ġl ng", + "Ġln g", + "ic ates", + "ica tes", + "icate s", + "l ive", + "li ve", + "liv e", + "_ engine", + "_e ngine", + "_eng ine", + "Ġt owns", + "Ġtown s", + "Ġtow ns", + "8 68", + "86 8", + "' ))ĊĊ", + "') )ĊĊ", + "')) ĊĊ", + "'))Ċ Ċ", + "Ġ PK", + "ĠP K", + "( api", + "(a pi", + "(ap i", + "ĉ scanf", + "ĉs canf", + "0 89", + "08 9", + "p acket", + "pack et", + "pa cket", + "pac ket", + ". phone", + ".p hone", + ".ph one", + "á Ģ", + "Ġ Andy", + "ĠAn dy", + "ĠAnd y", + "_N AMES", + "_NAME S", + "9 82", + "98 2", + "P LY", + "PL Y", + "9 55", + "95 5", + "Ġ mins", + "Ġm ins", + "Ġmin s", + "Ġmi ns", + "i mi", + "im i", + "Ġ brick", + "Ġb rick", + "Ġbr ick", + "Ġbri ck", + "Ġ blade", + "Ġbl ade", + "Ġbla de", + ". stdout", + ".std out", + "} `;Ċ", + "}` ;Ċ", + "S hift", + "Sh ift", + "ĉ sb", + "ĉs b", + "Ġ Checks", + "ĠCheck s", + "ĠChe cks", + "Ġphenomen on", + "Av atar", + "Ġmin istry", + "Ġmini stry", + "Ġminist ry", + "r ose", + "ro se", + "ros e", + "ĉ File", + "ĉF ile", + "8 78", + "87 8", + "Ġt itled", + "Ġtitle d", + "Ġtit led", + "( LOG", + "(L OG", + "Ġ gan", + "Ġg an", + "Ġga n", + "d esign", + "de sign", + "des ign", + "( ),čĊ", + "() ,čĊ", + "(), čĊ", + "Ġ bones", + "Ġb ones", + "Ġbo nes", + "Ġbon es", + "Ġbone s", + "s tm", + "st m", + "ÅĽ Äĩ", + "Ġ InputStream", + "ĠInput Stream", + "Ġvol unt", + "Ġ Serializable", + "ĠSerial izable", + "Ġ fighter", + "Ġf ighter", + "Ġfight er", + "Ġ Drag", + "ĠD rag", + "ĠDr ag", + "ĠDra g", + "T witter", + "Tw itter", + "Ġsub sid", + "Ġsubs id", + "ç ¼", + "Ġ forums", + "Ġfor ums", + "Ġforum s", + ". loading", + ".load ing", + ".lo ading", + "log ged", + "logg ed", + "_ this", + "_t his", + "_th is", + "Ġ terrain", + "Ġter rain", + "Ġterr ain", + "Ġterra in", + "Ġir re", + "Ġirr e", + "Ġ Ing", + "ĠI ng", + "ĠIn g", + "Ġ CN", + "ĠC N", + "_ objects", + "_object s", + "_obj ects", + ". uid", + ".ui d", + ".u id", + "Ġconscious ness", + "T INGS", + "TING S", + "ĠG all", + "ĠGal l", + "ĠGa ll", + "Ġport ray", + "0 56", + "05 6", + "Ġ Developer", + "ĠDe veloper", + "ĠDevelop er", + "Ġ participant", + "Ġpart icipant", + "Ġparticip ant", + "Ġ \";čĊ", + "Ġ\" ;čĊ", + "Ġ\"; čĊ", + "/ model", + "/m odel", + "/mod el", + "7 94", + "79 4", + "Ġ Operations", + "ĠOper ations", + "ĠOperation s", + "^ \\", + "Ġ Later", + "ĠL ater", + "ĠLa ter", + "ĠLat er", + "ĠLate r", + "Ġ raises", + "Ġr aises", + "Ġraise s", + "Ġrais es", + "Ġra ises", + "- none", + "-n one", + "-no ne", + "-non e", + ". meta", + ".m eta", + ".me ta", + ".met a", + "= '.$", + "=' .$", + "='. $", + "F inished", + "Fin ished", + "Finish ed", + "Ġre placing", + "Ġrepl acing", + "Ġ sampling", + "Ġs ampling", + "Ġsam pling", + "Ġsamp ling", + "ĠJ en", + "ĠJe n", + "\" There", + "\"The re", + "\"T here", + "RE AL", + "REA L", + "A LE", + "AL E", + "ìĬ ¤", + "Or ders", + "Order s", + "Ord ers", + "_ parameter", + "_param eter", + "_para meter", + "ĠOlymp ic", + "Ġtr ès", + "Ġ arena", + "Ġa rena", + "Ġare na", + "Ġar ena", + "Ġaren a", + "i ol", + "io l", + "; ?>", + "Ġimp acts", + "Ġimpact s", + "Ġ WS", + "ĠW S", + ": get", + ":g et", + "Ġf lights", + "Ġfl ights", + "Ġflight s", + "ĠRuss ell", + "ĠRus sell", + "c amera", + "came ra", + "cam era", + "F n", + "s igma", + "sig ma", + "Ġ forcing", + "Ġfor cing", + "Ġforc ing", + "Ġ locals", + "Ġloc als", + "Ġlocal s", + "Ġ departure", + "Ġdepart ure", + "Ġcelebr ation", + "Ġ Say", + "ĠS ay", + "ĠSa y", + "8 84", + "88 4", + "ï¼ Ĵ", + "ĠH ills", + "ĠHill s", + "ĠHil ls", + ".has OwnProperty", + "Ġ typings", + "Ġtyp ings", + "Ġtyping s", + ". API", + ".A PI", + ".AP I", + "Ġd onation", + "Ġdo nation", + "Ġdon ation", + "Operation Exception", + ". Activity", + ".Act ivity", + "c plusplus", + "Ġ Charlie", + "ĠChar lie", + "ĠCharl ie", + "Ġim ported", + "Ġimport ed", + "Ġimp orted", + "Ġd ann", + "Ġda nn", + "Ġdan n", + "Ġocc asions", + "Ġoccas ions", + "Ġoccasion s", + "Ġimplement ing", + "Ġ purple", + "Ġp urple", + "Ġpur ple", + ". dialog", + ".d ialog", + ".di alog", + "SQL Exception", + "er no", + "ern o", + "Ġw ars", + "Ġwar s", + "Ġwa rs", + "Ġ paste", + "Ġp aste", + "Ġpast e", + "Ġpas te", + "Ġpa ste", + "Ġdecre ased", + "Ġdecrease d", + "Ġhar sh", + "Ġel abor", + "Ġela bor", + "in puts", + "input s", + "inp uts", + "Ġ Views", + "ĠView s", + "ĠVi ews", + "ĠVie ws", + "Ġ errorMessage", + "Ġerror Message", + "_ mul", + "_m ul", + "_mu l", + "ĉ write", + "ĉw rite", + "Ġ Cop", + "ĠC op", + "ĠCo p", + "Ġ Annual", + "ĠAnn ual", + "( button", + "(b utton", + "Ġ vida", + "Ġv ida", + "Ġvi da", + "Ġvid a", + "b ars", + "bar s", + "ba rs", + "ĠHar vard", + "ĉ expect", + "ĉex pect", + "ĉexp ect", + "Ġ indexes", + "Ġindex es", + "Ġinde xes", + "Ġdocument ary", + "Ġf lesh", + "Ġfl esh", + "Ġfle sh", + "OR LD", + "Ġ Delta", + "ĠD elta", + "ĠDel ta", + "M AND", + "MA ND", + "MAN D", + "B rush", + "Br ush", + "Bru sh", + "- column", + "-c olumn", + "-col umn", + "Ġdevelop ments", + "Ġdevelopment s", + "9 74", + "97 4", + "7 83", + "78 3", + "method Visitor", + "s lice", + "sl ice", + "Ġ PDO", + "ĠP DO", + "ĠPD O", + "Ġinv esting", + "Ġinvest ing", + "8 67", + "86 7", + "ir able", + "ira ble", + "Ġ xmlns", + "Ġxml ns", + "ï¼ Ľ", + "ar ta", + "art a", + "Ġthe ories", + "Ġtheor ies", + "Ġtheo ries", + "_ city", + "_c ity", + "_ci ty", + "Ġ $__", + "Ġ$ __", + "Ġ$_ _", + "C reating", + "Cre ating", + "Cr eating", + "Creat ing", + "( pr", + "(p r", + "D ropdown", + "Drop down", + "is match", + "ism atch", + "Ġ NET", + "ĠN ET", + "ĠNE T", + "9 26", + "92 6", + "' ])){Ċ", + "'] )){Ċ", + "']) ){Ċ", + "'])) {Ċ", + "'])){ Ċ", + "Ġ Values", + "ĠVal ues", + "ĠValue s", + "Ġ SEO", + "ĠS EO", + "ĠSE O", + "Ġ STAT", + "ĠST AT", + "ĠSTA T", + "Ġe cosystem", + "Ġeco system", + "Ġ tempt", + "Ġt empt", + "Ġtem pt", + "Ġtemp t", + "Ġ \\\\", + "Ġ\\ \\", + "Ġ //{Ċ", + "Ġ// {Ċ", + "Ġ//{ Ċ", + "Ġ Christopher", + "ĠChrist opher", + "ĠChristoph er", + "ĠKent ucky", + "ĠHttp ServletResponse", + "ĠHttpServlet Response", + "Ġh ybrid", + "Ġhy brid", + "y on", + "yo n", + "Ġ feeding", + "Ġfe eding", + "Ġfeed ing", + "Ġfee ding", + "Ġ Extra", + "ĠEx tra", + "ĠExt ra", + "ĠExtr a", + "N orm", + "No rm", + "Nor m", + "IT CH", + "Ġ Sean", + "ĠS ean", + "ĠSe an", + "ĠSea n", + "Ġ Upload", + "ĠUp load", + "m un", + "mu n", + "p ur", + "pu r", + "Ġ persistent", + "Ġp ersistent", + "Ġpers istent", + "Ġpersist ent", + "ĠI DC", + "ĠID C", + "Ġ Perform", + "ĠPer form", + "ĠPerf orm", + "8 63", + "86 3", + ". merge", + ".m erge", + "_ room", + "_r oom", + "_ro om", + "Mean while", + "! ='", + "!= '", + "Ġ Wel", + "ĠW el", + "ĠWe l", + "Args Constructor", + "8 87", + "88 7", + ". Database", + ".D atabase", + ".Data base", + "Ġco unting", + "Ġcount ing", + "Ġcoun ting", + "( )*", + "() *", + "Ķ åĽŀ", + "Ġ TOP", + "ĠT OP", + "ĠTO P", + "m ill", + "mi ll", + "mil l", + "Ġ DT", + "ĠD T", + "IGN ED", + "9 56", + "95 6", + "Ġ KB", + "ĠK B", + "Ġcom ply", + "Ġcomp ly", + "Ġcompl y", + "S outh", + "So uth", + "Sou th", + "_ collection", + "_c ollection", + "_col lection", + "_coll ection", + "_collect ion", + "Ch apter", + "Cha pter", + "Ġexpl aining", + "Ġexplain ing", + "_ AM", + "_A M", + "_ ts", + "_t s", + "c ards", + "card s", + "car ds", + "Ġ quel", + "Ġqu el", + "Ġque l", + "Ġq uel", + "Ġ pole", + "Ġp ole", + "Ġpol e", + "Ġpo le", + "Ġtouch down", + "Ġ Others", + "ĠO thers", + "ĠOther s", + "Ġpe ers", + "Ġpeer s", + "Ġpee rs", + "Ġ TypeError", + "ĠType Error", + "7 63", + "76 3", + "Ġsix th", + "Ġch eer", + "Ġche er", + "Ġdis pute", + "Ġdisp ute", + "Ġdisput e", + "9 63", + "96 3", + "8 93", + "89 3", + "u sc", + "us c", + ") ],", + ")] ,", + "th umb", + "Ġh iding", + "Ġhi ding", + "Ġhid ing", + "Ġ SIG", + "ĠS IG", + "ĠSI G", + "l ikes", + "li kes", + "like s", + "lik es", + "Ġ PAGE", + "ĠP AGE", + "ĠPA GE", + ". Reflection", + ".Ref lection", + "Ġhead quarters", + "T ING", + "TI NG", + "Ġ Ghost", + "ĠG host", + "ĠGh ost", + "M LE", + "ML E", + "$ Ċ", + "Ġcont rary", + "Ġcontr ary", + "Ġcontra ry", + "ext end", + "' ]).", + "'] ).", + "']) .", + "FF ECT", + "FFE CT", + "Ġ Pinterest", + "ĠP interest", + "úmer o", + "ric ane", + "rica ne", + "ĉ session", + "ĉs ession", + "Ġcr ystal", + "Ġcry stal", + "Ġcryst al", + "- Control", + "-C ontrol", + "overn ment", + "o graf", + "og raf", + "ogr af", + "ogra f", + "9 61", + "96 1", + "- action", + "-a ction", + "-ac tion", + "v olume", + "vol ume", + "f ten", + "ft en", + "fte n", + "Ġun con", + "Ġunc on", + "Ġ animate", + "Ġan imate", + "Ġanim ate", + "Ġani mate", + "Ġ lease", + "Ġl ease", + "Ġle ase", + "s cr", + "sc r", + "Ġre fuse", + "Ġref use", + "ãĢ ĭ", + "f tp", + "ft p", + "in formation", + "inform ation", + "Ġeval uated", + "Ġevaluate d", + "Ġevalu ated", + "Ġin jection", + "Ġinj ection", + "Ġinject ion", + "Ġ jack", + "Ġj ack", + "Ġja ck", + "Ġjac k", + "Ġwork shop", + "Ġworks hop", + "æ³ ¨", + "P TH", + "PT H", + "Ġ Ts", + "ĠT s", + "o ffer", + "of fer", + "off er", + "ĉ os", + "ĉo s", + "Ġking dom", + "M issing", + "Miss ing", + "Mis sing", + "Ġlaw makers", + "Ġlawmaker s", + "ext Field", + "Ġs inging", + "Ġsin ging", + "Ġsing ing", + "a bi", + "ab i", + "/ client", + "/c lient", + "/cl ient", + "/cli ent", + ". media", + ".m edia", + ".me dia", + ".med ia", + "ATEG ORY", + "Sign ature", + "Sig nature", + "% ',Ċ", + "%' ,Ċ", + "%', Ċ", + "Ġ Fuck", + "ĠF uck", + "ĠFu ck", + "] [:", + "][ :", + "Ġs ensors", + "Ġsens ors", + "Ġsensor s", + "/ com", + "/c om", + "/co m", + "Ġ Primary", + "ĠPr imary", + "ĠPri mary", + "ĠPrim ary", + ". SQL", + ".S QL", + "_ program", + "_p rogram", + "_pro gram", + "_pr ogram", + "_prog ram", + "Ġp ills", + "Ġpil ls", + "Ġpill s", + "Ġ integral", + "Ġint egral", + "Ġinteg ral", + "Ġintegr al", + "Ġ fleet", + "Ġf leet", + "Ġfle et", + "Ġflee t", + "Ġd ropping", + "Ġdr opping", + "Ġdrop ping", + "Ġdro pping", + ". sl", + ".s l", + "B een", + "Be en", + "Ġ pets", + "Ġp ets", + "Ġpe ts", + "Ġpet s", + "Ġad vised", + "Ġadv ised", + "Ġadvis ed", + "Ġadvise d", + "Ġ dragon", + "Ġd ragon", + "Ġdr agon", + "Ġdrag on", + "Ġdra gon", + "_ EDIT", + "_ED IT", + "( im", + "(i m", + "9 39", + "93 9", + "F ER", + "FE R", + "Ġ Drug", + "ĠD rug", + "ĠDr ug", + "( random", + "(r andom", + "(rand om", + "Ġ compression", + "Ġcom pression", + "Ġcomp ression", + "Ġcompr ession", + "Ġcompress ion", + "o ust", + "ou st", + "ous t", + "[ %", + "Ġ buyer", + "Ġbu yer", + "Ġbuy er", + "h op", + "ho p", + "R oles", + "Role s", + "Ro les", + "Rol es", + "man age", + "ma nage", + "mana ge", + "Ġpain ful", + "Ġ Branch", + "ĠBr anch", + "ĠBran ch", + "- modal", + "-m odal", + "-mod al", + "e nant", + "en ant", + "ena nt", + "enan t", + "Ġ Mesh", + "ĠM esh", + "ĠMe sh", + "ĠMes h", + "/ font", + "/f ont", + "ĠG raham", + "ĠGra ham", + "Ġ âĺ", + "Ġâ ĺ", + "Ġ nc", + "Ġn c", + "ĠFranc is", + "ĠFran cis", + "Ġspec ification", + "Ġspecific ation", + "Ġdam ages", + "Ġdamage s", + "- config", + "-con fig", + "-conf ig", + "Ġthe oret", + "Ġtheor et", + "Ġtheo ret", + "s ecure", + "sec ure", + "_ multi", + "_m ulti", + "_mul ti", + "_mult i", + "aceut ical", + "Ġdem anding", + "Ġdemand ing", + "en ne", + "enn e", + "I STS", + "IS TS", + "IST S", + "0 94", + "09 4", + "( )));ĊĊ", + "() ));ĊĊ", + "()) );ĊĊ", + "()));Ċ Ċ", + "())) ;ĊĊ", + "())); ĊĊ", + "Re ason", + "Re cent", + "Rec ent", + "ph ase", + "pha se", + "phas e", + "Ġ psy", + "Ġp sy", + "Ġps y", + "_ MAN", + "_M AN", + "_MA N", + "Ġvol unteer", + "Ġvolunte er", + "Ġvolunt eer", + "å ¿", + "istrib uted", + "istribute d", + "l io", + "li o", + "Ġproduct ivity", + "_ comm", + "_c omm", + "_com m", + "_co mm", + "S pring", + "Sp ring", + "Spr ing", + "n is", + "ni s", + ". weight", + ".w eight", + ".we ight", + "ĠC ancer", + "ĠCan cer", + "ĠCanc er", + "Al loc", + "All oc", + "Ġ Tweet", + "ĠT weet", + "ĠTwe et", + "Ġsepar ately", + "Ġseparate ly", + "Ġseparat ely", + "ĉ check", + "ĉc heck", + "ĉch eck", + "_ properties", + "_p roperties", + "_prop erties", + ". Unit", + ".U nit", + ".Un it", + "8 29", + "82 9", + "_ CLK", + "_C LK", + "_CL K", + "Ġ gt", + "Ġg t", + "Ġ ();ĊĊ", + "Ġ( );ĊĊ", + "Ġ() ;ĊĊ", + "Ġ();Ċ Ċ", + "Ġ(); ĊĊ", + "Ġh andy", + "Ġhand y", + "Ġhan dy", + "8 34", + "83 4", + "ĠTh ompson", + "ĠThom pson", + "Ġun necessary", + "Ġunn ecessary", + "Ġ Reader", + "ĠRe ader", + "ĠRead er", + "8 94", + "89 4", + "G N", + "= request", + "=re quest", + "=req uest", + "Ġ Utility", + "ĠU tility", + "ĠUtil ity", + "ĠUt ility", + ". Repository", + ".Re pository", + "Ġ Ax", + "ĠA x", + "hy dr", + "7 91", + "79 1", + "i eu", + "ie u", + "Ġ thy", + "Ġt hy", + "Ġth y", + "Ġ lt", + "Ġl t", + "_ mail", + "_m ail", + "_ma il", + "ä¿® æĶ¹", + "a iland", + "ail and", + "ai land", + "Ġ Philip", + "ĠPh ilip", + "ĠPhil ip", + "ĠPhi lip", + "Ġb itter", + "Ġbit ter", + "Ġbitte r", + "Ġb etting", + "Ġbet ting", + "8 37", + "83 7", + "Ġt imed", + "Ġtime d", + "Ġtim ed", + "Ġti med", + "o cks", + "oc ks", + "ock s", + "0 76", + "07 6", + "' a", + "Ġal gorithms", + "Ġalgorithm s", + "Ġ reinterpret", + "Ġre interpret", + "Ġt oss", + "Ġto ss", + "r ogen", + "ro gen", + "rog en", + "Ġh oped", + "Ġhope d", + "Ġhop ed", + "Ġho ped", + "( selected", + "(se lected", + "(select ed", + "(sel ected", + "Ġ venture", + "Ġvent ure", + "Ġven ture", + "T EX", + "TE X", + "Ġ Leave", + "ĠLe ave", + ". Substring", + ".Sub string", + "Ġgr ateful", + "Ġgrat eful", + "Ġgrate ful", + "7 43", + "74 3", + "u ka", + "uk a", + "Ġ Consumer", + "ĠCon sumer", + "ĠCons umer", + "ĠConsum er", + "Ġag greg", + "Ġagg reg", + "C ircle", + "ภģ", + "_ blocks", + "_b locks", + "_block s", + "_bl ocks", + "_bloc ks", + "Ġleg ally", + "Ġlegal ly", + "Ġ \"|", + "Ġ\" |", + "ãĥ ĥ", + ". board", + ".b oard", + ".bo ard", + ". Ab", + ".A b", + "Function s", + "Fun ctions", + "rec ipe", + "è ĩ", + "ĠO xford", + "ĠOx ford", + "Ġw holes", + "Ġwh oles", + "Ġwho les", + "Ġwhole s", + ". Build", + ".B uild", + "_ changed", + "_ch anged", + "_change d", + "_chan ged", + "h ai", + "ha i", + "Ġ departments", + "Ġdepartment s", + "Ġdepart ments", + "9 64", + "96 4", + "I mp", + "Im p", + "Ġcoal ition", + "IN FRINGEMENT", + "Ġem power", + "Ġemp ower", + "it ches", + "itch es", + "N orth", + "Nor th", + "Ġin flamm", + "Ġinfl amm", + "O NSE", + "ON SE", + "ONS E", + "Ġmiss ile", + "ĠR aj", + "ĠRa j", + "Ġ Issue", + "ĠI ssue", + "ĠIss ue", + "Ġ atoi", + "Ġa toi", + "Ġat oi", + "c aled", + "ca led", + "cale d", + "cal ed", + ". Controllers", + ".Cont rollers", + ".Control lers", + ".Controller s", + "Ġ Wolf", + "ĠW olf", + "ĠWo lf", + "ĠWol f", + "Ġcrush ers", + "Ġcrusher s", + "á» ĩ", + ". Auth", + ".A uth", + ".add Attribute", + "h is", + "hi s", + "Ġbo ots", + "Ġboot s", + "Ġboo ts", + ". clean", + ".c lean", + ".cl ean", + "c amp", + "ca mp", + "cam p", + "Ġ tenant", + "Ġt enant", + "Ġte nant", + "Ġten ant", + "Ġt une", + "Ġtu ne", + "Ġtun e", + "Ġ {}'.", + "Ġ{ }'.", + "Ġ{} '.", + "Ġwork out", + "Re po", + "Rep o", + "Ġpart ially", + "Ġpartial ly", + "Ġparti ally", + "MI SSION", + "MISS ION", + "j amin", + "ja min", + "jam in", + "Ġ SB", + "ĠS B", + "Ġd etermination", + "Ġde termination", + "Ġdeter mination", + "Ġdetermin ation", + "Ġdeterm ination", + "Ġ' ');Ċ", + "Ġ'' );Ċ", + "Ġ'') ;Ċ", + "Ġ''); Ċ", + "ĠB eng", + "ĠBe ng", + "ĠBen g", + "Ġ vos", + "Ġv os", + "Ġvo s", + "Ġin hab", + "Ġinh ab", + "/ lang", + "/l ang", + "s burgh", + "sburg h", + "Exec utor", + "h one", + "ho ne", + "hon e", + "Ġ Challenge", + "ĠCh allenge", + "ĠChall enge", + "_ links", + "_l inks", + "_link s", + "_lin ks", + ". Level", + ".Le vel", + "Ġunder ground", + "- code", + "-c ode", + "-co de", + "9 59", + "95 9", + "Ġopt imization", + "Ġoptim ization", + "log ging", + "logg ing", + "_ dest", + "_d est", + "_de st", + "_des t", + "Ġ snake", + "Ġsn ake", + "Ġsna ke", + "Ġchem icals", + "Ġchemical s", + "_IMPORT ED", + "ad oop", + "ado op", + "adoo p", + "ĠTH AT", + "man aged", + "manage d", + "mana ged", + "Ġred uces", + "Ġredu ces", + "Ġreduce s", + "Ġ REAL", + "ĠRE AL", + "Ġ Guy", + "ĠG uy", + "ĠGu y", + "_GENER IC", + "_GEN ERIC", + "/ ********************************", + "/************************ ********", + "/******** ************************", + "/**************** ****************", + ". amount", + ".a mount", + ".am ount", + "Ġ dere", + "Ġd ere", + "Ġde re", + "Ġder e", + "get Time", + "Ġp ant", + "Ġpa nt", + "Ġpan t", + "an onymous", + "anon ymous", + "Ġhar mony", + "Ġharm ony", + "Ġharmon y", + "Ġ Alan", + "ĠA lan", + "ĠAl an", + "ĠAla n", + "Ġsc enarios", + "Ġscen arios", + "Ġscenario s", + "Ġd irt", + "Ġdi rt", + "Ġdir t", + "h tags", + "ht ags", + "htag s", + "hta gs", + "M c", + "S hell", + "Sh ell", + "She ll", + "r in", + "ri n", + "{ čĊčĊ", + "{čĊ čĊ", + ". pow", + ".p ow", + ".po w", + "ĉ client", + "ĉc lient", + "ĉcl ient", + "ĉcli ent", + "Ġcon spiracy", + "Ġconspir acy", + "Ġad mission", + "Ġadm ission", + "Ġ Regional", + "ĠReg ional", + "ĠRegion al", + "Ġ ViewController", + "ĠView Controller", + "ĠPhil ippines", + "ĠPhilipp ines", + "ĠPhilippine s", + "Ġde pos", + "Ġdep os", + "Ġp ap", + "Ġpa p", + "9 62", + "96 2", + "Ġ Pad", + "ĠP ad", + "ĠPa d", + "P aul", + "Pa ul", + ". ComboBox", + ".Com boBox", + "Ġt utor", + "Ġtu tor", + "Ġtut or", + "Ġtuto r", + "Ġ Recipe", + "ĠRec ipe", + "w riting", + "wr iting", + "Ġcontrib utor", + "O TH", + "OT H", + "S mall", + "Sm all", + "V I", + "Ġh acer", + "Ġha cer", + "Ġhace r", + "Ġhac er", + "e qu", + "eq u", + "Ġ Examples", + "ĠEx amples", + "ĠExample s", + "ĠExam ples", + "h uman", + "hu man", + "hum an", + ". messages", + ".m essages", + ".message s", + "ĉ typ", + "ĉt yp", + "Ġ (čĊ", + "Ġ( čĊ", + "Ġ SSL", + "ĠS SL", + "ĠSS L", + "L EN", + "LE N", + "ĠRom ney", + "( grid", + "(g rid", + "(gr id", + "ĉ min", + "ĉm in", + "Ġ >ĊĊ", + "Ġ> ĊĊ", + "Ġ>Ċ Ċ", + "Ġf ruits", + "Ġfr uits", + "Ġfruit s", + "Ġv oter", + "Ġvo ter", + "Ġvot er", + "Ġvote r", + "In line", + "p ane", + "pan e", + "pa ne", + "Ġ Collections", + "ĠC ollections", + "ĠCol lections", + "ĠCollection s", + "ĠColl ections", + "ĠCollect ions", + "char set", + "chars et", + "Ġ spam", + "Ġsp am", + "Ġspa m", + "z b", + "it emap", + "ite map", + "item ap", + "Ġs ucceeded", + "Ġsuc ceeded", + "Ġsucceed ed", + "_ COL", + "_C OL", + "_CO L", + "Ġ elapsed", + "Ġel apsed", + "i meter", + "im eter", + "ime ter", + "imet er", + "Ġre covered", + "Ġrecover ed", + "T ensor", + "hat tan", + "hatt an", + ". setup", + ".set up", + "i sto", + "is to", + "ist o", + "( head", + "(h ead", + "9 77", + "97 7", + "Ġ SIZE", + "ĠS IZE", + "ĠSI ZE", + "Ġt actics", + "Ġtact ics", + "Ġtactic s", + "Ġtac tics", + "Ġdis tur", + "Ġdist ur", + "Ġpr eval", + "Ġpre val", + "Ġprev al", + "ic ios", + "ici os", + "icio s", + "( Value", + "(V alue", + "_ cols", + "_c ols", + "_col s", + "_co ls", + "Ġ Fat", + "ĠF at", + "ĠFa t", + "Ġse al", + "Ġsea l", + "Ġ sons", + "Ġs ons", + "Ġso ns", + "Ġson s", + "Ġens ures", + "Ġensure s", + "0 95", + "09 5", + "Ġp ressing", + "Ġpres sing", + "Ġpress ing", + "= &", + "igen ous", + "Ġharass ment", + "_ JSON", + "_J SON", + "_JS ON", + "Ġign or", + "Ġig nor", + "yn omial", + "ynom ial", + "o mer", + "om er", + "ome r", + "_ static", + "_st atic", + "_stat ic", + "_sta tic", + "Ġsign ificance", + "Ġsignific ance", + "Ġsignifica nce", + "Ġc ircles", + "Ġcirc les", + "Ġcircle s", + "Ġcir cles", + "_ System", + "_S ystem", + "Ġdisc ipline", + "Ġdiscipl ine", + "Ġd ressed", + "Ġdr essed", + "Ġdress ed", + "Ġ sphere", + "Ġs phere", + "Ġsp here", + "Ġsph ere", + "9 27", + "92 7", + "Ġcl imb", + "Ġclim b", + "Ġcli mb", + "7 59", + "75 9", + "_ actions", + "_a ctions", + "_action s", + "_act ions", + "ĠB ab", + "ĠBa b", + "Ġ' =',", + "Ġ'=' ,", + "Ġ'= ',", + "_ schema", + "_s chema", + "\" use", + "Ġ unders", + "Ġun ders", + "Ġunder s", + "Ġund ers", + "Ġunde rs", + "Ġc ups", + "Ġcu ps", + "Ġcup s", + ". screen", + ".s creen", + ".sc reen", + "/ new", + "/n ew", + "/ne w", + "Ġapp earing", + "Ġappe aring", + "Ġappear ing", + "T OP", + "TO P", + "v ised", + "vis ed", + "vi sed", + "vise d", + "c lang", + "cl ang", + "cla ng", + "Ġinvest igators", + "Ġinvestig ators", + "Ġinvestigator s", + "Ġm ysterious", + "Ġmyster ious", + "Ġprom ising", + "Ġqual ify", + "Ġqua lify", + "Ġquali fy", + "Ġc ave", + "Ġca ve", + "Ġcav e", + "Ġ equip", + "Ġe quip", + "Ġequ ip", + "= x", + "G T", + "( link", + "(l ink", + "(li nk", + ". velocity", + ".v elocity", + ".vel ocity", + ". erase", + ".e rase", + ".er ase", + "o ter", + "ot er", + "ote r", + "++++ ++++", + "pro fit", + "prof it", + "Ġ zones", + "Ġz ones", + "Ġzone s", + "Ġzo nes", + "_ uid", + "_u id", + "_ui d", + "- ser", + "-s er", + "-se r", + "Ġob jectives", + "Ġobject ives", + "Ġobjective s", + "Ġmil f", + "Ġmi lf", + "web kit", + "( match", + "(m atch", + "(mat ch", + "n eh", + "ne h", + "Ġ Associated", + "ĠAssoci ated", + "ĠAssociate d", + "ĠAssoc iated", + "Ġ Todo", + "ĠT odo", + "ĠTo do", + "ĠTod o", + "= d", + "0 65", + "06 5", + "C am", + "Ca m", + "Ġv ocal", + "Ġvo cal", + "Ġvoc al", + "Ġ sudo", + "Ġs udo", + "Ġsu do", + "Ġsud o", + "( EX", + "(E X", + "Ġt rou", + "Ġtr ou", + "Ġtro u", + "A BC", + "AB C", + ". bean", + ".b ean", + ".be an", + "Ġ Ground", + "ĠG round", + "ĠGr ound", + "ĠGro und", + "Ġ REST", + "ĠR EST", + "ĠRE ST", + "ĠRES T", + "we ets", + "weet s", + "I ng", + "In g", + "i mon", + "im on", + "imo n", + "9 46", + "94 6", + "_ bus", + "_b us", + "Ġ COLOR", + "ĠC OLOR", + "ĠCOL OR", + "un to", + "unt o", + "Ġf oss", + "Ġfo ss", + "Ġfos s", + "Ġ Links", + "ĠL inks", + "ĠLink s", + "ĠLin ks", + "8 69", + "86 9", + "ä ng", + "än g", + "/ forms", + "/form s", + "pr ises", + "prise s", + "pri ses", + "Ġ achievement", + "Ġachie vement", + "Ġachieve ment", + "C ALL", + "CA LL", + "CAL L", + "е лÑĮ", + "ел ÑĮ", + "Ġ Verify", + "ĠVer ify", + "_ SOURCE", + "_S OURCE", + "apt cha", + "I DD", + "ID D", + "_ reference", + "_re ference", + "_ref erence", + "_refer ence", + "G old", + "Go ld", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "9 47", + "94 7", + "Re ceiver", + "Receive r", + "0 99", + "09 9", + "Ġ aj", + "Ġa j", + "_ direction", + "_d irection", + "_dir ection", + "_di rection", + "_direct ion", + "} ]", + "Ġ Compet", + "ĠCom pet", + "ĠComp et", + "Ġ bang", + "Ġb ang", + "Ġban g", + "Ġba ng", + "7 98", + "79 8", + "ĠC ass", + "ĠCas s", + "ĠCa ss", + "- url", + "-u rl", + "t echn", + "te chn", + "tech n", + "tec hn", + "ĠJer usalem", + "long itude", + "' );čĊčĊ", + "') ;čĊčĊ", + "'); čĊčĊ", + "');čĊ čĊ", + "Ġwin ners", + "Ġwinner s", + "T asks", + "Task s", + "Ġ DMA", + "ĠD MA", + "ĠDM A", + "Ġ tooltip", + "Ġto oltip", + "Ġtool tip", + "İ ·", + "ĠB ra", + "ĠBr a", + "_ duration", + "_d uration", + "_dur ation", + "c ury", + "cur y", + "cu ry", + "par ents", + "pare nts", + "parent s", + "paren ts", + "- --- >(", + ">> (", + "Ġ Kir", + "ĠK ir", + "ĠKi r", + "Ġ intros", + "Ġint ros", + "Ġintr os", + "Ġintro s", + "Ġsk etch", + "Ġsk illed", + "Ġskill ed", + "Ġ immer", + "Ġim mer", + "Ġimm er", + "Ġade quate", + "Ġadequ ate", + "_ rep", + "_re p", + "_r ep", + "( header", + "(head er", + "_ like", + "_l ike", + "_li ke", + "Ġper ceived", + "Ġperceive d", + "Ġperce ived", + "s sh", + "ss h", + "Ġ assuming", + "Ġas suming", + "Ġass uming", + "Ġassum ing", + "Ġ ff", + "Ġf f", + "_ uuid", + "_u uid", + "u las", + "ul as", + "ula s", + "Ġdem ocratic", + "Ġdemocr atic", + "Ġdemocrat ic", + ". entities", + ".ent ities", + "S eries", + "Se ries", + "Ser ies", + "aph ore", + "Ġnew er", + "Ġne wer", + "} (", + "S EC", + "SE C", + "a iro", + "air o", + "ai ro", + "Ġcom mod", + "Ġcomm od", + "Ġpriv ilege", + "Ġprivile ge", + "Ġde ux", + "Ġ Hop", + "ĠH op", + "ĠHo p", + ". '/", + ".' /", + "c tic", + "ct ic", + ". ';Ċ", + ".' ;Ċ", + "< ?=", + " C", + "ĠWar ren", + "Ġ optimizer", + "Ġopt imizer", + "Ġoptim izer", + "Ġoptimize r", + "ĠSER VICES", + "ĠSERVICE S", + "_ oper", + "_op er", + "_o per", + "get Attribute", + "ĠMc K", + "_ self", + "_s elf", + "_se lf", + "_sel f", + "0 84", + "08 4", + ". rs", + ".r s", + "\" )ĊĊĊ", + "\") ĊĊĊ", + "\")Ċ ĊĊ", + "\")ĊĊ Ċ", + "Get Component", + "er ce", + "erc e", + "Ġt ous", + "Ġto us", + "Ġtou s", + "un its", + "unit s", + "uni ts", + "' ]);čĊ", + "'] );čĊ", + "']) ;čĊ", + "']); čĊ", + "Z oom", + "/ E", + "Ġob sc", + "Ġobs c", + "Ġfast est", + "Ġfas test", + "on line", + "Ġpeace ful", + "f fen", + "ff en", + "ffe n", + "Ġ cargo", + "Ġc argo", + "Ġcar go", + "Ġcarg o", + "ĉ pr", + "ĉp r", + "Ġse eks", + "Ġsee ks", + "Ġseek s", + "z u", + "0 74", + "07 4", + "T rim", + "Tr im", + "Tri m", + "Ġ ward", + "Ġw ard", + "Ġwar d", + "Ġwa rd", + "Ġv erd", + "Ġver d", + "Ġve rd", + "Ġ blogs", + "Ġb logs", + "Ġbl ogs", + "Ġblog s", + "Ġblo gs", + ". exceptions", + ".ex ceptions", + ".exception s", + "Ġ Premium", + "ĠP remium", + "ĠPre mium", + "ĠPrem ium", + "ĠPremi um", + "ĠN etherlands", + "S afe", + "Sa fe", + "F inish", + "Fin ish", + "Fi nish", + "Ġ Album", + "ĠAl bum", + "ĠAlb um", + "_ ACC", + "_A CC", + "_AC C", + "= this", + "=t his", + "v irtual", + "vir tual", + "virt ual", + "] >", + "_ LABEL", + "_L ABEL", + "_LA BEL", + "Ġ Nich", + "ĠN ich", + "ĠNic h", + "ĠNi ch", + "_ win", + "_w in", + "Ġ Aaron", + "ĠA aron", + "W P", + "; $", + "a ims", + "ai ms", + "aim s", + "Ġ ImageView", + "ĠImage View", + "Ġend less", + "Ġendl ess", + "E RA", + "ER A", + "_ DISABLE", + "_DIS ABLE", + "Ġ cancelled", + "Ġcancel led", + "Ġcancell ed", + "Ġcanc elled", + "- us", + "-u s", + "Ġ inspection", + "Ġins pection", + "Ġinspect ion", + "Ġinsp ection", + "e min", + "em in", + "emi n", + "Ġ Grey", + "ĠG rey", + "ĠGr ey", + "ĠGre y", + "- open", + "-o pen", + "-op en", + "Ġ iterations", + "Ġiter ations", + "Ġiteration s", + ". owner", + ".o wner", + "Ġk eras", + "Ġke ras", + "Ġker as", + ". Password", + ".P assword", + ".Pass word", + "ĠR y", + "Ġ INS", + "ĠI NS", + "ĠIN S", + "A ir", + "Ai r", + "Ġ Several", + "ĠSe veral", + "ĠSever al", + "ĠSev eral", + ".Tab Stop", + "IN GLE", + "ING LE", + "Ġ Hair", + "ĠH air", + "ĠHa ir", + "ĠHai r", + "Ġ Canvas", + "ĠC anvas", + "ĠCan vas", + "A AAA", + "AA AA", + "AAA A", + "Ġf law", + "Ġfl aw", + "Ġfla w", + "c edes", + "ce des", + "ced es", + "cede s", + ". Report", + ".Re port", + "í Ĭ", + "Ġ Tips", + "ĠT ips", + "ĠTi ps", + "ĠTip s", + "cript ors", + "criptor s", + ". transaction", + ".trans action", + ". Spring", + ".S pring", + ".Sp ring", + "Ġ viewer", + "Ġview er", + "Ġvie wer", + "Ġins ights", + "Ġinsight s", + "è¾ ĵ", + "ord ion", + "U INT", + "UI NT", + "se ek", + "see k", + "Ġ Auf", + "ĠA uf", + "ĠAu f", + "ìŀ IJ", + "Ġ strain", + "Ġs train", + "Ġst rain", + "Ġstr ain", + "Ġstra in", + "To oltip", + "Tool tip", + "Ġ dz", + "Ġd z", + "ig nal", + "ign al", + "a dt", + "ad t", + "Ġ uc", + "Ġu c", + "f inite", + "fin ite", + "fi nite", + "Ġ nm", + "Ġn m", + ". cmd", + ".c md", + ".cm d", + "ĠMy Sql", + "[ data", + "[d ata", + ".j ackson", + ". tree", + ".t ree", + ".tr ee", + "Request Param", + "_ agent", + "_a gent", + "_ag ent", + "_age nt", + "\" )]čĊ", + "\") ]čĊ", + "\")] čĊ", + "Ġas sass", + "Ġass ass", + "( Constants", + "(Constant s", + "(Const ants", + ": ss", + ":s s", + "Ġ MAN", + "ĠM AN", + "ĠMA N", + "+- +-", + "Ġ Bottom", + "ĠB ottom", + "ĠBot tom", + "ĠBott om", + "pr ints", + "print s", + "pri nts", + "Ġ Same", + "ĠS ame", + "ĠSam e", + "ĠSa me", + "@ Autowired", + "s wap", + "sw ap", + "i ción", + "ic ión", + "ici ón", + "Ġprot esters", + "Ġprote sters", + "Ġprotest ers", + "Ġprotester s", + "Ġh oney", + "Ġhon ey", + "Ġho ney", + "Ġhone y", + "Ġ Veter", + "ĠV eter", + "ĠVe ter", + "ĠVet er", + "( Calendar", + "(C alendar", + "- ad", + "-a d", + "ĠBro oklyn", + "ĠBrook lyn", + "L ife", + "Li fe", + "_ VAR", + "_V AR", + "z ech", + "ze ch", + "Ġ CALL", + "ĠC ALL", + "ĠCA LL", + "ĠCAL L", + "_ CAST", + "_C AST", + "_CA ST", + "ĠE lection", + "ĠEl ection", + "ĠElect ion", + "ĠEle ction", + "Ġ thickness", + "Ġth ickness", + "Ġthick ness", + "V ery", + "Ver y", + "Ve ry", + "_ INTEGER", + "_IN TEGER", + "- dev", + "-d ev", + "-de v", + ") )))", + ")) ))", + "))) )", + "a pat", + "ap at", + "apa t", + "o ooo", + "oo oo", + "ooo o", + "d emo", + "de mo", + "dem o", + "Ġ parseFloat", + "Ġparse Float", + "Ġ Rather", + "ĠR ather", + "ĠRa ther", + "ĠRat her", + "ĠRath er", + "ST IT", + "m aker", + "ma ker", + "make r", + "mak er", + "[ current", + "[c urrent", + "[cur rent", + "[curr ent", + "chron o", + "chr ono", + "Ġ christ", + "Ġch rist", + "Ġchr ist", + "ãģ ª", + "Ġ Detail", + "ĠD etail", + "ĠDe tail", + "ĠDet ail", + "ư á»", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "Ġs ul", + "Ġsu l", + "id ency", + "ide ncy", + "iden cy", + "Q ue", + "Qu e", + "Ġe legant", + "Ġeleg ant", + "a pons", + "ap ons", + "apon s", + "apo ns", + "Ġd ishes", + "Ġdis hes", + "Ġdish es", + "Ġint egers", + "Ġinteg ers", + "Ġinteger s", + "Ġinte gers", + "( read", + "(r ead", + "(re ad", + "0 57", + "05 7", + "find ViewById", + "Ġ Amount", + "ĠA mount", + "ĠAm ount", + "Ġ Skip", + "ĠS kip", + "ĠSk ip", + "ĠSki p", + "Ġhab its", + "Ġha bits", + "Ġhabit s", + "* )(", + "*) (", + "Ġmon sters", + "Ġmonster s", + "M AC", + "MA C", + ": end", + ":e nd", + "Ġf rank", + "Ġfr ank", + "Ġfra nk", + "Ġfran k", + "As sembly", + "Ġ dfs", + "Ġd fs", + "Ġdf s", + "Ġn eut", + "Ġne ut", + "Ġneu t", + "_ TYPES", + "_T YPES", + "_TYPE S", + "_TYP ES", + "e qual", + "eq ual", + "equ al", + "lo yd", + "loy d", + "( uri", + "(u ri", + "(ur i", + "Ġ chi", + "Ġc hi", + "Ġch i", + "Ġdef endant", + "Ġdefend ant", + "Ġconf licts", + "Ġconflic ts", + "Ġconflict s", + "Ġconfl icts", + "Ġ vil", + "Ġv il", + "Ġvi l", + "- js", + "-j s", + "Ġ Peace", + "ĠPe ace", + "Ġ mutable", + "Ġm utable", + "Ġmut able", + "Ġmu table", + ") sender", + ")s ender", + "Ġ Focus", + "ĠF ocus", + "ĠFo cus", + "å» º", + "Ġapprec iated", + "Ġappreciate d", + "s leep", + "Ġ RED", + "ĠR ED", + "ĠRE D", + "C ulture", + "Ġdesign ers", + "Ġdesigner s", + "_ generator", + "_g enerator", + "_gen erator", + "_gener ator", + "c odes", + "co des", + "code s", + "cod es", + "/ ex", + "/e x", + ". GetValue", + ".Get Value", + "um bled", + "umb led", + "umble d", + ".scal ajs", + ".scala js", + "pe ror", + "per or", + "Ġveter ans", + "Ġveteran s", + "Ġ })čĊ", + "Ġ} )čĊ", + "Ġ}) čĊ", + "Ġun fortunately", + "Ġunfortunate ly", + "_ CREATE", + "_C REATE", + "_CRE ATE", + "_CREAT E", + "M ass", + "Ma ss", + "Mas s", + "Ġ CLAIM", + "ĠCL AIM", + "Ġ Meet", + "ĠMe et", + "_ support", + "_s upport", + "_sup port", + "_supp ort", + "B ank", + "Ban k", + "Ba nk", + "( ).Ċ", + "() .Ċ", + "(). Ċ", + "D ark", + "Da rk", + "Dar k", + "_ LOW", + "_L OW", + "_LO W", + "Ġ Mining", + "ĠM ining", + "ĠMin ing", + "ĠMini ng", + "ĠMi ning", + "Ġ Owner", + "ĠO wner", + "ĠOwn er", + "ĠOw ner", + "i era", + "ie ra", + "ier a", + "Client e", + "Cl iente", + "Cli ente", + "Ġencour aging", + "> S", + "Ġboy friend", + "Ġ Half", + "ĠH alf", + "ĠHa lf", + "ĠHal f", + "Ġ ACC", + "ĠA CC", + "ĠAC C", + "A ff", + "Af f", + "_ ar", + "_a r", + "- life", + "-l ife", + "-li fe", + "c x", + ".J Button", + "iz ado", + "iza do", + ". zero", + ".z ero", + ".open qa", + "o ton", + "ot on", + "oto n", + ". textContent", + ".text Content", + "Ġt oll", + "Ġto ll", + "Ġtol l", + "a tie", + "at ie", + "ati e", + "Ġball ot", + "Ġbal lot", + "Ġballo t", + "- number", + "-n umber", + "-num ber", + ". Exception", + ".Ex ception", + "ĉ params", + "ĉparam s", + "c ircle", + "circ le", + "cir cle", + "- map", + "-m ap", + "Ġ nap", + "Ġn ap", + "Ġna p", + "Ġ Robot", + "ĠR obot", + "ĠRob ot", + "ĠRo bot", + "Ġ Ich", + "ĠI ch", + "reg istration", + "registr ation", + "regist ration", + "A mazon", + "Am azon", + "roll ment", + "( exp", + "(e xp", + "(ex p", + "Ġt anks", + "Ġtank s", + "Ġtan ks", + "ĠG ordon", + "ĠGor don", + "ĠGord on", + "Ġm achinery", + "Ġmachine ry", + "Ġmach inery", + "Ġ baseline", + "Ġb aseline", + "Ġbase line", + "Ġbas eline", + "æ ĭ", + "0 86", + "08 6", + "Ø ©", + "Ġ Convention", + "ĠCon vention", + "ĠConv ention", + "ĉ config", + "ĉcon fig", + "ĉconf ig", + "o okies", + "ook ies", + "ookie s", + "m ult", + "mu lt", + "mul t", + "Rec ords", + "Record s", + "Ġ EST", + "ĠE ST", + "ĠES T", + "Ġgar bage", + "Ġcon form", + "Ġconf orm", + "i dal", + "id al", + "ida l", + "Ġb arg", + "Ġbar g", + "Ġba rg", + "Ġsurv ived", + "Ġsurvive d", + "Ġsurviv ed", + "Ġinvestig ations", + "Ġinvestigation s", + "9 35", + "93 5", + ".contains Key", + "---- ----------------------------------------------------------------------Ċ", + "---------------------------------------------------------------- ----------Ċ", + "---------------------------------------------------------------------- ----Ċ", + "or tion", + "ort ion", + "Ġh orr", + "Ġhor r", + "Ġho rr", + "_ http", + "_h ttp", + "_ht tp", + "Ġ mant", + "Ġm ant", + "Ġman t", + "Ġma nt", + "] ;čĊčĊ", + "]; čĊčĊ", + "];čĊ čĊ", + "b inary", + "bin ary", + "9 48", + "94 8", + "e mpl", + "em pl", + "emp l", + "Ġin quiry", + "Ġ Meanwhile", + "ĠMean while", + "0 98", + "09 8", + "Ġcollect ing", + ".Entity Framework", + "\" ,ĊĊ", + "\", ĊĊ", + "\",Ċ Ċ", + "Ġ Pic", + "ĠP ic", + "ĠPi c", + "@ Inject", + "ick ness", + "Ġ Binding", + "ĠB inding", + "ĠBind ing", + "ĠBin ding", + "Ġcont rolling", + "Ġcontrol ling", + "re verse", + "rev erse", + "Ġch airs", + "Ġchair s", + "Ġcha irs", + "Ġchai rs", + "semb led", + "sem bled", + "semble d", + "sembl ed", + "( add", + "(a dd", + "(ad d", + "Dis abled", + "Disable d", + "a nas", + "an as", + "ana s", + ". translate", + ".trans late", + "- ----------Ċ", + "-- ---------Ċ", + "---- -------Ċ", + "-------- ---Ċ", + "--- --------Ċ", + "----- ------Ċ", + "---------- -Ċ", + "------ -----Ċ", + "----------- Ċ", + "------- ----Ċ", + "--------- --Ċ", + "Ġref lected", + "Ġreflect ed", + "Ġrefl ected", + "\" ]ĊĊ", + "\"] ĊĊ", + "\"]Ċ Ċ", + "Ex ternal", + "Ext ernal", + "Extern al", + "Ar row", + "Arr ow", + "S ingleton", + "Single ton", + "Sing leton", + "% x", + "Ġ Å", + "Ġan cest", + "Ġance st", + "Ġanc est", + "ĠOr leans", + "ĉ cmd", + "ĉc md", + "ĉcm d", + "Ġpro hibited", + "Ġprohib ited", + "Ġprohibit ed", + "ith metic", + "( channel", + "(ch annel", + "(chan nel", + "_ css", + "_c ss", + "_cs s", + "For ward", + ". socket", + ".s ocket", + ".so cket", + ".sock et", + "Ġl uc", + "Ġlu c", + "â Ĩ", + "Ġ Firefox", + "ĠFire fox", + "Ġ Movies", + "ĠM ovies", + "ĠMovie s", + "ĠMov ies", + ") _", + ". ends", + ".e nds", + ".end s", + ".en ds", + "( shape", + "(s hape", + "(sh ape", + "Ġde alt", + "Ġdeal t", + "Ġs aves", + "Ġsa ves", + "Ġsave s", + "Ġsav es", + "Ġgl ory", + "Ġglo ry", + "Ġglor y", + "Ġmej or", + "Ġbre athing", + "Ġbreath ing", + "Ġ eller", + "Ġe ller", + "Ġel ler", + "Ġell er", + "Ġelle r", + "get Data", + "Ġ angles", + "Ġan gles", + "Ġang les", + "Ġangle s", + "Ġangl es", + "Ġ toolbar", + "Ġtool bar", + "Ġ spacing", + "Ġsp acing", + "Ġspa cing", + "Ġspac ing", + "0 59", + "05 9", + "I PS", + "IP S", + "Ġfloor s", + "Ġflo ors", + "_ ACTIVE", + "_ACT IVE", + "_ACTIV E", + "Ġ shuffle", + "Ġsh uffle", + "/ shared", + "/sh ared", + "/share d", + "Ġ Ele", + "ĠE le", + "ĠEl e", + "e dish", + "ed ish", + "edi sh", + "edis h", + "Ġweb cam", + ". expect", + ".ex pect", + ".exp ect", + "i loc", + "il oc", + "ilo c", + "Ġ Includes", + "ĠIn cludes", + "ĠInclude s", + "Ġt weeted", + "Ġtweet ed", + "Ġtwe eted", + "Ġtwee ted", + "Ġ :)", + "Ġ: )", + "Ġ Essay", + "ĠEs say", + "ĠEss ay", + "F ix", + "Fi x", + "- between", + "-b etween", + "_ web", + "_w eb", + "_we b", + ". conv", + ".con v", + ".co nv", + "Ġrac ism", + "Ġreflect s", + "Ġrefl ects", + "u mm", + "um m", + "и ÑĤе", + "иÑĤ е", + "_ footer", + "_f ooter", + "_foot er", + "/ docs", + "/d ocs", + "/doc s", + "/do cs", + "Ġ Pour", + "ĠP our", + "ĠPo ur", + "ĠPou r", + "Ng Module", + ". initialize", + ".initial ize", + "pattern s", + "_ In", + "_I n", + "Ġ Abb", + "ĠA bb", + "ĠAb b", + "* čĊ", + "Ġsent iment", + "b uff", + "buf f", + "bu ff", + "_ counts", + "_count s", + "_co unts", + "_cou nts", + "Ġ reuse", + "Ġre use", + "ch unk", + "chu nk", + "Ġim posed", + "Ġimp osed", + "Ġimpose d", + "Primary Key", + "Fore ground", + "Ġcons umed", + "Ġconsum ed", + "Ġconsume d", + "? !", + "Ġd ick", + "Ġdi ck", + "Ġdic k", + "Ġ chron", + "Ġch ron", + "Ġchr on", + "ĠF ern", + "ĠFe rn", + "ĠFer n", + "Ġ responsive", + "Ġres ponsive", + "Ġrespons ive", + "9 58", + "95 8", + "Ġin sect", + "Ġins ect", + "Ġinse ct", + "ic ulty", + "icult y", + "Ġ rw", + "Ġr w", + "Ġa like", + "Ġal ike", + "Ġali ke", + "Ġ subset", + "Ġsub set", + "Ġsubs et", + "Ġ Cookies", + "ĠC ookies", + "ĠCo okies", + "ĠCook ies", + "ĠCookie s", + "Ġ Pair", + "ĠP air", + "ĠPa ir", + "ĠPai r", + "Ġ tier", + "Ġt ier", + "Ġti er", + "Ġtie r", + "I FO", + "IF O", + "av our", + "avo ur", + "avou r", + "Ġ QU", + "ĠQ U", + ", sizeof", + ",size of", + "Ġ merged", + "Ġm erged", + "Ġmer ged", + "Ġmerge d", + "Ġmerg ed", + "m v", + "i tol", + "it ol", + "ito l", + "y lon", + "yl on", + "Ġj umped", + "Ġjump ed", + ". role", + ".r ole", + ".ro le", + "ens aje", + "ensa je", + "R ules", + "Rule s", + "Ru les", + "Ġ browse", + "Ġb rowse", + "Ġbrows e", + "Ġbrow se", + "An imator", + "Anim ator", + "Ġy oga", + "Ġyo ga", + "Ġyog a", + "Ġ variants", + "Ġvar iants", + "Ġvari ants", + "Ġvariant s", + "Ġcour tesy", + "Ġcourt esy", + "Ġcourte sy", + "u ran", + "ur an", + "ura n", + "p bs", + "pb s", + "else if", + "A lt", + "Al t", + "Ġ Lane", + "ĠL ane", + "ĠLa ne", + "ĠLan e", + "C LK", + "CL K", + "I MARY", + "IM ARY", + "IMA RY", + "_ PROPERTY", + "_P ROPERTY", + "_PRO PERTY", + "ï¼ IJ", + "Ġ chan", + "Ġc han", + "Ġch an", + "Ġcha n", + "Ġgrad ually", + "Ġgradu ally", + "Ġgradual ly", + "Ġ shake", + "Ġsh ake", + "Ġsha ke", + "Ġbl onde", + "Ġblo nde", + "Ġblond e", + ".. .\");Ċ", + "... \");Ċ", + "...\" );Ċ", + "- sex", + "-s ex", + "-se x", + "Ġgame play", + "a cies", + "ac ies", + "aci es", + "acie s", + ". refresh", + ".re fresh", + ".ref resh", + "U SB", + "US B", + "Ġ Plot", + "ĠP lot", + "ĠPl ot", + "W as", + "Wa s", + "iss ippi", + "Ġ Tensor", + "ĠT ensor", + "Ġcrypt ocurrency", + "Ġcrypto currency", + "Ġcryptoc urrency", + "Ġdifficult ies", + "De leted", + "Delete d", + "Del eted", + "With out", + "_ append", + "_app end", + "_ap pend", + "_ ver", + "_v er", + "_ve r", + "9 67", + "96 7", + "\" ))čĊ", + "\") )čĊ", + "\")) čĊ", + "Ġh onestly", + "Ġhonest ly", + "Ġ pivot", + "Ġp ivot", + "Ġpiv ot", + "Ġ temps", + "Ġte mps", + "Ġtem ps", + "Ġtemp s", + "_ ps", + "_p s", + "Ġ Unlike", + "ĠUn like", + "[ :-", + "[: -", + "V S", + "_ inf", + "_in f", + "_i nf", + "Ġjun ior", + "Ġjuni or", + "Ġ animations", + "Ġan imations", + "Ġanim ations", + "Ġanimation s", + "Ġ filepath", + "Ġfile path", + "? {{$", + ">{ {$", + ">{{ $", + "Ġ unicode", + "Ġun icode", + "Ġuni code", + "Ġunic ode", + "p laces", + "pl aces", + "place s", + "pla ces", + "Ġ Coffee", + "ĠC offee", + "ĠCo ffee", + "ĠCoff ee", + ". SE", + ".S E", + "Ġ PAR", + "ĠP AR", + "ĠPA R", + "( txt", + "(t xt", + "(tx t", + "g ebra", + "ge bra", + "geb ra", + "Ġ fires", + "Ġf ires", + "Ġfire s", + "Ġfi res", + "Ġfir es", + "Main Window", + "m edium", + "med ium", + "medi um", + "Ġ( âĢľ", + "Ġ lg", + "Ġl g", + "Ġ cmp", + "Ġc mp", + "Ġcm p", + "/ base", + "/b ase", + "_ layers", + "_l ayers", + "_layer s", + "_la yers", + "_ entries", + "_en tries", + "_ent ries", + "Ġadmin ister", + "ĠS UCH", + "ĠSU CH", + "B P", + "ĠScott ish", + "ĉ čĊĉčĊ", + "ĉčĊ ĉčĊ", + "g uard", + "gu ard", + "gua rd", + "Ġ Strong", + "ĠSt rong", + "ĠStr ong", + "In sn", + "Ins n", + "Ġ CAP", + "ĠC AP", + "ĠCA P", + "as ury", + "asu ry", + "Ġ SEE", + "ĠS EE", + "ĠSE E", + "C lock", + "Cl ock", + "Clo ck", + "e rie", + "er ie", + "eri e", + "\\ models", + "\\model s", + "Ġ $$", + "Ġ$ $", + "Ġ Cab", + "ĠC ab", + "ĠCa b", + "Ġwur de", + "Ġsold ier", + "Ġcl ips", + "Ġclip s", + "Ġcli ps", + "Ġarr angement", + "Ġarrang ement", + "Ġarrange ment", + "Ġ Wonder", + "ĠW onder", + "ĠWo nder", + "ĠWon der", + "ĠH orn", + "ĠHor n", + "ĠHo rn", + "Ġsc ared", + "Ġsca red", + "Ġscar ed", + "Ġscare d", + "Ġc ure", + "Ġcur e", + "Ġcu re", + "m kdir", + "mk dir", + "Ġ aligned", + "Ġal igned", + "Ġalign ed", + "Ġ Pink", + "ĠP ink", + "ĠPin k", + "ĠPi nk", + "Ġl anded", + "Ġland ed", + "Ġlan ded", + "D imension", + "Dim ension", + "Scroll Pane", + ". chat", + ".c hat", + ".ch at", + ". With", + ".W ith", + "Ġ Train", + "ĠT rain", + "ĠTr ain", + "ĠTra in", + "] .Ċ", + "]. Ċ", + "Ġth irty", + "Ġd urable", + "Ġdur able", + "Ġ ld", + "Ġl d", + "Ġlate init", + "Ġ charts", + "Ġch arts", + "Ġchar ts", + "Ġchart s", + "Ġcha rts", + "Ġins ult", + ". Fatal", + ".F atal", + ".Fat al", + "_ ct", + "_c t", + "Ġm asks", + "Ġmask s", + "Ġmas ks", + "CLUD ED", + "CLU DED", + "CLUDE D", + "P resident", + "Pres ident", + "Ġcol ours", + "Ġcolour s", + "g ments", + "gment s", + "gm ents", + ". attributes", + ".at tributes", + ".attribute s", + ".attrib utes", + "Ġ Flex", + "ĠF lex", + "ĠFl ex", + "ĠFle x", + "Ġ Clock", + "ĠC lock", + "ĠCl ock", + "ĠClo ck", + "ÃŃ cul", + "ÃŃc ul", + "i men", + "im en", + "ime n", + "J O", + "Ġ Regex", + "ĠReg ex", + "_ LINK", + "_L INK", + "Ġc ouch", + "Ġco uch", + "Ġcou ch", + "Ġ INPUT", + "ĠIN PUT", + "Ġb eating", + "Ġbe ating", + "Ġbeat ing", + "b usiness", + "bus iness", + "pr eced", + "pre ced", + "prec ed", + ". unit", + ".un it", + ".u nit", + ".uni t", + "Ġ Fel", + "ĠF el", + "ĠFe l", + "N ever", + "Ne ver", + "os pel", + "osp el", + ". startswith", + ".start swith", + "ĠE PA", + "ĠEP A", + ". only", + ".on ly", + "Ġpre venting", + "Ġprevent ing", + "Ġprev enting", + "y er", + "ye r", + "Column Name", + "Ġe levation", + "Ġele vation", + "Ġelev ation", + "f lu", + "fl u", + "i cycle", + "ic ycle", + "icy cle", + "Ġ offline", + "Ġoff line", + "Tool bar", + "Ġcomp eting", + "Ġcompet ing", + ") ].", + ")] .", + "Ġm og", + "Ġmo g", + "Ġ isValid", + "Ġis Valid", + "A sk", + "As k", + "_ av", + "_a v", + "_ lat", + "_l at", + "_la t", + "A NC", + "AN C", + "ĠJ oh", + "ĠJo h", + "k ers", + "ke rs", + "ker s", + "Ġ guards", + "Ġg uards", + "Ġgu ards", + "Ġguard s", + "Ġguar ds", + "Ġ chains", + "Ġch ains", + "Ġchain s", + "Ġcha ins", + "Ġchai ns", + "ĠSimple DateFormat", + ". static", + ".st atic", + ".stat ic", + "Ġv essel", + "Ġve ssel", + "Ġvess el", + "Ġves sel", + "Ġm ud", + "Ġmu d", + "Ġst abil", + "Ġstab il", + "Ġsta bil", + "Ġst ret", + "Ġstr et", + "Ġstre t", + "g m", + "am ation", + "ama tion", + "amat ion", + "ç ľ", + "- with", + "-w ith", + "Ġ ros", + "Ġr os", + "Ġro s", + "_ PA", + "_P A", + "Ġ resultado", + "Ġresult ado", + "Ġconf idential", + "Ġconfident ial", + "ĠTok yo", + "ĉ using", + "ĉu sing", + "ĉus ing", + "Ġ Mathf", + "ĠMath f", + "ĠMat hf", + "om bine", + "omb ine", + "Ġ ESPN", + "ĠESP N", + "ĠES PN", + "Ġde alers", + "Ġdeal ers", + "Ġdealer s", + "Ġdismiss ed", + "T RY", + "TR Y", + "Ġte ens", + "Ġteen s", + "Ġtee ns", + "rec ords", + "record s", + "Ġw ings", + "Ġwin gs", + "Ġwing s", + "g allery", + "ac counts", + "account s", + "acco unts", + "_ LIB", + "_L IB", + "Ġj acket", + "Ġja cket", + "Ġjack et", + "Ġjac ket", + "Ġ NSObject", + "ĠNS Object", + "Ġ stones", + "Ġs tones", + "Ġst ones", + "Ġstone s", + "Ġsto nes", + "Ġ Delivery", + "ĠD elivery", + "ĠDel ivery", + "ĠDeliver y", + "ĠD iet", + "ĠDi et", + "ĠDie t", + "/ watch", + "/w atch", + "Ġto ilet", + "Ġtoile t", + "Ġtoi let", + "Ġ Guest", + "ĠG uest", + "ĠGu est", + ". day", + ".d ay", + ".da y", + "0 67", + "06 7", + "Ġ intval", + "Ġint val", + "0 87", + "08 7", + "Vis it", + "Vi sit", + "Ġinvest igated", + "Ġinvestig ated", + "Ġinvestigate d", + "Ġpen tru", + "Ġpent ru", + "ĠThe atre", + "andid ates", + "andidate s", + "andi dates", + "L ang", + "La ng", + "Ġ Serv", + "ĠS erv", + "ĠSe rv", + "ĠSer v", + "Ġ controllers", + "Ġcont rollers", + "Ġcontrol lers", + "Ġcontroller s", + "Ġ setTitle", + "Ġset Title", + "N P", + "a my", + "am y", + "f lat", + "fl at", + "( ui", + "(u i", + "0 69", + "06 9", + "_ document", + "_d ocument", + "_doc ument", + "è ĥ½", + "èĥ ½", + "Ġ Coin", + "ĠC oin", + "ĠCo in", + "ĠAd ams", + "ĠAdam s", + "ĠAda ms", + "p tic", + "pt ic", + "Ġ productive", + "Ġpro ductive", + "Ġproduct ive", + "Ġprod uctive", + "Ġaccompl ished", + "Ġaccomplish ed", + "čĊ čĊčĊčĊ", + "čĊčĊ čĊčĊ", + "čĊčĊčĊ čĊ", + "Ġde ferred", + "Ġdefer red", + "i entes", + "ient es", + "ien tes", + "iente s", + "Ġs inc", + "Ġsi nc", + "Ġsin c", + "ol ars", + "olar s", + "ola rs", + "Right arrow", + "Ġvar iations", + "Ġvari ations", + "Ġvariation s", + "( offset", + "(o ffset", + "(off set", + "9 57", + "95 7", + ". LayoutInflater", + ".Layout Inflater", + "Ġ suspend", + "Ġs uspend", + "Ġsus pend", + "Ġsusp end", + "Ġpre vention", + "Ġprevent ion", + "Ġprev ention", + "_ private", + "_pr ivate", + "_priv ate", + "_ js", + "_j s", + "â ĺħ", + "âĺ ħ", + "Ġw ieder", + "Ġwie der", + "Ġwi eder", + "at um", + "atu m", + "Ĵ Į", + "Ġappear ances", + "Ġappearance s", + ". Document", + ".D ocument", + ".Doc ument", + "Ġvalid ates", + "Ġvalidate s", + "Ġvalida tes", + "c alendar", + "cal endar", + "} \";Ċ", + "}\" ;Ċ", + ". demo", + ".d emo", + ".de mo", + "con ut", + "co nut", + "Ġcor rection", + "Ġcorrect ion", + "Ġcorre ction", + "Ġcorr ection", + "Ġ Deal", + "ĠDe al", + "Ġbatter ies", + "Ġbatt eries", + ". duration", + ".d uration", + ", \\", + "_ marker", + "_m arker", + "_mark er", + "_mar ker", + "m ulti", + "mul ti", + "mult i", + "Ġ halt", + "Ġh alt", + "Ġha lt", + "Ġhal t", + "Ġ cms", + "Ġc ms", + "Ġcm s", + "Ġsh aped", + "Ġshape d", + "Ġsha ped", + "B ro", + "Br o", + "re duce", + "red uce", + "Ġ ####", + "Ġ# ###", + "Ġ## ##", + "Ġ### #", + "C TOR", + "CT OR", + "Ġ Benef", + "ĠB enef", + "ĠBen ef", + "ĠBene f", + "Ġicon ic", + "Ġic onic", + "Ġp iano", + "Ġpi ano", + "Ġpian o", + "Ġeffect iveness", + "Ġeffective ness", + "| .Ċ", + "|. Ċ", + "Ġ ajax", + "Ġa jax", + "Ġaj ax", + "Ġv olumes", + "Ġvol umes", + "Ġvolume s", + "Ġvolum es", + "ภ¡", + "Ġ cljs", + "Ġcl js", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "a ths", + "at hs", + "ath s", + "r aits", + "ra its", + "rait s", + "rai ts", + "å¤ §", + "Ñ ĸ", + "_ mult", + "_m ult", + "_mul t", + "_mu lt", + "Ġfasc inating", + "A verage", + "Ġp ré", + "Ġpr é", + "ĠChair man", + ".find Element", + "_ pin", + "_p in", + "_pi n", + "Ġcom paring", + "Ġcomp aring", + "Ġcompar ing", + "Ġdark ness", + "- Fi", + "-F i", + "- server", + "-s erver", + "-ser ver", + "Ġselect ing", + "s terdam", + "ster dam", + "Ġ Parts", + "ĠP arts", + "ĠPart s", + "ĠPar ts", + "ĠPa rts", + "FORM ATION", + "FORMAT ION", + "Ġn oting", + "Ġnot ing", + "Ġno ting", + "Ġ pile", + "Ġp ile", + "Ġpi le", + "Ġpil e", + "o gs", + "og s", + "Ġ palette", + "Ġp alette", + "Ġpa lette", + "Ġpal ette", + "Ġpale tte", + "_ do", + "_d o", + "it ize", + "iti ze", + "0 79", + "07 9", + "( )(", + "() (", + "Ġdef ining", + "Ġdefin ing", + "Ġ remainder", + "Ġremain der", + "Un its", + "Unit s", + "Uni ts", + "_ TASK", + "_T ASK", + "_TA SK", + "Http Client", + "S ocial", + "So cial", + "Ġf undra", + "Ġfun dra", + "Ġfund ra", + "N R", + "c hest", + "ch est", + "che st", + "ches t", + "C urrency", + "Curr ency", + ". adapter", + ".ad apter", + "Ġd op", + "Ġdo p", + "un ting", + "unt ing", + "ANG UAGE", + "\" He", + "\"H e", + "ĉ index", + "ĉin dex", + "_ package", + "_p ackage", + "_pack age", + ". Icon", + ".I con", + "Ġre pet", + "Ġrep et", + "Ġrepe t", + "m ass", + "ma ss", + "mas s", + "= \".$", + "=\" .$", + "=\". $", + "ĠS ud", + "ĠSu d", + "Ġ lid", + "Ġl id", + "Ġli d", + "pro vince", + "prov ince", + "ì ľ", + "G PIO", + "GP IO", + "Ð ļ", + "Ġ MySQL", + "ĠMy SQL", + "Ġ docs", + "Ġd ocs", + "Ġdo cs", + "Ġdoc s", + "Ġ GA", + "ĠG A", + "Ġip sum", + "Ġips um", + "K ernel", + "Ġac cepts", + "Ġaccept s", + "Ġf itting", + "Ġfit ting", + "Ġcu ando", + "Ġd uplic", + "Ġdup lic", + "ĠBr other", + "ĠBro ther", + "ĠK le", + "ĠKl e", + "n ums", + "num s", + "nu ms", + "Ġ morph", + "Ġm orph", + "Ġmor ph", + "Ġ ########", + "Ġ# #######", + "Ġ## ######", + "Ġ### #####", + "Ġ#### ####", + "Ġ##### ###", + "Ġ CGPoint", + "ĠCG Point", + "< unsigned", + "ä¾ ĭ", + "ĠD uke", + "ĠDu ke", + ".set Bounds", + "q s", + "o ric", + "or ic", + "ori c", + "j er", + "je r", + "Ġreg arded", + "Ġregard ed", + "Http Request", + "Ġb onds", + "Ġbo nds", + "Ġbon ds", + "Ġbond s", + "Ġthorough ly", + "en cent", + "ence nt", + "enc ent", + "Ġhighlight ed", + "Ġac res", + "Ġacre s", + "Ġwork place", + "Ġ Lux", + "ĠL ux", + "ĠLu x", + "Ġ quot", + "Ġqu ot", + "Ġquo t", + "9 86", + "98 6", + ". inflate", + ".in flate", + ".inf late", + "Ġd ocumented", + "Ġdocument ed", + "Ġadd iction", + "Ġaddict ion", + "Ġ mutation", + "Ġm utation", + "Ġmut ation", + ". city", + ".c ity", + ".ci ty", + "Ġbott les", + "Ġbottle s", + "Ġ Repository", + "ĠRe pository", + "ĠRepos itory", + "o nn", + "on n", + "err no", + "ARI ABLE", + "åº ¦", + "_ BEGIN", + "_B EGIN", + "_BE GIN", + "g las", + "gl as", + "' })Ċ", + "'} )Ċ", + "'}) Ċ", + "Ġ Massage", + "ĠM assage", + "ĠMass age", + "ĠMas sage", + "ĠW hit", + "ĠWh it", + "reg ex", + "W A", + "Ġout let", + "- head", + "-h ead", + "-he ad", + "Ġ expired", + "Ġex pired", + "Ġexp ired", + "Ġexpire d", + "Ġ Thai", + "ĠT hai", + "ĠTh ai", + "/ include", + "/in clude", + "/inc lude", + "g radient", + "grad ient", + "s canf", + "scan f", + "Ġs eam", + "Ġse am", + "Ġsea m", + "w al", + "wa l", + "ĉ buf", + "ĉb uf", + "B earer", + "Be arer", + "Bear er", + "Ġprec ious", + "Ġprecio us", + "i facts", + "if acts", + "ifact s", + "ifa cts", + "c oord", + "co ord", + "Ġexpl oration", + "Ġexplo ration", + "Ġexplor ation", + ". getY", + ".get Y", + "( handle", + "(h andle", + "(hand le", + "T opic", + "To pic", + "Top ic", + "Ġ Vent", + "ĠV ent", + "ĠVen t", + "ĠVe nt", + "r hs", + "rh s", + "- -----Ċ", + "-- ----Ċ", + "---- --Ċ", + "--- ---Ċ", + "----- -Ċ", + "------ Ċ", + "Ġ Bright", + "ĠB right", + "ĠBr ight", + "ĠBrig ht", + "ĠBri ght", + "Ġ guild", + "Ġg uild", + "Ġgu ild", + "Ġgui ld", + "m other", + "mo ther", + "mot her", + "moth er", + "st orm", + "sto rm", + "stor m", + "Ġmunicip al", + "Ġ ink", + "Ġin k", + "Ġi nk", + ". TYPE", + ".T YPE", + "w l", + ".. . < /", + "_ ro", + "_r o", + "( (*", + "(( *", + "? ???", + "?? ??", + "??? ?", + "_ vertex", + "_ver tex", + "_vert ex", + "ke it", + "ĠH alloween", + "T I", + "Ġ Va", + "ĠV a", + "_ car", + "_c ar", + "_ca r", + "=\" {{$", + "=\"{{ $", + "=\"{ {$", + "Ġrandom ly", + "а ние", + "ан ие", + "ани е", + "Ġsh ocked", + "Ġshock ed", + "ĠPok émon", + "s ignal", + "sign al", + "sig nal", + "Ġ SDK", + "ĠS DK", + "ĠSD K", + "m iddleware", + "middle ware", + "Ġt reating", + "Ġtr eating", + "Ġtreat ing", + "Ġtre ating", + "Ġbur ned", + "Ġburn ed", + "De partment", + "Dep artment", + "Depart ment", + "ĠS pect", + "ĠSp ect", + "ĠSpec t", + "ĠSpe ct", + "Ġ cliente", + "Ġcl iente", + "Ġclient e", + "Ġcli ente", + "Ġ Reddit", + "ĠRe ddit", + "ĠRed dit", + "_ avg", + "_a vg", + "_av g", + "Ġinst alling", + "Ġinstall ing", + "Ġinstal ling", + "_ alpha", + "_al pha", + ", data", + ",d ata", + "Ġ setId", + "Ġset Id", + "Ġ ListView", + "ĠList View", + "( property", + "(p roperty", + "(pro perty", + "(prop erty", + "Ġcross ing", + "Ġ Obj", + "ĠO bj", + "ĠOb j", + "ĠW ard", + "ĠWar d", + "ĠWa rd", + "ĠRedirect To", + "Ġ Present", + "ĠP resent", + "ĠPres ent", + "ĠPre sent", + "Ġdr aws", + "Ġdraw s", + "Ġdra ws", + "ched uled", + "chedule d", + "Ġlegisl ative", + "Ġtw ist", + "Ġ Stra", + "ĠS tra", + "ĠSt ra", + "ĠStr a", + "Ġ AFP", + "ĠA FP", + "ĠAF P", + "ĠC hap", + "ĠCh ap", + "ĠCha p", + "- pr", + "-p r", + ": CGRect", + "Ġ ces", + "Ġc es", + "Ġce s", + "R outes", + "Route s", + "Ro utes", + "n of", + "no f", + "Ġ visa", + "Ġv isa", + "Ġvis a", + "Ġvi sa", + "Ġ TCP", + "ĠT CP", + "ĠTC P", + "ĠE VEN", + "ĠEV EN", + "ĠEVE N", + "iv ial", + "ivia l", + "ivi al", + "Ġ Letter", + "ĠL etter", + "ĠLet ter", + "R AY", + "RA Y", + "Ġ implode", + "Ġim plode", + "Ġimpl ode", + ". eq", + ".e q", + "= '+", + "=' +", + "Ġmot ivated", + "Ġmotiv ated", + "Ġmotivate d", + ". visible", + ".v isible", + ".vis ible", + ". short", + ".s hort", + ".sh ort", + "> manual", + "Ġ Technical", + "ĠTechn ical", + "Ġcorpor ation", + "Ġcorp oration", + "Ġcorpo ration", + "Ġ HW", + "ĠH W", + "an ka", + "ank a", + "T AIL", + "TA IL", + "is tas", + "ist as", + "ista s", + "Ġper forms", + "Ġperform s", + "Ġperfor ms", + "Ġ Behavior", + "ĠBeh avior", + ". For", + ".F or", + "_ ORDER", + "_OR DER", + "_ORD ER", + "Ġ Kick", + "ĠK ick", + "ĠKi ck", + "Ġ callbacks", + "Ġcall backs", + "Ġcallback s", + "_ dr", + "_d r", + "u ego", + "ue go", + "h ub", + "hu b", + "uff icient", + "s ky", + "sk y", + "Ġ bp", + "Ġb p", + "h table", + "ht able", + "hta ble", + "Ġ ONLY", + "ĠON LY", + "ĠAUTH ORS", + "ĠAUTHOR S", + ". Argument", + ".Arg ument", + "\" };Ċ", + "\"} ;Ċ", + "Ġ Thunder", + "ĠTh under", + "ĠThu nder", + "Ġ Kom", + "ĠK om", + "ĠKo m", + ". Should", + ".Sh ould", + "A UTH", + "AU TH", + "AUT H", + "a hu", + "ah u", + "_ payment", + "_p ayment", + "_pay ment", + "Ġ starter", + "Ġst arter", + "Ġstart er", + "Ġstar ter", + "ìĦ ľ", + "ìļ ©", + "B log", + "Bl og", + "Blo g", + ". patch", + ".p atch", + ".pat ch", + "Ġgover ned", + "Ġgovern ed", + "as sy", + "ass y", + "- found", + "-f ound", + "Ġthe ater", + "Ġtheat er", + "ĠFont Weight", + "Ġ Batman", + "ĠBat man", + "\" If", + "\"I f", + ". Random", + ".R andom", + "_ delta", + "_d elta", + "_del ta", + "Ġ CE", + "ĠC E", + "Auth enticated", + "Authenticate d", + "Ġd rone", + "Ġdr one", + "Ġdro ne", + "Ġc ous", + "Ġco us", + "Ġcou s", + "r adius", + "rad ius", + "radi us", + "M er", + "Me r", + "( None", + "(N one", + "Ġ NJ", + "ĠN J", + "_ headers", + "_header s", + "_head ers", + "_he aders", + "Ġ amer", + "Ġa mer", + "Ġam er", + "py test", + "Ġ Actions", + "ĠA ctions", + "ĠAct ions", + "ĠAction s", + "ĉ ĉĉĠĠĠĠ", + "ĉĉ ĉĠĠĠĠ", + "ĉĉĉ ĠĠĠĠ", + "ĉĉĉĠĠĠ Ġ", + "ĉĉĉĠ ĠĠĠ", + "ĉĉĉĠĠ ĠĠ", + "Ġ ett", + "Ġe tt", + "Ġet t", + "Ġh oly", + "Ġho ly", + "Ġhol y", + "Ġun comfort", + "ĠN in", + "ĠNi n", + "Ġ Decimal", + "ĠD ecimal", + "ĠDe cimal", + "ĠDec imal", + "Ġ Messages", + "ĠM essages", + "ĠMessage s", + "ĠMess ages", + ". sender", + ".s ender", + ".se nder", + ".send er", + "] ])Ċ", + "]] )Ċ", + "]]) Ċ", + "Ġem brace", + "Ġemb race", + "Ġembr ace", + "Th ough", + "Tho ugh", + "/ sp", + "/s p", + "Ġcult ures", + "Ġculture s", + "Ġcul tures", + "Ġhigh way", + "t ar", + "ta r", + ". fail", + ".f ail", + ".fa il", + "_ hidden", + "_h idden", + "_hi dden", + "_hid den", + "ĠcomponentDid Mount", + "ĠW right", + "ĠWr ight", + "Ġj ag", + "Ġja g", + "_ il", + "_i l", + "../ ../../", + "../../ ../", + "i gu", + "ig u", + "F ood", + "Foo d", + "Fo od", + "Ġ ace", + "Ġa ce", + "Ġac e", + "Ġa ños", + "Ġaño s", + "Ġañ os", + "U SD", + "US D", + "Ġmut ual", + "Ġmu tual", + "Log ic", + "Ġt emple", + "Ġtem ple", + "Ġtemp le", + "Ġtempl e", + "Ġbrief ly", + "Ġ Trip", + "ĠT rip", + "ĠTr ip", + "ĠTri p", + "class method", + "default s", + "Ġ chunks", + "Ġch unks", + "Ġchunk s", + ", ,,,", + ",, ,,", + ",,, ,", + "Ġ Reason", + "ĠRe ason", + "$ id", + "$i d", + "- ups", + "-up s", + "-u ps", + "Ġ damn", + "Ġda mn", + "Ġdam n", + "Ġtr ucks", + "Ġtruck s", + "Ġun limited", + "Ġunl imited", + "Ġsc ulpt", + "Ġ Cards", + "ĠC ards", + "ĠCar ds", + "ĠCard s", + "Ġ autor", + "Ġa utor", + "Ġaut or", + "Ġauto r", + "Ġau tor", + "Ġ Testing", + "ĠT esting", + "ĠTest ing", + "ĠTes ting", + "Ġd iese", + "Ġdi ese", + "Ġdie se", + "Ġdies e", + "sh ops", + "shop s", + "ç ´", + "( payload", + "(p ayload", + "Ġ PATH", + "ĠP ATH", + "ĠPA TH", + "ĠPAT H", + "ĠMem orial", + "ĠMemo rial", + "ĠMemor ial", + "Ġridic ulous", + "e gree", + "eg ree", + "egr ee", + "-w inning", + "-win ning", + "Ġre hab", + "Ġreh ab", + "Ġsophistic ated", + "w pdb", + "wp db", + "ĉ path", + "ĉp ath", + "! \";Ċ", + "!\" ;Ċ", + "_ SYS", + "_S YS", + "_SY S", + ". speed", + ".s peed", + ".sp eed", + "Ġ soap", + "Ġso ap", + "s uffix", + "W rap", + "Wr ap", + "Ġenh ancement", + "Ġenhance ment", + "à ī", + "ú b", + "Ġ playlist", + "Ġplay list", + "Ġmix ing", + "Ġmi xing", + "Ġmixin g", + "ant idad", + "anti dad", + "=\" \";Ċ", + "=\"\" ;Ċ", + "Ġ Revision", + "ĠRe vision", + "ĠRev ision", + "Ġ Beat", + "ĠB eat", + "ĠBe at", + "ĠBea t", + ". inc", + ".in c", + ".i nc", + "- way", + "-w ay", + "e ncias", + "enc ias", + "encia s", + "enci as", + "u lers", + "ul ers", + "ule rs", + "uler s", + "C at", + "Ca t", + "i del", + "id el", + "ide l", + "Ġ Ship", + "ĠS hip", + "ĠSh ip", + "ĠShi p", + ". setColor", + ".set Color", + "Ġthreat ening", + "Ġthreaten ing", + ". modules", + ".module s", + ".mod ules", + "Ġafter wards", + "Ġafterward s", + "Ġ Dashboard", + "ĠD ashboard", + "ĠDash board", + "Ċ ĠĊ", + "S ignal", + "Sign al", + "Sig nal", + "Ġ primer", + "Ġpr imer", + "Ġprim er", + "Ġprime r", + "Ġpri mer", + "or neys", + "orney s", + "orne ys", + "ici ary", + "icia ry", + "iciar y", + "Ġ ligne", + "Ġl igne", + "Ġli gne", + "Ġlig ne", + "Ġlign e", + "_ predict", + "_p redict", + "_pre dict", + "_pred ict", + "Ġa est", + "Ġae st", + "Ġaes t", + "_ https", + "_http s", + "_ht tps", + "> :", + "Ġ Lex", + "ĠL ex", + "ĠLe x", + "Ġren contres", + "Ġrencont res", + "Ġrencontre s", + "Ġrencontr es", + "eg ral", + "egr al", + "egra l", + "s cala", + "sc ala", + "scal a", + "_ family", + "_f amily", + "ÃŁ en", + "ÃŁe n", + "_ sym", + "_s ym", + "_sy m", + "Ġunc ertainty", + "Ġuncert ainty", + "Ġuncertain ty", + "Ġ VALUE", + "ĠVAL UE", + "Ġ };čĊčĊ", + "Ġ} ;čĊčĊ", + "Ġ};čĊ čĊ", + "Ġ}; čĊčĊ", + "Ġbr oader", + "Ġbro ader", + "Ġbroad er", + "Ġh orses", + "Ġhor ses", + "Ġhorse s", + "Ġhors es", + "ãģ Ŀ", + "Ġ Kal", + "ĠK al", + "ĠKa l", + "o ba", + "ob a", + "_ INET", + "_IN ET", + "_I NET", + "Ġ Kill", + "ĠK ill", + "ĠKi ll", + "ĠKil l", + "j query", + "a mination", + "am ination", + "amin ation", + "ami nation", + "amina tion", + "[ @\"", + "[@ \"", + "Ġm uj", + "Ġmu j", + "# ##Ċ", + "## #Ċ", + "### Ċ", + "First OrDefault", + "then Return", + "C he", + "Ch e", + "/ footer", + "/f ooter", + "/foo ter", + "Ġp arks", + "Ġpar ks", + "Ġpark s", + "as je", + "ĠG ulf", + "ĠGu lf", + "ĠGul f", + "Ġmod est", + "Ġmode st", + "Ġmo dest", + "Ġmodes t", + ". Init", + ".I nit", + ".In it", + "ï¼Ł ĊĊ", + "ï¼ŁĊ Ċ", + "Ġpros pects", + "Ġprospect s", + "Ġ svg", + "Ġs vg", + "Ġsv g", + "Ġ åı", + "Ġå ı", + ". Dialog", + ".D ialog", + ".Di alog", + ".Dial og", + "_ NET", + "_N ET", + "_NE T", + "Ġ (($", + "Ġ( ($", + "Ġ(( $", + "Ġ ek", + "Ġe k", + "Ġ Warning", + "ĠW arning", + "ĠWar ning", + "ĠWarn ing", + "Ġ MK", + "ĠM K", + "< LM", + "", + ")= >", + "Ġ Repair", + "ĠRe pair", + "ĠRep air", + "_ BE", + "_B E", + "B rand", + "Br and", + "u art", + "ua rt", + "uar t", + "p review", + "pr eview", + "pre view", + "prev iew", + "Ġiniti atives", + "Ġinitiative s", + "r unning", + "run ning", + "b ang", + "ba ng", + "ban g", + "ĉ update", + "ĉup date", + "Ġ Coach", + "ĠCo ach", + "R ich", + "Ġ youtube", + "Ġy outube", + "Ġyou tube", + "Ġrit ual", + "Ġri tual", + "ap pa", + "app a", + "ĠRob inson", + "ĠRobin son", + "p recision", + "pre cision", + "prec ision", + "//// ////////////////////////////////////////////////////////////////////////", + "//////// ////////////////////////////////////////////////////////////////////", + "//////////////// ////////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////// ////////////", + "//////////// ////////////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////////////// ////", + "//////////////////////////////////////////////////////////////////// ////////", + "//////////////////////////////////////////////////////////// ////////////////", + "= []Ċ", + "=[ ]Ċ", + "=[] Ċ", + "Ġcelebr ated", + "Ġcelebrate d", + "O TO", + "OT O", + "Ġin clusion", + "Ġincl usion", + "Ġinclus ion", + "J P", + "' ;čĊčĊ", + "'; čĊčĊ", + "';čĊ čĊ", + "Ġnot able", + "Ġno table", + "Ġnota ble", + "( _.", + "(_ .", + "Man aged", + "Manage d", + "Mana ged", + "Ġgu ides", + "Ġguide s", + "Ġguid es", + "Ġgui des", + "& nbsp", + "ated Route", + "Ġ Adjust", + "ĠAd just", + "ĠAdj ust", + "Ġcol ored", + "Ġcolor ed", + "Ġcolore d", + "_ scores", + "_s cores", + "_score s", + "_sc ores", + "Ġ Tesla", + "ĠTe sla", + "ĠTes la", + "_ progress", + "_pro gress", + "_prog ress", + ". inst", + ".in st", + ".i nst", + ".ins t", + "[ '_", + "[' _", + ". flags", + ".f lags", + ".fl ags", + ".flag s", + "Ġ fclose", + "Ġf close", + "Ġfc lose", + "_ OPER", + "_O PER", + "_OP ER", + "ż y", + "_ note", + "_n ote", + "_no te", + "_not e", + "Ġtrans gender", + "å ķ", + "RI PT", + "Ġab sent", + "Ġabs ent", + "Ġ amet", + "Ġa met", + "Ġam et", + "Ġ operand", + "Ġoper and", + "Ġopera nd", + "ë ©", + "Ġ hood", + "Ġh ood", + "Ġho od", + "to LowerCase", + "a vo", + "av o", + "ĠC ircuit", + "ĠCirc uit", + "ĠL ind", + "ĠLin d", + "ĠLi nd", + "-- }}Ċ", + "= m", + "Ġ suppress", + "Ġsup press", + "Ġsupp ress", + "Ġ MAP", + "ĠM AP", + "ĠMA P", + "i ang", + "ia ng", + "ian g", + "- admin", + "-ad min", + "Ġ sidebar", + "Ġs idebar", + "Ġside bar", + "Ġ Bu", + "ĠB u", + "Ġ Hex", + "ĠH ex", + "ĠHe x", + ", F", + "Ġ Signal", + "ĠS ignal", + "ĠSign al", + "ĠSig nal", + "Ġtrans parency", + "ĠF ederation", + "ĠFeder ation", + "ĠFed eration", + "/ V", + "R eq", + "Re q", + "Ġ pulse", + "Ġp ulse", + "Ġpul se", + "Ġpu lse", + "Ġpuls e", + "Ġt ends", + "Ġte nds", + "Ġten ds", + "Ġtend s", + "Number s", + "Num bers", + "% '", + "Ġde port", + "Ġdep ort", + "d atas", + "data s", + "da tas", + "dat as", + "_ UINT", + "_U INT", + "_UI NT", + "_ tra", + "_t ra", + "_tr a", + "o ko", + "ok o", + "Ġ \"?", + "Ġ\" ?", + "com pet", + "comp et", + "so lete", + "sole te", + "sol ete", + "un dry", + "und ry", + "Ġ overlap", + "Ġover lap", + "Ġoverl ap", + "} `,Ċ", + "}` ,Ċ", + "}`, Ċ", + ". ly", + ".l y", + "_ summary", + "_sum mary", + "Ġ Lost", + "ĠL ost", + "ĠLo st", + "ĠLos t", + ". Center", + ".C enter", + "Ġdis ability", + ". Serialization", + ".S erialization", + ".Serial ization", + "Ġ geom", + "Ġge om", + "Ġgeo m", + "Ġ ?:", + "Ġ? :", + "Ġ Wo", + "ĠW o", + "Ġsh ipped", + "Ġship ped", + "Ĥ æķ°", + "Ġu gly", + "Ġug ly", + "Ġugl y", + "Ġexcit ement", + "Ġex terior", + "Ġext erior", + "Ġexter ior", + "Ġ checkout", + "Ġcheck out", + "Ġ kur", + "Ġk ur", + "Ġku r", + ", D", + "ĠAl aska", + "ĠAla ska", + "Ġsyn thetic", + "Ġsynth etic", + "Ġsynt hetic", + "Ġ Budget", + "ĠB udget", + "ĠBud get", + "Ġ Subscribe", + "ĠSub scribe", + "Ġ &Ċ", + "Ġ& Ċ", + "ÈĻ i", + "Ġ Yu", + "ĠY u", + "ĉ query", + "} .Ċ", + "}. Ċ", + "Ġtr aged", + "Ġtra ged", + "Ġtrag ed", + "as sen", + "ass en", + "asse n", + "Ġaccom modation", + "Ġaccommod ation", + "Ġphys ician", + "Ġphysic ian", + "Ġre named", + "Ġren amed", + "Ġrename d", + "Ġt idak", + "Ġtid ak", + "z Äħ", + "Ġ minus", + "Ġm inus", + "Ġmin us", + "n ych", + "ny ch", + "0 97", + "09 7", + "_EX CEPTION", + "th reads", + "thread s", + "Ġt ire", + "Ġti re", + "Ġtir e", + "_ created", + "_c reated", + "_create d", + "_cr eated", + "_cre ated", + "en sure", + "ens ure", + "Ġ worthy", + "Ġw orthy", + "Ġwor thy", + "Ġworth y", + "Ġexc use", + "Ġ cloth", + "Ġc loth", + "Ġcl oth", + "Ġclo th", + "Ġclot h", + ". parentNode", + ".parent Node", + "/ platform", + "/pl atform", + "ĠU FC", + "ĠUF C", + "Ġ Gtk", + "ĠG tk", + "un ny", + "unn y", + "Ġg ibt", + "Ġgi bt", + "Ġgib t", + "ke ley", + "kel ey", + "h um", + "hu m", + "( tx", + "(t x", + "ĉ dev", + "ĉd ev", + "ĉde v", + "Ġout fit", + "Ġoutf it", + "do ors", + "door s", + "Ġ fon", + "Ġf on", + "Ġfo n", + "i cut", + "ic ut", + "v olatile", + "vol atile", + "Ġhom osex", + "Ġhomo sex", + "Max imum", + "Ġex pend", + "Ġexp end", + "Ġ });ĊĊĊ", + "Ġ} );ĊĊĊ", + "Ġ});Ċ ĊĊ", + "Ġ});ĊĊ Ċ", + "Ġ}) ;ĊĊĊ", + "Ġ}); ĊĊĊ", + "E q", + "on ders", + "ond ers", + "onder s", + "onde rs", + "de partment", + "dep artment", + "depart ment", + "Ġ Physics", + "ĠPh ysics", + "ĠPhys ics", + "\" });Ċ", + "\"} );Ċ", + "\"}) ;Ċ", + "Ġpar ad", + "Ġpara d", + "Ġpa rad", + ". Str", + ".S tr", + ".St r", + "Ġs ele", + "Ġse le", + "Ġsel e", + "IF IED", + "IFI ED", + "Ġdel ivers", + "Ġdeliver s", + "i van", + "iv an", + "iva n", + "Ġrespons ibilities", + "Ġadvoc ates", + "Ġadvocate s", + "è µ", + "Ġ RID", + "ĠR ID", + "ĠRI D", + ". parameters", + ".param eters", + ".parameter s", + "M etrics", + "Met rics", + "Metric s", + "ron ics", + "ronic s", + "Ġ UITableViewCell", + "ĠUI TableViewCell", + "ĠUITableView Cell", + "A bsolute", + "Abs olute", + "ip se", + "ips e", + "y lum", + "yl um", + "ML Element", + "MLE lement", + "_ VALID", + "_VAL ID", + "< title", + " \\<^", + ">\\< ^", + "Ġ ios", + "Ġi os", + "Ġio s", + "s ound", + "so und", + "sou nd", + "\" ];", + "\"] ;", + "Ġf reed", + "Ġfr eed", + "Ġfree d", + "Ġfre ed", + "r ottle", + "rot tle", + "rott le", + "Ġ Lower", + "ĠL ower", + "ĠLo wer", + "ĠLow er", + "ĠLowe r", + "[ count", + "[c ount", + "å Ŀ", + "Ġp ale", + "Ġpa le", + "Ġpal e", + "ĠW ayne", + "ĠWay ne", + "ĠWa yne", + "e arth", + "ear th", + "_ categories", + "_c ategories", + "U CK", + "UC K", + ". metadata", + ".m etadata", + ".meta data", + ".met adata", + "Ġsum mon", + "Ġsumm on", + "H OME", + "HO ME", + "олÑĮ з", + "Ġmanufact ured", + "Ġmanufacture d", + "Ġ dock", + "Ġd ock", + "Ġdo ck", + "Ġdoc k", + "Ġcompet itors", + "Ġcompetitor s", + "Ġcompetit ors", + "_ MODEL", + "_MODE L", + "_MO DEL", + "_MOD EL", + "ok ia", + "oki a", + "Ġ Hey", + "ĠH ey", + "ĠHe y", + "Î ¿", + "Ġ backward", + "Ġback ward", + "ĠPO SS", + "ĠPOS S", + "r opa", + "ro pa", + "rop a", + "Ġ cri", + "Ġc ri", + "Ġcr i", + "_ OBJ", + "_O BJ", + "Trans port", + "- high", + "-h igh", + "Ġerot ik", + "Ġero tik", + "_ slot", + "_s lot", + "_sl ot", + "Ġ artic", + "Ġar tic", + "Ġart ic", + "_ framework", + "_f ramework", + "_frame work", + "_fr amework", + "-s erif", + "-se rif", + "-ser if", + "ĠSql DbType", + "' )(", + "') (", + "+ \"/", + "+\" /", + "Ġw ore", + "Ġwor e", + "Ġwo re", + "S il", + "Si l", + "Ġst oring", + "Ġstor ing", + "Ġsto ring", + "Ġ Phase", + "ĠPh ase", + "u ant", + "ua nt", + "uan t", + "Ġb ump", + "Ġbu mp", + "Ġbum p", + "in ho", + "inh o", + "Ġd ign", + "Ġdi gn", + "Ġdig n", + "Ġ backs", + "Ġb acks", + "Ġback s", + "Ġba cks", + "Ġbac ks", + "q q", + "( hash", + "(h ash", + "(has h", + "Ġ geo", + "Ġg eo", + "Ġge o", + "Ġt ender", + "Ġte nder", + "Ġten der", + "Ġtend er", + "L ogo", + "Log o", + "Lo go", + "! )Ċ", + "!) Ċ", + "Ġ MX", + "ĠM X", + "Ġ Arthur", + "ĠAr thur", + "ĠArt hur", + "ĠArth ur", + "ess oa", + "esso a", + "_ Ch", + "_C h", + "Ġbed rooms", + "Ġbedroom s", + "=\"# \"><", + "=\"#\" ><", + "=\"#\"> <", + "Ġ throat", + "Ġth roat", + "Ġthro at", + "i nsic", + "in sic", + "ins ic", + "insi c", + ". integer", + ".int eger", + "Ġ primitive", + "Ġpr imitive", + "Ġprim itive", + "Truth y", + "Ġfacilit ate", + "Ġfacil itate", + "Ġcre ativity", + "Ġcreat ivity", + "Ġ DNS", + "ĠD NS", + "ĠDN S", + "Ġ gra", + "Ġg ra", + "Ġgr a", + "u ez", + "ue z", + "Ġcount less", + "ĠP oland", + "ĠPol and", + "ĠPo land", + "' M", + "Ġ Dist", + "ĠD ist", + "ĠDis t", + "ĠDi st", + "Ġ vest", + "Ġv est", + "Ġve st", + "Ġves t", + "Ġcert ification", + "Ġcertif ication", + "á» ij", + "h eld", + "he ld", + "hel d", + "ext ensions", + "extension s", + "( static", + "(st atic", + "(stat ic", + "Ġ grades", + "Ġg rades", + "Ġgr ades", + "Ġgrad es", + "Ġgrade s", + "Ġgra des", + "Ġ Uber", + "ĠU ber", + "ĠUb er", + "ãģ Ł", + "Ġ [])Ċ", + "Ġ[ ])Ċ", + "Ġ[] )Ċ", + "Ġ[]) Ċ", + "d atos", + "da tos", + "dat os", + "dato s", + "Ġ getData", + "Ġget Data", + "ĠCh arg", + "ĠChar g", + "ĠCha rg", + "Ġ BS", + "ĠB S", + ".m icrosoft", + ".micro soft", + ". video", + ".v ideo", + ". direction", + ".d irection", + ".dir ection", + ".di rection", + ".direct ion", + "-> {'", + "->{ '", + "l ua", + "lu a", + "a pest", + "ap est", + "ape st", + "apes t", + "Ġbo iler", + "Ġboil er", + "e rek", + "er ek", + "ere k", + "Ġdec ides", + "Ġdecide s", + "Ġdecid es", + ". jar", + ".j ar", + "I SC", + "IS C", + "Ġ Words", + "ĠW ords", + "ĠWord s", + "ĠWor ds", + "( CON", + "(C ON", + "EMPL ATE", + "ree ze", + "s hots", + "sh ots", + "shot s", + "a pps", + "ap ps", + "app s", + "un ted", + "unt ed", + "unte d", + ". setName", + ".set Name", + ": :<", + ":: <", + "- bold", + "-b old", + "-bo ld", + "ê ²", + "å¯ Ĩ", + "Long rightarrow", + "Ġun fair", + "Ġunf air", + "Ġ earning", + "Ġe arning", + "Ġear ning", + "Ġearn ing", + "Ġ shelf", + "Ġsh elf", + "Ġshe lf", + "Ġshel f", + "UR EMENT", + "URE MENT", + "Ġ idle", + "Ġi dle", + "Ġid le", + "_ MENU", + "_M ENU", + "_ME NU", + ". Custom", + ".C ustom", + "A GER", + "AG ER", + "AGE R", + "- \"", + "_ switch", + "_s witch", + "_sw itch", + "b ecause", + "be cause", + "bec ause", + ") view", + ")v iew", + "m are", + "ma re", + "mar e", + "_ condition", + "_con dition", + "_cond ition", + "Ġ Starting", + "ĠStart ing", + "ĠStar ting", + "M vc", + "( pre", + "(p re", + "(pr e", + "d ump", + "du mp", + "dum p", + "_ LOCK", + "_L OCK", + "_LO CK", + "_LOC K", + "at etime", + "ate time", + ". callback", + ".c allback", + ".call back", + "ĠC er", + "ĠCe r", + "o pol", + "op ol", + "opo l", + "ib rary", + "ibr ary", + "Ġ reservation", + "Ġres ervation", + "Ġreserv ation", + "Ġreserva tion", + "ĉ ĉĉĉĉĉĉĊ", + "ĉĉ ĉĉĉĉĉĊ", + "ĉĉĉĉ ĉĉĉĊ", + "ĉĉĉ ĉĉĉĉĊ", + "ĉĉĉĉĉ ĉĉĊ", + "ĉĉĉĉĉĉ ĉĊ", + "ĉĉĉĉĉĉĉ Ċ", + "l ector", + "le ctor", + "lect or", + "lec tor", + "grad uate", + "Ġgener ous", + "Ġgene rous", + "Ġ ion", + "Ġi on", + "Ġio n", + "r icao", + "ri cao", + "ric ao", + "rica o", + "m q", + "_ complete", + "_com plete", + "_comp lete", + "( cursor", + "(c ursor", + "Ġ FormControl", + "ĠForm Control", + ": center", + ":c enter", + "Ġsub stitute", + "Ġsubstit ute", + "Ġ Planning", + "ĠPl anning", + "ĠPlan ning", + "Ġp ension", + "Ġpens ion", + "Ġrecommend ation", + "Ġ Tags", + "ĠT ags", + "ĠTag s", + "ĠTa gs", + "Ġg ef", + "Ġge f", + "Ġ albums", + "Ġalbum s", + "Ġalb ums", + "Ġ washing", + "Ġw ashing", + "Ġwash ing", + "r oc", + "ro c", + "Ġtr ains", + "Ġtrain s", + "Ġtra ins", + "Ġtrai ns", + "a tings", + "at ings", + "ating s", + "atin gs", + "Ġex ponent", + "Ġexp onent", + "ack bar", + "- ln", + "-l n", + "á g", + ".Data Annotations", + "Ġ EIF", + "ĠE IF", + "ĠEI F", + "ĠMal aysia", + "ĠMalays ia", + "ĉ PORT", + "ĉP ORT", + "on us", + "onu s", + "Ġc lever", + "Ġcl ever", + "Ġcle ver", + "Ġp eu", + "Ġpe u", + "> ĊĊĊĊ", + ">Ċ ĊĊĊ", + ">ĊĊ ĊĊ", + ">ĊĊĊ Ċ", + "Ġ Arguments", + "ĠArg uments", + "ĠArgument s", + "Ġdeb ugging", + "Ġdebug ging", + "( right", + "(r ight", + "' D", + "com pute", + "comp ute", + "comput e", + "Ġfin est", + "Ġfine st", + "Ġfi nest", + "Ġfines t", + "OR AGE", + "ORA GE", + "Ġspect acular", + "ph rase", + "Ġin dia", + "Ġind ia", + "Ġlegend ary", + "b irth", + "bir th", + "Ġ composite", + "Ġcom posite", + "Ġcomp osite", + "Ġcompos ite", + "Ġg rows", + "Ġgr ows", + "Ġgrow s", + "Ġgro ws", + "Ġ TD", + "ĠT D", + "Ġe pid", + "Ġep id", + "Ġlaunch ing", + "] ][", + "]] [", + "Min utes", + "Minute s", + "Ġ Cha", + "ĠC ha", + "ĠCh a", + "Ġclean ed", + "Ġcle aned", + "Ġwitness es", + "u kan", + "uk an", + "uka n", + "ĉ Type", + "ĉT ype", + "Ġh abe", + "Ġhab e", + "Ġha be", + "par agraph", + "para graph", + "ĠJ Panel", + "ĠJP anel", + "ĠH ann", + "ĠHa nn", + "ĠHan n", + "Ġvar ied", + "Ġvari ed", + "Ġva ried", + "Ġ Pokemon", + "ĠP okemon", + "ĠPok emon", + "ĠPoke mon", + "ĠM UST", + "ĠMU ST", + "åĬ ¨", + ". visibility", + ".vis ibility", + "op up", + "^ [", + ". expand", + ".exp and", + "Ġ \"',", + "Ġ\" ',", + "Ġ\"' ,", + ".f asterxml", + "_ auto", + "_a uto", + "_aut o", + "Ġ Sheet", + "ĠS heet", + "ĠShe et", + "m arker", + "mark er", + "mar ker", + "Par cel", + "e ws", + "ew s", + "Ġ Strategy", + "ĠStr ategy", + "ĠStrateg y", + "- making", + "-m aking", + "Ġun ve", + "Ġtr ailing", + "Ġtrail ing", + "Ġtra iling", + "Ġtrai ling", + "Ġcl icks", + "Ġclick s", + "Ġcli cks", + "Ġclic ks", + "Ġ GetComponent", + "ĠGet Component", + "ĉ content", + "ĉc ontent", + "ĉcon tent", + "ĉcont ent", + "IG ENCE", + "ER NEL", + "ERN EL", + "NSMutable Array", + "Ġb reat", + "Ġbr eat", + "Ġbre at", + "Ġharm ful", + "¶ Ī", + "Ġbes ides", + "Ġbeside s", + "Ġb oring", + "Ġbo ring", + "Ġbor ing", + "Ġbrut al", + "Ġbru tal", + "v ang", + "va ng", + "van g", + "( parse", + "(p arse", + "(par se", + "qu ick", + "qui ck", + "Ġ pytest", + "Ġpy test", + "Ġpyt est", + "Ġswitch ing", + "( )]Ċ", + "() ]Ċ", + "()] Ċ", + "Ġ ìĦ", + "Ġì Ħ", + "L ER", + "LE R", + "ĉ font", + "ĉf ont", + "Ġ nett", + "Ġn ett", + "Ġne tt", + "Ġnet t", + ") ]ĊĊ", + ")]Ċ Ċ", + ")] ĊĊ", + "( /\\", + "(/ \\", + "æŀ ľ", + "to Array", + "Ġb reed", + "Ġbr eed", + "Ġbre ed", + "Ġbree d", + "Ġ CAR", + "ĠC AR", + "ĠCA R", + "Ġ Weapon", + "ĠWe apon", + "A bs", + "Ab s", + "t ot", + "to t", + "Ġ setName", + "Ġset Name", + "a ptive", + "apt ive", + "Ġ :,", + "Ġ: ,", + "Ġ escaped", + "Ġesc aped", + "Ġescape d", + "Ġescap ed", + "or den", + "ord en", + "orde n", + "Ġ Pri", + "ĠP ri", + "ĠPr i", + "th umbnail", + "Ġde scriptions", + "Ġdes criptions", + "Ġdescription s", + "Ġdescri ptions", + "/ styles", + "/st yles", + "/style s", + "Ġ PCI", + "ĠP CI", + "ĠPC I", + "Ġ alphabet", + "Ġal phabet", + "Ġalpha bet", + "Ġalph abet", + "astic search", + "astics earch", + "N OTE", + "NO TE", + "NOT E", + "Ġc ialis", + "Ġci alis", + "ĠGr iff", + "ĠGri ff", + "Ġp orque", + "Ġpor que", + "Ġprote ins", + "Ġprotein s", + "p lays", + "pl ays", + "play s", + "pla ys", + "Ġst ating", + "Ġstat ing", + "Ġsta ting", + "Ġstati ng", + "Ġim agination", + "Ġimag ination", + "Ġimagin ation", + "Ġf acial", + "Ġfa cial", + "Ġfac ial", + "ĠM echan", + "ĠMe chan", + "ĠMech an", + "ĠMec han", + "Ġarr anged", + "Ġarrang ed", + "Ġarrange d", + "_ used", + "_u sed", + "_us ed", + "_use d", + "Ġarrang ements", + "Ġarrangement s", + "Ġarrange ments", + "Ġ Pipe", + "ĠP ipe", + "ĠPi pe", + "ĠPip e", + "host name", + "Ġpro vinc", + "Ġprov inc", + "T it", + "Ti t", + ".Flat Style", + "Ġ Split", + "ĠS plit", + "ĠSp lit", + "ĠSpl it", + "Ġ Loader", + "ĠL oader", + "ĠLo ader", + "ĠLoad er", + ". cc", + ".c c", + "Ġ clinic", + "Ġcl inic", + "Ġclin ic", + "Ġcli nic", + "-------- --------------------", + "---------------- ------------", + "------------ ----------------", + "------------- ---------------", + "--------------- -------------", + "-------------- --------------", + "-------------------- --------", + "Ġb aking", + "Ġba king", + "Ġbak ing", + "Ġ ENT", + "ĠE NT", + "ĠEN T", + "ne ath", + "nea th", + "ãĢģ ĊĊ", + "ãĢģĊ Ċ", + "A NE", + "AN E", + ".EntityFramework Core", + "a ppers", + "ap pers", + "app ers", + "apper s", + "appe rs", + ". ic", + ".i c", + "Ġ NgModule", + "ĠNg Module", + "Ġ FORM", + "ĠF ORM", + "ĠFOR M", + "ĠFO RM", + "Ġ ';", + "Ġ' ;", + "- profit", + "-pro fit", + "-prof it", + "h w", + "en emy", + "ene my", + "Ġ Eye", + "ĠE ye", + "ĠEy e", + "Ġca ution", + "Ġcaut ion", + "t own", + "to wn", + "Ġur ged", + "Ġurge d", + "Ġurg ed", + "Ġ Jimmy", + "ĠJim my", + "ynchron ous", + "-s ized", + "-size d", + "m aking", + "ma king", + "mak ing", + ", {", + "] ',", + "]' ,", + "_ Object", + "_O bject", + "_Obj ect", + "ah oma", + "aho ma", + "Ġact ivist", + "Ġactiv ist", + "IN VAL", + "INV AL", + "Ġ Commercial", + "ĠCom mercial", + "ĠComm ercial", + "ĠOr lando", + "( tab", + "(t ab", + "Ġ ب", + "ĠØ ¨", + "Al gorithm", + "Ġher itage", + "Get Mapping", + "Ġfail ures", + "Ġfailure s", + "r ios", + "ri os", + "rio s", + "at iva", + "ati va", + "ativ a", + "Ġ tet", + "Ġt et", + "Ġte t", + "Ġcar pet", + "Ġcarp et", + "( Z", + "th ree", + "thr ee", + "Ġdis closure", + "Ġdisc losure", + ". ERROR", + ".ERR OR", + "_ called", + "_c alled", + "_call ed", + "_cal led", + "Ġd ial", + "Ġdi al", + "Ġdia l", + "Ġoccas ional", + "Ġoccasion al", + ". Err", + ".E rr", + "Ġfun cion", + "Ġfunc ion", + "caff old", + "caf fold", + "Ġre leasing", + "Ġrele asing", + "ï¼ī ĊĊ", + "ï¼īĊ Ċ", + "_ Value", + "_V alue", + "_Val ue", + "Ġ Vari", + "ĠV ari", + "ĠVar i", + "ĠVa ri", + "y ellow", + "Ġstrugg les", + "Ġstruggle s", + ". cal", + ".c al", + ".ca l", + "ĠDak ota", + "ĉ close", + "ĉc lose", + "ĉcl ose", + "Ġsand wich", + "Ġ analytics", + "Ġan alytics", + "Ġanaly tics", + "Ġanalytic s", + "Ġ **)", + "Ġ* *)", + "Ġ** )", + "& #", + "Ġ Jos", + "ĠJ os", + "ĠJo s", + "Ġpass ive", + "AT TR", + "ATT R", + "Th rowable", + "Throw able", + "ĠM un", + "ĠMu n", + "Ġ Uint", + "ĠU int", + "ĠUi nt", + "( disposing", + "(dis posing", + "a rak", + "ar ak", + "ara k", + "Ġ Leaders", + "ĠLe aders", + "ĠLeader s", + "ĠLead ers", + "Ġaffect ing", + "Ġitem View", + "Ġe conomics", + "Ġecon omics", + "Ġeconomic s", + "Ġeconom ics", + "f v", + "๠Ģ", + ". rb", + ".r b", + "Ġ Overall", + "ĠOver all", + "Ġwealth y", + "Ġev olved", + "Ġevolve d", + "n da", + "nd a", + "ĠH us", + "ĠHu s", + "re strict", + "u men", + "um en", + "ume n", + "ĠA gricult", + "ĠAgr icult", + "! ĊĊĊ", + "!ĊĊ Ċ", + "!Ċ ĊĊ", + "Ġ expires", + "Ġex pires", + "Ġexp ires", + "Ġexpire s", + "Ġspokes person", + "int erval", + "inter val", + "Ġ â", + "Ġà ¢", + "Ġ queen", + "Ġqu een", + "Ġque en", + "( nil", + "(n il", + "i ngo", + "in go", + "ing o", + "He ap", + "Ù İ", + "Ġcom plain", + "Ġcomp lain", + "Ġcompl ain", + "S ym", + "Sy m", + "Ġ Clone", + "ĠCl one", + "ĠClo ne", + "Ġ Ru", + "ĠR u", + "ĠW ILL", + "ĠWI LL", + "Ġ Crystal", + "ĠCr ystal", + "ĠCry stal", + "/ content", + "/c ontent", + "/con tent", + "i ngen", + "in gen", + "ing en", + "inge n", + "oint ment", + "Last Name", + "av icon", + "avi con", + "avic on", + "Ġ IBM", + "ĠI BM", + "ĠIB M", + "Ġ Dimension", + "ĠD imension", + "ĠDim ension", + "a nh", + "an h", + "ici pants", + "icip ants", + "icipant s", + "Ġ Anne", + "ĠAn ne", + "ĠAnn e", + ". progress", + ".pro gress", + "Ġ algo", + "Ġal go", + "Ġalg o", + "o bil", + "ob il", + "obi l", + "Ġ Voice", + "ĠV oice", + "ĠVo ice", + "Ġ FE", + "ĠF E", + "Ġ gli", + "Ġg li", + "Ġgl i", + "Ġ ved", + "Ġv ed", + "Ġve d", + "Ġpr events", + "Ġpre vents", + "Ġprevent s", + "Ġprev ents", + "\\ Column", + "\\C olumn", + "Ġ folk", + "Ġf olk", + "Ġfol k", + "Ġfo lk", + "e tti", + "et ti", + "ett i", + "Ġ mn", + "Ġm n", + "Ġ CLASS", + "ĠCL ASS", + "Ġdis playing", + "Ġdisplay ing", + "Ġdispl aying", + "ĠK l", + "ĠF err", + "ĠFe rr", + "ĠFer r", + "d uto", + "du to", + ". ib", + ".i b", + "Ġ dados", + "Ġd ados", + "Ġda dos", + "Ġdad os", + "Ġdado s", + "' name", + "'n ame", + "'na me", + "- space", + "-s pace", + "-sp ace", + "Ġit alian", + "Ġitalia n", + "Ġ inverse", + "Ġin verse", + "Ġinv erse", + "Ġinvers e", + "Ġ dense", + "Ġd ense", + "Ġden se", + "Ġdens e", + "u ter", + "ut er", + "ute r", + "Ġ IEnumerator", + "ĠI Enumerator", + "- sign", + "-s ign", + "Ġnation wide", + "Ġ persona", + "Ġperson a", + "Ġpers ona", + "Ġperso na", + "Ġs olved", + "Ġsol ved", + "Ġsolve d", + "Ġdram atically", + "Ġdramatic ally", + "Log out", + "Logo ut", + "Ġ grav", + "Ġg rav", + "Ġgr av", + "Ġgra v", + "Ġanal yses", + "Ġanaly ses", + "Ġanalys es", + "Ġanalyse s", + "ol lo", + "oll o", + "Ġ lamp", + "Ġl amp", + "Ġla mp", + "Ġlam p", + ". team", + ".t eam", + ".te am", + "Ġ Erot", + "ĠE rot", + "ĠEr ot", + "= [\"", + "=[ \"", + "Ġd ancing", + "Ġdan cing", + "Ġ ?>/", + "Ġ? >/", + "Ġ?> /", + "Ġc ater", + "Ġca ter", + "Ġcat er", + "Ġcate r", + "f fe", + "ff e", + "Ġ Sha", + "ĠS ha", + "ĠSh a", + "ĠB os", + "ĠBo s", + "ĠRE QUIRE", + "Ġ Monster", + "ĠMon ster", + "ĠMons ter", + "Ġ RB", + "ĠR B", + "Ġ IDE", + "ĠI DE", + "ĠID E", + "Ġs uits", + "Ġsu its", + "Ġsuit s", + "Ġsui ts", + "Ġ formData", + "Ġform Data", + "( theta", + "(th eta", + "(the ta", + "Ġs patial", + "Ġsp atial", + "Ġspat ial", + "= NULL", + "=N ULL", + "Ġ SqlConnection", + "ĠSql Connection", + "Ġ à", + "ĠV enez", + "ĠVen ez", + "ĠVe nez", + "Ġ Morning", + "ĠM orning", + "ĠMor ning", + "Ġpublic ations", + "Ġpub lications", + "Ġpublication s", + "ĠNON INFRINGEMENT", + "first Name", + "u ds", + "ud s", + "W ould", + "Wo uld", + "_ HEAD", + "_HE AD", + "Ġinv ested", + "Ġinvest ed", + "Ġinve sted", + "s table", + "st able", + "sta ble", + "stab le", + "f red", + "fr ed", + "fre d", + "Ġcomm ander", + "Ġcommand er", + "Ġcomma nder", + "Ġcommande r", + "S ES", + "SE S", + "âĢĶ a", + "an che", + "anc he", + "anch e", + "Ġ Movement", + "ĠM ovement", + "ĠMo vement", + "ĠMove ment", + "ĠMov ement", + "ë ³", + "S uite", + "Su ite", + "Suit e", + "Ġjur isdiction", + "ë ¦¬", + "ë¦ ¬", + "Ġ Beth", + "ĠB eth", + "ĠBe th", + "ĠBet h", + "j Query", + "ĠI sa", + "ĠIs a", + "Ġd ental", + "Ġden tal", + "Ġdent al", + ", *", + "Ġ Limit", + "ĠL imit", + "ĠLim it", + "ĠLi mit", + "il iation", + "ili ation", + "ilia tion", + "= \"{", + "=\" {", + "b ast", + "ba st", + "bas t", + "Ġt urb", + "Ġtu rb", + "Ġtur b", + "i sy", + "is y", + "O OK", + "OO K", + "Ġadv ocate", + "Ġadvoc ate", + "i mag", + "im ag", + "ima g", + "LE CTION", + "LECT ION", + "LEC TION", + "л ÑĮ", + "( category", + "(c ategory", + ". dec", + ".d ec", + ".de c", + "Ġun iqu", + "Ġuni qu", + "Ġuniq u", + "_ sn", + "_s n", + "Ġat tracted", + "Ġattr acted", + "Ġattract ed", + "Ġ Ãī", + "Ġà ī", + "Ġ Running", + "ĠR unning", + "ĠRun ning", + "_ edges", + "_edge s", + "_ed ges", + "Ġ Disable", + "ĠD isable", + "ĠDis able", + "_ AS", + "_A S", + "åĽ ¾", + "Ġnetwork ing", + "Ġnet working", + "_ branch", + "_br anch", + "H aving", + "Ha ving", + "toBe Truthy", + "G I", + "Ġc amps", + "Ġca mps", + "Ġcamp s", + "Ġcam ps", + "s ep", + "se p", + "- part", + "-p art", + "-par t", + "Ġ )ĊĊĊĊĊĊĊĊ", + "Ġ) ĊĊĊĊĊĊĊĊ", + "Ġ)Ċ ĊĊĊĊĊĊĊ", + "Ġ)ĊĊ ĊĊĊĊĊĊ", + "Ġ)ĊĊĊ ĊĊĊĊĊ", + "ustr alia", + "ustral ia", + "Ġ Reports", + "ĠRe ports", + "ĠRep orts", + "ĠReport s", + "ĠRepo rts", + "r ito", + "ri to", + "rit o", + "Ġwa ist", + "_ plus", + "_p lus", + "_pl us", + "Ġ WW", + "ĠW W", + "- person", + "-p erson", + "-per son", + "Ap ril", + "Apr il", + "Ġ sar", + "Ġs ar", + "Ġsa r", + ". tar", + ".t ar", + ".ta r", + "Ġagricult ural", + "Ġagr icultural", + "t ic", + "ti c", + "Ġ tcp", + "Ġt cp", + "Ġtc p", + "Ġ setValue", + "Ġset Value", + "ag ento", + "agent o", + "agen to", + "Ġ Appe", + "ĠA ppe", + "ĠApp e", + "ĠAp pe", + "p iler", + "pi ler", + "pile r", + "C ADE", + "CA DE", + "CAD E", + "Ġ anche", + "Ġan che", + "Ġanch e", + "Ġanc he", + "at cher", + "atch er", + "Ġc omics", + "Ġcom ics", + "Ġcomic s", + "Ġ lbs", + "Ġl bs", + "Ġlb s", + "_ segment", + "_s egment", + "_se gment", + "_seg ment", + "' ]=$", + "'] =$", + "']= $", + "it ters", + "itt ers", + "itter s", + "itte rs", + "i cher", + "ic her", + "ich er", + "iche r", + "G INE", + "GIN E", + "GI NE", + "Ġutil ize", + "Ġutiliz e", + "Ġ Cursor", + "ĠC ursor", + "ĠCurso r", + "_ expression", + "_ex pression", + "_exp ression", + "_expr ession", + "Ġ dag", + "Ġd ag", + "Ġda g", + "< long", + " < ?=", + "> x", + ". Task", + ".T ask", + "m oney", + "mon ey", + "mo ney", + "ib aba", + "iba ba", + "' });Ċ", + "'} );Ċ", + "'}) ;Ċ", + "Ġ Specific", + "ĠS pecific", + "ĠSpec ific", + "Ġ Linear", + "ĠL inear", + "ĠLine ar", + "ĠLin ear", + "ĠLi near", + "_ OPT", + "_O PT", + "_OP T", + "Hash Code", + "( Player", + "(P layer", + ".Contains Key", + "Ġ collapsed", + "Ġc ollapsed", + "Ġcoll apsed", + "Ġcollapse d", + "Ġcollaps ed", + "trans parent", + "_R ANGE", + "View er", + "( cfg", + "(c fg", + "(cf g", + "Ġ sorting", + "Ġs orting", + "Ġsort ing", + "Ġsor ting", + "Ġinf ected", + "Ġinfect ed", + "Ġ Nach", + "ĠN ach", + "ĠNa ch", + "Ġaccommod ate", + ". elements", + ".e lements", + ".element s", + ".el ements", + ".elem ents", + "_ PART", + "_P ART", + "_PA RT", + "_PAR T", + "Ġ Sexy", + "ĠSe xy", + "ĠSex y", + "= get", + "=g et", + "( year", + "(y ear", + "Ġ xhr", + "Ġx hr", + ": ]", + "ow ski", + "ows ki", + "Ġsum mar", + "Ġsumm ar", + "Ġ ¿", + "Ġ ¿", + "Ġ inte", + "Ġin te", + "Ġint e", + "Ġi nte", + "Ġ workflow", + "Ġwork flow", + "ĠTai wan", + "v ersions", + "vers ions", + "version s", + "åı ij", + "Ġsur prisingly", + "Ġsurprising ly", + "Ġop tical", + "Ġopt ical", + "Ġoptic al", + "Ġpro ces", + "Ġproc es", + "Ġdis agree", + "Ġdisag ree", + "Ġn uevo", + "Ġnue vo", + "Ġ CAM", + "ĠC AM", + "ĠCA M", + "s orted", + "sort ed", + "le ases", + "lease s", + "lea ses", + "is tle", + "ist le", + "I dent", + "Id ent", + "Ide nt", + "ĉ event", + "ĉe vent", + "ĉev ent", + "j ected", + "ject ed", + "jec ted", + "Ch unk", + "V ars", + "Var s", + "Va rs", + ". provider", + ".pro vider", + "Ġproceed ings", + "Ġproceeding s", + "Ġ inclusive", + "Ġin clusive", + "Ġincl usive", + "Ġinclus ive", + "Ġart work", + "end ants", + "enda nts", + "endant s", + "ï¼ļ Ċ", + "s een", + "se en", + "see n", + "Ġ lig", + "Ġl ig", + "Ġli g", + "Ġ makers", + "Ġm akers", + "Ġmake rs", + "Ġma kers", + "Ġmaker s", + "Ġmak ers", + "_ fun", + "_f un", + "_fu n", + "Ġlength s", + "Ġleng ths", + "Path Variable", + "[ item", + "[i tem", + "[it em", + "ภµ", + "D ead", + "De ad", + "FF FFFF", + "FFFF FF", + "FFF FFF", + "Ġ Urban", + "ĠUr ban", + "ĠUrb an", + "u ples", + "up les", + "uple s", + "i chen", + "ic hen", + "ich en", + "iche n", + "( nullptr", + "(null ptr", + ". spec", + ".s pec", + ".sp ec", + ", System", + ",S ystem", + "U RATION", + "UR ATION", + "URA TION", + "( job", + "(j ob", + "å¼ ı", + "Ġ tracker", + "Ġtr acker", + "Ġtrack er", + "Ġtra cker", + "Å Ļ", + "Ġ MR", + "ĠM R", + "Ġ SQLite", + "ĠSQL ite", + "ĠSQ Lite", + "Ġ dto", + "Ġd to", + "Ġdt o", + "Ġ ;;Ċ", + "Ġ; ;Ċ", + "Ġ;; Ċ", + "Ġ mint", + "Ġm int", + "Ġmin t", + "Ġmi nt", + "Ġ Introduction", + "ĠInt roduction", + "ĠIntro duction", + "c ao", + "ca o", + "Ġquest ioned", + "Ġquestion ed", + "Ġquesti oned", + "Ġf itted", + "Ġfit ted", + "Ġfitte d", + "re vision", + "rev ision", + "s q", + "Ġm ig", + "Ġmi g", + "_ units", + "_un its", + "_unit s", + "_ async", + "_a sync", + "_as ync", + "Ġf lick", + "Ġfl ick", + "} );ĊĊĊ", + "});Ċ ĊĊ", + "});ĊĊ Ċ", + "}) ;ĊĊĊ", + "}); ĊĊĊ", + "Ġn otre", + "Ġnot re", + "Ġno tre", + "} `,", + "}` ,", + "F ilters", + "Filter s", + "Fil ters", + "Ġm undo", + "Ġmu ndo", + "Ġmund o", + "Ġmun do", + "_ days", + "_d ays", + "_day s", + "_da ys", + "Ġ frm", + "Ġf rm", + "Ġfr m", + "u tc", + "ut c", + "Ġ vals", + "Ġv als", + "Ġval s", + "Ġva ls", + "e width", + "ew idth", + "Ġ Generator", + "ĠG enerator", + "ĠGener ator", + "ĠGen erator", + "Ġ Artist", + "ĠArt ist", + "Ġ IDs", + "ĠI Ds", + "ĠID s", + "Ġ Articles", + "ĠArt icles", + "ĠArticle s", + "re ater", + "reate r", + "reat er", + "rea ter", + "ĠComponent Fixture", + ". =", + "Ġ rou", + "Ġr ou", + "Ġro u", + "- no", + "-n o", + ".b ukkit", + "e gg", + "eg g", + "Ġ Diff", + "ĠD iff", + "ĠDi ff", + "a tics", + "at ics", + "atic s", + "ati cs", + "Ñĥ Ñĩ", + "âĢĶ ĊĊ", + "Ġ Charlotte", + "ĠChar lotte", + "ĠCharl otte", + "b ye", + "by e", + "Ġ });čĊčĊ", + "Ġ} );čĊčĊ", + "Ġ}) ;čĊčĊ", + "Ġ});čĊ čĊ", + "Ġ}); čĊčĊ", + "ĠV ik", + "ĠVi k", + "ĠB row", + "ĠBr ow", + "ĠBro w", + "Ġ lv", + "Ġl v", + "ĠG ib", + "ĠGi b", + "- wing", + "-w ing", + "-win g", + "GL IGENCE", + "( Il", + "(I l", + "ĠEngine er", + ". Wait", + ".W ait", + "Ġ Pictures", + "ĠP ictures", + "ĠPicture s", + "ĠPic tures", + "Ġr het", + "Ġrh et", + "Ġrhe t", + "Ġ thermal", + "Ġth ermal", + "Ġther mal", + "Ġtherm al", + "Ġp raise", + "Ġpr aise", + "Ġpra ise", + "< >();ĊĊ", + "<>();Ċ Ċ", + "<>( );ĊĊ", + "<> ();ĊĊ", + "Ġ Spider", + "ĠSp ider", + "ĠSpi der", + "P ause", + "Pa use", + "ĠB aker", + "ĠBa ker", + "ĠBak er", + "ĠBake r", + "Ġs lower", + "Ġsl ower", + "Ġslow er", + "Ġslo wer", + "Ġ }]Ċ", + "Ġ} ]Ċ", + "Ġ}] Ċ", + "_ enqueue", + "_en queue", + "Ġdis appeared", + "Ġdisappe ared", + "Ġdisappear ed", + "Ġ Ticket", + "ĠT icket", + "ĠTi cket", + "ĠTick et", + "ĠTic ket", + "IN UX", + "INU X", + "_ LOCAL", + "_LO CAL", + "_LOC AL", + "аÑģ Ñģ", + "@Inject able", + "comm unity", + "G estureRecognizer", + "Gesture Recognizer", + "åĽ ½", + "Ġs cales", + "Ġsc ales", + "Ġscale s", + "Ġsca les", + "Ġscal es", + "Ġ -(", + "Ġ- (", + "/ '+", + "/' +", + "Ġ Sit", + "ĠS it", + "ĠSi t", + "Ġexecutive s", + "Ġexecut ives", + "ar ding", + "ard ing", + "ardi ng", + "ardin g", + "Ġad vers", + "Ġadv ers", + "Ġback wards", + "Ġbackward s", + "ĉ context", + "ĉcon text", + "ĉcont ext", + "ĠH amp", + "ĠHam p", + "ĠHa mp", + "Ġ PF", + "ĠP F", + "Ġ Deck", + "ĠD eck", + "ĠDe ck", + "ĠDec k", + "Ġ Craig", + "ĠC raig", + "ĠCra ig", + "A merican", + "Americ an", + "America n", + "Ġ bell", + "Ġb ell", + "Ġbe ll", + "Ġbel l", + "Ġp rol", + "Ġpro l", + "Ġpr ol", + "u fen", + "uf en", + "ufe n", + "Ġ rng", + "Ġr ng", + "Ġrn g", + "ar shal", + "ars hal", + "Ġ Simply", + "ĠSim ply", + "ĠSimpl y", + "first name", + "sh ore", + "J uly", + "Jul y", + "Ju ly", + "Ġm ortality", + "Ġmort ality", + "Ġmortal ity", + "ĠâĨĴ ĊĊ", + "H elpers", + "Helper s", + "Help ers", + "Hel pers", + "Ġ benchmark", + "Ġb enchmark", + "Ġbench mark", + "e made", + "em ade", + "ema de", + "Ġorgan isations", + "Ġorganis ations", + "Ġorganisation s", + ".g son", + ".gs on", + "Ġ TextField", + "ĠT extField", + "ĠText Field", + "Ġcivil ians", + "Ġciv ilians", + "Ġcivilian s", + ". Arrays", + ".Array s", + ".Ar rays", + "ĠMiss issippi", + "Ġinter mediate", + "Ġintermedi ate", + "get User", + "_ cluster", + "_cl uster", + "Rel ative", + "fore ign", + ".querySelector All", + "Fore ignKey", + "Foreign Key", + "Ġreason ably", + "- --------Ċ", + "-- -------Ċ", + "---- -----Ċ", + "-------- -Ċ", + "--- ------Ċ", + "----- ----Ċ", + "------ ---Ċ", + "------- --Ċ", + "--------- Ċ", + "C ards", + "Card s", + "Car ds", + "ĠK am", + "ĠKa m", + "Ġ Thor", + "ĠT hor", + "ĠTh or", + "Ġ roller", + "Ġr oller", + "Ġro ller", + "Ġroll er", + "Ġrol ler", + "- element", + "-e lement", + "-el ement", + "Ġ Currency", + "ĠC urrency", + "d die", + "dd ie", + "AL LY", + "ALL Y", + "Ġ RA", + "ĠR A", + "Ġper met", + "Ġperm et", + "Ġperme t", + "a aaa", + "aa aa", + "aaa a", + "Ġhome work", + "Ġhom ework", + "ĠV it", + "ĠVi t", + "Ġm old", + "Ġmo ld", + "Ġmol d", + "ĠF er", + "ĠFe r", + "[ start", + "Ġstat istical", + "Ġstatist ical", + "Ġstatistic al", + "Ġsc ary", + "Ġsca ry", + "Ġscar y", + "_ HOME", + "_H OME", + ". Begin", + ".B egin", + ".Be gin", + "Con struct", + "o genic", + "og enic", + "ogen ic", + "oge nic", + "ĠDEAL INGS", + "Ġtamb ién", + "i xon", + "ix on", + "ixo n", + ". ind", + ".in d", + ".i nd", + "a cre", + "ac re", + "acr e", + "Ġ transforms", + "Ġtrans forms", + "Ġtransform s", + "ĠN ap", + "ĠNa p", + ". Block", + ".B lock", + ".Bl ock", + "uss ia", + "p iration", + "pi ration", + "pir ation", + "ul ent", + "ule nt", + "ulen t", + "Ġ ceil", + "Ġc eil", + "Ġce il", + "Cl ause", + "Cla use", + "n aire", + "na ire", + "T ES", + "TE S", + "Ġn eat", + "Ġne at", + "S TD", + "ST D", + "Ġ RegExp", + "ĠReg Exp", + "per form", + "perf orm", + ": )", + "Ġun ions", + "Ġunion s", + "Ġuni ons", + "Ġs ublic", + "Ġsub lic", + "Ġw inds", + "Ġwin ds", + "Ġwind s", + "Ġwi nds", + "lo ating", + "loat ing", + "g lich", + "gl ich", + "gli ch", + "Ġ pagination", + "Ġp agination", + "Ġpag ination", + "Ġpagina tion", + "S kill", + "Sk ill", + "App ly", + "Ap ply", + "Ġ Operator", + "ĠO perator", + "ĠOper ator", + "ĠOp erator", + "ĠOpera tor", + "ist ogram", + "isto gram", + "Ġ qualities", + "Ġqual ities", + "Ġquali ties", + "C ross", + "Cr oss", + "Cro ss", + "Ġd ecom", + "Ġde com", + "Ġdec om", + "Ġdeco m", + "] ,\"", + "], \"", + "Ġ Juan", + "ĠJ uan", + "ĠJu an", + ". modal", + ".m odal", + ".mod al", + ".mo dal", + ". Child", + ".Ch ild", + "Ġ Roger", + "ĠR oger", + "ĠRo ger", + "ĠRog er", + "STIT UTE", + ":CGRect Make", + "a lette", + "al ette", + "ale tte", + "alet te", + "Ġ sta", + "Ġs ta", + "Ġst a", + "a side", + "as ide", + "asi de", + "Ġ blur", + "Ġbl ur", + "Ġ Wa", + "ĠW a", + "if etime", + "ife time", + "r eed", + "re ed", + "ree d", + "control s", + "contr ols", + "contro ls", + "Ġ bins", + "Ġb ins", + "Ġbi ns", + "Ġbin s", + "Ġ пол", + "Ġп ол", + "Ġпо л", + "* /,Ċ", + "*/ ,Ċ", + "*/, Ċ", + "U IS", + "UI S", + "ĠR ou", + "ĠRo u", + "Ġ Demo", + "ĠD emo", + "ĠDe mo", + "ĠDem o", + "- awesome", + "Ġ Chain", + "ĠCh ain", + "ĠCha in", + "Ġh asta", + "Ġhas ta", + "Ġha sta", + "Ġhast a", + "ĠB art", + "ĠBar t", + "ĠBa rt", + ". KEY", + ".K EY", + "Ġ vendors", + "Ġv endors", + "Ġvend ors", + "Ġvendor s", + "no follow", + "nof ollow", + "Ġ Dest", + "ĠD est", + "ĠDe st", + "ĠDes t", + "_ builder", + "_b uilder", + "_build er", + "Ġarg ues", + "Ġargue s", + "_ answer", + "_an swer", + "_ans wer", + "g oto", + "go to", + "got o", + "Ġ RESULT", + "ĠRES ULT", + "Ġ MON", + "ĠM ON", + "ĠMO N", + "Ġp oder", + "Ġpo der", + "Ġpod er", + "Ġpode r", + "o ons", + "oo ns", + "oon s", + "_ CASE", + "_C ASE", + "_CA SE", + "Ġrep lic", + "Ġrepl ic", + "Ġfin ancing", + "Ġfinanc ing", + "Ġfinan cing", + "Ġ DATE", + "ĠD ATE", + "ĠDA TE", + "ĠDAT E", + "c ern", + "ce rn", + "cer n", + "_ track", + "_t rack", + "_tr ack", + "_tra ck", + "t ies", + "ti es", + "tie s", + "/ logo", + "/l ogo", + "/log o", + "/lo go", + "ĠNE GLIGENCE", + "get Type", + "> T", + "b et", + "be t", + "g irl", + "gi rl", + "ĠINCIDENT AL", + "- site", + "-s ite", + ". trigger", + ".tr igger", + "Ġ Lisa", + "ĠL isa", + "ĠLi sa", + "ĠLis a", + "_ inputs", + "_in puts", + "_input s", + "_inp uts", + "Ġrel atives", + "Ġrelative s", + "Ġrelativ es", + "Ġrelat ives", + "Logged In", + "Con figure", + "Config ure", + "Conf igure", + "I K", + ". accept", + ".ac cept", + ".acc ept", + "Re sume", + "Res ume", + "Ġ Draft", + "ĠD raft", + "ĠDr aft", + "ĠDra ft", + "Ġ *>(", + "Ġ* >(", + "Ġ*> (", + "Ġ WA", + "ĠW A", + "ed ian", + "edia n", + "edi an", + "er ness", + "ern ess", + "erne ss", + "ernes s", + "Ġ LayoutInflater", + "ĠLayout Inflater", + "* /čĊčĊ", + "*/ čĊčĊ", + "*/čĊ čĊ", + "o thy", + "ot hy", + "oth y", + "Ġoblig ation", + "Ġobl igation", + "Sub scribe", + "Ġ thumbnail", + "Ġth umbnail", + "ex ist", + "Ġins isted", + "Ġinsist ed", + "Ġ UICollectionView", + "ĠU ICollectionView", + "ĠUI CollectionView", + "Ġ Angular", + "ĠAng ular", + "Ġtable ts", + "Ġtab lets", + "Ġtablet s", + "Ġ Impact", + "ĠImp act", + "ãĢį ĊĊ", + "ãĢįĊ Ċ", + "a ho", + "ah o", + "Ġcharacter istic", + "g d", + "Ġ= ================================================", + "Ġ================= ================================", + "Ġ================================= ================", + "o urt", + "ou rt", + "our t", + "` .", + "App ro", + "Ap pro", + "Co ordinate", + "Coord inate", + "Re member", + "Rem ember", + "Ġ marine", + "Ġm arine", + "Ġmar ine", + "Ġma rine", + "Ġmari ne", + "Ġmarin e", + "] =='", + "]= ='", + "]== '", + "Ġ Administrator", + "ĠAdmin istrator", + "ĠAdministr ator", + ". getDefault", + ".get Default", + ".getD efault", + "Ġ forgot", + "Ġf orgot", + "Ġfor got", + "Ġforg ot", + "Ġ Structure", + "ĠStruct ure", + "V ue", + "Vu e", + "ar sing", + "ars ing", + "arsi ng", + "m oment", + "mo ment", + "mom ent", + "k w", + "_ cursor", + "_c ursor", + "Att ack", + "Ġath letic", + "Ġdiagn osed", + "Ġdiagnose d", + "Ġ ende", + "Ġe nde", + "Ġen de", + "Ġend e", + "åĪ łéϤ", + "H ouse", + "Ho use", + "Ġ PARAM", + "ĠP ARAM", + "ĠPA RAM", + "ĠPAR AM", + "ĠPARA M", + "Ġ wiki", + "Ġw iki", + "Ġwi ki", + "Ġwik i", + "Ġ Opp", + "ĠO pp", + "ĠOp p", + "Ġcons ervation", + "Ġconserv ation", + "Ġ snd", + "Ġs nd", + "Ġsn d", + "_ tem", + "_t em", + "_te m", + "sub str", + "subst r", + "subs tr", + "ĠC ape", + "ĠCap e", + "ĠCa pe", + ". sim", + ".s im", + ".si m", + "U TION", + "UT ION", + "a nan", + "an an", + "ana n", + "âĢĻ un", + "Ġ gy", + "Ġg y", + "- work", + "-w ork", + "Ġcomp elling", + "Ġcompel ling", + "= '#", + "=' #", + "ĉ sub", + "ĉs ub", + "Ġ directories", + "Ġdirect ories", + "Ġdirector ies", + "íĬ ¸", + "Ġ touches", + "Ġtouch es", + "Ġtou ches", + "out ines", + "outine s", + ". Collection", + ".C ollection", + ".Col lection", + "s chedule", + "sched ule", + ". lat", + ".l at", + "Ġ Doctrine", + "ĠDo ctrine", + "C AA", + "CA A", + "Ġ Refer", + "ĠRe fer", + "ĠRef er", + "Ġshift s", + "Ġ likelihood", + "Ġlik elihood", + "pr eter", + "pre ter", + "pret er", + "Ġ Female", + "ĠF emale", + "ĠFe male", + "ĠFem ale", + "Ġinter cept", + "Ġ lou", + "Ġl ou", + "Ġlo u", + "çĻ »", + "Ġ rug", + "Ġr ug", + "Ġru g", + "ĠC rown", + "ĠCr own", + "ĠCro wn", + "ĠCrow n", + "Ġ ****************************************************************************", + "Ġ************************************************************************ ****", + "Ġ************************************************************************** **", + "Ġ**************************************************************** ************", + "Ġ**** ************************************************************************", + "Ġ******************************************************** ********************", + "Ġ************************************************ ****************************", + "- product", + "-pro duct", + "-produ ct", + "Ġprompt ed", + "u ngle", + "un gle", + "ung le", + "d ocker", + "do cker", + "doc ker", + "dock er", + "Ġ Tu", + "ĠT u", + "Ġ Unique", + "ĠUn ique", + "ĠUni que", + "_ Error", + "_E rror", + "_Err or", + "u los", + "ul os", + "ulo s", + "Ġ âĦ", + "Ġâ Ħ", + "Ġ (`", + "Ġ( `", + "G etting", + "Get ting", + "_ scal", + "_s cal", + "_sc al", + "Ġ Enh", + "ĠE nh", + "ĠEn h", + "ü t", + "Ġsust ained", + "Ġsustain ed", + "Ġ patches", + "Ġp atches", + "Ġpat ches", + "Ġpatch es", + "Ġpros per", + "ĠG aza", + "ĠGa za", + "ĠGaz a", + "_ light", + "_l ight", + "_li ght", + "Ġin cons", + "Ġinc ons", + "Ġincon s", + "- -------Ċ", + "-- ------Ċ", + "---- ----Ċ", + "-------- Ċ", + "--- -----Ċ", + "----- ---Ċ", + "------ --Ċ", + "------- -Ċ", + "ĉ ĉĠĠĠĠĠĠ", + "ĉĉ ĠĠĠĠĠĠ", + "ĉĉĠĠĠ ĠĠĠ", + "ĉĉĠ ĠĠĠĠĠ", + "ĉĉĠĠ ĠĠĠĠ", + "ĉĉĠĠĠĠ ĠĠ", + "ĉĉĠĠĠĠĠ Ġ", + "S F", + "C N", + ": \";Ċ", + ":\" ;Ċ", + "ĠColl ins", + "( *)", + "(* )", + "Ġcomp ilation", + "Ġcompil ation", + "' ]čĊ", + "'] čĊ", + "Ġcon sequence", + "Ġconsequ ence", + "Ġconse quence", + ", ...", + ",. ..", + "Ġ dm", + "Ġd m", + "Ġ BLOCK", + "ĠB LOCK", + "ĠBL OCK", + "Cl uster", + "Ġ ski", + "Ġs ki", + "Ġsk i", + "( argc", + "(arg c", + "(ar gc", + "T uple", + "Tu ple", + "Ġj oins", + "Ġjoin s", + "Ġjo ins", + "ĠSher iff", + "W ar", + "Wa r", + "in di", + "ind i", + "Ġcom mented", + "Ġcomm ented", + "Ġcomment ed", + "H OST", + "HO ST", + "Ġ invitation", + "Ġinv itation", + "Ġinvit ation", + "apan ese", + "Ġper mits", + "Ġpermit s", + "Ġperm its", + "preced ented", + "_ zone", + "_z one", + "Ġ Amy", + "ĠA my", + "ĠAm y", + "_ RD", + "_R D", + "Min imum", + "Ġinv ocation", + "Ġinvo cation", + ". enable", + ".e nable", + ".en able", + "i chten", + "ich ten", + "icht en", + "ichte n", + "- owned", + "\" id", + "_PO INTER", + "_POINT ER", + "F ac", + "Fa c", + "Ġspec ifications", + "Ġspecific ations", + "Ġspecification s", + "Ġn omination", + "Ġno mination", + "Ġnom ination", + "Ġnomin ation", + "Ġ gp", + "Ġg p", + "< (", + "Ġ robots", + "Ġro bots", + "Ġrob ots", + "Ġrobot s", + "Ġ Jerry", + "ĠJ erry", + "ĠJer ry", + "Ġ holders", + "Ġh olders", + "Ġhold ers", + "Ġholder s", + "Ġhol ders", + "Ġ wand", + "Ġw and", + "Ġwa nd", + "Ġwan d", + "c ms", + "cm s", + "Ġ }))Ċ", + "Ġ} ))Ċ", + "Ġ}) )Ċ", + "Ġ})) Ċ", + ". Toast", + ".To ast", + "ĠI List", + "ĠIL ist", + "B ased", + "Base d", + "Bas ed", + "Ba sed", + "z oom", + "zo om", + "/ style", + "/st yle", + "ĠB eck", + "ĠBe ck", + "ĠBec k", + "M en", + "Me n", + "Ġcontrib uting", + "Ġ undo", + "Ġu ndo", + "Ġun do", + "Ġund o", + "Ġ OH", + "ĠO H", + "Ġadd Object", + "Ġe igen", + "Ġei gen", + "Ġeig en", + "sign up", + "éĶ Ļ", + "Ġd istant", + "Ġdis tant", + "Ġdist ant", + "Ġdi stant", + "PAR ATOR", + "Ġ Mari", + "ĠM ari", + "ĠMar i", + "ĠMa ri", + "Ġ má", + "Ġm á", + "E mp", + "Em p", + "ó s", + "Ġ ìĪĺ", + "Ġì Īĺ", + "ĠìĪ ĺ", + "e vt", + "ev t", + "+ j", + "p ark", + "par k", + "pa rk", + "Ġ Stay", + "ĠSt ay", + "ĠSta y", + "ĠD un", + "ĠDu n", + "Ġs oy", + "Ġso y", + "> %", + "az ines", + "azine s", + "azi nes", + "Ġti empo", + "( me", + "(m e", + "p resent", + "pre sent", + "pres ent", + ". This", + ".T his", + ".Th is", + "Ġed itors", + "Ġedit ors", + "Ġeditor s", + "Ġedi tors", + "F IELD", + ". Work", + ".W ork", + "ĠUn iverse", + "ĠUnivers e", + "ĠUni verse", + "ĠUniv erse", + "Ġdr unk", + "Ġdru nk", + ". timer", + ".t imer", + ".time r", + ".tim er", + "Ġal tered", + "Ġalt ered", + "Ġalter ed", + "Ġalte red", + "ĠN ar", + "ĠNa r", + "ëł ¥", + ". Active", + ".Act ive", + "id or", + "ido r", + "ç Ń", + ".delta Time", + "Ġawk ward", + "& quot", + "ĠS afari", + "ĠSaf ari", + "Ġt ricks", + "Ġtr icks", + "Ġtri cks", + "Ġtrick s", + "M ENTS", + "MENT S", + "div ision", + "di vision", + "Ġvar ying", + "Ġva rying", + "Ġvary ing", + "ĠHigh way", + "Ġphot ographer", + "Ġphotograph er", + "ĠSt ewart", + "ĠSte wart", + "Ġ lasting", + "Ġl asting", + "Ġlast ing", + "Ġlas ting", + ". Pre", + ".P re", + ".Pr e", + ".amazon aws", + "Ġ Luck", + "ĠL uck", + "ĠLuc k", + "ĠLu ck", + ". Description", + ".D escription", + ".De scription", + ".Des cription", + "Ġ Naz", + "ĠN az", + "ĠNa z", + "n eg", + "ne g", + "Ġc ó", + "<< \"\\", + "<<\" \\", + "Ġ Surv", + "ĠS urv", + "ĠSur v", + "ĠSu rv", + "Ġ Unc", + "ĠU nc", + "ĠUn c", + "Rec ipe", + ". BorderStyle", + ".Border Style", + "Ġmod ifications", + "Ġmodification s", + "Ġmodific ations", + "- at", + "-a t", + "AT FORM", + "h dr", + "hd r", + "a ko", + "ak o", + "Ġsub license", + "Ġsublic ense", + "Ġ Jump", + "ĠJ ump", + "ĠJu mp", + "Ġbe im", + "Ġbei m", + "ĠMan hattan", + ". bool", + ".b ool", + ".bo ol", + "_ hw", + "_h w", + "ÑĤ ÑĮ", + "B in", + "Bi n", + "Ġ gateway", + "Ġg ateway", + "Ġgate way", + "\" \":", + "\"\" :", + "Ġ UIS", + "ĠU IS", + "ĠUI S", + ": \"+", + ":\" +", + "- def", + "-d ef", + "-de f", + "Ġ Regular", + "ĠReg ular", + "/ testing", + "/t esting", + "/test ing", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "string stream", + "Ġdis par", + "Ġdi spar", + "Ġdisp ar", + "Ġm obil", + "Ġmo bil", + "Ġmob il", + "- read", + "-r ead", + "-re ad", + "Ġ Adapter", + "ĠAd apter", + "ĠAda pter", + "ĠAdapt er", + "ĠCh ampions", + "ĠChampion s", + "ĠChamp ions", + "Ġ scheduler", + "Ġs cheduler", + "Ġsched uler", + "Ġschedule r", + "Ġ kills", + "Ġk ills", + "Ġkill s", + "Ġkil ls", + "Ġ Multiple", + "ĠM ultiple", + "ĠMulti ple", + "ĠMult iple", + "ĠMultip le", + "i rror", + "ir ror", + "Ġg ods", + "Ġgo ds", + "Ġgod s", + "A DO", + "AD O", + "a kte", + "ak te", + "akt e", + "Ġ Usuario", + "ĠUs uario", + ".c ircular", + "Ġre cept", + "Ġrec ept", + "Ġrece pt", + "Ġrecep t", + "Ġ Expr", + "ĠEx pr", + "ĠExp r", + "Ġelder ly", + "Ġnice ly", + "Ġnic ely", + "Ġb este", + "Ġbe ste", + "Ġbest e", + "Ġbes te", + "W ant", + "Wa nt", + "Ġclass ical", + "Ġclassic al", + ". sprite", + ".s prite", + ".sp rite", + "ob jc", + "obj c", + "ĠM ason", + "ĠMa son", + "ĠMas on", + "Ġs istema", + "Ġsist ema", + "Ġsistem a", + ". Black", + ".B lack", + ".Bl ack", + "e so", + "es o", + "ĠZe it", + "Ġ divid", + "Ġd ivid", + "Ġdi vid", + "Ġdiv id", + "Ġen ters", + "Ġent ers", + "Ġenter s", + "_ subject", + "_sub ject", + "_su bject", + "Ġ Planet", + "ĠPlan et", + "ĠPlane t", + "ĠPla net", + ". warning", + ".w arning", + ".warn ing", + "Ġ Gram", + "ĠG ram", + "ĠGr am", + "ĠGra m", + "_ tokens", + "_t okens", + "_token s", + "_tok ens", + "Ġhouse holds", + "Ġhousehold s", + "_ customer", + "_c ustomer", + "_custom er", + "_cust omer", + "user Name", + "c ross", + "cr oss", + "cro ss", + "Ġp ione", + "Ġpi one", + "Ġass ists", + "Ġassist s", + "_ SM", + "_S M", + "i bo", + "ib o", + "Ġl oyal", + "Ġlo yal", + "Ġus eless", + "Ġuse less", + "# elif", + "ĠUlt imate", + "C ome", + "Com e", + "Co me", + "g el", + "ge l", + "Ġd ich", + "Ġdi ch", + "Ġdic h", + "x yz", + "xy z", + "i kel", + "ik el", + "ike l", + "o bra", + "ob ra", + "_ scan", + "_s can", + "_sc an", + "Ġ Interior", + "ĠIn terior", + "ĠInt erior", + "ĠInter ior", + "Ġ Nice", + "ĠN ice", + "ĠNic e", + "ĠNi ce", + "Ġp lac", + "Ġpl ac", + "Ġpla c", + "ĉ target", + "ĉt arget", + "Ġv iral", + "Ġvi ral", + "Ġvir al", + "as so", + "ass o", + "( )/", + "() /", + "u nde", + "un de", + "und e", + "Ġ Adobe", + "ĠAd obe", + "O s", + "vis ited", + "visit ed", + "Ġ OW", + "ĠO W", + "Ġ Feed", + "ĠF eed", + "ĠFe ed", + "ĠFee d", + "Ġ Sequence", + "ĠSe quence", + "ĠSequ ence", + "Ġman ages", + "Ġmanage s", + "Ġmana ges", + "in son", + "ins on", + "ĠLouis iana", + "{ })", + "{} )", + "ĠH ab", + "ĠHa b", + "Ġ LD", + "ĠL D", + "Ġb ip", + "Ġbi p", + "p rites", + "pr ites", + "prite s", + "prit es", + "pri tes", + "( elem", + "(e lem", + "(el em", + "(ele m", + ".h ibernate", + "é lé", + "él é", + "Ġoh ne", + "_ transaction", + "_trans action", + "Ġann unci", + "P ublished", + "Publish ed", + "Ġ Honda", + "ĠH onda", + "ĠHon da", + "ĠHo nda", + "ĠHond a", + "Ġ Tam", + "ĠT am", + "ĠTa m", + "Ġ Packet", + "ĠP acket", + "ĠPac ket", + "ĠPack et", + "ĠPa cket", + "_ selector", + "_se lector", + "_select or", + "_sel ector", + "Ġchalleng ed", + "Ġchallenge d", + "P rocessing", + "Process ing", + "- hover", + "-h over", + "Ġ trainer", + "Ġtr ainer", + "Ġtrain er", + "Ġtra iner", + "Ġtrai ner", + "_ cancel", + "_c ancel", + "_can cel", + "Ġ NSDictionary", + "ĠNS Dictionary", + "ab ric", + "abr ic", + "Ġ MLS", + "ĠM LS", + "ĠML S", + "_ sensor", + "_s ensor", + "Ġsh rink", + "Ġshr ink", + "Ġshri nk", + "Ġ FX", + "ĠF X", + "th reshold", + "thresh old", + "ĉ HX", + "ĉH X", + "- mark", + "-m ark", + "-mar k", + "` .`", + "`. `", + "S cheme", + "Sch eme", + "( full", + "(f ull", + "_ writer", + "_w riter", + "_write r", + "_wr iter", + "Ġ Sys", + "ĠS ys", + "ĠSy s", + "Ġf led", + "Ġfl ed", + "Ġfle d", + "ĠC in", + "ĠCi n", + "- widget", + "-w idget", + "Ġ Previous", + "ĠPre vious", + "ĠPrev ious", + "G ender", + "Ge nder", + "Gen der", + "_ question", + "_q uestion", + "_qu estion", + "_quest ion", + "F eed", + "Fe ed", + "Fee d", + "Ġsc rut", + "Ġscr ut", + "( prefix", + "(p refix", + "(pre fix", + "(pref ix", + "ãĢĤ ãĢĤ", + "Ġin fections", + "Ġinf ections", + "Ġinfection s", + "Ġinfect ions", + "P arts", + "Par ts", + "Part s", + "Pa rts", + "Ġh ierarchy", + "Ġhier archy", + "_ DELETE", + "_DE LETE", + "Ġ Patient", + "ĠP atient", + "ĠPat ient", + "_ pay", + "_p ay", + "_pa y", + "Ġprom oted", + "Ġpromote d", + "Ġpromot ed", + "Ġpromo ted", + "Ġ ìĭ", + "Ġì ĭ", + "Ġcivil ian", + "Ġciv ilian", + "Ġagricult ure", + "Ġagr iculture", + "Ġ Piece", + "ĠP iece", + "ĠPi ece", + "ĠPie ce", + "Ġ stance", + "Ġst ance", + "Ġsta nce", + "Ġstan ce", + "uts che", + "utsch e", + "As sign", + "Ass ign", + ". ACTION", + ".A CTION", + ".AC TION", + ".ACT ION", + "F ig", + "Fi g", + "_ radius", + "_r adius", + "_rad ius", + "_radi us", + "Ġ Sync", + "ĠS ync", + "ĠSy nc", + "ĠSyn c", + "d ucer", + "du cer", + "duc er", + "duce r", + "f ailure", + "fail ure", + "en sed", + "ens ed", + "ense d", + "p time", + "pt ime", + "B M", + "_ datetime", + "_d atetime", + "_date time", + "_dat etime", + "qu ivo", + "quiv o", + "qui vo", + "QUE UE", + "èĢ ħ", + "App ear", + "Ap pear", + "Appe ar", + "Ġsum mit", + "Ġsumm it", + ": void", + ":v oid", + "Ġ vine", + "Ġv ine", + "Ġvi ne", + "Ġvin e", + "è ®¤", + "è® ¤", + "on ne", + "onn e", + "_ TRANS", + "_TR ANS", + "_TRAN S", + "_TRA NS", + ". green", + ".g reen", + ".gr een", + "_ cc", + "_c c", + "Ġhung ry", + "Ġ \">", + "Ġ\" >", + "( ));čĊčĊ", + "() );čĊčĊ", + "()) ;čĊčĊ", + "());čĊ čĊ", + "()); čĊčĊ", + "Ex tract", + "Ext ract", + "Extra ct", + "i zens", + "iz ens", + "ize ns", + "izen s", + "Ġ solver", + "Ġs olver", + "Ġsol ver", + "Ġsolve r", + "N otify", + "Not ify", + "Ġ english", + "Ġeng lish", + "Ġ Shopping", + "ĠSh opping", + "ĠShop ping", + "ĠSho pping", + "inter faces", + "interface s", + "R EQ", + "RE Q", + "Ġil leg", + "Ġill eg", + "Ġ UIImageView", + "ĠUI ImageView", + "ĠUIImage View", + "Ġ disconnect", + "Ġdis connect", + "Ġ Until", + "ĠUn til", + "ĠUnt il", + "ĠCons ervative", + "ĠConserv ative", + "@ Column", + "Ġshift ed", + "Ġ :čĊ", + "Ġ: čĊ", + "Ġf ich", + "Ġfi ch", + "Ġfic h", + "Ġd la", + "Ġdl a", + "Ġs hoe", + "Ġsh oe", + "Ġsho e", + "\" ),čĊ", + "\") ,čĊ", + "\"), čĊ", + "ul arity", + "ular ity", + "_ RESP", + "_RE SP", + "_R ESP", + "_RES P", + "We ather", + "UI Application", + ". iterator", + ".it erator", + ".iter ator", + "Ġ aging", + "Ġa ging", + "Ġag ing", + ". Parent", + ".P arent", + ".Par ent", + "o wie", + "ow ie", + "owi e", + "( equal", + "(e qual", + "(eq ual", + "Ġ Conv", + "ĠCon v", + "ĠCo nv", + "/ default", + "/d efault", + "/de fault", + "Ġme asuring", + "Ġmeas uring", + ". prev", + ".p rev", + ".pre v", + ".pr ev", + ". IsValid", + ".Is Valid", + ". Fat", + ".F at", + "Ġs Äĥ", + "key words", + "keyword s", + "with out", + "Ġs overe", + "Ġso vere", + "Ġex changes", + "Ġexchange s", + "Ġm elt", + "Ġme lt", + "Ġmel t", + "Ġis lands", + "Ġisland s", + "Ġisl ands", + "ĠInt egr", + "Ġj umping", + "Ġjump ing", + "Ġ gle", + "Ġg le", + "Ġgl e", + "Ġjournal ism", + "Ġ dated", + "Ġd ated", + "Ġdate d", + "Ġda ted", + "Ġdat ed", + "Local ized", + "Ġ Refresh", + "ĠRe fresh", + "ĠRef resh", + "P article", + "Part icle", + "Ġ aa", + "Ġa a", + "ĠST RICT", + "ĠSTR ICT", + "Ġb od", + "Ġbo d", + ". Process", + ".P rocess", + ".Pro cess", + "_ AUTO", + "_A UTO", + "_AUT O", + "Ġ Published", + "ĠP ublished", + "ĠPublish ed", + "e very", + "ever y", + "ev ery", + "eve ry", + "Ġtechn ological", + "Ġtechno logical", + "Ġtechnolog ical", + "l sx", + "ls x", + "Ġir rit", + "Ġirr it", + "Add itional", + "Ġ delimiter", + "Ġdel imiter", + "Ġdelim iter", + "_ language", + "_l anguage", + "- area", + "-a rea", + "-ar ea", + "bo ys", + "boy s", + "Ġ Tube", + "ĠT ube", + "ĠTu be", + "ĠTub e", + "Ġ wat", + "Ġw at", + "Ġwa t", + "Ġmechan ics", + "Ġmechanic s", + "_ owner", + "_o wner", + "_own er", + "S pell", + "Sp ell", + "Spe ll", + "Ġ Stories", + "ĠSt ories", + "ĠSto ries", + ".Append Line", + "T ableView", + "Table View", + "h em", + "he m", + "s tick", + "st ick", + "sti ck", + "ol lower", + "oll ower", + "ollow er", + "ollo wer", + "I FF", + "IF F", + "Ġ UV", + "ĠU V", + "oll ision", + "S UB", + "SU B", + "Ġcom parable", + "Ġcompar able", + "Ġd onde", + "Ġdo nde", + "Ġdon de", + "s ales", + "sa les", + "sal es", + "sale s", + "ll vm", + "Ġ }],Ċ", + "Ġ} ],Ċ", + "Ġ}] ,Ċ", + "OTT OM", + "Ġ Purpose", + "ĠP urpose", + "ĠPur pose", + "L ab", + "La b", + "Ġinterview ed", + "o is", + "oi s", + "a sil", + "as il", + "asi l", + ". setId", + ".set Id", + "Ġ Instruction", + "ĠIn struction", + "- ->", + "-- >", + "Ġ Modified", + "ĠMod ified", + "ation ally", + "ational ly", + "Ġ Meeting", + "ĠMe eting", + "ĠMeet ing", + "è¯ ¯", + "# region", + "Ġ routing", + "Ġr outing", + "Ġro uting", + "Ġrout ing", + "Ġrou ting", + ". focus", + ".f ocus", + "ĠY outh", + "ĠYou th", + "ĠYo uth", + "< D", + "ĠN ag", + "ĠNa g", + "cont acts", + "contact s", + "Ġ forming", + "Ġfor ming", + "Ġform ing", + "Ġ mie", + "Ġm ie", + "Ġmi e", + "',[' ../", + "Ġ BP", + "ĠB P", + "Ġapp et", + "Ġap pet", + "Ġappe t", + "Ġ Teacher", + "ĠT eacher", + "ĠTe acher", + "ĠTea cher", + "ĠTeach er", + "Ġ TP", + "ĠT P", + "Ġann ually", + "Ġannual ly", + "outed EventArgs", + "Ġ Speaker", + "ĠS peaker", + "ĠSpe aker", + "ĠSpeak er", + "Ġ rename", + "Ġre name", + "Ġr ename", + "Ġren ame", + "C FG", + "CF G", + "(\" //", + "(\"/ /", + "æİ ¥", + "/ pages", + "/p ages", + "/page s", + "Ġpr és", + "Ġpré s", + "Ġ Spell", + "ĠS pell", + "ĠSp ell", + "ĠSpe ll", + ". Allow", + ".Al low", + ".All ow", + "ĠINT ERRU", + "ĠINTER RU", + "Ġ (#", + "Ġ( #", + "âĢĻ ĊĊ", + "âĢĻĊ Ċ", + "_ Generic", + "_G eneric", + ". imshow", + ".im show", + "_ tim", + "_t im", + "_ti m", + "- face", + "-f ace", + "( &(", + "(& (", + "ati num", + "atin um", + "Ġrevolution ary", + "Ġ Hours", + "ĠH ours", + "ĠHo urs", + "ĠHour s", + "ĠHou rs", + "r ain", + "ra in", + "rai n", + "Ġany time", + "Ġ abb", + "Ġa bb", + "Ġab b", + ". jsp", + ".j sp", + ".js p", + "S crollView", + "Scroll View", + "Ġ Truth", + "ĠTr uth", + "ĠTru th", + "Ġ anticipated", + "Ġanticip ated", + "Ġanticipate d", + "Ġantic ipated", + "Ġ accent", + "Ġacc ent", + "Ġac cent", + ". checked", + ".check ed", + "Ġspec ifies", + "Ġ caf", + "Ġc af", + "Ġca f", + "Ġcell padding", + "Ġ cooked", + "Ġco oked", + "Ġcook ed", + "Ġ Hugh", + "ĠH ugh", + "ĠHu gh", + "pe ek", + "pee k", + "_ RATE", + "_R ATE", + "_RA TE", + "Ġd orm", + "Ġdo rm", + "Ġdor m", + "/ čĊ", + "IV ITY", + ". Controller", + ".Cont roller", + ".Control ler", + "( part", + "(p art", + "(par t", + "(pa rt", + ". constraint", + ".con straint", + "Ġin vasion", + "Ġinv asion", + "M OVE", + "MO VE", + "MOV E", + "Ġgl uc", + "Ġglu c", + "l ename", + "le name", + "len ame", + "lena me", + "Ġ amen", + "Ġa men", + "Ġam en", + "eng lish", + "engl ish", + "ĠSw itzerland", + "\" ;ĊĊĊ", + "\";Ċ ĊĊ", + "\";ĊĊ Ċ", + "\"; ĊĊĊ", + "p est", + "pe st", + "pes t", + ". collect", + ".c ollect", + ".col lect", + ".coll ect", + "N ib", + "Ni b", + "Ġ Dict", + "ĠD ict", + "ĠDi ct", + "Ġ Emb", + "ĠE mb", + "ĠEm b", + "( subject", + "(sub ject", + "Ġout rage", + "Ġoutr age", + "Ġoutra ge", + "Ġdec iding", + "Ġdecid ing", + "Ġsent enced", + "Ġsentence d", + "F echa", + "Fe cha", + "\" A", + "Ġ quer", + "Ġqu er", + "Ġque r", + "Ġq uer", + "Ġfont Family", + "Ġqu adr", + "Ġquad r", + "Ġqua dr", + "- Y", + "_ CACHE", + "_C ACHE", + "_CA CHE", + "Ġan alyzed", + "Ġanaly zed", + "Ġanalyze d", + "Ġg aining", + "Ġgain ing", + "Ġga ining", + "Ġ Against", + "ĠAgain st", + "ĠS oul", + "ĠSo ul", + "ĠSou l", + "t au", + "ta u", + "Ġlight weight", + "Ġ TF", + "ĠT F", + "Ġ Effects", + "ĠE ffects", + "ĠEffect s", + "ĠEff ects", + ". Types", + ".T ypes", + ".Type s", + ". addClass", + ".add Class", + "Ġv egan", + "Ġve gan", + "Ġveg an", + "é ģ", + ". '\"", + ".' \"", + "Ġ Explorer", + "ĠEx plorer", + "ĠExpl orer", + "ĠExplore r", + ". detect", + ".d etect", + ".det ect", + ". shift", + ".s hift", + ".sh ift", + "Ġoblig ations", + "Ġobligation s", + "last Name", + "Ġassoci ations", + "Ġassociation s", + "Ġassoc iations", + "ĠTime Span", + "un ter", + "unt er", + "unte r", + "Ġ Fresh", + "ĠF resh", + "ĠFr esh", + "ĠFre sh", + "ĠFres h", + "Com patible", + "Compat ible", + "P ub", + "Pu b", + "id ges", + "idge s", + ". option", + ".op tion", + ".o ption", + ".opt ion", + "v ari", + "var i", + "va ri", + ". hashCode", + ".hash Code", + "Ġ geb", + "Ġg eb", + "Ġge b", + ". section", + ".s ection", + ".se ction", + ".sec tion", + "- not", + "-n ot", + "-no t", + "Ġ Submit", + "ĠSub mit", + "T N", + "reg istry", + "registr y", + "regist ry", + "_ media", + "_m edia", + "_me dia", + "_med ia", + "Ġn aj", + "Ġna j", + "f ft", + "ff t", + "Ġ mate", + "Ġm ate", + "Ġmat e", + "Ġma te", + "- third", + "-th ird", + "Ġp ockets", + "Ġpocket s", + "e sta", + "es ta", + "est a", + "Ġb ent", + "Ġbe nt", + "Ġben t", + "ĠN ord", + "ĠNo rd", + "ĠNor d", + "Ġretail ers", + "Ġretailer s", + "ĠM orris", + "ĠMor ris", + "ĠMorr is", + ". \"\"\"ĊĊ", + ".\"\" \"ĊĊ", + ".\"\"\"Ċ Ċ", + ".\"\"\" ĊĊ", + "W rong", + "Wr ong", + "Ġ ÅĽ", + "ĠÅ Ľ", + "R ay", + "Ra y", + ". ec", + ".e c", + "Ġ Bind", + "ĠB ind", + "ĠBi nd", + "ĠBin d", + "_ HAND", + "_H AND", + "( non", + "(n on", + "(no n", + "is Valid", + "Ġsimilar ly", + "_ LIMIT", + "_L IMIT", + "Ġd ynamics", + "Ġdynamic s", + "Ġdynam ics", + "Ġdyn amics", + "Ġdist inction", + "Ġdistinct ion", + "ãģ Ĩ", + "< N", + "Ġ orth", + "Ġor th", + "Ġort h", + "Ġ Toyota", + "ĠToy ota", + "Ġ Kate", + "ĠK ate", + "ĠKat e", + "ĠKa te", + "Ġ LS", + "ĠL S", + "o rie", + "or ie", + "ori e", + "ĠSpring s", + "ĠSpr ings", + "Ġf reak", + "Ġfre ak", + "last name", + "_ MULT", + "_M ULT", + "_MUL T", + "- step", + "-s tep", + "-st ep", + "-ste p", + "\" (", + "A DDR", + "AD DR", + "ADD R", + "Ġentert aining", + "Ġentertain ing", + "_ CONF", + "_CON F", + "_CO NF", + "Ġ decoded", + "Ġde coded", + "Ġdec oded", + "Ġdecode d", + "Ġdeco ded", + "Ġst reak", + "Ġstre ak", + "Ġwait ed", + "Ġwa ited", + "Ġnot ified", + "ro duced", + "rodu ced", + "rod uced", + "roduce d", + "vis ual", + ". LayoutParams", + ".Layout Params", + "æ °", + "e sian", + "es ian", + "esi an", + "f its", + "fit s", + "fi ts", + "s pring", + "sp ring", + "spr ing", + "ĠBer nie", + "ĠBern ie", + "User Defaults", + "Ġpe dest", + "Ġped est", + "Ap pearance", + "Appear ance", + "Ġ Wiki", + "ĠW iki", + "ĠWi ki", + "ĠWik i", + "ĠNOT ICE", + "Ġ ssh", + "Ġs sh", + "Ġss h", + "Ġdur ante", + "Ġ Zip", + "ĠZ ip", + "ĠZi p", + "ı r", + "ĠN ATO", + "ĠNAT O", + "ĠNA TO", + "Ġtw elve", + "Ġr oyal", + "Ġro yal", + "Ġroy al", + "ï ¸", + "Ġ merchant", + "Ġm erchant", + "Ġmer chant", + "Ġmerch ant", + "ĠF urniture", + "ĠFurn iture", + "' ]),Ċ", + "'] ),Ċ", + "']) ,Ċ", + "']), Ċ", + ", X", + "Ġ folders", + "Ġf olders", + "Ġfolder s", + "Ġfol ders", + "Ġfold ers", + "Ġ Gate", + "ĠG ate", + "ĠGa te", + "ĠGat e", + "ĉ func", + "ĉf unc", + "ĉfun c", + "p ick", + "pi ck", + "pic k", + "_ usuario", + "_us uario", + "ĠV erm", + "ĠVer m", + "ĠVe rm", + "m ention", + "ment ion", + "men tion", + "ur pose", + "Ġ alerts", + "Ġal erts", + "Ġalert s", + "Ġale rts", + "x ious", + "xi ous", + "_ sig", + "_s ig", + "_si g", + "Ġ Fu", + "ĠF u", + "Ġ (:", + "Ġ( :", + "Ġd umb", + "Ġdu mb", + "Ġdum b", + "åħ ³", + "Ġaccur ately", + "Ġaccurate ly", + "éĩ į", + "R B", + "- screen", + "-s creen", + "-sc reen", + "Ġ VER", + "ĠV ER", + "ĠVE R", + "j our", + "jo ur", + "Ġrom ance", + "Ġroman ce", + "Ġroma nce", + "uc ceed", + "ucc eed", + ". choice", + ".ch oice", + "Ġad ip", + "_ dims", + "_d ims", + "_dim s", + "_di ms", + "Serial izable", + "ãĤ ĭ", + ". job", + ".j ob", + "Ġ prog", + "Ġp rog", + "Ġpro g", + "Ġpr og", + "u char", + "uch ar", + "uc har", + "ucha r", + "Ġg ently", + "Ġgent ly", + "Ġ RSS", + "ĠR SS", + "ĠRS S", + "ict ured", + "icture d", + "_ENABLE D", + "ĉ label", + "ĉl abel", + "aw ks", + "awk s", + "Ġ Ensure", + "ĠEn sure", + "ĠEns ure", + "re member", + "rem ember", + "ìł ķ", + "Ġtrans mit", + "{ {$", + "{{ $", + ". Transaction", + ".Trans action", + "ur se", + "urs e", + "_ relative", + "_rel ative", + "Ġs ized", + "Ġsize d", + "Ġsi zed", + "Ġsiz ed", + "Ġ XX", + "ĠX X", + "ĠPr incess", + "ĠPrince ss", + "Ġ Larry", + "ĠL arry", + "ĠLar ry", + "Ġp ró", + "Ġpr ó", + "Ġ ÑģÑĤÑĢ", + "ĠÑģ ÑĤÑĢ", + "ĠÑģÑĤ ÑĢ", + "Ġs isters", + "Ġsi sters", + "Ġsister s", + "Ġsist ers", + "Ġsis ters", + "e struct", + "estr uct", + "Ġ checkpoint", + "Ġcheck point", + ": length", + ":len gth", + ":l ength", + "Ġ Carlos", + "ĠCar los", + "ĠCarl os", + "ĠCarlo s", + "/ icon", + "/i con", + "/ic on", + "_ TARGET", + "_T ARGET", + "T okens", + "Token s", + "Tok ens", + "Ġpat ience", + "Ġ Selected", + "ĠSe lected", + "ĠSelect ed", + "ĠSel ected", + "q ty", + "qt y", + ".show Message", + "Ġwild life", + "Ġ Props", + "ĠP rops", + "ĠPro ps", + "ĠPr ops", + "ĠProp s", + "b m", + "- arrow", + "-ar row", + "Ġ parcel", + "Ġpar cel", + "Ġparc el", + "Ġparce l", + "f irebase", + "fire base", + "ĠBen jamin", + "c esso", + "cess o", + "ces so", + ". tim", + ".t im", + "ĠG arc", + "ĠGar c", + "ĠGa rc", + ". any", + ".a ny", + ".an y", + "ĠHOW EVER", + "ĠK o", + "Ġgrab bed", + "_ frames", + "_f rames", + "_frame s", + "_fr ames", + "Ġobject AtIndex", + "ĠADV ISED", + "Ġsu bur", + "Ġsub ur", + "ĉ GL", + "ĉG L", + "Ġ })}Ċ", + "Ġ} )}Ċ", + "Ġ}) }Ċ", + "- length", + "-l ength", + "-le ngth", + "-len gth", + "ìĭ ľ", + "ĠPot ter", + "_ buff", + "_b uff", + "_buf f", + ". gui", + ".g ui", + "Ġ Encoding", + "ĠEn coding", + "ĠEnc oding", + "E lect", + "El ect", + "Ele ct", + "- message", + "-m essage", + "Ġ �", + "Ġ ÈĻi", + "Ġ ArgumentNullException", + "ĠArgument NullException", + "а ÑĨи", + "Ġmin imize", + "Ġminim ize", + "Ġrespond ing", + "$_ ['", + "Ġ Individual", + "ĠInd ividual", + "á c", + "Ġ INTER", + "ĠIN TER", + "ĠINT ER", + "Ġmast urb", + "Ġmastur b", + "Ġ Bin", + "ĠB in", + "ĠBi n", + "( '$", + "(' $", + "ëĵ ľ", + "Ġopen ly", + "Ġ ><", + "Ġ> <", + "Ġ unto", + "Ġun to", + "Ġunt o", + "olog ically", + "ological ly", + "ologic ally", + "Ġ Mul", + "ĠM ul", + "ĠMu l", + "VID IA", + "Ġs lim", + "Ġsl im", + "ĠCommission er", + "( on", + "(o n", + "Ġunder neath", + "/ db", + "/d b", + "v ote", + "vo te", + "( Message", + "(M essage", + "ĠP ope", + "ĠPop e", + "ĠPo pe", + "D efined", + "Def ined", + "Define d", + "Ġ swift", + "Ġsw ift", + "u rf", + "ur f", + "Ġadapt ed", + "Ġadap ted", + "S EL", + "SE L", + "Ġre venues", + "Ġrevenue s", + "Ġreven ues", + "Ġdi vine", + "Ġdiv ine", + "= y", + "G radient", + "Grad ient", + "_ act", + "_a ct", + "_ac t", + "Ġ/* !<", + "Ġ/*! <", + "Ġ polygon", + "Ġp olygon", + "Ġpoly gon", + "Ġ FDA", + "ĠF DA", + "ĠFD A", + "ĠC arr", + "ĠCar r", + "ĠCa rr", + "a tables", + "at ables", + "ata bles", + "atab les", + "atable s", + "( stdout", + "(std out", + "Ġref riger", + "Ġrefr iger", + "Ġco ordin", + "Ġcoord in", + "avor ites", + "avorite s", + "avo rites", + "ÑĪ Ð¸", + "Ġcompass ion", + "ĠPOSS IBILITY", + "- secondary", + "-second ary", + "ur acy", + "ura cy", + "Ġcom promise", + "Ġcomp romise", + "Ġcomprom ise", + "_ AV", + "_A V", + "_ os", + "_o s", + "Ġbe side", + "Ġbes ide", + "ĥ Ŀ", + "Ġ ln", + "Ġl n", + ". plugins", + ".pl ugins", + ".plugin s", + "Cap acity", + "a lah", + "al ah", + "ala h", + ". bin", + ".b in", + ".bi n", + "Ġ CRC", + "ĠC RC", + "ĠCR C", + "_ balance", + "_b alance", + "_bal ance", + "Ġflex Direction", + "Ġam bit", + "Ġamb it", + "Ġ nickname", + "Ġn ickname", + "Ġnick name", + "ĠFor ces", + "ĠForce s", + "C LE", + "CL E", + "Ġ Shell", + "ĠS hell", + "ĠSh ell", + "ĠShe ll", + "ĠShel l", + "Ġs ail", + "Ġsa il", + "Ġsai l", + "Ġ Writer", + "ĠW riter", + "ĠWrite r", + "ĠWr iter", + "Ġ Alice", + "ĠA lice", + "ĠAl ice", + "ĠAli ce", + "ĠAlic e", + "d w", + "ĠInd ians", + "ĠIndia ns", + "ĠIndian s", + "ĠIndi ans", + "ĠMar shall", + "ĠMars hall", + "ĠMarshal l", + "ĠMarsh all", + "_ SRC", + "_S RC", + "_SR C", + "Ġ normalized", + "Ġnormal ized", + "Ġnormalize d", + "ĠJ ag", + "ĠJa g", + "ãĤ Ĵ", + "ze it", + "r pc", + "rp c", + "ÃŃ c", + ". inline", + ".in line", + "Ġtr avers", + "Ġtra vers", + "Ġtrav ers", + "_ numeric", + "_n umeric", + "_num eric", + "_numer ic", + "Ġ utilities", + "Ġutil ities", + "Ġut ilities", + "Ġe vac", + "Ġev ac", + "IN PUT", + "ĉ register", + "ĉreg ister", + "M X", + "ĠCamp bell", + "Ġ datasets", + "Ġd atasets", + "Ġdata sets", + "Ġdataset s", + "Ġdatas ets", + "Ġdem anded", + "Ġdemand ed", + "Ġdemande d", + "Ġinitial State", + "g an", + "ga n", + "Ġ ei", + "Ġe i", + "Un expected", + "- web", + "-w eb", + "-we b", + "t rait", + "tr ait", + "tra it", + ", Y", + "Ġ Todd", + "ĠT odd", + "ĠTo dd", + "ĠTod d", + "Ġs keleton", + "Ġske leton", + "Ġ optimize", + "Ġopt imize", + "Ġoptim ize", + "ç ¬¬", + "ç¬ ¬", + "Ġ Upon", + "ĠU pon", + "ĠUp on", + "ĠSt Object", + "Ġap lic", + "Ġapl ic", + ". ' P", + "v ron", + "vr on", + "vro n", + ". UN", + ".U N", + "Ġp ainter", + "Ġpaint er", + "Ġpain ter", + "Ġpa inter", + "izar re", + "Ġ lav", + "Ġl av", + "Ġla v", + "Ġ pom", + "Ġp om", + "Ġpo m", + "p reg", + "pr eg", + "pre g", + "= function", + "=f unction", + "( serial", + "(s erial", + "(se rial", + "if ica", + "ific a", + "ifi ca", + "u ming", + "um ing", + "umin g", + "umi ng", + "åľ °", + "ãģ Ĥ", + "- op", + "-o p", + "U CH", + "UC H", + "ĠH end", + "ĠHe nd", + "ĠHen d", + ". propTypes", + ".prop Types", + "Ġ yo", + "Ġy o", + "Ġr outines", + "Ġrout ines", + "Ġroutine s", + "Ġc aring", + "Ġcar ing", + "Ġca ring", + "S em", + "Se m", + "Ġres erves", + "Ġreserve s", + "Ġreserv es", + "Ġprior ities", + "Ġpriorit ies", + "red its", + "redit s", + "redi ts", + "I STR", + "IS TR", + "IST R", + "Content Type", + "ĠS chw", + "ĠSc hw", + "ĠSch w", + "/ media", + "/m edia", + "/me dia", + "Ġ estr", + "Ġe str", + "Ġes tr", + "Ġest r", + "Ġclim bing", + "Ġclimb ing", + "- week", + "-we ek", + "cher che", + "s ensor", + "To Array", + "ĠMont real", + "Ġclo uds", + "Ġcloud s", + "ĠInject able", + "ĠR ice", + "ĠRic e", + "ĠRi ce", + "Ġpropag anda", + "_ provider", + "_pro vider", + "_prov ider", + "Ġin door", + "Ġind oor", + "Ġindo or", + "Ġin aug", + "Ġdipl om", + "Ġdip lom", + "Ġm essaging", + "Ġmess aging", + "_ mut", + "_m ut", + "_mu t", + "å ¦Ĥ", + "å¦ Ĥ", + "Ġ kw", + "Ġk w", + "O NS", + "ON S", + "a rians", + "ar ians", + "ari ans", + "arian s", + "aria ns", + "R PC", + "RP C", + ") ]čĊ", + ")] čĊ", + "- ray", + "-r ay", + "-ra y", + "ĠS or", + "ĠSo r", + "m all", + "ma ll", + "mal l", + "Ġmarket place", + "Ġ vtk", + "Ġv tk", + "Ġvt k", + "M a", + "o gan", + "og an", + "oga n", + "i gi", + "ig i", + "Ġs ponsored", + "Ġspons ored", + "Ġsponsor ed", + "Ġ Dani", + "ĠD ani", + "ĠDan i", + "ĠDa ni", + ".S EVER", + ".SE VER", + "> '.$", + ">' .$", + ">'. $", + "m ultipart", + "multi part", + "multip art", + "ĠW ol", + "ĠWo l", + "Ġ tableName", + "Ġtable Name", + "Ġ Username", + "ĠUser name", + "Back groundColor", + "Background Color", + "Ġf right", + "Ġfr ight", + "Ġfri ght", + "_ EMAIL", + "_E MAIL", + "_EM AIL", + "Sept ember", + "Sep tember", + "_ vals", + "_v als", + "_val s", + "_va ls", + "op ia", + "opi a", + "Ġsp otted", + "Ġspot ted", + "- Ch", + "-C h", + "Ġ dataSource", + "Ġdata Source", + "/ \"Ċ", + "/\" Ċ", + "е кÑĤ", + "ек ÑĤ", + "Ġ RequestMethod", + "ĠRequest Method", + "Ġ Replace", + "ĠRe place", + "ĠRep lace", + "- do", + "-d o", + "a hn", + "ah n", + "ĠPh D", + "] .ĊĊ", + "]. ĊĊ", + "].Ċ Ċ", + "N ON", + "NO N", + "g ement", + "ge ment", + "gem ent", + "geme nt", + "Ġ Thr", + "ĠT hr", + "ĠTh r", + "Ġquiet ly", + "Ġtor ture", + "Ġtort ure", + "Ġte as", + "Ġtea s", + "Ġ CY", + "ĠC Y", + "Ġ atr", + "Ġa tr", + "Ġat r", + "de velopment", + "dev elopment", + "develop ment", + "- detail", + "-d etail", + "-de tail", + "-det ail", + "Ġl ighter", + "Ġlight er", + "Ġarg uing", + "Ġdes erves", + "Ġdeserve s", + "Ġdeser ves", + "Ġcur riculum", + "_ CONTEXT", + "_CON TEXT", + "_CONT EXT", + "ÅĤ y", + "H ITE", + "HI TE", + "ĉ ID", + "ĉI D", + "/ uploads", + "/upload s", + "/up loads", + "Ġt its", + "Ġtit s", + "Ġti ts", + "r eo", + "re o", + "_ drop", + "_d rop", + "_dr op", + ". UTF", + ".U TF", + "Ġ pickup", + "Ġpick up", + "Ġpic kup", + "Ġgro cery", + "Ġ Pure", + "ĠP ure", + "ĠPur e", + "ĠPu re", + "Ġeas iest", + "P hil", + "Ph il", + "Phi l", + ". feature", + ".f eature", + ".fe ature", + "( \"*", + "(\" *", + "Ġinvest or", + "Ġinve stor", + "t ok", + "to k", + "Ġ jar", + "Ġj ar", + "Ġja r", + "L os", + "Lo s", + "âĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶ", + ". queue", + ".q ueue", + "- speed", + "-s peed", + "-sp eed", + "-spe ed", + "M al", + "Ma l", + "um blr", + "umb lr", + "Ġ CONST", + "ĠCON ST", + "ĠCO NST", + "ĠCONS T", + "Ġ HRESULT", + "ĠH RESULT", + "ĠD ance", + "ĠDan ce", + "ĠDa nce", + "( filePath", + "(file Path", + "Ġattribute d", + "Ġattrib uted", + "ॠį", + "ĠB und", + "ĠBu nd", + "ĠBun d", + "c oins", + "co ins", + "coin s", + "Ġs ão", + "Ġ pir", + "Ġp ir", + "Ġpi r", + "person al", + "pers onal", + "persona l", + "Ġpr elim", + "Ġpre lim", + "Ġpro pose", + "Ġprop ose", + "Ġpropos e", + "Ġ TL", + "ĠT L", + "] ])", + "]] )", + "Ġ Subscription", + "ĠSub scription", + "ĠK re", + "ĠKr e", + ", len", + ",l en", + ". FirstOrDefault", + ".First OrDefault", + ") --", + ")- -", + "_ products", + "_product s", + ".Get Bytes", + "S hip", + "Sh ip", + "Ġ encrypt", + "Ġen crypt", + "Ġenc rypt", + "Ġ SG", + "ĠS G", + "ĠM yst", + "ĠMy st", + "h ir", + "hi r", + "Ġ iterate", + "Ġit erate", + "Ġiter ate", + "Ġint end", + "Ġinte nd", + ".mock ito", + "Ġch apters", + "Ġchapter s", + "Ġchap ters", + "( angle", + "(a ngle", + "(an gle", + "(ang le", + "ĠV lad", + "è® ¾", + "' .ĊĊ", + "'. ĊĊ", + "'.Ċ Ċ", + "Response Body", + "ĠA bd", + "ĠAb d", + "de al", + "dea l", + "Ġbar riers", + "Ġbarrier s", + "Ġbarr iers", + "- outline", + "-out line", + "b ill", + "bi ll", + "bil l", + "ĠF alls", + "ĠFall s", + "ĠFal ls", + "_ second", + "_se cond", + "_sec ond", + ". include", + ".in clude", + ".inc lude", + ". ceil", + ".c eil", + ".ce il", + "Ġ occupation", + "Ġoccup ation", + "ph ony", + "phon y", + ".move To", + "Ġ Jennifer", + "ĠJ ennifer", + "ĠJenn ifer", + "A STER", + "AS TER", + "AST ER", + "ASTE R", + "; \"><", + ";\" ><", + ";\"> <", + "Ġ Enabled", + "ĠEn abled", + "ĠEnable d", + "Ġ terminate", + "Ġter minate", + "Ġterm inate", + "Ġtermin ate", + "Ġ Io", + "ĠI o", + "l ations", + "lation s", + "lat ions", + "ĠTHE ORY", + "Ġear liest", + "Ġ rack", + "Ġr ack", + "Ġrac k", + "Ġra ck", + "Ġ Scar", + "ĠS car", + "ĠSc ar", + "sh ake", + "sha ke", + "c hip", + "ch ip", + "chi p", + "Ġ uv", + "Ġu v", + "Ġall iance", + "п иÑģ", + "пи Ñģ", + "ĠGOOD S", + "z ione", + "zi one", + "zion e", + "Ġ VI", + "ĠV I", + "Ġ {-", + "Ġ{ -", + "Ġfil tering", + "Ġfilter ing", + "Ġfilt ering", + "Ġmis con", + "Ġmisc on", + ".Dock Style", + "Ġb ush", + "Ġbu sh", + "Ġbus h", + "Ġj unk", + "Ġju nk", + "Ġjun k", + "æ Į", + "Ġ QUE", + "ĠQ UE", + "ĠQU E", + "Ġ hooks", + "Ġh ooks", + "Ġhook s", + "Ġho oks", + "Ġf irmware", + "Ġfirm ware", + "Ġ middleware", + "Ġm iddleware", + "Ġmiddle ware", + "d ic", + "di c", + "ĠOak land", + "Ġarr ives", + "Ġarrive s", + "Ġarriv es", + "P ayload", + "Pay load", + "p ixel", + "pix el", + "] |", + "Ġ startDate", + "Ġstart Date", + ". PRO", + ".P RO", + ".PR O", + "_ audio", + "_a udio", + "Ġmid field", + "igid body", + "ĠSw iss", + "Ġ Clip", + "ĠC lip", + "ĠCl ip", + "ĠCli p", + "Ġ Dump", + "ĠD ump", + "ĠDu mp", + "ĠDum p", + "Ġ TextBox", + "ĠText Box", + "Ġ geh", + "Ġg eh", + "Ġge h", + "y ield", + "yi eld", + "o ds", + "od s", + "Ġrefer endum", + "Back end", + "Ġ Cream", + "ĠC ream", + "ĠCr eam", + "ĠCre am", + "Ġd ominated", + "Ġdo minated", + "Ġdom inated", + "Ġdomin ated", + "Ġdominate d", + "Ġdomina ted", + "Ġ Archive", + "ĠA rchive", + "ĠArch ive", + "ĠArc hive", + "Ġr iders", + "Ġrid ers", + "Ġride rs", + "Ġri ders", + "Ġrider s", + ".prepare Statement", + "Ġqu ando", + "Ġquand o", + "Ġqua ndo", + "Ġquan do", + "Ġ chef", + "Ġch ef", + "Ġche f", + "w iki", + "wi ki", + "wik i", + "i nel", + "in el", + "ine l", + "am pling", + "amp ling", + "(\" \\\\", + "(\"\\ \\", + "Ġs ag", + "Ġsa g", + "_ proxy", + "_pro xy", + "_pr oxy", + "ãģ ķ", + "p do", + "pd o", + ". getElementsByTagName", + ".get ElementsByTagName", + ".getElementsBy TagName", + "Ġdemon stration", + "Ġdemonstr ation", + "Ġ NPC", + "ĠN PC", + "ĠNP C", + "Ġ archivo", + "Ġarch ivo", + "en dance", + "end ance", + "enda nce", + "Ġefficient ly", + "( actual", + "(ac tual", + "(act ual", + ". tableView", + ".t ableView", + ".table View", + "Ġm ush", + "Ġmus h", + "Ġmu sh", + "Ġb ears", + "Ġbe ars", + "Ġbear s", + "_ threads", + "_th reads", + "_thread s", + "j as", + "ja s", + "ah un", + "ahu n", + "Ġne ural", + "Ġneu ral", + "Ġneur al", + "Ġdesign ing", + "ĠG DP", + "ĠGD P", + "Ġlif ted", + "Ġlift ed", + "çĽ ®", + "Ġ Joint", + "ĠJ oint", + "ĠJo int", + "ĠJoin t", + "ĠJoi nt", + "Ġ Include", + "ĠIn clude", + "ĠInc lude", + "ĠG iants", + "ĠGi ants", + "ĠGiant s", + "ĠGian ts", + "ĠGia nts", + "Ġwithdraw al", + "Ġ Rent", + "ĠR ent", + "ĠRe nt", + "ĠRen t", + "n ative", + "nat ive", + "Ġ Seek", + "ĠSe ek", + "ĠSee k", + "g ression", + "gr ession", + "gress ion", + "_ CPU", + "_C PU", + "_CP U", + "\\ S", + "Ġ Shield", + "ĠSh ield", + "ĠShi eld", + "Ġs olic", + "Ġso lic", + "Ġsol ic", + "Ġ boom", + "Ġb oom", + "Ġbo om", + "Ġboo m", + "yect o", + "Ġmanufact ure", + "Ġ âĢĭ", + "ĠâĢ ĭ", + "Ġ bbox", + "Ġb box", + "Ġbb ox", + "Ġearth qu", + "oll ectors", + "ollect ors", + "olle ctors", + ":@\" %", + ":@ \"%", + "Ġ loops", + "Ġl oops", + "Ġlo ops", + "Ġloop s", + "J e", + "al king", + "alk ing", + "Ġ Whats", + "ĠWh ats", + "ĠWhat s", + "ĠBo ys", + "ĠBoy s", + ". book", + ".b ook", + ".bo ok", + "AR GE", + "ARG E", + "_ pixel", + "_p ixel", + "_pix el", + "Ġsus pects", + "Ġsusp ects", + "Ġsuspect s", + "Î ¹", + "u sp", + "us p", + "Ġ BMW", + "ĠB MW", + "ĠBM W", + "ie ces", + "iece s", + "iec es", + "( person", + "(p erson", + "(per son", + "å¼ Ģ", + "é »", + "ĠP odcast", + "ĠPod cast", + "Ġ bou", + "Ġb ou", + "Ġbo u", + "( Item", + "(I tem", + "(It em", + "à »", + "( Input", + "(In put", + "Http Get", + "Ġ burg", + "Ġb urg", + "Ġbu rg", + "Ġbur g", + ") ^", + "BO ARD", + "* /,", + "*/ ,", + "Ġ gulp", + "Ġg ulp", + "Ġgu lp", + "Ġgul p", + "ĠB enn", + "ĠBe nn", + "ĠBen n", + "Ġde cks", + "Ġdec ks", + "Ġdeck s", + ". statusCode", + ".status Code", + "Ġ acute", + "Ġac ute", + "Ġh ug", + "Ġhu g", + "u gu", + "ug u", + "Ġ pled", + "Ġp led", + "Ġpl ed", + "Ġple d", + ", \"%", + ",\" %", + "h ape", + "ha pe", + "hap e", + "Ġз ап", + "Ġза п", + "ĠM aine", + "ĠMain e", + "ĠMa ine", + "ĠMai ne", + ". real", + ".re al", + "Ġd alam", + "Ġda lam", + "Ġdal am", + "Ġ Minor", + "ĠMin or", + "ĠMi nor", + ". Float", + ".F loat", + "d isp", + "dis p", + "di sp", + "Ġ tl", + "Ġt l", + "Ġen count", + "Ġenc ount", + "= >$", + "=> $", + "Ġ fg", + "Ġf g", + "t ees", + "te es", + "tee s", + "ĠRe comm", + "ĠRec omm", + "ĠReco mm", + "ä l", + "Ġ chemistry", + "Ġchem istry", + "B locks", + "Block s", + "Bl ocks", + "Bloc ks", + "Blo cks", + "O ID", + "OI D", + "Ġf orex", + "Ġfor ex", + "Ġfore x", + "Ġfo rex", + "Ġ Append", + "ĠApp end", + "ĠAp pend", + "ĠAppe nd", + "Ġ {*", + "Ġ{ *", + "Ġ Supply", + "ĠS upply", + "ĠSup ply", + "CG Float", + "( bl", + "(b l", + "Ġ ate", + "Ġa te", + "Ġat e", + "ad ora", + "ado ra", + "ador a", + "Ġg ust", + "Ġgu st", + "Ass oci", + "Assoc i", + "> .Ċ", + ">. Ċ", + "F ETCH", + ". serial", + ".s erial", + ".se rial", + ".ser ial", + "widget s", + "wid gets", + "ard less", + "i efs", + "ie fs", + "ief s", + "_ FULL", + "_F ULL", + "ern etes", + "ernet es", + "erne tes", + "Ġ Pred", + "ĠP red", + "ĠPr ed", + "ĠPre d", + "Ø Ń", + "äº ĭ", + "ub ernetes", + "ubern etes", + "Ġ Laura", + "ĠL aura", + "ĠLa ura", + "ĠLaur a", + "ĠLau ra", + "Ġl abeled", + "Ġlabel ed", + "Ġlab eled", + "High light", + "Ġanno ying", + "Ġannoy ing", + "/ update", + "/up date", + "( description", + "(d escription", + "(de scription", + "(des cription", + "Ġint imid", + "Ġintim id", + "$ c", + "\" )))Ċ", + "\") ))Ċ", + "\")) )Ċ", + "\"))) Ċ", + ". AP", + ".A P", + "Ġ[ ]*", + "Ġ[] *", + "Ġ EXIT", + "ĠEX IT", + ". Host", + ".H ost", + "Ġ OPEN", + "ĠOP EN", + ". sendMessage", + ".send Message", + "_ camera", + "_c amera", + "_cam era", + "_ tile", + "_t ile", + "_ti le", + "Ġth erm", + "Ġthe rm", + "Ġther m", + "onom ous", + "Ġdis adv", + "Ġn aar", + "Ġna ar", + "index Of", + "Ġ PP", + "ĠP P", + ". protocol", + ".prot ocol", + ".proto col", + "A FE", + "AF E", + "Ġ textures", + "Ġtext ures", + "Ġtexture s", + "Ġtex tures", + "Ġtextu res", + "######## ########################################", + "################ ################################", + "################################ ################", + "######################################## ########", + "######################## ########################", + "um bai", + "umb ai", + "umba i", + ". stats", + ".st ats", + ".stat s", + "Ġ GE", + "ĠG E", + "Ġ ie", + "Ġi e", + "Ġ STD", + "ĠS TD", + "ĠST D", + "ĠM ann", + "ĠMan n", + "ĠMa nn", + ". reflect", + ".ref lect", + "K B", + "Ġd ive", + "Ġdi ve", + "Ġdiv e", + ". wav", + ".w av", + "/* ----------------------------------------------------------------", + "/*------------------------------------------------ ----------------", + "/ settings", + "/s ettings", + "/set tings", + ".l ifecycle", + ".life cycle", + "Ġda ughters", + "Ġdaughter s", + "o rus", + "or us", + "oru s", + "u ber", + "ub er", + "ube r", + "N ING", + "NI NG", + "s tri", + "st ri", + "str i", + "Ġ Tip", + "ĠT ip", + "ĠTi p", + "Ġ zn", + "Ġz n", + "Ġsw itched", + "Ġswitch ed", + "i net", + "in et", + "ine t", + "uff y", + "uf fy", + "ĠTransport ation", + "( conf", + "(con f", + "(co nf", + "f rica", + "fr ica", + "Ġ XL", + "ĠX L", + "Ġ Lead", + "ĠL ead", + "ĠLe ad", + "_ percent", + "_per cent", + "_perc ent", + "< Map", + " __", + "->_ _", + "per missions", + "perm issions", + "permission s", + "ĠD etermine", + "ĠDetermin e", + ". Man", + ".M an", + ".Ma n", + "Ġadv ances", + "Ġadvance s", + ". InputStream", + ".Input Stream", + "Ġstrong est", + "Ġstron gest", + "Ġe Bay", + "Ġ# -", + "Ġ dirname", + "Ġdir name", + "Ġ SMS", + "ĠS MS", + "ĠSM S", + "Ġmed ications", + "Ġmedic ations", + "Ġmedication s", + "Ġam ended", + "Ġamen ded", + "Ġamend ed", + "Ġchurch es", + "ĠIm perial", + "ĠImp erial", + "ĠImper ial", + "$ row", + "$r ow", + "ĠMad ison", + "Ġ Insp", + "ĠIn sp", + "ĠIns p", + "Ġaff air", + "Ġaf fair", + "Ġpsych ology", + "Ġpsycho logy", + "v h", + "Ġ severity", + "Ġse verity", + "Ġsever ity", + "âĢ IJ", + "Ġst rips", + "Ġstr ips", + "Ġstri ps", + "Ġstrip s", + "A H", + "vert ising", + "vertis ing", + "Ġc onse", + "Ġcon se", + "Ġcons e", + "IM AGE", + "IMA GE", + "Ġ Stats", + "ĠSt ats", + "ĠStat s", + "ĠSta ts", + "ĉ sc", + "ĉs c", + ". Cursor", + ".C ursor", + "Ġ freeze", + "Ġf reeze", + "Ġfree ze", + "s son", + "ss on", + "( xml", + "(x ml", + "Ġ Susan", + "ĠS usan", + "ĠSus an", + "ĠSu san", + ". tile", + ".t ile", + "e ded", + "ed ed", + "ede d", + "ĠĠ ĠĠĉĉĉ", + "ĠĠĠĠ ĉĉĉ", + "ĠĠĠ Ġĉĉĉ", + "ĠĠĠĠĉ ĉĉ", + "ĠĠĠĠĉĉ ĉ", + "u elle", + "ue lle", + "uel le", + "uell e", + "ĠMitch ell", + "b ased", + "base d", + "ba sed", + "bas ed", + "Oper and", + "Opera nd", + "½ æķ°", + "Ġ FF", + "ĠF F", + "ĉ strcpy", + "ĉstr cpy", + "ou nces", + "oun ces", + "ounc es", + "ounce s", + "il do", + "ild o", + ".execute Query", + "Ġappro aching", + "Ġapproach ing", + "Ġ Seven", + "ĠS even", + "ĠSe ven", + "ĠSev en", + "Ġ nuts", + "Ġn uts", + "Ġnut s", + "Ġnu ts", + "Ġ ric", + "Ġr ic", + "Ġri c", + "ass ignment", + "assign ment", + "Ġ calculator", + "Ġcal culator", + "Ġcalcul ator", + "Ġcalc ulator", + "ĠMur phy", + "ĠB ou", + "ĠBo u", + "í Ħ", + "Ġ butt", + "Ġb utt", + "Ġbut t", + "Ġbu tt", + "Ġ ticks", + "Ġt icks", + "Ġti cks", + "Ġtick s", + "Ġtic ks", + "Project s", + "Proj ects", + "i lib", + "il ib", + "ili b", + ".text Color", + "m ov", + "mo v", + "_ logo", + "_l ogo", + "_log o", + "_lo go", + "( template", + "(t emplate", + "(temp late", + "Ġ INIT", + "ĠIN IT", + "Ġ imageView", + "Ġimage View", + "s criptions", + "script ions", + "scri ptions", + "scription s", + "OR ITY", + "Con sumer", + "Cons umer", + "Consum er", + "Ġun precedented", + "Ġtour ist", + "Ġtou rist", + "Ġ bron", + "Ġb ron", + "Ġbr on", + "Ġbro n", + "Ġcon tractor", + "Ġcontract or", + "Ġcontr actor", + "Ġcontra ctor", + "Ġ licence", + "Ġli cence", + "Ġlic ence", + "Ġ Nam", + "ĠN am", + "ĠNa m", + "æ ¯", + "( transform", + "(trans form", + "_ ATT", + "_A TT", + "_AT T", + "P ref", + "Pr ef", + "Pre f", + "Ġ Gam", + "ĠG am", + "ĠGa m", + "Ġvess els", + "Ġvessel s", + "Ġh av", + "Ġha v", + "L ater", + "La ter", + "Lat er", + "Late r", + ". ToLower", + ".To Lower", + "Ġ urls", + "Ġurl s", + "Ġur ls", + "Ġbreak down", + "Ġpen alties", + "Ġpenal ties", + "Ġf oster", + "Ġfo ster", + "Ġfost er", + "Ġfos ter", + "Ġ UE", + "ĠU E", + "Ġc lue", + "Ġcl ue", + "c omed", + "com ed", + "co med", + "come d", + "åIJį ç§°", + "- main", + "-m ain", + "Ġ pts", + "Ġp ts", + "Ġpt s", + "Ġco unted", + "Ġcount ed", + "Ġcoun ted", + "i cts", + "ic ts", + "ict s", + "/ post", + "/p ost", + "Ġ getattr", + "Ġget attr", + "Ġ ping", + "Ġp ing", + "Ġpi ng", + "Ġpin g", + "AN CEL", + "ANCE L", + "ANC EL", + "Ġ pec", + "Ġp ec", + "Ġpe c", + "Ñħ од", + "Ñħо д", + "an tom", + "ant om", + "anto m", + "Ġ Blueprint", + "ĠBlue print", + "ĠEvent Emitter", + "Ġ lä", + "Ġl ä", + "æ ²", + "Ġst raw", + "Ġstr aw", + "Ġstra w", + "( comp", + "(c omp", + "(com p", + "(co mp", + "' une", + "'un e", + "'u ne", + "> N", + "- client", + "-c lient", + "-cl ient", + "-cli ent", + "es Module", + "- base", + "-b ase", + "Ġret reat", + "Ġretr eat", + "_ simple", + "_s imple", + "_sim ple", + "ĉ ĉĉĉĉĉĠ", + "ĉĉ ĉĉĉĉĠ", + "ĉĉĉĉ ĉĉĠ", + "ĉĉĉ ĉĉĉĠ", + "ĉĉĉĉĉ ĉĠ", + "ĉĉĉĉĉĉ Ġ", + "f ee", + "fe e", + "' )čĊčĊ", + "') čĊčĊ", + "')čĊ čĊ", + "Control Item", + "Ġsub scribers", + "Ġsubscri bers", + "Ġsubscribe rs", + "Ġsubscriber s", + "p lease", + "pl ease", + "ple ase", + "Ġ Eff", + "ĠE ff", + "ĠEf f", + "Ġp ound", + "Ġpo und", + "Ġpou nd", + "Ġ Bytes", + "ĠBy tes", + "ĠByte s", + "ĠT ea", + "ĠTe a", + "_ activity", + "_act ivity", + "_activ ity", + "Ġmax im", + "Ġmaxi m", + "Ġ opcode", + "Ġop code", + "Ġopc ode", + "B SD", + "BS D", + ". constant", + ".con stant", + ".const ant", + ".cons tant", + "; }", + "omb res", + "ombre s", + "Ġcare ers", + "Ġcareer s", + ") .ĊĊĊĊ", + "). ĊĊĊĊ", + ").ĊĊ ĊĊ", + ").Ċ ĊĊĊ", + ").ĊĊĊ Ċ", + "Ġsp reading", + "Ġspread ing", + "Ġspre ading", + "- expanded", + "-exp anded", + "-expand ed", + "Ġ Ord", + "ĠO rd", + "ĠOr d", + "am arin", + "ama rin", + "amar in", + "Ġmob ility", + "Ġmobil ity", + "Un fortunately", + "a kk", + "ak k", + "N L", + "_ redirect", + "_re direct", + "_red irect", + "Ġ PG", + "ĠP G", + "Ġ Sensor", + "ĠS ensor", + "ĠSens or", + "b ol", + "bo l", + "t ap", + "ta p", + "_ MEMORY", + "_MEM ORY", + "Ġ UIAlert", + "ĠUI Alert", + "pl itude", + "plit ude", + "We bsite", + "Web site", + "Ġ Logo", + "ĠL ogo", + "ĠLog o", + "ĠLo go", + "l ove", + "lo ve", + "lov e", + "[ ind", + "[i nd", + "[in d", + "Ġalto gether", + "Ġwonder ed", + "Ġ esper", + "Ġes per", + "Ġesp er", + "ĠLib eral", + "ĠLiber al", + "Ġ oss", + "Ġo ss", + "Ġos s", + "Ġe lit", + "Ġel it", + "Ġst iff", + "Ġstif f", + "od ox", + "odo x", + "_ mentions", + "_m entions", + "_ment ions", + "ĠDou glas", + "ĠDoug las", + "_ pid", + "_p id", + "_pi d", + "Ġ CK", + "ĠC K", + "ĠinitWith Frame", + ". blog", + ".b log", + ".bl og", + "p kg", + "pk g", + "ang hai", + "QUI RED", + "QUIRE D", + "u u", + "Ġ mkdir", + "Ġm kdir", + "Ġmk dir", + "AT AL", + "ATA L", + "Ġu nh", + "Ġun h", + "i nces", + "in ces", + "ince s", + "inc es", + "s th", + "st h", + "Ġhypo thesis", + "Ġhypoth esis", + "Ġc ata", + "Ġca ta", + "Ġcat a", + "Ġ TB", + "ĠT B", + "Ġ Clar", + "ĠC lar", + "ĠCl ar", + "ĠCla r", + "Ġpre decess", + "Ġpred ecess", + "Ġsit uated", + "Ġsitu ated", + "- world", + "-w orld", + ") )/", + ")) /", + "Ġhead lines", + "Ġheadline s", + ". stat", + ".s tat", + ".st at", + "Ġout break", + "s path", + "sp ath", + "spa th", + "_ FLAGS", + "_FLAG S", + "ĠServlet Exception", + "S un", + "Su n", + "F ROM", + "FR OM", + "Ġ Dir", + "ĠD ir", + "ĠDi r", + "ãĥ» ãĥ»ãĥ»", + "ãĥ»ãĥ» ãĥ»", + "_ coord", + "_c oord", + "_co ord", + "ĠOp tim", + "ĠOpt im", + "M onitor", + "Mon itor", + ". bit", + ".b it", + ".bi t", + "X XX", + "XX X", + "Ġto das", + "Ġtod as", + "Ġtoda s", + "f eld", + "fe ld", + "fel d", + "ÑĢ Ð¸", + "i mir", + "im ir", + "imi r", + "Ġpolit ically", + "Ġpolitical ly", + "Ġpolitic ally", + "Ġm olecular", + "Ġmolec ular", + "Ġmole cular", + "Ġtr aded", + "Ġtrad ed", + "Ġtrade d", + "Ġtra ded", + "Ġ {{$", + "Ġ{ {$", + "Ġ{{ $", + "ĠSw edish", + "ĠSwe dish", + "Ġ'@ /", + "_ REAL", + "_RE AL", + "Ġ warehouse", + "Ġw arehouse", + "Ġware house", + "t oday", + "to day", + "tod ay", + ", L", + "o rp", + "or p", + "< section", + " false", + ">f alse", + "Ġ spa", + "Ġs pa", + "Ġsp a", + "Ġ Near", + "ĠN ear", + "ĠNe ar", + "ì ķ", + "Ġint rig", + "Ġintr ig", + "_ members", + "_m embers", + "_mem bers", + "_member s", + "w ave", + "wa ve", + "wav e", + "Ġanal ysts", + "Ġanaly sts", + "Ġanalyst s", + "Ġanalys ts", + "_ OS", + "_O S", + "e din", + "ed in", + "edi n", + "Ġ Fri", + "ĠF ri", + "ĠFr i", + "Ġret rieved", + "Ġretrie ved", + "Ġretrieve d", + "Ġretr ieved", + "Reg ular", + "_ obs", + "_o bs", + "_ob s", + "EX PORT", + "EXP ORT", + "' )}}\"", + "') }}\"", + "')}} \"", + "')} }\"", + "\" class", + "\"c lass", + "__ ((", + "__( (", + "b ucket", + "bu cket", + "Ġ stro", + "Ġs tro", + "Ġst ro", + "Ġstr o", + "Ġ Patch", + "ĠP atch", + "ĠPat ch", + "y stick", + "yst ick", + "ys tick", + "ful ness", + "a pos", + "ap os", + "apo s", + "D a", + "ĉ ĉĉĉĉĠĠĠ", + "ĉĉ ĉĉĉĠĠĠ", + "ĉĉĉĉ ĉĠĠĠ", + "ĉĉĉ ĉĉĠĠĠ", + "ĉĉĉĉĉ ĠĠĠ", + "ĉĉĉĉĉĠ ĠĠ", + "ĉĉĉĉĉĠĠ Ġ", + "Ġen rich", + "Ġenr ich", + "un ordered", + "h ole", + "ho le", + "hol e", + "C ong", + "Con g", + "Co ng", + "< Product", + "ĠC urt", + "ĠCur t", + "ĠCu rt", + "( the", + "(t he", + "(th e", + "_ lower", + "_l ower", + "_lo wer", + "_low er", + "Ġavoid ing", + "Ġ buzz", + "Ġb uzz", + "Ġbu zz", + "Ġbuz z", + "Ġv iable", + "Ġvi able", + "Ġvia ble", + "u ba", + "ub a", + "- is", + "-i s", + "a rel", + "ar el", + "are l", + "Ġ acted", + "Ġact ed", + "Ġac ted", + "- details", + "-d etails", + "-de tails", + "-detail s", + "-det ails", + "ภĩ", + "Ġ Theory", + "ĠThe ory", + "ĠTheo ry", + "ĠP un", + "ĠPu n", + "Ġ Anonymous", + "ĠAn onymous", + ".. .\"Ċ", + "... \"Ċ", + "...\" Ċ", + "è res", + "ère s", + "åı ¯", + "Ġ Vision", + "ĠV ision", + "ĠVis ion", + "_ sem", + "_s em", + "_se m", + "a sha", + "as ha", + "ash a", + "Ġcelebr ity", + "Ġ endDate", + "Ġend Date", + "Ġ populate", + "Ġpop ulate", + "Ġpopul ate", + "Ġc uis", + "Ġcu is", + "Ġcui s", + "q uant", + "qu ant", + "qua nt", + "quan t", + "f loor", + "fl oor", + "flo or", + "Ġglobal ly", + "Ġglob ally", + "Ġc ruise", + "Ġcru ise", + "Ġcruis e", + "ĠStan ley", + "Ġb ikes", + "Ġbi kes", + "Ġbike s", + "Ġbik es", + ". getConnection", + ".get Connection", + "Ġpoor ly", + "_ other", + "_o ther", + "_ot her", + "am ping", + "amp ing", + ". \");ĊĊ", + ".\" );ĊĊ", + ".\");Ċ Ċ", + ".\") ;ĊĊ", + ".\"); ĊĊ", + "o di", + "od i", + "_ ADMIN", + "_A DMIN", + "_AD MIN", + ". colors", + ".color s", + ".col ors", + "ĠG aming", + "ĠGa ming", + "ĠGam ing", + "> ';ĊĊ", + ">' ;ĊĊ", + ">';Ċ Ċ", + ">'; ĊĊ", + "STR UCT", + "STRU CT", + "Q R", + "I Ds", + "ID s", + "( arguments", + "(arg uments", + "(argument s", + "_ aux", + "_a ux", + "( Event", + "(E vent", + "_ PRIVATE", + "_PR IVATE", + "_PRIV ATE", + "ĠT rek", + "ĠTr ek", + "ĠTre k", + "Ġ downloads", + "Ġdown loads", + "Ġdownload s", + "m utable", + "mut able", + "mu table", + "_ STRUCT", + "_STR UCT", + "( wx", + "(w x", + "Ġ domains", + "Ġdom ains", + "Ġdomain s", + "Ġdoma ins", + "js px", + "jsp x", + "ĠVi agra", + "ĠVia gra", + "Command s", + "Comm ands", + "J s", + ". cfg", + ".c fg", + ".cf g", + "Content Pane", + "Ġ EditText", + "ĠEdit Text", + "à¥į à¤", + "At tach", + "Att ach", + "Ġ ARM", + "ĠA RM", + "ĠAR M", + "pos itive", + "posit ive", + "Ġ Generated", + "ĠG enerated", + "ĠGener ated", + "ĠGenerate d", + "ĠGene rated", + "Ġse ized", + "Ġseiz ed", + "Ġsei zed", + "Ġseize d", + "= :", + "Ġ electronics", + "Ġelect ronics", + "Ġelectronic s", + "Ġelectron ics", + "Ġ AppComponent", + "ĠApp Component", + "/ ',Ċ", + "/' ,Ċ", + "/', Ċ", + ". equalsIgnoreCase", + ".equals IgnoreCase", + "Do ctrine", + "d isk", + "dis k", + "di sk", + "Ġ Political", + "ĠPol itical", + "ĠPolit ical", + "C HO", + "CH O", + "< F", + "ĉ height", + "ĉh eight", + "Ġ Bug", + "ĠB ug", + "ĠBu g", + ". le", + ".l e", + "i kh", + "ik h", + "Ġ milliseconds", + "Ġm illiseconds", + "Ġmill iseconds", + "Ġmilli seconds", + "Ġconst itu", + "Ġconstit u", + "m ag", + "ma g", + ". nl", + ".n l", + "- range", + "-r ange", + "-ra nge", + "ang gal", + "' ,[", + "', [", + "r opolitan", + "ropol itan", + "Ġ Ãľ", + "Ġà ľ", + "Ġ UC", + "ĠU C", + ". desc", + ".d esc", + ".de sc", + ".des c", + "- LAST", + "-L AST", + "f stream", + "fst ream", + "i bil", + "ib il", + "ibi l", + "Ġf ier", + "Ġfi er", + "Ġfie r", + "V ERY", + "VER Y", + "VE RY", + "Ġ ë³", + "Ġë ³", + "I RT", + "IR T", + "_ UI", + "_U I", + "( abs", + "(a bs", + "(ab s", + "Ġk nees", + "Ġkn ees", + "Ġkne es", + "Ġknee s", + "Ġr ookie", + "Ġro okie", + "Ġ Vac", + "ĠV ac", + "ĠVa c", + "a rena", + "ar ena", + "are na", + "aren a", + "comm end", + "- \\", + "ĠSUB STITUTE", + "S oft", + "So ft", + "Ġpart ir", + "Ġpar tir", + "Ġparti r", + "we alth", + "è¦ ģ", + "( dataset", + "(d ataset", + "(data set", + "(dat aset", + "(datas et", + "Ġ Climate", + "ĠCl imate", + "ĠClim ate", + "ĠCli mate", + "- show", + "-s how", + "-sh ow", + "Ġrel iability", + "Ġreli ability", + "_ chunk", + "_ch unk", + "ä» £", + "_ stock", + "_st ock", + "ĠEX EMPLARY", + "ï ¸ı", + "ï¸ ı", + "Ġ vÃŃ", + "Ġv ÃŃ", + "Ġsm iled", + "Ġsmile d", + "Ġdr ill", + "Ġdri ll", + ". Function", + ".F unction", + ".Func tion", + "Ġ SI", + "ĠS I", + "Ġre gression", + "Ġreg ression", + "Ġregress ion", + "- X", + "Ġ Jar", + "ĠJ ar", + "ĠJa r", + "p ref", + "pr ef", + "pre f", + "ĉ success", + "ĉs uccess", + "ĠH itler", + "ĠHit ler", + "Ġinst inct", + "Ġfem mes", + "Ġfemme s", + "Ġ lover", + "Ġl over", + "Ġlo ver", + "Ġlove r", + "Ġlov er", + "< Ċ", + "Ġmulti plier", + "Ġmultip lier", + "r il", + "ri l", + "Re size", + "Res ize", + "Ġ Authorization", + "ĠAuthor ization", + "ĠK an", + "ĠKa n", + "Dispatch ToProps", + "Ġc rops", + "Ġcr ops", + "Ġcro ps", + "Ġcrop s", + "t okens", + "token s", + "tok ens", + "e cn", + "ec n", + "ent ially", + "ential ly", + "enti ally", + "ĠINTERRU PTION", + "f ake", + "fa ke", + "fak e", + "Un defined", + "Und efined", + "Ġ AK", + "ĠA K", + "Ġ TestCase", + "ĠTest Case", + "Ġ rab", + "Ġr ab", + "Ġra b", + "Ġ torrent", + "Ġt orrent", + "Ġtor rent", + "Ġ Ot", + "ĠO t", + "B ars", + "Bar s", + "Ba rs", + "Ġ lecture", + "Ġl ecture", + "Ġlect ure", + "Ġen jo", + "Ġrespond s", + "Ġresp onds", + "Ġ indexed", + "Ġindex ed", + "Ġinde xed", + "Of Work", + "_ chain", + "_ch ain", + ") )->", + ")) ->", + "))- >", + "Ġ Beauty", + "ĠBe auty", + "ĠBeaut y", + "ĠBea uty", + "ĠBeau ty", + "Ġ` <", + "Ġtouch ing", + "Ġtou ching", + "Ġ |--", + "Ġ| --", + "Ġ|- -", + "ĉ flag", + "ĉf lag", + "normal ize", + "Ġt rapped", + "Ġtr apped", + "Ġtra pped", + "Ġtrap ped", + "Ġestablish ing", + "/ build", + "/b uild", + "A J", + "f y", + "- react", + "-re act", + "a vn", + "av n", + "RI PTION", + "RIPT ION", + "Ġk ut", + "Ġku t", + "Ġ Fashion", + "ĠF ashion", + "Ġ Inform", + "ĠIn form", + "ĠInfo rm", + "ĠInf orm", + "c urities", + "cur ities", + "< byte", + "{Ċ", + "Ġ= >{Ċ", + "Ġ=> {Ċ", + "Ġgar lic", + "Ġ repr", + "Ġre pr", + "Ġrep r", + "Ġre plies", + "Ġrep lies", + "Ġrepl ies", + "( prop", + "(p rop", + "(pro p", + "(pr op", + "Ġspirit s", + "Ġspir its", + "Ġins pire", + "Ġinspir e", + "Ġinsp ire", + "Ġbase ment", + "Ġbas ement", + ". reject", + ".re ject", + "Ġ hints", + "Ġh ints", + "Ġhint s", + "Ġhi nts", + "Ġhin ts", + "Ġpol ling", + "Ġpoll ing", + "ĉ ĠĊ", + "ĉĠ Ċ", + "_ rating", + "_r ating", + "_ra ting", + "_rat ing", + "Ġc ath", + "Ġca th", + "Ġcat h", + "a vier", + "av ier", + "avi er", + "Ġ compressed", + "Ġcom pressed", + "Ġcomp ressed", + "Ġcompr essed", + "Ġcompress ed", + "Ġ VS", + "ĠV S", + "] '", + "Ġjud icial", + "ĠT rend", + "ĠTr end", + "ĠTre nd", + "tr aining", + "tra ining", + "train ing", + "EST AMP", + "ogn ition", + "Ä ģ", + "S ENT", + "SE NT", + "SEN T", + "v entions", + "vent ions", + "vention s", + "Ġconsult ant", + "Ġconsulta nt", + "Ġconsul tant", + "u mph", + "um ph", + "ump h", + "Ġ userService", + "Ġuser Service", + ", NULL", + ",N ULL", + "k h", + "D ear", + "De ar", + "_ BAD", + "_B AD", + "it ations", + "itation s", + "itat ions", + "Ġmet aph", + "Ġmeta ph", + "' é", + "and ise", + "andi se", + "- font", + "-f ont", + ". chart", + ".c hart", + ".ch art", + ".char t", + "Ġ sg", + "Ġs g", + "_ Controller", + "_Control ler", + ". jpeg", + ".j peg", + ".jp eg", + "Ġ ULONG", + "ĠU LONG", + "ĠUL ONG", + "ĉ game", + "ĉg ame", + "( ss", + "(s s", + "ĠM aj", + "ĠMa j", + "ĉ go", + "ĉg o", + "Ġ Sad", + "ĠS ad", + "ĠSa d", + "ĠB erg", + "ĠBe rg", + "ĠBer g", + "Ġ Mine", + "ĠM ine", + "ĠMin e", + "ĠMi ne", + "P ack", + "Pa ck", + "Ġres istant", + "Ġresist ant", + "Ġ ROM", + "ĠR OM", + "ĠRO M", + "Ġ peg", + "Ġp eg", + "Ġpe g", + "ĠSt anford", + "ĠStan ford", + "Ġ Yahoo", + "ĠY ahoo", + "ĠYa hoo", + "ĠYah oo", + "Ġ scaled", + "Ġs caled", + "Ġsc aled", + "Ġscale d", + "Ġsca led", + "Ġscal ed", + "Ġ lan", + "Ġl an", + "Ġla n", + "= []", + "=[ ]", + "\" /> < /", + "Ġ plots", + "Ġp lots", + "Ġpl ots", + "Ġplot s", + "Ġplo ts", + ". *Ċ", + ".* Ċ", + "Ġtr aveled", + "Ġtravel ed", + "Ġtra veled", + "Ġtrav eled", + "ĠO scar", + "ĠOs car", + "ĠOsc ar", + "V L", + "Ġl inking", + "Ġlink ing", + "Ġlin king", + "Ġt ires", + "Ġti res", + "Ġtire s", + "Ġtir es", + "Ġ' *'", + "Ġ'* '", + "ĠBuffer ed", + "ĠBuff ered", + "e ri", + "er i", + "Ġ ****", + "Ġ* ***", + "Ġ** **", + "Ġ*** *", + "Ġover look", + "Ġoverl ook", + ". Non", + ".N on", + ".No n", + "Ġr és", + "Ġré s", + "Ġe gy", + "Ġeg y", + "å° ı", + "Ġatt acker", + "Ġattack er", + "ĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉ", + ". sync", + ".s ync", + ".syn c", + ".sy nc", + "AS CADE", + "ASC ADE", + "G round", + "Gr ound", + "Gro und", + "Ġ decay", + "Ġdec ay", + "Ġ Ton", + "ĠT on", + "ĠTo n", + "Ġjew elry", + "Ġjewel ry", + "Ġb ypass", + "Ġby pass", + "Ġm embr", + "Ġmem br", + "Ġmemb r", + "R NA", + "RN A", + "< System", + " ččĊ", + "Ġs ud", + "Ġsu d", + "ĉ background", + "ĉback ground", + "Ġsch olars", + "Ġscholar s", + "-m uted", + "a rá", + "ar á", + "Ġ =====", + "Ġ= ====", + "Ġ== ===", + "Ġ=== ==", + "Ġ==== =", + "Ġ ____", + "Ġ_ ___", + "Ġ__ __", + "Ġ___ _", + "C reat", + "Cre at", + "Cr eat", + "e never", + "en ever", + "ene ver", + "/ wp", + "/w p", + "Ġ VPN", + "ĠV PN", + "ĠVP N", + "Error Code", + ") ],Ċ", + ")] ,Ċ", + ")], Ċ", + "( builder", + "(b uilder", + "(build er", + "Ġ Enemy", + "ĠEn emy", + "S ensor", + "u sa", + "us a", + "Ġtr iggers", + "Ġtrigger s", + "Ġtrig gers", + "Ġplay offs", + "Ġplayoff s", + "_ REQ", + "_RE Q", + "_R EQ", + "Ġ (~", + "Ġ( ~", + "ĠB arry", + "ĠBar ry", + "ĠBarr y", + "Ġperman ently", + "Ġpermanent ly", + "Ġ RUN", + "ĠR UN", + "ĠRU N", + "Ġb ure", + "Ġbu re", + "Ġbur e", + ".Fatal f", + ".Fat alf", + "Ġch ick", + "Ġchi ck", + "Ġchic k", + "ĉ panic", + "ĉp anic", + "p si", + "ps i", + "o ka", + "ok a", + "éĢ ī", + "> [", + "Ġunder stands", + "Ġunderstand s", + "Ġunderst ands", + "Ġ Junior", + "ĠJun ior", + "ĠJuni or", + "Ġ INFO", + "ĠIN FO", + "ĠINF O", + "= mysqli", + "=m ysqli", + "=mysql i", + "us tain", + "ust ain", + "usta in", + "- source", + "-s ource", + "s erv", + "se rv", + "ser v", + "Ġ CREATE", + "ĠC REATE", + "ĠCRE ATE", + ". au", + ".a u", + "Ġs ells", + "Ġsell s", + "Ġsel ls", + "Ġ ĠĊĠĠĊ", + "ĠĠ ĊĠĠĊ", + "ĠĠĊ ĠĠĊ", + "E urope", + "Euro pe", + "z w", + "p reh", + "pr eh", + "pre h", + "ĠN SA", + "ĠNS A", + "Ġ xy", + "Ġx y", + "ภ´", + "Ġ Beyond", + "ĠB eyond", + "ĠBey ond", + "In stead", + "Inst ead", + "Non Query", + "Ġa rise", + "Ġar ise", + "Ġavoid ed", + ". emplace", + ".em place", + ".emp lace", + "_ models", + "_model s", + "_mode ls", + "_mod els", + "} ),Ċ", + "}) ,Ċ", + "}), Ċ", + "Ġ hid", + "Ġh id", + "Ġhi d", + "Ġ &_", + "Ġ& _", + ". points", + ".p oints", + ".point s", + ".po ints", + ".poi nts", + ". getWidth", + ".get Width", + ". Exec", + ".Ex ec", + ".E xec", + "Ġ ////", + "Ġ// //", + "Ġ/ ///", + "Ġ/// /", + "Ġ Sessions", + "ĠS essions", + "ĠSession s", + ". ..\\", + ".. .\\", + "... \\", + "ĠCol omb", + "ĠColo mb", + "Ġacceler ation", + "Ġaccel eration", + "re store", + "rest ore", + "Ġ ile", + "Ġi le", + "Ġil e", + "o bic", + "ob ic", + "obi c", + "< Node", + " }Ċ", + ">} Ċ", + "pl aint", + "plain t", + "pla int", + "get Text", + "Ġindividual ly", + "Ġindivid ually", + "Ġ checkbox", + "Ġcheck box", + "U Y", + "ĠL amb", + "ĠLa mb", + "ĠLam b", + "Ġdys function", + "ĠL ar", + "ĠLa r", + "à °", + "Ġ Creating", + "ĠC reating", + "ĠCr eating", + "ĠCre ating", + "ĠCreat ing", + "' );ĊĊĊ", + "') ;ĊĊĊ", + "');Ċ ĊĊ", + "');ĊĊ Ċ", + "'); ĊĊĊ", + "\" They", + "\"The y", + "\"T hey", + "l ocations", + "loc ations", + "location s", + "_ CORE", + "_C ORE", + "_CO RE", + "_COR E", + "Inter action", + "umbn ails", + "umbnail s", + "Ġ Partner", + "ĠP artner", + "ĠPart ner", + "b rit", + "br it", + "Ġl esser", + "Ġless er", + "Ġles ser", + "Ġ Slot", + "ĠS lot", + "ĠSl ot", + "ĠSlo t", + "set Attribute", + "Ġ Wave", + "ĠW ave", + "ĠWa ve", + ". po", + ".p o", + "/ store", + "/st ore", + "Ġb rowsing", + "Ġbrows ing", + "Ġbrow sing", + "_ pd", + "_p d", + "s ume", + "sum e", + "su me", + "s ed", + "se d", + "C urve", + "Cur ve", + "Cu rve", + "Ġpl asma", + "Ġsusp icious", + "ìĿ ¸", + "Ġ Bah", + "ĠB ah", + "ĠBa h", + "Ġ Explicit", + "ĠExp licit", + "ĠExpl icit", + "_ CC", + "_C C", + ".Client Size", + "\\ View", + "\\V iew", + "Ġsub stit", + "Ġsubs tit", + "Ġsubst it", + "l oon", + "lo on", + "loo n", + "Ġ GAME", + "ĠG AME", + "ĠGA ME", + "ĠGAM E", + "ĠB rid", + "ĠBr id", + "ĠBri d", + "Ľ 建", + "_ User", + "_U ser", + "Ġs quares", + "Ġsqu ares", + "Ġsquare s", + "f one", + "fo ne", + "fon e", + "Ġsa cred", + "Ġsac red", + "Ġsacr ed", + "ug hs", + "ugh s", + "] interface", + "Ġ Throw", + "ĠTh row", + "ĠThr ow", + "ĠK irk", + "ĠKir k", + "ĠKi rk", + "Ġem pire", + "Ġemp ire", + "Ġempir e", + "Ġass essed", + "Ġassess ed", + "Ġasses sed", + "T ax", + "Ta x", + "ĠHe aven", + "- buffer", + "-b uffer", + "_ STATIC", + "_ST ATIC", + "_STAT IC", + "é né", + "én é", + "-b ordered", + "-border ed", + "Ġp unct", + "Ġpun ct", + "( mode", + "(m ode", + "(mod e", + "Ġke ine", + "Ġkein e", + "S ent", + "Se nt", + "Sen t", + "Ġ Calcul", + "ĠCal cul", + "ĠCalc ul", + "ĠE ve", + "ĠEv e", + "Ġsty lish", + "Ġstyl ish", + "Ġo ils", + "Ġoil s", + "Ġoi ls", + ". TestCase", + ".Test Case", + "Ġtrad emark", + "Ġtrade mark", + "Ġliter ary", + "Ġlite rary", + "Ġconcentr ations", + "Ġconcentration s", + "Ġ Relations", + "ĠRe lations", + "ĠRel ations", + "ĠRelation s", + "( Class", + "(C lass", + "(Cl ass", + "Ġ stdin", + "Ġst din", + "Ġstd in", + "Ġv æ", + "back up", + "bac kup", + ". VERSION", + ".V ERSION", + ".AutoScale Dimensions", + "st arter", + "start er", + "star ter", + "Transaction al", + "- panel", + "-p anel", + "-pane l", + "St udio", + "k c", + "ĠCh amber", + "ĠCham ber", + "ĠS piel", + "ĠSp iel", + "ĠSpi el", + "Ġ rho", + "Ġr ho", + "Ġrh o", + "ا ÙĦ", + "ا٠Ħ", + "! '", + ". Attributes", + ".At tributes", + ".Attribute s", + "Ġmurder ed", + "apeut ic", + "Ġint imate", + "Ġintim ate", + "Ġ textField", + "Ġt extField", + "Ġtext Field", + "ĠBuff alo", + "d ummy", + "dum my", + "\" %", + "ĠLib erty", + "ĠLibert y", + "ĠLiber ty", + "o bar", + "ob ar", + "oba r", + "Ġ Tank", + "ĠT ank", + "ĠTa nk", + "ĠTan k", + "Ġ Popular", + "ĠPop ular", + "er visor", + "erv isor", + "ĠIn iti", + "ĠInit i", + "ĠIni ti", + "ĠM all", + "ĠMal l", + "ĠMa ll", + "Ġ Prior", + "ĠP rior", + "ĠPr ior", + "ĠPri or", + "C AP", + "CA P", + "ĠC lay", + "ĠCl ay", + "ĠCla y", + "Ġ Certificate", + "ĠC ertificate", + "ĠCert ificate", + "ĠCertif icate", + ". Lock", + ".L ock", + ".Lo ck", + "- strip", + "-s trip", + "-st rip", + "-str ip", + "-dr iven", + "-drive n", + "/ all", + "/a ll", + "/al l", + "ĠMessageBox Buttons", + "ĠMessageBoxButton s", + "_ SECRET", + "_SE CRET", + "_SEC RET", + "_ pb", + "_p b", + "Ġ rats", + "Ġr ats", + "Ġrat s", + "Ġra ts", + "ा à¤", + "Ġ nt", + "Ġn t", + ". Router", + ".R outer", + ".Route r", + "_ topic", + "_t opic", + "_to pic", + "_top ic", + "Ġt ennis", + "Ġten nis", + "Ġ PUBLIC", + "ĠP UBLIC", + "ĠPUB LIC", + "ĠActiv atedRoute", + "Ġ ',Ċ", + "Ġ' ,Ċ", + "Ġ', Ċ", + "Ġcost ume", + "Ġj okes", + "Ġjo kes", + "Ġjoke s", + ". Handle", + ".H andle", + ".Hand le", + "ĉ byte", + "ĉb yte", + "Ġfl avors", + "Ġflavor s", + "Ġflav ors", + "( cc", + "(c c", + "Ġperson as", + "Ġpers onas", + "Ġpersona s", + "Ġperso nas", + "ĉ image", + "ĉi mage", + "ĉim age", + "ĠN azi", + "ĠNa zi", + "ĠNaz i", + "Ġ grammar", + "Ġgram mar", + "Ġgramm ar", + "Ġú lt", + "Ġval ve", + "Ġ vic", + "Ġv ic", + "Ġvi c", + "Ġ Rachel", + "ĠR achel", + "ĠRac hel", + "ĠRach el", + "_ invalid", + "_in valid", + "P refs", + "Pr efs", + "Pre fs", + "Pref s", + "std int", + "stdin t", + "( route", + "(r oute", + "(ro ute", + "Ġ htmlspecialchars", + "Ġhtml specialchars", + "Ġpe oples", + "Ġpeople s", + "p line", + "pl ine", + "Ġ nv", + "Ġn v", + "Ġ Quant", + "ĠQ uant", + "ĠQu ant", + "o ppers", + "op pers", + "opp ers", + "opper s", + "Ġ currentUser", + "Ġcurrent User", + "ĠC atal", + "ĠCa tal", + "ĠCat al", + "ĠCata l", + "Ġre conc", + "Ġrecon c", + "Ġreco nc", + "Ġcon junction", + "Ġconj unction", + "l x", + "am burg", + "amb urg", + "Ġinflu ential", + "d anger", + "da nger", + "dan ger", + "in ders", + "ind ers", + "inder s", + "inde rs", + "Ġ %@\",", + "Ġ% @\",", + "Ġ%@ \",", + ". configuration", + ".config uration", + "o some", + "os ome", + "oso me", + ". identity", + ".id entity", + ".ident ity", + ".ide ntity", + "Ġ picker", + "Ġp icker", + "Ġpick er", + "Ġpi cker", + "Ġpic ker", + "n ost", + "no st", + "nos t", + "ĠDI Y", + "Aug ust", + "a blo", + "ab lo", + "abl o", + "Le af", + "ĠR eco", + "ĠRe co", + "ĠRec o", + "c ko", + "ck o", + "D OC", + "DO C", + "ĠH erm", + "ĠHe rm", + "ĠHer m", + ": any", + ":a ny", + "Ġ Interview", + "ĠInt erview", + "ĠInter view", + "Ġ Tex", + "ĠT ex", + "ĠTe x", + "x fe", + "xf e", + "( work", + "(w ork", + "Ġle ap", + "He ading", + "Head ing", + "Ġ quarters", + "Ġqu arters", + "Ġquarter s", + "Ġquar ters", + "Ġquart ers", + "\\ Bundle", + "r eb", + "re b", + "Per haps", + "ĠG mbH", + "B irth", + "Bir th", + "ĉ sum", + "ĉs um", + "ĠWat son", + ". nil", + ".n il", + "ç ¡", + "{ }ĊĊ", + "{} ĊĊ", + "{}Ċ Ċ", + "ic aid", + "ica id", + "G etter", + "Get ter", + "\" name", + "Ġ \"čĊ", + "Ġ\" čĊ", + "_ none", + "_n one", + "_no ne", + "_non e", + "z m", + "ac ute", + "u esto", + "ue sto", + "ues to", + "uest o", + "Ġs ous", + "Ġso us", + "Ġsou s", + "Ġre build", + "Ġreb uild", + "Ġnews papers", + "Ġnewsp apers", + "Ġnewspaper s", + "Ġ Haz", + "ĠH az", + "ĠHa z", + "Ġ kits", + "Ġk its", + "Ġkit s", + "Ġki ts", + "i fo", + "if o", + "Bl ur", + "Ġsu ited", + "Ġsuit ed", + "Ġsuite d", + "Ġsui ted", + "- In", + "-I n", + "à ¯", + "Ġ Keith", + "ĠKe ith", + "ĠNor way", + "IN IT", + "INI T", + "ire ccion", + "i eties", + "ie ties", + "iet ies", + "_ usage", + "_u sage", + "_us age", + "Ġ Doug", + "ĠD oug", + "ĠDo ug", + "ĠDou g", + "r ise", + "ri se", + "ris e", + "Ġtr illion", + "im ited", + "imit ed", + "imi ted", + "Ġ REL", + "ĠR EL", + "ĠRE L", + "a lic", + "al ic", + "ali c", + "Ġcritic ized", + "Ġcriticize d", + "the orem", + "Ġc ease", + "Ġce ase", + "Ġside w", + "Ġsid ew", + "ĠT erry", + "ĠTer ry", + "ĠTerr y", + "Ġsubs idi", + "Ġsubsid i", + "Ġfirm ly", + "Ġ aws", + "Ġa ws", + "Ġaw s", + "Ġh ott", + "Ġhot t", + "Ġho tt", + "Ġd ressing", + "Ġdress ing", + "b adge", + "ba dge", + "bad ge", + "Ġ Applications", + "ĠApp lications", + "ĠApplication s", + "ĠAppl ications", + "è¿ ĶåĽŀ", + "è¿Ķ åĽŀ", + "Ġlaugh ed", + "Ġh obby", + "Ġhob by", + "Ġmus icians", + "Ġmusic ians", + "Ġmusician s", + "Ġ *.", + "Ġ* .", + ". placeholder", + ".place holder", + "Ġc ounters", + "Ġcount ers", + "Ġcoun ters", + "Ġcounter s", + "ĠCap itol", + "S DK", + "SD K", + "Ġh elmet", + "Ġhel met", + "Ġhelm et", + "and box", + "q uit", + "qu it", + "qui t", + "Ġcriminal s", + "Ġcrim inals", + "Ġteen ager", + "Ġteenage r", + "( update", + "(up date", + "G l", + ". selection", + ".s election", + ".se lection", + ".select ion", + ".sel ection", + "Ġdis charge", + "Ġpres enting", + "Ġpresent ing", + "ufact urer", + "_ UNKNOWN", + "_UN KNOWN", + "Ġst ressed", + "Ġstr essed", + "Ġstress ed", + "å ύ", + "åĻ ¨", + "Pro to", + "Pr oto", + "Prot o", + "_ correct", + "_c orrect", + "_cor rect", + "_corr ect", + "h aus", + "ha us", + "Ġre nov", + "Ġren ov", + "Ġfire arms", + "Ġfirearm s", + "Ġtechn ically", + "Ġtechnical ly", + "- browser", + "-b rowser", + "Ġc andy", + "Ġcan dy", + "Ġcand y", + "St roke", + "Str oke", + "Ġ executor", + "Ġexec utor", + "Ġexecut or", + "Ġocc urrence", + "Ġoccur rence", + "Ġ IPv", + "ĠIP v", + "_ INTERFACE", + "_INTER FACE", + "Ġ Retrieve", + "ĠRe trieve", + "ĠRet rieve", + "ĠRetrie ve", + ". bad", + ".b ad", + ".ba d", + "Ex change", + "Nav bar", + "Ġ Kid", + "ĠK id", + "ĠKi d", + "(get ApplicationContext", + "_ STOP", + "_S TOP", + "_ST OP", + "Ġ Boss", + "ĠB oss", + "ĠBo ss", + "ĠBos s", + "List eners", + "Listener s", + "Listen ers", + "Ġsh ooter", + "Ġshoot er", + "Ġsho oter", + "ĠA lb", + "ĠAl b", + "ä ch", + "Ġ pix", + "Ġp ix", + "Ġpi x", + ". keyCode", + ".key Code", + "al one", + "alo ne", + "alon e", + "Ġabs urd", + "Ġ Cum", + "ĠC um", + "ĠCu m", + "ĠNewton soft", + "i kt", + "ik t", + "Ġlaugh ing", + "Ġcapital ism", + "ree Node", + "T x", + "_ QUERY", + "_QU ERY", + ". Sleep", + ".S leep", + "( login", + "(log in", + "(lo gin", + "Web Element", + "Ġcelebr ating", + "Ġ deprecated", + "Ġde precated", + "Ġdep recated", + "Ġm aar", + "Ġma ar", + "Ġart istic", + "Ġartist ic", + "_ASS OC", + "_AS SOC", + "ĠBorder Radius", + "ĉ wp", + "ĉw p", + "Ġsurv ivors", + "Ġsurviv ors", + "Ġsurvivor s", + "In ner", + "- red", + "-r ed", + "-re d", + "Ġprosec ution", + "_ pp", + "_p p", + "( \"$", + "\"=> $", + "Ġ comma", + "Ġcom ma", + "Ġco mma", + "Ġcomm a", + "un checked", + "g raphics", + "graph ics", + "graphic s", + "r ors", + "ro rs", + "ror s", + "G ROUND", + "GR OUND", + "( public", + "(p ublic", + "(pub lic", + "Ġcustom ized", + "Ġcustomize d", + "ĠArk ansas", + "Ġ Rew", + "ĠR ew", + "ĠRe w", + "Ġ expiration", + "Ġex piration", + "Ġexp iration", + "× ķ", + "ĠC ul", + "ĠCu l", + "Ġn ons", + "Ġno ns", + "Ġnon s", + ". Filter", + ".F ilter", + "Ġsen ator", + "_ definition", + "_def inition", + "ash ington", + "ashing ton", + "y mph", + "ym ph", + "/ J", + "Ġ fuse", + "Ġf use", + "Ġfu se", + "Ġfus e", + "ra mid", + "ram id", + "Ġ Supplier", + "ĠS upplier", + "ĠSup plier", + "Ġ autocomplete", + "Ġaut ocomplete", + "Ġauto complete", + "Ġ }),", + "Ġ} ),", + "Ġ}) ,", + ". \"ĊĊĊ", + ".\" ĊĊĊ", + ".\"ĊĊ Ċ", + ".\"Ċ ĊĊ", + "_ functions", + "_function s", + "_fun ctions", + "ĉ to", + "ĉt o", + ". eval", + ".e val", + ".ev al", + "ĠT Object", + "ĠTO bject", + "Re ferences", + "Reference s", + "Refer ences", + "Ġh eated", + "Ġhe ated", + "Ġheat ed", + "H AL", + "HA L", + "Ġ ))}Ċ", + "Ġ) )}Ċ", + "Ġ)) }Ċ", + "} $", + "ĠB arr", + "ĠBar r", + "ĠBa rr", + "_ UNIT", + "_UN IT", + "+ $", + "Ġ getValue", + "Ġget Value", + "i ped", + "ip ed", + "ipe d", + "ch ied", + "chie d", + "chi ed", + "( vm", + "(v m", + "c ue", + "cu e", + "_ integer", + "_int eger", + "_ course", + "_c ourse", + "_co urse", + "th ird", + "Ġre vised", + "Ġrev ised", + "Ġrevis ed", + "Ġrevise d", + "* */Ċ", + "** /Ċ", + "_ DIRECT", + "_D IRECT", + "_DIR ECT", + "_DI RECT", + "Out Of", + "( \"(", + "(\" (", + "Ġ Feel", + "ĠF eel", + "ĠFe el", + "ĠFee l", + "Ġre ass", + "Ġ subtitle", + "Ġsub title", + "Ġsubt itle", + "p eri", + "pe ri", + "per i", + "n f", + "Ġenjoy s", + "Ġenjo ys", + "Ġtreat s", + "Ġtre ats", + ") this", + ")t his", + "- tabs", + "-t abs", + "-tab s", + "an cers", + "ance rs", + "anc ers", + "ancer s", + "Ġ continent", + "Ġcont inent", + "Ġcontin ent", + "Ġcar dio", + "Ġcard io", + "Ġcardi o", + "S er", + "Se r", + ". question", + ".q uestion", + ".qu estion", + ".quest ion", + "Ġph rases", + "Ġphrase s", + "Valid ators", + "Validator s", + "Ġpop ul", + "Ġ lÃŃ", + "Ġl ÃŃ", + "s ong", + "so ng", + "son g", + "_ INTERNAL", + "_IN TERNAL", + "_INTER NAL", + "Ġadv iser", + "Ġadvis er", + "Ġadvise r", + "Ġp uzz", + "Ġpu zz", + "Ġamb itious", + "Ġambit ious", + "ĠT ob", + "ĠTo b", + "Ġ DP", + "ĠD P", + "Ġpres idency", + "Ġsur render", + "Ġsurre nder", + "Ġw atches", + "Ġwatch es", + "Ġwat ches", + "_ binary", + "_b inary", + "_bin ary", + "Ġ Soon", + "ĠS oon", + "ĠSo on", + "Ġcan ada", + "(\" \")Ċ", + "(\"\" )Ċ", + "(\"\") Ċ", + "] ='", + "]= '", + "Ġ Brandon", + "ĠBr andon", + "ĠBrand on", + "ĠBra ndon", + "ĠBran don", + "e psilon", + "eps ilon", + "r w", + ". addChild", + ".add Child", + ". Copy", + ".C opy", + ".Co py", + "Pr incipal", + "Ph otos", + "Photo s", + "Phot os", + "Ġmargin al", + "Ġmarg inal", + "Ġb asics", + "Ġbas ics", + "Ġbasic s", + "e ing", + "ei ng", + "ein g", + "M ust", + "Mu st", + "Mus t", + "_ String", + "_S tring", + "_Str ing", + "_St ring", + "Ġ ole", + "Ġo le", + "Ġol e", + "M agento", + "Mag ento", + ". customer", + ".c ustomer", + ".custom er", + "( prev", + "(p rev", + "(pr ev", + "(pre v", + "ภ¥", + "Ġlo yalty", + "Ġloyal ty", + "C og", + "Co g", + "Ġ protocols", + "Ġprot ocols", + "Ġprotocol s", + "Ġproto cols", + "Ġ Companies", + "ĠCom panies", + "Ġthe oretical", + "Ġtheoret ical", + "Ġtheor etical", + "Ġaccess ing", + "Ġacces sing", + "Ġ Zen", + "ĠZ en", + "ĠZe n", + ". ones", + ".on es", + ".o nes", + ".one s", + "att ice", + "atti ce", + "_ world", + "_w orld", + "z es", + "ze s", + "Ġtatto o", + "Ġtat too", + "Ġm enos", + "Ġme nos", + "Ġmen os", + "Ġmeno s", + "Ġ intersect", + "Ġinter sect", + "Ġinters ect", + "\" ];ĊĊ", + "\"] ;ĊĊ", + "\"];Ċ Ċ", + "\"]; ĊĊ", + "be lie", + "bel ie", + "Ġ inactive", + "Ġin active", + ".read line", + "-label led", + ". done", + ".d one", + ".do ne", + "lic kr", + "lick r", + "Ġ WORK", + "ĠW ORK", + "Ġder ivative", + "Ġderiv ative", + "Ġd atabases", + "Ġdata bases", + "Ġdatabase s", + "Ġdatab ases", + "âĤ Ĥ", + "Ġ sx", + "Ġs x", + ". isArray", + ".is Array", + "Ġ ys", + "Ġy s", + "Ġp ada", + "Ġpa da", + "Ġpad a", + "Ġ Bullet", + "ĠB ullet", + "ĠBul let", + "ĠBull et", + "(` /", + "is Active", + "Ġ CGSize", + "ĠCG Size", + "( equalTo", + "(equal To", + "ĠColum bus", + "Ġm arry", + "Ġmar ry", + "D EV", + "DE V", + "_ limits", + "_l imits", + "_limit s", + "_li mits", + "_lim its", + "r ones", + "ro nes", + "ron es", + "rone s", + "I AS", + "IA S", + "Ġ tau", + "Ġt au", + "Ġta u", + "m ino", + "min o", + "mi no", + "_ Write", + "_W rite", + "ĠW ine", + "ĠWin e", + "ĠWi ne", + "Ġ [['", + "Ġ[ ['", + "Ġ[[ '", + "Ġ Pull", + "ĠP ull", + "ĠPu ll", + "ĠPul l", + "ri ters", + "rit ers", + "rite rs", + "riter s", + "r ients", + "ri ents", + "rie nts", + "rient s", + "rien ts", + "Ġsh ifting", + "Ġshift ing", + "u pp", + "up p", + "_ TIMER", + "_T IMER", + "_TIME R", + "_TIM ER", + "_TI MER", + "Ġ Conditions", + "ĠCondition s", + "ĠCond itions", + "Ạ¥", + "Ġ Orders", + "ĠOr ders", + "ĠOrder s", + "ĠOrd ers", + "Ġ Strength", + "ĠSt rength", + "ĠStr ength", + "ĠStre ngth", + "æī Ģ", + "Ġval idity", + "Ġvalid ity", + "Ġf ot", + "Ġfo t", + "e tur", + "et ur", + "etu r", + "Ġ bolt", + "Ġb olt", + "Ġbo lt", + "Ġbol t", + "åĨ ħ", + "Ġ Along", + "ĠA long", + "ĠAl ong", + "ĠAlo ng", + "o shi", + "os hi", + "osh i", + "Ġassum ptions", + "Ġassumption s", + "Ġmag azines", + "Ġmagazine s", + "_ SPI", + "_S PI", + "_SP I", + "Ġp unt", + "Ġpun t", + "Ġpu nt", + "_ PRODUCT", + "_PRO DUCT", + "_PROD UCT", + "Ġ relay", + "Ġre lay", + "Ġr elay", + "Ġrel ay", + "Ġ Javascript", + "ĠJ avascript", + "ĠJava script", + ". te", + ".t e", + "- es", + "-e s", + "Ġ widgets", + "Ġwidget s", + "Ġwid gets", + "( fs", + "(f s", + "< Item", + " \";", + ">\" ;", + "at ching", + "atch ing", + "Ġ Knowledge", + "ĠK nowledge", + "ĠKnow ledge", + "ĉ The", + "ĉT he", + "; margin", + ";m argin", + "less ness", + "o pard", + "op ard", + "opa rd", + "u matic", + "um atic", + "uma tic", + "umat ic", + "( )));čĊ", + "() ));čĊ", + "()) );čĊ", + "())) ;čĊ", + "())); čĊ", + "Ġf als", + "Ġfa ls", + "Ġfal s", + "( cache", + "(c ache", + "(ca che", + "Type Id", + "éĢ ļ", + "_ choice", + "_ch oice", + "ĠG oth", + "ĠGo th", + "ĠGot h", + "Ġ Sites", + "ĠS ites", + "ĠSi tes", + "ĠSite s", + "ĠSit es", + "M G", + "_ border", + "_b order", + "Ind ices", + "Com parer", + "Comp arer", + "Compar er", + "Compare r", + "ĠRe distribution", + "ĠRed istribution", + "ĠRedis tribution", + "Ġclose t", + "Ġclos et", + "Ġclo set", + "Ġvers atile", + "Ġversa tile", + "In puts", + "Input s", + "**** ****************", + "******** ************", + "**************** ****", + "****** **************", + "************ ********", + "************** ******", + "Ġob esity", + "qu iz", + "qui z", + "g ra", + "gr a", + "( global", + "(g lobal", + "åĬ ¡", + "Ġ collector", + "Ġcol lector", + "Ġcoll ector", + "Ġcollect or", + "Ġcolle ctor", + "Ġ kor", + "Ġk or", + "Ġko r", + "o vable", + "ov able", + "ova ble", + "A DC", + "AD C", + "Ġ EventHandler", + "ĠEvent Handler", + ". nc", + ".n c", + "Ġplay back", + "ient os", + "ien tos", + "iento s", + "_ perm", + "_p erm", + "_per m", + "_pe rm", + "_ WARNING", + "_W ARNING", + "_WARN ING", + "ĠOlymp ics", + "ĠOlympic s", + ". norm", + ".n orm", + ".no rm", + "Ġ Broadcast", + "ĠB roadcast", + "ĠBroad cast", + "_ small", + "_s mall", + "_sm all", + "d rive", + "dr ive", + ". iloc", + ".i loc", + ".il oc", + "Ġ typed", + "Ġt yped", + "Ġtype d", + "Ġtyp ed", + "Ġty ped", + "M EM", + "ME M", + "_ cons", + "_c ons", + "_con s", + "_co ns", + "D METHOD", + "DM ETHOD", + "Ġ lun", + "Ġl un", + "Ġlu n", + ". distance", + ".d istance", + ".di stance", + ".dist ance", + "( par", + "(p ar", + "(pa r", + "p oon", + "po on", + "Ġ bast", + "Ġb ast", + "Ġbas t", + "Ġba st", + "act ivities", + "activ ities", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + ": čĊčĊ", + ":čĊ čĊ", + "S ER", + "SE R", + ") &&", + ")& &", + "_ lst", + "_l st", + "_ls t", + "ĠPol ish", + "ĠPo lish", + "Ġkn ocked", + "Ġknock ed", + "Ġfrustr ation", + "au kee", + "Ġph osph", + "iqu id", + "iq uid", + "_ coeff", + "_c oeff", + "_co eff", + "_coef f", + "æŃ ¤", + "L atest", + "La test", + "Lat est", + "Late st", + "ĠD ust", + "ĠDu st", + "T ipo", + "Tip o", + "Ti po", + "Ġmain tains", + "Ġmaint ains", + "Ġmaintain s", + "Ġ marsh", + "Ġmar sh", + "Ġmars h", + "inc inn", + "inci nn", + "l bl", + "lb l", + "C are", + "Car e", + "Ca re", + "Ġneighborhood s", + "_ gpio", + "_g pio", + "_gp io", + "ĠAr senal", + "ĠArs enal", + "D em", + "De m", + "ĠW he", + "ĠWh e", + "_ hook", + "_h ook", + "Ġl dc", + "Ġld c", + "ĠHar per", + "ĠBer keley", + "Ġgrad uated", + "Ġgraduate d", + "Ġgradu ated", + "Per cent", + "Ġarr iving", + "Ġarriv ing", + "Ġ Adventure", + "ĠAd venture", + "ĠAdvent ure", + "( scope", + "(s cope", + "(sc ope", + "( '*", + "(' *", + "qu arter", + "ĠM arie", + "ĠMar ie", + "ĠMa rie", + "ĠMari e", + "Spe aking", + "Speak ing", + "_ codegen", + "_code gen", + "_cod egen", + "Ġim mun", + "Ġimm un", + "c aster", + "ca ster", + "cast er", + "cas ter", + "ãĤ Į", + "åķ Ĩ", + "Ġ Dimensions", + "ĠDim ensions", + "ĠDimension s", + ". record", + ".re cord", + ".rec ord", + "Ġ texto", + "Ġtext o", + "Ġtex to", + "Ġ Michelle", + "ĠMich elle", + "ĠMichel le", + "ĠMiche lle", + "P ending", + "Pen ding", + "( by", + "(b y", + "_ PAR", + "_P AR", + "_PA R", + "u cht", + "uch t", + "uc ht", + "b ee", + "be e", + ". Thread", + ".T hread", + ".Th read", + "am pire", + "amp ire", + "k now", + "kn ow", + "Ġ Clinical", + "ĠClin ical", + "ĠClinic al", + "Ġmargin Bottom", + "Ġd istinguish", + "Ġdistingu ish", + ". Full", + ".F ull", + ". undefined", + ".un defined", + "ĠSequ elize", + "#### ########################################################################", + "################ ############################################################", + "################################################################ ############", + "############ ################################################################", + "################################################ ############################", + "######################################################################## ####", + "############################ ################################################", + "############################################################ ################", + "Ġ educated", + "Ġeduc ated", + "Ġeducate d", + "_ OVER", + "_O VER", + "åº ı", + "Ġ ÂłĠÂł", + "ĠÂł ĠÂł", + "ĠÂłĠ Âł", + "_ each", + "_e ach", + "Ġ urge", + "Ġur ge", + "Ġurg e", + "de part", + "dep art", + "Ġdon ors", + "Ġdonor s", + "Ġ Au", + "ĠA u", + "Ġb illions", + "Ġbill ions", + "Ġbillion s", + "Ġbelong ing", + "_ age", + "_a ge", + "_ag e", + "_ Int", + "_I nt", + "_In t", + "Ġsub stances", + "Ġsubstance s", + "Ġsubst ances", + "m achine", + "ma chine", + "mach ine", + "! !!ĊĊ", + "!! !ĊĊ", + "!!! ĊĊ", + "!!!Ċ Ċ", + "Ġjson ify", + "ib bean", + "Ġ Cad", + "ĠC ad", + "ĠCa d", + "Ġ endTime", + "Ġend Time", + "Ġc ycling", + "Ġcy cling", + "Ġcycl ing", + "Ġcyc ling", + "Ġ UITextField", + "ĠUI TextField", + "ĠUIT extField", + "Ġle verage", + "Ġlever age", + "Ġleve rage", + "Ġvan illa", + "e at", + "ea t", + "L aunch", + "La unch", + "( pt", + "(p t", + "st ates", + "state s", + "stat es", + "sta tes", + "Ġ Controls", + "ĠControl s", + "ĠContr ols", + "Ġ Respons", + "ĠRes pons", + "ĠResp ons", + "Ġ Jake", + "ĠJ ake", + "ĠJa ke", + "ĠJak e", + "Ġa sleep", + "Ġas leep", + "fort unate", + ".next Line", + "Size Mode", + "ì Ŀ¼", + "ìĿ ¼", + "Testing Module", + "G erman", + "Ger man", + "ĠInvest ig", + ". reverse", + ".re verse", + ".rev erse", + "Ġ BACK", + "ĠB ACK", + "ĠBA CK", + "( DateTime", + "(Date Time", + "Ġnon profit", + "Ġ Expect", + "ĠEx pect", + "ĠExp ect", + "Ġt anto", + "Ġtan to", + "Ġtant o", + "' ]),", + "'] ),", + "']) ,", + "ĉ the", + "ĉt he", + "ĉth e", + "M ultiple", + "Multi ple", + "Mult iple", + "Multip le", + "(get Activity", + "_ WAIT", + "_W AIT", + "Ġj á", + "de cor", + "dec or", + "lev ance", + "Ġ GitHub", + "ĠGit Hub", + "m ination", + "min ation", + "mi nation", + "mina tion", + "_ quantity", + "_qu antity", + "_quant ity", + ". Scanner", + ".Sc anner", + ".Scan ner", + "ĠL ion", + "ĠLi on", + "éĶĻ è¯¯", + "Ġ dre", + "Ġd re", + "Ġdr e", + "Ġtan tra", + "Ġtant ra", + "Ġtantr a", + "Ġ contentType", + "Ġcontent Type", + "Ġ fid", + "Ġf id", + "Ġfi d", + "_ alt", + "_a lt", + "_al t", + "NS IndexPath", + "- pl", + "-p l", + "åĮ ĸ", + "Ġantib iot", + "t ables", + "table s", + "ta bles", + "tab les", + "tabl es", + "a cial", + "ac ial", + "aci al", + "acia l", + "Ġ Registry", + "ĠReg istry", + "ĠRegistr y", + "Ġo live", + "Ġol ive", + "Ġoli ve", + "i gers", + "ig ers", + "ige rs", + "iger s", + "Ġ subscriber", + "Ġsub scriber", + "Ġsubscri ber", + "Ġsubscribe r", + "_ pres", + "_p res", + "_pr es", + "_pre s", + "Ġ Syntax", + "ĠS yntax", + "ĠSy ntax", + "ĠSyn tax", + "Ġl overs", + "Ġlo vers", + "Ġlove rs", + "Ġlover s", + "Ġlov ers", + ". Byte", + ".B yte", + ".By te", + "ol ders", + "old ers", + "older s", + "_ forward", + "_for ward", + "al ways", + "C aption", + "Cap tion", + "Ca ption", + "Capt ion", + "P riv", + "Pr iv", + "Pri v", + "ĠT ampa", + "ĠTam pa", + "is ateur", + "-labelled by", + "Ġ ToString", + "ĠTo String", + "Ġ ìĤ¬", + "Ġì Ĥ¬", + "ĠìĤ ¬", + "Ġinit iated", + "Ġiniti ated", + "Ġinitiate d", + "W F", + "Ġinstitution al", + "in ject", + "Ġ Scr", + "ĠS cr", + "ĠSc r", + "Ġ doctrine", + "Ġdo ctrine", + "Ġdoctr ine", + "Ġsp acious", + "Ġspac ious", + "i sure", + "is ure", + "isu re", + "Ġ Ana", + "ĠA na", + "ĠAn a", + "\" time", + "ess aging", + "essa ging", + "Ġ cid", + "Ġc id", + "Ġci d", + "ĠN an", + "ĠNa n", + "Ġin complete", + "Ġincom plete", + "T AG", + "TA G", + "- build", + "-b uild", + "Dec ember", + "Ġres idual", + "Ġresid ual", + "( PDO", + "(P DO", + "Ġ Listen", + "ĠL isten", + "ĠList en", + "ĠLi sten", + "ĠLis ten", + "ĠListe n", + "Ġ glyph", + "Ġg lyph", + "Ġgly ph", + "Ġg aps", + "Ġgap s", + "Ġga ps", + "n ea", + "ne a", + ". Rect", + ".R ect", + ".Re ct", + ".Rec t", + "Ġs au", + "Ġsa u", + "ĠPhoto graph", + "ĠPhot ograph", + "Ġ executable", + "Ġexec utable", + "Ġexecut able", + "Ġ Expert", + "ĠEx pert", + "ĠExp ert", + "Co routine", + "Cor outine", + "_ sizes", + "_s izes", + "_size s", + "_si zes", + "Ġ NL", + "ĠN L", + ". isValid", + ".is Valid", + ") ;}Ċ", + "); }Ċ", + ");} Ċ", + "- reg", + "-r eg", + "-re g", + "Ġc iting", + "Ġcit ing", + "Ġci ting", + "c wd", + "cw d", + "ĠOtt awa", + "ĠB att", + "ĠBa tt", + "ĠBat t", + "Ġrenew able", + "Ġprelim inary", + "Ġas ylum", + "Ġw rist", + "Ġwr ist", + "Ġutil iz", + "Ġut iliz", + "Ġdet ention", + "F ast", + "Fa st", + "Ġ ange", + "Ġa nge", + "Ġan ge", + "Ġang e", + "incinn ati", + "Ġste ering", + "Ġsteer ing", + "Ġ NaN", + "ĠN aN", + "ĠNa N", + "i osity", + "ios ity", + "/ page", + "/p age", + "Ġ è¿", + "Ġè ¿", + "ster ol", + "ste rol", + "Ġdis g", + "Ġdi sg", + "( DB", + "(D B", + "Ġ DESCRIPTION", + "ĠDE SCRIPTION", + "ĠDESC RIPTION", + "Ġ _$", + "Ġ_ $", + "Ġob stacle", + "Ġobst acle", + "Ġb izarre", + "Ġex traction", + "Ġext raction", + "Ġextra ction", + "Ġextract ion", + "Ġextr action", + "_ expected", + "_ex pected", + "_exp ected", + "_expect ed", + "Ġ loses", + "Ġl oses", + "Ġlo ses", + "Ġlos es", + "Ġlose s", + "Ġ Celebr", + "ĠCele br", + "Ġhtml For", + "Ġexp loit", + "Ġexpl oit", + "Ġexplo it", + "олÑĮз ов", + "X YZ", + "XY Z", + "Ġm agnet", + "Ġmag net", + "Ġmagn et", + "am ped", + "amp ed", + "Ġ atoms", + "Ġat oms", + "Ġatom s", + "S ources", + "Source s", + "pect ives", + "pective s", + "Ñģ ли", + "Ñģл и", + "Ġ= čĊ", + "Ġd are", + "Ġda re", + "Ġdar e", + "ĠW alter", + "ĠWal ter", + "ĠWalt er", + "Ġ brightness", + "Ġb rightness", + "Ġbright ness", + "Ġ annotations", + "Ġan notations", + "Ġannotation s", + "Ġannot ations", + "ë ı", + "is ke", + "isk e", + "S chedule", + ". images", + ".image s", + ".im ages", + ".imag es", + "ross o", + "ros so", + "Ġ \"..", + "Ġ\" ..", + "Ġ\". .", + "g amma", + "ga mma", + "gam ma", + "Ġin structor", + "Ġinstr uctor", + "Ġinstruct or", + "Ġ overwrite", + "Ġover write", + "- am", + "-a m", + "Ġdevast ating", + "ĠSaint s", + "ĠSa ints", + "ĠSai nts", + "Ġ hs", + "Ġh s", + "Ġbon uses", + "Ġbonus es", + "$ output", + "$out put", + "i jd", + "ij d", + "(Action Event", + "m onitor", + "mon itor", + "Ġmatt ress", + "Jan uary", + ". jp", + ".j p", + "Ġcar acter", + "Ġcara cter", + "Ġcaract er", + "Ġim pose", + "Ġimp ose", + "_ rest", + "_re st", + "_r est", + "_res t", + "Ġ Signature", + "ĠSign ature", + "ĠSig nature", + "Ġcoron avirus", + "ãģ Ĭ", + "_ compare", + "_com pare", + "_comp are", + "Me asure", + "it ated", + "ita ted", + "itate d", + "itat ed", + "e lijk", + "el ijk", + "eli jk", + "i gos", + "ig os", + "igo s", + "e sar", + "es ar", + "esa r", + "Ġr ushed", + "Ġru shed", + "Ġrush ed", + "Ġrus hed", + "m etry", + "me try", + "met ry", + "_SE PARATOR", + "_ WE", + "_W E", + "_ ATTRIBUTE", + "_ATTR IBUTE", + "_ATTRIB UTE", + "Ġ yaml", + "Ġy aml", + "Ġya ml", + "Ġ specs", + "Ġsp ecs", + "Ġspec s", + "Ġspe cs", + "ĠR ah", + "ĠRa h", + "ph eric", + "pher ic", + "phe ric", + "ĠIn vestment", + "ĠInvest ment", + "ä ll", + "äl l", + "Ġappe aling", + "Ġappeal ing", + "Ġ viewport", + "Ġview port", + "ç ©", + "Ġ marginLeft", + "Ġmargin Left", + "Ġ subtract", + "Ġsub tract", + "Ġsubt ract", + "Ġ EDIT", + "ĠED IT", + "ĉ ArrayList", + "ĉArray List", + "gr ading", + "grad ing", + "gra ding", + "Ġ Failure", + "ĠF ailure", + "ĠFail ure", + "as per", + "asp er", + "E EK", + "EE K", + "( now", + "(n ow", + "(no w", + "< object", + "Ġ Alignment", + "ĠAl ignment", + "ĠAlign ment", + "ple ado", + "q tt", + "qt t", + "( ERROR", + "(ERR OR", + "Ġ INVALID", + "ĠIN VALID", + "Ġ userid", + "Ġuse rid", + "Ġuser id", + "r aises", + "ra ises", + "raise s", + "rais es", + "rai ses", + "I DI", + "ID I", + "Ġv ariance", + "Ġvar iance", + "Ġvari ance", + "Ġ Nil", + "ĠN il", + "ĠNi l", + "/ delete", + "/de lete", + "_ MAIN", + "_M AIN", + "_MA IN", + ". Token", + ".T oken", + ".To ken", + ". Category", + ".C ategory", + "> )Ċ", + ">) Ċ", + "C ollision", + "Coll ision", + "Ġ Greater", + "ĠG reater", + "ĠGreat er", + "ĠGre ater", + "ĠR acing", + "ĠRa cing", + "ĠRac ing", + "a lan", + "al an", + "ala n", + "Ġmon etary", + "Ġmonet ary", + ", new", + ",n ew", + "Ġ Sorry", + "ĠS orry", + "ĠSor ry", + ". Enable", + ".E nable", + ".En able", + "Ġ Instantiate", + "ĠIn stantiate", + "ĠInstant iate", + "o llen", + "ol len", + "oll en", + "olle n", + "ë© ´", + "Ġ Calling", + "ĠC alling", + "ĠCal ling", + "ĠCall ing", + "_ hour", + "_h our", + "A DA", + "AD A", + "Ġs hy", + "Ġsh y", + ") **", + ")* *", + "Ġ ==>", + "Ġ= =>", + "Ġ== >", + "Ġe special", + "Ġes pecial", + "Ġesp ecial", + "Ġespec ial", + "Ġ interpreted", + "Ġinterpret ed", + "Ġinterpre ted", + "! =\"", + "!= \"", + "Ġph armacy", + "Ġpharm acy", + "Ġpharmac y", + ". single", + ".s ingle", + ".sin gle", + ".si ngle", + "ĠC ialis", + "ĠCi alis", + "Ġp aras", + "Ġpar as", + "Ġpara s", + "Ġpa ras", + ". toUpperCase", + ".to UpperCase", + "Ġ Demon", + "ĠD emon", + "ĠDe mon", + "ĠDem on", + "ĠDemo n", + "Pr ime", + "Prim e", + "Pri me", + "Ġrank ings", + "Ġranking s", + "Add ing", + "Ad ding", + "_ HASH", + "_H ASH", + "_HAS H", + "Ġ Exam", + "ĠEx am", + "Ú ©", + "ĠV ictor", + "ĠVi ctor", + "ĠVict or", + "ĠVic tor", + "Ok ay", + "\" ];čĊ", + "\"] ;čĊ", + "\"]; čĊ", + "Ġ fortune", + "Ġfort une", + "Ġ FETCH", + "ĠF ETCH", + "exp and", + ". Interop", + ".Inter op", + "Ġb arn", + "Ġbar n", + "Ġba rn", + "æ ¶Ī", + "æ¶ Ī", + "ue vo", + "Ġspec ulation", + "âĶĢâĶĢ âĶĢâĶĢ", + "Ġ Nu", + "ĠN u", + "ĠBl ues", + "ĠBlue s", + "ĠBlu es", + "( fname", + "(f name", + "(fn ame", + "Ġin habit", + "Ġinhab it", + "Ġinh abit", + "Ġ\\ \"%", + "Ġ\\\" %", + "C ES", + "CE S", + "ul ario", + "ular io", + "ula rio", + "_ cr", + "_c r", + "Ġ validated", + "Ġvalid ated", + "Ġvalidate d", + "Ġvalida ted", + "Ġmid night", + "an king", + "ank ing", + "anki ng", + "Ġincor porate", + "Ġincorpor ate", + "Ġpur suit", + "Ġpurs uit", + "E XP", + "EX P", + "pr ime", + "prim e", + "pri me", + "P id", + "Pi d", + "- US", + "-U S", + "ĠN urs", + "ĠNu rs", + "ĠNur s", + "Ġ Wheel", + "ĠW heel", + "ĠWh eel", + "ĠWhe el", + "é ĺ", + "Ġ inp", + "Ġin p", + "Ġi np", + "Ġsupport ive", + ". member", + ".m ember", + ".mem ber", + "Ġ Shot", + "ĠS hot", + "ĠSh ot", + "ĠSho t", + ". CheckBox", + ".Check Box", + "Ġaff irm", + "Ġaf firm", + "T or", + "To r", + "Full Year", + "Ġconsider ably", + "c redentials", + "cred entials", + "credential s", + "_ opts", + "_op ts", + "_o pts", + "_opt s", + "R oll", + "Ro ll", + "Rol l", + "( round", + "(r ound", + "(ro und", + "Ġc oment", + "Ġcom ent", + "Ġco ment", + "Ġcome nt", + "_ UART", + "_U ART", + "Ġext ending", + "Ġextend ing", + "R G", + "result ado", + "i tu", + "it u", + ". getSession", + ".get Session", + ".getS ession", + "Ġat traction", + "Ġatt raction", + "Ġattr action", + "Ġattract ion", + "& D", + "$ html", + "$h tml", + "Ġ Jessica", + "ĠJess ica", + "Ġ Associate", + "ĠAssoci ate", + "ĠAssoc iate", + "a ñ", + "_ ed", + "_e d", + "ĠL ag", + "ĠLa g", + "Ġorig ins", + "Ġorigin s", + "( ))->", + "() )->", + "()) ->", + "add EventListener", + "IA LOG", + "IAL OG", + "åIJ ¦", + ". Compare", + ".Com pare", + ".Comp are", + "Al bum", + "ĠK u", + "< Q", + "ar gest", + "arg est", + "arge st", + "arges t", + "Ġpro long", + "Ġprol ong", + "Ġconfig urations", + "Ġconfiguration s", + "Ġconfigur ations", + "Ġacc identally", + "Ġaccident ally", + "Ġaccidental ly", + "_ photo", + "_ph oto", + "Ġ' ';čĊ", + "Ġ'' ;čĊ", + "Ġ''; čĊ", + "Ġ verse", + "Ġv erse", + "Ġver se", + "Ġvers e", + "B ob", + "Bo b", + "Ġf arming", + "Ġfar ming", + "Ġfarm ing", + "d elivery", + "del ivery", + "deliver y", + "ĠM ack", + "ĠMac k", + "ĠMa ck", + "Ġuse Selector", + ".bootstrap cdn", + "ke eping", + "keep ing", + "kee ping", + "e ny", + "en y", + ". upload", + ".up load", + "Ġ METHOD", + "ĠM ETHOD", + "ĠMETH OD", + "c reator", + "cre ator", + "creat or", + "< _", + "ĠE aster", + "ĠEast er", + "ĠEa ster", + ". --", + ".- -", + "UI Button", + "ãĤ ī", + "om eters", + "ome ters", + "omet ers", + "ometer s", + "Ġ shine", + "Ġsh ine", + "Ġshin e", + "Ġh ogy", + "Ġho gy", + "Ġhog y", + "\\ s", + "Ġh arness", + "Ġhar ness", + ". Cell", + ".C ell", + "Ġ lifting", + "Ġl ifting", + "Ġlif ting", + "Ġlift ing", + "Ġcomb ines", + "Ġcombine s", + "Ġcombin es", + "Ġ Occup", + "ĠOcc up", + "ĠOc cup", + "ex clude", + "exc lude", + "p atial", + "pat ial", + "Ġre spir", + "Ġres pir", + "Ġresp ir", + "_ fit", + "_f it", + "Ġf ifty", + "Ġfi fty", + "Ġfif ty", + "ĠM ol", + "ĠMo l", + "Ġt uned", + "Ġtu ned", + "Ġtun ed", + "Ġtune d", + "-d imensional", + "Ġ qs", + "Ġq s", + "Ġt ops", + "Ġto ps", + "Ġtop s", + "> \";ĊĊ", + ">\";Ċ Ċ", + ">\" ;ĊĊ", + ">\"; ĊĊ", + "quis ite", + "qui site", + "ch annels", + "chan nels", + "channel s", + "/ res", + "/r es", + "/re s", + "Ġ Analytics", + "ĠAn alytics", + "ĠAnaly tics", + ".app compat", + "/ to", + "/t o", + "Ġon Error", + "( attr", + "(at tr", + "(att r", + "I RM", + "IR M", + "Ġrag az", + "- as", + "-a s", + ". Second", + ".Se cond", + "ori ented", + "orient ed", + "Ġd onn", + "Ġdo nn", + "Ġdon n", + "Ġlight ning", + "f id", + "fi d", + "ĠP le", + "ĠPl e", + "ãģ¾ ãģĻ", + "t ro", + "tr o", + ". True", + ".Tr ue", + "O bservable", + "Observ able", + "× Ļ", + "um bing", + "umb ing", + "Ġpros pective", + "Ġprospect ive", + "- filter", + "-f ilter", + "Ġpurs uant", + "( points", + "(p oints", + "(point s", + "(po ints", + ". Bind", + ".B ind", + "Ġp alm", + "Ġpa lm", + "Ġpal m", + "clear fix", + "ö s", + "ĠG onz", + "ĠGo nz", + "ĠGon z", + "Ġwe aken", + "Ġweak en", + "D rive", + "Dr ive", + "en ido", + "eni do", + "l ld", + "ll d", + "o box", + "ob ox", + "obo x", + "an ean", + "ane an", + "G ot", + "Go t", + "ä¿ Ŀ", + "Reg ex", + "æ ĥ", + "Ġsa lad", + "Ġsal ad", + "Ġsala d", + "as sis", + "ass is", + "assi s", + "\" net", + "inherit Doc", + "Ġ RV", + "ĠR V", + "qu ier", + "qui er", + "Ġ clazz", + "Ġcl azz", + "Ġcla zz", + "ı ÅŁ", + "oster one", + "oste rone", + "Ġair line", + "Ġairl ine", + ".list dir", + "Ġdown loading", + "Ġdownload ing", + "ĠP alm", + "ĠPal m", + "ĠPa lm", + "w aukee", + "& lt", + ". BL", + ".B L", + "_ INLINE", + "_IN LINE", + "of fs", + "off s", + "< <(", + "<< (", + "_ news", + "_n ews", + "_new s", + "_ne ws", + "Ġch ase", + "Ġcha se", + "/ ><", + "/> <", + "Ġe uros", + "Ġeu ros", + "Ġeuro s", + "ĠEgypt ian", + "ĠSt ainless", + "_ BOOL", + "_BO OL", + "Ġ Guild", + "ĠG uild", + "ĠGu ild", + "ĠGui ld", + "ĠGuil d", + "ĠD ynam", + "ĠDy nam", + "ĠDyn am", + "[ indexPath", + "[index Path", + "Ġ ï", + "Ġmem orable", + "Ġmemor able", + "ĠCh ampion", + "ĠChamp ion", + "Resource Manager", + ". Login", + ".Log in", + ".Lo gin", + "Ġ Former", + "ĠFor mer", + "ĠForm er", + "y ped", + "ype d", + "yp ed", + "Ġl leg", + "Ġll eg", + "Ġlle g", + "; \",", + ";\" ,", + "D WORD", + "DW ORD", + "Ġtax i", + "Ġta xi", + "Ġb ombs", + "Ġbomb s", + "Ġbom bs", + "r ah", + "ra h", + ". tags", + ".t ags", + ".tag s", + ".ta gs", + "_ tests", + "_t ests", + "_test s", + "_te sts", + "s tones", + "st ones", + "ston es", + "stone s", + "sto nes", + "âĢĿ )", + "[ g", + "r type", + "rt ype", + "Ġ vu", + "Ġv u", + "Ġhost ile", + "Ġho stile", + "Ġhos tile", + "Ch ars", + "Char s", + "Cha rs", + "ĠPatri ots", + "ĠPatriot s", + "/ status", + "/s tatus", + "/st atus", + "/stat us", + "< B", + "Ġ Income", + "ĠIn come", + "ĠInc ome", + "ĠD ad", + "ĠDa d", + "Ġpat rol", + "_ CHANGE", + "_CH ANGE", + "_CHAN GE", + "Ġup graded", + "Ġupgrade d", + "Ġ china", + "Ġch ina", + "Ġchi na", + "Ġchin a", + "set q", + "Start ed", + "Star ted", + ".U ndef", + ".Un def", + "Ġ checksum", + "Ġcheck sum", + "Ġchecks um", + "Ġfrustr ated", + "{ o", + "Ġe nf", + "Ġen f", + "Ġ woods", + "Ġw oods", + "Ġwood s", + "Ġwo ods", + "Ġwoo ds", + "Ġ Anyone", + "ĠAny one", + "En code", + "Enc ode", + "ĠQt Widgets", + "a reas", + "are as", + "area s", + "Ġsh eer", + "Ġshe er", + "s ki", + "sk i", + "end point", + "_ Test", + "_T est", + "S oup", + "So up", + "Sou p", + "~~~~~~~~ ~~~~~~~~", + "( files", + "(f iles", + "(file s", + "(fi les", + "(fil es", + "ĉ ĉĉĉĉčĊ", + "ĉĉ ĉĉĉčĊ", + "ĉĉĉĉ ĉčĊ", + "ĉĉĉ ĉĉčĊ", + "ĉĉĉĉĉ čĊ", + ". spark", + ".s park", + ".sp ark", + "Ġvalue d", + "Ġval ued", + "Ġvalu ed", + "Ġ %Ċ", + "Ġ% Ċ", + ". controls", + ".control s", + "ĠXCTAssert Equal", + "Ġf ame", + "Ġfam e", + "Ġfa me", + "ĠR ic", + "ĠRi c", + "D OT", + "DO T", + "ĠAlbert a", + "ĠAlb erta", + "ä½ ¿", + "o sal", + "os al", + "osa l", + ".Web Controls", + "Ġ ------------", + "Ġ- -----------", + "Ġ-- ----------", + "Ġ---- --------", + "Ġ--- ---------", + "Ġ----- -------", + "Ġ---------- --", + "Ġ------ ------", + "Ġ-------- ----", + "Ġ------- -----", + "Ġ--------- ---", + "Ġ----------- -", + "Ġ Mis", + "ĠM is", + "ĠMi s", + "Ġ SYS", + "ĠS YS", + "ĠSY S", + "Non null", + "= item", + "=i tem", + "Ġ expire", + "Ġex pire", + "Ġexp ire", + "De code", + "Dec ode", + "_ operation", + "_op eration", + "_o peration", + "_oper ation", + "Ġ Validator", + "ĠValid ator", + ". CENTER", + ".C ENTER", + "uff s", + "uf fs", + "* m", + "Ġa vant", + "Ġav ant", + "Ġava nt", + "Ġavan t", + "æ¬ ¡", + "âĢľ You", + ". permission", + ".per mission", + ".perm ission", + ".. .)", + "... )", + "Ġ Lic", + "ĠL ic", + "ĠLi c", + "_ coords", + "_co ords", + "_coord s", + ". nombre", + ".n ombre", + ".nom bre", + "c lo", + "cl o", + ". Internal", + ".In ternal", + ".Int ernal", + ".Inter nal", + "Ġ Cho", + "ĠC ho", + "ĠCh o", + "_ sw", + "_s w", + "ĉ Il", + "ĉI l", + "c lk", + "cl k", + "Ġ castle", + "Ġc astle", + "Ġcas tle", + "Ġcast le", + "( layer", + "(l ayer", + "p it", + "pi t", + "Ġ guided", + "Ġgu ided", + "Ġguide d", + "Ġguid ed", + "Ġgui ded", + "Ġ âĸĪ", + "Ġâĸ Ī", + "Ġsup erb", + "Ġsuper b", + "Ġsup plements", + "Ġsupplement s", + "Ġsuppl ements", + "Ġsupp lements", + "_ cent", + "_c ent", + "_ce nt", + "Ġ peek", + "Ġpe ek", + "Ġpee k", + "IN ARY", + "INA RY", + ". ContentAlignment", + ".Content Alignment", + "f alls", + "fall s", + "fal ls", + "\" ));", + "\") );", + "\")) ;", + "W all", + "Wal l", + "Wa ll", + ") .čĊ", + "). čĊ", + "Ġ Danny", + "ĠD anny", + "ĠDan ny", + "ĠDann y", + "irm ingham", + "IAL IZ", + "( create", + "(c reate", + "\" In", + "\"I n", + "Service Provider", + "Ġpr iced", + "Ġprice d", + "Ġpri ced", + "m acro", + "ma cro", + "mac ro", + "a mac", + "am ac", + "ama c", + ". box", + ".b ox", + ".bo x", + "- ---Ċ", + "-- --Ċ", + "---- Ċ", + "--- -Ċ", + "ãĥ «", + "Ġ Suit", + "ĠS uit", + "ĠSu it", + "u rst", + "ur st", + "urs t", + "b ru", + "br u", + "ourn als", + "ournal s", + "num ero", + "numer o", + "_ _()Ċ", + "__ ()Ċ", + "__( )Ċ", + "__() Ċ", + "D as", + "Da s", + "ĠM itt", + "ĠMi tt", + "ĠMit t", + "u der", + "ud er", + "ude r", + "? \\", + "f u", + "[ B", + "Ġ: )ĊĊ", + "Ġ:) ĊĊ", + "Ġ:)Ċ Ċ", + "( inter", + "(int er", + "(in ter", + "br ains", + "bra ins", + "brain s", + "Ġatt itudes", + "Ġattitude s", + "Ver ify", + "Ġsign atures", + "Ġsignature s", + "ack Bar", + "Ġ gd", + "Ġg d", + "J ack", + "Ja ck", + "Jac k", + ". cat", + ".c at", + ".ca t", + "Ġ zz", + "Ġz z", + "w arf", + "wa rf", + "war f", + "F TER", + "FT ER", + "\" );ĊĊĊ", + "\");Ċ ĊĊ", + "\") ;ĊĊĊ", + "\");ĊĊ Ċ", + "\"); ĊĊĊ", + "A live", + "Al ive", + "Ali ve", + "I CLE", + "IC LE", + "Ġ Whatever", + "ĠWh atever", + "ĠWhat ever", + "Ġ outlined", + "Ġout lined", + "Ġoutline d", + "s prite", + "sp rite", + "spr ite", + "е в", + "еР²", + "_ AB", + "_A B", + "_ DEPTH", + "_DE PTH", + "Ġcr ushed", + "Ġcrush ed", + "Ġcru shed", + "Ġcrus hed", + "a aa", + "aa a", + "( ev", + "(e v", + "æľ º", + "An ti", + "Ant i", + "I CO", + "IC O", + "is EqualTo", + "isEqual To", + ". sun", + ".s un", + "i culo", + "ic ulo", + "s ale", + "sa le", + "sal e", + "_ hex", + "_h ex", + "_he x", + "Ġ Vk", + "ĠV k", + "ap tor", + "apt or", + "Un ion", + "Uni on", + "Ġ Discount", + "ĠDis count", + "ĠDisc ount", + "ĠDisco unt", + "l ista", + "li sta", + "list a", + "lis ta", + ".Undef Or", + "Ġ automation", + "Ġa utomation", + "Ġautom ation", + "Ġautomat ion", + "N or", + "No r", + "å¯ ¹", + "åı Ĥæķ°", + "åıĤ æķ°", + "Ġre flex", + "Ġref lex", + "Ġrefl ex", + "ĠLa ure", + "ĠLaur e", + "ĠLau re", + ".showMessage Dialog", + ". temp", + ".t emp", + ".te mp", + ".tem p", + "Ġ akan", + "Ġa kan", + "Ġak an", + "Ġaka n", + "Ġ_ _____", + "Ġ__ ____", + "Ġ___ ___", + "Ġ____ __", + "Ġ_____ _", + ".Is True", + "A RED", + "AR ED", + "ARE D", + "a gle", + "ag le", + "E nergy", + "En ergy", + "Ġquant ities", + "âĢĻ Ã©", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "Ġcitizens hip", + "Ġcitizen ship", + "m outh", + "mo uth", + "Ġin appropriate", + "Ġ Outdoor", + "ĠOut door", + "White Space", + "An onymous", + "lo ads", + "load s", + "webElement Properties", + "T en", + "Te n", + "Ġacc idents", + "Ġaccident s", + "Ġ advertisement", + "Ġad vertisement", + "Ġadvertis ement", + "Ġadvertise ment", + "ĠY emen", + "ĠYe men", + "( call", + "(c all", + "(cal l", + "(ca ll", + "Ġsl avery", + "Ġslave ry", + "Ġsla very", + "Ġslav ery", + "Ñģ п", + "ĠL am", + "ĠLa m", + "_ BITS", + "_B ITS", + "_BIT S", + "o mega", + "om ega", + "ome ga", + "ĠO le", + "ĠOl e", + "Ġkid n", + "Ġki dn", + "_ An", + "_A n", + "ĠR aid", + "ĠRa id", + "ĠRai d", + "C reation", + "Cre ation", + "Creat ion", + "s aved", + "save d", + "sa ved", + "sav ed", + "Ġpro port", + "Ġprop ort", + "Ġpropor t", + "W ARNING", + "WAR NING", + "WARN ING", + "\\ P", + "Ġ pwd", + "Ġp wd", + "Ġpw d", + "Data Reader", + "is cher", + "isc her", + "ische r", + "isch er", + "ad eon", + "ade on", + "Ġ Predict", + "ĠP redict", + "ĠPre dict", + "ĠPred ict", + "Ġreason ing", + "Ġdestroy ing", + "H el", + "He l", + "* d", + "ĠLeg isl", + "_ Pr", + "_P r", + "ĉ ĉĉĠĠĠĠĠĠĠ", + "ĉĉ ĉĠĠĠĠĠĠĠ", + "ĉĉĉ ĠĠĠĠĠĠĠ", + "ĉĉĉĠĠĠ ĠĠĠĠ", + "ĉĉĉĠ ĠĠĠĠĠĠ", + "ĉĉĉĠĠ ĠĠĠĠĠ", + "ĉĉĉĠĠĠĠ ĠĠĠ", + "ĉĉĉĠĠĠĠĠ ĠĠ", + "ĉĉĉĠĠĠĠĠĠ Ġ", + "Ġsym path", + "Ġsymp ath", + "Ġch ess", + "Ġche ss", + "Ġ mam", + "Ġm am", + "Ġma m", + ": hover", + ":h over", + "Ġcon verts", + "Ġconvert s", + "Ġconv erts", + "Ġconver ts", + "Ġp ela", + "Ġpe la", + "Ġpel a", + "Ġpro gression", + "Ġprogress ion", + "Ġprog ression", + "Ġ\" _\"", + "Ġ\"_ \"", + "ĠG ill", + "ĠGi ll", + "ĠGil l", + "ĉ show", + "ĉs how", + "ĉsh ow", + "Ġsupposed ly", + "ac curacy", + "acc uracy", + "accur acy", + "e lin", + "el in", + "eli n", + "Ġunf olding", + "Ġunfold ing", + "Ġ Hyper", + "ĠH yper", + "ĠHy per", + "ĠHyp er", + "Ġw anna", + "Ġwann a", + "Ġwan na", + "Ġ ups", + "Ġu ps", + "Ġup s", + "( #", + "ĠC riminal", + "ĠCr iminal", + "( Point", + "(P oint", + "at Lng", + "act ly", + "Ġcontract ors", + "Ġcontr actors", + "Ġcontractor s", + "Ġcontra ctors", + "' ]}", + "'] }", + "draul ic", + "ód igo", + "Ġ TT", + "ĠT T", + "Ġ Wide", + "ĠW ide", + "ĠWi de", + "ĠWid e", + "Ġ ARG", + "ĠA RG", + "ĠAR G", + "_ ic", + "_i c", + "FLAG S", + "S chool", + "Sch ool", + "Ġcl earing", + "Ġclear ing", + "Ġcle aring", + "- being", + "-b eing", + "-be ing", + "={ [", + ", const", + "man ent", + "Over lay", + "( '\"", + "(' \"", + "éĩ ı", + "Ġ Timestamp", + "ĠT imestamp", + "ĠTime stamp", + "Ġm ailing", + "Ġma iling", + "Ġmail ing", + "Ġmai ling", + "Ġ Cake", + "ĠC ake", + "ĠCa ke", + ". That", + ".T hat", + ".Th at", + "Ġmed itation", + "q p", + "Ġ empresa", + "Ġemp resa", + "Ġempres a", + "ĠL ions", + "ĠLi ons", + "ĠLion s", + "Ġw eld", + "Ġwe ld", + "Ġwel d", + "Ġ LinkedIn", + "ĠLinked In", + "Ġc ush", + "Ġcu sh", + "Ġcus h", + "Ġ genome", + "Ġge nome", + "Ġgen ome", + "Ġgenom e", + ". IndexOf", + ".Index Of", + "a gain", + "ag ain", + "aga in", + "Ġ fallback", + "Ġf allback", + "Ġfall back", + "Ġc amping", + "Ġcamp ing", + "Ġcam ping", + "r edd", + "re dd", + "red d", + "-strip ed", + "-str iped", + "Ġ dv", + "Ġd v", + "Fe bruary", + "Feb ruary", + "Ġ Proxy", + "ĠPro xy", + "ĠPr oxy", + "u sk", + "us k", + "Ġd iesel", + "Ġdi esel", + "Ġdie sel", + "Ġdies el", + "Ġdiese l", + "W RITE", + "WR ITE", + "RE AK", + "REA K", + "L orem", + "Lo rem", + ". Invoke", + ".In voke", + ".Inv oke", + "- div", + "-d iv", + "-di v", + "Inter ceptor", + "Ġ DH", + "ĠD H", + "i ales", + "ial es", + "ia les", + "iale s", + "Ġvill ages", + "Ġvillage s", + "Ġvilla ges", + "Ø ´", + "Ġ ENV", + "ĠE NV", + "ĠEN V", + "S ys", + "Sy s", + ". XR", + ".X R", + "Ġpo em", + "à Ĥ", + "c ade", + "ca de", + "cad e", + "p lots", + "pl ots", + "plot s", + "Ġ {(", + "Ġ{ (", + ". git", + ".g it", + "/ svg", + "/s vg", + "n cmp", + "nc mp", + "Ġ Äį", + "ĠÄ į", + "a ines", + "ain es", + "ai nes", + "aine s", + "åĩ ½æķ°", + "åĩ½ æķ°", + "Ġ ()ĊĊ", + "Ġ( )ĊĊ", + "Ġ() ĊĊ", + "Ġ()Ċ Ċ", + "op sis", + "ops is", + "Ġ Relationship", + "ĠRel ationship", + "ĠRelations hip", + "ĠRelation ship", + "_ aut", + "_a ut", + "Ġ Bomb", + "ĠB omb", + "ĠBo mb", + "ĠBom b", + "ĉ com", + "ĉc om", + "* sizeof", + "*size of", + "off icial", + "_ payload", + "_p ayload", + "_pay load", + "ĉ ĉĉĉĉĠĠ", + "ĉĉ ĉĉĉĠĠ", + "ĉĉĉĉ ĉĠĠ", + "ĉĉĉ ĉĉĠĠ", + "ĉĉĉĉĉ ĠĠ", + "ĉĉĉĉĉĠ Ġ", + ". manager", + ".m anager", + ".man ager", + ".manage r", + "Ġ Around", + "ĠA round", + "ĠAr ound", + "ĉ send", + "ĉs end", + "ĉse nd", + "Ġ Exercise", + "ĠEx ercise", + "Ġ Billy", + "ĠB illy", + "ĠBill y", + "ĠBil ly", + "i vi", + "iv i", + "Ġne eding", + "Ġneed ing", + "_ urls", + "_url s", + "_ur ls", + "_ tasks", + "_t asks", + "_task s", + "ĠH em", + "ĠHe m", + "Ġ tearDown", + "Ġte arDown", + "Ġtear Down", + "en crypt", + "enc rypt", + ". tie", + ".t ie", + "Ġ asm", + "Ġa sm", + "Ġas m", + "I CH", + "IC H", + "ĠCGRect Make", + "ìĦ ±", + "u long", + "ul ong", + "ulo ng", + "Ġ itr", + "Ġit r", + "Ġi tr", + "Ġ GST", + "ĠG ST", + "ĠGS T", + "Ġoffer ings", + "Ġoffering s", + "r obe", + "ro be", + "rob e", + "E EE", + "EE E", + "oper ators", + "operator s", + "_ PROP", + "_P ROP", + "_PRO P", + "_PR OP", + "in dent", + "ind ent", + "inde nt", + "inden t", + "A DE", + "AD E", + "o rf", + "or f", + "ë IJ", + "Ġbl essed", + "Ġbless ed", + "v ascular", + "vas cular", + "Ġcon oc", + "Ġco noc", + "H appy", + "Ha ppy", + "B ridge", + "Br idge", + "il itation", + "ilit ation", + "j oint", + "join t", + "jo int", + "Ġ Administr", + "ĠAdmin istr", + "- transform", + "-trans form", + "Ġmean time", + "Ġmeant ime", + "/ K", + "ĠBed room", + "Ġr igid", + "Ġrig id", + "Ġri gid", + "Ġb rowsers", + "Ġbrowser s", + "Ġbrows ers", + "Ġbrowse rs", + "EM PTY", + "EMP TY", + ". Serialize", + ".S erialize", + ".Serial ize", + "_ ED", + "_E D", + "Ġst itch", + "Ġ jan", + "Ġj an", + "Ġja n", + "el lt", + "ell t", + "Ġ brace", + "Ġb race", + "Ġbr ace", + "Ġbra ce", + "Ġt rails", + "Ġtr ails", + "Ġtrail s", + "Ġtra ils", + "Ġtrai ls", + "p ublished", + "publish ed", + "å¯Ĩ çłģ", + "} ')Ċ", + "}' )Ċ", + "}') Ċ", + "Ġac ids", + "Ġacid s", + "Ġ !!!", + "Ġ! !!", + "Ġ!! !", + "_ direct", + "_d irect", + "_dir ect", + "_di rect", + "> ());Ċ", + ">( ));Ċ", + ">() );Ċ", + ">()) ;Ċ", + "a jÄħ", + "aj Äħ", + "_O CC", + "_OC C", + "Ġplan ets", + "Ġplane ts", + "Ġplanet s", + "Ġpla nets", + "æ Ł¥", + "æŁ ¥", + "ĠDub lin", + "Ġ serie", + "Ġs erie", + "Ġse rie", + "Ġser ie", + "Ġseri e", + ". printf", + ".print f", + "de ep", + "dee p", + "` )", + "Ġ \\$", + "Ġ\\ $", + "Ġ μ", + "ĠÎ ¼", + "_ VIDEO", + "_V IDEO", + "end ors", + "endor s", + "endo rs", + "Ġ Crypto", + "ĠC rypto", + "ĠCrypt o", + "ĠCry pto", + "F ar", + "Fa r", + ". Transparent", + ".Trans parent", + ". TR", + ".T R", + "i asm", + "ia sm", + "ias m", + "_ training", + "_tr aining", + "_train ing", + "_tra ining", + "Ġte aches", + "Ġteach es", + "Ġtea ches", + "ĠB elt", + "ĠBe lt", + "ĠBel t", + "Ġlimit ing", + "Ġlim iting", + "ĠK ath", + "ĠKat h", + "ĠKa th", + "Ġ IndexPath", + "ĠIndex Path", + "Ġachie vements", + "Ġachieve ments", + "Ġachievement s", + "Ġse rá", + "Ġser á", + "interop Require", + "Ġd isse", + "Ġdis se", + "Ġdi sse", + "Ġdiss e", + ". If", + ".I f", + "ar ming", + "arm ing", + "uls ion", + "P o", + "_ DETAIL", + "_DE TAIL", + "_DET AIL", + "Prot otype", + "Proto type", + "Ġ CAL", + "ĠC AL", + "ĠCA L", + "Ġag rees", + "Ġagre es", + "Ġagree s", + "Ġagr ees", + ". vo", + ".v o", + ".Execute NonQuery", + "Ġ Topic", + "ĠT opic", + "ĠTo pic", + "ĠTop ic", + "Ġ' {}", + "Ġ'{ }", + "A rm", + "Ar m", + "Ġ ecc", + "Ġe cc", + "Ġec c", + "M ag", + "Ma g", + "Ġ serialized", + "Ġs erialized", + "Ġser ialized", + "Ġserial ized", + "Ġserialize d", + "ĉ conn", + "ĉc onn", + "ĉcon n", + "c ached", + "ca ched", + "cache d", + "cac hed", + "= tf", + "=t f", + "Ġ ByteArray", + "ĠByte Array", + "prot obuf", + "proto buf", + "var char", + "ĉ ASSERT", + "ĉA SSERT", + "Ġ liste", + "Ġl iste", + "Ġli ste", + "Ġlist e", + "Ġlis te", + "_ trigger", + "_tr igger", + "_tri gger", + "· ¸", + "F eel", + "Fe el", + "Fee l", + "T ahoma", + "Ġ Lik", + "ĠL ik", + "ĠLi k", + "Ġ structured", + "Ġstruct ured", + "Ġstructure d", + "erg us", + ". Initial", + ".In itial", + ".Init ial", + "_ ge", + "_g e", + "cl js", + ". contact", + ".cont act", + "Ġand ere", + "Ġan dere", + "Ġander e", + "$ stmt", + "_ CURRENT", + "_C URRENT", + "Ġ Discover", + "ĠDis cover", + "ĠDisc over", + "ĠDisco ver", + "$ res", + "$r es", + "form atter", + "for matter", + "format ter", + "H a", + "van gst", + "vang st", + "Ġe merge", + "Ġem erge", + "Ġemerg e", + "ãĢĤ âĢĿ", + "ĠC abinet", + "ĠCabin et", + "ĠCab inet", + "- square", + "-s quare", + "éĥ ¨", + "Ġ rage", + "Ġr age", + "Ġra ge", + "Ġrag e", + "Ġ AJ", + "ĠA J", + "Ġ VT", + "ĠV T", + "sh adow", + "ĠFa ith", + "e names", + "en ames", + "ename s", + "ena mes", + "p retty", + "pr etty", + "pre tty", + "pret ty", + "h asil", + "ha sil", + "has il", + "p arty", + "par ty", + "part y", + "Ġ varchar", + "Ġvar char", + "Ġf otos", + "Ġfo tos", + "Ġfoto s", + "Ġfot os", + "Ġa lum", + "Ġal um", + "ĠBel gium", + "ĠBelg ium", + ". ylabel", + ".y label", + "Ġ dej", + "Ġd ej", + "Ġde j", + "_ numbers", + "_num bers", + "_number s", + "Ġ hu", + "Ġh u", + ".set Adapter", + "Ġ Usually", + "ĠUs ually", + "( sample", + "(s ample", + ". Shared", + ".Sh ared", + "Ġbo oked", + "Ġbook ed", + "Ġboo ked", + "Ġ> >=", + "Ġ>> =", + "Ġmin erals", + "Ġmineral s", + "Ġminer als", + "\" > < ?=", + "\">", + "'] )->", + "']) ->", + "p rog", + "pr og", + "pro g", + "b oo", + "bo o", + "_ md", + "_m d", + "_ pack", + "_p ack", + "_pa ck", + "( express", + "(ex press", + "(exp ress", + "(expr ess", + "u tz", + "ut z", + "\\ Auth", + ", id", + ",i d", + "ĠCh ile", + "ĠChi le", + "act ice", + "actic e", + "Ġrec ruitment", + "Ġrecruit ment", + "Ġ poses", + "Ġp oses", + "Ġpos es", + "Ġpo ses", + "Ġpose s", + "Ġvulner ability", + "inst anc", + "o rum", + "or um", + "oru m", + "d ess", + "de ss", + "des s", + "Ġ xl", + "Ġx l", + "%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%", + "( fig", + "(f ig", + "(fi g", + "Ġde leting", + "Ġdel eting", + "Ġdelet ing", + "Ġdele ting", + ". del", + ".d el", + ".de l", + ") ')Ċ", + ")' )Ċ", + "Ġ Weekly", + "ĠWeek ly", + "? ??", + "?? ?", + "( strcmp", + "(str cmp", + "s mith", + "sm ith", + "Ġpurs uing", + "- so", + "-s o", + "Ġ Apps", + "ĠA pps", + "ĠApp s", + "ĠAp ps", + "/ 'Ċ", + "/' Ċ", + "Ġde cis", + "Ġdec is", + "F ORE", + "FO RE", + "FOR E", + "Every one", + "Ġl anes", + "Ġla nes", + "Ġlane s", + "Ġlan es", + "V irtual", + "Vir tual", + ". attach", + ".at tach", + ".att ach", + "( Log", + "(L og", + "ĠMed icaid", + "ĠMedic aid", + "( Path", + "(P ath", + "ĠTur ner", + "ĠTurn er", + "/ application", + "/app lication", + "/ap plication", + "Ġ portrait", + "Ġport rait", + "Ġpor trait", + "Ġop pose", + "Ġopp ose", + "Ġoppos e", + "check out", + "Ġfin ishes", + "Ġfinish es", + "_ ME", + "_M E", + "Bar rier", + "S ong", + "So ng", + "Son g", + "V AR", + "VA R", + "Ear lier", + "r ella", + "re lla", + "rel la", + "rell a", + "Ġh ast", + "Ġhas t", + "Ġha st", + "a zar", + "az ar", + "aza r", + "Ġp ulls", + "Ġpull s", + "Ġpul ls", + "n gx", + "ng x", + "Ġins piring", + "Ġinspir ing", + "Ġinsp iring", + "Ñĥ Ñİ", + "- direction", + "-d irection", + "-direct ion", + "-dir ection", + "-di rection", + "Ġexplos ive", + "Ġ createdAt", + "Ġcreated At", + "s to", + "st o", + "Ġw heat", + "Ġwh eat", + "Ġwhe at", + "Ġ Built", + "ĠB uilt", + "ĠBu ilt", + "' ai", + "'a i", + "Ġ tracked", + "Ġtr acked", + "Ġtrack ed", + "h ammad", + "ham mad", + "RowAt IndexPath", + "_ heap", + "_he ap", + "D ue", + "Du e", + "Ġconn ects", + "Ġconnect s", + ". publish", + ".p ublish", + ".pub lish", + "e mu", + "em u", + "Ġb ullets", + "Ġbul lets", + "Ġbull ets", + "Ġbullet s", + "B AR", + "BA R", + "o late", + "ol ate", + "ola te", + "Ġintern ally", + "Ġinternal ly", + "Ġc atching", + "Ġcatch ing", + "Ġcat ching", + "- password", + "-p assword", + "-pass word", + "ou ched", + "ouch ed", + "æĢ §", + "e ous", + "eo us", + "Ġx range", + "Ġxr ange", + "Q uality", + "Qu ality", + "Qual ity", + "v v", + "Man age", + "Ma nage", + "Mana ge", + "( ($", + "(( $", + "ace ments", + "ac ements", + "acement s", + "ĠBr others", + "ĠBro thers", + "ĠBrother s", + "Ġ HEAD", + "ĠHE AD", + "Ġ Unsupported", + "ĠUn supported", + "ĠUns upported", + "s an", + "sa n", + "e si", + "es i", + "* **Ċ", + "** *Ċ", + "*** Ċ", + "Ġadapt ation", + "Ġ Worker", + "ĠWork er", + "ĠWor ker", + "' ]/", + "'] /", + ".save fig", + "( trans", + "(t rans", + "(tr ans", + "Ø ¬", + "n ee", + "ne e", + "C orrect", + "Cor rect", + ".. .\")Ċ", + "... \")Ċ", + "...\" )Ċ", + "Ġsubmit ting", + "- path", + "-p ath", + "ĉ last", + "ĉl ast", + "is san", + "iss an", + "issa n", + ". xlabel", + ".x label", + "Ġ Separ", + "ĠS epar", + "ĠSe par", + "ĠSep ar", + "/ no", + "/n o", + "_ best", + "_b est", + "_be st", + "ĠM ills", + "ĠMill s", + "ĠMil ls", + "_ sock", + "_s ock", + "_so ck", + "_soc k", + "( flag", + "(f lag", + "(fl ag", + "Ġdest inations", + "Ġdestination s", + "Ġdestin ations", + "em ption", + "emp tion", + "empt ion", + "Ġ FAIL", + "ĠF AIL", + "ĠFA IL", + "å ĴĮ", + "åĴ Į", + "Ġ rp", + "Ġr p", + "f act", + "fa ct", + "fac t", + "ĉ len", + "ĉl en", + "D AY", + "DA Y", + "Ġse iz", + "Ġsei z", + "_ dst", + "_d st", + "_ds t", + "l ip", + "li p", + ". Linear", + ".L inear", + ".Line ar", + "Ġ Basket", + "ĠB asket", + "ĠBas ket", + "$ t", + "$ i", + "- brand", + "-b rand", + "-br and", + "Ġ Neil", + "ĠN eil", + "ĠNe il", + "Ġ Eq", + "ĠE q", + "Ġt hou", + "Ġth ou", + "Ġtho u", + "o gene", + "og ene", + "ogen e", + "oge ne", + "Ġscholar ship", + "Ġscholars hip", + "æĽ ´", + "Ġs wo", + "Ġsw o", + "ag inator", + "agina tor", + "e ni", + "en i", + "( book", + "(b ook", + "Ġ blink", + "Ġb link", + "Ġbl ink", + "Ġbli nk", + "t hus", + "th us", + "Ġ cancellationToken", + "Ġc ancellationToken", + "Ġcancell ationToken", + "Ġcancellation Token", + "ĠPalestin ians", + "ĠPalestinian s", + "Ġprof itable", + "Ġprofit able", + "Ġback pack", + "en son", + "ens on", + "enso n", + "< Long", + " < /", + "_ WORD", + "_W ORD", + "\\M igrations", + "\\Migration s", + "Ġ ENABLE", + "ĠEN ABLE", + "_PARAM ETER", + "ĠB ishop", + "ĠBi shop", + "ĠBis hop", + ". subject", + ".sub ject", + "il las", + "ill as", + "illa s", + ". matrix", + ".m atrix", + ".mat rix", + "urre nces", + "urrenc es", + "urr ences", + "urrence s", + "* y", + "Ġcost ly", + "Ġ Chuck", + "ĠCh uck", + "ĠChu ck", + "Ġc loses", + "Ġcl oses", + "Ġclose s", + "Ġclos es", + "Ġclo ses", + "ĠM ight", + "ĠMi ght", + "ĠMig ht", + "- store", + "-st ore", + "Ġ mall", + "Ġm all", + "Ġma ll", + "Ġmal l", + "i eten", + "ie ten", + "iet en", + "iete n", + ". Abs", + ".A bs", + ".Ab s", + "Ġcou pled", + "Ġcouple d", + "Ġcoup led", + ". basic", + ".b asic", + ".ba sic", + "Ġ ::::::::", + "Ġ: :::::::", + "Ġ:: ::::::", + "Ġ::: :::::", + "M aker", + "Make r", + "Ma ker", + "c annot", + "can not", + "Ġ ach", + "Ġa ch", + "Ġac h", + "ĠE li", + "ĠEl i", + "âĪ Ĵ", + "o rna", + "or na", + "orn a", + "Ġ cps", + "Ġc ps", + "Ġcp s", + "Ġthere of", + "Ġther eof", + "Ġ@ {", + "Ġ NSMutableArray", + "ĠNSMutable Array", + "Î ½", + "pro ductive", + "product ive", + "prod uctive", + "S quare", + "tem pts", + "temp ts", + "tempt s", + "Ġelim inated", + "Ġeliminate d", + "Ġelimin ated", + "< M", + "Ġcons ervatives", + "Ġconserv atives", + "Ġconservative s", + "ĠS urg", + "ĠSur g", + "ĠSu rg", + ". par", + ".p ar", + ".pa r", + "ĠB uch", + "ĠBu ch", + "* b", + "F ort", + "For t", + "Fo rt", + "Col our", + "Ġ Chi", + "ĠC hi", + "ĠCh i", + "e dic", + "ed ic", + "edi c", + "> true", + "ĠN YC", + "ĠNY C", + "Ġb ored", + "Ġbo red", + "Ġbor ed", + "Ġbore d", + "Ġ Detect", + "ĠD etect", + "ĠDet ect", + "Ġapp ar", + "Ġap par", + "Ġje ans", + "Ġjean s", + "Ġ Tak", + "ĠT ak", + "ĠTa k", + "I OD", + "IO D", + "ĠH orse", + "ĠHor se", + "( FILE", + "(F ILE", + "( ?", + "r ique", + "ri que", + "opt imizer", + "optim izer", + "optimize r", + "n at", + "na t", + "lo ys", + "loy s", + "ĉ Token", + "ĉT oken", + "oub ted", + "u ess", + "ue ss", + "ues s", + "oc oa", + "oco a", + "Data Member", + "_ POWER", + "_P OWER", + "_PO WER", + "class List", + "Push Button", + "Ġ WiFi", + "ĠWi Fi", + ". Stream", + ".St ream", + ".Str eam", + ". guild", + ".g uild", + ".gui ld", + "Ġn og", + "Ġno g", + "ĠPort ugal", + "ĠPortug al", + "ĠUn ter", + "ĠUnt er", + "Pr imitive", + "Prim itive", + "b oss", + "bo ss", + "bos s", + "ĠDe utsch", + "Ġer otic", + "Ġerot ic", + "Ġero tic", + "Ġ strconv", + "Ġstr conv", + ".Try Parse", + "Ġ grams", + "Ġg rams", + "Ġgr ams", + "Ġgram s", + "Ġgra ms", + ". Success", + ".S uccess", + "_ pk", + "_p k", + "ĠHar vey", + "-m inded", + "-min ded", + ". country", + ".c ountry", + ".count ry", + "[ ]\"", + "[] \"", + "Ġ angel", + "Ġan gel", + "Ġang el", + "Ġange l", + "Ġbe ats", + "Ġbeat s", + "ĠV or", + "ĠVo r", + "i lio", + "il io", + "ili o", + ". master", + ".m aster", + ".mas ter", + ".ma ster", + "s omething", + "some thing", + "som ething", + "Ġ PACK", + "ĠP ACK", + "ĠPA CK", + "ĠPAC K", + "( if", + "(i f", + "Request Body", + "Ġ antes", + "Ġan tes", + "Ġant es", + "Ġante s", + "/ widget", + "/w idget", + "Ġ modo", + "Ġm odo", + "Ġmod o", + "Ġmo do", + "Ġ AW", + "ĠA W", + "f inder", + "find er", + "fin der", + "fi nder", + "Ġ optimized", + "Ġopt imized", + "Ġoptim ized", + "Ġoptimize d", + "Ġmiss iles", + "Ġmissile s", + "N B", + "ĉ internal", + "ĉint ernal", + "ĉin ternal", + "ĉinter nal", + "t ex", + "te x", + "ĠS ri", + "ĠSr i", + "Ġdam aging", + "Ġ Mais", + "ĠM ais", + "ĠMa is", + "ĠMai s", + "- Allow", + "-Al low", + "Ġ Zh", + "ĠZ h", + "- alt", + "-a lt", + "-al t", + "Ġ ));ĊĊ", + "Ġ) );ĊĊ", + "Ġ)) ;ĊĊ", + "Ġ));Ċ Ċ", + "Ġ)); ĊĊ", + "è ī", + "Ġinflu ences", + "Ġinfluence s", + "Ġc atal", + "Ġca tal", + "Ġcat al", + "Ġcata l", + "_ REGISTER", + "_REG ISTER", + "ĠAPI s", + "ĠAP Is", + "-cent ury", + "Ġ biology", + "Ġb iology", + "Ġbi ology", + "Ġbio logy", + "Ġ Actual", + "ĠAct ual", + "ĠAc tual", + "Ġ heels", + "Ġhe els", + "Ġheel s", + "TR ACE", + "TRA CE", + "_ DIG", + "_D IG", + "_DI G", + "D ataset", + "Data set", + "Dat aset", + "Datas et", + "ĠM atter", + "ĠMat ter", + "ĠMatt er", + "ĠMatte r", + "Ġ classifier", + "Ġclass ifier", + ".w ikipedia", + "ĠRo gers", + "ĠRog ers", + "ĠRoger s", + "Ġdon ated", + "Ġdonate d", + "raw ler", + "rawl er", + "e nen", + "en en", + "ene n", + "Ġcas inos", + "Ġcasino s", + "Ġcasi nos", + "or tal", + "ort al", + "orta l", + "Ġp rive", + "Ġpr ive", + "Ġpriv e", + "Ġpri ve", + "s pe", + "sp e", + "du cers", + "duc ers", + "duce rs", + "ducer s", + ". ep", + ".e p", + "Ġgr asp", + "Ġgra sp", + "Ġgras p", + "ac ji", + "Ġd airy", + "Ġda iry", + "Ġdai ry", + "Ġdair y", + "Ġb uses", + "Ġbu ses", + "Ġbus es", + ". comm", + ".c omm", + ".com m", + ".co mm", + ". ins", + ".in s", + ".i ns", + "Ġ IRS", + "ĠI RS", + "ĠIR S", + "Ġ Beer", + "ĠB eer", + "ĠBe er", + "ĠBee r", + "a dc", + "ad c", + "o ard", + "oa rd", + "_ MET", + "_M ET", + "_ME T", + "Ġ' +'", + "Ġ'+ '", + "r ans", + "ra ns", + "ran s", + "Ġk inda", + "Ġkind a", + "Ġki nda", + "Ġkin da", + "Ġ âĶĤ", + "ĠâĶ Ĥ", + "ĠM aur", + "ĠMa ur", + "а г", + "аР³", + "Ġband width", + "i bus", + "ib us", + "ibu s", + "Ġ Different", + "ĠD ifferent", + "( mat", + "(m at", + "Ġ Resume", + "ĠRe sume", + "ĠRes ume", + "_ UNS", + "_U NS", + "_UN S", + "est ablish", + "Ġfon ction", + "Sub scription", + "_ company", + "_com pany", + "_comp any", + "Ġ lightly", + "Ġl ightly", + "Ġlight ly", + ". confirm", + ".con firm", + ".conf irm", + ". yaml", + ".y aml", + "Ġ Boost", + "ĠBo ost", + "ĠBoo st", + "Com merce", + "Comm erce", + "- template", + "-t emplate", + "-temp late", + "_ DELAY", + "_DE LAY", + "_DEL AY", + "Ġ HI", + "ĠH I", + "Ġn avig", + "Ġna vig", + "Ġnav ig", + "( Sender", + "(S ender", + "Ġ HS", + "ĠH S", + "_ \"+", + "_\" +", + "Ġ REQUEST", + "ĠRE QUEST", + "ĠREQ UEST", + "Ġ wifi", + "Ġw ifi", + "Ġwi fi", + "= \"\"Ċ", + "=\" \"Ċ", + "=\"\" Ċ", + "] )->", + "]) ->", + "])- >", + "Ġr ope", + "Ġro pe", + "Ġrop e", + "Ġvi olated", + "Ġviol ated", + "Ġviolate d", + "Ġgl ance", + "ĠK urd", + "ĠKur d", + "ĠKu rd", + "Ġ è®", + "Ġè ®", + "d eck", + "de ck", + "dec k", + "Ġ ISBN", + "ĠIS BN", + "Ġin fect", + "Ġinf ect", + "Ġ Foo", + "ĠF oo", + "ĠFo o", + "Ġ getter", + "Ġg etter", + "Ġget ter", + "Ġ tener", + "Ġt ener", + "Ġte ner", + "Ġten er", + "a ppe", + "ap pe", + "app e", + ". hh", + ".h h", + "_ hot", + "_h ot", + "< AM", + " \".$", + ">\" .$", + ">\". $", + "Ġre lies", + "Ġrel ies", + "Ġreli es", + "Ġrelie s", + "( Console", + "Int ernational", + "Inter national", + "Intern ational", + "- >{$", + "-> {$", + "->{ $", + "M id", + "Mi d", + "Ġdis sert", + "Ġdiss ert", + "Ġdisse rt", + "d ds", + "dd s", + "Ġdeposit s", + "Ġdepos its", + "ĉ driver", + "ĉd river", + "# ga", + "#g a", + "p rising", + "pr ising", + "pri sing", + "print ln", + "Ġp resenter", + "Ġpres enter", + "Ġpresent er", + "Ġpresente r", + "Ġm ines", + "Ġmin es", + "Ġmi nes", + "Ġmine s", + "C SS", + "CS S", + "Ġ Dual", + "ĠD ual", + "ĠDu al", + "( !(", + "(! (", + "Ġk am", + "Ġka m", + "Ġ isLoading", + "Ġis Loading", + "Ġ Protect", + "ĠProt ect", + "ĠProte ct", + ". upper", + ".u pper", + ".up per", + "a rium", + "ar ium", + "ari um", + "] :ĊĊĊ", + "]: ĊĊĊ", + "]:Ċ ĊĊ", + "]:ĊĊ Ċ", + "Y ii", + "- shirt", + "-sh irt", + "Ġ IMAGE", + "ĠIM AGE", + "_ colors", + "_color s", + "_col ors", + "Ġ urgent", + "Ġur gent", + "Ġurge nt", + "Ġurg ent", + ". Container", + ".Cont ainer", + "! (Ċ", + "!( Ċ", + "S aturday", + "Ġsoc ieties", + "Ġsoci eties", + "Ġ Than", + "ĠT han", + "ĠTh an", + "Ġ Cod", + "ĠC od", + "ĠCo d", + "= @", + "Ġ attachments", + "Ġattach ments", + "Ġattachment s", + ". mobile", + ".m obile", + ".mob ile", + "Ġs pite", + "Ġsp ite", + "Ġspi te", + "Ġspit e", + "Ġ bounce", + "Ġb ounce", + "Ġbo unce", + "Ġbou nce", + "r awl", + "ra wl", + "raw l", + "instance type", + "instanc etype", + "ĠTr uck", + "ĠTru ck", + "Ġmanip ulation", + "( Config", + "- inst", + "-in st", + "-i nst", + "-ins t", + "Ġ stor", + "Ġs tor", + "Ġst or", + "Ġsto r", + "it ution", + "itu tion", + "Preferred Gap", + "Ġmain AxisAlignment", + "Ġlist ened", + "Ġlisten ed", + "Ġliste ned", + "'' 'ĊĊ", + "'''Ċ Ċ", + "''' ĊĊ", + "ott age", + "otta ge", + "- project", + "-pro ject", + ". APPLICATION", + ".AP PLICATION", + "ĉ root", + "ĉr oot", + "Ġw hit", + "Ġwh it", + "Ġ bilder", + "Ġb ilder", + "Ġbi lder", + "Ġbil der", + "Ġbild er", + "Ġ ker", + "Ġk er", + "Ġke r", + "Ġappl iances", + "Ġappliance s", + "ro wave", + "row ave", + "ìĿ Ģ", + "em atics", + "ema tics", + "ematic s", + "emat ics", + "Ġ Org", + "ĠO rg", + "ĠOr g", + "o ping", + "op ing", + "opi ng", + "_ SEARCH", + "_SE ARCH", + "Ġc ham", + "Ġch am", + "Ġcha m", + "add ContainerGap", + "Ġ ().", + "Ġ( ).", + "Ġ() .", + "Ġ Arrow", + "ĠAr row", + "ĠArr ow", + "Il legal", + "Ill egal", + "Current ly", + "Curr ently", + "Ġ usa", + "Ġu sa", + "Ġus a", + "Ġpass words", + "Ġpassword s", + "Ġre nown", + "Ġren own", + "a vern", + "av ern", + "ave rn", + "aver n", + "ĠE vil", + "ĠEv il", + "Ġ concat", + "Ġcon cat", + "Ġconc at", + "Ġd uo", + "Ġdu o", + "Ġ vale", + "Ġv ale", + "Ġval e", + "Ġva le", + "Ġ Bean", + "ĠB ean", + "ĠBe an", + "ĠBea n", + "Ġind icators", + "Ġindic ators", + "Ġindicator s", + "Ġindica tors", + "c math", + "cm ath", + "ĠP ump", + "ĠPu mp", + "Nov ember", + "ific ant", + "ifi cant", + "ifica nt", + "_ DOMAIN", + "_DO MAIN", + "_DOM AIN", + "re gar", + "reg ar", + "rega r", + "Ġ Portal", + "ĠP ortal", + "ĠPort al", + "ĠPor tal", + "\" $", + "Ġ formerly", + "Ġformer ly", + "\" ]:Ċ", + "\"] :Ċ", + "\"]: Ċ", + "Ġ Visibility", + "ĠVis ibility", + ".getElementsBy ClassName", + "_ RED", + "_RE D", + "_R ED", + "Ġch ampions", + "Ġchampion s", + "Ġchamp ions", + "à ´", + "Val or", + "Va lor", + "_ es", + "_e s", + "* a", + "- repeat", + "-re peat", + "B and", + "Ban d", + "Ba nd", + ". stage", + ".st age", + "Ġbure auc", + "Ġbureau c", + "C nt", + "e ten", + "et en", + "ete n", + "- function", + "-f unction", + "Ġm uito", + "Ġmu ito", + "Ġmuit o", + "P ID", + "PI D", + "_ editor", + "_e ditor", + "_edit or", + "_ed itor", + "Ġcr ashed", + "Ġcrash ed", + "Ġcra shed", + "d ead", + "de ad", + "dea d", + "k at", + "ka t", + "a gh", + "ag h", + "Ġ EXT", + "ĠE XT", + "ĠEX T", + "as ser", + "ass er", + "asse r", + "- small", + "-s mall", + "-sm all", + "Ġre aliz", + "Ġreal iz", + "( Entity", + "(E ntity", + "ú s", + "Ġ Actually", + "ĠAct ually", + "ĠActual ly", + "Ġ Elite", + "ĠE lite", + "ĠEl ite", + "ĠEli te", + "Ġ helm", + "Ġh elm", + "Ġhe lm", + "Ġhel m", + "( nonatomic", + "(non atomic", + "a sher", + "as her", + "ash er", + "Comm unity", + "all eng", + "alle ng", + "allen g", + "i ry", + "ir y", + "ĠG rowth", + "ĠGrow th", + "Ġs ue", + "Ġsu e", + "Ġf requencies", + "Ġfrequ encies", + "_ descriptor", + "_des criptor", + ". Attribute", + ".At tribute", + "Ġrec ipients", + "Ġrecipient s", + "Ġrecip ients", + "_ NS", + "_N S", + "/ \"+", + "/\" +", + "i ban", + "ib an", + "iba n", + "Ġ athlete", + "Ġath lete", + "Ġ Ign", + "ĠI gn", + "ĠIg n", + "_ DMA", + "_D MA", + "_DM A", + "( ds", + "(d s", + "Ġ Requirements", + "ĠRequire ments", + "ĠRequirement s", + "A DI", + "AD I", + "e rez", + "er ez", + "ere z", + "\\ Admin", + "br aska", + "bra ska", + "bras ka", + "ĠR ust", + "ĠRu st", + "ĠRus t", + "Re lation", + "Rel ation", + "C OD", + "CO D", + "Ġ VERSION", + "ĠV ERSION", + "ĠVER SION", + "e mma", + "em ma", + "emm a", + ") ){", + ")) {", + ". Duration", + ".D uration", + "Ġ Camb", + "ĠC amb", + "ĠCam b", + "ĠCa mb", + "- logo", + "-l ogo", + "-lo go", + "-log o", + "Ġread able", + "Ġcre ators", + "Ġcreat ors", + "Ġcreator s", + "Ġcrea tors", + "( )];Ċ", + "() ];Ċ", + "()] ;Ċ", + "Up Down", + "- half", + "-h alf", + ".get Month", + ".getM onth", + "( sf", + "(s f", + "P ic", + "Pi c", + "Ġh unger", + "Ġhun ger", + "Ġhung er", + "Ġhu nger", + ". tx", + ".t x", + "Ġex ceeded", + "Ġexceed ed", + "Ġexce eded", + "_ seed", + "_s eed", + "_se ed", + "( ^", + "_ sk", + "_s k", + ". perform", + ".per form", + "Ġ >::", + "Ġ> ::", + "Ġ mongo", + "Ġm ongo", + "Ġmon go", + "Ġmo ngo", + "Ġmong o", + "= float", + "=f loat", + "bind Param", + "S mart", + "Sm art", + "i fa", + "if a", + "Ġse curities", + "Ġsec urities", + "Ġpre jud", + "Ġ ,\"", + "Ġ, \"", + "Ġcor ps", + "Ġcorp s", + "Ġv ra", + "Ġvr a", + "ama care", + "amac are", + "i terr", + "it err", + "ite rr", + "iter r", + "( Media", + "(M edia", + "(Me dia", + "u che", + "uch e", + "uc he", + "Ġ cob", + "Ġc ob", + "Ġco b", + "Ġl iber", + "Ġli ber", + "Ġlib er", + ". geometry", + ".ge ometry", + ".geom etry", + ".geo metry", + "L ocator", + "Loc ator", + "Ġsl iding", + "Ġslid ing", + "Ġs urgical", + "Ġsurg ical", + "_ CUR", + "_C UR", + "Ġcon sect", + "Ġcons ect", + "Ġconsec t", + "Ġconse ct", + "[ *", + "ĠRe sort", + "ĠRes ort", + "St ub", + "_ DOUBLE", + "_DO UBLE", + "Ġ Soph", + "ĠS oph", + "ĠSo ph", + "Ġelect oral", + "_ disable", + "_d isable", + "_dis able", + "Ġ Ñģо", + "ĠÑģ о", + "ĠLight ning", + "Ġ mentions", + "Ġm entions", + "Ġmention s", + "Ġment ions", + "o cy", + "oc y", + "Ġle aked", + "Ġleak ed", + "Ġrelax ing", + "P resenter", + "Pres enter", + "Present er", + "v sp", + "vs p", + "Ġg uilt", + "Ġgu ilt", + "Ġgui lt", + "=- =-", + ". reply", + ".re ply", + ".rep ly", + "Ġ Mirror", + "ĠM irror", + "ĠMir ror", + "ĠMi rror", + "C amp", + "Ca mp", + "Cam p", + "Ġ+#+ #+#+", + "Ġ+#+#+#+ #+#+", + ". Author", + ".A uthor", + ".Auth or", + "Ġ directive", + "Ġdirect ive", + "Ġdir ective", + "- hook", + "-h ook", + "íĦ °", + "} ĊĊĊĊĊ", + "}Ċ ĊĊĊĊ", + "}ĊĊ ĊĊĊ", + "}ĊĊĊ ĊĊ", + "}ĊĊĊĊ Ċ", + "@ pytest", + "_ rand", + "_r and", + "_ra nd", + "m is", + "mi s", + "Ġcolor ful", + "u je", + "uj e", + "l asses", + "lass es", + "las ses", + "Ġ Classes", + "ĠC lasses", + "ĠCl asses", + "ĠClass es", + "ĠClasse s", + ". have", + ".h ave", + "% ),", + "%) ,", + "é¢ ĺ", + "Ġdistur bing", + "Ġdisturb ing", + "sub string", + "substr ing", + "subst ring", + "subs tring", + "ĠK oh", + "ĠKo h", + "In vest", + "Inv est", + "p urchase", + "Ġrec ycling", + "Ġrecycl ing", + "Ġ ART", + "ĠA RT", + "ĠAR T", + "ier archy", + "Ġ fps", + "Ġf ps", + "Ġfp s", + ". checkBox", + ".check Box", + "íķ ´", + "_ material", + "_m aterial", + "_mat erial", + "du cation", + "duc ation", + "Ġ fw", + "Ġf w", + "u dit", + "ud it", + "udi t", + "Ġreview ing", + "Ġ Sid", + "ĠS id", + "ĠSi d", + "S yntax", + "Sy ntax", + "Syn tax", + "Ġ Written", + "ĠW ritten", + "ĠWr itten", + "ar gar", + "arg ar", + "arga r", + "U ME", + "UM E", + "/ q", + "Class ifier", + "Off icial", + "Ġj azz", + "Ġja zz", + "Ġjaz z", + "Ġ omega", + "Ġo mega", + "Ġom ega", + "Ph ysics", + "Phys ics", + "Ġl ugar", + "Ġlu gar", + "Ġlug ar", + "_access or", + "_acc essor", + ". commands", + ".command s", + ".comm ands", + "Ab ility", + "Ġ Batch", + "ĠB atch", + "ĠBat ch", + "R AM", + "RA M", + "Ġenc ounters", + "Ġencounter s", + "Ġencount ers", + ". Qu", + ".Q u", + "B YTE", + "BY TE", + "Ġ Distribution", + "ĠD istribution", + "ĠDis tribution", + "ĠDistrib ution", + "Ġ uso", + "Ġu so", + "Ġus o", + "ĠRe covery", + "ĠRec overy", + "ĠReco very", + "ĠRecover y", + "ap proved", + "appro ved", + "approve d", + "Ġden ial", + "/ share", + "/s hare", + "/sh are", + "Link edList", + "Linked List", + ") čĊčĊčĊ", + ")čĊ čĊčĊ", + ")čĊčĊ čĊ", + "u ddy", + "ud dy", + "udd y", + "Ġf ines", + "Ġfin es", + "Ġfine s", + "Ġfi nes", + "Ġ ry", + "Ġr y", + "Un icode", + "Uni code", + "ĉ render", + "ĉr ender", + "ĉre nder", + "Ġprem ises", + "Ġpremise s", + "Ġpremi ses", + "Ġ pon", + "Ġp on", + "Ġpo n", + "ali ases", + "alias es", + "alia ses", + "/ Foundation", + "/F oundation", + "c uda", + "cu da", + "ĠC ock", + "ĠCo ck", + "ĠCoc k", + ", :)", + ",: )", + "( folder", + "(f older", + "Ġm éd", + "Ġmé d", + "d rag", + "dr ag", + "dra g", + "Ġtal ents", + "Ġtalent s", + "Ġtale nts", + "Ġ ĠĠĊĊ", + "ĠĠ ĠĊĊ", + "ĠĠĠ ĊĊ", + "ĠĠĠĊ Ċ", + "е ÑģÑĤв", + "еÑģÑĤ в", + "m ob", + "mo b", + ".y ml", + "Ġ aster", + "Ġa ster", + "Ġas ter", + "Ġast er", + "Ġdis cre", + "Ġdisc re", + "go al", + "ĠG TX", + "ĠGT X", + "Ġ SUCCESS", + "ĠS UCCESS", + "Ġ LONG", + "ĠL ONG", + "ĠLO NG", + "( find", + "(f ind", + "(fin d", + "(fi nd", + "Ġ singular", + "Ġs ingular", + "Ġsing ular", + "_ sz", + "_s z", + "ĠEth ereum", + "ĠEther eum", + ". .Ċ", + ".. Ċ", + "Ġir res", + "Ġirre s", + "Ġirr es", + "' )){Ċ", + "') ){Ċ", + "')) {Ċ", + "Ġmin isters", + "Ġminister s", + "Ġmini sters", + "Ġminist ers", + "St eps", + "Step s", + "Ste ps", + "iver sal", + "ivers al", + "Ġ Nevertheless", + "ĠNever theless", + "- led", + "-l ed", + "-le d", + "Ġ( %)", + "Ġ(% )", + "ç¡ ®", + "Ġ timezone", + "Ġtime zone", + "Ġstr anger", + "Ġstrange r", + "Ġstrang er", + "Ġstran ger", + "Ġstra nger", + "( render", + "(r ender", + "(re nder", + "Ġsh util", + "Ġshut il", + "Ġ mph", + "Ġm ph", + "Ġmp h", + "Ġt rio", + "Ġtr io", + "Ġtri o", + "p py", + "pp y", + "Ġpred omin", + "Ġ endors", + "Ġend ors", + "ĠRuss ians", + "ĠRussia ns", + "ĠRussian s", + "ĉ row", + "ĉr ow", + "Ġ wizard", + "Ġw izard", + ". serialize", + ".s erialize", + ".serial ize", + "Ġcompl ained", + "Ġcomplain ed", + "Ġs ido", + "Ġsi do", + "Ġsid o", + "Ġdel ighted", + "Ġdelight ed", + "- me", + "-m e", + "ĠR av", + "ĠRa v", + "H uman", + "Hum an", + "Hu man", + "a days", + "ad ays", + "ada ys", + "aday s", + "re cv", + "rec v", + "Work ing", + "J ump", + "Ju mp", + "Ġ Ã¥r", + "ĠÃ¥ r", + "Ġ Automatic", + "ĠAuto matic", + "ĠAut omatic", + "ĠAutom atic", + "_ Base", + "_B ase", + "æł ¼", + "aur ants", + "aurant s", + "aura nts", + " ¯", + "æ ¸", + "(C Type", + "I FI", + "IF I", + "( amount", + "(a mount", + "(am ount", + "Ġbel ieving", + "Ġbelie ving", + "= mysql", + "=m ysql", + "=my sql", + "Ġ fir", + "Ġf ir", + "Ġfi r", + "Ġrest oration", + "Ġresto ration", + "er eco", + "ere co", + "Ð ¢", + "_ '+", + "_' +", + "Ġe book", + "Ġeb ook", + "Ġde bris", + "Ġdeb ris", + "( inputs", + "(input s", + "(in puts", + "(inp uts", + "AY OUT", + "Ġscre aming", + "Ġscream ing", + "a via", + "av ia", + "avi a", + "l ander", + "land er", + "la nder", + "lan der", + "Ġdist ress", + "Ġdi stress", + "Ġdistr ess", + "Ġas sembled", + "Ġassemble d", + "Ġ Avoid", + "ĠA void", + "ĠAv oid", + "( thread", + "(t hread", + "(th read", + "Ġ RPC", + "ĠR PC", + "ĠRP C", + "_ EXIT", + "_EX IT", + "( queue", + "(q ueue", + "и ÑģÑĤ", + "иÑģ ÑĤ", + "D ll", + "Ġsk ull", + "Ġsku ll", + "_ pub", + "_p ub", + "ch ez", + "che z", + "m inate", + "min ate", + "mina te", + "en sen", + "ens en", + "ense n", + "Ġins ane", + "Ġinsan e", + "b ounds", + "bo unds", + "bound s", + "bou nds", + "ĠR osen", + "ĠRo sen", + "ĠRose n", + "ĠRos en", + "Ġcondition ing", + "process ed", + "proc essed", + "v ideos", + "vid eos", + "video s", + "vide os", + "f our", + "fo ur", + ". Conv", + ".Con v", + ".Co nv", + "| ;Ċ", + "Person al", + "Pers onal", + "Persona l", + "cer pt", + ":UIControlState Normal", + "Ġd oses", + "Ġdo ses", + "Ġdos es", + "Ġdose s", + "ĠK arl", + "ĠKar l", + "ĠKa rl", + "ĠF requ", + "ĠFr equ", + "ĠFre qu", + ". BASE", + ".B ASE", + "Ġ Vote", + "ĠV ote", + "ĠVo te", + "Ġcon current", + "Ġconc urrent", + "ĠMessageBox Icon", + "Ġ Ãĸ", + "Ġà ĸ", + "ĠDu bai", + "ĠDub ai", + "Ġ Retail", + "ĠR etail", + "ĠRe tail", + "ĠRet ail", + ": number", + ":n umber", + ":num ber", + "Ġ Observer", + "ĠOb server", + "ĠObserv er", + "ĠObs erver", + "Ġ BigInteger", + "ĠB igInteger", + "ĠBig Integer", + "ĠBigInt eger", + "_ origin", + "_or igin", + "_orig in", + "_ori gin", + "_ WORK", + "_W ORK", + "F rames", + "Frame s", + "Fr ames", + "Fra mes", + "Ġnot ably", + ". âĢľ", + "Ġt ropical", + "Ġtrop ical", + "Ġn iche", + "Ġni che", + "Ġnic he", + "Ġnich e", + "a mina", + "am ina", + "amin a", + "ami na", + ". sys", + ".s ys", + ".sy s", + "( tokens", + "(t okens", + "(token s", + "(tok ens", + "mod ify", + "o sit", + "os it", + "osi t", + "st rom", + "str om", + "stro m", + "ĠC omics", + "ĠCom ics", + "ĠComic s", + "O PTION", + "OP TION", + "OPT ION", + "T icket", + "Tick et", + "Ti cket", + "Ġf actories", + "Ġfact ories", + "Ġfactor ies", + "Ġfacto ries", + "Ġdis put", + "Ġdisp ut", + "_ File", + "_F ile", + "ĠF inn", + "ĠFin n", + "ĠFi nn", + "e ee", + "ee e", + "ĠDis cord", + "ĠDisc ord", + "ĠDisco rd", + "_ money", + "_m oney", + "_mon ey", + "_mo ney", + ". tpl", + ".t pl", + ".tp l", + "_ safe", + "_s afe", + "_sa fe", + "L B", + "Ġg lut", + "Ġgl ut", + "Ġglu t", + "J K", + ". flow", + ".f low", + ".fl ow", + "- cont", + "-c ont", + "-con t", + "-co nt", + "g os", + "go s", + "Ġhor izon", + "ĠR ush", + "ĠRu sh", + "ĠRus h", + ": :*", + ":: *", + "P ipe", + "Pi pe", + "u lla", + "ul la", + "ull a", + "b orough", + "bo rough", + "bor ough", + "boro ugh", + "he imer", + "heim er", + "hei mer", + "( move", + "(m ove", + "( Text", + "(T ext", + "} );čĊčĊ", + "}) ;čĊčĊ", + "}); čĊčĊ", + "});čĊ čĊ", + "w elcome", + "wel come", + "Ġ Components", + "ĠCom ponents", + "ĠComponent s", + "ĠComp onents", + "Ġgovern ance", + "c losed", + "cl osed", + "close d", + "clo sed", + "ĉ margin", + "ĉm argin", + "Ġla undry", + "Ġ Terminal", + "ĠTerm inal", + "ĠTermin al", + "iz ards", + "izar ds", + "izard s", + ". âĢĶ", + ". remote", + ".rem ote", + ". radius", + ".r adius", + ".rad ius", + "ĠQue bec", + "Ġ dh", + "Ġd h", + "T ech", + "Te ch", + "ĠM ist", + "ĠMi st", + "ĠMis t", + "s eller", + "se ller", + "sel ler", + "sell er", + "_ literal", + "_l iteral", + "_lite ral", + "_lit eral", + "Ġgen ius", + "Ġ brains", + "Ġbr ains", + "Ġbrain s", + "Ġbra ins", + "g em", + "ge m", + "Ġ Measure", + "ĠMe asure", + "Ġcat ast", + "Ġcata st", + "r ance", + "ra nce", + "ran ce", + ". TextField", + ".T extField", + ".Text Field", + "Ġcon suming", + "Ġcons uming", + "Ġconsum ing", + "Ġ'\\ ''", + "Ġ'\\' '", + "oubted ly", + "Ġ Certain", + "ĠC ertain", + "ĠCert ain", + "ĠCer tain", + "E v", + "er ti", + "ert i", + "b eing", + "be ing", + "bei ng", + "Ex perience", + "Ġ //[", + "Ġ// [", + "Ġ/ /[", + "ĠAr abic", + "ĠArab ic", + "ĠAra bic", + "ĠC rist", + "ĠCr ist", + "ĠCri st", + "Ġ Azure", + "ĠA zure", + "ĠAz ure", + "Ġ hora", + "Ġh ora", + "Ġhor a", + "Ġho ra", + "l adesh", + "lad esh", + "\\ Blueprint", + "d ar", + "da r", + ". rel", + ".re l", + ".r el", + "Ġsup rem", + "ĠRe agan", + "Ġ Attributes", + "ĠAt tributes", + "ĠAttribute s", + "- sidebar", + "-s idebar", + "-side bar", + "Ġuse Styles", + "ĠA irlines", + "ĠAir lines", + "Ġh ills", + "Ġhill s", + "Ġhil ls", + "/x html", + "v inc", + "vin c", + "vi nc", + "_ mock", + "_m ock", + "_mo ck", + "Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠP ill", + "ĠPi ll", + "ĠPil l", + ".Layout Style", + "ĠComm ander", + "ĠCommand er", + "] <", + "sign ature", + "sig nature", + "Ġ{ }čĊ", + "Ġ{} čĊ", + "Ġhat red", + "Ġ ëĭ", + "Ġë ĭ", + "ole sterol", + "Ġ ********", + "Ġ* *******", + "Ġ** ******", + "Ġ*** *****", + "Ġ**** ****", + "Ġ***** ***", + "ancel lor", + "ancell or", + "c rop", + "cr op", + "cro p", + "T IM", + "TI M", + "ĉ ĉĊĊ", + "ĉĉ ĊĊ", + "ĉĉĊ Ċ", + "ys qli", + "ysql i", + "u itive", + "uit ive", + "ĉ unset", + "ĉun set", + "_ sel", + "_s el", + "_se l", + "Ġ menus", + "Ġm enus", + "Ġmen us", + "Ġmenu s", + "t ick", + "ti ck", + "tic k", + "Ġcon stitute", + "Ġconstit ute", + "Ġconstitu te", + "Ġ Elements", + "ĠE lements", + "ĠEl ements", + "ĠElement s", + "ĠEle ments", + "ĠElem ents", + "Ġ Redis", + "ĠR edis", + "ĠRe dis", + "ĠRed is", + "ag gio", + "agg io", + "aggi o", + "_ fp", + "_f p", + "_ depend", + "_d epend", + "_de pend", + "_dep end", + "e mas", + "em as", + "ema s", + "C AST", + "CA ST", + "CAS T", + "o range", + "or ange", + "ora nge", + "oran ge", + "orang e", + "j on", + "jo n", + "Ġ Emily", + "ĠEm ily", + "ĠEmil y", + "Ġpot atoes", + "Ġpotato es", + "Ġre ceptor", + "Ġrecept or", + "Ġrecep tor", + "Ġ Electronic", + "ĠElect ronic", + "ĠElectro nic", + "ĠElectron ic", + "Ġ Lights", + "ĠL ights", + "ĠLight s", + "Ġcomb ining", + "Ġcombin ing", + "Ġ Someone", + "ĠSome one", + "Ġ######## .", + "ĠT OD", + "ĠTO D", + "/ show", + "/s how", + "/sh ow", + "X d", + ". \"'", + ".\" '", + "a fx", + "af x", + "Ġtr agic", + "Ġtrag ic", + "St yled", + "Style d", + "Ġ Marco", + "ĠMar co", + "ĠMarc o", + "G allery", + "d ale", + "da le", + "dal e", + ".âĢĿ ĊĊĊĊ", + ".âĢĿĊĊ ĊĊ", + ".âĢĿĊ ĊĊĊ", + "é rie", + "ér ie", + "éri e", + "/ service", + "/s ervice", + "äº Ĩ", + "Ġ ambient", + "Ġamb ient", + "_ SETTINGS", + "_SET TINGS", + "_SETTING S", + ". Adapter", + ".Ad apter", + "l ene", + "le ne", + "len e", + "Ġtravel s", + "Ġtrav els", + "Not ice", + "Ġc leans", + "Ġclean s", + "Ġcle ans", + "ĠF em", + "ĠFe m", + "c hair", + "ch air", + "cha ir", + "chai r", + "Ñĥ н", + "/ my", + "/m y", + "_ bad", + "_b ad", + "ĠE conomics", + "ĠEcon omics", + "ĠEconomic s", + "ĠEconom ics", + "I SA", + "IS A", + "_ CNT", + "_C NT", + "_CN T", + "( Menu", + "(M enu", + "(Me nu", + "äº İ", + "ĠR idge", + "ĠRid ge", + "ĠRi dge", + "Ġlength y", + "Ġleng thy", + "D ot", + "Do t", + "Ġj umps", + "Ġjump s", + "Ġju mps", + "Ġ hey", + "Ġh ey", + "Ġhe y", + "$ pdf", + "$p df", + "Ġ worm", + "Ġw orm", + "Ġwor m", + "Ġwo rm", + "Ġ sut", + "Ġs ut", + "Ġsu t", + "Ġ sher", + "Ġs her", + "Ġsh er", + "Ġshe r", + "i amo", + "ia mo", + "iam o", + "Ġ Calc", + "ĠC alc", + "ĠCal c", + "ĠCa lc", + "t rieve", + "tr ieve", + "trie ve", + "tri eve", + "Ġc ops", + "Ġco ps", + "Ġcop s", + "ĠCh rom", + "ĠChr om", + "Ġ regulated", + "Ġreg ulated", + "Ġregul ated", + "Ġregulate d", + "reat ment", + "Ġ Higher", + "ĠHigh er", + "o ks", + "ok s", + "Ġde ze", + "Ġdez e", + "LOC ATION", + "ongs To", + "Ġ finite", + "Ġf inite", + "Ġfin ite", + "Ġfi nite", + "Ġv aries", + "Ġvar ies", + "Ġvari es", + "Ġva ries", + "Ġposition ed", + "Ġposit ioned", + "' il", + "'i l", + "éĩ ij", + "Ġh ike", + "Ġhi ke", + "Ġhik e", + "( done", + "(d one", + "(do ne", + "play list", + "Ġ ada", + "Ġa da", + "Ġad a", + "Ġcoast al", + "ĠN ancy", + "ĠNa ncy", + "ĠNan cy", + ".DateTime Field", + "Cpp CodeGen", + "Ġ Similarly", + "ĠSimilar ly", + "r eur", + "re ur", + "reu r", + "Ġ Contr", + "ĠCon tr", + "ĠCont r", + "Ġ Hidden", + "ĠH idden", + "ĠHi dden", + "Ġ Beta", + "ĠB eta", + "ĠBe ta", + "ĠBet a", + "at ched", + "atch ed", + "_ install", + "_inst all", + ". Output", + ".Out put", + "Look up", + "ĠRich mond", + "qu ared", + "quare d", + "qua red", + "Ġm anga", + "Ġman ga", + "Ġma nga", + "Ġmang a", + "- controls", + "-control s", + "ĠBer nard", + "ĠBern ard", + "L arge", + "Ġs lices", + "Ġsl ices", + "Ġslice s", + "Ġslic es", + "Ġoff ence", + "Ġoffen ce", + "ĠM ega", + "ĠMe ga", + "ĠMeg a", + "Ġ estar", + "Ġe star", + "Ġes tar", + "Ġest ar", + "Ġesta r", + "Ġj oints", + "Ġjoin ts", + "Ġjo ints", + "Ġjoint s", + "Ġ summ", + "Ġs umm", + "Ġsu mm", + "Ġsum m", + "_ platform", + "_pl atform", + "B uff", + "Buf f", + "Bu ff", + ".add Subview", + "Ġret ained", + "Ġretain ed", + "L etter", + "Let ter", + ". dim", + ".d im", + ".di m", + "Ġess ere", + "Ġesse re", + "ĠS caffold", + "EX PECT", + "EXP ECT", + "ĉ RE", + "ĉR E", + ". longitude", + ".long itude", + "ü nd", + "ün d", + "Ġstat ue", + ". addWidget", + ".add Widget", + "ĠCar ibbean", + "add PreferredGap", + "il de", + "ild e", + "UI Label", + "UIL abel", + "ĠOp port", + "ĠOpp ort", + "Ġim perial", + "Ġimp erial", + "Ġimper ial", + "Ġimpe rial", + "urs ion", + "Ġman date", + "Ġmand ate", + "Ġprom otional", + "Ġpromot ional", + "Ġpromotion al", + "Ġ vk", + "Ġv k", + "ia ÅĤ", + "Ġp yl", + "Ġpy l", + "Ġ Creation", + "ĠC reation", + "ĠCre ation", + "ĠCreat ion", + "о зд", + "оз д", + "Ġsim pler", + "Ġsimple r", + "Ġsimp ler", + "Ġsimpl er", + ". what", + ".w hat", + ".wh at", + "Ġ Recent", + "ĠRe cent", + "ĠRec ent", + "ĠRece nt", + "St orm", + ". quantity", + ".qu antity", + ".quant ity", + "Ġ Lov", + "ĠL ov", + "ĠLo v", + "\" -", + "ub bles", + "ubble s", + "ubb les", + "_ notification", + "_not ification", + "( world", + "(w orld", + "ur ger", + "urg er", + "urge r", + "* (-", + "*( -", + ": \"Ċ", + ":\" Ċ", + "h m", + "an ship", + "ans hip", + "Ġ Almost", + "ĠAl most", + "Ġmotor cycle", + "_ fee", + "_f ee", + "_fe e", + "Ġabs orb", + "Ġabsor b", + "ĠVin cent", + "ĠVince nt", + "Ġs ounded", + "Ġso unded", + "Ġsound ed", + "ÃŃ st", + "ÃŃs t", + "Ġpharm aceutical", + "h tag", + "ht ag", + "hta g", + "ĠK indle", + "ĠKind le", + "ĠKin dle", + "ital ize", + "ĠEm peror", + "ous tic", + "oust ic", + "Ġspecial ists", + "Ġspecialist s", + "åħ ¬", + "Border Style", + "/ \\", + "RE LATED", + "REL ATED", + "(' ,',", + "(', ',", + "(',' ,", + "( expr", + "(ex pr", + "(exp r", + "Ġ ht", + "Ġh t", + "åį Ī", + "_ Create", + "_C reate", + "Ġs pecially", + "Ġspec ially", + "Ġspecial ly", + "Ġspeci ally", + "Ġ [];čĊ", + "Ġ[ ];čĊ", + "Ġ[] ;čĊ", + "Ġ[]; čĊ", + "Ġ heel", + "Ġh eel", + "Ġhe el", + "Ġs ept", + "Ġse pt", + "Ġsep t", + "_ arch", + "_a rch", + "_ar ch", + "_arc h", + "( initial", + "(in itial", + "(init ial", + "% .ĊĊ", + "%. ĊĊ", + "%.Ċ Ċ", + "\\\" ,\\\"", + "\\\", \\\"", + "\\\",\\ \"", + "Ġdisc usses", + "Ġdiscuss es", + "Ġ upt", + "Ġu pt", + "Ġup t", + "Ġ[ &", + "Ġm anus", + "Ġman us", + ". hand", + ".h and", + "Ġ MAIN", + "ĠM AIN", + "ĠMA IN", + "ĠDen mark", + "Ġ ],čĊ", + "Ġ] ,čĊ", + "Ġ], čĊ", + "Ġcr yst", + "Ġcry st", + "Ġn ack", + "Ġna ck", + "Co ords", + "Coord s", + "_ inner", + "_in ner", + "Ġmid st", + "Ġmi dst", + "Ġa wake", + "Ġaw ake", + "Ġ Ðŀ", + "ĠÐ ŀ", + "- break", + "-b reak", + "-bre ak", + "ÃŃ vel", + "ÃŃv el", + "_ PASS", + "_P ASS", + "_PA SS", + "Ġ Params", + "ĠPar ams", + "ĠParam s", + "ĠPa rams", + "ĠPara ms", + "Ġd etr", + "Ġde tr", + "Ġdet r", + "Ġsp ider", + "Ġspi der", + "Ġ Concept", + "ĠCon cept", + "ĠConc ept", + "ĠConce pt", + "Ġ prend", + "Ġp rend", + "Ġpr end", + "Ġpre nd", + "CH ED", + "CHE D", + ". Exit", + ".Ex it", + ".E xit", + "Ġpop ulated", + "Ġpopulate d", + "Ġpopul ated", + "Ġvirt ue", + "_ SESSION", + "_SE SSION", + "Ġnou vel", + "Ġnouve l", + "o auth", + "oa uth", + "Ġд аннÑĭ", + "Ġдан нÑĭ", + "r ink", + "ri nk", + "rin k", + ". HeaderText", + ".Header Text", + "atur ated", + "atura ted", + "atu rated", + "Ġe rst", + "Ġer st", + "Ġers t", + "Ġ åħ", + "Ġå ħ", + "ॠĩ", + "_ visible", + "_v isible", + "_vis ible", + "e yer", + "ey er", + "eye r", + "Ġ liable", + "Ġl iable", + "Ġli able", + "Ġlia ble", + "Ġd ebe", + "Ġde be", + "Ġdeb e", + "Ġ bw", + "Ġb w", + "{- #", + "_ WIN", + "_W IN", + "d fs", + "df s", + "H over", + "Ho ver", + "Ġ PUT", + "ĠP UT", + "ĠPU T", + "- angle", + "-a ngle", + "-an gle", + "Ġn oble", + "Ġno ble", + "Ġnob le", + "Ġtr aces", + "Ġtra ces", + "Ġtrace s", + "en cv", + "enc v", + "Ġ userData", + "Ġuser Data", + "_ ins", + "_in s", + "_i ns", + "ĠS uz", + "ĠSu z", + "Ġnews letters", + "Ġnewsletter s", + "ĠM odi", + "ĠMod i", + "ĠMo di", + "Ġentreprene urs", + "Ġentrepreneur s", + "Ġ tribute", + "Ġtrib ute", + "Ġrum ors", + "Ġrumor s", + "Ġ rr", + "Ġr r", + "Ġ Quarter", + "ĠQu arter", + "ĠQuart er", + "ĠQuar ter", + "ê³ ł", + "Ġ feeds", + "Ġfe eds", + "Ġfeed s", + "Ġfee ds", + "ó g", + "Ġen velope", + "Ġenv elope", + "Ġenvelop e", + "Ġ lear", + "Ġl ear", + "Ġle ar", + "Ġk ø", + "de veloper", + "develop er", + "S imilar", + "Sim ilar", + ": \")Ċ", + ":\" )Ċ", + ":\") Ċ", + "sub scription", + "subs cription", + "Mod ifier", + "it alic", + "ital ic", + "ita lic", + "Ġn asty", + "Ġna sty", + "Ġnas ty", + "Ġnast y", + "Ġ termination", + "Ġter mination", + "Ġterm ination", + "Ġtermin ation", + "Ġch arming", + "Ġchar ming", + "Ġcharm ing", + "Ġ âŁ", + "Ġâ Ł", + "t ons", + "ton s", + "to ns", + ". trace", + ".t race", + ".tr ace", + "h ots", + "ho ts", + "hot s", + "Ġ UR", + "ĠU R", + "M ont", + "Mon t", + "Mo nt", + "Ġjust ified", + "ĠG ang", + "ĠGa ng", + "ĠGan g", + "i nea", + "in ea", + "ine a", + "Ġb og", + "Ġbo g", + "( ap", + "(a p", + "_ $", + "Ġcont amin", + "Ġconta min", + ". Dot", + ".D ot", + ".Do t", + "ĉ Debug", + "( exports", + "(ex ports", + "(exp orts", + "Ġ paired", + "Ġp aired", + "Ġpair ed", + "Ġpa ired", + "Ġpai red", + "Ġ Assignment", + "ĠAss ignment", + "ĠAssign ment", + "Ġauto mobile", + "Ġautom obile", + "ĵ į", + "Ġph ases", + "Ġphase s", + "Ġpha ses", + "v w", + "@ SuppressWarnings", + "= \\", + "r ant", + "ra nt", + "ran t", + "- ed", + "-e d", + "ĉ await", + "ĉa wait", + "Ġcert ificates", + "Ġcertificate s", + "Ġcertif icates", + "' >\"", + "'> \"", + "Ġint act", + "C TRL", + "CT RL", + "CTR L", + "M ike", + "Mi ke", + "g regation", + "greg ation", + "AT TERN", + "ATT ERN", + "ATTER N", + "Ġre public", + "Ġrep ublic", + "_ upper", + "_u pper", + "_up per", + "ili ary", + "iliar y", + "ilia ry", + "Ġcom putation", + "Ġcomp utation", + "Ġcomput ation", + "h ire", + "hi re", + "hir e", + "ĠS hin", + "ĠSh in", + "ĠShi n", + "_ ANY", + "_A NY", + "_AN Y", + "Ġ Manufacturer", + "ĠMan ufacturer", + "ĠManufact urer", + "ĠC arm", + "ĠCar m", + "ĠCa rm", + "Ġbear ings", + "Ġbearing s", + "_ comb", + "_c omb", + "_com b", + "_co mb", + "c ad", + "ca d", + "ur istic", + "Ġwh olesale", + "Ġwhole sale", + "Ġwholes ale", + "Ġd onor", + "Ġdo nor", + "Ġdon or", + ". interfaces", + ".inter faces", + ".interface s", + "pr esso", + "press o", + "pres so", + "Ġ Brun", + "ĠB run", + "ĠBr un", + "ĠBru n", + "- close", + "-c lose", + "-cl ose", + "p rove", + "pr ove", + "pro ve", + "prov e", + "_ SK", + "_S K", + "ĉ frame", + "ĉf rame", + "ĉfr ame", + "et ros", + "etro s", + "etr os", + "ĠP ain", + "ĠPa in", + "ĠPai n", + "_ EXP", + "_E XP", + "_EX P", + "Ġ LT", + "ĠL T", + "_ fs", + "_f s", + ". datas", + ".d atas", + ".data s", + ".dat as", + ".da tas", + "ĉ ss", + "ĉs s", + "v oir", + "vo ir", + "Ġ Axis", + "ĠA xis", + "ĠAx is", + "M ajor", + "= \"<", + "=\" <", + "[ h", + "Ġprof ess", + "Ġprofes s", + "ig rate", + "igr ate", + "( score", + "(s core", + "(sc ore", + "Key word", + "\" os", + "ĠĠ ĠĠĉĊ", + "ĠĠĠĠ ĉĊ", + "ĠĠĠ ĠĉĊ", + "ĠĠĠĠĉ Ċ", + "an alysis", + "analy sis", + "anal ysis", + "Ġre play", + "Ġrep lay", + "Ġrepl ay", + ". pass", + ".p ass", + ".pa ss", + "\\ d", + "t ls", + "tl s", + "Ġsan ct", + ". light", + ".l ight", + ".li ght", + "_ mobile", + "_m obile", + "_mob ile", + "Ñģ ÑĤÑĮ", + "ÑģÑĤ ÑĮ", + "ĉ total", + "ĉt otal", + "ĉto tal", + "u ity", + "ui ty", + "uit y", + "Ġ paused", + "Ġpa used", + "Ġpause d", + "Ġpau sed", + "N AS", + "NA S", + "Ġen core", + "Ġenc ore", + "l oe", + "lo e", + "Ġ-* -ĊĊ", + "Ġ-*- ĊĊ", + "Ġ-*-Ċ Ċ", + ". high", + ".h igh", + "am pler", + "amp ler", + "ample r", + "Ġ Secure", + "ĠS ecure", + "ĠSec ure", + "Ġf ragments", + "Ġfra gments", + "Ġfrag ments", + "Ġfragment s", + "_ vel", + "_v el", + "_ve l", + "ill ary", + "illa ry", + "ĠS tein", + "ĠSt ein", + "ĠSte in", + "ĠD awn", + "ĠDa wn", + "ĠDaw n", + "Ġmax imize", + "Ġmaxim ize", + "ภ¢", + "Ġ /^", + "Ġ/ ^", + "Ġcontin ually", + "Ġcontinu ally", + "Ġcontinual ly", + "Ġsh adows", + "Ġshadow s", + "ĉ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĉĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠI ActionResult", + "Ġinform ación", + "C HECK", + "CHE CK", + ". SelectedItem", + ".Selected Item", + "b undle", + "ol ley", + "oll ey", + "olle y", + "< Int", + "<", + "\\\" ><", + "\\\"> <", + "Ġ trajectory", + "Ġtra jectory", + "_ ring", + "_r ing", + "Ġhydro gen", + "Ġhydr ogen", + "t ron", + "tr on", + "tro n", + "Ġstat ute", + "Ġ conditional", + "Ġcondition al", + "Ġcond itional", + "Ġt ray", + "Ġtr ay", + "Ġtra y", + "- school", + "-s chool", + "( widget", + "(w idget", + "$ config", + "$con fig", + "Ġrequest ing", + "Ġrequ esting", + ". uint", + ".ui nt", + ".u int", + "e ton", + "et on", + "eto n", + "br ities", + "brit ies", + "Of Type", + "A DMIN", + "AD MIN", + "ADM IN", + "p redict", + "pre dict", + "pred ict", + "Ġg egen", + "Ġge gen", + "Ġgeg en", + "ĠH app", + "ĠHa pp", + "OC UMENT", + "Ġ Apart", + "ĠA part", + "ĠAp art", + "Ġ -----", + "Ġ- ----", + "Ġ-- ---", + "Ġ---- -", + "Ġ--- --", + "r oe", + "ro e", + "u ide", + "ui de", + "uid e", + "just ify", + "ĠS quad", + "ĠSqu ad", + "Ġprof es", + ". bot", + ".b ot", + ".bo t", + "_ currency", + "_c urrency", + "_curr ency", + "i nnen", + "in nen", + "inn en", + "inne n", + "ĠM umbai", + "ĠMum bai", + "Ġ Numbers", + "ĠNumber s", + "ĠNum bers", + "avana ugh", + "agn itude", + "âĢľ There", + "âĢľThe re", + "= http", + "=h ttp", + "çī ĩ", + "Ġ vb", + "Ġv b", + "+ '{{$", + "\"> {{$", + "\">{{ $", + "\">{ {$", + "Ġ inode", + "Ġin ode", + "Ġi node", + "s il", + "si l", + "Ġh ace", + "Ġha ce", + "Ġhac e", + "Ġsever ely", + "Ġsevere ly", + "Ġ Overview", + "ĠOver view", + "ĠOv erview", + "Ġsp raw", + "Ġspr aw", + "Ġbe aches", + "Ġbeach es", + ": left", + ":l eft", + "· »", + "( ${", + "($ {", + "Ġ FIRST", + "ĠF IRST", + "ĠFIR ST", + "ĠS pa", + "ĠSp a", + "- ass", + "-a ss", + "-as s", + "Ġb aise", + "Ġba ise", + "Ġbais e", + "Ġ NODE", + "ĠN ODE", + "ĠNO DE", + "Ġ Pizza", + "ĠP izza", + "ĠPi zza", + "P et", + "Pe t", + "( seq", + "(s eq", + "(se q", + "\\ \">Ċ", + "\\\" >Ċ", + "\\\"> Ċ", + "CppMethod Pointer", + "Ġ vp", + "Ġv p", + "Ġ ia", + "Ġi a", + "_ seconds", + "_se conds", + "_sec onds", + "_second s", + "e met", + "em et", + "eme t", + "/ blob", + "/b lob", + "/bl ob", + "_TH RESH", + ".. .čĊ", + "... čĊ", + "D est", + "De st", + "Des t", + "Ġ NH", + "ĠN H", + ". dataSource", + ".data Source", + "it és", + "ité s", + "Ġ Jak", + "ĠJ ak", + "ĠJa k", + "s ell", + "se ll", + "sel l", + "Ġwork shops", + "Ġworkshop s", + "< u", + "Ġr ivals", + "Ġrival s", + "Ġri vals", + "Ġriv als", + "ĠEX ISTS", + "h om", + "ho m", + "- token", + "-t oken", + "-to ken", + "com patible", + "compat ible", + ".J Panel", + "Ġphys icians", + "Ġphysician s", + "Ġphysic ians", + "ar tin", + "art in", + "arti n", + "Ġdes irable", + "Ġdistinct ive", + ". Dep", + ".D ep", + ".De p", + "g id", + "gi d", + "il iate", + "ili ate", + "ilia te", + ", max", + ",m ax", + "Ġprem iere", + "Ġpremier e", + "Ġpremi ere", + "Ġq Debug", + "Ġadvoc acy", + "Ġwh isper", + "P t", + "Ġun changed", + "_ qty", + "_q ty", + "请 æ±Ĥ", + "Se ason", + "Sea son", + "ave length", + "avel ength", + "ĠP ul", + "ĠPu l", + "Ġd ÃŃa", + "ĠdÃŃ a", + "'] ]],Ċ", + "']] ],Ċ", + "a lis", + "al is", + "ali s", + "( \"&", + "(\" &", + "b oro", + "bo ro", + "bor o", + "Ġ bm", + "Ġb m", + "Ġ Radi", + "ĠR adi", + "ĠRa di", + "ĠRad i", + "w rong", + "wr ong", + "Ġ Going", + "ĠGo ing", + "ime Type", + "i ji", + "ij i", + "- feedback", + "-fe edback", + "-feed back", + "Ġ Names", + "ĠN ames", + "ĠName s", + "ĠNa mes", + "ĠNam es", + "ĠB apt", + "ĠBa pt", + "Ġpro bable", + "Ġprob able", + "Ġ Ether", + "ĠE ther", + "ĠEth er", + "ĠEt her", + "Ġ Politics", + "ĠPol itics", + "ĠPolit ics", + "_ protocol", + "_prot ocol", + "_proto col", + "l ining", + "li ning", + "lin ing", + "S at", + "Sa t", + "Ġcor rel", + "Ġcorre l", + "Ġcorr el", + ". Primary", + ".Pr imary", + "( nullable", + "(null able", + "RI ORITY", + "Ġcol oring", + "Ġcolor ing", + "Ġutil izing", + "Ġutiliz ing", + "d as", + "da s", + "Ġex ported", + "Ġexp orted", + "Ġexport ed", + "Ġcar riers", + "Ġcarrier s", + "Ġcarr iers", + "Con v", + "Co nv", + ". editor", + ".e ditor", + ".ed itor", + ".edit or", + "i ó", + "( handles", + "(h andles", + "(handle s", + "(hand les", + "Ġapprec iation", + ". import", + ".im port", + ".imp ort", + "ĠA ustria", + "ĠAust ria", + "ĠAustr ia", + "Ġ Strip", + "ĠS trip", + "ĠSt rip", + "ĠStr ip", + "i light", + "il ight", + "ili ght", + "ilig ht", + "Ġappropri ately", + "Ġappropriate ly", + "ĠP rest", + "ĠPr est", + "ĠPres t", + "ĠPre st", + "Ġ Wir", + "ĠW ir", + "ĠWi r", + "Ġ UIApplication", + "ĠUI Application", + "al chemy", + "Ġ Mob", + "ĠM ob", + "ĠMo b", + "Ġ Determin", + "ĠD etermin", + "ĠDe termin", + "ergus on", + "register ed", + "regist ered", + "_ convert", + "_con vert", + "_conv ert", + "ĠVlad imir", + "ĠVladim ir", + ".Show Dialog", + "ref lect", + "Ġs hook", + "Ġsh ook", + "Ġsho ok", + "Ġas sure", + "Ġass ure", + "Ġ Often", + "ĠO ften", + "ĠOf ten", + "Ġcivil ization", + "Ġv ocabulary", + "Ġvocab ulary", + "fore ground", + "Ġ Scope", + "ĠS cope", + "ĠSc ope", + "ĠSco pe", + "Ġun wanted", + "Ġunw anted", + "act ing", + "ac ting", + "Ġ ([]", + "Ġ( []", + "Ġ([ ]", + "Ġm arking", + "Ġmark ing", + "Ġmar king", + ". original", + ".origin al", + ".or iginal", + ".orig inal", + "Ġ MOVE", + "ĠM OVE", + "ĠMO VE", + "ĠMOV E", + "Ġsp orting", + "Ġsport ing", + "Ġspor ting", + "ce ptions", + "ception s", + "cept ions", + "NS Number", + "S izes", + "Size s", + "Si zes", + "Ġpro vincial", + "Ġprovinc ial", + "Ġprovincia l", + "_ Trans", + "_T rans", + "_Tr ans", + "Ġproble matic", + "Ġproblem atic", + "Ġproblema tic", + "Ġprobl ematic", + "d igit", + "di git", + "dig it", + "Ġ Emma", + "ĠE mma", + "ĠEm ma", + "ĠEmm a", + "l ocks", + "lo cks", + "lock s", + "loc ks", + "ĠC rew", + "ĠCr ew", + "ĠCre w", + "i ba", + "ib a", + "' ):", + "') :", + "i sha", + "is ha", + "ish a", + "Ġm amm", + "Ġma mm", + "Ġmam m", + "Ġocc ured", + "Ġoccur ed", + "w cs", + "wc s", + "( rule", + "(r ule", + "Ġmerch andise", + "es pecially", + "ĠT win", + "ĠTw in", + "Ġn aming", + "Ġna ming", + "Ġnam ing", + "Ġs log", + "Ġsl og", + "Ġslo g", + "Ġimpro ves", + "Ġimprove s", + "Ġimpr oves", + "Ġimprov es", + "Ġad her", + ": text", + ":t ext", + ".h adoop", + "_ HTTP", + "_HT TP", + ". toList", + ".to List", + ". disabled", + ".dis abled", + ".disable d", + "Ġl enses", + "Ġlen ses", + "Ġlens es", + ". ini", + ".in i", + ".i ni", + "Ġ Rare", + "ĠR are", + "ĠRa re", + "Ġ Ubuntu", + "ĠUb untu", + "Ġsc ram", + "Ġscr am", + "o lation", + "ol ation", + "ola tion", + "t itulo", + "tit ulo", + "Every thing", + "Ġnod ded", + "icht ig", + "_ constant", + "_con stant", + "_const ant", + "_cons tant", + "z c", + "l ift", + "li ft", + "lif t", + "Ġ Notify", + "ĠN otify", + "ĠNot ify", + "o ndo", + "on do", + "ond o", + "Ġ INF", + "ĠI NF", + "ĠIN F", + "( \"+", + "(\" +", + "ĠK az", + "ĠKa z", + "Ġd read", + "Ġdr ead", + "Ġdre ad", + ". mapper", + ".m apper", + ".map per", + ".ma pper", + "l eur", + "le ur", + "ĠCom ey", + "ĠCo mey", + "ĠCome y", + "Ġ NB", + "ĠN B", + "i cers", + "ic ers", + "ice rs", + "icer s", + ". Push", + ".P ush", + "Ġ Hack", + "ĠH ack", + "ĠHa ck", + "ĠBrazil ian", + "ĠBraz ilian", + "_ prod", + "_p rod", + "_pro d", + "_pr od", + "Ġ //ĊĊ", + "Ġ// ĊĊ", + "Ġ/ /ĊĊ", + "Ġ//Ċ Ċ", + "Ġb icycle", + "Ġbi cycle", + "Ġbicy cle", + "Ġbic ycle", + "Ġun available", + "Ġuna vailable", + "Ġadoles cent", + "b lk", + "bl k", + "Ġmit ig", + "_ blue", + "_b lue", + "_bl ue", + "ì ĺ", + "fade In", + "Ġ Utilities", + "ĠUtil ities", + "ĠUt ilities", + "Ġ MN", + "ĠM N", + "; k", + "< style", + "- status", + "-s tatus", + "-st atus", + "-stat us", + "i ndo", + "in do", + "ind o", + "Ġin nings", + "Ġinn ings", + "Ġinning s", + "Ġg j", + "Ġ| |=", + "Ġ|| =", + ". eu", + ".e u", + ": Number", + ":N umber", + "Ġc uisine", + "Ġcu isine", + "Ġcuis ine", + "ĠURL s", + "i ek", + "ie k", + "Ġw ires", + "Ġwire s", + "Ġwir es", + "Ġwi res", + "ĉ ps", + "ĉp s", + "i eg", + "ie g", + ". mk", + ".m k", + "so ap", + "Ġsome time", + "Ġsom etime", + "Ġs tap", + "Ġst ap", + "Ġsta p", + "_ series", + "_s eries", + "_se ries", + "_ser ies", + ". Target", + ".T arget", + "æ º", + ". destination", + ".d estination", + ".dest ination", + "OUN TER", + "OUNT ER", + "R aises", + "Ra ises", + "Raise s", + "& A", + "Ġsmart phones", + "Ġsmartphone s", + "NI Env", + ". sdk", + ".s dk", + ".sd k", + "Ġhel icopter", + "Ġhelicopt er", + "Ġim pe", + "Ġimp e", + "Ġ Birth", + "ĠB irth", + "ĠBir th", + "A U", + "b readcrumbs", + "breadcrumb s", + "co ords", + "coord s", + "Ġexpl ored", + "Ġexplo red", + "Ġexplore d", + "Ġexplor ed", + "Ġ lod", + "Ġl od", + "Ġlo d", + "Ġ Ip", + "ĠI p", + "g able", + "ga ble", + "i ane", + "ia ne", + "ian e", + "Ġart ifacts", + "Ġartifact s", + "Box Layout", + "ا ر", + "Ø§Ø ±", + "list ener", + "listen er", + "lis tener", + "liste ner", + ". cart", + ".c art", + ".ca rt", + ".car t", + "ĠH uff", + "ĠHu ff", + "ĠHind u", + "ĠHin du", + "ĠData Types", + "ĠDataType s", + "Ġ Drupal", + "ĠDr upal", + "IGN ORE", + "Ġoff sets", + "Ġoffset s", + "Ġoffs ets", + "Ġ RTC", + "ĠR TC", + "ĠRT C", + "- login", + "-lo gin", + "-log in", + "æ ®", + "Ġ QObject", + "ĠQ Object", + "Ġprosec utor", + "R ock", + "Ro ck", + "_ chat", + "_c hat", + "_ch at", + "W ay", + "Wa y", + "ì ²", + "Ġneg lig", + "Ġd ude", + "Ġdu de", + "; <", + "Ġde legates", + "Ġdelegate s", + "Ġdeleg ates", + "_ failed", + "_f ailed", + "_fail ed", + "_fa iled", + "/ dev", + "/d ev", + "/de v", + "/ work", + "/w ork", + "( New", + "(N ew", + "e table", + "et able", + "eta ble", + "( )\"", + "() \"", + "( Icons", + "(I cons", + "Ġp ork", + "Ġpo rk", + "Ġpor k", + "ĠModel AndView", + "Ġ VIP", + "ĠV IP", + "ĠVI P", + "ĠK or", + "ĠKo r", + "m ix", + "mi x", + "Ġ oxid", + "Ġox id", + "Ġ SCREEN", + "ĠS CREEN", + "ĠSC REEN", + "Ġ Fourth", + "ĠFour th", + "/ \",Ċ", + "/\" ,Ċ", + "/\", Ċ", + "Ġ tee", + "Ġt ee", + "Ġte e", + "ĠSte vens", + "ĠSteve ns", + "ĠSteven s", + "t icks", + "ti cks", + "tic ks", + "tick s", + "Ġp ledge", + "Ġpl edge", + "Ġple dge", + "Ġpled ge", + "ib bon", + "Ġ Loan", + "ĠLo an", + "Ġ neo", + "Ġn eo", + "Ġne o", + "n umpy", + "num py", + "Ġ SharedPreferences", + "ĠShared Preferences", + "- oriented", + "ĠLogger Factory", + "Ġ GraphQL", + "ĠGraph QL", + "z enia", + "ze nia", + "zen ia", + "\" _", + "W omen", + "Wo men", + ". cast", + ".c ast", + ".ca st", + "Ġdeliber ately", + "Ġdeliberate ly", + "+ b", + "Ġ Arn", + "ĠA rn", + "ĠAr n", + "font Size", + "Ġ maze", + "Ġm aze", + "Ġma ze", + "Ġmaz e", + "Ġbl amed", + "Ġblame d", + "Ġbla med", + ". mas", + ".m as", + ".ma s", + "} )čĊ", + "}) čĊ", + "eler ik", + "ele rik", + "eleri k", + "Ġsc anning", + "Ġscan ning", + "ĠWork shop", + "ĠWorks hop", + "Ġf inden", + "Ġfind en", + "Ġfin den", + "Ġfinde n", + "Ġc aut", + "Ġca ut", + "UI Font", + "( return", + "(r eturn", + "(re turn", + "(ret urn", + "a lin", + "al in", + "ali n", + "c astle", + "cast le", + "cas tle", + "//// ////////////////////////////////////////////////////////////////////", + "//////// ////////////////////////////////////////////////////////////////", + "//////////////// ////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////// ////////", + "//////////// ////////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////////// ////", + "//////////////////////////////////////////////////////// ////////////////", + "//////////////////////////////////////////////////////////// ////////////", + "Ġincent ive", + "Ġincentiv e", + "o path", + "op ath", + "opa th", + "b lob", + "bl ob", + "blo b", + "Ġcigaret te", + "Ġcigar ette", + "Ġf ertil", + "Ġfer til", + "Ġfert il", + "* /ĊĊĊ", + "*/ ĊĊĊ", + "*/Ċ ĊĊ", + "*/ĊĊ Ċ", + "Ġ Shar", + "ĠS har", + "ĠSh ar", + "ĠSha r", + "Ċ ĠĠĠĠĠĠĊ", + "Ġunc ertain", + "Ġuncert ain", + "ĠS ton", + "ĠSt on", + "ĠSto n", + "Oper ations", + "Operation s", + "ĠSp encer", + "Ġde fin", + "Ġdef in", + "Ġ Solo", + "ĠS olo", + "ĠSo lo", + "ĠSol o", + "o nest", + "on est", + "one st", + "ones t", + "·» åĬł", + "Ġu omo", + "Ġuom o", + "G ive", + "Gi ve", + "Ġden tro", + "Ġdent ro", + "; padding", + ";p adding", + "ent ai", + "enta i", + "Ġ Cars", + "ĠC ars", + "ĠCar s", + "ĠCa rs", + "Ġenthus iasm", + "Ġenthusi asm", + "Ġ Operating", + "ĠOper ating", + "ĠOpera ting", + "S kip", + "Sk ip", + "par ation", + "pa ration", + "para tion", + "Ġprot ects", + "Ġprote cts", + "Ġprotect s", + "Ġre ver", + "Ġr ever", + "Ġrev er", + "Ġreve r", + "d g", + "ĠC incinnati", + "Ġconsect etur", + "Ġm uss", + "Ġmus s", + "Ġmu ss", + "employ ed", + "a uses", + "au ses", + "ause s", + "aus es", + "in kle", + "ink le", + ". Values", + ".Value s", + ".Val ues", + "£ ¼", + "l ov", + "lo v", + "_ WARN", + "_W ARN", + "Ġ bookmark", + "Ġbook mark", + "Ġ Apollo", + "ĠA pollo", + "ĠAp ollo", + ". axis", + ".a xis", + ".ax is", + "Ġm ét", + "Ġmé t", + "Ġop ener", + "Ġopen er", + "Ġt umor", + "Ġtu mor", + "Ġtum or", + "d an", + "da n", + "Ġelement ary", + "Ġsk ipped", + "Ġskip ped", + "Ġski pped", + "ĠK er", + "ĠKe r", + "as ia", + "asi a", + "_ resp", + "_re sp", + "_r esp", + "_res p", + "Ġde mol", + "Ġdem ol", + "Ġdemo l", + "ĠCan adians", + "ĠCanadian s", + "Ġt astes", + "Ġtaste s", + "Ġtas tes", + "Ġtast es", + "U Integer", + "UInt eger", + "Ġ' ${", + "Ġ'$ {", + ". aws", + ".a ws", + ".aw s", + "R OID", + "RO ID", + "ROI D", + "r ians", + "ri ans", + "ria ns", + "rian s", + "M Q", + "ord able", + "orda ble", + "Ġcou sin", + "Ġcous in", + "Prop agation", + "( Session", + "(S ession", + "p halt", + "ph alt", + "pha lt", + "U LD", + "UL D", + "Ġ Scalar", + "ĠS calar", + "ĠSc alar", + "ĠScala r", + "ĠScal ar", + "Ġblood y", + "Ġblo ody", + "Ġ à¦", + "Ġà ¦", + ". mask", + ".m ask", + ".mas k", + ".ma sk", + ", q", + "Ġ Units", + "ĠUn its", + "ĠUnit s", + "ĠUni ts", + "Ġcent res", + "Ġcentre s", + "Ġcentr es", + "Ġcen tres", + "Ġ Prim", + "ĠP rim", + "ĠPr im", + "ĠPri m", + ". ]ĊĊ", + ".] ĊĊ", + "ĠSh aw", + "ĠSha w", + "P rom", + "Pro m", + "Pr om", + "Ġ Thought", + "ĠTh ought", + "ĠThough t", + "ĠThou ght", + "Check er", + "Che cker", + "_ outputs", + "_out puts", + "_output s", + "( chan", + "(c han", + "(ch an", + "E INVAL", + "Ġ bob", + "Ġb ob", + "Ġbo b", + "_ cmp", + "_c mp", + "_cm p", + "P ed", + "Pe d", + "Ġmat rices", + "Ġvrou wen", + "Ġvrouw en", + "Ġgenu inely", + "Ġgenuine ly", + "high light", + "( display", + "(d isplay", + "(dis play", + ") !=", + ")! =", + "Ġde licate", + "Ġdel icate", + "Ġdelic ate", + "ĠL uther", + "ĠLu ther", + "ĠM iles", + "ĠMil es", + "ĠMi les", + "ĠMile s", + "Ġ userID", + "Ġuser ID", + "% =", + "at eurs", + "ate urs", + "ateur s", + "_ BUF", + "_B UF", + "_BU F", + "- ------Ċ", + "-- -----Ċ", + "---- ---Ċ", + "--- ----Ċ", + "----- --Ċ", + "------ -Ċ", + "------- Ċ", + "im itives", + "imit ives", + "imitive s", + "Ġsh elves", + "Ġshel ves", + "s low", + "sl ow", + "_ information", + "_in formation", + "L EG", + "LE G", + "W r", + ". forms", + ".for ms", + ".form s", + "c eland", + "ce land", + "cel and", + "cela nd", + "/ un", + "/u n", + ": &", + ". âĢĻĊĊ", + ".âĢĻ ĊĊ", + "= \"%", + "=\" %", + "Ġp rost", + "Ġpro st", + "Ġpr ost", + "Ġpros t", + "Ġ fontsize", + "Ġfont size", + "Ġfonts ize", + "u ción", + "uc ión", + "uci ón", + "g etic", + "get ic", + "ge tic", + "a mt", + "am t", + "= \".", + "=\" .", + "De cor", + "Dec or", + "B rit", + "Br it", + "Ġ\" \").", + "Ġ\"\" ).", + "Ġ\"\") .", + "Ġf ounding", + "Ġfound ing", + "Ġfo unding", + ". FileName", + ".File Name", + "Ġ Tier", + "ĠT ier", + "ĠTi er", + "ĠTie r", + "Ġdis close", + "Ġdisc lose", + "á m", + ". syn", + ".s yn", + ".sy n", + ". ViewHolder", + ".View Holder", + "lic ant", + "li cant", + "lica nt", + "_ stage", + "_st age", + "_sta ge", + "Mon day", + "Ġ deserialize", + "Ġde serialize", + "Ġdes erialize", + "t alk", + "ta lk", + "tal k", + "Ġtrad itionally", + "Ġtraditional ly", + "Ġtradition ally", + "æĢ ģ", + "Ø ®", + "L EX", + "LE X", + "Ġ eh", + "Ġe h", + "ĉ ROM", + "ĉR OM", + "Ġ {})Ċ", + "Ġ{ })Ċ", + "Ġ{} )Ċ", + "Ġ{}) Ċ", + "Question s", + "Quest ions", + "n cpy", + "nc py", + "Ġfix ing", + "Ġfi xing", + "к Ñĥ", + "_ Key", + "_K ey", + ": x", + "Ġ STRING", + "ĠST RING", + "ĠSTR ING", + "ĠÑĦ ай", + "ĉ left", + "ĉl eft", + "ĠB ench", + "ĠBen ch", + "el lij", + "ell ij", + "elli j", + "UR RED", + "URRE D", + "Ġ Diagram", + "ĠDi agram", + "ĠDia gram", + "} catch", + "/ time", + "/t ime", + "Ġ Missing", + "ĠM issing", + "ĠMiss ing", + "ĠMis sing", + "db name", + "Ġs ore", + "Ġso re", + "Ġsor e", + "ĠW alt", + "ĠWal t", + "ĠWa lt", + "ug ging", + "ugg ing", + "re present", + "rep resent", + "Ġ GS", + "ĠG S", + "ne ys", + "ney s", + "ĉ page", + "ĉp age", + "Ġvol can", + "( btn", + "(b tn", + "(bt n", + "Ġexceed s", + "Ġexce eds", + "Ġ erg", + "Ġe rg", + "Ġer g", + "Ġpi lots", + "Ġpil ots", + "Ġpilot s", + "ĠS ed", + "ĠSe d", + "ers ions", + "ersion s", + "Ġp atron", + "Ġpat ron", + "Ġpa tron", + "R V", + "/ top", + "/t op", + "/to p", + ". asset", + ".as set", + "_ cross", + "_c ross", + "_cr oss", + ". Editor", + ".E ditor", + ".Edit or", + ".Ed itor", + ". tb", + ".t b", + "Ġwel coming", + "S CREEN", + "SC REEN", + ") findViewById", + "C oder", + "Code r", + "Co der", + "Cod er", + " \",Ċ", + ">\" ,Ċ", + ">\", Ċ", + "_ Pin", + "_P in", + "u ese", + "ue se", + "ues e", + "Ġ overrides", + "Ġover rides", + "Ġoverride s", + "_ ready", + "_re ady", + "_read y", + "Ad vanced", + "Adv anced", + "Advance d", + "Ġ opi", + "Ġo pi", + "Ġop i", + "- cart", + "-c art", + "-car t", + "-ca rt", + "(\" /\",", + "(\"/ \",", + "ĠD eb", + "ĠDe b", + "C RY", + "CR Y", + "Ġ Vertical", + "ĠVer tical", + "ĠVert ical", + "Ġ OVER", + "ĠO VER", + "ĠOV ER", + "Ġ Corporate", + "ĠCor porate", + "ĠCorpor ate", + "ĠCorp orate", + "Ġ\" \";", + "Ġ\"\" ;", + "Ġstep ping", + "Ġste pping", + "e j", + "Ġaccus ations", + "Ġaccusation s", + "Ġo raz", + "Ġor az", + "Ġora z", + "_ tail", + "_t ail", + "_ta il", + "Ġin duced", + "Ġind uced", + "Ġindu ced", + "Ġinduce d", + "Ġ elastic", + "Ġe lastic", + "Ġel astic", + "Ġelast ic", + "Ġbl own", + "Ġblow n", + "Ġblo wn", + ", //", + ",/ /", + "Ġback grounds", + "Ġbackground s", + "âĢĻ une", + "âĢĻun e", + "- sdk", + "-s dk", + "Ġset Interval", + "Ġincent ives", + "Ġincentive s", + "Ġincentiv es", + "Ġveget able", + "Ġveg etable", + "_ On", + "_O n", + "exp anded", + "expand ed", + "p ix", + "pi x", + "_ shader", + "_sh ader", + "_sha der", + "ĠSP DX", + "ĠSPD X", + "@ example", + "Ġ Wrapper", + "ĠW rapper", + "ĠWr apper", + "ĠWrap per", + ". Zero", + ".Z ero", + "Pos itive", + "Ġ spinner", + "Ġsp inner", + "Ġspin ner", + "Ġin vented", + "Ġinv ented", + "Ġinvent ed", + "ĠG ates", + "ĠGa tes", + "ĠGate s", + "ĠGat es", + "о ÑĤоÑĢ", + "оÑĤ оÑĢ", + "оÑĤо ÑĢ", + "Ġcompar isons", + "Ġcomparison s", + "è ·", + ". primary", + ".pr imary", + "data Provider", + "add itional", + "ĉ options", + "ĉo ptions", + "ĉopt ions", + "ĉoption s", + "s napshot", + "snap shot", + ".set Horizontal", + "Ġ\" {}", + "Ġ\"{ }", + "ĠF isher", + "ĠFish er", + "ĠFi sher", + "h alten", + "hal ten", + "halt en", + "< Type", + "", + "Ġ) ->", + "Ġ Registered", + "ĠRegister ed", + "IN ED", + "INE D", + "k al", + "ka l", + "par ison", + "Ġobj eto", + "Ġobjet o", + "V i", + "m anda", + "man da", + "ma nda", + "mand a", + "Ġren ewed", + "Ġrenew ed", + "ĠS of", + "ĠSo f", + "e ssel", + "es sel", + "ess el", + "esse l", + ".nd array", + "Ġ crap", + "Ġc rap", + "Ġcr ap", + "Ġcra p", + "ç® ¡", + ".abs path", + ".ab spath", + "( up", + "(u p", + "Ġclear ance", + "Ġ TW", + "ĠT W", + "_ COPY", + "_C OPY", + "_CO PY", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĉ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠ Ġĉ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĉ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĉ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĉ", + "Ġfor ests", + "Ġfore sts", + "Ġforest s", + "Ġfores ts", + "Ġarg uably", + "Ġ ASS", + "ĠA SS", + "ĠAS S", + "h ey", + "he y", + "a mel", + "am el", + "ame l", + "_ fore", + "_f ore", + "_for e", + "ĠSouth east", + "ĠSou theast", + "Ġab used", + "Ġabuse d", + "Ġpract icing", + "ake dirs", + "aked irs", + "ä¸ »", + "_ resources", + "_re sources", + "_res ources", + "_resource s", + "Ġ pond", + "Ġp ond", + "Ġpo nd", + "Ġpon d", + ". Fixed", + ".F ixed", + "Last Error", + "ĠPsych ology", + "ĠPsycho logy", + "Ġ\" //", + "Ġ\"/ /", + "! :", + "Re usable", + "Ġ mensaje", + "Ġm ensaje", + "Ġmens aje", + "Ġro spy", + "Ġros py", + "Ġ bour", + "Ġb our", + "Ġbo ur", + "Ġbou r", + "Ġvar ieties", + "Ġvari eties", + "Ġem path", + "Ġemp ath", + "( ({", + "(( {", + "_ org", + "_or g", + "_o rg", + "Ġ Mes", + "ĠM es", + "ĠMe s", + "Ġ Magento", + "ĠM agento", + "ĠMag ento", + "IST ORY", + "Un less", + "Ġh j", + "ĠD uty", + "ĠDu ty", + "ĠDut y", + "J un", + "Ju n", + ", size", + ",s ize", + "Ġpaint ings", + "Ġpain tings", + "Ġpainting s", + "Ġd ispens", + "Ġdisp ens", + "d art", + "da rt", + "dar t", + "Ġbehavior al", + "Ġ rpc", + "Ġr pc", + "Ġrp c", + "c alculate", + "cal culate", + "calc ulate", + "calcul ate", + "f ruit", + "fr uit", + "_ mm", + "_m m", + "ĉ pthread", + "ĉp thread", + "ĉpt hread", + "Max Length", + "Ġc urrencies", + "Ġcurr encies", + "_ capacity", + "_cap acity", + "ĠO z", + "Ġfire arm", + "Ġco efficient", + "Ġcoeff icient", + "Ġbank ruptcy", + "Ġbankrupt cy", + "w art", + "wa rt", + "war t", + "Ġfat igue", + "A VA", + "AV A", + "Ġe spa", + "Ġes pa", + "Ġesp a", + "_ pc", + "_p c", + "Ġ Quotes", + "ĠQu otes", + "ĠQuote s", + "_ LIGHT", + "_L IGHT", + "Ġ Tickets", + "ĠT ickets", + "ĠTicket s", + "ĠTick ets", + "Ġre lates", + "Ġrel ates", + "Ġrelate s", + "Ġrelat es", + "Ġpublish ers", + "Ġpublisher s", + "Ġun locked", + "Ġunlock ed", + "Ġunl ocked", + "Ġ //----------------------------------------------------------------", + "Ġ// ----------------------------------------------------------------", + "Ġ//------------------------------------------------ ----------------", + "Ġ//-------------------------------- --------------------------------", + "Ġ//---------------- ------------------------------------------------", + "Ġ InterruptedException", + "ĠInterrupt edException", + "Ġout look", + "r n", + "Ġreb els", + "Ġrebel s", + "W ritten", + "Wr itten", + "Ġa sian", + "Ġas ian", + "Ġasi an", + "Ġasia n", + "ot to", + "ott o", + "Ġ ĉĉĉĉ", + "Ġĉ ĉĉĉ", + "Ġĉĉ ĉĉ", + "Ġĉĉĉ ĉ", + "_ gpu", + "_g pu", + "_gp u", + "T xt", + "Tx t", + ". ImageView", + ".Image View", + "Ġs uis", + "Ġsu is", + "Ġsui s", + "_ tables", + "_t ables", + "_table s", + "_tab les", + "_ta bles", + ". RecyclerView", + ".Rec yclerView", + "Ġwhat soever", + "è ģ", + "] ++;Ċ", + "assert True", + "_ verify", + "_ver ify", + "ĠR ivers", + "ĠRiver s", + "ĠRiv ers", + "ĠRi vers", + "Ġ ][", + "Ġ] [", + "J et", + "Je t", + "id ian", + "idi an", + "idia n", + "S ibling", + "Si bling", + "Ġ genres", + "Ġgen res", + "Ġgenre s", + ". Access", + ".A ccess", + ".Ac cess", + ".Acc ess", + "O PS", + "OP S", + "Ġtr ivial", + "Ġtrivia l", + "ภª", + "a len", + "al en", + "ale n", + "в ед", + "ве д", + "ĠS word", + "ĠSw ord", + "Ġscrut iny", + "Ġscrutin y", + "( cb", + "(c b", + "Ġ commerce", + "Ġcom merce", + "Ġcomm erce", + "Ġcommerc e", + "Ġguarante es", + "Ġguarantee s", + "_ adv", + "_a dv", + "_ad v", + "Ġ LET", + "ĠL ET", + "ĠLE T", + "re cio", + "rec io", + "Ġh ilar", + "Ġhi lar", + "Ġhil ar", + "Ġback yard", + "ãĢ ı", + "Ġillustr ated", + "Ġillustrate d", + "Ġillust rated", + "/ vendor", + "/v endor", + ". Util", + ".U til", + "Ġ wow", + "Ġw ow", + "Ġwo w", + "LO Y", + "Ġ Marshal", + "ĠM arshal", + "ĠMar shal", + "ĠMars hal", + "ĠMarsh al", + "\" >'.$", + "\"> '.$", + "\">' .$", + "\">'. $", + "ĠB ak", + "ĠBa k", + "Ġ modifiers", + "Ġmod ifiers", + "Ġmodifier s", + "d ictionary", + "ĠS tre", + "ĠSt re", + "ĠStr e", + "m ultiple", + "mult iple", + "multi ple", + "multip le", + "\" )),", + "\") ),", + "\")) ,", + "ĠC ort", + "ĠCo rt", + "ĠCor t", + "' ]\").", + "'] \").", + "( admin", + "(ad min", + "Ġ Creator", + "ĠC reator", + "ĠCre ator", + "ĠCreat or", + "In ternet", + "Int ernet", + "Inter net", + "Intern et", + "( ms", + "(m s", + "l ogy", + "lo gy", + "log y", + "DECL ARE", + "Ġ Marcus", + "ĠMar cus", + "ĠMarc us", + "< <<<", + "<< <<", + "<<< <", + "ãģ ł", + "_ my", + "_m y", + "( inst", + "(i nst", + "(in st", + "(ins t", + "Ġsc iences", + "Ġscience s", + "Ġsci ences", + "N DER", + "ND ER", + ". enter", + ".en ter", + ".ent er", + "Ġ itu", + "Ġit u", + "Ġi tu", + "Ġbe have", + "Ġbeh ave", + "P an", + "Pa n", + "om bies", + "omb ies", + "ombie s", + "= '<", + "=' <", + "' ));čĊ", + "') );čĊ", + "')) ;čĊ", + "')); čĊ", + "Ġ MENU", + "ĠM ENU", + "ĠME NU", + "ĠMEN U", + "Ġ Workers", + "ĠWork ers", + "ĠWorker s", + "ĠWor kers", + ".No Error", + "Ġ bindings", + "Ġbin dings", + "Ġbind ings", + "Ġbinding s", + "Ġdis abilities", + "{ \\", + "ĠM unicip", + "ĠMun icip", + "Ġ cores", + "Ġc ores", + "Ġco res", + "Ġcor es", + "Ġcore s", + "ur ple", + "ĠN okia", + "us ions", + "usion s", + "usi ons", + "Ġ Fitness", + "ĠF itness", + "ĠFit ness", + ". handleChange", + ".handle Change", + "Ġ javascript", + "Ġj avascript", + "Ġjav ascript", + "Ġjava script", + "ìļ Ķ", + "( dec", + "(d ec", + "(de c", + "Ġ packing", + "Ġp acking", + "Ġpack ing", + "Ġpac king", + "- depend", + "-d epend", + "-de pend", + "Ġtrans cript", + "Ġtran script", + "z eros", + "ze ros", + "zer os", + "zero s", + "_ alert", + "_al ert", + "? \",Ċ", + "?\" ,Ċ", + "?\", Ċ", + "l ibs", + "li bs", + "lib s", + "± оÑĤ", + "Ġ |ĊĊ", + "Ġ| ĊĊ", + "Ġ|Ċ Ċ", + "tr ained", + "tra ined", + "train ed", + "ĠG ent", + "ĠGe nt", + "ĠGen t", + "ĠR ab", + "ĠRa b", + "x p", + "_ configuration", + "_config uration", + "å¤ ©", + "_ accept", + "_ac cept", + "_acc ept", + ".rec yclerview", + ": url", + "ĠMu hammad", + "ĠMuham mad", + "Ġpriv ileges", + "Ġprivile ges", + "Ġprivilege s", + "_ bank", + "_b ank", + "u ku", + "uk u", + "w allet", + "wall et", + "wal let", + "Ġ ROOT", + "ĠR OOT", + "ĠRO OT", + "Ġenc uent", + "? family", + "?f amily", + "ĉ position", + "ĉp osition", + "ĉpos ition", + "Ġ cg", + "Ġc g", + "Ġpre cip", + "Ġprec ip", + "method s", + "meth ods", + "_ fast", + "_f ast", + "_fa st", + "in crement", + "inc rement", + "incre ment", + "incr ement", + "ĠT iger", + "ĠTi ger", + "ĠTig er", + "_OCC URRED", + "qu ip", + "qui p", + "Ġ HAS", + "ĠH AS", + "ĠHA S", + "_ dom", + "_d om", + "_do m", + "Ġw reck", + "Ġwr eck", + "Ġwre ck", + "b j", + "Ġd ern", + "Ġde rn", + "Ġder n", + "Ġorg ans", + "Ġorgan s", + ". entries", + ".en tries", + ".ent ries", + "Ġ _('", + "Ġ_ ('", + "Ġ_( '", + "r amento", + "ram ento", + "Ġ Jamie", + "ĠJam ie", + "ĠJa mie", + "Ġ punk", + "Ġp unk", + "Ġpun k", + "Ġpu nk", + "I PP", + "IP P", + "Ġprogram a", + "Ġprog rama", + "Ġat tain", + "Ġatt ain", + "Ġpro ves", + "Ġpr oves", + "Ġprov es", + "Ġprove s", + "/ sign", + "/s ign", + "Ġanswer ing", + "Ġl adder", + "Ġlad der", + "**** ************************", + "******** ********************", + "**************** ************", + "************************ ****", + "******************** ********", + "************ ****************", + "************** **************", + "ĠW almart", + "ĠWal mart", + "Ġ CONTENT", + "ĠCONT ENT", + "d uctor", + "du ctor", + "duct or", + "duc tor", + "Ġver bal", + "Ġverb al", + "Ġ PID", + "ĠP ID", + "ĠPI D", + "c rypto", + "crypt o", + "cry pto", + "_CALL BACK", + "Ġ= ================================", + "Ġ================= ================", + "Ġp otent", + "Ġpo tent", + "Ġpot ent", + "Ġsh orts", + "Ġshort s", + "Ġsho rts", + ". Uri", + ".U ri", + ". uniform", + ".un iform", + ".uni form", + "; border", + ";b order", + "Ġ Wer", + "ĠW er", + "ĠWe r", + "Ġher ein", + "Ġhere in", + "l la", + "ll a", + "ĠI hr", + "ĠIh r", + "P ixmap", + "Pix map", + "l iteral", + "lit eral", + "lite ral", + "liter al", + "! )ĊĊ", + "!) ĊĊ", + "!)Ċ Ċ", + "g eneric", + "gen eric", + "gener ic", + "gene ric", + "r ust", + "ru st", + "rus t", + "_ scripts", + "_s cripts", + "_script s", + "o sto", + "os to", + "ost o", + "it us", + "itu s", + "ĠCoal ition", + "Ġre mot", + "Ġrem ot", + "de ploy", + "dep loy", + "ĠE agle", + "ĠEag le", + "ĠEa gle", + "ãĢģ ãĢĮ", + "Ġimport ante", + "Ġimportant e", + "ĉ object", + "ĉo bject", + "ĉobj ect", + "ĉob ject", + "Ġseason al", + "Ġseas onal", + "n ej", + "ne j", + "ai du", + "aid u", + "Bind View", + "ĠSi erra", + "- bg", + "-b g", + "Ġmake Styles", + "[ offset", + "[o ffset", + "G ames", + "Game s", + "Gam es", + "Ga mes", + "Ġhorm one", + "AR IO", + "ARI O", + "he ads", + "head s", + "hea ds", + "( select", + "(s elect", + "(se lect", + "(sel ect", + "Ġ Started", + "ĠStart ed", + "ĠStar ted", + "@ param", + "_ decl", + "_de cl", + "_dec l", + "_ blog", + "_b log", + "_bl og", + "Ġa ño", + "Ġañ o", + "\\ Api", + "ĠMil waukee", + "Pro vid", + "Pr ovid", + "Prov id", + "An imated", + "Anim ated", + "Animate d", + "Ġco oler", + "Ġcool er", + "Ġ Seed", + "ĠS eed", + "ĠSe ed", + "ĠSee d", + ". Edit", + ".E dit", + ".Ed it", + "Ï Ħ", + "Ġ Taking", + "ĠT aking", + "ĠTa king", + "ĠTak ing", + "Ġborder Color", + "-f ounder", + "-found er", + ".Logger Factory", + "Ġ\" \"ĊĊ", + "Ġ\"\" ĊĊ", + "Ġ\"\"Ċ Ċ", + "A LT", + "AL T", + "Ġ Late", + "ĠL ate", + "ĠLa te", + "ĠLat e", + "EDI ATE", + "EDIA TE", + "Ġ );ĊĊĊ", + "Ġ) ;ĊĊĊ", + "Ġ);Ċ ĊĊ", + "Ġ);ĊĊ Ċ", + "Ġ); ĊĊĊ", + "a fa", + "af a", + "Ġc ancellation", + "Ġcancel lation", + "Ġcancell ation", + "Ġcanc ellation", + "A tom", + "At om", + "ĠB irmingham", + "emp resa", + "empre sa", + "H EMA", + "HE MA", + "a scal", + "as cal", + "asc al", + "asca l", + "Ġup side", + "Ġups ide", + ". Version", + ".V ersion", + "Ġ Folder", + "ĠF older", + "ĠFo lder", + "ĠFol der", + "ĠFold er", + "Ġ Eight", + "ĠE ight", + "ĠEig ht", + "Ġ Vintage", + "ĠV intage", + "Ġ AppDelegate", + "ĠApp Delegate", + "ĠPre vention", + "ĠPrevent ion", + "ĠPrev ention", + ". separator", + ".s eparator", + ".se parator", + "S TM", + "ST M", + "( room", + "(r oom", + "(ro om", + "g enerator", + "gen erator", + "gener ator", + "Ġc attle", + "Ġcat tle", + "ĉ Z", + "Ġ Particle", + "ĠP article", + "ĠPart icle", + "ĠParti cle", + "' };Ċ", + "'} ;Ċ", + "Ġne ighbours", + "Ġneighb ours", + "Ġneighbour s", + "ĠState less", + "ĠStat eless", + "Ġ altitude", + "Ġalt itude", + "Ġs aint", + "Ġsa int", + "Ġsai nt", + "о бав", + "об ав", + "оба в", + "Ġcon vinc", + "Ġconv inc", + "Ġconvin c", + "Ġ Contents", + "ĠCont ents", + "ĠContent s", + "ĠConte nts", + "Ġje une", + "Ġjeu ne", + "( ts", + "(t s", + "S erialization", + "Serial ization", + "( collection", + "(c ollection", + "(col lection", + "(coll ection", + "ĠJ azz", + "ĠJa zz", + "Ġ Dod", + "ĠD od", + "ĠDo d", + "ĠR och", + "ĠRo ch", + "ĠRoc h", + "a cio", + "ac io", + "aci o", + "comm ended", + "commend ed", + "DE FINE", + "DEF INE", + ".on load", + "Ġspecial ty", + "Ġspeci alty", + "PL ACE", + "_ MOVE", + "_M OVE", + "_MO VE", + "_MOV E", + "Ġaccount able", + "Re uters", + "Ġf icken", + "Ġfi cken", + "Ġfic ken", + "Ġfick en", + "Ġde pr", + "Ġdep r", + "W ow", + "Wo w", + "V oid", + "Vo id", + ". space", + ".s pace", + ".sp ace", + "ภĹ", + "Ġt q", + "Ġ Pets", + "ĠP ets", + "ĠPe ts", + "ĠPet s", + "< $", + "( Current", + "(C urrent", + "ber ries", + "plan ation", + "pla nation", + "Ġlist Of", + "Ġ Thu", + "ĠT hu", + "ĠTh u", + "Ġ PRINT", + "ĠPR INT", + "ĠPRI NT", + "Ġm ismo", + "Ġmis mo", + "Ġmism o", + "Ġ doi", + "Ġd oi", + "Ġdo i", + "c hk", + "ch k", + "Ġ Unicode", + "ĠUn icode", + "ĠUni code", + "( role", + "(r ole", + "(ro le", + "Ġvir gin", + "< Point", + "

-->Ċ", + ">- ->Ċ", + ">-- >Ċ", + "V ol", + "Vo l", + "ĠS SD", + "ĠSS D", + ") )),", + ")) ),", + "))) ,", + ". Optional", + ".Option al", + "Ġn urses", + "Ġnur ses", + "Ġnurs es", + "Ġnurse s", + "Ġ orb", + "Ġo rb", + "Ġor b", + "_ pe", + "_p e", + ") ;čĊčĊčĊ", + ");čĊ čĊčĊ", + "); čĊčĊčĊ", + ");čĊčĊ čĊ", + "pl aced", + "place d", + "pla ced", + "es ser", + "ess er", + "esse r", + "Ġther apeutic", + "Ġwh itespace", + "Ġwhite space", + "Ġwhites pace", + "Ġ aston", + "Ġa ston", + "Ġas ton", + "Ġast on", + "Success ful", + "Ġp raised", + "Ġpr aised", + "Ġpraise d", + "Ġpra ised", + "ĠW es", + "ĠWe s", + "Ġe ighth", + "Ġeight h", + "i ral", + "ir al", + "ira l", + "Ġv rouw", + "Ġvrou w", + "Ġ faction", + "Ġf action", + "Ġfact ion", + "Ġfa ction", + "Ġfac tion", + "_ bias", + "_b ias", + "_bi as", + "Ġ witch", + "Ġw itch", + "Ġwit ch", + "Ġ npc", + "Ġn pc", + "Ġnp c", + "( sb", + "(s b", + "ĠRod rig", + "ĠRodr ig", + "_ big", + "_b ig", + "_bi g", + "D ependency", + "Dep endency", + "ĠAb raham", + "ar di", + "ard i", + "C AR", + "CA R", + "n os", + "no s", + "Ġab undance", + "Ġabund ance", + "Ġnut rients", + "Ġnutrient s", + "in stein", + "ins tein", + "inst ein", + ". Vert", + ".V ert", + ".Ver t", + "Ġ ISS", + "ĠI SS", + "ĠIS S", + "< U", + "Ġs ums", + "Ġsu ms", + "Ġsum s", + "_ hist", + "_h ist", + "_hi st", + "Ġfar mer", + "Ġfarm er", + "Ġ Abr", + "ĠA br", + "ĠAb r", + "S hot", + "Sh ot", + "Ġ BadRequest", + "ĠBad Request", + "Ġh ass", + "Ġhas s", + "Ġha ss", + "Ġ Rails", + "ĠR ails", + "ĠRa ils", + "ĠRail s", + "ĠRai ls", + "Ġaff iliated", + "Ġaffili ated", + "Ġaffiliate d", + "æĿ ¥", + "Ġe rf", + "Ġer f", + "I NF", + "IN F", + "Ġ ViewHolder", + "ĠView Holder", + "m ini", + "min i", + "mi ni", + "ĠR oth", + "ĠRo th", + "ĠRot h", + "Ġfaith ful", + "ĠPhill ips", + "ĠPhillip s", + "AN DOM", + "AND OM", + "] .[", + "]. [", + "_ PAY", + "_P AY", + "_PA Y", + "ĠAr ctic", + "ĠArc tic", + "f aker", + "fa ker", + "fake r", + "fak er", + "D igit", + "Di git", + "Dig it", + "M ale", + "Ma le", + "Mal e", + "std err", + "se ys", + "sey s", + "Ġ Å¡", + "ĠÅ ¡", + "_ remote", + "_rem ote", + "l ique", + "li que", + "liqu e", + "Ġin def", + "Ġi ndef", + "Ġind ef", + "Ġinde f", + "ĠIndust ries", + "i tra", + "it ra", + "itr a", + "_ pairs", + "_p airs", + "_pair s", + "_pa irs", + "< iostream", + " D", + "Ġs ervlet", + "Ġserv let", + "bast ian", + "Ġ >&", + "Ġ> &", + "S ID", + "SI D", + "_ clk", + "_c lk", + "_cl k", + "Ġdi visions", + "Ġdiv isions", + "Ġdivision s", + "Ġdivis ions", + "} ',Ċ", + "}' ,Ċ", + "}', Ċ", + "Ġd ildo", + "Ġdil do", + "Ġpar ade", + "Ġpara de", + "Ġpa rade", + "Ġparad e", + "m ajor", + "maj or", + "Ġa board", + "Ġab oard", + "; ++", + "Ġ fusion", + "Ġf usion", + "Ġfus ion", + "\" },{\"", + "\"} ,{\"", + "\"}, {\"", + "ĠDialog Result", + "ĉ arr", + "ĉa rr", + "ĉar r", + "- em", + "-e m", + "_ nr", + "_n r", + "( handler", + "(h andler", + "(handle r", + "(hand ler", + ". NET", + ".N ET", + ".Xtra Reports", + "ĠSh ah", + "ĠSha h", + "Ġ Brief", + "ĠB rief", + "ĠBr ief", + "ĠBri ef", + "- ,", + "Ġ precio", + "Ġp recio", + "Ġpre cio", + "Ġprec io", + "ĉ ĉĉĠĠĠĠĠĠ", + "ĉĉ ĉĠĠĠĠĠĠ", + "ĉĉĉ ĠĠĠĠĠĠ", + "ĉĉĉĠĠĠ ĠĠĠ", + "ĉĉĉĠ ĠĠĠĠĠ", + "ĉĉĉĠĠ ĠĠĠĠ", + "ĉĉĉĠĠĠĠ ĠĠ", + "ĉĉĉĠĠĠĠĠ Ġ", + "Ġ tant", + "Ġt ant", + "Ġta nt", + "Ġtan t", + "ĠGr ande", + "ĠGrand e", + "ĠGran de", + "ĠGra nde", + "/ xml", + "/x ml", + "_ ICON", + "_I CON", + "_IC ON", + "ĠR etro", + "ĠRe tro", + "ĠRet ro", + "un que", + "Ġn ag", + "Ġna g", + "to Fixed", + "X L", + "Ġ declaring", + "Ġdecl aring", + "Ġdeclar ing", + "Ġ Concrete", + "ĠCon crete", + "ĠConc rete", + "Ġ Amazing", + "ĠAm azing", + "ĠAma zing", + "ĉprint k", + "Ġdeb ates", + "Ġdebate s", + "D ATED", + "DA TED", + "DATE D", + "DAT ED", + "Ġa esthetic", + "Ġaest hetic", + "Ġaes thetic", + "eme tery", + "emet ery", + "Routing Module", + "ĠNash ville", + "W AYS", + "WA YS", + "WAY S", + "Ġ wolf", + "Ġw olf", + "Ġwo lf", + "Ġwol f", + "Ġob servers", + "Ġobs ervers", + "Ġobserv ers", + "Ġobserver s", + "Ġobserve rs", + "O TA", + "OT A", + "an son", + "ans on", + "Ġ ea", + "Ġe a", + "Ġgreen house", + "ĵį ä½ľ", + "Ġst air", + "Ġsta ir", + "Ġimm igrant", + "Ġimmigr ant", + "_ apply", + "_app ly", + "_ap ply", + "pe are", + "pear e", + "ĠB loomberg", + "ĠBloom berg", + "_ PLAYER", + "_PL AYER", + "_PLAY ER", + "R esp", + "Re sp", + "Res p", + "æŃ £", + "Choose r", + "Cho oser", + "Ġ ICollection", + "ĠI Collection", + "ĠIC ollection", + "P eter", + "Pe ter", + "Pet er", + "Err o", + "Er ro", + ".detect Changes", + "M aps", + "Map s", + "Ma ps", + "Ġ squeeze", + "Ġs queeze", + "Ġsqueez e", + "ĠH omes", + "ĠHome s", + "ĠHom es", + "ĠHo mes", + "weg ian", + "Ġformat ting", + "Ġnegot iate", + "u ld", + "ul d", + "ĠN ep", + "ĠNe p", + "Ġ QB", + "ĠQ B", + "Ġeconom ies", + "Ġec onomies", + "Ġ */,", + "Ġ* /,", + "Ġ*/ ,", + "Ġred und", + "Ġredu nd", + "ĠA ber", + "ĠAb er", + "ĠAbe r", + ".IsNullOr WhiteSpace", + "yc led", + "ycle d", + "ycl ed", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "_ Sh", + "_S h", + "Ġs kept", + "Ġsk ept", + "Ġske pt", + "Ġre created", + "Ġrec reated", + "Ġrecre ated", + "Ġrecreate d", + "Ġ getType", + "Ġget Type", + "Ġm argins", + "Ġmargin s", + "Ġmarg ins", + "Ġcolon ial", + "ch arts", + "char ts", + "cha rts", + "chart s", + "/ /@", + "// @", + "Ġ processors", + "Ġprocess ors", + "Ġprocessor s", + "Ġprocesso rs", + "è¯ ´", + "b atis", + "bat is", + "æĦ ı", + "at orio", + "ator io", + "ato rio", + "atori o", + "ment ioned", + "mention ed", + "P atient", + "Pat ient", + "Ġp rey", + "Ġpr ey", + "Ġpre y", + "Check box", + "_ xpath", + "_x path", + ". skip", + ".s kip", + ".sk ip", + "ĠMor mon", + "ĠMorm on", + "ĠMemory Stream", + "CR EMENT", + "CRE MENT", + "Ġ ku", + "Ġk u", + "m eld", + "me ld", + "mel d", + "\\ Data", + "\\D ata", + "Ġ Kernel", + "ĠK ernel", + "ĠKer nel", + "ĠKern el", + "i ltr", + "il tr", + "ilt r", + "éĢ ģ", + "( profile", + "(pro file", + "(pr ofile", + "C arbon", + "Car bon", + "R OLE", + "RO LE", + "ROL E", + "( pl", + "(p l", + "] *(", + "]* (", + ". memory", + ".m emory", + ".mem ory", + ".memo ry", + "Ġme dal", + "Ġmed al", + "Ġ advisor", + "Ġad visor", + "Ġadv isor", + "Ġadvis or", + "it ät", + "itä t", + "Ġ hdr", + "Ġh dr", + "Ġhd r", + "ie rung", + "ier ung", + "Ġ Provides", + "ĠPro vides", + "ĠProvid es", + "ĠProvide s", + "ĠProv ides", + "( alpha", + "(al pha", + "Ġteen agers", + "Ġteenager s", + "Ġteenage rs", + "- parser", + "-p arser", + "-par ser", + "-parse r", + ". LatLng", + ".L atLng", + "] ()Ċ", + "]( )Ċ", + "]() Ċ", + "Ġfel ony", + "Ġfelon y", + "ĉĉĉ ĊĉĉĉĊ", + "ĉĉĉĊ ĉĉĉĊ", + "B OOK", + "BO OK", + "Ġ slash", + "Ġs lash", + "Ġsl ash", + "Ġsla sh", + "Ġ clearfix", + "Ġclear fix", + "ĠPro phet", + "ĠProp het", + "å® ¹", + "right ness", + "- fi", + "-f i", + ". kind", + ".k ind", + "er ton", + "ert on", + "erto n", + "J im", + "Ġmanip ulate", + "Ġ worksheet", + "Ġwork sheet", + "Ġworks heet", + "o lin", + "ol in", + "oli n", + "st ars", + "star s", + "sta rs", + "Ġ artifact", + "Ġart ifact", + "_ EMPTY", + "_EM PTY", + "_EMP TY", + "ĉ main", + "ĉm ain", + "--- ---------- ';", + ">' ;", + "Ġexp ressing", + "Ġexpress ing", + "Ġexpres sing", + "Ġ IQ", + "ĠI Q", + "Ġ Fact", + "ĠF act", + "ĠFac t", + "ĠFa ct", + "/************************************************************************ *******Ċ", + "/**************************************************************************** ***Ċ", + "_ mass", + "_m ass", + "_ma ss", + "_mas s", + ") ):", + ")) :", + "Ġcon dom", + "Ġcond om", + "Ġcondo m", + "Ġcreate State", + "ome town", + "omet own", + "Ġi rr", + "Ġir r", + "Ġ >(", + "Ġ> (", + "> B", + "it eration", + "ite ration", + "iter ation", + "ãĥ ª", + "Ġsh irts", + "Ġshirt s", + "ou nty", + "ount y", + "oun ty", + "- >$", + "-> $", + "_ SIGN", + "_S IGN", + "_SIG N", + "_SI GN", + "ĠD ale", + "ĠDa le", + "ĠDal e", + "Ġ jj", + "Ġj j", + "E asy", + "F re", + "Fr e", + "Ġ Ny", + "ĠN y", + "Ġ chlor", + "Ġch lor", + "m atched", + "match ed", + "mat ched", + "ĠG erm", + "ĠGe rm", + "ĠGer m", + "- UA", + "-U A", + "ĠN athan", + "ĠNa than", + "ĠNat han", + "ĠNath an", + "e ducation", + "educ ation", + "edu cation", + "- yard", + "-y ard", + "- che", + "-c he", + "-ch e", + "h ouses", + "ho uses", + "house s", + "hou ses", + "r itional", + "rit ional", + "rition al", + "Ġpro ximity", + "Ġprox imity", + "Ġdie sem", + "Ġdies em", + "Ġdiese m", + "áºŃ p", + "Ġd rought", + "Ġdr ought", + "Ġdro ught", + ". audio", + ".a udio", + ".au dio", + "Ġ Leo", + "ĠL eo", + "ĠLe o", + "Ġfavor able", + "Ġfav orable", + "in ch", + "inc h", + "ĠD aw", + "ĠDa w", + "r ibly", + "rib ly", + "_ student", + "_st udent", + "id able", + "ida ble", + "O VE", + "OV E", + "Ġl acks", + "Ġla cks", + "Ġlack s", + "Ġlac ks", + "oun cing", + "ounc ing", + ". business", + ".b usiness", + ".bus iness", + "Ġ reopen", + "Ġre open", + "m aybe", + "may be", + "_ GLOBAL", + "_G LOBAL", + "Ġd resses", + "Ġdr esses", + "Ġdress es", + "ĠEd wards", + "ĠEdward s", + "ens ible", + "ensi ble", + "Ġ Hardware", + "ĠH ardware", + "ĠHard ware", + "Ġ Excellent", + "ĠEx cellent", + "ĠExcell ent", + "ĠTime Unit", + "CT IONS", + "CTION S", + "Ġs chedules", + "Ġsched ules", + "Ġschedule s", + "Ġ segue", + "Ġse gue", + "Ġseg ue", + "Ġsegu e", + "Open s", + "Op ens", + "am men", + "amm en", + "- Identifier", + "Ġst aring", + "Ġstar ing", + "Ġsta ring", + "Ġhapp ily", + "ĠH ob", + "ĠHo b", + "' _", + "Ġ \");", + "Ġ\" );", + "Ġ\") ;", + "ament os", + "amento s", + "amen tos", + "et ched", + "etch ed", + "etc hed", + "Ġ/ >}Ċ", + "Ġ/> }Ċ", + "Ġ/>} Ċ", + ". Users", + ".User s", + ".Use rs", + "Ġint errupted", + "Ġinter rupted", + "Ġinterrupt ed", + "Cont acts", + "Contact s", + "Conta cts", + "Ġ registro", + "Ġreg istro", + "Ġregistr o", + "Ġregist ro", + "in burgh", + "C HA", + "CH A", + "_ imp", + "_i mp", + "_im p", + "p his", + "ph is", + "phi s", + "s ay", + "sa y", + "Ġret ailer", + "Ġretail er", + ". NODE", + ".N ODE", + ".NO DE", + "/ maps", + "/m aps", + "/map s", + "_ LAST", + "_L AST", + "_LA ST", + "Ġ Charge", + "ĠCh arge", + "ĠChar ge", + "ĠCharg e", + "_ guard", + "_g uard", + "C ollider", + "Col lider", + "Coll ider", + "ĠStateless Widget", + "\" :[\"", + "\": [\"", + "\":[ \"", + "(\" ../../", + "(\"../ ../", + "(\".. /../", + "i oxide", + "iox ide", + "ioxid e", + "ĠS und", + "ĠSun d", + "ĠSu nd", + "Ġ' ';", + "Ġ'' ;", + "un set", + "uns et", + "add Widget", + "л Ñİ", + "el les", + "ell es", + "elle s", + "al ker", + "alk er", + "A rc", + "Ar c", + "Ġd educt", + "Ġde duct", + "Ġded uct", + "G UILayout", + "GUI Layout", + "ĠV illa", + "ĠVi lla", + "ĠVill a", + "ĠVil la", + "Ġfor bidden", + "Ġforb idden", + "Ġforbid den", + "_ where", + "_w here", + "_wh ere", + "Ġ \\/", + "Ġ\\ /", + "ĠT ib", + "ĠTi b", + "_ AX", + "_A X", + "] čĊčĊ", + "]čĊ čĊ", + "Ġ Bir", + "ĠB ir", + "ĠBi r", + "Ġb end", + "Ġbe nd", + "Ġben d", + "Ġ MAKE", + "ĠM AKE", + "ĠMA KE", + "ĠMAK E", + "Ġ MET", + "ĠM ET", + "ĠME T", + "Ġf utures", + "Ġfuture s", + "Ġfut ures", + "Ġfu tures", + "Ġ weighted", + "Ġwe ighted", + "Ġweight ed", + "Ġweigh ted", + "\"\" \"čĊ", + "\"\"\" čĊ", + "Ġ authorize", + "Ġauthor ize", + "( program", + "(p rogram", + "(pro gram", + "(pr ogram", + "(prog ram", + "} ,{\"", + "}, {\"", + "},{ \"", + "Ġcoeff icients", + "Ġcoefficient s", + "ê s", + "Per Page", + "ĠB athroom", + "ĠBath room", + "ĠPublish ing", + "G PL", + "GP L", + "Ġsub missions", + "Ġsubmission s", + "Ġ NUMBER", + "ĠNUM BER", + "ĠNU MBER", + "j Äħ", + "Ġadd itionally", + "Ġadditional ly", + "Ġaddition ally", + "em pre", + "emp re", + "ĠS hel", + "ĠSh el", + "ĠShe l", + "o typ", + "ot yp", + "oty p", + "S olution", + "Sol ution", + "Ġth under", + "Ġthu nder", + "_ ec", + "_e c", + "Ġ ĊĠĠĠĠĊ", + "ĠĊ ĠĠĠĠĊ", + "ĠF ellow", + "ĠFel low", + "ĠFell ow", + "Ġk ay", + "Ġka y", + "Ġnew State", + "ONT AL", + "Im plementation", + "Implement ation", + ". Look", + ".L ook", + ".Lo ok", + "Ġ ents", + "Ġe nts", + "Ġen ts", + "Ġent s", + "Ġl ors", + "Ġlo rs", + "Ġlor s", + "Ġ BIG", + "ĠB IG", + "ĠBI G", + "f ab", + "fa b", + "Ġaverage d", + "Ġaver aged", + "Ġ Feedback", + "ĠFe edback", + "ĠFeed back", + "ĠW ells", + "ĠWell s", + "ĠWel ls", + "Ġm artial", + "Ġmart ial", + "Ġind ul", + "Ġindu l", + "ĠComm unist", + "ĠCommun ist", + "ĠF orex", + "ĠFor ex", + "ĠFore x", + "ĠFo rex", + "ĠAgricult ure", + "ĠAgr iculture", + "\" [", + "Ġqu ar", + "Ġq uar", + "Ġqua r", + "ĠK ont", + "ĠKon t", + "ĠKo nt", + "ĉ view", + "ĉv iew", + ". Bytes", + ".Byte s", + ".By tes", + "d esktop", + "des ktop", + "desk top", + "Ġ Makes", + "ĠM akes", + "ĠMake s", + "ĠMa kes", + "ĠMak es", + "akes peare", + ". Nullable", + ".Null able", + "Ġspot light", + "V B", + "o wy", + "ow y", + "( torch", + "(t orch", + "(to rch", + "t ridge", + "tr idge", + "tri dge", + "_ bounds", + "_b ounds", + "_bound s", + "_bo unds", + "Ġapolog ize", + ". addItem", + ".add Item", + "an td", + "ant d", + "* );Ċ", + "*) ;Ċ", + ", u", + "( gen", + "(g en", + "ç» ĵ", + "re ator", + "reat or", + "rea tor", + "ĠC ord", + "ĠCo rd", + "ĠCor d", + "o upper", + "ou pper", + "oup per", + ". metro", + ".m etro", + ".me tro", + ".met ro", + "Ġ ew", + "Ġe w", + "Ġ WORD", + "ĠW ORD", + ". After", + ".A fter", + "Ġdet ained", + "Ġdetain ed", + "ĠH ammer", + "ĠHam mer", + "ĠHamm er", + "ex isting", + "exist ing", + "Ġ ost", + "Ġo st", + "Ġos t", + "Ġmon ument", + "- custom", + "-c ustom", + "User ID", + "Ġ Nom", + "ĠN om", + "ĠNo m", + "Ġre jection", + "Ġreject ion", + "Ġrej ection", + "( dim", + "(d im", + "(di m", + "Ġ singleton", + "Ġs ingleton", + "Ġsingle ton", + "Ġsing leton", + "ĉ die", + "ĉd ie", + "ar iance", + "ari ance", + "arian ce", + "aria nce", + "re ports", + "rep orts", + "report s", + "repo rts", + "] !=", + "e lda", + "el da", + "eld a", + "Ġpreval ence", + "_ regs", + "_re gs", + "_reg s", + ". \".", + ".\" .", + "Ġfemin ist", + "Code c", + "Co dec", + "Cod ec", + "Ġ **Ċ", + "Ġ* *Ċ", + "Ġ** Ċ", + "( labels", + "(label s", + "_ MARK", + "_M ARK", + "_MA RK", + "FA ILED", + "FAIL ED", + "Ġadminister ed", + "W N", + "ĠĠ ĠĠĠĠĠĠĉĉ", + "ĠĠĠĠ ĠĠĠĠĉĉ", + "ĠĠĠĠĠĠĠĠ ĉĉ", + "ĠĠĠĠĠĠĠ Ġĉĉ", + "ĠĠĠĠĠ ĠĠĠĉĉ", + "ĠĠĠĠĠĠ ĠĠĉĉ", + "ĠĠĠĠĠĠĠĠĉ ĉ", + "Ġ noun", + "Ġn oun", + "Ġno un", + "Ġnou n", + "w ig", + "wi g", + "Ġg otta", + "Ġgot ta", + "Ġ rif", + "Ġr if", + "Ġri f", + "- im", + "-i m", + "ĠPaul o", + "ĠPa ulo", + "ĠCommand Type", + "] ))ĊĊ", + "]) )ĊĊ", + "])) ĊĊ", + "]))Ċ Ċ", + "- zero", + "-z ero", + "Tr aining", + "Train ing", + "Tra ining", + "Ġ lord", + "Ġl ord", + "Ġlo rd", + "Ġlor d", + "_ art", + "_a rt", + "_ar t", + "re ddit", + "red dit", + "redd it", + "C ert", + "Ce rt", + "Ġp eso", + "Ġpe so", + "Ġpes o", + "R ot", + "Ro t", + "Ġen danger", + "Ġend anger", + ". dr", + ".d r", + "user Info", + "u nts", + "un ts", + "unt s", + "n v", + "ĠTr ailer", + "ĠTra iler", + "ĠTrail er", + "- first", + "-f irst", + "-fi rst", + "( make", + "(m ake", + "Ġbenef ici", + "- black", + "-b lack", + "-bl ack", + "i ÃŁ", + "Ġund oubtedly", + "Ġm ex", + "Ġme x", + "ĠAn cient", + "ĠAnc ient", + "( as", + "(a s", + "Ġdes cent", + "Ġdesc ent", + "P ick", + "Pic k", + "Pi ck", + "Ġrep lica", + "Ġrepl ica", + "Ġreplic a", + "$ obj", + "$o bj", + "ä hr", + "äh r", + "Ġar rows", + "Ġarr ows", + "Ġarrow s", + "f ty", + "ft y", + "ĠLib ya", + "u ga", + "ug a", + "ch arged", + "char ged", + "charge d", + "charg ed", + "T ur", + "Tu r", + "Ġh omic", + "Ġhom ic", + "Ġho mic", + "is sen", + "iss en", + "isse n", + "Ġ Fake", + "ĠF ake", + "ĠFa ke", + "ĠFak e", + "Ġbe ers", + "Ġbeer s", + "Ġbee rs", + "Ġsc attered", + "Ġscatter ed", + "( Time", + "(T ime", + "UT IL", + "Ġbureauc r", + "Ġbureau cr", + "/ plain", + "/p lain", + "/pl ain", + "Ġst icking", + "Ġstick ing", + "F AIL", + "FA IL", + "ĠC ovid", + "ĠCo vid", + "ĠCov id", + "Th ird", + "_ present", + "_p resent", + "_pre sent", + "_pres ent", + "ĠP ierre", + "ĠPi erre", + "ĠPier re", + "Ġ ëª", + "Ġë ª", + "Ġ[ ...]ĊĊ", + "Ġ[... ]ĊĊ", + "Ġ[...] ĊĊ", + "P rob", + "Pro b", + "Pr ob", + "Ġ Traffic", + "ĠTra ffic", + "ĠTraff ic", + "i cao", + "ic ao", + "ica o", + "do ctor", + "doc tor", + "Ġ ),ĊĊ", + "Ġ) ,ĊĊ", + "Ġ),Ċ Ċ", + "Ġ), ĊĊ", + "T abs", + "Tab s", + "Ta bs", + "a lu", + "al u", + "ï¼ļ âĢľ", + "Ġin herent", + "Ġinher ent", + "_ No", + "_N o", + "r itis", + "rit is", + "Ġ Proof", + "ĠP roof", + "ĠPro of", + ". basename", + ".b asename", + ".base name", + "ä¼ ļ", + "Ġc him", + "Ġch im", + "Ġchi m", + "Ġ Protected", + "ĠProt ected", + "ĠProtect ed", + "c rit", + "cri t", + "cr it", + "Ġp rone", + "Ġpro ne", + "Ġpr one", + "Ġpron e", + "Ġ кон", + "Ġк он", + "Ġко н", + "Ġ Heroes", + "ĠHer oes", + "ĠHero es", + "Ġan xious", + "Ġanx ious", + "Ġ anos", + "Ġa nos", + "Ġan os", + "Ġano s", + "Ġweek ends", + "Ġweekend s", + "Ġs ext", + "Ġse xt", + "Ġsex t", + "Ġre ducer", + "Ġred ucer", + "Ġredu cer", + "Ġreduce r", + "= UTF", + "h alf", + "ha lf", + "hal f", + "ĠS aw", + "ĠSa w", + ". mm", + ".m m", + "Ġn ueva", + "Ġnu eva", + "Ġnue va", + ".current Target", + ". lua", + ".l ua", + ".lu a", + "_EXT ENSION", + "ĉ reg", + "ĉr eg", + "ĉre g", + "Ġ Ctrl", + "ĠC trl", + "ĠCt rl", + "_ align", + "_al ign", + "accept able", + "Ġr ushing", + "Ġrush ing", + "f rac", + "fr ac", + "fra c", + "Ġbo asts", + "Ġboast s", + "Ġboa sts", + "F ive", + "Fi ve", + " ±", + "Ġ Temperature", + "ĠT emperature", + "ĠTem perature", + "ĠTemper ature", + "> ):", + ">) :", + "Ġch arter", + "Ġchar ter", + "Ġchart er", + "RE ATED", + "REATE D", + "REAT ED", + "REA TED", + "Ġsub jected", + "Ġsubject ed", + "Ġsubj ected", + "Ġ opc", + "Ġo pc", + "Ġop c", + "health y", + "使 ç͍", + "ĠScient ific", + "Ġ frau", + "Ġfr au", + "Ġfra u", + "ri ages", + "ria ges", + "riage s", + "ภĶ", + ". inventory", + ".in ventory", + "at ionale", + "ation ale", + "ational e", + "M ad", + "Ma d", + "min utes", + "minute s", + "> >();Ċ", + ">> ();Ċ", + ">>( );Ċ", + ">>() ;Ċ", + "Ġ Env", + "ĠE nv", + "ĠEn v", + "Ġrecord ings", + "Ġrecording s", + "Ġsusp icion", + "sql ite", + "sq lite", + "ĉ read", + "ĉr ead", + "ĉre ad", + "ãģ ¦", + "Ġwor ries", + ".put String", + "ĠSh anghai", + "( uid", + "(u id", + "(ui d", + "r er", + "re r", + "ĠvÃŃ de", + "\" ):", + "\") :", + "Ġmethod ology", + "Ġк оÑĤоÑĢ", + "Ġко ÑĤоÑĢ", + "ĠкоÑĤ оÑĢ", + "c cc", + "cc c", + "av ad", + "ava d", + "Ġin duction", + "Ġind uction", + "Ġindu ction", + "ĉ Thread", + "ĉT hread", + ", string", + ",s tring", + ",str ing", + ",st ring", + "ạ i", + "neh men", + "u ition", + "ui tion", + "uit ion", + "Ġ* __", + "Ġ*_ _", + ".e mf", + ".em f", + "Ġ ìľ", + "Ġì ľ", + "/ themes", + "/th emes", + "/theme s", + "/the mes", + "Ġ Nine", + "ĠN ine", + "ĠNi ne", + "ĠNin e", + ". One", + ".On e", + ".O ne", + "Ġ Embed", + "ĠEm bed", + "ĠEmb ed", + "Ġf az", + "Ġfa z", + "u ations", + "uation s", + "uat ions", + "Ġprivate ly", + "Ġpriv ately", + "Ġprivat ely", + "Ġ ling", + "Ġl ing", + "Ġli ng", + "Ġlin g", + "[ F", + "u shi", + "us hi", + "ush i", + "Ġlaunch es", + "( KEY", + "(K EY", + "G MT", + "GM T", + "Ġa iming", + "Ġaim ing", + "Ġai ming", + "pat ible", + "ĠB iden", + "ĠBi den", + "ĠBid en", + "i w", + "Ġ Degree", + "ĠD egree", + "ĠDe gree", + "ĠDeg ree", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "Ġ$ ('<", + "Ġ$( '<", + "Ġ$(' <", + "á rios", + "ário s", + "ár ios", + "to UpperCase", + "ìł ľ", + "Ġ EUR", + "ĠE UR", + "ĠEU R", + "Ġovers ight", + "Ġtable sp", + "Ġtables p", + "Up dates", + "Update s", + ".m akedirs", + ".make dirs", + "Ġ humidity", + "Ġh umidity", + "Ġhum idity", + "Ġhumid ity", + "/ template", + "/t emplate", + "/temp late", + "Al ways", + "( IS", + "(I S", + "_ cert", + "_c ert", + "_ce rt", + "D ig", + "Di g", + "Ġunder way", + "or ton", + "ort on", + "ĠHur ricane", + "Ġsp ends", + "Ġspe nds", + "Ġspend s", + "Ġ Segment", + "ĠS egment", + "ĠSe gment", + "ĠSeg ment", + "Ġ flies", + "Ġf lies", + "Ġfl ies", + "Ġ Toggle", + "ĠT oggle", + "ĠL ynch", + "ĠLyn ch", + "Ġs enses", + "Ġsense s", + "Ġsens es", + "Ġsen ses", + "ĠK os", + "ĠKo s", + "set Enabled", + "ist ically", + "istic ally", + "istical ly", + "Ġ tester", + "Ġt ester", + "Ġte ster", + "Ġtest er", + "Ġtes ter", + "Ġteste r", + "Ġadministr ators", + "Ġadministrator s", + "Ġt agged", + "Ġtag ged", + "Ð ĵ", + "Ġ shortcut", + "Ġshort cut", + "Ġ Resolution", + "ĠRe solution", + "ĠRes olution", + "Ġsuper vision", + "Ġsuperv ision", + "ĠAsh ley", + "Tr acking", + "Track ing", + "ul atory", + "ulator y", + "an del", + "and el", + "ande l", + "i sten", + "is ten", + "ist en", + "iste n", + "Ġun re", + "Ġunr e", + "( diff", + "(d iff", + "(di ff", + "AN TS", + "ANT S", + "Ġr ider", + "Ġrid er", + "Ġride r", + "Ġri der", + "Ġs Äħ", + ". Series", + ".S eries", + ".Se ries", + "_ orders", + "_order s", + "_or ders", + "_ord ers", + "ORIZ ONTAL", + "Ġret ention", + "ãĢĤ čĊčĊ", + "\"> čĊčĊ", + "\">čĊ čĊ", + "Ġdi agonal", + "Ġdiag onal", + "Ġdiagon al", + "ĠC ancellationToken", + "_ Internal", + "_In ternal", + "_Int ernal", + "_Inter nal", + "Ġr uin", + "Ġru in", + ". Qt", + ".Q t", + "ocr atic", + "ocrat ic", + "T el", + "Te l", + "Ġ Answers", + "ĠAn swers", + "ĠAnswer s", + "ĠAns wers", + "m atic", + "ma tic", + "mat ic", + "Ġ xp", + "Ġx p", + "a tem", + "at em", + "ate m", + "_ jobs", + "_j obs", + "_job s", + "_ any", + "_a ny", + "_an y", + "Ġsen iors", + "Ġsenior s", + "Ġseni ors", + "Ġland mark", + "ĠQ List", + "Ġman eu", + "Ġmane u", + "ot ify", + "oti fy", + "/ \";Ċ", + "/\" ;Ċ", + "/ server", + "/s erver", + "ĠPhil osoph", + "u tenant", + "ut enant", + "ute nant", + "uten ant", + "( io", + "(i o", + "h z", + "Ġ authenticated", + "Ġauth enticated", + "Ġauthentic ated", + "Ġauthenticate d", + "d v", + "- Compatible", + "Origin ally", + "Original ly", + "Orig inally", + ", function", + ",f unction", + "ãĢĤ čĊ", + "ĠRepresent ative", + "as ily", + "asi ly", + "asil y", + "irc uit", + ". dt", + ".d t", + "( math", + "(m ath", + "(mat h", + ". Marshal", + ".M arshal", + ".Mar shal", + "[ ,", + "Ġ Cities", + "ĠC ities", + "ĠCit ies", + "ĠCi ties", + "_ turn", + "_t urn", + "| )Ċ", + "Ġ cantidad", + "Ġc antidad", + "Ġcant idad", + "al ter", + "alt er", + "alte r", + "ĉ ui", + "ĉu i", + "ĠNe braska", + "Ġsk irt", + "Ġski rt", + ". bg", + ".b g", + "Shared Preferences", + "( style", + "(st yle", + "Ġg rief", + "Ġgr ief", + "Ġgri ef", + "g ew", + "ge w", + "Ġsaf eg", + "Ġsafe g", + "o lang", + "ol ang", + "ola ng", + "olan g", + "_ lists", + "_l ists", + "_list s", + "_li sts", + "ì Ľ", + "Ġgran ite", + "Ġgra nite", + "Ġhot test", + "Ġhott est", + ". jdbc", + ".j dbc", + ".jd bc", + ". Customer", + ".C ustomer", + ".Custom er", + "Ġ âī¤", + "Ġâī ¤", + "Ġw aar", + "Ġwa ar", + "_ scene", + "_s cene", + "_sc ene", + "+ '/", + "+' /", + "ĠJ TextField", + "ĠJText Field", + "ĠJT extField", + "Ġs eating", + "Ġse ating", + "Ġsea ting", + "Ġseat ing", + "Ġw ears", + "Ġwe ars", + "Ġwear s", + "Ġ` /", + "C ases", + "Case s", + "Ca ses", + "Cas es", + "Ġ Youtube", + "ĠY outube", + "ĠYou tube", + "ı m", + "Ġb alcon", + "Ġbal con", + ", G", + "Meta Data", + "Met aData", + "- price", + "-p rice", + "-pr ice", + "S CR", + "SC R", + "Un ity", + "Unit y", + "Uni ty", + "Ġtr unk", + "={ `${", + "={` ${", + "Ġearth quake", + "Ġearthqu ake", + "P artial", + "Part ial", + "Ġ subst", + "Ġsu bst", + "Ġsub st", + "Ġsubs t", + "Ġel imin", + "Ġelim in", + "=\" '.", + "=\"' .", + "//* [@", + "//*[ @", + "Ġsup ervisor", + "Ġsuper visor", + "Ġsuperv isor", + "vr olet", + "vro let", + "_ article", + "_art icle", + "Ġ pane", + "Ġp ane", + "Ġpa ne", + "Ġpan e", + "b io", + "bi o", + "Ġmot ors", + "Ġmo tors", + "Ġmotor s", + "Ġmoto rs", + "N M", + "F rank", + "Fr ank", + "Fran k", + "Fra nk", + "Ġon ion", + "- word", + "-w ord", + "Item ClickListener", + "ItemClick Listener", + "Ġ brit", + "Ġb rit", + "Ġbr it", + "Ġbri t", + "end encies", + "enden cies", + "Com puter", + "Comp uter", + "Compute r", + "Comput er", + "_ running", + "_r unning", + "_run ning", + "( day", + "(d ay", + "(da y", + "- he", + "-h e", + "( named", + "(n amed", + "(name d", + "ĠS ach", + "ĠSa ch", + "ĠSac h", + "о Ñĩ", + "c ampaign", + "camp aign", + ". Abstract", + ".A bstract", + ".Ab stract", + ".Abs tract", + "( wrapper", + "(w rapper", + ". pay", + ".p ay", + ".pa y", + "Ġ uw", + "Ġu w", + "G eo", + "Ge o", + "r ails", + "ra ils", + "rai ls", + "rail s", + "/ select", + "/s elect", + "/se lect", + "i chte", + "ic hte", + "ich te", + "icht e", + "s ons", + "so ns", + "son s", + "E VENT", + "EV ENT", + "Ġal iment", + "Ġali ment", + "Pro viders", + "Provider s", + "Provid ers", + "Provide rs", + "Prov iders", + "A wait", + "Aw ait", + "_INTER VAL", + ". off", + ".of f", + ".o ff", + "Ġgl uten", + "Ġglut en", + "Ġglu ten", + "_ cloud", + "_c loud", + "_cl oud", + "Ġ wen", + "Ġw en", + "Ġwe n", + ". extract", + ".ex tract", + ".ext ract", + ".extra ct", + "ĉ button", + "ĉb utton", + "/ MM", + "/M M", + "P arty", + "Par ty", + "Part y", + "Ġdem ographic", + "Ġdemo graphic", + "_ errno", + "_err no", + "Ġh iking", + "Ġhi king", + "Ġhik ing", + "(' ')Ċ", + "\", @\"", + "Ġ wit", + "Ġw it", + "Ġwi t", + "r á", + "ol ogie", + "olog ie", + "olo gie", + "ologi e", + "Ġ Styles", + "ĠSt yles", + "ĠStyle s", + "ĠSty les", + "ĠBrowser Module", + ". RequestMapping", + ".Request Mapping", + "ic ans", + "ica ns", + "ican s", + "P AGE", + "PA GE", + "c reation", + "cre ation", + "creat ion", + "ĠF erguson", + "u ded", + "ud ed", + "ude d", + "num bers", + "number s", + "Ġ GTK", + "ĠG TK", + "ĠGT K", + "Ġpresent ations", + "Ġpresentation s", + "ĠB obby", + "ĠBob by", + "_ span", + "_s pan", + "_sp an", + "e style", + "est yle", + "esty le", + "Ġillegal ly", + "Ġilleg ally", + "ab ela", + "abel a", + "abe la", + "Ġbattle field", + "cap acity", + "t error", + "ter ror", + "te rror", + "terr or", + "] \");Ċ", + "]\" );Ċ", + "]\") ;Ċ", + "Ġwar rior", + "le ader", + "lead er", + "lea der", + "Ġ DBG", + "ĠD BG", + "ĠDB G", + "Ġ Revenue", + "ĠRe venue", + "Ġvi gil", + "Ġvig il", + "Ġcounter parts", + "Ġcounterpart s", + "( Error", + "(E rror", + "AC TER", + "ACT ER", + "Ġhe eft", + "Ġse lections", + "Ġselect ions", + "Ġselection s", + "Ġsel ections", + "Ġsele ctions", + "ze ug", + "t om", + "to m", + "- two", + "-t wo", + "-tw o", + ". ;Ċ", + ".; Ċ", + "_ statement", + "_st atement", + "_state ment", + "_stat ement", + "_sta tement", + "ĠA id", + "ĠAi d", + "ĠV ul", + "ĠVu l", + "_ rgb", + "_r gb", + "_rg b", + "Ġpr izes", + "Ġpri zes", + "Ġprize s", + "Ġ editable", + "Ġed itable", + "Ġedit able", + "Ġedi table", + "ĉ form", + "ĉf orm", + "ĉfor m", + "ın ı", + ". decor", + ".de cor", + ".dec or", + "D emo", + "De mo", + "Dem o", + "l ices", + "lic es", + "li ces", + "lice s", + "Ġen ctype", + "Ġenc type", + "rat ulations", + "Ġ ROS", + "ĠR OS", + "ĠRO S", + "_ chars", + "_ch ars", + "_char s", + "ĠJ ahr", + "ĠJa hr", + "ĠJah r", + "p artial", + "part ial", + "Ñĥ ÑĤ", + "Ġ Receive", + "ĠRe ceive", + "ĠRece ive", + "ĠL ands", + "ĠLa nds", + "ĠLand s", + "ĠLan ds", + "AP TER", + "APT ER", + "Ġch opped", + "Ġcho pped", + "Ġchop ped", + ". .\"", + ".. \"", + "Ġ Analy", + "ĠAn aly", + "ĠAnal y", + "ĠAna ly", + "Ġ UID", + "ĠU ID", + "ĠUI D", + "ĠR adeon", + "ĠRad eon", + "ĠB ee", + "ĠBe e", + "Ġu nm", + "Ġun m", + "> M", + ".find all", + "Token izer", + "Ġ WHAT", + "ĠWH AT", + "Ġ sj", + "Ġs j", + "D rawing", + "Draw ing", + "E ss", + "Es s", + "O ND", + "ON D", + "Ĭ ¶", + "( packet", + "(p acket", + "(pa cket", + "(pack et", + "âĢĶ but", + "Inv ocation", + "ĠN uclear", + "ĠNu clear", + "? ;Ċ", + "Ġgr andes", + "Ġgrand es", + "Ġgran des", + "Ġgrande s", + "Ġ Crypt", + "ĠC rypt", + "ĠCry pt", + "r emark", + "re mark", + "rem ark", + "rema rk", + "Ġ' ../../../../", + "Ġ'../ ../../../", + "Ġ'../../ ../../", + "Ġ'../../../ ../", + "Ġin ability", + "m agic", + "mag ic", + "c ats", + "ca ts", + "cat s", + "Ġ simulate", + "Ġsim ulate", + "Ġsimul ate", + ": ${", + ":$ {", + "in flate", + "inf late", + "Ġ ener", + "Ġe ner", + "Ġen er", + ": NO", + ":N O", + "i ples", + "ip les", + "iple s", + "ipl es", + "Ġme rit", + "Ġmer it", + "Ġ Rated", + "ĠR ated", + "ĠRa ted", + "ĠRate d", + "ĠRat ed", + "Ġg lue", + "Ġgl ue", + "Ġglu e", + "/ blog", + "/b log", + "/bl og", + "Ġ gren", + "Ġg ren", + "Ġgr en", + "Ġgre n", + "Ġthr illed", + "Ġthrill ed", + ". CH", + ".C H", + "un can", + "unc an", + "unca n", + "Ġ PRIMARY", + "ĠPR IMARY", + "ĠPRI MARY", + "Ġper sec", + "Ġpers ec", + "Ġperse c", + "Ġfe ared", + "Ġfear ed", + ". MIN", + ".M IN", + "ĠThe ater", + "é Ĵ", + "ateg orie", + "ategor ie", + "ategori e", + "atego rie", + "æ® µ", + "Ġappet ite", + "s quare", + "squ are", + "ĠAlex and", + "ĠAlexa nd", + ". UserId", + ".User Id", + "_ gt", + "_g t", + "_ enter", + "_en ter", + "_ent er", + "Ġgrad uates", + "Ġgraduate s", + "Ġgradu ates", + "Fragment Manager", + "Author ize", + "-N LS", + "( My", + "(M y", + "Ġtri umph", + "Ġtrium ph", + "us ting", + "ust ing", + "ustin g", + "_PARAM S", + "_PAR AMS", + "Char acters", + "Character s", + "(: ,:,", + "(:, :,", + "_ BUILD", + "_B UILD", + "_BU ILD", + "M Hz", + "MH z", + "Ġw ashed", + "Ġwas hed", + "Ġwa shed", + "Ġwash ed", + "Ġun cle", + "Ġunc le", + "St eve", + "Ste ve", + "ar down", + "ard own", + "ardo wn", + "< stdio", + " ${", + ">$ {", + "_ confirmation", + "_confirm ation", + "Ġt rophy", + "Ġtr ophy", + "Ġtro phy", + "Ġtrop hy", + "W orks", + "Work s", + "ĠElect ronics", + "ĠElectronic s", + "ĠElectron ics", + "ĠMediterr anean", + "_ metrics", + "_m etrics", + "_metric s", + "_met rics", + "Ġann ouncing", + "Ġannounc ing", + "Ġ DAY", + "ĠD AY", + "ĠDA Y", + "_ proto", + "_pro to", + "_pr oto", + "_prot o", + "Ġ pear", + "Ġp ear", + "Ġpe ar", + "Ġpea r", + "base Url", + "ĉ ĉĉĉĉĉĉĉĊ", + "ĉĉ ĉĉĉĉĉĉĊ", + "ĉĉĉĉ ĉĉĉĉĊ", + "ĉĉĉ ĉĉĉĉĉĊ", + "ĉĉĉĉĉ ĉĉĉĊ", + "ĉĉĉĉĉĉ ĉĉĊ", + "ĉĉĉĉĉĉĉĉ Ċ", + "ĉĉĉĉĉĉĉ ĉĊ", + "Ġco ordination", + "Ġcoord ination", + "Ġcoordin ation", + ": N", + ". animate", + ".an imate", + ".anim ate", + "ĠC otton", + "ĠCot ton", + "_ hit", + "_h it", + "_hi t", + "â ľ", + "Ġj etzt", + "Ġjet zt", + "i fter", + "if ter", + "ift er", + "( fields", + "(f ields", + "(field s", + "own load", + "ific acion", + "ifica cion", + ". cuda", + ".c uda", + "ĠL iu", + "ĠLi u", + "> equals", + ">e quals", + "Ġ Ace", + "ĠA ce", + "ĠAc e", + "ÑĢ Ð°Ð¼", + "ÑĢаР¼", + "ÑĢа м", + "ĠSup erman", + "ĠSuper man", + "ĠGar cia", + "ĠGarc ia", + "Ġarr ests", + "Ġarrest s", + "a gar", + "ag ar", + "aga r", + "Ġ {})", + "Ġ{ })", + "Ġ{} )", + "Ġ macros", + "Ġmac ros", + "Ġmacro s", + "ro upe", + "rou pe", + "roup e", + "ê tre", + "êt re", + "Ġtw isted", + "Ġtwist ed", + "str uments", + "strument s", + "stru ments", + "_ (\"", + "_( \"", + "_ vertices", + "_vert ices", + "Ġ Transition", + "ĠT ransition", + "ĠTrans ition", + "ĠTransit ion", + "и к", + "[ max", + "[m ax", + "m ind", + "min d", + "mi nd", + "Ġ accessToken", + "Ġaccess Token", + "Ġun le", + "Ġunl e", + "m us", + "mu s", + "c op", + "co p", + "Ġ Factor", + "ĠF actor", + "ĠFac tor", + "ĠFa ctor", + "ĠFact or", + "Ġcon ced", + "Ġconc ed", + "Ġconce d", + "Ġre tr", + "Ġr etr", + "Ġret r", + ".l inalg", + ".lin alg", + "- slider", + "-s lider", + "-slide r", + "-sl ider", + "o bl", + "ob l", + "_Static Fields", + "Ġz ombie", + "s elling", + "sel ling", + "sell ing", + "Ġ chap", + "Ġc hap", + "Ġch ap", + "Ġcha p", + "Ġsh aking", + "Ġsha king", + "Ġ Translate", + "ĠTrans late", + "ĠAm sterdam", + "Ġ ETH", + "ĠE TH", + "ĠET H", + "_ EXTERN", + "_EX TERN", + "_EXT ERN", + "k d", + "_ disc", + "_d isc", + "_dis c", + "_di sc", + "Ġprec eding", + "Ġpreced ing", + "Ġ prix", + "Ġp rix", + "Ġpr ix", + "Ġpri x", + "Object Name", + "_ modified", + "_mod ified", + "ard ware", + "Ġ?> \">", + "Ġ?>\" >", + "Ġ DW", + "ĠD W", + "` ${", + "Ġ?> \">\" >\"> \">< ?", + "u yen", + "uy en", + "uye n", + "Ġd onna", + "Ġdon na", + "Ġdonn a", + "Ġx si", + "Ġxs i", + "Ġ$ \"{", + "Ġ$\" {", + "Ġ Drawing", + "ĠD rawing", + "ĠDraw ing", + "ĠDra wing", + ", nil", + ",n il", + "Ġ onder", + "Ġo nder", + "Ġon der", + "Ġonde r", + "B G", + "O bserv", + "Ob serv", + "Obs erv", + "Ġconsider ations", + "Ġconsideration s", + "bo at", + "boa t", + "ĠB anks", + "ĠBank s", + "ĠBan ks", + "Ġin dict", + "Ġind ict", + "Ġindic t", + ", I", + "ĠB lu", + "ĠBl u", + "( version", + "(v ersion", + "cl iente", + "client e", + "cli ente", + "o lan", + "ol an", + "ola n", + "L ESS", + "LE SS", + "LES S", + "assert Same", + "_ void", + "_v oid", + "ĠW AS", + "ĠWA S", + "ĉ enum", + "ĉe num", + "ĉen um", + "Ġm ixer", + "Ġmix er", + "E W", + "a ffe", + "af fe", + "aff e", + "Ġblow job", + "t extField", + "text Field", + "Ġimm ense", + "_ repo", + "_re po", + "_rep o", + "Ġ globals", + "Ġg lobals", + "Ġglobal s", + "Ġglob als", + "ant ages", + "anta ges", + "antage s", + ". today", + ".t oday", + ".to day", + "Th ursday", + "ĠB rig", + "ĠBr ig", + "ĠBri g", + "{ })Ċ", + "{} )Ċ", + "{}) Ċ", + "Ġ Imagine", + "ĠIm agine", + "ĠImag ine", + "( GPIO", + "(G PIO", + "Ġ esto", + "Ġe sto", + "Ġes to", + "Ġest o", + "Ġ Province", + "ĠPro vince", + "ĠProv ince", + "ĠM ental", + "ĠMen tal", + "ĠMent al", + "_ cells", + "_c ells", + "_cell s", + "ĠJul ian", + "ĠJu lian", + "ĠJulia n", + "ĠJuli an", + ". Screen", + ".S creen", + ".Sc reen", + "Ġc andle", + "Ġcan dle", + "Ġcand le", + "Ġm onde", + "Ġmon de", + "Ġmo nde", + "Ġmond e", + "Ġv erg", + "Ġver g", + "Ġve rg", + "it erals", + "iter als", + "iteral s", + "- layout", + "-l ayout", + "G uest", + "Gu est", + "Ġv ind", + "Ġvi nd", + "Ġvin d", + "Ġ Echo", + "ĠE cho", + "ĠEc ho", + "' )}", + "') }", + "Ġ mann", + "Ġm ann", + "Ġman n", + "Ġma nn", + "_ BOOLEAN", + "_BO OLEAN", + "h ap", + "ha p", + "Ġnight mare", + "U GH", + "UG H", + "Ġnon etheless", + "Ġnone theless", + "Ġ athe", + "Ġa the", + "Ġat he", + "Ġath e", + "ĠH olland", + "ĠHol land", + "ĠHo lland", + "ĠHoll and", + "Ġ Born", + "ĠB orn", + "ĠBo rn", + "ĠBor n", + "\\ ORM", + "a nut", + "an ut", + "_ levels", + "_level s", + "Ġpet ite", + "Ġpetit e", + "- art", + "-a rt", + "-ar t", + "_ SHOW", + "_S HOW", + "_SH OW", + "number Of", + "_ thumbnail", + "_th umbnail", + "a mins", + "am ins", + "amin s", + "ami ns", + "Ġ Defines", + "ĠDef ines", + "ĠDefine s", + "Ġ\" =", + ". StatusCode", + ".Status Code", + "Ġdign ity", + "ĠB ike", + "ĠBi ke", + "ĠBik e", + ".New Line", + "ĠG las", + "ĠGl as", + "( logger", + "(log ger", + "(lo gger", + "Ġc atches", + "Ġcatch es", + "Ġcat ches", + "v otes", + "vo tes", + "vote s", + "Ġexam ining", + "/ register", + "/reg ister", + "Ġspec ifying", + "Ġspecify ing", + "_ fixed", + "_f ixed", + "_fix ed", + "Ġdraw ings", + "Ġdrawing s", + "Th reshold", + "A x", + "Ġ Architecture", + "ĠArch itecture", + "ĠArchitect ure", + "( pid", + "(p id", + "(pi d", + "W ire", + "Wir e", + "Wi re", + "( cont", + "(c ont", + "(con t", + "(co nt", + "l ane", + "la ne", + "lan e", + "L ists", + "List s", + "Li sts", + "Ġs print", + "Ġsp rint", + "Ġspr int", + "Ġgrand father", + "_ AG", + "_A G", + "Ġs cheduling", + "Ġsched uling", + "CL US", + "CLU S", + "at urity", + "atur ity", + "Ġ locking", + "Ġl ocking", + "Ġloc king", + "Ġlock ing", + "[ size", + "[s ize", + "_ styles", + "_st yles", + "_style s", + "Ġ wb", + "Ġw b", + "-- >ĊĊ", + "-->Ċ Ċ", + "--> ĊĊ", + "Ġsp inning", + "Ġspin ning", + "_ pending", + "_p ending", + "_pen ding", + "Match ers", + "Mat chers", + "Matcher s", + ". Keys", + ".Key s", + "Ġ PV", + "ĠP V", + "en us", + "enu s", + "ant is", + "anti s", + "Ġ discard", + "Ġd iscard", + "Ġdis card", + "Ġdisc ard", + "Ġ haul", + "Ġh aul", + "Ġha ul", + "Ġem pir", + "Ġemp ir", + "Ġpath way", + "Ġo ak", + "Ġoa k", + "м ен", + "ме н", + "-in duced", + "-ind uced", + "Ġim pair", + "Ġimp air", + "ĠCal gary", + ".is Hidden", + "d z", + "_ include", + "_in clude", + "_inc lude", + "Ġ gm", + "Ġg m", + "Ġ' ('", + "Ġ'( '", + "P Y", + "uggest ions", + "uggestion s", + "Ġcom modity", + "Ġcommod ity", + "c ro", + "cr o", + "/ sub", + "/s ub", + "Ġ getInstance", + "Ġget Instance", + "Ġ Legacy", + "ĠLeg acy", + "ĠK il", + "ĠKi l", + "B al", + "Ba l", + "( short", + "(s hort", + "(sh ort", + "In form", + "Info rm", + "Inf orm", + "+ x", + "* r", + "Ġ Hopefully", + "ĠHope fully", + "ĠHop efully", + "o rate", + "or ate", + "ora te", + "Ġm achen", + "Ġma chen", + "Ġmach en", + "Ġmac hen", + "Ġtreat y", + "Ġtre aty", + "ĠO ri", + "ĠOr i", + ". public", + ".p ublic", + ".pub lic", + "- horizontal", + "-h orizontal", + "Ġt actic", + "Ġta ctic", + "Ġtact ic", + "Ġtac tic", + "Ġb ord", + "Ġbo rd", + "Ġbor d", + "w ares", + "ware s", + "wa res", + "war es", + "Ġ ammo", + "Ġa mmo", + "Ġam mo", + "Ġ Lists", + "ĠL ists", + "ĠList s", + "ĠLi sts", + "ĠLis ts", + "Ġequ ations", + "Ġeq uations", + "Ġequation s", + "/ her", + "/h er", + "/he r", + "ĠN SW", + "ĠNS W", + "B ounding", + "Bo unding", + "Bound ing", + "_ Collections", + "_C ollections", + "Ġ avail", + "Ġa vail", + "Ġav ail", + "Ġava il", + ". DropDown", + ".Drop Down", + "è °", + "Ġ hh", + "Ġh h", + "Ġl Ãł", + ". pb", + ".p b", + "Ġmem orial", + "Ġmemor ial", + "Ġmemo rial", + "Ġmemoria l", + "Ġ ATTR", + "ĠAT TR", + "ĠATT R", + "Ġexhaust ed", + "Ġt sp", + "Ġts p", + "ĉ redirect", + "ĉre direct", + "Ġlike wise", + "Ġlik ewise", + "S TER", + "ST ER", + "STE R", + "L java", + "Ġcondem ned", + "Ġcondemn ed", + "oca ust", + "( strict", + "(str ict", + "Ġex empt", + "Ġexem pt", + "Ġexemp t", + "Ġ sms", + "Ġs ms", + "Ġsm s", + "Ġex agger", + "S YS", + "SY S", + "Ġl ounge", + "Ġlo unge", + "Ġlou nge", + "Ġloung e", + ": ^", + "Ġt odd", + "Ġto dd", + "Ġtod d", + "d eb", + "de b", + "at orial", + "ator ial", + "ato rial", + "atori al", + "atoria l", + "ĠPort er", + "ĠPor ter", + "Ġt uition", + "Ġtu ition", + "Ġex empl", + "Ġexem pl", + "Ġexe mpl", + "Ġexemp l", + "Ġ paren", + "Ġp aren", + "Ġpar en", + "Ġpa ren", + "Ġpare n", + ".line To", + "Ġkid ney", + "Ġki dney", + "Ġkidn ey", + "Ġ ça", + "Ġç a", + "Ġc ui", + "Ġcu i", + "ï¼Į 请", + "X C", + "Ġmo ż", + "Ġn ominated", + "Ġno minated", + "Ġnom inated", + "Ġnomin ated", + "Ġnominate d", + "l ung", + "lu ng", + "lun g", + "Im Gui", + "Ġ Buzz", + "ĠB uzz", + "ĠBu zz", + "Ġst ereo", + "Ġste reo", + "Ġster eo", + "Ġstere o", + "p ortal", + "port al", + "por tal", + "res as", + "resa s", + "Ġ klass", + "Ġk lass", + "Ġkl ass", + "Ġkla ss", + "Ġklas s", + "Ġd rafted", + "Ġdraft ed", + "Ġproject ile", + "/g pl", + "( parameters", + "(param eters", + "(parameter s", + "* )Ċ", + "*) Ċ", + "Ġass isted", + "Ġassist ed", + "Ġ NSInteger", + "ĠNS Integer", + "s itemap", + "site map", + "sit emap", + ": nth", + ":n th", + ". Views", + ".View s", + ".Argument Parser", + "Ġ meer", + "Ġm eer", + "Ġme er", + "Ġmee r", + "z ier", + "zi er", + "zie r", + "Ġ Dig", + "ĠD ig", + "ĠDi g", + "Ċ", + ")} >Ċ", + ")}> Ċ", + "Ġp lag", + "Ġpl ag", + "Ġpla g", + "p ine", + "pi ne", + "pin e", + "Ġblank et", + "Ġ : -", + "Ġ lcd", + "Ġl cd", + "Ġlc d", + "- --------------", + "-- -------------", + "---- -----------", + "-------- -------", + "--- ------------", + "------------ ---", + "----- ----------", + "---------- -----", + "------ ---------", + "----------- ----", + "------------- --", + "------- --------", + "--------- ------", + "-------------- -", + "( \"\"", + "(\" \"", + "Ġt actical", + "Ġtact ical", + "Ġtactic al", + "Ġtac tical", + "ĠR onald", + "ĠRon ald", + "ex tr", + "ext r", + "ĠF est", + "ĠFe st", + "Ġf uer", + "Ġfu er", + "Ġfue r", + "- navigation", + "-n avigation", + "-nav igation", + "Ġ kb", + "Ġk b", + "g host", + "gh ost", + "Ġ handleChange", + "Ġhandle Change", + "_ cls", + "_c ls", + "_cl s", + "( )!=", + "() !=", + "Com parator", + "Compar ator", + ". vm", + ".v m", + "ĠC ox", + "ĠCo x", + "_ review", + "_re view", + "_r eview", + "_rev iew", + "/ @", + "_ cookie", + "_c ookie", + "_co okie", + "Ġrecogn ised", + "Ġrecognise d", + "l dap", + "ld ap", + "lda p", + "Th reads", + "Thread s", + "ĠS exual", + "ĠSex ual", + "ĠB earing", + "ĠBe aring", + "ĠBear ing", + "ĠBea ring", + "( SQL", + "(S QL", + "Ġ xr", + "Ġx r", + "Ġt high", + "Ġth igh", + "Ġthi gh", + "URL Connection", + "ĠS UV", + "ĠSU V", + "Ġm Context", + "Ġinc idence", + "Ġincid ence", + "Ġ Este", + "ĠE ste", + "ĠEs te", + "ĠEst e", + ". sup", + ".s up", + "_ te", + "_t e", + "( EXIT", + "(EX IT", + "C MD", + "CM D", + "/ \">", + "/\" >", + "Al most", + "Ġ Une", + "ĠU ne", + "ĠUn e", + "Ġand eren", + "Ġandere n", + "Ġander en", + "Ġ Singleton", + "ĠS ingleton", + "ĠSing leton", + "ĠSingle ton", + "Ġb ore", + "Ġbo re", + "Ġbor e", + "Th ink", + "Thin k", + "Ġn arc", + "Ġna rc", + "Ġnar c", + "] initWith", + "]init With", + "_ shop", + "_s hop", + "_sh op", + "( strategy", + "(str ategy", + "! ',", + "!' ,", + "her its", + "herit s", + "Ġ Desk", + "ĠD esk", + "ĠDe sk", + "ĠDes k", + "_ machine", + "_m achine", + "_ma chine", + ".n etty", + ".net ty", + ".ne tty", + "ı nda", + "ın da", + "ınd a", + "= <", + "Ġ QR", + "ĠQ R", + "Ġ Sidebar", + "ĠS idebar", + "ĠSide bar", + ".split Container", + "Ġon Success", + "Ġ monkey", + "Ġmon key", + "Ġmonk ey", + "En joy", + "( nodes", + "(n odes", + "(node s", + "(no des", + "pect rum", + "Ġ (*(", + "Ġ( *(", + "Ġ(* (", + "ĉ UINT", + "ĉU INT", + "ĉUI NT", + ", height", + ",h eight", + "ĠNetwork s", + "ĠNet works", + ". tail", + ".t ail", + ".ta il", + ".l inspace", + ".lin space", + "Ġ \"...", + "Ġ\" ...", + "Ġ\". ..", + "Ġ\".. .", + "L isten", + "List en", + "Li sten", + "Æ ¡", + ". Channel", + ".Ch annel", + "- defined", + "-d efined", + "-def ined", + "Re peat", + "Rep eat", + "ad just", + "adj ust", + "E RM", + "ER M", + "_ application", + "_app lication", + "_ap plication", + ".assert NotNull", + ".assertNot Null", + "- stream", + "-st ream", + "-str eam", + "Ġ rabbit", + "Ġr abbit", + "Ġrab bit", + "Ġposition ing", + "Ġ woke", + "Ġw oke", + "Ġwo ke", + "Ġf ing", + "Ġfin g", + "Ġfi ng", + "Ġmulti player", + "Ġmultip layer", + "Ġregister ing", + "Ġregist ering", + "un til", + "unt il", + "Ã¥ n", + "( ::", + "(: :", + "uss ions", + "ussion s", + "Ġpot ato", + "Ġ Equals", + "ĠE quals", + "ĠEqu als", + "ĠEqual s", + ". Sup", + ".S up", + "/ apache", + "/ap ache", + "Ġ (=", + "Ġ( =", + ". \")", + ".\" )", + ". ptr", + ".p tr", + ".pt r", + "Ġ Speech", + "ĠS peech", + "ĠSpe ech", + ". clip", + ".c lip", + ".cl ip", + ".cli p", + "ĠGab riel", + "ĠGabri el", + "Ġmus ician", + "Ġmusic ian", + "/ issues", + ". shop", + ".s hop", + ".sh op", + "Ġ Hier", + "ĠH ier", + "ĠHi er", + "_ RET", + "_RE T", + "_R ET", + "_ bucket", + "_b ucket", + "ãĥ ¡", + "a vs", + "av s", + "Ġ roz", + "Ġr oz", + "Ġro z", + "f lower", + "fl ower", + "flow er", + "flo wer", + "Write Barrier", + "ĠM ilan", + "ĠMil an", + "ĠMi lan", + "Ġlegisl ature", + "ĠD oll", + "ĠDo ll", + "ĠDol l", + "Ġpro ving", + "Ġpr oving", + "Ġprov ing", + ".concat enate", + "âķ IJ", + "Ġg char", + "Ġgc har", + "cdn js", + "b les", + "ble s", + "bl es", + "Ġ Listing", + "ĠL isting", + "ĠList ing", + "ĠLis ting", + "л о", + ".xr Label", + "ĠS ak", + "ĠSa k", + "just ice", + "ju stice", + "ĠVal entine", + "ĠValent ine", + "un less", + "Ġp iger", + "Ġpi ger", + "Ġpig er", + "Ġpige r", + "( run", + "(r un", + "Ġtest ified", + "A NA", + "AN A", + "ĠRe moves", + "ĠRem oves", + "ĠRemove s", + ") )));Ċ", + ")) ));Ċ", + "))) );Ċ", + ")))) ;Ċ", + "rec ated", + "ĠRuntime Method", + "Ġcon qu", + "ãĤ ¢", + "Ġt issues", + "Ġtissue s", + "a iler", + "ail er", + "ai ler", + "é té", + "ét é", + "- Star", + "-S tar", + "-St ar", + "Ġfl ames", + "Ġflame s", + "Ġflam es", + "Ġfla mes", + ". setIcon", + ".set Icon", + "Ġsup ern", + "Ġsuper n", + "Ġv agina", + "Ġvag ina", + "- variable", + "-var iable", + "Ġwell ness", + "C UR", + "CU R", + "Ġb elle", + "Ġbe lle", + "Ġbel le", + "Ġbell e", + ". getRequest", + ".get Request", + "Ġp oco", + "Ġpo co", + "Ġpoc o", + "b enh", + "be nh", + "ben h", + "a gens", + "ag ens", + "age ns", + "agen s", + "Ġs pill", + "Ġsp ill", + "Ġspi ll", + "Ġ Jur", + "ĠJ ur", + "ĠJu r", + "Ġ dispatcher", + "Ġdispatch er", + "Ġdisp atcher", + "н ого", + "но го", + "ног о", + "e monic", + "em onic", + "emo nic", + "emon ic", + "( dirname", + "(dir name", + "Ġ ÐĶ", + "ĠÐ Ķ", + "Ġp asse", + "Ġpass e", + "Ġpas se", + "Ġpa sse", + "Ġg anz", + "Ġga nz", + "Ġgan z", + "r icing", + "ri cing", + "ric ing", + "E U", + "Ġmuj eres", + "Ġmujer es", + "es sen", + "ess en", + "esse n", + ". attribute", + ".at tribute", + ".attrib ute", + "j j", + "ĉ ĉĠĊ", + "ĉĉ ĠĊ", + "ĉĉĠ Ċ", + "[ ^", + "Ġ strtolower", + "Ġstr tolower", + "Ġstrtol ower", + "lex er", + "ect ar", + "ec tar", + "ecta r", + "h otel", + "ho tel", + "hot el", + ". square", + ".s quare", + "Ġr all", + "Ġra ll", + "Ġl owered", + "Ġlow ered", + "Ġlower ed", + "handle d", + "hand led", + "M arket", + "Mark et", + "Mar ket", + "Ġ Uses", + "ĠU ses", + "ĠUs es", + "ĠUse s", + "i vas", + "iv as", + "iva s", + ". Business", + ".B usiness", + ".Bus iness", + "ãģĹ ãģ¦", + "ãģĹãģ ¦", + "D IV", + "DI V", + "Ġw asted", + "Ġwas ted", + "Ġwa sted", + "Ġwaste d", + "Ġwast ed", + "Ġa voir", + "Ġav oir", + "ê m", + "_ ACCOUNT", + "_AC COUNT", + "_ACC OUNT", + ". et", + ".e t", + "ĉ SDL", + "ĉS DL", + "k ap", + "ka p", + "Ġ fox", + "Ġf ox", + "Ġfo x", + "up pet", + "upp et", + "uppe t", + "{ },Ċ", + "{} ,Ċ", + "{}, Ċ", + "\" ,'", + "\", '", + "F avorite", + "P END", + "PE ND", + "Ġ AES", + "ĠA ES", + "ĠAE S", + "} ),", + "}) ,", + "Ġde duction", + "Ġded uction", + "Ġdeduct ion", + "Ġpol ÃŃt", + "Ġcomponent Will", + "ĠT elerik", + "ĠTele rik", + "_ SELF", + "_SE LF", + "_SEL F", + "Ġm use", + "Ġmus e", + "Ġmu se", + "C raft", + "Cr aft", + "Ġ dens", + "Ġd ens", + "Ġde ns", + "Ġden s", + "ठ¿", + "( tp", + "(t p", + "Ġt asty", + "Ġta sty", + "Ġtas ty", + "Ġtast y", + "Ġ balances", + "Ġbalance s", + "Ġbal ances", + "Ġded ication", + "Ġdedic ation", + "Ġdedi cation", + "ĠWall ace", + "ĠWal lace", + "Ġun law", + "Ġunl aw", + "\\ \">\\", + "\\\" >\\", + "\\\"> \\", + "Ġm um", + "Ġmu m", + "- update", + "-up date", + "e mente", + "em ente", + "ement e", + "eme nte", + "emen te", + "Ġs oda", + "Ġso da", + "Ġsod a", + "Re public", + "Rep ublic", + "as mine", + "asm ine", + "é ric", + "ér ic", + "éri c", + "( Status", + "(S tatus", + "ĠJson Convert", + "Ġ Disk", + "ĠD isk", + "ĠDis k", + "ĠDi sk", + ". Redirect", + ".Re direct", + ".Red irect", + "Ġfil ming", + "Ġfilm ing", + "/ mol", + "/m ol", + "R o", + "Ġ ville", + "Ġv ille", + "Ġvi lle", + "Ġvill e", + "Ġvil le", + "Ġtr abaj", + "Ġtrab aj", + "Ġs ynthesis", + "Ġsyn thesis", + "Ġsynth esis", + "Ġsynthes is", + "r ega", + "re ga", + "reg a", + "Ġ rl", + "Ġr l", + "S cheduler", + "Schedule r", + "ISH ED", + "current User", + "( errors", + "(err ors", + "(error s", + "(er rors", + "' h", + "_ bot", + "_b ot", + "_bo t", + "x imo", + "xi mo", + "Ġ USART", + "ĠUS ART", + "ĠUSA RT", + "_ super", + "_s uper", + "_sup er", + "_su per", + "_ DECREF", + "_DEC REF", + "н ой", + "но й", + "_ ROW", + "_R OW", + "_RO W", + "Ġprom otes", + "Ġpromote s", + "Ġpromot es", + "Ġpromo tes", + "Ġ TA", + "ĠT A", + "Ġh oras", + "Ġhor as", + "Ġho ras", + "Ġhora s", + "ĠRep resents", + "ĠRepresent s", + "Ġ nameof", + "Ġname of", + "Ġnam eof", + "Ġ Exc", + "ĠE xc", + "ĠEx c", + "ĠGar age", + "ĠGa rage", + "Ġse ine", + "Ġsein e", + "Ġsei ne", + ", #", + "Ġh erb", + "Ġhe rb", + "Ġher b", + "/ resources", + "/re sources", + "/res ources", + "/resource s", + "Ġple aded", + "Ġplea ded", + "Ġplead ed", + ".r adioButton", + ".radio Button", + "Ġ æĺ", + "Ġæ ĺ", + "O ps", + "Op s", + "ĠN est", + "ĠNe st", + "ĠNes t", + "c string", + "cs tring", + "ĠDef ence", + "Ġref ere", + "Ġrefer e", + "_ leaf", + "_le af", + "Ġreve lation", + "Ġrevel ation", + "ë §", + ".execute Update", + "_W ORLD", + "Ġexp ans", + "(\" \\\"", + "(\"\\ \"", + "j ab", + "ja b", + "Ġdoub ts", + "Ġdoubt s", + "Ġ Geometry", + "ĠGe ometry", + "ĠGeo metry", + "Ġintrodu ces", + "Ġintroduce s", + "Ġsen ators", + "Ġsenator s", + "Ġc anal", + "Ġcan al", + "Ġca nal", + ". helper", + ".h elper", + ".help er", + "ĠB iology", + "ĠBi ology", + "ĠBio logy", + "ĠBiol ogy", + "_ SENS", + "_S ENS", + "_SE NS", + ". previous", + ".pre vious", + ".prev ious", + "- touch", + "-t ouch", + "-to uch", + "a bit", + "ab it", + "abi t", + "Ġimp acted", + "Ġimpact ed", + "Ġbr ackets", + "Ġbracket s", + ". direct", + ".d irect", + ".dir ect", + ".di rect", + "ac cum", + "acc um", + "Ġtest osterone", + "ĉ action", + "ĉa ction", + "ĉac tion", + "ĉact ion", + "Ġ Chance", + "ĠCh ance", + "ĠCha nce", + "ĠChan ce", + "Ġpe aks", + "Ġpeak s", + "Ġpea ks", + "CppCodeGen WriteBarrier", + "Ġun belie", + "Ġunbe lie", + "_ press", + "_p ress", + "_pr ess", + "_pre ss", + "_pres s", + ". Rel", + ".R el", + ".Re l", + "ang led", + "angle d", + "angl ed", + "/ templates", + "/t emplates", + "/template s", + "/temp lates", + "-- >čĊ", + "--> čĊ", + "l ime", + "li me", + "lim e", + "Ġsufficient ly", + "_ nt", + "_n t", + "Exp and", + ".is file", + "Ġ isEmpty", + "Ġis Empty", + "Ġ qt", + "Ġq t", + "Ġmul her", + "a cob", + "ac ob", + "aco b", + "Ge orge", + "å¸ ¸", + "Ġas sim", + "Ġass im", + "a so", + "as o", + "Ġcompr ised", + "Ġcomprise d", + "O V", + "( CONFIG", + "(CON FIG", + "ĉ writer", + "ĉw riter", + "ĉwrite r", + "Ġd esp", + "Ġde sp", + "Ġdes p", + "Ġten ure", + "( cr", + "(c r", + ". pool", + ".p ool", + ".po ol", + "ĠB rend", + "ĠBr end", + "ĠBre nd", + "ĠBren d", + "Ġc ensor", + "( timeout", + "(time out", + "Ġp lea", + "Ġpl ea", + "Ġple a", + ". Wrap", + ".W rap", + "Ġt ightly", + "Ġtight ly", + "Ġ Were", + "ĠW ere", + "ĠWe re", + "ĠWer e", + "Ġ Ignore", + "ĠI gnore", + "ĠIgn ore", + "ĠIg nore", + "a bei", + "ab ei", + "abe i", + "Ġbr idges", + "Ġbridge s", + "Ġbrid ges", + "Ġcondem n", + "Ġsimp licity", + "Ġsimpl icity", + "Ġrout inely", + "Ġroutine ly", + "Ġbl acks", + "Ġblack s", + "Ġbla cks", + "j b", + "ĠP it", + "ĠPi t", + "U tf", + "Ut f", + "Ġ /Ċ", + "Ġ/ Ċ", + "r eload", + "re load", + "rel oad", + "Ġset Object", + "/ global", + "/g lobal", + "Ġf atty", + "Ġfa tty", + "Ġfat ty", + "Ġfatt y", + "Ġs ocks", + "Ġso cks", + "Ġsock s", + "Ġsoc ks", + "Could n", + "Ġerot isk", + "æĿ ¡", + "Ġ Pressure", + "ĠPres sure", + "ĠPress ure", + "ĠM az", + "ĠMa z", + "n pos", + "np os", + "to lower", + "tol ower", + "Ġ EQ", + "ĠE Q", + "ut eur", + "ute ur", + "Ġ Moment", + "ĠM oment", + "ĠMo ment", + "ĠMom ent", + "Ġ eta", + "Ġe ta", + "Ġet a", + "{{ --", + "Ġ graphs", + "Ġgraph s", + "Ġgrap hs", + "ĠG uar", + "ĠGu ar", + "r ine", + "ri ne", + "rin e", + "( --", + "(- -", + "Ġ HttpStatus", + "ĠHttp Status", + "( student", + "(st udent", + "* np", + "*n p", + "Ġrail way", + "Ġas ynchronous", + "_ vm", + "_v m", + "' ],'", + "'] ,'", + "'], '", + ", text", + ",t ext", + "m erchant", + "mer chant", + "( Guid", + "(G uid", + "ĠG ra", + "ĠGr a", + "ix er", + "ixe r", + "fetch All", + ". addListener", + ".add Listener", + "f lip", + "fl ip", + "* $", + "> (),", + ">( ),", + ">() ,", + "Ġsun light", + "as signed", + "ass igned", + "assign ed", + "Ġ abc", + "Ġa bc", + "Ġab c", + "Ġ COLUMN", + "ĠC OLUMN", + "ĠðŁĻĤ ĊĊ", + ") ...", + "). ..", + ").. .", + "Ġ ensemble", + "Ġen semble", + "Ġens emble", + "Ġ newline", + "Ġnew line", + "_S INGLE", + "i edad", + "ie dad", + "ied ad", + "Ġd arker", + "Ġdark er", + "Ġdar ker", + "or map", + "orm ap", + "Ġ lion", + "Ġl ion", + "Ġli on", + "pl its", + "plit s", + "Ġillustr ation", + "Ġillust ration", + "Ġ IEEE", + "ĠI EEE", + "ĠIE EE", + "Ġv ista", + "Ġvis ta", + "Ġvi sta", + "ous ands", + "ousand s", + "* ******", + "** *****", + "**** ***", + "****** *", + "*** ****", + "***** **", + "ĠTom my", + "Ġ hue", + "Ġh ue", + "Ġhu e", + "S el", + "Se l", + "Ġ aura", + "Ġa ura", + "Ġau ra", + "Ġaur a", + "ĠThe rapy", + "ĠTher apy", + "Ġan imator", + "Ġanim ator", + ". constraints", + ".con straints", + ".constraint s", + "Ġv ague", + "Ġva gue", + "Ġvag ue", + "(\" \")", + "(\"\" )", + "Ġvill ain", + "Ġvil lain", + "Ġvilla in", + "Ġbless ing", + "Ġstring Builder", + "Ġ Misc", + "ĠM isc", + "ĠMi sc", + "ĠMis c", + "Ġ DIR", + "ĠD IR", + "ĠDI R", + "f ax", + "fa x", + "- node", + "-n ode", + "-no de", + "Ġ Walking", + "ĠW alking", + "ĠWalk ing", + "ĠWal king", + "Ġ AU", + "ĠA U", + "s ess", + "se ss", + "ses s", + "Ġgr ill", + "Ġgri ll", + "VERT ISE", + "ĠF oods", + "ĠFood s", + "ĠFo ods", + "ĠFoo ds", + "Ġt ournaments", + "Ġtour naments", + "Ġtournament s", + "à ĵ", + "Ġ Marsh", + "ĠMar sh", + "ĠMars h", + "Ġw onders", + "Ġwon ders", + "Ġwonder s", + "Long itude", + ".Command Text", + "= input", + "=in put", + "_ encoder", + "_e ncoder", + "_en coder", + "_encode r", + "_enc oder", + "page Size", + "Ġ getState", + "Ġget State", + "> >Ċ", + ">> Ċ", + ". grey", + ".g rey", + ".gr ey", + "p od", + "po d", + "Ġread ings", + "Ġreading s", + "Ġre consider", + "Start up", + "Ġex cer", + "Ġexc er", + "Ġexce r", + ". balance", + ".b alance", + "_ cycle", + "_c ycle", + "_ Time", + "_T ime", + "LO CAL", + "LOC AL", + "Ġ EFI", + "ĠE FI", + "ĠEF I", + "ĠR eyn", + "ĠRe yn", + "ĠRey n", + ".set Foreground", + "b yn", + "by n", + "Ġdis connected", + "Ġdisconnect ed", + "ACT IVE", + "Ġ embedding", + "Ġembed ding", + "ic kers", + "ick ers", + "icker s", + "Ġsurround ings", + "Ġsurrounding s", + "* c", + "Ġgar ant", + "Ġga rant", + "Ġ bf", + "Ġb f", + "Ġ wipe", + "Ġw ipe", + "Ġwi pe", + "Ġ ä¸ĭ", + "Ġä¸ ĭ", + "_ TRA", + "_T RA", + "_TR A", + "ad ox", + "ado x", + "ç ķ", + "Ġs ucks", + "Ġsu cks", + "Ġsuc ks", + "Ġsuck s", + "Ġ Songs", + "ĠS ongs", + "ĠSon gs", + "ĠSong s", + "ĠAssoci ates", + "ĠAssociate s", + "ĠAssoc iates", + "ĠB ald", + "ĠBa ld", + "ĠBal d", + "ĠB rett", + "ĠBr ett", + "ĠBre tt", + "ĠBret t", + "ven ile", + "Ġ vt", + "Ġv t", + "Ġin ade", + "Ġre signed", + "Ġres igned", + "Ġresign ed", + "ĠGl enn", + "ĠGlen n", + "ĠGle nn", + ". pattern", + ".p attern", + ".pat tern", + ".Data Bind", + "Ñĥ м", + "Layout Inflater", + "c het", + "ch et", + "che t", + "ĠTest ament", + ". ms", + ".m s", + "Ġp av", + "Ġpa v", + "Ġ ReactDOM", + "ĠReact DOM", + "ur dy", + "urd y", + "A DATA", + "AD ATA", + "ADA TA", + "M u", + "/ actions", + "/a ctions", + "/action s", + "Ġ Js", + "ĠJ s", + "_ extract", + "_ex tract", + "_ext ract", + "_extra ct", + "Ġ Bring", + "ĠB ring", + "ĠBr ing", + "ĠBri ng", + ": id", + ":i d", + "st rt", + "str t", + "i vation", + "iv ation", + "iva tion", + "Ġout right", + "Ġou tright", + "Ġoutr ight", + "a zu", + "az u", + "loy ment", + "и Ñı", + "al do", + "ald o", + "Ġ Publisher", + "ĠP ublisher", + "ĠPublish er", + "E ducation", + "Educ ation", + "P alette", + "Pal ette", + "Pa lette", + "Pale tte", + "_ drv", + "_d rv", + "_dr v", + "Ġ ($(", + "Ġ( $(", + "Ġ($ (", + "ĠA nda", + "ĠAn da", + "ĠAnd a", + "Ġrem edy", + "Ġremed y", + "Ġin consistent", + "Ġincons istent", + "Ġinconsist ent", + "t ection", + "te ction", + "tec tion", + "Ġreg ulators", + "Ġregul ators", + "Ġregulator s", + "Ġshort est", + "( pair", + "(p air", + "(pa ir", + "Ġ Installation", + "ĠInstall ation", + "Ġdef endants", + "Ġdefend ants", + "Ġdefendant s", + "Ġ ();", + "Ġ( );", + "Ġ() ;", + "- large", + "-l arge", + "M el", + "Me l", + "Ġthreat en", + "н Ñı", + "Ġfet ish", + "ot ine", + "oti ne", + "_ dic", + "_d ic", + "_di c", + "Ġ <$", + "Ġ< $", + "Ġst agger", + "Ġsta gger", + "Ġstag ger", + "s pi", + "sp i", + "$ response", + "$res ponse", + "S erv", + "Se rv", + "Ser v", + "- born", + "-b orn", + "-bo rn", + "j os", + "jo s", + "ĉ img", + "ĉi mg", + "ĉim g", + "ĉ WHERE", + "ĉW HERE", + "_ lt", + "_l t", + "å½ ĵ", + ". cost", + ".c ost", + ".co st", + ".cos t", + "Ġ Tue", + "ĠT ue", + "ĠTu e", + ". labels", + ".label s", + ".lab els", + "Ġ LV", + "ĠL V", + "wcs store", + "ĠJ esse", + "ĠJes se", + "ĠJe sse", + "ĠJess e", + "ภ«", + "T rade", + "Tr ade", + "Trad e", + "Tra de", + "Ġpredecess or", + "ë Ĥ", + "f inally", + "fin ally", + "final ly", + "_ general", + "_g eneral", + "_gen eral", + "_gene ral", + "_gener al", + "oggle r", + "ogg ler", + "_ REGION", + "_REG ION", + "n ement", + "ne ment", + "nem ent", + "Ġb logger", + "Ġblog ger", + "Ġblo gger", + "ĠHar bor", + "Ġ Dataset", + "ĠD ataset", + "ĠData set", + "ĠDat aset", + "[ w", + "Ġattend ees", + "Ġattendee s", + ". ico", + ".i co", + ".ic o", + "max imum", + ". Unlock", + ".Un lock", + "_ SYNC", + "_S YNC", + "_SY NC", + "_SYN C", + "ág ina", + "Ġd owns", + "Ġdown s", + "Ġdow ns", + "ĠW ii", + "ĠWi i", + "] )/", + "]) /", + "Ġk icking", + "Ġkick ing", + "un ication", + "unic ation", + "uni cation", + "Ġ DAC", + "ĠD AC", + "ĠDA C", + "Ġ IDS", + "ĠI DS", + "ĠID S", + "ĠR ental", + "ĠRen tal", + "ĠRent al", + "Ġ currentTime", + "Ġcurrent Time", + "Ġvacc ines", + "Ġvaccine s", + "ĠD evil", + "ĠDe vil", + "ĠDev il", + "Ġn ors", + "Ġno rs", + "Ġnor s", + "_ mouse", + "_m ouse", + "_mo use", + "ur rection", + "urre ction", + "urr ection", + "urrect ion", + "( no", + "(n o", + "Ġ >čĊ", + "Ġ> čĊ", + "Ġag gression", + "Ġaggress ion", + "Ġagg ression", + "Ġbre eding", + "Ġbreed ing", + "Ġbree ding", + ". symbol", + ".s ymbol", + ".sym bol", + "i man", + "im an", + "ima n", + "Absolute Path", + "Ġ WHO", + "ĠW HO", + "ĠWH O", + "_ flush", + "_f lush", + "_fl ush", + "- root", + "-r oot", + "-ro ot", + "a rna", + "ar na", + "arn a", + "& M", + "Ġf athers", + "Ġfa thers", + "Ġfather s", + "Ġ Rocket", + "ĠR ocket", + "ĠRock et", + "ĠRo cket", + "ĠRoc ket", + "i veau", + "ive au", + "Ġw ander", + "Ġwa nder", + "Ġwand er", + "Ġwan der", + "Ġcom pos", + "Ġcomp os", + "ĠWar rior", + "Ġ Seat", + "ĠS eat", + "ĠSe at", + "ĠSea t", + "ĠCl inic", + "ĠClin ic", + "ĠCli nic", + "_ invoice", + "_in voice", + "_inv oice", + "( dispatch", + "(dis patch", + "Product o", + "at uring", + "atur ing", + "atu ring", + "oss ier", + "ĠM AY", + "ĠMA Y", + "Ġd agger", + "Ġda gger", + "Ġdag ger", + "Ġsan itized", + "Ġsanit ized", + "Ġsanitize d", + "Ġ RFC", + "ĠR FC", + "ĠRF C", + "Ġp roph", + "Ġpro ph", + "Ġpr oph", + "Ġprop h", + "Ġu rine", + "Ġur ine", + "Ġuri ne", + "Ġgr ind", + "Ġgri nd", + "Ġgrin d", + "Ġ Expanded", + "ĠExp anded", + "ĠExpand ed", + "des cripcion", + "- fw", + "-f w", + "ĠK erry", + "ĠKer ry", + "ĠKerr y", + "= name", + "=n ame", + "Ġ chk", + "Ġc hk", + "Ġch k", + "Ġn ationally", + "Ġnational ly", + "Ġnation ally", + "Ġt hee", + "Ġth ee", + "Ġthe e", + "I nc", + "In c", + "Ġ ?>>", + "Ġ? >>", + "Ġ?> >", + ". RadioButton", + ".R adioButton", + ".Http ServletResponse", + ".HttpServlet Response", + "/ Y", + "ĉ field", + "ĉf ield", + "ĉfi eld", + "Ġ homme", + "Ġhom me", + "y per", + "ype r", + "yp er", + "Ph ysical", + "Phys ical", + "= v", + "Ġd riv", + "Ġdr iv", + "Ġdri v", + "Ġ Errors", + "ĠError s", + "ĠEr rors", + "ĠErr ors", + "Ġc Äĥ", + "De ath", + "Ġ WINDOW", + "ĠW INDOW", + "Ġpo et", + "Ġ Sharp", + "ĠSh arp", + "ĠSha rp", + "ĠShar p", + "Ġ Immutable", + "ĠIm mutable", + "ĠImm utable", + "ĉ create", + "ĉc reate", + "Ġge ht", + "Ġgeh t", + "ĠRe form", + "ĠRef orm", + "a iser", + "ai ser", + "ais er", + "aise r", + "Ġ Initialization", + "ĠInitial ization", + "Ġimm unity", + "Ġimmun ity", + ". compose", + ".com pose", + ".comp ose", + "Ġlate ncy", + "Ġlat ency", + "Ġlaten cy", + "ĠLeban on", + "ĠPar ad", + "ĠPa rad", + "ĠPara d", + "Ġf uels", + "Ġfuel s", + "Ġfu els", + "Ġfue ls", + "ĠEx hib", + "c oh", + "co h", + "% \">Ċ", + "%\" >Ċ", + "%\"> Ċ", + "Ġ CLI", + "ĠC LI", + "ĠCL I", + ") initWith", + ")init With", + "- Za", + "-Z a", + "_ CLEAR", + "_C LEAR", + "_CL EAR", + "re gn", + "reg n", + "Ġfin ances", + "Ġfinance s", + "Ġfinanc es", + "Ġfinan ces", + ". standard", + ".st andard", + "_ CATEGORY", + "_C ATEGORY", + ". library", + ".l ibrary", + ".lib rary", + "Ġtravel ers", + "Ġtraveler s", + "_ wp", + "_w p", + "Ġ Evaluation", + "ĠE valuation", + "ĠEval uation", + "ĠEvalu ation", + "start ing", + "star ting", + "Ġ )),Ċ", + "Ġ) ),Ċ", + "Ġ)) ,Ċ", + "ep isode", + "Ġ Variant", + "ĠV ariant", + "ĠVar iant", + "ĠVari ant", + "Ġ daemon", + "Ġda emon", + "ĠJ ulia", + "ĠJul ia", + "ĠJu lia", + "ĠJuli a", + "Ġ NR", + "ĠN R", + "Ġd oubles", + "Ġdouble s", + "Ġdoub les", + "Ġdou bles", + "< v", + "/ runtime", + "/r untime", + "/run time", + "Ġ interpreter", + "Ġinter preter", + "Ġinterpret er", + "Ġinterpre ter", + "Ġ INDEX", + "ĠIN DEX", + "ĠIND EX", + "ĠHol mes", + "_ DIM", + "_D IM", + "_DI M", + "Ġp addle", + "Ġpad dle", + "Ġpadd le", + "_ example", + "_ex ample", + "_exam ple", + "Ġ foreground", + "Ġfore ground", + ". routes", + ".r outes", + ".route s", + ".ro utes", + "Ġs owie", + "Ġso wie", + "Ġsow ie", + "S UCCESS", + "Ġ CDC", + "ĠC DC", + "ĠCD C", + "Ġ BD", + "ĠB D", + "_ -", + "as ured", + "asure d", + "asu red", + "W riting", + "Wr iting", + "Ġ currentPage", + "Ġcurrent Page", + "( answer", + "(ans wer", + "(an swer", + "Ġ ASCII", + "ĠA SCII", + "ĠASC II", + "à ¨", + "Ġsocial ly", + "Ġsoc ially", + "Ġsoci ally", + "y yy", + "yy y", + "ĠSpecial ist", + "( customer", + "(c ustomer", + "(custom er", + "ist ani", + "istan i", + "ista ni", + "k est", + "ke st", + "kes t", + "ĠM ak", + "ĠMa k", + "Ġt ho", + "Ġth o", + ". pt", + ".p t", + "( comment", + "(com ment", + "(comm ent", + "Ġ Converter", + "ĠCon verter", + "ĠConvert er", + "g am", + "ga m", + "b ins", + "bin s", + "bi ns", + ". tele", + ".t ele", + ".te le", + ".tel e", + "ĠVeter ans", + "ĠVeteran s", + "_ ALLOC", + "_AL LOC", + "_ALL OC", + "олÑĮзов аÑĤ", + "inn amon", + "; width", + "o hl", + "oh l", + "Ġf antas", + "Ġfan tas", + "Ġfant as", + "Ġs ung", + "Ġsu ng", + "Ġsun g", + "ĉ K", + "( Json", + "(J son", + "Ġneighbour hood", + "Ġv ow", + "Ġvo w", + "Ġs ins", + "Ġsi ns", + "Ġsin s", + "on acci", + "ona cci", + "Ġ epochs", + "Ġepoch s", + "im agen", + "image n", + "ima gen", + "imag en", + ". Change", + ".Ch ange", + ".my batis", + "Se ek", + "See k", + "W ER", + "WE R", + "管 çIJĨ", + "Ġinter ess", + "Ġinte ress", + "Ġinteres s", + "_ Event", + "_E vent", + "ed erland", + "eder land", + "Ġterr itor", + "Ġci udad", + "uc ked", + "uck ed", + "Ġsn ack", + "Ġsna ck", + "Ġtrans ported", + "Ġtransport ed", + "Ġtransporte d", + "Ġ Manifest", + "ĠMan ifest", + "Ġ DAT", + "ĠD AT", + "ĠDA T", + "_ theta", + "_th eta", + "_the ta", + "Ġw ont", + "Ġwon t", + "Ġwo nt", + ". ĊĊĊĊĊĊĊĊĊĊ", + ".ĊĊ ĊĊĊĊĊĊĊĊ", + ".Ċ ĊĊĊĊĊĊĊĊĊ", + ".ĊĊĊĊ ĊĊĊĊĊĊ", + ".ĊĊĊ ĊĊĊĊĊĊĊ", + ".ĊĊĊĊĊĊ ĊĊĊĊ", + ".ĊĊĊĊĊĊĊĊ ĊĊ", + ".ĊĊĊĊĊ ĊĊĊĊĊ", + "Ĭ¶ æĢģ", + "ĠE pic", + "ĠEp ic", + "D eck", + "De ck", + "Dec k", + "l tra", + "lt ra", + "ltr a", + "_ ZERO", + "_Z ERO", + "Ġ[ ];", + "Ġ[] ;", + "/ scripts", + "/s cripts", + "/script s", + "Ġ --------------------------------------------------------------------------------", + "Ġ---------------------------------------------------------------- ----------------", + "Ġ---- ----------------------------------------------------------------------------", + "Ġ---------------- ----------------------------------------------------------------", + "Ġ------------------------------------------------ --------------------------------", + "Ġ-------------------------------- ------------------------------------------------", + "Ġ---------------------------------------------------------------------------- ----", + "Ġ---------- ----------------------------------------------------------------------", + "Ġ------------------------------------------------------------ --------------------", + "Ġ------------------------------------------------------------------------- -------", + "æĥ ħ", + "Ġ weed", + "Ġw eed", + "Ġwe ed", + "Ġwee d", + "N BC", + "NB C", + "Ġr aped", + "Ġrap ed", + "Ġra ped", + "Ġrape d", + "Ġ Gateway", + "ĠG ateway", + "ĠGate way", + "ĠGat eway", + "[ M", + "Ġ Timeout", + "ĠTime out", + "ench mark", + ". ViewModel", + ".View Model", + "Ġporn os", + "Ġpor nos", + "Ġporno s", + "Ġ Ya", + "ĠY a", + "th ritis", + "thr itis", + "ĠFl ynn", + "ĠFly nn", + "Ġ mega", + "Ġm ega", + "Ġme ga", + "Ġmeg a", + "a cin", + "ac in", + "aci n", + "Ġtr ibal", + "Ġtri bal", + "Ġtrib al", + ". apple", + ".app le", + ".ap ple", + "Ġ Blo", + "ĠB lo", + "ĠBl o", + "â n", + "i bi", + "ib i", + "r ov", + "ro v", + "ĠL ives", + "ĠLive s", + "ĠLi ves", + "ĠLiv es", + "^ .", + "get Request", + "Ġ Establish", + "ĠEst ablish", + "cont ainers", + "container s", + "contain ers", + "Ġst arring", + "Ġstar ring", + "Ġcele brities", + "Ġcelebr ities", + "Ġ Relative", + "ĠRel ative", + "ĠHe ights", + "ĠHeight s", + "Ġtq dm", + "ĠNorth west", + "i vic", + "iv ic", + "ivi c", + "ĉ cl", + "ĉc l", + "Ġautom otive", + "ent ric", + "entr ic", + "Ġ fortunate", + "Ġfort unate", + "Ġfire place", + "Ġfi replace", + "se ud", + "n ickname", + "nick name", + "; s", + "_ CAL", + "_C AL", + "_CA L", + "h alt", + "ha lt", + "hal t", + "( ns", + "(n s", + "_ deleted", + "_de leted", + "_delete d", + "_del eted", + "De velopment", + "Dev elopment", + "Develop ment", + "m ovies", + "movie s", + "mov ies", + "Ġid entities", + "Ġident ities", + "Ġprompt ly", + "ا ÙĨ", + "ا٠Ĩ", + "Ġ ante", + "Ġa nte", + "Ġan te", + "Ġant e", + "Ġ\" ','", + "Ġ\"' ,'", + "Ġ\"', '", + "åı £", + "imp se", + "imps e", + "Ġy ap", + "Ġya p", + "Type Name", + "Ġb itch", + "Ġbit ch", + "Ġassoci ates", + "Ġassociate s", + "Ġassoc iates", + "HE ME", + "- empty", + "-em pty", + "Ġ ت", + "ĠØ ª", + "ol vers", + "olve rs", + "olver s", + "olv ers", + "Ġp istol", + "Ġpist ol", + "Ġpis tol", + "Sc oped", + "Scope d", + "ag ner", + "agn er", + "agne r", + "' ]=='", + "'] =='", + "']= ='", + "']== '", + "Ġ IMP", + "ĠI MP", + "ĠIM P", + "e xc", + "ex c", + "Ġo mitted", + "Ġom itted", + "Ġomit ted", + "Ġmind set", + "Ġminds et", + "Ġ [](", + "Ġ[ ](", + "Ġ[] (", + "Ġ orn", + "Ġo rn", + "Ġor n", + "_ CAM", + "_C AM", + "_CA M", + "A vg", + "Av g", + "Localized String", + "ĠN atur", + "ĠNa tur", + "ĠNat ur", + "Ġ composer", + "Ġcom poser", + "Ġcomp oser", + "Ġcompose r", + "Ġcompos er", + "Ġ Playing", + "ĠPl aying", + "ĠPlay ing", + "ĠPla ying", + "Ġover d", + "Ġov erd", + "_ utf", + "_u tf", + "_ut f", + ". sk", + ".s k", + "ĠF ol", + "ĠFo l", + "$ page", + "$p age", + ", Object", + ",O bject", + "Ġb ees", + "Ġbe es", + "Ġbee s", + "al ary", + "ala ry", + "alar y", + "b ullet", + "bul let", + "bull et", + "_ library", + "_l ibrary", + "_lib rary", + "O ffer", + "Of fer", + "Off er", + "loc ated", + "locate d", + "Ġ (_,", + "Ġ( _,", + "Ġ(_ ,", + "âĢľ He", + "Ġ Owners", + "ĠOwn ers", + "ĠOwner s", + "ĠOw ners", + ") ).Ċ", + ")) .Ċ", + ")). Ċ", + "Ġb ri", + "Ġbr i", + ". Admin", + ".Ad min", + "k tion", + "kt ion", + "лÑİ Ñĩ", + "Ġerot ici", + "Ġerotic i", + "Cancel led", + "Ġ agr", + "Ġa gr", + "Ġag r", + "re views", + "review s", + "_ dma", + "_d ma", + "_dm a", + "R ICT", + "RI CT", + "RIC T", + "Ġ gfx", + "Ġg fx", + "Ġgf x", + "m pi", + "mp i", + "p po", + "pp o", + "Ġ //@", + "Ġ// @", + "Ġ/ /@", + "Ġ uppercase", + "Ġupper case", + "Ġcomm itting", + "Ġcommit ting", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "User Data", + "Ġv ai", + "Ġva i", + "ĉ sort", + "ĉs ort", + "Ġcongr at", + "Ġcong rat", + "Ġd ioxide", + "Ġdi oxide", + "д а", + ". area", + ".a rea", + ".ar ea", + ".are a", + "ĠJosh ua", + "ĠJos hua", + "ĠK och", + "ĠKo ch", + "_ break", + "_b reak", + "a zure", + "az ure", + "azu re", + "is tical", + "ist ical", + "istic al", + "isti cal", + "istica l", + "_AL PHA", + "_ views", + "_view s", + "_vi ews", + "Ġelim inating", + "Ġelimin ating", + "O MB", + "OM B", + "e numer", + "en umer", + "enu mer", + "enum er", + "ĠH ydro", + "ĠHy dro", + "( *(", + "(* (", + "ERT ICAL", + "Ġinev itably", + "Ġst ole", + "Ġsto le", + "Ġstol e", + "- east", + "-e ast", + "i eron", + "ie ron", + "ier on", + "iero n", + "Ġ linger", + "Ġl inger", + "Ġli nger", + "Ġlin ger", + "Ġling er", + "/ doc", + "/d oc", + "/do c", + "Å º", + "Ġ Already", + "ĠAl ready", + "as io", + "asi o", + "Ġ --Ċ", + "Ġ- -Ċ", + "Ġ-- Ċ", + "Ġ abbrev", + "Ġabb rev", + "Ġ Atom", + "ĠA tom", + "ĠAt om", + "h im", + "hi m", + "Ġ INSERT", + "ĠINS ERT", + "s un", + "su n", + "âĻ ª", + "CON NECT", + "CONN ECT", + "er ator", + "era tor", + "ĠM anning", + "ĠMan ning", + "ĠMann ing", + "Ġ :(", + "Ġ: (", + "g as", + "ga s", + "= >'", + "=> '", + "Ġquery set", + "; }čĊ", + ";} čĊ", + "Ġ Population", + "ĠPop ulation", + "uted String", + "res ident", + "resi dent", + "_ FONT", + "_F ONT", + "Ġ Respond", + "ĠRes pond", + "ĠResp ond", + "Ġobsc ure", + "Ġ observable", + "Ġo bservable", + "Ġobserv able", + "ĠContrib utors", + "ĠContributor s", + "k on", + "ko n", + "ĠM usk", + "ĠMus k", + "ĠMu sk", + "ex ao", + "ĠT ub", + "ĠTu b", + "Boot Application", + "S OR", + "SO R", + ". Horizontal", + ".H orizontal", + ". findBy", + ".find By", + ". power", + ".p ower", + ".pow er", + ".po wer", + "Ġpositive ly", + "Ġposit ively", + "ven ience", + "ĠJ ong", + "ĠJo ng", + "ĠJon g", + "Ġwh istle", + "Ġ знаÑĩ", + "Ġз наÑĩ", + "Ġзна Ñĩ", + "Ġзн аÑĩ", + "Ġl ending", + "Ġlen ding", + "Ġlend ing", + "Ġdestruct ive", + "Ġ onDelete", + "Ġon Delete", + "author ization", + "() ;?>", + "(); ?>", + "_ original", + "_or iginal", + "_origin al", + "_orig inal", + "sc ience", + "sci ence", + "a tra", + "at ra", + "atr a", + "?, ?,", + "Ġ Asc", + "ĠA sc", + "ĠAs c", + "Ġconvin cing", + "Ġconvinc ing", + "$ a", + "or gen", + "org en", + "orge n", + "_ Date", + "_D ate", + "Ġ Provide", + "ĠPro vide", + "ĠProvid e", + "ĠProv ide", + "Ġlon ely", + "Ġlone ly", + ") 'Ċ", + ")' Ċ", + "ex change", + "; ?>Ċ", + ";?> Ċ", + ". fast", + ".f ast", + ".fa st", + "S amples", + "Sample s", + "Sam ples", + "L ondon", + "Lo ndon", + "Lon don", + "' ])čĊ", + "'] )čĊ", + "']) čĊ", + "Ġ Ionic", + "ĠI onic", + "ĠIo nic", + "ĠIon ic", + "Ġp esso", + "Ġpes so", + "ĠKn ights", + "ĠKnight s", + "ĠR af", + "ĠRa f", + "_ attrs", + "_at trs", + "_attr s", + "_att rs", + "Ġrepe al", + "> Main", + ">M ain", + "Ġ Ordered", + "ĠOrder ed", + "ĠOrd ered", + "_ New", + "_N ew", + "=\" \"> < /", + "url patterns", + "ATION AL", + "ATIO NAL", + "pe ech", + "pee ch", + "ĠId aho", + "Ġpr incess", + "Ġprince ss", + "Ġprin cess", + "Ġprinc ess", + "Ġprinces s", + "Ġ Customers", + "ĠCustom ers", + "ĠCustomer s", + "ĠCust omers", + "a ways", + "aw ays", + "away s", + "awa ys", + "a db", + "ad b", + "ĠBry ant", + "ĠBryan t", + "n once", + "no nce", + "non ce", + "Ġad ul", + "Ġ` `(", + "Ġ`` (", + "Ġafter math", + "= dict", + "=d ict", + "text Box", + "Ġs perm", + "Ġsp erm", + "Ġspe rm", + "Ġsper m", + "Ġc ough", + "Ġco ugh", + "Ġcou gh", + "H or", + "Ho r", + "âĢĻ S", + ".Component ResourceManager", + "Ġreg ulator", + "Ġregul ator", + "Ġpartner ships", + "Ġpartners hips", + "Ġpartnership s", + "/ projects", + "/project s", + "t rys", + "tr ys", + "try s", + "ĠL aser", + "ĠLa ser", + "ĠLas er", + "⣠©", + "ĠF unk", + "ĠFun k", + "ĠFu nk", + "Ġun conscious", + "Ġuncon scious", + "Ġc rust", + "Ġcr ust", + "Ġcru st", + "Ġcrus t", + "Ġ Teams", + "ĠTe ams", + "ĠTeam s", + "ĠTea ms", + "Ġ Banner", + "ĠB anner", + "ĠBan ner", + "ĠH oney", + "ĠHon ey", + "ĠHo ney", + "l ems", + "le ms", + "lem s", + "Ġmax Width", + "Pointer Exception", + "fade Out", + "- St", + "-S t", + "Ġstr angers", + "Ġstrange rs", + "Ġstranger s", + "Ġstrang ers", + "Ġstran gers", + "_ GO", + "_G O", + "W ritable", + "Wr itable", + "_ Info", + "_In fo", + ". NonNull", + ".Non Null", + "an notations", + "annot ations", + "annotation s", + "Ġ GD", + "ĠG D", + "Ġendorse d", + "Ġendors ed", + "ĉToken Name", + "Ġ Depending", + "ĠDe pending", + "ĠDep ending", + "ĠDepend ing", + "YN AM", + "Ġ Meteor", + "ĠM eteor", + "ĠMet eor", + "Ġ Increase", + "ĠIn crease", + "ĠIncre ase", + ". Many", + ".M any", + ".Man y", + ".Ma ny", + "= =(", + "== (", + ". UUID", + ".U UID", + "_ KERNEL", + "_K ERNEL", + "Ġvid é", + "Ġ pq", + "Ġp q", + "ĠQt Gui", + "Ġ Various", + "ĠV arious", + "ĠVar ious", + "ĠVa rious", + "ĠVari ous", + "Ġ john", + "Ġj ohn", + "Ġjo hn", + "_ patch", + "_p atch", + "_pat ch", + "Ġt outes", + "Ġto utes", + "Ġtou tes", + "Ġtout es", + "Ġtoute s", + "Ġ Fail", + "ĠF ail", + "ĠFa il", + "Ġsurv iving", + "Ġsurviv ing", + "( \"${", + "(\" ${", + "(\"$ {", + "Ġ ĠĠĠĠĠĠčĊ", + "ĠĠ ĠĠĠĠĠčĊ", + "ĠĠĠĠ ĠĠĠčĊ", + "ĠĠĠ ĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠ čĊ", + "ĠĠĠĠĠ ĠĠčĊ", + "ĠĠĠĠĠĠ ĠčĊ", + "Ġ imageUrl", + "Ġimage Url", + ". wordpress", + ".word press", + "s ources", + "source s", + "ĉgl Vertex", + "âĢĻ a", + "Ġes col", + "Ġesc ol", + "R ARY", + "RA RY", + "RAR Y", + "Ġ Snake", + "ĠSn ake", + "Ġqu int", + "Ġq uint", + "Ġqui nt", + "Ġl asts", + "Ġla sts", + "Ġlast s", + "Ġlas ts", + "ĠHar mon", + "ĠHarm on", + "Ġ coil", + "Ġc oil", + "Ġco il", + "Ġcoi l", + "Ġexplo itation", + "Ġexploit ation", + "l een", + "le en", + "lee n", + "' >\";Ċ", + "'> \";Ċ", + "'>\" ;Ċ", + "Ġ SERVER", + "ĠS ERVER", + "ĠSER VER", + "Ġ HEADER", + "ĠHE ADER", + "ĠHEAD ER", + "_ velocity", + "_v elocity", + "_vel ocity", + "Ġ Invoke", + "ĠIn voke", + "ĠInv oke", + ". timestamps", + ".timestamp s", + "Ġs ulf", + "Ġsu lf", + "Ġsul f", + "I QUE", + "IQ UE", + "Ġinhabit ants", + "ph ins", + "phi ns", + "phin s", + "a zzo", + "az zo", + "azz o", + "Ġ mono", + "Ġm ono", + "Ġmon o", + "Ġmo no", + "L egend", + "Le gend", + "Leg end", + "Ġ nonce", + "Ġn once", + "Ġno nce", + "Ġnon ce", + "I FE", + "IF E", + "; \";Ċ", + ";\" ;Ċ", + "- create", + "-c reate", + "\" \",Ċ", + "\"\" ,Ċ", + "\"\", Ċ", + "per mit", + "perm it", + "ĠIm migration", + "ĠImm igration", + "Ġ pathname", + "Ġpath name", + "ff ective", + "ffect ive", + "âĻĢ âĻĢ", + "Ġex ams", + "Ġexam s", + "- event", + "-e vent", + "-ev ent", + "-even t", + "ĠT ill", + "ĠTi ll", + "ĠTil l", + "[ mid", + "[m id", + "F IX", + "FI X", + "; color", + ";c olor", + "( Order", + "_ traits", + "_t raits", + "_tr aits", + "_tra its", + "_trait s", + "Ġ orderBy", + "Ġorder By", + "Ġs unt", + "Ġsu nt", + "Ġsun t", + "ĠNich olas", + "Ø ²", + "Ġs unny", + "Ġsun ny", + "i ners", + "in ers", + "ine rs", + "iner s", + "Ġaccess ibility", + "Ġ HB", + "ĠH B", + ". comp", + ".c omp", + ".com p", + ".co mp", + "ĉ op", + "ĉo p", + "Ġminor ities", + "eth eus", + "ethe us", + "Ġcollabor ative", + "p rit", + "pr it", + "pri t", + "H IR", + "HI R", + "Ġwr aps", + "Ġwrap s", + "ĉ draw", + "ĉd raw", + "g od", + "go d", + "Ġ IX", + "ĠI X", + ". apps", + ".app s", + ".ap ps", + ".a pps", + "Ġ NM", + "ĠN M", + "Ġir relevant", + "Ġirre levant", + "ĠT igers", + "ĠTi gers", + "ĠTiger s", + "ĠTig ers", + "Ġ diag", + "Ġd iag", + "Ġdi ag", + "Ġdia g", + "G V", + "ĠAccess ories", + "k ont", + "ko nt", + "kon t", + "Ġs implify", + "Ġsimp lify", + "Ġsimpl ify", + "Ġ Favorite", + "ĠF avorite", + "ĠFavor ite", + "_ tools", + "_t ools", + "_to ols", + "_tool s", + "( []);Ċ", + "([ ]);Ċ", + "([] );Ċ", + "Ġt owers", + "Ġto wers", + "Ġtow ers", + "Ġtower s", + "B es", + "Be s", + "Ġ hunter", + "Ġh unter", + "Ġhun ter", + "Ġhunt er", + "Ġs alon", + "Ġsa lon", + "Ġsal on", + "( buff", + "(b uff", + "(buf f", + "ĉ debug", + "ĉde bug", + "Ġmal ware", + "M oving", + "Mo ving", + "Mov ing", + "- options", + "-o ptions", + "-option s", + "-opt ions", + ") +'", + ")+ '", + "ĠL OVE", + "ĠLO VE", + "_S OCKET", + "_SO CKET", + "_ fin", + "_f in", + "ĠDel aware", + "Ġsher iff", + "- invalid", + "-in valid", + "Ġ FULL", + "ĠF ULL", + "ĠFU LL", + "Ġ под", + "Ġп од", + "Ġпо д", + "e las", + "el as", + "ela s", + "\" strings", + "ĠRepresent atives", + "ĠRepresentative s", + "s urface", + "sur face", + "surf ace", + "res olved", + "resolve d", + "ht docs", + ") ):čĊ", + ")) :čĊ", + ")): čĊ", + "Ġpress ures", + "Ġpressure s", + "Ġno rms", + "Ġnor ms", + "Ġnorm s", + "Ġ pla", + "Ġp la", + "Ġpl a", + "Ġ surname", + "Ġs urname", + "Ġsur name", + "Ġ postal", + "Ġpos tal", + "Ġpost al", + "Ġpo stal", + "Ġ Depart", + "ĠDe part", + "ĠDep art", + "Ġs laughter", + "Ġsla ughter", + "or ida", + "ori da", + "Ġhe bben", + "Ġheb ben", + "Ġd esar", + "Ġde sar", + "Ġdes ar", + "comp act", + "_ LANG", + "_L ANG", + "_LA NG", + "åIJ Ī", + "o poly", + "op oly", + "opol y", + "opo ly", + "_ rad", + "_r ad", + "_ra d", + "ĠST DMETHOD", + "ĠSTD METHOD", + "L azy", + "La zy", + "Ġ ĠĠĉ", + "ĠĠ Ġĉ", + "ĠĠĠ ĉ", + ".. .,", + "... ,", + "( web", + "(w eb", + "Ġ Pont", + "ĠP ont", + "ĠPo nt", + "ĠPon t", + "Ġet was", + "Ġetwa s", + "Ġup ward", + "_ hat", + "_h at", + "Ġ ],ĊĊ", + "Ġ] ,ĊĊ", + "Ġ],Ċ Ċ", + "Ġ], ĊĊ", + "Ġ baseUrl", + "Ġbase Url", + "Ġwor rying", + "Ġworry ing", + "- addon", + "-add on", + "-ad don", + "( getClass", + "(get Class", + "S PI", + "SP I", + "Ġcapt uring", + ") },Ċ", + ")} ,Ċ", + ")}, Ċ", + "E ffects", + "Effect s", + "Eff ects", + "Ġcompet ent", + "Ġcompete nt", + "Ġf oul", + "Ġfo ul", + "Ġfou l", + "Ġsubs cribing", + "Ġsubscri bing", + "Ġ OBJECT", + "ĠO BJECT", + "ĠOBJ ECT", + "ĠOB JECT", + "IX EL", + "b ucks", + "bu cks", + "( edge", + "(e dge", + "(ed ge", + "( pass", + "(p ass", + "(pa ss", + "ĠPeter son", + "ĠPet erson", + "ĠPeters on", + "Ġbo obs", + "Ġboo bs", + "Ġboob s", + "Ġ Delay", + "ĠD elay", + "ĠDe lay", + "ĠDel ay", + "_ square", + "_s quare", + "e lim", + "el im", + "eli m", + "o ters", + "ot ers", + "ote rs", + "oter s", + "_ PC", + "_P C", + "% E", + "on click", + "Ġ SVG", + "ĠS VG", + "ĠSV G", + "Ġt opped", + "Ġto pped", + "Ġtop ped", + "Ġtopp ed", + "Ġf ist", + "Ġfi st", + "Ġfis t", + "s mart", + "sm art", + "ĠR alph", + "( owner", + "(o wner", + "j ours", + "jo urs", + "jour s", + "Ġbro nze", + "Ġbron ze", + "Ġ ArgumentException", + "ĠArgument Exception", + "( original", + "(origin al", + "(orig inal", + "(or iginal", + "_ SCALE", + "_S CALE", + "_SC ALE", + "_ cp", + "_c p", + "Ġrecomm ends", + "Ġrecommend s", + ".set Style", + "S ure", + "Sur e", + "Su re", + "L AND", + "LA ND", + "LAN D", + "Ġre peating", + "Ġrep eating", + "Ġrepe ating", + "Ġrepeat ing", + "M att", + "Mat t", + "Ma tt", + ". Visibility", + "Ġenter prises", + "Ġenterprise s", + ". Setup", + ".Set up", + "( scene", + "(s cene", + "(sc ene", + "ĠRe active", + "ĠReact ive", + "ur ge", + "urg e", + "b w", + ". Put", + ".P ut", + "p ersist", + "pers ist", + ". cookie", + ".c ookie", + ".co okie", + "ĠA udi", + "ĠAud i", + "ĠAu di", + "` s", + "s upplier", + "sup plier", + "( Form", + "(F orm", + " ¡", + "_ so", + "_s o", + "Į Ģ", + "ĠLeg ion", + "t te", + "tt e", + "N d", + "L oss", + "Lo ss", + "Los s", + "( attrs", + "(at trs", + "(attr s", + "(att rs", + ". scatter", + ".sc atter", + "Ġg room", + "Ġgr oom", + "Ġgro om", + "Ġgl impse", + "Ġglimps e", + "Ġn ails", + "Ġna ils", + "Ġnail s", + "Ġcum ulative", + "Ġf azer", + "Ġfa zer", + "Ġfaz er", + "_ services", + "_s ervices", + "_service s", + "_serv ices", + ". Num", + ".N um", + "ib ilit", + "ibil it", + "ibi lit", + "ibili t", + "_ resolution", + "_re solution", + "_res olution", + "Ġ Tx", + "ĠT x", + "um inium", + "umin ium", + "o pa", + "op a", + ". schedule", + ".s chedule", + "sm tp", + "ภķ", + "ur ry", + "urr y", + "ü k", + "g oog", + "go og", + "goo g", + "_ signature", + "_sign ature", + "_sig nature", + ". into", + ".in to", + ".int o", + "Ġ Steps", + "ĠSt eps", + "ĠSte ps", + "ĠStep s", + "Ġhome owners", + "Ġhomeowner s", + "Ġ NSURL", + "ĠNS URL", + "ĠP AC", + "ĠPA C", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĊĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĊĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĊĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĊĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĊĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĊ Ċ", + "> ')Ċ", + ">' )Ċ", + ">') Ċ", + "e nh", + "en h", + "Ġin cap", + "Ġinc ap", + "$ MESS", + "Ġm oins", + "Ġmo ins", + "Ġmoi ns", + "Ġ Fi", + "ĠF i", + "Ġoff season", + "pr essions", + "press ions", + "pression s", + "> .. < /", + "Ġpro vinces", + "Ġprov inces", + "Ġprovince s", + "Ġprovinc es", + "_ RAW", + "_R AW", + "_RA W", + "\\ App", + "Ġprostit uer", + "Ġprostitu er", + "_ gain", + "_g ain", + ".t encent", + "ff ects", + "ffect s", + "ffe cts", + "( pk", + "(p k", + "s ku", + "sk u", + "Ġ usable", + "Ġus able", + "Ġusa ble", + "ER VED", + "ERV ED", + "ERVE D", + "Ġant enna", + "Ġantenn a", + "h ea", + "he a", + "p list", + "pl ist", + "_ PLUGIN", + "_PL UGIN", + "Ñģ л", + ". lookup", + ".look up", + "á» ģ", + "Ġen larg", + "Ġp iss", + "Ġpi ss", + "Ġpis s", + "H am", + "Ha m", + "i map", + "im ap", + "ima p", + "Ġ invalidate", + "Ġin validate", + "Ġinvalid ate", + "Ġs ilk", + "Ġsi lk", + "Ġsil k", + "=\"# \">Ċ", + "=\"#\" >Ċ", + "=\"#\"> Ċ", + "ĠGr ass", + "ĠGra ss", + "Ġ Goal", + "ĠGo al", + "ĠGoa l", + "_ pdf", + "_p df", + "_pd f", + "Hand lers", + "Handler s", + "Handle rs", + "Ġst acks", + "Ġstack s", + "Ġsta cks", + ". getFullYear", + ".get FullYear", + "= [];Ċ", + "=[ ];Ċ", + "=[] ;Ċ", + "è½ ¦", + ", V", + "( split", + "(s plit", + "(sp lit", + "Ñĥн к", + "Ġbake ca", + "Ġbak eca", + "Ġ~ /.", + "Ġ~/ .", + "p ez", + "pe z", + "t ails", + "ta ils", + "tail s", + "ĠG len", + "ĠGl en", + "ĠGle n", + "Ġ setImage", + "Ġset Image", + "Ġ Comic", + "ĠC omic", + "ĠCom ic", + "ĠCo mic", + "B LOCK", + "BL OCK", + "ĉ This", + "ĉT his", + "o ader", + "oad er", + "oa der", + "Ġcapital ist", + "Ġcapita list", + "Ġcapit alist", + "_ STEP", + "_ST EP", + "( Boolean", + "Ġ Correct", + "ĠC orrect", + "ĠCor rect", + "r ina", + "ri na", + "rin a", + "Ġconc aten", + "Ġconcat en", + "å® ŀ", + "( ):ĊĊ", + "() :ĊĊ", + "():Ċ Ċ", + "(): ĊĊ", + "Ġun anim", + "Ġuna nim", + "l li", + "ll i", + "al ars", + "ala rs", + "alar s", + "- ne", + "-n e", + "Ġd ivor", + "Ġdi vor", + "Ġdiv or", + "ĠKick starter", + "] ._", + "]. _", + "< number", + " * * < /", + ": d", + "m di", + "md i", + "bind Value", + "Ġ Decision", + "ĠDe cision", + "ĠDec ision", + "Return Value", + ", index", + ",in dex", + "x fc", + "xf c", + "Ġse rum", + "Ġser um", + "get Field", + "Connection String", + "- object", + "-o bject", + "-ob ject", + ". recv", + ".re cv", + ".rec v", + "Ġunder graduate", + "Ġundergrad uate", + ". Infrastructure", + ".Inf rastructure", + "ĠK ab", + "ĠKa b", + "Ġadv isory", + "Ġadvis ory", + "Ġadvisor y", + "- tree", + "-t ree", + "-tr ee", + "Ġ mue", + "Ġm ue", + "Ġmu e", + "in form", + "info rm", + "inf orm", + ". embed", + ".em bed", + "Ġ errorCode", + "Ġerror Code", + "m icro", + "mi cro", + "mic ro", + "Ġsp arked", + "Ġspark ed", + "Ġspar ked", + "Ġimage ry", + "Ġimag ery", + "con c", + "co nc", + "_ missing", + "_m issing", + "_miss ing", + "Ġsur plus", + "K S", + "ĉR THOOK", + "ĉRT HOOK", + "T ell", + "Te ll", + "Tel l", + "r ium", + "ri um", + "Ġ Radius", + "ĠR adius", + "ĠRad ius", + "ĠRadi us", + "r ika", + "ri ka", + "rik a", + "los ion", + "ĠH ern", + "ĠHe rn", + "ĠHer n", + "G amma", + "Gam ma", + "Ga mma", + "Ġ Fee", + "ĠF ee", + "ĠFe e", + "Ġ Named", + "ĠN amed", + "ĠName d", + "ĠNa med", + "ĠNam ed", + "ĠCan yon", + "Ġ JSONArray", + "ĠJSON Array", + "Ġz wei", + "Ġzw ei", + "Ġzwe i", + "Ġ SSH", + "ĠS SH", + "ĠSS H", + "Ġser vant", + "Ġserv ant", + "co al", + "Ġden ying", + "Ġdeny ing", + "Ġs plits", + "Ġsplit s", + "Ġspl its", + "In correct", + "Inc orrect", + "Ġt ox", + "Ġto x", + "ĠAnal yst", + "ĠAnaly st", + "Ġacc red", + "Ġac cred", + "Ġaccr ed", + "u ble", + "ub le", + "ubl e", + "Ġ wt", + "Ġw t", + "Ġ Trial", + "ĠT rial", + "ĠTr ial", + "ĠTri al", + ". extension", + ".ext ension", + "Ġ Career", + "ĠCar eer", + "ĠCare er", + "Ġsec uring", + "ĠL il", + "ĠLi l", + "Ġpro jections", + "Ġproject ions", + "Ġproj ections", + "Ġprojection s", + "Ġproje ctions", + "Ġy east", + "Ġye ast", + "M ade", + "Ma de", + "Mad e", + "Ġfound ations", + "Ġfoundation s", + "ac ific", + "aci fic", + ". volume", + ".v olume", + ".vol ume", + "Ġmir rors", + "Ġmirror s", + "#### ############################################################################", + "######## ########################################################################", + "################ ################################################################", + "################################ ################################################", + "################################################################ ################", + "################################################ ################################", + "############################################################################ ####", + "######################################################################## ########", + "######################################## ########################################", + "######################## ########################################################", + "######################################################## ########################", + "Ġvi olate", + "Ġviol ate", + "ars ers", + "arse rs", + "arser s", + "Ġs ocio", + "Ġso cio", + "Ġsoc io", + "Ġsoci o", + "Ġtk inter", + "Ġ LINK", + "ĠL INK", + "ĠLI NK", + "ĠLIN K", + ". getSize", + ".get Size", + ".getS ize", + "Ġ Whole", + "ĠW hole", + "ĠWh ole", + "ĠWho le", + ")view DidLoad", + "ĉ done", + "ĉd one", + "ĉdo ne", + "ude au", + "\\ \"> < /", + "And rew", + "Andre w", + "e rb", + "er b", + "Ġf ö", + ". cluster", + ".cl uster", + "Ġdis course", + "Ġdisc ourse", + "Ġdiscour se", + "Ġdisco urse", + "_DE FIN", + "_DEF IN", + "Ġpued en", + "Ġpu eden", + "Ġpuede n", + "Ġ LOW", + "ĠL OW", + "ĠLO W", + ". av", + ".a v", + "Ġpr eca", + "Ġpre ca", + "Ġprec a", + "Ġ quo", + "Ġqu o", + "Ġq uo", + "Ġve loc", + "Ġvel oc", + ", ''", + ",' '", + "Ġ xyz", + "Ġx yz", + "Ġxy z", + "ĉ padding", + "ĉp adding", + "Ġtom atoes", + "Ġtomato es", + "ĠB ent", + "ĠBe nt", + "ĠBen t", + "_ curr", + "_c urr", + "_cur r", + "_cu rr", + "NS Date", + "Ġ getCurrent", + "Ġget Current", + "ĠgetC urrent", + "Ġ [`", + "Ġ[ `", + "Wed nesday", + ". Bar", + ".B ar", + "Ġ Vous", + "ĠV ous", + "ĠVo us", + "i nz", + "in z", + "ĠQu inn", + "ĠQui nn", + "ex cel", + "exc el", + "d os", + "do s", + "Ġout dated", + "O UTH", + "OUT H", + "OU TH", + "Ġ Maker", + "ĠM aker", + "ĠMake r", + "ĠMa ker", + "ĠMak er", + "ep endency", + "epend ency", + "Ġd ull", + "Ġdu ll", + "Ġdul l", + "ĠW inn", + "ĠWin n", + "ĠWi nn", + "o ge", + "og e", + "cl ave", + "cla ve", + "Ġ nova", + "Ġn ova", + "Ġno va", + "Ġnov a", + "Ġ aval", + "Ġa val", + "Ġav al", + "Ġava l", + "C apt", + "Cap t", + "Ca pt", + "ĠSp otify", + "ĠSpot ify", + "Ġj ul", + "Ġju l", + ") tableView", + ")t ableView", + "Ġf ilenames", + "Ġfile names", + "Ġfil enames", + "Ġfilename s", + "Ġesk ort", + "åij ¨", + "Ġsk ew", + "Ġske w", + "t erior", + "ter ior", + "te rior", + "teri or", + "Ġfin anc", + "Ġfinan c", + "Ġ tabla", + "Ġtab la", + "Ġta bla", + "ĠU IB", + "ĠUI B", + "Ġ ():", + "Ġ( ):", + "Ġ() :", + "ĠD ocker", + "ĠDo cker", + "ĠDoc ker", + "ĠDock er", + "per centage", + "percent age", + "Me et", + "i chi", + "ic hi", + "ich i", + "Ġinter im", + "Ġinte rim", + "Ġ' ='", + "Ġ'= '", + ". JSONObject", + ".JSON Object", + "( fid", + "(f id", + "(fi d", + "Ġd ownt", + "Ġdown t", + "Ġdow nt", + "Ġtrans ient", + "ĠSt eph", + "ĠSte ph", + "ĠStep h", + "Ġignor ance", + "Ġ Codes", + "ĠC odes", + "ĠCo des", + "ĠCode s", + "ĠCod es", + "= '',", + "=' ',", + "='' ,", + "Ġ ICE", + "ĠI CE", + "ĠIC E", + "Ġtran qu", + "Ġ Extended", + "ĠExt ended", + "ĠExtend ed", + "Ġ mund", + "Ġm und", + "Ġmu nd", + "Ġmun d", + "Ġ HOME", + "ĠH OME", + "ĠHO ME", + "Ġkil ometers", + "Ġkilomet ers", + "Ġ imagen", + "Ġim agen", + "Ġimage n", + "Ġimag en", + "Ġima gen", + "o ux", + "ou x", + "( sz", + "(s z", + "You ng", + "Yo ung", + "uff ed", + "uf fed", + "Ġ Wake", + "ĠW ake", + "ĠWa ke", + "ĠWak e", + "Ġa ide", + "Ġaid e", + "Ġai de", + "P ROC", + "PR OC", + "PRO C", + "ĠR at", + "ĠRa t", + "ĠL ith", + "ĠLi th", + "ĠLit h", + "b art", + "bar t", + "ba rt", + "Ġ Arrange", + "ĠAr range", + "ĠArr ange", + "p rompt", + "prom pt", + "Ð £", + "( ct", + "(c t", + "Ġ Interval", + "ĠInt erval", + "ĠInter val", + "d ept", + "de pt", + "dep t", + "D aniel", + "Dan iel", + "Dani el", + "Ġ fills", + "Ġf ills", + "Ġfil ls", + "Ġfill s", + ". tensor", + ".t ensor", + "( trim", + "(t rim", + "(tr im", + "Ġje alous", + "F eb", + "Fe b", + "\\ Common", + "Ġamendment s", + "Ġamend ments", + "_ operator", + "_op erator", + "_o perator", + "_oper ator", + "_ customize", + "_custom ize", + "Ġ ]]", + "Ġ] ]", + "Ġ bn", + "Ġb n", + "Ġdis appointment", + "Ġdisappoint ment", + "Ġmill enn", + ". when", + ".w hen", + ".wh en", + "Ġob ey", + "Ġobe y", + "Ġoff enders", + "Ġoffender s", + "Ġoffend ers", + "Ġoffen ders", + "W ild", + "Wil d", + "Wi ld", + "Ġcell For", + "Ġappar atus", + ". after", + ".a fter", + ".af ter", + "Ġ EPS", + "ĠE PS", + "ĠEP S", + "Ġad orable", + "ope rand", + "oper and", + "( listener", + "(list ener", + "ve al", + "Ġ )(", + "Ġ) (", + "Ġcardio vascular", + "uplic ates", + "uplicate s", + "r istol", + "rist ol", + "ris tol", + "Ġref uses", + "Ġrefuse s", + "( QWidget", + "(Q Widget", + "Ġel emento", + "Ġelement o", + "Ġelem ento", + "Number Of", + ". delay", + ".d elay", + ".de lay", + ".del ay", + ". groups", + ".g roups", + ".group s", + "\" >'+", + "\"> '+", + "\">' +", + "åĿ Ģ", + "ace ncy", + "ac ency", + "acen cy", + "( URL", + "(U RL", + "_ half", + "_h alf", + "_hal f", + "= l", + "Ġlist View", + "( section", + "(s ection", + "(se ction", + "(sec tion", + ". toArray", + ".to Array", + "+ /", + "ĠRodrig uez", + "i stream", + "ist ream", + "istr eam", + "Ġelig ibility", + ": :-", + ":: -", + ". newInstance", + ".new Instance", + "P B", + "Ġ Assets", + "ĠAs sets", + "ĠAss ets", + "ĠAsset s", + "Ġ Composite", + "ĠCom posite", + "ĠComp osite", + "ĠL abs", + "ĠLa bs", + "ĠLab s", + "ĠH amas", + "ĠHam as", + "ĠHa mas", + "++ );Ċ", + "++) ;Ċ", + "Ġ blk", + "Ġb lk", + "Ġbl k", + "Ġ Neo", + "ĠN eo", + "ĠNe o", + "L uc", + "Lu c", + "@ login", + "Ġun aware", + "Ġuna ware", + ". met", + ".m et", + ".me t", + "_ RELEASE", + "_RE LEASE", + "( ST", + "(S T", + "AM IL", + "AMI L", + "r ike", + "ri ke", + "rik e", + "Ġ (){Ċ", + "Ġ( ){Ċ", + "Ġ() {Ċ", + "Ġ(){ Ċ", + "( sprintf", + "(s printf", + "Ġ Accounts", + "ĠAc counts", + "ĠAccount s", + "Ġ VIEW", + "ĠV IEW", + "ĠVI EW", + "Ġ Aj", + "ĠA j", + "ãĤ °", + "Ġwh isk", + "Ġ idi", + "Ġi di", + "Ġid i", + "Ġr ode", + "Ġro de", + "Ġrod e", + "Ġ ihn", + "Ġi hn", + "Ġih n", + "ĠElement ary", + "Q ty", + "Qt y", + "Ġintrig uing", + "Ġ å¤", + "Ġå ¤", + "J obs", + "Job s", + "Jo bs", + "ĉ offset", + "ĉo ffset", + "ĠAh med", + "ĠTal iban", + "Ġ èİ·åıĸ", + "Ġè İ·åıĸ", + "Ġin jected", + "Ġinj ected", + "Ġinject ed", + ". Authentication", + ".Auth entication", + "_ linear", + "_l inear", + "_line ar", + "_lin ear", + "_li near", + ". Decimal", + ".D ecimal", + ".De cimal", + ".Dec imal", + "Ġapp les", + "Ġap ples", + "Ġappl es", + "Ġapple s", + "Ġshare holders", + "Ġshareholder s", + "Ġb aked", + "Ġba ked", + "Ġbake d", + "Ġbak ed", + ". diff", + ".d iff", + ".di ff", + "ĠE ddie", + "ĠEd die", + "o kers", + "ok ers", + "oke rs", + "oker s", + "Ġconfront ed", + "vo ices", + "voice s", + "Ġt us", + "Ġtu s", + "Ġ Spin", + "ĠS pin", + "ĠSp in", + "ĠSpi n", + "N ODE", + "NO DE", + "_ Un", + "_U n", + "C TX", + "CT X", + "/ google", + "/g oogle", + "/go ogle", + "T emperature", + "Tem perature", + "Ġ' ').", + "Ġ'' ).", + "Ġ'') .", + "Ġmagn ificent", + "Ġ startIndex", + "Ġstart Index", + "semb les", + "sem bles", + "semble s", + "sembl es", + "Any one", + "z k", + "e hen", + "eh en", + "ĠD ame", + "ĠDa me", + "ĠDam e", + ". strict", + ".str ict", + "Ġre places", + "Ġrep laces", + "Ġrepl aces", + "Ġreplace s", + "Ġline back", + "Ġpush es", + "Ġpus hes", + "Ġche ek", + "ĠS hi", + "ĠSh i", + "_ BYTES", + "_BY TES", + "_BYTE S", + "R EA", + "RE A", + "ả n", + "_CON NECTION", + "_CONNECT ION", + "G ateway", + "Gate way", + "ĠTr avis", + "ĠTra vis", + "ĠTrav is", + "Ġ AX", + "ĠA X", + "Ġ Basically", + "ĠBasic ally", + "ĠBas ically", + "Ġ Upgrade", + "ĠUp grade", + "à ª", + "th emes", + "the mes", + "theme s", + "them es", + "er mo", + "erm o", + "k or", + "ko r", + "F emale", + "Fe male", + "_ attach", + "_at tach", + "_att ach", + "ĠìĤ¬ ìļ©", + "Ġ poz", + "Ġp oz", + "Ġpo z", + "= =============Ċ", + "== ============Ċ", + "==== ==========Ċ", + "======== ======Ċ", + "=== ===========Ċ", + "============ ==Ċ", + "============= =Ċ", + "=========== ===Ċ", + "============== Ċ", + "========= =====Ċ", + "========== ====Ċ", + "====== ========Ċ", + "===== =========Ċ", + "======= =======Ċ", + "( symbol", + "(s ymbol", + "(sym bol", + "Ġ Sector", + "ĠS ector", + "ĠSe ctor", + "ĠSec tor", + "ĠSect or", + "__ )ĊĊ", + "__) ĊĊ", + "__)Ċ Ċ", + "_ padding", + "_p adding", + "_pad ding", + "ï¼ļ \"", + "Ġ fabs", + "Ġf abs", + "Ġfa bs", + "Ġfab s", + "Ġr anged", + "Ġrange d", + "Ġran ged", + "Ġrang ed", + "set Name", + "Ġp error", + "Ġper ror", + "Ġpe rror", + "â Ĺ", + "ĠFile Reader", + "Ġf ulfilled", + "Ġful filled", + "Ġfulfill ed", + "Ġfulfil led", + "_ Current", + "_C urrent", + "Ġdo minate", + "Ġdom inate", + "Ġdomin ate", + "Ġdomina te", + "Ġsm ugg", + "Post Mapping", + "_ force", + "_f orce", + "_for ce", + "Ġb loc", + "Ġbl oc", + "Ġblo c", + "ĠG iant", + "ĠGi ant", + "ĠGian t", + "ĠGia nt", + "( video", + "(v ideo", + "Ġ CU", + "ĠC U", + "System Service", + "Ġ elf", + "Ġe lf", + "Ġel f", + "Ġkont akt", + "ë ª", + "k ees", + "ke es", + "kee s", + "g tk", + "gt k", + "Ġparam Int", + "Ġ markup", + "Ġmark up", + "Ġmar kup", + "u ales", + "ual es", + "ua les", + "uale s", + "Ġaccount ed", + "Ġgang bang", + "RY PT", + "Ġ Wrong", + "ĠW rong", + "ĠWr ong", + "Ġ credited", + "Ġcr edited", + "Ġcred ited", + "Ġcredit ed", + "Ġ MESSAGE", + "ĠM ESSAGE", + "Ġf laws", + "Ġfl aws", + "Ġflaw s", + "Ġfla ws", + "Ġb bw", + "Ġbb w", + "Ġmet abolic", + "Ġmetab olic", + "Ġmetabol ic", + "ĠO EM", + "ĠOE M", + "/ event", + "/e vent", + "(C ollectors", + "mon ton", + "mo nton", + "mont on", + "monto n", + "ap pear", + "app ear", + "appe ar", + "Ġop ted", + "Ġopt ed", + "Ġc heat", + "Ġch eat", + "Ġche at", + "Ġd av", + "Ġda v", + "Ġ Proceed", + "ĠPro ceed", + "ĠProc eed", + "Ġ ê¸", + "Ġê ¸", + "an ked", + "ank ed", + "anke d", + "и з", + "an sk", + "ans k", + "Ġ Hang", + "ĠH ang", + "ĠHa ng", + "ĠHan g", + "ĠC ler", + "ĠCl er", + "ĠCle r", + "Ġdis gu", + "Ġdisg u", + "Ġc map", + "Ġcm ap", + ". cljs", + ".cl js", + "Ġa ument", + "Ġau ment", + "l ez", + "le z", + "Ġ Joined", + "ĠJ oined", + "ĠJo ined", + "ĠJoin ed", + "ĠJoi ned", + "_ received", + "_re ceived", + "_receive d", + "Ġa erial", + "Ġaer ial", + "Ġae rial", + "o tel", + "ot el", + "ote l", + "Ġg reet", + "Ġgre et", + "\" s", + "Ġ Genesis", + "ĠGen esis", + "ĠGene sis", + "ĠCal if", + "ĠCa lif", + "pan ion", + "Ġtail ored", + "Ġtailor ed", + "m apping", + "ma pping", + "map ping", + "and Expect", + ". track", + ".t rack", + ".tr ack", + "at omy", + "ato my", + "atom y", + "ĠO w", + "ul lah", + "ull ah", + "ulla h", + ". Yes", + ".Y es", + "Ġ SimpleName", + "ĠSimple Name", + "d bh", + "db h", + "' en", + "'e n", + "Ġn onsense", + "Ġnon sense", + "Ġnons ense", + "Ġphilosoph ical", + "( getContext", + "(get Context", + "Ġis so", + "Ġiss o", + "Ġ ACE", + "ĠA CE", + "ĠAC E", + "start Date", + "Ġb ÄĻd", + "ĠAUTH OR", + "ĠG lobe", + "ĠGl obe", + "ĠGlo be", + "ĠGlob e", + "Ġin sects", + "Ġins ects", + "Ġinsect s", + "Ġinse cts", + "_ Al", + "_A l", + "ush ing", + "ushi ng", + "è® °", + "/ Home", + "/H ome", + "ĠLocal Date", + "ne eded", + "need ed", + "nee ded", + "hes ive", + "Ġ illusion", + "Ġill usion", + "äº Į", + "Ġt rat", + "Ġtr at", + "Ġtra t", + "x o", + "/ detail", + "/d etail", + "/de tail", + "_ MATCH", + "_M ATCH", + "_MAT CH", + "Ġbroad band", + "Ġ wal", + "Ġw al", + "Ġwa l", + "ĠIllegal StateException", + "IRE CTION", + "IRECT ION", + "Ġnor theast", + "Ġnorth east", + "es ium", + "esi um", + "Ġ Cliente", + "ĠCl iente", + "ĠClient e", + "ĠCli ente", + "ul ance", + "ula nce", + "ulan ce", + "n ty", + "nt y", + "Ġt ecn", + "Ġte cn", + "Ġtec n", + "Device s", + "Dev ices", + "Ġgr ains", + "Ġgrain s", + "Ġgra ins", + "ĠO g", + "Ġ SEL", + "ĠS EL", + "ĠSE L", + "ud iant", + "udi ant", + "Ġ ++;Ċ", + "Ġ++ ;Ċ", + "Ġexplan ations", + "Ġexplanation s", + "o cco", + "oc co", + "occ o", + "Ġd iets", + "Ġdi ets", + "Ġdie ts", + "Ġdiet s", + "Ġco hort", + "Ġcoh ort", + "( controller", + "(cont roller", + "(control ler", + ". Iterator", + ".It erator", + ".Iter ator", + "- rich", + "-r ich", + "ro cess", + "roc ess", + "G D", + "Ġcar bohydr", + "Ġ fried", + "Ġf ried", + "Ġfr ied", + "Ġfri ed", + "ĠEm ployment", + "ĠEmp loyment", + "ĠEmploy ment", + "ìŀ ¥", + "ĠLeon ard", + "ĠLeo nard", + "_ ${", + "_$ {", + "qu ares", + "quare s", + "qua res", + "Ġcompan ions", + "Ġcompanion s", + "Ġp aris", + "Ġpar is", + "Ġpa ris", + "Ġpari s", + "Ġst imulation", + "Ġstim ulation", + "ĠZ oo", + "ĠZo o", + "Ġre levance", + "Ġrelev ance", + "Ġ Colour", + "ĠCol our", + "ĠColo ur", + "Ġs pear", + "Ġsp ear", + "Ġspe ar", + "ot ional", + "otion al", + "oti onal", + "Ġ Lite", + "ĠL ite", + "ĠLi te", + "ĠLit e", + "ĠK osten", + "ĠKo sten", + "ĠKos ten", + "Ġ ó", + "Ġà ³", + "_ attachment", + "_att achment", + "_attach ment", + "orph ic", + "orp hic", + "Ġda mit", + "Ġdam it", + "Ġ dlg", + "Ġd lg", + "Ġdl g", + "Ġth rive", + "Ġthr ive", + "CH ANGE", + "CHAN GE", + "Ġ Apparently", + "ĠApp arently", + "Ġa tual", + "Ġat ual", + "Ġro oted", + "Ġroot ed", + "( images", + "(image s", + "(im ages", + "a wi", + "aw i", + "ar iat", + "ari at", + "aria t", + "Ġch erry", + "Ġcher ry", + "ST ATIC", + "STAT IC", + "m nt", + "mn t", + "Ġ UserId", + "ĠUser Id", + "il let", + "ill et", + "ille t", + "ĠHis panic", + "ĠHispan ic", + "Ġ nak", + "Ġn ak", + "Ġna k", + "Ġcent ro", + "Ġcentr o", + "Ġcen tro", + "Ġ dims", + "Ġd ims", + "Ġdi ms", + "Ġdim s", + "_ initialize", + "_initial ize", + "ı k", + "ĠCent ers", + "ĠCenter s", + "R EN", + "RE N", + "Ġevolution ary", + "Ġ Topics", + "ĠTo pics", + "ĠTop ics", + "ĠTopic s", + "_ damage", + "_d amage", + "_da mage", + "e mer", + "em er", + "eme r", + "Ġr und", + "Ġrun d", + "Ġru nd", + "Ġpun ished", + "Ġpunish ed", + "Ġc ubic", + "Ġcu bic", + "Ġcub ic", + "f air", + "fa ir", + "[ ];ĊĊ", + "[] ;ĊĊ", + "[];Ċ Ċ", + "Ġin stantiate", + "Ġinstant iate", + "Ġover see", + "Ġovers ee", + "Ġoverse e", + "- delete", + "-de lete", + "-del ete", + "unt eer", + "unte er", + "start Time", + "Ġ Pipeline", + "ĠP ipeline", + "ĠPipe line", + "ĠPip eline", + "_ GAME", + "_G AME", + "ĠC ir", + "ĠCi r", + "ĉ Null", + "ĉN ull", + ". Formatting", + ".Format ting", + "uc umber", + "ĠR ide", + "ĠRid e", + "ĠRi de", + "Ġz oo", + "Ġzo o", + "Ġ checker", + "Ġcheck er", + "Ġche cker", + "åIJ Į", + "= C", + "Ġg rit", + "Ġgr it", + "Ġgri t", + "\" );//", + "\") ;//", + "\"); //", + "_ xy", + "_x y", + "Ġ Declaration", + "ĠDe claration", + "Ġ callable", + "Ġcall able", + "F oo", + "Fo o", + "Ġ ListItem", + "ĠList Item", + "Ġin accur", + "m lin", + "ml in", + "ĉ Data", + "ĉD ata", + "Ġev olving", + "a wan", + "aw an", + "awa n", + "Ġc afe", + "Ġca fe", + "Ġcaf e", + "f olk", + "fo lk", + "fol k", + "_ IDX", + "_ID X", + "_I DX", + "Ġ Anything", + "ĠAny thing", + "ĠPalest ine", + "ĠPalestin e", + "Ġ GridView", + "ĠGrid View", + "Ġcol ony", + "Ġcolon y", + "ĠGerman s", + "ĠGer mans", + "ĠGerm ans", + "( +", + ". pid", + ".p id", + ".pi d", + ". jsx", + ".j sx", + ".js x", + "ĠSup erior", + "ĠSuper ior", + "Christ ian", + "ĠL ect", + "ĠLe ct", + "ĉ Game", + "ĉG ame", + "Ġinstrument al", + "An imations", + "Animation s", + "Anim ations", + "д ал", + "да л", + "ĠM oses", + "ĠMo ses", + "ĠMos es", + "ĉĉ čĊĉĉčĊ", + "ĉĉčĊ ĉĉčĊ", + "z s", + "k te", + "kt e", + "ä¸ ļ", + "_ DIST", + "_D IST", + "_DIS T", + "_DI ST", + "b itmap", + "bit map", + "d B", + "Ġp ersistence", + "Ġpers istence", + "Ġpersist ence", + "ÑĢ Ð¾Ñģ", + "ÑĢо Ñģ", + "$ l", + "B ron", + "Br on", + "Bro n", + "Ġ {|", + "Ġ{ |", + "_ chart", + "_c hart", + "_ch art", + "_char t", + "Ġ Consum", + "ĠCon sum", + "ĠCons um", + "Ġh emp", + "Ġhe mp", + "Ġhem p", + "Ġ \"))Ċ", + "Ġ\" ))Ċ", + "Ġ\") )Ċ", + "Ġ\")) Ċ", + "Ġatt ackers", + "Ġattack ers", + "Ġattacker s", + "Ġknowledge able", + "Ġc et", + "Ġce t", + "Ġvir uses", + "Ġvirus es", + "' I", + "Ġpitch er", + "Ġpit cher", + "Ġswe eping", + "Ġsweep ing", + "= list", + "=l ist", + "apt ops", + "aptop s", + ". depth", + ".de pth", + ".dep th", + "Ġinstruct ed", + "Ġ Rus", + "ĠR us", + "ĠRu s", + "benh avn", + "Ġ ин", + "Ġи н", + "S ports", + "Sp orts", + "Sport s", + "Spo rts", + "Ġon set", + "Ġons et", + "æĿ ĥ", + ". RED", + ".R ED", + ".RE D", + "_ si", + "_s i", + "ĠP ST", + "ĠPS T", + ". onChange", + ".on Change", + "> tag", + ">t ag", + "ĠR oh", + "ĠRo h", + "_ character", + "_char acter", + "ĠL aws", + "ĠLa ws", + "ĠLaw s", + "Ġ Bachelor", + "ĠB achelor", + "ĠBach elor", + "_ swap", + "_s wap", + "_sw ap", + ".re activex", + "Ġreward ing", + "Ġrew arding", + "M edium", + "Med ium", + "- [", + "Ġ Recently", + "ĠRec ently", + "ĠRecent ly", + "J oint", + "Join t", + "Jo int", + "part ition", + "Ġ Minutes", + "ĠMin utes", + "ĠMinute s", + "Ġ indo", + "Ġin do", + "Ġi ndo", + "Ġind o", + "Ġabsor bed", + "Ġabsorb ed", + "Ġ GN", + "ĠG N", + "_ IND", + "_IN D", + "_I ND", + "Ġs aber", + "Ġsa ber", + "Ġsab er", + "Ġsabe r", + "S pawn", + "Sp awn", + "out puts", + "output s", + "ĠJeff rey", + "Ġmed ieval", + "Ġmedi eval", + "h ed", + "he d", + "G uide", + "Gui de", + "Guid e", + "Gu ide", + "Ġpsych o", + "Ġpsy cho", + "Ġg lam", + "Ġgl am", + "E lim", + "El im", + "äd chen", + "_ plain", + "_p lain", + "_pl ain", + "Ġ Sau", + "ĠS au", + "ĠSa u", + "- four", + "-f our", + "Ġanaly zing", + "QUE RY", + "QU ERY", + "Ġtom ato", + "_ buttons", + "_button s", + "_but tons", + "V EN", + "VE N", + ". setStatus", + ".set Status", + ". Url", + ".U rl", + "+ ĊĊ", + "+Ċ Ċ", + "Ġcompl aining", + "Ġcomplain ing", + "d egree", + "de gree", + "deg ree", + "conf irmed", + "confirm ed", + "Ġsu bt", + "Ġsub t", + "p arsed", + "par sed", + "parse d", + "pars ed", + "Ġt orque", + "Ġtor que", + "Ġtrouble d", + "Ġtroub led", + "Ġtrou bled", + "Ġ TARGET", + "ĠT ARGET", + "ĠTAR GET", + "Ġtrad emarks", + "Ġtrade marks", + "Ġtrademark s", + "Ġ Coordinate", + "ĠCo ordinate", + "ĠCoord inate", + "ĠV iv", + "ĠVi v", + "Ġ //}ĊĊ", + "Ġ// }ĊĊ", + "Ġ//}Ċ Ċ", + "Ġapr ès", + ". getPosition", + ".get Position", + ".getP osition", + "( KeyCode", + "(Key Code", + "ĠSil va", + "Ġ meteor", + "Ġm eteor", + "Ġmet eor", + "Ġendorse ment", + "Ġendors ement", + "Over view", + "Ġ Poss", + "ĠP oss", + "ĠPo ss", + "ĠPos s", + ". Inject", + ".In ject", + "Ġeven ly", + "Ġ visualization", + "Ġvisual ization", + "Ġ wchar", + "Ġw char", + "Ġwc har", + "ĠH DMI", + "ĠHD MI", + "Ġf unct", + "Ġfun ct", + "Ġfunc t", + "ick name", + "',' ','", + "','', '", + "Ġfor wards", + "Ġforward s", + "Managed Object", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĉ server", + "ĉs erver", + "ĠOut look", + "ĠChron icle", + "ĠChronic le", + "Ġdub bed", + "Ġd ok", + "Ġdo k", + "ĠW ear", + "ĠWe ar", + ". AL", + ".A L", + "p aren", + "par en", + "pare n", + "pa ren", + ". Interface", + ".Inter face", + "Inter faces", + "Interface s", + ". cod", + ".c od", + ".co d", + "Ġd ib", + "Ġdi b", + ".Global ization", + "ĠAc ademic", + "ĠAcad emic", + "ĠAcadem ic", + "Ġas sms", + "Ġass ms", + "A utom", + "Auto m", + "Aut om", + "Au tom", + "Ġ lw", + "Ġl w", + "Ġ NW", + "ĠN W", + "Ġ&& čĊ", + "Ġproble ma", + "Ġproblem a", + "Ġprobl ema", + "ĠManufact uring", + "l imits", + "li mits", + "lim its", + "limit s", + "- mobile", + "-m obile", + "Ġ filme", + "Ġfil me", + "Ġfilm e", + "/ map", + "/m ap", + "Ġd oit", + "Ġdo it", + "Ġdoi t", + "ĠI nk", + "ĠIn k", + "Ġs ued", + "Ġsu ed", + "Ġsue d", + ". arr", + ".a rr", + ".ar r", + "Ġunder min", + "Ġ Proc", + "ĠP roc", + "ĠPro c", + "ĠPr oc", + "croll View", + "_ _$", + "__ $", + "Ġside walk", + "Ġsidew alk", + "( that", + "(t hat", + "(th at", + "ภ·", + "[ q", + "gram mar", + "Ġt ë", + "q uito", + "qu ito", + "quit o", + "qui to", + "Ġsp iral", + "Ġspir al", + "Ġspi ral", + "ext ended", + "extend ed", + "Ġf ocal", + "Ġfoc al", + "Ġfo cal", + "Ġdig ging", + "p as", + "pa s", + "ĠT all", + "ĠTal l", + "ĠTa ll", + ". proxy", + ".pro xy", + ".pr oxy", + "i tures", + "it ures", + "iture s", + "itu res", + "itur es", + "T RACT", + "TR ACT", + "TRA CT", + "Ġ Realm", + "ĠRe alm", + "ĠReal m", + "Ġf eder", + "Ġfe der", + "Ġfed er", + "Ġ oriented", + "Ġorient ed", + "Ġori ented", + "Ġ Alternative", + "ĠAltern ative", + "ĠAlter native", + "Ġ owe", + "Ġo we", + "Ġow e", + "Ġs ourced", + "Ġsource d", + "Ġsour ced", + "in ker", + "ink er", + "inke r", + ". det", + ".d et", + ".de t", + "S ep", + "Se p", + "Ġ Qui", + "ĠQ ui", + "ĠQu i", + "ĠPal mer", + "ĠPalm er", + "( _,", + "(_ ,", + "s amples", + "sample s", + "sam ples", + "samp les", + "o yer", + "oy er", + "ul lan", + "ull an", + "ulla n", + "q uez", + "qu ez", + "que z", + "Ed ges", + "Edge s", + "Ġsh out", + "Ġsho ut", + "Ġ Achie", + "ĠA chie", + "ĠAch ie", + "Ġ haar", + "Ġh aar", + "Ġha ar", + "_ Construct", + "_Con struct", + "Ġprem ature", + "Ġre vert", + "Ġrev ert", + "Ġreve rt", + "Ġrever t", + "' ).Ċ", + "') .Ċ", + "'). Ċ", + "Ġs chn", + "Ġsc hn", + "Ġsch n", + "filter ed", + "fil tered", + "filt ered", + "null ptr", + "S aved", + "Save d", + "Sa ved", + "it ecture", + "itect ure", + "C LA", + "CL A", + "Ġ vl", + "Ġv l", + "s tell", + "st ell", + "ste ll", + "ĉ Me", + "ĉM e", + "ĠL ip", + "ĠLi p", + "n ational", + "nat ional", + "nation al", + "Ġwh olly", + "Ġspr ings", + "Ġspring s", + ". Timer", + ".T imer", + ".Time r", + "ĉ src", + "ĉs rc", + "e lsen", + "el sen", + "else n", + "els en", + "åħ ¶", + "Ġcommunic ating", + "Ġ Quiz", + "ĠQu iz", + "ĠQui z", + "Ġt eng", + "Ġte ng", + "Ġten g", + "Ġg ez", + "Ġge z", + "Ġ Outside", + "ĠOut side", + "ĠOuts ide", + ". Sign", + ".S ign", + "( cs", + "(c s", + "Ġdisp utes", + "Ġdispute s", + "Ġdisput es", + "ĠWe iss", + "ĠWei ss", + "an nes", + "ann es", + "anne s", + "> No", + ">N o", + "ĠB ach", + "ĠBa ch", + "ĠBac h", + ".remove All", + "re fer", + "ref er", + "/ dashboard", + "/d ashboard", + "Ġ Ajax", + "ĠA jax", + "ĠAj ax", + "Index Changed", + "Ġ Weak", + "ĠWe ak", + "' \"Ċ", + "'\" Ċ", + "Ġs ights", + "Ġsight s", + "Ġsigh ts", + "access Token", + "ĠJ oi", + "ĠJo i", + "( domain", + "(d omain", + "(dom ain", + "(do main", + "ĉ cv", + "ĉc v", + "Ġcontin uation", + "Ġcontinu ation", + "Ġcontinua tion", + "Ġp lum", + "Ġpl um", + "Ġplu m", + "a dir", + "ad ir", + "adi r", + ". setMessage", + ".set Message", + "Ġ ï¼Į", + "Ġï¼ Į", + "Ġsw allow", + "Ġswal low", + "ĠL amp", + "ĠLa mp", + "ĠLam p", + "Ġ qw", + "Ġq w", + "Ġ uu", + "Ġu u", + "C oin", + "Co in", + "u bic", + "ub ic", + "ubi c", + "ĠDe als", + "ĠDeal s", + "r ace", + "ra ce", + "rac e", + "Ġdict ator", + "Ġm eme", + "Ġme me", + "Ġmem e", + "turn ed", + "tur ned", + "ĠJul ie", + "ĠJu lie", + "ĠJuli e", + ".grid Column", + "Ġp uppy", + "Ġpup py", + "Ġpu ppy", + "Ġp am", + "Ġpa m", + "Ġ ){čĊ", + "Ġ) {čĊ", + "Ġ){ čĊ", + "Ġinv iting", + "Ġinvit ing", + "Ġf rench", + "Ġfr ench", + "Ġfren ch", + "v im", + "vi m", + "Ġwr apping", + "Ġwrap ping", + "Ġ#- }Ċ", + "( [-", + "([ -", + "Ear ly", + "Ġsh iny", + "Ġshin y", + ". faces", + ".f aces", + ".face s", + ".fac es", + ".fa ces", + "Ġre bell", + "Ġreb ell", + "Ġrebel l", + "abc def", + "abcd ef", + "ä lt", + "äl t", + "Ġest imation", + "Ġestim ation", + "ph ys", + "phy s", + "los ures", + "losure s", + "_ REL", + "_RE L", + "_R EL", + "Ġex clusion", + "Ġexclus ion", + "Ġexcl usion", + "ĠSk ype", + "ĠSky pe", + "we ise", + "wei se", + "weis e", + "- stop", + "-s top", + "-st op", + "no thing", + "ĠE gg", + "ĠEg g", + "is ors", + "iso rs", + "isor s", + "Rich ard", + "Ġcounsel ing", + "Ġcom mem", + "Ġcomm em", + "Ġcomme m", + "ĠQ MessageBox", + "ĠSy nd", + "ĠSyn d", + "ĠF rost", + "ĠFr ost", + "ĠFro st", + "ĠCom petition", + "ĠCompet ition", + "ĠA wake", + "ĠAw ake", + "Ġ ted", + "Ġt ed", + "Ġte d", + "ic iones", + "ici ones", + "icio nes", + "icion es", + "ĠDev Components", + "VERTISE MENT", + "o tti", + "ot ti", + "ott i", + ". runner", + ".r unner", + ".run ner", + "Ġunique ly", + "Ġuniqu ely", + "Ġuniq uely", + ". flag", + ".f lag", + ".fl ag", + "ĉ rs", + "ĉr s", + "_ generic", + "_g eneric", + "_gen eric", + "_gene ric", + "_gener ic", + "Ġ` ``Ċ", + "Ġ`` `Ċ", + "Ġ``` Ċ", + "ACH INE", + "ACHI NE", + "Ġm ein", + "Ġme in", + "( Application", + "(App lication", + "( br", + "(b r", + "Ġrat ios", + "Ġratio s", + ": ,", + "ĠX CTest", + "ĠXCT est", + "ĠXC Test", + "ustain able", + "- www", + "-w ww", + "it les", + "itle s", + "_ TEMP", + "_T EMP", + "_TE MP", + "_TEM P", + "Ġs yst", + "Ġsys t", + "Ġsy st", + "umeric UpDown", + "ĉ assertTrue", + "ĉassert True", + "Ġ wf", + "Ġw f", + ". peek", + ".pe ek", + "ĠB ulg", + "ĠBul g", + "ĠBu lg", + "Ġterr ifying", + ". MODE", + ".M ODE", + ".MOD E", + "Ġ GW", + "ĠG W", + "á r", + "Ġ fic", + "Ġf ic", + "Ġfi c", + "Ġcommit ments", + "Ġcommitment s", + "- tech", + "-t ech", + "-te ch", + "Ġ Liquid", + "ĠL iquid", + "ĠLiqu id", + "o pez", + "op ez", + "ope z", + "z heimer", + "a ña", + "añ a", + "- media", + "-m edia", + "-me dia", + "-med ia", + "( animated", + "(an imated", + "_ goal", + "_go al", + "Ġg um", + "Ġgu m", + "y stone", + "yst one", + "ys tone", + ". SET", + ".S ET", + ".SE T", + "ĠW end", + "ĠWe nd", + "ĠWen d", + "set CellValue", + "Ġ msgs", + "Ġmsg s", + "Ġms gs", + "c ash", + "ca sh", + "cas h", + "AL LOC", + "ALL OC", + "/ aws", + "/a ws", + "Ġmicro wave", + "Ġmic rowave", + ". Pointer", + ".Point er", + "ĉ Console", + "ĉCon sole", + "_ sorted", + "_s orted", + "_sort ed", + "ĠF ilip", + "ĠFil ip", + "ĠFi lip", + "P rod", + "Pro d", + "Pr od", + "Ġ// !<", + "Ġ//! <", + "in group", + "ing roup", + "Ġ ks", + "Ġk s", + "_T RI", + "_TR I", + "Ġteas poon", + "Ġ ATT", + "ĠA TT", + "ĠAT T", + "Ġre covering", + "Ġrecover ing", + "Ġ GLOBAL", + "ĠG LOBAL", + ". Par", + ".P ar", + "Ġ/ >;Ċ", + "Ġ/> ;Ċ", + "Ġmar ble", + "ul ators", + "ula tors", + "ulator s", + "Ġ Cycle", + "ĠC ycle", + "ĠCy cle", + "ĠCycl e", + "ĠCyc le", + "Ġher bs", + "Ġherb s", + "_ metric", + "_m etric", + "_met ric", + ") !", + "_C LOCK", + "_CL OCK", + "_ Button", + "_B utton", + "H arry", + "Har ry", + "è¿ Ľ", + "Ġstr ains", + "Ġstrain s", + "Ġstra ins", + "Ġ AppBar", + "ĠApp Bar", + "Ġ Chan", + "ĠC han", + "ĠCh an", + "ĠCha n", + "/ video", + "/v ideo", + "Ġ bam", + "Ġb am", + "Ġba m", + ". Progress", + ".Pro gress", + "$ f", + "l emen", + "le men", + "lem en", + "leme n", + "Ġir regular", + "ĠD uncan", + "ĠDun can", + "ĠM int", + "ĠMin t", + "ĠMi nt", + "- video", + "-v ideo", + "ঠ¾", + "ó wn", + "ów n", + "Ġ EMPTY", + "ĠEM PTY", + "ĠEMP TY", + "Ġst acked", + "Ġstack ed", + "Ġ HA", + "ĠH A", + "_ cut", + "_c ut", + "_cu t", + "Ġwhere in", + "ĠW ays", + "ĠWay s", + "ĠWa ys", + "( counter", + "(c ounter", + "(count er", + "(co unter", + "è¯ ķ", + "Form Group", + "Ġb lew", + "Ġbl ew", + "Ġble w", + "c ourses", + "co urses", + "course s", + "cour ses", + "Ġ productos", + "Ġproduct os", + "Ġproducto s", + "r ys", + "ry s", + "Ġ Restr", + "ĠR estr", + "ĠRe str", + "ĠRes tr", + "ĠRest r", + "Ġst yling", + "Ġsty ling", + "Ġstyl ing", + "> s", + "Ġp iv", + "Ġpi v", + "Ġit ertools", + "Ġiter tools", + "get Repository", + "Ġ Ik", + "ĠI k", + "_ devices", + "_device s", + "_dev ices", + "lay ui", + "Ġhalf way", + "Ġfran ç", + "Ġt uning", + "Ġtu ning", + "Ġtun ing", + "O A", + "_ Node", + "_N ode", + "_No de", + "ar de", + "ard e", + "Ġf ierce", + "Ġfi erce", + "Ġfier ce", + "Ġfierc e", + "l icted", + "lic ted", + "lict ed", + "# čĊ", + "Ġbreak through", + "ĠE rik", + "ĠEr ik", + "Ġb ride", + "Ġbr ide", + "Ġbri de", + "Ġbrid e", + "Ġ .\"", + "Ġ. \"", + "c ulus", + "cul us", + "cu lus", + "in side", + "ins ide", + "insi de", + "ĠIndian apolis", + "Ġ EE", + "ĠE E", + "Ġy og", + "Ġyo g", + "ur ret", + "urre t", + "urr et", + ". fs", + ".f s", + ". grad", + ".g rad", + ".gr ad", + "_ cards", + "_c ards", + "_card s", + "_car ds", + "_ accuracy", + "_ac curacy", + "_acc uracy", + "_e pi", + "_ep i", + "qu eda", + "que da", + "/ org", + "/or g", + "/o rg", + "é ªĮ", + "éª Į", + "Ġcom pte", + "Ġcomp te", + "Ġcompt e", + ") )[", + ")) [", + "Out side", + "G reater", + "Great er", + "Gre ater", + "Ġ Renderer", + "ĠRender er", + ". actor", + ".a ctor", + ".ac tor", + ".act or", + "Account s", + "Ac counts", + "I dle", + "Id le", + "_ hours", + "_h ours", + "_hour s", + "er ner", + "ern er", + "erne r", + "J oined", + "Join ed", + "Jo ined", + "Ġme nj", + "Ġmen j", + "re quires", + "require s", + "requ ires", + "Ġ OPER", + "ĠO PER", + "ĠOP ER", + ".remove Child", + "ĉ sp", + "ĉs p", + "Ġ esse", + "Ġe sse", + "Ġes se", + "Ġess e", + "r ift", + "ri ft", + "rif t", + "x FE", + "xF E", + "ĠSh akespeare", + "____ ________", + "________ ____", + "Ġbudget s", + "Ġbud gets", + "Model State", + "fill able", + "- component", + "-com ponent", + "-comp onent", + "o cos", + "oc os", + "oco s", + "Ġ BUTTON", + "ĠB UTTON", + "ĠBUT TON", + "/ io", + "/i o", + ", out", + ",o ut", + "s ms", + "sm s", + "Th omas", + "Tho mas", + "ĠAr med", + "ĠArm ed", + "re sume", + "res ume", + "Ġrot ating", + "Ġ Vault", + "ĠV ault", + "ĠVa ult", + "Ġs eus", + "Ġse us", + "Ġseu s", + ". (*", + ".( *", + "Ġa mino", + "Ġam ino", + "Ġami no", + "Ġ[ ]);ĊĊ", + "Ġ[] );ĊĊ", + "Ġ[]) ;ĊĊ", + "Ġ[]);Ċ Ċ", + "Ġprov oc", + "n ox", + "no x", + ". GetEnumerator", + ".Get Enumerator", + "= ======Ċ", + "== =====Ċ", + "==== ===Ċ", + "=== ====Ċ", + "====== =Ċ", + "===== ==Ċ", + "======= Ċ", + "æĸ Ļ", + "_ scroll", + "_s croll", + "_sc roll", + "_scr oll", + "Ġfil med", + "Ġfilm ed", + "Ġfilme d", + "ĠS oci", + "ĠSo ci", + "ĠSoc i", + "g ap", + "ga p", + "g ro", + "gr o", + "V ote", + "Vo te", + "\" But", + "\"B ut", + "_ RC", + "_R C", + "An imal", + "Anim al", + " Ģ", + "ib ile", + "ibil e", + "ibi le", + "Ġaw aken", + "Ġawake n", + "o rest", + "or est", + "ore st", + "ores t", + "in ja", + "ĠI van", + "ĠIv an", + "( Command", + "Ġ *****", + "Ġ* ****", + "Ġ** ***", + "Ġ*** **", + "Ġ**** *", + "Î ·", + "Ġkv inder", + "Ġkvin der", + "Ġkvinde r", + "/ helpers", + "/h elpers", + "/help ers", + "/helper s", + "_ cases", + "_c ases", + "_case s", + "_ca ses", + "t g", + "ìĦ ¸", + "Register ed", + "ĉ pass", + "ĉp ass", + "_ digits", + "_d igits", + "_digit s", + "Ġcon tour", + "Ġcont our", + "Ġinf ants", + "Ġinfant s", + "Ġjust ification", + "Ġ Fortunately", + "ĠFort unately", + "Cont r", + "Con tr", + "ĠonCreate View", + "_ SAMPLE", + "_S AMPLE", + "_SAMPL E", + "Ġallow Null", + "Ġn ud", + "Ġnu d", + "Ġf etched", + "Ġfetch ed", + "Ġfet ched", + "_ equ", + "_e qu", + "_eq u", + "Ġ Unable", + "ĠU nable", + "ĠUn able", + "ĠUna ble", + "= \\\"\"", + "=\\\" \"", + "=\\ \"\"", + "> {Ċ", + ">{ Ċ", + "Ġcommit tees", + "Ġcommittee s", + "ist ema", + "iste ma", + "istem a", + "+ \".", + "+\" .", + "ÃŃ an", + "ÃŃa n", + "m ant", + "man t", + "ma nt", + "Ġsou theast", + "Ġsouth east", + "ï¼Į Ċ", + "dialog s", + "dia logs", + "PRO JECT", + "ch arger", + "char ger", + "charge r", + "charg er", + "- port", + "-p ort", + "-po rt", + "( uuid", + "(u uid", + ". export", + ".ex port", + ".exp ort", + "S ix", + "Si x", + "Ġ RP", + "ĠR P", + "P rem", + "Pr em", + "Pre m", + "Ġcon science", + "Ġconsc ience", + "Ġmargin Right", + "_ distribution", + "_d istribution", + "_dis tribution", + "y aml", + "ya ml", + "res izing", + "resi zing", + "D ock", + "Do ck", + "Doc k", + "Ġ Locations", + "ĠL ocations", + "ĠLocation s", + "ĠLoc ations", + "G Y", + "S eed", + "Se ed", + "See d", + "B UFFER", + "BUF FER", + "BUFF ER", + "os sip", + "oss ip", + "u llen", + "ul len", + "ull en", + "ulle n", + "Th ings", + "Thing s", + "Thin gs", + "- self", + "-s elf", + "-se lf", + ". poll", + ".p oll", + ".po ll", + ".pol l", + "PL AYER", + "PLAY ER", + "Ġ å®", + "Ġå ®", + "G ROUP", + "Ġ Away", + "ĠA way", + "ĠAw ay", + "Ġg ospel", + "x fd", + "xf d", + "M ary", + "Mar y", + "Ma ry", + "Ġ Portable", + "ĠPort able", + "ĠPor table", + "T URE", + "TU RE", + "Ġutil is", + "Ġut ilis", + "Ġse it", + "Ġsei t", + "Ġ strand", + "Ġs trand", + "Ġst rand", + "Ġstr and", + "Ġstran d", + "Ġstra nd", + "Ġtrans c", + "Ġtran sc", + "Ġ (^", + "Ġ( ^", + "ĠAl fred", + "ĠAlf red", + ". mem", + ".m em", + ".me m", + ". circle", + ".c ircle", + "Ġ ~/", + "Ġ~ /", + "for cing", + "forc ing", + "Ġ riot", + "Ġr iot", + "Ġri ot", + "Ġrio t", + "p rox", + "pr ox", + "pro x", + "TH ON", + "iz ación", + "iza ción", + "Ġ NI", + "ĠN I", + "r ost", + "ro st", + "ros t", + "Ġdis pro", + "Ġdisp ro", + "_ instances", + "_in stances", + "_instance s", + "_inst ances", + "ï¼Į âĢľ", + "ograph er", + "ogra pher", + "en das", + "end as", + "enda s", + "ĠIs aac", + "ĠIsa ac", + "ĠP ine", + "ĠPin e", + "ĠPi ne", + "/ dis", + "/d is", + "Ġcolor With", + "it erate", + "ite rate", + "iter ate", + "_ stride", + "_st ride", + "_str ide", + "Ġp unto", + "Ġpun to", + "Ġpunt o", + ". EventArgs", + ".Event Args", + "( center", + "(c enter", + "Ġneighb oring", + "Ġneighbor ing", + "ĠPr ison", + "ĠPri son", + "Ġ Messenger", + "ĠM essenger", + "ĠMess enger", + "Ġepid emic", + "Ġepidemi c", + "d ao", + "da o", + "_ complex", + "_com plex", + "_comp lex", + "Ġg ravel", + "Ġgr avel", + "Ġgrave l", + "Ġgra vel", + "Ġgrav el", + "_D IP", + "_DI P", + "é ment", + "ém ent", + "ĠA ri", + "ĠAr i", + "_ bitmap", + "_b itmap", + "_bit map", + ". quit", + ".q uit", + ".qu it", + "( valid", + "(val id", + "(va lid", + "Ġ pend", + "Ġp end", + "Ġpe nd", + "Ġpen d", + "Ġrespir atory", + "Ġre bound", + "Ġreb ound", + "Default Value", + "ãĥ Ń", + "Ġcom mits", + "Ġcomm its", + "Ġcommit s", + ". tests", + ".t ests", + ".test s", + ".te sts", + "_ fr", + "_f r", + "i tet", + "it et", + "ite t", + ". sf", + ".s f", + "Ġspace craft", + "c ritical", + "cri tical", + "cr itical", + "crit ical", + "Ġde pressed", + "Ġdep ressed", + "Ġdepr essed", + "Ġdepress ed", + "ĠAny Object", + "Ġu nb", + "Ġun b", + "Ġdis cern", + "Ġdisc ern", + "( mysql", + "(m ysql", + "(my sql", + "L atin", + "La tin", + "Lat in", + "ĠB og", + "ĠBo g", + "ĠWild life", + "To File", + "ToF ile", + "i oxid", + "iox id", + "@ RestController", + "Ġ\" $(", + "Ġ\"$ (", + "Ġ <<\"", + "Ġ< <\"", + "Ġ<< \"", + "Ġdef ects", + "Ġdefe cts", + "Ġdefect s", + "Ġ datum", + "Ġd atum", + "Ġdat um", + "h in", + "hi n", + "Ġreal izar", + "Ġrealiz ar", + "Ġrealiza r", + "any ahu", + "anya hu", + "Ġ Sig", + "ĠS ig", + "ĠSi g", + "@ Data", + "ad aptive", + "ada ptive", + "adapt ive", + "ĠC atherine", + ". cr", + ".c r", + "Ġ COOKIE", + "ĠCO OKIE", + "Ġ pictured", + "Ġp ictured", + "Ġpicture d", + "Ġpict ured", + "ĠF ighter", + "ĠFight er", + "Query able", + "Ġ Anyway", + "ĠAny way", + "ĠGL FW", + "_ namespace", + "_n amespace", + "_name space", + "_names pace", + "_ ft", + "_f t", + "Ġ ])", + "Ġ] )", + "O rganization", + "Organ ization", + "Ġconstit utes", + "Ġconstitu tes", + "Ġconstitute s", + "Ġqu and", + "Ġqua nd", + "Ġquan d", + "( chunk", + "(ch unk", + "\" />čĊ", + "\"/ >čĊ", + "\"/> čĊ", + "ĠL akes", + "ĠLa kes", + "ĠLake s", + "ĠLak es", + "main window", + "Car thy", + "Cart hy", + "s pin", + "sp in", + "spi n", + "( csv", + "(c sv", + "(cs v", + ": red", + ":r ed", + "- commerce", + "-com merce", + "-comm erce", + "ภ¹", + "Ġdis covering", + "Ġdiscover ing", + "Ġ eco", + "Ġe co", + "Ġec o", + "_ fac", + "_f ac", + "_fa c", + "ince ton", + "inc eton", + "ĠGreen s", + "ĠGre ens", + "ĠGree ns", + "j wt", + "Ø µ", + "ĠBron cos", + "Ġ Goods", + "ĠG oods", + "ĠGo ods", + "ĠGood s", + "( GTK", + "(G TK", + "Ġ returnValue", + "Ġreturn Value", + "Ġsi empre", + "Ġne utr", + "Ġneu tr", + "Ġneut r", + "w ent", + "we nt", + "wen t", + "ĠN atal", + "ĠNa tal", + "ĠNat al", + "Ġenthusi astic", + "Ġenthusiast ic", + "á» į", + "F N", + "/ database", + "/d atabase", + "/data base", + "/dat abase", + "C atalog", + "Cat alog", + "Ġb run", + "Ġbr un", + "Ġbru n", + "ĠK ash", + "ĠKa sh", + "ĠKas h", + "_ Pl", + "_P l", + "isc rim", + ", width", + ",w idth", + "Ġin mates", + "Ġinmate s", + "Ass ignment", + "Assign ment", + "ĠH aven", + "ĠHave n", + "ĠHa ven", + "ĠHav en", + "Ġplay ground", + "ex am", + "@ Controller", + "ul iar", + "uli ar", + "ulia r", + ". getParent", + ".get Parent", + ".getP arent", + "Ġ \";ĊĊ", + "Ġ\" ;ĊĊ", + "Ġ\";Ċ Ċ", + "Ġ\"; ĊĊ", + ": size", + ":s ize", + "iss ors", + "issor s", + "Ġf is", + "Ġfi s", + "Ġ alc", + "Ġa lc", + "Ġal c", + "ens ation", + "ensa tion", + "ĠN ixon", + "ĠNi xon", + "Ġ mighty", + "Ġmight y", + "- str", + "-s tr", + "-st r", + "_ special", + "_s pecial", + "_sp ecial", + "_spec ial", + "_ ADC", + "_A DC", + "_AD C", + "Ġ Twig", + "ĠT wig", + "ĠTw ig", + "um bling", + "umb ling", + "- address", + "-add ress", + "-ad dress", + "Ġher oin", + "Ġhero in", + "Y TE", + "YT E", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "F riend", + "Fri end", + "Ġ ave", + "Ġa ve", + "Ġav e", + "Ġ PNG", + "ĠP NG", + "ĠPN G", + "ĠKur dish", + "ĠKurd ish", + "DataSet Changed", + "Ġbl ades", + "Ġblade s", + "Ġbla des", + "b ral", + "br al", + "bra l", + "S team", + "St eam", + "Ste am", + "Ġs igu", + "Ġsi gu", + "Ġsig u", + "IRT UAL", + "a cos", + "ac os", + "aco s", + "U DP", + "UD P", + "( database", + "(d atabase", + "(data base", + "(dat abase", + "h ec", + "he c", + "Ġ Strings", + "ĠString s", + "ĠStr ings", + "_ scalar", + "_s calar", + "_sc alar", + "_scal ar", + "ĉ desc", + "ĉd esc", + "ĉdes c", + "ĉde sc", + "Ġ TLS", + "ĠT LS", + "ĠTL S", + "; \"Ċ", + ";\" Ċ", + "ĠCor byn", + "Simple Name", + "u ell", + "ue ll", + "uel l", + "Ġ Entre", + "ĠEn tre", + "ĠEnt re", + "ĠEntr e", + "ell ites", + "ellite s", + "elli tes", + "- place", + "-p lace", + "-pl ace", + "Ġfrank ly", + "ĠE rf", + "ĠEr f", + "C EL", + "CE L", + "Ġpa ÃŃs", + "Ġh edge", + "Ġhe dge", + "Ġhed ge", + "Ġ latent", + "Ġla tent", + "Ġlate nt", + "Ġlat ent", + "Ġlaten t", + "Ġ IRQ", + "ĠIR Q", + "ĠH erald", + "ĠHer ald", + "ĠHera ld", + "Ġ Prec", + "ĠP rec", + "ĠPr ec", + "ĠPre c", + "ë³ ´", + ". TEXT", + ".T EXT", + "S alary", + "Sal ary", + "Ġaut umn", + "Ġtr avail", + "Ġtra vail", + "Ġtrav ail", + "Ġtrava il", + ". Sum", + ".S um", + "Ġc ared", + "Ġcar ed", + "Ġca red", + "Ġcare d", + "M or", + "Mo r", + "Ġint uitive", + "Ġintuit ive", + "Ġj ournals", + "Ġjournal s", + "_ IT", + "_I T", + "Ġ Trou", + "ĠT rou", + "ĠTr ou", + "ĠTro u", + "ä¼ ł", + "Has ColumnName", + "Com posite", + "Comp osite", + "Ġsp ice", + "Ġspi ce", + "_ disk", + "_d isk", + "_dis k", + "_di sk", + "_CODE S", + "_CO DES", + "_COD ES", + "Ġ Introduced", + "ĠInt roduced", + "ĠIntro duced", + "i ona", + "ion a", + "io na", + "Ġn uestra", + "Ġnue stra", + "Ġnuest ra", + "Ġnues tra", + "o ct", + "oc t", + "ĠĠĠĠ ĊĠĠĠĠĊĠĠĠĠĊ", + "ĠĠĠĠĊ ĠĠĠĠĊĠĠĠĠĊ", + "ĠĠĠĠĊĠĠĠĠĊ ĠĠĠĠĊ", + "( parameter", + "(param eter", + "(para meter", + "Ġst udios", + "Ġstud ios", + "Ġstudio s", + "Ġstudi os", + "Ġ projectId", + "Ġproject Id", + "Ġbd sm", + ".Sql Client", + "im izer", + "imize r", + "imi zer", + "imiz er", + "Ġ CARD", + "ĠC ARD", + "ĠCA RD", + "ĠCAR D", + "+ t", + "a an", + "aa n", + ". sol", + ".s ol", + ".so l", + "_ Adjust", + "_Ad just", + "Ġright eous", + "Ġ Logging", + "ĠLog ging", + ". filters", + ".f ilters", + ".filter s", + ".fil ters", + "_ TAB", + "_T AB", + "_TA B", + "ĉ sys", + "ĉs ys", + "rop hic", + "roph ic", + "o therapy", + "other apy", + "Ġ Browse", + "ĠB rowse", + "ĠBrow se", + "key board", + "R ON", + "RO N", + "+ \\", + "r opped", + "ro pped", + "rop ped", + "ropp ed", + "Ġext ensively", + "Ġextensive ly", + "f k", + "Ġ lime", + "Ġl ime", + "Ġli me", + "Ġlim e", + "y ears", + "year s", + "ye ars", + "E xc", + "Ex c", + "Ġs ph", + "Ġsp h", + "Ġch eating", + "Ġche ating", + "Ġcheat ing", + "an dro", + "and ro", + "andr o", + "ÃŃ o", + "Ġpr ince", + "Ġpri nce", + "Ġprin ce", + "Ġprinc e", + "o ire", + "oi re", + "oir e", + "Ġ Destination", + "ĠD estination", + "ĠDest ination", + "ĠCon verts", + "ĠConvert s", + "ĠConv erts", + "Ġup stream", + "o led", + "ol ed", + "ole d", + "Ġserv ants", + "Ġservant s", + "Ġ semantic", + "Ġsem antic", + "Ġcr unch", + "Ġeven tual", + "Ġevent ual", + "r unner", + "run ner", + "/ error", + "/e rror", + "S pin", + "Sp in", + "Spi n", + "Ġsecret ly", + "Ġ assemble", + "Ġas semble", + "Ġass emble", + ". Person", + ".P erson", + ".Per son", + "end error", + "ender ror", + "ende rror", + "_ <", + "Ġp endant", + "Ġpend ant", + "S leep", + "ĠChem istry", + "Ġboss es", + "Ġbos ses", + "l k", + ") )),Ċ", + ")) ),Ċ", + "))) ,Ċ", + "))), Ċ", + "Block ly", + "DE VICE", + "DEV ICE", + "Ġreflect ing", + "Ġ ample", + "Ġam ple", + "Ġampl e", + "Ġamp le", + "M illiseconds", + "Mill iseconds", + "ĠPres idential", + "ĠPresident ial", + "Ġ usuarios", + "Ġus uarios", + "Ġusuario s", + "Ġusu arios", + "Ġ NZ", + "ĠN Z", + "Ġ Salary", + "ĠS alary", + "ĠSal ary", + "ĠSala ry", + "ĠA manda", + "ĠAm anda", + "ĠAma nda", + "_ np", + "_n p", + "j ury", + "ju ry", + "jur y", + "Ġk ön", + "Ġkö n", + "Ġther apist", + "Ġtherap ist", + "Ġhom osexual", + "Ġhomosex ual", + "Ġhomo sexual", + "ĠDr ake", + "ĠDra ke", + "- window", + "-w indow", + "Ġ Located", + "ĠLoc ated", + "ĠLocate d", + ". Driver", + ".D river", + "Ġ VIDEO", + "ĠV IDEO", + "ĠVID EO", + "Ġmer chants", + "Ġmerch ants", + "Ġmerchant s", + "ĠC hest", + "ĠCh est", + "ĠChe st", + "ĠChes t", + "- lock", + "-l ock", + "-lo ck", + "/ php", + "/p hp", + "/ph p", + "Ġmil ano", + "Ġmilan o", + "_ STYLE", + "_ST YLE", + "ar ger", + "arg er", + "arge r", + "i dea", + "id ea", + "ide a", + "G UID", + "GUI D", + "GU ID", + "ad vanced", + "adv anced", + "advance d", + "me al", + "Options ItemSelected", + "= '%", + "=' %", + "ĠC ham", + "ĠCh am", + "ĠCha m", + ": data", + ":d ata", + "( stat", + "(s tat", + "(st at", + "Will Appear", + "Ġinf ormal", + "Ġinform al", + "a ji", + "aj i", + "Ġre productive", + "Ġrepro ductive", + "Ġ CAS", + "ĠC AS", + "ĠCA S", + "ãģ £", + "F UNC", + "FUN C", + "FU NC", + "ĠR uth", + "ĠRu th", + "ĠRut h", + ") +(", + ")+ (", + "CON ST", + "CO NST", + "CONS T", + "Ġ Fans", + "ĠF ans", + "ĠFa ns", + "ĠFan s", + "Ġ groupId", + "Ġgroup Id", + "x ffffffff", + "xf fffffff", + "xff ffffff", + "xffff ffff", + "xffffff ff", + "Ġs ampler", + "Ġsample r", + "Ġsam pler", + "Ġsamp ler", + "Ġ}} \">", + "Ġ}}\" >", + ". the", + ".t he", + ".th e", + "Ġh ollow", + "Ġhol low", + "W AY", + "WA Y", + "Ġ Faculty", + "ĠFac ulty", + "Attrib utedString", + "Ġ Looks", + "ĠL ooks", + "ĠLo oks", + "ĠLook s", + "ĠR ex", + "ĠRe x", + "j k", + "ĠM IL", + "ĠMI L", + "Ġ bard", + "Ġb ard", + "Ġbar d", + "Ġba rd", + ". Long", + ".L ong", + ".Lo ng", + "Ġli vest", + "Ġlive st", + "Ġlives t", + "Ġliv est", + "Ġs kal", + "Ġsk al", + "Ġska l", + "ic ism", + "ici sm", + "M AIN", + "MA IN", + "Ġmuch o", + "Ġmu cho", + "Ġmuc ho", + "B ODY", + "BO DY", + "Ġ ese", + "Ġe se", + "Ġes e", + "ĉ use", + "ĉu se", + "ĉus e", + "F oot", + "Foo t", + "Fo ot", + ". SQLException", + ".SQL Exception", + "Ġin heritance", + "Ġinherit ance", + "re ceived", + "receive d", + "rece ived", + "Ġp utas", + "Ġput as", + "Ġpu tas", + "Ġputa s", + "e dis", + "ed is", + "edi s", + "a lsa", + "al sa", + "als a", + "Ġ ErrorMessage", + "ĠError Message", + "Bo oking", + "Book ing", + "Ġ tract", + "Ġt ract", + "Ġtr act", + "Ġtra ct", + "a cz", + "ac z", + "ĠC ant", + "ĠCan t", + "ĠCa nt", + "_ regex", + "_reg ex", + "Ġide ological", + "Ġj ihad", + "Ġji had", + "Ġjih ad", + "h os", + "ho s", + "/ sys", + "/s ys", + "co lm", + "col m", + "( pool", + "(p ool", + "(po ol", + "Ġest án", + "Ġestá n", + "Ġ Pending", + "ĠP ending", + "ĠPen ding", + "ĠPend ing", + "em ás", + "Ġktó ry", + ") );ĊĊĊ", + ")) ;ĊĊĊ", + "));Ċ ĊĊ", + "));ĊĊ Ċ", + ")); ĊĊĊ", + "trans actions", + "transaction s", + "Ġw ield", + "Ġwie ld", + "Ġwi eld", + "Ġwiel d", + "i tere", + "it ere", + "ite re", + "iter e", + "er ture", + "ert ure", + "_ ss", + "_s s", + "Ġstretch ing", + "Ġstret ching", + "Ġpr isoner", + "Ġprison er", + "Ġpris oner", + ".Read All", + "Ġb esch", + "Ġbe sch", + "Ġbes ch", + "-- ;čĊ", + "--; čĊ", + "Ġcr isp", + "Ġcri sp", + "Ġcris p", + "_ SCAN", + "_S CAN", + "_SC AN", + "Ġ ae", + "Ġa e", + "Str ict", + "ĠMin neapolis", + "ĠBo eing", + "a ris", + "ar is", + "ari s", + "r ek", + "re k", + "_ pipe", + "_p ipe", + "_pi pe", + "Ġpri ests", + "Ġpriest s", + "( EIF", + "(E IF", + "eh icles", + "ehicle s", + "Ġ Interactive", + "ĠInter active", + "b etween", + "bet ween", + "ĉNull Check", + "ĠBl air", + "Ġ Lt", + "ĠL t", + "_ inline", + "_in line", + "eth yl", + " ¼", + "_ packages", + "_p ackages", + "_package s", + "_pack ages", + "Ġbar rels", + "Ġbarrel s", + "Ġbarr els", + "_ he", + "_h e", + "Ġ regexp", + "Ġreg exp", + "Ġregex p", + "_ pts", + "_p ts", + "_pt s", + "_ Handler", + "_H andler", + "_Handle r", + "ing ular", + "ingu lar", + "ĠN issan", + "ĠR anch", + "ĠRan ch", + "Ġper ch", + "Ġpe rch", + "Ġperc h", + "Un supported", + "S mith", + "Sm ith", + "ĠLeg ends", + "ĠLegend s", + "M i", + "Ġ gf", + "Ġg f", + "st eder", + "ste der", + "sted er", + "Ġac quiring", + "Ġacqu iring", + "Ġs imulator", + "Ġsim ulator", + "Ġsimul ator", + "( ),\"", + "() ,\"", + "(), \"", + "re ceive", + "rece ive", + "Ġin place", + "Ġinp lace", + "A CTION", + "AC TION", + "ACT ION", + "Ġ WebDriver", + "ĠWeb Driver", + "file system", + "files ystem", + "< Order", + "l open", + "lo pen", + "lop en", + "lope n", + "Ġ HEIGHT", + "ĠHE IGHT", + ".set Border", + "į °", + "__ [\"", + "__[ \"", + "Ġ clamp", + "Ġc lamp", + "Ġcl amp", + "Ġclam p", + "Ġcla mp", + "Seg oe", + "b ands", + "ba nds", + "ban ds", + "band s", + "to List", + "am ba", + "amb a", + "> '+Ċ", + ">' +Ċ", + ">'+ Ċ", + "Ġ credible", + "Ġcred ible", + "a mat", + "am at", + "ama t", + "pl aying", + "play ing", + "pla ying", + ".setImage Resource", + "q uel", + "qu el", + "que l", + "Ġpo dr", + "Ġpod r", + "ge om", + "geo m", + "E k", + "ĠQ atar", + "Ġg eld", + "Ġge ld", + "Ġgel d", + "? ',Ċ", + "?' ,Ċ", + "?', Ċ", + "Ġc yl", + "Ġcy l", + "( ax", + "(a x", + "Ġ WI", + "ĠW I", + "ur ally", + "ural ly", + "ĠBr asil", + "ĠBra sil", + "ĠBras il", + "Ġs enza", + "Ġsen za", + "a ley", + "al ey", + "ale y", + "o nen", + "on en", + "one n", + "Ġ bah", + "Ġb ah", + "Ġba h", + "Ġm olecule", + "Ġmolec ule", + "R ad", + "Ra d", + "è¿ °", + "AN CH", + "ANC H", + "- background", + "-back ground", + "- agent", + "-a gent", + "-ag ent", + "-age nt", + "Ġprol ifer", + ": boolean", + "Ġt ide", + "Ġti de", + "Ġtid e", + "erial izer", + "erialize r", + "_ ;čĊ", + "_; čĊ", + "F ee", + "Fe e", + "* *)", + "** )", + "er gy", + "erg y", + "ĠH onor", + "ĠHon or", + "ĠHo nor", + ". Logging", + ".Log ging", + "i ris", + "ir is", + "iri s", + "Ġunder mine", + "Ġundermin e", + "ĠD y", + "Ġt yr", + "Ġty r", + "Ġ deque", + "Ġde que", + "Ġd amer", + "Ġda mer", + "Ġdam er", + "Ġdame r", + "( [])Ċ", + "([ ])Ċ", + "([] )Ċ", + ".layout ControlItem", + ".layoutControl Item", + "p eated", + "pe ated", + "peat ed", + "C AN", + "CA N", + "ra gments", + "rag ments", + "ragment s", + "L and", + "La nd", + ") ]);Ċ", + ")] );Ċ", + ")]) ;Ċ", + "ĠS ah", + "ĠSa h", + "Ġ DECL", + "ĠDE CL", + "ĠDEC L", + "With in", + "Wi thin", + "Ġ Namespace", + "ĠN amespace", + "ĠName space", + "ĠNames pace", + "an other", + "ano ther", + "semb ling", + "sem bling", + "sembl ing", + ". describe", + ".de scribe", + ".des cribe", + "Con sum", + "Cons um", + "Ġ Fear", + "ĠF ear", + "ĠFe ar", + "g iven", + "gi ven", + "give n", + "O range", + "Or ange", + "< boolean", + " This", + ">T his", + "Ġdata Index", + "Ġprint able", + "Ġprin table", + "ĠE yes", + "ĠEye s", + "ĠEy es", + "_ targets", + "_target s", + "_tar gets", + "( Py", + "(P y", + ". over", + ".o ver", + ".ov er", + "Ġ bru", + "Ġb ru", + "Ġbr u", + "am pton", + "amp ton", + "Ġplaint iff", + "< Key", + " );Ċ", + ">) ;Ċ", + "in vest", + "inv est", + ". *ĊĊ", + ".* ĊĊ", + ".*Ċ Ċ", + "Ġt élé", + "Ġté lé", + "Ġsu perf", + "Ġsuper f", + "Ġ cascade", + "Ġc ascade", + "Ġcas cade", + "Ġcasc ade", + "D TD", + "DT D", + "Ġv ivid", + "Ġvi vid", + "Ġviv id", + "Ġsubsid ies", + "Ġsubsidi es", + "ĠH ass", + "ĠHas s", + "ĠHa ss", + "Ġcol laps", + "Ġcoll aps", + "Ġcer amic", + "{ }\".", + "{} \".", + "ĠLeak age", + "- trash", + "-tr ash", + "-tra sh", + "c ollapsed", + "coll apsed", + "collapse d", + "- social", + "-s ocial", + "-so cial", + "ĠC had", + "ĠCh ad", + "ĠCha d", + "Ġinc lined", + "Ġincl ined", + "Ġ sto", + "Ġs to", + "Ġst o", + "Ġstory board", + ". payment", + ".p ayment", + ".pay ment", + "stack overflow", + "ĠRa iders", + "ĠRaid ers", + "ĠRaider s", + "ĠRai ders", + "Ġ #'", + "Ġ# '", + "ol icies", + "olic ies", + "oli cies", + "ìľ¼ ë¡ľ", + "e map", + "em ap", + "ema p", + "Ġ kj", + "Ġk j", + "Ġ quota", + "Ġqu ota", + "Ġquot a", + "Ġquo ta", + "ĠGar dens", + "ĠGarden s", + "ĠGard ens", + "ë² Ī", + "ĠAng els", + "ĠAnge ls", + "ĠAngel s", + "Ġ oft", + "Ġo ft", + "Ġof t", + "Ġlower case", + "Ġ iParam", + "Ġi Param", + "ĠiP aram", + "Ġche apest", + "Ġcheap est", + "un ta", + "unt a", + "_ pkt", + "_p kt", + "_pk t", + "ic ators", + "ica tors", + "icator s", + "Ġ leurs", + "Ġl eurs", + "Ġle urs", + "Ġleur s", + "Ġdecre ases", + "Ġdecrease s", + "ĉ define", + "ĉdef ine", + "ĉde fine", + "P REC", + "PR EC", + "PRE C", + "am mers", + "amm ers", + "ammer s", + "Ġ PreparedStatement", + "ĠPre paredStatement", + "ĠPrepared Statement", + "( direction", + "(d irection", + "(dir ection", + "(di rection", + "Ġcr ews", + "Ġcre ws", + "Ġcrew s", + "ar ked", + "ark ed", + "ĠMem phis", + "Ġ Sell", + "ĠS ell", + "ĠSe ll", + "ĠSel l", + "G TK", + "GT K", + "Ġ maid", + "Ġm aid", + "Ġma id", + "Ġmai d", + ": disable", + ":d isable", + "éĽ Ĩ", + "ĠP f", + "Ġal beit", + "op enh", + "open h", + "ope nh", + "?> \">Ċ", + "?>\" >Ċ", + ". getSource", + ".get Source", + ".getS ource", + "( scale", + "(s cale", + "(sc ale", + "D u", + "ĠP IL", + "ĠPI L", + "_ refresh", + "_re fresh", + "_ref resh", + "Ġb ets", + "Ġbe ts", + "Ġbet s", + "( car", + "(c ar", + "(ca r", + "ĠV on", + "ĠVo n", + "| --------------------------------------------------------------------------Ċ", + "ĠG rat", + "ĠGr at", + "ĠGra t", + "M uch", + "Mu ch", + "( Dialog", + "(D ialog", + ".stop Propagation", + "Ġ tek", + "Ġt ek", + "Ġte k", + "Ġex its", + "Ġexit s", + "' ],$", + "'] ,$", + "'], $", + "Ġ phoneNumber", + "Ġphone Number", + "u cs", + "uc s", + "e cimal", + "ec imal", + "eci mal", + "- -------------", + "-- ------------", + "---- ----------", + "-------- ------", + "--- -----------", + "------------ --", + "----- ---------", + "---------- ----", + "------ --------", + "----------- ---", + "------------- -", + "------- -------", + "--------- -----", + "i np", + "in p", + ".po jo", + "Ġcor pus", + "Ġcorp us", + "Ġpractition ers", + "Ġpractitioner s", + ". pic", + ".p ic", + ".pi c", + "\" testing", + "Ġstring By", + ". NotNull", + ".Not Null", + "Ġ rang", + "Ġr ang", + "Ġran g", + "Ġra ng", + ". Dynamic", + ".D ynamic", + "_ Render", + "_R ender", + "_Re nder", + "а ÑĤа", + "аÑĤ а", + "Wait ing", + "Wa iting", + "Ġ Wik", + "ĠW ik", + "ĠWi k", + "Ġoverwhel med", + "Ġoverwhelm ed", + "% \">", + "%\" >", + "Ġ AE", + "ĠA E", + "} }>Ċ", + "}} >Ċ", + "}}> Ċ", + "u w", + "_ typ", + "_t yp", + "_ty p", + "Ġ buckets", + "Ġb uckets", + "Ġbucket s", + "Ġbuck ets", + "Ġg reeting", + "Ġgre eting", + "Ġgreet ing", + "Ġ laughter", + "Ġla ughter", + "Ġlaugh ter", + "Ġant agon", + "ugg estion", + "uggest ion", + "- email", + "-e mail", + "-em ail", + "ĉ top", + "ĉt op", + "ĉto p", + "Ġ eros", + "Ġe ros", + "Ġer os", + "Ġero s", + "_ tri", + "_t ri", + "_tr i", + "Ġiss uing", + "Ġissu ing", + "Ġ há", + "Ġh á", + "Ġis olate", + "Ġisol ate", + "Ġiso late", + "Over flow", + ", E", + "Ġnut ritional", + "Ġnutrition al", + "Ġnutrit ional", + "ĠAbb ott", + "Ġ nf", + "Ġn f", + ". touch", + ".t ouch", + ".to uch", + ".fetch all", + "_ zip", + "_z ip", + "\" )}Ċ", + "\") }Ċ", + "\")} Ċ", + "Ġ amat", + "Ġa mat", + "Ġam at", + "Ġama t", + "Ġ Cisco", + "ĠC isco", + "Ġn Ã¥", + "P LEX", + "PL EX", + "PLE X", + "Ġ sei", + "Ġs ei", + "Ġse i", + "f oto", + "fo to", + ". toJson", + ".to Json", + "å¤ ļ", + "ĠK lein", + "ĠKle in", + "ĠKl ein", + "Ġ libc", + "Ġli bc", + "Ġlib c", + "Ġm iners", + "Ġmin ers", + "Ġmi ners", + "Ġmine rs", + "Ġminer s", + "å ¢", + "- print", + "-p rint", + "-pr int", + "ĠP ride", + "ĠPr ide", + "ĠPri de", + "T odos", + "To dos", + "Todo s", + "Ġ masked", + "Ġmask ed", + "Ġmas ked", + "Ġ setData", + "Ġset Data", + "Ġtele fon", + "Ġtel efon", + "Ġun happy", + "Ġunh appy", + "Ġ Tables", + "ĠT ables", + "ĠTable s", + "ĠTab les", + "ĠTa bles", + "g eb", + "ge b", + "( debug", + "(de bug", + "_ allowed", + "_all owed", + "_allow ed", + "- access", + "-a ccess", + "-ac cess", + "Ġlog istics", + "Ġlogistic s", + "Ġ gems", + "Ġg ems", + "Ġge ms", + "Ġgem s", + "ĠM ature", + "ĠMat ure", + "ĠMa ture", + "Ġ rsp", + "Ġr sp", + "Ġrs p", + "Ġ Alle", + "ĠA lle", + "ĠAl le", + "ĠAll e", + ". getBytes", + ".get Bytes", + ".getBy tes", + "\\ web", + "ynchron ized", + "ynchronize d", + "Par agraph", + "Para graph", + "Ġth rottle", + "Ġthr ottle", + "Ġthrott le", + ". sqlite", + ".sql ite", + "cons ulta", + "consult a", + "ĠS eah", + "ĠSe ah", + "ĠSea h", + "C e", + "Ġsub mar", + "E RE", + "ER E", + "V ous", + "Vo us", + "Ġ reddit", + "Ġre ddit", + "Ġred dit", + "Ġredd it", + "Ġsql alchemy", + "- mile", + "-m ile", + "oc ide", + "oci de", + "P our", + "Po ur", + "} }\">Ċ", + "}} \">Ċ", + "}}\" >Ċ", + "st ead", + "ste ad", + "Ġ @(", + "Ġ@ (", + "Ġ [])", + "Ġ[ ])", + "Ġ[] )", + "Ġ Ads", + "ĠA ds", + "ĠAd s", + "Ġover load", + "Ġoverl oad", + "r idden", + "ri dden", + "rid den", + "ĠDe sert", + "ĠDes ert", + "Ġ Wrap", + "ĠW rap", + "ĠWr ap", + "ĠPortug uese", + "e tz", + "et z", + "ĉ first", + "ĉf irst", + "ĉfi rst", + "Ġm ilestone", + "Ġmil estone", + "Ġmiles tone", + "Ġmile stone", + "æĹ ł", + "Ñĥ Ñī", + "( success", + "(s uccess", + "< Vector", + " \")Ċ", + ">\" )Ċ", + ">\") Ċ", + "ĠD ollar", + "ĠDol lar", + "ĠDoll ar", + "Ġ emoji", + "Ġem oji", + "Ġemo ji", + "Car ousel", + "- player", + "-p layer", + "-play er", + "-pl ayer", + "Ġadjust ing", + "Ġadj usting", + "Ġj uga", + "Ġju ga", + "Ġjug a", + "allenge s", + "alleng es", + "allen ges", + "g ene", + "ge ne", + "gen e", + "(body Parser", + "lo pedia", + "lop edia", + "lope dia", + "Ġ Behind", + "ĠBe hind", + "ĠBeh ind", + "Ġslee ves", + "Ġsleeve s", + "Ġdrag ging", + "ĠChe vrolet", + "Ġ biz", + "Ġb iz", + "Ġbi z", + "iv ities", + "ivi ties", + "Ġ Frequency", + "ĠF requency", + "ĠFrequ ency", + ", char", + ",c har", + ",ch ar", + ". WHITE", + ".W HITE", + "_ preview", + "_p review", + "_pr eview", + "_pre view", + "_prev iew", + ") ';Ċ", + ")' ;Ċ", + "_ ax", + "_a x", + "I ONS", + "ION S", + "IO NS", + ". cpu", + ".c pu", + ".cp u", + ". inputs", + ".in puts", + ".input s", + "U BE", + "UB E", + "_ feed", + "_f eed", + "_fe ed", + "_fee d", + "ĠSup plement", + "! ).", + "!) .", + "e sus", + "es us", + "Ġ UDP", + "ĠU DP", + "ĠUD P", + "Ġmicro phone", + "Ġconf irms", + "Ġconfirm s", + ".is NotEmpty", + "\" :\"\",Ċ", + "\": \"\",Ċ", + "\":\" \",Ċ", + "\":\"\" ,Ċ", + "_ SCREEN", + "_S CREEN", + "_SC REEN", + "ĉ expected", + "ĉex pected", + "ĉexpect ed", + "ĉexp ected", + "+-+- +-+-", + "ĠH ait", + "ĠHa it", + "ĠHai t", + "fast call", + "Ġdep ict", + "v b", + "_ picture", + "_p icture", + "_pic ture", + "ĉ description", + "ĉd escription", + "ĉdes cription", + "ĉde scription", + "ĠW ife", + "ĠWi fe", + "u ci", + "uc i", + "Ġv icious", + "Ġvic ious", + "ä» ĸ", + "u eba", + "ue ba", + "Ġset User", + "ãģ ¡", + "Ġd iving", + "Ġdi ving", + "Ġdiv ing", + "Ġop era", + "Ġoper a", + "user content", + "a rah", + "ar ah", + "ara h", + ") },", + ")} ,", + "y un", + "yu n", + "v elt", + "ve lt", + "vel t", + "Ġun covered", + "Ġuncover ed", + "Ġ hips", + "Ġh ips", + "Ġhi ps", + "Ġhip s", + "Ġosc ill", + "Ġassert ing", + "Ġ Xi", + "ĠX i", + ". restore", + ".re store", + ".rest ore", + "k ea", + "ke a", + "Ġsp elling", + "Ġspell ing", + "Ġspel ling", + "Ġ derive", + "Ġde rive", + "Ġder ive", + "Ġderiv e", + "ab we", + "ĠD ow", + "ĠDo w", + ". setType", + ".set Type", + "_ vs", + "_v s", + "Ġc ozy", + "Ġco zy", + "Ġcoz y", + ". categories", + ".c ategories", + "O rg", + "Or g", + "_ mgr", + "_m gr", + "Ġd ungeon", + "Ġdung eon", + "collection View", + "Ġ Blank", + "ĠBl ank", + "ac ias", + "aci as", + "acia s", + "ä ä", + "_ cleanup", + "_c leanup", + "_clean up", + "_ACT IVITY", + "_ACTIV ITY", + "Ġtri angles", + "Ġtriangle s", + "Ġtriang les", + ". MenuItem", + ".Menu Item", + "Ġ iphone", + "Ġi phone", + "Ġip hone", + "Ġ Won", + "ĠW on", + "ĠWo n", + "] ]ĊĊ", + "]] ĊĊ", + "]]Ċ Ċ", + "Ġ Comparison", + "ĠCom parison", + "ĠCompar ison", + ". Doc", + ".D oc", + ".Do c", + "Ġ canonical", + "Ġcan onical", + "Ġcanon ical", + "ĠSu dan", + "ĠSud an", + "' ){", + "') {", + "Up Inside", + "b uiltin", + "built in", + "E NCY", + "EN CY", + "ENC Y", + "x be", + "xb e", + "Ġch uck", + "Ġchu ck", + "Ġcontrad ict", + "Ġcontra dict", + "Ġnu estro", + "Ġnue stro", + "Ġnuest ro", + "Ġnues tro", + "Ġarchitect ural", + "ĠF ib", + "ĠFi b", + "Ġcomp ares", + "Ġcompar es", + "Ġcompare s", + "* k", + "C fg", + "çĦ ¡", + "n ten", + "nt en", + "nte n", + "M atches", + "Match es", + "Mat ches", + "Ġ DOWNLOAD", + "ĠDOWN LOAD", + "_HANDLE R", + "_HAND LER", + "man agement", + "manage ment", + "mana gement", + "[ S", + "E NG", + "EN G", + "ÂĢ Â", + "f ang", + "fa ng", + "fan g", + "Ġsl ipped", + "Ġslip ped", + "ĠL anka", + "ĠLan ka", + "esc aping", + "Ġtack les", + "Ġtackle s", + "ĠPe dro", + "ĠPed ro", + ". Prop", + ".P rop", + ".Pro p", + ".Pr op", + ". ''", + ".' '", + ". Generated", + ".G enerated", + ".Generate d", + ".New Guid", + "at rigesimal", + "il lon", + "ill on", + "illo n", + "Ġstat istic", + "Ġstatist ic", + "s pecies", + "sp ecies", + "spec ies", + "spe cies", + "h olding", + "hold ing", + "hol ding", + "Dr upal", + "Ġfundament ally", + "Ġfundamental ly", + "Ġbond age", + "Ġres olutions", + "Ġresolution s", + "Inline Data", + "\\ Type", + "es tion", + "est ion", + "esti on", + ". wrap", + ".w rap", + ".wr ap", + "Ġwar riors", + "Ġwarrior s", + "Ġ LOCAL", + "ĠLO CAL", + "ĠLOC AL", + "A rchive", + "Arch ive", + "Arc hive", + "Ġembr aced", + "Ġembrace d", + "á» §", + ". Ver", + ".V er", + "ĠAff ordable", + "ole sale", + "oles ale", + "Ġ Applied", + "ĠApp lied", + "ĠAp plied", + "ĠAppl ied", + "Ġ Conversion", + "ĠCon version", + "ĠConv ersion", + "ĠConvers ion", + "m ega", + "me ga", + "meg a", + "_ cam", + "_c am", + "_ca m", + "Ġcer emon", + "Ġcere mon", + "a urus", + "au rus", + "aur us", + "ĠV olk", + "ĠVol k", + "ĠVo lk", + ". opens", + ".open s", + ".op ens", + "/ about", + "/a bout", + "Ġ Std", + "ĠS td", + "ĠSt d", + "j ournal", + "jo urnal", + "jour nal", + "( )){čĊ", + "() ){čĊ", + "()) {čĊ", + "()){ čĊ", + ", \"\\", + ",\" \\", + "( Arrays", + "(Array s", + "ĠD ense", + "ĠDen se", + "ase ña", + "än ner", + "änn er", + "/ stat", + "/s tat", + "/st at", + "user Data", + "Ġg erman", + "Ġger man", + "Ġgerm an", + "Ġ tz", + "Ġt z", + "w orthy", + "worth y", + "wort hy", + "wor thy", + "Format Exception", + "ph erd", + "pher d", + "phe rd", + "Ġsm iles", + "Ġsmile s", + "Ġ Whenever", + "ĠWh enever", + "ĠWhen ever", + "ĠWhe never", + "( adapter", + "(ad apter", + ".bad logic", + "Ġbrief ing", + ". GridColumn", + ".Grid Column", + "- char", + "-c har", + "-ch ar", + "d imension", + "dim ension", + "ĠC opper", + "ĠCo pper", + "ĠCop per", + "ĠCopp er", + "Ġn inth", + "Ġni nth", + "Ġnin th", + "Ġ' {{", + "Ġ'{ {", + "Ġ rav", + "Ġr av", + "Ġra v", + "_ Table", + "_T able", + "_Tab le", + "Ġderiv atives", + "Ġderivative s", + "Ġ Raise", + "ĠR aise", + "ĠRa ise", + "ĠRai se", + "ĠF ut", + "ĠFu t", + "ar mor", + "arm or", + "- padding", + "-p adding", + "-pad ding", + "Ġre min", + "Ġr emin", + "Ġrem in", + "ĉ style", + "ĉst yle", + "Ġ Membership", + "ĠMember ship", + "ĠMembers hip", + "Ġsp reads", + "Ġspread s", + "Ġspre ads", + "Ġg alleries", + "Ġgall eries", + "ĠClark e", + "ĠClar ke", + "Ġcon ception", + "Ġconcept ion", + "Ġconce ption", + "min ute", + "Ġab usive", + "_ adj", + "_a dj", + "_ad j", + "Ġterr ific", + "Ġo vert", + "Ġover t", + "Ġov ert", + "our cing", + "Ġ entrada", + "Ġent rada", + "Ġentr ada", + "Ġentra da", + "level s", + "lev els", + "Ġcrit ique", + "Ġres pects", + "Ġrespect s", + "Ġresp ects", + "ĠM MA", + "ĠMM A", + "i ene", + "ie ne", + "ien e", + "Ġen caps", + "Ġenc aps", + "ĠRay mond", + "Div ider", + "Di vider", + "i vable", + "iv able", + "iva ble", + "b az", + "ba z", + "Ġ@ _;Ċ", + "Ġ@_ ;Ċ", + "ĠCl aire", + "ĠCla ire", + "ĠClair e", + "Ġur ging", + "Ġurg ing", + "C EE", + "CE E", + "Ġtrans former", + "Ġtransform er", + "dis cord", + "disc ord", + "ĠJ ourney", + "t os", + "to s", + "Ġcompet itions", + "Ġcompetition s", + "Ġcompetit ions", + "Ġ OBJ", + "ĠO BJ", + "ĠOB J", + "ĠB is", + "ĠBi s", + "Ġrelax ation", + "i dy", + "id y", + "_ INSTANCE", + "_IN STANCE", + "_INST ANCE", + "Ġ Pref", + "ĠP ref", + "ĠPr ef", + "ĠPre f", + "d ados", + "da dos", + "dad os", + "ici encies", + "ĠMedia Query", + "Ġ Cube", + "ĠC ube", + "ĠCub e", + "ĠCu be", + "Ġ Strange", + "ĠSt range", + "ĠStr ange", + "ĠStra nge", + "g pu", + "gp u", + "( days", + "(d ays", + "(day s", + "(da ys", + "_ InitStruct", + "_Init Struct", + "Ġf ingerprint", + "Ġfinger print", + "e mat", + "em at", + "ema t", + "ĠG ecko", + "ĠGe cko", + "Ġ rails", + "Ġr ails", + "Ġrail s", + "Ġra ils", + "ĠL um", + "ĠLu m", + "s traction", + "st raction", + "str action", + "stract ion", + "stra ction", + "ig ung", + "igu ng", + "( movie", + "(m ovie", + "_ dictionary", + "_d ictionary", + "_ interrupt", + "_int errupt", + "_inter rupt", + "Ġ QC", + "ĠQ C", + "i ked", + "ik ed", + "ike d", + "append Child", + "rec ipient", + "r é", + "V e", + "Ġt owel", + "Ġto wel", + "Ġtow el", + ".last IndexOf", + "Ġplace bo", + "Ġplac ebo", + "Ġ Wie", + "ĠW ie", + "ĠWi e", + ". esp", + ".e sp", + ".es p", + "( Debug", + "oper ative", + "Ġde ceased", + "Ġdece ased", + "& id", + "ĉ mutex", + "ĉm utex", + "e lic", + "el ic", + "eli c", + "Ġb apt", + "Ġba pt", + "ĉ čĊčĊ", + "ĉčĊ čĊ", + "Ġfar ther", + "Ġfart her", + "H alf", + "Ha lf", + "Hal f", + ". disable", + ".d isable", + ".dis able", + ".menu Strip", + "le ccion", + "lec cion", + "Ġ resultCode", + "Ġresult Code", + "Ġc ans", + "Ġcan s", + "Ġca ns", + "- election", + "-e lection", + "-elect ion", + "-el ection", + "f emale", + "fe male", + "_ FIX", + "_F IX", + "aus ible", + "Ġ POWER", + "ĠP OWER", + "ĠPO WER", + "ĠPOW ER", + "Ġre construction", + "Ġrecon struction", + "Ġreconstruct ion", + "Ġsc ans", + "Ġscan s", + "Ġsca ns", + ".Xtra Bars", + "âĢĺ s", + "Re moved", + "Rem oved", + "Remove d", + "Ġpara graphs", + "Ġparagraph s", + "_ margin", + "_m argin", + "_mar gin", + "Ġl ymph", + "Ġly mph", + "Ġ bos", + "Ġb os", + "Ġbo s", + "l ington", + "ling ton", + "ĠBapt ist", + "Ġadvertis ements", + "Ġadvertisement s", + "Ġadvertise ments", + "Ġ Manage", + "ĠMan age", + "ĠMa nage", + "ĠMana ge", + "/ yyyy", + "/y yyy", + "I OUS", + "IO US", + "EN CES", + "ENCE S", + "ENC ES", + "ĠF iction", + "ĠFi ction", + "ĉ menu", + "ĉm enu", + "ĉme nu", + "ĠFile OutputStream", + "o van", + "ov an", + "ova n", + "ĠF eng", + "ĠFe ng", + "ĠFen g", + "Ġsk ipping", + "Ġskip ping", + "Ġski pping", + "get Class", + "getC lass", + "an ni", + "ann i", + "Ġre bounds", + "Ġreb ounds", + "Ġrebound s", + "Ġpublic ity", + "Ġpub licity", + "Ġpubli city", + "Ġin gres", + "Ġing res", + "Ġingr es", + "us ement", + "use ment", + "Ġthought ful", + ". Chart", + ".C hart", + ".Ch art", + ".Char t", + "Ġh atte", + "Ġha tte", + "Ġhat te", + "pass port", + "pas sport", + "Ġhook ed", + "Ġho oked", + "Ġ Lens", + "ĠL ens", + "ĠLe ns", + "ĠLen s", + "Ġflag ship", + "Ġflags hip", + "Ġs tip", + "Ġst ip", + "Ġ GEN", + "ĠG EN", + "ĠGE N", + "Ġcl ues", + "Ġclue s", + "i pv", + "ip v", + "ĠR ise", + "ĠRi se", + "ĠRis e", + "ĠG ew", + "ĠGe w", + "table name", + "tab lename", + "tabl ename", + "Ġfore most", + "_ validate", + "_valid ate", + "_ analysis", + "_an alysis", + "o lla", + "ol la", + "oll a", + "Ġqual ifications", + "Ġqualification s", + "Ġd istributions", + "Ġdistrib utions", + "Ġdistribution s", + "ĠF lower", + "ĠFl ower", + "ĠFlo wer", + "ĠFlow er", + "Ġt ense", + "Ġten se", + "Ġtens e", + "Ġthank ful", + "Ġcl utch", + "Ġun ified", + "ro ads", + "road s", + "Ġs iti", + "Ġsit i", + "Ġsi ti", + "Ġst all", + "Ġsta ll", + "Ġstal l", + "_P RIORITY", + "_PRI ORITY", + "c stdlib", + "_ USERNAME", + "_USER NAME", + ". bytes", + ".by tes", + ".byte s", + "? page", + "?p age", + "er malink", + "erm alink", + "ermal ink", + "ĠVe get", + "ĠVeg et", + "/v nd", + "- author", + "-a uthor", + "-auth or", + "-aut hor", + ". NONE", + ".N ONE", + ".NO NE", + "ĠCon current", + "ĠConc urrent", + "ĠC ry", + "ĠCr y", + "Ġst arters", + "Ġstart ers", + "Ġstar ters", + "Ġstarter s", + "Ġ Interaction", + "ĠInter action", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "Ġ LEVEL", + "ĠLE VEL", + "E ll", + "El l", + "Ġ comboBox", + "Ġcom boBox", + "Ġcombo Box", + "ĠThe resa", + "ĠTh eresa", + "ĠThere sa", + "ĠTher esa", + "t ek", + "te k", + "_ Handle", + "_H andle", + "Ġ aby", + "Ġa by", + "Ġab y", + ".g dx", + ", end", + ",e nd", + ",en d", + "( Local", + "(L ocal", + "O l", + "kn ife", + "a rial", + "ar ial", + "ari al", + "aria l", + "ĠH off", + "ĠHo ff", + "ĠHof f", + "Ġprostituer ade", + "Do ctor", + "Doc tor", + "In stances", + "Instance s", + "Inst ances", + ". SetValue", + ".Set Value", + "ĉ from", + "ĉf rom", + "ĉfr om", + "Ġlux urious", + "In dent", + "Ind ent", + "Al locator", + "All ocator", + "Alloc ator", + "_ DRAW", + "_D RAW", + "_DR AW", + "(\" ,\",", + "(\", \",", + "(\",\" ,", + "ĠF rances", + "ĠFr ances", + "ĠFrance s", + "ĠFranc es", + "ĠFra nces", + "ĠFran ces", + "Ġ groupBox", + "Ġgroup Box", + "( schema", + "(s chema", + "Print f", + "O RIES", + "OR IES", + "- gradient", + "-g radient", + "Ġre put", + "Ġrep ut", + "a rin", + "ar in", + "ari n", + "_ DONE", + "_D ONE", + "_DO NE", + "in cre", + "inc re", + "incr e", + "ig nty", + "ign ty", + "Ġex ert", + "Ġexe rt", + "Ġ -.", + "Ġ- .", + "/ App", + "/A pp", + "- through", + "-th rough", + "Ġdec lining", + "Ġdecl ining", + "Ġdes sert", + "Ġdess ert", + "Ġinc umb", + "Ġ designation", + "Ġdesign ation", + ". PORT", + ".P ORT", + ".PO RT", + ", strong", + ",str ong", + ",st rong", + "Ġ sandbox", + "Ġs andbox", + "Ġsand box", + "Ġw ines", + "Ġwin es", + "Ġwine s", + "Ġwi nes", + "ĠP av", + "ĠPa v", + "$ str", + "$s tr", + "ask ell", + "Ġh ö", + "Ġ PY", + "ĠP Y", + "Get Instance", + "Text Input", + "game Object", + "/ events", + "/e vents", + "/event s", + "created At", + "Ġlocal Var", + "Ġ WHITE", + "ĠW HITE", + "ĠWH ITE", + "p ered", + "pe red", + "per ed", + "i lege", + "ile ge", + "eff icient", + ", color", + ",c olor", + ",col or", + "c ate", + "ca te", + "cat e", + "ĠC afe", + "ĠCa fe", + "ĠCaf e", + "Ġsimilar ities", + "Ġp umps", + "Ġpump s", + "Ġpu mps", + "ĠHun gary", + "ĠHung ary", + ". Username", + ".User name", + "Ġs kate", + "Ġsk ate", + "Ġska te", + "Ġtouchdown s", + "Ġacceler ate", + "Ġaccel erate", + "ĠH elen", + "ĠHe len", + "ĠHel en", + "O MEM", + "OM EM", + "OME M", + "ĠK un", + "ĠKu n", + "_ vol", + "_v ol", + "Ġ findAll", + "Ġfind All", + "ĠMens chen", + "a head", + "ah ead", + ") ;\"", + "); \"", + "k ommen", + "kom men", + "Ġposs essed", + "Ġpossess ed", + ".arg max", + ". transition", + ".t ransition", + ".trans ition", + "A RP", + "AR P", + "OL UME", + "OLUM E", + "( script", + "(s cript", + "Ġ Ðĺ", + "ĠÐ ĺ", + "Ġ Finding", + "ĠF inding", + "ĠFin ding", + "ĠFind ing", + "o nces", + "on ces", + "once s", + "I o", + "B old", + "Bo ld", + "Ġrenew al", + "_D IALOG", + "Ġdis reg", + "IN TERN", + "INT ERN", + "INTER N", + "Ġt oute", + "Ġto ute", + "Ġtou te", + "Ġtout e", + "Ġelect r", + "Ġele ctr", + "ĠG ross", + "ĠGr oss", + "ĠGro ss", + "ĠGros s", + "ĉ true", + "ĉtr ue", + ". Fields", + ".F ields", + ".Field s", + "Ġ WIDTH", + "ĠW IDTH", + "ĠD ent", + "ĠDe nt", + "ĠDen t", + "Ġ Ãģ", + "Ġà ģ", + "NS Notification", + "Ġ aos", + "Ġa os", + "Ġao s", + "Ġme lee", + "Ġmel ee", + ". Validation", + ".Valid ation", + "Ġ DEC", + "ĠD EC", + "ĠDE C", + "- dependent", + "-depend ent", + "Ġsu ic", + "Ġsui c", + "T raits", + "Tr aits", + "Tra its", + "Trait s", + "$ message", + "$m essage", + "Ġ Dear", + "ĠD ear", + "ĠDe ar", + "ĉ FILE", + "ĉF ILE", + "l anguages", + "language s", + ". Prot", + ".P rot", + ".Pro t", + ".Pr ot", + ". addr", + ".add r", + ".ad dr", + "- generation", + "-g eneration", + "-gen eration", + "I CON", + "IC ON", + "ICO N", + "Ġtrans plant", + "- description", + "-d escription", + "-de scription", + "-des cription", + "Ġch asing", + "Ġcha sing", + "Ġch ees", + "Ġche es", + "Ġ }*/Ċ", + "Ġ} */Ċ", + "T rad", + "Tr ad", + "Tra d", + "qu eries", + "que ries", + "quer ies", + "/ widgets", + "/widget s", + "sub package", + "Ġe spec", + "Ġes pec", + "Ġesp ec", + "Ġcr acked", + "Ġcrack ed", + "Ġcompet itor", + "Ġcompetit or", + "P urchase", + "- team", + "-t eam", + "-te am", + "ole cular", + "olec ular", + "or Thunk", + "& P", + "Ġrel ent", + "Ġrele nt", + "/ #{", + "/# {", + "Ġ productId", + "Ġproduct Id", + "Ġ è¾", + "Ġè ¾", + "ĠL av", + "ĠLa v", + "Ġ Alter", + "ĠAl ter", + "ĠAlt er", + ". Mode", + ".M ode", + ".Mod e", + "AD IO", + "ADI O", + "g rp", + "gr p", + "æ ·»åĬł", + "æ·» åĬł", + "Q uit", + "Qu it", + "Qui t", + "Ġdep ths", + "Ġdepth s", + "Ġdept hs", + "- category", + "-c ategory", + "Ġ DATABASE", + "ĠD ATABASE", + "ĠDATA BASE", + "S PELL", + "SP ELL", + "ĠF alcon", + "ĠFal con", + "ĠQString List", + "Ġ ''.", + "Ġ' '.", + "Ġ'' .", + "ĠIn stitution", + "ĠInst itution", + "ĠInstit ution", + "ĠInstitut ion", + "d amage", + "da mage", + "dam age", + "az or", + "azo r", + "bel ongsTo", + "belongs To", + "ver ages", + "verage s", + "Ġ NONE", + "ĠN ONE", + "ĠNO NE", + "ĠNON E", + "ip pets", + "ipp ets", + "ippet s", + ", \\Ċ", + ",\\ Ċ", + "Ġfoot print", + "_ archive", + "_a rchive", + "_arch ive", + "_arc hive", + "n ak", + "na k", + ". getField", + ".get Field", + "Ġ Reflection", + "ĠRef lection", + "ĠReflect ion", + "Ġ ']", + "Ġ' ]", + "ĠH BO", + "ĠHB O", + "_ discount", + "_dis count", + "_disc ount", + "Ġin cest", + "Ġinc est", + "Ġince st", + "ĠD odge", + "ĠDo dge", + "ĠDod ge", + "ĠW ade", + "ĠWa de", + ". NO", + ".N O", + "\" encoding", + "Ġ Blockchain", + "ĠBlock chain", + "Ġlaws uits", + "Ġlawsuit s", + "Ġ Maint", + "ĠM aint", + "ĠMain t", + "ĠMa int", + "ĠMai nt", + "ch ten", + "cht en", + "chte n", + "Ġét ait", + "Ġktó re", + "_ ctl", + "_c tl", + "_ct l", + "( timer", + "(t imer", + "(time r", + "(ti mer", + "B attle", + "Bat tle", + "i zo", + "iz o", + "ay ed", + "aye d", + "I OR", + "IO R", + "ĠGlas gow", + "Ġs ynth", + "Ġsy nth", + "Ġsyn th", + "Ġsynt h", + "_ logs", + "_l ogs", + "_log s", + "_lo gs", + ". pose", + ".p ose", + ".pos e", + ".po se", + "_Adjust orThunk", + "( (&", + "(( &", + "Ġun sure", + "Ġuns ure", + "Ġunsur e", + "y state", + "yst ate", + "íķĺ ëĬĶ", + "O ULD", + "OU LD", + ". ng", + ".n g", + "Ġdefault dict", + "work space", + "works pace", + "Ġselect ive", + "Ġsel ective", + "Picker Controller", + "YNAM IC", + ". methods", + ".method s", + "Ġpath ways", + "Ġpathway s", + "Ġ Few", + "ĠF ew", + "ĠFe w", + "K G", + "C RYPT", + "CRY PT", + "follow ing", + "ĠD LC", + "ĠDL C", + "ĠS ara", + "ĠSar a", + "ĠSa ra", + "Ġ preset", + "Ġp reset", + "Ġpre set", + "Ġpres et", + "e structor", + "estr uctor", + "estruct or", + "ĠK urt", + "ĠKur t", + "ĠKu rt", + "Ġair plane", + "Ġ omp", + "Ġo mp", + "Ġom p", + "Ġ Parents", + "ĠPar ents", + "ĠParent s", + "ĠParen ts", + "ĠPare nts", + "ĠMart inez", + "ĠMartin ez", + ". complete", + ".com plete", + ".comp lete", + "Ġbroad ly", + "Ġs care", + "Ġsc are", + "Ġsca re", + "Ġscar e", + "ĠM é", + "Ġelim ination", + "Ġelimin ation", + "Ġp oured", + "Ġpo ured", + "Ġpour ed", + "Ġpou red", + "/ sw", + "/s w", + "Ġcom un", + "Ġco mun", + "Ġm asc", + "Ġma sc", + "Ġmas c", + "ĠOrgan ic", + "ĠOrg anic", + "Ġ StringUtils", + "ĠString Utils", + "ĠStringUtil s", + "il ateral", + "ilate ral", + "ilater al", + "Ġreluct ant", + "- age", + "-a ge", + "-ag e", + "Ġ nz", + "Ġn z", + ". \"\\", + ".\" \\", + "Ġpast or", + "Ġpas tor", + "Ġpa stor", + "a lez", + "al ez", + "ale z", + "Ġe fect", + "Ġef ect", + "p rov", + "pr ov", + "pro v", + "/ init", + "/i nit", + "/in it", + "Ġp enn", + "Ġpe nn", + "Ġpen n", + "u nds", + "un ds", + "und s", + "Ġ ssize", + "Ġs size", + "Ġss ize", + "Ġ Proj", + "ĠP roj", + "ĠPro j", + "ĠPr oj", + "b asename", + "base name", + "bas ename", + "Ġsh ells", + "Ġshell s", + "Ġshel ls", + "ĠN eck", + "ĠNe ck", + "ĠNec k", + "ĠEn forcement", + "v ided", + "vid ed", + "vi ded", + "vide d", + "s town", + "st own", + "sto wn", + "S phere", + "Sp here", + "$ r", + "us sen", + "uss en", + "a fil", + "af il", + "afi l", + "Ġ Telegram", + "ĠTele gram", + "Ġanaly tical", + "Ġanalytic al", + "н Ñĭе", + "нÑĭ е", + "us ually", + "usu ally", + "usual ly", + "x n", + "Ġhistor ian", + "Ġhist orian", + "Ġhistoria n", + "Ġhisto rian", + "ĠGreg ory", + "ol ph", + "Ġ Una", + "ĠU na", + "ĠUn a", + "Ġcon tributes", + "Ġcontrib utes", + "Ġcontribute s", + "% -", + "anti ago", + "ÑĢ ÐµÐ´", + "ÑĢе д", + ". region", + ".reg ion", + "Ġab rupt", + "ĠUnsupported OperationException", + "Ġ TASK", + "ĠT ASK", + "ĠTA SK", + "ĠTAS K", + "_ finish", + "_f inish", + "_fin ish", + "Ġnot orious", + "Ġ Vs", + "ĠV s", + "Ġ MQ", + "ĠM Q", + "Ġs unset", + "Ġsun set", + "Ġun acceptable", + "ar cer", + "arc er", + "Ġill umin", + "Ġillum in", + "ĠO rb", + "ĠOr b", + "Ġ bh", + "Ġb h", + "E ste", + "Est e", + "Es te", + "_ dispatch", + "_dis patch", + "_disp atch", + "Ġr ipped", + "Ġrip ped", + "Ġri pped", + "Ġtou jours", + "Ġ Parcel", + "ĠPar cel", + "_ ll", + "_l l", + ". userName", + ".user Name", + ". classes", + ".c lasses", + ".class es", + ".cl asses", + "S OURCE", + "( Number", + "(N umber", + "е лÑı", + "ел Ñı", + "Ġhead phones", + "Ġheadphone s", + "( side", + "(s ide", + "(si de", + "(sid e", + "con stitution", + "const itution", + "an nah", + "ann ah", + "anna h", + "čĊ ĠĠĠĠĠĠĠĠčĊ", + "Ġcl iff", + "Ġcli ff", + "- ref", + "-r ef", + "-re f", + "Ġmost rar", + "Ġmo strar", + "Ġmostr ar", + "Ġmostra r", + "ĠP owell", + "ĠPo well", + "ĠPow ell", + "+ y", + "Ġ BG", + "ĠB G", + "_ fragment", + "_f ragment", + "_fr agment", + "_frag ment", + ". Port", + ".P ort", + "Ġreal izing", + "Ġrealiz ing", + "param ref", + "Ġh ometown", + "Ġhome town", + "@ Table", + "+ \" --}}Ċ", + ">-- }}Ċ", + "F rench", + "Fr ench", + "Entity Manager", + "Ġ Plain", + "ĠP lain", + "ĠPl ain", + "ĠPla in", + "//// ////////////////////////////////////////////////////////////////", + "//////// ////////////////////////////////////////////////////////////", + "//////////////// ////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////// ////", + "//////////// ////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////// ////////////", + "//////////////////////////////////////////////////////////// ////////", + "//////////////////////////////////////////////////// ////////////////", + " ³", + "( RE", + "(R E", + "c apt", + "ca pt", + "cap t", + "Ġ organisms", + "Ġorgan isms", + "Ġorganis ms", + "Ġorganism s", + "Ġ jets", + "Ġj ets", + "Ġje ts", + "Ġjet s", + "o location", + "ol ocation", + "olo cation", + "ĠApp RoutingModule", + "Ġgl orious", + "Ġglo rious", + "Ġglor ious", + "æľ į", + "Ġdisc arded", + "Ġdiscard ed", + "ĉ ĉĉĉĠĠĠĠĠ", + "ĉĉ ĉĉĠĠĠĠĠ", + "ĉĉĉĉ ĠĠĠĠĠ", + "ĉĉĉ ĉĠĠĠĠĠ", + "ĉĉĉĉĠ ĠĠĠĠ", + "ĉĉĉĉĠĠĠ ĠĠ", + "ĉĉĉĉĠĠ ĠĠĠ", + "ĉĉĉĉĠĠĠĠ Ġ", + "ĠArn old", + "l ug", + "lu g", + "Ġp arl", + "Ġpar l", + "Ġpa rl", + "Ġhorm ones", + "Ġhormone s", + "Ġ mah", + "Ġm ah", + "Ġma h", + "ĠS onic", + "ĠSo nic", + "ĠSon ic", + "Ġorgan izers", + "Ġorganiz ers", + "Ġorganize rs", + "Ġorganizer s", + "_ PLATFORM", + "_PL ATFORM", + ". inv", + ".in v", + ".i nv", + "Ġch ord", + "Ġcho rd", + "Ġchor d", + "vent ional", + "vention al", + "ĉ of", + "ĉo f", + "Ep isode", + ". Enum", + ".E num", + ".En um", + "un kt", + "unk t", + "ĠD h", + "ĠJ ared", + "ĠJa red", + "ĠJar ed", + "ĠN ak", + "ĠNa k", + "Ġint ends", + "Ġinte nds", + "Ġintend s", + "End ian", + "Ġa ustralia", + "_ cv", + "_c v", + "( resolve", + "(res olve", + "(re solve", + "Ġclin ics", + "Ġclinic s", + "l iked", + "li ked", + "like d", + "lik ed", + "ASH INGTON", + "in ha", + "inh a", + "' *", + "Ġ NP", + "ĠN P", + "_ beh", + "_b eh", + "_be h", + "Ġ hf", + "Ġh f", + "Ġw ür", + "c ategoria", + "$ form", + "$f orm", + "Ġsub way", + "Ġ isActive", + "Ġis Active", + "pop ular", + "C our", + "Co ur", + "Cou r", + "Ġ cooldown", + "Ġco oldown", + "Ġcool down", + "Ġa insi", + "Ġain si", + "Ġ GLuint", + "ĠGL uint", + "e real", + "ere al", + "erea l", + "Ġarray Of", + "Ġh atch", + "Ġhat ch", + "= =========", + "== ========", + "==== ======", + "======== ==", + "=== =======", + "========= =", + "====== ====", + "===== =====", + "======= ===", + "r esses", + "res ses", + "ress es", + "resse s", + "_ PP", + "_P P", + ". ^", + "_ decay", + "_dec ay", + "ĠB less", + "ĠBl ess", + "ĠBle ss", + "m etrics", + "met rics", + "metric s", + "ĠCOPY ING", + "ĠDump ster", + "ĠJos é", + "ĠDesign s", + "< Void", + "<", + "Ġ? ><", + "Ġ?> <", + "Ġ \"}Ċ", + "Ġ\" }Ċ", + "Ġ\"} Ċ", + "time zone", + "Ġ eer", + "Ġe er", + "Ġee r", + "max cdn", + "Ġ ESC", + "ĠE SC", + "ĠES C", + "ig aret", + "iga ret", + "igar et", + "_ connected", + "_connect ed", + "_conn ected", + "_ reverse", + "_re verse", + "_rev erse", + "Ġquestion able", + "ĠU SC", + "ĠUS C", + "Ġtu tti", + "Ġtut ti", + "Ġ dropout", + "Ġdrop out", + "Ġ Activities", + "ĠAct ivities", + "ĠActiv ities", + "ĠW inds", + "ĠWin ds", + "ĠWi nds", + "ĠWind s", + "' )));Ċ", + "') ));Ċ", + "')) );Ċ", + "'))) ;Ċ", + "Ġcon gest", + "Ġcong est", + "ÄŁ ı", + "Ġprolong ed", + "è¿ Ļ", + "ĠCross AxisAlignment", + "L EEP", + "LE EP", + "LEE P", + "Ġ VALID", + "ĠVAL ID", + "ĠG az", + "ĠGa z", + "Ġ dependence", + "Ġdepend ence", + "ĠP rix", + "ĠPr ix", + "ĠPri x", + ".Compiler Services", + "j ump", + "ju mp", + "Ġst rat", + "Ġstr at", + "Ġstra t", + "c irc", + "ci rc", + "cir c", + "Ġ CUSTOM", + "ĠC USTOM", + "x aa", + "xa a", + "Ġ bmp", + "Ġb mp", + "Ġbm p", + "Ġb ureau", + "Ġbu reau", + "Ġbure au", + "Ġw aren", + "Ġwar en", + "Ġwa ren", + "Ġware n", + "N X", + "( Window", + "(W indow", + "ĠChrist ie", + "ĠChris tie", + "_ FE", + "_F E", + "Ġ tn", + "Ġt n", + "Ġ Omega", + "ĠO mega", + "ĠOm ega", + "communic ations", + "communication s", + "Home Page", + "com pletion", + "comp letion", + "Ġsupply ing", + "Ġsuppl ying", + "Ġsupp lying", + "YPE S", + "YP ES", + "á vel", + "áv el", + "åĪ ¶", + "( click", + "(c lick", + "(cl ick", + "(cli ck", + "\\ Contracts", + "/ questions", + "/question s", + "Ġ ez", + "Ġe z", + "A MS", + "AM S", + ". mesh", + ".m esh", + ".me sh", + "Ġ' \\Ċ", + ">\\ Ċ", + "R obot", + "Rob ot", + "Ro bot", + "Json Object", + "Ġ DF", + "ĠD F", + "Ġ Processor", + "ĠProcess or", + "ĠProc essor", + "_ should", + "_sh ould", + ". protobuf", + ".prot obuf", + ".proto buf", + "- users", + "-user s", + "-use rs", + "-us ers", + "Ġemb ry", + "Ġembr y", + "F ONT", + "FO NT", + "Ġstart ups", + "Ġstartup s", + "Ġ DataSource", + "ĠData Source", + ") #", + "u ros", + "ur os", + "uro s", + "_ Color", + "_C olor", + "Ġst andalone", + "Ġstand alone", + "} [", + "j d", + "Ġfor give", + "Ġforg ive", + "Ġ ngx", + "Ġn gx", + "Ġng x", + "Ġ Generally", + "ĠGener ally", + "ĠGeneral ly", + "Ġconfig urable", + "Ġconfigur able", + "/ order", + "/or der", + "Ġ vas", + "Ġv as", + "Ġva s", + "' )\";Ċ", + "') \";Ċ", + "')\" ;Ċ", + "Ġ RR", + "ĠR R", + "ĠT roy", + "ĠTr oy", + "ĠTro y", + "Ġcomprom ised", + "Ġcompromise d", + "ĠS wan", + "ĠSw an", + "int endent", + "C entral", + "Cent ral", + "_ keeper", + "_k eeper", + "_ke eper", + "_keep er", + "Ġar quivo", + "Ġ ReadOnly", + "ĠRead Only", + "_ curve", + "_c urve", + "_cur ve", + "_cu rve", + "k v", + "en tin", + "ent in", + "enti n", + "è ±", + "Ġ Ey", + "ĠE y", + ".im read", + "ĠP am", + "ĠPa m", + "i ffe", + "if fe", + "iff e", + "at ivity", + "ativ ity", + "x bc", + "xb c", + "Ġ grim", + "Ġg rim", + "Ġgr im", + "Ġgri m", + "- filled", + "-f illed", + "-fill ed", + "name se", + "names e", + "nam ese", + "' ]:", + "'] :", + "Ġ aur", + "Ġa ur", + "Ġau r", + "ĠGi bson", + "ĠGib son", + ". MouseEvent", + ".Mouse Event", + "Ġl ado", + "Ġla do", + "Ġlad o", + "ava doc", + "avad oc", + "Ġf amil", + "Ġfam il", + "Ġfa mil", + "Ġ Moder", + "ĠM oder", + "ĠMod er", + "ĠMo der", + "ĠMode r", + "f ps", + "fp s", + "ãĢĢ ãĢĢ", + "- example", + "-ex ample", + "ĠAl zheimer", + "Ġ Utf", + "ĠU tf", + "ĠUt f", + "_ arguments", + "_arg uments", + "_argument s", + "Con clusion", + "text Content", + "rem aining", + "remain ing", + "rema ining", + "Ġinterrupt s", + "Ġ Backup", + "ĠBack up", + "ĠBac kup", + "ĠM ong", + "ĠMon g", + "ĠMo ng", + "Ġre ceptors", + "Ġrecept ors", + "Ġreceptor s", + "Ġrecep tors", + "h istor", + "hi stor", + "hist or", + "his tor", + ".cor outines", + "Ġsh outed", + "Ġshout ed", + "Ġsho uted", + "Al arm", + "Ġcomb ust", + "Ġg rote", + "Ġgr ote", + "Ġgro te", + "ult ural", + "ultur al", + "( ids", + "(i ds", + "(id s", + "---- ----------------------------------------------------------------------------", + "---------------- ----------------------------------------------------------------", + "-------------------------------- ------------------------------------------------", + "---------------------------------------------------------------- ----------------", + "------------------------------------------------ --------------------------------", + "---------- ----------------------------------------------------------------------", + "---------------------------------------------------------------------------- ----", + "---------------------------------------------------------------------- ----------", + "ipl inary", + "iplina ry", + "O pts", + "Op ts", + "Opt s", + "ĠY ale", + "ĠYa le", + "local Storage", + "Ġequ ival", + "Ġequiv al", + "ĠF leet", + "ĠFle et", + "\\ b", + "* pi", + "*p i", + "ĠQ Label", + "æ ¡", + "Ġ vx", + "Ġv x", + "Ġ ACL", + "ĠA CL", + "ĠAC L", + "Ġsu cesso", + "Ġsuc esso", + "Ġsucess o", + "Ġ perc", + "Ġp erc", + "Ġper c", + "Ġpe rc", + "ĠN otre", + "ĠNo tre", + "ĠNot re", + "Ġan arch", + "Ġana rch", + "R ing", + "s pb", + "sp b", + "Ġ strpos", + "Ġstr pos", + "st ores", + "store s", + "sto res", + "stor es", + "ĠMap le", + "ĠMa ple", + "( MainActivity", + "(Main Activity", + "(\" \"))", + "(\"\" ))", + "(\"\") )", + "Ġview Holder", + "Qu ad", + "Ġig ual", + "ors che", + "orsch e", + ". margin", + ".m argin", + ".mar gin", + "Ġin die", + "Ġind ie", + "Ġfr anc", + "Ġfra nc", + "Ġfran c", + "ĠForm Builder", + "ĠPart icip", + "ĠParti cip", + ". flash", + ".f lash", + ".fl ash", + "Ġ storms", + "Ġstorm s", + "Ġstor ms", + "Ġsto rms", + "U lt", + "Ul t", + "Ġ fen", + "Ġf en", + "Ġfe n", + "[ new", + "[n ew", + "E ver", + "Ev er", + "= \"Ċ", + "=\" Ċ", + "Ġ localized", + "Ġlocal ized", + "Ġlocalize d", + "_ follow", + "_f ollow", + "Ġ nave", + "Ġn ave", + "Ġna ve", + "Ġnav e", + "Ġdom inance", + "Ġdomin ance", + "Ġdomina nce", + "( tile", + "(t ile", + "(ti le", + "J ournal", + "Jo urnal", + "Ġ VC", + "ĠV C", + "Ġpen etration", + "Ġpenet ration", + "Ġpenetr ation", + "ï¼ ķ", + "Ġcom partment", + "Ġcomp artment", + "Ġcompart ment", + "Ġb ids", + "Ġbi ds", + "Ġbid s", + "Form atted", + "Format ted", + "**** **/ĊĊ", + "****** /ĊĊ", + "*** ***/ĊĊ", + "***** */ĊĊ", + "******/ ĊĊ", + "******/Ċ Ċ", + "( city", + "(c ity", + "(ci ty", + "âĢĶ it", + "[ C", + "Ġuse Callback", + "a ub", + "au b", + ") ?.", + ")? .", + "Ġ VAR", + "ĠV AR", + "ĠVA R", + "ĠSe bastian", + "ĠSebast ian", + "ĠM oss", + "ĠMo ss", + "ĠMos s", + "Ġabund ant", + "G reg", + "Gr eg", + "Gre g", + "ÑĤ а", + "_ ci", + "_c i", + "Ġb ibli", + "Ġbib li", + "C RM", + "CR M", + "Ġ Attempt", + "ĠAt tempt", + "ĠAtt empt", + "is me", + "ism e", + "d ash", + "da sh", + "das h", + "ãĢ İ", + "_ mu", + "_m u", + ".Formatting Enabled", + "Ind eed", + "- direct", + "-d irect", + "-dir ect", + "-di rect", + "Ġs ucking", + "Ġsuc king", + "Ġsuck ing", + "Ġp ne", + "Ġpn e", + "ocab ulary", + "ĠP ackers", + "ĠPac kers", + "ĠPack ers", + ". Navigation", + ".N avigation", + ".Nav igation", + "Ġp ied", + "Ġpie d", + "Ġpi ed", + "cri bing", + "ĠSt uart", + ".To Double", + "Ġ Secondary", + "ĠSecond ary", + "S aving", + "Sa ving", + "ĠD ut", + "ĠDu t", + "ĠM add", + "ĠMad d", + "ĠMa dd", + "M agic", + "Mag ic", + ", H", + ".document Element", + "Ġ BST", + "ĠB ST", + "ĠBS T", + "Ġdif fers", + "Ġdiffer s", + "Ġdiff ers", + "Ġmore over", + "_ nd", + "_n d", + "SE ARCH", + "п ÑĢав", + "пÑĢа в", + "пÑĢ Ð°Ð²", + "æ ´", + "to Match", + "Ġde creasing", + "Ġdecre asing", + "- member", + "-m ember", + "am pus", + "amp us", + "( boost", + "D aily", + "Da ily", + "Data GridView", + "Ġ HttpContext", + "ĠHttp Context", + "Ġh ipp", + "Ġhi pp", + "Ġhip p", + "_ workers", + "_work ers", + "_worker s", + "- language", + "-l anguage", + "é ĵ", + "Ġcons isted", + "Ġconsist ed", + "a thing", + "ath ing", + "athi ng", + "ĠMer cury", + "ĠMerc ury", + "$ content", + "$c ontent", + "$con tent", + "Ġpract iced", + "Ġpractice d", + "Ġ Modules", + "ĠMod ules", + "ĠModule s", + "_ DAY", + "_D AY", + "_DA Y", + "Ġweakness es", + "ĠL odge", + "ĠLo dge", + "ĠLod ge", + "Ġ nar", + "Ġn ar", + "Ġna r", + "Ġ Mate", + "ĠM ate", + "ĠMat e", + "ĠMa te", + "Ġ jp", + "Ġj p", + "ĠHttp Headers", + "Ġs mo", + "Ġsm o", + "Ġ TOKEN", + "ĠT OKEN", + "ĠTO KEN", + "ĠTOK EN", + "] )(", + "]) (", + "Ġa qui", + "Ġaqu i", + "sw agen", + "Ġ srv", + "Ġs rv", + "Ġsr v", + "ĉ ans", + "ĉa ns", + "ĉan s", + "A round", + "Ar ound", + "ĠMan uel", + "Ġfiction al", + "Ġfict ional", + "Ġ IMG", + "ĠI MG", + "ĠIM G", + "Ġ .'", + "Ġ. '", + "Ġ Berry", + "ĠB erry", + "ĠBer ry", + "Ġwall paper", + "s exual", + "sex ual", + "i ero", + "ie ro", + "ier o", + "Ġ çļĦ", + "ìĨ Į", + "Backing Field", + "ĠAd rian", + "ĠAdri an", + "BASE PATH", + "Ġre peats", + "Ġrepe ats", + "Ġrepeat s", + "Ġbl ues", + "Ġblue s", + "Ġun predict", + "Ġunp redict", + "_ coll", + "_c oll", + "_col l", + "_co ll", + "st acle", + "sta cle", + "Ġ Tumblr", + "ĠT umblr", + "Ġ Elf", + "ĠE lf", + "ĠEl f", + "Ġass urance", + "Ġc ensus", + "Ġcen sus", + "Ġ IMPORT", + "ĠIM PORT", + "ĠIMP ORT", + "E NDER", + "EN DER", + "END ER", + "a nos", + "an os", + "ano s", + "Ġ =(", + "Ġ= (", + "ĠEl lis", + "ĠEll is", + "ĠElli s", + "\" ĊĊĊĊ", + "\"Ċ ĊĊĊ", + "\"ĊĊ ĊĊ", + "\"ĊĊĊ Ċ", + ". win", + ".w in", + "Ġ Above", + "ĠA bove", + "ĠAb ove", + "a lon", + "al on", + "alo n", + "_ tick", + "_t ick", + "_ti ck", + "Ġrepresent ations", + "Ġrepresentation s", + "Ġ æķ", + "Ġæ ķ", + "w id", + "wi d", + "ĠA rms", + "ĠAr ms", + "ĠArm s", + "L ista", + "List a", + "Li sta", + "_ failure", + "_f ailure", + "_fail ure", + "_ cm", + "_c m", + ".Flat Appearance", + "Ġth rone", + "Ġthr one", + "Ġthro ne", + "P atch", + "Pat ch", + "ĠV oy", + "ĠVo y", + "en gl", + "eng l", + "Ġnegot iating", + "> `", + "Ġshoot s", + "Ġsho ots", + "Ġ FPS", + "ĠF PS", + "ĠFP S", + ". Year", + ".Y ear", + "ĠK iss", + "ĠKi ss", + "ĠKis s", + "en ción", + "enc ión", + "enci ón", + "re eting", + "ree ting", + "reet ing", + "From File", + "Ġresign ation", + "Ø ·", + "Ġt wins", + "Ġtw ins", + "Ġtwin s", + "ư ợ", + "ưỠ£", + "Ġge bru", + "Ġgeb ru", + ". getContent", + ".get Content", + ".getC ontent", + ". Tree", + ".T ree", + ".Tr ee", + "Ġ Employees", + "ĠEmployee s", + "ĠEmploy ees", + "ĠF IFA", + "ĠFI FA", + "Ġc ertainty", + "Ġcert ainty", + "Ġcertain ty", + "( Cl", + "(C l", + "Ġ totals", + "Ġtot als", + "Ġtotal s", + "ed itable", + "edit able", + "edi table", + "ॠĢ", + ". Reporting", + ".Report ing", + "M as", + "Ma s", + "qu iet", + "qui et", + ". rules", + ".r ules", + ".ru les", + ".rule s", + "Ġ VO", + "ĠV O", + "con exion", + ", K", + "Ġ allocator", + "Ġal locator", + "Ġall ocator", + "Ġalloc ator", + "ĠPow der", + "\\ Repository", + "B eat", + "Be at", + "_ tipo", + "_t ipo", + "_tip o", + "_ti po", + "Ġ[ '',", + "Ġ[' ',", + "_ INTR", + "_IN TR", + "_INT R", + "Ġ <<<", + "Ġ< <<", + "Ġ<< <", + "< hr", + " \");čĊ", + ">\" );čĊ", + ">\") ;čĊ", + "drop IfExists", + "ĠB eg", + "ĠBe g", + "_ HAL", + "_H AL", + "Ġcross AxisAlignment", + "Ġ Evidence", + "ĠE vidence", + "ĠEv idence", + "Ġpec uliar", + "Ġin stitute", + "Ġinstit ute", + "ve is", + "Ġ fft", + "Ġf ft", + "Ġff t", + "à ģ", + "Ġzo ekt", + "Ġzoek t", + "an aly", + "ana ly", + "anal y", + "ĠHome land", + "ĠHom eland", + "Ġpen etr", + "Ġpenet r", + "udden ly", + "ĉ element", + "ĉe lement", + "ĉel ement", + "ĉelem ent", + "ĠB ren", + "ĠBr en", + "ĠBre n", + "ĠTr udeau", + "ĠCub an", + "ĠCu ban", + "ĠCuba n", + "j am", + "ja m", + "us lim", + "_ ev", + "_e v", + "Ġs tems", + "Ġst ems", + "Ġste ms", + "Ġstem s", + "} %", + "Ŀ å§ĭ", + "Ġbr anding", + "Ġbrand ing", + "Ġbran ding", + "Ġcorrespond ence", + ". jquery", + ".j query", + "¢ åįķ", + "ĠRe ads", + "ĠRead s", + "(Http StatusCode", + "(HttpStatus Code", + "as sin", + "ass in", + "assi n", + "( slot", + "(s lot", + "(sl ot", + "ĠGrad uate", + "// /<", + "/// <", + "Ġinformation s", + "Ġinform ations", + "Ġinformat ions", + "EN ABLE", + "ENA BLE", + "Ġp uis", + "Ġpu is", + "Ġ finder", + "Ġf inder", + "Ġfind er", + "Ġfin der", + "Ġfi nder", + "Ġfinde r", + "ĠB ris", + "ĠBr is", + "ĠBri s", + "Ġnett steder", + "_ mid", + "_m id", + "_mi d", + "Ġ ogs", + "Ġo gs", + "Ġog s", + "ĠSter ling", + "Ġar rog", + "Ġarr og", + "str ftime", + "| ĊĊ", + "|Ċ Ċ", + "Ġ vox", + "Ġv ox", + "Ġvo x", + "Ġ Regardless", + "ĠReg ardless", + "Ġ eso", + "Ġe so", + "Ġes o", + "Ġ Comfort", + "ĠCom fort", + ".Boolean Field", + "Ġ uh", + "Ġu h", + "A CY", + "AC Y", + "Ġsque ez", + "ĠV ic", + "ĠVi c", + "con tro", + "cont ro", + "contr o", + ". lo", + ".l o", + "Ġ ire", + "Ġi re", + "Ġir e", + "ĠCom edy", + "ĠCome dy", + "ë ¶", + "Ġorig inated", + "Ġorigin ated", + "Ġoriginate d", + "Ġ shipment", + "Ġsh ipment", + "Ġship ment", + "| max", + "|m ax", + "_ guid", + "_g uid", + "_gui d", + "le vation", + "lev ation", + "н аÑı", + "на Ñı", + "( undefined", + "(un defined", + "Ġ DDR", + "ĠD DR", + "ĠDD R", + "Ġshoot ings", + "Ġshooting s", + "ĠLat ino", + "ĠLatin o", + "END OR", + "Ġaver aging", + "Ġgre eted", + "Ġgreet ed", + "Ġthe aters", + "Ġtheater s", + "Ġtheat ers", + "о е", + "оРµ", + "Ġ dB", + "Ġd B", + "Ġ gst", + "Ġg st", + "Ġgs t", + "Ġde finite", + "Ġdef inite", + "Ġdefinit e", + "Ġdefin ite", + ". Storage", + ".St orage", + ". her", + ".h er", + ".he r", + "Ġa fore", + "Ġaf ore", + "Ġ Reality", + "ĠRe ality", + "ĠReal ity", + "ĠG ods", + "ĠGod s", + "ĠGo ds", + "v ersed", + "ver sed", + "vers ed", + "verse d", + "Ġhand some", + "Ġhands ome", + "Ġ excluding", + "Ġex cluding", + "Ġexcl uding", + "( ad", + "(a d", + "Qu otes", + "Quote s", + "Ġ Scheme", + "ĠS cheme", + "ĠSch eme", + "ĠSche me", + "? q", + "ĠT amil", + "ĠTa mil", + "ĠTam il", + "T icks", + "Tick s", + "Ti cks", + "Ġ pest", + "Ġp est", + "Ġpe st", + "Ġpes t", + "' n", + "Ġporn ography", + "_ modal", + "_m odal", + "_mod al", + "_mo dal", + "Ġ ----------", + "Ġ- ---------", + "Ġ-- --------", + "Ġ---- ------", + "Ġ--- -------", + "Ġ----- -----", + "Ġ------ ----", + "Ġ-------- --", + "Ġ------- ---", + "Ġ--------- -", + "Ġd isposable", + "Ġdis posable", + "Ġdispos able", + "F REE", + "FR EE", + "Ġsh ark", + "Ġsha rk", + "Ġshar k", + "C HE", + "CH E", + "Ġdep icted", + "Ġdepict ed", + "Ġdemonstr ations", + "Ġdemonstration s", + "ĠK illed", + "ĠKill ed", + "ĠKil led", + "Ġ RULE", + "ĠR ULE", + "ĠRU LE", + "Ġobs essed", + "Ġobsess ed", + "Ġs implified", + "Ġsimpl ified", + "Post al", + "Pos tal", + "Po stal", + "Ġconcept ual", + "Ġ pst", + "Ġp st", + "Ġps t", + "L as", + "La s", + "_ PROJECT", + "_PRO JECT", + "uc ceeded", + "ucceed ed", + "o lu", + "ol u", + "ÄŁ i", + "Ġpersonal ities", + "Ġ reshape", + "Ġre shape", + "Ġres hape", + "Ġresh ape", + "Ġen closed", + "Ġenc losed", + "ĉ ptr", + "ĉp tr", + "ĉpt r", + "Ġt utorials", + "Ġtutorial s", + "Ġtutor ials", + "Ġexpl oded", + "Ġexplo ded", + "Ġexplode d", + "_ DIRECTORY", + "_DIRECT ORY", + "åĨħ 容", + "Ġc anon", + "Ġcan on", + "Ġca non", + "Ġrecogn ise", + "P AD", + "PA D", + "Ġ Approx", + "ĠApp rox", + "ĠAp prox", + "ĠAppro x", + "Ġ Restore", + "ĠRe store", + "ĠRest ore", + "Ġ Important", + "ĠImport ant", + "Ġhe avier", + "Ġheav ier", + ". Sequential", + ".Se quential", + "E arth", + "Ear th", + "ĠM ilk", + "ĠMil k", + "ĠMi lk", + ".set Request", + ". tem", + ".t em", + ".te m", + "Ġre construct", + "Ġrecon struct", + "Ġskept ical", + "Ġskeptic al", + "_ Private", + "_Pr ivate", + "B UF", + "BU F", + "q ua", + "qu a", + ": a", + "Ġ sek", + "Ġs ek", + "Ġse k", + "Ġd well", + "Ġdw ell", + "o ssa", + "os sa", + "oss a", + "Ġreward ed", + "Ġrew arded", + "и й", + "( topic", + "(t opic", + "(to pic", + "(top ic", + "_ partition", + "_part ition", + "Ġ__ ________________", + "Ġ______ ____________", + "Key words", + "Keyword s", + "ĠFr anco", + "ĠFranc o", + "ĠFran co", + "L ite", + "Li te", + "Lit e", + "Ġn aken", + "Ġna ken", + "Ġnak en", + "Ġ за", + "Ġз а", + "O BJECT", + "OB JECT", + "OBJ ECT", + "Ġcraft s", + "Ġcra fts", + "Ġ Swap", + "ĠS wap", + "ĠSw ap", + ".X na", + ". Connect", + ".Con nect", + ".Conn ect", + "Ġbalcon y", + "( real", + "(re al", + "ĠBar nes", + "ĠBarn es", + "b ir", + "bi r", + "Ġ Twenty", + "ĠTw enty", + "ĠTwe nty", + "a yan", + "ay an", + "aya n", + "at ars", + "ata rs", + "atar s", + "ĠPro pel", + "ĠProp el", + "ĠIh nen", + "Up grade", + "Ġc urb", + "Ġcur b", + "Ġcu rb", + "- second", + "-se cond", + "Ġn eph", + "Ġne ph", + "Ġnep h", + ". pres", + ".p res", + ".pre s", + ".pr es", + "ìŀ ħ", + ". seq", + ".s eq", + ".se q", + "Ġp added", + "Ġpad ded", + "Ġpadd ed", + "\" ?", + "j l", + "ãĥ ¬", + "' ) a", + "Co ordinates", + "Coordinate s", + "Ġen acted", + "Ġenact ed", + "EN TS", + "ENT S", + "Ġ lac", + "Ġl ac", + "Ġla c", + ". final", + ".f inal", + ".fi nal", + ".fin al", + "ĠPhp Storm", + "c alled", + "cal led", + "call ed", + "Ġin quiries", + ". middleware", + ".m iddleware", + ".middle ware", + "ĠD owntown", + "ĠDown town", + "/ ';Ċ", + "/' ;Ċ", + "Ġkil omet", + "ac cel", + "acc el", + "Ġqu ien", + "Ġq uien", + "Ġqui en", + "w string", + "ws tring", + "set Data", + "Ġman era", + "Ġmane ra", + "Ġmod ular", + "r imp", + "ri mp", + "rim p", + "Ġtar iffs", + "Ġtariff s", + "Ġtarif fs", + "âĢĻ il", + "âĢĻi l", + "_TH ROW", + "/ color", + "/c olor", + "/co lor", + "Ġ HTMLElement", + "ĠHT MLElement", + "ĠHTML Element", + "Ġc arro", + "Ġcar ro", + "Ġcarr o", + "Ġpr ere", + "Ġpre re", + "Ġprer e", + "Ġplot ting", + "Ġ Positive", + "ĠPos itive", + "ĠM achines", + "ĠMachine s", + "ĠMach ines", + "O TES", + "OT ES", + "OTE S", + "á» Ľ", + "ple asant", + "Ġ alte", + "Ġa lte", + "Ġal te", + "Ġalt e", + "Ġa inda", + "Ġai nda", + "Ġain da", + "th ese", + "the se", + "thes e", + "Ġ cors", + "Ġc ors", + "Ġco rs", + "Ġcor s", + "i pay", + "ip ay", + "ipa y", + "ĠAdv isory", + "ĠAdvis ory", + "ĠAdvisor y", + "ĠRub io", + "ĠRu bio", + "j q", + "Ġl imestone", + "Ġlim estone", + "Ġlime stone", + "Ġdet ached", + "Ġdetach ed", + "设 ç½®", + "t enant", + "te nant", + "ten ant", + "Ġ Depth", + "ĠDe pth", + "ĠDep th", + "ĠDept h", + "a lore", + "al ore", + "alo re", + "ĠÑģÑĤ ÑĢок", + "ĠÑģÑĤÑĢ Ð¾Ðº", + "ĠÑģÑĤÑĢо к", + "Ġ FORE", + "ĠF ORE", + "ĠFOR E", + "ĠFO RE", + "ĠL ay", + "ĠLa y", + "p resentation", + "present ation", + ") ');Ċ", + ")' );Ċ", + ".sub plots", + ".subplot s", + "Ï ĥ", + "N OW", + "NO W", + "G ar", + "Ga r", + "h andles", + "handle s", + "hand les", + "a bra", + "ab ra", + "abr a", + "put ies", + "pu ties", + "ĠElect rical", + "ĠElectric al", + "M iddle", + "Mid dle", + "r opic", + "ro pic", + "rop ic", + "Ġ JD", + "ĠJ D", + "Ġ Dyn", + "ĠD yn", + "ĠDy n", + "ĠB ristol", + "ĠBr istol", + "ĠBris tol", + "ĠMc Carthy", + "ĠMcCart hy", + "Ġstr iker", + "Ġstri ker", + "Ġstrike r", + "Ġenum erable", + "Ġenumer able", + "ĠE van", + "ĠEv an", + "ĠEva n", + ". defaults", + ".default s", + "qu ences", + "que nces", + "quence s", + ") ||", + ")| |", + "ĉ token", + "ĉt oken", + "ĉto ken", + "â Ĺı", + "âĹ ı", + "- dropdown", + "-d ropdown", + "-drop down", + "ST ORE", + "Ġ Graphic", + "ĠG raphic", + "ĠGraph ic", + "( pp", + "(p p", + "Ex pl", + "Exp l", + "Ġup wards", + "Ġupward s", + "ĠD istributed", + "ĠDistrib uted", + "Ġ WEB", + "ĠW EB", + "ĠWE B", + "J er", + "Je r", + "is NaN", + "çĶŁ æĪIJ", + "> R", + "üss en", + "üs sen", + "e fs", + "ef s", + "Ġun cover", + "Ġunc over", + "Ġl ud", + "Ġlu d", + ". calculate", + ".c alculate", + ".cal culate", + ".calc ulate", + "Ġ intptr", + "Ġint ptr", + "Ġmidfield er", + ". Headers", + ".Header s", + ".He aders", + ".Head ers", + "Ġ mf", + "Ġm f", + "e ref", + "er ef", + "ere f", + ". Metro", + ".M etro", + ".Me tro", + "Ġ Speaking", + "ĠSpe aking", + "ĠSpeak ing", + ": b", + "Ġcryptoc urrencies", + "Ġd emons", + "Ġde mons", + "Ġdem ons", + "Ġdemon s", + "Ġdemo ns", + "ĉ EXPECT", + "Ġw icked", + "y outube", + "you tube", + "youtu be", + ": Int", + ":I nt", + "ĠH indi", + "ĠHind i", + "ĠHin di", + "Ġ CAT", + "ĠC AT", + "ĠCA T", + "Ġ ع", + "ĠØ ¹", + "r ar", + "ra r", + "o more", + "om ore", + "omo re", + "omor e", + "/ per", + "/p er", + "/ license", + "/lic ense", + "/l icense", + "Ġre im", + "Ġa waiting", + "Ġawait ing", + "Ġle thal", + "Ġlet hal", + "Ġleth al", + "Ġ EF", + "ĠE F", + "r ounded", + "ro unded", + "round ed", + "ĠPl atinum", + "Ġв Ñģе", + "ĠвÑģ е", + ". coords", + ".co ords", + ".coord s", + ". Device", + ".D evice", + ".De vice", + ".Dev ice", + "/ item", + "/i tem", + "Ġ Wenn", + "ĠW enn", + "ĠWe nn", + "ĠWen n", + "compile Components", + "ĠK inder", + "ĠKind er", + "ĠKi nder", + "ĠKin der", + ".remove Item", + "Ġ anda", + "Ġa nda", + "Ġand a", + "Ġan da", + "b nb", + "bn b", + "Ġ pra", + "Ġp ra", + "Ġpr a", + "( transaction", + "(trans action", + "Ġembarrass ing", + "ĉ BOOL", + ".content View", + "Ġevent data", + "at ore", + "ator e", + "ato re", + "Ġprovided In", + "ir ma", + "irm a", + "Ġz ona", + "Ġzo na", + "_ HW", + "_H W", + "æ Ļ", + "Ġst ove", + "Ġsto ve", + "Ġcounter part", + "_ Product", + "_Pro duct", + "_MAN AGER", + "Ġinf ring", + "Ġinfr ing", + "Ġ ERA", + "ĠE RA", + "ĠER A", + "_ party", + "_p arty", + "_part y", + "_par ty", + "Ñ ij", + "Ġin ici", + "Ġi nici", + "Ġini ci", + "_ Request", + "_Re quest", + "Ġmir acle", + "Ġmirac le", + "Ġcancel Button", + "S py", + "Sp y", + "at ó", + "Ġpol ish", + "Ġpo lish", + "Ġpolis h", + "ĠNic ole", + "ĠNi cole", + "ĠNico le", + "ĠNicol e", + ". displayName", + ".display Name", + "\\ Requests", + "\\Request s", + "Ġuse History", + "Router Module", + "Ġst ared", + "Ġstar ed", + "Ġsta red", + "Ġstare d", + "I DER", + "ID ER", + "IDE R", + "Ñĥнк ÑĨи", + "Ġ nota", + "Ġn ota", + "Ġnot a", + "Ġno ta", + "$ arr", + "$a rr", + "$ar r", + "pec ified", + "Ġt opp", + "Ġto pp", + "Ġtop p", + "_DR IVER", + "_DRIVE R", + "/ ng", + "/n g", + "å ł", + "_ tm", + "_t m", + "% timeout", + "< s", + "Ġ (*)", + "Ġ( *)", + "Ġ(* )", + "Ġ HttpRequest", + "ĠHttp Request", + "_ TRACK", + "_TR ACK", + "_TRA CK", + "( note", + "(n ote", + "(not e", + "(no te", + "Ġ Explore", + "ĠExp lore", + "ĠExpl ore", + "_ serv", + "_s erv", + "_se rv", + "_ser v", + "Ġ ç»", + "Ġç »", + "B inder", + "Bind er", + "Bin der", + "Bi nder", + "+ \",", + "+\" ,", + ". att", + ".a tt", + ".at t", + "ĠEth i", + "ĠEt hi", + "Ġc ódigo", + "= '\\", + "=' \\", + ". lines", + ".l ines", + ".line s", + ".li nes", + ".lin es", + "( Of", + "(O f", + "å° Ĩ", + "miss ible", + "Ġ vé", + "Ġv é", + "Ġac oustic", + "Ġcraft ing", + "n it", + "ni t", + ". ba", + ".b a", + "ĠLuc y", + "ĠLu cy", + "Ġi Pod", + "ĠiP od", + "Ġpup ils", + "Ġpupil s", + "- max", + "-m ax", + "_ wr", + "_w r", + "( cp", + "(c p", + "Ġ REPORT", + "ĠRE PORT", + "ĠREP ORT", + "Ġ dns", + "Ġd ns", + "Ġdn s", + "Ġ References", + "ĠRe ferences", + "ĠReference s", + "ĠRefer ences", + "Ġunder taken", + "Ġundert aken", + "Ġundertake n", + "Ġkø benhavn", + "Ġ chai", + "Ġc hai", + "Ġch ai", + "Ġcha i", + "ĠC roat", + "ĠCro at", + "_ Log", + "_L og", + "r owned", + "row ned", + "rown ed", + "_ med", + "_m ed", + "_me d", + "ĉ date", + "ĉd ate", + "# __", + "Ġcost umes", + "Ġcostume s", + "Ġ Requires", + "ĠRe quires", + "ĠRequire s", + "aff le", + "ç Ĭ¶æĢģ", + "çĬ¶ æĢģ", + "-S emit", + "-Se mit", + "ela ide", + "еÑĤ од", + "Ġp estic", + "Ġpes tic", + "Ġpest ic", + "Ġ dra", + "Ġd ra", + "Ġdr a", + "D OCUMENT", + "DOC UMENT", + "Ġ ...čĊ", + "Ġ... čĊ", + "Ġ.. .čĊ", + "} `}Ċ", + "}` }Ċ", + "}`} Ċ", + "ĠA uction", + "ĠAu ction", + "Ġ Dock", + "ĠD ock", + "ĠDo ck", + "ĠDoc k", + "xxxx xxxx", + "( getString", + "(get String", + "ħ į", + "Ġborder Width", + "ĠM achinery", + "ĠMachine ry", + "ĠMach inery", + "Ġpredict able", + "Ġpredic table", + ". SH", + ".S H", + "Ġam plitude", + "Ġampl itude", + ".for Root", + "I Navigation", + "IN avigation", + "Table Model", + "at trib", + "att rib", + "attr ib", + "Ġmaneu ver", + "Ġexc av", + "B ERS", + "BER S", + "BE RS", + "Ġd apat", + "Ġda pat", + "Ġdap at", + "Ġinstall ations", + "Ġinstallation s", + "Ġinstal lations", + ". Async", + ".A sync", + ".As ync", + "Ġ rays", + "Ġr ays", + "Ġra ys", + "Ġray s", + "= âĢĿ", + "; ččĊ", + ". crypto", + ".c rypto", + "_ dbg", + "_d bg", + "_db g", + "Ġ Enumerable", + "ĠEnum erable", + "Of Size", + "_ epochs", + "_epoch s", + "m w", + "M ENU", + "ME NU", + "out line", + "ĠP apers", + "ĠPa pers", + "ĠPaper s", + "ĠPap ers", + "= ===========Ċ", + "== ==========Ċ", + "==== ========Ċ", + "======== ====Ċ", + "=== =========Ċ", + "============ Ċ", + "=========== =Ċ", + "========= ===Ċ", + "========== ==Ċ", + "====== ======Ċ", + "===== =======Ċ", + "======= =====Ċ", + "Ġuniform s", + "Ġuni forms", + "ĠG ig", + "ĠGi g", + "- package", + "-p ackage", + "-pack age", + "ĠJ enkins", + "ĠJen kins", + "Ġ HomePage", + "ĠHome Page", + ". isSelected", + ".is Selected", + "Ġmechan ic", + "Ġmech anic", + "M K", + "Ġ Sounds", + "ĠS ounds", + "ĠSo unds", + "ĠSou nds", + "ĠSound s", + "//---------------------------------------------------------------- -------------Ċ", + "//---------------------------------------------------------------------------- -Ċ", + "Ġresearch ing", + "Ġ infos", + "Ġin fos", + "Ġinfo s", + "Ġinf os", + "o graphics", + "og raphics", + "ograph ics", + "ographic s", + "er set", + "ers et", + "erse t", + "([ '/", + "([' /", + "ĠTim ber", + ". agent", + ".a gent", + ".ag ent", + ".age nt", + ".to JSON", + "_ commands", + "_command s", + "_comm ands", + "p aring", + "par ing", + "pa ring", + "_ adjust", + "_ad just", + "_adj ust", + ". nome", + ".n ome", + ".no me", + ".nom e", + "( glm", + "(g lm", + "(gl m", + "Status Bar", + "file path", + "? âĢĻ", + "Ġdet ective", + "Ġdetect ive", + "Ġuns erer", + "Ġunser er", + "Ġunsere r", + "ĠTi bet", + "ĠTib et", + "EN DED", + "END ED", + "( seed", + "(s eed", + "(se ed", + "Ġsne ak", + "Ġa mor", + "Ġam or", + "Ġamo r", + "=\" //", + "=\"/ /", + "ĠPan thers", + "ĠPanther s", + "all ax", + "alla x", + "ĠL IVE", + "ĠLI VE", + "ĉ DWORD", + "ĉD WORD", + "] =-", + "]= -", + "Ġt ornado", + "Ġtorn ado", + "/ min", + "/m in", + "Ġl ungs", + "Ġlung s", + "Ġlun gs", + "- current", + "-c urrent", + "-cur rent", + "Ġ Booking", + "ĠBo oking", + "ĠBook ing", + "ĠBoo king", + "åĪĹ è¡¨", + "Ġenjoy ment", + "ठ°", + "J A", + "t yped", + "type d", + "ty ped", + "typ ed", + ". Btn", + ".B tn", + "f at", + "fa t", + "u gal", + "ug al", + "uga l", + "Ġ Shares", + "ĠSh ares", + "ĠShare s", + "ĠSha res", + "ĠShar es", + "Ġdis gr", + "Ġdisg r", + "Ġ BAR", + "ĠB AR", + "ĠBA R", + "Ġ FOX", + "ĠF OX", + "ĠFO X", + "Op code", + "Ġ Sz", + "ĠS z", + "key down", + "iction aries", + "Ġdet ailing", + "Ġdetail ing", + "} ))Ċ", + "}) )Ċ", + "})) Ċ", + "Ġ pok", + "Ġp ok", + "Ġpo k", + "Ġdemonstr ating", + "Ġ notation", + "Ġn otation", + "Ġnot ation", + "Ġnota tion", + "l ayers", + "la yers", + "lay ers", + "layer s", + "@ if", + "ĠN PR", + "ĠNP R", + ".strict Equal", + "Ġ Recipes", + "ĠRec ipes", + "ĠRecipe s", + ". Tensor", + ".T ensor", + "Ġliqu or", + "Ġdeb ts", + "Ġdebt s", + ". endsWith", + ".end sWith", + ".ends With", + "W heel", + "Wh eel", + ". Pos", + ".P os", + "C SV", + "CS V", + "$ arity", + "$ar ity", + "Ġun stable", + "Ġuns table", + "Ġunst able", + "( loss", + "(l oss", + "(lo ss", + "EN SOR", + "ENS OR", + "Ġel even", + "Ġele ven", + "Ġelev en", + "ĠL opez", + "ĠLo pez", + "ĠHop kins", + "c onom", + "con om", + "co nom", + "cono m", + "ĠS eth", + "ĠSe th", + "ĠSet h", + "Ġpo ems", + "Ġpoem s", + "Q uant", + "Qu ant", + "Ġg sl", + "Ġgs l", + "Ġsy rup", + "Ġs ibling", + "Ġsi bling", + "Ġc ass", + "Ġca ss", + "Ġcas s", + "- vous", + "-v ous", + "ö t", + "_P ATTERN", + "_ SECTION", + "_SE CTION", + "_SEC TION", + "est imated", + "estimate d", + "up grade", + ". mongodb", + ".m ongodb", + ".mongo db", + "ĠBo at", + "_ CTX", + "_C TX", + "_CT X", + "Ġfetch ing", + "Ġfet ching", + "u stin", + "us tin", + "ust in", + "p iel", + "pi el", + "pie l", + "M arg", + "Mar g", + "Ma rg", + "Ref lection", + "Reflect ion", + "Ġ duct", + "Ġd uct", + "Ġdu ct", + "ĠMunicip al", + "Ġ bx", + "Ġb x", + ". GetCurrent", + ".Get Current", + "m link", + "ml ink", + "mlin k", + "ĠAccount ing", + "ĠGen eva", + "ĠGene va", + "_ Pos", + "_P os", + "Ġp asser", + "Ġpass er", + "Ġpas ser", + "Ġpasse r", + "Ġhear ings", + "Ġhearing s", + "com pan", + "comp an", + "Ġfrag ile", + "Initial izer", + "Initialize r", + "w alker", + "walk er", + "wal ker", + ". Material", + ".M aterial", + "ĠH unting", + "ĠHun ting", + "ĠHunt ing", + "try side", + "trys ide", + "Ġ kat", + "Ġk at", + "Ġka t", + "Ġcl erk", + "Ġcle rk", + "Ġcler k", + "á Ł", + "do ing", + "doi ng", + "ĉ group", + "ĉg roup", + "ĉgr oup", + "Ġsan ction", + "Ġsanct ion", + ". lb", + ".l b", + "Ġ Lazy", + "ĠL azy", + "ĠLa zy", + "ĠLaz y", + "Ġ Constraint", + "ĠCon straint", + "ĠConstr aint", + "P agination", + "Pag ination", + "Ġpou vez", + "ĠInd icates", + "M ER", + "ME R", + "Ġc ours", + "Ġco urs", + "Ġcour s", + "Ġcou rs", + "Ġy early", + "Ġyear ly", + "Ġg rosse", + "Ġgro sse", + "Ġgross e", + "Ġgros se", + "abb rev", + "abbr ev", + "Ġ DON", + "ĠD ON", + "ĠDO N", + "Ġpro ceeded", + "Ġproceed ed", + "ent lich", + "Ġ propertyName", + "Ġproperty Name", + "ĠTe aching", + "ĠTea ching", + "ĠTeach ing", + "st adt", + "sta dt", + "stad t", + "Ġc utoff", + "Ġcut off", + "or ners", + "orn ers", + "orne rs", + "Ġa frica", + "Ġaf rica", + "Ġafr ica", + "Ġ renders", + "Ġr enders", + "Ġrender s", + "Ġren ders", + "Ġrend ers", + "ĠYan kees", + "ĠYankee s", + "Ġ Toolbar", + "ĠTool bar", + "s paces", + "sp aces", + "space s", + "spa ces", + ".fill Style", + "Ġseg undo", + "Ġsegu ndo", + "_ strlen", + "_st rlen", + "_str len", + ". Firebase", + ".F irebase", + ".Fire base", + "å¤ Ħ", + "Ġmention ing", + "\\ (", + "ĠVal ve", + "S etter", + "Set ter", + "Ġsp ans", + "Ġspan s", + "Ġspa ns", + "ĠAl cohol", + "Ġ Letters", + "ĠLet ters", + "ĠLetter s", + "\\ xe", + "\\x e", + "Ġ TK", + "ĠT K", + "_ BLE", + "_B LE", + "_BL E", + ". getResult", + ".get Result", + "< Player", + "

\"", + "=> \"", + "t lement", + "tle ment", + "tl ement", + "$ (\"", + "$( \"", + "From String", + "ĠB ild", + "ĠBi ld", + "ĠBil d", + "Ġcon ventions", + "Ġconv entions", + "Ġconvent ions", + "Ġconvention s", + "_ native", + "_n ative", + "_nat ive", + "Ġ Inspector", + "ĠIns pector", + "ĠInsp ector", + "ĠP ist", + "ĠPi st", + "ĠPis t", + "u bar", + "ub ar", + "uba r", + "Ġ regs", + "Ġre gs", + "Ġreg s", + "ĠP ilot", + "ĠPi lot", + "ĠPil ot", + "T hus", + "Th us", + "Thu s", + "> '+", + ">' +", + "Ġ cela", + "Ġc ela", + "Ġce la", + "Ġcel a", + ". news", + ".n ews", + ".new s", + ".ne ws", + "( Product", + "L iving", + "Li ving", + "Liv ing", + "R ussia", + "Russ ia", + "Ġ facet", + "Ġf acet", + "Ġfac et", + "Ġface t", + "e tical", + "et ical", + "etic al", + "eti cal", + "Ġ[ '$", + "Ġ[' $", + "/ [", + "Ġ Dire", + "ĠD ire", + "ĠDi re", + "ĠDir e", + "Ġg ases", + "Ġgas es", + "Ġga ses", + "ĠIN FORMATION", + "Ġ Eat", + "ĠE at", + "ĠEa t", + "ĠFor ums", + "ĠForum s", + "Ġ Characters", + "ĠChar acters", + "ĠCharacter s", + "_ met", + "_m et", + "_me t", + "Ġ ìĭľ", + "Ġìĭ ľ", + "Ġk ings", + "Ġking s", + "Ġkin gs", + "a chie", + "ach ie", + "achi e", + "Ġ Lambda", + "ĠL ambda", + "ĠLamb da", + "Ġt imers", + "Ġtime rs", + "Ġtim ers", + "Ġti mers", + "Ġtimer s", + "ĠL ighting", + "ĠLight ing", + "ĠCas ey", + "ĠCase y", + "ĠCa sey", + "ad dir", + "add ir", + "an dex", + "and ex", + "ande x", + ". answer", + ".an swer", + "Ġ Hip", + "ĠH ip", + "ĠHi p", + "ĠPr incip", + "Start Date", + "Ġ ãĢĮ", + "ĠãĢ Į", + "t res", + "tr es", + "tre s", + "Ġ &#", + "Ġ& #", + ".Max Value", + "ĠPro blems", + "ĠProblem s", + "ĠProb lems", + "ĠProble ms", + "Ġ latex", + "Ġla tex", + "Ġlate x", + "Ġlat ex", + "Of Class", + "ĠL ynn", + "ĠLy nn", + "ĠLyn n", + "/ /'", + "// '", + "Ġvoy age", + "Ġsh uttle", + "Ġshut tle", + "ĠR oller", + "ĠRo ller", + "ĠRoll er", + "ĠRol ler", + "ĠRuntime Error", + "u ya", + "uy a", + "D ic", + "Di c", + "ĉ builder", + "ĉb uilder", + "ĉbuild er", + "Ġbul lying", + "Ġbull ying", + "Ġbully ing", + "Ġsimple st", + "Ġsimp lest", + "Ġsimpl est", + "Ġsimples t", + ". called", + ".c alled", + ".call ed", + ".cal led", + "Ġ LR", + "ĠL R", + "Ġmor ality", + "Ġmoral ity", + "Ġst urdy", + "tr acking", + "track ing", + ". swagger", + ".sw agger", + "_ BIND", + "_B IND", + "_BIN D", + "I TOR", + "IT OR", + "ITO R", + "-url encoded", + "Ġ Ñħ", + "ĠÑ ħ", + "ĠTr inity", + "Ġtr aps", + "Ġtra ps", + "Ġtrap s", + "Ġ |-", + "Ġ| -", + "Ġ setText", + "Ġset Text", + "Ġbar gain", + "Ġbarg ain", + "Ġbr akes", + "Ġbra kes", + "Ġbrake s", + ". getCode", + ".get Code", + ".g etCode", + ".getC ode", + "Ġm igrate", + "Ġmigr ate", + "Ġmig rate", + "Ġ ribbon", + "Ġr ibbon", + "Ġrib bon", + ") return", + ")r eturn", + "Ġ charger", + "Ġch arger", + "Ġchar ger", + "Ġcharg er", + "Ġcharge r", + "a com", + "ac om", + "aco m", + "ADI US", + "ĠAmb assador", + "- after", + "-a fter", + "Ġ anni", + "Ġan ni", + "Ġann i", + "ĉ spin", + "ĉs pin", + "ĉsp in", + "Con cept", + "ĠHend erson", + "Ġ HOST", + "ĠH OST", + "ĠHO ST", + ". rank", + ".r ank", + ".ra nk", + "ĠNorth east", + "ĠNor theast", + "Ġber lin", + "Ġre quis", + "Ġreq uis", + "Ġrequ is", + ". feed", + ".f eed", + ".fe ed", + "Ġsource Mapping", + "ĠRen contre", + ". ajax", + ".a jax", + "nest js", + "Ġt rek", + "Ġtr ek", + "Ġtre k", + "ĠN acional", + "Ġ& [", + "Ġpay able", + "or tex", + "ort ex", + "orte x", + "Ġ dept", + "Ġd ept", + "Ġde pt", + "Ġdep t", + "field Name", + "Ġcomp letes", + "Ġcomple tes", + "Ġcomplet es", + "Ġcompl etes", + "Ġcomplete s", + "ĠR VA", + "ĠRV A", + "Ġon ions", + "Ġonion s", + "al ignment", + "align ment", + "Form ats", + "Format s", + "Ġ' {$", + "Ġ'{ $", + "Hash Set", + "ĠB od", + "ĠBo d", + ".Invariant Culture", + "Ġsett lements", + "Ġsettlement s", + "Ġsettle ments", + "Ġ hydr", + "Ġhy dr", + ". updated", + ".update d", + ".up dated", + "v enth", + "ve nth", + "vent h", + "ven th", + "( seconds", + "(se conds", + "(second s", + "(sec onds", + "=\" /\"", + "=\"/ \"", + "Ġweb page", + "( ĊĊ", + "(Ċ Ċ", + "Ġ tir", + "Ġt ir", + "Ġti r", + "Ġt oes", + "Ġto es", + "Ġtoe s", + "ĠB rick", + "ĠBr ick", + "ĠBri ck", + "Ġamb ition", + "Ġambit ion", + "P ot", + "Po t", + "= max", + "=m ax", + "E TIME", + "ET IME", + "Ġde pot", + "Ġdep ot", + "c alls", + "cal ls", + "call s", + "ĠNor wegian", + "` :", + "Ġ burger", + "Ġb urger", + "Ġbur ger", + "Ġburg er", + "Ġburge r", + "Ġprofessor s", + "Ġprofess ors", + "Ġ Allocate", + "ĠAl locate", + "ĠAll ocate", + "ĠAlloc ate", + "-third s", + "- chart", + "-c hart", + "-ch art", + "-char t", + "Ġ ford", + "Ġf ord", + "Ġfor d", + "Ġfo rd", + "* N", + ".k otlin", + "Ġpaper work", + "Ġ DEVICE", + "ĠDE VICE", + "ĠDEV ICE", + "% @\",", + "%@ \",", + "re spect", + "res pect", + "resp ect", + "( mp", + "(m p", + "é «ĺ", + "é« ĺ", + "- if", + "-i f", + "Ġcush ion", + "o bot", + "ob ot", + "obo t", + "Ġp arc", + "Ġpar c", + "Ġpa rc", + "S PACE", + "SP ACE", + "SPA CE", + "ĠNet anyahu", + "Ġself ish", + "Ġsel fish", + "f eat", + "fe at", + "fea t", + "Ġ clientes", + "Ġcl ientes", + "Ġclient es", + "Ġcli entes", + "Ġcliente s", + "- tools", + "-t ools", + "-to ols", + "-tool s", + "-too ls", + "Ġp orch", + "Ġpo rch", + "Ġpor ch", + "Ġ jq", + "Ġj q", + ". verbose", + ".ver bose", + "Ġlib erals", + "Ġliberal s", + "Ġliber als", + "] )ĊĊĊ", + "]) ĊĊĊ", + "])Ċ ĊĊ", + "])ĊĊ Ċ", + "p ies", + "pi es", + "pie s", + "Not Blank", + "( term", + "(t erm", + "(te rm", + "È Ľi", + "ÈĽ i", + "_ Params", + "_Param s", + ". normalize", + ".normal ize", + "B ullet", + "AS IC", + "ASI C", + "( hex", + "(h ex", + "_ cliente", + "_cl iente", + "_client e", + "_cli ente", + "+ ,", + "_ DI", + "_D I", + "Ġforth coming", + "} \")]Ċ", + "}\" )]Ċ", + "}\") ]Ċ", + "s eo", + "se o", + "U m", + "> Name", + ">N ame", + "Ġcomfort ably", + "irect ional", + "irection al", + "W ITH", + "WI TH", + "/ pr", + "/p r", + "Ġ Poor", + "ĠP oor", + "ĠPo or", + "ĠV itamin", + "ĠVit amin", + "ĠVita min", + "v ic", + "vi c", + "G H", + "Ġprior it", + "Ġprio rit", + "Ġ NN", + "ĠN N", + "Ġ Closed", + "ĠC losed", + "ĠCl osed", + "ĠClose d", + "ĠClo sed", + "¤ í", + "Ġ isOpen", + "Ġis Open", + "\\ Console", + "And Feel", + ". SUCCESS", + ".S UCCESS", + "_OPER ATION", + "p olation", + "po lation", + "pol ation", + "ĠT as", + "ĠTa s", + "p sz", + "ps z", + "> '.", + ">' .", + "C URRENT", + "V endor", + "host s", + "ho sts", + "hos ts", + "ĠE rd", + "ĠEr d", + ">tag ger", + ">t agger", + "ĠsourceMapping URL", + "Ġmar athon", + "_ closed", + "_c losed", + "_cl osed", + "_close d", + "Ġex emption", + "Ġexem ption", + "Ġexempt ion", + "Ġexemp tion", + "Ġrecogn izes", + "Ġrecognize s", + "ide show", + "ides how", + "' $", + "(' /');Ċ", + "('/ ');Ċ", + "('/') ;Ċ", + "m its", + "mit s", + "mi ts", + "wa rz", + "war z", + "ĠCh erry", + "ĠCher ry", + "µ ¬", + "n or", + "no r", + "p orte", + "port e", + "por te", + "Ġ wl", + "Ġw l", + "_ backup", + "_back up", + ".get Boolean", + ". getResource", + ".get Resource", + "Ġdefinit ive", + "Ġdefin itive", + ". EditText", + ".Edit Text", + "Ġ sÃŃ", + "Ġs ÃŃ", + ". CONT", + ".C ONT", + ".CON T", + ".CO NT", + "Ġ PLAYER", + "ĠPL AYER", + "ĠPLAY ER", + ". cards", + ".c ards", + ".card s", + ".car ds", + "ĠSh ore", + "ĠSho re", + "(' /')Ċ", + "('/ ')Ċ", + "('/') Ċ", + "cl uir", + "Web Driver", + "( month", + "(m onth", + "(mon th", + "- release", + "-r elease", + "-re lease", + "-rel ease", + "Ġins pector", + "Ġinspect or", + "Ġinsp ector", + "å £", + "Ġ NF", + "ĠN F", + "_ clip", + "_c lip", + "_cl ip", + "_cli p", + "å ŃIJ", + "åŃ IJ", + "Ġinter acting", + "Ġinteract ing", + ". tmp", + ".t mp", + ".tm p", + "Ġ '''ĊĊ", + "Ġ'' 'ĊĊ", + "Ġ'''Ċ Ċ", + "Ġ''' ĊĊ", + "Ġ dee", + "Ġd ee", + "Ġde e", + "Ġf rost", + "Ġfr ost", + "Ġfro st", + "\" ]))Ċ", + "\"] ))Ċ", + "\"]) )Ċ", + "\"])) Ċ", + "Ġ Places", + "ĠP laces", + "ĠPl aces", + "ĠPlace s", + "ĠPla ces", + "Th rows", + "Throw s", + "Thr ows", + "f ork", + "fo rk", + "for k", + "/ day", + "/d ay", + "i Phone", + "Ġ MIC", + "ĠM IC", + "ĠMI C", + "Ġf olding", + "Ġfol ding", + "Ġfold ing", + "Ġcr ore", + "Ġcro re", + "ĠCh iefs", + "ĠChief s", + "ĠChi efs", + "pher ical", + "pheric al", + "phe rical", + "( price", + "(p rice", + "(pr ice", + ".Write String", + "Ġex iting", + "Ġexit ing", + "] ',Ċ", + "]', Ċ", + "]' ,Ċ", + "ight ing", + "igh ting", + "Ing redient", + "( vertex", + "(ver tex", + "Ġ scrollView", + "Ġs crollView", + "Ġscroll View", + "h f", + ": new", + ":n ew", + "S EN", + "SE N", + "s ector", + "se ctor", + "sec tor", + "sect or", + "Ġs pins", + "Ġsp ins", + "Ġspin s", + "Ġspi ns", + "Ġ Scheduler", + "ĠS cheduler", + "ĠSchedule r", + "o techn", + "ot echn", + "ote chn", + "otech n", + "otec hn", + "sem icolon", + "semi colon", + "Font OfSize", + "ĠSpecific ally", + "fl amm", + ". ObjectId", + ".Object Id", + "Ġc onta", + "Ġcon ta", + "Ġcont a", + "_ permissions", + "_per missions", + "_perm issions", + "_permission s", + "ĉ FROM", + "ĉF ROM", + "I CODE", + "IC ODE", + "ICO DE", + "/ kg", + "/k g", + "ĠHot els", + "ĠHotel s", + "- med", + "-m ed", + "-me d", + "ĠD in", + "ĠDi n", + "Ġn avy", + "Ġna vy", + "Ġnav y", + "get Param", + "Ġm end", + "Ġme nd", + "Ġmen d", + "Ġportray ed", + "ĠMet ropolitan", + "P ainter", + "Paint er", + "Pa inter", + "Ġref erral", + "Ġrefer ral", + "_ good", + "_g ood", + "_go od", + "Ġmar vel", + "os aic", + "osa ic", + "> (&", + ">( &", + ". ur", + ".u r", + "Ġes tos", + "Ġest os", + "Ġesto s", + "Will iam", + "Ġtim ber", + "Ġquel ques", + "Ġquelque s", + "Ġ Documents", + "ĠDocument s", + "ĠDoc uments", + ".X aml", + "Ġb atches", + "Ġbatch es", + "Ġbat ches", + "éģ ĵ", + "Ġ Released", + "ĠRe leased", + "ĠRelease d", + "T ail", + "Ta il", + "Tai l", + "CO OKIE", + "h eid", + "he id", + "hei d", + "_ station", + "_st ation", + "_stat ion", + "_sta tion", + "Ġ Via", + "ĠV ia", + "ĠVi a", + "S ale", + "Sal e", + "Sa le", + "Ġ Repeat", + "ĠRe peat", + "ĠRep eat", + "Ġpro min", + "Ġpr omin", + "Ġprom in", + "ĠZ o", + "- forward", + "-for ward", + "Ġ Ion", + "ĠI on", + "ĠIo n", + "it ary", + "ita ry", + "itar y", + "Ġj us", + "Ġju s", + "- request", + "-re quest", + "Ġproud ly", + "Ġ Streaming", + "ĠStream ing", + "ĠStre aming", + "( MouseEvent", + "(Mouse Event", + "ĠS print", + "ĠSp rint", + "ĠSpr int", + "_ rotation", + "_r otation", + "_rot ation", + "Re positories", + "Ġt art", + "Ġta rt", + "Ġtar t", + "ĠÑģ в", + "Ġm appings", + "Ġmapping s", + "è ª", + "C u", + "C ycle", + "Cy cle", + "Ġb un", + "Ġbu n", + "ĉ lua", + "ĉl ua", + "ãĥ ī", + "Ġ( (!", + "Ġ(( !", + "Ġcollect ively", + "Ġcollective ly", + "Ġ Cond", + "ĠC ond", + "ĠCon d", + "ĠCo nd", + "Ġws zyst", + "Ġwsz yst", + "( lib", + "(l ib", + "(li b", + "openh agen", + "_ skip", + "_s kip", + "_sk ip", + ".Column Header", + "é Ĥ", + "perience d", + "peri enced", + "ı è¿°", + "_ props", + "_p rops", + "_pro ps", + "_pr ops", + "_prop s", + "Ġcon trace", + "Ġcont race", + "Ġcontr ace", + "Ġcontra ce", + "Ġmatch up", + "ab etic", + "abe tic", + "abet ic", + ". members", + ".m embers", + ".member s", + ".mem bers", + "R ECT", + "RE CT", + "REC T", + "( dat", + "(d at", + "(da t", + "Ġs og", + "Ġso g", + "re nom", + "ren om", + "reno m", + "_ Method", + "_M ethod", + "Custom ers", + "Customer s", + "ful lname", + "full name", + "Z N", + "r etry", + "re try", + "ret ry", + "Ġ kap", + "Ġk ap", + "Ġka p", + "ĠN eu", + "ĠNe u", + "è Ĭ", + "add Child", + "will Return", + "_ permalink", + "_p ermalink", + "_per malink", + "_perm alink", + "Ġenerg etic", + "Ġener getic", + "ĠW et", + "ĠWe t", + "ĠM orr", + "ĠMo rr", + "ĠMor r", + "Ġ gcd", + "Ġg cd", + "Ġgc d", + "co unts", + "count s", + "cou nts", + ", type", + ",t ype", + "d ig", + "di g", + "( Login", + "(Log in", + "Ġcr acks", + "Ġcrack s", + "Ġcra cks", + "Ġb acterial", + "Ġbacter ial", + "Ġbacteria l", + "ĠM eat", + "ĠMe at", + "ĠArm strong", + "ĠBro nze", + "ĠBron ze", + "Ġapprox imate", + "_ dirs", + "_d irs", + "_dir s", + "_di rs", + "l iga", + "li ga", + "lig a", + "ÅĤ ad", + "ÅĤa d", + "Ġkind ness", + "Ġ contre", + "Ġcon tre", + "Ġcont re", + "Ġcontr e", + "ĠE VERY", + "ĠEV ERY", + "ĠEVER Y", + "ĠEVE RY", + "M ET", + "ME T", + "Ġann ouncements", + "Ġannounc ements", + "Ġannouncement s", + "Ġannounce ments", + "g pio", + "gp io", + "ĠWaitFor Seconds", + "ĠPhoto shop", + "ĠPhotos hop", + "Ġdis contin", + "/ dd", + "/d d", + "Ġtop ology", + "Ġtopo logy", + "an ical", + "ani cal", + "anic al", + ". interface", + ".inter face", + "auc oup", + ". HashSet", + ".Hash Set", + "ARI ANT", + "( routes", + "(r outes", + "(route s", + "(ro utes", + "ĠT eh", + "ĠTe h", + "Ġh ype", + "Ġhy pe", + "Ġhyp e", + "] \").", + "]\" ).", + "]\") .", + "Ġs lam", + "Ġsl am", + "Ġsla m", + "Ġbr oth", + "Ġbro th", + "- inter", + "-in ter", + "-int er", + "ĠR id", + "ĠRi d", + "- manager", + "-m anager", + "-man ager", + "Cancel ar", + "Ġ Pagination", + "ĠP agination", + "ĠPag ination", + "Ġsound track", + "Ġpos terior", + "Ġpost erior", + "Ġposter ior", + "Ġposte rior", + "Ġsc rub", + "Ġscr ub", + "c reating", + "cre ating", + "cr eating", + "creat ing", + "- *", + "ir teen", + "irt een", + ". dy", + ".d y", + ".s ymmetric", + ".sym metric", + "Ġ \"\".", + "Ġ\" \".", + "Ġ\"\" .", + "= ==============", + "== =============", + "==== ===========", + "======== =======", + "=== ============", + "============ ===", + "============= ==", + "=========== ====", + "============== =", + "========= ======", + "========== =====", + "====== =========", + "===== ==========", + "======= ========", + "Ġch assis", + "ĠnumberOf Rows", + "De veloper", + "Develop er", + "_ bins", + "_b ins", + "_bin s", + "_bi ns", + "Ġ OUR", + "ĠO UR", + "ĠOU R", + "ri eb", + "rie b", + "P ros", + "Pro s", + "Pr os", + "Ġ wiÄĻ", + "Ġw iÄĻ", + "Ġwi ÄĻ", + "\" d", + "Ġasync io", + "ze igen", + "_ spi", + "_s pi", + "_sp i", + ". ALL", + ".A LL", + ".AL L", + "Ġscre ws", + "Ġscr ews", + "Ġscrew s", + "Ch inese", + "Ġ apiKey", + "Ġapi Key", + "Ġun successful", + "ĠSea hawks", + "ĠSeah awks", + "O RG", + "OR G", + "ç« ł", + "Ġprofession ally", + "Ġprofessional ly", + "Ġ Coupon", + "ĠC oupon", + "ĠCo upon", + "ĠCou pon", + "åŃĹ æ®µ", + "Con vention", + "Conv ention", + "Ġpol ym", + "Ġpoly m", + "æī ĭ", + "Ġsal vation", + "Ġsalv ation", + "Ġengine ered", + "Ġengineer ed", + "ĠW rest", + "ĠWr est", + "Ġ GCC", + "ĠG CC", + "ĠGC C", + "Ġwar mer", + "Ġwarm er", + "Layout Constraint", + "Ġag grav", + "Ġagg rav", + "S cripts", + "Script s", + "vent ure", + "ven ture", + "Ġrefriger ator", + "Ġinnov ations", + "Ġinnovation s", + "Ġ Runner", + "ĠR unner", + "ĠRun ner", + "N IC", + "NI C", + "ĠRoll ing", + "ĠRol ling", + "Control Events", + "Ġlo os", + "p ac", + "pa c", + "ĉ panel", + "ĉp anel", + "e fe", + "ef e", + "ĠBudd ha", + "ĠBuddh a", + "- -------------Ċ", + "-- ------------Ċ", + "---- ----------Ċ", + "-------- ------Ċ", + "--- -----------Ċ", + "------------ --Ċ", + "----- ---------Ċ", + "---------- ----Ċ", + "------ --------Ċ", + "----------- ---Ċ", + "------------- -Ċ", + "------- -------Ċ", + "--------- -----Ċ", + "-------------- Ċ", + "åº ĵ", + "(for Key", + "Ġl umin", + "Ġlu min", + "Ġlum in", + "Ġ (?", + "Ġ( ?", + "ĠA IDS", + "ĠAI DS", + ", user", + ",u ser", + "im ientos", + "imiento s", + "content Type", + "ant lr", + "é ¦", + "ĠW elt", + "ĠWe lt", + "ĠWel t", + "P roduction", + "Pro duction", + "Product ion", + "Produ ction", + "Prod uction", + "m ight", + "mi ght", + "ĠV II", + "ĠVI I", + "\" ,(", + "\", (", + "Ġobs erving", + "Ġobserv ing", + "Ġdeliber ate", + "( control", + "(c ontrol", + "(cont rol", + "Ġwith d", + "Ġwit hd", + "Ġse mana", + "Ġsem ana", + "ST ACK", + "STA CK", + "u chen", + "uch en", + "uc hen", + "uche n", + "N ice", + "Ni ce", + "Nic e", + "ĠDeutsch land", + "Ġ Specifies", + "ĠSpec ifies", + "d ma", + "dm a", + "iz io", + "izi o", + "ĠF acts", + "ĠFac ts", + "ĠFa cts", + "ĠFact s", + "_ popup", + "_p opup", + "_pop up", + "ĠDirect ors", + "ĠDirector s", + "ĠDir ectors", + "ĠDire ctors", + "{ :", + "[ R", + "ĠÑį леменÑĤ", + "ĠÑįлем енÑĤ", + "Ġ plat", + "Ġp lat", + "Ġpl at", + "Ġpla t", + "Ġdirect ing", + "ä¸ ī", + "ĠGil bert", + "â̦ .ĊĊ", + "â̦. ĊĊ", + ". qml", + ".q ml", + "Ġthere after", + "Ġdis position", + "Ġdisp osition", + "Ġdispos ition", + "Ġdisposit ion", + "d raft", + "dr aft", + "dra ft", + "Ġs urgeon", + "Ġsurg eon", + "Ġsurge on", + "ĠIns ider", + "ĠInside r", + "Bl end", + "ĠT rev", + "ĠTr ev", + "ĠTre v", + "tr insic", + "tri nsic", + "To pics", + "Top ics", + "Topic s", + "r ieve", + "ri eve", + "rie ve", + "_ FILENAME", + "_FILE NAME", + "Ġaut res", + "Ġau tres", + "Ġautre s", + "J ose", + "Jo se", + "Jos e", + "Pro ducer", + "Produ cer", + "Prod ucer", + "e rus", + "er us", + "eru s", + "Ġpe tit", + "Ġpet it", + "Ġ NEXT", + "ĠN EXT", + "ĠNE XT", + "Ġ Filters", + "ĠF ilters", + "ĠFilter s", + "ĠFil ters", + "Ġrep licate", + "Ġrepl icate", + "Ġreplic ate", + "Ġreplica te", + "\" ]).", + "\"] ).", + "\"]) .", + "Ġl enders", + "Ġlen ders", + "Ġlend ers", + "Ġlender s", + "] \",Ċ", + "]\", Ċ", + "]\" ,Ċ", + "; charset", + "Cpp Object", + "Ġfl oral", + "Ġflo ral", + "Ġflor al", + "Ġflora l", + "Ġ Tipo", + "ĠT ipo", + "ĠTi po", + "ĠTip o", + "Ġcirc uits", + "Ġcircuit s", + "e asy", + "ea sy", + "(& $", + "it ta", + "itt a", + "er yl", + "ery l", + "_ COMMON", + "_COM MON", + "_COMM ON", + "' }}>Ċ", + "'} }>Ċ", + "'}} >Ċ", + "'}}> Ċ", + "-b acked", + "-back ed", + "( variable", + "(var iable", + "( Index", + "(In dex", + "Ġ voir", + "Ġv oir", + "Ġvo ir", + "Ġvoi r", + "_ locations", + "_l ocations", + "_location s", + "_loc ations", + "++ ){", + "++) {", + "ĠLouis ville", + "Ġgr atitude", + "Ġgrat itude", + ".Mock ito", + "ĠP owers", + "ĠPower s", + "ĠPo wers", + "ĠPow ers", + "i eurs", + "ie urs", + "ieu rs", + "ieur s", + "Ġge ographic", + "Ġgeo graphic", + "r ale", + "ra le", + "ral e", + "Ġc ra", + "Ġcr a", + "ĠSp urs", + "ipher text", + "iph ertext", + "AC ION", + "- common", + "-com mon", + "-comm on", + "Ġvict ories", + "ĠF inals", + "ĠFin als", + "ĠFinal s", + ". shuffle", + ".sh uffle", + "- million", + "-m illion", + "_ PROC", + "_P ROC", + "_PRO C", + "_PR OC", + "as sume", + "ass ume", + "Ġ ils", + "Ġi ls", + "Ġil s", + "D BC", + "DB C", + "Boot Test", + "Ġl avor", + "Ġla vor", + "Ġlav or", + ". testing", + ".t esting", + ".test ing", + ". ast", + ".as t", + ".a st", + "\" ]/", + "\"] /", + "m oid", + "mo id", + "Ġ qualification", + "Ġqual ification", + "g esch", + "ge sch", + "ges ch", + "ĉ put", + "ĉp ut", + "Ġair ports", + "Ġairport s", + "J I", + "T eacher", + "Te acher", + "_ uniform", + "_un iform", + "Ġ nama", + "Ġn ama", + "Ġna ma", + "Ġnam a", + "ĠB ast", + "ĠBa st", + "ĠBas t", + "e rtype", + "er type", + "ert ype", + "erty pe", + "c apture", + "cap ture", + "capt ure", + "get All", + "ĠReyn olds", + "o oled", + "ool ed", + "oo led", + ". comments", + ".com ments", + ".comment s", + ".comm ents", + "Ġ chin", + "Ġc hin", + "Ġch in", + "Ġchi n", + ") .*", + "). *", + "Ġ или", + "Ġи ли", + "t gl", + "tg l", + "u dos", + "ud os", + "udo s", + "Ġd ÃŃas", + "ĠdÃŃa s", + "ĠdÃŃ as", + "c hai", + "ch ai", + "cha i", + ". program", + ".p rogram", + ".pro gram", + ".pr ogram", + "Ġ psz", + "Ġp sz", + "Ġps z", + "ĉ icon", + "ĉi con", + "p hil", + "ph il", + "phi l", + "ent ral", + "entr al", + "_W RAP", + "_WR AP", + "o vi", + "ov i", + "Ġnost alg", + "In finity", + "Inf inity", + "ĉ yield", + "ĉy ield", + "Ġvit amins", + "Ġvitamin s", + "Ġvita mins", + "Ġvitam ins", + "Qu aternion", + "S ink", + "Si nk", + "Sin k", + "_ goods", + "_g oods", + "_go ods", + "_good s", + "Ġ ........", + "Ġ. .......", + "Ġ... .....", + "Ġ.. ......", + "Ġ.... ....", + "Ġ..... ...", + "Ġ...... ..", + "ĠW ings", + "ĠWin gs", + "ĠWing s", + "ur idad", + "uri dad", + "- story", + "-st ory", + "\" ])ĊĊ", + "\"] )ĊĊ", + "\"]) ĊĊ", + "\"])Ċ Ċ", + "idel ity", + "Type Def", + "G tk", + "Ġ íĮ", + "Ġí Į", + "_ Main", + "_M ain", + "Ġ chez", + "Ġch ez", + "Ġche z", + "ĠR aven", + "ĠRa ven", + "ĠRav en", + "Ġpay roll", + "Ġfreel ance", + "L LU", + "LL U", + "ĠM end", + "ĠMe nd", + "ĠMen d", + "e day", + "ed ay", + "eda y", + "Api ModelProperty", + ".Form BorderStyle", + "Ġeconom ist", + "stan bul", + "Ġfr eight", + "Ġfre ight", + "Ġfrei ght", + "- Agent", + "-A gent", + "( meta", + "(m eta", + "(me ta", + "Ġsym metry", + "Ġ' ..", + "Ġ'. .", + ". Calendar", + ".C alendar", + "- aut", + "-a ut", + "-au t", + "g f", + "p ent", + "pe nt", + "pen t", + "yc lopedia", + "Ġw ishing", + "Ġwish ing", + "Ċ ĊĊĊĊĊĊĊĊĊĊĊ", + "ĊĊ ĊĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊ ĊĊĊĊĊĊĊĊ", + "ĊĊĊ ĊĊĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊ ĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊ ĊĊĊĊ", + "ĊĊĊĊĊ ĊĊĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊĊ ĊĊ", + "ĊĊĊĊĊĊĊ ĊĊĊĊĊ", + "ĊĊĊĊĊĊĊĊĊ ĊĊĊ", + "ĊĊĊĊĊĊĊĊĊĊĊ Ċ", + "Ġgentle man", + "Ġ ê³", + "Ġê ³", + "= #", + "Ġlect ures", + "Ġlecture s", + "âĢľ In", + "âĢľI n", + "Ġ! _", + "Ġ hb", + "Ġh b", + "Ġ Vendor", + "ĠV endor", + "ĠVend or", + "Rec ently", + "Recent ly", + "_ notes", + "_n otes", + "_no tes", + "_not es", + "_note s", + "æıIJ 示", + "\" My", + "\"M y", + "Headers Height", + "_ SO", + "_S O", + "Ġunw illing", + "Ġsuper hero", + "g io", + "gi o", + "p sy", + "ps y", + "Ġ Peer", + "ĠP eer", + "ĠPe er", + "ĠPee r", + "j avax", + "java x", + "jav ax", + "& apos", + "&a pos", + "ĠCr isis", + "ĠCri sis", + "ord inal", + "ordin al", + "Mem cpy", + "++++++++ ++++++++", + "- val", + "-v al", + "Ġwork book", + "- ap", + "-a p", + "= k", + "Ġmetal lic", + "Ġmetall ic", + "_ peer", + "_p eer", + "_pe er", + "By PrimaryKey", + "_ SD", + "_S D", + "u ator", + "ua tor", + "uat or", + "_SH ADER", + "_SHA DER", + ") Math", + ". Transform", + ".Trans form", + "Ġc ows", + "Ġco ws", + "Ġcow s", + "P hi", + "Ph i", + "ĠC lem", + "ĠCl em", + "ĠCle m", + "( _(\"", + "(_ (\"", + "ĠL ud", + "ĠLu d", + "- delay", + "-d elay", + "-de lay", + "-del ay", + "ĠSe curities", + "ĠSec urities", + "ĠOrth odox", + "Sym fony", + "( report", + "(re port", + "(repo rt", + "(rep ort", + "Ġent ertain", + "Ġenter tain", + "Ġentert ain", + "E PS", + "EP S", + "iz oph", + "izo ph", + "ex ual", + "I RD", + "IR D", + "ä» İ", + "Ġl ith", + "Ġli th", + "Ġlit h", + "Ġ sanitize", + "Ġs anitize", + "Ġsan itize", + "Ġsanit ize", + "Ġfem inine", + "Ġfemin ine", + "IS BN", + ". authentication", + ".auth entication", + "_ pipeline", + "_p ipeline", + "_pipe line", + "/ constants", + "/con stants", + "Ġ CONF", + "ĠCON F", + "ĠCO NF", + "Ġlu cr", + "Ġluc r", + "r icia", + "ri cia", + "ric ia", + ".t tf", + ".tt f", + ". setContent", + ".set Content", + "Ġ stan", + "Ġs tan", + "Ġst an", + "Ġsta n", + "or ean", + "ore an", + "orea n", + "ĠL loyd", + ".raw Value", + "Ġ gor", + "Ġg or", + "Ġgo r", + "ĠBr owns", + "ĠBrown s", + "ĠBrow ns", + "Re gression", + "Reg ression", + "Ġl owering", + "Ġlow ering", + "Ġlower ing", + "na issance", + "Ġbl ows", + "Ġblow s", + "Ġblo ws", + "Ġam azed", + "Ġama zed", + "Ġun related", + "Ġunre lated", + "Re views", + "Review s", + "Ġ ruby", + "Ġr uby", + "Ġrub y", + "Ġru by", + "Ġ Modifier", + "ĠMod ifier", + "Ġg iants", + "Ġgi ants", + "Ġgiant s", + "Ġgia nts", + "Ġgian ts", + ". thread", + ".t hread", + ".th read", + "Ġcon tainment", + "Ġcont ainment", + "Ġcontain ment", + "ĠStart Coroutine", + "u mat", + "um at", + "uma t", + "o release", + "or elease", + "ore lease", + "ĠR andy", + "ĠRand y", + "ĠRan dy", + "@ endif", + "@end if", + "D igest", + "Di gest", + "Dig est", + "Ġsub urban", + "Ġsubur ban", + "Ġsuburb an", + "= \");Ċ", + "=\" );Ċ", + "Ġ annonce", + "Ġan nonce", + "Ġann once", + "Ġanno nce", + "Ġannon ce", + ". variable", + ".var iable", + "\\ Foundation", + "\\F oundation", + "Ġ acre", + "Ġa cre", + "Ġac re", + "V an", + "Va n", + "Ġt uples", + "Ġtu ples", + "Ġtuple s", + "Ġtup les", + "d ns", + "dn s", + "Ġ Standing", + "ĠSt anding", + "ĠStan ding", + "ĠStand ing", + "_ large", + "_l arge", + "Ġ boxing", + "Ġbo xing", + "Ġbox ing", + "Support ActionBar", + "ĠFort une", + "ĠR um", + "ĠRu m", + "_ multiple", + "_m ultiple", + "_multi ple", + "_mult iple", + "_multip le", + "arch ical", + "Ġ fwrite", + "Ġf write", + "Ġfw rite", + "_ quote", + "_qu ote", + "Ġfoo lish", + "Ġfool ish", + "Ġcom prising", + "Ġcomp rising", + "Ġcompr ising", + "Ġ оп", + "Ġо п", + "- selected", + "-se lected", + "-select ed", + "v f", + "m aid", + "ma id", + "mai d", + "N ama", + "Na ma", + "Nam a", + "( datetime", + "(d atetime", + "(date time", + "(dat etime", + "Ġindirect ly", + "g art", + "ga rt", + "gar t", + "fix tures", + "fixture s", + "c hos", + "ch os", + "cho s", + "ĠH alo", + "ĠHa lo", + "ĠHal o", + "Ġre curring", + "Ġrec urring", + "Ġrecur ring", + "- news", + "-n ews", + "-new s", + "-ne ws", + "v il", + "vi l", + "ĠNurs ing", + "ĠNur sing", + "- produ", + "-p rodu", + "-pro du", + "-pr odu", + "Ġ HQ", + "ĠH Q", + "\\Http Foundation", + "en ci", + "enc i", + "a uen", + "au en", + "Ġ vy", + "Ġv y", + "ocr acy", + "Ġde legation", + "Ġdeleg ation", + "Ġas phalt", + "Ġasp halt", + "Ġset Selected", + "k ok", + "ko k", + "/ rest", + "/r est", + "/re st", + "/res t", + "m etics", + "me tics", + "met ics", + "metic s", + "Ġ NSDate", + "ĠNS Date", + "Ġtravel led", + "Ġtrav elled", + "Ġrec ib", + "Ġ mime", + "Ġm ime", + "Ġmi me", + "Ġmim e", + "CL IENT", + "CLI ENT", + "Ġ GU", + "ĠG U", + "Ġ HANDLE", + "ĠH ANDLE", + "ĠHAND LE", + "/ Q", + "[ z", + "Ġboth ered", + "Ġbother ed", + "ĠBB Q", + "ç as", + "ça s", + "_ examples", + "_ex amples", + "_example s", + "_exam ples", + "_ FIN", + "_F IN", + "Ġwhite Color", + "Ġastr onom", + "Ġastro nom", + "- dir", + "-d ir", + "-di r", + "Ġsovere ign", + "Ġb reeze", + "Ġbree ze", + "Ġ inning", + "Ġin ning", + "Ġinn ing", + "ĠEd monton", + "g li", + "gl i", + ".blog spot", + "j sx", + "js x", + "Ġver sa", + "Ġve rsa", + "Ġvers a", + "ĠMoh ammed", + ". Job", + ".J ob", + "-t oggler", + "-toggle r", + "Ġп олÑĮзоваÑĤ", + "ar don", + "ard on", + "ardo n", + "Ġnew born", + "Ġn aval", + "Ġna val", + "Ġnav al", + "not eq", + "note q", + "Ġt umblr", + "Ġtum blr", + "Ġh entai", + "ĠTyp ically", + "ĠTypical ly", + "Ġl oot", + "Ġlo ot", + ". Sprite", + ".S prite", + ".Sp rite", + "F light", + "Fl ight", + "Ġw avelength", + "Ġwave length", + "- sk", + "-s k", + "ĠE lle", + "ĠEl le", + "ĠEll e", + "_ exports", + "_ex ports", + "_exp orts", + "_export s", + "Ġ Ñı", + "ĠÑ ı", + "Ġ IH", + "ĠI H", + "izoph ren", + "Ġ íģ", + "Ġí ģ", + "_ primary", + "_pr imary", + "_pri mary", + "_prim ary", + "Ġm ois", + "Ġmo is", + "Ġmoi s", + "Ġ BN", + "ĠB N", + "Ġsystem ic", + "Ġsyst emic", + "Ġdifer entes", + "Ġdiferente s", + "IN CT", + "INC T", + "Ġ' 'ĊĊ", + "Ġ'' ĊĊ", + "Ġ''Ċ Ċ", + "$ q", + "Widget Item", + "c lide", + "cl ide", + "cli de", + "clid e", + "$ file", + "$f ile", + "L emma", + "Le mma", + "/ table", + "/t able", + "/tab le", + "a grid", + "ag rid", + "agr id", + "ĠMongo DB", + "i nte", + "in te", + "int e", + "Ġapp rent", + "ÂŃ ing", + "ÂŃi ng", + ". Db", + ".D b", + "Ġ ÃĤ", + "Ġà Ĥ", + "h ammer", + "ham mer", + "=' ';Ċ", + "='' ;Ċ", + "Ġbr okers", + "Ġbro kers", + "Ġbroke rs", + "Ġbroker s", + "i tlement", + "it lement", + "itle ment", + "semb lies", + "sembl ies", + "E le", + "El e", + "{ x", + "Ġ lastname", + "Ġlast name", + "< -", + "Ġ flatten", + "Ġfl atten", + "Ġflat ten", + "Ġflatt en", + "_ band", + "_b and", + ". Root", + ".R oot", + ".read FileSync", + ".readFile Sync", + "= =====", + "== ====", + "==== ==", + "=== ===", + "===== =", + ". rx", + ".r x", + "? čĊ", + "Ġmetaph or", + "T i", + "c onte", + "con te", + "cont e", + "co nte", + "Ġ debit", + "Ġde bit", + "Ġdeb it", + "Ġcon tempt", + "Ġcont empt", + "Cpp Type", + "æĶ ¯", + "Form Field", + "r atio", + "rat io", + "os opher", + "osoph er", + "oso pher", + "Ġim plant", + "Ġimp lant", + "Ġimpl ant", + "P URE", + "PU RE", + "PUR E", + "Ġ alta", + "Ġal ta", + "Ġalt a", + "_ management", + "_man agement", + "_manage ment", + "Ġre fine", + "Ġref ine", + "Ġrefin e", + "Ġ CheckBox", + "ĠCheck Box", + "ĠCh arl", + "ĠChar l", + "ĠCha rl", + "- version", + "-v ersion", + "-vers ion", + "cond itional", + "condition al", + "ven ues", + "venue s", + "Ġrifle s", + "Ġrif les", + "Ġoff spring", + "Ġoffs pring", + "Ġm illing", + "Ġmill ing", + "Ġmil ling", + "Ġmilli ng", + "Ġsharp ly", + "Ġshar ply", + "Ġunder water", + "( origin", + "(orig in", + "(or igin", + "_ Control", + "_C ontrol", + "Ġ .$", + "Ġ. $", + "Pl ugins", + "Plugin s", + "Plug ins", + "Ġd rying", + "Ġdr ying", + "Ġdry ing", + "Ġillustr ates", + "Ġillustrate s", + "Ġillust rates", + "- u", + "Ġveget arian", + "n pc", + "np c", + "He art", + "; ',Ċ", + ";' ,Ċ", + ";', Ċ", + "com ma", + "co mma", + "comm a", + "t eenth", + "te enth", + "tee nth", + "teen th", + "a san", + "as an", + "asa n", + "/ spec", + "/s pec", + "/sp ec", + "_ moves", + "_m oves", + "_move s", + "_mov es", + "_mo ves", + "- margin", + "-m argin", + "-mar gin", + "Ġ ingen", + "Ġin gen", + "Ġi ngen", + "Ġing en", + "Âł ³³", + "³³ Âł", + "Ġpro jet", + "Ġproj et", + "Ġproje t", + "Ġo tra", + "Ġot ra", + "Ġ bras", + "Ġb ras", + "Ġbr as", + "Ġbra s", + ". utc", + ".u tc", + ".ut c", + "Ġsl ept", + "Ġsle pt", + "= sub", + "=s ub", + "ab ilit", + "abil it", + "abi lit", + "p oster", + "pos ter", + "post er", + "po ster", + "Ġ sdk", + "Ġs dk", + "Ġsd k", + "ounc ill", + "ouncil l", + "Ġ wd", + "Ġw d", + "Pre paredStatement", + "ĠD rum", + "ĠDr um", + "( attribute", + "(at tribute", + "Ġ Ethernet", + "ĠEth ernet", + "ĠEther net", + "ĉ DB", + "ĉD B", + "Cal ifornia", + "c ube", + "cu be", + "[ I", + ". Created", + ".C reated", + ".Create d", + "Ġ HM", + "ĠH M", + "Ġtr acing", + "Ġtra cing", + "Forms Module", + "- you", + "-y ou", + ". currency", + ".c urrency", + ".curr ency", + "fe eding", + "feed ing", + "fee ding", + "Ġ tbody", + "Ġt body", + "Ġtb ody", + "L i", + "a ccion", + "ac cion", + "acc ion", + "acci on", + "n as", + "na s", + "Ġtr ouver", + "Ġtrou ver", + "Ġtrouve r", + "N ONE", + "NO NE", + "NON E", + "\" },čĊ", + "\"} ,čĊ", + "\"}, čĊ", + "Ġ ftp", + "Ġf tp", + "Ġft p", + "With Identifier", + "p olate", + "po late", + "pol ate", + "File Info", + "Ġpurs ued", + "Ġpursue d", + "ĠĠĠĠ čĊĠĠĠĠčĊ", + "ĠĠĠĠčĊ ĠĠĠĠčĊ", + "DE SCRIPTION", + "DESC RIPTION", + "} */Ċ", + "}* /Ċ", + "From Nib", + "Ġdec orative", + "Ġdecor ative", + "_ SSL", + "_S SL", + "_SS L", + "( chat", + "(c hat", + "(ch at", + "T LS", + "TL S", + "Ġsur prises", + "Ġsurpr ises", + "Ġsurprise s", + "al culate", + "alc ulate", + "Ġ Splash", + "ĠS plash", + "ĠSp lash", + "ĠSpl ash", + "( Configuration", + "(Config uration", + "Ġ SEM", + "ĠS EM", + "ĠSE M", + "im son", + "ims on", + "/ library", + "/lib rary", + "/l ibrary", + "< Double", + "", + "Ġ} }>", + "Ġ}} >", + "G ED", + "GE D", + "f aq", + "fa q", + "Ġoption ally", + "Ġoptional ly", + "_ Dis", + "_D is", + "Ġ Successful", + "ĠSuccess ful", + "ĠC ensus", + "Ġinc arcer", + "_ CARD", + "_C ARD", + "_CA RD", + "_CAR D", + "Ġav iation", + "Ġavi ation", + "ĠG ym", + "ĠGy m", + "Author ity", + ". Bean", + ".B ean", + ".Be an", + "sh ader", + "sha der", + "shade r", + "Not Exist", + "_ TextChanged", + "_Text Changed", + "Ġ STOP", + "ĠS TOP", + "ĠST OP", + "( team", + "(t eam", + "(te am", + "\" H", + "w g", + "Ġgr inder", + "Ġgri nder", + "Ġgrind er", + "Ġgrin der", + "Ġ stripe", + "Ġst ripe", + "Ġstr ipe", + "Ġstri pe", + "Ġstrip e", + "Ġp reservation", + "Ġpres ervation", + "Cl aim", + "Cla im", + "aver sal", + "avers al", + "w arehouse", + "ware house", + "target s", + "tar gets", + "T rust", + "Tr ust", + "Ġal lev", + "Ġall ev", + "Ġalle v", + ", www", + ",w ww", + "ou sse", + "ous se", + "_ chan", + "_c han", + "_ch an", + "_ Size", + "_S ize", + "s ystems", + "sys tems", + "system s", + "Ġob jection", + "Ġobject ion", + "Ġobj ection", + "ĠK ane", + "ĠKa ne", + "ĠKan e", + "Ġcor ros", + "Ġcorr os", + "Ġcorro s", + "Ġ DSL", + "ĠD SL", + "ĠDS L", + "Ġ ua", + "Ġu a", + "Ġ MH", + "ĠM H", + "ĠStr ategic", + "ĠStrateg ic", + "_ tcp", + "_t cp", + "_tc p", + "Ġ ê°Ĵ", + "Ġê° Ĵ", + "Ġborrow ed", + "Ġborr owed", + "ĠA ch", + "ĠAc h", + "ĉ command", + "ĉcom mand", + "Ġ gps", + "Ġg ps", + "Ġgp s", + "le ston", + "les ton", + "lest on", + "ich ever", + "iche ver", + "Ġ UA", + "ĠU A", + "Ġassault ed", + "Ġspecial izes", + "Ġspecialize s", + "ĉ search", + "ĉs earch", + "ĉse arch", + "H otel", + "Hot el", + "Ho tel", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠčĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠčĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠčĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ čĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠčĊ", + "Ġ Pitch", + "ĠP itch", + "ĠPit ch", + "Ġ Ùģ", + "ĠÙ ģ", + "READ Y", + "REA DY", + "Ġpar ental", + "Ġparent al", + "Ġparen tal", + "Ġg éné", + "Ġgé né", + "Ġgén é", + "Ġdonn ées", + "Ġde tain", + "Ġdet ain", + "T ARGET", + "Ġprotagon ist", + "Ġclear Interval", + "Ġ IconButton", + "ĠIcon Button", + "ĠGet All", + "Type Info", + "E H", + "âĢľ They", + "âĢľThe y", + "Ġ{ [", + "Ġg ag", + "Ġga g", + "Ġ Ú©", + "Ġ Dropdown", + "ĠD ropdown", + "ĠDrop down", + ". free", + ".f ree", + ".fr ee", + ".fre e", + "g one", + "go ne", + "gon e", + "i mens", + "im ens", + "ime ns", + "imen s", + "Ġin stal", + "Ġins tal", + "Ġinst al", + "ĉ curl", + "ĉc url", + "ĉcur l", + "_ CAN", + "_C AN", + "_CA N", + "Ġ Bone", + "ĠB one", + "ĠBo ne", + "ĠBon e", + "ï¼ Ķ", + "on yms", + "ony ms", + "onym s", + "- government", + "-g overnment", + ".binding Navigator", + "Ġ Dans", + "ĠD ans", + "ĠDan s", + "ĠDa ns", + "ĠMc L", + "( en", + "(e n", + "> (_", + ">( _", + "ÐĴ Ñĭ", + ".* ;čĊ", + "= j", + "- cor", + "-c or", + "-co r", + "S on", + "So n", + ".ToolStrip Item", + "- around", + "-a round", + "-ar ound", + "_ XML", + "_X ML", + "end Date", + "Ġ slack", + "Ġs lack", + "Ġsl ack", + "Ġsla ck", + "Ġrot ated", + "Ġrotate d", + "Ġno qa", + "Ġc ottage", + "Ġcott age", + "Ġencontr ar", + "_ skill", + "_s kill", + "_sk ill", + "hou ette", + "! čĊ", + ". weather", + ".we ather", + "Ġemphas ized", + "Ġemphasize d", + "å® ¶", + "ĠÑģ пиÑģ", + "ĠÑģп иÑģ", + "Ġ Compiler", + "ĠC ompiler", + "ĠCom piler", + "ĠComp iler", + "ĠCompile r", + "( android", + "(and roid", + "Ġ âĢº", + "ĠâĢ º", + ". turn", + ".t urn", + "Ġsup pression", + "Ġsuppress ion", + "Ġsupp ression", + "_ calls", + "_c alls", + "_call s", + "_cal ls", + "Ġ *@", + "Ġ* @", + "( strlen", + "(str len", + "(st rlen", + ". hex", + ".h ex", + ".he x", + "ĠB ills", + "ĠBill s", + "ĠBil ls", + "Ġ RSA", + "ĠR SA", + "ĠRS A", + "Ï Ĥ", + "Ġ Escape", + "ĠE scape", + "ĠEs cape", + "ĠEsc ape", + "ement ia", + "Ġ frontend", + "Ġfront end", + "Ġp int", + "Ġpi nt", + "Ġpin t", + "_ exc", + "_e xc", + "_ex c", + "z zo", + "zz o", + "[ ],Ċ", + "[] ,Ċ", + "[], Ċ", + "Ġ\"' ,'\"", + "Ġ\"', '\"", + "Ġ\"',' \"", + ". Environment", + ".En vironment", + "Ġafore mentioned", + "Ġend ure", + "prot otype", + "proto type", + "ther apy", + "the rapy", + "s si", + "ss i", + "D eg", + "De g", + "_ plugins", + "_pl ugins", + "_plugin s", + ". userInfo", + ".user Info", + "Pr inter", + "Print er", + "Ġ PROGRAM", + "ĠPRO GRAM", + "Ġru ins", + "Ġruin s", + "Ġemp irical", + "Ġempir ical", + "Ġ crawl", + "Ġc rawl", + "Ġcr awl", + "Ġcraw l", + "Ġcra wl", + "ĠBo iler", + "- comment", + "-com ment", + "-comm ent", + ". subplot", + ".sub plot", + "_ et", + "_e t", + "Ġ' .',", + "Ġ'. ',", + "Ġ'.' ,", + "min or", + "mi nor", + "mino r", + "ĠCustom s", + "ĠCust oms", + "Ġ yaw", + "Ġy aw", + "Ġya w", + "under line", + "Ġ Como", + "ĠC omo", + "ĠCom o", + "ĠCo mo", + "( ('", + "(( '", + "( mean", + "(m ean", + "(me an", + "Ġch aque", + "Ġcha que", + "Ġ Blocks", + "ĠB locks", + "ĠBl ocks", + "ĠBlock s", + "ĠBlo cks", + "ĠBloc ks", + ". rad", + ".r ad", + ".ra d", + "ilib rium", + "Ġ webdriver", + "Ġweb driver", + "Ġmel hor", + "d ana", + "da na", + "dan a", + "ĠAb use", + "ĠAbu se", + "ĠSouth west", + "Ġ Paren", + "ĠP aren", + "ĠPar en", + "ĠPa ren", + "ĠPare n", + "PERT IES", + "ĉ IL", + "ĉI L", + "Ġs cream", + "Ġsc ream", + "Ġscre am", + "Ġscr eam", + "v u", + "Ġin comes", + "Ġinc omes", + "Ġincome s", + "Ġincom es", + "Ġ nim", + "Ġn im", + "Ġni m", + "Ġ lace", + "Ġl ace", + "Ġla ce", + "Ġlac e", + "Ġcompens ate", + "Re verse", + "Rev erse", + "D at", + "Da t", + "_ attack", + "_att ack", + "Ġn our", + "Ġno ur", + "Ġnou r", + "a chen", + "ac hen", + "ach en", + "ache n", + "c ek", + "ce k", + "< Func", + " \"+", + ">\" +", + "Ġ tokenizer", + "Ġtoken izer", + "Ġtokenize r", + "Ġsovere ignty", + "Ġsovereign ty", + "ĠP ence", + "ĠPe nce", + "ĠPen ce", + "( )\");Ċ", + "() \");Ċ", + "()\" );Ċ", + "Ġpesso as", + "Ġpessoa s", + ". Ge", + ".G e", + "Ġ Included", + "ĠIn cluded", + "ĠInclude d", + "Ġ pagina", + "Ġp agina", + "Ġpag ina", + "Ġex posing", + "Ġexp osing", + "Ġexpos ing", + "Ġexpo sing", + "е ÑĪ", + "_ SCRIPT", + "_SC RIPT", + "/ $',", + "/$ ',", + "Th umbnail", + "× Ķ", + "webElement X", + "webElementX paths", + "press ure", + "pres sure", + "ĠC urry", + "ĠCur ry", + "_ CP", + "_C P", + "OL UTION", + "I LES", + "IL ES", + "ILE S", + "prot ect", + "o ola", + "ool a", + "oo la", + "Work space", + "Works pace", + "{ };Ċ", + "{} ;Ċ", + "Ġ UNS", + "ĠU NS", + "ĠUN S", + "Ġsymp athy", + "Ġsympath y", + "r oker", + "ro ker", + "roke r", + "rok er", + "Ġre model", + "Ġr emodel", + "Ġrem odel", + "ĉ cell", + "ĉc ell", + "Ġa top", + "Ġat op", + ". FullName", + ".Full Name", + "Ġf aut", + "Ġfa ut", + "ĠE asily", + "_ dynamic", + "_d ynamic", + "_dyn amic", + "Ġfr amed", + "Ġframe d", + "Ġfra med", + "Ġfram ed", + "Ġm otive", + "Ġmot ive", + "Ġmotiv e", + "è· ¯", + "s am", + "sa m", + "Ġ marca", + "Ġmar ca", + "Ġmarc a", + "ĠText EditingController", + "Ġd estructor", + "Ġde structor", + "Ġdestruct or", + "c ream", + "cre am", + "cr eam", + "Ġr ude", + "Ġru de", + "Ġrud e", + "Ġ Bold", + "ĠB old", + "ĠBo ld", + "ĠBol d", + "ĠInd igenous", + "Ġ gens", + "Ġg ens", + "Ġge ns", + "Ġgen s", + "Ġrel acion", + "( system", + "(s ystem", + "(sys tem", + "Ġ UIFont", + "ĠUI Font", + "ĠUIF ont", + "_ charge", + "_ch arge", + "_char ge", + "U STER", + "US TER", + "UST ER", + "E V", + ". Namespace", + ".N amespace", + ".Name space", + ".Names pace", + "Ġmer ger", + "Ġmerge r", + "Ġmerg er", + "Ġ calloc", + "Ġc alloc", + "Ġcall oc", + "Ġcal loc", + "g ang", + "ga ng", + "gan g", + "Bad Request", + "Ġs per", + "Ġsp er", + "Ġspe r", + "- design", + "-d esign", + "-de sign", + "-des ign", + "Ġ âĩ", + "Ġâ ĩ", + "C han", + "Ch an", + "Cha n", + "Ġorg anism", + "Ġorgan ism", + "Ġorganis m", + ", )", + "= id", + "=i d", + "_ plane", + "_p lane", + "_pl ane", + "_plan e", + "Ġ Cases", + "ĠC ases", + "ĠCas es", + "ĠCase s", + "ĠCa ses", + "el fast", + "elf ast", + "ĠLegisl ature", + "ĠF aker", + "ĠFa ker", + "ĠFake r", + "ĠFak er", + "Ġinv oking", + "Ġinvo king", + "- utils", + "-util s", + "( ).'", + "() .'", + "(). '", + ". face", + ".f ace", + ".fac e", + ".fa ce", + "Ġguard ian", + "my Modal", + "Ġ clipboard", + "Ġclip board", + "ĠA TM", + "ĠAT M", + "Ġpe as", + "Ġpea s", + "ĠS ylv", + "ĠSy lv", + ". calc", + ".c alc", + ".ca lc", + ".cal c", + "Ġ Contacts", + "ĠCont acts", + "ĠContact s", + "int Value", + "Ġmod ifying", + "Ġmodify ing", + "ĠB arb", + "ĠBar b", + "ĠBa rb", + ". loss", + ".l oss", + ".lo ss", + "_ percentage", + "_per centage", + "_percent age", + "As ked", + "Ask ed", + "( lst", + "(l st", + "(ls t", + "ateg orical", + "ategor ical", + "ategori cal", + "atego rical", + "- files", + "-f iles", + "-file s", + "-fi les", + "ĠRom ania", + "ĠRo mania", + "ĠRoman ia", + "ĠRoma nia", + ". Ac", + ".A c", + "Ġ hai", + "Ġh ai", + "Ġha i", + "Ġ Flying", + "ĠF lying", + "ĠFl ying", + "ĠFly ing", + "Ġ ż", + "ĠÅ ¼", + "j p", + "ĠTr ainer", + "ĠTra iner", + "ĠTrain er", + ". arc", + ".a rc", + ".ar c", + "_ deg", + "_d eg", + "_de g", + "Ġtrace back", + "Or Fail", + "F LOW", + "FL OW", + ". old", + ".o ld", + ".ol d", + "o ya", + "oy a", + "g mt", + "gm t", + "is empty", + "Ġvacc ination", + "Ġ obsolete", + "Ġob solete", + "recogn ized", + "Ġru ined", + "Ġruin ed", + "ĠR ein", + "ĠRe in", + "ĠRei n", + "Ġ Tracking", + "ĠTr acking", + "ĠTrack ing", + "x fb", + "xf b", + "ا ÛĮ", + "Ġv ære", + "Ġvæ re", + "Ġbr yster", + "Ġ ITS", + "ĠI TS", + "ĠIT S", + "Ġdes tiny", + "Ġdest iny", + "Ġdestin y", + "Ġs wear", + "Ġsw ear", + "Ġswe ar", + "Ġre des", + "Ġr edes", + "Ġred es", + "Ġrede s", + "Ġ clf", + "Ġc lf", + "Ġcl f", + "Ġfl ipped", + "Ġflip ped", + "ĉ head", + "ĉh ead", + "B luetooth", + "Bl uetooth", + "Ġ Overrides", + "ĠOver rides", + "ĠOverride s", + ": Boolean", + "_ =", + "_ lr", + "_l r", + "s pawn", + "sp awn", + "spa wn", + ": index", + "VAL UES", + "VALUE S", + "is key", + "isk ey", + "iske y", + "? \");Ċ", + "?\" );Ċ", + ".syn thetic", + "Ġ Checking", + "ĠCheck ing", + "struct ures", + "structure s", + "i ping", + "ip ing", + "ipi ng", + "Ġvoc als", + "Ġvocal s", + "- Up", + "-U p", + "ĠManufact urers", + "ĠManufacturer s", + "ĠMar riage", + "ĠMarr iage", + "代 çłģ", + "Ġgar ner", + "Ġgarn er", + "_ Client", + "_C lient", + "_Cl ient", + "par allel", + "paralle l", + "RI END", + "Ġvine gar", + "se gue", + "seg ue", + "J B", + "Ġcont acting", + "Ġcontact ing", + "ĠCar roll", + "ĠCarr oll", + "Ġout reach", + "Ġoutr each", + "t ensor", + "_ variant", + "_v ariant", + "_var iant", + "Ġt heat", + "Ġth eat", + "Ġthe at", + "l icable", + "lic able", + "lica ble", + "{ |", + "t iny", + "ti ny", + "tin y", + "_ letter", + "_l etter", + "Ġp encil", + "Ġpen cil", + "Ġpenc il", + "HeadersHeight SizeMode", + "il tro", + "ilt ro", + "iltr o", + ".auto configure", + ". drag", + ".d rag", + ".dr ag", + ". useState", + ".use State", + "Ġ BMI", + "ĠB MI", + "ĠBM I", + "h int", + "hi nt", + "hin t", + "Com pile", + "Comp ile", + "* \\", + "en ary", + "ena ry", + "Ġ lvl", + "Ġl vl", + "Ġlv l", + ". Cache", + ".C ache", + "+ =\"", + "+= \"", + "_ tv", + "_t v", + "ruit ment", + "Ġf read", + "Ġfr ead", + "Ġfre ad", + "Art icles", + "Article s", + "f ila", + "fi la", + "fil a", + "Ġpack aged", + "Ġpackage d", + "âĺ Ĩ", + "AT HER", + "ATH ER", + "ĠPl anned", + "ĠPlan ned", + "s cheme", + "sch eme", + "Ġdi ary", + "Ġdia ry", + "Ġoff enses", + "Ġoffense s", + "Ġoffen ses", + "/ F", + "Ġ Stick", + "ĠS tick", + "ĠSt ick", + "Ġc erc", + "Ġce rc", + "Ġcer c", + "ĠS lee", + "ĠSl ee", + "ĠSle e", + "ĉ ĉĠĠĠĠĠĠĠĠ", + "ĉĉ ĠĠĠĠĠĠĠĠ", + "ĉĉĠĠĠ ĠĠĠĠĠ", + "ĉĉĠ ĠĠĠĠĠĠĠ", + "ĉĉĠĠ ĠĠĠĠĠĠ", + "ĉĉĠĠĠĠĠĠĠ Ġ", + "ĉĉĠĠĠĠ ĠĠĠĠ", + "ĉĉĠĠĠĠĠ ĠĠĠ", + "ĉĉĠĠĠĠĠĠ ĠĠ", + "< Image", + "", + ";' >", + "ĉ col", + "ĉc ol", + "V G", + "_ boolean", + "_bool ean", + "_bo olean", + "re cent", + "rec ent", + "rece nt", + "Ġ *)ĊĊ", + "Ġ* )ĊĊ", + "Ġ*) ĊĊ", + "Ġ*)Ċ Ċ", + "ĠRain bow", + "om men", + "omm en", + "Ġl ur", + "Ġlu r", + "Ġop pression", + "Ġopp ression", + "Ġoppress ion", + "(\" ,\");Ċ", + "(\", \");Ċ", + "(\",\" );Ċ", + "ĠFac ility", + "DEF INED", + "DEFINE D", + "Ġn eon", + "Ġne on", + "Ġneo n", + "Ġoff ender", + "Ġoffend er", + "Ġoffen der", + "A FP", + "AF P", + "Ġ Cleaning", + "ĠC leaning", + "ĠClean ing", + "ĠCle aning", + "[ ]):", + "[] ):", + "[]) :", + "Ġund ocumented", + ". Repositories", + ".Re positories", + "ĠG uitar", + "ĠGu itar", + "ĠGui tar", + "аÑģÑģ ив", + "S kills", + "Sk ills", + "Skill s", + "Ġtest imon", + "Ġtestim on", + "rypt ography", + "ĠAm ber", + "ĠAmb er", + "ĠSt alin", + "ĠSta lin", + "Ġl one", + "Ġlo ne", + "Ġlon e", + "Ġap enas", + "Ġape nas", + "Ġdi eses", + "Ġdie ses", + "Ġdies es", + "Ġdiese s", + "Ġ Arduino", + "ĠAr duino", + "è½ ¬", + "= =-", + "== -", + "_ Act", + "_A ct", + "Ġ coded", + "Ġc oded", + "Ġco ded", + "Ġcode d", + "Ġcod ed", + "âĸ ł", + "am burger", + "amb urger", + "amburg er", + "- links", + "-l inks", + "-link s", + "Ġar mour", + "Ġarm our", + ". High", + ".H igh", + "get Content", + "getC ontent", + "s tag", + "st ag", + "sta g", + "Ġ heck", + "Ġh eck", + "Ġhe ck", + "Ġ ìĹĨ", + "ĠìĹ Ĩ", + "ĠMc Connell", + "ĠCon cert", + "ĠConc ert", + "ĠConce rt", + "Ġ Alloc", + "ĠAl loc", + "ĠAll oc", + "ä re", + "är e", + ". replaceAll", + ".replace All", + "Ġpart itions", + "Ġpartition s", + "r ott", + "ro tt", + "rot t", + "ĠF le", + "ĠFl e", + "_ TREE", + "_T REE", + "_TR EE", + "reason able", + "Ġ Reporting", + "ĠRep orting", + "ĠReport ing", + "Ġbillion aire", + "s cores", + "sc ores", + "score s", + "m ins", + "min s", + "mi ns", + "- eye", + "-e ye", + "M ORE", + "MO RE", + "ab ort", + "abor t", + "abo rt", + "ĠS WT", + "ĠSW T", + "Ġin verted", + "Ġinvert ed", + "Ġ Teachers", + "ĠTe achers", + "ĠTeacher s", + "ĠTea chers", + "ĠTeach ers", + "; n", + "Ġ astro", + "Ġa stro", + "Ġas tro", + "Ġast ro", + "Ġastr o", + "н ов", + "но в", + "а ниÑĨ", + "ан иÑĨ", + "ани ÑĨ", + "product o", + "c ountries", + "count ries", + "ĠO wen", + "ĠOw en", + "Ġcont amination", + "Ġcontamin ation", + "Ġconta mination", + "Ġv ibe", + "Ġvi be", + "Ġvib e", + "ĠE lli", + "ĠEl li", + "ĠEll i", + ". script", + ".s cript", + "ĠO live", + "ĠOl ive", + "ĠOliv e", + "D MA", + "DM A", + "v ier", + "vi er", + "vie r", + ": semicolon", + "- module", + "-m odule", + "-mod ule", + "g ressive", + "gress ive", + "a gu", + "ag u", + "_ players", + "_p layers", + "_pl ayers", + "_player s", + "_play ers", + "Ġresult ados", + "Ġresultado s", + "start ed", + "star ted", + "scroll Top", + "= ====", + "== ===", + "==== =", + "=== ==", + "Ġweigh ing", + "Ġ[ [[", + "Ġ[[ [", + "z ahl", + "za hl", + "( NS", + "(N S", + "Ġ Assertion", + "ĠAssert ion", + "le ague", + "lea gue", + ".set TextColor", + ".setText Color", + "ĉ Message", + "ĉM essage", + "Ġm oms", + "Ġmom s", + "Ġmo ms", + "_ AF", + "_A F", + ". wh", + ".w h", + "A LS", + "AL S", + "Ġaut re", + "Ġau tre", + "] ĊĊĊĊ", + "]Ċ ĊĊĊ", + "]ĊĊ ĊĊ", + "]ĊĊĊ Ċ", + ". opacity", + ".op acity", + "ĠBudd hist", + "ĠBuddh ist", + "Ġde af", + "ĠOrgan isation", + "( Global", + "(G lobal", + "en sch", + "ens ch", + "Ġhead ache", + "ĠA lien", + "ĠAl ien", + "ĠAli en", + "_ inode", + "_in ode", + "_i node", + "ĠSt ark", + "ĠStar k", + "ĠSta rk", + "Ġ æī", + "Ġæ ī", + "-l nd", + "-ln d", + "o ref", + "or ef", + "ore f", + "_ feat", + "_f eat", + "_fe at", + "Ġpedest rian", + "Ġnom inal", + "Ġnomin al", + "Ġball oon", + "Ġbal loon", + "Ġballo on", + "Ġ sprites", + "Ġs prites", + "Ġsp rites", + "Ġspr ites", + "Ġsprite s", + "Prototype Of", + "ĠA post", + "ĠAp ost", + "Ġ FEATURE", + "ĠF EATURE", + "ĠFE ATURE", + "O H", + "Ġre cess", + "Ġr ecess", + "Ġrec ess", + "Ġrece ss", + "ĠD onna", + "ĠDon na", + "con sumer", + "cons umer", + "consum er", + "consume r", + "$ GLOBALS", + "ĠG IF", + "ĠGI F", + "- frame", + "-f rame", + "-fr ame", + "In icio", + "Ini cio", + "Ġpass ages", + "Ġpassage s", + "Date String", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + ". byte", + ".b yte", + ".by te", + "B ug", + "Bu g", + "initial izer", + "initialize r", + "p kt", + "pk t", + "od ium", + "odi um", + "Ġ DER", + "ĠD ER", + "ĠDE R", + ". ops", + ".op s", + ".o ps", + "l eri", + "le ri", + "ler i", + "Ġgift ed", + "Ġgif ted", + "Ġ detach", + "Ġde tach", + "Ġdet ach", + "ter rain", + "terra in", + "terr ain", + "el ters", + "elt ers", + "elter s", + "ãģ ı", + ". loader", + ".l oader", + ".load er", + ".lo ader", + "ĠN GO", + "ĠNG O", + "str ncmp", + "K h", + "( fontSize", + "(font Size", + "r ocket", + "ro cket", + "rock et", + "roc ket", + "Ġpreced ent", + "ĠAur ora", + "Ġ Experiment", + "ĠEx periment", + "i sphere", + "is phere", + "isp here", + "En coded", + "Enc oded", + "Encode d", + "Ġ âĢĵĊĊ", + "ĠâĢĵ ĊĊ", + "ĠâĢĵĊ Ċ", + "Ġpy ramid", + "ĠAnn iversary", + "o fil", + "of il", + "ofi l", + "ë Ł", + "( plugin", + "(pl ugin", + "C oeff", + "Co eff", + "Ġco operate", + "Ġcooper ate", + "Ġcoop erate", + "Ġpredomin antly", + "Ġpredominant ly", + "I SM", + "IS M", + "Ph rase", + "_ DEFINE", + "_DE FINE", + "_DEF INE", + "_DEFIN E", + "F lip", + "Fl ip", + "AMIL Y", + "AMI LY", + "ĠMark ets", + "ĠMarket s", + "Ġ StreamReader", + "ĠStream Reader", + "Ġ Combine", + "ĠC ombine", + "ĠCom bine", + "ĠComb ine", + "Ġmanus cript", + "z za", + "zz a", + ", tp", + ",t p", + "Wh atever", + "What ever", + "IT ICAL", + "igh bour", + "ighb our", + "Data Provider", + ". Texture", + ".Text ure", + "priv acy", + ". SDK", + ".S DK", + "Ġre charge", + "Ġ cpp", + "Ġc pp", + "Ġcp p", + "Ġ CFG", + "ĠC FG", + "ĠCF G", + "( holder", + "(h older", + "( py", + "(p y", + "m ot", + "mo t", + "Ġsa voir", + "Ġsav oir", + "ĠR osa", + "ĠRo sa", + "ĠRos a", + "ĠP Cs", + "ĠPC s", + "Ġ íĻ", + "Ġí Ļ", + ".her oku", + ".hero ku", + "Ġf ren", + "Ġfr en", + "Ġfre n", + "ĠR iley", + "ĠRi ley", + "a gate", + "ag ate", + "aga te", + "Ġs ond", + "Ġso nd", + "Ġson d", + ". xlsx", + ".x lsx", + ".xls x", + "Ġh acked", + "Ġhack ed", + "Ġhac ked", + "st ad", + "sta d", + "G i", + "Ġs anity", + "Ġsan ity", + "Ġsanit y", + "ĠSql DataAdapter", + ".. .\",", + "... \",", + "...\" ,", + "ĠP ussy", + "Ġ ****************", + "Ġ** **************", + "Ġ**** ************", + "Ġ******** ********", + "Ġhass le", + "_P ARENT", + "_PAR ENT", + "ĠU AE", + "ĠUA E", + "Ġbegin ners", + "Ġbeginner s", + "( Client", + "(C lient", + "(Cl ient", + "Ġstat istically", + "Ġstatist ically", + "Ġstatistical ly", + "Ġstatistic ally", + ". hour", + ".h our", + "e delta", + "ed elta", + "Ġ traction", + "Ġt raction", + "Ġtr action", + "Ġtra ction", + "Ġtract ion", + "u elve", + "uel ve", + "a rat", + "ar at", + "ara t", + "Ġsa una", + "Ġsau na", + "IN VALID", + "INVAL ID", + "Ġindict ment", + "AL LE", + "ALL E", + "Ġd issent", + "Ġdis sent", + "Ġdiss ent", + "Ġdisse nt", + "Ġ Typography", + "ĠTyp ography", + "Ġintent ional", + "Ġintention al", + "s it", + "si t", + "ĠAn imals", + "ĠAnimal s", + "ĠAnim als", + "Ġcoun tryside", + "Ġcountry side", + "Ġ uart", + "Ġu art", + "Ġua rt", + "} \\\"", + "}\\ \"", + "Ġseam less", + "¾ 示", + "Ġ autos", + "Ġa utos", + "Ġaut os", + "Ġauto s", + "Ġau tos", + "Ġ\" '\";Ċ", + "Ġ\"' \";Ċ", + "Ġ\"'\" ;Ċ", + "F lush", + "Fl ush", + "AN NOT", + "ANN OT", + "Ġal gebra", + "Ġalg ebra", + "as soc", + "ass oc", + "asso c", + "ĠW aters", + "ĠWater s", + "ĠWat ers", + "ĠWa ters", + "Ġprepar ations", + "Ġpreparation s", + "r onym", + "ro nym", + "ron ym", + "[, ]", + "S ans", + "San s", + "Sa ns", + "Ġarm ies", + "i peg", + "ip eg", + "ipe g", + "Ġcre amy", + "Ġcream y", + "Ġcrea my", + ". art", + ".a rt", + ".ar t", + "e tre", + "et re", + "etr e", + "Ġ Animated", + "ĠAn imated", + "ĠAnim ated", + "Ġun pleasant", + "e mean", + "em ean", + "eme an", + "g reat", + "gr eat", + "gre at", + "i Äħ", + "Ġ Earlier", + "ĠEar lier", + "ĠEarl ier", + "Ġc hic", + "Ġch ic", + "Ġchi c", + "Ġpres erving", + "( exec", + "(e xec", + "(ex ec", + "ĠInvest igation", + "ĠInvestig ation", + "ĉ GPIO", + "ĉG PIO", + "Ġrig orous", + "Ġrigor ous", + "i jo", + "ij o", + "= num", + "=n um", + "Ġ toolStrip", + "Ġt oolStrip", + "Ġtool Strip", + ") set", + ")s et", + "+ \"&", + "+\" &", + "Ġ Acceler", + "ĠAcc eler", + "Ġdevelop mental", + "Ġdevelopment al", + "is posable", + "Ġflaw ed", + "Ġfla wed", + "r ene", + "re ne", + "ren e", + "Up dating", + "Ġwatch dog", + "Ġden ominator", + "Ġdenom inator", + "Ġdenomin ator", + "Ġsubur bs", + "Ġsuburb s", + "Ġ ...)", + "Ġ... )", + "Ġ.. .)", + "Ġconv ictions", + "Ġconviction s", + "Ġconvict ions", + "c losure", + "clo sure", + ". IP", + ".I P", + "Ġtrans lates", + "Ġtransl ates", + "Ġtranslate s", + ".s wt", + ".sw t", + ". Trace", + ".T race", + ".Tr ace", + "Ġmet tre", + ". isEnabled", + ".is Enabled", + "Ġ Effective", + "ĠE ffective", + "ĠEffect ive", + "ĠEff ective", + ". toInt", + ".to Int", + "Ġen chant", + "Ġench ant", + "Ġst unned", + "Ġstun ned", + "Ġ poi", + "Ġp oi", + "Ġpo i", + "/ code", + "/c ode", + "/co de", + "a dm", + "ad m", + ".data binding", + ".datab inding", + ".databind ing", + "Ġ Lorem", + "ĠL orem", + "ĠLo rem", + "ĠLore m", + "ĠLor em", + "________________________________ ________________________________", + "Ġ ledger", + "Ġled ger", + "Ġledge r", + "Ġc ara", + "Ġcar a", + "Ġca ra", + "ĠG ir", + "ĠGi r", + "Ġw aits", + "Ġwait s", + "Ġwa its", + "U no", + "Un o", + "Ġ cwd", + "Ġc wd", + "Ġcw d", + "è¾ ij", + "ĠT Result", + "Ġre jo", + "Ġrej o", + "Ġe mitted", + "Ġem itted", + "Ġemit ted", + "ĠWest minster", + "ä¸Ģ 个", + "n ek", + "ne k", + "_T is", + "Ġen act", + "ĉ with", + "ĉw ith", + "or gia", + "org ia", + "Ġj ue", + "Ġju e", + "Per form", + "S PATH", + "SP ATH", + "SPA TH", + ". topic", + ".t opic", + ".to pic", + ".top ic", + "ĠD aten", + "ĠDate n", + "ĠDa ten", + "ĠDat en", + "Ạ§", + "Ġsit io", + "Ġsiti o", + "_ MM", + "_M M", + "\" So", + "\"S o", + "b ial", + "bi al", + "bia l", + "Ġ scoped", + "Ġsc oped", + "Ġscope d", + "Ġsco ped", + "Ġscop ed", + "Re quires", + "Require s", + "Ġ TOTAL", + "ĠT OTAL", + "ĠCh ancellor", + "( contents", + "(content s", + "(cont ents", + "Ġste alth", + "Ġsteal th", + "dev ices", + "device s", + "- pass", + "-p ass", + "il ih", + "ili h", + "ĠMal colm", + "ĠDe pot", + "ĠDep ot", + "Ġcon figur", + "Ġconfig ur", + "a ussian", + "aus sian", + "auss ian", + "_ constraint", + "_con straint", + "в еÑĤ", + "ве ÑĤ", + "G RA", + "GR A", + "Ġ Rates", + "ĠR ates", + "ĠRa tes", + "ĠRate s", + "ĠRat es", + ".dataGridView TextBoxColumn", + "ĠN obel", + "ĠNo bel", + "ĠNob el", + "i tics", + "it ics", + "iti cs", + "itic s", + "Ġignor ant", + "Ġ Reporter", + "ĠRe porter", + "ĠReport er", + "ĠEb ola", + "Ġ Shock", + "ĠSh ock", + "ĠSho ck", + "_ relation", + "_re lation", + "_rel ation", + "ĠN inja", + "ĠNin ja", + ") c", + "Ġ ticker", + "Ġt icker", + "Ġti cker", + "Ġtick er", + "Ġtic ker", + ". isChecked", + ".is Checked", + "ĠSup pliers", + "ĠSupplier s", + "ĠR apid", + "ĠRa pid", + "ĠRap id", + "Level s", + "âĤ¬ âĦ¢", + "ĉ queue", + "ĉq ueue", + "Ġ chop", + "Ġc hop", + "Ġch op", + "Ġcho p", + "Ġ Unix", + "ĠUn ix", + "ĠUni x", + "re ject", + "rej ect", + "- calendar", + "-c alendar", + "-cal endar", + "( sort", + "(s ort", + "(so rt", + "è ne", + "èn e", + "erc icio", + "Ġh ect", + "Ġhe ct", + "CALL TYPE", + "r oupon", + "ro upon", + "rou pon", + "roup on", + "Ġrent als", + "Ġrental s", + "author s", + "auth ors", + "{ name", + "{n ame", + "ĠF IFO", + "ĠFI FO", + "Ġ lassen", + "Ġl assen", + "Ġlas sen", + "Ġ Nous", + "ĠN ous", + "ĠNo us", + "ĠNou s", + "Ġsn apped", + "Ġsnap ped", + "Ġsna pped", + "Ġf ertility", + "Ġfer tility", + "Ġfert ility", + "Ġfertil ity", + "\" log", + "cl icked", + "click ed", + "Ġplan ting", + "Ġplant ing", + "Ġ gb", + "Ġg b", + "/ output", + "/out put", + "PE AT", + "Ġ categoria", + "Ġc ategoria", + "Ġcategor ia", + "Ġ bach", + "Ġb ach", + "Ġba ch", + "Ġbac h", + "Prof essor", + "i nth", + "in th", + "int h", + "\" ]čĊ", + "\"] čĊ", + "Rec order", + "Record er", + "s erde", + "ser de", + "Ġ Transmission", + "ĠTrans mission", + "t rad", + "tr ad", + "tra d", + "Ġtur bo", + "Ġturb o", + "_ VERTEX", + "_VER TEX", + "\\ Event", + "\\E vent", + "il ver", + "Ġbod ily", + "Ġ Sources", + "ĠS ources", + "ĠSource s", + "ĠSour ces", + "Ġkill ings", + "Ġkilling s", + "Ġkil lings", + ".xr TableCell", + "Ġfol ded", + "Ġfold ed", + "/ legal", + "/l egal", + "u ner", + "un er", + "une r", + "ĠR ifle", + "ĠRif le", + "ĠM IDI", + "ĠMI DI", + "ĠMID I", + "_Selected IndexChanged", + ".Size Type", + "Ġ WebSocket", + "ĠWeb Socket", + "Ġse leccion", + "Ġsele ccion", + "S and", + "San d", + "Sa nd", + "ot ros", + "otr os", + "Ġen vision", + "Ġenv ision", + "Ġenvis ion", + "/ etc", + "/e tc", + "ĠMel issa", + "S pot", + "Sp ot", + "Spo t", + "н ое", + "но е", + "_ ARM", + "_A RM", + "_AR M", + "At tempt", + "Att empt", + "Ġ BI", + "ĠB I", + "ãģ Ķ", + "Ġ DU", + "ĠD U", + "Ġback lash", + "st ride", + "str ide", + "stri de", + "/ classes", + "/c lasses", + "/class es", + "/cl asses", + "Ġtext Color", + "_ staff", + "_st aff", + "_sta ff", + "ob lin", + "obl in", + "ag enta", + "agent a", + "agen ta", + ". collections", + ".c ollections", + ".col lections", + ".collection s", + ".collect ions", + ".coll ections", + "il lage", + "ill age", + "illa ge", + "' čĊčĊ", + "'čĊ čĊ", + "fl atten", + "flat ten", + "_ sales", + "_s ales", + "_sale s", + "_sal es", + "_sa les", + "_ MASTER", + "_M ASTER", + "_MA STER", + "T W", + "_ da", + "_d a", + "P itch", + "ph ies", + "phi es", + "Ġz ombies", + "Ġzombie s", + "Ġ VERY", + "ĠV ERY", + "ĠVER Y", + "ĠVE RY", + "ĠPh armacy", + "ĠPharm acy", + "ĠPharmac y", + "ĠPharma cy", + "Ġprogress Bar", + "Ġhas htag", + "Ġhash tag", + "S idebar", + "Side bar", + "@ stop", + "@s top", + "( pc", + "(p c", + "ол ж", + "M AKE", + "MA KE", + "ĠC oron", + "ĠCo ron", + "ĠCor on", + "Ġkv inner", + "Ġkvin ner", + "Ġkvinn er", + "Ġkvinne r", + "ĠM aid", + "ĠMa id", + "ĠMai d", + "b ob", + "bo b", + ". titleLabel", + ".title Label", + "Ġsuccess es", + "Ġsucc esses", + "Ġsucces ses", + "ĠDem ocracy", + "ĠDemocr acy", + "ĠS urgery", + "ĠSurg ery", + "ĠSurge ry", + "Ġco ugar", + "Ġcou gar", + "Ġ curso", + "Ġcur so", + "Ġcurs o", + "Ġl oro", + "Ġlo ro", + "Ġlor o", + "ist ency", + "iste ncy", + "isten cy", + "Sen ior", + "æ k", + "Ġ AAA", + "ĠA AA", + "ĠAA A", + "Ġ BOOK", + "ĠB OOK", + "ĠBO OK", + "к о", + "W STR", + "WS TR", + "Ġ */,Ċ", + "Ġ* /,Ċ", + "Ġ*/ ,Ċ", + "Ġ*/, Ċ", + "o yal", + "oy al", + "oya l", + ". vector", + ".v ector", + ".vec tor", + "Ġ SPEC", + "ĠS PEC", + "ĠSP EC", + "ĠSPE C", + "S SF", + "SS F", + "Ġcomp uls", + "ĠAppe als", + "ĠAppeal s", + "ĠW inston", + "ĠWin ston", + "ĠWins ton", + "ĠMock ito", + "con trib", + "cont rib", + "contr ib", + "contri b", + ". available", + ".a vailable", + ".av ailable", + "entity Manager", + "a rias", + "ar ias", + "ari as", + "aria s", + "_ sale", + "_s ale", + "_sal e", + "_sa le", + "_ rs", + "_r s", + "Ġde coding", + "Ġdec oding", + "Ġdeco ding", + "Ġ locator", + "Ġl ocator", + "Ġloc ator", + "ol ith", + "oli th", + "olit h", + "Ġ kol", + "Ġk ol", + "Ġko l", + "Ġ ascii", + "Ġasc ii", + "ĠR ut", + "ĠRu t", + "/ interface", + "ĉ ĉĉĉĉĉĠĠĠ", + "ĉĉ ĉĉĉĉĠĠĠ", + "ĉĉĉĉ ĉĉĠĠĠ", + "ĉĉĉ ĉĉĉĠĠĠ", + "ĉĉĉĉĉ ĉĠĠĠ", + "ĉĉĉĉĉĉ ĠĠĠ", + "ĉĉĉĉĉĉĠ ĠĠ", + "ĉĉĉĉĉĉĠĠ Ġ", + "Ġ Numer", + "ĠN umer", + "ĠNum er", + "ĠNu mer", + ". flip", + ".f lip", + ".fl ip", + "- del", + "-d el", + "-de l", + "Ġbol ster", + "Ġbols ter", + "on omic", + "ono mic", + "onom ic", + "Ġ zm", + "Ġz m", + "L G", + "Find By", + "Ġ adaptive", + "Ġad aptive", + "Ġadapt ive", + "Ġada ptive", + "l oo", + "lo o", + "Ġ vue", + "Ġv ue", + "Ġvu e", + "( reverse", + "(re verse", + "_ canvas", + "_c anvas", + "_can vas", + ". roles", + ".r oles", + ".role s", + ".ro les", + "ific ado", + "ifica do", + "ven ient", + "\" As", + "\"A s", + "Ġ Entr", + "ĠEn tr", + "ĠEnt r", + "al igned", + "align ed", + "Ġbere its", + "/ //ĊĊ", + "// /ĊĊ", + "/// ĊĊ", + "///Ċ Ċ", + ".g wt", + ". employee", + ".e mployee", + "_ cli", + "_c li", + "_cl i", + "Ġanticip ate", + "éĻ IJ", + "Ġp ik", + "Ġpi k", + "Ġmush rooms", + "Ġmushroom s", + "( tt", + "(t t", + "Ġ oma", + "Ġo ma", + "Ġom a", + "ĠSan chez", + "_ google", + "_g oogle", + "_go ogle", + ". Valid", + ".Val id", + "Ġ FileName", + "ĠFile Name", + "iv ative", + "k ed", + "ke d", + "- war", + "-w ar", + "Ġm aturity", + "Ġmat urity", + "и д", + "Ġ miner", + "Ġm iner", + "Ġmin er", + "Ġmi ner", + "Ġmine r", + "Re ducers", + "Reduc ers", + "Reducer s", + "Reduce rs", + "Ġ LatLng", + "ĠL atLng", + "ĠLat Lng", + "_ STD", + "_S TD", + "_ST D", + "D igits", + "Digit s", + "Dig its", + "C alc", + "Cal c", + "Ca lc", + "- upload", + "-up load", + "Ġhand ic", + "Ġhan dic", + "ี à¹Ī", + "eg rated", + "egr ated", + "egrate d", + "egra ted", + "Ġ STM", + "ĠS TM", + "ĠST M", + "C lients", + "Client s", + "Cl ients", + "Cli ents", + "ĠTur bo", + "S YNC", + "SY NC", + "Ġphot ographers", + "Ġphotograph ers", + "Ġphotographer s", + ". Out", + ".O ut", + ". character", + ".char acter", + "B UILD", + "BU ILD", + ". unlock", + ".un lock", + "Ġar ises", + "Ġarise s", + "Ġ Commands", + "ĠComm ands", + "ĠCommand s", + "(\" \");čĊ", + "(\"\" );čĊ", + "(\"\") ;čĊ", + "(\"\"); čĊ", + "_ FORE", + "_F ORE", + "_FOR E", + "; ',", + ";' ,", + "+ \"'", + "+\" '", + ". Images", + ".Image s", + ".Im ages", + "\" ){", + "\") {", + "ĠM eyer", + "ĠMe yer", + "ĠMey er", + "Ġneg atively", + "Ġnegative ly", + "Ġ DLL", + "ĠD LL", + "ĠDL L", + "Ġ exe", + "Ġe xe", + "Ġex e", + "Ġdef iciency", + "Ġwild ly", + "- switch", + "-s witch", + "-sw itch", + "con struction", + "construct ion", + "Ġexception ally", + "Ġexceptional ly", + "ĠL iz", + "ĠLi z", + "/ java", + "/j ava", + "/jav a", + "Ġthe irs", + "Ġtheir s", + "ĠCon temporary", + "ĠCont emporary", + "l is", + "li s", + ".fill Rect", + "ĠN FC", + "ĠNF C", + "Ġre he", + "Ġreh e", + "( numbers", + "(num bers", + "(number s", + "Ġr aster", + "Ġra ster", + "Ġras ter", + "Ġrast er", + "Ġfig uring", + "Ġfigur ing", + "Ġshow c", + "Ġsho wc", + "ĠJ ill", + "ĠJi ll", + "Ġar cade", + "Ġarc ade", + "ĠConstruct s", + "m dl", + "md l", + "( '|", + "(' |", + "Ġident ifiers", + "Ġidentifier s", + "Ġ stellar", + "Ġst ellar", + "( Connection", + "Ġ\" {{", + "Ġ\"{ {", + "y or", + "yo r", + "( mysqli", + "(m ysqli", + "(mysql i", + "Ġd ove", + "Ġdo ve", + "Ġdov e", + "Of Birth", + ". disconnect", + ".dis connect", + "_ hi", + "_h i", + "Ġzw ischen", + "ĠGr und", + "i ros", + "ir os", + "iro s", + "_ Array", + "_A rray", + ". onclick", + ".on click", + "an som", + "ans om", + "An swers", + "Answer s", + "Ans wers", + "ĉ remove", + "ĉre move", + "F a", + "Ġh urry", + "Ġhur ry", + "- inf", + "-in f", + "-i nf", + "Ġ getClass", + "Ġget Class", + "ĠgetC lass", + "ĠReg ulation", + "Ġ FLAGS", + "ĠFLAG S", + "m isc", + "mi sc", + "mis c", + "K en", + "Ke n", + "_ heading", + "_head ing", + "_he ading", + "G Hz", + "GH z", + "- entry", + "-en try", + "Ġbi ography", + "S ig", + "Si g", + "- mf", + "-m f", + "W atcher", + "Watch er", + "Wat cher", + "âĢľ A", + "} px", + "Ġsp icy", + "Ġspi cy", + "_ sq", + "_s q", + "L ost", + "Lo st", + "Los t", + "( track", + "(t rack", + "(tr ack", + "а ли", + "ал и", + "Desc ending", + "< bits", + " ((", + ">( (", + "s urvey", + "sur vey", + "Ġ íĺ", + "Ġí ĺ", + ".. .')Ċ", + "... ')Ċ", + "...' )Ċ", + "Ġ Divider", + "ĠDi vider", + "ĠDiv ider", + "ĠDivide r", + "o sl", + "os l", + "_ CANCEL", + "_C ANCEL", + "_CAN CEL", + "_ prepare", + "_pre pare", + "_prep are", + "s tin", + "st in", + "sti n", + "ĠHe ath", + "ĠHeat h", + ". PrimaryKey", + ".Primary Key", + "Ġ âĨIJ", + "ĠâĨ IJ", + "ĠLocal DateTime", + "ĠLocalDate Time", + "Ġco operative", + "Ġcooper ative", + "L earning", + "Le arning", + "Learn ing", + ". enqueue", + ".en queue", + "Ġ goog", + "Ġg oog", + "Ġgo og", + "Ġgoo g", + "Ġ Regression", + "ĠRe gression", + "ĠReg ression", + "i mates", + "im ates", + "imate s", + "ima tes", + "imat es", + "Ġvoy eur", + "Ġ Drink", + "ĠD rink", + "ĠDr ink", + "p lug", + "pl ug", + "Ġl ender", + "Ġle nder", + "Ġlen der", + "Ġlend er", + "m ana", + "man a", + "ma na", + "Ġperson nes", + "Ġpersonne s", + "Ġpersonn es", + "yp se", + "yps e", + "Ġ unlink", + "Ġun link", + "Ġunl ink", + "ĠRa vens", + "ĠRav ens", + "ĠRaven s", + "Ġh urd", + "Ġhur d", + "Ġhu rd", + "Ġperiod ically", + "Ġperiodic ally", + "AR GS", + "ARG S", + "Ġ GH", + "ĠG H", + "char acters", + "character s", + ".. .\"ĊĊ", + "... \"ĊĊ", + "...\" ĊĊ", + "...\"Ċ Ċ", + "- establish", + "Ġ dn", + "Ġd n", + "( condition", + "(con dition", + "(cond ition", + "Ġ Gravity", + "ĠGr avity", + "Ġes tas", + "Ġest as", + "Ġesta s", + "_ focus", + "_f ocus", + "C reature", + "Cre ature", + "Cr eature", + "Creat ure", + "( site", + "(s ite", + "(si te", + "Ġc arr", + "Ġcar r", + "Ġca rr", + "Ġ RL", + "ĠR L", + "Ġ RI", + "ĠR I", + "ĠM oto", + "ĠMo to", + "ĠMot o", + "A SF", + "AS F", + "Ġ Luckily", + "ĠLuck ily", + "ĉ Route", + "ĉR oute", + "Ġ entropy", + "Ġent ropy", + "Ġentr opy", + "( \",\"", + "(\" ,\"", + "(\", \"", + "C ollect", + "Col lect", + "Coll ect", + "( contact", + "(cont act", + "ĠFlor ence", + "ĠFlo rence", + "Ġpremium s", + "Ġpremi ums", + "Ġl ifecycle", + "Ġlife cycle", + "Ġlif ecycle", + "Ġb ans", + "Ġban s", + "Ġba ns", + "x ef", + "xe f", + "Web Kit", + "Ġ Floating", + "ĠF loating", + "ĠFloat ing", + "ĠFlo ating", + "Ġ cosa", + "Ġc osa", + "Ġco sa", + "Ġcos a", + "S pecific", + "Spec ific", + "ĠLo ans", + "ĠLoan s", + "b read", + "br ead", + "bre ad", + "Ġdes criptors", + "Ġdescriptor s", + "Ġ{ :.", + "Ġ{: .", + "TH READ", + "ĠT rent", + "ĠTr ent", + "ĠTre nt", + "Ġs cop", + "Ġsc op", + "Ġsco p", + "Q A", + "ĠAn tar", + "ĠAnt ar", + "p el", + "pe l", + "_ difference", + "_d ifference", + "_diff erence", + "_ changes", + "_ch anges", + "_change s", + "_chan ges", + "( ...)", + "(... )", + "(.. .)", + "Ġ Rotation", + "ĠR otation", + "ĠRot ation", + "ĠL GPL", + "ĠLG PL", + "Ġ JUST", + "ĠJ UST", + "( Task", + "(T ask", + "_ subset", + "_sub set", + "_subs et", + "Ġ TRANS", + "ĠTR ANS", + "ĠTRAN S", + "åĬ Ľ", + "ĠS cout", + "ĠSc out", + "ĠSco ut", + "- popup", + "-p opup", + "-pop up", + "Ġsm oked", + "Ġsmoke d", + "Ġsmo ked", + "_ Class", + "_C lass", + "_Cl ass", + "Ġturn over", + "Ġturno ver", + "br akk", + "bra kk", + "ĠRock y", + "ĠRo cky", + "ĠRoc ky", + "t as", + "ta s", + ".Regular Expressions", + "ĠElli ott", + "ĠElliot t", + "Ġ Spinner", + "ĠSp inner", + "ĠSpin ner", + "DUCT ION", + "DU CTION", + "Ġl ibre", + "Ġli bre", + "Ġlib re", + "Ġlibr e", + "Ġmol to", + "Ġmolt o", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ", + "Ġ FTP", + "ĠF TP", + "ĠFT P", + "m peg", + "mp eg", + "( features", + "(f eatures", + "(feature s", + "(fe atures", + "Ġb ald", + "Ġbal d", + "Ġba ld", + "ĠV id", + "ĠVi d", + "Ġsh outing", + "Ġshout ing", + "Ġsho uting", + "L int", + "Li nt", + "Lin t", + "Ġ sockets", + "Ġs ockets", + "Ġsocket s", + "Ġsock ets", + "Ġp row", + "Ġpro w", + "Ġpr ow", + "Ġnou velle", + "Ġnouvel le", + "Ġnouve lle", + "is card", + "isc ard", + "ĠS ponsor", + "Ġ consulta", + "Ġcons ulta", + "Ġconsult a", + "Ġconsul ta", + ") ));", + ")) );", + "))) ;", + "Ind ian", + "India n", + "ĠR aspberry", + "Ġteam mate", + "Ġ JWT", + "ĠJ WT", + "ĠJW T", + "ĠG hana", + "ĠGh ana", + "Ġ cakes", + "Ġc akes", + "Ġca kes", + "Ġcake s", + "pr imer", + "prim er", + "prime r", + "pri mer", + "form a", + "for ma", + "erg arten", + "_ Manager", + "_M anager", + "_Man ager", + "Ġpre season", + "G AME", + "GA ME", + "| \"", + "ĠB rock", + "ĠBr ock", + "ĠBro ck", + "Ġocc upy", + "Ġoccup y", + "Ġdecor ations", + "Ġdecoration s", + "á nd", + "án d", + "Ġ cot", + "Ġc ot", + "Ġco t", + "Ġp aran", + "Ġpar an", + "Ġpara n", + "Ġpa ran", + "D isk", + "Dis k", + "Di sk", + "r emain", + "re main", + "rem ain", + "rema in", + "> ?", + "St rong", + "Str ong", + "Ġf rance", + "Ġfr ance", + "Ġfra nce", + "Ġfran ce", + "Ġfranc e", + "ĠE ra", + "ĠEr a", + "- cr", + "-c r", + ".Buffer edReader", + ".Buffered Reader", + "ĠParad ise", + "ĠV AT", + "ĠVA T", + "ĠAn ders", + "ĠAnd ers", + "Ġl imb", + "Ġli mb", + "Ġlim b", + "amp oo", + "ampo o", + "Ġimper ative", + "UT ILITY", + "UTIL ITY", + "Ġ Recognition", + "ĠRec ognition", + "ĠRecogn ition", + "Ġragaz ze", + "Ġp ops", + "Ġpop s", + "Ġpo ps", + "y press", + "yp ress", + "Ġemb argo", + "Ġembar go", + "// {Ċ", + "Ġs yll", + "Ġsy ll", + "P TR", + "PT R", + "åŃĺ åľ¨", + "Ġdid nt", + "Ġdidn t", + "M ailer", + "Mail er", + "Ma iler", + "Ġacad emics", + "Ġacademic s", + "ĠFr auen", + "ĠFra uen", + "ĠFrau en", + "ne ider", + "- rel", + "-r el", + "-re l", + "Ġrain bow", + "( In", + "(I n", + "Ġs liced", + "Ġsl iced", + "Ġslice d", + "Ġslic ed", + "= ============Ċ", + "== ===========Ċ", + "==== =========Ċ", + "======== =====Ċ", + "=== ==========Ċ", + "============ =Ċ", + "============= Ċ", + "=========== ==Ċ", + "========= ====Ċ", + "========== ===Ċ", + "====== =======Ċ", + "===== ========Ċ", + "======= ======Ċ", + "( send", + "(s end", + "(se nd", + "NSMutable Dictionary", + "v os", + "vo s", + "( package", + "(p ackage", + "(pack age", + "Ġord inance", + "Ġordin ance", + "view er", + "vie wer", + "ĠSan tos", + "ĠSant os", + "ĠSanto s", + "- selling", + "-s elling", + "Ġ gov", + "Ġg ov", + "Ġgo v", + "et tle", + "ett le", + "Ġfound ers", + "Ġfo unders", + "Ġfounder s", + "Ġw aking", + "Ġwa king", + "s lashes", + "sl ashes", + "slash es", + "-p ound", + "-po und", + "re cht", + "rec ht", + "rech t", + "ا ت", + "Ø§Ø ª", + ". onClick", + ".on Click", + "Ġn ord", + "Ġno rd", + "Ġnor d", + "st änd", + "_ when", + "_w hen", + "_wh en", + "U TERS", + "UT ERS", + "UTE RS", + "i cc", + "ic c", + "Ġcaps ule", + "ĠW id", + "ĠWi d", + "M arc", + "Mar c", + "Ma rc", + "ภ¸", + "r ored", + "ro red", + "ror ed", + "U GE", + "UG E", + "LO UD", + "Ġ Audit", + "ĠA udit", + "ĠAud it", + "ĠAu dit", + "ĠAudi t", + "ip ients", + "ipient s", + "ipi ents", + "op ian", + "opia n", + "opi an", + "ĠS ue", + "ĠSu e", + "Ġwur den", + "Ġwurde n", + ". Helpers", + ".H elpers", + ".Helper s", + ".Help ers", + "Ġf actions", + "Ġfact ions", + "Ġfa ctions", + "Ġfaction s", + "[ np", + "[n p", + "- than", + "-t han", + "-th an", + "Ġre co", + "Ġr eco", + "Ġrec o", + "Ġ kas", + "Ġk as", + "Ġka s", + "Ġ cmds", + "Ġcmd s", + "Ġcm ds", + "/ network", + "/n etwork", + "/net work", + "x bf", + "xb f", + "get Color", + "getC olor", + "Ġ biased", + "Ġbi ased", + "Ġbias ed", + "ĠL ak", + "ĠLa k", + "D atas", + "Data s", + "Da tas", + "Dat as", + "v ents", + "ve nts", + "vent s", + "ven ts", + "Ġ ë²", + "Ġë ²", + "_ PS", + "_P S", + ". Validate", + ".Valid ate", + "Inv oker", + "Invoke r", + "Ġne uen", + "Ġneu en", + "Ġneue n", + "Ġju venile", + "Ġjuven ile", + "V ISION", + "VI SION", + "VIS ION", + "Ġde vote", + "Ġdev ote", + "Ġ linha", + "Ġl inha", + "Ġlin ha", + "Ġlinh a", + "Ġdiscount ed", + "Ġdisco unted", + "\\ Config", + "Ġworth while", + "Ġskin ny", + "Ġ Courses", + "ĠC ourses", + "ĠCo urses", + "ĠCour ses", + "ĠCourse s", + "le ys", + "ley s", + "ĠMort gage", + "K evin", + "Ke vin", + "Ġann ounces", + "Ġannounc es", + "Ġannounce s", + "] )*", + "]) *", + "res ervation", + "Ġ æķ°", + "Ġæķ °", + "Ġprejud ice", + "ĠString Comparison", + "Ġbe ard", + "Ġbear d", + "- win", + "-w in", + "ĠS ão", + "ĉ ms", + "ĉm s", + "j al", + "ja l", + "Ġ Earn", + "ĠE arn", + "ĠEar n", + "ĠEa rn", + "_ ports", + "_p orts", + "_port s", + "_po rts", + "_por ts", + "Ġ Nombre", + "ĠN ombre", + "ĠNom bre", + "_ COR", + "_C OR", + "_CO R", + "Ġ BUILD", + "ĠB UILD", + "ĠBU ILD", + ". sound", + ".s ound", + ".so und", + "Y ellow", + "Ġlineback er", + "Ġchar itable", + "Ġcha ritable", + "j ug", + "ju g", + "_NON NULL", + "ĠD ental", + "ĠDen tal", + "ĠDent al", + "\" >${", + "\"> ${", + "\">$ {", + "ĉ match", + "ĉm atch", + "ĉmat ch", + "R ussian", + "Russia n", + "Russ ian", + "Rus sian", + "Ġver sch", + "Ġvers ch", + "Ġp inned", + "Ġpin ned", + "Ġadopt ing", + "Options Menu", + "P ag", + "Pa g", + "Ġpair ing", + "Ġpa iring", + "Ġpai ring", + "Ġt read", + "Ġtr ead", + "Ġtre ad", + "erc ises", + "ercise s", + "Ġ Spread", + "ĠS pread", + "ĠSp read", + "ĠSpr ead", + ") i", + "Ġ BAD", + "ĠB AD", + "ĠBA D", + "_ tf", + "_t f", + "UI ImageView", + "UIImage View", + "pop ulate", + "b ab", + "ba b", + "Ġ Ïĥ", + "ĠÏ ĥ", + "[ ++", + "Ġopi oid", + "Ġ ##Ċ", + "Ġ# #Ċ", + "Ġ## Ċ", + "d type", + "dt ype", + "ĠSt arts", + "ĠStart s", + "ĠStar ts", + "ĠSta rts", + "(' /')", + "('/ ')", + "Ġperson als", + "Ġpersonal s", + "Ġpersona ls", + "- market", + "-m arket", + "-mark et", + "-mar ket", + "Ġredund ant", + "ĠEss ential", + "Ġsc rapy", + "Ġscr apy", + "Ġscrap y", + "Ġ им", + "Ġи м", + "a cl", + "ac l", + "Ġ crear", + "Ġc rear", + "Ġcr ear", + "Ġcre ar", + "Ġcrea r", + "ĠB end", + "ĠBe nd", + "ĠBen d", + "Ġrel ieve", + "Ġreli eve", + "Ġrelie ve", + "- room", + "-r oom", + "-ro om", + "w ife", + "wi fe", + "Ġv Ãł", + "ĠQ Point", + "Ġqu asi", + "Ġqua si", + "Ġ methodName", + "Ġmethod Name", + "\\ xc", + "\\x c", + "ĠP eru", + "ĠPer u", + "ĠPe ru", + "/ The", + "/T he", + ". orm", + ".o rm", + ".or m", + "Ġ viz", + "Ġv iz", + "Ġvi z", + "/ pdf", + "/p df", + "Loc ated", + "Ġconfront ation", + "ĠChampionship s", + "ĠChampions hips", + "ĠChampion ships", + "Ġhy pert", + "Ġhyp ert", + "Ġhyper t", + "Ġhype rt", + "Ġ dj", + "Ġd j", + "Ġ UserInfo", + "ĠUser Info", + "Ġ åĪĽå»º", + "ĠåĪ Ľå»º", + "\\ xb", + "\\x b", + "( sim", + "(s im", + "(si m", + "Ġ ==Ċ", + "Ġ= =Ċ", + "Ġ== Ċ", + "Ġst aging", + "Ġsta ging", + "Ġstag ing", + "Ġdr astically", + "Ġdrastic ally", + "åŃ ¦", + "l ords", + "lor ds", + "lord s", + ". less", + ".l ess", + ".le ss", + "вед иÑĤе", + "Ġ Bucket", + "ĠB ucket", + "ĠBuck et", + "ĠBu cket", + "ĠM am", + "ĠMa m", + ". term", + ".t erm", + ".te rm", + "_ pi", + "_p i", + "c zy", + "cz y", + ". pub", + ".p ub", + "p recio", + "pre cio", + "prec io", + "preci o", + "ĠV irt", + "ĠVir t", + "ĠVi rt", + "Ġ roman", + "Ġr oman", + "Ġro man", + "Ġrom an", + "Ġroma n", + "i tat", + "it at", + "ita t", + "L ex", + "Le x", + "_ infos", + "_in fos", + "_info s", + "_inf os", + "Ä °", + ". other", + ".o ther", + ".ot her", + "VE LO", + "VEL O", + "Ġ ponder", + "Ġp onder", + "Ġpo nder", + "Ġpon der", + "Ġpond er", + "Ġh anno", + "Ġhan no", + "Ġhann o", + "( Page", + "(P age", + "d oi", + "do i", + "Ġpol ite", + "Ġpo lite", + "Ġpolit e", + "Ġprogram mer", + "Ġprogramme r", + "Ġprogramm er", + "D ies", + "Die s", + "Di es", + "$ d", + "Ġre plication", + "Ġrep lication", + "Ġrepl ication", + "Ġreplic ation", + "Ġreplica tion", + "add Column", + "fr ican", + "frica n", + "Ġl eng", + "Ġle ng", + "Ġlen g", + "b eer", + "be er", + "bee r", + "o it", + "oi t", + "Ġw asting", + "Ġwas ting", + "Ġwast ing", + "y lim", + "yl im", + "me asure", + "N eg", + "Ne g", + "Ġpart ie", + "Ġpar tie", + "Ġparti e", + ". console", + ".con sole", + ".cons ole", + "ĠGu inea", + "ĠGui nea", + "T EL", + "TE L", + "_ fact", + "_f act", + "_fac t", + "_fa ct", + ". chunk", + ".ch unk", + "Ġl ent", + "Ġle nt", + "Ġlen t", + "Ġ aller", + "Ġa ller", + "Ġal ler", + "Ġall er", + "Ġalle r", + "Ġ à¤ķ", + "Ġठķ", + "_ idle", + "_id le", + "_i dle", + "Ġad missions", + "Ġadm issions", + "Ġadmission s", + "JSON Array", + "Ġv ibration", + "Ġvibr ation", + "Ġvib ration", + ". helpers", + ".h elpers", + ".helper s", + ".help ers", + "å¤ ĸ", + "Ġ hen", + "Ġh en", + "Ġhe n", + "j ohn", + "jo hn", + "Ġ ìĥĿ", + "Ġì ĥĿ", + "Ġìĥ Ŀ", + "Ġjud gement", + "Ġjudge ment", + "Ġg een", + "Ġge en", + "Ġgee n", + "t erra", + "ter ra", + "terr a", + "^ {", + "ĠI z", + "Ġc â", + "in stances", + "instance s", + "inst ances", + "instanc es", + "Ġthreat ens", + "Ġthreaten s", + "Ġm üssen", + "Kind OfClass", + "Ġstoryt elling", + "_ demo", + "_d emo", + "_de mo", + "_dem o", + "r ias", + "ri as", + "ria s", + "Priv acy", + "h ift", + "hi ft", + "ĠY i", + "es or", + "eso r", + "íķ ł", + "ens itivity", + ". Writer", + ".W riter", + ".Write r", + "ภĤ", + "D istrict", + "Di strict", + ".get JSONObject", + "Im pro", + "Imp ro", + "(get Resources", + "Ġ SPELL", + "ĠS PELL", + "ĠSP ELL", + "ĠSPE LL", + "ro duce", + "rodu ce", + "rod uce", + "Ġsl owed", + "Ġslow ed", + "Ġslo wed", + "Ġ linewidth", + "Ġline width", + "Ġlin ewidth", + "Ġhon esty", + "Ġhonest y", + "Ġho nesty", + "Ġhone sty", + "Ġ Coord", + "ĠC oord", + "ĠCo ord", + "ĠF ork", + "ĠFor k", + "ĠFo rk", + "ĠDispatch Queue", + "ĠCl iff", + "ĠCli ff", + "ĠW iring", + "ĠWi ring", + "ĠWir ing", + "_TIM ESTAMP", + "ol lah", + "oll ah", + "olla h", + "a void", + "av oid", + "avo id", + "++ ];Ċ", + "++] ;Ċ", + "sem antic", + "- css", + "-c ss", + "Ġv eto", + "Ġve to", + "Ġvet o", + "ĠM err", + "ĠMe rr", + "ĠMer r", + "Ġlegisl ators", + "C EEDED", + "CEE DED", + "CEED ED", + "Ġquestion naire", + "ĠP ills", + "ĠPill s", + "ĠPil ls", + "C alculate", + "Cal culate", + "Calc ulate", + "Calcul ate", + "( core", + "(c ore", + "(co re", + "(cor e", + "' e", + "Ġdis like", + "Ġ Preferences", + "ĠP references", + "ĠPre ferences", + "ĠPreference s", + "ĠPrefer ences", + "_ EXTERNAL", + "_EX TERNAL", + "_EXTERN AL", + "è° ĥ", + "Ġd odge", + "Ġdo dge", + "Ġdod ge", + "æľį åĬ¡", + ". names", + ".n ames", + ".name s", + ".draw Image", + "_ prom", + "_p rom", + "_pro m", + "_pr om", + "uck land", + "Ġ<$ >", + "ı z", + "/ site", + "/s ite", + "é¡ ¹", + "r ophe", + "ro phe", + "rop he", + "roph e", + "Ġcomp elled", + "Ġcompel led", + "Ġl aptops", + "Ġlaptop s", + "Ġ uni", + "Ġu ni", + "Ġun i", + "C LOSE", + "CL OSE", + "Ġcasual ties", + "Ġ Uniform", + "ĠUn iform", + "ĠUni form", + "Term inal", + ". \",\"", + ".\" ,\"", + ".\", \"", + "D AT", + "DA T", + "( TreeNode", + "(T reeNode", + "(Tree Node", + "ĠGand hi", + "( stmt", + "(st mt", + "A XB", + "AX B", + "* M", + "Ġumb rella", + "an imal", + "ani mal", + "anim al", + "Ġ grpc", + "Ġg rpc", + "Ġgr pc", + "Ġgrp c", + "Ġwhere by", + "Ġfloat s", + "Ġflo ats", + "ĉ arg", + "ĉa rg", + "ĉar g", + "Ġ dbg", + "Ġd bg", + "Ġdb g", + "Ġexceed ing", + "Ġexce eding", + "Event Type", + ".SaveChanges Async", + "Ġ {{{", + "Ġ{ {{", + "Ġ{{ {", + "Ġ owed", + "Ġo wed", + "Ġow ed", + "Ġowe d", + "ahren heit", + "Ġ ì§", + "Ġì §", + "Ġequ ipo", + "Ġequip o", + "u rai", + "ur ai", + "ura i", + "Ġi dol", + "Ġid ol", + "] \")Ċ", + "]\" )Ċ", + "]\") Ċ", + "_ major", + "_m ajor", + "Ġentire ty", + "inger print", + "ç os", + "ço s", + "/ account", + "/a ccount", + "/ac count", + "ĉ right", + "ĉr ight", + "urs os", + "ĠE DT", + "ĠED T", + "_ INSERT", + "_INS ERT", + "Ġsh ining", + "Ġshin ing", + "Ġ< :", + "Edge Insets", + "Ġcolon ies", + ". IM", + ".I M", + "ĉ Ġĉ", + "ĉĠ ĉ", + "R OAD", + "RO AD", + "C CCC", + "CC CC", + "CCC C", + "pl acing", + "pla cing", + "Ġget Activity", + "em acs", + "ema cs", + "' %(", + "'% (", + ". clicked", + ".cl icked", + ".click ed", + "Ġ Them", + "ĠT hem", + "ĠThe m", + "ĠTh em", + "is ia", + "isi a", + "Bus car", + "Bu scar", + ". rename", + ".re name", + ".r ename", + "Ġo ath", + "Ġoat h", + "Ġoa th", + "Ġafter ward", + "ĠU FO", + "ĠUF O", + "A PS", + "AP S", + "ĠJackson ville", + ". some", + ".s ome", + ".so me", + "Conf irmed", + "Confirm ed", + ". scan", + ".s can", + ".sc an", + "ig Integer", + "Decor ator", + "sh ield", + "shi eld", + "ress ive", + ". did", + ".d id", + ".di d", + "请 è¾ĵåħ¥", + "Ġsh utter", + "Ġshut ter", + "D am", + "Da m", + "Ġpar enting", + "Ġparent ing", + "Ġparen ting", + "ey ed", + "eye d", + "$ item", + "$i tem", + "- develop", + "-de velop", + "-dev elop", + "-devel op", + "Ġex tracts", + "Ġextra cts", + "Ġextract s", + "Ġextr acts", + "Ġdecentral ized", + "ĠE lsa", + "ĠEl sa", + "_ spin", + "_s pin", + "_sp in", + "_spi n", + "] )+", + "]) +", + "- initial", + "-in itial", + "-init ial", + "Ġmult itude", + "Ġmultit ude", + "Ġsens ory", + "Ġsensor y", + "Ġ MODEL", + "ĠMO DEL", + "ĠMOD EL", + "ĠMODE L", + "Ġsaf eguard", + "Ġsafe guard", + "Ġsafeg uard", + "ì ¹", + "Ġhun ters", + "Ġhunt ers", + "Ġhunter s", + "Ġ Tiny", + "ĠT iny", + "ĠTi ny", + "ĠTin y", + "I NO", + "IN O", + "dec orate", + "decor ate", + "Ġ NoSuch", + "ĠNo Such", + "H o", + "( Response", + "Ġr uler", + "Ġrule r", + "Ġru ler", + "ĉ short", + "ĉs hort", + "ĉsh ort", + "Ġ caster", + "Ġc aster", + "Ġca ster", + "Ġcas ter", + "Ġcast er", + "Ġcaste r", + "Ġ clientId", + "Ġclient Id", + "Ġ pdb", + "Ġp db", + "Ġpd b", + "ëı Ħ", + "i tic", + "it ic", + "iti c", + "Ġ GameState", + "ĠGame State", + "Ġnew Item", + ") ĊĊĊĊĊĊ", + ")Ċ ĊĊĊĊĊ", + ")ĊĊ ĊĊĊĊ", + ")ĊĊĊ ĊĊĊ", + ")ĊĊĊĊ ĊĊ", + ")ĊĊĊĊĊ Ċ", + "o uis", + "ou is", + "oui s", + "n oc", + "no c", + ". BLACK", + ".BL ACK", + "_ VECTOR", + "_V ECTOR", + "_VEC TOR", + "_VE CTOR", + "---------- ();", + ">( );", + ">() ;", + ".get P", + "an ye", + "any e", + "Ġne uron", + "Ġneuro n", + "Ġneu ron", + "Ġneur on", + "i fold", + "if old", + "ifo ld", + "Ġ Known", + "ĠK nown", + "ĠKn own", + "ĠKnow n", + "Bit coin", + "Any way", + "ay ette", + "aye tte", + "ayet te", + "Ġ' ['", + "Ġ'[ '", + "Ãł nh", + "Ãłn h", + "m gr", + "mg r", + "Ġcor related", + "Ġcorre lated", + "Ġcorrel ated", + "Ġcorrelate d", + "Ġn ause", + "Ġna use", + "Ġnau se", + "Ġmental ity", + "Ġment ality", + "has Many", + "Ġ FG", + "ĠF G", + "am pie", + "amp ie", + "I TU", + "IT U", + "F s", + ". Sp", + ".S p", + "_ between", + "_b etween", + "_bet ween", + "Dep endencies", + "o ug", + "ou g", + "Place holder", + "= text", + "=t ext", + "Ġ Managing", + "ĠMan aging", + "ĠMana ging", + "ocal ypse", + "åĮ Ĺ", + "_ mag", + "_m ag", + "_ma g", + "f ld", + "fl d", + "â ij", + "C AM", + "CA M", + "Ġ Helpers", + "ĠH elpers", + "ĠHelp ers", + "ĠHelper s", + "ĠHel pers", + "Ġd ost", + "Ġdo st", + "Ġdos t", + "/ out", + "/o ut", + "Ġassass ination", + "Ġassassin ation", + ". getImage", + ".get Image", + "ĠK enny", + "ĠKen ny", + "ĠKenn y", + ". ')ĊĊ", + ".' )ĊĊ", + ".')Ċ Ċ", + ".') ĊĊ", + ") {//", + "){ //", + "ĠR anger", + "ĠRange r", + "ĠRa nger", + "ĠRan ger", + "Ġg ek", + "Ġge k", + "Ġsince re", + "Ġsinc ere", + "Ġsincer e", + "< Value", + "čĊ", + "/> čĊ", + ".get Resources", + ".getResource s", + "Ġl ump", + "Ġlu mp", + "Ġlum p", + "_ consts", + "_con sts", + "_const s", + "_cons ts", + "( ext", + "(e xt", + "(ex t", + "ĉ dir", + "ĉd ir", + "â Ŀ", + "Ġpadding Top", + "Ġob session", + "Ġobs ession", + "Ġobsess ion", + "Ġb anning", + "Ġban ning", + "ĠApp Module", + "Ġp artisan", + "Ġpart isan", + "Ġparti san", + "Ġcatalog ue", + "Ġcata logue", + "Ġcatal ogue", + "Ġmin ors", + "Ġminor s", + "Ġp itches", + "Ġpitch es", + "Ġpit ches", + "we ep", + "Ġunder take", + "Ġundert ake", + "Ġth emed", + "Ġthe med", + "Ġthem ed", + "Ġtheme d", + "a udit", + "au dit", + "aud it", + "audi t", + ". scrollTop", + ".scroll Top", + ".scrollTo p", + "Ġ rer", + "Ġre r", + "Ġr er", + "Ġsym ptom", + "Ġsympt om", + "Ġsymp tom", + "Ġopen ings", + "Ġopening s", + ". blocks", + ".b locks", + ".bl ocks", + ".block s", + "open id", + "ope nid", + "Ġa ssh", + "Ġas sh", + "Ġass h", + "- save", + "-s ave", + "ĠP ig", + "ĠPi g", + "Ġre gain", + "Ġreg ain", + "Ġin icial", + "Ġini cial", + "Ġinici al", + "/ favicon", + "/f avicon", + "ĉ exp", + "ĉe xp", + "ĉex p", + "Ġsp ices", + "Ġspi ces", + "Ġspice s", + "i ska", + "is ka", + "isk a", + "cl aims", + "claim s", + "cla ims", + "m ak", + "ma k", + "definition s", + "Ġcorrespond ent", + "ĠCann abis", + "_ _,Ċ", + "__ ,Ċ", + "__, Ċ", + "ĠL ucky", + "ĠLuc ky", + "ĠLu cky", + "ĠLuck y", + "ĠG aussian", + "ĠGa ussian", + "ĠGauss ian", + "Ġ Nearly", + "ĠN early", + "ĠNear ly", + "C AD", + "CA D", + "' ]]Ċ", + "'] ]Ċ", + "']] Ċ", + "Ġadequate ly", + "Ġadequ ately", + "Ġ TITLE", + "ĠT ITLE", + "constitution al", + "- mm", + "-m m", + "_ override", + "_over ride", + "Ġ blas", + "Ġb las", + "Ġbl as", + "Ġbla s", + ".ready State", + "Ġrem inis", + "Ġremin is", + "Ġrein forced", + "Ġreinforce d", + "ĠColl abor", + "Ġdecor ating", + "Ġdeco rating", + "Ġb achelor", + "Ġbach elor", + "ERRU PT", + "Ġup right", + "ip ation", + "ipa tion", + "ĠN oble", + "ĠNo ble", + "ĠNob le", + "Ġvalue ForKey", + "Ġset Loading", + ". Ignore", + ".I gnore", + "å ģ", + "G lobals", + "Global s", + "ĠM ent", + "ĠMe nt", + "ĠMen t", + "AS SES", + "ASS ES", + "Ġlim bs", + "Ġlimb s", + "Ġ HUD", + "ĠH UD", + "in ci", + "inc i", + ". iv", + ".i v", + "ĠQ ModelIndex", + "F use", + "Fu se", + "Ġpe dal", + "Ġped al", + "_F REQ", + "_FR EQ", + "_FRE Q", + "( verbose", + "(ver bose", + "Ġlong itud", + "ĠCh arter", + "ĠChar ter", + "ĠChart er", + "ê ·¸", + "ê· ¸", + "Ġ bundles", + "Ġb undles", + "Ġbund les", + "Ġbundle s", + ". ignore", + ".i gnore", + "um bo", + "umb o", + "E MA", + "EM A", + ". ......", + ".. .....", + "... ....", + ".... ...", + "..... ..", + "...... .", + "s x", + ". Card", + ".C ard", + ".Car d", + "Ġhe ute", + "Ġst eer", + "Ġste er", + "j umlah", + "Ġ {_", + "Ġ{ _", + "_ Checked", + "_Check ed", + "Ġ fax", + "Ġf ax", + "Ġfa x", + "ĠG ust", + "ĠGu st", + "ĠGus t", + "itch ens", + "itchen s", + "Ġ ))ĊĊ", + "Ġ) )ĊĊ", + "Ġ)) ĊĊ", + "Ġ))Ċ Ċ", + "Ġremark ably", + "/ XML", + "/X ML", + "- remove", + "-re move", + "_ bt", + "_b t", + "Ġinc ub", + ". package", + ".p ackage", + ".pack age", + ".current Thread", + "ĠHigh lander", + "ĠHighland er", + ". side", + ".s ide", + ".sid e", + ".si de", + "s plash", + "sp lash", + "spl ash", + "Ġ ici", + "Ġi ci", + "Ġic i", + "= D", + "Ġp uck", + "Ġpu ck", + "Ġball ots", + "Ġbal lots", + "Ġballot s", + "Ġballo ts", + "Ġhuge ly", + "Ġhug ely", + "c oeff", + "co eff", + "coef f", + "coe ff", + "Ġ pData", + "Ġp Data", + ". COLUMN", + ".C OLUMN", + "ĠHe aling", + "ĠHeal ing", + "Ġ ordin", + "Ġor din", + "Ġord in", + "! ),", + "!) ,", + "Ġ' ',čĊ", + "Ġ'' ,čĊ", + "Ġ'', čĊ", + "( md", + "(m d", + "ĠS ask", + "ĠSa sk", + "ĠSas k", + "< strong", + "Ġsurv ivor", + "Ġsurviv or", + ". series", + ".s eries", + ".se ries", + ".ser ies", + "Ġcaffe ine", + "Ġ `(", + "Ġ` (", + ".TRA ILING", + "_ Input", + "_In put", + "( \"^", + "(\" ^", + "z d", + "& );Ċ", + "&) ;Ċ", + "Ġ Ping", + "ĠP ing", + "ĠPin g", + "ĠPi ng", + "Ġ voucher", + "Ġv oucher", + "Ġvo ucher", + "Ġvou cher", + ". rating", + ".r ating", + ".ra ting", + "-sh irts", + "-shirt s", + "ĠRetrie ves", + "ĠRetrieve s", + ".al ibaba", + "Or acle", + "_ MOV", + "_M OV", + "_MO V", + "Old Data", + "Ġ /*čĊ", + "Ġ/ *čĊ", + "Ġ/* čĊ", + "Ġ gboolean", + "Ġg boolean", + "Ġ= >čĊ", + "Ġ=> čĊ", + "Ġ rá", + "Ġr á", + "Ġbl unt", + "ĠImage Icon", + "i fik", + "if ik", + "ifi k", + "R TC", + "RT C", + "Ġfi bers", + "Ġfib ers", + "Ġfiber s", + "Ġto ile", + "Ġtoi le", + ". sent", + ".s ent", + ".se nt", + "ĠPy Qt", + "$ app", + "$a pp", + "Ġm edio", + "Ġme dio", + "Ġmed io", + "Ġmedi o", + "Ġgrant ing", + "Ġgran ting", + "Ġts lint", + "Ġtsl int", + "ĠM ö", + "(fig size", + "Ġhur ricane", + "Ġl ifes", + "Ġlife s", + "Ġlif es", + "Ġ ÃĦ", + "Ġà Ħ", + "rocess ing", + "_ standard", + "_st andard", + "_stand ard", + "- option", + "-o ption", + "-op tion", + "-opt ion", + "' )))", + "') ))", + "')) )", + "Ġvac ant", + "Ġva cant", + "å· ¥", + "ĠH ollow", + "ĠHol low", + "ĠHoll ow", + "handle Change", + "Ġ divider", + "Ġdi vider", + "Ġdiv ider", + "Ġdivide r", + "Ġdivid er", + "ĠEngine ers", + "ĠEngineer s", + "Ġs vens", + "Ġsv ens", + "Ġsve ns", + "Ġcom pliant", + "Ġcompl iant", + "t anggal", + "Ġ Credits", + "ĠC redits", + "ĠCredit s", + "ĠEm irates", + "Rule Context", + "Ġreal ization", + "Ġrealiz ation", + "Ġrealiza tion", + "Ġdis tracted", + "Ġdistr acted", + "Ġdistract ed", + "] +=", + "]+ =", + "Ġau gment", + "Ġaug ment", + "ĠD w", + "o tp", + "ot p", + "or rent", + "orr ent", + "orre nt", + "Ed itar", + "Edit ar", + ". stock", + ".st ock", + "St udy", + "p ections", + "pe ctions", + "pect ions", + "pection s", + "Ġ GameManager", + "ĠGame Manager", + "= cut", + "=c ut", + "Ġf lock", + "Ġfl ock", + "Ġflo ck", + "ĠRom ans", + "ĠRo mans", + "ĠRoman s", + "ĠRoma ns", + "t hem", + "th em", + "the m", + "- hop", + "-h op", + "Ġscreen shots", + "Ġscreens hots", + "Ġscreenshot s", + "Ġ /*!Ċ", + "Ġ/* !Ċ", + "Ġ/*! Ċ", + "Ġcon versions", + "Ġconv ersions", + "Ġconvers ions", + "Ġconversion s", + "Ġnormal ization", + "( configuration", + "(config uration", + "Ġa eros", + "Ġaer os", + "Ġae ros", + "_ security", + "_s ecurity", + "_se curity", + "_sec urity", + "! 'Ċ", + "!' Ċ", + "B onus", + "Bon us", + "ĠDR IVER", + "ĠDRIVE R", + "ĉ Date", + "ĉD ate", + "t ie", + "ti e", + "ĠWy oming", + "St and", + "Stan d", + "i tre", + "it re", + "itr e", + "Ġsh oppers", + "Ġshop pers", + "Ġsho ppers", + "Ġshopper s", + "Ġdisadv antage", + "Ġl iking", + "Ġli king", + "Ġlik ing", + "ç¬ ij", + "Ġunderstand able", + "S EE", + "SE E", + "Ġh oy", + "Ġho y", + "Ġnine te", + "Ġni nete", + "Ġnin ete", + "Ġcon fer", + "Ġconf er", + "Ġ nowrap", + "Ġno wrap", + "Ġnow rap", + "ĠV ern", + "ĠVer n", + "ĠVe rn", + ", čĊčĊ", + ",čĊ čĊ", + "ime step", + "imes tep", + "imest ep", + "Layout Manager", + "à ·", + "ĉ wait", + "ĉw ait", + "P LETED", + "PLE TED", + "J apan", + "Ja pan", + "Ġin duce", + "Ġind uce", + "Ġindu ce", + "Ġ å¯", + "Ġå ¯", + "о зв", + "оз в", + "_END POINT", + ". horizontal", + ".h orizontal", + "Ġacceler ated", + "Ġaccelerate d", + "r imon", + "ri mon", + "rim on", + "I VES", + "IV ES", + "IVE S", + "Trans actions", + "Transaction s", + "L ean", + "Le an", + "ĠS OUR", + "ĠSO UR", + "wh ether", + "y g", + "Ġ oid", + "Ġo id", + "Ġoi d", + "Ġ EntityManager", + "ĠEntity Manager", + "OUN TRY", + "OUNT RY", + "Ġ fila", + "Ġf ila", + "Ġfil a", + "Ġfi la", + "OLUM NS", + "OLUMN S", + "IN UE", + "INU E", + "Ġ Anchor", + "ĠAn chor", + "ĠAnc hor", + "ĠAnch or", + "TR AN", + "TRA N", + "w oo", + "wo o", + "block quote", + "ĠN urse", + "ĠNurs e", + "ĠNur se", + "ĠC arp", + "ĠCar p", + "ĠCa rp", + "Ġrede em", + ". try", + ".t ry", + ".tr y", + "Ġ JP", + "ĠJ P", + "Ġ timestamps", + "Ġtimestamp s", + "Ġ?> \"><", + "Ġ?>\" ><", + "Ġ?>\"> <", + "Ġ REMOVE", + "ĠRE MOVE", + "ĠREM OVE", + "ĠStar bucks", + "Re ally", + "Real ly", + "Ġflo oded", + "Ġflood ed", + ". Callback", + ".C allback", + ".Call back", + "Drop Down", + "i pro", + "ip ro", + "Ġt ended", + "Ġten ded", + "Ġtend ed", + "l te", + "lt e", + "Ġproportion s", + "Ġproport ions", + "- te", + "-t e", + "ĠR ena", + "ĠRe na", + "ĠRen a", + "l icate", + "lic ate", + "li cate", + "lica te", + "for ces", + "force s", + "forc es", + ". extra", + ".ex tra", + ".ext ra", + ". authenticate", + ".auth enticate", + "в од", + "во д", + "¡ °", + "Ġfor ControlEvents", + "Ġ senha", + "Ġs enha", + "Ġsen ha", + "Ġk ein", + "Ġke in", + "Ġmin ist", + "Ġmi nist", + "Ġmini st", + "Ġ Preference", + "ĠP reference", + "ĠPre ference", + "ĠPref erence", + "ĠPrefer ence", + "ĠTele graph", + "Ñĥ п", + "str pos", + "Ġillness es", + "Ġp igs", + "Ġpi gs", + "Ġpig s", + "Ġget Intent", + "ĠgetInt ent", + "S ol", + "So l", + "Ġ ¡", + "Ġ ¡", + "( cpu", + "(c pu", + "(cp u", + "[ prop", + "[p rop", + "s creens", + "screen s", + "') ;?>", + "'); ?>", + "Ġ Acts", + "ĠA cts", + "ĠAct s", + "ĠAc ts", + "Ġstr dup", + "Ġa verages", + "Ġaverage s", + "Ġaver ages", + "a nal", + "an al", + "ana l", + "ĠCas ual", + "Group Box", + "ĠHand book", + "/ comments", + "/com ments", + "/comment s", + "Ġnumber ed", + "Ġnumb ered", + "Ġbroad casting", + "Ġbroadcast ing", + "çĽ ij", + ".native Element", + ". mu", + ".m u", + "Ġ updatedAt", + "Ġupdated At", + "ĠDoes n", + "ĠDoe sn", + ". AC", + ".A C", + ". coll", + ".c oll", + ".co ll", + ".col l", + "Ġrec order", + "Ġrecord er", + "_ sha", + "_s ha", + "_sh a", + "B g", + "b il", + "bi l", + "Ġbol ts", + "Ġbolt s", + "Ġ ç¬", + "Ġç ¬", + "Ġim posing", + "Ġimp osing", + "ĠInformation en", + "_ flashdata", + "_flash data", + "e conomic", + "ec onomic", + "R emark", + "Re mark", + "Rem ark", + "u cas", + "uc as", + "Ġ Officers", + "ĠOff icers", + "ĠOffice rs", + "ĠOfficer s", + "Ġ TER", + "ĠT ER", + "ĠTE R", + "W alk", + "Wal k", + "Wa lk", + "Ġmerc ado", + "_ generate", + "_g enerate", + "_gen erate", + "_gene rate", + "_gener ate", + "H Y", + "C alling", + "Call ing", + "Cal ling", + "s nap", + "sn ap", + "script Id", + ". operation", + ".op eration", + ".o peration", + ".oper ation", + "ĠFl ame", + "ĠFla me", + "ĠFlam e", + "l iness", + "li ness", + "line ss", + "lin ess", + "lines s", + "Ġr ented", + "Ġren ted", + "Ġrent ed", + "_ toggle", + "_t oggle", + "- changing", + "-ch anging", + "-chan ging", + "Ġ TY", + "ĠT Y", + "' util", + "'u til", + "E EP", + "EE P", + "Ġ graphql", + "Ġgraph ql", + "Ġ Uni", + "ĠU ni", + "ĠUn i", + "Ġim pulse", + "Ġimp ulse", + "Ġimpuls e", + ". Basic", + ".B asic", + "Ġenerg ies", + "Ġener gies", + "Ġenergie s", + "M ARY", + "MA RY", + "MAR Y", + "ĠMar cel", + "ĠMarc el", + "Ġm ortal", + "Ġmor tal", + "Ġmort al", + "Ġf res", + "Ġfr es", + "Ġfre s", + "m ens", + "me ns", + "men s", + "m otion", + "mo tion", + "mot ion", + "Ġs ampled", + "Ġsample d", + "Ġsam pled", + "Ġsamp led", + "âĢľ That", + "i day", + "id ay", + "ida y", + "qu ipment", + "quip ment", + "get Int", + "Ġ Absolute", + "ĠA bsolute", + "ĠAbs olute", + ", '\"", + ",' \"", + "u ned", + "un ed", + "une d", + ". share", + ".s hare", + ".sh are", + ".sha re", + "Ġ })(", + "Ġ} )(", + "Ġ}) (", + "m mm", + "mm m", + "ĠR ising", + "ĠRi sing", + "ĠRis ing", + "ä» »", + "Ġun employed", + "x fa", + "xf a", + ". follow", + ".f ollow", + "ĉ ĉĉĉĠĠĠĠĠĠ", + "ĉĉ ĉĉĠĠĠĠĠĠ", + "ĉĉĉĉ ĠĠĠĠĠĠ", + "ĉĉĉ ĉĠĠĠĠĠĠ", + "ĉĉĉĉĠ ĠĠĠĠĠ", + "ĉĉĉĉĠĠĠ ĠĠĠ", + "ĉĉĉĉĠĠ ĠĠĠĠ", + "ĉĉĉĉĠĠĠĠ ĠĠ", + "ĉĉĉĉĠĠĠĠĠ Ġ", + "s lt", + "sl t", + ". Phone", + ".P hone", + ".Ph one", + "Ġkn ives", + "Ġ eve", + "Ġe ve", + "Ġev e", + "on Click", + "] ))čĊ", + "]) )čĊ", + "])) čĊ", + "Ġ Witness", + "ĠW itness", + "ĠWit ness", + "ĉ NS", + "ĉN S", + "Ġ EOS", + "ĠE OS", + "ĠEO S", + "ĠSte fan", + "ĠStef an", + "ĠPr iest", + "ĠPri est", + "âĢĶ which", + "Get String", + ". By", + ".B y", + "Ġup stairs", + "Ġdetr iment", + "b roken", + "br oken", + "bro ken", + "em bro", + "emb ro", + "embr o", + "Ġnic otine", + "i lion", + "il ion", + "ili on", + "ilio n", + "Ġaston ishing", + "_ aff", + "_a ff", + "_af f", + "Ġ Lesson", + "ĠL esson", + "ĠLe sson", + "ĠLess on", + "ĠLes son", + "Ġacc idental", + "Ġaccident al", + "od or", + "odo r", + "Ġde cir", + "Ġdec ir", + "Ġnew Name", + "+ .", + "çĽ ¸", + "igs list", + "Ġ Github", + "ĠG ithub", + "ĠGit hub", + "Ġsuccess ive", + "Ġsuc cessive", + "r acial", + "ra cial", + "rac ial", + "raci al", + "Ġen viron", + "Ġenv iron", + "Ġenvi ron", + "éªĮ è¯ģ", + "Ġred irected", + "Ġredirect ed", + "T OTAL", + "TOT AL", + "Ġgrab bing", + "Ġgra bbing", + "ĠL ance", + "ĠLa nce", + "ĠLan ce", + "ĠLanc e", + "Ġfor fe", + "_ CB", + "_C B", + "å¾ ®", + "El apsed", + "_ way", + "_w ay", + "(Dialog Interface", + "_ measure", + "_me asure", + "_meas ure", + "x bb", + "xb b", + "D og", + "Do g", + "De part", + "Dep art", + "- src", + "-s rc", + "re solver", + "res olver", + "resolve r", + "with standing", + "_ shell", + "_s hell", + "_sh ell", + "Ġ LastName", + "ĠLast Name", + "ĠAv iation", + "Ġbeg inner", + "Ġbegin ner", + "(\" %.", + "(\"% .", + "( tool", + "(t ool", + "(to ol", + "Ġ нов", + "Ġн ов", + "Ġно в", + ": init", + ":i nit", + "( API", + "(A PI", + "(AP I", + "ĠMorris on", + "ĠMorr ison", + "vt Color", + "Ġsta ple", + "Ġstap le", + "/ INFO", + "Ġsuper natural", + "Ġsupern atural", + "Ġste ak", + "t imeline", + "time line", + "tim eline", + "zz le", + "\" `ĊĊ", + "\"`Ċ Ċ", + "\"` ĊĊ", + "Second ary", + "ĠNe pal", + "ĠNep al", + ". StringUtils", + ".String Utils", + "Ġ adam", + "Ġa dam", + "Ġad am", + "Ġada m", + "Ġ (...", + "Ġ( ...", + "Ġ(. ..", + "Ġsub stitution", + "Ġsubstit ution", + "Ġsubst itution", + "Ġ boarding", + "Ġbo arding", + "Ġboard ing", + "Ġ Keyword", + "ĠKey word", + "ĠAss ault", + "dbc Template", + "Ġ orderId", + "Ġorder Id", + "( engine", + "(e ngine", + ".assert That", + "ĠV enus", + "ĠVen us", + "Ġhom icide", + "Ġhomic ide", + "ĠA val", + "ĠAv al", + "ĠAva l", + "Ġg utter", + "Ġgut ter", + "Ġ Supported", + "ĠS upported", + "ĠSup ported", + "ĠSupport ed", + "/ part", + "/p art", + "Ġac claimed", + "Ġacclaim ed", + "H istor", + "Hi stor", + "His tor", + "Hist or", + "Ġm eses", + "Ġme ses", + "Ġmes es", + "ü ber", + "üb er", + "ĠRe new", + "ĠRen ew", + "ĠRene w", + "Ġg ras", + "Ġgr as", + "Ġgra s", + "Ġ Ek", + "ĠE k", + "Ġ infile", + "Ġin file", + "Ġinf ile", + "in dy", + "ind y", + ". music", + ".m usic", + ".mu sic", + ". Scroll", + ".S croll", + ".Sc roll", + "ĠA ges", + "ĠAg es", + "ĠAge s", + "ĠNar uto", + "ĠG ather", + "ĠGa ther", + "ĠGat her", + "Ġconfirm ing", + "= (\"", + "=( \"", + "Ġp itched", + "Ġpitch ed", + "Ġpit ched", + "o ley", + "ol ey", + "ole y", + "F rance", + "Fr ance", + "Fran ce", + "Fra nce", + "Franc e", + "+ '\"", + "+' \"", + "$ total", + "$t otal", + "Ġ onde", + "Ġo nde", + "Ġon de", + "Ġd itch", + "Ġdit ch", + "_ sigma", + "_s igma", + "_sig ma", + "Ġcontin uity", + "Ġcontinu ity", + "r eward", + "re ward", + "rew ard", + "- load", + "-l oad", + "-lo ad", + "Ġpro ceso", + "Ġproc eso", + "Ġproces o", + "L ocked", + "Loc ked", + "Lock ed", + "st aw", + "sta w", + "Ġsp inal", + "Ġspin al", + "Ġspi nal", + "l azy", + "la zy", + "laz y", + "! ==", + "!= =", + "j est", + "je st", + "jes t", + "Ġd un", + "Ġdu n", + "ĠRod gers", + "ĉ grid", + "ĉg rid", + "ĉgr id", + "Ġlo gos", + "Ġlog os", + "Ġlogo s", + "ĠBen gal", + "ĠBeng al", + ". super", + ".s uper", + ".sup er", + "Pro vides", + "Provid es", + "Provide s", + "Prov ides", + "Ġnut rient", + ". Timestamp", + ".T imestamp", + ".Time stamp", + "IZ ATION", + "åĨ Į", + "Ġf ats", + "Ġfa ts", + "Ġfat s", + "ĠX xx", + "c tica", + "ct ica", + "ctic a", + "Target s", + "Tar gets", + "Ġcont ours", + "Ġcontour s", + "Ġre ordered", + "Ġreorder ed", + ": Array", + ":A rray", + "Ġtoler ate", + "Ġtol erate", + "V ir", + "Vi r", + "Ġter ribly", + "Ġterr ibly", + "Ġb ricks", + "Ġbr icks", + "Ġbrick s", + "Ġbri cks", + "( &_", + "(& _", + "h b", + "P ortal", + "Port al", + "Por tal", + "ĠB read", + "ĠBr ead", + "ĠBre ad", + ". which", + ".wh ich", + "ÂŃ t", + "as InstanceOf", + "Ġj object", + "Ġjob ject", + "Ġjo bject", + "ĉ length", + "ĉl ength", + "ĉlen gth", + "_ MT", + "_M T", + "; \">čĊ", + ";\" >čĊ", + ";\"> čĊ", + "_ EXIST", + "_EX IST", + "Ġmat ernal", + "Ġma ternal", + "Ġmater nal", + "R EL", + "RE L", + "Ġê²½ ìļ°", + "h ee", + "he e", + "Ġ layouts", + "Ġlayout s", + "Ġlay outs", + "ĠL ap", + "ĠLa p", + "a isy", + "ai sy", + "ais y", + "Ġst umbled", + "Ġstumble d", + "ĠU IG", + "ĠUI G", + "ĠS co", + "ĠSc o", + "Ġim paired", + "Ġimp aired", + "Ġimpair ed", + "RES SED", + "RESS ED", + "Ġab uses", + "Ġabuse s", + "V F", + "A RB", + "AR B", + ". NAME", + ".N AME", + "r ch", + "rc h", + "pr imir", + "prim ir", + "pri mir", + "_ completed", + "_com pleted", + "_comp leted", + "_complete d", + "Ġp enny", + "Ġpen ny", + "Ġpenn y", + "Ch rome", + "Chr ome", + "( begin", + "(b egin", + "(be gin", + "er nen", + "ern en", + "erne n", + "- checkbox", + "-check box", + "Plain OldData", + "ĠL PC", + "ĠLP C", + "r ade", + "ra de", + "rad e", + "s pir", + "sp ir", + "spi r", + "Ġcon ceived", + "Ġconce ived", + "Ġconceive d", + "T ips", + "Tip s", + "Ti ps", + "ĠIo T", + "ĠG an", + "ĠGa n", + "èģ Ķ", + "Ġbi ases", + "Ġbias es", + "Ġconsult ants", + "Ġconsultant s", + "Ġconsulta nts", + "p led", + "pl ed", + "ple d", + "_ ht", + "_h t", + "associ ated", + "assoc iated", + "associate d", + "] ,ĊĊ", + "], ĊĊ", + "],Ċ Ċ", + "Ġdelight ful", + "ĠÑĤ ек", + "ĠÑĤе к", + "Hel vetica", + "( load", + "(l oad", + "(lo ad", + "- expand", + "-exp and", + "_W IDGET", + "t oa", + "to a", + "Ġ Akt", + "ĠA kt", + "ĠAk t", + "Ġo mn", + "Ġom n", + "Ġcl auses", + "Ġclause s", + "Ġcla uses", + "In tel", + "Int el", + "*/ }Ċ", + "_ registration", + "_reg istration", + "Ġold Value", + "Ġrest oring", + "Ġresto ring", + "Ġun real", + "Ġunre al", + "O VER", + "OVE R", + "OV ER", + "ĉĊ ĉĊĉĊ", + "ĉĊĉĊ ĉĊ", + "A TS", + "AT S", + "_ probe", + "_p robe", + "_pro be", + "_pr obe", + "_prob e", + "Ġdi visor", + "Ġdiv isor", + "Ġdivis or", + ".update Dynamic", + "å¹ ³", + "Produ ces", + "Prod uces", + "st amp", + "sta mp", + ".j boss", + "ĉ task", + "ĉt ask", + "! (:", + "!( :", + "Ġpsych ic", + "@ class", + "@c lass", + "M artin", + "Mar tin", + "Mart in", + "Ġ Passed", + "ĠP assed", + "ĠPass ed", + "ĠPas sed", + "clar ations", + "claration s", + "h el", + "he l", + "а Ñĩ", + "ĉ copy", + "ĉc opy", + "- bin", + "-b in", + "z an", + "za n", + "i gram", + "ig ram", + "igr am", + "া à¦", + "( sig", + "(s ig", + "(si g", + "ĠC aval", + "ĠCa val", + "ĠCav al", + "_ ##", + "Ġ %=", + "Ġ% =", + "out lined", + "outline d", + "ĠA cid", + "ĠAc id", + "Ġunpredict able", + "- dashboard", + "-d ashboard", + "Hex String", + "+ c", + ". Public", + ".P ublic", + "Ạ©", + "Ġcon veyor", + "Ġconvey or", + "Ġ EB", + "ĠE B", + "Ġselect s", + "Ġsel ects", + "Ġsele cts", + "Ġkn ocking", + "Ġknock ing", + "ĠC ec", + "ĠCe c", + "IB UTES", + "IBUT ES", + "IBUTE S", + "ow aÄĩ", + "owa Äĩ", + "g atsby", + "* v", + "ent ropy", + "entr opy", + "Ġdispatch ed", + "Ġdisp atched", + "Ġ camel", + "Ġc amel", + "Ġca mel", + "Ġcame l", + "Ġcam el", + "ĠSat urn", + "ĠSa turn", + "Ġover weight", + "( phone", + "(p hone", + "(ph one", + "par able", + "para ble", + "% B", + "_v ectors", + "_vector s", + "_vec tors", + "_vect ors", + "_ve ctors", + "Ġbr ewing", + "Ġbre wing", + "Ġbrew ing", + "Ġ Tk", + "ĠT k", + "Ġ Downloads", + "ĠDown loads", + "ĠDownload s", + "Ġ Saved", + "ĠS aved", + "ĠSave d", + "ĠSa ved", + "ĠSav ed", + ". Price", + ".P rice", + ".Pr ice", + "Ġc urved", + "Ġcur ved", + "Ġcurve d", + "ĠParent hood", + "ĠParen thood", + "è ¶", + ".p nl", + "plete ly", + "plet ely", + ". Day", + ".D ay", + "Ġadvert isers", + "Ġadvertis ers", + "Ġadvertise rs", + "Ġadvertiser s", + "Ġe jec", + "Ġej ec", + "Ġpr zed", + "Ġprz ed", + "Ġprze d", + "ë ¯", + "! ';Ċ", + "!' ;Ċ", + "ĠK ush", + "ĠKu sh", + "Ġ TAB", + "ĠT AB", + "ĠTA B", + "Ġ quests", + "Ġqu ests", + "Ġque sts", + "Ġquest s", + "Ġques ts", + "Ġcoinc idence", + "Ġcoincide nce", + "umm ies", + "ĠKash mir", + "ĠEth ics", + "ĠEthi cs", + "_ growth", + "_g rowth", + "Ġ aktiv", + "Ġak tiv", + "Ġakt iv", + "Ġgroup ing", + "Ġgrou ping", + "å¢ ŀ", + "_ truth", + "_tr uth", + "åIJ ¬", + "t odos", + "to dos", + "todo s", + "tod os", + "i set", + "is et", + "ise t", + "Tex Coord", + "ä tt", + "ät t", + "ĠZ ur", + "ĠZu r", + "ro ys", + "roy s", + "_M AGIC", + "_MAG IC", + "Ġbrew ery", + "( State", + "ĠSM ALL", + "ĠSMA LL", + "ĠPl ants", + "ĠPlan ts", + "ĠPlant s", + "ĠPla nts", + "it bart", + "e acher", + "each er", + "ea cher", + "ĠAd elaide", + "L u", + "Ġf ick", + "Ġfi ck", + "Ġfic k", + "und les", + "undle s", + "_ loaded", + "_lo aded", + "_load ed", + "и е", + "P oll", + "Pol l", + "Po ll", + "r itic", + "ri tic", + "rit ic", + "E LY", + "EL Y", + "Ġ +'", + "Ġ+ '", + "ĠProf ession", + "Ġst amps", + "Ġstamp s", + "Ġsta mps", + "ĠS ew", + "ĠSe w", + "s crollView", + "scroll View", + "Ġcomm unist", + "Ġcommun ist", + "/ problems", + "/pro blems", + "/problem s", + "} čĊčĊčĊčĊ", + "}čĊ čĊčĊčĊ", + "}čĊčĊ čĊčĊ", + "}čĊčĊčĊ čĊ", + ", o", + "Ġ udp", + "Ġu dp", + "Ġud p", + "Ġob ese", + "Ġobe se", + "ap prove", + "app rove", + "appro ve", + "anc ellation", + "ancel lation", + "ancell ation", + "_ Game", + "_G ame", + "Ġ Hashtable", + "ĠHash table", + "ĠHas htable", + "adaptive Styles", + "Ġposs esses", + "Ġpossess es", + ". matcher", + ".m atcher", + ".match er", + ".mat cher", + "function al", + "M rs", + "Mr s", + "ĉ save", + "ĉs ave", + "Ġ DbType", + "ĠDb Type", + "Ġ ken", + "Ġk en", + "Ġke n", + "get Context", + "Ġ mans", + "Ġm ans", + "Ġman s", + "Ġma ns", + "( rel", + "(r el", + "(re l", + "ĠBrother hood", + ") `Ċ", + ")` Ċ", + "è§ £", + ". Information", + ".In formation", + "OutOfRange Exception", + "ĠS ek", + "ĠSe k", + "C as", + "Ca s", + "Ġblog gers", + "Ġblogger s", + "E ither", + "( \"\"\"", + "(\" \"\"", + "(\"\" \"", + "Ġp inch", + "Ġpin ch", + "Ġco arse", + ") p", + "ĠP ulse", + "ĠPu lse", + "ĠPul se", + "Ġlearn t", + "Ġlear nt", + "Ġdent ist", + "Ġon change", + "Ġdirect ives", + "Ġdirective s", + "( actions", + "(a ctions", + "(action s", + "(act ions", + "ny der", + "ĠS hir", + "ĠSh ir", + "ĠShi r", + "T rait", + "Tr ait", + "Tra it", + "_ dep", + "_d ep", + "_de p", + "Ġ PET", + "ĠP ET", + "ĠPE T", + "Ġ REP", + "ĠR EP", + "ĠRE P", + ".App Settings", + "cu ador", + "ide nav", + "iden av", + "Ġen vi", + "Ġenv i", + "Ġsl ammed", + "Ġslam med", + "Ġ Shoot", + "ĠS hoot", + "ĠSh oot", + "ĠSho ot", + "Ġ dateFormat", + "Ġdate Format", + ".j oda", + "ve ys", + "vey s", + "Ġ ).ĊĊ", + "Ġ) .ĊĊ", + "Ġ). ĊĊ", + "Ġ).Ċ Ċ", + "Ġcar eg", + "Ġca reg", + "Ġcare g", + "Ġ Parallel", + "ĠPar allel", + "_ translation", + "_trans lation", + ". functions", + ".function s", + ".fun ctions", + ". obs", + ".o bs", + ".ob s", + "Runtime Exception", + "[ ]=", + "[] =", + "ov erview", + "over view", + "ĠS chl", + "ĠSc hl", + "ĠSch l", + "Ġno isy", + "Ġnoi sy", + "ĠOn PropertyChanged", + "S ending", + "Send ing", + "Sen ding", + "Ġunf amiliar", + "U pon", + "Up on", + "ĠPr ints", + "ĠPrint s", + "ĠPri nts", + ". typ", + ".t yp", + "Ġfle eing", + "Ġflee ing", + "ĉ move", + "ĉm ove", + "ĉmov e", + "( Un", + "(U n", + "Ġ qr", + "Ġq r", + "× ľ", + "_ beta", + "_b eta", + "_be ta", + "_bet a", + "Ġsk ies", + "Ġski es", + "ĉ me", + "ĉm e", + "W ND", + "WN D", + "Ġst ickers", + "Ġstick ers", + "Ġsticker s", + "b las", + "bl as", + "bla s", + "Ġins erts", + "Ġinsert s", + "Ġinser ts", + "Ġinse rts", + "Ġver ses", + "Ġvers es", + "Ġverse s", + "ĠD ew", + "ĠDe w", + "Ġt angible", + "Ġtang ible", + "Ġh echo", + "Ġhe cho", + "P OL", + "PO L", + "Ġte ardown", + "Ġtear down", + "om nia", + "I BE", + "IB E", + ". cover", + ".c over", + ".co ver", + "_ strategy", + "_str ategy", + "^ -", + "set Position", + "u ale", + "ual e", + "ua le", + "S igned", + "Sign ed", + "Sig ned", + "Ġ iface", + "Ġif ace", + "Ġi face", + "as eline", + "ase line", + "asel ine", + ".set Time", + "ĠMin eral", + "ĠMine ral", + "ĠMiner al", + "ĠF ighting", + "ĠFight ing", + "s kins", + "sk ins", + "ski ns", + "skin s", + "Ġdiscrim in", + "Ġd ansk", + "Ġdans k", + "Ġdan sk", + "ĠPr inceton", + "ĠPrince ton", + "ac ist", + "aci st", + "Ġ ());Ċ", + "Ġ( ));Ċ", + "Ġ() );Ċ", + "Ġ()) ;Ċ", + "tr acks", + "tra cks", + "track s", + "imon ial", + "a decimal", + "ad ecimal", + "ade cimal", + "EP ROM", + "ug gle", + "ugg le", + ". Notification", + ".Not ification", + "$ mail", + "$m ail", + "c antidad", + "cant idad", + "ĠJ ung", + "ĠJun g", + "ĠJu ng", + "Ġsee kers", + "Ġseek ers", + "Ġseeker s", + "Ġpl ausible", + "t ier", + "ti er", + "tie r", + "е ж", + "еР¶", + "Ġ rapper", + "Ġr apper", + "Ġrap per", + "Ġra pper", + "Ġrapp er", + "Ġ Mana", + "ĠM ana", + "ĠMan a", + "ĠMa na", + "ĠHttp StatusCode", + "ĠHttpStatus Code", + "Ġbur nt", + "Ġburn t", + "l oses", + "lo ses", + "lose s", + "los es", + "Ġ Foto", + "ĠF oto", + "ĠFo to", + "ĠFot o", + "Ġ JsonObject", + "ĠJson Object", + "In stagram", + "Inst agram", + "Ġ syscall", + "Ġsys call", + "Ġreal ities", + "ĠMAT LAB", + ":^ {Ċ", + "T ERM", + "TE RM", + "TER M", + "ĠC bd", + "Ġ Paragraph", + "ĠPar agraph", + "ĠPara graph", + "Ġtrav és", + "Ġconstruct ing", + "Ġs wal", + "Ġsw al", + "Ġp ige", + "Ġpi ge", + "Ġpig e", + "L LLL", + "LL LL", + "LLL L", + "- existing", + "-ex isting", + "G ets", + "Get s", + "Ge ts", + "Ġmel ted", + "Ġmelt ed", + "Ġmit igate", + "Ġmitig ate", + "H en", + "He n", + "Ġ hm", + "Ġh m", + "i mas", + "im as", + "ima s", + "Ġ Ao", + "ĠA o", + "ĠP erez", + "ĠPer ez", + "ĠPe rez", + "ĠPere z", + "Ġ DAL", + "ĠD AL", + "ĠDA L", + "Ġ ëĭ¤", + "Ġëĭ ¤", + "Ġdi vis", + "Ġdiv is", + "Storyboard Segue", + "Ġ Modify", + "ĠMod ify", + "ĠModi fy", + "ĠÃľ ber", + "_O VERRIDE", + ".p em", + ".pe m", + "un tos", + "unt os", + "unto s", + "Ġesp añ", + "Ġespa ñ", + "Ġ{ ?", + "Ġ PAY", + "ĠP AY", + "ĠPA Y", + "_ ipv", + "_i pv", + "_ip v", + "ĠF ury", + "ĠFu ry", + "ĠFur y", + "__ .__", + "__. __", + "e low", + "el ow", + "elo w", + "-c entered", + "-center ed", + "-cent ered", + "che cks", + "check s", + "_ Reg", + "_R eg", + "_Re g", + "-J avadoc", + "ĉ load", + "ĉl oad", + "ĠLike wise", + "ĠLik ewise", + "ا Ùħ", + "ا٠ħ", + "U NE", + "UN E", + ". sem", + ".s em", + ".se m", + "x cb", + "xc b", + "ĠC ave", + "ĠCa ve", + "ĠCav e", + "_ sleep", + "_s leep", + "Ġsil ently", + "Ġsilent ly", + "Ġ Extreme", + "ĠExt reme", + "ĠExtr eme", + ". ToUpper", + ".To Upper", + "ĉ CHECK", + "ĉC HECK", + "Ġ cue", + "Ġc ue", + "Ġcu e", + "ĠQ ByteArray", + "Ġcor rupted", + "Ġcorrupt ed", + "Ġ Dé", + "ĠD é", + "Ġim ped", + "Ġimp ed", + "Ġimpe d", + "Get Name", + "Ġinaccur ate", + "Ġs ober", + "Ġso ber", + "Ġsob er", + "е е", + "еРµ", + "Ġ barcode", + "Ġbar code", + "Ġba rcode", + "-- ){Ċ", + "--) {Ċ", + "in ki", + "ink i", + "Ġ ép", + "Ġé p", + "Ġd ri", + "Ġdr i", + "Ġ ALT", + "ĠA LT", + "ĠAL T", + "> >>>>>>>", + ">>>> >>>>", + ">>>>>>> >", + "on ta", + "ont a", + "[ L", + "Ġint eres", + "Ġinter es", + "Ġinte res", + "ver ting", + "vert ing", + "Ġd iagnostics", + "Ġdi agnostics", + "Ġdiagnostic s", + "p dev", + "pd ev", + "è ©", + "Ġ Integrated", + "ĠInt egrated", + "ĠIntegr ated", + ") .'", + "). '", + "_ gc", + "_g c", + "$ text", + "$t ext", + ". games", + ".g ames", + ".game s", + ".ga mes", + "ĠT erra", + "ĠTer ra", + "ĠTerr a", + "' Re", + "'R e", + ". transfer", + ".trans fer", + "_F IFO", + "get Model", + "Ġb land", + "Ġbl and", + "Ġbla nd", + "ĠCol eman", + "ĠCole man", + "Ġpr imes", + "Ġprim es", + "Ġprime s", + "Ġpri mes", + "Ġ æĪ", + "Ġæ Ī", + "Ġcross es", + "n k", + "G ING", + "GIN G", + "GI NG", + "Ġ '^", + "Ġ' ^", + "Ġ Blob", + "ĠB lob", + "ĠBl ob", + "ĠBlo b", + "Ġinter course", + "ĠBl vd", + "Ġweigh s", + "_ regular", + "_reg ular", + "ĠPer th", + "ĠPert h", + "Ġsepar ating", + "Ġseparat ing", + "Ġb illed", + "Ġbill ed", + "Ġbil led", + ".tab Control", + "Ġp uppet", + "Ġpup pet", + "Ġutil ization", + "Ġutiliz ation", + "Ġutiliza tion", + "Ġ âĸł", + "Ġâĸ ł", + "Ġsuc ces", + "Ġsucc es", + "Ġl amps", + "Ġla mps", + "Ġlamp s", + "Ġlam ps", + "_ proj", + "_p roj", + "_pro j", + "_pr oj", + "E ric", + "Er ic", + "Ġre novation", + "Ġren ovation", + "Ġrenov ation", + "ĠF amilies", + "ĠFam ilies", + "ĠFamil ies", + "ĠFamilie s", + "Ġ Bits", + "ĠB its", + "ĠBit s", + "ĠBi ts", + "part ials", + "partial s", + "- Men", + "-M en", + "s olution", + "sol ution", + "Ġd warf", + "Ġdw arf", + "Ġdwar f", + ". INTEGER", + ".IN TEGER", + "Ġ LOCK", + "ĠL OCK", + "ĠLO CK", + "ĠLOC K", + ". ct", + ".c t", + "Ġ excerpt", + "Ġex cerpt", + "Ġexcer pt", + "Ġ Pix", + "ĠP ix", + "ĠPi x", + "Ġ FirstName", + "ĠFirst Name", + "AN TED", + "ANT ED", + "ANTE D", + "ĠAd mir", + "- help", + "-h elp", + "-he lp", + "P rior", + "Pr ior", + "Pri or", + "Ġ Align", + "ĠAl ign", + "ĠAli gn", + ". INSTANCE", + ".IN STANCE", + "Line Edit", + "(' /:", + "('/ :", + "Ġ inet", + "Ġin et", + "Ġi net", + "Ġine t", + "od us", + "odu s", + ".p kl", + ".pk l", + "Ġ KY", + "ĠK Y", + "u pert", + "up ert", + "uper t", + "upe rt", + "Ġn erves", + "Ġnerv es", + "Ġnerve s", + "Ġner ves", + "_ gradient", + "_g radient", + "_grad ient", + "} ','", + "}' ,'", + "}', '", + "_un ref", + "Ġs aturated", + "Ġsatu rated", + "Ġsatur ated", + "Ġ Connected", + "ĠConnect ed", + "ĠConn ected", + "Ġ FN", + "ĠF N", + "EX IT", + "Ġtele port", + "Ġav ait", + "Ġava it", + "Page Route", + "Ġdivorce d", + "Ġdivor ced", + "( lang", + "(l ang", + "f st", + "fs t", + "ĠT yr", + "ĠTy r", + "Ġm essenger", + "Ġmess enger", + "i fstream", + "if stream", + "X S", + "ĠB anking", + "ĠBank ing", + "ĠBan king", + "Ġinfect ious", + "ĠM ons", + "ĠMon s", + "ĠMo ns", + "_ LOOP", + "_LO OP", + "Ġzur ück", + "Ġob tener", + "Ġobt ener", + "Ġobten er", + "/ repos", + "/re pos", + "V el", + "Ve l", + "a cro", + "ac ro", + "acr o", + "Ġ userRepository", + "Ġuser Repository", + "style Type", + "Ġ SRC", + "ĠS RC", + "ĠSR C", + "VML INUX", + "rec ursive", + "/ bar", + "/b ar", + "_ chip", + "_c hip", + "_ch ip", + "_chi p", + "o minated", + "om inated", + "omin ated", + "Ġ Nit", + "ĠN it", + "ĠNi t", + "âĢĶ to", + "ĠBudd h", + "ĠBud dh", + "о меÑĢ", + "ом еÑĢ", + "ĠM AG", + "ĠMA G", + "Ġ CHE", + "ĠC HE", + "ĠCH E", + "_ den", + "_d en", + "_de n", + ". raises", + ".r aises", + ".raise s", + ".ra ises", + "_ degree", + "_d egree", + "_de gree", + "_deg ree", + "Ġpump kin", + "_ templates", + "_t emplates", + "_template s", + "_temp lates", + "_tem plates", + "_ MEDIA", + "_M EDIA", + "_MED IA", + "Ġ Timeline", + "ĠT imeline", + "ĠTime line", + "ĠTim eline", + "Ġ bots", + "Ġb ots", + "Ġbo ts", + "Ġbot s", + "Object Type", + "Ġbu ys", + "Ġbuy s", + ". posts", + ".post s", + ".pos ts", + ".po sts", + "C AL", + "CA L", + "wa iting", + "wait ing", + "ĠDaniel s", + "ĠDani els", + "Ġd abei", + "Ġda bei", + "Ġdab ei", + "Ġ Sigma", + "ĠS igma", + "ĠSig ma", + "i lor", + "il or", + "ilo r", + "i gel", + "ig el", + "ige l", + ", W", + "A DS", + "AD S", + "( panel", + "(p anel", + "(pa nel", + "ì² ´", + "it ating", + "ita ting", + "itat ing", + ". palette", + ".p alette", + ".pa lette", + "Ġmos quito", + "Ġt ego", + "Ġte go", + "Ġteg o", + "( parseInt", + "(parse Int", + "Ġdes pués", + "p romise", + "pro mise", + "prom ise", + "Ġ wij", + "Ġw ij", + "Ġwi j", + "type script", + "types cript", + "Ġ Tv", + "ĠT v", + "_IDENT IFIER", + ") .ĊĊĊ", + "). ĊĊĊ", + ").ĊĊ Ċ", + ").Ċ ĊĊ", + "_ flat", + "_f lat", + "_fl at", + "it su", + "its u", + "U SR", + "US R", + "ex perience", + "- fit", + "-f it", + "-fi t", + "ph inx", + "phi nx", + "phin x", + "_ thresh", + "_th resh", + "_thr esh", + "Ġide ally", + "Ġideal ly", + "ĠFree man", + "ĠFre eman", + "ĠFreem an", + ", DB", + ",D B", + "_ rw", + "_r w", + "çŃ ī", + "U b", + "_ statistics", + "_stat istics", + "=\" \"><", + "=\"\" ><", + "=\"\"> <", + "Ġch ore", + "Ġcho re", + "Ġchor e", + "Ġy ork", + "Ġyo rk", + "inst alled", + "install ed", + "Add itionally", + "Additional ly", + "Ġp stmt", + "Ġpst mt", + "yl ko", + ": :Ċ", + ":: Ċ", + "F orest", + "For est", + "Fore st", + "Fo rest", + "Ġhead set", + "Ġheads et", + "Ġg allon", + "Ġgal lon", + "Ġgall on", + "ÑĢ ÐµÐ¼", + "ÑĢе м", + "Ġwithdraw n", + "Ġwithd rawn", + "Ġ Candidate", + "ĠC andidate", + "ĠCandid ate", + "Ġmel ting", + "Ġmelt ing", + "Ġfree zer", + "Ġfreeze r", + "Ġ hl", + "Ġh l", + "_ HELP", + "_HE LP", + "_HEL P", + "m ime", + "mi me", + "( /*", + "(/ *", + "Ġth irst", + "Ġthi rst", + "$ return", + "$r eturn", + "$ret urn", + "member of", + "е б", + "еР±", + "Ġ HttpServletRequest", + "ĠHttp ServletRequest", + "ĠHttpServlet Request", + "( ob", + "(o b", + "_ Result", + "_Res ult", + "Ġassert ed", + "Ġfulfill ing", + "Ġfulfil ling", + "Ġstretch es", + "Ġstret ches", + "par ated", + "pa rated", + "para ted", + "parate d", + "-f unded", + "Ġ åĽ", + "Ġå Ľ", + "in gles", + "ing les", + "ingle s", + "_ ca", + "_c a", + ". condition", + ".con dition", + ".cond ition", + "Ġ Displays", + "ĠDis plays", + "ĠDisplay s", + "ĠDisp lays", + "Ġ orang", + "Ġo rang", + "Ġor ang", + "Ġora ng", + "Ġoran g", + "Ġ CRE", + "ĠC RE", + "ĠCR E", + "Ġgl Bind", + "Ġ Selector", + "ĠSe lector", + "ĠSelect or", + "ĠSel ector", + "ĠSele ctor", + "/ type", + "/t ype", + "ĠAlex a", + "ĠAle xa", + "ched ules", + "chedule s", + "ĠPen insula", + "Ġ parity", + "Ġp arity", + "Ġpar ity", + "Ġpari ty", + "ĉ dest", + "ĉd est", + "ĉdes t", + "ĉde st", + "ĠDo ors", + "ĠDoor s", + "čĊ ĉčĊ", + "_ dimension", + "_d imension", + "_dim ension", + "Ġ aload", + "Ġa load", + "Ġal oad", + "Ġalo ad", + ".St oredProcedure", + "( paren", + "(p aren", + "(par en", + "(pa ren", + "ĠBur ke", + "ĠBurk e", + "' )]Ċ", + "') ]Ċ", + "')] Ċ", + "- engine", + "-e ngine", + "-eng ine", + "Ġ quir", + "Ġqu ir", + "Ġq uir", + "Ġqui r", + "ĠH ybrid", + "ĠHy brid", + "ĠD oe", + "ĠDo e", + "Ġout lines", + "Ġoutline s", + "ĠT rends", + "ĠTr ends", + "ĠTre nds", + "ĠTrend s", + "_ NV", + "_N V", + "per iments", + "periment s", + "peri ments", + "ĠH in", + "ĠHi n", + "? ',", + "?' ,", + "ĉ Text", + "ĉT ext", + "F UL", + "FU L", + "Ġsm ells", + "Ġsmell s", + "Ġ slick", + "Ġs lick", + "Ġsl ick", + "Ġslic k", + "Ġmis erable", + "Ġmiser able", + "ĠArray Adapter", + "Ġparam String", + "H om", + "Ho m", + "_l iterals", + "_literal s", + "_lit erals", + "us uarios", + "usuario s", + "usu arios", + "Ġprompt ing", + "_ lazy", + "_l azy", + "_la zy", + "Ġ Activation", + "ĠAct ivation", + "ĠActiv ation", + "_ oc", + "_o c", + "We ak", + "Ġan ecd", + "ĠU CLA", + "ĠUC LA", + "= re", + "=r e", + "iss ement", + "isse ment", + "ĠEsc orts", + "ĠEscort s", + "Ex cellent", + "Ġ Pause", + "ĠP ause", + "ĠPa use", + "Ġ repositories", + "Ġre positories", + "Ġrepos itories", + "T OR", + "TO R", + "ar iate", + "ari ate", + "aria te", + "ariat e", + "_ iso", + "_i so", + "_is o", + "up dates", + "update s", + "upd ates", + "ha lb", + "hal b", + "udi ante", + "udiant e", + "ë¡ Ŀ", + "Ġna ive", + "ĠP eg", + "ĠPe g", + "ĠL ounge", + "ĠLo unge", + "ĠLou nge", + "AR GIN", + "ARG IN", + "( bin", + "(b in", + "On ClickListener", + "OnClick Listener", + "Ġ FAILED", + "ĠFA ILED", + "ĠFAIL ED", + "Ġ lite", + "Ġl ite", + "Ġli te", + "Ġlit e", + "Ġd zie", + "Ġdz ie", + "Ġdzi e", + "Ġ Literal", + "ĠL iteral", + "ĠLiter al", + "ĠLit eral", + "ĠLite ral", + "i vor", + "iv or", + "ivo r", + "f cntl", + "fc ntl", + "fcn tl", + "Ġe ats", + "Ġeat s", + "Ġea ts", + "Ġ qed", + "Ġq ed", + "Un lock", + "r iding", + "ri ding", + "rid ing", + "und ai", + "unda i", + "= M", + "AT TER", + "ATT ER", + "Configure Await", + "ic ias", + "ici as", + "icia s", + "ust omed", + "ustom ed", + "usto med", + "Ġsuccess ion", + "Ġsuc cession", + "Ġsucc ession", + "end Time", + "ĠJ upiter", + "Ġj udging", + "Ġjud ging", + "d ration", + "dr ation", + "dra tion", + "_ docs", + "_d ocs", + "_doc s", + "_do cs", + ". mo", + ".m o", + "Ġeduc ators", + "Ġeducator s", + "ĠV ine", + "ĠVi ne", + "ĠVin e", + "C ond", + "Con d", + "Co nd", + "[ out", + "[o ut", + "q b", + "\\ Validator", + "Ġmean ings", + "Ġmeaning s", + "Ġpres ently", + "Ġpresent ly", + "Ġdiv iding", + "Ġdivid ing", + "otten ham", + "as cular", + "asc ular", + "Ġtrail ers", + "Ġtra ilers", + "Ġtrailer s", + "Ġtrai lers", + "Ġ CLOSE", + "ĠC LOSE", + "ĠCL OSE", + "а ми", + "ам и", + "âĢĻ ai", + "âĢĻa i", + "Ġ Gain", + "ĠG ain", + "ĠGa in", + "w or", + "wo r", + "Ġpl anner", + "Ġplan ner", + "Ġdistrib uting", + "v at", + "va t", + "mon ths", + "month s", + "mont hs", + "x label", + "xl abel", + "H F", + "V iol", + "Vi ol", + ".BASE LINE", + "еÑĤ ÑģÑı", + "Ġ Rotate", + "ĠR otate", + "ĠRot ate", + "Ġ txn", + "Ġt xn", + "Ġtx n", + ": bold", + ":b old", + "Ġb loss", + "Ġbl oss", + "Ġblo ss", + "Forg ery", + "Forge ry", + "( embed", + "(em bed", + "Ġj ako", + "Ġja ko", + "Ġjak o", + "s printf", + "the ir", + "Ġexhib its", + "Ġexhibit s", + "- static", + "-st atic", + "-stat ic", + "he cy", + "hec y", + "get ActiveSheet", + ". clients", + ".c lients", + ".client s", + ".cl ients", + ".cli ents", + "ãģ į", + "_ hide", + "_h ide", + "_hi de", + "_hid e", + "[ word", + "[w ord", + "C b", + "add Item", + "a xe", + "ax e", + "_ radio", + "_r adio", + "_rad io", + "_ra dio", + "_radi o", + "a lion", + "al ion", + "ali on", + "mod ifier", + "Ġsat uration", + "Ġsatu ration", + "Ġsatur ation", + "Ġde nom", + "Ġden om", + "_ pixels", + "_p ixels", + "_pixel s", + "_pix els", + "m ess", + "me ss", + "mes s", + "( fl", + "(f l", + "a tif", + "at if", + "ati f", + "Ġ secs", + "Ġs ecs", + "Ġse cs", + "Ġsec s", + "Ġpro stitution", + "Ġprostit ution", + "Ġprost itution", + "Ġprostitu tion", + "Ġprostitut ion", + "Ġgrand children", + "Ġparad ise", + "ĠF eld", + "ĠFe ld", + "ĠFel d", + "_B INARY", + "_BIN ARY", + "it ous", + "ito us", + "itou s", + "à ¹Ħ", + "๠Ħ", + "Ġfl ashing", + "Ġflash ing", + "-s ided", + "-side d", + "Ġcontrad iction", + "Ġcontradict ion", + "/ *ĊĊ", + "/* ĊĊ", + "/*Ċ Ċ", + "y label", + "yl abel", + "yla bel", + "ĠT et", + "ĠTe t", + "Ġadm ire", + "Ġadmir e", + "r eso", + "re so", + "res o", + "Ġl etz", + "Ġle tz", + "Ġlet z", + "Ġ SEARCH", + "ĠSE ARCH", + "s lots", + "sl ots", + "slot s", + "ĠRe wards", + "ĠRew ards", + "ĠReward s", + "ĠH og", + "ĠHo g", + "Ġ NSData", + "ĠNS Data", + "st ash", + "sta sh", + "F all", + "Fa ll", + "Fal l", + "ĠA mer", + "ĠAm er", + "Line arLayout", + "Linear Layout", + "/ photos", + "/photo s", + "/ph otos", + "Ġfe ather", + "Ġfeat her", + "Ġ |čĊ", + "Ġ| čĊ", + "Down loads", + "Download s", + ".Start sWith", + "Ġ //#", + "Ġ// #", + "Ġ/ /#", + "ine Transform", + "Ġaff id", + "Ġaf fid", + "V tbl", + "ĠR ogue", + "ĠRo gue", + "ĠRog ue", + "s cribed", + "scribe d", + "scri bed", + "Ġf auc", + "Ġfa uc", + "ĠMon roe", + "Ġdecl ares", + "Ġdeclar es", + "Ġdeclare s", + "mod ern", + "mode rn", + "r eon", + "re on", + "reo n", + "ay be", + "P ASS", + "PA SS", + "f ers", + "fer s", + "fe rs", + "_MULT I", + "_MUL TI", + "ĠMath ematics", + "ĠMathematic s", + "Ġsud ah", + "_ATT ACH", + "Ġnumber With", + "ĠSol omon", + "ĠSolo mon", + "j in", + "ji n", + "ograf ia", + "ogr afia", + "ö l", + "_ design", + "_d esign", + "_de sign", + "_des ign", + "c ulated", + "cul ated", + "culate d", + "cu lated", + "ĠL una", + "ĠLu na", + "ĠLun a", + "i esz", + "ies z", + "ie sz", + "Ġ =>'", + "Ġ= >'", + "Ġ=> '", + "Ġreve lations", + "Ġrevel ations", + "Ġrevelation s", + "A long", + "Al ong", + "( ed", + "(e d", + "Ġ Filename", + "ĠF ilename", + "ĠFile name", + "ĠFil ename", + "ĠFi lename", + "Ġ ylabel", + "Ġy label", + "S ecure", + "Sec ure", + "Ġbus ca", + "Ġbusc a", + "ag nosis", + "agn osis", + "_RE CE", + "_REC E", + "Ġover lapping", + "Ġoverlap ping", + "Ġoverl apping", + "Ex tent", + "Ext ent", + "Ġant icipation", + "Ġanticip ation", + "Ġantic ipation", + "Check s", + "Che cks", + "ĠAL SO", + "ĠALS O", + "o rc", + "or c", + "iling ual", + "it ational", + "itation al", + "itat ional", + "Ġadv ancement", + "Ġadvance ment", + "o uro", + "ou ro", + "our o", + "Ġ Predicate", + "ĠP redicate", + "ĠPred icate", + "å¾ Ĺ", + "e ria", + "er ia", + "eri a", + "ĠP ierce", + "ĠPi erce", + "ĠPier ce", + "o rio", + "or io", + "ori o", + "Ġmer its", + "Ġmerit s", + "Ġpe anut", + "Ġpea nut", + ". Package", + ".P ackage", + "ĠCon duct", + "ĠCond uct", + "_ SENSOR", + "_S ENSOR", + "_SENS OR", + "Ġbo iling", + "Ġboil ing", + "Ġin tra", + "Ġint ra", + "Ġintr a", + "Ġ IGN", + "ĠI GN", + "ĠIG N", + "ĠF ur", + "ĠFu r", + ". Refresh", + ".Re fresh", + ".Ref resh", + "Ġ Reach", + "ĠR each", + "ĠRe ach", + "_ decoder", + "_de coder", + "_dec oder", + "_decode r", + ". Exp", + ".Ex p", + ".E xp", + "Ġ ÑĤак", + "ĠÑĤ ак", + "ĠÑĤа к", + "p ill", + "pi ll", + ", Q", + "ĠGr ill", + "ĠGri ll", + "Ġp opping", + "Ġpop ping", + "Ġpo pping", + ". Ag", + ".A g", + "Ġpro yecto", + "Ġmile age", + "Ġec ological", + "Ġeco logical", + "] ]);Ċ", + "]] );Ċ", + "]]) ;Ċ", + "Ġ ÂŃ", + "Ġ Ń", + "sub plot", + "a cad", + "ac ad", + "aca d", + "Ġ Trying", + "ĠT rying", + "ĠTr ying", + "ĠTry ing", + "rec ipes", + "recipe s", + "$ criteria", + "$c riteria", + "ĠPer sian", + "ĠPers ian", + "- bound", + "-b ound", + "-bo und", + "M ASK", + "MA SK", + "MAS K", + "Ġ Gesture", + "ĠG esture", + "ĠGes ture", + "ĠGest ure", + "Ġ kk", + "Ġk k", + "ĠP VC", + "ĠPV C", + "Ġpro hibition", + "Ġprohib ition", + "Ġprohibit ion", + "Ġcom ando", + "Ġco mando", + "Ġcoma ndo", + "Ġ LOOK", + "ĠL OOK", + "ĠLO OK", + "Sh opping", + "Shop ping", + "Ġdist ortion", + "Ġdistort ion", + "< Boolean", + ".Get Length", + "um pt", + "ump t", + "\\ Product", + "ell ery", + "elle ry", + "eller y", + "Ġfire wall", + "form atted", + "format ted", + ". redis", + ".re dis", + ".r edis", + ".red is", + "Ġ esa", + "Ġe sa", + "Ġes a", + "ĠRh ode", + "S om", + "So m", + ". non", + ".n on", + ".no n", + "Ġ ').", + "Ġ' ).", + "Ġ') .", + "Ġ getView", + "Ġget View", + "ạ n", + "p rus", + "pr us", + "Mat thew", + "Ġs ia", + "Ġsi a", + "ĠF ors", + "ĠFor s", + "ĠFo rs", + "G PU", + "GP U", + "ient ras", + "ien tras", + "_ INST", + "_IN ST", + "_I NST", + "_INS T", + "Ġo larak", + "Ġol arak", + "Ġola rak", + "Ġimport ing", + "Ġimp orting", + "T CP", + "TC P", + "/ \");Ċ", + "/\" );Ċ", + "/\") ;Ċ", + "e ither", + "ei ther", + "Ġfresh ly", + "c ascade", + "cas cade", + "( character", + "(char acter", + "ĠJe ep", + "o tics", + "ot ics", + "otic s", + "oti cs", + "_ UTIL", + "_UT IL", + ".Xtra Printing", + ".first Child", + "ĠEx cell", + "ĠExcel l", + "ĠExc ell", + "Ġd vd", + "Ġdv d", + "Ġt aller", + "Ġtal ler", + "Ġta ller", + "Ġtall er", + "Ġ ras", + "Ġr as", + "Ġra s", + "y pass", + "yp ass", + "Ġassign s", + "Ġgr iev", + "Ġgri ev", + "- more", + "-m ore", + "J D", + "ĠBur ns", + "ĠBurn s", + "' >čĊ", + "'> čĊ", + ". Dependency", + ".D ependency", + ".Dep endency", + ". QueryString", + ".Query String", + ". Owner", + ".O wner", + "Ġ expiry", + "Ġex piry", + "Ġexp iry", + "T hu", + "Th u", + "( Vec", + "(V ec", + "Ġhazard ous", + "Ġ rpm", + "Ġr pm", + "Ġrp m", + "AP ON", + "APO N", + "Ġadd Target", + "s ville", + "sv ille", + "p Net", + "Ġ Img", + "ĠI mg", + "ĠIm g", + "Ġ TIMER", + "ĠT IMER", + "ĠTIM ER", + "ĠTIME R", + "ĠTI MER", + ". Animation", + ".An imation", + "Ġ bek", + "Ġb ek", + "Ġbe k", + "Ġas sort", + "Ġass ort", + "Ġle bih", + "Ġbody Parser", + "Ġvibr ating", + "Ġvib rating", + "I DL", + "ID L", + "Ġbutter knife", + "in ters", + "int ers", + "inter s", + "inte rs", + "Ġpersu ade", + "ĠLGBT Q", + "è ĭ", + ". soft", + ".s oft", + ".so ft", + "Ġbe ams", + "Ġbeam s", + "_ sur", + "_s ur", + "_su r", + ". Def", + ".D ef", + ".De f", + "Ġ labs", + "Ġl abs", + "Ġla bs", + "Ġlab s", + "ĉ plt", + "ĉp lt", + "ĉpl t", + "Ġ skins", + "Ġs kins", + "Ġsk ins", + "Ġskin s", + "Ġski ns", + "Ġtransfer ring", + "Ġtransf erring", + "Ġimag inary", + "Ġimagin ary", + "_ End", + "_E nd", + "; background", + "Ġ laps", + "Ġl aps", + "Ġla ps", + "Ġlap s", + "_ COMMENT", + "_COM MENT", + "_COMM ENT", + "( SDL", + "(S DL", + "o nds", + "on ds", + "ond s", + ". Record", + ".Re cord", + ".Rec ord", + "ĠIm plements", + "ĠImp lements", + "ĠImplement s", + "ĠImpl ements", + "_ ticks", + "_t icks", + "_tick s", + "_ti cks", + "( )))ĊĊ", + "() ))ĊĊ", + "()) )ĊĊ", + "())) ĊĊ", + "()))Ċ Ċ", + "Ġa rose", + "Ġar ose", + "] ?", + "Ġ Mp", + "ĠM p", + "ĠI Command", + "Ġsculpt ure", + "Ġcon tracted", + "Ġcontract ed", + "Ġcontr acted", + "< HTML", + "Ġcal end", + "a ty", + "at y", + "/ Sub", + "/S ub", + "Ġkv inn", + "Ġkvin n", + "_ IGNORE", + "ĠSh ane", + "ĠSha ne", + "ĠShan e", + "M LS", + "ML S", + "Ġstim ulate", + "Part ition", + "Ġ mun", + "Ġm un", + "Ġmu n", + "ó m", + "er ala", + "era la", + "eral a", + "- account", + "-a ccount", + "-ac count", + ". Binary", + ".B inary", + "c é", + "Ġse ize", + "Ġseiz e", + "Ġsei ze", + "conn ections", + "connect ions", + "connection s", + "Ġ ĊĠĠĠĠĠĠĠĠĊ", + "ĠĊ ĠĠĠĠĠĠĠĠĊ", + "Ġ Diagnostic", + "ĠDi agnostic", + "V ISIBLE", + "VIS IBLE", + "Ġ Runs", + "ĠR uns", + "ĠRun s", + "ĠRu ns", + "Ġim pressions", + "Ġimpress ions", + "Ġimpression s", + "Ġimpr essions", + "s uite", + "su ite", + "suit e", + "o ble", + "ob le", + "obl e", + "~ -", + "ak ukan", + "aku kan", + "< Person", + "

\">\" >\"> \">< /", + "_ indexes", + "_index es", + "Ġ valuation", + "Ġval uation", + "Ġvalu ation", + "Ġlife long", + "Ġlif elong", + "Ġexp edition", + "Ġexped ition", + "( Yii", + "(Y ii", + "Ġp ains", + "Ġpain s", + "Ġpa ins", + "Ġpai ns", + "Ġ PRI", + "ĠP RI", + "ĠPR I", + "Ġ Mixed", + "ĠM ixed", + "ĠMix ed", + "ĠMi xed", + "Ġ Changing", + "ĠCh anging", + "ĠChan ging", + "ĠChang ing", + "German y", + "Ger many", + "comm unication", + "communic ation", + ". organ", + ".org an", + ".o rgan", + ".or gan", + "ĠMar athon", + "ĠMara thon", + "get Path", + "Ġ Accuracy", + "ĠAc curacy", + "ĠAcc uracy", + "Ġ Globals", + "ĠG lobals", + "ĠGlobal s", + "ĠGlob als", + "') }}'", + "Ġ'\" >'", + "Ġ'\"> '", + "k inson", + "kin son", + "kins on", + "Ġ кол", + "Ġк ол", + "Ġко л", + "ogn itive", + "_ li", + "_l i", + "Ġim minent", + "Ġimm inent", + "Ġaff inity", + "Ġaf finity", + ". signal", + ".s ignal", + ".sign al", + ".sig nal", + "Ġn otch", + "Ġnot ch", + "ĠSteel ers", + "ĠSteele rs", + "max length", + "K K", + "ĠEu gene", + "ĠEug ene", + "_ PWM", + "_P WM", + "_PW M", + "r oi", + "ro i", + "Ġ âĹı", + "Ġâ Ĺı", + "ĠâĹ ı", + "ĠH amburg", + "ĠHam burg", + ". Must", + ".M ust", + "Ġ axe", + "Ġa xe", + "Ġax e", + "en ef", + "ene f", + "Ġamb itions", + "Ġambit ions", + "Ġambition s", + "Ġ Species", + "ĠS pecies", + "ĠSp ecies", + "ĠSpec ies", + "ĠSpe cies", + "ĠSt ress", + "ĠStr ess", + "ĠStre ss", + "Ġa while", + "Ġ бÑĥд", + "Ġб Ñĥд", + "ĠбÑĥ д", + "Ġwith stand", + "Ġ Decoder", + "ĠDe coder", + "ĠDec oder", + "ĠDecode r", + "_ inventory", + "_in ventory", + "Ġ{ ččĊ", + "Ġ tgt", + "Ġt gt", + "Ġtg t", + "Ġrail road", + "W ASHINGTON", + "Ġnegot iated", + "Ġnegotiate d", + "N ST", + "NS T", + "- phone", + "-p hone", + "-ph one", + ", U", + "Ġexerc ising", + "á» ¥", + "_P IXEL", + "_PIX EL", + "av ors", + "avor s", + "avo rs", + "ite rated", + "iter ated", + "iterate d", + "Ġv ampire", + "Ġvamp ire", + "a dal", + "ad al", + "ada l", + "In grese", + "Ing rese", + "Ġ ung", + "Ġu ng", + "Ġun g", + "j ective", + "ject ive", + ". cells", + ".c ells", + ".cell s", + "Ġ nano", + "Ġn ano", + "Ġna no", + "Ġnan o", + "Ġ markdown", + "Ġmark down", + "_ RULE", + "_R ULE", + "( events", + "(e vents", + "(event s", + "(ev ents", + "Ġl uggage", + "Ġlug gage", + "M ESSAGE", + "MESS AGE", + "ig keit", + "$ count", + "$c ount", + "Attribute Name", + "IG INAL", + "IGIN AL", + "_ Ent", + "_E nt", + "Ġ BF", + "ĠB F", + "Ġ COMMENT", + "ĠCOM MENT", + "ĠCOMM ENT", + "_ ini", + "_in i", + "_i ni", + "ĠEurope ans", + "ĠEuropean s", + "ĠB elle", + "ĠBe lle", + "ĠBel le", + "ĠBell e", + "åij ½", + ") ['", + ")[ '", + "åº Ķ", + "ĠUs eful", + "ĠUse ful", + ". reference", + ".re ference", + ".ref erence", + "( )\",", + "() \",", + "()\" ,", + "_ grade", + "_g rade", + "_gr ade", + "_grad e", + "ĠK aw", + "ĠKa w", + "Ġsent encing", + "Ġsocial ism", + "mon ster", + "mons ter", + "_L AYER", + "Ġdeep est", + "Ġdee pest", + "w k", + "Ġ Noise", + "ĠN oise", + "ĠNo ise", + "# ##ĊĊ", + "## #ĊĊ", + "### ĊĊ", + "###Ċ Ċ", + "Ġpr éc", + "Ġpré c", + "o tle", + "ot le", + "ÑĤ е", + "a uf", + "au f", + "i bal", + "ib al", + "iba l", + "Ġcon quer", + "Ġconqu er", + "> Email", + ">E mail", + "Ġamb ulance", + "O AD", + "OA D", + "Ġ (\"%", + "Ġ( \"%", + "Ġ(\" %", + "Ġ FI", + "ĠF I", + ". fixture", + ".f ixture", + ".fix ture", + "Ġt erse", + "Ġter se", + "Ġters e", + "ĠĠ ĠĠĉĉĉĉ", + "ĠĠĠĠ ĉĉĉĉ", + "ĠĠĠ Ġĉĉĉĉ", + "ĠĠĠĠĉ ĉĉĉ", + "ĠĠĠĠĉĉ ĉĉ", + "ĠĠĠĠĉĉĉ ĉ", + "Ġsanct uary", + "u gi", + "ug i", + "Ġ Comparator", + "ĠCom parator", + "ĠCompar ator", + "Definition s", + "Ġast hma", + "Ġl act", + "Ġla ct", + "Ġlac t", + "Ġhard wood", + ". clock", + ".c lock", + ".cl ock", + "Ġattr acting", + "Ġattract ing", + "ĠM our", + "ĠMo ur", + "ĠMou r", + "( distance", + "(d istance", + "(dist ance", + "(di stance", + "ic its", + "ici ts", + "icit s", + "Ġb onne", + "Ġbon ne", + "Ġ ACCESS", + "ĠAC CESS", + "ĠACC ESS", + ".Deserialize Object", + "Ġ Typed", + "ĠT yped", + "ĠType d", + "ĠTy ped", + "ĠTyp ed", + "Ġj eu", + "Ġje u", + "Ġ appId", + "Ġapp Id", + "ĠC lara", + "ĠCl ara", + "ĠClar a", + "ĠCla ra", + "Ġ HF", + "ĠH F", + "ĠRe ich", + "ĠRei ch", + "ip ples", + "ipp les", + "ipple s", + "// --------------------------------------------------------------------------------", + "//---------------------------------------------------------------- ----------------", + "//---------------------------------------------------------------------------- ----", + "//------------------------------------------------ --------------------------------", + "//-------------------------------- ------------------------------------------------", + "//---------------- ----------------------------------------------------------------", + "_ delivery", + "_d elivery", + "_del ivery", + "erial ization", + "Ġplaint iffs", + "Ġplaintiff s", + "S cient", + "Sc ient", + "Sci ent", + "sh opping", + "shop ping", + "Ġ Dummy", + "ĠD ummy", + "ĠDum my", + "ĠW ald", + "ĠWal d", + "ĠWa ld", + "Group Name", + "Ġ inscription", + "Ġin scription", + "Ġins cription", + "e log", + "el og", + "elo g", + ": :::::::", + ":: ::::::", + ":::: ::::", + ":::::: ::", + "::: :::::", + "::::: :::", + "::::::: :", + "_ ld", + "_l d", + "Back Pressed", + ". Raw", + ".R aw", + "ĠOn Trigger", + "Ġmuseum s", + "Ġmuse ums", + "Ġ Been", + "ĠB een", + "ĠBe en", + "ĠBee n", + "ĠAdvent ures", + "ĠAdventure s", + "Ġs late", + "Ġsl ate", + "Ġsla te", + "Ġ lett", + "Ġl ett", + "Ġle tt", + "Ġlet t", + "Ġs und", + "Ġsu nd", + "Ġsun d", + "ĠG in", + "ĠGi n", + "ĠMechan ical", + "ĠMech anical", + ". ship", + ".s hip", + ".sh ip", + "App Component", + "Ġdest ined", + "Ġdestin ed", + "Ġdw elling", + "Ġdwell ing", + "Pro filer", + "Profile r", + "Prof iler", + "Pre pare", + "ze ich", + "Ġsil icon", + "( has", + "(h as", + "Ġ# %", + "V IDEO", + "VID EO", + "Ġcollabor ate", + "L in", + "Li n", + "Ġ scopes", + "Ġsc opes", + "Ġscope s", + "Ġsco pes", + "Ġscop es", + "( className", + "(class Name", + "( sd", + "(s d", + "an din", + "and in", + "andi n", + ". ham", + ".h am", + "Service Impl", + "-de scribed", + "-des cribed", + "Ġir ony", + "Ġiron y", + "st ial", + "sti al", + "ĠHu awei", + "( repo", + "(re po", + "(rep o", + "Ġunexpected ly", + "ĠK ai", + "ĠKa i", + ". install", + ".inst all", + "\\ xf", + "\\x f", + "Ġex hibited", + "Ġexhib ited", + "Ġexhibit ed", + "_ TCP", + "_T CP", + "_TC P", + "ĠO x", + "_ CHO", + "_C HO", + "_CH O", + "Ġprostitu erte", + "Ġprostituer te", + "Ġ vä", + "Ġv ä", + "Ġs ito", + "Ġsit o", + "Ġsi to", + "Ġconstitu ents", + "Ġconstituent s", + "ĠContinue d", + "ĠContin ued", + "Ġ SAVE", + "ĠS AVE", + "ĠSA VE", + "r ss", + "rs s", + "/ message", + "/m essage", + "u bes", + "ub es", + "ube s", + "Ġmisd emean", + "Ġtax ation", + "Ġtaxa tion", + "Ġstory line", + "h air", + "ha ir", + "hai r", + "ĠF inds", + "ĠFin ds", + "ĠFind s", + "ĠFi nds", + "S IG", + "SI G", + "ver ification", + "~ =", + ". hp", + ".h p", + "It erable", + "Iter able", + "Ñĭ е", + "at ori", + "ator i", + "ato ri", + "Ġ ctr", + "Ġc tr", + "Ġct r", + "R x", + "_ );ĊĊ", + "_);Ċ Ċ", + "_) ;ĊĊ", + "d ag", + "da g", + ". pin", + ".p in", + ".pi n", + "Ġp seud", + "Ġin vo", + "Ġinv o", + "Ñģ ÑĤÑĢ", + "ÑģÑĤ ÑĢ", + "_ pix", + "_p ix", + "_pi x", + "为 空", + "Ġsw orn", + "Ġswo rn", + "âĢĶ or", + "_ registry", + "_reg istry", + "Ġdis asters", + "Ġdisaster s", + "Ġ ROI", + "ĠR OI", + "ĠRO I", + "Ġ âĢķ", + "ĠâĢ ķ", + "ak tu", + "akt u", + "f orest", + "fo rest", + "fore st", + "for est", + "be iten", + "beit en", + "bei ten", + "âĢĶ I", + "u eva", + "ue va", + "e gt", + "eg t", + "Ġsp ikes", + "Ġspi kes", + "Ġspike s", + "U RES", + "UR ES", + "URE S", + "Ġ Recommended", + "ĠRe commended", + "ĠRecomm ended", + "ĠRecommend ed", + "Ġexplo ited", + "Ġexploit ed", + "ĠFreder ick", + "_ COMPLETE", + "_COMP LETE", + "ĠDr ugs", + "ĠDrug s", + "!!! !!!!!", + "!!!! !!!!", + "!!!!! !!!", + "ĠR iv", + "ĠRi v", + "S TOP", + "ST OP", + "R OOM", + "RO OM", + "Ġ PASSWORD", + "ĠP ASSWORD", + "ĠPASS WORD", + "C ookies", + "Co okies", + "Cookie s", + "Cook ies", + ". El", + ".E l", + "á» Ń", + "ĠB ert", + "ĠBe rt", + "ĠBer t", + "Ġ hashed", + "Ġh ashed", + "Ġhas hed", + "Ġhash ed", + "Ġha shed", + "ic ester", + "ice ster", + "ices ter", + "Ġdecor ator", + "Ġ queryString", + "Ġquery String", + ": ;Ċ", + "Ġ\" [\"", + "Ġ\"[ \"", + "ot ope", + "oto pe", + "- Americ", + "-A meric", + "-Am eric", + "ĠMatthew s", + "ĠMatth ews", + "U RAL", + "UR AL", + "URA L", + "âĢľ ,", + "S ummer", + "Sum mer", + "f os", + "fo s", + "_CONT AINER", + "_ ACK", + "_A CK", + "_AC K", + "Ġ filtr", + "Ġf iltr", + "Ġfil tr", + "Ġfi ltr", + "Ġfilt r", + "_ disp", + "_d isp", + "_dis p", + "_di sp", + "_ Re", + "_R e", + "Ġfac ile", + "Ġfacil e", + "а ÑĪ", + "Ġìķ Ĭ", + "Ġe ben", + "Ġeb en", + "Ġsp rink", + "Ġspr ink", + "ĠQ uint", + "ĠQu int", + "ĠQui nt", + "> V", + "Ġhistor ians", + "Ġhistorian s", + "Ġhistoria ns", + "Ġhisto rians", + "our met", + "Ġ Monitoring", + "ĠMonitor ing", + "led ger", + "ledge r", + "c ott", + "co tt", + "cot t", + "Ġ ware", + "Ġw are", + "Ġwar e", + "Ġwa re", + "G GLE", + "GG LE", + "c ars", + "ca rs", + "car s", + "ĠM EDIATEK", + "Ġvol upt", + "_ View", + "_V iew", + "H EL", + "HE L", + "( copy", + "(c opy", + "(co py", + "( stats", + "(st ats", + "(stat s", + "Ġch romosome", + "Ġchrom osome", + "ĠCurt is", + "- conf", + "-con f", + "-co nf", + "( asset", + "(as set", + "Ġh vor", + "Ġhv or", + "File System", + "< >();čĊ", + "<>( );čĊ", + "<> ();čĊ", + "o coder", + "oc oder", + "oco der", + "ocode r", + "ĠC annon", + "ĠCan non", + "ĠCann on", + ") x", + "Ġ Smooth", + "ĠSm ooth", + "ĠS AS", + "ĠSA S", + "_ ce", + "_c e", + "ĉ prev", + "ĉp rev", + "ĉpr ev", + "ĉpre v", + "_ movie", + "_m ovie", + "_mov ie", + "_mo vie", + "E c", + "_ wall", + "_w all", + "< Button", + ".ĊĊ", + "/> .ĊĊ", + "/>.Ċ Ċ", + "/>. ĊĊ", + "o genesis", + "ogen esis", + "ogene sis", + "Ġ OPTIONS", + "ĠOPTION S", + "ĠOPT IONS", + "up tools", + "upt ools", + "Ġmilit ant", + "Ġmil itant", + "Ġmili tant", + "Ġex ited", + "Ġexit ed", + "i gar", + "ig ar", + "iga r", + "Ġ COMM", + "ĠCO MM", + "ĠCOM M", + "Ġ Disposable", + "ĠD isposable", + "ĠDis posable", + "ay cast", + "Ġrow span", + "Ġrows pan", + "Ġsyn thes", + "Ġsynth es", + "Ġsynt hes", + "Ġso ndern", + "Ġsond ern", + "Ġ Ċ", + "]- ->Ċ", + "ĠJ acket", + "ĠJack et", + "ĠJac ket", + "ĠJa cket", + "R ATION", + "RA TION", + ".get SelectedItem", + ".getSelected Item", + "- init", + "-in it", + "-i nit", + "Ġ Registers", + "ĠReg isters", + "ĠRegister s", + "_ sep", + "_s ep", + "_se p", + "Ġ Toolkit", + "ĠTool kit", + ". dict", + ".d ict", + ".di ct", + "Ġ xlabel", + "Ġx label", + "Ġxl abel", + "\\ Table", + "t oc", + "to c", + "_ combo", + "_c ombo", + "_com bo", + "_comb o", + "Ġ Compact", + "ĠComp act", + "Ġr ugged", + "Ġrug ged", + "à¥ĩ à¤", + "- management", + "-man agement", + "') }}\">Ċ", + "')}} \">Ċ", + "')}}\" >Ċ", + "')} }\">Ċ", + "')}}\"> Ċ", + "Ġ Stamp", + "ĠSt amp", + "ĠSta mp", + "ĠStam p", + "ı l", + "r ox", + "ro x", + "Ġlandscape s", + "Ġlandsc apes", + "_ NOTE", + "_N OTE", + "_NO TE", + "_NOT E", + "mon ary", + "c ab", + "ca b", + "Ġmo et", + "x af", + "xa f", + "r code", + "rc ode", + "- cli", + "-c li", + "-cl i", + "_ gate", + "_g ate", + "[ event", + "[e vent", + "S PORT", + "SP ORT", + "g ia", + "gi a", + "Ġ SUPER", + "ĠS UPER", + "ĠSU PER", + "ĠSUP ER", + "/ Login", + "_ shutdown", + "_sh utdown", + "int errupt", + "inter rupt", + "Ġpret ending", + "Ġpretend ing", + "Ġf ringe", + "Ġfr inge", + "Ġfri nge", + "ĠR eds", + "ĠRe ds", + "ĠRed s", + "Ġ CUDA", + "ĠC UDA", + "ĠCU DA", + "Ġ UNIX", + "ĠUN IX", + "v it", + "vi t", + "Ġ brig", + "Ġb rig", + "Ġbr ig", + "Ġbri g", + "d rv", + "dr v", + "Ġ Connector", + "ĠConnect or", + "ĠConn ector", + "There fore", + "Ġ lia", + "Ġl ia", + "Ġli a", + "D etection", + "De tection", + "Det ection", + "Detect ion", + "_ actor", + "_a ctor", + "_ac tor", + "_act or", + "Ġtemp file", + "Ġecc entric", + "- role", + "-r ole", + "-ro le", + "Ġp adx", + "Ġpa dx", + "Ġpad x", + "d ent", + "de nt", + "den t", + "West ern", + "Ġ ê·¸", + "Ġê ·¸", + "Ġê· ¸", + "ĠApplication Record", + "Ġcampaign ing", + "_ runner", + "_r unner", + "_run ner", + "ĠC ivic", + "ĠCi vic", + "ĠCiv ic", + "a leigh", + "ale igh", + "Ġdir ekt", + "Ġdire kt", + ".s ul", + "Ġ Ġĉĉĉ", + "ĠĠ ĉĉĉ", + "ĠĠĉ ĉĉ", + "ĠĠĉĉ ĉ", + "a nten", + "an ten", + "ant en", + "ante n", + "Ġ issuer", + "Ġiss uer", + "Ġissue r", + "Ġissu er", + "Ġassert ions", + "Ġassertion s", + "( orig", + "(o rig", + "(or ig", + "AT IO", + "Ġle aned", + "Ġlean ed", + "ä s", + ". DTO", + ".D TO", + "ex plode", + "expl ode", + "explo de", + ". Observable", + ".O bservable", + "Ġstagger ing", + "Ġkidn apped", + "Ġprogram mers", + "Ġprogramme rs", + "Ġprogrammer s", + "Ġprogramm ers", + "ĠIn nov", + "ĠInn ov", + ". parameter", + ".param eter", + "Ġd omination", + "Ġdo mination", + "Ġdom ination", + "Ġdomin ation", + "Ġdomina tion", + "Ġske ptic", + "Ġskept ic", + "Ġ æĺ¯", + "Ġæĺ ¯", + "Ġav oids", + "Ġavoid s", + ". Verify", + ".Ver ify", + "ub by", + "ubb y", + "Ġ ASN", + "ĠA SN", + "ĠAS N", + "Ġform ato", + "Ġformat o", + "Ġforma to", + "ĠBeat les", + "_ brand", + "_b rand", + "_br and", + "Ġin set", + "Ġins et", + "Ġinse t", + "y outu", + "you tu", + "Ġ toc", + "Ġt oc", + "Ġto c", + "- final", + "-f inal", + "-fi nal", + "-fin al", + "Sh owing", + "Show ing", + "ĠD oub", + "ĠDo ub", + "ĠDou b", + "ĠM esa", + "ĠMe sa", + "ĠMes a", + "A dj", + "Ad j", + "_ medium", + "_m edium", + "_med ium", + "Create s", + "Cre ates", + "Creat es", + "( endpoint", + "(end point", + "ĉ UP", + "ĉU P", + "b bie", + "bb ie", + "Ġ stalk", + "Ġs talk", + "Ġst alk", + "Ġsta lk", + "Ġstal k", + ".data bind", + ".datab ind", + ". Scan", + ".S can", + ".Sc an", + "ag ents", + "age nts", + "agent s", + "agen ts", + "$ ,", + "ind ividual", + "+ )/", + "+) /", + "ĉ vm", + "ĉv m", + "( notification", + "(not ification", + "Ġin ex", + "Ġi nex", + "Ġine x", + "Ġ Classification", + "ĠClass ification", + "r eno", + "re no", + "ren o", + "Ġo lig", + "Ġol ig", + "Ġoli g", + "- rated", + "-r ated", + "-rate d", + "-ra ted", + "Ġform ulation", + "Ġformula tion", + "Ġformul ation", + "' ,{", + "', {", + "Ġa cept", + "Ġac ept", + "Ġace pt", + "_ unpack", + "_un pack", + "_ CA", + "_C A", + ". Pow", + ".P ow", + "ĉ im", + "ĉi m", + "Ġal uminium", + "Ġalum inium", + "A NO", + "AN O", + "Ġ xn", + "Ġx n", + "Ġc ómo", + "Ġcó mo", + "Ġ Ingredient", + "ĠIng redient", + "Ġseiz ures", + "Ġseizure s", + "åħ ±", + "ific ador", + "ificado r", + "Ġs iguiente", + "Ġsigu iente", + "ĠIn fragistics", + "Ġd uplicated", + "Ġduplicate d", + "Ġdup licated", + "Ġduplic ated", + "ĠD ee", + "ĠDe e", + "Ġn ø", + "Ġ ACCEPT", + "ĠAC CEPT", + "( crate", + "(c rate", + "(cr ate", + "иÑĤ елÑĮ", + "иÑĤе лÑĮ", + "- less", + "-l ess", + "-le ss", + "Ġ infinity", + "Ġin finity", + "Ġinf inity", + "Ġinfinit y", + "An alyzer", + "Analy zer", + "- Day", + "-D ay", + "r itt", + "ri tt", + "rit t", + "( cin", + "(c in", + "(ci n", + "ĠG y", + "Ġmulti plied", + "Ġmultip lied", + "u chi", + "uch i", + "uc hi", + "ĠBald win", + "/ ip", + "/i p", + "Ġshort cuts", + "Ġshortcut s", + ". ADD", + ".A DD", + ".AD D", + "Ġv igor", + "Ġvi gor", + "Ġvig or", + "_ instruction", + "_in struction", + "_instr uction", + "( ;", + "_ eta", + "_e ta", + "_et a", + "è¿ ŀ", + "utor ials", + "utorial s", + "Ġboost ing", + "b v", + "Ġacknowled ges", + "Ġacknowledge s", + "List ening", + "Listen ing", + "F AQ", + "FA Q", + "; b", + "( (-", + "(( -", + "Ġarchitect s", + "Ġarchit ects", + "Ġz we", + "Ġzw e", + "Ġp uls", + "Ġpul s", + "Ġpu ls", + "Ġget Count", + "ĠgetC ount", + "ver bs", + "verb s", + "ãĢ ľ", + "( Collection", + "(C ollection", + "k re", + "kr e", + "Ġjurisdiction s", + "Ġjuris dictions", + "_ bridge", + "_b ridge", + "_br idge", + "ĠC rack", + "ĠCr ack", + "ĠCra ck", + "Ġ Difficulty", + "ĠDiff iculty", + "K O", + "Res ervation", + "_ requires", + "_re quires", + "_require s", + "T our", + "To ur", + "ãģĹ ãģŁ", + "ãģĹãģ Ł", + ". setCurrent", + ".set Current", + "Ġ ky", + "Ġk y", + "ĠAlb any", + "ĠAlban y", + "Ġ è§", + "Ġè §", + "l ler", + "ll er", + "lle r", + "ag na", + "agn a", + "work ers", + "worker s", + "wor kers", + ". blank", + ".bl ank", + "ĠPr ayer", + "ĠPra yer", + "M IC", + "MI C", + "Ġresil ience", + "Te X", + "Ġ Languages", + "ĠL anguages", + "ĠLanguage s", + "st udy", + "stu dy", + "stud y", + "ĉ curr", + "ĉc urr", + "ĉcur r", + "Ġenzym es", + "Ġenzyme s", + "S lug", + "Sl ug", + "Ġ íĮĮ", + "ĠíĮ Į", + "st ral", + "str al", + "stra l", + "Ġtum ors", + "Ġtumor s", + "Ġseg unda", + "Ġsegu nda", + "= '{", + "=' {", + "in struction", + "instr uction", + "ĠL isp", + "ĠLi sp", + "ĠLis p", + "/ info", + "/in fo", + "Ġ\" {$", + "Ġ\"{ $", + ",: ),", + ",:) ,", + "Ġ gv", + "Ġg v", + "( ErrorMessage", + "(Error Message", + "Ġ '=", + "Ġ' =", + "} -${", + "}- ${", + ". Documents", + ".Document s", + ".Doc uments", + "\" Well", + "\"We ll", + "\"W ell", + "Ġreminis cent", + "Ġg az", + "Ġga z", + "ir opr", + "iro pr", + "e hr", + "eh r", + "Ġsup pressed", + "Ġsuppress ed", + "Ġsupp ressed", + "er sh", + "ers h", + ".scroll To", + "Ġ cadena", + "Ġc adena", + "Ġcad ena", + "Ġcade na", + "Ġgame State", + "ÃŃ m", + "( conv", + "(con v", + "(co nv", + "Ġ Tomorrow", + "ĠTom orrow", + "ĠC CT", + "ĠCC T", + "M ongo", + "Mon go", + "Mo ngo", + "u lg", + "ul g", + ". Camera", + ".C amera", + ". handlers", + ".handle rs", + ".handler s", + ".hand lers", + "m ph", + "mp h", + "Ġ stk", + "Ġs tk", + "Ġst k", + "Ġgen etics", + "Ġgene tics", + "Ġgenetic s", + "AC ING", + "Tr ivia", + "Tri via", + "ĠB am", + "ĠBa m", + "( marker", + "(m arker", + "(mark er", + ". Stretch", + ".St retch", + ".Str etch", + "ĠSun ni", + "ĠB etty", + "ĠBe tty", + "ĠBet ty", + "ĠBett y", + ". tolist", + ".t olist", + ".to list", + "un likely", + ". Rectangle", + ".Rect angle", + "ob solete", + "IL ON", + "inner Text", + "em bourg", + "emb ourg", + "a N", + "ĠV ehicles", + "ĠVehicle s", + "un lock", + ": utf", + "n ob", + "no b", + "Ġ Seeing", + "ĠSe eing", + "ĠSee ing", + "ĠN EVER", + "ĠNE VER", + "Ġ tls", + "Ġt ls", + "Ġtl s", + "Ġf illes", + "Ġfil les", + "Ġfill es", + "Ġfille s", + "Ġbenef ited", + "Ġbenefit ed", + "ĠC lint", + "ĠCl int", + "ĠClin t", + "ĠCli nt", + "*/ ),", + "*/) ,", + ". fold", + ".f old", + "Ġpos ible", + "Ġposi ble", + "A DED", + "AD ED", + "ADE D", + "t house", + "th ouse", + ". DAL", + ".D AL", + "Ġ Odd", + "ĠO dd", + "ĠOd d", + "r okes", + "ro kes", + "roke s", + "rok es", + "ĠS unny", + "ĠSun ny", + "ĠPartial Eq", + "_ Buffer", + "_B uffer", + "ĠL evi", + "ĠLe vi", + "ĠLev i", + "long rightarrow", + "el don", + "eld on", + "eldo n", + "g ages", + "ga ges", + "gage s", + "_ warn", + "_w arn", + "_war n", + ".Create Table", + "ĠD ip", + "ĠDi p", + "_ questions", + "_question s", + "_quest ions", + ". logic", + ".log ic", + "Ġ #\"", + "Ġ# \"", + "={ ()=>", + "={() =>", + "={( )=>", + "Ġ tep", + "Ġt ep", + "Ġte p", + "Ġju icy", + "ì Ĥ¬", + "ìĤ ¬", + "en ko", + "enk o", + "ial ect", + "ia lect", + "iale ct", + "Ù ī", + "Ġon board", + "Ġ æı", + "Ġæ ı", + "ĉ rt", + "ĉr t", + "_ UTF", + "_U TF", + "_UT F", + "ĠQ Action", + "ĠQA ction", + "âĢ ŀ", + "( Component", + "( audio", + "(a udio", + ". hit", + ".h it", + "g te", + "gt e", + "Ġprogram med", + "Ġprogramme d", + "Ġprogramm ed", + "state Params", + "Ġpoly ester", + "f ires", + "fi res", + "fire s", + "fir es", + "by ss", + "] =(", + "]= (", + "_ quality", + "_q uality", + "_qu ality", + "_qual ity", + "Of Day", + "ĠF airy", + "ĠFair y", + "ĠFa iry", + "Ġy elled", + "Ġyell ed", + "o pl", + "op l", + "( userName", + "(user Name", + "Ġ Difference", + "ĠD ifference", + "ĠDiff erence", + "Ġeval uations", + "Ġevaluation s", + "Ġevalu ations", + "iff any", + "Ġcycl ists", + "Ġcyc lists", + "Ġcyclist s", + "Ġ cidade", + "Ġc idade", + "Ġcid ade", + "Ġtext book", + "Ġprof iling", + "Ġprofil ing", + "_ _),", + "__ ),", + "__) ,", + "d ea", + "de a", + ". activate", + ".act ivate", + ".activ ate", + "Ġind ications", + "Ġindic ations", + "Ġindication s", + "Ð ķ", + "Touch UpInside", + "Ġinval uable", + "Ġ MASK", + "ĠM ASK", + "ĠMA SK", + "ĠMAS K", + "Ġcont end", + "Ġconten d", + "Ġconte nd", + "F req", + "Fr eq", + "Fre q", + "Ġrec ruits", + "Ġrecru its", + "Ġrecruit s", + "( interval", + "(int erval", + "(inter val", + "Ġ UserProfile", + "ĠUser Profile", + "Ġ'./ ../", + "Ġ'. /../", + "e du", + "ed u", + "_ Callback", + "_C allback", + "_Call back", + "Ġan alogy", + "Ġanal ogy", + "Ġanalog y", + "Ġana logy", + "ĠT rophy", + "ĠTr ophy", + "ĠTro phy", + "app hire", + "V ideos", + "Video s", + "ĠC her", + "ĠCh er", + "ĠChe r", + "ĠH av", + "ĠHa v", + "â̦ \"", + ". validator", + ".valid ator", + "g fx", + "gf x", + "ĠU Object", + "class names", + "classname s", + "t riangle", + "tr iangle", + "tri angle", + "Ġ Encoder", + "ĠE ncoder", + "ĠEn coder", + "ĠEnc oder", + "ĠEncode r", + ". spy", + ".s py", + ".sp y", + "Ġpred ators", + "Ġpredator s", + "= status", + "=s tatus", + "- safe", + "-s afe", + ": \",Ċ", + ":\" ,Ċ", + ":\", Ċ", + "Ġ Including", + "ĠIn cluding", + "Ġ{ };čĊ", + "Ġ{} ;čĊ", + "Ġ{}; čĊ", + "* cos", + "*c os", + "Ġend ured", + "Ġendure d", + ".sul ake", + "Ġnurs ery", + "Ġnurse ry", + "Ġfrag rance", + "Ġre building", + "Ġrebuild ing", + "Ġ nth", + "Ġn th", + "Ġnt h", + "ĠFr aser", + "ĠFra ser", + ".set Date", + "ĠV ince", + "ĠVi nce", + "ĠVin ce", + "_ REST", + "_RE ST", + "_R EST", + "_RES T", + "Ġvent ilation", + "Ġventil ation", + "æµ ·", + "cri bes", + "cribe s", + ". asm", + ".as m", + ".a sm", + "lp Vtbl", + "ĠA be", + "ĠAb e", + "u isine", + "uis ine", + ", array", + ",a rray", + ",arr ay", + "ĉ className", + "ĉclass Name", + "err als", + "erra ls", + "erral s", + "Ġ 'ĊĊ", + "Ġ' ĊĊ", + "Ġ'Ċ Ċ", + "Check out", + "Ġs olicit", + "Ġso licit", + "Ġsol icit", + "Ġsolic it", + "A ux", + "Au x", + "_ capture", + "_c apture", + "_cap ture", + "Ġr ibs", + "Ġrib s", + "Ġri bs", + "r agon", + "ra gon", + "rag on", + "v iol", + "vi ol", + "vio l", + "to pics", + "top ics", + "topic s", + "Function Flags", + "ĠM arty", + "ĠMar ty", + "ĠMart y", + "b ike", + "bi ke", + "ĠT ucker", + "ĠTu cker", + "( kernel", + "(k ernel", + "Ġ Ops", + "ĠO ps", + "ĠOp s", + "Close Operation", + "/ demo", + "/d emo", + "/de mo", + "i lda", + "il da", + "ild a", + "ĠlÃŃ nea", + "AP PING", + "APP ING", + "Ġsu ites", + "Ġsuit es", + "Ġsuite s", + "Ġsui tes", + ".visit VarInsn", + "u rus", + "ur us", + "uru s", + "Ġ Minute", + "ĠMin ute", + "( manager", + "(m anager", + "(man ager", + "Ġbutter fly", + "Ġa pare", + "Ġap are", + "Ġapar e", + "Ġapa re", + "Ġw olves", + "Ġwol ves", + "J WT", + "ĠS alon", + "ĠSal on", + "ĠSa lon", + "ĉ delay", + "ĉd elay", + "ĉde lay", + "ĉdel ay", + "- eslint", + "-es lint", + "is ations", + "isation s", + ". rpc", + ".r pc", + ") |(", + ")| (", + "ĠSnap chat", + "/ mm", + "/m m", + "M N", + "c eries", + "ce ries", + "cer ies", + ".t extAlignment", + ".text Alignment", + "ĠFrank furt", + "Ġ ado", + "Ġa do", + "Ġad o", + "( newValue", + "(new Value", + "( access", + "(a ccess", + "(ac cess", + "(acc ess", + "( Expression", + "Ġ SignIn", + "ĠSign In", + "ĠHa iti", + "ĠHait i", + "ĠHai ti", + "_ tp", + "_t p", + ". setParameter", + ".set Parameter", + "Min ute", + "Ġmanual s", + "ric anes", + "ricane s", + "rica nes", + "Ġ PTR", + "ĠP TR", + "ĠPT R", + "Ġ Outer", + "ĠO uter", + "ĠOut er", + "ĠOu ter", + "Ġ getline", + "Ġget line", + "oc ations", + "ocation s", + "_ CD", + "_C D", + "ĠL yon", + "ĠLy on", + "/ gui", + "/g ui", + "_ live", + "_l ive", + "_li ve", + "i dan", + "id an", + "ida n", + ". geom", + ".ge om", + ".geo m", + "Ġborder Bottom", + "im uth", + "imu th", + "_ checkpoint", + "_check point", + "Ġm eu", + "Ġme u", + "ĠIr ving", + "Ġpeu vent", + "( MAX", + "(M AX", + "Ġ ARCH", + "ĠAR CH", + "ĠARC H", + "Ġp ov", + "Ġpo v", + ".source forge", + "Ġjam ais", + "Ġ ark", + "Ġa rk", + "Ġar k", + "ĠBaghd ad", + "Ġ CLEAR", + "ĠC LEAR", + "ĠCL EAR", + "Menu Bar", + "Ġtr ois", + "Ġtro is", + "CHED ULE", + "Ġ #čĊ", + "Ġ# čĊ", + "( Call", + "(C all", + "$ order", + "( Material", + "(M aterial", + "(Mat erial", + "Ġencontr ado", + "$ list", + "$l ist", + "ĠMETHOD S", + ". beginTransaction", + ".begin Transaction", + "_M AG", + "_MA G", + "Style Sheet", + "Ġmajor s", + "Ġmaj ors", + "Ġindef initely", + "Ġindefinite ly", + "c leanup", + "clean up", + "Ġhome land", + "Ġhom eland", + "( dto", + "(d to", + "(dt o", + "D ates", + "Date s", + "Da tes", + "Dat es", + "P resentation", + "Present ation", + "Ġ DK", + "ĠD K", + "={` /", + "ĉ Key", + "ĉK ey", + "( Block", + "(B lock", + "_ checkbox", + "_check box", + "ne eds", + "need s", + "nee ds", + "Ġon Complete", + "r ico", + "ri co", + "ric o", + "Ġg leich", + "Ġgle ich", + "Ġ xm", + "Ġx m", + "O OD", + "OO D", + "B etter", + "Bet ter", + "ĠSQL ITE", + ". Book", + ".B ook", + "x ad", + "xa d", + "ĠG one", + "ĠGo ne", + "ĠGon e", + "ĉ dp", + "ĉd p", + "Ġdev otion", + "Ġ stm", + "Ġs tm", + "Ġst m", + "Ġob sess", + "Ġobs ess", + "Ġ Backend", + "ĠBack end", + "Qu eries", + "Que ries", + "I k", + "/ /****************************************************************", + "// ****************************************************************", + "Ġdivide nds", + "Ġdivid ends", + "Ġdividend s", + ".parent Element", + "} \")ĊĊ", + "}\" )ĊĊ", + "}\")Ċ Ċ", + "}\") ĊĊ", + "ĠMaterial PageRoute", + ": num", + ":n um", + "Ġexp lic", + "Ġexpl ic", + "Ġ OL", + "ĠO L", + "l east", + "le ast", + "lea st", + "O ops", + "iment os", + "imento s", + "imen tos", + "Ġins urers", + "Ġinsure rs", + "Ġinsurer s", + "Ġhero ic", + "ĉ fields", + "ĉf ields", + "ĉfield s", + ".img ur", + ".btn Cancel", + "ĠDet ective", + "ĠDetect ive", + "( sm", + "(s m", + "ĠMutable LiveData", + ". lab", + ".l ab", + "( ([", + "(( [", + "Ġha irst", + "Ġhair st", + "Ġhai rst", + "Ġhairs t", + "Ġ Transactions", + "ĠTrans actions", + "ĠTransaction s", + "å¼Ģ å§ĭ", + "Ġ stdClass", + "Ġstd Class", + "u ento", + "uen to", + "uent o", + "G IS", + "GI S", + "_ cod", + "_c od", + "_co d", + "In structions", + "Instruction s", + "Instr uctions", + "C alls", + "Call s", + "Cal ls", + "Pointer Type", + "ĠR w", + "Ġassort ment", + "Ġ DIG", + "ĠD IG", + "ĠDI G", + "+ r", + "_ CERT", + "_C ERT", + "_CE RT", + "Ġinst ability", + "Ġv ib", + "Ġvi b", + "o nas", + "on as", + "ona s", + "Ġr oku", + "Ġro ku", + "Ġrok u", + "ap ellido", + "Ġ angl", + "Ġan gl", + "Ġang l", + "prene ur", + "Ġfl uids", + "Ġfluid s", + "Ġflu ids", + "is ease", + "ise ase", + "Ġd eed", + "Ġde ed", + "Ġdee d", + "qu ist", + "quis t", + "qui st", + "_CONST ANT", + "Ġequ ilibrium", + "_ delegate", + "_de legate", + "ĠQuant um", + "r ei", + "re i", + "Cap abilities", + "rect angle", + "? ><", + "?> <", + "a lien", + "al ien", + "ali en", + "alie n", + "ĠJ ug", + "ĠJu g", + "D NA", + "DN A", + "T ickets", + "Tick ets", + "Ticket s", + "Occ urs", + "ĠH awk", + "ĠHaw k", + "ĠHa wk", + ".setHorizontal Group", + "\\ Collection", + "\\C ollection", + "ff iti", + "ffi ti", + "Ġre arr", + "Ġrear r", + ".setVertical Group", + "Ġc avity", + "Ġcav ity", + "Ġadult e", + "Ġadul te", + "Fac ade", + "Fa cade", + "- wh", + "-w h", + "ĠL OL", + "ĠLO L", + "Ø °", + "Ġgrand parents", + "Sw ift", + "ĉ wx", + "ĉw x", + "æīĢ æľī", + "i fen", + "if en", + "ife n", + "ff set", + "B eyond", + "// }ĊĊ", + "//}Ċ Ċ", + "Ġw ager", + "Ġwa ger", + "Ġwage r", + "Ġwag er", + "Ġ bury", + "Ġb ury", + "Ġbu ry", + "Ġbur y", + "Ġcomm ence", + "Ġcomme nce", + "Ġcommenc e", + "reg istro", + "registr o", + "regist ro", + "s cient", + "sc ient", + "sci ent", + "Ġ Percent", + "ĠPer cent", + "ĠPerc ent", + "Ġд олж", + "Ġдол ж", + "( identifier", + "(id entifier", + "(ident ifier", + ".set Model", + "Ġs eldom", + "Ġsel dom", + "n ton", + "nt on", + "Ġap pliance", + "Ġappl iance", + "a mus", + "am us", + "amu s", + "rys ler", + "Ġpan ties", + "Ġpant ies", + "engu ins", + "enguin s", + "Ġmi mic", + "Ġmim ic", + "Ġon Changed", + "ĠonChange d", + "Ġal coholic", + "Ġalcohol ic", + ".reload Data", + "Ch arge", + "Char ge", + "Ġ Fax", + "ĠF ax", + "ĠFa x", + "Ġj ScrollPane", + "Emp resa", + "Ġsh attered", + "x ba", + "xb a", + "Font s", + "Fo nts", + "? s", + "Ġpost season", + "re tain", + "ret ain", + "reta in", + "_ rates", + "_r ates", + "_rate s", + "_ra tes", + "_rat es", + "Ġ requestCode", + "Ġrequest Code", + ". todo", + ".t odo", + ".to do", + "´ s", + "C HK", + "CH K", + "Ġ Keeping", + "ĠKe eping", + "ĠKeep ing", + "ĠKee ping", + "enge ance", + "Ġvs code", + "IP PING", + "IPP ING", + "Default CloseOperation", + "_ raise", + "_r aise", + "_ra ise", + "ĠO culus", + "ĠOc ulus", + "o grams", + "og rams", + "ogram s", + "ogr ams", + "ogra ms", + "r aj", + "ra j", + "p ci", + "pc i", + "Ġcorros ion", + ". handleSubmit", + ".handle Submit", + "Access ible", + "ĠP iano", + "ĠPi ano", + "l ittle", + "lit tle", + "A CL", + "AC L", + "Äĩ e", + ". unwrap", + ".un wrap", + "ĠCon vers", + "ĠConv ers", + "ĠLe ben", + "ion eer", + "ione er", + "Ġ Merchant", + "ĠM erchant", + "ĠMer chant", + "ĠMerch ant", + "ĠJ orge", + "Ġembr acing", + "Ġ venta", + "Ġv enta", + "Ġvent a", + "Ġven ta", + "á st", + "ás t", + "Ġv iene", + "Ġvi ene", + "Ġvie ne", + "< QString", + "Ċ", + "-g rowing", + "-gr owing", + "-grow ing", + "Ġdeep copy", + "A ck", + "Ac k", + "eg gies", + "egg ies", + "Ġ __(\"", + "Ġ_ _(\"", + "Ġ__ (\"", + "Ġ__( \"", + "Ġn oir", + "Ġno ir", + "Ġnoi r", + "terror ism", + "Ġan them", + "Ġant hem", + "Ġanth em", + "a gency", + "ag ency", + "age ncy", + "agen cy", + "_ PACKAGE", + "_PACK AGE", + "Ġ Closure", + "ĠC losure", + "ĠClo sure", + ". registry", + ".reg istry", + "Ġmamm als", + "Ġmamma ls", + "< L", + "U ICollectionView", + "UI CollectionView", + "ĠLE Ds", + "ĠLED s", + "Ġv olley", + "Ġvol ley", + "Ġvoll ey", + "( Buffer", + "(B uffer", + "_N ATIVE", + "li bc", + "lib c", + "im plode", + "impl ode", + "Scroll Bar", + "ĠMar ion", + "ĠMario n", + "ĠMari on", + ". Contracts", + ".Con tracts", + ".Contract s", + "_ At", + "_A t", + "ĠWe instein", + "ĠWein stein", + "compare To", + "ĠH ose", + "ĠHo se", + "ĠHos e", + "en ity", + "eni ty", + ". createQuery", + ".create Query", + "_ router", + "_r outer", + "_ro uter", + "_route r", + "Ġstim uli", + "Ġ ++)", + "Ġ+ +)", + "Ġ++ )", + "ĠCh amp", + "ĠCha mp", + "ĠCham p", + "ĠBay ern", + "ĠBayer n", + "a ssa", + "as sa", + "ass a", + ". va", + ".v a", + "Ġdistrib utors", + "Ġdistributor s", + "Ġfile private", + "Ġdepart ed", + "c ccc", + "cc cc", + "ccc c", + "@ click", + "@c lick", + "ĠL unch", + "ĠLun ch", + "> L", + "Ġb luetooth", + "Ġbl uetooth", + ". Deep", + ".De ep", + "- standing", + "-st anding", + "á cil", + "ác il", + "áci l", + "Ġro oft", + "Ġroof t", + "Ġ Paths", + "ĠP aths", + "ĠPat hs", + "ĠPath s", + "ĠPa ths", + "_ iterations", + "_iter ations", + "_iteration s", + "Invalid ArgumentException", + ". spi", + ".s pi", + ".sp i", + "Ġ UIAlertAction", + "ĠUIAlert Action", + "u ye", + "uy e", + "sign in", + "sig nin", + ". priority", + ".p riority", + "ĠEs says", + "ĠEss ays", + "ĠEssay s", + "=' {$", + "='{ $", + "Ġ è¿ĶåĽŀ", + "Ġè¿ ĶåĽŀ", + "_ signed", + "_s igned", + "_sign ed", + "_sig ned", + ". persist", + ".p ersist", + "Ġre design", + "Ġred esign", + "Ġrede sign", + "Ġredes ign", + "To Lower", + "ĠNew man", + "= start", + "ĠIsrael is", + "ĠIsraeli s", + "as iswa", + "asis wa", + "S peech", + "Spe ech", + "Ġnum eros", + "Ġnumer os", + "Ġnumero s", + "handle rs", + "hand lers", + "handler s", + "ĠW ong", + "ĠWo ng", + "ĠWon g", + "Ġм еÑĤод", + "ĠмеÑĤ од", + "We ights", + "Weight s", + "ĠGu jar", + "t eil", + "te il", + "ĠNone theless", + "ĠNon etheless", + "_E FFECT", + "Ġ vect", + "Ġv ect", + "Ġve ct", + "Ġvec t", + "ĠO sc", + "ĠOs c", + "Ġco ats", + "Ġcoat s", + "ĠW heat", + "ĠWh eat", + "ĠWhe at", + "Ġge ek", + "Ġgee k", + "Ġ PROPERTY", + "ĠP ROPERTY", + "ĠPRO PERTY", + "w orm", + "wo rm", + "wor m", + "_ constants", + "_con stants", + "_const ants", + "_constant s", + "ĠB oulder", + "ĠBou lder", + "Ġ Parm", + "ĠP arm", + "ĠPar m", + "ĠPa rm", + "c ole", + "co le", + "col e", + "Ġdefault Center", + "ĠRo uge", + "ĠRou ge", + ": A", + "x cf", + "xc f", + "ĠVen ice", + "ĠVe nice", + "m edian", + "med ian", + "medi an", + "media n", + "Ġred emption", + "F resh", + "Fr esh", + "Fre sh", + "Ġco sm", + "Ġcos m", + "Ġ figur", + "Ġfig ur", + "Ġref urb", + "CO PE", + ". cd", + ".c d", + "Ġch ords", + "Ġchord s", + "Ġchor ds", + "ĠS gt", + "Å į", + "V PN", + "VP N", + "Ġ SEND", + "ĠS END", + "ĠSE ND", + "ĠSEN D", + "a inen", + "ain en", + "ai nen", + "aine n", + "_ accounts", + "_account s", + "_ac counts", + "Ġt enth", + "Ġte nth", + "Ġten th", + "Ġtent h", + "Ġdiss olved", + "Ġdissolve d", + "< App", + "", + "Ġ' >", + "Ġlegitim acy", + "Ġ oo", + "Ġo o", + "S linky", + "Sl inky", + "Ġnational s", + "Ġnation als", + ". words", + ".w ords", + ".word s", + "; p", + "t rap", + "tr ap", + "tra p", + "oman ip", + "oma nip", + "Ġc ues", + "Ġcu es", + "Ġcue s", + "Ġgrad uating", + "Ġgradu ating", + "Ġsem aphore", + "\" ]);ĊĊ", + "\"] );ĊĊ", + "\"]) ;ĊĊ", + "\"]);Ċ Ċ", + "\"]); ĊĊ", + "ace y", + "ac ey", + "RE ET", + "REE T", + "G rab", + "Gr ab", + "ĠF elix", + "ĠFe lix", + "ĠFel ix", + "( Id", + "(I d", + "_ neighbors", + "_ne ighbors", + "_neighbor s", + "Ġmeaning less", + "( del", + "(d el", + "(de l", + "Ġj eder", + "Ġje der", + "Ġjed er", + "Ġjede r", + "ĠContent Values", + ". absolute", + ".a bsolute", + ".abs olute", + "/ cl", + "/c l", + "Ġ xb", + "Ġx b", + "d atum", + "dat um", + "Ġtort ured", + "Ġtorture d", + "Ġrub bing", + "Ġru bbing", + "S cores", + "Sc ores", + "Score s", + "ĠðŁĺ ī", + "Ġav ons", + "Ġam sterdam", + "E OS", + "EO S", + "H al", + "Ha l", + "Ġtrust worthy", + "# =", + ".EX TRA", + "Ġm ano", + "Ġman o", + "Ġma no", + "is icing", + "isi cing", + "- support", + "-s upport", + "-sup port", + "ĉ cursor", + "ĉc ursor", + "Ġ Spo", + "ĠS po", + "ĠSp o", + "ai massage", + "aim assage", + "M ission", + "Miss ion", + "[] {\"", + "[]{ \"", + "Ġpr inters", + "Ġprint ers", + "Ġprinter s", + "Ġprin ters", + "G REEN", + "GRE EN", + "GREE N", + "Ġ teg", + "Ġt eg", + "Ġte g", + "Ġabdom inal", + "! ĊĊĊĊĊĊ", + "!ĊĊ ĊĊĊĊ", + "!Ċ ĊĊĊĊĊ", + "!ĊĊĊĊ ĊĊ", + "!ĊĊĊ ĊĊĊ", + ". Short", + ".S hort", + ".Sh ort", + "а зв", + "аз в", + "ĠGi fts", + "ĠGift s", + "} \")", + "}\" )", + "( binding", + "(b inding", + "(bin ding", + "(bind ing", + "x ce", + "xc e", + "âĢ ij", + "in fos", + "info s", + "inf os", + "Form Data", + "Ġ dart", + "Ġd art", + "Ġda rt", + "Ġdar t", + "Ġ elems", + "Ġe lems", + "Ġel ems", + "Ġele ms", + "Ġelem s", + "( inv", + "(i nv", + "(in v", + "Y L", + "t in", + "ti n", + "G ENER", + "GE NER", + "GEN ER", + "á» ¯", + "Ġ Taken", + "ĠT aken", + "ĠTake n", + "ĠTa ken", + "ĠTak en", + "uc kle", + "uck le", + ": e", + "Ġs pectral", + "Ġspect ral", + "Ġspectra l", + ".b aidu", + "/ ');Ċ", + "/' );Ċ", + "/') ;Ċ", + "Ġgre edy", + "Ġgreed y", + "es ion", + "esi on", + ",,,, ,,,,", + "Ġ/ >,Ċ", + "Ġ/> ,Ċ", + "Ġ/>, Ċ", + "Internal ServerError", + "NS NotificationCenter", + "NSNotification Center", + "Ġ Ai", + "ĠA i", + "Ġs pit", + "Ġsp it", + "Ġspi t", + "Ġaug mented", + "Ġaugment ed", + "Ġstandard UserDefaults", + "FIN ITY", + "R ace", + "Ra ce", + ": C", + "ĠRE CORD", + "ĠREC ORD", + "Ġ Highlight", + "ĠHigh light", + "Ġ' `", + "Ġdef icits", + "Ġdeficit s", + "Ġn ei", + "Ġne i", + "Ġresearch ed", + "T a", + "Ġc opp", + "Ġco pp", + "Ġcop p", + ".Get HashCode", + ") :čĊčĊ", + "): čĊčĊ", + "):čĊ čĊ", + "On Click", + "ĠWell ington", + "ĠWel lington", + "Ġrev ival", + "æ¯ Ķ", + "éĹ ®", + "Ġ NSS", + "ĠN SS", + "ĠNS S", + "Ġf orn", + "Ġfor n", + "Ġfo rn", + "Ġin té", + "Ġint é", + "ĠKu wait", + "_ flip", + "_f lip", + "_fl ip", + "_ bo", + "_b o", + "_ \\", + "Ġocc urrences", + "Ġoccurrence s", + "Ġ Scientists", + "ĠScient ists", + "ĠScientist s", + "S RC", + "SR C", + "o gens", + "og ens", + "ogen s", + "oge ns", + "i grant", + "ig rant", + "igr ant", + "RE MOTE", + "REM OTE", + "Ġ SID", + "ĠS ID", + "ĠSI D", + ". opts", + ".op ts", + ".o pts", + ".opt s", + "u ve", + "uv e", + "( )])Ċ", + "() ])Ċ", + "()] )Ċ", + "Ġlibert arian", + "ĠG lide", + "ĠGl ide", + "l esen", + "le sen", + "les en", + "Ġ forme", + "Ġfor me", + "Ġform e", + "ow ania", + "owa nia", + "owan ia", + "Ġannoy ed", + "D efs", + "De fs", + "Def s", + "Ġ Executor", + "ĠExec utor", + "Ġ casts", + "Ġc asts", + "Ġca sts", + "Ġcas ts", + "Ġcast s", + ". setChecked", + ".set Checked", + "Ġ Sharing", + "ĠSh aring", + "ĠSha ring", + "ĠShar ing", + ".Serialize Object", + "Ġ selectors", + "Ġselect ors", + "Ġselector s", + "Ġsel ectors", + "Ġsele ctors", + "_ OTHER", + "_OT HER", + "ë ¯¸", + "ë¯ ¸", + "( super", + "(s uper", + "( OS", + "(O S", + "_ VERIFY", + "_VER IFY", + "id unt", + "< header", + "';Ċ", + "Ġ/> ';Ċ", + "Ġ/>' ;Ċ", + "Ġvid éo", + "Ġvidé o", + "ĠNe gro", + "ĠNeg ro", + "ĠL ords", + "ĠLord s", + "ĠLor ds", + "ĠT ours", + "ĠTo urs", + "ĠTour s", + "ĠTou rs", + "Ġsoft ly", + ". receive", + ".re ceive", + "Ġ ERC", + "ĠE RC", + "ĠER C", + "Ġdata Set", + "B adge", + "Bad ge", + "Ba dge", + "ĉ Event", + "ĉE vent", + "Ġ perl", + "Ġper l", + "Ġpe rl", + "Ġ {}\\", + "Ġ{ }\\", + "Ġ{} \\", + "( sentence", + "(s entence", + "(sent ence", + "Or Update", + "Ġdim inish", + "Ġdimin ish", + "P IN", + "PI N", + "( draw", + "(d raw", + "(dr aw", + ".To DateTime", + ". EqualTo", + ".Equal To", + "( pin", + "(p in", + "(pi n", + "-p encil", + "l uent", + "lu ent", + "lue nt", + "Ġ Caller", + "ĠC aller", + "ĠCal ler", + "ĠCall er", + "ĠCa ller", + "Ġplay ful", + "- '+", + "-' +", + "x ca", + "xc a", + "s wick", + "sw ick", + ") {}Ċ", + "){ }Ċ", + "} :${", + "}: ${", + "ĠM eth", + "ĠMe th", + "ĠMet h", + ". getCell", + ".get Cell", + ".getC ell", + ". break", + ".b reak", + "Ġ ymax", + "Ġy max", + "=' Ċ", + "}`} >Ċ", + "ĠH iro", + "ĠHi ro", + "ĠHir o", + "( TRUE", + "(TR UE", + "as urer", + "asure r", + "asu rer", + "Ġc uer", + "Ġcu er", + "Ġcue r", + "U ber", + "Ub er", + ". Operation", + ".O peration", + ".Op eration", + "Ġ olan", + "Ġo lan", + "Ġol an", + "Ġola n", + "Ġthr illing", + "Ġthrill ing", + "< Response", + "ĠF emin", + "ĠFe min", + "ĠFem in", + "Ġtr aversal", + "Ġtravers al", + "Ġp oc", + "Ġpo c", + "Ġ setStatus", + "Ġset Status", + "de clar", + "dec lar", + "decl ar", + "std afx", + "Ġaddict ive", + "Ġ Btn", + "ĠB tn", + "Ġexplos ives", + "Ġexplosive s", + "ĠCo oking", + "ĠCook ing", + "ĠPl aint", + "ĠPlain t", + "ĠPla int", + "Ġ accumulator", + "Ġaccum ulator", + "Ġ Appointment", + "ĠApp ointment", + ", password", + ",p assword", + "ĠF AR", + "ĠFA R", + "l uet", + "lu et", + "lue t", + "Further more", + "decl spec", + "_ Statics", + "_Static s", + "_St atics", + ". Dictionary", + ".D ictionary", + "\" >'.", + "\"> '.", + "\">' .", + "ĉ valid", + "ĉval id", + "ĉva lid", + "\" \",", + "\"\" ,", + "In strument", + "Instr ument", + "> J", + "Ġno str", + "Ġnos tr", + "Ġnost r", + "ĠR ift", + "ĠRi ft", + "ĠRif t", + "_ Port", + "_P ort", + "Ġve ces", + "Ġvec es", + "[ ['", + "[[ '", + "Ġrall ies", + "- series", + "-s eries", + "-se ries", + "-ser ies", + "Ġ vv", + "Ġv v", + ". uc", + ".u c", + "Ġr tn", + "Ġrt n", + "State Changed", + "( ins", + "(i ns", + "(in s", + "Ġ Cla", + "ĠC la", + "ĠCl a", + "- -----------Ċ", + "-- ----------Ċ", + "---- --------Ċ", + "-------- ----Ċ", + "--- ---------Ċ", + "------------ Ċ", + "----- -------Ċ", + "---------- --Ċ", + "------ ------Ċ", + "----------- -Ċ", + "------- -----Ċ", + "--------- ---Ċ", + "c us", + "cu s", + "Ġ Reload", + "ĠR eload", + "ĠRe load", + "ĠRel oad", + "// ------------------------------------------------------------------------------------------------", + "//---------------------------------------------------------------- --------------------------------", + "//---------------------------------------------------------------------------- --------------------", + "//------------------------------------------------ ------------------------------------------------", + "//-------------------------------- ----------------------------------------------------------------", + "//-------------------------------------------------------------------------------- ----------------", + "//---------------- --------------------------------------------------------------------------------", + ". seconds", + ".se conds", + ".second s", + ".sec onds", + "_ destination", + "_d estination", + "_dest ination", + "Ġscre wed", + "Ġscr ewed", + "Ġscrew ed", + "> c", + "Th ickness", + "Des igner", + "Design er", + "Ġgr ids", + "Ġgrid s", + "Ġgri ds", + "n Äħ", + "( cookie", + "(c ookie", + "(co okie", + "T rip", + "Tr ip", + "Tri p", + "- Mobile", + "-M obile", + "Ġv oll", + "Ġvo ll", + "Ġvol l", + "Ġgen ital", + "Ġconf isc", + "ĠConfeder ate", + "Ġ webView", + "Ġweb View", + "Ġ mise", + "Ġm ise", + "Ġmis e", + "Ġmi se", + "Ġc ler", + "Ġcl er", + "Ġcle r", + "( selection", + "(s election", + "(se lection", + "(select ion", + "(sel ection", + "$ date", + "$d ate", + "Ġsharp en", + "Ġshar pen", + "r agen", + "ra gen", + "rag en", + "rage n", + "And Update", + "Ġre mix", + "Ġrem ix", + "Ġh tons", + "Ġht ons", + "Ġhton s", + "R W", + "M PI", + "MP I", + "Ġretrie val", + "Ġretr ieval", + "Ġrich est", + "Ġri chest", + "Ġric hest", + "Ġriches t", + ". Decode", + ".De code", + ".Dec ode", + ":init Components", + "ĠT Value", + "ĠTV alue", + "S aint", + "Sa int", + "@ include", + "Ġ PERSON", + "ĠPER SON", + ". sep", + ".s ep", + ".se p", + "Ġ LDAP", + "ĠLD AP", + "g ba", + "gb a", + "Ġgro ÃŁe", + "ĠgroÃŁ e", + "Ġreli ably", + "Ġ DFS", + "ĠD FS", + "ĠDF S", + ".get ItemId", + ".getItem Id", + "Ġpré sent", + "Ġprés ent", + ". getToken", + ".get Token", + "Ġch inese", + "Ġchin ese", + "Ġ Meal", + "ĠMe al", + "Y OU", + "YO U", + "\" > >ĊĊ", + "Ġ> >ĊĊ", + "Ġ>> ĊĊ", + "b ower", + "bo wer", + "bow er", + "Ġsw apped", + "Ġswap ped", + "/ install", + "Ġs inks", + "Ġsin ks", + "Ġsink s", + "etr ize", + "etri ze", + "Ġdec lines", + "Ġdecl ines", + "Ġdecline s", + "ĉ mysql", + "ĉm ysql", + "ĉmy sql", + "Ġ CString", + "ĠC String", + "ĠCS tring", + "ĠM otionEvent", + "ĠMotion Event", + ". Language", + ".L anguage", + "R oad", + "Ro ad", + "ÑĤ еÑĢ", + "ÑĤе ÑĢ", + "asc imento", + "' ))->", + "') )->", + "')) ->", + ". about", + ".a bout", + ".ab out", + "( editor", + "(e ditor", + "(ed itor", + "(edit or", + "ĠR atings", + "ĠRa tings", + "ĠRating s", + "ĠRat ings", + "in come", + "inc ome", + "Å¡ e", + ".de queueReusableCell", + "ĠAust rian", + "ĠAustria n", + "ĠAustr ian", + "Ġs ulla", + "Ġsu lla", + "Ġsul la", + "ĠTrib unal", + "Ġ Didn", + "ĠDi dn", + "ĠDid n", + "о ваÑĢ", + "ов аÑĢ", + "ова ÑĢ", + "Ġins pections", + "Ġinspect ions", + "Ġinspection s", + "Ġinsp ections", + "B oss", + "Bo ss", + "Ġcock tails", + "Ġcocktail s", + "Ġapolog ized", + "Ġapologize d", + "_ subplot", + "_sub plot", + "o pal", + "op al", + "opa l", + "+ =(", + "+= (", + "Ġreson ance", + "i bu", + "ib u", + "Ġ 리", + "Ġë ¦¬", + "Ġë¦ ¬", + "r oma", + "ro ma", + "rom a", + "re serve", + "res erve", + "rese rve", + "p ls", + "pl s", + "ĠT ah", + "ĠTa h", + "a xies", + "ax ies", + "O PLE", + "OP LE", + "ĠDar ren", + "ĠZ ombie", + "_ Map", + "_M ap", + "Ġ ])ĊĊ", + "Ġ] )ĊĊ", + "Ġ])Ċ Ċ", + "Ġ]) ĊĊ", + "Ġ Qi", + "ĠQ i", + "ĠS ail", + "ĠSa il", + "ĠSai l", + "Ġrestrict ive", + "Ġeros ion", + "- par", + "-p ar", + "W HITE", + "WH ITE", + "Ġold u", + "Ġol du", + "Ġap erture", + "Ġbit coins", + "Ġbitcoin s", + "text o", + "tex to", + "ĠCom cast", + "Ġtime less", + "Ġtim eless", + "en kins", + "enk ins", + "Ġfe eder", + "Ġfeed er", + "Ġfee der", + "/ tmp", + "/t mp", + "res den", + "+ '_", + "+' _", + ". Destroy", + ".D estroy", + ".De stroy", + "Ġ çok", + "Ġç ok", + "Ġ DOCUMENT", + "ĠD OCUMENT", + "ĠDOC UMENT", + ". lng", + ".l ng", + ". tagName", + ".tag Name", + "Ġk ullan", + "Ġkul lan", + "eg rate", + "egr ate", + "egra te", + "Ġ( *.", + "Ġ(* .", + "ç¼ĸ è¾ij", + "Ġhand shake", + "s oc", + "so c", + "_ geometry", + "_ge ometry", + "_geo metry", + "_geom etry", + "ĠDam ascus", + "Min or", + "Mi nor", + "ĠK afka", + "ĠKaf ka", + "ìĹ ¬", + "Fl orida", + "_ compute", + "_com pute", + "_comp ute", + ". expr", + ".ex pr", + ".exp r", + "Ġ paralle", + "Ġpar alle", + "Ġpara lle", + "ĠD iaz", + "ĠDi az", + "ĠDia z", + "c ir", + "ci r", + "[ target", + "[t arget", + "Ġj oking", + "Ġjo king", + "Ġg lor", + "Ġgl or", + "Ġglo r", + "( setq", + "(set q", + "_ handlers", + "_handler s", + "_handle rs", + "_hand lers", + "H ang", + "Ha ng", + "Han g", + "Ġf err", + "Ġfe rr", + "Ġfer r", + "r iminal", + "rim inal", + "ĉ ĠĠĠĠĉĉ", + "ĉĠĠĠ Ġĉĉ", + "ĉĠ ĠĠĠĉĉ", + "ĉĠĠ ĠĠĉĉ", + "ĉĠĠĠĠ ĉĉ", + "ĉĠĠĠĠĉ ĉ", + "en ties", + "ent ies", + "enti es", + "def ines", + "define s", + "- tax", + "-t ax", + "json p", + "Ġ UPS", + "ĠU PS", + "ĠUP S", + "m etro", + "me tro", + "met ro", + "_ _;Ċ", + "__ ;Ċ", + "__; Ċ", + "ĠUg anda", + "] )):Ċ", + "]) ):Ċ", + "])) :Ċ", + "_ td", + "_t d", + "x ae", + "xa e", + "l w", + ". OS", + ".O S", + "Ġ Logged", + "ĠLog ged", + "a cid", + "ac id", + "aci d", + "ĠM ayo", + "ĠMay o", + "ĠMa yo", + "a spect", + "as pect", + "asp ect", + "Ġvag inal", + "Ġvagina l", + "Ġinitial izing", + "Ġste roids", + "Ġster oids", + "Ġsteroid s", + "f iction", + "fi ction", + "fic tion", + "G RE", + "GR E", + "g end", + "ge nd", + "gen d", + "Ġli abilities", + "Ġ Lets", + "ĠL ets", + "ĠLe ts", + "ĠLet s", + "M ech", + "Me ch", + "( nc", + "(n c", + "( change", + "(ch ange", + "(chan ge", + "Ġconn ectors", + "Ġconnect ors", + "Ġconnector s", + ": k", + "Ġt ast", + "Ġta st", + "Ġtas t", + "! \");ĊĊ", + "!\" );ĊĊ", + "!\");Ċ Ċ", + "!\"); ĊĊ", + "!\") ;ĊĊ", + "th ings", + "thing s", + "thin gs", + "r ophy", + "ro phy", + "rop hy", + "roph y", + "l uetooth", + "lu etooth", + "luet ooth", + "Ġ SignUp", + "ĠSign Up", + ". ctrl", + ".c trl", + ".ct rl", + "Ġthere in", + "Ġther ein", + "or da", + "ord a", + ". escape", + ".e scape", + ".es cape", + "ig ator", + "iga tor", + "Ġpet rol", + "Ġspec imen", + "Ġspeci men", + "Ġdeb uted", + "Ġdebut ed", + "- Pro", + "-P ro", + "Ġcr ises", + "Ġcri ses", + "Ġcris es", + ".add View", + "ëı Ļ", + "- door", + "-d oor", + "-do or", + "Ġm onet", + "Ġmon et", + "Ġmo net", + "Ġm illis", + "Ġmill is", + "Ġmil lis", + "Ġmilli s", + "Ġ vier", + "Ġv ier", + "Ġvi er", + "Ġvie r", + "Internal Enumerator", + "Ġ admins", + "Ġad mins", + "Ġadmin s", + "Ġadm ins", + "ĠL air", + "ĠLa ir", + "z in", + "zi n", + "get Query", + "um bles", + "umb les", + "umble s", + "L IMIT", + "LI MIT", + "ĠV ig", + "ĠVi g", + "_ song", + "_s ong", + "_so ng", + "< Character", + ": :.", + ":: .", + "_ hom", + "_h om", + "_ bp", + "_b p", + "ĠSup ervisor", + "ĠSuper visor", + "ĠSuperv isor", + "sub mission", + "ab ile", + "abil e", + "abi le", + "Ġn oi", + "Ġno i", + "Or Create", + "Ġp eel", + "Ġpe el", + "Ġpee l", + "Ġon Start", + "Ġsent iments", + "Ġsentiment s", + "v ehicles", + "veh icles", + "vehicle s", + "Ġclass rooms", + "Ġclassroom s", + "Ġs zer", + "Ġsz er", + "Ġb ending", + "Ġben ding", + "Ġbend ing", + "Ġlong evity", + "Ġ acl", + "Ġa cl", + "Ġac l", + "ĠAle ppo", + "Ġ UM", + "ĠU M", + "ĠR icht", + "ĠRich t", + "ĠRic ht", + "ĠRi cht", + "Ġmulti processing", + "Ġmultip rocessing", + "DO MAIN", + "DOM AIN", + "\", \"+", + "\",\" +", + "_ YEAR", + "_Y EAR", + "Ġsc rape", + "Ġscr ape", + "Ġscrap e", + "Ġsol itary", + "Ġ\" ]\";Ċ", + "Ġ\"] \";Ċ", + "Ġ\"]\" ;Ċ", + "/ errors", + "/error s", + "ìŀ ¬", + "ľ ëł¥", + "b etter", + "bet ter", + "bett er", + "bette r", + "ĉ number", + "ĉn umber", + "ĉnum ber", + "Ġ LF", + "ĠL F", + "Ġ Across", + "ĠA cross", + "ĠAc ross", + "Pub Med", + "\\ \"\"", + "\\\" \"", + "ĠExcell ence", + "Ġus ando", + "Ġusa ndo", + "ĠU IP", + "ĠUI P", + "Activity Indicator", + "_ VOID", + "_V OID", + "_VO ID", + "Ġbre eds", + "Ġbreed s", + "Ġbree ds", + "ï½ ¥", + "ues tas", + "uest as", + "uesta s", + "ĠTre asure", + "ustr alian", + "ustral ian", + "ustralia n", + "( face", + "(f ace", + "ĠT ennis", + "ĠTen nis", + "ĠTenn is", + "ĉ Int", + "ĉI nt", + "ĉIn t", + "ĠH ansen", + "ĠHan sen", + "ĠHans en", + "ç µ", + ": I", + "Ġ âľĶ", + "Ġâľ Ķ", + "G RAY", + "GR AY", + "GRA Y", + "O USE", + "OU SE", + "OUS E", + "Ġhe pat", + "Ġhep at", + "ł í", + "A IR", + "AI R", + "ó ż", + "Ġ queued", + "Ġque ued", + "Ġqueue d", + "vin cia", + "vi ncia", + "vinc ia", + "ĠCh romium", + "ĠChrom ium", + "Ġcompet ence", + "Ġcompete nce", + "un gal", + "ung al", + "unga l", + "i lli", + "il li", + "ill i", + "Ġget By", + "Ġ Finder", + "ĠF inder", + "ĠFin der", + "ĠFind er", + "ĠFi nder", + "Ġincap able", + "Ġs add", + "Ġsa dd", + "Ġsad d", + "Ġc ites", + "Ġcit es", + "Ġci tes", + "Ġcite s", + "ĠChurch ill", + "S dk", + "More over", + "A spNet", + "As pNet", + "( Float", + "(F loat", + "$ password", + "$p assword", + "Ġ Connor", + "ĠCon nor", + "ĠConn or", + "- session", + "-s ession", + "_ dm", + "_d m", + "* ))", + "*) )", + "Ġde utsch", + "Ġdeut sch", + "Ġ NX", + "ĠN X", + "Ġper ks", + "Ġperk s", + "_ SORT", + "_S ORT", + "_SO RT", + "_TO OL", + "_TOO L", + "_ VISIBLE", + "_V ISIBLE", + "_VIS IBLE", + ". asp", + ".as p", + ".a sp", + "æĪ ĸ", + "ĠBre ath", + "D etect", + "Det ect", + "ĠD uel", + "ĠDu el", + "ĠDue l", + ". cmb", + ".c mb", + ".cm b", + "[ it", + "[i t", + ".Set Bool", + "Ġnarc iss", + "Ġab ide", + "Ġabi de", + "Ġej emplo", + "ĠâĦ ķ", + "Ġm ornings", + "Ġmor nings", + "Ġmorning s", + "Ġcomp utes", + "Ġcomput es", + "Ġcompute s", + ". ssl", + ".s sl", + ".ss l", + "j t", + "Ġm uchos", + "Ġmuch os", + "Ġmu chos", + "Ġmucho s", + "Ġmuc hos", + "_ SS", + "_S S", + "[ end", + "[e nd", + "Ġb asin", + "Ġbas in", + "Ġba sin", + "Ġalg unos", + "Ġalgun os", + "ĠCroat ia", + "line width", + "lin ewidth", + "( tags", + "(t ags", + "(tag s", + "( hidden", + "(h idden", + "ÃŃ cio", + "ÃŃc io", + "Ġa par", + "Ġap ar", + "Ġapa r", + "Ġ ж", + "ĠÐ ¶", + "ä¸ İ", + ". food", + ".f ood", + ".foo d", + "ĠR ural", + "ĠRu ral", + "Ġbread th", + "å½ ±", + "( sess", + "(s ess", + "(se ss", + "+ \")", + "+\" )", + "Ġ Paste", + "ĠP aste", + "ĠPa ste", + "ĠPast e", + "ĠPas te", + "Ġserv idor", + "ĠBit Set", + "ĠT ran", + "ĠTr an", + "ĠTra n", + "l aus", + "la us", + "v ette", + "ve tte", + "vet te", + "e yes", + "ey es", + "eye s", + "Ġ CLICK", + "ĠCL ICK", + "ĠCLI CK", + "ĠV III", + "ĠVI II", + "ĠVII I", + "ĠTur ns", + "ĠTurn s", + "ĠLe Bron", + "ĠM uj", + "ĠMu j", + "Ġ Deg", + "ĠD eg", + "ĠDe g", + "ĠAd ults", + "ĠAdult s", + "_ suite", + "_s uite", + "_su ite", + "process able", + "Ġ PHY", + "ĠP HY", + "ĠPH Y", + "g hest", + "gh est", + ". Fail", + ".F ail", + "ĠS lack", + "ĠSl ack", + "c ej", + "ce j", + "\\ Carbon", + "\\C arbon", + "Ġsuper star", + "Ġsupers tar", + "Ġsuperst ar", + "Ġhold ings", + "Ġholding s", + "Ġhol dings", + "( forms", + "(form s", + "(for ms", + "Ġ' #'", + "Ġ'# '", + "M ultip", + "Multi p", + "Mult ip", + "Mul tip", + "(\" [%", + "(\"[ %", + "- solid", + "-s olid", + "-so lid", + "/ url", + "/u rl", + "- tier", + "-t ier", + "[ length", + "[l ength", + "[len gth", + "Ġ StreamWriter", + "ĠStream Writer", + "ĠMarket place", + "get text", + "gett ext", + "_T ICK", + "_TI CK", + "Ġ Forge", + "ĠF orge", + "ĠFor ge", + "ĠForg e", + "Ġblack jack", + "ĠDO ES", + "ĠDOE S", + "ĠM atters", + "ĠMat ters", + "ĠMatt ers", + "ĠMatter s", + "ĠMatte rs", + "w aves", + "wa ves", + "wave s", + "wav es", + "Ġwhisper ed", + "Ġ lush", + "Ġl ush", + "Ġlu sh", + "ìĺ ¤", + "d igital", + "digit al", + "dig ital", + "Ġw rink", + "Ġwr ink", + "ĠH ogan", + "ĠHo gan", + "ĠHog an", + "Ġrust ic", + "Ġrus tic", + ".Apply Resources", + "ĠH ardy", + "ĠHar dy", + "ĠHard y", + "os omes", + "oso mes", + "osome s", + "A UT", + "AU T", + ". STATE", + ".ST ATE", + "Ġnarr atives", + "Ġnarrative s", + "ĉ store", + "ĉst ore", + "b ib", + "bi b", + "ĉ Scanner", + "ĠC ody", + "ĠCo dy", + "ĠCod y", + "\\ Repositories", + "Ġre union", + "Ġreun ion", + "an dum", + "and um", + "âĢĻ h", + "Ġsn iff", + "NS Bundle", + "Ġcompreh end", + "_ USAGE", + "_US AGE", + "_ occ", + "_o cc", + "_oc c", + "URRE NCY", + "J NI", + "Ġspecial izing", + "Ġ visions", + "Ġv isions", + "Ġvis ions", + "Ġvision s", + "Ġdo lore", + "Ġdol ore", + "Ġdolor e", + "Ġ vá", + "Ġv á", + "ĠChe vy", + "Ġ Styled", + "ĠSt yled", + "ĠStyle d", + "ĠSty led", + "imp act", + "a llen", + "al len", + "all en", + "alle n", + "Ġ kart", + "Ġk art", + "Ġka rt", + "Ġkar t", + "ĠTable t", + "ĠTab let", + "st uff", + "stu ff", + "re esome", + "ree some", + "rees ome", + "а ÑĤоÑĢ", + "аÑĤ оÑĢ", + "аÑĤо ÑĢ", + "//---------------------------------------------------------------- -----------Ċ", + "//- --------------------------------------------------------------------------Ċ", + "_ Admin", + "_Ad min", + "Ġcell phone", + "Ġ autoplay", + "Ġaut oplay", + "Ġauto play", + "Ġautop lay", + "Ġc ambio", + "Ġcam bio", + "Ġcamb io", + "Ġcambi o", + "Ġmar itime", + "Ġmari time", + "_ BOOT", + "_B OOT", + "_BO OT", + "- quarter", + "-qu arter", + "Ġlat ina", + "Ġlatin a", + "ĠAJ AX", + "e quiv", + "equ iv", + "ĠFront ier", + "Ġ XY", + "ĠX Y", + "} ]Ċ", + "}] Ċ", + "ĠR ough", + "ĠRo ugh", + "ĠRou gh", + ". proto", + ".pro to", + ".prot o", + ".pr oto", + "Ġcorrect ness", + "Ġfa cil", + "Ġfac il", + "Ġ Reached", + "ĠRe ached", + "ĠReach ed", + "ãģĿ ãģ®", + "V IS", + "VI S", + ". ps", + ".p s", + "Ġstr ncpy", + "Ġdif fusion", + "Ġdiff usion", + ".start Activity", + "� ��", + "�� �", + "Ġacc omp", + "Ġac comp", + "Ġaccom p", + "AME SPACE", + "AMES PACE", + "imon ials", + "imonial s", + "ĠB last", + "ĠBl ast", + "aby rin", + "Ġd ome", + "Ġdo me", + "Ġdom e", + "Ġext rav", + "Ġextra v", + "Ġextr av", + "Ġ yen", + "Ġy en", + "Ġye n", + "Ġcul inary", + "P RI", + "PR I", + "ĠComm unities", + "ĠCommun ities", + "n id", + "ni d", + "_ operations", + "_oper ations", + "_operation s", + ". hs", + ".h s", + "ĠM ilton", + "ĠMil ton", + "Ġno ises", + "Ġnoise s", + "Ġnoi ses", + "Autoresizing Mask", + "( cid", + "(c id", + "(ci d", + "} ĊĊĊĊĊĊ", + "}Ċ ĊĊĊĊĊ", + "}ĊĊ ĊĊĊĊ", + "}ĊĊĊ ĊĊĊ", + "}ĊĊĊĊ ĊĊ", + "}ĊĊĊĊĊ Ċ", + "] },Ċ", + "]} ,Ċ", + "]}, Ċ", + "Ġ Detection", + "ĠD etection", + "ĠDe tection", + "ĠDet ection", + "ĠDetect ion", + "ta bla", + "tab la", + "tabl a", + "Ġlib erties", + "Ġlibert ies", + "Ġliber ties", + "_D YNAMIC", + "w get", + "wg et", + "ĠT ür", + "ĠP ascal", + "ĠPa scal", + "ĠPas cal", + "Trans parent", + "Del ayed", + "Delay ed", + "] ()", + "]( )", + "ĠHer bert", + "ĠHerb ert", + "< ActionResult", + "", + "}- >", + "Ġpas ado", + "Ġpasa do", + "th ank", + "tha nk", + "than k", + "_ Delete", + "_De lete", + "ĠBr ighton", + "ĠBright on", + "ĠBrig hton", + ", unsigned", + "ä½ľ èĢħ", + "Ġaspir ations", + "Ġaspiration s", + "- how", + "-h ow", + "R ose", + "Ro se", + "Ros e", + "= ((", + "=( (", + "_ needed", + "_ne eded", + "_need ed", + "_ plural", + "_pl ural", + "< Application", + " >ĊĊ", + ">> ĊĊ", + ">>Ċ Ċ", + "Ġsurface d", + "Ġsurf aced", + "Ġìł Ģìŀ¥", + "ĠìłĢ ìŀ¥", + "pl atz", + "plat z", + "pla tz", + "ĉ email", + "ĉe mail", + "ĉem ail", + "cept ors", + "ceptor s", + "cep tors", + "\" >(", + "\"> (", + "Ġe pile", + "Ġep ile", + "è¯ »", + "ĠDe bt", + "ĠDeb t", + "åij Ĭ", + "N OP", + "NO P", + "\" https", + "\"http s", + ": j", + "Form Item", + "_ LICENSE", + "_L ICENSE", + ".get Double", + ".getD ouble", + "ĠAg enda", + "ĠAge nda", + "ĉ finally", + "ĉf inally", + "ĉfinal ly", + "( filters", + "(f ilters", + "(filter s", + "(fil ters", + "( av", + "(a v", + "ç¾ İ", + "A PER", + "AP ER", + "APE R", + "Ġ lava", + "Ġl ava", + "Ġla va", + "Ġlav a", + "еÑĢ Ð¶", + ") )))ĊĊ", + ")) ))ĊĊ", + "))) )ĊĊ", + "))))Ċ Ċ", + ")))) ĊĊ", + "Ġfa ulty", + "Ġfault y", + "_ nm", + "_n m", + "Ġt rava", + "Ġtr ava", + "Ġtra va", + "Ġtrav a", + "( Bitmap", + "(B itmap", + "(Bit map", + "Ġspe eding", + "Ġspeed ing", + "> ').", + ">' ).", + ">') .", + "Ġscreen ed", + "Ġscre ened", + "_ roll", + "_r oll", + "_ro ll", + "ĠMac Book", + "Ġ AUD", + "ĠA UD", + "ĠAU D", + "Ġdiagn ose", + ". Generate", + ".G enerate", + ".Gen erate", + "Ġ ^^", + "Ġ^ ^", + "Ġs trs", + "Ġst rs", + "Ġstr s", + "[ Test", + "[T est", + "Ġr ansom", + "Ġran som", + "ĠDH CP", + "el den", + "eld en", + "Ġinterpret ations", + "Ġinterpretation s", + "( )].", + "() ].", + "()] .", + "flat Map", + "Ġline Height", + "_ mount", + "_m ount", + "_mo unt", + "ĠW izards", + "ĠWizard s", + "Ġsl uts", + "Ġslut s", + "Ġslu ts", + "eh ler", + "o dal", + "od al", + "oda l", + "Ġmilit ia", + "Ġmil itia", + "å ²", + "ear ned", + "earn ed", + "Ġmis ery", + "Ġmise ry", + "Ġmiser y", + "int val", + "f und", + "fun d", + "fu nd", + "Ġh ides", + "Ġhide s", + "Ġhi des", + "Ġhid es", + "Ġdi arr", + "Ġdia rr", + "ĠWes ley", + "Ġ xmm", + "Ġx mm", + "Ġxm m", + "Ġqu em", + "Ġque m", + "Ġq uem", + "ĠAr abs", + "ĠArab s", + "ĠAra bs", + "if th", + "ift h", + "ategor ized", + "ategori zed", + "D isposable", + "Dis posable", + "P ure", + "Pu re", + "_NOT IFY", + "sn ippet", + "ĠGar rett", + "ĠGarr ett", + ". running", + ".r unning", + ".run ning", + ". weights", + ".weight s", + ".we ights", + "Ġ (--", + "Ġ( --", + "Ġ(- -", + "Ġin variant", + "Ġinv ariant", + "äºĭ ä»¶", + "Ġ Allowed", + "ĠAll owed", + "ĠAllow ed", + "d irs", + "dir s", + "di rs", + "Ġpass ions", + "Ġpassion s", + "Ġ lad", + "Ġl ad", + "Ġla d", + "Ġ Flush", + "ĠF lush", + "ĠFl ush", + "ĠFlu sh", + "m enus", + "men us", + "menu s", + ": block", + ":b lock", + "Ġcom pra", + "Ġcomp ra", + "Ġcompr a", + ".ch omp", + "al locator", + "all ocator", + "alloc ator", + "alloca tor", + "Ġcur ated", + "Ġcu rated", + "Ġ Knowing", + "ĠKn owing", + "ĠKnow ing", + "ĠPatt erson", + "Ġt elah", + "Ġte lah", + "Ġtel ah", + "Ġtela h", + "' ex", + "'e x", + "Ġdo omed", + "Ġdoom ed", + "Ġphil anth", + "o tty", + "ot ty", + "ott y", + ". styles", + ".st yles", + ".style s", + "Own ed", + "Ġallerg ies", + "Ġaller gies", + "= params", + "oc ese", + "oce se", + "it elist", + "ite list", + "itel ist", + "iteli st", + "Ġ Sending", + "ĠS ending", + "ĠSen ding", + "ĠSend ing", + "b ef", + "be f", + "or rar", + "orr ar", + "orra r", + "Ġ Não", + "ĠN ão", + "ĠF argo", + "ĠFar go", + "ĠL ub", + "ĠLu b", + "Ġ Combined", + "ĠComb ined", + "ĠCombine d", + "_ given", + "_g iven", + "ĉ ĉĉĉĉĠĠĠĠ", + "ĉĉ ĉĉĉĠĠĠĠ", + "ĉĉĉĉ ĉĠĠĠĠ", + "ĉĉĉ ĉĉĠĠĠĠ", + "ĉĉĉĉĉ ĠĠĠĠ", + "ĉĉĉĉĉĠ ĠĠĠ", + "ĉĉĉĉĉĠĠĠ Ġ", + "ĉĉĉĉĉĠĠ ĠĠ", + "Ġre conciliation", + "Ġreconc iliation", + "Pattern s", + "az ard", + "aza rd", + "azar d", + "Ġbio mass", + "Ġbiom ass", + "ĠH ouses", + "ĠHouse s", + "ĠHo uses", + "ĠHou ses", + "resp uesta", + "c co", + "cc o", + "/ topics", + "/to pics", + "/top ics", + "/topic s", + "ĠY uk", + "ĠYu k", + "Ġweak ened", + "Ġweaken ed", + "_ calendar", + "_c alendar", + "_cal endar", + "Ġmulher es", + "ĠM arl", + "ĠMar l", + "ĠMa rl", + "Ġs ine", + "Ġsi ne", + "Ġsin e", + "ĠT il", + "ĠTi l", + "ĠSo uls", + "ĠSou ls", + "ĠSoul s", + "ĠDe utsche", + "ĠDeutsch e", + "ĠF OLLOW", + "Ġp ipelines", + "Ġpipe lines", + "Ġpipeline s", + "Ġpip elines", + "ĠBever ly", + "_DIP SETTING", + "\" #", + "Ġ Proto", + "ĠPro to", + "ĠPr oto", + "ĠProt o", + ". big", + ".b ig", + ".bi g", + "ĠS avings", + "ĠSav ings", + "ĠSaving s", + "ĠT anz", + "ĠTa nz", + "ĠTan z", + "j un", + "ju n", + "Ġ Gamma", + "ĠG amma", + "ĠGa mma", + "ĠGam ma", + "ĠS add", + "ĠSa dd", + "ĠSad d", + "Ġadv isors", + "Ġadvis ors", + "Ġadvisor s", + "Ġro ast", + "Ġun ters", + "Ġunt ers", + "Ġunter s", + "ud ies", + "udi es", + "_ lon", + "_l on", + "_lo n", + "- pointer", + "-point er", + "-po inter", + "ĠElement Ref", + "\\ Builder", + "example Input", + ". webdriver", + ".web driver", + "data Type", + "Ġ Quite", + "ĠQ uite", + "ĠQu ite", + "ĠQui te", + "ĠQuit e", + "ĠCelt ics", + "ĠCel tics", + "ĠCeltic s", + "u il", + "ui l", + "- defense", + "-def ense", + "b ish", + "bi sh", + "bis h", + "ĠUI Window", + "Ġ Suddenly", + "ĠS uddenly", + ". hot", + ".h ot", + ". reason", + ".re ason", + "Ġg ör", + "Ġgö r", + "A MD", + "AM D", + ". Multi", + ".M ulti", + ".Mult i", + "auth enticated", + "authenticate d", + "reg ions", + "region s", + "; (", + "а ÑĢам", + "аÑĢ Ð°Ð¼", + "аÑĢа м", + "ĠKir by", + "$ route", + "$r oute", + "PREC ATED", + "ĠDur ham", + "o wo", + "ow o", + "ĠPer forms", + "ĠPerform s", + "Ġdisreg ard", + "n st", + "ns t", + "ĠP ols", + "ĠPol s", + "ĠPo ls", + "Ġget P", + "\" ]:", + "\"] :", + "-color ed", + "-col ored", + "( Keys", + "(Key s", + "ĠAl leg", + "ĠAll eg", + "ĠAlle g", + "_ modify", + "_mod ify", + "_ loading", + "_lo ading", + "_load ing", + "s trained", + "str ained", + "stra ined", + "strain ed", + "Ġat roc", + "Ġatr oc", + "_p hr", + "_ph r", + "< Sprite", + "", + "c eph", + "ce ph", + "cep h", + ".DateTime Picker", + ". \";ĊĊ", + ".\" ;ĊĊ", + ".\";Ċ Ċ", + ".\"; ĊĊ", + "ĠT ie", + "ĠTi e", + ", item", + ",i tem", + ",it em", + "Ġm enn", + "Ġme nn", + "Ġmen n", + "G as", + "Ga s", + "o cha", + "oc ha", + "och a", + "_ virtual", + "_v irtual", + "Ġmaster piece", + "_ sequences", + "_se quences", + "_sequence s", + "L TE", + "LT E", + "Ġ Submission", + "ĠSub mission", + "C aller", + "Call er", + "Cal ler", + "Ca ller", + "$ \\", + "S port", + "Sp ort", + "Spo rt", + "ag us", + "agu s", + "Constraint Maker", + "Ġco loc", + "Ġcol oc", + "Ġ wig", + "Ġw ig", + "Ġwi g", + "Ġ У", + "ĠÐ £", + "ĉ Array", + "ĉA rray", + "L ooks", + "Lo oks", + "Look s", + "ĠG TA", + "ĠGT A", + ". steps", + ".st eps", + ".step s", + "atch ewan", + "_ ranges", + "_r anges", + "_range s", + "ext Alignment", + "ĠBren nan", + "Ġab straction", + "Ġabs traction", + "Ġabstract ion", + "Ġabst raction", + "uler Angles", + ". misc", + ".m isc", + ".mi sc", + "Ġantib odies", + "Ġex ponential", + "Ġexponent ial", + "Ġ CHANNEL", + "ĠCH ANNEL", + "exp ense", + "' y", + "Ġdetect ives", + "Ġdetective s", + "Ġpur ported", + "Y STEM", + "YS TEM", + "YST EM", + "Ġradio active", + "ĠLat ina", + "ĠLatin a", + ". Encoding", + ".En coding", + ".Enc oding", + ". TAG", + ".T AG", + "x in", + "xi n", + "D egree", + "De gree", + "Deg ree", + "ur acion", + "ura cion", + "p rices", + "pr ices", + "price s", + "pri ces", + "ĠRefer entialAction", + "Ġr arity", + "Ġrar ity", + "Ġp iles", + "Ġpi les", + "Ġpil es", + "Ġpile s", + "g ende", + "ge nde", + "gen de", + "gend e", + "_ projects", + "_project s", + "_proj ects", + "_ globals", + "_g lobals", + "_global s", + "_glob als", + ". startTime", + ".start Time", + "Ġ 구", + "Ġê µ¬", + "Ġêµ ¬", + "SE CTION", + "SEC TION", + "_ publish", + "_p ublish", + "_pub lish", + "F ault", + "Fa ult", + "D DL", + "DD L", + "_ prior", + "_p rior", + "_pr ior", + "_pri or", + "M om", + "Mo m", + "Ġth icker", + "Ġthick er", + "Ġthi cker", + "Ġ sequelize", + "Ġsequ elize", + "Ġsequel ize", + "Ġess entials", + "Ġessential s", + "s tras", + "st ras", + "str as", + "stra s", + "in tr", + "int r", + "> (()", + ">( ()", + ">(( )", + ". management", + ".man agement", + ".manage ment", + "e il", + "ei l", + "éĹ Ń", + "A ware", + "Aw are", + ". City", + ".C ity", + "ĠAr bit", + "ĠArb it", + "_ DM", + "_D M", + "_ keyboard", + "_key board", + "L Object", + "LO bject", + "- webpack", + "-web pack", + "ĠNew port", + "Ġprincipal Column", + "leg ant", + "Ġp allet", + "Ġpal let", + "Ġpall et", + "Ġfract ure", + "Ġfrac ture", + "Ġ gmail", + "Ġg mail", + "Ġgm ail", + ". Meta", + ".M eta", + ".Me ta", + "A bove", + "Ab ove", + ". KeyEvent", + ".Key Event", + "j it", + "ji t", + "_ macro", + "_m acro", + "_mac ro", + "_ma cro", + "_P USH", + "_PUS H", + "á» ©", + "/ controller", + "/control ler", + "åĬł è½½", + "Ġsuperf icial", + "exter ity", + "Ġ mensagem", + "Ġm ensagem", + "Ġmens agem", + "W ind", + "Win d", + "Wi nd", + "i ston", + "is ton", + "ist on", + "isto n", + ".open api", + "и ÑĢов", + "иÑĢ Ð¾Ð²", + "Ġ Serializer", + "ĠS erializer", + "ĠSerial izer", + "ĠSerialize r", + "uct ive", + "Ġ zar", + "Ġz ar", + "Ġza r", + "P laces", + "Pl aces", + "Place s", + ". Static", + ".St atic", + ".Stat ic", + "B a", + "Ġin advert", + "ĠIndones ian", + "ĠIndonesia n", + "_I PV", + "_IP V", + "( horizontal", + "(h orizontal", + "Ġ getTitle", + "Ġget Title", + "ide press", + "ĠConsole Color", + "i pers", + "ip ers", + "ipe rs", + "iper s", + "$ out", + "$o ut", + "Ġfest ive", + "Ġeven ings", + "Ġevening s", + "Ġeve nings", + ". GetData", + ".Get Data", + "uit ka", + "ĠManual s", + "us sed", + "uss ed", + "_ Max", + "_M ax", + ". Chat", + ".C hat", + ".Ch at", + "ĠA ircraft", + "ĠAir craft", + "= com", + "=c om", + "F OUND", + "FO UND", + "a pro", + "ap ro", + "apr o", + "Ġtre asures", + "Ġtreasure s", + "_ alive", + "_a live", + "_al ive", + "Ġg adget", + "Ġgad get", + "e king", + "ek ing", + "eki ng", + "Button Down", + "B rowsable", + ".PER MISSION", + "P ASSWORD", + "PASS WORD", + "Ġ HASH", + "ĠH ASH", + "ĠHAS H", + "ĠHA SH", + "f é", + "\\ TestCase", + "\\Test Case", + "LO SS", + "LOS S", + "o thers", + "other s", + "oth ers", + ", J", + "Ġass hole", + "Ġassh ole", + "w erk", + "we rk", + "wer k", + "Ġm ã", + ". ie", + ".i e", + "e vil", + "ev il", + "evi l", + "kont akte", + "/ ///////////////////////////////////////////////////////////////////////////////Ċ", + "/// /////////////////////////////////////////////////////////////////////////////Ċ", + "//////////////////////////////////////////////////////////////////////////// ////Ċ", + "//////////////////////////////////////////////////////////////////////////////// Ċ", + "= sys", + "=s ys", + "ĉ lock", + "ĉl ock", + "ĉloc k", + "-- ;ĊĊ", + "--;Ċ Ċ", + "--; ĊĊ", + "_ FUN", + "_F UN", + "Fill Color", + "ó a", + "p rend", + "pr end", + "pre nd", + "Ġcom pressor", + "Ġcompr essor", + "Ġcompress or", + "M other", + "Mo ther", + "Mot her", + "ĠAr cher", + "ĠArch er", + "ĠArc her", + ". goto", + ".g oto", + ".go to", + "Ġwür de", + "Ġbam boo", + "Ġbamb oo", + "ï¼ İ", + "Ġ Trees", + "ĠT rees", + "ĠTr ees", + "ĠTree s", + "ĠTre es", + "Ġb umper", + "Ġbump er", + "Ġbum per", + "Ġsa usage", + "Ġsau sage", + "ĠEl asticsearch", + "ĠElastic search", + "Ġhor izontally", + "Ġhorizontal ly", + "ĠG ul", + "ĠGu l", + "Im mutable", + "Imm utable", + "Ġ loser", + "Ġl oser", + "Ġlo ser", + "Ġlos er", + "Ġlose r", + "Ġab orted", + "Ġabort ed", + "- demo", + "-d emo", + "-de mo", + "-dem o", + "ĠH atch", + "ĠHat ch", + "Ġ unde", + "Ġu nde", + "Ġun de", + "Ġund e", + "Ġpro cesso", + "Ġprocess o", + "Ġproc esso", + "Ġproces so", + "- call", + "-c all", + "-cal l", + "-ca ll", + "In come", + "Inc ome", + "å ĥ", + "_ returns", + "_return s", + "'] .\"'", + "']. \"'", + "'].\" '", + "( sw", + "(s w", + "C BS", + "CB S", + "am ilies", + "ami lies", + "amil ies", + "ĠYour self", + "ĠYours elf", + "ĠH olt", + "ĠHol t", + "ĠHo lt", + ". MON", + ".M ON", + "à§ ĩ", + "ÑĪ Ðµ", + "a non", + "an on", + "ano n", + "Ġ FontAwesome", + "ĠFont Awesome", + "pro ducer", + "produ cer", + "prod ucer", + "produce r", + "j r", + "Ġm au", + "Ġma u", + "ĉ inter", + "ĉint er", + "ĉin ter", + "Ġdish onest", + "Ġm agna", + "Ġmag na", + "Ġmagn a", + "ĠColl ective", + "ĠCollect ive", + "Ġvra iment", + "Ġvrai ment", + "Ġcho ix", + "st ay", + "sta y", + "Ġwel ding", + "Ġweld ing", + "r ising", + "ri sing", + "ris ing", + ", min", + ",m in", + "ĠF ate", + "ĠFa te", + "ĠFat e", + "g lob", + "gl ob", + "RGB A", + "RG BA", + "Ġd ette", + "Ġde tte", + "Ġdet te", + "V en", + "Ve n", + "Ġembarrass ment", + ". DELETE", + ".DE LETE", + "g regar", + "greg ar", + "gre gar", + "- render", + "-r ender", + "-re nder", + "-ren der", + "( bucket", + "(b ucket", + "\" >ĊĊĊ", + "\"> ĊĊĊ", + "\">Ċ ĊĊ", + "\">ĊĊ Ċ", + ".wait Key", + "Bus y", + "Bu sy", + "Ġdifferent iation", + "ĠC ST", + "ĠCS T", + ". Constant", + ".Con stant", + ".Cons tant", + "Ġline Number", + "( matches", + "(m atches", + "(match es", + "(mat ches", + "Ġ websocket", + "Ġweb socket", + "Ġwebs ocket", + "Ġbar red", + "Ġbarr ed", + "Ġpued es", + "Ġpu edes", + "Ġpuede s", + "M ono", + "Mon o", + "Mo no", + "C ORE", + "CO RE", + "COR E", + "I ID", + "II D", + "ĠĠ ĠĠčĊčĊ", + "ĠĠĠĠ čĊčĊ", + "ĠĠĠ ĠčĊčĊ", + "ĠĠĠĠčĊ čĊ", + "Ġpúb lico", + "le aning", + "lean ing", + "lea ning", + "Ġclean sing", + "Ġcleans ing", + "Ġc ris", + "Ġcr is", + "Ġcri s", + "ĠDev ils", + "ĠDevil s", + "_ SETTING", + "_SET TING", + "unt ary", + "unta ry", + ". );Ċ", + ".) ;Ċ", + "Ċ ĠĠĠĊ", + "[ curr", + "[c urr", + "[cur r", + "t sy", + "ts y", + "ĠAlex is", + "ĠAle xis", + "r itel", + "ri tel", + "rit el", + "rite l", + "Ġpet roleum", + "Ġpetrol eum", + ".pre processing", + "m atter", + "mat ter", + "For Result", + "- license", + "-l icense", + "Ġtravel lers", + "Ġtrav ellers", + "Ġtraveller s", + "Ġ Dispatcher", + "ĠDispatch er", + "ĠDisp atcher", + "enn ifer", + "Ġdigest ive", + "P ED", + "PE D", + "hib ition", + "hibit ion", + "MAS ConstraintMaker", + "ĠW att", + "ĠWat t", + "ĠWa tt", + "B enef", + "Ben ef", + ".set View", + "d to", + "dt o", + "T EE", + "TE E", + "ĠPel osi", + "_EX TRA", + "_EXT RA", + "Ġmed als", + "Ġmedal s", + "x hr", + "fore cast", + "for ecast", + "Ġn argin", + "Ġnar gin", + "o uns", + "ou ns", + "oun s", + "- fill", + "-f ill", + "-fi ll", + "_CUR SOR", + "Ġsup ervised", + "Ġsuper vised", + "Ġsuperv ised", + "Ġsupervise d", + "Ġt urf", + "Ġtu rf", + "Ġtur f", + "ĠEd gar", + "POS ITION", + "POSIT ION", + "Ġ categoryId", + "Ġcategory Id", + "â ī", + "_ ER", + "_E R", + "á»§ a", + "Sh own", + "Show n", + ". ll", + ".l l", + "_POL ICY", + "( ),'", + "() ,'", + "(), '", + "Ġ Prev", + "ĠP rev", + "ĠPr ev", + "ĠPre v", + "ĠString Field", + "ĉ Global", + "ĉG lobal", + "as sed", + "ass ed", + "asse d", + "Through out", + "o stringstream", + ".awt extra", + "Ġsl opes", + "Ġslo pes", + "Ġslope s", + "Ġ Sequential", + "ĠSe quential", + "ĠSequ ential", + "Ġgi orn", + "Ġgio rn", + "Ġ zelf", + "Ġz elf", + "Ġze lf", + "Ġzel f", + "Ġvers atility", + "Ġversa tility", + "le neck", + "len eck", + "lene ck", + ". cgi", + ".c gi", + ".cg i", + "Ġdoub ling", + "Ġdou bling", + "ĠBang kok", + "Ġbu urt", + "Ġusu ário", + "st udio", + "stu dio", + "stud io", + "Ġje unes", + "Ġjeune s", + "Ġjeu nes", + "Ġm uted", + "Ġmut ed", + "Ġmu ted", + "Ġmute d", + "Ġ ips", + "Ġi ps", + "Ġip s", + "_ fraction", + "_f raction", + "_fr action", + "_frac tion", + "& &(", + "&& (", + "Ġst unt", + "Ġstu nt", + "Ġstun t", + "') ;?> čĊ", + "}> čĊ", + "Ġev apor", + "b able", + "ba ble", + "bab le", + "Ġ PRICE", + "ĠPR ICE", + "ĠPRI CE", + "Ġ æ³", + "Ġæ ³", + "lu cent", + "Ġv amp", + "Ġva mp", + "ĠTechn ician", + "Ġunique ness", + "Ġuniqu eness", + "M es", + "Me s", + "ur ban", + "urb an", + ".param etrize", + "ĠRe play", + "ĠRep lay", + "S essions", + "Session s", + "em br", + "emb r", + "- Americans", + "-American s", + "-Americ ans", + "_PRO XY", + "Ġp ian", + "Ġpi an", + "Ġ trie", + "Ġt rie", + "Ġtr ie", + "Ġtri e", + "Ġ Destructor", + "ĠD estructor", + "ĠDe structor", + "Game State", + "ĠI MF", + "ĠIM F", + "c hin", + "ch in", + "chi n", + "Ġ porte", + "Ġp orte", + "Ġport e", + "Ġpor te", + "ĠS wal", + "ĠSw al", + "åŁ İ", + "Sub string", + "i ming", + "im ing", + "imi ng", + "imin g", + "/ Library", + "/L ibrary", + "Ġfright ened", + "w rites", + "write s", + "wr ites", + "Ġrec ursos", + "Ġrecurs os", + "ar Result", + "_INIT IALIZ", + "_INITIAL IZ", + "Ġ Badge", + "ĠB adge", + "ĠBad ge", + "ĠBa dge", + "_ crc", + "_c rc", + "_cr c", + "E ight", + "ĠDIST INCT", + "Ġ thro", + "Ġth ro", + "Ġthr o", + "@ Xml", + "Ġ Legendary", + "ĠLegend ary", + "- twitter", + "-t witter", + "-tw itter", + "_ easy", + "_e asy", + "Ġ +++", + "Ġ+ ++", + "Ġ++ +", + "( DATA", + "(D ATA", + ". Locale", + ".L ocale", + ".Local e", + ".Lo cale", + "Ġk ä", + "Ġn urt", + "Ġnu rt", + "Ġnur t", + "Ġcr uis", + "Ġcru is", + "_ ios", + "_i os", + "_io s", + "Ġs ensing", + "Ġsens ing", + "Ġsen sing", + "_ Line", + "_L ine", + "Ċ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "p ong", + "pon g", + "po ng", + "o leon", + "ol eon", + "ole on", + "Ġwild card", + "ç͍æĪ· åIJį", + "Ġbeg ging", + "R od", + "Ro d", + "Ġ Ãİ", + "Ġà İ", + "_ CELL", + "_C ELL", + "_CE LL", + "Research ers", + ". selector", + ".se lector", + ".select or", + ".sel ector", + "_ ing", + "_in g", + "_i ng", + "Ġas piring", + "Ġaspir ing", + "Ġasp iring", + "Ġimm ortal", + "Ġy min", + "_ robot", + "_r obot", + "_ro bot", + "Ġpl ur", + "Ġplu r", + "B TC", + "BT C", + "ĠD ID", + "ĠDI D", + "Ġpier cing", + "* u", + "_ DEFINED", + "_DEF INED", + "_DEFIN ED", + "_DEFINE D", + "ĠT hi", + "ĠTh i", + "i taire", + "it aire", + "ita ire", + "( media", + "(m edia", + "(me dia", + "- ons", + "-on s", + "-o ns", + "Ġch efs", + "Ġche fs", + "Ġchef s", + "Ġ\" *.", + "Ġ\"* .", + "/ AP", + "/A P", + "Ġr azor", + "Ġraz or", + "Ġsearch Data", + "Ġ =&", + "Ġ= &", + "Ġ ãĢĤ", + "ĠãĢ Ĥ", + "Ġm ourn", + "Ġmo urn", + "Ġmou rn", + "Ġmour n", + "t ingham", + "ting ham", + "Ġ oli", + "Ġo li", + "Ġol i", + "ĠVer non", + "ĠVern on", + "_ RS", + "_R S", + "ŀ æĢ§", + "Ġf ácil", + "a ngen", + "an gen", + "ang en", + "ange n", + "ce lain", + "cel ain", + "cela in", + "Ġ ail", + "Ġa il", + "Ġai l", + "l est", + "le st", + "les t", + "ĠQ COMPARE", + "g ain", + "ga in", + "Ġ ε", + "ĠÎ µ", + "ĠK ob", + "ĠKo b", + "Ġ Fault", + "ĠF ault", + "ĠFa ult", + "ĠFaul t", + "_ configs", + "_config s", + "_conf igs", + "ç»ĵ æŀľ", + ". +", + "c alar", + "ca lar", + "cal ar", + "cala r", + "( colors", + "(color s", + "(col ors", + "M ul", + "Mu l", + "_ ART", + "_A RT", + "_AR T", + "Ġexperiment ing", + "er men", + "erm en", + "ĠAng lo", + ".Fixed Single", + "S ea", + "Se a", + "Ġ ctxt", + "Ġc txt", + "Ġctx t", + "Ġct xt", + ". slider", + ".s lider", + ".sl ider", + ".slide r", + "C ollapse", + "Coll apse", + "G rey", + "Gr ey", + "Gre y", + "Ġ fld", + "Ġf ld", + "Ġfl d", + "- proof", + "-p roof", + "-pro of", + ". capacity", + ".cap acity", + "get Parent", + "ĠCom pliance", + "Ġbur gl", + "Ġburg l", + "- rec", + "-r ec", + "-re c", + "Ġover written", + "M U", + "Ġr outers", + "Ġro uters", + "Ġroute rs", + "Ġrout ers", + "Ġrouter s", + "Ġrou ters", + "ĉ Model", + "ĉM odel", + "Ġfantas ies", + "av ian", + "avi an", + "avia n", + "_ prec", + "_p rec", + "_pr ec", + "_pre c", + "ĠSc andin", + "ĠScan din", + "Ġ// <", + "Ġ/ /<", + "/ oct", + "/o ct", + "Ġceremon ies", + "Mon ths", + "Month s", + "Mont hs", + "un dy", + "und y", + "Ġqu ed", + "Ġque d", + "Ġq ued", + "ĠN ou", + "ĠNo u", + "ĠV ibr", + "ĠVi br", + "ĠVib r", + ". rgb", + ".r gb", + "Ġcit rus", + "Ġbr aces", + "Ġbra ces", + "Ġbrace s", + "- uppercase", + "-upper case", + "get Table", + "Ġd opo", + "Ġdo po", + "Ġdop o", + "ĠK err", + "ĠKe rr", + "ĠKer r", + "_ CHILD", + "_CH ILD", + "- cloud", + "-c loud", + "-cl oud", + "ĉ Matrix", + "ĉM atrix", + "ĉMat rix", + "Ġgarden ing", + "Ġgard ening", + "S ing", + "Si ng", + "Sin g", + "al most", + "alm ost", + "Require ments", + "Requirement s", + "ugu ay", + "( Property", + "(P roperty", + "sub scriber", + "subscribe r", + "F AST", + "FA ST", + "re action", + "react ion", + "rea ction", + "( lp", + "(l p", + ") })Ċ", + ")} )Ċ", + ")}) Ċ", + "` ).", + "`) .", + ". wallet", + ".w allet", + ".wall et", + "_ exchange", + "_ex change", + ". Maximum", + ".Max imum", + "Ġ Verb", + "ĠV erb", + "ĠVer b", + "ĠVe rb", + "âĶ ģ", + "( )<", + "() <", + "ï¼Ľ Ċ", + "R OT", + "RO T", + "C ARD", + "CA RD", + "CAR D", + "u bit", + "ub it", + "ubi t", + "{ @", + "_ kel", + "_k el", + "_ke l", + "Ġ Tooltip", + "ĠTo oltip", + "ĠTool tip", + "My SQL", + "Main Activity", + "a rf", + "ar f", + "Ġm align", + "Ġmal ign", + "Ġse inen", + "Ġsein en", + "Ġseine n", + "Ġsei nen", + "ap ist", + "api st", + "apis t", + "Ġ< %", + "Method Impl", + "M il", + "Mi l", + "ĠM ick", + "ĠMi ck", + "ĠMic k", + ". depend", + ".d epend", + ".de pend", + ".dep end", + "< ID", + " >&", + ">> &", + "ĉ ok", + "ĉo k", + "- low", + "-l ow", + "-lo w", + ". usuario", + ".us uario", + "n ested", + "ne sted", + "nes ted", + "nest ed", + "X B", + "OUR S", + "OU RS", + ". BorderColor", + ".Border Color", + "Ġb row", + "Ġbr ow", + "Ġbro w", + "Ġ Ðķ", + "ĠÐ ķ", + "c orr", + "co rr", + "cor r", + "ĠRed skins", + "ĠReds kins", + ".get Tag", + ".get Transaction", + "Ġst igma", + "har dt", + "hard t", + "ĠPlayer Prefs", + "al sy", + "als y", + "uc son", + "ucs on", + "L anguages", + "Language s", + "ĠOl ivia", + "ĠOliv ia", + "Ġt ac", + "Ġta c", + "Ġb li", + "Ġbl i", + "Ġc aval", + "Ġca val", + "Ġcav al", + "Ġconsolid ated", + "Ġconsolidate d", + "Ġper il", + "Ġpe ril", + "Ġperi l", + "Ġd ele", + "Ġde le", + "Ġdel e", + "Ġform ulated", + "Ġformula ted", + "Ġformul ated", + "Ġformulate d", + "Ġhigh ways", + "Ġhighway s", + ". spawn", + ".s pawn", + ".sp awn", + "= =$", + "== $", + "ĠN iet", + "ĠNi et", + "ĠNie t", + "Ġv eggies", + "Ġveg gies", + "y po", + "yp o", + "- rule", + "-r ule", + "ĠV ie", + "ĠVi e", + "/e pl", + "Ġenf ants", + "string Literal", + "Ġtough est", + "Ġtou ghest", + "bu yer", + "buy er", + "Ġcov ariance", + "Ġ ili", + "Ġi li", + "Ġil i", + "ĠSoph ie", + "Ġ BAB", + "ĠB AB", + "ĠBA B", + "Ġ \"),", + "Ġ\" ),", + "Ġ\") ,", + "ĠU k", + "current Index", + "_ userdata", + "_user data", + ". codec", + ".co dec", + ".code c", + ".cod ec", + "ĠPun jab", + "ĠS NP", + "ĠSN P", + "l ol", + "lo l", + "adv ance", + "Ġcom fy", + "Json Ignore", + "Ġfashion able", + "Ġ ICON", + "ĠI CON", + "ĠIC ON", + "ĠICO N", + "Ġ ora", + "Ġo ra", + "Ġor a", + "ĠP ricing", + "ĠPr icing", + "ĠPri cing", + "< num", + " E", + "t ering", + "ter ing", + "te ring", + "teri ng", + "/ screens", + "/s creens", + "/screen s", + "Ġheight ened", + "аÑĢ ÑĤ", + "Author ities", + "_ bbox", + "_b box", + "_bb ox", + "ü nst", + "ün st", + "üns t", + ". fontSize", + ".font Size", + "Ġ BOOLEAN", + "ĠBO OLEAN", + "div ide", + "di vide", + "divid e", + "ĠS loven", + "ĠSl oven", + "ĠSlo ven", + "ĠSlov en", + "u cer", + "uc er", + "uce r", + "Ù Ĵ", + "st ub", + "stu b", + "Ġnavig ating", + ": animated", + "_ NOW", + "_N OW", + "_NO W", + "_ vect", + "_v ect", + "_vec t", + "_ve ct", + "} {Ċ", + "}{ Ċ", + "@ (", + "Ġtele com", + "Ġtel ecom", + "Ġcontract ing", + "Ġcontr acting", + "ĠAss ange", + "Ġextract ing", + "Ġextr acting", + "Ġgr ö", + "c obra", + "co bra", + "cob ra", + ". DIS", + ".D IS", + "Ġc rab", + "Ġcr ab", + "Ġcra b", + "Ġt witch", + "Ġtw itch", + "Ġ verts", + "Ġv erts", + "Ġver ts", + "Ġvert s", + "Ġve rts", + "Ġreject s", + "Ġrej ects", + "ĉ format", + "ĉfor mat", + "ĉform at", + "Ġre generation", + "Ġreg eneration", + ". Sys", + ".S ys", + "s olve", + "sol ve", + "ĉ dialog", + "ĉd ialog", + "s hi", + "sh i", + "m eter", + "me ter", + "met er", + "( best", + "(b est", + "(be st", + "valid ators", + "validator s", + "Ġon wards", + "Ġonward s", + "Ġg uru", + "Ġgu ru", + "Ġmod erator", + "Ġmoder ator", + "ow ied", + "owie d", + "owi ed", + "ex periment", + "r ub", + "ru b", + "Ġ mqtt", + "Ġm qtt", + "Ġmq tt", + "ĠCa ucas", + "Ġnational ism", + "Ġm ange", + "Ġman ge", + "Ġma nge", + "Ġmang e", + "ĉ ImGui", + "/ Edit", + "/E dit", + "Ġ inh", + "Ġin h", + "Ġi nh", + "Ġint ellig", + "Ġintel lig", + "ero kee", + "ĉ export", + "ĉex port", + "ĉexp ort", + "Ġdiscrim inate", + "Ġdiscrimin ate", + "sub tract", + "ĠM oodle", + "ĠMoo dle", + "ĠMood le", + "en ser", + "ens er", + "ense r", + "ĠGu ides", + "ĠGuid es", + "ĠGuide s", + "ĠGui des", + "R AP", + "RA P", + "- hot", + "-h ot", + "_ grp", + "_g rp", + "_gr p", + ". picture", + ".p icture", + ".pic ture", + "X A", + "Ġinit View", + "_ Comm", + "_C omm", + "_Com m", + "Ġoverd ose", + "Ġ +ĊĊ", + "Ġ+ ĊĊ", + "Ġ+Ċ Ċ", + "ĠS ilent", + "ĠSil ent", + "sh ows", + "show s", + "Ġinter polate", + "Ġinterpol ate", + "Ġinterp olate", + "Form ation", + "Format ion", + "Ġb isc", + "Ġbi sc", + "Ġbis c", + "mark ets", + "market s", + "( SC", + "(S C", + "Z e", + "Ġ Networking", + "ĠNetwork ing", + "ĠNet working", + "Ġad renal", + "Ġadr enal", + "ĠG uns", + "ĠGu ns", + "ĠGun s", + "et eor", + "ete or", + "De clared", + "Decl ared", + "Declare d", + "orge town", + "orget own", + "Ġk arena", + "Ġka rena", + "Ġkar ena", + "/ password", + "/p assword", + "/pass word", + "_ addresses", + "_add resses", + "_address es", + "_addr esses", + "IT ERAL", + "ITE RAL", + "ITER AL", + "B uzz", + "Bu zz", + "ĠCon way", + "( case", + "(c ase", + "(ca se", + "P WD", + "PW D", + "he iro", + "hei ro", + "( act", + "(a ct", + "(ac t", + "* *čĊ", + "** čĊ", + "( ));ĊĊĊ", + "() );ĊĊĊ", + "());Ċ ĊĊ", + "()) ;ĊĊĊ", + "());ĊĊ Ċ", + "()); ĊĊĊ", + "Ġa nv", + "Ġan v", + "Ġ ..ĊĊ", + "Ġ. .ĊĊ", + "Ġ.. ĊĊ", + "Ġ..Ċ Ċ", + "( MenuItem", + "(Menu Item", + "( mail", + "(m ail", + "_ sections", + "_s ections", + "_se ctions", + "_section s", + "ĉ net", + "ĉn et", + "Ġp lut", + "Ġpl ut", + "Ġplu t", + "Ġw rench", + "Ġwr ench", + "/ object", + "/o bject", + "ĠI st", + "ĠIs t", + "Ġ VIS", + "ĠV IS", + "ĠVI S", + "/ pub", + "/p ub", + "al ten", + "alt en", + "alte n", + "Ġguitar s", + "Ġguit ars", + "Ġantib iotic", + "Ġantibiot ic", + "ï¼ ĸ", + " ¹", + "Ġ \"+\"", + "Ġ\" +\"", + "Ġ\"+ \"", + "form ula", + "Ġba bes", + "Ġbab es", + "Ġbabe s", + "Ġ Prompt", + "ĠP rompt", + "ĠProm pt", + "Ġe nim", + "Ġen im", + "/ player", + "/p layer", + "/pl ayer", + "/play er", + "ĉ ref", + "ĉr ef", + "ĉre f", + "Ġby Äĩ", + "Ġcons umes", + "Ġconsum es", + "Ġconsume s", + "ĠH ast", + "ĠHas t", + "ĠHa st", + "ĠT ao", + "ĠTa o", + "Ġ '))Ċ", + "Ġ' ))Ċ", + "Ġ') )Ċ", + "Ġc lam", + "Ġcl am", + "Ġcla m", + "Ġthigh s", + "Ġmot if", + "Ġmo tif", + "Api Operation", + "Ġ WL", + "ĠW L", + "get C", + "ĉ flags", + "ĉf lags", + "ĉflag s", + "oint ments", + "ointment s", + "Ġeconomic al", + "Ġeconom ical", + "need le", + "nee dle", + "x ls", + "xl s", + "pr actice", + "ut zer", + "utz er", + "time ofday", + "- output", + "-out put", + "Ġ findById", + "Ġfind ById", + "ĠfindBy Id", + "ĠB uddy", + "ĠBudd y", + "ĠBu ddy", + "ĠBud dy", + "Ðŀ ÑĤ", + "S even", + "Se ven", + "ĠB ark", + "ĠBar k", + "ĠBa rk", + "Ġen voy", + "Ġenv oy", + "_ algorithm", + "_al gorithm", + "åĪ ©", + "Ġball istic", + "ç§ »", + "r ades", + "ra des", + "rad es", + "rade s", + "ĉ doc", + "ĉd oc", + "ĉdo c", + "rodu cing", + "rod ucing", + "ĠE ating", + "ĠEat ing", + "ĠEa ting", + "Un mount", + "/data Tables", + "_ bonus", + "_b onus", + "Ġl itt", + "Ġli tt", + "Ġlit t", + "p ps", + "pp s", + ") localObject", + "pe rf", + "per f", + "Ġ Helvetica", + "ĠHel vetica", + "sh utdown", + "/ ml", + "/m l", + ". tokens", + ".t okens", + ".token s", + "ĠHard core", + ", row", + ",r ow", + "/ bg", + "/b g", + "S caler", + "Sc aler", + "Scale r", + "âĢĶ as", + "âĢĶa s", + "_log its", + "âĢĻ int", + "âĢĻin t", + "âĢĻi nt", + "ĉ App", + "ĉA pp", + "Impl icit", + "Imp licit", + ".F printf", + "E TO", + "ET O", + "Ġ terra", + "Ġt erra", + "Ġter ra", + "Ġterr a", + "Ġpossess ing", + ". rstrip", + ".r strip", + ".rs trip", + ", ),", + ",) ,", + "= yes", + "=y es", + "Ġ Stripe", + "ĠSt ripe", + "ĠStr ipe", + "ĠStrip e", + "? =", + "ne utral", + ". good", + ".g ood", + ".go od", + "Ġk ennen", + "Ġke nnen", + "Ġken nen", + "Ġkenn en", + "ĠS ung", + "ĠSun g", + "ĠSu ng", + "f ault", + "fa ult", + "ystate change", + "Can adian", + "',' \".$", + "ĠM its", + "ĠMi ts", + "ĠMit s", + "æ nd", + "Ġ STRUCT", + "ĠSTR UCT", + "ĠURL WithString", + "ĠCom pass", + "ĠComp ass", + "Ġ --ĊĊ", + "Ġ- -ĊĊ", + "Ġ-- ĊĊ", + "Ġ--Ċ Ċ", + "ĠNS LayoutConstraint", + "| min", + "|m in", + "- adjust", + "-ad just", + "Ġre built", + "Ġreb uilt", + "L IGHT", + "/ se", + "/s e", + "- mount", + "-m ount", + "v pn", + "vp n", + "valid ated", + "validate d", + "( QObject", + "(Q Object", + "Ġign ition", + "ĠChar gers", + "ĠCharg ers", + "ĠCharge rs", + "ĠCharger s", + "RYPT O", + "]initWith Frame", + "Ġ Fluid", + "ĠFl uid", + "ĠFlu id", + "Ġca dre", + "Ġcad re", + "Ġnom inations", + "Ġnomin ations", + "Ġnomination s", + "Ne ill", + "Neil l", + "ĠH ou", + "ĠHo u", + "Ġcurrent s", + "Ġcurr ents", + "_ gene", + "_g ene", + "_gen e", + "_ge ne", + "( inp", + "(i np", + "(in p", + "P aris", + "Par is", + "Pa ris", + "z ÄĻ", + "ag gregate", + "Ġ assoc", + "Ġas soc", + "Ġass oc", + "we eted", + "weet ed", + "er rat", + "err at", + "erra t", + "âĢĵ ĊĊ", + "Ġ' /',Ċ", + "Ġ'/ ',Ċ", + "Ġ'/' ,Ċ", + "Ġ'/', Ċ", + "f ixture", + "fix ture", + "Ġ Highest", + "ĠH ighest", + "ĠHigh est", + "ĠHi ghest", + "amb ient", + "ambi ent", + "Ġ chmod", + "Ġch mod", + "Ġ conte", + "Ġc onte", + "Ġcon te", + "Ġcont e", + "Ġco nte", + "Ġs ensual", + "Ġsens ual", + "Ġgar ment", + "z ers", + "ze rs", + "zer s", + "Ġ Powered", + "ĠP owered", + "ĠPower ed", + "ĠPow ered", + "dom ains", + "domain s", + "R eward", + "Re ward", + "Rew ard", + "i omanip", + "Ġcock pit", + "out file", + "Ġ builtin", + "Ġb uiltin", + "Ġbuilt in", + "Ġins isting", + "Ġinsist ing", + ". vars", + ".v ars", + ".var s", + ".va rs", + "zip code", + "Ġ ����", + "Ġ� ���", + "f ails", + "fa ils", + "fail s", + "Ġconsolid ation", + "_ oid", + "_o id", + "Plan et", + "Plane t", + "Ġ =\",", + "Ġ= \",", + "Ġ=\" ,", + "ĉ el", + "ĉe l", + "U ILT", + "UI LT", + "UIL T", + "ä tz", + "ät z", + "af ari", + "afa ri", + "ĠMc Cl", + "ĠMcC l", + "T imeline", + "Time line", + "Tim eline", + "E sta", + "Est a", + "Es ta", + "Ġ fram", + "Ġf ram", + "Ġfr am", + "Ġfra m", + "Y E", + "Ġcere bral", + "Of Month", + "ĠP regn", + "ĠPre gn", + "Ġкл аÑģÑģ", + "ĠклаÑģ Ñģ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠF res", + "ĠFr es", + "ĠFre s", + "Ap proved", + "Appro ved", + ". Special", + ".S pecial", + ".Spec ial", + ".Sp ecial", + "ĠProte stant", + "ĠProtest ant", + "Ġall ergy", + "Ġallerg y", + "Ġaller gy", + "_ pcm", + "_p cm", + "_pc m", + "ĉ Copyright", + "ĉC opyright", + "Ġsuper Class", + "\" strconv", + "ĠMoh amed", + "Ġ' //", + "Ġ'/ /", + "Fore Color", + "Ar thur", + "Art hur", + "ĠJ ungle", + "ĠJun gle", + "ĠJu ngle", + "ĠJung le", + "Ġve ins", + "Ġvein s", + "S ad", + "Sa d", + "Ġback ups", + "Ġbackup s", + "ĠOp inion", + "û t", + "Ġinter mitt", + "o dyn", + "od yn", + "ody n", + "ĠChrist ina", + "Ġ andre", + "Ġand re", + "Ġan dre", + "Ġevac uation", + "p alette", + "pa lette", + "pal ette", + "h orse", + "hor se", + "ĠRes ident", + "ĠHas san", + "ĠHass an", + ". Nil", + ".N il", + "Ġa isle", + "Ġais le", + "Ġ Growing", + "ĠG rowing", + "ĠGr owing", + "ĠGro wing", + "ĠGrow ing", + "Ġblog info", + "/ sql", + "/s ql", + "_ ioctl", + "_io ctl", + "S caling", + "Sc aling", + "Ġ Monad", + "ĠMon ad", + "ĠMo nad", + "ĠMona d", + "_ cpp", + "_c pp", + "_cp p", + "ĠH utch", + "ĠHut ch", + "ĠApple WebKit", + "Exp ense", + "_ JOB", + "_J OB", + "_JO B", + "Ġpoint less", + "From Body", + "an tal", + "ant al", + "anta l", + "Ġdepict ing", + "Ġ CELL", + "ĠC ELL", + "ĠCE LL", + "ĠCEL L", + "Ġre fin", + "Ġref in", + "ĠC NC", + "ĠCN C", + "ì¹ ĺ", + "_ dimensions", + "_dim ensions", + "_dimension s", + "Ġ SAN", + "ĠS AN", + "ĠSA N", + "Ġ aft", + "Ġa ft", + "Ġaf t", + "Ġfoot steps", + "c coli", + "cc oli", + "cco li", + "_ PHONE", + "_P HONE", + "_PH ONE", + "/ math", + "/m ath", + "/mat h", + "- kind", + "-k ind", + "Ġ Means", + "ĠMe ans", + "ĠMean s", + "ich ael", + "icha el", + ". guna", + ".g una", + "Ġinaug uration", + "Ġinaugur ation", + "-dr iving", + "( delete", + "(de lete", + "(del ete", + "Ġ totalCount", + "Ġtotal Count", + "_ MC", + "_M C", + ". Extension", + ".Ext ension", + "Com mercial", + "Comm ercial", + "Ġz Index", + "< Customer", + "$", + "\"> $", + "Ġe bay", + "Ġeb ay", + "Ġc aptive", + "Ġca ptive", + "Ġcapt ive", + "pl iant", + "ĠCalculate s", + "ĠCalcul ates", + "ĠCalc ulates", + "ol ta", + "olt a", + "es ting", + "est ing", + "esti ng", + "_ revision", + "_re vision", + "_rev ision", + "Ġm ús", + "Ġmú s", + "+ m", + "\",\" \",\"", + "\",\"\", \"", + "WH AT", + "Ġcompass ionate", + "Ġcompassion ate", + "h arga", + "har ga", + "[ random", + "[r andom", + "[rand om", + "Ġ modulo", + "Ġmod ulo", + "( sn", + "(s n", + "Ġoccup ations", + "Ġoccupation s", + "/ ///Ċ", + "// //Ċ", + "//// Ċ", + "/// /Ċ", + "ĉ board", + "ĉb oard", + "ĠB alk", + "ĠBa lk", + "ĠBal k", + "w iÄħ", + "wi Äħ", + "Ġ Wifi", + "ĠW ifi", + "ĠWi fi", + ". Profile", + ".Pro file", + ".Pr ofile", + ": maj", + ":m aj", + "ĉ mat", + "ĉm at", + "LOCK S", + "LOC KS", + "(j Button", + "Ġ ('$", + "Ġ( '$", + "Ġ(' $", + "M ur", + "Mu r", + "æĮ ī", + "b ble", + "bb le", + "Ġ frog", + "Ġf rog", + "Ġfr og", + "Ġfro g", + "- hide", + "-h ide", + "Ġbroad caster", + "Ġbroadcast er", + "ภŀ", + "h aled", + "ha led", + "hal ed", + "Ġam using", + "_ predictions", + "_pre dictions", + "_pred ictions", + "_predict ions", + "_prediction s", + "_ intr", + "_in tr", + "_int r", + "Ġe agle", + "Ġea gle", + "Ġeag le", + "аÑĤ елÑĮ", + "аÑĤе лÑĮ", + "Ġ getList", + "Ġget List", + "ps ilon", + "psi lon", + "Ġcharacter ization", + "AR DS", + "ARD S", + "Ġre location", + "Ġrel ocation", + "Ġreloc ation", + "Ġr ulers", + "Ġrule rs", + "Ġru lers", + "Ġruler s", + "P AY", + "PA Y", + "ĠDef initely", + "_ Action", + "_A ction", + "_Act ion", + "Ġc losures", + "Ġclos ures", + "Ġclosure s", + "Ġf actual", + "Ġfact ual", + "Ġfac tual", + "o dynamic", + "od ynamic", + "odyn amic", + "odynam ic", + "Ġpreca utions", + "Ġprecaution s", + "n iej", + "ni ej", + "nie j", + "ĠPart ies", + "ĠPar ties", + "ĠParti es", + "ĠSub aru", + "ĠSu baru", + "Ġcous ins", + "Ġcousin s", + "ar beit", + ". money", + ".m oney", + ".mo ney", + ".mon ey", + "g unta", + "gun ta", + "( and", + "(a nd", + "(an d", + "get item", + ".Style Priority", + "Ġs lid", + "Ġsl id", + "s ingleton", + "single ton", + "sing leton", + "Ġg arn", + "Ġgar n", + "Ġga rn", + "ĠP AS", + "ĠPA S", + "Ġd azz", + "Ġda zz", + "a ż", + "Ġbog us", + "ĠM og", + "ĠMo g", + "Ġrival ry", + "i sol", + "is ol", + "iso l", + "Ġland marks", + "Ġlandmark s", + "ñ as", + "ña s", + "B ern", + "Be rn", + "Ber n", + "ĠS achs", + "ĠSa chs", + "ĠSac hs", + "ĠSach s", + "Ġ \")ĊĊ", + "Ġ\" )ĊĊ", + "Ġ\") ĊĊ", + "Ġ\")Ċ Ċ", + "Ġhost ility", + "Ġhos tility", + "_m ex", + "_me x", + "m ere", + "mer e", + "me re", + "M ot", + "Mo t", + "p ictureBox", + "picture Box", + "Def ense", + "Ġaffid avit", + "other wise", + ". directory", + ".d irectory", + ".direct ory", + "_ UnityEngine", + "_Un ityEngine", + "- blog", + "-b log", + "-bl og", + ". skin", + ".s kin", + ".sk in", + "p hem", + "ph em", + "phe m", + "Ap ellido", + "er chant", + "[ class", + "[c lass", + "Ġ wart", + "Ġw art", + "Ġwar t", + "Ġwa rt", + ". \"[", + ".\" [", + "a leur", + "al eur", + "ale ur", + "/ back", + "/b ack", + "ĠĠĠĠ ĉĠĠĠ", + "ĠĠĠ ĠĉĠĠĠ", + "ĠĠĠĠĉ ĠĠĠ", + "ĠĠĠĠĉĠ ĠĠ", + "Ġprecip itation", + "Ġob struction", + "Ġobstruct ion", + "Ġp Obj", + "Ġ rupt", + "Ġr upt", + "Ġru pt", + "U CKET", + "UCK ET", + "a ye", + "ay e", + "æİ Ĵ", + "g x", + "Ġe cl", + "Ġec l", + "Ġsecre cy", + "/ Header", + "ĠLe sb", + "ĠLes b", + "Ġ lei", + "Ġl ei", + "Ġle i", + "Ġ Bulletin", + "ĠBull etin", + "ĠBullet in", + "Ġgive away", + ". Home", + ".H ome", + "_ ROOM", + "_R OOM", + "_RO OM", + "\" W", + "Ġco work", + "Ġcow ork", + "_ ra", + "_r a", + "ĠC ycling", + "ĠCy cling", + "ĠCycl ing", + "ĠCyc ling", + "ĠP aw", + "ĠPa w", + "Ġp upil", + "Ġpup il", + "/ arch", + "/a rch", + "/ar ch", + "ĠFile Utils", + "é¦ ĸ", + "r sp", + "rs p", + "Ġfreedom s", + "Ġfreed oms", + "ĠL ear", + "ĠLe ar", + "} `).", + "}` ).", + "Ġbow ls", + "Ġbowl s", + "/ block", + "/b lock", + "/bl ock", + "_ logging", + "_log ging", + "Ġme thane", + "Ġmeth ane", + "Ġh orns", + "Ġhor ns", + "Ġhorn s", + "Ġwonder fully", + "Ġwonderful ly", + "Ġalter ations", + "Ġalteration s", + "Ġex ile", + "l sen", + "ls en", + "lse n", + "_ pause", + "_p ause", + "_pa use", + "_ LANGUAGE", + "_L ANGUAGE", + "_LANG UAGE", + "ĠUS DA", + "ĠUSD A", + "_ mysql", + "_m ysql", + "_my sql", + "_AM OUNT", + "ĠL IFE", + "ĠLI FE", + "Ġyoung sters", + "Ġyoungster s", + "Ġri ots", + "Ġriot s", + "Ġrio ts", + "[ E", + "Ġun forgettable", + ", },Ċ", + "Dis posed", + "Dispose d", + "Disp osed", + "ĠAss assin", + "ĠAssass in", + "U NG", + "UN G", + "ĠNew sp", + "ĠNews p", + "User Service", + ": aload", + ":a load", + "+ ',", + "+' ,", + "Ġsett lers", + "Ġsettle rs", + "Ġscre ams", + "Ġscream s", + "Ġincon venience", + ". Rotate", + ".R otate", + "Ġj ars", + "Ġja rs", + "Ġjar s", + "ĠP uzzle", + "ĠPu zzle", + "Ġm est", + "Ġme st", + "Ġmes t", + "ar si", + "ars i", + "ĠS harma", + "ĠSh arma", + "ĠShar ma", + "| (", + ". ds", + ".d s", + "ĠSa cred", + "ĠSac red", + "ĠSacr ed", + "_ evt", + "_e vt", + "_ev t", + "Ġexp resses", + "Ġexpress es", + "Ġexpr esses", + "Ġexpres ses", + "Ġh och", + "Ġho ch", + "Ġhoc h", + "ĠD uch", + "ĠDu ch", + "ĠDuc h", + ". calls", + ".c alls", + ".call s", + ".cal ls", + "t hr", + "th r", + "ĠShe ffield", + ". AlertDialog", + ".Alert Dialog", + "Ġrad ically", + "Ġradical ly", + "Ġt rous", + "Ġtr ous", + "Ġtro us", + "Ġtrou s", + "Ġprev ailing", + "Ġprevail ing", + "ĠWW II", + "âĢĻ n", + "ens ely", + "ense ly", + "Ġ Yesterday", + "ĠY esterday", + "ĠSir ius", + "ĠSiri us", + "Ġkill ers", + "Ġkil lers", + "Ġkiller s", + "Ġ FFT", + "ĠF FT", + "ĠFF T", + "Ġ oval", + "Ġo val", + "Ġov al", + "' ):čĊ", + "') :čĊ", + "'): čĊ", + "Ġ ìłķë³´", + "Ġìłķ ë³´", + "ou rage", + "our age", + "Ġ Checkbox", + "ĠCheck box", + "Work book", + ". defer", + ".de fer", + ".def er", + "_ floor", + "_f loor", + "_fl oor", + "Ġc ouncill", + "Ġcouncil l", + "Ġnors ke", + "Ġnorsk e", + "m oil", + "mo il", + "o rea", + "or ea", + "ore a", + "Ġmark eted", + "Ġmarket ed", + "_ SUR", + "_S UR", + "_SU R", + "x AA", + "xA A", + "Ġst ained", + "Ġsta ined", + "Ġstain ed", + "e ut", + "eu t", + "ĠM eng", + "ĠMe ng", + "ĠMen g", + "Ġ ieee", + "Ġi eee", + "Ġie ee", + ". extern", + ".ex tern", + ".ext ern", + "e gie", + "eg ie", + "Ġr app", + "Ġrap p", + "Ġra pp", + "ĠPy ongyang", + "' class", + "M ob", + "Mo b", + "Ġinitial Value", + "_ wave", + "_w ave", + "Ġ jab", + "Ġj ab", + "Ġja b", + "Ġmascul ine", + "Ġampl ifier", + "Ġ tty", + "Ġt ty", + "Ġtt y", + "Path Component", + "_ xt", + "_x t", + "ĠG FP", + "ĠGF P", + "/ sec", + "/s ec", + "/se c", + "ĉ dispatch", + "ĉdis patch", + "mark down", + "ĠS chn", + "ĠSc hn", + "ĠSch n", + "b ole", + "bo le", + "bol e", + "· ·", + "mouse move", + "Ġ errMsg", + "Ġerr Msg", + "Ġa sign", + "Ġas ign", + "Ġasi gn", + "_ mono", + "_m ono", + "_mon o", + "_mo no", + "To Selector", + "ĠZ u", + "( Rect", + "(R ect", + "Ġ ErrorCode", + "ĠError Code", + "l atin", + "la tin", + "lat in", + "ang ible", + "angi ble", + "v tk", + "vt k", + "CG Size", + "P okemon", + "Pok emon", + "Ġclass mates", + "Ġat tracts", + "Ġattr acts", + "Ġattract s", + "ĠT atto", + "ĠTat to", + "ul tan", + "ult an", + "ulta n", + "ol óg", + "Ġh alted", + "Ġhal ted", + "Ġhalt ed", + "ठ¨", + "ĠK art", + "ĠKar t", + "ĠKa rt", + "Ġ ue", + "Ġu e", + "_Init Structure", + "_InitStruct ure", + "Test Class", + "ĠAir bnb", + "_ \",", + "_\" ,", + "Ġchar coal", + "Ġ ipc", + "Ġi pc", + "Ġip c", + "Ġ Stretch", + "ĠSt retch", + "ĠStr etch", + ".g lide", + ".gl ide", + "lates AutoresizingMaskIntoConstraints", + "Ġp otion", + "Ġpo tion", + "Ġpot ion", + "ITT LE", + "Ġcount ert", + "Ġcounter t", + "_ hd", + "_h d", + "pre pared", + "prepare d", + "prep ared", + "A ds", + "Ad s", + "ĠV ampire", + "ro bots", + "robot s", + "rob ots", + ".Create Index", + "Status Label", + "Ġt ucked", + "af ür", + "U t", + "Ġswe ater", + "Ġsweat er", + "_ FN", + "_F N", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġĉ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĉ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĉ", + "at aka", + "ata ka", + "atak a", + "Ġeyeb rows", + "Ġeyebrow s", + "a coes", + "ac oes", + "aco es", + "u den", + "ud en", + "ude n", + ".Linear LayoutManager", + ".LinearLayout Manager", + "Ġs way", + "Ġsw ay", + "Ġmult in", + "Ġmulti n", + "Ġmul tin", + "( ))))Ċ", + "() )))Ċ", + "()) ))Ċ", + "())) )Ċ", + "()))) Ċ", + "Ġ NSUInteger", + "ĠNS UInteger", + "ĠMy Base", + "P artner", + "Part ner", + "uts chen", + "utsch en", + "utsche n", + "ĠC ater", + "ĠCa ter", + "ĠCat er", + ".set BackgroundColor", + ".setBackground Color", + "Ġaccompl ishment", + "Ġaccomplish ment", + "_ problem", + "_pro blem", + "_prob lem", + ".d td", + ".dt d", + "Ġ pageNumber", + "Ġpage Number", + "ĠpageNum ber", + "Ġj ackets", + "Ġjack ets", + "Ġjacket s", + "Ġc ropped", + "Ġcr opped", + "Ġcro pped", + "Ġcrop ped", + "u els", + "ue ls", + "uel s", + "ĠH ep", + "ĠHe p", + "Ġc apped", + "Ġcap ped", + "Ġca pped", + "* Math", + "*M ath", + "_ callbacks", + "_callback s", + "_call backs", + "Ġp ubb", + "Ġpub b", + "Ġpu bb", + "ĠBrun swick", + ". respond", + ".res pond", + ".resp ond", + "[ \"_", + "[\" _", + "Ġbed ding", + "hyth m", + "O X", + "( speed", + "(s peed", + "(sp eed", + "Ġpest icides", + "Ġpestic ides", + "Ġpesticide s", + "Ġ -------", + "Ġ- ------", + "Ġ-- -----", + "Ġ---- ---", + "Ġ--- ----", + "Ġ----- --", + "Ġ------ -", + ". Blue", + ".B lue", + ".Bl ue", + "Ġn oodles", + "Ġnood les", + "ĠG oes", + "ĠGo es", + "Ġs aver", + "Ġsa ver", + "Ġsave r", + "Ġsav er", + "o xy", + "ox y", + "_ completion", + "_com pletion", + "_comp letion", + "ĠSw inger", + "ĠSwing er", + "Ġ getDate", + "Ġget Date", + "Ġm inded", + "Ġmin ded", + "Ġmind ed", + "int egration", + "integr ation", + "ĠLot us", + "( stop", + "(s top", + "(st op", + "(', ');Ċ", + "(',' );Ċ", + "(',') ;Ċ", + "Ġfl oods", + "Ġflo ods", + "Ġflood s", + "Ġ Workflow", + "ĠWork flow", + "Ġe rupted", + "Ġerupt ed", + "M acro", + "Mac ro", + "Ma cro", + "ĠS auce", + "ĠSa uce", + "ĠSau ce", + "Ġ eventName", + "Ġevent Name", + "\\ Input", + "Break ing", + "Bre aking", + "ĉ when", + "ĉw hen", + "_ pw", + "_p w", + "I NDER", + "IN DER", + "IND ER", + "ĠWell ness", + "Ġv oxel", + "Ġvox el", + "ĠM ell", + "ĠMe ll", + "ĠMel l", + "Ġ MEDIA", + "ĠM EDIA", + "ĠMED IA", + "S ENS", + "SE NS", + "SEN S", + "ĠF unds", + "ĠFund s", + "ĠFun ds", + "ĠFu nds", + "ĠM ild", + "ĠMil d", + "ĠMi ld", + "< Array", + "Ċ", + "') ;?>Ċ", + "'); ?>Ċ", + "');?> Ċ", + "Ġtemp ting", + "Ġtempt ing", + "Ġtest ament", + "Ġb ible", + "Ġbi ble", + "Ġbib le", + "Ġconsult ed", + "Ġconsul ted", + "ĠIndex Error", + "è¨ ĺ", + "Ġkey pad", + "Ġke ypad", + "i zzo", + "iz zo", + "izz o", + "( ok", + "(o k", + "Ġwh atsapp", + "Ġwhats app", + "ĠRemote Exception", + "Ġte amed", + "Ġteam ed", + "Ġtea med", + "âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ", + "» ,", + "Ġ getTime", + "Ġget Time", + "d iag", + "di ag", + "dia g", + "is sy", + "iss y", + "Ġ hed", + "Ġh ed", + "Ġhe d", + "Ġkn ots", + "Ġknot s", + "j om", + "jo m", + "Ġf unnel", + "Ġfun nel", + "-m ails", + "-mail s", + "Ġexp orting", + "Ġexport ing", + "Ġ VL", + "ĠV L", + "ĠK arn", + "ĠKar n", + "ĠKa rn", + "ĠBuddh ism", + "ĠAl lan", + "ĠAll an", + "ĠAlla n", + "_R ADIUS", + "Ġw ording", + "Ġword ing", + "Ġwor ding", + "Ġ Forget", + "ĠF orget", + "ĠFor get", + "ĠForge t", + "ĠForg et", + "ĠCor ona", + "ĠCoron a", + "i phy", + "ip hy", + "iph y", + "Ġlim burg", + "Ġlimb urg", + "ug gy", + "ugg y", + "ĠUser Repository", + "i min", + "im in", + "imi n", + "( ele", + "(e le", + "(el e", + "Ġlabel led", + "Ġlab elled", + "ç¤ ¾", + "ĠH erman", + "ĠHer man", + "ĠHerm an", + ". qq", + ".q q", + "Ġ \"));Ċ", + "Ġ\" ));Ċ", + "Ġ\") );Ċ", + "Ġ\")) ;Ċ", + "ie ber", + ". Translate", + ".Trans late", + "r yn", + "ry n", + "Ġdes env", + "Ġdese nv", + "u md", + "um d", + "Sim ply", + "ĉ mode", + "ĉm ode", + "ĉmod e", + "R pc", + "Rp c", + "ĠVal encia", + "ĠVale ncia", + "Ġstaff ers", + "Ġstaffer s", + "Ġse lv", + "Ġsel v", + "ĠS pike", + "ĠSp ike", + "ĠSpi ke", + "Ġd elic", + "Ġde lic", + "Ġdel ic", + "Ġ eru", + "Ġe ru", + "Ġer u", + "_ DT", + "_D T", + "J udge", + "Jud ge", + "Ju dge", + "á» ķ", + "ĠB asin", + "ĠBa sin", + "ĠBas in", + ". mutable", + ".m utable", + ".mu table", + "\" url", + "Ġtar iff", + "Ġtarif f", + "ĠSlee ve", + "ĠSle eve", + "Ġ flare", + "Ġfl are", + "Ġfla re", + ". dropout", + ".drop out", + "Ġb rides", + "Ġbr ides", + "Ġbri des", + "Ġbride s", + "Ġbrid es", + ") ),čĊ", + ")) ,čĊ", + ")), čĊ", + "_ constraints", + "_con straints", + "_constraint s", + "d estruct", + "de struct", + "Out line", + "Ġdisappe ars", + "Ġdisappear s", + "_ locked", + "_l ocked", + "_lock ed", + "_loc ked", + "ĠNS LocalizedString", + "c ke", + "ck e", + "ĉ null", + "ĉn ull", + "ad resse", + "adr esse", + "adress e", + "Ġt opping", + "Ġto pping", + "Ġtop ping", + "Ġtopp ing", + "ĠJ oker", + "ĠJo ker", + "b ishop", + "bi shop", + "bis hop", + "bish op", + "н оÑģÑĤÑĮ", + "но ÑģÑĤÑĮ", + "ноÑģÑĤ ÑĮ", + "ноÑģ ÑĤÑĮ", + "and ering", + "ander ing", + "ande ring", + "_ amp", + "_a mp", + "_am p", + "= time", + "=t ime", + "_ Space", + "_S pace", + "_P ULL", + "' =", + "Ġant iqu", + "Ġanti qu", + "Ġc ach", + "Ġca ch", + "Ġcac h", + "_ __ĊĊ", + "__ _ĊĊ", + "___ ĊĊ", + "O NES", + "ON ES", + "ONE S", + "о Ñı", + "Ġ unread", + "Ġun read", + "Ġunre ad", + "Ġunr ead", + ". policy", + ".p olicy", + ".pol icy", + "oooo oooo", + "ëŁ ¬", + "Ġ usted", + "Ġu sted", + "Ġus ted", + "Ġust ed", + "ĠR ece", + "ĠRe ce", + "ĠRec e", + "Ġal lem", + "Ġall em", + "Ġalle m", + "ãĥ¼ ãĤ¹", + "ãĥ¼ãĤ ¹", + "ĠThough ts", + "ĠThought s", + "ve illance", + "i strate", + "ist rate", + "istr ate", + "istra te", + "istrat e", + "_ lane", + "_l ane", + "_la ne", + "Ġf amed", + "Ġfam ed", + "Ġfa med", + "Ġfame d", + ". GetName", + ".Get Name", + "Ġsmooth er", + "Ġsmo other", + "Ġ Qualified", + "ĠQual ified", + "a zers", + "az ers", + "aze rs", + "azer s", + "_ geo", + "_g eo", + "_ge o", + "F ax", + "Fa x", + "ĠM inds", + "ĠMin ds", + "ĠMi nds", + "ĠMind s", + "Ġ Raises", + "ĠR aises", + "ĠRa ises", + "ĠRaise s", + "ĠRai ses", + "Ġtrans cripts", + "Ġtran scripts", + "Ġtranscript s", + "Con versation", + "Ġre marked", + "Ġrem arked", + "Ġremark ed", + "Ġremar ked", + "ëĤ ĺ", + "d ling", + "dl ing", + "Ġdeploy ing", + "Ġshared Application", + "Ġ kp", + "Ġk p", + "FontAwesome Icon", + "_ dummy", + "_d ummy", + "re iben", + "reib en", + "rei ben", + "ĠJane iro", + "Dir ections", + "Direction s", + "Direct ions", + "Di rections", + "Dire ctions", + ".get Bean", + ".getB ean", + "s ass", + "sa ss", + "Ġcomm anders", + "Ġcommand ers", + "Ġcommander s", + "Ġcommande rs", + "v ation", + "va tion", + "vat ion", + "error Code", + "ĠAl loy", + "ĠAll oy", + ". localized", + ".local ized", + "Ð ij", + "Ġdish washer", + "Ġ Soup", + "ĠS oup", + "ĠSo up", + "ĠSou p", + "N u", + "_ Default", + "_D efault", + "_De fault", + "_Def ault", + "Ġun even", + "Ġune ven", + "Ġ />\";Ċ", + "Ġ/ >\";Ċ", + "Ġ/> \";Ċ", + "- Based", + "-B ased", + "Ġseam lessly", + "Ġseamless ly", + "- null", + "-n ull", + "Ġ XC", + "ĠX C", + "Ġst ew", + "Ġste w", + "( delay", + "(d elay", + "(de lay", + "(del ay", + "AT ORS", + "ATOR S", + "ATO RS", + "ĠWhe eler", + "ĠWheel er", + "\" H", + "e ast", + "ea st", + ". air", + ".a ir", + ".ai r", + "âĢľ But", + "Object Context", + "success fully", + "successful ly", + "_ land", + "_l and", + "_la nd", + "Ġf olds", + "Ġfol ds", + "Ġfold s", + "Ġfo lds", + "_ COORD", + "_CO ORD", + "Ġsub po", + ".get Address", + ".g etAddress", + "in str", + "ins tr", + "inst r", + "Material s", + "Ñĥ ÑģÑĤ", + "ÑĥÑģ ÑĤ", + "de posit", + "dep osit", + "- last", + "-l ast", + "-la st", + "_ GRAY", + "_G RAY", + "_GR AY", + "_GRA Y", + "= find", + "=f ind", + "Ġmut ant", + "Ġmu tant", + "Ġlesb ienne", + "Ġlesbi enne", + "let cher", + "R OUGH", + "RO UGH", + "ur eka", + "ure ka", + ". capture", + ".c apture", + ".cap ture", + "Ġ enn", + "Ġe nn", + "Ġen n", + "Ġ ([[", + "Ġ( [[", + "Ġ([ [", + "ĠF lu", + "ĠFl u", + "Ġ taskId", + "Ġtask Id", + "ĠHus sein", + "ĠHuss ein", + ". folder", + ".f older", + ".fold er", + "Ġa usterity", + "IST RATION", + "ISTR ATION", + "_ Impl", + "_I mpl", + "注 æĦı", + "Ġdec ree", + "Ġdecre e", + "- chat", + "-c hat", + "-ch at", + "Ġim plication", + "Ġimp lication", + "Ġimpl ication", + "Ġimplic ation", + "Ġgu esses", + "Ġguess es", + "ul kan", + "ulk an", + "An alytics", + "Analy tics", + ". plus", + ".p lus", + ".pl us", + "COM MAND", + "COMM AND", + "е ли", + "ел и", + "» ĊĊ", + "»Ċ Ċ", + "_ SITE", + "_S ITE", + "_SI TE", + "Ġ equalTo", + "Ġequal To", + "Support FragmentManager", + "Ġ Recording", + "ĠRec ording", + "ĠRecord ing", + "å®Į æĪIJ", + "Ġbag gage", + "Ġpitch ers", + "Ġpit chers", + "Ġpitcher s", + "ĠE h", + "o que", + "oq ue", + "ĉ cnt", + "ĉc nt", + "Ġ =>$", + "Ġ= >$", + "Ġ=> $", + "/ foo", + "/f oo", + "I RA", + "IR A", + "ĠSat ellite", + "bo rah", + "bor ah", + "Ġ }}\"Ċ", + "Ġ} }\"Ċ", + "Ġ}} \"Ċ", + "Ġ}}\" Ċ", + "ĠE nds", + "ĠEn ds", + "ĠEnd s", + "ĠS pray", + "ĠSp ray", + "ĠSpr ay", + ", param", + ",p aram", + ". Chrome", + ".Ch rome", + "* q", + "th ought", + "though t", + "ib rated", + "ibr ated", + "ibrate d", + "Ġth ieves", + "Ġbenefici aries", + "En tered", + "Ent ered", + "Enter ed", + "ottes ville", + "otte sville", + "Ġveter in", + "Ġvet erin", + "By ID", + "qu ipe", + "quip e", + "qui pe", + "um ption", + "ump tion", + "umpt ion", + "- unit", + "-un it", + "-u nit", + "Execution Context", + "@ s", + "ĠG iov", + "ĠGi ov", + "ĠGio v", + ". ToolTip", + ".Tool Tip", + "_ friend", + "_f riend", + "( attributes", + "(at tributes", + "(attribute s", + "Ġd umping", + "Ġdump ing", + "Ġdum ping", + "Ġ JC", + "ĠJ C", + "_ DOCUMENT", + "_D OCUMENT", + "_DOC UMENT", + "ĠAr mour", + "ĠArm our", + "( insert", + "(in sert", + "(ins ert", + ". HorizontalAlignment", + ".Horizontal Alignment", + "Ġ Qed", + "ĠQ ed", + "ãģĦ ãģ¾ãģĻ", + "/ git", + "/g it", + "Ġ YYYY", + "ĠY YYY", + "ĠYY YY", + "ĠCar diff", + "ĠCard iff", + "Ġ apa", + "Ġa pa", + "Ġap a", + "org anic", + "organ ic", + "ĠWhere as", + "ĠWhe reas", + "Ġ æĿ", + "Ġæ Ŀ", + "ĠM ia", + "ĠMi a", + "Ġdemol ition", + "Ġs cars", + "Ġsc ars", + "Ġsca rs", + "Ġscar s", + "Ġ pai", + "Ġp ai", + "Ġpa i", + "Ġre tries", + "Ġret ries", + "Ġretrie s", + "Ġretr ies", + "Ġ rq", + "Ġr q", + "ĠD enis", + "ĠDe nis", + "ĠDen is", + "( Utils", + "(Util s", + "Ġallev iate", + "Ġ PIC", + "ĠP IC", + "ĠPI C", + "i due", + "id ue", + "Ġacknowled ging", + "Ġ// ////////////////////////////////", + "Ġ////////////////// ////////////////", + "ç¡® å®ļ", + "Ä «", + "\\ Json", + ". binary", + ".b inary", + ".bin ary", + "Ġx type", + "Ġxt ype", + "sign als", + "signal s", + "Ġ Appearance", + "ĠAp pearance", + "& r", + "} s", + "C i", + "ĠI llum", + "ĠIl lum", + "ĠIll um", + "p orate", + "por ate", + "po rate", + "pora te", + "h og", + "ho g", + "Ġ indexOf", + "Ġindex Of", + "\\ Command", + "_ parallel", + "_par allel", + "ĠSher lock", + "í ĥ", + "Ġ\" \")čĊ", + "Ġ\"\" )čĊ", + "Ġ\"\") čĊ", + "//////////////// ////////////////////////////////////////////////////////////////////////////////", + "//////////////////////////////// ////////////////////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////// ////////////////////////////////", + "//////////////////////////////////////////////// ////////////////////////////////////////////////", + "//////////////////////////////////////////////////////////////////////////////// ////////////////", + "Ġcritic ize", + "Ġ Soap", + "ĠSo ap", + "Ġ Matcher", + "ĠM atcher", + "ĠMat cher", + "ĠMatch er", + "Ġgr illed", + "Ġgrill ed", + "Ġgrille d", + "* T", + "Ġad ore", + "Ġado re", + "ul ling", + "ull ing", + "Ġje doch", + "Ġjed och", + "_ refs", + "_re fs", + "_r efs", + "_ref s", + "lean up", + "ĠJ AXB", + "ĠJA XB", + "Ġr oses", + "Ġro ses", + "Ġrose s", + "Ġros es", + "ĠL iam", + "ĠLi am", + "ĠLia m", + "size i", + "siz ei", + "Ġget char", + "Ġgetch ar", + "Ġt arde", + "Ġtar de", + "Ġtard e", + "- tooltip", + "-to oltip", + "-tool tip", + "Ġqual ifier", + "Ġ Intermediate", + "ĠInter mediate", + "_ Window", + "_W indow", + "ĠM alta", + "ĠMal ta", + "Dis connect", + "e where", + "ew here", + "C ampo", + "Cam po", + "Camp o", + "Ġirr ational", + "l edo", + "le do", + "led o", + "Ġ DN", + "ĠD N", + "AR GV", + "ARG V", + "Ġout ro", + "Ġou tro", + "Ġoutr o", + "Ġth irteen", + "Jose ph", + "Jos eph", + "M AR", + "MA R", + "/ gl", + "/g l", + "J ess", + "Je ss", + "ĠPsych iat", + "Ġpadding Bottom", + "- loop", + "-l oop", + "-lo op", + "/ fonts", + "/font s", + "_ seen", + "_s een", + "_se en", + "Te ams", + "Team s", + "React DOM", + "( man", + "(m an", + "( xpath", + "(x path", + ". getSimpleName", + ".get SimpleName", + "> (*", + ">( *", + "ĠP vt", + "ĠPv t", + "Ġel ders", + "Ġelder s", + "Ġelde rs", + "Ġ pies", + "Ġp ies", + "Ġpie s", + "Ġpi es", + ".user Agent", + "- region", + "-reg ion", + "ĠGre eks", + "ĠGreek s", + "ĠGree ks", + "( fragment", + "(f ragment", + "(fr agment", + "s tu", + "st u", + "Ġcouncil s", + "Ġst amina", + "Ġsta mina", + "ĠGod dess", + "è ¥¿", + "è¥ ¿", + "Ġphilosoph ers", + "Ġphilosopher s", + "Ġperson e", + "Ġpers one", + "Ġperso ne", + "ĠL ose", + "ĠLo se", + "ĠLos e", + "Ġ CLR", + "ĠC LR", + "ĠCL R", + "Ġ Docs", + "ĠD ocs", + "ĠDo cs", + "ĠDoc s", + "Ġso ak", + "Ġ HOLDER", + "ĠH OLDER", + "ĠHOLD ER", + "ĠHOL DER", + "Ġb ells", + "Ġbel ls", + "Ġbell s", + "hash Code", + "R ATE", + "RA TE", + "_WE IGHT", + "in ous", + "ino us", + "inou s", + "en dra", + "end ra", + "oph obic", + "Ġp rose", + "Ġpro se", + "Ġpr ose", + "Ġpros e", + "Ġf inely", + "Ġfin ely", + "Ġfine ly", + "/ oauth", + "/o auth", + "( space", + "(s pace", + "(sp ace", + "a dge", + "ad ge", + "ĠM ama", + "ĠMa ma", + "ĠMam a", + "Ġstring Buffer", + "Ġst int", + "Ġm isma", + "Ġmis ma", + "Ġmism a", + "Ġvill ains", + "Ġvillain s", + "Ġvilla ins", + "ĠCrime a", + "Ġdipl oma", + "Ġdiplom a", + "Ġпо Ñģл", + "ĠпоÑģ л", + "ĠB ea", + "ĠBe a", + "( join", + "(j oin", + "Ġ íķ´", + "Ġíķ ´", + "CH AT", + "CHA T", + "p ering", + "pe ring", + "per ing", + "peri ng", + "ĠC ros", + "ĠCr os", + "ĠCro s", + "Ġmon keys", + "Ġmonkey s", + "Ġp reds", + "Ġpr eds", + "Ġpre ds", + "Ġpred s", + "y la", + "yl a", + ", ,,", + ",, ,", + "Ġv ibrator", + "Ġvibr ator", + "Ġ NU", + "ĠN U", + "åħ Ī", + "f ant", + "fa nt", + "fan t", + "z et", + "ze t", + "Ġb ietet", + "un ft", + "s worth", + "sw orth", + ". Flow", + ".F low", + ".Fl ow", + "Ġpsych ed", + "Ġpsy ched", + "Ġpsyche d", + "ĠContin ental", + "ĠContinent al", + "> t", + "Ġqu ilt", + "Ġq uilt", + "Ġqui lt", + "Ġquil t", + ". UP", + ".U P", + "Ġexpans ive", + "Dis pose", + "Disp ose", + "( language", + "(l anguage", + "C aps", + "Cap s", + "Ca ps", + "_ ZONE", + "_Z ONE", + "Ġre cycle", + "Ġr ecycle", + "Ġrec ycle", + "Ġrecycl e", + "Ġ Managed", + "ĠMan aged", + "ĠManage d", + "ĠMana ged", + "current Color", + ". broadcast", + ".b roadcast", + "sign In", + ". prom", + ".p rom", + ".pro m", + ".pr om", + "l lu", + "ll u", + "ue blo", + "Ġpun ches", + "Ġpunch es", + "Ġaut omat", + "Ġauto mat", + "Ġautom at", + "Ġassign ing", + "Ġcreate User", + "ĠAl lied", + "ĠAll ied", + "Ġcon ductor", + "Ġconduct or", + "Ġcond uctor", + "Ġconduc tor", + "Ġcondu ctor", + "Ĥ ¨", + "Ġs addle", + "Ġsad dle", + "Ġsadd le", + "Ġ dni", + "Ġd ni", + "Ġdn i", + "o medical", + "omed ical", + "- West", + "-W est", + "Positive Button", + "Ġ italic", + "Ġit alic", + "? [", + "( trigger", + "(tr igger", + "Ġele phants", + "Ġelephant s", + "\":\" \",\"", + "\":\"\" ,\"", + "Ġcal iber", + "raft ed", + "raf ted", + "d igits", + "digit s", + "dig its", + "Ġ marshal", + "Ġm arshal", + "Ġmar shal", + "Ġmarsh al", + "Ġmars hal", + "m illiseconds", + "mill iseconds", + "m arkers", + "mark ers", + "mar kers", + "marker s", + "m om", + "mo m", + "/ place", + "/p lace", + "/pl ace", + "Ġhol istic", + ": t", + "# ,", + "Ġb oto", + "Ġbo to", + "Ġbot o", + "Ġnause a", + "Ġnau sea", + "ĠSh ooting", + "ĠShoot ing", + "ĠSho oting", + "i tech", + "it ech", + "ite ch", + "Ġtext Status", + "< Class", + " ())Ċ", + ">( ))Ċ", + ">() )Ċ", + ">()) Ċ", + "ADD RESS", + "ADDR ESS", + "B ST", + "BS T", + "et zt", + "etz t", + "ĠQ gs", + "S ense", + "Sen se", + "Exception Handler", + "ĠC hu", + "ĠCh u", + ".get OwnProperty", + "Ġexerc ised", + "Ġexercise d", + "i otic", + "io tic", + "iot ic", + "ĠRe leases", + "ĠRelease s", + "Ġp interest", + "o lie", + "ol ie", + "oli e", + "i soft", + "is oft", + "iso ft", + "Ġsequ encing", + "Ġpa dre", + "Ġpad re", + "Ġpadr e", + "] ));čĊ", + "]) );čĊ", + "])) ;čĊ", + "])); čĊ", + "( radius", + "(r adius", + "(rad ius", + ". med", + ".m ed", + ".me d", + "ain ties", + "aint ies", + ".Object Model", + "Ġ emple", + "Ġem ple", + "Ġemp le", + "Ġseg uro", + "Ġsegu ro", + "St ars", + "Star s", + "Ġqual itative", + "le mn", + "lem n", + "á» ±", + "> \").", + ">\" ).", + ">\") .", + "Ġ gx", + "Ġg x", + "- cert", + "-c ert", + "-ce rt", + "ĠA STM", + "ĠAS TM", + "ĠAST M", + "Ġ fullname", + "Ġfull name", + "Ġful lname", + "Ġte lemetry", + "Ġtele metry", + "ĠCamb odia", + "_ ul", + "_u l", + "ĠCl are", + "ĠClar e", + "ĠCla re", + "C USTOM", + "Q C", + "ĠU ns", + "ĠUn s", + "Ġ HTTPS", + "ĠHTTP S", + "ĠPar kinson", + "ĠPark inson", + "ancy box", + "', '.", + "',' .", + "T ue", + "Tu e", + ". getLast", + ".get Last", + "Ġ abi", + "Ġa bi", + "Ġab i", + "Äħ d", + "A st", + "As t", + "Ġ Editing", + "ĠEd iting", + "ĠEdit ing", + ". Unity", + ".Un ity", + ".Unit y", + "j mp", + "jm p", + "Ġm ats", + "Ġmat s", + "Ġma ts", + "Ġshared Preferences", + "Cap tain", + "Capt ain", + ". pageSize", + ".page Size", + "Ġ rtl", + "Ġr tl", + "Ġrt l", + "Ġan meld", + "Runtime Object", + "Ġdem ande", + "Ġdemand e", + "( \";", + "(\" ;", + "se ite", + "sei te", + "- headed", + "-head ed", + "-he aded", + "ĠK ra", + "ĠKr a", + "Ġ FONT", + "ĠF ONT", + "ĠFO NT", + "` \\", + "Class NotFoundException", + ". avg", + ".a vg", + ".av g", + "a tical", + "at ical", + "atic al", + "ati cal", + "atica l", + "A j", + "Ġpermit ting", + "Ġperm itting", + "P roj", + "Pro j", + "Pr oj", + "ERR Q", + "Ġcre ampie", + "Ġcream pie", + "ĠBuy er", + "ĠBu yer", + "- modules", + "-mod ules", + "-module s", + "ĠSunday s", + "ĠSun days", + "ĠSund ays", + "| `Ċ", + "Ġday time", + "Ġ +(", + "Ġ+ (", + "Ġgl itch", + "Ġ Operand", + "ĠOper and", + "ĠOpera nd", + "Ġtox ins", + "Ġtoxin s", + "i nya", + "in ya", + "iny a", + "D NS", + "DN S", + "ĠS as", + "ĠSa s", + "C ake", + "Ca ke", + "ĠNational s", + "ĠNation als", + ". addTo", + ".add To", + "Ġs inking", + "Ġsin king", + "Ġsink ing", + "Ġcompreh ension", + "Ġs cor", + "Ġsc or", + "Ġsco r", + "a gements", + "ag ements", + "age ments", + "agement s", + "agem ents", + "Ġt ard", + "Ġta rd", + "Ġtar d", + "Ġm arching", + "Ġmar ching", + "Ġmarch ing", + "ĠM TV", + "ĠMT V", + "Ġs ane", + "Ġsa ne", + "Ġsan e", + "Create Info", + "Ạ¯", + "Ġend Index", + "ĉ layout", + "ĉl ayout", + "Ġ åIJį", + "ĠåIJ į", + "S ITE", + "SI TE", + "ĠT HERE", + "ĠTHE RE", + "ĠTH ERE", + "Ġ[ {'", + "Ġ[{ '", + "opath ic", + "opa thic", + "Ġtrans mitter", + "Ġtransmit ter", + "/ body", + "/b ody", + "Ġp und", + "Ġpun d", + "Ġpu nd", + "Ġ Closing", + "ĠC losing", + "ĠCl osing", + "ĠClo sing", + "Ġ setattr", + "Ġset attr", + "Ġ bounded", + "Ġb ounded", + "Ġbo unded", + "Ġbound ed", + "At las", + "Atl as", + "s uming", + "sum ing", + "su ming", + "( times", + "(t imes", + "(time s", + "(ti mes", + "p arer", + "par er", + "pare r", + "pa rer", + "y nom", + "yn om", + "fe it", + "Ġf rem", + "Ġfr em", + "Ġfre m", + "- leg", + "-l eg", + "-le g", + "ĠB ras", + "ĠBr as", + "ĠBra s", + "> #", + "Ġì¶ ľëł¥", + "Ġì¶ľ ëł¥", + "Ġ INSTANCE", + "ĠIN STANCE", + "ĠINST ANCE", + "ĠC ouch", + "ĠCo uch", + "ĠCou ch", + "_ hosts", + "_host s", + "lik elihood", + ". Marker", + ".M arker", + ".Mark er", + ".Mar ker", + "ĠM asks", + "ĠMas ks", + "ĠMask s", + "Ġc ereal", + "Ġce real", + "Ġcere al", + "ut ilities", + "util ities", + "Ġelement al", + "Ġele mental", + "Ġelem ental", + "Ġdist orted", + "Ġdistort ed", + "in active", + "c ry", + "cr y", + "W L", + "UPPORT ED", + ". Throws", + ".Th rows", + ".Throw s", + "/ schema", + "/s chema", + "s erie", + "se rie", + "ser ie", + ". \"',", + ".\" ',", + ".\"' ,", + "ĠBened ict", + "ĠBene dict", + "- picker", + "-p icker", + "-pic ker", + "ig gs", + "igg s", + "ĠP irate", + "ĠPi rate", + "ĠPir ate", + "åij¨ æľŁ", + "ĠThe ma", + "ĠTh ema", + "ĠThem a", + "ĠSouth ampton", + "Ġarray With", + "ĠPaul a", + "ĠPa ula", + "Ġpred ictor", + "Ġpredict or", + "Ġpredic tor", + "- Ass", + "-A ss", + ". userid", + ".user id", + ".use rid", + "Ġ peri", + "Ġp eri", + "Ġper i", + "Ġpe ri", + "Ġexagger ated", + "u rate", + "ur ate", + "ura te", + "urat e", + "arse ille", + "ĠCon cent", + "ĠConc ent", + "ĠConce nt", + "ĠP ik", + "ĠPi k", + "Ġ@ _;ĊĊ", + "Ġ@_;Ċ Ċ", + "Ġ@_ ;ĊĊ", + "Ġform ations", + "Ġformat ions", + "Ġformation s", + "Ġden omin", + "Ġdenom in", + "\" />.Ċ", + "\"/ >.Ċ", + "\"/> .Ċ", + "end edor", + "ended or", + "Ġpan cre", + "Ġpanc re", + "Ġ amt", + "Ġa mt", + "Ġam t", + "Ġon Resume", + "on Delete", + "ĠB CH", + "ĠBC H", + ") (\"", + ")( \"", + "m ovement", + "move ment", + "mo vement", + "mov ement", + "Ġpot assium", + "", + "Ġ-- ->", + "Ġ--- >", + "ĠP PC", + "ĠPP C", + "i sz", + "is z", + "ake FromNib", + "Ġ Disp", + "ĠD isp", + "ĠDis p", + "ĠDi sp", + "ĠAth letics", + "ĠAthletic s", + "Ġnight club", + "G OOD", + "GO OD", + ".set Geometry", + "+ [", + "/ send", + "/s end", + "/se nd", + "Ġbin aries", + "Ġr áp", + "Ġrá p", + ": req", + ":r eq", + "-con suming", + "-cons uming", + "er time", + "ert ime", + "erti me", + "UP DATED", + "UPDATE D", + "_ nullable", + "_null able", + "V IN", + "VI N", + "u lia", + "ul ia", + "uli a", + "c yan", + "cy an", + "Ġmisunder standing", + "Ġmisunderstand ing", + "o rical", + "or ical", + "ori cal", + "oric al", + "deg rees", + "degree s", + "Le ading", + "Lead ing", + ". AR", + ".A R", + "ic kest", + "ick est", + "N uevo", + "uf oria", + "Ġgo odies", + "Ġgood ies", + "Ġf ores", + "Ġfor es", + "Ġfore s", + "Ġfo res", + "() <<\"", + "()<< \"", + "()< <\"", + "ad emic", + "ade mic", + "adem ic", + "Action Creators", + "server name", + "( nt", + "(n t", + "db Context", + "Ġair borne", + "Ġexhib itions", + "Ġexhibition s", + "Ġexhibit ions", + "c ele", + "ce le", + "cel e", + "Ġt ela", + "Ġte la", + "Ġtel a", + "< Movie", + "", + "() \">", + "()\" >", + ".set PreferredSize", + "ĠM ID", + "ĠMI D", + "ĠA less", + "ĠAl ess", + "ĠAle ss", + "Ġhorse power", + "Ġa tm", + "Ġat m", + "ĠPack aging", + "Ġc iphertext", + "Ġcipher text", + "Request Method", + "Ġbe iden", + "Ġbei den", + "Ġbeide n", + "è £", + "ĠP OW", + "ĠPO W", + ".Write Header", + "d irector", + "dir ector", + "direct or", + "dire ctor", + "- but", + "-b ut", + "ãģł ãģķãģĦ", + "in cer", + "ince r", + "inc er", + "_ dn", + "_d n", + "! !!!!", + "!! !!!", + "!!! !!", + "!!!! !", + "Ġmanufact ures", + "Ġmanufacture s", + ". TextUtils", + ".Text Utils", + "Ġcon sciously", + "Ġconsc iously", + "Ġconscious ly", + "Ġb ounced", + "Ġbounce d", + "c ulture", + "cul ture", + "cult ure", + "ĠS par", + "ĠSp ar", + "ĠSpa r", + "ĠP iper", + "ĠPi per", + "ĠPipe r", + "ĠPip er", + ". press", + ".p ress", + ".pre ss", + ".pr ess", + ".pres s", + "- owner", + "-o wner", + "Ġe valuator", + "Ġeval uator", + "Ġevalu ator", + "Ġ STREAM", + "ĠST REAM", + ".PictureBox SizeMode", + "Ġsu gars", + "Ġsugar s", + "Ġsug ars", + "Screen Width", + "Ġnext State", + "Ġiv ory", + "Ġbr unch", + "Ġbrun ch", + "d ensity", + "dens ity", + "_ OW", + "_O W", + "ĠCoron avirus", + "ĠC FR", + "ĠCF R", + "b ak", + "ba k", + "\\ Category", + "\\C ategory", + "æķ° ç»Ħ", + "Ġinvoke virtual", + "} ()Ċ", + "}( )Ċ", + "Ġs ujet", + "Ġsu jet", + "- marker", + "-m arker", + "-mark er", + "-mar ker", + "is digit", + "isd igit", + "ĠM obil", + "ĠMo bil", + "ĠMob il", + "ĠJsonRequest Behavior", + "_ REMOTE", + "_RE MOTE", + ".exists Sync", + "Ġrich es", + "Ġri ches", + "Ġric hes", + ".p resenter", + ".present er", + ".pres enter", + "Ġgl Color", + "Ġh anya", + "Ġha nya", + "Ġhan ya", + "Ġfort ress", + "Ġfl ashed", + "Ġflash ed", + "Ġfla shed", + "v iz", + "vi z", + "requ ently", + "requent ly", + "b uat", + "bu at", + "$ con", + "$c on", + "> |", + ". Func", + ".F unc", + "Ġhum orous", + "Ġhumor ous", + "u em", + "ue m", + ". ZERO", + ".Z ERO", + "ĠS TL", + "ĠST L", + "ĠB uk", + "ĠBu k", + "/ sample", + "/s ample", + "ĠG ros", + "ĠGr os", + "ĠGro s", + "Rec ipes", + "Recipe s", + "Ġinf lated", + "Ġinfl ated", + "Ġinflate d", + "Ġsw ung", + ": F", + "F acing", + "Fac ing", + "Fa cing", + ". Theme", + ".Th eme", + ".The me", + "н ик", + "ни к", + "Ġspl endid", + "Ġrequest Id", + ".Center Screen", + "/ autoload", + "/auto load", + "embed ded", + "_ depart", + "_de part", + "_dep art", + "Ġ Ports", + "ĠP orts", + "ĠPort s", + "ĠPo rts", + "ĠPor ts", + "๠ĥ", + "ай д", + "disc ussion", + "_ consum", + "_con sum", + "_cons um", + "Ġsc outs", + "Ġsco uts", + "Ġscout s", + "Ġcol abor", + "Ġcola bor", + ". Stage", + ".St age", + ". nano", + ".n ano", + ".nan o", + "el dorf", + "eld orf", + "eldo rf", + "Ġgem acht", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "Ġpolicy makers", + "Ġpolicym akers", + "_P KT", + "_PK T", + ", Th", + ",T h", + "o ky", + "ok y", + "_ UID", + "_U ID", + "_UI D", + "P ing", + "Pin g", + "Pi ng", + "Ġor chest", + "Ġorch est", + "Ġorc hest", + "Ġop tics", + "Ġopt ics", + "Ġoptic s", + "u han", + "uh an", + "ĠX OR", + "ĠXO R", + "Ġespañ ol", + "ĠAd idas", + "r ng", + "rn g", + "m ans", + "man s", + "ma ns", + ".v stack", + "Ġget away", + "Ġh ierarchical", + "Ġhier archical", + "ano ia", + "anoi a", + "ĠBitmap Factory", + "re alm", + "rea lm", + "real m", + "ĉ ap", + "ĉa p", + "_ apps", + "_a pps", + "_app s", + "_ap ps", + "- divider", + "-div ider", + "-di vider", + ". drawer", + ".d rawer", + ".draw er", + "ĠH ARD", + "ĠHA RD", + "ĠHAR D", + "'] ;?>Ċ", + "']; ?>Ċ", + "'];?> Ċ", + "- packed", + "-p acked", + "-pack ed", + "æ² »", + "_STRUCT URE", + "[ Y", + "i Param", + "( eq", + "(e q", + "Ġencompass es", + "Ġ\\ ĊĊ", + "Ġ\\Ċ Ċ", + "- >[", + "-> [", + "& utm", + "g roupon", + "gr oupon", + "group on", + "gro upon", + "st rate", + "str ate", + "stra te", + "D Y", + "om orphic", + "' :[", + "': [", + "Ġgrav itational", + "ĠM icha", + "ĠMich a", + "ĠMi cha", + "ĠMic ha", + "ĠT encent", + "ĠTen cent", + "Ġco ached", + "Ġcoach ed", + "ì¶ ľ", + "Ñĥ менÑĤ", + "Ñĥм енÑĤ", + "/ mobile", + "/m obile", + "Mouse Down", + "b ud", + "bu d", + "ĠY as", + "ĠYa s", + "Ġ Providers", + "ĠPro viders", + "ĠProvid ers", + "ĠProvider s", + "ĠProvide rs", + "ĠProv iders", + "N Z", + "ĉ report", + "ĉre port", + "ĉrep ort", + "err msg", + "Ġimage Path", + "act erial", + "acter ial", + "acteria l", + "ĠM anga", + "ĠMan ga", + "ĠMa nga", + "ĠMang a", + "wick lung", + "( usuario", + "(us uario", + "\" ));čĊčĊ", + "\") );čĊčĊ", + "\")) ;čĊčĊ", + "\"));čĊ čĊ", + "\")); čĊčĊ", + "/ ***", + "/* **", + "/** *", + "Ġorgan ise", + "Ġorganis e", + "Index ed", + "_ QUAL", + "_Q UAL", + "_QU AL", + "( PyObject", + "(Py Object", + "Ġsurrender ed", + "PO CH", + "ĠN OTES", + "ĠNOT ES", + "ĠNO TES", + "ĠNOTE S", + "\\ \\\"", + "\\\\ \"", + "- job", + "-j ob", + "Ġseven ty", + "Ġsevent y", + "Ġsev enty", + "# ###Ċ", + "## ##Ċ", + "#### Ċ", + "### #Ċ", + "ĠMan or", + "ĠMa nor", + "Ġdown right", + "Ġtime frame", + "ins urance", + "che cker", + "check er", + "Ġ SECRET", + "ĠSE CRET", + "ĠSEC RET", + "Ġecho es", + "Ġech oes", + "ĠCar men", + "ĠCarm en", + ".set HorizontalAlignment", + ".setHorizontal Alignment", + "Ġ isChecked", + "Ġis Checked", + "Ġ TOR", + "ĠT OR", + "ĠTO R", + "_ nn", + "_n n", + "( '(", + "(' (", + "Fetch Request", + "ĠPrint ed", + "Fl uid", + "Ġ STACK", + "ĠST ACK", + "ĠSTA CK", + "G ES", + "GE S", + "a igned", + "aign ed", + "i gor", + "ig or", + "igo r", + ". Unknown", + ".Un known", + "C BC", + "CB C", + "ĠCarl son", + ". URI", + ".U RI", + ".UR I", + "Ġp light", + "Ġpl ight", + "/ start", + "/st art", + "/star t", + "ĠPerson nel", + "Ġ PREFIX", + "ĠP REFIX", + "ĠPRE FIX", + "ĠPREF IX", + ", **", + ",* *", + "Ġli mite", + "Ġlimit e", + "Ġlim ite", + "_ heat", + "_h eat", + "_he at", + "% ï¼Į", + "ĠD onne", + "ĠDon ne", + "get Node", + "ĠScient ology", + "Ġc omet", + "Ġcom et", + "Ġco met", + "Ġcome t", + "Ġwen ig", + "A side", + "As ide", + "ĠM PEG", + "ĠMP EG", + "' ?", + "vari ably", + ". endDate", + ".end Date", + "Ġun cont", + "Ġunc ont", + "Ġuncon t", + "Ġ Scores", + "ĠS cores", + "ĠSc ores", + "ĠScore s", + "ĠSco res", + "ĠScor es", + "Ġ LoginForm", + "ĠLogin Form", + ". generated", + ".g enerated", + ".generate d", + ".gener ated", + ", ch", + ",c h", + "- mar", + "-m ar", + "ĠN ed", + "ĠNe d", + "Ġ eventId", + "Ġevent Id", + "+ p", + "ĠS IN", + "ĠSI N", + "/ reset", + "/re set", + "/res et", + ".RE ACT", + "ĠMe ssi", + "ĠMess i", + "ĠMes si", + "_R ANK", + "_RA NK", + ".write File", + "Ġc ripp", + "Ġcr ipp", + "Ġcri pp", + "es thetic", + "est hetic", + "ERS IST", + "Ġreim bursement", + "Ġreimburse ment", + "Current Value", + "Ġu nin", + "Ġun in", + "Ġuni n", + "Down Latch", + "Ġpadding Right", + "Ġst ocked", + "Ġstock ed", + "/ '.", + "/' .", + "Ġre payment", + "Ġrep ayment", + "Ġrepay ment", + "t rak", + "tr ak", + "tra k", + "/ backend", + "/back end", + "Ġиз мен", + "C SR", + "CS R", + "Ġprevent ive", + "Ġpant alla", + "_ trim", + "_t rim", + "_tr im", + "_tri m", + "P edido", + "Ped ido", + "h ospital", + "Ġmanage able", + "route Params", + "text ures", + "texture s", + "tex tures", + ". .....ĊĊ", + ".. ....ĊĊ", + "... ...ĊĊ", + ".... ..ĊĊ", + "..... .ĊĊ", + "...... ĊĊ", + "Ġsé lection", + "Name ValuePair", + "Ġpol lut", + "Ġpoll ut", + "M odes", + "Mode s", + "Mod es", + "Mo des", + "ĠL aud", + "ĠLa ud", + "ĠLau d", + "j ay", + "ja y", + "ĠU rs", + "ĠUr s", + "Ġs igner", + "Ġsign er", + "Ġsig ner", + "Ġ JJ", + "ĠJ J", + "ĠCh erokee", + "_EX ISTS", + "_EXIST S", + "Ġd war", + "Ġdw ar", + "Ġ ($('#", + "Ġ( $('#", + "Ġ($ ('#", + "Ġ($( '#", + "Ġre ef", + "> {$", + ">{ $", + "ĠB aylor", + "ĠBay lor", + "Ġ ModelState", + "ĠModel State", + "- _", + "ĠStruct ures", + "ĠStructure s", + "Ġsou vent", + "Spec ify", + "( pipe", + "(p ipe", + "(pi pe", + "Ġfr acking", + "Ġfrac king", + "ĠG PA", + "ĠGP A", + "Ġb ele", + "Ġbe le", + "Ġbel e", + "ĉ ĉĉĉĉĉĉĠĠĠ", + "ĉĉ ĉĉĉĉĉĠĠĠ", + "ĉĉĉĉ ĉĉĉĠĠĠ", + "ĉĉĉ ĉĉĉĉĠĠĠ", + "ĉĉĉĉĉ ĉĉĠĠĠ", + "ĉĉĉĉĉĉ ĉĠĠĠ", + "ĉĉĉĉĉĉĉ ĠĠĠ", + "ĉĉĉĉĉĉĉĠ ĠĠ", + "ĉĉĉĉĉĉĉĠĠ Ġ", + "ĠMinor ity", + "Ġt ud", + "Ġtu d", + "Ġopen ness", + "ĠIllustr ated", + "Ġoxid ation", + "Ġ NK", + "ĠN K", + "ĉ Update", + "Ġ EMS", + "ĠE MS", + "ĠEM S", + "ĠTe ddy", + "ĠTed dy", + "Ġgener als", + "Ġgen erals", + "Ġgeneral s", + "Ġgenera ls", + "ĉ Mat", + "ĉM at", + "Ġrad ios", + "Ġradio s", + "Ġradi os", + "ĠAnt ique", + "ĠAnti que", + "c onomy", + "con omy", + "conom y", + "cono my", + "ĠSquad ron", + ") ','", + ")', '", + ")' ,'", + "å£ °", + "Ġy oure", + "Ġyou re", + "Ġyour e", + "Ġyo ure", + "ĠMain Page", + "Ġbeh aviours", + "Ġbehaviour s", + "en ght", + "eng ht", + "(@\" %@\",", + "Ġtest case", + "Ġ Compilation", + "ĠComp ilation", + "Ġflav ours", + "Ġflavour s", + "Ġ Extend", + "ĠExt end", + "il lator", + "ill ator", + "illa tor", + "Ġ coh", + "Ġc oh", + "Ġco h", + "Ġs pline", + "Ġsp line", + "Ġspl ine", + "Ġ KG", + "ĠK G", + "- pay", + "-p ay", + "Ġcommun ism", + "ĠBusiness es", + "oc king", + "ock ing", + ". MaxLength", + ".Max Length", + "ass andra", + "qu iring", + "quir ing", + "qui ring", + "a dden", + "ad den", + "add en", + "ĠJ eb", + "ĠJe b", + "_ fault", + "_f ault", + "_fa ult", + "[ file", + "[f ile", + "Ġpromin ence", + "disc iplinary", + "âĢĶ they", + "âĢĶthe y", + "_ extent", + "_ex tent", + "_ext ent", + "Ġ VIC", + "ĠV IC", + "ĠVI C", + "Ġen tails", + "Ġent ails", + "Ġentail s", + ". partner", + ".p artner", + ".part ner", + "Ġhipp oc", + "Le ague", + "çĶ ·", + "w ipe", + "wi pe", + "- spinner", + "-sp inner", + "-spin ner", + "Ġsal ute", + "ĠS urgical", + "ĠSurg ical", + "( outputs", + "(out puts", + "(output s", + "work ed", + "wor ked", + "[ strlen", + "[str len", + "app ointed", + "appoint ed", + "ĠH eg", + "ĠHe g", + "ĠAC PI", + "( [^", + "([ ^", + "u ala", + "ual a", + "ua la", + "_ tol", + "_t ol", + "_to l", + "ĠR it", + "ĠRi t", + ". Payment", + ".P ayment", + ".Pay ment", + "k owski", + "Ġw almart", + "Ġwal mart", + "require ments", + "ĠFIN SEQ", + "_ BACKGROUND", + "_BACK GROUND", + "ĠOs borne", + "( errorMessage", + "(error Message", + "Report ing", + "Rep orting", + "Ġa uctions", + "Ġau ctions", + "Ġauction s", + "Ġcom bos", + "Ġcomb os", + "Ġcombo s", + "ĠNot iced", + "ĠNotice d", + "_ oct", + "_o ct", + "_oc t", + "Ġprim ero", + "Ġprime ro", + "Ġprimer o", + "t aire", + "ta ire", + "_ hr", + "_h r", + "Ġм од", + "Ġмо д", + "Ġcontrad ictory", + "Ġcontradict ory", + "= \"@", + "=\" @", + "ach ines", + "achine s", + "achi nes", + "(opt arg", + "ĠP enguin", + "ĠPeng uin", + "ĠAb bas", + "ĠAbb as", + "Ġsub lime", + "Ġpage able", + "ĠDef ensive", + "Ġdistinct ly", + "ĠAutom atically", + "ĠAutomatic ally", + "Under standing", + "Equality Comparer", + "g ota", + "go ta", + "got a", + "Ġ\" ::", + "Ġ\": :", + "Ġpul ver", + "ĠB attles", + "ĠBattle s", + "ĠBatt les", + "Ġun paralleled", + "T CHA", + "TC HA", + "Ġconstr ued", + "- aff", + "-a ff", + "Ġpre cursor", + "Ġprec ursor", + "-l fs", + "Ġmad uras", + "ĠD aisy", + "ĠDa isy", + "ĠDai sy", + "ĠAr beits", + "ĠArbeit s", + ". Management", + ".Man agement", + "ĉ In", + "ĉI n", + "Ġro bes", + "Ġrob es", + "Ġrobe s", + "Ġsp éc", + "âĢľ (", + "Ġm aternity", + "Ġmat ernity", + "ex tent", + "ext ent", + "Ġ Spacer", + "ĠSp acer", + "ĠSpace r", + "ĠSpa cer", + "Did Appear", + "ĉ us", + "ĉu s", + ".getRequest Dispatcher", + "( cols", + "(c ols", + "(co ls", + "(col s", + "Ġplum met", + "ì ħ", + "Ġ{ ĊĊĊĊ", + "Ġ{Ċ ĊĊĊ", + "Ġ{ĊĊ ĊĊ", + "Ġ{ĊĊĊ Ċ", + "é rica", + "ér ica", + "éri ca", + "éric a", + "Ġ Sizes", + "ĠS izes", + "ĠSize s", + "ĠSi zes", + "ĠSiz es", + ". enum", + ".e num", + ".en um", + ". Highlight", + ".High light", + "Ġ!! }ĊĊĊ", + "Ġ? >ĊĊĊ", + "Ġ?> ĊĊĊ", + "Ġ?>Ċ ĊĊ", + "Ġ?>ĊĊ Ċ", + "W enn", + "We nn", + "Ġcl imax", + "Ġclim ax", + "Ġcli max", + "Ġc rem", + "Ġcr em", + "Ġcre m", + "_ that", + "_t hat", + "_th at", + "[ â̦", + "_ domains", + "_domain s", + "_dom ains", + "_RE PLY", + "Ġcomp leta", + "Ġcomple ta", + "Ġcomplet a", + "Ġcompl eta", + "V EST", + "VE ST", + "VES T", + "_ particle", + "_p article", + "_part icle", + "Ġs op", + "Ġso p", + "Ġfatal ities", + "impl ify", + "imp lify", + "ĠS KF", + "ĠSK F", + "Ġin fusion", + "Ġinf usion", + "ĠJ avier", + "ĠJa vier", + "Ġb allet", + "Ġball et", + "Ġbal let", + "Ġam igo", + "Ġami go", + ". want", + ".w ant", + "Ġcol lagen", + "Ġcoll agen", + "Ġcollage n", + "ĠLaw yer", + ". Statement", + ".St atement", + ".State ment", + ".Stat ement", + ". rt", + ".r t", + "b aar", + "ba ar", + "End Point", + "ĠB ek", + "ĠBe k", + "S HIP", + "SH IP", + "Ġpatri arch", + "ĠA unt", + "ĠAu nt", + "_ TM", + "_T M", + "Ġ mÃŃn", + "Ġm ÃŃn", + "ĠmÃŃ n", + "Ġm astered", + "Ġmaster ed", + "Ġma stered", + "Ġmas tered", + "Ġmast ered", + "W XYZ", + "WX YZ", + "Ġes pos", + "Ġesp os", + "= logging", + "=log ging", + "Ġrighteous ness", + "t orrent", + "tor rent", + "Ġ bst", + "Ġb st", + "Ġbs t", + "_ CHAIN", + "_CH AIN", + "Ġout skirts", + "( rotation", + "(r otation", + "(rot ation", + "Ġ' .')", + "Ġ'. ')", + "Ġ'.' )", + "igr ants", + "igrant s", + "+ lsi", + "+l si", + "ĠCC TV", + "ĠCCT V", + "_PH ASE", + ". azure", + ".a zure", + "_ Process", + "_P rocess", + "_Pro cess", + "v ae", + "va e", + "ĠT ropical", + "ĠAn kara", + "ĠAnk ara", + "image View", + "_RUN NING", + "Ġ* )__", + "Ġ*) __", + "ế n", + "( cli", + "(c li", + "(cl i", + "sc atter", + "Ġs che", + "Ġsc he", + "Ġsch e", + "Reg istrar", + "Registr ar", + "Ġa iring", + "Ġair ing", + "Ġai ring", + "Ġpy plot", + "is ión", + "isi ón", + "/ customer", + "/c ustomer", + "/custom er", + "Ġs implement", + "Ġsim plement", + "Ġsimple ment", + "Ġsimp lement", + "Ġsimpl ement", + "Ġclass y", + "Ġcl assy", + "Ġclas sy", + "ĠD WC", + "ĠDW C", + "ĠBas har", + "ĠBash ar", + "ĠDE VELO", + "ĠV ick", + "ĠVi ck", + "ĠVic k", + "a vail", + "av ail", + "ava il", + "ĠH ö", + "_ extend", + "_ext end", + "dr Fc", + ".is NotBlank", + "Ġpl ais", + "Ġpla is", + "| }Ċ", + "Ġporn ofil", + "Ġporno fil", + "l abs", + "la bs", + "lab s", + "Ġ haus", + "Ġh aus", + "Ġha us", + "Ġorig inating", + "Ġorigin ating", + "Ġsurround s", + "Ġ QUAL", + "ĠQ UAL", + "ĠQU AL", + "m eg", + "me g", + "/ logger", + "/log ger", + "/lo gger", + "[ obj", + "[o bj", + "Ġirres ponsible", + "Ġ PublicKey", + "ĠPublic Key", + "H ONE", + "HO NE", + ": '/", + ":' /", + "i box", + "ib ox", + "ibo x", + "ĠF Vector", + "| {Ċ", + "ata loader", + "atal oader", + "h awks", + "hawk s", + "H DR", + "HD R", + "Ġescal ation", + "ĠPods Dummy", + "e lite", + "el ite", + "eli te", + "Ġpre sup", + "Ġpres up", + "C ached", + "Cache d", + "Ca ched", + "> G", + ". optimizer", + ".opt imizer", + ".optim izer", + ".optimize r", + "Ġ Visible", + "ĠV isible", + "ĠVis ible", + "´ Ģ", + "Ġ nen", + "Ġn en", + "Ġne n", + "Ġ pcs", + "Ġp cs", + "Ġpc s", + "Ġ Idle", + "ĠI dle", + "ĠId le", + "[ Any", + "[A ny", + "Ġkey boards", + "Ġkeyboard s", + "ĠCOMP ONENT", + "Ġtit anium", + "Ġtitan ium", + "( mut", + "(m ut", + "(mu t", + "ĠLed ger", + "Ġprosper ous", + "etro fit", + "_ LL", + "_L L", + "_ patient", + "_p atient", + "_pat ient", + "Ġ pdata", + "Ġp data", + "Ġpd ata", + "Ġ kontakte", + "Ġkont akte", + "Ġkontakt e", + "S wipe", + "Sw ipe", + "Ġcheer ful", + "ĠHond uras", + "\" ][$", + "\"] [$", + "\"][ $", + "Ġhem orrh", + "\" :\"+", + "\": \"+", + "\":\" +", + "Ġ leasing", + "Ġle asing", + "Ġinst alls", + "Ġinstall s", + "Ġinstal ls", + "ĠP ax", + "ĠPa x", + "ĠLog istics", + "ĠLogistic s", + "Ġkin etic", + "ĠP hon", + "ĠPh on", + "_ movement", + "_m ovement", + "_move ment", + "_mov ement", + "_mo vement", + "ĉ bytes", + "ĉbyte s", + "Ġcin co", + "ĠMad ness", + "\" )+", + "\") +", + "Ġ JE", + "ĠJ E", + "_ ij", + "_i j", + "Scene Manager", + "ĠB ust", + "ĠBus t", + "ĠBu st", + "p test", + "pt est", + "pte st", + "a ea", + "ae a", + "Ġb esser", + "Ġbes ser", + "ÃŃ g", + "д ин", + "ди н", + "( tasks", + "(t asks", + "(task s", + "(\" (\"", + "(\"( \"", + "set Type", + "( outfile", + "(out file", + "ĉ reset", + "ĉres et", + "ĉre set", + "Ġ ARC", + "ĠA RC", + "ĠAR C", + "Ġmús ica", + "ĠSh elf", + "ĠShe lf", + "ĠShel f", + "Ġmin Y", + "p ch", + "pc h", + "Ġwe iber", + "Ġwei ber", + "iss or", + "Ġtr ouve", + "Ġtro uve", + "Ġtrou ve", + "ĉ Button", + "ĉB utton", + "Ġre generated", + "Ġreg enerated", + "Ġregenerate d", + "Å £i", + "Å£ i", + "im achinery", + "b locking", + "bl ocking", + "block ing", + ".data Tables", + "_ frac", + "_f rac", + "_fr ac", + "ĠAdv antage", + ".visit Method", + "éĩį æĸ°", + "Ġextra pol", + "Ġextr apol", + "Ġte asing", + "Ġtea sing", + "Ġteas ing", + "ĠH itch", + "ĠHit ch", + "ĠGe ek", + "ĠGee k", + "E SCO", + "ES CO", + "ESC O", + "Ġ wich", + "Ġw ich", + "Ġwi ch", + "ĉ ax", + "ĉa x", + "_ decor", + "_de cor", + "_dec or", + "Ġscreen Width", + "ĠSo phia", + "ĠSoph ia", + "F orgot", + "For got", + "Forg ot", + ". uni", + ".un i", + ".u ni", + "ĠVen ture", + "ĠVent ure", + "_ collision", + "_c ollision", + "_coll ision", + "Ġlaw maker", + "( Edit", + "(E dit", + "b lers", + "ble rs", + "bl ers", + "bler s", + "Ġ getNext", + "Ġget Next", + "âĢĶ you", + "Media Player", + "ĠH orde", + "ĠHor de", + "ĠCongress man", + "obs ervations", + "observ ations", + "observation s", + "ĉ property", + "ĉp roperty", + "ĉprop erty", + "Ġ< --", + "Ġ<- -", + "Created At", + "u byte", + "ub yte", + "uby te", + "Ġquar antine", + "Ġdist ressed", + "Ġdistr essed", + "Ġdistress ed", + "_A PB", + "_AP B", + "ĠGood man", + "ãĤ «", + "Ġrecom end", + "_ PRINTF", + "_PRINT F", + "D ONE", + "DO NE", + "DON E", + "Bind able", + "r strip", + "rs trip", + "rst rip", + "cent aje", + "Ġ Unexpected", + "ĠUn expected", + "ĠS CHOOL", + "ĠProfessional s", + "ĠProfession als", + "ĠGPU s", + "ĠGP Us", + "L esson", + "Le sson", + "Les son", + "Less on", + "Ex clusive", + "Ġat rav", + "Ġatr av", + "ĠD ank", + "ĠDan k", + "ĠDa nk", + "ĠLaw yers", + "ĠLawyer s", + "ĠWal ton", + "ĠWalt on", + "> []", + ">[ ]", + "Ġa loud", + "Ġal oud", + "Ġalo ud", + "=\" ../../../", + "=\"../ ../../", + "=\"../../ ../", + "Ġdeb ating", + "ĠA VG", + "ĠAV G", + "_V OL", + "_VO L", + "/ cgi", + "/c gi", + ". deg", + ".d eg", + ".de g", + ": g", + ".Info f", + ".Inf of", + "Measure Spec", + ". song", + ".s ong", + ".so ng", + ".son g", + "m tree", + "mt ree", + "ul ls", + "ull s", + "J ordan", + "ĠC overs", + "ĠCo vers", + "ĠCover s", + "ĠCov ers", + "ĠCove rs", + "Ġattrib utable", + "Ġj edis", + "Ġje dis", + "Ġjed is", + "iat rics", + "iatric s", + "Ġrot terdam", + "Ġ meld", + "Ġm eld", + "Ġme ld", + "Ġmel d", + "Ġ ContentType", + "ĠContent Type", + "Ġman tle", + "Ġmant le", + "Ġ alice", + "Ġa lice", + "Ġal ice", + "Ġali ce", + "_ duplicate", + "_d uplicate", + "_dup licate", + "/ Internal", + "Ġ filesize", + "Ġfile size", + "Ġfiles ize", + "ĉ fire", + "ĉf ire", + "ĉfi re", + "r ese", + "re se", + "res e", + "on dere", + "ond ere", + "onder e", + "onde re", + "Ġfamiliar ity", + "ĠC rest", + "ĠCr est", + "ĠCre st", + "ĠCres t", + "Ġk arma", + "Ġkar ma", + "Ġtor ino", + "Ġm esa", + "Ġme sa", + "Ġmes a", + "/ temp", + "/t emp", + "Ġc hir", + "Ġch ir", + "Ġchi r", + "Ġ Overflow", + "ĠOver flow", + "Ġten emos", + "u nik", + "un ik", + "uni k", + "N EXT", + "NE XT", + "A lle", + "Al le", + "All e", + "Ġn xt", + "Ġnx t", + "M art", + "Mar t", + "Ma rt", + "Ġ atl", + "Ġa tl", + "Ġat l", + "Ġperiod o", + "Ġperi odo", + "_ you", + "_y ou", + "Ġ} )).", + "Ġ}) ).", + "Ġ})) .", + "int estinal", + ".Adapter View", + "Ġhes itant", + "Ġcompar atively", + "Ġcomparative ly", + ". UInt", + ".U Int", + ".UI nt", + "( viewModel", + "(view Model", + "Ġsang at", + "Ġ Responsive", + "ĠRes ponsive", + "ĠRespons ive", + "ĠZ ack", + "ĠZa ck", + "ĠZac k", + "â ħ", + "J AVA", + "JA VA", + "ĠFull er", + "ĠFu ller", + "ĠFul ler", + "Ġ âĿ¤", + "ĠâĿ ¤", + ". Consumer", + ".Con sumer", + ".Cons umer", + "Ġ ank", + "Ġa nk", + "Ġan k", + "Ġre actors", + "Ġreact ors", + "Ġreactor s", + "f uck", + "fu ck", + "_ rat", + "_r at", + "_ra t", + "Ġsession Factory", + "_ backward", + "_back ward", + "Ġscram bled", + "Ġscramble d", + "ĉ th", + "ĉt h", + "Ġins ensitive", + "Ġch amps", + "Ġcha mps", + "Ġcham ps", + "Ġchamp s", + "Ġ nginx", + "Ġng inx", + "Ġcon hec", + "Ġconhe c", + "ĠJ asper", + "ĠJas per", + ". fm", + ".f m", + "Strict Equal", + "ach sen", + "achs en", + "- Nov", + "-N ov", + "-No v", + "l assen", + "lass en", + "las sen", + ". integration", + ".int egration", + "( lbl", + "(l bl", + "Com pose", + "Comp ose", + "ĠF on", + "ĠFo n", + "à ļ", + "Gr atis", + "ĠL ime", + "ĠLim e", + "ĠLi me", + "ĠAdapter View", + "Ġpoison ed", + "Ġpois oned", + "anch ors", + "anchor s", + "设 计", + "'] ?>\"", + "']?> \"", + "Ġpro cur", + "Ġproc ur", + "It aly", + ". MONTH", + ".MON TH", + "ĠL UA", + "ĠLU A", + "ĠLith uania", + "ĠHe ads", + "ĠHead s", + "_CH UNK", + "ĠP USH", + "ĠPU SH", + "ĠPUS H", + "Aspect Ratio", + "Ġ weg", + "Ġw eg", + "Ġwe g", + "Ġv ids", + "Ġvi ds", + "Ġvid s", + "ĠW ein", + "ĠWe in", + "ĠWei n", + "ĉ INT", + "ĉI NT", + "ĉIN T", + "session Id", + "Ind ustry", + "Ġden ounced", + "JK LM", + "ĠVan essa", + ". Identifier", + ".Id entifier", + "p ropri", + "pro pri", + "prop ri", + "Ġ иг", + "Ġи г", + "Ġté cn", + "Ġtéc n", + "Ġm osaic", + "Ġmos aic", + "Stream Reader", + "- Th", + "-T h", + "f orth", + "for th", + "fort h", + "Ġad herence", + "Ġadher ence", + "Ġadhere nce", + "b ate", + "ba te", + "bat e", + "Ġkn ights", + "Ġknight s", + "s ounds", + "so unds", + "sound s", + "sou nds", + "Ġs alle", + "Ġsa lle", + "Ġsal le", + "O MET", + "OM ET", + "OME T", + "ãĤ¹ ãĥĪ", + "- tm", + "-t m", + "ĠR he", + "ĠRh e", + ".File OutputStream", + "åĪĨ ç±»", + "Ġ ENG", + "ĠE NG", + "ĠEN G", + "h oliday", + "hol iday", + "Ġ Congratulations", + "ĠCong ratulations", + ") (Ċ", + ")( Ċ", + "Ġaggregate s", + "Ġaggreg ates", + "H OOK", + "HO OK", + "e wire", + "ew ire", + "Sen ator", + "Ġembed dings", + "Ġembedding s", + "e py", + "ep y", + "( COM", + "(C OM", + "Ġrob ber", + "ä ter", + "ät er", + "w ang", + "wa ng", + "wan g", + "_ teacher", + "_t eacher", + "_te acher", + "Ġresent ment", + "Ġlett uce", + "er reur", + "err eur", + "erre ur", + "( ic", + "(i c", + "ĠT actical", + "ĠTac tical", + "Ġ Contracts", + "ĠCon tracts", + "ĠContract s", + "ĠContr acts", + "Ġm ænd", + "Ġsit ios", + "Ġsiti os", + "Ġsitio s", + "Ġbast ante", + "Ġnue vos", + "Ġnuevo s", + "ĉN drFc", + "Ġprivate Key", + "uc ch", + "ucc h", + "MM dd", + "Ġ è¾ĵåĩº", + "Ġè¾ĵ åĩº", + "um ba", + "umb a", + "@ foreach", + ": \");ĊĊ", + ":\" );ĊĊ", + ":\");Ċ Ċ", + ":\") ;ĊĊ", + "Ġslip pery", + "ĠKey stone", + "ĠKe ystone", + "ĠKeys tone", + "Ġpione ering", + "Ġpioneer ing", + "_ triangle", + "_t riangle", + "_tr iangle", + "_tri angle", + "( \"Ċ", + "(\" Ċ", + "ĉ ĉĉĉĉĉĉĉĠĠ", + "ĉĉ ĉĉĉĉĉĉĠĠ", + "ĉĉĉĉ ĉĉĉĉĠĠ", + "ĉĉĉ ĉĉĉĉĉĠĠ", + "ĉĉĉĉĉ ĉĉĉĠĠ", + "ĉĉĉĉĉĉ ĉĉĠĠ", + "ĉĉĉĉĉĉĉĉ ĠĠ", + "ĉĉĉĉĉĉĉ ĉĠĠ", + "ĉĉĉĉĉĉĉĉĠ Ġ", + "ĠInt ervention", + "ĠInter vention", + "S CI", + "SC I", + "Ġc JSON", + "Ġter minating", + "Ġterm inating", + "Ġtermin ating", + "ë ¹Ħ", + "ë¹ Ħ", + "Ġbaby s", + "Ġbab ys", + "Sub set", + "Ġ ë¡", + "Ġë ¡", + "Ġseu lement", + "Ġseul ement", + "Ġseule ment", + "Ġm uestra", + "Ġmue stra", + "En tre", + "Ent re", + "Entr e", + "以 ä¸Ĭ", + "n go", + "ng o", + "\" bytes", + "QR ST", + "QRS T", + "Ġy pos", + "Ġyp os", + "person a", + "pers ona", + "Ġ Deploy", + "ĠDe ploy", + "ĠDep loy", + "c ee", + "ce e", + "Ġ à®", + "Ġà ®", + ". goal", + ".go al", + "Ġhabit ats", + "Ġhabitat s", + "Ġ isAdmin", + "Ġis Admin", + "Ġexplo iting", + "Ġexploit ing", + "Ġvent il", + "Ġven til", + "ĠB alls", + "ĠBall s", + "ĠBal ls", + "ا ب", + "Ø§Ø ¨", + "Ġmind fulness", + "Ġmindful ness", + "( kwargs", + "(k wargs", + "Ġre sembling", + "Ġresembl ing", + "Ġch oir", + "Ġcho ir", + "Ġon BackPressed", + "ĠSEC URITY", + "/ gtest", + "/g test", + "Ġjust ices", + "Ġjustice s", + "Ġinteger Value", + "b lah", + "bl ah", + "bla h", + "ĠA im", + "ĠAi m", + "_ finalize", + "_final ize", + "k eh", + "ke h", + "ĠComplex ity", + "Ġaug ust", + "get ElementsByTagName", + "Ġp reach", + "Ġpr each", + "Ġpre ach", + "Ġpron unciation", + "Ġ Trash", + "ĠTr ash", + "ĠTra sh", + "- percent", + "-per cent", + "_PR IV", + "_PRI V", + "ĠH unts", + "ĠHun ts", + "ĠHu nts", + "ĠHunt s", + "ĠC urse", + "ĠCur se", + "u ellen", + "ue llen", + "uel len", + "uelle n", + "uell en", + "Ġheavy weight", + "X i", + "ĉ selected", + "ĉselect ed", + "ĉse lected", + "ĠMcC oy", + "å¼Ĥ 常", + "| =Ċ", + "|= Ċ", + "ĠBattle field", + "Item Image", + "Ġded uctions", + "Ġdeduct ions", + "Ġdeduction s", + "ĠElement al", + "ĠEle mental", + "ĠElem ental", + "( ));//", + "() );//", + "()) ;//", + "()); //", + "ĠBur k", + "ĠBu rk", + "} )čĊčĊ", + "}) čĊčĊ", + "})čĊ čĊ", + "sw ift", + "/ function", + "/f unction", + "Us ually", + "Usu ally", + "_ St", + "_S t", + "_fe ats", + "_feat s", + "Ġ IsValid", + "ĠIs Valid", + "Ġz ad", + "Ġza d", + "Image Context", + "Ġ classname", + "Ġclass name", + "Ġdon ner", + "Ġdonne r", + "Ġdonn er", + "Ġ-- >ĊĊĊ", + "Ġ-->Ċ ĊĊ", + "Ġ--> ĊĊĊ", + "Ġ-->ĊĊ Ċ", + "Ġmotor cycles", + "Ġmotorcycle s", + "+' /'+", + "+'/ '+", + "Ġ setBackground", + "Ġset Background", + "\\ CMS", + "\\C MS", + ". AllArgsConstructor", + ".All ArgsConstructor", + "ĠLex ington", + ". examples", + ".ex amples", + ".example s", + ".exam ples", + "ĠP urs", + "ĠPur s", + "ĠPu rs", + "Push Matrix", + "Ġ================================================= =============", + ".add Target", + "p ora", + "por a", + "po ra", + "Full screen", + "Ġgo of", + "Ġgoo f", + "h len", + "hl en", + "hle n", + "ä ge", + "ĠC URL", + "ĠCUR L", + "ĠCU RL", + "Ġ Interesting", + "ĠInter esting", + "ĠInterest ing", + "Ġretrie ves", + "Ġretrieve s", + "Ġretr ieves", + "_ Obj", + "_O bj", + "in ness", + "inn ess", + "inne ss", + "- ----ĊĊ", + "-- ---ĊĊ", + "---- -ĊĊ", + "--- --ĊĊ", + "----- ĊĊ", + "-----Ċ Ċ", + ".t sv", + ".ts v", + "( IM", + "(I M", + "ĠBr aves", + "ĠBra ves", + "ĠBrave s", + "_ ISR", + "_I SR", + "_IS R", + "o sti", + "os ti", + "ost i", + "á» ĵ", + "ĠEx terior", + "ĠExt erior", + "ĠCourt ney", + "Ġresid ues", + "Ġresidue s", + "T ier", + "Ti er", + ".* ;čĊčĊ", + ".*;čĊ čĊ", + ": black", + ":b lack", + "web View", + "\" path", + "Ġm asa", + "Ġma sa", + "Ġmas a", + "] !='", + "]!= '", + "Ġ Matching", + "ĠM atching", + "ĠMat ching", + "ĠMatch ing", + "d ur", + "du r", + "J vm", + "= context", + "_ RING", + "_R ING", + "Ġpro ponents", + "Ġprop onents", + "ĠQString Literal", + "Ġ inflate", + "Ġin flate", + "Ġinf late", + "Ġinfl ate", + "< Float", + " \">čĊ", + "Ġ?>\" >čĊ", + "Ġ?>\"> čĊ", + "_C OST", + "_CO ST", + "i linear", + "il inear", + "ili near", + "iline ar", + "ilin ear", + "Ġ Workspace", + "ĠWork space", + "ĠWorks pace", + "Ġs pel", + "Ġsp el", + "Ġspe l", + "ag ogue", + "ago gue", + "agog ue", + "ĠMillenn ium", + "ĠPop ulate", + "Ġ nid", + "Ġn id", + "Ġni d", + ".parse Color", + "S olar", + "So lar", + "Sol ar", + "ĠG ad", + "ĠGa d", + "Ġ ì¤ij", + "Ġì ¤ij", + "Ġì¤ ij", + "ĠK amp", + "ĠKa mp", + "ĠKam p", + "ĉ rm", + "ĉr m", + "Ġb enz", + "Ġbe nz", + "Ġben z", + "Ġ Honestly", + "ĠH onestly", + "ĠHonest ly", + "Ġelectro de", + "Ġelectr ode", + "ĠPr airie", + "ĠPra irie", + "Ġ PROFILE", + "ĠPRO FILE", + "ĠPROF ILE", + "ĠOri ental", + "ĠOrient al", + "ĠO LED", + "ĠOL ED", + "/cop yleft", + "awa ii", + "awai i", + "( products", + "(product s", + ") \\<", + ")\\ <", + "- created", + "-c reated", + "-create d", + "-cr eated", + ".Many ToMany", + "\" How", + "\"H ow", + "Ġв Ñĭп", + "ĠвÑĭ п", + "Ġmitochond rial", + "_ testing", + "_t esting", + "_test ing", + "( created", + "(c reated", + "(create d", + "(cr eated", + "Ġ getField", + "Ġget Field", + "_E VAL", + "_EV AL", + "] .\"", + "]. \"", + "ĠF SM", + "ĠFS M", + "ĠR ita", + "ĠRi ta", + "ĠRit a", + "Ġ åıĤæķ°", + "Ġåı Ĥæķ°", + "ĠåıĤ æķ°", + "Ġc ôt", + "Ġcô t", + "ĠIns ight", + "ĉ mysqli", + "ĉm ysqli", + "ĉmysql i", + "_ timing", + "_t iming", + "_tim ing", + "_ti ming", + "I DO", + "ID O", + ") ))))Ċ", + ")) )))Ċ", + "))) ))Ċ", + ")))) )Ċ", + "CO VERY", + "COVER Y", + ". imag", + ".i mag", + ".im ag", + "C DF", + "CD F", + "l ust", + "lu st", + "lus t", + "i ckt", + "ic kt", + "ick t", + "_ FP", + "_F P", + ". ','", + ".' ,'", + ".', '", + "g cc", + "gc c", + "Ġkur z", + "Ġku rz", + "_p wm", + "_pw m", + "Ġodp owied", + "Ġ Barrier", + "ĠBar rier", + "ĠBarr ier", + "/************************************************************************ ***Ċ", + "p ak", + "pa k", + "- Israel", + "ĠRut gers", + "Ġselected Item", + "ĠRam irez", + "F arm", + "Far m", + "Fa rm", + "Ġcal endars", + "Ġcalendar s", + "Ġcalend ars", + "g zip", + "gz ip", + "Ġblock buster", + "ĠPly mouth", + "çľ Į", + "res ponses", + "response s", + "respons es", + ".Dialog Interface", + "- grand", + "-g rand", + "-gr and", + "Ġ getSource", + "Ġget Source", + "ĠgetS ource", + "Ġdej tings", + "Ġdejting s", + "Ġt ieten", + "Ġti eten", + "Ġtie ten", + "Ġcondem nation", + "Ġcondemn ation", + "Ġcontin uar", + "Ġcontinu ar", + "Ġcontinua r", + ".Mock Mvc", + "/ english", + "Ġ MediaPlayer", + "ĠMedia Player", + "com puted", + "comp uted", + "compute d", + "comput ed", + "ĠCl ippers", + "ĠClip pers", + "ĠCli ppers", + "( delegate", + "(de legate", + ". Slf", + ".S lf", + "Ġ ë¡ľ", + "Ġë¡ ľ", + "ĠT ide", + "ĠTi de", + "Ġih rem", + "Ġihr em", + "Ġihre m", + "ĠW an", + "ĠWa n", + "Ñĥ ÑİÑī", + "ÑĥÑİ Ñī", + "} ><", + "}> <", + "Disc ussion", + "Discuss ion", + "Ġw atts", + "Ġwat ts", + "Ġwatt s", + "- minus", + "-m inus", + "-min us", + "ĠJul iet", + "ĠJulie t", + "ĠJuli et", + "éĽ ħ", + "Ġcon cluding", + "Ġconcl uding", + "and scape", + "ands cape", + "Ġúlt ima", + "ĠD ERP", + "ĠDE RP", + "ĠDER P", + "Ġsign Up", + "ĠSecond ly", + "W AIT", + "WA IT", + "l ds", + "ld s", + ". callbacks", + ".call backs", + ".callback s", + "( hour", + "(h our", + "im ators", + "ima tors", + "imator s", + "imat ors", + "vol ent", + "A AF", + "AA F", + "e driver", + "ed river", + "ĠMath ematic", + "< Tuple", + "'", + "Ġ/> '", + "{ j", + "_AB ORT", + "E ther", + "Et her", + "Eth er", + "Ġeduc ator", + "Ġpreca ution", + "Ġfinger tips", + "Ġfingert ips", + "get Var", + "cam atan", + "- debug", + "-de bug", + "ĠR AF", + "ĠRA F", + "[ arg", + "[a rg", + "Ġr aced", + "Ġrace d", + "Ġrac ed", + "Ġra ced", + "Ġts unami", + ".f link", + ".fl ink", + "Ġgl yc", + "Ġgly c", + "u ko", + "uk o", + "Ġ Multiply", + "ĠM ultiply", + "ĠMulti ply", + "ĠMultip ly", + "Ġre distribution", + "Ġred istribution", + "Ġredistrib ution", + "Ġredis tribution", + "A GO", + "AG O", + "Ġ Routine", + "ĠR outine", + "ĠRout ine", + "Ġ opr", + "Ġo pr", + "Ġop r", + "( lower", + "(l ower", + "(low er", + "(lo wer", + "ĠFun ktion", + "ĠFunk tion", + ". dk", + ".d k", + "Ġ egt", + "Ġe gt", + "Ġeg t", + "_B ASIC", + "sys call", + "ĠL SD", + "ĠLS D", + "Ġ Duplicate", + "ĠD uplicate", + "ĠDup licate", + "_ sell", + "_s ell", + "_se ll", + "_sel l", + "Ġerror Handler", + "_ ips", + "_i ps", + "_ip s", + "Ġ erv", + "Ġe rv", + "Ġer v", + "an nie", + "ann ie", + "anni e", + "(resource Name", + "Ġbott led", + "Ġbottle d", + "Ġcraw ling", + "Ġcrawl ing", + "e gment", + "eg ment", + ".set Tag", + "Ġ rss", + "Ġr ss", + "Ġrs s", + "ĠQu arry", + "ĠQuar ry", + "_ exact", + "_ex act", + ". jwt", + ".j wt", + "ĠBo ards", + "ĠBoard s", + "o pi", + "op i", + "Ġn asal", + "Ġna sal", + "Ġnas al", + "Ġ XYZ", + "ĠX YZ", + "ĠXY Z", + ". ud", + ".u d", + "North ern", + "Nor thern", + "Ġact ivating", + "Ġactiv ating", + "e dx", + "ed x", + "ov ah", + "ova h", + "Ġ indx", + "Ġin dx", + "Ġi ndx", + "Ġind x", + "Alert Dialog", + "Ġt ienes", + "Ġti enes", + "Ġtie nes", + "Ġtiene s", + "an nya", + "ann ya", + "anny a", + "_ pan", + "_p an", + "_pa n", + "( decimal", + "(d ecimal", + "(de cimal", + "(dec imal", + ". Dict", + ".D ict", + ".Di ct", + "Ġsubsidi aries", + "Product Name", + "F ew", + "Fe w", + "d ato", + "da to", + "dat o", + "od ied", + "odi ed", + "odie d", + "- under", + "-un der", + "-u nder", + "Ġ ê²ĥ", + "Ġê² ĥ", + "çīĪ æľ¬", + "at ism", + "atis m", + "ati sm", + "[ Math", + "[M ath", + ". '<", + ".' <", + "( infile", + "(in file", + "Ġde notes", + "Ġden otes", + "Ġdenote s", + "$ class", + "$c lass", + "_SEC URITY", + "Ġsew age", + "m elon", + "me lon", + "mel on", + "( Character", + "(Char acter", + "/ github", + "/g ithub", + "/git hub", + "Ġgl aring", + ". Guid", + ".G uid", + "_ sparse", + "_s parse", + "_sp arse", + "Ġ Margin", + "ĠM argin", + "ĠMar gin", + "ĠMarg in", + "_ dns", + "_d ns", + "_dn s", + "Ġme iner", + "Ġmein er", + "Ġmeine r", + "Ġleft ist", + "ĉ loc", + "ĉl oc", + "a bytes", + "aby tes", + "abyte s", + "Ġequipment s", + "Ġequip ments", + "ex po", + "exp o", + "ĠSom erset", + "E K", + "æį ¢", + "Ġlect urer", + "Ġlecture r", + "Ġmem iliki", + "æł ¸", + "ç´ ł", + "p ron", + "pr on", + "pro n", + ": pointer", + "b orrow", + "bor row", + "ĠProt ective", + "ĠProtect ive", + "_ cf", + "_c f", + "Ġ ÐķÑģли", + "ĠÐķ Ñģли", + "b pp", + "bp p", + "' ;ĊĊĊĊ", + "';Ċ ĊĊĊ", + "';ĊĊ ĊĊ", + "'; ĊĊĊĊ", + "';ĊĊĊ Ċ", + "at urally", + "atur ally", + "atural ly", + "_ NAV", + "_N AV", + "Ġpe ptide", + "> d", + "Ġ ifstream", + "Ġif stream", + "Ġi fstream", + "_FACT ORY", + "_FACTOR Y", + "' );//", + "') ;//", + "'); //", + "j oined", + "join ed", + "jo ined", + "m ong", + "mon g", + "mo ng", + "Ġtime spec", + "Ġtimes pec", + "Ġdest abil", + "Ġdesta bil", + "Ġ autop", + "Ġaut op", + "Ġauto p", + "Ġau top", + "- limit", + "-l imit", + "-li mit", + "public ation", + "pub lication", + "ĠD enn", + "ĠDe nn", + "ĠDen n", + ". Memory", + ".M emory", + "( skb", + "(s kb", + "(sk b", + "ĠAna heim", + "_RETURN TRANSFER", + "o ueur", + "ou eur", + "( _('", + "(_ ('", + "l egt", + "le gt", + "leg t", + "ist ingu", + "isting u", + "ĉ priv", + "ĉp riv", + "ĉpr iv", + "Ġredirect s", + "M t", + "Ġal leen", + "Ġall een", + "Ġalle en", + "Ġ PointF", + "ĠPoint F", + "Ġ omin", + "Ġo min", + "Ġom in", + "Ġc itt", + "Ġcit t", + "Ġci tt", + "ĠT age", + "ĠTag e", + "ĠTa ge", + "ĠW alls", + "ĠWall s", + "ĠWal ls", + "á» ī", + "Ġoccup ying", + "Ġoccupy ing", + "x BF", + "xB F", + "r angle", + "ra ngle", + "ran gle", + "rang le", + "Ġrel ational", + "Ġrelation al", + "Ġrelat ional", + "- org", + "-o rg", + "-or g", + "Ġ jpg", + "Ġj pg", + "Ġjp g", + "- derived", + "Ġmal function", + "ĠB enson", + "ĠBen son", + "( scroll", + "(s croll", + "(sc roll", + "Ġ XD", + "ĠX D", + "H oly", + "Ho ly", + "Hol y", + "( commands", + "(command s", + "(comm ands", + "Ġt ipping", + "Ġti pping", + "Ġtip ping", + "Ġpr imitives", + "Ġprim itives", + "Ġprimitive s", + "Ġsex le", + "Call Check", + "Ġ MASTER", + "ĠM ASTER", + "ĠMA STER", + "ĠMAS TER", + "_ TEAM", + "_TE AM", + ".setRequest Header", + "_ specs", + "_sp ecs", + "_spec s", + "Ġs erge", + "Ġser ge", + "Ġserg e", + ". Master", + ".M aster", + ".Ma ster", + "Ġ ims", + "Ġi ms", + "Ġim s", + ".Spring BootTest", + "pay pal", + "ĠW ANT", + "ĠWA NT", + "ĠWAN T", + ". Inst", + ".I nst", + ".In st", + "ĠCar pet", + "ĠCarp et", + "Ġwrong ly", + "( $('.", + "($ ('.", + "($( '.", + "($(' .", + "Ġ bild", + "Ġb ild", + "Ġbi ld", + "Ġbil d", + ". Roll", + ".R oll", + "ĠU rb", + "ĠUr b", + "- can", + "-c an", + "-ca n", + "ãģı ãģłãģķãģĦ", + "ãģıãģł ãģķãģĦ", + "olib eral", + " čĊčĊ", + "Ġ-->čĊ čĊ", + "ĠMa hm", + "ĠMah m", + "} \";ĊĊ", + "}\" ;ĊĊ", + "}\";Ċ Ċ", + "Ġ dq", + "Ġd q", + "ĠPublish ers", + "ĠPublisher s", + "ĠA mpl", + "ĠAm pl", + "ĠAmp l", + "ĠDaniel le", + "ĠDani elle", + "Ġ tern", + "Ġt ern", + "Ġte rn", + "Ġter n", + "èµ ·", + "no ÅĽÄĩ", + "e in", + "ei n", + "ĠAsync Storage", + "u nger", + "un ger", + "ung er", + "unge r", + "ro uw", + "rou w", + "Ġsc issors", + "/ assert", + "/as sert", + ". bucket", + ".b ucket", + "/ archive", + "/a rchive", + "/arch ive", + "_ Man", + "_M an", + "Ġint oler", + "Ġinto ler", + "Ġ ()=>", + "Ġ( )=>", + "Ġ() =>", + "Ġ ÐĴÑĭ", + "ĠÐĴ Ñĭ", + "Ġs ai", + "Ġsa i", + ". xy", + ".x y", + ". \"čĊ", + ".\" čĊ", + "Ġur inary", + "e sub", + "es ub", + "IST ICS", + "ISTIC S", + "Ġ κ", + "ĠÎ º", + "Ġcompl iments", + "Ġcompliment s", + "Ġtypings Japgolly", + "i har", + "ih ar", + "Exp ansion", + "ĠS erving", + "ĠSer ving", + "ĠServ ing", + "_ students", + "_st udents", + "_student s", + "ĠX BOOLE", + "( il", + "(i l", + "Ġ ì²ĺ", + "Ġì² ĺ", + "Ġj ó", + "( tol", + "(t ol", + "(to l", + "( JS", + "(J S", + "ĉ CG", + "ĉC G", + "Ġ DRAW", + "ĠD RAW", + "ĠDR AW", + "t wig", + "tw ig", + "Ġo at", + "Ġoa t", + "_ smooth", + "_sm ooth", + "ĠC SL", + "ĠCS L", + "Ġo sob", + "Ġos ob", + "Ġens uing", + "Ġb anker", + "Ġbank er", + "Ġban ker", + "ĠBack pack", + "_ ping", + "_p ing", + "_pin g", + "_pi ng", + "Ġ wishlist", + "Ġw ishlist", + "Ġwish list", + "= ax", + "=a x", + "ĉ ĠĠĠĊ", + "ĉĠĠĠ Ċ", + "ĉĠ ĠĠĊ", + "ĉĠĠ ĠĊ", + "Dis ney", + "ste ady", + "stead y", + "\" >%", + "\"> %", + "Ġproph ets", + "Ġprophet s", + "Ġ ZX", + "ĠZ X", + "Ġminimal ist", + "Ġminim alist", + ". PLAIN", + ".PL AIN", + "Se attle", + "Seat tle", + ". ordinal", + "Ġ PIPE", + "ĠPI PE", + "Ġret orna", + "Ġretorn a", + "Ġj ugador", + "Ġjug ador", + "ĠB ret", + "ĠBr et", + "ĠBre t", + "ĠâĶ ľ", + "Ġp lush", + "Ġpl ush", + "Ġplus h", + "Ġplu sh", + "UL ATOR", + "ULA TOR", + "S orting", + "Sort ing", + ".grid y", + ".gr idy", + "ect omy", + "_ activ", + "_ac tiv", + "_act iv", + "r ack", + "ra ck", + "rac k", + "Inter active", + "ĠAntar ctica", + "ĠAntarctic a", + "Ġv engeance", + "en so", + "ens o", + "_ known", + "_k nown", + "up plier", + "upp lier", + ". Modules", + ".Mod ules", + ".Module s", + "ĠConnection State", + "éļ IJèĹı", + "éļIJ èĹı", + "@ FindBy", + "Ġ placer", + "Ġpl acer", + "Ġplace r", + "Ġplac er", + "Ġpla cer", + "\\ model", + "< ()>", + "<( )>", + ".is Successful", + ".isSuccess ful", + "- good", + "-g ood", + "-go od", + "b z", + "ĠDr aco", + "ĠDra co", + "Ass istant", + "- extra", + "-ex tra", + "-ext ra", + "аб лиÑĨ", + "Ġhyp ocrisy", + "Ġt st", + "Ġts t", + "ĠA gr", + "ĠAg r", + "$ txt", + "$t xt", + "Ġlog istic", + "l icensed", + "lic ensed", + "license d", + "ĠH of", + "ĠHo f", + "Ġ tat", + "Ġt at", + "Ġta t", + "( iv", + "(i v", + "Ġint oxic", + "Ġinto xic", + "Ġintox ic", + "post Id", + "_ strike", + "_st rike", + "_str ike", + "Ġhum iliation", + "Ġhumili ation", + "p codes", + "pc odes", + "\" sync", + "\"s ync", + "( recipe", + "(rec ipe", + "+ N", + "r ente", + "re nte", + "ren te", + "rent e", + "ĉ Client", + "ĉC lient", + "ycop g", + "ĠZur ich", + "ĠZu rich", + "Ġ Profiles", + "ĠPro files", + "ĠProf iles", + "ĠProfile s", + "C ountries", + "Count ries", + "Ġp ict", + "Ġpi ct", + "Ġpic t", + "Ġroll out", + "requ encies", + "Ġp atched", + "Ġpat ched", + "Ġpatch ed", + "Ġcar tridges", + "Ġcartridge s", + "Ġsh ading", + "Ġsha ding", + "J ar", + "Ja r", + "Ġsalv age", + "ĠT axes", + "ĠTax es", + "ĠTa xes", + "Ġstand by", + "ap oran", + "apor an", + "apo ran", + "E igen", + ". angular", + "Ġ Nested", + "ĠN ested", + "ĠNe sted", + "ĠNest ed", + "ĠNes ted", + "ä º«", + "äº «", + "Ġ isVisible", + "Ġis Visible", + "ĠDw ight", + "_BR ANCH", + ". Delay", + ".D elay", + ".De lay", + "Ġk end", + "Ġke nd", + "Ġken d", + "Ġfacilit ated", + "Ġfacilitate d", + "Ġfacil itated", + ". flatMap", + ".flat Map", + "Ġs anta", + "Ġsan ta", + "Ġsant a", + "ĉ Send", + "ĉS end", + "/ messages", + "/m essages", + "/message s", + "Ġof Type", + "ĉ swap", + "ĉs wap", + "ĉsw ap", + "# plt", + "ĠTur ks", + "ĠTurk s", + "N ES", + "NE S", + "Ġprogress ively", + "Ġprogressive ly", + "ĠRes idence", + "Ġ TREE", + "ĠT REE", + "ĠTR EE", + "ĠTRE E", + "Ġn oen", + "Ġno en", + "Ġnoe n", + "d io", + "di o", + "Ġ nelle", + "Ġn elle", + "Ġne lle", + "Ġnel le", + "Ġnell e", + "Ġso gar", + "Ġsog ar", + "i tti", + "it ti", + "itt i", + "week ly", + "Ġambigu ity", + "_ Settings", + "_S ettings", + "_Set tings", + "W are", + "War e", + "Wa re", + ". neo", + ".n eo", + ".ne o", + "_ DST", + "_D ST", + "_DS T", + "Ġ æĸ¹", + "Ġæĸ ¹", + "p rep", + "pr ep", + "pre p", + "l obby", + "lob by", + "@ email", + "/ movie", + "/m ovie", + "Ġfun kc", + "Ġfunk c", + "Ġ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ċ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĊ", + "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊ", + "ÂŃ s", + "Ġguard ians", + "Ġguardian s", + "- pos", + "-p os", + "-po s", + "Ġconfig uring", + "Ġconfigur ing", + "ĠC PS", + "ĠCP S", + "ĠD eus", + "ĠDe us", + "Ġvidé os", + "Ġvidéo s", + "_ empresa", + "_emp resa", + "Ġsl apped", + "Ġsla pped", + "Ġslap ped", + "< Model", + "',Ċ", + "\"> ',Ċ", + "\">' ,Ċ", + "\">', Ċ", + "_X DECREF", + "ĠBuzz Feed", + "_M ARGIN", + "P LOY", + ". small", + ".s mall", + ".sm all", + "Ġm imeType", + "Ġmime Type", + "Ġh olog", + "Ġho log", + "Ġhol og", + "ĉ camera", + "ĉc amera", + "l ias", + "li as", + "lia s", + "Ġsusp ense", + "od ynam", + "ody nam", + "odyn am", + "b au", + "ba u", + "Ġgrave yard", + "_ named", + "_n amed", + "_name d", + "_na med", + "\": \"'", + "\":\" '", + "Ġ ************************************************", + "Ġ******************************** ****************", + "Ġ******** ****************************************", + "Ġ**************** ********************************", + "Ġ************************ ************************", + "Ġ**************************************** ********", + "Ġgame Over", + "Ġ LENGTH", + "ĠLE NGTH", + "ĠLENG TH", + "ĉ screen", + "ĉs creen", + "ĉsc reen", + "Ġdo InBackground", + "_ dependencies", + "_depend encies", + "_dep endencies", + "Ġ rtc", + "Ġr tc", + "Ġrt c", + "/ up", + "/u p", + "_ ROM", + "_R OM", + "_RO M", + "H all", + "Ha ll", + "Hal l", + "Ġdef iciencies", + "( te", + "(t e", + "' #", + "_ equiv", + "_e quiv", + "_equ iv", + "Ġpre order", + "ĠA xe", + "ĠAx e", + "о мÑĥ", + "ом Ñĥ", + ".send File", + "Ġ filt", + "Ġf ilt", + "Ġfil t", + "Ġfi lt", + "Ġ Limits", + "ĠL imits", + "ĠLim its", + "ĠLi mits", + "ĠLimit s", + "ĠCaval iers", + ". discount", + ".dis count", + ".disc ount", + "âĨ IJ", + "ĠW it", + "ĠWi t", + "QRST UV", + "Ġ ij", + "Ġi j", + "Ġt egen", + "Ġte gen", + "Ġteg en", + "Ġ :\",", + "Ġ: \",", + "Ġ:\" ,", + "diff iculty", + "p unkt", + "pun kt", + "punk t", + "ĠEm ails", + "ĠEmail s", + "ch lor", + "chl or", + "( fun", + "(f un", + ". Uint", + ".U int", + ".Ui nt", + "ĠSt all", + "ĠSta ll", + "_ verified", + "_ver ified", + "u D", + "File Type", + "Ġple asures", + "Ġpleasure s", + "Ġpleas ures", + "Ġjud iciary", + "Ġs ham", + "Ġsh am", + "Ġsha m", + "i pur", + "ip ur", + "_ PLUS", + "_PL US", + "of fers", + "off ers", + "offer s", + "( foo", + "(f oo", + "_ GT", + "_G T", + "ĉ core", + "ĉc ore", + "EN TION", + "ENT ION", + "ĠLib eration", + "ĠLiber ation", + "Command Line", + "_ department", + "_de partment", + "_dep artment", + "_depart ment", + ". Ar", + ".A r", + "_ neighbor", + "_ne ighbor", + "Ġ Submitted", + "ĠSub mitted", + "ĠSubmit ted", + "Ġ Ċ", + "\"> -->Ċ", + "Ġdro its", + "Ġdroit s", + "Ġhomosexual s", + "Ġab duction", + "ĉ widget", + "ĉw idget", + "$ headers", + "$header s", + "ĠD AR", + "ĠDA R", + "Ġf la", + "Ġfl a", + "th reat", + "thr eat", + "Ġl ouis", + "Ġlo uis", + "Ġlou is", + ". GetProperty", + ".Get Property", + "\" Just", + "( frames", + "(f rames", + "(frame s", + "(fr ames", + "r yo", + "ry o", + "prof ession", + "| i", + "íķ´ ìĦľ", + "( sv", + "(s v", + "Ġun recognized", + "I onic", + "Io nic", + "Ion ic", + "F ashion", + "Screen State", + "Ġ Incoming", + "ĠIn coming", + "ĠInc oming", + "Not Nil", + "Ġsyn cing", + "Ġsync ing", + "e mie", + "em ie", + "emi e", + "Ġth ermo", + "Ġther mo", + "Ġtherm o", + "_ procs", + "_pro cs", + "_pr ocs", + "_proc s", + "Ġincons istency", + "Ġinconsist ency", + "rel igious", + ". mj", + ".m j", + "Ġperson n", + "Ġpers onn", + "Ġperso nn", + "Ġmoment os", + "Ġmomento s", + "or arily", + "Ġ æĬ", + "Ġæ Ĭ", + "_ne urons", + "Ill ustr", + "im oto", + "imo to", + "i lik", + "il ik", + "ili k", + "ĠW oj", + "ĠWo j", + "Tr ading", + "Trad ing", + "Tra ding", + "Ġapp are", + "Ġap pare", + "Ġappar e", + "Ġentre prises", + "Ġentreprise s", + "a chat", + "ac hat", + "ach at", + "acha t", + "Ġ ¬", + "Ġ ¬", + "Ġne igh", + "Ġnei gh", + "BUTTON DOWN", + "ĠMa her", + "ĠMah er", + "a ghan", + "ag han", + "agh an", + "- hash", + "-h ash", + "-has h", + "\" f", + "Ġclient ele", + "Ġcliente le", + ".add Button", + "ĉ SP", + "ĉS P", + "Q i", + "Ġg rated", + "Ġgr ated", + "Ġgrat ed", + "Ġgra ted", + "Ġgrate d", + "PO SITE", + "POS ITE", + "POSIT E", + ": >", + "ĠH owell", + "ĠHow ell", + "ĠHo well", + "ĠHowe ll", + "ĠCompar ative", + "Ġ ISC", + "ĠI SC", + "ĠIS C", + "ÂŃ i", + "O cean", + "D avis", + "Da vis", + "ĠFil me", + "ĠFilm e", + "W ins", + "Win s", + "Wi ns", + "ĠJ IT", + "oc cer", + "occ er", + "ĠC orm", + "ĠCo rm", + "ĠCor m", + "ENCH MARK", + "rc hive", + "rch ive", + "i cação", + "ic ação", + "ica ção", + "Ġm ata", + "Ġmat a", + "Ġma ta", + "Ġchild birth", + "ĠOption ally", + "ĠOptional ly", + "E ns", + "En s", + "Ġx http", + "Ġel ucid", + "_Osc InitStruct", + ") )):Ċ", + ")) ):Ċ", + "))) :Ċ", + "Ġint uit", + "Ġ Donate", + "ĠDon ate", + "Ġcorre lates", + "Ġcorrel ates", + "Ġcorrelate s", + "> Delete", + "Ġe quipe", + "Ġequ ipe", + "Ġequip e", + "Ġb oca", + "Ġbo ca", + "Ġinf latable", + "Ġinfl atable", + "e rah", + "er ah", + "era h", + "ĠDateTime Kind", + "Ġcal ves", + "\\ Lib", + "\\L ib", + "Ġem lrt", + "ĠTr ilogy", + "ĠTri logy", + "ĠP anc", + "ĠPan c", + "ĠPa nc", + "ĠD uis", + "ĠDu is", + "ĠpelÃŃcul a", + "W ARDS", + "WARD S", + "WAR DS", + "_DE TECT", + "_DET ECT", + "-section al", + "d hcp", + "dh cp", + "For Row", + "- destruct", + "-d estruct", + "-de struct", + "Ġ Presenter", + "ĠP resenter", + "ĠPres enter", + "ĠPresent er", + "/ slick", + "/s lick", + "/sl ick", + ", on", + ",o n", + "ĠCit adel", + "logged in", + "logg edin", + "_ subtype", + "_sub type", + "Ġs igue", + "Ġsi gue", + "Ġsig ue", + "Ġsigu e", + "Ġc uring", + "Ġcur ing", + "Ġcu ring", + "ĠFire wall", + "Ġfluores cence", + "ĠItalian s", + "ĠItalia ns", + "ĠItal ians", + "иÑĤ ÑģÑı", + ". getStyle", + ".get Style", + "In Seconds", + "j ie", + "ji e", + "- Smith", + "-S mith", + "Ġx link", + "Ġxl ink", + "Ġsub missive", + "о нÑĤ", + "он ÑĤ", + "arbon ate", + "ĠF aul", + "ĠFa ul", + "_ goals", + "_go als", + "_goal s", + "ĠCommission ers", + "ĠCommissioner s", + "chart Instance", + "_POST FIELDS", + "Ġmed ial", + "Ġmedia l", + "Ġmedi al", + "Ġm anos", + "Ġman os", + "Ġma nos", + "Ġmano s", + "Ġd elt", + "Ġde lt", + "Ġdel t", + "s vm", + "sv m", + ". Apis", + ".A pis", + ".Api s", + ".Ap is", + "e phy", + "ep hy", + "eph y", + "Ġasym pt", + "Ġapp Delegate", + "Ġimpro bable", + "c ka", + "ck a", + "s imd", + "si md", + "sim d", + "/ Error", + "/E rror", + ". âĢĵ", + "Ġ PTS", + "ĠP TS", + "ĠPT S", + "d eer", + "de er", + "dee r", + "Ġs ina", + "Ġsi na", + "Ġsin a", + "m agnitude", + "ID ADE", + "IDA DE", + "IDAD E", + "'] }'", + "']} '", + "Ġmay ores", + "Ġmayor es", + "Ġmayo res", + "ĉ comment", + "ĉcom ment", + "/ console", + "/con sole", + "\" @", + "v olt", + "vo lt", + "vol t", + ". sell", + ".s ell", + ".se ll", + ".sel l", + "ĠM acy", + "ĠMac y", + "ĠMa cy", + "Ġme lod", + "Ġmel od", + "Ġim ágenes", + "_ chg", + "_c hg", + "_ch g", + "Ġin out", + "Ġi nout", + "id ente", + "ide nte", + "ident e", + "iden te", + ") '),Ċ", + ")' ),Ċ", + ")'), Ċ", + "d ni", + "dn i", + ". blob", + ".b lob", + ".bl ob", + "Ġtyp ography", + "Ġe erie", + "Ġee rie", + "Ġeer ie", + "_ OID", + "_O ID", + "p esan", + "pe san", + "pes an", + "a jan", + "aj an", + "aja n", + "Ġch opping", + "Ġcho pping", + "Ġchop ping", + "Ġbl uff", + "a df", + "ad f", + "_ bases", + "_b ases", + "_base s", + ". Formatter", + ".Form atter", + ".Format ter", + ".For matter", + "Ġ\\ %", + "ĠPage Info", + "Car rier", + "ĠCal ibration", + "c omo", + "com o", + "co mo", + "-b odied", + "Ġfinanc ier", + "Ġ INA", + "ĠI NA", + "ĠIN A", + ". ERR", + ".E RR", + "Ġho odie", + "Ġhood ie", + "ĠS anity", + "ĠSan ity", + "gu arded", + "guard ed", + ".opend aylight", + "IS MATCH", + "ISM ATCH", + "High lights", + "Highlight s", + "ü nk", + "ün k", + "an iem", + "ani em", + "anie m", + "ang ered", + "ange red", + "anger ed", + "assign ments", + "assignment s", + "Ġregistr ado", + "Ġregist rado", + "ĠU PPER", + "ĠUP PER", + "ampil kan", + "a shire", + "as hire", + "ash ire", + "ashi re", + "ĠNik ola", + "ĠNi kola", + "ĠNikol a", + "ĠC FL", + "ĠCF L", + "ĠH DC", + "ĠHD C", + "Ġp oids", + "Ġpo ids", + "Ġpoi ds", + "ĠI Ps", + "ĠIP s", + "Ġprevent ative", + "ips oid", + "i fix", + "if ix", + "ifi x", + ". camel", + ".c amel", + ".ca mel", + ".cam el", + ". ga", + ".g a", + "V olumes", + "Volume s", + "Vol umes", + "- ste", + "-s te", + "-st e", + "Y ahoo", + "Ya hoo", + "_s ibling", + "_si bling", + "H ighest", + "High est", + "Hi ghest", + "opt group", + "Ġkvin na", + "Ġkvinn a", + "âĢĿ ãĢĤĊĊ", + "âĢĿãĢĤ ĊĊ", + "ĠAppl iances", + "Ġ \"><", + "Ġ\" ><", + "Ġ\"> <", + "' )\")Ċ", + "') \")Ċ", + "')\" )Ċ", + "h tt", + "ht t", + "ĠIdent ified", + "Ġpencil s", + "Ġpenc ils", + "Ġmember Id", + "Ġappend String", + ".load Data", + "Ġmock Mvc", + "Ġj ub", + "Ġju b", + "ĠS lut", + "ĠSl ut", + "ĠTai pei", + "st att", + "stat t", + "sta tt", + "P olit", + "Pol it", + "Po lit", + "Ġpart ager", + "Did Change", + "Incre ases", + "Increase s", + ") }.", + ")} .", + "ĠB aba", + "ĠBa ba", + "ĠBab a", + "_CL IP", + "_CLI P", + "[ unit", + "[u nit", + "Ġ клÑİÑĩ", + "Ġк лÑİÑĩ", + "Ġalc uni", + "ĠL ola", + "ĠLo la", + "ĠLol a", + "Ġcl inging", + "Ġclin ging", + "Ġcling ing", + "@ PostMapping", + "( concat", + "(con cat", + "Ġ ssid", + "Ġs sid", + "Ġss id", + "ĠF auc", + "ĠFa uc", + "o kit", + "ok it", + "oki t", + "ĠRecord ed", + "á lez", + "ál ez", + "ále z", + "($ ('<", + "($( '<", + "($(' <", + ".assertIs Not", + "Ġk ali", + "Ġka li", + "Ġkal i", + "V olt", + "Vo lt", + "Vol t", + "Ġwarm ly", + "Ġsc ares", + "Ġsca res", + "Ġscar es", + "Ġscare s", + "g etti", + "get ti", + "ge tti", + "gett i", + "füh rt", + "führ t", + "_ does", + "_d oes", + "_do es", + ". EMAIL", + ".E MAIL", + "im ations", + "imation s", + "imat ions", + "Ġspring fox", + "ĠD ecom", + "ĠDe com", + "ĠDec om", + "ar cy", + "arc y", + "Ġgl itches", + "Ġglitch es", + "ĠM off", + "ĠMo ff", + "ĠV oll", + "ĠVol l", + "ĠVo ll", + ". between", + ".b etween", + "Ġco orden", + "Ġcoord en", + "ĠPart icularly", + "G BP", + "GB P", + "Ġ semble", + "Ġs emble", + "Ġsem ble", + "Ġsembl e", + "East ern", + "_M SB", + "_MS B", + "] ){čĊ", + "]) {čĊ", + "]){ čĊ", + "m organ", + "mo rgan", + "mor gan", + "ĠE VAL", + "ĠEV AL", + "d ere", + "de re", + "der e", + "H OUSE", + "HO USE", + "m oire", + "mo ire", + "ist ique", + "isti que", + "_l stm", + "_lst m", + "_ls tm", + "- commit", + "-com mit", + "-comm it", + "yster ious", + "Ġtw ink", + "Ġtwin k", + "- thumbnails", + "-th umbnails", + "-thumbnail s", + "e nÃŃ", + "en ÃŃ", + ": '',", + ":' ',", + ":'' ,", + "Ġblack out", + "ĠFloor s", + "ĠFlo ors", + "Ġso fas", + "Ġsofa s", + "Ġsof as", + "Ġ oui", + "Ġo ui", + "Ġou i", + "le shoot", + "les hoot", + "lesh oot", + "ĠR aq", + "ĠRa q", + "- abs", + "-a bs", + "-ab s", + "Ġk ra", + "Ġkr a", + "M ining", + "Min ing", + "Mi ning", + "Mini ng", + "s haft", + "sh aft", + "sha ft", + ".set Columns", + ".setColumn s", + "Cl azz", + "Cla zz", + "PRE TTY", + ". playlist", + ".play list", + "éĸ ¢", + "-Sah aran", + "M ING", + "MI NG", + "MIN G", + "ĉ bl", + "ĉb l", + "è® ®", + "j f", + "DO CKER", + "DOC KER", + "hop efully", + "hope fully", + "( ignore", + "(i gnore", + "ĠUsers Controller", + "ĠMitar beiter", + "Ġ LES", + "ĠL ES", + "ĠLE S", + "Ham ilton", + "- metadata", + "-m etadata", + "-meta data", + "Ġ KK", + "ĠK K", + "ikt ig", + "Ġwoll te", + "Ġwol lte", + "egr ator", + "egra tor", + "] bool", + ", current", + ",c urrent", + "Ġvalue Type", + "Ġexcav ation", + "o land", + "ol and", + "ola nd", + "olan d", + "Ġv erv", + "Ġver v", + "Ġve rv", + "/ filepath", + "/file path", + "Auth Provider", + "Ġpro crast", + "ĉ ULONG", + "ĉU LONG", + "_MEM BERS", + "_MEMBER S", + "Ġup lift", + "ĠAut onomous", + "Ġart works", + "Ġartwork s", + "ĠOut reach", + "Ġp ore", + "Ġpo re", + "Ġpor e", + "Home page", + "Dialog Title", + "Ġ Generating", + "ĠG enerating", + "ĠGener ating", + "ĠGene rating", + "P ARSE", + "PAR SE", + "Ġsem anas", + "Ġsemana s", + "Ġhum ano", + "Ġhuman o", + "JSGlobal Scope", + "Ġvo lte", + "Ġvol te", + "Ġvolt e", + "Ġb ella", + "Ġbe lla", + "Ġbel la", + "Ġbell a", + "(is instance", + "Ġp lc", + "Ġpl c", + "\\ Catalog", + "\\C atalog", + "Ġeste emed", + "Ġesteem ed", + "éĽ ·", + "( suffix", + "(s uffix", + "Ġswe eps", + "Ġsweep s", + "ĉ ORDER", + "Ġdo ivent", + "Ġdoi vent", + "ĠS warm", + "ĠSw arm", + "Ġ Compiled", + "ĠComp iled", + "ĠCompile d", + "get Page", + "A DR", + "AD R", + ".R ichTextBox", + "Ġ Naming", + "ĠN aming", + "ĠNa ming", + "ĠNam ing", + "ag ged", + "agg ed", + "ĠG ANG", + "ĠGA NG", + "r asing", + "ra sing", + "ras ing", + "od eled", + "ode led", + "odel ed", + "Ġg ala", + "Ġga la", + "Ġgal a", + "ĠJS Name", + "d df", + "dd f", + "Ġil lust", + "Ġill ust", + "ĠLan sing", + "ĠLans ing", + "[ port", + "[p ort", + "- death", + "-de ath", + "Ġdin heiro", + "ĠE ighth", + "ĠEight h", + "Ġ bian", + "Ġb ian", + "Ġbi an", + "st Ã¥", + "Ġvers ión", + "ĠLinear Gradient", + "ĠH arding", + "ĠHar ding", + "ĠHard ing", + ". *)", + ".* )", + "e czy", + "ec zy", + "ecz y", + "$ header", + "Ġv Ã¥r", + "ĠvÃ¥ r", + "Un checked", + "Ġk oje", + "Ġko je", + "ĠPal adin", + "( ))),", + "() )),", + "()) ),", + "())) ,", + "G iving", + "Gi ving", + "( )})Ċ", + "() })Ċ", + "()} )Ċ", + "Ġd ips", + "Ġdi ps", + "Ġdip s", + "F riendly", + "Friend ly", + "Ġport rays", + "Ġportray s", + "Ġhel ium", + "Ġinsurg ency", + "_ expiry", + "_ex piry", + "_exp iry", + "ĠstringByAppending String", + "Ġa antal", + "Ġaan tal", + "s lope", + "sl ope", + "m ast", + "ma st", + "mas t", + ".get Integer", + ".getInt eger", + "Ġ ########################", + "Ġ######## ################", + "Ġ################ ########", + "Ġ############ ############", + "_PIPE LINE", + "Ġd ensely", + "Ġdense ly", + "Ġdens ely", + "Ġmut ating", + "m idi", + "mi di", + "mid i", + "ĠSe it", + "a yne", + "ay ne", + "NOW LED", + "ĠDes mond", + "ĠF Name", + "ĠFN ame", + "ĠN airobi", + "\\ Context", + "Ġcal cular", + "Ġcalcul ar", + "Ġcalc ular", + "- den", + "-d en", + "-de n", + "Ġ cott", + "Ġc ott", + "Ġco tt", + "Ġcot t", + "] ):čĊ", + "]) :čĊ", + "]): čĊ", + "ĠRecommend ation", + "ĠRo lex", + "ĠRole x", + "ĠRol ex", + "Ġvalidation Result", + ". pat", + ".p at", + ".pa t", + "Ġn Ãły", + "ĠRest Client", + "ĠG PI", + "ĠGP I", + "ĠAshe ville", + "Ġ OSP", + "ĠO SP", + "ĠOS P", + "ĠPER MISSION", + "ÐĶ Ð°ÑĤа", + "/ notification", + "/not ification", + "K night", + "Kn ight", + "_ Word", + "_W ord", + "ĠB ender", + "ĠBe nder", + "ĠBen der", + "ĠBend er", + "r anking", + "ran king", + "rank ing", + "Ġpart ida", + "Ġparti da", + "_ reservation", + "_res ervation", + "Ì Ģ", + "Ġm Name", + "Ġg etch", + "Ġget ch", + "Ġb orr", + "Ġbo rr", + "Ġbor r", + "Ġdilig ent", + "Disc uss", + "æŃ£ åľ¨", + "ape ake", + "i oned", + "ion ed", + "io ned", + "ione d", + "-N azi", + ". cum", + ".c um", + "ĠK ron", + "ĠKr on", + "ĠKro n", + "= $('#", + "=$ ('#", + "=$( '#", + "/ single", + "/s ingle", + "Ġerot isch", + "ĠV ib", + "ĠVi b", + "Ġrat ified", + "Ġconcert ed", + "ĠREG ARD", + "Ġdo br", + "Ġdob r", + ".Driver Manager", + "' r", + "Port able", + "Por table", + "ĉ suite", + "ĉs uite", + "Ġrel aciones", + "Ġrelacion es", + "ĠD op", + "ĠDo p", + "emp loi", + "empl oi", + "emplo i", + "D OB", + "DO B", + "Ġcr umbs", + "Ġ xls", + "Ġx ls", + "Ġxl s", + "_ Application", + "_App lication", + "(' :',", + "(': ',", + "Ġ-- ----------------------------------------------------------------------Ċ", + "Ġ---------------------------------------------------------------- --------Ċ", + "Ġ------------------------------------------------------------ ------------Ċ", + "m se", + "ms e", + "Ġb erk", + "Ġbe rk", + "Ġber k", + "Ġ ReturnValue", + "ĠReturn Value", + "ĠB elly", + "ĠBel ly", + "ĠBell y", + "Ġc amar", + "Ġca mar", + "Ġcam ar", + "ĠPe ek", + "ĠPee k", + "el sing", + "els ing", + "Ġnot ifies", + "ĠTr istan", + "ĠTri stan", + "ĠG AR", + "ĠGA R", + "em me", + "emm e", + "ĠElev ated", + "_ CSV", + "_C SV", + "_CS V", + "( chalk", + "(ch alk", + "Ġtw enties", + "ĠSearch Result", + "= search", + "=s earch", + "ĠMix ing", + "ĠMi xing", + "ý t", + "Ġrecru iter", + "Ġrecruit er", + "ĠIDE OGRAPH", + "ĠA go", + "ĠAg o", + "( Operation", + "(O peration", + "(Op eration", + "$ values", + "$value s", + "$val ues", + "Ġworld ly", + "ĠRos enberg", + "ĠRosen berg", + "ĠConfigure Services", + "> ** Ċ", + "...\" >Ċ", + "Ġsn ork", + "Ġsno rk", + "_ opacity", + "_op acity", + "ĠinitWith NibName", + "i ado", + "ia do", + "iad o", + "A AC", + "AA C", + "Ġ ]).", + "Ġ] ).", + "Ġ]) .", + "; z", + "_ paragraph", + "_par agraph", + "_para graph", + "Ġn oses", + "Ġno ses", + "Ġnos es", + "Ġnose s", + "st ands", + "stand s", + "sta nds", + "stan ds", + "i fr", + "if r", + "_m E", + "I raq", + "Ir aq", + ". Predicate", + ".P redicate", + "e naire", + "en aire", + "ena ire", + "] ]];Ċ", + "]] ];Ċ", + "Ġ unidad", + "Ġun idad", + "Ġuni dad", + "Ġretire es", + "Ġretir ees", + "_ hello", + "_h ello", + "Ġ modele", + "Ġmod ele", + "Ġmodel e", + "Ġmode le", + "ĠUITableView Controller", + "ĠUIT ableViewController", + "f write", + "fw rite", + "_ numero", + "_num ero", + "_numer o", + "_ visited", + "_vis ited", + "_visit ed", + "Ġrec ebe", + "Ġrece be", + "( Notification", + "Fant astic", + "_ submenu", + "_sub menu", + "ĠP EM", + "ĠPE M", + "ĠC upertino", + "ĠCup ertino", + "approx imately", + "cl assed", + "class ed", + "clas sed", + ".Read String", + "Ġdomic ile", + "_ PW", + "_P W", + "Ġball park", + "ĠK ale", + "ĠKa le", + "ĠKal e", + "con tra", + "cont ra", + "contr a", + "_ favorite", + "_f avorite", + "/ of", + "/o f", + "Q uite", + "Qu ite", + "Quit e", + "Qui te", + "Ġ OTA", + "ĠO TA", + "ĠOT A", + "Ġacceler ometer", + "di dn", + "did n", + "| ^", + "ĠRohing ya", + "ivi crm", + "ivic rm", + "ann abin", + "anna bin", + "обÑĭ ÑĤи", + "o rado", + "or ado", + "ora do", + "' )+", + "') +", + "Ha unted", + ", ID", + ",I D", + "( UIAlertAction", + "u rv", + "ur v", + "_ bel", + "_b el", + "_be l", + "ĠMex icans", + "ĠMexican s", + "/ terms", + "Ġ Painter", + "ĠP ainter", + "ĠPa inter", + "ĠPaint er", + "ĠPain ter", + "Input Label", + "ĠV inci", + "ĠVin ci", + "ĠRo sie", + "ĠRos ie", + "\\ uc", + "\\u c", + "< Menu", + "", + "Ġ'\" >", + "_ gs", + "_g s", + "Ġcomp il", + "n ard", + "na rd", + "nar d", + "- exc", + "-e xc", + "-ex c", + "Ġrh yme", + "Ġb utto", + "Ġbut to", + "Ġbutt o", + "s ays", + "sa ys", + "say s", + "ant asy", + "anta sy", + "antas y", + "ë ¸", + "Ġcitt Ãł", + "Ġch eg", + "Ġche g", + "Time String", + "Ġpos itivity", + "Ġposit ivity", + "ĠD abei", + "ĠDa bei", + "Ġ wang", + "Ġw ang", + "Ġwa ng", + "Ġwan g", + "Ġes cre", + "Ġesc re", + "\" c", + "ĉ video", + "ĉv ideo", + "Ġ Ranked", + "ĠR anked", + "ĠRank ed", + "ĠRan ked", + ". strings", + ".string s", + ".str ings", + "> >>(", + ">> >(", + ">>> (", + "Ġин ÑĤеÑĢ", + "ĠинÑĤ еÑĢ", + "Ġre sta", + "Ġr esta", + "Ġres ta", + "Ġrest a", + "[: ,:", + "[:, :", + "Ġren dre", + "Ġrend re", + "Ġde ser", + "Ġdes er", + "Ġdese r", + "J os", + "Jo s", + "Ġdis ruptions", + "Ġdisrupt ions", + "Ġdisruption s", + "Ġо пеÑĢ", + "Ġоп еÑĢ", + "s ampling", + "sam pling", + "samp ling", + "sup press", + "Ġcontainer View", + "ĠSeam less", + "Ġ airy", + "Ġa iry", + "Ġair y", + "Ġai ry", + "Ġon load", + ".Window Manager", + "ĠP LA", + "ĠPL A", + "br aco", + "bra co", + ".set PositiveButton", + "Ġp du", + "Ġpd u", + "Ġg si", + "Ġgs i", + "Ġ Cli", + "ĠC li", + "ĠCl i", + "_gr adients", + "_grad ients", + "_gradient s", + "Ñı д", + "ĠWh isper", + "c stdint", + "Ġl äng", + "Ġlä ng", + "Ġform ulations", + "Ġformulation s", + "Ġformul ations", + "é nom", + "én om", + "ourn emouth", + "[ $_", + "[$ _", + "Ġordin arily", + ".set Username", + ".setUser name", + "Ġfacult ies", + "MIT TED", + "/ values", + "/value s", + "Ġwe ir", + "Ġwei r", + "ĠA pt", + "ĠAp t", + "M Z", + "ĉ cf", + "ĉc f", + "u cken", + "uc ken", + "uck en", + "ĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉĉ", + "ĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉĉ ĉ", + "def ense", + "[ iVar", + "[i Var", + "ĠBusiness Exception", + "Select ors", + "Selector s", + "Sel ectors", + "Sele ctors", + "( coordinates", + "(co ordinates", + "ĠRe sets", + "ĠRes ets", + "ĠReset s", + "ĠDr inks", + "ĠDrink s", + "o leans", + "ole ans", + "olean s", + "(st ypy", + "_ IOC", + "_I OC", + "_IO C", + ". xxx", + ".x xx", + ".xx x", + "ĠS later", + "ĠSl ater", + "ĠSlate r", + "ĠB elize", + "ĠBel ize", + "Ġ /************************************************************************", + "Ġ/ ************************************************************************", + "Ġ/**************************************************************** ********", + "ad din", + "add in", + "_ep isodes", + "_episode s", + "Ġis chem", + "Ġisc hem", + "legal ArgumentException", + "D anny", + "Dan ny", + "Ġ pared", + "Ġp ared", + "Ġpar ed", + "Ġpa red", + "Ġpare d", + ".code haus", + "ĠAs sy", + "ĠAss y", + "ĉ Rect", + "ĉR ect", + "â ŀ", + ". lista", + ".l ista", + ".list a", + ".li sta", + "Ġв аÑĪ", + "Ġва ÑĪ", + "Ġv ets", + "Ġve ts", + "Ġvet s", + "H WND", + "HW ND", + "is oner", + "ison er", + "iso ner", + "Ġ xo", + "Ġx o", + "Ġor ally", + "Ġoral ly", + "Ġ Stmt", + "ĠSt mt", + ".r nn", + "ĠD PI", + "ĠDP I", + "ĠSt rikes", + "ĠStr ikes", + "ĠStrike s", + ".setViewport View", + "Ġèĩª åĬ¨çĶŁæĪIJ", + "Y ELLOW", + "GL enum", + "part ners", + "partner s", + "Ġ Implicit", + "ĠImp licit", + "ĠImpl icit", + "Ġt ako", + "Ġta ko", + "Ġtak o", + "âĢĻ elle", + "âĢĻe lle", + "Ġerm ög", + "total Count", + "G il", + "Gi l", + "ĉ work", + "ĉw ork", + "Ġpr atic", + "Ġpra tic", + "Ġprat ic", + "in ati", + "ina ti", + "a bies", + "ab ies", + "abi es", + "ĠSk inner", + "ĠSkin ner", + "Ġspirit ed", + "Ġspir ited", + "Ġpancre atic", + "Ġh df", + "Ġhd f", + "' em", + "'e m", + "Ġpsych osis", + "Ġpsycho sis", + "o licit", + "ol icit", + "olic it", + "oli cit", + "Ġ\" {\"", + "Ġ\"{ \"", + "_at ual", + "_a tual", + "Ġé lect", + "Ġél ect", + "TE AM", + "Ġd ak", + "Ġda k", + "ĠSW AT", + ". FragmentManager", + ".Fragment Manager", + "Ġprovision ing", + "l ifetime", + "life time", + "lif etime", + "_EXT ENSIONS", + "_EXTENSION S", + "Ġ CASCADE", + "ĠC ASCADE", + "ĠCAS CADE", + "Ġ ![", + "Ġ! [", + "( KP", + "(K P", + "Ġ vem", + "Ġv em", + "Ġve m", + "ĠInter racial", + "ĠInterr acial", + "' ]},Ċ", + "'] },Ċ", + "']} ,Ċ", + "sp acer", + "space r", + "spa cer", + "_ kv", + "_k v", + "W arehouse", + "Ware house", + "R DD", + "RD D", + "_f sm", + "_fs m", + ".Stretch Image", + ", Yes", + ",Y es", + "ĠRefuge e", + "ĠBr inging", + "ĠBring ing", + "Ġv álido", + "Ġvál ido", + ". intersection", + ".inter section", + "Ġsp ooky", + "Ġspo oky", + "_ portal", + "_p ortal", + "_port al", + "_por tal", + "Ġ moth", + "Ġm oth", + "Ġmot h", + "Ġmo th", + "ĠZ odiac", + "ĠSOC IAL", + "M imeType", + "'] }}", + "Ġ----- ->", + "Ġ------ >", + "_ Blue", + "_B lue", + "_Bl ue", + "Ġbot anical", + "Ġfr ags", + "Ġfra gs", + "Ġfrag s", + "Ġfamil ial", + "Ġfamilia l", + "- du", + "-d u", + "Ġse izing", + "Ġseiz ing", + "Ġsei zing", + "( blocks", + "(b locks", + "(block s", + "(bl ocks", + ". rd", + ".r d", + ".check NotNull", + "Ġm iser", + "Ġmis er", + "Ġmi ser", + "Ġmise r", + "Ġmax x", + "Ġma xx", + "ĠK nee", + "ĠKn ee", + "View Item", + "Inner HTML", + "D anger", + "Da nger", + "Dan ger", + "( (__", + "(( __", + "((_ _", + "Ġprz ypad", + "Ġprzy pad", + "create Url", + "* *,", + "** ,", + "ĠDecor ating", + "ATE GY", + "ATEG Y", + "? >/", + "?> /", + ". Designer", + ".Des igner", + ".Design er", + "hex digest", + "ĠEvery where", + "all eries", + "alle ries", + "aller ies", + ".TEXT URE", + ". Blocks", + ".B locks", + ".Bl ocks", + ".Block s", + "z ell", + "ze ll", + "zel l", + "Ġpre ço", + "S uddenly", + "input Email", + "( sync", + "(s ync", + ". bd", + ".b d", + "gold en", + "> ');", + ">' );", + ">') ;", + "ĠDick inson", + "> >(Ċ", + ">> (Ċ", + ">>( Ċ", + "Ġ QUEUE", + "ĠQUE UE", + "Ġ getColumn", + "Ġget Column", + "ĠgetC olumn", + "ĠS AND", + "ĠSA ND", + "ĠSAN D", + ". piece", + ".p iece", + ".pi ece", + "l icer", + "lic er", + "li cer", + "lice r", + "Fl utter", + "Ġget Version", + "Ġresource Id", + "o gl", + "og l", + "ÅĤ aw", + "ÅĤa w", + ". Branch", + ".Br anch", + "ĉ web", + "ĉw eb", + "Ġfr amerate", + "Ġframe rate", + "Ġfram erate", + "P PP", + "PP P", + "Ġf ray", + "Ġfr ay", + "Ġfra y", + "C NT", + "CN T", + "Ġinform atie", + "Ġinformat ie", + "' ]čĊčĊ", + "'] čĊčĊ", + "']čĊ čĊ", + "ne as", + "nea s", + "Header Code", + "Ġ æ¸", + "Ġæ ¸", + "Ġt rg", + "Ġtr g", + "raw types", + "H onda", + "Ho nda", + "Hon da", + "Ġmark eter", + "Ġmarket er", + "Ġ requestData", + "Ġrequest Data", + "Ġ Pg", + "ĠP g", + "ĉ not", + "ĉn ot", + "ĉno t", + "Ġpage Info", + "Ġakt uellen", + "Ġaktu ellen", + "ãģ ķãĤĵ", + "ãģķ ãĤĵ", + "Ġ AMS", + "ĠA MS", + "ĠAM S", + "push ViewController", + "ĉ AL", + "ĉA L", + "Ġv ests", + "Ġve sts", + "Ġvest s", + "Ġves ts", + "p roduce", + "pro duce", + "produ ce", + "prod uce", + "-m ême", + "ĠRah man", + "F unny", + "Fun ny", + "E Z", + "_ Valid", + "_Val id", + "Ġsquad ron", + "Ġ lash", + "Ġl ash", + "Ġla sh", + "Ġlas h", + "Ġ irm", + "Ġi rm", + "Ġir m", + "i asco", + "ias co", + "ĠP aran", + "ĠPar an", + "ĠPa ran", + "ĠPara n", + "Ġpet ites", + "Ġpetite s", + "Ġpetit es", + "ĠDec ay", + "Ġun initialized", + "priv ileged", + "Ġm bedtls", + "å¤ĩ 注", + "Ġ ^.", + "Ġ^ .", + "Ġec static", + "D etroit", + "Det roit", + "Ġp arten", + "Ġpart en", + "Ġpar ten", + "Ġparte n", + "Ġsou venir", + ".get Login", + ".getLog in", + "моÑĤ ÑĢ", + "мо ÑĤÑĢ", + "en ção", + "ĠmÃŃn imo", + "ĠAccess ed", + "ĠAcc essed", + "r ió", + "ri ó", + "M ic", + "Mi c", + "ĠV ocal", + "ĠVo cal", + "ĠVoc al", + ".Set String", + "Ġmens ajes", + "Ġmensaje s", + "åĢ į", + "Ġattr avers", + "ĠA ph", + "ĠAp h", + "Ġ ');čĊ", + "Ġ' );čĊ", + "Ġ') ;čĊ", + "Ġ'); čĊ", + "ü nde", + "ün de", + "ünd e", + "Ġenchant ed", + "Ġench anted", + "ĠRoot State", + "ĠCLOSE D", + "ĉ ĉĉĉĉĉĉĉčĊ", + "ĉĉ ĉĉĉĉĉĉčĊ", + "ĉĉĉĉ ĉĉĉĉčĊ", + "ĉĉĉ ĉĉĉĉĉčĊ", + "ĉĉĉĉĉ ĉĉĉčĊ", + "ĉĉĉĉĉĉ ĉĉčĊ", + "ĉĉĉĉĉĉĉĉ čĊ", + "ĉĉĉĉĉĉĉ ĉčĊ", + "Ġcal iente", + "or ris", + "orr is", + "Ġphysic ists", + "Ġphysicist s", + "h wnd", + "hw nd", + "_ vi", + "_v i", + "Ġráp ido", + "Ġcapital ized", + "Ġcapitalize d", + "ed By", + "Ġmach ining", + "Ġh ubby", + "Ġhub by", + "ĠSt acy", + "ĠSta cy", + ". Bus", + ".B us", + "d rink", + "dr ink", + "H ur", + "Hu r", + "Ġpr opia", + "Ġprop ia", + "Unit Test", + "Ġmiscon ception", + "_ _));Ċ", + "__ ));Ċ", + "__) );Ċ", + "__)) ;Ċ", + "/ dc", + "/d c", + "ĠMay weather", + "_m C", + ". createFrom", + ".create From", + "ĠQ Painter", + "ro psych", + "rops ych", + "inn itus", + "a yas", + "ay as", + "aya s", + "Ġg eg", + "Ġge g", + "( dw", + "(d w", + "Ġus ado", + "Ġusa do", + "Ġtr ickle", + "Ġtrick le", + "Ġann ihil", + "Ġanni hil", + "ĠP asta", + "ĠPa sta", + "ĠPast a", + "ĠPas ta", + "Ġ ++Ċ", + "Ġ+ +Ċ", + "Ġ++ Ċ", + "(Expected Conditions", + ".post Value", + "i cap", + "ic ap", + "ica p", + "ĠDon etsk", + "_ soup", + "_s oup", + "_so up", + "- publish", + "-p ublish", + "ĠP b", + "m entions", + "ment ions", + "mention s", + "AC CEPT", + ". Pull", + ".P ull", + ", âĢĻâĢĻ", + ",âĢĻ âĢĻ", + "Ġret arded", + "Ġretard ed", + "_ ATOM", + "_AT OM", + "ĠTerm inator", + "ĠTermin ator", + "- court", + "-c ourt", + "-co urt", + "ĠCLLocation Coordinate", + "Ġrev erence", + "Ġreve rence", + "Ġrever ence", + "ĠS SC", + "ĠSS C", + "ut ely", + "ute ly", + "ĠW ON", + "ĠG SL", + "ĠGS L", + "f rei", + "fr ei", + "fre i", + ".get Longitude", + ".getLong itude", + "Ġopen FileDialog", + ".B utter", + ".But ter", + "- important", + "-import ant", + "_M ANY", + "_MAN Y", + "_MA NY", + "ĠG ong", + "ĠGo ng", + "ĠGon g", + "âĢľ How", + "Ġg orge", + "Ġgor ge", + "= msg", + "=m sg", + "ĠE zek", + "ĠEz ek", + "create Command", + ": checked", + "Ġinfo graphic", + "Ġinf ographic", + ". WEST", + ".W EST", + "D irs", + "Dir s", + "Di rs", + "Ġgu arda", + "Ġguard a", + "Ġguar da", + "Ġbee tle", + "Ġbeet le", + "< small", + " Loading", + "_ mA", + "_m A", + ".get Random", + "b lings", + "bl ings", + "bling s", + "Ġche eses", + "Ġcheese s", + "Ġchees es", + "t ti", + "tt i", + ". âĢ¢", + "ĠBurg ess", + "ender it", + "ende rit", + ". ',čĊ", + ".' ,čĊ", + ".', čĊ", + "(\" \"+", + "(\"\" +", + "a cb", + "ac b", + "% p", + "index ed", + "inde xed", + "_ predicate", + "_p redicate", + "_pred icate", + "nes ia", + "Ġb ied", + "Ġbi ed", + "ĠC IT", + "ĠCI T", + "( Pos", + "(P os", + "_ radi", + "_r adi", + "_rad i", + "_ra di", + "ä»· æł¼", + "B iz", + "Bi z", + "ĠAdoles cent", + "Ġv iên", + "Ġvi ên", + "c ycl", + "cy cl", + "_ Cancel", + "_C ancel", + "Ġcon clusive", + "Ġconclus ive", + "Ġconcl usive", + "Ġappell ate", + "Ġappel late", + "inform atics", + "S J", + "Ġel ective", + "Ġelect ive", + "role Id", + "Fetch er", + "ĉ Command", + "(\" (%", + "(\"( %", + "Ġf art", + "Ġfa rt", + "Ġfar t", + "I LA", + "IL A", + "get Block", + "A USE", + "AU SE", + "Ġ дан", + "Ġд ан", + "Ġда н", + "ĠAr te", + "ĠArt e", + "Ġnot ifying", + "Ġnotify ing", + "Ġg ele", + "Ġge le", + "Ġgel e", + ". same", + ".s ame", + ".sa me", + ".sam e", + "ĠRe gel", + "ĠReg el", + "Ġ BaÅŁ", + "ĠB aÅŁ", + "ĠBa ÅŁ", + ". creation", + ".c reation", + "Ġ VN", + "ĠV N", + "_ community", + "_comm unity", + "Ġuns ustainable", + "S EX", + "SE X", + "Ġgrid Size", + "res cia", + "avers able", + "(', ')[", + "(',' )[", + "(',') [", + "ĠPh elps", + "á»ķ i", + "ANCE LED", + "ANCEL ED", + "- IS", + "-I S", + ".run ners", + ".runner s", + "ĠSt okes", + "ĠSto kes", + "ĠStoke s", + ". Produ", + ".P rodu", + ".Pro du", + ".Pr odu", + "Ġwh ipping", + "Ġwhip ping", + "_ac quire", + "Ġinvestig ación", + "f ried", + "fr ied", + ".copy With", + "ĠHard cover", + "- Se", + "-S e", + "áŀ¶ áŀ", + "inv itation", + "les ai", + "ĠD orm", + "ĠDo rm", + "ĠDor m", + "ĠÑģпиÑģ ка", + "Ġconcaten ated", + "Ġconcatenate d", + "o phil", + "op hil", + "oph il", + "Ġth inker", + "Ġthink er", + "Ġthin ker", + "/font awesome", + "ĠLe opard", + "ĠLeo pard", + "Ġ\" /\");Ċ", + "Ġ\"/ \");Ċ", + "Ġ\"/\" );Ċ", + "Ġresidual s", + "ĠMicro wave", + "ĠMic rowave", + "Ġcon forme", + "Ġconform e", + "th rop", + "thr op", + "thro p", + "Ġdis emb", + "Ġdi semb", + "Ġdise mb", + "ĠO MG", + "ĠOM G", + "ĠDisc ipline", + "ĠAc robat", + "/ repository", + "/re pository", + "/repos itory", + "d fa", + "df a", + "_ MED", + "_M ED", + "_ME D", + "buf io", + "Ġméth ode", + "_H OLD", + "i asi", + "ia si", + "ias i", + "_ legacy", + "_leg acy", + ") ččĊ", + "æ£ Ģ", + "Get ProcAddress", + "Ġy ay", + "Ġya y", + "ot ence", + "ote nce", + "oten ce", + "order id", + "orde rid", + "- tw", + "-t w", + "Ġd early", + "Ġdear ly", + "In coming", + "Inc oming", + "/ il", + "/i l", + "Ġneuro p", + "Ġneu rop", + "Ġneur op", + "u cz", + "uc z", + ") ;čččĊ", + "); čččĊ", + "ĠInnov ative", + "Ġpro fund", + "Ġprof und", + "ig mat", + "igma t", + "igm at", + "Selection Mode", + "re levant", + ". GO", + ".G O", + "Ġbru ises", + "Ġs ach", + "Ġsa ch", + "Ġsac h", + "o def", + "od ef", + "ode f", + "Ġre imb", + "Ġreim b", + "/ desktop", + "/d esktop", + "- spot", + "-s pot", + "-sp ot", + "un dance", + "und ance", + "unda nce", + "undan ce", + "Ent ropy", + "Entr opy", + "\\ core", + "Ġs uger", + "Ġsu ger", + "Ġsug er", + "Ġ Mvc", + "ĠM vc", + "ĠGN OME", + "_ indx", + "_in dx", + "_i ndx", + "_ind x", + "ĠYY STYPE", + "ĠYYS TYPE", + "ĠMat lab", + "ĠC IF", + "ĠCI F", + "Ġ *))", + "Ġ* ))", + "Ġ*) )", + "Ġproduct List", + "Ġ Alright", + "ĠAl right", + "ace mark", + "ac emark", + "ÑĤ ив", + "ÑĤи в", + "mod ification", + "int ernational", + "inter national", + "intern ational", + "Ġh omers", + "Ġhome rs", + "Ġhom ers", + "Ġho mers", + "Ġhomer s", + "Ġd icts", + "Ġdi cts", + "Ġdict s", + "Ġdic ts", + "ĠQ Font", + ". SQLite", + ".SQL ite", + "Ġtransplant ation", + "ĠMessageBox Button", + "ĠEl ves", + "' ]])Ċ", + "'] ])Ċ", + "']] )Ċ", + "(Q Icon", + "Ġcin emas", + "Ġcinema s", + "Ġcine mas", + "CO ORD", + "- China", + "-Ch ina", + "Ġkh ẩu", + "æĪij çļĦ", + "Ġsk ulls", + "Ġskull s", + "Ġpain staking", + "Ġpains taking", + "f ce", + "fc e", + ".XR Label", + "Ġ specifier", + "Ġspec ifier", + "Ġprefer ring", + "Ġpref erring", + "/ activity", + "( Photo", + "á lt", + "ál t", + ". lot", + ".l ot", + ".lo t", + "' '.", + "'' .", + "an nonce", + "ann once", + "annon ce", + "anno nce", + ".google code", + "- pdf", + "-p df", + "ĠP oke", + "ĠPo ke", + "ĠPok e", + "_ ACL", + "_A CL", + "_AC L", + "Ġend owed", + "dis cover", + "disc over", + ".o mg", + ".om g", + "Ġwood land", + ". Magic", + ".M agic", + "Ġvol ont", + "Not Allowed", + "Ġc have", + "Ġch ave", + "Ġcha ve", + "B MW", + "BM W", + "',' =',", + "','= ',", + "ĠS IX", + "ĠSI X", + "æĪij 们", + "Ġko sher", + "Ġkos her", + "Ġas piration", + "Ġaspir ation", + "Ġasp iration", + "i ntl", + "in tl", + "int l", + "_ref ptr", + "' +Ċ", + "'+ Ċ", + "ment or", + "men tor", + ". club", + ".c lub", + ".cl ub", + "Window State", + ". ARR", + ".A RR", + ".AR R", + "Ġ zza", + "Ġz za", + "Ġzz a", + "Ġmessage Type", + ". equ", + ".e qu", + ".eq u", + "T hor", + "Th or", + "Tho r", + "Ġin just", + "Ġinj ust", + "Ġg ums", + "Ġgu ms", + "Ġgum s", + "Ġborder Side", + "/ ////", + "// ///", + "//// /", + "/// //", + "ĠTrans mit", + "Ġbuf size", + "Ġh ak", + "Ġha k", + "Ġ ellas", + "Ġel las", + "Ġell as", + "Ġella s", + "R ANDOM", + "RAND OM", + "ĉ mc", + "ĉm c", + "Ġp ea", + "Ġpe a", + "e ko", + "ek o", + "document o", + "Ġhyster ia", + "Ġare nas", + "Ġar enas", + "Ġaren as", + "Ġarena s", + "Ġgun men", + "Ġm ike", + "Ġmi ke", + "Ġmik e", + "Ġimp unity", + "at isation", + "atis ation", + "_ Zero", + "_Z ero", + "_COMP ANY", + "ĠG ors", + "ĠGo rs", + "ĠGor s", + "Ġuse Class", + "( redis", + "(r edis", + "(re dis", + "(red is", + "ĠRUN NING", + "ĠB air", + "ĠBa ir", + "ĠBai r", + "ve lte", + "vel te", + "velt e", + "Ġ ','.", + "Ġ', '.", + "Ġ',' .", + "а ÑĤÑĮÑģÑı", + "аÑĤÑĮ ÑģÑı", + "ö st", + "ös t", + "encode URIComponent", + "_ restrict", + "_re strict", + "Ġdec als", + "Ġ Pedido", + "ĠP edido", + "ĠPed ido", + "Ġalter cation", + "Dis plays", + "Display s", + "Disp lays", + "ĠApp licants", + "ĠApplicant s", + "C US", + "CU S", + "Text area", + "ĠAng ola", + ". future", + ".f uture", + "ĠU SHORT", + "ĠUS HORT", + "Ġsuppress ing", + "Ġsupp ressing", + "Ġset zen", + "AP olynomial", + "Ġt och", + "Ġto ch", + "Ġtoc h", + "Ġhall mark", + "Ġ $$$", + "Ġ$ $$", + "Ġ$$ $", + "ĠCHAR SET", + ". rpm", + ".r pm", + "ĠD ich", + "ĠDi ch", + "---- ----------------", + "-------- ------------", + "---------------- ----", + "------------ --------", + "----- ---------------", + "---------- ----------", + "------ --------------", + "----------- ---------", + "------------- -------", + "------- -------------", + "--------- -----------", + "--------------- -----", + "-------------- ------", + "_ parm", + "_p arm", + "_par m", + "_pa rm", + "è¿ ĺ", + "a cciones", + "acc iones", + "acci ones", + "accion es", + "h ait", + "ha it", + "hai t", + "WARD ED", + "WAR DED", + "_ routing", + "_r outing", + "_ro uting", + "ĠN OM", + "ĠNO M", + "Ġen clave", + "ĠL otto", + "ĠLot to", + "ĉ fr", + "ĉf r", + "complex Content", + "ĠBall ard", + "k ube", + "ku be", + "/ win", + "/w in", + ".getColumn Model", + "_RE PLACE", + "Header Value", + "Ġest udiantes", + "Ġ apis", + "Ġa pis", + "Ġap is", + "Ġapi s", + "Ġb pm", + "Ġbp m", + "Ġ TypeName", + "ĠType Name", + "And Get", + "r ita", + "ri ta", + "rit a", + "Pl ans", + "Plan s", + "> Note", + ">N ote", + ">No te", + "Ġfet isch", + "Ġt oned", + "Ġto ned", + "Ġton ed", + "Ġtone d", + "_ goto", + "_g oto", + "_go to", + "on sense", + "ons ense", + "Ġm olds", + "Ġmo lds", + "Ġmol ds", + "Ġmold s", + "Ġinfiltr ation", + "ĠGuerr ero", + "ub bo", + "ubb o", + "c ki", + "ck i", + "( $(\".", + "($ (\".", + "($( \".", + "_ activities", + "_act ivities", + "_activ ities", + "( changes", + "(ch anges", + "(chan ges", + "(change s", + "Ġof App", + "ĠKe pler", + "ĠD emp", + "ĠDe mp", + "ĠDem p", + "ĠCont inent", + "ĠContin ent", + ". Ticks", + ".T icks", + ".Tick s", + "Ġ Unsigned", + "ĠUn signed", + "ĠUns igned", + "ĠJah res", + "ĠJahr es", + "ĠJahre s", + "Ġfresh men", + "ĠArch ived", + "ĠArchive d", + "ĠкоÑĤоÑĢ Ñĭй", + "Ġ' ::", + "Ġ': :", + "T utorial", + "C c", + "Ġtable LayoutPanel", + "from Json", + ". levels", + ".level s", + "_trans ient", + "Ġendors ing", + "Ġ DIC", + "ĠD IC", + "ĠDI C", + "l auf", + "la uf", + "Ġsh red", + "Ġshr ed", + "_E MIT", + "_EM IT", + "ific antly", + "ificant ly", + "A LA", + "AL A", + "/ proto", + "/pro to", + "/pr oto", + "Ġnarr owing", + "Ġnarrow ing", + "Ġnar rowing", + "U tc", + "Ut c", + "F actors", + "Fact ors", + "Factor s", + "Fac tors", + "Fa ctors", + "Ġsent ient", + "æŀ IJ", + "lix ir", + "ĠC ROSS", + "m eteor", + "met eor", + "Ġgr oin", + "Ġgro in", + "Ġ mdb", + "Ġm db", + "Ġmd b", + "ĠRot terdam", + "Ġcom ida", + "ĠOp Code", + "Ġ DefaultValue", + "ĠDefault Value", + "Permissions Result", + "Ġheter ogeneous", + "Ġm oot", + "Ġmo ot", + "Ġmoo t", + "Ġde ceived", + "Ġdece ived", + "Ġdeceive d", + "-in dependent", + "ĠObject OutputStream", + "Ġover power", + ". dup", + ".d up", + "Ġ ldb", + "Ġl db", + "Ġld b", + "Ġdomestic ally", + "Ġdomest ically", + "Ġbe stellen", + "Ġbest ellen", + "Ġbeste llen", + "Ġ lov", + "Ġl ov", + "Ġlo v", + "ĠContract ors", + "ĠContr actors", + "ĠContractor s", + "Tri angles", + "Triangle s", + "Ġfod der", + "Ġfil mes", + "Ġfilm es", + "Ġfilme s", + "ä¼ ģ", + "Ġrev olver", + "Startup Script", + "/ validation", + "ĠResource Type", + "i ÅŁ", + "ĠL az", + "ĠLa z", + "f ef", + "fe f", + "Ġl stm", + "Ġlst m", + "Ġls tm", + "{ *", + ". attachment", + ".attach ment", + ".att achment", + ". hits", + ".h its", + ".hit s", + "e with", + "ew ith", + "D OG", + "DO G", + "Al abama", + "Ġmedium s", + "Ġmedi ums", + ".m Context", + "- cols", + "-c ols", + "-col s", + "-co ls", + "åı ĭ", + ". notice", + ".not ice", + "Ġat tn", + "Ġatt n", + "ĠP acking", + "ĠPac king", + "ĠPack ing", + "Ġ Ln", + "ĠL n", + "_COM PLEX", + "_COMP LEX", + "/ Users", + "/User s", + ".save txt", + ".sav etxt", + "ĠR ounds", + "ĠRo unds", + "ĠRound s", + "ĠRou nds", + "?,?, ?,?,", + "Ġin gl", + "Ġing l", + "Ġ ROC", + "ĠR OC", + "ĠRO C", + "_ female", + "_f emale", + "_fe male", + "ĠSt ard", + "ĠStar d", + "ĠSta rd", + "] ];", + "]] ;", + "Ġwrest lers", + "Ġwrestler s", + "Ġtorrent s", + "Ġs inh", + "Ġsi nh", + "Ġsin h", + " ĊĊ", + "Ċ Ċ", + "ë³ µ", + "s ense", + "sen se", + "how ever", + ". Physics", + ".Ph ysics", + "Inf rastructure", + "ĠS acr", + "ĠSa cr", + "ĠSac r", + "F el", + "Fe l", + "ĠD ISTRIBUT", + "é ments", + "ém ents", + "ément s", + "ĠValid ates", + "ĠValidate s", + "#### ########################################################", + "################################ ############################", + "############ ################################################", + "################################################ ############", + "############################ ################################", + "######################################################## ####", + "Ġ |/", + "Ġ| /", + "Ġe sl", + "Ġes l", + "Ġré seau", + "ĠB ip", + "ĠBi p", + "BY TES", + "BYTE S", + "_W ATER", + "T urning", + "Turn ing", + "Tur ning", + "E LS", + "EL S", + "Ġj uxtap", + "Ġlesb ische", + "ý ch", + "( Unknown", + "(Un known", + "N eo", + "Ne o", + "@ JsonProperty", + "@Json Property", + "Ġal umnos", + "Ġalum nos", + "Ġalumno s", + "ĠRaq qa", + "im ei", + "ime i", + ".get Bounds", + ".getB ounds", + ".Mouse EventHandler", + ".MouseEvent Handler", + "# ######", + "## #####", + "#### ###", + "### ####", + "##### ##", + "###### #", + "Generic Type", + "/ cms", + "/c ms", + "/cm s", + "Ġturn o", + "Ġtur no", + "Ġ мин", + "Ġм ин", + "Ġми н", + "Ġfolk lore", + "ĠE vo", + "ĠEv o", + "Ġconduct ivity", + "Ġle ben", + "Ġgear box", + "- vs", + "-v s", + "Ġ ÏĨ", + "ĠÏ Ĩ", + "Ġdrink ers", + "Ġ conexao", + "Ġcon exao", + "Ġconex ao", + "ĠTe eth", + "ĠTee th", + "Ġget Arguments", + "ĠR AT", + "ĠRA T", + "ent ious", + "enti ous", + "E duc", + "Ed uc", + "+ W", + "ĠInstitution al", + "ĠInstitut ional", + "ĠB ord", + "ĠBo rd", + "ĠBor d", + "is Equal", + "( pwd", + "(p wd", + "Ġign ited", + "Ġignite d", + "ĠR ousse", + "ĠRou sse", + "Ġimpact ful", + "ĠM alk", + "ĠMal k", + "ĠMa lk", + "Ġg eral", + "Ġge ral", + "Ġger al", + "ĠP ivot", + "Ġa zt", + "Ġaz t", + "Ġcsv file", + "ĠR ope", + "ĠRo pe", + "ĠS OLUTION", + "ĠSOL UTION", + "ĠAr bitrary", + "ĠArbit rary", + "Ġl etto", + "Ġlet to", + "Ġlett o", + ".Mouse Adapter", + "Ġ }}}", + "Ġ} }}", + "Ġ}} }", + "ĠSa ilor", + "ĠSail or", + "ĠSai lor", + "d era", + "de ra", + "der a", + "P utting", + "Put ting", + "Ġconcent rates", + "Ġconcentr ates", + "Ġconcentrate s", + "Ġauth Domain", + "âĢĿ çļĦ", + "-f inals", + "-final s", + "-fin als", + ", strlen", + ",str len", + ",st rlen", + "Mu on", + "ĠOrd inary", + "fire fox", + "ĠLa TeX", + "ĠH und", + "ĠHun d", + "ĠHu nd", + "engine ering", + "/ blue", + "/b lue", + "/bl ue", + "ed TextBox", + "(\" \");", + "(\"\" );", + "(\"\") ;", + "ĠC DDL", + "ĠCD DL", + "k ept", + "ke pt", + "Ġ GetString", + "ĠGet String", + "K ir", + "Ki r", + "() ='", + "ĠO CD", + "ĠOC D", + "ant ium", + "anti um", + "$ menu", + "$m enu", + "ĠAppalach ian", + "Secret ary", + "ë¥ ĺ", + "ี ย", + "Sem antic", + "Ġ *[", + "Ġ* [", + "e stone", + "es tone", + "est one", + "esto ne", + "ung kin", + "Max Y", + "- tone", + "-t one", + "-to ne", + "-ton e", + "\" };čĊ", + "\"} ;čĊ", + "_ Part", + "_P art", + "< Member", + "ĊĊ", + "'> ĊĊ", + "'>Ċ Ċ", + "L ic", + "Li c", + "ĠMir age", + "ĠMi rage", + "ĠAssembly FileVersion", + "Te V", + "ĠValue EventListener", + "-s olving", + "T ho", + "Th o", + "rou lette", + "_ WP", + "_W P", + "Ġunint errupted", + "Ġfield Type", + ". Typed", + ".T yped", + ".Type d", + "Ġa mour", + "Ġam our", + "Ġamo ur", + "Ġmock ery", + "Ġmocker y", + "( vol", + "(v ol", + "(vo l", + "ĠSub committee", + "ĠR uf", + "ĠRu f", + "e rox", + "er ox", + "ero x", + ":UIButtonType Custom", + "Ġ Blur", + "ĠBl ur", + "ĠBlu r", + "Ġwy kon", + "n ces", + "nc es", + "nce s", + "ASH BOARD", + "! !\");Ċ", + "!! \");Ċ", + "Ġmurder ers", + "Ġmurderer s", + ". daily", + ".d aily", + ".da ily", + "ĠDI AG", + "j ing", + "ji ng", + "jin g", + "Ġdol phin", + "Ġl òng", + "Ġb ö", + "ĠV ocabulary", + ".St Object", + "' )\">", + "') \">", + "')\" >", + "Ġz un", + "Ġzu n", + "Ġscrim mage", + "tr éal", + "ĠL ig", + "ĠLi g", + "[ vi", + "[v i", + "C ole", + "Col e", + "Co le", + "Ġfrost ing", + ". Players", + ".P layers", + ".Pl ayers", + ".Player s", + ".Play ers", + "- translate", + "-trans late", + "Fe els", + "Feel s", + "Fee ls", + "=\\\" /", + "=\\ \"/", + ".Butter Knife", + "Ġ? >;Ċ", + "Ġ?> ;Ċ", + "Ġ avi", + "Ġa vi", + "Ġav i", + "in nie", + "inn ie", + ". Failure", + ".F ailure", + ".Fail ure", + "Ġsp indle", + "Ġspin dle", + "Configuration Exception", + "_ hop", + "_h op", + "Ġpos ição", + "Ġposi ção", + "Ġ Await", + "ĠA wait", + "ĠAw ait", + "UIImage PickerController", + "ĉ day", + "ĉd ay", + "Ġge nom", + "Ġgen om", + "C ab", + "Ca b", + "ĠÑĢ ÐµÐ·ÑĥлÑĮÑĤаÑĤ", + "ĠÑĢезÑĥлÑĮÑĤ аÑĤ", + "OR IGINAL", + "Ġejac ulation", + "( tcp", + "(t cp", + "(tc p", + "SE COND", + "SEC OND", + "Ġt onic", + "Ġto nic", + "Ġton ic", + "Ġ ListBox", + "ĠList Box", + "Ġ ĉĉĊ", + "Ġĉ ĉĊ", + "Ġĉĉ Ċ", + "( )>Ċ", + "() >Ċ", + "()> Ċ", + "Ġqu atre", + "Ġquat re", + "Ġqua tre", + "ượ ng", + "with Errors", + ". Maybe", + ".M aybe", + ", â̦", + "token Id", + "_UN DEF", + "Ġfresh ness", + "ĠAmendment s", + "ĠAmend ments", + ".map box", + ". CV", + ".C V", + "( blog", + "(b log", + "(bl og", + "_get time", + ". quest", + ".q uest", + ".qu est", + "s parse", + "sp arse", + "spar se", + "Ġre sale", + "Ġres ale", + "Ġenthusi astically", + "Ġenthusiastic ally", + "Ġenthusiast ically", + "ĠProstit utas", + "W a", + "C argo", + "Car go", + ". Parcelable", + ".Parcel able", + "S ENSOR", + "SEN SOR", + "SENS OR", + "ĠR yu", + "ĠRy u", + "La ughs", + "Laugh s", + "_ Native", + "_N ative", + "/ pg", + "/p g", + "y sts", + "yst s", + "ys ts", + "Ġphot oc", + "Ġphoto c", + "ç® Ģ", + "ad opt", + "ado pt", + ". species", + ".s pecies", + ".sp ecies", + ".spec ies", + "conc iliation", + "Adjust ed", + "Adj usted", + ".Firebase Auth", + "ut tle", + "utt le", + "ord ination", + "ordin ation", + "Ġm unch", + "Ġmun ch", + "ĠS take", + "ĠSt ake", + "ĠSta ke", + ". ping", + ".p ing", + ".pi ng", + ".pin g", + "an ker", + "ank er", + "anke r", + "(QString Literal", + "Ġsub script", + "Ġsubs cript", + "Ġsubscri pt", + "Ġ ĠĉĊ", + "ĠĠ ĉĊ", + "ĠĠĉ Ċ", + "ĠM CC", + "ĠMC C", + "_ Cmd", + "_C md", + "se xy", + "sex y", + "i ou", + "io u", + "ĠM ANY", + "ĠMA NY", + "ĠMAN Y", + "Ġn anny", + "Ġnan ny", + "T RAIN", + "TR AIN", + "TRA IN", + "Ġflour ishing", + "Ġflourish ing", + "ĠW atches", + "ĠWatch es", + "ĠWat ches", + "ĠQ Map", + "ĠF erm", + "ĠFe rm", + "ĠFer m", + "Ġw asm", + "Ġwas m", + "Ġwa sm", + "ĠA bed", + "ĠAb ed", + "ĠAbe d", + "_ UD", + "_U D", + "ĠG lasses", + "ĠGl asses", + "ĠGlass es", + "ĠGlas ses", + "+ v", + "Att end", + ". Chain", + ".Ch ain", + "Ġdec ency", + "Ġdece ncy", + "ĠSup plementary", + "ĠSupplement ary", + "h unter", + "hunt er", + "- txt", + "-t xt", + "Ġ\" }\";Ċ", + "Ġ\"} \";Ċ", + ".set WindowTitle", + "( \"", + "Ġmasc ara", + "( Profile", + "åĬ Łèĥ½", + "åĬŁ èĥ½", + "im ité", + "imit é", + "imi té", + "Ġwild fires", + "Ġwildfire s", + "- ROM", + "-R OM", + ".is On", + "( groupId", + "(group Id", + "Re pair", + "Rep air", + "accum ulate", + "Ġ< \",", + "Ġhand written", + "Ġach eter", + "Ġache ter", + "ĠM GM", + "ĠMG M", + "ĠIr ma", + "-> {_", + "->{ _", + "g ee", + "ge e", + "c riminal", + "cr iminal", + "Ġèĭ¥ è¦ģ", + "Ġmoment arily", + "\" )!=", + "\") !=", + "_ lit", + "_l it", + "_li t", + "Ġexpires In", + ". \").", + ".\" ).", + ".\") .", + "éķ¿ åº¦", + "Ġfr ække", + "v lc", + "vl c", + "Ġor bs", + "Ġorb s", + ") ,$", + "), $", + "Ġvent ured", + "Ġventure d", + "/ >\\", + "/> \\", + "ch arm", + "char m", + "cha rm", + "N uitka", + "el dig", + "eld ig", + "ato nin", + "aton in", + "W itness", + "- lat", + "-l at", + "-la t", + "Ġset Hidden", + "Ġrel ics", + "Ġreli cs", + "Ġrelic s", + "Ġcons ulate", + "Ġconsul ate", + ". IGNORE", + "\" After", + "\"A fter", + "Ġs etAddress", + "Ġset Address", + "Ġbeste ht", + "Ġ' ')ĊĊ", + "Ġ'' )ĊĊ", + "Ġ'') ĊĊ", + "Ġ'')Ċ Ċ", + ".x axis", + "Ġser ão", + "Ġmis led", + "Ġmi sled", + "_UN IFORM", + "ĠV IA", + "ĠVI A", + "in cr", + "inc r", + "Ġzen ith", + "Ġvis cosity", + "Ġvisc osity", + "Ġthin ly", + ".get SharedPreferences", + ". ErrorCode", + ".Error Code", + "\" ),\"", + "\") ,\"", + "\"), \"", + "ĠMillion en", + "ĠMilli onen", + "Ġ/ >)Ċ", + "Ġ/> )Ċ", + "Scroll Indicator", + "-se eking", + "ĠPOLIT ICO", + "as ca", + "asc a", + "_ rl", + "_r l", + "N avig", + "Nav ig", + "Na vig", + "(full file", + "Ġsol itude", + "Ġ juven", + "Ġju ven", + "Ġha uling", + "Ġhaul ing", + "ĠMac ros", + "ĠMacro s", + "ĠG ry", + "ĠGr y", + "Ġexerc itation", + "ĠATT ACK", + "Tick Count", + "Ġ rites", + "Ġr ites", + "Ġrit es", + "Ġri tes", + "Ġd oe", + "Ġdo e", + "Particle System", + "Ġ slu", + "Ġs lu", + "Ġsl u", + "Window Text", + "Ġ ClassName", + "ĠClass Name", + "Ġs lander", + "Ġsl ander", + "Ġsla nder", + "ĉ Port", + "ĉP ort", + "j ong", + "jo ng", + "jon g", + "? a", + ".D ial", + ".Di al", + "âĢĶ at", + "âĢĶa t", + "$ objPHPExcel", + "$obj PHPExcel", + "Ġso ar", + "E NN", + "EN N", + "appe ared", + "appear ed", + "Ġquot id", + "Ġquo tid", + "e machine", + "em achine", + "ema chine", + "Ġ nip", + "Ġn ip", + "Ġni p", + "Ġmicro time", + "ĠAl ma", + "; !", + "---------------- --------------------------------------------------------------------------------", + "-------------------------------- ----------------------------------------------------------------", + "---------------------------------------------------------------- --------------------------------", + "------------------------------------------------ ------------------------------------------------", + "---------------------------------------------------------------------------- --------------------", + "-------------------------------------------------------------------------------- ----------------", + "-------------------- ----------------------------------------------------------------------------", + "ĠP assage", + "ĠPass age", + "ĠPas sage", + "Ġdump sters", + "Ġdumpster s", + "Ġdumps ters", + "Ġ Exclude", + "ĠEx clude", + "ĠExc lude", + "Ġsuggest ive", + "ĠCircularProgress Indicator", + "_ clr", + "_c lr", + "_cl r", + "Array Type", + "IL LA", + "ILL A", + "Elapsed Time", + "Dr iven", + "Drive n", + "Ġresource Name", + "ĠG arrison", + "ĠGarr ison", + "se rir", + "ser ir", + "- ahead", + "-a head", + "Ġp innacle", + "ĠEs presso", + "S parse", + "Sp arse", + "Ġas says", + "Ġass ays", + "Ġassay s", + "ĠGirl friend", + "i mid", + "im id", + "imi d", + "] ='\\", + "]= '\\", + "]=' \\", + "ONG LONG", + "ONGL ONG", + "Ġportray ing", + "L ane", + "La ne", + "Ġb úsqueda", + "Ġrein forcements", + "Ġreinforce ments", + "Ġreinforcement s", + "ĠSpread sheet", + "ĠArray Collection", + ", arr", + ",a rr", + "light box", + "ic ana", + "ica na", + "ican a", + "< \"", + "build ers", + "builder s", + "K id", + "Ki d", + "ĠMat SnackBar", + "EX PR", + "EXP R", + "od cast", + "ĠFoundation s", + "ĠFound ations", + "Ġ inds", + "Ġin ds", + "Ġi nds", + "Ġind s", + "=' ${", + "='$ {", + "F izz", + "Fi zz", + "- functional", + "-function al", + "( workspace", + "(work space", + "Ġstem med", + "_ patches", + "_p atches", + "_patch es", + "_pat ches", + "ĠJar vis", + "RE ADING", + "READ ING", + "Ġdisrespect ful", + "ĠQ Dom", + "Ġ$ {Ċ", + "Ġ${ Ċ", + "e status", + "es tatus", + "est atus", + "Re ached", + "Reach ed", + "! .ĊĊ", + "!. ĊĊ", + "I LT", + "IL T", + "ĠN DEBUG", + "ĠC ourage", + "ĠCour age", + "ĠCou rage", + "birth date", + "ĠT ing", + "ĠTi ng", + "ĠTin g", + "Ġutil izado", + "Ġutiliz ado", + "Ġutiliza do", + "án chez", + "Out door", + "Ġhand guns", + "Ġhandgun s", + "Ref Count", + "É Ļ", + "r omo", + "ro mo", + "rom o", + "Ġt ts", + "Ġtt s", + ". She", + ".S he", + ".Sh e", + "Ġ Pane", + "ĠP ane", + "ĠPan e", + "ĠPa ne", + "ãĢij, ãĢIJ", + "ĠIO CTL", + "ĠIOC TL", + "/ black", + "/b lack", + "/bl ack", + "in scription", + "ins cription", + "Ġbi opsy", + "Ġbio psy", + "Ġ TimeInterval", + "ĠT imeInterval", + "ĠTime Interval", + ".Test Check", + "ĠGUI Style", + "Ġ Capability", + "ĠCap ability", + "ĠBei trag", + "ĠBeit rag", + "don nees", + "T reatment", + ". backup", + ".back up", + "Ġsign ings", + "Ġsig nings", + "Ġsigning s", + "Ġsignin gs", + "ĠB oca", + "ĠBo ca", + "d rm", + "dr m", + ". MAIN", + ".M AIN", + "Ġgo ede", + "Ġgoed e", + "Ġ Markup", + "ĠMar kup", + "ĠMark up", + "G REE", + "GR EE", + "GRE E", + "ĠBase Service", + ". Creator", + ".C reator", + "Ġj ails", + "Ġja ils", + "Ġjail s", + "ĠK ahn", + "ĠKa hn", + "ĠKah n", + "Ip Address", + "AC HI", + "ACH I", + "Ġin hibited", + "Ġinhib ited", + "Ġinhibit ed", + "Ġ@ $_", + "Ġ@$ _", + "ĠAs sass", + "ĠAss ass", + "Ġenv iado", + "Ġenvi ado", + "Her oes", + "Hero es", + "ÐŁ еÑĢ", + "ĠM aven", + "ĠMa ven", + ". ls", + ".l s", + "Ġ ive", + "Ġi ve", + "Ġiv e", + "| RF", + "|R F", + "Ġresize Mode", + "Ġrum pe", + "_ attachments", + "_attach ments", + "_attachment s", + "T U", + "Ġtact ile", + "Ġtac tile", + "Attempt ing", + "Ġro bin", + "Ġrob in", + "y aw", + "ya w", + "Ġmerc enaries", + "ĠHab itat", + "ĠHabit at", + "end date", + "Ġ oxy", + "Ġo xy", + "Ġox y", + "ĉ Random", + "ĉR andom", + "o hon", + "oh on", + "oho n", + "Is Null", + "ĠValidation Result", + "ãĥ ļ", + "um bed", + "umb ed", + "p pv", + "pp v", + "Ġ arp", + "Ġa rp", + "Ġar p", + "ich ick", + "ichi ck", + "_r nn", + "ĠT FT", + "ĠTF T", + "Tex Image", + "\" On", + "Ġ Sampler", + "ĠS ampler", + "ĠSam pler", + "ĠSample r", + "ĠSamp ler", + "t opl", + "to pl", + "top l", + "Ġj ane", + "Ġja ne", + "Ġjan e", + "y ling", + "yl ing", + "ĠUN ICODE", + "Tab Index", + "< {Ċ", + "<{ Ċ", + "s uspend", + "sus pend", + "uv ian", + ", application", + "ол иÑĩеÑģÑĤво", + "y at", + "ya t", + "e zier", + "ez ier", + "ezi er", + "ĠCH UNK", + "ĠAd ler", + "/ Add", + "/A dd", + "Ġ KeyValue", + "ĠKey Value", + "Ġspos ób", + "S ampling", + "Sam pling", + "ch ers", + "che rs", + "cher s", + "_ AMD", + "_A MD", + "_AM D", + "R u", + ".Must Compile", + "N ation", + "Na tion", + "Nat ion", + "As soc", + "Ass oc", + "Man aging", + "Mana ging", + "ĠEn gl", + "ĠEng l", + "_ GB", + "_G B", + "Ġsucc inct", + "Ġdis liked", + "Ġdislike d", + "ĠI ke", + "ĠIk e", + "Bullet in", + "_ARCH IVE", + "Pro posal", + "Prop osal", + "Ġjog ging", + ".C REATED", + ".CREATE D", + "Ġc hol", + "Ġch ol", + "Ġcho l", + "è£ ħ", + "Į ¨", + "- push", + "-p ush", + "Ġres erva", + "Ġreserv a", + "co rev", + "core v", + "cor ev", + "è tre", + "T HR", + "TH R", + "Ġincompet ence", + "Ġchar isma", + "æĦ Ł", + "Ġ\" ==", + "Ġ\"= =", + "B TN", + "BT N", + "Ġ Locator", + "ĠL ocator", + "ĠLoc ator", + "i vet", + "iv et", + "ive t", + "(' .')Ċ", + "('. ')Ċ", + "('.') Ċ", + "('.' )Ċ", + "Ġfor IndexPath", + "ô me", + "ôm e", + "Ġcapac it", + "w aters", + "wa ters", + "water s", + "wat ers", + "ĠWR ONG", + "h oa", + "ho a", + "ĠM IPS", + "ĠMI PS", + "Ġe miss", + "Ġem iss", + "ĠJacqu eline", + "( cmp", + "(c mp", + "(cm p", + "Ġe ens", + "Ġeen s", + "Ġee ns", + "L eo", + "Le o", + ". timing", + ".t iming", + ".tim ing", + "CLU SION", + "CLUS ION", + "Ġ (\"-", + "Ġ( \"-", + "Ġ(\" -", + "åĵ Ī", + ". kode", + ".k ode", + "ĠUnder t", + "ĠUnd ert", + "Ġbe wild", + "Ġbew ild", + "ĠEs sen", + "ĠEss en", + ". hd", + ".h d", + "Ġren egot", + "Ġm ower", + "Ġmo wer", + "Ġl sp", + "Ġls p", + "Ġpen chant", + "Ġman oe", + "Ġmano e", + "Ġ agli", + "Ġa gli", + "Ġag li", + "Ġre cal", + "Ġr ecal", + "Ġrec al", + "ĠOPER ATION", + "(^ )(", + "Ġ ν", + "ĠÎ ½", + "Ġ Scoped", + "ĠSc oped", + "ĠScope d", + "ĠSco ped", + "Ġ @\"Ċ", + "Ġ@ \"Ċ", + "Ġ@\" Ċ", + "= label", + "=l abel", + "[ loc", + "[l oc", + "I ntl", + "In tl", + "Int l", + "ĠN z", + "table t", + "tab let", + "tabl et", + ". ColumnName", + ".Column Name", + "Ġscreen Size", + "D Bus", + "DB us", + "co oked", + "cook ed", + "- registration", + "-reg istration", + "âĢľ One", + "- non", + "-n on", + "-no n", + "ĠwiÄĻ c", + "Ġc osta", + "Ġco sta", + "Ġcost a", + "Ġcos ta", + ".add Tab", + ". conditions", + ".condition s", + ".cond itions", + "ĠH ess", + "ĠHe ss", + "MEM ORY", + "ĠAval anche", + "() }}Ċ", + "()} }Ċ", + "Ġtri plet", + "Ġtrip let", + "Ġtriple t", + "Ġl abyrinth", + "ĠNode List", + "ĠN YT", + "ĠNY T", + "Ġy eni", + "Ġye ni", + "Ġyen i", + "d ff", + "df f", + ".Html Controls", + "A VIS", + "AV IS", + "/ Math", + "/M ath", + "Ġ memcmp", + "Ġmem cmp", + "ا Ø¡", + "Ø§Ø ¡", + "о ÑģÑĮ", + "оÑģ ÑĮ", + "c rap", + "cr ap", + "( pages", + "(p ages", + "(page s", + "(pa ges", + "Ġl xml", + "Ġlx ml", + "ĠQ DateTime", + "_t cb", + "_tc b", + "Ġ openid", + "Ġopen id", + "Ġsyn aptic", + "ĠM DMA", + "ĠMD MA", + "( slug", + "(s lug", + "(sl ug", + "ig matic", + "igma tic", + "igm atic", + "igmat ic", + "e nor", + "en or", + "eno r", + "Ġcr amped", + "Ġcram ped", + "G OP", + "GO P", + "Ń IJ", + ".is File", + "ĠD ifferential", + "ĠDifferent ial", + "Ġ =\"\";Ċ", + "Ġ=\" \";Ċ", + "ĉ ĉĉĠĠĠĠĉ", + "ĉĉ ĉĠĠĠĠĉ", + "ĉĉĉ ĠĠĠĠĉ", + "ĉĉĉĠĠĠ Ġĉ", + "ĉĉĉĠ ĠĠĠĉ", + "ĉĉĉĠĠ ĠĠĉ", + "ĉĉĉĠĠĠĠ ĉ", + "ĠC ooke", + "ĠCo oke", + "ĠCook e", + "ĉU FUNCTION", + "Ġpersever ance", + "Relative Layout", + "IMPORT ANT", + "Ġe xon", + "Ġex on", + "Ġ он", + "Ġо н", + "i base", + "ib ase", + "iba se", + "( CONT", + "(C ONT", + "(CON T", + "n ovation", + "no vation", + "nov ation", + "nova tion", + "ä½ ķ", + "[ sub", + "[s ub", + "Admin Controller", + "HTTP Header", + "c rear", + "cre ar", + "cr ear", + "ĠN IR", + "ĠNI R", + "ĠDrop DownList", + "Ġval ide", + "Ġvalid e", + "Ġva lide", + "Ġde hydration", + ". ']", + ".' ]", + "( WIN", + "(W IN", + "Ġ ...\\", + "Ġ. ..\\", + "Ġ... \\", + "Ġ.. .\\", + "Ġphoto shop", + "Ġphotos hop", + "ĉ Init", + "ĉI nit", + "ĉIn it", + "_ cou", + "_c ou", + "_co u", + "Ġtime Zone", + "dar win", + "r omatic", + "ro matic", + "rom atic", + "roma tic", + "Navigation ItemSelectedListener", + "b rates", + "br ates", + "bra tes", + "brate s", + "] --;Ċ", + "Ġtraged ies", + "ĠPed iatrics", + "ĠPediatric s", + "SM ART", + "- API", + "-A PI", + "ĠMessage Lookup", + "ĉ vo", + "ĉv o", + "Ġprejud ices", + "Ġprejudice s", + "Ġ mA", + "Ġm A", + "U ps", + "Up s", + "ĠMISS ING", + "ĉ ad", + "ĉa d", + "C ream", + "Cre am", + "Cr eam", + "ĠT b", + "ĠM ona", + "ĠMon a", + "ĠMo na", + "_ ghost", + "_g host", + "ĉ types", + "ĉt ypes", + "ĉtype s", + "ĉtyp es", + "E mb", + "Em b", + "ĠDocument ary", + "' );ĊĊĊĊ", + "') ;ĊĊĊĊ", + "');Ċ ĊĊĊ", + "');ĊĊ ĊĊ", + "'); ĊĊĊĊ", + "');ĊĊĊ Ċ", + "Ġl up", + "Ġlu p", + "_ Reference", + "_Re ference", + "_Ref erence", + "ĠB ATCH", + "ĠBAT CH", + "Ġintertw ined", + "< Cell", + "", + "Ġf oyer", + "Ġfo yer", + "'util isation", + "ĠMü ller", + "ĠFet ish", + "Ġdefault Manager", + "Ġback track", + "B ah", + "Ba h", + "Exp licit", + "Expl icit", + "_ ASCII", + "_A SCII", + "_ASC II", + "Ġm Activity", + "( Msg", + "(M sg", + "Ġ ê²Į", + "Ġê² Į", + "ĠTER MS", + "ĠTERM S", + "ĠAn gie", + "ĠAng ie", + "H SV", + "HS V", + "ĠMos que", + ". Names", + ".N ames", + ".Name s", + "íĬ ¼", + "r este", + "re ste", + "res te", + "rest e", + "_ parms", + "_p arms", + "_par ms", + "_pa rms", + "_parm s", + "Ġg aping", + "Ġgap ing", + "Ġga ping", + "Ġc ropping", + "Ġcr opping", + "Ġcro pping", + "Ġcrop ping", + "Data Frame", + "Ġrespons iveness", + "Ġresponsive ness", + "_ undo", + "_un do", + "_u ndo", + "_ tran", + "_t ran", + "_tr an", + "_tra n", + ". terminate", + ".term inate", + "Ġitalian e", + "Ġitalia ne", + "Ġwalk through", + "Ġattract iveness", + "Ġattractive ness", + "д е", + "_ STS", + "_S TS", + "_ST S", + "_ learn", + "_l earn", + "_le arn", + "Ġchocolate s", + "Ġchocol ates", + "ier archical", + "- thinking", + "-th inking", + "Ġ )))", + "Ġ) ))", + "Ġ)) )", + "ish ments", + "ishment s", + ".Log f", + ".Lo gf", + "ĠT MZ", + "ĠTM Z", + "ĠCan ary", + "f oil", + "fo il", + "ĠV accine", + "ĠVacc ine", + ". vx", + ".v x", + "ĠSur round", + "Inter mediate", + "Ġ iov", + "Ġi ov", + "Ġio v", + "v ais", + "va is", + "' ;\";Ċ", + "'; \";Ċ", + "ï½ŀ ĊĊ", + "éĢģ æĸĻ", + "â̦ it", + "Se ats", + "Sea ts", + "Seat s", + "C lar", + "Cl ar", + "Cla r", + "W ars", + "War s", + "Wa rs", + "ĠHutch inson", + "ĠH asan", + "ĠHas an", + "ĠHa san", + "! ')ĊĊ", + "!' )ĊĊ", + "!')Ċ Ċ", + "ĠRich ie", + "ĠRi chie", + "che iden", + "cheid en", + "( $('", + "($ ('", + "($( '", + "Y ork", + "Yo rk", + "Ġl ids", + "Ġli ds", + "Ġlid s", + "Ġal phanumeric", + "Ġalpha numeric", + "ĠG lock", + "ĠGl ock", + "ĠGlo ck", + ". shapes", + ".sh apes", + ".shape s", + ".sha pes", + "Ġsp arking", + "Ġspark ing", + "Ġspar king", + "_ epsilon", + "_e psilon", + "_eps ilon", + "up licated", + "uplic ated", + "uplicate d", + ". dirty", + ".d irty", + ".dir ty", + "] )==", + "]) ==", + "ĠìľĦ ì¹ĺ", + "Ġs cn", + "Ġsc n", + "Ġ /****************************************************************", + "Ġ/ ****************************************************************", + "_PRE VIEW", + "_ HC", + "_H C", + "ield ing", + "iel ding", + "f gets", + "fg ets", + "ĠAdd ison", + "Ġproduct Service", + "- figure", + "-f igure", + "( retval", + "(ret val", + "z ano", + "za no", + "zan o", + "Ġaut ob", + "Ġauto b", + "ĉ sd", + "ĉs d", + "_ numer", + "_n umer", + "_num er", + "ĠSet LastError", + "ĠF ior", + "ĠFi or", + "ific ance", + "ifica nce", + "Unt itled", + "Ġin field", + "Ġinf ield", + "Ġ{ }));Ċ", + "Ġ{} ));Ċ", + "Ġ{}) );Ċ", + "Ġs pac", + "Ġsp ac", + "Ġspa c", + "Ġr ookies", + "Ġro okies", + "Ġrookie s", + "(des cribing", + "n gen", + "ng en", + "nge n", + "ி à®", + ". rdf", + ".r df", + ".rd f", + ". Mutex", + ".M utex", + "Ġkne eling", + "Ġknee ling", + "Ġ QE", + "ĠQ E", + "set Max", + "Read Stream", + "Ġ ventas", + "Ġvent as", + "Ġven tas", + "Ġventa s", + "s ut", + "su t", + "cm peq", + "cmp eq", + ".WriteAll Text", + "ĠEx perienced", + "ĠExperience d", + "$ __", + "$_ _", + "Ġka um", + "ĠL IS", + "ĠLI S", + "Ġdocument os", + "Ġdocumento s", + "_HE ALTH", + "i contains", + "icon tains", + "icont ains", + "Ġart isans", + "Ġartisan s", + "OW NER", + "OWN ER", + "Ġb linked", + "Ġblink ed", + "get Display", + "Ġt oen", + "Ġto en", + "Ġtoe n", + "Ġrow Num", + "Ġav ril", + "Ġin vis", + "Ġinv is", + "ĠK ear", + "ĠKe ar", + "toBe InTheDocument", + "a pur", + "ap ur", + "Ġr acked", + "Ġrac ked", + "Ġrack ed", + "ĠMc Master", + "ĠMcM aster", + "_ATTR IB", + "H az", + "Ha z", + "Ġfact ura", + "Ġfac tura", + "/ ts", + "/t s", + "ĠÑĢаз меÑĢ", + "ĠÑĢазм еÑĢ", + "Ġ zf", + "Ġz f", + "Ġshort fall", + ". fasta", + ".f asta", + ".fast a", + ".fa sta", + "ĠCONST ANT", + ". managed", + ".man aged", + ".manage d", + "g ems", + "ge ms", + "gem s", + "Shared Pointer", + "Ġbl urry", + "Ġblur ry", + "b rightness", + "bright ness", + "( components", + "(com ponents", + "(component s", + "(comp onents", + "Ġ ...\"ĊĊ", + "Ġ... \"ĊĊ", + "Ġ.. .\"ĊĊ", + "Ġ...\" ĊĊ", + "Ġ...\"Ċ Ċ", + "S ELL", + "SE LL", + "SEL L", + "ĠIllustr ator", + ".get Channel", + "Ġtrou vé", + "y sters", + "yst ers", + "ys ters", + "yster s", + "Ġv ois", + "Ġvo is", + "Ġvoi s", + "ĠL inden", + "ĠLin den", + "ĠLind en", + "Ġem ojis", + "Ġemoji s", + "Ġemo jis", + "Ġb rawl", + "Ġbr awl", + "Ġbra wl", + "ĠM SR", + "ĠMS R", + "ĠE lo", + "ĠEl o", + "ĠCroat ian", + "ĠCroatia n", + "Popup Menu", + "L ewis", + "Le wis", + ". JWT", + ".J WT", + "Ġaston ished", + "B ush", + "Bus h", + "Bu sh", + "( itemId", + "(item Id", + "Ġdet achment", + "Ġdetach ment", + "ĠEn core", + "ĠEnc ore", + "å° Ķ", + "Ġre kl", + "Ġr ekl", + "Ġrek l", + "Ġc ram", + "Ġcr am", + "Ġcra m", + ") $/", + ")$ /", + ".get Host", + "_ recommend", + "_re commend", + "- HT", + "-H T", + "_cal ibration", + "Auth enticate", + ".firebase app", + "UN IX", + "ĉ Camera", + "ĉC amera", + "ĠHE AP", + "I deal", + "Ide al", + ". office", + ".off ice", + "Ġgoof y", + "Ġgoo fy", + "( Symbol", + "(S ymbol", + "Ġjo uer", + "Ġjou er", + "_part itions", + "_partition s", + "Ġrapid ement", + "Ġrapide ment", + "ĠGNU NET", + "ĠGN UNET", + "id User", + "Ġsuper vise", + "Ġsuperv ise", + "( Contact", + "A WN", + "AW N", + "ãģ ĺ", + "Ġna am", + "Ġa ust", + "Ġau st", + "Ġaus t", + "åľ¨ 线", + "_ softmax", + "_soft max", + "Allow Anonymous", + "amm able", + "amma ble", + "RO UTE", + "ROUT E", + "* D", + "Ġ aden", + "Ġa den", + "Ġad en", + "Ġade n", + "ĠCrist ina", + "ĠCrist iano", + "Ġblood stream", + "sub class", + "_ persona", + "_person a", + "CH ILD", + "- know", + "-k now", + "Ġnavigation Options", + "ĠZuk unft", + "ĠPix ar", + "Ty ler", + "Ġunder world", + "Ġsincer ity", + "Ġdisp enser", + "Ġdispens er", + "Ġk ter", + "Ġkt er", + "id ders", + "idd ers", + ".add Node", + "- checked", + "-check ed", + "Ġkey st", + "Ġke yst", + "Ġkeys t", + "ĠW TO", + "ĠWT O", + ". signals", + ".sign als", + ".signal s", + "Ġadvent urer", + "Ġadventure r", + "ĠP ang", + "ĠPan g", + "ĠPa ng", + "\\ R", + "= pos", + "=p os", + "Ġdispens aries", + "ĠClose t", + "ĠClo set", + "(\" {\\\"", + "(\"{ \\\"", + "id eon", + "ide on", + "ideo n", + "Ġnécess aire", + "( )\"Ċ", + "() \"Ċ", + "()\" Ċ", + "_RECE IVED", + "Ġrésult ats", + "Ġm oden", + "Ġmod en", + "Ġmode n", + "Ġmo den", + "ĠIceland ic", + "; d", + ". allowed", + ".all owed", + ".allow ed", + "(new User", + "Ġmerc iless", + ".Wait For", + "Ġday care", + "ĠCon veyor", + "Ġ Ù", + "ا Ù", + "า à¸", + "Ñ Ł", + "ÑŁ ÑŁ", + "Ġ à¸", + "Ġà ¸", + "à¹Ģ à¸", + "i á»", + "ãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢ", + "Ġ اØ", + "Ġا Ø", + "ॠĪ", + "Ġ ãĢĢ", + "ĠãĢ Ģ", + "Ñ Ĺ", + "i á»ĩ", + "iá» ĩ", + "ÑŁ ÑŁÑŁÑŁ", + "ÑŁÑŁ ÑŁÑŁ", + "ÑŁÑŁÑŁ ÑŁ", + "à¥ĩ à¤Ĥ", + "à¥ĩठĤ", + "Ñĸ д", + "ा र", + "ाठ°", + "ÙĨ د", + "Ñĸ в", + "Ġ ब", + "Ġठ¬", + "Ġ à¤ľ", + "Ġठľ", + "à ¥¤", + "ॠ¤", + "н Ñĸ", + "ठĹ", + "Ġ Ø¢", + "ĠØ ¢", + "Ġ न", + "Ġठ¨", + "Ñ Ķ", + "Ġ ÑĢа", + "ĠÑĢ Ð°", + "Ġ à¤ħ", + "Ġठħ", + "Ñģ ÑĮ", + "Ġ व", + "Ġठµ", + "ÑĨ Ñĸ", + "Ġv á»", + "³ ت", + "Ġ द", + "Ġठ¦", + "n ÄĽ", + "Ġ ल", + "Ġठ²", + "Ġ ãĢĢĠãĢĢ", + "ĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠ ãĢĢ", + "ॠĤ", + "ठ¦", + "à¸Ń à¸ĩ", + "ÙĪ ÙĨ", + "ठµ", + "a ÅŁ", + "๠Ĥ", + "ι κ", + "Ġ र", + "Ġठ°", + "Ġ ви", + "Ġв и", + "à¥į य", + "à¥įठ¯", + "ा न", + "ाठ¨", + "Ġ از", + "Ġا ز", + "ĠØ§Ø ²", + "ا Ùĩ", + "ا٠ĩ", + "Ľ i", + "Ġh á»", + "à¥ĭ à¤Ĥ", + "i ế", + "ĠÄij á»", + "ठ¯", + "Ï į", + "Ġc á»§", + "Ġ بر", + "Ġب ر", + "Ġ ÙħÛĮ", + "ĠÙħ ÛĮ", + "Ġ اÛĮ", + "Ġا ÛĮ", + "Ġ à¤Ĩ", + "ĠठĨ", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ि य", + "िठ¯", + "ÑŁÑŁÑŁÑŁ ÑŁÑŁÑŁÑŁ", + "в и", + "ر د", + "н Ñĥ", + "ÙĬ ÙĨ", + "ι α", + "Ġ त", + "Ġठ¤", + "Ñĩ и", + "Ġ à¤ķर", + "Ġà¤ķ र", + "ا ز", + "Ø§Ø ²", + "a ÄŁ", + "Ġ à¤ī", + "Ġठī", + "ठ¬", + "ÏĦ α", + "ت ر", + "Ùĩ ا", + "ร ะ", + "j ÃŃ", + "Î ij", + "а ÑĤи", + "аÑĤ и", + "Ġ à¤Ĺ", + "ĠठĹ", + "Ġ ÑĤа", + "ĠÑĤ а", + "Ú Ĩ", + "ठľ", + "า à¸Ļ", + "าภĻ", + "Ġ à¤Ń", + "ĠठŃ", + "ि à¤ķ", + "िठķ", + "á v", + "Ġ Ú¯", + "Ï İ", + "า ย", + "าภ¢", + "Ġ à¤Ķ", + "ĠठĶ", + "ÅĻ ÃŃ", + "ا ÙĪ", + "ا٠Ī", + "Ġ Ñī", + "ĠÑ ī", + "Ġ à¤Ķर", + "Ġà¤Ķ र", + "ен нÑı", + "Ġ Ú©Ùĩ", + "ĠÚ© Ùĩ", + "ठ¡", + "ÏĦ ο", + "ε ι", + "Ġ à¤ĩ", + "Ġठĩ", + "à¥į त", + "à¥įठ¤", + "ठŁ", + "Û ±", + "Ġ ØĮ", + "ĠØ Į", + "Ïģ ο", + "η ÏĤ", + "ë ¬", + "Ñĸ н", + "i á»ģ", + "iá» ģ", + "i ên", + "iê n", + "Ġ вÑĸд", + "Ġв Ñĸд", + "ĠвÑĸ д", + "d ı", + "ÙĦ ÛĮ", + "Ġ ز", + "ĠØ ²", + "Ïģ α", + "Ġ ÛĮ", + "า à¸ĩ", + "าภĩ", + "Ġth á»", + "Ġ à¹Ģà¸", + "Ġà¹Ģ à¸", + "i á»ĩn", + "iá»ĩ n", + "ا ÙĬ", + "ا٠Ĭ", + "ан нÑı", + "ÑĢ Ðµ", + "Î Ł", + "å Ĵ", + "ا Ø´", + "Ø§Ø ´", + "ा ल", + "ाठ²", + "ëħ Ħ", + "Ġ य", + "Ġठ¯", + "Ġ را", + "Ġر ا", + "ठ¼", + "Ñĥ в", + "ÙĪ Ùħ", + "Ġ عÙĦ", + "Ġع ÙĦ", + "ί α", + "à¥Ī à¤Ĥ", + "à¥ģ à¤", + "า ม", + "าภ¡", + "Ġm á»Ļt", + "Ġ à¤ı", + "Ġठı", + "ãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢ", + "Ġ पर", + "Ġप र", + "Ġ اÙĨ", + "Ġا ÙĨ", + "Ġ اÛĮÙĨ", + "Ġا ÛĮÙĨ", + "ĠاÛĮ ÙĨ", + "Ġv Ỽi", + "Ġvá» Ľi", + "Î £", + "ठļ", + "Û °", + "i á»ĥ", + "iá» ĥ", + "า à¸ģ", + "าภģ", + "Î Ļ", + "ا ع", + "Ø§Ø ¹", + "Ñĸ й", + "à¹ģ ล", + "Ùĩ اÛĮ", + "Ùĩا ÛĮ", + "Ñĩ а", + ". :.:", + ".: .:", + ".:. :", + "ÏĦ η", + "Ġ Îij", + "ĠÎ ij", + "ر ÛĮ", + "Ġn gh", + "Ġng h", + "ν α", + "à¹ĥ à¸Ļ", + "ि त", + "िठ¤", + "Ġ και", + "Ġκ αι", + "Ġκα ι", + "ÏĦ ε", + "à¥į à¤Ł", + "à¥įठŁ", + "μ α", + "л Ñĥ", + "ý m", + "ÏĢ Î¿", + "à¥Ī ।", + "ï¼ ¼", + "ر ÙĬ", + "н иÑħ", + "ни Ñħ", + "Ïģ ι", + "Ù Ģ", + "ÑĢ Ð¾", + "Ġ à¤ļ", + "Ġठļ", + "ा त", + "ाठ¤", + "ا ÙĤ", + "ا٠Ĥ", + "Ġ श", + "Ġठ¶", + "ĠÄij á»Ļ", + "ĠÄijá» Ļ", + "é ho", + "iá»ģ u", + "ภ¨", + "Ñĸ лÑĮ", + "Ñĸл ÑĮ", + "uy á»", + "Û ²", + "Ġn Äĥ", + "Ïī ν", + "Ġ ÏĦοÏħ", + "ĠÏĦ οÏħ", + "ĠÏĦο Ïħ", + "к ий", + "ки й", + "í ĸ", + "Ġ Ñīо", + "ĠÑī о", + "à¥į व", + "à¥įठµ", + "Ġ اÙĦØ£", + "ĠاÙĦ Ø£", + "ا ئ", + "Ø§Ø ¦", + "t ı", + "Ġ ÏĦο", + "ĠÏĦ ο", + "¬ ¬", + "Ġ Ø·", + "ĠØ ·", + "Ùħ اÙĨ", + "Ùħا ÙĨ", + "Ġ Îł", + "ĠÎ ł", + "д и", + "ภ¶", + "ि à¤ı", + "िठı", + "ãģ£ ãģŁ", + "ãģ£ãģ Ł", + "ÛĮ Ùħ", + "ÃŃ nh", + "ÃŃn h", + "r av", + "ra v", + "ÄĽ t", + "Î ķ", + "Ġ Ñıк", + "ĠÑı к", + "ç Ĥ", + "à¸Ń à¸Ļ", + "ãģ¦ ãģĦ", + "ि ल", + "िठ²", + "Ñĸ ÑĤ", + "з а", + "á p", + "ठ§", + "Ġ êµ", + "Ġê µ", + "à¹ģ ละ", + "à¹ģล ะ", + "ÃŃ ch", + "ÃŃc h", + "Ġ Ø¢ÙĨ", + "ĠØ¢ ÙĨ", + "ت Ùĩ", + "Ġ Ùħع", + "ĠÙħ ع", + "н ий", + "ни й", + "Æ°á»Ľ c", + "Ġ اÙĦع", + "Ġا ÙĦع", + "ĠاÙĦ ع", + "ر ب", + "ा म", + "ाठ®", + "Ġ رÙĪ", + "Ġر ÙĪ", + "é «", + "ı y", + "Ġh á»į", + "Ġhá» į", + "ÑĤÑĮ ÑģÑı", + "Ġ Îļ", + "ĠÎ ļ", + "Ġ à¤ĩस", + "Ġà¤ĩ स", + "ï¼ ¿", + "Ġ ÚĨ", + "Ġ ÙĪØ§ÙĦ", + "ĠÙĪ Ø§ÙĦ", + "ĠÙĪØ§ ÙĦ", + "íķ Ļ", + "ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ", + "Ġ vý", + "Ġv ý", + "ि स", + "िठ¸", + "ữ ng", + "س ÛĮ", + "Ġ ìĥ", + "Ġì ĥ", + "ा à¤Ĥ", + "ाठĤ", + "ï½ ¤", + "à¹ĩ à¸Ļ", + "Ġ थ", + "Ġठ¥", + "l arak", + "la rak", + "lar ak", + "lara k", + "â y", + "t ÄĽ", + "ν ο", + "Ġ ÙħÙĪ", + "ĠÙħ ÙĪ", + "Ġng ưá»Ŀi", + "å ¦", + "ÙĬ د", + "il ir", + "ili r", + "ا ØŃ", + "Ø§Ø Ń", + "Ġ ãĢ", + "Ù ĭ", + "Ġ ÑĢоз", + "ĠÑĢ Ð¾Ð·", + "Ġ й", + "ĠÐ ¹", + "Ġd ụ", + "à¹Ģ à¸Ľ", + "à¹ĢภĽ", + "ั à¸ĩ", + "л е", + "ा य", + "ाठ¯", + "ï¿ £", + "ÙĪ Ø§ÙĨ", + "ÙĪØ§ ÙĨ", + "Ġth á»ĥ", + "Ġthá» ĥ", + "ã ĥ½", + "ãĥ ½", + "ü ÅŁ", + "ç Ł", + "Ġ ο", + "ĠÎ ¿", + "Ġ Σ", + "ĠÎ £", + "ÛĮ ت", + "ั à¸ģ", + "Î ¤", + "Ġ à¤ıà¤ķ", + "Ġà¤ı à¤ķ", + "Ġ ÙĩÙħ", + "ĠÙĩ Ùħ", + "ìĽ Ķ", + "Ġ Îľ", + "ĠÎ ľ", + "Ġ à¸Ħ", + "ĠภĦ", + "¯ ¸", + "ا رÛĮ", + "ار ÛĮ", + "ि न", + "िठ¨", + "Ġnh ững", + "Ġnh ư", + "и ÑĤи", + "иÑĤ и", + "ãĥ³ ãĥ", + "à¹Ģ ร", + "à¹Ģภ£", + "Ġ ÐĽ", + "ĠÐ Ľ", + "ÑĢ Ñĸ", + "á d", + "ü y", + "i ye", + "iy e", + "Ġ Îķ", + "ĠÎ ķ", + "Ġ ส", + "Ġภª", + "Ïĥ η", + "Ġ ë¬", + "Ġë ¬", + "ï »", + "ठ£", + "Î Ĺ", + "ठ¶", + "Ġ ÙħØŃ", + "ĠÙħ ØŃ", + "ÙĦ ÙĬ", + "Ġ με", + "Ġμ ε", + "Ġp ÅĻÃŃ", + "ĠpÅĻ ÃŃ", + "Î Ŀ", + "à¥į ष", + "à¥įठ·", + "t ir", + "ti r", + "ر اÙĨ", + "را ÙĨ", + "ĠÄij á»ĭ", + "ĠÄijá» ĭ", + "Ġ коÑĤ", + "Ġк оÑĤ", + "Ġко ÑĤ", + "к ÑĢа", + "λ ο", + "Ġ ÏĦη", + "ĠÏĦ η", + "Ñī е", + "ÏĦ ικ", + "ÏĦι κ", + "ั à¹ī", + "i ết", + "iế t", + "α ν", + "í Ķ", + "к иÑħ", + "ки Ñħ", + "Ġ поÑģ", + "Ġп оÑģ", + "Ġпо Ñģ", + "t ır", + "tı r", + "à¥į म", + "à¥įठ®", + "ر Ùģ", + "ÄĽ l", + "ठŃ", + "o vé", + "ov é", + "Ġl á»", + "à¹Ħ à¸Ķ", + "ãģª ãģĦ", + "ภ©", + "i á»ĩu", + "iá»ĩ u", + "Î ¾", + "Ġ عÙĦÙī", + "Ġع ÙĦÙī", + "ĠعÙĦ Ùī", + "д Ñĥ", + "Ġdụ ng", + "а ÑĢа", + "аÑĢ Ð°", + "ा द", + "ाठ¦", + "o ž", + "ÙĦ Ùĩ", + "ÙĦ Ùħ", + "н оÑĹ", + "но ÑĹ", + "Û± Û", + "à¸Ĥ à¸Ńà¸ĩ", + "Î ¡", + "à¥Ģ à¤Ĥ", + "Ġ пÑĸд", + "Ġп Ñĸд", + "Ġ फ", + "Ġठ«", + "ภĺ", + "ε ÏĤ", + "ा स", + "ाठ¸", + "à¹ĥ ห", + "о ва", + "ов а", + "ت ÛĮ", + "à¸Ń ย", + "ภį", + "Ġn Äĥm", + "ĠnÄĥ m", + "ÏĦ ι", + "ÙĪ ÛĮ", + "Ġ мÑĸ", + "Ġм Ñĸ", + "Ġ اÙħ", + "Ġا Ùħ", + "ÏĢ ÏĮ", + "Ġ zá", + "Ġz á", + "ठĪ", + "Ġ à¤ĸ", + "Ġठĸ", + "Ġ nÄĽ", + "Ġn ÄĽ", + "c ÃŃ", + "ÙĨ Ú¯", + "Ñģ и", + "Î ¶", + "n á", + "Ŀ i", + "Å ©", + "Ø ¦", + "Ġ اÙĦس", + "Ġا ÙĦس", + "ĠاÙĦ س", + "á»ij c", + "Ạ½", + "ا ج", + "Ø§Ø ¬", + "Ùħ ا", + "êµ Ń", + "о Ñİ", + "د ر", + "à¹Ģ à¸ģ", + "à¹Ģภģ", + "ภł", + "à ¡ng", + "á ng", + "án g", + "íķ ©", + "Ġ ÏĦηÏĤ", + "ĠÏĦ ηÏĤ", + "ĠÏĦη ÏĤ", + "Ġ Ñĸн", + "ĠÑĸ н", + "о ÑĹ", + "à¥ĩ श", + "à¥ĩठ¶", + "ภĭ", + "à¥ĭ à¤Ĺ", + "л Ñĸ", + "Ġp ÅĻed", + "ĠpÅĻ ed", + "ĠpÅĻe d", + "Äį nÃŃ", + "Ġ ка", + "Ġк а", + "Ġ Τ", + "ĠÎ ¤", + "á»Ļ i", + "v ÃŃ", + "ÑĢ Ñı", + "ा à¤ľ", + "ाठľ", + "а Ñħ", + "ि र", + "िठ°", + "า ส", + "าภª", + "d ır", + "dı r", + "Ø ¢", + "Î ļ", + "Ġ ÎŃ", + "ĠÎ Ń", + "Ġt ại", + "iá»ĩ c", + "i ến", + "iế n", + "Ġ غ", + "ĠØ º", + "ا Ø®", + "Ø§Ø ®", + "Ġ اÙĦØŃ", + "Ġا ÙĦØŃ", + "ĠاÙĦ ØŃ", + "Ġ бÑĥ", + "Ġб Ñĥ", + "Ġv á»ģ", + "Ġvá» ģ", + "м Ñĸ", + "Ùħ ÙĦ", + "m Ä±ÅŁ", + "à¸Ľ ระ", + "à¸Ľà¸£ ะ", + "ο Ïį", + "ε ί", + "Ġर ह", + "н им", + "ни м", + "ع د", + "Ġ باÙĦ", + "Ġب اÙĦ", + "Ġبا ÙĦ", + "¤ ij", + "ç ł", + "Ġo lm", + "Ġol m", + "Ïİ Î½", + "Ġh á»įc", + "Ġhá»į c", + "ا ست", + "Ø§Ø ³Øª", + "اس ت", + "า ว", + "าภ§", + "ÙĪ Ø¨", + "Ñĸ Ñı", + "Ġ ÙĩاÛĮ", + "ĠÙĩ اÛĮ", + "ĠÙĩا ÛĮ", + "ë§ Ī", + "ॠĮ", + "Ġ ÄĮ", + "ĠÄ Į", + "ठı", + "ا دÙĩ", + "اد Ùĩ", + "Ġ اÙĪ", + "Ġا ÙĪ", + "н Ñĭм", + "нÑĭ м", + "Ạ±", + "Ùħ ÙĨ", + "iá»ĩ t", + "l aÅŁ", + "la ÅŁ", + "Ñĸ з", + "ÙĪ Ø³", + "Ġl Ãłm", + "ĠlÃł m", + "ĠÄij ến", + "ĠÄijế n", + "प न", + "Ġ ÛĮÚ©", + "ĠÛĮ Ú©", + "Ġ ÙĦÙĦ", + "ĠÙĦ ÙĦ", + "Ġ mÄĽ", + "Ġm ÄĽ", + "Ġ براÛĮ", + "Ġبر اÛĮ", + "ा ह", + "ाठ¹", + "Ġ Ùħر", + "ĠÙħ ر", + "e ç", + "à¸Ń ร", + "ε Ïģ", + "ั à¸Ķ", + "к он", + "ко н", + "n ou", + "no u", + "Ġ год", + "Ġг од", + "ู à¹ī", + "à¹Ģ ล", + "à¹Ģภ¥", + "Ú ĺ", + "ĠÄij á»ĭnh", + "ĠÄijá»ĭ nh", + "ĠÄij ó", + "а нов", + "ан ов", + "ано в", + "Ġ Ù쨱", + "ĠÙģ Ø±", + "ا رد", + "ار د", + "Ñĸ ÑĹ", + "à¸Ħ ร", + "à¥į थ", + "à¥įठ¥", + "c ak", + "ca k", + "ÑĨ ÑĸÑĹ", + "ÑĨÑĸ ÑĹ", + "Ġ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠ ãĢĢĠãĢĢĠãĢĢ", + "Ùĩ ر", + "ॠī", + "Ġg iá»", + "Ġgi á»", + "í Ĩ", + "âĢĮ ÙĩاÛĮ", + "âĢĮÙĩا ÛĮ", + "à¥ģ र", + "à¥ģठ°", + "Ġ à¸ģ", + "Ġภģ", + "Å Ī", + "æ ¨", + "ÎŁ Î", + "า à¸Ħ", + "าภĦ", + "кÑĢа ÑĹ", + "ả o", + "o ÄŁ", + "Ġ सम", + "Ġस म", + "Ġv iá»ĩc", + "Ġs ẽ", + "Ġ ná", + "Ġn á", + "ÙĬ Ùħ", + "£ p", + "ö y", + "ÙĪ Ø²", + "Ġ κα", + "Ġκ α", + "Ùħ د", + "n ÃŃm", + "nÃŃ m", + "o vá", + "ov á", + "ा व", + "ाठµ", + "ा ।", + "à¥į स", + "à¥įठ¸", + "ç ·", + "ặ c", + "Ġ à¸ŀ", + "Ġภŀ", + "ï½ Ģ", + "ô i", + "Ġ ợ", + "Ġá» Ł", + "ο ÏĤ", + "Ġtr ên", + "м Ñĥ", + "ÑģÑĮ к", + "ภŁ", + "o vat", + "ov at", + "ova t", + "Ġm á»", + "í ı", + "Ġ во", + "Ġв о", + "ε ν", + "à¥Ĥ र", + "Ú¯ اÙĩ", + "ĠÄij á»Ļng", + "ĠÄijá»Ļ ng", + "Ú© ÙĨ", + "Ñī и", + "Ġ пÑĢа", + "Ġп ÑĢа", + "ĠпÑĢ Ð°", + "ü rk", + "ür k", + "ÙĪ Ø¹", + "ấ p", + "n ý", + "Ġ quan", + "Ġqu an", + "Ġq uan", + "Ġqua n", + "Ñĸ Ñĩ", + "Ġ να", + "Ġν α", + "Ġन ह", + "Ġ Ú©ÙĨ", + "ĠÚ© ÙĨ", + "c ı", + "çĿ Ģ", + "б о", + "Ġ اس", + "Ġا س", + "ĠØ§Ø ³", + "è »", + "ا ÙĨÛĮ", + "اÙĨ ÛĮ", + "à¸ķ ร", + "ÏĦ ά", + "Ġ Ø£ÙĨ", + "ĠØ£ ÙĨ", + "éĤ £", + "Ġ ม", + "Ġภ¡", + "к ÑĤ", + "i ê", + "Ġhá» £p", + "ت Ùħ", + "Ġ بÙĨ", + "Ġب ÙĨ", + "h od", + "ho d", + "ι Ïĥ", + "ห à¸Ļ", + "Ġ ÑĹ", + "ĠÑ Ĺ", + "л ив", + "ли в", + "Ġ کرد", + "ĠÚ© رد", + "Ġکر د", + "Ġ ÙħØ´", + "ĠÙħ Ø´", + "ا Ø·", + "Ø§Ø ·", + "ب ÙĬ", + "Ġ ร", + "Ġภ£", + "د Ùħ", + "ÙĦ اÙħ", + "ÙĦا Ùħ", + "à¹Ī ว", + "Ġ ÙĨÙħ", + "ĠÙĨ Ùħ", + "Ġ æĹ", + "Ġæ Ĺ", + "é ħ", + "н оÑģÑĤ", + "но ÑģÑĤ", + "ноÑģ ÑĤ", + "i á»ĥm", + "iá»ĥ m", + "êµ IJ", + "a yı", + "ay ı", + "Ġ بÙĪØ¯", + "Ġب ÙĪØ¯", + "ĠبÙĪ Ø¯", + "Ú¯ ر", + "Ġh iá»ĩn", + "Ġhi á»ĩn", + "ç ³", + "ÑģÑĤ вен", + "ÑģÑĤв ен", + "ÑģÑĤве н", + "Ġà¤ķर न", + "Ġ ÏĦην", + "ĠÏĦ ην", + "ĠÏĦη ν", + "Ġ à¸Ń", + "ĠภŃ", + "Ġ Ùħت", + "ĠÙħ ت", + "ģ n", + "ج Ùħ", + "λ λ", + "Ġ ÑĢе", + "ĠÑĢ Ðµ", + "ิ à¸Ķ", + "Ġ اÙĦÙĤ", + "Ġا ÙĦÙĤ", + "ĠاÙĦ ÙĤ", + "α Ïģ", + "Ġ यह", + "Ġय ह", + "n ÃŃch", + "nÃŃ ch", + "ÑĶ ÑĤÑĮÑģÑı", + "Ġ à¸Ĺ", + "ĠภĹ", + "ÛĮ Ø´", + "ÅĻ e", + "Ġn ebo", + "Ġne bo", + "Ġneb o", + "Ġ Ñĩа", + "ĠÑĩ а", + "l ou", + "lo u", + "ÑģÑĤ во", + "ÑģÑĤв о", + "Ġ Ч", + "ĠÐ §", + "à¸Ħ ว", + "Ùĩ Ùħ", + "à¹Ģ à¸Ķ", + "à¹ĢภĶ", + "Ġ à¹ģ", + "Ġ à¹Ĥ", + "Û ³", + "Å© ng", + "Ġ nej", + "Ġn ej", + "Ġne j", + "ÛĮ Ú©", + "Ġs á»Ń", + "Ùģ Ø±", + "Î ł", + "Ġп ок", + "Ġпо к", + "ĠاÙĦ ÙĨ", + "Ġv Å¡", + "á º«", + "Ạ«", + "Ġnh Ãł", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ή ÏĤ", + "ο Ïģ", + "Ġ Ïĩ", + "ĠÏ ĩ", + "à¹Ģ à¸Ĺ", + "à¹ĢภĹ", + "Ñĥ лÑĮ", + "Ñĥл ÑĮ", + "ãħ ĩ", + "Ġ yıl", + "Ġy ıl", + "Ġyı l", + "ÑĢ Ð¾Ð´", + "ÑĢо д", + "ί ν", + "ìĹ Īëĭ¤", + "ìĹĪ ëĭ¤", + "ا ص", + "Ø§Ø µ", + "ĠÄij ầu", + "à¥ĩ à¤ķ", + "à¥ĩठķ", + "ÑĢ Ð¾Ð¼", + "ÑĢо м", + "ãģĵ ãģ¨", + "Ġ ار", + "Ġا ر", + "ĠØ§Ø ±", + "å¥ ¹", + "Ġ تØŃ", + "Ġت ØŃ", + "Å¡ tÄĽ", + "Å¡t ÄĽ", + "à¥į ल", + "à¥įठ²", + "à¥į à¤ķ", + "à¥įठķ", + "Ġ کار", + "ĠÚ© ار", + "u jÃŃ", + "uj ÃŃ", + "Ġ à¤īन", + "Ġà¤ī न", + "Ġ αÏĢÏĮ", + "Ġα ÏĢÏĮ", + "ĠαÏĢ ÏĮ", + "Ġm Ãł", + "ž ÃŃ", + "Ġ à¸Ī", + "ĠภĪ", + "a lı", + "al ı", + "ठ«", + "Ñĩ еÑģ", + "Ñĩе Ñģ", + "Ġ عÙĨ", + "Ġع ÙĨ", + "æķ Ļ", + "ï¾ Ĩ", + "ि à¤Ĥ", + "िठĤ", + "Ġs á»±", + "в оÑĢ", + "во ÑĢ", + "Ġth á»±c", + "ë į°", + "ëį °", + "ãģ¦ ãģĦãĤĭ", + "ãģ¦ãģĦ ãĤĭ", + "à¹Ī à¸ĩ", + "ت ب", + "Ġnh iá»ģu", + "ĥ n", + "ĠÄij á»ĵ", + "ĠÄijá» ĵ", + "Ġ ห", + "Ġภ«", + "Û µ", + "m ÄĽ", + "ạ t", + "Ġch ÃŃnh", + "ĠchÃŃ nh", + "ĠchÃŃn h", + "μ ÎŃ", + "an ı", + "Ġb á»ĭ", + "ằ ng", + "ÅĻ ed", + "ÅĻe d", + "é Ł", + "á nh", + "án h", + "ÙĢ ÙĢ", + "Ġ Ùħس", + "ĠÙħ س", + "á»ĭ ch", + "Ä ĥn", + "Äĥ n", + "o vánÃŃ", + "ov ánÃŃ", + "ová nÃŃ", + "ován ÃŃ", + "à¹Ī าà¸ĩ", + "à¹Īา à¸ĩ", + "Ġ à¸Ľ", + "ĠภĽ", + "Ġn Æ°á»Ľc", + "Ð ±Ð¾ÑĤ", + "б оÑĤ", + "бо ÑĤ", + "ı yor", + "ıy or", + "ĠØ® ÙĪØ¯", + "ĠØ®ÙĪ Ø¯", + "Û ¹", + "Ġ Ùħد", + "ĠÙħ د", + "Ġ üz", + "Ġü z", + "ì ½", + "ÙĪ ÙĤ", + "ë¥ ´", + "л ек", + "ле к", + "Ġc ả", + "ол ог", + "оло г", + "à¹ī à¸Ńà¸ĩ", + "à¹īà¸Ń à¸ĩ", + "m iÅŁ", + "mi ÅŁ", + "à¹ī ว", + "Ä ©", + "Î ľ", + "à¸Ń à¸ģ", + "_ _", + "ठĸ", + "Ġ Я", + "ĠÐ ¯", + "ë ¬´", + "ë¬ ´", + "اÛĮ ÛĮ", + "s ké", + "sk é", + "uy ên", + "e ÅŁ", + "á i", + "ú ng", + "ún g", + "Ãł o", + "Ñĸ Ñģ", + "ç ¶", + "Ġ à¤Ĩप", + "Ġà¤Ĩ प", + "ï º", + "Î Ľ", + "Ġ ê³µ", + "Ġê³ µ", + "Ġ ÐĨ", + "ĠÐ Ĩ", + "Ġà¤ħ पन", + "Ġà¤ħप न", + "ứ ng", + "ÏĮ ÏĤ", + "Ġngh iá»ĩ", + "Ġnghi á»ĩ", + "Ġ اÙĦب", + "Ġا ÙĦب", + "ĠاÙĦ ب", + "à¥ĭ न", + "Ġ à¤Ł", + "ĠठŁ", + "Ġ ìľł", + "Ġìľ ł", + "Ġc Å©ng", + "ĠcÅ© ng", + "Ġà¤ī स", + "Ġ ड", + "Ġठ¡", + "ĠØ´ دÙĩ", + "Ġشد Ùĩ", + "ี à¹ī", + "Û ´", + "ặ t", + "æĸ ¯", + "Ġ ëį", + "Ġë į", + "Ġп л", + "б и", + "ê³ Ħ", + "ο ν", + "Ġç ık", + "Ġçı k", + "Ġbu lun", + "Ġbul un", + "س Ùħ", + "a ç", + "ا ÙĨÙĩ", + "اÙĨ Ùĩ", + "ÛĮ ز", + "l eÅŁ", + "le ÅŁ", + "ắ c", + "ا Ú©", + "Ġस à¤ķ", + "Ġ оÑĢг", + "Ġо ÑĢг", + "ĠоÑĢ Ð³", + "Ġ à¸Ļ", + "ĠภĻ", + "ा थ", + "ाठ¥", + "Ġ ÙħÙĤ", + "ĠÙħ ÙĤ", + "ĠÎĶ E", + "Ñİ ÑĤÑĮ", + "ÑİÑĤ ÑĮ", + "á»Ļ c", + "Ġ η", + "ĠÎ ·", + "s ob", + "so b", + "Ġth eo", + "Ġthe o", + "å ŀ", + "Ġ اÙĦØ´", + "ĠاÙĦ Ø´", + "à¹Ģ à¸ŀ", + "à¹Ģภŀ", + "ÎŃ ÏĤ", + "à¹Ģ à¸Ĥ", + "à¹ĢภĤ", + "å Ļ", + "ि श", + "िठ¶", + "Ġ باز", + "Ġب از", + "Ġبا ز", + "ÑĢ Ð¾Ð±", + "ÑĢо б", + "Ġγ ια", + "μ ε", + "Ġ باش", + "Ġب اش", + "Ġبا Ø´", + "ा à¤ĩ", + "ाठĩ", + "Ġqu y", + "Ġq uy", + "λ ε", + "ا Ùĥ", + "ا٠ĥ", + "Ġ ÑĢок", + "ĠÑĢ Ð¾Ðº", + "Ġ Türk", + "ĠT ürk", + "ĠTür k", + "Ġ Ð¥", + "ĠÐ ¥", + "ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ ÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁÑŁ", + "æ ©", + "Ġph ải", + "à¸Ħ วาม", + "à¸Ħว าม", + ": ::", + ":: :", + "l ÃŃ", + "Ġj sou", + "Ġjs ou", + "ÛĮ ÙĦ", + "ál nÃŃ", + "áln ÃŃ", + "Ķ Ķ", + "í ĸī", + "íĸ ī", + "æĥ ³", + "l á", + "Ġ ÏĥÏħ", + "ĠÏĥ Ïħ", + "Ñĭ ва", + "Ñĭв а", + "Ġnh ất", + "à¸Ń ม", + "Û ¸", + "e cek", + "ec ek", + "ece k", + "Ñĸ ÑĢ", + "ÙĪ Ø´", + "λ α", + "Ġ ÎĴ", + "ĠÎ Ĵ", + "о ÑĢа", + "оÑĢ Ð°", + "Ùģ Øª", + "e dir", + "ed ir", + "edi r", + "Ñĥ Ñħ", + "ä¸ ĸ", + "ĠУ кÑĢаÑĹ", + "ĠУкÑĢа ÑĹ", + "Ġ íĶ", + "Ġí Ķ", + "ά ν", + "Ġ شر", + "ĠØ´ ر", + "ĠاÙĦ ج", + "е ÑĢед", + "еÑĢ ÐµÐ´", + "еÑĢе д", + "ìĺ ģ", + "Ġh Ãłnh", + "ï¿£ ï¿£", + "м е", + "ÑİÑĤ ÑģÑı", + "ĠØ¥ ÙĦÙī", + "ĠØ¥ÙĦ Ùī", + "ìĹ ħ", + "Ġ تر", + "Ġت ر", + "к ом", + "ко м", + "Ġ شد", + "ĠØ´ د", + "Ġ اÙĦÙĥ", + "Ġا ÙĦÙĥ", + "ĠاÙĦ Ùĥ", + "Ġ ÏĥÏĦο", + "ĠÏĥ ÏĦο", + "à¥į द", + "à¥įठ¦", + "ëł ¤", + "Ñĥ ваннÑı", + "Ñĥв аннÑı", + "Ġth ì", + "ê ´Ģ", + "ê´ Ģ", + "κ ε", + "س ب", + "íĥ Ģ", + "Ġ ï¼ı", + "Ġï¼ ı", + "Ġ à¹ģละ", + "Ġà¹ģ ละ", + "Ġà¹ģล ะ", + "Ġ ÏĮ", + "ĠÏ Į", + "н иÑĨ", + "ни ÑĨ", + "Ġ ÐĿа", + "ĠÐĿ а", + "Ñı в", + "l ü", + "ι ο", + "ÙĨ دÙĩ", + "ÙĨد Ùĩ", + "ÙĦ Ùĥ", + "Ġng Ãły", + "Ġnh ân", + "Ġ ^{", + "Ġ^ {", + "ॠĥ", + "Ġg erek", + "Ġge rek", + "Ġger ek", + "Ġgere k", + "ا رÙĩ", + "ار Ùĩ", + "Ġc Æ¡", + "Ġ à¸ķ", + "Ġภķ", + "æ Ĥ", + "çĶ °", + "à¥Īà¤Ĥ ।", + "ั ว", + "v ÄĽ", + "ö z", + "и ли", + "ил и", + "Ġph áp", + "Ġphá p", + "ê¸ Ī", + "Ġ ÎŁ", + "ĠÎ Ł", + "Ġp ÅĻi", + "ĠpÅĻ i", + "Ġ ìĸ´", + "Ġìĸ ´", + "Ġд ол", + "Ġдо л", + "ÙĪ Ø±Ø¯", + "ÙĪØ± د", + "à¹Ģ ม", + "à¹Ģภ¡", + "Ïĥ ε", + "า à¸Ĺ", + "าภĹ", + "o Ãłi", + "ร ม", + "Û ¶", + "Ġ à¸ļ", + "Ġภļ", + "i yet", + "iy et", + "iye t", + "ÏĦ αι", + "ÏĦα ι", + "ìĦ ł", + "Ġ εÏĢ", + "Ġε ÏĢ", + "ि व", + "िठµ", + "ê¹ Į", + "г а", + "ĠÑģ лÑĥ", + "ĠÑģл Ñĥ", + "Ġh ình", + "Ġ داÙĨ", + "Ġد اÙĨ", + "Ġà¤Ĺ य", + "ÙĬ ا", + "è ij", + "à¤Ĥ त", + "Ġ ساÙĦ", + "Ġس اÙĦ", + "ëł Ī", + "l erin", + "le rin", + "ler in", + "leri n", + "à¥ĩ त", + "à¥ĩठ¤", + ".: .:.:.:", + ".:.: .:.:", + ".:. :.:.:", + ".:.:.: .:", + ".:.:. :.:", + ".:.:.:. :", + "Ġ ëħ", + "Ġë ħ", + "Ġ اÙĦØ¥", + "ĠاÙĦ Ø¥", + "ả ng", + "ản g", + "è Ħ", + "ο λ", + "п ов", + "по в", + "Ġ θ", + "ĠÎ ¸", + "Û ·", + "Ġn ó", + "Ġd Ã¼ÅŁ", + "Ġdü ÅŁ", + "Ġt iế", + "Ġti ế", + "ÙĪ Ø¬", + "Ġj sem", + "Ġjs em", + "Ạ¡ng", + "ạ ng", + "ạn g", + "ãģĤ ãĤĭ", + "à¸Ń à¸ļ", + "ÙĪ ÙĬ", + "à¤ķ र", + "Ġ де", + "Ġд е", + "¯ ¼", + "Ġ но", + "Ġн о", + "ÑĨ Ñĸй", + "ÑĨÑĸ й", + "Ïĥ ÏĦ", + "к ие", + "ки е", + "Ïĥ ει", + "Ïĥε ι", + "ìķ Ī", + "Ġh Æ¡n", + "Ġà¤ķ ह", + "ا ض", + "Ø§Ø ¶", + "ì ¸", + "ãĥ Ł", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ãĤĪ ãģĨ", + "ा ,", + "е ÑĢи", + "еÑĢ Ð¸", + "ë© °", + "í ĶĦ", + "íĶ Ħ", + "Ġп оÑģÑĤ", + "Ġпо ÑģÑĤ", + "ĠпоÑģ ÑĤ", + "Ø® ر", + "à¥ĭ त", + "â u", + "к ой", + "ко й", + "d aki", + "da ki", + "í ħ", + ": :::::::::::::::", + ":: ::::::::::::::", + ":::: ::::::::::::", + ":::::: ::::::::::", + ":::::::: ::::::::", + "::: :::::::::::::", + "::::: :::::::::::", + "::::::: :::::::::", + "::::::::: :::::::", + ":::::::::: ::::::", + "::::::::::: :::::", + ":::::::::::: ::::", + "::::::::::::: :::", + ":::::::::::::: ::", + "::::::::::::::: :", + "Ġ öz", + "Ġö z", + "ÑĢ Ð°Ð¶", + "ÑĢаР¶", + "ÑĢа ж", + "nÃŃ ho", + "ห ล", + "Ġ ÏĥÏĦη", + "ĠÏĥ ÏĦη", + "ĠÄij á»ģ", + "ĠÄijá» ģ", + "Ġk á»", + "i á»ĥn", + "iá» ĥn", + "iá»ĥ n", + "ÅĻ i", + "Ġkter é", + "¢ ħ", + "ü ç", + "ÙĬ Ùģ", + "Ġ lý", + "Ġl ý", + "Ġth á»Ŀi", + "Ġthá» Ŀi", + "Ġthá»Ŀ i", + "Ġ ìĨĮ", + "ĠìĨ Į", + "н ÑĮ", + "Ð Ĩ", + "ÑĤ ÑĢ", + "à¸ĩ าà¸Ļ", + "к оÑĹ", + "ко ÑĹ", + "μ ο", + "Ġs ür", + "Ġsü r", + "uy á»ģn", + "uyá» ģn", + "Ġ Ùħا", + "ĠÙħ ا", + "à¤Ĥ à¤Ĺ", + "ĠÄij á»ĵng", + "ĠÄijá»ĵ ng", + "ò n", + "à¥ģ ल", + "à¥ģठ²", + "à¥į प", + "à¥įठª", + "λ η", + "Ùħ ر", + "п ÑĢи", + "пÑĢ Ð¸", + "i yle", + "iy le", + "ा प", + "ाठª", + "Ġà¤ħ न", + "Ġ ÑĶ", + "ĠÑ Ķ", + "Ġy ön", + "Ġyö n", + "ÙĦ Ùģ", + "a dır", + "ad ır", + "adı r", + "á ½", + "Ġ ê³ł", + "Ġê³ ł", + "Ø® ص", + "im iz", + "imi z", + "åľ ĭ", + "Ġ над", + "Ġн ад", + "Ġна д", + "Ġ ÅĻ", + "ĠÅ Ļ", + "н оÑģÑĤÑĸ", + "но ÑģÑĤÑĸ", + "ноÑģÑĤ Ñĸ", + "ноÑģ ÑĤÑĸ", + "Ġ اÙģ", + "Ġا Ùģ", + "а нÑĸ", + "ан Ñĸ", + "à¥ĩ à¤Ł", + "à¥ĩठŁ", + "Ġ ë§IJ", + "Ġë§ IJ", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġ ìĬ¤", + "ĠìĬ ¤", + "ิ à¸ķ", + "å Ħ", + "ÛĮ Ùĩ", + "о ÑĪ", + "ž it", + "ži t", + "ìĭ ¤", + "à¥Ģ न", + "Ġ î", + "æ¥ Ń", + "à¥ĩ न", + "à¥ĩठ¨", + "Ġ ذ", + "ĠØ °", + "Ġl oại", + "Ġlo ại", + "à¹Ħ à¸Ľ", + "Ñĸ к", + "Ġ кÑĢа", + "Ġк ÑĢа", + "à¥ĭ र", + "ุ à¸Ķ", + "ĠاÙĦ ر", + "ĠÑģ об", + "ĠÑģо б", + "า à¸Ĭ", + "าภĬ", + "Ġसà¤ķ त", + "Ġ ÎĿ", + "ĠÎ Ŀ", + "ا ÙħÙĩ", + "اÙħ Ùĩ", + "à¹ī าà¸Ļ", + "à¹īา à¸Ļ", + "Ġtr ình", + "Ġtrì nh", + "Ġ اÙĦÙģ", + "Ġا ÙĦÙģ", + "ĠاÙĦ Ùģ", + "Ġ اÙĦد", + "ĠاÙĦ د", + "u nun", + "un un", + "unu n", + "о ÑĤов", + "оÑĤ ов", + "оÑĤо в", + "ư ợ", + "ưỠŁ", + "ĠÑģ во", + "ĠÑģв о", + "ί αÏĤ", + "ία ÏĤ", + "ấ n", + "ог да", + "à¸Ĺ ย", + "Ġb yl", + "Ġby l", + "ØŃ د", + "à¸ģ ล", + "ب Ùĩ", + "Ġ vÄĽ", + "Ġv ÄĽ", + "è¢ «", + "Ġ Ø¢Ùħ", + "ĠØ¢ Ùħ", + "ĠÄij iá»ģu", + "å ¨", + "Ġk dy", + "Ġkd y", + "Ġ بÙĪ", + "Ġب ÙĪ", + "ẫ n", + "ìľ ł", + "ा à¤ķ", + "ाठķ", + "k ů", + "Ġtr ưá»Ŀng", + "ic ké", + "ick é", + "н иÑı", + "ни Ñı", + "Ġ ÏĢοÏħ", + "ĠÏĢ Î¿Ïħ", + "ĠÏĢο Ïħ", + "Æ°á»Ł ng", + "н омÑĥ", + "но мÑĥ", + "ном Ñĥ", + "à¹Ī à¸Ļ", + "ู à¹Ī", + "Ġk ết", + "Ġkế t", + "Ġ ï¼¼", + "Ġï¼ ¼", + "Ġ ìĭł", + "Ġìĭ ł", + "i ç", + "Ġn Äĥng", + "ĠnÄĥ ng", + "Äį ÃŃ", + "ÑĤ Ñı", + "ÑĢ ÐµÐ±", + "ÑĢе б", + "Ùĭ ا", + "Ú¯ ÛĮ", + "ãĥ İ", + "Ġkar ÅŁ", + "в Ñĸ", + "Ġph ần", + "à¸Ī ะ", + "ắ t", + "ر Ø©", + "ิ à¸ĩ", + "ิ à¹Ī", + "ा à¤Ī", + "ाठĪ", + "า à¸ŀ", + "าภŀ", + "ÙĨ ÛĮ", + "ìĹ °", + "b ÄĽ", + "Ġ اÙĦص", + "ĠاÙĦ ص", + "í Ĺ", + "Ġ سر", + "Ġس ر", + "l ara", + "la ra", + "lar a", + "ëĭ ¨", + "Ġ ÙĤر", + "ĠÙĤ ر", + "è İ", + "ب د", + "Ġй ого", + "à¥į ह", + "à¥įठ¹", + "Ġc ách", + "Ġcá ch", + "Ġcác h", + "íķĺ ê³ł", + "Ġ ÏĢÏģο", + "ĠÏĢ Ïģο", + "Ġ تع", + "Ġت ع", + "Ĵ Ī", + "Ġ вод", + "Ġв од", + "Ġво д", + "ç¥ ŀ", + "к им", + "ки м", + "Ġd á»±", + "à¹Ģ ห", + "à¹Ģภ«", + "а на", + "ан а", + "Ġ ï½", + "Ġï ½", + "Ġb aÄŁ", + "Ġba ÄŁ", + "Ġप ह", + "Ġ cao", + "Ġc ao", + "Ġca o", + "Ïģ ÏĮ", + "ÙĨ ج", + "ा à¤ı", + "ाठı", + "Ġ å¹´", + "Ġå¹ ´", + "Ġngh iá»ĩp", + "Ġnghiá»ĩ p", + "Û² Û°", + "к аÑı", + "ка Ñı", + "Ïģ ί", + "Ġ бол", + "Ġб ол", + "Ġбо л", + "Ġgi á", + "Ġ зд", + "Ġз д", + "à¥ĩ ल", + "à¥ĩठ²", + "Ġc ấp", + "à¹Ģ ส", + "à¹Ģภª", + "Ïģ γ", + "Ġ ìĤ", + "Ġì Ĥ", + "d ÄĽ", + "à¥ģ न", + "à¥ģठ¨", + "ì Ī", + "ı lan", + "ıl an", + "л аÑģ", + "ла Ñģ", + "Ġ ว", + "Ġภ§", + "Ġ Ïĥε", + "ĠÏĥ ε", + "Ġ Ø«", + "ĠØ «", + "Ġ Ц", + "ĠÐ ¦", + "çĤ º", + "Ġb üy", + "Ġbü y", + "е ÑĨ", + "å¤ ª", + "Ġब न", + "о гÑĢа", + "ог ÑĢа", + "Ġп ÑĢоÑĤ", + "ĠпÑĢ Ð¾ÑĤ", + "ĠпÑĢо ÑĤ", + "Ġl ượng", + "Ġd ön", + "Ġdö n", + "ร à¸ĩ", + "а ло", + "ал о", + "Ġ جÙħ", + "Ġج Ùħ", + "à¥Ī ,", + "Ġ 미", + "Ġë ¯¸", + "Ġ ê¹", + "Ġê ¹", + "ÙĪ Øª", + "à¥Ģ य", + "à¸Ī าà¸ģ", + "Ġch ất", + "Î ©", + "Ġkh ác", + "Ġkhá c", + "Ġth áng", + "j Å¡ÃŃ", + "ĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł", + "ĠÂłĠÂłĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂł", + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł ĠÂłĠÂł", + "á»ij t", + "ห ร", + "Ñĸ л", + "åħ ī", + "å Ĥ", + "ÙĦ Ø©", + "Ġ ê±°", + "Ġê± °", + "о воÑĢ", + "ов оÑĢ", + "ово ÑĢ", + "iá»ĥ u", + "Ġ меÑĤ", + "Ġм еÑĤ", + "а ÑĶ", + "Ġ ÑĩаÑģ", + "ĠÑĩ аÑģ", + "ĠÑĩа Ñģ", + "Ïģ ε", + "ì¹ ´", + "âĢĮ Ø´", + "ë¬ ¼", + "ú c", + "âĢĮ Ùĩا", + "i á»ģn", + "iá» ģn", + "iá»ģ n", + "st av", + "sta v", + "í ŀ", + "ĠÙĨ ظ", + "Ĩ Ĵ", + "Ġ ÏĦα", + "ĠÏĦ α", + "Ġ заб", + "Ġз аб", + "Ġза б", + "Ùĥ Ø©", + "Ġг ÑĢÑĥ", + "ĠгÑĢ Ñĥ", + "в о", + "Ġ Ùħج", + "ĠÙħ ج", + "Ġ sah", + "Ġs ah", + "Ġsa h", + "ب ÙĦ", + "ع Ø©", + "Ñĥ ÑĪ", + "ĠÑĤ ем", + "ĠÑĤе м", + "í ĭ", + "e ck", + "ec k", + "Ïī ÏĤ", + "ÙĬ ت", + "ìĹ Ī", + "ç ĭ", + "ذ ا", + "ì łĢ", + "ìł Ģ", + "Ġн аÑģ", + "Ġна Ñģ", + "Ġ поÑĩ", + "Ġп оÑĩ", + "Ġпо Ñĩ", + "æł ¡", + "Ï Ī", + "Ñģ кой", + "Ñģк ой", + "Ñģко й", + "ü c", + "ÙĤ ÙĦ", + "Ġп оз", + "Ġпо з", + "Ġ оÑģоб", + "ĠоÑģ об", + "า ล", + "าภ¥", + "н Ñĭми", + "нÑĭ ми", + "нÑĭм и", + "о лод", + "ол од", + "оло д", + "è ¼", + "Ġ دÛĮ", + "Ġد ÛĮ", + "Ġ ÑĥÑģÑĤ", + "ĠÑĥ ÑģÑĤ", + "ĠÑĥÑģ ÑĤ", + "Ġ 무", + "Ġë ¬´", + "Ġë¬ ´", + "ÙĬ س", + "ë° ©", + "à¥į à¤ļ", + "à¥įठļ", + "и ла", + "ил а", + "Ġn ên", + "н ие", + "ни е", + "ι ν", + "lar ını", + "ların ı", + "à¹Ģ à¸Ļ", + "à¹ĢภĻ", + "ÙĨ ت", + "a ģı", + "aÄŁ ı", + "ım ız", + "ımı z", + "ĠاÙĦ Ø®", + "à¹Ģ ว", + "à¹Ģภ§", + "à¥į न", + "à¥įठ¨", + "Ġ Ïħ", + "ĠÏ ħ", + "Ġ íĨ", + "Ġí Ĩ", + "Ạ»", + "ิ à¹Ĥ", + "α ÏĤ", + "м еÑĤ", + "ме ÑĤ", + "Ġ zp", + "Ġz p", + "Ġje ho", + "ี ยà¸Ļ", + "ีย à¸Ļ", + "ÑĦ оÑĢ", + "ın ız", + "ını z", + "k lad", + "kl ad", + "kla d", + "íĮ Į", + "uy á»ĩ", + "uyá» ĩ", + "ι ά", + "Ġ ãĢģ", + "ĠãĢ ģ", + "Ø´ ر", + "æ© Ł", + "Ġ تا", + "Ġت ا", + "Ġ зна", + "Ġз на", + "Ġзн а", + "س تاÙĨ", + "ست اÙĨ", + "à¥ĩ र", + "à¥ĩठ°", + "ë§ ¤", + "ç ĥ", + "Ġ же", + "Ġж е", + "า à¸Ķ", + "าภĶ", + "Ġ ض", + "ĠØ ¶", + "é Ń", + "Ġн аз", + "Ġна з", + "Ġ ÛĮا", + "ĠÛĮ ا", + "e né", + "en é", + "ั ย", + "íĸ Īëĭ¤", + "íĸĪ ëĭ¤", + "Ġ بد", + "Ġب د", + "à¥ģ à¤ķ", + "à¥ģठķ", + "ÑĤ ов", + "ÑĤо в", + "ì° ¨", + "Ùĩ د", + "à¸Ķ ย", + "Ġho ặc", + "Ġ ÐŁÑĢи", + "ĠÐŁ ÑĢи", + "ĠÐŁÑĢ Ð¸", + "ÙĨ ا", + "çİ ĭ", + "Ñĥ ваÑĤи", + "Ñĥв аÑĤи", + "Ñĥва ÑĤи", + "à¸ļ ร", + "Ġà¤ķ रत", + "Ġà¤ķर त", + "Ïĥ ηÏĤ", + "Ïĥη ÏĤ", + "Ø ¤", + "éķ ·", + "åħ ĭ", + "Ġ دار", + "Ġد ار", + "ั à¹Ī", + "Æ¡ i", + "า à¸Ī", + "าภĪ", + "ý mi", + "ým i", + "ấ u", + "Ġد ست", + "Ġدس ت", + "k em", + "ke m", + "Ġ оÑģнов", + "ĠоÑģ нов", + "ëª ¨", + "Ïģ ά", + "æ ħ", + "Ġ اب", + "Ġا ب", + "ĠØ§Ø ¨", + "å£ «", + "Ħ ĸ", + "Î Ķ", + "ÙĬ Ùĥ", + "í İ", + "Ġy üz", + "a dı", + "ad ı", + "า à¸ķ", + "าภķ", + "ä» Ģ", + "ìĿ´ ëĭ¤", + "Ġ zv", + "Ġz v", + "Ġ tÄĽ", + "Ġt ÄĽ", + "Ġ íĸ", + "Ġí ĸ", + "ठ¥", + "Ġ लà¤Ĺ", + "Ġल à¤Ĺ", + "ìĺ Ģ", + "Ġ ан", + "Ġа н", + "ç Ĺ", + "ìĹ Ń", + "н ÑĸÑģÑĤÑĮ", + "нÑĸ ÑģÑĤÑĮ", + "нÑĸÑģÑĤ ÑĮ", + "Å ŀ", + "Ġph át", + "Ġphá t", + "ÙĤ Ø©", + "Ġth ế", + "Ġ ï¾", + "Ġï ¾", + "ì² ľ", + "Ġ ìĦł", + "ĠìĦ ł", + "à¹ĥ à¸Ĭ", + "i êu", + "iê u", + "ÄŁ ini", + "ÄŁi ni", + "ÄŁin i", + "ÙĤ د", + "Ġkter ý", + "Ñģ кий", + "Ñģк ий", + "Ñģки й", + "à¥į ड", + "à¥įठ¡", + "t adır", + "ta dır", + "Ġ Ñģм", + "ĠÑģ м", + "ÙĪ Ùģ", + "ا رÙĬ", + "ار ÙĬ", + "å¾ ·", + "ิ ม", + "Ø® ت", + "å¾ Ī", + "Ġ гоÑĢ", + "Ġг оÑĢ", + "ï¼Į æĪij", + "Ġ ìĺģ", + "Ġìĺ ģ", + "Ġ ëıĻ", + "Ġëı Ļ", + "Ñģ а", + "à¹Ģ à¸Ħ", + "à¹ĢภĦ", + "ë ¯¼", + "ë¯ ¼", + "ึ à¹Ī", + "Ġl iên", + "Ġli ên", + "Ġ Ùĩا", + "ĠÙĩ ا", + "ler ini", + "leri ni", + "lerin i", + "Ġ ÑĨе", + "ĠÑĨ е", + "ا ÙĦÛĮ", + "اÙĦ ÛĮ", + "Ġ मह", + "Ġम ह", + "Ġv ụ", + "Ġvá» ¥", + "Ġxu ất", + "ิ à¸ģ", + "ĠпÑĢо ÑĨ", + "Ġ αν", + "Ġα ν", + "ÑĢ Ð¸Ð¼", + "ÑĢи м", + "Ġc ần", + "Ġ иÑħ", + "Ġи Ñħ", + "н оÑİ", + "но Ñİ", + "Ġt ÃŃnh", + "ĠtÃŃ nh", + "ĠtÃŃn h", + "Ġb á»Ļ", + "Ñĸ м", + "Ġnh áºŃn", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ÙĬ Ùĩ", + "äº ļ", + "Ġоб ла", + "Ġобл а", + "Ġ à¤ĺ", + "Ġठĺ", + "n ých", + "ný ch", + "æĿ ij", + "ÙĦ س", + "Ġне об", + "ا بة", + "اب Ø©", + "v á", + "ο Ïħν", + "οÏħ ν", + "ÑĢ ÐµÑĤ", + "ÑĢе ÑĤ", + "a sında", + "as ında", + "ası nda", + "Ġ yar", + "Ġy ar", + "Ġya r", + "ĠÄij iá»ĥm", + "ĠÄiji á»ĥm", + "н Ñİ", + "ा à¤Ĺ", + "ाठĹ", + "Ġ Ú©Ø´", + "ĠÚ© Ø´", + "Ñĥ з", + "Ġ à¸Ķ", + "ĠภĶ", + "ả m", + "к ами", + "ка ми", + "кам и", + "Ġ ÎĻ", + "ĠÎ Ļ", + "à¹Ģ à¸ķ", + "à¹Ģภķ", + "Ġl Ỽ", + "Ġlá» Ľ", + "ÙĤ ÛĮ", + "k ou", + "ko u", + "ÙĦ ب", + "и ва", + "ив а", + "æ ĵ", + "Ạ¹", + "κ α", + "ë² ķ", + "èĤ ²", + "á»ij n", + "Ġbel ir", + "íĨ ł", + "ÏĦ ή", + "Ñĭ ÑĪ", + "ãĤ ĥ", + "Ġ або", + "Ġа бо", + "Ġаб о", + "s ký", + "sk ý", + "à¥Ī स", + "Ġп ÑĢоÑģÑĤ", + "ĠпÑĢ Ð¾ÑģÑĤ", + "ĠпÑĢо ÑģÑĤ", + "ĠпÑĢоÑģ ÑĤ", + "ekt edir", + "ekte dir", + "a ž", + "à¹Ī à¸Ń", + "Ġ оÑģÑĤ", + "Ġо ÑģÑĤ", + "ĠоÑģ ÑĤ", + "Ġb ảo", + "Ġ 大", + "Ġå¤ §", + "Ñĭ м", + "Ġm ů", + "Æ°á»Ľ ng", + "åı Ĺ", + "ÙĪ Ùĩ", + "Ġ Ñĥп", + "ĠÑĥ п", + "Ùĥ ÙĨ", + "Ġ ÏĦÏīν", + "ĠÏĦ Ïīν", + "ëħ ¸", + "Ġ à¸Ĭ", + "ĠภĬ", + "Ġ ÑĤого", + "ĠÑĤ ого", + "ĠÑĤо го", + "Ġ Ш", + "ĠÐ ¨", + "ìĿ´ íĬ¸", + "à¹Ģ à¸Ń", + "à¹ĢภŃ", + "и нÑĥ", + "ин Ñĥ", + "ĺ ħ", + "uy á»ĥn", + "uyá» ĥn", + "í ĴĪ", + "íĴ Ī", + "ạ nh", + "ạn h", + "Ġ ãĥ½", + "Ġãĥ ½", + "ÑĤ обÑĭ", + "ÑĤо бÑĭ", + "Ġt ạo", + "å· Ŀ", + "ĠÄij á»iji", + "Ġ ëıĦ", + "Ġëı Ħ", + "ä¹ ħ", + "Ġ تÙħ", + "Ġت Ùħ", + "а ÑĢи", + "аÑĢ Ð¸", + "st vÃŃ", + "Ġc ùng", + "íŀ Ī", + "Ġt arih", + "Ġtar ih", + "ì ¤ij", + "ì¤ ij", + "í Ĥ", + "Ġ دÙĪ", + "Ġد ÙĪ", + "ì ¡", + "а лÑĸ", + "ал Ñĸ", + "ภIJ", + "Ġc òn", + "и ÑĤÑĮÑģÑı", + "иÑĤÑĮ ÑģÑı", + "Ġव ह", + "ÅĻ eb", + "ÅĻe b", + "éĽ »", + "Ġ ми", + "Ġм и", + "o vÄĽ", + "ov ÄĽ", + "Ġd ân", + "ÑĨ ÑĸÑı", + "ÑĨÑĸ Ñı", + "ÛĮ ست", + "ÛĮس ت", + "åŃ ¸", + "Ġ ür", + "Ġü r", + "ص ÙĦ", + "ÑĢ Ð¸ÑĤ", + "ÑĢи ÑĤ", + "า ห", + "าภ«", + "ãģ¦ ãģĦãģŁ", + "ãģ¦ãģĦ ãģŁ", + "θ η", + "ç ĸ", + "Ø Ł", + "i ÅŁtir", + "iÅŁ tir", + "iÅŁti r", + "ĠУкÑĢаÑĹ Ð½Ð¸", + "ĠУкÑĢаÑĹн и", + "ë° ĺ", + "à¥ĩ à¤ĸ", + "à¥ĩठĸ", + "Ġv á»ĭ", + "Ġvá» ĭ", + "Î ¥", + "Ġ ãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠ ãĢĢĠãĢĢ", + "Ġb ằng", + "Ġt á»ķ", + "Ġtá» ķ", + "о ли", + "ол и", + "๠Ĩ", + "e zi", + "ez i", + "Ġ ни", + "Ġн и", + "Ġ ÎĽ", + "ĠÎ Ľ", + "Ġr ất", + "μ ÏĢ", + "ж д", + "ा रत", + "ार त", + "Ġu ž", + "à¥ĩ स", + "à¥ĩठ¸", + "ا ÙĨد", + "اÙĨ د", + "Ġb ý", + "à¥ĭ ल", + "d ÄĽl", + "dÄĽ l", + "ìķ ĺ", + "Ġ جد", + "Ġج د", + "å ³", + "ื à¹ī", + "Ġb ản", + "ạ ch", + "ạc h", + "ĠÅŁ ey", + "Ġ Ùĩر", + "ĠÙĩ ر", + "Ġ jen", + "Ġj en", + "Ġje n", + "Ġв Ñĸн", + "ĠвÑĸ н", + "es inde", + "esi nde", + "esin de", + "Ġ हम", + "Ġह म", + "çł Ķ", + "à¸ļ à¸ļ", + "Ġch ức", + "Ġchứ c", + "ึ à¸ĩ", + "m alar", + "ma lar", + "mal ar", + "ĠdeÄŁ il", + "æĿ ±", + "Ġt ác", + "Ġtá c", + "Ġk iÅŁ", + "Ġki ÅŁ", + "Ġt á»±", + "Ġtá» ±", + "à¥į ध", + "à¥įठ§", + "à¸Ļ à¸Ĺ", + "ÎŁ Î¥", + "ÎŁÎ ¥", + "ÑģÑĮ кого", + "ÑģÑĮк ого", + "ÑģÑĮко го", + "Ġ ध", + "Ġठ§", + "Ġ ìĿĺ", + "ĠìĿ ĺ", + "ÙĨ Ø©", + "ü s", + "è «", + "Ġtaraf ından", + "ħ n", + "Ġk inh", + "Ġki nh", + "Ġkin h", + "Ïĥ ι", + "à¥Ģ à¤ķ", + "íı ¬", + "ا ÙħÙĦ", + "اÙħ ÙĦ", + "ĠV iá»ĩt", + "Ġ ÏĦον", + "ĠÏĦ ον", + "ĠÏĦο ν", + "Ġ تÙĨ", + "Ġت ÙĨ", + "Ġà¤ħ ध", + "à¹Ī าà¸Ļ", + "à¹Īา à¸Ļ", + "r ı", + "à¤Ĥ द", + "é ª", + "Ġch úng", + "Ġchú ng", + "г и", + "ÏĦ αν", + "ÏĦα ν", + "Ġд оп", + "Ġдо п", + "н Ñĸй", + "нÑĸ й", + "он алÑĮ", + "она лÑĮ", + "Î ĵ", + "Ġb üyük", + "Ġbü yük", + "Ġbüy ük", + "á ¼", + "à¥Ģ र", + "ذ Ùĩ", + "Ġ ìķĦìĿ´", + "ĠìķĦ ìĿ´", + "Ġdo anh", + "Ġ ÅĻÃŃ", + "ĠÅĻ ÃŃ", + "ÑĨ Ñı", + "Ġt ư", + "Ġ सर", + "Ġस र", + "Ġm ÃŃst", + "ĠmÃŃ st", + "Ġë° ı", + "Ø´ ÙĨ", + "Ñĸ б", + "Ġ ãĢĢãĢĢ", + "ĠãĢĢ ãĢĢ", + "çĻ ½", + "о Ñģп", + "оÑģ п", + "к Ñĸв", + "кÑĸ в", + "Ġt ế", + "ãģ Ń", + "Ġt Ỽi", + "Ġtá» Ľi", + "Ġ ìļ°", + "Ġìļ °", + "æľ ĥ", + "ا ÛĮد", + "اÛĮ د", + "æ §", + "ìł IJ", + "Ġd urum", + "Ġdu rum", + "Ġdur um", + "à¹Ģ à¸Ĭ", + "à¹ĢภĬ", + "à¥Ģ त", + "ĠÙĩ ÙĪ", + "à¥Ĥ प", + "Ġgö re", + "Ġgör e", + "Ġ ÑĢоб", + "ĠÑĢ Ð¾Ð±", + "Ġth iết", + "Ġthi ết", + "a jÃŃ", + "aj ÃŃ", + "ĠاÛĮ راÙĨ", + "âĢ ı", + "ÑģÑĮ коÑĹ", + "ÑģÑĮк оÑĹ", + "ÑģÑĮко ÑĹ", + "ç ħ", + "Ġ ìĦ¸", + "ĠìĦ ¸", + "á» «", + "Ġ à¸Ĥ", + "ĠภĤ", + "ů m", + "ëŀ Į", + "ι κή", + "ικ ή", + "Ġм ог", + "Ġмо г", + "ÙĨ ÙĬ", + "ãģ ļ", + "ा ब", + "ाठ¬", + "æ ¢", + "ع Ùĩ", + "ÑĶ Ð¼", + "Ġ ά", + "ĠÎ ¬", + "οÏħ ÏĤ", + "ز ار", + "زا ر", + "ê± ´", + "s ká", + "sk á", + "Ġ اÙĬ", + "Ġا ÙĬ", + "Ġi lg", + "Ġil g", + "Ġ sı", + "Ġs ı", + "e leri", + "el eri", + "eler i", + "ele ri", + "Ġ ÎĹ", + "ĠÎ Ĺ", + "u yor", + "uy or", + "uyo r", + "ठ·", + "ि म", + "िठ®", + "е ва", + "ев а", + "ä»Ģ ä¹Ī", + "ุ à¹Ī", + "à¹ī าà¸ĩ", + "à¹īา à¸ĩ", + "Ġh iá»ĩu", + "Ġhi á»ĩu", + "Ġ اع", + "Ġا ع", + "ĠØ§Ø ¹", + "Ġö zel", + "Ġöz el", + "ν η", + "ëĦ ¤", + "Ġto Ãłn", + "Ġm oh", + "Ġmo h", + "ĠÑı кÑĸ", + "ĠÑıк Ñĸ", + "ç Ĭ", + "mak tadır", + "makta dır", + "makt adır", + "ت اب", + "تا ب", + "Ġ ÑģÑĥ", + "ĠÑģ Ñĥ", + "Ġ yük", + "Ġy ük", + "Ġ Χ", + "ĠÎ §", + "з на", + "зн а", + "о Ñħ", + "ư u", + "à¸Ĺ ร", + "ãħ ĭ", + "Ġkar ÅŁÄ±", + "ĠkarÅŁ ı", + "Ùħ ÛĮ", + "Ġ ÑĨÑĸ", + "ĠÑĨ Ñĸ", + "ا دÛĮ", + "اد ÛĮ", + "à¥Ģ ।", + "Ïģ η", + "л ов", + "ло в", + "å¤ «", + "Ġph ân", + "Ġп оп", + "Ġпо п", + "ç· ļ", + "Ñı н", + "ุ à¸ĵ", + "ÑģÑĤ Ñĥп", + "ίν αι", + "ίνα ι", + "ĠÑĢ Ð¾ÐºÑĥ", + "ĠÑĢок Ñĥ", + "l arda", + "lar da", + "è» Ĭ", + "Ïģ Ïī", + "ÙĪ Ø§Ùĩ", + "ÙĪØ§ Ùĩ", + "è ħ", + "à¥į रत", + "à¥įर त", + "å· ±", + "Ġ ÑĢÑĥ", + "ĠÑĢ Ñĥ", + "Ġth á»ĭ", + "Ġthá» ĭ", + "ĠÄij iá»ĩn", + "ĠÄiji á»ĩn", + "ìĸ ij", + "n ého", + "né ho", + "ส ม", + "ê° ģ", + "a cÃŃ", + "ac ÃŃ", + "Ġг ода", + "Ġгод а", + "k az", + "ka z", + "Ġb öl", + "Ġbö l", + "Ġg ian", + "Ġgi an", + "Ġgia n", + "à¸Ľ ร", + "ï¾ ŀ", + "ั à¸ķ", + "Ġg erç", + "Ġger ç", + "Ġ اج", + "Ġا ج", + "ĠØ§Ø ¬", + "Ġ ή", + "ĠÎ ®", + "Ùij Ùİ", + "Ñģ кого", + "Ñģк ого", + "Ñģко го", + "ÑĢ Ð°Ñħ", + "ÑĢа Ñħ", + "Ġ Åł", + "ĠÅ ł", + "Ġ à¤Ľ", + "ĠठĽ", + "о ÑģÑĤÑĸ", + "оÑģ ÑĤÑĸ", + "оÑģÑĤ Ñĸ", + "ë³ ¸", + "ÑģÑĮ кий", + "ÑģÑĮк ий", + "Û± Û¹", + "Û±Û ¹", + "Ñĥ ва", + "Ñĥв а", + "ا ÙĦÙħ", + "اÙĦ Ùħ", + "ĠÙħ ص", + "ëį ĺ", + "b ÃŃ", + "Ġ ÙĪØ¬", + "ĠÙĪ Ø¬", + "ÏĦ ÏĮ", + "e bilir", + "eb ilir", + "Ġt iếp", + "Ġti ếp", + "Ġtiế p", + "é ¤", + "Ġ ä¸Ģ", + "Ġä¸ Ģ", + "ĠÑģ ÑĢед", + "ë Ĥ¨", + "ëĤ ¨", + "ε Ïģι", + "εÏģ ι", + "ا Ø«", + "Ø§Ø «", + "Ñģ ов", + "Ñģо в", + "Ïĩ ε", + "Ġ ë¶Ħ", + "Ġë¶ Ħ", + "Ġta ké", + "Ġtak é", + "Ġd üz", + "Ġdü z", + "Ġ íıī", + "Ġíı ī", + "Ġ اص", + "Ġا ص", + "ĠØ§Ø µ", + "ĠÏĥ ÏĦην", + "ĠÏĥÏĦη ν", + "ë° Ķ", + "Ġh á»Ļi", + "Ġhá»Ļ i", + "ر Ùĩ", + "ب ÛĮ", + "в е", + "Ġا ÙĦØ·", + "ĠاÙĦ Ø·", + "Ġ ÑĢез", + "ĠÑĢ ÐµÐ·", + "ĠÑĢе з", + "ب ار", + "با ر", + "Ġgi ải", + "Ġgiả i", + "ãģ« ãģª", + "ol eÄį", + "ole Äį", + "ठł", + "; :", + "ä½ ı", + "Ú© Ùĩ", + "Ġ Φ", + "ĠÎ ¦", + "Ġ ÑĥÑĩ", + "ĠÑĥ Ñĩ", + "âĹı âĹı", + "ู à¸ģ", + "à¥ĩ व", + "à¥ĩठµ", + "Ïĥ α", + "Ġ اÙĨت", + "Ġا ÙĨت", + "ĠاÙĨ ت", + "Ġв п", + "Ġqu ả", + "e nin", + "en in", + "eni n", + "Ġ êµIJ", + "Ġêµ IJ", + "μ ά", + "Ú© ت", + "ÙĤ Ùĩ", + "Ġ Türkiye", + "ĠTür kiye", + "ĠTürk iye", + "Ġth ức", + "Ġthứ c", + "íĹ ĺ", + "iá»ĩ m", + "Ġत à¤ķ", + "Ġ éĩ", + "Ġé ĩ", + "़ ा", + "ĠØ£ ÙĪ", + "á le", + "ál e", + "ç© ¶", + "ĠÅŁ ekil", + "ĠÅŁek il", + "к ого", + "ко го", + "ког о", + "ÑĪ Ð¸Ñħ", + "ÑĪи Ñħ", + "ا ÛĮØ´", + "اÛĮ Ø´", + "ت ÙĨ", + "н ей", + "не й", + "à¸Ĺ ำ", + "Ġ Ñıв", + "ĠÑı в", + "ر Ùħ", + "Ġm áy", + "Ġmá y", + "ห ม", + "ı yla", + "ıy la", + "Ġc ầu", + "Ġд об", + "Ġдо б", + "Ġ ìŀ¥", + "Ġìŀ ¥", + "o vý", + "ov ý", + "ι κÏĮ", + "ικ ÏĮ", + "Ġ ãħĩ", + "Ġãħ ĩ", + "Ġ ÑĤеÑĢ", + "ĠÑĤ еÑĢ", + "ĠÑĤе ÑĢ", + "Į Ĵ", + "س ÙĬ", + "Ġol uÅŁ", + "Ġb yla", + "Ġby la", + "Ġbyl a", + "ع ÙĦ", + "Ġ ÙĥاÙĨ", + "ĠÙĥ اÙĨ", + "б оÑĢ", + "бо ÑĢ", + "ì² Ń", + "ãĥ ı", + "u bl", + "ub l", + "Ġ اخ", + "Ġا Ø®", + "ĠØ§Ø ®", + "ÙĦ ÙĪØ¯", + "ÙĦÙĪ Ø¯", + "ت ÙĬ", + "l adı", + "la dı", + "lad ı", + "Ġ Ã¶ÄŁ", + "Ġö ÄŁ", + "r uh", + "ru h", + "ç ¿", + "Ġ بعد", + "Ġب عد", + "Ġبع د", + "ÎĻ Îij", + "i dir", + "id ir", + "idi r", + "ãģ« ãģ¯", + "Ġs öy", + "Ġsö y", + "Ġkh ách", + "Ġkhác h", + "Ġkhá ch", + "ÑĨ е", + "Ġ Ø´ÙĪØ¯", + "ĠØ´ ÙĪØ¯", + "ĠØ´ÙĪ Ø¯", + "ç ¸", + "Ġ ëħ¸", + "Ġëħ ¸", + "ú p", + "Ġn eden", + "Ġne den", + "Ġned en", + "Ġh óa", + "Ġà¤ī प", + "Ïĥ ειÏĤ", + "Ïĥει ÏĤ", + "æĪ ¿", + "Ġ ³³", + "ĠÂł Âł", + "Ġ ìķĮ", + "Ġì ķĮ", + "Ġìķ Į", + "à¥Ģ ,", + "´ ij", + "ê u", + "ÑĢ Ð¾Ðº", + "ÑĢо к", + "à¹Ģ à¸Ī", + "à¹ĢภĪ", + "Ġε ίναι", + "Ġ بÙĦ", + "Ġب ÙĦ", + "Ġ Ñģов", + "ĠÑģ ов", + "ĠÑģо в", + "Ġö nem", + "Ġön em", + "Ġöne m", + "Ġ à¸ĭ", + "Ġภĭ", + "ì§Ģ ë§Į", + "å® ĺ", + "ê² ©", + "ìĦ Ŀ", + "Ġ až", + "Ġa ž", + "Ġd uy", + "Ġdu y", + "ãģ¨ ãģĦ", + "Ø Ľ", + "δ ο", + "θ ε", + "Ùĥ اÙĨ", + "ठ¢", + "ा à¤ĵ", + "ाठĵ", + "Ġd á»ĭch", + "Ġdá»ĭ ch", + "á»Ļ ng", + "á»Ļn g", + "ส ำ", + "Ä ı", + "Ġ ÑĹÑħ", + "ĠÑĹ Ñħ", + "α λ", + "e Äį", + "ç² ¾", + "Ġ зв", + "Ġз в", + "èĩª å·±", + "Ġ اÙĦÙĦÙĩ", + "ĠاÙĦ ÙĦÙĩ", + "ĠاÙĦÙĦ Ùĩ", + "Ġ СÑĤ", + "ĠС ÑĤ", + "Ġ سÙĨÚ¯", + "Ġس ÙĨÚ¯", + "ĠسÙĨ Ú¯", + "Ġ дом", + "Ġд ом", + "Ġдо м", + "г оÑĤов", + "го ÑĤов", + "гоÑĤ ов", + "п овÑĸд", + "пов Ñĸд", + "по вÑĸд", + "Ġ Bá»Ļ", + "ĠB á»Ļ", + "à¥įय à¤ķ", + "Ø· Ø©", + "м ов", + "мо в", + "à¸Ĺ าà¸ĩ", + "ึ à¸ģ", + "Ġ Ñĸз", + "ĠÑĸ з", + "à¥ĭ à¤ľ", + "Ġgö ster", + "Ġ باشد", + "Ġبا شد", + "Ġباش د", + "i leri", + "il eri", + "ile ri", + "iler i", + "ĠÑģ еб", + "Ñī о", + "Ġãħĩ ãħĩ", + "ب ت", + "Ñģ е", + "à¥ĩ à¤ľ", + "à¥ĩठľ", + "Ġl ên", + "Ġ تÙĪ", + "Ġت ÙĪ", + "Ñĸ ÑģÑĤÑĮ", + "ÑĸÑģ ÑĤÑĮ", + "ÑĸÑģÑĤ ÑĮ", + "ï¾Ĩ ï¾Ĩ", + "Ġth ưá»Ŀng", + "Ġol duÄŁu", + "Ġoldu ÄŁu", + "ĠolduÄŁ u", + "v ÄĽt", + "vÄĽ t", + "ìĨ į", + "ãģĿ ãģĨ", + "Ġ ìĦ±", + "ĠìĦ ±", + "ë° ľ", + "Ġ à¸ģาร", + "Ġà¸ģ าร", + "Ġ Ø´Ùĩر", + "ĠØ´ Ùĩر", + "ĠØ´Ùĩ ر", + "s led", + "sl ed", + "ả nh", + "ản h", + "æŀ Ĺ", + "l acak", + "la cak", + "lac ak", + "Ġm ình", + "Ú© ÛĮ", + "Ġ à¹ĥà¸Ļ", + "Ġd ùng", + "Ġdù ng", + "Ġм аÑģ", + "Ġма Ñģ", + "ÑĦ ек", + "æ° Ķ", + "é §", + "Ġ اØŃ", + "Ġا ØŃ", + "ĠØ§Ø Ń", + "èµ °", + "ÎĻ Îļ", + "à¥ĩ ।", + "ÑģÑĮ ка", + "ÑģÑĮк а", + "Ġ ÑĩаÑģÑĤ", + "ĠÑĩ аÑģÑĤ", + "ĠÑĩа ÑģÑĤ", + "ĠÑĩаÑģ ÑĤ", + "lar ının", + "ların ın", + "larını n", + "Ġ ê¹Ģ", + "Ġê¹ Ģ", + "ì¸ µ", + "н ими", + "ни ми", + "ним и", + "èª ŀ", + "åĢ ĭ", + "Ġ êµŃ", + "Ġêµ Ń", + "к оÑĢ", + "ко ÑĢ", + "m aya", + "ma ya", + "may a", + "ิ à¹Ĥà¸Ļ", + "ิà¹Ĥ à¸Ļ", + ". ศ", + "Ġh á»ĩ", + "Ġhá» ĩ", + "Ġ تÙĤ", + "Ġت ÙĤ", + "γ κ", + "Ġà¤Ĩप à¤ķ", + "Ñģ ÑĤоÑĢ", + "ÑģÑĤ оÑĢ", + "ĠÄij o", + "Ġch á»§", + "ا ÛĮت", + "اÛĮ ت", + "ĠQu á»ijc", + "г лÑı", + "гл Ñı", + "ãĢĤ ãĢįĊĊ", + "ãĢĤãĢį ĊĊ", + "Ġn Ãło", + "à¸Ń ล", + "æĬ Ĭ", + "ÙĪ Ø±Øª", + "ÙĪØ± ت", + "Ġb ude", + "Ġbu de", + "Ġbud e", + "æĽ ¸", + "e lik", + "el ik", + "eli k", + "Ġ جÙĩ", + "Ġج Ùĩ", + "ĠبÙĪ Ø§Ø¨Ø©", + "èĬ ±", + "د ار", + "دا ر", + "Ġb ýt", + "Ġbý t", + "Ñĩ е", + "ãĤĵ ãģł", + "ĠÙħ Ø·", + "l ere", + "le re", + "ler e", + "ÎĹ Î£", + "íĺ ķ", + "âĸ į", + "ÄŁ u", + "Ġв з", + "ÙĬ ز", + "ĠÐł оÑģ", + "íĭ °", + "Ġد اش", + "ì§ ij", + "a tı", + "at ı", + "m esi", + "me si", + "mes i", + "ãĤī ãĤĮ", + "ů v", + "r át", + "rá t", + "оÑģ об", + "åIJ Ħ", + "uy á»ĩn", + "uyá»ĩ n", + "åģ ļ", + "ü st", + "üs t", + "éĩ İ", + "α Ïĥ", + "Ġm ặt", + "е лов", + "ел ов", + "ело в", + "åį ļ", + "д ж", + "Ġد ارد", + "Ġدار د", + "Ġf ark", + "Ġfa rk", + "Ġfar k", + "à¹ī วย", + "à¹īว ย", + "о ни", + "он и", + "Ġب Ø®", + "à¥ģ त", + "à¥ģठ¤", + "ĠÄij ây", + "α Ïģα", + "αÏģ α", + "Ġ δια", + "Ġδ ια", + "Ġδι α", + "Ġ è¯", + "Ġè ¯", + "к аÑħ", + "ка Ñħ", + "ch áz", + "z enÃŃ", + "ze nÃŃ", + "zen ÃŃ", + "ÑĢ Ð¾Ð¿", + "ÑĢо п", + "à¥Ģ म", + "í Ĩµ", + "íĨ µ", + "d ü", + "à¸ł าà¸ŀ", + "Ġ íĬ", + "Ġí Ĭ", + "ÙĪ Ø§", + "Ġt á»ijt", + "Ġtá»ij t", + "ï¼Ł ãĢįĊĊ", + "ï¼ŁãĢį ĊĊ", + "Ġ æľĪ", + "Ġnh ưng", + "Ġnhư ng", + "Ġne ž", + "à¥ĭ ड", + "ìĹIJ ê²Į", + "à¤Ĥ ड", + "¶ Į", + "Ġ меÑģÑĤ", + "Ġм еÑģÑĤ", + "ा à¤ģ", + "ाठģ", + "ì¦ Ŀ", + "ĠÄij ang", + "ĠÄija ng", + "à¸Ń à¸Ķ", + "í ĽĦ", + "á»į i", + "sk ého", + "ské ho", + "Ġд ок", + "Ġдо к", + "Ġ تص", + "Ġت ص", + "Ġph òng", + "Ġ ê°ķ", + "Ġê° ķ", + "Ġtr Æ°á»Ľc", + "í ijľ", + "Ù Ķ", + "Ġph ÃŃ", + "Ġch á»įn", + "ä¹ IJ", + "ĠÅŁek ilde", + "ĠÅŁekil de", + "Ġ íİ", + "Ġí İ", + "é º", + "ë £¨", + "ë£ ¨", + "à¥Ī ।Ċ", + "à¥Ī। Ċ", + "ÙĪ Ø±ÛĮ", + "ÙĪØ± ÛĮ", + "Ñģ ÑĤÑĢа", + "ÑģÑĤ ÑĢа", + "ÑģÑĤÑĢ Ð°", + "il di", + "ild i", + "Ġα Ïħ", + "в аннÑı", + "ван нÑı", + "ìļ ¸", + ". âĢľĊĊ", + ".âĢľ ĊĊ", + "ĠÑĤак же", + "ëĵ ±", + "е ка", + "ек а", + "æī į", + "Ùħ Ø©", + "Ġph ương", + "é© ¬", + "ãĢĢ ĠãĢĢ", + "ãĢĢĠ ãĢĢ", + "ov ých", + "ový ch", + "ี ยà¸ĩ", + "ีย à¸ĩ", + "ĠT ru", + "ĠTr u", + "е Ñģп", + "еÑģ п", + "st up", + "stu p", + "Ä Į", + "Ġdal Å¡ÃŃ", + "ز ÛĮ", + "Ġ 매", + "Ġë§ ¤", + "Ġ обÑĢаз", + "Ġоб ÑĢаз", + "ĠобÑĢа з", + "Ġaç ık", + "Ġaçı k", + "ê° ķ", + "Ùģ Ø§Ø¯Ùĩ", + "Ú¯ اÙĨ", + "à¹ī à¸Ļ", + "ẩ n", + "å·¥ ä½ľ", + "Ġ तर", + "Ġत र", + "ÙĬ ع", + "Ġ ãĢĬ", + "ĠãĢ Ĭ", + ", âĢľ", + "Ġ nev", + "Ġn ev", + "Ġne v", + "ั à¸į", + "ÄŁ ını", + "ģın ı", + "Ġ jin", + "Ġj in", + "Ġji n", + "ا خت", + "اخ ت", + "س ر", + "Ġt Ãłi", + "Ġkter á", + "Ġا ÙĦÙĦ", + "ĠاÙĦ ÙĦ", + "ठħ", + "iz met", + "izm et", + "à¥ģ म", + "à¥ģठ®", + "า ะ", + "าภ°", + "Ġ ê·", + "Ġê ·", + "l ıģı", + "lı ģı", + "lıģ ı", + "çı ¾", + "li ÄŁi", + "liÄŁ i", + "êµ °", + "a lık", + "al ık", + "alı k", + "Ġد ÙĪØ±", + "ĠدÙĪ Ø±", + "Ġ ìĭ¤", + "Ġìĭ ¤", + "Ġз аÑģ", + "Ġза Ñģ", + "ÙĤ ÙĬ", + "Ġ ứng", + "Ġ ÙĥÙĩ", + "ĠÙĥ Ùĩ", + "ÎŁ Σ", + "ÎŁÎ £", + "è¨ Ń", + "ç Į", + "ãģĦ ãģŁ", + "íĺ Ħ", + "Ġ ÑĤе", + "ĠÑĤ е", + "е ÑĢÑĸ", + "еÑĢ Ñĸ", + "s ız", + "sı z", + "Ġ ý", + "Ġà ½", + "д ов", + "до в", + "Ġ à¤ĩसà¤ķ", + "Ġà¤ĩस à¤ķ", + "г од", + "го д", + "Ġby lo", + "Ġbyl o", + "าà¸Ħ ม", + "е нием", + "ен ием", + "ени ем", + "ение м", + "Ð ¨", + "æľ ¯", + "Ġप हल", + "Ġपह ल", + "Ġ aÅŁ", + "Ġa ÅŁ", + "ि à¤ľ", + "िठľ", + "åĵ ¡", + "в аÑĢ", + "ва ÑĢ", + "à¹ī ำ", + "â ĮĴ", + "ov án", + "ová n", + "Ġgi úp", + "Ð ¥", + "ĠÑģ Ñĥд", + "ĠÑģÑĥ д", + "Ġà¤ķ म", + "ạ m", + "ر س", + "Ġ 人", + "Ġ بÛĮ", + "Ġب ÛĮ", + "Ġà¤īन à¤ķ", + "ë¦ ½", + "áºŃ y", + "Ġv áºŃt", + "л ÑıеÑĤÑģÑı", + "лÑı еÑĤÑģÑı", + "лÑıеÑĤ ÑģÑı", + "Ġs eç", + "Ġse ç", + "Ġ ì½", + "Ġì ½", + "ÑĢ Ñĥж", + "ÑĢÑĥ ж", + "ت ص", + "| :", + "Ġ ëł", + "Ġë ł", + "и ми", + "им и", + "Ġ лÑİб", + "ĠлÑİ Ð±", + "Ġ à¸ľ", + "Ġภľ", + "ï¼Į ä½Ĩ", + "Ġ нав", + "Ġн ав", + "Ġна в", + "âĢ ¬", + "à¹Ī าย", + "à¹Īา ย", + "Ġ رس", + "Ġر س", + "s iniz", + "sin iz", + "ë ¨", + "е ниÑİ", + "ен иÑİ", + "ени Ñİ", + "Ġ ล", + "Ġภ¥", + "ا سÛĮ", + "اس ÛĮ", + "ॠľ", + "ĠÙ¾ ÛĮØ´", + "ĠÙ¾ÛĮ Ø´", + "ί δ", + "Ġ Ù¾ÛĮ", + "ĠÙ¾ ÛĮ", + "еÑĢж ав", + "ठĨ", + "ĠdÃ¼ÅŁ ün", + "å¿ «", + "ÑĢ ÐµÑģ", + "ÑĢе Ñģ", + "åħ «", + "ÑĤ Ñĸ", + "ि à¤Ł", + "िठŁ", + "Ġ ÑĤеÑħ", + "ĠÑĤ еÑħ", + "ĠÑĤе Ñħ", + "ú t", + "ÙĨ Ùĩ", + "Ġ ÙĨØ´", + "ĠÙĨ Ø´", + "çĻ º", + "Ġ ê°¤", + "Ġê° ¤", + "л ед", + "ле д", + "Ġ ëĵ¤", + "Ġëĵ ¤", + "Ġbi lg", + "Ġbil g", + "Ġsp oleÄį", + "Ġspol eÄį", + "Ġspole Äį", + "ĠÄij Æ¡n", + "Ġ à¤īत", + "Ġà¤ī त", + "Ġtr á»ĭ", + "Ġ عÙħ", + "Ġع Ùħ", + "Ġ ।", + "Ġà ¥¤", + "Ġॠ¤", + "Ġú Äį", + "ãģ ¸", + "ว à¸ģ", + "ĠÑģл ÑĥÑĩа", + "ĠÑģлÑĥÑĩ а", + "ĠÑģлÑĥ Ñĩа", + "á» įng", + "á»į ng", + "á»įn g", + "åı Ī", + "и ÑĤÑĥ", + "иÑĤ Ñĥ", + "æľī éĻIJ", + "ë¦ °", + "ëĭ ĺ", + "Ġho ạt", + "ĠìĿ´ ëıĻ", + "з наÑĩ", + "зна Ñĩ", + "зн аÑĩ", + "Ġاست ÙģØ§Ø¯Ùĩ", + "ĠпÑĢо ÑĨеÑģ", + "ĠпÑĢоÑĨ еÑģ", + "an ın", + "anı n", + "г Ñĥ", + "Ġ اÙĦØ«", + "ĠاÙĦ Ø«", + "æĹ¥ æľ¬", + "ι κά", + "ικ ά", + "ĠÑĹ ÑĹ", + "ì§ ģ", + "i nu", + "in u", + "Ġس از", + "ãĤ ¡", + "ï¾ ī", + "Ġ اÙĤ", + "Ġا ÙĤ", + "Ġk ế", + "ů sob", + "à¹ĩ à¸ģ", + "åIJ §", + "æ¼ Ķ", + "Ñī ие", + "Ñīи е", + "ç Ĩ", + "ÑĮ ого", + "à¥ĭ à¤Ł", + "ا Ù¾", + "ا٠¾", + "å ®¤", + "å® ¤", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġtr iá»ĥn", + "Ġtri á»ĥn", + "Ġt áºŃp", + "é£ Ł", + "ë ¹", + "ĠÑĩеÑĢ ÐµÐ·", + "Ġ ÑĨи", + "ĠÑĨ и", + "Ñģ Ñĥ", + "Ġ нем", + "Ġн ем", + "Ġне м", + "Ġ аÑĢ", + "Ġа ÑĢ", + "Ġ ÙĦا", + "ĠÙĦ ا", + "Ġ ì§Ħ", + "Ġì§ Ħ", + "ç Ł³", + "çŁ ³", + "Ġп ÑĢоб", + "ĠпÑĢ Ð¾Ð±", + "ĠпÑĢо б", + "Ġ ìĽIJ", + "ĠìĽ IJ", + "ÛĮ ÙĨÛĮ", + "ÛĮÙĨ ÛĮ", + "Ñİ Ñĩи", + "âĢ į", + "Û± Û³", + "Û±Û ³", + "ã Ĥ¬", + "ãĤ ¬", + "çłĶ ç©¶", + "í Ĥ¤", + "íĤ ¤", + "Ġger çek", + "Ġgerç ek", + "ĠØŃ س", + "íĶ ¼", + "èĤ ¡", + "Ġ ÏĦι", + "ĠÏĦ ι", + "ĠvÅ¡ ech", + "ĠvÅ¡e ch", + "Ġv ì", + "ا ÙĨÙĬ", + "اÙĨ ÙĬ", + "ĠÙĩ ست", + "Ġ ëĤ¨", + "Ġë Ĥ¨", + "ĠëĤ ¨", + "ÅĻ ej", + "ÅĻe j", + "е ÑĢг", + "еÑĢ Ð³", + "Ġs öz", + "Ġsö z", + "ĠاÙĦ Ùħت", + "ĠاÙĦÙħ ت", + "Ġch ế", + "á»ĵ i", + "åı ¤", + "âĸį âĸį", + "á»ĵ ng", + "á»ĵn g", + "ãĥ ¢", + "Ġ ди", + "Ġд и", + "ε λ", + "Ġ она", + "Ġо на", + "Ġон а", + "Ġ най", + "Ġн ай", + "Ġна й", + "Ġ _{", + "Ġ_ {", + "п ол", + "по л", + "al iz", + "ali z", + "Ġt Äĥng", + "Ġ dÃŃ", + "Ġd ÃŃ", + "é p", + "Ġ ÙĦÙħ", + "ĠÙĦ Ùħ", + "Ġm ož", + "Ġmo ž", + "Ġng oÃłi", + "è Ĺ", + "Ġ Ñĩем", + "ĠÑĩ ем", + "ĠÄij á»ķ", + "ĠÄijá» ķ", + "е ÑĤа", + "еÑĤ а", + "åı ²", + "ĠÑģ каз", + "ĠÑģк аз", + "ĠÑģка з", + "ãĤ¿ ãĥ¼", + "а нÑĮ", + "ан ÑĮ", + "Ġg öz", + "Ġgö z", + "ë³ Ħ", + "ãģĭ ãģ£ãģŁ", + "Ġ ëįĶ", + "Ġëį Ķ", + "ĠÙĨ ÙĤ", + "Ġ ÑĥÑĩа", + "ĠÑĥ Ñĩа", + "ĠÑĥÑĩ а", + "Ġsa hip", + "Ġsah ip", + "ĠÑģ пе", + "ĠÑģп е", + "ί οÏħ", + "ίο Ïħ", + "ì ½Ķ", + "ì½ Ķ", + "Ġ ëĪ", + "Ġë Ī", + "m am", + "ma m", + "Ġr oce", + "Ġro ce", + "Ġroc e", + "Ġ ÙĨاÙħ", + "ĠÙĨ اÙħ", + "еÑĢ Ð°ÑĤÑĥ", + "еÑĢа ÑĤÑĥ", + "ı p", + "ãģĦ ãģ¦", + "Ġ íķĻ", + "Ġíķ Ļ", + "Ġ à¤ĩन", + "Ġà¤ĩ न", + "å ©", + "Ġnh iên", + "a tır", + "at ır", + "atı r", + "ÅĻ enÃŃ", + "ÅĻe nÃŃ", + "ÅĻen ÃŃ", + "د Ø©", + "ãĥª ãĥ¼", + "ล à¸ĩ", + "Ġ éĢ", + "Ġé Ģ", + "Ġ à¹Ģà¸Ľ", + "Ġà¹Ģ à¸Ľ", + "Ġà¹ĢภĽ", + "д Ñĸ", + "ÎŃ Ïģ", + "ìĦ ¤", + "г ÑĢа", + "es ine", + "esi ne", + "esin e", + "Ġ ее", + "Ġе е", + "Ġ iki", + "Ġi ki", + "Ġik i", + "Ġت ج", + "lar ına", + "ları na", + "ların a", + "d ür", + "dü r", + "ĠاÙĦ ذ", + "Ùħ ت", + "ĠठIJ", + "ि द", + "िठ¦", + "Ġ ë¹", + "Ġë ¹", + "ÑĦоÑĢм а", + "ÑĦоÑĢ Ð¼Ð°", + "Ġ они", + "Ġо ни", + "Ġон и", + "г оÑĢ", + "го ÑĢ", + "н еÑģ", + "не Ñģ", + "ìĺĢ ëĭ¤", + "ıl dı", + "Ġ çek", + "Ġç ek", + "Ġ дов", + "Ġд ов", + "Ġдо в", + "د ÛĮ", + "Ġ ÄĮesk", + "ĠÄĮ esk", + "ĠÄĮes k", + "ÑĪ Ð°", + "Ġ ات", + "Ġا ت", + "ĠØ§Ø ª", + "å± ĭ", + "æĸ ¼", + "Ġ práv", + "Ġp ráv", + "Ġpr áv", + "Ġprá v", + "é mu", + "ém u", + "å¸ Ī", + "ãħĭ ãħĭ", + "Ġil gili", + "Ġilg ili", + "Ġilgi li", + "ห ว", + "ठĩ", + "ा ष", + "ाठ·", + "ëŀ ij", + "as yon", + "asy on", + "ÑĨ ÑĮ", + "à¹ģ à¸ķ", + "ợ i", + "Ġв ÑĭÑģ", + "ĠвÑĭ Ñģ", + "ÑĸлÑĮ ки", + "ĠкоÑĤоÑĢ Ñĭе", + "н ики", + "ни ки", + "ник и", + "Ġ اد", + "Ġا د", + "ĠØ§Ø ¯", + "Ġ živ", + "Ġž iv", + "Ġži v", + "Ġα ÏĢο", + "ĠαÏĢ Î¿", + "ر ض", + "ا Ø©", + "Ø§Ø ©", + "Ġk dyž", + "Ġkdy ž", + "ữ a", + "Ġ ëĮĢíķľ", + "ĠëĮĢ íķľ", + "Ġt ôi", + "Ġtô i", + "Ñĥ ÑĶ", + "ز ر", + "Ġ å¥", + "Ġå ¥", + "ãĥĭ ãĥĭ", + "ب Ø©", + "ÏĦ οÏĤ", + "ÏĦο ÏĤ", + "ÑĨи он", + "Ġ ÙħÙĬ", + "ĠÙħ ÙĬ", + "Ġ Äĥn", + "ĠÄ ĥn", + "à¥ĩ à¤Ĺ", + "à¥ĩठĹ", + "Ġ ÑĢег", + "ĠÑĢ ÐµÐ³", + "ĠÑĢе г", + "ĠlỼ n", + "ì¤ Ģ", + "ìĭ ¬", + "Ġb iết", + "Ġbi ết", + "a ları", + "al arı", + "ala rı", + "alar ı", + "Ùģ ÙĬ", + "ä¸ĸ çķĮ", + "Ġне обÑħодим", + "Ġнеоб Ñħодим", + "à¸Ļ ว", + "ν ÏĦ", + "Ġ ảnh", + "íĸ Ī", + "Ġ वर", + "Ġव र", + "h led", + "hl ed", + "hle d", + "ิ à¸Ī", + "æŃ »", + "ĠاÙĦ تÙĬ", + "ĠاÙĦت ÙĬ", + "н оÑģ", + "но Ñģ", + "p rav", + "pr av", + "pra v", + "Ñı ÑĤи", + "ÑıÑĤ и", + "Ñī а", + "ÙĪ ÙĨÙĩ", + "ÙĪÙĨ Ùĩ", + "Ġ aÄŁ", + "Ġa ÄŁ", + "à¸ŀ ระ", + "à¸ŀร ะ", + "Ġth á»ijng", + "Ġthá» ijng", + "ÑĦ и", + "Ġг олов", + "Ġгол ов", + "Ġk hoa", + "Ġkh oa", + "Ġkho a", + "Ġ ëłĪ", + "Ġëł Ī", + "ãģ Ĵ", + "Ġget ir", + "Ġge tir", + "Ø´ ت", + "ж еннÑı", + "жен нÑı", + "е нÑĸ", + "ен Ñĸ", + "Ġgi ữ", + "Ġgiá» ¯", + "ler inin", + "leri nin", + "lerin in", + "lerini n", + "à¥Ģ व", + "éģ ¸", + "स र", + "ĠÑĩ елов", + "à¥į à¤ľ", + "à¥įठľ", + "ĠбÑĥ ло", + "Ġ اÙĨد", + "Ġا ÙĨد", + "ĠاÙĨ د", + "ั à¸Ļà¸Ĺ", + "ัà¸Ļ à¸Ĺ", + "è® ©", + "Ġq uyá»ģn", + "Ġquy á»ģn", + "ĠØŃ اÙĦ", + "ì² ĺ", + "Ġ лÑİд", + "ĠлÑİ Ð´", + "Ïģ Ïĩ", + "алÑĮ но", + "ãĢĢ ãĥ½", + "ê¸ ī", + "ãĤ ±", + "ĠÙħ رد", + "ĠÙħر د", + "Ġ ông", + "Ġô ng", + "Ġ اش", + "Ġا Ø´", + "ĠØ§Ø ´", + "大 åѦ", + "ì¦ Ī", + "æĪ ¦", + "e yi", + "ey i", + "Ġ ÐIJн", + "ĠÐIJ н", + "ि प", + "िठª", + "Ġt iêu", + "Ġti êu", + "Ø´ ÛĮ", + "ắ n", + "é ŃĶ", + "éŃ Ķ", + "ãģ¨ ãģĦãģĨ", + "ãģ¨ãģĦ ãģĨ", + "Ġ ìłĢ", + "Ġì łĢ", + "Ġìł Ģ", + "к ÑĤи", + "кÑĤ и", + "Ġ ÙħØŃÙħد", + "ĠÙħØŃ Ùħد", + "Ġ íĨµ", + "Ġí Ĩµ", + "ĠíĨ µ", + "ุ ม", + "åį ¡", + "о ÑĢов", + "оÑĢ Ð¾Ð²", + "оÑĢо в", + "к оÑİ", + "ко Ñİ", + "Ġl á»±c", + "å³ ¶", + "Ġ رÙĪØ²", + "Ġر ÙĪØ²", + "ĠرÙĪ Ø²", + "Ñħ Ñĸд", + "Ġh á»ĵ", + "Ġhá» ĵ", + "Ġ ül", + "Ġü l", + "Ġ Ø´Ùħ", + "ĠØ´ Ùħ", + "ÙĨ س", + "ب ÙĪ", + "Ġth êm", + "ạ c", + "åº ľ", + "e chn", + "ec hn", + "ech n", + "Ġ Îļα", + "ĠÎļ α", + "èij Ĺ", + "çľ ¼", + "á h", + "Ġ ι", + "ĠÎ ¹", + "ê¹Į ì§Ģ", + "m az", + "ma z", + "λο γ", + "Ġjs me", + "Ġ á¼", + "Ġá ¼", + "Ġп ÑĢави", + "ĠпÑĢ Ð°Ð²Ð¸", + "ĠпÑĢав и", + "ĠпÑĢа ви", + "к лад", + "Ġth á»§", + "Ġthá» §", + "s ah", + "sa h", + "ÄŁ it", + "ÄŁi t", + "Ġ ÙģÛĮ", + "ĠÙģ ÛĮ", + "ен но", + "à¥ģ à¤Ľ", + "à¥ģठĽ", + "ãģ »", + "çĻ ¾", + "и ÑĤа", + "иÑĤ а", + "ĠбÑĭ ло", + "ĠбÑĭл о", + "Ġv ys", + "Ġvy s", + "Ġ ì¶ľ", + "Ġì¶ ľ", + "ắ ng", + "ắn g", + "ĠÄij ại", + "ĠÙħ ÙĪØ±Ø¯", + "ĠÙħÙĪ Ø±Ø¯", + "ĠÙħÙĪØ± د", + "е ла", + "ел а", + "Ñĸ ÑĪ", + "л еннÑı", + "лен нÑı", + "æ IJ", + "Ġ нед", + "Ġн ед", + "Ġне д", + "i yat", + "iy at", + "iya t", + "ì ¼", + "Ġol duÄŁunu", + "ĠolduÄŁ unu", + "ĠolduÄŁu nu", + "د اÙĨ", + "دا ÙĨ", + "í Ŀ", + "Ġ سÛĮ", + "Ġس ÛĮ", + "ี à¸ģ", + "ÄĽ st", + "ım ı", + "ä¸ī ä¸ī", + "ãĤ ½", + "ĠÑĤ еп", + "ĠÑĤе п", + "Ġ ÑĢай", + "ĠÑĢ Ð°Ð¹", + "ĠÑĢаР¹", + "ĠÑĢа й", + "ा ध", + "ाठ§", + "Ġ ìĤ¬ëŀĮ", + "ĠìĤ¬ ëŀĮ", + "ĠT rung", + "ĠTr ung", + "ĠTru ng", + "ï¼ı ï¼ı", + "Ġt âm", + "Å¡ enÃŃ", + "Å¡e nÃŃ", + "Å¡en ÃŃ", + "ãĥ į", + "Ġ ÏĦοÏħÏĤ", + "ĠÏĦ οÏħÏĤ", + "ĠÏĦοÏħ ÏĤ", + "Ġ нÑĸ", + "Ġн Ñĸ", + "в ид", + "ви д", + "æ ¿", + "Ġ ظ", + "ĠØ ¸", + "ãĥ ¯", + "ì ¢ħ", + "ì¢ ħ", + "в аÑĤи", + "ва ÑĤи", + "ваÑĤ и", + "Ġqu á", + "ภ¤", + "ĠÄij ưá»Ŀng", + "à¥ģ द", + "à¥ģठ¦", + "r oj", + "ro j", + "Ġ ÑĥÑģ", + "ĠÑĥ Ñģ", + "é¦ Ļ", + "ì½ ĺ", + "Ġ ÙĪØª", + "ĠÙĪ Øª", + "ม าà¸ģ", + "มา à¸ģ", + "åĪ ĩ", + "Ġ án", + "Ġá n", + "Ġм ед", + "ìĹIJ ëĬĶ", + "Ġh lav", + "Ġhl av", + "ر ت", + "à¹ĥ à¸Ī", + "æ´ ²", + "Ġ лÑĸ", + "Ġл Ñĸ", + "æ Īĺ", + "æĪ ĺ", + "ÙĪ ÙĨد", + "ÙĪÙĨ د", + "è¶ ³", + "åĭ Ļ", + "çĶ ³", + "Ġ ì±", + "Ġì ±", + "ĠìĿ´ëıĻ íķ©ëĭĪëĭ¤", + "Ñī еÑģÑĤв", + "Ñīе ÑģÑĤв", + "Ġ ë¶Ī", + "Ġë ¶Ī", + "Ġë¶ Ī", + "ÙĦ ÙĪ", + "ü ven", + "èĪ ĩ", + "Ġgi Ỽi", + "Ġgiá» Ľi", + "Ġ ÙĪÙĤ", + "ĠÙĪ ÙĤ", + "Ġê°¤ ë¡ľê·¸", + "Ġ عاÙħ", + "Ġع اÙħ", + "ĺ IJ", + ": ::::", + ":: :::", + ":::: :", + "::: ::", + "Ġ Ñĥд", + "ĠÑĥ д", + "- ÑĤо", + "-ÑĤ о", + "Ġ ÑĦоÑĢ", + "ĠÑĦ оÑĢ", + "и ни", + "ин и", + "ãģĹ ãģĦ", + "ãģĹãģ Ħ", + "Ġê°¤ë¡ľê·¸ ë¡ľ", + "ãģ ³", + "ãĥ© ãĤ¤", + "e ná", + "en á", + "Ġ nez", + "Ġn ez", + "Ġne z", + "Ġönem li", + "Ġ ниÑħ", + "Ġн иÑħ", + "Ġни Ñħ", + "à¤Ĥ स", + "Ġà¤īस à¤ķ", + "à¥įर द", + "Ġn ói", + "Ġnó i", + "Ùĥ ÙĦ", + "ิ ว", + "κ ο", + "à¥ģ à¤ĸ", + "à¥ģठĸ", + "ö yle", + "öy le", + "ά λ", + "ó ng", + "ón g", + "ĠداÙĨ Ø´", + "Ġз б", + "ì »", + "à¸ľ ล", + "ëĵ¤ ìĿ´", + "Ġe tk", + "Ġet k", + "ر ات", + "را ت", + "Ġ εκ", + "Ġε κ", + "ÑĤ ÑĢа", + "ÑĤÑĢ Ð°", + "à¥į तर", + "à¥įत र", + "à¤Ĥ ब", + "Ġм ÑĸÑģ", + "ĠмÑĸ Ñģ", + "æł ¹", + "ãĥ Ļ", + "Ġt á»ī", + "Ġtá» ī", + "à¹Ģ à¸ĭ", + "à¹Ģภĭ", + "ìĪ ł", + "ï¼Į ä¸į", + "ìĺ ¨", + "Ġm ÄĽst", + "ĠmÄĽ st", + "ģ µ", + "a zı", + "az ı", + "r ada", + "ra da", + "rad a", + "ÏĢ Î±", + "m é", + "ÙĨ اÙħÙĩ", + "ÙĨا ÙħÙĩ", + "ÙĨاÙħ Ùĩ", + "ا ÛĮÙĦ", + "اÛĮ ÙĦ", + "μ η", + "l uk", + "lu k", + "Ùĥ ÙĬ", + "Ġ ï¼ī", + "Ġï¼ ī", + "Ġ деÑĤ", + "Ġд еÑĤ", + "Ġде ÑĤ", + "Ġiç inde", + "Ġiçin de", + "Ġiçi nde", + "Ñı м", + "Ġd ưá»", + "Ġdư á»", + "ĠпÑĢед ÑģÑĤав", + "ü re", + "ür e", + "åķ Ĭ", + "ĠÑĤ ÑĢÑĥ", + "ĠÑĤÑĢ Ñĥ", + "es ini", + "esi ni", + "esin i", + "Ġ але", + "Ġа ле", + "Ġал е", + "ãĥ³ ãĥī", + "ãĥ³ãĥ ī", + "à¥ĥ त", + "ε Ïħ", + "à¥ģ à¤Ĩ", + "à¥ģठĨ", + "Ġh iç", + "Ġhi ç", + "çĶ º", + "Ġ Ðĸ", + "ĠÐ ĸ", + "ç ħ§", + "çħ §", + "k á", + "Ġtr á»įng", + "Ġ تش", + "Ġت Ø´", + "ा श", + "ाठ¶", + "ĠÙħ Ø«", + "e tim", + "et im", + "eti m", + "Ġth ấy", + "Ġब ह", + "ع ت", + "ึ à¹ī", + "Ġs ev", + "Ġse v", + "Ñģ ÑĤа", + "ÑģÑĤ а", + "Ġc ứ", + "Ġt iá»ģn", + "Ġti á»ģn", + "à¥Ģ à¤ľ", + "Ñı г", + "ĠоÑĢг ани", + "ĠоÑĢган и", + "Ġб Ñĭл", + "ĠбÑĭ л", + "t ür", + "tü r", + "Ġب ازÛĮ", + "Ġبا زÛĮ", + "Ġباز ÛĮ", + "Ġ ìŀ¬", + "Ġìŀ ¬", + "व र", + "æľīéĻIJ åħ¬åı¸", + "k up", + "ku p", + "Ġ iyi", + "Ġi yi", + "Ġiy i", + "íķĺ ê²Į", + "ãĢĢ l", + "ãĤ· ãĥ§", + "ا رة", + "ار Ø©", + "ส ร", + "Ġt ÃŃch", + "ĠtÃŃ ch", + "Ġ каÑĢ", + "Ġк аÑĢ", + "Ġка ÑĢ", + "и б", + "ĠвÑĸд повÑĸд", + "ĠвÑĸдпов Ñĸд", + "Ġpo dle", + "Ġpod le", + "à¥įर à¤ķ", + "i yon", + "iy on", + "к оном", + "ко ном", + "кон ом", + "Ġ μÎŃ", + "Ġμ ÎŃ", + "Ġп ÑĢоиз", + "ĠпÑĢо из", + "Ġ âĢı", + "ĠâĢ ı", + "m ektedir", + "mekte dir", + "Ω ÎĿ", + "Ġb áo", + "à¸Ī ำ", + "ëį Ķ", + "ë¸ Į", + "Ġs ợ", + "ÛĮ رÛĮ", + "ÛĮر ÛĮ", + "о нÑĥ", + "он Ñĥ", + "ın daki", + "ında ki", + "ınd aki", + "алÑĮ ного", + "алÑĮно го", + "μ β", + "л из", + "ли з", + "Ġjej ich", + "æĸ ½", + "ä¾ ¿", + "l eÅŁtir", + "le ÅŁtir", + "leÅŁ tir", + "ĠÙĪ Ø£", + "Ġस ब", + "l erde", + "ler de", + "Ġ ÚĨÙĩ", + "ĠÚĨ Ùĩ", + "ÏĦ ÎŃ", + "Ġg ì", + "Ġ Ãļ", + "Ġà ļ", + "ĠÑĢаÑģ п", + "ĠÑĢа Ñģп", + "Ġt üm", + "à¹Ģ à¸ĩ", + "à¹Ģภĩ", + "èIJ ½", + "ìĨ ¡", + "à¹Ħ à¸Ĺย", + "m Ä±ÅŁtır", + "mÄ±ÅŁ tır", + "mÄ±ÅŁtı r", + "Ġ ÙĤرار", + "ĠÙĤر ار", + "Ġ à¸Ħาส", + "Ġà¸Ħ าส", + "Ġk ıs", + "Ġkı s", + "о ваниÑı", + "ов аниÑı", + "ова ниÑı", + "овани Ñı", + "ован иÑı", + "ãĤĤ ãģ®", + "د اÙħ", + "دا Ùħ", + "ìľ ¡", + "ol oj", + "olo j", + "ĠпоÑģл е", + "ĠпоÑģ ле", + "Ġ Так", + "ĠТ ак", + "ĠТа к", + "Ġб олее", + "Ġбол ее", + "ĠÄij á»ķi", + "ĠÄijá»ķ i", + "l ak", + "la k", + "í ħĮ", + "íħ Į", + "Ġa yn", + "Ġay n", + "Ñı Ñģ", + "Ġп ог", + "Ġпо г", + "Ġar asında", + "Ġaras ında", + "Ġara sında", + "Ġarası nda", + "Ī ¬", + "à¥Ĥ ल", + "Ġ ανα", + "Ġα να", + "Ġαν α", + "Ġq uyết", + "Ġquy ết", + "Ġthu á»Ļc", + "Ġd ün", + "Ġdü n", + "Ġp ÅĻes", + "ĠpÅĻ es", + "ĠpÅĻe s", + "ÑĦ Ñĸ", + "Ġ å¸", + "Ġå ¸", + "ا ÙĦÙĬ", + "اÙĦ ÙĬ", + "Ġп овеÑĢ", + "Ġпо веÑĢ", + "Ġпов еÑĢ", + "Ñĩ ина", + "Ñĩи на", + "Ñĩин а", + "s ko", + "sk o", + "çµ IJ", + "Ø ¡", + "Ġ гÑĢа", + "Ġг ÑĢа", + "ĠгÑĢ Ð°", + "о ÑĤи", + "оÑĤ и", + "Ġqu á»ijc", + "ÑĨ Ñĸв", + "ÑĨÑĸ в", + "l endir", + "len dir", + "lendi r", + "в Ñĸд", + "вÑĸ д", + "Ġж иÑĤ", + "ü yor", + "üy or", + "ï¼Į ä»ĸ", + "lar ında", + "ları nda", + "ların da", + "Ġu yg", + "Ġuy g", + "Ġtr ÃŃ", + "Ġ Ø´ÙĨ", + "ĠØ´ ÙĨ", + "ا بÙĦ", + "اب ÙĦ", + "æ· ±", + "Âł p", + "Ñģ каÑı", + "Ñģк аÑı", + "Ñģка Ñı", + "о ÑĤа", + "оÑĤ а", + "ÙĪ Ø·", + "Ġ اط", + "Ġا Ø·", + "ĠØ§Ø ·", + "ä¾ Ĩ", + "Ġз аÑĤ", + "Ġза ÑĤ", + "Ġ име", + "Ġи ме", + "Ġим е", + "à¹Ģà¸Ĺ ศ", + "ëĭ ´", + "n ÄĽnÃŃ", + "nÄĽ nÃŃ", + "nÄĽn ÃŃ", + "Ñĥ лÑı", + "Ñĥл Ñı", + "- п", + "å ĺ", + "Ġв ип", + "Ġви п", + "аÑĢа кÑĤ", + "à¹Ģ à¸ļ", + "à¹Ģภļ", + "ç¦ ı", + "Ïģ Ïİ", + "س Ùĩ", + "à¥Į र", + "Ġdi ÄŁer", + "à¹Ĥ à¸Ķย", + "à¹Ĥà¸Ķ ย", + "ĠÑģп оÑģоб", + "ĠÑģпоÑģ об", + "åį ·", + "è ĸ", + "а нÑĤ", + "ан ÑĤ", + "Ñİ ÑĤÑĮÑģÑı", + "ÑİÑĤÑĮ ÑģÑı", + "ĠÑį ÑĤом", + "ĠÑįÑĤ ом", + "ĠÑįÑĤо м", + "Ġ ï½Ģ", + "Ġï½ Ģ", + "ส าม", + "ì m", + "ĠÑĪ Ðº", + "Ġ à¸Ľà¸£à¸°", + "Ġà¸Ľ ระ", + "Ġà¸Ľà¸£ ะ", + "़ à¥Ģ", + "e kl", + "ek l", + "m uÅŁ", + "mu ÅŁ", + "ĠÑĤак ож", + "ÙĪ Ø³Ø·", + "ÙĪØ³ Ø·", + "Ġ Äįi", + "ĠÄį i", + "ี à¸Ļ", + "ÛĮ ÙĨÙĩ", + "ÛĮÙĨ Ùĩ", + "ÄĽ k", + "å½ ¼", + "le rine", + "ler ine", + "leri ne", + "lerin e", + "ĠÄij ất", + "à¥ģ à¤ı", + "à¥ģठı", + "ол оÑģ", + "оло Ñģ", + "Ġ å°ı", + "Ġå° ı", + "ز ÙĬØ©", + "زÙĬ Ø©", + "Ġв ла", + "à¥Ģ ल", + "Ġ etti", + "Ġe tti", + "Ġet ti", + "Ġett i", + "ĠÑģ оÑģÑĤав", + "ĠÑģо ÑģÑĤав", + "ĠÑģоÑģÑĤ ав", + "ÙĦ اÙĦ", + "ÙĦا ÙĦ", + "Ġ çİ", + "Ġç İ", + "ĠpÅĻÃŃ pad", + "ëŁ °", + "ุ à¸ģ", + "Ġ Ñĩи", + "ĠÑĩ и", + "å ħį", + "åħ į", + "n ÄĽjÅ¡ÃŃ", + "nÄĽ jÅ¡ÃŃ", + "ิ ล", + "åį Ģ", + "s kých", + "sk ých", + "ský ch", + "า ศ", + "าภ¨", + "åIJ Ĺ", + "Ġ íĺĦ", + "Ġíĺ Ħ", + "Ġal ın", + "å§ Ķ", + "à¸ŀ ร", + "až d", + "Ġб ÑĸлÑĮ", + "ĠбÑĸ лÑĮ", + "ĠбÑĸл ÑĮ", + "à¹Ī วà¸Ļ", + "à¹Īว à¸Ļ", + "o og", + "oo g", + "a cı", + "ac ı", + "l ıģ", + "lı ÄŁ", + "Ġk hu", + "Ġkh u", + "Ġh izmet", + "Ġ éĽ", + "Ġé Ľ", + "Ġ Îĺ", + "ĠÎ ĺ", + "Ġde ÄŁer", + "ĠdeÄŁ er", + "åħ Ń", + "Ġ دÙĩ", + "Ġد Ùĩ", + "Ġn ÄĽk", + "ĠnÄĽ k", + "à¸Ħ à¸Ļ", + "е ÑĤÑĮ", + "еÑĤ ÑĮ", + "ب اÙĨ", + "با ÙĨ", + "ÏĦ ική", + "ÏĦικ ή", + "ÏĦι κή", + "ĠÄij á»ĭa", + "ĠÄijá»ĭ a", + "Ġ Công", + "ĠC ông", + "íĮ IJ", + "Ġк огда", + "ĠÚ© ÙĨد", + "ĠÚ©ÙĨ د", + "ãģ§ ãģį", + "ĠÏĢ ÎµÏģι", + "ĠÏĢεÏģ ι", + "ĠÏĢε Ïģι", + "lar dan", + "larda n", + "Ġ зем", + "Ġз ем", + "ت ÙĪØ§ÙĨ", + "تÙĪ Ø§ÙĨ", + "è³ ĩ", + "li kle", + "lik le", + "Ġt ụ", + "Ġtá» ¥", + "Ġd ẫn", + "Ġn ay", + "Ġna y", + "Ġ ÑģÑĤоÑĢ", + "ĠÑģ ÑĤоÑĢ", + "ĠÑģÑĤ оÑĢ", + "ĠÑģÑĤо ÑĢ", + "ĠØ´ Ùħا", + "ĠØ´Ùħ ا", + "Ø« ر", + "Ġd edi", + "Ġde di", + "Ġded i", + "к ое", + "ко е", + "ë ijIJ", + "ëij IJ", + "ÑĨ ев", + "ÑĨе в", + "ج Ùĩ", + "Ġm ůže", + "Ġmů že", + "Ġmůž e", + "à¥ģ प", + "à¥ģठª", + "à¥įर म", + "Ġ taÅŁ", + "Ġt aÅŁ", + "Ġta ÅŁ", + "оÑĢ ÑĤ", + "γ Ïģα", + "çĻ ¼", + "า à¸ļ", + "าภļ", + "iá» ħn", + "iá»ħ n", + "ĠÙħ ست", + "ĠÙħس ت", + "л екÑģ", + "ле кÑģ", + "лек Ñģ", + "Ġ prav", + "Ġp rav", + "Ġpr av", + "Ġpra v", + "Ġд оÑģ", + "Ġдо Ñģ", + "Ġd Ä±ÅŁ", + "Ġ zem", + "Ġz em", + "Ġze m", + "Ġg iao", + "Ġgi ao", + "Ġgia o", + "Ġv last", + "Ġvl ast", + "Ġvlas t", + "ĠÑį ÑĤого", + "ĠÑįÑĤ ого", + "ĠÑįÑĤо го", + "ï½ °", + "ว à¸ĩ", + "ÑĢ Ð¾Ð¹", + "ÑĢо й", + "Ġbir lik", + "e ný", + "en ý", + "Ġ ëĭ¨", + "Ġëĭ ¨", + "ов ани", + "ова ни", + "ован и", + "é£ İ", + "íı ī", + "Ġz ah", + "Ġza h", + "б а", + "åĬ ©", + "éĢ ²", + "ê ¶Į", + "Ġd iye", + "Ġdi ye", + "Ġdiy e", + "à¤Ĥ à¤ķ", + "Ġch uyá»ĥn", + "Ġ ìĹŃ", + "ĠìĹ Ń", + "Ġ ÑĤÑĢи", + "ĠÑĤ ÑĢи", + "ĠÑĤÑĢ Ð¸", + "Ġö nce", + "Ġön ce", + "Ġönc e", + "ï¼Į è¿Ļ", + "o ại", + "л еÑĤ", + "ле ÑĤ", + "ĠÏĥ Ïħν", + "ĠÏĥÏħ ν", + "l ád", + "lá d", + "ç e", + "t ü", + "Ġ Äįást", + "ĠÄį ást", + "ĠÄįá st", + "Ġ εν", + "Ġε ν", + "Ġb iá»ĩt", + "Ġ é«", + "Ġé «", + "à¥ĭ à¤ķ", + "ÙĦ ات", + "ÙĦا ت", + "ب اÙĦ", + "با ÙĦ", + "e cies", + "ec ies", + "eci es", + "Ġ ëĭ¹", + "Ġëĭ ¹", + "à¸Ĭ à¸Ļ", + "ÏĦ αÏĤ", + "ÏĦα ÏĤ", + "à¥į ण", + "à¥įठ£", + "u jÃŃcÃŃ", + "uj ÃŃcÃŃ", + "ujÃŃ cÃŃ", + "Äį et", + "Äįe t", + "Ġп об", + "Ġпо б", + "ÙĪ Ø§Ø±", + "ÙĪØ§ ر", + "i yas", + "iy as", + "iya s", + "Ġd ruh", + "Ġdr uh", + "Ġdru h", + "د د", + "ÏĮ ν", + "ÑĢ ÐµÐ½", + "ÑĢе н", + "า รà¸ĸ", + "าร à¸ĸ", + "ä½ İ", + "ìķ ½", + "ÑĢ Ð¾Ð·", + "ÑĢо з", + "ëĬĶ ëį°", + "ãĤĵ ãģª", + "Äį enÃŃ", + "Äįe nÃŃ", + "Äįen ÃŃ", + "**** ********", + "******** ****", + "****** ******", + "***** *******", + "******* *****", + "Ġ Ρ", + "ĠÎ ¡", + "ĠÑĤ омÑĥ", + "ĠÑĤо мÑĥ", + "ĠÑĤом Ñĥ", + "ร à¸ģ", + "à¥ģ स", + "à¥ģठ¸", + "ä¹ Ŀ", + "å°± æĺ¯", + "£ i", + "éĺ ²", + "Ùĥ ر", + "ĠÑį ÑĤи", + "ĠÑįÑĤ и", + "ĠÚ© Ø´ÙĪØ±", + "ĠÚ©Ø´ ÙĪØ±", + "Ġ ê°IJ", + "Ġê° IJ", + "Ġ ад", + "Ġа д", + "Ġ داد", + "Ġد اد", + "éģ İ", + "Ù «", + "Ġl áºŃp", + "Ġ اÙĦÙĩ", + "Ġا ÙĦÙĩ", + "ĠاÙĦ Ùĩ", + "æľ Ľ", + "Ġ تÙĩ", + "Ġت Ùĩ", + "ì§ Ī", + "ãģ§ ãģĤãĤĭ", + "ãģ§ãģĤ ãĤĭ", + "Ġ меж", + "Ġм еж", + "ĠÑĢ ÐµÐ·ÑĥлÑĮÑĤ", + "ĠÑĢез ÑĥлÑĮÑĤ", + "ç į", + "е мÑĥ", + "ем Ñĥ", + "Ġ تÙĪØ§ÙĨ", + "Ġت ÙĪØ§ÙĨ", + "ĠتÙĪ Ø§ÙĨ", + "Ġ راÙĩ", + "Ġر اÙĩ", + "Ġرا Ùĩ", + "ãĥ¼ ãĥł", + "ãĥ¼ãĥ ł", + "åĦ ¿", + "å± ŀ", + "б Ñĭ", + "á ¿", + "à¸Ħ ล", + "à¥ĭ à¤Ī", + "üt ün", + "à¤Ĺ र", + "ìķĺ ëĭ¤", + "âĪ §", + "Ġ ì°¨", + "Ġì° ¨", + "çµ Ħ", + "μα ÏĦα", + "ุ à¸Ļ", + "Ġ ÑĤом", + "ĠÑĤ ом", + "ĠÑĤо м", + "еÑĢ Ð²", + "Îij Σ", + "ĠiÅŁ lem", + "ع Ùħ", + "ë ĥ", + "ãĥ Ħ", + "ا ÙģØª", + "اÙģ Øª", + "åĬ ŀ", + "Ġ nes", + "Ġn es", + "Ġne s", + "av aÅŁ", + "ava ÅŁ", + "ĠÙĨ ÛĮز", + "ĠÙĨÛĮ ز", + "å¼ º", + "Ġ éĻ", + "Ġé Ļ", + "Ñĸн нÑı", + "æ² ³", + "á ÅĻ", + "æĿ IJ", + "ĠØ£ ÙĬ", + "Ġ ì¹´", + "Ġì¹ ´", + "Ġn enÃŃ", + "Ġne nÃŃ", + "Ġnen ÃŃ", + "Ġ ÙĪÙħ", + "ĠÙĪ Ùħ", + "Ġ Ú©Ùħ", + "ĠÚ© Ùħ", + "i ếu", + "iế u", + "Ġ æ°", + "Ġæ °", + "åĮ »", + "Ġz or", + "Ġzo r", + "ί Ïĥ", + "ि ध", + "िठ§", + "Ġп оказ", + "Ġпо каз", + "Ġпок аз", + "Ġпока з", + "ह र", + "Ġiç er", + "ØŃ Ø©", + "ि à¤ĸ", + "िठĸ", + "а да", + "ад а", + "تر ÛĮÙĨ", + "ترÛĮ ÙĨ", + "Ġ bao", + "Ġb ao", + "Ġba o", + "Ġx ã", + "à¹Ģ à¸Ħร", + "à¹Ģà¸Ħ ร", + "Ġngh Ä©", + "à¹ģ à¸ļà¸ļ", + "à¹ģà¸ļ à¸ļ", + "ĠdoÄŁ ru", + "ĠdoÄŁr u", + "Ñĸ ÑĤи", + "ÑĸÑĤ и", + "Ġ بÙĬÙĨ", + "Ġب ÙĬÙĨ", + "ĠبÙĬ ÙĨ", + "Ġ леÑĤ", + "Ġл еÑĤ", + "ا غ", + "Ø§Ø º", + "ÛĮ Ú©ÛĮ", + "ÛĮÚ© ÛĮ", + "r áv", + "rá v", + "à¥į âĢį", + "âĢĻ nin", + "âĢĻn in", + "Ġ ย", + "Ġภ¢", + "åį Ĭ", + "Ġк оли", + "Ġкол и", + "Ġко ли", + "Ġtr ợ", + "éĿ Ĵ", + "ëŀ Ģ", + "Ġ ë¨", + "Ġë ¨", + "Ġ ÙĪØ±", + "ĠÙĪ Ø±", + "ï¾ Ĭ", + "è§ Ĥ", + "Ġ пи", + "Ġп и", + "н Ñĥв", + "нÑĥ в", + "il mesi", + "ilm esi", + "س تÙĩ", + "ست Ùĩ", + "Ġд еÑĢжав", + "ĠдеÑĢж ав", + "å® ĥ", + "åĪ ¥", + "ëħ Ģ", + "л ÑģÑı", + "à¤Ĥ ध", + "Ġ ÑĤи", + "ĠÑĤ и", + "ĠpÅĻ ip", + "ĠpÅĻi p", + "п и", + "á» ĵn", + "á»ĵ n", + "о ваÑĤÑĮ", + "ов аÑĤÑĮ", + "ова ÑĤÑĮ", + "ìĿ´ ëĿ¼", + "æľ Ŀ", + "Ġ ëĺIJ", + "Ġë ĺIJ", + "Ġëĺ IJ", + "ĠÎŃ Î½Î±", + "ĠÎŃν α", + "ãģ¾ ãģ§", + "ج اÙħ", + "جا Ùħ", + "Ġ ëĬ", + "Ġë Ĭ", + "н Ñĸв", + "нÑĸ в", + "ÏĢ Î¿Ïħ", + "ÏĢο Ïħ", + "Ġ زÙħاÙĨ", + "Ġز ÙħاÙĨ", + "ĠزÙħ اÙĨ", + "æĽ ²", + "Ġ ÙħÙĩ", + "ĠÙħ Ùĩ", + "ëł ¨", + "ä¸ ĥ", + "ãģ¨ ãģĹãģ¦", + "l abilir", + "la bilir", + "lab ilir", + "о же", + "ож е", + "å¤ ľ", + "ĠнÑĥж но", + "å½ ©", + "çĪ ±", + "Ġho Ãłn", + "ün ü", + "Ġ ëĦ¤", + "ĠëĦ ¤", + "Ġ جÙĨ", + "Ġج ÙĨ", + "Ġn ÄĽj", + "ĠnÄĽ j", + "к ими", + "ки ми", + "ким и", + "Ġa ynı", + "Ġayn ı", + "Ġ ÙĥÙĦ", + "ĠÙĥ ÙĦ", + "Ġnh au", + "Ạ³", + "ÙĬ ات", + "ÙĬا ت", + "Ġm ezi", + "Ġme zi", + "Ġmez i", + "Ġ ÑĢек", + "ĠÑĢ ÐµÐº", + "ĠÑĢе к", + "Ġ tür", + "Ġt ür", + "Ġ говоÑĢ", + "Ġг овоÑĢ", + "Ġfaz la", + "åĩ Ĩ", + "ÑĪ Ð¸Ð¹", + "ÑĪи й", + "ÐŁ ÑĢи", + "ÐŁÑĢ Ð¸", + "ÑĢ Ð¾ÑģÑĤ", + "ÑĢоÑģ ÑĤ", + "ÑĢо ÑģÑĤ", + "ĠоÑĢг ан", + "ĠоÑĢ Ð³Ð°Ð½", + "n ým", + "ný m", + "Ġ ÑĢод", + "ĠÑĢ Ð¾Ð´", + "Ġ ÙĪÛĮ", + "ĠÙĪ ÛĮ", + "ic ký", + "ick ý", + "ë¦ ¼", + "ï½ ²", + "æĢ İ", + "ĠÙĩ ذا", + "ĠÑĩ аÑģÑĤи", + "ĠÑĩа ÑģÑĤи", + "ĠÑĩаÑģ ÑĤи", + "ĠÑĩаÑģÑĤ и", + "ÃŃ r", + "á»ĩ nh", + "á»ĩn h", + "Ġ íĹ", + "Ġí Ĺ", + "ê »", + "lu ž", + "ÃŃ l", + "c ÃŃch", + "cÃŃ ch", + "å® Ł", + "ãģł ãģ£ãģŁ", + "ÙĬ رة", + "ÙĬر Ø©", + "Ġv Äĥn", + "æ¸ ¯", + "Ġ ÏĦιÏĤ", + "ĠÏĦι ÏĤ", + "ا رت", + "ار ت", + "Ġv ấn", + "âĶģâĶģ âĶģâĶģ", + "å¯ ¾", + "Ïģ ÎŃ", + "Ġг одÑĥ", + "Ġгод Ñĥ", + "Ġ سب", + "Ġس ب", + "ا رات", + "ار ات", + "ارا ت", + "е лей", + "ел ей", + "еле й", + "Ġз аÑħ", + "Ġза Ñħ", + "Ġ важ", + "Ġв аж", + "Ġва ж", + "Ġt á»īnh", + "Ġtá» īnh", + "Ġtá»ī nh", + "ا بع", + "اب ع", + "Ġ à¤ľà¤¬", + "Ġà¤ľ ब", + "Ġà¤IJ स", + "Ġ дÑĥ", + "Ġд Ñĥ", + "Ġ é«ĺ", + "Ġé «ĺ", + "Ġé« ĺ", + "ê² ł", + "н ее", + "не е", + "ï½ Į", + "Ġм ал", + "Ġма л", + "è¾ ¹", + "ãģł ãģij", + "à¹ī ร", + "ÙĤ Ø·", + "Ġb ên", + "Ġs eb", + "Ġse b", + "ĠØ® ÙĪØ§Ùĩ", + "ĠØ®ÙĪ Ø§Ùĩ", + "s iz", + "si z", + "Ġol ur", + "Ġ ëͰ", + "ĠëĶ °", + "Ġ ì¢ĭ", + "Ġì¢ ĭ", + "Ġs vÄĽt", + "Ġsv ÄĽt", + "ĠsvÄĽ t", + "ic ká", + "ick á", + "á» ¹", + "Ġqu ản", + "Ġquả n", + "Ġ иÑģ", + "Ġи Ñģ", + "Ġz aÄį", + "Ġza Äį", + "ื à¸Ńà¸Ļ", + "ืà¸Ń à¸Ļ", + "ÑĶ Ñİ", + "ि ष", + "िठ·", + "ç Ĭ¶", + "çĬ ¶", + "Ïĥ μ", + "ั ส", + "ó c", + "Ġ беÑĢ", + "Ġб еÑĢ", + "Ġ íĿ", + "Ġí Ŀ", + ";: ;:", + "Ġ پس", + "ĠÙ¾ س", + "Ġ ëijIJ", + "Ġë ijIJ", + "Ġëij IJ", + "н иÑĩ", + "ни Ñĩ", + "Ġо ÑĩенÑĮ", + "ĠоÑĩ енÑĮ", + "ĠìķĦìĿ´ ì½ĺ", + "Ġ θα", + "Ġθ α", + "Ġв ÑģÑĤ", + "ĠвÑģ ÑĤ", + "ا دة", + "اد Ø©", + "Ġdev am", + "ื à¸Ńà¸ĩ", + "ืà¸Ń à¸ĩ", + "ĠлÑİ Ð´Ð¸", + "ĠлÑİд и", + "ìĺ Ī", + "á»± a", + "Ñı Ñħ", + "âĢĮ اÛĮ", + "Ġ سÙĪ", + "Ġس ÙĪ", + "å° ¼", + "Ġth ứ", + "Ġthá» ©", + "m eye", + "me ye", + "mey e", + "Ġ èµ", + "Ġè µ", + "èī ¯", + "ĠdeÄŁ iÅŁ", + "ÑĪ Ñĸ", + "Ġtr ợ", + "ĠâĢİ #", + "çĹ ħ", + "ìĽ Į", + "Ġk de", + "Ġkd e", + "Î §", + "æ ¤", + "ĠÑħ аÑĢакÑĤ", + "æ ĩ", + "Ġb iến", + "Ġbi ến", + "ÙĤ ع", + "åŁ Ł", + "Ġн еп", + "Ġне п", + "Ġd ů", + "Ġп иÑĤ", + "Ġпи ÑĤ", + "ĠÑĤ ÑĢеб", + "ĠÑĤÑĢ ÐµÐ±", + "ا زÛĮ", + "از ÛĮ", + "Ġ طر", + "ĠØ· ر", + "Ġ ÙħÙĦ", + "ĠÙħ ÙĦ", + "Ġt ham", + "Ġth am", + "Ġtha m", + "Ġ ÙĪØ¬ÙĪØ¯", + "ĠÙĪØ¬ ÙĪØ¯", + "Ġs vé", + "Ġsv é", + "é§ ħ", + "ا ÛĮÙĨ", + "اÛĮ ÙĨ", + "Ġt iên", + "Ġti ên", + "s tru", + "st ru", + "str u", + "Ġv áºŃy", + "ü ne", + "ün e", + "Ġ à¹Ģม", + "Ġà¹Ģ ม", + "Ġà¹Ģภ¡", + "Ġr ằng", + "а ÑĤÑĥ", + "аÑĤ Ñĥ", + "äº ij", + "н иÑĤ", + "ни ÑĤ", + "ä¼ Ĭ", + "ÙĪ Øµ", + "Ġ éĿ", + "Ġé Ŀ", + "ĠпÑĢоб лем", + "d eki", + "de ki", + "dek i", + "** ************", + "******** ******", + "****** ********", + "******* *******", + "************ **", + "ò a", + "ĠÄijá»ģ u", + "ãĤĮ ãģŁ", + "ا رس", + "ار س", + "ãģª ãģı", + "ا ÙĤع", + "اÙĤ ع", + "è» į", + "Ùĥ Ùħ", + "Äį as", + "Ġk ỳ", + "Ġká» ³", + "Ø´ Ùħ", + "à¥ĩ ड", + "à¥ĩठ¡", + "éĺ ¿", + "Ġje jÃŃ", + "Ġjej ÃŃ", + "Ġ æĻ", + "Ġæ Ļ", + "Ġ Ä°ÅŁ", + "Ġİ ÅŁ", + "ar dım", + "ard ım", + "Ġसम य", + "Ġ ÐĿо", + "ĠÐĿ о", + "i lerin", + "il erin", + "ile rin", + "iler in", + "ileri n", + "Ġع بد", + "Ġعب د", + "n ÃŃk", + "nÃŃ k", + "ĠØ´ Ú©ÙĨ", + "ĠØ´Ú© ÙĨ", + "ิ à¸Ĺย", + "ิà¸Ĺ ย", + "á» ħ", + "ÑĢ ÐµÐ·", + "ÑĢе з", + "Ġch ứng", + "Ġchứ ng", + "Ġ :.", + "Ġ: .", + "Ġ पत", + "Ġप त", + "Ġž ivot", + "Ġživ ot", + "å¢ ĥ", + "« a", + "Ġt rung", + "Ġtr ung", + "ни кÑĸв", + "ник Ñĸв", + "ĠاÙĦ ÙħÙĨ", + "ĠاÙĦÙħ ÙĨ", + "ĠÑĢ Ð°ÑģÑģ", + "ĠÑĢаÑģ Ñģ", + "Ġ жив", + "Ġж ив", + "Ġз акон", + "Ġза кон", + "Ġзак он", + "Ġзако н", + "Ġ 목", + "Ġëª ©", + "Ġz áv", + "Ġzá v", + "Ġh akk", + "Ġha kk", + "Ġhak k", + "ä» ¤", + "ĠÑı кий", + "ĠÑıк ий", + "Ġ بÙĬ", + "Ġب ÙĬ", + "λ ÎŃ", + "oc uk", + "ocu k", + "Ġ Ñİ", + "ĠÑ İ", + "à¸ģ ว", + "Ġ اÙĨÚ¯", + "Ġا ÙĨÚ¯", + "ĠاÙĨ Ú¯", + "à¥ģ à¤Ĥ", + "à¥ģठĤ", + "Ġ nám", + "Ġn ám", + "Ġná m", + "á»ķ ng", + "Ġж ел", + "Ġже л", + "ĠÄij ặc", + "Äį it", + "Äįi t", + "Ġ ê±´", + "Ġê± ´", + "Ġب ÛĮØ´", + "ĠبÛĮ Ø´", + "кÑĢаÑĹ Ð½", + "Ġ ÙĪÙĩ", + "ĠÙĪ Ùĩ", + "н еннÑı", + "нен нÑı", + "Ġ à¹Ģà¸ŀ", + "Ġà¹Ģ à¸ŀ", + "Ġà¹Ģภŀ", + "о мен", + "ом ен", + "Ġl ần", + "Ġ عÙħÙĦ", + "Ġع ÙħÙĦ", + "ĠعÙħ ÙĦ", + "Ġî ģµ", + "Ä ŀ", + "ÑĸÑģ лÑı", + "ư ng", + "ा फ", + "ाठ«", + "à¸Ĺ à¸ĺ", + "д ен", + "де н", + "ĠÑī об", + "ĠÑīо б", + "Ñĩ ив", + "Ñĩи в", + "ılı r", + "ıl ır", + "ا عات", + "اع ات", + "j ÃŃcÃŃ", + "jÃŃ cÃŃ", + "ë² ¨", + "ÚĨ Ùĩ", + "ا رج", + "ار ج", + "ĠÙ¾ رÙĪ", + "Ġپر ÙĪ", + "Ġо дин", + "Ġод ин", + "Ġоди н", + "л ин", + "ли н", + "б Ñĥ", + "Ġसर à¤ķ", + "åĢ Ļ", + "ë¶Ģ íĦ°", + "à¥Īà¤Ĥ ,", + "å ´", + "à¹Ĥ ล", + "Ġv Å¡ak", + "ĠvÅ¡ ak", + "Ġоп ÑĢед", + "ì ±", + "æ ½", + "Ġdá»± ng", + "p ráv", + "pr áv", + "ิ ส", + "Ġnh iá»ĩm", + "Ġil iÅŁ", + "Ġili ÅŁ", + "Ġе Ñīе", + "Ġje Å¡tÄĽ", + "Ġ ÑĢаÑģÑĤ", + "ĠÑĢ Ð°ÑģÑĤ", + "ĠÑĢаÑģ ÑĤ", + "ĠÑĢа ÑģÑĤ", + "ภ®", + "à¤Ĥ à¤Ł", + "âĢĮ Ú©", + "Ġ بÛĮÙĨ", + "Ġب ÛĮÙĨ", + "ĠبÛĮ ÙĨ", + "o vou", + "ov ou", + "ovo u", + "æĻ ®", + "ί εÏĤ", + "о ÑĢоÑĪ", + "оÑĢ Ð¾ÑĪ", + "оÑĢо ÑĪ", + "Ġol mak", + "Ġolm ak", + "Ġolma k", + "Ġst át", + "di ÄŁi", + "Ġt ình", + "Ġ dÄĽ", + "Ġd ÄĽ", + "ĠÚ¯ رÙģ", + "Ġگر Ùģ", + "Ïĥ ο", + "Ġ ÑĥÑĤ", + "ĠÑĥ ÑĤ", + "íķĻ êµIJ", + "ั à¸IJ", + "า à¸Ń", + "าภŃ", + "ĠÄij ặt", + "Ġмог ÑĥÑĤ", + "ĠмогÑĥ ÑĤ", + "ë° °", + "t ik", + "ti k", + "ª ½", + "li ÄŁ", + "ÏĢ Îµ", + "Ġ èĢ", + "Ġè Ģ", + "k ü", + "ad ece", + "ade ce", + "κ ÏĮ", + "Ġ дÑĸ", + "Ġд Ñĸ", + "ầ m", + "çĦ¡ ãģĹ", + "Û²Û° Û±", + "èµ Ľ", + "оÑģ Ñĥд", + "Ġ ìķĪëĤ´", + "ĠìķĪ ëĤ´", + "Ġ ÐĶж", + "ĠÐĶ Ð¶", + "åº §", + "ic kých", + "ick ých", + "ický ch", + "Ġ ìłģ", + "Ġì łģ", + "Ġìł ģ", + "à¥ĩ ,", + "ov ého", + "ové ho", + "Ġv ẫn", + "Ġbirlik te", + "Ġर à¤ĸ", + "Ġ ÙĨÙĩ", + "ĠÙĨ Ùĩ", + "ÙĤ ر", + "प र", + "e tÃŃ", + "et ÃŃ", + "Ġ ÑĤÑĭ", + "ĠÑĤ Ñĭ", + "Ģ ìĿ´", + "Ġà¤ħ ल", + "Ġм оже", + "Ġмож е", + "Ġмо же", + "ãĤ ´", + "Ġs tran", + "Ġst ran", + "Ġstr an", + "Ġstra n", + "Ø· ر", + "è¿Ļ 个", + "Ġ بع", + "Ġب ع", + "åĨ Ľ", + "ek tir", + "ekt ir", + "Ġh Æ°á»Ľng", + "ÙĨ اÙĨ", + "ÙĨا ÙĨ", + "Ġठij", + "Ġà ¤ij", + "ÏĮ ÏĦη", + "о Ñģк", + "оÑģ к", + "åį ĥ", + "as ına", + "ası na", + "Ġ Ø´Ùĩ", + "ĠØ´ Ùĩ", + "Ġ деÑĢ", + "Ġд еÑĢ", + "Ġде ÑĢ", + "ĠÙħ خت", + "ĠÙħØ® ت", + "Ġ ØŃÙĤ", + "ĠØŃ ÙĤ", + "ãĥ ¾", + "س اÙĨ", + "Ġc ung", + "Ġcu ng", + "ко ÑĢиÑģÑĤ", + "коÑĢ Ð¸ÑģÑĤ", + "ÏĦ ικά", + "ÏĦικ ά", + "ÏĦι κά", + "Ġв она", + "Ġво на", + "ب ا", + "ãģķ ãĤĮãģŁ", + "ãģķãĤĮ ãģŁ", + "n out", + "no ut", + "nou t", + "Ġ ı", + "ĠÄ ±", + "è§ ī", + "ĠÃ¶ÄŁ ren", + "Ġ ì½Ķ", + "Ġì ½Ķ", + "Ġì½ Ķ", + "å¸ ¦", + "Ñģ лов", + "Ñģл ов", + "Ġε ÏĢι", + "ĠεÏĢ Î¹", + "ê° IJ", + "ĠÙħ رب", + "ĠÙħر ب", + "ĠÙģÛĮ ÙĦÙħ", + "Ġк ÑĢов", + "Ġ ëį°", + "Ġë į°", + "Ġëį °", + "ा ण", + "ाठ£", + "Ġel ekt", + "Ġele kt", + "Ġelek t", + "Ġ наÑĢод", + "Ġн аÑĢод", + "Ġна ÑĢод", + "ĠнаÑĢ Ð¾Ð´", + "ÛĮ دÙĩ", + "ÛĮد Ùĩ", + "ç´ Ħ", + "Ġп ÑĢоÑĦ", + "ĠпÑĢ Ð¾ÑĦ", + "ĠпÑĢо ÑĦ", + "Ïģ οÏĤ", + "Ïģο ÏĤ", + "Ġ ãħ", + "ä¸į æĺ¯", + "Ġ à¤ľà¤¨", + "Ġà¤ľ न", + "ั ล", + "Ġص ÙĪØ±Øª", + "ĠصÙĪØ± ت", + "ãĥ ľ", + "Ġà¤Ĺ à¤Ī", + "ÄŁi tim", + "ÄŁit im", + "ÑģÑĮ киÑħ", + "ÑģÑĮк иÑħ", + "Ġ лег", + "Ġл ег", + "Ġت ÙĪÙĦ", + "ĠتÙĪ ÙĦ", + "Ġ ìļ´", + "Ġìļ ´", + "ع ر", + "Ġm Ãłu", + "ĠmÃł u", + "г ов", + "го в", + "æ³ ¢", + "in deki", + "ind eki", + "inde ki", + "ìłģ ìĿ¸", + "ấ m", + "Ġ íĻķ", + "ĠíĻ ķ", + "Ġب اÛĮد", + "Ġبا ÛĮد", + "ĠباÛĮ د", + "à¹Į à¸Ĺ", + "Ġk endi", + "Ġken di", + "Ġkend i", + "ี ว", + "ิ à¸ģาร", + "ิà¸ģ าร", + "ิà¸ģา ร", + "ĠÚ© ردÙĩ", + "Ġکرد Ùĩ", + "Ġکر دÙĩ", + "å· ´", + "ठģ", + "ร าà¸Ĭ", + "à¥į श", + "à¥įठ¶", + "Ġ ÐĶлÑı", + "ĠÐĶ Ð»Ñı", + "å¥ ĩ", + "ĠÑĥ ÑģÑĤанов", + "ĠÑĥÑģÑĤ анов", + "ĠÑĥÑģÑĤан ов", + "й ÑĤе", + "ãĤ ĩ", + "ά Ïģ", + "Ġ Ю", + "ĠÐ ®", + "Ġlu áºŃt", + "ãĢ ī", + "è´ ¨", + "د ا", + "Ġdü zen", + "Ġdüz en", + "ส à¸Ļ", + "ÑĢ Ð¾Ð½", + "ÑĢо н", + "d ıģı", + "dı ģı", + "dıģ ı", + "âĢĻ da", + "âĢĻd a", + "Ġfark lı", + "Ñħ ов", + "Ñħо в", + "l án", + "lá n", + "Ñĩ аÑģ", + "Ñĩа Ñģ", + "Ñĩ ин", + "Ñĩи н", + "Ġ ì°¸", + "Ġì° ¸", + "ì ´Ī", + "ì´ Ī", + "ÑĨ ип", + "ÑĨи п", + "ç ¹", + "éĸ Ģ", + "ж а", + "ÑĢ Ð¾Ð²Ð°Ð½", + "ÑĢов ан", + "ÑĢо ван", + "ÑĢова н", + "à¸ĵ ะ", + "ÙĦÙĬ زÙĬØ©", + "Ïĩ ει", + "Ïĩε ι", + "à¥Ī .", + "к Ñģп", + "кÑģ п", + "ا ÙĪØ±", + "اÙĪ Ø±", + "Ġng uyên", + "Ġnguy ên", + "ãģ« ãĤĪ", + "à¥ĩ म", + "à¥ĩठ®", + "Ïĥ ÏĦε", + "ÏĥÏĦ ε", + "ت ÙĪ", + "Äį ek", + "Äįe k", + "ÑĨ Ñĭ", + "Ġ 물", + "Ġë¬ ¼", + "Ñį ÑĤ", + "Ġka zan", + "Ġkaz an", + "Ùģ Ø³", + "e hir", + "eh ir", + "в ÑĸÑĤ", + "вÑĸ ÑĤ", + "Ġد ÙĪÙĦ", + "ĠدÙĪ ÙĦ", + "Ġ ëĵľ", + "Ġëĵ ľ", + "Ġà¤ļ ल", + "е ÑģÑĤва", + "еÑģÑĤв а", + "еÑģÑĤ ва", + "δ α", + "Ġб Ñĥв", + "ĠбÑĥ в", + "Ġ ÐĿе", + "ĠÐĿ е", + "ØŃ ر", + "огÑĢа ÑĦ", + "Ġroz hod", + "Ġrozh od", + "Ġви коÑĢиÑģÑĤ", + "Ġвико ÑĢиÑģÑĤ", + "Ġy êu", + "λ οÏĤ", + "λο ÏĤ", + "Ú© س", + "Ġ شب", + "ĠØ´ ب", + "ิ ษ", + "æ¯ į", + "Ġд оÑĢ", + "Ġдо ÑĢ", + "Ġngh á»ĩ", + "Ġt rang", + "Ġtr ang", + "Ġtra ng", + "Ġtran g", + "à¥ĩ द", + "à¥ĩठ¦", + "Ġt ìm", + "Ñĩ но", + "Ġ اÙħا", + "Ġا Ùħا", + "ĠاÙħ ا", + "éģ ĭ", + "Ú© ر", + "k é", + "Ġ vÄĽt", + "Ġv ÄĽt", + "ĠvÄĽ t", + "Ġн аÑģÑĤ", + "Ġна ÑģÑĤ", + "ĠнаÑģ ÑĤ", + "Ġ æ±", + "Ġæ ±", + "Ġ åĽ½", + "ĠåĽ ½", + "Ġgi ảm", + "Ġgiả m", + "ا دÙĬ", + "اد ÙĬ", + "ëĤ ľ", + "ë¡ ł", + "Ġ 、", + "Ġï½ ¤", + "Ġд енÑĮ", + "Ġде нÑĮ", + "Ġден ÑĮ", + "ÑĨ ÑĸÑİ", + "ÑĨÑĸ Ñİ", + "Ġh ạn", + "Ġhạ n", + "ẳ ng", + "ẳn g", + "λ ή", + "e yen", + "ey en", + "eye n", + "ä¸ Ķ", + "æŃ ¦", + "ĠÑĦ ак", + "à¹Ī à¸Ńà¸Ļ", + "à¹Īà¸Ń à¸Ļ", + "Ġ οι", + "Ġο ι", + "ز Ùħ", + "ãģĹ ãģ¦ãģĦãĤĭ", + "ãģĹãģ¦ ãģĦãĤĭ", + "ãģĹãģ¦ãģĦ ãĤĭ", + "л ива", + "ли ва", + "лив а", + "âĢķ âĢķ", + "Ġ öl", + "Ġö l", + "Ġ à¤ĵ", + "Ġठĵ", + "Ñģ ÑĤÑĸ", + "ÑģÑĤ Ñĸ", + "à¸ģ รรม", + "à¸ģร รม", + "Ġt ục", + "Ġtụ c", + "Ġgö rün", + "Ġgör ün", + "ãģĹ ãģ¾", + "ãģĹãģ ¾", + "Ġ ì¦", + "Ġì ¦", + "é ¦¬", + "é¦ ¬", + "Ġмож на", + "Ġ Ú©ÙĦ", + "ĠÚ© ÙĦ", + "Ġ ÑĨенÑĤ", + "ĠÑĨ енÑĤ", + "ĠÑĨе нÑĤ", + "ĠÑĨен ÑĤ", + "Ġ ìϏ", + "ĠìĻ ¸", + "Î ĺ", + "ç ĩ", + "Ġg elen", + "Ġge len", + "Ġgel en", + "Ġgele n", + "Ġ اÙĬÙĨ", + "Ġا ÙĬÙĨ", + "ĠاÙĬ ÙĨ", + "ĠØ¢ ب", + "Ġà¤Ĩ य", + "ัà¸ģ ษ", + "Ñģ им", + "Ñģи м", + "Ġб олÑĮÑĪ", + "ĠболÑĮ ÑĪ", + "Ġм н", + "о ди", + "од и", + "Ġİ l", + "Ġ à¤Ĩर", + "Ġà¤Ĩ र", + "е ÑĤе", + "еÑĤ е", + "ÑĨ иÑİ", + "ÑĨи Ñİ", + "áºŃ u", + "Ġt iếng", + "Ġtiế ng", + "Ġtiến g", + "ë ¶ģ", + "ë¶ ģ", + "æ§ ĺ", + "Ġн аÑĪ", + "Ġна ÑĪ", + "ม า", + "âĢĻ Ä±n", + "âĢĻı n", + "ãĥĥ ãĥĹ", + "ÙĪ Ø¬Ùĩ", + "ÙĪØ¬ Ùĩ", + "Ġ ØŃد", + "ĠØŃ د", + "á vá", + "áv á", + "ر ÙĪØ´", + "رÙĪ Ø´", + "Ġ дейÑģÑĤв", + "Ġд ейÑģÑĤв", + "ãģ£ ãģ¦ãģĦãĤĭ", + "ãģ£ãģ¦ ãģĦãĤĭ", + "ãģ£ãģ¦ãģĦ ãĤĭ", + "Ïģ ή", + "Ġ üst", + "Ġü st", + "Ġt iết", + "Ġti ết", + "Ġtiế t", + "ac aÄŁ", + "aca ÄŁ", + "Ġ ÐŁÐ¾", + "ĠÐŁ о", + "é Ĭ", + "ë¨ ¸", + "c hod", + "ch od", + "cho d", + "ĠØ¢Ùħ ÙĪØ²", + "ãģŁ ãĤģ", + "Ġch uyên", + "Ġuy gu", + "Ġuyg u", + "н ÑĸÑģÑĤ", + "нÑĸ ÑģÑĤ", + "ë ´", + "æİ §", + "Ñĥ ÑİÑĤÑĮ", + "ÑĥÑİ ÑĤÑĮ", + "ÑĥÑİÑĤ ÑĮ", + "Äį i", + "ãģ ¹", + "à¥Ĥ न", + "æĹ ©", + "ãĥĩ ãĤ£", + "è Ĵ", + "ĠØ´ خص", + "ĠÑħ оÑĤ", + "ĠÚ©ÙĨ ÛĮد", + "г л", + "à¸Ń à¸Ńà¸ģ", + "à¸Ńà¸Ń à¸ģ", + "éĢ Ļ", + "Ġز ÛĮر", + "ĠزÛĮ ر", + "íķ Ń", + "ĠÃĸ z", + "åij ³", + "ØŃ دة", + "ØŃد Ø©", + "Ġk ažd", + "Ġ ÑĨвеÑĤ", + "ĠÑĨ веÑĤ", + "Ġ ç¾", + "Ġç ¾", + "Ġк ож", + "Ġко ж", + "Ġ ÐŃÑĤо", + "ĠÐŃ ÑĤо", + "ÑıÑĤ елÑĮ", + "ла ÑģÑĮ", + "лаÑģ ÑĮ", + "âĢĮ Ø´ÙĪØ¯", + "âĢĮØ´ ÙĪØ¯", + "μ ι", + "Ġ æ²", + "Ġæ ²", + "Ġs üre", + "Ġsü re", + "Ġsür e", + "ล ะ", + "éħ Ĵ", + "ึà¸ģ ษ", + "λ λά", + "λλ ά", + "ç ij", + "Ġ ìĥĪ", + "Ġìĥ Ī", + "Ġस ह", + "ĠH Ãł", + "리 ê³ł", + "ص ر", + "Ġ æĬķ", + "ĠæĬ ķ", + "éł Ń", + "Ġb á»ĩnh", + "ĠìĥĿ ê°ģ", + "Ġà¤ħ à¤Ń", + "ê³µ ì§Ģ", + "ì Ķ", + "á» Ŀi", + "á»Ŀ i", + "ç ŃĶ", + "çŃ Ķ", + "Ġb Ãłi", + "ĠbÃł i", + "о дÑĸ", + "од Ñĸ", + "า à¸Ĥ", + "าภĤ", + "ни ков", + "ник ов", + "Ġdön em", + "Ġdö nem", + "ว ม", + "ãĥĨ ãĤ£", + "ा रण", + "ार ण", + "о ги", + "ог и", + "Ġk iá»ĥm", + "Ġki á»ĥm", + "о ÑĦ", + "äº Ī", + "åĨ ³", + "ا ÙĦات", + "اÙĦ ات", + "اÙĦا ت", + "Ġn ếu", + "Ġ cest", + "Ġc est", + "Ġce st", + "Ġces t", + "ز Ø´", + "Ùİ ÙĦ", + "Ġت Ø£", + "ĠÄij ạo", + "Ïį ν", + "Ġв нÑĥ", + "Ġ جاÙħ", + "Ġج اÙħ", + "Ġجا Ùħ", + "i vnÃŃ", + "iv nÃŃ", + "Ġìŀ ĪìĬµëĭĪëĭ¤", + "ĠìŀĪ ìĬµëĭĪëĭ¤", + "Ï Ĭ", + "æĦ Ľ", + "ãĥ Ľ", + "м Ñĸн", + "мÑĸ н", + "Ġt ÃŃm", + "ĠtÃŃ m", + "ằ m", + "ê· ł", + "äº ķ", + "Ġx ây", + "Ġ ìĽĶ", + "ĠìĽ Ķ", + "е лен", + "ел ен", + "еле н", + "Ġ à¹Ĥà¸Ķย", + "Ġà¹Ĥ à¸Ķย", + "ا ÙĦÙĩ", + "اÙĦ Ùĩ", + "Ġb ất", + "á»ĵ m", + "âĢĮ Ú¯", + "ÙĪ Ø±Ø©", + "ÙĪØ± Ø©", + "ب ات", + "با ت", + "Ġb án", + "ẫ u", + "اÙĨ ÙĪÙĨ", + "اÙĨÙĪ ÙĨ", + "Ġzá kon", + "á ž", + "ì¶ Ķ", + "à¹ģ à¸ģ", + "ãĤį ãģĨ", + "ÑĢ Ð¾ÑĤ", + "ÑĢо ÑĤ", + "ç ĵ", + "Ġв они", + "Ġво ни", + "Ġx ác", + "Ġ دÛĮگر", + "ĠدÛĮ گر", + "ÏĢ Î¿Î¹", + "ÏĢο ι", + "Ġне Ñģк", + "ĠнеÑģ к", + "ر سÛĮ", + "رس ÛĮ", + "Ġ ëĿ¼", + "Ġë Ŀ¼", + "ت ÙĦ", + "λ ά", + "ĠÑıв лÑıеÑĤÑģÑı", + "ä¾ Ŀ", + "Ġ åħ¬", + "Ġåħ ¬", + "Ĺ i", + "Ġ íĬ¹", + "ĠíĬ ¹", + "Ùĥ ÙĪÙĨ", + "ÙĥÙĪ ÙĨ", + "ắ p", + "جÙħ ÙĪØ¹", + "ÏĨ οÏģ", + "ÏĨο Ïģ", + "е ло", + "ел о", + "Ġg üven", + "Ġgü ven", + "Ġм ай", + "Ġма й", + "ĠÑģ оз", + "ĠÑģо з", + "à¸ģ ระ", + "à¸ģร ะ", + "Ġا سÙĦاÙħ", + "Ġاس ÙĦاÙħ", + "Ġ Ñīе", + "ĠÑī е", + "Ġs á»ijng", + "Ġsá»ij ng", + "à¥į ब", + "à¥įठ¬", + "Ú© ار", + "کا ر", + "Ġthu áºŃt", + "Ġ nÃŃ", + "Ġn ÃŃ", + "第 ä¸Ģ", + "è¦ ĸ", + "à¹Ģà¸ģ ม", + "ا ÙĬØ©", + "اÙĬ Ø©", + "Ġ ÎĪ", + "ĠÎ Ī", + "ãĤ ¶", + "ĠÙħ ÙĪÙĤع", + "ĠÙħÙĪ ÙĤع", + "Ġ åĴ", + "Ġå Ĵ", + "è¡ ĵ", + "Ġ Ðŀд", + "ĠÐŀ д", + "Ġ ä¸ī", + "Ġä¸ ī", + "ler inde", + "leri nde", + "lerin de", + "ĠÑģв оÑĹ", + "ĠÑģво ÑĹ", + "à¥Ģ à¤ı", + "Ġth ương", + "Ïĥ ÏĦο", + "ÏĥÏĦ ο", + "Ġ غÙĬر", + "Ġغ ÙĬر", + "Ġ پر", + "ĠÙ¾ ر", + "ĠÑģеб е", + "Ġв к", + "Ġk hai", + "Ġkh ai", + "ãĤ Ģ", + "ĠÙĨ ظر", + "ĠÙĨظ ر", + "Ġдок Ñĥм", + "à¹ĩ à¸ļ", + "Ġ íķľêµŃ", + "Ġíķľ êµŃ", + "ï½ ī", + "å·¥ ç¨ĭ", + "Ġ ÙĪÙĦ", + "ĠÙĪ ÙĦ", + "ØŃ ÙĬ", + "Ġп ла", + "Ġпл а", + "Ġ İstanbul", + "Ġİ stanbul", + "âĢĻ de", + "âĢĻd e", + "а лÑģÑı", + "ал ÑģÑı", + "ĠØ¢ÙĨ Ùĩا", + "Ġ اÙĩ", + "Ġا Ùĩ", + "Ġ ê´Ģ리", + "Ġê´Ģ 리", + "Ġ anh", + "Ġa nh", + "Ġan h", + "Å¡ ÃŃm", + "Å¡ÃŃ m", + "lar la", + "ï¼ Ŀ", + "n ostÃŃ", + "no stÃŃ", + "nost ÃŃ", + "nos tÃŃ", + "ÑģÑĤ ве", + "ÑģÑĤв е", + "ÛĮ Ùģ", + "Ġ گرد", + "ĠÚ¯ رد", + "Ġگر د", + "ãĤĮ ãĤĭ", + "Ġv á»±", + "Ġvá» ±", + "ÄĽ nÃŃ", + "ÄĽn ÃŃ", + "Ġgö rev", + "Ġgör ev", + "Ġgöre v", + "Ġyıl ında", + "Ġyılı nda", + "Ġyı lında", + "Ġl ợi", + "Ġlá» £i", + "Ġan lam", + "Ġп ÑĢовод", + "ĠпÑĢо вод", + "ĠпÑĢов од", + "ÑĨ Ñİ", + "Ġ åī", + "Ġå ī", + "Ġë§ İ", + "ÑĢ Ð°Ñģ", + "ÑĢа Ñģ", + "Ġ Ž", + "ĠÅ ½", + "Ú© اÙĨ", + "کا ÙĨ", + "Ð Ļ", + "ãģ£ ãģ¨", + "ãģ£ãģ ¨", + "Ú© ÙĦ", + "า ยà¸Ļ", + "าย à¸Ļ", + "ع اÙĦ", + "عا ÙĦ", + "Ġ ký", + "Ġk ý", + "ĠмаÑĤ еÑĢи", + "Ġма ÑĤеÑĢи", + "ê» ĺ", + "ıl ması", + "μ ÎŃν", + "μÎŃ Î½", + "ĠÙĨ ÙħÛĮ", + "ĠÙĨÙħ ÛĮ", + "Ġcu á»Ļc", + "Ġδ εν", + "Ġδε ν", + "å¹ ²", + "_ ___", + "__ __", + "___ _", + "à¥Ģ à¤Ł", + "Ġçık ar", + "Ġçı kar", + "Ġkon uÅŁ", + "Ġkonu ÅŁ", + "иÑĤ елÑĮно", + "иÑĤелÑĮ но", + "lan tı", + "lant ı", + "à¹Ħ ล", + "å¾ ĭ", + "Ġ íͼ", + "ĠíĶ ¼", + "ìĻ ¸", + "Ġs áng", + "éģ Ķ", + "о жд", + "ож д", + "Ġ آخر", + "ĠØ¢ خر", + "il ece", + "ile ce", + "à¥Ī न", + "Ġ jedn", + "Ġj edn", + "Ġje dn", + "Ġjed n", + "ĠÑģпе ÑĨи", + "´ Ŀ", + "Ġ Úĺ", + "Ġ ãĢĤĊ", + "ĠãĢĤ Ċ", + "èģ Į", + "Ġ ÙĨÛĮ", + "ĠÙĨ ÛĮ", + "ÑĤ оÑĢа", + "ÑĤо ÑĢа", + "ÑĤоÑĢ Ð°", + "λ ι", + "Ġ ÙĪØ¨", + "ĠÙĪ Ø¨", + "iÅŁ im", + "iÅŁi m", + "ç» ´", + "ãĢĢ i", + "Ġm ua", + "Ġmu a", + "Ġj iž", + "Ġji ž", + "è¶ Ĭ", + "ãĤĴ è¦ĭ", + "Ġn á»Ļi", + "à¥į à¤Ĺ", + "à¥įठĹ", + "ç¨ ®", + "Ġ ãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢ", + "à¹ĥ หม", + "à¹ĥห ม", + "Ġ ÎĨ", + "ĠÎ Ĩ", + "ÙĨ دÛĮ", + "ÙĨد ÛĮ", + "ĠÑģ Ñĩ", + "Ġl á»ĩ", + "Ġlá» ĩ", + "l ub", + "lu b", + "еÑĢ ÑĤ", + "Ġ اطÙĦ", + "Ġا Ø·ÙĦ", + "Ġاط ÙĦ", + "ĠÑģ еÑĢед", + "ĠÑģеÑĢ ÐµÐ´", + "Ġ éģ", + "Ġé ģ", + "Ġз ал", + "Ġза л", + "ÙĨ ÛĮÙĨ", + "ÙĨÛĮ ÙĨ", + "çŁ¥ éģĵ", + "Ø¢ ÙĨ", + "Ġ кап", + "Ġк ап", + "Ġка п", + "Ġ à¹Ħม", + "Ġà¹Ħ ม", + "ů vod", + "ův od", + "ĠÙ¾ اÛĮ", + "Ġپا ÛĮ", + "ÑĤ ÑĢи", + "ÑĤÑĢ Ð¸", + "Ġi ht", + "Ġih t", + "๠Ĭ", + "Ġв ÑģÑĸ", + "ĠвÑģ Ñĸ", + "Ġt hay", + "Ġth ay", + "Ġtha y", + "å Ĩµ", + "åĨ µ", + "Ġ عÙĨÙĪØ§ÙĨ", + "ĠعÙĨ ÙĪØ§ÙĨ", + "Ġ Î¥", + "ĠÎ ¥", + "ภĿ", + "ε ÏĦαι", + "εÏĦ αι", + "iyor du", + "ï¼Į èĢĮ", + "çļĦ 人", + "Ġ सà¤Ń", + "Ġस à¤Ń", + "à¹ī à¸Ńย", + "à¹īà¸Ń ย", + "ι κο", + "ικ ο", + "ãĤĵ ãģ§", + "ì¡ ±", + "ÙĨج ÙĦÙĬزÙĬØ©", + "Ġž ád", + "ÑĢ Ð°Ð²Ð¸", + "ÑĢа ви", + "ÑĢав и", + "γ γ", + "æµ ĭ", + "о ÑĨÑĸ", + "ãĢĢ ãĢĢĠãĢĢ", + "ãĢĢãĢĢ ĠãĢĢ", + "ãĢĢãĢĢĠ ãĢĢ", + "Ġतर ह", + "Ġ ëĨ", + "Ġë Ĩ", + "à¥Ģ à¤ļ", + "à¹Ī ม", + "Ġg á»ĵm", + "Ġk iá»ĩn", + "Ġki á»ĩn", + "è· Ł", + "Î ¦", + "es inin", + "esi nin", + "esini n", + "esin in", + "é ¥", + "é« Ķ", + "о Ñĩно", + "оÑĩ но", + "र ण", + "æĺ ¥", + "ç¶ ĵ", + "Ġ بار", + "Ġب ار", + "Ġبا ر", + "ê· ¼", + "éĻ ħ", + "Ġ سÙĬ", + "Ġس ÙĬ", + "Ñģ ÑĥÑĤ", + "ÑģÑĥ ÑĤ", + "ì µľ", + "å± ħ", + "ĠÄį esk", + "ĠÄįe sk", + "Îij ÎĿ", + "Ġd iá»ĩn", + "Ġdi á»ĩn", + "Ġ εί", + "Ġε ί", + "à¸ĩ à¸Ĺ", + "ãĤ ©", + "Ġv á»±c", + "Ġvá»± c", + "в ав", + "ва в", + "t ıģı", + "tı ģı", + "tıģ ı", + "Ġ ëªħ", + "Ġëª ħ", + "η ν", + "в иÑĤ", + "ви ÑĤ", + "Ġ Ø£Ùĥ", + "ĠØ£ Ùĥ", + "Ġп ÑĢоп", + "ĠпÑĢ Ð¾Ð¿", + "ĠпÑĢо п", + "r ak", + "ra k", + "ÑĢ Ð°ÑĤи", + "ÑĢа ÑĤи", + "ÑĢаÑĤ и", + "ĠÄij ánh", + "ĠÄijá nh", + "ÑĢ ÐµÐ¿", + "ÑĢе п", + "ê ´ij", + "ê´ ij", + "е ÑĨÑĮ", + "еÑĨ ÑĮ", + "Ġब त", + "Ġ åĮĹ", + "ĠåĮ Ĺ", + "Ġs át", + "l edi", + "le di", + "led i", + "ìłģ ìľ¼ë¡ľ", + "ů j", + "Û° Û°", + "Ġnas ıl", + "Ġ ÙĪØ³", + "ĠÙĪ Ø³", + "Ġ εξ", + "Ġε ξ", + "в Ñĭ", + "ç½ Ĺ", + "ارÛĮ Ø®", + "à¸Ľ ล", + "ί κ", + "Ġ ê¸Ī", + "Ġê¸ Ī", + "åĩ ł", + "å¼ ·", + "è¿ Ķ", + "Ġnh á»ı", + "å¾ Ģ", + "Ġда же", + "Ġç ev", + "к Ñĸ", + "Ġ Ø£Ùħ", + "ĠØ£ Ùħ", + "ี ส", + "ส ามารà¸ĸ", + "สาม ารà¸ĸ", + "Ġ ÐĦ", + "ĠÐ Ħ", + "Ñħод иÑĤ", + "ë ĸ", + "Ġtr uyá»ģn", + "Ġtruy á»ģn", + "Ġ ÑģÑĤан", + "ĠÑģÑĤ ан", + "ĠÑģÑĤа н", + "ëĵ¤ ìĿĢ", + "ا ÙĦت", + "اÙĦ ت", + "़ à¥ĩ", + "Ġ à¤ħब", + "Ġà¤ħ ब", + "æķ ¸", + "Ġд ÑĸÑı", + "ĠдÑĸ Ñı", + "ĠÙħ تر", + "ĠÙħت ر", + "Ġ ë¸", + "Ġë ¸", + "ï¾ į", + "Ġ ê³¼", + "Ġê³ ¼", + "Ġ زÛĮ", + "Ġز ÛĮ", + "ëŁ ¼", + "Ġ ÐŁÐµÑĢ", + "ĠÐŁ еÑĢ", + "Ġs ık", + "Ġsı k", + "н оÑģÑĤÑĮÑİ", + "ноÑģÑĤÑĮ Ñİ", + "ноÑģÑĤ ÑĮÑİ", + "Ġ eden", + "Ġe den", + "Ġed en", + "ا در", + "اد ر", + "ã Ħ", + "Ġ леÑĩ", + "Ġл еÑĩ", + "ĠÙĩ ذÙĩ", + "ض ÙĪØ¹", + "ضÙĪ Ø¹", + "ĠìķĦ ëĭĪ", + "ĠìķĦëĭ Ī", + "ir ket", + "irk et", + "Ġ اگر", + "Ġا گر", + "ĠÑħ оÑĩ", + "Ġб ан", + "Ġба н", + "íĶ Į", + "æĢİ ä¹Ī", + "è Ľ", + "Ġब à¤ļ", + "ĠÚ© تاب", + "çī Į", + "Ġд ва", + "Ġдв а", + "ج ر", + "Ġп ÑĢоÑģÑĤо", + "ĠпÑĢоÑģÑĤ о", + "ĠпÑĢоÑģ ÑĤо", + "Ġà¤Ĩ व", + "Ġm ức", + "į ¼", + "Ġ jÃŃ", + "Ġj ÃŃ", + "íİ ĺ", + "Ġt amam", + "Ġta mam", + "Ġtam am", + "åĪ Ľ", + "ภĴ", + "п еÑĩ", + "пе Ñĩ", + "à¥ĭ स", + "Ġ Ñģем", + "ĠÑģ ем", + "Ġt ương", + "ä¸ ģ", + "ī ´", + "Ġ ÑĢоÑģ", + "ĠÑĢ Ð¾Ñģ", + "Ġ маÑĶ", + "Ġм аÑĶ", + "Ġма ÑĶ", + "æŃ Į", + "Ġ داÙĨÙĦÙĪØ¯", + "ĠداÙĨ ÙĦÙĪØ¯", + "ĠL oÃłi", + "ĠLo Ãłi", + "Ġed ilm", + "Ġedi lm", + "Ġedil m", + "Ġk onu", + "Ġko nu", + "Ġkon u", + "ĠاÙĦ Ùħر", + "ĠاÙĦÙħ ر", + "Ġu laÅŁ", + "Ġul aÅŁ", + "Ġyük sek", + "ο ι", + "Ùİ ÙĨ", + "Ġ bÄĽ", + "Ġb ÄĽ", + "ãĤ·ãĥ§ ãĥ³", + "ï¿£  ̄ ̄ ̄", + " ̄ ̄  ̄ ̄", + " ̄ ̄ ̄ ï¿£", + "Ġg üç", + "Ġgü ç", + "Ġ اÙĪÙĦ", + "Ġا ÙĪÙĦ", + "ĠاÙĪ ÙĦ", + "Ġ ма", + "Ġм а", + "Ġب خش", + "Ġبخ Ø´", + "ा à¤ĸ", + "ाठĸ", + "Ġв иÑģ", + "Ġви Ñģ", + "ž enÃŃ", + "že nÃŃ", + "žen ÃŃ", + "Ġz působ", + "Ġzp ůsob", + "z nam", + "zn am", + "Ġ رÙĪÛĮ", + "Ġر ÙĪÛĮ", + "ĠرÙĪ ÛĮ", + "åĭ Ŀ", + "। Ċ", + "ÙĦ ÙĤ", + "Ġж из", + "ÑĢ Ñĸв", + "ÑĢÑĸ в", + "ĠÑĥ пÑĢав", + "ĠÑĥп ÑĢав", + "Ġph á»ij", + "ic ros", + "icro s", + "Ġ à¹ģà¸ķ", + "Ġà¹ģ à¸ķ", + "Ġ ë°ķ", + "Ġë° ķ", + "ÙĪ Ø§Øª", + "ÙĪØ§ ت", + "ï¼Į ä¸Ģ", + "ан Ñģ", + "ç´ ļ", + "ย à¸Ļ", + "à¹ģ à¸Ĥ", + "Ġgi áo", + "Ġgiá o", + "äºĮ äºĮ", + "Ġ İs", + "Ġİ s", + "ìĬ ¹", + "Ġo lacak", + "Ġol acak", + "Ġola cak", + "Ġ Các", + "ĠC ác", + "Ġ ÑĢÑĥб", + "ĠÑĢ Ñĥб", + "ĠÑĢÑĥ б", + "ẹ p", + "ÄŁ iniz", + "ÄŁini z", + "ÄŁin iz", + "ãģª ãģ©", + "Ġ моÑĢ", + "Ġм оÑĢ", + "Ġмо ÑĢ", + "ĠÑģ дел", + "ÙĦ ÙħاÙĨ", + "ÙĦÙħ اÙĨ", + "n ém", + "né m", + "å° į", + "Ġd ne", + "Ġdn e", + "ì¶ľ ìŀ¥", + "ع ب", + ": ::::::", + ":: :::::", + ":::: :::", + ":::::: :", + "::: ::::", + "::::: ::", + "Î Ĵ", + "e ket", + "ek et", + "Ġ ÑĢеÑĪ", + "ĠÑĢ ÐµÑĪ", + "ĠÑĢе ÑĪ", + "è ά", + "èĪ ¬", + "Ġ íĻĶ", + "ĠíĻ Ķ", + "ص د", + "Ġ маÑĢ", + "Ġм аÑĢ", + "Ġма ÑĢ", + "Ñı ж", + "Ø´ ار", + "ãģ ²", + "Ġ اÙĦÙĬ", + "Ġا ÙĦÙĬ", + "ĠاÙĦ ÙĬ", + "Ù į", + "à¤Ĥ à¤ľ", + "м Ñĭ", + "Ġka rar", + "Ġkar ar", + "Ġkara r", + "ÙĦÛĮ سÛĮ", + "ÙĦÛĮس ÛĮ", + "า à¸ĵ", + "าภĵ", + "ç¾ ¤", + "Ġol ması", + "Ġolm ası", + "Ġolma sı", + "Ġhaz ır", + "γÏģα ÏĨ", + "¯ u", + "в ол", + "во л", + "ĠÑģ ÑĤаÑĢ", + "ĠÑģÑĤ аÑĢ", + "ĠÑģÑĤа ÑĢ", + "o vala", + "ov ala", + "ova la", + "oval a", + "Ġв озмож", + "Ġвоз мож", + "Ġ дав", + "Ġд ав", + "Ġда в", + "é¢ ¨", + "ر ا", + "Ġдоп ом", + "ê² ĥ", + "Ġ ìĺ¬", + "Ġìĺ ¬", + "Ġ åİ", + "Ġå İ", + "Ġ 못", + "Ġëª »", + "u ç", + "í ļ", + "l ük", + "lü k", + "ä¸Ń å¿ĥ", + "Ġ दर", + "Ġद र", + "Ġ âĹĨ", + "ĠâĹ Ĩ", + "Ġt ay", + "Ġta y", + "Ġب سÛĮ", + "Ġبس ÛĮ", + "Ġ ÏĥÏĦα", + "ĠÏĥ ÏĦα", + "ĠÙħ Ø®", + "Ñı Ñī", + "å· ®", + "ภī", + "ëł ¹", + "à¹ĥà¸Ļ à¸ģาร", + "Ġ ÙĩÙĨ", + "ĠÙĩ ÙĨ", + "ãģ ¶", + "л Ñĸд", + "лÑĸ д", + "å į°", + "åį °", + "Ġs ao", + "Ġsa o", + "ÅĻ ad", + "리 ëĬĶ", + "Ñģ лед", + "Ñģл ед", + "åĶ ®", + "Ġ |:", + "Ġ| :", + "æķĻ èĤ²", + "Ġм ол", + "Ġмо л", + "ĠÙĩ ÙĬ", + "ë ģ", + "Ġ кÑĥлÑĮ", + "Ġк ÑĥлÑĮ", + "ĠкÑĥ лÑĮ", + "' nin", + "'n in", + "Ġ خر", + "ĠØ® ر", + "Ġge nel", + "Ġgen el", + "Ġgene l", + "Ġt á»Ń", + "Ġtá» Ń", + "Ġkur ul", + "Ġkuru l", + "ен ÑĤи", + "енÑĤ и", + "à¥ĭ à¤ľà¤¨", + "à¥ĭà¤ľ न", + "è¿Ļ æł·", + "Ġм Ñĸж", + "ĠмÑĸ ж", + "Ġngh iá»ĩm", + "Ġnghiá»ĩ m", + "ĠÏĢ Î¿Î»", + "ĠÏĢο λ", + "æĭ Ľ", + "Ġà¤Ĺ à¤ı", + "ầ y", + "Ġc ảm", + "Ġcả m", + "ç´ °", + "rı ca", + "Ġ عÙĦÛĮ", + "Ġع ÙĦÛĮ", + "ĠعÙĦ ÛĮ", + "ิ à¹ī", + "h ur", + "hu r", + "Ġch ưa", + "Ñĥ ÑĶÑĤÑĮÑģÑı", + "ÑĥÑĶ ÑĤÑĮÑģÑı", + "ãģ© ãģĨ", + "Ñĥ л", + "ิ ร", + "Ġ æľī", + "ä¼ ¼", + "ÑĦ еÑĢ", + "ÑįÑĤ омÑĥ", + "æĹ ħ", + "ĠÙħ ÙĪØ¬", + "ĠÙħÙĪ Ø¬", + "Ġ 본", + "Ġë³ ¸", + "Ġgi á»Ŀ", + "Ġgiá» Ŀ", + "Ġk iến", + "Ġki ến", + "à¹Ī วย", + "à¹Īว ย", + "Ġd üny", + "Ġdü ny", + "Ġdün y", + "Ġ زÙħ", + "Ġز Ùħ", + "о вÑĸ", + "ов Ñĸ", + "ĠÑĨ ÑĮого", + "ิ à¸ļ", + "Ġ ìĨIJ", + "ĠìĨ IJ", + "èIJ ¥", + "Ġ ÑĢÑĸз", + "ĠÑĢ Ñĸз", + "Ġh á»Ĺ", + "Ġhá» Ĺ", + "ÑĢ Ñĸб", + "ÑĢÑĸ б", + "Ġ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ìľ¼ ë©°", + "äºĨ ä¸Ģ", + "ĠÙĤ بÙĦ", + "ĠÙĤب ÙĦ", + "é¾ Ļ", + "Ġ گذ", + "ĠÚ¯ ذ", + "Ġ ÙĤد", + "ĠÙĤ د", + "ãģª ãģĭãģ£ãģŁ", + "Ġ à¹Ģร", + "Ġà¹Ģ ร", + "Ġà¹Ģภ£", + "å¸ Į", + "ĠÑģ Ñħ", + "Ġг ÑĢом", + "ĠгÑĢ Ð¾Ð¼", + "ĠгÑĢо м", + "åĽ ¢", + "Ġ ì§ij", + "Ġì§ ij", + "Ġ лÑĥÑĩ", + "Ġл ÑĥÑĩ", + "åħ µ", + "Ġ ÐŀÑĤ", + "ĠÐŀ ÑĤ", + "Ġmu á»ijn", + "ãģĺ ãĤĥ", + "o vnÃŃ", + "ov nÃŃ", + "ë©´ ìĦľ", + "ë³ Ģ", + "Ġн еб", + "Ġне б", + "Ñģ ии", + "Ñģи и", + "ÙĨ Ùħ", + "ÄŁ in", + "ÄŁi n", + "Ġt oho", + "Ġto ho", + "Ġtoh o", + "en iz", + "eni z", + "ب اش", + "با Ø´", + "ĠÑģ лÑĥж", + "ĠÑģл Ñĥж", + "ĠÑģлÑĥ ж", + "Ġb ợi", + "Ġüzer e", + "Ġüz ere", + "Ġs adece", + "Ġsad ece", + "ĠÏĢ Î±Ïģ", + "ĠÏĢα Ïģ", + "³³³³³³³³ ³³³³³³³³", + "³³³³³³³ ³³³³³³³³³", + "³³³³³ ³³³³³³³³³³³", + "³³³³³³³³³ ³³³³³³³", + "³³³³³³³³³³³ ³³³³³", + "èĮ ĥ", + "ÏĦ ικÏĮ", + "ÏĦικ ÏĮ", + "ÏĦι κÏĮ", + "Ġ äºĮ", + "ãĤĪãģĨ ãģ«", + "è ŀ", + "ãģ® ãģ¯", + "Ġ ÑĥкÑĢаÑĹн", + "ĠÑĥ кÑĢаÑĹн", + "Ġb ắt", + "в ан", + "ва н", + "Ġ ÑģÑĤÑĢа", + "ĠÑģ ÑĤÑĢа", + "ĠÑģÑĤ ÑĢа", + "ĠÑģÑĤÑĢ Ð°", + "è¡ Ģ", + "nu tÃŃ", + "nut ÃŃ", + "o kt", + "ok t", + "รà¸ĩ à¹Ģร", + "Ġ صÙģ", + "Ġص Ùģ", + "åħ ļ", + "ÏĦ ί", + "ï¼ģ ãĢįĊĊ", + "ï¼ģãĢį ĊĊ", + "ĠÑĤем п", + "ĠÑĤе мп", + "é¡ Į", + "Ġs luž", + "Ġslu ž", + "Ñĥ ков", + "Ñĥк ов", + "Ġngh Ä©a", + "ĠnghÄ© a", + "çĶ ²", + "Ġd á»ħ", + "о ви", + "ов и", + "ÏĦ Ïħ", + "ر ÛĮÚ©", + "رÛĮ Ú©", + "ĠA nh", + "ĠAn h", + "ĠвÑģ его", + "ĠвÑģе го", + "âĢĮ Ú©ÙĨ", + "âĢĮÚ© ÙĨ", + "te ÅĻÃŃ", + "Ġm ục", + "Ùĩ ÙĨÚ¯", + "ÙĩÙĨ Ú¯", + "Ġ ÐŁÐ¾Ñģ", + "ĠÐŁ оÑģ", + "ĠÐŁÐ¾ Ñģ", + "Úĺ Ùĩ", + "ĠاÙĦ غ", + "æĿ ¾", + "y sl", + "ys l", + "Ġyap ılan", + "Ġyapı lan", + "Ġyapıl an", + "çĪ ¶", + "Ġm ạnh", + "ر اÙĩ", + "را Ùĩ", + "à¸Ķ à¸ĩ", + "o Äį", + "ë§ IJ", + "åł Ĥ", + "м аÑĤ", + "ма ÑĤ", + "Ġ eÅŁ", + "Ġe ÅŁ", + "ÙĪÙħ ات", + "Ġس اخت", + "åĽł 为", + "Ġп ÑĢий", + "ĠпÑĢ Ð¸Ð¹", + "ĠпÑĢи й", + "ıl mÄ±ÅŁ", + "é¤ ¨", + "ุ à¸ĩ", + "Ġ ëģ", + "Ġë ģ", + "à¸ķ าม", + "à¸ķา ม", + "åIJ ī", + "μ ή", + "Ġ æľ¬", + "Ġzá klad", + "ت ØŃ", + "è¾ ¼", + "Ġв Ñĸй", + "ĠвÑĸ й", + "ĠÙħÙĨ Ø·", + "Ġto án", + "к аÑĢ", + "ка ÑĢ", + "Ġ ÐĹа", + "ĠÐĹ Ð°", + "ĠпÑĢи мен", + "ĠпÑĢим ен", + "ãĤĭ ãģ¨", + "ั à¸Ĺ", + "ÛĮ س", + "ĠاÙĨ جاÙħ", + "ĠاÙĨج اÙħ", + "Ġع ÙĦÙĬ", + "ĠعÙĦ ÙĬ", + "़ ि", + "e ných", + "en ých", + "ený ch", + "ĠL iên", + "ĠLi ên", + "Ġ па", + "Ġп а", + "éļ Ĭ", + "Ġmo hou", + "Ġmoh ou", + "Ġк ÑĸлÑĮ", + "Ġ Το", + "ĠΤ ο", + "ا ÙĦب", + "اÙĦ ب", + "ÎŃ Î½", + "Ġna bÃŃ", + "Ġnab ÃŃ", + "ç i", + "ler den", + "lerde n", + "Ġth anh", + "Ġthan h", + "Ġtha nh", + "Ġb ütün", + "Ġ åŁ", + "Ġå Ł", + "ì¸ ł", + "Ġz at", + "Ġza t", + "ÙĬ ÙĪ", + "Ġμ ια", + "uy ết", + "Ñij н", + "åĪ Ĵ", + "ли во", + "лив о", + "à¹Ī à¸Ńà¸ĩ", + "à¹Īà¸Ń à¸ĩ", + "ä»ĸ 们", + "Ġб аг", + "Ġба г", + "ि à¤Ń", + "िठŃ", + "ĠÑĤ ам", + "ĠÑĤа м", + "Ġп ÑĢеп", + "ĠпÑĢ ÐµÐ¿", + "ĠпÑĢе п", + "ิ à¸Ĭ", + "âĢĻ Ñıз", + "âĢĻÑı з", + "ĠPh ân", + "ж ен", + "же н", + "à¥Ī à¤ķ", + "ĠÑģлÑĥÑĩа е", + "Ġ .:", + "Ġ. :", + "åѦ æł¡", + "İ N", + "ç¾ ©", + "ĠÑģ ÑĤо", + "ĠÑģÑĤ о", + "Ġ हर", + "Ġह र", + "Ïħ ν", + "Ġx em", + "Ġxe m", + "Ġб ÑĥÑĤи", + "ĠбÑĥ ÑĤи", + "Ñģ иÑĤ", + "Ñģи ÑĤ", + "çª ģ", + "à¥į à¤Ľ", + "à¥įठĽ", + "åij ¢", + "ï¼Į ä¹Ł", + "e nÄĽ", + "en ÄĽ", + "Ġ κά", + "Ġκ ά", + "iy orum", + "iyor um", + "ĠÚ¯ ÙģØª", + "âĹıâĹı âĹıâĹı", + "ั ม", + "Ġ Ðļон", + "ĠÐļ он", + "ĠÐļо н", + "н оÑĪ", + "но ÑĪ", + "ниÑĨ ÑĤ", + "ü zel", + "üz el", + "s ÃŃ", + "å¸ «", + "ص ÙĪÙĦ", + "çĥ Ń", + "ĠÄij á»§", + "ĠÄijá» §", + "ãĤ ®", + "æķ ħ", + "ĠÅ¡ kol", + "ĠÅ¡k ol", + "Ñĩ ен", + "Ñĩе н", + "à¹Ģ ย", + "à¹Ģภ¢", + "à¸Ļ à¸Ļ", + "ÙĢ ÙĢÙĢÙĢ", + "ÙĢÙĢ ÙĢÙĢ", + "ÙĢÙĢÙĢ ÙĢ", + "Ġ üç", + "Ġü ç", + "å¿ µ", + "ãĥª ãĤ¢", + "Ġ íĻĺ", + "ĠíĻ ĺ", + "Ġ éĩij", + "Ġéĩ ij", + "çı Ń", + "Ġ Ñģклад", + "ĠÑģ клад", + "ĠÑģк лад", + "Ñı ми", + "Ñıм и", + "ü f", + "Ġh ã", + "ĠÄIJ ại", + " Ĥ", + "åĦ ª", + "Ġbul unan", + "Ġbulun an", + "ĠاÙĦ ÙħØŃ", + "ĠاÙĦÙħ ØŃ", + "æĪ ı", + "Ġ è©", + "Ġè ©", + "Ġн оÑĢм", + "ĠноÑĢ Ð¼", + "Ġchu ẩn", + "Ġз аÑģÑĤ", + "Ġза ÑģÑĤ", + "ĠзаÑģ ÑĤ", + "Ġ vÃŃce", + "ĠvÃŃ ce", + "ĠvÃŃc e", + "Ð ĸ", + "Ġà¤Ĩ ध", + "Ġ Äįas", + "ĠÄį as", + "Ġ боÑĢ", + "Ġб оÑĢ", + "Ġбо ÑĢ", + "Ïģ ια", + "Ïģι α", + "ĠÙħ اÙĩ", + "ĠÙħا Ùĩ", + "Ġ íħ", + "Ġí ħ", + "ÅĻ el", + "ÅĻe l", + "Ñı ви", + "Ñıв и", + "ÏĦ εÏĤ", + "ÏĦε ÏĤ", + "i nÄĽ", + "in ÄĽ", + "Ġп еÑĢе", + "ĠпеÑĢ Ðµ", + "éķ ĩ", + "à¥įठŀ", + "Ġ éĺ", + "Ġé ĺ", + "à¹Ī าว", + "à¹Īา ว", + "ร ร", + "Ġ سÙĩ", + "Ġس Ùĩ", + "в али", + "ва ли", + "вал и", + "çķ Ļ", + "ĠÑĦ Ñĥнк", + "ĠÑĦÑĥн к", + "Ġ íĸī", + "Ġí ĸī", + "Ġíĸ ī", + "Ùģ Ùĩ", + "çĶŁ æ´»", + "èģ ŀ", + "o kud", + "ok ud", + "oku d", + "Ġ ìĤ´", + "ĠìĤ ´", + "ı zı", + "ız ı", + "Ġпо лÑĥ", + "Ġпол Ñĥ", + "ï¼Į ä½ł", + "Ø´ اÙĨ", + "æ± º", + "б ÑĢÑı", + "оÑģÑĥд аÑĢ", + "Ġo yun", + "Ġoy un", + "а нии", + "ан ии", + "ани и", + "Ġp rů", + "Ġpr ů", + "Ġn áv", + "Ġná v", + "Ġм енÑı", + "Ġмен Ñı", + "Ġìŀ ĺ", + "Ġ İn", + "Ġİ n", + "Ġth ÃŃch", + "ĠthÃŃ ch", + "ĠÄij ảm", + "åľ Ĵ", + "Ġв же", + "Ġl oÃłi", + "Ġlo Ãłi", + "Ġ Ðŀн", + "ĠÐŀ н", + "м еÑģÑĤ", + "ме ÑģÑĤ", + "Ġ ξ", + "ĠÎ ¾", + "ãĢ ħ", + "Ġch iế", + "Ġchi ế", + "Ñĩ Ñĸ", + "Ġ íijľ", + "Ġí ijľ", + "ëĭ ¬", + "Ġ ëĭ¬", + "Ġëĭ ¬", + "à¥Ģ ड", + "ÑĢ Ð°Ð»ÑĮ", + "ÑĢа лÑĮ", + "ÑĢал ÑĮ", + "d ik", + "di k", + "Ġ íĨł", + "ĠíĨ ł", + "ëŁ ī", + "Ġ صÙĨ", + "Ġص ÙĨ", + "Ġs tej", + "Ġst ej", + "Ġste j", + "Ġа кÑĤив", + "Ġак ÑĤив", + "ĠакÑĤ ив", + "ĠакÑĤи в", + "Ġ é¦", + "Ġé ¦", + "Ġ à¹Ħà¸Ķ", + "Ġà¹Ħ à¸Ķ", + "æĬĢ æľ¯", + "Ġp rostÅĻed", + "Ġpro stÅĻed", + "Ġprost ÅĻed", + "å® ³", + "ãģ IJ", + "Ġol uÅŁtur", + "ĠoluÅŁ tur", + "e lop", + "el op", + "elo p", + "ãģ¡ ãĤĥ", + "éĥ İ", + "ض ا", + "Ġ خط", + "ĠØ® Ø·", + "ë° ķ", + "е ÑģÑı", + "еÑģ Ñı", + "ĠÙĩ ÛĮ", + "н ад", + "на д", + "Ġng Ãłnh", + "ÑĢ ÑĥÑĪ", + "ÑĢÑĥ ÑĪ", + "ãģĦ ãģĦ", + "Ġü rün", + "Ġür ün", + "à¸Ń à¸ķ", + "à¥ĭ प", + "Ġs ayı", + "Ġsa yı", + "Ġsay ı", + "à¥Ģ स", + "е ниÑħ", + "ен иÑħ", + "ени Ñħ", + "Ġ Ñģим", + "ĠÑģ им", + "ĠÑģи м", + "à¥Ģ द", + "å¤ ī", + "à¹Ī วม", + "à¹Īว ม", + "Ġ à¹Ģà¸Ĥ", + "Ġà¹Ģ à¸Ĥ", + "Ġà¹ĢภĤ", + "å·² ç»ı", + "а ÑĤо", + "аÑĤ о", + "ĠÑĢай он", + "í ĥĿ", + "íĥ Ŀ", + "Ġ ÑĤÑĢа", + "ĠÑĤ ÑĢа", + "ĠÑĤÑĢ Ð°", + "l ayan", + "la yan", + "lay an", + "ế p", + "ा à¤Ł", + "ाठŁ", + "Ø® اب", + "人 æ°ij", + "å® Ŀ", + "è Ĩ", + "èª į", + "n aÄį", + "na Äį", + "Ġî ł", + "ĠÐļ и", + "ĠbaÅŁ ka", + "ĠbaÅŁk a", + "c ů", + "ض ع", + "èĪ ª", + "ี ม", + "Ñĭ ми", + "Ñĭм и", + "ÎĻ Î£", + "Ġشر کت", + "ย ว", + "Ġmus ÃŃ", + "Ġmu sÃŃ", + "Ġн ал", + "Ġна л", + "ี à¸Ĺ", + "Ġ áp", + "Ġá p", + "ร าย", + "æ² ¹", + "l eme", + "le me", + "lem e", + "Ġ मन", + "Ġम न", + "à¹Ħ à¸Ł", + "а ÑĤив", + "аÑĤ ив", + "аÑĤи в", + "¸ ı", + "èŃ °", + "Ïĥ ÏĦα", + "ÏĥÏĦ α", + "íĸ ¥", + "е ÑĤÑĥ", + "еÑĤ Ñĥ", + "ĠÑģв Ñıз", + "ĠÑģвÑı з", + "ед еÑĢа", + "ĠØ® ارج", + "า ษ", + "าภ©", + "âĢĮ Ù¾", + "Ñĸ г", + "é¡ ŀ", + "Ġkh ả", + "ĠÑģ пÑĢав", + "ĠÑģп ÑĢав", + "è¡ Ĺ", + "ãĥķ ãĤ¡", + "ãĥķãĤ ¡", + "Ġм еждÑĥ", + "Ġмеж дÑĥ", + "Ñĥ ли", + "Ñĥл и", + "Ġب زر", + "ÑĨ ен", + "ÑĨе н", + "Ġek onom", + "د ÙĨ", + "ا ÙħÛĮ", + "اÙħ ÛĮ", + "าส à¸ķร", + "ĠnÄĽ kol", + "ĠnÄĽk ol", + "g ün", + "з и", + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł", + "ç¦ »", + "Ġtr Æ°á»Łng", + "ı i", + "íİ ¸", + "Ġ ÑĢеб", + "ĠÑĢ ÐµÐ±", + "ĠÑĢе б", + "åº ķ", + "Ġت ارÛĮØ®", + "н има", + "ни ма", + "ним а", + "Ġth ân", + "аÑĤ елÑĮно", + "аÑĤелÑĮ но", + "ĠاÙĦ ذÙĬ", + "ĠاÙĦذ ÙĬ", + "ÙĪ ÙĨÛĮ", + "ÙĪÙĨ ÛĮ", + "Ġ éĥ", + "Ġé ĥ", + "Ġb ình", + "Ġbì nh", + "ικ ήÏĤ", + "ική ÏĤ", + "à¸ŀ ล", + "تÙħ اع", + "ĠPr aha", + "ĠPra ha", + "Ġ ÑģÑĤав", + "ĠÑģÑĤ ав", + "ĠÑģÑĤа в", + "د ÙĬد", + "دÙĬ د", + "Ġgi ữa", + "Ġgiữ a", + "ĠпÑĢо вед", + "ĠпÑĢов ед", + "Âł k", + "ÙĨد Ú¯ÛĮ", + "ÑĨ ий", + "ÑĨи й", + "ç Ĵ", + "ĠاÙĦ Ø£Ùħ", + "ĠاÙĦØ£ Ùħ", + "Ġ è´", + "Ġè ´", + "Ø¥ ÙĨجÙĦÙĬزÙĬØ©", + "ĠìŀĪ ìĹĪëĭ¤", + "ĠìŀĪìĹĪ ëĭ¤", + "ç ·¨", + "ç· ¨", + "ัà¸Ļ à¸ĺ", + "ĠÑĢок Ñĸв", + "Ġc áo", + "Ġcá o", + "Ġkh ó", + "Ġ ÙĨÙĪØ¹", + "ĠÙĨ ÙĪØ¹", + "ĠÙĨÙĪ Ø¹", + "س ÙĦ", + "Ġ ÑĥÑģлов", + "ĠÑĥ Ñģлов", + "ĠÑĥÑģл ов", + "ĠÑĥÑģ лов", + "Ġcứ u", + "ов ого", + "ово го", + "ि à¤Ĺ", + "िठĹ", + "Ķ ëĭ¤", + "æĿ İ", + "Ġbö lg", + "Ġböl g", + "Ġn gu", + "Ġng u", + "Ġh ữu", + "Ġhá» ¯u", + "н ии", + "ни и", + "ìł Ī", + "Ġп ÑĢом", + "ĠпÑĢ Ð¾Ð¼", + "ĠпÑĢо м", + "åı Į", + "Ġd Æ°á»Ľi", + "ĠdưỠĽi", + "Ġdư Ỽi", + "Ð ®", + "ÙĬ Ø´", + "æ¸ ©", + "ëı ħ", + "Ġз мÑĸ", + "Ġзм Ñĸ", + "θη κε", + "ĠbaÄŁ lı", + "Ġüzer inde", + "Ġ تغ", + "Ġت غ", + "Ġп ÑĢогÑĢа", + "ĠпÑĢ Ð¾Ð³ÑĢа", + "ĠпÑĢо гÑĢа", + "ĠпÑĢог ÑĢа", + "i ž", + "Ġ ç¥", + "Ġç ¥", + "Ġy ardım", + "Ġyard ım", + "Ġyar dım", + "ÂĢ ÂĢ", + "ÂĢ Ģ", + "Ġ Ñĥв", + "ĠÑĥ в", + "Ġ rů", + "Ġr ů", + "Ġch iến", + "Ġchi ến", + "Ġchiế n", + "ν οÏĤ", + "νο ÏĤ", + "ãģ¨ ãģª", + "ا ÙĨت", + "اÙĨ ت", + "è° ·", + "ÃŃ sk", + "ÃŃs k", + "is inde", + "isi nde", + "isin de", + "Ġд ог", + "Ġдо г", + "è¿ ½", + "Ġп ÑĢоÑĤив", + "ĠпÑĢо ÑĤив", + "ĠпÑĢоÑĤ ив", + "ĠпÑĢоÑĤи в", + "Ïģ οÏħ", + "Ïģο Ïħ", + "ãģ® ãģĭ", + "Ġb azı", + "Ġba zı", + "Ġbaz ı", + "ı rak", + "ır ak", + "à¥ĩ ष", + "à¥ĩठ·", + "ĠÙħ شار", + "ĠÙħØ´ ار", + "Ġ ìĸij", + "Ġìĸ ij", + "Ġ нез", + "Ġн ез", + "Ġне з", + "Ġ ذÙĦÙĥ", + "Ġذ ÙĦÙĥ", + "èª ¿", + "åĤ Ļ", + "ĠÑĤ ÑĢан", + "ĠÑĤÑĢ Ð°Ð½", + "ĠÑĤÑĢа н", + "ĠÏĢ Î±Ïģα", + "ĠÏĢαÏģ α", + "ĠÏĢα Ïģα", + "ÛĮ Ùħت", + "ÛĮÙħ ت", + "Ġt iến", + "Ġti ến", + "Ġtiế n", + "ĠÙĩ ÙħÙĩ", + "ĠÙĩÙħ Ùĩ", + "e fon", + "ef on", + "» .ĊĊ", + "». ĊĊ", + "».Ċ Ċ", + "Ġ ÙĨد", + "ĠÙĨ د", + "ج ÙĦ", + "Ġد ادÙĩ", + "Ġداد Ùĩ", + "Ġ вед", + "Ġв ед", + "Ġве д", + "Ġ sın", + "Ġs ın", + "Ġsı n", + "ĠÑģ вÑĸÑĤ", + "ĠÑģв ÑĸÑĤ", + "e lerin", + "el erin", + "eler in", + "ele rin", + "eleri n", + "âĪ ¨", + "Ġy ür", + "д ан", + "да н", + "Ġ ÐŀÑģ", + "ĠÐŀ Ñģ", + "Ġh ạng", + "Ġhạn g", + "Ġhạ ng", + "è® ¸", + "Ïĥ ÏĦη", + "ÏĥÏĦ η", + "uy ến", + "Ġн аб", + "Ġна б", + "Ġ оÑħ", + "Ġо Ñħ", + "Ïĥ Ïī", + "Ġby ly", + "Ġbyl y", + "Ñģ киÑħ", + "Ñģк иÑħ", + "Ñģки Ñħ", + "l amak", + "la mak", + "lam ak", + "lama k", + "и ÑĤоÑĢ", + "иÑĤ оÑĢ", + "Ġy atır", + "Ġya tır", + "Ġyat ır", + "ĠпÑĢоиз вод", + "Ġ جÙħع", + "Ġج Ùħع", + "ĠجÙħ ع", + "Å ł", + "æıIJ ä¾Ľ", + "Ġpr vnÃŃ", + "Ġprv nÃŃ", + "Ġα ÏĢ", + "íĻ ©", + "ĠпÑĢа кÑĤи", + "ler inden", + "lerin den", + "lerinde n", + "ĠнеобÑħодим о", + "åº ·", + "Ùİ Ø§", + "Ġ سÙĨ", + "Ġس ÙĨ", + "İ L", + "Ġ ê´ij", + "Ġê ´ij", + "Ġê´ ij", + "Ġ PÅĻ", + "ĠP ÅĻ", + "ç ŀ", + "ĠÑĤемп еÑĢаÑĤÑĥ", + "Ġka bul", + "Ġkab ul", + "Ġbu dou", + "Ġbud ou", + "ÑĨÑĸ оналÑĮ", + "ÑĨÑĸон алÑĮ", + "ï½ ľ", + "Ġç ocuk", + "Ġçocu k", + "ĠÑĤ ÑĸлÑĮки", + "b yt", + "by t", + "ãĥ ¤", + "ĠÑģÑĤ аÑĤ", + "ĠÑģÑĤа ÑĤ", + "Ġ æĿ±", + "ĠæĿ ±", + "le žit", + "اس طة", + "ุ ร", + "i êm", + "iê m", + "ĠкÑĥлÑĮ ÑĤÑĥ", + "Ġ пон", + "Ġп он", + "Ġпо н", + "Ä© nh", + "åĸ ľ", + "н ев", + "не в", + "ÑĶ Ð½", + "ĠÑģо оÑĤ", + "ë Ŀ", + "çĪ ¾", + "Ġtu á»ķi", + "k anı", + "kan ı", + "สำ หร", + "ا عت", + "اع ت", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "д еÑĢж", + "деÑĢ Ð¶", + "Ġоб лаÑģÑĤи", + "Ġобла ÑģÑĤи", + "ĠоблаÑģ ÑĤи", + "ĠоблаÑģÑĤ и", + "Ġобл аÑģÑĤи", + "Ġv ừa", + "Ġvá» «a", + "Ġ ÙħÙħ", + "ĠÙħ Ùħ", + "à¸ģ ำ", + "à¹ģ ม", + "iver sit", + "ivers it", + "à¹ģ ส", + "æ¬ §", + "l anan", + "la nan", + "lan an", + "ÙĬ ÙĨØ©", + "ÙĬÙĨ Ø©", + "س Ø©", + "ĠлÑİд ей", + "ร รม", + "รร ม", + "Ġ ì±Ħ", + "Ġì± Ħ", + "Ġ 天", + "Ġå¤ ©", + "ен нÑĭÑħ", + "à¹ģ ห", + "Ġs práv", + "Ġsp ráv", + "Ġspr áv", + "èŃ ¦", + "ï¼ ľ", + "ั à¸Ĵ", + "il ecek", + "ile cek", + "ilece k", + "Ġ æŁ", + "Ġæ Ł", + "Ġ èĭ±", + "Ġèĭ ±", + "ĠÑħ оÑĢоÑĪ", + "ëł ĩ", + "Û² Û°Û°", + "Û²Û° Û°", + "æĬ ¤", + "Ġl ã", + "ÅĻÃŃ zenÃŃ", + "ÅĻÃŃz enÃŃ", + "ĠتÙĪÙĦ ÛĮد", + "éļ Ľ", + "ãĤĮ ãģ°", + "á Å¡", + "ارÙĬ Ø®", + "æĶ »", + "Ġkho ảng", + "Ġkhoản g", + "éĻ į", + "о ван", + "ов ан", + "ова н", + "Ġg ây", + "âĢĻn ın", + "Ø£ ÙĨ", + "m iÅŁtir", + "mi ÅŁtir", + "miÅŁ tir", + "miÅŁti r", + "Ġs ức", + "Ġsứ c", + "к ÑĥÑģ", + "кÑĥ Ñģ", + "Ġüzer ine", + "ÄŁ ü", + "ا بر", + "اب ر", + "ï¼Į å°±", + "Ì £", + "Ġ ëıĮ", + "Ġëı Į", + "Ġtr á»±c", + "æĶ¶ å½ķ", + "æī ¿", + "ĠN á»Ļi", + "Ġ çϾ", + "ĠçĻ ¾", + "ÑĪ ÑĮ", + "ج Ø©", + "ë² ł", + "ठī", + "à ¸ı", + "ภı", + "Ġü lk", + "Ġül k", + "ĠÙĩست ÙĨد", + "ัà¸ļ à¸ģาร", + "ĠÑı ка", + "ĠÑıк а", + "ã İ", + "Ġ Як", + "ĠЯ к", + "Ġг де", + "t iv", + "ti v", + "ãĢ Ī", + "лÑİ Ñĩа", + "лÑİÑĩ а", + "ा ।Ċ", + "ा। Ċ", + "Ġ ÙħاÙĨ", + "ĠÙħ اÙĨ", + "ĠÙħا ÙĨ", + "Ġd lou", + "Ġdl ou", + "Ġ ãĥķ", + "Ġãĥ ķ", + "ठĽ", + "Ġph ục", + "Ġphụ c", + "a kat", + "ak at", + "aka t", + "Ð ¬", + "as ını", + "ĠæĬķ 稿", + "ÑĢ ÐµÐ²", + "ÑĢе в", + "Ġv yt", + "Ġvy t", + "Ġz mÄĽ", + "Ġzm ÄĽ", + "ÏĦ Ïī", + "è ¬", + "Ġ Ñĥм", + "ĠÑĥ м", + "Ġuz un", + "Ġp roti", + "Ġpro ti", + "Ġpr oti", + "Ġprot i", + "ĠÑģо ÑģÑĤоÑı", + "ĠÑģоÑģÑĤ оÑı", + "ัà¸Ĵ à¸Ļ", + "a tik", + "at ik", + "ati k", + "Ġ à¸ł", + "Ġภł", + "Ġà¤Ĩ द", + "lar ından", + "ların dan", + "larında n", + "æĢ ¥", + "ãĥ¼ ãĤ¯", + "ãĥ¼ãĤ ¯", + "ĠÙĦ ÙĦÙħ", + "ĠÙĦÙĦ Ùħ", + "Ùģ ØªÙĩ", + "ÙģØª Ùĩ", + ". :.", + ".: .", + "üç ük", + "ол ева", + "à¹Į Ċ", + "ĠпеÑĢ ÐµÐ²", + "ĠпеÑĢе в", + "ĠÙĨ سب", + "ĠÙĨس ب", + "е леннÑı", + "ел еннÑı", + "елен нÑı", + "' ın", + "'ı n", + "ν Ïī", + "è¡ £", + "Ġ دÙĬ", + "Ġد ÙĬ", + "åį ĩ", + "Ġbel irt", + "Ġbelir t", + "Ġ /:", + "Ġ/ :", + "èij ī", + "Ġv yh", + "Ġvy h", + "çļĦ ä¸Ģ", + "èĥ Į", + "Ġ ìĹ´", + "ĠìĹ ´", + "о ла", + "ол а", + "Ġ تب", + "Ġت ب", + "á ci", + "ác i", + "ा à¤ī", + "ाठī", + "ภİ", + "çĶ ¢", + "à¥Ī ल", + "Ġ ÙĤØ·", + "ĠÙĤ Ø·", + "ëĦ Ī", + "ắ m", + "ÑĢ Ñıд", + "ÑĢÑı д", + "Ġph ụ", + "ĠÙĪ Ø§ÙĤع", + "ĠÙĪØ§ ÙĤع", + "Ġm erk", + "Ġme rk", + "Ġmer k", + "Ġch á»ijng", + "å¯ Ł", + "ا بط", + "اب Ø·", + "us unda", + "usu nda", + "Ġод на", + "ž el", + "že l", + "ĠÑģ Ñĥм", + "ĠÑģÑĥ м", + "Ġph ù", + "Ġ ζ", + "ĠÎ ¶", + "Ġz av", + "Ġza v", + "e dn", + "ed n", + "Ġp otÅĻeb", + "Ġpot ÅĻeb", + "ĠÚ©ÙĨ ÙĨد", + "ĠÑĢ Ð°Ð·Ð²", + "ĠÑĢаз в", + "ĠÑĢа зв", + "¿ ł", + "ĠاÙĦ ز", + "Ġm ÄĽl", + "ĠmÄĽ l", + "Ġ ÑģÑĤанов", + "ĠÑģÑĤ анов", + "ĠÑģÑĤан ов", + "ĠÑģÑĤа нов", + "Ġ درÛĮ", + "Ġد رÛĮ", + "Ġدر ÛĮ", + "Ġt ượng", + "ã ģµ", + "ãģ µ", + "Ġд ви", + "Ġдв и", + "ÑĮ Ñı", + "è £½", + "è£ ½", + "Ġ تÙĦ", + "Ġت ÙĦ", + "Å¡ Å¥", + "ãģª ãĤī", + "Ġà¤ķ à¤Ī", + "Å¡ i", + "âĢĮ است", + "Ġk ỹ", + "Ġká» ¹", + "ë§ Ŀ", + "Ġà¤Ĩ à¤ľ", + "ãĥ ´", + "Ġb á»ı", + "du ÄŁu", + "duÄŁ u", + "Ġ æ¯", + "Ġæ ¯", + "п еÑĢ", + "пе ÑĢ", + "ا ÙĦÙĬØ©", + "اÙĦ ÙĬØ©", + "اÙĦÙĬ Ø©", + "æīĢ ä»¥", + "åħ °", + "Ġ oran", + "Ġo ran", + "Ġor an", + "Ġora n", + "Ġ íŀ", + "Ġí ŀ", + "Ïĥ ία", + "Ïĥί α", + "Ġph á»§", + "ĠбÑĭ ла", + "ĠбÑĭл а", + "Ñĩ ива", + "Ñĩи ва", + "Ñĩив а", + "Ġ ê°Ħ", + "Ġê° Ħ", + "о лÑĸ", + "ол Ñĸ", + "Ùĥ ت", + "å ħ§", + "åħ §", + "à¥Ĥ à¤Ł", + "Ġ ëĸ", + "Ġë ĸ", + "Ġ ÙĦÙĩ", + "ĠÙĦ Ùĩ", + "ëłĪ ìĿ´", + "Ġh ız", + "å¤ ı", + "ĠæĬķ稿 æĹ¥", + "éļ ¾", + "ĵ °", + "г лÑıд", + "глÑı д", + "гл Ñıд", + "ì n", + "Ġ меÑĢ", + "Ġм еÑĢ", + "Ġ ãĢij", + "ĠãĢ ij", + "Ġ обÑī", + "Ġоб Ñī", + "um hur", + "çł ´", + "л иÑģÑĮ", + "ли ÑģÑĮ", + "sp ÄĽ", + "ر ÙĬÙĤ", + "رÙĬ ÙĤ", + "Ġ تÙģ", + "Ġت Ùģ", + "Ġا ÙĦÙĪ", + "ĠاÙĦ ÙĪ", + "çµ ±", + "а лоÑģÑĮ", + "ал оÑģÑĮ", + "ало ÑģÑĮ", + "Ġm ô", + "Ġv á»ĩ", + "Ġvá» ĩ", + "Ġ δι", + "Ġδ ι", + "Ġ зн", + "Ġз н", + "Ġ بØŃ", + "Ġب ØŃ", + "ت Ùī", + "Ġ ì§ģ", + "Ġì§ ģ", + "Ġvel mi", + "uyá» ħn", + "Ġph ạm", + "ÑģÑĤв ом", + "ÑģÑĤво м", + "ĠÙĪ Ø§ÙĦÙħ", + "ĠÙĪØ§ÙĦ Ùħ", + "ĠÙĪØ§ ÙĦÙħ", + "ĠбÑĭ ли", + "ĠбÑĭл и", + "ا ذ", + "Ø§Ø °", + "ÄĽ ÅĻ", + "â Ħĸ", + "âĦ ĸ", + "Ġп олож", + "Ġпо лож", + "Ġпол ож", + "า à¸ģาร", + "าà¸ģ าร", + "ĠÄį lán", + "Îķ Ρ", + "Ġ ìĤ°", + "ĠìĤ °", + "β α", + "Ġ æĹ¥æľ¬", + "ĠæĹ¥ æľ¬", + "ز د", + "ĠÙĨ ÛĮست", + "ĠÙĨÛĮ ست", + "Ġha yat", + "Ġhay at", + "Ġhaya t", + "ç¢ º", + "à¹Ģ วล", + "à¹Ģว ล", + "ĠCh ÃŃnh", + "ĠChÃŃ nh", + "ï¼Į æĺ¯", + "ĠÙĪ Ø§ØŃ", + "ĠÙĪØ§ ØŃ", + "èı ¯", + "Ġή ÏĦαν", + "Ġx á»Ń", + "ĠÄį erv", + "ĠÄįer v", + "ĠÄįe rv", + "ĠÙħد ÛĮر", + "é Ĩ", + "ĠëĪ Ī", + "ç» Ń", + "Ġt ên", + "ìĸ ¸", + "Ġort aya", + "Ġorta ya", + "Ġ жен", + "Ġж ен", + "Ġже н", + "Ġn Æ¡i", + "ен нÑĭе", + "ÑĦ екÑĤив", + "ÑĦек ÑĤив", + "íĿ ¬", + "Ġkh á»ı", + "ĠÄij a", + "os yal", + "osy al", + "à¸Ľà¸£à¸° à¹Ģà¸Ĺศ", + "Ġo dst", + "Ġod st", + "Ġ à¸ĸ", + "Ġภĸ", + "Ġο ÏĢο", + "æĶ¿ åºľ", + "Ġb Ãłn", + "ĠbÃł n", + "ĠG iá»", + "ĠGi á»", + "Ġold uk", + "Ġol duk", + "Ġoldu k", + "о вание", + "ов ание", + "ова ние", + "овани е", + "ован ие", + "à¸Ń ส", + "Ġ нев", + "Ġн ев", + "Ġне в", + "ÏĦ Ïģο", + "ÏĦÏģ ο", + "Ġ ìĨį", + "ĠìĨ į", + "k ı", + "Ġब ड", + "Ġ ÏħÏĢ", + "ĠÏħ ÏĢ", + "Ġ Vý", + "ĠV ý", + "ï¾ Ħ", + "çŃ ĸ", + "ε ÏĨ", + "Ġ åħ¨", + "Ġåħ ¨", + "ĠÙģ Ø±ÙĪØ´", + "ĠÙ쨱 ÙĪØ´", + "ĠÙ쨱ÙĪ Ø´", + "ÙĤÛĮ ÙĤ", + "ä¼ģ ä¸ļ", + "ε Ïį", + "èĻ Ł", + "Ġa yr", + "Ġay r", + "ض ÙĪ", + "Å¡ el", + "Å¡e l", + "Ġп ÑĸÑģлÑı", + "ĠпÑĸÑģ лÑı", + "Ñĸй Ñģ", + "é¢ Ĩ", + "Ú© تر", + "کت ر", + "л Ñĥб", + "лÑĥ б", + "è« ĸ", + "æ° ¸", + "ез пеÑĩ", + "Ġ кам", + "Ġк ам", + "Ġка м", + "ع داد", + "عد اد", + "ê±° ëŀĺ", + "ู à¸ĩ", + "ĠتÙĩ راÙĨ", + "Ġ ëĦĪ", + "ĠëĦ Ī", + "ÑĢ Ð¸Ð²", + "ÑĢи в", + "Ġ ÑĤоÑĢ", + "ĠÑĤ оÑĢ", + "ĠÑĤо ÑĢ", + "ا Ùī", + "ا٠ī", + "' Ñıз", + "'Ñı з", + "ÙIJ ÙĬ", + "Ġkh ÃŃ", + "Ġ ÑĪÑĤ", + "ĠÑĪ ÑĤ", + "Ġ ξε", + "ĠÎľ ε", + "Ġb iri", + "Ġbi ri", + "Ġbir i", + "è ĩ´", + "èĩ ´", + "Ñĥ вав", + "Ñĥв ав", + "Ñĥва в", + "ãģĪ ãĤĭ", + "Ġд иÑģ", + "Ġди Ñģ", + "а ÑİÑĤ", + "аÑİ ÑĤ", + "ص ب", + "åĿ ĩ", + "о лÑİ", + "ол Ñİ", + "èĭ ¥", + "Ġ اث", + "Ġا Ø«", + "ĠØ§Ø «", + "s ou", + "so u", + "åIJ ĥ", + "ãģ® ãģł", + "ub lik", + "ubl ik", + "л ей", + "ле й", + "Âł m", + "Ġíıī ê·ł", + "ạ y", + "ε ÏĢ", + "t ık", + "tı k", + "Ġv yu", + "Ġvy u", + "ع ÙĪØ¯", + "Ġд оз", + "Ġдо з", + "Ġl á»ĭch", + "è³ ª", + "à¥ģ à¤Ī", + "à¥ģठĪ", + "ั à¸ŀ", + "Ġt ém", + "Ġté m", + "Ġ kaç", + "Ġk aç", + "Ġka ç", + "Ġc ái", + "Ġcá i", + "Ġ μα", + "Ġμ α", + "â̦â̦ ãĢįĊĊ", + "í ά", + "ر ÙĪÙĩ", + "رÙĪ Ùĩ", + "Ġ rych", + "Ġr ych", + "Ġry ch", + "Îij Τ", + "Ġ ÑĢÑĸв", + "ĠÑĢ Ñĸв", + "ë³ ij", + "åģ ¥", + "Ġzd rav", + "Ġ عدد", + "Ġع دد", + "Ġعد د", + "èį ī", + "δ ια", + "δι α", + "Ġv áºŃn", + "Ñĭ ÑĤ", + "Ġкол иÑĩ", + "Ġко лиÑĩ", + "Ġколи Ñĩ", + "ÏĮ ÏĦε", + "Ġb ırak", + "Ġ ØŃÙħ", + "ĠØŃ Ùħ", + "Ġch á»ĭ", + "é» Ħ", + "ĠاÙĦÙħت ØŃدة", + "ื à¸Ńà¸ģ", + "ืà¸Ń à¸ģ", + "Ġз али", + "Ġза ли", + "Ġзал и", + "Ġnh anh", + "âĢĮ تÙĪØ§ÙĨ", + "ëĿ ½", + "Ġت ÙĪØ³Ø·", + "ĠتÙĪ Ø³Ø·", + "ĠتÙĪØ³ Ø·", + "è¦ģ æ±Ĥ", + "а лÑĥ", + "ал Ñĥ", + "ün kü", + "ünk ü", + "ãģª ãĤĵ", + "Ġ Trong", + "ĠT rong", + "ĠTr ong", + "ĠTro ng", + "à¸Ļ ะ", + "åij ¼", + "Ġ ÙĬÙħ", + "ĠÙĬ Ùħ", + "и ки", + "ик и", + "ĠÑĤ ÑĥÑĤ", + "ĠÑĤÑĥ ÑĤ", + "Ġya ÅŁam", + "ĠyaÅŁ am", + "Ġm á»įi", + "é ĽĦ", + "éĽ Ħ", + "ĠØŃ ض", + "Ġав ÑĤом", + "ĠавÑĤ ом", + "Ġसब स", + "Ġy ếu", + "ãĤ¹ ãĤ¿", + "Ïĩ ή", + "Ñĸ Ñİ", + "è ĺ", + "ิ ย", + "Ġm ev", + "Ġme v", + "ick ého", + "ické ho", + "ि ह", + "िठ¹", + "åŃ £", + "θ ή", + "Ġब ढ", + "ĠاÙĦ Ùħس", + "ĠاÙĦÙħ س", + "ÏĦ οÏħ", + "ÏĦο Ïħ", + "ek li", + "ekl i", + "Ġде ÑĢев", + "ĠдеÑĢ ÐµÐ²", + "å¸ Ń", + "æ² Ļ", + "ãģ« ãĤĤ", + "Ġo blast", + "Ġob last", + "Ġobl ast", + "Ġh á»Ļ", + "Ġhá» Ļ", + "Ġ å¹³", + "Ġå¹ ³", + ".:.:.:.: .:.:.:.:", + ".:.:.:. :.:.:.:.:", + "Ġ éĸ", + "Ġé ĸ", + "Ġ جز", + "Ġج ز", + "ĠÙĩÙħ ÚĨ", + "ä¸ ¦", + "ÑĨ еп", + "ÑĨе п", + "ा Ċ", + "ä¸Ń çļĦ", + "'n ın", + "Ġ íķĺëĬĶ", + "Ġíķĺ ëĬĶ", + "ÑĶ ÑĹ", + "Ġ بش", + "Ġب Ø´", + "åį ´", + "ä¹ ł", + "ĠاطÙĦ اعات", + "ĠاطÙĦاع ات", + "Ġ ë²ł", + "Ġë² ł", + "Ġکرد ÙĨ", + "Ġکر دÙĨ", + "ा ड", + "ाठ¡", + "Ġà¤ħ र", + "ĠH á»į", + "ĠHá» į", + "ĠгÑĢом ад", + "Ġ ست", + "ĠØ ³Øª", + "Ġس ت", + "ÏĦι ÏĤ", + "Ġan cak", + "Ġanc ak", + "Ġ ог", + "Ġо г", + "Ġk teÅĻÃŃ", + "Ġ æ¬", + "Ġæ ¬", + "Ġ Ngh", + "ĠN gh", + "ĠNg h", + "Ġt edy", + "Ġte dy", + "Ġted y", + "Ġ ÏĢο", + "ĠÏĢ Î¿", + "Ġqu ân", + "Ġб Ñĥли", + "ĠбÑĥ ли", + "è¯ Ĩ", + "Ġt ừng", + "Ġtá» «ng", + "Ġtừ ng", + "人 çļĦ", + "ี à¸ģาร", + "ีà¸ģ าร", + "Ġκα ÏĦα", + "Ġpo uze", + "Ġpou ze", + "¡ ng", + "ĠØ¢ ر", + "Ġ ÑĤÑĥ", + "ĠÑĤ Ñĥ", + "Ġt á»·", + "Ġtá» ·", + "ĠD anh", + "ĠDan h", + "ĠDa nh", + "о ном", + "он ом", + "Ñģ ий", + "Ñģи й", + "Ġ à¹Ģà¸Ķ", + "Ġà¹Ģ à¸Ķ", + "Ġà¹ĢภĶ", + "£ ¨", + "Å¡ k", + "ãĥĥ ãĥī", + "ar dır", + "ard ır", + "Ġyö net", + "Ġyön et", + "Ñĥ вали", + "Ñĥв али", + "Ñĥва ли", + "åħĪ çĶŁ", + "Ġ ÐIJÑĢ", + "ĠÐIJ ÑĢ", + "Ġprot ože", + "Ġproto že", + "Ġ íģ¬", + "Ġíģ ¬", + "Ġjed not", + "Ġjedn ot", + "Ġjedno t", + "Ġt ý", + "éĩ ĩ", + "Ġ หร", + "Ġห ร", + "Ġ åľ°", + "Ġåľ °", + "çº ¢", + "Ġм олод", + "Ġмол од", + "Ġмо лод", + "iên g", + "iê ng", + "ĠÏĮ ÏĦι", + "Ġد اشتÙĩ", + "Ġداش تÙĩ", + "Ġداشت Ùĩ", + "Ġuy gun", + "Ġuyg un", + "Ġuygu n", + "Ġоп еÑĢа", + "ĠопеÑĢ Ð°", + "åı «", + "Ġ ап", + "Ġа п", + "Ġ кÑĥÑĢ", + "Ġк ÑĥÑĢ", + "ĠкÑĥ ÑĢ", + "ا عة", + "اع Ø©", + "un uz", + "unu z", + "Ġ ìĤ¬ì§Ħ", + "ĠìĤ¬ ì§Ħ", + "Ġv ô", + "ç ok", + "ço k", + "Ġ èģ", + "Ġè ģ", + "ÑĤе ÑĢеÑģ", + "ÑĤеÑĢ ÐµÑģ", + "Ġ استاÙĨ", + "Ġا ستاÙĨ", + "Ġاست اÙĨ", + "Ġاس تاÙĨ", + "а лаÑģÑĮ", + "ала ÑģÑĮ", + "à¥ģ व", + "à¥ģठµ", + "á» ³", + "Ġl ưu", + "Ġ Та", + "ĠТ а", + "Ġl á»±a", + "' ÑĶ", + "Ġ üy", + "Ġü y", + "Ġ ÛĮÚ©ÛĮ", + "ĠÛĮ Ú©ÛĮ", + "ĠÛĮÚ© ÛĮ", + "æ ¾", + "н ем", + "не м", + "Ġ خاÙĨ", + "ĠØ® اÙĨ", + "ĠÑį лек", + "ÙĤ اÙĦ", + "л ок", + "ло к", + "ĠÄij ẹp", + "à¥ī ल", + "Ġm ůž", + "Ġmů ž", + "ëĭ¤ ëĬĶ", + "Ġ íķĺëĤĺ", + "Ġíķĺ ëĤĺ", + "ÙĦ ت", + "çݰ åľ¨", + "м о", + "Ïħ Ïĥ", + "ãģŁ ãģ¡", + "ĠìłĦ ìĦ¸", + "à¥į à¤Łà¤°", + "à¥įà¤Ł र", + "ع ات", + "عا ت", + "د ÙĪ", + "ä¿ º", + "æ¥ ½", + "æ£ ®", + "Ġл иÑģÑĤ", + "Ġли ÑģÑĤ", + "δ ι", + "å¯ Į", + "ĠÄij ưa", + "в еÑģÑĤи", + "ве ÑģÑĤи", + "веÑģÑĤ и", + "д о", + "ан нÑĸ", + "Ġü ret", + "Ġür et", + "Ġg á»įi", + "ĠÑģ воÑİ", + "ĠÑģв оÑİ", + "ĠÑģво Ñİ", + "á» «ng", + "ừ ng", + "Ġt ất", + "äºļ æ´²", + "á ce", + "ác e", + "N Ãį", + "Ġ ÑĢÑĭ", + "ĠÑĢ Ñĭ", + "æ» ¡", + "Ïģ εÏĤ", + "Ïģε ÏĤ", + "åħį è´¹", + "л оÑĤ", + "ло ÑĤ", + "æĻ º", + "Ġα γ", + "Ġà¤ħ म", + "Ġ ç´", + "Ġç ´", + "о до", + "од о", + "Ñħ и", + "Ġngu á»ĵn", + "éĥ¨ åĪĨ", + "в аÑĤ", + "ва ÑĤ", + "ĠÑĤ еб", + "ĠÑĤе б", + "з аÑĨÑĸÑĹ", + "за ÑĨÑĸÑĹ", + "Ġ ÐŁÑĢо", + "ĠÐŁ ÑĢо", + "ĠÐŁÑĢ Ð¾", + "ع ÛĮ", + "Ġ ÙĪÙĬ", + "ĠÙĪ ÙĬ", + "ëŀ ľ", + "Ġne by", + "Ġneb y", + "Ġج دÛĮد", + "Ġجد ÛĮد", + "ÄŁ imiz", + "ÄŁim iz", + "£ ½", + "Ġà¤Ĩ त", + "Ġà¤Ń र", + "æī ĺ", + "å®ī åħ¨", + "Ġëĵ¤ ìĸ´", + "ب رد", + "بر د", + "Ġê²ĥ ìĿ´", + "äº ²", + "æ° ı", + "ал Ñĸз", + "алÑĸ з", + "l ack", + "la ck", + "lac k", + "ĠÙħخت ÙĦÙģ", + "ا ÙĨÙĬØ©", + "اÙĨ ÙĬØ©", + "اÙĨÙĬ Ø©", + "Ġ ì²Ń", + "Ġì² Ń", + "Ġ виÑĤ", + "Ġв иÑĤ", + "Ġви ÑĤ", + "Ġhar eket", + "Ġhare ket", + "Ġharek et", + "é ¨", + "à¸Ļ ำ", + "Ġب رخ", + "Ġبر Ø®", + "å£ ²", + "Ñĩ ай", + "Ñĩа й", + "Ġan lat", + "Ġà¤ħ व", + "ĠاÙģ Ø²", + "Ġh ết", + "ĠÚĨ ÙĨد", + "éĹ ľ", + "пÑĢи ÑĶм", + "g ı", + "Ġk omp", + "Ġkom p", + "Ġko mp", + "Ġl Ỽp", + "ĠlỼ p", + "Ġm á»Ĺi", + "Ġmá» Ĺi", + "à¸Ľà¸£à¸° à¸ģ", + "Ġ haf", + "Ġh af", + "Ġha f", + "Ġ eder", + "Ġe der", + "Ġed er", + "Ġзд оÑĢов", + "à¥Ĥ म", + "ëł ¸", + "Ġo nun", + "Ġon un", + "Ġonu n", + "ĠÙħر دÙħ", + "ĠÙħرد Ùħ", + "ĠÐľ аÑĢ", + "ĠÐľÐ° ÑĢ", + "Ġìĸ´ ëĸ", + "м ан", + "ма н", + "Ġ ÑģилÑĮ", + "ĠÑģ илÑĮ", + "ĠÑģи лÑĮ", + "ĠÑģил ÑĮ", + "ç¶ ²", + "ë¸ Ķ", + "л ÑıеÑĤ", + "лÑı еÑĤ", + "ĠнеÑģк олÑĮко", + "ĠнеÑģколÑĮ ко", + "l andır", + "land ır", + "lan dır", + "landı r", + "Ġв д", + "ĠÙĨ ÙĪ", + "ãģ İ", + "ÑĤ ин", + "ÑĤи н", + "ت Ø´", + "а ний", + "ан ий", + "ани й", + "Ġt ÅĻ", + "Ñģ иÑħ", + "Ñģи Ñħ", + "л ом", + "ло м", + "æŃ ©", + "ãİ ¡", + "Ġ ØŃر", + "ĠØŃ ر", + "æĭ į", + "e nou", + "en ou", + "eno u", + "Ġв ели", + "Ġвел и", + "Ġве ли", + "Ġ δη", + "Ġδ η", + "s ka", + "sk a", + "主 è¦ģ", + "ا Ù쨩", + "اÙģ Ø©", + "ĠболÑĮ ÑĪе", + "ĠболÑĮÑĪ Ðµ", + "ิ ศ", + "çĽ Ĭ", + "ĠÙģ ÙĤØ·", + "ĠÙģÙĤ Ø·", + "å¨ ģ", + "Ġh Æ°á»Łng", + "ĠD oÄŁ", + "ĠDo ÄŁ", + "Ġd Ãłi", + "Ġ гоÑĤов", + "Ġг оÑĤов", + "ĠгоÑĤ ов", + "Ġв ам", + "Ġва м", + "âĢ ī", + "ा à¤ļ", + "ाठļ", + "åħ ¸", + "à¹ĥ หà¸į", + "à¹ĥห à¸į", + "Ġ ç«", + "Ġç «", + "ekt ör", + "Ġв ел", + "Ġве л", + "Ġ ÙĦÙĪ", + "ĠÙĦ ÙĪ", + "Ø´ تÙĩ", + "شت Ùĩ", + "æĺ ¾", + "ả y", + "à¹Ĥ ม", + "Ġt á»ķng", + "Ġtá»ķ ng", + "Ġtá»ķn g", + "ĠповеÑĢ Ñħ", + "ÑĹ Ð²", + "Ġph ép", + "çļ ĩ", + "Ġп оÑĢÑıд", + "Ġпо ÑĢÑıд", + "ĠпоÑĢ Ñıд", + "ĠÑģооÑĤ веÑĤ", + "ठĿ", + "ĠÑģеб Ñı", + "Ġ ëĤł", + "ĠëĤ ł", + "Ġб Ñĥла", + "ĠбÑĥ ла", + "à¹ī าย", + "à¹īา ย", + "Ġ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢ", + "ĠÙħ جÙħÙĪØ¹", + "ï¼Į 以", + "Ġب ÙĪØ¯Ùĩ", + "ĠبÙĪØ¯ Ùĩ", + "ĠبÙĪ Ø¯Ùĩ", + "μ ÏĮ", + "Ġ íݸ", + "Ġíİ ¸", + "eÅŁ it", + "Ñİ Ñīие", + "ÑİÑī ие", + "Ñİ ÑīиÑħ", + "ÑİÑī иÑħ", + "åŁº éĩij", + "Ġت ØŃت", + "ĠتØŃ ت", + "Ġв лаÑģ", + "Ġвла Ñģ", + "ler le", + "ãĤ ²", + "ëĬ ĺ", + "è ĵ", + "m anın", + "man ın", + "manı n", + "ìŀ Ī", + "Ġz ast", + "Ġza st", + "Ġzas t", + "ĠÑĩелов ек", + "à¥ĩ ब", + "à¥ĩठ¬", + "p eÄį", + "pe Äį", + "Ġبر ÙĨاÙħÙĩ", + "Ġs lov", + "Ġsl ov", + "Ġslo v", + "ĠnÄĽ jak", + "ĠnÄĽj ak", + "ê· ľ", + "à¥ĩ ह", + "à¥ĩठ¹", + "èĹ ¤", + "ĠبÛĮ شتر", + "ĠبÛĮØ´ تر", + "il iz", + "ili z", + "Ġ ëĶĶ", + "Ġë ĶĶ", + "ĠëĶ Ķ", + "ا زÙĩ", + "از Ùĩ", + "ت د", + "Ġe tm", + "Ġet m", + "Ġëĭ¤ 른", + "Ġ vů", + "Ġv ů", + "å° Ħ", + "Ġк лаÑģ", + "Ġкл аÑģ", + "Ġкла Ñģ", + "в ÑĢоп", + "æ´ ¾", + "ĠÄij ình", + "Ñĥ ÑİÑĤ", + "ÑĥÑİ ÑĤ", + "Ñĥ еÑĤÑģÑı", + "ÑĥеÑĤ ÑģÑı", + "éľ ²", + "Ġ ÑģкоÑĢ", + "ĠÑģ коÑĢ", + "ĠÑģк оÑĢ", + "Ġв аÑģ", + "Ġва Ñģ", + "íķĺ ìĺĢëĭ¤", + "íķĺìĺĢ ëĭ¤", + "Ġ داشت", + "Ġد اشت", + "Ġداش ت", + "Ġ çĦ", + "Ġç Ħ", + "Ġ 西", + "Ġè ¥¿", + "Ġκα ÏĦά", + "ॠ¦", + "ìĹ Ĩ", + "Ġ خدÙħ", + "ĠØ® دÙħ", + "Ġخد Ùħ", + "ا سÙħ", + "اس Ùħ", + "Îij Ρ", + "ĠA ma", + "ĠAm a", + "å¥ ¥", + "Ġبزر Ú¯", + "Ġ ÐĴÑĸн", + "ĠÐĴ Ñĸн", + "Ġ Åĺ", + "ĠÅ ĺ", + "Ġ à¸Īาà¸ģ", + "Ġà¸Ī าà¸ģ", + "ĠÑħаÑĢакÑĤ еÑĢ", + "ĠÄij á»Ļi", + "ĠÄijá»Ļ i", + "ĠÑĢоз виÑĤ", + "ĠÑĢозви ÑĤ", + "ĠпÑĢоÑĦ еÑģ", + "Ġкон ÑĤÑĢ", + "ĠконÑĤ ÑĢ", + "ÎŁ ÎĽ", + "ÎŁÎ Ľ", + "Ġm inh", + "Ġmin h", + "Ġmi nh", + "ä¼ ij", + "ì ª½", + "Ġch Æ¡i", + "з аÑĨии", + "за ÑĨии", + "ĠдÑĸÑı лÑĮ", + "ë Ĩ", + "Ġn gay", + "Ġng ay", + "Ġnga y", + "à¥Ĥ à¤Ĥ", + "Ġiht iy", + "éĽ ª", + "Ġ ê´Ģ리ìŀIJ", + "Ġê´Ģ리 ìŀIJ", + "Ġc ụ", + "Ġ ì§Ī", + "Ġì§ Ī", + "ÙĬ Ø«", + "ặ p", + "ÙĪ Ø§Ø¹", + "ÙĪØ§ ع", + "ãģĤ ãģ£ãģŁ", + "Ġ çľ", + "Ġç ľ", + "Ġ ìļ°ë¦¬", + "Ġìļ° ë¦¬", + "à¹Ī à¸ĩà¸Ĥ", + "à¹Īà¸ĩ à¸Ĥ", + "Ġ çŃ", + "Ġç Ń", + ") ØĮ", + "Ãł m", + "ÙĦ ÛĮÙĦ", + "ÙĦÛĮ ÙĦ", + "Ġ 걸", + "Ġê± ¸", + "алÑĮ ниÑħ", + "æĹ¶ åĢĻ", + "un dan", + "und an", + "unda n", + "Ġ Gün", + "ĠG ün", + "ĠGü n", + "Ġ topl", + "Ġt opl", + "Ġto pl", + "Ġtop l", + "ĠÑĢек омен", + "ĠاÙĨت خاب", + "Ãł u", + "Äį ka", + "ë° Ģ", + "Ġк ÑĢаÑģ", + "ĠкÑĢа Ñģ", + "л оп", + "ло п", + "å¼ µ", + "ĠاÙĦ Ùħع", + "ĠاÙĦÙħ ع", + "m ÃŃn", + "mÃŃ n", + "Ġv iết", + "Ġvi ết", + "Ġ ê°ĻìĿĢ", + "Ġê°Ļ ìĿĢ", + "ut eÄį", + "ute Äį", + "Ġ nech", + "Ġn ech", + "Ġne ch", + "Ġnec h", + "çµ Ĥ", + "ãģª ãģĮ", + "ay ın", + "ayı n", + "Ġ Äįin", + "ĠÄį in", + "ĠÄįi n", + "ch ázÃŃ", + "cház ÃŃ", + "اÙģ Ø¸", + "ÑĢ Ð¾Ð²Ð°ÑĤÑĮ", + "ÑĢов аÑĤÑĮ", + "ÑĢо ваÑĤÑĮ", + "ÑĢова ÑĤÑĮ", + "à¹Ħ ร", + "Ġ ãĤ¤", + "ĠãĤ ¤", + "Ġзаб олева", + "Ġ å±±", + "Ġå± ±", + "Ġka dın", + "Ġkad ın", + "ÏĦ ηÏĤ", + "ÏĦη ÏĤ", + "а лиÑģÑĮ", + "ал иÑģÑĮ", + "али ÑģÑĮ", + "Ġh ük", + "åĵ ¥", + "Ġп еÑĢи", + "ĠпеÑĢ Ð¸", + "ÅĻ Ã¡d", + "Ġà¤ħ स", + "Ġ ÑģÑĤвоÑĢ", + "ĠÑģÑĤ воÑĢ", + "ĠÙĪ ÛĮÚ©ÛĮ", + "ĠÙĪÛĮ Ú©ÛĮ", + "Ġ ì¡", + "Ġì ¡", + "Ġc á»Ńa", + "Ġcá»Ń a", + "Ġh iá»ĥu", + "游 æĪı", + "ÑĮ омÑĥ", + "Ġg ó", + "Ġt oh", + "Ġto h", + "Ġб ла", + "Ġбл а", + "Ġ åij", + "Ġå ij", + "Ġп ло", + "Ġпл о", + "и ÑĪ", + "ĠÄij ấu", + "s kou", + "sk ou", + "sko u", + "ãĤĪ ãĤĬ", + "ู à¸Ľ", + "Ġr á»ĵi", + "оп ÑĢоÑģ", + "н олог", + "ĠÑĤ ÑĢав", + "ĠÑĤÑĢ Ð°Ð²", + "ĠÑĤÑĢа в", + "ĠWay back", + "Ġ à¹Ĩ", + "ĠÑĥ ÑĩаÑģÑĤ", + "ĠÑĥÑĩ аÑģÑĤ", + "ĠÑĥÑĩа ÑģÑĤ", + "ĠÑĥÑĩаÑģ ÑĤ", + "ĠпÑĢеп аÑĢа", + "Ġd ạng", + "ĠÃľ n", + "à¹Ħล à¸Ļ", + "Ġد اخ", + "Ġs Æ¡", + "Ġk oy", + "Ġko y", + "ëĿ¼ ê³ł", + "ĠÄij úng", + "à¥ĩà¤Ĥ ,", + "Ġgeç ir", + "ĠÑıк Ñīо", + "Ñģ ÑĤÑĢо", + "ÑģÑĤ ÑĢо", + "ÑģÑĤÑĢ Ð¾", + "ен ÑĤов", + "енÑĤ ов", + "Ñĸ ж", + "к ÑĥÑİ", + "кÑĥ Ñİ", + "Ġe ÄŁitim", + "ĠeÄŁit im", + "à¥įर स", + "Ġ Сп", + "ĠС п", + "ا تÛĮ", + "ات ÛĮ", + "ãģij ãĤĭ", + "ÏĦ Ïīν", + "ÏĦÏī ν", + "Ġ км", + "Ġк м", + "âĸįâĸį âĸįâĸį", + "j ist", + "ji st", + "jis t", + "ÑĤ ак", + "ÑĤа к", + "Ġ åIJįåīį", + "ĠåIJį åīį", + "é¡ Ķ", + "л Ñĭ", + "Ġkh ảo", + "Ġkhả o", + "âĢĻ Ñı", + "ĠÙħ ÙĦÛĮ", + "ĠÙħÙĦ ÛĮ", + "l ož", + "lo ž", + "Ġ ìĸ¸", + "Ġìĸ ¸", + "Ġg ần", + "Ġ à¤ľà¤°", + "Ġà¤ľ र", + "ब र", + "Îķ Σ", + "า à¸Ľ", + "าภĽ", + "Ġn ás", + "Ġná s", + "form ace", + "forma ce", + "Ġet mek", + "Ġetm ek", + "Ġetme k", + "в еÑģÑĤ", + "ве ÑģÑĤ", + "ìĸ´ ìļĶ", + "Ġत थ", + "ĠÑģ ек", + "ξ η", + "æ¯ Ľ", + "B ir", + "Bi r", + "Ġ ìŀĦ", + "Ġìŀ Ħ", + "Ġv ardır", + "Ġvar dır", + "Ġvardı r", + "ÙĪ Ø§ÙĦ", + "ÙĪØ§ ÙĦ", + "İ R", + "ov ané", + "ova né", + "ovan é", + "н аÑĢод", + "на ÑĢод", + "наÑĢ Ð¾Ð´", + "à¸Ħ ำ", + "e mek", + "em ek", + "eme k", + "ĠÎķ ÏĢ", + "Ġ ÅĻe", + "ĠÅĻ e", + "ãģ¾ ãģĽ", + "uyá»ĩ t", + "Ġ ìĸ¼", + "Ġìĸ ¼", + "r ů", + "Ġ onu", + "Ġo nu", + "Ġon u", + "à¹Ģà¸ķ à¸Ńร", + "од аÑĢ", + "ода ÑĢ", + "ز Ùĩ", + "Ġk av", + "Ġka v", + "о нÑĭ", + "он Ñĭ", + "Ġв еÑģ", + "Ġве Ñģ", + "ìĤ¬ ì§Ģ", + "Ġг ла", + "à Ŀ", + "ĠÙĤ ÛĮÙħت", + "çķ ¥", + "à¸ĸ าà¸Ļ", + "Äį il", + "Äįi l", + "Ġ ä¸ĩ", + "Ġä¸ ĩ", + "è¾ ĥ", + "åħ ħ", + "Ġ ÑĢед", + "ĠÑĢ ÐµÐ´", + "ĠÑĢе д", + "ม ห", + "am ilia", + "ami lia", + "amil ia", + "à¥ĩ à¤ķर", + "à¥ĩà¤ķ र", + "Ġt á»iji", + "Ġtá»ij i", + "Ùģ ÛĮ", + "ÑĢ ÑĸÑĪ", + "ÑĢÑĸ ÑĪ", + "ìķ ł", + "à¸Ļ ส", + "à¸Ī ร", + "à¥ĩ शन", + "à¥ĩश न", + "ĠÙħÙĪ Ø¶ÙĪØ¹", + "æī ¹", + "Ġob sah", + "Ġobs ah", + "Ġнав Ñĩ", + "Ġdes tek", + "Ġdest ek", + "Ġdeste k", + "Ġ zas", + "Ġz as", + "Ġza s", + "å ĵį", + "åĵ į", + "üm üz", + "ümü z", + "Ġ çŁ", + "Ġç Ł", + "Ġ è¨", + "Ġè ¨", + "Ù ¬", + "ç» Ī", + "Ġz de", + "Ġzd e", + "Ġz áp", + "Ġzá p", + "à¥Ĥ सर", + "à¥Ĥस र", + "ìĿ´ ì§Ģ", + "çļ ®", + "l om", + "lo m", + "ॠ§", + "ÙĦ اÙĤ", + "ÙĦا ÙĤ", + "à¸Ļ à¸ķ", + "íĮ ħ", + "л ада", + "ла да", + "лад а", + "m asına", + "mas ına", + "ması na", + "ãģ® ãģ§", + "ëĵ¤ ìĿĦ", + "Ġн аг", + "Ġна г", + "m asını", + "mas ını", + "ãĤ Ŀ", + "ın ıf", + "ını f", + "åĽ ´", + "Ġböl üm", + "å¥ ĸ", + "æ¨ Ļ", + "ÙĦ اØŃ", + "ÙĦا ØŃ", + "Ġг оÑģÑĥдаÑĢ", + "داÙĨ ÙĦÙĪØ¯", + "Ġп оÑĤÑĢеб", + "ĠпоÑĤ ÑĢеб", + "ĠÑĢ Ð¾ÑĨÑĸ", + "о га", + "ог а", + "ĠÑģлед ÑĥеÑĤ", + "Ġп аÑĢа", + "ĠпаÑĢ Ð°", + "Ġпа ÑĢа", + "é ¼", + "ãģį ãģŁ", + "ί ζ", + "Ġb á»ij", + "ÑĤ Ñĸв", + "ÑĤÑĸ в", + "ï¼Į 她", + "f amilia", + "éł ħ", + "Ġد ÙĦ", + "Ġs kup", + "Ġsk up", + "Ġsku p", + "еÑĩ ение", + "ãģĵãģ¨ ãģĮ", + "à¥Ģ ब", + "ุ ล", + "¨ ë¶Ģ", + "ĠاÙĦع رب", + "Ġ ç¾İ", + "Ġç¾ İ", + "ĠاÙĦ ÙħÙĪ", + "ĠاÙĦÙħ ÙĪ", + "Ġ Ø¥ÙĨ", + "ĠØ¥ ÙĨ", + "Ġná sled", + "Ġnás led", + "Ġt omu", + "Ġto mu", + "Ġtom u", + "Î Ħ", + "Ġз ави", + "Ġза ви", + "Ġзав и", + "Ġn hu", + "Ġnh u", + "ĠpÅĻed stav", + "ìłķ ë³´", + "o kol", + "ok ol", + "oko l", + "Ġк ÑĢи", + "a du", + "ad u", + "Ġ каÑĤ", + "Ġк аÑĤ", + "Ġка ÑĤ", + "Ġ ÑįÑĦ", + "ĠÑį ÑĦ", + "в ал", + "ва л", + "m ayı", + "ma yı", + "may ı", + "ĠÑĩаÑģ ÑĤо", + "ĠÑĩаÑģÑĤ о", + "Ġtr anh", + "Ġtra nh", + "Ġtran h", + "ائ ÙĦ", + "ãĤĪãģĨ ãģª", + "Ġp oh", + "Ġpo h", + "ìĥģ ìľĦ", + "Ġs ắc", + "Ùĥ س", + "Ġ мÑĥ", + "Ġм Ñĥ", + ". ::", + ".: :", + "ë Ī", + "» Ċ", + "Ġ ÙĨÚ¯", + "ĠÙĨ Ú¯", + "ÙIJ ÙĨ", + "н иком", + "ни ком", + "ник ом", + "Ñħ а", + "Ġ μοÏħ", + "Ġμ οÏħ", + "Ġμο Ïħ", + "ĠNg uyá»ħn", + "ĠвÑĭ Ñģок", + "ĠвÑĭÑģ ок", + "Ġ ÐŁÐ¾Ð´", + "ĠÐŁ од", + "ĠÐŁÐ¾ д", + "ĠпÑĢи ÑĢод", + "à¥ĭ ध", + "िà¤ķ ल", + "и ÑĢа", + "иÑĢ Ð°", + "ëĭ¤ ê³ł", + "Ġm ajÃŃ", + "Ġma jÃŃ", + "Ġmaj ÃŃ", + "Ġv ùng", + "Ġtarih inde", + "Ġtarihi nde", + "Ġ ваÑĢ", + "Ġв аÑĢ", + "Ġва ÑĢ", + "н иÑĤÑĮ", + "ни ÑĤÑĮ", + "ниÑĤ ÑĮ", + "ει ÏĤ", + "Ġ åĩº", + "Ġåĩ º", + "dy ž", + "ÏĦ Ïİν", + "ÏĦÏİ Î½", + "ä½ĵ èĤ²", + "Ġ à¹Ģว", + "Ġà¹Ģ ว", + "Ġà¹Ģภ§", + "Ġà¤ħ à¤ļ", + "Ġ اÙĨÚ¯ÙĦÛĮسÛĮ", + "ĠاÙĨÚ¯ ÙĦÛĮسÛĮ", + "à¥įय म", + "Ġgel iÅŁ", + "æ¹ ĸ", + "Ġ اک", + "Ġا Ú©", + "Ġп лан", + "Ġпл ан", + "Ġпла н", + "k yt", + "ky t", + "ا بÛĮ", + "اب ÛĮ", + "κ ι", + "Ġc hung", + "Ġch ung", + "Ġchu ng", + "ान à¤ķ", + "s ı", + "Ġt inh", + "Ġti nh", + "Ġtin h", + "ĠÑģÑĤ ол", + "ĠÑģÑĤо л", + "ÑģÑĤ ÑĢÑĥ", + "ÑģÑĤÑĢ Ñĥ", + "Ġли ÑĪе", + "ĠлиÑĪ Ðµ", + "Ġви ÑĢоб", + "il miÅŁ", + "ilm iÅŁ", + "Ġ зÑĸ", + "Ġз Ñĸ", + "ç» Ĩ", + "åĢ Ĵ", + "ãĤ· ãĥ£", + "åŃ ©", + "Ġ à¹Ĥรà¸ĩà¹Ģร", + "Ġà¹Ĥ รà¸ĩà¹Ģร", + "Ġà¹Ĥรà¸ĩ à¹Ģร", + "íĻ ľ", + "ĠбÑĥд е", + "ĠбÑĥ де", + "Ġyak laÅŁ", + "èĩª åĪĨ", + "Ġ ÙģÙĪ", + "ĠÙģ ÙĪ", + "С Т", + "Ġso run", + "Ġsor un", + "Ġsoru n", + "à¹Ģ à¸ł", + "à¹Ģภł", + "Ġc ô", + "в иÑĩ", + "ви Ñĩ", + "ëĵ¤ ìĿĺ", + "Ġtr iá»ĩu", + "Ġtri á»ĩu", + "Ġr õ", + "Ġ ãģ«", + "ÄŁ im", + "ÄŁi m", + "iyor uz", + "è ľ", + "à¥įर व", + "Ġس Ù¾", + "Ġ ìĦľìļ¸", + "ĠìĦľ ìļ¸", + "δ ε", + "еÑĢ ÑĪ", + "Ġ أس", + "ĠØ£ س", + "äº ŀ", + "è¯ į", + "п ÑĤом", + "ฤ ษ", + "Ġساز ÙħاÙĨ", + "Ġlu ôn", + "Ùĩ ÙĪØ±", + "c ü", + "аÑĤ кÑĥ", + "Ġo labilir", + "Ġol abilir", + "Ġolab ilir", + "Ġola bilir", + "Ġ ìĹ°êµ¬", + "ĠìŰ 구", + "ен ной", + "енно й", + "Ġ æĪij", + "ĠæĪ ij", + "Ġ него", + "Ġн его", + "Ġне го", + "Ġнег о", + "Ġ. **************", + "ิ à¸ĺ", + "Ġ ãĤ·", + "ĠãĤ ·", + "ت Ùģ", + "ÐŁ ÑĢо", + "ÐŁÑĢ Ð¾", + "Ġhakk ında", + "Ġhakkı nda", + "Äį nÄĽ", + "ĠM ỹ", + "é ½", + "ĠÏĥ ÏĦον", + "ĠÏĥÏĦο ν", + "Ġ âm", + "Ġâ m", + "§ ظ", + "ĠÅŁ irket", + "æĥħ åĨµ", + "ĠØ¢ÙħÙĪØ² Ø´", + "λ εÏħ", + "λε Ïħ", + "Ùħ Ùĩ", + "è¦ ı", + "ãģ¨ æĢĿ", + "Ġ ÙĪØ¹", + "ĠÙĪ Ø¹", + "ÏĪ Î·", + "Ïģ οÏį", + "Ïģο Ïį", + "Ġ ÂłĊ", + "ĠÂł Ċ", + "δ η", + "ÑĪ Ð¾Ð²", + "åĪ ¤", + "Ġm ắt", + "æĭ ¿", + "à¸Ļ à¸Ķ", + "éĻ Ħ", + "à¹ī ม", + "ĠÄij ạt", + "Ġg üzel", + "Ġgü zel", + "m Ã¼ÅŁ", + "Ðŀ ÐĴ", + "çĭ ¬", + "리 를", + "Ġп лаÑĤ", + "Ġпл аÑĤ", + "Ġпла ÑĤ", + "Ġngh á»ĭ", + "ĠÑĤак иÑħ", + "ĠÑĤа киÑħ", + "б иÑĢа", + "би ÑĢа", + "Ġн ек", + "Ġне к", + "ÑģÑĮ кÑĸ", + "ÑģÑĮк Ñĸ", + "رÙĬ اض", + "o nu", + "on u", + "à¥ĭ म", + "ĠGi Ỽi", + "ĠGiá» Ľi", + "èŀ į", + "é ²", + "ĠGe nel", + "ĠGen el", + "ĠGene l", + "åĬ ¿", + "Ġ вÑĸ", + "Ġв Ñĸ", + "å§ IJ", + "è© ¦", + "ĠжиÑĤ ÑĤÑı", + "Ġ ìĺ¨", + "Ġìĺ ¨", + "åĩº æĿ¥", + "Ġt á»ij", + "Ġtá» ij", + "Ġl ao", + "Ġla o", + "ί ο", + "ĠÎł α", + "н иÑĤелÑĮ", + "ниÑĤ елÑĮ", + "ниÑĤе лÑĮ", + "éļ İ", + "Ġви кон", + "Ġвик он", + "Ġвико н", + "ĠÙģ Ø¹Ø§ÙĦ", + "ĠÙ쨹 اÙĦ", + "à¹Ģ ศ", + "à¹Ģภ¨", + "ÏĮ γ", + "ĠоÑĢгани з", + "ĠоÑĢган из", + "Ġ емÑĥ", + "Ġе мÑĥ", + "Ġем Ñĥ", + "Ġ ÙĬع", + "ĠÙĬ ع", + "ĠÙħ ب", + "ाल य", + "ĠÎľ ÏĢ", + "é ¸", + "ù a", + "ê¸ ¸", + "Ġ ÄIJiá»ģu", + "ĠÄIJ iá»ģu", + "ε ίο", + "εί ο", + "äº ī", + "ượ t", + "ÑĢа зÑĥ", + "ÑĢаз Ñĥ", + "ĠоÑĤ ÑĢим", + "ĠоÑĤÑĢи м", + "Ġ طب", + "ĠØ· ب", + "Ġ 以", + "æĸ Ĺ", + "ë° ±", + "à¤ĩ स", + "ë§Į ìĽIJ", + "ãĢģ ãģĿãģ®", + "ĠëķĮ 문", + "ĠØ¢ ÛĮ", + "С Ðł", + "ض ÙĦ", + "æ ĵį", + "æĵ į", + "k azy", + "ka zy", + "kaz y", + "ส ว", + "â ng", + "ân g", + "à¤Ĥ à¤Ń", + "н ÑĸÑĩ", + "нÑĸ Ñĩ", + "ั à¸ĩà¸ģ", + "ัà¸ĩ à¸ģ", + "Ġبر رسÛĮ", + "ر دÙĩ", + "رد Ùĩ", + "Ġm ẫu", + "à¹Ī วà¸ĩ", + "à¹Īว à¸ĩ", + "ĠداÙĨØ´ گاÙĩ", + "d ıģ", + "dı ÄŁ", + "ĠT á»ķng", + "ĠTá»ķ ng", + "第 äºĮ", + "c ÃŃm", + "cÃŃ m", + "Ġb öyle", + "Ġbö yle", + "ë ¶Ī", + "ë¶ Ī", + "ĠÙħÙĨ ابع", + "à¥ĥ ष", + "е ÑĤÑĭ", + "еÑĤ Ñĭ", + "åĨ ·", + "åĽ Ń", + "Ġت ÙĪØ¬Ùĩ", + "ĠتÙĪ Ø¬Ùĩ", + "åĪ »", + "æŀ ģ", + "à¤Ł न", + "л ан", + "ла н", + "Ġ íĥĢ", + "Ġíĥ Ģ", + "ä½ IJ", + "Ġ обÑĭ", + "Ġо бÑĭ", + "Ġоб Ñĭ", + "å¸ Ŀ", + "ì» ¤", + "å® Ī", + "èµ· æĿ¥", + "Ġ ãĥ¬", + "Ġãĥ ¬", + "çİ ī", + "à¹Ģ หล", + "à¹Ģห ล", + "и не", + "ин е", + "ห าร", + "หา ร", + "éļ ı", + "Ġг аз", + "ĠاÙĦ عÙħÙĦ", + "ĠاÙĦع ÙħÙĦ", + "ĠاÙĦعÙħ ÙĦ", + "à¥ģ à¤Ŀ", + "à¥ģठĿ", + "Ïģ ιο", + "Ïģι ο", + "Ġv ám", + "Ġvá m", + "Ġع ÙĨد", + "ĠعÙĨ د", + "ÙĨد گاÙĨ", + "ï¼Į éĤ£", + "Ġна Ñħод", + "á no", + "án o", + "ÛĮ اÙĨ", + "ÛĮا ÙĨ", + "ĠØ£ ع", + "Ġ ÑĢади", + "ĠÑĢ Ð°Ð´Ð¸", + "ĠÑĢа ди", + "ĠÑĢад и", + "Ġм ене", + "Ġмен е", + "Ġú da", + "Ïĩ ν", + "ÑĥлÑı ÑĢ", + "à¥Ģ प", + "Ġpou žÃŃ", + "Ġ ä¸", + "ĠÙĤ اÙĨÙĪÙĨ", + "ι κοÏį", + "ικ οÏį", + "ικο Ïį", + "á y", + "Ġç öz", + "ÏĦ Ïģ", + "ÙĨ اÙħ", + "ÙĨا Ùħ", + "ุ à¸ķ", + "åĵ ª", + "ÙĬ ب", + "ä¹ °", + "ÐĶ Ð»Ñı", + "Ġ ëłĪ벨", + "ĠëłĪ 벨", + "ุ à¸ļ", + "н ÑĥÑĤи", + "нÑĥ ÑĤи", + "нÑĥÑĤ и", + "è½ »", + "ĠÎľ α", + "Ġ è¦", + "Ġè ¦", + "аÑĤ ков", + "Ġ ëĪĦ", + "ĠëĪ Ħ", + "Ġt uyá»ĥn", + "Ġtuy á»ĥn", + "Ùİ Ùħ", + "ĠвÑĭ пол", + "ĠвÑĭп ол", + "Ġst udi", + "Ġstud i", + "Ġstu di", + "ĠpÅĻ ek", + "ĠpÅĻe k", + "Ġз ам", + "Ġза м", + "Ġmat eri", + "Ġma teri", + "Ġmate ri", + "Ġmater i", + "åİ ĭ", + "Ġ ал", + "Ġа л", + "Ġ à¸ļร", + "Ġà¸ļ ร", + "Ø· ØŃ", + "ĠÙħر Ú©", + "Ġ ìĭ¬", + "Ġìĭ ¬", + "ĠÙĤ ابÙĦ", + "ĠÙĤاب ÙĦ", + "ĠÐIJ ле", + "ĠÐIJл е", + "ın tı", + "Ġ å»", + "Ġå »", + "İ K", + "ëħĦ ëıĦ", + "Ñĭ ваÑĤÑĮ", + "Ñĭв аÑĤÑĮ", + "Ñĭва ÑĤÑĮ", + "Ġdev let", + "社 ä¼ļ", + "ëĤ ł", + "Ġko lay", + "Ġkol ay", + "Ġkola y", + "ĠÑĢазв иÑĤи", + "ĠÑĢазви ÑĤи", + "а ди", + "ад и", + "ئ ÙĬس", + "a dıģı", + "ad ıģı", + "adı ģı", + "adıģ ı", + "Îij ÎĽ", + "Ġ hoa", + "Ġh oa", + "Ġho a", + "Ġ ศ", + "Ġภ¨", + "ı ÅŁtır", + "Ä±ÅŁ tır", + "ÑĢ Ñİ", + "Ġк аÑĩе", + "Ġка Ñĩе", + "¼ åIJĪ", + "åħ ´", + "Ġ ê·¸ëŁ¬", + "Ġê·¸ 룬", + "Ġм ÑĸÑģÑĤ", + "ĠмÑĸ ÑģÑĤ", + "ĠмÑĸÑģ ÑĤ", + "Ġм не", + "Ġмн е", + "ãĥ¼ ãĤº", + "ãĥ¼ãĤ º", + "ç§ Ģ", + "Ġع ÙĦÙĬÙĩ", + "ĠعÙĦ ÙĬÙĩ", + "ĠعÙĦÙĬ Ùĩ", + "Ġ ìĭľê°Ħ", + "Ġìĭľ ê°Ħ", + "Ġà¤ĺ र", + "Ġ Ñĥг", + "ĠÑĥ г", + "åıij å±ķ", + "ı ÅŁÄ±", + "Ä±ÅŁ ı", + "Ġ ìĪľ", + "ĠìĪ ľ", + "Ġ íĻľ", + "ĠíĻ ľ", + "æ¡ £", + "Ġn okt", + "Ġno kt", + "Ġnok t", + "l ém", + "lé m", + "ен нÑĭй", + "Ġب Ùħ", + "à¥ĩ य", + "à¥ĩठ¯", + "о дав", + "од ав", + "ода в", + "à¹Ĥ ร", + "ï¼Į æľī", + "ا ÙĬات", + "اÙĬ ات", + "اÙĬا ت", + "ا ÛĮÙĩ", + "اÛĮ Ùĩ", + "Ġà¤īप य", + "Ġs mÄĽ", + "Ġsm ÄĽ", + "Ø´ د", + "Ш ÐIJ", + "Ġا ÙħاÙħ", + "ĠاÙħ اÙħ", + "ĠاÙħا Ùħ", + "æ¿ Ģ", + "Ġho ạch", + "об ÑĢаз", + "обÑĢаР·", + "à¥ĭ ह", + "ĠÑĢеб ен", + "иÑĤ елÑı", + "иÑĤе лÑı", + "ãģªãģĮ ãĤī", + "س اÙĦ", + "Ġ à¸Īำ", + "Ġà¸Ī ำ", + "Ġ خاص", + "ĠØ® اص", + "Ġg eri", + "Ġge ri", + "Ġger i", + "ठĺ", + "Ġ ìº", + "Ġì º", + "à¹ģ à¸Ĺ", + "âĢĮ ÛĮ", + "Ú¯ رÛĮ", + "گر ÛĮ", + "ا Ùħبر", + "اÙħ بر", + "ÑĪ Ñĥ", + "Ġp hong", + "Ġph ong", + "Ġphon g", + "и мо", + "им о", + "п а", + "Ġ ìµľê³ł", + "Ġìµľ ê³ł", + "Ġ нам", + "Ġн ам", + "Ġна м", + "o stÃŃ", + "os tÃŃ", + "ost ÃŃ", + "is ini", + "isi ni", + "isin i", + "Ġд Ñĥже", + "ĠдÑĥ же", + "Ñģ ком", + "Ñģк ом", + "Ñģко м", + "ĠпÑĢод Ñĥк", + "ÏĮ ÏĦηÏĦα", + "ÏĮÏĦη ÏĦα", + "a ln", + "al n", + "is ine", + "isi ne", + "isin e", + "è¿ ľ", + "алÑĮ ной", + "алÑĮно й", + "त र", + "t ıģ", + "tı ÄŁ", + "Ġë Ĵ", + "è¿ĺ æĺ¯", + "ĠÙħ Ø«ÙĦ", + "ĠÙħØ« ÙĦ", + "ìľ ¨", + "ï¾ ĺ", + "åĪ ¸", + "ç ¶ļ", + "ç¶ ļ", + "ج اد", + "جا د", + "Ġ кÑĥ", + "Ġк Ñĥ", + "åĢ ij", + "o vu", + "ov u", + "Ġs Ä©", + "Ġ ìłIJ", + "Ġìł IJ", + "ĠÑĥ ÑĢов", + "ि à¤ļ", + "िठļ", + "ov ali", + "ova li", + "oval i", + "Ġ ÙĪÙĨ", + "ĠÙĪ ÙĨ", + "Ġ ìĿĮ", + "ĠìĿ Į", + "Ġк г", + "า à¸ĺ", + "าภĺ", + "ÏĦ Ïģα", + "ÏĦÏģ α", + "ž dy", + "à¹Į à¸ķ", + "Ġ nÄĽm", + "ĠnÄĽ m", + "Ġ Це", + "ĠЦ е", + "n oho", + "no ho", + "Ġëĭ¤ ìĭľ", + "Ġté to", + "Ġb iá»ĥu", + "ĠY ön", + "Ġpr áce", + "Ġprá ce", + "à¥ī र", + "Ġch ÃŃ", + "ов ой", + "ово й", + "Ġm ợ", + "Ġmá» Ł", + "èª ª", + "Ïİ ÏĤ", + "в олÑı", + "во лÑı", + "вол Ñı", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "å¯ ¦", + "é» ŀ", + "Ġà¤ı व", + "Ïħ να", + "Ïħν α", + "å² ¡", + "kh ông", + "ĠpÅĻÃŃpad ÄĽ", + "å Ĺ", + "Ġبد ÙĪÙĨ", + "Ïĥ κε", + "Ïĥκ ε", + "Ġdik kat", + "ĠAn cak", + "ĠAnc ak", + "Ġt iá»ĩn", + "Ġti á»ĩn", + "éĿ Ļ", + "Ġ ìĿ¼ë°ĺ", + "ĠìĿ¼ ë°ĺ", + "ĠÄį len", + "ìķ ħ", + "ा à¤ĩन", + "ाà¤ĩ न", + "ãģ£ ãģ¦ãģĦãģŁ", + "ãģ£ãģ¦ ãģĦãģŁ", + "ãģ£ãģ¦ãģĦ ãģŁ", + "ĠìĿ´ ìļ©", + "ÙĪ ÙħÛĮ", + "ÙĪÙħ ÛĮ", + "i ná", + "in á", + "ặ ng", + "ặn g", + "Ïİ Ïģα", + "ÙĨ ÙĬØ©", + "ÙĨÙĬ Ø©", + "в аж", + "ва ж", + "è İ·", + "èİ ·", + "å© ļ", + "ĠÅŁ u", + "Ġ ãģĬ", + "Ġد رب", + "Ġدر ب", + "Ġd iá»ħn", + "ÅĻ eba", + "ÅĻe ba", + "ÅĻeb a", + "as ının", + "asını n", + "ç½ij ç«Ļ", + "н ÑĮого", + "нÑĮ ого", + "нÑĮо го", + "ĠاÙĦØ£ ÙĪÙĦ", + "ικ ÎŃÏĤ", + "Ġz ÃŃsk", + "о ло", + "ол о", + "ĠÑį ÑĤоÑĤ", + "ĠÑįÑĤ оÑĤ", + "ĠÑįÑĤо ÑĤ", + "Ġp okud", + "Ġpo kud", + "Ġpok ud", + "è² »", + "е ÑĢÑĸв", + "еÑĢ Ñĸв", + "еÑĢÑĸ в", + "ãĥķ ãĤ£", + "ãĥķãĤ £", + "иÑĤÑĥ а", + "Ġv yd", + "Ġvy d", + "о лож", + "ол ож", + "оло ж", + "л ÑıÑĤÑĮ", + "лÑı ÑĤÑĮ", + "ÙĤ Ùħ", + "æ´ ĭ", + "æ§ ĭ", + "Ġغ ÛĮر", + "Ġ stÅĻed", + "Ġst ÅĻed", + "ĠstÅĻ ed", + "ظ ر", + "Ġhiç bir", + "θ εί", + "θε ί", + "z nik", + "zn ik", + "д Ñĭ", + "l uv", + "lu v", + "ĠÙħ ؤ", + "ĠÚ¯ رÙĪÙĩ", + "Ġگر ÙĪÙĩ", + "Ġ ï¼īĊ", + "Ġï¼ī Ċ", + "t eri", + "ter i", + "te ri", + "ĠÏħ ÏĢο", + "ĠÏħÏĢ Î¿", + "v oj", + "vo j", + "Ġبع ض", + "Ġb ilin", + "Ġbi lin", + "Ġbil in", + "Ġ رÙĪØ´", + "Ġر ÙĪØ´", + "ĠرÙĪ Ø´", + "Ġоб Ñıз", + "Ġ ï»", + "Ġï »", + "س ÙĨ", + "Ġ ÏĢα", + "ĠÏĢ Î±", + "í į¼", + "Ġt ÃŃn", + "ĠtÃŃ n", + "Ġ ´", + "Ġ ´", + "ìĤ¬ ìĿ´íĬ¸", + "ìĤ¬ìĿ´ íĬ¸", + "Ġ podob", + "Ġpo dob", + "Ġpod ob", + "Ñī ее", + "Ñīе е", + "Ġ åįĹ", + "Ġåį Ĺ", + "Ġb ych", + "Ġby ch", + "о зи", + "оз и", + "ĠV Äĥn", + "ØŃ Ùĩ", + "åѦ éĻ¢", + "ĠÅĻ ekl", + "ĠÅĻe kl", + "ĠÅĻek l", + "립 ëĭĪëĭ¤", + "Ġп ÑĢоÑģ", + "ĠпÑĢ Ð¾Ñģ", + "ĠпÑĢо Ñģ", + "κ ά", + "ĠbaÅŁ ladı", + "á»§ y", + "Ñİ Ð´Ð¶", + "ाà¤ı à¤Ĺ", + "à¤Ĥ à¤ļ", + "Ġ ê´Ģ볨", + "Ġê´Ģ 볨", + "Ġв опÑĢоÑģ", + "ĠÑģÑĤ аÑĤÑĮ", + "ĠÑģÑĤаÑĤ ÑĮ", + "ĠÑģÑĤа ÑĤÑĮ", + "Ġy atırım", + "Ġyatır ım", + "н Ñĥла", + "нÑĥ ла", + "нÑĥл а", + "ر اÙģ", + "را Ùģ", + "Ġç eÅŁit", + "Ġà¤ī द", + "å¤ ®", + "Ġпо Ñıв", + "åĽ½ å®¶", + "ĠÑģооÑĤвеÑĤ ÑģÑĤв", + "ìķ ¡", + "ĠØ® ÙĪØ§Ùĩد", + "ĠØ®ÙĪØ§Ùĩ د", + "ĠØ®ÙĪ Ø§Ùĩد", + "Å¡ Å¡ÃŃ", + "Âł п", + "ĠNh Ãł", + "' '''", + "'' ''", + "''' '", + "ï½ ¨", + "à ħ", + "Ġ ïº", + "Ġï º", + "ĠØ¢Ùħ رÛĮÚ©", + "lar ımız", + "larım ız", + "ج ا", + "Ùģ ÙĤ", + "Ġ á»", + "Ġá »", + "Ġ ìķł", + "Ġìķ ł", + "Ġز باÙĨ", + "ĠÑĤ воÑĢ", + "ĠÑĤв оÑĢ", + "н иÑĩеÑģ", + "ни ÑĩеÑģ", + "ниÑĩ еÑģ", + "Ġк ни", + "Ø® داÙħ", + "à¸Ł ร", + "Ġ ì¹ĺ", + "Ġì¹ ĺ", + "ว าม", + "ĠÙħ ÙĩÙħ", + "ĠÙħÙĩ Ùħ", + "Ġs tol", + "Ġst ol", + "Ġsto l", + "Ġed ilen", + "Ġedi len", + "Ġedil en", + "Ġ pek", + "Ġp ek", + "Ġpe k", + "اÙĨ ات", + "اÙĨا ت", + "алÑĮ нÑĸ", + "Ġнеоб ÑħÑĸд", + "à¹Ħ ว", + "Ġश र", + "Ġ íĮIJ", + "ĠíĮ IJ", + "Ò ij", + "Ġ ним", + "Ġн им", + "Ġни м", + "Ġ à¸ĺ", + "Ġภĺ", + "æĺ ł", + "äº Ĵ", + "ĠbaÅŁ ar", + "ž i", + "Ġм ног", + "Ġмн ог", + "l endi", + "len di", + "á vajÃŃ", + "áv ajÃŃ", + "n ict", + "ni ct", + "nic t", + "Ġд Ñĥм", + "ĠдÑĥ м", + "éĻ ©", + "Ïĥ Ïĥ", + "i ky", + "ik y", + "алÑĮ нÑĭй", + "Ġ ÙħÙĨت", + "ĠÙħ ÙĨت", + "ĠÙħÙĨ ت", + "å® ®", + "- за", + "-з а", + "еÑĢ Ðº", + "å¡ Ķ", + "Ġμε ÏĦα", + "oÄŁ un", + "oÄŁu n", + "ÎĹ Îľ", + "à¥Īà¤Ĥ ।Ċ", + "à¥Īà¤Ĥ। Ċ", + "Äį ky", + "å¹³ åı°", + "à¥ĭ श", + "Ġ ona", + "Ġo na", + "Ġon a", + "Ġ bec", + "Ġb ec", + "Ġbe c", + "ì ¢", + "Ġc ây", + "Ġcâ y", + "k ün", + "kü n", + "Ġ à¤Ī", + "ĠठĪ", + "Ġr á»Ļng", + "еÑĢ Ð±", + "å¹ ¸", + "ï¾ IJ", + "ĠпÑĸд пÑĢиÑĶм", + "çĶ £", + "Ġ ÏĦε", + "ĠÏĦ ε", + "ĠÙĨÙĤ Ø´", + "о виÑħ", + "ов иÑħ", + "ови Ñħ", + "ĠÙģ Ùī", + "Ðļ ак", + "Ùİ Ø±", + "Ġ Щ", + "ĠÐ ©", + "алÑĮ нÑĭÑħ", + "Ġk üçük", + "èŃ ·", + "æĭ ħ", + "i caret", + "ic aret", + "ica ret", + "icare t", + "Ġ رÙģØª", + "Ġر ÙģØª", + "ĠرÙģ Øª", + "Ġод ного", + "Ġодно го", + "ÑĪ Ð¸Ð¼", + "ÑĪи м", + "Ġ бÑĸ", + "Ġб Ñĸ", + "Ġuygu lam", + "Ġ æĭ", + "Ġæ ĭ", + "ä½ Ľ", + "u cu", + "uc u", + "d ÃŃ", + "Å ĺ", + "ئ Ø©", + "ê± ¸", + "Ù Į", + "Ġ ÎłÏģο", + "ĠÎł Ïģο", + "Ġye rine", + "Ġyer ine", + "Ġyeri ne", + "ĠÑĸн ÑĦоÑĢма", + "Ġ å¤ĸ", + "Ġå¤ ĸ", + "ä» ķ", + "н ав", + "на в", + "a rası", + "ar ası", + "ara sı", + "aras ı", + "à¸Ńà¸Ļ à¹Ħลà¸Ļ", + "ا شت", + "اش ت", + "ز ÙĬ", + "æ© ĭ", + "Ġ ãĤ«", + "ĠãĤ «", + "èĥ½ åĬĽ", + "å¥ Ĺ", + "Ġpro h", + "Ġpr oh", + "Ġп ÑĢава", + "ĠпÑĢ Ð°Ð²Ð°", + "ĠпÑĢав а", + "ĠпÑĢа ва", + "Ỽ p", + "Ġ à¸Ĥà¸Ńà¸ĩ", + "Ġà¸Ĥ à¸Ńà¸ĩ", + "Ġ ë´", + "Ġë ´", + "Ġl úc", + "Ġ éķ", + "Ġé ķ", + "ب ÙĪØ¯", + "بÙĪ Ø¯", + "r upa", + "ru pa", + "rup a", + "ا زÙħ", + "از Ùħ", + "Ġ кан", + "Ġк ан", + "Ġка н", + "ılı m", + "ıl ım", + "Ġ Ùĩد", + "ĠÙĩ د", + "ãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢ ĠãĢĢ", + "ãĢĢĠ ãĢĢĠãĢĢ", + "Ñĭ ваеÑĤ", + "Ñĭв аеÑĤ", + "Ñĭва еÑĤ", + "Ø® اÙĨÙĩ", + "خاÙĨ Ùĩ", + "Ñĥ кÑĤ", + "Ñĥк ÑĤ", + "ĠçϾ 度", + "ĠnÄĽ co", + "е мон", + "ем он", + "емо н", + "Ġà¤ħ प", + "Ġ ÎĮ", + "ĠÎ Į", + "ün ün", + "ünü n", + "æĸĩ åĮĸ", + "ä¹ İ", + "ä¸Ĭ çļĦ", + "ÙĦ ÙĬÙħ", + "ÙĦÙĬ Ùħ", + "ĠtÄĽ ch", + "ا سب", + "اس ب", + "âĢĻ ÑĶ", + "Ġ Ú¯ÛĮ", + "ĠÚ¯ ÛĮ", + "Ġ ê·¼", + "Ġê· ¼", + "Ġtr ẻ", + "μÎŃ Î½Î¿", + "μÎŃν ο", + "ãģĵãģ¨ ãĤĴ", + "ìĿ´ ëĤĺ", + "åĸ Ħ", + "Ġtr ả", + "åĪĨ æŀIJ", + "Ġ dÄĽl", + "Ġd ÄĽl", + "ĠdÄĽ l", + "Ñĥ Ñģка", + "ÑĥÑģ ка", + "ÑĥÑģк а", + "Ġм ного", + "Ġмн ого", + "Ġмног о", + "à¥Ī र", + "μα ÏĦοÏĤ", + "μαÏĦο ÏĤ", + "Ġm ÃŃsto", + "ĠmÃŃ sto", + "ĠmÃŃst o", + "Ġ ê°ģ", + "Ġê° ģ", + "Ġп ÑĢог", + "ĠпÑĢ Ð¾Ð³", + "ĠпÑĢо г", + "b aÅŁ", + "ba ÅŁ", + "а йÑĤе", + "ай ÑĤе", + "айÑĤ е", + "Ġc á»ķ", + "å¿ ľ", + "ï¼ģ Ċ", + "ç ı", + "Ġbir çok", + "Ġ íĺķ", + "Ġíĺ ķ", + "çµ Į", + "ĠEv rop", + "ĠÑģ оÑĨÑĸ", + "ĠÑģо ÑĨÑĸ", + "ä»ĸ çļĦ", + "Ġ μÏĢο", + "Ġμ ÏĢο", + "ĠμÏĢ Î¿", + "å¥ Ī", + "Ġ Ú¯ÙĦ", + "ĠÚ¯ ÙĦ", + "ÙĪ ÙĦØ©", + "ÙĪÙĦ Ø©", + "æµ İ", + "Ġ Ú©ÙĪ", + "ĠÚ© ÙĪ", + "± ä¹IJ", + "ãģĹ ãģı", + "ãģĹãģ ı", + "çº ³", + "ÑģÑĤв енно", + "ÑģÑĤвен но", + "éĽ ¢", + "ा .", + "Ġgerçek leÅŁtir", + "ĠgerçekleÅŁ tir", + "Ġ kır", + "Ġk ır", + "Ġkı r", + "ì ³", + "Ġг оÑģп", + "å¹ ķ", + "ìĦ ¼", + "» .Ċ", + "». Ċ", + "к ÑĥÑĢ", + "кÑĥ ÑĢ", + "Ġ رÛĮ", + "Ġر ÛĮ", + "æĽ ¾", + "ÙĪ Ø±ÙĬ", + "ÙĪØ± ÙĬ", + "лекÑģ анд", + "ص Ùģ", + "Ġc ảnh", + "Ġcả nh", + "å± Ĥ", + "ãĤ Ĩ", + "Ġ تس", + "Ġت س", + "ì° ½", + "기 를", + "Ġ à¹Ģà¸Ħ", + "Ġà¹Ģ à¸Ħ", + "Ġà¹ĢภĦ", + "çŁ Ń", + "Ġ ÑģÑĤÑĢо", + "ĠÑģ ÑĤÑĢо", + "ĠÑģÑĤ ÑĢо", + "ĠÑģÑĤÑĢ Ð¾", + "ĠÏĥ ÏĦιÏĤ", + "ĠÏĥÏĦι ÏĤ", + "à¥įय व", + "Ġع ÙĦÙħ", + "ĠعÙĦ Ùħ", + "ĠÑģ иÑĤÑĥа", + "ĠÑī одо", + "ĠÑīо до", + "åIJ Ľ", + "Ùħ س", + "ĠоÑĤ кÑĢÑĭ", + "ĠоÑĤк ÑĢÑĭ", + "Ġsp oj", + "Ġspo j", + "ĠÄij Äĥng", + "Ġs avaÅŁ", + "Ġsav aÅŁ", + "ี ร", + "sk ém", + "ské m", + "Ġ è¡Į", + "Ġè¡ Į", + "é ¹", + "Ġ ÙĬÙħÙĥÙĨ", + "ĠÙĬÙħ ÙĥÙĨ", + "о вано", + "ов ано", + "ова но", + "ован о", + "Ġп ÑĢавилÑĮ", + "ĠпÑĢав илÑĮ", + "ĠпÑĢави лÑĮ", + "ĠпÑĢавил ÑĮ", + "Ġchiế c", + "èĪ ¹", + "éĵ ¶", + "ĠоÑĤ д", + "Ġ ìĿĢ", + "ĠìĿ Ģ", + "íħ Ķ", + "Ġ Nej", + "ĠN ej", + "ĠNe j", + "о не", + "он е", + "Ġk ız", + "Ġkı z", + "олог иÑĩеÑģ", + "Ġ кÑĢаÑĹ", + "ĠкÑĢа ÑĹ", + "à¸ļ à¸Ńล", + "æ¥ ¼", + "Ġت ÙħاÙħ", + "ĠتÙħ اÙħ", + "Ġب ÛĮÙħ", + "ĠبÛĮ Ùħ", + "ĠÑģ Ñĥб", + "ĠÑģÑĥ б", + "v ý", + "Ñģ кие", + "Ñģк ие", + "Ñģки е", + "ëĮĢ ë¡ľ", + "ëĮ Ģë¡ľ", + "???? ????", + "abilir siniz", + "ан Ñģов", + "анÑģ ов", + "代 表", + "Ġ매 매", + "олог ÑĸÑĩ", + "μ αν", + "μα ν", + "ак Ñģим", + "акÑģ им", + "ãĤ¤ ãĥ«", + "Ġt ải", + "Ġtả i", + "Ùħ ÙĪ", + "å® Ĺ", + "n em", + "ne m", + "Ġkho ản", + "Ġ паÑĤ", + "Ġп аÑĤ", + "Ġпа ÑĤ", + "ан ÑĤа", + "анÑĤ а", + "Ġпом оÑī", + "Ġ vod", + "Ġv od", + "Ġvo d", + "Ġkay nak", + "Ġkayn ak", + "Ïĥ ÏĨ", + "à¥Ĥ त", + "du ÄŁ", + "а ÑĤиÑģÑı", + "аÑĤи ÑģÑı", + "Ġ ç¥ŀ", + "Ġç¥ ŀ", + "ĠÑģ лова", + "ĠÑģл ова", + "ĠÑģлов а", + "ĠÑģло ва", + "ÑĢÑĥ кÑĤÑĥ", + "ÑĢÑĥк ÑĤÑĥ", + "ÑĢÑĥкÑĤ Ñĥ", + "ĠmÄĽ sÃŃ", + "Ùı Ùħ", + "зна Ñĩа", + "знаÑĩ а", + "Ġ èī", + "Ġè ī", + "åѦ çĶŁ", + "æ´ ¥", + "Ùİ ÙĬ", + "è§ Ī", + "Ġ å®ī", + "Ġå® ī", + "Ġgör Ã¼ÅŁ", + "ál nÄĽ", + "áln ÄĽ", + "ĠëͰ ëĿ¼", + "ĠÙħ ÙĪØ¬ÙĪØ¯", + "ĠÙħÙĪØ¬ ÙĪØ¯", + "ĠÄij ứ", + "ĠÄijá» ©", + "ĠçalÄ±ÅŁ malar", + "ĠçalÄ±ÅŁma lar", + "ĠÑı киÑħ", + "ĠÑıк иÑħ", + "Ġاج تÙħاع", + "μ εν", + "με ν", + "èİ ī", + "ç§ ¯", + "ì¶ ķ", + "à¥į शन", + "à¥įश न", + "Ġx ét", + "Ġв ÑĤоÑĢ", + "ĠвÑĤ оÑĢ", + "çİ ©", + "Âł ÐĿ", + "ÑĪ Ð¸Ðµ", + "ÑĪи е", + "о ÑĢи", + "оÑĢ Ð¸", + "Ø£ س", + "Ġthu á»ijc", + "ëĭĪ ê¹Į", + "ë ķĮ", + "ÑĢ Ñĥп", + "ÑĢÑĥ п", + "Ñģ ÑıÑĤ", + "ÑģÑı ÑĤ", + "з Ñĭ", + "ĠÑģ меÑĢ", + "ĠÑģм еÑĢ", + "Ġv yb", + "Ġvy b", + "ĠìĿ´ ìĥģ", + "à¤ļ न", + "Ġgel di", + "Ġgeld i", + "Û± Û°", + "Û±Û °", + "ικ Ïİν", + "ĠÄIJ ức", + "Ġд оÑģÑĤаÑĤ", + "ĠдоÑģÑĤ аÑĤ", + "Ġö nc", + "Ġön c", + "è¦ ª", + "Ġ adı", + "Ġa dı", + "Ġad ı", + "un ca", + "unc a", + "ĠاÙĦ تر", + "ĠاÙĦت ر", + "çķ ¶", + "ĠФ едеÑĢа", + "ĠФед еÑĢа", + "лÑı ÑİÑĤÑģÑı", + "лÑıÑİÑĤ ÑģÑı", + "ĠÙĥ اÙĨت", + "ĠÙĥاÙĨ ت", + "æİ ¢", + "Ġ Ñĥб", + "ĠÑĥ б", + "Ġ κο", + "Ġκ ο", + "ाà¤ĩ à¤Ł", + "з н", + "Ġm ôi", + "Ġmô i", + "Ġ ãĤµ", + "ĠãĤ µ", + "Ġна вÑĸ", + "Ġнав Ñĸ", + "ç» ¼åIJĪ", + "Ġмин ÑĥÑĤ", + "Ġми нÑĥÑĤ", + "ĠминÑĥ ÑĤ", + "d ık", + "dı k", + "ÑĢ Ñĥд", + "ÑĢÑĥ д", + "åľ ĸ", + "ê° ¤", + "ĠÄijo Ãłn", + "è ¤", + "à¥į वर", + "à¥įव र", + "ĠÃľn iversit", + "а но", + "ан о", + "éĽ ¨", + "ĠvÅ¡ech ny", + "Ġëĭ¤ ìĿĮ", + "ĠC umhur", + "ĠCum hur", + "Ġм Ñĥз", + "ĠмÑĥ з", + "a ÅŁtır", + "aÅŁ tır", + "Ġ ê±°ëŀĺ", + "Ġê±° ëŀĺ", + "Ġ é¡", + "Ġé ¡", + "žit ÃŃ", + "ži tÃŃ", + "Ġ à¸Ł", + "ĠภŁ", + "Ġthu ế", + "Ġм Ñĥж", + "ĠмÑĥ ж", + "ĠÎij ν", + "Ġد ÙĪÙħ", + "ĠدÙĪ Ùħ", + "ĠÑģ ин", + "ĠÑģи н", + "Ġ ÏīÏĤ", + "ĠÏī ÏĤ", + "m eler", + "me ler", + "mel er", + "Ġ poÄį", + "Ġp oÄį", + "Ġpo Äį", + "Ġколи Ñĩе", + "ĠколиÑĩ е", + "ĠK Äį", + "è³ ½", + "ĠоÑģ Ñĸб", + "åı ¥", + "ĠB öl", + "à¸ĺ รรม", + "Ġc ạnh", + "å° ĩ", + "Ġ ноÑģ", + "Ġн оÑģ", + "Ġно Ñģ", + "èĦ ¸", + "Ġgel ir", + "о ÑĢон", + "оÑĢ Ð¾Ð½", + "оÑĢо н", + "à¥įर à¤Ń", + "ç» ĩ", + "ุ à¹ī", + "ाम ल", + "Ġc âu", + "Ġcâ u", + "Ñij ÑĤ", + "Ġ :|", + "Ġ: |", + "ãĤĮ ãģ¦", + "Ġpos led", + "Ġpo sled", + "ãĤ¹ ãĥĨ", + "ÑĸлÑĮ ÑĪ", + "ен ÑĤÑĭ", + "енÑĤ Ñĭ", + "Ø® دÙħ", + "Ġباش گاÙĩ", + "Ġth ư", + "á vánÃŃ", + "áv ánÃŃ", + "ává nÃŃ", + "ëĬ IJ", + "ĠØ£ ØŃ", + "ر اد", + "را د", + "ĠبسÛĮ ار", + "åΰ äºĨ", + "\" ;\"", + "\"; \"", + "å° İ", + "Ġ ör", + "Ġö r", + "à¸Ĭ าà¸ķ", + "g enus", + "gen us", + "Ġya kın", + "Ġyak ın", + "Ġ ÃŃt", + "ĠÃŃ t", + "reg num", + "regn um", + "Ġf iyat", + "Ġfi yat", + "н ÑĸÑħ", + "нÑĸ Ñħ", + "åľ° æĸ¹", + "Ġbil gi", + "Ġbilg i", + "к ам", + "ка м", + "Ġs pol", + "Ġsp ol", + "Ġspo l", + "ائ ÙĬ", + "Ġ ÙĬÙĨ", + "ĠÙĬ ÙĨ", + "า หาร", + "าห าร", + "Ġب Ú¯", + "é ĺħ", + "éĺ ħ", + "ĠاÙĦ شر", + "ĠاÙĦØ´ ر", + " ģ", + "ĠÑĸн ÑĪиÑħ", + "ĠÑĸнÑĪ Ð¸Ñħ", + "Ġtr ạng", + "çģ £", + "Ġc á»±c", + "к ан", + "ка н", + "èĭ ı", + "à Ķ", + "Ġl á»Ŀi", + "Ġlá» Ŀi", + "Ñı Ñĩ", + "Ġ ÙĪØŃ", + "ĠÙĪ ØŃ", + "ìĪ ľ", + "Å ¸", + "Ġв оÑģп", + "Ġво Ñģп", + "ĠвоÑģ п", + "ì¡ Į", + "Äį nÃŃch", + "ÄįnÃŃ ch", + "Ø® رÙī", + "خر Ùī", + "ائ ÙĬØ©", + "ائÙĬ Ø©", + "Ġsu ất", + "æĩ ī", + "ا ØŃÛĮ", + "اØŃ ÛĮ", + "Ġn áz", + "Ġná z", + "è¿Ļ ç§į", + "Ġзаб езпеÑĩ", + "Ġ ЧеÑĢ", + "ĠЧ еÑĢ", + "Ġзд ÑĸйÑģ", + "åı ¦", + "æĭ ¬", + "à¥ģ ष", + "à¥ģठ·", + "μ ÏĨ", + "ëĥ IJ", + "Ðķ Ñģли", + "é ¬", + "Ġ íĥľ", + "Ġíĥ ľ", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "Ġм л", + "å´ İ", + "Ùģ Ø¹", + "Ġ ÙĤدر", + "ĠÙĤ در", + "ĠÙĤد ر", + "Ġv á»ijn", + "å¦ ¹", + "Ġ ÐĿаÑģ", + "ĠÐĿ аÑģ", + "ĠÐĿа Ñģ", + "à¥į फ", + "à¥įठ«", + "ãĤ¸ ãĥ£", + "Ġm ı", + "ен Ñģ", + "б Ñĥд", + "бÑĥ д", + "ĠØŃ تÙī", + "Ġ ì²´", + "Ġì² ´", + "ĠÑĸ ÑģÑĤоÑĢ", + "ĠÑĸÑģ ÑĤоÑĢ", + "Ġgi ấy", + "γ οÏģ", + "γο Ïģ", + "ëIJĺ ìĸ´", + "Ġ íĤ", + "Ġí Ĥ", + "ĠÐŀд на", + "ĠÙĨ ÙħÙĪØ¯", + "ĠÙĨÙħ ÙĪØ¯", + "Ġвип ад", + "ĠìŀIJ ìĭł", + "Ġj ste", + "Ġjs te", + "Ġ ëĵ±ë¡Ŀ", + "Ġëĵ± ë¡Ŀ", + "ek ten", + "ekt en", + "ekte n", + "ĠÑĢ ÐµÑĩ", + "ĠÑĢе Ñĩ", + "r odnÃŃ", + "rod nÃŃ", + "س تر", + "ست ر", + "ı t", + "ä¹ħ ä¹ħ", + "ĠØ® ÙĦاÙĦ", + "ĠØ®ÙĦ اÙĦ", + "Ġ ç¦", + "Ġç ¦", + "u luk", + "ul uk", + "ulu k", + "l enen", + "le nen", + "len en", + "lene n", + "i lip", + "il ip", + "ili p", + "è´ ¢", + "Ġà¤ħ à¤ķ", + "ĠY ıl", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġ à¤Ŀ", + "ĠठĿ", + "ĠB ình", + "Ġol muÅŁ", + "Ġolm uÅŁ", + "اÙĦ Ø¥ÙĨجÙĦÙĬزÙĬØ©", + "اÙĦØ¥ ÙĨجÙĦÙĬزÙĬØ©", + "м енно", + "мен но", + "aln ız", + "Ġ شرÙĥØ©", + "Ġشر ÙĥØ©", + "Ġس ÙĨØ©", + "ĠسÙĨ Ø©", + "è´ Ł", + "ä½ľ åĵģ", + "Ġ ìķ½", + "Ġìķ ½", + "ĠдÑĢÑĥг иÑħ", + "ĠbaÄŁ lantı", + "о дÑĥ", + "од Ñĥ", + "çļĦ æĺ¯", + "ั à¸Ļà¸Ķ", + "ัà¸Ļ à¸Ķ", + "ĠкоÑĤоÑĢ ÑĭÑħ", + "ĠاÙĦ ÙĪÙĦ", + "ĠاÙĦÙĪ ÙĦ", + "ê¸Ģ ìĥģìľĦ", + "ĠÏĢ ÎµÏģ", + "ĠÏĢε Ïģ", + "리 ìķĦ", + "i bar", + "ib ar", + "iba r", + "Ġ èĥ", + "Ġè ĥ", + "ãģŁ ãģĦ", + "á j", + "ĠìľĦ íķ´", + "? âĢľĊĊ", + "?âĢľ ĊĊ", + "Ġ íİĺ", + "Ġíİ ĺ", + "Ġ ней", + "Ġн ей", + "Ġне й", + "ĠÐĹ Ð°Ðº", + "ĠÐĹа к", + "Ġ ÐĴÑĸд", + "ĠÐĴ Ñĸд", + "е лÑĸ", + "ел Ñĸ", + "è¯ ¾", + "åī ¯", + "m adan", + "ma dan", + "mad an", + "mada n", + "æľ «", + "ĠÏĢ ÏģÏĮ", + "Ġп ÑģиÑħ", + "Ġ ÑĤÑĸ", + "ĠÑĤ Ñĸ", + "Ùĥ ات", + "Ġvys ok", + "ê´Ģ 리", + "ül tür", + "ült ür", + "Ġ à¹Ģà¸Ń", + "Ġà¹Ģ à¸Ń", + "Ġà¹ĢภŃ", + "Ġ íķ©", + "Ġíķ ©", + "çĿ £", + "Ġ ÑĢиÑģ", + "ĠÑĢ Ð¸Ñģ", + "е ÑĢÑĮ", + "еÑĢ ÑĮ", + "ĠÚ© ÙĦÛĮ", + "ĠÚ©ÙĦ ÛĮ", + "Ġ ãĥŀ", + "Ġãĥ ŀ", + "Ġph ÃŃa", + "ĠphÃŃ a", + "å «", + "ا Ú¯", + "Ġ é¢", + "Ġé ¢", + "ĠÙĨ Ù쨱", + "ĠÙĨÙģ Ø±", + "Ġ جاÙĨ", + "Ġج اÙĨ", + "Ġجا ÙĨ", + "Ġ yas", + "Ġy as", + "Ġya s", + "ж ениÑı", + "же ниÑı", + "жен иÑı", + "ĠлÑĥÑĩ ÑĪе", + "Ġ çº", + "Ġç º", + "Ġ мон", + "Ġм он", + "Ġмо н", + "Ġت Ø®", + "Ġ Ø´ÛĮ", + "ĠØ´ ÛĮ", + "Ġн екоÑĤоÑĢ", + "Ġнек оÑĤоÑĢ", + "алÑĮ нÑĭе", + "Ġob chod", + "Ġíķ¨ ê»ĺ", + "Ġr iêng", + "ãģķ ãĤĮãĤĭ", + "ãģķãĤĮ ãĤĭ", + "о кÑĥ", + "ок Ñĥ", + "ĠС ШÐIJ", + "ë§ ģ", + "Ġ Nếu", + "ĠN ếu", + "ĠA ÄŁ", + "Ġд веÑĢ", + "Ġдв еÑĢ", + "Ġдве ÑĢ", + "à¥ĭ ष", + "Ġkh iến", + "Ġkhi ến", + "н его", + "не го", + "ì± ħ", + "ั à¸ķร", + "ัà¸ķ ร", + "m alı", + "ma lı", + "mal ı", + "Ġ ÙĬا", + "ĠÙĬ ا", + "ç§ij æĬĢ", + "ื à¸Ļ", + "ห มาย", + "หม าย", + "Ġ خص", + "ĠØ® ص", + "åĨ ľ", + "ÃŃ me", + "ÃŃm e", + "ĠÑįÑĤ ой", + "ĠÑįÑĤо й", + "Ġ ìĹħ", + "ĠìĹ ħ", + "Ġ ä¹", + "ä¼ ¯", + "' ´", + "Ùħ ÙĬÙĦ", + "ÙħÙĬ ÙĦ", + "à¸Ń à¸ĩà¸Ħ", + "à¸Ńà¸ĩ à¸Ħ", + "k ová", + "ko vá", + "kov á", + "è¿Ļ ä¹Ī", + "ãĢĤ æĪij", + "ìĹIJ ìĦľëĬĶ", + "ìĹIJìĦľ ëĬĶ", + "Ġ ìļ©", + "Ġìļ ©", + "ë¹Ħ ìĬ¤", + "Ġ ì¦Ŀ", + "Ġì¦ Ŀ", + "IT TE", + "ITT E", + "Ġ모 ëĵł", + "ĠspoleÄį nosti", + "ĠspoleÄįnost i", + "Ġв ик", + "Ġви к", + "Ġt ÅĻÃŃ", + "ĠtÅĻ ÃŃ", + "é ³", + "Ġ Ø®ÛĮ", + "ĠØ® ÛĮ", + "Ġp ož", + "Ġpo ž", + "Ġиме еÑĤ", + "Ġd ÄĽt", + "ĠdÄĽ t", + "ĠÙħد ÙĦ", + "Ġ мо", + "Ġм о", + "åį ı", + "e nÃŃm", + "en ÃŃm", + "enÃŃ m", + "é ī", + "ا ظ", + "Ø§Ø ¸", + "Ġ teÅŁ", + "Ġt eÅŁ", + "Ġte ÅŁ", + "Ġ veÅĻej", + "Ġve ÅĻej", + "L IC", + "LI C", + "ì§Ģ ëĬĶ", + "Ñĭ ваÑİÑĤ", + "Ñĭв аÑİÑĤ", + "Ñĭва ÑİÑĤ", + "ĠоÑĢг анÑĸ", + "ĠоÑĢган Ñĸ", + "nÃŃ mi", + "nÃŃm i", + "θ ÎŃ", + "ãĤ¯ ãĥ©", + "ãĥ¼ ãĥ³", + "ãĥ¼ãĥ ³", + "ли ÑģÑı", + "i mdi", + "im di", + "imd i", + "æ Ĩ", + "ïº İ", + "Ġìļ´ ìĺģ", + "κ αν", + "κα ν", + "Ġ ë³µ", + "Ġë³ µ", + "Ġ ÐĨн", + "ĠÐĨ н", + "p lication", + "pl ication", + "t ah", + "ta h", + "Ġ ÐIJв", + "ĠÐIJ в", + "Ġc á»Ļng", + "алÑĮ ноÑĹ", + "алÑĮно ÑĹ", + "Ġد ÙĪØ±Ùĩ", + "ĠدÙĪ Ø±Ùĩ", + "ĠدÙĪØ± Ùĩ", + "à¥įर य", + "Ġ Ø®ÙĪ", + "ĠØ® ÙĪ", + "Ġв ÑĢа", + "Ø¥ ÙĨ", + "èĤ ī", + "Ġo yn", + "Ġoy n", + "ĠT ư", + "ĠÙĩ ÙħاÙĨ", + "ĠÙĩÙħ اÙĨ", + "ĠбÑĸлÑĮ ÑĪе", + "ĠбÑĸлÑĮÑĪ Ðµ", + "æĮ ¯", + "ا ÙħØ©", + "اÙħ Ø©", + "å º«", + "åº «", + "Ġ ÑĢеж", + "ĠÑĢ ÐµÐ¶", + "ĠÑĢе ж", + "Ġدار ÙĨد", + "ÑĢ Ð¸Ð¹", + "ÑĢи й", + "Ġ æĮ", + "Ġæ Į", + "Ġson uç", + "Ġsonu ç", + "Ġt ả", + "ั à¸ĩà¸Ħ", + "ัà¸ĩ à¸Ħ", + "ë° Ľ", + "Ġ мом", + "Ġм ом", + "Ġмо м", + "ви Ñĩай", + "виÑĩ ай", + ". à¸Ħ", + "Ġ à¤Ĩà¤Ī", + "Ġà¤Ĩ à¤Ī", + "åģ ĩ", + "Ġpos kyt", + "Ġpo skyt", + "ĠÑģ Ñĥп", + "ĠÑģÑĥ п", + "ıyor du", + "а ле", + "ал е", + "и ÑĨ", + "Ġ θÎŃ", + "Ġθ ÎŃ", + "ãĤĩ ãģĨ", + "ĠÑģв ой", + "ĠÑģво й", + "ม à¸Ļ", + "Ġn ữa", + "Ġnữ a", + "v oÅĻ", + "vo ÅĻ", + "ا سÙĬ", + "اس ÙĬ", + "éĴ ±", + "ãģĹ ãģ¦ãģĦãģŁ", + "ãģĹãģ¦ ãģĦãģŁ", + "ãģĹãģ¦ãģĦ ãģŁ", + "ĠÄij ầy", + "ا ÙĬر", + "اÙĬ ر", + "Ġar aÅŁtır", + "Ġara ÅŁtır", + "ì £", + "ãģ¨ ãģ¯", + "ĠÑģ поÑĢ", + "ĠÑģп оÑĢ", + "Ġê° Ģìŀ¥", + "Ġê°Ģ ìŀ¥", + "è¼ ī", + "âĸ ¡", + "Ġ ìĻĦ", + "ĠìĻ Ħ", + "оÑĢ Ð°Ñı", + "оÑĢа Ñı", + "Ïģ εί", + "Ïģε ί", + "ĠÑį ÑĤа", + "ĠÑįÑĤ а", + "ë©´ ìłģ", + "ìĿ´ ìĬ¤", + "ä½ ³", + "æĻ ļ", + "Ġk val", + "Ġkv al", + "Ġn á»ķi", + "ÑĤ ами", + "ÑĤа ми", + "Ġпол ÑĸÑĤи", + "ĠполÑĸ ÑĤи", + "Ġ İng", + "Ġİ ng", + "Ġİn g", + "нÑĸ ÑģÑĤÑİ", + "нÑĸÑģÑĤ Ñİ", + "Ġ à¹Ģà¸ģ", + "Ġà¹Ģ à¸ģ", + "Ġà¹Ģภģ", + "Ġ 민", + "Ġë ¯¼", + "è Ķ", + "Ïģ ία", + "Ïģί α", + "æİ Ī", + "Ġ çĤ", + "Ġç Ĥ", + "ĠÙĨÙħ اÛĮ", + "Ġ ìŀ¡", + "Ġìŀ ¡", + "æŀ ¶", + "اب ÙĤ", + "Ñģ он", + "Ñģо н", + "ен ного", + "енно го", + "ĠÙħ ÛĮÙĦÛĮ", + "ĠÙħÛĮ ÙĦÛĮ", + "ĠÙħÛĮÙĦ ÛĮ", + "Ġk urum", + "Ġkur um", + "Ġku rum", + "Ġkuru m", + "à¹Į ส", + "Ġ ì´Ŀ", + "Ġì ´Ŀ", + "Ġì´ Ŀ", + "ĠnÄĽk olik", + "ĠnÄĽkol ik", + "Ġ ÙĢ", + "ĠÙ Ģ", + "ĠзаÑģÑĤ оÑģ", + "à¸Ķ à¸Ļ", + "ÙĨ داÙĨ", + "ÙĨد اÙĨ", + "ÙĨدا ÙĨ", + "ĠJ ap", + "ĠJa p", + "éĥ ¡", + "à¥į à¤Ń", + "à¥įठŃ", + "Ġ à¹Ģà¸Ĭ", + "Ġà¹Ģ à¸Ĭ", + "Ġà¹ĢภĬ", + "Ġ âĢ«", + "ĠâĢ «", + "é£ ŀ", + "o vatel", + "ov atel", + "ova tel", + "ovat el", + "ĠÑĩа ÑģÑĤÑĮ", + "ĠÑĩаÑģ ÑĤÑĮ", + "ĠÑĩаÑģÑĤ ÑĮ", + "Ġb á»ķ", + "ãĤ¯ ãĥª", + "ิ à¹Į", + "Ġвид е", + "Ġви де", + "v ail", + "va il", + "Ì ī", + "ÄŁ inde", + "ÄŁi nde", + "ÄŁin de", + "ãģ¨ ãĤĤ", + "âĢĮÚ© ÙĨد", + "âĢĮÚ©ÙĨ د", + "Ġ ëħĦ", + "Ġëħ Ħ", + "Ġ اÙĤتص", + "ĠاÙĤ تص", + "ï½ Ĺ", + "Ïģ ιÏĥ", + "Ïģι Ïĥ", + "з д", + "èĻ ½", + "Ġth oại", + "Ġtho ại", + "Ġ ÙĪØ²", + "ĠÙĪ Ø²", + "Ġ mÃŃt", + "Ġm ÃŃt", + "ĠmÃŃ t", + "ĠÑħ олод", + "ĠÑħол од", + "Ġ кÑĥп", + "Ġк Ñĥп", + "ĠкÑĥ п", + "а ниÑħ", + "ан иÑħ", + "ани Ñħ", + "Ġnh ìn", + "ãģĭ ãģª", + "Ġ Ðļом", + "ĠÐļ ом", + "ĠÐļо м", + "ÏĦ εÏģ", + "ÏĦε Ïģ", + "ï¼Į åıª", + "Ġol up", + "Ġhá» ıi", + "ë ij", + "ĠnÄĽk ter", + "i sÃŃ", + "is ÃŃ", + "ĠвикоÑĢиÑģÑĤ ов", + "ìŀ ¡", + "Ġà¤ķ ल", + "Ġìľł ìłĢ", + "ĠпÑĢ Ð¸Ð±", + "ĠпÑĢи б", + "èĭ ¦", + "Ġ мов", + "Ġм ов", + "Ġмо в", + "Ġ หà¸Ļ", + "Ġห à¸Ļ", + "ëIJĺ ëĬĶ", + "о ко", + "ок о", + "Ġоб еÑģп", + "Ġk ez", + "Ġke z", + "л ÑıÑħ", + "лÑı Ñħ", + "ĠпÑĢо иÑģ", + "Ġпо вин", + "Ġпов ин", + "ĠÐļ оÑĢ", + "ĠÐļо ÑĢ", + "ì¼ Ģ", + "Ġ Ñģи", + "ĠÑģ и", + "Ġ ä¹ĭ", + "Ġä¹ ĭ", + "ĠâĢĶ Ċ", + "ÑģÑĥÑĤ ÑģÑĤв", + "ç °", + "Ġ à¤ł", + "Ġठł", + "н аÑĤ", + "на ÑĤ", + "Ġs uy", + "Ġsu y", + "Ġ ÑģÑĭ", + "ĠÑģ Ñĭ", + "ĠÙĨ شاÙĨ", + "ĠÙĨØ´ اÙĨ", + "Ġна пÑĢав", + "Ġнап ÑĢав", + "ĠÑĨ ÑĮомÑĥ", + "æĺ¯ ä¸Ģ", + "Ġm üm", + "Ġmü m", + "ÑĶ Ð¼Ð¾", + "ÑĶм о", + "ĠاسÙĦاÙħ ÛĮ", + "Ġza manda", + "Ġzam anda", + "Ġzaman da", + "ÙĪ ÙħاÙĨ", + "ÙĪÙħ اÙĨ", + "ا ÙĦØŃ", + "اÙĦ ØŃ", + "Å¡t ÄĽnÃŃ", + "Å¡tÄĽ nÃŃ", + "Ġ Ðļак", + "ĠÐļ ак", + "ĠÐļа к", + "¤ íĶĦ", + "¤í ĶĦ", + "ĠÙ¾ رد", + "Ġپر د", + "C ác", + "ε ια", + "ει α", + "Ġ جÙĪ", + "Ġج ÙĪ", + "ĠÄijo ạn", + "Ġà¤ĩ त", + "Ġз ан", + "Ġза н", + "ĠÙħÙĨØ· ÙĤÙĩ", + "ĠÙħ عÙĦ", + "ĠÙħع ÙĦ", + "Ġdo kon", + "Ġdok on", + "åIJ ¸", + "ic kou", + "ick ou", + "å° ģ", + "Ġк иÑģ", + "Ġки Ñģ", + "ัà¸ĩ หว", + "i species", + "is pecies", + "isp ecies", + "Ġнап ÑĢÑı", + "æº ĸ", + "Ġà¤ľ ल", + "à¹Ģ à¸ī", + "à¹Ģภī", + "L AR", + "LA R", + "ĠÑĥÑģлов иÑı", + "ĠWiki species", + "ĠWik ispecies", + "ระ à¸Ķ", + "Ġ mey", + "Ġm ey", + "Ġme y", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "à¹ĩ à¸Ī", + "å¾ Ĵ", + "t ach", + "ta ch", + "u muz", + "um uz", + "umu z", + "κ η", + "à Ĭ", + "Ġ ün", + "Ġü n", + "ĠB ITTE", + "ĠBIT TE", + "ĠÙħ ربع", + "ĠÙħر بع", + "ĠÙħرب ع", + "ãĤ· ãĥ¥", + "िस à¤ķ", + "Ø· ÙĪØ±", + "Ġв оÑģ", + "Ġво Ñģ", + "ï¾ Ł", + "Ġy ayın", + "Ġyay ın", + "ãģĭ ãĤĬ", + "л иÑı", + "ли Ñı", + "Ġп ÑĢин", + "ĠпÑĢ Ð¸Ð½", + "ĠпÑĢи н", + "ij ng", + "ĠÙĨ Ø®", + "Ġl ze", + "Ġlz e", + "à¥įष ण", + "Ġ бо", + "Ġб о", + "Ġ ê¸Ģ", + "Ġê¸ Ģ", + "Ġgel iÅŁtir", + "ĠgeliÅŁ tir", + "à¸Ľà¸£à¸° à¸Ĭ", + "å½ ¡", + "Ġ ãĤª", + "ĠãĤ ª", + "ãģĪ ãģ¦", + "н ÑĥÑĤÑĮ", + "нÑĥ ÑĤÑĮ", + "нÑĥÑĤ ÑĮ", + "Ġ ç½", + "Ġç ½", + "Ġ маг", + "Ġм аг", + "Ġма г", + "ãģ« ãģ¤", + "н оÑģÑĤей", + "ноÑģÑĤ ей", + "Ġ ÙĦÙĬ", + "ĠÙĦ ÙĬ", + "æĢ ª", + "ÑıÑĤ ÑģÑı", + "ภij", + "िय म", + "Ġ ãĢİ", + "ĠãĢ İ", + "ÑĢ ÑĮ", + "Ġm ạng", + "t ım", + "tı m", + "ĠпеÑĢи од", + "о гÑĥ", + "ог Ñĥ", + "ĠкоÑĤоÑĢ Ð°Ñı", + "ĠкоÑĤ оÑĢаÑı", + "리 ê°Ģ", + "Ġãħ ¡", + "Ġج اÛĮ", + "Ġجا ÛĮ", + "ĠпоÑĤ ÑĢÑĸб", + "Å¡ en", + "Å¡e n", + "à¸Ń ะ", + "ب ع", + "ØŁ Ċ", + "Ġ ë°©ë²ķ", + "Ġë°© ë²ķ", + "Ġ гоÑĢод", + "Ġг оÑĢод", + "ĠгоÑĢ Ð¾Ð´", + "Ġ Ðĺн", + "ĠÐĺ н", + "Ġ оказ", + "Ġо каз", + "Ġок аз", + "ر ÙĪØ²", + "رÙĪ Ø²", + "Ġili ÅŁk", + "ĠiliÅŁ k", + "å® £", + "f orman", + "form an", + "for man", + "forma n", + "a daÅŁ", + "ad aÅŁ", + "ada ÅŁ", + "ÙĬ ÙĦØ©", + "ÙĬÙĦ Ø©", + "ĠÐļ аÑĢ", + "ĠÐļа ÑĢ", + "Ġm ất", + "æħ ĭ", + "м п", + "à¹Ĥ à¸Ļ", + "ĠØŃÙĤ ÙĪÙĤ", + "Ġд нÑı", + "ĠëĴ ¤", + "ा à¤ķर", + "ाà¤ķ र", + "ì²ĺ ëŁ¼", + "âĢĮ Ø¢", + "h angi", + "han gi", + "hang i", + "è¡Į æĶ¿", + "al iyet", + "ali yet", + "Ġ ì²ľ", + "Ġì² ľ", + "ĠY ap", + "ĠYa p", + "à¹Ĥ รà¸ĩ", + "à¹Ĥร à¸ĩ", + "ì§Ģ ëħ¸", + "Ùİ Ùij", + "Îij ÎĻ", + "á na", + "án a", + "an dır", + "and ır", + "ระ à¸ļà¸ļ", + "ระà¸ļ à¸ļ", + "oÄŁ lu", + "า à¸Īะ", + "าà¸Ī ะ", + "ẩ y", + "ا ÙĪÙĦ", + "اÙĪ ÙĦ", + "ĠмаÑĤ еÑĢÑĸ", + "ÎŁ ÎĿ", + "ÎŁÎ Ŀ", + "Ġin formace", + "Ġinform ace", + "ت ع", + "à¸ļ à¸Ļ", + "ĠÄĮesk é", + "ĠÄĮes ké", + "Ġte mel", + "Ġtem el", + ":::::::::::::::: ::::::::::::::::", + "Ġ chia", + "Ġch ia", + "Ġchi a", + "- Ñģ", + "н еÑĢг", + "не ÑĢг", + "неÑĢ Ð³", + "Ġì° ¾", + "ÑĢ Ð¸Ð´", + "ÑĢи д", + "л оÑģÑĮ", + "ло ÑģÑĮ", + "ز ÙĦ", + "ê°Ģ ëĬĶ", + "a né", + "an é", + "Ġнав ÑĸÑĤÑĮ", + "ĠнавÑĸ ÑĤÑĮ", + "ä¸ĵ ä¸ļ", + "Ġ 경기", + "Ġê²½ 기", + "Ġp ÅĻev", + "ĠpÅĻ ev", + "ĠpÅĻe v", + "е ÑĤи", + "еÑĤ и", + "Ġ íĶĮ", + "ĠíĶ Į", + "н ÑıÑĤ", + "нÑı ÑĤ", + "à¥ģ श", + "à¥ģठ¶", + "лÑİ Ð´", + "в иÑī", + "ви Ñī", + "å° ¾", + "çļĦ äºĭ", + "Ġ ëIJľ", + "Ġë IJľ", + "ĠëIJ ľ", + "ر ÙĪÙģ", + "رÙĪ Ùģ", + "Ġ 女", + "Ġå¥ ³", + "κ ή", + "Ġ Tuy", + "ĠT uy", + "ĠTu y", + "Ġê²ĥ ìĿĦ", + "Ġb unu", + "Ġbu nu", + "Ġbun u", + "ĠÑĢаз лиÑĩ", + "ĠD ün", + "ãĤŃ ãĥ£", + "ÑĢ ÑĥÑģ", + "ÑĢÑĥ Ñģ", + "Ġ мм", + "Ġм м", + "l oven", + "lo ven", + "love n", + "lov en", + "Ġot ev", + "n oloj", + "ES İ", + "ü p", + "Ġ èĤ", + "Ġè Ĥ", + "ικ ÏĮÏĤ", + "ικÏĮ ÏĤ", + "ض اء", + "ضا Ø¡", + "Ġ пеÑĩ", + "Ġп еÑĩ", + "ÅĻÃŃ klad", + "ãģĵ ãĤį", + "Å¡ tÃŃ", + "Å¡t ÃŃ", + "Ġبر Ú¯", + "ãģĮ ãģĤãĤĭ", + "Ñĸ ÑģÑĤ", + "ÑĸÑģ ÑĤ", + "à¥ī à¤ķ", + "ÏĢ Î·", + "ĠاÙĦÙħ ست", + "ĠاÙĦÙħس ت", + "Ġз ай", + "Ġза й", + "Ġch ương", + "о ÑĤÑĥ", + "оÑĤ Ñĥ", + "Ġ Сам", + "ĠС ам", + "Å¡ et", + "Å¡e t", + "ĠìŀĪ ìĹĪ", + "ĠÙģ Ø§Ø±", + "Ñĸ он", + "ãĥĹ ãĥŃ", + "Ġnh iá»ĩt", + "in izi", + "ini zi", + "iniz i", + "Ġc ož", + "Ġco ž", + "Ġà¤Ĩ न", + "Ġsyst ém", + "ر ÙĪØ¹", + "رÙĪ Ø¹", + "a yet", + "ay et", + "aye t", + "ĠÙ쨱 ÙĩÙĨÚ¯", + "Ġ è¶", + "Ġè ¶", + "èģ ·", + "è§Ĥ çľĭ", + "н ок", + "но к", + "à¸IJ าà¸Ļ", + "êµIJ ìľ¡", + "k la", + "kl a", + "ãĤģ ãģ¦", + "Îķ ÎĻ", + "åĿ Ĺ", + "Ġsk uteÄį", + "à¥Ĥ à¤ľ", + "ãģij ãģ¦", + "N GC", + "NG C", + "Ġ åĢ", + "Ġå Ģ", + "ĠÑĢоз п", + "nÃŃ ků", + "nÃŃk ů", + "ãĥ³ ãĤ¹", + "ĠÐĴ еÑĢ", + "Ġyüz de", + "Ġ미 êµŃ", + "ĠÙħ Ùī", + "д еÑĢ", + "де ÑĢ", + "а ва", + "ав а", + "Ġmerk ez", + "į ng", + "Ġ ìĤ¼", + "ĠìĤ ¼", + "ĠÑĢоб оÑĤи", + "ĠÑĢобоÑĤ и", + "Ġ нÑĮого", + "Ġн ÑĮого", + "Ġ економ", + "Ġе коном", + "Ġек оном", + "ĠÑĩелов ека", + "ĠÑĩеловек а", + "Ġ à¸ŀระ", + "Ġà¸ŀ ระ", + "Ġà¸ŀร ะ", + "ãĥ Ĵ", + "ãģ£ ãģ¦ãģĦ", + "ãģ£ãģ¦ ãģĦ", + "ä¼ Ĺ", + "ĠпÑĢод ÑĥкÑĤ", + "ĠпÑĢодÑĥк ÑĤ", + "Ġy anı", + "Ġyan ı", + "à¥Ģव न", + "Ġc áºŃp", + "ĠAv rupa", + "ा à¤Ń", + "ाठŃ", + "ĠìłĦ ìļ©", + "æķ £", + "ĠìľĦ íķľ", + "Ñħод иÑĤÑĮ", + "ÑħодиÑĤ ÑĮ", + "Ġsın ır", + "ü cret", + "üc ret", + "s uz", + "su z", + "æ¨ Ĥ", + "Ġ ì°½", + "Ġì° ½", + "Ïģ ίοÏħ", + "Ïģί οÏħ", + "åĪ ļ", + "Ø® ÙĦ", + "ëłĩ ê²Į", + "ج د", + "Ġμ αÏĤ", + "Ġμα ÏĤ", + "áºŃ m", + "k ara", + "ka ra", + "kar a", + "ãĤ« ãĥ¼", + "Ġkter ou", + "ìĽ ¨", + "ÑĦи ÑĨи", + "oÄŁ raf", + "Ġна пÑĢи", + "Ġнап ÑĢи", + "ãģij ãģ©", + "Ġ éļ", + "Ġé ļ", + "ت باÙĦ", + "تب اÙĦ", + "ëŁ ½", + "ìĶ ¨", + "íĮĮ ìĿ¼", + "Ïĩ α", + "Ġuz ak", + "Ġd òng", + "Ġг олоÑģ", + "Ġгол оÑģ", + "Ïĥ ÏĦή", + "ÏĥÏĦ ή", + "ι λ", + "Ø· Ùģ", + "Ġê·¸ ëħĢ", + "ãĤ¿ ãĤ¤", + "ا ÙĨÚ¯", + "اÙĨ Ú¯", + "i nou", + "in ou", + "ino u", + "л он", + "ло н", + "à¹ĩ ม", + "Ġब द", + "Ġkon usunda", + "Ġkonusu nda", + "Ġkonus unda", + "Ġn âng", + "ãģ¾ãģĽ ãĤĵ", + "Ñĥ ÑİÑĤÑĮÑģÑı", + "ÑĥÑİ ÑĤÑĮÑģÑı", + "ÑĥÑİÑĤÑĮ ÑģÑı", + "åŁ ¹", + "ен ко", + "ìł ij", + "Ġ ÑĤов", + "ĠÑĤ ов", + "ĠÑĤо в", + "Ġt ÅĻeba", + "ĠtÅĻ eba", + "ز اÙĨ", + "زا ÙĨ", + "is yon", + "isy on", + "Ġ ген", + "Ġг ен", + "Ġге н", + "Ġ Pokud", + "ĠP okud", + "ĠPo kud", + "ĠPok ud", + "âĢĮ اÙĨد", + "âĢĮاÙĨ د", + "Ġг ÑĢÑĥд", + "ĠгÑĢÑĥ д", + "ĠгÑĢ Ñĥд", + "Ġ خرÛĮد", + "Ġخر ÛĮد", + "λ λα", + "λλ α", + "Ġp ÅĻÃŃm", + "ĠpÅĻ ÃŃm", + "ĠpÅĻÃŃ m", + "Ġ æ³ķ", + "Ġæ³ ķ", + "Ġز ÙĨدگÛĮ", + "ĠزÙĨد Ú¯ÛĮ", + "ạ p", + "Ġ íĬ¸", + "ĠíĬ ¸", + "ĠÄij á»Ļc", + "ĠÄijá»Ļ c", + "Ġê·¸ ë¦¬ê³ł", + "Ġ그리 ê³ł", + "н из", + "ни з", + "Ġ ÙĬÙĤ", + "ĠÙĬ ÙĤ", + "l aÅŁtır", + "la ÅŁtır", + "laÅŁ tır", + "ĠпÑĢав о", + "ĠпÑĢа во", + "Ñĥ Ñģк", + "ÑĥÑģ к", + "å° ½", + "Ġप ड", + "éĵ ģ", + "Ġ ì·¨", + "Ġì ·¨", + "ĠاÙĦ بÙĬ", + "ĠاÙĦب ÙĬ", + " ¸", + "ิม à¸ŀ", + "Ġs vÄĽ", + "Ġsv ÄĽ", + "Ġб ал", + "Ġба л", + "Ġm ôn", + "Ġmô n", + "ĠD ữ", + "ĠØ´ دÙĨ", + "Ġشد ÙĨ", + "Ġ ÙģÙĦ", + "ĠÙģ ÙĦ", + "Ġv znik", + "Ġvz nik", + "Ġch ứ", + "ĠÑģÑĤ ÑĢÑĥкÑĤÑĥ", + "ç¸ £", + "ĠH oa", + "ĠHo a", + "í ĮĢ", + "íĮ Ģ", + "Ġ ÑĢÑĸÑĪ", + "ĠÑĢ ÑĸÑĪ", + "Ġвоз дÑĥ", + "олÑĮ ÑĪ", + "οÏħ με", + "ู à¸Ļ", + "Ġп ÑĢид", + "ĠпÑĢ Ð¸Ð´", + "ĠпÑĢи д", + "il mek", + "ilm ek", + "ĠاÙĦ ÙĤر", + "ĠاÙĦÙĤ ر", + "Į ĵ", + "Ġ uç", + "Ġu ç", + "å¨ ĺ", + "ec ektir", + "ecek tir", + "Ġ íħĮ", + "Ġí ħĮ", + "Ġíħ Į", + "Ġ εÏħ", + "Ġε Ïħ", + "Ġh òa", + "Ïģ Ïħ", + "ึà¸ģษ า", + "ĠÑĤеÑħ нолог", + "ú i", + "Ġbilg iler", + "Ġbilgi ler", + "Ġ ÙĤاÙĦ", + "ĠÙĤ اÙĦ", + "e dl", + "ed l", + "z nám", + "zn ám", + "á ly", + "ál y", + "åºĶ 该", + "алÑĮ ний", + "аÑĤ елÑı", + "аÑĤе лÑı", + "à¸Ļ วà¸Ļ", + "à¸Ļว à¸Ļ", + "Ġ ÐŁÐ¾Ð»", + "ĠÐŁ ол", + "ĠÐŁÐ¾ л", + "à¸ŀ à¸Ļ", + "ç¤ ¼", + "Ġt asar", + "Ġta sar", + "Ġtas ar", + "ĠÑĤ ой", + "ĠÑĤо й", + "Ġм еÑģÑı", + "Ġ иÑģк", + "Ġи Ñģк", + "ĠиÑģ к", + "Ġप द", + "γ ή", + "ا ختÙĩ", + "اخ تÙĩ", + "اخت Ùĩ", + "è¿Ļ éĩĮ", + "Ġch á»īnh", + "Ġchá»ī nh", + "ĠÙĤ سÙħ", + "Ùİ Ùĩ", + "er li", + "åĽ½ éĻħ", + "il iyor", + "ili yor", + "ĠØ´Ùĩر ستاÙĨ", + "Ġve lk", + "Ġvel k", + "åĽ º", + "Ġб ÑĸлÑĮÑĪ", + "ĠбÑĸлÑĮ ÑĪ", + "ãĥ¼ ãĥĹ", + "ãĥ¼ãĥ Ĺ", + "æŁ IJ", + "ì§ ľ", + "ĠÄĮ R", + "Ġд ек", + "Ġде к", + "ر بÛĮ", + "رب ÛĮ", + "о виÑĩ", + "ов иÑĩ", + "ови Ñĩ", + "Ġkap sam", + "Ġkaps am", + "ĠÙĦ Ø£", + "Ġ анÑĤи", + "Ġан ÑĤи", + "Ġ ücret", + "Ġü cret", + "ê² ¬", + "о ÑĢож", + "оÑĢ Ð¾Ð¶", + "оÑĢо ж", + "ÛĮ ÙħÛĮ", + "ÛĮÙħ ÛĮ", + "è© ķ", + "Ġ ë§ŀ", + "Ġë§ ŀ", + "Ġ ÑĢÑıд", + "ĠÑĢ Ñıд", + "ĠÑĢÑı д", + "ĠÙĩÙħ راÙĩ", + "â r", + "ا بت", + "اب ت", + "ĠиÑģполÑĮзов аÑĤÑĮ", + "ĠиÑģполÑĮз оваÑĤÑĮ", + "к Ñģ", + "âī ¡", + "Ġo lay", + "Ġol ay", + "Ġola y", + "èį ¯", + "Ġo prav", + "Ġop rav", + "Ġopr av", + "Ġدرب ارÙĩ", + "Ġ ä¸ŃåĽ½", + "Ġä¸Ń åĽ½", + "и лÑģÑı", + "ил ÑģÑı", + "åį «", + "ĠاÙĦ است", + "ĠاÙĦاس ت", + "ÙĪÛĮ ÛĮ", + "ÑĢ ÐµÑĪ", + "ÑĢе ÑĪ", + "Ġ ÙĨس", + "ĠÙĨ س", + "ãĢĤ åľ¨", + "Ġ ÙĦØŃ", + "ĠÙĦ ØŃ", + "Ġko run", + "Ġkor un", + "ĠÙģ Ø±Ø¯", + "ĠÙ쨱 د", + "Ġо боÑĢ", + "Ġоб оÑĢ", + "Ġобо ÑĢ", + "е ÑĪÑĮ", + "еÑĪ ÑĮ", + "Ġpod mÃŃn", + "Ġ ë¬¸ìłľ", + "Ġ문 ìłľ", + "ĠdeÄŁer lendir", + "ä¸į åIJĮ", + "æ¶ ²", + "ा हर", + "ाह र", + "íļ į", + "à¥į à¤ł", + "à¥įठł", + "и ÑĤиÑģÑı", + "иÑĤи ÑģÑı", + "ا ÙĦع", + "اÙĦ ع", + "Ġd vÄĽ", + "Ġdv ÄĽ", + "ĠпеÑĢ ÐµÐº", + "ĠпеÑĢе к", + "Ġ åħĥ", + "Ġåħ ĥ", + "Ġ aras", + "Ġa ras", + "Ġar as", + "Ġara s", + "Ġalt ında", + "Ġaltın da", + "Ġaltı nda", + "Ġв за", + "Ġвз а", + "æĴ ĥ", + "Ġmil yon", + "Ġ åѦ", + "ĠåŃ ¦", + "Ġв аÑĢи", + "ĠваÑĢ Ð¸", + "Ġва ÑĢи", + "ĠاÙĦع اÙĦÙħ", + "' Ñı", + "ÙĪ ÛĮس", + "ÙĪÛĮ س", + "Ġмож ÑĥÑĤÑĮ", + "ãģij ãģŁ", + "ìĿ´ ìĹĪëĭ¤", + "ìĿ´ìĹĪ ëĭ¤", + "ο Ïįν", + "οÏį ν", + "Ġ éŁ", + "Ġé Ł", + "Ġpost up", + "Ġpo stup", + "ü yük", + "üy ük", + "åĪ Ĭ", + "Ġ ÙĤب", + "ĠÙĤ ب", + "Ġاص ÙĦÛĮ", + "ĠاصÙĦ ÛĮ", + "ÙĪ Ùī", + "Ġrep ublik", + "Ġ ÐĻ", + "ĠÐ Ļ", + "ģ m", + "Ġб ел", + "ा -", + "Ñģ кое", + "Ñģк ое", + "Ñģко е", + "Ġcu á»iji", + "è² ·", + "ี ยว", + "ีย ว", + "éĩį è¦ģ", + "ู ม", + "ĠÑĢозвиÑĤ кÑĥ", + "Ġ ë°±", + "Ġë° ±", + "åĥ ¹", + "Ġ åīį", + "Ġåī į", + "à¹Ħ à¸ĭ", + "ãĢĮ â̦â̦", + "à¥Į त", + "Ú© رد", + "کر د", + "Ġza ÅĻÃŃzenÃŃ", + "ส าร", + "Ġle tech", + "Ġlet ech", + "l emek", + "le mek", + "lem ek", + "leme k", + "人 ãģ®", + "Ġd ưỡng", + "ĠdưỠ¡ng", + "ت ÙĤ", + "Ġ åĵ", + "Ġå ĵ", + "åħ »", + "Ġ ëıħ", + "Ġëı ħ", + "Ġ 루", + "Ġë £¨", + "Ġë£ ¨", + "ذ ÙĦÙĥ", + "Ġ ìĿ¼ë³¸", + "ĠìĿ¼ 본", + "ĠAy rıca", + "ĠÙ¾ Úĺ", + "is inin", + "isi nin", + "isin in", + "isini n", + "Ġìĭ ¶", + "Ú¯ ÛĮرÛĮ", + "Ú¯ÛĮ رÛĮ", + "Ú¯ÛĮر ÛĮ", + "خص ص", + "³ ç´°", + "ĠмаÑĤеÑĢи ал", + "k ové", + "ko vé", + "kov é", + "ë§ ī", + "ãģķ ãģĽ", + "ĠÑĤак ой", + "ĠÑĤа кой", + "Ġtr áºŃn", + "Ġ лиÑĨ", + "Ġл иÑĨ", + "Ġли ÑĨ", + "Ġ åĽĽ", + "ĠåĽ Ľ", + "Ñĩ Ñĥ", + "Ġ æ°´", + "Ġæ° ´", + "Ġdo lay", + "Ġdol ay", + "å½ ¹", + "ÑĢ Ð¸Ð²Ð°", + "ÑĢи ва", + "ÑĢив а", + "Ġг ÑĢÑĥпп", + "ĠгÑĢÑĥ пп", + "ĠгÑĢÑĥп п", + "Ġmüm kün", + "л ена", + "лен а", + "ле на", + "ëĿ¼ ëĬĶ", + "åĪ© ç͍", + "Ġr ahat", + "Ġra hat", + "ï¼ıï¼ı ï¼ıï¼ı", + "æģ ©", + "Ġ íķŃ", + "Ġíķ Ń", + "Ġ íĴ", + "Ġí Ĵ", + "Ġ ìĬ¹", + "ĠìĬ ¹", + "Ġch ân", + "Ġ ãĤ¨", + "ĠãĤ ¨", + "Ġжиз ни", + "çĸ ij", + "ãĢĤ ä»ĸ", + "리 ìĬ¤", + "Ñĩ иÑħ", + "Ñĩи Ñħ", + "Ġ é¦ĸ", + "Ġé¦ ĸ", + "ÄĽ r", + "Ġй омÑĥ", + "Ġth áºŃt", + "Ġìķ ŀ", + "c ih", + "ci h", + "س ÙĦاÙħ", + "سÙĦ اÙħ", + "Ġs iyas", + "Ġsi yas", + "Ġ íĸĪ", + "Ġíĸ Ī", + "Ġк оÑĪ", + "Ġко ÑĪ", + "Ïĥ αν", + "Ïĥα ν", + "ÙĬ اÙĨ", + "ÙĬا ÙĨ", + "Ġd ö", + "ाह त", + "о ÑĢод", + "оÑĢ Ð¾Ð´", + "оÑĢо д", + "о ваÑı", + "ов аÑı", + "ова Ñı", + "ÑĨи оналÑĮ", + "ÑĨион алÑĮ", + "ائ Ùĩ", + "Ġà¤ĸ र", + "ĠÄij á»Ŀi", + "ĠÄijá» Ŀi", + "ä¸į ä¼ļ", + "Ùĥ ز", + "ี à¸Ħวาม", + "ีà¸Ħ วาม", + "l ıyor", + "lı yor", + "à¥ĭ द", + "Ġ ì¶©", + "Ġì¶ ©", + "Ġc á»ij", + "à¹Ĥ à¸ķ", + "Ġε ÏĢί", + "ĠεÏĢ Î¯", + "ĠпÑĢ Ñıм", + "æ³ °", + "ا ÙĦØ©", + "اÙĦ Ø©", + "j ÃŃm", + "jÃŃ m", + "Ġ би", + "Ġб и", + "Å¡ em", + "Å¡e m", + "ĠH á»Ļi", + "à¸Ħ รà¸ĩ", + "à¸Ħร à¸ĩ", + "Ġh uyá»ĩn", + "Ġhuy á»ĩn", + "ç¯ Ģ", + "l iÅ¡", + "li Å¡", + "ĠجÙĩ ت", + "ç§ ĭ", + "ĠÑĨ ел", + "ĠÑĨе л", + "Ġ лÑĸÑĤ", + "Ġл ÑĸÑĤ", + "ĠлÑĸ ÑĤ", + "Ġ æ·", + "Ġæ ·", + "ж Ñĥ", + "ãģĪ ãģŁ", + "ë´ ī", + "Ġ 머", + "Ġë¨ ¸", + "åł´ åIJĪ", + "éĿ ©", + "ãĥª ãĥ³", + "ег да", + "Ġbe nim", + "Ġben im", + "Ġbeni m", + "çĽ Ł", + "ãģ® ä¸Ń", + "åĿ IJ", + "ĠÃľniversit esi", + "Ġko ÅŁ", + "Ġп ож", + "Ġпо ж", + "iá»ĩ p", + "ĠpÅĻ ij", + "ĠpÅĻi j", + "ëŀ ¨", + "ĠاÙĦ أس", + "ĠاÙĦØ£ س", + "ár nÃŃ", + "iế m", + "Ġ èĬ", + "Ġè Ĭ", + "Ġ δε", + "Ġδ ε", + "å¨ ±ä¹IJ", + "Ġ ưu", + "Ġ çĦ¡", + "ĠçĦ ¡", + "Ġг ÑĢи", + "ĠгÑĢ Ð¸", + "Ġпо ÑįÑĤомÑĥ", + "ĠÄij óng", + "ĠÄijó ng", + "ĠÄijón g", + "ج اÙĨ", + "جا ÙĨ", + "Ġngh iên", + "Ġnghi ên", + "Ġا ÙĦاÙĨ", + "ĠاÙĦ اÙĨ", + "ÑĪ ÐµÐ¹", + "ÑĪе й", + "à¹ģ รà¸ģ", + "ĠÚĨ Ùĩار", + "ĠÚĨÙĩ ار", + "Ñİ Ñīий", + "ÑİÑī ий", + "ÏĮ Ïģ", + "Ġ رÙħ", + "Ġر Ùħ", + "ì² ł", + "Ġدست گاÙĩ", + "Ġ دÛĮد", + "Ġد ÛĮد", + "ĠدÛĮ د", + "ãĥĥãĤ¯ ãĤ¹", + "ा मन", + "ाम न", + "ĠTh Ãłnh", + "Ġth ẩm", + "Ġc Ãłng", + "ĠcÃł ng", + "Ġdön Ã¼ÅŁ", + "ĠпÑĢи гоÑĤов", + "ĠпÑĢиг оÑĤов", + "Ġk iÅŁi", + "Ġki ÅŁi", + "ĠkiÅŁ i", + "ØŃ ت", + "Ġ ë²ķ", + "Ġë² ķ", + "é£ Ľ", + "Ġit ibar", + "Ġг лав", + "Ġгла в", + "Ġor tam", + "Ġort am", + "Ġorta m", + "Ġm add", + "Ġma dd", + "Ġmad d", + "Ġ оÑģÑĤав", + "Ġо ÑģÑĤав", + "ĠоÑģÑĤ ав", + "ĠÙģÙĪ ØªØ¨Ø§ÙĦ", + "ĠÙģÙĪØª باÙĦ", + "Ġan laÅŁ", + "l eyen", + "le yen", + "ley en", + "ç ´Ģ", + "ç´ Ģ", + "Ġ é£", + "Ġé £", + "/ lo", + "/l o", + "Ùħ ÙĪÙĦ", + "ÙħÙĪ ÙĦ", + "Ġд ÑĥÑħ", + "ĠдÑĥ Ñħ", + "Ġ ÙĦب", + "ĠÙĦ ب", + "л ег", + "ле г", + "Ġgö nder", + "Ġgön der", + "ÙĬ Ø·", + "Ġ สำ", + "Ġส ำ", + "Ġv ás", + "Ġvá s", + "ĠÐŁ еÑĤ", + "а лоÑģÑı", + "ало ÑģÑı", + "ì ¿ł", + "ì¿ ł", + "éĻ ½", + "åĸ ®", + "èĪ ŀ", + "н Ñĥл", + "нÑĥ л", + "ÄŁ ine", + "ÄŁi ne", + "ÄŁin e", + "Ġ ghi", + "Ġg hi", + "Ġgh i", + "Ġ çµ", + "Ġç µ", + "ÙĬ ÙĨÙĬ", + "ÙĬÙĨ ÙĬ", + "Å ½", + "Ġhük üm", + "ĠD Ä±ÅŁ", + "ĠÎŃ Ïĩει", + "ĠÎŃÏĩ ει", + "Ġ Ñģка", + "ĠÑģ ка", + "ĠÑģк а", + "Ġ ÑĤим", + "ĠÑĤ им", + "ĠÑĤи м", + "Ġп оÑģÑĤав", + "Ġпо ÑģÑĤав", + "ĠпоÑģÑĤ ав", + "à¸Ļ าà¸Ķ", + "à¸Ļา à¸Ķ", + "d ül", + "dü l", + "Ġd va", + "Ġdv a", + "Ġ à¸Ħà¸Ļ", + "Ġà¸Ħ à¸Ļ", + "Ġchá»ĭ u", + "Ġ èı", + "Ġè ı", + "à¹ģส à¸Ķà¸ĩ", + "æ° £", + "Ġ íά", + "Ġí ά", + "Ġ Ñĩин", + "ĠÑĩ ин", + "ĠÑĩи н", + "ãģ« ãģĬ", + "ен ноÑģÑĤи", + "енно ÑģÑĤи", + "ÐIJ ÐĿ", + "Ġh emen", + "Ġhe men", + "Ġhem en", + "Ġ ait", + "Ġa it", + "Ġai t", + "Ġ à¤Ĭ", + "ĠठĬ", + "æī §", + "ĠA BD", + "ĠAB D", + "Ġκα θ", + "æ´ Ľ", + "ãĤ¢ ãĥ«", + "à¹ī าà¸Ĺ", + "à¹īา à¸Ĺ", + "ÅĻ ez", + "ÅĻe z", + "d ÄĽji", + "dÄĽ ji", + "Ġt á»ĭch", + "еннÑı м", + "Ġв ÑģÑĤанов", + "ĠвÑģÑĤ анов", + "ĠاÙĦ بر", + "ĠاÙĦب ر", + "ÙĪÙħ تر", + "k ách", + "ká ch", + "åº Ĭ", + "л Ñĥж", + "лÑĥ ж", + "Ġ تد", + "Ġت د", + "ä¸ ½", + "ر Ø®", + "à¤Ĥ à¤ĸ", + "èĩªå·± çļĦ", + "å®ĺ ç½ij", + "- Ñı", + "à¹ĩ à¸Ķ", + "èĦ ļ", + "Ġ çķ", + "Ġç ķ", + "Ġiçer isinde", + "Ġb iá»ĥn", + "Ġbi á»ĥn", + "Ġ à¸ģล", + "Ġà¸ģ ล", + "Ġy aÄŁ", + "Ġya ÄŁ", + "Ġ æ´", + "Ġæ ´", + "Ġ бÑĢа", + "Ġб ÑĢа", + "ع ار", + "عا ر", + "æĪ °", + "à¥Ģ Ċ", + "Ġlé Äį", + "a ların", + "alar ın", + "aları n", + "Ġ Îĸ", + "ĠÎ ĸ", + "а ÑĢÑı", + "аÑĢ Ñı", + "ãģĿ ãĤĵãģª", + "ÅĪ uje", + "ãĢĢ Ġ", + "ĠsaÄŁ lık", + "Ġдо ÑģлÑĸд", + "ĠдоÑģ лÑĸд", + "ÃŃ Å¡", + "à¥įर श", + "à¥ī न", + "Ġgi ả", + "بÙĪ Ø§Ø³Ø·Ø©", + "å® ģ", + "Ġs oud", + "Ġso ud", + "Ġsou d", + "Ġк ÑĤо", + "e sel", + "es el", + "ese l", + "Ġп ам", + "Ġпа м", + "Ġ ÂłĠ", + "ĠÂł Ġ", + "ĠÄį lov", + "æ· ·", + "ห à¸į", + "ĠOs man", + "æ ¦Ĥ", + "æ¦ Ĥ", + "Ġ åĭ", + "Ġå ĭ", + "ï¼Į åħ¶", + "Ġ à¸Ħร", + "Ġà¸Ħ ร", + "Ġmá» ģm", + "Ġ ÑģоÑĢ", + "ĠÑģ оÑĢ", + "ĠÑģо ÑĢ", + "çĨ ±", + "Ġthu ê", + "ر ج", + "à¹Ĥล à¸ģ", + "Ġ íķĺê³ł", + "Ġíķĺ ê³ł", + "ÙĬ دة", + "ÙĬد Ø©", + "ĠaÅŁ aģı", + "Ġk á»ĥ", + "Ġká» ĥ", + "à¸ķ ำ", + "λ ει", + "λε ι", + "çļĦ è¯Ŀ", + "æ± ł", + "ĠÑģ ÑĤен", + "ĠÑģÑĤ ен", + "Ġin cel", + "Ġinc el", + "Ġince l", + "åº Ń", + "ÑĤ оÑĩ", + "ÑĤо Ñĩ", + "Ġprob lém", + "Ġprobl ém", + "ÏĦ Ïĥ", + "à¹ī à¸Ńà¸Ļ", + "à¹īà¸Ń à¸Ļ", + "ë³´ ëĭ¤", + "Ġà¤Ĩ à¤Ĺ", + "ν αÏĤ", + "να ÏĤ", + "ãģĦ ãĤĭ", + "Ġd ục", + "Ġdụ c", + "Ġtoho to", + "Ġtoh oto", + "ëIJĺ ìĹĪëĭ¤", + "ëIJĺìĹĪ ëĭ¤", + "T J", + "Ġви знаÑĩ", + "ĠB unun", + "ĠBu nun", + "ĠBun un", + "ĠBunu n", + "à¤Ĥ बर", + "à¤Ĥब र", + "ĠÙĩÙħÚĨ ÙĨÛĮÙĨ", + "Ġб Ñİдж", + "Ñĥ ÑĢг", + "ÑĥÑĢ Ð³", + "äº ®", + "Ġμε γ", + "Ġtop lum", + "Ġtopl um", + "ãģ£ ãģ", + "о ÑĤо", + "оÑĤ о", + ": |", + "éĿŀ 常", + "ิ à¸Ĺà¸ĺ", + "ิà¸Ĺ à¸ĺ", + "éģ ķ", + "âĢĮÙ¾ دÛĮ", + "Ġз ÑĢоб", + "à¹Į à¸Ķ", + "Ġдолж ен", + "Ġдол жен", + "ĠmÄĽ sta", + "ĠmÄĽst a", + "ÛĮ Ø´Ùĩ", + "ÛĮØ´ Ùĩ", + "v atel", + "va tel", + "vat el", + "Ġprov oz", + "Ġ inan", + "Ġin an", + "Ġi nan", + "à¤Ĥ प", + "Ġpar ç", + "ÑĢ Ð°ÑģÑĤ", + "ÑĢа ÑģÑĤ", + "ÑĢаÑģ ÑĤ", + "üm ü", + "Ġgi á»ijng", + "Ġgiá» ijng", + "æ¬ ¢", + "Ø« ÙĬر", + "ĠB akan", + "ĠBa kan", + "ĠBak an", + "Ġ â΍", + "ĠâĪ ¨", + "Ġ باÙĨ", + "Ġب اÙĨ", + "Ġبا ÙĨ", + "Û± Û¸", + "Û±Û ¸", + "ãĤĤ ãģĨ", + "land ı", + "lan dı", + "Ġyen iden", + "Ġyeni den", + "ÑĨ енÑĤ", + "ÑĨе нÑĤ", + "ÑĨен ÑĤ", + "Ġде ÑıÑĤелÑĮ", + "Ð ©", + "Ġ rov", + "Ġr ov", + "Ġro v", + "å®Į åħ¨", + "ĠK ỳ", + "s lu", + "sl u", + "Ġl ấy", + "é¤ IJ", + "ĠÑĩ олов", + "ä¼ Ŀ", + "ĠbaÅŁ v", + "å° Ī", + "ê³ ¡", + "ãĢģ ãģĿãĤĮ", + "Ġ PÅĻÃŃ", + "ĠP ÅĻÃŃ", + "ĠPÅĻ ÃŃ", + "д ем", + "де м", + "ĠпÑĢо ек", + "ร à¸ĸ", + "建 设", + "Ġмож лив", + "æ® º", + "ãģ¡ãĤĥ ãĤĵ", + "æķ ij", + "ĠÄį ty", + "ĠÄįt y", + "é¦ Ĩ", + "о ÑĢÑĥ", + "оÑĢ Ñĥ", + "Ġ æĦ", + "Ġæ Ħ", + "Ġk ÃŃch", + "λ οÏħ", + "λο Ïħ", + "ãģĦ ãģ¤", + "Ġc Äĥn", + "ĠcÄĥ n", + "Ạµ", + "Ġel de", + "éº »", + "ÄŁ e", + "Ġdo bÄĽ", + "Ġdob ÄĽ", + "ा यर", + "ाय र", + "Ġ ãĥı", + "Ġãĥ ı", + "н ен", + "не н", + "Ġmůže te", + "Ġmůž ete", + "Ġна ÑģÑĤÑĥп", + "ĠнаÑģÑĤ Ñĥп", + "ìĭľ ê°Ħ", + "ĠÑģим пÑĤом", + "Ġ ÏĥÏį", + "ĠÏĥ Ïį", + "Ġ سÙĦ", + "Ġس ÙĦ", + "ε κ", + "ร à¸ĵ", + "á te", + "át e", + "ek ler", + "ekl er", + "ĠвÑĢем ени", + "ĠвÑĢемен и", + "âĢĮ ÙĩاÛĮÛĮ", + "âĢĮÙĩاÛĮ ÛĮ", + "ãģĬ ãĤĬ", + "ж и", + "Ñĭ ваеÑĤÑģÑı", + "Ñĭв аеÑĤÑģÑı", + "Ñĭва еÑĤÑģÑı", + "ÑĭваеÑĤ ÑģÑı", + "Ùħ اÙĨÛĮ", + "ÙħاÙĨ ÛĮ", + "Ùħا ÙĨÛĮ", + "à¸ķ ล", + "Ġ صد", + "Ġص د", + "Ġ вол", + "Ġв ол", + "Ġво л", + "ìĬ Ī", + "ĠÙĥ Ùħا", + "ĠÙĥÙħ ا", + "Ġnh ằm", + "èģ ¯", + "ov acÃŃ", + "ova cÃŃ", + "Ġë§Į ëĵ¤", + "ÙĪ Ù¾", + "Ġ ë¸Į", + "Ġë¸ Į", + "ب ÙĬØ©", + "بÙĬ Ø©", + "u yla", + "uy la", + "л ено", + "лен о", + "ле но", + "èĮ ¶", + "ÑĢ ÐµÐ¹", + "ÑĢе й", + "Ġk li", + "Ġkl i", + "Ġüzer inden", + "Ġüzerinde n", + "н еÑĤ", + "не ÑĤ", + "r aÄį", + "ra Äį", + "ĠпÑĢа ÑĨÑİ", + "Ġed iyor", + "Ġedi yor", + "ãģı ãģł", + "Ġ Äįast", + "ĠÄį ast", + "ĠÄįas t", + "i yi", + "iy i", + "éĬ Ģ", + "Ġd ù", + "Ùİ Ø¨", + "ÙĪ ÙĬØ©", + "ÙĪÙĬ Ø©", + "å ª", + "Ġs ınıf", + "Ġsın ıf", + "Ġس اعت", + "Ġ ราย", + "Ġร าย", + "Ġза Ñıв", + "Ġg ặp", + "à¸Ń ว", + "ĠØ« Ùħ", + "ĠZ á", + "ĠвÑĸд к", + "i zik", + "iz ik", + "izi k", + "Ġm ón", + "Ġmó n", + "Ġпов ÑĭÑĪ", + "Ġ à¸ļาà¸Ĺ", + "Ġà¸ļ าà¸Ĺ", + "ĠÑģ ил", + "ĠÑģи л", + "æĥħ åł±", + "Âł t", + "ĠÐľ оÑģк", + "Ġê²ĥ ìĿ´ëĭ¤", + "Ġê²ĥìĿ´ ëĭ¤", + "Ġ çIJ", + "Ġç IJ", + "ĠÙħدÛĮر ÛĮت", + "ов оÑĹ", + "ово ÑĹ", + "Τ ο", + "çº ª", + "нÑĸ ÑĪе", + "нÑĸÑĪ Ðµ", + "Ġ ÐĽÑİ", + "ĠÐĽ Ñİ", + "η Ïĥη", + "ĠÙĨسب ت", + "ĠÙĨس بت", + "m uz", + "mu z", + "ร ว", + "ãĢģ ãģĤ", + "Ġбол ез", + "Ġtr ách", + "ãĥ ¦", + "à¹Ģà¸Ĥ า", + "Ġê·¸ ëĬĶ", + "ب رÛĮ", + "بر ÛĮ", + "æł ª", + "ëĿ¼ ìĿ´", + "Ġ íĮ¨", + "Ġí Į¨", + "ĠíĮ ¨", + "íĬ ¹", + "ľ ´", + "ि ड", + "िठ¡", + "ÑĢо ме", + "ÑĢом е", + "è® ²", + "Ġ ÑĤон", + "ĠÑĤ он", + "ĠÑĤо н", + "Ñģ Ñĸ", + "Ġ ç®", + "Ġç ®", + "åıĸ ãĤĬ", + "ì° °", + "Ġ ÙĪÙĦÛĮ", + "ĠÙĪ ÙĦÛĮ", + "ĠÙĪÙĦ ÛĮ", + "Ġس Ø·ØŃ", + "èı ľ", + "н ами", + "на ми", + "нам и", + "T ürk", + "åİ Ĥ", + "Ġf inan", + "Ġfin an", + "Ġfi nan", + "ãģ« ãģªãĤĭ", + "ãģ«ãģª ãĤĭ", + "Ġ oby", + "Ġo by", + "Ġob y", + "T rong", + "Tr ong", + "Tro ng", + "Ġv yp", + "Ġvy p", + "à¥ģ ड", + "à¥ģठ¡", + "ìŀIJ ê°Ģ", + "Ġ æīĢ", + "Ġæī Ģ", + "ÐĹ Ð°", + "um lu", + "uml u", + "ëĵ Ŀ", + "Ġм енÑĸ", + "Ġмен Ñĸ", + "ол ниÑĤелÑĮ", + "олн иÑĤелÑĮ", + "Ġú Äįin", + "ĠúÄį in", + "Ġb unun", + "Ġbu nun", + "Ġbun un", + "Ġbunu n", + "ĠÐłÐ¾Ñģ Ñģии", + "в ÑģÑı", + "Ġн Ñĸж", + "ĠнÑĸ ж", + "ิà¸Ķ à¸ķ", + "غ Ø©", + "Ä ļ", + "Ġ سÙħ", + "Ġس Ùħ", + "Ġ Ðĺз", + "ĠÐĺ з", + "à¥ĩ प", + "à¥ĩठª", + "大 çļĦ", + "ì¹ ľ", + "Ġ иÑģÑĤ", + "Ġи ÑģÑĤ", + "ĠиÑģ ÑĤ", + "Ġкон ÑģÑĤÑĢÑĥк", + "Û± Û²", + "Û±Û ²", + "â l", + "Ġ ÑĪиÑĢ", + "ĠÑĪ Ð¸ÑĢ", + "ĠÑĪи ÑĢ", + "ï¼ ł", + "Ġar tık", + "Ġart ık", + "æŁ ĵ", + "ä¹ ¡", + "ÃŃ te", + "ÃŃt e", + "ĠNh áºŃt", + "ĠÎĶ Î·", + "Ġöl ç", + "êµ ´", + "о Ñıн", + "оÑı н", + "ëĵ± ë¡Ŀ", + "Ġng ân", + "Ġ бÑĥдÑĮ", + "ĠбÑĥд ÑĮ", + "ÎŁ Ρ", + "ÎŁÎ ¡", + "ì ´", + "Ùħ ÙĪØ¯", + "ÙħÙĪ Ø¯", + "ν ον", + "νο ν", + "Îķ ÎĿ", + "çij ŀ", + "ĠÅĻ ek", + "ĠÅĻe k", + "- âĢIJ", + "ĠM erk", + "ĠMe rk", + "ĠMer k", + "Ġоп ÑĢедел", + "ĠопÑĢед ел", + "Ïģ ιν", + "Ïģι ν", + "л аб", + "ла б", + "ëĦ¤ ìļĶ", + "Ġб лиз", + "Ġбл из", + "Ġбли з", + "Ġph á»iji", + "Ġphá»ij i", + "Ġдолж нÑĭ", + "ĠÑį кÑģп", + "ĠÑįк Ñģп", + "à¸ļ à¸Ĺ", + "à¸Ľà¸£à¸° ส", + "ĠÙ¾Úĺ ÙĪÙĩ", + "Ġ íķľëĭ¤", + "Ġíķľ ëĭ¤", + "ÏĦ οÏį", + "ÏĦο Ïį", + "Ùĩ ÙĨ", + "Ġд од", + "Ġдо д", + "Ġk ayı", + "Ġka yı", + "Ġkay ı", + "Ł ģ", + "Ñģ иÑı", + "Ñģи Ñı", + "à¤Ĥ तर", + "à¤Ĥत र", + "Ġpod nik", + "e vi", + "ev i", + "ÛĮ ÛĮر", + "Т ак", + "Та к", + "к оп", + "ко п", + "н аÑħ", + "на Ñħ", + "ا سÙĩ", + "اس Ùĩ", + "à¸ĵ à¸ij", + "Ġk há", + "Ġkh á", + "Ġy arat", + "Ġya rat", + "Ġyar at", + "ĠاÛĮÙĨ Ú©Ùĩ", + "Ø· بÙĬ", + "طب ÙĬ", + "Ġs ır", + "Ġsı r", + "ĠØ¢ÙħرÛĮÚ© ا", + "Ġ बल", + "Ġब ल", + "k aç", + "ka ç", + "Ġ åı¯", + "Ġåı ¯", + "Ġ åħ¶", + "Ġåħ ¶", + ". ***", + ".* **", + "л ÑĸннÑı", + "лÑĸн нÑı", + "ä¹ ±", + "o q", + "æ ¦", + "ãĤ ¼", + "Ġf ır", + "Ġk ê", + "Ġìłľ ê³µ", + "Ġ Ïĥη", + "ĠÏĥ η", + "а нÑĭ", + "ан Ñĭ", + "н ова", + "но ва", + "нов а", + "à¸Ĭ าย", + "ĠØ· ÙĪÙĦ", + "à¥Ī य", + "Ġ ì¹ľ", + "Ġì¹ ľ", + "ìĤ ´", + "Ġп Ñĸв", + "Ġlu áºŃn", + "Ġà¤ī म", + "åº ĥ", + "à¹ĩ à¸Ńà¸ķ", + "Ġس اÛĮت", + "л Ñıн", + "лÑı н", + "ĠíķĦ ìļĶ", + "Ġgör ül", + "ĠÑĤеÑĢ Ð¸ÑĤоÑĢ", + "ĠÙĨ ØŃ", + "е ма", + "ем а", + "Ġmn oh", + "Ġ ãģ¯", + "غ ÙĬر", + "ĠÑģдел аÑĤÑĮ", + "ç ģµ", + "çģ µ", + "Ġ ÐłÐ°Ð·", + "ĠÐł аз", + "ĠÐłÐ° з", + "Ġг еÑĢ", + "Ġге ÑĢ", + "γ μα", + "íķĺ ë©´", + "ĠdeÄŁ iÅŁtir", + "ĠdeÄŁiÅŁ tir", + "ãĥ³ ãĥĨ", + "ãĥ³ãĥ Ĩ", + "å¸Ĥ åľº", + "个 人", + "ìĥ Ī", + "ì¹ ¨", + "èī º", + "ÙĤ ت", + "ĠÚ¯ رÙģØªÙĩ", + "ĠگرÙģ ØªÙĩ", + "Ġگر ÙģØªÙĩ", + "ĠگرÙģØª Ùĩ", + "Ġ çİĭ", + "Ġçİ ĭ", + "ĠاÙĦ ذÙĩ", + "ĠاÙĦذ Ùĩ", + "λ Ïħ", + "à¤ľ र", + "Ġв ним", + "ë¦ Ń", + "ิ à¸Ĺ", + "Ġ شاÙĩ", + "ĠØ´ اÙĩ", + "æĬķ èµĦ", + "æĿIJ æĸĻ", + "ĠÙĨ Ùģ", + "èª ¬", + "æĬ Ĺ", + "Ġ аб", + "Ġа б", + "iy eti", + "iye ti", + "iyet i", + "ç¾ ħ", + "ÑĢ Ñĸз", + "ÑĢÑĸ з", + "Ġ สม", + "Ġส ม", + "i cÃŃ", + "ic ÃŃ", + "к ÑĥваннÑı", + "кÑĥ ваннÑı", + "Ġ ìķ¼", + "Ġìķ ¼", + "Ġ è½", + "Ġè ½", + "âĢ «", + "Ġ διά", + "Ġδ ιά", + "Ġδι ά", + "Ġд еп", + "Ġде п", + "ãĥ¼ ãĤ¿", + "ãĥ¼ãĤ ¿", + "Ġob jev", + "Ġobj ev", + "mé na", + "Ġbe lg", + "Ġbel g", + "Ġ æ¥", + "Ġæ ¥", + "Ġn á»ģn", + "Ġг ол", + "Ġpost av", + "Ġpo stav", + "Ġت Ú©", + "Ð «", + "ĠпÑĸд ÑĤ", + "ĠоÑĤ ноÑĪ", + "Ġп ÑĢив", + "ĠпÑĢ Ð¸Ð²", + "ĠпÑĢи в", + "Ġ åŁº", + "ĠåŁ º", + "Ġн али", + "Ġна ли", + "Ġнал и", + "ů ž", + "Ġ yat", + "Ġy at", + "Ġya t", + "ÅŁ a", + "ÏĦ ήÏĤ", + "ÏĦή ÏĤ", + "ÑĨ ем", + "ÑĨе м", + "次 æķ°", + "Ġb Ãł", + "ÙĪ Ùĥ", + "Ġ íĶĦë¡ľ", + "ĠíĶĦ ë¡ľ", + "ĠPh áp", + "Ġ êµ°", + "Ġêµ °", + "è³ ŀ", + "Ġoch ran", + "Ġgere kir", + "Ġgerek ir", + "Ġ íļ", + "Ġí ļ", + "à¸ļ ล", + "á me", + "ám e", + "Ġ بÛĮر", + "Ġب ÛĮر", + "ĠبÛĮ ر", + "à¸Ĥ าย", + "ов аний", + "ова ний", + "овани й", + "ован ий", + "Ġmož né", + "âĶģâĶģâĶģâĶģ âĶģâĶģâĶģâĶģ", + "á lu", + "ál u", + "н ÑĤ", + "¦ æĥħ", + "à¹ģ รม", + "ĠÑĦ Ñĸн", + "Ġİ ç", + "à¹Ī à¸Ńย", + "à¹Īà¸Ń ย", + "ê² ¨", + "Ġh edef", + "Ġhe def", + "Ġhed ef", + "ĠاÙĦ ÙħØ´", + "ĠاÙĦÙħ Ø´", + "à¹ī าม", + "à¹īา ม", + "å¯ Ħ", + "Ġ ëĭµ", + "Ġëĭ µ", + "Ġ ô", + "Ġà ´", + "ла ÑģÑı", + "лаÑģ Ñı", + "İ T", + "à¸Ķ ำ", + "Ġher hangi", + "Ġger eken", + "Ġgere ken", + "Ġgerek en", + "е ÑĢеж", + "еÑĢ ÐµÐ¶", + "еÑĢе ж", + "ÙĪ Ø©", + "ĠpÅĻ est", + "ĠpÅĻes t", + "ĠpÅĻe st", + "ç§ij åѦ", + "оÑģÑĤ аÑĤ", + "ün den", + "ünd en", + "ünde n", + "åĮħ æĭ¬", + "Ġد Ùĩد", + "ĠدÙĩ د", + "ÑĪ Ð¸ÑģÑĮ", + "ÑĪи ÑģÑĮ", + "н еÑĢ", + "не ÑĢ", + "Ñĸ дом", + "Ñĸд ом", + "Ġb iç", + "Ġbi ç", + "ìĭ Ń", + "Ġhod not", + "Ġze mÄĽ", + "Ġzem ÄĽ", + "ĠاÛĮ جاد", + "Ġy ine", + "Ġyi ne", + "ि ण", + "िठ£", + "ĠاÙĦ بÙĦ", + "ĠاÙĦب ÙĦ", + "ĠN ÄĽ", + "Ġpol ož", + "Ġpo lož", + "Ġpolo ž", + "éĺħ 读", + "å¸ ģ", + "å¼ Ł", + "ξ ε", + "Ġ Má»Ļt", + "ĠM á»Ļt", + "ç £", + "Û±Û³ Û¹", + "ĠØ¢ ز", + "ãģ ŀ", + "Ġм еÑħ", + "ย ม", + "Ġ æ¨", + "Ġæ ¨", + "Ġo tur", + "Ġot ur", + "Ġd ầu", + "Ġ ëĭ¤ìļ´", + "Ġëĭ¤ ìļ´", + "çĮ «", + "Ġ Có", + "ĠC ó", + "Ġli dÃŃ", + "Ġlid ÃŃ", + "Ġark adaÅŁ", + "Ġα λλά", + "é¡ »", + "ĠÙĩ ÙħÛĮÙĨ", + "ĠÙĩÙħ ÛĮÙĨ", + "è» ¢", + "Ġ âĹĭ", + "ĠâĹ ĭ", + "ëıĦ ë¡Ŀ", + " ĥ", + "âĢĮØ´ دÙĩ", + "âĢĮشد Ùĩ", + "ĠØŃ ÙĬØ«", + "ĠØŃÙĬ Ø«", + "Ġnh óm", + "Ïĥ Ïĩ", + "ĠÑĤÑĢан Ñģп", + "ĠÑĤÑĢанÑģ п", + "Ġtan ım", + "Ġtanı m", + "ç´ į", + "Ġba his", + "Ġbah is", + "ä¸ ¾", + "Ġин ÑĦоÑĢма", + "ĠинÑĦоÑĢм а", + "ĠÑģ лож", + "ĠÑģл ож", + "ĠÑģло ж", + "Ġk raj", + "Ġkr aj", + "Ġkra j", + "Ġ ØŃÙĦ", + "ĠØŃ ÙĦ", + "Ġ ãĥĸ", + "Ġãĥ ĸ", + "ĠÙĨ ÙĤÙĦ", + "ĠÙĨÙĤ ÙĦ", + "Ġ ÐłÐ¾Ð·", + "ĠÐł оз", + "ĠÎij Ïħ", + "lar dı", + "ĠÙ¾ اس", + "Ġپا س", + "Ġ ìĭĿ", + "Ġìĭ Ŀ", + "ĠìłĦìļ© ë©´ìłģ", + "ĠاÙĦ سÙĬ", + "ĠاÙĦس ÙĬ", + "با شد", + "باش د", + "ศ าสà¸ķร", + "Ġk öy", + "Ġkö y", + "Ġ rok", + "Ġr ok", + "Ġro k", + "Ġ 죽", + "Ġì £½", + "Ġì£ ½", + "ĠÑģ ог", + "ĠÑģо г", + "Ġch ú", + "éĺ ª", + "ĠÄįást i", + "ĠÄįá sti", + "Ġз веÑĢ", + "Ġзв еÑĢ", + "Ġ низ", + "Ġн из", + "Ġни з", + "ĠÃ¶ÄŁ ret", + "Ġ ãĥİ", + "Ġãĥ İ", + "п е", + "çĴ °", + "Ġ èª", + "Ġè ª", + "ÙĪ ÙĦÙĩ", + "ÙĪÙĦ Ùĩ", + "İ M", + "/ REC", + "/R EC", + "å¡ ŀ", + "ĠÐĴ и", + "/l oose", + "/lo ose", + "Ġп оÑħ", + "Ġпо Ñħ", + "Ġgen iÅŁ", + "Ġth iá»ĩn", + "Ġthi á»ĩn", + "ti ÄŁi", + "Ñĩ ие", + "Ñĩи е", + "о нд", + "он д", + "Ġп ÑĢиÑģ", + "ĠпÑĢ Ð¸Ñģ", + "ĠпÑĢи Ñģ", + "áz ky", + "ĠDev let", + "ç¦ ģ", + "Ġ аг", + "Ġа г", + "i lere", + "il ere", + "ile re", + "iler e", + "ин кÑĥ", + "Ġvar dı", + "ãĢĢ ãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ĠãĢĢ", + "Ġë ĨĴ", + "ĠëĨ Ĵ", + "à¤Ĥ पन", + "à¤Ĥप न", + "Ġözel lik", + "éļ ľ", + "ìĸ´ ìĦľ", + "ر ÙĬÙĥ", + "رÙĬ Ùĥ", + "ÙĪ Ø¨ÛĮ", + "ÙĪØ¨ ÛĮ", + "ãĥ³ ãĥĢ", + "ãĥ³ãĥ Ģ", + "í Į¨", + "íĮ ¨", + "Ġसम à¤Ŀ", + "ï¾Ĩï¾Ĩ ï¾Ĩï¾Ĩ", + "Ġ ÙģÙĨ", + "ĠÙģ ÙĨ", + "ॠĿ", + "Ġuv eden", + "ÑĪ Ð¸Ð¼Ð¸", + "ÑĪи ми", + "ÑĪим и", + "Ġ à¹Ģล", + "Ġà¹Ģ ล", + "Ġà¹Ģภ¥", + "Ġ 문ìĿĺ", + "Ġ문 ìĿĺ", + "ĠØŃ رÙģ", + "ĠØŃر Ùģ", + "Ġ عب", + "Ġع ب", + "ãĥ¬ ãĥĵ", + "Ġ æŃ£", + "ĠæŃ £", + "ĠëĺIJ ëĬĶ", + "ĠÚ©ÙĨ ÙĨدÙĩ", + "ĠÚ©ÙĨÙĨد Ùĩ", + "Ġα ÏħÏĦÏĮ", + "ĠαÏħ ÏĦÏĮ", + "Ġ 길", + "Ġê¸ ¸", + "Ġif ade", + "Ġi fade", + "Ġifad e", + "Ġyap mak", + "ãĥķ ãĤ©", + "ãĥķãĤ ©", + "Ġm ẹ", + "Ġst rán", + "Ġstr án", + "Ġs vou", + "Ġsv ou", + "Ġsvo u", + "Ġv ždy", + "Ġtek rar", + "ิ à¸į", + "Ġ ìĵ°", + "Ġì ĵ°", + "Ġìĵ °", + "o ÄŁu", + "oÄŁ u", + "Ġ Ú©ÛĮÙĦ", + "ĠÚ© ÛĮÙĦ", + "ĠÚ©ÛĮ ÙĦ", + "и вÑģÑı", + "ив ÑģÑı", + "Ġë§IJ íĸĪëĭ¤", + "ä¸ Ŀ", + "à¤ı स", + "ĠÑģÑĤ ÑĢаÑħ", + "ĠÑģÑĤÑĢ Ð°Ñħ", + "ĠÑģÑĤÑĢа Ñħ", + "Ġsou Äįas", + "Ġê·¸ 룰", + "Ġ mÃ¼ÅŁ", + "Ġm Ã¼ÅŁ", + "Ġmü ÅŁ", + "λ οÏį", + "λο Ïį", + "γ Ïī", + "Ġt Æ°á»Łng", + "Ġ å·¥", + "Ġå· ¥", + "Ġ اسÙħ", + "Ġا سÙħ", + "Ġاس Ùħ", + "ÑĢ Ñĸм", + "ÑĢÑĸ м", + "à¹Ģ à¸Ľà¸¥", + "à¹Ģà¸Ľ ล", + "Ġ³³ Ġ³³", + "Ùĩ اÛĮÛĮ", + "ÙĩاÛĮ ÛĮ", + "å¯ º", + "Ġس رÛĮ", + "Ġسر ÛĮ", + "Ġк ваÑĢ", + "Ġкв аÑĢ", + "ĠØ´Ùħ ارÙĩ", + "ĠØ´Ùħا رÙĩ", + "Ġ صØŃ", + "Ġص ØŃ", + "о ÑģÑĤав", + "оÑģÑĤ ав", + "ॠ¨", + "Ġ à¸Ħวาม", + "Ġà¸Ħ วาม", + "í ĥģ", + "íĥ ģ", + "éĢ Ĥ", + "ب ØŃ", + "ĠdeÄŁiÅŁ ik", + "éĮ ²", + "е ди", + "ед и", + "Ġ okol", + "Ġo kol", + "Ġok ol", + "ĠÑģ оп", + "ĠÑģо п", + "Ġol mayan", + "Ġolm ayan", + "Ġolma yan", + "çŃ ij", + "Û± Û´", + "Û±Û ´", + "Ġ inclu", + "Ġinc lu", + "Ġincl u", + "Ġ ê²ĮìŀĦ", + "Ġê²Į ìŀĦ", + "ÛĮ ستÙħ", + "ÛĮست Ùħ", + "ÛĮس تÙħ", + "Ġ ç©", + "Ġç ©", + "ĠاÙĦÙĪÙĦ اÙĬات", + "il mektedir", + "ilm ektedir", + "à Į", + "Ùİ Ø¹", + "ĠaÄŁ ır", + "è¡ Ľ", + "Ġe ski", + "Ġes ki", + "Ġesk i", + "ê° Ŀ", + "본 ëĭ¤", + "人 åijĺ", + "Úĺ ÛĮ", + "Ġ ç¨", + "Ġç ¨", + "Ġм еÑģÑĤо", + "ĠмеÑģÑĤ о", + "v ů", + "à¥įर ह", + "ĠØ· رØŃ", + "Ġطر ØŃ", + "Ġا بÙĨ", + "Ġاب ÙĨ", + "Ġh iss", + "Ġhis s", + "Ġhi ss", + "о ÑĢÑıд", + "оÑĢ Ñıд", + "Ġد Ùģ", + "ÑĢ Ð¸ÑģÑĤ", + "ÑĢи ÑģÑĤ", + "ÑĢиÑģ ÑĤ", + "à¸Ĭ ม", + "д еÑĤ", + "де ÑĤ", + "à¹Ģ หม", + "à¹Ģห ม", + "ë§Ī ìĤ¬ì§Ģ", + ": .:.:", + ":. :.:", + ":.: .:", + "éħ ¸", + "Ġα ÏģÏĩ", + "ĠαÏģ Ïĩ", + "Ġn ữ", + "ĠпоÑģ ад", + "l um", + "lu m", + "ì º", + "ãģ§ãģį ãĤĭ", + "ìĸ µ", + "ĠاÙĦ Ùħد", + "ĠاÙĦÙħ د", + "н Ñĸм", + "нÑĸ м", + "ر اÙĤ", + "را ÙĤ", + "Ġ ãĥĪ", + "Ġãĥ Ī", + "Ġod povÄĽ", + "Ġodp ovÄĽ", + "Ġbir bir", + "Ġh ãy", + "Ġhã y", + "о вий", + "ов ий", + "ови й", + "æ® ĭ", + "éĥ½ æĺ¯", + "è¿ ª", + "Ġa raç", + "Ġar aç", + "Ġara ç", + "ен ÑĤÑĸв", + "енÑĤ Ñĸв", + "æĬ ±", + "d ál", + "ĠÄIJ ông", + "Ġhe sap", + "Ġhes ap", + "Ġا ÙĨساÙĨ", + "ĠاÙĨ ساÙĨ", + "ĠÙĬ ÙĪÙħ", + "ĠÙĬÙĪ Ùħ", + "ĠÙĨ ÙĪØ±", + "ĠÙĨÙĪ Ø±", + "åī ĩ", + "çĹ Ľ", + "Ġ ÙĨÙĬ", + "ĠÙĨ ÙĬ", + "алÑĮ на", + "تب اط", + "ल ब", + "Ġkom un", + "Ġko mun", + "Ġs nad", + "Ġsn ad", + "Ġsna d", + "åĽ £", + "ر ÙĬد", + "رÙĬ د", + "elop ment", + "Ġ иÑİ", + "Ġи Ñİ", + "à¥Ģ .", + "Ġkıs a", + "Ġkı sa", + "ĠdeÄŁil dir", + "ĠdeÄŁildi r", + "à¹ī าร", + "à¹īา ร", + "Ġsv ého", + "Ġsvé ho", + "Ġobl asti", + "Ġoblast i", + "ÑĪ Ð»Ð¸", + "à¹Ģà¸Ĺ à¸ŀ", + "ÑĢ ÐµÑĤÑĮ", + "ÑĢе ÑĤÑĮ", + "ÑĢеÑĤ ÑĮ", + "о во", + "ов о", + "Ġ íĤ¤", + "Ġí Ĥ¤", + "ĠíĤ ¤", + "át ky", + "ĠاÙĦ Ù쨱", + "ĠاÙĦÙģ Ø±", + "èĺ Ń", + "ÏĦ ον", + "ÏĦο ν", + "ĠÑģÑĤ оиÑĤ", + "ĠÑģÑĤо иÑĤ", + "Ùħ ØŃ", + "Ġ à¹Ħ", + "Ġà ¹Ħ", + "ĠÑĤе бе", + "ĠÑĤеб е", + "íģ ´", + "Ġm ÄĽla", + "ĠmÄĽ la", + "ĠmÄĽl a", + "æİ§ åζ", + "ĠCh á»§", + "ìĬ ¨", + "ÐIJ Т", + "ا جع", + "اج ع", + "ìĻ ķ", + "ç© ¿", + "ол ее", + "ห ลาย", + "หล าย", + "Ġd vou", + "Ġdv ou", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ุ à¸Ĥ", + "Ġb oz", + "Ġbo z", + "ิ à¸Ļà¸Ħ", + "ิà¸Ļ à¸Ħ", + "å¤ Ł", + "Ġfa aliyet", + "ĠÄį ÃŃs", + "ãģ» ãģ©", + "Ġ :/", + "Ġ: /", + "к ÑĸÑģÑĤÑĮ", + "кÑĸ ÑģÑĤÑĮ", + "Ġ ì¤Ģ", + "Ġì¤ Ģ", + "Ïģ αÏĤ", + "Ïģα ÏĤ", + "Ġод но", + "æ ¢ħ", + "æ¢ ħ", + "Ñĥб ли", + "н оз", + "но з", + "à¹Į ม", + "Ġvý rob", + "Ġvýro b", + "Ġ κÏħ", + "Ġκ Ïħ", + "ÅĻ ev", + "ÅĻe v", + "Âł B", + "ů že", + "ůž e", + "ä¼ļ 社", + "ι β", + "ÑĢ Ð¾Ð²Ð°Ð½Ð¸Ñı", + "ÑĢов аниÑı", + "ÑĢо ваниÑı", + "ÑĢован иÑı", + "ÑĢова ниÑı", + "Ġc ev", + "Ġce v", + "ìĽ Ģ", + "ál nÃŃch", + "áln ÃŃch", + "álnÃŃ ch", + "Ġ ÑĢав", + "ĠÑĢ Ð°Ð²", + "ĠÑĢаР²", + "ĠÑĢа в", + "ç´ §", + "åĢ Ł", + "Ġ ÑŁ", + "ĠÑ Ł", + "ÙĪ ÙĨÙĬ", + "ÙĪÙĨ ÙĬ", + "о зÑı", + "оз Ñı", + "Ġз ов", + "Ġk olem", + "Ġko lem", + "Ġkol em", + "Ġkole m", + "민 êµŃ", + "ç¿ Ĵ", + "Ġzam ÄĽst", + "Ġ ìłij", + "Ġìł ij", + "Ġ زÙĨ", + "Ġز ÙĨ", + "ĠØ£ Ùģ", + "Ġ 먹", + "Ġë¨ ¹", + "Ġtom to", + "Ġ 첨ë¶Ģ", + "Ġì² ¨ë¶Ģ", + "s age", + "sa ge", + "ä¸į è¿ĩ", + "е год", + "ег од", + "его д", + "ÑĢ Ð¾Ð¶", + "ÑĢо ж", + "ĠпÑĢоÑĨ ед", + "à¹Į à¸Ļ", + "san ız", + "âĢŀ Ø·", + "æ´» åĬ¨", + "о Ñĩки", + "оÑĩ ки", + "ë³´ 기", + "åŁº æľ¬", + "- Ñħ", + "ло ÑģÑı", + "ĠÙĩÛĮ ÚĨ", + "ìĹ Ķ", + "Ñĩ ного", + "Ñĩно го", + "Ġ à¤Ĺर", + "Ġà¤Ĺ र", + "Ġà¤ħ à¤Ĺ", + "ãħĭãħĭ ãħĭãħĭ", + "Ġ ãĤ¸", + "ĠãĤ ¸", + "ا سة", + "اس Ø©", + "åĬ ĩ", + "à¹ī à¸ĩ", + "Ġ 커", + "Ġì» ¤", + "n ými", + "ný mi", + "ným i", + "ãĥ¬ ãĤ¹", + "åĭ Ĵ", + "Ġобла ÑģÑĤÑĸ", + "ĠоблаÑģ ÑĤÑĸ", + "ĠоблаÑģÑĤ Ñĸ", + "ĠдÑĸÑıлÑĮ ноÑģÑĤÑĸ", + "ãĥ¬ ãĤ¤", + "Ïĩ αν", + "Ïĩα ν", + "à¹Ī าส", + "à¹Īา ส", + "ĠФ ÑĢан", + "Ùĩ ÙĦ", + "l ardır", + "lar dır", + "lardı r", + "ØŃ ات", + "ů st", + "Ġв одÑĭ", + "Ġво дÑĭ", + "Ġвод Ñĭ", + "ĠدÙĪ ÙĦت", + "ĠدÙĪÙĦ ت", + "ĠÑģпе ÑĨÑĸ", + "Ġth ất", + "à¸Ń าหาร", + "éł ĺ", + "Ġter cih", + "ĠÏĢÏģο Ïĥ", + "Ġ ÅĻÃŃzenÃŃ", + "ĠÅĻÃŃ zenÃŃ", + "è§ī å¾Ĺ", + "Ġd nes", + "Ġdn es", + "Ġdne s", + "е Ñĩно", + "еÑĩ но", + "ãĥ ĺ", + "Ġدار اÛĮ", + "ĠÅŁ art", + "ĠÅŁar t", + "ë² ¤", + "Ġ ë¶ģ", + "Ġë ¶ģ", + "Ġë¶ ģ", + "е Ñı", + "н ÑıÑĤÑĮ", + "нÑı ÑĤÑĮ", + "нÑıÑĤ ÑĮ", + "Ġk vÄĽt", + "Ġkv ÄĽt", + "Ġتغ ÛĮÛĮر", + "é¾ į", + "Ġر ÙĨÚ¯", + "ï¼Į åı¯", + "Ġp iyas", + "Ġpi yas", + "Ġuyg ulan", + "Ġuygu lan", + "Ùİ Ø©", + "ب ÙĬر", + "بÙĬ ر", + "и ваÑĤÑĮ", + "ив аÑĤÑĮ", + "ива ÑĤÑĮ", + "Ġ íĹĪ", + "ĠíĹ Ī", + "ä¸ ¶", + "è¿Ļ äºĽ", + "Ġ گر", + "ĠÚ¯ ر", + "ç½ ª", + "ä¸Ģ æł·", + "Ġ ãĥª", + "Ġãĥ ª", + "Ġв ой", + "Ġво й", + "Ġs osyal", + "Ġsos yal", + "ุ à¸Ĺà¸ĺ", + "ุà¸Ĺ à¸ĺ", + "หม à¸Ķ", + "ç» Ŀ", + "ĠاÙĦ جÙħ", + "ĠاÙĦج Ùħ", + "ĠØ« بت", + "Ġج ÙĨÚ¯", + "ĠجÙĨ Ú¯", + "л ении", + "лен ии", + "ле нии", + "в аÑı", + "ва Ñı", + "Ġв оÑĤ", + "Ġво ÑĤ", + "ä¼ ¤", + "Ġ หล", + "Ġห ล", + "ĠÙħÙĤ اÙĦÙĩ", + "мÑĸ нÑĸ", + "мÑĸн Ñĸ", + "ìĺ ¬", + "Ñĩ ий", + "Ñĩи й", + "ĠÙħ Ú©", + "à¹Ĥ à¸Ľà¸£", + "à¹Ĥà¸Ľ ร", + "k rv", + "kr v", + "Ġ ÃŃch", + "ĠÃŃ ch", + "Ïī Ïĥη", + "ек ÑĤоÑĢ", + "екÑĤ оÑĢ", + "Я к", + "Ġp ÃŃs", + "ĠÃĸ zel", + "ĠÃĸz el", + "Ġt Æ°á»Ľng", + "Ġ ÐĶо", + "ĠÐĶ Ð¾", + "δ ιο", + "δι ο", + "ู à¸Ķ", + "Ġt ük", + "رÛĮ ÙĤ", + ". ÐĴ", + "Ġ åIJĪ", + "ĠåIJ Ī", + "ä¿ Ĥ", + "Ġob dob", + "Ġist edi", + "ÑĪ Ð»Ð°", + "æľī ä¸Ģ", + "Ġвк лÑİÑĩа", + "ĠвклÑİÑĩ а", + "ĠتØŃ ÙĤÛĮÙĤ", + "Ġ ÙĪÙĥ", + "ĠÙĪ Ùĥ", + "Ġ èĪ", + "Ġè Ī", + "Æ Ĵ", + "μ εÏģ", + "με Ïģ", + "Ġ åģ", + "Ġå ģ", + "Ġ ìĹĨëĬĶ", + "ĠìĹĨ ëĬĶ", + "Âł d", + "ĠB ắc", + "à¸ģล าà¸ĩ", + "ĠÑĩ Ñĥв", + "Ġc ấu", + "ĠH á»ĵ", + "ĠHá» ĵ", + "ĠÙģ Ø§ÛĮÙĦ", + "ÏĦη γοÏģ", + "ç± į", + "Ġ بت", + "Ġب ت", + "ĠобÑĢаз ом", + "æ± ī", + "èĦ ij", + "Ġgi ản", + "Ġgiả n", + "ε Ïģγ", + "εÏģ γ", + "ĠÐľ Ñĸ", + "èϽ çĦ¶", + "Ġ Khi", + "ĠK hi", + "ĠKh i", + "Ñĩ ини", + "Ñĩи ни", + "Ñĩин и", + "Ġà¤ħ à¤Ĺर", + "Ġà¤ħà¤Ĺ र", + "íķĺ ë©°", + "ë² Ķ", + "ãģ ģ", + "в иÑħ", + "ви Ñħ", + "ĠвÑģ егда", + "Ġ ç¶", + "Ġç ¶", + "ÑģÑĤв енной", + "ÑģÑĤвен ной", + "ÑģÑĤвенно й", + "Ġyük sel", + "æ¸ ¬", + "Ġsı ras", + "Ġsır as", + "Ġsıra s", + "ĠÏĢ ÏģÏİ", + "èĢ ³", + "ا ÛĮر", + "اÛĮ ر", + "د ÙĪØ¯", + "دÙĪ Ø¯", + "ĠAl man", + "ĠAlma n", + "Ġver di", + "Ġverd i", + "ĠاÙĦ Ùħج", + "ĠاÙĦÙħ ج", + "ĠاÙĦ تع", + "ĠاÙĦت ع", + "ص Ø©", + "Ġsı ra", + "Ġsır a", + "Äį in", + "Äįi n", + "Ġп еÑĢÑĪ", + "ĠпеÑĢ ÑĪ", + "æĬ ĺ", + "ç© į", + "ĠÑĤ об", + "ĠÑĤо б", + "Ġ ï¾ī", + "Ġï¾ ī", + "ภ¬", + "æĿ Ģ", + "iy di", + "ี à¸ŀ", + "çĵ ¦", + "ĠавÑĤом об", + "ä¸Ń æĸĩ", + "à¥Ĥ द", + "ĠbÄĽ hem", + "Ġ PÅĻed", + "ĠP ÅĻed", + "ĠPÅĻ ed", + "ãģĵ ãģĨ", + "ั à¸Ī", + "Ġ ï½Į", + "Ġï½ Į", + "Ġ ÙĩاÙĬ", + "ĠÙĩ اÙĬ", + "ĠÙĩا ÙĬ", + "Ġs ạch", + "æĸ¹ éĿ¢", + "çķ °", + "ÑĥÑĢ Ð½", + "Ġvý sled", + "Ġth ần", + "ï¼Į æīĢ以", + "Ñĥ ка", + "Ñĥк а", + "íķĺ ëĭ¤", + "Ġ बर", + "Ġब र", + "Ġж Ñĸн", + "Äį nÃŃho", + "ÄįnÃŃ ho", + "Ġ ãģĮ", + "ab ı", + "v ánÃŃ", + "vá nÃŃ", + "æ´ Ĺ", + "Ġи ÑģÑĤоÑĢ", + "ĠиÑģ ÑĤоÑĢ", + "ĠиÑģÑĤ оÑĢ", + "ìĿ´ íĦ°", + "Ġе лек", + "а лаÑģÑı", + "ала ÑģÑı", + "Ġ znám", + "Ġz nám", + "Ġzn ám", + "ĠØ· رÙģ", + "Ġطر Ùģ", + "Ġs ektör", + "ê¹ Ģ", + "ÙĪ ÙĤع", + "ÙĪÙĤ ع", + "ĠÙħ Ùĥ", + "ÑĢе жд", + "ÑĢеж д", + "Ġk nih", + "Ġkn ih", + "Ġت عداد", + "Ġتع داد", + "Ġتعد اد", + "åį ł", + "ÑģÑĮ ке", + "ÑģÑĮк е", + "Ġ ç͵", + "京 éĥ½", + "Ġر اÛĮ", + "Ġرا ÛĮ", + "g ın", + "gı n", + "ĠÙĨ ظاÙħ", + "ĠÙĨظ اÙħ", + "ĠÎł ολ", + "ĠÎłÎ¿ λ", + "ä¸Ģ èά", + "Ġst ále", + "Ġstál e", + "ĠиÑģ Ñģлед", + "Ġz práv", + "Ġzp ráv", + "Ġ ÑĩиÑģÑĤ", + "ĠÑĩ иÑģÑĤ", + "ĠÑĩиÑģ ÑĤ", + "ĠÑĩи ÑģÑĤ", + "ãĥ¼ ãĥŀ", + "ãĥ¼ãĥ ŀ", + "Ðŀ Ñģ", + "ÑģÑĮ комÑĥ", + "ÑģÑĮк омÑĥ", + "ÑģÑĮко мÑĥ", + "ĠpÅĻi prav", + "ĠpÅĻip rav", + "ëĮĢ íĸī", + "Ġh alk", + "Ġha lk", + "Ġhal k", + "çĪ Ĩ", + "ãĢģ ãģĬ", + "ï¼Ł âĢĿĊĊ", + "ï¼ŁâĢĿ ĊĊ", + "éĢ ı", + "ç« ŀ", + "ни ÑĨÑĮ", + "ниÑĨ ÑĮ", + "çĽ ĺ", + "à¹Ģ à¸Ńà¸ĩ", + "à¹Ģà¸Ń à¸ĩ", + "ì Łģ", + "à¥ĩव ल", + "ä¹ĭ åIJİ", + "ãĥ« ãĥĪ", + "Ġ stru", + "Ġs tru", + "Ġst ru", + "Ġstr u", + "Ġ _", + "Ġï¼ ¿", + "Îķ ÎĽ", + "h le", + "hl e", + "ĠÙĨ ÙĪØ´", + "ĠÙĨÙĪ Ø´", + "ìĿ µ", + "ĠÙħ Ùģ", + "æĪĸ èĢħ", + "Ġö ld", + "Ġöl d", + "éĢ Ķ", + "ãĥ³ ãĥĹ", + "ãĥ³ãĥ Ĺ", + "íĺ ¼", + "Ġu ÄŁ", + "ĠÄij á", + "Ġvlast nÃŃ", + "ĠÙħج ÙĦس", + "åį Ķ", + "ÏĦ ικήÏĤ", + "ÏĦικ ήÏĤ", + "ÏĦική ÏĤ", + "Ġpo vin", + "Ġpov in", + "ů l", + "ĠاÙĦ ØŃÙĬ", + "ĠاÙĦØŃ ÙĬ", + "Ġsm lou", + "ãĥĥ ãĥģ", + "Ġ ÙĥÙĨ", + "ĠÙĥ ÙĨ", + "Ġch ấp", + "èIJ ¬", + "ج ب", + "? âĢľ", + "д ав", + "да в", + "ร วม", + "รว ม", + "Ùİ Ø¯", + "ĠاÙĦد ÙĪÙĦ", + "ĠëĦ¤ ìĿ´íĬ¸", + "Ġà¤Ĩ स", + "ظ ÙĬÙģ", + "ãĥ¼ ãĥ©", + "ãĥ¼ãĥ ©", + "ãģł ãĤįãģĨ", + "ĠÙĪØ§ØŃ د", + "ĠÙĪØ§ ØŃد", + "ر ÙĪØ³", + "رÙĪ Ø³", + "Ġzákon a", + "ĠпеÑĢ ÐµÐ±", + "ĠпеÑĢе б", + "à¥Ģ -", + "à¹Ī à¹Ħà¸Ķ", + "为 äºĨ", + "ÎĻ ÎĿ", + "ĠìĽĶ ìĦ¸", + "ส à¸Ńà¸ĩ", + "Ġ æīĭ", + "Ġæī ĭ", + "Ġ ÐĴÑģе", + "ĠÐĴ Ñģе", + "ĠÐĴÑģ е", + "à¹Ĥ ย", + "Ġkal dır", + "Ġkaldı r", + "ÏĦ ÎŃÏĤ", + "ÏĦÎŃ ÏĤ", + "Ġ ï¿£", + "Ġ íĸĪëĭ¤", + "Ġíĸ Īëĭ¤", + "ĠíĸĪ ëĭ¤", + "ãĤģ ãģŁ", + "Ġ Äįer", + "ĠÄį er", + "ĠÄįe r", + "c ela", + "ce la", + "cel a", + "üs ü", + "ê³ ³", + "ìĹIJ ëıĦ", + "ز Ø©", + "ãģª ãĤĭ", + "ÙĪ ÛĮÙĨ", + "ÙĪÛĮ ÙĨ", + "çī Ľ", + "Ġ voj", + "Ġv oj", + "Ġvo j", + "Ġ ëĬIJ", + "ĠëĬ IJ", + "Ġ ÙĥÙħ", + "ĠÙĥ Ùħ", + "æ³ ī", + "з Ñı", + "è£ Ŀ", + "ĠØ¢ ÙĦ", + "Ġ ανά", + "Ġα νά", + "Ġαν ά", + "Âł ÐĴ", + "Ġyap ıl", + "Ġyapı l", + "æı Ľ", + "ĠÑģ ÑĥÑīеÑģÑĤв", + "ĠÑģÑĥ ÑīеÑģÑĤв", + "ĠÑģÑĥÑīе ÑģÑĤв", + "Ġn á»iji", + "ÙĪ Ø¦", + "ĠëĦ¤ìĿ´íĬ¸ ìĺ¨", + "Ġpolit ik", + "Å¡ ka", + "Å¡k a", + "ebilir siniz", + "ld kf", + "Ñĥб лÑĸ", + "Ġe oq", + "Ġeo q", + "ĠÙħØŃ صÙĪÙĦ", + "krv ldkf", + "Ġeoq krvldkf", + "Ïĥε Ïīν", + "بÙĦ غ", + "Įĵ ê¸Ģ", + "ĠÑģ ÑĢок", + "ĠU y", + "ĠN ÄĽk", + "ĠNÄĽ k", + "Ġ див", + "Ġд ив", + "Ġди в", + "ãĤµ ãĤ¤", + "Ġ ìĤ¬ìĿ´", + "ĠìĤ¬ ìĿ´", + "Ġ éĹ", + "Ġé Ĺ", + "Ġб аÑĤÑĮ", + "Ġба ÑĤÑĮ", + "Ġп еÑĢÑĸ", + "ĠпеÑĢ Ñĸ", + " ĸ", + "交 éĢļ", + "ен з", + "ÙĪ Ø³Øª", + "ÙĪØ³ ت", + "ีย à¸ļ", + "Ġ à¸Īะ", + "Ġà¸Ī ะ", + "ë¡ Ģ", + "üf us", + "Ùij ÙIJ", + "ç¸ ½", + "ัà¸Ķ ส", + "ê² Ģ", + "ĠÑĤ иÑħ", + "ĠÑĤи Ñħ", + "ĠØ¢ زÙħ", + "Ġآز Ùħ", + "Ġ اض", + "Ġا ض", + "ĠØ§Ø ¶", + "ì ¡´", + "ì¡ ´", + "ÙĴ ت", + "æĪ ¸", + "ĠìŀĪ ìĿĦ", + "Ġ çĶ·", + "Ñī Ñĸ", + "о ма", + "ом а", + "ĠاÙ쨲 اÛĮØ´", + "Ġ Thông", + "ĠTh ông", + "ĠاجتÙħاع ÛĮ", + "е лÑİ", + "ел Ñİ", + "ĠÑħоÑĢоÑĪ Ð¾", + "à¸ł าษ", + "Ġ rám", + "Ġr ám", + "Ġrá m", + "å¾ ¡", + "ãĥ¼ ãĥĦ", + "ãĥ¼ãĥ Ħ", + "ĠL Ỽp", + "Ġ Ø´ÙĬ", + "ĠØ´ ÙĬ", + "Ġh iá»ĥm", + "Ġhi á»ĥm", + "θ ν", + "ο ÏħÏĥ", + "οÏħ Ïĥ", + "å¾ ©", + "Ġú zem", + "à¹ģ à¸ľ", + "å ·¨", + "å· ¨", + "à¸Ī à¸Ļ", + "Ú¯ راÙĨ", + "گر اÙĨ", + "Ġت ÛĮÙħ", + "ĠتÛĮ Ùħ", + "Ġ ilet", + "Ġi let", + "Ġil et", + "Ġile t", + "า à¸Ĥà¸Ńà¸ĩ", + "าà¸Ĥ à¸Ńà¸ĩ", + "Ġ تÙĪØ±", + "Ġت ÙĪØ±", + "ĠتÙĪ Ø±", + "Ġдо говоÑĢ", + "Ġдог овоÑĢ", + "Ġдогов оÑĢ", + "Ġt ento", + "Ġten to", + "Ġtent o", + "в Ñĥ", + "Ġз ада", + "Ġза да", + "Ġзад а", + "Ġstole tÃŃ", + "Ġstol etÃŃ", + "Âł Ġ", + "âĢĮ اÙĦ", + "Ë ĺ", + "ÅŁ iv", + "ÅŁi v", + "н ÑıÑĤи", + "нÑı ÑĤи", + "нÑıÑĤ и", + "ãĤī ãĤĮãģŁ", + "ãĤīãĤĮ ãģŁ", + "ĠS b", + "ĠاÙĦÙħ ص", + "ĠУкÑĢаÑĹ Ð½Ñĸ", + "ĠУкÑĢаÑĹн Ñĸ", + "ĠØ´ Ú©", + "iế ng", + "iến g", + "ÑĮ ÑĤе", + "è° ¢", + "ĠÙħ تÙĨ", + "ĠÙħت ÙĨ", + "Ġ ÑĢад", + "ĠÑĢ Ð°Ð´", + "ĠÑĢаР´", + "ĠÑĢа д", + "ĠÙħÙĪ Ø§Ø¯", + "ì± Ħ", + "é¡ ¶", + "Ġbo ÅŁ", + "ت ÙĪØ±", + "تÙĪ Ø±", + "ĠÄij áng", + "ĠÄijá ng", + "Ġkit ap", + "Ġki tap", + "Ġkita p", + "Ġho din", + "Ġhod in", + "Ġtarih i", + "ãĤĦ ãĤĭ", + "Ñģ ÑĤеÑĢ", + "ÑģÑĤ еÑĢ", + "ÑģÑĤе ÑĢ", + "Ġ Ñħод", + "ĠÑħ од", + "в ание", + "ва ние", + "ван ие", + "ĠоÑģ вÑĸ", + "ĠÑģиÑģÑĤем Ñĭ", + "़ न", + "Ïĩ ο", + "Ġ åı°", + "Ġåı °", + "o ÅĻ", + "ç»ı æµİ", + "Ġ ä½ľ", + "Ġthu áºŃn", + "Ľ Ī", + "Ġy alnız", + "a let", + "al et", + "ale t", + "ì¦Ŀ ê¸Ī", + "Ġза Ñī", + "Ġе кÑģп", + "Ġек Ñģп", + "âĦĸ âĦĸ", + "Ġ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠÚ¯ ÙĪØ´", + "ĠÚ¯ÙĪ Ø´", + "ãģ« åħ¥", + "Ġu dÄĽl", + "Ġud ÄĽl", + "Ġ áº", + "Ġá º", + "à¤Ĩ à¤Ī", + "âĢĮ دÙĩ", + "âĢĮد Ùĩ", + "æĤ ª", + "Ġtr ò", + "æļ Ĺ", + "λλ ην", + "λλη ν", + "ĠпÑĢи зна", + "ĠпÑĢиз на", + "Ġس ÛĮستÙħ", + "ĠسÛĮ ستÙħ", + "Ġà¤ħ त", + "è o", + "è¿ İ", + "Ġз Ñĥб", + "ĠзаÑģ об", + "Ġس Ùģ", + "ĠÙħاÙĨ ÙĨد", + "Ø® Ø´", + "v ajÃŃ", + "va jÃŃ", + "nit ÅĻ", + "æ¯ Ĵ", + "æ¤ į", + "Ġgir iÅŁ", + "ĠÄij áp", + "ĠÄijá p", + "@ n", + "ов аÑĢи", + "оваÑĢ Ð¸", + "ова ÑĢи", + "ĠØ® دا", + "Ġخد ا", + "Ġv ÄĽtÅ¡", + "ĠvÄĽt Å¡", + "ĠΣ Ïħ", + "Ùģ Ø©", + "аннÑı м", + "ĠÑĩ лен", + "æĶ¯ æĮģ", + "å¨ ľ", + "lar arası", + "lara rası", + "Ρ Îij", + "Ġz iy", + "Ġzi y", + "Ġ êµIJìľ¡", + "ĠêµIJ ìľ¡", + "Ġh á»ĵi", + "Ġhá»ĵ i", + "าà¸Ħ าร", + "าà¸Ħา ร", + "im leri", + "imler i", + "è³ ¼", + "ĠجÙĩ اÙĨ", + "ĠÑĢоз мÑĸ", + "Ñħ Ñĸв", + "γ ε", + "æ¨ ª", + "ÎĻ ÎijΣ", + "ÎĻÎij Σ", + "ç¶ Ń", + "Ġbi raz", + "Ġbir az", + "ĠÑĤак ого", + "ĠÑĤа кого", + "íĥ Ħ", + "ĠбÑĥд ÑĥÑĤ", + "ĠбÑĥ дÑĥÑĤ", + "ĠбÑĥдÑĥ ÑĤ", + "ĠÑĪ Ð²Ð¸Ð´", + "Ġ неÑģ", + "Ġн еÑģ", + "Ġне Ñģ", + "ĠÙħ عÙĦÙĪÙħات", + "ĠÙħعÙĦ ÙĪÙħات", + "à¥ĩ यर", + "à¥ĩय र", + "Ġдв ÑĥÑħ", + "å¿ħ è¦ģ", + "å§ Ĩ", + "Ġpo hled", + "Ġpoh led", + "ìĬ¤ íĦ°", + "Ġ åįģ", + "Ġåį ģ", + "ĠØ£ ب", + "веÑĢ Ð´Ð¶", + "веÑĢд ж", + "Ġà¤ľ म", + "ल त", + "åľ° åĮº", + "Ġ |[", + "Ġ| [", + "Ġв меÑģÑĤ", + "ĠÚ© اÙħ", + "Ġ ãĥIJ", + "Ġãĥ IJ", + "ãĥ¼ ãĥĸ", + "ãĥ¼ãĥ ĸ", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġ ìĥģíĴĪ", + "Ġìĥģ íĴĪ", + "à¹Ģล ย", + "Äį né", + "ĠÑģÑĢед ÑģÑĤва", + "ĠÑģÑĢедÑģÑĤв а", + "Ġ ÑĤаб", + "ĠÑĤ аб", + "ĠÑĤа б", + "Ġ Ùħار", + "ĠÙħ ار", + "ĠÙħا ر", + "Ġ hled", + "Ġh led", + "Ġhl ed", + "д аÑĤ", + "да ÑĤ", + "ÙĪ ÛĮد", + "ÙĪÛĮ د", + "Ġ ãĥ©", + "Ġãĥ ©", + "ĠØ® د", + "è¤ ĩ", + "ç§ ĺ", + "Ġ برد", + "Ġب رد", + "Ġبر د", + "ĠÏĥ αÏĤ", + "Ïİ ÏĥειÏĤ", + "æĿ ¯", + "λ Ïį", + "å® ¿", + "Ġ ëĤľ", + "ĠëĤ ľ", + "ï» Ł", + "Ġözel likle", + "Ġözellik le", + "Ġкон Ñģ", + "ĠÙħ غ", + "ع ÙĬ", + "à¹Į à¸ģ", + "Ġ ÙĬت", + "ĠÙĬ ت", + "ĠÙħ شاÙĩ", + "ĠÙħØ´ اÙĩ", + "ĠTh anh", + "ĠThan h", + "ा à¤ľà¤¨", + "à¤¾à¤ľ न", + "¥ ¤", + "Ġv lá", + "Ġvl á", + "ĠÙģ Ø¶", + "Τ ÎĻÎļ", + "Ġна Ñĥков", + "ĠнаÑĥк ов", + "е лем", + "ел ем", + "еле м", + "Ġd Ãłng", + "ĠгоÑģп одаÑĢ", + "Âł S", + "и ÑĩеÑģкиÑħ", + "иÑĩеÑģ киÑħ", + "иÑĩеÑģки Ñħ", + "ĠتÙĨ Ùĩا", + "à¤ľ न", + "Ġп ан", + "Ġпа н", + "åĨ ł", + "Ġ ëĤĺëĬĶ", + "ĠëĤĺ ëĬĶ", + "t ÃŃ", + "ä¸Ģ èµ·", + "Ġlã nh", + "Âł v", + "ov ým", + "ový m", + "ز ب", + "ĠجÙħع ÛĮت", + "Ġ æµ·", + "Ġæµ ·", + "ĠоÑģ ÑĥÑīеÑģÑĤв", + "à £i", + "ã i", + "ائ ر", + "Ġ ë³ij", + "Ġë³ ij", + "á»ĭ nh", + "Ġs á»Ńa", + "Ġsá»Ń a", + "à¥ĩà¤Ĥ ।", + "ÄĽ jÅ¡ÃŃ", + "ÄĽj Å¡ÃŃ", + "Ġд ÑĸÑĤ", + "ĠдÑĸ ÑĤ", + "Ġ æĥ", + "Ġæ ĥ", + "mÄ±ÅŁ tı", + "ر ØŃ", + "Ġì§Ģ ê¸Ī", + "å¦ »", + "âĹ ĭ", + "Ġ ì§ĢìĹŃ", + "Ġì§Ģ ìĹŃ", + "ÙĴ ÙĨ", + "Ġur Äįit", + "ĠurÄį it", + "ÙĴ Ùħ", + "z ÃŃ", + "è ķ", + "Ġ Ø´ÙĪØ±", + "ĠØ´ ÙĪØ±", + "ĠØ´ÙĪ Ø±", + "Ġ Không", + "ĠKh ông", + "ÛĮ زÛĮ", + "ÛĮز ÛĮ", + "Ġз г", + "Ġв не", + "Ġpr ávÄĽ", + "Ġprá vÄĽ", + "Ġpráv ÄĽ", + "è« ĭ", + "ا ÙĬت", + "اÙĬ ت", + "ั à¸ģร", + "ัà¸ģ ร", + "Ġolduk ça", + "ãĤģ ãĤĭ", + "ĠT ây", + "ëĿ¼ ìĿ¸", + "èĻ ķ", + "Ġs ư", + "Ġ ник", + "Ġн ик", + "Ġни к", + "Ù ł", + "اش ÛĮÙĨ", + "اشÛĮ ÙĨ", + "e lerde", + "el erde", + "eler de", + "ìĭľ ìķĦ", + "Ġ Ñĥмов", + "ĠÑĥ мов", + "ĠÑĥм ов", + "ĠçalÄ±ÅŁ an", + "Ġ ë¸Ķ", + "Ġë¸ Ķ", + "ĠÑĤак им", + "ĠÑĤа ким", + "ÑĢ Ð¸Ð½", + "ÑĢи н", + "Ġ Ø®ÙĦ", + "ĠØ® ÙĦ", + "a yd", + "ay d", + "Ġ ãĥ¡", + "Ġãĥ ¡", + "ей ÑĩаÑģ", + "Ġdo prav", + "Ġdop rav", + "ãģĵ ãģ¨ãģ¯", + "ãģĵãģ¨ ãģ¯", + "Ġ ì¶Ķì²ľ", + "Ġì¶Ķ ì²ľ", + "å» ¶", + "Ġ kı", + "Ġk ı", + "åı ¶", + "ÑĢ Ð¸Ð³", + "ÑĢи г", + "íħ ľ", + "çͳ åįļ", + "Ġ веÑĤ", + "Ġв еÑĤ", + "Ġве ÑĤ", + "ĠпомоÑī ÑĮÑİ", + "ĠاÙģ Ø±Ø§Ø¯", + "ĠاÙ쨱 اد", + "ÏĢ ÎµÎ¹", + "ÏĢε ι", + "à¹Ģ สร", + "à¹Ģส ร", + "Ġgi ám", + "Ġgiá m", + "é İ", + "h las", + "hl as", + "man ız", + "manı z", + "ан гл", + "анг л", + "Ġmu ž", + "Âł K", + "ÑĢед иÑĤ", + "ÑĢеди ÑĤ", + "设 å¤ĩ", + "ι Ïĥμ", + "ιÏĥ μ", + "Ġc ải", + "Ġcả i", + "Ġ éĢļ", + "ĠéĢ ļ", + "Ġ Ùĥار", + "ĠÙĥ ار", + "Ġпод об", + "ĠмеÑĤ ал", + "ĠÑģам е", + "л ÑĥÑĩ", + "лÑĥ Ñĩ", + "åĤ ³", + "ĠÙĪÙĩ ÙĪ", + "Ġ éĩį", + "Ġéĩ į", + "в ий", + "ви й", + "æ³ ģ", + "Ġ æĿİ", + "ĠæĿ İ", + "ĠiliÅŁ kin", + "ĠiliÅŁk in", + "Ġεί Ïĩε", + "çĬ ¯", + "ÅĻej mÄĽ", + "èŃ ĺ", + "ç¨ ±", + "μ μα", + "μμ α", + "Ġ ÙĦÛĮ", + "ĠÙĦ ÛĮ", + "Ùĩ اÙĬ", + "Ùĩا ÙĬ", + "Ġ опиÑģ", + "Ġо пиÑģ", + "Ġоп иÑģ", + "Ú¯ رد", + "گر د", + "Ġг ÑĢ", + "ĠAnimal ia", + "ĠAnim alia", + "ÐŁ о", + "Ġb óng", + "ĠдеÑĤ ей", + "Ġl âu", + "Ġ æķĻ", + "Ġæķ Ļ", + "Ġпо ÑıÑģ", + "ĠاÙĦ Ø¢", + "ั à¸Ļà¸ķ", + "ัà¸Ļ à¸ķ", + "Ġд ев", + "Ġде в", + "Ġ ÑĨей", + "ĠÑĨ ей", + "ĠÑĨе й", + "ÑĮ в", + "æĥ ł", + "m aları", + "ma ları", + "mal arı", + "malar ı", + "im ler", + "à¥Ī ।ĊĊ", + "à¥Ī। ĊĊ", + "à¥Ī।Ċ Ċ", + "Ġ ном", + "Ġн ом", + "Ġно м", + "z v", + "Ġ à¸ģร", + "Ġà¸ģ ร", + "Ġpay laÅŁ", + "Âł s", + "ि सम", + "िस म", + "ÑģÑĤв еннÑĭÑħ", + "ÑģÑĤвен нÑĭÑħ", + "st oup", + "sto up", + "о нÑĸ", + "он Ñĸ", + "s tÃŃ", + "st ÃŃ", + "ĠØŃ Ú©", + "ĠÚ¯ رÙģØª", + "ĠگرÙģ Øª", + "Ġگر ÙģØª", + "าà¸Ħ า", + "д Ñı", + "ÙĦ اث", + "ÙĦا Ø«", + "Ġzdrav ot", + "ä¸Ĭ ãģĴ", + "ãģ ¼", + "e lere", + "el ere", + "eler e", + "ele re", + "ظ Ùħ", + "ĠÑģ веÑĤ", + "ĠÑģв еÑĤ", + "о ÑĢг", + "оÑĢ Ð³", + "ç« ¥", + "ĠпеÑĢ ÐµÐ¿", + "ĠпеÑĢе п", + "Ġम द", + "а за", + "аз а", + "å¦Ĥ ä½ķ", + "ÑģÑĮ кÑĸй", + "ÑģÑĮк Ñĸй", + "ÑģÑĮкÑĸ й", + "Ġb Æ°á»Ľc", + "Ġger ekli", + "Ġgerek li", + "大 å®¶", + "Ġtr ái", + "éģ ©", + "ä¸Ń 央", + "Ġph ản", + "Ġع رض", + "ĠÙĥ تاب", + "æĭ ©", + "ÑĪ ÐµÐ³Ð¾", + "ÑĪе го", + "å¸ ®", + "ĠÙĨÛĮ از", + "è¿ ·", + "ุ à¸Ľ", + "ิ à¸Ľ", + "Ġد Ø®", + "ÏĦ ικÎŃÏĤ", + "ÏĦικ ÎŃÏĤ", + "ĠU z", + "Ġت ÙĪÙħاÙĨ", + "ĠتÙĪ ÙħاÙĨ", + "ĠتÙĪÙħ اÙĨ", + "ĠÙĪ Ø§ÙĦØ£", + "ĠÙĪØ§ÙĦ Ø£", + "ÅĻ es", + "ÅĻe s", + "Ñij м", + "Ġ å¸Ĥ", + "Ġå¸ Ĥ", + "ĠÑĤ оже", + "ĠÑĤо же", + "Ġy apan", + "Ġya pan", + "Ġyap an", + "å½¼ 女", + "ĠÙħ در", + "ĠÙħد ر", + "¶ ģ", + "Ġ æĹ¶", + "ĠæĹ ¶", + "à¹Ģ à¸ĺ", + "à¹Ģภĺ", + "Ġ ÙħاÙĦ", + "ĠÙħ اÙĦ", + "ĠÙħا ÙĦ", + "ĠB üyük", + "ĠBü yük", + "Ġ ÙĦت", + "ĠÙĦ ت", + "å° ļ", + "d eme", + "de me", + "dem e", + "ü b", + "ĠÑħ Ñĥд", + "Ġlé ka", + "çĽ Ľ", + "缴 æİ¥", + "ниÑĨÑĤ ва", + "ĠпÑĢи Ñĩин", + "ĠпÑĢиÑĩ ин", + "е ÑĢап", + "еÑĢ Ð°Ð¿", + "еÑĢа п", + "ĠÑģозд а", + "ĠÑģоз да", + "æ ¢°", + "æ¢ °", + "Ġm üz", + "Ġmü z", + "ç³» åĪĹ", + "o uz", + "ou z", + "Ġà¤ĵ र", + "ÑĢ ÑĥÑĩ", + "ÑĢÑĥ Ñĩ", + "Ġ á½", + "Ġá ½", + "μÎŃ Î½Î±", + "μÎŃν α", + "ĠпÑĢед меÑĤ", + "Ġ å²", + "Ġå ²", + "ãĥ³ ãĥģ", + "ãĥ³ãĥ ģ", + "μÎŃ Î½Î·", + "μÎŃν η", + "л Ñĥг", + "лÑĥ г", + "Âł n", + "ĠT arih", + "ĠTar ih", + "Ġ ãĢĪ", + "ĠãĢ Ī", + "Ġb ana", + "Ġban a", + "Ġba na", + "Ġ cÃŃ", + "Ġc ÃŃ", + "Ġvý kon", + "åĽł æŃ¤", + "Ġt ÅĻi", + "ĠtÅĻ i", + "า à¸ĭ", + "าภĭ", + "v ailable", + "vail able", + "Ġ istem", + "Ġis tem", + "Ġi stem", + "Ġist em", + "ãĥ¥ ãĥ¼", + "Ðķ ÐĿ", + "Ġ гаÑĢ", + "Ġг аÑĢ", + "οÏħ λ", + "ॠĽ", + "ĠÙĪ Ø¶Ø¹", + "ส ะ", + "è· Ŀ", + "ĠØŃ Ùģ", + "ิà¸Ĺย าล", + "ิà¸Ĺยา ล", + "她 çļĦ", + "н ÑĸÑĪ", + "нÑĸ ÑĪ", + "ж ение", + "же ние", + "жен ие", + "기 ìĹIJ", + "Ġ éĺ¿", + "Ġéĺ ¿", + "ĠÙħ ارس", + "ĠÙħا رس", + "ĠÙħار س", + "ĠçeÅŁit li", + "Ġ ÅŁehir", + "ĠÅŁ ehir", + "ĠÅŁeh ir", + "á tor", + "át or", + "à¹ī à¸Ĺ", + "ìĿ´ ëĬĶ", + "Ġ è²", + "Ġè ²", + "é¡ į", + "ç ĻĤ", + "çĻ Ĥ", + "Ġ ниÑĩ", + "Ġн иÑĩ", + "Ġни Ñĩ", + "Ġ ê°Ģì§Ģ", + "Ġê°Ģ ì§Ģ", + "ä¼ ¦", + "r án", + "rá n", + "o stat", + "os tat", + "ost at", + "osta t", + "Ġ ÙĦÙĥ", + "ĠÙĦ Ùĥ", + "è º", + "ĠNg Ãłnh", + "Ġस द", + "æľ Ĺ", + "çĦ¶ åIJİ", + "ãĤ¸ ãĤ§", + "л еÑĢ", + "ле ÑĢ", + "ĠÐŀ на", + "ĠÐŀн а", + "س ÙĪÙĨ", + "سÙĪ ÙĨ", + "Ïģ ον", + "Ïģο ν", + "ĠدرÛĮ اÙģØª", + "ĠدرÛĮا ÙģØª", + "à¸Ń à¸Ńà¸Ļà¹Ħลà¸Ļ", + "Ġ dál", + "Ġd ál", + "Ġdá l", + "ĠмÑĸÑģ ÑĨе", + "Ġд ней", + "Ġ اÙĦات", + "Ġا ÙĦات", + "ĠاÙĦ ات", + "Ġरह त", + "ï¼Į 对", + "è³ĩ æĸĻ", + "ä»» ä½ķ", + "é Ħ", + "t aj", + "ta j", + "β ά", + "Ġна до", + "Ġнад о", + "ĠÑģÑĤ Ñĥд", + "ĠÅŁ eh", + "ัà¸į à¸į", + "à¥ĭ ब", + "ãĥ© ãĥ¼", + "Û± Ûµ", + "Û±Û µ", + "e pt", + "ep t", + "Ġbil dir", + "Ġbild ir", + "ส à¸ĸาà¸Ļ", + "สà¸ĸ าà¸Ļ", + "е ÑĤÑĮÑģÑı", + "еÑĤÑĮ ÑģÑı", + "sk ým", + "ský m", + "Ġобла ÑģÑĤÑĮ", + "ĠоблаÑģ ÑĤÑĮ", + "ĠоблаÑģÑĤ ÑĮ", + "Ġìŀ ł", + "ĠG ör", + "ĠGö r", + "Ġd ayan", + "Ġday an", + "Ġda yan", + "ĠÛĮ اد", + "ĠÛĮا د", + "çĶŁ 产", + "íĺ ij", + "å¾ ģ", + "Ġ اجر", + "Ġا جر", + "Ġاج ر", + "Ġп ÑĢе", + "ĠпÑĢ Ðµ", + "ä¸īä¸ī ä¸īä¸ī", + "åŁİ å¸Ĥ", + "Ġ пÑĢимеÑĢ", + "ĠпÑĢ Ð¸Ð¼ÐµÑĢ", + "ĠпÑĢи меÑĢ", + "ĠпÑĢим еÑĢ", + "Äį ást", + "èģ ĺ", + "ĠÙħرب ÙĪØ·", + "æŀ ļ", + "åĪ Ģ", + "æŁ¥ çľĭ", + "Ġ모 ëijIJ", + "ìŀIJ ë£Į", + "- 、", + "Ġê°Ļ ìĿ´", + "Ġ ì¡´", + "Ġì ¡´", + "Ġì¡ ´", + "е гоÑĢ", + "ег оÑĢ", + "его ÑĢ", + "e dik", + "ed ik", + "edi k", + "и мÑĥ", + "им Ñĥ", + "ĠAr th", + "ĠArt h", + "åºĶ ç͍", + "m iÅŁti", + "miÅŁ ti", + "Ġkhá»ı e", + "Ġ Ñĸд", + "ĠÑĸ д", + "λ λη", + "λλ η", + "â h", + "м аг", + "ма г", + "éļ Ĩ", + "ĠвнÑĥ ÑĤÑĢ", + "ĠвнÑĥÑĤ ÑĢ", + "Ġ بط", + "Ġب Ø·", + "( æĹ¥", + "İ Y", + "л ик", + "ли к", + "ĠB ản", + "Ġت ÙĪØ³", + "ĠتÙĪ Ø³", + "़ त", + "a mak", + "am ak", + "ama k", + "åķı é¡Į", + "ĠÑģам оÑģÑĤ", + "ĠÑģамо ÑģÑĤ", + "ï¼¼ Ċ", + "Ġ ç¦ı", + "Ġç¦ ı", + "Ù ¡", + "Ġ ÑĦоÑĢми", + "ĠÑĦоÑĢм и", + "ĠÑĦоÑĢ Ð¼Ð¸", + "Ġ ÑĢозÑĥм", + "ĠÑĢоз Ñĥм", + "ĠÙħ طاÙĦ", + "ĠÙħØ· اÙĦ", + "ä¹Ł æĺ¯", + "ç¾İ åĽ½", + "ëĵľ 립ëĭĪëĭ¤", + "Ġl Ä©nh", + "ĠпоÑĤ омÑĥ", + "ĠпоÑĤом Ñĥ", + "Ñı бÑĢÑı", + "Ñıб ÑĢÑı", + "æ¼ «", + "Ġng oại", + "à¸Ń ำ", + "ÙĬ ÙĨا", + "ÙĬÙĨ ا", + "Ġm lad", + "Ġml ad", + "Ïĥ ÏĦά", + "ÏĥÏĦ ά", + "ا تر", + "ات ر", + "주 ìĿĺ", + "ен нÑĸ", + "о за", + "оз а", + "ÙĤ ات", + "ĠÐĴ аÑģ", + "è® Ń", + "é IJ", + "Ñĥ ÑİÑĩи", + "ÑĥÑİ Ñĩи", + "Ġ کر", + "ĠÚ© ر", + "Ġ .|", + "Ġ. |", + "Ġgen ç", + "è© ²", + "ä» ģ", + "о дÑĭ", + "од Ñĭ", + "ĠØ£ ÙĪÙĦ", + "ĠØ£ÙĪ ÙĦ", + "Ġ ìĤ¬íļĮ", + "ĠìĤ¬ íļĮ", + "Ġ à¹Ģส", + "Ġà¹Ģ ส", + "Ġà¹Ģภª", + "ĠëķĮ문 ìĹIJ", + "âĢĮ ب", + "Ġли ÑĪÑĮ", + "ĠлиÑĪ ÑĮ", + "Ġи менно", + "Ġим енно", + "m adı", + "ma dı", + "mad ı", + "Ġ éĤ", + "Ġé Ĥ", + "ĠÙĪ Ø§Ø±Ø¯", + "ĠÙĪØ§ رد", + "Ġtak ım", + "Ġ à¹Ģห", + "Ġà¹Ģ ห", + "Ġà¹Ģภ«", + "Ġ à¸Ńย", + "Ġà¸Ń ย", + "Ġkon usu", + "Ġkonu su", + "Ġkonus u", + "Ø® ÙĪ", + "ĠÑģ ид", + "ĠÑģи д", + "èµ ¤", + "о ÑıÑĤелÑĮ", + "оÑıÑĤ елÑĮ", + "ëĭ µ", + "ε Ïī", + "Ñĸ Ñħ", + "Ġय द", + "ĠÚ© ÛĮÙģ", + "ĠÚ©ÛĮ Ùģ", + "μ οÏĤ", + "μο ÏĤ", + "Ġal dı", + "Ġald ı", + "Ġ íĻį", + "ĠíĻ į", + "к Ñĥп", + "кÑĥ п", + "ĠÙĨÙħ اÛĮØ´", + "ĠÙĨÙħاÛĮ Ø´", + "ãģ ¥", + "Ġ íķ©ëĭĪëĭ¤", + "Ġíķ ©ëĭĪëĭ¤", + "Ġíķ© ëĭĪëĭ¤", + "Ġë Įĵê¸Ģ", + "б оÑĢа", + "бо ÑĢа", + "боÑĢ Ð°", + "éī Ħ", + "Ġ à¹Ģà¸Ī", + "Ġà¹Ģ à¸Ī", + "Ġà¹ĢภĪ", + "à¹ī à¸ģ", + "§ Ø·", + "ر بÙĩ", + "رب Ùĩ", + "Ġ Ñĥз", + "ĠÑĥ з", + "Ġм аÑİÑĤÑĮ", + "Ġма ÑİÑĤÑĮ", + "Ġby li", + "Ġbyl i", + "ี à¸ķ", + "Ġ ì§ĢìĽIJ", + "Ġì§Ģ ìĽIJ", + "èĩª çĦ¶", + "ù y", + "Ġç aÄŁ", + "Ġça ÄŁ", + "е дин", + "ед ин", + "еди н", + "ë ī´", + "åį ±", + "Ġпоз волÑı", + "Ġпозвол Ñı", + "ØŃ اد", + "ĠÑĩ его", + "ีย ร", + "Ġyön tem", + "Ġ ders", + "Ġd ers", + "Ġde rs", + "Ġder s", + "Ġ ÑģÑĤоÑı", + "ĠÑģÑĤ оÑı", + "ĠÑģÑĤо Ñı", + "Ġк ÑĢÑĥп", + "Ġ ð", + "Ġдом аÑĪ", + "Ġдома ÑĪ", + "е нд", + "ен д", + "ç» §", + "ĠÄij ô", + "Ġch tÄĽ", + "计 åĪĴ", + "ÎŃ Î±", + "Ġdob ÅĻe", + "ส à¸Ńà¸ļ", + "е ление", + "ел ение", + "еле ние", + "елен ие", + "ĠÄij ông", + "ĠÄijô ng", + "ãģ¾ ãĤĬ", + "Ġboy unca", + "à¥ģ à¤Ĺ", + "à¥ģठĹ", + "ĠÑĦ из", + "ãĤ³ ãĥ³", + "Ġde ney", + "Ġden ey", + "ÑĩеÑģ киÑħ", + "Ñĩе ÑģкиÑħ", + "ÑĩеÑģки Ñħ", + "λ ον", + "λο ν", + "以 åıĬ", + "ا ÙĪØª", + "اÙĪ Øª", + "Âł ³³³³", + "³³ ³³³", + "³³³³ Âł", + "³³³ ³³", + "Ġ ì¤Ħ", + "Ġì¤ Ħ", + "ि फ", + "िठ«", + "ĠÑĤ ол", + "ĠÑĤо л", + "ĠëĤ´ ê°Ģ", + "âĸ ı", + "Ġp há", + "Ġph á", + "ĠÑģп Ñĸв", + "Ġ جÙħÙĬع", + "ĠجÙħ ÙĬع", + "Ġb ezpeÄį", + "Ġbez peÄį", + "Ġ æĹł", + "ĠæĹ ł", + "Ġv Å¡e", + "ĠvÅ¡ e", + "ÑģÑĤ вÑĥ", + "ÑģÑĤв Ñĥ", + "d ust", + "du st", + "o Å¡", + "Ġت ارÙĬØ®", + "ا ØŃØ©", + "اØŃ Ø©", + "ĠÙħشار ÙĥØ©", + "Ġ ακ", + "Ġα κ", + "ั à¸Ļà¸Ļ", + "ัà¸Ļ à¸Ļ", + "éģ Ĭ", + "Ġ ÑģоÑĤ", + "ĠÑģ оÑĤ", + "ĠÑģо ÑĤ", + "Ġ каз", + "Ġк аз", + "Ġка з", + "ĠÑĤ еÑĩение", + "ĠÑĤеÑĩ ение", + "ê¸ ´", + "acak tır", + "ê±° ëĤĺ", + "ี ยม", + "ีย ม", + "ĠÑģ ÑĥÑħ", + "ĠÑģÑĥ Ñħ", + "ĠëĦĪ ë¬´", + "ãģı ãĤĭ", + "ĠкоÑĤоÑĢ Ð¾Ð¹", + "ا ÙĤØ©", + "اÙĤ Ø©", + "y ıl", + "yı l", + "ãĤ» ãĥĥãĥĪ", + "ĠÑį лем", + "æģ IJ", + "ÙĨ اء", + "ÙĨا Ø¡", + "åħ ©", + "Ġte Äı", + "ä¸ ¥", + "Ġì§Ī 문", + "Ġ 为", + "Ġä¸ º", + "ìĭľ íĹĺ", + "Ġп ÑĢок", + "ĠпÑĢ Ð¾Ðº", + "ĠпÑĢо к", + "u jeme", + "uj eme", + "uje me", + "ü cü", + "üc ü", + "ĠاÙĦÙħ غ", + "ĠØŃ ساب", + "ĠØŃس اب", + "ãģĹ ãģ¦ãģĦ", + "ãģĹãģ¦ ãģĦ", + "к ова", + "ко ва", + "ков а", + "ĠÄij Ãło", + "Ġп ÑĢиз", + "ĠпÑĢ Ð¸Ð·", + "ĠпÑĢи з", + "ĠÙĪ ÙħÙĨ", + "ĠÙĪÙħ ÙĨ", + "Ġ оÑĢ", + "Ġо ÑĢ", + "à¸ģ à¸ķ", + "а ÑĦ", + "Ġ à¸ŀร", + "Ġà¸ŀ ร", + "ÑĨи ей", + "æ ª", + "Ġ působ", + "Ġp ůsob", + "Ġpů sob", + "åŃ© åŃIJ", + "Ġb ánh", + "Ġbán h", + "ĠÑĦоÑĢм Ñĥ", + "ĠÑĦоÑĢ Ð¼Ñĥ", + "Ġ á»ķ", + "Ġá» ķ", + "Ġмен ее", + "Ġмене е", + "à¹ī าห", + "à¹īา ห", + "ни ÑĨа", + "ниÑĨ а", + "ี Ċ", + "Ġв олоÑģ", + "Ġвол оÑģ", + "Ġار ائÙĩ", + "第 ä¸ī", + "ëIJĺ ìĹĪ", + "Ġkıs m", + "Ġkı sm", + "ãĥ¼ ãĥĬ", + "ãĥ¼ãĥ Ĭ", + "ler imiz", + "ÙĨ ÙĬÙĨ", + "ÙĨÙĬ ÙĨ", + "Ġ Ngưá»Ŀi", + "ĠNg ưá»Ŀi", + "ĠоÑĤ дел", + "ĠоÑĤд ел", + "çļĦ æĹ¶åĢĻ", + "о нов", + "он ов", + "Äį an", + "i zm", + "iz m", + "ĠÑģоб ой", + "à¹ĩ à¸ķ", + "Ġ ÑģлÑĸд", + "ĠÑģ лÑĸд", + "ĠÑģл Ñĸд", + "Ġ à¤ľà¤¹", + "Ġà¤ľ ह", + "ï¼Į æĪij们", + "ï¼ĮæĪij 们", + "ãĢĤ ãģĿãģ®", + "ÏĢ ÏīÏĤ", + "çĨ Ł", + "ภ¯", + "ëĦ IJ", + "æľ ĭ", + "Ġë¹Ħ ë°Ģ", + "ëį ķ", + "Ġm Ãłn", + "ĠmÃł n", + "ìĿ´ ê³ł", + "ëŀľ ëĵľ", + "éĤ Ħ", + "Ä±ÅŁ ık", + "Ä±ÅŁÄ± k", + "Ġ 个", + "Ġä¸ ª", + "Ġn ád", + "Ġná d", + "б ÑĢа", + "æĮĩ å®ļ", + "lar ıyla", + "ları yla", + "ĠÐŀ ни", + "ĠÐŀн и", + "Ġ hra", + "Ġh ra", + "Ġhr a", + "ĠÑĢе ÑĨеп", + "ĠÐłÐ¾Ñģ Ñģий", + "å½± åĵį", + "Ġ Když", + "ĠK dyž", + "ĠÃ¶ÄŁ renc", + "ĠÃ¶ÄŁren c", + "åī µ", + "Ġ jist", + "Ġj ist", + "Ġji st", + "èĪ Ī", + "è§ ¦", + "åıij çݰ", + "ม าย", + "มา ย", + "er ken", + "erk en", + "Ġзд еÑģÑĮ", + "ĠÙħس ئ", + "@n ate", + "ĠëĤ´ ìļ©", + "Ġnab ÃŃd", + "ĠnabÃŃ d", + "Û Ģ", + "Ġмо менÑĤ", + "Ġмом енÑĤ", + "ãģł ãģĮ", + "ί δα", + "ίδ α", + "T ak", + "Ta k", + "Ġ ë³´ê³ł", + "Ġë³´ ê³ł", + ": ::::::::", + ":: :::::::", + ":::: :::::", + ":::::: :::", + ":::::::: :", + "::: ::::::", + "::::: ::::", + "::::::: ::", + "ÄŁ men", + "Ġпо меÑī", + "Ġпом еÑī", + "ãģ«ãģ¤ ãģĦãģ¦", + "ĠÙģ ÙĪÙĤ", + "ĠÙģÙĪ ÙĤ", + "Ġع ضÙĪ", + "ĠÙħ ÛĮاÙĨ", + "ĠÙħÛĮ اÙĨ", + "Ġm üc", + "Ġmü c", + "ĠпÑĢо Ñıв", + "ÑĩеÑģ ки", + "Ñĩе Ñģки", + "ãģł ãģĭãĤī", + "éĤ ¦", + "Ġ ë¶ĦìĦĿ", + "Ġë¶Ħ ìĦĿ", + "éŁ ©", + "į ¨", + "ĠD aha", + "ĠDa ha", + "ĠDah a", + "Ġ κÏĮ", + "Ġκ ÏĮ", + "Ġна Ñĩина", + "ĠнаÑĩ ина", + "ĠÐŁ оÑĤ", + "ĠÐŁÐ¾ ÑĤ", + "Ïĥκε Ïħ", + "Ïĥκ εÏħ", + "Ġ ÑĢан", + "ĠÑĢ Ð°Ð½", + "ĠÑĢаР½", + "ĠÑĢа н", + "ÙĪ ÙĬس", + "ÙĪÙĬ س", + ": :::::::::", + ":: ::::::::", + ":::: ::::::", + ":::::: ::::", + ":::::::: ::", + "::: :::::::", + "::::: :::::", + "::::::: :::", + "::::::::: :", + "Û±Û¹ Û¹", + "Ġard ından", + "à¹Ĥ à¸Ķ", + "ا راÙĨ", + "ار اÙĨ", + "ارا ÙĨ", + "د اد", + "دا د", + "Ġqu ý", + "ĠØ£Ùĥ ثر", + "âĹ Ĩ", + "ĠØ£ خرÙī", + "Ġأخ رÙī", + "Ġë§Ī ìĿĮ", + "ë¦ ´", + "Ġ عÙĦÙĪÙħ", + "ĠعÙĦ ÙĪÙħ", + "Ġe ÄŁ", + "воÑĢ Ñİ", + "во ÑĢÑİ", + "Ġ ãĥĹ", + "Ġãĥ Ĺ", + "Ñĥ ÑĩаÑģ", + "ÑĥÑĩ аÑģ", + "ÑĥÑĩа Ñģ", + "Ġب Ø£", + "ÏĨ ο", + "ни ками", + "ник ами", + "ника ми", + "никам и", + "à¹ĥ à¸ķ", + "Äįet nÄĽ", + "à¸ļ าà¸ĩ", + "çī Ļ", + "ãĥª ãĤ«", + "í Ĵ", + "åĩº çīĪ", + "γ ι", + "ãĢĤ ãģĿãĤĮ", + "Ġy ani", + "Ġya ni", + "Ġyan i", + "l ech", + "le ch", + "lec h", + "ĠLu áºŃt", + "çļĦ ãģª", + "Ġneden iyle", + "Ġnedeni yle", + "d ej", + "de j", + "ĠÑģов еÑĢÑĪ", + "Ġph á»ķ", + "ıs ından", + "ısında n", + "Ġch ắc", + "d eÅŁ", + "de ÅŁ", + "Ġком ан", + "Ġко ман", + "æĽ ¿", + "Ġp lán", + "Ġpl án", + "Ġplá n", + "Ġd ữ", + "ĠêµŃ ê°Ģ", + "Ġta kip", + "Ġtak ip", + "Ġth á»§y", + "Ġthá»§ y", + "Ñģ лÑĸд", + "Ñģл Ñĸд", + "âī §", + "ĠI IC", + "ĠII C", + "θ Ïħ", + "á vat", + "áv at", + "Ġ Ñģок", + "ĠÑģ ок", + "ĠÑģо к", + "Ġб агаÑĤо", + "Ġбаг аÑĤо", + "ĠбагаÑĤ о", + ";:;: ;:;:", + "Ïģ ιοÏĤ", + "Ïģι οÏĤ", + "Ïģιο ÏĤ", + "il miÅŁtir", + "ilm iÅŁtir", + "ilmiÅŁ tir", + "Ġ znam", + "Ġz nam", + "Ġzn am", + "Ġ Τα", + "ĠΤ α", + "a maz", + "am az", + "ama z", + "à¹ģ à¸ŀ", + "ãĥģ ãĥ£", + "Ġkullan ı", + "æĶ¾ éĢģ", + "д н", + "ĠÙĪ Ø§Ø¨", + "ĠÙĪØ§ ب", + "Ġtr ắng", + "Ñģ Ñıг", + "ÑģÑı г", + "Ġار تباط", + "Ġв Ñħод", + "å·ŀ å¸Ĥ", + "Ġ सत", + "Ġस त", + "Ñĩ аеÑĤÑģÑı", + "Ñĩа еÑĤÑģÑı", + "ÑĩаеÑĤ ÑģÑı", + "íĮĮ íĬ¸", + "Ġ Những", + "ĠNh ững", + "ä¸į åı¯", + "å± Ĭ", + "Ġ ãĤŃ", + "ĠãĤ Ń", + "ار ÙĩاÛĮ", + "ارÙĩ اÛĮ", + "Ġar ÅŁiv", + "Ġ اÙĦÙī", + "Ġا ÙĦÙī", + "ĠاÙĦ Ùī", + "ाय à¤ķ", + "ãģĹ ãĤĩãģĨ", + "ãģĹãĤĩ ãģĨ", + "Ġ ulus", + "Ġu lus", + "Ġul us", + "al axy", + "ala xy", + "기 ê°Ģ", + "ãİ¡ (", + "μά ÏĦÏīν", + "è n", + "ù i", + "Ġна ÑģÑĤоÑı", + "ĠнаÑģÑĤ оÑı", + "ĠС в", + "ĠоÑģ оби", + "ĠоÑģоб и", + "к ово", + "ко во", + "ков о", + "ĠÑĢеб енка", + "ĠÑĢебен ка", + "ĠÑĤ Ñıж", + "ĠÑĤÑı ж", + "Ġxu á»ijng", + "Ġ ê¶Į", + "Ġê ¶Į", + "о год", + "ог од", + "ого д", + "Ġ ấy", + "è² ł", + "ว à¸Ļ", + "Ġ stanov", + "Ġsta nov", + "Ġstan ov", + "Ġk rál", + "Ġkr ál", + "Ġà¤ĩ सल", + "Ġà¤ĩस ल", + "e be", + "eb e", + "å® ¾", + "ĠдоÑģÑĤаÑĤ оÑĩно", + "II IK", + "III K", + "ÏĢ Î¬", + "Ġbir kaç", + "ĠاÙĦ ÙħÙĤ", + "ĠاÙĦÙħ ÙĤ", + "ãĥ ¶", + "ĠBaÅŁ kanı", + "ĠBaÅŁkan ı", + "Ġ첨ë¶Ģ íĮĮìĿ¼", + "Ġya rar", + "Ġyar ar", + "äº ¡", + "Ġ ÏĢÏĮ", + "ĠÏĢ ÏĮ", + "Âł Ñģ", + "δ ή", + "e lerini", + "eler ini", + "eleri ni", + "elerin i", + "Ġs uç", + "Ġsu ç", + "Ġд ома", + "Ġдо ма", + "Ġдом а", + "Ġна ÑĢÑĥÑĪ", + "ĠнаÑĢ ÑĥÑĪ", + "Ġ ί", + "ĠÎ ¯", + "Ġê·¸ ìĿĺ", + "ç͵ å½±", + "ا بÙĩ", + "اب Ùĩ", + "к омÑĥ", + "ко мÑĥ", + "ком Ñĥ", + "Ġत ब", + "à¥Ī à¤ł", + "Ġ모 ì§ij", + "Ġ æ±Ł", + "Ġæ± Ł", + "Ġê²ĥ ìĿĢ", + "ον ÏĦαι", + "ĠاÙĦ رÙĬاض", + "è¨ ±", + "Ġhal inde", + "Ġاش ارÙĩ", + "Ġ кÑĢÑĭ", + "Ġк ÑĢÑĭ", + "л ений", + "лен ий", + "ле ний", + "lu ÄŁ", + "Ġdo bu", + "Ġdob u", + "s ik", + "si k", + "à¥ģ à¤Ł", + "à¥ģठŁ", + "Ġ кÑĸн", + "Ġк Ñĸн", + "ãģ¨ ãģį", + "à¥Ĥ स", + "æħ ¢", + "ĠdÄ±ÅŁ ında", + "ĠdÄ±ÅŁÄ± nda", + "ç· ı", + "Ġ bÃŃ", + "Ġb ÃŃ", + "ĠCL IIIK", + "ĠIIC III", + "Ġh erk", + "Ġhe rk", + "Ġher k", + "ãĤı ãģĽ", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Âł ³³³³³", + "³³ ³³³³", + "³³³³ ³³", + "³³³ ³³³", + "³³³³³ Âł", + "اÙĦ د", + "Ġdav ran", + "Äį er", + "Äįe r", + "Ġ ØŁ", + "ĠØ Ł", + "ãģĺãĤĥ ãģªãģĦ", + "Ġd air", + "Ġda ir", + "Ġdai r", + "Ġî ¥¤", + "ั à¸ĩส", + "ัà¸ĩ ส", + "Ġ ëĭ´", + "Ġëĭ ´", + "å¾ ŀ", + "ĠÑįÑĤ иÑħ", + "ĠÑįÑĤи Ñħ", + "è¯ º", + "á» ·", + "е ÑĢиÑģÑĤи", + "еÑĢи ÑģÑĤи", + "ов ÑĭÑħ", + "Ġ ãĥĩ", + "Ġãĥ ĩ", + "ض ÙĬ", + "Ġà¤ī à¤ł", + "Ġnap ÅĻÃŃklad", + "è ´Ŀ", + "è´ Ŀ", + "Ġ Å¡k", + "ĠÅ¡ k", + "ĠبÙĪØ¯ ÙĨد", + "ĠبÙĪØ¯ÙĨ د", + "vů li", + "éģ ĩ", + "Ġз най", + "Ġзна й", + "Ġзн ай", + "ĠT ham", + "ĠTh am", + "r ani", + "ra ni", + "ran i", + "ا ØŃت", + "اØŃ ت", + "Ø´ Ùĩ", + "мÑĸнÑĸ ÑģÑĤÑĢа", + "๠ĭ", + "ĠÎij να", + "ĠÎijν α", + "à¥ĭ à¤ļ", + "ç»Ħ ç»ĩ", + "ÑģÑĤ иÑĤ", + "ÑģÑĤи ÑĤ", + "im li", + "åIJį çĦ¡ãģĹãģķãĤĵ", + "åIJįçĦ¡ãģĹ ãģķãĤĵ", + "Ùij Ø©", + "θ μ", + "о лоÑĤ", + "ол оÑĤ", + "оло ÑĤ", + "ย à¸ĩ", + "ãĤī ãĤĮãĤĭ", + "ãĤīãĤĮ ãĤĭ", + "Ġ лиÑĩ", + "Ġл иÑĩ", + "Ġли Ñĩ", + "ов Ñĭе", + "éĢ ĥ", + "Ġ 广", + "Ġå¹ ¿", + "ìĬ ¬", + "Ùħ ÛĮÙĨ", + "ÙħÛĮ ÙĨ", + "ĠìłĦ ì²´", + "ĠÎŃ Ïĩ", + "Ġ ì±ħ", + "Ġì± ħ", + "Ġ hlas", + "Ġh las", + "Ġhl as", + "е кÑĤив", + "ек ÑĤив", + "екÑĤ ив", + "екÑĤи в", + "ĠÏĢ Î»Î·", + "lu ÄŁu", + "luÄŁ u", + "好 çļĦ", + "ĠÚĨ ÙĪÙĨ", + "ĠB eled", + "ĠBe led", + "ĠBel ed", + "Ġen gel", + "Ġeng el", + "нÑı Ñı", + "ĠyaÅŁ an", + "Ñĩ ниÑħ", + "ار ÙĬØ©", + "ارÙĬ Ø©", + "म त", + "ãĥĭãĥĭ ãĥĭãĥĭ", + "åĭ ¢", + "Ġ åĨħ", + "ĠåĨ ħ", + "Ġíı¬ íķ¨", + "Ġоб Ñģ", + "Ġth ấp", + "Ġd ây", + "ãĥĸ ãĥ©", + "а ÑĤÑĭ", + "аÑĤ Ñĭ", + "ĠÑģво ей", + "ĠÑģвое й", + "ãĤī ãģªãģĦ", + "åıij çĶŁ", + "e rece", + "er ece", + "ere ce", + "Ġod bor", + "Ġв неÑģ", + "Ġвне Ñģ", + "ĠÄIJ ảng", + "ĠëıĮ ìķĦ", + "ÄĽ li", + "ÄĽl i", + "ı sında", + "ıs ında", + "ısı nda", + "Ġबद ल", + "v nÃŃ", + "vn ÃŃ", + "ãģ® ãģ«", + "Ġпо ÑĤом", + "ĠпоÑĤ ом", + "im de", + "imd e", + "a lama", + "al ama", + "ala ma", + "alam a", + "âĢ ª", + "Ġstej nÄĽ", + "е ÑĢе", + "еÑĢ Ðµ", + "éĴ ¢", + "æľº æŀĦ", + "Ġ è³", + "Ġè ³", + "åĶ ±", + "Ġ ëħ¸ì¶ľ", + "Ġëħ¸ ì¶ľ", + "Ġли бо", + "âĢ Ĭ", + "Ġc ez", + "Ġce z", + "ro mÄĽ", + "rom ÄĽ", + "ί Ïīν", + "ÏĨ ή", + "Ġ íĻ©", + "ĠíĻ ©", + "Ġdlou h", + "éª ¨", + "åħ¬ éĩĮ", + "ä¼ ¸", + "Ġ ãĥij", + "Ġãĥ ij", + "ä» Ļ", + "Ġol madı", + "Ġolm adı", + "Ġolma dı", + "е лиÑĩ", + "ел иÑĩ", + "ели Ñĩ", + "ожд ениÑı", + "Ġsöy ledi", + "Ġsöyl edi", + "á tek", + "át ek", + "áte k", + "ìĥ µ", + "ย วà¸ģ", + "ยว à¸ģ", + "Ġ 鼻", + "ĠéĽ »", + "Ġп ев", + "ĠдÑĢÑĥг ие", + "át ku", + "Ġع ÙĪ", + "ov ána", + "ová na", + "ován a", + "ض ر", + "Ġëģ Ŀ", + "ĠíĨµ íķ´", + "Î ĸ", + "Ġv ur", + "Ġvu r", + "åĨ ²", + "Ġп ÑĢек", + "ĠпÑĢ ÐµÐº", + "ĠпÑĢе к", + "Ġप à¤ķ", + "Ġ à¹Ģà¸Ĺ", + "Ġà¹Ģ à¸Ĺ", + "Ġà¹ĢภĹ", + "ãģ¨ ãģĭ", + "ع ÙĨ", + "å® ĩ", + "ÏĦ ζ", + "Ġn ằm", + "ĠÑģ воб", + "ĠÑģв об", + "ĠÑģво б", + "Ġδ Ïį", + "çĸ Ĺ", + "- й", + "é¦Ļ 港", + "ت ا", + "Ïĥι μο", + "íķ Ħ", + "Ġ 详æĥħ", + "Ġè¯ ¦æĥħ", + "ä¸ ¡", + "Ùİ Ø§ÙĦ", + "ÙİØ§ ÙĦ", + "ĠTr ưá»Ŀng", + "e ného", + "en ého", + "ené ho", + "ĠÑĢекомен дÑĥ", + "ÛĮ رÙĩ", + "ÛĮر Ùĩ", + "า à¸ĸ", + "าภĸ", + "ĠÚ© اÙħÙĦ", + "ĠکاÙħ ÙĦ", + "ب Ø·", + "ز ÛĮÙĨÙĩ", + "زÛĮ ÙĨÙĩ", + "Ġдолж на", + "Ġë§İ ìĿĢ", + "âĹıâĹıâĹıâĹı âĹıâĹıâĹıâĹı", + "lep Å¡ÃŃ", + "ал ог", + "ало г", + "ãĤª ãĥ³", + "Ġ ë³Ħ", + "Ġë³ Ħ", + "ı rı", + "ır ı", + "ĠجاÙħ عÙĩ", + "ĠجاÙħع Ùĩ", + "æĽ ľ", + "o jÃŃ", + "oj ÃŃ", + "ĠÑĪ Ð»ÑıÑħ", + "Ġhız lı", + "Ġ خصÙĪØµ", + "Ġخص ÙĪØµ", + "ÐIJ ÑĢ", + "å ľĺ", + "åľ ĺ", + "Ġжив оÑĤ", + "é ±", + "Ġng ữ", + "Ġv òng", + "èİ «", + "Ġза Ñħод", + "ĠзаÑħ од", + "ìĻ Ħ", + "ĠÑģлед ÑĥÑİÑī", + "éĹ »", + "Ñij ÑĢ", + "Ġch vÃŃ", + "èĥ ľ", + "ãģª ãģĹ", + "Ġtek noloj", + "Ġtekn oloj", + "ej ména", + "Ġ ìłĪ", + "Ġìł Ī", + "ì³ IJ", + "æĻ® éĢļ", + "Ġvý ro", + "Ġay rı", + "Ġayr ı", + "Ġп ÑĢев", + "ĠпÑĢ ÐµÐ²", + "ĠпÑĢе в", + "Ġgó p", + "à¹Ĥ à¸ģ", + "à¸Ĺำ à¹ĥห", + "åı İ", + "åĺ ī", + "Ġte lev", + "Ġtele v", + "Ġtel ev", + "ãģ¨ ãģĵãĤį", + "ëı Į", + "ph yl", + "phy l", + "ร าะ", + "Ġ çĪ", + "Ġç Ī", + "ÑģÑĤ иÑĤÑĥ", + "ÑģÑĤи ÑĤÑĥ", + "ÑģÑĤиÑĤ Ñĥ", + "ï¼Į è¿ĺ", + "ĠÎij γ", + "Äį ku", + "æı ´", + "ाय त", + "æı ı", + "ãĤĤ ãģĹ", + "ĠпеÑĢ ÐµÑģ", + "ĠпеÑĢе Ñģ", + "Ġìĺģ íĻĶ", + "id la", + "idl a", + "åİ ħ", + "ï¼ı :", + "ت رÛĮ", + "تر ÛĮ", + "à¸Ľ à¸ı", + "ĠнаÑģ еленнÑı", + "Ġam aç", + "Ġama ç", + "Ġk do", + "Ġkd o", + "Ġиз веÑģÑĤ", + "ÑĪ Ð¸ÑĢ", + "ÑĪи ÑĢ", + "ì£ ł", + "Å¡ it", + "Å¡i t", + "Ġt á»ijc", + "Ġtá»ij c", + "ìŀIJ ìĿĺ", + "Ñĩ аÑĤ", + "Ñĩа ÑĤ", + "åı ĥ", + "éĽ ¶", + "å° º", + "Ġ indir", + "Ġin dir", + "Ġind ir", + "Ġна ÑĨÑĸоналÑĮ", + "Ġx anh", + "Ġxa nh", + "ÛĮ دÛĮ", + "ÛĮد ÛĮ", + "Ġин ÑĤеÑĢеÑģ", + "ĠинÑĤеÑĢ ÐµÑģ", + "ĠØ¢ سÛĮ", + "Ġآس ÛĮ", + "éĤ£ 个", + "Ġb ilm", + "Ġbi lm", + "Ġbil m", + "а не", + "ан е", + "ĠtÄĽch to", + "Ñĩ ик", + "Ñĩи к", + "Ġдо Ñħод", + "èĤ¡ 份", + "åħ³ ç³»", + "ãģ«ãģª ãģ£ãģŁ", + "ĠпÑĢед пÑĢи", + "Ġgeç en", + "Ġب ÙĤ", + "Ġvý znam", + "Ġ à¹Ģà¸Ħร", + "Ġà¹Ģ à¸Ħร", + "Ġà¹Ģà¸Ħ ร", + "ĠÑħ ÑĤо", + "Ø´ ÙĬ", + "åıĤ åĬł", + "ÑģÑĤв енного", + "ÑģÑĤвен ного", + "ÑģÑĤвенно го", + "ÑĤ ÑĢон", + "ÑĤÑĢ Ð¾Ð½", + "ÑĤÑĢо н", + "ÂĢÂĢ ÂĢÂĢ", + "æ¢ Ŀ", + "б ав", + "ба в", + "Û± Û¶", + "Û±Û ¶", + "é¡ º", + "Ġj az", + "Ġja z", + "ĠاÙĦ ÙħÙĦ", + "ĠاÙĦÙħ ÙĦ", + "Ġا ثر", + "Ġاث ر", + "ĠпÑĢи вод", + "ĠпÑĢив од", + "а нÑĥ", + "ан Ñĥ", + "à¥ģ à¤Ń", + "à¥ģठŃ", + "æĹ §", + "ÑĮ е", + "ส ล", + "л ÑıÑİÑĤ", + "лÑı ÑİÑĤ", + "ว à¸Ķ", + "ư Ỽi", + "ưỠĽi", + "Æ°á»Ľ i", + "ÙĬ ÙħØ©", + "ÙĬÙħ Ø©", + "ãĤ¯ ãĥŃ", + "л ий", + "ли й", + "γ Ïģά", + "Ġper forman", + "Ġperform an", + "Ġperf orman", + "Ġperfor man", + "è¯ ī", + "ä½ł çļĦ", + "ìħ Ķ", + "н ениÑı", + "не ниÑı", + "нен иÑı", + "á»Ń i", + "ÙĪ Ø²ÛĮ", + "ÙĪØ² ÛĮ", + "éŁ ¿", + "à¥Ī द", + "Ġëª ¸", + "Ġe ser", + "Ġes er", + "Ġese r", + "ĠÙģØ¹Ø§ÙĦ ÛĮت", + "нÑĸ веÑĢ", + "нÑĸв еÑĢ", + "κ Ïģα", + "è¨ ¼", + "Ġn emoc", + "Ġnem oc", + "Ġyardım cı", + "Ġ çī¹", + "Ġçī ¹", + "Ġ коп", + "Ġк оп", + "Ġко п", + "ĠÐľ ож", + "़ à¤ķ", + "Ġ ëľ", + "Ġë ľ", + "ĠÑĢе ак", + "Ġp ozor", + "Ġpoz or", + "Âł ÐIJ", + "Ġ ÙĬÙĥ", + "ĠÙĬ Ùĥ", + "ĠÑģ ад", + "Ġ åħ«", + "Ġåħ «", + "Ġп олÑĮз", + "ĠполÑĮ з", + "Ġra ÄŁmen", + "ter nÃŃ", + "tern ÃŃ", + "s iyon", + "si yon", + "Ñģ ÑıÑĩ", + "ÑģÑı Ñĩ", + "ov aný", + "ova ný", + "ovan ý", + "ĠëĮĢíķľ ë¯¼êµŃ", + "ĠвÑĸд б", + "ĠÐIJ нд", + "ĠÐIJн д", + "st va", + "éĮ Ħ", + "Ġ ëij", + "Ġë ij", + "ิ à¸Ħ", + "j ÃŃt", + "jÃŃ t", + "Ġkullan ıcı", + "Ġkullanı cı", + "Ġ æŁ¥çľĭ", + "ĠæŁ¥ çľĭ", + "Ùģ ÙĦ", + "Ġ ЯкÑīо", + "ĠЯк Ñīо", + "çľĭ åΰ", + "ÑĢ ÐµÑħ", + "ÑĢе Ñħ", + "ĠاÙĦع ربÙĬØ©", + "ĠاÙĦعرب ÙĬØ©", + "ĠاÙĦعربÙĬ Ø©", + "ë¡ľê·¸ ëŀ¨", + "Ġब à¤ľ", + "Ġп ÑĢип", + "ĠпÑĢ Ð¸Ð¿", + "ĠпÑĢи п", + "Ġs chop", + "Ġsc hop", + "Ġsch op", + "Ġscho p", + "Ġب اÙĦا", + "Ġبا ÙĦا", + "ĠباÙĦ ا", + "å® ħ", + "Ġا ÙĦÙħÙĩ", + "ĠاÙĦ ÙħÙĩ", + "ĠاÙĦÙħ Ùĩ", + "α να", + "αν α", + "à¥ĭ व", + "åģ ´", + "å¼Ģ åıij", + "Ùħ اÙĦ", + "Ùħا ÙĦ", + "Ġ धर", + "Ġध र", + "Ġda hil", + "Ġdah il", + "Ġdahi l", + "ãĢģ ãģĵãģ®", + "ัà¸Ī à¸Ī", + "Ñģп ÑĸлÑĮ", + "Ġà¤ķ प", + "Ġв еÑĩ", + "Ġве Ñĩ", + "Ġвид а", + "Ġви да", + "ĠÙħ عÙĨ", + "ĠÙħع ÙĨ", + "ĠоÑĤ ли", + "i á»ħ", + "iá» ħ", + "л иÑĪ", + "ли ÑĪ", + "Ġ ÐŁÐ¾Ñģле", + "ĠÐŁÐ¾Ñģ ле", + "ãģĵ ãģĵ", + "Ġk ültür", + "Ġ جر", + "Ġج ر", + "Ġ æ¼", + "Ġæ ¼", + "èĩ º", + "Ġmev cut", + "Ù¾ ÛĮ", + "ĠاÙĦ سÙĦاÙħ", + "ĠاÙĦس ÙĦاÙħ", + "иÑĤ елей", + "иÑĤе лей", + "Ġ ÑĢоÑģÑĤ", + "ĠÑĢ Ð¾ÑģÑĤ", + "ĠÑĢоÑģ ÑĤ", + "Ġed il", + "Ġedi l", + "Ġ å·²", + "Ġå· ²", + "ç²¾ åĵģ", + "ä» ħ", + "âĢĻ ye", + "âĢĻy e", + "à¥Īà¤Ĥ .", + "Ġ åĨĨ", + "ĠåĨ Ĩ", + "ëĪ Ħ", + "Ġ ìĻķ", + "ĠìĻ ķ", + "æĺ Ń", + "ĠÎļ ο", + "m eden", + "med en", + "me den", + "Ġo lab", + "Ġol ab", + "Ġola b", + "ĠÚ© ÙĪØ¯", + "ĠÚ©ÙĪ Ø¯", + "à¸Ħ าส", + "ен наÑı", + "æĬ ¼", + "yl ül", + "Ġsev iy", + "Ġd ÄĽti", + "ĠdÄĽ ti", + "ĠdÄĽt i", + "â̬ Ċ", + "Ġع ز", + "Ġu á»ijng", + "Ġس رÙħ", + "Ġسر Ùħ", + "е не", + "ен е", + "Ġмал енÑĮ", + "Ġ вÑĸдом", + "Ġв Ñĸдом", + "ĠвÑĸд ом", + "ĠвÑĸ дом", + "ั à¸ļà¸Ĺ", + "ัà¸ļ à¸Ĺ", + "ĠTh ái", + "Ġà¤Ĩव श", + "rove ÅĪ", + "çĽ £", + "ĠÑı зÑĭ", + "ĠO y", + "å£ ģ", + "в аÑĤÑĮ", + "ва ÑĤÑĮ", + "ваÑĤ ÑĮ", + "л адÑĥ", + "ла дÑĥ", + "лад Ñĥ", + "ا صÙĦ", + "اص ÙĦ", + "ot ÅĻeb", + "د ÙĬØ«", + "دÙĬ Ø«", + "íı °", + "νο μ", + "г оÑĢод", + "го ÑĢод", + "гоÑĢ Ð¾Ð´", + "Ġm uh", + "Ġmu h", + "âĢĻ l", + "ÑģÑĤ воÑĢ", + "ÑģÑĤв оÑĢ", + "ÑģÑĤво ÑĢ", + "åħ Ħ", + "Ðķ Ðł", + "Ø· ÙĦ", + "éľ ĩ", + "Ùİ Øª", + "Ġb lÃŃ", + "Ġbl ÃŃ", + "Ġed ildi", + "Ġedil di", + "éĿ ł", + "äºĮ åįģ", + "æĹ Ĺ", + "Ġç iz", + "ĠÄij ảo", + "Ġo pat", + "Ġop at", + "o ÄŁan", + "oÄŁ an", + "ë² Į", + "Ġ éł", + "Ġé ł", + "Ġseb ep", + "Ġsebe p", + "Ñĥ ÑĤи", + "ÑĥÑĤ и", + "åĪ º", + "Ø· ب", + "ev Å¡ÃŃm", + "c hop", + "ch op", + "cho p", + "çĶ ļ", + "Ġngh á»ģ", + "Ġп аÑĢÑĤ", + "ĠпаÑĢ ÑĤ", + "ุ à¸Ħ", + "Ú© ÛĮÙĦ", + "Ú©ÛĮ ÙĦ", + "d um", + "du m", + "Ġor tak", + "Ġort ak", + "Ġorta k", + "ãģŁ ãģĹ", + "Ġoby vatel", + "Ġv ých", + "Ġvý ch", + "Ġv eren", + "Ġver en", + "Ġve ren", + "Ġvere n", + "Ġв еÑģÑĮ", + "ĠвеÑģ ÑĮ", + "Ġве ÑģÑĮ", + "ĠÐĶ Ð°", + "Ġ íķĺì§Ģë§Į", + "Ġíķĺ ì§Ģë§Į", + "Ġíķĺì§Ģ ë§Į", + "å¦Ĥ æŃ¤", + "Ġमह त", + "ัà¸ĩà¸ģ ฤษ", + "ãĢĤ è¿Ļ", + "Ġ гал", + "Ġг ал", + "Ġsa nat", + "Ġsan at", + "Ġsana t", + "éł Ĩ", + "ĠÑģам о", + "å Ľ°", + "åĽ °", + "ี à¸Ń", + "ĠBaÅŁ kan", + "ÏĦ οÏħÏĤ", + "ÏĦοÏħ ÏĤ", + "Ġyap tıģı", + "Ġyaptı ģı", + "Ġyaptıģ ı", + "ÅĻ it", + "ÅĻi t", + "ĠÑģ ÑĸлÑĮ", + "ान त", + "Ġ ÙĨت", + "ĠÙĨ ت", + "Ġkh Äĥn", + "à¸Ĭ à¸Ļะ", + "à¸Ĭà¸Ļ ะ", + "м ини", + "ми ни", + "мин и", + "ãĥ¬ ãĥ¼", + "ë Ĥ¬", + "ëĤ ¬", + "éħĴ åºĹ", + "ĠاÙĦÙĬ ÙĪÙħ", + "ä¹ Ĺ", + "à¸Ħรà¸ĩ à¸ģาร", + "Ùģ Ø§ÙĤ", + "Ġ à¤ıस", + "Ġà¤ı स", + "Ġ æ¡", + "Ġæ ¡", + "Ú¯ ذ", + "Ġà¤ĩ ल", + "е лениÑı", + "ел ениÑı", + "еле ниÑı", + "елен иÑı", + "à¸ģ รà¸ĵ", + "à¸ģร à¸ĵ", + "举 西", + "ÎŁ Îľ", + "ÎŁÎ ľ", + "Ġm áºŃt", + "Ġs nÃŃ", + "Ġsn ÃŃ", + " IJ", + "à¹Ģร า", + "íķ´ ìķ¼", + "Ġ ìĦľë¹ĦìĬ¤", + "ĠìĦľ ë¹ĦìĬ¤", + "Ġداخ ÙĦ", + "Ġth ắng", + "íĥ Ī", + "а вÑģÑı", + "ав ÑģÑı", + "Ġ Ñĸм", + "ĠÑĸ м", + "ا Ùħت", + "اÙħ ت", + "Ġ ÙĪÙĤت", + "ĠÙĪ ÙĤت", + "ĠÙĪÙĤ ت", + "à¥Ĥ à¤ģ", + "Ġ èIJ", + "Ġè IJ", + "Ġ سÙĦاÙħ", + "Ġس ÙĦاÙħ", + "ĠسÙĦ اÙħ", + "Ġvz dÄĽl", + "å¸Į æľĽ", + "åŃĺ æ¡£", + "Ġ à¸Ĺำ", + "Ġà¸Ĺ ำ", + "ĠвÑĸй ÑģÑĮ", + "а ÑĢан", + "аÑĢ Ð°Ð½", + "аÑĢа н", + "ĠÑĢ Ñĸк", + "Ġп иÑģÑĮ", + "Ġпи ÑģÑĮ", + "ĠпиÑģ ÑĮ", + "Ġá¼ IJ", + "기 ëıĦ", + "ĠпоÑģÑĤ оÑıн", + "Ġ åĮĹ京", + "ĠåĮĹ äº¬", + "ĠNÄĽ m", + "Ø´ ÙĨاÙħÙĩ", + "Ø´ÙĨ اÙħÙĩ", + "Ġdal Å¡ÃŃch", + "ĠdalÅ¡ÃŃ ch", + "Ġب اع", + "Ġبا ع", + "Ġpo hy", + "Ġpoh y", + "ا ÙĦÙģ", + "اÙĦ Ùģ", + "à¸ŀ วà¸ģ", + "é ĭ", + "Ġ cih", + "Ġc ih", + "Ġci h", + "Ù ¢", + "ä¸ ´", + "ãĤ¯ ãĥĪ", + "п нÑı", + "Ġ дал", + "Ġд ал", + "Ġда л", + "ÙĴ ر", + "ãĢĢ ãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢ ĠãĢĢ", + "ãĢĢãĢĢĠ ãĢĢĠãĢĢ", + "æĬ¥ åijĬ", + "ÙĪ Ø¯ÛĮ", + "ÙĪØ¯ ÛĮ", + "á» £i", + "ợ i", + "ÑĨ ÑĸÑĶÑİ", + "ÑĨÑĸ ÑĶÑİ", + "Ġ ãĥĢ", + "Ġãĥ Ģ", + "ĠÑģÑĤ еп", + "r až", + "ra ž", + "ĠS aÄŁ", + "ĠSa ÄŁ", + "Ġt uyến", + "Ġtuy ến", + "Ġal mak", + "Ġalma k", + "Ġalm ak", + "Ġзаболева ниÑı", + "Ġ ÏĥÏĩ", + "ĠÏĥ Ïĩ", + "Ġ íĭ", + "Ġí ĭ", + "Ġв им", + "Ġви м", + "ç¡ ¬", + "Ġ äºĶ", + "Ġi kinci", + "Ġik inci", + "ุ à¸į", + "ส าว", + "ĠìĦ¸ ê³Ħ", + "ĠÙħ ØŃÙĦ", + "ĠÙħØŃ ÙĦ", + "ระ หว", + "Ġelek tron", + "Ġelekt ron", + "Ġelektr on", + "Ġh ại", + "Ġhạ i", + "æĹ ¢", + "Ġ íĸ¥", + "Ġíĸ ¥", + "Ġji né", + "Ġjin é", + "Ġng he", + "Ġngh e", + "æij ©", + "ĠÑģо бÑĸ", + "ĠÑģоб Ñĸ", + "Æ ¯", + "ÑĤ ÑĥÑĢ", + "ÑĤÑĥ ÑĢ", + "æ±½ 车", + "Ø´ اÙĩ", + "Ġd Ãłnh", + "ä¸ ¹", + "ä»Ĭ æĹ¥", + "ãĥIJ ãĥ¼", + "в аниÑı", + "ва ниÑı", + "ван иÑı", + "Ġ ساÙħ", + "Ġس اÙħ", + "çݯ å¢ĥ", + "ĠاÙĦ ÙħÙĨت", + "ĠاÙĦÙħ ÙĨت", + "ĠاÙĦÙħÙĨ ت", + "ĠÑģеÑĢ Ð´", + "éģ ł", + "ε ÏĦ", + "Ġав ÑĤ", + "าà¸ĩ ว", + "Ġvz tah", + "ru ž", + "алÑĮ наÑı", + "алÑĮна Ñı", + "Ġطر اØŃÛĮ", + "à¹Ĥรà¸ĩ à¹ģรม", + "ĠÄį asto", + "ĠÄįas to", + "ĠÄįast o", + "Ġ ê¼", + "Ġê ¼", + "Ïĥ ÏĦÏĮ", + "ÏĥÏĦ ÏĮ", + "Ġbu rada", + "Ġbur ada", + "Ġİ z", + "Ġ ê·¸ëŀĺ", + "Ġê·¸ ëŀĺ", + "å² Ľ", + "ĠØ´ ÙĪÙĨد", + "ĠØ´ÙĪ ÙĨد", + "Å¡ ek", + "Å¡e k", + "Ġ ìĿ´ìķ¼", + "ĠìĿ´ ìķ¼", + "ãĤĮ ãģªãģĦ", + "ê· ¹", + "la mÄ±ÅŁ", + "lam Ä±ÅŁ", + "ä» į", + "cház et", + "cháze t", + "Ġ ÑģÑĥÑĤ", + "ĠÑģ ÑĥÑĤ", + "ĠÑģÑĥ ÑĤ", + "æĹł æ³ķ", + "æµ ¦", + "ÄĽ la", + "ÄĽl a", + "à¹ĥà¸Ļ à¸Ĭ", + "Ġc ân", + "Ġcâ n", + "ÎŁ Îĵ", + "ÎŁÎ ĵ", + "Ġz vý", + "Ġzv ý", + "ĠÙ¾ ار", + "Ġپا ر", + "Ġк лÑĸ", + "Ġкл Ñĸ", + "Ġn ové", + "Ġno vé", + "Ġnov é", + "çĶ ĺ", + "ë¹ ł", + "m á", + "Ġ Ñģол", + "ĠÑģ ол", + "ĠÑģо л", + "à¤ķ रण", + "à¤ķर ण", + "н оÑĩ", + "но Ñĩ", + "Ġ fik", + "Ġf ik", + "Ġfi k", + "Ġà¤ľ à¤Ĺ", + "à¹ĩ à¸Ļà¸ķ", + "à¹ĩà¸Ļ à¸ķ", + "ĠÙħ تØŃ", + "ĠÙħت ØŃ", + "Ġph iên", + "Ġphi ên", + "Ġol sun", + "Ġк аб", + "Ġка б", + "Ġh út", + "èĦ ±", + "Ġ åĸ", + "Ġå ĸ", + "ĠH ải", + "Ġ tÄĽÅ¾", + "Ġt ÄĽÅ¾", + "ĠtÄĽ ž", + "Ġth ái", + "Ġ تاب", + "Ġت اب", + "Ġتا ب", + "- ÐŁ", + "Ø« ار", + "çĨ Ĭ", + "Ġ ними", + "Ġн ими", + "Ġни ми", + "Ġним и", + "Ġzp rac", + "Ġत ह", + "Ġм акÑģим", + "Ġмак Ñģим", + "m eyi", + "me yi", + "mey i", + "ĠÑģ оÑĨи", + "ĠÑģо ÑĨи", + "æ² Ĵ", + "ĠìķĬ ëĬĶ", + "_ _", + "åķ ¦", + "ĠاÙĨ ÙĪØ§Ø¹", + "æļ ´", + "ä¸Ĭ æµ·", + "åħ· æľī", + "à¥ģ ब", + "à¥ģठ¬", + "ìķ Ļ", + "Ġíģ °", + "Ġíŀ ĺ", + "Ġtr ánh", + "ि यन", + "िय न", + "ãģ¾ ãģ¾", + "п оÑĩ", + "по Ñĩ", + "m ÄĽr", + "mÄĽ r", + "å³ °", + "ĠÙħ صر", + "ĠÙħص ر", + "ĠÑįÑĦ ÑĦекÑĤив", + "ĠÑįÑĦÑĦек ÑĤив", + "Ġ çı", + "Ġç ı", + "ler iyle", + "leri yle", + "âĪ ļ", + "Ġ ì¶ķ", + "Ġì¶ ķ", + "Ġ ê²Įìĭľ", + "Ġê²Į ìĭľ", + "ìĿ ij", + "Ġ poÅĻád", + "Ġpo ÅĻád", + "Ġشب Ú©Ùĩ", + "اÙĩ Ø´", + "ĠخدÙħ ات", + "Ġna Å¡e", + "ĠnaÅ¡ e", + "ν οÏį", + "νο Ïį", + "Ġyön elik", + "Ġk ork", + "Ġko rk", + "Ġkor k", + "ا ÙĩÙħ", + "اÙĩ Ùħ", + "è° Ī", + "Ġ μη", + "Ġμ η", + "Ġd olar", + "Ġdo lar", + "Ġdol ar", + "çµ ¦", + "ĠÎķ Ïħ", + "Ġobdob ÃŃ", + "Ġ μÏĮ", + "Ġμ ÏĮ", + "à¹Ģ à¸Ńà¸ģ", + "à¹Ģà¸Ń à¸ģ", + "Ġپاس Ø®", + "è¡ ¥", + "ا عد", + "اع د", + "ãĤī ãģĦ", + "ÎŃ Î»", + "и ÑĤÑĭ", + "иÑĤ Ñĭ", + "Ġ ëħ¼", + "Ġëħ ¼", + "Ġ^{ [", + "ί γ", + "æł ij", + "l ında", + "lı nda", + "ĠìŬ 룬", + "£ £", + "ÅĻ il", + "ÅĻi l", + "Ġав ÑĤоÑĢ", + "ĠавÑĤ оÑĢ", + "ÏĦ ικÏĮÏĤ", + "ÏĦικ ÏĮÏĤ", + "ÏĦικÏĮ ÏĤ", + "u dur", + "ud ur", + "udu r", + "Ġc ư", + "Ġk ıy", + "Ġkı y", + "Ñģ ем", + "Ñģе м", + "ĠØ£ بÙĪ", + "Ġأب ÙĪ", + "ÏĦ ικÏİν", + "ÏĦικ Ïİν", + "Û± Û·", + "Û±Û ·", + "è² ¸", + "Ġп ÑĢож", + "ĠпÑĢ Ð¾Ð¶", + "ĠпÑĢо ж", + "ün cü", + "Ġ нÑĸÑĩ", + "Ġн ÑĸÑĩ", + "ĠнÑĸ Ñĩ", + "Ġ मत", + "Ġम त", + "ãģķ ãĤĮãģ¦ãģĦãĤĭ", + "ãģķãĤĮ ãģ¦ãģĦãĤĭ", + "ãģķãĤĮãģ¦ ãģĦãĤĭ", + "ا صر", + "اص ر", + "Ġع ÙĤ", + "ĠкаÑĩе ÑģÑĤве", + "ĠÐĵ еÑĢ", + "ĠÐĵе ÑĢ", + "åº Ĩ", + "Ù ¹", + "a larda", + "al arda", + "alar da", + "ĠÙ¾ رس", + "Ġپر س", + "и ÑĩеÑģкой", + "иÑĩеÑģ кой", + "Ġp him", + "Ġph im", + "Ġphi m", + "ί νη", + "ίν η", + "ä¸ĩ åĨĨ", + "i lerini", + "iler ini", + "ileri ni", + "ilerin i", + "ãĢģ 大", + "Ġo lsa", + "Ġol sa", + "æł¹ æį®", + "âĢĮ س", + "ĠTh á»§", + "r oje", + "ro je", + "roj e", + "нÑĮ оÑĹ", + "нÑĮо ÑĹ", + "Ġs lou", + "Ġsl ou", + "Ġslo u", + "ี ฬ", + "ıy orum", + "ıyor um", + "ÄĽ j", + "Ġ خبر", + "ĠØ® بر", + "è® Ĭ", + "Ġ 缸", + "ĠçĽ ¸", + "e lerinin", + "eler inin", + "eleri nin", + "elerin in", + "elerini n", + "íķĻ ëħĦëıĦ", + "íķĻëħĦ ëıĦ", + "ÑĩеÑģ кие", + "Ñĩе Ñģкие", + "ÑĩеÑģки е", + "ĠÅŁ ekl", + "ĠÅŁek l", + "Ġز ÙħاÙĨÛĮ", + "ĠزÙħاÙĨ ÛĮ", + "ĠزÙħ اÙĨÛĮ", + "Ġ xin", + "Ġx in", + "Ġxi n", + "ัà¸ģ à¸ĩาà¸Ļ", + "ĠE kim", + "ĠEk im", + "æĦ ¿", + "Ġод ной", + "Ġодно й", + "ν ή", + "æľĢ æĸ°", + "ĩ ¼", + "Ġн иж", + "Ġни ж", + "Ġ ë³¼", + "Ġë³ ¼", + "è· ij", + "Ġна пиÑģ", + "Ġнап иÑģ", + "èģ ĸ", + "Ġ âĢĮ", + "ĠâĢ Į", + "æłĩ åĩĨ", + "Ġv rát", + "Ġvr át", + "ĠV ì", + "Ġ ÙģØ±Ø§ÙĨ", + "ĠÙģ Ø±Ø§ÙĨ", + "ĠÙ쨱 اÙĨ", + "æĿ¥ çļĦ", + "å§ ¿", + "Ñħ Ñĥ", + "ĠبÛĮر ÙĪÙĨ", + "Ġд ÑĥÑĪ", + "ĠдÑĥ ÑĪ", + "в аÑİÑĤ", + "ва ÑİÑĤ", + "Ġs ebe", + "Ġse be", + "Ġseb e", + "é» ĺ", + "Ġkay ıt", + "Ġkayı t", + "Ïģ θ", + "ãģ¨ ãģ®", + "ĠпÑĢоÑĨ еÑģÑģ", + "ĠпÑĢоÑĨеÑģ Ñģ", + "æĮģ ãģ¡", + "Ñĸ на", + "Ñĸн а", + "Ġ ÑĤоÑĤ", + "ĠÑĤ оÑĤ", + "ĠÑĤо ÑĤ", + "ĠÑĤак ие", + "ĠÑĤа кие", + "The o", + "Th eo", + "ĠÙĨ ÛĮر", + "ĠÙĨÛĮ ر", + "ÑĨ Ñĥ", + "Ġay ak", + "à¸Ļ à¸Ń", + "Ġsit esinde", + "Ġsites inde", + "Ġsitesi nde", + "ĠÚ©ÙĨ ÛĮÙħ", + "ĠÑģ оÑħ", + "ĠÑģо Ñħ", + "Ġम à¤ľ", + "Ġol uyor", + "ç½ij åĿĢ", + "ĠÙ¾ زش", + "ĠE ylül", + "d Ã¼ÄŁ", + "dü ÄŁ", + "Ġبر Ø®ÛĮ", + "Ġبرخ ÛĮ", + "ĠÙħع رÙģ", + "Ġ obec", + "Ġo bec", + "Ġob ec", + "Ġobe c", + "ĠçalÄ±ÅŁ ma", + "Ġçal Ä±ÅŁma", + "ìĦ¼ íĦ°", + "ĠÑģво ÑĶ", + "оÑģÑĤ ей", + ": ::::::::::", + ":: :::::::::", + ":::: :::::::", + ":::::: :::::", + ":::::::: :::", + "::: ::::::::", + "::::: ::::::", + "::::::: ::::", + "::::::::: ::", + ":::::::::: :", + "Ġ алÑĮ", + "Ġа лÑĮ", + "Ġал ÑĮ", + "ç« Ł", + "Ġباش ÙĨد", + "اÙĦ Ø«", + "Ġнай б", + "Ġп ока", + "Ġпо ка", + "Ġпок а", + "Î ŀ", + "ĠÙĪ Ø¥", + "Ġ Ø®ÙĪØ§ÙĨ", + "ĠØ® ÙĪØ§ÙĨ", + "ĠØ®ÙĪ Ø§ÙĨ", + "à¥ģप य", + "Ġ à¹ĥห", + "ĠбÑĭ ÑģÑĤÑĢо", + "Ġth á»Ń", + "Ġthá» Ń", + "ëģ ¼", + "Ġ å¤ļ", + "Ġå¤ ļ", + "两 个", + "ม à¸ķ", + "ز ارش", + "زار Ø´", + "زا رش", + "Ġ ëŁ", + "Ġë Ł", + "य ह", + "Ñī ина", + "Ñīи на", + "Ñīин а", + "ầ ng", + "ần g", + "ï½Ĺ ï½Ĺ", + "à¹Ģà¸ŀ ลà¸ĩ", + "à¹Ģà¸ŀล à¸ĩ", + "tv rt", + "ĠÑĸн ÑĪÑĸ", + "ĠÑĸнÑĪ Ñĸ", + "λ εί", + "λε ί", + "Ġv iá»ĩn", + "Ġvi á»ĩn", + "ij ¸", + "Ġ çϽ", + "ĠçĻ ½", + "Ùİ ÙĪ", + "Ġch ứa", + "Ġchứ a", + "st vo", + "ĠdoÄŁ r", + "Ġ iler", + "Ġi ler", + "Ġil er", + "Ġile r", + "à¥ĭ ,", + "à¹ĥà¸Ļ à¸Ľ", + "Ġر ÙĪØ³Øª", + "ĠرÙĪ Ø³Øª", + "ÙĪ ÙĦÙĪ", + "ÙĪÙĦ ÙĪ", + "Å¡ lo", + "ал иÑģÑĤ", + "али ÑģÑĤ", + "åħ± åĴĮ", + "à¸ŀ ย", + "Ġ ìĻĢ", + "ĠìĻ Ģ", + "ÙĦ ÙĬÙĦ", + "ÙĦÙĬ ÙĦ", + "ĠÑı кого", + "ĠÑıк ого", + "е ÑģÑĤÑĮ", + "еÑģ ÑĤÑĮ", + "еÑģÑĤ ÑĮ", + "ĠÑĦ ин", + "ĠØ£ ÙĨÙĩ", + "ĠØ£ÙĨ Ùĩ", + "ĠMü dür", + "ĠÎĶ Î¹Î±", + "ĠÎĶι α", + "ĠÑĤ ел", + "ĠÑĤе л", + "ि ,", + "Ñĥ ки", + "Ñĥк и", + "ĠÐł Ф", + "ĠMay ıs", + "à¹Ī à¸Ńม", + "à¹Īà¸Ń ม", + "ar ken", + "ark en", + "æĢ ķ", + "ب ÛĮÙĨ", + "بÛĮ ÙĨ", + "ÑĤ аÑħ", + "ÑĤа Ñħ", + "e bo", + "eb o", + "ë³´ ì¦Ŀê¸Ī", + "ĠÙ¾ ÙĦ", + "Ġг Ñĥб", + "Ġв клÑİÑĩ", + "Ġвк лÑİÑĩ", + "æĶ¿ æ²»", + "Ġε ÏĢιÏĥ", + "ĠεÏĢ Î¹Ïĥ", + "ĠεÏĢι Ïĥ", + "ĠÙģØ§Ø± سÛĮ", + "ĠÙģØ§Ø±Ø³ ÛĮ", + "èŃ ī", + "ÏĨ η", + "( éĩij", + "ศ ร", + "åī §", + "âĢĻ ya", + "âĢĻy a", + "å¹´ 度", + "ĠÙĨ رÙħ", + "Ùĥ ÙĪÙħ", + "ÙĥÙĪ Ùħ", + "è¢ ĭ", + "Ġneden le", + "à¹īà¸Ńà¸ĩ à¸ģาร", + "à¹īà¸Ńà¸ĩà¸ģ าร", + "ãĢĮ ãģĤ", + "Ġп оÑģÑĤÑĥп", + "Ġпо ÑģÑĤÑĥп", + "ĠпоÑģÑĤ Ñĥп", + "ìľĦ ìĽIJ", + "åį ĺ", + "èİ ±", + "Ġum ož", + "p ok", + "po k", + "Ñĥ ÑģÑĤи", + "ÑĥÑģ ÑĤи", + "ÑĥÑģÑĤ и", + "Ġ éħ", + "Ġé ħ", + "ĠÑĦ Ñĸз", + "å» £", + "ิ หาร", + "Ġж ÑĥÑĢн", + "ĠдÑĸÑĤ ей", + "Ñĥ ÑİÑīие", + "ÑĥÑİ Ñīие", + "ÑĥÑİÑī ие", + "ä»Ĭ 天", + "ìĿ´ ëĿ¼ê³ł", + "ìĿ´ëĿ¼ ê³ł", + "ç² ī", + "èĴ Ļ", + "ĠDün ya", + "ĠDüny a", + "егод нÑı", + "Ġm imo", + "Ġmi mo", + "Ġmim o", + "Ġ вин", + "Ġв ин", + "Ġви н", + "ãģĿ ãģĵ", + "æ¯ ķ", + "ĠØ£ Ø®", + "Ġ åIJĮ", + "ĠåIJ Į", + "س اÙĨÛĮ", + "ساÙĨ ÛĮ", + "Ġ kah", + "Ġk ah", + "Ġka h", + "ि यर", + "िय र", + "ÏĢ Î¿ÏĤ", + "ÏĢο ÏĤ", + "j ez", + "je z", + "ÙĬ ج", + "ĠsaÄŁ lay", + "ا جÙĩ", + "اج Ùĩ", + "Ġ çł", + "Ġç ł", + "ï ľ", + "Ġج ست", + "Ġt ức", + "ư Æ¡i", + "ươ i", + "Ø´ Ùģ", + "ส à¸ķ", + "Ġ ÑĢеÑģ", + "ĠÑĢ ÐµÑģ", + "ĠÑĢе Ñģ", + "Ġ å£", + "Ġå £", + "Ġbi zim", + "Ġbiz im", + "Ġbizi m", + "Ġ ê·Ģ", + "Ġê· Ģ", + "ि ब", + "िठ¬", + "ë¡ľ ìļ´", + "ĠÑģ ÑĤал", + "ĠÑģÑĤ ал", + "ĠÑģÑĤа л", + "Ġ ÑĢÑĥÑģ", + "ĠÑĢ ÑĥÑģ", + "ĠÑĢÑĥ Ñģ", + "ĠO cak", + "ĠOc ak", + "åľ £", + "Ġ úÄįast", + "Ġú Äįast", + "ĠúÄį ast", + "ive rz", + "iver z", + "ëĤĺ ëĬĶ", + "о ÑĢоÑĤ", + "оÑĢ Ð¾ÑĤ", + "оÑĢо ÑĤ", + "Ñĩ инÑĭ", + "Ñĩи нÑĭ", + "Ñĩин Ñĭ", + "Ġihtiy aç", + "ÐĿ Ðŀ", + "ĠÐĿ ов", + "ĠÐĿо в", + "ีย à¸Ķ", + "ĠпоÑĤÑĢÑĸб но", + "Ú¯ ز", + "ĠÑģказ ал", + "ĠG ia", + "ĠGi a", + "m esini", + "mes ini", + "mesi ni", + "Ġbulun ur", + "æ¸ ¡", + "г оÑĤ", + "го ÑĤ", + "Ġh uku", + "Ġhu ku", + "ëĦ ·", + "ã Ĩ", + "Ġ اÙĥ", + "Ġا Ùĥ", + "Ġد ÙĦÛĮÙĦ", + "ĠدÙĦ ÛĮÙĦ", + "Ġ اساس", + "Ġا ساس", + "Ġاس اس", + "ìŰ 구", + "ĠÎĺ ε", + "Ġس ÙĪØ±", + "ĠسÙĪ Ø±", + "Ġ ì¢Ģ", + "Ġì¢ Ģ", + "ĠاÙĦ در", + "ĠاÙĦد ر", + "ĠÑģÑĤÑĢо иÑĤелÑĮ", + "Ġ Ñĥк", + "ĠÑĥ к", + "ĠìĻ ľ", + "е лик", + "ел ик", + "ели к", + "O VID", + "OV ID", + "Ġt emiz", + "Ġtem iz", + "äº ¦", + "Ġth iếu", + "Ġthi ếu", + "Ġп ÑĥÑĤ", + "ĠпÑĥ ÑĤ", + "Ñİ Ñīей", + "ÑİÑī ей", + "Ġur Äį", + "Ġ ÄIJây", + "ĠÄIJ ây", + "æ¥ µ", + "μ οÏħ", + "μο Ïħ", + "Ġ à¹Ģà¸Ļ", + "Ġà¹Ģ à¸Ļ", + "Ġà¹ĢภĻ", + "е веÑĢ", + "ев еÑĢ", + "Âł ÐĶ", + "ì ´Ŀ", + "ì´ Ŀ", + "è¶ £", + "Ġà¤ħ लà¤Ĺ", + "Ġà¤ħल à¤Ĺ", + "ưá»Ŀ n", + "Ġ ãĥŃ", + "Ġãĥ Ń", + "Ġ ê³³", + "Ġê³ ³", + "é² ģ", + "Ġرس ÛĮد", + "身 ä½ĵ", + "ั à¸ĵà¸ij", + "y nÃŃ", + "yn ÃŃ", + "ج ات", + "جا ت", + "ì§Ģ 를", + "न ल", + "ì ķĮ", + "ìķ Į", + "Ñĸ п", + "Ġv Ãłng", + "ĠvÃł ng", + "Ġпл оÑī", + "Ġпло Ñī", + "оз мож", + "åī ²", + "Ġth ảo", + "л ади", + "ла ди", + "лад и", + "Ġ åĿ", + "Ġå Ŀ", + "ĠÐľ и", + "Ġдел аÑĤÑĮ", + "Ġдела ÑĤÑĮ", + "é ij", + "Ġh uy", + "Ġhu y", + "ا ÛĮØ·", + "اÛĮ Ø·", + "Ġпов ÑĤоÑĢ", + "ü len", + "ül en", + "üle n", + "Ġ ÙĪÙģ", + "ĠÙĪ Ùģ", + "ĠÙĬ تÙħ", + "ĠÙĬت Ùħ", + "ĠÑĢеж им", + "Ġ ìºIJ", + "Ġìº IJ", + "ĠÃĩ ünkü", + "ع دد", + "عد د", + "ни веÑĢ", + "нив еÑĢ", + "ĠÐĿ ик", + "å¸ ĸ", + "Ïį ÏĢ", + "an lar", + "س تÛĮ", + "ست ÛĮ", + "Ġbulun maktadır", + "à¹ģ à¸ļ", + "v ek", + "ve k", + "Ġгла за", + "Ġглаз а", + "å¹ ħ", + "Ġúda j", + "Ġг ÑĢо", + "ĠгÑĢ Ð¾", + "Ġкон кÑĥÑĢ", + "Ġd ůležit", + "Ġdů ležit", + "Ġ Ø·ÙĪØ±", + "ĠØ· ÙĪØ±", + "à¸ĺ าà¸Ļ", + "ĠÙĦ ÙĥÙĨ", + "ĠÙĦÙĥ ÙĨ", + "ر ÙĤ", + "Ðļ ÐIJ", + "Ġ éĿĴ", + "ĠéĿ Ĵ", + "Ġ ìĤ¬ëŀij", + "ĠìĤ¬ ëŀij", + "ĠÑħ воÑĢ", + "ĠÑħв оÑĢ", + "s unuz", + "sun uz", + "ĠÙħØ´ خص", + "éĻ ¸", + "Ġ ढ", + "Ġठ¢", + "Ġv az", + "Ġva z", + "交 æĺĵ", + "ĠÑĤеÑĢ ÑĢиÑĤ", + "ÑĩеÑģ кой", + "Ñĩе Ñģкой", + "ี à¹Ĥ", + "rop oda", + "ıl dıģı", + "ıldı ģı", + "Ġ ëī´", + "Ġë ī´", + "íķĻ ê¸°", + "ë³´ íĹĺ", + "Ġз аÑĤем", + "ĠзаÑĤ ем", + "Âł в", + "ãĥ¼ ãĥĨ", + "ãĥ¼ãĥ Ĩ", + "Ġ ÐŀÑģнов", + "ĠÐŀÑģ нов", + "ãĨ į", + "Ġد ع", + "ÐŁ оÑģ", + "ÐŁÐ¾ Ñģ", + "æ² ī", + "Ġ лож", + "Ġл ож", + "ç͵ åŃIJ", + "Ġ رد", + "Ġر د", + "ĠÑģ ÑĢазÑĥ", + "e jte", + "ej te", + "Ġà¤ij फ", + "Ġt Ãłu", + "ÃŃ k", + "lan ması", + "lanma sı", + "к аÑĤ", + "ка ÑĤ", + "าà¸ģ าศ", + "ãĤ¢ ãĤ¤", + "ÏĦ ιο", + "ÏĦι ο", + "Ġ å§", + "Ġå §", + "प त", + "E Y", + "Ġj mé", + "Ġjm é", + "Ġod kazy", + "Ġê°ľ ìĿ¸", + "éģ ¿", + "bÄĽ h", + "Ðł Ðŀ", + "çĥ Ī", + "Ġza rar", + "Ġzar ar", + "Ú¯ ÙĪÙĨÙĩ", + "Ú¯ÙĪ ÙĨÙĩ", + "Ġtr ì", + "Ġm ại", + "ен нÑĭм", + "ĠÑį коном", + "ĠÑįк оном", + "éĽ £", + "Ġ íĦ", + "Ġí Ħ", + "æİ ī", + "Ġs oru", + "Ġso ru", + "Ġsor u", + "ĠФедеÑĢа ÑĨии", + "ĠÑģиÑģÑĤем и", + "æĸĻ çĦ¡æĸĻ", + "Ġà¤ķ à¤Ń", + "ĠÙĩ ÙĨد", + "ĠÙĩÙĨ د", + "ุà¸ĩ à¹Ģà¸Ĺà¸ŀ", + "ĠOsman lı", + "ĠпÑĢод олж", + "Ġ ÙĪÙĦا", + "ĠÙĪ ÙĦا", + "ĠÙĪÙĦ ا", + "ĠÄįlán ku", + "Ġa dım", + "Ġad ım", + "Ġadı m", + "ĠÏĢ Î±Ïģά", + "ĠÏĢαÏģ ά", + "ĠÏĢα Ïģά", + "Ġzá ÅĻÃŃ", + "Ġ à¸Īำà¸ģ", + "Ġà¸Īำ à¸ģ", + "Ġп ен", + "m enin", + "me nin", + "men in", + "meni n", + "Ġìĺ¤ ëĬĺ", + "em iz", + "emi z", + "οÏį ÏĤ", + "- स", + "íķĺ ìĭľ", + "ĠÑħ ви", + "ĠÑħв и", + "ãĤ° ãĥ©", + "Ġп оÑĪ", + "Ġпо ÑĪ", + "ĠÐŀдна ко", + "ĠÐŀднак о", + "Ñĸд но", + "íĺ ľ", + "Ñī ими", + "Ñīи ми", + "Ñīим и", + "èĥ ¸", + "Ġİ lk", + "Ġİl k", + "m ey", + "me y", + "Ġз да", + "Ġзд а", + "κ λη", + "а лом", + "ал ом", + "ало м", + "à¹Ģศ ษ", + "ا ÙĨا", + "اÙĨ ا", + "Ġ ÎŁÎ¹", + "ĠÎŁ ι", + "Ġ åıĮ", + "Ġåı Į", + "ี à¸Ĥ", + "Ġ بس", + "Ġب س", + "è§Ħ å®ļ", + "i say", + "is ay", + "isa y", + "uk arı", + "uka rı", + "æµģ éĩı", + "v ÃŃm", + "vÃŃ m", + "λ Ïİ", + "ä¹ Ļ", + "Ġल ड", + "ĠÙĨد ارد", + "ĠÙĨدار د", + "е ÑĢом", + "еÑĢ Ð¾Ð¼", + "еÑĢо м", + "Ġsır asında", + "Ġsıras ında", + "Ġsıra sında", + "Ġr Äĥng", + "Æ¡ m", + "Ġl ạnh", + "Ġlạ nh", + "ठĥ", + "à¥ģ ण", + "à¥ģठ£", + "uz ey", + "uze y", + "Ġ Ñĥва", + "ĠÑĥ ва", + "ĠÑĥв а", + "vÄĽ d", + "Ñĭ Ñģ", + "Ġ κι", + "Ġκ ι", + "Ñ ķ", + "ÛĮ ا", + "à¸ĩ à¸Ħ", + "ph ylum", + "phy lum", + "phyl um", + "Ġber aber", + "ี à¸Ķ", + "æµ ®", + "ा सन", + "ास न", + "o vice", + "ov ice", + "ovic e", + "ovi ce", + "è¦ §", + "Ġस फ", + "å°ij 女", + "ан ÑĤи", + "анÑĤ и", + "é¨ ĵ", + "Ġso át", + "é¬ ¼", + "lan mÄ±ÅŁ", + "Ġb ếp", + "ÙIJ ÙĦ", + "Ġsay ısı", + "Ġsayı sı", + "ĠÙĤ دÙħ", + "ĠÙĤد Ùħ", + "à¥Ī म", + "ह म", + "ĠÑĢ Ñĥки", + "ĠÑĢÑĥ ки", + "ĠÑĢÑĥк и", + "ĠصÙģ ØŃÙĩ", + "Å¡ ky", + "Å¡k y", + "é» Ĵ", + "èģ ļ", + "ãģĭ ãģ«", + "Ġs âu", + "ед аг", + "ĠÑģÑĤоÑĢ Ð¾Ð½Ñĭ", + "ĠÑģÑĤоÑĢон Ñĭ", + "Ġ ruk", + "Ġr uk", + "Ġru k", + "âĢĮ âĢĮ", + "ĠØ¢ ÙĪØ±", + "Ġع دÙħ", + "Ġعد Ùħ", + "õ i", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġبا زار", + "Ġباز ار", + "Ġe deb", + "Ġed eb", + "Ġv ÄįetnÄĽ", + "оп аÑģ", + "Ġн ег", + "Ġне г", + "m ayan", + "ma yan", + "may an", + "maya n", + "к оÑģÑĤÑĮ", + "ко ÑģÑĤÑĮ", + "Ġsv ůj", + "ÄŁ ında", + "ģı nda", + "ģın da", + "ذ ÛĮر", + "M á»Ļt", + "Ð Ħ", + "Ġyap tı", + "ि थ", + "िठ¥", + "ĠÙħ Ùĩر", + "ĠÙħÙĩ ر", + "Ġд оÑģÑĤи", + "Ġдо ÑģÑĤи", + "ĠдоÑģÑĤ и", + "ĠдоÑģ ÑĤи", + "Ġ صÙĪØ±", + "Ġص ÙĪØ±", + "m esine", + "mes ine", + "mesi ne", + "ĠD ân", + "ä¸Ģ ä¸ĭ", + "çį İ", + "ĠÐľ иÑħ", + "ĠÐľÐ¸ Ñħ", + "Ġо Ñĩи", + "ĠоÑĩ и", + "ãĤ¦ ãĤ§", + "Ġ ÑĸÑģ", + "ĠÑĸ Ñģ", + "Ġgi ác", + "Ġgiá c", + "åľ¨çº¿ è§Ĥçľĭ", + "Ġاد اÙħÙĩ", + "ÑĨ ов", + "ÑĨо в", + "Ġ комÑĥ", + "Ġк омÑĥ", + "Ġком Ñĥ", + "Ġко мÑĥ", + "Ġİng iliz", + "Ġг ÑĢаж", + "ĠгÑĢа ж", + "ĠгÑĢ Ð°Ð¶", + "ãģ¦ ãĤĤ", + "Ġch ữ", + "олÑĮ кÑĥ", + "m ÄĽt", + "mÄĽ t", + "Ñıг ом", + "Ñĩ аÑģÑĤ", + "Ñĩа ÑģÑĤ", + "ÑĩаÑģ ÑĤ", + "ìĸ ¼", + "Ġkh óa", + "Ġkhó a", + "ĠÐIJ д", + "ĠØ¢ ÙĤ", + "Ġkurul uÅŁ", + "ά ζ", + "Ġж ов", + "Ġв ÑģÑĤÑĢе", + "ĠвÑģÑĤ ÑĢе", + "ĠÙĪ ÙĦÙĥ", + "ĠÙĪÙĦ Ùĥ", + "Ġt uyá»ĩt", + "y ı", + "Ġ ÐĴо", + "ĠÐĴ о", + "Ġv á»įng", + "Ġvá» įng", + "ع ÙĬØ©", + "عÙĬ Ø©", + "Ġop ÄĽt", + "ا ÙĬد", + "اÙĬ د", + "à¥Ī .Ċ", + "à¥Ī. Ċ", + "ĠÑģ ами", + "ĠÑģам и", + "åª Ĵ", + "Ġsv ých", + "ĠëĤĺ íĥĢ", + "ìĨ IJ", + "Ġ ÙĦع", + "ĠÙĦ ع", + "Ġet kin", + "Ġetk in", + "Ġetki n", + "ĠN á", + "Ġsou tÄĽ", + "Ġsout ÄĽ", + "층 ìĿĺ", + "Ġ çŃī", + "ĠçŃ ī", + "Ġر سÙħ", + "Ġرس Ùħ", + "Ġ خاÙĨÙĩ", + "ĠØ® اÙĨÙĩ", + "ĠخاÙĨ Ùĩ", + "Ġ å®¶", + "Ġå® ¶", + "iá» ģm", + "iá»ģ m", + "ëħ IJ", + "ê° Ī", + "ì° ©", + "ž il", + "ži l", + "ÑģÑĤиÑĤ ÑĥÑĤ", + "ÑģÑĤиÑĤÑĥ ÑĤ", + "or uÄį", + "oru Äį", + "ĠØ¥ ذا", + "Ġإذ ا", + "à¹Ħ à¸Ĥ", + "ี à¸Ĭ", + "ÑĢ Ð°Ð±", + "ÑĢаР±", + "ÑĢа б", + "íķĻ ìĥĿ", + "Ġ ìī", + "Ġì ī", + "r nek", + "rn ek", + "rne k", + "Ġاست خداÙħ", + "ãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ãĢĢĠ ãĢĢĠãĢĢĠãĢĢ", + "Ġв Ñģем", + "ĠвÑģ ем", + "ĠвÑģе м", + "Ġìłķ ëıĦ", + "Ġvy j", + "éĢ ±", + "алÑĮ ное", + "алÑĮно е", + "Ġch uyá»ĩn", + "ì§Ģ ìĽIJ", + "i lerine", + "ile rine", + "iler ine", + "ileri ne", + "ilerin e", + "ĠìķĦ 무", + "Ġок оло", + "ाव न", + "à¸Ļ า", + "о пÑĢи", + "оп ÑĢи", + "d rž", + "dr ž", + "ĠÑģÑĥ ÑģпÑĸлÑĮ", + "Ġب Ùĥ", + "u ky", + "uk y", + "Ġ ÏĩÏī", + "ĠÏĩ Ïī", + "Ġtu ần", + "nict vÃŃ", + "Ġ ÙĩدÙģ", + "ĠÙĩد Ùģ", + "Ġch iá»ģu", + "ÎĹ ÎĿ", + "å°ı å§IJ", + "íķĺ ìĺĢ", + "Ġk las", + "Ġkl as", + "Ġkla s", + "á»Ļ n", + "ĠìĿ´ íĽĦ", + "ÙĨ اÙħج", + "ÙĨا Ùħج", + "ÙĨاÙħ ج", + "Äį ast", + "Äįas t", + "ĠاÙĦ خاص", + "ĠاÙĦØ® اص", + "l Ä±ÅŁ", + "lı ÅŁ", + "Ġع Ùħر", + "ĠعÙħ ر", + "ãĢį Ċ", + "иб олее", + "ãĤĬ ãģ®", + "ãħ ł", + "ä¹Ł ä¸į", + "к ÑĢеÑĤ", + "Ġ ìĶ", + "Ġì Ķ", + "ÏĦ ια", + "ÏĦι α", + "ĠÑĥпÑĢав лÑĸннÑı", + "æ² ¢", + "Ġk esin", + "Ġke sin", + "Ġkes in", + "ì¡Į ëĭ¤", + "머 ëĭĪ", + "羣 çļĦ", + "Ġbak ım", + "æĿ± 京", + "¾ ¸", + "ÙħÙĦ ÙĥØ©", + "оÑĤ ÑĢеб", + "d ın", + "dı n", + "Ġ PÅĻi", + "ĠP ÅĻi", + "ĠPÅĻ i", + "Ġm ÄĽli", + "ĠmÄĽ li", + "ĠmÄĽl i", + "Ġδη μο", + "å ¯¸", + "å¯ ¸", + "ĠÙĪ ÙĥاÙĨ", + "ĠÙĪÙĥ اÙĨ", + "Ġप ढ", + "ĠвеÑĢ Ñħ", + "Ġе Ñij", + "C ách", + "Các h", + "ä½ľ 为", + "ĠÐļ ол", + "ĠÐļо л", + "Ġ ве", + "Ġв е", + "Ġ деÑĢж", + "Ġд еÑĢж", + "ĠдеÑĢ Ð¶", + "em oc", + "emo c", + "ãģ¸ ãģ®", + "Ġ аÑĢÑħ", + "ĠаÑĢ Ñħ", + "Ġk iếm", + "Ġ æĺİ", + "Ġæĺ İ", + "ĠлÑİд ини", + "ĠлÑİди ни", + "ë ·", + "ĠÙĪ Ø§ÙĦت", + "ĠÙĪØ§ÙĦ ت", + "ĠÙĪØ§ ÙĦت", + "Ġ è°", + "Ġè °", + "çģ ¯", + "íĻ ķ", + "Ġ구 매", + "Ġ ç§ij", + "Ġç§ ij", + "it nÃŃ", + "и ÑĩеÑģкие", + "иÑĩеÑģ кие", + "иÑĩеÑģки е", + "ĠÙĨ Ù쨳", + "ĠÙĨÙģ Ø³", + "Ġت ÙĦÙģ", + "ĠتÙĦ Ùģ", + "ا ÙģÛĮ", + "اÙģ ÛĮ", + "ĠØŃ سÙĨ", + "ĠØŃس ÙĨ", + "âĸ¡ âĸ¡", + "ý vá", + "ýv á", + "ÄŁ ın", + "ģı n", + "ıyor uz", + "ĠCh ÃŃ", + "ĠÙ¾ÚĺÙĪÙĩ Ø´", + "Ġ ÏĦÎŃ", + "ĠÏĦ ÎŃ", + "ĠÏĥ Ïĩε", + "ĠÏĥÏĩ ε", + "о леÑĤ", + "ол еÑĤ", + "α ιδ", + "αι δ", + "Ġh ạt", + "Ġhạ t", + "à¸ł าà¸Ħ", + "åĨ °", + "Ġrych le", + "it eli", + "ite li", + "itel i", + "Âł z", + "ย à¸ģ", + "æ¨ ¹", + "Ġج ÙĪØ§ÙĨ", + "ĠجÙĪ Ø§ÙĨ", + "æĺ Į", + "Ġü retim", + "Ġür etim", + "Ġüret im", + "ระ à¸ļ", + "à¸Ľà¸£à¸° ม", + "ά Ïĥ", + "å² ©", + "ĠÑĥ ÑģÑĤÑĢой", + "ĠÑĥÑģÑĤ ÑĢой", + "Ġver ilen", + "Ġveri len", + "ich ni", + "ĠpÅĻÃŃ mo", + "ĠpÅĻÃŃm o", + "ĠاÙĦذÙĩ اب", + "ì½ ľ", + "æľ ±", + "Ġس Ø®", + "Ñĸ ла", + "Ñĸл а", + "Ñĥ ма", + "Ñĥм а", + "ห า", + "ÛĮ دا", + "ÛĮد ا", + "å² ¸", + "ä¸Ģ å®ļ", + "Ġ ä¼ļ", + "Ġ ÐŁÑĸд", + "ĠÐŁ Ñĸд", + "Ġ ÑĩиÑĤ", + "ĠÑĩ иÑĤ", + "ĠÑĩи ÑĤ", + "и Ñİ", + "Ġ ÐĹап", + "ĠÐĹ Ð°Ð¿", + "ĠÐĹа п", + "ÑĤ иÑı", + "ÑĤи Ñı", + "Ġ ê°ľë°ľ", + "Ġê°ľ ë°ľ", + "ĠÑĤе оÑĢ", + "Ñı ÑģÑĮ", + "ÑıÑģ ÑĮ", + "ĠpÅĻÃŃ prav", + "( åľŁ", + "Ùħ ÙĬ", + "ĠpÅĻed evÅ¡ÃŃm", + "ĠTem muz", + "Ġпод деÑĢж", + "Ġнед оÑģÑĤаÑĤ", + "ĠìĿ´ ìľł", + "Ġkhá»ı i", + "ĠاÙĦ تØŃ", + "ĠاÙĦت ØŃ", + "ĠÙħÙħ Ú©ÙĨ", + "Ġv hod", + "Ġvh od", + "ев ой", + "ево й", + "о вал", + "ов ал", + "ова л", + "Ġн алеж", + "Ġна леж", + "Ġнал еж", + "ï¼¼ :", + "ย ะ", + "ĠÙħ اشÛĮÙĨ", + "Ġg á»Ńi", + "al ım", + "alı m", + "Ġìµľ ìłĢ", + "Ùij Ùĩ", + "á»Ļ p", + "à¥Ģ ।Ċ", + "à¥Ģ। Ċ", + "Ġ пиÑģ", + "Ġп иÑģ", + "Ġпи Ñģ", + "Ġ вÑģÑı", + "Ġв ÑģÑı", + "ĠвÑģ Ñı", + "Ñĩ ем", + "Ñĩе м", + "o zenÃŃ", + "oz enÃŃ", + "oze nÃŃ", + "Ġ äºļæ´²", + "Ġäºļ æ´²", + "е ÑĢалÑĮ", + "еÑĢ Ð°Ð»ÑĮ", + "еÑĢа лÑĮ", + "기 ëĬĶ", + "Ġп ÑĢез", + "ĠпÑĢ ÐµÐ·", + "ĠпÑĢе з", + "ĠعÙħ ÙĪÙħÛĮ", + "и ÑĩниÑħ", + "иÑĩ ниÑħ", + "Ġ æ²³", + "Ġæ² ³", + "od nÃŃ", + "åıª æĺ¯", + "Ġpo dp", + "Ġpod p", + "à¹īà¸Ńà¸ĩ à¸ŀ", + "ाय द", + "ाà¤ĩ ल", + "ล à¸Ķ", + "ĠÑĢÑĸÑĪ ÐµÐ½Ð½Ñı", + "Ġ ÑĤÑĥÑĢ", + "ĠÑĤ ÑĥÑĢ", + "ĠÑĤÑĥ ÑĢ", + "ÑģÑĮ кÑĥ", + "ÑģÑĮк Ñĥ", + "Ġsal dır", + "ĠÐĽ ÑĮв", + "ãĢģ Ċ", + "ĠÙ¾ÛĮ ÙĪÙĨد", + "åѦ ä¹ł", + "λ Ïī", + "o vit", + "ov it", + "ovi t", + "ü le", + "ül e", + "女 æĢ§", + " Ł", + "e mez", + "em ez", + "eme z", + "Ġh ale", + "Ġha le", + "Ġhal e", + "âī ¦", + "ĠÎķ κ", + "ÏĦηγοÏģ ία", + "k ý", + "ìĦ± ìĿĦ", + "Ġt ým", + "Ġtý m", + "à¥ĩ -", + "Ġz ejména", + "æĻ ¶", + "Ġn gon", + "Ġng on", + "ãĢı ĊĊ", + "软 ä»¶", + "éĤ£ ä¹Ī", + "ĠкваÑĢ ÑĤи", + "ĠÙħÙĨ ظ", + "on ec", + "one c", + "Ġг ли", + "à¥ģर à¤ķ", + "ĠS okol", + "ĠSo kol", + "ĠSok ol", + "Ġ ä¿Ŀ", + "д ив", + "ди в", + "ál nÃŃm", + "áln ÃŃm", + "álnÃŃ m", + "ac aģı", + "aca ģı", + "acaÄŁ ı", + "a ÅŁa", + "aÅŁ a", + "ĠÙħ اÙĦÛĮ", + "ĠÙħا ÙĦÛĮ", + "ĠÙħاÙĦ ÛĮ", + "ĠÃĸ n", + "иÑĤ ели", + "иÑĤе ли", + "ĠØ® رد", + "Ġخر د", + "Ġkullan ıl", + "Ġkullanı l", + "Ġ ÙħÛĮÙĦ", + "ĠÙħ ÛĮÙĦ", + "ĠÙħÛĮ ÙĦ", + "Ġ íļ¨", + "Ġíļ ¨", + "ã n", + "Ġ rost", + "Ġr ost", + "Ġro st", + "Ġros t", + "Ġëĸ ł", + "u bat", + "ub at", + "uba t", + "Ġ åıĤ", + "Ġåı Ĥ", + "Ġبر اÙĬ", + "Ġм енÑĮ", + "Ġмен ÑĮ", + "ั à¸Ħร", + "ัà¸Ħ ร", + "Ġпом ог", + "ĠØŃض ÙĪØ±", + "Ġthá»ĭ t", + "ä¹ ³", + "Ġ ìĭłì²Ń", + "Ġìĭł ì²Ń", + "Ġíĺ Ħìŀ¬", + "ĠíĺĦ ìŀ¬", + "Ġ ë¹ł", + "Ġë¹ ł", + "вÑĢоп ей", + "Ġne jen", + "Ġnej en", + "Ñĸ ка", + "Ñĸк а", + "Ġ ìļ¸", + "Ġìļ ¸", + "ĠÙħ بار", + "ĠÙħب ار", + "Ġ Äįek", + "ĠÄį ek", + "ĠÄįe k", + "Ġk alk", + "Ġka lk", + "Ġkal k", + "Ġ amac", + "Ġa mac", + "Ġam ac", + "Ġama c", + "اد ت", + "ĠÙħ اسÙĩ", + "ĠÙħا سÙĩ", + "Ġarasında ki", + "Ġaras ındaki", + "Ġб еÑģ", + "ĠоÑĤд елÑĮ", + "ĠоÑĤдел ÑĮ", + "á½ ¶", + "ĠΤ ζ", + "v yk", + "vy k", + "ج ÙĨ", + "» ê²Į", + "ĠниÑĩ его", + "ĠØ´ اÙħÙĦ", + "ĠÑĥÑģловиÑı Ñħ", + "la ması", + "lam ası", + "lama sı", + "è½ ī", + "ç¾ ½", + "Ġж ид", + "ĠоÑĤ ноÑģ", + "ĠздÑĸйÑģ нÑİ", + "Ġ VỼi", + "ĠV Ỽi", + "ÙĪ ÙĦÛĮ", + "ÙĪÙĦ ÛĮ", + "Ġt isÃŃ", + "Ġti sÃŃ", + "ĠÏĩ ÏģÏĮ", + "Ġprac ovnÃŃ", + "Ġpracov nÃŃ", + "ĠÙĬ ÙĥÙĪÙĨ", + "ĠÙĬÙĥ ÙĪÙĨ", + "Ġb eÅŁ", + "Ġbe ÅŁ", + "ج ز", + "ั à¸ļร", + "ัà¸ļ ร", + "ĠYön et", + "Ġشر اÛĮØ·", + "ĠتÙĪØ³ عÙĩ", + "çĹ ĩ", + "à¸ĩ à¹Ģà¸Ľ", + "ä¸Ģ 次", + "ĠÐłÐ¾ÑģÑģий Ñģкой", + "æľĢ é«ĺ", + "Ġsp olu", + "Ġspo lu", + "Ġspol u", + "д аеÑĤÑģÑı", + "да еÑĤÑģÑı", + "даеÑĤ ÑģÑı", + "Ñĸ ÑĤÑĥ", + "ÑĸÑĤ Ñĥ", + "Ġоб ÑĢаÑĤ", + "ĠобÑĢа ÑĤ", + "e nek", + "en ek", + "ene k", + "Ġ mek", + "Ġm ek", + "Ġme k", + "å¦ Ī", + "Ġдоп олниÑĤелÑĮ", + "Ġ ç²", + "Ġç ²", + "ĠÙĦ ÙĦت", + "ĠÙĦÙĦ ت", + "ĠHaz iran", + "æ¸ Ī", + "à¹Į à¸Ĥà¸Ńà¸ĩ", + "ĠÑĦ он", + "Ġê²ĥ ìľ¼ë¡ľ", + "Ġnh é", + "Ġbu gün", + "Ġbug ün", + "ov ém", + "ové m", + "Ġза веÑĢ", + "Ġзав еÑĢ", + "Ġд виг", + "Ġдв иг", + "Ġдви г", + "ä¼ Ļ", + "Ġnu ôi", + "меÑĢ Ð¸Ðº", + "ме ÑĢик", + "ĠÙĨÙħ ÙĪÙĨÙĩ", + "èį ·", + "Ñĥ вала", + "Ñĥв ала", + "Ñĥва ла", + "ç¿ »", + "Ġs ân", + "ог оÑİ", + "ого Ñİ", + "ا سÙĬØ©", + "اس ÙĬØ©", + "اسÙĬ Ø©", + "Ñĥн кÑĤ", + "Ñĥнк ÑĤ", + "á nÃŃm", + "án ÃŃm", + "ánÃŃ m", + "ен ное", + "енно е", + "Ġph út", + "Ġ मर", + "Ġम र", + "ĠاÙĦ ÙĪØ·", + "ĠاÙĦÙĪ Ø·", + "Ġлег ко", + "Ġ ãĢĭ", + "ĠãĢ ĭ", + "ë¡ľ ëĵľ", + "ĠKas ım", + "ÙĬ ÙĦÙĬ", + "ÙĬÙĦ ÙĬ", + "ĠbaÄŁlantı lar", + "ĠÑĤ ÑĢÑĥд", + "ĠÑĤÑĢ Ñĥд", + "ĠÑĤÑĢÑĥ д", + "Ø· Ùĩ", + "Ġk vůli", + "ÑģÑĤ оÑı", + "Ġsat Ä±ÅŁ", + "Ġh áºŃu", + "ĠبÙĩ ترÛĮÙĨ", + "ĠبÙĩتر ÛĮÙĨ", + "ĠÑģ елÑĮ", + "ĠÑģел ÑĮ", + "ั à¸Ļว", + "ัà¸Ļ ว", + "o su", + "os u", + "य न", + "åĽ ³", + "ι δ", + "ÛĮ تÛĮ", + "ÛĮت ÛĮ", + "ĠQu áºŃn", + "Ġ ей", + "Ġе й", + "à¹Ģว ลา", + "à¹Ģวล า", + "ìĬ¤ íĥĢ", + "ìĤ¬ 를", + "Ġا ÙĩÙĦ", + "ĠاÙĩ ÙĦ", + "η γ", + "Ġk á»·", + "Ġká» ·", + "Ġ наÑĤ", + "Ġн аÑĤ", + "Ġна ÑĤ", + "âĢ ¡", + "Ñĸ ÑĩниÑħ", + "ÑĸÑĩ ниÑħ", + "ĠÑĢазвиÑĤи Ñı", + "ĠÑĢазви ÑĤиÑı", + "e cial", + "ec ial", + "eci al", + "ĠÑħ озÑı", + "в аеÑĤ", + "ва еÑĤ", + "ĠÄIJ á»Ļ", + "ĠÄIJá» Ļ", + "Ġ éĵ", + "Ġé ĵ", + "Ġok am", + "ĠвÑģ ÑĸÑħ", + "ĠвÑģÑĸ Ñħ", + "ĠPr aze", + "ĠPra ze", + "ë¥ ł", + "ι κα", + "ικ α", + "æ¬ ²", + "Ġgerçek leÅŁ", + "ç¥ ĸ", + "Ġод ним", + "Âł M", + "Ġre nk", + "Ġr enk", + "Ġren k", + "Ġल à¤ķ", + "ãĥķ ãĤ§", + "ãĥķãĤ §", + "ĠÙĨ زد", + "å¹ »", + "Ġúzem ÃŃ", + "æı ¡", + "а лиÑģÑı", + "али ÑģÑı", + "Ġ ÃĶ", + "Ġà Ķ", + "Ġy orum", + "Ġyo rum", + "ĠÏĢ ÏģÏī", + "ãĥ³ ãĥĩ", + "ãĥ³ãĥ ĩ", + "éĸĭ å§ĭ", + "ãĥ¼ ãĥª", + "ãĥ¼ãĥ ª", + "Ġìĸ¼ êµ´", + "Û± Û±", + "Û±Û ±", + "lü ÄŁÃ¼", + "lÃ¼ÄŁ ü", + "ÙĨ Ø´", + "à¹Ī ำ", + "èĽ ĭ", + "ĠØ£ د", + "ĠW illi", + "ĠWill i", + "ĠWil li", + "ĠWi lli", + "èª ²", + "Ġsür dür", + "ĠEx ternÃŃ", + "Ġp ůvod", + "Ġpů vod", + "ĠØ® اÙĨÙĪ", + "ĠخاÙĨ ÙĪ", + "ĠкоÑĤоÑĢ Ð¾Ðµ", + "Ġm ohl", + "Ġmo hl", + "Ġmoh l", + "Ġs tÄĽ", + "Ġst ÄĽ", + "åĩ ı", + "ìĤ ¼", + "aban cı", + "à¹ģ à¸Ļ", + "สำ à¸Ħ", + "æĤ £", + "ab ilece", + "abil ece", + "abile ce", + "éĺ³ åŁİ", + "Îij Îļ", + "Ġch ữa", + "Ġchữ a", + "ĠìķĦ ëĭ", + "طبÙĬ ÙĤ", + "طب ÙĬÙĤ", + "ÎĻ ÎŁÎ¥", + "ÎĻÎŁ Î¥", + "ÑĢ Ð¾Ð²Ð°Ð½Ð¸Ðµ", + "ÑĢов ание", + "ÑĢо вание", + "ÑĢован ие", + "ÑĢова ние", + "åĩ ½", + "Ġ ì¼", + "Ġì ¼", + "ÑĢ Ð¾ÑĦ", + "ÑĢо ÑĦ", + "à¹ĩ à¸Ļส", + "à¹ĩà¸Ļ ส", + "Ġ ãĤ¦", + "ĠãĤ ¦", + "ï¼ļ ãĢĮ", + "á»ĭ a", + "Ġ hPa", + "Ġh Pa", + "m anı", + "man ı", + "ál nÃŃho", + "álnÃŃ ho", + "ÙĪ ØªÛĮ", + "ÙĪØª ÛĮ", + "ĠлеÑĩ ениÑı", + "j te", + "jt e", + "- д", + "åħ¨ åĽ½", + "ĠбÑĥд Ñĸв", + "Ġz atÃŃm", + "Ġzat ÃŃm", + "Ġ öyle", + "Ġö yle", + "ìĿ´ ê°Ģ", + "s tal", + "st al", + "sta l", + "i vatel", + "iv atel", + "ivate l", + "iva tel", + "Ġ æľª", + "Ġpož ad", + "ĠÑģ ни", + "Ġpos lednÃŃ", + "Ġposled nÃŃ", + "ĠÑģÑĤ анд", + "ĠÑģÑĤан д", + "ĠÑģÑĤа нд", + "à¥Ģ à¤ıम", + "à¥Ģà¤ı म", + "Ġ عکس", + "Ġع کس", + "ÑĢ Ð¸Ñı", + "ÑĢи Ñı", + "ã y", + "á»ĭ p", + "Ġo kul", + "Ġok ul", + "Ġoku l", + "à¸ĩ หมà¸Ķ", + "Ġвоз ник", + "m ÃŃ", + "ç§ Ł", + "ĠÄij á»ijc", + "Ġp odÃŃ", + "Ġpo dÃŃ", + "Ġpod ÃŃ", + "ĠÅĻÃŃ j", + "ĠÑĤак Ñĸ", + "ĠÑĤа кÑĸ", + "à¸ļ าà¸Ĺ", + "Ġ 보기", + "Ġë³´ 기", + "ล า", + "еÑģ ÑĤо", + "еÑģÑĤ о", + "Ġ ç͍", + "и нÑĭ", + "ин Ñĭ", + "ĠÑĢ ÑĥÑħ", + "ĠÑĢÑĥ Ñħ", + "ĠÑĢаÑģп олож", + "Ñī еннÑı", + "Ġc á»Ń", + "à¹ī à¸ļร", + "à¥įयव स", + "ï¾ ļ", + "Ġд алÑĮ", + "Ġда лÑĮ", + "Ġдал ÑĮ", + "Ġض د", + "ÙĦ ÙĬØ©", + "ÙĦÙĬ Ø©", + "ĠкоÑĤоÑĢ Ð¾Ð³Ð¾", + "Ġd ve", + "Ġdv e", + "Ġnh ạc", + "ÑĦ Ñĸка", + "ÑĦÑĸ ка", + "ÑĦÑĸк а", + "à¥Ī à¤Ł", + "èĩª çͱ", + "Ġпо ÑĢÑĥÑĪ", + "ĠпоÑĢ ÑĥÑĪ", + "æľĭ åıĭ", + "Ġd ört", + "Ġdö rt", + "ĠÑĢаÑģп ÑĢоÑģÑĤ", + "ãģ§ ãģ¯ãģªãģĦ", + "ãģ§ãģ¯ ãģªãģĦ", + "ĠпеÑĢ ÐµÐ³", + "ĠпеÑĢе г", + "Ġ ánh", + "Ġá nh", + "Ġán h", + "ĠV ÃŃ", + "ظ Ù¹", + "à¥į रण", + "à¥įर ण", + "Ġb ilim", + "Ġbi lim", + "Ġbil im", + "Ġlid é", + "Ġd ÃŃky", + "ĠdÃŃ ky", + "ĠÄIJ á»ĵng", + "Ġ εÏģγ", + "Ġε Ïģγ", + "Ġzn ovu", + "Ïĥ ια", + "Ïĥι α", + "Ñ ŀ", + "स à¤Ń", + "e kk", + "ek k", + "Ġμε ÏĦά", + "ÑģÑĤ иÑĩ", + "ÑģÑĤи Ñĩ", + "ÛĮ ÙĨÚ¯", + "ÛĮÙĨ Ú¯", + "ĠÑıв лÑıÑİÑĤÑģÑı", + "Ġ 建", + "Ġå» º", + "Ïĥ Ïĥα", + "ÏĥÏĥ α", + "ав лива", + "à¸ģ รม", + "à¸ģร ม", + "ç¬ Ķ", + "Ġ ге", + "Ġг е", + "Ġ رÙĩ", + "Ġر Ùĩ", + "Ġм ел", + "Ġна пÑĢимеÑĢ", + "ĠнапÑĢи меÑĢ", + "Ġм ик", + "Ġми к", + "ĠاÙĦس ÙĥاÙĨ", + "æ¤ ľ", + "ĠÐļ ÑĢа", + "Ġv Ãłi", + "ĠvÃł i", + "ائ Ùħ", + "ĠÏĩ Ïģή", + "leÅŁ me", + "Ġ jas", + "Ġj as", + "Ġja s", + "ê²Į ìŀĦ", + "Ġm aç", + "Ġma ç", + "Ġì§Ħ íĸī", + "à¥ĩद न", + "Ġvů bec", + "ĠÙĦ ÙĨ", + "è« ĩ", + "âī¡ âī¡", + "л ением", + "ление м", + "лен ием", + "ле нием", + "ع ÙĨÛĮ", + "عÙĨ ÛĮ", + "ãĥŀ ãĥ³", + "İ Z", + "ĠÃĸ ÄŁ", + "ĠìŬ ìŀIJ", + "y Å¡", + "Ġ ÑģÑĤа", + "ĠÑģ ÑĤа", + "ĠÑģÑĤ а", + "Ġ สำหร", + "Ġสำ หร", + "Ġन व", + "ãĢĤ ä½Ĩ", + "олÑĮ но", + "Ġyan ında", + "Ġyanı nda", + "è² ´", + "Ġjednot liv", + "Ġ åİŁ", + "Ġåİ Ł", + "éłħ 缮", + "Ġमद द", + "리 ìĹIJ", + "ĠÙħ اÙĬ", + "ĠÙħا ÙĬ", + "ĠÑĩ еÑĢв", + "ĠÑĩеÑĢ Ð²", + "Ġd áv", + "Ġdá v", + "ÙĦ ÛĮÙĩ", + "ÙĦÛĮ Ùĩ", + "? #", + "Äį nÃŃm", + "ÄįnÃŃ m", + "ÑĢ ÐµÐ³", + "ÑĢе г", + "ĠпÑĢимен Ñı", + "ĠпÑĢим енÑı", + "ãĤĬ ãģ¨", + "ê° Ļ", + "Ġtop lam", + "Ġtopl am", + "i leÅŁ", + "il eÅŁ", + "ile ÅŁ", + "Ġk ategor", + "ÑĤ ал", + "ÑĤа л", + "ãģ«ãĤĪ ãĤĭ", + "Ġdom ác", + "Ġ ê·ľ", + "Ġê· ľ", + "ĠÙĩ زار", + "ĠpÅĻÃŃ stup", + "ĠpÅĻÃŃst up", + "ı lıyor", + "ılı yor", + "ıl ıyor", + "ж ди", + "жд и", + "ĠD ương", + "ĠPh áºŃt", + "Ġç ünkü", + "구 ê¸ĢìĥģìľĦ", + "ov aných", + "ova ných", + "ovan ých", + "ovaný ch", + "Ġع Ø´", + "Ġà¤ķर à¤ķ", + "ž ÃŃt", + "žÃŃ t", + "Ġ vÄĽtÅ¡ÃŃ", + "ĠvÄĽt Å¡ÃŃ", + "ĠvÄĽtÅ¡ ÃŃ", + "ĠاÙħ کاÙĨ", + "Ġn ông", + "Ġz ám", + "Ġzá m", + "à¥Į न", + "е каÑĢ", + "ек аÑĢ", + "ека ÑĢ", + "Âł Т", + "k ami", + "ka mi", + "ĠÑĢеÑģ ÑĥÑĢ", + "п оÑģ", + "по Ñģ", + "Ùİ ÙĤ", + "ί λ", + "Ġ سازÛĮ", + "Ġس ازÛĮ", + "Ġساز ÛĮ", + "Ġçık an", + "Ġçı kan", + "ĠdÃŃ tÄĽ", + "Ġتص ÙĪ", + "ç¯ ĩ", + "н д", + "Ġrám ci", + "h ong", + "ho ng", + "hon g", + "Ġ ÑģÑĸм", + "ĠÑģ Ñĸм", + "s ak", + "sa k", + "к еÑĤ", + "ке ÑĤ", + "д Ñĸл", + "дÑĸ л", + "ç¹ Ķ", + "Ġth Æ°á»Łng", + "Ġне ÑĹ", + "з Ñĸ", + "ÅĻ ÃŃd", + "ÅĻÃŃ d", + "ित न", + "à¤ı à¤ķ", + "Ġs ữa", + "ĠÙħ رØŃ", + "ĠÙħر ØŃ", + "é ŀ", + "Ġc ưá»Ŀng", + ": .:", + ":. :", + "ÑĤ ен", + "ÑĤе н", + "èī ¦", + "Ġkh ợi", + "Ġ 기ì¤Ģ", + "Ġ기 ì¤Ģ", + "lan ır", + "彩 票", + "ض ÛĮ", + "Ġuz av", + "Ġb oh", + "Ġbo h", + "è m", + "Ġ æ£", + "Ġæ £", + "n ici", + "ni ci", + "nic i", + "( çģ«", + "åħ³ äºİ", + "Ñĸ ÑĩнÑĸ", + "ÑĸÑĩ нÑĸ", + "à¸ģ ารà¸ĵ", + "à¸ģาร à¸ĵ", + "Ġì² «", + "ÑĢ ÑĥеÑĤ", + "ÑĢÑĥ еÑĤ", + "ĠarÅŁiv lendi", + "ÑĤ им", + "ÑĤи м", + "า à¸ł", + "าภł", + "Ġبر ابر", + "Ġ à¹Ģà¸ĭ", + "Ġà¹Ģ à¸ĭ", + "Ġà¹Ģภĭ", + "ĠÄij êm", + "è· ³", + "Ġyön etim", + "Ġyönet im", + "Ġ éķ·", + "Ġéķ ·", + "ãĥĨ ãĥ¬ãĥĵ", + "м аÑĤи", + "ма ÑĤи", + "маÑĤ и", + "è´£ ä»»", + "ick ým", + "ický m", + "è ¸", + "à¹Ģห à¸ķ", + "ëł Į", + "Ġ رÙĬ", + "Ġر ÙĬ", + "ĠвÑĭ дел", + "åĩº çݰ", + "Ġп еÑģ", + "Ġì¢ĭ ìĿĢ", + "Ġà¤ī सन", + "Ġà¤īस न", + "ĠAr alık", + "ĠAra lık", + "ĠÑĩа ÑģÑĥ", + "ĠÑĩаÑģ Ñĥ", + "l ava", + "la va", + "lav a", + "Ġ ï½ŀ", + "Ġï½ ŀ", + "æģ ĭ", + "د ÛĮد", + "دÛĮ د", + "âĢĻ den", + "âĢĻd en", + "âĢĻde n", + "Ġ åĪĿ", + "ĠåĪ Ŀ", + "ÙĪ Ø¯Ø©", + "ÙĪØ¯ Ø©", + "Ñĩ или", + "Ñĩи ли", + "Ñĩил и", + "ĠÑħаÑĢакÑĤ еÑĢиÑģÑĤи", + "ا ستاÙĨ", + "اس تاÙĨ", + "است اÙĨ", + "द र", + "ĠبÙĪØ¯ ÙĨ", + "ĠبÙĪ Ø¯ÙĨ", + "Ġп алÑĮ", + "Ġпа лÑĮ", + "Ġпал ÑĮ", + "ĠÑĤ ÑĢади", + "ĠÑĤÑĢ Ð°Ð´Ð¸", + "ĠÑĤÑĢа ди", + "Ġд еÑı", + "Ġде Ñı", + "Ġ خش", + "ĠØ® Ø´", + "Ġpok raÄį", + "Ġ구 ê¸Ģ", + "к овÑĸ", + "ко вÑĸ", + "ков Ñĸ", + "Ġ tık", + "Ġt ık", + "Ġh ấp", + "Ġza lož", + "Ġzal ož", + "१ à¥", + "Ġëĭµ ë³Ģ", + "м еÑĪ", + "ме ÑĪ", + "íļ ¨", + "Ġspol up", + "Ġspolu p", + "Ë Ĩ", + "è¾ ¦", + "Ġg á»Ĺ", + "Ġ å®ļ", + "Ġå® ļ", + "ĵ n", + "as ından", + "asında n", + "- ı", + "ĠбеÑĢ ÐµÐ·", + "大 åѸ", + "Ġз нов", + "Ġзн ов", + "ĠHo Ãłng", + "Ġد ÙĪÙĨ", + "ĠدÙĪ ÙĨ", + "Ġan lay", + "ĠÙĪ Ø²Ø§Ø±", + "ĠÙĪØ² ار", + "ĠعÙĦ ÙħÛĮ", + "ĠعÙĦÙħ ÛĮ", + "è£ ľ", + "Ġdü nya", + "Ġdün ya", + "Ġdüny a", + "Ġза лиÑĪ", + "Ġзал иÑĪ", + "Ġзали ÑĪ", + "д аеÑĤ", + "да еÑĤ", + "ν ε", + "и ÑĩеÑģкого", + "иÑĩеÑģ кого", + "ìĬ¤ íħľ", + "ĠÐij еÑĢ", + "Ġ дж", + "Ġд ж", + "Ġ опаÑģ", + "Ġоп аÑģ", + "ÏĨ α", + "Ġzv lá", + "Ġt ô", + "б еÑĢ", + "бе ÑĢ", + "ĠÎľ αÏģ", + "Ġξα Ïģ", + "ti ÄŁini", + "tiÄŁi ni", + "ãĥ¬ ãĥ³", + "ĠK ho", + "ĠKh o", + "ĠÑĸн ÑĪ", + "Ġ ï¿¥", + "ì° ¬", + "ï½ ¡", + "Ġ ноÑĩ", + "Ġн оÑĩ", + "Ġно Ñĩ", + "è¨ Ĭ", + "ÄĽ ti", + "ÄĽt i", + "å¿ Ļ", + "Ġکرد ÙĨد", + "ĠکردÙĨ د", + "ĠÄij ẩy", + "ĠÑģказ ав", + "ëĥ ¥", + "å± ¬", + "Ġश हर", + "ĠÚ©Ùħ Ú©", + "Âł ÐŁ", + "ın ca", + "нÑĸвеÑĢ ÑģиÑĤ", + "Ġ Ú¯ÙĪÙĨÙĩ", + "ĠÚ¯ ÙĪÙĨÙĩ", + "ĠÚ¯ÙĪ ÙĨÙĩ", + "ĠTop lam", + "ĠiÅŁ aret", + "ä½ł 们", + "Ġd erece", + "Ġde rece", + "Ġder ece", + "Ġdere ce", + "Ġderec e", + "ĠìĤ¬ ìĭ¤", + "Ġ ìŀIJ기", + "ĠìŀIJ 기", + "å®ŀ çݰ", + "çĶŁ çī©", + "ãģ® ä¸Ģ", + "Ġ ÑĢом", + "ĠÑĢ Ð¾Ð¼", + "ÙĪ Ø²Ùĩ", + "ÙĪØ² Ùĩ", + "Ġ ãģ¨", + "íĻ į", + "ÙĬ ÙĤ", + "Ġ åIJįçĦ¡ãģĹãģķãĤĵ", + "ĠåIJį çĦ¡ãģĹãģķãĤĵ", + "ĠåIJįçĦ¡ãģĹ ãģķãĤĵ", + "ĠÙ¾ ÛĮر", + "ĠÙ¾ÛĮ ر", + "Ġпол ез", + "ì¶ ©", + "ĠкоÑĢ Ð¿", + "IJ ëĭ¤", + "á» «a", + "ừ a", + "Îķ Τ", + "Ġжел ез", + "ãģ£ãģ ±", + "Ġx uyên", + "Ġ ë¥", + "Ġë ¥", + "à¥ĩ ।Ċ", + "à¥ĩ। Ċ", + "ĠÑģÑĤ али", + "ĠÑģÑĤал и", + "ĠÑģÑĤа ли", + "Ġpomoc ÃŃ", + "Ġdurum da", + "Ġп ÑĢоÑĪ", + "ĠпÑĢ Ð¾ÑĪ", + "ĠпÑĢо ÑĪ", + "l enÃŃ", + "le nÃŃ", + "len ÃŃ", + "β ολ", + "βο λ", + "Ġ æĸĩ竳", + "Ġæĸĩ 竳", + "tÄĽ z", + "d ÃŃl", + "dÃŃ l", + "Ġdruh é", + "ĠÑĤ огда", + "Ġh rá", + "Ġhr á", + "о ÑĤÑĮ", + "оÑĤ ÑĮ", + "า à¸ģร", + "าà¸ģ ร", + "Ġتص Ùħ", + "ĠÙħد ت", + "ка дем", + "Ġpat ÅĻÃŃ", + "ä¹ĭ åīį", + "س بة", + "سب Ø©", + "Ġпо кÑĢÑĭ", + "Ġпок ÑĢÑĭ", + "Ġn áp", + "Ġná p", + "Ġ_ {}", + "Ġ_{ }", + "ëĵ± íķĻêµIJ", + "ĠØ¥ ÙĦÙĬ", + "ĠØ¥ÙĦ ÙĬ", + "Ġöz g", + "çļ Ĩ", + "Ġhay van", + "ĠN isan", + "ĠNi san", + "غ از", + "Ġت ت", + "ĠдÑĥ Ñħов", + "ĠдÑĥÑħ ов", + "ĠÐŁÐ¾ ÑįÑĤомÑĥ", + "ÑĮ огод", + "ÑĮого д", + "Ġk uÅŁ", + "Ġku ÅŁ", + "Ġà¤ĩ सम", + "Ġà¤ĩस म", + "ج ÛĮ", + "Ġ ãĤ¿", + "ĠãĤ ¿", + "Ġв кÑĥÑģ", + "Ġвк ÑĥÑģ", + "ĠвкÑĥ Ñģ", + "ç Ģ", + "ĠвÑĭ ÑĪе", + "âĢĻ dan", + "âĢĻd an", + "âĢĻda n", + "ĠاØŃ Ùħد", + "Ġtal ep", + "Ġta lep", + "Ġtale p", + "Ġ ÏĪ", + "ĠÏ Ī", + "Ġdol ayı", + "Ġdolay ı", + "ĠÚ¯ زارش", + "б ол", + "бо л", + "ĠاÛĮÙĨ تر", + "ÑĢ Ð¾Ñĩ", + "ÑĢо Ñĩ", + ") âĢı", + "Ġ ëIJł", + "ĠëIJ ł", + "Ġk oup", + "Ġko up", + "Ġkou p", + "( æľĪ", + "é± ¼", + "Ġ огÑĢа", + "Ġо гÑĢа", + "Ġог ÑĢа", + "ĠÑĢаз м", + "ĠÑĢа зм", + "Ġت ست", + "Ġتس ت", + "ĠpÅĻÃŃ slu", + "í ĽĪ", + "ĠëĮĢ íķ´", + "à¹ģ à¸Ľ", + "ан нÑĭе", + "аннÑĭ е", + "ĠìĿ¸ íĦ°", + "Ġkullan ılan", + "Ġkullanı lan", + "Ġkullanıl an", + "Ġz tr", + "æĬĢ è¡ĵ", + "ि à¤Ľ", + "िठĽ", + "ĠاÙĦÙħ ؤ", + "ov aly", + "ova ly", + "oval y", + "us tos", + "ust os", + "usto s", + "Ġö rg", + "Ġör g", + "Ġ 太", + "Ġå¤ ª", + "ε ιο", + "ει ο", + "Ġ uÄį", + "Ġu Äį", + "ĠØ´ Ú©ÙĦ", + "ĠØ´Ú© ÙĦ", + "建 çŃij", + "Ġch ạy", + "ĠÏĩ Ïģη", + "н ÑĥÑĤ", + "нÑĥ ÑĤ", + "Ġباع Ø«", + "ĠNÄĽk ter", + "ÑĥÑĤ ÑĤÑı", + "ãģ§ãģĻ ãģĭ", + "Ġsay ılı", + "Ġsayı lı", + "им оÑģÑĤÑĮ", + "имо ÑģÑĤÑĮ", + "ĠпиÑĤ аннÑı", + "Ġk ÃŃnh", + "Ġh ran", + "Ġhr an", + "Ġhra n", + "ok rat", + "Ġed ilir", + "Ġedil ir", + "Ġà¤ķह त", + "Ġp aci", + "Ġpa ci", + "Ġpac i", + "ाल न", + "Ġи де", + "Ġид е", + "ĠZ em", + "ĠZe m", + "Ġsluž by", + "ÑģÑĤв еннÑĭй", + "ÑģÑĤвен нÑĭй", + "ĠØ¢ ÙĨاÙĨ", + "ĠØ¢ÙĨ اÙĨ", + "ĠÑĤ оваÑĢи", + "ĠÑĤоваÑĢ Ð¸", + "ĠÑĤов аÑĢи", + "ĠتØŃ ÙħÙĬÙĦ", + "ĠY ük", + "Ġк аÑĤегоÑĢ", + "ĠкаÑĤ егоÑĢ", + "íĭ Ģ", + "Ġк оÑģ", + "Ġко Ñģ", + "Ġ обов", + "Ġо бов", + "Ġоб ов", + "Ġобо в", + "ĠprostÅĻed ÃŃ", + "ĠÑģ оÑģ", + "ĠÑģо Ñģ", + "ĠÐIJ лекÑģанд", + "ĠÐIJлекÑģ анд", + "Ġ à¹Ģà¸Ĥà¸ķ", + "Ġà¹Ģà¸Ĥ à¸ķ", + "å¿ħ é¡»", + "ั à¸Ĭ", + "ĠÙĦ د", + "ãĢģ ä¸Ģ", + "ĠÎľ ÎŃ", + "Ñĥ ваÑĤиÑģÑı", + "Ñĥв аÑĤиÑģÑı", + "ÑĥваÑĤи ÑģÑı", + "Ñĥва ÑĤиÑģÑı", + "æķ ı", + "ãĥ¼ ãĥIJ", + "ãĥ¼ãĥ IJ", + "اÙĦ ÙĦÙĩ", + "Ġب Ùĩا", + "ĠبÙĩ ا", + "åĸ ¶", + "è´ µ", + "æĸ¹ åIJij", + "Ġ ì¸", + "Ġì ¸", + "Ġ ÙĨاÙħÙĩ", + "ĠÙĨ اÙħÙĩ", + "ĠÙĨاÙħ Ùĩ", + "ÑĮ ко", + "Ġv ody", + "Ġvo dy", + "Ġvod y", + "v ÃŃc", + "vÃŃ c", + "à¹ģ à¸Ī", + "Ġع ÙĦÛĮÙĩ", + "ĠعÙĦ ÛĮÙĩ", + "ĠعÙĦÛĮ Ùĩ", + "à¹ģ รà¸ĩ", + "ί να", + "ίν α", + "ãģ ¬", + "Ġ Ðŀп", + "ĠÐŀ п", + "Ġsay f", + "ï¼Į çͱ", + "ä¼ ´", + "ĠÑĥд об", + "ãģ¾ ãģł", + "Ġне пÑĢи", + "Ġнеп ÑĢи", + " İ", + "à¤¾à¤ľ प", + "pl nÄĽ", + "Ġ ìĹĦ", + "ĠìĹ Ħ", + "Ġrů zn", + "Ġrůz n", + "Ġx ếp", + "ãĥĸ ãĥ«", + "ĠзаÑħ иÑģÑĤ", + "ĠÙħص رÙģ", + "ĠÙħصر Ùģ", + "ĠvÅ¡ech no", + "ãģ® ãģĬ", + "ĠTh á»ĭ", + "Ġm ùa", + "¿ IJ", + "ĠпÑĢин ÑĨип", + "ĠاÙĨ ÙĤÙĦ", + "г аÑĢ", + "га ÑĢ", + "Ġmož nost", + "ÙĤ ÙĬÙĤ", + "ÙĤÙĬ ÙĤ", + "Ġotev ÅĻ", + "Ġ fak", + "Ġf ak", + "Ġfa k", + "Ġng uy", + "Ġngu y", + "б ов", + "бо в", + "l acaÄŁ", + "lac aÄŁ", + "ا طر", + "اط ر", + "ãģ« ãĤĪãĤĬ", + "ãģ«ãĤĪ ãĤĬ", + "æĺ¯ åľ¨", + "Ġt ầng", + "ìĿ¸ ìĿ´", + "a ÅĻ", + "ç ¢°", + "ç¢ °", + "ÏĮ με", + "Ġ ê°Ī", + "Ġê° Ī", + "ĠØ£ ØŃد", + "ĠØ£ØŃ د", + "غ راÙģ", + "غر اÙģ", + "ĠÙĬ ØŃ", + "ï½ §", + "ĠاÙĦØŃÙĬ اة", + "Ġ lep", + "Ġl ep", + "Ġle p", + "Ġ ฮ", + "Ġภ®", + "t ae", + "ta e", + "Ġl ương", + "è½ ®", + "Ġз мÑĸн", + "ĠзмÑĸ н", + "Ġзм Ñĸн", + "ĠÐļи ÑĹв", + "ĠмÑĸ ÑģÑı", + "ĠмÑĸÑģ Ñı", + "к ав", + "ка в", + "à¸ķ ะ", + "Ġm noho", + "Ġmn oho", + "Ġmnoh o", + "ĠNgh á»ĭ", + "èĻ İ", + "Ġ ãĥŁ", + "Ġãĥ Ł", + "Ġp ráci", + "Ġpr áci", + "Ġprá ci", + "Ġg á»ijc", + "ĠY eni", + "ĠYe ni", + "ĠYen i", + "ا ضÙĬ", + "اض ÙĬ", + "Ġ èij", + "Ġè ij", + "Ġк ла", + "Ġкл а", + "ı ng", + "ÏĦ εί", + "ÏĦε ί", + "Ġb eni", + "Ġbe ni", + "Ġben i", + "Ġ عد", + "Ġع د", + "Ġ aktu", + "Ġak tu", + "Ġakt u", + "ĠÙĪ ÙĤد", + "ĠÙĪÙĤ د", + "Ġпод гоÑĤов", + "Ġgi ai", + "Ġgia i", + "( æ°´", + "Ġs aç", + "Ġsa ç", + "ĠÙħÙĨ اسب", + "ĠÙħÙĨاس ب", + "âĸ ĭ", + "ÙIJ Ùĩ", + "é į", + "à¸Ń à¸Ĺ", + "ĠسÛĮ اسÛĮ", + "o lit", + "ol it", + "oli t", + "ĠاÙĦ جز", + "ĠاÙĦج ز", + "Ø· ÙĦب", + "Ø·ÙĦ ب", + "Ġ sey", + "Ġs ey", + "Ġse y", + "e rence", + "er ence", + "ere nce", + "eren ce", + "ì´ Į", + "ĠвнÑĥÑĤÑĢ ÐµÐ½", + "ĠвнÑĥÑĤ ÑĢен", + "Ġ à¸Ļาย", + "Ġà¸Ļ าย", + "ĠìķĬ ìķĺëĭ¤", + "ĠìķĬìķĺ ëĭ¤", + "o lik", + "ol ik", + "oli k", + "æľĢ åIJİ", + "ä» ª", + "Ġ ÑĢÑĸд", + "ĠÑĢ Ñĸд", + "è¼ ĥ", + "Ġ باب", + "Ġب اب", + "Ġبا ب", + "Ñĥ ди", + "Ñĥд и", + "Ġ ÑģÑĤÑĥп", + "ĠÑģÑĤ Ñĥп", + "ĠÄij ứng", + "ĠÄijứ ng", + "ĠÅŁ öyle", + "Ġ íķĻìĥĿ", + "ĠíķĻ ìĥĿ", + "Ġв лаÑģÑĤи", + "Ġвла ÑģÑĤи", + "ĠвлаÑģ ÑĤи", + "Ġh ãng", + "Ġhã ng", + "à¹ī าว", + "à¹īา ว", + "ĠÚ© اÙĩØ´", + "Ġ ëĵ¯", + "Ġëĵ ¯", + "ĠجÙħ ÙĦÙĩ", + "Ġد کتر", + "ad olu", + "ado lu", + "adol u", + "Ġت بد", + "Ġتب د", + "ظ اÙħ", + "Ġz naÄį", + "Ġzn aÄį", + "Ġد ÙĨÛĮ", + "ĠدÙĨ ÛĮ", + "Ġs ạn", + "å¼ ±", + "ÏĢ Î¹", + "Ġ çIJĨ", + "ĠçIJ Ĩ", + "Ġ Ù쨵ÙĦ", + "ĠÙģ ØµÙĦ", + "и нг", + "ин г", + "Ðļ Ðŀ", + "ĠС ов", + "ĠСо в", + "Ġziy aret", + "Ġ دÙħ", + "Ġد Ùħ", + "ç« ¹", + "Ġsah ibi", + "is ayar", + "isa yar", + "isay ar", + "ÄŁ a", + "ĠпеÑĢÑĸ од", + "Ġs na", + "Ġsn a", + "( æľ¨", + "Ġ нее", + "Ġн ее", + "Ġне е", + "ĠÑĦак ÑĤоÑĢ", + "ĠÑĦакÑĤ оÑĢ", + "м еж", + "ме ж", + "åº Ħ", + "r áž", + "rá ž", + "ок ÑĢем", + "Ġž al", + "ิ à¹Ģศษ", + "è± ª", + "ou cÃŃ", + "ĠU lus", + "ĠUl us", + "Ġtak že", + "ا ÙĪÙĨ", + "اÙĪ ÙĨ", + "н иÑĤи", + "ни ÑĤи", + "ниÑĤ и", + "нÑĮ о", + "ëį ¸", + "Ġ Ùĥرة", + "ĠÙĥ رة", + "ĠÙĥر Ø©", + "åľ ³", + "ĠArth ropoda", + "ĠÑĤ одÑĸ", + "ĠÑĤо дÑĸ", + "Ġدر صد", + "ุ รà¸ģ", + "ุร à¸ģ", + "ĠÑģв ого", + "ĠÑģво го", + "说 éģĵ", + "Ġc ánh", + "Ġcá nh", + "Ġcán h", + "æĵ Ĭ", + "Ġ ä¸ĭè½½", + "Ġä¸ĭ è½½", + "èī ¾", + "Ġnik dy", + "Ø® Ø·", + "ĠÑģ ейÑĩаÑģ", + "ÙĪ ÙĬÙĦ", + "ÙĪÙĬ ÙĦ", + "a met", + "am et", + "ame t", + "문 ìĿĺ", + "ĠE ÄŁitim", + "大 ä¼ļ", + "Ġb ÅĻez", + "за ÑĨÑĸÑı", + "Ġty to", + "н ай", + "на й", + "غ Ùħ", + "Ġ é©", + "Ġé ©", + "计 ç®Ĺ", + "Türk iye", + "Ġmn ož", + "åIJĪ ä½ľ", + "æľį åĭĻ", + "Ġkažd ý", + "ĠÑİ ÑĢид", + "Ġ βα", + "Ġβ α", + "à¥Ĥ à¤ļ", + "åIJĮ ãģĺ", + "Ġ çĭ", + "Ġç ĭ", + "ί ÏĦ", + "ÙĪÛĮ ÙĨت", + "ÙĪÛĮÙĨ ت", + "ا ÙĨس", + "اÙĨ س", + "æľĢ 大", + "Ġ Từ", + "ĠT ừ", + "éŃĶ æ³ķ", + "Ġб ли", + "Ġбл и", + "ĠÑĤак ое", + "ĠÑĤа кое", + "ãģ ľ", + "ãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ìĿ´ ë©°", + "ĠÙĤسÙħ ت", + "Ġ оÑĨÑĸ", + "Ġо ÑĨÑĸ", + "н икÑĥ", + "ни кÑĥ", + "ник Ñĥ", + "Ġ Bạn", + "ĠB ạn", + "ĠоÑĢг анÑĸз", + "ĠоÑĢган Ñĸз", + "ĠоÑĢганÑĸ з", + "ü ph", + "üp h", + "Ġ izin", + "Ġi zin", + "Ġiz in", + "Ġ ï¾Ĭ", + "Ġï¾ Ĭ", + "εί ÏĤ", + "à¸ĩ à¹ģà¸ķ", + "ãģ¡ ãĤī", + "ва жа", + "важ а", + "Ġ 欧", + "Ġæ¬ §", + "ι Ïİ", + "ÏĢ ÎŃ", + "Ġк ÑĢеп", + "ĠÑĨ иÑħ", + "ĠÑĨи Ñħ", + "æĦŁ ãģĺ", + "çķ «", + "Ùĥ ÙĪ", + "е мо", + "ем о", + "ž en", + "že n", + "å¹³ æĸ¹", + "ĠÙħجÙħÙĪØ¹ Ùĩ", + "ĠÑģво и", + "Ġ ãĦ", + "à¸Ľà¸£à¸°à¸ģ à¸Ńà¸ļ", + "ĠпÑĢ Ð¾ÑĤи", + "ĠпÑĢо ÑĤи", + "ĠпÑĢоÑĤ и", + "ÙĪ ÛĮÙĩ", + "ÙĪÛĮ Ùĩ", + "认 为", + "ÏĨ ÎŃ", + "и ÑĩеÑģкий", + "иÑĩеÑģ кий", + "иÑĩеÑģки й", + "æ¥ ļ", + "Ġп ап", + "Ġпа п", + "δ Ïģο", + "Ġkullan ım", + "Ġkullanı m", + "Ġz bo", + "Ġzb o", + "Ġú spÄĽ", + "Ġ Ùħز", + "ĠÙħ ز", + "ĠF ak", + "ĠFa k", + "елÑĮ зÑı", + "æ´» åĭķ", + "ĠÐŁ ÑĢав", + "ĠÐŁÑĢ Ð°Ð²", + "ĠÐŁÑĢа в", + "¦ y", + "åĥ ķ", + "æij ĺ", + "Ġر ئ", + "Ġ ÏĨοÏģ", + "ĠÏĨ οÏģ", + "м иÑĤ", + "ми ÑĤ", + "Ġt icaret", + "Ġti caret", + "Ġtic aret", + "æ³ķ å¾ĭ", + "å¹´ 代", + "ìĪ Ļ", + "å ¿ł", + "å¿ ł", + "à¹ĩ à¸Ļà¸Ĺ", + "à¹ĩà¸Ļ à¸Ĺ", + "Ġ Ñĥж", + "ĠÑĥ ж", + "ĠÙħتØŃ دÙĩ", + "Ġtr á»Ŀi", + "Ġ رØŃ", + "Ġر ØŃ", + "ĠÚ©ÙĪ ÚĨ", + "ĠопÑĢед елен", + "ĠопÑĢедел ен", + "ĠزÙħ ÛĮÙĨÙĩ", + "ĠزÙħÛĮÙĨ Ùĩ", + "Ġn óng", + "Ġnó ng", + "Ġng á»§", + "Nh ững", + "Ġк иÑĪ", + "Ġки ÑĪ", + "Ġ jde", + "Ġj de", + "Ġjd e", + "Ġ ä¸Ĭæµ·", + "Ġä¸Ĭ æµ·", + "åĭ ĩ", + "Ġt anı", + "Ġtan ı", + "à¹Į à¹ģละ", + "à¹Įà¹ģ ละ", + "ĠÑĢа ÑģÑĤвоÑĢ", + "ĠÑĢаÑģÑĤ воÑĢ", + "ĠÑģÑĢед ÑģÑĤв", + "Ġc án", + "Ġcá n", + "Ġsyst ému", + "Ġsystém u", + "ÛĮ Ø·", + "ĠÑģиÑģÑĤем а", + "Ġ ëŀ", + "Ġë ŀ", + "Ġ ÑĩеÑĤ", + "ĠÑĩ еÑĤ", + "éĥ¨ éŨ", + "å¸ °", + "Ġm illet", + "Ġmill et", + "Ġmil let", + "ĠÎķ λλά", + "à¥ĩà¤ĸ न", + "Ġrepublik y", + "ÑĢ Ð°Ð¼Ð¸", + "ÑĢа ми", + "ÑĢам и", + "Ġसम स", + "Ġaç ısından", + "اد ÙĦ", + "Ġб еÑģп", + "ĠбеÑģ п", + "ãĥ» âĶģ", + "åľ Ń", + "o cu", + "oc u", + "k ánÃŃ", + "ká nÃŃ", + "ÙĪ Ø±Ø´", + "ÙĪØ± Ø´", + "ëŀ µ", + "Ġ çģ", + "Ġç ģ", + "è° ģ", + "Ġs ám", + "Ġν εÏĨ", + "Ġνε ÏĨ", + "b ilir", + "bil ir", + "ĠmÃŃst ÄĽ", + "Ġ žen", + "Ġž en", + "Ġže n", + "Ġil ç", + "Ġ ë§ģ", + "Ġë§ ģ", + "ãĢij Ċ", + "ĠÙħÙĪ Ø§Ø±Ø¯", + "ĠاÙĦ Ø´ÙĬ", + "ĠاÙĦØ´ ÙĬ", + "Ġ기 ë¡Ŀ", + "Ġt ady", + "Ġta dy", + "Ġtad y", + "à¸Ń าà¸Ī", + "ĠÑģ ÑĦ", + "ĠspoleÄį nost", + "Ġtém atu", + "Ùħ اÙħ", + "Ùħا Ùħ", + "Ùħ ع", + "Ġ леж", + "Ġл еж", + "ĠÚĨ Ø´Ùħ", + "ĠiÅŁ let", + "ĠÙĨس Ø®", + "ä¼ °", + "ãģį ãģª", + "ãĢ ĥ", + "å² Ĺ", + "Ġ åŃIJ", + "Ġå ŃIJ", + "ĠåŃ IJ", + "Ġb ảng", + "Ġbản g", + "çĮ ®", + "Ġc ứng", + "Ġcứ ng", + "Ġк ÑĢай", + "ĠкÑĢа й", + "Ġ èĭ±è¯Ń", + "Ġèĭ± è¯Ń", + "Ðł ÐIJ", + "ز ÙĨ", + "èĥ ŀ", + "Ġsür eç", + "Ġsüre ç", + "ãĥķ ãĥĪ", + "ĠкÑĸлÑĮ ка", + "ne ÄŁin", + "neÄŁi n", + "ov ány", + "ová ny", + "ován y", + "л Ñĸн", + "лÑĸ н", + "Ġvý raz", + "ĠÑģÑĩ иÑĤа", + "ĠÑģÑĩиÑĤ а", + "ĠпÑĢав ило", + "ĠпÑĢави ло", + "ĠпÑĢавил о", + "ĠиÑģполÑĮз Ñĥ", + "Ġk éo", + "Ġké o", + "ĠyaklaÅŁ ık", + "ĠÙĪØ§Ø¨ ستÙĩ", + "ов аÑĤелÑĮ", + "Ġ ì²ł", + "Ġì² ł", + "ĠاÙĦ عاÙħ", + "ĠاÙĦع اÙħ", + "åĿ ı", + "Ġ à¸ī", + "Ġภī", + "ĠS Æ¡n", + "λ ιο", + "λι ο", + "ì¶Ķ ì²ľ", + "Ġsluž eb", + "ĠдеÑıÑĤелÑĮ ноÑģÑĤи", + "з м", + "Ġп ози", + "Ġпо зи", + "Ġпоз и", + ".; .;", + "ĠпÑĢоиÑģ ÑħодиÑĤ", + "าย à¹ĥà¸Ļ", + "çļĦ ãģ«", + "Ġà¤ĩस स", + "о меÑĤ", + "ом еÑĤ", + "Ġ αÏģ", + "Ġα Ïģ", + "ा à¤Ĺर", + "ाà¤Ĺ र", + "i cÃŃch", + "ic ÃŃch", + "icÃŃ ch", + "Ġpolož ky", + "ê³ ¨", + "æĥ Ĭ", + "Ġö ner", + "Ġön er", + "Ġöne r", + "Ġx ảy", + "ĠÙĨظ رÛĮ", + "ĠÙĨظر ÛĮ", + "Ġngh á»ī", + "Ġ à¸ľà¸¥", + "Ġà¸ľ ล", + "ĠÑĢ Ð¾Ð»ÑĮ", + "ĠÑĢ ÐµÐ¼Ð¾Ð½", + "ĠÑĢе мон", + "ص ÙĪØ±", + "V ý", + "ĠS á»ij", + "ĠÑģ ÑĥÑĩаÑģ", + "ĠÑģÑĥ ÑĩаÑģ", + "ห ย", + "ĠاÙĤ داÙħ", + "Ġer kek", + "Ġerk ek", + "Ġ èį", + "Ġè į", + "ĠÄij ôi", + "ĠÄijô i", + "Ġкон кÑĢеÑĤ", + "æ¬ Ĭ", + "Ġ 缮", + "ĠçĽ ®", + "ÙĪ Ú©", + "lı kla", + "lık la", + "Ġp azar", + "Ġpa zar", + "Ġpaz ar", + "ά νÏī", + "άν Ïī", + "Ñĥ ÑģÑĤа", + "ÑĥÑģ ÑĤа", + "ÑĥÑģÑĤ а", + "ãģª ãģŁ", + "Ġ ÙĩÙĨÚ¯", + "ĠÙĩ ÙĨÚ¯", + "ĠÙĩÙĨ Ú¯", + "Ю ÐĽ", + "Ġв елик", + "Ġвели к", + "Ġвел ик", + "Ġве лик", + "Ġnh Ỽ", + "Ġ ìĭľíĹĺ", + "Ġìĭľ íĹĺ", + ") ìĿĺ", + "Ùĥ Ùĩ", + "Ġ à¹ģล", + "Ġà¹ģ ล", + "Û² Ûµ", + "Ġار ساÙĦ", + "Ġ окÑĢем", + "Ġок ÑĢем", + "ά ÏĤ", + "ĠвÑĭ Ñħод", + "vÄĽt Å¡ÃŃ", + "ĠØ· رÛĮÙĤ", + "Ġк оÑĢоÑĤ", + "ĠкоÑĢ Ð¾ÑĤ", + "Ġко ÑĢоÑĤ", + "н ÑĶ", + "ãĤĬ ãģ«", + "Ġ ä¹Ł", + "Ġä¹ Ł", + "ØŃ ص", + "ع ÙħاÙĦ", + "عÙħ اÙĦ", + "oloj ik", + "oloji k", + "Ġر ابط", + "Ġرا بط", + "çª Ĺ", + "Ġg iz", + "Ġgi z", + "Ġch ết", + "Ġchế t", + "æ¨ £", + "ส à¸ĩ", + "ÙĪ ØªØ±", + "ÙĪØª ر", + "ĠÑı кÑĥ", + "ĠÑıк Ñĥ", + "çı¾ åľ¨", + "ĠоÑĤ ÑģÑĥÑĤÑģÑĤв", + "Ġ ê´ijê³ł", + "Ġê´ij ê³ł", + "Ñĸ ки", + "Ñĸк и", + "åĢ ¤", + "è® ¢", + "Ġ dle", + "Ġd le", + "Ġdl e", + "Ġ åł", + "Ġå ł", + "æ¨ ©", + "è® ¯", + "åĶ IJ", + "Ġ âĸ²", + "Ġâĸ ²", + "Ġli stop", + "Ġlist op", + "Ġlis top", + "Ġdat ové", + "Ġdato vé", + "ÏĦ ÏĮÏĤ", + "ÏĦÏĮ ÏĤ", + "Ġ оз", + "Ġо з", + "δ ÏĮ", + "èĴ Ĥ", + "Û³ Û°", + "ãĥª ãĥ¼ãĤº", + "ãĥªãĥ¼ ãĤº", + "ĠÙħر کز", + "ĠÙħرک ز", + "ĠпÑĸдÑĤ ÑĢим", + "ĠÑģ ез", + "é¡ ĺ", + "Ġol acaktır", + "Ġolacak tır", + "æº Ģ", + "ĠÏĢεÏģι ο", + "ĠÏĢεÏģ ιο", + "ĠÏĢε Ïģιο", + "ÑĦ а", + "ÏĦ ηÏĥη", + "ÏĦη Ïĥη", + "ç» ĥ", + "Ðŀ д", + "δ Ïħ", + "âĦ ĥ", + "Ġl ắp", + "ĠëĦ ĺ", + "Ø· اÙĨ", + "ĠÙ¾ ÙĨج", + "ĠÙ¾ÙĨ ج", + "ت اÙĨ", + "تا ÙĨ", + "i lerinin", + "iler inin", + "ileri nin", + "ilerin in", + "ilerini n", + "à Ī", + "ĠØ® ÙĪØ´", + "ĠØ®ÙĪ Ø´", + "Ġ ìĬ¬", + "ĠìĬ ¬", + "ĠاÙĦر ئÙĬس", + "ẵ n", + "Ġ شار", + "ĠØ´ ار", + "e ru", + "er u", + "ж ив", + "жи в", + "à¸Ļ าย", + "à¸Ļา ย", + "Ġs ẻ", + "Ġà¤ī à¤ļ", + "ãģ« ãģĭ", + "ç¡ Ģ", + "Ġyür üt", + "ĠС еÑĢг", + "ĠСеÑĢ Ð³", + "Ġ каÑģ", + "Ġк аÑģ", + "Ġка Ñģ", + "ĠÐij ог", + "Ġìĸ´ëĸ »ê²Į", + "Ġ çŁ³", + "Ġç Ł³", + "ĠçŁ ³", + "Ġöl dür", + "Ġöld ür", + "л Ñĸв", + "лÑĸ в", + "Ġho Ãłng", + "ĠhoÃłn g", + "Ġb á»Ļt", + "Ġbá»Ļ t", + "çŀ ¬", + "Ġ 침", + "Ġì¹ ¨", + "N ếu", + "Ġne vy", + "Ġnev y", + "Ġ ìľ¤", + "Ġìľ ¤", + "Ġsou Äįást", + "ıs ıyla", + "ısı yla", + "Ġtük et", + "b ou", + "bo u", + "Ġд во", + "Ġдв о", + "س Ø·", + "å½ĵ çĦ¶", + "ãĥ ¨", + "Ġ زادÙĩ", + "Ġز ادÙĩ", + "Ġزاد Ùĩ", + "Ġ éĥ¨", + "Ġéĥ ¨", + "Ġر ÙĪØŃ", + "ĠرÙĪ ØŃ", + "Ġ ï¼į", + "Ġï¼ į", + "ĠмÑĸÑģ ÑĨев", + "ĠмÑĸÑģÑĨе в", + "θ εν", + "θε ν", + "ภĨ", + "л енÑĸ", + "лен Ñĸ", + "ле нÑĸ", + "çį ²", + "ĠH OH", + "ĠHO H", + "s ın", + "sı n", + "ิ à¸ķร", + "ิà¸ķ ร", + "è² ¡", + "ĠpÅĻ id", + "ĠpÅĻi d", + "à¹Ģ หà¸Ļ", + "à¹Ģห à¸Ļ", + "l ý", + "è¨Ģ èijī", + "ठĵ", + "âĸįâĸįâĸįâĸį âĸįâĸįâĸįâĸį", + "ب اب", + "با ب", + "ãĥ¼ ãĥķ", + "ãĥ¼ãĥ ķ", + "м оÑĢ", + "мо ÑĢ", + "è¿ĩ ç¨ĭ", + "Ġ ãĥĽ", + "Ġãĥ Ľ", + "ĠK inh", + "ĠKi nh", + "ĠKin h", + "íķľ êµŃ", + "Ġìĸ´ëĸ ¤", + "Ġв лиÑı", + "Ġf ayd", + "Ġfa yd", + "Ġص ÙĨع", + "ĠصÙĨ ع", + "Ġal ır", + "Ġet tiÄŁi", + "Ġetti ÄŁi", + "ά κ", + "im izin", + "imi zin", + "imiz in", + "imizi n", + "ัà¸ļ à¸ľ", + "Ġзем елÑĮ", + "ÙĬÙĦ اد", + "ÙĬÙĦا د", + "æ¶ ¨", + "çı ł", + "ĠØ£ غ", + "Ġz ku", + "Ġzk u", + "âĢŀ A", + "า à¸ķร", + "าà¸ķ ร", + "a yi", + "ay i", + "ãĥ© ãĤ¹", + "и ло", + "ил о", + "ĠÄij á»į", + "ĠÄijá» į", + ". Îķ", + "ë ľ", + "ĠμÏĢο Ïģεί", + "å¸ ¶", + "Ġar tır", + "Ġart ır", + "า à¸į", + "าภį", + "å¿ ĺ", + "ta lya", + "tal ya", + "Ġpoz dÄĽji", + "ĠpozdÄĽ ji", + "Ġnep ÅĻ", + "Ġ æ¹", + "Ġæ ¹", + "اÙĩ ÛĮ", + "Ġsat ın", + "Ġ ë²Į", + "Ġë² Į", + "ج ÙĪ", + "ä¸Ģ 缴", + "ìķĦ ìļĶ", + "Âł P", + "Ġ ØĽ", + "ĠØ Ľ", + "Ġп ал", + "Ġпа л", + "表 æĥħ", + "Ġc anlı", + "Ġcan lı", + "æĪIJ 为", + "ÙĪ ÙĨا", + "ÙĪÙĨ ا", + "Ġ â̝", + "ĠâĢ ¯", + "à¸ģำ ล", + "åį ĸ", + "Ġ αÏĥ", + "Ġα Ïĥ", + "и нок", + "ин ок", + "а мп", + "ам п", + "ล à¸Ńà¸ĩ", + "ÙĤ ÙĤ", + "ĠпÑĢо Ñħод", + "ĠпÑĢоÑħ од", + "ãĤĦãĤĭ 夫", + "Ïĩ η", + "è² ¨", + "ĠÙģ ÙĬÙĩ", + "ĠÙģÙĬ Ùĩ", + "ÙĬ رÙĬ", + "ÙĬر ÙĬ", + "Ġвне ÑĪ", + "Ġk arak", + "Ġka rak", + "Ġkar ak", + "Ġkara k", + "Ø« ÙĦ", + "Ùĩ ÙĪØ±ÛĮ", + "ÙĩÙĪØ± ÛĮ", + "اÙĪØ± Ù¾", + "ĠÄij á»ı", + "ĠÄijá» ı", + "ji Å¡tÄĽnÃŃ", + "jiÅ¡tÄĽ nÃŃ", + "ت بر", + "تب ر", + "Ġê·¸ ê²ĥ", + "Ġg ül", + "Ġgü l", + "Ġпо кÑĥп", + "Ġпок Ñĥп", + "l ilik", + "li lik", + "lili k", + "lil ik", + "Ġz da", + "Ġzd a", + "åīį ãģ«", + "ĠÙħÙĩ ÙĨد", + "Ġ ÎijÎĿ", + "ĠÎij ÎĿ", + "ĠÚ©ÛĮÙĦ ÙĪÙħتر", + "Ġp ÅĻeh", + "ĠpÅĻ eh", + "ĠpÅĻe h", + "а леж", + "ал еж", + "але ж", + "Ġka yn", + "Ġkay n", + "è® ¿", + "Ġì¤ij êµŃ", + "ĠÑĪиÑĢ Ð¾Ðº", + "ĠÑĪи ÑĢок", + "ĠÙħشار کت", + "âĢ Ĥ", + "Ġ íŤ", + "ĠíĹ ¤", + "Ġìłľ íĴĪ", + "ĠØ´ ÛĮر", + "ĠØ´ÛĮ ر", + "es inden", + "esinde n", + "esin den", + "ÑĢ ÑĸÑĩ", + "ÑĢÑĸ Ñĩ", + "èı ²", + "Ñģ коÑĢ", + "Ñģк оÑĢ", + "Ñģко ÑĢ", + "e tik", + "et ik", + "eti k", + "า à¸ľ", + "าภľ", + "ĠØ· بÛĮ", + "Ġطب ÛĮ", + "κ ÎŃ", + "ĠìŀĪ ìĸ´", + "Ġ dek", + "Ġd ek", + "Ġde k", + "ÑĢ Ñĸй", + "ÑĢÑĸ й", + "å ĨĴ", + "åĨ Ĵ", + "nÃŃ ci", + "® ¤", + "ĠÙħر تب", + "Ġy azı", + "Ġya zı", + "Ġyaz ı", + "üs lü", + "ìľ¼ ëĤĺ", + "e lerine", + "eler ine", + "ele rine", + "eleri ne", + "elerin e", + "Ġy oÄŁun", + "Ġб ак", + "Ġба к", + "ÎĻ ÎŁ", + "ά λÏħ", + "άλ Ïħ", + "ç´ Ļ", + "ĠÑĢÑĥ ками", + "ĠÑĢÑĥк ами", + "Ġçöz üm", + "ìłķ ìĿĦ", + "Ġgüç lü", + "λ ÏĮ", + "Ġb elli", + "Ġbe lli", + "Ġbel li", + "Ġbell i", + "ÃŃ Å¡e", + "ÃŃÅ¡ e", + "ĠÏĮ ÏĢÏīÏĤ", + "Ġna Å¡", + "Ġp ár", + "Ġpá r", + "ÑĪ ÑĤ", + "Ġ ìĨ¡", + "ĠìĨ ¡", + "à¥Ĥ रत", + "à¥Ĥर त", + "ĠÏĢολ Ïį", + "ĠÏĢο λÏį", + "ç° ¡", + "èĤ ¯", + "æ¹ ¾", + "Ġ äºĭ", + "Ġब स", + "Ġ무 ë£Į", + "д ина", + "дин а", + "ди на", + "èª °", + "л еж", + "ле ж", + "Ġú ÅĻad", + "ĠоÑģвÑĸ ÑĤи", + "ĠоÑģвÑĸÑĤ и", + "ĠвÑĸд Ñĩ", + "ĠпÑĢи знаÑĩ", + "ĠпÑĢизна Ñĩ", + "ĠпÑĢиз наÑĩ", + "çͳ 请", + "' ya", + "'y a", + "ä¿ Ĭ", + "Ġ ÙĬÙĪÙĨ", + "ĠÙĬ ÙĪÙĨ", + "ĠÙĬÙĪ ÙĨ", + "Ġس ع", + "Ġ ÐĶаÑĤа", + "ĠÐĶ Ð°ÑĤа", + "ĠÐĶа ÑĤа", + "è¨Ģ ãģĨ", + "ĠØŃ تÛĮ", + "ĠJi ÅĻÃŃ", + "ĠÐ¥ аÑĢ", + "éĻ Ī", + "à¹Ī าà¸Īะ", + "à¹Īา à¸Īะ", + "Ġsay esinde", + "ĠÑĤÑĢеб а", + "ê°Ģ ì§Ģ", + "Ġy emek", + "Ġye mek", + "Ġyem ek", + "Ġyeme k", + "è¦ ļ", + "ặ n", + "ãĢĢ ãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ĠãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢĠãĢĢ", + "Ġ 举", + "Ġä¸ ľ", + "Ġ ÙĪØ§", + "ĠÙĪ Ø§", + "ĠÙħ ÙĪØ³", + "ĠÙħÙĪ Ø³", + "Ġком анд", + "Ġкоман д", + "Ġseç im", + "Ñĩ еннÑı", + "Ñĩен нÑı", + "Ġtot iž", + "Ġr á»Ńa", + "ı a", + "Ø¢ Ùħ", + "ÑĨ Ñĸон", + "ÑĨÑĸ он", + ": :::::::::::", + ":: ::::::::::", + ":::: ::::::::", + ":::::: ::::::", + ":::::::: ::::", + "::: :::::::::", + "::::: :::::::", + "::::::: :::::", + "::::::::: :::", + ":::::::::: ::", + "::::::::::: :", + "ÐĿ ÐIJ", + "ı za", + "ız a", + "h end", + "he nd", + "hen d", + "Ġफ र", + "ัà¸Ķ à¸ģาร", + "Ġ Cách", + "ĠC ách", + "ĠCác h", + "ĠпоÑĤ Ñĸм", + "Ġá¼ Ģ", + "ا ÙĦا", + "اÙĦ ا", + "á» ¡", + "ر ÛĮÙħ", + "رÛĮ Ùħ", + "å® «", + "Ġز ÙħÛĮÙĨ", + "ĠزÙħ ÛĮÙĨ", + "ÑĢ ÐµÑģÑĤ", + "ÑĢе ÑģÑĤ", + "ÑĢеÑģ ÑĤ", + "б аÑĩ", + "ба Ñĩ", + "Ùĩر ست", + "н ог", + "но г", + "ï¼Į 大", + "ĠëĺIJ íķľ", + "Ġz ůst", + "Ġzů st", + "ĠÐĴ она", + "ĠÐĴо на", + "å¤ĩ 份", + "Ġ اÙģØª", + "Ġا ÙģØª", + "ĠاÙģ Øª", + "o je", + "oj e", + "Ñģк ÑĸлÑĮки", + "Ġnh ẹ", + "Ġк еÑĢÑĸв", + "ĠкеÑĢ Ñĸв", + "á¿ ¦", + "æĸ¹ æ¡Ī", + "з аÑĨиÑı", + "за ÑĨиÑı", + "ĠвÑĸдповÑĸд но", + "ĠвÑĸдпов Ñĸдно", + "ãĤ¤ ãĤ¹", + "г ал", + "га л", + "ĠобÑĭ Ñĩно", + "ĠобÑĭÑĩ но", + "اÙĪØ±Ù¾ ÙĪÛĮÙĨت", + "å® ľ", + "l osti", + "lo sti", + "los ti", + "lost i", + "è¿Ľ åħ¥", + "uyor du", + "벤 íĬ¸", + "æīĭ ãĤĴ", + "ÐŁ од", + "ÐŁÐ¾ д", + "ĠÙħØŃ دÙĪØ¯", + "Ġ Ø¢Ùħد", + "ĠØ¢ Ùħد", + "ĠØ¢Ùħ د", + "ar akter", + "arak ter", + "çļĦ 大", + "Ġsı cak", + "l ant", + "la nt", + "lan t", + "Ġd ấu", + "ĠÙĨ Ú©", + "èĢħ ãģ®", + "Ġkend ini", + "Ġkendi ni", + "Ġп аÑĨи", + "Ġпа ÑĨи", + "Ġ 기íĥĢ", + "Ġ기 íĥĢ", + "ĠвмеÑģÑĤ е", + "в аеÑĤÑģÑı", + "ва еÑĤÑģÑı", + "ваеÑĤ ÑģÑı", + "Ġ ë§ī", + "Ġë§ ī", + "ĠchvÃŃ li", + "Ø® ÛĮ", + "ÙĦ ع", + "n ÃŃky", + "nÃŃ ky", + "nÃŃk y", + "、 :", + "ëIJľ ëĭ¤", + "ì§ ķ", + "Ġк вÑĸÑĤ", + "Ġкв ÑĸÑĤ", + "¨ ìĸ´", + "l iž", + "li ž", + "Ġë¹Ħë°Ģ ê¸Ģ", + "Ġkh á»iji", + "Ġ ë°©ìĨ¡", + "Ġë°© ìĨ¡", + "e chan", + "ec han", + "ech an", + "echa n", + "Ġзакон одав", + "Ġа кÑĤ", + "Ġак ÑĤ", + "문 ìłľ", + "ĠN ó", + "Ġ çĤ¹", + "Ġç Ĥ¹", + "ĠçĤ ¹", + "hled em", + "hle dem", + "ĠÑģво ÑĹÑħ", + "ĠÑģвоÑĹ Ñħ", + "Ġر ÙĤÙħ", + "ĠرÙĤ Ùħ", + "æĽ ¼", + "ि वर", + "िव र", + "åİ ļ", + "ĠÐļ од", + "ĠÐļо д", + "à¤Ń à¤Ĺ", + "ìŀIJ ëĬĶ", + "à¸Ļ ม", + "Ñĥ Ñģа", + "ÑĥÑģ а", + "Ġg ünü", + "Ġgün ü", + "ĠÄij ÃŃch", + "Ġtr ữ", + "å ·»", + "å· »", + "éĵ¶ è¡Į", + "ØŃ ÙĨ", + "è® ¨", + "γ Ïĩ", + "á½ ¸", + "a larında", + "alar ında", + "aları nda", + "aların da", + "Ġk af", + "Ġka f", + "ÙĪ Ø§Ø¬", + "ÙĪØ§ ج", + "ĠиÑģ клÑİÑĩ", + "ĠиÑģк лÑİÑĩ", + "Ġnh iá»ħ", + "á»į t", + "ĠìĽ ¹", + "Ġ éĿ¢", + "ĠéĿ ¢", + "ãģ® ãģĮ", + "Ġм ало", + "Ġмал о", + "Ġма ло", + "Ñĸ лÑĸ", + "Ñĸл Ñĸ", + "Ġ biên", + "Ġb iên", + "Ġbi ên", + "n ému", + "né mu", + "ném u", + "пÑĢи меÑĢ", + "пÑĢ Ð¸Ð¼ÐµÑĢ", + "âĸł âĸł", + "Ġk amp", + "Ġka mp", + "Ġkam p", + "Ġ веÑī", + "Ġв еÑī", + "Ġве Ñī", + "Äį em", + "Äįe m", + "à¥ģ ध", + "à¥ģठ§", + "æŁ »", + "ت ÙĪÙĨ", + "تÙĪ ÙĨ", + "åıª æľī", + "ãģ¯ ãģĦ", + "Ġ รวม", + "Ġร วม", + "ãĤ ŀ", + "ãģĻ ãĤĭãģ¨", + "ãģĻãĤĭ ãģ¨", + "å¾Ī å¤ļ", + "à¹Ī à¸ķ", + "ĠsvÄĽt a", + "ĠsvÄĽ ta", + "Ġ ê°Ģ격", + "Ġê°Ģ 격", + "Ú¯ Ùĩ", + "an daÅŁ", + "and aÅŁ", + "anda ÅŁ", + "ãĥª ãĤ¹", + "Ïī μα", + "ĠØ® ÙĪØ¨", + "ĠØ®ÙĪ Ø¨", + "ç´ ħ", + "Ñĩ иÑģ", + "Ñĩи Ñģ", + "ì¢ Į", + "ĠØŃض رت", + "Ġви ÑĢÑĸÑĪ", + "Ù¾ ر", + "Ġtý d", + "Ġkon tro", + "Ġkont ro", + "д ейÑģÑĤв", + "ãģŁãĤģ ãģ«", + "ì ī", + "мини ÑģÑĤÑĢа", + "мин иÑģÑĤÑĢа", + "âĢ ¯", + "åī ij", + "ни ÑĨÑĸ", + "ниÑĨ Ñĸ", + "å¦ ĩ", + "Ġ лиÑĪ", + "Ġл иÑĪ", + "Ġли ÑĪ", + "ãģ£ ãģ¦ãĤĭ", + "ãģ£ãģ¦ ãĤĭ", + "на ÑĢÑĥж", + "наÑĢ Ñĥж", + "Ñī иÑħ", + "Ñīи Ñħ", + "ÏĦ οκ", + "ÏĦο κ", + "ov áno", + "ová no", + "ován o", + "تر ÙĦ", + "ÑĢ ÐµÐº", + "ÑĢе к", + "غ ات", + "Ġ omez", + "Ġo mez", + "Ġom ez", + "ì ĵ°", + "ĠÃľ l", + "ï½ Ĵ", + "lı ģını", + "lıģ ını", + "lıģın ı", + "Ġv ượt", + "Ġb ÄĽÅ¾", + "ĠbÄĽ ž", + "Ãľ R", + "Ġ ãĥ¾", + "Ġãĥ ¾", + "ĠdoÄŁ al", + "Ġh atır", + "Ġha tır", + "Ġhat ır", + "Ġsv ým", + "ì§Ģ ëıĦ", + "à¹Ģà¸ł à¸Ĺ", + "Ġv ay", + "Ġva y", + "Ġ æĻĤ", + "Ġæ ĻĤ", + "ĠæĻ Ĥ", + "à¥įव प", + "Ġp lo", + "Ġpl o", + "é¢Ħ è§Ī", + "Ġçık tı", + "Ġ دÙĨ", + "Ġد ÙĨ", + "n ánÃŃ", + "ná nÃŃ", + "ê· Ģ", + "íĺ Ģ", + "à¸ŀ à¸ļ", + "m uÅŁtur", + "muÅŁ tur", + "å®ĺ æĸ¹", + "ĠíĶĦ ë¡ľê·¸ëŀ¨", + "éĢŁ 度", + "ler dir", + "lerdi r", + "ÑĩеÑģ кого", + "Ñĩе Ñģкого", + "Ġİn san", + "âĶ ĥ", + "Ġà¤ĩत न", + "С Ð¡Ðł", + "Ġا Ùħر", + "ĠاÙħ ر", + "Ġkö tü", + "Ùģ Ø´", + "Ġb oj", + "Ġbo j", + "ĠÑĨÑĸ ÑĶÑĹ", + "Ġsöy lem", + "Ġsöyl em", + "ни ÑĨÑĭ", + "ниÑĨ Ñĭ", + "ãĢĤ 她", + "âĢĿ .Ċ", + "âĢĿ. Ċ", + "Ġm ilion", + "Ġmil ion", + "Ġmi lion", + "Ġmili on", + "Ġson unda", + "Ġsonu nda", + "з Ñĥ", + "à¥į मà¤ķ", + "à¥įम à¤ķ", + "人 åı£", + "n ÄĽÅ¾", + "nÄĽ ž", + "ĠÑģ моÑĤ", + "ĠÑģм оÑĤ", + "Ġкомп лекÑģ", + "Ġкомплек Ñģ", + "Ġзави Ñģим", + "Ġиме ÑİÑĤ", + "Ġl ạc", + "Ġlạ c", + "Ġ hangi", + "Ġh angi", + "Ġhang i", + "Ġhan gi", + "ëĶ ©", + "åĬ ³", + "ĠvÄĽ ci", + "ĠvÄĽc i", + "е ÑĢов", + "еÑĢ Ð¾Ð²", + "еÑĢо в", + "κ Ïģι", + "Ġdur umu", + "Ġdurum u", + "Ġ بÙĪØ§Ø³Ø·Ø©", + "ĠبÙĪ Ø§Ø³Ø·Ø©", + "ĠØ£ بÙĬ", + "Ġأب ÙĬ", + "ĠAÄŁ ustos", + "ε Ïĩ", + "Ġд иÑĤи", + "Ġди ÑĤи", + "ĠдиÑĤ и", + "ÑĦ ика", + "ÑĦи ка", + "ÑĦик а", + "Ġ NÄĥm", + "ĠN Äĥm", + "Ġ 기ìĪł", + "Ġ기 ìĪł", + "Ġhlav nÃŃ", + "ä¿ ĥ", + "Ġलà¤Ĺ त", + "ĠO br", + "ĠOb r", + ". ย", + "ко вод", + "ков од", + "ково д", + "o pis", + "op is", + "opi s", + "Ġ ãĥī", + "Ġãĥ ī", + "Ġبش ÙĥÙĦ", + "н ием", + "ни ем", + "ние м", + "Ġtém ÄĽÅĻ", + "ĠاÙĦ ØŃر", + "ĠاÙĦØŃ ر", + "ĠÙĦ ازÙħ", + "ĠÙĦا زÙħ", + "Ġm ái", + "Ġmá i", + "i liÄŁi", + "ili ÄŁi", + "ë³ ¼", + "Ġy ık", + "Ġyı k", + "ç½ ²", + "ÑĢ Ð°Ð²Ð°", + "ÑĢа ва", + "ÑĢав а", + "Ñī ин", + "Ñīи н", + "ãģ« å¯¾", + "ç²¾ ç¥ŀ", + "à¹ī ส", + "Ġtem sil", + "à Ĩ", + "ìķ Ķ", + "ĠпÑĢавилÑĮ но", + "ÑĢ Ð¾Ñİ", + "ÑĢо Ñİ", + "Û±Û³ Û¸", + "è© ŀ", + "اء Ø©", + "ÙĪ Ø§Ø±Ùĩ", + "ÙĪØ§ رÙĩ", + "ÙĪØ§Ø± Ùĩ", + "ï¼ ħ", + "ĠÐľ ик", + "ĠÐľÐ¸ к", + "æģ ¶", + "æı Ĵ", + "ा पन", + "ाप न", + "ĠÚ©ÛĮÙģ ÛĮت", + "ĠT Ãłi", + "Ġt iá»ĥu", + "ov alo", + "ova lo", + "oval o", + "çĿ ¡", + "Ñĩ ил", + "Ñĩи л", + "Ġ лиÑĤ", + "Ġл иÑĤ", + "Ġли ÑĤ", + "λεÏħ ÏĦα", + "Ġ окон", + "Ġо кон", + "Ġок он", + ": :|", + ":: |", + "в ала", + "ва ла", + "вал а", + "ĠÙħرک زÛĮ", + "ĠÙħرکز ÛĮ", + "Ġ alÄ±ÅŁ", + "Ġa lÄ±ÅŁ", + "Ġal Ä±ÅŁ", + "Ġдолж но", + "Ġдол жно", + "æĻĤ 代", + "Ġ sert", + "Ġs ert", + "Ġse rt", + "Ġser t", + "е ÑĤом", + "еÑĤ ом", + "ัà¸Ļ ย", + "åģ ·", + "Ġ vÃŃc", + "Ġv ÃŃc", + "ĠvÃŃ c", + "ĠÑħ оÑĤÑı", + "ĠÑħоÑĤ Ñı", + "a larını", + "alar ını", + "aların ı", + "len mesi", + "lenme si", + "ãĥ³ ãĥIJ", + "ãĥ³ãĥ IJ", + "Ġëª ĩ", + "Ġá» ¦y", + "ĠاÙĦ کتر", + "vy ššÃŃ", + "è² ¬", + "주 ìĭľ", + "á ÅĻe", + "áÅĻ e", + "Ġy ere", + "Ġye re", + "Ġyer e", + "ãĤ¢ ãĥ³", + "ĠاÙĦس عÙĪØ¯", + "ĠØ¢ Ø´", + "Ġch óng", + "Ġchó ng", + "Ġ è»", + "Ġè »", + "г аÑĶ", + "га ÑĶ", + "Ġ ãģĤ", + "ç¨ ³", + "δ εÏĤ", + "δε ÏĤ", + "缮 çļĦ", + "Ġce vap", + "Ġcev ap", + "Ñģ ÑĤе", + "ÑģÑĤ е", + "é¡ ¿", + "म न", + "é¡ ¾", + "Ġк ÑĢедиÑĤ", + "ĠÙħس تÙĤ", + "ĠÙħست ÙĤ", + "Ġ миÑĤ", + "Ġм иÑĤ", + "Ġми ÑĤ", + "Ġt á»ĵn", + "Ġtá» ĵn", + "Ġ جÙĦ", + "Ġج ÙĦ", + "Ä© a", + "ĠاÙĦع ÙĦÙħ", + "ĠاÙĦعÙĦ Ùħ", + "á ků", + "ák ů", + "Ġ íķĻêµIJ", + "ĠíķĻ êµIJ", + "à¸Ĺ à¸Ńà¸ĩ", + "ห à¸Ļà¸Ķ", + "หà¸Ļ à¸Ķ", + "ĠлÑĸÑĤ еÑĢаÑĤÑĥ", + "ëIJ ł", + "ά ÏģÏĩ", + "άÏģ Ïĩ", + "ĠÙĤد رت", + "ĠÙĤدر ت", + "à¸Ļ าà¸ĩ", + "à¸Ļา à¸ĩ", + "Ġa rac", + "Ġar ac", + "Ġara c", + "Ġj ÃŃd", + "ĠjÃŃ d", + "Ġtür lü", + "íĶ ½", + "er siz", + "ers iz", + "е ним", + "ен им", + "ени м", + "Ġyüz yıl", + "Ġ ãģĦ", + "ĠÎļ Ïħ", + "Ġ æļ", + "Ġæ ļ", + "Ġp ůj", + "Ġpů j", + "Ġt á»Ļi", + "Ġth iên", + "Ġthi ên", + "İ S", + "Ġth úc", + "Ġthú c", + "æĹ ģ", + "ìŀIJ ìĿ¸", + "Ġöl üm", + "ر ÛĮÙģ", + "رÛĮ Ùģ", + "ÑĢ ÐµÐ¶", + "ÑĢе ж", + "ص اÙĦ", + "ر Ù쨩", + "رÙģ Ø©", + "i ếp", + "iế p", + "Ñı ÑĤиÑı", + "ÑıÑĤ иÑı", + "ÑıÑĤи Ñı", + "Ġpou žit", + "á tu", + "át u", + "为 ä»Ģä¹Ī", + "ì ģ", + "Ġ krát", + "Ġk rát", + "Ġkr át", + "ĠپرÙĪ ÚĺÙĩ", + "Ġrozhod nutÃŃ", + "ĠÑĥ нивеÑĢ", + "Ñĸй но", + "Ġ åij¨", + "Ġåij ¨", + "Ġk iá»ĥu", + "缮 åīį", + "ä¿ Ħ", + "ÏĦ οι", + "ÏĦο ι", + "ÑĦеÑĢ ÐµÐ½", + "uÅŁ tur", + "Ġ nÃŃm", + "Ġn ÃŃm", + "ĠnÃŃ m", + "âĢĮ Ø®", + "Ġ á»§y", + "Ġ ÑģÑĤаÑĤи", + "ĠÑģÑĤ аÑĤи", + "ĠÑģÑĤаÑĤ и", + "ĠÑģÑĤа ÑĤи", + "ÑĩеÑģ кий", + "Ñĩе Ñģкий", + "ÑĩеÑģки й", + "Ġj estli", + "Ġjest li", + "ĠÙ¾ ÙĨ", + "Ġob ce", + "ĠجÙĩ اÙĨÛĮ", + "ĠجÙĩاÙĨ ÛĮ", + "едаг ог", + "ãģ§ ãģ®", + "Ġbu á»Ļc", + "ì¹´ ì§Ģëħ¸", + "à¹ĩ à¸Ħ", + "ĠÄį tvrt", + "Ġ ника", + "Ġн ика", + "Ġни ка", + "Ġник а", + "Ġвп лив", + "Ġд иÑĢ", + "Ġди ÑĢ", + "ĠÑģоб ÑģÑĤвен", + "Ġë§İ ìĿ´", + "æ¾ ³", + "ÑĢ Ñĥб", + "ÑĢÑĥ б", + "æ£ ĭ", + "声 éŁ³", + "ä¹ ĥ", + "تÛĮ جÙĩ", + "å¹ ¼", + "o nya", + "on ya", + "ony a", + "ĠPlan tae", + "ĠPlant ae", + "Ч ÑĤо", + "æIJ Ń", + "ä½ľ ç͍", + "ìħ ¨", + "Ġк ÑĢÑĥг", + "Ġ ÙĪÙģÙĬ", + "ĠÙĪ ÙģÙĬ", + "ĠÙĪÙģ ÙĬ", + "Ġ ï¼ŀ", + "Ġï¼ ŀ", + "ÑĪ ÐºÐ¸", + "Âł Ðľ", + "ا Ø´ÛĮ", + "اش ÛĮ", + "ĠÅŀ ubat", + "ĠÅŀu bat", + "Ġع شر", + "Ġعش ر", + "l if", + "li f", + "Ġpou žitÃŃ", + "Ġpoužit ÃŃ", + "íĨ ¡", + "Ġб лок", + "Ġбл ок", + "èĢ ¶", + "ู ร", + "Ġv üc", + "Ø´ ÙĪØ¯", + "Ø´ÙĪ Ø¯", + "и ма", + "им а", + "ни ÑĨип", + "ниÑĨ ип", + "ìĿ´ ëĵľ", + "Ġ âĢIJ", + "ĠâĢ IJ", + "Ġ назнаÑĩ", + "Ġна знаÑĩ", + "Ġназ наÑĩ", + "Ġназна Ñĩ", + "Ġstr any", + "Ġstran y", + "Ġstra ny", + "æ® ¿", + "ĠاÙĦ رÙĪ", + "ĠاÙĦر ÙĪ", + "çº ¸", + "åĪ ij", + "ï¼Į ä»İ", + "Ġ ë©´", + "Ġë© ´", + "ĠпÑĢовед еннÑı", + "Ġh ava", + "Ġha va", + "Ġhav a", + "ĠìĹĨ ìĹĪëĭ¤", + "ĠìĹĨìĹĪ ëĭ¤", + "å¢ŀ åĬł", + "Ú ¾", + "ç¼ º", + "Ġع بار", + "Ġعب ار", + "Ġt ắc", + "Ġin ÅŁa", + "er se", + "ers e", + "ر ÙĬب", + "رÙĬ ب", + "Ġá»ķ n", + "Ø£ Ø©", + "ĠÏĢολ ι", + "ĠÏĢο λι", + "Ġm ắc", + "Ñģ ол", + "Ñģо л", + "æ´ ŀ", + "- го", + "-г о", + "ç¨ĭ 度", + "ĠвикоÑĢиÑģÑĤ аннÑı", + "âĢŀ ظ", + "e lerinde", + "eler inde", + "eleri nde", + "elerin de", + "ĠNh ưng", + "ĠNhư ng", + "st ÅĻed", + "Ġhasta lık", + "Ġhast alık", + "à¹ī à¹Ģà¸Ľ", + "Ġd efa", + "Ġde fa", + "Ġdef a", + "Ġ زÙĬ", + "Ġز ÙĬ", + "اط ÙĤ", + "Ġп ÑĢой", + "ĠпÑĢ Ð¾Ð¹", + "ĠпÑĢо й", + "Ġок ÑĢÑĥг", + "ν ια", + "νι α", + "l adu", + "la du", + "lad u", + "k oli", + "ko li", + "kol i", + "Ġ oÄŁ", + "Ġo ÄŁ", + "Ġви Ñģок", + "ĠвиÑģ ок", + "Ð ĩ", + "çĽ ĸ", + "ãĤı ãģij", + "ãĥ¼ ãĥģ", + "ãĥ¼ãĥ ģ", + "æ¡ ¥", + "ĠÅ¡kol y", + "ĠÅ¡k oly", + "i tom", + "it om", + "ito m", + "Ġت ØŃص", + "ĠتØŃ ص", + "a lara", + "al ara", + "ala ra", + "alar a", + "Ġк ал", + "Ġка л", + "ĠпÑĢи Ñħод", + "Ġ é¦ĸ页", + "Ġé¦ĸ 页", + " į", + "ĠÛĮ عÙĨÛĮ", + "Ġt ùy", + "Ģ ë¡ľ", + "볤 ê³ł", + "á ze", + "áz e", + "Ġ ек", + "Ġе к", + "èħ ¹", + "ĠF akat", + "ĠFa kat", + "ĠFak at", + "п о", + "ĠÄij á»įc", + "ĠÄijá»į c", + "å Īĺ", + "åĪ ĺ", + "áz al", + "ÑĤ он", + "ÑĤо н", + "Ú¯ ÙĪ", + "ä¸ Ī", + "ìĹ ¼", + "ĠÙĦÙĦ Ø£", + "ĠE ÄŁer", + "åħ±åĴĮ åĽ½", + "ذ ر", + "Ġd aÄŁ", + "Ġda ÄŁ", + "è¡Į ä¸ļ", + "ê±°ëŀĺ ê°Ģ", + "è´Ł è´£", + "C ông", + "ĠÑĦ илÑĮ", + "ĠÑĦил ÑĮ", + "Ġ аÑģ", + "Ġа Ñģ", + "Ġch ẳng", + "ним аÑĤÑĮ", + "нима ÑĤÑĮ", + "Ġif ad", + "Ġi fad", + "Ġ ìħ", + "Ġì ħ", + "çĪ µ", + "ĠÅĻe Å¡enÃŃ", + "åĽ½ 产", + "Ġкак ой", + "Ġка кой", + "Ġम ध", + "ĠY ar", + "ĠYa r", + "ob raz", + "obra z", + "Ġon emoc", + "Ġ âĤ", + "Ġâ Ĥ", + "åİŁ åĽł", + "ĠÙĥ رد", + "ĠÙĥر د", + "Ġآز اد", + "Ġad lı", + "ĠH izmet", + "ãĥ¼ ãĥij", + "ãĥ¼ãĥ ij", + "ÙĨ سÙĬØ©", + "ÙĨس ÙĬØ©", + "Ġв нÑĥÑĤ", + "ĠвнÑĥ ÑĤ", + "Ġd ále", + "Ġdál e", + "Ġdá le", + "Îķ Î¥", + "Ġ ÑĥÑħ", + "ĠÑĥ Ñħ", + "Ġ ÑĢев", + "ĠÑĢ ÐµÐ²", + "ĠÑĢе в", + "Ġ меÑĪ", + "Ġм еÑĪ", + "ĠkoÅŁ ul", + "ĠاÛĮ راÙĨÛĮ", + "ĠاÛĮراÙĨ ÛĮ", + "éĺ µ", + "Ġ ëıĻìķĪ", + "ĠëıĻ ìķĪ", + "à¹Ģ à¸Ł", + "à¹ĢภŁ", + "ëłĪ 벨", + "è¨Ń è¨Ī", + "p rak", + "pr ak", + "pra k", + "p oÄį", + "po Äį", + "اع دة", + "اعد Ø©", + "Ġas ker", + "Ġask er", + "ĠÙĪÛĮ ÚĺÙĩ", + "ĠÙĪÛĮÚĺ Ùĩ", + "ĠТ еÑĢ", + "ĠТе ÑĢ", + "mak ta", + "makt a", + "ĠÄįty ÅĻ", + "Âł С", + "âĢĮÚ©ÙĨ ÙĨد", + "ï¼Į 並", + "ĠÑĢоÑģ Ñĸй", + "Ġu nut", + "Ġun ut", + "è¿Ļ ä¸Ģ", + "o pak", + "op ak", + "opa k", + "èĢ IJ", + "Ġз амеÑĤ", + "Ġза меÑĤ", + "Ġзам еÑĤ", + "à¹Į ล", + "ب ÙĨ", + "Ġ 몰", + "Ġëª °", + "Ġins anlar", + "Ġinsan lar", + "åı¯ æĺ¯", + "æ¢ ¦", + "к од", + "ко д", + "èĽ Ľ", + "kl adnÃŃ", + "klad nÃŃ", + "ÑĢов од", + "ÑĢо вод", + "ĠмÑĸ ÑģÑĤа", + "ĠмÑĸÑģ ÑĤа", + "ĠмÑĸÑģÑĤ а", + "åĩº äºĨ", + "Ġп аÑģ", + "Ġпа Ñģ", + "о бов", + "об ов", + "Ú¯ اÙĩÛĮ", + "گاÙĩ ÛĮ", + "в ин", + "ви н", + "à¥įर ध", + "Ġком пон", + "Ġкомп он", + "Ġ аÑĤ", + "Ġа ÑĤ", + "Ġa det", + "Ġad et", + "Ġade t", + "Ġ ãĥģ", + "Ġãĥ ģ", + "Ġذ ات", + "ĠØŃ ÙĪ", + "Ġtro chu", + "à¹ģ หà¸Ļ", + "à¹ģห à¸Ļ", + "Ġзав жди", + "ĠPart isi", + "ĠParti si", + "ĠS avaÅŁ", + "ĠSav aÅŁ", + "Ġs ÃŃd", + "ĠsÃŃ d", + "Ġ Ñģон", + "ĠÑģ он", + "ĠÑģо н", + "ر ÙĬÙģ", + "رÙĬ Ùģ", + "Ġz cela", + "åĺ ´", + "ĠÑĦ ÑĥÑĤ", + "il erek", + "ile rek", + "iler ek", + "ilere k", + "m alıdır", + "malı dır", + "Ġd á»±a", + "Ġdá»± a", + "à¸Ĺำ à¸ĩาà¸Ļ", + "ĠÙĪÙĦ ÙĥÙĨ", + "ĠÙĪÙĦÙĥ ÙĨ", + "ãģª ãĤĵãģł", + "ãģªãĤĵ ãģł", + "ĠÚ© ÙħÛĮ", + "ĠÚ©Ùħ ÛĮ", + "Ġléka ÅĻ", + "Ïģ Ïį", + "ج Ùħع", + "جÙħ ع", + "ın ızı", + "ını zı", + "ınız ı", + "ĠAn adolu", + "ãģ«ãĤĪ ãģ£ãģ¦", + "Ġê·¸ëŁ¬ ëĤĺ", + "Ġ íĮĶ", + "ĠíĮ Ķ", + "Ñĸ ÑĤÑĮ", + "ÑĸÑĤ ÑĮ", + "Ġ ¦", + "Ġ ¦", + "ä¸į è¦ģ", + "à¸ĸ ม", + "Ġ ÙĬد", + "ĠÙĬ د", + "ĠpÅĻ ep", + "ĠpÅĻe p", + "Ġ è¦ģ", + "Ġè¦ ģ", + "ĠпÑĢо екÑĤ", + "ĠпÑĢоек ÑĤ", + "ĠÑĢе ги", + "ĠÑĢег и", + "Ġd ạy", + "к ового", + "ков ого", + "ково го", + "Ġ ıs", + "Ġı s", + "ĠK ı", + "ĠÙģÙĬ Ùĩا", + "ĠÙģÙĬÙĩ ا", + "ÛĮ ات", + "ÛĮا ت", + "ĠÑģÑĤ ала", + "ĠÑģÑĤал а", + "ĠÑģÑĤа ла", + "æĬ ľ", + "Ñĥ ÑĢа", + "ÑĥÑĢ Ð°", + "ĠÙ¾ اÛĮاÙĨ", + "ĠپاÛĮ اÙĨ", + "Ġپا ÛĮاÙĨ", + "Ġitibar en", + "а нÑĸÑĹ", + "ан ÑĸÑĹ", + "анÑĸ ÑĹ", + "Ġо ÑĦоÑĢм", + "л еÑĩ", + "ле Ñĩ", + "ε ξ", + "æĶ¿ çŃĸ", + "Ġ ç½ij", + "Ġç½ ij", + "å Ĥ¬", + "åĤ ¬", + "ĠìĿ´ 룰", + "Ġkar deÅŁ", + "Ñİ Ñīего", + "ÑİÑī его", + "л ки", + "ĠاÛĮ اÙĦات", + "ت Ùĩا", + "تÙĩ ا", + "Ġпод Ñħод", + "ĠØŃ ÙĪÙĦ", + "ĠØŃÙĪ ÙĦ", + "ĠÑģов ÑĢем", + "íĿ ¥", + "Ġ 詳細", + "Ġè© ³ç´°", + "ı yı", + "ıy ı", + "ĠتÙĤ ÙĪ", + "æ¯Ķ è¾ĥ", + "Ġαν ÏĦι", + "Ġ ΣΤ", + "ĠΣ Τ", + "ji šť", + "yn ı", + "Ġpo cházet", + "- Ðļ", + "Ġзав д", + "Ùİ Ø³", + "ç»ĵ æŀĦ", + "Ùħ ار", + "Ùħا ر", + "ν οι", + "νο ι", + "ĠÎł εÏģι", + "ĠγεÏģ ι", + "èĩ £", + "Ġna cházÃŃ", + "Ġnach ázÃŃ", + "ÏĦ Ïİ", + "à¥įय त", + "u yu", + "uy u", + "æķ Ĺ", + "e bi", + "eb i", + "Ġë°Ķ ë¡ľ", + "ĠгÑĢ Ð½", + "ĠاÙĦ اس", + "Ġorg án", + "Ġ edin", + "Ġe din", + "Ġed in", + "Ġedi n", + "åŁ ĥ", + "à¹ģ à¸Ħ", + "ĠØŃ دÙĪØ¯", + "ĠØŃد ÙĪØ¯", + "ĠдÑĢÑĥг ой", + "ĠдÑĢÑĥго й", + "оÑģ ков", + "оÑģк ов", + "ĠS ợ", + "ĠpÅĻ ib", + "ĠpÅĻi b", + "ä¿Ŀ æĬ¤", + "Ùħ بر", + "Ġ ãĥĨ", + "Ġãĥ Ĩ", + "Ġd oz", + "Ġdo z", + "op tera", + "opt era", + "ิล à¸Ľ", + "د ارÛĮ", + "دار ÛĮ", + "دا رÛĮ", + "æĦŁ è§ī", + "代 çIJĨ", + "ÙĨ دا", + "ÙĨد ا", + "ا ÙĬا", + "اÙĬ ا", + "ص ÙĨ", + "Ġce lé", + "Ġcel é", + "Ġ è©ķ", + "Ġè© ķ", + "à¸ĩ à¸Ļ", + "Ġ leh", + "Ġl eh", + "Ġle h", + "èİ· å¾Ĺ", + "ãĢĢ ï¾ī", + "ĠìĦł ìĪĺ", + "르 ëĬĶ", + "à¤Ĩ र", + "å§Ķ åijĺ", + "æĹł çłģ", + "Ġ è·", + "Ġè ·", + "Ġza jÃŃm", + "Ġzaj ÃŃm", + "ec ké", + "eck é", + "æ µľ", + "æµ ľ", + "ĠÑĥ нÑĸвеÑĢÑģиÑĤ", + "ĠбÑİдж еÑĤ", + "à¥ĩ .", + "Ġv stup", + "Ġ оÑī", + "Ġо Ñī", + "Ġ åľĭ", + "Ġåľ ĭ", + "ä¸ģ 缮", + "Ġв едÑĮ", + "Ġвед ÑĮ", + "Ġë§IJ ìĿĦ", + "Ġtek nik", + "Ġtekn ik", + "ãĢĢ ï½Į", + "ãĢĢï½ Į", + "ĠпÑĸд виÑī", + "ĠÑģвÑıз и", + "ĠÑģвÑı зи", + "Ġتر جÙħ", + " ī", + "ĠÄij âu", + "Ñĸ Ñĩного", + "ÑĸÑĩ ного", + "å°ij å¹´", + "e cta", + "ect a", + "ec ta", + "ि लत", + "िल त", + "ι οÏĤ", + "ιο ÏĤ", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "t eg", + "te g", + "á» īnh", + "á»ī nh", + "¯ ¿", + "Ġne bu", + "Ġneb u", + "ÙĬ ÙĬÙĨ", + "о ÑıÑĤ", + "оÑı ÑĤ", + "é¤ Ĭ", + "ĠاÙĤتص ادÛĮ", + "ĠاÙĤتصاد ÛĮ", + "âĢĻ nun", + "âĢĻn un", + "ĠÐĴ Ñĸк", + "Ġng Äĥn", + "ëĮĢ íķĻêµIJ", + "ëĮĢíķĻ êµIJ", + "é ı", + "़ र", + "ا باÙĨ", + "اب اÙĨ", + "Ùİ Ùĥ", + "Ġet kil", + "Ġetk il", + "Ġetki l", + "Ġch ắn", + "Ġë°ľ ìĥĿ", + "Ġtam amen", + "Ġtamam en", + "ĠÙħØŃ ÛĮØ·", + "ü lü", + "ül ü", + "åģ¥ åº·", + "ĠÑĢаÑģÑĤ ениÑı", + "ÏĢο ί", + "Ġ è¶ħ", + "Ġè¶ ħ", + "á Äį", + "ĠìϏ ë¶Ģ", + "ĠØ® ÛĮÙĦÛĮ", + "ĠØ®ÛĮ ÙĦÛĮ", + "Ġد ÙĪØ³Øª", + "ĠدÙĪ Ø³Øª", + "à¹Ģà¸Ĥ à¸ķ", + "Ġk alan", + "Ġka lan", + "Ġkal an", + "ë¨ ¼", + "a vÄĽ", + "av ÄĽ", + "문 íĻĶ", + "Ġди аг", + "ĠÙĨ ÙĪÙĬس", + "ĠÙĨÙĪ ÙĬس", + "íķ ij", + "à¸ŀ าะ", + "ëĭ¤ ê°Ģ", + "Ġn iá»ĩm", + "Ġس ÙĪÙħ", + "ĠسÙĪ Ùħ", + "- м", + "à¸Ķำ à¹Ģà¸Ļ", + "à¹ĩ ว", + "ãĢĤ ãģĵãģ®", + "ç¯ ī", + "Width Space", + "Zero WidthSpace", + "ائ ÙħØ©", + "ائÙħ Ø©", + "à¹Ħà¸ĭ à¸ķ", + "ä¸ĭè½½ 次æķ°", + "ä¼¼ ä¹İ", + "ĠÑĤ в", + "Ġzá kaz", + "Ġج دا", + "Ġجد ا", + "Ġg ider", + "Ġgi der", + "Ġgid er", + "ãĥ¼ ãĥĵ", + "ãĥ¼ãĥ ĵ", + "n ů", + "Ġë§ģ íģ¬", + "ĠdÃ¼ÅŁ ük", + "Ñĥ нок", + "Ñĥн ок", + "Ġt óc", + "ĠÑĤ ÑĢÑĥб", + "ĠÑĤÑĢ Ñĥб", + "ĠÑĤÑĢÑĥ б", + "о кÑģ", + "ок Ñģ", + "Ġtr ải", + "Ġtrả i", + "Ġm iá»ħn", + "Ġth Æ°á»Ľc", + "Ġnh áºŃt", + "Âł D", + "m asının", + "mas ının", + "masını n", + "è¼ ª", + "ĠÎĿ ο", + "er ç", + "Ġdok once", + "Ġdokon ce", + "ĠG üven", + "ĠGü ven", + "ov aná", + "ova ná", + "ovan á", + "е зд", + "ез д", + "Ñĸ нÑĮ", + "Ñĸн ÑĮ", + "èģ ²", + "اÙĦ Ø£", + "ï¼Į ä½Ĩæĺ¯", + "ï¼Įä½Ĩ æĺ¯", + "Ġпол ноÑģÑĤÑĮÑİ", + "Port ály", + "ĠØŃ اÙ쨏", + "à¥Ĥ à¤ķ", + "ÑĢ Ñĥн", + "ÑĢÑĥ н", + "人 çī©", + "Ġa çı", + "Ġaç ı", + "Ġp oru", + "Ġpo ru", + "Ġpor u", + "er iod", + "eri od", + "ĠAmer ika", + "ĠAmerik a", + "çĩ Ł", + "Ġ رÙĪØ¯", + "Ġر ÙĪØ¯", + "ĠرÙĪ Ø¯", + "ĠкÑĢов и", + "ÙĪ ÙĤت", + "ÙĪÙĤ ت", + "éĺ ¶", + "ãĥ»âĶģ ãĥ»âĶģ", + "ر ÙĬÙħ", + "رÙĬ Ùħ", + "åİĨ åı²", + "ä¸ ¸", + "Ġзн овÑĥ", + "Ġзнов Ñĥ", + "ĠÑģво его", + "ĠÑģвое го", + "бÑĥд ÑĮ", + "ĠØŃ جÙħ", + "ĠØŃج Ùħ", + "ĠδÏį ο", + "ìķĪ ëĤ´", + "Ġ ãģ§", + "à¹Ī ะ", + "Ùij Ùı", + "çµIJ æŀľ", + "âĢĻ i", + "à¹Į ,", + "åŃĺ äºİ", + "Ġरà¤ĸ न", + "ĠسرÙħ اÛĮÙĩ", + "Ġг лÑĥб", + "ĠглÑĥ б", + "ĠÑĢаз Ñĸ", + "ĠÑĢа зÑĸ", + "Ñĩ нÑĸ", + "ï¼Į åıĪ", + "c ısı", + "cı sı", + "æľī åħ³", + "ãĤ» ãĥ³", + "èIJ ¨", + "ĠGi áo", + "ĠGiá o", + "ĠاÙĦØ« اÙĨÙĬ", + "ĠÑĢаз ом", + "Ġ ÑĤÑĢо", + "ĠÑĤ ÑĢо", + "ĠÑĤÑĢ Ð¾", + "Ġaçık lam", + "åĨ³ å®ļ", + "à¸Ń à¸Ľ", + "åĶ ¯", + "ĠÅŁ ark", + "ĠÅŁar k", + "Ġsist emi", + "Ġsistem i", + "Ġto prak", + "Ġtop rak", + "èĢĥ ãģĪ", + "Ġпоп ÑĥлÑıÑĢ", + "Ġ ëĨį", + "ĠëĨ į", + "ا ÙĬÙĨ", + "اÙĬ ÙĨ", + "स म", + "Ġ ÂĢ", + "Ġ Ģ", + "Ġed erek", + "Ġeder ek", + "Ġg ec", + "Ġge c", + "ìĤ¬ ìĹħ", + "ĠÑĢ Ð¾ÐºÐ¸", + "ĠÑĢок и", + "ĠбеÑĢ ÐµÐ¼", + "ĠخاÙĨÙĪ Ø§Ø¯Ùĩ", + "Ġ èµ·", + "Ġèµ ·", + "Ġ ЧÑĤо", + "ĠЧ ÑĤо", + "Ġo bÄĽ", + "Ġob ÄĽ", + "и нÑĸ", + "ин Ñĸ", + "ìĿ´ ìĹĪ", + "ĠIn di", + "ĠInd i", + "Ġд иÑĤ", + "Ġди ÑĤ", + "ãĥ¶ æľĪ", + "Ġнем ного", + "Ġzáklad ÄĽ", + "à¹Ĥ à¸Ħ", + "ĠÑģам ого", + "ĠÑģамо го", + "Ġب ØŃØ«", + "ĠبØŃ Ø«", + "Ġ æ¶", + "Ġæ ¶", + "ов ж", + "Ġоб ÑĢаÑī", + "ĠобÑĢа Ñī", + "à Ĵ", + "ว รร", + "วร ร", + "à¤Ĥ श", + "ĠоÑĩ еÑĢед", + "ĠÙģ Ø±Ø²", + "ĠÙ쨱 ز", + "ëĮĢ íķľ", + "Ġs izin", + "Ġsi zin", + "Ġsiz in", + "Ġsizi n", + "ر ÙģØª", + "رÙģ Øª", + "Ñİ Ñīим", + "ÑİÑī им", + "æ» ij", + "a vir", + "av ir", + "avi r", + "ĠÙĪ ØµÙĦ", + "ĠÙĪØµ ÙĦ", + "Ġqu ay", + "Ġqua y", + "Ġг ип", + "ÑĢ ÐµÐ½Ð¸Ñı", + "ÑĢе ниÑı", + "ÑĢен иÑı", + "à¥į वत", + "à¥įव त", + "ιν Ïīν", + "à¤ľ ह", + "Ġh Æ¡i", + "Ġpo važ", + "Ġpov až", + "Ġع رب", + "м енÑĤа", + "мен ÑĤа", + "менÑĤ а", + "Ġо ÑģÑĤан", + "ĠоÑģÑĤ ан", + "ä¹ĭ éĹ´", + "a cÃŃch", + "ac ÃŃch", + "acÃŃ ch", + "ĠÑģказ ала", + "ĠÑģказал а", + "ìĿ´ ëĿ¼ëĬĶ", + "ìĿ´ëĿ¼ ëĬĶ", + "ĠØ´ اخ", + "Ġëĭ¹ ìĭł", + "ar lar", + "arl ar", + "Ġмл н", + "åĨ ¬", + ". :.:.:", + ".: .:.:", + ".:.: .:", + ".:. :.:", + ".:.:. :", + "Ġ θε", + "Ġθ ε", + "Ġher kes", + "Ġherk es", + "л Ñıд", + "лÑı д", + "ا Ùħا", + "اÙħ ا", + "Ġë ŃIJ", + "Ïĥιμο ÏĢοι", + "Ġ obraz", + "Ġob raz", + "Ġobr az", + "Ġobra z", + "غ اÙĦ", + "B Æ°á»Ľc", + "å° Ĭ", + "ìŀIJ 를", + "æĢ Ĵ", + "οÏħ Ïģγ", + "å¼ķ ãģį", + "Ġkon uda", + "Ġkonu da", + "ĠاÙĦت ج", + "Ġ krit", + "Ġk rit", + "Ġkr it", + "å¿ į", + "ĠìłĦìĦ¸ ê°Ģ", + "г овоÑĢ", + "го воÑĢ", + "гов оÑĢ", + "Ġist iyor", + "о ки", + "ок и", + "ĠобеÑģп еÑĩ", + "ĠобеÑģпе Ñĩ", + "Ġay rıca", + "Ġayrı ca", + "à¹Ģ à¸ľ", + "à¹Ģภľ", + "а ÑĢод", + "аÑĢ Ð¾Ð´", + "İ Åŀ", + "ĠجÙħ ÙĩÙĪØ±ÛĮ", + "ĠجÙħÙĩÙĪØ± ÛĮ", + "ĠÑģво иÑħ", + "ĠÑģвои Ñħ", + "Ġprov ád", + "Ġ ÑĢам", + "ĠÑĢ Ð°Ð¼", + "ĠÑĢаР¼", + "ĠÑĢа м", + "ĠÙĤ ض", + "л иÑĤелÑĮ", + "лиÑĤ елÑĮ", + "ãĤ± ãĥĥãĥĪ", + "оÑģ оÑĦ", + "Ġर हन", + "Ġरह न", + "k ový", + "ko vý", + "kov ý", + "ì° ¸", + "γ κα", + "γκ α", + "λ οι", + "λο ι", + "μ ÏĢο", + "μÏĢ Î¿", + "ĠÄij au", + "ĠÄija u", + "н иÑİ", + "ни Ñİ", + "Ġman žel", + "Ġ íĺ¼", + "Ġíĺ ¼", + "ĠÑĤ иÑģ", + "ĠÑĤи Ñģ", + "ãĥĨ ãĥ«", + "ab ilecek", + "abil ecek", + "abile cek", + "abilece k", + "н ин", + "ни н", + "à¸ģรรม à¸ģาร", + "éł IJ", + "Ġph ê", + "j edn", + "je dn", + "jed n", + "交 æµģ", + "Ġвним ание", + "об ÑĢеÑĤ", + "Ġжиз нÑĮ", + "ÑĢи ÑģÑĤи", + "ÑĢиÑģÑĤ и", + "ÑĢиÑģ ÑĤи", + "à¥Ī à¤ļ", + "Ġyüz den", + "Ġyüzde n", + "Ġg iy", + "Ġgi y", + "éļ Ķ", + "ä» ²", + "Ġ èĻ", + "Ġè Ļ", + "ĠP arti", + "ĠPart i", + "ĠPar ti", + "Ġ éĸ¢", + "Ġéĸ ¢", + "ัà¸ļ ส", + "Ġnej lepÅ¡ÃŃ", + "Ùİ Ùī", + "ĠìĿ´ ìłľ", + "Ġc ắt", + "ÑĢоз Ñĥм", + "Ġnej sou", + "l ÃŃd", + "lÃŃ d", + "θ ο", + "à¹ĩ à¸ĩ", + "ĠÑģп ÑĢоÑģ", + "ma mÄ±ÅŁ", + "mam Ä±ÅŁ", + "Ġ 쪽", + "Ġì ª½", + "ا ÙģÙĤ", + "اÙģ ÙĤ", + "ÑĨÑĸй ниÑħ", + "Ġ é¦Ļ", + "Ġé¦ Ļ", + "ĠÙħÛĮÙĦÛĮ ÙĪÙĨ", + "å¤ ¢", + "ĠÙģ Ùĩرست", + "r ý", + "Ġпо вÑĸдом", + "Ġпов Ñĸдом", + "ec eÄŁi", + "ece ÄŁi", + "ĠзабезпеÑĩ еннÑı", + " Ķ", + "ãģĹ ãģªãģĦ", + "åŁº ç¡Ģ", + "ĠÚĨ ÙĨÛĮÙĨ", + "ĠÑĢоз ÑĢоб", + "ä¸Ģ äºĽ", + "ãĥ³ ãģ®", + "ĠпÑĢа ÑĨÑĸв", + "ĠпÑĢаÑĨÑĸ в", + "å¾Ĺ åΰ", + "Ġt ấn", + "åŃĺæ¡£ å¤ĩ份", + "Ġ íĻĪ", + "ĠíĻ Ī", + "Ġ à¸Ķาว", + "Ġà¸Ķ าว", + "ìĭ ±", + "л ина", + "ли на", + "лин а", + "ĠвоÑģп ал", + "ÄŁ inden", + "ÄŁin den", + "ÄŁinde n", + "аÑĤ елей", + "аÑĤе лей", + "r ž", + "ĠÑĦ Ñĥн", + "ĠÐIJ л", + "ĠпоÑĩ ÑĤи", + "о вÑĸд", + "ов Ñĸд", + "овÑĸ д", + "ا عب", + "اع ب", + "าะ ห", + "Ġвоз ÑĢаÑģÑĤ", + "ิà¸ĩ ห", + "ĠÙģ ÙĦس", + "ĠÙģÙĦ س", + "ĠÅ¡ est", + "à¸Ĭ าว", + "Ġ 골", + "Ġê³ ¨", + "Ġ oÄį", + "Ġo Äį", + "ãĤ¸ ãĥ§", + "к оÑģÑĤи", + "ко ÑģÑĤи", + "éĽĨ åĽ¢", + "æ± ĩ", + "ĠpÅĻÃŃ liÅ¡", + "Ġ ìĿij", + "ĠìĿ ij", + "ди ви", + "див и", + "ĠдокÑĥм енÑĤа", + "ĠдокÑĥменÑĤ а", + "ĠCh âu", + "Ġm áu", + "Ġmá u", + "Ġkh ô", + "à ķ", + "Ñī ий", + "Ñīи й", + "Ġs ẵn", + "Ġкон ÑĦ", + "Ġз ÑĥÑģÑĤ", + "åĽŀ çŃĶ", + "Ġ коÑĢиÑģÑĤ", + "ĠкоÑĢ Ð¸ÑģÑĤ", + "Ġко ÑĢиÑģÑĤ", + "ĠÏĢεÏģ ί", + "ĠÏĢε Ïģί", + "ä¸ °", + "Ġm ạch", + "ан к", + "ä¸ĭ æĿ¥", + "èµĦ æĸĻ", + "ย à¸Ńà¸Ķ", + "ĠÏĢ Î¹Î¿", + "à¹ī à¸ĩาà¸Ļ", + "à¹īà¸ĩ าà¸Ļ", + "Ġum ÃŃst", + "æ½ ®", + "çªģ çĦ¶", + "Ġk ultur", + "Ġkul tur", + "ĠاÙĦ صÙģ", + "ĠاÙĦص Ùģ", + "a larının", + "alar ının", + "aların ın", + "alarını n", + "ĠÎĶη μο", + "Ġвикон аннÑı", + "Ġвико наннÑı", + "ï½ ¿", + "Ġбез опаÑģ", + "ĠÑģ аÑħ", + "Ġn oh", + "Ġno h", + "à¹ĥ à¸ļ", + "éĥ½ å¸Ĥ", + "ÅŁ am", + "ÅŁa m", + "б ÑĥÑĤ", + "бÑĥ ÑĤ", + "Ġ모 ìĬµ", + "Ġв аг", + "Ġва г", + "çIJĨ è§£", + "Ġekonom ik", + "Ġkh ắc", + "Ġs vat", + "Ġsv at", + "лиÑĪ ÐºÐ¾Ð¼", + "ัà¸ĩ à¸Īาà¸ģ", + "iz yon", + "èĥ½ å¤Ł", + "ί νει", + "ίν ει", + " Ĭ", + "ì¦ Į", + "Ġ ÙĩاÛĮÛĮ", + "ĠÙĩ اÛĮÛĮ", + "ĠÙĩاÛĮ ÛĮ", + "ĠkiÅŁ iler", + "ĠkiÅŁi ler", + "Ġк леÑĤ", + "Ġкл еÑĤ", + "Ġкле ÑĤ", + "íĺ ģ", + "à¥ĥ द", + "i Å¡", + "ëĶĶ ìĺ¤", + "ÙĬ راÙĨ", + "ÙĬر اÙĨ", + "ÙĬرا ÙĨ", + "ĠÐĿ Ñĥ", + "à¸Ń à¸Ļà¸Ĺ", + "à¸Ńà¸Ļ à¸Ĺ", + "ĠÑģ оÑĩ", + "ĠÑģо Ñĩ", + "Ġist eyen", + "ĠS ez", + "ĠSe z", + "Ġ ãĤ»", + "ĠãĤ »", + "ĠA ç", + "âĢĮ ÙĨ", + "ĠÑĤ оп", + "ĠÑĤо п", + "ĠÑĤеÑĢÑĢиÑĤ оÑĢ", + "a cılık", + "acı lık", + "Ġод нÑĥ", + "Ġv eri", + "Ġver i", + "Ġve ri", + "ĠÚ© د", + "ĠÚ¯ ÙģØªÙĩ", + "ĠÚ¯ÙģØª Ùĩ", + "Ġcin sel", + "Ġcins el", + "олог ии", + "ĠpÅĻed mÄĽt", + "à¤Ĥ à¤ĺ", + "Ġ 空", + "Ġç© º", + "γ α", + "' ye", + "'y e", + "ت رة", + "تر Ø©", + "Ġd ÅĻÃŃ", + "ĠH Ãłn", + "ĠHÃł n", + "Ġر شتÙĩ", + "Ġv idea", + "Ġvi dea", + "Ġvid ea", + "Ġvide a", + "Ġ ног", + "Ġн ог", + "Ġно г", + "æ ·»", + "æ· »", + "è¿ĺ æľī", + "ÙĨ در", + "ÙĨد ر", + "Ġy erde", + "Ġyer de", + "Ġk ent", + "Ġke nt", + "Ġken t", + "à¸ļ าล", + "Ġд еÑģÑı", + "Ġде ÑģÑı", + "ä¸ļ åĬ¡", + "Ġоб ÑĬек", + "ĠобÑĬ ек", + "ĠвнÑĥÑĤÑĢ ÑĸÑĪ", + "ĠвнÑĥÑĤ ÑĢÑĸÑĪ", + "k ola", + "ko la", + "kol a", + "eb nÃŃ", + "ี ล", + "Ġ ,.", + "Ġ, .", + "ĠмÑĸж наÑĢод", + "ãģªãĤĵ ãģ¦", + "ĠS öz", + "Ġ chod", + "Ġc hod", + "Ġch od", + "Ġcho d", + "Ġtr úc", + "Ġtrú c", + "ìļĶ ìĿ¼", + "Ġph áºŃn", + "Ñģ ка", + "Ñģк а", + "ĠÑħ лоп", + "Ñģ ким", + "Ñģк им", + "Ñģки м", + "Ġka pit", + "Ġkap it", + "ëĵ¤ ìĹIJê²Į", + "Ġb Ãło", + "ĠbÃł o", + "lı ģın", + "lıģı n", + "lıģ ın", + "İ ÅŁ", + "Äį nÃŃk", + "ÄįnÃŃ k", + "Ġ NgoÃłi", + "ĠNg oÃłi", + "Ġب ÛĮاÙĨ", + "ĠبÛĮ اÙĨ", + "Ġpro Äį", + "Ġpr oÄį", + "ĠпÑĢоÑĤ Ñıгом", + "åĢ ī", + "е Ñİ", + "Ġ νο", + "Ġν ο", + "ëĿ¼ ëıĦ", + "ì ·¨", + "Ġви Ñıв", + "Ġпо над", + "Ġпон ад", + "Ġжов ÑĤ", + "Ġ æ¯Ķ", + "Ġæ¯ Ķ", + "Ġd oby", + "Ġdo by", + "Ġdob y", + "л ам", + "ла м", + "Ñij л", + "Ġ ÑĢаÑħ", + "ĠÑĢ Ð°Ñħ", + "ĠÑĢа Ñħ", + "Ġвоз ника", + "Ġвозник а", + "ниÑĨÑĤ во", + "å± ¤", + "ĠоÑĤ лиÑĩ", + "ĠоÑĤли Ñĩ", + "çĤ İ", + "é£ ¯", + "Ġživ ota", + "Ġživot a", + "at ör", + "Ġce lý", + "Ġcel ý", + "Ġ aday", + "Ġa day", + "Ġad ay", + "Ġada y", + "ر ÙĬÙĥÙĬ", + "رÙĬ ÙĥÙĬ", + "رÙĬÙĥ ÙĬ", + "Ġب ص", + "m eyen", + "me yen", + "meye n", + "mey en", + "ìļ° ìĬ¤", + "ب ÙĪÙĦ", + "بÙĪ ÙĦ", + "Ġ озна", + "Ġо зна", + "Ġоз на", + "é º¼", + "éº ¼", + "æĵ ļ", + "Ġz kou", + "Ġzk ou", + "ëĤĺ ìļĶ", + "Ġk ry", + "Ġkr y", + "Ġnem oh", + "Ġvyu žÃŃ", + "Ġ æľ¨", + "Ġад мÑĸнÑĸÑģÑĤÑĢа", + "ا Ùĩا", + "اÙĩ ا", + "à¹ĥ à¸ģล", + "____ ____", + "Ġ гоÑĤ", + "Ġг оÑĤ", + "ĠدÛĮ گرÛĮ", + "ĠدÛĮگر ÛĮ", + "Ġл екаÑĢ", + "è§ Ģ", + "Ġ íĺij", + "Ġíĺ ij", + "ĠB öyle", + "ist rov", + "istr ov", + "istro v", + "女 åŃIJ", + "Ġпоп еÑĢед", + "ĠÙĨÙĪÙĬس ÙĨدÙĩ", + "ÙĴ ÙĦ", + "ĠÐŁ ав", + "Ġö rnek", + "Ġör nek", + "Ġп ÑĢик", + "ĠпÑĢ Ð¸Ðº", + "ĠпÑĢи к", + "Ġ ÑĪи", + "ĠÑĪ Ð¸", + "üslü man", + "ĠÙħÙĤ ابÙĦ", + "åįģ äºĮ", + "Ġb ekl", + "Ġbe kl", + "Ġbek l", + "Ġver ir", + "Ġve rir", + "Ġveri r", + "ÙĪ Ø°", + "ض Ø©", + "ÑĢо ÑĤив", + "ÑĢоÑĤ ив", + "æĮ ij", + ". .:", + ".. :", + "Ġخارج ÙĬØ©", + "a dık", + "ad ık", + "adı k", + "ĠÐŁ оÑĩ", + "ĠÐŁÐ¾ Ñĩ", + "ĠÑħÑĥд ож", + "客 æĪ·", + "μ ον", + "μο ν", + "ek tiv", + "ekt iv", + "Ġt vá", + "Ġtv á", + "Û² Û²", + "Ġl á»įc", + "Ġо но", + "Ġон о", + "ÑĨ иÑĤ", + "ÑĨи ÑĤ", + "ĠÐĴ Ñģ", + "Ġ å¢", + "Ġå ¢", + "æµ ª", + "а ÑĢÑĸ", + "аÑĢ Ñĸ", + "Ġsür ekli", + "Ġ stra", + "Ġs tra", + "Ġst ra", + "Ġstr a", + "Ġb ize", + "Ġbi ze", + "Ġbiz e", + "Ġtes pit", + "Ġch âu", + "ĠاÙĦ ض", + "à¹īà¸Ń à¸ĩà¸ģ", + "à¹īà¸Ńà¸ĩ à¸ģ", + "Ġ èĢħ", + "ĠèĢ ħ", + "ĠH á»", + "Ġкажд Ñĭй", + "а Ñİ", + "à¸Ļ à¸Ħร", + "à¸Ļà¸Ħ ร", + "à¸Ĺ ะ", + "ĠÙħر اجع", + "ĠÙħراج ع", + "Ġha line", + "Ġhal ine", + "δ οÏĤ", + "δο ÏĤ", + "e ÄŁi", + "ĠÙħÛĮ زاÙĨ", + "Ġ ÙĩÙĦ", + "ĠÙĩ ÙĦ", + "Ġb olest", + "Ġbo lest", + "Ġbol est", + "Ġ åľŁ", + "Ġåľ Ł", + "Ġu zman", + "Ġuz man", + "ÑĢ Ð¾Ð³", + "ÑĢо г", + "確 èªį", + "ĠÑĢÑĸз ниÑħ", + "Ġза кÑĢÑĭ", + "Ġзак ÑĢÑĭ", + "лÑĥ ги", + "лÑĥг и", + "ĠÑģо веÑĤ", + "ĠÑģов еÑĤ", + "id di", + "idd i", + "åIJĪ ãĤıãģĽ", + "Ġ åIJī", + "ĠåIJ ī", + "Ġk iá»ĩm", + "ë² ½", + "ĠÙħع ÙħÙĪÙĦ", + "ĠопÑĢед елÑı", + "ĠопÑĢедел Ñı", + "Ġmik tar", + "Ġ ìŀIJëıĻ", + "ĠìŀIJ ëıĻ", + "Ġil aç", + "л оÑĩ", + "ло Ñĩ", + "Ġy ılı", + "Ġyıl ı", + "Ġyı lı", + "Ġ ÄIJá»ĥ", + "ĠÄIJ á»ĥ", + "ĠÄIJá» ĥ", + "Ġab ych", + "Ġaby ch", + "Ġrek lam", + "Ġrekl am", + "Ġv ypad", + "Ġvy pad", + "Ġvyp ad", + "Ġна ÑĥÑĩ", + "à¹Ģà¸Ħร าะห", + "Ġ ä»ĸ", + "p ovÄĽ", + "po vÄĽ", + "ï¼Į 让", + "ç¥ Ŀ", + "ا ÙĪÙĨد", + "اÙĪ ÙĨد", + "اÙĪÙĨ د", + "Ġ: |:", + "Ġ:| :", + "Ġre ž", + "Ġvyb av", + "ìľ ¤", + "æŃ ´", + "огÑĢаÑĦ иÑı", + "ez peÄį", + "ezpe Äį", + "± n", + "о вÑĥ", + "ов Ñĥ", + "Ġд Ñĥма", + "ĠдÑĥ ма", + "ĠдÑĥм а", + "Ġjedn odu", + "Ġjedno du", + "о Ñīи", + "оÑī и", + "ĠÙħ شتر", + "ĠÙħØ´ تر", + "è¦ ³", + "Ġyok tur", + "Ġyoktu r", + "Ġob Äįan", + "ĠTr ần", + "ım sız", + "α ιν", + "αι ν", + " Į", + "ر ÛĮاÙĨ", + "رÛĮ اÙĨ", + "ĠJe ho", + "ĠJeh o", + "ĠاÙĦ Ø¢ÙĨ", + "ĠاÙĦØ¢ ÙĨ", + "ÑģÑĮ ким", + "ÑģÑĮк им", + "Ġk dyby", + "Ġkdy by", + "ĠbaÅŁ ına", + "Ġprez ident", + "Ġ Viá»ĩc", + "ĠV iá»ĩc", + "åħ ¼", + "à¥Į à¤ľ", + "Ġ매매 ê°Ģ", + "模 å¼ı", + "nÃŃ mu", + "nÃŃm u", + "Ġ åĤ", + "Ġå Ĥ", + "Ġ deniz", + "Ġd eniz", + "Ġden iz", + "ĺ èĽĽ", + "Ġ èĢĮ", + "ĠèĢ Į", + "ÙĪ ØŃ", + "Ñĭ п", + "Ġâĸ ¼", + "n ul", + "nu l", + "ĠS ev", + "ĠSe v", + "Ġ ruh", + "Ġr uh", + "Ġru h", + "Ġh ạ", + "Ġ Ñıн", + "ĠÑı н", + "Ġ기 본", + "Ġv elik", + "Ġve lik", + "Ġvel ik", + "ĠT ân", + "и лиÑģÑĮ", + "ил иÑģÑĮ", + "или ÑģÑĮ", + "ĠÑħ ÑĢа", + "åĤ ·", + "Ġà¤Ĩ à¤ı", + "Ġn ynÃŃ", + "Ġny nÃŃ", + "» ØĮ", + "ĠØ´ ع", + "æĿ Ĥ", + "Ġм ÑĭÑĪ", + "ĠмÑĭ ÑĪ", + "ãģĻ ãģIJ", + "Ġ ê³µì§Ģ", + "Ġê³µ ì§Ģ", + "Ġt á»Ļc", + "ãĥ¼ ãĥĩ", + "ãĥ¼ãĥ ĩ", + "ĠÑģ ело", + "ĠÑģел о", + "Ġا عÙĦاÙħ", + "Ġاع ÙĦاÙħ", + "ĠÅŁ imdi", + "ĠÅŁi mdi", + "ĠاÙĦÙħ ÙĬÙĦاد", + "ĠاÙĨÙĤÙĦ اب", + "Ġشخص ÙĬØ©", + "ĠK ür", + "ĠKü r", + "Ġ вÑĸÑĤ", + "Ġв ÑĸÑĤ", + "ĠвÑĸ ÑĤ", + "ĠاÙĨد ازÙĩ", + "Ġм оÑī", + "Ġмо Ñī", + "t ernet", + "ter net", + "tern et", + "ĠαÏħ ÏĦή", + "ĠÑĢоз ÑĤа", + "Ġв ив", + "Ġви в", + "l ej", + "le j", + "Ġ 表", + "Ġè¡ ¨", + "ÏĥÏĥ ÏĮÏĦε", + "ĠÙĬ ست", + "ĠÙĬس ت", + "Ġм аÑĪ", + "Ġма ÑĪ", + "åĿ ļ", + "Ġком наÑĤ", + "า หล", + "าห ล", + "Ġ çϼ", + "ĠçĻ ¼", + "ĠاÙĪÙĦ ÛĮÙĨ", + "è¿IJ åĬ¨", + "Ġп ÑĥнкÑĤ", + "ĠпÑĥнк ÑĤ", + "ĠоÑģоб енно", + "Ġм ам", + "Ġма м", + "ç» ©", + " ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄", + "алÑĮ нÑĭм", + "ĠЦ енÑĤ", + "ĠЦе нÑĤ", + "- Ðľ", + "ç· Ĵ", + "Ġह à¤ľ", + "о ÑĤÑĭ", + "оÑĤ Ñĭ", + "ãĤ¤ ãĥī", + "د ارة", + "دار Ø©", + "دا رة", + "ãģ¨ ãģĹãģŁ", + "ั à¸ŀย", + "ัà¸ŀ ย", + "Ġot áz", + "Ġдопом огоÑİ", + "à¹ģละ à¸ģาร", + "ĠÑĤÑĢанÑģп оÑĢÑĤ", + "ĠÑĤÑĢанÑģпоÑĢ ÑĤ", + "ĠÙĤر Ø¢ÙĨ", + "Ġ 第ä¸Ģ", + "Ġ第 ä¸Ģ", + "Ġм ил", + "Ġми л", + "Ġng ôi", + "Ġl inh", + "Ġli nh", + "Ġlin h", + "ĠNh ân", + "ÑĮогод нÑĸ", + "æĢ Ģ", + "à¹ī าส", + "à¹īา ส", + ".:: .::", + "Ġbi rey", + "Ġbir ey", + "æĢĿ ãģĦ", + "à¹ĥ à¸Ķ", + "веÑĢ Ð´", + "ве ÑĢд", + "Ġlistop adu", + "Ġ à¹ģม", + "Ġà¹ģ ม", + "г е", + "Ġк ÑĥÑħ", + "ĠкÑĥ Ñħ", + "Ġ íĻľëıĻ", + "ĠíĻľ ëıĻ", + "Ġ èİ", + "Ġè İ", + "ĠÐIJ лÑĮ", + "ĠÐIJл ÑĮ", + "íļĮ ìĿĺ", + "ĠÏĢ Ïģα", + "Ġv ui", + "Ġvu i", + "ว ร", + "à¤Ĥ व", + "Ġg ece", + "Ġge ce", + "Ġgec e", + "ç« ¶", + "Ġk uv", + "Ġku v", + "м еÑī", + "ме Ñī", + "ĠÑĤеп еÑĢÑĮ", + "ĠÑĤепеÑĢ ÑĮ", + "à¸Ń à¹Ģม", + "åζ 度", + "ĠÑĤ ÑĢеÑĤ", + "ĠÑĤÑĢ ÐµÑĤ", + "ĠÙĨ تÛĮجÙĩ", + "ä»ĺ ãģį", + "Ġ ï¾ŀ", + "Ġï¾ ŀ", + "Ġ Ñĩого", + "ĠÑĩ ого", + "âĢIJ -", + "ĠÅĻÃŃ ká", + "à¸ĩ à¹ĥà¸Ļ", + "ĠnÄĽkol ika", + "ĠnÄĽkolik a", + "Ġb una", + "Ġbu na", + "Ġbun a", + "ï¼Į åŃĺäºİ", + "ล ำ", + "ãĢģ ãģ¨", + "Ġn á»Ļp", + "ĠاÙĦ جÙĨ", + "ĠاÙĦج ÙĨ", + "ĠÎł αν", + "Ġγα ν", + "Ðŀ Ðł", + "Ġدخ تر", + "Ġúda je", + "Ġúdaj e", + "Ġ å¼ł", + "Ġå¼ ł", + "r etim", + "re tim", + "ret im", + "s ınız", + "sın ız", + "ĠÙĩÙĨ اÙĥ", + "ĠÙĩÙĨا Ùĥ", + "ÐĽ Ь", + "æķ ¬", + "Îij Îľ", + "页éĿ¢ åŃĺæ¡£å¤ĩ份", + "ìĤ¬ ê°Ģ", + "Ġt rest", + "Ġtr est", + "Ġtre st", + "Ġtres t", + "v iÄį", + "vi Äį", + "ĠÙ¾ ÛĮدا", + "ĠÙ¾ÛĮ دا", + "ζ ε", + "ĠÐŁ ов", + "ĠÐŁÐ¾ в", + "ÙĦÙħ ات", + "o rex", + "or ex", + "ore x", + "è¬ Ľ", + "ĠвÑĸдк ÑĢиÑĤ", + "м аÑħ", + "ма Ñħ", + "ĠÑĩиÑģ ле", + "ت بار", + "تب ار", + "ĠÎŃ Îº", + "ìķĦ íĮĮíĬ¸", + "r avel", + "ra vel", + "rav el", + "α Ïĥία", + "αÏĥ ία", + "a Äį", + "Ġ à¤ıन", + "Ġà¤ı न", + "ละ à¹Ģà¸Ń", + "Ġз алеж", + "Ġза леж", + "Ġзал еж", + "Ġ æģ", + "Ġæ ģ", + "Ġмож еÑĤе", + "ĠможеÑĤ е", + "Ġможе ÑĤе", + "Ġпо вед", + "Ġпов ед", + "ĠبسÛĮ ارÛĮ", + "ĠبسÛĮار ÛĮ", + "Ġ poÄįet", + "Ġpo Äįet", + "ĠpoÄį et", + "ر بع", + "رب ع", + "e lez", + "el ez", + "ele z", + "ا ÙĪØ±ÛĮ", + "اÙĪ Ø±ÛĮ", + "اÙĪØ± ÛĮ", + "Ġba ÅŁk", + "ĠbaÅŁ k", + "å° Ĥ", + "Ġhal de", + "æĭ Ł", + "S au", + "Sa u", + "о ÑĨи", + "ี à¸Ħ", + "Ġв лади", + "Ġвла ди", + "Ġвлад и", + "ÙIJ Ùħ", + "k ud", + "ku d", + "à¥Ĥ ब", + "å§Ķ åĵ¡", + "า รà¸ĵ", + "าร à¸ĵ", + "o rů", + "or ů", + "Ġ ÙħÙĪÙĦ", + "ĠÙħ ÙĪÙĦ", + "ĠÙħÙĪ ÙĦ", + "Ġ byt", + "Ġb yt", + "Ġby t", + "ĠpÅĻÃŃslu Å¡", + "èĭ± è¯Ń", + "éĢ IJ", + "Ġvel ké", + "Ġvelk é", + "Ġà¤Ĩ श", + "Ġph iếu", + "Ġphi ếu", + "à¹ĥ ส", + "Ġاس Ù¾", + "Ġzbo žÃŃ", + "ãģĵ ãĤĵãģª", + "ãģĵãĤĵ ãģª", + "ĠÙĪÙĩ ÙĬ", + "ĠÑĥÑĩа ÑģÑĤÑĮ", + "ĠÑĥÑĩаÑģÑĤ ÑĮ", + "ĠÑĥÑĩаÑģ ÑĤÑĮ", + "à¸Īำ à¸Ļวà¸Ļ", + "Ġتر Ú©", + "åįģ åĪĨ", + "ÎŁ Îł", + "ÎŁÎ ł", + "κ ολ", + "κο λ", + "Ġf akat", + "Ġfa kat", + "Ġfak at", + "Ġch á»Ĺ", + "éĢļ çŁ¥", + "Ġв одÑĥ", + "Ġво дÑĥ", + "Ġвод Ñĥ", + "ĠÎļα ÏĦηγοÏģία", + "aca ģını", + "acaÄŁ ını", + "л ого", + "ло го", + "ĠmÃ¼ÅŁ ter", + "Ġj ednou", + "Ġjed nou", + "Ġjedn ou", + "Ġjedno u", + "Ġб аÑĢ", + "Ġба ÑĢ", + "i dae", + "id ae", + "ida e", + "d ım", + "dı m", + "è¾ ²", + "åIJ ¹", + "ëIJ ©ëĭĪëĭ¤", + "ĠÅŁekl inde", + "e ným", + "en ým", + "ený m", + "ëĵ ¯", + "i tÄĽ", + "it ÄĽ", + "Ġк олÑĮ", + "Ġкол ÑĮ", + "Ġко лÑĮ", + "ëĮĢ íķĻ", + "ĠÃĸ r", + "Ġ ê½", + "Ġê ½", + "ĠUB ND", + "Ġh ik", + "Ġhi k", + "ãĤī ãģĹãģĦ", + "ãĤīãģĹ ãģĦ", + "åĩº åĵģ", + "C ó", + "Ġ Îŀ", + "ĠÎ ŀ", + "Ġ åħ¥", + "Ġåħ ¥", + "ĠNg uyên", + "ĠÙ¾ ÙĪØ´", + "лÑı ÑĶ", + "ĠØ¢ غاز", + "Ġnhiá»ħ m", + "d ivid", + "div id", + "di vid", + "ç ĺ", + "ا ÙģØªÙĩ", + "اÙģ ØªÙĩ", + "اÙģØª Ùĩ", + "а меÑĤ", + "ам еÑĤ", + "нÑĥ лÑģÑı", + "нÑĥл ÑģÑı", + "ä¼ģ æ¥Ń", + "ÑĢоб ÑĸÑĤ", + "dü ÄŁÃ¼", + "dÃ¼ÄŁ ü", + "Ġ کاÙĨ", + "ĠÚ© اÙĨ", + "à¸Ń à¸ĩà¸Ĺ", + "à¸Ńà¸ĩ à¸Ĺ", + "й н", + "Ġpoh yb", + "Ġpohy b", + "Ġb iá»ĩn", + "Ġbi á»ĩn", + "Ġ ï¼Ľ", + "Ġï¼ Ľ", + "Ùħ ÙĨد", + "ÙħÙĨ د", + "Ġà¤Ĩ à¤ķ", + "ĠÄįlov ÄĽk", + "ĠÄįlovÄĽ k", + "ãĤĴè¦ĭ ãĤĭ", + "ë· °", + "ĠÑĥв елиÑĩ", + "ĠÑĥвели Ñĩ", + "Ġ ê´", + "Ġê ´", + "Ġyan lÄ±ÅŁ", + "éº ¦", + "Ġå¤ĸ éĥ¨", + "ÏĦ οÏħÏģγ", + "ÏĦοÏħ Ïģγ", + "Ġп ÑĢоÑĩ", + "ĠпÑĢ Ð¾Ñĩ", + "ĠпÑĢо Ñĩ", + "ĠÑĢÑĥ ковод", + "çĽ ¤", + "èľ ĺèĽĽ", + "å®ī è£ħ", + "ĠУ кÑĢа", + "Ġtart Ä±ÅŁ", + "ÑĤ аж", + "ÑĤа ж", + "ĠoluÅŁ an", + "ĠRus ya", + "Ġк лÑĥб", + "Ġкл Ñĥб", + "ĠклÑĥ б", + "ĠÎł Ρ", + "alı dır", + "k ın", + "kı n", + "ĠзмÑĸ ни", + "ĠзмÑĸн и", + "leÅŁ ik", + "еÑĢ Ð¿", + "об Ñīе", + "обÑī е", + "Ġqu áºŃn", + "Ġप श", + "ãĤĴ åıĹ", + "à¹Ģล à¸Ĥ", + "ا ضر", + "اض ر", + "Ġuž ivatel", + "λ ία", + "λί α", + "ĠÐĴ они", + "ĠÐĴо ни", + "ุà¸Ķ à¸Ĺ", + "ĠV Ãł", + "ãĥ³ ãĤ¿", + ") ëĬĶ", + "æ¸ Ľ", + "Ġ μÏĢ", + "Ġμ ÏĢ", + "å· §", + "ĠÑĪ ÐºÐ¾Ð»", + "ĠÑĪк ол", + "Ġì²ĺ ìĿĮ", + "ัà¸ģ à¸Ķ", + "æ® Ĭ", + "Ġnh á»Ŀ", + "ĠοÏĢο ία", + "à¹ģ à¸Ļว", + "à¹ģà¸Ļ ว", + "меÑĢик ан", + "nÃŃ ka", + "nÃŃk a", + "Ġíĺ¸ íħĶ", + "سب ب", + "à¸ĩ ม", + "ìŀĪ ëĬĶ", + "غ Ø·", + "Ùı ÙĦ", + "¹ æŀľ", + "Ñĩ Ñĸв", + "ÑĩÑĸ в", + "ÑĪ Ð°Ñı", + "ÑĪа Ñı", + "ĠØ¥ ÙĦا", + "ĠØ¥ÙĦ ا", + "خص ÙĪØµ", + "ll ll", + "ĠÑį ÑĤим", + "ĠÑįÑĤ им", + "ĠÑįÑĤи м", + "Ġz vÃŃ", + "Ġzv ÃŃ", + "Ġqu án", + "Ġquá n", + "à¸Ļ à¸ģ", + "Ġп олов", + "Ġпо лов", + "Ġпол ов", + "Ġ æ·±", + "Ġæ· ±", + "Ġm iá»ģn", + "Ġmi á»ģn", + "人 éĸĵ", + "Ġз им", + "Ġmey dana", + "е ÑĦ", + "Ġb á»ģn", + "Ġbá»ģ n", + "ز ÙĬد", + "زÙĬ د", + "ĠÐł еÑģп", + "ĠÐłÐµ Ñģп", + "ÎĻ Î£Î¤", + "ÎĻΣ Τ", + "Ġ æĶ¶", + "ĠæĶ ¶", + "r aya", + "ra ya", + "ray a", + "ĠتÙĪ Ø§ÙĨد", + "ĠتÙĪØ§ÙĨ د", + "Ġ ister", + "Ġis ter", + "Ġi ster", + "Ġist er", + "Ġ ë°Ģ", + "Ġë° Ģ", + "ĠмеÑħ ани", + "Ġ à¸ķำ", + "Ġà¸ķ ำ", + "Ġд ека", + "Ġде ка", + "Ġдек а", + "à¤Ĥ à¤Ĺल", + "à¤Ĥà¤Ĺ ल", + "ãĥ¼ ãĤ«ãĥ¼", + "Ġnep ÅĻÃŃ", + "ĠnepÅĻ ÃŃ", + "ĠÑģ ÑĩиÑĤ", + "ĠÑģÑĩ иÑĤ", + "Ġο μά", + "Ġç ift", + "ب ÛĮÙĨÛĮ", + "بÛĮ ÙĨÛĮ", + "بÛĮÙĨ ÛĮ", + "m eleri", + "me leri", + "mel eri", + "meler i", + "Ġвоз дейÑģÑĤв", + "d ou", + "do u", + "ìĥģ ìĿĦ", + "ĠÐĴ олод", + "ĠÐĴо лод", + "ĠÐĴол од", + "ε β", + "ÐĿ Ðĺ", + "Ñı к", + "Ïį ÏĦε", + "з ано", + "за но", + "len ir", + "c elik", + "ce lik", + "cel ik", + "ĠÑģоÑģÑĤав лÑıеÑĤ", + "ι αÏĤ", + "ια ÏĤ", + "ĠÐĵ оÑĢ", + "ä¹ĭ ä¸Ģ", + "Ïĥμ ÏĮÏĤ", + "ÏĥμÏĮ ÏĤ", + "ãģ« éĸ¢", + "Ġв Ñĩ", + "Ġп оÑģк", + "Ġпо Ñģк", + "ĠпоÑģ к", + "è¼ ¯", + "à¥Ģ श", + "ĠØ¢ ثار", + "à¸Ħวาม ร", + "Ġ един", + "Ġе дин", + "Ġеди н", + "íħ IJ", + "å¹³ æĪIJ", + "ĠkiÅŁ inin", + "ĠkiÅŁi nin", + "ãĤ² ãĥ¼ãĥł", + "à¥įत व", + "Ġkapsam ında", + "Ġak tar", + "Ġakt ar", + "Ġtr ừ", + "Ġر شد", + "Ġна каз", + "Ġнак аз", + "ر ÙĬÙĦ", + "رÙĬ ÙĦ", + "à¸Ń à¸Ħ", + "Ġگذ شتÙĩ", + "Ġ æ°ij", + "Ġæ° ij", + "ĠÑĤеб Ñı", + "s por", + "sp or", + "spo r", + "Ñİ ÑīаÑı", + "ÑİÑī аÑı", + "окÑĢем а", + "в ад", + "ва д", + "ĠCh úng", + "ĠزÛĮ ادÛĮ", + "ĠزÛĮاد ÛĮ", + "е ного", + "ен ого", + "ено го", + "ĠÚ© سÛĮ", + "à ŀ", + "Ġad ına", + "Ġadı na", + "Ñĥ да", + "Ñĥд а", + "Ñĸ ÑĶ", + "аÑĤ ели", + "аÑĤе ли", + "Ġnáv Å¡tÄĽ", + "ç͍ äºİ", + "ĠپرÙĪ ÙĨدÙĩ", + "ĠÙĨ بÙĪØ¯", + "ĠÙĨب ÙĪØ¯", + "س ات", + "ìĹ ĺ", + "ãģ£ ãģ¦ãĤĤ", + "ãģ£ãģ¦ ãĤĤ", + "Ġ çī©", + "Ġçī ©", + "Ðĺ з", + "åĪ ·", + "Ġ íľ´", + "Ġí ľ´", + "ĠоÑģоб лив", + "ãģĹ ãģ¾ãģ£ãģŁ", + "ãģĹãģ¾ ãģ£ãģŁ", + "a ydı", + "ay dı", + "ayd ı", + "åĩº çļĦ", + "ĠìķĦëĭĪ ëĿ¼", + "ıs ını", + "à¸Ĺาà¸ĩ à¸ģาร", + "Ġzv uky", + "Ġ 管", + "Ġç® ¡", + "âĸĭ âĸĭ", + "ĠÑĤ елеÑĦ", + "ĠÑĤел еÑĦ", + "Ġн елÑĮзÑı", + "ãĥ« ãģ®", + "Ïĥ ÏĢ", + "Ġ ç³", + "Ġç ³", + "åł ¡", + "ÑĨ Ñĥз", + "ÑĨÑĥ з", + "رÙĬ ÙĤØ©", + "رÙĬÙĤ Ø©", + "à¤¿à¤Ľ ल", + "è² ©", + "ĠУ кÑĢаÑĹн", + "ĠУкÑĢаÑĹ Ð½", + "ĠÙħسئ ÙĪÙĦ", + "Ġо ÑĩÑĸ", + "ĠоÑĩ Ñĸ", + "æľĢ å¾Į", + "Ġзна Ñİ", + "Ġзн аÑİ", + "à¹ī à¸Ļà¸Ĺ", + "à¹īà¸Ļ à¸Ĺ", + "ĠÑĤ еÑĢап", + "ĠÑĤеÑĢ Ð°Ð¿", + "ĠÑĤе ÑĢап", + "ĠÑģп ок", + "ĠØ®ÙĪØ¯ رÙĪ", + "éĺ »", + "Ġdüz ey", + "ä¸Ģ åĢĭ", + "ا ÙģÙĩ", + "اÙģ Ùĩ", + "à¤Ĥ य", + "èµĦ 产", + "ç»§ ç»Ń", + "ĠÑģ лаб", + "ĠÑģл аб", + "æĦı æĢĿ", + "ĠíĻĺ ìĤ°", + "ĠÑı ÑĢ", + "Ġd ůvod", + "Ġdů vod", + "çĿ Ľ", + "تÛĮ ب", + "ĠÙĪ ÛĮر", + "ĠÙĪÛĮ ر", + "ĠÙĩ زÛĮÙĨÙĩ", + "Ġben zer", + "Ġbenz er", + "ĠÙħ ادÙĩ", + "ĠÙħا دÙĩ", + "ĠÙħاد Ùĩ", + "à¥Į à¤ķ", + "Ġ à¹Ģà¸ķ", + "Ġà¹Ģ à¸ķ", + "Ġà¹Ģภķ", + "ãĤĪ ãģı", + "ид енÑĤ", + "èĭ± èªŀ", + "е ÑĢÑĭ", + "еÑĢ Ñĭ", + "Ġê¸Ī ìķ¡", + "Ġ ãĥ¼", + "Ġãĥ ¼", + "Ġ ëį¤íĶĦ", + "Ġëį ¤íĶĦ", + "ÑĢ Ð°ÑĤÑĮ", + "ÑĢа ÑĤÑĮ", + "ÑĢаÑĤ ÑĮ", + "Ġ åįķ", + "Ġåį ķ", + "à¹Ģà¸ī à¸ŀาะ", + "Ġ æĶ¿", + "ĠæĶ ¿", + "Ġà¤Ĩ म", + "Ġз ни", + "Ġзн и", + "Ġ ëĿ¼ìĿ´", + "ĠëĿ¼ ìĿ´", + "æİ Į", + "çIJĨ çͱ", + "Ġ اغ", + "Ġا غ", + "ĠØ§Ø º", + "ĠÑģ иг", + "ĠÑģи г", + "Ġе ÑĦекÑĤив", + "ĠÐŁ ÑĢед", + "ĠÐŁÑĢ ÐµÐ´", + "ãĥ´ ãĤ£", + "Ġви ко", + "Ġвик о", + "Ġt vrd", + "Ġtv rd", + "ëĤ´ 기", + "ãĥĭ ãĤ¢", + "ĠÙħشاÙĩ دÙĩ", + "Ġस à¤ļ", + "l Ã¼ÄŁ", + "lü ÄŁ", + "è¯ģ åΏ", + "Ġs iêu", + "Ġsi êu", + "Ġ оÑĤв", + "ĠоÑĤ в", + "Ġvyt voÅĻ", + "ĠØŃ ÙħÙĦ", + "ĠØŃÙħ ÙĦ", + "ĠÑĦ ÑĢан", + "à¹ī à¸Ķ", + "åĮ» éĻ¢", + "Ġв лад", + "Ġвла д", + "غ ÙĦ", + "建 ç«ĭ", + "os loven", + "osl oven", + "и лаÑģÑĮ", + "ила ÑģÑĮ", + "عÙĦ ÙĪÙħات", + "عÙĦÙĪÙħ ات", + "Ġ ترÛĮÙĨ", + "Ġتر ÛĮÙĨ", + "ÎŃ Ïģει", + "ÎŃÏģ ει", + "Ġb áºŃt", + "ĠÙħØ´ Ú©", + "Ġر ئÙĬس", + "Ġرئ ÙĬس", + "Ġìłľ ìŀij", + "γ η", + "Ġн Ñĸк", + "ĠнÑĸ к", + "Ġ구 ìĦ±", + "ĠÄij en", + "Ġà¤ļ र", + "Ġgeç miÅŁ", + "äºĨ è§£", + "Ġл еÑģ", + "Ġqu anh", + "Ġqua nh", + "Ġquan h", + "ãĢĮ æĪij", + "ĠNÄĽkter á", + "ëŀ į", + "Ãħ Ÿ", + "à¤Ĥ दर", + "à¤Ĥद र", + "ìķĦ ìĿ´", + "å°ij ãģĹ", + "ĠØ´Ùĩر ÛĮ", + "ĠØ´Ùĩ رÛĮ", + "κ ÏĦη", + "ĠâĹ Ħ", + "Ġ Ùĥس", + "ĠÙĥ س", + "è· Į", + "à ı", + "å·¥ åħ·", + "åĬ ĥ", + "p om", + "po m", + "ĠнавÑĩ аннÑı", + "Ġ رج", + "Ġر ج", + "ÑĢ ÑĥеÑĤÑģÑı", + "ÑĢÑĥ еÑĤÑģÑı", + "ÑĢÑĥеÑĤ ÑģÑı", + "Ġν ÎŃ", + "ÛĮÙĨ Ú©", + "à¹Ĥ à¸ĭ", + "åĭ ¤", + "ãģĹãģ¾ ãģĨ", + "ĠÑģ оглаÑģ", + "ĠÑģог лаÑģ", + "éĩij èŀį", + "ç »¿", + "ç» ¿", + "ĠС ан", + "æķ µ", + "Ġпо вÑĸÑĤ", + "Ġпов ÑĸÑĤ", + "Ġпом оÑīи", + "ĠпомоÑī и", + "ãĥ¡ ãĥªãĤ«", + "ãĤ· ãĤ¢", + "ĠÏĢ ÏģοÏĤ", + "ĠÏĢÏģο ÏĤ", + "èĪª 空", + "ĠваÑĢи анÑĤ", + "ĠваÑĢиан ÑĤ", + "Ġyalnız ca", + "ç³» çµ±", + "ĠÙģ ÙĪØ±", + "ĠÙģÙĪ Ø±", + "оÑĩ ной", + "оÑĩно й", + "à¹Ģว à¸Ńร", + "ĠкÑĥлÑĮ ÑĤÑĥÑĢ", + "ĠкÑĥлÑĮÑĤÑĥ ÑĢ", + "Ïĩ ι", + "ÄįÃŃ ta", + " ĵ", + "人 ãģĮ", + "κ οÏį", + "κο Ïį", + "ĠÑĢе ÑĶ", + "Ġв ÑģÑİ", + "ĠвÑģ Ñİ", + "éº Ĺ", + "Ġز ÙĨاÙĨ", + "ĠزÙĨ اÙĨ", + "çĭ Ĥ", + "Ġ หม", + "Ġห ม", + "Ġx úc", + "åħ Ĵ", + "ÄŁ inin", + "ÄŁi nin", + "ÄŁini n", + "ÄŁin in", + "åĸľ 欢", + "ĠÑģÑĤ ад", + "ĠÑģÑĤа д", + "iy esi", + "iye si", + "ìļ ±", + "è Ŀ", + "Ġ kus", + "Ġk us", + "Ġku s", + "ÏĦ ολ", + "ÏĦο λ", + "г Ñĸв", + "Ñĸ ли", + "Ñĸл и", + "ãģĦ ãĤĦ", + "é© Ĺ", + "ont rol", + "ا ÙĦÙĥ", + "اÙĦ Ùĥ", + "к овиÑħ", + "ко виÑħ", + "ков иÑħ", + "ĠÑģÑĤ ало", + "ĠÑģÑĤал о", + "ĠÑģÑĤа ло", + "ĠÎł αÏģα", + "Ġγα Ïģα", + "ĠγαÏģ α", + "Ġ chy", + "Ġc hy", + "Ġch y", + "Ġcih az", + "ĩ ´", + "ìŀ¥ ìĿ´", + "a ceae", + "ace ae", + "acea e", + "Ø´ Ùĩر", + "Ø´Ùĩ ر", + "ил аннÑı", + "çļĦ å°ı", + "Ġth ụ", + "Ġthá» ¥", + "ÙĪ ÙĨت", + "ÙĪÙĨ ت", + "л оÑĢ", + "ло ÑĢ", + "ãĤĴ æĮģ", + "ĠÎĶ Î¹", + "Ġ 羣", + "Ġçľ Ł", + "ÐĽ Ðŀ", + "é½ IJ", + "çİ Ħ", + "ا ÙĪÙĩ", + "اÙĪ Ùĩ", + "Ġи нÑĤ", + "Ġин ÑĤ", + "à¥Ģ à¤Łà¤°", + "à¥Ģà¤Ł र", + "Ġ обÑīе", + "Ġоб Ñīе", + "ĠобÑī е", + "Ġдеп ÑĥÑĤ", + "μÎŃν εÏĤ", + "ĠÙĥ ÙĬÙģ", + "ع ÙħÙĦ", + "عÙħ ÙĦ", + "ï¼Į å¦Ĥæŀľ", + "ï¼Įå¦Ĥ æŀľ", + "Ġин ÑĦек", + "i tele", + "it ele", + "ite le", + "itel e", + "Ġ ãĢĢãĢĢĠãĢĢ", + "ĠãĢĢ ãĢĢĠãĢĢ", + "ĠãĢĢãĢĢ ĠãĢĢ", + "ãĤ¤ ãĥ³ãĥĪ", + "ãĤ¤ãĥ³ ãĥĪ", + "л ÑĸÑĤ", + "лÑĸ ÑĤ", + "Ġ ÑģÑİ", + "ĠÑģ Ñİ", + "Ġz ase", + "Ġza se", + "Ġzas e", + "d ech", + "de ch", + "dec h", + "е ко", + "ек о", + "è® ĵ", + "åı ¬", + "з ем", + "Îł Îij", + "Ġvz du", + "า à¸Īาà¸ģ", + "าà¸Ī าà¸ģ", + "ko liv", + "kol iv", + "koli v", + "zk um", + "èģ Ĭ", + "Ġì±Ħ ìļ©", + "๠į", + "Ġ asp", + "Ġa sp", + "Ġas p", + "Û² Û´", + "ìĿ¸ ëį°", + "ĠkarÅŁÄ± laÅŁ", + "ï¼Į åı¯ä»¥", + "ï¼Įåı¯ 以", + "Ġà¤ĩन à¤ķ", + "Ġ ìĬ¤íĥĢ", + "ĠìĬ¤ íĥĢ", + "éĥ¨ å±ĭ", + "åζ ä½ľ", + "ãĥ¼ ãĤ·ãĥ§ãĥ³", + "ον ÏĦαÏĤ", + "γ ο", + "Ġìŀij ìĦ±", + "èij £", + "oz ÅĻejmÄĽ", + "ĠÑĢезÑĥлÑĮÑĤаÑĤ е", + "ĠÑĢезÑĥлÑĮÑĤ аÑĤе", + "ĠIns ecta", + "Ġs kon", + "Ġsk on", + "o tu", + "ot u", + "Ġp ÄĽt", + "ĠpÄĽ t", + "Ñģ ÑĮого", + "ÑģÑĮ ого", + "Ġİs lam", + "Ġl á»ħ", + "Ġlá» ħ", + "ä¸Ń åľĭ", + "ĠÐľÑĸ нÑĸÑģÑĤ", + "åIJĪ åIJĮ", + "asy onu", + "asyon u", + "ож еÑĤ", + "оже ÑĤ", + "èĩª åĬ¨", + "ÑģÑĮ коÑİ", + "ÑģÑĮк оÑİ", + "ÑģÑĮко Ñİ", + "ĠkiÅŁ isel", + "ĠkiÅŁi sel", + "ÏĦ ικοÏį", + "ÏĦικ οÏį", + "ÏĦι κοÏį", + "ÏĦικο Ïį", + "Ġ ÑĥÑĩаÑģ", + "ĠÑĥ ÑĩаÑģ", + "ĠÑĥÑĩ аÑģ", + "ĠÑĥÑĩа Ñģ", + "ıl mÄ±ÅŁtır", + "ılmÄ±ÅŁ tır", + "ĠÑı ке", + "ĠÑıк е", + "Ñī инÑĭ", + "Ñīи нÑĭ", + "Ñīин Ñĭ", + "м аÑĢ", + "ма ÑĢ", + "Ġso udu", + "Ġsou du", + "Ġsoud u", + "Âł Я", + "Ġд ÑĢÑĥ", + "ĠдÑĢ Ñĥ", + "ãģ¡ ãĤĩ", + "à¥ĭ à¥ľ", + "ï¾ ij", + "Ġ ÏĦÏĮ", + "ĠÏĦ ÏĮ", + "Ġ ضر", + "Ġض ر", + "l áš", + "lá Å¡", + "Ġд Ñĸв", + "ĠдÑĸ в", + "Ġج دÙĬد", + "Ġجد ÙĬد", + "Ġнеб олÑĮÑĪ", + "ĠнеболÑĮ ÑĪ", + "éģ Ń", + "ç» į", + "ĠKur ulu", + "ĠKurul u", + "ÑģÑĤÑĢ ÑĥменÑĤ", + "ÑģÑĤÑĢÑĥ менÑĤ", + "è¿Ļ æĺ¯", + "ìĻ Ķëĭ¤", + "ìĻĶ ëĭ¤", + "м елÑĮ", + "ме лÑĮ", + "Ġ ä¼Ĭ", + "á»§ ng", + "ĠзавиÑģим оÑģÑĤи", + "ëį ¤íĶĦ", + "çĩ ĥ", + "è¿ĩ åİ»", + "ĠзаÑģÑĤоÑģ ÑĥваннÑı", + "Ġداخ ÙĦÛĮ", + "ĠداخÙĦ ÛĮ", + "Ñī Ñij", + "ĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂł", + "ĠÂłĠÂłĠÂłĠÂł ĠÂłĠÂł", + "ïº ®", + "ĠاÙĦÙħ ÙħÙĦÙĥØ©", + "s ında", + "sı nda", + "sın da", + "è³ Ģ", + "å± ı", + "Ġ ê¿", + "Ġê ¿", + "Ġdo ktor", + "Ġdok tor", + "ĠÙĤ اب", + "ĠS ist", + "ĠSi st", + "ĠмеÑģÑĤ е", + "ĠÑģоÑħ ÑĢа", + "ا شتÙĩ", + "اش تÙĩ", + "اشت Ùĩ", + "Ġ æľŁ", + "ĠпоÑģк олÑĮкÑĥ", + "Ġp ev", + "Ġpe v", + "ا گر", + "اگ ر", + "Ùħ ز", + "Ġض ÙħÙĨ", + "ॠ©", + "g esi", + "ge si", + "ges i", + "a ÄŁa", + "aÄŁ a", + "è§£ åĨ³", + "ëħ¸ ì¶ľ", + "Ġl uyá»ĩn", + "Ġкон ÑĤак", + "ĠконÑĤ ак", + "ภº", + "Ġ NgÃły", + "ĠNg Ãły", + "Ġvý stav", + "Ġth uyết", + "اÛĮ ع", + "Ġ: /:", + "Ġ:/ :", + "Ġph ạt", + "ĠÎij ÏĢÏĮ", + "ĠÎijÏĢ ÏĮ", + "Ġ muz", + "Ġm uz", + "Ġmu z", + "Ġ ìĥī", + "Ġìĥ ī", + "ĠÃĩ in", + "Ġکار برد", + "Ġکاربر د", + "ائ د", + "ب اد", + "با د", + "à¥į तम", + "à¥įत म", + "Ġ ëijĺ", + "Ġëij ĺ", + "Ġм оз", + "Ġмо з", + "Å¡ ÃŃch", + "Å¡ÃŃ ch", + "Ġ มห", + "Ġม ห", + "ĠØ¢ س", + "ĠÑģ лиÑĪком", + "èĥ ¡", + "è£ ģ", + "æĪ »", + "ĠìĦ¤ ëªħ", + "Ġo tom", + "Ġot om", + "Ġoto m", + "Ġलà¤Ĺ à¤Ńà¤Ĺ", + "à¸ĩ à¸ģ", + "ا بد", + "اب د", + "à¸Ļ าม", + "à¸Ļา ม", + "èĤ ©", + "Ġشد ÙĨد", + "ĠشدÙĨ د", + "ãģĿãģ® ä»ĸ", + "ad lo", + "ÄĽ n", + "ĠÙĦ Ùĩا", + "ĠÙĦÙĩ ا", + "Ġмин им", + "Ġми ним", + "Ġd ÅĻev", + "ĠTh iên", + "ĠThi ên", + "ëŀ Ļ", + "en gin", + "eng in", + "à¥Ģ मत", + "à¥Ģम त", + "ĠÑĥп оÑĤÑĢеб", + "âĢĮ تر", + "Ġç¥ŀ 马", + "ov ánÃŃm", + "ová nÃŃm", + "ovánÃŃ m", + "ován ÃŃm", + "Ġд ело", + "Ġдел о", + "Ġде ло", + "Ġ ç¼ĸ", + "Ġç¼ ĸ", + "ĠاÙĦ ظ", + "Ġ вий", + "Ġв ий", + "Ġви й", + "а ÑĤом", + "аÑĤ ом", + "аÑĤо м", + "åħ¬ åijĬ", + "ĠÄij em", + "ãĤ· ãĥªãĥ¼ãĤº", + "ä¸ĭ çļĦ", + "l ası", + "la sı", + "las ı", + "ĠвÑĭ боÑĢ", + "ĠвÑĭб оÑĢ", + "ÑĤ оÑĤ", + "ÑĤо ÑĤ", + "ëıĦ ë³Ħ", + "ĠÑĥ ÑģÑĤан", + "ĠÑĥÑģÑĤ ан", + "Ġ íŀĪ", + "Ġíŀ Ī", + "лÑĥ аÑĤа", + "Ġth ác", + "а нием", + "ан ием", + "ани ем", + "ание м", + "ов аÑĤÑĮÑģÑı", + "ова ÑĤÑĮÑģÑı", + "оваÑĤÑĮ ÑģÑı", + "ÑĤ ÑĶ", + "ÐŃ ÑĤо", + "ï¼Į è¦ģ", + "ĠV z", + "ĠØŃ ÙĪØ²Ùĩ", + "ĠØŃÙĪ Ø²Ùĩ", + "- к", + "V Ỽi", + "ent ů", + "Ġbulun duÄŁu", + "Ġbulundu ÄŁu", + "ر ÙĪØ·", + "رÙĪ Ø·", + "ĠÑĹ Ð¹", + "Ġçev r", + "Ġ ÅĻed", + "ĠÅĻ ed", + "ĠÅĻe d", + "Ġس اختÙĩ", + "Ġساخت Ùĩ", + "åĬŀ æ³ķ", + "Ġ ÙĤÙĦ", + "ĠÙĤ ÙĦ", + "i ÅŁi", + "iÅŁ i", + "ï¼Ŀ ï¼Ŀ", + "س اس", + "Ġúdaj ů", + "å ¬", + "æį Ł", + "á ct", + "ác t", + "ĠÎij ÏĢ", + "çĪ ·", + "Ġ ÅĻád", + "ĠÅĻ Ã¡d", + "Ġl á»Ĺi", + "Ġlá» Ĺi", + "Ġlá»Ĺ i", + "on tent", + "ont ent", + "onte nt", + "ĠÙħ ذ", + "ol oji", + "olo ji", + "oloj i", + "Ġپرد اخت", + "à¹ī าà¸ŀ", + "à¹īา à¸ŀ", + "ĠдейÑģÑĤв иÑı", + "Ġmnož stvÃŃ", + "ìķĪ ë§Ī", + "åģ ¶", + "Ġ ÃĶng", + "ĠÃĶ ng", + "Ġdak ika", + "hen dis", + "hend is", + "Ġb ác", + "å¯ ¶", + "à¹ĩà¸ģ หà¸į", + "noc enÃŃ", + "ĠErd oÄŁan", + ": ::::::::::::", + ":: :::::::::::", + ":::: :::::::::", + ":::::: :::::::", + ":::::::: :::::", + "::: ::::::::::", + "::::: ::::::::", + "::::::: ::::::", + "::::::::: ::::", + ":::::::::: :::", + "::::::::::: ::", + ":::::::::::: :", + "аÑĤ ем", + "аÑĤе м", + "d ız", + "dı z", + "ĠØ£ÙĬ ضا", + "ĠØ£ÙĬض ا", + "ĠÑįÑĦ ÑĦек", + "ãĤĮ ãģ¦ãģĦãĤĭ", + "ãĤĮãģ¦ ãģĦãĤĭ", + "ĠbaÅŁv uru", + "ĠbaÅŁvur u", + "ά νει", + "άν ει", + "ĠÏĦε λεÏħÏĦα", + "Ġê²Ģ ìĥī", + "ĠÚ©ÙĨ ترÙĦ", + "Ġ शà¤ķ", + "Ġश à¤ķ", + "å¼ ¹", + "Ġol muÅŁtur", + "Ġolm uÅŁtur", + "ĠolmuÅŁ tur", + "Ġв ÑģÑĤÑĥп", + "ĠвÑģÑĤ Ñĥп", + "Ñĩ ила", + "Ñĩи ла", + "Ñĩил а", + "ย า", + "ĠØ£ØŃ Ùħد", + "os lav", + "osl av", + "ĠÑĩа Ñģов", + "ĠÑĩаÑģ ов", + "Ġzá kladnÃŃ", + "Ġzáklad nÃŃ", + "Ġस व", + "д он", + "до н", + "ĠÅĻÃŃj na", + "κ οÏħ", + "κο Ïħ", + "éĢģ æĸĻçĦ¡æĸĻ", + "éĢģæĸĻ çĦ¡æĸĻ", + "Ïĥ ίαÏĤ", + "Ïĥία ÏĤ", + "Ïĥί αÏĤ", + "ãĤ´ ãĥª", + "Ġв иб", + "Ġви б", + "å½ Ĵ", + "Ġназ ад", + "ĠçĻ¾åº¦ æĶ¶å½ķ", + "á» Ĩ", + "Ġkal dı", + "ì¼ ľ", + "Ġ íıŃ", + "Ġíı Ń", + "ĠÑĩи ном", + "ĠÑĩин ом", + "è ¹", + "Ñı л", + "ĠÑĢаз дел", + "ĠÑĢазд ел", + "d G", + "ĠT ento", + "ĠTen to", + "ĠTent o", + "Ñı ÑĤÑĮÑģÑı", + "ÑıÑĤÑĮ ÑģÑı", + "éĿ¢ çļĦ", + "ĠÎķ ÏĢι", + "ĠÎķÏĢ Î¹", + "ê° ij", + "Ġk èm", + "ни ÑĨÑı", + "ниÑĨ Ñı", + "çĸ «", + "éĽ Ļ", + "ĠÙħر Ùĥز", + "Ġна Ñĥк", + "å¢ Ĺ", + "ĠÑĤе пеÑĢ", + "ĠÑĤеп еÑĢ", + "ा à¤ł", + "ाठł", + "à¹ĩà¸ļ à¹Ħà¸ĭà¸ķ", + "μβ ÏģίοÏħ", + "ĠÑĦÑĸн анÑģов", + "ĠÑĦÑĸнанÑģ ов", + "Ñĸ ÑĶÑİ", + "ÑĸÑĶ Ñİ", + "Ïģ ίζ", + "Ïģί ζ", + "ì¤ Ħ", + "ĠباÙĨ Ú©", + "t ul", + "tu l", + "li ÄŁini", + "liÄŁi ni", + "liÄŁ ini", + "liÄŁin i", + "ĠпозволÑı еÑĤ", + "Ġпозвол ÑıеÑĤ", + "Ïĥ ί", + "Ġ ìĽĥ", + "ĠìĽ ĥ", + "à¹Į à¸Ħ", + "Ġpol ov", + "Ġpo lov", + "Ġpolo v", + "ìŀ¥ ìĿĦ", + "is té", + "ist é", + "ĠС Ð¡Ð¡Ðł", + "á hl", + "áh l", + "è ¥", + "Ġкомп лек", + "à¸Ĥ à¸Ļาà¸Ķ", + "ั ศ", + "ν αν", + "να ν", + "Ġç¥ŀ马 æĶ¶å½ķ", + "ìĭľ ìĺ¤", + "Ġé¦ĸ页 第", + "ĠçĻ¾åº¦ æµģéĩı", + "åij¨ æĶ¶å½ķ", + "Ġh atta", + "Ġhat ta", + "ÐĴ Ñĸд", + "ĠвÑĭ ÑģÑĤÑĥп", + "Ú© ارÛĮ", + "کار ÛĮ", + "کا رÛĮ", + "K hi", + "Kh i", + "Ġì°¾ ìķĦ", + "Ġn ặng", + "éĨ «", + "ĠV Å¡", + "ĠпеÑĢ ÐµÐ½", + "ĠпеÑĢе н", + "л ава", + "ла ва", + "лав а", + "ÙĬ ÙħÙĬ", + "ÙĬÙħ ÙĬ", + "Ġvat andaÅŁ", + "Ġ ιÏĥÏĦο", + "Ġι ÏĥÏĦο", + "Ġ à¸ĵ", + "Ġภĵ", + "स ल", + "г ен", + "ге н", + "Ġ بÙĪØ±", + "Ġب ÙĪØ±", + "ĠبÙĪ Ø±", + "âĢĮدÙĩ د", + "âĢĮد Ùĩد", + "l ıklı", + "lık lı", + "Ġ strate", + "Ġst rate", + "Ġstr ate", + "Ġstrat e", + "Ġstra te", + "ب ÙĪØ±", + "بÙĪ Ø±", + "ãĢģ ãĤ¢", + "Ġson uc", + "Ġsonu c", + "Ġна иболее", + "- в", + "Ġвод ой", + "oj enÃŃ", + "oje nÃŃ", + "Ġغ رب", + "Ġغر ب", + "Ġb eri", + "Ġbe ri", + "Ġber i", + "a dÄĽ", + "ad ÄĽ", + "Ġd ovol", + "Ġdo vol", + "Ġdov ol", + "âĢĮÚ©ÙĨ ÙĨدگاÙĨ", + "âĢĮÚ©ÙĨÙĨد گاÙĨ", + "ãģķ ãĤī", + "ãĥ³ ãĤº", + "ãĤ« ãĥ«", + "om etr", + "ome tr", + "omet r", + "åĩ Ģ", + "ĠÙģ ÙĪÙĦ", + "ĠÙģÙĪ ÙĦ", + "ĠÙħ ÙĪØ³ÛĮ", + "ĠÙħÙĪ Ø³ÛĮ", + "ĠÙħÙĪØ³ ÛĮ", + "ĠاÙĦÙħغ رب", + "e cko", + "ec ko", + "eck o", + "ÙĢÙĢÙĢÙĢ ÙĢÙĢÙĢÙĢ", + "ê°Ģ 격", + "ÑĢ ÑĥÑĤ", + "ÑĢÑĥ ÑĤ", + "Ġ ë¶Ģë¶Ħ", + "Ġë¶Ģ ë¶Ħ", + "ĠpÅĻed pis", + "Ġoprav du", + "еÑĤ иÑĩ", + "еÑĤи Ñĩ", + "à¹Ĥ à¸Ħรà¸ĩà¸ģาร", + "æ ħ§", + "æħ §", + "æĭ ľ", + "س Ùĥ", + "ìŀ¡ ëĭ´", + "à¸Ľà¸£à¸°à¸¡ าà¸ĵ", + "è´¨ éĩı", + "Ġголов Ñĥ", + "Ġгол овÑĥ", + "л ениÑİ", + "лен иÑİ", + "ле ниÑİ", + "Ġन à¤ı", + "Ġprojekt u", + "ا Ù쨱", + "اÙģ Ø±", + "at ivnÃŃ", + "ati vnÃŃ", + "ativ nÃŃ", + "ÎŃ Î½ÏĦ", + "ÎŃν ÏĦ", + "ãĥī ãĥ©", + "Ġted av", + "ê ¼", + "à¸Ľà¸£à¸°à¸ģ าศ", + "Ġt uto", + "Ġtu to", + "Ġtut o", + "Ġch iếu", + "Ġchi ếu", + "Ġchiế u", + "Ġv yz", + "Ġvy z", + "ÑĢ Ð¾ÑĪ", + "ÑĢо ÑĪ", + "åıĸ å¾Ĺ", + "Ġм иÑģÑĤ", + "Ġми ÑģÑĤ", + "ĠмиÑģ ÑĤ", + "ĠÑģлÑĥÑĩа ÑıÑħ", + "Ġغ ذ", + "ĠÑĥ клад", + "ĠÑĥк лад", + "ĠÑĥÑģÑĤанов лен", + "Ġtes lim", + "Ġ ãĢį", + "ĠãĢ į", + "Ġ è£", + "Ġè £", + "æ¯ «", + "éĬĢ è¡Į", + "e cts", + "ect s", + "ec ts", + "k emiz", + "kem iz", + "ν ηÏĤ", + "νη ÏĤ", + "è¾ º", + "Ġп ÑĢем", + "ĠпÑĢ ÐµÐ¼", + "ĠпÑĢе м", + "Ġson ucu", + "Ġsonuc u", + "Ġsonu cu", + "P okud", + "Po kud", + "Pok ud", + "ĠÐŀÑģ об", + "è¾ Ľ", + "è¼ ¸", + "ë³´ ê³ł", + "à¸ļ à¸Ħ", + "ãĢĤ ãĢį", + "ा ।ĊĊ", + "ा। ĊĊ", + "ा।Ċ Ċ", + "ĠÑģамоÑģÑĤ оÑıÑĤелÑĮ", + "ÙĦ ÛĮت", + "ÙĦÛĮ ت", + "λ εκ", + "λε κ", + "ĠÑĢай она", + "ĠÑĢайон а", + "ÑĮ и", + "à¹Ī าà¸Ĺ", + "à¹Īา à¸Ĺ", + "Ġ à¸Ľà¸£à¸°à¹Ģà¸Ĺศ", + "Ġà¸Ľà¸£à¸° à¹Ģà¸Ĺศ", + "ม à¸Ń", + "ا Ùĩر", + "اÙĩ ر", + "Ġви боÑĢ", + "Ġвиб оÑĢ", + "ÑİÑĩи ÑģÑĮ", + "Ġp ovol", + "Ġpo vol", + "Ġpov ol", + "a base", + "ab ase", + "aba se", + "â̳ N", + "Ú© ÙĪ", + "ĠУкÑĢаÑĹ Ð½Ð°", + "ĠУкÑĢа ÑĹна", + "ĠУкÑĢаÑĹн а", + "sta nov", + "stan ov", + "ĠÑĥÑĩ аÑģÑĤи", + "ĠÑĥÑĩа ÑģÑĤи", + "ĠÑĥÑĩаÑģÑĤ и", + "ĠÑĥÑĩаÑģ ÑĤи", + "Ġh lad", + "Ġhl ad", + "ĠÑĢаÑģÑģ каз", + "ãģ¿ ãģŁãģĦ", + "á½ °", + "Ġ åĽŀ", + "ĠåĽ ŀ", + "Ġ ương", + "α Ïģά", + "αÏģ ά", + "Ø® ب", + "æį ķ", + "ÃŃ ÅĻ", + "Ġ سÛĮÙĨ", + "Ġس ÛĮÙĨ", + "ĠسÛĮ ÙĨ", + "Âł in", + "ĠM ÄĽst", + "æķĻ åѦ", + "ĠоÑģоб иÑģÑĤ", + "ĠоÑģоби ÑģÑĤ", + "u ji", + "uj i", + "çĶ» åĥı", + "ĠداÙĨ Ø´ÙĨاÙħÙĩ", + "ĠداÙĨØ´ ÙĨاÙħÙĩ", + "ìĿ´ ìķ¼", + "Ġзап иÑĤ", + "ĠÑģво ими", + "ĠÑģвои ми", + "ĠÑģвоим и", + "Û²Û° Û²", + "ï¼Į å°Ĩ", + "ãĥ¼ ãģ®", + "Ġth ÃŃ", + "ĠÙħت ÙĪØ³Ø·", + "à¥ĩ Ċ", + "å¤ļ å°ij", + "ï¼Į çĦ¶åIJİ", + "íĹ Ī", + "Ġ à¤Ńà¤Ĺ", + "Ġà¤Ń à¤Ĺ", + "Ġ åı·", + "Ġåı ·", + "Ġt eor", + "Ġte or", + "å Ĥ¨", + "åĤ ¨", + "Ġ ÑĢÑĸÑĩ", + "ĠÑĢ ÑĸÑĩ", + "ĠÑģÑĤаÑĤ ÑĤÑĸ", + "Ġرابط Ùĩ", + "Ġ ï¼ľ", + "Ġï¼ ľ", + "ب اØŃ", + "با ØŃ", + "ิà¸Ļ à¸Ĺาà¸ĩ", + "ิà¸Ļà¸Ĺ าà¸ĩ", + "à¥ĩà¤Ĥ Ċ", + "ائ ÙĤ", + "ĠاÙĦج دÙĬد", + "l iÄį", + "li Äį", + "ا ØŃÙĦ", + "اØŃ ÙĦ", + "mé nÄĽ", + "Ġb ầu", + "ĠÐĴ ал", + "Ġб лагод", + "Ġбла год", + "Ġблаг од", + "еÑĤ елÑĮ", + "еÑĤе лÑĮ", + "å¹³ åĿĩ", + "м ин", + "ми н", + "Ġsü rec", + "Ġsür ec", + "Ġsüre c", + "Ġза вод", + "Ġзав од", + "èį IJ", + "ÑĤ ий", + "ÑĤи й", + "л об", + "ло б", + "Ġ вок", + "Ġв ок", + "Ġво к", + "l adıģı", + "la dıģı", + "lad ıģı", + "ladı ģı", + "ladıģ ı", + "اÙĬ ÙĬ", + "ê²ł ìĬµëĭĪëĭ¤", + "Ġamac ıyla", + "Ġamacı yla", + "ï¼Į åĽłä¸º", + "ï¼ĮåĽł 为", + "ãģ§ ãģĤãģ£ãģŁ", + "ãģ§ãģĤ ãģ£ãģŁ", + "ĠØ´ رÙĪØ¹", + "Ġشر ÙĪØ¹", + "æŁ Ķ", + "' nun", + "'n un", + "о кол", + "ок ол", + "око л", + "Ġc iddi", + "Ġcid di", + "Ġb ụ", + "Ġyap ılacak", + "Ġyapı lacak", + "Ġyapıl acak", + "ĠÑĩÑĥв ÑģÑĤв", + "ìĤ¬ ìĿĺ", + "à¸Ń à¸Ļà¸Ķ", + "à¸Ńà¸Ļ à¸Ķ", + "ΊΤ", + "Ġëĭ¤ ìĸij", + "ëĭ¤ ë©´", + "im izi", + "imi zi", + "imiz i", + "ä¹ Ĥ", + "ãģ² ãģ¨", + "Ġ éĿŀ", + "ĠéĿ ŀ", + "âĢĮپدÛĮ ا", + "ä¹ ĺ", + "ãĥĬ ãĥ«", + "ĠпÑĸдпÑĢиÑĶм ÑģÑĤва", + "ĠпÑĸдпÑĢиÑĶмÑģÑĤв а", + "๠ij", + "è¿ Ŀ", + "ĠÙħ ÙĨÙĩ", + "ĠÙħÙĨ Ùĩ", + "ÑĢ Ð¸Ðº", + "ÑĢи к", + "а ÑĢÑĸв", + "аÑĢ Ñĸв", + "аÑĢÑĸ в", + "Ġ кого", + "Ġк ого", + "Ġко го", + "ĠÙĤ ص", + "Ġ æĿ¥", + "ĠæĿ ¥", + "ĠPh òng", + "Ġ ово", + "Ġо во", + "Ġов о", + "ĠпеÑĢ ÐµÐ²Ð°", + "ĠпеÑĢе ва", + "ĠпеÑĢев а", + "é£ ²", + "à¤Ĥ à¤Łà¤°", + "à¤Ĥà¤Ł र", + "ÙĬ را", + "ÙĬر ا", + "il diÄŁi", + "ildi ÄŁi", + "e tin", + "et in", + "eti n", + "Ïĩε ία", + "Ïĩεί α", + "Ġzah rani", + "ÙĪ Ø¬Ø¯", + "ÙĪØ¬ د", + "Ġ ç¯", + "Ġç ¯", + "าร ย", + "Ġза ко", + "Ġзак о", + "ĠتÙĤ س", + "ãĤ¹ ãĤ¿ãĥ¼", + "ãĤ¹ãĤ¿ ãĥ¼", + "æĿ °", + "Ġ ãĤ°", + "ĠãĤ °", + "Ġ é»Ħ", + "Ġé» Ħ", + "Ġ Ðļогда", + "ĠÐļ огда", + "ॠ«", + "Ġ 次", + "Ġæ¬ ¡", + "ĠвÑĭ ÑĢаж", + "Ġch Äĥm", + "лÑı ÑĶÑĤÑĮÑģÑı", + "лÑıÑĶ ÑĤÑĮÑģÑı", + "د ÙĩÙħ", + "دÙĩ Ùħ", + "Ġv rch", + "Ġvr ch", + "çº Į", + "п оÑĢ", + "по ÑĢ", + "Ġm aÄŁ", + "Ġma ÄŁ", + "å¾Ĵ æŃ©", + "po dob", + "pod ob", + "ะ à¹ģ", + "éģ¸ æīĭ", + "å¸ ¯", + "Ġse bou", + "Ġseb ou", + "in ize", + "ini ze", + "iniz e", + "ĠÐľ ак", + "ĠÐľÐ° к", + "Ġ æĻ®", + "ĠæĻ ®", + "ĠÏħÏĢ Î¬ÏģÏĩ", + "ĠÄIJ Ãł", + "ĠBr no", + "Ġ Å¡ÃŃ", + "ĠÅ¡ ÃŃ", + "اÙĦ ص", + "Ġngh iêm", + "Ġnghi êm", + "Ġon ları", + "Ġonlar ı", + "Ġu žÃŃ", + "Ġuž ÃŃ", + "èĩªåĪĨ ãģ®", + "ĠнаÑħод иÑĤÑģÑı", + "Ġj si", + "Ġjs i", + "Ġस मर", + "Ġसम र", + "ĠÏĨ Ïī", + "Û±Û¹ Û¸", + "Ġà¤ľà¤Ĺ ह", + "éŃ ļ", + "ìĿ¸ ê°Ģ", + "ÄIJ iá»ģu", + "ĠØ£ عÙĦاÙħ", + "Ġأع ÙĦاÙħ", + "à¥ĩà¤Ĥ ।Ċ", + "à¥ĩà¤Ĥ। Ċ", + "å½¢ æĪIJ", + "Ġ ikt", + "Ġi kt", + "Ġik t", + "Ġzd roj", + "ĠAmer ik", + "Ρ Îĵ", + "à¸ĩ ส", + "ĠíĴ Ģ", + "Ñģол ÑİÑĤ", + "ÙĪ ÙĬت", + "ÙĪÙĬ ت", + "Ġgörün tü", + "ан нÑĭÑħ", + "аннÑĭ Ñħ", + "ĠØ£ ÙĤ", + "Ġ миÑĢ", + "Ġм иÑĢ", + "Ġми ÑĢ", + "å« Į", + "Ġm á»iji", + "Ġd erin", + "Ġde rin", + "Ġder in", + "é ĴĪ", + "éĴ Ī", + "Ġма ÑĪи", + "ĠмаÑĪ Ð¸", + "ì¸ ¡", + "ĠجÙĨ ÙĪØ¨", + "ĠÑģ ло", + "ĠÑģл о", + "ãĢĤ ä¸Ģ", + "ени ÑıÑħ", + "ениÑı Ñħ", + "ĠÑĩолов Ñĸк", + "Ġy ana", + "Ġya na", + "Ġyan a", + "Ġо кÑĤ", + "Ġок ÑĤ", + "Ġ неÑĢ", + "Ġн еÑĢ", + "Ġне ÑĢ", + "æĪ ¶", + "н ÑĮомÑĥ", + "нÑĮ омÑĥ", + "нÑĮо мÑĥ", + "ĠÑĸ мен", + "ĠÑĸм ен", + "ãĤı ãģŁãģĹ", + "ĠÎĵ ια", + "ĠÎĵι α", + "ãĢģ ç§ģ", + "Ġ kou", + "Ġk ou", + "Ġko u", + "ĠÑĨ еÑĢк", + "ĠÑĨеÑĢ Ðº", + "lay arak", + "ãĢ ĩ", + "ا ÙĦس", + "اÙĦ س", + "Âł T", + "Ġд ÑĢÑĥж", + "ĠдÑĢÑĥ ж", + "ĠдÑĢ Ñĥж", + "Ġд воÑĢ", + "Ġдв оÑĢ", + "Ġдво ÑĢ", + "λ ί", + "ĠëĨ Ģ", + "Ġte plot", + "Ġtep lot", + "Ùģ Ø§Øª", + "б Ñĸ", + "Ġgüven lik", + "Ġgüvenli k", + "n ÄĽn", + "nÄĽ n", + "è© ©", + "Ġinsan ların", + "Ġinsanlar ın", + "ĠìĦ¤ ì¹ĺ", + "èĵ Ŀ", + "a vatel", + "av atel", + "ava tel", + "j ev", + "je v", + "ĠÚĨ را", + "Ġgerek iyor", + "ãĥĥ ãĤ°", + "ĠÃĩ ok", + "Ġ ÙĪØ¬Ùĩ", + "ĠÙĪ Ø¬Ùĩ", + "ĠÙĪØ¬ Ùĩ", + "Ġ Ñĥли", + "ĠÑĥ ли", + "ĠÑĥл и", + " ij", + "åij Ģ", + "ĠоÑĢгани заÑĨии", + "ĠоÑĢганиз аÑĨии", + "ĠоÑĢганиза ÑĨии", + "ĠÑĸÑģ нÑĥ", + "Ġneb ude", + "Ġnebu de", + "Ġë° ¤", + "ä¸Ĭ ãģĮ", + "Ġध न", + "ĠرÙĪ Ø§Ø¨Ø·", + "γγ ελ", + "Ġдо ÑģÑıг", + "ĠдоÑģ Ñıг", + "ĠاÙĦÙĤ دÙħ", + "ĠاÙĦÙĤد Ùħ", + "Ġзна Ñħод", + "ĠÄįÃŃs lo", + "ÅŁ k", + "ĠاÙĦد ÙĬÙĨ", + "Ġgün lük", + "ÙĥÙĬ ÙĬÙģ", + "ÎŃ Ïģα", + "ÎŃÏģ α", + "à¸ķ รว", + "à¸ķร ว", + "Ġнали Ñĩи", + "ا ÙħÛĮÙĨ", + "اÙħ ÛĮÙĨ", + "اÙħÛĮ ÙĨ", + "Ġμ ικ", + "Ġdönem de", + "à¹Ī à¸Ĺ", + "æĥ ij", + "à¥ĭà¤Ĥ ,", + "Ñĩ Ñı", + "ãģ¾ ãĤĭ", + "ĠاÙĦ تÙĨ", + "ĠاÙĦت ÙĨ", + "ÑĢ Ð°Ð³", + "ÑĢаР³", + "ÑĢа г", + "ëĵ¤ ê³¼", + "Ń Ķ", + "ĠÙħÙĨ Ùĩا", + "ĠÙħÙĨÙĩ ا", + "ĠTh ế", + "éIJ µ", + "Ġ ï¾Ħ", + "Ġï¾ Ħ", + "ĠاÙĦØ¥ سÙĦاÙħ", + "ãĤ¦ ãĤ¹", + "ÙĬ دÙĬ", + "ÙĬد ÙĬ", + "Ġ å¾Ĺ", + "Ġå¾ Ĺ", + "Ġза ÑĢаз", + "ãĤ¸ ãĥ¥", + "Ġت عد", + "Ġتع د", + "i ÃŃ", + "Ġç ocu", + "oz ici", + "Ġ ë²Ķ", + "Ġë² Ķ", + "ĠØ¢Ùħ دÙĩ", + "ĠØ¢Ùħد Ùĩ", + "ÑĦ ик", + "ÑĦи к", + "Ġпо ÑģÑĤанов", + "ĠпоÑģÑĤ анов", + "Ġkrál ov", + "¨ ¨", + "Ġì¤ij ìļĶ", + "ĠG Wei", + "ĠGW ei", + "Ġvý voj", + "Ġboy ut", + "Ġ nek", + "Ġn ek", + "Ġne k", + "ا ÙĩاÛĮ", + "اÙĩ اÛĮ", + "اÙĩا ÛĮ", + "Ġst ranÄĽ", + "Ġstran ÄĽ", + "Ġstra nÄĽ", + "и ем", + "ие м", + "Ġпо ÑĢаж", + "ĠпоÑĢ Ð°Ð¶", + "à¥įर दर", + "à¥įरद र", + "é¡Ķ ãĤĴ", + "ĠY üz", + "Ġо знаÑĩа", + "Ġозна Ñĩа", + "à¹ģล à¸Ļà¸Ķ", + "Ġب ÙĩرÙĩ", + "ĠبÙĩ رÙĩ", + "ен ÑĤÑĥ", + "енÑĤ Ñĥ", + "ĠÐĿ ад", + "ĠÐĿа д", + "ĠÐŁ олÑĮ", + "ĠÐŁÐ¾ лÑĮ", + "ĠÐŁÐ¾Ð» ÑĮ", + "ãĥĹ ãĥª", + "á¿ ¶", + "âĢĮپدÛĮ اÛĮ", + "âĢĮپدÛĮا ÛĮ", + "ĠÙ¾ اÙĪØ±Ù¾ÙĪÛĮÙĨت", + "ิà¸ģ า", + "Ġε νÏİ", + "Ġεν Ïİ", + "Ġس اÛĮر", + "éģ º", + "ãĢģ ä»Ĭ", + "ĠL ê", + "äºĭ æĥħ", + "ĠY er", + "ĠYe r", + "èħ °", + "ĠاÙĦر سÙħ", + "ĠاÙĦÙħ ÙĪÙĤع", + "ĠاÙĦÙħÙĪ ÙĤع", + "Ġh Ãłm", + "Ġд ÑĢев", + "ĠдÑĢ ÐµÐ²", + "á tel", + "át el", + "áte l", + "ĠвÑģ Ñij", + "ìĺ ¥", + "ĠM ec", + "ĠMe c", + "ãĤ Ľ", + "Ġص اد", + "ĠÚ¯ ردد", + "Ġگرد د", + "Ġگر دد", + "Ġkr ás", + "èĮĥ åĽ´", + "a larına", + "alar ına", + "aları na", + "aların a", + "èĻ ļ", + "ĠØ¢ ÙĪØ±Ø¯", + "ĠØ¢ÙĪØ± د", + "ç¼ ĵ", + "ิ à¸ŀ", + "Ġ ãĥĭ", + "Ġãĥ ĭ", + "Ġ æĢ§", + "ĠæĢ §", + "ĠÙħÙĨ ذ", + "ç· ´", + "Ġ ê¶ģ", + "Ġê ¶ģ", + "в аем", + "ва ем", + "Ġζ Ïī", + "Ġn avr", + "Ġna vr", + "Ġnav r", + "Ïĥ ÏĦαÏĥη", + "ÏĥÏĦα Ïĥη", + "Ġر Ø£", + "Ġd opl", + "Ġdo pl", + "Ġdop l", + "_ __", + "__ _", + "çĶļ èĩ³", + "Äį el", + "Äįe l", + "æĦı åij³", + "ç¥ Ń", + "à ĺ", + "ÑģÑĤв еннÑĭе", + "ÑģÑĤвен нÑĭе", + "è£ ¡", + "Ġ ãĢī", + "ĠãĢ ī", + "ĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ĠãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "Ġ вал", + "Ġв ал", + "Ġва л", + "Ġ ẩm", + "Ġd iyor", + "Ġdi yor", + "Ġdiy or", + "à¸Ńà¸ĩ à¸Īาà¸ģ", + "ĠPh ó", + "ĠÐĵ е", + "ĠвеÑĢ ÐµÑģ", + "Ġве ÑĢеÑģ", + "Ġk onz", + "Ġko nz", + "Ġkon z", + "ر ز", + "ĠÑģоб оÑİ", + "Ġεκ εί", + "ìĺģ ìĸ´", + "i ag", + "ia g", + "ĠÑģ енÑĤ", + "Ġn ấu", + "Ġja ké", + "Ġjak é", + "Ġro zh", + "Ġroz h", + "Ġб ог", + "Ġбо г", + "ÙĨ اد", + "ÙĨا د", + "ĠاÙħ ÙĪØ±", + "à¹Į à¸ģาร", + "à¹Įà¸ģ าร", + "ĠY aÅŁ", + "ĠYa ÅŁ", + "é Ī", + "åķ ª", + "Ġon ay", + "Ġona y", + "ìĹ ĩ", + "o mu", + "om u", + "ÑĨ Ñĸйного", + "ÑĨÑĸй ного", + "ÑĨÑĸйно го", + "ĠÑģ ал", + "ĠΣ Ïħν", + "ĠΣÏħ ν", + "Ġsav un", + "å¦ Ļ", + "à¸Īะ ม", + "ãĤ¹ ãĤ¯", + "Ġd osy", + "Ġdo sy", + "Ġdos y", + "ľ ĺ", + "ë¨ ¹", + "Ġmin ul", + "Ġmi nul", + "ãĢĭ Ċ", + "åģ ı", + "ĠÐļ аÑĤ", + "ĠÐļа ÑĤ", + "Ġed ilmesi", + "Ġedilm esi", + "Ġedil mesi", + "ÑĨÑĸ ÑĶн", + "ìĦ± ìĿ´", + "åĸ Ķ", + "Ġв ÑĸÑĢ", + "ĠвÑĸ ÑĢ", + "è¯ ij", + "ाà¤ĩ ड", + "ĠÙĪÙĤ تÛĮ", + "ĠÙĪÙĤت ÛĮ", + "ÄIJ á»ĥ", + "Ġ vyššÃŃ", + "Ġvy ššÃŃ", + "Äį ila", + "Äįi la", + "Äįil a", + "а дÑĥ", + "ад Ñĥ", + "çī¹ åĪ¥", + "ĠìĿ¸ 기", + "u jÃŃcÃŃch", + "ujÃŃ cÃŃch", + "ujÃŃcÃŃ ch", + "ĠPo dle", + "ĠPod le", + "Ġy avaÅŁ", + "Ļ æ±Ł", + "Ġka yb", + "Ġkay b", + "åĬ ª", + "ç´ ¹", + "Ġоб ÑĢабоÑĤ", + "ĠобÑĢа боÑĤ", + "Ġм аÑı", + "Ġма Ñı", + "Ġ åıĬ", + "Ġåı Ĭ", + "æİ¥ åıĹ", + "ÙĨ تÛĮ", + "ÙĨت ÛĮ", + "Ġ ÏĩÏİ", + "ĠÏĩ Ïİ", + "ÑĤ ÑĢо", + "ÑĤÑĢ Ð¾", + "Ġu yar", + "Ġuy ar", + "ĠعÙħÙĦ کرد", + "Ġо ÑĨен", + "ĠмеÑģÑĤ а", + "à¸ķ ลาà¸Ķ", + "à¸ķล าà¸Ķ", + "Ùħ ÙĤ", + "ild ren", + "Ġзави ÑģиÑĤ", + "Âł ĠÂł", + "ÂłĠ Âł", + "Ġm ožná", + "Ġmož ná", + "æĺŃ åĴĮ", + "ır ken", + "к ин", + "ки н", + "åĿ Ĥ", + "ÏĦ Ïĥι", + "ÏĦÏĥ ι", + "ĠÑĩ Ñĥд", + "Ðļ он", + "is lav", + "isl av", + "ĠÐļ ÑĢаÑģ", + "ĠÐļÑĢа Ñģ", + "N ej", + "Ne j", + "Âł b", + "r of", + "ro f", + "Ġ ileri", + "Ġi leri", + "Ġil eri", + "Ġile ri", + "Ġiler i", + "ĠÐŀ ÑĢ", + "ĠCh á»ī", + "Ġn üfus", + "ĠÑĸ нÑĤ", + "ĠÑĸн ÑĤ", + "! âĢľ", + "Ġन र", + "主 ä¹ī", + "ĠتÙĨ ظ", + "ův odu", + "ůvod u", + "ĠгоÑĢ Ð¾Ð´Ð°", + "ĠгоÑĢод а", + "Ġk ural", + "Ġkur al", + "Ġku ral", + "Ġj edin", + "Ġje din", + "Ġjed in", + "ÑĢ Ð°ÑĤег", + "ÑĢаÑĤ ег", + "åĢ º", + "Ġzpůsob em", + "ìĿ¸ ìĿĺ", + "Ġ ÙĨب", + "ĠÙĨ ب", + "ĠN ga", + "ĠNg a", + "ĠÐĿ ай", + "ĠÐĿа й", + "ĠاÙģ Ø²Ø§Ø±", + "ĠاÙ쨲 ار", + "нÑĥ вÑģÑı", + "нÑĥв ÑģÑı", + "Ġдв оÑħ", + "Ġдво Ñħ", + "Ġro zp", + "Ġroz p", + "ε ίοÏħ", + "εί οÏħ", + "είο Ïħ", + "Ġο ικο", + "Ġοι κο", + "ĠG eç", + "ĠGe ç", + " Ĺ", + "Ġch iếm", + "Ġchiế m", + "ĠÑĢаÑģпÑĢоÑģÑĤ ÑĢан", + "Ġh ương", + "èĩª åĭķ", + "ĠÙħÙĪ ÙģÙĤ", + "æĮ ¥", + "ï¼ģ âĢĿĊĊ", + "ï¼ģâĢĿ ĊĊ", + "Ïģο ÏĨοÏģ", + "èı Į", + "ãĥ´ ãĤ¡", + "欧 ç¾İ", + "ĠÑĤеп ло", + "ãģĤ ãģĤ", + "ãĤ¦ ãĥ³", + "ĠÅŁ eyi", + "ĠÅŁey i", + "Ġs üt", + "Ġsü t", + "ãģ¹ ãģ¦", + "ãĥ³ ãĥij", + "ãĥ³ãĥ ij", + "μÎŃν Ïīν", + "Ġgenel likle", + "Ġدر ÙħاÙĨ", + "Ù ª", + "Ġak ıl", + "ĠÐľ Ñĭ", + "Ġet miÅŁ", + "Ġetm iÅŁ", + "Å¡ la", + "Ġвозмож ноÑģÑĤÑĮ", + "Ġвозможно ÑģÑĤÑĮ", + "Ġgün cel", + "Ġná ro", + "å½¢ å¼ı", + "Ġα ÏĢοÏĦε", + "ĠαÏĢο ÏĦε", + "ĠмÑĸÑģ ÑĨÑı", + "Ġ رض", + "Ġر ض", + "ä¸į çŁ¥éģĵ", + "ä¸įçŁ¥ éģĵ", + "r ava", + "ra va", + "rav a", + "ĠÎļ ά", + "ิà¸Ļ à¸Ĺร", + "ิà¸Ļà¸Ĺ ร", + "Ġли ÑģÑĤÑĮ", + "ĠлиÑģÑĤ ÑĮ", + "èĨ ľ", + "ãģ«ãģª ãĤĬ", + "Ġ æĿ¾", + "ĠæĿ ¾", + "å® ı", + "Ġм иÑģ", + "Ġми Ñģ", + "át nÃŃ", + "Ġyıl lık", + "ĠMerk ezi", + "ĠMerkez i", + "Ġiç eri", + "Ġiçer i", + "ÅĻ ÃŃž", + "ÅĻÃŃ Å¾", + "Ġp ÅĻe", + "ĠpÅĻ e", + "Ïĩ Ïģι", + "Ġ åįĥ", + "Ġåį ĥ", + "Ġs rp", + "Ġsr p", + "à¹Ĥ à¸Ĺร", + "à¹Ĥà¸Ĺ ร", + "ĠK rál", + "ĠKr ál", + ". Σ", + "á val", + "áv al", + "l éd", + "lé d", + "Ġ λα", + "Ġλ α", + "ี ยวà¸ģ", + "ีย วà¸ģ", + "ียว à¸ģ", + "ãģı ãģª", + "ĠvÅ¡ ichni", + "ĠпÑĢед оÑģÑĤав", + "ì ¿", + "Ġ 구ê¸ĢìĥģìľĦ", + "Ġ구 ê¸ĢìĥģìľĦ", + "Ġ구ê¸Ģ ìĥģìľĦ", + "Ġà¤īप लब", + "в оз", + "во з", + "ĠëħĦ ëıĦë³Ħ", + "、 _", + "à¸ļ รร", + "à¸ļร ร", + "ĠÑģв ÑĸÑĤÑĥ", + "ĠÑģвÑĸÑĤ Ñĥ", + "ĠÑĢÑĥб лей", + "len me", + "lÃŃ Äį", + "ÏĦ ει", + "ÏĦε ι", + "Ġ åı¤", + "Ġåı ¤", + "ĠObr ázky", + "Ġìĺģ íĸ¥", + "ĠгÑĢаж дан", + "í Ĥ¹", + "íĤ ¹", + "Ġsahip tir", + "Ġп оÑĩаÑĤкÑĥ", + "ĠпоÑĩ аÑĤкÑĥ", + "ĠØ£ÙĬ ض", + "ĠÑĤоÑĢ Ð³Ð¾Ð²", + "Ġgel ecek", + "Ġgele cek", + "Ġ 문íĻĶ", + "Ġ문 íĻĶ", + "ik leri", + "ikler i", + "ĠнеобÑħÑĸд но", + "Ġ äºij", + "o vol", + "ov ol", + "ovo l", + "Ġद ल", + "ĠìķĬ ê³ł", + "Ġм г", + "Ġz jist", + "an lı", + "ั à¸ĩà¸Ļ", + "ัà¸ĩ à¸Ļ", + "ÑĢа Ñħов", + "ÑĢаÑħ ов", + "ι νη", + "ιν η", + "Ġп лоÑĤ", + "Ġпл оÑĤ", + "Ġпло ÑĤ", + "Ġn itel", + "Ġni tel", + "Ġnit el", + "ìĬ¤ íģ¬", + "ĠSon ra", + "ĠÑģ боÑĢ", + "ĠÑģб оÑĢ", + "Ġ ÏĥοÏħ", + "ĠÏĥ οÏħ", + "Ġol mam", + "Ġolm am", + "Ġolma m", + "Ġan aliz", + "Ġanal iz", + "à¹Į ว", + "Ġm ỹ", + "Ġmá» ¹", + "ce ae", + "cea e", + "Ġ ден", + "Ġд ен", + "Ġде н", + "веÑĢ Ð¶Ð´", + "веÑĢж д", + "Ạ¢", + "ãģĵ ãģ¨ãĤĤ", + "ãģĵãģ¨ ãĤĤ", + "ìĤ¬ íķŃ", + "è¨Ģ ãģ£ãģŁ", + "Ġ ì¹´ì§Ģëħ¸", + "Ġì¹´ ì§Ģëħ¸", + "ÑĢ Ð¸ÑĤи", + "ÑĢи ÑĤи", + "ÑĢиÑĤ и", + "Ġch ce", + "Ġçev ir", + "ÛĮ ÛĮÙĨ", + "ä¼ļ è®®", + "ัม à¸ŀ", + "Ġ åĦ", + "Ġå Ħ", + "ĠÙ¾ در", + "å¼ı ä¼ļ社", + "Ġ ÑĨен", + "ĠÑĨ ен", + "ĠÑĨе н", + "ิ à¸ĸ", + "Ġji nak", + "Ġjin ak", + "Ġб лÑİ", + "Ġбл Ñİ", + "и ÑĨин", + "иÑĨ ин", + "ÙĴ Ùĩ", + "Ú© ÙĪØ±", + "Ú©ÙĪ Ø±", + "Ġ ìķħ", + "Ġìķ ħ", + "e ksiyon", + "ek siyon", + "eks iyon", + "ĠÑģ веÑĢ", + "ĠÑģв еÑĢ", + "ĠобÑĢаз ованиÑı", + "Ġ ãĥĻ", + "Ġãĥ Ļ", + "æľī 人", + "Ġbilg ileri", + "Ġbilgi leri", + "Ġbilgiler i", + "Ġh ầu", + "еÑĢ Ñĸг", + "еÑĢÑĸ г", + "Ġva Å¡e", + "Ġn edir", + "Ġne dir", + "Ġned ir", + "ä¸į å¾Ĺ", + "ĠbaÅŁar ılı", + "ĠbaÅŁarı lı", + "Ġkay bet", + "Ġkayb et", + "å© ·", + "ĠÐĿ ав", + "ĠÐĿа в", + "Ġê´Ģ íķľ", + "Ñģ ÑĤÑİ", + "ÑģÑĤ Ñİ", + "å®ŀ éĻħ", + "k lady", + "kl ady", + "klad y", + "kla dy", + "д аÑĤÑĮ", + "да ÑĤÑĮ", + "даÑĤ ÑĮ", + "r aç", + "ra ç", + "Ġkuv vet", + "à¸ģาร à¸Ĺ", + "å ļ", + "Ġ ÑĢеп", + "ĠÑĢ ÐµÐ¿", + "ĠÑĢе п", + "Ġ à¸Ŀ", + "ĠภĿ", + "ĠDi ÄŁer", + "íĶĦ íĬ¸", + "Ġnej vÄĽtÅ¡ÃŃ", + "Ġìłģ ìļ©", + "Ġonemoc nÄĽnÃŃ", + "а ка", + "ак а", + "Ðł аз", + "ĠÙģ Ø¥ÙĨ", + "ãĤµ ãĤ¤ãĤº", + "ãĤµãĤ¤ ãĤº", + "Ġv lád", + "Ġvl ád", + "Ġvlá d", + "Ġr ady", + "Ġrad y", + "Ġra dy", + "ãĢģ ãģĵãĤĮ", + "ÑģÑĤв ие", + "lı ÄŁa", + "lıģ a", + "å ŃĶ", + "åŃ Ķ", + "Ġ áo", + "Ġá o", + "à¸Ń าà¸ģาศ", + "Ġ à¤ıम", + "Ġà¤ı म", + "δ αÏĤ", + "δα ÏĤ", + "Ġа пÑĢ", + "Ġап ÑĢ", + "æİ Ľ", + "Ġ ç«ĭ", + "Ġç« ĭ", + "âĸı âĸı", + "ĠС м", + "Ġne má", + "Ġnem á", + "Ġ è¢", + "Ġè ¢", + "νο μα", + "νομ α", + "ĠÙģ Ø±ÙĪØ¯", + "ĠÙ쨱 ÙĪØ¯", + "ĠÙ쨱ÙĪ Ø¯", + "Ġül ke", + "Ġülk e", + "Ġ æĺŁ", + "Ġæĺ Ł", + "ั à¸Ļà¸ģ", + "ัà¸Ļ à¸ģ", + "ãģķãĤĵ ãģ®", + "eÅŁ il", + "ÄŁ iz", + "ÄŁi z", + "ĠÐij оÑĢ", + "Ġt ầm", + "ει ÏĦοÏħÏģγ", + "Ġ γÏģα", + "Ġγ Ïģα", + "à¥įष à¤ķ", + "Ġv ẻ", + "Ġkend isine", + "Ġkendisi ne", + "ĠìķĮ ê³ł", + "Ġêµ Ńìłľ", + "ĠêµŃ ìłľ", + "ĠnÄĽk do", + "Ġ ÛĮÙĩ", + "ĠÛĮ Ùĩ", + "Ġکار بر", + "ãĥĻ ãĥ«", + "ï» ´", + "Ġt uyên", + "Ġtuy ên", + "Ġç at", + "Ġça t", + "âĢIJ âĢIJ", + " ı", + "Ġ ìĤ¬ìĹħ", + "ĠìĤ¬ ìĹħ", + "é ĨĴ", + "éĨ Ĵ", + "æıIJ é«ĺ", + "æ· ¡", + "Ġ ÄŁ", + "ĠÄ Ł", + "èĸ ¦", + "ãĢĭ ï¼Ī", + "æ¡ ĥ", + "ìĹ Ħ", + "Ġ æŀĹ", + "Ġæŀ Ĺ", + "Ä Ĥ", + "ĠÄĮ ech", + "α ιο", + "αι ο", + "ĠØ· رÙĬÙĤ", + "Ġطر ÙĬÙĤ", + "Ġзав еÑĢÑĪ", + "ĠзавеÑĢ ÑĪ", + "تÙĪ Ø¨Ø±", + "ĠØŃ ج", + "ĠÎŃÏĩ οÏħν", + "¿ ÃĤ", + "Ġd ÄĽtÃŃ", + "ĠdÄĽ tÃŃ", + "ĠdÄĽt ÃŃ", + "Ġiç ine", + "Ġiçin e", + "Ġiçi ne", + "ĠCh úa", + "ан нÑĭй", + "аннÑĭ й", + "ĠÙĪÛĮ Úĺ", + "Ġna stav", + "Ġnast av", + "ıs ına", + "ısı na", + "ĠÑĹ Ð¼", + "п он", + "по н", + "е нÑı", + "ен Ñı", + "ĠÙĪ Ø¸", + "Ú¯ ÙĦ", + "หล วà¸ĩ", + "Ġza stav", + "Ġzast av", + "а кон", + "ак он", + "³³³³³³³³³³³³³³³³ ³³³³³³³³³³³³³³³³", + "ĠK ır", + "ĠKı r", + "çµ ¶", + "ĠоÑĢганÑĸ заÑĨÑĸÑĹ", + "ĠоÑĢганÑĸз аÑĨÑĸÑĹ", + "ĠоÑĢганÑĸза ÑĨÑĸÑĹ", + "ãģŁ ãĤĬ", + "ذ ÙĬ", + "Ġर à¤ķ", + "amp iyon", + "Ġ æ¸ħ", + "Ġæ¸ ħ", + "çľ¼ çĿĽ", + "Ġìķ ĬìĿĢ", + "ĠìķĬ ìĿĢ", + "é¹ ¿", + "Ġ å¿ĥ", + "Ġå¿ ĥ", + "ĠпÑĢек ÑĢаÑģ", + "ĠÑģ егоднÑı", + "Ġ सल", + "Ġस ल", + "ĠÏħ ÏĢÏĮ", + "ĠÏħÏĢ ÏĮ", + "ĠÐķ го", + "ĠÐĽ и", + "ãĤ¨ ãĥ«", + "Ġл ÑİÑĤ", + "ĠлÑİ ÑĤ", + "é¥ °", + "Ġvz dál", + "¯ ÃĤ", + "Ġна Ñıв", + "Ġتش Ú©ÛĮÙĦ", + "Ġس ÙĪÛĮ", + "ĠسÙĪ ÛĮ", + "Ġt ái", + "Ġtá i", + "Ġk apı", + "Ġkap ı", + "ĠsvÄĽt ÄĽ", + "ĠsvÄĽ tÄĽ", + "δ ÏĮν", + "δÏĮ ν", + "æ¼ ¢", + "ì į¨", + "ĠbaÅŁv ur", + "ÑĢ Ð¸Ð½Ð°", + "ÑĢи на", + "ÑĢин а", + "Ġk elim", + "Ġke lim", + "Ġkel im", + "аÑĤ ок", + "аÑĤо к", + "Ġκά θε", + "ĠYük sek", + "à¹ĩà¸Ļ à¸ľ", + "éł Ĥ", + "åIJĮ æĻĤ", + "ÅŁ tır", + "ÅŁt ır", + "ว à¸ĩศ", + "วà¸ĩ ศ", + "o ty", + "ot y", + "Ġ ارد", + "Ġا رد", + "Ġار د", + "ĠìŀIJìĭł ìĿĺ", + "ĠÑıн ва", + "üyor du", + "æĿ ¨", + "ĠâĢĵ Ċ", + "ï¼Į å®ĥ", + "е йн", + "ей н", + "ĠпеÑĢ ÐµÑĤ", + "ĠпеÑĢе ÑĤ", + "ĠdeÄŁiÅŁik lik", + "ĠогÑĢа ниÑĩ", + "ìĦľ ìļ¸", + "Ġgel iyor", + "ĠÙ¾ ذÛĮر", + "åĵ ²", + "ey in", + "eyi n", + "Ġëı Ī", + "Ġun iverz", + "Ġh ned", + "Ġhn ed", + "Ġt áºŃn", + "vo ÅĻÃŃ", + "voÅĻ ÃŃ", + "Ġn iên", + "Ġni ên", + "dÄĽ podob", + "ìĤ¬ íļĮ", + "ãģĮ ãģĤãĤĬ", + "ĠÑģ ÑĸÑĩ", + "' '\"", + "'' \"", + "Ġtop lantı", + "ĠÑģ ÑĩеÑĤ", + "ĠÑģÑĩ еÑĤ", + "åĩĨ å¤ĩ", + "ан ÑĸÑı", + "анÑĸ Ñı", + "Ġ zel", + "Ġz el", + "Ġze l", + "v ala", + "val a", + "va la", + "Ġа пп", + "Ġап п", + "ĠاÙĦÙħ ÙĦÙĥ", + "ĠاÙĦÙħÙĦ Ùĥ", + "Ġho ÅŁ", + "ĠÐĵ ен", + "ĠÐĵе н", + "ÑĤ аб", + "ÑĤа б", + "ĠÄĮesk o", + "ĠÄĮes ko", + "Ġмай же", + "ĠmÄĽ sto", + "ĠmÄĽst o", + "yo nel", + "yon el", + "ê±° 리", + "Ġìĺ¨ ëĿ¼ìĿ¸", + "ç´ ¯", + "Ġde rec", + "Ġder ec", + "Ġdere c", + "Ġок ÑĢÑĥж", + "Ġy abancı", + "Ġ íĦ°", + "ĠíĦ °", + "Ġ èµĦ", + "Ġèµ Ħ", + "ÎĻÎļ ÎĹ", + "Ġп Ñĭ", + "Ġv ÄĽn", + "ĠvÄĽ n", + "и нки", + "ин ки", + "ụ p", + "æľº 械", + "ĠìķĮ 볤", + "ëħ ķ", + "Ġ λÏĮγ", + "Ġλ ÏĮγ", + "e yn", + "ey n", + "Ġ ëIJĺìĹĪëĭ¤", + "ĠëIJĺ ìĹĪëĭ¤", + "ĠëIJĺìĹĪ ëĭ¤", + "æ± ¡", + "Ġve dle", + "Ġved le", + "ĠÙĥ تب", + "ë§ ¨", + "ĠÙħÙĤ اÙĪ", + "å¹´ ãģ«", + "ाà¤ĩ à¤ķ", + "ĠÑģÑĤ оÑģ", + "ĠÑģÑĤо Ñģ", + "ĠÏĥ ÏĦοÏħÏĤ", + "м еÑĤÑĮ", + "ме ÑĤÑĮ", + "меÑĤ ÑĮ", + "Ġes as", + "Ġesa s", + "ëIJĺ ê³ł", + "ĠkvÄĽt na", + "Ġ éľ", + "Ġé ľ", + "d ük", + "dü k", + "åŁ ·", + "è ªĮ", + "èª Į", + "Ġm luv", + "Ġml uv", + "ĠпÑĢи нÑı", + "ĠпÑĢин Ñı", + "Ġpo té", + "Ġpot é", + "ĠÚ© ÙĨÙħ", + "ĠÚ©ÙĨ Ùħ", + "ĠпÑĢед лож", + "ĠÐľÐ¾Ñģк ва", + "ï¼Į å¦Ĥ", + "Ġsv ém", + "Ġsvé m", + "Ġا ÙħÙĨ", + "ĠاÙħ ÙĨ", + "ส าย", + "ĠÑĥм енÑĮ", + "Ġ ãģĵãģ®", + "åī Ĥ", + "ĠÑģ еÑĢÑĮ", + "ĠÑģеÑĢ ÑĮ", + "Ġm á»ĩ", + "Ġmá» ĩ", + "Ġ ä¹Ŀ", + "Ġä¹ Ŀ", + "Ġза кÑĸн", + "Ġзак Ñĸн", + "Ġв елиÑĩ", + "Ġвели Ñĩ", + "Ġвел иÑĩ", + "Ġве лиÑĩ", + "Ġкон ÑĤÑĢа", + "ĠконÑĤ ÑĢа", + "ĠконÑĤÑĢ Ð°", + "ĠS osyal", + "Ġy ukarı", + "Ġد ÙĪØ¨", + "ĠدÙĪ Ø¨", + "ä¾ §", + "Ġза мен", + "Ġзам ен", + "ï» ®", + "Ġso bÄĽ", + "Ġsob ÄĽ", + "ĠТак же", + "Ð İ", + "ε δ", + "Ùħ ارÛĮ", + "Ùħا رÛĮ", + "Ùħار ÛĮ", + "ξ ι", + "ì¹ Ń", + "Ġп лаÑģÑĤи", + "Ġпл аÑģÑĤи", + "Ġпла ÑģÑĤи", + "Ïĥ οÏħν", + "Ïĥο Ïħν", + "ÏĥοÏħ ν", + "èľĺèĽĽ è¯į", + "ÙĪ ÛĮزÛĮ", + "ÙĪÛĮ زÛĮ", + "Ġnap ÅĻ", + "ĠÑĤип а", + "ĠÑĤи па", + "à¥Ĥ à¤Ľ", + "ĠÅŁ ah", + "л ÑıÑĤи", + "лÑı ÑĤи", + "ب ÛĮر", + "بÛĮ ر", + "ระ ยะ", + "ĠболÑĮ ÑĪин", + "ĠболÑĮÑĪ Ð¸Ð½", + "ÏĦη ÏĦα", + "Ġíıī ê°Ģ", + "Ġpro jev", + "Ġproj ev", + "Ġproje v", + "ò i", + "Ġк нÑı", + "ÏĨ εÏģ", + "е ÑĢÑĥ", + "еÑĢ Ñĥ", + "Ñį н", + "ĠعÙħ ÙĦÛĮ", + "ĠعÙħÙĦ ÛĮ", + "à¤ł न", + "ãĥ³ ãĤ¯", + "ĠìķĦ ëŀĺ", + "Î Ī", + "Ġب است", + "Ġبا ست", + "Ġ تÙĥ", + "Ġت Ùĥ", + "a ÄįnÃŃ", + "aÄį nÃŃ", + "ĠлÑĸ кÑĥваннÑı", + "ĠлÑĸк ÑĥваннÑı", + "à¸Ħ à¹Ĥà¸Ļ", + "Ġ èĥ½", + "Ġè ĥ½", + "Ġèĥ ½", + "θ λη", + "len miÅŁ", + "Ġl á»Ļ", + "Ġlá» Ļ", + "Ġsi lah", + "Ġsil ah", + "ĠA ustr", + "ĠAust r", + "ĠAus tr", + "ĠAu str", + "ØŃ ÙĤ", + ".*** .***", + "ì ©", + "Ġg Ãł", + "Ġباز بÛĮÙĨÛĮ", + "ĠÄij Ãłn", + "ÃŃ ky", + "ÃŃk y", + "ĠÎķ ν", + "ض Ùħ", + "å§ ĵ", + "Ġ ÙĨÙĪÛĮس", + "ĠÙĨ ÙĪÛĮس", + "ĠÙĨÙĪ ÛĮس", + "Ġskup iny", + "Ġس ÛĮد", + "ĠسÛĮ د", + "Ġal dıģı", + "Ġald ıģı", + "Ġaldı ģı", + "m eli", + "me li", + "mel i", + "в иж", + "ви ж", + "ì¹ĺ ëĬĶ", + "ов аÑħ", + "ова Ñħ", + "Ġ æ©", + "Ġæ ©", + "Ø´ÙĨ اسÛĮ", + "Ø´ÙĨاس ÛĮ", + "Ġn imi", + "Ġni mi", + "Ġnim i", + "ĠÐĵ ÑĢи", + "íĹ Į", + "Ġк в", + "éŁ ĵ", + "Ġ íĽĦ기", + "ĠíĽĦ 기", + "Ġ stÅĻÃŃ", + "Ġst ÅĻÃŃ", + "ĠstÅĻ ÃŃ", + "ĠкÑĸлÑĮ кÑĸÑģÑĤÑĮ", + "ĠBakan lıģı", + "ĠменÑĮ ÑĪе", + "ا ÙĪÛĮ", + "اÙĪ ÛĮ", + "Ġار ÙĪÙ¾", + "Ġ èī²", + "Ġèī ²", + "ĠÚ©ÙĪÚĨ Ú©", + "ĠA ynı", + "Ġ äºĨ", + "Ġس Ù쨱", + "ĠسÙģ Ø±", + "ĠÑĤе аÑĤ", + "Ġ vÄĽd", + "ĠvÄĽ d", + "а ÑĢов", + "аÑĢ Ð¾Ð²", + "Ġоб меж", + "ĠìķĬ ìķĺ", + "追 åĬł", + "éł Ī", + "dÄĽ lenÃŃ", + "dÄĽl enÃŃ", + "dÄĽlen ÃŃ", + "Ġk ims", + "Ġki ms", + "Ġkim s", + "Ġ èı²", + "Ġèı ²", + "Ġг ÑĢÑĥн", + "ĠгÑĢÑĥ н", + "ĠгÑĢ Ñĥн", + "ĠØ¢ ÙĦÙħاÙĨ", + "ĠØ¢ÙĦ ÙħاÙĨ", + "Ġав г", + "ĠÑī оÑģÑĮ", + "ĠÑīо ÑģÑĮ", + "Ġ å¾·", + "Ġå¾ ·", + "ĠÐĿа ÑĨÑĸоналÑĮ", + "æĪIJ ç«ĭ", + "ูà¸Ļ ย", + "ãĥ¼ ãĥ«ãĥī", + "ãĥ¼ãĥ« ãĥī", + "éĽ ²", + "ĠT á»ķ", + "cı lık", + "ĠAlma nya", + "ĠAlman ya", + "Ġov Å¡em", + " ĭ", + "ĠÏĩÏģη ÏĥιμοÏĢοι", + "Ġörg üt", + "िस स", + "èĹ Ŀ", + "ĠGi ải", + "Ġsv ob", + "Ġsvo b", + "Ġrůzn ých", + "Ġrůz ných", + "Ġsmlou vy", + "ÑĢ ÐµÑģÑģ", + "ÑĢеÑģ Ñģ", + "ี à¹Ģà¸Ķ", + "ĠاÙħ رÙĪØ²", + "ĠاÙħر ÙĪØ²", + "ãĤ ħ", + "åĿ ¦", + "à¹ī à¸Ħ", + "Ġ каж", + "Ġк аж", + "Ġка ж", + "å¼ Ĺ", + "Ñĩ ноÑĹ", + "Ñĩно ÑĹ", + "åľ Ī", + "ĠØ¢ ÙĩÙĨÚ¯", + "ëª °", + "Ġ æº", + "Ġæ º", + "Ġ èĦ", + "Ġè Ħ", + "ä¸Ģ æŃ¥", + "оÑĩ ка", + "Ġpro stor", + "Ġpros tor", + "Ġprost or", + "Ġng ắn", + "Ġ ç·", + "Ġç ·", + "н аÑĢ", + "на ÑĢ", + "Ġà¤ľ व", + "ĠнаÑĩ алÑĮ", + "Ġне дел", + "Ġнед ел", + "ĠÑģиÑģÑĤем Ñĥ", + "ج ÙĬ", + "اد ات", + "ادا ت", + "Ġ æ¢", + "Ġæ ¢", + "ĠجاÙħ عة", + "ĠجاÙħع Ø©", + "Ġ ä»İ", + "Ġà¤ħ फ", + "èĸ Ħ", + "Ġب اÙĤ", + "Ġبا ÙĤ", + "ب ÙĬع", + "بÙĬ ع", + "ãģķ ãĤĮãģ¦", + "ãģķãĤĮ ãģ¦", + "ĠÃĩ alÄ±ÅŁ", + "Ø®ÙĪ Ø§Ø³Øª", + "ãĥĥ ãĤ·ãĥ¥", + "ĠØŃ سÛĮÙĨ", + "ĠØŃس ÛĮÙĨ", + "Ġоб наÑĢÑĥж", + "в Ñĸдом", + "вÑĸ дом", + "вÑĸд ом", + "Ġh ôm", + "л анд", + "ла нд", + "лан д", + "Ġव à¤ľà¤¹", + "س ÙĬÙĨ", + "سÙĬ ÙĨ", + "æł ı", + "Ġna vÃŃc", + "Ġnav ÃŃc", + "ãĤµ ãĤ¤ãĥĪ", + "ãĤµãĤ¤ ãĥĪ", + "ĠÑı комÑĥ", + "ĠÑıк омÑĥ", + "Ġí Ľ", + "ĠY ani", + "ĠYan i", + "ĠYa ni", + "ãĤĵ ãģ§ãģĻ", + "ãĤĵãģ§ ãģĻ", + "Ġг ÑĢÑĥп", + "ĠгÑĢÑĥ п", + "ĠгÑĢ Ñĥп", + "Äį ný", + "ÑĨ ик", + "ÑĨи к", + "ÙĪ ÙĬر", + "ÙĪÙĬ ر", + "Ġ Xã", + "ĠX ã", + "Ġf yz", + "Ġfy z", + "Ġ ï½ī", + "Ġï½ ī", + "âĢĮ ترÛĮÙĨ", + "âĢĮتر ÛĮÙĨ", + "à¤Ł à¤ķ", + "ÑĦоÑĢм и", + "ÑĦоÑĢ Ð¼Ð¸", + "ĠO yun", + "ĠOy un", + "åł´ æīĢ", + "ØŃ Ø«", + "ĠìķĮ ìķĦ", + "ÑĢав илÑĮ", + "ÑĢави лÑĮ", + "ï¼Į âĢĿ", + "b oru", + "bo ru", + "bor u", + "ĠK ullan", + "ĠKul lan", + "ĠKay nak", + "Ġê° ĸ", + "ç´ Ķ", + "ï¼Į æ¯ı", + "ÎĹ Î¡", + "Ġp ůl", + "Ġpů l", + "Ġг оÑģÑĤ", + "ر ÙĪÙħ", + "رÙĪ Ùħ", + "ï¼Į åį³", + "Û² Û³", + "ĠÙĨØ® ست", + "ĠÚ© سب", + "Ġ à¹Ģà¸ļ", + "Ġà¹Ģ à¸ļ", + "Ġà¹Ģภļ", + "Ġy azar", + "Ġya zar", + "Ġyaz ar", + "j ekt", + "je kt", + "à¹Ĥล ย", + "Ġдоб ÑĢе", + "Ġپزش Ú©ÛĮ", + "ĠتÙĩ ÛĮÙĩ", + "ç¾İ åľĭ", + "но ÑģÑıÑĤ", + "ноÑģ ÑıÑĤ", + "ноÑģÑı ÑĤ", + "ëłĪ ìĬ¤", + "åĹ ¯", + "Ġr Ãłng", + "ĠÎķ ξ", + "а ÑĤаÑĢ", + "аÑĤ аÑĢ", + "аÑĤа ÑĢ", + "k ova", + "ko va", + "kov a", + "ĠÅŁey ler", + "Ø® اص", + "ĠìķĪ ìłĦ", + "Ñī ей", + "Ñīе й", + "Ġë° Ŀ", + "âĢĮتÙĪØ§ÙĨ د", + "ãģĪ ãģ°", + "Ġv ữ", + "Ġvá» ¯", + "ĠÑģ ама", + "ĠÑģам а", + "ĠобоÑĢ Ñĥд", + "Ġобо ÑĢÑĥд", + "âĢĮ باشد", + "à¹Į à¸Ń", + "Ġdet ay", + "æĤ ²", + " Ī", + "ãĤ¦ ãĤ£", + "ĠпÑĢав ила", + "ĠпÑĢави ла", + "ĠпÑĢавил а", + "kr ét", + "à¹Į ร", + "åĮ ¹", + "Ġ åħį", + "Ġå ħį", + "Ġåħ į", + "ĠÑģилÑĮ но", + "ĠиÑģ ÑĤоÑĩ", + "ĠиÑģÑĤ оÑĩ", + "ĠsaÄŁ lar", + "Ġ æŃ¦", + "ĠæŃ ¦", + "íĸ ĪìĬµëĭĪëĭ¤", + "íĸĪ ìĬµëĭĪëĭ¤", + "Kh ông", + "à¹Īาà¸ĩ à¹Ĩ", + "Û° Û°Û°", + "Û°Û° Û°", + "Ġ رÙĤ", + "Ġر ÙĤ", + "âĢĻ ÑıÑĤ", + "âĢĻÑı ÑĤ", + "åĽ ²", + "à¹ģ à¸Ķà¸ĩ", + "Ġžád né", + "c ouz", + "co uz", + "cou z", + "à ĭ", + "ĠпÑĸд гоÑĤов", + "Ġ ëĮĢíķĻ", + "ĠëĮĢ íķĻ", + "Ġdüny anın", + "èĢģ å¸Ī", + "èģĮ ä¸ļ", + "Ġy eri", + "Ġye ri", + "Ġyer i", + "à¥ĭ à¤ķर", + "à¥ĭà¤ķ र", + "ĠبÙĩ تر", + "ëĭĪ ìķĦ", + "ìĿĮ ìĿĦ", + "Ġ æĮĩ", + "ĠæĮ ĩ", + "ãĢį ï¼Ī", + "ĠÑģооÑĤвеÑĤÑģÑĤв ии", + "æĬ ĵ", + "à¹Ĥ à¸Ĺ", + "Ġtr á»ĵng", + "ĠпÑĢа ÑĨÑĸ", + "Ġ ëĨĵ", + "ĠëĨ ĵ", + "à¤ĩ न", + "Ġìłķ ë§IJ", + "ãĢ ķ", + "Ġc áºŃn", + "åĸ Ŀ", + "Ġê³Ħ ìĨį", + "Ġ ä¸İ", + "Ġä¸ İ", + "å¥ ı", + "Ġع اÙĦÙħ", + "Ġvys vÄĽt", + "Ġдо ÑĢог", + "ĠдоÑĢ Ð¾Ð³", + "Ġн еÑĢв", + "ĠнеÑĢ Ð²", + "Ġб еÑĤ", + "Ġп ÑĢиÑĤ", + "ĠпÑĢ Ð¸ÑĤ", + "ĠпÑĢи ÑĤ", + "ов Ñĭй", + "å· ¡", + "Ùģ Ø§Ø¹", + "Ðļ Ðĺ", + "à¸ķ รวà¸Ī", + "à¸ķรว à¸Ī", + "ĠÐľ ай", + "ĠÐľÐ° й", + "ëıĦ ë¡ľ", + "Ġz lat", + "ĠsaÄŁ lam", + "Ïģ αν", + "Ïģα ν", + "à¸Ĭ ร", + "å¹´ ãģ®", + "à¸Ħ รà¸Ńà¸ĩ", + "à¸Ħร à¸Ńà¸ĩ", + " ħ", + "Ġho á", + "Ġдов олÑĮно", + "Ġol maz", + "Ġolm az", + "Ġolma z", + "ĠpodmÃŃn ky", + "ĠÑħозÑı й", + "æĻ ´", + "ÑĢ Ð¾Ð²Ð°", + "ÑĢов а", + "ÑĢо ва", + "Ġl ược", + "ान न", + "Ġкап иÑĤ", + "ĠÚĺ Ø§ÙĨ", + "æľī äºĽ", + "ĠповеÑĢÑħ ноÑģÑĤи", + "ĠÑĨ Ñĸн", + "ĠÑĨÑĸ н", + "ü yle", + "üy le", + "Ġj azy", + "Ġja zy", + "Ġjaz y", + "ĠPh ú", + "Ġ सन", + "Ġस न", + "åĩº åĶ®", + "Âł д", + "Ġ ãĤ¯", + "ĠãĤ ¯", + "çͱ äºİ", + "à¥į पत", + "à¥įप त", + "ĠاÙĦØ® اÙħ", + "Ġاص ÙĦاØŃ", + "ĠاصÙĦ اØŃ", + "Ġ تÛĮ", + "Ġت ÛĮ", + "Ġt ato", + "Ġta to", + "Ġtat o", + "å¹ ¹", + "æ³ ½", + "à¸Ńà¸ģ à¸Īาà¸ģ", + "Ñĥ лÑİ", + "Ñĥл Ñİ", + "Ġв Ñģп", + "ĠвÑģ п", + "m ekte", + "me kte", + "mek te", + "à¥Ģ फ", + "ĠÚĺ ÙĪØ¦", + "Ġl á»ĩnh", + "Ġlá»ĩ nh", + "âĢĮ کرد", + "âĢĮÚ© رد", + "íı¬ ì¸ł", + "an ki", + "ank i", + "Ġëĵ±ë¡Ŀ ëĮĢíĸī", + "Ġ ãĤĿ", + "ĠãĤ Ŀ", + "Ġار زش", + "Ġارز Ø´", + "Ġth ú", + "Ġ ấn", + "è¡Į 为", + "ĠÑģ нова", + "ê ¾¸", + "Ġsou hlas", + "Ġв озв", + "Ġвоз в", + "Ġво зв", + "ÏģÎŃ ÏĢει", + "ĠнÑĸ Ñĩого", + "ĠнÑĸÑĩ ого", + "н ож", + "но ж", + "ÑĤ ик", + "ÑĤи к", + "ãģ© ãģĵ", + "ĠоÑģнов е", + "ãĤ ¥", + "à¸Ľà¸£à¸° à¸Īำ", + "Ġ à¸Ĺà¸Ńà¸ĩ", + "Ġà¸Ĺ à¸Ńà¸ĩ", + "Ġek sik", + "Ġeks ik", + "ĠÙĦ Ø¥", + "ãģĭ ãģ®", + "Ġ ãģª", + "- प", + "Ïģ ει", + "Ïģε ι", + "ĠìłĦ 문", + "า à¸ģล", + "าà¸ģ ล", + "β ε", + "íĬ¹ ë³Ħ", + "íķĺ ë©´ìĦľ", + "íķĺë©´ ìĦľ", + "à¸Ħà¹Ĥà¸Ļ à¹Ĥลย", + "Ġ 好", + "Ġå¥ ½", + "Ġy ayım", + "Ġyay ım", + "ë§Į ëĤ¨", + "ĠкиÑģ лоÑĤ", + "ĠкиÑģл оÑĤ", + "ĠÑį неÑĢг", + "çĸ ¾", + "Ġد Ø´", + "Ġsor uml", + "Ġsoru ml", + "Ġза клад", + "Ġзак лад", + "à¸Ĭ à¸Ńà¸ļ", + "ĠÙ쨱ÙĩÙĨÚ¯ ÛĮ", + "Ġà¤ı ल", + "Ġë¹Ħ êµIJ", + "l erce", + "ler ce", + "Ġ Ø·ÙĦب", + "ĠØ· ÙĦب", + "ĠØ·ÙĦ ب", + "ãģ« ãģĹãģ¦", + "ĠÑı коÑĹ", + "ĠÑıк оÑĹ", + "ĠاÙĦب تÙĩ", + "ĠÐľ аÑĤ", + "ĠÐľÐ° ÑĤ", + "åį ĵ", + "Ġ åħ¬åı¸", + "Ġåħ¬ åı¸", + "Ġsöy ley", + "Ġsöyl ey", + "ĠìĥĪ ë¡ľìļ´", + "ĠÑĦ аÑĢ", + "Ġalt ına", + "Ġaltın a", + "Ġaltı na", + "Ġsta vu", + "Ġstav u", + "âĢĻ Ä±", + "al izace", + "aliz ace", + "Ġви ÑģÑĤÑĥп", + "æķĻ å¸Ī", + "à¥Ģ à¤ıस", + "à¥Ģà¤ı स", + "o dÄĽ", + "od ÄĽ", + "ĠÑĨ Ñĸл", + "ĠÑĨÑĸ л", + "ĠëĮĢ ìĥģ", + "ĠкоÑĤоÑĢ Ð¾Ð¼", + "ĠкоÑĤ оÑĢом", + "Ġظ رÙģ", + "éİ ®", + "اÙģ ÙĬØ©", + "اÙģÙĬ Ø©", + "Ġ ìĹĨìĿ´", + "ĠìĹĨ ìĿ´", + "ĠμÏĮ νο", + "ĠC Æ¡", + "å¯ »", + "ÏĦ ιÏĥ", + "ÏĦι Ïĥ", + "Ġ ãĤĦ", + "ĠãĤ Ħ", + "Ġjed noho", + "Ġjedn oho", + "Ġjedno ho", + "ا ا", + "Ø§Ø §", + "et ler", + "Ġव स", + "ĠÑĢазлиÑĩ нÑĭÑħ", + "Ġج غراÙģ", + "Ġth ừa", + "Ġthá» «a", + "ĠгÑĢомад Ñıн", + "ॠ°", + "ĠاÙĦØ£ Ø®", + "Ġнаг ÑĢÑĥз", + "ç¸ ¾", + "à¥Ĥ ह", + "ĠпÑĢÑıм о", + "â Ĭ", + "ĠاÙĦØ£ÙĪÙĦ Ùī", + "æĸ° èģŀ", + "Ġìĥģ íĻ©", + "it esi", + "ite si", + "ites i", + "ëį° ìĿ´íĬ¸", + "æŃ ·", + "ï¼ĮèĢĮ ä¸Ķ", + "ãģ¯ ãģļ", + "产 çĶŁ", + "æ°Ĺ ãģĮ", + "y slu", + "ys lu", + "ysl u", + "ìĸ´ ëĤĺ", + "ا Ú©Ùħ", + "اک Ùħ", + "âĢ ĥ", + ") ìĿĢ", + "Ġجست ارÙĩاÛĮ", + "ÙĪ Ø«", + "ãħ İ", + "Ġkav ram", + "v ál", + "vá l", + "æľ Ń", + "æĤ ł", + "ìħ Ģ", + "h rad", + "hr ad", + "hra d", + "Ġت ÙĥÙĪÙĨ", + "ĠتÙĥ ÙĪÙĨ", + "ĠH òa", + "å¹´ çļĦ", + "Ġç arp", + "Ġça rp", + "Ġy olu", + "Ġyo lu", + "Ġyol u", + "Ġdub na", + "ĠÐĴ елик", + "ĠÐĴели к", + "Ġt ôn", + "Ġtô n", + "æ ķĮ", + "æķ Į", + "Ġc oi", + "Ġco i", + "Ġnak onec", + "ĠÑį ÑĤÑĥ", + "ĠÑįÑĤ Ñĥ", + "íĨµ ëł¹", + "ÑĪ ÐµÐ»", + "ÑĪе л", + "Ġneb yl", + "Ġneby l", + "in ç", + "ب اÙĦØ¥ÙĨجÙĦÙĬزÙĬØ©", + "باÙĦ Ø¥ÙĨجÙĦÙĬزÙĬØ©", + "ï¼ ¡", + "о нÑĮ", + "он ÑĮ", + "Ġне маÑĶ", + "Ġнем аÑĶ", + "Ġê³ł ê°Ŀ", + "ĠÙĤ طع", + "ĠÙĤØ· ع", + "ĠÑĤеÑĢиÑĤоÑĢ ÑĸÑĹ", + "人 ãģ¯", + "ĠΣ α", + "éĤ£ äºĽ", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ios per", + "í Ĥ¨", + "íĤ ¨", + "r aki", + "ra ki", + "rak i", + "اÛĮ ج", + "Âł C", + "Ġан алÑĸз", + "ãĤı ãĤĬ", + "ĠìķĦëĭ Į", + "ĠاÙĦعÙħÙĦ ÙĬØ©", + "ĠاÙĦعÙħ ÙĦÙĬØ©", + "l ament", + "la ment", + "lam ent", + "é» ¨", + "u jÃŃcÃŃm", + "ujÃŃ cÃŃm", + "ujÃŃcÃŃ m", + "Ġr ẻ", + "ä¸į åΰ", + "Ġrez erv", + "ĠاÙĦذ ÙĬÙĨ", + "ĠاÙĦذÙĬ ÙĨ", + "æĭ ¥", + "Ðĺ н", + "Ġतह त", + "r esi", + "re si", + "res i", + "Ġ ãĥ¢", + "Ġãĥ ¢", + "л ев", + "ле в", + "ãĢĢ r", + "Ġ ä»Ĭ", + "Ġö dem", + "Ġpot rav", + "ĠêµIJ ìĪĺ", + "ÑĢ ÐµÐ´Ð¸", + "ÑĢед и", + "ÑĢе ди", + "ĠÎļ ÎijÎĻ", + "Ġ наÑĩала", + "ĠнаÑĩ ала", + "Ġиз б", + "ĠbÅĻez na", + "Ġle dna", + "Ġled na", + "ÑĢ ÑĥÑİÑĤ", + "ÑĢÑĥ ÑİÑĤ", + "Ġ моÑĤ", + "Ġм оÑĤ", + "Ġмо ÑĤ", + "åıĹ åΰ", + "ĠÑĢÑĥ кÑĥ", + "ĠÑĢÑĥк Ñĥ", + "Ỽ m", + "ad ele", + "ade le", + "adel e", + "ĠÑĢоз глÑı", + "åħ IJ", + "Ġر ÙĪØ§ÙĨ", + "ĠرÙĪ Ø§ÙĨ", + "а ков", + "ак ов", + "Ñĥ ÑĢÑĭ", + "ÑĥÑĢ Ñĭ", + "Ġaz al", + "ĠÑĥ кÑĢа", + "ĠÑĥк ÑĢа", + "пи он", + "ĠÄįlov ÄĽ", + "äºĮäºĮ äºĮäºĮ", + "ا بÙĬ", + "اب ÙĬ", + "Ġas lında", + "ë¹ Ī", + "Ġв ÑĢаÑĩ", + "ĠвÑĢа Ñĩ", + "ë£ ¹", + "Ġген еÑĢа", + "à¸ģาร ส", + "ĠÑģов Ñģем", + "ÙĪ ÙĦا", + "ÙĪÙĦ ا", + "Ġश ब", + "ाà¤ĸ ण", + "ست اÙĨÛĮ", + "ستاÙĨ ÛĮ", + "æĬ ½", + "Ġrů z", + "ĠíĮIJ 매", + "à¸ģาร à¸ķ", + "ائ ÛĮ", + "a sal", + "as al", + "asa l", + "ĠÑĢабоÑĤ Ñĥ", + "ĠÑĢаб оÑĤÑĥ", + "ĠÑĢабо ÑĤÑĥ", + "à¥ĭल न", + "Ġ 马", + "Ġé© ¬", + "Ġl ai", + "Ġla i", + "ó i", + "v ap", + "va p", + "ëħĦ ìĹIJëĬĶ", + "ëħĦìĹIJ ëĬĶ", + "ĠпеÑĢед баÑĩ", + "Ġп леÑĩ", + "Ġпл еÑĩ", + "id det", + "idd et", + "ĠÑĩ оÑĢ", + "i yan", + "iy an", + "iya n", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ĠãĢĢ", + "ĠØŃر ÙģÙĩ", + "ĠØŃرÙģ Ùĩ", + "大 éĺª", + "Ñĩ ого", + "Ġ ки", + "Ġк и", + "ا ÙĪÙĬ", + "اÙĪ ÙĬ", + "ĠbaÅŁ lan", + "Ġmerk ezi", + "Ġmerkez i", + "© ©", + "Ġر است", + "Ġرا ست", + "Ġ ëĬĶ", + "ĠëĬ Ķ", + "ĠÑģ ÑĢав", + "ĠвнÑĥ ÑĤÑĢи", + "ĠвнÑĥÑĤÑĢ Ð¸", + "ĠвнÑĥÑĤ ÑĢи", + "ãĢĢ ãĥİ", + "åĿ Ľ", + "Ġв ÑĤ", + ": :/", + ":: /", + "Ġsöz leÅŁ", + "Ġver diÄŁi", + "Ġverdi ÄŁi", + "ิ ยม", + "ิย ม", + "ĠÐŁ ÑĢоÑĤ", + "ĠÐŁÑĢ Ð¾ÑĤ", + "ĠÐŁÑĢо ÑĤ", + "Ùĥ ار", + "Ġب ÙĨدÛĮ", + "ĠبÙĨ دÛĮ", + "ĠبÙĨد ÛĮ", + "Ùı ÙĪ", + "缴 æĴŃ", + "ĠÙħ ÙĦÙĬ", + "ĠÙħÙĦ ÙĬ", + "Ġnut né", + "ะà¹ģ à¸Ļà¸Ļ", + "ĠM ã", + "Ġ ì´", + "Ġì ´", + "à¹Ī าม", + "à¹Īา ม", + "м оÑģ", + "мо Ñģ", + "Ġпо Ñıви", + "ĠпоÑıв и", + "Ġn ghi", + "Ġng hi", + "Ġngh i", + "Ġ ëIJĺëĬĶ", + "ĠëIJĺ ëĬĶ", + "Ñģ клад", + "Ñģк лад", + "à¤Ĺ ल", + "ĠC á»Ļng", + "çŁ¥ è¯Ĩ", + "Ġ taj", + "Ġt aj", + "Ġta j", + "Ġع بر", + "Ġعب ر", + "éĻĦ è¿ij", + "ü ÄŁ", + "Ġê³µ ê³ł", + "è£ ķ", + "âĢĮ Ø´ÙĨ", + "âĢĮØ´ ÙĨ", + "Ġgerç ekten", + "Ġgerçek ten", + "n un", + "nu n", + "Ùħ Ø´", + "ê°Ģ ëĬ¥", + "ãĥ© ãĥ³ãĥī", + "ãĥ©ãĥ³ ãĥī", + "ay acak", + "aya cak", + "åįģ ä¸Ģ", + "ĠB ảo", + "Ġyet erli", + "Ġyeter li", + "ž iv", + "ži v", + "ĠÙĬÙĨ اÙĬر", + "Ġb ýval", + "Ġbý val", + "ìĽĶ ê¹Įì§Ģ", + "Ġn ợ", + "Ġ ê´Ģê³Ħ", + "Ġê´Ģ ê³Ħ", + "Ġ íĿ¬", + "ĠíĿ ¬", + "а ÑİÑĤÑĮ", + "аÑİÑĤ ÑĮ", + "аÑİ ÑĤÑĮ", + "Ġgö tür", + "Ġваж но", + "Ġва жно", + "æµ ©", + "ĠìĿ¼ ë¶Ģ", + "ÑĨÑĸй ний", + "ëł¥ ìĿĦ", + "Ġл еÑĩение", + "ĠлеÑĩ ение", + "éĸ¢ ä¿Ĥ", + "ĠT üm", + "ìĻ Ķ", + "éģ Ĺ", + "ĠD ön", + "Ġ ÑģпÑĸлÑĮ", + "ĠÑģп ÑĸлÑĮ", + "ĠÑģпÑĸл ÑĮ", + "ãĥģ ãĤ§", + "н ÑıеÑĤÑģÑı", + "нÑı еÑĤÑģÑı", + "нÑıеÑĤ ÑģÑı", + "il tere", + "ilter e", + "ilt ere", + "Ġ íĮĢ", + "Ġí ĮĢ", + "ĠíĮ Ģ", + "è¨Ń å®ļ", + "Ġro din", + "Ġrod in", + "Ġrodi n", + "ĠاÙĤتص اد", + "алÑĮ не", + "à¥į à¤ķर", + "à¥įà¤ķ र", + "Ġvý bÄĽ", + "Ġteh lik", + "âĶ IJ", + "Ġ çͰ", + "Ïģί ÏĤ", + "iy el", + "iye l", + "Ġth iá»ĩu", + "Ġthi á»ĩu", + "ÏĪ Î·ÏĤ", + "ÏĪη ÏĤ", + "Ġд ве", + "Ġдв е", + "ĠEl ekt", + "ĠEle kt", + "à¸ģ à¸İ", + "о ÑĢÑĥж", + "оÑĢ Ñĥж", + "оÑĢÑĥ ж", + "a ÅŁÄ±", + "aÅŁ ı", + "è© ³ç´°", + "Ġات Ù쨧ÙĤ", + "Ġg ắn", + "æ²Ĵ æľī", + "ĠÙħطاÙĦ عÙĩ", + "ÏĦ ιν", + "ÏĦι ν", + "Ġok res", + "Ñ ľ", + "ê° Ķëĭ¤", + "Ðł оз", + "å¾ĭ 宾", + "ï¼ī ï¼Ī", + "Ġìļ´ìĺģ ìŀIJ", + "ãĤ« ãĥĨ", + "l aÄį", + "la Äį", + "à¥ĩब स", + "Ġo Äįi", + "ĠoÄį i", + "- б", + "e lerden", + "eler den", + "elerde n", + "k ových", + "kov ých", + "kový ch", + "Ġİz mir", + "สม าà¸Ĭ", + "lad atel", + "Ġ æ»", + "Ġæ »", + "éĶĢ åĶ®", + "ĠдоÑģлÑĸд женнÑı", + "ĠлÑĸ каÑĢ", + "ĠлÑĸка ÑĢ", + "ĠлÑĸк аÑĢ", + "Ġодна ко", + "ĠV ác", + "Ġ è«", + "Ġè «", + "é̲ è¡Į", + "以 å¤ĸ", + "é³ ¥", + "Ġ ÙĨج", + "ĠÙĨ ج", + "ĠbaÅŁ kan", + "ĠbaÅŁka n", + "ĠbaÅŁk an", + "Ġopat ÅĻenÃŃ", + "ا رش", + "ار Ø´", + "ض اÙ쨩", + "ضا Ù쨩", + "ãĤ¹ ãĥ¬", + "ή ν", + "ÄĽ tÃŃ", + "ÄĽt ÃŃ", + "ว ย", + "Ġرس ÙĪÙĦ", + "ÅĻ ich", + "ÅĻi ch", + "ĠpÅĻ ih", + "ĠpÅĻi h", + "ÑĮ ми", + "çĦ¶ èĢĮ", + "Ġth ẳng", + "l amaz", + "la maz", + "lam az", + "lama z", + "ÙĢ ÙĢÙĢ", + "ÙĢÙĢ ÙĢ", + "Ġì°¸ ìŬ", + "ĠÙĨÙĪ Ø´ØªÙĩ", + "ĠÙĨÙĪØ´ تÙĩ", + "ĠÑģÑĤ ек", + "ãģ® ãģ¿", + "ĠÙĪ Ø§ÙĦع", + "ĠÙĪØ§ÙĦ ع", + "ĠÙĪØ§ ÙĦع", + "æķ ¢", + "à¥Ģà¤Ĥ ,", + "ÐŀÑģ нов", + "им оÑģÑĤи", + "имо ÑģÑĤи", + "ĠÄĮesk á", + "ĠÄĮes ká", + "Ñĸ Ñĩний", + "ÑĸÑĩ ний", + "าม ารà¸ĸ", + "ekk ür", + "Âł h", + "ι κη", + "ικ η", + "Ġتع ÛĮÛĮÙĨ", + "к оÑģÑĤÑĸ", + "ко ÑģÑĤÑĸ", + "ĠMust afa", + "Ġì¦ ī", + "ãģ§ ãģĤãĤĬ", + "ãģ§ãģĤ ãĤĬ", + "å·¥ ä¸ļ", + "ov ÃŃd", + "ovÃŃ d", + "ÐĿ о", + "Ġس پس", + "Ġسپ س", + "Ú¯ÛĮ رد", + "Ú¯ÛĮر د", + "Ġп едагог", + "Ġ کارÛĮ", + "ĠÚ© ارÛĮ", + "Ġکار ÛĮ", + "ĠÑĪ ÑĤÑĥ", + "ĠÑĪÑĤ Ñĥ", + "æĮ Ĥ", + "Ø¢ Ùħد", + "Ø¢Ùħ د", + "羣 æĺ¯", + "Ġ ابت", + "Ġا بت", + "Ġاب ت", + "Ġرئ ÛĮس", + "Ġد ÛĮÙĨ", + "ĠدÛĮ ÙĨ", + "ÏĪ Îµ", + "Ġse zon", + "Ġsez on", + "Ġ çĨ", + "Ġç Ĩ", + "स न", + "ãĥ» ãĤ¢", + "Ġ åħŃ", + "Ġåħ Ń", + "Ġ è±", + "Ġè ±", + "Ġìłľ 목", + "ĠÙħ عد", + "ĠÙħع د", + "ĠÙģ ÙĤد", + "ĠÙģÙĤ د", + "éĤ Ĭ", + "Ω Σ", + "Ġ å¡", + "Ġå ¡", + "Ġob vyk", + "ĠìĿ´ ëłĩê²Į", + "ĠбоÑĢ Ð¾ÑĤÑĮ", + "Û² Û±", + "Ġ á»ijng", + "Ġá» ijng", + "è¯ Ĺ", + "Ġ ÄIJá»iji", + "ĠÄIJ á»iji", + "ĠбеÑĢез нÑı", + "Ġs oÄŁ", + "Ġso ÄŁ", + "Ġ ï¾į", + "Ġï¾ į", + "ãĤĴ ãģ¤", + "ãģĹ ãĤĥ", + "еÑĢ ÐµÑĩ", + "еÑĢе Ñĩ", + "ãĢĢ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ãĢĢãĢĢĠ ãĢĢĠãĢĢĠãĢĢ", + "æĪ ª", + "ĠاÙĦسعÙĪØ¯ ÙĬØ©", + "ĠëĤ¨ ìŀIJ", + "ĠAng iosper", + "???????? ????????", + "Ġpr ům", + "Ġprů m", + "ĠплоÑī ад", + "Ġ ÏĦÏģα", + "ĠÏĦ Ïģα", + "д аÑİÑĤ", + "да ÑİÑĤ", + "Ġsı nav", + "Ġsın av", + "Ġm ặc", + "æ°´ å¹³", + "Ġви глÑı", + "Ġвиг лÑı", + "Ġn ást", + "Ġná st", + "Ġnás t", + "ĠобÑĭ Ñĩ", + "ĠìĿ´ìķ¼ ê¸°", + "ë¹ Ľ", + "ĠB aÄŁ", + "ĠBa ÄŁ", + "ĠاÙĦØ« اÙĦØ«", + "Ġser vis", + "Ġserv is", + "Ġservi s", + "Ġ 룬", + "ĠëŁ ¬", + "ом ина", + "ί θ", + "Ġ Ấ", + "ĠẠ¤", + "ê²½ 기", + "Ġì¡ ¸", + "ี à¸ļ", + "Ġà¤ĺ à¤Łà¤¨", + "Ġ à¸Ļาà¸ĩ", + "Ġà¸Ļ าà¸ĩ", + ". Îł", + "ìķ ķ", + "r ün", + "Ġon ların", + "Ġonları n", + "Ġonlar ın", + "Ġзб ÑĸлÑĮÑĪ", + "à¹ģ à¸Ł", + "ĠìŬ 기", + "Ġ ëĮĢíijľ", + "ĠëĮĢ íijľ", + "ĠÑģи лÑĥ", + "ĠÑģил Ñĥ", + "à¹Ĥ à¸Ľ", + "Ġت ÙĤد", + "ĠتÙĤ د", + "ĠÐŁ ом", + "ĠÐŁÐ¾ м", + "ĠмаÑģ ла", + "Ġ ìĺģìĥģ", + "Ġìĺģ ìĥģ", + "н ение", + "не ние", + "нен ие", + "λα μβ", + "ĠB yl", + "ĠBy l", + "æĬ µ", + "æİ ª", + "Ġκαθ ÏİÏĤ", + "m ızı", + "æĸ° çļĦ", + "éĩį è¤ĩ", + "ั à¸Ľ", + "çŃ Ĩ", + "ĠÑĤ ка", + "ĠзнаÑĩ еннÑı", + "Ġзна ÑĩеннÑı", + "л аÑĤи", + "ла ÑĤи", + "лаÑĤ и", + "Ġv liv", + "Ġvl iv", + "ÐIJ н", + "ĠÚĨ اپ", + "ĠпиÑĤ анÑĮ", + ": ï½ī", + "æķĻ æİĪ", + "Ġì¹ľ 구", + "Ġtr ao", + "Ġtra o", + "à¥įयà¤ķ त", + "ุà¸Ħ à¸Ħล", + "ĠرÙĪ Ø´ÙĨ", + "ĠرÙĪØ´ ÙĨ", + "ĠعÙĦÙĬ Ùĩا", + "ĠعÙĦÙĬÙĩ ا", + "ãĢģ ãģĦ", + "ëħĦ ìĹIJ", + "éĢ Ĩ", + "Ġмаг аз", + "ï¾ŀ ï¾ŀ", + "Ġs ice", + "Ġsi ce", + "Ġsic e", + "âĢĻ te", + "âĢĻt e", + "ĠاÙĦÙĦ غة", + "á u", + "èĩª 身", + "Ġng Å©", + "ĠÑģк ладÑĥ", + "ĠÑģклад Ñĥ", + "Ġz ru", + "Ġtr uy", + "Ġ ilan", + "Ġi lan", + "Ġil an", + "ĠÙ¾ اÛĮÙĩ", + "ĠپاÛĮ Ùĩ", + "Ġپا ÛĮÙĩ", + ": :::::::::::::", + ":: ::::::::::::", + ":::: ::::::::::", + ":::::: ::::::::", + ":::::::: ::::::", + "::: :::::::::::", + "::::: :::::::::", + "::::::: :::::::", + "::::::::: :::::", + ":::::::::: ::::", + "::::::::::: :::", + ":::::::::::: ::", + "::::::::::::: :", + "f ak", + "fa k", + "ÑĤ еÑħ", + "ÑĤе Ñħ", + "Ġt aky", + "Ġta ky", + "Ġtak y", + "Ġìĸ¸ ìĸ´", + "ed enÃŃ", + "eden ÃŃ", + "ede nÃŃ", + "Ġà¤ļ लत", + "Ġà¤ļल त", + "Ġë°° ìļ°", + "Ġjmé no", + "ĠÙĦ Ø£ÙĨ", + "ĠÙĦØ£ ÙĨ", + "α νά", + "αν ά", + "к ÑĥлÑĮ", + "кÑĥ лÑĮ", + "кÑĥл ÑĮ", + "ĠØŃÙģ Ø¸", + "ĠآزÙħ ÙĪÙĨ", + "иÑĤелÑĮ нÑĭе", + "ĠÐŀ лекÑģанд", + "èį £", + "Ġà¤ľà¤¬ à¤ķ", + "Ġr odi", + "Ġro di", + "Ġrod i", + "Ġبرخ ÙĪØ±Ø¯", + "Ġhaf ta", + "Ġhaft a", + "λ ικά", + "λι κά", + "λικ ά", + "à¸ķ à¸Ļ", + "ĠбеÑĢ ÐµÐ³", + "αν δ", + "- С", + "Ġprav idel", + "ĠбÑĸ лÑı", + "ĠбÑĸл Ñı", + "íĴ į", + "ĠпÑĢед ÑĥÑģ", + "ĠмÑĥ ниÑĨип", + "åĮĸ åѦ", + "ĠتÙħ اس", + "Ġà¤ī ल", + "Ðĵ Ðŀ", + "غ ر", + "r adan", + "ra dan", + "rad an", + "rada n", + "ĠëĤĺ ìĺ¤", + "è¨ Ĥ", + "à¹Ģà¸ĺ à¸Ń", + "âĢĮ سÛĮ", + "âĢĮس ÛĮ", + "ĠобÑıз аÑĤелÑĮно", + "ĠобÑıзаÑĤелÑĮ но", + "о ÑĤе", + "оÑĤ е", + "à¹Į à¸Ĭ", + "ç͍ çļĦ", + "Ġalt ın", + "Ġaltı n", + "ĠÑģоÑĤ ÑĢÑĥд", + "Ñĸ нки", + "Ñĸн ки", + "озмож но", + "Î IJ", + "ë¹ Į", + " ķ", + "ĠÑĤ оÑĩно", + "ĠÑĤо Ñĩно", + "ĠÑĤоÑĩ но", + "Ġj men", + "Ġjm en", + "اÙĦ ÛĮا", + "اÙĦÛĮ ا", + "èĪ į", + "ch odu", + "cho du", + "chod u", + "ê³ ¤", + "ick ém", + "ické m", + "ĠÙħ ÙĪØ±", + "ĠÙħÙĪ Ø±", + "ãĥª ãĥ³ãĤ¯", + "ãĥªãĥ³ ãĤ¯", + "Ġa ÅŁam", + "ĠaÅŁ am", + "Ġ иÑĤ", + "Ġи ÑĤ", + "Ġन य", + "Ġ μο", + "Ġμ ο", + "éķ ľ", + "ĠبÙĨ ابر", + "ĠبÙĨا بر", + "Ġت خصص", + "Ġส à¸ŀ", + "ĠпÑĢоÑĦеÑģ Ñģи", + "Ġp uan", + "Ġpu an", + "ĠÙ쨱 ÙħاÙĨ", + "ĠÙ쨱Ùħ اÙĨ", + "ëĮĢ íļĮ", + "Ġп ÑıÑĤ", + "ĠÙħ ÙĪØ¨", + "ĠÙħÙĪ Ø¨", + "ĠvÄĽ ku", + "Ġ ëĥ", + "Ġë ĥ", + "ec ký", + "eck ý", + "ĠìĪĺ ëıĦ", + "Ġth ao", + "Ġtha o", + "Ġk apat", + "Ġka pat", + "Ġkap at", + "ĠзаÑħ воÑĢÑİ", + "Ġ åħī", + "Ġåħ ī", + "ر اÙĨÛĮ", + "راÙĨ ÛĮ", + "را ÙĨÛĮ", + "éĢł æĪIJ", + "ĠÑģв Ñĸй", + "ĠдоÑģ иÑĤÑĮ", + "Ġmil yar", + "Ġener ji", + "Ġenerj i", + "Ġк ип", + "Ġки п", + "Ġì¢ĭ ìķĦ", + "Ġب Ø¥", + "ê²Į ìĭľ", + "ĠL ưu", + "ĠÙħÙĨظ ÙĪØ±", + "Ïī μά", + "ζ ί", + "ım da", + "Ġ ìĿ´ë¥¼", + "ĠìĿ´ 를", + "๠Ĵ", + "Ġв важ", + "Ġвв аж", + "Ġga zet", + "Ġgaze t", + "Ġgaz et", + "à¥įत न", + "à¹īำ หà¸Ļ", + "åľŁ åľ°", + "Ġसद स", + "ت بة", + "تب Ø©", + "Ġpo ÄįÃŃta", + "Ġìĭľ ìĬ¤íħľ", + "ร à¸Ħ", + "Ġed ecek", + "ĠتØŃ ÙĦÛĮÙĦ", + "æĮī çħ§", + "åĿ ª", + "Ġê·¸ ê°Ģ", + "ت ÙĩÙħ", + "تÙĩ Ùħ", + "Ġб аж", + "Ġба ж", + "ا Ù쨹", + "اÙģ Ø¹", + "éĢļ 常", + "ĠТ и", + "γ νÏī", + "ì¹ Ļ", + "Ġznam ená", + "ï¼¼ ï¼¼", + "α ÏĢÏĮ", + "åĨĻ çľŁ", + "Ġ ï¼¼Ċ", + "Ġï¼¼ Ċ", + "åĬł å·¥", + "èĤ¡ä»½ æľīéĻIJåħ¬åı¸", + "Ñı ÑĤий", + "ÑıÑĤ ий", + "ÑıÑĤи й", + "Ġh âl", + "Ġç ab", + "Ġça b", + "ĠØŃ اضر", + "P ÅĻ", + "ĠاÙĦ تÙĤ", + "ĠاÙĦت ÙĤ", + "ξ ηÏĤ", + "ξη ÏĤ", + "б е", + "Ġkh ám", + "Ġkhá m", + "Ġ âĮĴ", + "Ġâ ĮĴ", + "Ġ éķ¿", + "Ġéķ ¿", + "Ġ â̦Ċ", + "Ġâ̦ Ċ", + "द म", + "ĠSt udi", + "ĠStud i", + "Ġk odu", + "Ġko du", + "Ġkod u", + "Ġkom unik", + "Ġkomun ik", + "Ġkat kı", + "n ete", + "ne te", + "net e", + "Ġr apor", + "Ġrap or", + "Ġra por", + "éĨ ´", + "ãĤī ãģĽ", + "ĠнеÑģк олÑĮ", + "Ġhá»į p", + "ï¿£  ̄ ̄", + " ̄ ̄ ï¿£", + "º ¼", + "è£ Ĥ", + "ед ÑĮ", + "Ġا ÙĦاØŃ", + "ĠاÙĦ اØŃ", + "l adık", + "la dık", + "lad ık", + "ladı k", + "Ġfot oÄŁraf", + "æĹ¥ ãģ®", + "ĠØŃ اÙĦت", + "ĠØŃاÙĦ ت", + "ĠØ« ÙĦاث", + "а ÑĤов", + "аÑĤ ов", + "аÑĤо в", + "ey se", + "Ġê°IJ ìĤ¬", + "á že", + "áž e", + "Ġн ада", + "Ġна да", + "Ġнад а", + "Ġà¤ķ हन", + "Ġà¤ķह न", + "Ġ ãĥĿ", + "Ġãĥ Ŀ", + "ãģ« ãģĤãĤĭ", + "ãģ«ãģª ãģ£ãģ¦", + "ÙĪ Ø¯Ùĩ", + "ÙĪØ¯ Ùĩ", + "Ġpo Å¡k", + "太 éĺ³åŁİ", + "ç»ı éªĮ", + "æĴŃ æĶ¾", + "Ġma jet", + "Ġmaj et", + "Ñħ о", + "ĠÑĤ еÑģÑĤ", + "ĠÑĤе ÑģÑĤ", + "ï¼ı Ċ", + "Ïĥε ÏĦε", + "ĠТ омÑĥ", + "ĠТо мÑĥ", + "ĠТом Ñĥ", + "Ùİ ØŃ", + "ĠìŀĪ ìľ¼ë©°", + "Ġза знаÑĩ", + "éļ IJ", + "Ġд ÑĸÑĹ", + "ĠдÑĸ ÑĹ", + "к ÑĤив", + "кÑĤ ив", + "кÑĤи в", + "ÙĪ ÙģÙĬ", + "ÙĪÙģ ÙĬ", + "Ġt á»Ŀ", + "Ġtá» Ŀ", + "à¸¹à¸Ľ à¹ģà¸ļà¸ļ", + "ĠÑĢ ÐµÐ´Ð°Ðº", + "ĠÑĢед ак", + "Ġa teÅŁ", + "Ġat eÅŁ", + "Ġate ÅŁ", + "Ġkh iá»ĥn", + "Ġkhi á»ĥn", + "ü ny", + "ün y", + "ี ยà¸ģ", + "ีย à¸ģ", + "ĠÑĩа Ñīе", + "Ġt uy", + "Ġtu y", + "γ Ïīν", + "γÏī ν", + "ร à¸Ńà¸ļ", + "Ġtr ùng", + "à¹ģà¸Ĺ à¸Ļ", + "Ġα κÏĮ", + "Ġακ ÏĮ", + "ĠÐĴеÑĢ Ñħов", + "à¹ĥ à¸Ļส", + "à¹ĥà¸Ļ ส", + "ãĢģ ä½ķ", + "åĩ ¦", + "Ġ ç»ı", + "Ġç» ı", + "æ¨ ĵ", + "اÙĨÚ¯ ÙĦÛĮسÛĮ", + "Ġ lepÅ¡ÃŃ", + "Ġlep Å¡ÃŃ", + "Ġ å¼Ģå§ĭ", + "Ġå¼Ģ å§ĭ", + "éĻ º", + "ĠÑĩ еÑĤÑĭ", + "ĠÑĩеÑĤ Ñĭ", + "ĠС еÑĢ", + "оÑİ Ð·", + "Ġx ung", + "Ġxu ng", + "åĵģ çīĮ", + "Ġìĥģ íĥľ", + "ĠÙĨ صب", + "ĠÙĨص ب", + "ĠÑĩ омÑĥ", + "Ġتر Ú©ÛĮ", + "Ġترک ÛĮ", + "- ли", + "o vÃŃ", + "ov ÃŃ", + "Ġا ÙĨج", + "ĠاÙĨ ج", + "çµ ¡", + "Ġت ÙĪØµ", + "ĠتÙĪ Øµ", + "Ġ ì¿ł", + "Ġì ¿ł", + "Ġvar sa", + "Ġva rsa", + "Ġvars a", + "ĠÑĢаз ÑĢабоÑĤ", + "à¸Ĥ à¸Ńà¸ĩà¸Ħ", + "à¸Ĥà¸Ńà¸ĩ à¸Ħ", + "éŃ Ĥ", + "Ġà¤Ĭ पर", + "æĿ¥ 说", + "ĠÑĨенÑĤ ÑĢалÑĮ", + "ĠÑĨенÑĤÑĢ Ð°Ð»ÑĮ", + "ĠÑĨенÑĤÑĢа лÑĮ", + "ĠTak ım", + "Ġon lar", + "Ġسر عت", + "好 åĥı", + "Ġbu á»ķi", + "ĠÐij ел", + "Âł c", + "Ø£ ت", + "à¸Ĥ à¸ĵะ", + "ãģ« åĩº", + "Ġ+ **************", + "ÏĦη κε", + "ا جر", + "اج ر", + "Ġ â̲", + "ĠâĢ ²", + "ãĥ¼ ãĥ¬", + "ãĥ¼ãĥ ¬", + "é¥ Ń", + "Ġج ÙĦس", + "ĠجÙĦ س", + "Ġب ستÙĩ", + "Ġبس تÙĩ", + "ว าà¸ĩ", + "Ġ βά", + "Ġβ ά", + "Ġа меÑĢикан", + "ĠPr emi", + "ĠPre mi", + "ĠPrem i", + "m ae", + "ma e", + "ĠÑģ ÑĢеди", + "ĠÑģÑĢед и", + "Ạł", + "Ġв ÑĢед", + "ãĢĤ èĢĮ", + "åĴ ²", + "Ġê³µ ê°ľ", + "èĤ ¥", + "з виÑĩай", + "Ġpro cent", + "Ġproc ent", + "и лоÑģÑĮ", + "ил оÑģÑĮ", + "ило ÑģÑĮ", + "श न", + "é łģ", + "éł ģ", + "е кÑĤи", + "ек ÑĤи", + "екÑĤ и", + "د اشت", + "دا شت", + "íķĻ íļĮ", + "ãĢĢ ãĢĢãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢĠãĢĢ ĠãĢĢ", + "ĠÙħد ÙĬÙĨØ©", + "िल न", + "Ġ èĹ", + "Ġè Ĺ", + "м иÑĢ", + "ми ÑĢ", + "Ġн оÑĢ", + "Ġно ÑĢ", + "Ġ íķĺì§Ģ", + "Ġíķĺ ì§Ģ", + "в еÑī", + "ве Ñī", + "nÄĽ m", + "е ÑĢами", + "еÑĢ Ð°Ð¼Ð¸", + "еÑĢа ми", + "Ġpra cov", + "Ġprac ov", + "ĠبÙĬ اÙĨات", + "ĠÏĥ Ïįν", + "ĠÏĥÏį ν", + "Ġج ذ", + "ãģĦ ãģ§", + "ĠB ÃŃ", + "è± Ĩ", + "Ġh mot", + "Ġhm ot", + "il eceÄŁi", + "ilece ÄŁi", + "Ġت اث", + "Ġتا Ø«", + "è´ ´", + "Ġ ê¸ī", + "Ġê¸ ī", + "Ġm ysl", + "Ġmy sl", + "Ġmys l", + "ĠìĿ´ íķ´", + "Ġ기 ëĬ¥", + "ĠТ ам", + "ĠТа м", + "ĠнаÑģ елениÑı", + "ĠM ez", + "ĠMe z", + "Ġ모 르", + "íĻĶ ë¥¼", + "ĠÙĨسخ Ùĩ", + "ĠتÙĦ ÙĪÛĮزÛĮ", + "ĠÄįerv na", + "ưỠ¡ng", + "ص ØŃ", + "ĠÑĤ ÑĢен", + "ĠÑĤÑĢ ÐµÐ½", + "Õ ¡", + "Ġce lou", + "Ġcel ou", + "Å© i", + "ìĹĨ ìĿ´", + "nÃŃ ku", + "nÃŃk u", + "Ġprogram u", + "à¥į पन", + "à¥įप न", + "Ġп ÑĢеж", + "ĠпÑĢ ÐµÐ¶", + "ĠпÑĢе ж", + "ا رب", + "ار ب", + "æľŁ éĸĵ", + "Ġ μά", + "Ġμ ά", + "ëįĶ ëĭĪ", + "ụ n", + "ĠпеÑĢ ÐµÑģÑĤ", + "ĠпеÑĢе ÑģÑĤ", + "ĠпеÑĢеÑģ ÑĤ", + "对 äºİ", + "è¿IJ è¡Į", + "ĠÑĤ ан", + "ĠÑĤа н", + "Ġ ìĤ¬ìĿ´íĬ¸", + "ĠìĤ¬ ìĿ´íĬ¸", + "ĠìĤ¬ìĿ´ íĬ¸", + "ĠQu ảng", + "ĠQuản g", + "Ġst ojÃŃ", + "Ġsto jÃŃ", + "ãĥŃ ãĥ¼", + "Ú¯ ار", + "Ġе неÑĢг", + "Ġkter ým", + "Ġkterý m", + "ĠпÑĢи мÑĸ", + "ĠпÑĢим Ñĸ", + "ĠкаÑĢÑĤ и", + "ĠкаÑĢ ÑĤи", + "Ġz engin", + "Ġzen gin", + "ï¼Į åĨį", + "Ġت رب", + "Ġتر ب", + "ĠÑĨенÑĤ ÑĢ", + "ĠÑĨен ÑĤÑĢ", + "ĠsaÄŁ lamak", + "ĠsaÄŁlam ak", + "ëĭ Ŀ", + "ãģ® åŃIJ", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "Ġs Æ¡n", + "ĠsÆ¡ n", + "z ı", + "ÑĤ аки", + "ÑĤа ки", + "ÑĤак и", + "ÄĽ stÃŃ", + "ÄĽst ÃŃ", + "Ġ à¥", + "Ġà ¥", + "é ®", + "åŁ¹ è®Ń", + "Ġ ì͍", + "ĠìĶ ¨", + "Ġbel ki", + "ĠìĿ´ 벤íĬ¸", + "ëĶĶ ìĸ´", + "Ġs Ãłn", + "ни кам", + "ник ам", + "ника м", + "a lim", + "al im", + "ali m", + "対 å¿ľ", + "ĠS á»±", + "éģĵ è·¯", + "é«ĺ æ¸ħ", + "Ġd õi", + "ĠÙĦ ÙĢ", + "Ġ èĤ¡", + "ĠèĤ ¡", + "ν ι", + "âĢŀ J", + "' nde", + "'n de", + "Îij Îĵ", + "ãģ¨ ãģªãĤĭ", + "ãģ¨ãģª ãĤĭ", + "çĪ ¸", + "ع ÙĦÛĮ", + "عÙĦ ÛĮ", + "Ïģι ÏĥÏĦ", + "ÏģιÏĥ ÏĦ", + "Ġe ÄŁit", + "ĠeÄŁ it", + "Ġзов нÑĸÑĪ", + "Ġп ÑĢим", + "ĠпÑĢ Ð¸Ð¼", + "ĠпÑĢи м", + "س Ùħبر", + "سÙħ بر", + "ĠmÄĽst ÄĽ", + "ĠÏĢεÏģι ÏĥÏĥÏĮÏĦε", + "ÐIJ Ðł", + "æĦŁ åΰ", + "Ġ문 ìĦľ", + "ãģĭ ãĤĭ", + "ÙĤÙĬ ÙĤØ©", + "ÙĤÙĬÙĤ Ø©", + "Ġв ÑĤÑĢа", + "ĠвÑĤ ÑĢа", + "Ġ à¸Ńำ", + "Ġà¸Ń ำ", + "Ñģ кÑĥÑİ", + "Ñģк ÑĥÑİ", + "د ÙĩاÛĮ", + "دÙĩ اÛĮ", + "Ġİ st", + "Ġİs t", + "ĠÐĹ Ð°Ð²", + "ĠÐĹа в", + "Ġ éĥ½", + "Ġé ĥ½", + "Ġéĥ ½", + "ÑĪ ÐµÐ¼", + "ÑĪе м", + "Ġе ÑīÑij", + "ĠÐľÐ¸Ñħ ай", + "ĠÑĥпÑĢав лениÑı", + "л еннÑĭе", + "лен нÑĭе", + "ĠzaÄį al", + "æ¡ Į", + "Ġп Ñĸз", + "л ÑıÑĤÑĮÑģÑı", + "лÑı ÑĤÑĮÑģÑı", + "лÑıÑĤÑĮ ÑģÑı", + "Ġ ìŀIJë£Į", + "ĠìŀIJ ë£Į", + "ãĢĢ ãĢĢĠ", + "ãĢĢãĢĢ Ġ", + "ĠK ral", + "ĠKr al", + "ĠKra l", + "èĪ ī", + "Ġà¤Ń व", + "Ġ Ø®Ùħ", + "ĠØ® Ùħ", + "Ġа кадем", + "Ġ isten", + "Ġis ten", + "Ġi sten", + "Ġist en", + "ĠиÑģ кÑĥÑģ", + "ĠиÑģк ÑĥÑģ", + "ĠعÙĨد Ùħا", + "Ġا ÙĦاÙħ", + "ĠاÙĦ اÙħ", + "is mus", + "ism us", + "ismu s", + "Ġayr ıntı", + "Ġ Що", + "ĠЩ о", + "ĠÙĩ ÙĪØ´", + "ĠÙĩÙĪ Ø´", + "د ÙĪØ§Ø¬", + "دÙĪ Ø§Ø¬", + "л аж", + "ла ж", + "ĠÚ©ÙĨ ار", + "Âł R", + "æĢ§ çļĦ", + "Ñģ Ñĸм", + "ÑģÑĸ м", + "ĠM üz", + "ĠMü z", + "ÑĢ Ð¾Ð²Ð¸Ñĩ", + "ÑĢов иÑĩ", + "ÑĢо виÑĩ", + "Ġ Ω", + "ĠÎ ©", + "Ġìĸ´ ëĶĶ", + "س ÙħØ©", + "سÙħ Ø©", + "Ġ ÑĢÑı", + "ĠÑĢ Ñı", + "Ġt ươi", + "Ġtư Æ¡i", + "ĠÑĢаÑģ Ñħод", + "åı° çģ£", + "ĠاÙĦ ÙĪÙĤت", + "ĠاÙĦÙĪ ÙĤت", + "بر اÛĮ", + "ĠзÑĢоб иÑĤи", + "Ġб ÑĥÑĢ", + "ĠбÑĥ ÑĢ", + "ĠÄįin nosti", + "ĠÄįinnost i", + "Ġص اØŃ", + "ĠصÙĨ عت", + "ĠصÙĨع ت", + "Ġ Ø·ÙĦ", + "ĠØ· ÙĦ", + "ξ Ïį", + "ĠtisÃŃ c", + "ĠFr ansa", + "ĠFran sa", + "ì¦ ĺ", + "è» ½", + "Ñ ĺ", + "ÏĮÏĦη ÏĦαÏĤ", + "ÏĮÏĦηÏĦα ÏĤ", + "ĠM illet", + "ĠMill et", + "ĠMil let", + "ãĢĢ ãĥ¾", + "ĠпÑĢ Ð¸ÐµÐ¼", + "ĠпÑĢи ем", + "ĠترجÙħ Ùĩ", + "Ġس ÙĪØ¯", + "ĠسÙĪ Ø¯", + "ĠsouÄįást ÃŃ", + "ÐĶ Ð¾", + "Ġtr ụ", + "è¶³ çIJĥ", + "à¸Ľ à¸ģ", + "Ġu stanov", + "ÎŁ ÎĻ", + "ÎŁÎ Ļ", + "Ðŀ н", + "Ġн еж", + "Ġне ж", + "к ог", + "ко г", + "ä¸Ģ çĤ¹", + "Ġد ÙĪØ±Ø§ÙĨ", + "ĠدÙĪ Ø±Ø§ÙĨ", + "ĠدÙĪØ± اÙĨ", + "å½± éŁ¿", + "el idir", + "eli dir", + "âĢŀ N", + "es iyle", + "esi yle", + "ÑĢем енно", + "ÑĢе менно", + "Ġilet iÅŁim", + "ม à¹Ģà¸ķ", + "以 åīį", + "ãĥĭ ãĥ¼", + "鼻 話", + "à¹Ĥ à¸ŀ", + "ov ky", + "Ġза мÑĸ", + "Ġзам Ñĸ", + "Ġव à¤ķ", + " Ļ", + "ĠвÑĸй ни", + "Ġol madıģı", + "Ġolm adıģı", + "Ġolmadı ģı", + "Ġolma dıģı", + "æ¢ ģ", + "ĠТ еп", + "ĠТе п", + "nÄĽ te", + "nÄĽt e", + "èħ ķ", + "ìĤ¬ ëĬĶ", + "m amak", + "ma mak", + "mam ak", + "Ġc iz", + "Ġci z", + "æ£ Ĵ", + "Ġ ï¼ı:", + "Ġï¼ı :", + "éģĭ åĭķ", + "ĠÙĩ ÙĨا", + "ĠÙĩÙĨ ا", + "Ġ ê°ij", + "Ġê° ij", + "ĠÙĩÙĨÚ¯ اÙħ", + "ĠuÄŁ ra", + "å½ ¦", + "Ġob jekt", + "Ġobj ekt", + "ãģ¨ ãģĻãĤĭ", + "åĽ½ åĨħ", + "ĠдеÑĢжав и", + "ĠдеÑĢж ави", + "Ġ èĮ", + "Ġè Į", + "Ġulus lararası", + "Ù £", + "Ġmut lak", + "Ġз обов", + "Ġ γεν", + "Ġγ εν", + "Ġγε ν", + "à¹Ħà¸Ł à¸Ł", + "Ġözg ür", + "íĦ ¸", + "Ġвипад кÑĥ", + "Ġà¤ķ ब", + "ĠاÙĦ خط", + "ĠاÙĦØ® Ø·", + "θη καν", + "ï¼Į æĬĬ", + "ÑıÑĤ ÑĤÑı", + "Ġolmadı ģını", + "Ġolma dıģını", + "Âłk W", + "ĠnÄĽkter ých", + "ãĥĩ ãĥ«", + "æ¤į çī©", + "μι λοÏĤ", + "ÐIJÑĢ ÑħÑĸв", + "ĠТ о", + "èĸ ¬", + "ÑģÑĤв иÑı", + "Ġ Ø®ÙĪØ§Ø³Øª", + "ĠØ®ÙĪ Ø§Ø³Øª", + "олог ÑĸÑĹ", + "ÙĪ Ø§Ùĩد", + "ÙĪØ§Ùĩ د", + "ÙĪØ§ Ùĩد", + "Ġ нак", + "Ġн ак", + "Ġна к", + "ĠкоÑĤоÑĢ ÑĥÑİ", + "Ġद à¤ķ", + "âĢŀ M", + "λ ια", + "λι α", + "æŃ ²", + "第 åĽĽ", + "à¤¾à¤ľ स", + "Ġ( «", + "Ġth ẻ", + "、 Ċ", + "ç£ ģ", + "Ġ ÙĦÙĤ", + "ĠÙĦ ÙĤ", + "Ġ ìķĶ", + "Ġìķ Ķ", + "Ġн ового", + "Ġнов ого", + "ĠìķĦ 주", + "Ġ ëIJĺìĸ´", + "ĠëIJĺ ìĸ´", + "Ġo lun", + "Ġol un", + "à ¾", + "Ġkar iy", + "Ġkari y", + "ĠØŃ سب", + "ĠØŃس ب", + "ĠìĿĺ 미", + ". Ðľ", + "Ġoz naÄį", + "ÙĦ سÙĦ", + "ÙĦس ÙĦ", + "ĠÐĴ ид", + "ĠÐĴи д", + "ë¡ľ ëĤĺ", + "à¥įà¤Ł म", + "í ľ´", + "Ġbilg isayar", + "ìĿ¸ ì§Ģ", + "Ġв ов", + "Ġво в", + "nict vÃŃm", + "nictvÃŃ m", + "า à¸Ńย", + "าà¸Ń ย", + "Ġشخص ÛĮ", + "п Ñĸон", + "æľ¬ å½ĵ", + "Ġب ÙĢ", + "ĠмаÑģ ло", + "ĠPh át", + "Ġ ба", + "Ġб а", + "алÑĮ номÑĥ", + "алÑĮно мÑĥ", + "алÑĮном Ñĥ", + "社 åĮº", + "Ġ Ò", + ": ::|", + ":: :|", + "::: |", + "ê ´", + "Ġ ä¸ĥ", + "Ġä¸ ĥ", + "ĠÙĪ Ø§ÙĦد", + "ĠÙĪØ§ÙĦ د", + "ни ке", + "ник е", + "à¸Ń ลล", + "à¸Ńล ล", + "Ġyer leÅŁ", + "Ġkom bin", + "Ġkomb in", + "u Å¡", + "Ġо ÑĤÑĢи", + "ĠоÑĤ ÑĢи", + "ä¹ Į", + "iÅŁ ti", + "Ġs óng", + "Ġsó ng", + "λ ηÏĤ", + "λη ÏĤ", + "Ġк ÑĥÑĢÑģ", + "ĠкÑĥÑĢ Ñģ", + "à¹Ī าà¸Ħ", + "à¹Īา à¸Ħ", + "Ġ ÙĬس", + "ĠÙĬ س", + "Ġ داÙħ", + "Ġد اÙħ", + "çĴ° å¢ĥ", + "Ñĩ енко", + "Ñĩен ко", + "ãĢį ãģ®", + "ĠmÃŃ sta", + "ĠmÃŃst a", + "ĠÑĦ оÑĤ", + "ĠpÅĻÃŃ zn", + "ĠÑĢ Ð°Ð·Ð°", + "ĠÑĢаз а", + "ĠÑĢа за", + "ç´ «", + "lá da", + "lád a", + "ĠÑģпеÑĨи алиÑģÑĤ", + "ĠبÛĮ ÙħارÛĮ", + "ĠبÛĮÙħ ارÛĮ", + "ĠبÛĮÙħار ÛĮ", + "Ġëĵ £", + "çĭ Ĺ", + "ÙĪ ÙĪ", + "ан ÑĸÑĤ", + "анÑĸ ÑĤ", + "ĠدÙĨ باÙĦ", + "ĠÙħجÙħÙĪØ¹ Ø©", + "ÃŃ na", + "ÃŃn a", + "ĠH alk", + "ĠHa lk", + "ĠHal k", + "á jem", + "áj em", + "enÃŃ ze", + "Ġim z", + "« ng", + "Ġ ÎķÎł", + "ĠÎķ Îł", + "ĠÙħ Ùĩد", + "ĠÙħÙĩ د", + "ìľĦìĽIJ íļĮ", + "Ġìľł íĺķ", + "ाप स", + "Ġje ž", + "ан Ñĸз", + "анÑĸ з", + "иÑĤ ай", + "иÑĤа й", + "á¿ ĸ", + "ir ler", + "irl er", + "기 ê°Ħ", + "Ġ воÑĢ", + "Ġв оÑĢ", + "Ġво ÑĢ", + "Ġ Ïİ", + "ĠÏ İ", + "Ġpo zn", + "Ġpoz n", + "Ġ ساÙĨ", + "Ġس اÙĨ", + "å ¯¿", + "å¯ ¿", + "æĸ¯ çī¹", + "Ġtu rist", + "Ġtur ist", + "ĠìŀIJ ìľł", + "à¥Ģ à¤ĸ", + "μ με", + "μμ ε", + "an sı", + "ans ı", + "ìĨĮ ëħĦ", + "Ġted avi", + "Ġtedav i", + "Ñĩ еÑģÑĤва", + "Ñĩе ÑģÑĤва", + "å£ ĵ", + "о ве", + "ов е", + "ï¼Į çľĭ", + "ĠпоÑģл Ñĥг", + "ĠпоÑģ лÑĥг", + "ĠÑĤÑĢ Ð°Ð½Ñģ", + "ĠÑĤÑĢан Ñģ", + "Ġz áz", + "Ġzá z", + "æĪ ´", + "Ġм она", + "Ġмон а", + "Ġмо на", + "ิ à¹Ģà¸Ħราะห", + "ĠÙĨ ÛĮÙħ", + "ĠÙĨÛĮ Ùħ", + "ĠìĤ¬ëŀĮ ìĿ´", + "a hat", + "ah at", + "aha t", + "Ïħ κ", + "ĠоÑĤ каз", + "ĠоÑĤк аз", + "ĠÐĴолод ими", + "ĠС к", + "िà¤ķ त", + "å¦ ĸ", + "Ġëĭ¤ìļ´ ë¡ľëĵľ", + "ìĺģ ìĥģ", + "Ġन à¤Ī", + "c ete", + "ce te", + "ĠгÑĢи б", + "ĠгÑĢ Ð¸Ð±", + "ece ÄŁini", + "eceÄŁi ni", + "Ġç oÄŁu", + "ĠçoÄŁ u", + "ĠмаÑĤеÑĢи ала", + "ĠмаÑĤеÑĢиал а", + "ứ t", + "Ġz aten", + "Ġza ten", + "Ġzat en", + "ĠF RA", + "ĠFR A", + "ĠBir liÄŁi", + "Ġs itesi", + "Ġsit esi", + "Ġsite si", + "Ġsites i", + "Ġ åĶ", + "Ġå Ķ", + "ĠÐĴ ол", + "ĠÐĴо л", + "Âł PS", + "ÂłP S", + "ा लत", + "ाल त", + "Ġ баÑĩ", + "Ġб аÑĩ", + "Ġба Ñĩ", + "алÑĸ заÑĨÑĸÑĹ", + "алÑĸз аÑĨÑĸÑĹ", + "ĠS lov", + "ĠSl ov", + "ĠSlo v", + "ç³ ĸ", + "ĠговоÑĢ Ð¸ÑĤ", + "Ġв вед", + "Ġвв ед", + "ุà¸ķ à¸ļà¸Ńล", + "ãģĨ ãģ¡", + "Ġyap tık", + "Ġyaptı k", + "Ġìłķ ì¹ĺ", + "ê°ľ 를", + "à¥Ī सल", + "à¥Īस ल", + "ج ÙĬÙĦ", + "جÙĬ ÙĦ", + "ĠзаÑģÑĤоÑģ ов", + "è¿ «", + "ĠKur ul", + "ĠNas ıl", + "ĠнапÑĢÑı м", + "Ġ ä½į", + "à¹Į à¸ļ", + "Ġ éģĵ", + "Ġéģ ĵ", + "Ġни же", + "Ġниж е", + "Ġк оÑģÑĤ", + "Ġко ÑģÑĤ", + "ĠкоÑģ ÑĤ", + "ظ Ùĩر", + "ظÙĩ ر", + "Т а", + "ì§ Ŀ", + "Ġön ünde", + "ж Ñĸ", + "Ġاجر اÛĮ", + "Ġاجرا ÛĮ", + "ĠоÑĢган Ñĸв", + "ĠоÑĢганÑĸ в", + "v ise", + "vis e", + "vi se", + "Ġ ìĿĦ", + "ĠìĿ Ħ", + "à¸ķ รà¸ĩ", + "à¸ķร à¸ĩ", + "Ú©ÙĨ ÙĪÙĨ", + "Ġdlou ho", + "Ġdlouh o", + "Ðŀ ÐĿ", + "Ġ ìľ¡", + "Ġìľ ¡", + "缮 æłĩ", + "ë¯ Ģë¡ľ", + "ï¼ıï¼ıï¼ıï¼ı ï¼ıï¼ıï¼ıï¼ı", + "ĠпоÑĩ емÑĥ", + "æķħ äºĭ", + "ÑĤ еÑģÑĮ", + "ÑĤе ÑģÑĮ", + "ĠÙĤ ÙĦب", + "ĠÙĤÙĦ ب", + "Ġت جÙĩ", + "Ġتج Ùĩ", + "i lendir", + "il endir", + "ilen dir", + "Ġи гÑĢа", + "Ġиг ÑĢа", + "ĠÐĶ Ð¾Ð½", + "ĠÐĶо н", + "ĠpÅĻÃŃ jem", + "è¦ Ĩ", + "С п", + "- ни", + "on se", + "ons e", + "и ной", + "ин ой", + "о Ñĩного", + "оÑĩ ного", + "оÑĩно го", + "ا ساÙĨ", + "اس اÙĨ", + "ĠполÑĥÑĩ иÑĤÑĮ", + "ĠполÑĥ ÑĩиÑĤÑĮ", + "ÑĤ ап", + "ÑĤа п", + "ĠL ý", + "ĠÃĤ u", + "Ġh üc", + "e bek", + "eb ek", + "ebe k", + "ĠY ayın", + "æĹ ĭ", + "ัà¸Ļ à¸Ĺร", + "ัà¸Ļà¸Ĺ ร", + "Ġвикон ав", + "Ġвико нав", + "Ġs ông", + "à¥ģ à¤ľ", + "à¥ģठľ", + "ĠÐĹ Ð°Ð³", + "ĠÐĹа г", + "¤ ëĭ¤", + "Ġc Å©", + "ĠÚ¯ رÙħ", + "Ġگر Ùħ", + "ä¼ ı", + "ãģ« ãģĻãĤĭ", + "- Ф", + "Ġ ÙĤÙħ", + "ĠÙĤ Ùħ", + "Ġo lacaÄŁ", + "Ġol acaÄŁ", + "æĿ¥ äºĨ", + "æĭĽ èģĺ", + "ĠÐĿаÑģ еленнÑı", + "Ġ ìĺģìĸ´", + "Ġìĺģ ìĸ´", + "Ġ æŃ¤", + "ĠæŃ ¤", + "Ġب دÙĨ", + "Ġبد ÙĨ", + "Û² Û¸", + "оÑĢ Ð°ÑĤив", + "оÑĢа ÑĤив", + "ï¼ ³", + "Ġneby lo", + "Ġnebyl o", + "ĠÑĥ ÑĩиÑĤ", + "ĠÑĥÑĩ иÑĤ", + "æĿ ľ", + "Ġд анÑĸ", + "Ġда нÑĸ", + "Ġдан Ñĸ", + "Ġsp otÅĻeb", + "Ġspot ÅĻeb", + "ãĥ¼ ãĥĨãĤ£", + "ãĥ¼ãĥĨ ãĤ£", + "ен нÑĥÑİ", + "ê¹Į ìļĶ", + "v em", + "ve m", + "P ÅĻÃŃ", + "PÅĻ ÃŃ", + "Ġy andan", + "Ġyan dan", + "é¼ ĵ", + "Ġدست ÙĪØ±", + "Ġدس تÙĪØ±", + "Ġhaf if", + "h ů", + "Ġv áž", + "Ġvá ž", + "ĠìķĦ ì§ģ", + "Ùı ر", + "Ġ ла", + "Ġл а", + "ëł ī", + "า à¸Ľà¸£à¸°", + "à¸²à¸Ľ ระ", + "lık lar", + "lıkla r", + "ĠÑģÑĤанд аÑĢÑĤ", + "à¸Ń à¹ĥห", + "å¥ ´", + "ĠоÑĤ п", + "âĪ ł", + "ãĥ¼ ãĥĢ", + "ãĥ¼ãĥ Ģ", + "ch áze", + "cház e", + "Ġê·¸ ëłĩê²Į", + "Ġê·¸ëłĩ ê²Į", + "os tel", + "ost el", + "oste l", + "Ġгал Ñĥз", + "â k", + "еÑĨ ÑĤ", + "ëŀij ìĬ¤", + "ĠÄį ist", + "ĠÄįi st", + "ÑĢ Ð°Ð½Ð°", + "ÑĢа на", + "ÑĢан а", + "Ġv ững", + "Ġvữ ng", + "Ġs eni", + "Ġse ni", + "Ġsen i", + "Ġg óc", + "Ġgó c", + "ÏĨ ÏĮ", + "á nu", + "án u", + "Ġ öt", + "Ġö t", + "Ġs óc", + "Ġsó c", + "ãģĦ ãģ®", + "ĠÑģк лада", + "ĠÑģклад а", + "ÐIJÑĢÑħÑĸв овано", + "ĠìĿ´ ë²Ī", + "ãĤ¹ ãģ®", + "il ebilir", + "ile bilir", + "ï½Ģ ãĥ½", + "ีย à¸į", + "Ġκα á½¶", + "Ġë ¯¿", + "æĽ´ å¤ļ", + "ıs ının", + "ısını n", + "ĠGi ám", + "ĠGiá m", + "æŃ£ å¼ı", + "Ïĥ μÏĮ", + "Ïĥμ ÏĮ", + "Ġarch it", + "Ġarc hit", + "Ġ ï½²", + "Ġï½ ²", + "Ñĩ аÑİÑĤÑģÑı", + "Ñĩа ÑİÑĤÑģÑı", + "ÑĩаÑİÑĤ ÑģÑı", + "ë²Ħ ì§Ģ", + "ãĤ¤ ãĥ¤", + "é«ĺ æł¡", + "è¨ ³", + "ĠÙħ ÛĮÚ©", + "ĠÙħÛĮ Ú©", + "Ġ æĥħ", + "Ġæĥ ħ", + "Ġ pha", + "Ġp ha", + "Ġph a", + "太 éĥİ", + "à¸ŀระ ราà¸Ĭ", + "ÙĤ ÙĬØ©", + "ÙĤÙĬ Ø©", + "ĠÑĥ лÑĥÑĩ", + "ĠÑĥл ÑĥÑĩ", + "ÑģÑĤв ÑĥеÑĤ", + "ÑģÑĤвÑĥ еÑĤ", + "Ġk eÅŁ", + "Ġke ÅŁ", + "é«ĺ çŃī", + "Ġs Ỽm", + "Ïģ κε", + "Ïģκ ε", + "μ οÏģ", + "μο Ïģ", + "Ġzá stup", + "o zÃŃ", + "oz ÃŃ", + "Ġm ili", + "Ġmil i", + "Ġmi li", + "Ġмог ли", + "Ġз ÑĢозÑĥм", + "Ġباش ÛĮد", + "Ġak ci", + "Ġд ÑĢа", + "ĠдÑĢ Ð°", + "Ġα Ïģι", + "ĠαÏģ ι", + "ãģĭ ãĤīãģ®", + "ãģĭãĤī ãģ®", + "å¯ Ĵ", + "ĠZ aman", + "ĠZa man", + "ĠZam an", + "ĠÑĸ де", + "ĠÑĸд е", + "Ġ ãĢĢĠ", + "ĠãĢĢ Ġ", + "Ġk lu", + "Ġkl u", + "ak lı", + "à¥ĩ à¤ļ", + "à¥ĩठļ", + "ĠÑģвоб од", + "س اÙħ", + "Ġ ов", + "Ġо в", + "Ġu byt", + "Ġub yt", + "éĩĩ ç͍", + "Ġdavran Ä±ÅŁ", + "ĠnabÃŃ zÃŃ", + "ĠÐij Ñĥд", + "Ġ Ïī", + "ĠÏ ī", + "ĠاÙĦ رØŃ", + "ĠاÙĦر ØŃ", + "ั à¸ķà¸Ļ", + "ัà¸ķ à¸Ļ", + "и ме", + "им е", + "Ġت ÙĦÙĥ", + "ĠتÙĦ Ùĥ", + "ت Ùħع", + "تÙħ ع", + "Ġад миниÑģÑĤÑĢа", + "Ġzor unda", + "Ġzorun da", + "ĠÙĨ سبة", + "ĠÙĨسب Ø©", + "ĠÙĨس بة", + "ĠصÙĨع تÛĮ", + "ĠصÙĨعت ÛĮ", + "ĠÑĦÑĥн да", + "éı ¡", + "Ġpo tom", + "Ġpot om", + "Ġп ÑĢеÑģÑĤ", + "ĠпÑĢ ÐµÑģÑĤ", + "ĠпÑĢе ÑģÑĤ", + "ĠпÑĢеÑģ ÑĤ", + "Ġsı rada", + "Ġsır ada", + "Ġsıra da", + "Ġ ayar", + "Ġa yar", + "Ġay ar", + "ا ÙĤÙĦ", + "اÙĤ ÙĦ", + "æº ª", + "ĠØ¢ÙĤ اÛĮ", + "ĠпеÑĢе Ñħод", + "ĠпÑĢакÑĤи ÑĩеÑģки", + "é» ĥ", + "ĠÑĥ Ñħод", + "ĠÑĥÑħ од", + "ĠÙħ تÙģ", + "ĠÙħت Ùģ", + "Ġsiyas i", + "Ġпо ÑĤен", + "ĠпоÑĤ ен", + "Ùİ Ùģ", + "ĠÐĽ Ñĥ", + "ĠконÑĤÑĢ Ð¾Ð»ÑĮ", + "ĠÑģказ аÑĤÑĮ", + "à¥Ģ à¤ķरण", + "à¥Ģà¤ķ रण", + "åħ¨ çIJĥ", + "Û² Û¶", + "Ġt oto", + "Ġto to", + "Ġtot o", + "Ġ ÙĪØ¯", + "ĠÙĪ Ø¯", + "ãĤ¿ãĤ¤ ãĥĹ", + "åľ į", + "å¼ķ ç͍", + "ï¼ £", + "èĬ ¸", + "ä»ĭ ç»į", + "ĠÑĤеÑĢÑĢиÑĤоÑĢ Ð¸Ð¸", + "æĹ¥ ãģ«", + "m ÃŃt", + "mÃŃ t", + "am ız", + "amı z", + "ìĿ´ ìĸ´", + "Ġyar Ä±ÅŁ", + "Ġyarı ÅŁ", + "Ġg üc", + "Ġgü c", + "Ġ Ïĩα", + "ĠÏĩ α", + "ัà¸Ļย ายà¸Ļ", + "ãĤĴ è¡Į", + "Ġm illi", + "Ġmill i", + "Ġmil li", + "Ġmi lli", + "Ġ çı¾", + "Ġçı ¾", + "K dyž", + "m azon", + "ma zon", + "maz on", + "ë³´ ëĤ´ê¸°", + "ĠÑĤÑĢÑĥ дов", + "ĠÑĤÑĢÑĥд ов", + "é£ ¾", + "Ġви ник", + "Ġвин ик", + "ĠÙĪØ² ارت", + "ĠÙĪØ²Ø§Ø± ت", + "éĩĮ çļĦ", + "м аз", + "ма з", + "ĠR US", + "ĠRU S", + "е кÑĤÑĥ", + "ек ÑĤÑĥ", + "екÑĤ Ñĥ", + "Ġع اش", + "Ġk once", + "Ġko nce", + "Ġkon ce", + "ãĤĪãģĨ ãģ§ãģĻ", + "Ġмал ÑĭÑĪ", + "m eni", + "me ni", + "men i", + "е Ñģа", + "еÑģ а", + "ا ضÛĮ", + "اض ÛĮ", + "Ġb rat", + "Ġbr at", + "Ġbra t", + "ĠвÑĸд ноÑģ", + "θ εÏģ", + "θε Ïģ", + "ĠЧ ем", + "æij ĩ", + "ĠÙħ ادر", + "ĠÙħا در", + "ĠÙħاد ر", + "ç͍ åĵģ", + "ĠÙħØŃ اÙ쨏", + "Ġm yÅ¡", + "Ġmy Å¡", + "ج ع", + "Ġis im", + "Ġi sim", + "Ġisi m", + "æ³ Ĭ", + "ıl maz", + "ĠÎĽ α", + "å¯ ©", + "Ġay ır", + "е ними", + "ен ими", + "ени ми", + "еним и", + "à¥ĩह तर", + "åľ Ĩ", + "ãģ¾ ãģ£ãģŁ", + "çĶ¢ åĵģ", + "ĠÑĸнÑĦоÑĢма ÑĨÑĸÑĹ", + "Ġt á»§", + "Ġtá» §", + "สม à¸ļ", + "Ġst ÅĻ", + "Ġë°ľ íijľ", + "а ÑĢÑĮ", + "аÑĢ ÑĮ", + "ĠC ao", + "ĠCa o", + "Ρ ÎĻ", + "à¸ģาร à¸Ī", + "Ġпод Ñĥм", + "ä»ķ äºĭ", + "ĠÐļ ÑĢоме", + "Ġ ìĹĶ", + "ĠìĹ Ķ", + "Ġ Ñĥда", + "ĠÑĥ да", + "ĠÑĥд а", + "ĠавÑĤом аÑĤи", + "Ġ à¸Ħà¸ĵะ", + "Ġà¸Ħ à¸ĵะ", + "ĠK iÅŁ", + "ĠKi ÅŁ", + "ĠÑģоÑģÑĤоÑı ние", + "l isi", + "li si", + "lis i", + "Ġëĸ ¨ìĸ´", + "oot ball", + "Ġ íį¼", + "Ġí į¼", + "Ġ лим", + "Ġл им", + "Ġли м", + "Ġç erç", + "ÙĪÙĦ ÙĬÙĪ", + "ÙĪÙĦÙĬ ÙĪ", + "Ġs lož", + "Ġsl ož", + "Ġslo ž", + "Ġ 먼", + "Ġë¨ ¼", + "ร à¸Ńà¸ĩ", + "ÑĪ ÐµÐµ", + "ÑĪе е", + "â̦â̦â̦â̦â̦â̦â̦â̦ â̦â̦â̦â̦â̦â̦â̦â̦", + "ãģĵ ãģ¡ãĤī", + "о ÑĢÑĭ", + "оÑĢ Ñĭ", + "çĥ Ł", + "Âł F", + "а ного", + "ан ого", + "ано го", + "Ø« ÛĮر", + "çı į", + "å¸Ĥ åł´", + "vÄĽ dom", + "vÄĽd om", + "ì² ¨ë¶Ģ", + "ĠìĤ¬ ê±´", + "ï¾ Į", + "à¹ĥ à¸Ļว", + "à¹ĥà¸Ļ ว", + "Ġzvlá Å¡t", + "ÏĦ εÏħ", + "ÏĦε Ïħ", + "Ġкак ие", + "Ġка кие", + "ÏĨοÏģ ά", + "ÏĨο Ïģά", + "åĦ Ħ", + "Ġzp ÄĽt", + "íķľ íħĮ", + "Ġz vol", + "Ġzv ol", + "Ġ çĹ", + "Ġç Ĺ", + "ÑĢа нениÑı", + "ÑĢан ениÑı", + "ĠسÛĮ است", + "ĠÐļ оли", + "ĠÐļол и", + "ĠÐļо ли", + "ĠоÑĢганиз ма", + "ĠоÑĢганизм а", + "ĠÑıнва ÑĢÑı", + "Ġد ادÙĨ", + "Ġداد ÙĨ", + "п ÑĢа", + "пÑĢ Ð°", + "ï¼Į ä»ĸ们", + "ï¼Įä»ĸ 们", + "æijĺ è¦ģ", + "Ġqu ần", + "ÙĬ ÙĪÙĨ", + "ÙĬÙĪ ÙĨ", + "Ġви Ñħов", + "Âł à¹Ģà¸Ķ", + "Ġ елем", + "Ġе лем", + "eb ilecek", + "Ġд оÑĩ", + "Ġдо Ñĩ", + "Ġб лаг", + "Ġбл аг", + "Ġбла г", + "ĠÑı й", + "ad nÃŃ", + "Ġzá roveÅĪ", + "en stvÃŃ", + "âĢĮ اÙĨ", + "ãģķãĤĵ ãģ¯", + "/ |", + "ĠاÙĦع اÙħØ©", + "ĠاÙĦعاÙħ Ø©", + "éł ¼", + "Ġخدا ÙĪÙĨد", + "Ġخد اÙĪÙĨد", + "н ам", + "на м", + "ĠÑģ лиз", + "ĠÑģл из", + "æ¶ ī", + "ร ษ", + "e ÅŁtir", + "eÅŁ tir", + "ĠÙĨ دار", + "ĠÙĨد ار", + "ร าà¸Ħ", + "è¨Ģ ãĤı", + "Ġ èŃ", + "Ġè Ń", + "Ġк ÑĢиÑĤ", + "ĠкÑĢи ÑĤ", + "ĠвоздÑĥ Ñħа", + "ĠвоздÑĥÑħ а", + "Ġà¤Ĺ त", + "Ġprá vo", + "Ġpráv o", + "à¥ĭष ण", + "Ġs ắp", + "íı Ń", + "Ġص رÙģ", + "ĠراÛĮ گاÙĨ", + "ĠоÑĤ к", + "ëĨ ĵ", + "ĠÑģек ÑĢеÑĤ", + "İ n", + "on avir", + "ona vir", + "ĠV ys", + "ĠVy s", + "ĠbaÅŁ lat", + "ĠMu ham", + "ĠлиÑģÑĤ оп", + "ĠT icaret", + "ĠTi caret", + "ĠTic aret", + "Ġad landır", + "ĠÐĶ Ð¼Ð¸ÑĤ", + "Ïĥμ οÏį", + "Ïĥμο Ïį", + "ä¾ µ", + "ìĭľ ëĬĶ", + "à¹ģà¸Ľ ลà¸ĩ", + "ın ıza", + "ını za", + "ınız a", + "- г", + "и ÑĩноÑĹ", + "иÑĩ ноÑĹ", + "иÑĩно ÑĹ", + "Ñĥ ÑĢи", + "ÑĥÑĢ Ð¸", + "U Z", + "ìĽ ł", + "Ġتبد ÛĮÙĦ", + "æ º«", + "æº «", + "ĠÑĢам каÑħ", + "Ġn ét", + "Ġné t", + "æ² ¿", + "Ġroz Å¡ÃŃ", + "Ġस प", + "ĠÑĤак е", + "ĠÑĤа ке", + "ÑĢ Ð°Ñĩ", + "ÑĢа Ñĩ", + "ĠاÙĦ ÙĤد", + "ĠاÙĦÙĤ د", + "íķĻ ê³¼", + "Ñĥв аннÑıм", + "ÑĥваннÑı м", + "Ġm ám", + "Ġmá m", + "ë¡ ¯", + "á½ IJ", + "Ġet kili", + "Ġetk ili", + "Ġetkil i", + "Ġetki li", + "Ġار تÙģ", + "Ġtechn olog", + "Ġtechno log", + "Ġ ì½ĺ", + "Ġì½ ĺ", + "Ġت ÙĥÙĬÙĬÙģ", + "ĠpÅĻ ece", + "ĠpÅĻe ce", + "å®¶ åºŃ", + "Ġ ãģı", + "âĶ ´", + "íģ ¼", + "ĠÎľ ά", + "à¹Ģ à¸ķร", + "à¹Ģà¸ķ ร", + "ĠÑģÑĤанов иÑĤÑģÑı", + "ç«ĭ ãģ¡", + "Ġ éĸĭ", + "Ġéĸ ĭ", + "Ġİ yi", + "ĠnÄĽkter é", + "ĠÑĢоб оÑĤ", + "ĠÄIJ ưá»Ŀng", + "ĠاÙĦ اج", + "Ġsp eci", + "Ġspec i", + "Ġspe ci", + "çī¹ åĪ«", + "åŃ Ŀ", + "âĢĮ گذ", + "âĢĮÚ¯ ذ", + "a lıģı", + "al ıģı", + "alı ģı", + "Ġм иÑĢа", + "Ġми ÑĢа", + "ĠмиÑĢ Ð°", + "í İĺìĿ´ì§Ģ", + "íİĺ ìĿ´ì§Ģ", + "Ø® Ùģ", + "ãĤª ãĥª", + "Ġس ÛĮÙħ", + "ĠسÛĮ Ùħ", + "Ġìĸ´ ëĬIJ", + "алÑĮ нÑĥ", + "Ñĩ ний", + "ümüz de", + "æĻº èĥ½", + "ý n", + "ĠتÙĤÙĪ ÛĮت", + "Ġп ÑĢиг", + "ĠпÑĢ Ð¸Ð³", + "ĠпÑĢи г", + "ĠгÑĢÑĥпп Ñĭ", + "am ı", + "γ οÏį", + "γο Ïį", + "оÑĢ ÑĤÑĥ", + "оÑĢÑĤ Ñĥ", + "ĠG iang", + "ĠGi ang", + "ĠGian g", + "ĠGia ng", + "ÅĻ en", + "ÅĻe n", + "Ġokol ÃŃ", + "产 ä¸ļ", + "Ġ зм", + "Ġз м", + "Ġ é¾", + "Ġé ¾", + "ÙĬ ار", + "ÙĬا ر", + "ĠاÙĦØ´ÙĬ Ø®", + "иÑĤелÑĮ нÑĭй", + "Ġ اÙĩÙħ", + "Ġا ÙĩÙħ", + "ĠاÙĩ Ùħ", + "ĠباÙĦ رÙĬاض", + "ĠÙ¾ÛĮ اÙħ", + "Ġk redi", + "Ġkr edi", + "Ġkre di", + "Ġkred i", + "ĠA rap", + "ĠAr ap", + "ĠAra p", + "Ġ ÑĢаб", + "ĠÑĢ Ð°Ð±", + "ĠÑĢаР±", + "ĠÑĢа б", + "ĠнекоÑĤоÑĢ ÑĭÑħ", + "ĠØŃاÙ쨏 Ùĩ", + "иÑĤелÑĮ ного", + "иÑĤелÑĮно го", + "Ġgerek mektedir", + "ĠD eniz", + "ĠDen iz", + "ĠتÙĦ اش", + "st agram", + "sta gram", + "stag ram", + "áv ky", + "åĬł åħ¥", + "oz or", + "ozo r", + "Ġdurum unda", + "Ġdurumu nda", + "Ġíıī ëĭ¹", + "Ġ ë´ī", + "Ġë´ ī", + "Ġp enÄĽ", + "Ġpe nÄĽ", + "Ġpen ÄĽ", + "Ú¯ اÙĨÛĮ", + "گاÙĨ ÛĮ", + "ĠK up", + "ĠKu p", + "Ġ ÑĨеÑĢ", + "ĠÑĨ еÑĢ", + "ĠÑĨе ÑĢ", + "ul ması", + "âij ł", + "ĠÑģÑĸÑĩ нÑı", + "ım ıza", + "ımız a", + "ımı za", + "å®ļ çļĦ", + "Âł ÑĤ", + "åĬŀ åħ¬", + "ìľ¼ ëĭĪ", + "ĠاÙĦ Ø¥ÙĨ", + "ĠاÙĦØ¥ ÙĨ", + "Ġ çĥ", + "Ġç ĥ", + "ãĢį ï¼Į", + "ÑĹ Ð½Ð°", + "ĠпÑĢигоÑĤов лениÑı", + "Ð ħ", + "ĠÑģ олн", + "ĠÑģол н", + "Ġë¶Ģ ìĤ°", + "æħ ¶", + "ãĤ ¾", + "v oje", + "vo je", + "voj e", + "ÛĮ دÙĨ", + "ÛĮد ÙĨ", + "ìĥĿ ëĭĺ", + "ç¹ ģ", + "á du", + "ád u", + ": ::::::::::::::", + ":: :::::::::::::", + ":::: :::::::::::", + ":::::: :::::::::", + ":::::::: :::::::", + "::: ::::::::::::", + "::::: ::::::::::", + "::::::: ::::::::", + "::::::::: ::::::", + ":::::::::: :::::", + "::::::::::: ::::", + ":::::::::::: :::", + "::::::::::::: ::", + ":::::::::::::: :", + "س ÙĨÚ¯", + "سÙĨ Ú¯", + "éĶ ĭ", + "Ġ звиÑĩай", + "Ġз виÑĩай", + "å§Ķåijĺ ä¼ļ", + "ĠμÎŃ Ïĥα", + "ĠÑĢ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñı", + "æĪIJ 人", + "Ġ dÃŃl", + "Ġd ÃŃl", + "ĠdÃŃ l", + "ĠÐĶ Ð¾Ð±", + "ĠÐĶо б", + "Ġ à¹ĥà¸Ĭ", + "ÏĢ Î¯", + "g amber", + "gam ber", + "ĠÙĪÛĮÚĺ Ú¯ÛĮ", + "Ġ èĬ±", + "ĠèĬ ±", + "Ġb Ãły", + "ĠbÃł y", + "ĠжовÑĤ нÑı", + "åħ¬ å¼Ģ", + "ĠÑĤ оÑĩки", + "ĠÑĤо Ñĩки", + "ĠÑĤоÑĩ ки", + "ãģĤ ãģ®", + "а лÑĸв", + "ал Ñĸв", + "алÑĸ в", + "Ġch arakter", + "Ġchar akter", + "ĠÎĴ α", + "Ġzku Å¡en", + "Ġà¤Ńà¤Ĺ व", + "Ñĩ ика", + "Ñĩи ка", + "Ñĩик а", + "à¥Ģà¤Ĥ ।", + "è£ ı", + "åijĬ è¯ī", + "iy atı", + "iya tı", + "iyat ı", + "ĠÑĨ елÑĮ", + "ĠÑĨе лÑĮ", + "ĠÑĨел ÑĮ", + "Ġ ìĬĪ", + "ĠìĬ Ī", + "а ÑĢд", + "аÑĢ Ð´", + "ĠÃľl ke", + "Ġpro since", + "Ġpros ince", + "ĠÙĨ گاÙĩ", + "ĠÙĨÚ¯ اÙĩ", + "ãĢĮ ãģĬ", + "ÎŁ Τ", + "ÎŁÎ ¤", + "ìĦľ ëĬĶ", + "ÙĪ Ú¯Ø±", + "ض اÙĨ", + "ضا ÙĨ", + "Ġdů sled", + "çIJ ´", + "à¸ķำ à¹ģหà¸Ļ", + "к ÑĤÑĸв", + "кÑĤ Ñĸв", + "lád á", + "á¿ Ĩ", + "ĠD oÄŁu", + "ĠDo ÄŁu", + "ĠDoÄŁ u", + "ãģij ãĤĮãģ°", + "缮 ãĤĴ", + "Ġ 缴", + "ĠçĽ ´", + "æ Ľ°", + "æĽ °", + "ĠвÑĤоÑĢ Ð¾Ð¹", + "Ġг лÑĥ", + "ĠìĿ ½", + "기 ì¤Ģ", + "Ġma dde", + "Ġmad de", + "Ġmadd e", + "Ġjed né", + "Ġjedn é", + "Ġо ÑĦÑĸ", + "ìĭĿ ìĿĦ", + "Ġch út", + "Ġchú t", + "åĩº ãģĹãģŁ", + "åĩºãģĹ ãģŁ", + "и ÑĩеÑģкаÑı", + "иÑĩеÑģ каÑı", + "Ġ лок", + "Ġл ок", + "Ġal tı", + "Ġalt ı", + "ëĵľ ëĬĶ", + "ey gamber", + "ĠÑģв ое", + "ĠÑģво е", + "ĠtaÅŁ ım", + "ĠÑĤо Ñīо", + "Ġgeç ti", + "Ġpr emi", + "Ġpre mi", + "Ġprem i", + "ĠMeh met", + "ï¼Į åĽłæŃ¤", + "ï¼ĮåĽł æŃ¤", + "ί κη", + "ίκ η", + "Ġönce ki", + "Ġönc eki", + "Ġ à¤ķन", + "Ġà¤ķ न", + "ĠÑĤемп еÑĢаÑĤÑĥÑĢа", + "ĠÑĤемпеÑĢаÑĤÑĥ ÑĢа", + "éĺ ´", + "Ġìĸ¼ ë§Ī", + "Ø´ ب", + "á ky", + "ák y", + "ãĢĢ V", + "воÑĢ ÐµÐ½Ð½Ñı", + "l asyon", + "las yon", + "Ġд оказ", + "Ġдо каз", + "Ġдок аз", + "Ġëľ »", + "Ġоб лиÑĩ", + "Ġобл иÑĩ", + "ÎĻ ÎijÎļ", + "ÎĻÎij Îļ", + "Ġ ÑĢазд", + "ĠÑĢаз д", + "ĠÑĢа зд", + "ï¼Į 为", + "å® ½", + "Ġk orum", + "Ġko rum", + "Ġkor um", + "åķĬ åķĬ", + "ĠÅĻe kla", + "ĠÅĻekl a", + "ĠÅĻek la", + "ãĥĹ ãĥ¬", + "Ġв аÑĢÑĤ", + "ĠваÑĢ ÑĤ", + "ĠпÑĢоблем Ñĭ", + "Ġ ä½ł", + "Ġth Æ¡m", + "Ġta kové", + "Ġtak ové", + "Ġtako vé", + "л енÑĭ", + "лен Ñĭ", + "ле нÑĭ", + "Ġ åζ", + "ĠåĪ ¶", + "Ġji ných", + "Ġjin ých", + "Ġjiný ch", + "ĠÙĨ ص", + "ĠгÑĢÑĥд нÑı", + "Ġ ãģĹ", + "иÑĤелÑĮ ной", + "иÑĤелÑĮно й", + "ĠاØŃ تÙħ", + "Ñİ ÑĢ", + "ÏĨ Ïħ", + "Ġ Ø´ÙħاÙĦÛĮ", + "ĠØ´Ùħ اÙĦÛĮ", + "ĠØ´Ùħا ÙĦÛĮ", + "ĠØ´ÙħاÙĦ ÛĮ", + "Ġ ì»´", + "Ġì» ´", + "acaÄŁ ız", + "acaģı z", + "ì§Ģ ë§ī", + "ĠÑĦин анÑģов", + "Ġ ê·¹", + "Ġê· ¹", + "ĠÚĨ ÛĮزÛĮ", + "ĠÚĨÛĮز ÛĮ", + "à¥Ģ à¤Ľ", + "ص ات", + "ान म", + "Ġв озможно", + "Ġвозмож но", + "è¨ İ", + "çĦ ¦", + "ĠاÙĦبÙĦ د", + "Ġ çͳåįļ", + "ç¥ ¥", + "Ġë°Ķ ëĿ¼", + "Ú¯ ÛĮر", + "Ú¯ÛĮ ر", + "Ûµ Û°", + "μι οÏħÏģγ", + "ĠpÅĻed sed", + "ç»ı èIJ¥", + "å§ ij", + "e mey", + "em ey", + "eme y", + "ĠÙĨ ÙĪÙģ", + "ĠÙĨÙĪ Ùģ", + "å¾ ½", + "Ġprá va", + "Ġpráv a", + "Ġво обÑīе", + "Ġ íĭ°", + "Ġíĭ °", + "Ġب Ø£ÙĨ", + "Ġبأ ÙĨ", + "ĠFr anti", + "ĠFran ti", + "ĠP aÅŁa", + "ĠPa ÅŁa", + "ĠÙ¾ ست", + "Ġپس ت", + "k ân", + "ĠÑģиг н", + "Ġd ần", + "æ IJľ", + "æIJ ľ", + "Ġr oky", + "Ġro ky", + "Ġrok y", + "Ùĥ ÙĪØ±", + "ÙĥÙĪ Ø±", + "ĠÎĶ Î®", + "али заÑĨии", + "ализ аÑĨии", + "ализа ÑĨии", + "ä¼ł å¥ĩ", + "ı da", + "lÃŃ b", + "ĠÑĢÑĸв нÑı", + "Ġн оÑı", + "Ġно Ñı", + "bÄĽ hu", + "bÄĽh u", + "ิà¸ĩห าà¸Ħม", + "ï¼Į åį´", + "Ġ ÑĩеÑģ", + "ĠÑĩ еÑģ", + "lan mÄ±ÅŁtır", + "lanmÄ±ÅŁ tır", + "Ġ Æ°á»Ľc", + "áv acÃŃ", + "ีฬ า", + "δ ÎŃ", + "âĢĮØ´ ÙĪÙĨد", + "Ġ ÑĢобÑĸÑĤ", + "ĠÑĢоб ÑĸÑĤ", + "Ġ å·´", + "Ġå· ´", + "ĠM ev", + "ĠMe v", + "ĠÙħرØŃ ÙĦÙĩ", + "Ġвз ÑĢоÑģ", + "ç½ ļ", + "Ġب اÙĦÙħ", + "Ġبا ÙĦÙħ", + "ĠباÙĦ Ùħ", + "Ġиз гоÑĤов", + "ĠS por", + "ĠSp or", + "ĠSpo r", + "åĦ Ģ", + "ĠاÙĦ Ø£ÙĨ", + "ĠاÙĦØ£ ÙĨ", + "à¹Īา à¸ĩà¸ģ", + "à¹Īาà¸ĩ à¸ģ", + "л аÑģÑĤи", + "ла ÑģÑĤи", + "лаÑģ ÑĤи", + "ÎŁ Îļ", + "ÎŁÎ ļ", + "Ġ Ú©ÛĮ", + "ĠÚ© ÛĮ", + "åij½ 令", + "ØŃ دث", + "ØŃد Ø«", + "ÙĬ ÙĥÙĬ", + "ÙĬÙĥ ÙĬ", + "ĠпеÑĢв Ñĭй", + "ãĤ¹ ãĤ³", + "ĠÅ¡ pat", + "ĠÅ¡p at", + "Ġnik do", + "ั à¸ĩม", + "ัà¸ĩ ม", + "èµ «", + "æĺ ¨", + "Ġв Ñĥли", + "ĠвÑĥл и", + "ĠÐļ а", + "à¹Ī ละ", + "Ġsa mot", + "Ġsam ot", + "Ġsamo t", + "ĠобеÑģп е", + "ĠÙħعرÙģ ÛĮ", + "ĠÙħØŃصÙĪÙĦ ات", + "в анов", + "ва нов", + "ван ов", + "вано в", + "ĠÙħستÙĤ ÛĮÙħ", + "å¢ Ļ", + "Âł Ðļ", + "Ġд оÑĤ", + "Ġдо ÑĤ", + "z im", + "zi m", + "ÙIJ ر", + "Ġ Ø´ÙĪ", + "ĠØ´ ÙĪ", + "åľ¨ åľ°", + "Ġ çݰ", + "Ġçİ °", + "Ġ åĮĸ", + "ĠåĮ ĸ", + "ز ÙĪ", + "Ġyay gın", + "Ġо ÑĢиг", + "ĠоÑĢ Ð¸Ð³", + "Ùı ÙĨ", + "Ġev rop", + "Ġ ï½ľ", + "Ġï½ ľ", + "Ġëħ¸ì¶ľ ëĵ±ë¡Ŀ", + "åĩ Ŀ", + "л еннÑĭÑħ", + "лен нÑĭÑħ", + "Ġje nom", + "Ġjen om", + "Ġ ЧÑĤобÑĭ", + "ĠЧ ÑĤобÑĭ", + "ĠЧÑĤо бÑĭ", + "ĠìĹĨ ëĭ¤", + "ĠìŬ ìĦ±", + "Ġres mi", + "im álnÃŃ", + "缮 ãģ®", + "s ian", + "si an", + "-ни бÑĥдÑĮ", + "ο κ", + "çĭ¬ ç«ĭ", + "ÅŁ ehir", + "åIJ IJ", + "åζ éĢł", + "Ġ ÎĶεν", + "ĠÎĶ ÎµÎ½", + "ĠÎĶε ν", + "ãĥĭ ãĥ¥", + "иÑĤелÑĮ нÑĭÑħ", + "Ġ ÙĥاÙħ", + "ĠÙĥ اÙħ", + "Ïģ κ", + "Ġr au", + "Ġra u", + "ĠÑģм еÑĢÑĤи", + "ĠÑģмеÑĢ ÑĤи", + "ĠÏĮ ÏĦαν", + "Ġ Tại", + "ĠT ại", + "Ġ رب", + "Ġر ب", + "ε νο", + "εν ο", + "ر دد", + "رد د", + "Ġ à¸ģระ", + "Ġà¸ģ ระ", + "Ġà¸ģร ะ", + "Ïĥ μο", + "Ïĥμ ο", + "Ġ æ¼Ķ", + "Ġæ¼ Ķ", + "ิà¸Ī à¸ģรรม", + "ĠÑĢаз ви", + "ĠÑĢазв и", + "ãĤ¹ ãĥļ", + "Ñĸ ÑĩноÑĹ", + "ÑĸÑĩ ноÑĹ", + "lá Å¡enÃŃ", + "láš enÃŃ", + "اب عة", + "ابع Ø©", + "ov ými", + "ový mi", + "ovým i", + "а нг", + "ан г", + "Ġкап ÑĸÑĤ", + "ãĢģ âĢĭ", + "íĸĪ ëįĺ", + "ĠÑĥ ÑģÑĸ", + "ĠÑĥÑģ Ñĸ", + "ย าว", + "ยา ว", + "Ø£ Ùħ", + "ãĥ© ãĥĥãĤ¯", + "Ġë ķ", + "ĠسÙĨ ÙĪØ§Øª", + "ĠÑģÑĤаÑĤ ÑĮи", + "ĠÑģÑĤаÑĤÑĮ и", + "ÑĹ Ñħ", + "Ïģο Ïĩή", + "ĠØ£Ùĥ تÙĪØ¨Ø±", + "lan ma", + "Ġmal zem", + "ç £¨", + "ç£ ¨", + "Ġб окÑĥ", + "Ġбо кÑĥ", + "Ġбок Ñĥ", + "åŃĹ å¹ķ", + "ĠоÑĢганÑĸ за", + "ĠоÑĢганÑĸз а", + "ãĥ© ãĤ¤ãĥ³", + "ãĥ©ãĤ¤ ãĥ³", + "ĠÙħع دÙĨ", + "ĠÙħعد ÙĨ", + "çĶ· åŃIJ", + "Ġ æĤ", + "Ġæ Ĥ", + "Ạ¾", + "Ġmez iná", + "Ġmezi ná", + "и ваÑİÑĤ", + "ив аÑİÑĤ", + "ива ÑİÑĤ", + "ĠطبÛĮ عÛĮ", + "èĻ ij", + "à¤Ł र", + "Ġпод Ñģ", + "ĠÅŁ aÅŁ", + "à¸Ļ à¹Ĩ", + "ĠÅ¡ p", + "v ÄĽÅĻ", + "vÄĽ ÅĻ", + "з ÑĮ", + "ëĿ¼ ë§Ī", + "ุ à¸ĺ", + "â̦ Ø·", + "리 ì§Ģ", + "âĦĸâĦĸ âĦĸâĦĸ", + "Ġb ức", + "ĠSp oj", + "ĠSpo j", + "ĠиÑģполÑĮзов ани", + "ĠиÑģполÑĮз овани", + "å·¦ åı³", + "en ler", + "ĠоÑī ÑĥÑī", + "Ġоб лÑĸ", + "Ġобл Ñĸ", + "ظ ËĨ", + "ÙĦ ÛĮس", + "ÙĦÛĮ س", + "æıIJ åįĩ", + "ĠговоÑĢ Ð¸ÑĤÑĮ", + "ĠговоÑĢиÑĤ ÑĮ", + "Ġk ür", + "Ġkü r", + "Ġλ ειÏĦοÏħÏģγ", + "ла га", + "лаг а", + "ĠÑģÑĥ дÑĥ", + "ĠÑģÑĥд Ñĥ", + "Ġ 측", + "Ġì¸ ¡", + "θε Ïĥη", + "Ġ нен", + "Ġн ен", + "Ġне н", + "Ġbiç imde", + "Ġbiçim de", + "ÑĨÑĸй ноÑĹ", + "ÑĨÑĸйно ÑĹ", + "à¹Ģà¸Ħ ย", + "ĠDal Å¡ÃŃ", + "Ġи меÑĤÑĮ", + "Ġим еÑĤÑĮ", + "Ġиме ÑĤÑĮ", + "èĭ Ĺ", + "ĠÙħع رÙĪÙģ", + "Ġt ạp", + "Ġm eÅŁ", + "Ġme ÅŁ", + "Âł N", + "оÑĢ Ð¾Ð½Ð¸", + "оÑĢон и", + "оÑĢо ни", + "ع Ùģ", + "à¹Ĥ รà¸ĩà¹Ģร", + "à¹Ĥรà¸ĩ à¹Ģร", + "âĶ ¬", + "Ġ à¹Ģà¸ŀราะ", + "Ġà¹Ģà¸ŀ ราะ", + "Ġèı² å¾ĭ宾", + "ÑģÑĤв енное", + "ÑģÑĤвен ное", + "ÑģÑĤвенно е", + "Ġاز دÙĪØ§Ø¬", + "ĠÑĦ ев", + "éł »", + "Ġ สล", + "Ġส ล", + "à¸ķ à¸Ńà¸Ļ", + "Ġ 기ê°Ħ", + "Ġ기 ê°Ħ", + "ä½ ©", + "ÏĦ ην", + "ÏĦη ν", + "ëĤ¬ ëĭ¤", + "ĠQ uy", + "ĠQu y", + "Ġë¶ Ļ", + "ĠС Ñĥд", + "и ж", + "Ġ à¹Ģà¸ģม", + "Ġà¹Ģà¸ģ ม", + "ĠÑģв ÑıÑĤ", + "ĠÑģвÑı ÑĤ", + "et ooth", + "eto oth", + "ε Ïģο", + "εÏģ ο", + "ÙĦ ÙħØ©", + "ÙĦÙħ Ø©", + "Ø´ ÙĪØ±", + "Ø´ÙĪ Ø±", + "Ġd omu", + "Ġdo mu", + "Ġdom u", + "èį Ĵ", + "m î", + "ëıĦ 를", + "ĠÑĢекомендÑĥ еÑĤÑģÑı", + "Ġsonra sında", + "Ġsonrası nda", + "Ġд нÑĸв", + "Ġç al", + "Ġça l", + "ãĤ«ãĥĨ ãĤ´ãĥª", + "Ġ еж", + "Ġе ж", + "Ġìķ ī", + "èī² çļĦ", + "âĢĻ nde", + "âĢĻn de", + "Ġ ÏĢÏīÏĤ", + "ĠÏĢ ÏīÏĤ", + "ĠÑĩеÑĤ веÑĢ", + "k ili", + "ki li", + "kil i", + "æĢ§ èĥ½", + "اد ÙĬØ©", + "ادÙĬ Ø©", + "çº ¯", + "ĠاÙĦ تش", + "ĠاÙĦت Ø´", + "ĠÑĤ ела", + "ĠÑĤе ла", + "ĠÑĤел а", + "Ġоб ÑĬем", + "ĠобÑĬ ем", + "å²Ĺ ä½į", + "Ġkon krét", + "Ġa rada", + "Ġar ada", + "Ġara da", + "ìĭľ ìĹIJ", + "Ġor anı", + "Ġoran ı", + "ر Ùĥ", + "ÐĽ ÐIJ", + "Ġ ménÄĽ", + "Ġmé nÄĽ", + "ج ÙĪÛĮ", + "جÙĪ ÛĮ", + "Ġv ợ", + "Ġvá» £", + "ĠAngiosper mae", + "èĥ İ", + "Ġh ôn", + "äºĭ æ¥Ń", + "ĠоÑĤ веÑĢ", + "ĠоÑĤв еÑĢ", + "Ġs rd", + "Ġsr d", + "Å¡ li", + "ส à¸ģ", + "æ¼ ı", + "ĠØ´ رØŃ", + "Ġشر ØŃ", + "ÑĨ Ñıми", + "ÑĨÑı ми", + "Ġs lav", + "Ġsl av", + "Ġsla v", + "Ġc eny", + "Ġce ny", + "Ġcen y", + "à¸Ń à¹Ģร", + "Ġ ÙĪÙĦد", + "ĠÙĪÙĦ د", + "Ġк оÑĢа", + "ĠкоÑĢ Ð°", + "Ġко ÑĢа", + "Ġб ÑĢон", + ": .:.:.:.:", + ":.:.: .:.:", + ":.: .:.:.:", + "Ġne mus", + "Ġnem us", + "è¿Ļ æł·çļĦ", + "è¿Ļæł· çļĦ", + "Ġبر ÙĨاÙħج", + "Ġú plnÄĽ", + "ีà¸Ļ าà¸Ħม", + "Ġë°Ľ ìķĦ", + "με Ïģα", + "μεÏģ α", + "ç¼ ©", + "Ġn ắm", + "ĠобÑĬ ÑıÑģ", + "ĠконÑĤÑĢ Ð¾Ð»Ñİ", + "á vajÃŃcÃŃ", + "ávajÃŃ cÃŃ", + "Ġk um", + "Ġku m", + "çĶ· 人", + "Ġv nitÅĻ", + "Ġب دÙĩ", + "Ġبد Ùĩ", + "Ġأب رÙĬÙĦ", + "人æ°ij åħ±åĴĮåĽ½", + "Ġyap ılır", + "Ġyapıl ır", + "Ġna Å¡ÃŃ", + "ĠnaÅ¡ ÃŃ", + "ãĥ¼ ãĥŃ", + "ãĥ¼ãĥ Ń", + "Ġt ạm", + "Ġhen üz", + "Ġz emi", + "Ġze mi", + "Ġzem i", + "Ġkh áng", + "Ġkhá ng", + "åħ¬ åħ±", + "Ġ èĢģ", + "ĠèĢ ģ", + "ĠعÙĪ Ø§ÙħÙĦ", + "Âł V", + "à¹ī à¹ģà¸ģ", + "άν ÏĦα", + "ĠÑĤÑĢав нÑı", + "Ġη μÎŃ", + "è´ ¸", + "ส à¸Ķ", + "Ġس Ùħت", + "ĠسÙħ ت", + "ĠØ® اک", + "ĠÑĤак ий", + "ĠÑĤа кий", + "Ġet tik", + "Ġett ik", + "Ġetti k", + "ĠÏĮ λ", + "Ġп оли", + "Ġпо ли", + "Ġпол и", + "Ġ нож", + "Ġн ож", + "Ġно ж", + "غ اÙĨ", + "ÙĨ دÙĬ", + "ÙĨد ÙĬ", + "ĠÄįty ÅĻi", + "ĠÄįtyÅĻ i", + "ĠPh ương", + "ĠÙĪØ± زش", + "ĠÙĪØ±Ø² Ø´", + "ãģĦ ãģĭ", + "r vé", + "rv é", + "Ġतर फ", + "Ġन à¤Ĺर", + "m asında", + "ma sında", + "mas ında", + "ması nda", + "е виÑĩ", + "ев иÑĩ", + "еви Ñĩ", + "ve ÅĻej", + "ä¿Ŀ æĮģ", + "æĬĢ èĥ½", + "æİ¨ èįIJ", + "l âm", + "Ġ Ïį", + "ĠÏ į", + "å¢ŀ éķ¿", + "Ġاص ÙģÙĩ", + "ĠÐĹак онÑĥ", + "ĠÐŁ ÑĢез", + "ĠÐŁÑĢ ÐµÐ·", + "Ġpod por", + "Ġpodp or", + "기 íĥĢ", + "Ġ íıIJ", + "Ġíı IJ", + "Ġ ëĭĪ", + "Ġëĭ Ī", + "lar ınız", + "ların ız", + "larını z", + "ãĥĸ ãĥŃ", + "ĠÑĦÑĢан ÑĨÑĥз", + "ãĥĬ ãĥ¼", + "Ġb eled", + "Ġbe led", + "Ġbel ed", + "Ġbele d", + "ัà¸Ļว าà¸Ħม", + "ĠÙģ Ø±ÙĪ", + "ĠÙ쨱 ÙĪ", + "ÑĦ ÑĢов", + "ĠìĿ´ 룬", + "ượ u", + "Ġê³µ ìĭĿ", + "Ġbird en", + "Ġbir den", + "Ġз елен", + "Ġзел ен", + "çĴ ĥ", + "Ġh á»ĵng", + "Ġhá»ĵ ng", + "ĠÅ¡ kola", + "ĠÅ¡kol a", + "ĠÅ¡k ola", + "ĠÑģам ом", + "ĠÑģамо м", + "an lık", + "anlı k", + "空 éĹ´", + "åįĹ çľģ", + "л еÑĢг", + "ле ÑĢг", + "леÑĢ Ð³", + "Ñĸз неÑģ", + "Âł A", + "ãĢį ãĤĴ", + "Ġkend ine", + "Ġkendi ne", + "Ġ اÙĪÙĨ", + "Ġا ÙĪÙĨ", + "ĠاÙĪ ÙĨ", + "ãĢ Ķ", + "ĠΣ Ïį", + "à¹Ģ à¸Ħล", + "à¹Ģà¸Ħ ล", + "å¥ ¶", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "Ġú Äįet", + "ĠúÄį et", + "Ñĥ ла", + "Ñĥл а", + "éĢļ ä¿¡", + "Ġì¦ IJ", + ". čĊĊ", + ".čĊ Ċ", + "ĠÐľ ед", + "ا عÙĬ", + "اع ÙĬ", + "Ġjeho ž", + "ĠGü ney", + "ĠGün ey", + "ĠÎij ÏĢο", + "ĠÎijÏĢ Î¿", + "Ġп олÑĸ", + "Ġпо лÑĸ", + "Ġпол Ñĸ", + "ü me", + "üm e", + "ho dob", + "hod ob", + "ĠÎĿ α", + "ĠØ¢ ÙĦات", + "ĠØ¢ÙĦ ات", + "ĠpÅĻ iz", + "ĠpÅĻi z", + "Ġt avs", + "Ġta vs", + "Ġtav s", + "Ġتب ÙĦÛĮ", + "ãĥ³ ãĥĶ", + "ãĥ³ãĥ Ķ", + "Ø® رج", + "خر ج", + "Ġак кÑĥ", + "Ġú prav", + "ĠاØŃ ساس", + "ì¹´ ëĿ¼", + "ı mızı", + "ım ızı", + "ımız ı", + "ımı zı", + "Ġд окÑĥменÑĤ", + "Ġдок ÑĥменÑĤ", + "ĠдокÑĥм енÑĤ", + "Ġ اصÙĦ", + "Ġا صÙĦ", + "Ġاص ÙĦ", + "ظ Ùĩ", + "ĠìĿ¸ ê°Ħ", + "Ġج رÛĮاÙĨ", + "Ġجر ÛĮاÙĨ", + "Î¥ ÎĿ", + "ÑĩеÑģ каÑı", + "Ñĩе ÑģкаÑı", + "ÙĬ ÙĨÙĬØ©", + "ÙĬÙĨ ÙĬØ©", + "ÙĬÙĨÙĬ Ø©", + "åĴ ¨", + "æĹħ 游", + "Ġ à¸Īำà¸Ļวà¸Ļ", + "Ġà¸Īำ à¸Ļวà¸Ļ", + "Ġ анг", + "Ġа нг", + "Ġан г", + "Ïħ Ïĩ", + "èĻ «", + "ĠÙħ ÙĤر", + "ĠÙħÙĤ ر", + "ĠÙħÙĪØ³ÛĮ ÙĤÛĮ", + "ut ut", + "ĠÐĽ е", + "ĠÐŁ ÑĸÑģлÑı", + "ãĤŃ ãĥ¼", + "ุล าà¸Ħม", + "åĩ ¡", + "ÏĢ Î¿Ïį", + "ÏĢο Ïį", + "ĠÃĸ dül", + "Ïĥ κ", + "Ġ ÑĨÑİ", + "ĠÑĨ Ñİ", + "Ñĭ ваÑı", + "Ñĭв аÑı", + "Ñĭва Ñı", + "ï½ŀ ï½ŀ", + "ĠØ´ ÙħاÙĦ", + "ĠØ´Ùħ اÙĦ", + "ĠØ´Ùħا ÙĦ", + "è¿ ħ", + "ĠبÙĦ Ú©Ùĩ", + "çİ Ľ", + "Ġì§Ģ ëĤĺ", + "ĠÙģ کر", + "ĠÑģÑĤеп ени", + "Ġна Ñĥки", + "ĠнаÑĥк и", + "çī© çIJĨ", + "ÄĽ le", + "ÄĽl e", + "Ġо ÑģкÑĸлÑĮки", + "ĠкÑĥлÑĮÑĤÑĥ ÑĢи", + "ĠкÑĥлÑĮÑĤÑĥÑĢ Ð¸", + "èĢĥ è¯ķ", + "Ġmateri ál", + "ĠÑģÑĤ воÑĢеннÑı", + "ĠÑģÑĤвоÑĢ ÐµÐ½Ð½Ñı", + "Ġà¤ħ द", + "æıIJ åĩº", + "Ġè©ķ 価", + "ÙĴ د", + "Ġë§Įëĵ¤ ìĸ´", + "duÄŁu nu", + "duÄŁ unu", + "ÙĬ ÙĨÙĩ", + "ÙĬÙĨ Ùĩ", + "åĵ ¦", + "оÑĩ нÑĭÑħ", + "ĠÙħ ض", + "is mu", + "ism u", + "Ġ Ñĩай", + "ĠÑĩ ай", + "ĠÑĩа й", + "ÙĪ Ø±ÙĪØ¨", + "ÙĪØ± ÙĪØ¨", + "Ġ англ", + "Ġан гл", + "Ġанг л", + "oÄŁun luk", + "ĠпÑĢед пол", + "ĠÎŃ ÏīÏĤ", + "ส à¸ĸ", + "ĠÎķλλά δα", + "ĠBi lg", + "ĠBil g", + "Ġ بات", + "Ġب ات", + "Ġبا ت", + "ĠÐĽÑĮв Ñĸв", + "Ġyap ılması", + "Ġyapıl ması", + "æ£Ģ æŁ¥", + "æķ° åѦ", + "Ġ :.:", + "Ġ: .:", + "Ġ:. :", + "Ġ çİ©", + "Ġçİ ©", + "Îļ α", + "à¹Ģà¸Ĺ à¸Ħà¹Ĥà¸Ļà¹Ĥลย", + "Ġساخت ÙħاÙĨ", + "ĠìĨĮ 리", + "é¼ »", + "Ġs mr", + "Ġsm r", + "Ġëĭ¤ìĸij íķľ", + "Ġjed nánÃŃ", + "Ġjedn ánÃŃ", + "Ġjedná nÃŃ", + "Ġserv isi", + "Ġservi si", + "Ġservis i", + "Ġey lem", + "Ġм али", + "Ġмал и", + "Ġма ли", + "Ġvý hod", + "éϤ äºĨ", + "ĠпоÑĢÑıд кÑĥ", + "Ġn ový", + "Ġno vý", + "Ġnov ý", + "å¤ ķ", + "ĠнекоÑĤоÑĢ Ñĭе", + "Ġ^ {}", + "Ġ^{ }", + "γÏī γ", + "Ñĥ ÑĪки", + "ÑĥÑĪ ÐºÐ¸", + "Ġp sik", + "Ġps ik", + "Ġpsi k", + "ĠíĶĦ 리", + "Ø´ اء", + "Ġ ван", + "Ġв ан", + "Ġва н", + "Ġس ÙĥاÙĨ", + "ç¢ ¼", + "ĠÎľ η", + "ĠÑĥÑĢов енÑĮ", + "ãĤµ ãĥ¼", + "ĠاÙĦب ØŃر", + "Ġd nÃŃ", + "Ġdn ÃŃ", + "à¸ģาร ศ", + "e diÄŁi", + "edi ÄŁi", + "Ġbelir li", + "Ùĭ ØĮ", + "ĠzamÄĽst nan", + "ĠzamÄĽstn an", + "æŁ ±", + "ا ÙģÙĬ", + "اÙģ ÙĬ", + "Ġh ải", + "æĢĿ æĥ³", + "Ġn eler", + "Ġne ler", + "Ġnel er", + "Ġرس ÙħÛĮ", + "ĠرسÙħ ÛĮ", + "Ñģ еÑĢ", + "Ñģе ÑĢ", + "ãģĵãģ¨ ãģ§", + "ĠZá kladnÃŃ", + "л ова", + "ло ва", + "лов а", + "к ÑĤÑĥ", + "кÑĤ Ñĥ", + "ÙĪØ³ Ùģ", + "Ñĸб лÑĸ", + "Ì Ĥ", + "ÑĢ Ð´", + "éĻ ³", + "æį ·", + "ĠyaÅŁ ayan", + "à¥ģ à¤ļ", + "à¥ģठļ", + "ÑĸÑĤ ÑĤÑı", + "Ġb á»ģ", + "ëĤĺ ëĿ¼", + "Ġм ÑıÑģ", + "Ġ{ [%", + "Ġ{[ %", + "θ α", + "Ġдоз волÑı", + "Ġдозвол Ñı", + "Ġ åIJĦ", + "ĠåIJ Ħ", + "ĠÐŁ еÑĢв", + "ĠÐŁÐµÑĢ Ð²", + "ĠSaÄŁ lık", + "ÑģÑĤоÑĢ Ð¸Ñı", + "Ġbun lar", + "Ġs á»ķ", + "़ à¥į", + "Ġ åĪ©", + "ĠåĪ ©", + "ĠÑģ поÑģ", + "ĠÑģп оÑģ", + "Ġyap tır", + "Ġyaptı r", + "Ġt ưá»Ŀng", + "ÙĪ ÙĨØ©", + "ÙĪÙĨ Ø©", + "Ġ еп", + "Ġе п", + "ãģ§ãģį ãģªãģĦ", + "Ùģ ØªÙħ", + "ÙģØª Ùħ", + "ĠÐĵ ол", + "íķĺ ì§Ģë§Į", + "íķĺì§Ģ ë§Į", + "Ġì§Ħ ì§ľ", + "Ġob jedn", + "Ġobj edn", + "Ġизмен ениÑı", + "女 人", + "Ġпл ани", + "Ġпла ни", + "Ġплан и", + "ĠFak ült", + "Ġt zv", + "Ġtz v", + "ĠобÑıз аÑĤелÑĮ", + "Ġблиз ÑĮко", + "r ası", + "ra sı", + "ras ı", + "ĠεÏĢί ÏĥηÏĤ", + "ĠÑĦак ÑĤи", + "ĠÑĦакÑĤ и", + "ĠÄIJ ặc", + "ĠAlt ın", + "л иÑĤ", + "ли ÑĤ", + "Ġл ÑĸÑģ", + "ĠлÑĸ Ñģ", + "çī §", + "Ġп ÑĥÑģÑĤ", + "ĠпÑĥ ÑģÑĤ", + "Ġком ÑĸÑģ", + "ä¿Ŀ éļľ", + "åħ· ä½ĵ", + "- ÑĤ", + "Ġtr hu", + "Ġtrh u", + "Ġâī Ī", + "Ġдека бÑĢÑı", + "ĠÑĦоÑĢм Ñĭ", + "ĠÑĦоÑĢ Ð¼Ñĭ", + "Ng oÃłi", + "Ġdo hod", + "رÙĬ ÙĥÙĬØ©", + "رÙĬÙĥ ÙĬØ©", + "رÙĬÙĥÙĬ Ø©", + "ĠØ¢ÙħÙĪØ² Ø´ÛĮ", + "ĠØ¢ÙħÙĪØ²Ø´ ÛĮ", + "ĠzajÃŃm av", + "Ġkat ılım", + "Ġkatıl ım", + "ä¸ ĺ", + "Ġko num", + "Ġkon um", + "Ġkonu m", + "Ġм оÑĩ", + "Ġмо Ñĩ", + "ãĥ³ ãĥķ", + "ãĥ³ãĥ ķ", + "диви дÑĥ", + "Ġ äºļ", + "Ġ æĴ", + "Ġæ Ĵ", + "γÏģά ÏĨ", + "ãĥIJ ãĤ¹", + "Ġп Ñĥнк", + "ĠBir leÅŁik", + "Ġqu en", + "Ġque n", + "Ġq uen", + "Ġв каз", + "Ġвк аз", + "à¥ĩ शà¤ķ", + "à¥ĩश à¤ķ", + "ĠY unan", + "ĠYu nan", + "ĠYun an", + "ãģł ãģ¨", + "Û±Û¹ Û·", + "á ty", + "át y", + "Ġ ÙĪØµ", + "ĠÙĪ Øµ", + "Ġнег аÑĤив", + "ãģ¤ ãģ®", + "Ġ åĬ¨", + "ĠåĬ ¨", + "ãĥį ãĥĥãĥĪ", + "Ġд Ñĸй", + "ĠдÑĸ й", + "ĠbaÅŁ ında", + "Ġtr ưng", + "Ġm akin", + "Ġma kin", + "Ġmak in", + "Ġ æĦĽ", + "ĠæĦ Ľ", + "м еÑĩ", + "ме Ñĩ", + "Ġ è¿ij", + "Ġè¿ ij", + "ÙĤ در", + "ÙĤد ر", + "Ġاست اÙĨد", + "ĠاستاÙĨ د", + "Ġinform acÃŃ", + "ार à¤ķ", + "è¬ Ŀ", + "ÑĢаб аÑĤ", + "Ġ çŃĶ", + "Ġç ŃĶ", + "ĠçŃ Ķ", + "Ġ èĩ³", + "Ġèĩ ³", + "Ġп олÑĮ", + "Ġпо лÑĮ", + "Ġпол ÑĮ", + "ĠÙĩÙĨ ر", + "ëĮĢ ë¹Ħ", + "Ġخارج ÛĮ", + "r act", + "ra ct", + "rac t", + "ãĢĤ ãģĵãĤĮ", + "ĠØ´ÙĪØ± اÛĮ", + "л енно", + "лен но", + "Ġh isset", + "Ġhis set", + "Ġhiss et", + "Ġc Ãłi", + "ĠcÃł i", + "ĠÑĦ оÑĤо", + "ĠÑĦоÑĤ о", + "æģ Ĵ", + "Ġмед иÑĨин", + "Ġмеди ÑĨин", + "ÑģÑĤ вÑĸ", + "ÑģÑĤв Ñĸ", + "ĠاÙĦ عÙĦ", + "ĠاÙĦع ÙĦ", + "ĠпиÑģÑĮ мен", + "ãĢĤ ãģ¾ãģŁ", + "Ġvlast nÄĽ", + "Ġп ода", + "Ġпо да", + "Ġпод а", + "Ïģ οι", + "Ïģο ι", + "Ġ ìĦĿ", + "ĠìĦ Ŀ", + "ĠìĿ¼ ìĿ´", + "Ġ ìĽĮ", + "ĠìĽ Į", + "ок Ñģи", + "окÑģ и", + "Ġos oby", + "Ġosob y", + "ÐŁÐ¾Ñģ ле", + "ĠÑĸÑģÑĤоÑĢ ÑĸÑĹ", + "ع ÙĦÙī", + "عÙĦ Ùī", + "н ка", + "ت Ùħبر", + "تÙħ بر", + "à¥ĩ हर", + "à¥ĩह र", + "ĠJ ana", + "ĠJan a", + "ĠJa na", + "ÙĦ ÙĬات", + "ÙĦÙĬ ات", + "ĠмаÑĢ ÑĤа", + "ĠÐļи ÑĶ", + "ĠÑĢоб оÑĤÑĥ", + "ĠÑĢобоÑĤ Ñĥ", + "Ġnh ấn", + "и Ñģлов", + "иÑģ лов", + "ëŁ Ń", + "Ġo dv", + "Ġod v", + "ĠT á»īnh", + "âĢľ ê·¸", + "ãģ» ãģĨ", + "é² ľ", + "м еÑĨÑĮ", + "ме ÑĨÑĮ", + "า ศาสà¸ķร", + "าศ าสà¸ķร", + "à¥ģ à¤ĵ", + "à¥ģठĵ", + "ิ à¸Ļà¸Ĺ", + "ิà¸Ļ à¸Ĺ", + "m ada", + "ma da", + "mad a", + "ز اÙħ", + "زا Ùħ", + "ĠÙĥ بÙĬر", + "å®ŀ æĸ½", + "ze ÅĪ", + "Ġl ái", + "Ġlá i", + "Ïĥ μα", + "Ïĥμ α", + "ا سات", + "اس ات", + "ÑĦ ÑĤ", + "è° ±", + "çĮ ľ", + "Ġpro bÃŃ", + "Ġprob ÃŃ", + "æľĢ è¿ij", + "ÑĢ Ð°Ð´", + "ÑĢаР´", + "ÑĢа д", + "ãĤ½ ãĥ³", + "Ġ клад", + "Ġк лад", + "Ġкл ад", + "Ġкла д", + "à¥ľ à¤ķ", + "é v", + "ล าย", + "ลา ย", + "èİ İ", + "ĠμÎŃ ÏĩÏģι", + "Ġ кÑĥÑģ", + "Ġк ÑĥÑģ", + "ĠкÑĥ Ñģ", + "Ġ íĻĺê²½", + "ĠíĻĺ ê²½", + "Ñĩ оÑĹ", + "åıĺ åĮĸ", + "Ġب تÙĪØ§ÙĨ", + "Ġبت ÙĪØ§ÙĨ", + "Ġt ắt", + "Ġgöster en", + "а лÑİ", + "ал Ñİ", + "Ġкоман ди", + "Ġкоманд и", + "Ġ 컨", + "Ġì» ¨", + "Ñĥ нд", + "Ñĥн д", + "Ġج ÙĦÙĪ", + "ĠجÙĦ ÙĪ", + "åŃIJ çļĦ", + "ĠÑģ б", + "ĠÐł аÑģ", + "ĠÐłÐ° Ñģ", + "P CP", + "PC P", + "ĠCumhur baÅŁ", + "од аÑĤелÑĮ", + "ÃŃ sto", + "ÃŃs to", + "ÃŃst o", + "Ġo znám", + "Ġoz nám", + "ãĥ¼ ãĥĭ", + "ãĥ¼ãĥ ĭ", + "Ġok uy", + "Ġoku y", + "o phy", + "op hy", + "oph y", + "า à¸Ļà¸Ħร", + "าà¸Ļ à¸Ħร", + "ĠÎķ θν", + "ay ım", + "ayı m", + "Ùİ Ø£", + "æİ ¡", + "Ġfunk ce", + "Ġfunkc e", + "æļ ĸ", + "Ø· ار", + "ĠÐĿ аг", + "ĠÐĿа г", + "Ġ ä¸ĩåĨĨ", + "Ġä¸ĩ åĨĨ", + "Ġ íĴį", + "ĠíĴ į", + "Ġ ä½ı", + "Ġ ï¼İ", + "Ġï¼ İ", + "Ñĭ ваÑİÑĤÑģÑı", + "Ñĭв аÑİÑĤÑģÑı", + "Ñĭва ÑİÑĤÑģÑı", + "ÑĭваÑİÑĤ ÑģÑı", + "ĠP la", + "ĠPl a", + "ا ÙĬÙĦ", + "اÙĬ ÙĦ", + "Ġ무 ìĹĩ", + "Ġкон еÑĩно", + "к м", + "à¤Ĥ पर", + "à¤Ĥप र", + "Ġ ìłķë¶Ģ", + "Ġìłķ ë¶Ģ", + "ĠëĤ´ 볤", + "ãĤ° ãĥ«", + "çģ °", + "Ġc yk", + "Ġcy k", + "Ġжел Ñĥд", + "ĠëĨĴ ìĿĢ", + "çĶŁ åij½", + "æµ ´", + "Ġart Ä±ÅŁ", + "Ġ Ðĩ", + "ĠÐ ĩ", + "ï¼ ²", + "e kim", + "ek im", + "eki m", + "ĠÑĦ едеÑĢа", + "ĠвеÑĢеÑģ нÑı", + "н иÑĤе", + "ни ÑĤе", + "ниÑĤ е", + "ĠÄ°ÅŁ te", + "ĠÙĪØ¶Ø¹ ÛĮت", + "ãģķ ãģ¾", + "ĠtÅĻ etÃŃ", + "ĠtÅĻet ÃŃ", + "u luÄŁ", + "ulu ÄŁ", + "ĠCumhur iyet", + "ä¼ Ł", + "Ġ ë§Ŀ", + "Ġë§ Ŀ", + "Ġver mek", + "Ġverm ek", + "Ġn alez", + "Ġna lez", + "Ġnal ez", + "Ġnale z", + "çĵ ¶", + "Ġd iÅŁ", + "Ġdi ÅŁ", + "ĠH á»ĵng", + "ĠHá»ĵ ng", + "غ ÙĬرة", + "غÙĬر Ø©", + "å© Ĩ", + "н ив", + "ни в", + "Ġr út", + "' nda", + "'n da", + "Ġh roz", + "Ġhr oz", + "à¥ī प", + "Ġза коном", + "Ġзак оном", + "Ġзакон ом", + "Ġзако ном", + "Ġjed nu", + "Ġjedn u", + "ĠKa dın", + "ĠKad ın", + "in dir", + "ind ir", + "indi r", + "س ازÛĮ", + "åĮº åŁŁ", + "ĠkonuÅŁ tu", + "Ġز ÙĨد", + "ĠزÙĨ د", + "ा ĊĊ", + "ाĊ Ċ", + "ĠÐIJ з", + "à¸ĩ à¸Ĥà¸Ńà¸ĩ", + "à¸ĩà¸Ĥ à¸Ńà¸ĩ", + "ĠÑģвой ÑģÑĤва", + "Ġìŀij íĴĪ", + "пе ки", + "Ġ å°±", + "Ġå° ±", + "ев ого", + "ево го", + "ĠtaÅŁ ıy", + "ĠÙħÙĨ Ø·ÙĤØ©", + "ĠÙħÙĨØ· ÙĤØ©", + "ĠÃĩ ocuk", + "Û² Û·", + "ĠÏĥÏħ μÏĢ", + "é£Ł åĵģ", + "h á", + "ï¼ ¯", + "ÙĦ ÙħÙĩ", + "ÙĦÙħ Ùĩ", + "ãģ¨ãģª ãģ£ãģŁ", + "о ÑĢÑĸ", + "оÑĢ Ñĸ", + "° }", + "ĠtaÅŁ ın", + "çŁ ¿", + "ĠÑĩаÑģÑĤ ини", + "ĠÑĩаÑģÑĤи ни", + "ĠدÙĬ سÙħبر", + "Ġ èī¯", + "Ġèī ¯", + "st ÅĻÃŃ", + "Ġ ÑĨик", + "ĠÑĨ ик", + "ĠÑĨи к", + "âĢķâĢķ âĢķâĢķ", + "Ġİng iltere", + "ĠÑģÑĤ ÑĢаÑĤег", + "ĠÑģÑĤÑĢ Ð°ÑĤег", + "ÃĦ Ÿ", + "и Ñĩного", + "иÑĩ ного", + "иÑĩно го", + "ÃŃ rk", + "ÃŃr k", + "ĠÎij Ïģ", + "! âĢľĊĊ", + "!âĢľ ĊĊ", + "Ġ 깨", + "Ġê¹ ¨", + "à¥ģà¤Ĩ त", + "ĠدÙĨÛĮ ا", + "ĠدÙĨ ÛĮا", + "l ÃŃn", + "lÃŃ n", + "Ġà¤ķ ड", + "ĠÙħ بت", + "ĠÙħب ت", + "ем ÑĭÑħ", + "о би", + "об и", + "ย à¸Ļà¸ķ", + "ยà¸Ļ à¸ķ", + "à¤Ĥध न", + "ÚĨ ÛĮ", + "Ġ çŁ¥", + "Ġç Ł¥", + "ĠçŁ ¥", + "ĠXu ân", + "a daki", + "ad aki", + "ada ki", + "Ġ orta", + "Ġor ta", + "Ġort a", + "æł¹ æľ¬", + "åħ± åIJĮ", + "н ений", + "не ний", + "нен ий", + "ب ÙĬرة", + "بÙĬ رة", + "بÙĬر Ø©", + "çŃ ĭ", + "ïº Ķ", + "âĢĮ ÙĩاÙĬ", + "âĢĮÙĩا ÙĬ", + "Ġö deme", + "Ġödem e", + "ĠØ¢ÙĨ ÚĨÙĩ", + "Ġза Ñıви", + "ĠзаÑıв и", + "ĠÙĨÙĤ Ø´Ùĩ", + "ĠÙĨÙĤØ´ Ùĩ", + "Ġ ç³»", + "Ġç ³»", + "Ġç³ »", + "à¥ĭ ।", + "Ġì§Ģ ìłķ", + "Ġin sp", + "Ġins p", + "Ġ ÑĤен", + "ĠÑĤ ен", + "ĠÑĤе н", + "Ġت Ø·", + "Ġqu ảng", + "Ġquả ng", + "Ġquản g", + "åī £", + "ãģı ãģ®", + "ĠÑĨ им", + "ĠÑĨи м", + "k ovi", + "ko vi", + "kov i", + "i yah", + "iy ah", + "iya h", + "Ġ ëIJľëĭ¤", + "ĠëIJľ ëĭ¤", + "ص Ùĩ", + "ĠÄij u", + "Ġsu á»ijt", + "ı ma", + "ım a", + "ì§Ģ ê³ł", + "Ì ĥ", + "à¸ļ าย", + "ĠCert if", + "ĠCer tif", + "ĠÑĥÑģ ÑĸÑħ", + "ĠÑĥÑģÑĸ Ñħ", + "à¸ķะ ว", + "εί ÏĦε", + "Ġ č", + "Ġмож ливÑĸÑģÑĤÑĮ", + "Ġможлив ÑĸÑģÑĤÑĮ", + "Ġ -âĢIJ", + "Ġ- âĢIJ", + "Ġ íĺ¹", + "Ġíĺ ¹", + "ìĤ¬ ì§Ħ", + "Ġд аниÑħ", + "Ġда ниÑħ", + "Ġдан иÑħ", + "Ġzah áj", + "주 ëĬĶ", + "Ġг ид", + "n iž", + "ni ž", + "Ġ^{ °}", + "Ġk ro", + "Ġkr o", + "Äį en", + "Äįe n", + "ÏĨ ι", + "ımız da", + "Ġ æ¹ĸ", + "Ġæ¹ ĸ", + "Ġпов ÑĢежд", + "Ġì¡´ ìŀ¬", + "à¸Ļ าà¸Ļ", + "à¸Ļา à¸Ļ", + "μÎŃ Î½Î¿ÏĤ", + "μÎŃν οÏĤ", + "μÎŃνο ÏĤ", + "æ½ ľ", + "ï¼Į 使", + "Ġd osp", + "Ġdo sp", + "Ġdos p", + "Ġl iá»ģn", + "Ġli á»ģn", + "ัà¸ļ à¸Ħวาม", + "ัà¸ļà¸Ħ วาม", + "ĠÑĢабоÑĤ е", + "ĠÑĢаб оÑĤе", + "ĠÑĢабо ÑĤе", + "Ġмай бÑĥÑĤ", + "à¹Ģà¸ģ ษ", + "B aÅŁ", + "Ba ÅŁ", + "Ġ æĿ±äº¬", + "ĠæĿ± 京", + "наÑĩ ала", + "δ ει", + "δε ι", + "à¥Ī प", + "Ñĸ мÑĸ", + "Ñĸм Ñĸ", + "Ġf izik", + "Ġfi zik", + "Ġfiz ik", + "ว ล", + "ä¼ į", + "Ġ à¸Ĭà¸Ļะ", + "Ġà¸Ĭ à¸Ļะ", + "' ÑıÑĤ", + "'Ñı ÑĤ", + "н ил", + "ни л", + "и нов", + "ин ов", + "ĠÄijo án", + "รว à¸Ī", + "f et", + "fe t", + "à¹Į à¹Ĥ", + "Ġ маÑĤи", + "Ġм аÑĤи", + "ĠмаÑĤ и", + "Ġма ÑĤи", + "é¨ İ", + "Ðļ Т", + "à¹Ģส à¸Ļà¸Ń", + "à¹Ģสà¸Ļ à¸Ń", + "Ġм ав", + "Ġма в", + "lı ģına", + "lıģı na", + "lıģ ına", + "lıģın a", + "Ġпо Ñĩина", + "ĠпоÑĩ ина", + "ู à¸ķร", + "ูà¸ķ ร", + "ÑĨ еÑĢ", + "ÑĨе ÑĢ", + "uj ete", + "uje te", + "ujet e", + "Ġtah min", + "Ġвим ог", + "า à¸Ł", + "าภŁ", + "е дж", + "ед ж", + "ÏĦ εÏį", + "ÏĦε Ïį", + "ad la", + "ĠÄij ương", + "Ġد استاÙĨ", + "Ġbas ın", + "Ġba sın", + "ĠÑħ в", + "Ġ reak", + "Ġre ak", + "ĠоÑĤ меÑĤ", + "æ³ ¥", + "Ġm áte", + "Ġmá te", + "Ġmát e", + "Ġzo run", + "Ġzor un", + "ã썿ĢĿ ãģĨ", + "Ġدر جة", + "ĠвÑĸд ÑģÑĥÑĤ", + "Ġع اÙħÙĦ", + "ĠعاÙħ ÙĦ", + "èĶ µ", + "Ġson raki", + "Ġsonra ki", + "Ġmoh li", + "Ġmohl i", + "и ваеÑĤ", + "ив аеÑĤ", + "ива еÑĤ", + "ĠпÑĸд ÑģÑĤав", + "Ġost rov", + "Ġostr ov", + "ान व", + "âĢŀ P", + "Ġви знаÑĩа", + "ĠвизнаÑĩ а", + "Ġprav dÄĽpodob", + "Ġz az", + "Ġza z", + "ìĿ´ 를", + "Ġдж еÑĢ", + "ĠÐł ад", + "ĠÐłÐ° д", + "ĠÑģеÑĢÑĮ ез", + "Ġ дем", + "Ġд ем", + "Ġде м", + "ÏĢ Î®", + "ĠÐĦ вÑĢоп", + "ĠÐĦв ÑĢоп", + "ĠÄįesk é", + "ĠÄįe ské", + "ï¾ ı", + "Ġ ØŃÙĬ", + "ĠØŃ ÙĬ", + "ì¼ ĢìĿ´", + "ì¼Ģ ìĿ´", + "ĠØ® ÙĪÙĨ", + "ĠØ®ÙĪ ÙĨ", + "Âł L", + "ãģĦ ãģ«", + "из неÑģ", + "ĠÙħ ÙĤاÙħ", + "ĠÙħÙĤ اÙħ", + "ĠاÙĦ ØŃÙĦ", + "ĠاÙĦØŃ ÙĦ", + "ëĨ į", + "ĠØ¢ ÛĮا", + "ĠØ¢ÛĮ ا", + "ç¿ ¼", + "ï¼ ½", + "æ¸ IJ", + "ли вÑĸ", + "лив Ñĸ", + "ãģĦ ãģ¦ãģĦãĤĭ", + "ãģĦãģ¦ ãģĦãĤĭ", + "Ġ ÎijÎł", + "ĠÎij Îł", + "ĠиÑģполÑĮз ÑĥеÑĤÑģÑı", + "ĠиÑģполÑĮзÑĥ еÑĤÑģÑı", + "Ġm át", + "Ġmá t", + "Ġμε γά", + "Ġμεγ ά", + "ëħ ¼", + "æµ· éģĵ", + "ĠÙħØ´Ú© ÙĦات", + "ĠÙħØ´Ú©ÙĦ ات", + "Ñĩ на", + "'; ';", + "Ġ μία", + "Ġμ ία", + "Ïģ Ïİν", + "ÏģÏİ Î½", + "Ġby ste", + "ĠÑįлек ÑĤÑĢи", + "ĠÑįлекÑĤÑĢ Ð¸", + "ĠY ardım", + "ĠYard ım", + "ĠYar dım", + "Ġh át", + "Ġhá t", + "ĠÐĶ ÐµÑĢжав", + ". С", + "Ġo rada", + "Ġor ada", + "Ġora da", + "Ġal anı", + "Ġalan ı", + "åľ° åŁŁ", + "ĠدÙĩ ÙĨد", + "мен ÑĪ", + "ĠоÑĢг анов", + "ĠоÑĢган ов", + "Ġع ص", + "ู à¸ĩส", + "ูà¸ĩ ส", + "ĠØ´ عر", + "Ġشع ر", + "Ġìĸ »", + "Ġά λλ", + "Ġάλ λ", + "Ġg ói", + "Ġgó i", + "ĠÙĨ اØŃ", + "å¼ ĺ", + "à¥įथ ल", + "i lim", + "il im", + "ili m", + "ëIJĺ ì§Ģ", + "Ġкон ÑĨе", + "ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł", + "Ġì¤Ģ ë¹Ħ", + "Ġostat nÃŃ", + "Ġvlá dy", + "Ġvlád y", + "ĠÑģо биÑĢа", + "ĠÑģоб иÑĢа", + "ĠìĹŃ ìĤ¬", + "à¹ģ à¸ģรม", + "à¹ģà¸ģ รม", + ". ï¼ı", + "Ùı ÙĪÙĨ", + "ÙıÙĪ ÙĨ", + "Ù¾ س", + "ĠW ikip", + "ĠWi kip", + "ĠWiki p", + "ĠWik ip", + "Ġ æ¾", + "Ġæ ¾", + "Ġж аÑĢ", + "容 æĺĵ", + "ĠprostÅĻed nictvÃŃm", + "Ġž eny", + "Ġže ny", + "Ġžen y", + "Ġèı²å¾ĭ宾 çͳåįļ", + "а ÑİÑĤÑģÑı", + "аÑİÑĤ ÑģÑı", + "Ġm iêu", + "Ġmi êu", + "Ġp enÃŃze", + "δ ιά", + "δι ά", + "ol dur", + "old ur", + "ĠпÑĢимеÑĢ Ð½Ð¾", + "ĠìŀĪ ê³ł", + "à¸ĩ à¸Ńย", + "к овий", + "ко вий", + "ков ий", + ". ÎŁ", + "à¹ĥ à¸Ħร", + "çĭ ł", + "ĠÐŁ Ñĸв", + "æĶ¹ éĿ©", + "ĠÐĿаÑģ еление", + "Å¡et ÅĻ", + "ÙĴ ب", + "Ġ âĶĢ", + "ĠâĶ Ģ", + "غ ÙĬÙĦ", + "ĠдÑĸÑıлÑĮ нÑĸÑģÑĤÑĮ", + "ĠÙĦ ÙĬس", + "ĠÙĦÙĬ س", + "Ġìĭľ ìŀ¥", + "ãĥŁ ãĥ¥", + "ĠÚ© ÙĪØª", + "ĠÚ©ÙĪ Øª", + "ĠÎĵ ι", + "ิ à¹Ģว", + "e ktor", + "ek tor", + "ekt or", + "ĠбÑĥд Ñĥ", + "ĠбÑĥ дÑĥ", + "но важ", + "нов аж", + "нова ж", + "Ñī аеÑĤÑģÑı", + "Ñīа еÑĤÑģÑı", + "Ġng ôn", + "ĠvÄĽ c", + "å¾ IJ", + "à¸Ńà¹Ģม ร", + "ัà¸į à¸Ĭ", + "ĠиÑģполÑĮз ÑĥÑİÑĤ", + "ĠиÑģполÑĮзÑĥ ÑİÑĤ", + "r ubu", + "ru bu", + "rub u", + "Ġnh á»±a", + "ãģĮ ãģĬ", + "ĠÐĵ аÑĢ", + "о ÑĢе", + "оÑĢ Ðµ", + "Ġз олоÑĤ", + "æ Ł³", + "æŁ ³", + "Ġ ÙĬØ´", + "ĠÙĬ Ø´", + "Ġповин нÑĸ", + "اÙĤ تص", + "ÙĦ ØŃ", + "ĠокÑĤ ÑıбÑĢÑı", + "ĠnÄĽk dy", + "Ġо бÑĢа", + "Ġоб ÑĢа", + "ست Ú¯ÛĮ", + "符 åIJĪ", + "Ġth iá»ĥu", + "æĺ¯ ä»Ģä¹Ī", + "Ġro zs", + "Ġroz s", + "ì½ľ 걸", + "Ġк аÑĦ", + "Ġка ÑĦ", + "åIJĮ æŃ¥", + "ì¼ ĵ", + "ÏĢ ÏĦÏħ", + "à¸ł ายà¹ĥà¸Ļ", + "ι ÏĥÏĦή", + "ιÏĥ ÏĦή", + "ĠدÙĪÙĦ ار", + "ĠÙħا ÙĬÙĪ", + "ĠÙħاÙĬ ÙĪ", + "Ġ peÄį", + "Ġp eÄį", + "Ġpe Äį", + "ัà¸ļ ม", + "ÎĻ ÎĶ", + "ı ydı", + "ıy dı", + "ัà¸ģ à¸Ĺ", + "à¸Ľà¸£à¸° à¸ĸม", + "κ αι", + "κα ι", + "Ġpro dej", + "Ġprod ej", + "ĠиÑİ Ð»Ñı", + "Ġv Å©", + "é© ±", + "Ġh vÄĽ", + "Ġhv ÄĽ", + "æĥ³ è¦ģ", + "ç¯ Ħ", + "ç ak", + "ça k", + "Ġм Ñıг", + "ım ın", + "ımı n", + "Ġdisp ozici", + "Ġu kaz", + "Ġuk az", + "r acak", + "ra cak", + "rac ak", + "Ġболез ни", + "ว à¹Ĥม", + "Ġз ел", + "ĠÐĴ ики", + "ĠÐĴи ки", + "ĠÐĴик и", + "ĠÐł од", + "ูà¸ģ à¸Ħ", + "í ij¸", + "Ġth ải", + "ĠbaÄŁ ımsız", + "ĠÑĢоÑģ Ñģий", + "ĠÐļ ам", + "ĠÐļа м", + "ĠиÑģполÑĮзов аниÑı", + "ĠиÑģполÑĮз ованиÑı", + "ĠиÑģполÑĮзовани Ñı", + "ĠØŃ ذ", + "Âł ³³³³³³³³", + "³³ ³³³³³³³", + "³³³³ ³³³³³", + "³³³ ³³³³³³", + "³³³³³³³³ Âł", + "³³³³³³³ ³³", + "³³³³³ ³³³³", + "³³³³³³ ³³³", + "ĠاÙĨت ÙĤاÙĦ", + "Ġаб ÑģолÑİÑĤ", + "Ġ Ä±ÅŁÄ±k", + "ĠÄ±ÅŁÄ± k", + "ÏĦο γÏģαÏĨ", + "ĠболÑĮÑĪ Ð¾Ð¹", + "Ġعب ارت", + "Ġعبار ت", + "ÃŃ Å¾", + "Ġدر ست", + "Ġدرس ت", + "ĠÑģл ово", + "ĠÑģлов о", + "ĠÑģло во", + "à¥Ī Ċ", + "ب ÙĪØ¨", + "بÙĪ Ø¨", + "ĠÐĴ оÑĤ", + "ĠÐĴо ÑĤ", + "ว à¹Ħà¸Ľ", + "Ġbil inen", + "Ġbilin en", + "Ġ ÙĤÙĬ", + "ĠÙĤ ÙĬ", + "Ġbun ların", + "Ġbunlar ın", + "Ġbunları n", + "Ùij ت", + "Ġbas it", + "Ġba sit", + "ë¦ ¿", + "ائ رة", + "ائر Ø©", + "Ġp ů", + "Ġed ilmiÅŁ", + "Ġedilm iÅŁ", + "Ġedil miÅŁ", + "Ġ ä½IJ", + "ĠYön etim", + "ĠYönet im", + "Ùħ ÛĮر", + "ÙħÛĮ ر", + "Ġsp ou", + "Ġspo u", + "æ·± åľ³", + "Ġвза ÑĶм", + "ÎĻ ÎĽ", + "Ð ĥ", + "ĠдеÑĢжав ноÑĹ", + "Ġ mrt", + "Ġm rt", + "Ġmr t", + "ĠDe mir", + "ĠDem ir", + "é» İ", + "ĠÑĢег ÑĥлÑıÑĢ", + "Ġник огда", + "å¼ ¾", + "à¥ī ड", + "Ġг лаз", + "Ġгла з", + "ĠÙħÛĮ Ú©ÙĨ", + "ĠÙħÛĮÚ© ÙĨ", + "éĻIJ å®ļ", + "Ġнав к", + "Ġпод ÑĤ", + "ĠتصÙĪ ÛĮر", + "ĠاÙĦØŃ دÙĬØ«", + "Ġdo Å¡lo", + "нÑİ Ñİ", + "ĠÑģ Ñħод", + "ĠÑģÑħ од", + "Ø· ÙĤØ©", + "ĠÑģенÑĤ ÑıбÑĢÑı", + "çī¹ æ®Ĭ", + "à¸ģาร à¹ģà¸Ĥ", + "á zd", + "áz d", + "ÑĶ ÑĤе", + "ĠΣ ε", + "ĠÙĦ ÙĥÙĦ", + "ĠÙĦÙĥ ÙĦ", + "åIJį åŃĹ", + "اÙĨ ÛĮا", + "اÙĨÛĮ ا", + "Ġc ins", + "Ġcin s", + "Ġci ns", + "기 ìĹħ", + "Ġ éŁ³", + "Ġé Ł³", + "ĠéŁ ³", + "éł ĥ", + "ย าย", + "ยา ย", + "ìļ ķ", + "ĠvÃŃ tÄĽz", + "à¥įर ब", + "Ġشر ÙĤÛĮ", + "ĠشرÙĤ ÛĮ", + "ĠbezpeÄį nost", + "Ġçerç ev", + "Ġ ë§Ľ", + "Ġë§ Ľ", + "c ky", + "ck y", + "ĵ ¨", + "ĠÑĥм оваÑħ", + "ĠÑĥмов аÑħ", + "л иÑħ", + "ли Ñħ", + "m eniz", + "men iz", + "meni z", + "Ġب Ú¯ÛĮر", + "Ġبگ ÛĮر", + "ÙĨ Ùī", + "Ġ à¸ģารà¹ģà¸Ĥ", + "Ġà¸ģาร à¹ģà¸Ĥ", + "ι Ïĥε", + "ιÏĥ ε", + "â̳ E", + "Ġdönem inde", + "리 ì¹´", + "Ġ åΰ", + "ĠåĪ °", + "Ġhu kuk", + "Ġhuku k", + "а ÑĤоÑĢа", + "аÑĤ оÑĢа", + "аÑĤоÑĢ Ð°", + "аÑĤо ÑĢа", + "ĠاÙĦ عÙĨ", + "ĠاÙĦع ÙĨ", + "ïº ĺ", + "ün üz", + "ünü z", + "Ñģ оÑĤ", + "Ñģо ÑĤ", + "ุ ษ", + "Ġd ương", + "ov ny", + "Ġ ÑĦоÑĢма", + "ĠÑĦоÑĢм а", + "ĠÑĦоÑĢ Ð¼Ð°", + "ãģĹ ãģ®", + "ãģĹãģ ®", + "ز ÙĬز", + "زÙĬ ز", + "ĠاÙĦÙĨ اس", + "Ġ Ñĩим", + "ĠÑĩ им", + "ĠÑĩи м", + "大 人", + "Ú¯ ÙĬ", + "ĠÐĵ оÑģп", + "é¢Ĩ 导", + "Ġn inh", + "Ġni nh", + "Ġnin h", + "Ġร าà¸Ħา", + "Ġราà¸Ħ า", + "ÙĤ اء", + "ìī ¬", + "ĠìĿ´ ìłĦ", + "ĠÃ¶ÄŁret men", + "ĠÑĨвеÑĤ а", + "ен ноÑģÑĤÑĮ", + "енно ÑģÑĤÑĮ", + "大 ãģį", + "ĠмиÑģÑĤ еÑĨÑĤ", + "ر ÙĪØª", + "رÙĪ Øª", + "p oÅĪ", + "po ÅĪ", + "ĠÅŀ irket", + "ĠкÑĢаÑģ ив", + "ĠÑĢеÑģ ÑĥÑĢÑģ", + "ĠÑĢеÑģÑĥÑĢ Ñģ", + "ä¹ ¾", + "Ġ ÙģÙĩ", + "ĠÙģ Ùĩ", + "ĠY Ãĸ", + "èĬ ³", + "μ ÏīÏĤ", + "ÄĽ ji", + "ÄĽj i", + "Ġв лаж", + "Ġвла ж", + "ĠÑĥв ели", + "ا ذا", + "اذ ا", + "ãĢĤ å¦Ĥæŀľ", + "ĠпÑĢи ÑģÑĥÑĤÑģÑĤв", + "ĠẤ n", + "æĢ ĸ", + "ĠÐľ еÑĤ", + "Ġje dna", + "Ġjed na", + "Ġjedn a", + "Ġc ục", + "Ġcụ c", + "ĠاÙĨت شار", + "Ġз окÑĢема", + "и ÑĩеÑģки", + "иÑĩеÑģ ки", + "ĠкÑĢаÑĹ Ð½Ð¸", + "ĠкÑĢаÑĹн и", + "и ÑĢÑĥ", + "иÑĢ Ñĥ", + "ĠÑĸн ÑĤеÑĢ", + "ĠÑĸнÑĤ еÑĢ", + "Ġан алог", + "Ñ Ľ", + "ี à¸ĭ", + "н Ñĥли", + "нÑĥ ли", + "нÑĥл и", + "ĠN inh", + "ĠNi nh", + "ĠNin h", + "еÑĢ Ð°ÑĤоÑĢ", + "еÑĢа ÑĤоÑĢ", + "Ġr uce", + "Ġru ce", + "ĠÑĪ ÐºÑĸ", + "ĠÑĪк Ñĸ", + "تر ÙĨت", + "Ġson rası", + "Ġsonra sı", + "Ġ æį", + "Ġæ į", + "ÑĨен ÑĤÑĢа", + "ÑĨенÑĤ ÑĢа", + "Ġà¸Ńำ à¹Ģà¸ł", + "Ø· ÙĬ", + "ï¼Į å½ĵ", + "ĠÑĤ ÑĢеÑħ", + "ĠÑĤÑĢ ÐµÑħ", + "Âł H", + "æ´ ª", + "ãĥ³ ãĥĦ", + "ãĥ³ãĥ Ħ", + "ĠвÑĸдповÑĸд алÑĮ", + "âĢĻ daki", + "âĢĻd aki", + "âĢĻda ki", + "á ÅĻi", + "áÅĻ i", + "ĠpÅĻ em", + "ĠpÅĻe m", + "t uk", + "tu k", + "ĠÙ쨱 ÙħÙĪØ¯", + "ĠÙ쨱Ùħ ÙĪØ¯", + "Ġ ìĿ¸ì¦Ŀ", + "ĠìĿ¸ ì¦Ŀ", + "สำ à¸Ļ", + "ìĥģ ìĿĺ", + "ÅĻ ÃŃm", + "ÅĻÃŃ m", + "æ¾ ¤", + "Ġ ÑĢей", + "ĠÑĢ ÐµÐ¹", + "ĠÑĢе й", + "ĠлÑİб ой", + "u jte", + "uj te", + "ë³µ ì§Ģ", + "Ġ درس", + "Ġد رس", + "Ġدر س", + "ĠÐĴ лади", + "ĠÑģво им", + "ĠÑģвои м", + "ĠìĿ¸íĦ° ëĦ·", + "è± Ĭ", + "Ġн алог", + "Ġнал ог", + "ãĤĪ ãģ³", + "ĠØ® اطر", + "Ġ ìŀħëĭĪëĭ¤", + "Ġìŀħ ëĭĪëĭ¤", + "ãĢĤ ãģĹãģĭãģĹ", + "л аг", + "ла г", + "å° ĸ", + "ëĭ ¥", + "ìĬ¤ ëĬĶ", + "ìĭł ì²Ń", + "ãĥĩ ãĥ¼ãĤ¿", + "ĠÑĥÑĢов нÑı", + "Ġ무 ìĬ¨", + "ĠاÙĦØ£ رض", + "à¹ī à¸ķ", + "Ỽ t", + "ĠÙĨÛĮ رÙĪ", + "ĠÙĨÛĮر ÙĪ", + "å¢ ¨", + "ãĤ¶ ãĥ¼", + "r uba", + "ru ba", + "rub a", + "ĠÙĨØ´ دÙĩ", + "и лÑı", + "ил Ñı", + "a cÃŃm", + "ac ÃŃm", + "acÃŃ m", + "ãĥ© ãĤ¯", + "X H", + "Ġس رد", + "Ġسر د", + "Ġद स", + "t ember", + "tem ber", + "ĠDoÄŁ um", + "ĠDoÄŁu m", + "ĠпÑĢ Ð¾ÑĢ", + "ĠпÑĢо ÑĢ", + "θ οÏĤ", + "θο ÏĤ", + "ĠiÅŁ e", + "à¸Ń à¸Ł", + "л аÑĪ", + "ла ÑĪ", + "اص ÙĦÙĩ", + "اصÙĦ Ùĩ", + "l ivÄĽ", + "li vÄĽ", + "liv ÄĽ", + "ë¶Ģ ë¶Ħ", + "н ак", + "на к", + "åįģ ä¸ī", + "ส าห", + "à¸Ľà¸£à¸°à¹Ģà¸Ĺศ à¹Ħà¸Ĺย", + "ãĤŃ ãĥ³ãĤ°", + "ĠмеÑĤ оÑİ", + "Ġkullan arak", + "âij ¡", + "ÛĮز ات", + "ĠÙħÙĪØ¨ اÛĮÙĦ", + "ĠзнаÑĩ иÑĤ", + "Ġзна ÑĩиÑĤ", + "Ġorgan izace", + "Ġorganiz ace", + "ÑĢ Ð¸Ð¸", + "ÑĢи и", + "ov na", + "Ġ ê²½ìłľ", + "Ġê²½ ìłľ", + "ãĢģ å½¼", + "Ġम स", + "Ġ à¹Ĥà¸Ľà¸£", + "Ġà¹Ĥ à¸Ľà¸£", + "L ARI", + "LA RI", + "LAR I", + "æĩ Ĥ", + "Ġ ва", + "Ġв а", + "ĠÙĥ ÙĨت", + "ĠÙĥÙĨ ت", + "ĠÑĢабоÑĤ а", + "ĠÑĢаб оÑĤа", + "ĠÑĢабо ÑĤа", + "Âł ĠÂłĠÂł", + "ÂłĠ ÂłĠÂł", + "ÂłĠÂł ĠÂł", + "好 äºĨ", + "ĠzamÄĽst n", + "ж енÑĮ", + "же нÑĮ", + "жен ÑĮ", + "Ġu kon", + "Ġuk on", + "nÄĽ né", + "nÄĽn é", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "ĠاÙĦخاص Ø©", + "ĠÄį asu", + "ĠÄįas u", + "å°ı 说", + "ĠØŃر کت", + "æij Ħ", + "Ïĩ Ïī", + "ĠÑģв еж", + "æĸ° éĹ»", + "Ġ ìĭ±", + "Ġìĭ ±", + "Ġe ÄŁer", + "ĠeÄŁ er", + "Ġsitu ace", + "Ġ ç·¨", + "Ġç ·¨", + "Ġç· ¨", + "f ik", + "fi k", + "ë§ Īëĭ¤", + "ë§Ī ëĭ¤", + "Îķ Îļ", + "Ġê°ľ ìµľ", + "Ġc Ãł", + "ا دث", + "اد Ø«", + "Ġsay ıda", + "Ġsayı da", + "ĠØ£ Ù쨶ÙĦ", + "ĠØ£Ùģ Ø¶ÙĦ", + "æ³ķ éĻ¢", + "Ġ .,", + "Ġ. ,", + "ĠTh ương", + "Ïģ ÏĮÏĤ", + "ÏģÏĮ ÏĤ", + "ãģĹ ãĤĪãģĨ", + "Ç İ", + "æ ij¸", + "æij ¸", + "Ġ éϳ", + "ĠéĻ ³", + "¥ IJ", + "ฤ à¸Ķ", + "Ġgi ảng", + "Ġgiả ng", + "Ġgiản g", + "ĠлÑİ Ð±Ð¾Ð²", + "ĠлÑİб ов", + "Ġek ran", + "о пиÑģ", + "оп иÑģ", + "еж дÑĥ", + "Ġназ ва", + "æĭ ĵ", + "ı f", + "à¹Ī à¸ģ", + "и ÑĩнÑĸ", + "иÑĩ нÑĸ", + "Ġ ê³Ħíļį", + "Ġê³Ħ íļį", + "à¸ł าà¸Ħม", + "à¸łà¸²à¸Ħ ม", + "Ġ اپ", + "Ġا Ù¾", + "리 ìĿĺ", + "ãģ§ãģĻ ãģĮ", + "Ġkon ci", + "Ġکار خاÙĨÙĩ", + "Ġ ä½ķ", + "ĠÑĤ ва", + "ĠÑĤв а", + "ĠÐŁ оÑģÑĤ", + "ĠÐŁÐ¾ ÑģÑĤ", + "ĠÐŁÐ¾Ñģ ÑĤ", + "ĠапÑĢ ÐµÐ»Ñı", + "ĠاÙĦع راÙĤ", + "ä¸Ń åįİ", + "à¹ĩ à¸Ńà¸ģ", + "à¥įत à¤ķ", + "Ġz ájem", + "Ġzá jem", + "Ġدر جÙĩ", + "Ġब à¥ľ", + "ĠÑģÑĤ ÑĢан", + "ĠÑģÑĤÑĢ Ð°Ð½", + "ĠÑģÑĤÑĢа н", + "èѦ å¯Ł", + "Ġyer leÅŁtir", + "ĠyerleÅŁ tir", + "ĠV Å©", + "ç¾İ åħĥ", + "Ġì¡° ê¸Ī", + "Ġ รà¸Ńà¸ĩ", + "Ġร à¸Ńà¸ĩ", + "Ġak adem", + "Ġaka dem", + "à¸Ħ à¸ĵะ", + "Ġpoz it", + "Ġkon eÄį", + "Ġkone Äį", + "è°ĥ æŁ¥", + "Ġ ãģĭ", + "ĠÄįerv ence", + "ĠOd kazy", + "ĠëıĦ ìĭľ", + "ั สà¸Ķ", + "ัส à¸Ķ", + "Ġg ái", + "ĠÐł об", + "Ġб оÑı", + "Ġбо Ñı", + "æī ©", + "å¼Ģ å±ķ", + "a nik", + "an ik", + "ani k", + "Ġvy ž", + "ĠbaÅŁ lay", + "Ġbak Ä±ÅŁ", + "ek ce", + "ÑģÑĤ ика", + "ÑģÑĤи ка", + "еÑĢа ÑĤÑĥÑĢа", + "еÑĢаÑĤÑĥ ÑĢа", + "Ġë¶Ħ ë¥ĺ", + "ĠPo Äįet", + "od áÅĻ", + "ëĭĺ ìĿĺ", + "Ġk lid", + "Ġkl id", + "Ġkli d", + "Û² Û¹", + "ĠÚĨ ÛĮز", + "m ür", + "Ġs ứ", + "ÙĬا ÙĨØ©", + "ÙĬاÙĨ Ø©", + "åĬ ±", + "Ġ oku", + "Ġo ku", + "Ġok u", + "Ġв оди", + "Ġво ди", + "Ġвод и", + "ĠزÛĮر ا", + "ĠزÛĮ را", + "大 åĪ©", + "ĠÙĦ ÛĮÙĨÚ©", + "ĠÙĬ جب", + "ĠÙĬج ب", + "Ùħ ÛĮÙĦ", + "ÙħÛĮ ÙĦ", + "ĠÏĥ ÏĦÏģα", + "æĻ ĵ", + "ิ สà¸ķ", + "ิส à¸ķ", + "ĠÅŁ iddet", + "ĠÑĢекомен да", + "Ġpožad av", + "Ġп ÑĸÑģ", + "åħ¬ å¼ı", + "Ġ Ú¯ÛĮرÛĮ", + "ĠÚ¯ ÛĮرÛĮ", + "ĠÚ¯ÛĮ رÛĮ", + "ĠÚ¯ÛĮر ÛĮ", + "к ÑĤа", + "кÑĤ а", + "ĠÙħÙĨ اطÙĤ", + "Ġfirm y", + "Ġfir my", + "Ġ à¹Ħà¸Ľ", + "Ġà¹Ħ à¸Ľ", + "Ġ ÎŃÏģγ", + "ĠÎŃ Ïģγ", + "å¿« éĢŁ", + "ãģĮ ãģªãģĦ", + "н еÑģÑĤи", + "не ÑģÑĤи", + "неÑģ ÑĤи", + "Ġ ç²¾", + "Ġç² ¾", + "ÑĢ Ð°Ð´Ð¸", + "ÑĢа ди", + "ÑĢад и", + "ãĤĴ ãģĭ", + "ïº ª", + "ky nÄĽ", + "Ġह त", + "t ak", + "ta k", + "ĠÙĬÙĪÙĨ ÙĬÙĪ", + "ö ÄŁ", + "Ġ ÑĢÑĥк", + "ĠÑĢ Ñĥк", + "ĠÑĢÑĥ к", + "åľĭ éļĽ", + "Ñİ ÑģÑĮ", + "Ġдав но", + "Ġp opis", + "Ġpop is", + "Ġpo pis", + "ĠB İL", + "ĠÙĨ ÙĤد", + "ĠÙĨÙĤ د", + "ĠÑģп ож", + "ÑĨион нÑĭÑħ", + "ĠÑĪ Ð¿", + "Ñĥ ÑİÑīиÑħ", + "ÑĥÑİ ÑīиÑħ", + "ÑĥÑİÑī иÑħ", + "ĠвоздÑĥ Ñħ", + "ÑĤ ие", + "ÑĤи е", + "ĠU ž", + "ÏĮ δ", + "à¸ģร าà¸Ħม", + "Ġalan ında", + "Ġalanı nda", + "Ġs ắt", + "ãĥIJ ãĤ¤", + "Ng Ãły", + "Ġ ë¹Į", + "Ġë¹ Į", + "ï¼ī ãģ¯", + "Ġ ä¿¡", + "Ðķ С", + "ĠT ato", + "ĠTa to", + "ĠTat o", + "Ġún ora", + "e rap", + "er ap", + "era p", + "Ä ł", + "ĠT áºŃp", + "Ġкомп ании", + "ãĥ© ãĤ¤ãĥĪ", + "ãĥ©ãĤ¤ ãĥĪ", + "éľĢ æ±Ĥ", + "Ġت ÙĪÙĤ", + "ĠتÙĪ ÙĤ", + "âĢĻ âĢĻ", + "ëŀį ëĭĪëĭ¤", + "ĠквÑĸÑĤ нÑı", + "Ġoyun cu", + "ÂĢÂĢÂĢÂĢ ÂĢÂĢÂĢÂĢ", + "åĨ Ĭ", + "Ġyap mÄ±ÅŁ", + "ัà¸ĩ à¹Ħม", + "Ġзап аÑħ", + "á la", + "ál a", + "ĠÑĤеÑħ ниÑĩеÑģ", + "Ġ ØŃص", + "ĠØŃ ص", + "ร à¸Ķ", + "å¼ Ħ", + "ĠÚ¯ÛĮ اÙĩ", + "اÙĩ رة", + "اÙĩر Ø©", + "Ġà¤ı ड", + "ним аеÑĤ", + "нима еÑĤ", + "ا دÙĨ", + "اد ÙĨ", + "Îľ Îij", + "Ġ 社", + "Ġç¤ ¾", + "аÑĢ Ñĩ", + "ت ز", + "æ¶ ¦", + "in izin", + "ini zin", + "iniz in", + "inizi n", + "Ġbey az", + "Ġ بÙĪÙĦ", + "Ġب ÙĪÙĦ", + "ĠبÙĪ ÙĦ", + "åĿ ¡", + "ãģ® ãĤĪãģĨãģ«", + "Ġyap tıģ", + "Ġyaptı ÄŁ", + "Ġd aģı", + "Ġda ģı", + "ĠdaÄŁ ı", + "ĠbaÅŁ arı", + "ĠbaÅŁar ı", + "Ġ ÏĢά", + "ĠÏĢ Î¬", + "ĠпÑĢод аж", + "B á»Ļ", + "Ġत त", + "Ġpod stat", + "Ġpods tat", + "Ġ æµģ", + "Ġæµ ģ", + "Ġzdrav ÃŃ", + "Ġ ç¡", + "Ġç ¡", + "Ġ opak", + "Ġo pak", + "Ġop ak", + "Ġhá»į a", + "æĭ Ķ", + "Ñĥ жд", + "Ñĥж д", + "Ġtr ứng", + "ÙĪØ± ÙĬØ©", + "ÙĪØ±ÙĬ Ø©", + "Ñĭ л", + "um suz", + "ums uz", + "Ġ سبب", + "Ġسب ب", + "许 å¤ļ", + "å®ŀ éªĮ", + "Ġб оли", + "Ġбол и", + "Ġбо ли", + "Ġd uyá»ĩt", + "áºŃ c", + "ĠÐij ез", + "ĠبÙĦ ÙĨد", + "м м", + "ÑĢ ÐµÐ»", + "ÑĢе л", + "N İ", + "Ġ ãĥ¯", + "Ġãĥ ¯", + "éĭ ¼", + "ĠÑģв Ñı", + "Ġ åIJİ", + "ĠåIJ İ", + "Ġmu ht", + "Ġmuh t", + "ĠпÑĢоблем и", + "ĠÑĤÑıж ел", + "ĠС ем", + "ฤษ à¸łà¸²à¸Ħม", + "à¹Ī าà¸ķ", + "à¹Īา à¸ķ", + "ör ü", + "üy orum", + "üyor um", + "ĠاÙĦØ£ ØŃ", + "ĠÑģÑĤÑĢ Ð°ÑĪ", + "ĠÑģÑĤÑĢа ÑĪ", + "h oo", + "ho o", + "ध र", + "Ġt lak", + "Ġtl ak", + "Ġsrp na", + "ifik ace", + "Ġ reh", + "Ġre h", + "Ġr eh", + "Ġм инÑĥ", + "Ġмин Ñĥ", + "Ġми нÑĥ", + "ãĢĢ j", + "ĠгÑĢÑĥ пи", + "ĠгÑĢÑĥп и", + "Ġ άλ", + "Ġά λ", + "Ġolur sa", + "λογ ία", + "ĠÐĴ ик", + "ĠÐĴи к", + "Ġmüc adel", + "Ġz ávÄĽ", + "Ġzá vÄĽ", + "Ġzáv ÄĽ", + "ĠÑĦев ÑĢа", + "Äį ná", + "à¹Į à¹Ģà¸ĭ", + "ĠÙĦ ÙĦØŃ", + "ĠÙĦÙĦ ØŃ", + "ÑĢ Ð¸Ð¿", + "ÑĢи п", + "Ġб Ñĥк", + "ĠбÑĥ к", + "ãģĪ ãģªãģĦ", + "Ġpo rad", + "Ġpor ad", + "Ġsa mostat", + "Ġsam ostat", + "Ġsamo stat", + "Ġt esis", + "Ġte sis", + "Ġtes is", + "اب ÙĤÙĩ", + "ابÙĤ Ùĩ", + "Ġجد ÙĬدة", + "ĠجدÙĬد Ø©", + "éĢ Ĵ", + "âĶģ âĶ", + "س ÛĮÙĨ", + "سÛĮ ÙĨ", + "Ġgerek tiÄŁini", + "ียà¸Ļ à¸ļ", + "è¨Ģ ãģ£ãģ¦", + "ĠÑĸн ÑĤеÑĢеÑģ", + "ĠÑĸнÑĤеÑĢ ÐµÑģ", + "ĠÑı ким", + "ĠÑıк им", + "Ġ æĢ»", + "ĠæĢ »", + "k ovou", + "ko vou", + "kov ou", + "Ġd emek", + "Ġde mek", + "Ġdem ek", + "اÙĨ ÙĬا", + "اÙĨÙĬ ا", + "Ġdom ů", + "Å¡ nÃŃ", + "ate ÅĻ", + "åĢ «", + "δο Ïĥη", + "Ġ 기ìĹħ", + "Ġ기 ìĹħ", + "åĶ ĩ", + "ì¹ ł", + "Ñĸ дÑĥ", + "Ñĸд Ñĥ", + "린 ìĿ´", + "æľĢ åĪĿ", + "è ¸ı", + "è¸ ı", + "æĥ³ åΰ", + "à¥į बर", + "à¥įब र", + "Ġ ìŀĶ", + "Ġìŀ Ķ", + "ĠÑĢаз нÑĭÑħ", + "k rom", + "kr om", + "ι αν", + "ια ν", + "Ġд ÑĢÑĥз", + "ĠдÑĢÑĥ з", + "ĠдÑĢ Ñĥз", + "ä »¿", + "ä» ¿", + "Ġê·¸ ëłĩ", + "Ġд алÑĸ", + "Ġда лÑĸ", + "Ġдал Ñĸ", + "æķĪ æŀľ", + "Ġह व", + "è¼ Ŀ", + "Ġì°¸ ê³ł", + "Ġ ìĨĶ", + "ĠìĨ Ķ", + "Ġz nal", + "Ġzn al", + "ĠпеÑĢ Ñģ", + "ÙIJ Ùij", + "ĠÑĤ еж", + "ĠÑĤе ж", + "åĭ Ł", + "ι θ", + "Äį ů", + "Ġe kip", + "Ġek ip", + "Ġk hung", + "Ġkh ung", + "Ġkhu ng", + "éĹ ĺ", + "ĠتصÙħ ÛĮÙħ", + "о иÑĤ", + "ĠÑħ ол", + "æĬ ŀ", + "a mam", + "am am", + "ama m", + "Ġâĸ ³", + "ãģ ĩ", + "Ġع ÙĨÙĩ", + "ĠعÙĨ Ùĩ", + "Ġì°¸ ê°Ģ", + "ĠÎļ ÏĮ", + "åı¤ å±ĭ", + "к овоÑĹ", + "ков оÑĹ", + "ково ÑĹ", + "ศ à¸Ī", + "олог иÑı", + "ĠÙħØ« بت", + "ĠÐļÑĢа ÑĹна", + "ĠмеÑģÑı ÑĨев", + "Ġalın an", + "ĠÏĢÏģα γμα", + "Ġ ìŀ¡ëĭ´", + "Ġìŀ¡ ëĭ´", + "Ġп лод", + "Ġпл од", + "Ġпло д", + "ĠÑĤка ни", + "ÑģÑĭ лки", + "ÑģÑĭл ки", + "سط س", + "ra nÄĽ", + "ran ÄĽ", + "к аж", + "ка ж", + "е маÑĤи", + "ем аÑĤи", + "ема ÑĤи", + "Ġز ÛĮست", + "ĠزÛĮ ست", + "æ¿ Ł", + "Ġpop lat", + "Ġpo plat", + "γ ÎŃν", + "íĨł íĨł", + "Ġt ây", + "Ġìµľ ê·¼", + "ãĥ© ãĥ³ãĤ¹", + "ãĥ©ãĥ³ ãĤ¹", + "Ġgün eÅŁ", + "Ġ ÙģÙĤ", + "ĠÙģ ÙĤ", + "ĠsaÄŁ layan", + "ĠsaÄŁlay an", + "ĠØŃ زب", + "à¥ģल न", + "ĠB ilim", + "ĠBi lim", + "ĠBil im", + "ĠB atı", + "ĠBa tı", + "ĠBat ı", + "æł· çļĦ", + "δ ικ", + "δι κ", + "α ÏģίοÏħ", + "αÏģ ίοÏħ", + "Ġ ìĽĢ", + "ĠìĽ Ģ", + "Ġl á»Ńa", + "ÙĨ ÙĪØ¹", + "çİ ²", + "а ном", + "ан ом", + "ано м", + "Ġst átnÃŃ", + "Ġstát nÃŃ", + "Ġ äºİ", + "Ġm ùi", + "ĠÄij á»Ļt", + "ĠÄijá»Ļ t", + "æ² ĥ", + "åħ¬ åľĴ", + "ĠÑģ ÑĮогоднÑĸ", + "но Ñģи", + "ноÑģ и", + "Z a", + "Ġд ли", + "ĠÏĥÏħν ÎŃ", + "ĠV á»ĭ", + "m av", + "ma v", + "ĠM üslüman", + "/ ï¼ı", + "ĠзаÑī иÑĤ", + "é ĸī", + "éĸ ī", + "Ġ çģ«", + "Ġçģ «", + "Ġ å·Ŀ", + "Ġå· Ŀ", + "Ġ аж", + "Ġа ж", + "è¿ĩ æĿ¥", + "à¸Ĺ าà¸Ļ", + "ĠAr aÅŁtır", + "ĠAra ÅŁtır", + "Õ¡ Õ", + "Ġpo mÄĽr", + "Ġpom ÄĽr", + "Ġd ům", + "Ġdů m", + "å¦ ®", + "Ġhlav nÄĽ", + "Ġfin ans", + "Ġfinan s", + "Ġ γνÏī", + "Ġγ νÏī", + "ÏĥÏĦη μα", + "ï¼Į ç͍", + "ìĭŃ ìĭľìĺ¤", + "ĠÙħ ثاÙĦ", + "ĠÙħØ« اÙĦ", + "- Ðij", + "ÑĨÑĸй нÑĸ", + "Ġد ستÙĩ", + "Ġدست Ùĩ", + "Ġدس تÙĩ", + "à¥ī स", + "ÑĢ Ñĸп", + "ÑĢÑĸ п", + "ĠpÅĻi pom", + "ĠpÅĻip om", + "Ġ ÙĪÙĦÙĬ", + "ĠÙĪ ÙĦÙĬ", + "ĠÙĪÙĦ ÙĬ", + "ĠÙĪ Ø²ÙĨ", + "ĠÙĪØ² ÙĨ", + "Ġelekt rik", + "Ġelektr ik", + "ĠQu ân", + "i vé", + "iv é", + "Ġl ẽ", + "ç®Ģ åįķ", + "Ġon lara", + "Ġonlar a", + "оÑģ лав", + "ìĭľ íĤ¤", + "ëª ¬", + "ĠÙħÙĤ دار", + "ĠÙħÙĤد ار", + "ĠOr ta", + "ĠOrt a", + "ĠS eç", + "ĠSe ç", + "ĠÙĨÙĪÙģ Ùħبر", + "ุà¸Ļ ายà¸Ļ", + "ĠÑĥм ови", + "ĠÑĥмов и", + "Ġपर म", + "Ġ strom", + "Ġst rom", + "Ġstr om", + "Ġstro m", + "ĠкÑĢа Ñīе", + "ç§ ¦", + "缸 æīĭ", + "鼻 è¦ĸ", + "Ġuygu lama", + "Ġuygulam a", + "Ġ ÑĢиз", + "ĠÑĢ Ð¸Ð·", + "æĪ ²", + "य र", + "ĠH lav", + "Ġ ìĭ¸", + "Ġìĭ ¸", + "Ġли пнÑı", + "ÅĪ ujÃŃ", + "ÑĢ Ð¸Ð·", + "ÑĢи з", + "é«ĺ éĢŁ", + "缸 å½ĵ", + "k enin", + "ke nin", + "ken in", + "Ġо ÑģÑĤанов", + "ĠоÑģÑĤ анов", + "ĠоÑģÑĤан ов", + "Ġbit k", + "Ġbi tk", + "ova ného", + "ovan ého", + "ované ho", + "ĠÐľ аÑĢи", + "ĠÐľÐ°ÑĢ Ð¸", + "ĠÐľÐ° ÑĢи", + "èµ ¶", + "ì½ ©", + "Ġölç ü", + "ĠС еÑĢед", + "ĠСеÑĢ ÐµÐ´", + "ĠTh á»Ŀi", + "Ïī να", + "Ïīν α", + "ÙĪ Ø¨Ø©", + "ÙĪØ¨ Ø©", + "Ġch ụp", + "âĢĮ د", + "Ġch áy", + "ĠÐĴ ели", + "Ġоб ÑģÑĤ", + "ĠобÑģ ÑĤ", + "Ġìĭľ ì¦Į", + "د ÙħØ©", + "دÙħ Ø©", + "п од", + "по д", + "l ue", + "lu e", + "ĠдÑĸ лÑıн", + "ĠÙ¾ ÙĪØ³Øª", + "ĠاÙĦ ÙĨس", + "ĠاÙĦÙĨ س", + "èĤ Į", + "ìĪĺ 를", + "Ġú rov", + "ĠÙħØ´ Ú©ÙĦ", + "ĠÙħØ´Ú© ÙĦ", + "éĩįè¤ĩ éĩįè¤ĩ", + "н ез", + "не з", + "Ġdop oruÄį", + "Ġtas arım", + "Ġtasar ım", + "íģ¬ ê¸°", + "ìĿ´ ìħĺ", + "Ġde set", + "Ġdes et", + "Ġdese t", + "ĠÙħرتب Ø·", + "ัà¸Ĵ à¸Ļา", + "ัà¸Ĵà¸Ļ า", + "' ı", + "Ñĩ ки", + "ĠìŀĪ ëįĺ", + "ÑĪ ÐºÐ°", + "n ám", + "ná m", + "ÑģÑĤ ÑĢов", + "ÑģÑĤÑĢ Ð¾Ð²", + "ÑģÑĤÑĢо в", + "à¥į सर", + "à¥įस र", + "нÑĥ лаÑģÑĮ", + "нÑĥла ÑģÑĮ", + "ãģ¡ãĤĩ ãģ£ãģ¨", + "Ġ å¦", + "Ġå ¦", + "γ ÏĮ", + "Ġ é»ij", + "Ġé» ij", + "X em", + "Ġt á»ĩ", + "Ġtá» ĩ", + "ĠëĮĢ íĨµëł¹", + "기 ê´Ģ", + "æīį èĥ½", + "è¯Ń è¨Ģ", + "ed eyse", + "ĠТ Ñĭ", + "ĠÑģо един", + "ĠìĹĨ ìĬµëĭĪëĭ¤", + "Ñı ÑİÑĤ", + "à¹ģ หล", + "à¹ģห ล", + "Ġì§Ģ ë°©", + "Ġosob nÃŃ", + "ÛĮ ÙĦÛĮ", + "ÛĮÙĦ ÛĮ", + "Ġавг ÑĥÑģÑĤа", + "Ñī ик", + "Ñīи к", + "Ġvý Å¡e", + "g th", + "gt h", + "ĠÏĢ Î±Î½", + "ĠÏĢα ν", + "ج ار", + "جا ر", + "Ġвид ов", + "Ġви дов", + "ìĿ´ ìĬĪ", + "ĠÐij аÑĢ", + "ĠÏĮ ÏĢοÏħ", + "æ¤ ħ", + "Ġع اÙĦÛĮ", + "ĠQ uyết", + "ĠQuy ết", + "Ãľ M", + "ãĥĿ ãĤ¤ãĥ³ãĥĪ", + "Ġ ê¹Į", + "Ġê¹ Į", + "Ġкан ди", + "k ového", + "kov ého", + "kové ho", + "ĠMerk ez", + "Ġy iy", + "Ġyi y", + "ĠpÅĻÃŃ spÄĽ", + "ĠÑĤемпеÑĢаÑĤÑĥ ÑĢÑĭ", + "ĠÙ¾ ÙĬ", + "ฤ ศà¸Ī", + "è°ĥ ç͍", + "ĠÑģÑĤоÑĢ Ð¾Ð½Ñĥ", + "ĠÑģÑĤоÑĢон Ñĥ", + "à¹ī à¸Ĭ", + "好 ãģį", + ". Åŀ", + "Ġп ÑĢоз", + "ĠпÑĢ Ð¾Ð·", + "ĠпÑĢо з", + "ÙĨت اج", + "鼻 åŃIJ", + ".: .:.", + ".:.: .", + ".:. :.", + "è¨ ĵ", + "и ÑĩеÑģкое", + "иÑĩеÑģ кое", + "Ġн оги", + "Ġно ги", + "Ġног и", + "Ġ λÎŃ", + "Ġλ ÎŃ", + "Ġsık ıntı", + "Ġê°Ģ 족", + "ĠتÙĨ ظÙĬÙģ", + "ĠتÙĨظ ÙĬÙģ", + "Ġö dül", + "ĠaÅŁaģı daki", + "Ġž elez", + "Ġže lez", + "ĠاÙĦع دÙĬد", + "غ ÙĨ", + "Ġокон Ñĩ", + "ÑĢем Ñı", + "ÑĢе мÑı", + "L İ", + "Ġne jd", + "Ġnej d", + "Ġ ÏĢλα", + "ĠÏĢ Î»Î±", + "Ñģ ко", + "Ñģк о", + "Ġ ìĪĻ", + "ĠìĪ Ļ", + "ĠÙ¾ ÙĪÙĦ", + "θεν ήÏĤ", + "Ġ주 ìļĶ", + "Ġ æĬ¥", + "ĠæĬ ¥", + "ĠÙħ Ùħا", + "ĠÙħÙħ ا", + "Ðł Ð¡Ðł", + "ĠÑĢа дÑĸ", + "ĠÑĢад Ñĸ", + "ä¸Ģ ç§į", + "é¾ Ħ", + "Ġsö yl", + "Ġsöy l", + "Ïģκε ια", + "Ïģκ εια", + "Ġзем лÑĸ", + "Ġve Äįer", + "g eç", + "ge ç", + "س تÙħ", + "ست Ùħ", + "Ġse fer", + "ĠÑģ вÑĸд", + "ĠÑģв Ñĸд", + "ï»Ł ï»", + "а лов", + "ал ов", + "ало в", + "ìĬ¤ 를", + "âī ¥", + "ĠتÙĦ ÙģÙĨ", + "ĠتÙĦÙģ ÙĨ", + "åİ» äºĨ", + "़ à¥ĭà¤Ĥ", + "़à¥ĭ à¤Ĥ", + "ĠÑĦоÑĢм е", + "ĠÑĦоÑĢ Ð¼Ðµ", + "d üm", + "dü m", + "åħ ģ", + "ÑĢ Ð°Ð¿", + "ÑĢаР¿", + "ÑĢа п", + "ĠV ương", + "à¸Ńะ à¹Ħร", + "ัà¸ģษ à¸ĵ", + "Ġ åį³", + "Ġåį ³", + "ĠاÙĦ رÙħ", + "ĠاÙĦر Ùħ", + "ĠзаÑħиÑģÑĤ Ñĥ", + "° E", + "o dÃŃ", + "od ÃŃ", + "Ġव न", + "ĠÄij èn", + "Ġ åıĹ", + "Ġåı Ĺ", + "èIJ½ ãģ¡", + "Ġ zim", + "Ġz im", + "Ġzi m", + "리 ì¦Ī", + "èĪ Ĵ", + "Ġзб ÑĸÑĢ", + "Ġ ä»·æł¼", + "ĠлÑİ Ð´Ð¸Ð½Ð°", + "ĠлÑİд ина", + "ĠлÑİди на", + "ĠÐŁÐ¾Ñģ иланнÑı", + "и Ñī", + "ĠÎ ¨", + "ิà¸ģ ายà¸Ļ", + "ิà¸ģา ยà¸Ļ", + "Ġbu dete", + "Ġbud ete", + "Ġbude te", + "Ġз ÑĢоÑģÑĤ", + "Ġ vyk", + "Ġv yk", + "Ġvy k", + "ĠÐĹ ÐµÐ¼", + "ĠиÑİ Ð½Ñı", + "ĠmÄĽ lo", + "ĠmÄĽl o", + "ÙĦ اÙģ", + "ÙĦا Ùģ", + "Ġ ÙĪØ´", + "ĠÙĪ Ø´", + "ĠÑģп ÑĢави", + "ĠÑģпÑĢав и", + "ãģĻ ãģİ", + "ĠгÑĢа дÑĥ", + "ĠгÑĢ Ð°Ð´Ñĥ", + "R oz", + "Ro z", + "ι νή", + "ιν ή", + "Ġch á»ĵng", + "ä¸Ģ åį·", + "Ġ Xem", + "ĠX em", + "ĠÑģимв ол", + "ĠÑģим вол", + "Ġod mÃŃt", + "ĠÑĢÑıд ом", + "ĠÑĢÑı дом", + "ĠÑĩеÑĢв нÑı", + "à¸ģระ à¸Ĺ", + "人 人", + "æ°Ĺ æĮģãģ¡", + "un daki", + "und aki", + "unda ki", + "åľĭ å®¶", + "εÏģ μαν", + "Ġ лÑĮ", + "Ġл ÑĮ", + "ĠN üfus", + "Ġм еÑĢе", + "ĠмеÑĢ Ðµ", + "بر اÙĬر", + "н аннÑı", + "Ġ наÑĢ", + "Ġн аÑĢ", + "Ġна ÑĢ", + "Ġt ấm", + "æĸ½ å·¥", + "é¡ ¯", + "Ġh è", + "æĺİ çϽ", + "Ġдо гов", + "Ġдог ов", + "ĠÙģ Ø±Ùħ", + "ĠÙ쨱 Ùħ", + "èĢ Ĺ", + "ìĬ¤ ìĿĺ", + "ìĦ¸ ëĮĢ", + "è¯ ļ", + "Ġнеб олÑĮ", + "Ġ à¸Ľà¸£à¸°à¸ģ", + "Ġà¸Ľà¸£à¸° à¸ģ", + "Ġì¹ ¼", + "Ġov liv", + "Ġ NGC", + "ĠN GC", + "ĠNG C", + "ãĢĤ ä¸į", + "ا ÙĦÙī", + "اÙĦ Ùī", + "æī £", + ". ÐIJ", + "ÑĢа ÑģÑĤа", + "ÑĢаÑģ ÑĤа", + "ÑĢаÑģÑĤ а", + "ĠÃĩ ev", + "ãģ£ ãģ¡", + "ãģ£ãģ ¡", + "ï¼Į éĥ½", + "Ġrov nÄĽÅ¾", + "ĠÏĩÏģÏĮ νια", + "Ġì¡° ìĦł", + "ĠØ¢ باد", + "Ġآب اد", + "ĠÐľ аÑģ", + "ĠÐľÐ° Ñģ", + "çϼ å±ķ", + "ä» Ķ", + "Ġkend isini", + "Ġkendisi ni", + "à¹Īà¸Ńà¸ĩ à¹Ģà¸Ĺ", + "ĠV ÄĽ", + "Ġr ượu", + "Ġm áme", + "Ġmá me", + "Ġmám e", + "ĠоÑĩеÑĢед ÑĮ", + "Ġسب تÙħبر", + "Ġб ок", + "Ġбо к", + "ì§Ģ ìĹŃ", + "Ġتا Ø«ÛĮر", + "Ġتاث ÛĮر", + "Ġl isans", + "Ġli sans", + "Ġlis ans", + "Ġger ektir", + "Ġgerek tir", + "Ġs izi", + "Ġsi zi", + "Ġsiz i", + "Ñĸ но", + "Ñĸн о", + "ĠM Ã¼ÅŁ", + "ĠMü ÅŁ", + "ãģı ãĤīãģĦ", + "ãģıãĤī ãģĦ", + "Ġза клÑİÑĩ", + "Ġзак лÑİÑĩ", + "ãģĵãģ¨ ãģ«", + "è¨Ģ ãģĦ", + "ãĢģ å°ı", + "Ġet mektedir", + "Ġetm ektedir", + "åł± åijĬ", + "Ġkar Ä±ÅŁ", + "Ġоб лад", + "Ġобла д", + "Ġобл ад", + "å¥ ij", + "ra cat", + "rac at", + "ĠارتÙģ Ø§Ø¹", + "μ αι", + "μα ι", + "íĶ Ī", + "ĠÙĪ ÙĦÙħ", + "ĠÙĪÙĦ Ùħ", + "ëĬĶ ì§Ģ", + "lom ou", + "Ġли ÑĨа", + "ĠлиÑĨ а", + "ĠìĿĮ ìķħ", + "Ġhod nÄĽ", + "èĭ± æĸĩ", + " Ħ", + "à¹ī าà¸Ĥà¸Ńà¸ĩ", + "à¹īา à¸Ĥà¸Ńà¸ĩ", + "Ġê³Ħ ìķ½", + "åIJĦ ç§į", + "ĠÙħر Ú¯", + "éĶ ģ", + "Ġन द", + "ãĥĭ ãĥ¡", + "Ġ ем", + "Ġе м", + "Ġe leÅŁtir", + "Ġel eÅŁtir", + "Ġele ÅŁtir", + "Ġ íĬ¹ë³Ħ", + "ĠíĬ¹ ë³Ħ", + "ĠÎ¥ ÏĢο", + "Å¡ ker", + "Å¡k er", + "L ERİ", + "LER İ", + "æ² Ī", + "l ikleri", + "lik leri", + "likle ri", + "likler i", + "ĠÙħÙĩÙĨد سÛĮ", + "ĠbaÄŁ ır", + "dı ģını", + "dıģ ını", + "ĠاÙĦ تد", + "ĠاÙĦت د", + "à¸¸à¸Ľ à¸ģรà¸ĵ", + "ĠÑģлед ÑĥÑİÑīие", + "ĠÑģледÑĥÑİÑī ие", + "Ġì§ģ ìłij", + "å° ¤", + "ĠоÑģнов Ñĸ", + "Ġt ÄĽla", + "ĠtÄĽ la", + "ĠtÄĽl a", + "Ġп ак", + "Ġпа к", + "iz ace", + "iza ce", + "Ġná rod", + "Ġnáro d", + "a ný", + "an ý", + "ĠÑį п", + "Ġüç üncü", + "Î¥ Ρ", + "éĨ´ éĨ´", + "à¹Ģà¸ģ à¸Ńร", + "âĢĮاÙĨ بار", + "ç¶ Ļ", + "Îij Îł", + "ı lıģı", + "ılı ģı", + "ıl ıģı", + "ılıģ ı", + "ĠÃľ rün", + "Ġдоз вол", + "Ġ íĥĪ", + "Ġíĥ Ī", + "Ġà¤ĵ वर", + "è« ¸", + "èĺ ĩ", + "ĠпÑĢоÑģÑĤ ÑĢан", + "éĿĴ å¹´", + "ãģ® æĸ¹", + "ĠÚĨ Ú¯ÙĪÙĨÙĩ", + "ÙĦ Ø·", + "âĢľ æĪij", + "Ġëĭ¤ìļ´ ë°Ľ", + "ा .Ċ", + "ा. Ċ", + "Ġmüc adele", + "Ġmücadel e", + "Ġc ÃŃt", + "ĠcÃŃ t", + "à¹Īวม à¸ģ", + "ÄŁ ına", + "ģı na", + "ģın a", + "ê°ľ ë°ľ", + "ĠÏĢ Î±Î¹Î´", + "ĠÏĢα ιδ", + "ĠÏĢαι δ", + "ض اÛĮ", + "ضا ÛĮ", + "Ġbor ç", + "íĬ ľ", + "ĠخدÙħ ت", + "Ġخد Ùħت", + "Ġu dál", + "Ġud ál", + "Ġ виг", + "Ġв иг", + "Ġви г", + "Ġ ë°°ìĨ¡", + "Ġë°° ìĨ¡", + "å¹ ¾", + "Ùİ Ø¬", + "Ġ ìĹĺ", + "ĠìĹ ĺ", + "çĢ ¬", + "ï Ģ", + "ĠÎij θή", + "пÑĢи клад", + "ĠпÑĢи Ñĩина", + "ĠпÑĢиÑĩин а", + "ĠпÑĢиÑĩ ина", + "ĠÙģ Ø´Ø§Ø±", + "æ »¿", + "æ» ¿", + "Ġd ostat", + "Ġdo stat", + "Ġdos tat", + "Ġdost at", + "Ġ졸 ìĹħ", + "Ġا رز", + "Ġار ز", + "ÙĪÙĦ ÙĪØ¬", + "ÙĪÙĦÙĪ Ø¬", + "س ÙĪ", + "æĺł çĶ»", + "Ġth ôi", + "Ġ ³³³", + "ĠÂł ³³", + "Ġ³³ Âł", + "à¹ģ à¸Ļะ", + "à¹ģà¸Ļ ะ", + "è¨Ń åĤĻ", + "Ġмног ие", + "ÑĤ оÑĦ", + "ÑĤо ÑĦ", + "i Å¡tÄĽ", + "iÅ¡ tÄĽ", + "à¤Ĺ ढ", + "Ġин дивидÑĥ", + "Ġ ìĥĿíĻľ", + "ĠìĥĿ íĻľ", + "Ġзов ÑģÑĸм", + "íĥ ķ", + "çľ ł", + "ĠêµŃ ëĤ´", + "e ptal", + "ep tal", + "ept al", + "r aci", + "ra ci", + "rac i", + "è¡ ¡", + "ãĦ ·", + "ĠSt ÅĻed", + "اÙĦ ÙĬا", + "اÙĦÙĬ ا", + "Σ Τ", + "Ľ °", + "ãĥī ãĥ«", + "á zÃŃ", + "áz ÃŃ", + "Ġа Ñģп", + "ĠаÑģ п", + "ĠdÄ±ÅŁ arı", + "ĠвиÑĢоб ниÑĨÑĤва", + "e za", + "ez a", + "ï¼Į ä¸įè¿ĩ", + "ï¼Įä¸į è¿ĩ", + "çĥ ¦", + "ãĥ³ ãĤ°ãĥ«", + "ãĥ³ãĤ° ãĥ«", + "Ġroz voj", + "ĠÙħÙĨت شر", + "ĠÑĥÑĤ еп", + "Ġد ÙĬÙĨ", + "ĠدÙĬ ÙĨ", + "ĠзаÑģоб Ñĸв", + "Ng ưá»Ŀi", + "ãĤ· ãĥ¼", + "ĠFran sız", + "ÎĻ Î¤", + "ائ Ùģ", + "ι Ïĩ", + "ี à¹Ģม", + "à¥į मन", + "à¥įम न", + "à¥įम à¤ļ", + "Ġس عر", + "Ġسع ر", + "ï¾ Ŀ", + "ë°© ë²ķ", + "ĠС о", + "Ġà¤ĸ बर", + "ìĨĮ ê°ľ", + "Ġsl ova", + "Ġslo va", + "Ġslov a", + "Q PCP", + "QP CP", + "ĠK ız", + "ĠKı z", + "Ø· Ù쨧ÙĦ", + "Ø·Ùģ Ø§ÙĦ", + "Ġк оÑĢм", + "ĠкоÑĢ Ð¼", + "ĠìĹħ ëį°ìĿ´íĬ¸", + "es poÅĪ", + "esp oÅĪ", + "à¸Ķ าว", + "à¸Ķา ว", + "о ÑĢом", + "оÑĢ Ð¾Ð¼", + "оÑĢо м", + "ĠгÑĢа ÑĦ", + "ĠгÑĢ Ð°ÑĦ", + "Ġп ÑĸÑĪ", + "Ġ ë¿IJ", + "Ġë ¿IJ", + "ý v", + "С ам", + "Ġk rev", + "Ġkr ev", + "Ġkre v", + "ĠB unu", + "ĠBu nu", + "ĠBun u", + "Ġz obraz", + "Ġسخ ÙĨ", + "Ġ æĶ¯", + "ĠæĶ ¯", + "лÑİ Ð±", + "Ùİ Ø§ÙĨ", + "ÙİØ§ ÙĨ", + "маÑĤ ÑĢива", + "λ εÏį", + "λε Ïį", + "Ġпо Ñħод", + "ĠпоÑħ од", + "Ġг ÑĢе", + "ĠгÑĢ Ðµ", + "çľĭ çĿĢ", + "à¸Īำ à¸ģ", + "ัà¸ĩà¸Ħ ม", + "Ġseç enek", + "İ stanbul", + "ĠвÑĸд мов", + "m iyor", + "mi yor", + "Ġm ụn", + "ìĿ´ ìĹIJ", + "ĠNh ư", + "Âł tom", + "Âłt om", + "lık ları", + "lıkla rı", + "lıklar ı", + "Âł Äij", + "ãĥ» ãĥŀ", + "Ġ ÙģØª", + "ĠÙģ Øª", + "ĠFakült esi", + "ìłĦ íŀĪ", + "éª ij", + "Ġìŀij ìĿĢ", + "ç¼ ĺ", + "ìº IJ", + "Ġmü zik", + "Ġmüz ik", + "а лÑĭ", + "ал Ñĭ", + "Ġp ozem", + "Ġpo zem", + "Ġpoz em", + "çĥ §", + "Ġ 常", + "Ġå¸ ¸", + "Å¡ il", + "Å¡i l", + "à¤Ĩ प", + "à¸ģำ หà¸Ļà¸Ķ", + "Ġگرد Ø´", + "λ ιά", + "λι ά", + "Ġö den", + "åıª è¦ģ", + "ĠÄIJ o", + "Ġstrat ej", + "Ġstra tej", + "Ġstrate j", + "ĠÙĩ تÙĦ", + "ÙĤ Ùģ", + "Ġkullan ılır", + "Ġkullanıl ır", + "ĠÑģп оÑģÑĤ", + "ĠÑģпоÑģ ÑĤ", + "ĠnÄĽ ho", + "ĠÐŁ еÑĢед", + "ĠÐŁÐµÑĢ ÐµÐ´", + "Ġиз меÑĢ", + "] ]>", + "]] >", + "ĠнÑĸк оли", + "Ġha yal", + "Ġhay al", + "Ġhaya l", + "Ġдод аÑĤков", + "Ġन à¤ķ", + "Ġins anın", + "Ġinsan ın", + "ุม à¸łà¸²à¸ŀ", + "ograf ie", + "в об", + "во б", + "ĠاÙĨ ساÙĨÛĮ", + "ĠاÙĨساÙĨ ÛĮ", + "Ġm ük", + "Ġmü k", + "ĠÑĥ меÑĢ", + "ĠÑĥм еÑĢ", + "оÑĩ нÑĭе", + "ëıĦ ìĿĺ", + "Ġ ara", + "Ġa ra", + "Ġar a", + "Ġë¹ ¨", + "Ġκ Ïį", + "л ой", + "ло й", + "Ñģи он", + "Ġroz dÃŃl", + "ay ıf", + "ayı f", + "ĠÙĪØ§ØŃ دة", + "ĠÙĪØ§ØŃد Ø©", + "ĠÙĪØ§ ØŃدة", + "о ÑĢалÑĮ", + "оÑĢ Ð°Ð»ÑĮ", + "оÑĢа лÑĮ", + "Ġpo chop", + "Ġpoc hop", + "éļ ¨", + "à¹īà¸Ń à¸ĩà¸Ļ", + "à¹īà¸Ńà¸ĩ à¸Ļ", + "Ġ ÙĪØ§ÙĨ", + "ĠÙĪ Ø§ÙĨ", + "ĠÙĪØ§ ÙĨ", + "Îľ ε", + "Ġ μον", + "Ġμ ον", + "Ġμο ν", + "Ñĥ ÑĪка", + "ÑĥÑĪ ÐºÐ°", + "or dum", + "ord um", + "æ¸ħ æ¥ļ", + "ĠDe ÄŁ", + "ÏĢ Ïģο", + "ĠÙĪØ§ÙĦ تÙĬ", + "ĠÙĪØ§ÙĦت ÙĬ", + "Ġp okus", + "Ġpo kus", + "Ġpok us", + "íĽĦ 기", + "é¥ ®", + "æĹħ è¡Į", + "Ġжен Ñīин", + "ĠdoÄŁru dan", + "Ġ Ñıб", + "ĠÑı б", + "Ġza ÄįÃŃ", + "ĠzaÄį ÃŃ", + "Ġë³´ ìŬ", + "- CP", + "-C P", + "åIJ ¨", + "à¥ĭ à¤ĸ", + "ÑĢ Ð¾Ð³ÑĢа", + "ÑĢо гÑĢа", + "ÑĢог ÑĢа", + "ler di", + "ìĬ ´", + "Ùı ÙĪØ§", + "ÙıÙĪ Ø§", + "Ġustanov enÃŃ", + "Ġд оÑģÑĤав", + "Ġдо ÑģÑĤав", + "ĠдоÑģÑĤ ав", + "Ġfır sat", + "ĠاÙĦÙħÙĩ ÙĨØ©", + "ĠвеÑī еÑģÑĤва", + "ĠвеÑīеÑģÑĤв а", + "Ġн еÑģп", + "Ġне Ñģп", + "ĠнеÑģ п", + "ĠاÙĦکتر ÙĪÙĨ", + "t aÅŁ", + "ta ÅŁ", + "æĪ Ĵ", + "Ġy urt", + "Ġyu rt", + "Ġgir di", + "ĠÐļ Ñĥб", + "Ġ 를", + "Ġë¥ ¼", + "ุ à¹Į", + "ãģĿãģĨ ãģª", + "à¹ī Ċ", + "ĠвÑĭ бÑĢа", + "ĠвÑĭб ÑĢа", + "k ovÄĽ", + "ko vÄĽ", + "kov ÄĽ", + "ĠS iz", + "ĠSi z", + "Ġ گاÙĩ", + "ĠÚ¯ اÙĩ", + "ĠЧ аÑģ", + "Ġзг Ñĸдно", + ". ÐŁ", + "å§ Ĭ", + "ĠÐļ ÑĥÑĢ", + "ĠìĿĺ íķ´", + "Ġet raf", + "Ġк аÑĪ", + "Ġка ÑĪ", + "ĠØ· ÛĮ", + "ξ ει", + "ξε ι", + "ç² Ĵ", + "ĠØ¢ ذ", + "Ġböl ge", + "Ġbölg e", + "Ġम à¤ľà¤¬", + "Ġà¤®à¤ľ ब", + "ÙIJ Ùĥ", + "Ġvál ky", + "ãģł ãĤĪ", + "Ġmes aj", + "Ġmesa j", + "ĠpÅĻ ist", + "ĠpÅĻi st", + "Ġtyp u", + "Ġty pu", + "ĠкиÑĪ ÐµÑĩ", + "ãĤī ãģ®", + "Ġkend isi", + "Ġkendi si", + "ĠвÑĸдб Ñĥва", + "ĠвÑĸдбÑĥ ва", + "ä¾ ¯", + "Ġди за", + "ãĢĢ Ċ", + "ĠпÑĢоÑĨеÑģ Ñĥ", + "ĠÑįлек ÑĤÑĢ", + "_P US", + "Ġмног иÑħ", + "Ġk ém", + "Ġké m", + "æŀ ª", + "çݰ 代", + "Ġ éħį", + "Ġé ħį", + "Ġéħ į", + "ë¡ Ń", + "ÑĤи ÑģÑı", + "Ġl ục", + "ĠÙĪ Ø§ÙĦØŃ", + "ĠÙĪØ§ÙĦ ØŃ", + "ĠÙĪØ§ ÙĦØŃ", + "p tal", + "pt al", + "pta l", + "ẵ ng", + "ẵn g", + "ÏĢ Î»", + "Ġd olu", + "Ġdo lu", + "Ġdol u", + "Ġt òa", + "Ġин огда", + "ĠпоÑĢÑıд ок", + "Як Ñīо", + "âĶ ĺ", + "Ġغ ربÛĮ", + "Ġغرب ÛĮ", + "Ġغر بÛĮ", + "ç§» åĬ¨", + "ยà¸Ļ à¸ķร", + "ยà¸Ļà¸ķ ร", + "H DATA", + "HD ATA", + "_PUSH DATA", + "_PUS HDATA", + "ĠØ« ابت", + "åĮħ åIJ«", + "ĠÏĢ ÏģÎŃÏĢει", + "़ à¥ĭ", + "åIJį åīį", + "ÑĤ еÑĢи", + "ÑĤе ÑĢи", + "ÑĤеÑĢ Ð¸", + "ï½ ¯", + "Ġ åħĪ", + "Ġåħ Ī", + "н ед", + "не д", + "Ïģ οÏįν", + "Ïģο Ïįν", + "ÏģοÏį ν", + "в ей", + "ве й", + "èĤ ĸ", + "ĠÅĻed itel", + "Ġth ép", + "Ġthé p", + "ĠÙĩ ÙģØªÙĩ", + "ĠÙĩÙģØª Ùĩ", + "ĠдÑĢÑĥг а", + "ĠдÑĢÑĥ га", + "ER İ", + "Ġ Ả", + "ĠẠ¢", + "ĠпеÑĢ ÐµÑĢ", + "ĠпеÑĢе ÑĢ", + "Ġж еÑģÑĤ", + "Ġже ÑģÑĤ", + "ĠÄij ẳng", + "ç¦ ®", + "алÑĮ ном", + "алÑĮно м", + "िष य", + "ид енÑĤа", + "иденÑĤ а", + "Ġآخر ÛĮÙĨ", + "Ġ æĵ", + "Ġæ ĵ", + "Ġ มหาว", + "Ġมห าว", + "ĠлÑİ ÑĤого", + "ĠлÑİÑĤ ого", + "Ġб ÑĸзнеÑģ", + "gı ç", + "Ġng á»ĵi", + "оÑĩ нÑĭй", + "Ġo Äįek", + "ĠoÄį ek", + "ĠÙħ رة", + "ĠÙħر Ø©", + "Ġt var", + "Ġtv ar", + "Ġsam ozÅĻejmÄĽ", + "ĠBeled iye", + "Ġв ода", + "Ġво да", + "Ġвод а", + "Ġ Ú¯ÛĮرد", + "ĠÚ¯ÛĮ رد", + "ĠÚ¯ÛĮر د", + "Ġг одÑĭ", + "Ġгод Ñĭ", + "ãģ« è¡Į", + "æĺ¯ æĪij", + "ÑĪ Ð¸Ð»Ð¸", + "ÑĪи ли", + "Ġ åĽ½äº§", + "ĠåĽ½ 产", + "á»§ i", + "ĠбÑĥд ÑĥÑĤÑĮ", + "ĠбÑĥдÑĥÑĤ ÑĮ", + "ĠбÑĥдÑĥ ÑĤÑĮ", + "ĠÑĢай онÑĥ", + "ĠÑĢайон Ñĥ", + "Ġì ĵ", + "ĠÙĪ Ø§Ø³", + "ĠÙĪØ§ س", + "ĠاÛĮ شاÙĨ", + "ενο δο", + "Ġнез алеж", + "ĠÙ¾ شت", + "Ġپش ت", + "Ġgir iÅŁim", + "ĠgiriÅŁ im", + "Ġд еле", + "Ġдел е", + "Ġде ле", + "ĠاصÙģÙĩ اÙĨ", + "à¸Ķ วà¸ģ", + "ĠاÙĦ ÙĤÙĬ", + "ĠاÙĦÙĤ ÙĬ", + "à¹Į à¸Ī", + "ëª »", + "Ġd ru", + "Ġdr u", + "è¿ ¹", + "ад женнÑı", + "адж еннÑı", + "Ùģ ÙĨ", + "Ïĩ οÏĤ", + "Ïĩο ÏĤ", + "à¹Ĥ à¸Ī", + "e yle", + "ey le", + "å¡ ij", + "Ġu prav", + "Ġup rav", + "Ġз даÑĤ", + "Ġзд аÑĤ", + "Ġзда ÑĤ", + "Ġvid ÄĽt", + "Ġ à¸Ľà¸£", + "Ġà¸Ľ ร", + "Ġ ÑĦеÑĢ", + "ĠÑĦ еÑĢ", + "ÐĨ н", + "Ġ ìµľìĭł", + "Ġìµľ ìĭł", + "l oha", + "lo ha", + "loh a", + "ĠиÑģп ÑĭÑĤ", + "Ġ avan", + "Ġa van", + "Ġav an", + "Ġava n", + "γ οÏħ", + "γο Ïħ", + "ĠGi ấy", + "ãĤ»ãĥ³ ãĤ¿ãĥ¼", + "éģ į", + "е ÑĢаÑħ", + "еÑĢ Ð°Ñħ", + "еÑĢа Ñħ", + "Ġê°Ģ ì§Ģê³ł", + "Ġê°Ģì§Ģ ê³ł", + "Ġ ид", + "Ġи д", + "Ġmnoh em", + "æ£Ģ æµĭ", + "Ġet me", + "Ġetm e", + "Ġ تÙħر", + "Ġت Ùħر", + "ĠتÙħ ر", + "ĠbaÅŁ layan", + "ĠbaÅŁlay an", + "ãģı ãĤĮ", + "à¹ĩà¸Ļ à¸ģาร", + "ĠÑħаÑĢакÑĤеÑĢ Ð¸Ð·", + "Ġanlam ına", + "Ùı Ùĩ", + "ĠÑģеÑĢ Ð¿Ð½Ñı", + "çķª çµĦ", + "Ġ msgid", + "Ġmsg id", + "Ġms gid", + "Ġzv ÃŃÅĻ", + "ĠzvÃŃ ÅĻ", + "ĠíļĮ ìĽIJ", + "Ġya par", + "Ġyap ar", + "ä¼ĺ åĬ¿", + "ен нÑĭми", + "еннÑĭм и", + "ĠØ£ Ø«", + "ì² Ļ", + "Ġji ného", + "Ġjin ého", + "Ġjiné ho", + "Ġد ÙģØ§Ø¹", + "ĠدÙģ Ø§Ø¹", + "ĠØŃÚ© ÙĪÙħ", + "Ġr izik", + "Ġri zik", + "ά λι", + "άλ ι", + "à¸ĩ à¸Ĥ", + "èµ ¢", + "Ġ ÎķÎĽ", + "ĠÎķ ÎĽ", + "Ġok um", + "Ġoku m", + "æĶ¶ åħ¥", + "ĠÚĨ ÛĮÙĨ", + "æľī çļĦ", + "ÑĨ ами", + "ÑĨа ми", + "d ÄĽnÃŃ", + "dÄĽ nÃŃ", + "ĠкоÑĢ Ð°Ð±", + "Ġко ÑĢаб", + "ĠкоÑĢа б", + "Ġa landa", + "Ġal anda", + "Ġalan da", + "ส à¸Ļาม", + "สà¸Ļ าม", + "ï¼ī ãģ®", + "ı sız", + "ıs ız", + "ısı z", + "ÙĬ ÙĬر", + "Ùĥ ÙĬØ©", + "ÙĥÙĬ Ø©", + "Ġnebo Å¥", + "Ġbit ir", + "Ġbi tir", + "Ġ ãĥľ", + "Ġãĥ ľ", + "Ùij ا", + "ï¼ Ĩ", + "ĠاÙĦت ارÙĬØ®", + "มห าà¸Ļà¸Ħร", + "at ürk", + "ãĤ¹ãĥĨ ãĥł", + "θή κη", + "Ġ καν", + "Ġκ αν", + "Ġκα ν", + "ĠS ür", + "ĠSü r", + "Ġd Ä±ÅŁÄ±", + "ĠdÄ±ÅŁ ı", + "Ġk ancel", + "Ġkan cel", + "ĠÙ¾ خش", + "h Pa", + "ĠÄį t", + "ĠпÑĢ Ð¾Ñħ", + "ĠпÑĢо Ñħ", + "à¹ī à¸Ī", + "Ġê±° ìķ¼", + "ĠдеÑĢжав ного", + "èĤ¡ 举", + "ìĿ´ íģ¬", + "Ùĥ تÙĪØ±", + "Ùĥت ÙĪØ±", + "ĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "è¨ º", + "Ġب Ùħا", + "ĠبÙħ ا", + "ĠноÑĢм аÑĤив", + "ç iler", + "çi ler", + "à¸ĩ ศ", + "éĽĨ ä¸Ń", + "ÑĢ Ð¸Ñģ", + "ÑĢи Ñģ", + "Ñĩ аÑĶ", + "Ñĩа ÑĶ", + "li ÄŁin", + "liÄŁi n", + "liÄŁ in", + "ãĥ¼ ãĤ¿ãĥ¼", + "ãĥ¼ãĤ¿ ãĥ¼", + "а ÑĢаÑĤ", + "аÑĢ Ð°ÑĤ", + "аÑĢа ÑĤ", + "åĬĽ éĩı", + "ĠÑģÑħ ем", + "åħ¥ åı£", + "离 å¼Ģ", + "ÏģοÏĨοÏģ ίεÏĤ", + "ĠÐĹ Ð°ÑĤем", + "ĠkarÅŁ ısında", + "ĠkarÅŁÄ± sında", + "ĠاÙĨت ظ", + "ï½ Ĭ", + "Ġ eÅŁit", + "ĠeÅŁ it", + "Ġyaz ılı", + "Ġyazı lı", + "Ðļ ом", + "ا زÙĬ", + "از ÙĬ", + "Ġki mse", + "Ġkim se", + "Ġkims e", + "ÑĢа Ñīи", + "ÑĢаÑī и", + "ัà¸ģ ส", + "Ġkan un", + "Ġka nun", + "Ġ ëIJĺìĹĪ", + "ĠëIJĺ ìĹĪ", + "Ġι ÏĥÏĩ", + "Ġм еди", + "Ġмед и", + "æ° §", + "ï¼Į åħ¶ä¸Ń", + "ï¼Įåħ¶ ä¸Ń", + "Ġyok tu", + "Ġ ãĤ½", + "ĠãĤ ½", + "ĠпÑĢи обÑĢеÑĤ", + "ÙĪ ÛĮØ´", + "ÙĪÛĮ Ø´", + "ãħł ãħł", + "Ġکرد Ùħ", + "Ġکر دÙħ", + "Ġdu var", + "Ġ ç¸", + "Ġç ¸", + "ıs ır", + "ısı r", + "Ġïº į", + "ĠÐłÐ¾Ñģ ÑģиÑı", + "à¹ī à¹ĥà¸Ļ", + "Ġ iÅŁi", + "Ġi ÅŁi", + "ĠiÅŁ i", + "d ol", + "do l", + "ĠÙħØŃ ÙħÙĪØ¯", + "ĠÑģам ÑĭÑħ", + "ĠبÙĨابر اÛĮÙĨ", + "ãĤĮ ãģ©", + "ุà¸ķ สาห", + ". »", + "ู à¸Ĭ", + "ĠT ep", + "ĠTe p", + "ãģı ãĤĵ", + "Ġ å¸ĥ", + "Ġå¸ ĥ", + "Ġत ल", + "Ġs erm", + "Ġse rm", + "Ġser m", + "λ ÏĮγ", + "λÏĮ γ", + "ĠÅŀ imdi", + "Ġà¤ľà¤¨ त", + "- ÐĴ", + "è¨ ª", + "ĠвÑĸд пов", + "ิ à¸Ļà¸Ķ", + "ิà¸Ļ à¸Ķ", + "ι ÏĥμÏĮÏĤ", + "ιÏĥμ ÏĮÏĤ", + "Ω Τ", + "âĨĴ âĨĴ", + "ικο ί", + "ĠÑģп ÑĢава", + "ĠÑģпÑĢав а", + "æľº åħ³", + "Ġ ÃĿ", + "Ġà Ŀ", + "Ġм ова", + "Ġмо ва", + "Ġмов а", + "Ġмог ла", + "Ġд лиÑĤелÑĮ", + "ãģĹ ãģ¦ãĤĤ", + "ãģĹãģ¦ ãĤĤ", + "Ġβ Ïģί", + "Ġж од", + "éĹ ª", + "ĠмÑĸ ÑģÑĮкоÑĹ", + "η Ïģε", + "çł Ĥ", + "Ġkter ých", + "Ġkterý ch", + "ĠÐĵ олов", + "ĠÐĵол ов", + "Ġh á»Ļp", + "Ġhá»Ļ p", + "Ġpa nÃŃ", + "Ġpan ÃŃ", + "تÙħ اد", + " ľ", + "åįģ åħŃ", + "κ οÏĤ", + "κο ÏĤ", + "ев ÑĭÑħ", + "æĭ Ĵ", + "ĠÑģÑĤ оÑĢон", + "ĠÑģÑĤоÑĢ Ð¾Ð½", + "ĠÑģÑĤо ÑĢон", + "Ġph óng", + "ĠÑĥлÑĥÑĩ ÑĪ", + "m rt", + "mr t", + "m par", + "mp ar", + "ĠS lav", + "ĠSl av", + "Ġ kov", + "Ġk ov", + "Ġko v", + "ìĿ¸ ìĿĢ", + "Ġ åºĶ", + "Ġåº Ķ", + "ั à¸ļà¸Ħ", + "ัà¸ļ à¸Ħ", + "Ġk ì", + "Ġa Å¥", + "ÅĻ ÃŃt", + "ÅĻÃŃ t", + "ì° Į", + "Ùħ ÙĨت", + "ÙħÙĨ ت", + "ıyor lar", + "æŃ£ 常", + "н ÑıÑĤÑĤÑı", + "нÑıÑĤ ÑĤÑı", + "r acÃŃ", + "ra cÃŃ", + "rac ÃŃ", + "ĠпиÑĤ аниÑı", + "à¸Īะ à¹Ģà¸Ľ", + "ĠاÙĦÙĩ ÙĨد", + "ĠD ost", + "ĠDo st", + "ĠDos t", + "ĠÐĴаÑģ илÑĮ", + "Ġ íĥĦ", + "Ġíĥ Ħ", + "Ġn ạn", + "à¹Īà¸Ń à¹Ħà¸Ľ", + "رÙĪ Ø¶", + "± ظ", + "Ġbych om", + "à¸Ļ วย", + "à¸Ļว ย", + "ãģł ãģ£ãģ¦", + "ĠÐĺ Ñģп", + "ĠÐĺÑģ п", + "à¸Ħร à¸ļ", + "Ġ สà¸ĸาà¸Ļ", + "Ġส à¸ĸาà¸Ļ", + "ĠëĤ ®", + "j iÅ¡tÄĽ", + "ji Å¡tÄĽ", + "ĠÙģ ÙĪØª", + "ĠÙģÙĪ Øª", + "ĠCh ương", + "ĠìĿ´ 루", + "ĠpÅĻÃŃ tom", + "t ual", + "tu al", + "b ette", + "be tte", + "bet te", + "bett e", + "Ġsa bah", + "Ġsab ah", + "μ ί", + "Ġm á»ĩnh", + "Ġmá»ĩ nh", + "ãģ® ãģłãĤįãģĨ", + "ãģ®ãģł ãĤįãģĨ", + "Ġzam ÄĽÅĻ", + "åįģ äºĶ", + "ĠìķĬ ìĿĦ", + "اÙĨ ÙĪ", + "е нÑĥ", + "ен Ñĥ", + "ĠÑĥ год", + "ĠÑĥг од", + "ĠV ưá»Ŀn", + "Ġëĵ± ìĿĦ", + "Ġbelirt ilen", + "æŁ Ħ", + "Ġtek lif", + "¬ Ĥ", + "Ġпод аÑĤков", + "ĠاÙĦ ÙĨÙĩ", + "ĠاÙĦÙĨ Ùĩ", + "ï¼ ´", + "ìĽ ĥ", + "Ġ हल", + "Ġह ल", + "Ġ имÑĥ", + "Ġи мÑĥ", + "Ġим Ñĥ", + "ĠкоÑĤоÑĢ Ñĭм", + "ï¼Į 以åıĬ", + "ï¼Į以 åıĬ", + "ĠÑĤаб ли", + "ा :", + "Ġب رج", + "Ġبر ج", + "ĠÎŃ Î½Î±Î½", + "ĠÎŃνα ν", + "ĠÎŃν αν", + "ĠÙĬ ÙĪÙĦÙĬÙĪ", + "ý Å¡", + "Ġ ÙĬج", + "ĠÙĬ ج", + "ĠÑĤÑĢо Ñħи", + "æŀ Ŀ", + "Ġd Ãły", + "ĠBur ada", + "ĠBu rada", + "ĠÏĥÏħ μβ", + "ĠÎij ÏģÏĩ", + "ĠÎijÏģ Ïĩ", + "Ġsoci álnÃŃ", + "Ġ Ú¯ÙĪ", + "ĠÚ¯ ÙĪ", + "Ġyan ıt", + "Ġyanı t", + "ãģ¯ ãģªãģĦ", + "ãģ® ä¸Ĭ", + "Ġn úi", + "ĠرÙģØª ار", + "ĠÙħ رات", + "ĠÙħر ات", + "ز ÙħاÙĨ", + "زÙħ اÙĨ", + "าà¸Ī ารย", + "ĠÑĩиÑģ лÑĸ", + "Ġس ÙĨت", + "ĠسÙĨ ت", + "ĠÃĸzel likle", + "ì ĩ¼", + "ìĩ ¼", + "ĠÄį ÃŃm", + "AD DE", + "ADD E", + "ãģ® ãĤĪãģĨãģª", + "ÙĪÙĦÙĪ ÚĺÛĮ", + "ĠíĻľ ìļ©", + "ãĢģ ãģ©ãģĨ", + "ĠÎł ÏģÏī", + "çĻ» åł´", + "Ġнад аннÑı", + "Ġм еÑĢеж", + "ĠмеÑĢ ÐµÐ¶", + "ĠмеÑĢе ж", + "Ġ ìĿµ", + "ĠìĿ µ", + "jÃŃ cÃŃch", + "jÃŃcÃŃ ch", + "it ou", + "ito u", + "ÙĤ ÙĪÙĦ", + "Ùħ ج", + "Ġب ÙĨد", + "ĠبÙĨ د", + "Ġön üne", + "Ġ ï½°", + "Ġï½ °", + "з в", + "Ġе ÑģÑĤе", + "Ðł Ðĺ", + "ÑĢ Ð¾Ð»", + "ÑĢо л", + "a yla", + "ay la", + "Ġк лÑĥ", + "Ġкл Ñĥ", + "æİ¨ èĸ¦", + "ĠÑĢоз ÑĢаÑħ", + "Ġ ìĥģëĭ´", + "Ġìĥģ ëĭ´", + "ĠÙĨ سÙħØ©", + "ĠÙĨس ÙħØ©", + "Ġви Ñħод", + "à¥Ģ à¤Ĩà¤Ī", + "ĠпÑĢи ÑģÑĤÑĥп", + "ÙĴ ع", + "ĠteÅŁ ekkür", + "дÑı ки", + "Ġfi kir", + "Ġfik ir", + "ัศ à¸Ļ", + "ĠآزÙħ اÛĮØ´", + "Ġb izi", + "Ġbi zi", + "Ġbiz i", + "ÏĨ αÏģ", + "ÏĨα Ïģ", + "æľª æĿ¥", + "æIJ º", + "Ġδ Ïħνα", + "ĠδÏħ να", + "Ġ رÙĪÙħ", + "Ġر ÙĪÙħ", + "ĠرÙĪ Ùħ", + "Ġb undan", + "Ġbund an", + "Ġbun dan", + "ĠÙĤ اÙĦب", + "ĠÙĤاÙĦ ب", + "Ġ haft", + "Ġh aft", + "Ġha ft", + "Ġhaf t", + "å¿ ½", + "ĠÐľ оÑĢ", + "Ġzá pas", + "Ġzáp as", + "Ġ ë¹Ľ", + "Ġë¹ Ľ", + "å» ·", + "äºĪ ç´Ħ", + "Ġkh uyến", + "Ġ ÎijÎĵ", + "ĠÎij Îĵ", + "Ġìŀij ìĹħ", + "ड र", + "Ġjednodu ch", + "à¥ī म", + "ĠdeÄŁ ildi", + "ĠdeÄŁil di", + "Ġk olo", + "Ġko lo", + "Ġkol o", + "Ġد ÙĤÛĮ", + "л ами", + "ла ми", + "лам и", + "ĠH á»įc", + "ĠHá»į c", + "Ġप स", + "ĠÎł ÏģÏĮ", + "ĠâĹ ij", + "Ġ наÑģлÑĸд", + "Ġна ÑģлÑĸд", + "ĠнаÑģ лÑĸд", + "Ġ диви", + "Ġди ви", + "Ġдив и", + "ĠpÅĻes nÄĽ", + "ĠТак им", + "ĠТа ким", + "Ġru kou", + "Ġruk ou", + "ä¸Ģ åĪĩ", + "ĠÑģ пÑĢи", + "ĠÑģп ÑĢи", + "en ské", + "ens ké", + "æĹ ¦", + "ĠÙĤ ÙĨ", + "Ġú stav", + "िश त", + "à¹Į )", + "ĠT rang", + "ĠTr ang", + "ĠTra ng", + "ĠTran g", + "Ġmoh la", + "Ġmohl a", + "ĠÎķ λλην", + "Ġп оки", + "Ġпо ки", + "Ġпок и", + "ĠØ¢ Ùħار", + "ĠØ¢Ùħ ار", + "åIJ ¾", + "ĠÑĢ ÐµÑģп", + "ĠÑĢе Ñģп", + "ĠÑĢеÑģ п", + "Ġta kdir", + "Ġtak dir", + "Ġrahat sız", + "éŁ³ ä¹IJ", + "Ġ âĶĥ", + "ĠâĶ ĥ", + "i lis", + "il is", + "ili s", + "ĠÙĪ Ø§ÙĦØ¥", + "ĠÙĪØ§ÙĦ Ø¥", + "å® Ļ", + "Ñĥ мов", + "Ñĥм ов", + "ĠÐĽ иÑĤ", + "ĠÐĽÐ¸ ÑĤ", + ": :::|", + ":: ::|", + ":::: |", + "::: :|", + "åħ ½", + "ĠÙĨزد ÛĮÚ©", + "е лÑĸв", + "ел Ñĸв", + "елÑĸ в", + "θ οÏįν", + "θο Ïįν", + "ìĹIJìĦľ ëıĦ", + "èµĦ æł¼", + "çIJĨ 论", + "ĠKe mal", + "ĠKem al", + "Ġк еÑĢ", + "ษ ายà¸Ļ", + "Ġ åįİ", + "Ġåį İ", + ") ìĹIJ", + "Ġ ëĬĺ", + "ĠëĬ ĺ", + "ãĥĿ ãĥ¼ãĥĪ", + "ĠÐĹ Ð´", + "اص ÙĬÙĦ", + "Ġk atı", + "Ġka tı", + "Ġkat ı", + "ãĤĤãģĹ ãĤĮãģªãģĦ", + "Ġкажд ого", + "Ġ дÑĢ", + "Ġд ÑĢ", + "Ġfut bol", + "ÙĦ ÙĬÙģ", + "ÙĦÙĬ Ùģ", + "Ġì§Ģ ëĤľ", + "ĠÙ¾ÛĮØ´ ÙĨÙĩ", + "ü lük", + "ül ük", + "ülü k", + "Ġ à¸ķำà¸ļล", + "Ġà¸ķำ à¸ļล", + "Ġb áºŃc", + "Ġ åĽł", + "ĠåĽ ł", + "ik ler", + "Ïģ ιά", + "Ïģι ά", + "Ġв важа", + "Ġвваж а", + "Ġvy pl", + "Ġvyp l", + "Ġв низ", + "í Ģ", + "çľ ¾", + "ĠÑģ ила", + "ĠÑģи ла", + "ĠÑģил а", + "ĠналиÑĩи и", + "Ġع راÙĤ", + "ĠاÙĦÙħ Ùĥ", + "å°± ä¼ļ", + "Ġм Ñĸг", + "ĠмÑĸ г", + "ĠÎĮ μιλοÏĤ", + "Ñī его", + "Ñīе го", + "Ġíĸī ìłķ", + "Âł mph", + "Âłm ph", + "Ġma lé", + "Ġmal é", + "ĠÛĮ اÙģØªÙĩ", + "ĠÛĮا ÙģØªÙĩ", + "ĠÛĮاÙģØª Ùĩ", + "Ġmn oha", + "Ġmnoh a", + "γ ά", + "Ġпо ÑģÑĤÑĢо", + "ĠпоÑģ ÑĤÑĢо", + "ĠпоÑģÑĤ ÑĢо", + "ĠاÙĦÙħ ÙĪØ³", + "ĠاÙĦÙħÙĪ Ø³", + "Ġol ma", + "Ġolm a", + "ëī´ ìĬ¤", + "Ġt utar", + "Ġtu tar", + "Ġtut ar", + "ãĥ¼ãĥĵ ãĤ¹", + "à¥įथ न", + "-ли бо", + "æ¥Ń åĭĻ", + "ĠоÑģоб ливо", + "ĠоÑģоблив о", + "è® Ģ", + "ÙģÙĩ ÙĪÙħ", + "Ġk ẻ", + "Ġ Å¡tÄĽ", + "ĠÅ¡ tÄĽ", + "ĠÅ¡t ÄĽ", + "Ġc ầm", + "ĠÄįlán ky", + "ĠÄIJ iá»ĩn", + "( =", + "OV Ãģ", + "ul du", + "uld u", + "a ft", + "af t", + "Ġl ãi", + "Ġlã i", + "Ġd oldur", + "Ġdol dur", + "³³ ³³³³³³³³³", + "³³³³ ³³³³³³³", + "³³³ ³³³³³³³³", + "³³³³³³³³ ³³³", + "³³³³³³³ ³³³³", + "³³³³³ ³³³³³³", + "³³³³³³ ³³³³³", + "³³³³³³³³³ ³³", + "β ι", + "ãģ£ãģ¦ ãģįãģŁ", + "ì¶ľìŀ¥ ìķĪë§Ī", + "å¯ Ŀ", + "Ġë¶Ģ íĥģ", + "ĠاÙĦ اخ", + "Ġγ Ïħνα", + "à¤ı म", + "à¥Į ल", + "ع ادة", + "عا دة", + "عاد Ø©", + "Ġ κοÏħ", + "Ġκ οÏħ", + "Ġκο Ïħ", + "ĠÙħØ· رØŃ", + "ĠÑĩелов еÑĩ", + "Ġn umar", + "Ġnum ar", + "Ġnu mar", + "Ġnuma r", + "Ġ дина", + "Ġд ина", + "Ġди на", + "ÏĦ ÏģÎŃ", + "ÏĦÏģ ÎŃ", + "λ ικ", + "λι κ", + "Ġдол го", + "Ġnh iêu", + "ĠвоÑģ ÑģÑĤанов", + "ap ı", + "Ġ kanı", + "Ġk anı", + "Ġkan ı", + "ĠK ế", + "ãĤī ãģļ", + "Ġhar ek", + "Ġha rek", + "Ġhare k", + "ãģłãģij ãģ§", + "æ» ħ", + "Ġo hled", + "Ġoh led", + "е ÑĢим", + "еÑĢ Ð¸Ð¼", + "еÑĢи м", + "ĠØŃ ÙĬÙĨ", + "ĠØŃÙĬ ÙĨ", + "ĠÙĤ Ùĩر", + "Ġब à¥Ŀ", + "اپ ÛĮÙħ", + "è¶ħ è¿ĩ", + "Ġ æħ", + "Ġæ ħ", + "Ġت Ù쨳", + "ĠتÙģ Ø³", + "as ıyla", + "ası yla", + "б иÑĤ", + "би ÑĤ", + "ĠØŃ اج", + "ĠÑĤÑĢеб ованиÑı", + "Ġ æİ¨", + "Ġæİ ¨", + "Ġ ç±³", + "Ġç± ³", + "ãĤ³ ãĥ¼ãĥī", + "ĠÑĥ Ñģи", + "ĠÑĥÑģ и", + "Ġاخ ÙĦاÙĤ", + "Ġdo stup", + "Ġdost up", + "Ġع ÙĦاÙĤ", + "ĠعÙĦ اÙĤ", + "िव स", + "Ġ оди", + "Ġо ди", + "Ġод и", + "t ej", + "te j", + "Ġthá» ıa", + "ัà¸ģษ à¸ĵะ", + "ัà¸ģษà¸ĵ ะ", + "ĠÑĢаÑģ к", + "ĠÑĢа Ñģк", + "ĠÐĿ аÑĢод", + "ĠÐĿа ÑĢод", + "Ġза кÑĥп", + "Ġзак Ñĥп", + "o že", + "ož e", + "Ġاج را", + "Ġاجر ا", + "ê´ij ê³ł", + "аÑĢÑĤ ам", + "Ġп еÑĢеж", + "ĠпеÑĢ ÐµÐ¶", + "ĠпеÑĢе ж", + "èij£ äºĭ", + "ĠÑı коÑģÑĤÑĸ", + "ĠÑıк оÑģÑĤÑĸ", + "Ġв Ñĥл", + "м он", + "мо н", + "Ġch lap", + "Ġ ÑįÑĤомÑĥ", + "ĠÑįÑĤ омÑĥ", + "ĠÑįÑĤо мÑĥ", + "ĠÑįÑĤом Ñĥ", + "а ÑĤÑĸ", + "аÑĤ Ñĸ", + "Ġ íĴĪ", + "Ġí ĴĪ", + "ĠíĴ Ī", + "è¡Ĺ éģĵ", + "س د", + "ÙĪ Ø±Ùĩ", + "ÙĪØ± Ùĩ", + "ĠزÛĮ اد", + "åľ¨çº¿ è§Ĩé¢ij", + "ا ÙĪÙĬØ©", + "اÙĪ ÙĬØ©", + "اÙĪÙĬ Ø©", + "ï¼Į å°±æĺ¯", + "ï¼Įå°± æĺ¯", + "e lerinden", + "eler inden", + "elerin den", + "elerinde n", + "ÑĢ Ð°Ð¶Ð´", + "ÑĢа жд", + "ÑĢаж д", + "Ġп озд", + "Ġпо зд", + "Ġпоз д", + "Ġзна ÑĤÑĮ", + "Ġзн аÑĤÑĮ", + "ัà¸ļ สà¸Ļ", + "ัà¸ļส à¸Ļ", + "à¥ĩà¤ĸ त", + "Ġ æĽ°", + "Ġæ Ľ°", + "ĠæĽ °", + "ê³¼ ìłķ", + "é® ®", + "ĠV iá»ĩn", + "ĠVi á»ĩn", + "Ġd voj", + "Ġdv oj", + "ίν εÏĦαι", + "Ġosob nÃŃch", + "ĠosobnÃŃ ch", + "Ġ âĢª", + "ĠâĢ ª", + "éĻ µ", + "ĠØ®ÙĪØ¯ Ø´", + "ĠاÙĨ ر", + "ĠпÑĢоÑĦеÑģÑģи оналÑĮ", + "k ám", + "ká m", + "ĠÙħ ÙĥاÙĨ", + "ĠÙħÙĥ اÙĨ", + "ĠاÙĦØ£ د", + "Ġ ê³µë¶Ģ", + "Ġê³µ ë¶Ģ", + "ĠÄij ức", + "ĠÄijứ c", + "ĠCumhur iyeti", + "ĠCumhuriyet i", + "åĩº ãģĹ", + "д ами", + "да ми", + "дам и", + "ĠìĪĺ ìĥģ", + "ĠÙģ Ø¨Ø±Ø§ÙĬر", + "Ġsü resi", + "Ġsür esi", + "Ġsüre si", + "Ġب ج", + "Ġ æĶ¾", + "ĠæĶ ¾", + "ØŃ ÛĮ", + "çłĶç©¶ æīĢ", + "åĩºçīĪ ç¤¾", + "ĠÙħÙĪ ØªÙĪØ±", + "&& &&", + "ĠпеÑĢ ÐµÐ¹", + "ĠпеÑĢе й", + "Ġ ìĦłê±°", + "ĠìĦł ê±°", + "ĠúspÄĽ Å¡", + "ار Ú©", + "Ġet tir", + "Ġett ir", + "Ġetti r", + "Ġ ì¶ľìŀ¥", + "Ġì¶ľ ìŀ¥", + "ĠKa nun", + "ĠKan un", + "ĠÑĥменÑĮ ÑĪ", + "ĠзаÑĤ веÑĢдж", + "ĠاÙĦد ÙĪÙĦÙĬ", + "ĠاÙĦدÙĪÙĦ ÙĬ", + "Ġ ãĥĵ", + "Ġãĥ ĵ", + "ĠB azı", + "ĠBa zı", + "ĠBaz ı", + "åŃIJ ãģ®", + "åĩ ¯", + "Ġse beb", + "Ġseb eb", + "Ġsebe b", + "Ġ åħ±", + "Ġåħ ±", + "Ġd nů", + "Ġdn ů", + "ä½į äºİ", + "ĠZ d", + "æī ±", + "Ġتج ربÙĩ", + "ÃĶ NG", + "Ġìĺ¬ ëĿ¼", + "Ïī ÏĦεÏģ", + "ĠÑģ вид", + "ĠÑģв ид", + "ĠÑģви д", + "æ¯Ķ èµĽ", + "ãģ« åIJij", + "ìľĦ 를", + "ãģĹ ãģ¾ãģĹãģŁ", + "ãģĹãģ¾ ãģĹãģŁ", + "Ġd á»ĭ", + "ĠÐł ÑĥÑģ", + "Ġv á»ı", + "Ġvá» ı", + "à¤Ĥड ल", + "Ġп иÑī", + "Ġпи Ñī", + "Ġsmr ti", + "Ġsmrt i", + "à¸Īาà¸ģ à¸ģาร", + "ĠÑģаÑħ аÑĢ", + "Ġtho át", + "ج ÙħØ©", + "جÙħ Ø©", + "Ġпоз вол", + "ĠاÙĦØ« اÙĨÙĬØ©", + "ĠاÙĦثاÙĨÙĬ Ø©", + "ز ادÙĩ", + "زا دÙĩ", + "ãĢģ ä¸Ń", + "ή μεÏģα", + "æ¦ ľ", + "l acaģı", + "lac aģı", + "lacaÄŁ ı", + "Ġна ÑĪиÑħ", + "ĠнаÑĪ Ð¸Ñħ", + "ìĶ Ģ", + "ĠÐĺ ÑģÑĤоÑĢиÑı", + "ün deki", + "ünd eki", + "ünde ki", + "ĠпеÑĢ ÐµÐ»", + "ĠпеÑĢе л", + "Ġ목 ìĨĮ", + "ĠÑģÑĤаÑĤ ÑĥÑģ", + "о вали", + "ов али", + "ова ли", + "овал и", + "ÅĻ az", + "ĠдÑĢÑĥг ого", + "ĠдÑĢÑĥго го", + "ÙĥÙĪÙħ Ø©", + "ÙĥÙĪ ÙħØ©", + "Ñĩ иÑģÑĤ", + "Ñĩи ÑģÑĤ", + "ÑĩиÑģ ÑĤ", + "μ μ", + "åıį åºĶ", + "ic ari", + "ica ri", + "ĠÙ¾ اک", + "Ġپا Ú©", + "алÑĮ ним", + "ĠB una", + "ĠBu na", + "ĠBun a", + "и ÑĤив", + "иÑĤ ив", + "иÑĤи в", + "ÑĦ ÑĢа", + "ãĥ¼ ãĥĸãĥ«", + "ãĥ¼ãĥĸ ãĥ«", + "ĠÑĤоб ÑĤо", + "룬 ìĬ¤", + "ĠاÙĦ اع", + "åħ¬ éĸĭ", + "å¥ ī", + "ÙĪÙĦ د", + "åIJį çĦ¡ãģĹ", + "æ°ij 主", + "à¥ģ à¤ľà¤°", + "à¥ģà¤ľ र", + "ìĤ¬ 무", + "Ġön celik", + "Ġönce lik", + "Ġönc elik", + "Ġ å¨", + "Ġå ¨", + "Ñı б", + "çľ ī", + "à¥įव य", + "ĠH ình", + "çļĦ åľ°æĸ¹", + "çļĦåľ° æĸ¹", + "ĠاÙĦ تس", + "ĠاÙĦت س", + "ä¸Ī 夫", + "Ġп ÑĥблÑĸ", + "ĠnÄĽjak é", + "ÄIJ á»iji", + "ĠÑģоÑģÑĤоÑı ниÑı", + "à¥Ģ )", + "ĠÄij áºŃu", + "j ed", + "je d", + "ê ¶ģ", + "Ġs enin", + "Ġse nin", + "Ġsen in", + "Ġseni n", + "ĠH óa", + "âĻ ł", + "лÑı ÑİÑĤÑĮ", + "лÑıÑİÑĤ ÑĮ", + "éĹ ²", + "ìĿ¸ íĬ¸", + "ت بÙĩ", + "تب Ùĩ", + "Ġरà¤ĸ त", + "ĠÑģлов ами", + "ĠÑģлова ми", + "ĠÑģло вами", + "Ġطب ÙĤ", + "Ġuy du", + "ุà¸ĩà¹Ģà¸Ĺà¸ŀ มหาà¸Ļà¸Ħร", + "ĠSan at", + "ĠSa nat", + "à¹ī าà¸Ĭ", + "à¹īา à¸Ĭ", + "Ġкни ж", + "Ìģ c", + "ا Ùħج", + "اÙħ ج", + "δ Ïİ", + "Å ®", + "Ġb inh", + "Ġbi nh", + "Ġbin h", + "è¾ Ĩ", + "n eÄŁi", + "ne ÄŁi", + "Ø· ÙĨ", + "å¸ ķ", + "Ġ ìĩ¼", + "Ġì ĩ¼", + "оÑģ ÑĢед", + "ĠοÏĢο ίο", + "k ır", + "kı r", + "à¥Ī श", + "Ġ à¸ĩาà¸Ļ", + "Ġà¸ĩ าà¸Ļ", + "Ġd ruž", + "Ġdru ž", + "em atik", + "ema tik", + "emat ik", + "a dıģ", + "ad ıģ", + "adı ÄŁ", + "è¾ ŀ", + "ĠpoužÃŃ vá", + "Ġkur tar", + "ĠsaÄŁ lan", + "ãĢı ï¼Ī", + "Ġmůže me", + "Ġmůž eme", + "Ġ باد", + "Ġب اد", + "Ġبا د", + "æľŁ éĹ´", + "ا تÙģ", + "ات Ùģ", + "Ġyaz ılım", + "Ġyazılı m", + "ĠìŰ ê²°", + "ÙĬ Ù쨩", + "ÙĬÙģ Ø©", + "Ġ emin", + "Ġe min", + "Ġem in", + "ĠнеÑģколÑĮ киÑħ", + "Û´ Û°", + "å¯ §", + "ί ζει", + "ίζ ει", + "Ġd él", + "Ġdé l", + "ver iÅŁ", + "価 æł¼", + "Ġاست اد", + "Ġал ког", + ".H CM", + "ί οÏĤ", + "ίο ÏĤ", + "α κ", + "Ø· ع", + "ãģ£ ãģį", + "ãģ£ãģ į", + "Ñı еÑĤÑģÑı", + "ÑıеÑĤ ÑģÑı", + "л ика", + "ли ка", + "лик а", + "Ġ ÑĨÑı", + "ĠÑĨ Ñı", + "Ġë§Ī ì§Ģë§ī", + "ĠаÑĢ Ð¼Ð¸", + "Ġγ λÏİ", + "E NÃį", + "EN Ãį", + "ë ®¤", + "ŃIJ ï¸ı", + "Ġ æ¯ı", + "Ġæ¯ ı", + "Ġ æĸ¼", + "Ġæĸ ¼", + "Ġκα λÏį", + "ĠТ ом", + "ĠТо м", + "ul ur", + "ulu r", + "Ġak ce", + "ĠÙħÙĪ Ø¬Ø¨", + "ĠÙħÙĪØ¬ ب", + "e siz", + "es iz", + "esi z", + "н Ñıв", + "нÑı в", + "алÑĮ нÑĥÑİ", + "алÑĮнÑĥ Ñİ", + "ал ÑĸÑģÑĤ", + "алÑĸ ÑģÑĤ", + "Ġв аÑĢÑĸ", + "ĠваÑĢ Ñĸ", + "Ġва ÑĢÑĸ", + "ĠÙħؤ س", + "ĠÙħ اÛĮÙĦ", + "ĠÙħا ÛĮÙĦ", + "ĠμεÏĦα ξÏį", + "åĩº ãģĻ", + "Ġv á»Ŀi", + "Ġvá» Ŀi", + "ëŁ ´", + "ï¼ ĭ", + "æ¯ İ", + "Ġt abi", + "Ġtab i", + "Ġta bi", + "âĤ ĥ", + "æ£ĭ çīĮ", + "Ġ ÃIJ", + "Ġà IJ", + "ĠпÑĢоÑĦеÑģ Ñĸй", + "Ñĥв аннÑĸ", + "Îľ Îł", + "Ġж ил", + "Úĺ ÙĨ", + "л ÑĥÑĪ", + "лÑĥ ÑĪ", + "á½ ´", + "о веÑĢ", + "ов еÑĢ", + "ове ÑĢ", + "è¾¼ ãģ¿", + "ĠÐľ акÑģим", + "ĠÐľÐ°Ðº Ñģим", + "Ġвз глÑıд", + "Ġн аÑĤÑĥ", + "Ġна ÑĤÑĥ", + "ĠнаÑĤ Ñĥ", + "म à¤ķ", + "ĠÑħ ими", + "ĠÑĢозÑĤа ÑĪ", + "ÙĪ Ø±Ø§ÙĨ", + "ÙĪØ± اÙĨ", + "ÙĪØ±Ø§ ÙĨ", + "ĠØ´Ùĩر ÙĩاÛĮ", + "æ© Łèĥ½", + "æ©Ł èĥ½", + "Ø® ذ", + "ĠÑģво ÑĶÑĹ", + "ĠÑģвоÑĶ ÑĹ", + "н ÑıеÑĤ", + "нÑı еÑĤ", + "Ġgh ế", + "ĠpÅĻed ch", + "ÑĶ ÑĪ", + "огÑĢаÑĦ ÑĸÑı", + "Ġ à¸Ĺำà¹ĥห", + "Ġà¸Ĺำ à¹ĥห", + "åĿ Ĭ", + "Ïģ Ïīν", + "ÏģÏī ν", + "า ระ", + "าร ะ", + "ĠK ết", + "ĠKế t", + "Ġch ặt", + "Ġ éĻĪ", + "ĠéĻ Ī", + "ĠdÄĽ lat", + "ĠdÄĽl at", + "ĠбÑĥд ÑĥÑī", + "ĠбÑĥдÑĥ Ñī", + "ĠAç ık", + "æłª å¼ıä¼ļ社", + "ĠÐŁ аÑĢ", + "ĠK hu", + "ĠKh u", + "ãĢģ æĸ°", + "Ġб ой", + "Ġбо й", + "ë§Ī íĬ¸", + "ĠÑģоп ÑĢов", + "س اب", + "н иÑģÑĤ", + "ни ÑģÑĤ", + "å¼ ĥ", + "Ġ Ø´ÙĨاس", + "ĠØ´ÙĨ اس", + "ен ном", + "енно м", + "Ġ 项", + "Ġé¡ ¹", + "èīº æľ¯", + "о зем", + "оз ем", + "ĠÑĢеÑĪ ÐµÐ½Ð¸Ñı", + "l ady", + "la dy", + "lad y", + "ĠвÑģ ей", + "ĠвÑģе й", + "æĶ» åĩ»", + "Ġê²° ìłķ", + "ãĢĢ ï¾ŀ", + "Ġê°IJ ëıħ", + "- ÐIJ", + "Ġm ÃŃr", + "ĠmÃŃ r", + "à¥ģप à¤ı", + "нÑĸ ÑĨип", + "б ом", + "бо м", + "Ġ Å¡t", + "ĠÅ¡ t", + "éľ į", + "ĠÑĢеÑĪ ÐµÐ½Ð¸Ðµ", + "Ġдиаг ноÑģÑĤи", + "i par", + "ip ar", + "ipa r", + "ا ÛĮز", + "اÛĮ ز", + "ã ng", + "ãn g", + "ั วร", + "ัว ร", + "ĠÑĨ аÑĢ", + "Ġs ly", + "Ġsl y", + "ν Ïİ", + "ĠK uzey", + "رÛĮ ب", + "Ġc enu", + "Ġce nu", + "Ġcen u", + "Ġcert if", + "Ġcer tif", + "ĠÑĤ ÑĢеÑĤÑĮ", + "ĠÑĤÑĢ ÐµÑĤÑĮ", + "ĠÑĤÑĢеÑĤ ÑĮ", + "ิà¸Ķ à¸Ĥ", + "Ġпа ÑĨÑĸÑĶн", + "ÅĻ iv", + "ÅĻi v", + "èĦ Ĥ", + "¢ °", + "ĠPh ần", + "ĠмеÑĤод и", + "ĠмеÑĤ оди", + "Ạ¤", + "ìĨ Ķ", + "åIJĮ åѦ", + "Ġ åĢĭ", + "ĠåĢ ĭ", + "моÑĤ ÑĢÑı", + "моÑĤÑĢ Ñı", + "Ġuv ád", + "Û±Û¹ Û¶", + "éģ¸ æĬŀ", + "! »", + "ë ĺIJ", + "ĠÛĮ ÙĪØªÛĮ", + "ĠاÙĦØŃ رب", + "ĠاÙĦØŃر ب", + "олог ÑĸÑı", + "n ila", + "ni la", + "nil a", + "ĠÄij ảng", + "á zi", + "áz i", + "ÑĢ Ð¾Ñī", + "ÑĢо Ñī", + "Ġort adan", + "Ġorta dan", + "Ġاخ بار", + "Ġà¤ħ à¤ľ", + "Ġ매 ìļ°", + "Ġп ой", + "Ġпо й", + "Ġ جÙĬ", + "Ġج ÙĬ", + "к ÑĥваÑĤи", + "кÑĥ ваÑĤи", + "Ġá» ŀ", + "Ġب شر", + "Ġبش ر", + "Ġ ÙĥÙĬÙĦ", + "ĠÙĥ ÙĬÙĦ", + "Ñī еÑģÑĤво", + "Ñīе ÑģÑĤво", + "ÑīеÑģÑĤв о", + "ĠìŬ íĸī", + "ا ÙħÙĬ", + "اÙħ ÙĬ", + "в ÑĸлÑĮ", + "вÑĸ лÑĮ", + "ĠPr vnÃŃ", + "Ġ ÙĪØ³ÛĮ", + "ĠÙĪ Ø³ÛĮ", + "ĠÙĪØ³ ÛĮ", + "ĠÄIJ á»", + "æĪ¿ éĹ´", + "åľ¨çº¿ éĺħ读", + "æķ ·", + "Ġt rai", + "Ġtr ai", + "Ġtra i", + "ä¿ Ĺ", + "ĠÑģамоÑģÑĤоÑıÑĤелÑĮ но", + "ĠÑĤÑĢеб ÑĥеÑĤÑģÑı", + "ĠÑĤÑĢебÑĥеÑĤ ÑģÑı", + "δ Ïģα", + "ĠÑĢеÑĩ ов", + "Ġв Ñĸк", + "ĠвÑĸ к", + "Ġ ÑĢÑĥÑĩ", + "ĠÑĢ ÑĥÑĩ", + "ĠÑĢÑĥ Ñĩ", + "å¥ §", + "ĠolduÄŁ una", + "ĠolduÄŁu na", + "ев Ñĭе", + "Ġ à¸Ħล", + "Ġà¸Ħ ล", + "ا ÙĦÙĤ", + "اÙĦ ÙĤ", + "ĠÑĸм енÑĸ", + "ĠÑĸмен Ñĸ", + "æĶ» æĴĥ", + "ĠÑĥнивеÑĢ ÑģиÑĤ", + "Ġth Äĥm", + "ĠлиÑģÑĤоп ада", + "२ ०", + "Ø® ÙĬ", + "Îķ Îł", + "Ġart tır", + "Ġس خت", + "Ġسخ ت", + "ï¼Ī æĺŃåĴĮ", + "ĠÎŁ Ïħ", + "и ваниÑı", + "ив аниÑı", + "ива ниÑı", + "Ġstav eb", + "âħ ¥", + "γÏī γή", + "γÏīγ ή", + "Ù ©", + "ĠиÑģÑģлед ованиÑı", + "åĢĭ 人", + "Ġëĭ¤ìļ´ë°Ľ 기", + "ĠÏĦ ελ", + "ĠÏĦε λ", + "° N", + "ĠباÙĦ ÙĨ", + "à¹Į à¸ŀ", + "Ġnem ůže", + "Ġголов а", + "Ġгол ова", + "à¹Į à¹ģ", + "æ¢ ¯", + " ĺ", + "δ ηÏĤ", + "δη ÏĤ", + "ìĿ¸ ì¦Ŀ", + "l ayın", + "lay ın", + "á½ ·", + "ĠÙĨت اÛĮج", + "ĠÑģоб лÑİд", + "Ġдви жениÑı", + "Ġдвиж ениÑı", + "ì Į", + "Ġ povÄĽ", + "Ġp ovÄĽ", + "Ġpo vÄĽ", + "Ġpov ÄĽ", + "Ġ ìłĦìĹIJ", + "ĠìłĦ ìĹIJ", + "å¦Ĥ ä¸ĭ", + "ĠاÙĦÙħ در", + "ĠاÙĦÙħد ر", + "ï¼Į æĪĸ", + "ا را", + "ار ا", + "æ°ij æĹı", + "Ġب رÙĤ", + "Ġبر ÙĤ", + "Ġзап аÑģ", + "à¸Ļ à¹ĥà¸Ī", + "é f", + "Ġ à¸Łà¸£", + "Ġà¸Ł ร", + "Ġë³´ ëĤ´", + "Ġ 欧ç¾İ", + "Ġ欧 ç¾İ", + "- ÑĤаки", + "-ÑĤ аки", + "é© ļ", + "ÑĢ ÑĸÑı", + "ÑĢÑĸ Ñı", + "æŁ ı", + "ĠповÑĸÑĤ ÑĢÑı", + "çµĦ ç¹Ķ", + "d aÅŁ", + "da ÅŁ", + "Ġहम ल", + "ĠÑĢеÑĶ ÑģÑĤÑĢа", + "ά β", + "ĠÎł ο", + "Ġê·¸ 림", + "Ñĩ аÑİÑĤ", + "Ñĩа ÑİÑĤ", + "à¸ĩ à¸ķ", + "íĥ ĢìĿ´", + "íĥĢ ìĿ´", + "æī ¬", + "Ġpo jist", + "Ġpoj ist", + "Ġ çłĶ", + "Ġçł Ķ", + "Ġ åıĸ", + "Ġåı ĸ", + "Ġüzer indeki", + "Ġüzerinde ki", + "j Å¡ÃŃch", + "jÅ¡ÃŃ ch", + "à¥Ģद व", + "æª ¢", + "ĠмаÑĤеÑĢи алов", + "ĠмаÑĤеÑĢиал ов", + "и ваннÑı", + "ив аннÑı", + "Ġ å°Ĩ", + "Ġå° Ĩ", + "л л", + "Ġнаб лÑİд", + "ĠнаблÑİ Ð´", + "ĠG öz", + "ĠGö z", + "Ġв зÑı", + "Ġвз Ñı", + "ç͵ è§Ĩ", + "Ġв ак", + "Ġва к", + "ç¿ Ķ", + "Ġвза им", + "Ġg itti", + "Ġgi tti", + "Ġgit ti", + "it eleri", + "ite leri", + "itel eri", + "itele ri", + "ä»· å̼", + "ĠاÙĦ تص", + "ĠاÙĦت ص", + "िन à¤ķ", + "éĢļ ãĤĬ", + "ĠÑģ ÑĦеÑĢ", + "ĠÑģÑĦ еÑĢ", + "çĻº 売", + "âĿ ¤", + "ĠÚ¯ÙĪØ´ ÛĮ", + "ĠÚ¯ÙĪ Ø´ÛĮ", + "аг аÑĤо", + "ĠÏĥÏħ γκ", + "ав иÑģ", + "ави Ñģ", + "æĤ£ èĢħ", + "ĠØ® اÙħ", + "ÎĻÎļ ÎĹΣ", + "ÎĻÎļÎĹ Î£", + "ınız da", + "pan ÄĽl", + "pa nÄĽl", + "ĠÄIJ á»ĭa", + "à¹ģละ ส", + "Ġ ãĤĤ", + "ĠãĤ Ĥ", + "Ġsonuc unda", + "Ġsonucu nda", + "ìĿ į", + "e less", + "el ess", + "ele ss", + "ĠN ha", + "ĠNh a", + "Ġzak áz", + "Ġв оÑģÑĤ", + "Ġво ÑģÑĤ", + "ĠвоÑģ ÑĤ", + "ĠvzdÄĽl ávánÃŃ", + "- ม", + "Ġmet rů", + "ĠپاÛĮ ÛĮÙĨ", + "Ġپا ÛĮÛĮÙĨ", + "ĠÑĢаÑģÑĤ ение", + "Ġmu á»iji", + "èµĦ éĩij", + "ĠÅŁ üph", + "ÙĬ ÙĦÙħ", + "ÙĬÙĦ Ùħ", + "ĠdÃ¼ÅŁÃ¼n c", + "Ġк Ñĸм", + "ĠÏĩÏī ÏģίÏĤ", + "áz ev", + "áze v", + "ĠDe ÄŁer", + "ĠDeÄŁ er", + "å·¥ æ¥Ń", + "Ġر Ùħز", + "ĠرÙħ ز", + "Ġal espoÅĪ", + "ĠпÑĢе ÑģÑĤÑĥп", + "ĠпÑĢеÑģÑĤ Ñĥп", + "ĠعÙĦ اÙĪÙĩ", + "Ġme rak", + "Ġmer ak", + "à¹Į :", + "çݰ åľº", + "ÑĨ веÑĤ", + "Ġप à¥ľ", + "Ġëĭ¤ìĿĮ ê³¼", + "u dic", + "ud ic", + "udi c", + "ĠL ep", + "ĠLe p", + "Ġод нÑĸ", + "Ġa larak", + "Ġal arak", + "å®ī æİĴ", + "Ġ à¸Ĥà¸Ļาà¸Ķ", + "Ġà¸Ĥ à¸Ļาà¸Ķ", + "re zent", + "rez ent", + "is inden", + "isin den", + "isinde n", + "ر ÙĪÛĮ", + "رÙĪ ÛĮ", + "Ġp lu", + "Ġpl u", + "ç«ĭ ãģ¦", + "Ñĭ ваниÑı", + "Ñĭв аниÑı", + "Ñĭва ниÑı", + "Ġr ast", + "Ġra st", + "Ġras t", + "Ġdüzen lem", + "je zd", + "jez d", + "Ġве ÑīеÑģÑĤв", + "ĠвеÑī еÑģÑĤв", + "ĠдиÑĢ ÐµÐºÑĤоÑĢ", + "ÑĦ ÑĦ", + "t ainment", + "tain ment", + "ĠاÙĦ ÙĪØ²", + "ĠاÙĦÙĪ Ø²", + "l anda", + "land a", + "la nda", + "lan da", + "ĠÙĨÚ¯ Ùĩد", + "ĠпÑĢоÑĤив оп", + "ãģ£ ãģı", + "ãģ£ãģ ı", + "ãģ¨ãģª ãĤĬ", + "Ġë°ľ 견", + "i ctor", + "ic tor", + "ict or", + "ãĤ¸ ãĤª", + "ÎŁ Φ", + "ÎŁÎ ¦", + "ĠÑģклад Ñĸ", + "Ġob sahuje", + "Ġobsah uje", + "ĠUkr a", + "ĠUk ra", + "æķ ¦", + "ĠÏĩ αÏģα", + "ĠÏĩα Ïģα", + "ĠÑĢег Ñĥли", + "俺 ãģ¯", + "ัà¸ķ ว", + "éĦ ī", + "Ġب اÛĮ", + "Ġبا ÛĮ", + "éĬ ·", + "ĠN ẵng", + "л од", + "ло д", + "ا رÙģ", + "ار Ùģ", + "æ´ ģ", + "ĠëıĻ ìĿ¼", + "ÑĤив ного", + "âĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģ âĶģâĶģâĶģâĶģâĶģâĶģâĶģâĶģ", + "Ġ- :-", + "Ġ-: -", + "ì» ¬", + "ĠÑĪ Ð°Ð³", + "ìłĦ ìŀIJ", + "çļĦ äºĭæĥħ", + "çļĦäºĭ æĥħ", + "ĠÑĢег Ñĸ", + "िय ल", + "ĠÐĿ аз", + "ĠÐĿа з", + "ĠÐĻ Ð¾Ð³Ð¾", + "ĠÐł ом", + "ĠÃĸr neÄŁin", + "Ġп ÑĢеÑģ", + "ĠпÑĢ ÐµÑģ", + "ĠпÑĢе Ñģ", + "u luÄŁu", + "ulu ÄŁu", + "uluÄŁ u", + "Ġза дов", + "Ġзад ов", + "ÅĻ eh", + "ÅĻe h", + "æ¯ķ ä¸ļ", + "Ġth áºŃp", + "ëĤ ¸", + "Ġdlou hodob", + "Ġdlouho dob", + "дÑĸ лÑĥ", + "дÑĸл Ñĥ", + "a lat", + "al at", + "ala t", + "ä» °", + "о ком", + "ок ом", + "око м", + "ĠÑĦ ÑĸлÑĮ", + "ĠÑĦÑĸл ÑĮ", + "ĠNg ân", + "Ġ ترÙĥ", + "Ġت رÙĥ", + "Ġتر Ùĥ", + "ĠÑĤ Ñī", + "ر ÙĪØ¯", + "رÙĪ Ø¯", + "ç uk", + "çu k", + "ra nÃŃ", + "ran ÃŃ", + "Ġdo laÅŁ", + "Ġdol aÅŁ", + "ĠQ uang", + "ĠQu ang", + "ĠpÅĻed pok", + "Ġnám ÄĽstÃŃ", + "ой Ñĩив", + "çĭ Ģ", + "Ġб изнеÑģ", + "ãģŁ ãģı", + "ĠìĿ¸ ì²ľ", + "о ÑĢо", + "оÑĢ Ð¾", + "ĠKü rt", + "ĠKür t", + "ê·¸ 룬", + "ÑĨ аÑĤÑĮ", + "ÑĨа ÑĤÑĮ", + "ĠB ên", + "Ġ acı", + "Ġa cı", + "Ġac ı", + "Ú© Ø´", + "ï¼Ī å¹³æĪIJ", + "Ġ èģĶ", + "Ġèģ Ķ", + ") ãĢģ", + "d iler", + "di ler", + "Ñĩ иÑĤÑĮ", + "ÑĩиÑĤ ÑĮ", + "Ñĩи ÑĤÑĮ", + "Ư á»", + "éĻ ¶", + "il eceÄŁini", + "ilece ÄŁini", + "ileceÄŁi ni", + "Ġv Å¡em", + "ĠvÅ¡ em", + "ĠvÅ¡e m", + "å¼Ģ å¥ĸ", + "è§Ħ 模", + "ul muÅŁ", + "Ġ åĪĺ", + "Ġå Īĺ", + "ĠåĪ ĺ", + "е о", + "еР¾", + "ĠпеÑĢев ÑĸÑĢ", + "åĪĨ åĪ«", + "Ġjed ná", + "Ġjedn á", + "li ÄŁe", + "liÄŁ e", + "ĠرÙħ ضاÙĨ", + "ık lı", + "ıkl ı", + "Ùĩ ÙĢ", + "éĩį çĤ¹", + "Ñĩ иваеÑĤÑģÑı", + "Ñĩи ваеÑĤÑģÑı", + "Ñĩив аеÑĤÑģÑı", + "Ñĩива еÑĤÑģÑı", + "ë¡ľ ìĦľ", + "ÏĦ εÏģο", + "ÏĦε Ïģο", + "ÏĦεÏģ ο", + "åľ° ä¸ĭ", + "д наннÑı", + "дн аннÑı", + "Ġng ược", + "ॠª", + "ĠÎij λ", + "Ġa lacak", + "Ġal acak", + "Ġ à¹Ģà¸ĩ", + "Ġà¹Ģ à¸ĩ", + "Ġà¹Ģภĩ", + "اÛĮ ÙĨد", + "اÛĮÙĨ د", + "Ġh Ãłi", + "ÑĢо из", + "ĠЧ и", + "Ġ ÑıÑģ", + "ĠÑı Ñģ", + "خر ÛĮد", + "Ġhu deb", + "Ġhud eb", + "åľ §", + "Ġ ìĦ¼", + "ĠìĦ ¼", + "å͝ ä¸Ģ", + "Ġ вÑĸлÑĮ", + "Ġв ÑĸлÑĮ", + "ĠвÑĸ лÑĮ", + "ĠباÙĦ اتر", + "ĠباÙĦا تر", + "à¸Ńà¸ģ าส", + "Ġ Tôi", + "ĠT ôi", + "ม à¸Ĥ", + "o mor", + "om or", + "omo r", + "ĠO lomou", + "Ġx ong", + "Ġxo ng", + "Ġdomác ÃŃ", + "Ġ اختÛĮ", + "Ġاخ تÛĮ", + "Ġاخت ÛĮ", + "ĠÑĤеÑħ нÑĸÑĩ", + "ĠÑĤеÑħнÑĸ Ñĩ", + "ĠiÅŁ te", + "à¥Į द", + "Ġнад еж", + "Ø®ÛĮ ص", + "åĬª åĬĽ", + "ĠتجÙĩ ÛĮزات", + "Ġv ole", + "Ġvo le", + "Ġvol e", + "k inci", + "kin ci", + "Ġhes ab", + "ĠÑģ еÑģÑĤ", + "Ú© ا", + "ÑĤеÑĢ Ð½", + "ร รà¸Ħ", + "รร à¸Ħ", + "åıĤ èĢĥ", + "ĠÐļ аб", + "ĠÐļа б", + "Ġİ mpar", + "Ġnáv rh", + "Ġnávr h", + "åĴ¨ 询", + "à¸ĸ าม", + "Ġye rel", + "Ġyer el", + "Ġyere l", + "ĠÃĸ l", + "çĮ Ľ", + "ĠاÙĦÙĪØ· ÙĨÙĬ", + "Ġ ìĿ´ìĸ´", + "ĠìĿ´ ìĸ´", + "ิà¸Ĺย าศาสà¸ķร", + "ิà¸Ĺยา ศาสà¸ķร", + "ĠA ÅŁ", + "Ġзем лÑİ", + "ĠдомаÑĪ Ð½Ð¸Ñħ", + "ĠÑĥ веÑĢ", + "ĠÑĥв еÑĢ", + "A LI", + "AL I", + "г ан", + "га н", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "Ġdo stan", + "Ġdos tan", + "Ġdost an", + "ez pe", + "ãģĭ ãģĦ", + "ر ÙģØªÙĩ", + "رÙģ ØªÙĩ", + "رÙģØª Ùĩ", + "Ġм ÑĥÑģ", + "ĠмÑĥ Ñģ", + "à¹Į à¸Ł", + "è¦ º", + "али за", + "ализ а", + "ĠÑĥÑĩ ÑĢежд", + "ĠÚ© اÙĦ", + "Ġetk isi", + "Ġetki si", + "ä½Ĩ æĺ¯", + "Ġsou vis", + "ĠSav aÅŁÄ±", + "ĠSavaÅŁ ı", + "Ġب سبب", + "ÎŁ ι", + "ÎŁÎ ¹", + "è ļ", + "Ġ æ®", + "Ġæ ®", + "Ġìĺģ êµŃ", + "ا سÛĮÙĪÙĨ", + "اسÛĮ ÙĪÙĨ", + "ĠاÙĦات ØŃاد", + "Ġ глÑı", + "Ġг лÑı", + "à¹ĩà¸ģ à¸ĭ", + "Ġج ÙĪÙĨ", + "ĠجÙĪ ÙĨ", + "ĠاÙĦرسÙħ ÙĬ", + "Âł G", + "ĠÑĤо бÑĸ", + "ĠÑĤоб Ñĸ", + " ĩ", + "Ġ ëĮĢíĸī", + "ĠëĮĢ íĸī", + "çĬ¶ æħĭ", + "Ġê·¸ ëĥ¥", + "Ġи мп", + "Ġим п", + "ĠتÙĨظ ÛĮÙħ", + "ÙĦ اÛĮÙĨ", + "ÙĦا ÛĮÙĨ", + "ÑģÑĤв еннÑĭм", + "ÑģÑĤвен нÑĭм", + "о пол", + "оп ол", + "ر ÙĪØ¬", + "رÙĪ Ø¬", + "Ġ à¸ĩ", + "Ġภĩ", + "Ġ çĤº", + "ĠçĤ º", + "ĠUlus lararası", + "à¥Į à¤Ĥ", + "ãĢģ ãģĿãģĨ", + "Ġس ادÙĩ", + "ÎŃ Î±ÏĤ", + "ÎŃα ÏĤ", + "Ġà¤Ĩ ल", + "- ÑĦ", + "ĠÎłÎ¿Î» ι", + "ĠÎłÎ¿ λι", + "Ġно ÑıбÑĢÑı", + "ĠноÑı бÑĢÑı", + "ÙĪ ÙĦÙĬ", + "ÙĪÙĦ ÙĬ", + "æĽľ æĹ¥", + "æĮģ ç»Ń", + "Ġê¼ Ń", + "ece ÄŁiz", + "eceÄŁi z", + "ĠÛĮ اÙģØª", + "ĠÛĮا ÙģØª", + "Ġ åı¸", + "Ġåı ¸", + "ाà¤Ĺ त", + "Ġ æķħ", + "Ġæķ ħ", + "Ġал леÑĢг", + "Ġt uz", + "Ġtu z", + "еÑĢ ÑĤи", + "еÑĢÑĤ и", + "Ġth ầu", + "ãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ĠãĢĢ", + "- à¤ħ", + "Ġим мÑĥ", + "ÑĢ Ð°Ð¹", + "ÑĢаР¹", + "ÑĢа й", + "主 義", + "ĠbaÅŁ lar", + "Ġä¸Ĭ 涨", + "ع ا", + "ĠÎĻ Ïī", + "ียà¸ĩ à¹ĥหม", + "ĠاÙĦÙħد ÙĬÙĨØ©", + "Ñģ ÑĮко", + "ÑģÑĮ ко", + "ÑģÑĮк о", + "ĠتارÛĮØ® ÛĮ", + "at ÃŃm", + "âĢļ Ø·", + "Ø¢ خر", + "ĠëĦ £", + "ĠÙĨÙħ اÛĮد", + "ĠÙĨÙħاÛĮ د", + "ãģķãĤĵ ãģĮ", + "Ġb ò", + "Ġ à¸ķาม", + "Ġà¸ķ าม", + "ë³´ ìķĺëĭ¤", + "а ÑĤÑĸв", + "аÑĤ Ñĸв", + "аÑĤÑĸ в", + "ĠÑĦ ил", + "Ġkısm ı", + "iá»ĩ ng", + "iá»ĩn g", + "Ġay dın", + "éģķ ãģĦ", + "е ви", + "ев и", + "Ġ å¾®", + "Ġå¾ ®", + "( íģ¬ê¸°", + "Ġ Ú¯ÛĮر", + "ĠÚ¯ ÛĮر", + "ĠÚ¯ÛĮ ر", + "ìķĦ ìĦľ", + "Ġδη μιοÏħÏģγ", + "ãģ«ãģĬ ãģĦãģ¦", + "ĠÃľ Nİ", + "и ÑĤом", + "иÑĤ ом", + "ع ÙĦاÙħ", + "عÙĦ اÙħ", + "åIJİ çļĦ", + "Ġp lá", + "Ġpl á", + "à¸Ľà¸£à¸° à¹Ĥย", + "ç¢ İ", + "Ġ éĺ²", + "Ġéĺ ²", + "ëĬ Ķëĭ¤", + "ëĬĶ ëĭ¤", + "Ġ æĹ¥æľŁ", + "ĠæĹ¥ æľŁ", + "Ġgeç erli", + "л аÑĤÑĭ", + "ла ÑĤÑĭ", + "лаÑĤ Ñĭ", + "Ġmutlak a", + "ÙĪ Øº", + "à¹Ģ ฮ", + "à¹Ģภ®", + "Ġï» £", + "e deki", + "ed eki", + "ede ki", + "à¹Į à¹Ģà¸Ļ", + "Ġнайб ÑĸлÑĮÑĪ", + "ĠнайбÑĸлÑĮ ÑĪ", + "ï¼ Ĭ", + "Ġ à¹Ĥรà¸ĩ", + "Ġà¹Ĥ รà¸ĩ", + "Ġfot bal", + "Ġ éĢģ", + "ĠéĢ ģ", + "âĢĮاÙĦ ÙħÙĦ", + "Ïīμά ÏĦιο", + "Ġú kol", + "åįļ 士", + "d ub", + "du b", + "ı lıģ", + "ılı ÄŁ", + "ıl ıģ", + "ëĵľ 를", + "çĭ IJ", + "α λλ", + "αλ λ", + "æŃ» 亡", + "ĠпÑĢед поÑĩ", + "çµ µ", + "Ġм ÑĥзÑĭ", + "ĠмÑĥ зÑĭ", + "ĠмÑĥз Ñĭ", + "еÑĢÑĤ в", + "ĠÙĥ ÙĨد", + "ĠÙĥÙĨ د", + "Ġu lož", + "Ġul ož", + "ÎŁÎ¥ ÎĽ", + "g ili", + "gi li", + "gil i", + "üs tü", + "üst ü", + "н ки", + "ĠÙĤ ÙĪØ§ÙĨ", + "ι ακ", + "ια κ", + "ĠÅŁ er", + "ĠкиÑģ л", + "Ġки Ñģл", + "Ùģ Ø¶ÙĦ", + "ĠÐIJ ÑĦ", + "γ εν", + "γε ν", + "Ġdo stal", + "Ġdos tal", + "Ġdost al", + "ĠsaÄŁ lıklı", + "ĠsaÄŁlık lı", + "å®¶ æĹı", + "ÄIJ T", + "е ÑĢин", + "еÑĢ Ð¸Ð½", + "еÑĢи н", + "ĠìĿ´ë٬ íķľ", + "Ġdüny ada", + "Ġdünya da", + "Ġnh ắc", + "Âł ÂłĊ", + "³³ Ċ", + "ν ηÏĥη", + "νη Ïĥη", + "γÏģα μμα", + "Ġtak son", + "ĠTürk çe", + "ĠÙģØ±Ø§ÙĨ سÙĩ", + "天 åłĤ", + "æº ¶", + "Ġ oto", + "Ġo to", + "Ġot o", + "èµ µ", + "ch yb", + "chy b", + "Ġ å¾Ĵ", + "Ġå¾ Ĵ", + "ÏĦ Ïį", + "áh nout", + "à¥į पर", + "à¥įप र", + "Ġv las", + "Ġvl as", + "Ġíļ¨ ê³¼", + "Ġt hang", + "Ġth ang", + "Ġthan g", + "Ġtha ng", + "Ġol masına", + "Ġolm asına", + "Ġolması na", + "ĠпоÑĢÑĥÑĪ ÐµÐ½Ð½Ñı", + "Ġqu ỹ", + "ĠíĿ IJ", + "ĠìĪ ¨", + "Ġ ë²Ī째", + "Ġë²Ī 째", + "ẹ n", + "Ġз год", + "Ġзг од", + "Ġ تز", + "Ġت ز", + "Ġاخ تص", + "Ġاخت ص", + "ĠзÑĥÑģÑĤ ÑĢÑĸ", + "Ġt ặng", + "á¿¶ ν", + "Ġ ì½ľ", + "Ġì½ ľ", + "ов аниÑħ", + "ова ниÑħ", + "овани Ñħ", + "ован иÑħ", + "âĢĮ شد", + "âĢĮØ´ د", + "Ġa raya", + "Ġar aya", + "Ġara ya", + "Ġaray a", + "r ové", + "ro vé", + "rov é", + "Ġاخ تÙĦ", + "Ġاخت ÙĦ", + "ли вий", + "лив ий", + "Ġات ØŃاد", + "Ġak ÅŁam", + "ĠÚ©ÙĦ اس", + "ãĤ¢ ãĥĥãĥĹ", + "Ġz ih", + "Ġzi h", + "å ĩĮ", + "åĩ Į", + "å±± å¸Ĥ", + "Ġçev res", + "Ġçevr es", + "Ġçevre s", + "Ġог ÑĢом", + "ĠØ¢ دÙħ", + "ĠtÄĽ lo", + "ĠtÄĽl o", + "ï¼Į æľ¬", + "ĠÚĺØ§ÙĨ ÙĪÛĮÙĩ", + "Ġkr aje", + "Ġkra je", + "Ġkraj e", + "μ ία", + "μί α", + "èħ ¿", + "âĢŀ To", + "決 å®ļ", + "ì ĩ", + "Ġ éĴ", + "Ġé Ĵ", + "ĠΣ ÏĦα", + "ĠجÙħ ÙĩÙĪØ±", + "ĠGen ç", + "r ám", + "rá m", + "ĠÐł ез", + "ĠÐłÐµ з", + "Ġvyt vá", + "ĠпÑĢоизвод ÑģÑĤва", + "ĠÙħ ذÙĩ", + "ĠÙħذ Ùĩ", + "Ġihtiy ac", + "ãĤ¯ ãĤ»", + "Ġn êu", + "å¾ ³", + "Ġ ëĵĿ", + "Ġëĵ Ŀ", + "н аÑĩе", + "на Ñĩе", + "наÑĩ е", + "ĠÏĥÏħ μμε", + "ÏĨ Ïīν", + "в авÑģÑı", + "ва вÑģÑı", + "вав ÑģÑı", + "Ġви ÑĤами", + "ĠвиÑĤ ами", + "Ìģ t", + "Ġfinan ÄįnÃŃ", + "åıĬ åħ¶", + "âĢ ħ", + "çĭ ¼", + "ัà¸ļ à¸ķ", + "ãģĽ ãĤĭ", + "ÎĻÎļ ÎŁ", + "λ λι", + "λλ ι", + "ÑĤ оÑİ", + "ÑĤо Ñİ", + "ا عÙĬØ©", + "اع ÙĬØ©", + "اعÙĬ Ø©", + "vÃŃ ce", + "vÃŃc e", + "о нÑĸв", + "он Ñĸв", + "онÑĸ в", + "ì£ Ħ", + "å» ł", + "ĠØ´ÙĬ Ø¡", + "ĠТ ем", + "ĠТе м", + "Ġاب زار", + "ĠTH PT", + "γ γÏģαÏĨ", + "ĠëĮĢ íķ´ìĦľ", + "ĠëĮĢíķ´ ìĦľ", + "ĠPh ạm", + "ÑĨион ной", + "| /", + "Ġ ãĤ¸ãĥ£", + "ĠãĤ¸ ãĥ£", + "ÑĮ ÑİÑĤ", + "ÑĮÑİ ÑĤ", + "Ñĥ зÑĭ", + "Ñĥз Ñĭ", + "ĠÙħ اد", + "ĠÙħا د", + "ĠmÄĽ ly", + "ĠmÄĽl y", + "Ġ çα", + "ĠçĪ ±", + "Ġr ád", + "Ġrá d", + "à¸Ħว à¸ļà¸Ħ", + "à¥Ī ?", + "Ġl idi", + "Ġli di", + "Ġlid i", + "m amız", + "mam ız", + "Ġ à¹ģà¸ģ", + "Ġà¹ģ à¸ģ", + "ãĤ¯ ãĤ·ãĥ§ãĥ³", + "à¸Ńำ à¸Ļวย", + "es át", + "Ġv iêm", + "Ġvi êm", + "è¡Į åĬ¨", + "มาà¸ģ à¸ģว", + "ĠØ®ÙĪ Ø§Ø¨", + "Ġser best", + "ÅĻÃŃ z", + "ĠíĺĦ ëĮĢ", + "ãĢĮ ãģĿãģĨ", + "çĤ ¸", + "om ik", + "omi k", + "Ġİ ran", + "Ġer iÅŁ", + "ĠÑģ ела", + "ĠÑģел а", + "Ġار زÛĮ", + "Ġارز ÛĮ", + "ãĥĪ ãĥª", + "ĠB ÄĽ", + "е кÑĥ", + "ек Ñĥ", + "Ч ÑĤобÑĭ", + "ЧÑĤо бÑĭ", + "Ġanlam da", + "Îij Îĺ", + "ĠLINE AR", + "ĠLIN EAR", + "æľī çĤ¹", + "ÑĤ аÑĢ", + "ÑĤа ÑĢ", + "it ler", + "itle r", + "Ġn ÃŃž", + "ĠnÃŃ Å¾", + "ĠС ÑģÑĭлки", + "å ¶", + "Ġв пол", + "Ġвп ол", + "ĠدÙĤÛĮ ÙĤÙĩ", + "ĠدÙĤÛĮÙĤ Ùĩ", + "Ġ ä½ĵ", + "ر Ùī", + "ëĶ °", + "Ġà¤ķ व", + "Ġж иÑĢ", + "æij Ĩ", + "Ġì¤ij ìĭ¬", + "Ġк Ñĥб", + "ĠкÑĥ б", + "Ġz lep", + "ĠÑĢÑĭ б", + "é³ ´", + "à¹ģà¸ľ à¸Ļ", + "Ġ íĢ", + "Ġí Ģ", + "ĠÐĿ еÑĤ", + "ĠÐĿе ÑĤ", + "ž itÄĽ", + "žit ÄĽ", + "ži tÄĽ", + "Ġb Äĥng", + "ĠH ava", + "ĠHa va", + "ĠHav a", + "Ġ모 ëį¸", + "ĠH ãy", + "ĠìĿ´ ê²ĥ", + "Ġìĥģ ìĦ¸", + "me miÅŁ", + "mem iÅŁ", + "ĠθÎŃ Ïĥη", + "ण न", + "ĠskuteÄį nÄĽ", + "ĠTarih i", + "Ġtext u", + "Ġtex tu", + "ï¼Į éĢĻ", + "ĠاÛĮÙĨتر ÙĨتÛĮ", + "ĠÙ¾ اد", + "Ġپا د", + "ิà¸Ļ à¸ģาร", + "ĠNg á»įc", + "ĠÑĢоб иÑĤи", + "íĸĪ ê³ł", + "Ġम ण", + "ÐĽ Ðĺ", + "Ġпо ÑĤеÑĢ", + "ĠпоÑĤ еÑĢ", + "Ñģ ом", + "Ñģо м", + "ĠاÙĪ ÙĦÛĮÙĩ", + "ĠاÙĪÙĦ ÛĮÙĩ", + "éĽ ij", + "ĠGi á", + "Ġk anal", + "Ġkan al", + "Ġka nal", + "Ġavant aj", + "Ġavan taj", + "Ġr yb", + "Ġry b", + "Ø® تÙĩ", + "خت Ùĩ", + "ĠÙĪ Ø±ÙĪØ¯", + "ĠÙĪØ± ÙĪØ¯", + "ÐĴ ÑĤ", + "Ïī Ïĥε", + "기 ë¡ľ", + "ĠÐĽ Ñĸ", + "Ġt ảng", + "Ġtả ng", + "Ġص ÙĦÙī", + "ĠÑĥ лÑĭ", + "ĠÑĥл Ñĭ", + "Ġcu á»ijn", + "ĠÐIJ нг", + "ĠÐIJн г", + "Ġد اÙĪ", + "ĠÑĪлÑıÑħ ом", + "ĠÄįlovÄĽk a", + "ĠÄįlovÄĽ ka", + "d ete", + "de te", + "det e", + "ÑĬ ем", + "à¹Į à¹ĥà¸Ļ", + "à¤ķ न", + "åĪ ¤æĸŃ", + "åΤ æĸŃ", + "ĸ ìĹIJ", + "ÏĦ ÏīÏĥη", + "ÏĦÏī Ïĥη", + "ĠÙģÙĨ اÙĪØ±ÛĮ", + "ĠyaÅŁ ında", + "ĠÏĥÏĩ ÎŃ", + "Ġ yı", + "Ġy ı", + "Ġp ÅĻen", + "ĠpÅĻ en", + "ĠpÅĻe n", + "ĠÑĦоÑĢм ÑĥваннÑı", + "ĠÑĦоÑĢмÑĥ ваннÑı", + "ü mÃ¼ÅŁ", + "üm Ã¼ÅŁ", + "ümü ÅŁ", + "Ġ δο", + "Ġδ ο", + "ımız ın", + "ımızı n", + "Ġ é¢Ħ", + "Ġé¢ Ħ", + "оÑģÑĤ ÑĮÑİ", + "оÑģÑĤÑĮ Ñİ", + "ĠоÑĤкÑĢÑĭ ÑĤ", + "Ġأغ سطس", + "ĠA sp", + "ĠAs p", + "ĠÑĥ зн", + "ĠÑĥз н", + "ĠÙĪ Ø§Ø³Øª", + "ĠÙĪØ§ ست", + "ĠÙĪØ§Ø³ ت", + "e lerle", + "eler le", + "èķ ī", + "Ġت Ú©ÙĨ", + "Ġتک ÙĨ", + "Ñĥ мÑĥ", + "Ñĥм Ñĥ", + "à¹Į à¸ĭ", + "ाद न", + "ĠâĢĭ âĢĭâĢĭ", + "ĠâĢĭâĢĭ âĢĭ", + "Ġa lıyor", + "Ġal ıyor", + "Ġî ¡", + "Ùħ دة", + "Ùħد Ø©", + "Ġ Ïĥει", + "ĠÏĥ ει", + "ĠÏĥε ι", + "Ġ è¿Ļ", + "Ġè¿ Ļ", + "ĠÅŀ ehir", + "ен ÑĤами", + "енÑĤ ами", + "енÑĤа ми", + "ãĤ¿ ãĥ«", + "ห าย", + "หา ย", + "ай ÑĤ", + "Ġh arc", + "Ġhar c", + "Ġha rc", + "ãĢĤ ãģĬ", + "Ġتأ Ø«ÛĮر", + "า à¸Ĭà¸Ļ", + "าà¸Ĭ à¸Ļ", + "Ġth áºŃm", + "Ġ æ¿", + "Ġæ ¿", + "Ġm Å©i", + "Ġprv nÃŃm", + "ĠprvnÃŃ m", + "Ġбаг аÑĤÑĮ", + "ĠбагаÑĤ ÑĮ", + "ãģķãĤī ãģ«", + "b iên", + "bi ên", + "åºĶ å½ĵ", + "ìĿ´ ë²Ħ", + "Ġpou žÃŃt", + "ĠpoužÃŃ t", + "Ġokam ž", + "e sin", + "es in", + "esi n", + "v ÄĽl", + "vÄĽ l", + "Ġ ضÙĪ", + "Ġض ÙĪ", + "è» Ł", + "- з", + "à¥Ī त", + "è¨Ī ç®Ĺ", + "r abilir", + "ra bilir", + "rab ilir", + "ĠÐłÐ¾Ñģ ÑĸÑĹ", + "Ġpla tÃŃ", + "Ġplat ÃŃ", + "Ġdosp ÄĽl", + "Ġر ضا", + "Ġرض ا", + "Ġn ového", + "Ġnov ého", + "Ġnové ho", + "Ġна ÑĨионалÑĮ", + "ĠÐIJ б", + "ãģĮ ãģĤãģ£ãģŁ", + "Ġ ë¹Ī", + "Ġë¹ Ī", + "âĢĮ Ùħ", + "å±ŀ äºİ", + "Ġt ane", + "Ġta ne", + "Ġtan e", + "ÙĬ اÙĩ", + "ÙĬا Ùĩ", + "Ġ βο", + "Ġβ ο", + "Ġ ëĬ¥", + "ĠëĬ ¥", + "ãĥĩãĤ£ ãĥ¼ãĤ¹", + "Ġ ذÙĥر", + "Ġذ Ùĥر", + "Ġobvyk le", + "Ġbir inci", + "ĠاÙĦ زر", + "ĠاÙĦز ر", + "ìĿ´ ë¹Ħ", + "ĠØ¥ د", + "ĠE kon", + "ĠEk on", + "ÐŁ ол", + "ÐŁÐ¾ л", + "ĠвеÑĢ Ð¾ÑıÑĤ", + "Ġyarar lan", + "Ġа ÑĢом", + "ĠаÑĢ Ð¾Ð¼", + "Ġ éĦ", + "Ġé Ħ", + "Ġ iddi", + "Ġid di", + "i Äįka", + "iÄį ka", + "struk ce", + "mÃ¼ÅŁ tür", + "Ïħ ÏĦÏĮ", + "ë¡ ±", + "Ġal maktadır", + "Ġalmak tadır", + "ени Ñıми", + "ениÑı ми", + "ียà¸Ļ ร", + "à¹ĩ à¸Ļว", + "à¹ĩà¸Ļ ว", + "и кÑĥ", + "ик Ñĥ", + "е нка", + "ен ка", + "âĢĻ yi", + "âĢĻy i", + "Ġpo hod", + "Ġpoh od", + "Ġ زر", + "Ġز ر", + "Ġx ấu", + "Ġ à¸łà¸²à¸©", + "Ġà¸ł าษ", + "Âł Ðŀ", + "Ġ δικ", + "Ġδ ικ", + "Ġδι κ", + "Ġназ ива", + "åıª èĥ½", + "大 éĩı", + "ĠÄij ế", + "Ġ 第äºĮ", + "Ġ第 äºĮ", + "ĠkiÅŁ ilerin", + "ĠkiÅŁi lerin", + "ĠkiÅŁiler in", + "Ġdob ré", + "Ġdobr é", + "é© ¾", + "Ġdůležit é", + "ë¡ ¤", + "μÎŃ Î½Î¿Ïħ", + "μÎŃν οÏħ", + "μÎŃνο Ïħ", + "Ġtr ú", + "Ġbiç im", + "Ġ ÐĿÐIJ", + "ĠÐĿ ÐIJ", + "Ġ å¾Į", + "Ġå¾ Į", + "Ġdu yg", + "Ġduy g", + "åŀ Ĥ", + "ÐĨ ÐĨ", + "Ġet meye", + "Ġetm eye", + "Ġetme ye", + "ĠÙĦب اس", + "Ġд вÑĸ", + "Ġдв Ñĸ", + "Ġ 긴", + "Ġê¸ ´", + "ÑĨ Ñĸйно", + "ÑĨÑĸй но", + "κ ÏĦή", + "ï½ Ŀ", + "ĠÑĦевÑĢа лÑı", + "å¯ «", + "Ġ 겨", + "Ġê² ¨", + "Ġyıl larda", + "Ġyıllar da", + "Ġз Ñĥп", + "Ġobchod nÃŃ", + "Ġاض اÙģÙĩ", + "в еÑĢж", + "веÑĢ Ð¶", + "Ġ æłĩ", + "Ġæł ĩ", + "ج اج", + "جا ج", + "Ġر ÙĪØ³ÛĮ", + "ĠرÙĪ Ø³ÛĮ", + "Ġstand art", + "Ġstan dart", + "é ru", + "ér u", + ") ìĿĦ", + "д екÑģ", + "де кÑģ", + "Ġ âĪļ", + "ĠâĪ ļ", + "Ġİngiliz ce", + "èĬ Ŀ", + "身 ä¸Ĭ", + "ØŁ ØŁ", + "Ġm ẽ", + "Îij ÎĶ", + "енÑģ ив", + "âĢĻ ta", + "âĢĻt a", + "à¹ī าà¸ģ", + "à¹īา à¸ģ", + "ÎŁÎĽ ÎŁÎĵ", + "ä»ĺ ãģij", + "Ġs Ãłng", + "ĠsÃłn g", + "Ġह à¤Ł", + "ÑĭÑĪ Ð»ÐµÐ½", + "ĠØ® طر", + "Ġخط ر", + "Ġнай ÑĤи", + "缸 ä¿¡", + "Ïī δ", + "ठĶ", + "Ġdo pad", + "Ġdop ad", + "à¹Ħà¸Ł ล", + "æ ģµ", + "æģ µ", + "í Ĥ¬", + "íĤ ¬", + "Ä±ÅŁ ma", + "ãģı ãĤĮãģŁ", + "ãģıãĤĮ ãģŁ", + "Ġnap rost", + "ĠÑģоÑģÑĤав е", + "Ġ ÙĪØ³Ø·", + "ĠÙĪ Ø³Ø·", + "ĠÙĪØ³ Ø·", + "๠ķ", + "éĸĭ çĻº", + "ĠдеÑĢ ÐµÐ²Ð°", + "ĠдеÑĢев а", + "- ÐĶ", + "à¸ĩ à¸Ĭ", + "ิà¸ķ ย", + "ĠاÙĦÙĤ اÙĨÙĪÙĨ", + "ãĤ¹ ãĤ«", + "l ÃŃž", + "lÃŃ Å¾", + "Ġан ализ", + "Ġproblém y", + "æĸĩ åѦ", + "çĹħ éĻ¢", + "Ñģ ед", + "Ñģе д", + "ï¼Į å°ı", + "Ġعش ÙĤ", + "ãģ° ãģĭãĤĬ", + "Ġع ÙĤد", + "ĠعÙĤ د", + "ØŃ ÙĬØ©", + "ØŃÙĬ Ø©", + "Ġë°Ķ ëŀįëĭĪëĭ¤", + "inc lu", + "incl u", + "Ġ ëĵľë¦½ëĭĪëĭ¤", + "Ġëĵľ 립ëĭĪëĭ¤", + "åį« çĶŁ", + "Ġвид Ñĥ", + "Ġви дÑĥ", + "ุ à¸ļาล", + "ุà¸ļ าล", + "ÑĢ ÑĥкÑĤ", + "ÑĢÑĥ кÑĤ", + "ÑĢÑĥк ÑĤ", + "ĠоÑģ вÑĸÑĤ", + "ĠоÑģвÑĸ ÑĤ", + "Ġvel ký", + "Ġvelk ý", + "Ġch tÄĽl", + "ĠchtÄĽ l", + "æīĵ å¼Ģ", + "Ġзакон одаÑĤелÑĮ", + "ан Ñģи", + "анÑģ и", + "ì¶ ĺ", + "ĠÙħر اج", + "åģľ æŃ¢", + "Ġво но", + "ìłķ ìĿ´", + "Ġroz sah", + "Ġrozs ah", + "Ġ æĻ´", + "ĠæĻ ´", + "Ġza jist", + "Ġzaj ist", + "Âł м", + "tı ģını", + "tıģ ını", + "Ġhizmet i", + ". Îij", + "ĠÙħعÙħÙĪÙĦ ا", + "Ġ ži", + "Ġž i", + "Ġg á»įn", + "èĮ Ĥ", + "Ġh uz", + "Ġhu z", + "ζ ει", + "ζε ι", + "à¥ī à¤Ł", + "Ġиз дел", + "ìŀ ĸ", + "ĠëͰ 른", + "Ġk ia", + "Ġki a", + "Ġz nÄĽnÃŃ", + "Ġzn ÄĽnÃŃ", + "ĠоÑĢгани за", + "ĠоÑĢганиз а", + "از ات", + "Ġrež im", + "Ġв енÑĤи", + "b ách", + "Ġод номÑĥ", + "Ġодно мÑĥ", + "Ġодном Ñĥ", + "Ġkit ab", + "Ġki tab", + "Ġkita b", + "Ġfran couz", + "Ġfranc ouz", + "ĠØ£ ÙĦ", + "Ġس رÙĪ", + "Ġسر ÙĪ", + "Ùij ÙĦ", + "Ġ ман", + "Ġм ан", + "Ġма н", + "ë° į", + "Ġк Ñĥда", + "ĠкÑĥ да", + "Ùı س", + "ãĢĤ æŃ¤", + "ا شة", + "اش Ø©", + "à¸Ĥà¸Ńà¸ĩ à¸ľ", + "主 ä»»", + "ив ÑĪи", + "Ġà¸ģ รà¸ģ", + "Ġà¸ģร à¸ģ", + "ек Ñģи", + "екÑģ и", + "иÑĤ еÑĤ", + "иÑĤе ÑĤ", + "ĠØ£ ÙĦÙģ", + "ĠØ£ÙĦ Ùģ", + "а ними", + "ан ими", + "ани ми", + "ãĥļ ãĥ¼ãĤ¸", + "ĠпÑĢав ил", + "ĠпÑĢави л", + "åªĴ ä½ĵ", + "Ñİ Ñīее", + "ÑİÑī ее", + "ä¸Ģ 人", + "β ο", + "ìĭ ¸", + "о зна", + "оз на", + "å¤ī æĽ´", + "ĠÙħØ´ Ùĩد", + "æ³ķ 人", + "ĠBa kanı", + "ĠBak anı", + "ĠBakan ı", + "ĠÑħоÑĩ а", + "Ġα ξ", + "Ġver ilm", + "Ġveri lm", + "Ġk onus", + "Ġkon us", + "Ġkonu s", + "με νη", + "μεν η", + "Ġ 馬", + "Ġé ¦¬", + "Ġé¦ ¬", + "Ġìĭ¤ ìłľ", + "Ġjed no", + "Ġjedn o", + "Ġб аб", + "Ġба б", + "åĥ į", + "æĺ¯ ä¸Ģ个", + "æĺ¯ä¸Ģ 个", + "- е", + "ĠpÅĻek vap", + "à¸Ń à¸ŀ", + "ĠY ol", + "ĠYo l", + "ĠÑĥÑģÑĤан авлива", + "ê² ¼", + "Ġ ä»¶", + "اÙĦ Ø´", + "Ġоб ÑĥÑĩ", + "åĺ Ľ", + "ĠÑħоÑĩ Ñĥ", + "ĠÐķ в", + "ÑĦ оÑĢÑĤ", + "ÑĦоÑĢ ÑĤ", + "Ġर न", + "âĢŀ V", + "èľ ľ", + "Ġd oma", + "Ġdo ma", + "Ġdom a", + "æĶ¯ æı´", + "Ġ اخت", + "Ġا خت", + "Ġاخ ت", + "å¾ ª", + "à¥Ĥ à¤ļन", + "à¥Ĥà¤ļ न", + "ा हन", + "ाह न", + "Ġ å¤ı", + "Ġå¤ ı", + "ĠاÙĦØ£ Ùħر", + "ĠاÙĦØ£Ùħ ر", + "ĠбеÑĢем енноÑģÑĤи", + "ĠTh á»±c", + "é£İ éĻ©", + "Ġül kemiz", + "Ġülk emiz", + "çķª åı·", + "ÑģÑĤ ÑĢе", + "ÑģÑĤÑĢ Ðµ", + "ÑĪ Ð»Ð¾", + "ĠصاØŃ ب", + "ι νε", + "ιν ε", + "ĠK ıs", + "ĠKı s", + "ĠPr ahy", + "ĠPra hy", + "æ¹ ¿", + "Ġv ým", + "Ġvý m", + "çĽ Ĵ", + "ÎŁ ÎĶ", + "ÎŁÎ Ķ", + "ãģł ãģª", + "ĠpÅĻÃŃ ležit", + "Ġìĸ¸ ìłľ", + "ĠÑĪвид ко", + "Ġsitu aci", + "åħĥ ç´ł", + "İT ESİ", + "ĠV ak", + "ĠVa k", + "Ġner edeyse", + "i iii", + "ii ii", + "iii i", + "ÑĢа зд", + "ÑĢаз д", + "Ġп олиÑĤ", + "Ġпо лиÑĤ", + "Ġпол иÑĤ", + "Ġполи ÑĤ", + "Ġп огод", + "Ġпо год", + "Ġпог од", + "ĠпÑĢоÑĨеÑģ Ñģе", + "ĠпÑĢоÑĨеÑģÑģ е", + "Ġмен ÑĪе", + "äºĮ 人", + "ĠÙħÙĪ Ø§Ø·", + "Ġp ÅĻik", + "ĠpÅĻ ik", + "ĠpÅĻi k", + "è· ¡", + "Ġs erg", + "Ġse rg", + "Ġser g", + "ĠÑĢаÑģ ÑģÑĤоÑı", + "и Ñĩно", + "иÑĩ но", + "ĠÎĶ ÎĹÎľ", + "¨ Ø·", + "ص بØŃ", + "صب ØŃ", + "สะ à¸Ķวà¸ģ", + "د رÛĮ", + "در ÛĮ", + "k ům", + "ků m", + "ç§ģ ãģ¯", + "Ġt vor", + "Ġtv or", + "à¥įव व", + "Ġp ÅĻiv", + "ĠpÅĻ iv", + "ĠpÅĻi v", + "Ġ íı´", + "Ġíı ´", + "Ġst átu", + "Ġstát u", + "Ġed ilmiÅŁtir", + "Ġedilm iÅŁtir", + "Ġedil miÅŁtir", + "ĠedilmiÅŁ tir", + "ØŃ Ùħ", + "Ġб ÑĥÑħ", + "ĠбÑĥ Ñħ", + "สำ à¹Ģร", + "ĠتÙĪ Ø¶ÛĮ", + "ãģĿãĤĮ ãģ¯", + "Ġà¤ħव ध", + "é ŀĭ", + "éŀ ĭ", + "âĤ¬ Ċ", + "Ġ éº", + "Ġé º", + "ĠÄĮ es", + "Ġpop rvé", + "ï¼Į åĽł", + "Ġal mÄ±ÅŁ", + "Ġalm Ä±ÅŁ", + "l al", + "la l", + "ĠØ® ÙĪØ¨ÛĮ", + "ĠØ®ÙĪ Ø¨ÛĮ", + "ĠØ®ÙĪØ¨ ÛĮ", + "Ġκ οÏģ", + "Ġκο Ïģ", + "ìļ´ ëıĻ", + "m ayın", + "may ın", + "mayı n", + "Ġak tif", + "Ġakt if", + "ĠاÙĨج ÙħÙĨ", + "ĠÑģ ÑĤак", + "ĠÑģÑĤ ак", + "ĠÑģÑĤа к", + "ĠÑģÑĤ аÑĢа", + "ĠÑģÑĤаÑĢ Ð°", + "ĠÑģÑĤа ÑĢа", + "ÙĦ Ù쨩", + "ÙĦÙģ Ø©", + "Ġparç ası", + "ĠкоÑĢп ÑĥÑģ", + "ãĢģ é«ĺ", + "! ..", + "!. .", + "ĠÎł ÎijÎĿ", + "ĠÙĩÙĨ ÙĪØ²", + "ion álnÃŃ", + "Ġprá vnÃŃ", + "Ġpráv nÃŃ", + " Ŀ", + "Ġت ÛĮر", + "ĠتÛĮ ر", + "Ġ åŁİ", + "ĠåŁ İ", + "Ġзг ад", + "Ġsaldır ı", + "æŁ¥çľĭ æijĺè¦ģ", + "é« ª", + "Ùģ ØµÙĦ", + "ãģĻ ãģ¹ãģ¦", + "е во", + "ев о", + "ê´Ģ리 ìŀIJ", + "Ġìĺ Ĩ", + "udic ots", + "ÙĪØ± ÙĨ", + "Ġcel kem", + "ãĤ¤ ãĤº", + "ìĬ¤ ê°Ģ", + "販 売", + "ĠíĮĮìĿ¼ 첨ë¶Ģ", + "ë ¢°", + "Ġe nergie", + "Ġenerg ie", + "Ġener gie", + "es idir", + "esi dir", + "Ġm iá»ĩng", + "éĻ ·", + "Ġг аÑĢа", + "ĠгаÑĢ Ð°", + "Ġb iliyor", + "Ġbil iyor", + "çį² å¾Ĺ", + "еÑĤ еÑĢб", + "à¹Īา à¹Ģà¸Ľ", + "Ġμα ζί", + "Ġzprac ovánÃŃ", + "Ñģ м", + "Ġh ala", + "Ġha la", + "Ġhal a", + "Ġز ÙĪØ¬", + "ĠвÑĸд нов", + "à¹Ģหม าะ", + "ĠÐłÐµÑģп Ñĥбли", + "åĩºåĵģ èĢħ", + "Ñī ини", + "Ñīи ни", + "Ñīин и", + "ัà¸Ļ à¹Ģà¸Ľ", + "Ġtý den", + "Ġtýd en", + "Ġب ÙĬت", + "ĠبÙĬ ت", + "Ñģ комÑĥ", + "Ñģк омÑĥ", + "Ñģком Ñĥ", + "Ñģко мÑĥ", + "ĠÙĩÙĪ Ø§Ù¾ÛĮÙħ", + "оÑģ нов", + "é¸ Ł", + "Ġsou krom", + "Ġfa iz", + "Ġdem ok", + "Ġdemo k", + "Ġkter ém", + "Ġkteré m", + "Ġëħ ¹", + "л аÑĩ", + "ла Ñĩ", + "ĠоÑĤвеÑĤ ÑģÑĤвен", + "Ġ ï¼¼:", + "Ġï¼¼ :", + "Ġ λο", + "Ġλ ο", + "ÄĮ esk", + "ê°Ģ ìļĶ", + "Ġ ãĥĬ", + "Ġãĥ Ĭ", + "Ġnhu áºŃn", + "ĠÑģ или", + "ĠÑģи ли", + "ĠÑģил и", + "ĠÐľ он", + "Ġç ap", + "Ġça p", + "ĠRow Box", + "Ġм аÑģÑĤ", + "ĠмаÑģ ÑĤ", + "Ġма ÑģÑĤ", + "ĠÐľ а", + "ĠдÑĢÑĥг о", + "ĠдÑĢÑĥ го", + "ĠØ£ Ø´", + "ë°© ìĨ¡", + "ĠпÑĸд пиÑģ", + "èĩ ¨", + "åī ©", + "Ġh iá»ĥn", + "Ġhi á»ĥn", + "ĠÙĤر ارد", + "ĠÙĤرار د", + "ist rat", + "istr at", + "istra t", + "ÐŁ Ñĸд", + "ÏĦε Ïģα", + "ÏĦεÏģ α", + "Ġpoz dÄĽ", + "ĠbaÅŁ ta", + "夫 人", + "л ини", + "ли ни", + "лин и", + "Ġка ÑĩеÑģÑĤва", + "ĠкаÑĩе ÑģÑĤва", + "Ġkur tul", + "Ġ ì¢Į", + "Ġì¢ Į", + "ãģ«ãģĬ ãģijãĤĭ", + "åľ° åįĢ", + "ĠÑĩа Ñģом", + "ĠÑĩаÑģ ом", + "ìµľ ê³ł", + "Ġn gang", + "Ġng ang", + "Ġnga ng", + "ا Ùĩد", + "اÙĩ د", + "ĠШ ев", + "ĠpÅĻ itom", + "ĠpÅĻi tom", + "Ġch ấm", + "ĠÐľ еÑģÑĤо", + "ĠÑģовеÑĢÑĪ ÐµÐ½Ð½Ð¾", + "ÃŃ cÃŃ", + "ÃŃc ÃŃ", + "Ń å·ŀ", + "åĪĽ æĸ°", + "äºĶ æľĪ", + "Ġا عÙħاÙĦ", + "Ġاع ÙħاÙĦ", + "Ġвозмож ноÑģÑĤи", + "Ġвозможно ÑģÑĤи", + "ĠпÑĢод овж", + "n ÄĽt", + "nÄĽ t", + "ĠÐĿа пÑĢимеÑĢ", + "ĠاÙĦ دÙħ", + "ĠاÙĦد Ùħ", + "Ġ à¹ģà¸ļà¸ļ", + "Ġà¹ģ à¸ļà¸ļ", + "çĶŁ çļĦ", + "ĠÑħ аÑĢÑĩ", + "ĠSon uç", + "Ġrůzn é", + "Ġrůz né", + "Ġ اذ", + "Ġا ذ", + "ĠØ§Ø °", + "à¸ķ à¸Ńà¸ļ", + "P ÅĻed", + "PÅĻ ed", + "ĠдеÑĢев Ñıн", + "ë´ IJ", + "ĠëĬIJ ëĤ", + "جÙħ ÙĬع", + "ĠBöyle ce", + "èµ ı", + "Ġب سÙĬ", + "Ġبس ÙĬ", + "ĠÃĩ aÄŁ", + "Ġت اÛĮ", + "Ġتا ÛĮ", + "Ġnej vyššÃŃ", + "èĸ ©", + "Ïĩε δÏĮν", + "Ġëĵ± ìĿĺ", + "e yh", + "ey h", + "æĸĻ çIJĨ", + "ا تÙĩ", + "ات Ùĩ", + "æī «", + "Ġ å©", + "Ġå ©", + "ĠпÑĢи вед", + "ĠпÑĢив ед", + "æī ¶", + "Ġ 견", + "Ġê² ¬", + "Ġا ÙħÛĮر", + "ĠاÙħ ÛĮر", + "ाय ल", + "æ¡ ij", + "à¸Ļ à¹Ģà¸ķ", + "ила кÑĤи", + "å®¶ ä¼Ļ", + "Ġbulun uyor", + "y sa", + "ys a", + " Ĩ", + "ĠB İR", + "íĨ ¤", + "à¤Ĥà¤Ĺ à¤łà¤¨", + "ÎĶ ÎµÎ½", + "à¥Į à¤ķर", + "à¥Įà¤ķ र", + "éĸĵ ãģ«", + "Ġм об", + "Ġмо б", + "ĠMo rav", + "ĠMor av", + "è§Ħ åĪĴ", + "ĠÑģвÑĸÑĤ Ñĸ", + "ul ts", + "ult s", + "Ġze mÃŃ", + "Ġzem ÃŃ", + "Âł ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł", + "ÂłĠÂłĠÂł ĠÂłĠÂłĠÂłĠÂłĠÂłĠÂł", + "ĠÐŁ оп", + "ĠÐŁÐ¾ п", + "ãģĤ ãģĴ", + "Ġpom oci", + "Ġpomoc i", + "ĠзмÑĸ ÑģÑĤ", + "Ġзм ÑĸÑģÑĤ", + "主 人", + "ĠS ı", + "ãĥĽ ãĥĨãĥ«", + "ĠÑĥва гÑĥ", + "å» ³", + "à¹Ģม à¸ķร", + "est li", + "Ġlo ạt", + "ãĤ¢ ãĥ¼", + "ĠÎĶ Îµ", + "Ġbun ları", + "Ġbunlar ı", + "Ġ çĤ¹åĩ»", + "ĠçĤ¹ åĩ»", + "Ġ BÃłi", + "ĠB Ãłi", + "ĠBÃł i", + "Ġ ä¸ĸ", + "Ġä¸ ĸ", + "Ġê³ł ê°ľë¥¼", + "ĠÐŃ ÑĤоÑĤ", + "ĠÐŃÑĤо ÑĤ", + "Ġmem nun", + "Ġ ।Ċ", + "Ġ। Ċ", + "ĠиÑģÑĤоÑĢ Ð¸Ð¸", + "Ġ ì°©", + "Ġì° ©", + "१ ९", + "१ॠ¯", + "ĠÐŀд нак", + "ĠÐŀдна к", + "Ġv ede", + "Ġve de", + "Ġved e", + "ÏĨ ÎŃÏģει", + "ÏĨÎŃ Ïģει", + "â b", + "çĬ¶ åĨµ", + "åįı è®®", + "Ġ ê°Ŀ", + "Ġê° Ŀ", + "е вид", + "ев ид", + "еви д", + "j mu", + "jm u", + "Ġколи ÑĩеÑģÑĤва", + "ĠколиÑĩ еÑģÑĤва", + "ĠколиÑĩе ÑģÑĤва", + "à Ľ", + "i Äįe", + "iÄį e", + "Ġfirm alar", + "Ġfir malar", + "Ġfirma lar", + "èĢ Ģ", + "к Ñĸн", + "кÑĸ н", + "ĠêµŃ 민", + "Ġ목 ë¡Ŀ", + "ĠÎļ αÏģ", + "ĠÎļα Ïģ", + "Ġhis sed", + "Ġhiss ed", + "ï¼ «", + "Ġ Tên", + "ĠT ên", + "ĠÑĤÑĭ ÑģÑıÑĩ", + "ØŃÙĬ ØŃ", + "Ġвпол не", + "ĠS ınıf", + "ĠSın ıf", + "Ġμ ην", + "Ġμη ν", + "Ġ íij¸", + "Ġí ij¸", + "ĠاÙĦ طبÙĬ", + "ĠاÙĦØ· بÙĬ", + "ĠاÙĦطب ÙĬ", + "ĠزÛĮ ب", + "Ġп Ñĥ", + "Ġp raž", + "Ġpr až", + "Ġpra ž", + "ìĹĨ ëĬĶ", + "θ ÏģÏī", + "Ġi çi", + "Ġiç i", + "Ġб Ñĸл", + "ĠбÑĸ л", + "Ðł Ñij", + "Ġì¶ķ 구", + "Ġl ạ", + "Ġ ãĥķãĤ¡", + "Ġãĥķ ãĤ¡", + "Ġ èĸ", + "Ġè ĸ", + "μα ÏĦο", + "éĩij å±ŀ", + "á li", + "ál i", + "ĠÙģ Ø£", + "ĠKar lov", + "ĠKarl ov", + "ĠZ áp", + "ĠZá p", + "ãĥª ãĥ³ãĤ°", + "ãĥªãĥ³ ãĤ°", + "ab ilmek", + "abil mek", + "ĠС и", + "Ġc ÃŃrk", + "ĠcÃŃ rk", + "Ġk á»ĭp", + "Ġà¤ij नल", + "ĠÙĪ ØŃدة", + "ĠÙĪØŃ Ø¯Ø©", + "ãĥĭ ãĥĥãĤ¯", + "Ġn Æ°á»Ľng", + "Ġа кÑĤÑĥ", + "Ġак ÑĤÑĥ", + "ĠакÑĤ Ñĥ", + "å¸Ŀ åĽ½", + "Ġn ázev", + "Ġnáz ev", + "ĠÑĢемон ÑĤ", + "ĠÑĢ Ð¸Ð½ÐºÑĥ", + "ĠÏĢ Î¬Î½Ïī", + "ĠÏĢά νÏī", + "ÏĦ ικο", + "ÏĦικ ο", + "ÏĦι κο", + "ĠìĤ¼ ìĦ±", + "ĠÑģимпÑĤом Ñĭ", + "ĠÑĢа нÑĸÑĪе", + "ĠJ á", + "ĠÑģÑĩиÑĤа еÑĤÑģÑı", + "ĠÑģÑĩиÑĤ аеÑĤÑģÑı", + "Ġп оÑĢÑĸв", + "Ġпо ÑĢÑĸв", + "ĠпоÑĢ Ñĸв", + "ĠÐľ ал", + "ĠÐľÐ° л", + "éĿ¢ 积", + "ĠÙĦ غ", + "Ġج Ø´ÙĨ", + "Ġнед ели", + "Ġнедел и", + "Ġì¦Ŀ ê°Ģ", + "ãĨį ëıĻ", + "Ġl ượt", + "ĠÄIJ á»ĭnh", + "Ġ à¸Ńà¸Ńà¸Ļà¹Ħลà¸Ļ", + "Ġà¸Ń à¸Ńà¸Ļà¹Ħลà¸Ļ", + "Ġyap arak", + "Ġyapar ak", + "ĠÄij ai", + "ĠÄija i", + "Ġо ÑĦиÑĨи", + "Ġε μÏĢ", + "ξ ειÏĤ", + "ξει ÏĤ", + "Ġкон ÑĦеÑĢен", + "Ġ arası", + "Ġa rası", + "Ġar ası", + "Ġaras ı", + "Ġara sı", + "à¸ķ า", + "Ġ ë´IJ", + "Ġë´ IJ", + "о вана", + "ов ана", + "ова на", + "ован а", + "ì§Ģ ê°Ģ", + "ĠV ám", + "ि à¤ľà¤¨", + "à¤¿à¤ľ न", + "Ġ ç¼ĸè¾ij", + "Ġç¼ĸ è¾ij", + "ζ ÏĮ", + "ĠÏĦ ÏģÏĮ", + "Ġücret siz", + "ĠکاÙħ ÙĦا", + "ĠکاÙħÙĦ ا", + ": ::/", + ":: :/", + "::: /", + "à¹Į ĊĊ", + "à¹ĮĊ Ċ", + "Ġéĸ¢ éĢ£", + "Ġ kara", + "Ġk ara", + "Ġka ra", + "Ġkar a", + "Ġбез пеки", + "ĠzmÄĽ ny", + "ĠzmÄĽn y", + "Ġê¿ Ī", + "v rd", + "vr d", + "li ÄŁine", + "liÄŁi ne", + "liÄŁ ine", + "liÄŁin e", + "ĠاÙĨتخاب ات", + "ĠдоÑģ вÑĸд", + "Ġkter ého", + "Ġkteré ho", + "ен ÑĤом", + "енÑĤ ом", + "ê³µ ë¶Ģ", + "ìł Ŀ", + "Ġë§Į 족", + "Ġ æij", + "Ġæ ij", + "åĩº åı£", + "建 è®®", + "о ÑĤÑı", + "оÑĤ Ñı", + "Ġ Òij", + "ĠÒ ij", + "íĶĦ ë¡ľ", + "Ġg ió", + "Ġgi ó", + "ãĤ· ãĤ§", + "Ġλ εÏĢ", + "íķĺ 볤", + "Ġyok sa", + "Ġist ih", + "ï¼ ¶", + "ĠاÙĦ عÙħ", + "ĠاÙĦع Ùħ", + "Ġکار گرد", + "à¹Ģà¸ŀ ราะ", + "Ġn ových", + "Ġnov ých", + "Ġnový ch", + "ĠÑģ на", + "Ġs ana", + "Ġsa na", + "Ġsan a", + "व त", + "Ä±ÅŁ man", + "Ä±ÅŁma n", + "åı¦ å¤ĸ", + "ì¶ľìŀ¥ ìĥµ", + "å© ¦", + "ĠкоÑĪ ÑĤÑĸв", + "ĠÙĪØ§ÙĦ ÙĨ", + "Ġب اÙĦØ¥", + "ĠباÙĦ Ø¥", + "Ġ æĬĢ", + "ĠæĬ Ģ", + "Ġмн оже", + "à¥Ĥ ड", + "ĠC ục", + "Ġe vet", + "Ġev et", + "Ġeve t", + "èģĶ åIJĪ", + "Ġ³³Ġ³³ Ġ³³Ġ³³", + "çļĦ å¿ĥ", + "Ġd áng", + "Ġdá ng", + "Ġdán g", + "اÛĮ سÙĩ", + "Ġ erken", + "Ġer ken", + "Ġerk en", + "æ³ ¡", + "ائ ب", + "Ġyap ıldı", + "Ġyapıl dı", + "ĠQu ản", + "æĹ¶ 代", + "ìĽ ¨ìĸ´", + "ìĽ¨ ìĸ´", + "Ġг ÑĸÑĢ", + "ok oj", + "oko j", + "Ùĥ رة", + "Ùĥر Ø©", + "Ñİ Ðº", + "Ġvý j", + "Ġhod iny", + "Ġhodin y", + "Ġелек ÑĤÑĢон", + "m ıyor", + "ĠìŀĪ ëĭ¤ëĬĶ", + "ĠìŀĪëĭ¤ ëĬĶ", + "à¹ī à¹ī", + "иÑĤелÑĮ ное", + "иÑĤелÑĮно е", + "Ġyıl lar", + "Äı te", + "ĠÄįin nost", + "ุà¸ĵ à¸łà¸²à¸ŀ", + "í ĵ¨", + "н г", + "ู รà¸ĵ", + "ูร à¸ĵ", + "ĠпоÑĢÑıд ке", + "Ġëĭ¹ ìĭľ", + "ĠÐľ оÑģков", + "ĠÐľÐ¾Ñģк ов", + "Ġk red", + "Ġkr ed", + "Ġkre d", + "u rum", + "ur um", + "uru m", + "Ġ ÑĤÑı", + "ĠÑĤ Ñı", + "Ú© ÙĨاÙĨ", + "Ú©ÙĨ اÙĨ", + "д ии", + "ди и", + "ÑĢи мÑĸн", + "ÑĢим Ñĸн", + "ĠоÑĢгани зм", + "ĠоÑĢганиз м", + "Ġ éĽĨ", + "ĠéĽ Ĩ", + "ι ÏĥÏĦο", + "ιÏĥ ÏĦο", + "ä¿¡ ç͍", + "åįģ åĽĽ", + "à¹Ī à¹ĥà¸Ĭ", + "ĠÑĥ вид", + "ĠÑĥв ид", + "ัà¸ĩ à¸ģล", + "ัà¸ĩà¸ģ ล", + "åı¦ ä¸Ģ", + "ãĥ« ãĥķ", + "ัà¸ļ à¸Ľà¸£", + "ĠÃľ st", + "説 æĺİ", + "в ай", + "ва й", + "а Ñĩе", + "аÑĩ е", + "æ¬ £", + "Ġkat ıl", + "Ġkatı l", + "ĠC em", + "ĠCe m", + "ĠاÙĦ جÙĩ", + "ĠاÙĦج Ùĩ", + "Ġг ÑĢÑĥз", + "ĠгÑĢÑĥ з", + "ĠгÑĢ Ñĥз", + "Ġза ÑģÑĤав", + "ĠзаÑģÑĤ ав", + "cı lar", + "ĠÑħоÑĤ ел", + "Ġs nÃŃm", + "Ġsn ÃŃm", + "ĠsnÃŃ m", + "ï¼Į 被", + "Ġ виÑī", + "Ġв иÑī", + "Ġви Ñī", + "Ġdem okrat", + "Ġdemok rat", + "à¥ĩ à¤Łà¤°", + "à¥ĩà¤Ł र", + "åij¨ å¹´", + "Ġod pad", + "Ġodp ad", + "Ġda ÅĪ", + "Ġ 代", + "à¹ĩ à¸Ļà¸Ń", + "à¹ĩà¸Ļ à¸Ń", + "ĠÑģк олÑĮко", + "Ġα ÏĨ", + "ĠpÅĻes vÄĽd", + "Ġ åĵģ", + "Ġåĵ ģ", + "ĠинÑĦоÑĢм аÑĨии", + "ĠинÑĦоÑĢма ÑĨии", + "çĽ Ĺ", + "ãģ¾ ãģ¨", + "ĠÑģам ов", + "ĠÑģамо в", + "Ġpo cit", + "Ġpoc it", + "Ġíݸ ì§ij", + "ĠÑģм еÑģÑĮ", + "Ġpo jiÅ¡tÄĽnÃŃ", + "ãģ® ãĤĤ", + "à¹Ī าà¸ģาร", + "à¹Īา à¸ģาร", + "à¹Īาà¸ģ าร", + "ĠÛĮ ÙĪÙĨ", + "Ġ기 ìĸµ", + "ick ými", + "ický mi", + "ickým i", + "a lace", + "al ace", + "ala ce", + "鼻 å½±", + "Ñİ Ð²Ð°Ð½Ð½Ñı", + "缸 åIJĮ", + "Ġ ãĢĥ", + "ĠãĢ ĥ", + "ĠдокÑĥм енÑĤÑĸв", + "ĠдокÑĥменÑĤ Ñĸв", + "ï¼ ¹", + "åΰ åºķ", + "ó z", + "ĠAh met", + "ĠÙħس اØŃت", + "Ġhl avou", + "Ġhlav ou", + "ül ebilir", + "üle bilir", + "ãĢĤ ä½ł", + "à¹ĩà¸ģ à¸Ĭาย", + "¤ ¤", + "Ġ æĦı", + "ĠæĦ ı", + "Ġch áºŃm", + ". д", + "Ġ cca", + "Ġc ca", + "Ġcc a", + "Ġol umsuz", + " ŀ", + "çĬ ¬", + "ĠпоÑģÑĤоÑıн но", + "Ġ.************** Ċ", + "Ġا ستر", + "Ġاست ر", + "Ġاس تر", + "ĠдалÑĮ ней", + "ů r", + "ä¿Ŀ èŃ·", + "боÑĢ Ð°ÑĤоÑĢ", + "боÑĢа ÑĤоÑĢ", + "à ·", + "Ïĥ ÏĦαν", + "ÏĥÏĦ αν", + "ÏĥÏĦα ν", + "ĠÙģ ÙĬÙĦÙħ", + "ĠÙģÙĬ ÙĦÙħ", + "ç ek", + "çe k", + "ìŀIJ 기", + "Ġ æ¥Ń", + "Ġæ¥ Ń", + "н Ñĸп", + "нÑĸ п", + "èī ĩ", + "Ġm oci", + "Ġmo ci", + "Ġmoc i", + "ìľ µ", + "리 ê·¸", + "ĠÐļ о", + "éĤ£ éĩĮ", + "ĠС ÑĤаÑĢ", + "ĠСÑĤ аÑĢ", + "ĠСÑĤа ÑĢ", + "ĠتÙĪØ§ÙĨ ÛĮد", + "Ġng uyá»ĩn", + "Ġnguy á»ĩn", + "Ġ สามารà¸ĸ", + "Ġส ามารà¸ĸ", + "Ñĸ Ñĩна", + "ÑĸÑĩ на", + "Ġ 被", + "Ġè¢ «", + "ุà¸ķสาห à¸ģรรม", + "Ġع صر", + "Ġعص ر", + "ĠÃľNİ VERS", + "Ġteh dy", + "ĠÙĪØµÙĦ ات", + "ĠÙĪØµ ÙĦات", + "ä¿Ŀ è¯ģ", + "ĠE udicots", + "ĠÎł ÎŃ", + "建 è¨Ń", + "ĠìłĦ êµŃ", + "Ġ ØŃÛĮ", + "ĠØŃ ÛĮ", + "ãĤ¤ ãĥĦ", + "ĠØŃ اصÙĦ", + "ĠجÙĨ ÙĪØ¨ÛĮ", + "ĠجÙĨÙĪØ¨ ÛĮ", + "ãĢģ æĹ¥æľ¬", + "à Ļ", + "Ġ à¸Ĺาà¸ĩ", + "Ġà¸Ĺ าà¸ĩ", + "ĠÙĨØŃ ÙĪ", + "اÙĩ ÙĬÙħ", + "å¾Į ãģ«", + "à¸Īะ à¹Ħà¸Ķ", + "åĩł 个", + "à¥ģ à¤ģ", + "à¥ģठģ", + "ëĮĢ ìĿĺ", + "Ġl Ãłn", + "ĠlÃł n", + "ìĽĶ ë¶ĢíĦ°", + "Æ ł", + "Ġ еди", + "Ġе ди", + "Ġs pis", + "Ġsp is", + "Ġspi s", + "æľī ä»Ģä¹Ī", + "Ġneb yla", + "Ġneby la", + "Ġnebyl a", + "Ġíķ´ ìϏ", + "ë¡ľ ë¶ĢíĦ°", + "аÑĢ Ñħ", + "l ili", + "li li", + "lil i", + "Ġíķĺ 루", + "ma ması", + "mam ası", + "Ñĩ аеÑĤ", + "Ñĩа еÑĤ", + "ĠØŃ اÙĦØ©", + "ĠØŃاÙĦ Ø©", + "ĠBöl üm", + "缸 éĹľ", + "ĠдÑĢÑĥг ими", + "ĠдÑĢÑĥгим и", + "çĽ£ çĿ£", + "à¥Ī à¤ľ", + "Ġعبد اÙĦÙĦÙĩ", + "ĠعبداÙĦ ÙĦÙĩ", + "Ġ è¿ŀ", + "Ġè¿ ŀ", + "ĠÐľ ин", + "ĠÐľÐ¸ н", + "Ġê¸ °ëĭ¤", + "Ġ기 ëĭ¤", + "Ġê³µ 격", + "è¡Į åĭķ", + "ा मà¤ķ", + "ाम à¤ķ", + "æ±Ĥ è´Ń", + "模 åŀĭ", + "Ñģ оÑĢ", + "Ñģо ÑĢ", + "r ane", + "ra ne", + "ran e", + "à¹ĩà¸Ī à¸ŀระ", + "ĠÙħس ÛĮر", + "è£ħ ç½®", + "ìķ ¤", + "nÄĽ jÅ¡ÃŃch", + "nÄĽjÅ¡ÃŃ ch", + "αλ ÏįÏĦε", + "ĠH akk", + "ĠHa kk", + "ĠHak k", + "访 éĹ®", + "ĠÑĤ еÑĩ", + "ĠÑĤе Ñĩ", + "ĠL á»ĭch", + "Ġدش ÙħÙĨ", + "Î Į", + "Ġ ÏĢε", + "ĠÏĢ Îµ", + "Ġза мов", + "Ġзам ов", + "Ġb irim", + "Ġbi rim", + "Ġbir im", + "Ġbiri m", + "ãĤ· ãĤ¹ãĥĨãĥł", + "ĠÏĢÏģο ÏĬ", + "Ĭ ìĿĢ", + "в иг", + "ви г", + "Ġëıħ ìĿ¼", + "ĠÑĢев олÑİ", + "Ġ é¦Ļ港", + "Ġé¦Ļ 港", + "Ġ lez", + "Ġl ez", + "Ġle z", + "ĠبÛĮ Ùħار", + "ĠبÛĮÙħ ار", + "Ġduy gu", + "Ġduyg u", + "Ġë Ľ°", + "Ġa macı", + "Ġam acı", + "Ġama cı", + "Ġamac ı", + "à¥įय प", + "ĠìŀIJ ìĦ¸", + "اÙĪ ÛĮر", + "اÙĪÛĮ ر", + "Ġs pole", + "Ġsp ole", + "Ġspo le", + "Ġspol e", + "Ãĸ L", + "Ġ جع", + "Ġج ع", + "ÙĦ ÛĮÙħ", + "ÙĦÛĮ Ùħ", + "ãģªãģ© ãģ®", + "à¸Ľà¸£à¸°à¸ª à¸ļ", + "ĠnaÅ¡ ich", + "ĠпÑĢедÑģÑĤав лÑıеÑĤ", + "Ġзд об", + "Ġo bou", + "Ġob ou", + "Ø® ÙĪØ§ÙĨ", + "Ø®ÙĪ Ø§ÙĨ", + "ãĥ¬ ãĥĥãĥĪ", + "о дейÑģÑĤв", + "од ейÑģÑĤв", + "Ú© رÛĮ", + "کر ÛĮ", + "Ġات اÙĤ", + "ĠÑįкÑģп лÑĥаÑĤа", + "ï½ ¢", + "ĠÙĦÙĦ Ø¥", + "ĠاÙĦÙĨ ظاÙħ", + "ĠíĶĦ ëŀijìĬ¤", + "ıs ıt", + "ısı t", + "åŃ Ļ", + "Ġžád ný", + "ÙĤ Ùī", + "ัà¸ģ à¹Ģร", + "Ġë²ł ìĬ¤íĬ¸", + "Ġ ãĥ«", + "Ġãĥ «", + "åı Ķ", + "n ické", + "nic ké", + "nick é", + "Ġε ιÏĥ", + "Ġει Ïĥ", + "ãĥ« ãĥī", + "Ġدار Ùħ", + "Ġг ем", + "Ġге м", + "Ġ åѸ", + "ĠåŃ ¸", + "ान सà¤Ń", + "ानस à¤Ń", + "али зи", + "ализ и", + "ов анÑĸ", + "ова нÑĸ", + "ован Ñĸ", + "Ġо бо", + "Ġоб о", + "ìłĦ ìĹIJ", + "ĠS inh", + "ĠSi nh", + "ĠSin h", + "Ġ ÙĨع", + "ĠÙĨ ع", + "Ġоб лаÑģ", + "Ġобла Ñģ", + "Ġобл аÑģ", + "Ïħ ÏĢ", + "èĥ ¶", + "Ġaz alt", + "Ġazal t", + "åħ¨ éĿ¢", + "ĠK romÄĽ", + "ĠKro mÄĽ", + "ĠC z", + "æĬ¥ åIJį", + "Ġnásled ujÃŃcÃŃ", + "Ġна пÑĢиклад", + "ĠнапÑĢи клад", + "ãģª ãģijãĤĮãģ°", + "à¸Ń าย", + "çľĭ çľĭ", + "Ġà¸ģร à¸ģà¸İ", + "Ġà¸ģรà¸ģ à¸İ", + "ed nou", + "edn ou", + "ا زÙĦ", + "از ÙĦ", + "ãĢģ æľ¬", + "е Ñģи", + "еÑģ и", + "Ġta rz", + "Ġtar z", + "ãĢĢ ï¾Ĭ", + "Ġroz um", + "ãĤ« ãĥ¼ãĥī", + "ãĤ«ãĥ¼ ãĥī", + "Ġà¤ĩ à¤ķ", + "Ġpros tÄĽ", + "Ġprost ÄĽ", + "ĠÎĵ κ", + "ç© ´", + "ĠH ük", + "la vÃŃ", + "lav ÃŃ", + "ê ¿", + "é¸ ¡", + "Ġвозник аеÑĤ", + "Ġвозника еÑĤ", + "ÑŁ ÑŁÑŁ", + "ÑŁÑŁ ÑŁ", + "Ġпо нима", + "Ġпон има", + "ÐŁ Ðŀ", + "ãģĶãģĸ ãģĦãģ¾ãģĻ", + "ãģ ħ", + "Ġtr val", + "Ġдал еко", + "ĠÙĨ ÙĬز", + "ĠÙĨÙĬ ز", + "ĠвÑĭ Ñıв", + "ิà¸Ĺย า", + "ิà¸Ĺ ยา", + "Ġl á»Ĺ", + "Ġlá» Ĺ", + "à¹Ģ สà¸Ļ", + "à¹Ģส à¸Ļ", + "ĠÑģÑĤ енÑĭ", + "ĠÑģÑĤен Ñĭ", + "à¥įड ल", + "Ġjednotliv ých", + "ĠпÑĢиб лиз", + "i kat", + "ik at", + "ika t", + "Ġп одав", + "Ġпо дав", + "Ġпод ав", + "Ġпода в", + "ر ÛĮز", + "رÛĮ ز", + "ĠØ¢ÙĨ جا", + "社 æľĥ", + "Ġà¤ľà¤¨ वर", + "Ġa ile", + "Ġai le", + "Ġail e", + "ี à¸Ľ", + "Ġ èħ", + "Ġè ħ", + "ãģ§ ãģĹãĤĩãģĨ", + "С Ðŀ", + "ãĢģ ãĢĬ", + "ìĿ¼ 본", + "ov anou", + "ova nou", + "ovan ou", + "ν ÏĮ", + "å± ¥", + "ع ÙĦÙĤ", + "عÙĦ ÙĤ", + "Ġìī ½", + "Ġгли б", + "Ġê²ĥ ìŀħëĭĪëĭ¤", + "ĠнеобÑħодим оÑģÑĤи", + "ĠнеобÑħодимо ÑģÑĤи", + "Ġتخصص ÛĮ", + "ا سر", + "اس ر", + "ï¼Į 说", + "ĠÐĿ Ñĸ", + "Ġvy rob", + "ÑĪ ÑĥÑİ", + "ÑĪÑĥ Ñİ", + "æĪ¿ å±ĭ", + "Âł ÐĹ", + "à¹Ģ à¸ŀล", + "à¹Ģà¸ŀ ล", + "åĨħ éĥ¨", + "ĠدÙĦ ار", + "Ġп ÑĤи", + "Å¡ ti", + "Å¡t i", + "ĠaraÅŁtır ma", + "Ġзна ком", + "Ġε λλην", + "Ġ ấm", + "ÑĢ Ð°Ðº", + "ÑĢаРº", + "ÑĢа к", + "ãĤŃ ãĥ¥", + "Ġth áºŃn", + "èŃ ľ", + "ëªħ ìĿĺ", + "Ġy eter", + "Ġyet er", + "Ġye ter", + "Ġна Ñģлед", + "ĠнаÑģ лед", + "ĠÐļ ан", + "ĠÐļа н", + "ĠвÑĭ биÑĢа", + "ĠвÑĭб иÑĢа", + "ĠΣ Ïĩ", + "ĠÑĤеÑĢ Ð¼Ñĸн", + "Ġ æ´»", + "Ġæ´ »", + "ĠاÙĦ تÙģ", + "ĠاÙĦت Ùģ", + "ĠJ apon", + "ĠJa pon", + "ĠJap on", + "éĤ ª", + "ë¶Ħ ìĦĿ", + "Ġли ÑĨо", + "ĠлиÑĨ о", + "Ġm ê", + "à¸Ħ วร", + "à¸Ħว ร", + "Ġà¤ħ à¤Ĺल", + "Ġà¤ħà¤Ĺ ल", + "ĠÙĩ ج", + "룬 ìļ´", + "Ġвой нÑĭ", + "اÙĪØ± زÛĮ", + "ĠÑģп ÑĢÑı", + "çĦ ¼", + "è¢ ĸ", + "Ġiç eren", + "Ġiçer en", + "Ġëħ¸ ëŀĺ", + "ĠЧеÑĢ ÐµÐ·", + "ÙĪØ¬ ÙĪØ¯", + "Ñı ÑĤие", + "ÑıÑĤ ие", + "ÑıÑĤи е", + "à¸Ńลล าร", + "è ·¨", + "è· ¨", + "ĠM illi", + "ĠMill i", + "ĠMil li", + "ĠMi lli", + "ä»¶ äºĭ", + "Ġ æľĿ", + "βολ ή", + "βο λή", + "Ġ ков", + "Ġк ов", + "Ġко в", + "ĠØ´Ùĩ ÛĮد", + "ä¸ĭ åİ»", + "Ġìłķ ìĭł", + "оÑĩ кÑĥ", + "ï¼Į 便", + "γ κε", + "γκ ε", + "ĠÙħ باش", + "ĠÙħب اش", + "Ġay ında", + "Ġ ä»»", + "ÑģÑĤоÑĢ ÑĸÑı", + "ä¸Ń åѦ", + "ç¸ ®", + "ĠÑĦ Ñĸл", + "ãĢģ ãĤĦ", + "Ġ æĺ¥", + "Ġæĺ ¥", + "Ġter ör", + "Ġповин ен", + "Ġmilion ů", + "ĠÙģ Ø§Ø±Ø³", + "ĠÙģØ§Ø± س", + "Ġв вод", + "Ġвв од", + "Ø· اÙĦ", + "Ġê¶ģ ê¸Ī", + "Ġuk áz", + "çĶ ľ", + "æļ Ĥ", + "ص ت", + "Ðļ огда", + "Ġम ल", + "ά να", + "άν α", + "Ġдок ÑĤоÑĢ", + "Ġком мÑĥ", + "ĠпÑĸд Ñģ", + "Ġà¸ģรà¸ģà¸İ าà¸Ħม", + "Âł г", + "Ġö ne", + "Ġön e", + "ĠÄIJ á»ģ", + "ĠÄIJá» ģ", + "äºĭ åĭĻ", + "Ġs rov", + "Ġsr ov", + "Ġ άν", + "Ġά ν", + "ëıĦ ê°Ģ", + "acaÄŁ ım", + "acaģı m", + "к ол", + "ко л", + "Ġb á»ĵi", + "Ġپرد از", + "Ġ ä¸ļ", + "Ġä¸ ļ", + "ëĭ¤ ìļ´", + "Ġп ÑĢедел", + "ĠпÑĢед ел", + "ĠпÑĢе дел", + "ĠÑĦедеÑĢа лÑĮ", + "ĠاÙĦ Ø£Ùĥ", + "ĠاÙĦØ£ Ùĥ", + "ãĢĢ ãĢĢãĢĢãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢãĢĢĠãĢĢ ĠãĢĢ", + "Ġtr ấn", + "Ġд лин", + "Ġдли н", + "ĠÑĸ мп", + "ĠÑĸм п", + "ĠsmÄĽ rem", + "° ëĭ¤", + "Ġr ừng", + "ici álnÃŃ", + "è¡ Ĩ", + "μ ιο", + "μι ο", + "Ġاد ارÙĩ", + "ĠÑĤ ÑĢÑĮ", + "ĠÑĤÑĢ ÑĮ", + "Ġİ li", + "Ġİl i", + "มà¸Ļ à¸ķร", + "à¥įव à¤ļ", + "е ÑĢо", + "еÑĢ Ð¾", + "ĠK UR", + "sk ými", + "ský mi", + "ským i", + "δ ί", + "u tin", + "ut in", + "uti n", + "Ġver iler", + "Ġveri ler", + "สà¸ĸาà¸Ļ à¸Ĺ", + "ĠзаÑħод Ñĸв", + "ĠÙ쨱ÙĪØ¯ گاÙĩ", + "Ġ çͱ", + "ู à¹ģล", + "éĥ ij", + "ĠJ ako", + "ĠJa ko", + "ĠJak o", + "ĠÑĢазвиÑĤи е", + "ĠÑĢазви ÑĤие", + "à¤ī न", + "ÙĬ دا", + "ÙĬد ا", + "Ġà¸ŀ à¸¤à¸©à¸łà¸²à¸Ħม", + "물 ìĿĦ", + "ë łĢ", + "ëł Ģ", + "- ÐĽ", + "ãĢĤ ãģĤ", + "Ġпод в", + "ï¼ī ï¼ļ", + "论 åĿĽ", + "ائ ع", + "ãĤĴ ãģĻãĤĭ", + "ĠØ£ ص", + "Ñĩ ики", + "Ñĩи ки", + "Ñĩик и", + "ĠÑģÑĤ ил", + "ley ici", + "Ñģ илÑĮ", + "Ñģи лÑĮ", + "Ġbulun du", + "ĠÑģеÑĢед ови", + "à¤Ĥ र", + "ĠاÛĮÙĨ جا", + "åľŃ åľŃ", + "ĠmyÅ¡ len", + "ĠÑĢозвиÑĤ ок", + "Ġiy ileÅŁ", + "Ġiyi leÅŁ", + "Ġв Ñĸз", + "ĠвÑĸ з", + "ëĤĺ 무", + "æĦı è§ģ", + "ι ÏĥÏĦη", + "ιÏĥ ÏĦη", + "ãĥĥ ãĥĦ", + "äºĭ æķħ", + "m adıģı", + "ma dıģı", + "mad ıģı", + "madı ģı", + "Ġà¤ħ पर", + "Ġà¤ħप र", + "ĠÚĨ رخ", + "Ġп лав", + "Ġпл ав", + "Ġпла в", + "以 æĿ¥", + "Ġë© Ģ", + "T uy", + "Tu y", + "ãĥ¼ ãĥį", + "ãĥ¼ãĥ į", + "Ġиз ÑĥÑĩ", + "ĠstÅĻed nÃŃ", + "课 ç¨ĭ", + "Ġê·¸ëħĢ ëĬĶ", + "ĠдоговоÑĢ Ñĥ", + "Ġдогов оÑĢÑĥ", + "ĠÄij á»ĭch", + "ĠÄijá»ĭ ch", + "Ġkar arı", + "Ġkarar ı", + "Ġkara rı", + "åIJ ´", + "Ùĥ اÙħ", + "ĠпоÑĤ ол", + "в ок", + "во к", + "ĠD üz", + "Τ α", + "å µ", + "âĢĻ na", + "âĢĻn a", + "а дж", + "ад ж", + "ĠdÅĻÃŃ ve", + "æ¢ ¨", + "ĠAv ust", + "åĬĽ ãĤĴ", + "à¹Ģ à¸ģล", + "à¹Ģà¸ģ ล", + "Ġпоб ед", + "Ġп ÑĢиÑĩ", + "ĠпÑĢ Ð¸Ñĩ", + "ĠпÑĢи Ñĩ", + "ĠÐij Ñĸ", + "åŃ ¤", + "ĠÐł ег", + "ĠÐłÐµ г", + "Ġyet iÅŁ", + "Ġн еÑİ", + "Ġне Ñİ", + "Ġb ÃŃl", + "ĠbÃŃ l", + "ìĹĨ ìĿĮ", + "Ġİ talya", + "ÐĴ Ñģе", + "å¾Į ãģ®", + "Ġje jÃŃm", + "Ġjej ÃŃm", + "ĠjejÃŃ m", + "ĠвиглÑı дÑĸ", + "о гÑĢад", + "ог ÑĢад", + "огÑĢа д", + "Ġbo hat", + "Ġboh at", + "Ġ åħĭ", + "Ġåħ ĭ", + "ĠдиÑĤи ни", + "ĠдиÑĤ ини", + "лÑı ÑĤоÑĢ", + "ма га", + "маг а", + "ëĭĪ ìĬ¤", + "ĠÐł ади", + "ĠÐłÐ°Ð´ и", + "ĠÐłÐ° ди", + "ÏĢ Î¿ÏħÏģγ", + "ÏĢοÏħ Ïģγ", + "& ZeroWidthSpace", + "Ġ struk", + "Ġst ruk", + "Ġstr uk", + "Ġstru k", + "æIJ ŀ", + "Ġ ãģĿãģ®ä»ĸ", + "ìĿ¸ ìĿĦ", + "ĠпÑĢо веÑģÑĤи", + "ĠпÑĢов еÑģÑĤи", + "漫 çĶ»", + "Ġçİ© å®¶", + "ĠÙĪ Ø±Ø²", + "ĠÙĪØ± ز", + "ĠÑģвоÑĹ Ð¼", + "ĠL RV", + "ĠLR V", + "ิà¸ķ à¸ł", + "स त", + "ĠíĿ Ķ", + "âĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹı âĹıâĹıâĹıâĹıâĹıâĹıâĹıâĹı", + "Ġt voÅĻÃŃ", + "ĠtvoÅĻ ÃŃ", + "Ġ ÐŁÐŀ", + "ĠÐŁ Ðŀ", + "é«ĺ 度", + ".h wp", + ".hw p", + "à¸ķำ à¸ļล", + "Ġد س", + "ìĪĺ ê°Ģ", + "ìĶ ©", + "ï¼ī ãĢĤĊ", + "ï¼īãĢĤ Ċ", + "æĭ ³", + "Ġl ô", + "ĠK ültür", + "اط عة", + "Ġku chy", + "Ġst roj", + "Ġstr oj", + "Ġstro j", + "μ ενο", + "με νο", + "μεν ο", + "ĠконÑģÑĤÑĢÑĥк ÑĨии", + "å°ı åѦ", + "Ġ åįļ", + "Ġåį ļ", + "Ġ èĢĥ", + "ĠèĢ ĥ", + "Ġas ıl", + "æĪij åĢij", + "خر اج", + "ĠO nun", + "ĠOn un", + "Ġ ç¾İåĽ½", + "Ġç¾İ åĽ½", + "à¥Ĥ बर", + "à¥Ĥब र", + "Ġmu ži", + "Ġmuž i", + "å§ «", + "Ġв б", + "Ġдо ме", + "Ġдом е", + "Ġ ам", + "Ġа м", + "Ġk uru", + "Ġkur u", + "Ġku ru", + "æ± Ĺ", + "l ediÄŁi", + "le diÄŁi", + "ledi ÄŁi", + "Ġv ẽ", + "å¾ ĵ", + "ĠгÑĥб еÑĢ", + "ĠÑģÑĤанов иÑĤÑĮ", + "ĠzemÄĽ dÄĽl", + "ÙĦ ÙĦ", + "Ġr amen", + "Ġra men", + "Ġram en", + "Ġprů bÄĽhu", + "Ġb lok", + "Ġbl ok", + "Ġblo k", + "ý val", + "ýv al", + "v ou", + "vo u", + "ν ά", + "ëĶĶ ìĭľ", + "ÑĨион нÑĭе", + "Ġê²Įìĭľ íĮIJ", + "ãĥ³ ãĥĩãĤ£", + "ãĥ³ãĥĩ ãĤ£", + "ä¸Ģ 级", + "и Ñĩа", + "иÑĩ а", + "ĠسرÛĮ اÙĦ", + "i lin", + "il in", + "ili n", + "ा यन", + "ाय न", + "ÙĨ ÙĪÛĮس", + "ĠÐĶ Ð¸", + "Ġاد بÛĮ", + "ĠÑĥ дов", + "ĠÑĥд ов", + "ĠÐĹ Ð°Ð¼", + "ĠÐĹа м", + "à¥ģà¤Ń व", + "Ñģ ок", + "Ñģо к", + "ĠÑĢай оне", + "ĠÑĢайон е", + "Ġ EK", + "ĠE K", + "æĤ ī", + "Ġsor umlu", + "Ġsoruml u", + "Ġzv yÅ¡", + "à¹Ģà¸ĭ à¸Ńร", + "in áÅĻ", + "iná ÅĻ", + "Ġu drž", + "Ġud rž", + "но вид", + "нов ид", + "ĠspoleÄį nÄĽ", + "Ġspole ÄįnÄĽ", + "æĪIJ äºĨ", + "ï¼ ¤", + "ัà¸ŀ à¸Ĺ", + "а ÑĪа", + "аÑĪ Ð°", + "ĠÙĨ ادÙĬ", + "à¹ĥ à¸Ļà¸Ĺ", + "à¹ĥà¸Ļ à¸Ĺ", + "å¡ ļ", + "Ġس Ú©", + "ãĥģ ãĥ¥", + "ĠмаÑĢ ÑĪ", + "а леннÑı", + "ал еннÑı", + "ĠØŃÙħ اÛĮت", + "ãĥ³ ãĤ¸", + "รษ à¸IJ", + "Ġк ÑĢем", + "ĠK ažd", + "ê ½", + "Ġpar lament", + "Ġparl ament", + "ĠÅŁ un", + "ĠÅŁu n", + "Ġk ys", + "Ġky s", + "ÏĦ ÏĤ", + "ê°ľ ìĿĺ", + "Ġve lice", + "Ġvel ice", + "Ġce stu", + "Ġces tu", + "Ġcest u", + "ظ Ø©", + "è¯ Ĭ", + "Ġ út", + "Ġú t", + "ĠØ® ÙĪØ±", + "ĠØ®ÙĪ Ø±", + "ĠТ е", + "Ġобла ÑģÑĤ", + "ĠоблаÑģ ÑĤ", + "Ġобл аÑģÑĤ", + "à¹Ī à¸Ńà¸ķ", + "à¹Īà¸Ń à¸ķ", + "ĠAc adem", + "ĠAcad em", + "ãĢĤ æľ¬", + "Ġ 風", + "Ġé¢ ¨", + "Ñģ ен", + "Ñģе н", + "ãĥ¢ ãĥĩãĥ«", + "Ġзавд аннÑı", + "ãģ¾ ãĤĮ", + "моÑĤ ÑĢеÑĤÑĮ", + "моÑĤÑĢ ÐµÑĤÑĮ", + "Ġkh á»ķ", + "à¹Ī ร", + "د رس", + "در س", + "ĠÄĮesk osloven", + "Ġ 计", + "Ġè® ¡", + "ĠÑĤак ом", + "ĠÑĤа ком", + "ĠÙĦ اعب", + "ĠÙĦا عب", + "ĠMuham med", + "ĠÙħ ÙĦÙģ", + "ĠÙħÙĦ Ùģ", + "ĠÙĪØ³ ÙĦÙħ", + "ãĤ·ãĥ£ ãĥ«", + "Ġо кÑĢа", + "Ġок ÑĢа", + "à¥ģ मत", + "à¥ģम त", + "ĠëĪĦ 구", + "Ġned eni", + "Ġneden i", + "ĠëĤł ì§ľ", + "/ km", + "/k m", + "Ġд емон", + "Ġде мон", + "Ġдем он", + "ĠصÙĨ اÛĮع", + "m asından", + "mas ından", + "masında n", + "åīį ãģ®", + "æĪIJ 绩", + "ल à¤Ĺ", + "Ġ åĮħ", + "ĠåĮ ħ", + "à¸Ńà¸ģà¸Īาà¸ģ à¸Ļ", + "ا دا", + "اد ا", + "Ġay lık", + "ĠÙħ ÙĤد", + "ĠÙħÙĤ د", + "Ġönemli dir", + "ĠìĪľ ê°Ħ", + "Ġd inh", + "Ġdi nh", + "Ġdin h", + "Ġná kup", + "ist ické", + "istic ké", + "åº Ł", + "ìĬ¤ íĨł", + "Ġd ny", + "Ġdn y", + "ĠìŀĪ ëıĦë¡Ŀ", + "ìĽIJ ìĿĺ", + "ãĥķ ãĥ¬", + "p oz", + "po z", + "Ġ ев", + "Ġе в", + "ĠdÃ¼ÅŁ ür", + "à¥įर à¤ļ", + "Ġê²° íĺ¼", + "Ġ ÑĨенÑĤÑĢа", + "ĠÑĨенÑĤ ÑĢа", + "ĠÑĨен ÑĤÑĢа", + "ĠÑĨенÑĤÑĢ Ð°", + "åŁ ĭ", + "ï¿£ ï½Ģ", + "æŃ¦ åύ", + "à¹Īาà¸Ļ มา", + "Ġर व", + "Ùij د", + "μÎŃ Î½Î¿Î¹", + "μÎŃν οι", + "μÎŃνο ι", + "Ġë§IJ ìĶĢ", + "Ġpo ÅĻad", + "Ġب غ", + "ĠÏĮ λα", + "ĠÏĮλ α", + "à¹ī à¹Ħà¸Ĥ", + "à¹Ģà¸ģ าะ", + "Ġb ạc", + "Ġd á", + "d ÄĽla", + "dÄĽ la", + "dÄĽl a", + "Ġt eb", + "Ġte b", + "Ġk èo", + "ãĤı ãĤĮ", + "Ġist iyorum", + "Ġistiyor um", + "λ ήÏĤ", + "λή ÏĤ", + "ÐIJ в", + "Ġa sla", + "Ġas la", + "Ġperform ans", + "Ġperfor mans", + "Ġperforman s", + "ĠVác lav", + "Ïģ ίαÏĤ", + "Ïģί αÏĤ", + "Ïģία ÏĤ", + "Ġ tÄĽl", + "Ġt ÄĽl", + "ĠtÄĽ l", + "æĮ Ļ", + "о ба", + "об а", + "ãģij ãĤĮãģ©", + "ĠëĶ ¸", + "ÙĪ Ø§Ø¡", + "ÙĪØ§ Ø¡", + "ĠÚ©ÙĪØ¯ کاÙĨ", + "ĠÚ©ÙĪØ¯Ú© اÙĨ", + "Ġп лиÑĤ", + "Ġпл иÑĤ", + "Ġ bilir", + "Ġb ilir", + "Ġbil ir", + "Ñĥ же", + "Ñĥж е", + "ÏĦÎŃ Î»Îµ", + "Ġà¤Ĩ à¤ķर", + "Ġà¤Ĩà¤ķ र", + "ĠÑĤÑĢ Ñĥда", + "ĠÑĤÑĢÑĥ да", + "ĠÑĤÑĢÑĥд а", + "Ġدر ÛĮا", + "ĠدرÛĮ ا", + "Ì §", + "Ġng á»įt", + "ÙĨس ا", + "а ÑģÑĤи", + "аÑģ ÑĤи", + "аÑģÑĤ и", + "ï½ £", + "Âł на", + "ем Ñĭе", + "Ġس عÙĪØ¯", + "Ġسع ÙĪØ¯", + "Ġ alım", + "Ġal ım", + "è´ «", + "åΰ çļĦ", + "Ġkesin likle", + "Ġzá sad", + "Ġ ìĬ¤íĬ¸", + "ĠìĬ¤ íĬ¸", + "Ġd ahi", + "Ġda hi", + "Ġdah i", + "t é", + "åįģ åħ«", + "Ġz ayıf", + "ذ ار", + "ذا ر", + "Ġا ÙĬراÙĨ", + "ĠاÙĬ راÙĨ", + "Ġhod nocenÃŃ", + "D ST", + "DS T", + "Ġìĸ ĺ", + "æĺ ĩ", + "éĻ £", + "Ġк ле", + "Ġкл е", + "Ġu plat", + "Ġup lat", + "ĠاÙĦتع ÙĦÙĬÙħ", + "ÏĢοί ηÏĥη", + "ек ÑĤоÑĢа", + "екÑĤ оÑĢа", + "екÑĤоÑĢ Ð°", + "Ġë§IJ ìĿ´", + "ĠÙģ Ø±ÙĬÙĤ", + "ĠÙ쨱 ÙĬÙĤ", + "帮 åĬ©", + "çĶŁ ãģį", + "åĨħ ãģ®", + "èģĶ çĽŁ", + "г ÑĢад", + "гÑĢа д", + "Ġch uyến", + "ãĤĤ ãĤĬ", + "ĠÑĩаÑģÑĤ ина", + "ĠÑĩаÑģÑĤи на", + "ãģª ãģıãģª", + "ãģªãģı ãģª", + "ÑĶ Ð²", + "ĠÑĦ аÑħ", + "k uk", + "ku k", + "çĶ· æĢ§", + "ĠÙħÛĮÙĦ ادÛĮ", + "Ġb eden", + "Ġbe den", + "Ġbed en", + "ê°Ģ 를", + "म र", + "Ġìĸ´ 머ëĭĪ", + "èģĶ ç½ij", + "Âł mi", + "Âłm i", + "Ġzah rn", + "æ² ĸ", + "Ġkhu ẩn", + "Ġo práv", + "Ġop ráv", + "Ġopr áv", + "ाह à¤ķ", + "ĠÚ©ÙĪØª اÙĩ", + "Ġо бол", + "Ġоб ол", + "Ġобо л", + "Ġph úc", + "r ánÃŃ", + "rá nÃŃ", + "rán ÃŃ", + "à¥įर थ", + "æİª æĸ½", + "Ġв олод", + "Ġво лод", + "Ġвол од", + "Ġsp ÃŃÅ¡e", + "Ġm Æ¡", + "ÑĬ ек", + "ng ör", + "à¤ī त", + "k siyon", + "ks iyon", + "ksi yon", + "а ÑĤе", + "аÑĤ е", + "Ġجز Ø¡", + "áv ka", + "ÐĴ С", + "laÅŁ ma", + "Ġ ç¿", + "Ġç ¿", + "à¸Ń าà¸Ĭ", + "ни ÑĨÑĥ", + "ниÑĨ Ñĥ", + "Ġ หาà¸ģ", + "Ġห าà¸ģ", + "ãģĭ ãģĹ", + "íı ´", + "Ġг аÑĢан", + "ĠгаÑĢ Ð°Ð½", + "ĠгаÑĢа н", + "Ġ Ïĥαν", + "ĠÏĥ αν", + "Ġдобав иÑĤÑĮ", + "ĠÑĢаз ÑĢеÑĪ", + "á ¾", + "æĺ¯ 个", + "μ ÎŃÏĤ", + "μÎŃ ÏĤ", + "Ġİmpar ator", + "æ¨Ļ æºĸ", + "Ñģ ÑĤÑĭ", + "ÑģÑĤ Ñĭ", + "Ġg ücü", + "Ġgü cü", + "Ġgüc ü", + "Ġ íĥĢìĿ´", + "Ġíĥ ĢìĿ´", + "ĠíĥĢ ìĿ´", + "Ġ åħ¶ä»ĸ", + "Ġåħ¶ ä»ĸ", + "Ġt ông", + "Ġtô ng", + "Ġtôn g", + "Ġv edenÃŃ", + "Ġved enÃŃ", + "Ġvede nÃŃ", + "ëĵľ ë¡ľ", + "Ġm esel", + "Ġme sel", + "Ġmes el", + "Ġ Äįe", + "ĠÄį e", + "j de", + "jd e", + "Ïģ εια", + "Ïģε ια", + "Ïģει α", + "ãĤĪ ãģŃ", + "Ðł ÐĿ", + "è·Ŀ 离", + "ĠÙĤ ائÙħØ©", + "า à¸ļาล", + "าà¸ļ าล", + "ĠÑģай ÑĤÑĸ", + "Ġर स", + "ĠÙĤر ÙĨ", + "Ġná vr", + "Ġnáv r", + "Ú© Ùħ", + "çļĦ æīĭ", + "Ġsor unu", + "Ġsorun u", + "Ġsoru nu", + "/N ÄIJ", + "nut ÃŃm", + "nutÃŃ m", + "ĠØ® ÙĪØ±Ø¯", + "ĠØ®ÙĪ Ø±Ø¯", + "ĠØ®ÙĪØ± د", + "Ġng á»Ŀ", + "Ġ: .|", + "Ġ:. |", + "Ġbudou c", + "i Äįky", + "iÄį ky", + "Ġد رد", + "Ġدر د", + "ÑĢо ниÑĩеÑģ", + "ÑĢон иÑĩеÑģ", + "ç¾ Ĭ", + "ĠìķĦ ë²Ħì§Ģ", + "ĠKan unu", + "ĠKanun u", + "ĠпÑĢивод иÑĤ", + "άλÏħ ÏĪηÏĤ", + "ĠVlad im", + "Ġal ıp", + "Ġе ÑĤап", + "Ġà¤Ĺ लत", + "ĠراÙĩ ÙĨÙħ", + "Ġpoz isyon", + "Ġgö ç", + "èµ ŀ", + "Ġм ой", + "Ġмо й", + "ĠÎł ά", + "Ġ ìĪł", + "ĠìĪ ł", + "ĠØ¢ÛĮ ÙĨدÙĩ", + "a ná", + "an á", + "举 çľģ", + "ĠÙħت عدد", + "Ġ åįĬ", + "Ġåį Ĭ", + "ãĢĢ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ãĢĢãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "Ġth á»Ŀ", + "Ġthá» Ŀ", + "Ġвд ÑĢÑĥг", + "п аÑĤ", + "па ÑĤ", + "ĠпÑĢовед ениÑı", + "ÙĨ ز", + "ĠاÙĦب ØŃØ«", + "æģ ¢", + "Ġbak tı", + "Ġ è·¯", + "Ġè· ¯", + "Ġзаболева ний", + "ĠÐķ вÑĢоп", + "ĠÐķв ÑĢоп", + "Ġtarih li", + "ê¹ ¨", + "ĠÚ© ÙĪÙĩ", + "ĠÚ©ÙĪ Ùĩ", + "Ġìĸ´ 볤", + "Ġtit ul", + "Ġti tul", + "Ġvyd ánÃŃ", + "éĺ¶ æ®µ", + "à¸Īะ à¸ķ", + "Ġм оÑı", + "Ġмо Ñı", + "ĠкоÑĢ Ð¾Ð»", + "Ġко ÑĢол", + "Ġб анк", + "Ġбан к", + "วรร à¸ĵ", + "วร รà¸ĵ", + "ĠÙĥس ارة", + "ĠK hoa", + "ĠKh oa", + "ĠKho a", + "ĠÑĥнÑĸвеÑĢÑģиÑĤ еÑĤ", + "ãģ«éĸ¢ ãģĻãĤĭ", + "r uary", + "ru ary", + "Ġ à¸Ĥาย", + "Ġà¸Ĥ าย", + "Ġsv az", + "ĠØ´ رÙĤ", + "Ġشر ÙĤ", + "Ġд ÑĭÑħ", + "Ġиз бав", + "Ġизб ав", + "ĠÑı кÑĸй", + "ĠÑıк Ñĸй", + "ĠÑıкÑĸ й", + "ĠÎľ ον", + "Ġg ön", + "Ġgö n", + "ĠUkr aj", + "ĠUk raj", + "ĠUkra j", + "ัà¸Ļ à¸Ńà¸Ńà¸ģ", + "ัà¸Ļà¸Ń à¸Ńà¸ģ", + "Ġม à¸ģราà¸Ħม", + "и ÑĤов", + "иÑĤ ов", + "Ġanal ý", + "Ġana lý", + "ĠоÑĤ меÑĩ", + "Ġبر اÙī", + "âĪ ı", + "ัà¸ģ à¸ģ", + "æĭ¥ æľī", + "ĠÑĸнÑĪ Ð¾Ð³Ð¾", + "Ġкомп анÑĸÑĹ", + "Ġk ÅĻes", + "ĠÑĢаб оÑĩ", + "ĠÑĢабо Ñĩ", + "a dÃŃ", + "ad ÃŃ", + "ìł ł", + "à¹Ħ หà¸Ļ", + "à¥ģब ह", + "âĢĻ deki", + "âĢĻd eki", + "âĢĻde ki", + "çħ ¤", + "ĠпаÑĢ Ñĥ", + "Ġпа ÑĢÑĥ", + "ìĦ Ń", + "Ġнеп оÑģÑĢед", + "Ġİ b", + "Ġà¸ŀ ฤศà¸Ī", + "íĭ ´", + "Ġ ëłĪìĿ´", + "ĠëłĪ ìĿ´", + "ĠTh á»ķ", + "Ñı еÑĤ", + "ائ ج", + "» çĴĥ", + "ÐĴ Ðŀ", + "åĸ Ĭ", + "Ġ 第ä¸ī", + "Ġ第 ä¸ī", + "Ġвок ÑĢÑĥг", + "Ñĩ енÑĮ", + "Ñĩе нÑĮ", + "Ñĩен ÑĮ", + "Ġolan ak", + "Ġola nak", + "t ura", + "tu ra", + "tur a", + "Ġ ÙħÙĬÙĦ", + "ĠÙħ ÙĬÙĦ", + "ĠÙħÙĬ ÙĦ", + "ey di", + "ĠÙħد ÙĬر", + "Ġnel ze", + "ัว à¸Ńย", + "ìħ ľ", + "Ġhlav u", + "Ġkor uy", + "ÑĨ ин", + "ÑĨи н", + "ĠдиÑģ ÑĨип", + "ĠÙħ اÙĨد", + "ĠÙħا ÙĨد", + "ĠÙħاÙĨ د", + "Ġпод ÑĢоб", + "Т Ðŀ", + "ÙĤر ار", + "à¹ģà¸Ļะ à¸Ļำ", + "문 ìĿĦ", + "æĮ¯ ãĤĬ", + "P ÅĻi", + "PÅĻ i", + "Ġy ên", + "श à¤ķ", + "Âł je", + "ĠÐļон ÑģÑĤиÑĤÑĥ", + "à¥ģ ह", + "à¥ģठ¹", + "ĠÙ¾ ا", + "ìĨĮ 를", + "Ġд ела", + "Ġдел а", + "Ġде ла", + "к ид", + "ки д", + "à¹Ĥ à¸Ĭ", + "커 ìĬ¤", + "dÄĽ len", + "dÄĽl en", + "à¤Ķ र", + "äºİ æĺ¯", + "ĠÙĩÙħ ÛĮØ´Ùĩ", + "ĠbaÅŁ lam", + "Ġ ìĽ¨", + "ĠìĽ ¨", + "Ġden eyim", + "Ġdeney im", + "Ġü ye", + "Ġüy e", + "Ġ νÏĮ", + "Ġν ÏĮ", + "Ġà¤ĸ ड", + "n ÄĽl", + "nÄĽ l", + "ĠÑģÑĦ еÑĢÑĸ", + "ĠÑģÑĦеÑĢ Ñĸ", + "à¸Ńà¸Ķ à¸ł", + "ä¸Ģ å¹´", + "Ġvur gu", + "Äŀ İ", + "âĢĻ Ċ", + "ĠÑĸн ÑĪими", + "ĠÑĸнÑĪ Ð¸Ð¼Ð¸", + "Ġз менÑĪ", + "Ġठĭ", + "Ġв ека", + "Ġве ка", + "ĠØŃÚ©ÙĪÙħ ت", + "ĠتÙħ اÙħÛĮ", + "ĠتÙħاÙħ ÛĮ", + "Ġs mrt", + "Ġsm rt", + "Ġsmr t", + "Ġh á»§y", + "Ġyap ılmÄ±ÅŁ", + "Ġyapıl mÄ±ÅŁ", + "à¹ī à¸ľ", + "ĠY en", + "ĠYe n", + "Ġ Ñĥл", + "ĠÑĥ л", + "ĠS vÄĽt", + "ĠSv ÄĽt", + "ั à¸Ħ", + "ĠmÄĽsÃŃ ců", + "д енÑĤи", + "ден ÑĤи", + "Ġ ï¾ĺ", + "Ġï¾ ĺ", + "Ġпол иÑĤи", + "Ġполи ÑĤи", + "ĠполиÑĤ и", + "s kyt", + "sk yt", + "sky t", + "ä¹Ł æľī", + "Ġê°Ļ ìĬµëĭĪëĭ¤", + "Ġê·¸ëŀĺ ìĦľ", + "ÏĦε Ïģη", + "ÏĦεÏģ η", + "Ñĩ еÑĢ", + "Ñĩе ÑĢ", + "ĠÃľNİVERS İTESİ", + "ส à¸ł", + "Ġ สร", + "Ġส ร", + "ान द", + "ĠaÅŁ ırı", + "λ ίοÏħ", + "λί οÏħ", + "Ġ ÙĦÙģ", + "ĠÙĦ Ùģ", + "ÃŃ nu", + "ÃŃn u", + "à¸Ń าร", + "ÑĤ ÑĥÑĢа", + "ÑĤÑĥ ÑĢа", + "ÑĤÑĥÑĢ Ð°", + "ĠÄįesk ých", + "ĠÄįe ských", + "ĠÄįeský ch", + "Ġph ức", + "以 为", + "ÏģÏī ÏĢα", + "ĠاÙĨر ÚĺÛĮ", + "» )", + "a lardan", + "alar dan", + "alarda n", + "ĠÑģÑĤ воÑĢÑİ", + "ĠÑģÑĤвоÑĢ Ñİ", + "Ġt ráv", + "Ġtr áv", + "ॠ¬", + "ãģĬ ãĤĪãģ³", + "ïľ ĭ", + "ad il", + "adi l", + "ĠΤ ι", + "Ġ ëIJ©ëĭĪëĭ¤", + "ĠëIJ ©ëĭĪëĭ¤", + "Ġε μÏĨ", + "Ġ구 ì¡°", + "ìĹŃ ìĭľ", + "ĠاÙĦ جاÙħ", + "ĠاÙĦج اÙħ", + "主 é¢ĺ", + "ãĤ¹ ãĥĿ", + "Ġ ìĹŃìĭľ", + "ĠìĹŃ ìĭľ", + "ĠÚ©Ùħ تر", + "ĠSp oleÄį", + "ол оÑĪ", + "оло ÑĪ", + "ĠSur iye", + "Ч еÑĢ", + "æĪĺ æĸĹ", + "Ġz ávis", + "Ġzá vis", + "Ġzáv is", + "æĽ¸ 館", + "Ġmus el", + "Ġmu sel", + "Ġmuse l", + "Ġ çĿ", + "Ġç Ŀ", + "Ùħ Ùħ", + "ĠاÙĦØ® ارج", + "Ġ ÐĵÐŀ", + "ĠÐĵ Ðŀ", + "ĠваÑĢ ÑĤо", + "ĠваÑĢÑĤ о", + "Ïģα β", + "Ġपह à¤ļ", + "ub lice", + "ublic e", + "ubl ice", + "ÑĨион ного", + "è Į¨", + "èĮ ¨", + "ĠدÙģ ØªØ±", + "Ġ Ù쨳", + "ĠÙģ Ø³", + "Ġन à¤ľà¤°", + "t arı", + "ta rı", + "tar ı", + "Ġоб ÑĢоб", + "ĠÐł а", + "ĠاÙĦ صÙĨ", + "ĠاÙĦص ÙĨ", + "Ø´ Ø©", + "ĠìĹĨ ìĹĪ", + "ož ná", + "æľĢ çµĤ", + "Ù ¥", + "r ech", + "re ch", + "rec h", + "ĠاÙĦØ£ سر", + "ĠاÙĦأس ر", + "Ġм ови", + "Ġмо ви", + "Ġмов и", + "Ġì¡° êµIJ", + "Ñĸ меÑĩ", + "Ñĸм еÑĩ", + "ãĥ¯ ãĥ¼", + "б ÑĥÑĢг", + "бÑĥ ÑĢг", + "Ġس ÙĦس", + "ĠسÙĦ س", + "åѦ ä¼ļ", + "Ġ ë¦", + "Ġë ¦", + "åħĭ æĸ¯", + "æĸĩ çĮ®", + "Ġx ương", + "Ġyo lc", + "Ġyol c", + "Ġ ìĤ¬ë¬´", + "ĠìĤ¬ 무", + "ãĤı ãģļ", + "ĠÑĢаÑģÑĤ ений", + "ĠÙģ Ø¶Ø§ÛĮ", + "ĠÙ쨶 اÛĮ", + "Ġna opak", + "Ġnao pak", + "ĠпÑĢи вÑĭ", + "ĠпÑĢив Ñĭ", + "Ġد ÛĮدÙĩ", + "ĠدÛĮ دÙĩ", + "ĠدÛĮد Ùĩ", + "à¸ģาร à¹ĥà¸Ĭ", + "Ġ åŀ", + "Ġå ŀ", + "çij Ł", + "以 åIJİ", + "ĠpÅĻib liž", + "ĠdÃ¼ÅŁ man", + "Ġt emin", + "Ġte min", + "Ġtem in", + "ĠÑĥÑģл Ñĥг", + "ĠÑĥÑģ лÑĥг", + "Ġद ब", + "ĠìĥĪ ê¸Ģ", + "ĠÑĥÑģÑĤÑĢой ÑģÑĤва", + "ĠТ ÑĥÑĤ", + "ÏĦ ίοÏħ", + "ÏĦί οÏħ", + "Ġİs lâm", + "Ù ¤", + "åıĤ ä¸İ", + "Ġк ÑĥÑģÑĤ", + "ĠкÑĥ ÑģÑĤ", + "ĠкÑĥÑģ ÑĤ", + "éĻIJ åζ", + "ت ÙĬÙĨ", + "تÙĬ ÙĨ", + "ĠоÑģÑĤ аннÑĸ", + "ĠоÑģÑĤан нÑĸ", + "ic ations", + "ication s", + "ا Ú©ÛĮ", + "اک ÛĮ", + "но ÑģÑı", + "ноÑģ Ñı", + "ÄŁ an", + "ÄŁa n", + "ãģı ãĤĮãĤĭ", + "ãģıãĤĮ ãĤĭ", + "Ġyap ıyor", + "Ġyapı yor", + "Ġê°ķ ëĤ¨", + "Ùħ ÙĬÙħ", + "ÙħÙĬ Ùħ", + "æ ŃIJ", + "æŃ IJ", + "Ġر ع", + "Ġb oÄŁ", + "Ġbo ÄŁ", + "ĠиÑģ Ñħод", + "èª ł", + "æł· åŃIJ", + "Ġbu deme", + "Ġbud eme", + "Ġbude me", + "ĠÑģ еÑĤ", + "ι ÏĥμοÏį", + "ιÏĥμ οÏį", + "Ġ å¾ĴæŃ©", + "Ġå¾Ĵ æŃ©", + "u álnÃŃ", + "ĠاÙĦع ÙĤ", + "Ġسب Ú©", + "ĠاÙĦØ£ خرÙī", + "ĠاÙĦأخ رÙī", + "E FA", + "EF A", + "åĽº å®ļ", + "Ġ ãĤ¬", + "ĠãĤ ¬", + "ĠìŀIJ ìŰ", + "ยว à¸Ĥ", + "ب س", + "un ma", + "Ġза ним", + "Ġзан им", + "à¹ĥà¸Ļ ร", + "èĢĥ èĻij", + "æ·· åIJĪ", + "å° ĭ", + "Ġçık Ä±ÅŁ", + "Ġm aliyet", + "Ġmal iyet", + "éľ Ĭ", + "ãģŁãĤģ ãģ®", + "ĠÙ¾ Ø´", + "Ġз лоÑĩ", + "Ġvý Å¡i", + "Ġsch vál", + "ĠÙĨÙħ ÙĪØ¯Ùĩ", + "ĠÙĨÙħÙĪØ¯ Ùĩ", + "Î Ĩ", + "Ġz ách", + "Ġzá ch", + "Ġ Ïĥκ", + "ĠÏĥ κ", + "ãĤ¹ ãĥŀ", + "ĠÙħس ائÙĦ", + "ĠاÙĦاج تÙħاع", + "åľ° çĤ¹", + "ا ÛĮاÙĨ", + "اÛĮ اÙĨ", + "ĠÐŀ к", + "ê¸ Ķ", + "e lease", + "el ease", + "ele ase", + "Ġطب ÙĤÙĩ", + "ĠطبÙĤ Ùĩ", + "éij ij", + "Ġì½Ķ ë¡ľëĤĺ", + "é¼ ł", + "大 åħ¨", + "ĠпÑĢи веÑģÑĤи", + "ĠпÑĢив еÑģÑĤи", + "Ġاب تد", + "Ġابت د", + "리 ë¡ľ", + "ĠÑģÑĤÑĢ Ð°Ð½Ñĭ", + "ĠÑģÑĤÑĢа нÑĭ", + "ĠÑģÑĤÑĢан Ñĭ", + "ĠzatÃŃm co", + "Ġh uyết", + "Ġhuy ết", + "سÛĮ ÙĪÙĨ", + "Ġsor du", + "âĢĮ رس", + "ĠÑĦ ÑĢон", + "Ġed ip", + "Ġedi p", + "ÙĨ Ú¯ÛĮ", + "ÙĨÚ¯ ÛĮ", + "Ġк иÑĢ", + "Ġки ÑĢ", + "Ġ íķ´ìķ¼", + "Ġíķ´ ìķ¼", + "ì» ´", + "ÑĨик лоп", + "ĠпÑĢимен ениÑı", + "Ġоб л", + "éļ ª", + "Ġk romÄĽ", + "Ġkro mÄĽ", + "æł¸ å¿ĥ", + "ra him", + "rah im", + "о ÑĢд", + "оÑĢ Ð´", + "Ġl Ãłnh", + "ĠlÃł nh", + "ĠlÃłn h", + "Ġо ÑģÑĤÑĢов", + "ĠоÑģÑĤ ÑĢов", + "; |", + "b uz", + "bu z", + "Ġ ÏĦÏģο", + "ĠÏĦ Ïģο", + "ĠÐĴ аÑĢ", + "æī İ", + "ı lÄ±ÅŁ", + "ılı ÅŁ", + "ıl Ä±ÅŁ", + "éĿ¢ ç©į", + "身 份", + "é¢Ĩ åŁŁ", + "ĠاÙĦÙĤر ÙĨ", + "Ġ пÑĢиклад", + "ĠпÑĢи клад", + "ĠпÑĢик лад", + "ãĥģ ãĥ¼ãĥł", + "Ġสà¸ŀ à¸Ľ", + "Ġо ÑĩиÑģÑĤ", + "ĠоÑĩ иÑģÑĤ", + "ĠоÑĩи ÑģÑĤ", + "Ġмил ли", + "а ÑĨÑĸÑĹ", + "ี à¹Ģà¸Ń", + "Ġt anın", + "Ġtan ın", + "Ġtanı n", + "çζ 亲", + "Ġmsg str", + "Ġmsgs tr", + "ĠØ´ ÛĮÙħÛĮ", + "ĠØ´ÛĮ ÙħÛĮ", + "ĠÙ쨱 اÙĩÙħ", + "Ġ ë§¥", + "Ġë§ ¥", + "ãĢĤ å½ĵ", + "Ġкон ÑĨенÑĤÑĢа", + "êµIJ íļĮ", + "ãĤī ãĤĮãģ¦", + "ãĤīãĤĮ ãģ¦", + "Ġya sak", + "Ġyas ak", + "ĠÐij ол", + "Ġ æ¾³", + "Ġæ¾ ³", + "çĩ ķ", + "Ġ جا", + "Ġج ا", + "ëij ĺ", + "Ġدر Ø®ÙĪØ§Ø³Øª", + "ĠmÃŃst nÃŃ", + "ÂĤ ÃĮ", + "Ġbas kı", + "Ġu çak", + "Ġuç ak", + "ä» ĵ", + "Ġìľł ì§Ģ", + "Ġп оба", + "Ġпо ба", + "Ġпоб а", + "Ġz eptal", + "Ġze ptal", + "ç»Ļ æĪij", + "ĠAt atürk", + "ĠÙħÙĨ اس", + "Ñ Ĵ", + "Ġar acı", + "Ġarac ı", + "Ġara cı", + "лÑİ ÑĶ", + "Ġnit elik", + "Ġnitel ik", + "ĠM ezi", + "ĠMe zi", + "ĠMez i", + "ĠÎŃ Î½Î±ÏĤ", + "ĠÎŃνα ÏĤ", + "ĠÎŃν αÏĤ", + "Ïİν ÏĦαÏĤ", + "v až", + "va ž", + "Ġk uzey", + "Ġ ÏİÏģα", + "ĠÏİ Ïģα", + "ĠÑĢоз пов", + "ĠÑĢозп ов", + "à¹Ī าà¸ģ", + "à¹Īา à¸ģ", + "ãĢģ ä¸ī", + "ĠÑģÑĤ аÑĢи", + "ĠÑģÑĤаÑĢ Ð¸", + "ĠÑģÑĤа ÑĢи", + "Ġhak kı", + "Ġhakk ı", + "ĠØ¢Ùħ ادÙĩ", + "íĮ Ķ", + "о мÑĸ", + "ом Ñĸ", + "Ġ âĢł", + "ĠâĢ ł", + "ãģĭ ãĤı", + "ãĢĮ ä½ł", + "æ³ķ åĽ½", + "ÙIJ ÙĬÙĨ", + "ÙIJÙĬ ÙĨ", + "æī ķ", + "н или", + "ни ли", + "нил и", + "ĠÑĥÑģÑĤанов ки", + "Ġl ông", + "Ġlô ng", + "त म", + "ÙĪ ÙĨÙĬØ©", + "ÙĪÙĨ ÙĬØ©", + "ÙĪÙĨÙĬ Ø©", + "ÙĬ تÙĬ", + "ÙĬت ÙĬ", + "Ġê²Įìĭľ 물", + "Ġve Å¡ker", + "ÎŃ Ïģγ", + "ÎŃÏģ γ", + "ĠÑĥ Ñģе", + "ĠÑĥÑģ е", + "Ġk ıl", + "Ġkı l", + "Ġil gi", + "Ġilg i", + "μ Ïīν", + "Ġз вÑĸлÑĮ", + "Ġзв ÑĸлÑĮ", + "Ġön lem", + "à¸ģà¸İ หมาย", + "ĠH iá»ĩp", + "Ġг оÑĢм", + "ĠгоÑĢ Ð¼", + "лÑı ÑİÑĤÑĮÑģÑı", + "лÑıÑİÑĤÑĮ ÑģÑı", + "la maya", + "lam aya", + "lama ya", + "ĠÑģпоÑģоб ом", + "ãģ¸ ãģ¨", + "ç¦ģ æŃ¢", + "ĠÑĢаÑħ Ñĥнок", + "ĠоÑĤвеÑĢ ÑģÑĤи", + ".: .:.:.", + ".:.: .:.", + ".:.:.: .", + ".:.:. :.", + "Ġmü da", + "о наÑħ", + "он аÑħ", + "она Ñħ", + "Ì£ c", + "Ġyap acak", + "Ġн азвание", + "Ġназ вание", + "Ġназва ние", + "对 æĸ¹", + "ëĮĢ íijľ", + "çĪ Ń", + "в ана", + "ва на", + "ван а", + "ह न", + "ĠпÑĢоблем а", + "Ġжен ÑīинÑĭ", + "ĠженÑīин Ñĭ", + "èŀ º", + "Ġhosp odáÅĻ", + "ĠСÑĤ еп", + "ĠodpovÄĽ d", + "ĠS á»Ń", + "e view", + "ev iew", + "evi ew", + "åĩł ä¹İ", + "çŁ ¢", + "æĿ¥ ãģŁ", + "Ġп олоÑģ", + "Ġпол оÑģ", + "ĠÑģ ел", + "å± Ĩ", + "ĠпеÑĢв ой", + "ĠпÑĢоÑĨеÑģ Ñģа", + "ĠпÑĢоÑĨеÑģÑģ а", + "ãĢĢ ãĤĿ", + "ت اÙħبر", + "تا Ùħبر", + "и лаÑģÑı", + "ила ÑģÑı", + "ï¼Į æĹł", + "ĠвлаÑģ ноÑģÑĤÑĸ", + "íķĺ ìŀIJ", + "аÑĤ ки", + "ĠB Ãł", + "ĠK arel", + "ĠKar el", + "ĠKa rel", + "ĠKare l", + "è· µ", + "ر ÛĮÙĩ", + "رÛĮ Ùĩ", + "ĠëĤĺ 를", + "ĠобеÑģпеÑĩ ива", + "ĠобеÑģпе Ñĩива", + "à¥įर पत", + "ãģĹ ãĤĩ", + "åį Ĵ", + "Ġ 奥", + "Ġå¥ ¥", + "ĠпÑĢ Ð¾ÑĤе", + "ĠпÑĢо ÑĤе", + "ĠпÑĢоÑĤ е", + "Ġ æĭĽ", + "Ġæĭ Ľ", + "ĠСÑĤ ÑĢана", + "ĠÑĢабоÑĤ аÑĤÑĮ", + "ĠÑĢабоÑĤа ÑĤÑĮ", + "Ġتش Ø®ÛĮص", + "ек ÑģÑĥ", + "екÑģ Ñĥ", + "Ġ 리그", + "Ġ리 ê·¸", + "Ġص اÙĦØŃ", + "ĠbaÅŁ lamÄ±ÅŁ", + "ĠbaÅŁlam Ä±ÅŁ", + "ĠÙ¾ÛĮ اÙħبر", + "ĠÙ¾ÛĮاÙħ بر", + "ز ا", + "Ġм аÑģÑģ", + "ĠмаÑģ Ñģ", + "ĠÎł αÏģ", + "Ġγα Ïģ", + "ëĿ¼ íͼ", + "Ġy arı", + "Ġya rı", + "Ġyar ı", + "ĠÑĤип Ñĥ", + "Ðŀ п", + "ãģij ãģªãģĦ", + "e mem", + "em em", + "eme m", + "ĠnÄĽ mu", + "ĠnÄĽm u", + "ĠÙĨ شر", + "ĠÙĨØ´ ر", + "ĠÎijθή να", + "Ùģ Ø±Ø§ÙĨ", + "Ù쨱 اÙĨ", + "Ġ ç¶²", + "Ġç¶ ²", + "ĠпÑĢом иÑģлов", + "ĠBu gün", + "ĠBug ün", + "ìŀ Ķ", + "ĠжÑĸн ок", + "Ġ à¸Ľà¸£à¸°à¹Ģà¸łà¸Ĺ", + "Ġà¸Ľà¸£à¸° à¹Ģà¸łà¸Ĺ", + "ĠвикоÑĢиÑģÑĤов ÑĥваÑĤи", + "ĠТ им", + "ĠТи м", + ") 를", + "еж аÑĤÑĮ", + "Ġs ona", + "Ġso na", + "Ġson a", + "Ø´ÙĨ بÙĩ", + "Ġnich ž", + "åī Ľ", + "ĠÙģ ØªØŃ", + "ĠÙģØª ØŃ", + "ĠÙħÙĤ دÙħ", + "ĠÙħÙĤد Ùħ", + "ĠGüven lik", + "e um", + "eu m", + "ç»ı è¿ĩ", + "è·Ŀ éĽ¢", + "Âł не", + "Ġا صÙĪÙĦ", + "Ġاص ÙĪÙĦ", + "ĠzaÄį átku", + "ิà¹Ģว à¸ĵ", + "Ġà¤ķ à¤Ł", + "Ġk riz", + "Ġkr iz", + "Ġp án", + "Ġpá n", + "ĠбоÑĢ ÑĮ", + "Ġбо ÑĢÑĮ", + "ظ ÙħØ©", + "ظÙħ Ø©", + "Ġê²½ ë¶ģ", + "ĠاÙĦÙĬ ÙħÙĨ", + "ĠاÙĦعرب ÙĬ", + "Ġh lub", + "Ġhl ub", + "Ġch á»Ŀ", + "è¥ ²", + "ëĵľ 리", + "ãĥĸ ãĥª", + "ĠÑģÑĤол ÑĸÑĤÑĤÑı", + "ر بÙĬØ©", + "رب ÙĬØ©", + "Ġ æ°¸", + "Ġæ° ¸", + "Ġê±° ìĿĺ", + "Ġβ αÏĥ", + "Ġβα Ïĥ", + "Ġa rz", + "Ġar z", + "ãĥ¢ ãĥ³", + "ĠÑĢÑĸв енÑĮ", + "ä¸į çŁ¥", + "导 èĩ´", + "ا ÙĬØ´", + "اÙĬ Ø´", + "ĠпÑĢев ÑĭÑĪ", + "Ġп н", + "ĠÎĴ ÏģοÏĩή", + "Ġ 身", + "Ġè º«", + "ĠÄIJ ầu", + "ĠÏĮ μÏīÏĤ", + "j ÃŃž", + "jÃŃ Å¾", + "Ġλ ίγ", + "ĠÑĪк оли", + "ĠÑĪкол и", + "ãģ£ãģ± ãģĦ", + "z dy", + "zd y", + "Ġê³ §", + "t eÅŁ", + "te ÅŁ", + "ÑĢ ÐµÑī", + "ÑĢе Ñī", + "κ ει", + "κε ι", + "sah uje", + "Ġà¤īस स", + "ĠTan rı", + "ä¸į 好", + "éĥ Ń", + "ĠвÑĭ глÑıд", + "Ġç oÄŁ", + "Ġин ÑģÑĤÑĢÑĥменÑĤ", + "r ej", + "re j", + "èĪ Į", + "ãģĭ ãĤīãģªãģĦ", + "ãģĭãĤī ãģªãģĦ", + "ĠнепÑĢи ÑıÑĤ", + "Ġк ÑĢоме", + "ζ η", + "Ġл ог", + "ा वर", + "ाव र", + "ëħķ íķĺìĦ¸ìļĶ", + "ाह रण", + "ाहर ण", + "Ġgüven ilir", + "T ại", + "ĠØ´Ùĩر د", + "ĠØ´Ùĩ رد", + "ĠΤ ε", + "о ÑĢаз", + "оÑĢ Ð°Ð·", + "оÑĢа з", + "Ġl Ãłng", + "ĠlÃł ng", + "ĠlÃłn g", + "ï¼ ©", + "æĬķ æ³¨", + "Ġsiyas et", + "ÐĽ Ñİ", + "Ġt ÅĻet", + "ĠtÅĻ et", + "ĠÏĢÏģÏİ ÏĦη", + "ĠÑĥлÑĭ б", + "ĠL âm", + "ÑĥлÑĮÑĤ а", + "ÑĥлÑĮ ÑĤа", + "åŁº åľ°", + "Ġskup ina", + "æ°¸ ä¹ħ", + "лÑĥ гов", + "лÑĥг ов", + "Ġ ÑĨÑĸй", + "ĠÑĨ Ñĸй", + "ĠÑĨÑĸ й", + "ĠP oh", + "ĠPo h", + "i д", + "ĠTr uy", + "ĠTru y", + "çļĦ ä¸Ģ个", + "çļĦä¸Ģ 个", + "ë²Ħ ìłĦ", + "Ġx ứ", + "à¸ĩ à¹ģรà¸ģ", + "à¸Ħ à¸Ńม", + "Ġelektron ik", + "ĠaÄŁ aç", + "Ġà¤ľ य", + "ĠповеÑĢÑħ ноÑģÑĤÑĮ", + "ĠاÙĩÙħ ÛĮت", + "ли виÑħ", + "лив иÑħ", + "ĠolduÄŁ undan", + "ï¼ī :", + "ÑĨи ÑıÑħ", + "ÑĨиÑı Ñħ", + "製 ä½ľ", + "à¸Ĺ รà¸ĩ", + "à¸Ĺร à¸ĩ", + "ey im", + "eyi m", + "Ġná klad", + "c ilik", + "ci lik", + "cil ik", + "ĠÐĵ лав", + "ĠUy gu", + "ĠÑĢег ÑĥлÑİ", + "à¤Ĥ à¤ľà¤¨", + "à¤Ĥà¤ľ न", + "Ġkayn aģı", + "à¹ī าà¸Ń", + "à¹īา à¸Ń", + "Ġgör mek", + "ĠíĮ ¬", + "Ġ å®Į", + "Ġå® Į", + "Ø« ÙħاÙĨ", + "ĠÑĤак аÑı", + "ĠÑĤа каÑı", + "ĠÑĤака Ñı", + "Ġне из", + "Ġzpráv y", + "ĠاÙĦØ´ خص", + "Ġìĺ¤ íĽĦ", + "ĠاÙĦ طب", + "ĠاÙĦØ· ب", + "atır ım", + "ر ÙĬر", + "رÙĬ ر", + "ĠÙħع ÙħارÛĮ", + "Ãľ RK", + "ÃľR K", + "ĠÒ IJ", + "ĠìĦ ¬", + "æīĭ ãģ«", + "Ġë³Ģ íĻĶ", + "u lace", + "ul ace", + "ula ce", + "Ġs ợ", + "ÑĢ Ð¸Ñĩ", + "ÑĢи Ñĩ", + "มห าว", + "Ġk â", + "ĠÑģп ÑĢоб", + "Ùĩ رÙĩ", + "Ùĩر Ùĩ", + "ाध न", + "ĠÏĢ Î±Î¹", + "ĠÏĢα ι", + "ب عد", + "بع د", + "ĠاÙĦ تÙĪ", + "ĠاÙĦت ÙĪ", + "ç»ı çIJĨ", + "p ůsob", + "æ¬ ł", + "ĠзаÑħвоÑĢÑİ Ð²Ð°Ð½Ð½Ñı", + "Ø® Ø©", + "ÚĨ ار", + "Ġboz uk", + "] âĢı", + "ĠSoc orro", + "Ġ hrad", + "Ġh rad", + "Ġhr ad", + "Ġhra d", + "над леж", + "ĠÑĥÑĩаÑģÑĤ ие", + "ĠÑĥÑĩаÑģ ÑĤие", + "ĠÑĥÑĩаÑģÑĤи е", + "å¤ī ãĤı", + "Ġy ans", + "Ġya ns", + "Ġyan s", + "ĠØ¥ ÙĦ", + "Ø® بر", + "خب ر", + "ÑĨиклоп ед", + "ι Ïİν", + "ιÏİ Î½", + "Ïĥ ÏĦÏģο", + "ÏĥÏĦ Ïģο", + "Ġb anka", + "Ġbank a", + "Ġban ka", + "ĠsoÄŁ uk", + "Ġün lü", + "é¢ ľ", + "Ġر Ù쨹", + "ĠرÙģ Ø¹", + "çIJ ³", + "ĠÑģоÑģÑĤоÑı нии", + "ν ονÏĦαÏĤ", + "νον ÏĦαÏĤ", + "Ġа кÑĤи", + "Ġак ÑĤи", + "ĠакÑĤ и", + "ĠÏĢολ Ïħ", + "ĠÏĢο λÏħ", + "Ġм оÑĹ", + "Ġмо ÑĹ", + "Ġ æł¼", + "Ġæł ¼", + "ç² Ĺ", + "ĠÑģлÑĥÑĩ ай", + "ĠÑģлÑĥ Ñĩай", + "ĠÑģлÑĥÑĩа й", + "ìĿ¼ ìĹIJ", + "ĠÑĤÑĢеб ÑĥеÑĤ", + "Ġ åıĤèĢĥ", + "ĠåıĤ èĢĥ", + "an gl", + "ang l", + "am ik", + "ami k", + "Ġ İÅŀ", + "Ġİ Åŀ", + "æ¹ ¯", + "ĠÄij áo", + "ĠÄijá o", + "ละ à¸Ħร", + "Ñģ о", + "Âł ob", + "Ġk lim", + "Ġkl im", + "Ġkli m", + "èĥ Ĩ", + "ìĥĿ íĻľ", + "ãĥij ãĥ³", + "- ब", + "Ġк ад", + "Ġка д", + "à¹Ī สามารà¸ĸ", + "ĠÙħس ÙĦÙħاÙĨ", + "ç¿ °", + "ĠB ütün", + "ĠK raj", + "ĠKr aj", + "ĠKra j", + "ĠпеÑĢ Ñģп", + "ĠпеÑĢÑģ п", + "Ġener j", + "ãģķ ãģĽãĤĭ", + "ãģķãģĽ ãĤĭ", + "è¾¾ åΰ", + "ा à¤Ĭ", + "ाठĬ", + "ĠگرÙģ ØªÙĨ", + "ĠگرÙģØª ÙĨ", + "ÑĪ ÐºÑĥ", + "ĠÐŁ ло", + "ÃŃ ny", + "ÃŃn y", + "ĠH ra", + "ĠÚĨ ÙĨاÙĨ", + "Ġ à¹Ħà¸Ĺย", + "Ġà¹Ħ à¸Ĺย", + "vise jÃŃcÃŃ", + "Û³ Û³", + "ĠÐľÑĸнÑĸÑģÑĤ еÑĢ", + "à¹Ĥ à¸Ń", + "ĠدÙĩ ÛĮد", + "æ¯Ķ ä¾ĭ", + "Ïĥι εÏį", + "Ç IJ", + "ãĢģ ãģª", + "Ġत स", + "Ġİ t", + "ĠìłĦ ìŁģ", + "à¹Ģ à¸Īร", + "à¹Ģà¸Ī ร", + "Ġelek tr", + "Ġelekt r", + "Ġd ư", + "â ĶĶ", + "âĶ Ķ", + "Ġ ìĥ¤", + "Ġìĥ ¤", + "ä» ®", + "à¸ģาร à¹Ģล", + "Ġм ÑĥлÑĮ", + "ĠмÑĥ лÑĮ", + "Ġ 度", + "Ġåº ¦", + "ĠH uyá»ĩn", + "в ен", + "ве н", + "Ġl Æ°á»Ľi", + "Ġprovoz u", + "Ñĥ ÑĢÑĥ", + "ÑĥÑĢ Ñĥ", + "ÑĢ ÑĸÑĹ", + "ÑĢÑĸ ÑĹ", + "Ġçocu ÄŁ", + "ัà¸IJ à¸ļาล", + "ÙĦ ÙĬÙĩ", + "ÙĦÙĬ Ùĩ", + "Ġ[â̦] ...Ċ", + "åİŁ å§ĭ", + "Ġs klad", + "Ġsk lad", + "Ġskl ad", + "Ġسپ تاÙħبر", + "ĠTom áš", + "Ġس ÙĪØ§ÙĦ", + "ĠسÙĪ Ø§ÙĦ", + "çģ Ń", + "ãĤĵ ãģ©", + "на знаÑĩ", + "ĠÄij Ä©a", + "ĠudÄĽl at", + "Ġà¤Ĩ दम", + "Ġà¤Ĩद म", + "ï¼ ¬", + "ι νÏĮ", + "ιν ÏĮ", + "iÅŁ leri", + "ÄIJ ây", + "Ġرس اÙĨÙĩ", + "ع اÙħ", + "عا Ùħ", + "ãĥ¼ãĥij ãĥ¼", + "Ġdo prov", + "Ġdop rov", + "ĠмÑĸÑģ ÑĤо", + "ĠмÑĸÑģÑĤ о", + "ï¼ ¥", + "ел Ñĸг", + "елÑĸ г", + "ائ ز", + "ä¸į äºĨ", + "ĠÐIJлекÑģанд ÑĢ", + "ĠвÑĢем ен", + "Ġdve ÅĻe", + "Ġch ảy", + "Ġ otel", + "Ġo tel", + "Ġot el", + "èĤ¯ å®ļ", + "ĠÑĥÑĤ веÑĢжд", + "ĠÐļом п", + "ĠÐļо мп", + "Ġ ëĤĺëĿ¼", + "ĠëĤĺ ëĿ¼", + "ĠвÑĸдбÑĥва ÑĶÑĤÑĮÑģÑı", + "ãĢģ ãĢİ", + "ĠkarÅŁÄ± lık", + "Ġl ẫn", + "çħ Ļ", + "ع کس", + "å¼ ¥", + "Ġte cr", + "Ġtec r", + "Ġne od", + "Ġneo d", + "æĪIJ çĤº", + "åħ¥ ãĤĬ", + "ĠÐŁ ÑĢод", + "ĠÐŁÑĢ Ð¾Ð´", + "ĠÐŁÑĢо д", + "ĠÏĢ Ïģά", + "ื à¸Ńà¸Ķ", + "ืà¸Ń à¸Ķ", + "ÑģÑĤ аÑĤи", + "ÑģÑĤа ÑĤи", + "е ноÑĹ", + "ен оÑĹ", + "ено ÑĹ", + "Ñĩи Ñģл", + "ÑĩиÑģ л", + "羣 æŃ£", + "Ġ ราà¸Ħ", + "Ġร าà¸Ħ", + "Ñĥ ÑĢе", + "ÑĥÑĢ Ðµ", + "ĠØ´ اÙĩد", + "ĠشاÙĩ د", + "ا عر", + "اع ر", + "Ġê²½ íĹĺ", + "à¸Ļ à¸Ħ", + "ãĥį ãĥ«", + "ÏĢοÏħ λοÏĤ", + "Ġम à¤Ī", + "ìĬ¤ ì½Ķ", + "itel né", + "å¼Ģ æĶ¾", + "ç į¨", + "çį ¨", + "ĠpÅĻ ech", + "ĠpÅĻe ch", + "ú Äįast", + "å¢ ĵ", + "Ġ å½±", + "Ġå½ ±", + "ÙĨ ساÙĨ", + "ÙĨس اÙĨ", + "ÙĨسا ÙĨ", + "Ġд вад", + "Ġдв ад", + "Ġдва д", + "Ġи деÑĤ", + "Ġиде ÑĤ", + "Ġид еÑĤ", + "Ġпод клÑİÑĩ", + "Ġподк лÑİÑĩ", + "íĬ¹ë³Ħ ìĭľ", + "B Ãłi", + "Å¡ ku", + "Å¡k u", + "i lerden", + "iler den", + "åıĺ å¾Ĺ", + "ëıĻ ìķĪ", + "Ġpostup nÄĽ", + "ĠиÑĤ ог", + "Ġd ůvodu", + "Ġdůvod u", + "siz lik", + "ÙĦ اÙĨ", + "ÙĦا ÙĨ", + "éĤ£ ç§į", + "ĠÑĩа Ñģа", + "ĠÑĩаÑģ а", + "ä¸į æĸŃ", + "ĠØ®ÛĮ اباÙĨ", + "ĠاÙĦد اخ", + "ĠÑģÑĤоÑĢ Ñĸн", + "Ġì¶ľ ìŰ", + "æ² Ł", + "Ġh ry", + "Ġhr y", + "ĠG Ãľ", + "ĠìĿ¸ 구", + "l ied", + "li ed", + "lie d", + "Ġع اÙĦÙĬØ©", + "ĠпÑĢед ваÑĢ", + "ан ной", + "åı¥ è¯Ŀ", + "éł ĵ", + "ë°Ķ ìĿ¼", + "ï¼ı /", + "ĠÙħخت صات", + "ëŀ «", + "ĠçalÄ±ÅŁ maları", + "ĠçalÄ±ÅŁmalar ı", + "ĠçalÄ±ÅŁma ları", + "Ġrepublik a", + "Ġ ì³", + "Ġì ³", + "ा )", + "Ġê±´ ê°ķ", + "Ġê³µ ëıĻ", + "èħ ¦", + "ĠìĦľ ë¡ľ", + "ĠпÑĢовод иÑĤÑĮ", + "ĠдейÑģÑĤв иÑĤелÑĮно", + "v eç", + "ve ç", + "Ø« اÙĦ", + "Ġgöster ir", + "ır lar", + "ĠÑģам Ñĭм", + "á lo", + "ál o", + "é¢ij 次", + "à¥Ī à¤Ĺ", + "ا دÙħ", + "اد Ùħ", + "çĮ ª", + "ĠS ản", + "Ġ çı", + "Ġç ı", + "Ġl ety", + "Ġle ty", + "Ġlet y", + "Ġrep ublice", + "Ġrepublic e", + "æĿ¥ èĩª", + "Ġv ết", + "Ġbi rik", + "Ġbir ik", + "Ġbiri k", + "Ġm ekt", + "Ġme kt", + "Ġmek t", + "ĠاÙĦ ÙĪÙģ", + "ĠاÙĦÙĪ Ùģ", + "Ġj ich", + "Ġji ch", + "ä¸Ģ 覧", + "éľ² åĩº", + "ĠH iá»ĩn", + "ĠHi á»ĩn", + "Ġd iá»ĩt", + "ĠÑħ ÑĢиÑģÑĤи", + "åĪļ æīį", + "k ate", + "ka te", + "kat e", + "Ġb azen", + "Ġba zen", + "Ġbaz en", + "ĠurÄįit ÄĽ", + "ĠurÄį itÄĽ", + "Ġumož ÅĪuje", + "é¡ĺ ãģĦ", + "/Q ÄIJ", + "Ġmen Å¡ÃŃ", + "ÏĥκεÏħ ή", + "ĠÑĨеÑĢк ов", + "ĠÑĨеÑĢ ÐºÐ¾Ð²", + "Ġ è´Ń", + "Ġè´ Ń", + "ок ÑĢаÑĤи", + "ĠÑĢоз к", + "α νοÏħ", + "αν οÏħ", + "Ġyön etic", + "Ġyönet ic", + "Ġol madan", + "Ġolm adan", + "Ġolma dan", + "åĨľ ä¸ļ", + "Ġë°Ķ ëŀĮ", + "çĵ ľ", + "ÑĪ Ð°ÐµÑĤÑģÑı", + "ÑĪа еÑĤÑģÑı", + "ĠÐļ оÑģÑĤ", + "ĠÐļо ÑģÑĤ", + "ĠÙħ عت", + "ĠÙħع ت", + "Ġ à¸ŀล", + "Ġà¸ŀ ล", + "ĠÙħتÙģ Ø§ÙĪØª", + "ãĤī ãģı", + "èĪ Ĺ", + "Ġتع رÛĮÙģ", + "éīĦ éģĵ", + "Ġpé Äįe", + "ì» µ", + "Ġпод ÑĢаз", + "Ġбан кÑĥ", + "Ġбанк Ñĥ", + "İS İ", + "æ¡ IJ", + "à¹Ĥ รà¸Ħ", + "à¹Ĥร à¸Ħ", + "ĠØŃذ Ùģ", + "Ġ ë£", + "Ġë £", + "л иж", + "ли ж", + "Ġ ìĤ°ìĹħ", + "ĠìĤ° ìĹħ", + "ĠпÑĢи ÑĩинÑĭ", + "ĠпÑĢиÑĩин Ñĭ", + "ĠпÑĢиÑĩ инÑĭ", + "Ġна зна", + "Ġназ на", + "ãĥª ãĤ¹ãĥĪ", + "ãĥªãĤ¹ ãĥĪ", + "ìłķ ë¶Ģ", + "Ïĥ ÏĨα", + "ÏĥÏĨ α", + "å¦ ĥ", + "Ġголов и", + "Ġгол ови", + "ëIJĺìĹĪ ìĬµëĭĪëĭ¤", + "Ġεν ÏĮÏĤ", + "ãĤ¤ ãĥ³ãĤ¿", + "ãĤ¤ãĥ³ ãĤ¿", + "Ġs lun", + "Ġsl un", + "Ġslu n", + "ëł ´", + "ĠÑģÑĥÑīеÑģÑĤв ÑĥеÑĤ", + "ĠÑģÑĥÑīе ÑģÑĤвÑĥеÑĤ", + "з аб", + "за б", + "æĽ´ åĬł", + "Ġблагод аÑĢÑı", + "ĠëĮĢ êµ¬", + "è¾ ħ", + "ห าà¸ģ", + "หา à¸ģ", + "Ġ æİ¥", + "Ġæİ ¥", + "ëĮĢ ë¥¼", + "人 ç±»", + "j eme", + "je me", + "jem e", + "åĪĨ å¸ĥ", + "ìŀ¥ ìĿĢ", + "Ġдопом оги", + "ìĻĦ ë£Į", + "o sy", + "os y", + "èĭ± éĽĦ", + "Ġ ÙĦس", + "ĠÙĦ س", + "म ह", + "Ġ à¸ģำ", + "Ġà¸ģ ำ", + "Ġداش تÙĨ", + "Ġداشت ÙĨ", + "Ń ìłľ", + "İ ng", + "İn g", + "ĠTh ưá»Ŀng", + "íĻ Ģ", + "Ñį ÑĦ", + "íķ´ ìļĶ", + "ĠÐľ Ñĸж", + "ĠÐľÑĸ ж", + "еÑĢÑĸ га", + "еÑĢÑĸг а", + "Ġε á¼", + "à¹ģ สà¸ĩ", + "à¹ģส à¸ĩ", + "ãĥĢ ãĤ¤", + "Ġc esty", + "Ġce sty", + "Ġces ty", + "Ġcest y", + "Ġpr ázd", + "Ġprá zd", + "第 ä¸Ģ次", + "第ä¸Ģ 次", + "ĠÙĩÙħ سر", + "Ġz ev", + "Ġze v", + "Âł E", + "ĠBeled iyesi", + "ĠBelediye si", + "ĠпÑĢоп ози", + "Ġanlay Ä±ÅŁ", + "Âł Ùħ", + "ĠÑĢаÑģÑģ ÑĩиÑĤ", + "ĠاÙĦØ£Ùħ رÙĬÙĥÙĬØ©", + "ĠاÙĦØ£ÙħرÙĬÙĥÙĬ Ø©", + "Ġž ena", + "Ġže na", + "Ġžen a", + "d eniz", + "den iz", + "Ġn oci", + "Ġno ci", + "Ġnoc i", + "Ġst ál", + "ุ ย", + "주 ìĨĮ", + "Ġз еÑĢ", + "Ġ ìĨĮê°ľ", + "ĠìĨĮ ê°ľ", + "Ġkh ẳng", + "at ıcı", + "atı cı", + "ÄĽ ž", + "ĠÑĩ ÑĥÑĤÑĮ", + "Ġc áºŃu", + "ĠاطÙĦ اع", + "æµ ħ", + "Ġst rav", + "Ġstr av", + "Ġstra v", + "ĠSan ayi", + "Ġ طبÙĬ", + "ĠØ· بÙĬ", + "Ġطب ÙĬ", + "Ġhız la", + "Ïİ Î½Î±", + "Ïİν α", + "à¤¿à¤ľ ल", + "ÙħØŃ Ùħد", + "à¸ļ à¸ģ", + "Ġvzdál en", + "ĠÑĤак ими", + "ĠÑĤа кими", + "ĠÑĤаким и", + "ãĢĤ ãģĿãģĹãģ¦", + "Ġka lp", + "Ġkal p", + "Ġкож ного", + "Ðł µ", + "ÙĦع اب", + "ĠÙħ ÙĪÙĨ", + "ĠÙħÙĪ ÙĨ", + "ĠìĿ¼ ìĿĦ", + "Ġ ë°ĶìĿ´", + "Ġë°Ķ ìĿ´", + "Ġme kan", + "Ġmek an", + "ĠجاÙħ ع", + "Ġجا Ùħع", + "ĠÙĨ ÙģØª", + "ĠÙĨÙģ Øª", + "ĠاÙĦ سÙħ", + "ĠاÙĦس Ùħ", + "л ÑĭÑħ", + "лÑĭ Ñħ", + "èĥĮ æĻ¯", + "Ġê²ĥ ëıĦ", + "ĠìĤ´ ìķĦ", + "y dı", + "yd ı", + "Ġна веÑĢ", + "Ġнав еÑĢ", + "åŃIJ ãģ¯", + "l uluk", + "lu luk", + "Ġhá»Ĺ n", + "Ġ Ø´Ùģ", + "ĠØ´ Ùģ", + "Ġع ÙĦت", + "ĠعÙĦ ت", + "à¸Ħร าม", + "ĠÎļ ÏįÏĢ", + "Ġà¹Ģม ษายà¸Ļ", + "ÙĨد ÙĤ", + "ĠÑĥ ÑģÑĤÑĢа", + "ĠÑĥÑģÑĤ ÑĢа", + "ĠÑĥÑģ ÑĤÑĢа", + "ĠÎĵ εν", + "ĠÐĨ ван", + "ĠP hong", + "ĠPh ong", + "ĠPhon g", + "å®¶ çļĦ", + "ĠÐIJ лекÑģ", + "ĠÐIJле кÑģ", + "ĠÐIJл екÑģ", + "Ġзб еÑĢÑĸг", + "ĠÅŁark ı", + "ĠÅŁar kı", + "ĠظرÙģ ÛĮت", + "ĠÙħ عÙĨÛĮ", + "ĠÙħع ÙĨÛĮ", + "ĠÙħعÙĨ ÛĮ", + "Ġ лов", + "Ġл ов", + "ĠìĤ ¶", + "èħ IJ", + "Ġ å¯Į", + "Ġå¯ Į", + "E RG", + "ER G", + "ĠÑģÑĤо имоÑģÑĤÑĮ", + "ÅĻ et", + "ÅĻe t", + "à¥ī य", + "à¹Ī าร", + "à¹Īา ร", + "ĠارÙĪÙ¾ ا", + "Ġб ÑĢоÑģ", + "ĠоÑĤ ноÑģÑıÑĤ", + "ĠоÑĤноÑģ ÑıÑĤ", + "ĠÎŁ κ", + "ÑĨÑĮ кий", + "ÏĬ κ", + "ãģĤãĤĬ ãģ¾ãģĽãĤĵ", + "ĠÑĥ ник", + "ĠÄij iá»ĥn", + "ĠÄiji á»ĥn", + "Ġvý zkum", + "Ġh ứ", + "Ġhá» ©", + "Ġ ÙĪØ§Øª", + "ĠÙĪ Ø§Øª", + "ĠÙĪØ§ ت", + "Ġ å¹³æĸ¹", + "Ġå¹³ æĸ¹", + "Ïħ μ", + "ãĤĴ 使", + "εί ÏĦαι", + "两 人", + "Ġ åĮ»", + "ĠåĮ »", + "ÑĢаÑĤ иÑĤÑĮ", + "ÑĢаÑĤи ÑĤÑĮ", + "ĠاÙĦ اÙĨت", + "ĠاÙĦاÙĨ ت", + "ãģ® äºº", + "ر Ø´", + "ĠТ ÑĥÑĢ", + "r nÄĽ", + "rn ÄĽ", + "天 天", + "ม าร", + "มา ร", + "Ġort alama", + "Ġorta lama", + "ĠпеÑĢе пиÑģ", + "ĠпеÑĢеп иÑģ", + "ĠìĥĿ ìĤ°", + "å¿ Ĩ", + "í ĩ´", + "ï¼Į 该", + "éĮ ¢", + "ÏĢα ίδ", + "ĠмеÑĢ Ð¾Ð¿ÑĢи", + "Ġг ÑĢав", + "ĠгÑĢа в", + "ĠгÑĢ Ð°Ð²", + "ÃĶ ng", + "Ġ æ¤", + "Ġæ ¤", + "ĠاÙĦد ÙĪÙĦØ©", + "ĠاÙĦدÙĪÙĦ Ø©", + "Ġ оÑģÑĮ", + "Ġо ÑģÑĮ", + "ĠоÑģ ÑĮ", + "å¥ Ķ", + "Ġgüven li", + "íķĺ ìĭł", + "Ġ éĬ", + "Ġé Ĭ", + "éŁ³ æ¨Ĥ", + "Ġmed ya", + "Ġب ÙĨا", + "ĠبÙĨ ا", + "а ма", + "ам а", + "Ġ ãĤŃãĥ£", + "ĠãĤŃ ãĥ£", + "èĹ ¥", + "l arım", + "lar ım", + "ları m", + "ĠT iếng", + "iyor lar", + "ï¼ ¢", + "æĶ Ŀ", + "Ñĸй ÑģÑĮкоÑĹ", + "Ġyet iÅŁtir", + "ĠyetiÅŁ tir", + "ĠÙ¾ سر", + "Ġپس ر", + "ãĤī ãģĹ", + " ļ", + "ìĥ ¤", + "à¸Ķ าห", + "à¸Ķา ห", + "ĠتØŃص ÛĮÙĦ", + "Ġб енз", + "éģ £", + "Ġнаб лÑİ", + "ä½ĵ ç³»", + "ãĥ¯ ãĤ¤ãĥĪ", + "Âł ÂłĠ", + "³³ Ġ", + "书 è®°", + "ĠMü hendis", + "p lor", + "pl or", + "l az", + "la z", + "лÑı ли", + "Ġpom áh", + "Ġб лиж", + "Ġбл иж", + "Ġбли ж", + "ĠÑĩиÑģ ла", + "Ġubyt ovánÃŃ", + "ÑĢаÑĤ но", + "Ġtr Äĥm", + "Ġاب راÙĩ", + "át ka", + "Ġiç indeki", + "Ġiçin deki", + "Ġiçinde ki", + "ั à¸ļà¸Ļ", + "ัà¸ļ à¸Ļ", + "ĠاÙħ ÛĮد", + "n ave", + "na ve", + "nav e", + "e cut", + "ec ut", + "å°± åľ¨", + "Ġt radi", + "Ġtr adi", + "Ġtrad i", + "Ġtra di", + "Ø· ÙĦÙĤ", + "Ø·ÙĦ ÙĤ", + "ãĤ¦ ãĤ©", + "Ġkhu ôn", + "ìĬ¤ ë¡ľ", + "ÏĦ ÎŃÏģα", + "ÏĦÎŃ Ïģα", + "ĠÏĥ κο", + "ĠÏĥκ ο", + "ë§ Ľ", + "ĠÙģ ÙĨÛĮ", + "ĠÙģÙĨ ÛĮ", + "à¹Į à¹Ģà¸ŀ", + "ĠاÙĦع ظ", + "Ġth ôn", + "기 ìĿĺ", + "Ġภ¿", + "Ñĥ ÑİÑĤÑģÑı", + "ÑĥÑİÑĤ ÑģÑı", + "ĠÙħ کاÙĨ", + "ĠÙħÚ© اÙĨ", + "Ġ âĹİ", + "ĠâĹ İ", + "Ġ çľģ", + "Ġçľ ģ", + "Ġ åį¡", + "Ġåį ¡", + "ĠпеÑĢ ÑĪий", + "ĠпеÑĢÑĪ Ð¸Ð¹", + "ĠíĽĦ ë³´", + "Ġآر اÙħ", + "ãģĮ ãģĦ", + "ย าà¸Ļ", + "ยา à¸Ļ", + "μ ει", + "με ι", + "ĠM áy", + "Ġz ů", + "Ġpodp oru", + "Ġpodpor u", + "ì» ¨", + "Ñģ ÑĤÑĢи", + "ÑģÑĤ ÑĢи", + "ÑģÑĤÑĢ Ð¸", + "ÏĢ ÏĦÏīÏĥη", + "Ф ÐĽ", + "åĵª éĩĮ", + "ĠпеÑĢв ÑĥÑİ", + "Ġyer inde", + "Ġyeri nde", + "ĠزÛĮ با", + "ĠزÛĮب ا", + "Ġodst ran", + "à¥Ģ à¤Ĺ", + "ĠÑĢÑĸз нÑĸ", + "Ïģ ηÏĥη", + "Ïģη Ïĥη", + "âĢĮاÙĦÙħÙĦ ÙĦÛĮ", + "ع اد", + "عا د", + "à¥įप ष", + "ÑŁ N", + "ï½ Ľ", + "ãĥ¼ ãĥľ", + "ãĥ¼ãĥ ľ", + "è´Ń ä¹°", + "ĠìĿ¸ê¸° ê¸Ģ", + "ĠÙħÛĮ Ø´ÙĪØ¯", + "ĠбезопаÑģ ноÑģÑĤи", + "ĠνεÏĨ οκ", + "ãģ« ãģ¨", + "ĠÑĨеÑĢк ви", + "ت Ùĥ", + "ĠH Ãłng", + "ĠHÃł ng", + "ĠHÃłn g", + "ĠÙĦ ÙĦس", + "ĠÙĦÙĦ س", + "ĠνεÏĨοκ άλÏħÏĪηÏĤ", + "r aman", + "ra man", + "ram an", + "rama n", + "Ġvy vol", + "n iÄį", + "ni Äį", + "ر اÙĨÙĩ", + "راÙĨ Ùĩ", + "را ÙĨÙĩ", + "Ġp eÅŁ", + "Ġpe ÅŁ", + "ãĥ« ãĤ¯", + "å´ ĩ", + "Ġim kân", + "åĮ» çĸĹ", + "Ġप à¥Ŀ", + "άν νηÏĤ", + "Ġ جÛĮ", + "Ġج ÛĮ", + "Ġp roje", + "Ġpro je", + "Ġpr oje", + "Ġproj e", + "Ġül kenin", + "Ġülk enin", + "Ġülke nin", + "ĠK ew", + "ĠKe w", + "ĠاÙĦÙħ Ùģ", + "Ø£ Ùĥ", + "çĻº 表", + "Ġ δÏħ", + "Ġδ Ïħ", + "Ġ åĽ½å®¶", + "ĠåĽ½ å®¶", + "ĠKiÅŁ isel", + "ãĥ³ ãĤ¬", + "Ġzpráv a", + "V iá»ĩc", + "e rif", + "er if", + "eri f", + "Ġstrán ky", + "éļ ł", + "è¼ ķ", + "к оз", + "ко з", + "Ġस à¤ľ", + "Ùĩد اÙģ", + "l oub", + "lo ub", + "lou b", + "à¸łà¸²à¸ŀ ยà¸Ļà¸ķร", + "Ġíķł ìĿ¸", + "ĠÄIJ Ãło", + "ĠÄIJÃł o", + "ĠÙĨاØŃ ÛĮÙĩ", + "(= )", + "ĠÅŀ ampiyon", + "Ġp iÅŁ", + "Ġpi ÅŁ", + "Ġ ذÙĩ", + "Ġذ Ùĩ", + "ॠ¯", + "ĠÑģÑĢед ÑģÑĤво", + "ĠÑģÑĢедÑģÑĤв о", + "Ġ à¹Ģวลา", + "Ġà¹Ģว ลา", + "ĠÑĩ Ñĥж", + "Ġver ileri", + "Ġveri leri", + "Ġveriler i", + "ĠÚ© ارت", + "Ġکار ت", + "а ви", + "ав и", + "Ġà¤ķर व", + "Ġres tau", + "Ġrest au", + "Ġresta u", + "ê°ľ ìĽĶ", + "Ġм иÑĢов", + "Ġми ÑĢов", + "ĠмиÑĢ Ð¾Ð²", + "ì° ®", + "ĠnÄĽjak ý", + "Ġses siz", + "Ġsess iz", + "اء ات", + "ĠÐĹ Ð°Ñħ", + "ĠÐĹа Ñħ", + "Ñı ÑīиÑħ", + "ÑıÑī иÑħ", + "п ÑĢ", + "Ġпод алÑĮ", + "Ġпода лÑĮ", + "ĠопÑĢедел иÑĤÑĮ", + "ॠŃ", + "Ġ رÙģ", + "Ġر Ùģ", + "幸 ç¦ı", + "à »", + "Ġ vÄĽdom", + "ĠvÄĽ dom", + "ĠvÄĽd om", + "ĠÑģвид еÑĤелÑĮ", + "ĠÎĵ οÏħ", + "ılıģı yla", + "ılıģ ıyla", + "çĻ» éĮ²", + "Ġä¸ĭ è·Į", + "Ġп лÑİ", + "Ġпл Ñİ", + "н од", + "но д", + "ĠØ£ جÙĦ", + "Ġأج ÙĦ", + "Ġà¤ķ थ", + "éĥ½ ä¸į", + "Ġs ene", + "Ġse ne", + "Ġsen e", + "Ġp ÄĽ", + "è¨Ī åĬĥ", + "Ġа Ñĥд", + "Ġод ном", + "Ġодно м", + "Ġ ä¸ĩåħĥ", + "Ġä¸ĩ åħĥ", + "ĠÙĪ Ùħا", + "ĠÙĪÙħ ا", + "ĠÐĶ ÑĢÑĥг", + "èµ· ãģĵ", + "в аÑİÑĤÑģÑı", + "ва ÑİÑĤÑģÑı", + "ваÑİÑĤ ÑģÑı", + "л аÑĤÑĥ", + "ла ÑĤÑĥ", + "лаÑĤ Ñĥ", + "Ġ تÙĪÙĨ", + "Ġت ÙĪÙĨ", + "ĠتÙĪ ÙĨ", + "Ñī аÑı", + "Ñīа Ñı", + "ή λ", + "ĠÐŁ ÑĢа", + "ĠÐŁÑĢ Ð°", + "Ġاست رات", + "Ġاستر ات", + "ิà¸Ļ à¹Ģà¸Ķ", + "à¥įà¤Ĺ त", + "Âł з", + "Ġп олоÑĤ", + "Ġпо лоÑĤ", + "Ġпол оÑĤ", + "æ® ĸ", + "æ¡ Ĩ", + "ĠS istem", + "ĠSi stem", + "ĠSist em", + "Ġr uku", + "Ġru ku", + "Ġruk u", + "ãĥĥ ãĤ«ãĥ¼", + "ĠобÑıз ан", + "Ġkö ÅŁ", + "Ġad ını", + "Ø´Ùħ اÙĦÛĮ", + "na ÄįenÃŃ", + "naÄį enÃŃ", + "Ġ .ï¼ı", + "Ġ. ï¼ı", + "Ġ å®ĺ", + "Ġå® ĺ", + "Ġtoplum sal", + "èª ¤", + "ĠبÙĩ بÙĪØ¯", + "ÑģÑĤв еннаÑı", + "ÑģÑĤвен наÑı", + "ĠØ¢ Ù¾", + "ĠجÙĦ سÙĩ", + "ĠجÙĦس Ùĩ", + "ãĢĢ ï½", + "åĵ Ń", + "æīĢ å±ŀ", + "æĴ ®", + "ì¢ Ģ", + "Ġ ει", + "Ġε ι", + "ì¹ĺ 를", + "Ġ ê³¼ìłķ", + "Ġê³¼ ìłķ", + "u uml", + "uum l", + "uu ml", + "δ ά", + "Ġ زد", + "Ġز د", + "ìĽIJ ìĿĦ", + "ĠvÄĽ cÃŃ", + "ĠvÄĽc ÃŃ", + "د Ø«", + "Ġs anki", + "Ġsan ki", + "Ġsank i", + "åĥı æĺ¯", + "л аÑĢа", + "ла ÑĢа", + "ìĤ¬ ìĿ´", + "ãĤı ãĤĮãģŁ", + "ãĤıãĤĮ ãģŁ", + "ĠÄij ón", + "ĠÄijó n", + "åIJ¯ åĬ¨", + "Ġgi Ãłnh", + "ĠgiÃł nh", + "Ġkır mızı", + "Ø® Ùħ", + "æIJ į", + "åĪĩ ãĤĬ", + "ãĤµ ãĥ¼ãĥĵãĤ¹", + "Ùĩ ار", + "Ùĩا ر", + "ذ Ùĥر", + "о ÑĢоз", + "оÑĢ Ð¾Ð·", + "оÑĢо з", + "à¥Īà¤Ĥ ।ĊĊ", + "à¥Īà¤Ĥ। ĊĊ", + "à¥Īà¤Ĥ।Ċ Ċ", + "ĠíĻĪ íİĺìĿ´ì§Ģ", + "ĠÙĥ بÙĬرة", + "ĠÙĥبÙĬر Ø©", + "н ина", + "ни на", + "нин а", + "íķĺ ìļ°", + "å¼ķç͍ é¢ij次", + "ॠ®", + "ĠбаÑĤÑĮ кÑĸв", + "à¸Ł à¸Ńร", + "ี .", + "ìłĿ íĬ¸", + "éĺħ读 次æķ°", + "Ġit ir", + "Ġi tir", + "ÑĪ Ð¸Ð½", + "ÑĪи н", + "ĠV áºŃy", + "çĤ ®", + "ла год", + "лаг од", + "Ø´ÙĨ اس", + "á» IJ", + "ĠÑı год", + "Ġì¤ij ìķĻ", + "ر ÙĬØ·", + "رÙĬ Ø·", + "ĠìĪĺ íĸī", + "Ġ ä¸Ģèά", + "Ġä¸Ģ èά", + "ĠÑħви лин", + "ĠÐľÐ¾Ð¶ но", + "ĠнаÑĩ але", + "Ġод нов", + "Ġодно в", + "ĠÃľ ç", + "ÑĨион нÑĭй", + "Ġ ìļķ", + "Ġìļ ķ", + "æ¼ Ĥ", + "å² ³", + "ت دÙī", + "تد Ùī", + "κ ηÏĤ", + "κη ÏĤ", + "âĢĻ nda", + "âĢĻn da", + "ï¼IJ ï¼IJ", + "èª ī", + "é§ħ å¾ĴæŃ©", + "ĠÙģØ±Ø² ÙĨد", + "åħ¬ è·¯", + "α ÏĥίαÏĤ", + "αÏĥ ίαÏĤ", + "αÏĥία ÏĤ", + "าà¸ĵ าà¸Ī", + "ëij ¥", + "Ġ ÏĢοι", + "ĠÏĢ Î¿Î¹", + "ĠÏĢο ι", + "Ġب داÙĨ", + "Ġبد اÙĨ", + "к ап", + "ка п", + "ĠìŀĪ ëĬĶëį°", + "ĠìŀĪëĬĶ ëį°", + "ï¼Į æŃ¤", + "à¸Ľà¸£à¸°à¹Ĥย à¸Ĭà¸Ļ", + "ĠÚ©Ø´ÙĪØ± ÙĩاÛĮ", + "ุ ส", + "ãģ¹ ãģį", + "ĠÑģам Ñĭй", + "Ġп лÑı", + "Ġпл Ñı", + "Ġб ед", + "人 æīį", + "ส หร", + "ู à¸ķ", + "Ġkullan ımı", + "Ġkullanım ı", + "íķĻ ëħĦ", + "æ²» çĸĹ", + "ãĢĤ ä¸įè¿ĩ", + "ãĢĤä¸į è¿ĩ", + "æ£ ļ", + "ëĤ¨ ëıĦ", + "ĠØ¢ تش", + "Ïĩ ÎŃÏĤ", + "Ġfunk ci", + "Ġfunkc i", + "н ообÑĢаз", + "но обÑĢаз", + "à¥ĭ फ", + "Ġk aps", + "Ġka ps", + "Ġkap s", + "าษ à¸İ", + "( ع", + "ï¼Į åĬł", + "à¹Ĭ à¸ģ", + "ĠÙĩ Ø´", + "Ġدر ÙĪÙĨ", + "Ġ меÑĩ", + "Ġм еÑĩ", + "ĠпÑĢеж де", + "à¹Ī ย", + "Ġار شد", + "า à¹Ģล", + "æ¯Ķ è¼ĥ", + "Ġذ کر", + "Ġ æĿ¡", + "ĠæĿ ¡", + "Ð Ĭ", + "Ñĥ кÑĢаÑĹн", + "ÙĬÙĨ ات", + "ÙĬÙĨا ت", + "ì¢ ĭ", + "д иÑı", + "ди Ñı", + "ÏĦ Ïģι", + "ÏĦÏģ ι", + "ĠÐļ аз", + "ĠÐļа з", + "ÙĤ ÙĦاÙĦ", + "ÙĤÙĦ اÙĦ", + "_ ,,", + "_, ,", + "ĠÚĨ ت", + "ĠìĿ¼ ìłķ", + "ĠÐŁ ÑĢоÑĦ", + "ĠÐŁÑĢ Ð¾ÑĦ", + "ĠÐŁÑĢо ÑĦ", + "æ³ Ľ", + "Ġdruh ý", + "Ñĩ Ñĥк", + "ÑĩÑĥ к", + "l edik", + "le dik", + "led ik", + "ledi k", + "Ġhey ec", + "Ñĭ вал", + "Ñĭв ал", + "Ñĭва л", + "ĠD üny", + "ĠDün y", + "Ġ çĻº", + "ĠçĻ º", + "ĠpÅĻ Ã¡tel", + "β άλ", + "βά λ", + "Ġ غر", + "Ġغ ر", + "ëĭ¨ ì²´", + "ìĽ¨ ëĶĶìĭľ", + "ÑĢаÑī ениÑı", + "н ÑĨиклопед", + "Ġpodnik atel", + "Ġìĭł ìŀħ", + "ĠÙ쨱 Ø¢", + "и лиÑģÑı", + "или ÑģÑı", + "Ġol umlu", + "à¥įष मत", + "ĠÙħت خصص", + "й ом", + "ؤ اÙĦ", + "ĠÐĿ аÑĤ", + "ĠÐĿа ÑĤ", + "ìĺ¤ ëĬĶ", + "ĠMüdür lÃ¼ÄŁÃ¼", + "ĠH Ãłnh", + "ĠHÃł nh", + "ĠHÃłn h", + "Ġس ابÙĤ", + "ï¼ī çļĦ", + "ĠQu ý", + "lád ánÃŃ", + "ládá nÃŃ", + "Ġ ìļ´ëıĻ", + "Ġìļ´ ëıĻ", + "ĠÐĺ Ñħ", + "è« ¾", + "lıģ ının", + "lıģını n", + "lıģın ın", + "l il", + "li l", + "u Äį", + "ĠÑĩем пÑĸон", + "ÑĤ ож", + "ÑĤо ж", + "Ġ ä½Ľ", + "ни ÑĨе", + "ниÑĨ е", + "ĠпеÑĢв ого", + "Ġ Ñģом", + "ĠÑģ ом", + "ĠÑģо м", + "Ïĩ Ïİ", + "ÅĻ ik", + "ÅĻi k", + "иÑĤелÑĮ ÑģÑĤва", + "Ġİ ki", + "Ġask eri", + "Ġasker i", + "c isi", + "ci si", + "cis i", + "Ġjed nÃŃm", + "Ġjedn ÃŃm", + "Ġsta nice", + "Ġstan ice", + "èĤ¡ 票", + "à¸ľ ม", + "T ừ", + "Å¡ ak", + "ÏĦ ία", + "ÏĦί α", + "м ами", + "ма ми", + "ãģĮ åĩº", + "μο ί", + "м аÑĶ", + "ма ÑĶ", + "ëł¥ ìĿ´", + "ãĤĦ ãģ£ãģ¦", + "Ġ å¼µ", + "Ġå¼ µ", + "ØĮ Ċ", + "Ġ »Ċ", + "Ġ» Ċ", + "ا جات", + "اج ات", + "á½ ³", + "æĻĤ ãģ®", + "Ġп окол", + "Ġпо кол", + "Ġпок ол", + "ÑĸÑĤ еÑĤ", + "Ġíķ´ ê²°", + "Ġde dim", + "Ġded im", + "Ġdedi m", + "ĠÑĤ веÑĢд", + "Ġжен Ñīина", + "ĠженÑīин а", + "ед ини", + "еди ни", + "един и", + "ĠÙ¾ ÛĮÚ©", + "ĠÙ¾ÛĮ Ú©", + "iver site", + "ivers ite", + "iversit e", + "ĠآسÛĮ اب", + "ĠÑħаÑĢакÑĤеÑĢиÑģÑĤи ки", + "ĠØ£ÙĨ Ùĩا", + "ĠØ£ÙĨÙĩ ا", + "ĠÑĥкÑĢаÑĹн ÑģÑĮкоÑĹ", + "ĠاختÙĦ اÙģ", + "Ġاخت ÙĦاÙģ", + "Ġt ez", + "Ġte z", + "Ïģ εÏħ", + "Ïģε Ïħ", + "Ġkon umu", + "Ġkonu mu", + "Ġkonum u", + "ĠÑĤеÑħ нÑĸ", + "м Ñĸв", + "мÑĸ в", + "èĬ ¯", + "ĠÏĥ ελ", + "ĠÏĥε λ", + "Ä ¢", + "μ ιÏĥ", + "μι Ïĥ", + "ี à¹īĊ", + "ีà¹ī Ċ", + "Ġm ne", + "Ġmn e", + "ĠоÑĤв еÑĩ", + "ĠÎ ī", + "Ġ éĩİ", + "Ġéĩ İ", + "Ġg ấp", + "ĠпÑĢодÑĥк ÑĤÑĭ", + "ĠпÑĢодÑĥкÑĤ Ñĭ", + "ĠС ÑĢед", + "Ñĸл лÑı", + "à¸ļ à¸Ńà¸ģ", + "ĠtÅĻÃŃ dy", + "Ġth á»ķ", + "Ġthá» ķ", + "ãĥĩãĤ£ ãĤ¢", + "ÏĢοι η", + "ν ει", + "νε ι", + "æĪij们 çļĦ", + "Ġprofes yonel", + "ĠRa kou", + "ĠRak ou", + "Ġвид но", + "Ġz by", + "Ġzb y", + "ĠØŃ اÙĦÛĮ", + "ĠØŃاÙĦ ÛĮ", + "Ġ é£Ł", + "Ġé£ Ł", + "ĠL Ãłm", + "ĠÚ¯ ست", + "ĠТ ип", + "ĠТи п", + "θ ι", + "á vis", + "áv is", + "ÙIJ ب", + "åı¯èĥ½ æĢ§", + "ĠÑģем ей", + "ãĤī ãĤĮãģ¦ãģĦãĤĭ", + "ãĤīãĤĮ ãģ¦ãģĦãĤĭ", + "ãĤīãĤĮãģ¦ ãģĦãĤĭ", + "ìĥģ íĴĪ", + "Ġ οÏħ", + "Ġο Ïħ", + "Ġà¤ħà¤Ĺ स", + "о лом", + "ол ом", + "оло м", + "γ ον", + "γο ν", + "ĠÑģв ÑıÑī", + "ĠÑģвÑı Ñī", + "æĵ ¦", + "Ïĥ ÏĦηκε", + "ÏĥÏĦη κε", + "èĢħ çļĦ", + "- à¤ķ", + "ÑĤ ии", + "ÑĤи и", + "ĠвизнаÑĩ еннÑı", + "åıij åĩº", + "д аÑħ", + "да Ñħ", + "ĠмоÑĢ Ñı", + "Ġмо ÑĢÑı", + "æī¾ åΰ", + "ÙĦ ÙĪØ¨", + "ÙĦÙĪ Ø¨", + "èĬ Ļ", + "ĠÑĦак ÑĤ", + "æ¯į 亲", + "id lo", + "idl o", + "ĠSt ad", + "ĠSta d", + "Ñį й", + "ìĽIJ ìĿ´", + "à¤ı न", + "æķ´ 个", + "Ġf ık", + "ĠÙħ ات", + "ĠÙħا ت", + "ÏĢ Î¿Î½", + "ÏĢο ν", + "Ġê²½ 기ëıĦ", + "Ġ경기 ëıĦ", + "Ġα δ", + "Ġvz pom", + "Ġn á»ĵi", + "ĠÙĨÙĤ اط", + "ожд ение", + "Ġз алÑĸз", + "Ġзал Ñĸз", + "Ġr á»§i", + "è¾ °", + ".:.:.:.:.:.:.:.: .:.:.:.:.:.:.:.:", + "ĠM Ãľ", + "Ġk ari", + "Ġka ri", + "Ġkar i", + "ĠÑģ обÑĭ", + "ĠÑģо бÑĭ", + "ĠÑģоб Ñĭ", + "ìĸ´ ì§Ħ", + "ر ÙĬس", + "رÙĬ س", + "u bu", + "ub u", + "ĠØ® ÙĦÙģ", + "ĠØ®ÙĦ Ùģ", + "ظٹ Ø·", + "æĿ ī", + "Ġ æĻ®éĢļ", + "ĠæĻ® éĢļ", + "ĠÙħÙĪØ§Ø· ÙĨØ©", + "ĠÑģÑĤ анÑĥ", + "ĠÑģÑĤан Ñĥ", + "ĠÑģÑĤа нÑĥ", + "Ġê·¸ëħĢ ìĿĺ", + "ĠÙĦ Ùĥرة", + "ĠÙĦÙĥ رة", + "Ġo sm", + "Ġos m", + "ĠÑĥ ÑĢож", + "е га", + "ег а", + "Ġf else", + "Ġfe lse", + "Ġfel se", + "æĢĿ èĢĥ", + "ãĢĮ ãģĪ", + "Ġн овиÑħ", + "Ġнов иÑħ", + "Ġно виÑħ", + "๠IJ", + "ü ml", + "üm l", + "Ġíͼ íķ´", + "ìĿ¼ ë°ĺ", + "Ġtür ü", + "ĠмÑĸ ÑģÑĤÑĸ", + "ĠмÑĸÑģ ÑĤÑĸ", + "ĠмÑĸÑģÑĤ Ñĸ", + "Ġkažd é", + "ĠÙħس جد", + "ấ c", + "ĠÙģ Ú©ÛĮ", + "Ġ yasal", + "Ġy asal", + "Ġya sal", + "Ġyas al", + "å°± ç®Ĺ", + "ĠоблиÑĩ ÑĩÑı", + "ĠÙĦ دÙĬ", + "ĠÙĦد ÙĬ", + "ا بات", + "اب ات", + "ĠÑģп аÑģ", + "êµ° ìļĶ", + "Ġп ад", + "Ġпа д", + "Ġб ÑĢаÑĤ", + "ĠбÑĢа ÑĤ", + "éĩį 大", + "Ġdüzen lenen", + "G ün", + "Ġaplik ace", + "à¸Ń ห", + "Ġ çħ", + "Ġç ħ", + "ĠÑģоÑģÑĤ оиÑĤ", + "è¯Ħ ä»·", + "ĠD uy", + "ĠDu y", + "Ø· اÙĤ", + "ĠпÑĢид еÑĤÑģÑı", + "Ġt olik", + "Ġto lik", + "Ġtol ik", + "Ġob rov", + "Ġobr ov", + "ĠpÅĻip oj", + "Ġ Ä±ÅŁÄ±", + "Ġı ÅŁÄ±", + "Ú¯ ÙĪÛĮ", + "Ú¯ÙĪ ÛĮ", + "æľŁ å¾ħ", + "ип лом", + "Ġ ince", + "Ġin ce", + "Ġi nce", + "Ġinc e", + "ĠС об", + "ĠСо б", + "ен ÑĮÑİ", + "енÑĮ Ñİ", + "è§Ĵ èī²", + "Ġ à¸ķร", + "Ġà¸ķ ร", + "Ġb ại", + "Ġê°ĢëĬ¥ íķľ", + "ĠblÃŃ zk", + "Ġt ách", + "Ġtá ch", + "Ġtác h", + "Ġвид Ñĭ", + "Ġви дÑĭ", + "и Ñĩна", + "иÑĩ на", + "Ġvyž ad", + "ĠìĨIJ ìĿĦ", + "ĠÐĿ ÑĸмеÑĩ", + "ĠÐĿÑĸ меÑĩ", + "åŁº äºİ", + "ĠÐļ ÑĢи", + "Ġعز ÛĮز", + "t iler", + "til er", + "ti ler", + "tile r", + "е вÑĸ", + "ев Ñĸ", + "Ġmož nosti", + "Ġmožnost i", + "ب از", + "با ز", + "ĠìĤ¬ ë§Ŀ", + "Ġz ÅĻejmÄĽ", + "íĹ ¤", + "Ġürün leri", + "ĠÎł λη", + "а ки", + "ак и", + "ãĤĴ éĸĭ", + "a nou", + "an ou", + "ano u", + "åĽ½ ãģ®", + "ĠyaÅŁ anan", + "ĠyaÅŁan an", + "ĠÑģ евеÑĢ", + "Ġ æ©Ł", + "Ġæ© Ł", + "มาà¸ģ มาย", + "Ġíijľ íĺĦ", + "ร ส", + "Ġض ربÙĩ", + "Ġضر بÙĩ", + "ĠE vet", + "ĠEv et", + "ĠEve t", + "æĨ ¶", + "Ġد ÙĤÛĮÙĤ", + "ĠدÙĤÛĮ ÙĤ", + "Ġвозник нов", + "ìľł 머", + "Ġíijľ ìĭľ", + "ÛĮ Ø´ÙĨ", + "ÛĮØ´ ÙĨ", + "ãĥĹ ãĥ©", + "ÑĤ Ñİ", + "ÙĪ Ø³ÛĮ", + "ÙĪØ³ ÛĮ", + ") ìĿ´", + "è¯ģ æĺİ", + "ãģ§ãģį ãģ¾ãģĻ", + "ìĪĺ ìĿĺ", + "çĸ Ĩ", + "ĠÙħ ÙģÙĩÙĪÙħ", + "оÑĩ аÑĤкÑĥ", + "ाल à¤ķ", + "æ¡ Ĥ", + "ĠоÑħ оÑĢони", + "ĠارزÛĮ ابÛĮ", + "Ġìµľ ëĮĢ", + "Ġtho ải", + "ĠЦенÑĤ ÑĢалÑĮ", + "Ġ çķĻ", + "Ġçķ Ļ", + "à¸Ľà¸£à¸° à¹Ģà¸łà¸Ĺ", + "æµ· å¤ĸ", + "ĠÅŀ u", + "íĻľ ëıĻ", + "ĠdvÄĽ ma", + "istrov stvÃŃ", + "Ġarac ılıģıyla", + "Ġtr á»Ļn", + "» :", + "íĭ ±", + "ĠÙĦÛĮ Ú¯", + ". Ðļ", + "ĠÙħÙĤ اÛĮسÙĩ", + "Ġв мÑĸ", + "ر ÙĪØ¨", + "رÙĪ Ø¨", + "ĠاÙĦ Ø´Ùħ", + "ĠاÙĦØ´ Ùħ", + "Ġden nÄĽ", + "Ġdenn ÄĽ", + "Ñĥ Ñĩа", + "ÑĥÑĩ а", + "åħ ¹", + "Ñī им", + "Ñīи м", + "ĠíĬ¹ íŀĪ", + "ĠاستاÙĨد ارد", + "à¥Ģ ध", + "ãĤ¸ ãĤ¢", + "à¹ĩ à¹ĩ", + "иÑģ Ñģ", + "Ġkazan ç", + "ĠzÃŃsk al", + "åĽŀ æĿ¥", + "Ġп ÑıÑĤÑĮ", + "ĠпÑıÑĤ ÑĮ", + "ĠÄij ãi", + "ĠÄijã i", + "Ġ ÙĪØ±Ø¯", + "ĠÙĪ Ø±Ø¯", + "ĠÙĪØ± د", + "Ġ ìķķ", + "Ġìķ ķ", + "ุ à¸Ĺร", + "ุà¸Ĺ ร", + "åĬ¨ çī©", + "Ġp ublik", + "Ġpub lik", + "Ġpubli k", + "æĪIJ æľ¬", + "æĪIJ åijĺ", + "ãĤ¤ ãĤ¯", + "شر ÙĥØ©", + "á¿Ĩ ÏĤ", + "Ġy ola", + "Ġyo la", + "Ġyol a", + "üyor uz", + "Ġк ÑĥÑĢи", + "ĠкÑĥÑĢ Ð¸", + "ĠкÑĥ ÑĢи", + "ĠпоÑħ ож", + "Ġìłľ ê°Ģ", + "िय त", + "ائ ÙĦØ©", + "ائÙĦ Ø©", + "Ġ ãģ¾", + "़ à¥ĩà¤Ĥ", + "़à¥ĩ à¤Ĥ", + "ÑģÑĮ кими", + "ÑģÑĮк ими", + "ÑģÑĮким и", + "âĢľ ä½ł", + "imiz de", + "ìµľ ìĭł", + "Ạ¬", + "è Ł", + "à¸Ħ รà¸Ńà¸ļ", + "à¸Ħร à¸Ńà¸ļ", + "ãĢĢ ãĢĢãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢ ãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢãĢĢãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "ت غ", + "ĠVÅ¡ ech", + "à¸±à¸Ľ à¸Ķาห", + "Ġa td", + "Ġat d", + "в оÑİ", + "во Ñİ", + "Ġyap ım", + "Ġyapı m", + "olog ické", + "ologic ké", + "Ġп лен", + "Ġпл ен", + "Ġlaz ım", + "r ung", + "ru ng", + "run g", + "ìĦľ ê´Ģ", + "Ġji ný", + "Ġjin ý", + "Ġtr òn", + "Ġtrò n", + "ĠполÑĸÑĤи ки", + "ا ÙĥÙħ", + "اÙĥ Ùħ", + "دÛĮ گر", + "à¥Īà¤Ĥ .Ċ", + "à¥Īà¤Ĥ. Ċ", + "Ġ اÙĩد", + "Ġا Ùĩد", + "ĠاÙĩ د", + "Ġ ãĥį", + "Ġãĥ į", + "ĠпÑĢодÑĥк ÑĤов", + "ĠпÑĢодÑĥкÑĤ ов", + "æĤ Ł", + "ĠpÅĻÃŃpad ech", + "ĠzaÄį ala", + "ĠzaÄįal a", + "åħ¥ ãĤĮ", + "ĠÑĢÑĸв нÑĸ", + "æĦŁ æĥħ", + "ĠΧ α", + "ì £½", + "ì£ ½", + "ิà¸Ī ารà¸ĵ", + "Âł б", + "Ñĸ ÑĹв", + "ÑĸÑĹ Ð²", + "ب Ø´", + "çļĦ éĹ®é¢ĺ", + "Ġza stup", + "Ġzast up", + "볤 ìļĶ", + "ãģ§ãģĻ ãģŃ", + "âĢĮ داÙĨ", + "âĢĮد اÙĨ", + "ï¼Į æĤ¨", + "Ġu vÄĽdom", + "ãģ¦ ãĤĭ", + "ìĤ¬ ëŀĮ", + "l un", + "lu n", + "éĽĨ åIJĪ", + "ë§ ¹", + "Ġž id", + "Ġži d", + "ठĬ", + "Ġt rp", + "Ġtr p", + "л ениÑħ", + "лен иÑħ", + "ле ниÑħ", + "_ __", + "__ _", + "Ðľ Ðŀ", + "å¼ ĭ", + "λÎŃ Î¿Î½", + "ĠÄij òi", + "Ġк ÑĢок", + "lay ıcı", + "ì¶ľìŀ¥ ë§ĪìĤ¬ì§Ģ", + "åij Ī", + "éľ ŀ", + "Ġпо глÑıд", + "Ġпог лÑıд", + "ت رÙĥ", + "تر Ùĥ", + "ĠتÙģ Ø§ÙĪØª", + "Ġ å®®", + "Ġå® ®", + "ĠدÙĪØ± بÛĮÙĨ", + "æĶ¾ åľ¨", + "ĠÑģлÑĥÑĩа ев", + "ĠÑģлÑĥÑĩае в", + "ĠÏħÏĢ Î·Ïģε", + "ë§ ŀ", + "ãģĻ ãģĻ", + "ê²ł ëĭ¤", + "ราย à¸ģาร", + "ĠÏĢ Ïģιν", + "ĠÑģ меÑĪ", + "ĠÑģм еÑĪ", + "å§ ī", + "Ġvýsled ky", + "Ġpot vr", + "åıij è¡Į", + "Ġt úi", + "Ġtú i", + "ĠìĤ¬ ëĿ¼", + "ç«Ļ åľ¨", + "Ġja ký", + "Ġjak ý", + "Ġ à¸ļาà¸ĩ", + "Ġà¸ļ าà¸ĩ", + "Ġdik kate", + "Ġdikkat e", + "Ġدر Ø¢Ùħد", + "æİĴ åIJį", + "r álnÃŃ", + "rál nÃŃ", + "ê³¼ ìĿĺ", + "ä½ µ", + "о лаг", + "ол аг", + "ола г", + "is iyle", + "isi yle", + "Ġ æ½", + "Ġæ ½", + "Ġ तम", + "Ġत म", + "Ġd ij", + "Ġdi j", + "Ġnh ánh", + "ĠR ek", + "ĠRe k", + "设 æĸ½", + "ĠpodmÃŃn ek", + "å¹¶ ä¸į", + "к ÑĥÑĤ", + "кÑĥ ÑĤ", + "Ġê³ł 볤", + "çļĦ å£°éŁ³", + "æĪĺ äºī", + "д аÑı", + "да Ñı", + "Ġê´Ģ ìĭ¬", + "ĠÑĦÑĸн анÑģ", + "ĠK öy", + "ĠKö y", + "Ġж ал", + "ĠÑģлÑĥж би", + "м ена", + "мен а", + "ме на", + "ت ÙĬار", + "تÙĬ ار", + "ĠÑĩем пион", + "ÏĢ Î¹Ïĥ", + "ÏĢι Ïĥ", + "landır ma", + "mak tan", + "makta n", + "makt an", + "Ġ 丶", + "Ġä¸ ¶", + "à¹Ī à¸Ńส", + "à¹Īà¸Ń ส", + "ĠmÃ¼ÅŁ teri", + "ĠmÃ¼ÅŁter i", + "Ġص ÙĨد", + "ĠصÙĨ د", + "Ġet mesi", + "Ġetm esi", + "Ġetme si", + "Ġп оÑĢÑĤ", + "ĠпоÑĢ ÑĤ", + "ν ονÏĦαι", + "νον ÏĦαι", + "Ġ ãħĭãħĭ", + "ĠK AR", + "ĠKA R", + "Ġ uch", + "Ġu ch", + "Ġuc h", + "ĠØ® ÙĦÙĤ", + "ĠØ®ÙĦ ÙĤ", + "าษà¸İ ร", + "æŃ ¡", + "Ġи мени", + "Ġим ени", + "Ġиме ни", + "ãģł ãģijãģ©", + "ãģłãģij ãģ©", + "Ġìĭ¤ ìĭľ", + "ÏĥÏī ÏĢ", + "Ġ ì£", + "Ġì £", + "t ÄĽÅ¾", + "tÄĽ ž", + "Ġözel likleri", + "Ġözellik leri", + "Ġözellikle ri", + "Ġب Ù¾", + "Ġиз обÑĢаж", + "ÙĬÙħ ÙĥÙĨ", + "Ġ ãĥĶ", + "Ġãĥ Ķ", + "ĠÐĶ Ð¸Ð²", + "ĠÐĶи в", + "ĠØ¥ ÙĬ", + "Ùĥ ÙĬÙĦ", + "ÙĥÙĬ ÙĦ", + "ĠÅŁ ik", + "ĠÅŁi k", + "Ġà¤Ĩ à¤ĸ", + "lar ınızı", + "ların ızı", + "larını zı", + "larınız ı", + "ĠвÑĸд ÑĢÑĸз", + "ĠÑĢоб оÑĤа", + "ĠÑĢобоÑĤ а", + "Ġta rif", + "Ġtar if", + "Ġ اÙĪØª", + "Ġا ÙĪØª", + "ĠاÙĪ Øª", + "ın ma", + "é£Ł ãģ¹", + "Ġuzav ÅĻ", + "ë£ ¸", + "çĽij çĿ£", + "Ġ: ï¼¼", + "θ Ïħν", + "θÏħ ν", + "à¸Ķ ร", + "a larından", + "alar ından", + "aların dan", + "alarında n", + "èĩª æĭį", + "Ġro ÄįnÃŃ", + "ाà¤ĩ व", + "Ġ ÙĥÙĪØ±", + "ĠÙĥ ÙĪØ±", + "ĠÏĦ αιν", + "ĠÏĦα ιν", + "ĠÑĸн див", + "r ve", + "rv e", + "ĠνεÏĨ ÏİÏĥειÏĤ", + "Ġb á»ijn", + "Ġbá»ij n", + "Ġ å¿«", + "Ġå¿ «", + "ĠÑģ олÑĮ", + "ĠÑģо лÑĮ", + "ĠÑģол ÑĮ", + "li ÄŁinde", + "liÄŁi nde", + "liÄŁ inde", + "liÄŁin de", + "िन à¤Ł", + "a htar", + "ah tar", + "Ġneb ezpeÄį", + "æĹ¢ çĦ¶", + "ĠëĮĢ ìłĦ", + "ĠÙĨÚ¯Ùĩد ارÛĮ", + "ĠzÃŃsk at", + "Ġнали Ñĩие", + "ĠналиÑĩи е", + "Ġ aks", + "Ġa ks", + "Ġak s", + "ï¼ī ãĢĤĊĊ", + "ï¼īãĢĤ ĊĊ", + "ï¼īãĢĤĊ Ċ", + "Ġrod iny", + "Ġrodin y", + "Ġrodi ny", + "Ġза ÑħÑĸд", + "ĠзаÑħ Ñĸд", + "å¾® ç¬ij", + "ÂłÐĶ Ð°", + "r adu", + "ra du", + "rad u", + "ī nh", + "p les", + "pl es", + "ple s", + "ĠK ons", + "ĠKon s", + "ĠKo ns", + "ิ à¹Ĥล", + "ิà¹Ĥ ล", + "ĠاÙĦ ÙĪØµ", + "ĠاÙĦÙĪ Øµ", + "åIJ¬ åΰ", + "ĠÑģпоÑĢ ÑĤив", + "ĠÑģ айÑĤе", + "ĠÑģай ÑĤе", + "Ġ اظ", + "Ġا ظ", + "ĠØ§Ø ¸", + "lar ındaki", + "ların daki", + "larında ki", + "Ġtá»ķ n", + "ÐĿ ÐĨ", + "Ġned ost", + "ĠÑĤоÑĢ Ð³Ñĸв", + "Ġ اÛĮت", + "Ġا ÛĮت", + "ĠاÛĮ ت", + "Ġاختص اص", + "ĠÃľ y", + "ĠS adece", + "ĠSad ece", + "ĠÙħØ® رÙĪØ·", + "Ä ģn", + "Äģ n", + "ç esi", + "çe si", + "Ġ çĬ", + "Ġç Ĭ", + "ãĤĤ ãģ£ãģ¨", + "Ġ éŁĵ", + "ĠéŁ ĵ", + "èµ ĸ", + "ĠполÑĥÑĩ ениÑı", + "Ġë ĺ", + "âĢĻ ÑĹ", + "b ÃŃr", + "bÃŃ r", + "Ġб ÑĸблÑĸ", + "ĠD á»±", + "же неÑĢ", + "жен еÑĢ", + "ç½ij åĪĬ", + "Ġल à¥ľà¤ķ", + "ĠÑĥÑĩ нÑĸв", + "èĪ °", + "ĠÃĸÄŁ ren", + "Ġ ola", + "Ġo la", + "Ġol a", + "Ġ। âĢĿĊĊ", + "ระ à¹Ģà¸ļ", + "á½ ²", + "Ġ رز", + "Ġر ز", + "е и", + "еР¸", + "Ñı Ñĩи", + "ÑıÑĩ и", + "ØŃ ب", + "æĴ ¤", + "ãģ¾ãģŁ ãģ¯", + "б ина", + "би на", + "бин а", + "ĠÎł εÏģ", + "ĠоÑĤноÑģ иÑĤÑģÑı", + "åīį çļĦ", + "Ġ šť", + "ĠÅ¡ Å¥", + "Ġyıl da", + "Ġyı lda", + ": ::::|", + ":: :::|", + ":::: :|", + "::: ::|", + "::::: |", + "us til", + "ust il", + "اÙĦ Ø¥", + "ĠsouÄįas né", + "ĠÙĨÛĮ رÙĪÛĮ", + "ĠÙĨÛĮر ÙĪÛĮ", + "ĠÙĨÛĮرÙĪ ÛĮ", + "ÑĩеÑģ кое", + "Ñĩе Ñģкое", + "ظ Ùģ", + "ĠÙ¾ÛĮØ´ ÛĮÙĨÙĩ", + "Ġع Ù쨴", + "Ġrost lin", + "ç½ijåĪĬ ä¸ĭ载次æķ°", + "ĠпÑĢигоÑĤов иÑĤÑĮ", + "ãĥ Į", + "ĠÙĪ Ùħع", + "ĠÙĪÙħ ع", + "Ġb ecer", + "Ġbe cer", + "Ġbec er", + "Ġ ãĤ±", + "ĠãĤ ±", + "Ïĩ ήÏĤ", + "Ïĩή ÏĤ", + "о ÑģÑĤÑĥп", + "оÑģÑĤ Ñĥп", + "Ġë°ľ 매", + "Ñĸй ного", + "Ñĸйно го", + "Ġh rd", + "Ġhr d", + "ĠпÑĢепаÑĢа ÑĤÑĭ", + "ĠÙģ Ø±Ø¶", + "ĠÙ쨱 ض", + "ĠTy to", + "Ġ кÑĢаÑĹн", + "ĠкÑĢаÑĹ Ð½", + "Ġز اد", + "Ġikt idar", + "ì§ ĵ", + "Ùij ر", + "ÑĢÑı дÑĥ", + "ÑĢÑıд Ñĥ", + "к Ñĸй", + "кÑĸ й", + "âĶ £", + "Ġко жи", + "Ġкож и", + "Ġت ازÙĩ", + "Ġتا زÙĩ", + "o bec", + "ob ec", + "obe c", + "in ae", + "ina e", + "Ġvyj ád", + "Ġ رÙģØªÙĩ", + "Ġر ÙģØªÙĩ", + "ĠرÙģØª Ùĩ", + "ĠرÙģ ØªÙĩ", + "Щ о", + "ĠBy lo", + "ĠByl o", + "оÑĤ в", + "ĠденÑĮ ги", + "é§ Ĩ", + "Ġма ÑĪин", + "ĠмаÑĪ Ð¸Ð½", + "ĠмаÑĪи н", + "ĠØ£ ج", + "ì´Ī ëĵ±íķĻêµIJ", + "dı ģında", + "dıģı nda", + "dıģ ında", + "б аÑģ", + "ба Ñģ", + "Ġ æł¹", + "Ġæł ¹", + "ÎijÎĿ Τ", + "ÙĴ ØŃ", + "Ġjejich ž", + "ìĹIJìĦľ ìĿĺ", + "Ġад же", + "Ġì ı", + "Ïĥ οÏħ", + "Ïĥο Ïħ", + "et leri", + "etler i", + "Ġبعد ÛĮ", + "Ġبع دÛĮ", + "ĠìŀIJëıĻ ì°¨", + "ิà¸į à¸į", + "Ġt isk", + "Ġti sk", + "ãĥ¼ ãĤ¹ãĥĪ", + "ãĥ¼ãĤ¹ ãĥĪ", + "Ġमत लब", + "ê³Ħ íļį", + "ãĤ¦ ãĥĪ", + "Ġ à¹Ģมà¸ķร", + "Ġà¹Ģม à¸ķร", + "Ġop siyon", + "Ġops iyon", + "ĠÑĢав но", + "ĠبÛĮ ÙħÙĩ", + "ĠبÛĮÙħ Ùĩ", + "Ġ먼 ìłĢ", + "иÑĤелÑĮ нÑĭм", + "ĠнÑĸ би", + "Ġде ÑģÑıÑĤ", + "ĠдеÑģÑı ÑĤ", + "ĠÑģиÑĤÑĥа ÑĨии", + "еÑĢ ÑĪе", + "еÑĢÑĪ Ðµ", + "Ä ¾", + "ุ à¸ķร", + "ุà¸ķ ร", + "Ġyönet imi", + "Ġyönetim i", + "éIJ ĺ", + "ĠÙħÛĮ تÙĪØ§ÙĨ", + "Ġز ÙĨدÙĩ", + "ĠزÙĨ دÙĩ", + "ĠزÙĨد Ùĩ", + "ãĥŃ ãĥ³", + "ĠK BS", + "ĠKB S", + "ìĦľ ë¹ĦìĬ¤", + "ï» ł", + "eck ého", + "ecké ho", + "ĠÙĤابÙĦ ÛĮت", + "ĠÙĤاب ÙĦÛĮت", + "ãĢĤ ä»Ĭ", + "ÃŃ nÄĽ", + "ÃŃn ÄĽ", + "ĠÑģм ог", + "ĠÑģл ÑĭÑĪ", + "ÙĴ Ùģ", + "po ÅĻád", + "елÑĮ но", + "Ġεί Ïĩαν", + "-ÐŁ еÑĤеÑĢб", + "ĠCh iến", + "ĠChi ến", + "é ry", + "ér y", + "ĠÑĸн ÑģÑĤиÑĤÑĥÑĤ", + "ç»Ĩ èĥŀ", + "Ñĭ ÑŁN", + "Ġv ua", + "Ġvu a", + "Ġà¤ħ श", + "ÑĢоÑģ ÑĤо", + "ÑĢоÑģÑĤ о", + "Ġvů Äįi", + "ë ¿IJ", + "Ġl iá»ĩt", + "Ġíķ µ", + "Ġ اÙ쨱", + "Ġا Ù쨱", + "ĠاÙģ Ø±", + "ĠTek nik", + "Ġr oli", + "Ġro li", + "Ġrol i", + "Ġпоп ÑĭÑĤ", + "аÑĤ кÑĸв", + "Ġün iversit", + "аÑĤ оÑĢÑĭ", + "аÑĤоÑĢ Ñĭ", + "аÑĤо ÑĢÑĭ", + "ÑİÑīиÑħ ÑģÑı", + "Ġت ض", + "лÑİ ÑĩаеÑĤÑģÑı", + "лÑİÑĩ аеÑĤÑģÑı", + "лÑİÑĩа еÑĤÑģÑı", + "Ġíĸī ë³µ", + "Ġayrıntı lı", + "ĠкиÑĢ Ð¿", + "æĭ ¼", + "ëģ Ķ", + "л аÑĤа", + "ла ÑĤа", + "лаÑĤ а", + "Ġkho án", + "Ġhâl â", + "Ïĥ Ïħ", + "ог лаÑģ", + "æİ¥ çĿĢ", + "éĿ© åij½", + "Ġp ÅĻeb", + "ĠpÅĻ eb", + "ĠpÅĻe b", + "à¹Ģà¸ī ล", + "ĠاÙĦÙħÙĦ ÙĦÛĮ", + "åł Ĩ", + "íı IJ", + "à¸ķล à¸Ńà¸Ķ", + "° С", + "ìĤ¬ ëŀij", + "Ġг иб", + "ë²Ī 째", + "æĶ¹ åıĺ", + "表 çݰ", + "и ÑĩеÑģким", + "иÑĩеÑģ ким", + "иÑĩеÑģки м", + "สม à¹Ģà¸Ķ", + "å±ħ æ°ij", + " Ľ", + "ĠìķĦìĿ´ ëĶĶ", + "ĠмеждÑĥ наÑĢод", + "Ġy em", + "Ġye m", + "Ġm ül", + "Ġmü l", + "Ġا ÛĮست", + "ĠاÛĮ ست", + "Ġ ãĥ´", + "Ġãĥ ´", + "ัà¸Ļ à¹Ħà¸Ķ", + "à¥Ģ ण", + "åħ¶ å®ŀ", + "Ġgel enek", + "Ġgele nek", + "Ġgelen ek", + "ë¶ģ ëıĦ", + "à¹ī าà¸ķ", + "à¹īา à¸ķ", + "Ġ ìī¬", + "Ġìī ¬", + "Ġ ÏĢÎŃ", + "ĠÏĢ ÎŃ", + "ĠÙĥ اÙħÙĦ", + "ĠÙĥاÙħ ÙĦ", + "Ġتع ÙħÛĮر", + "è¨ ´", + "ë¹ Ļ", + "iy im", + "iyi m", + "å° ¿", + "éĤ£ æł·", + "êµŃ ìĿĺ", + "ãģĹãģ¦ ãģĬãĤĬ", + "Ġ niž", + "Ġn iž", + "Ġni ž", + "Ġκ ον", + "Ġκο ν", + "à¹Ī าà¸Ń", + "à¹Īา à¸Ń", + "Ġ γε", + "Ġγ ε", + "ĠС евеÑĢ", + "edi álnÃŃ", + "ãģŁãģ¡ ãģ®", + "m ayacak", + "may acak", + "maya cak", + "Ñ Ļ", + "ĠÑĥ гл", + "ĠÑĥг л", + "Ġk apas", + "Ġka pas", + "Ġkap as", + "Ñĥв алиÑģÑı", + "Ñĥва лиÑģÑı", + "Ñĥвали ÑģÑı", + "ĠмеÑģÑı ÑĨа", + "á» ¯u", + "ữ u", + "ิ ลล", + "ิล ล", + "ãĤĪãĤĬ ãĤĤ", + "à¥ĩ ण", + "à¥ĩठ£", + "Ġ 客", + "Ġå® ¢", + "ĠdeÄŁ erli", + "ĠdeÄŁer li", + "ÙĪ Ø§Ø²", + "ÙĪØ§ ز", + "ี à¸Ńย", + "ีà¸Ń ย", + "Ġ åıĪ", + "Ġåı Ī", + "Ġ à¸Ķร", + "Ġà¸Ķ ร", + "ĠÙĨ اب", + "ĠتÙĦÙĪÛĮزÛĮ ÙĪÙĨ", + "Ġol anlar", + "Ġolan lar", + "ä¼ĺ ç§Ģ", + "Ùĥ اÙĦ", + "ĠдеÑģÑı ÑĤи", + "ĠдеÑģÑıÑĤ и", + "m án", + "má n", + "ĠÑĢ Ð°Ð½ÑĮ", + "ĠÑĢа нÑĮ", + "ĠÑĢан ÑĮ", + "Ġìłľ ì¶ľ", + "è³ ¢", + "а бо", + "аб о", + "Ġtechn ik", + "Ġtech nik", + "ĠK iá»ĥm", + "ĠKi á»ĥm", + "t eki", + "te ki", + "tek i", + "á ¹", + "Ġm nÄĽ", + "Ġmn ÄĽ", + "Ġê³µ ê°Ħ", + "ĠM ek", + "ĠMe k", + "Ġاع تÙħاد", + "à¹Į à¹Ħà¸Ķ", + "ε ÏģÏĮ", + "εÏģ ÏĮ", + "ĠÑĥд аÑĢ", + "ĠÑĥда ÑĢ", + "оÑĩ ÑĮ", + "æ¦Ĥ 念", + "ÑĢ Ð°Ð»", + "ÑĢаР»", + "ÑĢа л", + "алÑĮ нÑĭми", + "алÑĮнÑĭм и", + "à¥ģर स", + "r áci", + "rá ci", + "Ġ ÙĤÙĪÙĦ", + "ĠÙĤ ÙĪÙĦ", + "Ġद व", + "ĠпÑĢав да", + "Ġ å¿ħ", + "Ġå¿ ħ", + "Ġdos ud", + "нÑĥ ÑĤÑĮÑģÑı", + "нÑĥÑĤÑĮ ÑģÑı", + "N Äĥm", + "à¸ĺ à¸Ļ", + "Ġdok un", + "Ġ åľ¨çº¿", + "Ġåľ¨ 线", + "ู à¹Ħ", + "ụ y", + "Ġн овÑĭÑħ", + "Ġнов ÑĭÑħ", + "Ġmez un", + "ĠC ần", + "à¸ģาร à¸ŀ", + "ĠìĺĪ ìłķ", + "Ïĥ ή", + "à¹Īà¸Ļ à¹Ģà¸ģม", + "ĠÙĪ Ø§ÙĦس", + "ĠÙĪØ§ÙĦ س", + "ĠÙĪØ§ ÙĦس", + "ãĥ³ ãĥĨãĤ£", + "ãĥ³ãĥĨ ãĤ£", + "çľĭ è§ģ", + "Ġس اÙĦÙħ", + "ĠساÙĦ Ùħ", + "ĠбагаÑĤÑĮ оÑħ", + "ĠÄij Ãłi", + "Ġد ستÛĮ", + "Ġدست ÛĮ", + "Ġدس تÛĮ", + "à¸ŀ à¸Ń", + "еп ÑĤи", + "ĠìłĦ íĻĶ", + "æĻĤ ãģ«", + "ĠSe znam", + "ĠSez nam", + "мÑĸ нÑĥ", + "мÑĸн Ñĥ", + "; ?#", + "à¥Ģ सर", + "à¥Ģस र", + "ĠÚĨ ÛĮست", + "νο ια", + "νοι α", + "ั à¸Ļà¸Ń", + "ัà¸Ļ à¸Ń", + "Ġ à¸Ħำ", + "Ġà¸Ħ ำ", + "Ġë³´ íĺ¸", + "Ġid dia", + "Ġiddi a", + "Ġβ ιβ", + "é«ĺ ä¸Ń", + "Ù ¨", + "ÐĴ аж", + "ĠиÑģп олн", + "ÑĪ ÑĤов", + "ÑĪÑĤ ов", + "ĠT aÅŁ", + "ĠTa ÅŁ", + "ìĽ ħ", + "åĬ ¹", + "Ġ åıĥ", + "Ġåı ĥ", + "Ġprost oru", + "Ġprostor u", + "ĠÑģп ад", + "е ÑĢина", + "еÑĢ Ð¸Ð½Ð°", + "еÑĢи на", + "еÑĢин а", + "ĠpÅĻek lad", + "ĠpÅĻe klad", + "Å¡ ov", + "ĠÙģ ÙĩÙħ", + "ĠÙģÙĩ Ùħ", + "æĬ ij", + "Ġابت دا", + "Ġابتد ا", + "ãĤĴ ãģĬ", + "l ikler", + "lik ler", + "likle r", + "ĠÙħ اÙĥ", + "ĠÙħا Ùĥ", + "Ġko nut", + "Ġkon ut", + "Ġkonu t", + "ĠداÙĨØ´ جÙĪÛĮ", + "Ġоп ÑĤим", + "Ġб Ñĥма", + "ĠбÑĥ ма", + "ĠлÑİд Ñıм", + "Ġл Ñĸка", + "ĠлÑĸ ка", + "ĠлÑĸк а", + "ĠÑĢоз повÑĸд", + "ĠÑĢозп овÑĸд", + "ĠÑĢозпов Ñĸд", + "nes enÃŃ", + "Ġ à¸łà¸²à¸ŀ", + "Ġà¸ł าà¸ŀ", + "и Ñĩний", + "иÑĩ ний", + "ا Ø·ÙĦ", + "اط ÙĦ", + "Ñİ Ñīими", + "ÑİÑī ими", + "ÑİÑīим и", + "ãģı ãģ¨", + "éŃ ¯", + "ĠجÙĨ سÛĮ", + "Ðĺ Т", + "र ल", + "ĠÚ©ÙĪØ¯ Ú©", + "о лиÑĤ", + "ол иÑĤ", + "оли ÑĤ", + "ĠÑģÑĤÑĢÑĥкÑĤÑĥ ÑĢ", + "ve kili", + "vek ili", + "Ġब य", + "Ġgel miÅŁ", + "िर फ", + "Ġнай кÑĢа", + "ĠÐĶж он", + "Ġ ãĥĹãĥŃ", + "ĠãĥĹ ãĥŃ", + "ĠyaÅŁ lı", + "Ġkar Ä±ÅŁtır", + "ĠkarÄ±ÅŁ tır", + "ĠvÄĽtÅ¡ inou", + "Ġvaz geç", + "à¹ī าà¸Ħ", + "à¹īา à¸Ħ", + "lendir me", + "Ġ ç¨ĭ", + "Ġç¨ ĭ", + "说 è¯Ŀ", + "ĠíķĦìļĶ íķľ", + "aÅĻ ilo", + "Ġle žÃŃ", + "ĠAmer ikan", + "ĠAmerika n", + "ĠAmerik an", + "ãĤĦ ãģĻ", + "va jÃŃcÃŃ", + "vajÃŃ cÃŃ", + "ÐĿ Я", + "ĠìĹĦ ë§Ī", + "Ġ åĥ", + "Ġå ĥ", + "r ál", + "rá l", + "Ġç ay", + "Ġça y", + "tu ÄŁ", + "ุà¸į าà¸ķ", + "ĠÑģ лив", + "ĠÑģл ив", + "ν οÏħ", + "νο Ïħ", + "ĠO v", + "ĠC HP", + "ĠCH P", + "ĠZe mÄĽ", + "ĠZem ÄĽ", + "ĠÄįesk ý", + "ĠÄįe ský", + "ĠTh ánh", + "иÑĤелÑĮ ноÑģÑĤÑĮ", + "иÑĤелÑĮно ÑģÑĤÑĮ", + "æĦı ä¹ī", + "à¥įरम ण", + "Ġди амеÑĤ", + "Ġk lin", + "Ġkl in", + "Ġkli n", + "Ġ کرÛĮ", + "ĠÚ© رÛĮ", + "Ġکر ÛĮ", + "ãģ§ãģ¯ ãģªãģı", + "飯 åºĹ", + "Ġk ênh", + "Ġkê nh", + "ĠÑĢанÑĮ ÑĪе", + "ãĤĴ ãģĹãģŁ", + "ĠпÑĢи боÑĢ", + "ĠпÑĢиб оÑĢ", + "Ġà¤ĸ तर", + "Ġ yu", + "Ġy u", + "é§ IJ", + "ĠÑĢ Ð°Ð±Ð¾", + "ĠÑĢа бо", + "ĠÑĢаб о", + "ĠС ÐłÐ¡Ðł", + "èĬ ¬", + "ž ila", + "ži la", + "žil a", + "еÑĢ ÑĤа", + "еÑĢÑĤ а", + "и ÑģÑĤÑĢа", + "иÑģ ÑĤÑĢа", + "иÑģÑĤ ÑĢа", + "Ġкни ги", + "ĠFranc ie", + "ĠFran cie", + "ĠÚĺ Ø§Ù¾", + "ĠÎļ οÏħ", + "ĠÎļο Ïħ", + "ัว à¹Ģà¸Ńà¸ĩ", + "Ġl ắng", + "Ġ нами", + "Ġн ами", + "Ġна ми", + "Ġнам и", + "Ġпод ой", + "д ÑĢом", + "дÑĢ Ð¾Ð¼", + "o bus", + "ob us", + "ÐĴ Ñĸн", + "Ġst alo", + "Ġsta lo", + "Ġstal o", + "Ġà¤ı à¤ľ", + "ĠL inh", + "ĠLin h", + "ĠLi nh", + "ebilir iz", + "Ġзав ÑĤÑĢа", + "μ εÏģο", + "με Ïģο", + "μεÏģ ο", + "Ġ ÎŃν", + "ĠÎŃ Î½", + "ÑıÑĤ но", + "Ġд оÑĢож", + "Ġдо ÑĢож", + "ĠдоÑĢ Ð¾Ð¶", + "åıĤ çħ§", + "Ïĥ ιο", + "Ïĥι ο", + "à¹ī à¹Ģà¸ģ", + "a ných", + "an ých", + "aný ch", + "ç· ł", + "Ġ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢãĢĢ", + "ĠãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢãĢĢ ãĢĢ", + "åĬĽ çļĦ", + "ĠS ır", + "ĠSı r", + "Ġ ì§ĢëıĦ", + "Ġì§Ģ ëıĦ", + "ç· Ĭ", + "ĠpoÄį tu", + "ï¼Į ä¸İ", + "ä¸ĸ ç´Ģ", + "ем ого", + "емо го", + "Ġhus us", + "Ġhu sus", + "Ġölçü de", + "Ġtr ục", + "Ġtrụ c", + "à¸Ľà¸¥ à¸Ńà¸Ķà¸ł", + "Âłp ÅĻÃŃ", + "ĠBöl gesi", + "м ом", + "мо м", + "ãģ« ãģ¦", + "Ġ쪽 ì§Ģ", + "ÄĽt Å¡", + "ĠìĦ± ê³µ", + "र त", + "ur du", + "urd u", + "ĠìĽĢ ì§ģ", + "ÑŁ ÐŃ", + "nÃŃ kem", + "nÃŃk em", + "ĠskuteÄį nosti", + "Ġ даÑĤ", + "Ġд аÑĤ", + "Ġда ÑĤ", + "n eum", + "ne um", + "ĠÑĤаб леÑĤ", + "j vu", + "Ġs edm", + "Ġse dm", + "Ġsed m", + "س ÙĬØ©", + "سÙĬ Ø©", + "ĠкоÑĢ Ð¾Ð±", + "Ġко ÑĢоб", + "em mel", + "emm el", + "emme l", + "ãģ¤ ãģij", + "é¦Ļ èķī", + "Ġشخص ÛĮت", + "ĠشخصÛĮ ت", + "ä¸Ĭ äºĨ", + "ÙĪ Ø±Ø§", + "ÙĪØ± ا", + "ĠаÑĤ моÑģ", + "Ġ лей", + "Ġл ей", + "Ġz prav", + "Ġzp rav", + "Ġëķ ħ", + "ู à¸Ĺ", + "Ġ اسر", + "Ġا سر", + "Ġاس ر", + "ĠAy dın", + "ĠعÙħ ÙĦÙĬØ©", + "ĠعÙħÙĦ ÙĬØ©", + "Ġд ÑĸÑĶ", + "ĠдÑĸ ÑĶ", + "Ġd ök", + "Ġdö k", + "Ġफ ल", + "ĠìĤ¬ëŀĮ ëĵ¤ìĿ´", + "ĠнаÑĤÑĥ ÑĢалÑĮ", + "æŁ ľ", + "温 度", + "Ġk les", + "Ġkl es", + "Ġkle s", + "Ġин веÑģÑĤи", + "s üz", + "æĴ °", + "Ġ ãĤ¢ãĥ«", + "ĠãĤ¢ ãĥ«", + "Ġ èĴ", + "Ġè Ĵ", + "ад ки", + "Ġk lÃŃÄį", + "Ïĩ εί", + "Ïĩε ί", + "ĠTh iết", + "ĠThi ết", + "ĠسرÛĮ ع", + "ĠÏĢεÏģιο Ïĩή", + "ÙĪ ÙĤÙģ", + "ÙĪÙĤ Ùģ", + "Ïģ ÏīÏĥη", + "ÏģÏī Ïĥη", + "ĠسÙĦ اÙħت", + "ĠسÙĦاÙħ ت", + "ëĵ¤ ëıĦ", + "ĠveÅĻej né", + "Ġvi tam", + "Ġvit am", + "Ġvita m", + "ĠبازÛĮ گر", + "ĠÑĢеÑĨеп ÑĤ", + "ĠìľĦ íķ´ìĦľ", + "ĠìľĦíķ´ ìĦľ", + "ĠØ£Ùĥ بر", + "Ġk üt", + "Ġkü t", + "민 주", + "Ġté ž", + "Ġ å¼ķ", + "Ġå¼ ķ", + "ÑĩаÑģ но", + "çļĦ åľ°", + "Ġarchit ekt", + "Ġбак ÑĤеÑĢ", + "Ġ ãģį", + "Ġ одеÑĢж", + "Ġо деÑĢж", + "Ġод еÑĢж", + "Ġتج ارÛĮ", + "éĿ Ī", + "Ġre cep", + "Ġrec ep", + "Ġrece p", + "é© ¶", + "Ġد ÙĩÙĩ", + "ĠدÙĩ Ùĩ", + "è² Į", + "çµIJ å©ļ", + "ılı ç", + "ãģĭãĤī ãģ¯", + "å¿ĥ éĩĮ", + "æĬķ è³ĩ", + "è² Ŀ", + "ĠкÑĥлÑĮÑĤÑĥ ÑĢÑĭ", + "ĠкÑĥлÑĮÑĤÑĥÑĢ Ñĭ", + "Ġ å°ij", + "Ġå° ij", + "à¹ģ à¸ŀร", + "à¹ģà¸ŀ ร", + "γ κÏĮ", + "γκ ÏĮ", + "ar ım", + "arı m", + "Ġاس اسÛĮ", + "Ġاساس ÛĮ", + "Ġposled nÃŃch", + "ĠposlednÃŃ ch", + "ĠÙħ ÙħÙĨ", + "ĠÙħÙħ ÙĨ", + "Ġпоз иÑĤив", + "Ġпози ÑĤив", + "ìł ¤", + "Ñĥ вавÑģÑı", + "Ñĥв авÑģÑı", + "Ñĥва вÑģÑı", + "Ñĥвав ÑģÑı", + "Ġجز ئ", + "ìĿ´ ìŀIJ", + "Ġин ÑģÑĤÑĢÑĥк", + "Ġη λεκ", + "Ġde mir", + "Ġdem ir", + "Ġdemi r", + "ä¸Ńæĸĩ åŃĹå¹ķ", + "Ġعاش ÙĤ", + "Ġب اÙĦÙĤ", + "Ġبا ÙĦÙĤ", + "ĠباÙĦ ÙĤ", + "Ġ maz", + "Ġm az", + "Ġma z", + "ά νι", + "άν ι", + "Ġ dÃ¼ÄŁ", + "Ġd Ã¼ÄŁ", + "Ġdü ÄŁ", + "Ġ κÏģα", + "Ġκ Ïģα", + "ĠбÑĥд ÑĤо", + "ç¦ı åĪ©", + "ĠпÑĢед назнаÑĩ", + "Ùħ ÙĦØ©", + "ÙħÙĦ Ø©", + "ĠбÑĥд инкÑĥ", + "Å¥ an", + "íķ Ģ", + "ç´¹ ä»ĭ", + "Ú© ز", + "ĠкаÑĦ ед", + "ãģ« è¦ĭ", + "าà¸ķร à¸IJาà¸Ļ", + "ë¡ľ ëĬĶ", + "i vÄĽ", + "iv ÄĽ", + "èĥ½ æºIJ", + "ï¼Į åħ¨", + "ĠÑĥ див", + "ĠÑĥд ив", + "Ġë§Į ëĤĺ", + "ÐĴ ÐIJ", + "ĠG ür", + "ĠGü r", + "ĠдÑĢÑĥг им", + "Ïĥ Ïį", + "Ġ oÄŁlu", + "ĠoÄŁ lu", + "Ġê°Ģ ê¹Į", + "ĠзнаÑĩ иÑĤелÑĮно", + "ĠзнаÑĩиÑĤ елÑĮно", + "о зÑĸ", + "оз Ñĸ", + "Ġm á»±c", + "ĠB eÅŁ", + "ĠBe ÅŁ", + "Ġ jezd", + "Ġje zd", + "á vÄĽ", + "áv ÄĽ", + "ÏĦη Ïĥε", + "ãģ¦ãģĦ ãģªãģĦ", + "ĠСв ÑıÑĤ", + "Ġम श", + "ĠΤ οÏħ", + "ĠΤο Ïħ", + "声 ãĤĴ", + "ĠÑģам ое", + "ĠÑģамо е", + "Ġ åĮº", + "ĠåĮ º", + "ĠìĤ¬ëŀĮ ìĿĢ", + "ĠÙħ ÙĦت", + "ĠÙħÙĦ ت", + "Ġj oker", + "Ġjo ker", + "Ġjoke r", + "Ġne ob", + "Ġneo b", + "ĠÑĤ ака", + "ĠÑĤак а", + "ĠÑĤа ка", + "ĠÙĩ ÙģØª", + "Ġδε δο", + "ĠзаÑħ оп", + "ĠاÙĦÙħ خت", + "ез да", + "езд а", + "Ġíķľ ë²Ī", + "Ġع اÙħØ©", + "ĠعاÙħ Ø©", + "Ġdo state", + "Ġdost ate", + "Ġdostat e", + "Ġp lav", + "Ġpl av", + "Ġpla v", + "楽 ãģĹ", + ".;.; .;.;", + "в аÑĶ", + "ва ÑĶ", + "Ġbụ i", + "ĠÄij ỡ", + "ĠÄijá» ¡", + "Ġmys lÃŃ", + "Ġmysl ÃŃ", + "ĠÙĨ ار", + "Ġn út", + "Ġм ала", + "Ġмал а", + "Ġма ла", + "Τ Ρ", + "ĠاÙĦرÙħ زÙĬØ©", + "la dım", + "lad ım", + "ladı m", + "ä¸Ģ ç·Ĵ", + "ĠiÅŁ ç", + "l ivé", + "li vé", + "liv é", + "르 ê²Į", + "ан наÑı", + "ظËĨ Ø·", + "Ġd ừng", + "ÙĦÙĥ تر", + "çŃĶ æ¡Ī", + "ĠÙħÙĪÙĤع ÛĮت", + "ĠÑĸн озем", + "ĠиÑģ Ñĩ", + "Ġнеп ÑĢавилÑĮ", + "b akan", + "ba kan", + "bak an", + "Ġ çīĪ", + "Ġçī Ī", + "ен нÑİ", + "à¸ĩ à¹Ģศ", + "à¸Ħวาม à¸Ħ", + "% .Ċ", + "%. Ċ", + "à¹Ī à¹Ģà¸Ľ", + "ĠØ¢ بÛĮ", + "Ġآب ÛĮ", + "Ġst áty", + "Ġstát y", + "Ġتر تÛĮب", + "Äįem ž", + "Ġ é¹", + "Ġé ¹", + "Ġ Ù쨧ÙĦ", + "ĠÙģ Ø§ÙĦ", + "Ġbelir len", + "ĠâĨ ĺ", + "èĩ³ å°ij", + "ĠBun lar", + "Ġ ä¸ĵ", + "Ġä¸ ĵ", + "ĠÙħØŃ اس", + "ĠìĦľ ë²Ħ", + "Ġc anh", + "Ġcan h", + "Ġca nh", + "ĠпÑĢоÑĤ Ñıж", + "ĠнÑĸ меÑĨÑĮ", + "à¥Īà¤ł à¤ķ", + "ëĭ ī", + "Ġна неÑģ", + "Ġвоз ÑĢаÑģÑĤа", + "ĠвозÑĢаÑģÑĤ а", + "Ġ[â̦ ]Ċ", + "Ġ[â̦] Ċ", + ". à¸ŀ", + "ิ ศาสà¸ķร", + "ิศ าสà¸ķร", + "çģ ½", + "ê°Ļ ìĿĢ", + "ล à¸ĩà¸Ĺ", + "ลà¸ĩ à¸Ĺ", + "ãĤ± ãĥ¼ãĤ¹", + "Ġ ãĤ¢ãĤ¤", + "ĠãĤ¢ ãĤ¤", + "Ñģ Ñİ", + "ĠÙĦ ر", + "ãģĭ ãģ£ãģ¦", + "Ġ기 ë°ĺ", + "Ġ !:", + "Ġ! :", + "ĠÑģ ÑĬ", + "Ġ Ø´ÙĨاسÛĮ", + "ĠØ´ÙĨ اسÛĮ", + "ĠØ´ÙĨاس ÛĮ", + "ĠìķĦ 침", + "Ġعب اس", + "Ġ à¸ķà¸Ńà¸Ļ", + "Ġà¸ķ à¸Ńà¸Ļ", + "ĠмеÑĤал ли", + "ÑĪ Ð¸Ð»Ð°", + "ÑĪи ла", + "Ġpod rob", + "Ġpodr ob", + "ÑĸÑģ но", + "Ġ 赤", + "Ġèµ ¤", + "c iler", + "ci ler", + "cil er", + "o zem", + "oz em", + "oze m", + "ĠоÑģнов нÑĭÑħ", + "Âł à¤ķ", + "à¸ĸ à¸Ļà¸Ļ", + "ан ÑĤаж", + "анÑĤ аж", + "анÑĤа ж", + "ĠD ÃŃky", + "Ġگذ ارÛĮ", + "æľº ä¼ļ", + "οÏħ λίοÏħ", + "οÏħλ ίοÏħ", + "оÑĩ ек", + "Ġнап иÑĤ", + "ĠبÛĮØ´ ترÛĮ", + "ĠبÛĮشتر ÛĮ", + "ä¾ į", + "ĠاÙĦ ÙħÙħ", + "ĠاÙĦÙħ Ùħ", + "ÙĪØ² ÙĬع", + "Ġgöz lem", + "è°ĥ æķ´", + "Âłm iles", + "Âłmi les", + "Ġk oc", + "Ġko c", + "ัà¸į ห", + "æ³ ³", + "ĠÎij γγ", + "ĠÎijγ γ", + "ĠÙĨÙħ از", + "ุ à¸Ĺ", + "ãĥı ãĤ¤", + "Ġth ù", + "к ÑĥлÑı", + "кÑĥ лÑı", + "кÑĥл Ñı", + "ĠпÑĥÑĤ ем", + "èĩº çģ£", + "Ġver gi", + "Ġverg i", + "åł´åIJĪ ãģ¯", + "ĠÑĤÑĢÑĮ оÑħ", + "Ġë³´ ë©´", + "âĸ ²", + "Ïħ γ", + "ĠдоÑĤ ÑĢим", + "æľ µ", + "Ġum ÄĽnÃŃ", + "èī¯ ãģĦ", + "Âł à¸Ļาà¸ĩ", + "Ðİ ÑĭÑŁN", + "ä¸ī 个", + "ียร à¸ķ", + "ï¼Į åIJĮæĹ¶", + "ĠÑĢозÑĢаÑħ Ñĥн", + "ĠD ers", + "ĠDe rs", + "ĠDer s", + "ãģª ãģ®", + "Ġê·¸ 를", + "d ikleri", + "dik leri", + "Ġhay ata", + "Ġhaya ta", + "Ġhayat a", + "è§Ħ èĮĥ", + "ç»ĵ åIJĪ", + "Ġs cé", + "Ġsc é", + "Ġc Æ¡m", + "ĠcÆ¡ m", + "åѸ éĻ¢", + "ĠÐĦ в", + "ĠÄįlán ek", + "ĠдоÑģÑĤ иг", + "ĠдоÑģÑĤи г", + "ा à¤ĩस", + "ाà¤ĩ स", + "εÏħ Ïĥη", + "éģ© ç͍", + "Ïĥ ον", + "Ïĥο ν", + "ıl maktadır", + "ëªħ ìĿĦ", + "ı b", + "Ġstar Å¡ÃŃ", + "Ġch ÃŃn", + "ĠchÃŃ n", + "ä¸Ģ 个人", + "ä¸Ģ个 人", + "ĠFranti Å¡ek", + "n ÄĽji", + "nÄĽ ji", + "ï» ¨", + "ĠÙĦÙĦ د", + "Ġp okoj", + "Ġpok oj", + "Ġj ih", + "Ġji h", + "ãĢį ãĢĤ", + "Ġعبد اÙĦ", + "ãĤĵãģ§ ãģĦãĤĭ", + "Ġмод елÑĮ", + "ĠteÅŁ kil", + "ĠÄĮ er", + "à¹Ģà¸Ķ à¸Ńร", + "' na", + "'n a", + "λο γή", + "λογ ή", + "Ġ kola", + "Ġk ola", + "Ġko la", + "Ġkol a", + "ãĥĢ ãĥ¼", + "иÑĤ елем", + "иÑĤе лем", + "ĠÏĥÏħ νο", + "ĠÏĥÏħν ο", + "ĠK urum", + "ĠKur um", + "ĠKu rum", + "Ġsnad no", + "ĠاÙĦÙĤر Ø¢ÙĨ", + "ĠV á»ģ", + "é«ĺ ãģĦ", + "Ġyıl dız", + "Ġbir isi", + "Ġbiri si", + "Ġkh úc", + "ÙĪ ÛĮÙĦ", + "ÙĪÛĮ ÙĦ", + "æľĢ ä½³", + "Ġส าà¸Ĥ", + "ĠÐŁ ок", + "ĠÐŁÐ¾ к", + "âī ł", + "à¹Ĥà¸Ľà¸£ à¹ģà¸ģรม", + "à¥įय यन", + "èij ¡", + "Ġn ovÄĽ", + "Ġno vÄĽ", + "Ġnov ÄĽ", + "ay ıp", + "ayı p", + "ĠSing ap", + "ĠSin gap", + "è° ĵ", + "ãĤ¶ ãĤ¤ãĥ³", + "Ġн овÑĭе", + "Ġнов Ñĭе", + "Ġh ảo", + "Ġ èŤ", + "ĠèĹ ¤", + "ãĥ³ ãĥĸ", + "ãĥ³ãĥ ĸ", + "Âł ĊĊ", + "ÂłĊ Ċ", + "θ εια", + "θε ια", + "Ġпоп ада", + "ĠëĶĶ ìŀIJìĿ¸", + "Ġداشت ÙĨد", + "ĠداشتÙĨ د", + "ĠØ´ÙĨ اختÙĩ", + "Ïĥ μαÏĦα", + "Ïĥμα ÏĦα", + "å¹³æĸ¹ åħ¬éĩĮ", + "Ġg öl", + "Ġgö l", + "ек оÑĤоÑĢ", + "еко ÑĤоÑĢ", + "Ġm álo", + "Ġmá lo", + "Ġاج ازÙĩ", + "Ú© اراÙĨ", + "کار اÙĨ", + "کا راÙĨ", + "ĠпÑĸдпÑĢиÑĶм ÑģÑĤв", + "ä¸ī å¹´", + "ĠسÙģ ÛĮد", + "ĠμÎŃ ÏģοÏĤ", + "ÐĻ ÐĻ", + "Ġh ư", + "س ÙĪØ¨", + "سÙĪ Ø¨", + "ĠÙĦ ذا", + "Ġnem ovit", + "Ġd ÃŃv", + "ĠdÃŃ v", + "İ s", + "¶ ¶", + "Ġph ưá»Ŀng", + "ĠÙĨØŃ ÙĪÙĩ", + "ĠÙĨØŃÙĪ Ùĩ", + "Ð ĭ", + "Ġz byt", + "Ġzb yt", + "Ġzby t", + "ed ii", + "edi i", + "n ech", + "ne ch", + "ĠадмÑĸнÑĸÑģÑĤÑĢа ÑĤив", + "Ġne vÄĽ", + "Ġnev ÄĽ", + "Ġ ож", + "Ġо ж", + "ĠÄIJ ó", + "à¸Ľà¸£à¸° ว", + "Ġvhod né", + "Ġum ÄĽl", + "ĠÑĢазлиÑĩ нÑĭе", + "ĠpÅĻi roz", + "Ġبخ Ø´ÛĮ", + "Ġبخش ÛĮ", + "ãģ® å¤§", + "ĠاÙĦ ÙĥÙĩ", + "ĠاÙĦÙĥ Ùĩ", + "ec ká", + "eck á", + "Ġzorun lu", + "ĠÐľÐ¸Ðº ола", + "Ġ amel", + "Ġa mel", + "Ġam el", + "к овÑĭе", + "ков Ñĭе", + ": :::/", + ":: ::/", + ":::: /", + "::: :/", + "ä¸įåIJĮ çļĦ", + "ĠÙĪÙĥ اÙĨت", + "ĠÙĪÙĥاÙĨ ت", + "à¸Ń à¸Ń", + "lá sil", + "ĠпÑĢедпол аг", + "ï½ ±", + "Ġ νε", + "Ġν ε", + "Ġн овÑĭй", + "Ġнов Ñĭй", + "Ġìĺģíĸ¥ ìĿĦ", + "Ġê°Ģ ì§Ħ", + "åĥ ħ", + "Y D", + "Ġب اغ", + "Ġبا غ", + "ĠØ´Ú© ست", + "Ġgü ney", + "Ġgün ey", + "и ÑģÑĮ", + "иÑģ ÑĮ", + "ãģĭ ãģªãģĦ", + "ãģĭãģª ãģĦ", + "ĠT òa", + "Ġگرد ÛĮد", + "Ġگر دÛĮد", + "ØŃ ÙĦ", + "lu vÃŃ", + "luv ÃŃ", + "v éd", + "vé d", + "Ġìĺ ·", + "Ġε ÏĢα", + "ĠεÏĢ Î±", + "ĠÑĤи ÑģÑıÑĩ", + "ĠÑĤиÑģ ÑıÑĩ", + "Ġê½ ĥ", + "ĠP US", + "ĠPU S", + "ĠдÑĥм кÑĥ", + "Ġ âĢĿĊ", + "ĠâĢĿ Ċ", + "ĠìĬ¤ íı¬ì¸ł", + "Ùĩ Ùĩ", + "Ġg ắng", + "Ġgắn g", + "ิ à¸łà¸²à¸ŀ", + "éĩĮ éĿ¢", + "br ıs", + "Ġz áb", + "Ġzá b", + "κ αÏĤ", + "κα ÏĤ", + "ĠåıĮ 线", + "ล ล", + "ĠÄIJ Ãłi", + "ĠÄIJÃł i", + "åѸ æł¡", + "ĠÑĢаÑģп ÑĢед", + "ĠÑģÑĤан еÑĤ", + "ĠÑģÑĤа неÑĤ", + "Ġл ак", + "Ġла к", + "Ġпод к", + "Ġg ören", + "Ġgö ren", + "Ġgör en", + "Ġgöre n", + "르 ê³ł", + "ĠÑĦ ÑĢÑĥкÑĤ", + "íĵ¨ íĦ°", + "ãģĻ ãĤĮãģ°", + "ãĤĴ ä½ľ", + "à¸Ńà¸Ńà¸ģ à¹ģà¸ļà¸ļ", + "Ġku lak", + "Ġkul ak", + "ĠíĶĮ ëłĪìĿ´", + "ĠØŃ دÙĬØ«", + "ĠØŃد ÙĬØ«", + "ãģĨ ãĤĵ", + "Ġм Ñĸк", + "ĠмÑĸ к", + "à¤ĩस à¤ķ", + "ĠÑĥ ÑĤоÑĩ", + "ĠÑĥÑĤ оÑĩ", + "ĠÙĥ Ø«ÙĬر", + "ĠY ine", + "ĠYi ne", + "ĠYin e", + "ัว หà¸Ļ", + "н ÑĸÑĹ", + "нÑĸ ÑĹ", + "åį ¢", + "Ñĥ Ñģлов", + "ÑĥÑģ лов", + "ìĽĮ íģ¬", + "Ġà¤ħ à¤ĸ", + "ĠÑĨ Ñĸка", + "ĠÑĨÑĸ ка", + "ìĦł ìĿĦ", + "ĠØ£ ر", + "гал ÑĤеÑĢ", + "angl icky", + "ĠÑģ оÑģÑĥд", + "ĠÑģоÑģ Ñĥд", + "ĠÑĥ Ñıв", + "ĠпÑĢодÑĥк ÑĨÑĸÑĹ", + "Ġc hua", + "Ġch ua", + "Ġchu a", + "Ġd án", + "Ġdá n", + "ाम à¤Ĺ", + "ئ ت", + "ĠФ ед", + "Ġh rom", + "Ġhr om", + "íķ´ ë³´", + "ĠØ¢ÙĨ ÙĦاÛĮÙĨ", + "- пÑĢав", + "-п ÑĢав", + "Ġì¤ijìļĶ íķľ", + "Ġв кÑĥ", + "Ġвк Ñĥ", + "Ġ 大éĺª", + "Ġ大 éĺª", + "Ġt erk", + "Ġte rk", + "Ġter k", + "Ġпод Ñĸб", + "ĠвÑĸд вÑĸд", + "à¥Į à¤Ł", + "è³ £", + "Ġب تÙĨ", + "Ġبت ÙĨ", + "Ġبع ضÛĮ", + "Ġبعض ÛĮ", + "ãģª ãģĬ", + "ä»ĸ åĢij", + "Ġtavs iye", + "ĠM ısır", + "ĠØ¥ ذ", + "Ġ æIJ", + "Ġæ IJ", + "íķĺ ëĤĺ", + "ĠÙĪ Ø®", + "ãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠ ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢĠãĢĢ", + "ãĢĢĠãĢĢĠãĢĢĠãĢĢĠãĢĢ ĠãĢĢ", + "Ġta kový", + "Ġtak ový", + "Ġtako vý", + "Ġबन न", + "Ġз ÑĢениÑı", + "ĠÙĪ ÙģÙĤ", + "ĠÙĪÙģ ÙĤ", + "ë¹Ħ ìķĦ", + "Ġпом ожеÑĤ", + "åĮĹ å¸Ĥ", + "dık ları", + "Ġ éĵģ", + "Ġéĵ ģ", + "Ġakt uálnÃŃ", + "Ġaktu álnÃŃ", + "Ġв в", + "ãĤĤ ãģªãģĦ", + "íĨµ ìĭł", + "ÏĦα Ïĥη", + "Ġìĥģ ëĮĢ", + "Ġ æł¡", + "Ġæł ¡", + "ãĢĤ éĤ£", + "ĠرÙĪØ³ÛĮ Ùĩ", + "Ġtelev izyon", + "å¹´ é¾Ħ", + "ĠÐijоÑĢ Ð¸Ñģ", + "리 ìĸ´", + "Ġz veÅĻej", + "ж но", + "ĠÐŀ ÑģÑĤ", + "ĠÐŀÑģ ÑĤ", + "ĠмÑĥж Ñĩин", + "Ġy eÅŁil", + "ĠСов еÑĤ", + "ĠСо веÑĤ", + "ĠB ÃĸL", + "ĠТак ож", + "Ġob nov", + "ĠпÑĢи надлеж", + "ĠвиÑģ нов", + "Ø· Ùħ", + "ĠìĹĨ ìĸ´", + "ĠM ùa", + "ä½ı å®ħ", + "åĮ» åѦ", + "Ġна ÑĢез", + "ĠнаÑĢ ÐµÐ·", + "ãĥĭ ï¾Ĩ", + "ĠM ặt", + "Ġvu ông", + "ä¸Ģ åĮº", + "ĠẢ nh", + "ÑĢ Ð¸ÑĦ", + "ÑĢи ÑĦ", + "ä¿Ŀ éĻ©", + "ĠÏĩÏģή Ïĥη", + "åIJĮ æĦı", + "Ġ æīĵ", + "Ġæī ĵ", + "e tÄĽ", + "et ÄĽ", + "ĠÙĪ Ø°ÙĦÙĥ", + "ĠÑĤ иж", + "ĠÑĤи ж", + "ĠÎŁ ικο", + "ĠÎŁÎ¹ κο", + "ĠмÑĸÑģ ÑĨÑĸ", + "ĠÑĢебен ок", + "ĠÅŀ ah", + "عÙĦ ÙĪÙħ", + "l adıģ", + "la dıģ", + "lad ıģ", + "ladı ÄŁ", + "Ġg iden", + "Ġgi den", + "Ġgid en", + "лив оÑģÑĤÑĸ", + "ливо ÑģÑĤÑĸ", + "ÙĴ س", + "ĠT HB", + "ĠTH B", + "Ġmes lek", + "Âł ÐĿе", + "ÂłÐĿ е", + "μÏĨ Ïīνα", + "Ġ ÙĪØ§Ø¬", + "ĠÙĪ Ø§Ø¬", + "ĠÙĪØ§ ج", + "на ÑģлÑĸд", + "æĺŁ æľŁ", + "ÐĶ Ð¶", + "ĠÑĢабоÑĤ аеÑĤ", + "ĠÑĢабоÑĤа еÑĤ", + "Ġs ánh", + "ìļ° ë¦¬", + "Ġا بÙĪ", + "Ġاب ÙĪ", + "çļĦ æĥħ", + "ĠìϏ êµŃ", + "Ġk abil", + "Ġka bil", + "Ġkab il", + "еÑĢв Ñĭе", + "Ġgi Ãłu", + "ĠgiÃł u", + "Ġt á»ı", + "Ġtá» ı", + "Âł Ðij", + "å®Į æķ´", + "Ġmuž ů", + "ĠpomÄĽr nÄĽ", + "ĠÙħ خصÙĪØµ", + "ĠÐĶ ÐµÐ¼", + "ãĤı ãĤĮãĤĭ", + "ãĤıãĤĮ ãĤĭ", + "ĠпÑĢи бÑĭ", + "ĠпÑĢиб Ñĭ", + "ĠکاÙħ Ù¾ÛĮ", + "ï¼ Ń", + "Ġt rh", + "Ġtr h", + "ĠÐij олÑĮÑĪ", + "´ :", + "и ваеÑĤÑģÑı", + "ив аеÑĤÑģÑı", + "ива еÑĤÑģÑı", + "иваеÑĤ ÑģÑı", + "Ġ ìĤ¬íķŃ", + "ĠìĤ¬ íķŃ", + "è¿Ľ ä¸ĢæŃ¥", + "ÑĨ ей", + "ÑĨе й", + "ãģ¾ ãģļ", + "аÑĤ елем", + "аÑĤе лем", + "éĮ ¯", + "Ġžal ob", + "ÑĨ ез", + "ÑĨе з", + "и нÑĥв", + "ин Ñĥв", + "инÑĥ в", + "Ġver ze", + "Ġve rze", + "Ġverz e", + "åĽŀ åΰ", + "Ġd ược", + "ائ ÙĬÙĦ", + "ائÙĬ ÙĦ", + "sto upil", + "stoup il", + "论 æĸĩ", + "ĠÐŁ аÑĢи", + "ĠÐŁÐ°ÑĢ Ð¸", + "Ġдек оÑĢаÑĤив", + "اخ تÛĮ", + "اخت ÛĮ", + "ĠÑģÑĤ ÑĢем", + "ĠÑģÑĤÑĢ ÐµÐ¼", + "ãĥ»âĶģãĥ»âĶģ ãĥ»âĶģãĥ»âĶģ", + "ĠÑģам ой", + "ĠÑģамо й", + "Ñĩ ÑĤо", + "ìĥģ ëĭ´", + "âī ¤", + "ÑĤ ого", + "ÑĤо го", + "ëIJ ¨", + "ı lacak", + "ıl acak", + "ä¸Ń ãģ«", + "ĠÏħÏĢάÏģÏĩ οÏħν", + "ĠвÑĸд бÑĥ", + "ĠвÑĸдб Ñĥ", + "çİ »çĴĥ", + "Ġвп еÑĢед", + "ĠPl zeÅĪ", + "Ú¯ اب", + "à¹Ģศ รษà¸IJ", + "ï¼Į æľĢ", + "Ùħ ÙĨÛĮ", + "ÙħÙĨ ÛĮ", + "çħ§ çīĩ", + "缮 å½ķ", + "ÑĢиÑĤ ÑĤÑı", + "âĢĮ اش", + "Ġ ëĮĢíļĮ", + "ĠëĮĢ íļĮ", + "ĠÅĻ adu", + "- ÑĤеÑħ", + "-ÑĤ еÑħ", + "Ġ ÙĬÙĪ", + "ĠÙĬ ÙĪ", + "Ġ à¹ģà¸ŀ", + "Ġà¹ģ à¸ŀ", + "ا ÙĥÙĨ", + "اÙĥ ÙĨ", + "Ġ기 ìŀIJ", + "Ġг Ñĸд", + "Ġìļ° ë¦¬ëĬĶ", + "Ġìļ°ë¦¬ ëĬĶ", + "Ø´ ÙħارÛĮ", + "Ø´Ùħ ارÛĮ", + "Ġt icari", + "Ġtic ari", + "âij ¢", + "ĠاÙĦ بد", + "ĠاÙĦب د", + "ĠÑĢаÑģ Ñĩ", + "Ġ اÙĦÛĮ", + "Ġا ÙĦÛĮ", + "ĠاÙĦ ÛĮ", + "Ġsü rede", + "Ġsür ede", + "Ġsüre de", + "Ġاع تر", + "Ġпо нÑıÑĤÑĮ", + "Ġпон ÑıÑĤÑĮ", + "γ κο", + "γκ ο", + "ï¼Į æ¯Ķ", + "ĠS eb", + "ĠSe b", + "Ġìĭł ê·ľ", + "æĶ¶ çĽĬ", + "ĠÙ¾ÛĮØ´ÙĨÙĩ اد", + "Îľ ÎijΤ", + "ÎľÎij Τ", + "ë°Ķ ìĿ´", + "ä¾Ľ åºĶ", + "б ин", + "би н", + "人 æ°Ĺ", + "ãģı ãĤī", + "Ġsk vÄĽl", + "Ġëĵ± ìŀ¥", + "æĭħ å½ĵ", + "Ġim kan", + "æ ύ", + "æĻ ¨", + "ï¼Į çİ°åľ¨", + "Ġsrd ce", + "ìĤ° ìĹħ", + "Ġмод ели", + "æľ¬å½ĵ ãģ«", + "а нка", + "ан ка", + "анк а", + "Ġyür üy", + "ĠоÑĩ евид", + "ĠØŃ سÙĬÙĨ", + "ĠØŃس ÙĬÙĨ", + "Ñī аÑİÑĤ", + "Ñīа ÑİÑĤ", + "lé dl", + "léd l", + "ÑĨ о", + "ĠcÃŃ sa", + "ãģĭ ãģij", + "èĹ į", + "ĠØ®ÙĪØ§Ùĩ ÙĨد", + "Ġmu že", + "Ġmuž e", + "Ġна коп", + "Ġнак оп", + "di ÄŁini", + "diÄŁi ni", + "er seniz", + "ers eniz", + "ersen iz", + "ĠпÑĢаÑĨÑĸв никÑĸв", + "д лÑı", + "Ġα ÏĥÏĦ", + "ĠαÏĥ ÏĦ", + "æ¶Ī è´¹", + "Ġ è¨Ģ", + "Ġè¨ Ģ", + "Ġb át", + "ĠØ´ ÙĥÙĦ", + "ĠÑģп иÑĢ", + "ÏĢο ÏĦε", + "Ġس اÙĦÙĩ", + "ĠساÙĦ Ùĩ", + "e kil", + "ek il", + "eki l", + "à¹ģ à¸Ĭม", + "ĠÏĥ ÏĦι", + "ĠÙħ Ø·ÙĦب", + "ĠÙħØ· ÙĦب", + "Ġìłķ ì±ħ", + "ê´Ģ ê³Ħ", + "å¹¹ ç·ļ", + "Ġ 京", + "éĢļ éģİ", + "ĠدÛĮ گراÙĨ", + "ĠدÛĮگر اÙĨ", + "ĠØ£ Ùħا", + "ĠØ£Ùħ ا", + "æĺ¯ ä¸į", + "ĠëĮĢ ëĭµ", + "ĠE rk", + "ĠEr k", + "p erty", + "per ty", + "pert y", + "ĠнаÑĩина еÑĤ", + "Ġê·¸ 리", + "ë£ ¡", + "ĠìĽ¹ ìĤ¬ìĿ´íĬ¸", + "ार न", + "æĦı è¯Ĩ", + "ĠС ÐŁ", + "Ġب اÙĬد", + "Ġبا ÙĬد", + "Ġbakım ından", + "/ TT", + "/T T", + "ĠÙģ Ø§ØµÙĦÙĩ", + "ĠÙħØ« ÙĦا", + "ĠÙħØ«ÙĦ ا", + "Ġк вад", + "Ġкв ад", + "ĠØ´ اÛĮد", + "ĠuÄį itel", + "çĪ ½", + "Ġعرض Ùĩ", + "Ġ 交", + "ĠÑĩ еÑģÑĤÑĮ", + "ĠÑĩеÑģ ÑĤÑĮ", + "à¥Ī ?Ċ", + "à¥Ī? Ċ", + "ĠخاÙĨ Ùħ", + "et iyle", + "eti yle", + "Ġε γκα", + "ĠÑģÑĥ Ñīе", + "ĠìĿ¼ ìĸ´", + "ĠÐĽ ени", + "ĠÐĽÐµ ни", + "Ġ 声", + "Ġå£ °", + "á lie", + "ál ie", + "áli e", + "ãĥ¡ ãĥ¼ãĤ¸", + "à¥Ģ तर", + "à¥Ģत र", + "г алÑĸ", + "га лÑĸ", + "гал Ñĸ", + "ĠмÑĸ нÑĸм", + "ĠE ÅŁ", + "ĠпÑĢоиз оÑĪ", + "ÐĿ аÑģ", + "ÐĿа Ñģ", + "Ġب ÙĨÛĮ", + "ĠبÙĨ ÛĮ", + "让 æĪij", + "ĠпоÑģÑĤ еп", + "ĠìļĶ êµ¬", + "ılı p", + "ıl ıp", + "Ġج ÙĪØ±", + "ĠجÙĪ Ø±", + "ĠëĮĢ ë¶Ģë¶Ħ", + "à¹ĩ à¸ķาม", + "à¹ĩà¸ķ าม", + "ĠÑĦ аÑģ", + "Ġìłķ ê·ľ", + "ла менÑĤ", + "лам енÑĤ", + "ÄŁ en", + "ÄŁe n", + "à¥ĩà¤Ĥ ĊĊ", + "à¥ĩà¤ĤĊ Ċ", + "ĠÐĺ ванов", + "ĠØŃ Ú©Ùħ", + "ĠØŃÚ© Ùħ", + "Ġ ï¾ļ", + "Ġï¾ ļ", + "ï¼ »", + "Ġne vid", + "Ġnev id", + "Ġла боÑĢаÑĤоÑĢ", + "à¸ŀย าà¸ļาล", + "Ġed iyorum", + "Ġediyor um", + "Ġhl avy", + "Ġhlav y", + "ĠEvrop ské", + "Ġph ái", + "Ġphá i", + "ãĥĵ ãĥ¼", + "ê´ij ìĹŃìĭľ", + "äº ľ", + "ØŃد اث", + "ĠпÑĢоÑĦ илакÑĤи", + "ro stÅĻed", + "rost ÅĻed", + "Ġм алÑĮ", + "Ġмал ÑĮ", + "Ġма лÑĮ", + "Ġmü dür", + "ا ساس", + "اس اس", + "ĠгалÑĥз Ñĸ", + "ี à¸Ł", + "Ġغذ اÛĮÛĮ", + "åŃIJ ä¾Ľ", + "Ġbah sed", + "ĠKrál ové", + "åį »", + "Ġ %,", + "Ġ% ,", + "ç½Ĺ æĸ¯", + "ë ļ", + "Ġ çij", + "Ġç ij", + "Ġξε ÏĦα", + "ĠÐŃ ÑĤи", + "ĠíĨµ íķ©", + "Ġاک تبر", + "ĠmÄĽsÃŃ ce", + "ìĪĺ ë¡ľ", + "ÑĦ Ñĸк", + "ÑĦÑĸ к", + "ĠÐĴ оз", + "ĠÐĴо з", + "ÑĩеÑģ ким", + "Ñĩе Ñģким", + "ÑĩеÑģки м", + "ìļ´ ëĵľ", + "Ġná klady", + "Ġnáklad y", + "ĠпоÑĤ ÑĢап", + "ĠÑĢÑĥ каÑħ", + "ĠÑĢÑĥк аÑħ", + "ι λο", + "ιλ ο", + "ĠG ül", + "ĠGü l", + "ë© ĺ", + "à¹ī ย", + "m akt", + "ma kt", + "mak t", + "ãĥ³ ãĥIJãĥ¼", + "ãĥ³ãĥIJ ãĥ¼", + "Ġн ÑĸÑı", + "ĠнÑĸ Ñı", + "ĠоÑĤ ÑĤен", + "m esinin", + "mes inin", + "mesi nin", + "mesini n", + "ĠвÑģп ом", + "Ġ ìĿ´ëĬĶ", + "ĠìĿ´ ëĬĶ", + "dy by", + "ãĤ¿ ãĥ³", + "âĹ İ", + "à¹īา หà¸Ļ", + "à¹īาห à¸Ļ", + "اد Ú¯ÛĮ", + "Ïĩ ία", + "Ġsna žÃŃ", + "Ġà¤ļ à¤ķ", + "μή μα", + "Ġ Ùĥر", + "ĠÙĥ ر", + "Ġκ οι", + "Ġκο ι", + "éĢ ¸", + "Ġne ust", + "Ġneu st", + "ĠÙĨظ اÙħÛĮ", + "ĠÙĨظاÙħ ÛĮ", + "åįļ çī©", + "Ġ ë²½", + "Ġë² ½", + "á½ ±", + "Ġì¶ľ ìĭľ", + "Ġar má", + "Ġarm á", + "ĠÙĩÙħ کارÛĮ", + "çļĦ æĥħåĨµ", + "çļĦæĥħ åĨµ", + "ÙĤ اÙħ", + "ÙĤ ب", + "Ġ éĤ£", + "ĠéĤ £", + "Ġë§ ¡", + "Ġo lası", + "Ġol ası", + "Ġola sı", + "β ÎŃÏģ", + "ä½ķ ãģĭ", + "ĠÑĥÑĩ еб", + "Ġв Ñĥз", + "Ġبر گز", + "Ġبرگ ز", + "' yi", + "'y i", + "Ġп ÑĢазд", + "ĠпÑĢа зд", + "ĠÐŀ ÑĢг", + "ĠÐŀÑĢ Ð³", + "Ġ å¹¶", + "Ġå¹ ¶", + "ĠÑģ ви", + "ĠÑģв и", + "ĠÙħÛĮ داÙĨ", + "ĠnaÅ¡e ho", + "ĠBA Åŀ", + "å» Ĭ", + "Ì Ī", + "ãģĵ ãģĿ", + "à¹ĩà¸Ļ à¸ŀ", + "οÏģ ειο", + "Ġбаг аÑĤ", + "γ ει", + "γε ι", + "μ είο", + "με ίο", + "à¹Īà¸ĩ à¸Ĭาà¸ķ", + "ĠHizmet leri", + "ĠAfr ika", + "ĠAf rika", + "Ġted bir", + ", 、", + "ä¸ī 级", + "ÐİÑĭÑŁN ÐİÑĭÑŁN", + "ĠÐļ ÑĢÑĸм", + "Ġa ray", + "Ġar ay", + "Ġara y", + "Ġböyle ce", + "к оÑĤ", + "ко ÑĤ", + "éĻ °", + "åĽ½ éļĽ", + "t ÄĽl", + "tÄĽ l", + "Ġp olis", + "Ġpol is", + "Ġpo lis", + "Ġu vol", + "Ġuv ol", + "ĠìĪĺ ê°ķ", + "ç͵ èĦij", + "Ġs ami", + "Ġsa mi", + "Ġsam i", + "Ġشاخ Ùĩ", + "Ġв ÑģÑĮого", + "ĠвÑģ ÑĮого", + "ĠØŃد اÙĤÙĦ", + "Ġ iken", + "Ġi ken", + "Ġik en", + "ãĤ¯ãĥ© ãĥĸ", + "Ġzá vod", + "Ġzáv od", + "ब ल", + "ë°° ìĨ¡", + "éĩĩ è´Ń", + "ëł ¬", + "Ġ ।ĊĊ", + "Ġ। ĊĊ", + "Ġ।Ċ Ċ", + "Ġê°ģ ê°ģ", + "Ġм ак", + "Ġма к", + "Ïģα Ïĥη", + "ĠiÅŁlem i", + "ãģĹ ãģ¦ãģĦãģ¾ãģĻ", + "ãģĹãģ¦ ãģĦãģ¾ãģĻ", + "ãģĹãģ¦ãģĦ ãģ¾ãģĻ", + "ĠP ek", + "ĠPe k", + "Ñİ Ð½", + "Ġvel kou", + "Ġvelk ou", + "åĬŀ çIJĨ", + "å®ĥ 们", + "Ġ èIJ¬", + "ĠèIJ ¬", + "ĠнаÑĢод Ñĥ", + "ĠнаÑĢ Ð¾Ð´Ñĥ", + "Ġch ó", + "ĠH iç", + "ĠHi ç", + "Û³ Ûµ", + "Ġ รà¸Ńà¸ļ", + "Ġร à¸Ńà¸ļ", + "Û³ Û¶", + "à¸Ĥ ว", + "ä½į æĸ¼", + "ĠС ÑĤа", + "ĠСÑĤ а", + "ั à¸Ļม", + "ัà¸Ļ ม", + "ाप à¤ķ", + "ĠÑĥ ÑĢок", + "ãĤ¢ ãĥ¡ãĥªãĤ«", + "Ġз мож", + "Ġзм ож", + "sk ému", + "ské mu", + "ském u", + "Ġ è»Ĭ", + "Ġè» Ĭ", + "ĠاختÛĮ ار", + "ĠP Åĺ", + "л Ñıв", + "лÑı в", + "Ġ маз", + "Ġм аз", + "Ġма з", + "Ġözel liÄŁi", + "åij¼ ãģ°", + "Ġbir inin", + "Ġbiri nin", + "Ġод не", + "Ì Ĩ", + "ä»ĸ ãģ®", + "建 ç¯ī", + "поÑģ еÑĢед", + "ห ลà¸Ķ", + "หล à¸Ķ", + "å¤ļ ãģĦ", + "ÏĦή ÏĥειÏĤ", + "Ġر ÙĪÙĨد", + "ĠرÙĪ ÙĨد", + "èģ ½", + "ì¤ij ìĹIJ", + "ìĬ¤ íĭ°", + "Ġз вÑĸÑĤ", + "Ġзв ÑĸÑĤ", + "ĠаÑĢ ÑĤи", + "Ġc ưá»Ŀi", + "Ġcư á»Ŀi", + "ın dır", + "ınd ır", + "Ġг олод", + "Ġгол од", + "ا زد", + "از د", + "à¹Īาว ว", + "ãĥ¡ ãĥ©", + "عÙĨ ÙĪØ§ÙĨ", + "% )Ċ", + "%) Ċ", + "ĠÑħолод илÑĮ", + "人 们", + "C İ", + "ÐĹ Ð°Ð¿", + "ÐĹа п", + "ĠpÅĻ isp", + "ĠpÅĻi sp", + "Ġdurum larda", + "ÑĢ Ñĸд", + "ÑĢÑĸ д", + "Âł У", + "Ġε ÏĨαÏģ", + "Ġs prav", + "Ġsp rav", + "Ġspr av", + "ĠоÑĤÑĢим аннÑı", + "ï¼Į 没æľī", + "о вала", + "ов ала", + "ова ла", + "овал а", + "Ġng ại", + "ãĢĤ 大", + "Ġ даеÑĤ", + "Ġд аеÑĤ", + "Ġда еÑĤ", + "ĠpÃŃs em", + "ÑĨ ÑıÑĤÑĮ", + "ÑĨÑı ÑĤÑĮ", + "ov nÄĽ", + "ë¦ ī", + "Ġê² ģ", + "Ñģ ÑĤин", + "ÑģÑĤ ин", + "ÑģÑĤи н", + "ĠS ayı", + "ĠSa yı", + "ĠSay ı", + "ãĢĭ çļĦ", + "Ġyol uyla", + "Ġyolu yla", + "елеÑĦ он", + "Ġr áno", + "Ġrá no", + "Ġíĸī ëıĻ", + "ĠاÙĦخاÙħ سة", + "Ġповин на", + "ÅĻ ila", + "ÅĻi la", + "ÅĻil a", + "Ġà¤ļ रण", + "Ġà¤ļर ण", + "Ġبرگ زار", + "Ġبرگز ار", + "ìļ´ ëį°", + "à¹Ģà¸Ľ à¸Ńร", + "Ġdal eko", + "led nÃŃ", + "åIJį 稱", + "лив ÑĸÑģÑĤÑĮ", + "ливÑĸ ÑģÑĤÑĮ", + "Ġ몸 ìĿĦ", + "о ÑĢÑĸв", + "оÑĢ Ñĸв", + "оÑĢÑĸ в", + "Ц е", + "بد Ø£", + "ë°ĺ 기", + "k rát", + "kr át", + "ä¸į è¶³", + "Ġolduk ları", + "len iyor", + "Ġìĭľ íĸī", + "ĠпÑĢи нимаÑĤÑĮ", + "à¸Ĥà¸Ńà¸ĩ ร", + "ÏĪ ÎµÎ¹", + "ÏĪε ι", + "Ġ ẩn", + "ت س", + "ĠÑĤ ай", + "ĠÑĤа й", + "Ġнев озможно", + "åıĬ ãģ³", + "r oti", + "ro ti", + "rot i", + "ï½ Ń", + "д ом", + "до м", + "ой но", + "å£ Ĭ", + "说 çļĦ", + "Ġsk oro", + "ni ÄįnÃŃ", + "niÄį nÃŃ", + "ĠProf es", + "ĠÑħ ÑĢониÑĩеÑģ", + "Ġ주 문", + "ĠZ n", + "ĠÑģ лой", + "ĠÑģл ой", + "ĠÑģло й", + "Îł Ïģο", + "æĮĩ æķ°", + "ĠпеÑĢ ÐµÑĪ", + "ĠпеÑĢе ÑĪ", + "à¥ģà¤ķ स", + "Ġê°Ģ ìłķ", + "Ġ íķĺë©´", + "Ġíķĺ ë©´", + "Û±Û¹ Û´", + "к Ñĥл", + "кÑĥ л", + "ÙĬ ÙĦا", + "ÙĬÙĦ ا", + "ĠدÙĪØ¨ ارÙĩ", + "| l", + "ĠÐľ Ñĥ", + "н ила", + "ни ла", + "нил а", + "ãģ¦ ãģĦãģ¾ãģĻ", + "ãģ¦ãģĦ ãģ¾ãģĻ", + "m acı", + "ma cı", + "mac ı", + "ãģŁ ãģ¡ãģ¯", + "ãģŁãģ¡ ãģ¯", + "ĠاÙĦÙĥ تاب", + "ç§» åĭķ", + "λ μ", + "_ ï¼ı", + "Ġê°Ģ ìŀħ", + "èħ ¾", + "ĠпÑĢез иденÑĤ", + "Ġë¶Ħ ìķ¼", + "a hy", + "ah y", + "Å¡et ÅĻenÃŃ", + "Å¡etÅĻ enÃŃ", + "éĵ º", + "ĠpÅĻÃŃ ro", + "Ðķ Т", + "ĠìļĶ ì²Ń", + "Ġmoh lo", + "Ġmohl o", + "å¿ĥ çIJĨ", + "Ġvysok é", + "& uuml", + "ÏĦ ικα", + "ÏĦικ α", + "ÏĦι κα", + "ìĹħ ì²´", + "ãģ§ ãģĤ", + "ราย à¸ĩาà¸Ļ", + "ĠpÅĻÃŃspÄĽ v", + "Ġet miÅŁtir", + "Ġetm iÅŁtir", + "ĠetmiÅŁ tir", + "她 们", + "ÏĢ Î»Î±", + "ÏĢλ α", + "ứ a", + "Ġ 说", + "Ġè¯ ´", + "ĠÑģо Ñģед", + "ĠÑģоÑģ ед", + "åĩ ī", + "ĠÐł е", + "åİŁ æĿ¥", + "ĠÐIJÑĢ Ñħ", + "ب ÙĬÙĨ", + "بÙĬ ÙĨ", + "åľ° 说", + "Ġ ört", + "Ġö rt", + "Ġör t", + "ĠΣ εÏĢ", + "ĠΣε ÏĢ", + "ÂŃ ÙĩاÛĮ", + "ĠاÙĦ اÙĤتص", + "å°½ 管", + "ÑĤ Ñĭй", + "ÑĤÑĭ й", + "t ains", + "ta ins", + "tain s", + "ÙĢ ÙĦ", + "ç§ijæĬĢ æľīéĻIJåħ¬åı¸", + "æı ®", + "ัà¸ķ à¸ĸ", + "á»Ĺ ng", + "ล าà¸Ķ", + "ลา à¸Ķ", + "æļ ®", + "ĠÙĨÙģ Ø³Ùĩ", + "ĠÙĨÙ쨳 Ùĩ", + "Ġ çľĭ", + "Ġçľ ĭ", + "Ġ ãģ¿", + "Ġt arım", + "Ġtar ım", + "Û±Û¹ Ûµ", + "ĠÎ Ĭ", + "Ġkom plex", + "Ġkomple x", + "Ġkomp lex", + "ĠNh Ä©", + "è´¹ ç͍", + "Ġکاربر اÙĨ", + "ÅĪ ovánÃŃ", + "Ġ ků", + "Ġk ů", + "д ап", + "да п", + "Îķ Χ", + "ê·¸ ëŀĺ", + "Ġdön dü", + "人 åĵ¡", + "ĠT iá»ĥu", + "ĠÙĪÛĮر اÛĮØ´", + "Ġö ngör", + "ĠÙĪ ØºÙĬر", + "ĠÑģ кÑĢÑĭ", + "ĠÑģк ÑĢÑĭ", + "âĢIJ '", + "Ġ немÑĥ", + "Ġн емÑĥ", + "Ġне мÑĥ", + "Ġнем Ñĥ", + "ĠH á»ĩ", + "ĠHá» ĩ", + "Ġdüzen li", + "ĠsoutÄĽ že", + "ãĢģ ãĥŀ", + "ÏĦο μα", + "ÄĽ lÃŃ", + "ÄĽl ÃŃ", + "ĠØ£ ÙĦÙħاÙĨ", + "ĠØ£ÙĦ ÙħاÙĨ", + "çł ²", + "Ġtr Ãł", + "Ġ ä¸ĸçķĮ", + "Ġä¸ĸ çķĮ", + "ay ız", + "ayı z", + "ım lı", + "ĠاÙĦØ£ Ùģ", + "íķĺ ëĬĶëį°", + "íķĺëĬĶ ëį°", + "в ано", + "ва но", + "ван о", + "ĠpÅĻi Äįemž", + "Ùĥ ÙĬب", + "ÙĥÙĬ ب", + "ĠмаÑĤ емаÑĤи", + "м ени", + "мен и", + "ме ни", + "ĠпÑĢо екÑĤÑĥ", + "ĠпÑĢоек ÑĤÑĥ", + "ĠпÑĢоекÑĤ Ñĥ", + "ี à¹Ĥà¸Ń", + "ีà¹Ĥ à¸Ń", + "о Ñĥ", + "ĠاÙĦ شرÙĥØ©", + "ĠاÙĦشر ÙĥØ©", + "æ³ £", + "ÙĪÙĤ ÙĬت", + "ÑĪ Ð¸Ð²", + "ÑĪи в", + "Ġperson el", + "Ġpersone l", + "Ġperso nel", + "Ø´ تر", + "شت ر", + "à¸Ķ า", + "Ġë ª½", + "Ġëª ½", + "åĿIJ åľ¨", + "о ке", + "ок е", + "Ġë§Ī ë²ķ", + "ĠØ£ ÙĨا", + "ĠØ£ÙĨ ا", + "ëł µ", + "ĠÙħب اÙĨÛĮ", + "èĭ ¹æŀľ", + "Ġ ศร", + "Ġศ ร", + "ĠÐĽ ÑĥÑĩ", + "ĠÐĽÑĥ Ñĩ", + "ÎŁ ΥΣ", + "ÎŁÎ¥ Σ", + "ĠÄį á", + "ãģĽ ãģ¦", + "Ġk Ä±ÅŁ", + "Ġkı ÅŁ", + "ÑĪ ÐµÐ²", + "ÑĪе в", + "æĮĩ 导", + "à¹ģละ ม", + "Ġvol eb", + "Ġvole b", + "ĠÑģи лÑĭ", + "ĠÑģил Ñĭ", + "Ġdruh ou", + "Ġdru hou", + "Ġ ì°¬", + "Ġì° ¬", + "ĠìŀĪ ìĿĮ", + "Î¥ Σ", + "ä¸į å®ī", + "Ġ ìĹĨìĿĮ", + "ĠìĹĨ ìĿĮ", + "Ġde term", + "Ġdet erm", + "Ġdeter m", + "ĠاÙĦÙħ عÙĦÙĪÙħات", + "íĺ ¹", + "âĻ ¡", + "à¥įब न", + "Ġخش Ú©", + "ĠN ová", + "ĠNo vá", + "ĠNov á", + "ĠÑĦÑĥнда менÑĤ", + "ĠпÑĢогÑĢам и", + "ĠпÑĢогÑĢа ми", + "ĠпÑĢог ÑĢами", + "ĠعÙĦ ÙĬÙĥ", + "ĠعÙĦÙĬ Ùĥ", + "। ĊĊ", + "।Ċ Ċ", + "Ġver iyor", + "Ġveri yor", + "Ġ ÑĶв", + "ĠÑĶ Ð²", + "ĠìŀĪ ëĭ¤ê³ł", + "ĠìŀĪëĭ¤ ê³ł", + "ĠاÙĦØ£Ùħ رÙĬÙĥÙĬ", + "ĠاÙĦØ£Ùħر ÙĬÙĥÙĬ", + "Ġå¤ĸéĥ¨ ãĥªãĥ³ãĤ¯", + "Ġ ä¿®", + "Ġп ÑĥÑĤи", + "ĠпÑĥÑĤ и", + "ĠпÑĥ ÑĤи", + "Ġο Ïģγ", + "ĠоÑģнов ном", + "Ġ наÑĢÑĥж", + "Ġна ÑĢÑĥж", + "ĠнаÑĢ Ñĥж", + "Ġми ÑĢе", + "ĠмиÑĢ Ðµ", + "o vÄĽt", + "ov ÄĽt", + "ovÄĽ t", + "Ġíĥ IJ", + "Ġsok ak", + "Ġspolup ráci", + "ÐĶ Ðļ", + "Ġ åĺ", + "Ġå ĺ", + "âĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸį âĸįâĸįâĸįâĸįâĸįâĸįâĸįâĸį", + "Ġ ³³³³", + "ĠÂł ³³³", + "Ġ³³ ³³", + "Ġ³³³ Âł", + "Ġhay ır", + "Ġ ìĻĶ", + "ĠìĻ Ķ", + "æĤ¨ çļĦ", + "æĮ º", + "Ġ 민주", + "Ġ민 주", + "Ġhot elu", + "Ġhotel u", + "ี à¸ľ", + "ìŀIJ ëıĻ", + "ä¼¼ çļĦ", + "ÎŃν ÏĦÏģο", + "ÎŃνÏĦ Ïģο", + "Ø´ ÙĪ", + "Ġ é¤", + "Ġé ¤", + "Ġ λι", + "Ġλ ι", + "Ġol maktadır", + "Ġolmak tadır", + "ĠоÑģ веÑī", + "Ġв ина", + "Ġви на", + "Ġвин а", + "Ġخاص Ø©", + "r ana", + "ra na", + "ran a", + "γÏģα ÏĨή", + "γÏģαÏĨ ή", + "ÑĨ еÑģ", + "ÑĨе Ñģ", + "ĠdoÄŁru lt", + "ĠdoÄŁr ult", + "ĠÙĤرار داد", + "ĠÙĤرارد اد", + "ĠÐļ ал", + "ĠÐļа л", + "ê²½ ìłľ", + "Ïĩ ÏĮ", + "Ñĥ ÑİÑīий", + "ÑĥÑİ Ñīий", + "ÑĥÑİÑī ий", + "ëĭ ĺìĿ´", + "ëĭĺ ìĿ´", + "ë Į", + "л аз", + "ла з", + "Ġng ừng", + "i sku", + "is ku", + "isk u", + "ìĦł ê±°", + "ĠÑįлек ÑĤÑĢон", + "ĠÑįлекÑĤÑĢ Ð¾Ð½", + "ĠV oj", + "ĠVo j", + "н Ñıми", + "нÑı ми", + "ĠÙĪ Ø£ÙĨ", + "ĠÙĪØ£ ÙĨ", + "äº Ń", + "绣 计", + "ĠÅŁ iÅŁ", + "ĠÅŁi ÅŁ", + "ãĢį çļĦ", + "æŃ ¯", + "Ġкол лек", + "Ġд виж", + "Ġдв иж", + "Ġдви ж", + "Ġn á»Ńa", + "Äįas ÃŃ", + "Ġs onu", + "Ġso nu", + "Ġson u", + "ĠмеÑħ анÑĸз", + "ž ený", + "že ný", + "žen ý", + "Ġза ÑģÑĤÑĥп", + "ĠзаÑģÑĤ Ñĥп", + "ê´Ģ 볨", + "ĠÑĤоваÑĢ Ñĸв", + "ĠÑĤов аÑĢÑĸв", + "Ġ ì¼ĢìĿ´", + "Ġì¼ ĢìĿ´", + "à¥ģà¤Ĺ त", + "Ġzá sob", + "мов ÑĸÑĢ", + "u fac", + "uf ac", + "ů ležit", + "Ġви гоÑĤов", + "Ġвиг оÑĤов", + "ĠاÙĦÙĨ ÙĪ", + "Ġع اÙħا", + "ĠعاÙħ ا", + "æģ ¨", + "ĠìĿ´ë¯¸ ì§Ģ", + "Ġt voÅĻ", + "Ġtv oÅĻ", + "Ġvyu žitÃŃ", + "Ġgel iÅŁim", + "ĠgeliÅŁ im", + "ì³ ¤ëĭ¤", + "หà¸Ļ à¸Ńà¸ĩ", + "ĠìĿ¸ ìłķ", + "à¥į दर", + "à¥įद र", + "ĠпеÑĢед а", + "ĠпеÑĢе да", + "ĠздÑĸйÑģ неннÑı", + "ÙĨ ع", + "è¡£ æľį", + "Ġl oa", + "Ġlo a", + "íĻ Ī", + "èĭ± åĽ½", + "ĠD ruh", + "ĠDr uh", + "Ø® اÙĨ", + "д ам", + "да м", + "аÑĤелÑĮ нÑĭÑħ", + "θ ÏģÏİ", + "ĠØ£ Ùħر", + "ĠØ£Ùħ ر", + "ĠÅĻ ada", + "Ġbul uÅŁ", + "ĠÑĤÑĢанÑģп оÑĢ", + "ĠÑĤÑĢанÑģ поÑĢ", + "ĠÙĤ تÙĦ", + "ĠTa rif", + "ĠTar if", + "R us", + "Ru s", + "ĠзаÑģ Ñĸд", + "Ġİ h", + "l eyin", + "ley in", + "Ġvy rá", + "ĠD ÄĽ", + "иб ли", + "a vou", + "av ou", + "avo u", + "ĠÐĵеÑĢ Ð¼", + "н емÑĥ", + "не мÑĥ", + "нем Ñĥ", + "Ġкон ÑĨеп", + "ĠконÑĨе п", + "ĠÙĤ ادر", + "Ġsou bor", + "Ġl á»iji", + "Ġ çµIJ", + "Ġçµ IJ", + "л еннÑĭй", + "лен нÑĭй", + "κ Ïħ", + "Ġдопом аг", + "à¸ŀวà¸ģ à¹Ģà¸Ĥ", + "Ġqu ang", + "Ġq uang", + "Ġqua ng", + "Ġquan g", + "ĠØ· ÙĦا", + "ĠØ·ÙĦ ا", + "Ġ éĩĮ", + "Ġé ĩĮ", + "Ġéĩ Į", + "ĠÙĨÙħÙĪØ¯ ار", + "ĠÅŁ ar", + "ĠÑģп Ñĸл", + "ÂŃ n", + "ì§Ģ ìļĶ", + "åīį å¾Ģ", + "åħ³ éĶ®", + "å®ŀ åľ¨", + "éŁ³ 楽", + "ĠÙħسئ ÙĦÙĩ", + "Ġy eme", + "Ġye me", + "Ġyem e", + "ĠÑĪ Ð°Ñħ", + "기 ìĪł", + "Ġ สำà¸Ļ", + "Ġสำ à¸Ļ", + "ĠÙĪØ±Ø²Ø´ ÛĮ", + "ĠÙĪØ±Ø² Ø´ÛĮ", + "ãģĹ ãģŁãĤī", + "ãģĹãģŁ ãĤī", + "ί ÏĥÏī", + "ίÏĥ Ïī", + "о кон", + "ок он", + "око н", + "ãģŁ ãĤī", + "ĠØ¥ ÙĦÙĬÙĩ", + "ĠØ¥ÙĦÙĬ Ùĩ", + "ĠØ¥ÙĦ ÙĬÙĩ", + "Ġآذ رب", + "Ġr á»Ŀi", + "Ġod ak", + "Ġм огÑĥ", + "Ġмог Ñĥ", + "Ġмо гÑĥ", + "ĠÚ¯ ÙĨ", + "è² ¼", + "ed la", + "edl a", + "Ġоп ÑĭÑĤ", + "la maktadır", + "lamak tadır", + "å°¼ äºļ", + "éĥ½ ä¼ļ", + "ĠÎĺε ÏĥÏĥα", + "Ġв ог", + "Ġво г", + "ç»Ī äºİ", + "ĠÑĥÑĢов не", + "Ġv lak", + "Ġvl ak", + "ĠØ¢ ÙĦØ©", + "ĠØ¢ÙĦ Ø©", + "Ġε ιδ", + "Ġει δ", + "â ĩ", + "д ÑĥÑĤ", + "дÑĥ ÑĤ", + "Ñĸ нг", + "Ñĸн г", + "ĠØ£Ùħ رÙĬÙĥÙĬ", + "ĠØ£Ùħر ÙĬÙĥÙĬ", + "از ÙĨد", + "Ġب اÙĦØ£", + "ĠباÙĦ Ø£", + "Ġत न", + "Ġkay det", + "룬 리", + "Ġ drž", + "Ġd rž", + "Ġdr ž", + "Ġп енÑģ", + "Ġпен Ñģ", + "ĠpÅĻÃŃ Äį", + "ĠТ олÑĮко", + "Ġб аÑĤаÑĢ", + "Ġба ÑĤаÑĢ", + "éĵģ è·¯", + "ĠÙ¾ÛĮ ÚĨ", + "ĠÎĵ εÏī", + "ĠαÏħ ÏĦά", + "Äŀ I", + "ĠакÑĤив но", + "ÎĹ ÎľÎij", + "ÎĹÎľ Îij", + "Ġvar lık", + "Ġ åıª", + "Ġåı ª", + "ĠзаÑī иÑĤÑĭ", + "ĠзаÑīиÑĤ Ñĭ", + "л им", + "ли м", + "ĠÙħشاÙĩ دة", + "и ком", + "ик ом", + "Ġì¡° ìĤ¬", + "о ген", + "ог ен", + "Ġm ấy", + "g ii", + "gi i", + "èĽ ĩ", + "ĠØ® ÙĪÛĮØ´", + "ĠØ®ÙĪ ÛĮØ´", + "Ġn ová", + "Ġno vá", + "Ġnov á", + "к овой", + "ков ой", + "ково й", + "Ġkan ıt", + "Ġkanı t", + "éĿ¢ è®®", + "ĠرÙĪØ³Øª ا", + "ìĸ´ ê°Ģ", + "ĠоÑĤноÑĪ ÐµÐ½Ð¸Ñı", + "Ġhodnot y", + "ÙĪ Ø±Ø§Øª", + "ÙĪØ± ات", + "ÙĪØ±Ø§ ت", + "ĠpÅĻ ÃŃst", + "ĠpÅĻÃŃ st", + "Ġth á»į", + "Ġthá» į", + "Ġçık art", + "Ġçıkar t", + "Ġçı kart", + "о обÑĢаз", + "Ġnem ÄĽl", + "Âł ro", + "ĠدÙĪÙĦ تÛĮ", + "ĠدÙĪÙĦت ÛĮ", + "ี ,", + "ä¸Ģ 度", + "ia omi", + "iao mi", + "åĹ İ", + "Ùı ع", + "ĠваÑĢи ан", + "Ġpod aÅĻilo", + "ĠëĤĺ ê°Ģ", + "èIJ¥ ä¸ļ", + "ĠабÑģолÑİÑĤ но", + "Ġë¸Į ëĿ¼", + "ĠгоÑĢ Ð¸Ð·", + "a ģın", + "aÄŁ ın", + "aģı n", + "Ġyer ini", + "Ġyeri ni", + "à¹īา à¸Ļà¸Ķ", + "à¹īาà¸Ļ à¸Ķ", + "æIJ ¬", + "Ġb alık", + "Ġbal ık", + "Ġba lık", + "ĠÅŁ ans", + "认 è¯Ĩ", + "Ġistedi ÄŁiniz", + "Ġjist ÄĽ", + "Ġ ìĪĺê°Ģ", + "ĠìĪĺ ê°Ģ", + "ï¼Į ä¸Ĭ", + "à¤ľ ब", + "Ġви Ñıви", + "ĠвиÑıв и", + "ë§ ¥", + "ãģĹ ãģ¦ãĤĭ", + "ãģĹãģ¦ ãĤĭ", + "ÙĬÙĥ ا", + "ĠH üs", + "c ının", + "Ġश त", + "ĠÑĢаÑģп олаг", + "ĠÑģпÑĢав ж", + "ืà¸Ń à¸ĸ", + "ĠвеÑĢ ÑĤик", + "Ġvy stav", + "ĠÑĢе алÑĸзаÑĨÑĸÑĹ", + "в ами", + "ва ми", + "ãĤ¹ ãĥĨãĤ£", + "ãĤ¹ãĥĨ ãĤ£", + "ëħ ģ", + "ĠÑĢе ÑĩÑĸ", + "ĠÑĢеÑĩ Ñĸ", + "Ùģ Ø§ÙĦ", + "िà¤ķ à¤Ł", + "ĠвозÑĢаÑģÑĤ е", + "к аÑģ", + "ка Ñģ", + "ĠÐĺ Ñģ", + "Ġл Ñĸк", + "ĠлÑĸ к", + "ĠÏĥη μαν", + "м енÑĤÑĥ", + "мен ÑĤÑĥ", + "менÑĤ Ñĥ", + "н ÑıÑİÑĤ", + "нÑı ÑİÑĤ", + "æŁ ´", + "Ġθ εÏī", + "Ġθε Ïī", + "çĬ¯ 罪", + "ĠÙĤ طر", + "ĠÙĤØ· ر", + "ÐĶ ÐIJ", + "- |", + "Ġ ÑģÑĤÑĸ", + "ĠÑģ ÑĤÑĸ", + "ĠÑģÑĤ Ñĸ", + "Ġu yum", + "Ġuy um", + "Ġpot ÅĻeba", + "ĠpotÅĻeb a", + "ĠعÙħÙĦ ÛĮات", + "ĠعÙħÙĦÛĮ ات", + "å¥ ª", + "ا خر", + "اخ ر", + "ĠÚ© ساÙĨÛĮ", + "ت Ùħر", + "تÙħ ر", + "ÑĮ еÑĢ", + "ÑĮе ÑĢ", + "ĠN ez", + "ĠNe z", + "íļĮ ìĤ¬", + "ĠBank ası", + "е гÑĢа", + "ег ÑĢа", + "à¸Ĥà¸ĵะ à¸Ĺ", + "åIJĪ æł¼", + "ĠìŬ룬 ë¶Ħ", + "y asal", + "ya sal", + "yas al", + "Ġ è¡ĮæĶ¿", + "Ġè¡Į æĶ¿", + "åĬ ī", + "dık tan", + "ãĤ¢ãĥ« ãĥIJ", + "ĠاÛĮÙĨ ÚĨ", + "Ġdij ital", + "å° ĺ", + "ĠÑĢаз меÑī", + "ĠÑĢазм еÑī", + "ĠкÑĸлÑĮ коÑģÑĤÑĸ", + "ĠEv ropy", + "ĠEvrop y", + "ĠÑĢоз ви", + "ÑİÑī ÑĥÑİ", + "Ġ ong", + "Ġo ng", + "Ġon g", + "Ġhe psi", + "Ġhep si", + "v ailability", + "vail ability", + "Ġتص ÙħÙĬÙħ", + "ĠتصÙħ ÙĬÙħ", + "Ñĥ йÑĤе", + "Ñĥй ÑĤе", + "ह ल", + "ĠÅ¡ iro", + "Ġp ás", + "Ġpá s", + ";; ;;;;", + ";;;; ;;", + ";;; ;;;", + "éħį åIJĪ", + "ĠاÙĦعاÙĦÙħ ÙĬØ©", + "ÐĴ о", + "h af", + "ha f", + "l áv", + "lá v", + "Ġb ì", + "Ġm ůj", + "Ġmů j", + "ê»ĺ ìĦľ", + "ÂłB f", + "ĠÑģпÑĢоÑģ ил", + "âĢĮÚ©ÙĨ ÙĨدÙĩ", + "âĢĮÚ©ÙĨÙĨد Ùĩ", + "ÙĨد ÙĬØ©", + "ÙĨدÙĬ Ø©", + "çī¹ èī²", + "Ġìķ ¨", + "ุษ ย", + "ĠФ оÑĢ", + "пиÑģ ок", + "пи Ñģок", + "u žel", + "ım lar", + "çĬ¶ æ³ģ", + "Ġãĥ¬ ãĥĩãĤ£ãĥ¼ãĤ¹", + "Ñħ ови", + "Ñħов и", + "Ñħо ви", + "ÂłK Äį", + "Ñĩ им", + "Ñĩи м", + "Ġت ÙĪÙħ", + "ĠتÙĪ Ùħ", + "à¹Ģà¸ģษ à¸ķร", + "Ġìĭ± ê¸Ģ", + "Ùħ ارات", + "Ùħا رات", + "Ùħار ات", + "ê nh", + "ên h", + "ĠÅĻ id", + "æĬ ¬", + "Ñģ иÑİ", + "Ñģи Ñİ", + "æħ İ", + "Ġçev re", + "Ġçevr e", + "ãĥĪ ãĥ«", + "Ġyıl dır", + "Ġzá znam", + "Ġzáz nam", + "æľº åľº", + "Ġпо ÑĶ", + "ĠвÑĭ ÑĢаÑīи", + "Ġ Ù쨹", + "ĠÙģ Ø¹", + "ë »", + "Ġدار ÛĮÙħ", + "ï¼Į æĽ´", + "Ġзем ли", + "اب ÙĤات", + "ابÙĤ ات", + "Ġm á»Ŀi", + "Ġmá» Ŀi", + "k ých", + "ký ch", + "ÙĦ اة", + "ÙĦا Ø©", + "å¸ ½", + "بر اÙĩÙĬÙħ", + "Ġпо баÑĩ", + "Ġпоб аÑĩ", + "Ġпоба Ñĩ", + "ाà¤ĩ म", + "à¹Īาà¸ĩ à¸Ľà¸£à¸°à¹Ģà¸Ĺศ", + "ĠìĦ¸ ìĥģ", + "Ġпомог аеÑĤ", + "ĠÏĦÏĮ Ïĥο", + "æĸ ·", + "ĠÙ쨱 اÙĪ", + "à¹Ħà¸Ľ ย", + "erg isi", + "Ġ éĻIJ", + "ĠéĻ IJ", + ". xz", + ".x z", + "ĠÑģл ÑĥÑħ", + "ĠÑģлÑĥ Ñħ", + "е коном", + "ек оном", + "еко ном", + "ĠNh ất", + "± Ø·", + "ĠëĪĪ ìĿĦ", + "Ġ íļĮìĤ¬", + "ĠíļĮ ìĤ¬", + "Ñ ĵ", + "Ġ åIJįçĦ¡ãģĹ", + "ĠåIJį çĦ¡ãģĹ", + "Ġομά δα", + "ĩ Į", + "li ÄŁinin", + "liÄŁi nin", + "liÄŁ inin", + "liÄŁini n", + "liÄŁin in", + "ع اÙĨ", + "عا ÙĨ", + "Ġز ÙĨÛĮ", + "ĠزÙĨ ÛĮ", + "T ôi", + "Ġet ki", + "Ġetk i", + "ĠìŰ ëĿ½", + "Ġкон ÑĨа", + "è° ĭ", + "Ġзем лÑı", + "íĻĺ ê²½", + "ĠÙħÚ© اÙĨÛĮ", + "ĠÙħکاÙĨ ÛĮ", + "çĸ ²", + "Ġ ç¢", + "Ġç ¢", + "Ġkur ulan", + "Ġkurul an", + "Ġkuru lan", + "ؤ ÙĪÙĦ", + "د Ùī", + "ĠاÙĦÙħÙĨ Ø·ÙĤØ©", + "Ġn ắng", + "ÐŁ Ðļ", + "ол ай", + "ола й", + "Y K", + "åij Ĩ", + "λ αν", + "λα ν", + "西 çľģ", + "ĠÎĴ αÏĥ", + "ĠÎĴα Ïĥ", + "ĠíĻķ ìĭ¤", + "Z D", + "п Ñĸд", + "Ġ наÑĩе", + "Ġн аÑĩе", + "Ġна Ñĩе", + "ĠнаÑĩ е", + "Ġ ÏĦά", + "ĠÏĦ ά", + "å½ »", + "âĢŀ D", + "Ġ èĩº", + "Ġèĩ º", + "Ġна ÑĪей", + "ĠнаÑĪ ÐµÐ¹", + "ĠtÃŃm to", + "Ġت سÙħ", + "Ġتس Ùħ", + "Ïģθ Ïģο", + "令 人", + "ĠP azar", + "ĠPa zar", + "ĠPaz ar", + "ãĤĵ ãģ¨", + "ç«ĭ åĪ»", + "Âģ @", + "Ġb ắc", + "ìĬ¤ íħĮ", + "Ġkadın lar", + "fig ur", + "ãģ¤ ãģ¶", + "Ġæµ Ļæ±Ł", + "Ġдек ÑĸлÑĮ", + "è¡ Ŀ", + "ยà¸Ļ à¹ģà¸Ľà¸¥à¸ĩ", + "o let", + "ol et", + "ole t", + "Ġned ok", + "n amen", + "name n", + "na men", + "nam en", + "åħĦ å¼Ł", + "ืà¸Ń à¸Ĥ", + "èĤ ĥ", + "Ġb üny", + "Ġbü ny", + "ĠÑĢад Ñıн", + "ãĢģ äºĮ", + "ан нÑİ", + "Ġ æīĭæľº", + "Ġæīĭ æľº", + "ĠоÑģ лож", + "Ġо глÑı", + "Ġог лÑı", + "Ġسب ز", + "Ġaktiv it", + "Ġà¤ı प", + "ç« ľ", + "Ġd iren", + "Ġdi ren", + "Ġdir en", + "Ġdire n", + "i в", + "ĠY atırım", + "ÑĨÑĸй на", + "Ġдо мов", + "Ġдом ов", + "ẳ n", + "ĠC oÄŁraf", + "Ùģ ÙĪ", + "æ°Ĺ ãģ«åħ¥", + "ç§ģ ãģ®", + "ï½ į", + "à¥Į ड", + "ĠÐĵÑĢи гоÑĢ", + "ĠP eygamber", + "ĠPey gamber", + "Ġα γα", + "Ġαγ α", + "Ġef ekt", + "ĠìŀĪ ìĸ´ìĦľ", + "ĠìŀĪìĸ´ ìĦľ", + "ĠплаÑĤ еж", + "ĠT rab", + "ĠTr ab", + "ĠTra b", + "o very", + "ov ery", + "ove ry", + "over y", + "â̦â̦ ãĢĤ", + "Ġyap maya", + "Ġнайб ÑĸлÑĮ", + "ĠÙħÙĨ زÙĦ", + "ÙĪ ÙĬÙĥ", + "ÙĪÙĬ Ùĥ", + "ıl dıģında", + "ıldı ģında", + "ıldıģı nda", + "ĠpÅĻÃŃpad nÄĽ", + "ĠμÏĢο ÏģοÏį", + "Ġëĵľ ëĿ¼ë§Ī", + "Ġë°© 문", + "ĠС им", + "ĠСи м", + "Ú© ات", + "کا ت", + "е ком", + "ек ом", + "еко м", + "ر ÙĬع", + "رÙĬ ع", + "Ùĩد Ùģ", + "æĹı èĩªæ²»", + "Ġzm ÄĽn", + "ĠzmÄĽ n", + "Ġв клад", + "Ġвк лад", + "Ġ بÙĦغ", + "ĠبÙĦ غ", + "Ġ ç§ĭ", + "Ġç§ ĭ", + "N gh", + "Ng h", + "Ġend iÅŁ", + "ĠCumhurbaÅŁ kanı", + "ĠK af", + "ĠKa f", + "Ġ à¹ģหล", + "Ġà¹ģ หล", + "Ġmut lu", + "ĠÑģ иÑĢ", + "ĠÑģи ÑĢ", + "Ġг Ñĥм", + "æ¿ ĥ", + "çĤ ī", + "ĠB áo", + "à¥Ĥ ष", + "Ġìłķ íĻķ", + "ान स", + "ï» ¤", + "наÑģлÑĸд ок", + "po Äįet", + "poÄį et", + "ë§ĮìĽIJ ìŀħëĭĪëĭ¤", + "ĠìĦľìļ¸ íĬ¹ë³Ħìĭľ", + "Îķ ÎĻΣ", + "ÎķÎĻ Î£", + "ุม à¸Ĭà¸Ļ", + "Ġм ÑĸлÑĮ", + "ĠмÑĸ лÑĮ", + "æ ħĮ", + "æħ Į", + "Ïĥκε ÏĦαι", + "Ïĥκ εÏĦαι", + "Ġ ãĢľ", + "ĠãĢ ľ", + "Ġkal iteli", + "ĠÑģмеÑĢ ÑĤÑĮ", + "è¼ Ķ", + "Ġ биÑĤ", + "Ġб иÑĤ", + "Ġби ÑĤ", + "ĠΣ ÏĦο", + "à¸ĩà¹Ģศ ส", + "åİŁ æľ¬", + "Ġk nÃŃ", + "Ġkn ÃŃ", + "äºĴ èģĶç½ij", + "ĠÑĩеловеÑĩ еÑģ", + "çŃ Ĵ", + "à¸Īำ หà¸Ļ", + "åĩº åİ»", + "ãĤ¢ ãĥĭãĥ¡", + "å±ķ 示", + "r ych", + "ry ch", + "à¤ħ ब", + "o ÅĪ", + "jÃŃ cÃŃm", + "jÃŃcÃŃ m", + "ا ØŃØ«", + "اØŃ Ø«", + "ĠÙĪØ§ÙĤع ÛĮ", + "ĠФедеÑĢа лÑĮ", + "ĠФед еÑĢалÑĮ", + "Ñģ ам", + "Ñģа м", + "Ġ ìĺ¥", + "Ġìĺ ¥", + "åľ° çIJĥ", + "Ġs uyu", + "Ġsu yu", + "Ġsuy u", + "s eniz", + "sen iz", + "à¥ī फ", + "Ġê°Ļ ëĭ¤", + "ĠпÑĢизна ÑĩеннÑı", + "ĠпÑĢизнаÑĩ еннÑı", + "ĠS ın", + "ĠSı n", + "ĠاÙħÙĨ ÛĮت", + "Ġl átky", + "ĠÐij и", + "Ġsür eci", + "Ġsüre ci", + "Ġsürec i", + "·· ··", + "Ġê²½ ì°°", + "Ġк алÑĮ", + "Ġка лÑĮ", + "Ġкал ÑĮ", + "Ġник ÑĤо", + "Ùij Ùħ", + "ĠدÙĬ گر", + "Ġalın ması", + "л еннÑĸ", + "лен нÑĸ", + "ิว à¹Ģà¸ķà¸Ńร", + "à¸Ľà¸ģ à¸Ħรà¸Ńà¸ĩ", + "Ġзаконодав ÑģÑĤва", + "ãĢĢ ãĤ¤", + "Ġëħ¸ íķĺìļ°", + "ĠD Ã¼ÅŁ", + "Ġг ÑĥÑģÑĤ", + "ĠÐĴ аÑĪ", + "ĠاÙħ تÛĮ", + "Ġpar amet", + "Ġparam et", + "Ġpara met", + "ĠÎłÎ±Î½ εÏĢ", + "à¹Į à¸ģร", + "à¹Įà¸ģ ร", + "ζ α", + "ĠëįĶ ìļ±", + "ÙĪ ÙĦات", + "ÙĪÙĦ ات", + "ÙĪÙĦا ت", + "в аÑĤиÑģÑı", + "ва ÑĤиÑģÑı", + "ваÑĤи ÑģÑı", + "Ġk ök", + "Ġkö k", + "ÙĨ ب", + "ĠвÑĭÑģок ой", + "ãĥ¼ ãĥ¼", + "ãĥ¼ãĥ ¼", + "éĶ ¦" + ] + } +} \ No newline at end of file diff --git a/comfy/text_encoders/llama_tokenizer/tokenizer_config.json b/comfy/text_encoders/llama_tokenizer/tokenizer_config.json new file mode 100644 index 000000000..0b336f5a5 --- /dev/null +++ b/comfy/text_encoders/llama_tokenizer/tokenizer_config.json @@ -0,0 +1,2095 @@ +{ + "add_bos_token": true, + "add_eos_token": false, + "add_prefix_space": null, + "added_tokens_decoder": { + "128000": { + "content": "<|begin_of_text|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128001": { + "content": "<|end_of_text|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128002": { + "content": "<|reserved_special_token_0|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128003": { + "content": "<|reserved_special_token_1|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128004": { + "content": "<|reserved_special_token_2|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128005": { + "content": "<|reserved_special_token_3|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128006": { + "content": "<|start_header_id|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128007": { + "content": "<|end_header_id|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128008": { + "content": "<|reserved_special_token_4|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128009": { + "content": "<|eot_id|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128010": { + "content": "<|reserved_special_token_5|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128011": { + "content": "<|reserved_special_token_6|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128012": { + "content": "<|reserved_special_token_7|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128013": { + "content": "<|reserved_special_token_8|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128014": { + "content": "<|reserved_special_token_9|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128015": { + "content": "<|reserved_special_token_10|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128016": { + "content": "<|reserved_special_token_11|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128017": { + "content": "<|reserved_special_token_12|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128018": { + "content": "<|reserved_special_token_13|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128019": { + "content": "<|reserved_special_token_14|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128020": { + "content": "<|reserved_special_token_15|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128021": { + "content": "<|reserved_special_token_16|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128022": { + "content": "<|reserved_special_token_17|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128023": { + "content": "<|reserved_special_token_18|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128024": { + "content": "<|reserved_special_token_19|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128025": { + "content": "<|reserved_special_token_20|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128026": { + "content": "<|reserved_special_token_21|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128027": { + "content": "<|reserved_special_token_22|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128028": { + "content": "<|reserved_special_token_23|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128029": { + "content": "<|reserved_special_token_24|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128030": { + "content": "<|reserved_special_token_25|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128031": { + "content": "<|reserved_special_token_26|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128032": { + "content": "<|reserved_special_token_27|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128033": { + "content": "<|reserved_special_token_28|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128034": { + "content": "<|reserved_special_token_29|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128035": { + "content": "<|reserved_special_token_30|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128036": { + "content": "<|reserved_special_token_31|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128037": { + "content": "<|reserved_special_token_32|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128038": { + "content": "<|reserved_special_token_33|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128039": { + "content": "<|reserved_special_token_34|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128040": { + "content": "<|reserved_special_token_35|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128041": { + "content": "<|reserved_special_token_36|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128042": { + "content": "<|reserved_special_token_37|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128043": { + "content": "<|reserved_special_token_38|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128044": { + "content": "<|reserved_special_token_39|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128045": { + "content": "<|reserved_special_token_40|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128046": { + "content": "<|reserved_special_token_41|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128047": { + "content": "<|reserved_special_token_42|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128048": { + "content": "<|reserved_special_token_43|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128049": { + "content": "<|reserved_special_token_44|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128050": { + "content": "<|reserved_special_token_45|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128051": { + "content": "<|reserved_special_token_46|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128052": { + "content": "<|reserved_special_token_47|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128053": { + "content": "<|reserved_special_token_48|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128054": { + "content": "<|reserved_special_token_49|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128055": { + "content": "<|reserved_special_token_50|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128056": { + "content": "<|reserved_special_token_51|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128057": { + "content": "<|reserved_special_token_52|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128058": { + "content": "<|reserved_special_token_53|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128059": { + "content": "<|reserved_special_token_54|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128060": { + "content": "<|reserved_special_token_55|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128061": { + "content": "<|reserved_special_token_56|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128062": { + "content": "<|reserved_special_token_57|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128063": { + "content": "<|reserved_special_token_58|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128064": { + "content": "<|reserved_special_token_59|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128065": { + "content": "<|reserved_special_token_60|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128066": { + "content": "<|reserved_special_token_61|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128067": { + "content": "<|reserved_special_token_62|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128068": { + "content": "<|reserved_special_token_63|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128069": { + "content": "<|reserved_special_token_64|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128070": { + "content": "<|reserved_special_token_65|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128071": { + "content": "<|reserved_special_token_66|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128072": { + "content": "<|reserved_special_token_67|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128073": { + "content": "<|reserved_special_token_68|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128074": { + "content": "<|reserved_special_token_69|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128075": { + "content": "<|reserved_special_token_70|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128076": { + "content": "<|reserved_special_token_71|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128077": { + "content": "<|reserved_special_token_72|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128078": { + "content": "<|reserved_special_token_73|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128079": { + "content": "<|reserved_special_token_74|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128080": { + "content": "<|reserved_special_token_75|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128081": { + "content": "<|reserved_special_token_76|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128082": { + "content": "<|reserved_special_token_77|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128083": { + "content": "<|reserved_special_token_78|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128084": { + "content": "<|reserved_special_token_79|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128085": { + "content": "<|reserved_special_token_80|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128086": { + "content": "<|reserved_special_token_81|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128087": { + "content": "<|reserved_special_token_82|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128088": { + "content": "<|reserved_special_token_83|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128089": { + "content": "<|reserved_special_token_84|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128090": { + "content": "<|reserved_special_token_85|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128091": { + "content": "<|reserved_special_token_86|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128092": { + "content": "<|reserved_special_token_87|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128093": { + "content": "<|reserved_special_token_88|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128094": { + "content": "<|reserved_special_token_89|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128095": { + "content": "<|reserved_special_token_90|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128096": { + "content": "<|reserved_special_token_91|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128097": { + "content": "<|reserved_special_token_92|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128098": { + "content": "<|reserved_special_token_93|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128099": { + "content": "<|reserved_special_token_94|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128100": { + "content": "<|reserved_special_token_95|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128101": { + "content": "<|reserved_special_token_96|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128102": { + "content": "<|reserved_special_token_97|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128103": { + "content": "<|reserved_special_token_98|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128104": { + "content": "<|reserved_special_token_99|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128105": { + "content": "<|reserved_special_token_100|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128106": { + "content": "<|reserved_special_token_101|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128107": { + "content": "<|reserved_special_token_102|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128108": { + "content": "<|reserved_special_token_103|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128109": { + "content": "<|reserved_special_token_104|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128110": { + "content": "<|reserved_special_token_105|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128111": { + "content": "<|reserved_special_token_106|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128112": { + "content": "<|reserved_special_token_107|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128113": { + "content": "<|reserved_special_token_108|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128114": { + "content": "<|reserved_special_token_109|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128115": { + "content": "<|reserved_special_token_110|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128116": { + "content": "<|reserved_special_token_111|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128117": { + "content": "<|reserved_special_token_112|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128118": { + "content": "<|reserved_special_token_113|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128119": { + "content": "<|reserved_special_token_114|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128120": { + "content": "<|reserved_special_token_115|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128121": { + "content": "<|reserved_special_token_116|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128122": { + "content": "<|reserved_special_token_117|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128123": { + "content": "<|reserved_special_token_118|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128124": { + "content": "<|reserved_special_token_119|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128125": { + "content": "<|reserved_special_token_120|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128126": { + "content": "<|reserved_special_token_121|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128127": { + "content": "<|reserved_special_token_122|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128128": { + "content": "<|reserved_special_token_123|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128129": { + "content": "<|reserved_special_token_124|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128130": { + "content": "<|reserved_special_token_125|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128131": { + "content": "<|reserved_special_token_126|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128132": { + "content": "<|reserved_special_token_127|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128133": { + "content": "<|reserved_special_token_128|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128134": { + "content": "<|reserved_special_token_129|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128135": { + "content": "<|reserved_special_token_130|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128136": { + "content": "<|reserved_special_token_131|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128137": { + "content": "<|reserved_special_token_132|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128138": { + "content": "<|reserved_special_token_133|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128139": { + "content": "<|reserved_special_token_134|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128140": { + "content": "<|reserved_special_token_135|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128141": { + "content": "<|reserved_special_token_136|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128142": { + "content": "<|reserved_special_token_137|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128143": { + "content": "<|reserved_special_token_138|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128144": { + "content": "<|reserved_special_token_139|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128145": { + "content": "<|reserved_special_token_140|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128146": { + "content": "<|reserved_special_token_141|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128147": { + "content": "<|reserved_special_token_142|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128148": { + "content": "<|reserved_special_token_143|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128149": { + "content": "<|reserved_special_token_144|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128150": { + "content": "<|reserved_special_token_145|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128151": { + "content": "<|reserved_special_token_146|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128152": { + "content": "<|reserved_special_token_147|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128153": { + "content": "<|reserved_special_token_148|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128154": { + "content": "<|reserved_special_token_149|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128155": { + "content": "<|reserved_special_token_150|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128156": { + "content": "<|reserved_special_token_151|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128157": { + "content": "<|reserved_special_token_152|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128158": { + "content": "<|reserved_special_token_153|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128159": { + "content": "<|reserved_special_token_154|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128160": { + "content": "<|reserved_special_token_155|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128161": { + "content": "<|reserved_special_token_156|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128162": { + "content": "<|reserved_special_token_157|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128163": { + "content": "<|reserved_special_token_158|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128164": { + "content": "<|reserved_special_token_159|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128165": { + "content": "<|reserved_special_token_160|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128166": { + "content": "<|reserved_special_token_161|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128167": { + "content": "<|reserved_special_token_162|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128168": { + "content": "<|reserved_special_token_163|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128169": { + "content": "<|reserved_special_token_164|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128170": { + "content": "<|reserved_special_token_165|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128171": { + "content": "<|reserved_special_token_166|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128172": { + "content": "<|reserved_special_token_167|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128173": { + "content": "<|reserved_special_token_168|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128174": { + "content": "<|reserved_special_token_169|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128175": { + "content": "<|reserved_special_token_170|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128176": { + "content": "<|reserved_special_token_171|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128177": { + "content": "<|reserved_special_token_172|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128178": { + "content": "<|reserved_special_token_173|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128179": { + "content": "<|reserved_special_token_174|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128180": { + "content": "<|reserved_special_token_175|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128181": { + "content": "<|reserved_special_token_176|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128182": { + "content": "<|reserved_special_token_177|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128183": { + "content": "<|reserved_special_token_178|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128184": { + "content": "<|reserved_special_token_179|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128185": { + "content": "<|reserved_special_token_180|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128186": { + "content": "<|reserved_special_token_181|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128187": { + "content": "<|reserved_special_token_182|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128188": { + "content": "<|reserved_special_token_183|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128189": { + "content": "<|reserved_special_token_184|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128190": { + "content": "<|reserved_special_token_185|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128191": { + "content": "<|reserved_special_token_186|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128192": { + "content": "<|reserved_special_token_187|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128193": { + "content": "<|reserved_special_token_188|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128194": { + "content": "<|reserved_special_token_189|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128195": { + "content": "<|reserved_special_token_190|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128196": { + "content": "<|reserved_special_token_191|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128197": { + "content": "<|reserved_special_token_192|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128198": { + "content": "<|reserved_special_token_193|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128199": { + "content": "<|reserved_special_token_194|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128200": { + "content": "<|reserved_special_token_195|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128201": { + "content": "<|reserved_special_token_196|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128202": { + "content": "<|reserved_special_token_197|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128203": { + "content": "<|reserved_special_token_198|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128204": { + "content": "<|reserved_special_token_199|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128205": { + "content": "<|reserved_special_token_200|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128206": { + "content": "<|reserved_special_token_201|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128207": { + "content": "<|reserved_special_token_202|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128208": { + "content": "<|reserved_special_token_203|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128209": { + "content": "<|reserved_special_token_204|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128210": { + "content": "<|reserved_special_token_205|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128211": { + "content": "<|reserved_special_token_206|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128212": { + "content": "<|reserved_special_token_207|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128213": { + "content": "<|reserved_special_token_208|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128214": { + "content": "<|reserved_special_token_209|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128215": { + "content": "<|reserved_special_token_210|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128216": { + "content": "<|reserved_special_token_211|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128217": { + "content": "<|reserved_special_token_212|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128218": { + "content": "<|reserved_special_token_213|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128219": { + "content": "<|reserved_special_token_214|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128220": { + "content": "<|reserved_special_token_215|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128221": { + "content": "<|reserved_special_token_216|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128222": { + "content": "<|reserved_special_token_217|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128223": { + "content": "<|reserved_special_token_218|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128224": { + "content": "<|reserved_special_token_219|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128225": { + "content": "<|reserved_special_token_220|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128226": { + "content": "<|reserved_special_token_221|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128227": { + "content": "<|reserved_special_token_222|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128228": { + "content": "<|reserved_special_token_223|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128229": { + "content": "<|reserved_special_token_224|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128230": { + "content": "<|reserved_special_token_225|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128231": { + "content": "<|reserved_special_token_226|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128232": { + "content": "<|reserved_special_token_227|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128233": { + "content": "<|reserved_special_token_228|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128234": { + "content": "<|reserved_special_token_229|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128235": { + "content": "<|reserved_special_token_230|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128236": { + "content": "<|reserved_special_token_231|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128237": { + "content": "<|reserved_special_token_232|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128238": { + "content": "<|reserved_special_token_233|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128239": { + "content": "<|reserved_special_token_234|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128240": { + "content": "<|reserved_special_token_235|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128241": { + "content": "<|reserved_special_token_236|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128242": { + "content": "<|reserved_special_token_237|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128243": { + "content": "<|reserved_special_token_238|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128244": { + "content": "<|reserved_special_token_239|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128245": { + "content": "<|reserved_special_token_240|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128246": { + "content": "<|reserved_special_token_241|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128247": { + "content": "<|reserved_special_token_242|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128248": { + "content": "<|reserved_special_token_243|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128249": { + "content": "<|reserved_special_token_244|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128250": { + "content": "<|reserved_special_token_245|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128251": { + "content": "<|reserved_special_token_246|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128252": { + "content": "<|reserved_special_token_247|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128253": { + "content": "<|reserved_special_token_248|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128254": { + "content": "<|reserved_special_token_249|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128255": { + "content": "<|reserved_special_token_250|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128256": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128257": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "128258": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + } + }, + "bos_token": "<|begin_of_text|>", + "chat_template": "{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim + '<|eot_id|>' %}{% if loop.index0 == 0 %}{% set content = bos_token + content %}{% endif %}{{ content }}{% endfor %}{{ '<|start_header_id|>assistant<|end_header_id|>\n\n' }}", + "clean_up_tokenization_spaces": true, + "eos_token": "<|end_of_text|>", + "legacy": true, + "model_input_names": [ + "input_ids", + "attention_mask" + ], + "model_max_length": 1000000000000000019884624838656, + "pad_token": "", + "padding_side": "right", + "processor_class": "LlavaProcessor", + "tokenizer_class": "LlamaTokenizer", + "unk_token": "", + "use_default_system_prompt": false +} diff --git a/comfy/text_encoders/long_clipl.py b/comfy/text_encoders/long_clipl.py index 4677fb3b0..b81912cb3 100644 --- a/comfy/text_encoders/long_clipl.py +++ b/comfy/text_encoders/long_clipl.py @@ -6,9 +6,9 @@ class LongClipTokenizer_(sd1_clip.SDTokenizer): super().__init__(max_length=248, embedding_directory=embedding_directory, tokenizer_data=tokenizer_data) class LongClipModel_(sd1_clip.SDClipModel): - def __init__(self, device="cpu", dtype=None, model_options={}): + def __init__(self, *args, **kwargs): textmodel_json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "long_clipl.json") - super().__init__(device=device, textmodel_json_config=textmodel_json_config, return_projected_pooled=False, dtype=dtype, model_options=model_options) + super().__init__(*args, textmodel_json_config=textmodel_json_config, **kwargs) class LongClipTokenizer(sd1_clip.SD1Tokenizer): def __init__(self, embedding_directory=None, tokenizer_data={}): @@ -17,3 +17,14 @@ class LongClipTokenizer(sd1_clip.SD1Tokenizer): class LongClipModel(sd1_clip.SD1ClipModel): def __init__(self, device="cpu", dtype=None, model_options={}, **kwargs): super().__init__(device=device, dtype=dtype, model_options=model_options, clip_model=LongClipModel_, **kwargs) + +def model_options_long_clip(sd, tokenizer_data, model_options): + w = sd.get("clip_l.text_model.embeddings.position_embedding.weight", None) + if w is None: + w = sd.get("text_model.embeddings.position_embedding.weight", None) + if w is not None and w.shape[0] == 248: + tokenizer_data = tokenizer_data.copy() + model_options = model_options.copy() + tokenizer_data["clip_l_tokenizer_class"] = LongClipTokenizer_ + model_options["clip_l_class"] = LongClipModel_ + return tokenizer_data, model_options diff --git a/comfy/text_encoders/lt.py b/comfy/text_encoders/lt.py new file mode 100644 index 000000000..5c2ce583f --- /dev/null +++ b/comfy/text_encoders/lt.py @@ -0,0 +1,18 @@ +from comfy import sd1_clip +import os +from transformers import T5TokenizerFast +import comfy.text_encoders.genmo + +class T5XXLTokenizer(sd1_clip.SDTokenizer): + def __init__(self, embedding_directory=None, tokenizer_data={}): + tokenizer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "t5_tokenizer") + super().__init__(tokenizer_path, embedding_directory=embedding_directory, pad_with_end=False, embedding_size=4096, embedding_key='t5xxl', tokenizer_class=T5TokenizerFast, has_start_token=False, pad_to_max_length=False, max_length=99999999, min_length=128) #pad to 128? + + +class LTXVT5Tokenizer(sd1_clip.SD1Tokenizer): + def __init__(self, embedding_directory=None, tokenizer_data={}): + super().__init__(embedding_directory=embedding_directory, tokenizer_data=tokenizer_data, clip_name="t5xxl", tokenizer=T5XXLTokenizer) + + +def ltxv_te(*args, **kwargs): + return comfy.text_encoders.genmo.mochi_te(*args, **kwargs) diff --git a/comfy/text_encoders/sd3_clip.py b/comfy/text_encoders/sd3_clip.py index e3832ac24..00d7e31ad 100644 --- a/comfy/text_encoders/sd3_clip.py +++ b/comfy/text_encoders/sd3_clip.py @@ -8,9 +8,27 @@ import comfy.model_management import logging class T5XXLModel(sd1_clip.SDClipModel): - def __init__(self, device="cpu", layer="last", layer_idx=None, dtype=None, model_options={}): + def __init__(self, device="cpu", layer="last", layer_idx=None, dtype=None, attention_mask=False, model_options={}): textmodel_json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "t5_config_xxl.json") - super().__init__(device=device, layer=layer, layer_idx=layer_idx, textmodel_json_config=textmodel_json_config, dtype=dtype, special_tokens={"end": 1, "pad": 0}, model_class=comfy.text_encoders.t5.T5, model_options=model_options) + t5xxl_scaled_fp8 = model_options.get("t5xxl_scaled_fp8", None) + if t5xxl_scaled_fp8 is not None: + model_options = model_options.copy() + model_options["scaled_fp8"] = t5xxl_scaled_fp8 + + super().__init__(device=device, layer=layer, layer_idx=layer_idx, textmodel_json_config=textmodel_json_config, dtype=dtype, special_tokens={"end": 1, "pad": 0}, model_class=comfy.text_encoders.t5.T5, enable_attention_masks=attention_mask, return_attention_masks=attention_mask, model_options=model_options) + + +def t5_xxl_detect(state_dict, prefix=""): + out = {} + t5_key = "{}encoder.final_layer_norm.weight".format(prefix) + if t5_key in state_dict: + out["dtype_t5"] = state_dict[t5_key].dtype + + scaled_fp8_key = "{}scaled_fp8".format(prefix) + if scaled_fp8_key in state_dict: + out["t5xxl_scaled_fp8"] = state_dict[scaled_fp8_key].dtype + + return out class T5XXLTokenizer(sd1_clip.SDTokenizer): def __init__(self, embedding_directory=None, tokenizer_data={}): @@ -20,7 +38,8 @@ class T5XXLTokenizer(sd1_clip.SDTokenizer): class SD3Tokenizer: def __init__(self, embedding_directory=None, tokenizer_data={}): - self.clip_l = sd1_clip.SDTokenizer(embedding_directory=embedding_directory) + clip_l_tokenizer_class = tokenizer_data.get("clip_l_tokenizer_class", sd1_clip.SDTokenizer) + self.clip_l = clip_l_tokenizer_class(embedding_directory=embedding_directory) self.clip_g = sdxl_clip.SDXLClipGTokenizer(embedding_directory=embedding_directory) self.t5xxl = T5XXLTokenizer(embedding_directory=embedding_directory) @@ -38,11 +57,12 @@ class SD3Tokenizer: return {} class SD3ClipModel(torch.nn.Module): - def __init__(self, clip_l=True, clip_g=True, t5=True, dtype_t5=None, device="cpu", dtype=None, model_options={}): + def __init__(self, clip_l=True, clip_g=True, t5=True, dtype_t5=None, t5_attention_mask=False, device="cpu", dtype=None, model_options={}): super().__init__() self.dtypes = set() if clip_l: - self.clip_l = sd1_clip.SDClipModel(layer="hidden", layer_idx=-2, device=device, dtype=dtype, layer_norm_hidden_state=False, return_projected_pooled=False, model_options=model_options) + clip_l_class = model_options.get("clip_l_class", sd1_clip.SDClipModel) + self.clip_l = clip_l_class(layer="hidden", layer_idx=-2, device=device, dtype=dtype, layer_norm_hidden_state=False, return_projected_pooled=False, model_options=model_options) self.dtypes.add(dtype) else: self.clip_l = None @@ -55,7 +75,8 @@ class SD3ClipModel(torch.nn.Module): if t5: dtype_t5 = comfy.model_management.pick_weight_dtype(dtype_t5, dtype, device) - self.t5xxl = T5XXLModel(device=device, dtype=dtype_t5, model_options=model_options) + self.t5_attention_mask = t5_attention_mask + self.t5xxl = T5XXLModel(device=device, dtype=dtype_t5, model_options=model_options, attention_mask=self.t5_attention_mask) self.dtypes.add(dtype_t5) else: self.t5xxl = None @@ -85,6 +106,7 @@ class SD3ClipModel(torch.nn.Module): lg_out = None pooled = None out = None + extra = {} if len(token_weight_pairs_g) > 0 or len(token_weight_pairs_l) > 0: if self.clip_l is not None: @@ -95,7 +117,8 @@ class SD3ClipModel(torch.nn.Module): if self.clip_g is not None: g_out, g_pooled = self.clip_g.encode_token_weights(token_weight_pairs_g) if lg_out is not None: - lg_out = torch.cat([lg_out, g_out], dim=-1) + cut_to = min(lg_out.shape[1], g_out.shape[1]) + lg_out = torch.cat([lg_out[:,:cut_to], g_out[:,:cut_to]], dim=-1) else: lg_out = torch.nn.functional.pad(g_out, (768, 0)) else: @@ -108,7 +131,11 @@ class SD3ClipModel(torch.nn.Module): pooled = torch.cat((l_pooled, g_pooled), dim=-1) if self.t5xxl is not None: - t5_out, t5_pooled = self.t5xxl.encode_token_weights(token_weight_pairs_t5) + t5_output = self.t5xxl.encode_token_weights(token_weight_pairs_t5) + t5_out, t5_pooled = t5_output[:2] + if self.t5_attention_mask: + extra["attention_mask"] = t5_output[2]["attention_mask"] + if lg_out is not None: out = torch.cat([lg_out, t5_out], dim=-2) else: @@ -120,7 +147,7 @@ class SD3ClipModel(torch.nn.Module): if pooled is None: pooled = torch.zeros((1, 768 + 1280), device=comfy.model_management.intermediate_device()) - return out, pooled + return out, pooled, extra def load_sd(self, sd): if "text_model.encoder.layers.30.mlp.fc1.weight" in sd: @@ -130,8 +157,11 @@ class SD3ClipModel(torch.nn.Module): else: return self.t5xxl.load_sd(sd) -def sd3_clip(clip_l=True, clip_g=True, t5=True, dtype_t5=None): +def sd3_clip(clip_l=True, clip_g=True, t5=True, dtype_t5=None, t5xxl_scaled_fp8=None, t5_attention_mask=False): class SD3ClipModel_(SD3ClipModel): def __init__(self, device="cpu", dtype=None, model_options={}): - super().__init__(clip_l=clip_l, clip_g=clip_g, t5=t5, dtype_t5=dtype_t5, device=device, dtype=dtype, model_options=model_options) + if t5xxl_scaled_fp8 is not None and "t5xxl_scaled_fp8" not in model_options: + model_options = model_options.copy() + model_options["t5xxl_scaled_fp8"] = t5xxl_scaled_fp8 + super().__init__(clip_l=clip_l, clip_g=clip_g, t5=t5, dtype_t5=dtype_t5, t5_attention_mask=t5_attention_mask, device=device, dtype=dtype, model_options=model_options) return SD3ClipModel_ diff --git a/comfy/text_encoders/spiece_tokenizer.py b/comfy/text_encoders/spiece_tokenizer.py index 73739553d..cbaa99ba5 100644 --- a/comfy/text_encoders/spiece_tokenizer.py +++ b/comfy/text_encoders/spiece_tokenizer.py @@ -1,4 +1,3 @@ -import os import torch class SPieceTokenizer: diff --git a/comfy/text_encoders/t5.py b/comfy/text_encoders/t5.py index a1420c6cd..38d8d5234 100644 --- a/comfy/text_encoders/t5.py +++ b/comfy/text_encoders/t5.py @@ -172,7 +172,6 @@ class T5LayerSelfAttention(torch.nn.Module): # self.dropout = nn.Dropout(config.dropout_rate) def forward(self, x, mask=None, past_bias=None, optimized_attention=None): - normed_hidden_states = self.layer_norm(x) output, past_bias = self.SelfAttention(self.layer_norm(x), mask=mask, past_bias=past_bias, optimized_attention=optimized_attention) # x = x + self.dropout(attention_output) x += output @@ -209,6 +208,11 @@ class T5Stack(torch.nn.Module): intermediate = None optimized_attention = optimized_attention_for_device(x.device, mask=attention_mask is not None, small_input=True) past_bias = None + + if intermediate_output is not None: + if intermediate_output < 0: + intermediate_output = len(self.block) + intermediate_output + for i, l in enumerate(self.block): x, past_bias = l(x, mask, past_bias, optimized_attention) if i == intermediate_output: diff --git a/comfy/utils.py b/comfy/utils.py index 1bc35df7a..d03693bba 100644 --- a/comfy/utils.py +++ b/comfy/utils.py @@ -26,6 +26,8 @@ import numpy as np from PIL import Image import logging import itertools +from torch.nn.functional import interpolate +from einops import rearrange def load_torch_file(ckpt, safe_load=False, device=None): if device is None: @@ -46,7 +48,13 @@ def load_torch_file(ckpt, safe_load=False, device=None): if "state_dict" in pl_sd: sd = pl_sd["state_dict"] else: - sd = pl_sd + if len(pl_sd) == 1: + key = list(pl_sd.keys())[0] + sd = pl_sd[key] + if not isinstance(sd, dict): + sd = pl_sd + else: + sd = pl_sd return sd def save_torch_file(sd, ckpt, metadata=None): @@ -68,7 +76,7 @@ def weight_dtype(sd, prefix=""): for k in sd.keys(): if k.startswith(prefix): w = sd[k] - dtypes[w.dtype] = dtypes.get(w.dtype, 0) + 1 + dtypes[w.dtype] = dtypes.get(w.dtype, 0) + w.numel() if len(dtypes) == 0: return None @@ -316,10 +324,18 @@ MMDIT_MAP_BLOCK = { ("context_block.mlp.fc1.weight", "ff_context.net.0.proj.weight"), ("context_block.mlp.fc2.bias", "ff_context.net.2.bias"), ("context_block.mlp.fc2.weight", "ff_context.net.2.weight"), + ("context_block.attn.ln_q.weight", "attn.norm_added_q.weight"), + ("context_block.attn.ln_k.weight", "attn.norm_added_k.weight"), ("x_block.adaLN_modulation.1.bias", "norm1.linear.bias"), ("x_block.adaLN_modulation.1.weight", "norm1.linear.weight"), ("x_block.attn.proj.bias", "attn.to_out.0.bias"), ("x_block.attn.proj.weight", "attn.to_out.0.weight"), + ("x_block.attn.ln_q.weight", "attn.norm_q.weight"), + ("x_block.attn.ln_k.weight", "attn.norm_k.weight"), + ("x_block.attn2.proj.bias", "attn2.to_out.0.bias"), + ("x_block.attn2.proj.weight", "attn2.to_out.0.weight"), + ("x_block.attn2.ln_q.weight", "attn2.norm_q.weight"), + ("x_block.attn2.ln_k.weight", "attn2.norm_k.weight"), ("x_block.mlp.fc1.bias", "ff.net.0.proj.bias"), ("x_block.mlp.fc1.weight", "ff.net.0.proj.weight"), ("x_block.mlp.fc2.bias", "ff.net.2.bias"), @@ -349,6 +365,12 @@ def mmdit_to_diffusers(mmdit_config, output_prefix=""): key_map["{}add_k_proj.{}".format(k, end)] = (qkv, (0, offset, offset)) key_map["{}add_v_proj.{}".format(k, end)] = (qkv, (0, offset * 2, offset)) + k = "{}.attn2.".format(block_from) + qkv = "{}.x_block.attn2.qkv.{}".format(block_to, end) + key_map["{}to_q.{}".format(k, end)] = (qkv, (0, 0, offset)) + key_map["{}to_k.{}".format(k, end)] = (qkv, (0, offset, offset)) + key_map["{}to_v.{}".format(k, end)] = (qkv, (0, offset * 2, offset)) + for k in MMDIT_MAP_BLOCK: key_map["{}.{}".format(block_from, k[1])] = "{}.{}".format(block_to, k[0]) @@ -690,9 +712,14 @@ def lanczos(samples, width, height): return result.to(samples.device, samples.dtype) def common_upscale(samples, width, height, upscale_method, crop): + orig_shape = tuple(samples.shape) + if len(orig_shape) > 4: + samples = samples.reshape(samples.shape[0], samples.shape[1], -1, samples.shape[-2], samples.shape[-1]) + samples = samples.movedim(2, 1) + samples = samples.reshape(-1, orig_shape[1], orig_shape[-2], orig_shape[-1]) if crop == "center": - old_width = samples.shape[3] - old_height = samples.shape[2] + old_width = samples.shape[-1] + old_height = samples.shape[-2] old_aspect = old_width / old_height new_aspect = width / height x = 0 @@ -701,48 +728,89 @@ def common_upscale(samples, width, height, upscale_method, crop): x = round((old_width - old_width * (new_aspect / old_aspect)) / 2) elif old_aspect < new_aspect: y = round((old_height - old_height * (old_aspect / new_aspect)) / 2) - s = samples[:,:,y:old_height-y,x:old_width-x] + s = samples.narrow(-2, y, old_height - y * 2).narrow(-1, x, old_width - x * 2) else: s = samples if upscale_method == "bislerp": - return bislerp(s, width, height) + out = bislerp(s, width, height) elif upscale_method == "lanczos": - return lanczos(s, width, height) + out = lanczos(s, width, height) else: - return torch.nn.functional.interpolate(s, size=(height, width), mode=upscale_method) + out = torch.nn.functional.interpolate(s, size=(height, width), mode=upscale_method) + + if len(orig_shape) == 4: + return out + + out = out.reshape((orig_shape[0], -1, orig_shape[1]) + (height, width)) + return out.movedim(2, 1).reshape(orig_shape[:-2] + (height, width)) def get_tiled_scale_steps(width, height, tile_x, tile_y, overlap): - return math.ceil((height / (tile_y - overlap))) * math.ceil((width / (tile_x - overlap))) + rows = 1 if height <= tile_y else math.ceil((height - overlap) / (tile_y - overlap)) + cols = 1 if width <= tile_x else math.ceil((width - overlap) / (tile_x - overlap)) + return rows * cols @torch.inference_mode() def tiled_scale_multidim(samples, function, tile=(64, 64), overlap = 8, upscale_amount = 4, out_channels = 3, output_device="cpu", pbar = None): dims = len(tile) - output = torch.empty([samples.shape[0], out_channels] + list(map(lambda a: round(a * upscale_amount), samples.shape[2:])), device=output_device) + + if not (isinstance(upscale_amount, (tuple, list))): + upscale_amount = [upscale_amount] * dims + + if not (isinstance(overlap, (tuple, list))): + overlap = [overlap] * dims + + def get_upscale(dim, val): + up = upscale_amount[dim] + if callable(up): + return up(val) + else: + return up * val + + def mult_list_upscale(a): + out = [] + for i in range(len(a)): + out.append(round(get_upscale(i, a[i]))) + return out + + output = torch.empty([samples.shape[0], out_channels] + mult_list_upscale(samples.shape[2:]), device=output_device) for b in range(samples.shape[0]): s = samples[b:b+1] - out = torch.zeros([s.shape[0], out_channels] + list(map(lambda a: round(a * upscale_amount), s.shape[2:])), device=output_device) - out_div = torch.zeros([s.shape[0], out_channels] + list(map(lambda a: round(a * upscale_amount), s.shape[2:])), device=output_device) - for it in itertools.product(*map(lambda a: range(0, a[0], a[1] - overlap), zip(s.shape[2:], tile))): + # handle entire input fitting in a single tile + if all(s.shape[d+2] <= tile[d] for d in range(dims)): + output[b:b+1] = function(s).to(output_device) + if pbar is not None: + pbar.update(1) + continue + + out = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device) + out_div = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device) + + positions = [range(0, s.shape[d+2], tile[d] - overlap[d]) if s.shape[d+2] > tile[d] else [0] for d in range(dims)] + + for it in itertools.product(*positions): s_in = s upscaled = [] for d in range(dims): - pos = max(0, min(s.shape[d + 2] - overlap, it[d])) + pos = max(0, min(s.shape[d + 2] - (overlap[d] + 1), it[d])) l = min(tile[d], s.shape[d + 2] - pos) s_in = s_in.narrow(d + 2, pos, l) - upscaled.append(round(pos * upscale_amount)) + upscaled.append(round(get_upscale(d, pos))) + ps = function(s_in).to(output_device) mask = torch.ones_like(ps) - feather = round(overlap * upscale_amount) - for t in range(feather): - for d in range(2, dims + 2): - m = mask.narrow(d, t, 1) - m *= ((1.0/feather) * (t + 1)) - m = mask.narrow(d, mask.shape[d] -1 -t, 1) - m *= ((1.0/feather) * (t + 1)) + + for d in range(2, dims + 2): + feather = round(get_upscale(d - 2, overlap[d - 2])) + if feather >= mask.shape[d]: + continue + for t in range(feather): + a = (t + 1) / feather + mask.narrow(d, t, 1).mul_(a) + mask.narrow(d, mask.shape[d] - 1 - t, 1).mul_(a) o = out o_d = out_div @@ -750,8 +818,8 @@ def tiled_scale_multidim(samples, function, tile=(64, 64), overlap = 8, upscale_ o = o.narrow(d + 2, upscaled[d], mask.shape[d + 2]) o_d = o_d.narrow(d + 2, upscaled[d], mask.shape[d + 2]) - o += ps * mask - o_d += mask + o.add_(ps * mask) + o_d.add_(mask) if pbar is not None: pbar.update(1) @@ -790,3 +858,65 @@ class ProgressBar: def update(self, value): self.update_absolute(self.current + value) + +def reshape_mask(input_mask, output_shape): + dims = len(output_shape) - 2 + + if dims == 1: + scale_mode = "linear" + + if dims == 2: + input_mask = input_mask.reshape((-1, 1, input_mask.shape[-2], input_mask.shape[-1])) + scale_mode = "bilinear" + + if dims == 3: + if len(input_mask.shape) < 5: + input_mask = input_mask.reshape((1, 1, -1, input_mask.shape[-2], input_mask.shape[-1])) + scale_mode = "trilinear" + + mask = torch.nn.functional.interpolate(input_mask, size=output_shape[2:], mode=scale_mode) + if mask.shape[1] < output_shape[1]: + mask = mask.repeat((1, output_shape[1]) + (1,) * dims)[:,:output_shape[1]] + mask = repeat_to_batch_size(mask, output_shape[0]) + return mask + +def upscale_dit_mask(mask: torch.Tensor, img_size_in, img_size_out): + hi, wi = img_size_in + ho, wo = img_size_out + # if it's already the correct size, no need to do anything + if (hi, wi) == (ho, wo): + return mask + if mask.ndim == 2: + mask = mask.unsqueeze(0) + if mask.ndim != 3: + raise ValueError(f"Got a mask of shape {list(mask.shape)}, expected [b, q, k] or [q, k]") + txt_tokens = mask.shape[1] - (hi * wi) + # quadrants of the mask + txt_to_txt = mask[:, :txt_tokens, :txt_tokens] + txt_to_img = mask[:, :txt_tokens, txt_tokens:] + img_to_img = mask[:, txt_tokens:, txt_tokens:] + img_to_txt = mask[:, txt_tokens:, :txt_tokens] + + # convert to 1d x 2d, interpolate, then back to 1d x 1d + txt_to_img = rearrange (txt_to_img, "b t (h w) -> b t h w", h=hi, w=wi) + txt_to_img = interpolate(txt_to_img, size=img_size_out, mode="bilinear") + txt_to_img = rearrange (txt_to_img, "b t h w -> b t (h w)") + # this one is hard because we have to do it twice + # convert to 1d x 2d, interpolate, then to 2d x 1d, interpolate, then 1d x 1d + img_to_img = rearrange (img_to_img, "b hw (h w) -> b hw h w", h=hi, w=wi) + img_to_img = interpolate(img_to_img, size=img_size_out, mode="bilinear") + img_to_img = rearrange (img_to_img, "b (hk wk) hq wq -> b (hq wq) hk wk", hk=hi, wk=wi) + img_to_img = interpolate(img_to_img, size=img_size_out, mode="bilinear") + img_to_img = rearrange (img_to_img, "b (hq wq) hk wk -> b (hk wk) (hq wq)", hq=ho, wq=wo) + # convert to 2d x 1d, interpolate, then back to 1d x 1d + img_to_txt = rearrange (img_to_txt, "b (h w) t -> b t h w", h=hi, w=wi) + img_to_txt = interpolate(img_to_txt, size=img_size_out, mode="bilinear") + img_to_txt = rearrange (img_to_txt, "b t h w -> b (h w) t") + + # reassemble the mask from blocks + out = torch.cat([ + torch.cat([txt_to_txt, txt_to_img], dim=2), + torch.cat([img_to_txt, img_to_img], dim=2)], + dim=1 + ) + return out diff --git a/comfy_execution/caching.py b/comfy_execution/caching.py index e67914a3f..630f280fc 100644 --- a/comfy_execution/caching.py +++ b/comfy_execution/caching.py @@ -1,11 +1,21 @@ import itertools -from typing import Sequence, Mapping +from typing import Sequence, Mapping, Dict from comfy_execution.graph import DynamicPrompt import nodes from comfy_execution.graph_utils import is_link +NODE_CLASS_CONTAINS_UNIQUE_ID: Dict[str, bool] = {} + + +def include_unique_id_in_input(class_type: str) -> bool: + if class_type in NODE_CLASS_CONTAINS_UNIQUE_ID: + return NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] + class_def = nodes.NODE_CLASS_MAPPINGS[class_type] + NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] = "UNIQUE_ID" in class_def.INPUT_TYPES().get("hidden", {}).values() + return NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] + class CacheKeySet: def __init__(self, dynprompt, node_ids, is_changed_cache): self.keys = {} @@ -98,7 +108,7 @@ class CacheKeySetInputSignature(CacheKeySet): class_type = node["class_type"] class_def = nodes.NODE_CLASS_MAPPINGS[class_type] signature = [class_type, self.is_changed_cache.get(node_id)] - if self.include_node_id_in_input() or (hasattr(class_def, "NOT_IDEMPOTENT") and class_def.NOT_IDEMPOTENT): + if self.include_node_id_in_input() or (hasattr(class_def, "NOT_IDEMPOTENT") and class_def.NOT_IDEMPOTENT) or include_unique_id_in_input(class_type): signature.append(node_id) inputs = node["inputs"] for key in sorted(inputs.keys()): diff --git a/comfy_execution/graph.py b/comfy_execution/graph.py index b53e10f3f..0b5bf1899 100644 --- a/comfy_execution/graph.py +++ b/comfy_execution/graph.py @@ -99,30 +99,44 @@ class TopologicalSort: self.add_strong_link(from_node_id, from_socket, to_node_id) def add_strong_link(self, from_node_id, from_socket, to_node_id): - self.add_node(from_node_id) - if to_node_id not in self.blocking[from_node_id]: - self.blocking[from_node_id][to_node_id] = {} - self.blockCount[to_node_id] += 1 - self.blocking[from_node_id][to_node_id][from_socket] = True + if not self.is_cached(from_node_id): + self.add_node(from_node_id) + if to_node_id not in self.blocking[from_node_id]: + self.blocking[from_node_id][to_node_id] = {} + self.blockCount[to_node_id] += 1 + self.blocking[from_node_id][to_node_id][from_socket] = True - def add_node(self, unique_id, include_lazy=False, subgraph_nodes=None): - if unique_id in self.pendingNodes: - return - self.pendingNodes[unique_id] = True - self.blockCount[unique_id] = 0 - self.blocking[unique_id] = {} + def add_node(self, node_unique_id, include_lazy=False, subgraph_nodes=None): + node_ids = [node_unique_id] + links = [] - inputs = self.dynprompt.get_node(unique_id)["inputs"] - for input_name in inputs: - value = inputs[input_name] - if is_link(value): - from_node_id, from_socket = value - if subgraph_nodes is not None and from_node_id not in subgraph_nodes: - continue - input_type, input_category, input_info = self.get_input_info(unique_id, input_name) - is_lazy = input_info is not None and "lazy" in input_info and input_info["lazy"] - if include_lazy or not is_lazy: - self.add_strong_link(from_node_id, from_socket, unique_id) + while len(node_ids) > 0: + unique_id = node_ids.pop() + if unique_id in self.pendingNodes: + continue + + self.pendingNodes[unique_id] = True + self.blockCount[unique_id] = 0 + self.blocking[unique_id] = {} + + inputs = self.dynprompt.get_node(unique_id)["inputs"] + for input_name in inputs: + value = inputs[input_name] + if is_link(value): + from_node_id, from_socket = value + if subgraph_nodes is not None and from_node_id not in subgraph_nodes: + continue + input_type, input_category, input_info = self.get_input_info(unique_id, input_name) + is_lazy = input_info is not None and "lazy" in input_info and input_info["lazy"] + if (include_lazy or not is_lazy) and not self.is_cached(from_node_id): + node_ids.append(from_node_id) + links.append((from_node_id, from_socket, unique_id)) + + for link in links: + self.add_strong_link(*link) + + def is_cached(self, node_id): + return False def get_ready_nodes(self): return [node_id for node_id in self.pendingNodes if self.blockCount[node_id] == 0] @@ -146,11 +160,8 @@ class ExecutionList(TopologicalSort): self.output_cache = output_cache self.staged_node_id = None - def add_strong_link(self, from_node_id, from_socket, to_node_id): - if self.output_cache.get(from_node_id) is not None: - # Nothing to do - return - super().add_strong_link(from_node_id, from_socket, to_node_id) + def is_cached(self, node_id): + return self.output_cache.get(node_id) is not None def stage_node_execution(self): assert self.staged_node_id is None diff --git a/comfy_execution/validation.py b/comfy_execution/validation.py new file mode 100644 index 000000000..cec105fc9 --- /dev/null +++ b/comfy_execution/validation.py @@ -0,0 +1,39 @@ +from __future__ import annotations + + +def validate_node_input( + received_type: str, input_type: str, strict: bool = False +) -> bool: + """ + received_type and input_type are both strings of the form "T1,T2,...". + + If strict is True, the input_type must contain the received_type. + For example, if received_type is "STRING" and input_type is "STRING,INT", + this will return True. But if received_type is "STRING,INT" and input_type is + "INT", this will return False. + + If strict is False, the input_type must have overlap with the received_type. + For example, if received_type is "STRING,BOOLEAN" and input_type is "STRING,INT", + this will return True. + + Supports pre-union type extension behaviour of ``__ne__`` overrides. + """ + # If the types are exactly the same, we can return immediately + # Use pre-union behaviour: inverse of `__ne__` + if not received_type != input_type: + return True + + # Not equal, and not strings + if not isinstance(received_type, str) or not isinstance(input_type, str): + return False + + # Split the type strings into sets for comparison + received_types = set(t.strip() for t in received_type.split(",")) + input_types = set(t.strip() for t in input_type.split(",")) + + if strict: + # In strict mode, all received types must be in the input types + return received_types.issubset(input_types) + else: + # In non-strict mode, there must be at least one type in common + return len(received_types.intersection(input_types)) > 0 diff --git a/comfy_extras/nodes_advanced_samplers.py b/comfy_extras/nodes_advanced_samplers.py index 820c250ef..5fbb096fb 100644 --- a/comfy_extras/nodes_advanced_samplers.py +++ b/comfy_extras/nodes_advanced_samplers.py @@ -2,8 +2,7 @@ import comfy.samplers import comfy.utils import torch import numpy as np -from tqdm.auto import trange, tqdm -import math +from tqdm.auto import trange @torch.no_grad() diff --git a/comfy_extras/nodes_audio.py b/comfy_extras/nodes_audio.py index 762b48279..e5cc4dffe 100644 --- a/comfy_extras/nodes_audio.py +++ b/comfy_extras/nodes_audio.py @@ -16,14 +16,15 @@ class EmptyLatentAudio: @classmethod def INPUT_TYPES(s): - return {"required": {"seconds": ("FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1})}} + return {"required": {"seconds": ("FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}), + }} RETURN_TYPES = ("LATENT",) FUNCTION = "generate" CATEGORY = "latent/audio" - def generate(self, seconds): - batch_size = 1 + def generate(self, seconds, batch_size): length = round((seconds * 44100 / 2048) / 2) * 2 latent = torch.zeros([batch_size, 64, length], device=self.device) return ({"samples":latent, "type": "audio"}, ) @@ -58,6 +59,9 @@ class VAEDecodeAudio: def decode(self, vae, samples): audio = vae.decode(samples["samples"]).movedim(-1, 1) + std = torch.std(audio, dim=[1,2], keepdim=True) * 5.0 + std[std < 1.0] = 1.0 + audio /= std return ({"waveform": audio, "sample_rate": 44100}, ) @@ -183,17 +187,10 @@ class PreviewAudio(SaveAudio): } class LoadAudio: - SUPPORTED_FORMATS = ('.wav', '.mp3', '.ogg', '.flac', '.aiff', '.aif') - @classmethod def INPUT_TYPES(s): input_dir = folder_paths.get_input_directory() - files = [ - f for f in os.listdir(input_dir) - if (os.path.isfile(os.path.join(input_dir, f)) - and f.endswith(LoadAudio.SUPPORTED_FORMATS) - ) - ] + files = folder_paths.filter_files_content_types(os.listdir(input_dir), ["audio", "video"]) return {"required": {"audio": (sorted(files), {"audio_upload": True})}} CATEGORY = "audio" diff --git a/comfy_extras/nodes_clip_sdxl.py b/comfy_extras/nodes_clip_sdxl.py index 3087b917b..14269caf3 100644 --- a/comfy_extras/nodes_clip_sdxl.py +++ b/comfy_extras/nodes_clip_sdxl.py @@ -1,4 +1,3 @@ -import torch from nodes import MAX_RESOLUTION class CLIPTextEncodeSDXLRefiner: @@ -17,21 +16,21 @@ class CLIPTextEncodeSDXLRefiner: def encode(self, clip, ascore, width, height, text): tokens = clip.tokenize(text) - cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) - return ([[cond, {"pooled_output": pooled, "aesthetic_score": ascore, "width": width,"height": height}]], ) + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"aesthetic_score": ascore, "width": width, "height": height}), ) class CLIPTextEncodeSDXL: @classmethod def INPUT_TYPES(s): return {"required": { + "clip": ("CLIP", ), "width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), "height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), "crop_w": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION}), "crop_h": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION}), "target_width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), "target_height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), - "text_g": ("STRING", {"multiline": True, "dynamicPrompts": True}), "clip": ("CLIP", ), - "text_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), "clip": ("CLIP", ), + "text_g": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "text_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), }} RETURN_TYPES = ("CONDITIONING",) FUNCTION = "encode" @@ -47,8 +46,7 @@ class CLIPTextEncodeSDXL: tokens["l"] += empty["l"] while len(tokens["l"]) > len(tokens["g"]): tokens["g"] += empty["g"] - cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) - return ([[cond, {"pooled_output": pooled, "width": width, "height": height, "crop_w": crop_w, "crop_h": crop_h, "target_width": target_width, "target_height": target_height}]], ) + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"width": width, "height": height, "crop_w": crop_w, "crop_h": crop_h, "target_width": target_width, "target_height": target_height}), ) NODE_CLASS_MAPPINGS = { "CLIPTextEncodeSDXLRefiner": CLIPTextEncodeSDXLRefiner, diff --git a/comfy_extras/nodes_compositing.py b/comfy_extras/nodes_compositing.py index 48fe5e3dd..2f994fa11 100644 --- a/comfy_extras/nodes_compositing.py +++ b/comfy_extras/nodes_compositing.py @@ -1,4 +1,3 @@ -import numpy as np import torch import comfy.utils from enum import Enum diff --git a/comfy_extras/nodes_controlnet.py b/comfy_extras/nodes_controlnet.py index 0773c8a5b..2d20e1fed 100644 --- a/comfy_extras/nodes_controlnet.py +++ b/comfy_extras/nodes_controlnet.py @@ -1,4 +1,6 @@ from comfy.cldm.control_types import UNION_CONTROLNET_TYPES +import nodes +import comfy.utils class SetUnionControlNetType: @classmethod @@ -22,6 +24,37 @@ class SetUnionControlNetType: return (control_net,) +class ControlNetInpaintingAliMamaApply(nodes.ControlNetApplyAdvanced): + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "control_net": ("CONTROL_NET", ), + "vae": ("VAE", ), + "image": ("IMAGE", ), + "mask": ("MASK", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) + }} + + FUNCTION = "apply_inpaint_controlnet" + + CATEGORY = "conditioning/controlnet" + + def apply_inpaint_controlnet(self, positive, negative, control_net, vae, image, mask, strength, start_percent, end_percent): + extra_concat = [] + if control_net.concat_mask: + mask = 1.0 - mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])) + mask_apply = comfy.utils.common_upscale(mask, image.shape[2], image.shape[1], "bilinear", "center").round() + image = image * mask_apply.movedim(1, -1).repeat(1, 1, 1, image.shape[3]) + extra_concat = [mask] + + return self.apply_controlnet(positive, negative, control_net, image, strength, start_percent, end_percent, vae=vae, extra_concat=extra_concat) + + + NODE_CLASS_MAPPINGS = { "SetUnionControlNetType": SetUnionControlNetType, + "ControlNetInpaintingAliMamaApply": ControlNetInpaintingAliMamaApply, } diff --git a/comfy_extras/nodes_custom_sampler.py b/comfy_extras/nodes_custom_sampler.py index 219975e27..c7ff9a4d8 100644 --- a/comfy_extras/nodes_custom_sampler.py +++ b/comfy_extras/nodes_custom_sampler.py @@ -90,6 +90,27 @@ class PolyexponentialScheduler: sigmas = k_diffusion_sampling.get_sigmas_polyexponential(n=steps, sigma_min=sigma_min, sigma_max=sigma_max, rho=rho) return (sigmas, ) +class LaplaceScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "sigma_max": ("FLOAT", {"default": 14.614642, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.0291675, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "mu": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step":0.1, "round": False}), + "beta": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 10.0, "step":0.1, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, sigma_max, sigma_min, mu, beta): + sigmas = k_diffusion_sampling.get_sigmas_laplace(n=steps, sigma_min=sigma_min, sigma_max=sigma_max, mu=mu, beta=beta) + return (sigmas, ) + + class SDTurboScheduler: @classmethod def INPUT_TYPES(s): @@ -673,6 +694,7 @@ NODE_CLASS_MAPPINGS = { "KarrasScheduler": KarrasScheduler, "ExponentialScheduler": ExponentialScheduler, "PolyexponentialScheduler": PolyexponentialScheduler, + "LaplaceScheduler": LaplaceScheduler, "VPScheduler": VPScheduler, "BetaSamplingScheduler": BetaSamplingScheduler, "SDTurboScheduler": SDTurboScheduler, diff --git a/comfy_extras/nodes_flux.py b/comfy_extras/nodes_flux.py index b690432b5..2ae23f735 100644 --- a/comfy_extras/nodes_flux.py +++ b/comfy_extras/nodes_flux.py @@ -18,10 +18,7 @@ class CLIPTextEncodeFlux: tokens = clip.tokenize(clip_l) tokens["t5xxl"] = clip.tokenize(t5xxl)["t5xxl"] - output = clip.encode_from_tokens(tokens, return_pooled=True, return_dict=True) - cond = output.pop("cond") - output["guidance"] = guidance - return ([[cond, output]], ) + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"guidance": guidance}), ) class FluxGuidance: @classmethod diff --git a/comfy_extras/nodes_hooks.py b/comfy_extras/nodes_hooks.py new file mode 100644 index 000000000..d0cb69902 --- /dev/null +++ b/comfy_extras/nodes_hooks.py @@ -0,0 +1,744 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Union +import torch +from collections.abc import Iterable + +if TYPE_CHECKING: + from comfy.sd import CLIP + +import comfy.hooks +import comfy.sd +import comfy.utils +import folder_paths + +########################################### +# Mask, Combine, and Hook Conditioning +#------------------------------------------ +class PairConditioningSetProperties: + NodeId = 'PairConditioningSetProperties' + NodeName = 'Cond Pair Set Props' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive_NEW": ("CONDITIONING", ), + "negative_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_properties" + + def set_properties(self, positive_NEW, negative_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + final_positive, final_negative = comfy.hooks.set_conds_props(conds=[positive_NEW, negative_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_positive, final_negative) + +class PairConditioningSetPropertiesAndCombine: + NodeId = 'PairConditioningSetPropertiesAndCombine' + NodeName = 'Cond Pair Set Props Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "positive_NEW": ("CONDITIONING", ), + "negative_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_properties" + + def set_properties(self, positive, negative, positive_NEW, negative_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + final_positive, final_negative = comfy.hooks.set_conds_props_and_combine(conds=[positive, negative], new_conds=[positive_NEW, negative_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_positive, final_negative) + +class ConditioningSetProperties: + NodeId = 'ConditioningSetProperties' + NodeName = 'Cond Set Props' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_properties" + + def set_properties(self, cond_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + (final_cond,) = comfy.hooks.set_conds_props(conds=[cond_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_cond,) + +class ConditioningSetPropertiesAndCombine: + NodeId = 'ConditioningSetPropertiesAndCombine' + NodeName = 'Cond Set Props Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond": ("CONDITIONING", ), + "cond_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_properties" + + def set_properties(self, cond, cond_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + (final_cond,) = comfy.hooks.set_conds_props_and_combine(conds=[cond], new_conds=[cond_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_cond,) + +class PairConditioningCombine: + NodeId = 'PairConditioningCombine' + NodeName = 'Cond Pair Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive_A": ("CONDITIONING",), + "negative_A": ("CONDITIONING",), + "positive_B": ("CONDITIONING",), + "negative_B": ("CONDITIONING",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "combine" + + def combine(self, positive_A, negative_A, positive_B, negative_B): + final_positive, final_negative = comfy.hooks.set_conds_props_and_combine(conds=[positive_A, negative_A], new_conds=[positive_B, negative_B],) + return (final_positive, final_negative,) + +class PairConditioningSetDefaultAndCombine: + NodeId = 'PairConditioningSetDefaultCombine' + NodeName = 'Cond Pair Set Default Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "positive_DEFAULT": ("CONDITIONING",), + "negative_DEFAULT": ("CONDITIONING",), + }, + "optional": { + "hooks": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_default_and_combine" + + def set_default_and_combine(self, positive, negative, positive_DEFAULT, negative_DEFAULT, + hooks: comfy.hooks.HookGroup=None): + final_positive, final_negative = comfy.hooks.set_default_conds_and_combine(conds=[positive, negative], new_conds=[positive_DEFAULT, negative_DEFAULT], + hooks=hooks) + return (final_positive, final_negative) + +class ConditioningSetDefaultAndCombine: + NodeId = 'ConditioningSetDefaultCombine' + NodeName = 'Cond Set Default Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond": ("CONDITIONING",), + "cond_DEFAULT": ("CONDITIONING",), + }, + "optional": { + "hooks": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_default_and_combine" + + def set_default_and_combine(self, cond, cond_DEFAULT, + hooks: comfy.hooks.HookGroup=None): + (final_conditioning,) = comfy.hooks.set_default_conds_and_combine(conds=[cond], new_conds=[cond_DEFAULT], + hooks=hooks) + return (final_conditioning,) + +class SetClipHooks: + NodeId = 'SetClipHooks' + NodeName = 'Set CLIP Hooks' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "clip": ("CLIP",), + "apply_to_conds": ("BOOLEAN", {"default": True}), + "schedule_clip": ("BOOLEAN", {"default": False}) + }, + "optional": { + "hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CLIP",) + CATEGORY = "advanced/hooks/clip" + FUNCTION = "apply_hooks" + + def apply_hooks(self, clip: 'CLIP', schedule_clip: bool, apply_to_conds: bool, hooks: comfy.hooks.HookGroup=None): + if hooks is not None: + clip = clip.clone() + if apply_to_conds: + clip.apply_hooks_to_conds = hooks + clip.patcher.forced_hooks = hooks.clone() + clip.use_clip_schedule = schedule_clip + if not clip.use_clip_schedule: + clip.patcher.forced_hooks.set_keyframes_on_hooks(None) + clip.patcher.register_all_hook_patches(hooks.get_dict_repr(), comfy.hooks.EnumWeightTarget.Clip) + return (clip,) + +class ConditioningTimestepsRange: + NodeId = 'ConditioningTimestepsRange' + NodeName = 'Timesteps Range' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE") + RETURN_NAMES = ("TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE") + CATEGORY = "advanced/hooks" + FUNCTION = "create_range" + + def create_range(self, start_percent: float, end_percent: float): + return ((start_percent, end_percent), (0.0, start_percent), (end_percent, 1.0)) +#------------------------------------------ +########################################### + + +########################################### +# Create Hooks +#------------------------------------------ +class CreateHookLora: + NodeId = 'CreateHookLora' + NodeName = 'Create Hook LoRA' + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "lora_name": (folder_paths.get_filename_list("loras"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "strength_clip": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook" + + def create_hook(self, lora_name: str, strength_model: float, strength_clip: float, prev_hooks: comfy.hooks.HookGroup=None): + if prev_hooks is None: + prev_hooks = comfy.hooks.HookGroup() + prev_hooks.clone() + + if strength_model == 0 and strength_clip == 0: + return (prev_hooks,) + + lora_path = folder_paths.get_full_path("loras", lora_name) + lora = None + if self.loaded_lora is not None: + if self.loaded_lora[0] == lora_path: + lora = self.loaded_lora[1] + else: + temp = self.loaded_lora + self.loaded_lora = None + del temp + + if lora is None: + lora = comfy.utils.load_torch_file(lora_path, safe_load=True) + self.loaded_lora = (lora_path, lora) + + hooks = comfy.hooks.create_hook_lora(lora=lora, strength_model=strength_model, strength_clip=strength_clip) + return (prev_hooks.clone_and_combine(hooks),) + +class CreateHookLoraModelOnly(CreateHookLora): + NodeId = 'CreateHookLoraModelOnly' + NodeName = 'Create Hook LoRA (MO)' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "lora_name": (folder_paths.get_filename_list("loras"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook_model_only" + + def create_hook_model_only(self, lora_name: str, strength_model: float, prev_hooks: comfy.hooks.HookGroup=None): + return self.create_hook(lora_name=lora_name, strength_model=strength_model, strength_clip=0, prev_hooks=prev_hooks) + +class CreateHookModelAsLora: + NodeId = 'CreateHookModelAsLora' + NodeName = 'Create Hook Model as LoRA' + + def __init__(self): + # when not None, will be in following format: + # (ckpt_path: str, weights_model: dict, weights_clip: dict) + self.loaded_weights = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (folder_paths.get_filename_list("checkpoints"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "strength_clip": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook" + + def create_hook(self, ckpt_name: str, strength_model: float, strength_clip: float, + prev_hooks: comfy.hooks.HookGroup=None): + if prev_hooks is None: + prev_hooks = comfy.hooks.HookGroup() + prev_hooks.clone() + + ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + weights_model = None + weights_clip = None + if self.loaded_weights is not None: + if self.loaded_weights[0] == ckpt_path: + weights_model = self.loaded_weights[1] + weights_clip = self.loaded_weights[2] + else: + temp = self.loaded_weights + self.loaded_weights = None + del temp + + if weights_model is None: + out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) + weights_model = comfy.hooks.get_patch_weights_from_model(out[0]) + weights_clip = comfy.hooks.get_patch_weights_from_model(out[1].patcher if out[1] else out[1]) + self.loaded_weights = (ckpt_path, weights_model, weights_clip) + + hooks = comfy.hooks.create_hook_model_as_lora(weights_model=weights_model, weights_clip=weights_clip, + strength_model=strength_model, strength_clip=strength_clip) + return (prev_hooks.clone_and_combine(hooks),) + +class CreateHookModelAsLoraModelOnly(CreateHookModelAsLora): + NodeId = 'CreateHookModelAsLoraModelOnly' + NodeName = 'Create Hook Model as LoRA (MO)' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (folder_paths.get_filename_list("checkpoints"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook_model_only" + + def create_hook_model_only(self, ckpt_name: str, strength_model: float, + prev_hooks: comfy.hooks.HookGroup=None): + return self.create_hook(ckpt_name=ckpt_name, strength_model=strength_model, strength_clip=0.0, prev_hooks=prev_hooks) +#------------------------------------------ +########################################### + + +########################################### +# Schedule Hooks +#------------------------------------------ +class SetHookKeyframes: + NodeId = 'SetHookKeyframes' + NodeName = 'Set Hook Keyframes' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "hooks": ("HOOKS",), + }, + "optional": { + "hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "set_hook_keyframes" + + def set_hook_keyframes(self, hooks: comfy.hooks.HookGroup, hook_kf: comfy.hooks.HookKeyframeGroup=None): + if hook_kf is not None: + hooks = hooks.clone() + hooks.set_keyframes_on_hooks(hook_kf=hook_kf) + return (hooks,) + +class CreateHookKeyframe: + NodeId = 'CreateHookKeyframe' + NodeName = 'Create Hook Keyframe' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "strength_mult": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframe" + + def create_hook_keyframe(self, strength_mult: float, start_percent: float, prev_hook_kf: comfy.hooks.HookKeyframeGroup=None): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + keyframe = comfy.hooks.HookKeyframe(strength=strength_mult, start_percent=start_percent) + prev_hook_kf.add(keyframe) + return (prev_hook_kf,) + +class CreateHookKeyframesInterpolated: + NodeId = 'CreateHookKeyframesInterpolated' + NodeName = 'Create Hook Keyframes Interp.' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "strength_start": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ), + "strength_end": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ), + "interpolation": (comfy.hooks.InterpolationMethod._LIST, ), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "keyframes_count": ("INT", {"default": 5, "min": 2, "max": 100, "step": 1}), + "print_keyframes": ("BOOLEAN", {"default": False}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframes" + + def create_hook_keyframes(self, strength_start: float, strength_end: float, interpolation: str, + start_percent: float, end_percent: float, keyframes_count: int, + print_keyframes=False, prev_hook_kf: comfy.hooks.HookKeyframeGroup=None): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + percents = comfy.hooks.InterpolationMethod.get_weights(num_from=start_percent, num_to=end_percent, length=keyframes_count, + method=comfy.hooks.InterpolationMethod.LINEAR) + strengths = comfy.hooks.InterpolationMethod.get_weights(num_from=strength_start, num_to=strength_end, length=keyframes_count, method=interpolation) + + is_first = True + for percent, strength in zip(percents, strengths): + guarantee_steps = 0 + if is_first: + guarantee_steps = 1 + is_first = False + prev_hook_kf.add(comfy.hooks.HookKeyframe(strength=strength, start_percent=percent, guarantee_steps=guarantee_steps)) + if print_keyframes: + print(f"Hook Keyframe - start_percent:{percent} = {strength}") + return (prev_hook_kf,) + +class CreateHookKeyframesFromFloats: + NodeId = 'CreateHookKeyframesFromFloats' + NodeName = 'Create Hook Keyframes From Floats' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "floats_strength": ("FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": True}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "print_keyframes": ("BOOLEAN", {"default": False}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframes" + + def create_hook_keyframes(self, floats_strength: Union[float, list[float]], + start_percent: float, end_percent: float, + prev_hook_kf: comfy.hooks.HookKeyframeGroup=None, print_keyframes=False): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + if type(floats_strength) in (float, int): + floats_strength = [float(floats_strength)] + elif isinstance(floats_strength, Iterable): + pass + else: + raise Exception(f"floats_strength must be either an iterable input or a float, but was{type(floats_strength).__repr__}.") + percents = comfy.hooks.InterpolationMethod.get_weights(num_from=start_percent, num_to=end_percent, length=len(floats_strength), + method=comfy.hooks.InterpolationMethod.LINEAR) + + is_first = True + for percent, strength in zip(percents, floats_strength): + guarantee_steps = 0 + if is_first: + guarantee_steps = 1 + is_first = False + prev_hook_kf.add(comfy.hooks.HookKeyframe(strength=strength, start_percent=percent, guarantee_steps=guarantee_steps)) + if print_keyframes: + print(f"Hook Keyframe - start_percent:{percent} = {strength}") + return (prev_hook_kf,) +#------------------------------------------ +########################################### + + +class SetModelHooksOnCond: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "conditioning": ("CONDITIONING",), + "hooks": ("HOOKS",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/manual" + FUNCTION = "attach_hook" + + def attach_hook(self, conditioning, hooks: comfy.hooks.HookGroup): + return (comfy.hooks.set_hooks_for_conditioning(conditioning, hooks),) + + +########################################### +# Combine Hooks +#------------------------------------------ +class CombineHooks: + NodeId = 'CombineHooks2' + NodeName = 'Combine Hooks [2]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) + +class CombineHooksFour: + NodeId = 'CombineHooks4' + NodeName = 'Combine Hooks [4]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + "hooks_C": ("HOOKS",), + "hooks_D": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None, + hooks_C: comfy.hooks.HookGroup=None, + hooks_D: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B, hooks_C, hooks_D] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) + +class CombineHooksEight: + NodeId = 'CombineHooks8' + NodeName = 'Combine Hooks [8]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + "hooks_C": ("HOOKS",), + "hooks_D": ("HOOKS",), + "hooks_E": ("HOOKS",), + "hooks_F": ("HOOKS",), + "hooks_G": ("HOOKS",), + "hooks_H": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None, + hooks_C: comfy.hooks.HookGroup=None, + hooks_D: comfy.hooks.HookGroup=None, + hooks_E: comfy.hooks.HookGroup=None, + hooks_F: comfy.hooks.HookGroup=None, + hooks_G: comfy.hooks.HookGroup=None, + hooks_H: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B, hooks_C, hooks_D, hooks_E, hooks_F, hooks_G, hooks_H] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) +#------------------------------------------ +########################################### + +node_list = [ + # Create + CreateHookLora, + CreateHookLoraModelOnly, + CreateHookModelAsLora, + CreateHookModelAsLoraModelOnly, + # Scheduling + SetHookKeyframes, + CreateHookKeyframe, + CreateHookKeyframesInterpolated, + CreateHookKeyframesFromFloats, + # Combine + CombineHooks, + CombineHooksFour, + CombineHooksEight, + # Attach + ConditioningSetProperties, + ConditioningSetPropertiesAndCombine, + PairConditioningSetProperties, + PairConditioningSetPropertiesAndCombine, + ConditioningSetDefaultAndCombine, + PairConditioningSetDefaultAndCombine, + PairConditioningCombine, + SetClipHooks, + # Other + ConditioningTimestepsRange, +] +NODE_CLASS_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS = {} + +for node in node_list: + NODE_CLASS_MAPPINGS[node.NodeId] = node + NODE_DISPLAY_NAME_MAPPINGS[node.NodeId] = node.NodeName diff --git a/comfy_extras/nodes_hunyuan.py b/comfy_extras/nodes_hunyuan.py index b03eaf6a2..d6408269f 100644 --- a/comfy_extras/nodes_hunyuan.py +++ b/comfy_extras/nodes_hunyuan.py @@ -1,3 +1,8 @@ +import nodes +import torch +import comfy.model_management + + class CLIPTextEncodeHunyuanDiT: @classmethod def INPUT_TYPES(s): @@ -15,11 +20,25 @@ class CLIPTextEncodeHunyuanDiT: tokens = clip.tokenize(bert) tokens["mt5xl"] = clip.tokenize(mt5xl)["mt5xl"] - output = clip.encode_from_tokens(tokens, return_pooled=True, return_dict=True) - cond = output.pop("cond") - return ([[cond, output]], ) + return (clip.encode_from_tokens_scheduled(tokens), ) +class EmptyHunyuanLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 848, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 480, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 25, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 4}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + return ({"samples":latent}, ) NODE_CLASS_MAPPINGS = { "CLIPTextEncodeHunyuanDiT": CLIPTextEncodeHunyuanDiT, + "EmptyHunyuanLatentVideo": EmptyHunyuanLatentVideo, } diff --git a/comfy_extras/nodes_hypernetwork.py b/comfy_extras/nodes_hypernetwork.py index cafafa6ab..665632292 100644 --- a/comfy_extras/nodes_hypernetwork.py +++ b/comfy_extras/nodes_hypernetwork.py @@ -107,7 +107,7 @@ class HypernetworkLoader: CATEGORY = "loaders" def load_hypernetwork(self, model, hypernetwork_name, strength): - hypernetwork_path = folder_paths.get_full_path("hypernetworks", hypernetwork_name) + hypernetwork_path = folder_paths.get_full_path_or_raise("hypernetworks", hypernetwork_name) model_hypernetwork = model.clone() patch = load_hypernetwork_patch(hypernetwork_path, strength) if patch is not None: diff --git a/comfy_extras/nodes_hypertile.py b/comfy_extras/nodes_hypertile.py index 227133f39..b366117c7 100644 --- a/comfy_extras/nodes_hypertile.py +++ b/comfy_extras/nodes_hypertile.py @@ -35,8 +35,6 @@ class HyperTile: CATEGORY = "model_patches/unet" def patch(self, model, tile_size, swap_size, max_depth, scale_depth): - model_channels = model.model.model_config.unet_config["model_channels"] - latent_tile_size = max(32, tile_size) // 8 self.temp = None diff --git a/comfy_extras/nodes_latent.py b/comfy_extras/nodes_latent.py index eabae0885..af2736818 100644 --- a/comfy_extras/nodes_latent.py +++ b/comfy_extras/nodes_latent.py @@ -1,4 +1,5 @@ import comfy.utils +import comfy_extras.nodes_post_processing import torch def reshape_latent_to(target_shape, latent): @@ -145,6 +146,131 @@ class LatentBatchSeedBehavior: return (samples_out,) +class LatentApplyOperation: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples": ("LATENT",), + "operation": ("LATENT_OPERATION",), + }} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, samples, operation): + samples_out = samples.copy() + + s1 = samples["samples"] + samples_out["samples"] = operation(latent=s1) + return (samples_out,) + +class LatentApplyOperationCFG: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "operation": ("LATENT_OPERATION",), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def patch(self, model, operation): + m = model.clone() + + def pre_cfg_function(args): + conds_out = args["conds_out"] + if len(conds_out) == 2: + conds_out[0] = operation(latent=(conds_out[0] - conds_out[1])) + conds_out[1] + else: + conds_out[0] = operation(latent=conds_out[0]) + return conds_out + + m.set_model_sampler_pre_cfg_function(pre_cfg_function) + return (m, ) + +class LatentOperationTonemapReinhard: + @classmethod + def INPUT_TYPES(s): + return {"required": { "multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}), + }} + + RETURN_TYPES = ("LATENT_OPERATION",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, multiplier): + def tonemap_reinhard(latent, **kwargs): + latent_vector_magnitude = (torch.linalg.vector_norm(latent, dim=(1)) + 0.0000000001)[:,None] + normalized_latent = latent / latent_vector_magnitude + + mean = torch.mean(latent_vector_magnitude, dim=(1,2,3), keepdim=True) + std = torch.std(latent_vector_magnitude, dim=(1,2,3), keepdim=True) + + top = (std * 5 + mean) * multiplier + + #reinhard + latent_vector_magnitude *= (1.0 / top) + new_magnitude = latent_vector_magnitude / (latent_vector_magnitude + 1.0) + new_magnitude *= top + + return normalized_latent * new_magnitude + return (tonemap_reinhard,) + +class LatentOperationSharpen: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sharpen_radius": ("INT", { + "default": 9, + "min": 1, + "max": 31, + "step": 1 + }), + "sigma": ("FLOAT", { + "default": 1.0, + "min": 0.1, + "max": 10.0, + "step": 0.1 + }), + "alpha": ("FLOAT", { + "default": 0.1, + "min": 0.0, + "max": 5.0, + "step": 0.01 + }), + }} + + RETURN_TYPES = ("LATENT_OPERATION",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, sharpen_radius, sigma, alpha): + def sharpen(latent, **kwargs): + luminance = (torch.linalg.vector_norm(latent, dim=(1)) + 1e-6)[:,None] + normalized_latent = latent / luminance + channels = latent.shape[1] + + kernel_size = sharpen_radius * 2 + 1 + kernel = comfy_extras.nodes_post_processing.gaussian_kernel(kernel_size, sigma, device=luminance.device) + center = kernel_size // 2 + + kernel *= alpha * -10 + kernel[center, center] = kernel[center, center] - kernel.sum() + 1.0 + + padded_image = torch.nn.functional.pad(normalized_latent, (sharpen_radius,sharpen_radius,sharpen_radius,sharpen_radius), 'reflect') + sharpened = torch.nn.functional.conv2d(padded_image, kernel.repeat(channels, 1, 1).unsqueeze(1), padding=kernel_size // 2, groups=channels)[:,:,sharpen_radius:-sharpen_radius, sharpen_radius:-sharpen_radius] + + return luminance * sharpened + return (sharpen,) + NODE_CLASS_MAPPINGS = { "LatentAdd": LatentAdd, "LatentSubtract": LatentSubtract, @@ -152,4 +278,8 @@ NODE_CLASS_MAPPINGS = { "LatentInterpolate": LatentInterpolate, "LatentBatch": LatentBatch, "LatentBatchSeedBehavior": LatentBatchSeedBehavior, + "LatentApplyOperation": LatentApplyOperation, + "LatentApplyOperationCFG": LatentApplyOperationCFG, + "LatentOperationTonemapReinhard": LatentOperationTonemapReinhard, + "LatentOperationSharpen": LatentOperationSharpen, } diff --git a/comfy_extras/nodes_load_3d.py b/comfy_extras/nodes_load_3d.py new file mode 100644 index 000000000..b72a357b0 --- /dev/null +++ b/comfy_extras/nodes_load_3d.py @@ -0,0 +1,124 @@ +import nodes +import folder_paths +import os + +def normalize_path(path): + return path.replace('\\', '/') + +class Load3D(): + @classmethod + def INPUT_TYPES(s): + input_dir = os.path.join(folder_paths.get_input_directory(), "3d") + + os.makedirs(input_dir, exist_ok=True) + + files = [normalize_path(os.path.join("3d", f)) for f in os.listdir(input_dir) if f.endswith(('.gltf', '.glb', '.obj', '.mtl', '.fbx', '.stl'))] + + return {"required": { + "model_file": (sorted(files), {"file_upload": True}), + "image": ("LOAD_3D", {}), + "width": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "height": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "show_grid": ([True, False],), + "camera_type": (["perspective", "orthographic"],), + "view": (["front", "right", "top", "isometric"],), + "material": (["original", "normal", "wireframe", "depth"],), + "bg_color": ("STRING", {"default": "#000000", "multiline": False}), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + }} + + RETURN_TYPES = ("IMAGE", "MASK", "STRING") + RETURN_NAMES = ("image", "mask", "mesh_path") + + FUNCTION = "process" + EXPERIMENTAL = True + + CATEGORY = "3d" + + def process(self, model_file, image, **kwargs): + imagepath = folder_paths.get_annotated_filepath(image) + + load_image_node = nodes.LoadImage() + + output_image, output_mask = load_image_node.load_image(image=imagepath) + + return output_image, output_mask, model_file, + +class Load3DAnimation(): + @classmethod + def INPUT_TYPES(s): + input_dir = os.path.join(folder_paths.get_input_directory(), "3d") + + os.makedirs(input_dir, exist_ok=True) + + files = [normalize_path(os.path.join("3d", f)) for f in os.listdir(input_dir) if f.endswith(('.gltf', '.glb', '.fbx'))] + + return {"required": { + "model_file": (sorted(files), {"file_upload": True}), + "image": ("LOAD_3D_ANIMATION", {}), + "width": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "height": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "show_grid": ([True, False],), + "camera_type": (["perspective", "orthographic"],), + "view": (["front", "right", "top", "isometric"],), + "material": (["original", "normal", "wireframe", "depth"],), + "bg_color": ("STRING", {"default": "#000000", "multiline": False}), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + "animation_speed": (["0.1", "0.5", "1", "1.5", "2"], {"default": "1"}), + }} + + RETURN_TYPES = ("IMAGE", "MASK", "STRING") + RETURN_NAMES = ("image", "mask", "mesh_path") + + FUNCTION = "process" + EXPERIMENTAL = True + + CATEGORY = "3d" + + def process(self, model_file, image, **kwargs): + imagepath = folder_paths.get_annotated_filepath(image) + + load_image_node = nodes.LoadImage() + + output_image, output_mask = load_image_node.load_image(image=imagepath) + + return output_image, output_mask, model_file, + +class Preview3D(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model_file": ("STRING", {"default": "", "multiline": False}), + "show_grid": ([True, False],), + "camera_type": (["perspective", "orthographic"],), + "view": (["front", "right", "top", "isometric"],), + "material": (["original", "normal", "wireframe", "depth"],), + "bg_color": ("STRING", {"default": "#000000", "multiline": False}), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + }} + + OUTPUT_NODE = True + RETURN_TYPES = () + + CATEGORY = "3d" + + FUNCTION = "process" + EXPERIMENTAL = True + + def process(self, model_file, **kwargs): + return {"ui": {"model_file": [model_file]}, "result": ()} + +NODE_CLASS_MAPPINGS = { + "Load3D": Load3D, + "Load3DAnimation": Load3DAnimation, + "Preview3D": Preview3D +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Load3D": "Load 3D", + "Load3DAnimation": "Load 3D - Animation", + "Preview3D": "Preview 3D" +} \ No newline at end of file diff --git a/comfy_extras/nodes_lora_extract.py b/comfy_extras/nodes_lora_extract.py new file mode 100644 index 000000000..dfd4fe9f4 --- /dev/null +++ b/comfy_extras/nodes_lora_extract.py @@ -0,0 +1,119 @@ +import torch +import comfy.model_management +import comfy.utils +import folder_paths +import os +import logging +from enum import Enum + +CLAMP_QUANTILE = 0.99 + +def extract_lora(diff, rank): + conv2d = (len(diff.shape) == 4) + kernel_size = None if not conv2d else diff.size()[2:4] + conv2d_3x3 = conv2d and kernel_size != (1, 1) + out_dim, in_dim = diff.size()[0:2] + rank = min(rank, in_dim, out_dim) + + if conv2d: + if conv2d_3x3: + diff = diff.flatten(start_dim=1) + else: + diff = diff.squeeze() + + + U, S, Vh = torch.linalg.svd(diff.float()) + U = U[:, :rank] + S = S[:rank] + U = U @ torch.diag(S) + Vh = Vh[:rank, :] + + dist = torch.cat([U.flatten(), Vh.flatten()]) + hi_val = torch.quantile(dist, CLAMP_QUANTILE) + low_val = -hi_val + + U = U.clamp(low_val, hi_val) + Vh = Vh.clamp(low_val, hi_val) + if conv2d: + U = U.reshape(out_dim, rank, 1, 1) + Vh = Vh.reshape(rank, in_dim, kernel_size[0], kernel_size[1]) + return (U, Vh) + +class LORAType(Enum): + STANDARD = 0 + FULL_DIFF = 1 + +LORA_TYPES = {"standard": LORAType.STANDARD, + "full_diff": LORAType.FULL_DIFF} + +def calc_lora_model(model_diff, rank, prefix_model, prefix_lora, output_sd, lora_type, bias_diff=False): + comfy.model_management.load_models_gpu([model_diff], force_patch_weights=True) + sd = model_diff.model_state_dict(filter_prefix=prefix_model) + + for k in sd: + if k.endswith(".weight"): + weight_diff = sd[k] + if lora_type == LORAType.STANDARD: + if weight_diff.ndim < 2: + if bias_diff: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().half().cpu() + continue + try: + out = extract_lora(weight_diff, rank) + output_sd["{}{}.lora_up.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[0].contiguous().half().cpu() + output_sd["{}{}.lora_down.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[1].contiguous().half().cpu() + except: + logging.warning("Could not generate lora weights for key {}, is the weight difference a zero?".format(k)) + elif lora_type == LORAType.FULL_DIFF: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().half().cpu() + + elif bias_diff and k.endswith(".bias"): + output_sd["{}{}.diff_b".format(prefix_lora, k[len(prefix_model):-5])] = sd[k].contiguous().half().cpu() + return output_sd + +class LoraSave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": {"filename_prefix": ("STRING", {"default": "loras/ComfyUI_extracted_lora"}), + "rank": ("INT", {"default": 8, "min": 1, "max": 4096, "step": 1}), + "lora_type": (tuple(LORA_TYPES.keys()),), + "bias_diff": ("BOOLEAN", {"default": True}), + }, + "optional": {"model_diff": ("MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}), + "text_encoder_diff": ("CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."})}, + } + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "_for_testing" + + def save(self, filename_prefix, rank, lora_type, bias_diff, model_diff=None, text_encoder_diff=None): + if model_diff is None and text_encoder_diff is None: + return {} + + lora_type = LORA_TYPES.get(lora_type) + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + + output_sd = {} + if model_diff is not None: + output_sd = calc_lora_model(model_diff, rank, "diffusion_model.", "diffusion_model.", output_sd, lora_type, bias_diff=bias_diff) + if text_encoder_diff is not None: + output_sd = calc_lora_model(text_encoder_diff.patcher, rank, "", "text_encoders.", output_sd, lora_type, bias_diff=bias_diff) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + comfy.utils.save_torch_file(output_sd, output_checkpoint, metadata=None) + return {} + +NODE_CLASS_MAPPINGS = { + "LoraSave": LoraSave +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "LoraSave": "Extract and Save Lora" +} diff --git a/comfy_extras/nodes_lt.py b/comfy_extras/nodes_lt.py new file mode 100644 index 000000000..dec912416 --- /dev/null +++ b/comfy_extras/nodes_lt.py @@ -0,0 +1,184 @@ +import nodes +import node_helpers +import torch +import comfy.model_management +import comfy.model_sampling +import math + +class EmptyLTXVLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 768, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "height": ("INT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "length": ("INT", {"default": 97, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video/ltxv" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 128, ((length - 1) // 8) + 1, height // 32, width // 32], device=comfy.model_management.intermediate_device()) + return ({"samples": latent}, ) + + +class LTXVImgToVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "vae": ("VAE",), + "image": ("IMAGE",), + "width": ("INT", {"default": 768, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "height": ("INT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "length": ("INT", {"default": 97, "min": 9, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "image_noise_scale": ("FLOAT", {"default": 0.15, "min": 0, "max": 1.0, "step": 0.01, "tooltip": "Amount of noise to apply on conditioning image latent."}) + }} + + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + CATEGORY = "conditioning/video_models" + FUNCTION = "generate" + + def generate(self, positive, negative, image, vae, width, height, length, batch_size, image_noise_scale): + pixels = comfy.utils.common_upscale(image.movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1) + encode_pixels = pixels[:, :, :, :3] + t = vae.encode(encode_pixels) + positive = node_helpers.conditioning_set_values(positive, {"guiding_latent": t, "guiding_latent_noise_scale": image_noise_scale}) + negative = node_helpers.conditioning_set_values(negative, {"guiding_latent": t, "guiding_latent_noise_scale": image_noise_scale}) + + latent = torch.zeros([batch_size, 128, ((length - 1) // 8) + 1, height // 32, width // 32], device=comfy.model_management.intermediate_device()) + latent[:, :, :t.shape[2]] = t + return (positive, negative, {"samples": latent}, ) + + +class LTXVConditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "frame_rate": ("FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + FUNCTION = "append" + + CATEGORY = "conditioning/video_models" + + def append(self, positive, negative, frame_rate): + positive = node_helpers.conditioning_set_values(positive, {"frame_rate": frame_rate}) + negative = node_helpers.conditioning_set_values(negative, {"frame_rate": frame_rate}) + return (positive, negative) + + +class ModelSamplingLTXV: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "max_shift": ("FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step":0.01}), + "base_shift": ("FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step":0.01}), + }, + "optional": {"latent": ("LATENT",), } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, max_shift, base_shift, latent=None): + m = model.clone() + + if latent is None: + tokens = 4096 + else: + tokens = math.prod(latent["samples"].shape[2:]) + + x1 = 1024 + x2 = 4096 + mm = (max_shift - base_shift) / (x2 - x1) + b = base_shift - mm * x1 + shift = (tokens) * mm + b + + sampling_base = comfy.model_sampling.ModelSamplingFlux + sampling_type = comfy.model_sampling.CONST + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(shift=shift) + m.add_object_patch("model_sampling", model_sampling) + + return (m, ) + + +class LTXVScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "max_shift": ("FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step":0.01}), + "base_shift": ("FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step":0.01}), + "stretch": ("BOOLEAN", { + "default": True, + "tooltip": "Stretch the sigmas to be in the range [terminal, 1]." + }), + "terminal": ( + "FLOAT", + { + "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01, + "tooltip": "The terminal value of the sigmas after stretching." + }, + ), + }, + "optional": {"latent": ("LATENT",), } + } + + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, max_shift, base_shift, stretch, terminal, latent=None): + if latent is None: + tokens = 4096 + else: + tokens = math.prod(latent["samples"].shape[2:]) + + sigmas = torch.linspace(1.0, 0.0, steps + 1) + + x1 = 1024 + x2 = 4096 + mm = (max_shift - base_shift) / (x2 - x1) + b = base_shift - mm * x1 + sigma_shift = (tokens) * mm + b + + power = 1 + sigmas = torch.where( + sigmas != 0, + math.exp(sigma_shift) / (math.exp(sigma_shift) + (1 / sigmas - 1) ** power), + 0, + ) + + # Stretch sigmas so that its final value matches the given terminal value. + if stretch: + non_zero_mask = sigmas != 0 + non_zero_sigmas = sigmas[non_zero_mask] + one_minus_z = 1.0 - non_zero_sigmas + scale_factor = one_minus_z[-1] / (1.0 - terminal) + stretched = 1.0 - (one_minus_z / scale_factor) + sigmas[non_zero_mask] = stretched + + return (sigmas,) + + +NODE_CLASS_MAPPINGS = { + "EmptyLTXVLatentVideo": EmptyLTXVLatentVideo, + "LTXVImgToVideo": LTXVImgToVideo, + "ModelSamplingLTXV": ModelSamplingLTXV, + "LTXVConditioning": LTXVConditioning, + "LTXVScheduler": LTXVScheduler, +} diff --git a/comfy_extras/nodes_mahiro.py b/comfy_extras/nodes_mahiro.py new file mode 100644 index 000000000..8fcdfba75 --- /dev/null +++ b/comfy_extras/nodes_mahiro.py @@ -0,0 +1,41 @@ +import torch +import torch.nn.functional as F + +class Mahiro: + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL",), + }} + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("patched_model",) + FUNCTION = "patch" + CATEGORY = "_for_testing" + DESCRIPTION = "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt." + def patch(self, model): + m = model.clone() + def mahiro_normd(args): + scale: float = args['cond_scale'] + cond_p: torch.Tensor = args['cond_denoised'] + uncond_p: torch.Tensor = args['uncond_denoised'] + #naive leap + leap = cond_p * scale + #sim with uncond leap + u_leap = uncond_p * scale + cfg = args["denoised"] + merge = (leap + cfg) / 2 + normu = torch.sqrt(u_leap.abs()) * u_leap.sign() + normm = torch.sqrt(merge.abs()) * merge.sign() + sim = F.cosine_similarity(normu, normm).mean() + simsc = 2 * (sim+1) + wm = (simsc*cfg + (4-simsc)*leap) / 4 + return wm + m.set_model_sampler_post_cfg_function(mahiro_normd) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "Mahiro": Mahiro +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Mahiro": "Mahiro is so cute that she deserves a better guidance function!! (。・ω・。)", +} diff --git a/comfy_extras/nodes_mochi.py b/comfy_extras/nodes_mochi.py new file mode 100644 index 000000000..1c474faa9 --- /dev/null +++ b/comfy_extras/nodes_mochi.py @@ -0,0 +1,23 @@ +import nodes +import torch +import comfy.model_management + +class EmptyMochiLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 848, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 480, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 25, "min": 7, "max": nodes.MAX_RESOLUTION, "step": 6}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 12, ((length - 1) // 6) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + return ({"samples":latent}, ) + +NODE_CLASS_MAPPINGS = { + "EmptyMochiLatentVideo": EmptyMochiLatentVideo, +} diff --git a/comfy_extras/nodes_model_advanced.py b/comfy_extras/nodes_model_advanced.py index 918e6085a..285dbf530 100644 --- a/comfy_extras/nodes_model_advanced.py +++ b/comfy_extras/nodes_model_advanced.py @@ -1,4 +1,3 @@ -import folder_paths import comfy.sd import comfy.model_sampling import comfy.latent_formats @@ -26,8 +25,8 @@ class X0(comfy.model_sampling.EPS): class ModelSamplingDiscreteDistilled(comfy.model_sampling.ModelSamplingDiscrete): original_timesteps = 50 - def __init__(self, model_config=None): - super().__init__(model_config) + def __init__(self, model_config=None, zsnr=None): + super().__init__(model_config, zsnr=zsnr) self.skip_steps = self.num_timesteps // self.original_timesteps @@ -51,25 +50,6 @@ class ModelSamplingDiscreteDistilled(comfy.model_sampling.ModelSamplingDiscrete) return log_sigma.exp().to(timestep.device) -def rescale_zero_terminal_snr_sigmas(sigmas): - alphas_cumprod = 1 / ((sigmas * sigmas) + 1) - alphas_bar_sqrt = alphas_cumprod.sqrt() - - # Store old values. - alphas_bar_sqrt_0 = alphas_bar_sqrt[0].clone() - alphas_bar_sqrt_T = alphas_bar_sqrt[-1].clone() - - # Shift so the last timestep is zero. - alphas_bar_sqrt -= (alphas_bar_sqrt_T) - - # Scale so the first timestep is back to the old value. - alphas_bar_sqrt *= alphas_bar_sqrt_0 / (alphas_bar_sqrt_0 - alphas_bar_sqrt_T) - - # Convert alphas_bar_sqrt to betas - alphas_bar = alphas_bar_sqrt**2 # Revert sqrt - alphas_bar[-1] = 4.8973451890853435e-08 - return ((1 - alphas_bar) / alphas_bar) ** 0.5 - class ModelSamplingDiscrete: @classmethod def INPUT_TYPES(s): @@ -100,9 +80,7 @@ class ModelSamplingDiscrete: class ModelSamplingAdvanced(sampling_base, sampling_type): pass - model_sampling = ModelSamplingAdvanced(model.model.model_config) - if zsnr: - model_sampling.set_sigmas(rescale_zero_terminal_snr_sigmas(model_sampling.sigmas)) + model_sampling = ModelSamplingAdvanced(model.model.model_config, zsnr=zsnr) m.add_object_patch("model_sampling", model_sampling) return (m, ) @@ -262,7 +240,6 @@ class ModelSamplingContinuousV: def patch(self, model, sampling, sigma_max, sigma_min): m = model.clone() - latent_format = None sigma_data = 1.0 if sampling == "v_prediction": sampling_type = comfy.model_sampling.V_PREDICTION diff --git a/comfy_extras/nodes_model_downscale.py b/comfy_extras/nodes_model_downscale.py index 58b5073ec..49420dee9 100644 --- a/comfy_extras/nodes_model_downscale.py +++ b/comfy_extras/nodes_model_downscale.py @@ -1,4 +1,3 @@ -import torch import comfy.utils class PatchModelAddDownscale: @@ -17,7 +16,7 @@ class PatchModelAddDownscale: RETURN_TYPES = ("MODEL",) FUNCTION = "patch" - CATEGORY = "_for_testing" + CATEGORY = "model_patches/unet" def patch(self, model, block_number, downscale_factor, start_percent, end_percent, downscale_after_skip, downscale_method, upscale_method): model_sampling = model.get_model_object("model_sampling") diff --git a/comfy_extras/nodes_model_merging_model_specific.py b/comfy_extras/nodes_model_merging_model_specific.py index 9557d9b1f..7cd8f98b2 100644 --- a/comfy_extras/nodes_model_merging_model_specific.py +++ b/comfy_extras/nodes_model_merging_model_specific.py @@ -75,6 +75,34 @@ class ModelMergeSD3_2B(comfy_extras.nodes_model_merging.ModelMergeBlocks): return {"required": arg_dict} + +class ModelMergeAuraflow(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["init_x_linear."] = argument + arg_dict["positional_encoding"] = argument + arg_dict["cond_seq_linear."] = argument + arg_dict["register_tokens"] = argument + arg_dict["t_embedder."] = argument + + for i in range(4): + arg_dict["double_layers.{}.".format(i)] = argument + + for i in range(32): + arg_dict["single_layers.{}.".format(i)] = argument + + arg_dict["modF."] = argument + arg_dict["final_linear."] = argument + + return {"required": arg_dict} + class ModelMergeFlux1(comfy_extras.nodes_model_merging.ModelMergeBlocks): CATEGORY = "advanced/model_merging/model_specific" @@ -101,10 +129,81 @@ class ModelMergeFlux1(comfy_extras.nodes_model_merging.ModelMergeBlocks): return {"required": arg_dict} +class ModelMergeSD35_Large(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["pos_embed."] = argument + arg_dict["x_embedder."] = argument + arg_dict["context_embedder."] = argument + arg_dict["y_embedder."] = argument + arg_dict["t_embedder."] = argument + + for i in range(38): + arg_dict["joint_blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + +class ModelMergeMochiPreview(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["pos_frequencies."] = argument + arg_dict["t_embedder."] = argument + arg_dict["t5_y_embedder."] = argument + arg_dict["t5_yproj."] = argument + + for i in range(48): + arg_dict["blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + +class ModelMergeLTXV(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["patchify_proj."] = argument + arg_dict["adaln_single."] = argument + arg_dict["caption_projection."] = argument + + for i in range(28): + arg_dict["transformer_blocks.{}.".format(i)] = argument + + arg_dict["scale_shift_table"] = argument + arg_dict["proj_out."] = argument + + return {"required": arg_dict} + NODE_CLASS_MAPPINGS = { "ModelMergeSD1": ModelMergeSD1, "ModelMergeSD2": ModelMergeSD1, #SD1 and SD2 have the same blocks "ModelMergeSDXL": ModelMergeSDXL, "ModelMergeSD3_2B": ModelMergeSD3_2B, + "ModelMergeAuraflow": ModelMergeAuraflow, "ModelMergeFlux1": ModelMergeFlux1, + "ModelMergeSD35_Large": ModelMergeSD35_Large, + "ModelMergeMochiPreview": ModelMergeMochiPreview, + "ModelMergeLTXV": ModelMergeLTXV, } diff --git a/comfy_extras/nodes_perpneg.py b/comfy_extras/nodes_perpneg.py index 546276aa1..762c40220 100644 --- a/comfy_extras/nodes_perpneg.py +++ b/comfy_extras/nodes_perpneg.py @@ -26,6 +26,7 @@ class PerpNeg: FUNCTION = "patch" CATEGORY = "_for_testing" + DEPRECATED = True def patch(self, model, empty_conditioning, neg_scale): m = model.clone() diff --git a/comfy_extras/nodes_photomaker.py b/comfy_extras/nodes_photomaker.py index 29d127d74..d358ed6d5 100644 --- a/comfy_extras/nodes_photomaker.py +++ b/comfy_extras/nodes_photomaker.py @@ -16,6 +16,7 @@ VISION_CONFIG_DICT = { "patch_size": 14, "projection_dim": 768, "hidden_act": "quick_gelu", + "model_type": "clip_vision_model", } class MLP(nn.Module): @@ -126,7 +127,7 @@ class PhotoMakerLoader: CATEGORY = "_for_testing/photomaker" def load_photomaker_model(self, photomaker_model_name): - photomaker_model_path = folder_paths.get_full_path("photomaker", photomaker_model_name) + photomaker_model_path = folder_paths.get_full_path_or_raise("photomaker", photomaker_model_name) photomaker_model = PhotoMakerIDEncoder() data = comfy.utils.load_torch_file(photomaker_model_path, safe_load=True) if "id_encoder" in data: diff --git a/comfy_extras/nodes_sag.py b/comfy_extras/nodes_sag.py index 5e15b99e5..1bd8d7364 100644 --- a/comfy_extras/nodes_sag.py +++ b/comfy_extras/nodes_sag.py @@ -57,12 +57,24 @@ def create_blur_map(x0, attn, sigma=3.0, threshold=1.0): attn = attn.reshape(b, -1, hw1, hw2) # Global Average Pool mask = attn.mean(1, keepdim=False).sum(1, keepdim=False) > threshold - ratio = 2**(math.ceil(math.sqrt(lh * lw / hw1)) - 1).bit_length() - mid_shape = [math.ceil(lh / ratio), math.ceil(lw / ratio)] + + total = mask.shape[-1] + x = round(math.sqrt((lh / lw) * total)) + xx = None + for i in range(0, math.floor(math.sqrt(total) / 2)): + for j in [(x + i), max(1, x - i)]: + if total % j == 0: + xx = j + break + if xx is not None: + break + + x = xx + y = total // x # Reshape mask = ( - mask.reshape(b, *mid_shape) + mask.reshape(b, x, y) .unsqueeze(1) .type(attn.dtype) ) diff --git a/comfy_extras/nodes_sd3.py b/comfy_extras/nodes_sd3.py index 046096cba..d75b29e60 100644 --- a/comfy_extras/nodes_sd3.py +++ b/comfy_extras/nodes_sd3.py @@ -3,24 +3,29 @@ import comfy.sd import comfy.model_management import nodes import torch +import comfy_extras.nodes_slg + class TripleCLIPLoader: @classmethod def INPUT_TYPES(s): - return {"required": { "clip_name1": (folder_paths.get_filename_list("clip"), ), "clip_name2": (folder_paths.get_filename_list("clip"), ), "clip_name3": (folder_paths.get_filename_list("clip"), ) + return {"required": { "clip_name1": (folder_paths.get_filename_list("text_encoders"), ), "clip_name2": (folder_paths.get_filename_list("text_encoders"), ), "clip_name3": (folder_paths.get_filename_list("text_encoders"), ) }} RETURN_TYPES = ("CLIP",) FUNCTION = "load_clip" CATEGORY = "advanced/loaders" + DESCRIPTION = "[Recipes]\n\nsd3: clip-l, clip-g, t5" + def load_clip(self, clip_name1, clip_name2, clip_name3): - clip_path1 = folder_paths.get_full_path("clip", clip_name1) - clip_path2 = folder_paths.get_full_path("clip", clip_name2) - clip_path3 = folder_paths.get_full_path("clip", clip_name3) + clip_path1 = folder_paths.get_full_path_or_raise("text_encoders", clip_name1) + clip_path2 = folder_paths.get_full_path_or_raise("text_encoders", clip_name2) + clip_path3 = folder_paths.get_full_path_or_raise("text_encoders", clip_name3) clip = comfy.sd.load_clip(ckpt_paths=[clip_path1, clip_path2, clip_path3], embedding_directory=folder_paths.get_folder_paths("embeddings")) return (clip,) + class EmptySD3LatentImage: def __init__(self): self.device = comfy.model_management.intermediate_device() @@ -36,9 +41,10 @@ class EmptySD3LatentImage: CATEGORY = "latent/sd3" def generate(self, width, height, batch_size=1): - latent = torch.ones([batch_size, 16, height // 8, width // 8], device=self.device) * 0.0609 + latent = torch.zeros([batch_size, 16, height // 8, width // 8], device=self.device) return ({"samples":latent}, ) + class CLIPTextEncodeSD3: @classmethod def INPUT_TYPES(s): @@ -76,8 +82,7 @@ class CLIPTextEncodeSD3: tokens["l"] += empty["l"] while len(tokens["l"]) > len(tokens["g"]): tokens["g"] += empty["g"] - cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) - return ([[cond, {"pooled_output": pooled}]], ) + return (clip.encode_from_tokens_scheduled(tokens), ) class ControlNetApplySD3(nodes.ControlNetApplyAdvanced): @@ -93,15 +98,41 @@ class ControlNetApplySD3(nodes.ControlNetApplyAdvanced): "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) }} CATEGORY = "conditioning/controlnet" + DEPRECATED = True + + +class SkipLayerGuidanceSD3(comfy_extras.nodes_slg.SkipLayerGuidanceDiT): + ''' + Enhance guidance towards detailed dtructure by having another set of CFG negative with skipped layers. + Inspired by Perturbed Attention Guidance (https://arxiv.org/abs/2403.17377) + Experimental implementation by Dango233@StabilityAI. + ''' + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "scale": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}), + "start_percent": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}) + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "skip_guidance_sd3" + + CATEGORY = "advanced/guidance" + + def skip_guidance_sd3(self, model, layers, scale, start_percent, end_percent): + return self.skip_guidance(model=model, scale=scale, start_percent=start_percent, end_percent=end_percent, double_layers=layers) + NODE_CLASS_MAPPINGS = { "TripleCLIPLoader": TripleCLIPLoader, "EmptySD3LatentImage": EmptySD3LatentImage, "CLIPTextEncodeSD3": CLIPTextEncodeSD3, "ControlNetApplySD3": ControlNetApplySD3, + "SkipLayerGuidanceSD3": SkipLayerGuidanceSD3, } NODE_DISPLAY_NAME_MAPPINGS = { # Sampling - "ControlNetApplySD3": "ControlNetApply SD3 and HunyuanDiT", + "ControlNetApplySD3": "Apply Controlnet with VAE", } diff --git a/comfy_extras/nodes_slg.py b/comfy_extras/nodes_slg.py new file mode 100644 index 000000000..2fa09e250 --- /dev/null +++ b/comfy_extras/nodes_slg.py @@ -0,0 +1,84 @@ +import comfy.model_patcher +import comfy.samplers +import re + + +class SkipLayerGuidanceDiT: + ''' + Enhance guidance towards detailed dtructure by having another set of CFG negative with skipped layers. + Inspired by Perturbed Attention Guidance (https://arxiv.org/abs/2403.17377) + Original experimental implementation for SD3 by Dango233@StabilityAI. + ''' + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "double_layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "single_layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "scale": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}), + "start_percent": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}), + "rescaling_scale": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "skip_guidance" + EXPERIMENTAL = True + + DESCRIPTION = "Generic version of SkipLayerGuidance node that can be used on every DiT model." + + CATEGORY = "advanced/guidance" + + def skip_guidance(self, model, scale, start_percent, end_percent, double_layers="", single_layers="", rescaling_scale=0): + # check if layer is comma separated integers + def skip(args, extra_args): + return args + + model_sampling = model.get_model_object("model_sampling") + sigma_start = model_sampling.percent_to_sigma(start_percent) + sigma_end = model_sampling.percent_to_sigma(end_percent) + + double_layers = re.findall(r'\d+', double_layers) + double_layers = [int(i) for i in double_layers] + + single_layers = re.findall(r'\d+', single_layers) + single_layers = [int(i) for i in single_layers] + + if len(double_layers) == 0 and len(single_layers) == 0: + return (model, ) + + def post_cfg_function(args): + model = args["model"] + cond_pred = args["cond_denoised"] + cond = args["cond"] + cfg_result = args["denoised"] + sigma = args["sigma"] + x = args["input"] + model_options = args["model_options"].copy() + + for layer in double_layers: + model_options = comfy.model_patcher.set_model_options_patch_replace(model_options, skip, "dit", "double_block", layer) + + for layer in single_layers: + model_options = comfy.model_patcher.set_model_options_patch_replace(model_options, skip, "dit", "single_block", layer) + + model_sampling.percent_to_sigma(start_percent) + + sigma_ = sigma[0].item() + if scale > 0 and sigma_ >= sigma_end and sigma_ <= sigma_start: + (slg,) = comfy.samplers.calc_cond_batch(model, [cond], x, sigma, model_options) + cfg_result = cfg_result + (cond_pred - slg) * scale + if rescaling_scale != 0: + factor = cond_pred.std() / cfg_result.std() + factor = rescaling_scale * factor + (1 - rescaling_scale) + cfg_result *= factor + + return cfg_result + + m = model.clone() + m.set_model_sampler_post_cfg_function(post_cfg_function) + + return (m, ) + + +NODE_CLASS_MAPPINGS = { + "SkipLayerGuidanceDiT": SkipLayerGuidanceDiT, +} diff --git a/comfy_extras/nodes_stable_cascade.py b/comfy_extras/nodes_stable_cascade.py index fcbbeb27f..003403215 100644 --- a/comfy_extras/nodes_stable_cascade.py +++ b/comfy_extras/nodes_stable_cascade.py @@ -116,6 +116,7 @@ class StableCascade_SuperResolutionControlnet: RETURN_NAMES = ("controlnet_input", "stage_c", "stage_b") FUNCTION = "generate" + EXPERIMENTAL = True CATEGORY = "_for_testing/stable_cascade" def generate(self, image, vae): diff --git a/comfy_extras/nodes_tomesd.py b/comfy_extras/nodes_tomesd.py index df0485063..ce7b32c77 100644 --- a/comfy_extras/nodes_tomesd.py +++ b/comfy_extras/nodes_tomesd.py @@ -154,7 +154,7 @@ class TomePatchModel: RETURN_TYPES = ("MODEL",) FUNCTION = "patch" - CATEGORY = "_for_testing" + CATEGORY = "model_patches/unet" def patch(self, model, ratio): self.u = None diff --git a/comfy_extras/nodes_torch_compile.py b/comfy_extras/nodes_torch_compile.py new file mode 100644 index 000000000..1fe6f42c7 --- /dev/null +++ b/comfy_extras/nodes_torch_compile.py @@ -0,0 +1,22 @@ +import torch + +class TorchCompileModel: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "backend": (["inductor", "cudagraphs"],), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing" + EXPERIMENTAL = True + + def patch(self, model, backend): + m = model.clone() + m.add_object_patch("diffusion_model", torch.compile(model=m.get_model_object("diffusion_model"), backend=backend)) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "TorchCompileModel": TorchCompileModel, +} diff --git a/comfy_extras/nodes_upscale_model.py b/comfy_extras/nodes_upscale_model.py index bca79ef2e..04c948341 100644 --- a/comfy_extras/nodes_upscale_model.py +++ b/comfy_extras/nodes_upscale_model.py @@ -1,4 +1,3 @@ -import os import logging from spandrel import ModelLoader, ImageModelDescriptor from comfy import model_management @@ -25,7 +24,7 @@ class UpscaleModelLoader: CATEGORY = "loaders" def load_model(self, model_name): - model_path = folder_paths.get_full_path("upscale_models", model_name) + model_path = folder_paths.get_full_path_or_raise("upscale_models", model_name) sd = comfy.utils.load_torch_file(model_path, safe_load=True) if "module.layers.0.residual_group.blocks.0.norm1.weight" in sd: sd = comfy.utils.state_dict_prefix_replace(sd, {"module.":""}) diff --git a/comfy_extras/nodes_video_model.py b/comfy_extras/nodes_video_model.py index 1a0189ed4..e7a7ec181 100644 --- a/comfy_extras/nodes_video_model.py +++ b/comfy_extras/nodes_video_model.py @@ -17,7 +17,7 @@ class ImageOnlyCheckpointLoader: CATEGORY = "loaders/video_models" def load_checkpoint(self, ckpt_name, output_vae=True, output_clip=True): - ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=False, output_clipvision=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) return (out[0], out[3], out[2]) @@ -107,7 +107,7 @@ class VideoTriangleCFGGuidance: return (m, ) class ImageOnlyCheckpointSave(comfy_extras.nodes_model_merging.CheckpointSave): - CATEGORY = "_for_testing" + CATEGORY = "advanced/model_merging" @classmethod def INPUT_TYPES(s): diff --git a/comfyui_screenshot.png b/comfyui_screenshot.png deleted file mode 100644 index 73272eae6..000000000 Binary files a/comfyui_screenshot.png and /dev/null differ diff --git a/custom_nodes/websocket_image_save.py b/custom_nodes/websocket_image_save.py index 5aa573642..15f87f9f5 100644 --- a/custom_nodes/websocket_image_save.py +++ b/custom_nodes/websocket_image_save.py @@ -1,7 +1,5 @@ -from PIL import Image, ImageOps -from io import BytesIO +from PIL import Image import numpy as np -import struct import comfy.utils import time @@ -37,6 +35,7 @@ class SaveImageWebsocket: return {} + @classmethod def IS_CHANGED(s, images): return time.time() diff --git a/execution.py b/execution.py index e66aabbcc..7c42911be 100644 --- a/execution.py +++ b/execution.py @@ -16,7 +16,7 @@ import comfy.model_management from comfy_execution.graph import get_input_info, ExecutionList, DynamicPrompt, ExecutionBlocker from comfy_execution.graph_utils import is_link, GraphBuilder from comfy_execution.caching import HierarchicalCache, LRUCache, CacheKeySetInputSignature, CacheKeySetID -from comfy.cli_args import args +from comfy_execution.validation import validate_node_input class ExecutionResult(Enum): SUCCESS = 0 @@ -144,11 +144,16 @@ def _map_node_over_list(obj, input_data_all, func, allow_interrupt=False, execut return {k: v[i if len(v) > i else -1] for k, v in d.items()} results = [] - def process_inputs(inputs, index=None): + def process_inputs(inputs, index=None, input_is_list=False): if allow_interrupt: nodes.before_node_execution() execution_block = None for k, v in inputs.items(): + if input_is_list: + for e in v: + if isinstance(e, ExecutionBlocker): + v = e + break if isinstance(v, ExecutionBlocker): execution_block = execution_block_cb(v) if execution_block_cb else v break @@ -160,7 +165,7 @@ def _map_node_over_list(obj, input_data_all, func, allow_interrupt=False, execut results.append(execution_block) if input_is_list: - process_inputs(input_data_all, 0) + process_inputs(input_data_all, 0, input_is_list=input_is_list) elif max_len_input == 0: process_inputs({}) else: @@ -179,7 +184,13 @@ def merge_result_data(results, obj): # merge node execution results for i, is_list in zip(range(len(results[0])), output_is_list): if is_list: - output.append([x for o in results for x in o[i]]) + value = [] + for o in results: + if isinstance(o[i], ExecutionBlocker): + value.append(o[i]) + else: + value.extend(o[i]) + output.append(value) else: output.append([o[i] for o in results]) return output @@ -474,7 +485,7 @@ class PromptExecutor: if self.caches.outputs.get(node_id) is not None: cached_nodes.append(node_id) - comfy.model_management.cleanup_models(keep_clone_weights_loaded=True) + comfy.model_management.cleanup_models_gc() self.add_message("execution_cached", { "nodes": cached_nodes, "prompt_id": prompt_id}, broadcast=False) @@ -521,7 +532,6 @@ class PromptExecutor: comfy.model_management.unload_all_models() - def validate_inputs(prompt, item, validated): unique_id = item if unique_id in validated: @@ -583,8 +593,8 @@ def validate_inputs(prompt, item, validated): r = nodes.NODE_CLASS_MAPPINGS[o_class_type].RETURN_TYPES received_type = r[val[1]] received_types[x] = received_type - if 'input_types' not in validate_function_inputs and received_type != type_input: - details = f"{x}, {received_type} != {type_input}" + if 'input_types' not in validate_function_inputs and not validate_node_input(received_type, type_input): + details = f"{x}, received_type({received_type}) mismatch input_type({type_input})" error = { "type": "return_type_mismatch", "message": "Return type mismatch between linked nodes", @@ -755,7 +765,7 @@ def validate_prompt(prompt): if 'class_type' not in prompt[x]: error = { "type": "invalid_prompt", - "message": f"Cannot execute because a node is missing the class_type property.", + "message": "Cannot execute because a node is missing the class_type property.", "details": f"Node ID '#{x}'", "extra_info": {} } diff --git a/extra_model_paths.yaml.example b/extra_model_paths.yaml.example index 846d04dbe..b55913a5a 100644 --- a/extra_model_paths.yaml.example +++ b/extra_model_paths.yaml.example @@ -25,11 +25,16 @@ a111: #comfyui: # base_path: path/to/comfyui/ +# # You can use is_default to mark that these folders should be listed first, and used as the default dirs for eg downloads +# #is_default: true # checkpoints: models/checkpoints/ # clip: models/clip/ # clip_vision: models/clip_vision/ # configs: models/configs/ # controlnet: models/controlnet/ +# diffusion_models: | +# models/diffusion_models +# models/unet # embeddings: models/embeddings/ # loras: models/loras/ # upscale_models: models/upscale_models/ diff --git a/fix_torch.py b/fix_torch.py index e350f5c7d..ce117b639 100644 --- a/fix_torch.py +++ b/fix_torch.py @@ -5,20 +5,24 @@ import ctypes import logging -torch_spec = importlib.util.find_spec("torch") -for folder in torch_spec.submodule_search_locations: - lib_folder = os.path.join(folder, "lib") - test_file = os.path.join(lib_folder, "fbgemm.dll") - dest = os.path.join(lib_folder, "libomp140.x86_64.dll") - if os.path.exists(dest): - break - - with open(test_file, 'rb') as f: - contents = f.read() - if b"libomp140.x86_64.dll" not in contents: +def fix_pytorch_libomp(): + """ + Fix PyTorch libomp DLL issue on Windows by copying the correct DLL file if needed. + """ + torch_spec = importlib.util.find_spec("torch") + for folder in torch_spec.submodule_search_locations: + lib_folder = os.path.join(folder, "lib") + test_file = os.path.join(lib_folder, "fbgemm.dll") + dest = os.path.join(lib_folder, "libomp140.x86_64.dll") + if os.path.exists(dest): break - try: - mydll = ctypes.cdll.LoadLibrary(test_file) - except FileNotFoundError as e: - logging.warning("Detected pytorch version with libomp issue, patching.") - shutil.copyfile(os.path.join(lib_folder, "libiomp5md.dll"), dest) + + with open(test_file, "rb") as f: + contents = f.read() + if b"libomp140.x86_64.dll" not in contents: + break + try: + ctypes.cdll.LoadLibrary(test_file) + except FileNotFoundError: + logging.warning("Detected pytorch version with libomp issue, patching.") + shutil.copyfile(os.path.join(lib_folder, "libiomp5md.dll"), dest) diff --git a/folder_paths.py b/folder_paths.py index 74a7d527c..61de51202 100644 --- a/folder_paths.py +++ b/folder_paths.py @@ -2,7 +2,9 @@ from __future__ import annotations import os import time +import mimetypes import logging +from typing import Literal from collections.abc import Collection supported_pt_extensions: set[str] = {'.ckpt', '.pt', '.bin', '.pth', '.safetensors', '.pkl', '.sft'} @@ -16,7 +18,7 @@ folder_names_and_paths["configs"] = ([os.path.join(models_dir, "configs")], [".y folder_names_and_paths["loras"] = ([os.path.join(models_dir, "loras")], supported_pt_extensions) folder_names_and_paths["vae"] = ([os.path.join(models_dir, "vae")], supported_pt_extensions) -folder_names_and_paths["clip"] = ([os.path.join(models_dir, "clip")], supported_pt_extensions) +folder_names_and_paths["text_encoders"] = ([os.path.join(models_dir, "text_encoders"), os.path.join(models_dir, "clip")], supported_pt_extensions) folder_names_and_paths["diffusion_models"] = ([os.path.join(models_dir, "unet"), os.path.join(models_dir, "diffusion_models")], supported_pt_extensions) folder_names_and_paths["clip_vision"] = ([os.path.join(models_dir, "clip_vision")], supported_pt_extensions) folder_names_and_paths["style_models"] = ([os.path.join(models_dir, "style_models")], supported_pt_extensions) @@ -44,8 +46,43 @@ user_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)), "user filename_list_cache: dict[str, tuple[list[str], dict[str, float], float]] = {} +class CacheHelper: + """ + Helper class for managing file list cache data. + """ + def __init__(self): + self.cache: dict[str, tuple[list[str], dict[str, float], float]] = {} + self.active = False + + def get(self, key: str, default=None) -> tuple[list[str], dict[str, float], float]: + if not self.active: + return default + return self.cache.get(key, default) + + def set(self, key: str, value: tuple[list[str], dict[str, float], float]) -> None: + if self.active: + self.cache[key] = value + + def clear(self): + self.cache.clear() + + def __enter__(self): + self.active = True + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.active = False + self.clear() + +cache_helper = CacheHelper() + +extension_mimetypes_cache = { + "webp" : "image", +} + def map_legacy(folder_name: str) -> str: - legacy = {"unet": "diffusion_models"} + legacy = {"unet": "diffusion_models", + "clip": "text_encoders"} return legacy.get(folder_name, folder_name) if not os.path.exists(input_directory): @@ -78,6 +115,13 @@ def get_input_directory() -> str: global input_directory return input_directory +def get_user_directory() -> str: + return user_directory + +def set_user_directory(user_dir: str) -> None: + global user_directory + user_directory = user_dir + #NOTE: used in http server so don't put folders that should not be accessed remotely def get_directory_by_type(type_name: str) -> str | None: @@ -89,6 +133,28 @@ def get_directory_by_type(type_name: str) -> str | None: return get_input_directory() return None +def filter_files_content_types(files: list[str], content_types: Literal["image", "video", "audio"]) -> list[str]: + """ + Example: + files = os.listdir(folder_paths.get_input_directory()) + filter_files_content_types(files, ["image", "audio", "video"]) + """ + global extension_mimetypes_cache + result = [] + for file in files: + extension = file.split('.')[-1] + if extension not in extension_mimetypes_cache: + mime_type, _ = mimetypes.guess_type(file, strict=False) + if not mime_type: + continue + content_type = mime_type.split('/')[0] + extension_mimetypes_cache[extension] = content_type + else: + content_type = extension_mimetypes_cache[extension] + + if content_type in content_types: + result.append(file) + return result # determine base_dir rely on annotation if name is 'filename.ext [annotation]' format # otherwise use default_path as base_dir @@ -130,11 +196,21 @@ def exists_annotated_filepath(name) -> bool: return os.path.exists(filepath) -def add_model_folder_path(folder_name: str, full_folder_path: str) -> None: +def add_model_folder_path(folder_name: str, full_folder_path: str, is_default: bool = False) -> None: global folder_names_and_paths folder_name = map_legacy(folder_name) if folder_name in folder_names_and_paths: - folder_names_and_paths[folder_name][0].append(full_folder_path) + paths, _exts = folder_names_and_paths[folder_name] + if full_folder_path in paths: + if is_default and paths[0] != full_folder_path: + # If the path to the folder is not the first in the list, move it to the beginning. + paths.remove(full_folder_path) + paths.insert(0, full_folder_path) + else: + if is_default: + paths.insert(0, full_folder_path) + else: + paths.append(full_folder_path) else: folder_names_and_paths[folder_name] = ([full_folder_path], set()) @@ -166,8 +242,12 @@ def recursive_search(directory: str, excluded_dir_names: list[str] | None=None) for dirpath, subdirs, filenames in os.walk(directory, followlinks=True, topdown=True): subdirs[:] = [d for d in subdirs if d not in excluded_dir_names] for file_name in filenames: - relative_path = os.path.relpath(os.path.join(dirpath, file_name), directory) - result.append(relative_path) + try: + relative_path = os.path.relpath(os.path.join(dirpath, file_name), directory) + result.append(relative_path) + except: + logging.warning(f"Warning: Unable to access {file_name}. Skipping this file.") + continue for d in subdirs: path: str = os.path.join(dirpath, d) @@ -200,6 +280,14 @@ def get_full_path(folder_name: str, filename: str) -> str | None: return None + +def get_full_path_or_raise(folder_name: str, filename: str) -> str: + full_path = get_full_path(folder_name, filename) + if full_path is None: + raise FileNotFoundError(f"Model in folder '{folder_name}' with filename '{filename}' not found.") + return full_path + + def get_filename_list_(folder_name: str) -> tuple[list[str], dict[str, float], float]: folder_name = map_legacy(folder_name) global folder_names_and_paths @@ -214,6 +302,10 @@ def get_filename_list_(folder_name: str) -> tuple[list[str], dict[str, float], f return sorted(list(output_list)), output_folders, time.perf_counter() def cached_filename_list_(folder_name: str) -> tuple[list[str], dict[str, float], float] | None: + strong_cache = cache_helper.get(folder_name) + if strong_cache is not None: + return strong_cache + global filename_list_cache global folder_names_and_paths folder_name = map_legacy(folder_name) @@ -242,6 +334,7 @@ def get_filename_list(folder_name: str) -> list[str]: out = get_filename_list_(folder_name) global filename_list_cache filename_list_cache[folder_name] = out + cache_helper.set(folder_name, out) return list(out[0]) def get_save_image_path(filename_prefix: str, output_dir: str, image_width=0, image_height=0) -> tuple[str, str, int, str, str]: @@ -257,9 +350,17 @@ def get_save_image_path(filename_prefix: str, output_dir: str, image_width=0, im def compute_vars(input: str, image_width: int, image_height: int) -> str: input = input.replace("%width%", str(image_width)) input = input.replace("%height%", str(image_height)) + now = time.localtime() + input = input.replace("%year%", str(now.tm_year)) + input = input.replace("%month%", str(now.tm_mon).zfill(2)) + input = input.replace("%day%", str(now.tm_mday).zfill(2)) + input = input.replace("%hour%", str(now.tm_hour).zfill(2)) + input = input.replace("%minute%", str(now.tm_min).zfill(2)) + input = input.replace("%second%", str(now.tm_sec).zfill(2)) return input - filename_prefix = compute_vars(filename_prefix, image_width, image_height) + if "%" in filename_prefix: + filename_prefix = compute_vars(filename_prefix, image_width, image_height) subfolder = os.path.dirname(os.path.normpath(filename_prefix)) filename = os.path.basename(os.path.normpath(filename_prefix)) diff --git a/latent_preview.py b/latent_preview.py index ae6c106e4..07f9cc68e 100644 --- a/latent_preview.py +++ b/latent_preview.py @@ -1,7 +1,5 @@ import torch from PIL import Image -import struct -import numpy as np from comfy.cli_args import args, LatentPreviewMethod from comfy.taesd.taesd import TAESD import comfy.model_management @@ -9,7 +7,7 @@ import folder_paths import comfy.utils import logging -MAX_PREVIEW_RESOLUTION = 512 +MAX_PREVIEW_RESOLUTION = args.preview_size def preview_to_image(latent_image): latents_ubyte = (((latent_image + 1.0) / 2.0).clamp(0, 1) # change scale from -1..1 to 0..1 @@ -36,12 +34,25 @@ class TAESDPreviewerImpl(LatentPreviewer): class Latent2RGBPreviewer(LatentPreviewer): - def __init__(self, latent_rgb_factors): - self.latent_rgb_factors = torch.tensor(latent_rgb_factors, device="cpu") + def __init__(self, latent_rgb_factors, latent_rgb_factors_bias=None): + self.latent_rgb_factors = torch.tensor(latent_rgb_factors, device="cpu").transpose(0, 1) + self.latent_rgb_factors_bias = None + if latent_rgb_factors_bias is not None: + self.latent_rgb_factors_bias = torch.tensor(latent_rgb_factors_bias, device="cpu") def decode_latent_to_preview(self, x0): self.latent_rgb_factors = self.latent_rgb_factors.to(dtype=x0.dtype, device=x0.device) - latent_image = x0[0].permute(1, 2, 0) @ self.latent_rgb_factors + if self.latent_rgb_factors_bias is not None: + self.latent_rgb_factors_bias = self.latent_rgb_factors_bias.to(dtype=x0.dtype, device=x0.device) + + if x0.ndim == 5: + x0 = x0[0, :, 0] + else: + x0 = x0[0] + + latent_image = torch.nn.functional.linear(x0.movedim(0, -1), self.latent_rgb_factors, bias=self.latent_rgb_factors_bias) + # latent_image = x0[0].permute(1, 2, 0) @ self.latent_rgb_factors + return preview_to_image(latent_image) @@ -71,7 +82,7 @@ def get_previewer(device, latent_format): if previewer is None: if latent_format.latent_rgb_factors is not None: - previewer = Latent2RGBPreviewer(latent_format.latent_rgb_factors) + previewer = Latent2RGBPreviewer(latent_format.latent_rgb_factors, latent_format.latent_rgb_factors_bias) return previewer def prepare_callback(model, steps, x0_output_dict=None): diff --git a/main.py b/main.py index 645d7ec2d..5164ebac4 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,53 @@ import importlib.util import folder_paths import time from comfy.cli_args import args -from main_utils import load_extra_path_config + +from app.logger import setup_logger +import itertools +import utils.extra_config +import logging + +if __name__ == "__main__": + #NOTE: These do not do anything on core ComfyUI which should already have no communication with the internet, they are for custom nodes. + os.environ['HF_HUB_DISABLE_TELEMETRY'] = '1' + os.environ['DO_NOT_TRACK'] = '1' + + +setup_logger(log_level=args.verbose) + +def apply_custom_paths(): + # extra model paths + extra_model_paths_config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "extra_model_paths.yaml") + if os.path.isfile(extra_model_paths_config_path): + utils.extra_config.load_extra_path_config(extra_model_paths_config_path) + + if args.extra_model_paths_config: + for config_path in itertools.chain(*args.extra_model_paths_config): + utils.extra_config.load_extra_path_config(config_path) + + # --output-directory, --input-directory, --user-directory + if args.output_directory: + output_dir = os.path.abspath(args.output_directory) + logging.info(f"Setting output directory to: {output_dir}") + folder_paths.set_output_directory(output_dir) + + # These are the default folders that checkpoints, clip and vae models will be saved to when using CheckpointSave, etc.. nodes + folder_paths.add_model_folder_path("checkpoints", os.path.join(folder_paths.get_output_directory(), "checkpoints")) + folder_paths.add_model_folder_path("clip", os.path.join(folder_paths.get_output_directory(), "clip")) + folder_paths.add_model_folder_path("vae", os.path.join(folder_paths.get_output_directory(), "vae")) + folder_paths.add_model_folder_path("diffusion_models", + os.path.join(folder_paths.get_output_directory(), "diffusion_models")) + folder_paths.add_model_folder_path("loras", os.path.join(folder_paths.get_output_directory(), "loras")) + + if args.input_directory: + input_dir = os.path.abspath(args.input_directory) + logging.info(f"Setting input directory to: {input_dir}") + folder_paths.set_input_directory(input_dir) + + if args.user_directory: + user_dir = os.path.abspath(args.user_directory) + logging.info(f"Setting user directory to: {user_dir}") + folder_paths.set_user_directory(user_dir) def execute_prestartup_script(): def execute_script(script_path): @@ -48,17 +94,16 @@ def execute_prestartup_script(): print("{:6.1f} seconds{}:".format(n[0], import_message), n[1]) print() +apply_custom_paths() execute_prestartup_script() # Main code import asyncio -import itertools import shutil import threading import gc -import logging if os.name == "nt": logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage()) @@ -66,6 +111,7 @@ if os.name == "nt": if __name__ == "__main__": if args.cuda_device is not None: os.environ['CUDA_VISIBLE_DEVICES'] = str(args.cuda_device) + os.environ['HIP_VISIBLE_DEVICES'] = str(args.cuda_device) logging.info("Set cuda device to: {}".format(args.cuda_device)) if args.deterministic: @@ -76,12 +122,12 @@ if __name__ == "__main__": if args.windows_standalone_build: try: - import fix_torch + from fix_torch import fix_pytorch_libomp + fix_pytorch_libomp() except: pass import comfy.utils -import yaml import execution import server @@ -101,6 +147,7 @@ def cuda_malloc_warning(): logging.warning("\nWARNING: this card most likely does not support cuda-malloc, if you get \"CUDA error\" please run ComfyUI with: --disable-cuda-malloc\n") def prompt_worker(q, server): + current_time: float = 0.0 e = execution.PromptExecutor(server, lru_size=args.cache_lru) last_gc_collect = 0 need_gc = False @@ -149,14 +196,16 @@ def prompt_worker(q, server): if need_gc: current_time = time.perf_counter() if (current_time - last_gc_collect) > gc_collect_interval: - comfy.model_management.cleanup_models() gc.collect() comfy.model_management.soft_empty_cache() last_gc_collect = current_time need_gc = False async def run(server, address='', port=8188, verbose=True, call_on_start=None): - await asyncio.gather(server.start(address, port, verbose, call_on_start), server.publish_loop()) + addresses = [] + for addr in address.split(","): + addresses.append((addr, port)) + await asyncio.gather(server.start_multi_address(addresses, call_on_start), server.publish_loop()) def hijack_progress(server): @@ -175,8 +224,6 @@ def cleanup_temp(): if os.path.exists(temp_dir): shutil.rmtree(temp_dir, ignore_errors=True) - - if __name__ == "__main__": if args.temp_directory: temp_dir = os.path.join(os.path.abspath(args.temp_directory), "temp") @@ -196,14 +243,6 @@ if __name__ == "__main__": server = server.PromptServer(loop) q = execution.PromptQueue(server) - extra_model_paths_config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "extra_model_paths.yaml") - if os.path.isfile(extra_model_paths_config_path): - load_extra_path_config(extra_model_paths_config_path) - - if args.extra_model_paths_config: - for config_path in itertools.chain(*args.extra_model_paths_config): - load_extra_path_config(config_path) - nodes.init_extra_nodes(init_custom_nodes=not args.disable_all_custom_nodes) cuda_malloc_warning() @@ -213,31 +252,18 @@ if __name__ == "__main__": threading.Thread(target=prompt_worker, daemon=True, args=(q, server,)).start() - if args.output_directory: - output_dir = os.path.abspath(args.output_directory) - logging.info(f"Setting output directory to: {output_dir}") - folder_paths.set_output_directory(output_dir) - - #These are the default folders that checkpoints, clip and vae models will be saved to when using CheckpointSave, etc.. nodes - folder_paths.add_model_folder_path("checkpoints", os.path.join(folder_paths.get_output_directory(), "checkpoints")) - folder_paths.add_model_folder_path("clip", os.path.join(folder_paths.get_output_directory(), "clip")) - folder_paths.add_model_folder_path("vae", os.path.join(folder_paths.get_output_directory(), "vae")) - folder_paths.add_model_folder_path("diffusion_models", os.path.join(folder_paths.get_output_directory(), "diffusion_models")) - - if args.input_directory: - input_dir = os.path.abspath(args.input_directory) - logging.info(f"Setting input directory to: {input_dir}") - folder_paths.set_input_directory(input_dir) - if args.quick_test_for_ci: exit(0) + os.makedirs(folder_paths.get_temp_directory(), exist_ok=True) call_on_start = None if args.auto_launch: def startup_server(scheme, address, port): import webbrowser if os.name == 'nt' and address == '0.0.0.0': address = '127.0.0.1' + if ':' in address: + address = "[{}]".format(address) webbrowser.open(f"{scheme}://{address}:{port}") call_on_start = startup_server diff --git a/model_filemanager/__init__.py b/model_filemanager/__init__.py deleted file mode 100644 index e318351c0..000000000 --- a/model_filemanager/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# model_manager/__init__.py -from .download_models import download_model, DownloadModelStatus, DownloadStatusType, create_model_path, check_file_exists, track_download_progress, validate_model_subdirectory, validate_filename diff --git a/model_filemanager/download_models.py b/model_filemanager/download_models.py deleted file mode 100644 index 712d59328..000000000 --- a/model_filemanager/download_models.py +++ /dev/null @@ -1,240 +0,0 @@ -from __future__ import annotations -import aiohttp -import os -import traceback -import logging -from folder_paths import models_dir -import re -from typing import Callable, Any, Optional, Awaitable, Dict -from enum import Enum -import time -from dataclasses import dataclass - - -class DownloadStatusType(Enum): - PENDING = "pending" - IN_PROGRESS = "in_progress" - COMPLETED = "completed" - ERROR = "error" - -@dataclass -class DownloadModelStatus(): - status: str - progress_percentage: float - message: str - already_existed: bool = False - - def __init__(self, status: DownloadStatusType, progress_percentage: float, message: str, already_existed: bool): - self.status = status.value # Store the string value of the Enum - self.progress_percentage = progress_percentage - self.message = message - self.already_existed = already_existed - - def to_dict(self) -> Dict[str, Any]: - return { - "status": self.status, - "progress_percentage": self.progress_percentage, - "message": self.message, - "already_existed": self.already_existed - } - -async def download_model(model_download_request: Callable[[str], Awaitable[aiohttp.ClientResponse]], - model_name: str, - model_url: str, - model_sub_directory: str, - progress_callback: Callable[[str, DownloadModelStatus], Awaitable[Any]], - progress_interval: float = 1.0) -> DownloadModelStatus: - """ - Download a model file from a given URL into the models directory. - - Args: - model_download_request (Callable[[str], Awaitable[aiohttp.ClientResponse]]): - A function that makes an HTTP request. This makes it easier to mock in unit tests. - model_name (str): - The name of the model file to be downloaded. This will be the filename on disk. - model_url (str): - The URL from which to download the model. - model_sub_directory (str): - The subdirectory within the main models directory where the model - should be saved (e.g., 'checkpoints', 'loras', etc.). - progress_callback (Callable[[str, DownloadModelStatus], Awaitable[Any]]): - An asynchronous function to call with progress updates. - - Returns: - DownloadModelStatus: The result of the download operation. - """ - if not validate_model_subdirectory(model_sub_directory): - return DownloadModelStatus( - DownloadStatusType.ERROR, - 0, - "Invalid model subdirectory", - False - ) - - if not validate_filename(model_name): - return DownloadModelStatus( - DownloadStatusType.ERROR, - 0, - "Invalid model name", - False - ) - - file_path, relative_path = create_model_path(model_name, model_sub_directory, models_dir) - existing_file = await check_file_exists(file_path, model_name, progress_callback, relative_path) - if existing_file: - return existing_file - - try: - status = DownloadModelStatus(DownloadStatusType.PENDING, 0, f"Starting download of {model_name}", False) - await progress_callback(relative_path, status) - - response = await model_download_request(model_url) - if response.status != 200: - error_message = f"Failed to download {model_name}. Status code: {response.status}" - logging.error(error_message) - status = DownloadModelStatus(DownloadStatusType.ERROR, 0, error_message, False) - await progress_callback(relative_path, status) - return DownloadModelStatus(DownloadStatusType.ERROR, 0, error_message, False) - - return await track_download_progress(response, file_path, model_name, progress_callback, relative_path, progress_interval) - - except Exception as e: - logging.error(f"Error in downloading model: {e}") - return await handle_download_error(e, model_name, progress_callback, relative_path) - - -def create_model_path(model_name: str, model_directory: str, models_base_dir: str) -> tuple[str, str]: - full_model_dir = os.path.join(models_base_dir, model_directory) - os.makedirs(full_model_dir, exist_ok=True) - file_path = os.path.join(full_model_dir, model_name) - - # Ensure the resulting path is still within the base directory - abs_file_path = os.path.abspath(file_path) - abs_base_dir = os.path.abspath(str(models_base_dir)) - if os.path.commonprefix([abs_file_path, abs_base_dir]) != abs_base_dir: - raise Exception(f"Invalid model directory: {model_directory}/{model_name}") - - - relative_path = '/'.join([model_directory, model_name]) - return file_path, relative_path - -async def check_file_exists(file_path: str, - model_name: str, - progress_callback: Callable[[str, DownloadModelStatus], Awaitable[Any]], - relative_path: str) -> Optional[DownloadModelStatus]: - if os.path.exists(file_path): - status = DownloadModelStatus(DownloadStatusType.COMPLETED, 100, f"{model_name} already exists", True) - await progress_callback(relative_path, status) - return status - return None - - -async def track_download_progress(response: aiohttp.ClientResponse, - file_path: str, - model_name: str, - progress_callback: Callable[[str, DownloadModelStatus], Awaitable[Any]], - relative_path: str, - interval: float = 1.0) -> DownloadModelStatus: - try: - total_size = int(response.headers.get('Content-Length', 0)) - downloaded = 0 - last_update_time = time.time() - - async def update_progress(): - nonlocal last_update_time - progress = (downloaded / total_size) * 100 if total_size > 0 else 0 - status = DownloadModelStatus(DownloadStatusType.IN_PROGRESS, progress, f"Downloading {model_name}", False) - await progress_callback(relative_path, status) - last_update_time = time.time() - - with open(file_path, 'wb') as f: - chunk_iterator = response.content.iter_chunked(8192) - while True: - try: - chunk = await chunk_iterator.__anext__() - except StopAsyncIteration: - break - f.write(chunk) - downloaded += len(chunk) - - if time.time() - last_update_time >= interval: - await update_progress() - - await update_progress() - - logging.info(f"Successfully downloaded {model_name}. Total downloaded: {downloaded}") - status = DownloadModelStatus(DownloadStatusType.COMPLETED, 100, f"Successfully downloaded {model_name}", False) - await progress_callback(relative_path, status) - - return status - except Exception as e: - logging.error(f"Error in track_download_progress: {e}") - logging.error(traceback.format_exc()) - return await handle_download_error(e, model_name, progress_callback, relative_path) - -async def handle_download_error(e: Exception, - model_name: str, - progress_callback: Callable[[str, DownloadModelStatus], Any], - relative_path: str) -> DownloadModelStatus: - error_message = f"Error downloading {model_name}: {str(e)}" - status = DownloadModelStatus(DownloadStatusType.ERROR, 0, error_message, False) - await progress_callback(relative_path, status) - return status - -def validate_model_subdirectory(model_subdirectory: str) -> bool: - """ - Validate that the model subdirectory is safe to install into. - Must not contain relative paths, nested paths or special characters - other than underscores and hyphens. - - Args: - model_subdirectory (str): The subdirectory for the specific model type. - - Returns: - bool: True if the subdirectory is safe, False otherwise. - """ - if len(model_subdirectory) > 50: - return False - - if '..' in model_subdirectory or '/' in model_subdirectory: - return False - - if not re.match(r'^[a-zA-Z0-9_-]+$', model_subdirectory): - return False - - return True - -def validate_filename(filename: str)-> bool: - """ - Validate a filename to ensure it's safe and doesn't contain any path traversal attempts. - - Args: - filename (str): The filename to validate - - Returns: - bool: True if the filename is valid, False otherwise - """ - if not filename.lower().endswith(('.sft', '.safetensors')): - return False - - # Check if the filename is empty, None, or just whitespace - if not filename or not filename.strip(): - return False - - # Check for any directory traversal attempts or invalid characters - if any(char in filename for char in ['..', '/', '\\', '\n', '\r', '\t', '\0']): - return False - - # Check if the filename starts with a dot (hidden file) - if filename.startswith('.'): - return False - - # Use a whitelist of allowed characters - if not re.match(r'^[a-zA-Z0-9_\-. ]+$', filename): - return False - - # Ensure the filename isn't too long - if len(filename) > 255: - return False - - return True diff --git a/models/text_encoders/put_text_encoder_files_here b/models/text_encoders/put_text_encoder_files_here new file mode 100644 index 000000000..e69de29bb diff --git a/nodes.py b/nodes.py index 37192e351..6854b24a9 100644 --- a/nodes.py +++ b/nodes.py @@ -1,3 +1,4 @@ +from __future__ import annotations import torch import os @@ -10,7 +11,7 @@ import time import random import logging -from PIL import Image, ImageOps, ImageSequence, ImageFile +from PIL import Image, ImageOps, ImageSequence from PIL.PngImagePlugin import PngInfo import numpy as np @@ -24,6 +25,7 @@ import comfy.sample import comfy.sd import comfy.utils import comfy.controlnet +from comfy.comfy_types import IO, ComfyNodeABC, InputTypeDict import comfy.clip_vision @@ -44,16 +46,16 @@ def interrupt_processing(value=True): MAX_RESOLUTION=16384 -class CLIPTextEncode: +class CLIPTextEncode(ComfyNodeABC): @classmethod - def INPUT_TYPES(s): + def INPUT_TYPES(s) -> InputTypeDict: return { "required": { - "text": ("STRING", {"multiline": True, "dynamicPrompts": True, "tooltip": "The text to be encoded."}), - "clip": ("CLIP", {"tooltip": "The CLIP model used for encoding the text."}) + "text": (IO.STRING, {"multiline": True, "dynamicPrompts": True, "tooltip": "The text to be encoded."}), + "clip": (IO.CLIP, {"tooltip": "The CLIP model used for encoding the text."}) } } - RETURN_TYPES = ("CONDITIONING",) + RETURN_TYPES = (IO.CONDITIONING,) OUTPUT_TOOLTIPS = ("A conditioning containing the embedded text used to guide the diffusion model.",) FUNCTION = "encode" @@ -62,9 +64,8 @@ class CLIPTextEncode: def encode(self, clip, text): tokens = clip.tokenize(text) - output = clip.encode_from_tokens(tokens, return_pooled=True, return_dict=True) - cond = output.pop("cond") - return ([[cond, output]], ) + return (clip.encode_from_tokens_scheduled(tokens), ) + class ConditioningCombine: @classmethod @@ -281,21 +282,31 @@ class VAEDecode: DESCRIPTION = "Decodes latent images back into pixel space images." def decode(self, vae, samples): - return (vae.decode(samples["samples"]), ) + images = vae.decode(samples["samples"]) + if len(images.shape) == 5: #Combine batches + images = images.reshape(-1, images.shape[-3], images.shape[-2], images.shape[-1]) + return (images, ) class VAEDecodeTiled: @classmethod def INPUT_TYPES(s): return {"required": {"samples": ("LATENT", ), "vae": ("VAE", ), - "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}) + "tile_size": ("INT", {"default": 512, "min": 128, "max": 4096, "step": 32}), + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32}), }} RETURN_TYPES = ("IMAGE",) FUNCTION = "decode" CATEGORY = "_for_testing" - def decode(self, vae, samples, tile_size): - return (vae.decode_tiled(samples["samples"], tile_x=tile_size // 8, tile_y=tile_size // 8, ), ) + def decode(self, vae, samples, tile_size, overlap=64): + if tile_size < overlap * 4: + overlap = tile_size // 4 + compression = vae.spacial_compression_decode() + images = vae.decode_tiled(samples["samples"], tile_x=tile_size // compression, tile_y=tile_size // compression, overlap=overlap // compression) + if len(images.shape) == 5: #Combine batches + images = images.reshape(-1, images.shape[-3], images.shape[-2], images.shape[-1]) + return (images, ) class VAEEncode: @classmethod @@ -373,6 +384,7 @@ class InpaintModelConditioning: "vae": ("VAE", ), "pixels": ("IMAGE", ), "mask": ("MASK", ), + "noise_mask": ("BOOLEAN", {"default": True, "tooltip": "Add a noise mask to the latent so sampling will only happen within the mask. Might improve results or completely break things depending on the model."}), }} RETURN_TYPES = ("CONDITIONING","CONDITIONING","LATENT") @@ -381,7 +393,7 @@ class InpaintModelConditioning: CATEGORY = "conditioning/inpaint" - def encode(self, positive, negative, pixels, vae, mask): + def encode(self, positive, negative, pixels, vae, mask, noise_mask=True): x = (pixels.shape[1] // 8) * 8 y = (pixels.shape[2] // 8) * 8 mask = torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(pixels.shape[1], pixels.shape[2]), mode="bilinear") @@ -405,7 +417,8 @@ class InpaintModelConditioning: out_latent = {} out_latent["samples"] = orig_latent - out_latent["noise_mask"] = mask + if noise_mask: + out_latent["noise_mask"] = mask out = [] for conditioning in [positive, negative]: @@ -511,10 +524,11 @@ class CheckpointLoader: FUNCTION = "load_checkpoint" CATEGORY = "advanced/loaders" + DEPRECATED = True def load_checkpoint(self, config_name, ckpt_name): config_path = folder_paths.get_full_path("configs", config_name) - ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) return comfy.sd.load_checkpoint(config_path, ckpt_path, output_vae=True, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) class CheckpointLoaderSimple: @@ -535,7 +549,7 @@ class CheckpointLoaderSimple: DESCRIPTION = "Loads a diffusion model checkpoint, diffusion models are used to denoise latents." def load_checkpoint(self, ckpt_name): - ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) return out[:3] @@ -577,7 +591,7 @@ class unCLIPCheckpointLoader: CATEGORY = "loaders" def load_checkpoint(self, ckpt_name, output_vae=True, output_clip=True): - ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=True, output_clipvision=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) return out @@ -624,15 +638,13 @@ class LoraLoader: if strength_model == 0 and strength_clip == 0: return (model, clip) - lora_path = folder_paths.get_full_path("loras", lora_name) + lora_path = folder_paths.get_full_path_or_raise("loras", lora_name) lora = None if self.loaded_lora is not None: if self.loaded_lora[0] == lora_path: lora = self.loaded_lora[1] else: - temp = self.loaded_lora self.loaded_lora = None - del temp if lora is None: lora = comfy.utils.load_torch_file(lora_path, safe_load=True) @@ -703,11 +715,11 @@ class VAELoader: encoder = next(filter(lambda a: a.startswith("{}_encoder.".format(name)), approx_vaes)) decoder = next(filter(lambda a: a.startswith("{}_decoder.".format(name)), approx_vaes)) - enc = comfy.utils.load_torch_file(folder_paths.get_full_path("vae_approx", encoder)) + enc = comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("vae_approx", encoder)) for k in enc: sd["taesd_encoder.{}".format(k)] = enc[k] - dec = comfy.utils.load_torch_file(folder_paths.get_full_path("vae_approx", decoder)) + dec = comfy.utils.load_torch_file(folder_paths.get_full_path_or_raise("vae_approx", decoder)) for k in dec: sd["taesd_decoder.{}".format(k)] = dec[k] @@ -738,7 +750,7 @@ class VAELoader: if vae_name in ["taesd", "taesdxl", "taesd3", "taef1"]: sd = self.load_taesd(vae_name) else: - vae_path = folder_paths.get_full_path("vae", vae_name) + vae_path = folder_paths.get_full_path_or_raise("vae", vae_name) sd = comfy.utils.load_torch_file(vae_path) vae = comfy.sd.VAE(sd=sd) return (vae,) @@ -754,7 +766,7 @@ class ControlNetLoader: CATEGORY = "loaders" def load_controlnet(self, control_net_name): - controlnet_path = folder_paths.get_full_path("controlnet", control_net_name) + controlnet_path = folder_paths.get_full_path_or_raise("controlnet", control_net_name) controlnet = comfy.controlnet.load_controlnet(controlnet_path) return (controlnet,) @@ -770,7 +782,7 @@ class DiffControlNetLoader: CATEGORY = "loaders" def load_controlnet(self, model, control_net_name): - controlnet_path = folder_paths.get_full_path("controlnet", control_net_name) + controlnet_path = folder_paths.get_full_path_or_raise("controlnet", control_net_name) controlnet = comfy.controlnet.load_controlnet(controlnet_path, model) return (controlnet,) @@ -786,6 +798,7 @@ class ControlNetApply: RETURN_TYPES = ("CONDITIONING",) FUNCTION = "apply_controlnet" + DEPRECATED = True CATEGORY = "conditioning/controlnet" def apply_controlnet(self, conditioning, control_net, image, strength): @@ -815,7 +828,10 @@ class ControlNetApplyAdvanced: "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) - }} + }, + "optional": {"vae": ("VAE", ), + } + } RETURN_TYPES = ("CONDITIONING","CONDITIONING") RETURN_NAMES = ("positive", "negative") @@ -823,7 +839,7 @@ class ControlNetApplyAdvanced: CATEGORY = "conditioning/controlnet" - def apply_controlnet(self, positive, negative, control_net, image, strength, start_percent, end_percent, vae=None): + def apply_controlnet(self, positive, negative, control_net, image, strength, start_percent, end_percent, vae=None, extra_concat=[]): if strength == 0: return (positive, negative) @@ -840,7 +856,7 @@ class ControlNetApplyAdvanced: if prev_cnet in cnets: c_net = cnets[prev_cnet] else: - c_net = control_net.copy().set_cond_hint(control_hint, strength, (start_percent, end_percent), vae) + c_net = control_net.copy().set_cond_hint(control_hint, strength, (start_percent, end_percent), vae=vae, extra_concat=extra_concat) c_net.set_previous_controlnet(prev_cnet) cnets[prev_cnet] = c_net @@ -856,7 +872,7 @@ class UNETLoader: @classmethod def INPUT_TYPES(s): return {"required": { "unet_name": (folder_paths.get_filename_list("diffusion_models"), ), - "weight_dtype": (["default", "fp8_e4m3fn", "fp8_e5m2"],) + "weight_dtype": (["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2"],) }} RETURN_TYPES = ("MODEL",) FUNCTION = "load_unet" @@ -867,24 +883,29 @@ class UNETLoader: model_options = {} if weight_dtype == "fp8_e4m3fn": model_options["dtype"] = torch.float8_e4m3fn + elif weight_dtype == "fp8_e4m3fn_fast": + model_options["dtype"] = torch.float8_e4m3fn + model_options["fp8_optimizations"] = True elif weight_dtype == "fp8_e5m2": model_options["dtype"] = torch.float8_e5m2 - unet_path = folder_paths.get_full_path("diffusion_models", unet_name) + unet_path = folder_paths.get_full_path_or_raise("diffusion_models", unet_name) model = comfy.sd.load_diffusion_model(unet_path, model_options=model_options) return (model,) class CLIPLoader: @classmethod def INPUT_TYPES(s): - return {"required": { "clip_name": (folder_paths.get_filename_list("clip"), ), - "type": (["stable_diffusion", "stable_cascade", "sd3", "stable_audio"], ), + return {"required": { "clip_name": (folder_paths.get_filename_list("text_encoders"), ), + "type": (["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "mochi", "ltxv"], ), }} RETURN_TYPES = ("CLIP",) FUNCTION = "load_clip" CATEGORY = "advanced/loaders" + DESCRIPTION = "[Recipes]\n\nstable_diffusion: clip-l\nstable_cascade: clip-g\nsd3: t5 / clip-g / clip-l\nstable_audio: t5\nmochi: t5" + def load_clip(self, clip_name, type="stable_diffusion"): if type == "stable_cascade": clip_type = comfy.sd.CLIPType.STABLE_CASCADE @@ -892,34 +913,42 @@ class CLIPLoader: clip_type = comfy.sd.CLIPType.SD3 elif type == "stable_audio": clip_type = comfy.sd.CLIPType.STABLE_AUDIO + elif type == "mochi": + clip_type = comfy.sd.CLIPType.MOCHI + elif type == "ltxv": + clip_type = comfy.sd.CLIPType.LTXV else: clip_type = comfy.sd.CLIPType.STABLE_DIFFUSION - clip_path = folder_paths.get_full_path("clip", clip_name) + clip_path = folder_paths.get_full_path_or_raise("text_encoders", clip_name) clip = comfy.sd.load_clip(ckpt_paths=[clip_path], embedding_directory=folder_paths.get_folder_paths("embeddings"), clip_type=clip_type) return (clip,) class DualCLIPLoader: @classmethod def INPUT_TYPES(s): - return {"required": { "clip_name1": (folder_paths.get_filename_list("clip"), ), - "clip_name2": (folder_paths.get_filename_list("clip"), ), - "type": (["sdxl", "sd3", "flux"], ), + return {"required": { "clip_name1": (folder_paths.get_filename_list("text_encoders"), ), + "clip_name2": (folder_paths.get_filename_list("text_encoders"), ), + "type": (["sdxl", "sd3", "flux", "hunyuan_video"], ), }} RETURN_TYPES = ("CLIP",) FUNCTION = "load_clip" CATEGORY = "advanced/loaders" + DESCRIPTION = "[Recipes]\n\nsdxl: clip-l, clip-g\nsd3: clip-l, clip-g / clip-l, t5 / clip-g, t5\nflux: clip-l, t5" + def load_clip(self, clip_name1, clip_name2, type): - clip_path1 = folder_paths.get_full_path("clip", clip_name1) - clip_path2 = folder_paths.get_full_path("clip", clip_name2) + clip_path1 = folder_paths.get_full_path_or_raise("text_encoders", clip_name1) + clip_path2 = folder_paths.get_full_path_or_raise("text_encoders", clip_name2) if type == "sdxl": clip_type = comfy.sd.CLIPType.STABLE_DIFFUSION elif type == "sd3": clip_type = comfy.sd.CLIPType.SD3 elif type == "flux": clip_type = comfy.sd.CLIPType.FLUX + elif type == "hunyuan_video": + clip_type = comfy.sd.CLIPType.HUNYUAN_VIDEO clip = comfy.sd.load_clip(ckpt_paths=[clip_path1, clip_path2], embedding_directory=folder_paths.get_folder_paths("embeddings"), clip_type=clip_type) return (clip,) @@ -935,7 +964,7 @@ class CLIPVisionLoader: CATEGORY = "loaders" def load_clip(self, clip_name): - clip_path = folder_paths.get_full_path("clip_vision", clip_name) + clip_path = folder_paths.get_full_path_or_raise("clip_vision", clip_name) clip_vision = comfy.clip_vision.load(clip_path) return (clip_vision,) @@ -943,15 +972,19 @@ class CLIPVisionEncode: @classmethod def INPUT_TYPES(s): return {"required": { "clip_vision": ("CLIP_VISION",), - "image": ("IMAGE",) + "image": ("IMAGE",), + "crop": (["center", "none"],) }} RETURN_TYPES = ("CLIP_VISION_OUTPUT",) FUNCTION = "encode" CATEGORY = "conditioning" - def encode(self, clip_vision, image): - output = clip_vision.encode_image(image) + def encode(self, clip_vision, image, crop): + crop_image = True + if crop != "center": + crop_image = False + output = clip_vision.encode_image(image, crop=crop_image) return (output,) class StyleModelLoader: @@ -965,7 +998,7 @@ class StyleModelLoader: CATEGORY = "loaders" def load_style_model(self, style_model_name): - style_model_path = folder_paths.get_full_path("style_models", style_model_name) + style_model_path = folder_paths.get_full_path_or_raise("style_models", style_model_name) style_model = comfy.sd.load_style_model(style_model_path) return (style_model,) @@ -976,19 +1009,59 @@ class StyleModelApply: return {"required": {"conditioning": ("CONDITIONING", ), "style_model": ("STYLE_MODEL", ), "clip_vision_output": ("CLIP_VISION_OUTPUT", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}), + "strength_type": (["multiply", "attn_bias"], ), }} RETURN_TYPES = ("CONDITIONING",) FUNCTION = "apply_stylemodel" CATEGORY = "conditioning/style_model" - def apply_stylemodel(self, clip_vision_output, style_model, conditioning): + def apply_stylemodel(self, conditioning, style_model, clip_vision_output, strength, strength_type): cond = style_model.get_cond(clip_vision_output).flatten(start_dim=0, end_dim=1).unsqueeze(dim=0) - c = [] + if strength_type == "multiply": + cond *= strength + + n = cond.shape[1] + c_out = [] for t in conditioning: - n = [torch.cat((t[0], cond), dim=1), t[1].copy()] - c.append(n) - return (c, ) + (txt, keys) = t + keys = keys.copy() + if strength_type == "attn_bias" and strength != 1.0: + # math.log raises an error if the argument is zero + # torch.log returns -inf, which is what we want + attn_bias = torch.log(torch.Tensor([strength])) + # get the size of the mask image + mask_ref_size = keys.get("attention_mask_img_shape", (1, 1)) + n_ref = mask_ref_size[0] * mask_ref_size[1] + n_txt = txt.shape[1] + # grab the existing mask + mask = keys.get("attention_mask", None) + # create a default mask if it doesn't exist + if mask is None: + mask = torch.zeros((txt.shape[0], n_txt + n_ref, n_txt + n_ref), dtype=torch.float16) + # convert the mask dtype, because it might be boolean + # we want it to be interpreted as a bias + if mask.dtype == torch.bool: + # log(True) = log(1) = 0 + # log(False) = log(0) = -inf + mask = torch.log(mask.to(dtype=torch.float16)) + # now we make the mask bigger to add space for our new tokens + new_mask = torch.zeros((txt.shape[0], n_txt + n + n_ref, n_txt + n + n_ref), dtype=torch.float16) + # copy over the old mask, in quandrants + new_mask[:, :n_txt, :n_txt] = mask[:, :n_txt, :n_txt] + new_mask[:, :n_txt, n_txt+n:] = mask[:, :n_txt, n_txt:] + new_mask[:, n_txt+n:, :n_txt] = mask[:, n_txt:, :n_txt] + new_mask[:, n_txt+n:, n_txt+n:] = mask[:, n_txt:, n_txt:] + # now fill in the attention bias to our redux tokens + new_mask[:, :n_txt, n_txt:n_txt+n] = attn_bias + new_mask[:, n_txt+n:, n_txt:n_txt+n] = attn_bias + keys["attention_mask"] = new_mask.to(txt.device) + keys["attention_mask_img_shape"] = mask_ref_size + + c_out.append([torch.cat((txt, cond), dim=1), keys]) + + return (c_out,) class unCLIPConditioning: @classmethod @@ -1030,7 +1103,7 @@ class GLIGENLoader: CATEGORY = "loaders" def load_gligen(self, gligen_name): - gligen_path = folder_paths.get_full_path("gligen", gligen_name) + gligen_path = folder_paths.get_full_path_or_raise("gligen", gligen_name) gligen = comfy.sd.load_gligen(gligen_path) return (gligen,) @@ -1171,10 +1244,10 @@ class LatentUpscale: if width == 0: height = max(64, height) - width = max(64, round(samples["samples"].shape[3] * height / samples["samples"].shape[2])) + width = max(64, round(samples["samples"].shape[-1] * height / samples["samples"].shape[-2])) elif height == 0: width = max(64, width) - height = max(64, round(samples["samples"].shape[2] * width / samples["samples"].shape[3])) + height = max(64, round(samples["samples"].shape[-2] * width / samples["samples"].shape[-1])) else: width = max(64, width) height = max(64, height) @@ -1196,8 +1269,8 @@ class LatentUpscaleBy: def upscale(self, samples, upscale_method, scale_by): s = samples.copy() - width = round(samples["samples"].shape[3] * scale_by) - height = round(samples["samples"].shape[2] * scale_by) + width = round(samples["samples"].shape[-1] * scale_by) + height = round(samples["samples"].shape[-2] * scale_by) s["samples"] = comfy.utils.common_upscale(samples["samples"], width, height, upscale_method, "disabled") return (s,) @@ -1922,8 +1995,8 @@ NODE_DISPLAY_NAME_MAPPINGS = { "ConditioningSetArea": "Conditioning (Set Area)", "ConditioningSetAreaPercentage": "Conditioning (Set Area with Percentage)", "ConditioningSetMask": "Conditioning (Set Mask)", - "ControlNetApply": "Apply ControlNet", - "ControlNetApplyAdvanced": "Apply ControlNet (Advanced)", + "ControlNetApply": "Apply ControlNet (OLD)", + "ControlNetApplyAdvanced": "Apply ControlNet", # Latent "VAEEncodeForInpaint": "VAE Encode (for Inpainting)", "SetLatentNoiseMask": "Set Latent Noise Mask", @@ -1950,6 +2023,12 @@ NODE_DISPLAY_NAME_MAPPINGS = { "ImageInvert": "Invert Image", "ImagePadForOutpaint": "Pad Image for Outpainting", "ImageBatch": "Batch Images", + "ImageCrop": "Image Crop", + "ImageBlend": "Image Blend", + "ImageBlur": "Image Blur", + "ImageQuantize": "Image Quantize", + "ImageSharpen": "Image Sharpen", + "ImageScaleToTotalPixels": "Scale Image to Total Pixels", # _for_testing "VAEDecodeTiled": "VAE Decode (Tiled)", "VAEEncodeTiled": "VAE Encode (Tiled)", @@ -2107,6 +2186,14 @@ def init_builtin_extra_nodes(): "nodes_controlnet.py", "nodes_hunyuan.py", "nodes_flux.py", + "nodes_lora_extract.py", + "nodes_torch_compile.py", + "nodes_mochi.py", + "nodes_slg.py", + "nodes_mahiro.py", + "nodes_lt.py", + "nodes_hooks.py", + "nodes_load_3d.py", ] import_failed = [] @@ -2135,3 +2222,5 @@ def init_extra_nodes(init_custom_nodes=True): else: logging.warning("Please do a: pip install -r requirements.txt") logging.warning("") + + return import_failed diff --git a/notebooks/comfyui_colab.ipynb b/notebooks/comfyui_colab.ipynb index b1ed4ac9a..5560b5ff9 100644 --- a/notebooks/comfyui_colab.ipynb +++ b/notebooks/comfyui_colab.ipynb @@ -1,329 +1,322 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "aaaaaaaaaa" - }, - "source": [ - "Git clone the repo and install the requirements. (ignore the pip errors about protobuf)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "bbbbbbbbbb" - }, - "outputs": [], - "source": [ - "#@title Environment Setup\n", - "\n", - "from pathlib import Path\n", - "\n", - "OPTIONS = {}\n", - "\n", - "USE_GOOGLE_DRIVE = False #@param {type:\"boolean\"}\n", - "UPDATE_COMFY_UI = True #@param {type:\"boolean\"}\n", - "WORKSPACE = 'ComfyUI'\n", - "OPTIONS['USE_GOOGLE_DRIVE'] = USE_GOOGLE_DRIVE\n", - "OPTIONS['UPDATE_COMFY_UI'] = UPDATE_COMFY_UI\n", - "\n", - "if OPTIONS['USE_GOOGLE_DRIVE']:\n", - " !echo \"Mounting Google Drive...\"\n", - " %cd /\n", - " \n", - " from google.colab import drive\n", - " drive.mount('/content/drive')\n", - "\n", - " WORKSPACE = \"/content/drive/MyDrive/ComfyUI\"\n", - " %cd /content/drive/MyDrive\n", - "\n", - "![ ! -d $WORKSPACE ] && echo -= Initial setup ComfyUI =- && git clone https://github.com/comfyanonymous/ComfyUI\n", - "%cd $WORKSPACE\n", - "\n", - "if OPTIONS['UPDATE_COMFY_UI']:\n", - " !echo -= Updating ComfyUI =-\n", - " !git pull\n", - "\n", - "!echo -= Install dependencies =-\n", - "!pip install xformers!=0.0.18 -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://download.pytorch.org/whl/cu117" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cccccccccc" - }, - "source": [ - "Download some models/checkpoints/vae or custom comfyui nodes (uncomment the commands for the ones you want)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "dddddddddd" - }, - "outputs": [], - "source": [ - "# Checkpoints\n", - "\n", - "### SDXL\n", - "### I recommend these workflow examples: https://comfyanonymous.github.io/ComfyUI_examples/sdxl/\n", - "\n", - "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors -P ./models/checkpoints/\n", - "\n", - "# SDXL ReVision\n", - "#!wget -c https://huggingface.co/comfyanonymous/clip_vision_g/resolve/main/clip_vision_g.safetensors -P ./models/clip_vision/\n", - "\n", - "# SD1.5\n", - "!wget -c https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors -P ./models/checkpoints/\n", - "\n", - "# SD2\n", - "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors -P ./models/checkpoints/\n", - "\n", - "# Some SD1.5 anime style\n", - "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix2/AbyssOrangeMix2_hard.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1_orangemixs.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/Linaqruf/anything-v3.0/resolve/main/anything-v3-fp16-pruned.safetensors -P ./models/checkpoints/\n", - "\n", - "# Waifu Diffusion 1.5 (anime style SD2.x 768-v)\n", - "#!wget -c https://huggingface.co/waifu-diffusion/wd-1-5-beta3/resolve/main/wd-illusion-fp16.safetensors -P ./models/checkpoints/\n", - "\n", - "\n", - "# unCLIP models\n", - "#!wget -c https://huggingface.co/comfyanonymous/illuminatiDiffusionV1_v11_unCLIP/resolve/main/illuminatiDiffusionV1_v11-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", - "#!wget -c https://huggingface.co/comfyanonymous/wd-1.5-beta2_unCLIP/resolve/main/wd-1-5-beta2-aesthetic-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", - "\n", - "\n", - "# VAE\n", - "!wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/\n", - "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt -P ./models/vae/\n", - "#!wget -c https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt -P ./models/vae/\n", - "\n", - "\n", - "# Loras\n", - "#!wget -c https://civitai.com/api/download/models/10350 -O ./models/loras/theovercomer8sContrastFix_sd21768.safetensors #theovercomer8sContrastFix SD2.x 768-v\n", - "#!wget -c https://civitai.com/api/download/models/10638 -O ./models/loras/theovercomer8sContrastFix_sd15.safetensors #theovercomer8sContrastFix SD1.x\n", - "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors -P ./models/loras/ #SDXL offset noise lora\n", - "\n", - "\n", - "# T2I-Adapter\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_depth_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_seg_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_sketch_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_keypose_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_openpose_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_color_sd14v1.pth -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_canny_sd14v1.pth -P ./models/controlnet/\n", - "\n", - "# T2I Styles Model\n", - "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth -P ./models/style_models/\n", - "\n", - "# CLIPVision model (needed for styles model)\n", - "#!wget -c https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/pytorch_model.bin -O ./models/clip_vision/clip_vit14.bin\n", - "\n", - "\n", - "# ControlNet\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_canny_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_lineart_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_openpose_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_seg_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_softedge_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11u_sd15_tile_fp16.safetensors -P ./models/controlnet/\n", - "\n", - "# ControlNet SDXL\n", - "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-canny-rank256.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-depth-rank256.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-recolor-rank256.safetensors -P ./models/controlnet/\n", - "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors -P ./models/controlnet/\n", - "\n", - "# Controlnet Preprocessor nodes by Fannovel16\n", - "#!cd custom_nodes && git clone https://github.com/Fannovel16/comfy_controlnet_preprocessors; cd comfy_controlnet_preprocessors && python install.py\n", - "\n", - "\n", - "# GLIGEN\n", - "#!wget -c https://huggingface.co/comfyanonymous/GLIGEN_pruned_safetensors/resolve/main/gligen_sd14_textbox_pruned_fp16.safetensors -P ./models/gligen/\n", - "\n", - "\n", - "# ESRGAN upscale model\n", - "#!wget -c https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ./models/upscale_models/\n", - "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x2.pth -P ./models/upscale_models/\n", - "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x4.pth -P ./models/upscale_models/\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kkkkkkkkkkkkkkk" - }, - "source": [ - "### Run ComfyUI with cloudflared (Recommended Way)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "jjjjjjjjjjjjjj" - }, - "outputs": [], - "source": [ - "!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb\n", - "!dpkg -i cloudflared-linux-amd64.deb\n", - "\n", - "import subprocess\n", - "import threading\n", - "import time\n", - "import socket\n", - "import urllib.request\n", - "\n", - "def iframe_thread(port):\n", - " while True:\n", - " time.sleep(0.5)\n", - " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", - " result = sock.connect_ex(('127.0.0.1', port))\n", - " if result == 0:\n", - " break\n", - " sock.close()\n", - " print(\"\\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\\n\")\n", - "\n", - " p = subprocess.Popen([\"cloudflared\", \"tunnel\", \"--url\", \"http://127.0.0.1:{}\".format(port)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", - " for line in p.stderr:\n", - " l = line.decode()\n", - " if \"trycloudflare.com \" in l:\n", - " print(\"This is the URL to access ComfyUI:\", l[l.find(\"http\"):], end='')\n", - " #print(l, end='')\n", - "\n", - "\n", - "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", - "\n", - "!python main.py --dont-print-server" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kkkkkkkkkkkkkk" - }, - "source": [ - "### Run ComfyUI with localtunnel\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "jjjjjjjjjjjjj" - }, - "outputs": [], - "source": [ - "!npm install -g localtunnel\n", - "\n", - "import subprocess\n", - "import threading\n", - "import time\n", - "import socket\n", - "import urllib.request\n", - "\n", - "def iframe_thread(port):\n", - " while True:\n", - " time.sleep(0.5)\n", - " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", - " result = sock.connect_ex(('127.0.0.1', port))\n", - " if result == 0:\n", - " break\n", - " sock.close()\n", - " print(\"\\nComfyUI finished loading, trying to launch localtunnel (if it gets stuck here localtunnel is having issues)\\n\")\n", - "\n", - " print(\"The password/enpoint ip for localtunnel is:\", urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip(\"\\n\"))\n", - " p = subprocess.Popen([\"lt\", \"--port\", \"{}\".format(port)], stdout=subprocess.PIPE)\n", - " for line in p.stdout:\n", - " print(line.decode(), end='')\n", - "\n", - "\n", - "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", - "\n", - "!python main.py --dont-print-server" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gggggggggg" - }, - "source": [ - "### Run ComfyUI with colab iframe (use only in case the previous way with localtunnel doesn't work)\n", - "\n", - "You should see the ui appear in an iframe. If you get a 403 error, it's your firefox settings or an extension that's messing things up.\n", - "\n", - "If you want to open it in another window use the link.\n", - "\n", - "Note that some UI features like live image previews won't work because the colab iframe blocks websockets." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "hhhhhhhhhh" - }, - "outputs": [], - "source": [ - "import threading\n", - "import time\n", - "import socket\n", - "def iframe_thread(port):\n", - " while True:\n", - " time.sleep(0.5)\n", - " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", - " result = sock.connect_ex(('127.0.0.1', port))\n", - " if result == 0:\n", - " break\n", - " sock.close()\n", - " from google.colab import output\n", - " output.serve_kernel_port_as_iframe(port, height=1024)\n", - " print(\"to open it in a window you can open this link here:\")\n", - " output.serve_kernel_port_as_window(port)\n", - "\n", - "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", - "\n", - "!python main.py --dont-print-server" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "provenance": [] - }, - "gpuClass": "standard", - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "aaaaaaaaaa" + }, + "source": [ + "Git clone the repo and install the requirements. (ignore the pip errors about protobuf)" + ] }, - "nbformat": 4, - "nbformat_minor": 0 + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bbbbbbbbbb" + }, + "outputs": [], + "source": [ + "#@title Environment Setup\n", + "\n", + "\n", + "OPTIONS = {}\n", + "\n", + "USE_GOOGLE_DRIVE = False #@param {type:\"boolean\"}\n", + "UPDATE_COMFY_UI = True #@param {type:\"boolean\"}\n", + "WORKSPACE = 'ComfyUI'\n", + "OPTIONS['USE_GOOGLE_DRIVE'] = USE_GOOGLE_DRIVE\n", + "OPTIONS['UPDATE_COMFY_UI'] = UPDATE_COMFY_UI\n", + "\n", + "if OPTIONS['USE_GOOGLE_DRIVE']:\n", + " !echo \"Mounting Google Drive...\"\n", + " %cd /\n", + " \n", + " from google.colab import drive\n", + " drive.mount('/content/drive')\n", + "\n", + " WORKSPACE = \"/content/drive/MyDrive/ComfyUI\"\n", + " %cd /content/drive/MyDrive\n", + "\n", + "![ ! -d $WORKSPACE ] && echo -= Initial setup ComfyUI =- && git clone https://github.com/comfyanonymous/ComfyUI\n", + "%cd $WORKSPACE\n", + "\n", + "if OPTIONS['UPDATE_COMFY_UI']:\n", + " !echo -= Updating ComfyUI =-\n", + " !git pull\n", + "\n", + "!echo -= Install dependencies =-\n", + "!pip install xformers!=0.0.18 -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://download.pytorch.org/whl/cu117" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cccccccccc" + }, + "source": [ + "Download some models/checkpoints/vae or custom comfyui nodes (uncomment the commands for the ones you want)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dddddddddd" + }, + "outputs": [], + "source": [ + "# Checkpoints\n", + "\n", + "### SDXL\n", + "### I recommend these workflow examples: https://comfyanonymous.github.io/ComfyUI_examples/sdxl/\n", + "\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors -P ./models/checkpoints/\n", + "\n", + "# SDXL ReVision\n", + "#!wget -c https://huggingface.co/comfyanonymous/clip_vision_g/resolve/main/clip_vision_g.safetensors -P ./models/clip_vision/\n", + "\n", + "# SD1.5\n", + "!wget -c https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "# SD2\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors -P ./models/checkpoints/\n", + "\n", + "# Some SD1.5 anime style\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix2/AbyssOrangeMix2_hard.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1_orangemixs.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/Linaqruf/anything-v3.0/resolve/main/anything-v3-fp16-pruned.safetensors -P ./models/checkpoints/\n", + "\n", + "# Waifu Diffusion 1.5 (anime style SD2.x 768-v)\n", + "#!wget -c https://huggingface.co/waifu-diffusion/wd-1-5-beta3/resolve/main/wd-illusion-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "\n", + "# unCLIP models\n", + "#!wget -c https://huggingface.co/comfyanonymous/illuminatiDiffusionV1_v11_unCLIP/resolve/main/illuminatiDiffusionV1_v11-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/comfyanonymous/wd-1.5-beta2_unCLIP/resolve/main/wd-1-5-beta2-aesthetic-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "\n", + "# VAE\n", + "!wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt -P ./models/vae/\n", + "#!wget -c https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt -P ./models/vae/\n", + "\n", + "\n", + "# Loras\n", + "#!wget -c https://civitai.com/api/download/models/10350 -O ./models/loras/theovercomer8sContrastFix_sd21768.safetensors #theovercomer8sContrastFix SD2.x 768-v\n", + "#!wget -c https://civitai.com/api/download/models/10638 -O ./models/loras/theovercomer8sContrastFix_sd15.safetensors #theovercomer8sContrastFix SD1.x\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors -P ./models/loras/ #SDXL offset noise lora\n", + "\n", + "\n", + "# T2I-Adapter\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_depth_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_seg_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_sketch_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_keypose_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_openpose_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_color_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_canny_sd14v1.pth -P ./models/controlnet/\n", + "\n", + "# T2I Styles Model\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth -P ./models/style_models/\n", + "\n", + "# CLIPVision model (needed for styles model)\n", + "#!wget -c https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/pytorch_model.bin -O ./models/clip_vision/clip_vit14.bin\n", + "\n", + "\n", + "# ControlNet\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_canny_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_lineart_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_openpose_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_seg_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_softedge_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11u_sd15_tile_fp16.safetensors -P ./models/controlnet/\n", + "\n", + "# ControlNet SDXL\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-canny-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-depth-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-recolor-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors -P ./models/controlnet/\n", + "\n", + "# Controlnet Preprocessor nodes by Fannovel16\n", + "#!cd custom_nodes && git clone https://github.com/Fannovel16/comfy_controlnet_preprocessors; cd comfy_controlnet_preprocessors && python install.py\n", + "\n", + "\n", + "# GLIGEN\n", + "#!wget -c https://huggingface.co/comfyanonymous/GLIGEN_pruned_safetensors/resolve/main/gligen_sd14_textbox_pruned_fp16.safetensors -P ./models/gligen/\n", + "\n", + "\n", + "# ESRGAN upscale model\n", + "#!wget -c https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ./models/upscale_models/\n", + "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x2.pth -P ./models/upscale_models/\n", + "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x4.pth -P ./models/upscale_models/\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kkkkkkkkkkkkkkk" + }, + "source": [ + "### Run ComfyUI with cloudflared (Recommended Way)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jjjjjjjjjjjjjj" + }, + "outputs": [], + "source": [ + "!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb\n", + "!dpkg -i cloudflared-linux-amd64.deb\n", + "\n", + "import subprocess\n", + "import threading\n", + "import time\n", + "import socket\n", + "import urllib.request\n", + "\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " print(\"\\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\\n\")\n", + "\n", + " p = subprocess.Popen([\"cloudflared\", \"tunnel\", \"--url\", \"http://127.0.0.1:{}\".format(port)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", + " for line in p.stderr:\n", + " l = line.decode()\n", + " if \"trycloudflare.com \" in l:\n", + " print(\"This is the URL to access ComfyUI:\", l[l.find(\"http\"):], end='')\n", + " #print(l, end='')\n", + "\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kkkkkkkkkkkkkk" + }, + "source": [ + "### Run ComfyUI with localtunnel\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jjjjjjjjjjjjj" + }, + "outputs": [], + "source": [ + "!npm install -g localtunnel\n", + "\n", + "import threading\n", + "\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " print(\"\\nComfyUI finished loading, trying to launch localtunnel (if it gets stuck here localtunnel is having issues)\\n\")\n", + "\n", + " print(\"The password/enpoint ip for localtunnel is:\", urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip(\"\\n\"))\n", + " p = subprocess.Popen([\"lt\", \"--port\", \"{}\".format(port)], stdout=subprocess.PIPE)\n", + " for line in p.stdout:\n", + " print(line.decode(), end='')\n", + "\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gggggggggg" + }, + "source": [ + "### Run ComfyUI with colab iframe (use only in case the previous way with localtunnel doesn't work)\n", + "\n", + "You should see the ui appear in an iframe. If you get a 403 error, it's your firefox settings or an extension that's messing things up.\n", + "\n", + "If you want to open it in another window use the link.\n", + "\n", + "Note that some UI features like live image previews won't work because the colab iframe blocks websockets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hhhhhhhhhh" + }, + "outputs": [], + "source": [ + "import threading\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " from google.colab import output\n", + " output.serve_kernel_port_as_iframe(port, height=1024)\n", + " print(\"to open it in a window you can open this link here:\")\n", + " output.serve_kernel_port_as_window(port)\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 000000000..a83d450b1 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,10 @@ +# Disable all rules by default +lint.ignore = ["ALL"] + +# Enable specific rules +lint.select = [ + "S307", # suspicious-eval-usage + # The "F" series in Ruff stands for "Pyflakes" rules, which catch various Python syntax errors and undefined names. + # See all rules here: https://docs.astral.sh/ruff/rules/#pyflakes-f + "F", +] \ No newline at end of file diff --git a/script_examples/basic_api_example.py b/script_examples/basic_api_example.py index bc8ad7134..c916e6cb9 100644 --- a/script_examples/basic_api_example.py +++ b/script_examples/basic_api_example.py @@ -1,6 +1,5 @@ import json -from urllib import request, parse -import random +from urllib import request #This is the ComfyUI api prompt format. diff --git a/script_examples/websockets_api_example.py b/script_examples/websockets_api_example.py index 62afc869c..d696d2bba 100644 --- a/script_examples/websockets_api_example.py +++ b/script_examples/websockets_api_example.py @@ -38,6 +38,9 @@ def get_images(ws, prompt): if data['node'] is None and data['prompt_id'] == prompt_id: break #Execution is done else: + # If you want to be able to decode the binary stream for latent previews, here is how you can do it: + # bytesIO = BytesIO(out[8:]) + # preview_image = Image.open(bytesIO) # This is your preview in PIL image format, store it in a global continue #previews are binary data history = get_history(prompt_id)[prompt_id] @@ -151,7 +154,7 @@ prompt["3"]["inputs"]["seed"] = 5 ws = websocket.WebSocket() ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id)) images = get_images(ws, prompt) - +ws.close() # for in case this example is used in an environment where it will be repeatedly called, like in a Gradio app. otherwise, you'll randomly receive connection timeouts #Commented out code to display the output images: # for node_id in images: diff --git a/script_examples/websockets_api_example_ws_images.py b/script_examples/websockets_api_example_ws_images.py index b37d9893d..6508ecc99 100644 --- a/script_examples/websockets_api_example_ws_images.py +++ b/script_examples/websockets_api_example_ws_images.py @@ -147,7 +147,7 @@ prompt["3"]["inputs"]["seed"] = 5 ws = websocket.WebSocket() ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id)) images = get_images(ws, prompt) - +ws.close() # for in case this example is used in an environment where it will be repeatedly called, like in a Gradio app. otherwise, you'll randomly receive connection timeouts #Commented out code to display the output images: # for node_id in images: diff --git a/server.py b/server.py index d8a9916bb..ddd71e062 100644 --- a/server.py +++ b/server.py @@ -12,6 +12,8 @@ import json import glob import struct import ssl +import socket +import ipaddress from PIL import Image, ImageOps from PIL.PngImagePlugin import PngInfo from io import BytesIO @@ -27,11 +29,10 @@ import comfy.model_management import node_helpers from app.frontend_management import FrontendManager from app.user_manager import UserManager -from model_filemanager import download_model, DownloadModelStatus +from app.model_manager import ModelFileManager from typing import Optional from api_server.routes.internal.internal_routes import InternalRoutes - class BinaryEventTypes: PREVIEW_IMAGE = 1 UNENCODED_PREVIEW_IMAGE = 2 @@ -39,9 +40,24 @@ class BinaryEventTypes: async def send_socket_catch_exception(function, message): try: await function(message) - except (aiohttp.ClientError, aiohttp.ClientPayloadError, ConnectionResetError) as err: + except (aiohttp.ClientError, aiohttp.ClientPayloadError, ConnectionResetError, BrokenPipeError, ConnectionError) as err: logging.warning("send error: {}".format(err)) +def get_comfyui_version(): + comfyui_version = "unknown" + repo_path = os.path.dirname(os.path.realpath(__file__)) + try: + import pygit2 + repo = pygit2.Repository(repo_path) + comfyui_version = repo.describe(describe_strategy=pygit2.GIT_DESCRIBE_TAGS) + except Exception: + try: + import subprocess + comfyui_version = subprocess.check_output(["git", "describe", "--tags"], cwd=repo_path).decode('utf-8') + except Exception as e: + logging.warning(f"Failed to get ComfyUI version: {e}") + return comfyui_version.strip() + @web.middleware async def cache_control(request: web.Request, handler): response: web.Response = await handler(request) @@ -66,6 +82,68 @@ def create_cors_middleware(allowed_origin: str): return cors_middleware +def is_loopback(host): + if host is None: + return False + try: + if ipaddress.ip_address(host).is_loopback: + return True + else: + return False + except: + pass + + loopback = False + for family in (socket.AF_INET, socket.AF_INET6): + try: + r = socket.getaddrinfo(host, None, family, socket.SOCK_STREAM) + for family, _, _, _, sockaddr in r: + if not ipaddress.ip_address(sockaddr[0]).is_loopback: + return loopback + else: + loopback = True + except socket.gaierror: + pass + + return loopback + + +def create_origin_only_middleware(): + @web.middleware + async def origin_only_middleware(request: web.Request, handler): + #this code is used to prevent the case where a random website can queue comfy workflows by making a POST to 127.0.0.1 which browsers don't prevent for some dumb reason. + #in that case the Host and Origin hostnames won't match + #I know the proper fix would be to add a cookie but this should take care of the problem in the meantime + if 'Host' in request.headers and 'Origin' in request.headers: + host = request.headers['Host'] + origin = request.headers['Origin'] + host_domain = host.lower() + parsed = urllib.parse.urlparse(origin) + origin_domain = parsed.netloc.lower() + host_domain_parsed = urllib.parse.urlsplit('//' + host_domain) + + #limit the check to when the host domain is localhost, this makes it slightly less safe but should still prevent the exploit + loopback = is_loopback(host_domain_parsed.hostname) + + if parsed.port is None: #if origin doesn't have a port strip it from the host to handle weird browsers, same for host + host_domain = host_domain_parsed.hostname + if host_domain_parsed.port is None: + origin_domain = parsed.hostname + + if loopback and host_domain is not None and origin_domain is not None and len(host_domain) > 0 and len(origin_domain) > 0: + if host_domain != origin_domain: + logging.warning("WARNING: request with non matching host and origin {} != {}, returning 403".format(host_domain, origin_domain)) + return web.Response(status=403) + + if request.method == "OPTIONS": + response = web.Response() + else: + response = await handler(request) + + return response + + return origin_only_middleware + class PromptServer(): def __init__(self, loop): PromptServer.instance = self @@ -74,7 +152,8 @@ class PromptServer(): mimetypes.types_map['.js'] = 'application/javascript; charset=utf-8' self.user_manager = UserManager() - self.internal_routes = InternalRoutes() + self.model_file_manager = ModelFileManager() + self.internal_routes = InternalRoutes(self) self.supports = ["custom_nodes_from_web"] self.prompt_queue = None self.loop = loop @@ -85,6 +164,8 @@ class PromptServer(): middlewares = [cache_control] if args.enable_cors_header: middlewares.append(create_cors_middleware(args.enable_cors_header)) + else: + middlewares.append(create_origin_only_middleware()) max_upload_size = round(args.max_upload_size * 1024 * 1024) self.app = web.Application(client_max_size=max_upload_size, middlewares=middlewares) @@ -142,6 +223,12 @@ class PromptServer(): embeddings = folder_paths.get_filename_list("embeddings") return web.json_response(list(map(lambda a: os.path.splitext(a)[0], embeddings))) + @routes.get("/models") + def list_model_types(request): + model_types = list(folder_paths.folder_names_and_paths.keys()) + + return web.json_response(model_types) + @routes.get("/models/{folder}") async def get_models(request): folder = request.match_info.get("folder", None) @@ -373,7 +460,21 @@ class PromptServer(): return web.Response(body=alpha_buffer.read(), content_type='image/png', headers={"Content-Disposition": f"filename=\"{filename}\""}) else: - return web.FileResponse(file, headers={"Content-Disposition": f"filename=\"{filename}\""}) + # Get content type from mimetype, defaulting to 'application/octet-stream' + content_type = mimetypes.guess_type(filename)[0] or 'application/octet-stream' + + # For security, force certain extensions to download instead of display + file_extension = os.path.splitext(filename)[1].lower() + if file_extension in {'.html', '.htm', '.js', '.css'}: + content_type = 'application/octet-stream' # Forces download + + return web.FileResponse( + file, + headers={ + "Content-Disposition": f"filename=\"{filename}\"", + "Content-Type": content_type + } + ) return web.Response(status=404) @@ -401,16 +502,25 @@ class PromptServer(): return web.json_response(dt["__metadata__"]) @routes.get("/system_stats") - async def get_queue(request): + async def system_stats(request): device = comfy.model_management.get_torch_device() device_name = comfy.model_management.get_torch_device_name(device) + cpu_device = comfy.model_management.torch.device("cpu") + ram_total = comfy.model_management.get_total_memory(cpu_device) + ram_free = comfy.model_management.get_free_memory(cpu_device) vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True) vram_free, torch_vram_free = comfy.model_management.get_free_memory(device, torch_free_too=True) + system_stats = { "system": { "os": os.name, + "ram_total": ram_total, + "ram_free": ram_free, + "comfyui_version": get_comfyui_version(), "python_version": sys.version, - "embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded" + "pytorch_version": comfy.model_management.torch_version, + "embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded", + "argv": sys.argv }, "devices": [ { @@ -462,14 +572,15 @@ class PromptServer(): @routes.get("/object_info") async def get_object_info(request): - out = {} - for x in nodes.NODE_CLASS_MAPPINGS: - try: - out[x] = node_info(x) - except Exception as e: - logging.error(f"[ERROR] An error occurred while retrieving information for the '{x}' node.") - logging.error(traceback.format_exc()) - return web.json_response(out) + with folder_paths.cache_helper: + out = {} + for x in nodes.NODE_CLASS_MAPPINGS: + try: + out[x] = node_info(x) + except Exception: + logging.error(f"[ERROR] An error occurred while retrieving information for the '{x}' node.") + logging.error(traceback.format_exc()) + return web.json_response(out) @routes.get("/object_info/{node_class}") async def get_object_info_node(request): @@ -487,7 +598,7 @@ class PromptServer(): return web.json_response(self.prompt_queue.get_history(max_items=max_items)) @routes.get("/history/{prompt_id}") - async def get_history(request): + async def get_history_prompt_id(request): prompt_id = request.match_info.get("prompt_id", None) return web.json_response(self.prompt_queue.get_history(prompt_id=prompt_id)) @@ -502,8 +613,6 @@ class PromptServer(): @routes.post("/prompt") async def post_prompt(request): logging.info("got prompt") - resp_code = 200 - out_string = "" json_data = await request.json() json_data = self.trigger_on_prompt(json_data) @@ -580,34 +689,6 @@ class PromptServer(): self.prompt_queue.delete_history_item(id_to_delete) return web.Response(status=200) - - # Internal route. Should not be depended upon and is subject to change at any time. - # TODO(robinhuang): Move to internal route table class once we refactor PromptServer to pass around Websocket. - @routes.post("/internal/models/download") - async def download_handler(request): - async def report_progress(filename: str, status: DownloadModelStatus): - payload = status.to_dict() - payload['download_path'] = filename - await self.send_json("download_progress", payload) - - data = await request.json() - url = data.get('url') - model_directory = data.get('model_directory') - model_filename = data.get('model_filename') - progress_interval = data.get('progress_interval', 1.0) # In seconds, how often to report download progress. - - if not url or not model_directory or not model_filename: - return web.json_response({"status": "error", "message": "Missing URL or folder path or filename"}, status=400) - - session = self.client_session - if session is None: - logging.error("Client session is not initialized") - return web.Response(status=500) - - task = asyncio.create_task(download_model(lambda url: session.get(url), model_filename, url, model_directory, report_progress, progress_interval)) - await task - - return web.json_response(task.result().to_dict()) async def setup(self): timeout = aiohttp.ClientTimeout(total=None) # no timeout @@ -615,6 +696,7 @@ class PromptServer(): def add_routes(self): self.user_manager.add_routes(self.routes) + self.model_file_manager.add_routes(self.routes) self.app.add_subapp('/internal', self.internal_routes.get_app()) # Prefix every route with /api for easier matching for delegation. @@ -721,6 +803,9 @@ class PromptServer(): await self.send(*msg) async def start(self, address, port, verbose=True, call_on_start=None): + await self.start_multi_address([(address, port)], call_on_start=call_on_start) + + async def start_multi_address(self, addresses, call_on_start=None): runner = web.AppRunner(self.app, access_log=None) await runner.setup() ssl_ctx = None @@ -731,17 +816,26 @@ class PromptServer(): keyfile=args.tls_keyfile) scheme = "https" - site = web.TCPSite(runner, address, port, ssl_context=ssl_ctx) - await site.start() + logging.info("Starting server\n") + for addr in addresses: + address = addr[0] + port = addr[1] + site = web.TCPSite(runner, address, port, ssl_context=ssl_ctx) + await site.start() - self.address = address - self.port = port + if not hasattr(self, 'address'): + self.address = address #TODO: remove this + self.port = port + + if ':' in address: + address_print = "[{}]".format(address) + else: + address_print = address + + logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address_print, port)) - if verbose: - logging.info("Starting server\n") - logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address, port)) if call_on_start is not None: - call_on_start(scheme, address, port) + call_on_start(scheme, self.address, self.port) def add_on_prompt_handler(self, handler): self.on_prompt_handlers.append(handler) @@ -750,8 +844,8 @@ class PromptServer(): for handler in self.on_prompt_handlers: try: json_data = handler(json_data) - except Exception as e: - logging.warning(f"[ERROR] An error occurred during the on_prompt_handler processing") + except Exception: + logging.warning("[ERROR] An error occurred during the on_prompt_handler processing") logging.warning(traceback.format_exc()) return json_data diff --git a/tests-unit/README.md b/tests-unit/README.md index 94abd9853..81692b8f1 100644 --- a/tests-unit/README.md +++ b/tests-unit/README.md @@ -2,7 +2,7 @@ ## Install test dependencies -`pip install -r tests-units/requirements.txt` +`pip install -r tests-unit/requirements.txt` ## Run tests -`pytest tests-units/` +`pytest tests-unit/` diff --git a/tests-unit/comfy_test/folder_path_test.py b/tests-unit/comfy_test/folder_path_test.py new file mode 100644 index 000000000..55613505e --- /dev/null +++ b/tests-unit/comfy_test/folder_path_test.py @@ -0,0 +1,98 @@ +### 🗻 This file is created through the spirit of Mount Fuji at its peak +# TODO(yoland): clean up this after I get back down +import pytest +import os +import tempfile +from unittest.mock import patch + +import folder_paths + +@pytest.fixture() +def clear_folder_paths(): + # Clear the global dictionary before each test to ensure isolation + original = folder_paths.folder_names_and_paths.copy() + folder_paths.folder_names_and_paths.clear() + yield + folder_paths.folder_names_and_paths = original + +@pytest.fixture +def temp_dir(): + with tempfile.TemporaryDirectory() as tmpdirname: + yield tmpdirname + + +def test_get_directory_by_type(): + test_dir = "/test/dir" + folder_paths.set_output_directory(test_dir) + assert folder_paths.get_directory_by_type("output") == test_dir + assert folder_paths.get_directory_by_type("invalid") is None + +def test_annotated_filepath(): + assert folder_paths.annotated_filepath("test.txt") == ("test.txt", None) + assert folder_paths.annotated_filepath("test.txt [output]") == ("test.txt", folder_paths.get_output_directory()) + assert folder_paths.annotated_filepath("test.txt [input]") == ("test.txt", folder_paths.get_input_directory()) + assert folder_paths.annotated_filepath("test.txt [temp]") == ("test.txt", folder_paths.get_temp_directory()) + +def test_get_annotated_filepath(): + default_dir = "/default/dir" + assert folder_paths.get_annotated_filepath("test.txt", default_dir) == os.path.join(default_dir, "test.txt") + assert folder_paths.get_annotated_filepath("test.txt [output]") == os.path.join(folder_paths.get_output_directory(), "test.txt") + +def test_add_model_folder_path_append(clear_folder_paths): + folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True) + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False) + assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"] + + +def test_add_model_folder_path_insert(clear_folder_paths): + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False) + folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True) + assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"] + + +def test_add_model_folder_path_re_add_existing_default(clear_folder_paths): + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False) + folder_paths.add_model_folder_path("test_folder", "/old_default/path", is_default=True) + assert folder_paths.get_folder_paths("test_folder") == ["/old_default/path", "/test/path"] + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=True) + assert folder_paths.get_folder_paths("test_folder") == ["/test/path", "/old_default/path"] + + +def test_add_model_folder_path_re_add_existing_non_default(clear_folder_paths): + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False) + folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True) + assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"] + folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False) + assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"] + + +def test_recursive_search(temp_dir): + os.makedirs(os.path.join(temp_dir, "subdir")) + open(os.path.join(temp_dir, "file1.txt"), "w").close() + open(os.path.join(temp_dir, "subdir", "file2.txt"), "w").close() + + files, dirs = folder_paths.recursive_search(temp_dir) + assert set(files) == {"file1.txt", os.path.join("subdir", "file2.txt")} + assert len(dirs) == 2 # temp_dir and subdir + +def test_filter_files_extensions(): + files = ["file1.txt", "file2.jpg", "file3.png", "file4.txt"] + assert folder_paths.filter_files_extensions(files, [".txt"]) == ["file1.txt", "file4.txt"] + assert folder_paths.filter_files_extensions(files, [".jpg", ".png"]) == ["file2.jpg", "file3.png"] + assert folder_paths.filter_files_extensions(files, []) == files + +@patch("folder_paths.recursive_search") +@patch("folder_paths.folder_names_and_paths") +def test_get_filename_list(mock_folder_names_and_paths, mock_recursive_search): + mock_folder_names_and_paths.__getitem__.return_value = (["/test/path"], {".txt"}) + mock_recursive_search.return_value = (["file1.txt", "file2.jpg"], {}) + assert folder_paths.get_filename_list("test_folder") == ["file1.txt"] + +def test_get_save_image_path(temp_dir): + with patch("folder_paths.output_directory", temp_dir): + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path("test", temp_dir, 100, 100) + assert os.path.samefile(full_output_folder, temp_dir) + assert filename == "test" + assert counter == 1 + assert subfolder == "" + assert filename_prefix == "test" \ No newline at end of file diff --git a/tests-unit/execution_test/validate_node_input_test.py b/tests-unit/execution_test/validate_node_input_test.py new file mode 100644 index 000000000..85a0c9601 --- /dev/null +++ b/tests-unit/execution_test/validate_node_input_test.py @@ -0,0 +1,119 @@ +import pytest +from comfy_execution.validation import validate_node_input + + +def test_exact_match(): + """Test cases where types match exactly""" + assert validate_node_input("STRING", "STRING") + assert validate_node_input("STRING,INT", "STRING,INT") + assert validate_node_input("INT,STRING", "STRING,INT") # Order shouldn't matter + + +def test_strict_mode(): + """Test strict mode validation""" + # Should pass - received type is subset of input type + assert validate_node_input("STRING", "STRING,INT", strict=True) + assert validate_node_input("INT", "STRING,INT", strict=True) + assert validate_node_input("STRING,INT", "STRING,INT,BOOLEAN", strict=True) + + # Should fail - received type is not subset of input type + assert not validate_node_input("STRING,INT", "STRING", strict=True) + assert not validate_node_input("STRING,BOOLEAN", "STRING", strict=True) + assert not validate_node_input("INT,BOOLEAN", "STRING,INT", strict=True) + + +def test_non_strict_mode(): + """Test non-strict mode validation (default behavior)""" + # Should pass - types have overlap + assert validate_node_input("STRING,BOOLEAN", "STRING,INT") + assert validate_node_input("STRING,INT", "INT,BOOLEAN") + assert validate_node_input("STRING", "STRING,INT") + + # Should fail - no overlap in types + assert not validate_node_input("BOOLEAN", "STRING,INT") + assert not validate_node_input("FLOAT", "STRING,INT") + assert not validate_node_input("FLOAT,BOOLEAN", "STRING,INT") + + +def test_whitespace_handling(): + """Test that whitespace is handled correctly""" + assert validate_node_input("STRING, INT", "STRING,INT") + assert validate_node_input("STRING,INT", "STRING, INT") + assert validate_node_input(" STRING , INT ", "STRING,INT") + assert validate_node_input("STRING,INT", " STRING , INT ") + + +def test_empty_strings(): + """Test behavior with empty strings""" + assert validate_node_input("", "") + assert not validate_node_input("STRING", "") + assert not validate_node_input("", "STRING") + + +def test_single_vs_multiple(): + """Test single type against multiple types""" + assert validate_node_input("STRING", "STRING,INT,BOOLEAN") + assert validate_node_input("STRING,INT,BOOLEAN", "STRING", strict=False) + assert not validate_node_input("STRING,INT,BOOLEAN", "STRING", strict=True) + + +def test_non_string(): + """Test non-string types""" + obj1 = object() + obj2 = object() + assert validate_node_input(obj1, obj1) + assert not validate_node_input(obj1, obj2) + + +class NotEqualsOverrideTest(str): + """Test class for ``__ne__`` override.""" + + def __ne__(self, value: object) -> bool: + if self == "*" or value == "*": + return False + if self == "LONGER_THAN_2": + return not len(value) > 2 + raise TypeError("This is a class for unit tests only.") + + +def test_ne_override(): + """Test ``__ne__`` any override""" + any = NotEqualsOverrideTest("*") + invalid_type = "INVALID_TYPE" + obj = object() + assert validate_node_input(any, any) + assert validate_node_input(any, invalid_type) + assert validate_node_input(any, obj) + assert validate_node_input(any, {}) + assert validate_node_input(any, []) + assert validate_node_input(any, [1, 2, 3]) + + +def test_ne_custom_override(): + """Test ``__ne__`` custom override""" + special = NotEqualsOverrideTest("LONGER_THAN_2") + + assert validate_node_input(special, special) + assert validate_node_input(special, "*") + assert validate_node_input(special, "INVALID_TYPE") + assert validate_node_input(special, [1, 2, 3]) + + # Should fail + assert not validate_node_input(special, [1, 2]) + assert not validate_node_input(special, "TY") + + +@pytest.mark.parametrize( + "received,input_type,strict,expected", + [ + ("STRING", "STRING", False, True), + ("STRING,INT", "STRING,INT", False, True), + ("STRING", "STRING,INT", True, True), + ("STRING,INT", "STRING", True, False), + ("BOOLEAN", "STRING,INT", False, False), + ("STRING,BOOLEAN", "STRING,INT", False, True), + ], +) +def test_parametrized_cases(received, input_type, strict, expected): + """Parametrized test cases for various scenarios""" + assert validate_node_input(received, input_type, strict) == expected diff --git a/tests-unit/folder_paths_test/__init__.py b/tests-unit/folder_paths_test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests-unit/folder_paths_test/filter_by_content_types_test.py b/tests-unit/folder_paths_test/filter_by_content_types_test.py new file mode 100644 index 000000000..5574789ec --- /dev/null +++ b/tests-unit/folder_paths_test/filter_by_content_types_test.py @@ -0,0 +1,52 @@ +import pytest +import os +import tempfile +from folder_paths import filter_files_content_types + +@pytest.fixture(scope="module") +def file_extensions(): + return { + 'image': ['gif', 'heif', 'ico', 'jpeg', 'jpg', 'png', 'pnm', 'ppm', 'svg', 'tiff', 'webp', 'xbm', 'xpm'], + 'audio': ['aif', 'aifc', 'aiff', 'au', 'flac', 'm4a', 'mp2', 'mp3', 'ogg', 'snd', 'wav'], + 'video': ['avi', 'm2v', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'ogv', 'qt', 'webm', 'wmv'] + } + + +@pytest.fixture(scope="module") +def mock_dir(file_extensions): + with tempfile.TemporaryDirectory() as directory: + for content_type, extensions in file_extensions.items(): + for extension in extensions: + with open(f"{directory}/sample_{content_type}.{extension}", "w") as f: + f.write(f"Sample {content_type} file in {extension} format") + yield directory + + +def test_categorizes_all_correctly(mock_dir, file_extensions): + files = os.listdir(mock_dir) + for content_type, extensions in file_extensions.items(): + filtered_files = filter_files_content_types(files, [content_type]) + for extension in extensions: + assert f"sample_{content_type}.{extension}" in filtered_files + + +def test_categorizes_all_uniquely(mock_dir, file_extensions): + files = os.listdir(mock_dir) + for content_type, extensions in file_extensions.items(): + filtered_files = filter_files_content_types(files, [content_type]) + assert len(filtered_files) == len(extensions) + + +def test_handles_bad_extensions(): + files = ["file1.txt", "file2.py", "file3.example", "file4.pdf", "file5.ini", "file6.doc", "file7.md"] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] + + +def test_handles_no_extension(): + files = ["file1", "file2", "file3", "file4", "file5", "file6", "file7"] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] + + +def test_handles_no_files(): + files = [] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] \ No newline at end of file diff --git a/tests-unit/prompt_server_test/download_models_test.py b/tests-unit/prompt_server_test/download_models_test.py deleted file mode 100644 index 66150a468..000000000 --- a/tests-unit/prompt_server_test/download_models_test.py +++ /dev/null @@ -1,321 +0,0 @@ -import pytest -import aiohttp -from aiohttp import ClientResponse -import itertools -import os -from unittest.mock import AsyncMock, patch, MagicMock -from model_filemanager import download_model, validate_model_subdirectory, track_download_progress, create_model_path, check_file_exists, DownloadStatusType, DownloadModelStatus, validate_filename - -class AsyncIteratorMock: - """ - A mock class that simulates an asynchronous iterator. - This is used to mimic the behavior of aiohttp's content iterator. - """ - def __init__(self, seq): - # Convert the input sequence into an iterator - self.iter = iter(seq) - - def __aiter__(self): - # This method is called when 'async for' is used - return self - - async def __anext__(self): - # This method is called for each iteration in an 'async for' loop - try: - return next(self.iter) - except StopIteration: - # This is the asynchronous equivalent of StopIteration - raise StopAsyncIteration - -class ContentMock: - """ - A mock class that simulates the content attribute of an aiohttp ClientResponse. - This class provides the iter_chunked method which returns an async iterator of chunks. - """ - def __init__(self, chunks): - # Store the chunks that will be returned by the iterator - self.chunks = chunks - - def iter_chunked(self, chunk_size): - # This method mimics aiohttp's content.iter_chunked() - # For simplicity in testing, we ignore chunk_size and just return our predefined chunks - return AsyncIteratorMock(self.chunks) - -@pytest.mark.asyncio -async def test_download_model_success(): - mock_response = AsyncMock(spec=aiohttp.ClientResponse) - mock_response.status = 200 - mock_response.headers = {'Content-Length': '1000'} - # Create a mock for content that returns an async iterator directly - chunks = [b'a' * 500, b'b' * 300, b'c' * 200] - mock_response.content = ContentMock(chunks) - - mock_make_request = AsyncMock(return_value=mock_response) - mock_progress_callback = AsyncMock() - - # Mock file operations - mock_open = MagicMock() - mock_file = MagicMock() - mock_open.return_value.__enter__.return_value = mock_file - time_values = itertools.count(0, 0.1) - - with patch('model_filemanager.create_model_path', return_value=('models/checkpoints/model.sft', 'checkpoints/model.sft')), \ - patch('model_filemanager.check_file_exists', return_value=None), \ - patch('builtins.open', mock_open), \ - patch('time.time', side_effect=time_values): # Simulate time passing - - result = await download_model( - mock_make_request, - 'model.sft', - 'http://example.com/model.sft', - 'checkpoints', - mock_progress_callback - ) - - # Assert the result - assert isinstance(result, DownloadModelStatus) - assert result.message == 'Successfully downloaded model.sft' - assert result.status == 'completed' - assert result.already_existed is False - - # Check progress callback calls - assert mock_progress_callback.call_count >= 3 # At least start, one progress update, and completion - - # Check initial call - mock_progress_callback.assert_any_call( - 'checkpoints/model.sft', - DownloadModelStatus(DownloadStatusType.PENDING, 0, "Starting download of model.sft", False) - ) - - # Check final call - mock_progress_callback.assert_any_call( - 'checkpoints/model.sft', - DownloadModelStatus(DownloadStatusType.COMPLETED, 100, "Successfully downloaded model.sft", False) - ) - - # Verify file writing - mock_file.write.assert_any_call(b'a' * 500) - mock_file.write.assert_any_call(b'b' * 300) - mock_file.write.assert_any_call(b'c' * 200) - - # Verify request was made - mock_make_request.assert_called_once_with('http://example.com/model.sft') - -@pytest.mark.asyncio -async def test_download_model_url_request_failure(): - # Mock dependencies - mock_response = AsyncMock(spec=ClientResponse) - mock_response.status = 404 # Simulate a "Not Found" error - mock_get = AsyncMock(return_value=mock_response) - mock_progress_callback = AsyncMock() - - # Mock the create_model_path function - with patch('model_filemanager.create_model_path', return_value=('/mock/path/model.safetensors', 'mock/path/model.safetensors')): - # Mock the check_file_exists function to return None (file doesn't exist) - with patch('model_filemanager.check_file_exists', return_value=None): - # Call the function - result = await download_model( - mock_get, - 'model.safetensors', - 'http://example.com/model.safetensors', - 'mock_directory', - mock_progress_callback - ) - - # Assert the expected behavior - assert isinstance(result, DownloadModelStatus) - assert result.status == 'error' - assert result.message == 'Failed to download model.safetensors. Status code: 404' - assert result.already_existed is False - - # Check that progress_callback was called with the correct arguments - mock_progress_callback.assert_any_call( - 'mock_directory/model.safetensors', - DownloadModelStatus( - status=DownloadStatusType.PENDING, - progress_percentage=0, - message='Starting download of model.safetensors', - already_existed=False - ) - ) - mock_progress_callback.assert_called_with( - 'mock_directory/model.safetensors', - DownloadModelStatus( - status=DownloadStatusType.ERROR, - progress_percentage=0, - message='Failed to download model.safetensors. Status code: 404', - already_existed=False - ) - ) - - # Verify that the get method was called with the correct URL - mock_get.assert_called_once_with('http://example.com/model.safetensors') - -@pytest.mark.asyncio -async def test_download_model_invalid_model_subdirectory(): - - mock_make_request = AsyncMock() - mock_progress_callback = AsyncMock() - - - result = await download_model( - mock_make_request, - 'model.sft', - 'http://example.com/model.sft', - '../bad_path', - mock_progress_callback - ) - - # Assert the result - assert isinstance(result, DownloadModelStatus) - assert result.message == 'Invalid model subdirectory' - assert result.status == 'error' - assert result.already_existed is False - - -# For create_model_path function -def test_create_model_path(tmp_path, monkeypatch): - mock_models_dir = tmp_path / "models" - monkeypatch.setattr('folder_paths.models_dir', str(mock_models_dir)) - - model_name = "test_model.sft" - model_directory = "test_dir" - - file_path, relative_path = create_model_path(model_name, model_directory, mock_models_dir) - - assert file_path == str(mock_models_dir / model_directory / model_name) - assert relative_path == f"{model_directory}/{model_name}" - assert os.path.exists(os.path.dirname(file_path)) - - -@pytest.mark.asyncio -async def test_check_file_exists_when_file_exists(tmp_path): - file_path = tmp_path / "existing_model.sft" - file_path.touch() # Create an empty file - - mock_callback = AsyncMock() - - result = await check_file_exists(str(file_path), "existing_model.sft", mock_callback, "test/existing_model.sft") - - assert result is not None - assert result.status == "completed" - assert result.message == "existing_model.sft already exists" - assert result.already_existed is True - - mock_callback.assert_called_once_with( - "test/existing_model.sft", - DownloadModelStatus(DownloadStatusType.COMPLETED, 100, "existing_model.sft already exists", already_existed=True) - ) - -@pytest.mark.asyncio -async def test_check_file_exists_when_file_does_not_exist(tmp_path): - file_path = tmp_path / "non_existing_model.sft" - - mock_callback = AsyncMock() - - result = await check_file_exists(str(file_path), "non_existing_model.sft", mock_callback, "test/non_existing_model.sft") - - assert result is None - mock_callback.assert_not_called() - -@pytest.mark.asyncio -async def test_track_download_progress_no_content_length(): - mock_response = AsyncMock(spec=aiohttp.ClientResponse) - mock_response.headers = {} # No Content-Length header - mock_response.content.iter_chunked.return_value = AsyncIteratorMock([b'a' * 500, b'b' * 500]) - - mock_callback = AsyncMock() - mock_open = MagicMock(return_value=MagicMock()) - - with patch('builtins.open', mock_open): - result = await track_download_progress( - mock_response, '/mock/path/model.sft', 'model.sft', - mock_callback, 'models/model.sft', interval=0.1 - ) - - assert result.status == "completed" - # Check that progress was reported even without knowing the total size - mock_callback.assert_any_call( - 'models/model.sft', - DownloadModelStatus(DownloadStatusType.IN_PROGRESS, 0, "Downloading model.sft", already_existed=False) - ) - -@pytest.mark.asyncio -async def test_track_download_progress_interval(): - mock_response = AsyncMock(spec=aiohttp.ClientResponse) - mock_response.headers = {'Content-Length': '1000'} - mock_response.content.iter_chunked.return_value = AsyncIteratorMock([b'a' * 100] * 10) - - mock_callback = AsyncMock() - mock_open = MagicMock(return_value=MagicMock()) - - # Create a mock time function that returns incremental float values - mock_time = MagicMock() - mock_time.side_effect = [i * 0.5 for i in range(30)] # This should be enough for 10 chunks - - with patch('builtins.open', mock_open), \ - patch('time.time', mock_time): - await track_download_progress( - mock_response, '/mock/path/model.sft', 'model.sft', - mock_callback, 'models/model.sft', interval=1.0 - ) - - # Print out the actual call count and the arguments of each call for debugging - print(f"mock_callback was called {mock_callback.call_count} times") - for i, call in enumerate(mock_callback.call_args_list): - args, kwargs = call - print(f"Call {i + 1}: {args[1].status}, Progress: {args[1].progress_percentage:.2f}%") - - # Assert that progress was updated at least 3 times (start, at least one interval, and end) - assert mock_callback.call_count >= 3, f"Expected at least 3 calls, but got {mock_callback.call_count}" - - # Verify the first and last calls - first_call = mock_callback.call_args_list[0] - assert first_call[0][1].status == "in_progress" - # Allow for some initial progress, but it should be less than 50% - assert 0 <= first_call[0][1].progress_percentage < 50, f"First call progress was {first_call[0][1].progress_percentage}%" - - last_call = mock_callback.call_args_list[-1] - assert last_call[0][1].status == "completed" - assert last_call[0][1].progress_percentage == 100 - -def test_valid_subdirectory(): - assert validate_model_subdirectory("valid-model123") is True - -def test_subdirectory_too_long(): - assert validate_model_subdirectory("a" * 51) is False - -def test_subdirectory_with_double_dots(): - assert validate_model_subdirectory("model/../unsafe") is False - -def test_subdirectory_with_slash(): - assert validate_model_subdirectory("model/unsafe") is False - -def test_subdirectory_with_special_characters(): - assert validate_model_subdirectory("model@unsafe") is False - -def test_subdirectory_with_underscore_and_dash(): - assert validate_model_subdirectory("valid_model-name") is True - -def test_empty_subdirectory(): - assert validate_model_subdirectory("") is False - -@pytest.mark.parametrize("filename, expected", [ - ("valid_model.safetensors", True), - ("valid_model.sft", True), - ("valid model.safetensors", True), # Test with space - ("UPPERCASE_MODEL.SAFETENSORS", True), - ("model_with.multiple.dots.pt", False), - ("", False), # Empty string - ("../../../etc/passwd", False), # Path traversal attempt - ("/etc/passwd", False), # Absolute path - ("\\windows\\system32\\config\\sam", False), # Windows path - (".hidden_file.pt", False), # Hidden file - ("invalid.ckpt", False), # Invalid character - ("invalid?.ckpt", False), # Another invalid character - ("very" * 100 + ".safetensors", False), # Too long filename - ("\nmodel_with_newline.pt", False), # Newline character - ("model_with_emoji😊.pt", False), # Emoji in filename -]) -def test_validate_filename(filename, expected): - assert validate_filename(filename) == expected diff --git a/tests-unit/prompt_server_test/user_manager_test.py b/tests-unit/prompt_server_test/user_manager_test.py new file mode 100644 index 000000000..7e523cbf4 --- /dev/null +++ b/tests-unit/prompt_server_test/user_manager_test.py @@ -0,0 +1,231 @@ +import pytest +import os +from aiohttp import web +from app.user_manager import UserManager +from unittest.mock import patch + +pytestmark = ( + pytest.mark.asyncio +) # This applies the asyncio mark to all test functions in the module + + +@pytest.fixture +def user_manager(tmp_path): + um = UserManager() + um.get_request_user_filepath = lambda req, file, **kwargs: os.path.join( + tmp_path, file + ) if file else tmp_path + return um + + +@pytest.fixture +def app(user_manager): + app = web.Application() + routes = web.RouteTableDef() + user_manager.add_routes(routes) + app.add_routes(routes) + return app + + +async def test_listuserdata_empty_directory(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir") + assert resp.status == 404 + + +async def test_listuserdata_with_files(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir") + assert resp.status == 200 + assert await resp.json() == ["file1.txt"] + + +async def test_listuserdata_recursive(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + with open(tmp_path / "test_dir" / "subdir" / "file2.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true") + assert resp.status == 200 + assert set(await resp.json()) == {"file1.txt", "subdir/file2.txt"} + + +async def test_listuserdata_full_info(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&full_info=true") + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert result[0]["path"] == "file1.txt" + assert "size" in result[0] + assert "modified" in result[0] + + +async def test_listuserdata_split_path(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true&split=true") + assert resp.status == 200 + assert await resp.json() == [["subdir/file1.txt", "subdir", "file1.txt"]] + + +async def test_listuserdata_invalid_directory(aiohttp_client, app): + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=") + assert resp.status == 400 + + +async def test_listuserdata_normalized_separator(aiohttp_client, app, tmp_path): + os_sep = "\\" + with patch("os.sep", os_sep): + with patch("os.path.sep", os_sep): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true") + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert "/" in result[0] # Ensure forward slash is used + assert "\\" not in result[0] # Ensure backslash is not present + assert result[0] == "subdir/file1.txt" + + # Test with full_info + resp = await client.get( + "/userdata?dir=test_dir&recurse=true&full_info=true" + ) + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert "/" in result[0]["path"] # Ensure forward slash is used + assert "\\" not in result[0]["path"] # Ensure backslash is not present + assert result[0]["path"] == "subdir/file1.txt" + + +async def test_post_userdata_new_file(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + content = b"test content" + resp = await client.post("/userdata/test.txt", data=content) + + assert resp.status == 200 + assert await resp.text() == '"test.txt"' + + # Verify file was created with correct content + with open(tmp_path / "test.txt", "rb") as f: + assert f.read() == content + + +async def test_post_userdata_overwrite_existing(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "test.txt", "w") as f: + f.write("initial content") + + client = await aiohttp_client(app) + new_content = b"updated content" + resp = await client.post("/userdata/test.txt", data=new_content) + + assert resp.status == 200 + assert await resp.text() == '"test.txt"' + + # Verify file was overwritten + with open(tmp_path / "test.txt", "rb") as f: + assert f.read() == new_content + + +async def test_post_userdata_no_overwrite(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "test.txt", "w") as f: + f.write("initial content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/test.txt?overwrite=false", data=b"new content") + + assert resp.status == 409 + + # Verify original content unchanged + with open(tmp_path / "test.txt", "r") as f: + assert f.read() == "initial content" + + +async def test_post_userdata_full_info(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + content = b"test content" + resp = await client.post("/userdata/test.txt?full_info=true", data=content) + + assert resp.status == 200 + result = await resp.json() + assert result["path"] == "test.txt" + assert result["size"] == len(content) + assert "modified" in result + + +async def test_move_userdata(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "source.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt") + + assert resp.status == 200 + assert await resp.text() == '"dest.txt"' + + # Verify file was moved + assert not os.path.exists(tmp_path / "source.txt") + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "test content" + + +async def test_move_userdata_no_overwrite(aiohttp_client, app, tmp_path): + # Create source and destination files + with open(tmp_path / "source.txt", "w") as f: + f.write("source content") + with open(tmp_path / "dest.txt", "w") as f: + f.write("destination content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt?overwrite=false") + + assert resp.status == 409 + + # Verify files remain unchanged + with open(tmp_path / "source.txt", "r") as f: + assert f.read() == "source content" + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "destination content" + + +async def test_move_userdata_full_info(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "source.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt?full_info=true") + + assert resp.status == 200 + result = await resp.json() + assert result["path"] == "dest.txt" + assert result["size"] == len("test content") + assert "modified" in result + + # Verify file was moved + assert not os.path.exists(tmp_path / "source.txt") + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "test content" diff --git a/tests-unit/server/routes/internal_routes_test.py b/tests-unit/server/routes/internal_routes_test.py index 2d2b43bd6..4fe544249 100644 --- a/tests-unit/server/routes/internal_routes_test.py +++ b/tests-unit/server/routes/internal_routes_test.py @@ -8,7 +8,7 @@ from folder_paths import models_dir, user_directory, output_directory @pytest.fixture def internal_routes(): - return InternalRoutes() + return InternalRoutes(None) @pytest.fixture def aiohttp_client_factory(aiohttp_client, internal_routes): @@ -102,7 +102,7 @@ async def test_file_service_initialization(): # Create a mock instance mock_file_service_instance = MagicMock(spec=FileService) MockFileService.return_value = mock_file_service_instance - internal_routes = InternalRoutes() + internal_routes = InternalRoutes(None) # Check if FileService was initialized with the correct parameters MockFileService.assert_called_once_with({ @@ -112,4 +112,4 @@ async def test_file_service_initialization(): }) # Verify that the file_service attribute of InternalRoutes is set - assert internal_routes.file_service == mock_file_service_instance \ No newline at end of file + assert internal_routes.file_service == mock_file_service_instance diff --git a/tests-unit/utils/extra_config_test.py b/tests-unit/utils/extra_config_test.py new file mode 100644 index 000000000..ef772d40b --- /dev/null +++ b/tests-unit/utils/extra_config_test.py @@ -0,0 +1,126 @@ +import pytest +import yaml +import os +from unittest.mock import Mock, patch, mock_open + +from utils.extra_config import load_extra_path_config +import folder_paths + +@pytest.fixture +def mock_yaml_content(): + return { + 'test_config': { + 'base_path': '~/App/', + 'checkpoints': 'subfolder1', + } + } + +@pytest.fixture +def mock_expanded_home(): + return '/home/user' + +@pytest.fixture +def yaml_config_with_appdata(): + return """ + test_config: + base_path: '%APPDATA%/ComfyUI' + checkpoints: 'models/checkpoints' + """ + +@pytest.fixture +def mock_yaml_content_appdata(yaml_config_with_appdata): + return yaml.safe_load(yaml_config_with_appdata) + +@pytest.fixture +def mock_expandvars_appdata(): + mock = Mock() + mock.side_effect = lambda path: path.replace('%APPDATA%', 'C:/Users/TestUser/AppData/Roaming') + return mock + +@pytest.fixture +def mock_add_model_folder_path(): + return Mock() + +@pytest.fixture +def mock_expanduser(mock_expanded_home): + def _expanduser(path): + if path.startswith('~/'): + return os.path.join(mock_expanded_home, path[2:]) + return path + return _expanduser + +@pytest.fixture +def mock_yaml_safe_load(mock_yaml_content): + return Mock(return_value=mock_yaml_content) + +@patch('builtins.open', new_callable=mock_open, read_data="dummy file content") +def test_load_extra_model_paths_expands_userpath( + mock_file, + monkeypatch, + mock_add_model_folder_path, + mock_expanduser, + mock_yaml_safe_load, + mock_expanded_home +): + # Attach mocks used by load_extra_path_config + monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) + monkeypatch.setattr(os.path, 'expanduser', mock_expanduser) + monkeypatch.setattr(yaml, 'safe_load', mock_yaml_safe_load) + + dummy_yaml_file_name = 'dummy_path.yaml' + load_extra_path_config(dummy_yaml_file_name) + + expected_calls = [ + ('checkpoints', os.path.join(mock_expanded_home, 'App', 'subfolder1'), False), + ] + + assert mock_add_model_folder_path.call_count == len(expected_calls) + + # Check if add_model_folder_path was called with the correct arguments + for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): + assert actual_call.args[0] == expected_call[0] + assert os.path.normpath(actual_call.args[1]) == os.path.normpath(expected_call[1]) # Normalize and check the path to check on multiple OS. + assert actual_call.args[2] == expected_call[2] + + # Check if yaml.safe_load was called + mock_yaml_safe_load.assert_called_once() + + # Check if open was called with the correct file path + mock_file.assert_called_once_with(dummy_yaml_file_name, 'r') + +@patch('builtins.open', new_callable=mock_open) +def test_load_extra_model_paths_expands_appdata( + mock_file, + monkeypatch, + mock_add_model_folder_path, + mock_expandvars_appdata, + yaml_config_with_appdata, + mock_yaml_content_appdata +): + # Set the mock_file to return yaml with appdata as a variable + mock_file.return_value.read.return_value = yaml_config_with_appdata + + # Attach mocks + monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) + monkeypatch.setattr(os.path, 'expandvars', mock_expandvars_appdata) + monkeypatch.setattr(yaml, 'safe_load', Mock(return_value=mock_yaml_content_appdata)) + + # Mock expanduser to do nothing (since we're not testing it here) + monkeypatch.setattr(os.path, 'expanduser', lambda x: x) + + dummy_yaml_file_name = 'dummy_path.yaml' + load_extra_path_config(dummy_yaml_file_name) + + expected_base_path = 'C:/Users/TestUser/AppData/Roaming/ComfyUI' + expected_calls = [ + ('checkpoints', os.path.join(expected_base_path, 'models/checkpoints'), False), + ] + + assert mock_add_model_folder_path.call_count == len(expected_calls) + + # Check the base path variable was expanded + for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): + assert actual_call.args == expected_call + + # Verify that expandvars was called + assert mock_expandvars_appdata.called diff --git a/tests/inference/test_execution.py b/tests/inference/test_execution.py index c7daddeb6..3909ca68d 100644 --- a/tests/inference/test_execution.py +++ b/tests/inference/test_execution.py @@ -496,3 +496,29 @@ class TestExecution: assert len(images) == 1, "Should have 1 image" assert numpy.array(images[0]).min() == 63 and numpy.array(images[0]).max() == 63, "Image should have value 0.25" assert not result.did_run(test_node), "The execution should have been cached" + + # This tests that nodes with OUTPUT_IS_LIST function correctly when they receive an ExecutionBlocker + # as input. We also test that when that list (containing an ExecutionBlocker) is passed to a node, + # only that one entry in the list is blocked. + def test_execution_block_list_output(self, client: ComfyClient, builder: GraphBuilder): + g = builder + image1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + image2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + image3 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + image_list = g.node("TestMakeListNode", value1=image1.out(0), value2=image2.out(0), value3=image3.out(0)) + int1 = g.node("StubInt", value=1) + int2 = g.node("StubInt", value=2) + int3 = g.node("StubInt", value=3) + int_list = g.node("TestMakeListNode", value1=int1.out(0), value2=int2.out(0), value3=int3.out(0)) + compare = g.node("TestIntConditions", a=int_list.out(0), b=2, operation="==") + blocker = g.node("TestExecutionBlocker", input=image_list.out(0), block=compare.out(0), verbose=False) + + list_output = g.node("TestMakeListNode", value1=blocker.out(0)) + output = g.node("PreviewImage", images=list_output.out(0)) + + result = client.run(g) + assert result.did_run(output), "The execution should have run" + images = result.get_images(output) + assert len(images) == 2, "Should have 2 images" + assert numpy.array(images[0]).min() == 0 and numpy.array(images[0]).max() == 0, "First image should be black" + assert numpy.array(images[1]).min() == 0 and numpy.array(images[1]).max() == 0, "Second image should also be black" diff --git a/tests/inference/test_inference.py b/tests/inference/test_inference.py index 2e11778f2..1db3c06fb 100644 --- a/tests/inference/test_inference.py +++ b/tests/inference/test_inference.py @@ -1,6 +1,5 @@ from copy import deepcopy from io import BytesIO -from urllib import request import numpy import os from PIL import Image diff --git a/tests/inference/testing_nodes/testing-pack/util.py b/tests/inference/testing_nodes/testing-pack/util.py index ca116c16e..9c0e04dcd 100644 --- a/tests/inference/testing_nodes/testing-pack/util.py +++ b/tests/inference/testing_nodes/testing-pack/util.py @@ -259,7 +259,7 @@ class TestForLoopOpen: graph = GraphBuilder() if "initial_value0" in kwargs: remaining = kwargs["initial_value0"] - while_open = graph.node("TestWhileLoopOpen", condition=remaining, initial_value0=remaining, **{(f"initial_value{i}"): kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)}) + graph.node("TestWhileLoopOpen", condition=remaining, initial_value0=remaining, **{(f"initial_value{i}"): kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)}) outputs = [kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)] return { "result": tuple(["stub", remaining] + outputs), diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/utils/extra_config.py b/utils/extra_config.py new file mode 100644 index 000000000..415db0427 --- /dev/null +++ b/utils/extra_config.py @@ -0,0 +1,31 @@ +import os +import yaml +import folder_paths +import logging + +def load_extra_path_config(yaml_path): + with open(yaml_path, 'r') as stream: + config = yaml.safe_load(stream) + for c in config: + conf = config[c] + if conf is None: + continue + base_path = None + if "base_path" in conf: + base_path = conf.pop("base_path") + base_path = os.path.expandvars(os.path.expanduser(base_path)) + is_default = False + if "is_default" in conf: + is_default = conf.pop("is_default") + for x in conf: + for y in conf[x].split("\n"): + if len(y) == 0: + continue + full_path = y + if base_path is not None: + full_path = os.path.join(base_path, full_path) + elif not os.path.isabs(full_path): + yaml_dir = os.path.dirname(os.path.abspath(yaml_path)) + full_path = os.path.abspath(os.path.join(yaml_dir, y)) + logging.info("Adding extra search path {} {}".format(x, full_path)) + folder_paths.add_model_folder_path(x, full_path, is_default) diff --git a/web/assets/CREDIT.txt b/web/assets/CREDIT.txt new file mode 100644 index 000000000..b3a9bc906 --- /dev/null +++ b/web/assets/CREDIT.txt @@ -0,0 +1 @@ +Thanks to OpenArt (https://openart.ai) for providing the sorted-custom-node-map data, captured in September 2024. \ No newline at end of file diff --git a/web/assets/DownloadGitView-DyhrHmlh.js b/web/assets/DownloadGitView-DyhrHmlh.js new file mode 100644 index 000000000..588de776c --- /dev/null +++ b/web/assets/DownloadGitView-DyhrHmlh.js @@ -0,0 +1,58 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, bU as useRouter } from "./index-CSl7lfOs.js"; +const _hoisted_1 = { class: "font-sans w-screen h-screen mx-0 grid place-items-center justify-center items-center text-neutral-900 bg-neutral-300 pointer-events-auto" }; +const _hoisted_2 = { class: "col-start-1 h-screen row-start-1 place-content-center mx-auto overflow-y-auto" }; +const _hoisted_3 = { class: "max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding" }; +const _hoisted_4 = { class: "mt-24 text-4xl font-bold text-red-500" }; +const _hoisted_5 = { class: "space-y-4" }; +const _hoisted_6 = { class: "text-xl" }; +const _hoisted_7 = { class: "text-xl" }; +const _hoisted_8 = { class: "text-m" }; +const _hoisted_9 = { class: "flex gap-4 flex-row-reverse" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "DownloadGitView", + setup(__props) { + const openGitDownloads = /* @__PURE__ */ __name(() => { + window.open("https://git-scm.com/downloads/", "_blank"); + }, "openGitDownloads"); + const skipGit = /* @__PURE__ */ __name(() => { + console.warn("pushing"); + const router = useRouter(); + router.push("install"); + }, "skipGit"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.title")), 1), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.message")), 1), + createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("downloadGit.instructions")), 1), + createBaseVNode("p", _hoisted_8, toDisplayString(_ctx.$t("downloadGit.warning")), 1) + ]), + createBaseVNode("div", _hoisted_9, [ + createVNode(unref(script), { + label: _ctx.$t("downloadGit.gitWebsite"), + icon: "pi pi-external-link", + "icon-pos": "right", + onClick: openGitDownloads, + severity: "primary" + }, null, 8, ["label"]), + createVNode(unref(script), { + label: _ctx.$t("downloadGit.skip"), + icon: "pi pi-exclamation-triangle", + onClick: skipGit, + severity: "secondary" + }, null, 8, ["label"]) + ]) + ]) + ]) + ]); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=DownloadGitView-DyhrHmlh.js.map diff --git a/web/assets/DownloadGitView-DyhrHmlh.js.map b/web/assets/DownloadGitView-DyhrHmlh.js.map new file mode 100644 index 000000000..7141f55bf --- /dev/null +++ b/web/assets/DownloadGitView-DyhrHmlh.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DownloadGitView-DyhrHmlh.js","sources":["../../src/views/DownloadGitView.vue"],"sourcesContent":["\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqDA,UAAM,mBAAmB,6BAAM;AACtB,aAAA,KAAK,kCAAkC,QAAQ;AAAA,IAAA,GAD/B;AAIzB,UAAM,UAAU,6BAAM;AACpB,cAAQ,KAAK,SAAS;AACtB,YAAM,SAAS;AACf,aAAO,KAAK,SAAS;AAAA,IAAA,GAHP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/ExtensionPanel-DgaZovwi.js b/web/assets/ExtensionPanel-DgaZovwi.js new file mode 100644 index 000000000..1942abf39 --- /dev/null +++ b/web/assets/ExtensionPanel-DgaZovwi.js @@ -0,0 +1,117 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, r as ref, ck as FilterMatchMode, co as useExtensionStore, u as useSettingStore, o as onMounted, q as computed, f as openBlock, x as createBlock, y as withCtx, h as createVNode, cl as SearchBox, z as unref, bW as script, A as createBaseVNode, g as createElementBlock, Q as renderList, a8 as toDisplayString, ay as createTextVNode, P as Fragment, D as script$1, i as createCommentVNode, c5 as script$3, cm as _sfc_main$1 } from "./index-CSl7lfOs.js"; +import { s as script$2, a as script$4 } from "./index-CgmI-OoW.js"; +import "./index-aSkd2KAK.js"; +const _hoisted_1 = { class: "flex justify-end" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ExtensionPanel", + setup(__props) { + const filters = ref({ + global: { value: "", matchMode: FilterMatchMode.CONTAINS } + }); + const extensionStore = useExtensionStore(); + const settingStore = useSettingStore(); + const editingEnabledExtensions = ref({}); + onMounted(() => { + extensionStore.extensions.forEach((ext) => { + editingEnabledExtensions.value[ext.name] = extensionStore.isExtensionEnabled(ext.name); + }); + }); + const changedExtensions = computed(() => { + return extensionStore.extensions.filter( + (ext) => editingEnabledExtensions.value[ext.name] !== extensionStore.isExtensionEnabled(ext.name) + ); + }); + const hasChanges = computed(() => { + return changedExtensions.value.length > 0; + }); + const updateExtensionStatus = /* @__PURE__ */ __name(() => { + const editingDisabledExtensionNames = Object.entries( + editingEnabledExtensions.value + ).filter(([_, enabled]) => !enabled).map(([name]) => name); + settingStore.set("Comfy.Extension.Disabled", [ + ...extensionStore.inactiveDisabledExtensionNames, + ...editingDisabledExtensionNames + ]); + }, "updateExtensionStatus"); + const applyChanges = /* @__PURE__ */ __name(() => { + window.location.reload(); + }, "applyChanges"); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { + value: "Extension", + class: "extension-panel" + }, { + header: withCtx(() => [ + createVNode(SearchBox, { + modelValue: filters.value["global"].value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event), + placeholder: _ctx.$t("g.searchExtensions") + "..." + }, null, 8, ["modelValue", "placeholder"]), + hasChanges.value ? (openBlock(), createBlock(unref(script), { + key: 0, + severity: "info", + "pt:text": "w-full" + }, { + default: withCtx(() => [ + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(changedExtensions.value, (ext) => { + return openBlock(), createElementBlock("li", { + key: ext.name + }, [ + createBaseVNode("span", null, toDisplayString(unref(extensionStore).isExtensionEnabled(ext.name) ? "[-]" : "[+]"), 1), + createTextVNode(" " + toDisplayString(ext.name), 1) + ]); + }), 128)) + ]), + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script$1), { + label: _ctx.$t("g.reloadToApplyChanges"), + onClick: applyChanges, + outlined: "", + severity: "danger" + }, null, 8, ["label"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + default: withCtx(() => [ + createVNode(unref(script$4), { + value: unref(extensionStore).extensions, + stripedRows: "", + size: "small", + filters: filters.value + }, { + default: withCtx(() => [ + createVNode(unref(script$2), { + field: "name", + header: _ctx.$t("g.extensionName"), + sortable: "" + }, null, 8, ["header"]), + createVNode(unref(script$2), { pt: { + bodyCell: "flex items-center justify-end" + } }, { + body: withCtx((slotProps) => [ + createVNode(unref(script$3), { + modelValue: editingEnabledExtensions.value[slotProps.data.name], + "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"), + onChange: updateExtensionStatus + }, null, 8, ["modelValue", "onUpdate:modelValue"]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["value", "filters"]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=ExtensionPanel-DgaZovwi.js.map diff --git a/web/assets/ExtensionPanel-DgaZovwi.js.map b/web/assets/ExtensionPanel-DgaZovwi.js.map new file mode 100644 index 000000000..cd8a658ad --- /dev/null +++ b/web/assets/ExtensionPanel-DgaZovwi.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ExtensionPanel-DgaZovwi.js","sources":["../../src/components/dialog/content/setting/ExtensionPanel.vue"],"sourcesContent":["\n\n\n"],"names":[],"mappings":";;;;;;;;;AA8DA,UAAM,UAAU,IAAI;AAAA,MAClB,QAAQ,EAAE,OAAO,IAAI,WAAW,gBAAgB,SAAS;AAAA,IAAA,CAC1D;AAED,UAAM,iBAAiB;AACvB,UAAM,eAAe;AAEf,UAAA,2BAA2B,IAA6B,CAAA,CAAE;AAEhE,cAAU,MAAM;AACC,qBAAA,WAAW,QAAQ,CAAC,QAAQ;AACzC,iCAAyB,MAAM,IAAI,IAAI,IACrC,eAAe,mBAAmB,IAAI,IAAI;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAEK,UAAA,oBAAoB,SAAS,MAAM;AACvC,aAAO,eAAe,WAAW;AAAA,QAC/B,CAAC,QACC,yBAAyB,MAAM,IAAI,IAAI,MACvC,eAAe,mBAAmB,IAAI,IAAI;AAAA,MAAA;AAAA,IAC9C,CACD;AAEK,UAAA,aAAa,SAAS,MAAM;AACzB,aAAA,kBAAkB,MAAM,SAAS;AAAA,IAAA,CACzC;AAED,UAAM,wBAAwB,6BAAM;AAClC,YAAM,gCAAgC,OAAO;AAAA,QAC3C,yBAAyB;AAAA,MAExB,EAAA,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,EACjC,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AAEvB,mBAAa,IAAI,4BAA4B;AAAA,QAC3C,GAAG,eAAe;AAAA,QAClB,GAAG;AAAA,MAAA,CACJ;AAAA,IAAA,GAV2B;AAa9B,UAAM,eAAe,6BAAM;AAEzB,aAAO,SAAS;IAAO,GAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/GraphView-B3TpSwhZ.css b/web/assets/GraphView-B3TpSwhZ.css new file mode 100644 index 000000000..34ba43b19 --- /dev/null +++ b/web/assets/GraphView-B3TpSwhZ.css @@ -0,0 +1,269 @@ + +.group-title-editor.node-title-editor[data-v-8a100d5a] { + z-index: 9999; + padding: 0.25rem; +} +[data-v-8a100d5a] .editable-text { + width: 100%; + height: 100%; +} +[data-v-8a100d5a] .editable-text input { + width: 100%; + height: 100%; + /* Override the default font size */ + font-size: inherit; +} + +.side-bar-button-icon { + font-size: var(--sidebar-icon-size) !important; +} +.side-bar-button-selected .side-bar-button-icon { + font-size: var(--sidebar-icon-size) !important; + font-weight: bold; +} + +.side-bar-button[data-v-caa3ee9c] { + width: var(--sidebar-width); + height: var(--sidebar-width); + border-radius: 0; +} +.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-caa3ee9c], +.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-caa3ee9c]:hover { + border-left: 4px solid var(--p-button-text-primary-color); +} +.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-caa3ee9c], +.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-caa3ee9c]:hover { + border-right: 4px solid var(--p-button-text-primary-color); +} + +:root { + --sidebar-width: 64px; + --sidebar-icon-size: 1.5rem; +} +:root .small-sidebar { + --sidebar-width: 40px; + --sidebar-icon-size: 1rem; +} + +.side-tool-bar-container[data-v-7851c166] { + display: flex; + flex-direction: column; + align-items: center; + + pointer-events: auto; + + width: var(--sidebar-width); + height: 100%; + + background-color: var(--comfy-menu-secondary-bg); + color: var(--fg-color); + box-shadow: var(--bar-shadow); +} +.side-tool-bar-end[data-v-7851c166] { + align-self: flex-end; + margin-top: auto; +} + +[data-v-7c3279c1] .p-splitter-gutter { + pointer-events: auto; +} +[data-v-7c3279c1] .p-splitter-gutter:hover,[data-v-7c3279c1] .p-splitter-gutter[data-p-gutter-resizing='true'] { + transition: background-color 0.2s ease 300ms; + background-color: var(--p-primary-color); +} +.side-bar-panel[data-v-7c3279c1] { + background-color: var(--bg-color); + pointer-events: auto; +} +.bottom-panel[data-v-7c3279c1] { + background-color: var(--bg-color); + pointer-events: auto; +} +.splitter-overlay[data-v-7c3279c1] { + pointer-events: none; + border-style: none; + background-color: transparent; +} +.splitter-overlay-root[data-v-7c3279c1] { + position: absolute; + top: 0px; + left: 0px; + height: 100%; + width: 100%; + + /* Set it the same as the ComfyUI menu */ + /* Note: Lite-graph DOM widgets have the same z-index as the node id, so + 999 should be sufficient to make sure splitter overlays on node's DOM + widgets */ + z-index: 999; +} + +[data-v-d7cc0bce] .highlight { + background-color: var(--p-primary-color); + color: var(--p-primary-contrast-color); + font-weight: bold; + border-radius: 0.25rem; + padding: 0rem 0.125rem; + margin: -0.125rem 0.125rem; +} + +.invisible-dialog-root { + width: 60%; + min-width: 24rem; + max-width: 48rem; + border: 0 !important; + background-color: transparent !important; + margin-top: 25vh; + margin-left: 400px; +} +@media all and (max-width: 768px) { +.invisible-dialog-root { + margin-left: 0px; +} +} +.node-search-box-dialog-mask { + align-items: flex-start !important; +} + +.node-tooltip[data-v-9ecc8adc] { + background: var(--comfy-input-bg); + border-radius: 5px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + color: var(--input-text); + font-family: sans-serif; + left: 0; + max-width: 30vw; + padding: 4px 8px; + position: absolute; + top: 0; + transform: translate(5px, calc(-100% - 5px)); + white-space: pre-wrap; + z-index: 99999; +} + +.p-buttongroup-vertical[data-v-94481f39] { + display: flex; + flex-direction: column; + border-radius: var(--p-button-border-radius); + overflow: hidden; + border: 1px solid var(--p-panel-border-color); +} +.p-buttongroup-vertical .p-button[data-v-94481f39] { + margin: 0; + border-radius: 0; +} + +.comfy-menu-hamburger[data-v-962c4073] { + pointer-events: auto; + position: fixed; + z-index: 9999; +} + +[data-v-4cb762cb] .p-togglebutton::before { + display: none +} +[data-v-4cb762cb] .p-togglebutton { + position: relative; + flex-shrink: 0; + border-radius: 0px; + background-color: transparent; + padding: 0px +} +[data-v-4cb762cb] .p-togglebutton.p-togglebutton-checked { + border-bottom-width: 2px; + border-bottom-color: var(--p-button-text-primary-color) +} +[data-v-4cb762cb] .p-togglebutton-checked .close-button,[data-v-4cb762cb] .p-togglebutton:hover .close-button { + visibility: visible +} +.status-indicator[data-v-4cb762cb] { + position: absolute; + font-weight: 700; + font-size: 1.5rem; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) +} +[data-v-4cb762cb] .p-togglebutton:hover .status-indicator { + display: none +} +[data-v-4cb762cb] .p-togglebutton .close-button { + visibility: hidden +} + +.top-menubar[data-v-a2b12676] .p-menubar-item-link svg { + display: none; +} +[data-v-a2b12676] .p-menubar-submenu.dropdown-direction-up { + top: auto; + bottom: 100%; + flex-direction: column-reverse; +} +.keybinding-tag[data-v-a2b12676] { + background: var(--p-content-hover-background); + border-color: var(--p-content-border-color); + border-style: solid; +} + +[data-v-713442be] .p-inputtext { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.comfyui-queue-button[data-v-d3897845] .p-splitbutton-dropdown { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.actionbar[data-v-542a7001] { + pointer-events: all; + position: fixed; + z-index: 1000; +} +.actionbar.is-docked[data-v-542a7001] { + position: static; + border-style: none; + background-color: transparent; + padding: 0px; +} +.actionbar.is-dragging[data-v-542a7001] { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +[data-v-542a7001] .p-panel-content { + padding: 0.25rem; +} +[data-v-542a7001] .p-panel-header { + display: none; +} + +.comfyui-menu[data-v-d792da31] { + width: 100vw; + background: var(--comfy-menu-bg); + color: var(--fg-color); + box-shadow: var(--bar-shadow); + font-family: Arial, Helvetica, sans-serif; + font-size: 0.8em; + box-sizing: border-box; + z-index: 1000; + order: 0; + grid-column: 1/-1; + max-height: 90vh; +} +.comfyui-menu.dropzone[data-v-d792da31] { + background: var(--p-highlight-background); +} +.comfyui-menu.dropzone-active[data-v-d792da31] { + background: var(--p-highlight-background-focus); +} +[data-v-d792da31] .p-menubar-item-label { + line-height: revert; +} +.comfyui-logo[data-v-d792da31] { + font-size: 1.2em; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: default; +} diff --git a/web/assets/GraphView-DMP_lefG.js b/web/assets/GraphView-DMP_lefG.js new file mode 100644 index 000000000..dae397de9 --- /dev/null +++ b/web/assets/GraphView-DMP_lefG.js @@ -0,0 +1,9274 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineStore, s as shallowRef, a as defineComponent, u as useSettingStore, r as ref, w as watch, L as LGraphGroup, b as app, c as LGraphNode, o as onMounted, e as onUnmounted, f as openBlock, g as createElementBlock, h as createVNode, E as EditableText, n as normalizeStyle, i as createCommentVNode, j as LiteGraph, _ as _export_sfc, B as BaseStyle, k as script$e, l as resolveComponent, m as mergeProps, p as renderSlot, q as computed, t as resolveDirective, v as withDirectives, x as createBlock, y as withCtx, z as unref, A as createBaseVNode, C as normalizeClass, D as script$f, F as useCommandStore, G as useDialogStore, S as SettingDialogHeader, H as SettingDialogContent, I as useI18n, J as useUserStore, K as onBeforeUnmount, M as resolveDynamicComponent, N as useWorkspaceStore, O as useKeybindingStore, P as Fragment, Q as renderList, T as Teleport, R as pushScopeId, U as popScopeId, V as script$g, W as getWidth, X as findSingle, Y as getOuterHeight, Z as getOffset, $ as getOuterWidth, a0 as getHeight, a1 as script$h, a2 as script$i, a3 as Ripple, a4 as getAttribute, a5 as focus, a6 as equals, a7 as useBottomPanelStore, a8 as toDisplayString, a9 as script$j, aa as getVNodeProp, ab as isArray, ac as useSidebarTabStore, ad as vShow, ae as isNotEmpty, af as UniqueComponentId, ag as ZIndex, ah as resolveFieldData, ai as OverlayEventBus, aj as isEmpty, ak as addStyle, al as relativePosition, am as absolutePosition, an as ConnectedOverlayScrollHandler, ao as isTouchDevice, ap as findLastIndex, aq as script$k, ar as script$l, as as script$m, at as script$n, au as script$o, av as script$p, aw as Transition, ax as createSlots, ay as createTextVNode, az as useNodeFrequencyStore, aA as useNodeBookmarkStore, aB as highlightQuery, aC as script$q, aD as formatNumberWithSuffix, aE as NodeSourceType, aF as useNodeDefStore, aG as NodePreview, aH as NodeSearchFilter, aI as script$r, aJ as SearchFilterChip, aK as storeToRefs, aL as watchEffect, aM as useEventListener, aN as isRef, aO as toRaw, aP as LinkReleaseTriggerAction, aQ as nextTick, aR as st, aS as normalizeI18nKey, aT as getColorPalette, aU as BadgePosition, aV as LGraphBadge, aW as _, aX as defaultColorPalette, aY as NodeBadgeMode, aZ as markRaw, a_ as useModelToNodeStore, a$ as CanvasPointer, b0 as useWorkflowStore, b1 as setStorageValue, b2 as api, b3 as usePragmaticDroppable, b4 as ComfyNodeDefImpl, b5 as ComfyModelDef, b6 as LGraph, b7 as LLink, b8 as DragAndScale, b9 as LGraphCanvas, ba as ContextMenu, bb as ChangeTracker, bc as workflowService, bd as showNativeMenu, be as script$s, bf as script$t, bg as script$u, bh as script$v, bi as script$w, bj as normalizeProps, bk as ToastEventBus, bl as setAttribute, bm as TransitionGroup, bn as useToast, bo as useToastStore, bp as useExecutionStore, bq as useTitle, br as withModifiers, bs as script$x, bt as script$y, bu as resolve, bv as script$z, bw as script$A, bx as isPrintableCharacter, by as guardReactiveProps, bz as useMenuItemStore, bA as script$D, bB as nestedPosition, bC as useQueueSettingsStore, bD as script$E, bE as useQueuePendingTaskCountStore, bF as useLocalStorage, bG as useDraggable, bH as watchDebounced, bI as inject, bJ as useElementBounding, bK as lodashExports, bL as useEventBus, bM as provide, bN as script$F, bO as LGraphEventMode, bP as useQueueStore, bQ as showTemplateWorkflowsDialog, bR as showSettingsDialog, bS as i18n, bT as useModelStore } from "./index-CSl7lfOs.js"; +import { s as script$B, a as script$C } from "./index-aSkd2KAK.js"; +import { u as useServerConfigStore } from "./serverConfigStore-D4vD2qBB.js"; +const useTitleEditorStore = defineStore("titleEditor", () => { + const titleEditorTarget = shallowRef(null); + return { + titleEditorTarget + }; +}); +const useCanvasStore = defineStore("canvas", () => { + const canvas = shallowRef(null); + return { + canvas + }; +}); +const _sfc_main$s = /* @__PURE__ */ defineComponent({ + __name: "TitleEditor", + setup(__props) { + const settingStore = useSettingStore(); + const showInput = ref(false); + const editedTitle = ref(""); + const inputStyle = ref({ + position: "fixed", + left: "0px", + top: "0px", + width: "200px", + height: "20px", + fontSize: "12px" + }); + const titleEditorStore = useTitleEditorStore(); + const canvasStore = useCanvasStore(); + const previousCanvasDraggable = ref(true); + const onEdit = /* @__PURE__ */ __name((newValue) => { + if (titleEditorStore.titleEditorTarget && newValue.trim() !== "") { + titleEditorStore.titleEditorTarget.title = newValue.trim(); + app.graph.setDirtyCanvas(true, true); + } + showInput.value = false; + titleEditorStore.titleEditorTarget = null; + canvasStore.canvas.allow_dragcanvas = previousCanvasDraggable.value; + }, "onEdit"); + watch( + () => titleEditorStore.titleEditorTarget, + (target) => { + if (target === null) { + return; + } + editedTitle.value = target.title; + showInput.value = true; + previousCanvasDraggable.value = canvasStore.canvas.allow_dragcanvas; + canvasStore.canvas.allow_dragcanvas = false; + if (target instanceof LGraphGroup) { + const group = target; + const [x, y] = group.pos; + const [w, h] = group.size; + const [left, top] = app.canvasPosToClientPos([x, y]); + inputStyle.value.left = `${left}px`; + inputStyle.value.top = `${top}px`; + const width = w * app.canvas.ds.scale; + const height = group.titleHeight * app.canvas.ds.scale; + inputStyle.value.width = `${width}px`; + inputStyle.value.height = `${height}px`; + const fontSize = group.font_size * app.canvas.ds.scale; + inputStyle.value.fontSize = `${fontSize}px`; + } else if (target instanceof LGraphNode) { + const node = target; + const [x, y] = node.getBounding(); + const canvasWidth = node.width; + const canvasHeight = LiteGraph.NODE_TITLE_HEIGHT; + const [left, top] = app.canvasPosToClientPos([x, y]); + inputStyle.value.left = `${left}px`; + inputStyle.value.top = `${top}px`; + const width = canvasWidth * app.canvas.ds.scale; + const height = canvasHeight * app.canvas.ds.scale; + inputStyle.value.width = `${width}px`; + inputStyle.value.height = `${height}px`; + const fontSize = 12 * app.canvas.ds.scale; + inputStyle.value.fontSize = `${fontSize}px`; + } + } + ); + const canvasEventHandler = /* @__PURE__ */ __name((event) => { + if (!settingStore.get("Comfy.Group.DoubleClickTitleToEdit")) { + return; + } + if (event.detail.subType === "group-double-click") { + const group = event.detail.group; + const [x, y] = group.pos; + const e = event.detail.originalEvent; + const relativeY = e.canvasY - y; + if (relativeY > group.titleHeight) { + return; + } + titleEditorStore.titleEditorTarget = group; + } + }, "canvasEventHandler"); + const extension = { + name: "Comfy.NodeTitleEditor", + nodeCreated(node) { + const originalCallback = node.onNodeTitleDblClick; + node.onNodeTitleDblClick = function(e, ...args) { + if (!settingStore.get("Comfy.Node.DoubleClickTitleToEdit")) { + return; + } + titleEditorStore.titleEditorTarget = this; + if (typeof originalCallback === "function") { + originalCallback.call(this, e, ...args); + } + }; + } + }; + onMounted(() => { + document.addEventListener("litegraph:canvas", canvasEventHandler); + app.registerExtension(extension); + }); + onUnmounted(() => { + document.removeEventListener("litegraph:canvas", canvasEventHandler); + }); + return (_ctx, _cache) => { + return showInput.value ? (openBlock(), createElementBlock("div", { + key: 0, + class: "group-title-editor node-title-editor", + style: normalizeStyle(inputStyle.value) + }, [ + createVNode(EditableText, { + isEditing: showInput.value, + modelValue: editedTitle.value, + onEdit + }, null, 8, ["isEditing", "modelValue"]) + ], 4)) : createCommentVNode("", true); + }; + } +}); +const TitleEditor = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-8a100d5a"]]); +var theme$8 = /* @__PURE__ */ __name(function theme(_ref) { + var dt = _ref.dt; + return "\n.p-overlaybadge {\n position: relative;\n}\n\n.p-overlaybadge .p-badge {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0;\n margin: 0;\n outline-width: ".concat(dt("overlaybadge.outline.width"), ";\n outline-style: solid;\n outline-color: ").concat(dt("overlaybadge.outline.color"), ";\n}\n"); +}, "theme"); +var classes$b = { + root: "p-overlaybadge" +}; +var OverlayBadgeStyle = BaseStyle.extend({ + name: "overlaybadge", + theme: theme$8, + classes: classes$b +}); +var script$1$b = { + name: "OverlayBadge", + "extends": script$e, + style: OverlayBadgeStyle, + provide: /* @__PURE__ */ __name(function provide2() { + return { + $pcOverlayBadge: this, + $parentInstance: this + }; + }, "provide") +}; +var script$d = { + name: "OverlayBadge", + "extends": script$1$b, + inheritAttrs: false, + components: { + Badge: script$e + } +}; +function render$j(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Badge = resolveComponent("Badge"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default"), createVNode(_component_Badge, mergeProps(_ctx.$props, { + pt: _ctx.ptm("pcBadge") + }), null, 16, ["pt"])], 16); +} +__name(render$j, "render$j"); +script$d.render = render$j; +const _sfc_main$r = /* @__PURE__ */ defineComponent({ + __name: "SidebarIcon", + props: { + icon: String, + selected: Boolean, + tooltip: { + type: String, + default: "" + }, + class: { + type: String, + default: "" + }, + iconBadge: { + type: [String, Function], + default: "" + } + }, + emits: ["click"], + setup(__props, { emit: __emit }) { + const props = __props; + const emit = __emit; + const overlayValue = computed( + () => typeof props.iconBadge === "function" ? props.iconBadge() || "" : props.iconBadge + ); + const shouldShowBadge = computed(() => !!overlayValue.value); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createBlock(unref(script$f), { + class: normalizeClass(props.class), + text: "", + pt: { + root: { + class: `side-bar-button ${props.selected ? "p-button-primary side-bar-button-selected" : "p-button-secondary"}`, + "aria-label": props.tooltip + } + }, + onClick: _cache[0] || (_cache[0] = ($event) => emit("click", $event)) + }, { + icon: withCtx(() => [ + shouldShowBadge.value ? (openBlock(), createBlock(unref(script$d), { + key: 0, + value: overlayValue.value + }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(props.icon + " side-bar-button-icon") + }, null, 2) + ]), + _: 1 + }, 8, ["value"])) : (openBlock(), createElementBlock("i", { + key: 1, + class: normalizeClass(props.icon + " side-bar-button-icon") + }, null, 2)) + ]), + _: 1 + }, 8, ["class", "pt"])), [ + [_directive_tooltip, { value: props.tooltip, showDelay: 300, hideDelay: 300 }] + ]); + }; + } +}); +const SidebarIcon = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-caa3ee9c"]]); +const _sfc_main$q = /* @__PURE__ */ defineComponent({ + __name: "SidebarThemeToggleIcon", + setup(__props) { + const settingStore = useSettingStore(); + const currentTheme = computed(() => settingStore.get("Comfy.ColorPalette")); + const icon = computed( + () => currentTheme.value !== "light" ? "pi pi-moon" : "pi pi-sun" + ); + const commandStore = useCommandStore(); + const toggleTheme = /* @__PURE__ */ __name(() => { + commandStore.execute("Comfy.ToggleTheme"); + }, "toggleTheme"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: icon.value, + onClick: toggleTheme, + tooltip: _ctx.$t("sideToolbar.themeToggle"), + class: "comfy-vue-theme-toggle" + }, null, 8, ["icon", "tooltip"]); + }; + } +}); +const _sfc_main$p = /* @__PURE__ */ defineComponent({ + __name: "SidebarSettingsToggleIcon", + setup(__props) { + const dialogStore = useDialogStore(); + const showSetting = /* @__PURE__ */ __name(() => { + dialogStore.showDialog({ + key: "global-settings", + headerComponent: SettingDialogHeader, + component: SettingDialogContent + }); + }, "showSetting"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: "pi pi-cog", + class: "comfy-settings-btn", + onClick: showSetting, + tooltip: _ctx.$t("g.settings") + }, null, 8, ["tooltip"]); + }; + } +}); +const _sfc_main$o = /* @__PURE__ */ defineComponent({ + __name: "SidebarLogoutIcon", + setup(__props) { + const { t } = useI18n(); + const userStore = useUserStore(); + const tooltip = computed( + () => `${t("sideToolbar.logout")} (${userStore.currentUser?.username})` + ); + const logout = /* @__PURE__ */ __name(() => { + userStore.logout(); + window.location.reload(); + }, "logout"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: "pi pi-sign-out", + tooltip: tooltip.value, + onClick: logout + }, null, 8, ["tooltip"]); + }; + } +}); +const _sfc_main$n = /* @__PURE__ */ defineComponent({ + __name: "ExtensionSlot", + props: { + extension: {} + }, + setup(__props) { + const props = __props; + const mountCustomExtension = /* @__PURE__ */ __name((extension, el) => { + extension.render(el); + }, "mountCustomExtension"); + onBeforeUnmount(() => { + if (props.extension.type === "custom" && props.extension.destroy) { + props.extension.destroy(); + } + }); + return (_ctx, _cache) => { + return _ctx.extension.type === "vue" ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.extension.component), { key: 0 })) : (openBlock(), createElementBlock("div", { + key: 1, + ref: /* @__PURE__ */ __name((el) => { + if (el) + mountCustomExtension( + props.extension, + el + ); + }, "ref") + }, null, 512)); + }; + } +}); +const _withScopeId$5 = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-7851c166"), n = n(), popScopeId(), n), "_withScopeId$5"); +const _hoisted_1$n = { class: "side-tool-bar-end" }; +const _hoisted_2$k = { + key: 0, + class: "sidebar-content-container h-full overflow-y-auto overflow-x-hidden" +}; +const _sfc_main$m = /* @__PURE__ */ defineComponent({ + __name: "SideToolbar", + setup(__props) { + const workspaceStore = useWorkspaceStore(); + const settingStore = useSettingStore(); + const userStore = useUserStore(); + const teleportTarget = computed( + () => settingStore.get("Comfy.Sidebar.Location") === "left" ? ".comfyui-body-left" : ".comfyui-body-right" + ); + const isSmall = computed( + () => settingStore.get("Comfy.Sidebar.Size") === "small" + ); + const tabs = computed(() => workspaceStore.getSidebarTabs()); + const selectedTab = computed(() => workspaceStore.sidebarTab.activeSidebarTab); + const onTabClick = /* @__PURE__ */ __name((item3) => { + workspaceStore.sidebarTab.toggleSidebarTab(item3.id); + }, "onTabClick"); + const keybindingStore = useKeybindingStore(); + const getTabTooltipSuffix = /* @__PURE__ */ __name((tab) => { + const keybinding = keybindingStore.getKeybindingByCommandId( + `Workspace.ToggleSidebarTab.${tab.id}` + ); + return keybinding ? ` (${keybinding.combo.toString()})` : ""; + }, "getTabTooltipSuffix"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + (openBlock(), createBlock(Teleport, { to: teleportTarget.value }, [ + createBaseVNode("nav", { + class: normalizeClass("side-tool-bar-container" + (isSmall.value ? " small-sidebar" : "")) + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (tab) => { + return openBlock(), createBlock(SidebarIcon, { + key: tab.id, + icon: tab.icon, + iconBadge: tab.iconBadge, + tooltip: tab.tooltip + getTabTooltipSuffix(tab), + selected: tab.id === selectedTab.value?.id, + class: normalizeClass(tab.id + "-tab-button"), + onClick: /* @__PURE__ */ __name(($event) => onTabClick(tab), "onClick") + }, null, 8, ["icon", "iconBadge", "tooltip", "selected", "class", "onClick"]); + }), 128)), + createBaseVNode("div", _hoisted_1$n, [ + unref(userStore).isMultiUserServer ? (openBlock(), createBlock(_sfc_main$o, { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$q), + createVNode(_sfc_main$p) + ]) + ], 2) + ], 8, ["to"])), + selectedTab.value ? (openBlock(), createElementBlock("div", _hoisted_2$k, [ + createVNode(_sfc_main$n, { extension: selectedTab.value }, null, 8, ["extension"]) + ])) : createCommentVNode("", true) + ], 64); + }; + } +}); +const SideToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-7851c166"]]); +var classes$a = { + root: "p-tablist", + content: /* @__PURE__ */ __name(function content(_ref) { + var instance = _ref.instance; + return ["p-tablist-content", { + "p-tablist-viewport": instance.$pcTabs.scrollable + }]; + }, "content"), + tabList: "p-tablist-tab-list", + activeBar: "p-tablist-active-bar", + prevButton: "p-tablist-prev-button p-tablist-nav-button", + nextButton: "p-tablist-next-button p-tablist-nav-button" +}; +var TabListStyle = BaseStyle.extend({ + name: "tablist", + classes: classes$a +}); +var script$1$a = { + name: "BaseTabList", + "extends": script$g, + props: {}, + style: TabListStyle, + provide: /* @__PURE__ */ __name(function provide3() { + return { + $pcTabList: this, + $parentInstance: this + }; + }, "provide") +}; +var script$c = { + name: "TabList", + "extends": script$1$a, + inheritAttrs: false, + inject: ["$pcTabs"], + data: /* @__PURE__ */ __name(function data() { + return { + isPrevButtonEnabled: false, + isNextButtonEnabled: true + }; + }, "data"), + resizeObserver: void 0, + watch: { + showNavigators: /* @__PURE__ */ __name(function showNavigators(newValue) { + newValue ? this.bindResizeObserver() : this.unbindResizeObserver(); + }, "showNavigators"), + activeValue: { + flush: "post", + handler: /* @__PURE__ */ __name(function handler() { + this.updateInkBar(); + }, "handler") + } + }, + mounted: /* @__PURE__ */ __name(function mounted() { + var _this = this; + this.$nextTick(function() { + _this.updateInkBar(); + }); + if (this.showNavigators) { + this.updateButtonState(); + this.bindResizeObserver(); + } + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated() { + this.showNavigators && this.updateButtonState(); + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount() { + this.unbindResizeObserver(); + }, "beforeUnmount"), + methods: { + onScroll: /* @__PURE__ */ __name(function onScroll(event) { + this.showNavigators && this.updateButtonState(); + event.preventDefault(); + }, "onScroll"), + onPrevButtonClick: /* @__PURE__ */ __name(function onPrevButtonClick() { + var content2 = this.$refs.content; + var width = getWidth(content2); + var pos = content2.scrollLeft - width; + content2.scrollLeft = pos <= 0 ? 0 : pos; + }, "onPrevButtonClick"), + onNextButtonClick: /* @__PURE__ */ __name(function onNextButtonClick() { + var content2 = this.$refs.content; + var width = getWidth(content2) - this.getVisibleButtonWidths(); + var pos = content2.scrollLeft + width; + var lastPos = content2.scrollWidth - width; + content2.scrollLeft = pos >= lastPos ? lastPos : pos; + }, "onNextButtonClick"), + bindResizeObserver: /* @__PURE__ */ __name(function bindResizeObserver() { + var _this2 = this; + this.resizeObserver = new ResizeObserver(function() { + return _this2.updateButtonState(); + }); + this.resizeObserver.observe(this.$refs.list); + }, "bindResizeObserver"), + unbindResizeObserver: /* @__PURE__ */ __name(function unbindResizeObserver() { + var _this$resizeObserver; + (_this$resizeObserver = this.resizeObserver) === null || _this$resizeObserver === void 0 || _this$resizeObserver.unobserve(this.$refs.list); + this.resizeObserver = void 0; + }, "unbindResizeObserver"), + updateInkBar: /* @__PURE__ */ __name(function updateInkBar() { + var _this$$refs = this.$refs, content2 = _this$$refs.content, inkbar = _this$$refs.inkbar, tabs = _this$$refs.tabs; + var activeTab = findSingle(content2, '[data-pc-name="tab"][data-p-active="true"]'); + if (this.$pcTabs.isVertical()) { + inkbar.style.height = getOuterHeight(activeTab) + "px"; + inkbar.style.top = getOffset(activeTab).top - getOffset(tabs).top + "px"; + } else { + inkbar.style.width = getOuterWidth(activeTab) + "px"; + inkbar.style.left = getOffset(activeTab).left - getOffset(tabs).left + "px"; + } + }, "updateInkBar"), + updateButtonState: /* @__PURE__ */ __name(function updateButtonState() { + var _this$$refs2 = this.$refs, list = _this$$refs2.list, content2 = _this$$refs2.content; + var scrollLeft = content2.scrollLeft, scrollTop = content2.scrollTop, scrollWidth = content2.scrollWidth, scrollHeight = content2.scrollHeight, offsetWidth = content2.offsetWidth, offsetHeight = content2.offsetHeight; + var _ref = [getWidth(content2), getHeight(content2)], width = _ref[0], height = _ref[1]; + if (this.$pcTabs.isVertical()) { + this.isPrevButtonEnabled = scrollTop !== 0; + this.isNextButtonEnabled = list.offsetHeight >= offsetHeight && parseInt(scrollTop) !== scrollHeight - height; + } else { + this.isPrevButtonEnabled = scrollLeft !== 0; + this.isNextButtonEnabled = list.offsetWidth >= offsetWidth && parseInt(scrollLeft) !== scrollWidth - width; + } + }, "updateButtonState"), + getVisibleButtonWidths: /* @__PURE__ */ __name(function getVisibleButtonWidths() { + var _this$$refs3 = this.$refs, prevBtn = _this$$refs3.prevBtn, nextBtn = _this$$refs3.nextBtn; + return [prevBtn, nextBtn].reduce(function(acc, el) { + return el ? acc + getWidth(el) : acc; + }, 0); + }, "getVisibleButtonWidths") + }, + computed: { + templates: /* @__PURE__ */ __name(function templates() { + return this.$pcTabs.$slots; + }, "templates"), + activeValue: /* @__PURE__ */ __name(function activeValue() { + return this.$pcTabs.d_value; + }, "activeValue"), + showNavigators: /* @__PURE__ */ __name(function showNavigators2() { + return this.$pcTabs.scrollable && this.$pcTabs.showNavigators; + }, "showNavigators"), + prevButtonAriaLabel: /* @__PURE__ */ __name(function prevButtonAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.previous : void 0; + }, "prevButtonAriaLabel"), + nextButtonAriaLabel: /* @__PURE__ */ __name(function nextButtonAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.next : void 0; + }, "nextButtonAriaLabel") + }, + components: { + ChevronLeftIcon: script$h, + ChevronRightIcon: script$i + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$m = ["aria-label", "tabindex"]; +var _hoisted_2$j = ["aria-orientation"]; +var _hoisted_3$g = ["aria-label", "tabindex"]; +function render$i(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: "list", + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [$options.showNavigators && $data.isPrevButtonEnabled ? withDirectives((openBlock(), createElementBlock("button", mergeProps({ + key: 0, + ref: "prevButton", + "class": _ctx.cx("prevButton"), + "aria-label": $options.prevButtonAriaLabel, + tabindex: $options.$pcTabs.tabindex, + onClick: _cache[0] || (_cache[0] = function() { + return $options.onPrevButtonClick && $options.onPrevButtonClick.apply($options, arguments); + }) + }, _ctx.ptm("prevButton"), { + "data-pc-group-section": "navigator" + }), [(openBlock(), createBlock(resolveDynamicComponent($options.templates.previcon || "ChevronLeftIcon"), mergeProps({ + "aria-hidden": "true" + }, _ctx.ptm("prevIcon")), null, 16))], 16, _hoisted_1$m)), [[_directive_ripple]]) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + ref: "content", + "class": _ctx.cx("content"), + onScroll: _cache[1] || (_cache[1] = function() { + return $options.onScroll && $options.onScroll.apply($options, arguments); + }) + }, _ctx.ptm("content")), [createBaseVNode("div", mergeProps({ + ref: "tabs", + "class": _ctx.cx("tabList"), + role: "tablist", + "aria-orientation": $options.$pcTabs.orientation || "horizontal" + }, _ctx.ptm("tabList")), [renderSlot(_ctx.$slots, "default"), createBaseVNode("span", mergeProps({ + ref: "inkbar", + "class": _ctx.cx("activeBar"), + role: "presentation", + "aria-hidden": "true" + }, _ctx.ptm("activeBar")), null, 16)], 16, _hoisted_2$j)], 16), $options.showNavigators && $data.isNextButtonEnabled ? withDirectives((openBlock(), createElementBlock("button", mergeProps({ + key: 1, + ref: "nextButton", + "class": _ctx.cx("nextButton"), + "aria-label": $options.nextButtonAriaLabel, + tabindex: $options.$pcTabs.tabindex, + onClick: _cache[2] || (_cache[2] = function() { + return $options.onNextButtonClick && $options.onNextButtonClick.apply($options, arguments); + }) + }, _ctx.ptm("nextButton"), { + "data-pc-group-section": "navigator" + }), [(openBlock(), createBlock(resolveDynamicComponent($options.templates.nexticon || "ChevronRightIcon"), mergeProps({ + "aria-hidden": "true" + }, _ctx.ptm("nextIcon")), null, 16))], 16, _hoisted_3$g)), [[_directive_ripple]]) : createCommentVNode("", true)], 16); +} +__name(render$i, "render$i"); +script$c.render = render$i; +var classes$9 = { + root: /* @__PURE__ */ __name(function root(_ref) { + var instance = _ref.instance, props = _ref.props; + return ["p-tab", { + "p-tab-active": instance.active, + "p-disabled": props.disabled + }]; + }, "root") +}; +var TabStyle = BaseStyle.extend({ + name: "tab", + classes: classes$9 +}); +var script$1$9 = { + name: "BaseTab", + "extends": script$g, + props: { + value: { + type: [String, Number], + "default": void 0 + }, + disabled: { + type: Boolean, + "default": false + }, + as: { + type: [String, Object], + "default": "BUTTON" + }, + asChild: { + type: Boolean, + "default": false + } + }, + style: TabStyle, + provide: /* @__PURE__ */ __name(function provide4() { + return { + $pcTab: this, + $parentInstance: this + }; + }, "provide") +}; +var script$b = { + name: "Tab", + "extends": script$1$9, + inheritAttrs: false, + inject: ["$pcTabs", "$pcTabList"], + methods: { + onFocus: /* @__PURE__ */ __name(function onFocus() { + this.$pcTabs.selectOnFocus && this.changeActiveValue(); + }, "onFocus"), + onClick: /* @__PURE__ */ __name(function onClick() { + this.changeActiveValue(); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown(event) { + switch (event.code) { + case "ArrowRight": + this.onArrowRightKey(event); + break; + case "ArrowLeft": + this.onArrowLeftKey(event); + break; + case "Home": + this.onHomeKey(event); + break; + case "End": + this.onEndKey(event); + break; + case "PageDown": + this.onPageDownKey(event); + break; + case "PageUp": + this.onPageUpKey(event); + break; + case "Enter": + case "NumpadEnter": + case "Space": + this.onEnterKey(event); + break; + } + }, "onKeydown"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey(event) { + var nextTab = this.findNextTab(event.currentTarget); + nextTab ? this.changeFocusedTab(event, nextTab) : this.onHomeKey(event); + event.preventDefault(); + }, "onArrowRightKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey(event) { + var prevTab = this.findPrevTab(event.currentTarget); + prevTab ? this.changeFocusedTab(event, prevTab) : this.onEndKey(event); + event.preventDefault(); + }, "onArrowLeftKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey(event) { + var firstTab = this.findFirstTab(); + this.changeFocusedTab(event, firstTab); + event.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey(event) { + var lastTab = this.findLastTab(); + this.changeFocusedTab(event, lastTab); + event.preventDefault(); + }, "onEndKey"), + onPageDownKey: /* @__PURE__ */ __name(function onPageDownKey(event) { + this.scrollInView(this.findLastTab()); + event.preventDefault(); + }, "onPageDownKey"), + onPageUpKey: /* @__PURE__ */ __name(function onPageUpKey(event) { + this.scrollInView(this.findFirstTab()); + event.preventDefault(); + }, "onPageUpKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey(event) { + this.changeActiveValue(); + event.preventDefault(); + }, "onEnterKey"), + findNextTab: /* @__PURE__ */ __name(function findNextTab(tabElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var element = selfCheck ? tabElement : tabElement.nextElementSibling; + return element ? getAttribute(element, "data-p-disabled") || getAttribute(element, "data-pc-section") === "inkbar" ? this.findNextTab(element) : findSingle(element, '[data-pc-name="tab"]') : null; + }, "findNextTab"), + findPrevTab: /* @__PURE__ */ __name(function findPrevTab(tabElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var element = selfCheck ? tabElement : tabElement.previousElementSibling; + return element ? getAttribute(element, "data-p-disabled") || getAttribute(element, "data-pc-section") === "inkbar" ? this.findPrevTab(element) : findSingle(element, '[data-pc-name="tab"]') : null; + }, "findPrevTab"), + findFirstTab: /* @__PURE__ */ __name(function findFirstTab() { + return this.findNextTab(this.$pcTabList.$refs.content.firstElementChild, true); + }, "findFirstTab"), + findLastTab: /* @__PURE__ */ __name(function findLastTab() { + return this.findPrevTab(this.$pcTabList.$refs.content.lastElementChild, true); + }, "findLastTab"), + changeActiveValue: /* @__PURE__ */ __name(function changeActiveValue() { + this.$pcTabs.updateValue(this.value); + }, "changeActiveValue"), + changeFocusedTab: /* @__PURE__ */ __name(function changeFocusedTab(event, element) { + focus(element); + this.scrollInView(element); + }, "changeFocusedTab"), + scrollInView: /* @__PURE__ */ __name(function scrollInView(element) { + var _element$scrollIntoVi; + element === null || element === void 0 || (_element$scrollIntoVi = element.scrollIntoView) === null || _element$scrollIntoVi === void 0 || _element$scrollIntoVi.call(element, { + block: "nearest" + }); + }, "scrollInView") + }, + computed: { + active: /* @__PURE__ */ __name(function active() { + var _this$$pcTabs; + return equals((_this$$pcTabs = this.$pcTabs) === null || _this$$pcTabs === void 0 ? void 0 : _this$$pcTabs.d_value, this.value); + }, "active"), + id: /* @__PURE__ */ __name(function id() { + var _this$$pcTabs2; + return "".concat((_this$$pcTabs2 = this.$pcTabs) === null || _this$$pcTabs2 === void 0 ? void 0 : _this$$pcTabs2.id, "_tab_").concat(this.value); + }, "id"), + ariaControls: /* @__PURE__ */ __name(function ariaControls() { + var _this$$pcTabs3; + return "".concat((_this$$pcTabs3 = this.$pcTabs) === null || _this$$pcTabs3 === void 0 ? void 0 : _this$$pcTabs3.id, "_tabpanel_").concat(this.value); + }, "ariaControls"), + attrs: /* @__PURE__ */ __name(function attrs() { + return mergeProps(this.asAttrs, this.a11yAttrs, this.ptmi("root", this.ptParams)); + }, "attrs"), + asAttrs: /* @__PURE__ */ __name(function asAttrs() { + return this.as === "BUTTON" ? { + type: "button", + disabled: this.disabled + } : void 0; + }, "asAttrs"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs() { + return { + id: this.id, + tabindex: this.active ? this.$pcTabs.tabindex : -1, + role: "tab", + "aria-selected": this.active, + "aria-controls": this.ariaControls, + "data-pc-name": "tab", + "data-p-disabled": this.disabled, + "data-p-active": this.active, + onFocus: this.onFocus, + onKeydown: this.onKeydown + }; + }, "a11yAttrs"), + ptParams: /* @__PURE__ */ __name(function ptParams() { + return { + context: { + active: this.active + } + }; + }, "ptParams") + }, + directives: { + ripple: Ripple + } +}; +function render$h(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return !_ctx.asChild ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + "class": _ctx.cx("root"), + onClick: $options.onClick + }, $options.attrs), { + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "default")]; + }), + _: 3 + }, 16, ["class", "onClick"])), [[_directive_ripple]]) : renderSlot(_ctx.$slots, "default", { + key: 1, + "class": normalizeClass(_ctx.cx("root")), + active: $options.active, + a11yAttrs: $options.a11yAttrs, + onClick: $options.onClick + }); +} +__name(render$h, "render$h"); +script$b.render = render$h; +const _hoisted_1$l = { class: "flex flex-col h-full" }; +const _hoisted_2$i = { class: "w-full flex justify-between" }; +const _hoisted_3$f = { class: "tabs-container" }; +const _hoisted_4$6 = { class: "font-bold" }; +const _hoisted_5$4 = { class: "flex-grow h-0" }; +const _sfc_main$l = /* @__PURE__ */ defineComponent({ + __name: "BottomPanel", + setup(__props) { + const bottomPanelStore = useBottomPanelStore(); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$l, [ + createVNode(unref(script$j), { + value: unref(bottomPanelStore).activeBottomPanelTabId, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(bottomPanelStore).activeBottomPanelTabId = $event) + }, { + default: withCtx(() => [ + createVNode(unref(script$c), { "pt:tabList": "border-none" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_2$i, [ + createBaseVNode("div", _hoisted_3$f, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(bottomPanelStore).bottomPanelTabs, (tab) => { + return openBlock(), createBlock(unref(script$b), { + key: tab.id, + value: tab.id, + class: "p-3 border-none" + }, { + default: withCtx(() => [ + createBaseVNode("span", _hoisted_4$6, toDisplayString(tab.title.toUpperCase()), 1) + ]), + _: 2 + }, 1032, ["value"]); + }), 128)) + ]), + createVNode(unref(script$f), { + class: "justify-self-end", + icon: "pi pi-times", + severity: "secondary", + size: "small", + text: "", + onClick: _cache[0] || (_cache[0] = ($event) => unref(bottomPanelStore).bottomPanelVisible = false) + }) + ]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["value"]), + createBaseVNode("div", _hoisted_5$4, [ + unref(bottomPanelStore).bottomPanelVisible && unref(bottomPanelStore).activeBottomPanelTab ? (openBlock(), createBlock(_sfc_main$n, { + key: 0, + extension: unref(bottomPanelStore).activeBottomPanelTab + }, null, 8, ["extension"])) : createCommentVNode("", true) + ]) + ]); + }; + } +}); +var theme$7 = /* @__PURE__ */ __name(function theme2(_ref) { + var dt = _ref.dt; + return "\n.p-splitter {\n display: flex;\n flex-wrap: nowrap;\n border: 1px solid ".concat(dt("splitter.border.color"), ";\n background: ").concat(dt("splitter.background"), ";\n border-radius: ").concat(dt("border.radius.md"), ";\n color: ").concat(dt("splitter.color"), ";\n}\n\n.p-splitter-vertical {\n flex-direction: column;\n}\n\n.p-splitter-gutter {\n flex-grow: 0;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: ").concat(dt("splitter.gutter.background"), ";\n}\n\n.p-splitter-gutter-handle {\n border-radius: ").concat(dt("splitter.handle.border.radius"), ";\n background: ").concat(dt("splitter.handle.background"), ";\n transition: outline-color ").concat(dt("splitter.transition.duration"), ", box-shadow ").concat(dt("splitter.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-splitter-gutter-handle:focus-visible {\n box-shadow: ").concat(dt("splitter.handle.focus.ring.shadow"), ";\n outline: ").concat(dt("splitter.handle.focus.ring.width"), " ").concat(dt("splitter.handle.focus.ring.style"), " ").concat(dt("splitter.handle.focus.ring.color"), ";\n outline-offset: ").concat(dt("splitter.handle.focus.ring.offset"), ";\n}\n\n.p-splitter-horizontal.p-splitter-resizing {\n cursor: col-resize;\n user-select: none;\n}\n\n.p-splitter-vertical.p-splitter-resizing {\n cursor: row-resize;\n user-select: none;\n}\n\n.p-splitter-horizontal > .p-splitter-gutter > .p-splitter-gutter-handle {\n height: ").concat(dt("splitter.handle.size"), ";\n width: 100%;\n}\n\n.p-splitter-vertical > .p-splitter-gutter > .p-splitter-gutter-handle {\n width: ").concat(dt("splitter.handle.size"), ";\n height: 100%;\n}\n\n.p-splitter-horizontal > .p-splitter-gutter {\n cursor: col-resize;\n}\n\n.p-splitter-vertical > .p-splitter-gutter {\n cursor: row-resize;\n}\n\n.p-splitterpanel {\n flex-grow: 1;\n overflow: hidden;\n}\n\n.p-splitterpanel-nested {\n display: flex;\n}\n\n.p-splitterpanel .p-splitter {\n flex-grow: 1;\n border: 0 none;\n}\n"); +}, "theme"); +var classes$8 = { + root: /* @__PURE__ */ __name(function root2(_ref2) { + var props = _ref2.props; + return ["p-splitter p-component", "p-splitter-" + props.layout]; + }, "root"), + gutter: "p-splitter-gutter", + gutterHandle: "p-splitter-gutter-handle" +}; +var inlineStyles$4 = { + root: /* @__PURE__ */ __name(function root3(_ref3) { + var props = _ref3.props; + return [{ + display: "flex", + "flex-wrap": "nowrap" + }, props.layout === "vertical" ? { + "flex-direction": "column" + } : ""]; + }, "root") +}; +var SplitterStyle = BaseStyle.extend({ + name: "splitter", + theme: theme$7, + classes: classes$8, + inlineStyles: inlineStyles$4 +}); +var script$1$8 = { + name: "BaseSplitter", + "extends": script$g, + props: { + layout: { + type: String, + "default": "horizontal" + }, + gutterSize: { + type: Number, + "default": 4 + }, + stateKey: { + type: String, + "default": null + }, + stateStorage: { + type: String, + "default": "session" + }, + step: { + type: Number, + "default": 5 + } + }, + style: SplitterStyle, + provide: /* @__PURE__ */ __name(function provide5() { + return { + $pcSplitter: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$2(r) { + return _arrayWithoutHoles$2(r) || _iterableToArray$2(r) || _unsupportedIterableToArray$2(r) || _nonIterableSpread$2(); +} +__name(_toConsumableArray$2, "_toConsumableArray$2"); +function _nonIterableSpread$2() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$2, "_nonIterableSpread$2"); +function _unsupportedIterableToArray$2(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$2(r, a); + var t = {}.toString.call(r).slice(8, -1); + return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$2(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$2, "_unsupportedIterableToArray$2"); +function _iterableToArray$2(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$2, "_iterableToArray$2"); +function _arrayWithoutHoles$2(r) { + if (Array.isArray(r)) return _arrayLikeToArray$2(r); +} +__name(_arrayWithoutHoles$2, "_arrayWithoutHoles$2"); +function _arrayLikeToArray$2(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$2, "_arrayLikeToArray$2"); +var script$a = { + name: "Splitter", + "extends": script$1$8, + inheritAttrs: false, + emits: ["resizestart", "resizeend", "resize"], + dragging: false, + mouseMoveListener: null, + mouseUpListener: null, + touchMoveListener: null, + touchEndListener: null, + size: null, + gutterElement: null, + startPos: null, + prevPanelElement: null, + nextPanelElement: null, + nextPanelSize: null, + prevPanelSize: null, + panelSizes: null, + prevPanelIndex: null, + timer: null, + data: /* @__PURE__ */ __name(function data2() { + return { + prevSize: null + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted2() { + var _this = this; + if (this.panels && this.panels.length) { + var initialized = false; + if (this.isStateful()) { + initialized = this.restoreState(); + } + if (!initialized) { + var children = _toConsumableArray$2(this.$el.children).filter(function(child) { + return child.getAttribute("data-pc-name") === "splitterpanel"; + }); + var _panelSizes = []; + this.panels.map(function(panel, i) { + var panelInitialSize = panel.props && panel.props.size ? panel.props.size : null; + var panelSize = panelInitialSize || 100 / _this.panels.length; + _panelSizes[i] = panelSize; + children[i].style.flexBasis = "calc(" + panelSize + "% - " + (_this.panels.length - 1) * _this.gutterSize + "px)"; + }); + this.panelSizes = _panelSizes; + this.prevSize = parseFloat(_panelSizes[0]).toFixed(4); + } + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount2() { + this.clear(); + this.unbindMouseListeners(); + }, "beforeUnmount"), + methods: { + isSplitterPanel: /* @__PURE__ */ __name(function isSplitterPanel(child) { + return child.type.name === "SplitterPanel"; + }, "isSplitterPanel"), + onResizeStart: /* @__PURE__ */ __name(function onResizeStart(event, index, isKeyDown) { + this.gutterElement = event.currentTarget || event.target.parentElement; + this.size = this.horizontal ? getWidth(this.$el) : getHeight(this.$el); + if (!isKeyDown) { + this.dragging = true; + this.startPos = this.layout === "horizontal" ? event.pageX || event.changedTouches[0].pageX : event.pageY || event.changedTouches[0].pageY; + } + this.prevPanelElement = this.gutterElement.previousElementSibling; + this.nextPanelElement = this.gutterElement.nextElementSibling; + if (isKeyDown) { + this.prevPanelSize = this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true); + this.nextPanelSize = this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true); + } else { + this.prevPanelSize = 100 * (this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true)) / this.size; + this.nextPanelSize = 100 * (this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true)) / this.size; + } + this.prevPanelIndex = index; + this.$emit("resizestart", { + originalEvent: event, + sizes: this.panelSizes + }); + this.$refs.gutter[index].setAttribute("data-p-gutter-resizing", true); + this.$el.setAttribute("data-p-resizing", true); + }, "onResizeStart"), + onResize: /* @__PURE__ */ __name(function onResize(event, step, isKeyDown) { + var newPos, newPrevPanelSize, newNextPanelSize; + if (isKeyDown) { + if (this.horizontal) { + newPrevPanelSize = 100 * (this.prevPanelSize + step) / this.size; + newNextPanelSize = 100 * (this.nextPanelSize - step) / this.size; + } else { + newPrevPanelSize = 100 * (this.prevPanelSize - step) / this.size; + newNextPanelSize = 100 * (this.nextPanelSize + step) / this.size; + } + } else { + if (this.horizontal) newPos = event.pageX * 100 / this.size - this.startPos * 100 / this.size; + else newPos = event.pageY * 100 / this.size - this.startPos * 100 / this.size; + newPrevPanelSize = this.prevPanelSize + newPos; + newNextPanelSize = this.nextPanelSize - newPos; + } + if (this.validateResize(newPrevPanelSize, newNextPanelSize)) { + this.prevPanelElement.style.flexBasis = "calc(" + newPrevPanelSize + "% - " + (this.panels.length - 1) * this.gutterSize + "px)"; + this.nextPanelElement.style.flexBasis = "calc(" + newNextPanelSize + "% - " + (this.panels.length - 1) * this.gutterSize + "px)"; + this.panelSizes[this.prevPanelIndex] = newPrevPanelSize; + this.panelSizes[this.prevPanelIndex + 1] = newNextPanelSize; + this.prevSize = parseFloat(newPrevPanelSize).toFixed(4); + } + this.$emit("resize", { + originalEvent: event, + sizes: this.panelSizes + }); + }, "onResize"), + onResizeEnd: /* @__PURE__ */ __name(function onResizeEnd(event) { + if (this.isStateful()) { + this.saveState(); + } + this.$emit("resizeend", { + originalEvent: event, + sizes: this.panelSizes + }); + this.$refs.gutter.forEach(function(gutter) { + return gutter.setAttribute("data-p-gutter-resizing", false); + }); + this.$el.setAttribute("data-p-resizing", false); + this.clear(); + }, "onResizeEnd"), + repeat: /* @__PURE__ */ __name(function repeat(event, index, step) { + this.onResizeStart(event, index, true); + this.onResize(event, step, true); + }, "repeat"), + setTimer: /* @__PURE__ */ __name(function setTimer(event, index, step) { + var _this2 = this; + if (!this.timer) { + this.timer = setInterval(function() { + _this2.repeat(event, index, step); + }, 40); + } + }, "setTimer"), + clearTimer: /* @__PURE__ */ __name(function clearTimer() { + if (this.timer) { + clearInterval(this.timer); + this.timer = null; + } + }, "clearTimer"), + onGutterKeyUp: /* @__PURE__ */ __name(function onGutterKeyUp() { + this.clearTimer(); + this.onResizeEnd(); + }, "onGutterKeyUp"), + onGutterKeyDown: /* @__PURE__ */ __name(function onGutterKeyDown(event, index) { + switch (event.code) { + case "ArrowLeft": { + if (this.layout === "horizontal") { + this.setTimer(event, index, this.step * -1); + } + event.preventDefault(); + break; + } + case "ArrowRight": { + if (this.layout === "horizontal") { + this.setTimer(event, index, this.step); + } + event.preventDefault(); + break; + } + case "ArrowDown": { + if (this.layout === "vertical") { + this.setTimer(event, index, this.step * -1); + } + event.preventDefault(); + break; + } + case "ArrowUp": { + if (this.layout === "vertical") { + this.setTimer(event, index, this.step); + } + event.preventDefault(); + break; + } + } + }, "onGutterKeyDown"), + onGutterMouseDown: /* @__PURE__ */ __name(function onGutterMouseDown(event, index) { + this.onResizeStart(event, index); + this.bindMouseListeners(); + }, "onGutterMouseDown"), + onGutterTouchStart: /* @__PURE__ */ __name(function onGutterTouchStart(event, index) { + this.onResizeStart(event, index); + this.bindTouchListeners(); + event.preventDefault(); + }, "onGutterTouchStart"), + onGutterTouchMove: /* @__PURE__ */ __name(function onGutterTouchMove(event) { + this.onResize(event); + event.preventDefault(); + }, "onGutterTouchMove"), + onGutterTouchEnd: /* @__PURE__ */ __name(function onGutterTouchEnd(event) { + this.onResizeEnd(event); + this.unbindTouchListeners(); + event.preventDefault(); + }, "onGutterTouchEnd"), + bindMouseListeners: /* @__PURE__ */ __name(function bindMouseListeners() { + var _this3 = this; + if (!this.mouseMoveListener) { + this.mouseMoveListener = function(event) { + return _this3.onResize(event); + }; + document.addEventListener("mousemove", this.mouseMoveListener); + } + if (!this.mouseUpListener) { + this.mouseUpListener = function(event) { + _this3.onResizeEnd(event); + _this3.unbindMouseListeners(); + }; + document.addEventListener("mouseup", this.mouseUpListener); + } + }, "bindMouseListeners"), + bindTouchListeners: /* @__PURE__ */ __name(function bindTouchListeners() { + var _this4 = this; + if (!this.touchMoveListener) { + this.touchMoveListener = function(event) { + return _this4.onResize(event.changedTouches[0]); + }; + document.addEventListener("touchmove", this.touchMoveListener); + } + if (!this.touchEndListener) { + this.touchEndListener = function(event) { + _this4.resizeEnd(event); + _this4.unbindTouchListeners(); + }; + document.addEventListener("touchend", this.touchEndListener); + } + }, "bindTouchListeners"), + validateResize: /* @__PURE__ */ __name(function validateResize(newPrevPanelSize, newNextPanelSize) { + if (newPrevPanelSize > 100 || newPrevPanelSize < 0) return false; + if (newNextPanelSize > 100 || newNextPanelSize < 0) return false; + var prevPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex], "minSize"); + if (this.panels[this.prevPanelIndex].props && prevPanelMinSize && prevPanelMinSize > newPrevPanelSize) { + return false; + } + var newPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex + 1], "minSize"); + if (this.panels[this.prevPanelIndex + 1].props && newPanelMinSize && newPanelMinSize > newNextPanelSize) { + return false; + } + return true; + }, "validateResize"), + unbindMouseListeners: /* @__PURE__ */ __name(function unbindMouseListeners() { + if (this.mouseMoveListener) { + document.removeEventListener("mousemove", this.mouseMoveListener); + this.mouseMoveListener = null; + } + if (this.mouseUpListener) { + document.removeEventListener("mouseup", this.mouseUpListener); + this.mouseUpListener = null; + } + }, "unbindMouseListeners"), + unbindTouchListeners: /* @__PURE__ */ __name(function unbindTouchListeners() { + if (this.touchMoveListener) { + document.removeEventListener("touchmove", this.touchMoveListener); + this.touchMoveListener = null; + } + if (this.touchEndListener) { + document.removeEventListener("touchend", this.touchEndListener); + this.touchEndListener = null; + } + }, "unbindTouchListeners"), + clear: /* @__PURE__ */ __name(function clear() { + this.dragging = false; + this.size = null; + this.startPos = null; + this.prevPanelElement = null; + this.nextPanelElement = null; + this.prevPanelSize = null; + this.nextPanelSize = null; + this.gutterElement = null; + this.prevPanelIndex = null; + }, "clear"), + isStateful: /* @__PURE__ */ __name(function isStateful() { + return this.stateKey != null; + }, "isStateful"), + getStorage: /* @__PURE__ */ __name(function getStorage() { + switch (this.stateStorage) { + case "local": + return window.localStorage; + case "session": + return window.sessionStorage; + default: + throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are "local" and "session".'); + } + }, "getStorage"), + saveState: /* @__PURE__ */ __name(function saveState() { + if (isArray(this.panelSizes)) { + this.getStorage().setItem(this.stateKey, JSON.stringify(this.panelSizes)); + } + }, "saveState"), + restoreState: /* @__PURE__ */ __name(function restoreState() { + var _this5 = this; + var storage = this.getStorage(); + var stateString = storage.getItem(this.stateKey); + if (stateString) { + this.panelSizes = JSON.parse(stateString); + var children = _toConsumableArray$2(this.$el.children).filter(function(child) { + return child.getAttribute("data-pc-name") === "splitterpanel"; + }); + children.forEach(function(child, i) { + child.style.flexBasis = "calc(" + _this5.panelSizes[i] + "% - " + (_this5.panels.length - 1) * _this5.gutterSize + "px)"; + }); + return true; + } + return false; + }, "restoreState") + }, + computed: { + panels: /* @__PURE__ */ __name(function panels() { + var _this6 = this; + var panels2 = []; + this.$slots["default"]().forEach(function(child) { + if (_this6.isSplitterPanel(child)) { + panels2.push(child); + } else if (child.children instanceof Array) { + child.children.forEach(function(nestedChild) { + if (_this6.isSplitterPanel(nestedChild)) { + panels2.push(nestedChild); + } + }); + } + }); + return panels2; + }, "panels"), + gutterStyle: /* @__PURE__ */ __name(function gutterStyle() { + if (this.horizontal) return { + width: this.gutterSize + "px" + }; + else return { + height: this.gutterSize + "px" + }; + }, "gutterStyle"), + horizontal: /* @__PURE__ */ __name(function horizontal() { + return this.layout === "horizontal"; + }, "horizontal"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions() { + var _this$$parentInstance; + return { + context: { + nested: (_this$$parentInstance = this.$parentInstance) === null || _this$$parentInstance === void 0 ? void 0 : _this$$parentInstance.nestedState + } + }; + }, "getPTOptions") + } +}; +var _hoisted_1$k = ["onMousedown", "onTouchstart", "onTouchmove", "onTouchend"]; +var _hoisted_2$h = ["aria-orientation", "aria-valuenow", "onKeydown"]; +function render$g(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + "data-p-resizing": false + }, _ctx.ptmi("root", $options.getPTOptions)), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.panels, function(panel, i) { + return openBlock(), createElementBlock(Fragment, { + key: i + }, [(openBlock(), createBlock(resolveDynamicComponent(panel), { + tabindex: "-1" + })), i !== $options.panels.length - 1 ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref_for: true, + ref: "gutter", + "class": _ctx.cx("gutter"), + role: "separator", + tabindex: "-1", + onMousedown: /* @__PURE__ */ __name(function onMousedown($event) { + return $options.onGutterMouseDown($event, i); + }, "onMousedown"), + onTouchstart: /* @__PURE__ */ __name(function onTouchstart($event) { + return $options.onGutterTouchStart($event, i); + }, "onTouchstart"), + onTouchmove: /* @__PURE__ */ __name(function onTouchmove($event) { + return $options.onGutterTouchMove($event, i); + }, "onTouchmove"), + onTouchend: /* @__PURE__ */ __name(function onTouchend($event) { + return $options.onGutterTouchEnd($event, i); + }, "onTouchend"), + "data-p-gutter-resizing": false + }, _ctx.ptm("gutter")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("gutterHandle"), + tabindex: "0", + style: [$options.gutterStyle], + "aria-orientation": _ctx.layout, + "aria-valuenow": $data.prevSize, + onKeyup: _cache[0] || (_cache[0] = function() { + return $options.onGutterKeyUp && $options.onGutterKeyUp.apply($options, arguments); + }), + onKeydown: /* @__PURE__ */ __name(function onKeydown2($event) { + return $options.onGutterKeyDown($event, i); + }, "onKeydown"), + ref_for: true + }, _ctx.ptm("gutterHandle")), null, 16, _hoisted_2$h)], 16, _hoisted_1$k)) : createCommentVNode("", true)], 64); + }), 128))], 16); +} +__name(render$g, "render$g"); +script$a.render = render$g; +var classes$7 = { + root: /* @__PURE__ */ __name(function root4(_ref) { + var instance = _ref.instance; + return ["p-splitterpanel", { + "p-splitterpanel-nested": instance.isNested + }]; + }, "root") +}; +var SplitterPanelStyle = BaseStyle.extend({ + name: "splitterpanel", + classes: classes$7 +}); +var script$1$7 = { + name: "BaseSplitterPanel", + "extends": script$g, + props: { + size: { + type: Number, + "default": null + }, + minSize: { + type: Number, + "default": null + } + }, + style: SplitterPanelStyle, + provide: /* @__PURE__ */ __name(function provide6() { + return { + $pcSplitterPanel: this, + $parentInstance: this + }; + }, "provide") +}; +var script$9 = { + name: "SplitterPanel", + "extends": script$1$7, + inheritAttrs: false, + data: /* @__PURE__ */ __name(function data3() { + return { + nestedState: null + }; + }, "data"), + computed: { + isNested: /* @__PURE__ */ __name(function isNested() { + var _this = this; + return this.$slots["default"]().some(function(child) { + _this.nestedState = child.type.name === "Splitter" ? true : null; + return _this.nestedState; + }); + }, "isNested"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions2() { + return { + context: { + nested: this.isNested + } + }; + }, "getPTOptions") + } +}; +function render$f(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root") + }, _ctx.ptmi("root", $options.getPTOptions)), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$f, "render$f"); +script$9.render = render$f; +const _sfc_main$k = /* @__PURE__ */ defineComponent({ + __name: "LiteGraphCanvasSplitterOverlay", + setup(__props) { + const settingStore = useSettingStore(); + const sidebarLocation = computed( + () => settingStore.get("Comfy.Sidebar.Location") + ); + const sidebarPanelVisible = computed( + () => useSidebarTabStore().activeSidebarTab !== null + ); + const bottomPanelVisible = computed( + () => useBottomPanelStore().bottomPanelVisible + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$a), { + class: "splitter-overlay-root splitter-overlay", + "pt:gutter": sidebarPanelVisible.value ? "" : "hidden", + stateKey: "sidebar-splitter", + stateStorage: "local" + }, { + default: withCtx(() => [ + sidebarLocation.value === "left" ? withDirectives((openBlock(), createBlock(unref(script$9), { + key: 0, + class: "side-bar-panel", + minSize: 10, + size: 20 + }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "side-bar-panel", {}, void 0, true) + ]), + _: 3 + }, 512)), [ + [vShow, sidebarPanelVisible.value] + ]) : createCommentVNode("", true), + createVNode(unref(script$9), { size: 100 }, { + default: withCtx(() => [ + createVNode(unref(script$a), { + class: "splitter-overlay max-w-full", + layout: "vertical", + "pt:gutter": bottomPanelVisible.value ? "" : "hidden", + stateKey: "bottom-panel-splitter", + stateStorage: "local" + }, { + default: withCtx(() => [ + createVNode(unref(script$9), { class: "graph-canvas-panel relative" }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "graph-canvas-panel", {}, void 0, true) + ]), + _: 3 + }), + withDirectives(createVNode(unref(script$9), { class: "bottom-panel" }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "bottom-panel", {}, void 0, true) + ]), + _: 3 + }, 512), [ + [vShow, bottomPanelVisible.value] + ]) + ]), + _: 3 + }, 8, ["pt:gutter"]) + ]), + _: 3 + }), + sidebarLocation.value === "right" ? withDirectives((openBlock(), createBlock(unref(script$9), { + key: 1, + class: "side-bar-panel", + minSize: 10, + size: 20 + }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "side-bar-panel", {}, void 0, true) + ]), + _: 3 + }, 512)), [ + [vShow, sidebarPanelVisible.value] + ]) : createCommentVNode("", true) + ]), + _: 3 + }, 8, ["pt:gutter"]); + }; + } +}); +const LiteGraphCanvasSplitterOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-7c3279c1"]]); +var theme$6 = /* @__PURE__ */ __name(function theme3(_ref) { + var dt = _ref.dt; + return "\n.p-autocomplete {\n display: inline-flex;\n}\n\n.p-autocomplete-loader {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n right: ".concat(dt("autocomplete.padding.x"), ";\n}\n\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-loader {\n right: calc(").concat(dt("autocomplete.dropdown.width"), " + ").concat(dt("autocomplete.padding.x"), ");\n}\n\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input {\n flex: 1 1 auto;\n width: 1%;\n}\n\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input,\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input-multiple {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.p-autocomplete-dropdown {\n cursor: pointer;\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n width: ").concat(dt("autocomplete.dropdown.width"), ";\n border-top-right-radius: ").concat(dt("autocomplete.dropdown.border.radius"), ";\n border-bottom-right-radius: ").concat(dt("autocomplete.dropdown.border.radius"), ";\n background: ").concat(dt("autocomplete.dropdown.background"), ";\n border: 1px solid ").concat(dt("autocomplete.dropdown.border.color"), ";\n border-left: 0 none;\n color: ").concat(dt("autocomplete.dropdown.color"), ";\n transition: background ").concat(dt("autocomplete.transition.duration"), ", color ").concat(dt("autocomplete.transition.duration"), ", border-color ").concat(dt("autocomplete.transition.duration"), ", outline-color ").concat(dt("autocomplete.transition.duration"), ", box-shadow ").concat(dt("autocomplete.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-autocomplete-dropdown:not(:disabled):hover {\n background: ").concat(dt("autocomplete.dropdown.hover.background"), ";\n border-color: ").concat(dt("autocomplete.dropdown.hover.border.color"), ";\n color: ").concat(dt("autocomplete.dropdown.hover.color"), ";\n}\n\n.p-autocomplete-dropdown:not(:disabled):active {\n background: ").concat(dt("autocomplete.dropdown.active.background"), ";\n border-color: ").concat(dt("autocomplete.dropdown.active.border.color"), ";\n color: ").concat(dt("autocomplete.dropdown.active.color"), ";\n}\n\n.p-autocomplete-dropdown:focus-visible {\n box-shadow: ").concat(dt("autocomplete.dropdown.focus.ring.shadow"), ";\n outline: ").concat(dt("autocomplete.dropdown.focus.ring.width"), " ").concat(dt("autocomplete.dropdown.focus.ring.style"), " ").concat(dt("autocomplete.dropdown.focus.ring.color"), ";\n outline-offset: ").concat(dt("autocomplete.dropdown.focus.ring.offset"), ";\n}\n\n.p-autocomplete .p-autocomplete-overlay {\n min-width: 100%;\n}\n\n.p-autocomplete-overlay {\n position: absolute;\n overflow: auto;\n top: 0;\n left: 0;\n background: ").concat(dt("autocomplete.overlay.background"), ";\n color: ").concat(dt("autocomplete.overlay.color"), ";\n border: 1px solid ").concat(dt("autocomplete.overlay.border.color"), ";\n border-radius: ").concat(dt("autocomplete.overlay.border.radius"), ";\n box-shadow: ").concat(dt("autocomplete.overlay.shadow"), ";\n}\n\n.p-autocomplete-list {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("autocomplete.list.gap"), ";\n padding: ").concat(dt("autocomplete.list.padding"), ";\n}\n\n.p-autocomplete-option {\n cursor: pointer;\n white-space: nowrap;\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n padding: ").concat(dt("autocomplete.option.padding"), ";\n border: 0 none;\n color: ").concat(dt("autocomplete.option.color"), ";\n background: transparent;\n transition: background ").concat(dt("autocomplete.transition.duration"), ", color ").concat(dt("autocomplete.transition.duration"), ", border-color ").concat(dt("autocomplete.transition.duration"), ";\n border-radius: ").concat(dt("autocomplete.option.border.radius"), ";\n}\n\n.p-autocomplete-option:not(.p-autocomplete-option-selected):not(.p-disabled).p-focus {\n background: ").concat(dt("autocomplete.option.focus.background"), ";\n color: ").concat(dt("autocomplete.option.focus.color"), ";\n}\n\n.p-autocomplete-option-selected {\n background: ").concat(dt("autocomplete.option.selected.background"), ";\n color: ").concat(dt("autocomplete.option.selected.color"), ";\n}\n\n.p-autocomplete-option-selected.p-focus {\n background: ").concat(dt("autocomplete.option.selected.focus.background"), ";\n color: ").concat(dt("autocomplete.option.selected.focus.color"), ";\n}\n\n.p-autocomplete-option-group {\n margin: 0;\n padding: ").concat(dt("autocomplete.option.group.padding"), ";\n color: ").concat(dt("autocomplete.option.group.color"), ";\n background: ").concat(dt("autocomplete.option.group.background"), ";\n font-weight: ").concat(dt("autocomplete.option.group.font.weight"), ";\n}\n\n.p-autocomplete-input-multiple {\n margin: 0;\n list-style-type: none;\n cursor: text;\n overflow: hidden;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n padding: calc(").concat(dt("autocomplete.padding.y"), " / 2) ").concat(dt("autocomplete.padding.x"), ";\n gap: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n color: ").concat(dt("autocomplete.color"), ";\n background: ").concat(dt("autocomplete.background"), ";\n border: 1px solid ").concat(dt("autocomplete.border.color"), ";\n border-radius: ").concat(dt("autocomplete.border.radius"), ";\n width: 100%;\n transition: background ").concat(dt("autocomplete.transition.duration"), ", color ").concat(dt("autocomplete.transition.duration"), ", border-color ").concat(dt("autocomplete.transition.duration"), ", outline-color ").concat(dt("autocomplete.transition.duration"), ", box-shadow ").concat(dt("autocomplete.transition.duration"), ";\n outline-color: transparent;\n box-shadow: ").concat(dt("autocomplete.shadow"), ";\n}\n\n.p-autocomplete:not(.p-disabled):hover .p-autocomplete-input-multiple {\n border-color: ").concat(dt("autocomplete.hover.border.color"), ";\n}\n\n.p-autocomplete:not(.p-disabled).p-focus .p-autocomplete-input-multiple {\n border-color: ").concat(dt("autocomplete.focus.border.color"), ";\n box-shadow: ").concat(dt("autocomplete.focus.ring.shadow"), ";\n outline: ").concat(dt("autocomplete.focus.ring.width"), " ").concat(dt("autocomplete.focus.ring.style"), " ").concat(dt("autocomplete.focus.ring.color"), ";\n outline-offset: ").concat(dt("autocomplete.focus.ring.offset"), ";\n}\n\n.p-autocomplete.p-invalid .p-autocomplete-input-multiple {\n border-color: ").concat(dt("autocomplete.invalid.border.color"), ";\n}\n\n.p-variant-filled.p-autocomplete-input-multiple {\n background: ").concat(dt("autocomplete.filled.background"), ";\n}\n\n.p-autocomplete:not(.p-disabled).p-focus .p-variant-filled.p-autocomplete-input-multiple {\n background: ").concat(dt("autocomplete.filled.focus.background"), ";\n}\n\n.p-autocomplete.p-disabled .p-autocomplete-input-multiple {\n opacity: 1;\n background: ").concat(dt("autocomplete.disabled.background"), ";\n color: ").concat(dt("autocomplete.disabled.color"), ";\n}\n\n.p-autocomplete-chip.p-chip {\n padding-top: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n padding-bottom: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n border-radius: ").concat(dt("autocomplete.chip.border.radius"), ";\n}\n\n.p-autocomplete-input-multiple:has(.p-autocomplete-chip) {\n padding-left: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n padding-right: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n}\n\n.p-autocomplete-chip-item.p-focus .p-autocomplete-chip {\n background: ").concat(dt("inputchips.chip.focus.background"), ";\n color: ").concat(dt("inputchips.chip.focus.color"), ";\n}\n\n.p-autocomplete-input-chip {\n flex: 1 1 auto;\n display: inline-flex;\n padding-top: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n padding-bottom: calc(").concat(dt("autocomplete.padding.y"), " / 2);\n}\n\n.p-autocomplete-input-chip input {\n border: 0 none;\n outline: 0 none;\n background: transparent;\n margin: 0;\n padding: 0;\n box-shadow: none;\n border-radius: 0;\n width: 100%;\n font-family: inherit;\n font-feature-settings: inherit;\n font-size: 1rem;\n color: inherit;\n}\n\n.p-autocomplete-input-chip input::placeholder {\n color: ").concat(dt("autocomplete.placeholder.color"), ";\n}\n\n.p-autocomplete-empty-message {\n padding: ").concat(dt("autocomplete.empty.message.padding"), ";\n}\n\n.p-autocomplete-fluid {\n display: flex;\n}\n\n.p-autocomplete-fluid:has(.p-autocomplete-dropdown) .p-autocomplete-input {\n width: 1%;\n}\n"); +}, "theme"); +var inlineStyles$3 = { + root: { + position: "relative" + } +}; +var classes$6 = { + root: /* @__PURE__ */ __name(function root5(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-autocomplete p-component p-inputwrapper", { + "p-disabled": props.disabled, + "p-invalid": props.invalid, + "p-focus": instance.focused, + "p-inputwrapper-filled": props.modelValue || isNotEmpty(instance.inputValue), + "p-inputwrapper-focus": instance.focused, + "p-autocomplete-open": instance.overlayVisible, + "p-autocomplete-fluid": instance.hasFluid + }]; + }, "root"), + pcInput: "p-autocomplete-input", + inputMultiple: /* @__PURE__ */ __name(function inputMultiple(_ref3) { + var props = _ref3.props, instance = _ref3.instance; + return ["p-autocomplete-input-multiple", { + "p-variant-filled": props.variant ? props.variant === "filled" : instance.$primevue.config.inputStyle === "filled" || instance.$primevue.config.inputVariant === "filled" + }]; + }, "inputMultiple"), + chipItem: /* @__PURE__ */ __name(function chipItem(_ref4) { + var instance = _ref4.instance, i = _ref4.i; + return ["p-autocomplete-chip-item", { + "p-focus": instance.focusedMultipleOptionIndex === i + }]; + }, "chipItem"), + pcChip: "p-autocomplete-chip", + chipIcon: "p-autocomplete-chip-icon", + inputChip: "p-autocomplete-input-chip", + loader: "p-autocomplete-loader", + dropdown: "p-autocomplete-dropdown", + overlay: "p-autocomplete-overlay p-component", + list: "p-autocomplete-list", + optionGroup: "p-autocomplete-option-group", + option: /* @__PURE__ */ __name(function option(_ref5) { + var instance = _ref5.instance, _option = _ref5.option, i = _ref5.i, getItemOptions = _ref5.getItemOptions; + return ["p-autocomplete-option", { + "p-autocomplete-option-selected": instance.isSelected(_option), + "p-focus": instance.focusedOptionIndex === instance.getOptionIndex(i, getItemOptions), + "p-disabled": instance.isOptionDisabled(_option) + }]; + }, "option"), + emptyMessage: "p-autocomplete-empty-message" +}; +var AutoCompleteStyle = BaseStyle.extend({ + name: "autocomplete", + theme: theme$6, + classes: classes$6, + inlineStyles: inlineStyles$3 +}); +var script$1$6 = { + name: "BaseAutoComplete", + "extends": script$g, + props: { + modelValue: null, + suggestions: { + type: Array, + "default": null + }, + optionLabel: null, + optionDisabled: null, + optionGroupLabel: null, + optionGroupChildren: null, + scrollHeight: { + type: String, + "default": "14rem" + }, + dropdown: { + type: Boolean, + "default": false + }, + dropdownMode: { + type: String, + "default": "blank" + }, + multiple: { + type: Boolean, + "default": false + }, + loading: { + type: Boolean, + "default": false + }, + variant: { + type: String, + "default": null + }, + invalid: { + type: Boolean, + "default": false + }, + disabled: { + type: Boolean, + "default": false + }, + placeholder: { + type: String, + "default": null + }, + dataKey: { + type: String, + "default": null + }, + minLength: { + type: Number, + "default": 1 + }, + delay: { + type: Number, + "default": 300 + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + forceSelection: { + type: Boolean, + "default": false + }, + completeOnFocus: { + type: Boolean, + "default": false + }, + inputId: { + type: String, + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + panelStyle: { + type: Object, + "default": null + }, + panelClass: { + type: [String, Object], + "default": null + }, + overlayStyle: { + type: Object, + "default": null + }, + overlayClass: { + type: [String, Object], + "default": null + }, + dropdownIcon: { + type: String, + "default": null + }, + dropdownClass: { + type: [String, Object], + "default": null + }, + loader: { + type: String, + "default": null + }, + loadingIcon: { + type: String, + "default": null + }, + removeTokenIcon: { + type: String, + "default": null + }, + chipIcon: { + type: String, + "default": null + }, + virtualScrollerOptions: { + type: Object, + "default": null + }, + autoOptionFocus: { + type: Boolean, + "default": false + }, + selectOnFocus: { + type: Boolean, + "default": false + }, + focusOnHover: { + type: Boolean, + "default": true + }, + searchLocale: { + type: String, + "default": void 0 + }, + searchMessage: { + type: String, + "default": null + }, + selectionMessage: { + type: String, + "default": null + }, + emptySelectionMessage: { + type: String, + "default": null + }, + emptySearchMessage: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + typeahead: { + type: Boolean, + "default": true + }, + ariaLabel: { + type: String, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + }, + fluid: { + type: Boolean, + "default": null + } + }, + style: AutoCompleteStyle, + provide: /* @__PURE__ */ __name(function provide7() { + return { + $pcAutoComplete: this, + $parentInstance: this + }; + }, "provide") +}; +function _typeof$1$1(o) { + "@babel/helpers - typeof"; + return _typeof$1$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1$1(o); +} +__name(_typeof$1$1, "_typeof$1$1"); +function _toConsumableArray$1(r) { + return _arrayWithoutHoles$1(r) || _iterableToArray$1(r) || _unsupportedIterableToArray$1(r) || _nonIterableSpread$1(); +} +__name(_toConsumableArray$1, "_toConsumableArray$1"); +function _nonIterableSpread$1() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$1, "_nonIterableSpread$1"); +function _unsupportedIterableToArray$1(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$1(r, a); + var t = {}.toString.call(r).slice(8, -1); + return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$1, "_unsupportedIterableToArray$1"); +function _iterableToArray$1(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$1, "_iterableToArray$1"); +function _arrayWithoutHoles$1(r) { + if (Array.isArray(r)) return _arrayLikeToArray$1(r); +} +__name(_arrayWithoutHoles$1, "_arrayWithoutHoles$1"); +function _arrayLikeToArray$1(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$1, "_arrayLikeToArray$1"); +var script$8 = { + name: "AutoComplete", + "extends": script$1$6, + inheritAttrs: false, + emits: ["update:modelValue", "change", "focus", "blur", "item-select", "item-unselect", "option-select", "option-unselect", "dropdown-click", "clear", "complete", "before-show", "before-hide", "show", "hide"], + inject: { + $pcFluid: { + "default": null + } + }, + outsideClickListener: null, + resizeListener: null, + scrollHandler: null, + overlay: null, + virtualScroller: null, + searchTimeout: null, + dirty: false, + data: /* @__PURE__ */ __name(function data4() { + return { + id: this.$attrs.id, + clicked: false, + focused: false, + focusedOptionIndex: -1, + focusedMultipleOptionIndex: -1, + overlayVisible: false, + searching: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + suggestions: /* @__PURE__ */ __name(function suggestions() { + if (this.searching) { + this.show(); + this.focusedOptionIndex = this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1; + this.searching = false; + } + this.autoUpdateModel(); + }, "suggestions") + }, + mounted: /* @__PURE__ */ __name(function mounted3() { + this.id = this.id || UniqueComponentId(); + this.autoUpdateModel(); + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated2() { + if (this.overlayVisible) { + this.alignOverlay(); + } + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount3() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay) { + ZIndex.clear(this.overlay); + this.overlay = null; + } + }, "beforeUnmount"), + methods: { + getOptionIndex: /* @__PURE__ */ __name(function getOptionIndex(index, fn) { + return this.virtualScrollerDisabled ? index : fn && fn(index)["index"]; + }, "getOptionIndex"), + getOptionLabel: /* @__PURE__ */ __name(function getOptionLabel(option2) { + return this.optionLabel ? resolveFieldData(option2, this.optionLabel) : option2; + }, "getOptionLabel"), + getOptionValue: /* @__PURE__ */ __name(function getOptionValue(option2) { + return option2; + }, "getOptionValue"), + getOptionRenderKey: /* @__PURE__ */ __name(function getOptionRenderKey(option2, index) { + return (this.dataKey ? resolveFieldData(option2, this.dataKey) : this.getOptionLabel(option2)) + "_" + index; + }, "getOptionRenderKey"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions3(option2, itemOptions, index, key) { + return this.ptm(key, { + context: { + selected: this.isSelected(option2), + focused: this.focusedOptionIndex === this.getOptionIndex(index, itemOptions), + disabled: this.isOptionDisabled(option2) + } + }); + }, "getPTOptions"), + isOptionDisabled: /* @__PURE__ */ __name(function isOptionDisabled(option2) { + return this.optionDisabled ? resolveFieldData(option2, this.optionDisabled) : false; + }, "isOptionDisabled"), + isOptionGroup: /* @__PURE__ */ __name(function isOptionGroup(option2) { + return this.optionGroupLabel && option2.optionGroup && option2.group; + }, "isOptionGroup"), + getOptionGroupLabel: /* @__PURE__ */ __name(function getOptionGroupLabel(optionGroup) { + return resolveFieldData(optionGroup, this.optionGroupLabel); + }, "getOptionGroupLabel"), + getOptionGroupChildren: /* @__PURE__ */ __name(function getOptionGroupChildren(optionGroup) { + return resolveFieldData(optionGroup, this.optionGroupChildren); + }, "getOptionGroupChildren"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset(index) { + var _this = this; + return (this.optionGroupLabel ? index - this.visibleOptions.slice(0, index).filter(function(option2) { + return _this.isOptionGroup(option2); + }).length : index) + 1; + }, "getAriaPosInset"), + show: /* @__PURE__ */ __name(function show(isFocus) { + this.$emit("before-show"); + this.dirty = true; + this.overlayVisible = true; + this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1; + isFocus && focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el); + }, "show"), + hide: /* @__PURE__ */ __name(function hide(isFocus) { + var _this2 = this; + var _hide = /* @__PURE__ */ __name(function _hide2() { + _this2.$emit("before-hide"); + _this2.dirty = isFocus; + _this2.overlayVisible = false; + _this2.clicked = false; + _this2.focusedOptionIndex = -1; + isFocus && focus(_this2.multiple ? _this2.$refs.focusInput : _this2.$refs.focusInput.$el); + }, "_hide"); + setTimeout(function() { + _hide(); + }, 0); + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus2(event) { + if (this.disabled) { + return; + } + if (!this.dirty && this.completeOnFocus) { + this.search(event, event.target.value, "focus"); + } + this.dirty = true; + this.focused = true; + if (this.overlayVisible) { + this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1; + this.scrollInView(this.focusedOptionIndex); + } + this.$emit("focus", event); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur(event) { + this.dirty = false; + this.focused = false; + this.focusedOptionIndex = -1; + this.$emit("blur", event); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown(event) { + if (this.disabled) { + event.preventDefault(); + return; + } + switch (event.code) { + case "ArrowDown": + this.onArrowDownKey(event); + break; + case "ArrowUp": + this.onArrowUpKey(event); + break; + case "ArrowLeft": + this.onArrowLeftKey(event); + break; + case "ArrowRight": + this.onArrowRightKey(event); + break; + case "Home": + this.onHomeKey(event); + break; + case "End": + this.onEndKey(event); + break; + case "PageDown": + this.onPageDownKey(event); + break; + case "PageUp": + this.onPageUpKey(event); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event); + break; + case "Escape": + this.onEscapeKey(event); + break; + case "Tab": + this.onTabKey(event); + break; + case "Backspace": + this.onBackspaceKey(event); + break; + } + this.clicked = false; + }, "onKeyDown"), + onInput: /* @__PURE__ */ __name(function onInput(event) { + var _this3 = this; + if (this.typeahead) { + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + var query = event.target.value; + if (!this.multiple) { + this.updateModel(event, query); + } + if (query.length === 0) { + this.hide(); + this.$emit("clear"); + } else { + if (query.length >= this.minLength) { + this.focusedOptionIndex = -1; + this.searchTimeout = setTimeout(function() { + _this3.search(event, query, "input"); + }, this.delay); + } else { + this.hide(); + } + } + } + }, "onInput"), + onChange: /* @__PURE__ */ __name(function onChange(event) { + var _this4 = this; + if (this.forceSelection) { + var valid = false; + if (this.visibleOptions && !this.multiple) { + var value = this.multiple ? this.$refs.focusInput.value : this.$refs.focusInput.$el.value; + var matchedValue = this.visibleOptions.find(function(option2) { + return _this4.isOptionMatched(option2, value || ""); + }); + if (matchedValue !== void 0) { + valid = true; + !this.isSelected(matchedValue) && this.onOptionSelect(event, matchedValue); + } + } + if (!valid) { + if (this.multiple) this.$refs.focusInput.value = ""; + else this.$refs.focusInput.$el.value = ""; + this.$emit("clear"); + !this.multiple && this.updateModel(event, null); + } + } + }, "onChange"), + onMultipleContainerFocus: /* @__PURE__ */ __name(function onMultipleContainerFocus() { + if (this.disabled) { + return; + } + this.focused = true; + }, "onMultipleContainerFocus"), + onMultipleContainerBlur: /* @__PURE__ */ __name(function onMultipleContainerBlur() { + this.focusedMultipleOptionIndex = -1; + this.focused = false; + }, "onMultipleContainerBlur"), + onMultipleContainerKeyDown: /* @__PURE__ */ __name(function onMultipleContainerKeyDown(event) { + if (this.disabled) { + event.preventDefault(); + return; + } + switch (event.code) { + case "ArrowLeft": + this.onArrowLeftKeyOnMultiple(event); + break; + case "ArrowRight": + this.onArrowRightKeyOnMultiple(event); + break; + case "Backspace": + this.onBackspaceKeyOnMultiple(event); + break; + } + }, "onMultipleContainerKeyDown"), + onContainerClick: /* @__PURE__ */ __name(function onContainerClick(event) { + this.clicked = true; + if (this.disabled || this.searching || this.loading || this.isInputClicked(event) || this.isDropdownClicked(event)) { + return; + } + if (!this.overlay || !this.overlay.contains(event.target)) { + focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el); + } + }, "onContainerClick"), + onDropdownClick: /* @__PURE__ */ __name(function onDropdownClick(event) { + var query = void 0; + if (this.overlayVisible) { + this.hide(true); + } else { + var target = this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el; + focus(target); + query = target.value; + if (this.dropdownMode === "blank") this.search(event, "", "dropdown"); + else if (this.dropdownMode === "current") this.search(event, query, "dropdown"); + } + this.$emit("dropdown-click", { + originalEvent: event, + query + }); + }, "onDropdownClick"), + onOptionSelect: /* @__PURE__ */ __name(function onOptionSelect(event, option2) { + var isHide = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; + var value = this.getOptionValue(option2); + if (this.multiple) { + this.$refs.focusInput.value = ""; + if (!this.isSelected(option2)) { + this.updateModel(event, [].concat(_toConsumableArray$1(this.modelValue || []), [value])); + } + } else { + this.updateModel(event, value); + } + this.$emit("item-select", { + originalEvent: event, + value: option2 + }); + this.$emit("option-select", { + originalEvent: event, + value: option2 + }); + isHide && this.hide(true); + }, "onOptionSelect"), + onOptionMouseMove: /* @__PURE__ */ __name(function onOptionMouseMove(event, index) { + if (this.focusOnHover) { + this.changeFocusedOptionIndex(event, index); + } + }, "onOptionMouseMove"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick(event) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event, + target: this.$el + }); + }, "onOverlayClick"), + onOverlayKeyDown: /* @__PURE__ */ __name(function onOverlayKeyDown(event) { + switch (event.code) { + case "Escape": + this.onEscapeKey(event); + break; + } + }, "onOverlayKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey(event) { + if (!this.overlayVisible) { + return; + } + var optionIndex = this.focusedOptionIndex !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex(); + this.changeFocusedOptionIndex(event, optionIndex); + event.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey(event) { + if (!this.overlayVisible) { + return; + } + if (event.altKey) { + if (this.focusedOptionIndex !== -1) { + this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]); + } + this.overlayVisible && this.hide(); + event.preventDefault(); + } else { + var optionIndex = this.focusedOptionIndex !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex(); + this.changeFocusedOptionIndex(event, optionIndex); + event.preventDefault(); + } + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey2(event) { + var target = event.currentTarget; + this.focusedOptionIndex = -1; + if (this.multiple) { + if (isEmpty(target.value) && this.hasSelectedOption) { + focus(this.$refs.multiContainer); + this.focusedMultipleOptionIndex = this.modelValue.length; + } else { + event.stopPropagation(); + } + } + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey2(event) { + this.focusedOptionIndex = -1; + this.multiple && event.stopPropagation(); + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey2(event) { + var currentTarget = event.currentTarget; + var len = currentTarget.value.length; + currentTarget.setSelectionRange(0, event.shiftKey ? len : 0); + this.focusedOptionIndex = -1; + event.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey2(event) { + var currentTarget = event.currentTarget; + var len = currentTarget.value.length; + currentTarget.setSelectionRange(event.shiftKey ? 0 : len, len); + this.focusedOptionIndex = -1; + event.preventDefault(); + }, "onEndKey"), + onPageUpKey: /* @__PURE__ */ __name(function onPageUpKey2(event) { + this.scrollInView(0); + event.preventDefault(); + }, "onPageUpKey"), + onPageDownKey: /* @__PURE__ */ __name(function onPageDownKey2(event) { + this.scrollInView(this.visibleOptions.length - 1); + event.preventDefault(); + }, "onPageDownKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey2(event) { + if (!this.typeahead) { + if (this.multiple) { + this.updateModel(event, [].concat(_toConsumableArray$1(this.modelValue || []), [event.target.value])); + this.$refs.focusInput.value = ""; + } + } else { + if (!this.overlayVisible) { + this.focusedOptionIndex = -1; + this.onArrowDownKey(event); + } else { + if (this.focusedOptionIndex !== -1) { + this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]); + } + this.hide(); + } + } + }, "onEnterKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey(event) { + this.overlayVisible && this.hide(true); + event.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey(event) { + if (this.focusedOptionIndex !== -1) { + this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]); + } + this.overlayVisible && this.hide(); + }, "onTabKey"), + onBackspaceKey: /* @__PURE__ */ __name(function onBackspaceKey(event) { + if (this.multiple) { + if (isNotEmpty(this.modelValue) && !this.$refs.focusInput.value) { + var removedValue = this.modelValue[this.modelValue.length - 1]; + var newValue = this.modelValue.slice(0, -1); + this.$emit("update:modelValue", newValue); + this.$emit("item-unselect", { + originalEvent: event, + value: removedValue + }); + this.$emit("option-unselect", { + originalEvent: event, + value: removedValue + }); + } + event.stopPropagation(); + } + }, "onBackspaceKey"), + onArrowLeftKeyOnMultiple: /* @__PURE__ */ __name(function onArrowLeftKeyOnMultiple() { + this.focusedMultipleOptionIndex = this.focusedMultipleOptionIndex < 1 ? 0 : this.focusedMultipleOptionIndex - 1; + }, "onArrowLeftKeyOnMultiple"), + onArrowRightKeyOnMultiple: /* @__PURE__ */ __name(function onArrowRightKeyOnMultiple() { + this.focusedMultipleOptionIndex++; + if (this.focusedMultipleOptionIndex > this.modelValue.length - 1) { + this.focusedMultipleOptionIndex = -1; + focus(this.$refs.focusInput); + } + }, "onArrowRightKeyOnMultiple"), + onBackspaceKeyOnMultiple: /* @__PURE__ */ __name(function onBackspaceKeyOnMultiple(event) { + if (this.focusedMultipleOptionIndex !== -1) { + this.removeOption(event, this.focusedMultipleOptionIndex); + } + }, "onBackspaceKeyOnMultiple"), + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + }, "onOverlayEnter"), + onOverlayAfterEnter: /* @__PURE__ */ __name(function onOverlayAfterEnter() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + this.$emit("show"); + }, "onOverlayAfterEnter"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave() { + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.overlay = null; + }, "onOverlayLeave"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave(el) { + ZIndex.clear(el); + }, "onOverlayAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay() { + var target = this.multiple ? this.$refs.multiContainer : this.$refs.focusInput.$el; + if (this.appendTo === "self") { + relativePosition(this.overlay, target); + } else { + this.overlay.style.minWidth = getOuterWidth(target) + "px"; + absolutePosition(this.overlay, target); + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener() { + var _this5 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event) { + if (_this5.overlayVisible && _this5.overlay && _this5.isOutsideClicked(event)) { + _this5.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener() { + var _this6 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function() { + if (_this6.overlayVisible) { + _this6.hide(); + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener() { + var _this7 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this7.overlayVisible && !isTouchDevice()) { + _this7.hide(); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked(event) { + return !this.overlay.contains(event.target) && !this.isInputClicked(event) && !this.isDropdownClicked(event); + }, "isOutsideClicked"), + isInputClicked: /* @__PURE__ */ __name(function isInputClicked(event) { + if (this.multiple) return event.target === this.$refs.multiContainer || this.$refs.multiContainer.contains(event.target); + else return event.target === this.$refs.focusInput.$el; + }, "isInputClicked"), + isDropdownClicked: /* @__PURE__ */ __name(function isDropdownClicked(event) { + return this.$refs.dropdownButton ? event.target === this.$refs.dropdownButton || this.$refs.dropdownButton.contains(event.target) : false; + }, "isDropdownClicked"), + isOptionMatched: /* @__PURE__ */ __name(function isOptionMatched(option2, value) { + var _this$getOptionLabel; + return this.isValidOption(option2) && ((_this$getOptionLabel = this.getOptionLabel(option2)) === null || _this$getOptionLabel === void 0 ? void 0 : _this$getOptionLabel.toLocaleLowerCase(this.searchLocale)) === value.toLocaleLowerCase(this.searchLocale); + }, "isOptionMatched"), + isValidOption: /* @__PURE__ */ __name(function isValidOption(option2) { + return isNotEmpty(option2) && !(this.isOptionDisabled(option2) || this.isOptionGroup(option2)); + }, "isValidOption"), + isValidSelectedOption: /* @__PURE__ */ __name(function isValidSelectedOption(option2) { + return this.isValidOption(option2) && this.isSelected(option2); + }, "isValidSelectedOption"), + isEquals: /* @__PURE__ */ __name(function isEquals(value1, value2) { + return equals(value1, value2, this.equalityKey); + }, "isEquals"), + isSelected: /* @__PURE__ */ __name(function isSelected(option2) { + var _this8 = this; + var optionValue = this.getOptionValue(option2); + return this.multiple ? (this.modelValue || []).some(function(value) { + return _this8.isEquals(value, optionValue); + }) : this.isEquals(this.modelValue, this.getOptionValue(option2)); + }, "isSelected"), + findFirstOptionIndex: /* @__PURE__ */ __name(function findFirstOptionIndex() { + var _this9 = this; + return this.visibleOptions.findIndex(function(option2) { + return _this9.isValidOption(option2); + }); + }, "findFirstOptionIndex"), + findLastOptionIndex: /* @__PURE__ */ __name(function findLastOptionIndex() { + var _this10 = this; + return findLastIndex(this.visibleOptions, function(option2) { + return _this10.isValidOption(option2); + }); + }, "findLastOptionIndex"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex(index) { + var _this11 = this; + var matchedOptionIndex = index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function(option2) { + return _this11.isValidOption(option2); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; + }, "findNextOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex(index) { + var _this12 = this; + var matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function(option2) { + return _this12.isValidOption(option2); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex : index; + }, "findPrevOptionIndex"), + findSelectedOptionIndex: /* @__PURE__ */ __name(function findSelectedOptionIndex() { + var _this13 = this; + return this.hasSelectedOption ? this.visibleOptions.findIndex(function(option2) { + return _this13.isValidSelectedOption(option2); + }) : -1; + }, "findSelectedOptionIndex"), + findFirstFocusedOptionIndex: /* @__PURE__ */ __name(function findFirstFocusedOptionIndex() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex; + }, "findFirstFocusedOptionIndex"), + findLastFocusedOptionIndex: /* @__PURE__ */ __name(function findLastFocusedOptionIndex() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex; + }, "findLastFocusedOptionIndex"), + search: /* @__PURE__ */ __name(function search(event, query, source) { + if (query === void 0 || query === null) { + return; + } + if (source === "input" && query.trim().length === 0) { + return; + } + this.searching = true; + this.$emit("complete", { + originalEvent: event, + query + }); + }, "search"), + removeOption: /* @__PURE__ */ __name(function removeOption(event, index) { + var _this14 = this; + var removedOption = this.modelValue[index]; + var value = this.modelValue.filter(function(_2, i) { + return i !== index; + }).map(function(option2) { + return _this14.getOptionValue(option2); + }); + this.updateModel(event, value); + this.$emit("item-unselect", { + originalEvent: event, + value: removedOption + }); + this.$emit("option-unselect", { + originalEvent: event, + value: removedOption + }); + this.dirty = true; + focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el); + }, "removeOption"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex(event, index) { + if (this.focusedOptionIndex !== index) { + this.focusedOptionIndex = index; + this.scrollInView(); + if (this.selectOnFocus) { + this.onOptionSelect(event, this.visibleOptions[index], false); + } + } + }, "changeFocusedOptionIndex"), + scrollInView: /* @__PURE__ */ __name(function scrollInView2() { + var _this15 = this; + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + this.$nextTick(function() { + var id2 = index !== -1 ? "".concat(_this15.id, "_").concat(index) : _this15.focusedOptionId; + var element = findSingle(_this15.list, 'li[id="'.concat(id2, '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } else if (!_this15.virtualScrollerDisabled) { + _this15.virtualScroller && _this15.virtualScroller.scrollToIndex(index !== -1 ? index : _this15.focusedOptionIndex); + } + }); + }, "scrollInView"), + autoUpdateModel: /* @__PURE__ */ __name(function autoUpdateModel() { + if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption) { + this.focusedOptionIndex = this.findFirstFocusedOptionIndex(); + this.onOptionSelect(null, this.visibleOptions[this.focusedOptionIndex], false); + } + }, "autoUpdateModel"), + updateModel: /* @__PURE__ */ __name(function updateModel(event, value) { + this.$emit("update:modelValue", value); + this.$emit("change", { + originalEvent: event, + value + }); + }, "updateModel"), + flatOptions: /* @__PURE__ */ __name(function flatOptions(options) { + var _this16 = this; + return (options || []).reduce(function(result, option2, index) { + result.push({ + optionGroup: option2, + group: true, + index + }); + var optionGroupChildren = _this16.getOptionGroupChildren(option2); + optionGroupChildren && optionGroupChildren.forEach(function(o) { + return result.push(o); + }); + return result; + }, []); + }, "flatOptions"), + overlayRef: /* @__PURE__ */ __name(function overlayRef(el) { + this.overlay = el; + }, "overlayRef"), + listRef: /* @__PURE__ */ __name(function listRef(el, contentRef) { + this.list = el; + contentRef && contentRef(el); + }, "listRef"), + virtualScrollerRef: /* @__PURE__ */ __name(function virtualScrollerRef(el) { + this.virtualScroller = el; + }, "virtualScrollerRef") + }, + computed: { + visibleOptions: /* @__PURE__ */ __name(function visibleOptions() { + return this.optionGroupLabel ? this.flatOptions(this.suggestions) : this.suggestions || []; + }, "visibleOptions"), + inputValue: /* @__PURE__ */ __name(function inputValue() { + if (isNotEmpty(this.modelValue)) { + if (_typeof$1$1(this.modelValue) === "object") { + var label = this.getOptionLabel(this.modelValue); + return label != null ? label : this.modelValue; + } else { + return this.modelValue; + } + } else { + return ""; + } + }, "inputValue"), + hasSelectedOption: /* @__PURE__ */ __name(function hasSelectedOption() { + return isNotEmpty(this.modelValue); + }, "hasSelectedOption"), + equalityKey: /* @__PURE__ */ __name(function equalityKey() { + return this.dataKey; + }, "equalityKey"), + searchResultMessageText: /* @__PURE__ */ __name(function searchResultMessageText() { + return isNotEmpty(this.visibleOptions) && this.overlayVisible ? this.searchMessageText.replaceAll("{0}", this.visibleOptions.length) : this.emptySearchMessageText; + }, "searchResultMessageText"), + searchMessageText: /* @__PURE__ */ __name(function searchMessageText() { + return this.searchMessage || this.$primevue.config.locale.searchMessage || ""; + }, "searchMessageText"), + emptySearchMessageText: /* @__PURE__ */ __name(function emptySearchMessageText() { + return this.emptySearchMessage || this.$primevue.config.locale.emptySearchMessage || ""; + }, "emptySearchMessageText"), + selectionMessageText: /* @__PURE__ */ __name(function selectionMessageText() { + return this.selectionMessage || this.$primevue.config.locale.selectionMessage || ""; + }, "selectionMessageText"), + emptySelectionMessageText: /* @__PURE__ */ __name(function emptySelectionMessageText() { + return this.emptySelectionMessage || this.$primevue.config.locale.emptySelectionMessage || ""; + }, "emptySelectionMessageText"), + selectedMessageText: /* @__PURE__ */ __name(function selectedMessageText() { + return this.hasSelectedOption ? this.selectionMessageText.replaceAll("{0}", this.multiple ? this.modelValue.length : "1") : this.emptySelectionMessageText; + }, "selectedMessageText"), + listAriaLabel: /* @__PURE__ */ __name(function listAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.listLabel : void 0; + }, "listAriaLabel"), + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId() { + return this.focusedOptionIndex !== -1 ? "".concat(this.id, "_").concat(this.focusedOptionIndex) : null; + }, "focusedOptionId"), + focusedMultipleOptionId: /* @__PURE__ */ __name(function focusedMultipleOptionId() { + return this.focusedMultipleOptionIndex !== -1 ? "".concat(this.id, "_multiple_option_").concat(this.focusedMultipleOptionIndex) : null; + }, "focusedMultipleOptionId"), + ariaSetSize: /* @__PURE__ */ __name(function ariaSetSize() { + var _this17 = this; + return this.visibleOptions.filter(function(option2) { + return !_this17.isOptionGroup(option2); + }).length; + }, "ariaSetSize"), + virtualScrollerDisabled: /* @__PURE__ */ __name(function virtualScrollerDisabled() { + return !this.virtualScrollerOptions; + }, "virtualScrollerDisabled"), + panelId: /* @__PURE__ */ __name(function panelId() { + return this.id + "_panel"; + }, "panelId"), + hasFluid: /* @__PURE__ */ __name(function hasFluid() { + return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid; + }, "hasFluid") + }, + components: { + InputText: script$k, + VirtualScroller: script$l, + Portal: script$m, + ChevronDownIcon: script$n, + SpinnerIcon: script$o, + Chip: script$p + }, + directives: { + ripple: Ripple + } +}; +function _typeof$4(o) { + "@babel/helpers - typeof"; + return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$4(o); +} +__name(_typeof$4, "_typeof$4"); +function ownKeys$3(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +__name(ownKeys$3, "ownKeys$3"); +function _objectSpread$3(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$3(Object(t), true).forEach(function(r2) { + _defineProperty$4(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +__name(_objectSpread$3, "_objectSpread$3"); +function _defineProperty$4(e, r, t) { + return (r = _toPropertyKey$4(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; +} +__name(_defineProperty$4, "_defineProperty$4"); +function _toPropertyKey$4(t) { + var i = _toPrimitive$4(t, "string"); + return "symbol" == _typeof$4(i) ? i : i + ""; +} +__name(_toPropertyKey$4, "_toPropertyKey$4"); +function _toPrimitive$4(t, r) { + if ("object" != _typeof$4(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof$4(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +__name(_toPrimitive$4, "_toPrimitive$4"); +var _hoisted_1$j = ["aria-activedescendant"]; +var _hoisted_2$g = ["id", "aria-label", "aria-setsize", "aria-posinset"]; +var _hoisted_3$e = ["id", "placeholder", "tabindex", "disabled", "aria-label", "aria-labelledby", "aria-expanded", "aria-controls", "aria-activedescendant", "aria-invalid"]; +var _hoisted_4$5 = ["disabled", "aria-expanded", "aria-controls"]; +var _hoisted_5$3 = ["id"]; +var _hoisted_6$2 = ["id", "aria-label"]; +var _hoisted_7$1 = ["id"]; +var _hoisted_8$1 = ["id", "aria-label", "aria-selected", "aria-disabled", "aria-setsize", "aria-posinset", "onClick", "onMousemove", "data-p-selected", "data-p-focus", "data-p-disabled"]; +function render$e(_ctx, _cache, $props, $setup, $data, $options) { + var _component_InputText = resolveComponent("InputText"); + var _component_Chip = resolveComponent("Chip"); + var _component_SpinnerIcon = resolveComponent("SpinnerIcon"); + var _component_VirtualScroller = resolveComponent("VirtualScroller"); + var _component_Portal = resolveComponent("Portal"); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + onClick: _cache[11] || (_cache[11] = function() { + return $options.onContainerClick && $options.onContainerClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [!_ctx.multiple ? (openBlock(), createBlock(_component_InputText, { + key: 0, + ref: "focusInput", + id: _ctx.inputId, + type: "text", + "class": normalizeClass([_ctx.cx("pcInput"), _ctx.inputClass]), + style: normalizeStyle(_ctx.inputStyle), + value: $options.inputValue, + placeholder: _ctx.placeholder, + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + fluid: $options.hasFluid, + disabled: _ctx.disabled, + invalid: _ctx.invalid, + variant: _ctx.variant, + autocomplete: "off", + role: "combobox", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-haspopup": "listbox", + "aria-autocomplete": "list", + "aria-expanded": $data.overlayVisible, + "aria-controls": $options.panelId, + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onInput: $options.onInput, + onChange: $options.onChange, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcInput") + }, null, 8, ["id", "class", "style", "value", "placeholder", "tabindex", "fluid", "disabled", "invalid", "variant", "aria-label", "aria-labelledby", "aria-expanded", "aria-controls", "aria-activedescendant", "onFocus", "onBlur", "onKeydown", "onInput", "onChange", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.multiple ? (openBlock(), createElementBlock("ul", mergeProps({ + key: 1, + ref: "multiContainer", + "class": _ctx.cx("inputMultiple"), + tabindex: "-1", + role: "listbox", + "aria-orientation": "horizontal", + "aria-activedescendant": $data.focused ? $options.focusedMultipleOptionId : void 0, + onFocus: _cache[5] || (_cache[5] = function() { + return $options.onMultipleContainerFocus && $options.onMultipleContainerFocus.apply($options, arguments); + }), + onBlur: _cache[6] || (_cache[6] = function() { + return $options.onMultipleContainerBlur && $options.onMultipleContainerBlur.apply($options, arguments); + }), + onKeydown: _cache[7] || (_cache[7] = function() { + return $options.onMultipleContainerKeyDown && $options.onMultipleContainerKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("inputMultiple")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.modelValue, function(option2, i) { + return openBlock(), createElementBlock("li", mergeProps({ + key: "".concat(i, "_").concat($options.getOptionLabel(option2)), + id: $data.id + "_multiple_option_" + i, + "class": _ctx.cx("chipItem", { + i + }), + role: "option", + "aria-label": $options.getOptionLabel(option2), + "aria-selected": true, + "aria-setsize": _ctx.modelValue.length, + "aria-posinset": i + 1, + ref_for: true + }, _ctx.ptm("chipItem")), [renderSlot(_ctx.$slots, "chip", mergeProps({ + "class": _ctx.cx("pcChip"), + value: option2, + index: i, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event) { + return $options.removeOption(event, i); + }, "removeCallback"), + ref_for: true + }, _ctx.ptm("pcChip")), function() { + return [createVNode(_component_Chip, { + "class": normalizeClass(_ctx.cx("pcChip")), + label: $options.getOptionLabel(option2), + removeIcon: _ctx.chipIcon || _ctx.removeTokenIcon, + removable: "", + unstyled: _ctx.unstyled, + onRemove: /* @__PURE__ */ __name(function onRemove2($event) { + return $options.removeOption($event, i); + }, "onRemove"), + pt: _ctx.ptm("pcChip") + }, { + removeicon: withCtx(function() { + return [renderSlot(_ctx.$slots, _ctx.$slots.chipicon ? "chipicon" : "removetokenicon", { + "class": normalizeClass(_ctx.cx("chipIcon")), + index: i, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event) { + return $options.removeOption(event, i); + }, "removeCallback") + })]; + }), + _: 2 + }, 1032, ["class", "label", "removeIcon", "unstyled", "onRemove", "pt"])]; + })], 16, _hoisted_2$g); + }), 128)), createBaseVNode("li", mergeProps({ + "class": _ctx.cx("inputChip"), + role: "option" + }, _ctx.ptm("inputChip")), [createBaseVNode("input", mergeProps({ + ref: "focusInput", + id: _ctx.inputId, + type: "text", + style: _ctx.inputStyle, + "class": _ctx.inputClass, + placeholder: _ctx.placeholder, + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + disabled: _ctx.disabled, + autocomplete: "off", + role: "combobox", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-haspopup": "listbox", + "aria-autocomplete": "list", + "aria-expanded": $data.overlayVisible, + "aria-controls": $data.id + "_list", + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + "aria-invalid": _ctx.invalid || void 0, + onFocus: _cache[0] || (_cache[0] = function() { + return $options.onFocus && $options.onFocus.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }), + onInput: _cache[3] || (_cache[3] = function() { + return $options.onInput && $options.onInput.apply($options, arguments); + }), + onChange: _cache[4] || (_cache[4] = function() { + return $options.onChange && $options.onChange.apply($options, arguments); + }) + }, _ctx.ptm("input")), null, 16, _hoisted_3$e)], 16)], 16, _hoisted_1$j)) : createCommentVNode("", true), $data.searching || _ctx.loading ? renderSlot(_ctx.$slots, _ctx.$slots.loader ? "loader" : "loadingicon", { + key: 2, + "class": normalizeClass(_ctx.cx("loader")) + }, function() { + return [_ctx.loader || _ctx.loadingIcon ? (openBlock(), createElementBlock("i", mergeProps({ + key: 0, + "class": ["pi-spin", _ctx.cx("loader"), _ctx.loader, _ctx.loadingIcon], + "aria-hidden": "true" + }, _ctx.ptm("loader")), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({ + key: 1, + "class": _ctx.cx("loader"), + spin: "", + "aria-hidden": "true" + }, _ctx.ptm("loader")), null, 16, ["class"]))]; + }) : createCommentVNode("", true), renderSlot(_ctx.$slots, _ctx.$slots.dropdown ? "dropdown" : "dropdownbutton", { + toggleCallback: /* @__PURE__ */ __name(function toggleCallback(event) { + return $options.onDropdownClick(event); + }, "toggleCallback") + }, function() { + return [_ctx.dropdown ? (openBlock(), createElementBlock("button", mergeProps({ + key: 0, + ref: "dropdownButton", + type: "button", + "class": [_ctx.cx("dropdown"), _ctx.dropdownClass], + disabled: _ctx.disabled, + "aria-haspopup": "listbox", + "aria-expanded": $data.overlayVisible, + "aria-controls": $options.panelId, + onClick: _cache[8] || (_cache[8] = function() { + return $options.onDropdownClick && $options.onDropdownClick.apply($options, arguments); + }) + }, _ctx.ptm("dropdown")), [renderSlot(_ctx.$slots, "dropdownicon", { + "class": normalizeClass(_ctx.dropdownIcon) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.dropdownIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": _ctx.dropdownIcon + }, _ctx.ptm("dropdownIcon")), null, 16, ["class"]))]; + })], 16, _hoisted_4$5)) : createCommentVNode("", true)]; + }), createBaseVNode("span", mergeProps({ + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenSearchResult"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.searchResultMessageText), 17), createVNode(_component_Portal, { + appendTo: _ctx.appendTo + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onOverlayEnter, + onAfterEnter: $options.onOverlayAfterEnter, + onLeave: $options.onOverlayLeave, + onAfterLeave: $options.onOverlayAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + id: $options.panelId, + "class": [_ctx.cx("overlay"), _ctx.panelClass, _ctx.overlayClass], + style: _objectSpread$3(_objectSpread$3(_objectSpread$3({}, _ctx.panelStyle), _ctx.overlayStyle), {}, { + "max-height": $options.virtualScrollerDisabled ? _ctx.scrollHeight : "" + }), + onClick: _cache[9] || (_cache[9] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }), + onKeydown: _cache[10] || (_cache[10] = function() { + return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("overlay")), [renderSlot(_ctx.$slots, "header", { + value: _ctx.modelValue, + suggestions: $options.visibleOptions + }), createVNode(_component_VirtualScroller, mergeProps({ + ref: $options.virtualScrollerRef + }, _ctx.virtualScrollerOptions, { + style: { + height: _ctx.scrollHeight + }, + items: $options.visibleOptions, + tabindex: -1, + disabled: $options.virtualScrollerDisabled, + pt: _ctx.ptm("virtualScroller") + }), createSlots({ + content: withCtx(function(_ref) { + var styleClass = _ref.styleClass, contentRef = _ref.contentRef, items = _ref.items, getItemOptions = _ref.getItemOptions, contentStyle = _ref.contentStyle, itemSize = _ref.itemSize; + return [createBaseVNode("ul", mergeProps({ + ref: /* @__PURE__ */ __name(function ref2(el) { + return $options.listRef(el, contentRef); + }, "ref"), + id: $data.id + "_list", + "class": [_ctx.cx("list"), styleClass], + style: contentStyle, + role: "listbox", + "aria-label": $options.listAriaLabel + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList(items, function(option2, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getOptionRenderKey(option2, $options.getOptionIndex(i, getItemOptions)) + }, [$options.isOptionGroup(option2) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $data.id + "_" + $options.getOptionIndex(i, getItemOptions), + style: { + height: itemSize ? itemSize + "px" : void 0 + }, + "class": _ctx.cx("optionGroup"), + role: "option", + ref_for: true + }, _ctx.ptm("optionGroup")), [renderSlot(_ctx.$slots, "optiongroup", { + option: option2.optionGroup, + index: $options.getOptionIndex(i, getItemOptions) + }, function() { + return [createTextVNode(toDisplayString($options.getOptionGroupLabel(option2.optionGroup)), 1)]; + })], 16, _hoisted_7$1)) : withDirectives((openBlock(), createElementBlock("li", mergeProps({ + key: 1, + id: $data.id + "_" + $options.getOptionIndex(i, getItemOptions), + style: { + height: itemSize ? itemSize + "px" : void 0 + }, + "class": _ctx.cx("option", { + option: option2, + i, + getItemOptions + }), + role: "option", + "aria-label": $options.getOptionLabel(option2), + "aria-selected": $options.isSelected(option2), + "aria-disabled": $options.isOptionDisabled(option2), + "aria-setsize": $options.ariaSetSize, + "aria-posinset": $options.getAriaPosInset($options.getOptionIndex(i, getItemOptions)), + onClick: /* @__PURE__ */ __name(function onClick2($event) { + return $options.onOptionSelect($event, option2); + }, "onClick"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onOptionMouseMove($event, $options.getOptionIndex(i, getItemOptions)); + }, "onMousemove"), + "data-p-selected": $options.isSelected(option2), + "data-p-focus": $data.focusedOptionIndex === $options.getOptionIndex(i, getItemOptions), + "data-p-disabled": $options.isOptionDisabled(option2), + ref_for: true + }, $options.getPTOptions(option2, getItemOptions, i, "option")), [renderSlot(_ctx.$slots, "option", { + option: option2, + index: $options.getOptionIndex(i, getItemOptions) + }, function() { + return [createTextVNode(toDisplayString($options.getOptionLabel(option2)), 1)]; + })], 16, _hoisted_8$1)), [[_directive_ripple]])], 64); + }), 128)), !items || items && items.length === 0 ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": _ctx.cx("emptyMessage"), + role: "option" + }, _ctx.ptm("emptyMessage")), [renderSlot(_ctx.$slots, "empty", {}, function() { + return [createTextVNode(toDisplayString($options.searchResultMessageText), 1)]; + })], 16)) : createCommentVNode("", true)], 16, _hoisted_6$2)]; + }), + _: 2 + }, [_ctx.$slots.loader ? { + name: "loader", + fn: withCtx(function(_ref2) { + var options = _ref2.options; + return [renderSlot(_ctx.$slots, "loader", { + options + })]; + }), + key: "0" + } : void 0]), 1040, ["style", "items", "disabled", "pt"]), renderSlot(_ctx.$slots, "footer", { + value: _ctx.modelValue, + suggestions: $options.visibleOptions + }), createBaseVNode("span", mergeProps({ + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenSelectedMessage"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.selectedMessageText), 17)], 16, _hoisted_5$3)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo"])], 16); +} +__name(render$e, "render$e"); +script$8.render = render$e; +const _sfc_main$j = { + name: "AutoCompletePlus", + extends: script$8, + emits: ["focused-option-changed"], + mounted() { + if (typeof script$8.mounted === "function") { + script$8.mounted.call(this); + } + this.$watch( + () => this.focusedOptionIndex, + (newVal, oldVal) => { + this.$emit("focused-option-changed", newVal); + } + ); + } +}; +const _withScopeId$4 = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-d7cc0bce"), n = n(), popScopeId(), n), "_withScopeId$4"); +const _hoisted_1$i = { class: "option-container flex justify-between items-center px-2 py-0 cursor-pointer overflow-hidden w-full" }; +const _hoisted_2$f = { class: "option-display-name font-semibold flex flex-col" }; +const _hoisted_3$d = { key: 0 }; +const _hoisted_4$4 = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ createBaseVNode("i", { class: "pi pi-bookmark-fill text-sm mr-1" }, null, -1)); +const _hoisted_5$2 = [ + _hoisted_4$4 +]; +const _hoisted_6$1 = ["innerHTML"]; +const _hoisted_7 = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ createBaseVNode("span", null, " ", -1)); +const _hoisted_8 = ["innerHTML"]; +const _hoisted_9 = { + key: 0, + class: "option-category font-light text-sm text-gray-400 overflow-hidden text-ellipsis whitespace-nowrap" +}; +const _hoisted_10 = { class: "option-badges" }; +const _sfc_main$i = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchItem", + props: { + nodeDef: {}, + currentQuery: {} + }, + setup(__props) { + const settingStore = useSettingStore(); + const showCategory = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowCategory") + ); + const showIdName = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowIdName") + ); + const showNodeFrequency = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowNodeFrequency") + ); + const nodeFrequencyStore = useNodeFrequencyStore(); + const nodeFrequency = computed( + () => nodeFrequencyStore.getNodeFrequency(props.nodeDef) + ); + const nodeBookmarkStore = useNodeBookmarkStore(); + const isBookmarked = computed( + () => nodeBookmarkStore.isBookmarked(props.nodeDef) + ); + const props = __props; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$i, [ + createBaseVNode("div", _hoisted_2$f, [ + createBaseVNode("div", null, [ + isBookmarked.value ? (openBlock(), createElementBlock("span", _hoisted_3$d, _hoisted_5$2)) : createCommentVNode("", true), + createBaseVNode("span", { + innerHTML: unref(highlightQuery)(_ctx.nodeDef.display_name, _ctx.currentQuery) + }, null, 8, _hoisted_6$1), + _hoisted_7, + showIdName.value ? (openBlock(), createBlock(unref(script$q), { + key: 1, + severity: "secondary" + }, { + default: withCtx(() => [ + createBaseVNode("span", { + innerHTML: unref(highlightQuery)(_ctx.nodeDef.name, _ctx.currentQuery) + }, null, 8, _hoisted_8) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + showCategory.value ? (openBlock(), createElementBlock("div", _hoisted_9, toDisplayString(_ctx.nodeDef.category.replaceAll("/", " > ")), 1)) : createCommentVNode("", true) + ]), + createBaseVNode("div", _hoisted_10, [ + _ctx.nodeDef.experimental ? (openBlock(), createBlock(unref(script$q), { + key: 0, + value: _ctx.$t("g.experimental"), + severity: "primary" + }, null, 8, ["value"])) : createCommentVNode("", true), + _ctx.nodeDef.deprecated ? (openBlock(), createBlock(unref(script$q), { + key: 1, + value: _ctx.$t("g.deprecated"), + severity: "danger" + }, null, 8, ["value"])) : createCommentVNode("", true), + showNodeFrequency.value && nodeFrequency.value > 0 ? (openBlock(), createBlock(unref(script$q), { + key: 2, + value: unref(formatNumberWithSuffix)(nodeFrequency.value, { roundToInt: true }), + severity: "secondary" + }, null, 8, ["value"])) : createCommentVNode("", true), + _ctx.nodeDef.nodeSource.type !== unref(NodeSourceType).Unknown ? (openBlock(), createBlock(unref(script$p), { + key: 3, + class: "text-sm font-light" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.nodeDef.nodeSource.displayText), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]); + }; + } +}); +const NodeSearchItem = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-d7cc0bce"]]); +const _hoisted_1$h = { class: "comfy-vue-node-search-container flex justify-center items-center w-full min-w-96 pointer-events-auto" }; +const _hoisted_2$e = { + key: 0, + class: "comfy-vue-node-preview-container absolute left-[-350px] top-[50px]" +}; +const _hoisted_3$c = /* @__PURE__ */ createBaseVNode("h3", null, "Add node filter condition", -1); +const _hoisted_4$3 = { class: "_dialog-body" }; +const _sfc_main$h = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchBox", + props: { + filters: {}, + searchLimit: { default: 64 } + }, + emits: ["addFilter", "removeFilter", "addNode"], + setup(__props, { emit: __emit }) { + const settingStore = useSettingStore(); + const { t } = useI18n(); + const enableNodePreview = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.NodePreview") + ); + const props = __props; + const nodeSearchFilterVisible = ref(false); + const inputId = `comfy-vue-node-search-box-input-${Math.random()}`; + const suggestions2 = ref([]); + const hoveredSuggestion = ref(null); + const currentQuery = ref(""); + const placeholder = computed(() => { + return props.filters.length === 0 ? t("g.searchNodes") + "..." : ""; + }); + const nodeDefStore = useNodeDefStore(); + const nodeFrequencyStore = useNodeFrequencyStore(); + const search2 = /* @__PURE__ */ __name((query) => { + const queryIsEmpty = query === "" && props.filters.length === 0; + currentQuery.value = query; + suggestions2.value = queryIsEmpty ? nodeFrequencyStore.topNodeDefs : [ + ...nodeDefStore.nodeSearchService.searchNode(query, props.filters, { + limit: props.searchLimit + }) + ]; + }, "search"); + const emit = __emit; + const reFocusInput = /* @__PURE__ */ __name(() => { + const inputElement = document.getElementById(inputId); + if (inputElement) { + inputElement.blur(); + inputElement.focus(); + } + }, "reFocusInput"); + onMounted(reFocusInput); + const onAddFilter = /* @__PURE__ */ __name((filterAndValue) => { + nodeSearchFilterVisible.value = false; + emit("addFilter", filterAndValue); + reFocusInput(); + }, "onAddFilter"); + const onRemoveFilter = /* @__PURE__ */ __name((event, filterAndValue) => { + event.stopPropagation(); + event.preventDefault(); + emit("removeFilter", filterAndValue); + reFocusInput(); + }, "onRemoveFilter"); + const setHoverSuggestion = /* @__PURE__ */ __name((index) => { + if (index === -1) { + hoveredSuggestion.value = null; + return; + } + const value = suggestions2.value[index]; + hoveredSuggestion.value = value; + }, "setHoverSuggestion"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$h, [ + enableNodePreview.value ? (openBlock(), createElementBlock("div", _hoisted_2$e, [ + hoveredSuggestion.value ? (openBlock(), createBlock(NodePreview, { + nodeDef: hoveredSuggestion.value, + key: hoveredSuggestion.value?.name || "" + }, null, 8, ["nodeDef"])) : createCommentVNode("", true) + ])) : createCommentVNode("", true), + createVNode(unref(script$f), { + icon: "pi pi-filter", + severity: "secondary", + class: "filter-button z-10", + onClick: _cache[0] || (_cache[0] = ($event) => nodeSearchFilterVisible.value = true) + }), + createVNode(unref(script$r), { + visible: nodeSearchFilterVisible.value, + "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => nodeSearchFilterVisible.value = $event), + class: "min-w-96" + }, { + header: withCtx(() => [ + _hoisted_3$c + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_4$3, [ + createVNode(NodeSearchFilter, { onAddFilter }) + ]) + ]), + _: 1 + }, 8, ["visible"]), + createVNode(_sfc_main$j, { + "model-value": props.filters, + class: "comfy-vue-node-search-box z-10 flex-grow", + scrollHeight: "40vh", + placeholder: placeholder.value, + "input-id": inputId, + "append-to": "self", + suggestions: suggestions2.value, + "min-length": 0, + delay: 100, + loading: !unref(nodeFrequencyStore).isLoaded, + onComplete: _cache[2] || (_cache[2] = ($event) => search2($event.query)), + onOptionSelect: _cache[3] || (_cache[3] = ($event) => emit("addNode", $event.value)), + onFocusedOptionChanged: _cache[4] || (_cache[4] = ($event) => setHoverSuggestion($event)), + "complete-on-focus": "", + "auto-option-focus": "", + "force-selection": "", + multiple: "", + optionLabel: "display_name" + }, { + option: withCtx(({ option: option2 }) => [ + createVNode(NodeSearchItem, { + nodeDef: option2, + currentQuery: currentQuery.value + }, null, 8, ["nodeDef", "currentQuery"]) + ]), + chip: withCtx(({ value }) => [ + createVNode(SearchFilterChip, { + onRemove: /* @__PURE__ */ __name(($event) => onRemoveFilter($event, value), "onRemove"), + text: value[1], + badge: value[0].invokeSequence.toUpperCase(), + "badge-class": value[0].invokeSequence + "-badge" + }, null, 8, ["onRemove", "text", "badge", "badge-class"]) + ]), + _: 1 + }, 8, ["model-value", "placeholder", "suggestions", "loading"]) + ]); + }; + } +}); +class ConnectingLinkImpl { + static { + __name(this, "ConnectingLinkImpl"); + } + constructor(node, slot, input, output, pos, afterRerouteId) { + this.node = node; + this.slot = slot; + this.input = input; + this.output = output; + this.pos = pos; + this.afterRerouteId = afterRerouteId; + } + static createFromPlainObject(obj) { + return new ConnectingLinkImpl( + obj.node, + obj.slot, + obj.input, + obj.output, + obj.pos, + obj.afterRerouteId + ); + } + get type() { + const result = this.input ? this.input.type : this.output?.type ?? null; + return result === -1 ? null : result; + } + /** + * Which slot type is release and need to be reconnected. + * - 'output' means we need a new node's outputs slot to connect with this link + */ + get releaseSlotType() { + return this.output ? "input" : "output"; + } + connectTo(newNode) { + const newNodeSlots = this.releaseSlotType === "output" ? newNode.outputs : newNode.inputs; + if (!newNodeSlots) return; + const newNodeSlot = newNodeSlots.findIndex( + (slot) => LiteGraph.isValidConnection(slot.type, this.type) + ); + if (newNodeSlot === -1) { + console.warn( + `Could not find slot with type ${this.type} on node ${newNode.title}. This should never happen` + ); + return; + } + if (this.releaseSlotType === "input") { + this.node.connect(this.slot, newNode, newNodeSlot, this.afterRerouteId); + } else { + newNode.connect(newNodeSlot, this.node, this.slot, this.afterRerouteId); + } + } +} +const useSearchBoxStore = defineStore("searchBox", () => { + const visible = ref(false); + function toggleVisible() { + visible.value = !visible.value; + } + __name(toggleVisible, "toggleVisible"); + return { + visible, + toggleVisible + }; +}); +const _sfc_main$g = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchBoxPopover", + setup(__props) { + const settingStore = useSettingStore(); + const { visible } = storeToRefs(useSearchBoxStore()); + const dismissable = ref(true); + const triggerEvent = ref(null); + const getNewNodeLocation = /* @__PURE__ */ __name(() => { + if (!triggerEvent.value) { + return app.getCanvasCenter(); + } + const originalEvent = triggerEvent.value.detail.originalEvent; + return [originalEvent.canvasX, originalEvent.canvasY]; + }, "getNewNodeLocation"); + const nodeFilters = ref([]); + const addFilter = /* @__PURE__ */ __name((filter) => { + nodeFilters.value.push(filter); + }, "addFilter"); + const removeFilter = /* @__PURE__ */ __name((filter) => { + nodeFilters.value = nodeFilters.value.filter( + (f) => toRaw(f) !== toRaw(filter) + ); + }, "removeFilter"); + const clearFilters = /* @__PURE__ */ __name(() => { + nodeFilters.value = []; + }, "clearFilters"); + const closeDialog = /* @__PURE__ */ __name(() => { + visible.value = false; + }, "closeDialog"); + const addNode = /* @__PURE__ */ __name((nodeDef) => { + const node = app.addNodeOnGraph(nodeDef, { pos: getNewNodeLocation() }); + const eventDetail = triggerEvent.value?.detail; + if (eventDetail && eventDetail.subType === "empty-release") { + eventDetail.linkReleaseContext.links.forEach((link) => { + ConnectingLinkImpl.createFromPlainObject(link).connectTo(node); + }); + } + window.setTimeout(() => { + closeDialog(); + }, 100); + }, "addNode"); + const newSearchBoxEnabled = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl") === "default" + ); + const showSearchBox = /* @__PURE__ */ __name((e) => { + const detail = e.detail; + if (newSearchBoxEnabled.value) { + if (detail.originalEvent?.pointerType === "touch") { + setTimeout(() => { + showNewSearchBox(e); + }, 128); + } else { + showNewSearchBox(e); + } + } else { + canvasStore.canvas.showSearchBox(detail.originalEvent); + } + }, "showSearchBox"); + const nodeDefStore = useNodeDefStore(); + const showNewSearchBox = /* @__PURE__ */ __name((e) => { + if (e.detail.subType === "empty-release") { + const links = e.detail.linkReleaseContext.links; + if (links.length === 0) { + console.warn("Empty release with no links! This should never happen"); + return; + } + const firstLink = ConnectingLinkImpl.createFromPlainObject(links[0]); + const filter = nodeDefStore.nodeSearchService.getFilterById( + firstLink.releaseSlotType + ); + const dataType = firstLink.type.toString(); + addFilter([filter, dataType]); + } + visible.value = true; + triggerEvent.value = e; + dismissable.value = false; + setTimeout(() => { + dismissable.value = true; + }, 300); + }, "showNewSearchBox"); + const showContextMenu = /* @__PURE__ */ __name((e) => { + if (e.detail.subType !== "empty-release") { + return; + } + const links = e.detail.linkReleaseContext.links; + if (links.length === 0) { + console.warn("Empty release with no links! This should never happen"); + return; + } + const firstLink = ConnectingLinkImpl.createFromPlainObject(links[0]); + const mouseEvent = e.detail.originalEvent; + const commonOptions = { + e: mouseEvent, + allow_searchbox: true, + showSearchBox: /* @__PURE__ */ __name(() => showSearchBox(e), "showSearchBox") + }; + const connectionOptions = firstLink.output ? { + nodeFrom: firstLink.node, + slotFrom: firstLink.output, + afterRerouteId: firstLink.afterRerouteId + } : { + nodeTo: firstLink.node, + slotTo: firstLink.input, + afterRerouteId: firstLink.afterRerouteId + }; + canvasStore.canvas.showConnectionMenu({ + ...connectionOptions, + ...commonOptions + }); + }, "showContextMenu"); + const canvasStore = useCanvasStore(); + watchEffect(() => { + if (canvasStore.canvas) { + LiteGraph.release_link_on_empty_shows_menu = false; + canvasStore.canvas.allow_searchbox = false; + } + }); + const canvasEventHandler = /* @__PURE__ */ __name((e) => { + if (e.detail.subType === "empty-double-click") { + showSearchBox(e); + } else if (e.detail.subType === "empty-release") { + handleCanvasEmptyRelease(e); + } else if (e.detail.subType === "group-double-click") { + const group = e.detail.group; + const [x, y] = group.pos; + const relativeY = e.detail.originalEvent.canvasY - y; + if (relativeY > group.titleHeight) { + showSearchBox(e); + } + } + }, "canvasEventHandler"); + const linkReleaseAction = computed(() => { + return settingStore.get("Comfy.LinkRelease.Action"); + }); + const linkReleaseActionShift = computed(() => { + return settingStore.get("Comfy.LinkRelease.ActionShift"); + }); + const handleCanvasEmptyRelease = /* @__PURE__ */ __name((e) => { + const detail = e.detail; + const shiftPressed = detail.originalEvent.shiftKey; + const action = shiftPressed ? linkReleaseActionShift.value : linkReleaseAction.value; + switch (action) { + case LinkReleaseTriggerAction.SEARCH_BOX: + showSearchBox(e); + break; + case LinkReleaseTriggerAction.CONTEXT_MENU: + showContextMenu(e); + break; + case LinkReleaseTriggerAction.NO_ACTION: + default: + break; + } + }, "handleCanvasEmptyRelease"); + useEventListener(document, "litegraph:canvas", canvasEventHandler); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", null, [ + createVNode(unref(script$r), { + visible: unref(visible), + "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => isRef(visible) ? visible.value = $event : null), + modal: "", + "dismissable-mask": dismissable.value, + onHide: clearFilters, + pt: { + root: { + class: "invisible-dialog-root", + role: "search" + }, + mask: { class: "node-search-box-dialog-mask" }, + transition: { + enterFromClass: "opacity-0 scale-75", + // 100ms is the duration of the transition in the dialog component + enterActiveClass: "transition-all duration-100 ease-out", + leaveActiveClass: "transition-all duration-100 ease-in", + leaveToClass: "opacity-0 scale-75" + } + } + }, { + container: withCtx(() => [ + createVNode(_sfc_main$h, { + filters: nodeFilters.value, + onAddFilter: addFilter, + onRemoveFilter: removeFilter, + onAddNode: addNode + }, null, 8, ["filters"]) + ]), + _: 1 + }, 8, ["visible", "dismissable-mask"]) + ]); + }; + } +}); +const _sfc_main$f = /* @__PURE__ */ defineComponent({ + __name: "NodeTooltip", + setup(__props) { + let idleTimeout; + const nodeDefStore = useNodeDefStore(); + const tooltipRef = ref(); + const tooltipText = ref(""); + const left = ref(); + const top = ref(); + const hideTooltip = /* @__PURE__ */ __name(() => tooltipText.value = null, "hideTooltip"); + const showTooltip = /* @__PURE__ */ __name(async (tooltip) => { + if (!tooltip) return; + left.value = app.canvas.mouse[0] + "px"; + top.value = app.canvas.mouse[1] + "px"; + tooltipText.value = tooltip; + await nextTick(); + const rect = tooltipRef.value.getBoundingClientRect(); + if (rect.right > window.innerWidth) { + left.value = app.canvas.mouse[0] - rect.width + "px"; + } + if (rect.top < 0) { + top.value = app.canvas.mouse[1] + rect.height + "px"; + } + }, "showTooltip"); + const onIdle = /* @__PURE__ */ __name(() => { + const { canvas } = app; + const node = canvas.node_over; + if (!node) return; + const ctor = node.constructor; + const nodeDef = nodeDefStore.nodeDefsByName[node.type]; + if (ctor.title_mode !== LiteGraph.NO_TITLE && canvas.graph_mouse[1] < node.pos[1]) { + return showTooltip(nodeDef.description); + } + if (node.flags?.collapsed) return; + const inputSlot = canvas.isOverNodeInput( + node, + canvas.graph_mouse[0], + canvas.graph_mouse[1], + [0, 0] + ); + if (inputSlot !== -1) { + const inputName = node.inputs[inputSlot].name; + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.inputs.${normalizeI18nKey(inputName)}.tooltip`, + nodeDef.inputs.getInput(inputName)?.tooltip + ); + return showTooltip(translatedTooltip); + } + const outputSlot = canvas.isOverNodeOutput( + node, + canvas.graph_mouse[0], + canvas.graph_mouse[1], + [0, 0] + ); + if (outputSlot !== -1) { + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.outputs.${outputSlot}.tooltip`, + nodeDef.outputs.all?.[outputSlot]?.tooltip + ); + return showTooltip(translatedTooltip); + } + const widget = app.canvas.getWidgetAtCursor(); + if (widget && !widget.element) { + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.inputs.${normalizeI18nKey(widget.name)}.tooltip`, + nodeDef.inputs.getInput(widget.name)?.tooltip + ); + return showTooltip(widget.tooltip ?? translatedTooltip); + } + }, "onIdle"); + const onMouseMove = /* @__PURE__ */ __name((e) => { + hideTooltip(); + clearTimeout(idleTimeout); + if (e.target.nodeName !== "CANVAS") return; + idleTimeout = window.setTimeout(onIdle, 500); + }, "onMouseMove"); + useEventListener(window, "mousemove", onMouseMove); + useEventListener(window, "click", hideTooltip); + return (_ctx, _cache) => { + return tooltipText.value ? (openBlock(), createElementBlock("div", { + key: 0, + ref_key: "tooltipRef", + ref: tooltipRef, + class: "node-tooltip", + style: normalizeStyle({ left: left.value, top: top.value }) + }, toDisplayString(tooltipText.value), 5)) : createCommentVNode("", true); + }; + } +}); +const NodeTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-9ecc8adc"]]); +const _sfc_main$e = /* @__PURE__ */ defineComponent({ + __name: "NodeBadge", + setup(__props) { + const settingStore = useSettingStore(); + const nodeSourceBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeSourceBadgeMode") + ); + const nodeIdBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeIdBadgeMode") + ); + const nodeLifeCycleBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeLifeCycleBadgeMode") + ); + watch([nodeSourceBadgeMode, nodeIdBadgeMode, nodeLifeCycleBadgeMode], () => { + app.graph?.setDirtyCanvas(true, true); + }); + const colorPalette = computed( + () => getColorPalette(settingStore.get("Comfy.ColorPalette")) + ); + const nodeDefStore = useNodeDefStore(); + function badgeTextVisible(nodeDef, badgeMode) { + return !(badgeMode === NodeBadgeMode.None || nodeDef?.isCoreNode && badgeMode === NodeBadgeMode.HideBuiltIn); + } + __name(badgeTextVisible, "badgeTextVisible"); + onMounted(() => { + app.registerExtension({ + name: "Comfy.NodeBadge", + nodeCreated(node) { + node.badgePosition = BadgePosition.TopRight; + const badge = computed(() => { + const nodeDef = nodeDefStore.fromLGraphNode(node); + return new LGraphBadge({ + text: _.truncate( + [ + badgeTextVisible(nodeDef, nodeIdBadgeMode.value) ? `#${node.id}` : "", + badgeTextVisible(nodeDef, nodeLifeCycleBadgeMode.value) ? nodeDef?.nodeLifeCycleBadgeText ?? "" : "", + badgeTextVisible(nodeDef, nodeSourceBadgeMode.value) ? nodeDef?.nodeSource?.badgeText ?? "" : "" + ].filter((s) => s.length > 0).join(" "), + { + length: 31 + } + ), + fgColor: colorPalette.value?.colors?.litegraph_base?.BADGE_FG_COLOR || defaultColorPalette.colors.litegraph_base.BADGE_FG_COLOR, + bgColor: colorPalette.value?.colors?.litegraph_base?.BADGE_BG_COLOR || defaultColorPalette.colors.litegraph_base.BADGE_BG_COLOR + }); + }); + node.badges.push(() => badge.value); + } + }); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const _hoisted_1$g = { + viewBox: "0 0 1024 1024", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$d = /* @__PURE__ */ createBaseVNode("path", { + fill: "currentColor", + d: "M921.088 103.232L584.832 889.024L465.52 544.512L121.328 440.48zM1004.46.769c-6.096 0-13.52 1.728-22.096 5.36L27.708 411.2c-34.383 14.592-36.56 42.704-4.847 62.464l395.296 123.584l129.36 403.264c9.28 15.184 20.496 22.72 31.263 22.72c11.936 0 23.296-9.152 31.04-27.248l408.272-953.728C1029.148 16.368 1022.86.769 1004.46.769" +}, null, -1); +const _hoisted_3$b = [ + _hoisted_2$d +]; +function render$d(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$g, [..._hoisted_3$b]); +} +__name(render$d, "render$d"); +const __unplugin_components_1$2 = markRaw({ name: "simple-line-icons-cursor", render: render$d }); +const _hoisted_1$f = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$c = /* @__PURE__ */ createBaseVNode("path", { + fill: "currentColor", + d: "M10.05 23q-.75 0-1.4-.337T7.575 21.7L1.2 12.375l.6-.575q.475-.475 1.125-.55t1.175.3L7 13.575V4q0-.425.288-.712T8 3t.713.288T9 4v13.425l-3.7-2.6l3.925 5.725q.125.2.35.325t.475.125H17q.825 0 1.413-.587T19 19V5q0-.425.288-.712T20 4t.713.288T21 5v14q0 1.65-1.175 2.825T17 23zM11 12V2q0-.425.288-.712T12 1t.713.288T13 2v10zm4 0V3q0-.425.288-.712T16 2t.713.288T17 3v9zm-2.85 4.5" +}, null, -1); +const _hoisted_3$a = [ + _hoisted_2$c +]; +function render$c(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$f, [..._hoisted_3$a]); +} +__name(render$c, "render$c"); +const __unplugin_components_0$2 = markRaw({ name: "material-symbols-pan-tool-outline", render: render$c }); +var theme$5 = /* @__PURE__ */ __name(function theme4(_ref) { + _ref.dt; + return "\n.p-buttongroup .p-button {\n margin: 0;\n}\n\n.p-buttongroup .p-button:not(:last-child),\n.p-buttongroup .p-button:not(:last-child):hover {\n border-right: 0 none;\n}\n\n.p-buttongroup .p-button:not(:first-of-type):not(:last-of-type) {\n border-radius: 0;\n}\n\n.p-buttongroup .p-button:first-of-type:not(:only-of-type) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.p-buttongroup .p-button:last-of-type:not(:only-of-type) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.p-buttongroup .p-button:focus {\n position: relative;\n z-index: 1;\n}\n"; +}, "theme"); +var classes$5 = { + root: "p-buttongroup p-component" +}; +var ButtonGroupStyle = BaseStyle.extend({ + name: "buttongroup", + theme: theme$5, + classes: classes$5 +}); +var script$1$5 = { + name: "BaseButtonGroup", + "extends": script$g, + style: ButtonGroupStyle, + provide: /* @__PURE__ */ __name(function provide8() { + return { + $pcButtonGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$7 = { + name: "ButtonGroup", + "extends": script$1$5, + inheritAttrs: false +}; +function render$b(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("span", mergeProps({ + "class": _ctx.cx("root"), + role: "group" + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$b, "render$b"); +script$7.render = render$b; +const _sfc_main$d = /* @__PURE__ */ defineComponent({ + __name: "GraphCanvasMenu", + setup(__props) { + const { t } = useI18n(); + const commandStore = useCommandStore(); + const canvasStore = useCanvasStore(); + const settingStore = useSettingStore(); + const linkHidden = computed( + () => settingStore.get("Comfy.LinkRenderMode") === LiteGraph.HIDDEN_LINK + ); + let interval = null; + const repeat2 = /* @__PURE__ */ __name((command) => { + if (interval) return; + const cmd = /* @__PURE__ */ __name(() => commandStore.execute(command), "cmd"); + cmd(); + interval = window.setInterval(cmd, 100); + }, "repeat"); + const stopRepeat = /* @__PURE__ */ __name(() => { + if (interval) { + clearInterval(interval); + interval = null; + } + }, "stopRepeat"); + return (_ctx, _cache) => { + const _component_i_material_symbols58pan_tool_outline = __unplugin_components_0$2; + const _component_i_simple_line_icons58cursor = __unplugin_components_1$2; + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(unref(script$7), { class: "p-buttongroup-vertical absolute bottom-[10px] right-[10px] z-[1000] pointer-events-auto" }, { + default: withCtx(() => [ + withDirectives(createVNode(unref(script$f), { + severity: "secondary", + icon: "pi pi-plus", + onMousedown: _cache[0] || (_cache[0] = ($event) => repeat2("Comfy.Canvas.ZoomIn")), + onMouseup: stopRepeat + }, null, 512), [ + [ + _directive_tooltip, + unref(t)("graphCanvasMenu.zoomIn"), + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script$f), { + severity: "secondary", + icon: "pi pi-minus", + onMousedown: _cache[1] || (_cache[1] = ($event) => repeat2("Comfy.Canvas.ZoomOut")), + onMouseup: stopRepeat + }, null, 512), [ + [ + _directive_tooltip, + unref(t)("graphCanvasMenu.zoomOut"), + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script$f), { + severity: "secondary", + icon: "pi pi-expand", + onClick: _cache[2] || (_cache[2] = () => unref(commandStore).execute("Comfy.Canvas.FitView")) + }, null, 512), [ + [ + _directive_tooltip, + unref(t)("graphCanvasMenu.fitView"), + void 0, + { left: true } + ] + ]), + withDirectives((openBlock(), createBlock(unref(script$f), { + severity: "secondary", + onClick: _cache[3] || (_cache[3] = () => unref(commandStore).execute("Comfy.Canvas.ToggleLock")) + }, { + icon: withCtx(() => [ + unref(canvasStore).canvas?.read_only ? (openBlock(), createBlock(_component_i_material_symbols58pan_tool_outline, { key: 0 })) : (openBlock(), createBlock(_component_i_simple_line_icons58cursor, { key: 1 })) + ]), + _: 1 + })), [ + [ + _directive_tooltip, + unref(t)( + "graphCanvasMenu." + (unref(canvasStore).canvas?.read_only ? "panMode" : "selectMode") + ) + " (Space)", + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script$f), { + severity: "secondary", + icon: linkHidden.value ? "pi pi-eye-slash" : "pi pi-eye", + onClick: _cache[4] || (_cache[4] = () => unref(commandStore).execute("Comfy.Canvas.ToggleLinkVisibility")), + "data-testid": "toggle-link-visibility-button" + }, null, 8, ["icon"]), [ + [ + _directive_tooltip, + unref(t)("graphCanvasMenu.toggleLinkVisibility"), + void 0, + { left: true } + ] + ]) + ]), + _: 1 + }); + }; + } +}); +const GraphCanvasMenu = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-94481f39"]]); +const _sfc_main$c = /* @__PURE__ */ defineComponent({ + __name: "GraphCanvas", + emits: ["ready"], + setup(__props, { emit: __emit }) { + const emit = __emit; + const canvasRef = ref(null); + const settingStore = useSettingStore(); + const nodeDefStore = useNodeDefStore(); + const workspaceStore = useWorkspaceStore(); + const canvasStore = useCanvasStore(); + const modelToNodeStore = useModelToNodeStore(); + const betaMenuEnabled = computed( + () => settingStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const canvasMenuEnabled = computed( + () => settingStore.get("Comfy.Graph.CanvasMenu") + ); + const tooltipEnabled = computed(() => settingStore.get("Comfy.EnableTooltips")); + watchEffect(() => { + const canvasInfoEnabled = settingStore.get("Comfy.Graph.CanvasInfo"); + if (canvasStore.canvas) { + canvasStore.canvas.show_info = canvasInfoEnabled; + } + }); + watchEffect(() => { + const zoomSpeed = settingStore.get("Comfy.Graph.ZoomSpeed"); + if (canvasStore.canvas) { + canvasStore.canvas.zoom_speed = zoomSpeed; + } + }); + watchEffect(() => { + LiteGraph.snaps_for_comfy = settingStore.get("Comfy.Node.AutoSnapLinkToSlot"); + }); + watchEffect(() => { + LiteGraph.snap_highlights_node = settingStore.get( + "Comfy.Node.SnapHighlightsNode" + ); + }); + watchEffect(() => { + LGraphNode.keepAllLinksOnBypass = settingStore.get( + "Comfy.Node.BypassAllLinksOnDelete" + ); + }); + watchEffect(() => { + LiteGraph.middle_click_slot_add_default_node = settingStore.get( + "Comfy.Node.MiddleClickRerouteNode" + ); + }); + watchEffect(() => { + nodeDefStore.showDeprecated = settingStore.get("Comfy.Node.ShowDeprecated"); + }); + watchEffect(() => { + nodeDefStore.showExperimental = settingStore.get( + "Comfy.Node.ShowExperimental" + ); + }); + watchEffect(() => { + const spellcheckEnabled = settingStore.get("Comfy.TextareaWidget.Spellcheck"); + const textareas = document.querySelectorAll("textarea.comfy-multiline-input"); + textareas.forEach((textarea) => { + textarea.spellcheck = spellcheckEnabled; + textarea.focus(); + textarea.blur(); + }); + }); + watchEffect(() => { + const linkRenderMode = settingStore.get("Comfy.LinkRenderMode"); + if (canvasStore.canvas) { + canvasStore.canvas.links_render_mode = linkRenderMode; + canvasStore.canvas.setDirty( + /* fg */ + false, + /* bg */ + true + ); + } + }); + watchEffect(() => { + const linkMarkerShape = settingStore.get("Comfy.Graph.LinkMarkers"); + const { canvas } = canvasStore; + if (canvas) { + canvas.linkMarkerShape = linkMarkerShape; + canvas.setDirty(false, true); + } + }); + watchEffect(() => { + const reroutesEnabled = settingStore.get("Comfy.RerouteBeta"); + const { canvas } = canvasStore; + if (canvas) { + canvas.reroutesEnabled = reroutesEnabled; + canvas.setDirty(false, true); + } + }); + watchEffect(() => { + const maximumFps = settingStore.get("LiteGraph.Canvas.MaximumFps"); + const { canvas } = canvasStore; + if (canvas) canvas.maximumFps = maximumFps; + }); + watchEffect(() => { + CanvasPointer.doubleClickTime = settingStore.get( + "Comfy.Pointer.DoubleClickTime" + ); + }); + watchEffect(() => { + CanvasPointer.bufferTime = settingStore.get("Comfy.Pointer.ClickBufferTime"); + }); + watchEffect(() => { + CanvasPointer.maxClickDrift = settingStore.get("Comfy.Pointer.ClickDrift"); + }); + watchEffect(() => { + LiteGraph.CANVAS_GRID_SIZE = settingStore.get("Comfy.SnapToGrid.GridSize"); + }); + watchEffect(() => { + LiteGraph.alwaysSnapToGrid = settingStore.get("pysssss.SnapToGrid"); + }); + watchEffect(() => { + if (!canvasStore.canvas) return; + if (canvasStore.canvas.state.draggingCanvas) { + canvasStore.canvas.canvas.style.cursor = "grabbing"; + return; + } + if (canvasStore.canvas.state.readOnly) { + canvasStore.canvas.canvas.style.cursor = "grab"; + return; + } + canvasStore.canvas.canvas.style.cursor = "default"; + }); + const workflowStore = useWorkflowStore(); + const persistCurrentWorkflow = /* @__PURE__ */ __name(() => { + const workflow = JSON.stringify(app.serializeGraph()); + localStorage.setItem("workflow", workflow); + if (api.clientId) { + sessionStorage.setItem(`workflow:${api.clientId}`, workflow); + } + }, "persistCurrentWorkflow"); + watchEffect(() => { + if (workflowStore.activeWorkflow) { + const workflow = workflowStore.activeWorkflow; + setStorageValue("Comfy.PreviousWorkflow", workflow.key); + persistCurrentWorkflow(); + } + }); + api.addEventListener("graphChanged", persistCurrentWorkflow); + usePragmaticDroppable(() => canvasRef.value, { + onDrop: /* @__PURE__ */ __name((event) => { + const loc = event.location.current.input; + const dndData = event.source.data; + if (dndData.type === "tree-explorer-node") { + const node = dndData.data; + if (node.data instanceof ComfyNodeDefImpl) { + const nodeDef = node.data; + const pos = app.clientPosToCanvasPos([ + loc.clientX - 20, + loc.clientY + ]); + app.addNodeOnGraph(nodeDef, { pos }); + } else if (node.data instanceof ComfyModelDef) { + const model = node.data; + const pos = app.clientPosToCanvasPos([loc.clientX, loc.clientY]); + const nodeAtPos = app.graph.getNodeOnPos(pos[0], pos[1]); + let targetProvider = null; + let targetGraphNode = null; + if (nodeAtPos) { + const providers = modelToNodeStore.getAllNodeProviders( + model.directory + ); + for (const provider of providers) { + if (provider.nodeDef.name === nodeAtPos.comfyClass) { + targetGraphNode = nodeAtPos; + targetProvider = provider; + } + } + } + if (!targetGraphNode) { + const provider = modelToNodeStore.getNodeProvider(model.directory); + if (provider) { + targetGraphNode = app.addNodeOnGraph(provider.nodeDef, { + pos + }); + targetProvider = provider; + } + } + if (targetGraphNode) { + const widget = targetGraphNode.widgets.find( + (widget2) => widget2.name === targetProvider.key + ); + if (widget) { + widget.value = model.file_name; + } + } + } + } + }, "onDrop") + }); + const comfyAppReady = ref(false); + onMounted(async () => { + window["LiteGraph"] = LiteGraph; + window["LGraph"] = LGraph; + window["LLink"] = LLink; + window["LGraphNode"] = LGraphNode; + window["LGraphGroup"] = LGraphGroup; + window["DragAndScale"] = DragAndScale; + window["LGraphCanvas"] = LGraphCanvas; + window["ContextMenu"] = ContextMenu; + window["LGraphBadge"] = LGraphBadge; + app.vueAppReady = true; + workspaceStore.spinner = true; + ChangeTracker.init(app); + await app.setup(canvasRef.value); + canvasStore.canvas = app.canvas; + canvasStore.canvas.render_canvas_border = false; + workspaceStore.spinner = false; + window["app"] = app; + window["graph"] = app.graph; + comfyAppReady.value = true; + watch( + () => settingStore.get("Comfy.Locale"), + async () => { + await useCommandStore().execute("Comfy.RefreshNodeDefinitions"); + workflowService.reloadCurrentWorkflow(); + } + ); + emit("ready"); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + (openBlock(), createBlock(Teleport, { to: ".graph-canvas-container" }, [ + comfyAppReady.value && betaMenuEnabled.value && !unref(workspaceStore).focusMode ? (openBlock(), createBlock(LiteGraphCanvasSplitterOverlay, { key: 0 }, { + "side-bar-panel": withCtx(() => [ + createVNode(SideToolbar) + ]), + "bottom-panel": withCtx(() => [ + createVNode(_sfc_main$l) + ]), + "graph-canvas-panel": withCtx(() => [ + canvasMenuEnabled.value ? (openBlock(), createBlock(GraphCanvasMenu, { key: 0 })) : createCommentVNode("", true) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(TitleEditor), + !betaMenuEnabled.value && canvasMenuEnabled.value ? (openBlock(), createBlock(GraphCanvasMenu, { key: 1 })) : createCommentVNode("", true), + createBaseVNode("canvas", { + ref_key: "canvasRef", + ref: canvasRef, + id: "graph-canvas", + tabindex: "1" + }, null, 512) + ])), + createVNode(_sfc_main$g), + tooltipEnabled.value ? (openBlock(), createBlock(NodeTooltip, { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$e) + ], 64); + }; + } +}); +const _sfc_main$b = /* @__PURE__ */ defineComponent({ + __name: "MenuHamburger", + setup(__props) { + const workspaceState = useWorkspaceStore(); + const settingStore = useSettingStore(); + const exitFocusMode = /* @__PURE__ */ __name(() => { + workspaceState.focusMode = false; + }, "exitFocusMode"); + watchEffect(() => { + if (settingStore.get("Comfy.UseNewMenu") !== "Disabled") { + return; + } + if (workspaceState.focusMode) { + app.ui.menuContainer.style.display = "none"; + } else { + app.ui.menuContainer.style.display = "block"; + } + }); + const menuSetting = computed(() => settingStore.get("Comfy.UseNewMenu")); + const positionCSS = computed( + () => ( + // 'Bottom' menuSetting shows the hamburger button in the bottom right corner + // 'Disabled', 'Top' menuSetting shows the hamburger button in the top right corner + menuSetting.value === "Bottom" ? { bottom: "0px", right: "0px" } : { top: "0px", right: "0px" } + ) + ); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createBlock(unref(script$f), { + class: "comfy-menu-hamburger", + style: normalizeStyle(positionCSS.value), + icon: "pi pi-bars", + severity: "secondary", + text: "", + size: "large", + onClick: exitFocusMode, + onContextmenu: unref(showNativeMenu) + }, null, 8, ["style", "onContextmenu"])), [ + [vShow, unref(workspaceState).focusMode], + [_directive_tooltip, { value: _ctx.$t("menu.showMenu"), showDelay: 300 }] + ]); + }; + } +}); +const MenuHamburger = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-962c4073"]]); +function _typeof$3(o) { + "@babel/helpers - typeof"; + return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$3(o); +} +__name(_typeof$3, "_typeof$3"); +function _defineProperty$3(e, r, t) { + return (r = _toPropertyKey$3(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; +} +__name(_defineProperty$3, "_defineProperty$3"); +function _toPropertyKey$3(t) { + var i = _toPrimitive$3(t, "string"); + return "symbol" == _typeof$3(i) ? i : i + ""; +} +__name(_toPropertyKey$3, "_toPropertyKey$3"); +function _toPrimitive$3(t, r) { + if ("object" != _typeof$3(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof$3(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +__name(_toPrimitive$3, "_toPrimitive$3"); +var theme$4 = /* @__PURE__ */ __name(function theme5(_ref) { + var dt = _ref.dt; + return "\n.p-toast {\n width: ".concat(dt("toast.width"), ";\n white-space: pre-line;\n word-break: break-word;\n}\n\n.p-toast-message {\n margin: 0 0 1rem 0;\n}\n\n.p-toast-message-icon {\n flex-shrink: 0;\n font-size: ").concat(dt("toast.icon.size"), ";\n width: ").concat(dt("toast.icon.size"), ";\n height: ").concat(dt("toast.icon.size"), ";\n}\n\n.p-toast-message-content {\n display: flex;\n align-items: flex-start;\n padding: ").concat(dt("toast.content.padding"), ";\n gap: ").concat(dt("toast.content.gap"), ";\n}\n\n.p-toast-message-text {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("toast.text.gap"), ";\n}\n\n.p-toast-summary {\n font-weight: ").concat(dt("toast.summary.font.weight"), ";\n font-size: ").concat(dt("toast.summary.font.size"), ";\n}\n\n.p-toast-detail {\n font-weight: ").concat(dt("toast.detail.font.weight"), ";\n font-size: ").concat(dt("toast.detail.font.size"), ";\n}\n\n.p-toast-close-button {\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n background: transparent;\n transition: background ").concat(dt("toast.transition.duration"), ", color ").concat(dt("toast.transition.duration"), ", outline-color ").concat(dt("toast.transition.duration"), ", box-shadow ").concat(dt("toast.transition.duration"), ";\n outline-color: transparent;\n color: inherit;\n width: ").concat(dt("toast.close.button.width"), ";\n height: ").concat(dt("toast.close.button.height"), ";\n border-radius: ").concat(dt("toast.close.button.border.radius"), ";\n margin: -25% 0 0 0;\n right: -25%;\n padding: 0;\n border: none;\n user-select: none;\n}\n\n.p-toast-message-info,\n.p-toast-message-success,\n.p-toast-message-warn,\n.p-toast-message-error,\n.p-toast-message-secondary,\n.p-toast-message-contrast {\n border-width: ").concat(dt("toast.border.width"), ";\n border-style: solid;\n backdrop-filter: blur(").concat(dt("toast.blur"), ");\n border-radius: ").concat(dt("toast.border.radius"), ";\n}\n\n.p-toast-close-icon {\n font-size: ").concat(dt("toast.close.icon.size"), ";\n width: ").concat(dt("toast.close.icon.size"), ";\n height: ").concat(dt("toast.close.icon.size"), ";\n}\n\n.p-toast-close-button:focus-visible {\n outline-width: ").concat(dt("focus.ring.width"), ";\n outline-style: ").concat(dt("focus.ring.style"), ";\n outline-offset: ").concat(dt("focus.ring.offset"), ";\n}\n\n.p-toast-message-info {\n background: ").concat(dt("toast.info.background"), ";\n border-color: ").concat(dt("toast.info.border.color"), ";\n color: ").concat(dt("toast.info.color"), ";\n box-shadow: ").concat(dt("toast.info.shadow"), ";\n}\n\n.p-toast-message-info .p-toast-detail {\n color: ").concat(dt("toast.info.detail.color"), ";\n}\n\n.p-toast-message-info .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.info.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.info.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-info .p-toast-close-button:hover {\n background: ").concat(dt("toast.info.close.button.hover.background"), ";\n}\n\n.p-toast-message-success {\n background: ").concat(dt("toast.success.background"), ";\n border-color: ").concat(dt("toast.success.border.color"), ";\n color: ").concat(dt("toast.success.color"), ";\n box-shadow: ").concat(dt("toast.success.shadow"), ";\n}\n\n.p-toast-message-success .p-toast-detail {\n color: ").concat(dt("toast.success.detail.color"), ";\n}\n\n.p-toast-message-success .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.success.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.success.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-success .p-toast-close-button:hover {\n background: ").concat(dt("toast.success.close.button.hover.background"), ";\n}\n\n.p-toast-message-warn {\n background: ").concat(dt("toast.warn.background"), ";\n border-color: ").concat(dt("toast.warn.border.color"), ";\n color: ").concat(dt("toast.warn.color"), ";\n box-shadow: ").concat(dt("toast.warn.shadow"), ";\n}\n\n.p-toast-message-warn .p-toast-detail {\n color: ").concat(dt("toast.warn.detail.color"), ";\n}\n\n.p-toast-message-warn .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.warn.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.warn.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-warn .p-toast-close-button:hover {\n background: ").concat(dt("toast.warn.close.button.hover.background"), ";\n}\n\n.p-toast-message-error {\n background: ").concat(dt("toast.error.background"), ";\n border-color: ").concat(dt("toast.error.border.color"), ";\n color: ").concat(dt("toast.error.color"), ";\n box-shadow: ").concat(dt("toast.error.shadow"), ";\n}\n\n.p-toast-message-error .p-toast-detail {\n color: ").concat(dt("toast.error.detail.color"), ";\n}\n\n.p-toast-message-error .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.error.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.error.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-error .p-toast-close-button:hover {\n background: ").concat(dt("toast.error.close.button.hover.background"), ";\n}\n\n.p-toast-message-secondary {\n background: ").concat(dt("toast.secondary.background"), ";\n border-color: ").concat(dt("toast.secondary.border.color"), ";\n color: ").concat(dt("toast.secondary.color"), ";\n box-shadow: ").concat(dt("toast.secondary.shadow"), ";\n}\n\n.p-toast-message-secondary .p-toast-detail {\n color: ").concat(dt("toast.secondary.detail.color"), ";\n}\n\n.p-toast-message-secondary .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.secondary.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.secondary.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-secondary .p-toast-close-button:hover {\n background: ").concat(dt("toast.secondary.close.button.hover.background"), ";\n}\n\n.p-toast-message-contrast {\n background: ").concat(dt("toast.contrast.background"), ";\n border-color: ").concat(dt("toast.contrast.border.color"), ";\n color: ").concat(dt("toast.contrast.color"), ";\n box-shadow: ").concat(dt("toast.contrast.shadow"), ";\n}\n\n.p-toast-message-contrast .p-toast-detail {\n color: ").concat(dt("toast.contrast.detail.color"), ";\n}\n\n.p-toast-message-contrast .p-toast-close-button:focus-visible {\n outline-color: ").concat(dt("toast.contrast.close.button.focus.ring.color"), ";\n box-shadow: ").concat(dt("toast.contrast.close.button.focus.ring.shadow"), ";\n}\n\n.p-toast-message-contrast .p-toast-close-button:hover {\n background: ").concat(dt("toast.contrast.close.button.hover.background"), ";\n}\n\n.p-toast-top-center {\n transform: translateX(-50%);\n}\n\n.p-toast-bottom-center {\n transform: translateX(-50%);\n}\n\n.p-toast-center {\n min-width: 20vw;\n transform: translate(-50%, -50%);\n}\n\n.p-toast-message-enter-from {\n opacity: 0;\n transform: translateY(50%);\n}\n\n.p-toast-message-leave-from {\n max-height: 1000px;\n}\n\n.p-toast .p-toast-message.p-toast-message-leave-to {\n max-height: 0;\n opacity: 0;\n margin-bottom: 0;\n overflow: hidden;\n}\n\n.p-toast-message-enter-active {\n transition: transform 0.3s, opacity 0.3s;\n}\n\n.p-toast-message-leave-active {\n transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s;\n}\n"); +}, "theme"); +var inlineStyles$2 = { + root: /* @__PURE__ */ __name(function root6(_ref2) { + var position = _ref2.position; + return { + position: "fixed", + top: position === "top-right" || position === "top-left" || position === "top-center" ? "20px" : position === "center" ? "50%" : null, + right: (position === "top-right" || position === "bottom-right") && "20px", + bottom: (position === "bottom-left" || position === "bottom-right" || position === "bottom-center") && "20px", + left: position === "top-left" || position === "bottom-left" ? "20px" : position === "center" || position === "top-center" || position === "bottom-center" ? "50%" : null + }; + }, "root") +}; +var classes$4 = { + root: /* @__PURE__ */ __name(function root7(_ref3) { + var props = _ref3.props; + return ["p-toast p-component p-toast-" + props.position]; + }, "root"), + message: /* @__PURE__ */ __name(function message(_ref4) { + var props = _ref4.props; + return ["p-toast-message", { + "p-toast-message-info": props.message.severity === "info" || props.message.severity === void 0, + "p-toast-message-warn": props.message.severity === "warn", + "p-toast-message-error": props.message.severity === "error", + "p-toast-message-success": props.message.severity === "success", + "p-toast-message-secondary": props.message.severity === "secondary", + "p-toast-message-contrast": props.message.severity === "contrast" + }]; + }, "message"), + messageContent: "p-toast-message-content", + messageIcon: /* @__PURE__ */ __name(function messageIcon(_ref5) { + var props = _ref5.props; + return ["p-toast-message-icon", _defineProperty$3(_defineProperty$3(_defineProperty$3(_defineProperty$3({}, props.infoIcon, props.message.severity === "info"), props.warnIcon, props.message.severity === "warn"), props.errorIcon, props.message.severity === "error"), props.successIcon, props.message.severity === "success")]; + }, "messageIcon"), + messageText: "p-toast-message-text", + summary: "p-toast-summary", + detail: "p-toast-detail", + closeButton: "p-toast-close-button", + closeIcon: "p-toast-close-icon" +}; +var ToastStyle = BaseStyle.extend({ + name: "toast", + theme: theme$4, + classes: classes$4, + inlineStyles: inlineStyles$2 +}); +var script$2$2 = { + name: "BaseToast", + "extends": script$g, + props: { + group: { + type: String, + "default": null + }, + position: { + type: String, + "default": "top-right" + }, + autoZIndex: { + type: Boolean, + "default": true + }, + baseZIndex: { + type: Number, + "default": 0 + }, + breakpoints: { + type: Object, + "default": null + }, + closeIcon: { + type: String, + "default": void 0 + }, + infoIcon: { + type: String, + "default": void 0 + }, + warnIcon: { + type: String, + "default": void 0 + }, + errorIcon: { + type: String, + "default": void 0 + }, + successIcon: { + type: String, + "default": void 0 + }, + closeButtonProps: { + type: null, + "default": null + } + }, + style: ToastStyle, + provide: /* @__PURE__ */ __name(function provide9() { + return { + $pcToast: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$4 = { + name: "ToastMessage", + hostName: "Toast", + "extends": script$g, + emits: ["close"], + closeTimeout: null, + props: { + message: { + type: null, + "default": null + }, + templates: { + type: Object, + "default": null + }, + closeIcon: { + type: String, + "default": null + }, + infoIcon: { + type: String, + "default": null + }, + warnIcon: { + type: String, + "default": null + }, + errorIcon: { + type: String, + "default": null + }, + successIcon: { + type: String, + "default": null + }, + closeButtonProps: { + type: null, + "default": null + } + }, + mounted: /* @__PURE__ */ __name(function mounted4() { + var _this = this; + if (this.message.life) { + this.closeTimeout = setTimeout(function() { + _this.close({ + message: _this.message, + type: "life-end" + }); + }, this.message.life); + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount4() { + this.clearCloseTimeout(); + }, "beforeUnmount"), + methods: { + close: /* @__PURE__ */ __name(function close(params) { + this.$emit("close", params); + }, "close"), + onCloseClick: /* @__PURE__ */ __name(function onCloseClick() { + this.clearCloseTimeout(); + this.close({ + message: this.message, + type: "close" + }); + }, "onCloseClick"), + clearCloseTimeout: /* @__PURE__ */ __name(function clearCloseTimeout() { + if (this.closeTimeout) { + clearTimeout(this.closeTimeout); + this.closeTimeout = null; + } + }, "clearCloseTimeout") + }, + computed: { + iconComponent: /* @__PURE__ */ __name(function iconComponent() { + return { + info: !this.infoIcon && script$s, + success: !this.successIcon && script$t, + warn: !this.warnIcon && script$u, + error: !this.errorIcon && script$v + }[this.message.severity]; + }, "iconComponent"), + closeAriaLabel: /* @__PURE__ */ __name(function closeAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : void 0; + }, "closeAriaLabel") + }, + components: { + TimesIcon: script$w, + InfoCircleIcon: script$s, + CheckIcon: script$t, + ExclamationTriangleIcon: script$u, + TimesCircleIcon: script$v + }, + directives: { + ripple: Ripple + } +}; +function _typeof$1(o) { + "@babel/helpers - typeof"; + return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1(o); +} +__name(_typeof$1, "_typeof$1"); +function ownKeys$1(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +__name(ownKeys$1, "ownKeys$1"); +function _objectSpread$1(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$1(Object(t), true).forEach(function(r2) { + _defineProperty$1(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +__name(_objectSpread$1, "_objectSpread$1"); +function _defineProperty$1(e, r, t) { + return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; +} +__name(_defineProperty$1, "_defineProperty$1"); +function _toPropertyKey$1(t) { + var i = _toPrimitive$1(t, "string"); + return "symbol" == _typeof$1(i) ? i : i + ""; +} +__name(_toPropertyKey$1, "_toPropertyKey$1"); +function _toPrimitive$1(t, r) { + if ("object" != _typeof$1(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof$1(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +__name(_toPrimitive$1, "_toPrimitive$1"); +var _hoisted_1$e = ["aria-label"]; +function render$1$3(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": [_ctx.cx("message"), $props.message.styleClass], + role: "alert", + "aria-live": "assertive", + "aria-atomic": "true" + }, _ctx.ptm("message")), [$props.templates.container ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.container), { + key: 0, + message: $props.message, + closeCallback: $options.onCloseClick + }, null, 8, ["message", "closeCallback"])) : (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": [_ctx.cx("messageContent"), $props.message.contentStyleClass] + }, _ctx.ptm("messageContent")), [!$props.templates.message ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [(openBlock(), createBlock(resolveDynamicComponent($props.templates.messageicon ? $props.templates.messageicon : $props.templates.icon ? $props.templates.icon : $options.iconComponent && $options.iconComponent.name ? $options.iconComponent : "span"), mergeProps({ + "class": _ctx.cx("messageIcon") + }, _ctx.ptm("messageIcon")), null, 16, ["class"])), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("messageText") + }, _ctx.ptm("messageText")), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("summary") + }, _ctx.ptm("summary")), toDisplayString($props.message.summary), 17), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("detail") + }, _ctx.ptm("detail")), toDisplayString($props.message.detail), 17)], 16)], 64)) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.message), { + key: 1, + message: $props.message + }, null, 8, ["message"])), $props.message.closable !== false ? (openBlock(), createElementBlock("div", normalizeProps(mergeProps({ + key: 2 + }, _ctx.ptm("buttonContainer"))), [withDirectives((openBlock(), createElementBlock("button", mergeProps({ + "class": _ctx.cx("closeButton"), + type: "button", + "aria-label": $options.closeAriaLabel, + onClick: _cache[0] || (_cache[0] = function() { + return $options.onCloseClick && $options.onCloseClick.apply($options, arguments); + }), + autofocus: "" + }, _objectSpread$1(_objectSpread$1({}, $props.closeButtonProps), _ctx.ptm("closeButton"))), [(openBlock(), createBlock(resolveDynamicComponent($props.templates.closeicon || "TimesIcon"), mergeProps({ + "class": [_ctx.cx("closeIcon"), $props.closeIcon] + }, _ctx.ptm("closeIcon")), null, 16, ["class"]))], 16, _hoisted_1$e)), [[_directive_ripple]])], 16)) : createCommentVNode("", true)], 16))], 16); +} +__name(render$1$3, "render$1$3"); +script$1$4.render = render$1$3; +function _toConsumableArray(r) { + return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); +} +__name(_toConsumableArray, "_toConsumableArray"); +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread, "_nonIterableSpread"); +function _unsupportedIterableToArray(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray(r, a); + var t = {}.toString.call(r).slice(8, -1); + return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray, "_unsupportedIterableToArray"); +function _iterableToArray(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray, "_iterableToArray"); +function _arrayWithoutHoles(r) { + if (Array.isArray(r)) return _arrayLikeToArray(r); +} +__name(_arrayWithoutHoles, "_arrayWithoutHoles"); +function _arrayLikeToArray(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray, "_arrayLikeToArray"); +var messageIdx = 0; +var script$6 = { + name: "Toast", + "extends": script$2$2, + inheritAttrs: false, + emits: ["close", "life-end"], + data: /* @__PURE__ */ __name(function data5() { + return { + messages: [] + }; + }, "data"), + styleElement: null, + mounted: /* @__PURE__ */ __name(function mounted5() { + ToastEventBus.on("add", this.onAdd); + ToastEventBus.on("remove", this.onRemove); + ToastEventBus.on("remove-group", this.onRemoveGroup); + ToastEventBus.on("remove-all-groups", this.onRemoveAllGroups); + if (this.breakpoints) { + this.createStyle(); + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount5() { + this.destroyStyle(); + if (this.$refs.container && this.autoZIndex) { + ZIndex.clear(this.$refs.container); + } + ToastEventBus.off("add", this.onAdd); + ToastEventBus.off("remove", this.onRemove); + ToastEventBus.off("remove-group", this.onRemoveGroup); + ToastEventBus.off("remove-all-groups", this.onRemoveAllGroups); + }, "beforeUnmount"), + methods: { + add: /* @__PURE__ */ __name(function add(message2) { + if (message2.id == null) { + message2.id = messageIdx++; + } + this.messages = [].concat(_toConsumableArray(this.messages), [message2]); + }, "add"), + remove: /* @__PURE__ */ __name(function remove(params) { + var index = this.messages.findIndex(function(m) { + return m.id === params.message.id; + }); + if (index !== -1) { + this.messages.splice(index, 1); + this.$emit(params.type, { + message: params.message + }); + } + }, "remove"), + onAdd: /* @__PURE__ */ __name(function onAdd(message2) { + if (this.group == message2.group) { + this.add(message2); + } + }, "onAdd"), + onRemove: /* @__PURE__ */ __name(function onRemove(message2) { + this.remove({ + message: message2, + type: "close" + }); + }, "onRemove"), + onRemoveGroup: /* @__PURE__ */ __name(function onRemoveGroup(group) { + if (this.group === group) { + this.messages = []; + } + }, "onRemoveGroup"), + onRemoveAllGroups: /* @__PURE__ */ __name(function onRemoveAllGroups() { + this.messages = []; + }, "onRemoveAllGroups"), + onEnter: /* @__PURE__ */ __name(function onEnter() { + this.$refs.container.setAttribute(this.attributeSelector, ""); + if (this.autoZIndex) { + ZIndex.set("modal", this.$refs.container, this.baseZIndex || this.$primevue.config.zIndex.modal); + } + }, "onEnter"), + onLeave: /* @__PURE__ */ __name(function onLeave() { + var _this = this; + if (this.$refs.container && this.autoZIndex && isEmpty(this.messages)) { + setTimeout(function() { + ZIndex.clear(_this.$refs.container); + }, 200); + } + }, "onLeave"), + createStyle: /* @__PURE__ */ __name(function createStyle() { + if (!this.styleElement && !this.isUnstyled) { + var _this$$primevue; + this.styleElement = document.createElement("style"); + this.styleElement.type = "text/css"; + setAttribute(this.styleElement, "nonce", (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce); + document.head.appendChild(this.styleElement); + var innerHTML = ""; + for (var breakpoint in this.breakpoints) { + var breakpointStyle = ""; + for (var styleProp in this.breakpoints[breakpoint]) { + breakpointStyle += styleProp + ":" + this.breakpoints[breakpoint][styleProp] + "!important;"; + } + innerHTML += "\n @media screen and (max-width: ".concat(breakpoint, ") {\n .p-toast[").concat(this.attributeSelector, "] {\n ").concat(breakpointStyle, "\n }\n }\n "); + } + this.styleElement.innerHTML = innerHTML; + } + }, "createStyle"), + destroyStyle: /* @__PURE__ */ __name(function destroyStyle() { + if (this.styleElement) { + document.head.removeChild(this.styleElement); + this.styleElement = null; + } + }, "destroyStyle") + }, + computed: { + attributeSelector: /* @__PURE__ */ __name(function attributeSelector() { + return UniqueComponentId(); + }, "attributeSelector") + }, + components: { + ToastMessage: script$1$4, + Portal: script$m + } +}; +function _typeof$2(o) { + "@babel/helpers - typeof"; + return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$2(o); +} +__name(_typeof$2, "_typeof$2"); +function ownKeys$2(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +__name(ownKeys$2, "ownKeys$2"); +function _objectSpread$2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$2(Object(t), true).forEach(function(r2) { + _defineProperty$2(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +__name(_objectSpread$2, "_objectSpread$2"); +function _defineProperty$2(e, r, t) { + return (r = _toPropertyKey$2(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; +} +__name(_defineProperty$2, "_defineProperty$2"); +function _toPropertyKey$2(t) { + var i = _toPrimitive$2(t, "string"); + return "symbol" == _typeof$2(i) ? i : i + ""; +} +__name(_toPropertyKey$2, "_toPropertyKey$2"); +function _toPrimitive$2(t, r) { + if ("object" != _typeof$2(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof$2(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +__name(_toPrimitive$2, "_toPrimitive$2"); +function render$a(_ctx, _cache, $props, $setup, $data, $options) { + var _component_ToastMessage = resolveComponent("ToastMessage"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createBlock(_component_Portal, null, { + "default": withCtx(function() { + return [createBaseVNode("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root"), + style: _ctx.sx("root", true, { + position: _ctx.position + }) + }, _ctx.ptmi("root")), [createVNode(TransitionGroup, mergeProps({ + name: "p-toast-message", + tag: "div", + onEnter: $options.onEnter, + onLeave: $options.onLeave + }, _objectSpread$2({}, _ctx.ptm("transition"))), { + "default": withCtx(function() { + return [(openBlock(true), createElementBlock(Fragment, null, renderList($data.messages, function(msg) { + return openBlock(), createBlock(_component_ToastMessage, { + key: msg.id, + message: msg, + templates: _ctx.$slots, + closeIcon: _ctx.closeIcon, + infoIcon: _ctx.infoIcon, + warnIcon: _ctx.warnIcon, + errorIcon: _ctx.errorIcon, + successIcon: _ctx.successIcon, + closeButtonProps: _ctx.closeButtonProps, + unstyled: _ctx.unstyled, + onClose: _cache[0] || (_cache[0] = function($event) { + return $options.remove($event); + }), + pt: _ctx.pt + }, null, 8, ["message", "templates", "closeIcon", "infoIcon", "warnIcon", "errorIcon", "successIcon", "closeButtonProps", "unstyled", "pt"]); + }), 128))]; + }), + _: 1 + }, 16, ["onEnter", "onLeave"])], 16)]; + }), + _: 1 + }); +} +__name(render$a, "render$a"); +script$6.render = render$a; +const _sfc_main$a = /* @__PURE__ */ defineComponent({ + __name: "GlobalToast", + setup(__props) { + const toast = useToast(); + const toastStore = useToastStore(); + const settingStore = useSettingStore(); + watch( + () => toastStore.messagesToAdd, + (newMessages) => { + if (newMessages.length === 0) { + return; + } + newMessages.forEach((message2) => { + toast.add(message2); + }); + toastStore.messagesToAdd = []; + }, + { deep: true } + ); + watch( + () => toastStore.messagesToRemove, + (messagesToRemove) => { + if (messagesToRemove.length === 0) { + return; + } + messagesToRemove.forEach((message2) => { + toast.remove(message2); + }); + toastStore.messagesToRemove = []; + }, + { deep: true } + ); + watch( + () => toastStore.removeAllRequested, + (requested) => { + if (requested) { + toast.removeAllGroups(); + toastStore.removeAllRequested = false; + } + } + ); + function updateToastPosition() { + const styleElement = document.getElementById("dynamic-toast-style") || createStyleElement(); + const rect = document.querySelector(".graph-canvas-container").getBoundingClientRect(); + styleElement.textContent = ` + .p-toast.p-component.p-toast-top-right { + top: ${rect.top + 20}px !important; + right: ${window.innerWidth - (rect.left + rect.width) + 20}px !important; + } + `; + } + __name(updateToastPosition, "updateToastPosition"); + function createStyleElement() { + const style = document.createElement("style"); + style.id = "dynamic-toast-style"; + document.head.appendChild(style); + return style; + } + __name(createStyleElement, "createStyleElement"); + watch( + () => settingStore.get("Comfy.UseNewMenu"), + () => nextTick(updateToastPosition), + { immediate: true } + ); + watch( + () => settingStore.get("Comfy.Sidebar.Location"), + () => nextTick(updateToastPosition), + { immediate: true } + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$6)); + }; + } +}); +const _sfc_main$9 = /* @__PURE__ */ defineComponent({ + __name: "UnloadWindowConfirmDialog", + setup(__props) { + const settingStore = useSettingStore(); + const handleBeforeUnload = /* @__PURE__ */ __name((event) => { + if (settingStore.get("Comfy.Window.UnloadConfirmation")) { + event.preventDefault(); + return true; + } + return void 0; + }, "handleBeforeUnload"); + onMounted(() => { + window.addEventListener("beforeunload", handleBeforeUnload); + }); + onBeforeUnmount(() => { + window.removeEventListener("beforeunload", handleBeforeUnload); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const DEFAULT_TITLE = "ComfyUI"; +const TITLE_SUFFIX = " - ComfyUI"; +const _sfc_main$8 = /* @__PURE__ */ defineComponent({ + __name: "BrowserTabTitle", + setup(__props) { + const executionStore = useExecutionStore(); + const executionText = computed( + () => executionStore.isIdle ? "" : `[${executionStore.executionProgress}%]` + ); + const settingStore = useSettingStore(); + const betaMenuEnabled = computed( + () => settingStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const workflowStore = useWorkflowStore(); + const isUnsavedText = computed( + () => workflowStore.activeWorkflow?.isModified || !workflowStore.activeWorkflow?.isPersisted ? " *" : "" + ); + const workflowNameText = computed(() => { + const workflowName = workflowStore.activeWorkflow?.filename; + return workflowName ? isUnsavedText.value + workflowName + TITLE_SUFFIX : DEFAULT_TITLE; + }); + const nodeExecutionTitle = computed( + () => executionStore.executingNode && executionStore.executingNodeProgress ? `${executionText.value}[${executionStore.executingNodeProgress}%] ${executionStore.executingNode.type}` : "" + ); + const workflowTitle = computed( + () => executionText.value + (betaMenuEnabled.value ? workflowNameText.value : DEFAULT_TITLE) + ); + const title = computed(() => nodeExecutionTitle.value || workflowTitle.value); + useTitle(title); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const _withScopeId$3 = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-4cb762cb"), n = n(), popScopeId(), n), "_withScopeId$3"); +const _hoisted_1$d = ["onContextmenu", "onMouseup"]; +const _hoisted_2$b = { class: "workflow-label text-sm max-w-[150px] truncate inline-block" }; +const _hoisted_3$9 = { class: "relative" }; +const _hoisted_4$2 = { + key: 0, + class: "status-indicator" +}; +const _sfc_main$7 = /* @__PURE__ */ defineComponent({ + __name: "WorkflowTabs", + props: { + class: {} + }, + setup(__props) { + const props = __props; + const { t } = useI18n(); + const workspaceStore = useWorkspaceStore(); + const workflowStore = useWorkflowStore(); + const rightClickedTab = ref(null); + const menu = ref(); + const showContextMenu = /* @__PURE__ */ __name((event, option2) => { + rightClickedTab.value = option2; + menu.value.show(event); + }, "showContextMenu"); + const workflowToOption = /* @__PURE__ */ __name((workflow) => ({ + value: workflow.path, + workflow + }), "workflowToOption"); + const options = computed( + () => workflowStore.openWorkflows.map(workflowToOption) + ); + const selectedWorkflow = computed( + () => workflowStore.activeWorkflow ? workflowToOption(workflowStore.activeWorkflow) : null + ); + const onWorkflowChange = /* @__PURE__ */ __name((option2) => { + if (!option2) { + return; + } + if (selectedWorkflow.value?.value === option2.value) { + return; + } + workflowService.openWorkflow(option2.workflow); + }, "onWorkflowChange"); + const closeWorkflows = /* @__PURE__ */ __name(async (options2) => { + for (const opt of options2) { + if (!await workflowService.closeWorkflow(opt.workflow, { + warnIfUnsaved: !workspaceStore.shiftDown + })) { + break; + } + } + }, "closeWorkflows"); + const onCloseWorkflow = /* @__PURE__ */ __name((option2) => { + closeWorkflows([option2]); + }, "onCloseWorkflow"); + const contextMenuItems = computed(() => { + const tab = rightClickedTab.value; + if (!tab) return []; + const index = options.value.findIndex((v) => v.workflow === tab.workflow); + return [ + { + label: t("tabMenu.duplicateTab"), + command: /* @__PURE__ */ __name(() => { + workflowService.duplicateWorkflow(tab.workflow); + }, "command") + }, + { + separator: true + }, + { + label: t("tabMenu.closeTab"), + command: /* @__PURE__ */ __name(() => onCloseWorkflow(tab), "command") + }, + { + label: t("tabMenu.closeTabsToLeft"), + command: /* @__PURE__ */ __name(() => closeWorkflows(options.value.slice(0, index)), "command"), + disabled: index <= 0 + }, + { + label: t("tabMenu.closeTabsToRight"), + command: /* @__PURE__ */ __name(() => closeWorkflows(options.value.slice(index + 1)), "command"), + disabled: index === options.value.length - 1 + }, + { + label: t("tabMenu.closeOtherTabs"), + command: /* @__PURE__ */ __name(() => closeWorkflows([ + ...options.value.slice(index + 1), + ...options.value.slice(0, index) + ]), "command"), + disabled: options.value.length <= 1 + } + ]; + }); + const commandStore = useCommandStore(); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock(Fragment, null, [ + createVNode(unref(script$x), { + class: normalizeClass(["workflow-tabs bg-transparent inline", props.class]), + modelValue: selectedWorkflow.value, + "onUpdate:modelValue": onWorkflowChange, + options: options.value, + optionLabel: "label", + dataKey: "value" + }, { + option: withCtx(({ option: option2 }) => [ + createBaseVNode("div", { + class: "flex p-2 gap-2", + onContextmenu: /* @__PURE__ */ __name(($event) => showContextMenu($event, option2), "onContextmenu"), + onMouseup: withModifiers(($event) => onCloseWorkflow(option2), ["middle"]) + }, [ + withDirectives((openBlock(), createElementBlock("span", _hoisted_2$b, [ + createTextVNode(toDisplayString(option2.workflow.filename), 1) + ])), [ + [ + _directive_tooltip, + option2.workflow.key, + void 0, + { bottom: true } + ] + ]), + createBaseVNode("div", _hoisted_3$9, [ + !unref(workspaceStore).shiftDown && (option2.workflow.isModified || !option2.workflow.isPersisted) ? (openBlock(), createElementBlock("span", _hoisted_4$2, "•")) : createCommentVNode("", true), + createVNode(unref(script$f), { + class: "close-button p-0 w-auto", + icon: "pi pi-times", + text: "", + severity: "secondary", + size: "small", + onClick: withModifiers(($event) => onCloseWorkflow(option2), ["stop"]) + }, null, 8, ["onClick"]) + ]) + ], 40, _hoisted_1$d) + ]), + _: 1 + }, 8, ["class", "modelValue", "options"]), + createVNode(unref(script$f), { + class: "new-blank-workflow-button", + icon: "pi pi-plus", + text: "", + severity: "secondary", + onClick: _cache[0] || (_cache[0] = () => unref(commandStore).execute("Comfy.NewBlankWorkflow")) + }), + createVNode(unref(script$y), { + ref_key: "menu", + ref: menu, + model: contextMenuItems.value + }, null, 8, ["model"]) + ], 64); + }; + } +}); +const WorkflowTabs = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-4cb762cb"]]); +var theme$3 = /* @__PURE__ */ __name(function theme6(_ref) { + var dt = _ref.dt; + return "\n.p-menubar {\n display: flex;\n align-items: center;\n background: ".concat(dt("menubar.background"), ";\n border: 1px solid ").concat(dt("menubar.border.color"), ";\n border-radius: ").concat(dt("menubar.border.radius"), ";\n color: ").concat(dt("menubar.color"), ";\n padding: ").concat(dt("menubar.padding"), ";\n gap: ").concat(dt("menubar.gap"), ";\n}\n\n.p-menubar-start,\n.p-megamenu-end {\n display: flex;\n align-items: center;\n}\n\n.p-menubar-root-list,\n.p-menubar-submenu {\n display: flex;\n margin: 0;\n padding: 0;\n list-style: none;\n outline: 0 none;\n}\n\n.p-menubar-root-list {\n align-items: center;\n flex-wrap: wrap;\n gap: ").concat(dt("menubar.gap"), ";\n}\n\n.p-menubar-root-list > .p-menubar-item > .p-menubar-item-content {\n border-radius: ").concat(dt("menubar.base.item.border.radius"), ";\n}\n\n.p-menubar-root-list > .p-menubar-item > .p-menubar-item-content > .p-menubar-item-link {\n padding: ").concat(dt("menubar.base.item.padding"), ";\n}\n\n.p-menubar-item-content {\n transition: background ").concat(dt("menubar.transition.duration"), ", color ").concat(dt("menubar.transition.duration"), ";\n border-radius: ").concat(dt("menubar.item.border.radius"), ";\n color: ").concat(dt("menubar.item.color"), ";\n}\n\n.p-menubar-item-link {\n cursor: pointer;\n display: flex;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n color: inherit;\n padding: ").concat(dt("menubar.item.padding"), ";\n gap: ").concat(dt("menubar.item.gap"), ";\n user-select: none;\n outline: 0 none;\n}\n\n.p-menubar-item-label {\n line-height: 1;\n}\n\n.p-menubar-item-icon {\n color: ").concat(dt("menubar.item.icon.color"), ";\n}\n\n.p-menubar-submenu-icon {\n color: ").concat(dt("menubar.submenu.icon.color"), ";\n margin-left: auto;\n font-size: ").concat(dt("menubar.submenu.icon.size"), ";\n width: ").concat(dt("menubar.submenu.icon.size"), ";\n height: ").concat(dt("menubar.submenu.icon.size"), ";\n}\n\n.p-menubar-item.p-focus > .p-menubar-item-content {\n color: ").concat(dt("menubar.item.focus.color"), ";\n background: ").concat(dt("menubar.item.focus.background"), ";\n}\n\n.p-menubar-item.p-focus > .p-menubar-item-content .p-menubar-item-icon {\n color: ").concat(dt("menubar.item.icon.focus.color"), ";\n}\n\n.p-menubar-item.p-focus > .p-menubar-item-content .p-menubar-submenu-icon {\n color: ").concat(dt("menubar.submenu.icon.focus.color"), ";\n}\n\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover {\n color: ").concat(dt("menubar.item.focus.color"), ";\n background: ").concat(dt("menubar.item.focus.background"), ";\n}\n\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover .p-menubar-item-icon {\n color: ").concat(dt("menubar.item.icon.focus.color"), ";\n}\n\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover .p-menubar-submenu-icon {\n color: ").concat(dt("menubar.submenu.icon.focus.color"), ";\n}\n\n.p-menubar-item-active > .p-menubar-item-content {\n color: ").concat(dt("menubar.item.active.color"), ";\n background: ").concat(dt("menubar.item.active.background"), ";\n}\n\n.p-menubar-item-active > .p-menubar-item-content .p-menubar-item-icon {\n color: ").concat(dt("menubar.item.icon.active.color"), ";\n}\n\n.p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\n color: ").concat(dt("menubar.submenu.icon.active.color"), ";\n}\n\n.p-menubar-submenu {\n display: none;\n position: absolute;\n min-width: 12.5rem;\n z-index: 1;\n background: ").concat(dt("menubar.submenu.background"), ";\n border: 1px solid ").concat(dt("menubar.submenu.border.color"), ";\n border-radius: ").concat(dt("menubar.border.radius"), ";\n box-shadow: ").concat(dt("menubar.submenu.shadow"), ";\n color: ").concat(dt("menubar.submenu.color"), ";\n flex-direction: column;\n padding: ").concat(dt("menubar.submenu.padding"), ";\n gap: ").concat(dt("menubar.submenu.gap"), ";\n}\n\n.p-menubar-submenu .p-menubar-separator {\n border-top: 1px solid ").concat(dt("menubar.separator.border.color"), ";\n}\n\n.p-menubar-submenu .p-menubar-item {\n position: relative;\n}\n\n .p-menubar-submenu > .p-menubar-item-active > .p-menubar-submenu {\n display: block;\n left: 100%;\n top: 0;\n}\n\n.p-menubar-end {\n margin-left: auto;\n align-self: center;\n}\n\n.p-menubar-button {\n display: none;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: ").concat(dt("menubar.mobile.button.size"), ";\n height: ").concat(dt("menubar.mobile.button.size"), ";\n position: relative;\n color: ").concat(dt("menubar.mobile.button.color"), ";\n border: 0 none;\n background: transparent;\n border-radius: ").concat(dt("menubar.mobile.button.border.radius"), ";\n transition: background ").concat(dt("menubar.transition.duration"), ", color ").concat(dt("menubar.transition.duration"), ", outline-color ").concat(dt("menubar.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-menubar-button:hover {\n color: ").concat(dt("menubar.mobile.button.hover.color"), ";\n background: ").concat(dt("menubar.mobile.button.hover.background"), ";\n}\n\n.p-menubar-button:focus-visible {\n box-shadow: ").concat(dt("menubar.mobile.button.focus.ring.shadow"), ";\n outline: ").concat(dt("menubar.mobile.button.focus.ring.width"), " ").concat(dt("menubar.mobile.button.focus.ring.style"), " ").concat(dt("menubar.mobile.button.focus.ring.color"), ";\n outline-offset: ").concat(dt("menubar.mobile.button.focus.ring.offset"), ";\n}\n\n.p-menubar-mobile {\n position: relative;\n}\n\n.p-menubar-mobile .p-menubar-button {\n display: flex;\n}\n\n.p-menubar-mobile .p-menubar-root-list {\n position: absolute;\n display: none;\n width: 100%;\n padding: ").concat(dt("menubar.submenu.padding"), ";\n background: ").concat(dt("menubar.submenu.background"), ";\n border: 1px solid ").concat(dt("menubar.submenu.border.color"), ";\n box-shadow: ").concat(dt("menubar.submenu.shadow"), ";\n}\n\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content {\n border-radius: ").concat(dt("menubar.item.border.radius"), ";\n}\n\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content > .p-menubar-item-link {\n padding: ").concat(dt("menubar.item.padding"), ";\n}\n\n.p-menubar-mobile-active .p-menubar-root-list {\n display: flex;\n flex-direction: column;\n top: 100%;\n left: 0;\n z-index: 1;\n}\n\n.p-menubar-mobile .p-menubar-root-list .p-menubar-item {\n width: 100%;\n position: static;\n}\n\n.p-menubar-mobile .p-menubar-root-list .p-menubar-separator {\n border-top: 1px solid ").concat(dt("menubar.separator.border.color"), ";\n}\n\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content .p-menubar-submenu-icon {\n margin-left: auto;\n transition: transform 0.2s;\n}\n\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\n transform: rotate(-180deg);\n}\n\n.p-menubar-mobile .p-menubar-submenu .p-menubar-submenu-icon {\n transition: transform 0.2s;\n transform: rotate(90deg);\n}\n\n.p-menubar-mobile .p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\n transform: rotate(-90deg);\n}\n\n.p-menubar-mobile .p-menubar-submenu {\n width: 100%;\n position: static;\n box-shadow: none;\n border: 0 none;\n padding-left: ").concat(dt("menubar.submenu.mobile.indent"), ";\n}\n"); +}, "theme"); +var inlineStyles$1 = { + submenu: /* @__PURE__ */ __name(function submenu(_ref2) { + var instance = _ref2.instance, processedItem = _ref2.processedItem; + return { + display: instance.isItemActive(processedItem) ? "flex" : "none" + }; + }, "submenu") +}; +var classes$3 = { + root: /* @__PURE__ */ __name(function root8(_ref3) { + var instance = _ref3.instance; + return ["p-menubar p-component", { + "p-menubar-mobile": instance.queryMatches, + "p-menubar-mobile-active": instance.mobileActive + }]; + }, "root"), + start: "p-menubar-start", + button: "p-menubar-button", + rootList: "p-menubar-root-list", + item: /* @__PURE__ */ __name(function item(_ref4) { + var instance = _ref4.instance, processedItem = _ref4.processedItem; + return ["p-menubar-item", { + "p-menubar-item-active": instance.isItemActive(processedItem), + "p-focus": instance.isItemFocused(processedItem), + "p-disabled": instance.isItemDisabled(processedItem) + }]; + }, "item"), + itemContent: "p-menubar-item-content", + itemLink: "p-menubar-item-link", + itemIcon: "p-menubar-item-icon", + itemLabel: "p-menubar-item-label", + submenuIcon: "p-menubar-submenu-icon", + submenu: "p-menubar-submenu", + separator: "p-menubar-separator", + end: "p-menubar-end" +}; +var MenubarStyle = BaseStyle.extend({ + name: "menubar", + theme: theme$3, + classes: classes$3, + inlineStyles: inlineStyles$1 +}); +var script$2$1 = { + name: "BaseMenubar", + "extends": script$g, + props: { + model: { + type: Array, + "default": null + }, + buttonProps: { + type: null, + "default": null + }, + breakpoint: { + type: String, + "default": "960px" + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: MenubarStyle, + provide: /* @__PURE__ */ __name(function provide10() { + return { + $pcMenubar: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$3 = { + name: "MenubarSub", + hostName: "Menubar", + "extends": script$g, + emits: ["item-mouseenter", "item-click", "item-mousemove"], + props: { + items: { + type: Array, + "default": null + }, + root: { + type: Boolean, + "default": false + }, + popup: { + type: Boolean, + "default": false + }, + mobileActive: { + type: Boolean, + "default": false + }, + templates: { + type: Object, + "default": null + }, + level: { + type: Number, + "default": 0 + }, + menuId: { + type: String, + "default": null + }, + focusedItemId: { + type: String, + "default": null + }, + activeItemPath: { + type: Object, + "default": null + } + }, + list: null, + methods: { + getItemId: /* @__PURE__ */ __name(function getItemId(processedItem) { + return "".concat(this.menuId, "_").concat(processedItem.key); + }, "getItemId"), + getItemKey: /* @__PURE__ */ __name(function getItemKey(processedItem) { + return this.getItemId(processedItem); + }, "getItemKey"), + getItemProp: /* @__PURE__ */ __name(function getItemProp(processedItem, name, params) { + return processedItem && processedItem.item ? resolve(processedItem.item[name], params) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel(processedItem) { + return this.getItemProp(processedItem, "label"); + }, "getItemLabel"), + getItemLabelId: /* @__PURE__ */ __name(function getItemLabelId(processedItem) { + return "".concat(this.menuId, "_").concat(processedItem.key, "_label"); + }, "getItemLabelId"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions4(processedItem, index, key) { + return this.ptm(key, { + context: { + item: processedItem.item, + index, + active: this.isItemActive(processedItem), + focused: this.isItemFocused(processedItem), + disabled: this.isItemDisabled(processedItem), + level: this.level + } + }); + }, "getPTOptions"), + isItemActive: /* @__PURE__ */ __name(function isItemActive(processedItem) { + return this.activeItemPath.some(function(path) { + return path.key === processedItem.key; + }); + }, "isItemActive"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible(processedItem) { + return this.getItemProp(processedItem, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled(processedItem) { + return this.getItemProp(processedItem, "disabled"); + }, "isItemDisabled"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused(processedItem) { + return this.focusedItemId === this.getItemId(processedItem); + }, "isItemFocused"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup(processedItem) { + return isNotEmpty(processedItem.items); + }, "isItemGroup"), + onItemClick: /* @__PURE__ */ __name(function onItemClick(event, processedItem) { + this.getItemProp(processedItem, "command", { + originalEvent: event, + item: processedItem.item + }); + this.$emit("item-click", { + originalEvent: event, + processedItem, + isFocus: true + }); + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter(event, processedItem) { + this.$emit("item-mouseenter", { + originalEvent: event, + processedItem + }); + }, "onItemMouseEnter"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove(event, processedItem) { + this.$emit("item-mousemove", { + originalEvent: event, + processedItem + }); + }, "onItemMouseMove"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset2(index) { + return index - this.calculateAriaSetSize.slice(0, index).length + 1; + }, "getAriaPosInset"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps(processedItem, index) { + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: -1, + "aria-hidden": true + }, this.getPTOptions(processedItem, index, "itemLink")), + icon: mergeProps({ + "class": [this.cx("itemIcon"), this.getItemProp(processedItem, "icon")] + }, this.getPTOptions(processedItem, index, "itemIcon")), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions(processedItem, index, "itemLabel")), + submenuicon: mergeProps({ + "class": this.cx("submenuIcon") + }, this.getPTOptions(processedItem, index, "submenuIcon")) + }; + }, "getMenuItemProps") + }, + computed: { + calculateAriaSetSize: /* @__PURE__ */ __name(function calculateAriaSetSize() { + var _this = this; + return this.items.filter(function(processedItem) { + return _this.isItemVisible(processedItem) && _this.getItemProp(processedItem, "separator"); + }); + }, "calculateAriaSetSize"), + getAriaSetSize: /* @__PURE__ */ __name(function getAriaSetSize() { + var _this2 = this; + return this.items.filter(function(processedItem) { + return _this2.isItemVisible(processedItem) && !_this2.getItemProp(processedItem, "separator"); + }).length; + }, "getAriaSetSize") + }, + components: { + AngleRightIcon: script$z, + AngleDownIcon: script$A + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$1$2 = ["id", "aria-label", "aria-disabled", "aria-expanded", "aria-haspopup", "aria-level", "aria-setsize", "aria-posinset", "data-p-active", "data-p-focused", "data-p-disabled"]; +var _hoisted_2$a = ["onClick", "onMouseenter", "onMousemove"]; +var _hoisted_3$8 = ["href", "target"]; +var _hoisted_4$1 = ["id"]; +var _hoisted_5$1 = ["id"]; +function render$1$2(_ctx, _cache, $props, $setup, $data, $options) { + var _component_MenubarSub = resolveComponent("MenubarSub", true); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("ul", mergeProps({ + "class": $props.level === 0 ? _ctx.cx("rootList") : _ctx.cx("submenu") + }, $props.level === 0 ? _ctx.ptm("rootList") : _ctx.ptm("submenu")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function(processedItem, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getItemKey(processedItem) + }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $options.getItemId(processedItem), + style: $options.getItemProp(processedItem, "style"), + "class": [_ctx.cx("item", { + processedItem + }), $options.getItemProp(processedItem, "class")], + role: "menuitem", + "aria-label": $options.getItemLabel(processedItem), + "aria-disabled": $options.isItemDisabled(processedItem) || void 0, + "aria-expanded": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : void 0, + "aria-haspopup": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, "to") ? "menu" : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $options.getAriaSetSize, + "aria-posinset": $options.getAriaPosInset(index), + ref_for: true + }, $options.getPTOptions(processedItem, index, "item"), { + "data-p-active": $options.isItemActive(processedItem), + "data-p-focused": $options.isItemFocused(processedItem), + "data-p-disabled": $options.isItemDisabled(processedItem) + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + onClick: /* @__PURE__ */ __name(function onClick2($event) { + return $options.onItemClick($event, processedItem); + }, "onClick"), + onMouseenter: /* @__PURE__ */ __name(function onMouseenter($event) { + return $options.onItemMouseEnter($event, processedItem); + }, "onMouseenter"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onItemMouseMove($event, processedItem); + }, "onMousemove"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemContent")), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $options.getItemProp(processedItem, "url"), + "class": _ctx.cx("itemLink"), + target: $options.getItemProp(processedItem, "target"), + tabindex: "-1", + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLink")), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 0, + item: processedItem.item, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : $options.getItemProp(processedItem, "icon") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), $options.getItemProp(processedItem, "icon")], + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemIcon")), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + id: $options.getItemLabelId(processedItem), + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLabel")), toDisplayString($options.getItemLabel(processedItem)), 17, _hoisted_4$1), $options.getItemProp(processedItem, "items") ? (openBlock(), createElementBlock(Fragment, { + key: 2 + }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), { + key: 0, + root: $props.root, + active: $options.isItemActive(processedItem), + "class": normalizeClass(_ctx.cx("submenuIcon")) + }, null, 8, ["root", "active", "class"])) : (openBlock(), createBlock(resolveDynamicComponent($props.root ? "AngleDownIcon" : "AngleRightIcon"), mergeProps({ + key: 1, + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "submenuIcon")), null, 16, ["class"]))], 64)) : createCommentVNode("", true)], 16, _hoisted_3$8)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: processedItem.item, + root: $props.root, + hasSubmenu: $options.getItemProp(processedItem, "items"), + label: $options.getItemLabel(processedItem), + props: $options.getMenuItemProps(processedItem, index) + }, null, 8, ["item", "root", "hasSubmenu", "label", "props"]))], 16, _hoisted_2$a), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_MenubarSub, { + key: 0, + id: $options.getItemId(processedItem) + "_list", + menuId: $props.menuId, + role: "menu", + style: normalizeStyle(_ctx.sx("submenu", true, { + processedItem + })), + focusedItemId: $props.focusedItemId, + items: processedItem.items, + mobileActive: $props.mobileActive, + activeItemPath: $props.activeItemPath, + templates: $props.templates, + level: $props.level + 1, + "aria-labelledby": $options.getItemLabelId(processedItem), + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onItemClick: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("item-click", $event); + }), + onItemMouseenter: _cache[1] || (_cache[1] = function($event) { + return _ctx.$emit("item-mouseenter", $event); + }), + onItemMousemove: _cache[2] || (_cache[2] = function($event) { + return _ctx.$emit("item-mousemove", $event); + }) + }, null, 8, ["id", "menuId", "style", "focusedItemId", "items", "mobileActive", "activeItemPath", "templates", "level", "aria-labelledby", "pt", "unstyled"])) : createCommentVNode("", true)], 16, _hoisted_1$1$2)) : createCommentVNode("", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 1, + id: $options.getItemId(processedItem), + "class": [_ctx.cx("separator"), $options.getItemProp(processedItem, "class")], + style: $options.getItemProp(processedItem, "style"), + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16, _hoisted_5$1)) : createCommentVNode("", true)], 64); + }), 128))], 16); +} +__name(render$1$2, "render$1$2"); +script$1$3.render = render$1$2; +var script$5 = { + name: "Menubar", + "extends": script$2$1, + inheritAttrs: false, + emits: ["focus", "blur"], + matchMediaListener: null, + data: /* @__PURE__ */ __name(function data6() { + return { + id: this.$attrs.id, + mobileActive: false, + focused: false, + focusedItemInfo: { + index: -1, + level: 0, + parentKey: "" + }, + activeItemPath: [], + dirty: false, + query: null, + queryMatches: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId2(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + activeItemPath: /* @__PURE__ */ __name(function activeItemPath(newPath) { + if (isNotEmpty(newPath)) { + this.bindOutsideClickListener(); + this.bindResizeListener(); + } else { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + } + }, "activeItemPath") + }, + outsideClickListener: null, + container: null, + menubar: null, + mounted: /* @__PURE__ */ __name(function mounted6() { + this.id = this.id || UniqueComponentId(); + this.bindMatchMediaListener(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount6() { + this.mobileActive = false; + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + this.unbindMatchMediaListener(); + if (this.container) { + ZIndex.clear(this.container); + } + this.container = null; + }, "beforeUnmount"), + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp2(item3, name) { + return item3 ? resolve(item3[name]) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel2(item3) { + return this.getItemProp(item3, "label"); + }, "getItemLabel"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled2(item3) { + return this.getItemProp(item3, "disabled"); + }, "isItemDisabled"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible2(item3) { + return this.getItemProp(item3, "visible") !== false; + }, "isItemVisible"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup2(item3) { + return isNotEmpty(this.getItemProp(item3, "items")); + }, "isItemGroup"), + isItemSeparator: /* @__PURE__ */ __name(function isItemSeparator(item3) { + return this.getItemProp(item3, "separator"); + }, "isItemSeparator"), + getProccessedItemLabel: /* @__PURE__ */ __name(function getProccessedItemLabel(processedItem) { + return processedItem ? this.getItemLabel(processedItem.item) : void 0; + }, "getProccessedItemLabel"), + isProccessedItemGroup: /* @__PURE__ */ __name(function isProccessedItemGroup(processedItem) { + return processedItem && isNotEmpty(processedItem.items); + }, "isProccessedItemGroup"), + toggle: /* @__PURE__ */ __name(function toggle(event) { + var _this = this; + if (this.mobileActive) { + this.mobileActive = false; + ZIndex.clear(this.menubar); + this.hide(); + } else { + this.mobileActive = true; + ZIndex.set("menu", this.menubar, this.$primevue.config.zIndex.menu); + setTimeout(function() { + _this.show(); + }, 1); + } + this.bindOutsideClickListener(); + event.preventDefault(); + }, "toggle"), + show: /* @__PURE__ */ __name(function show2() { + focus(this.menubar); + }, "show"), + hide: /* @__PURE__ */ __name(function hide2(event, isFocus) { + var _this2 = this; + if (this.mobileActive) { + this.mobileActive = false; + setTimeout(function() { + focus(_this2.$refs.menubutton); + }, 0); + } + this.activeItemPath = []; + this.focusedItemInfo = { + index: -1, + level: 0, + parentKey: "" + }; + isFocus && focus(this.menubar); + this.dirty = false; + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus3(event) { + this.focused = true; + this.focusedItemInfo = this.focusedItemInfo.index !== -1 ? this.focusedItemInfo : { + index: this.findFirstFocusedItemIndex(), + level: 0, + parentKey: "" + }; + this.$emit("focus", event); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur2(event) { + this.focused = false; + this.focusedItemInfo = { + index: -1, + level: 0, + parentKey: "" + }; + this.searchValue = ""; + this.dirty = false; + this.$emit("blur", event); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown2(event) { + var metaKey = event.metaKey || event.ctrlKey; + switch (event.code) { + case "ArrowDown": + this.onArrowDownKey(event); + break; + case "ArrowUp": + this.onArrowUpKey(event); + break; + case "ArrowLeft": + this.onArrowLeftKey(event); + break; + case "ArrowRight": + this.onArrowRightKey(event); + break; + case "Home": + this.onHomeKey(event); + break; + case "End": + this.onEndKey(event); + break; + case "Space": + this.onSpaceKey(event); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event); + break; + case "Escape": + this.onEscapeKey(event); + break; + case "Tab": + this.onTabKey(event); + break; + case "PageDown": + case "PageUp": + case "Backspace": + case "ShiftLeft": + case "ShiftRight": + break; + default: + if (!metaKey && isPrintableCharacter(event.key)) { + this.searchItems(event, event.key); + } + break; + } + }, "onKeyDown"), + onItemChange: /* @__PURE__ */ __name(function onItemChange(event) { + var processedItem = event.processedItem, isFocus = event.isFocus; + if (isEmpty(processedItem)) return; + var index = processedItem.index, key = processedItem.key, level = processedItem.level, parentKey = processedItem.parentKey, items = processedItem.items; + var grouped = isNotEmpty(items); + var activeItemPath3 = this.activeItemPath.filter(function(p) { + return p.parentKey !== parentKey && p.parentKey !== key; + }); + grouped && activeItemPath3.push(processedItem); + this.focusedItemInfo = { + index, + level, + parentKey + }; + this.activeItemPath = activeItemPath3; + grouped && (this.dirty = true); + isFocus && focus(this.menubar); + }, "onItemChange"), + onItemClick: /* @__PURE__ */ __name(function onItemClick2(event) { + var originalEvent = event.originalEvent, processedItem = event.processedItem; + var grouped = this.isProccessedItemGroup(processedItem); + var root12 = isEmpty(processedItem.parent); + var selected = this.isSelected(processedItem); + if (selected) { + var index = processedItem.index, key = processedItem.key, level = processedItem.level, parentKey = processedItem.parentKey; + this.activeItemPath = this.activeItemPath.filter(function(p) { + return key !== p.key && key.startsWith(p.key); + }); + this.focusedItemInfo = { + index, + level, + parentKey + }; + this.dirty = !root12; + focus(this.menubar); + } else { + if (grouped) { + this.onItemChange(event); + } else { + var rootProcessedItem = root12 ? processedItem : this.activeItemPath.find(function(p) { + return p.parentKey === ""; + }); + this.hide(originalEvent); + this.changeFocusedItemIndex(originalEvent, rootProcessedItem ? rootProcessedItem.index : -1); + this.mobileActive = false; + focus(this.menubar); + } + } + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter2(event) { + if (this.dirty) { + this.onItemChange(event); + } + }, "onItemMouseEnter"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove2(event) { + if (this.focused) { + this.changeFocusedItemIndex(event, event.processedItem.index); + } + }, "onItemMouseMove"), + menuButtonClick: /* @__PURE__ */ __name(function menuButtonClick(event) { + this.toggle(event); + }, "menuButtonClick"), + menuButtonKeydown: /* @__PURE__ */ __name(function menuButtonKeydown(event) { + (event.code === "Enter" || event.code === "NumpadEnter" || event.code === "Space") && this.menuButtonClick(event); + }, "menuButtonKeydown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey2(event) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var root12 = processedItem ? isEmpty(processedItem.parent) : null; + if (root12) { + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + this.onItemChange({ + originalEvent: event, + processedItem + }); + this.focusedItemInfo = { + index: -1, + parentKey: processedItem.key + }; + this.onArrowRightKey(event); + } + } else { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + } + event.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey2(event) { + var _this3 = this; + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var root12 = isEmpty(processedItem.parent); + if (root12) { + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + this.onItemChange({ + originalEvent: event, + processedItem + }); + this.focusedItemInfo = { + index: -1, + parentKey: processedItem.key + }; + var itemIndex = this.findLastItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + } + } else { + var parentItem = this.activeItemPath.find(function(p) { + return p.key === processedItem.parentKey; + }); + if (this.focusedItemInfo.index === 0) { + this.focusedItemInfo = { + index: -1, + parentKey: parentItem ? parentItem.parentKey : "" + }; + this.searchValue = ""; + this.onArrowLeftKey(event); + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.parentKey !== _this3.focusedItemInfo.parentKey; + }); + } else { + var _itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex(); + this.changeFocusedItemIndex(event, _itemIndex); + } + } + event.preventDefault(); + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey3(event) { + var _this4 = this; + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var parentItem = processedItem ? this.activeItemPath.find(function(p) { + return p.key === processedItem.parentKey; + }) : null; + if (parentItem) { + this.onItemChange({ + originalEvent: event, + processedItem: parentItem + }); + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.parentKey !== _this4.focusedItemInfo.parentKey; + }); + event.preventDefault(); + } else { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + event.preventDefault(); + } + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey3(event) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var parentItem = processedItem ? this.activeItemPath.find(function(p) { + return p.key === processedItem.parentKey; + }) : null; + if (parentItem) { + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + this.onItemChange({ + originalEvent: event, + processedItem + }); + this.focusedItemInfo = { + index: -1, + parentKey: processedItem.key + }; + this.onArrowDownKey(event); + } + } else { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + event.preventDefault(); + } + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey3(event) { + this.changeFocusedItemIndex(event, this.findFirstItemIndex()); + event.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey3(event) { + this.changeFocusedItemIndex(event, this.findLastItemIndex()); + event.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey3(event) { + if (this.focusedItemInfo.index !== -1) { + var element = findSingle(this.menubar, 'li[id="'.concat("".concat(this.focusedItemId), '"]')); + var anchorElement = element && findSingle(element, 'a[data-pc-section="itemlink"]'); + anchorElement ? anchorElement.click() : element && element.click(); + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex()); + } + event.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey(event) { + this.onEnterKey(event); + }, "onSpaceKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey2(event) { + if (this.focusedItemInfo.level !== 0) { + var _focusedItemInfo = this.focusedItemInfo; + this.hide(event, false); + this.focusedItemInfo = { + index: Number(_focusedItemInfo.parentKey.split("_")[0]), + level: 0, + parentKey: "" + }; + } + event.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey2(event) { + if (this.focusedItemInfo.index !== -1) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && this.onItemChange({ + originalEvent: event, + processedItem + }); + } + this.hide(); + }, "onTabKey"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener2() { + var _this5 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event) { + var isOutsideContainer = _this5.container && !_this5.container.contains(event.target); + var isOutsideTarget = !(_this5.target && (_this5.target === event.target || _this5.target.contains(event.target))); + if (isOutsideContainer && isOutsideTarget) { + _this5.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener2() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener2() { + var _this6 = this; + if (!this.resizeListener) { + this.resizeListener = function(event) { + if (!isTouchDevice()) { + _this6.hide(event, true); + } + _this6.mobileActive = false; + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener2() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + bindMatchMediaListener: /* @__PURE__ */ __name(function bindMatchMediaListener() { + var _this7 = this; + if (!this.matchMediaListener) { + var query = matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.query = query; + this.queryMatches = query.matches; + this.matchMediaListener = function() { + _this7.queryMatches = query.matches; + _this7.mobileActive = false; + }; + this.query.addEventListener("change", this.matchMediaListener); + } + }, "bindMatchMediaListener"), + unbindMatchMediaListener: /* @__PURE__ */ __name(function unbindMatchMediaListener() { + if (this.matchMediaListener) { + this.query.removeEventListener("change", this.matchMediaListener); + this.matchMediaListener = null; + } + }, "unbindMatchMediaListener"), + isItemMatched: /* @__PURE__ */ __name(function isItemMatched(processedItem) { + var _this$getProccessedIt; + return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase())); + }, "isItemMatched"), + isValidItem: /* @__PURE__ */ __name(function isValidItem(processedItem) { + return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item); + }, "isValidItem"), + isValidSelectedItem: /* @__PURE__ */ __name(function isValidSelectedItem(processedItem) { + return this.isValidItem(processedItem) && this.isSelected(processedItem); + }, "isValidSelectedItem"), + isSelected: /* @__PURE__ */ __name(function isSelected2(processedItem) { + return this.activeItemPath.some(function(p) { + return p.key === processedItem.key; + }); + }, "isSelected"), + findFirstItemIndex: /* @__PURE__ */ __name(function findFirstItemIndex() { + var _this8 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this8.isValidItem(processedItem); + }); + }, "findFirstItemIndex"), + findLastItemIndex: /* @__PURE__ */ __name(function findLastItemIndex() { + var _this9 = this; + return findLastIndex(this.visibleItems, function(processedItem) { + return _this9.isValidItem(processedItem); + }); + }, "findLastItemIndex"), + findNextItemIndex: /* @__PURE__ */ __name(function findNextItemIndex(index) { + var _this10 = this; + var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function(processedItem) { + return _this10.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index; + }, "findNextItemIndex"), + findPrevItemIndex: /* @__PURE__ */ __name(function findPrevItemIndex(index) { + var _this11 = this; + var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function(processedItem) { + return _this11.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex : index; + }, "findPrevItemIndex"), + findSelectedItemIndex: /* @__PURE__ */ __name(function findSelectedItemIndex() { + var _this12 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this12.isValidSelectedItem(processedItem); + }); + }, "findSelectedItemIndex"), + findFirstFocusedItemIndex: /* @__PURE__ */ __name(function findFirstFocusedItemIndex() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex; + }, "findFirstFocusedItemIndex"), + findLastFocusedItemIndex: /* @__PURE__ */ __name(function findLastFocusedItemIndex() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex; + }, "findLastFocusedItemIndex"), + searchItems: /* @__PURE__ */ __name(function searchItems(event, _char) { + var _this13 = this; + this.searchValue = (this.searchValue || "") + _char; + var itemIndex = -1; + var matched = false; + if (this.focusedItemInfo.index !== -1) { + itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this13.isItemMatched(processedItem); + }); + itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this13.isItemMatched(processedItem); + }) : itemIndex + this.focusedItemInfo.index; + } else { + itemIndex = this.visibleItems.findIndex(function(processedItem) { + return _this13.isItemMatched(processedItem); + }); + } + if (itemIndex !== -1) { + matched = true; + } + if (itemIndex === -1 && this.focusedItemInfo.index === -1) { + itemIndex = this.findFirstFocusedItemIndex(); + } + if (itemIndex !== -1) { + this.changeFocusedItemIndex(event, itemIndex); + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this13.searchValue = ""; + _this13.searchTimeout = null; + }, 500); + return matched; + }, "searchItems"), + changeFocusedItemIndex: /* @__PURE__ */ __name(function changeFocusedItemIndex(event, index) { + if (this.focusedItemInfo.index !== index) { + this.focusedItemInfo.index = index; + this.scrollInView(); + } + }, "changeFocusedItemIndex"), + scrollInView: /* @__PURE__ */ __name(function scrollInView3() { + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + var id2 = index !== -1 ? "".concat(this.id, "_").concat(index) : this.focusedItemId; + var element = findSingle(this.menubar, 'li[id="'.concat(id2, '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } + }, "scrollInView"), + createProcessedItems: /* @__PURE__ */ __name(function createProcessedItems(items) { + var _this14 = this; + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var parentKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ""; + var processedItems3 = []; + items && items.forEach(function(item3, index) { + var key = (parentKey !== "" ? parentKey + "_" : "") + index; + var newItem = { + item: item3, + index, + level, + key, + parent, + parentKey + }; + newItem["items"] = _this14.createProcessedItems(item3.items, level + 1, newItem, key); + processedItems3.push(newItem); + }); + return processedItems3; + }, "createProcessedItems"), + containerRef: /* @__PURE__ */ __name(function containerRef(el) { + this.container = el; + }, "containerRef"), + menubarRef: /* @__PURE__ */ __name(function menubarRef(el) { + this.menubar = el ? el.$el : void 0; + }, "menubarRef") + }, + computed: { + processedItems: /* @__PURE__ */ __name(function processedItems() { + return this.createProcessedItems(this.model || []); + }, "processedItems"), + visibleItems: /* @__PURE__ */ __name(function visibleItems() { + var _this15 = this; + var processedItem = this.activeItemPath.find(function(p) { + return p.key === _this15.focusedItemInfo.parentKey; + }); + return processedItem ? processedItem.items : this.processedItems; + }, "visibleItems"), + focusedItemId: /* @__PURE__ */ __name(function focusedItemId() { + return this.focusedItemInfo.index !== -1 ? "".concat(this.id).concat(isNotEmpty(this.focusedItemInfo.parentKey) ? "_" + this.focusedItemInfo.parentKey : "", "_").concat(this.focusedItemInfo.index) : null; + }, "focusedItemId") + }, + components: { + MenubarSub: script$1$3, + BarsIcon: script$B + } +}; +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +__name(_typeof, "_typeof"); +function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t.push.apply(t, o); + } + return t; +} +__name(ownKeys, "ownKeys"); +function _objectSpread(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), true).forEach(function(r2) { + _defineProperty(e, r2, t[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2)); + }); + } + return e; +} +__name(_objectSpread, "_objectSpread"); +function _defineProperty(e, r, t) { + return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; +} +__name(_defineProperty, "_defineProperty"); +function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == _typeof(i) ? i : i + ""; +} +__name(_toPropertyKey, "_toPropertyKey"); +function _toPrimitive(t, r) { + if ("object" != _typeof(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); +} +__name(_toPrimitive, "_toPrimitive"); +var _hoisted_1$c = ["aria-haspopup", "aria-expanded", "aria-controls", "aria-label"]; +function render$9(_ctx, _cache, $props, $setup, $data, $options) { + var _component_BarsIcon = resolveComponent("BarsIcon"); + var _component_MenubarSub = resolveComponent("MenubarSub"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: $options.containerRef, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [_ctx.$slots.start ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("start") + }, _ctx.ptm("start")), [renderSlot(_ctx.$slots, "start")], 16)) : createCommentVNode("", true), renderSlot(_ctx.$slots, _ctx.$slots.button ? "button" : "menubutton", { + id: $data.id, + "class": normalizeClass(_ctx.cx("button")), + toggleCallback: /* @__PURE__ */ __name(function toggleCallback(event) { + return $options.menuButtonClick(event); + }, "toggleCallback") + }, function() { + var _ctx$$primevue$config; + return [_ctx.model && _ctx.model.length > 0 ? (openBlock(), createElementBlock("a", mergeProps({ + key: 0, + ref: "menubutton", + role: "button", + tabindex: "0", + "class": _ctx.cx("button"), + "aria-haspopup": _ctx.model.length && _ctx.model.length > 0 ? true : false, + "aria-expanded": $data.mobileActive, + "aria-controls": $data.id, + "aria-label": (_ctx$$primevue$config = _ctx.$primevue.config.locale.aria) === null || _ctx$$primevue$config === void 0 ? void 0 : _ctx$$primevue$config.navigation, + onClick: _cache[0] || (_cache[0] = function($event) { + return $options.menuButtonClick($event); + }), + onKeydown: _cache[1] || (_cache[1] = function($event) { + return $options.menuButtonKeydown($event); + }) + }, _objectSpread(_objectSpread({}, _ctx.buttonProps), _ctx.ptm("button"))), [renderSlot(_ctx.$slots, _ctx.$slots.buttonicon ? "buttonicon" : "menubuttonicon", {}, function() { + return [createVNode(_component_BarsIcon, normalizeProps(guardReactiveProps(_ctx.ptm("buttonicon"))), null, 16)]; + })], 16, _hoisted_1$c)) : createCommentVNode("", true)]; + }), createVNode(_component_MenubarSub, { + ref: $options.menubarRef, + id: $data.id + "_list", + role: "menubar", + items: $options.processedItems, + templates: _ctx.$slots, + root: true, + mobileActive: $data.mobileActive, + tabindex: "0", + "aria-activedescendant": $data.focused ? $options.focusedItemId : void 0, + menuId: $data.id, + focusedItemId: $data.focused ? $options.focusedItemId : void 0, + activeItemPath: $data.activeItemPath, + level: 0, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onItemClick: $options.onItemClick, + onItemMouseenter: $options.onItemMouseEnter, + onItemMousemove: $options.onItemMouseMove + }, null, 8, ["id", "items", "templates", "mobileActive", "aria-activedescendant", "menuId", "focusedItemId", "activeItemPath", "aria-labelledby", "aria-label", "pt", "unstyled", "onFocus", "onBlur", "onKeydown", "onItemClick", "onItemMouseenter", "onItemMousemove"]), _ctx.$slots.end ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("end") + }, _ctx.ptm("end")), [renderSlot(_ctx.$slots, "end")], 16)) : createCommentVNode("", true)], 16); +} +__name(render$9, "render$9"); +script$5.render = render$9; +const _withScopeId$2 = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-a2b12676"), n = n(), popScopeId(), n), "_withScopeId$2"); +const _hoisted_1$b = ["href"]; +const _hoisted_2$9 = { class: "p-menubar-item-label" }; +const _hoisted_3$7 = { + key: 1, + class: "ml-auto border border-surface rounded text-muted text-xs p-1 keybinding-tag" +}; +const _sfc_main$6 = /* @__PURE__ */ defineComponent({ + __name: "CommandMenubar", + setup(__props) { + const settingStore = useSettingStore(); + const dropdownDirection = computed( + () => settingStore.get("Comfy.UseNewMenu") === "Top" ? "down" : "up" + ); + const menuItemsStore = useMenuItemStore(); + const { t } = useI18n(); + const translateMenuItem = /* @__PURE__ */ __name((item3) => { + const label = typeof item3.label === "function" ? item3.label() : item3.label; + const translatedLabel = label ? t(`menuLabels.${normalizeI18nKey(label)}`, label) : void 0; + return { + ...item3, + label: translatedLabel, + items: item3.items?.map(translateMenuItem) + }; + }, "translateMenuItem"); + const translatedItems = computed( + () => menuItemsStore.menuItems.map(translateMenuItem) + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$5), { + model: translatedItems.value, + class: "top-menubar border-none p-0 bg-transparent", + pt: { + rootList: "gap-0 flex-nowrap w-auto", + submenu: `dropdown-direction-${dropdownDirection.value}`, + item: "relative" + } + }, { + item: withCtx(({ item: item3, props }) => [ + createBaseVNode("a", mergeProps({ class: "p-menubar-item-link" }, props.action, { + href: item3.url, + target: "_blank" + }), [ + item3.icon ? (openBlock(), createElementBlock("span", { + key: 0, + class: normalizeClass(["p-menubar-item-icon", item3.icon]) + }, null, 2)) : createCommentVNode("", true), + createBaseVNode("span", _hoisted_2$9, toDisplayString(item3.label), 1), + item3?.comfyCommand?.keybinding ? (openBlock(), createElementBlock("span", _hoisted_3$7, toDisplayString(item3.comfyCommand.keybinding.combo.toString()), 1)) : createCommentVNode("", true) + ], 16, _hoisted_1$b) + ]), + _: 1 + }, 8, ["model", "pt"]); + }; + } +}); +const CommandMenubar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-a2b12676"]]); +var theme$2 = /* @__PURE__ */ __name(function theme7(_ref) { + var dt = _ref.dt; + return "\n.p-panel {\n border: 1px solid ".concat(dt("panel.border.color"), ";\n border-radius: ").concat(dt("panel.border.radius"), ";\n background: ").concat(dt("panel.background"), ";\n color: ").concat(dt("panel.color"), ";\n}\n\n.p-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ").concat(dt("panel.header.padding"), ";\n background: ").concat(dt("panel.header.background"), ";\n color: ").concat(dt("panel.header.color"), ";\n border-style: solid;\n border-width: ").concat(dt("panel.header.border.width"), ";\n border-color: ").concat(dt("panel.header.border.color"), ";\n border-radius: ").concat(dt("panel.header.border.radius"), ";\n}\n\n.p-panel-toggleable .p-panel-header {\n padding: ").concat(dt("panel.toggleable.header.padding"), ";\n}\n\n.p-panel-title {\n line-height: 1;\n font-weight: ").concat(dt("panel.title.font.weight"), ";\n}\n\n.p-panel-content {\n padding: ").concat(dt("panel.content.padding"), ";\n}\n\n.p-panel-footer {\n padding: ").concat(dt("panel.footer.padding"), ";\n}\n"); +}, "theme"); +var classes$2 = { + root: /* @__PURE__ */ __name(function root9(_ref2) { + var props = _ref2.props; + return ["p-panel p-component", { + "p-panel-toggleable": props.toggleable + }]; + }, "root"), + header: "p-panel-header", + title: "p-panel-title", + headerActions: "p-panel-header-actions", + pcToggleButton: "p-panel-toggle-button", + contentContainer: "p-panel-content-container", + content: "p-panel-content", + footer: "p-panel-footer" +}; +var PanelStyle = BaseStyle.extend({ + name: "panel", + theme: theme$2, + classes: classes$2 +}); +var script$1$2 = { + name: "BasePanel", + "extends": script$g, + props: { + header: String, + toggleable: Boolean, + collapsed: Boolean, + toggleButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default() { + return { + severity: "secondary", + text: true, + rounded: true + }; + }, "_default") + } + }, + style: PanelStyle, + provide: /* @__PURE__ */ __name(function provide11() { + return { + $pcPanel: this, + $parentInstance: this + }; + }, "provide") +}; +var script$4 = { + name: "Panel", + "extends": script$1$2, + inheritAttrs: false, + emits: ["update:collapsed", "toggle"], + data: /* @__PURE__ */ __name(function data7() { + return { + id: this.$attrs.id, + d_collapsed: this.collapsed + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId3(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + collapsed: /* @__PURE__ */ __name(function collapsed(newValue) { + this.d_collapsed = newValue; + }, "collapsed") + }, + mounted: /* @__PURE__ */ __name(function mounted7() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + toggle: /* @__PURE__ */ __name(function toggle2(event) { + this.d_collapsed = !this.d_collapsed; + this.$emit("update:collapsed", this.d_collapsed); + this.$emit("toggle", { + originalEvent: event, + value: this.d_collapsed + }); + }, "toggle"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown3(event) { + if (event.code === "Enter" || event.code === "NumpadEnter" || event.code === "Space") { + this.toggle(event); + event.preventDefault(); + } + }, "onKeyDown") + }, + computed: { + buttonAriaLabel: /* @__PURE__ */ __name(function buttonAriaLabel() { + return this.toggleButtonProps && this.toggleButtonProps.ariaLabel ? this.toggleButtonProps.ariaLabel : this.header; + }, "buttonAriaLabel") + }, + components: { + PlusIcon: script$C, + MinusIcon: script$D, + Button: script$f + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$a = ["id"]; +var _hoisted_2$8 = ["id", "aria-labelledby"]; +function render$8(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Button = resolveComponent("Button"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header", { + id: $data.id + "_header", + "class": normalizeClass(_ctx.cx("title")) + }, function() { + return [_ctx.header ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + id: $data.id + "_header", + "class": _ctx.cx("title") + }, _ctx.ptm("title")), toDisplayString(_ctx.header), 17, _hoisted_1$a)) : createCommentVNode("", true)]; + }), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("headerActions") + }, _ctx.ptm("headerActions")), [renderSlot(_ctx.$slots, "icons"), _ctx.toggleable ? (openBlock(), createBlock(_component_Button, mergeProps({ + key: 0, + id: $data.id + "_header", + "class": _ctx.cx("pcToggleButton"), + "aria-label": $options.buttonAriaLabel, + "aria-controls": $data.id + "_content", + "aria-expanded": !$data.d_collapsed, + unstyled: _ctx.unstyled, + onClick: $options.toggle, + onKeydown: $options.onKeyDown + }, _ctx.toggleButtonProps, { + pt: _ctx.ptm("pcToggleButton") + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, _ctx.$slots.toggleicon ? "toggleicon" : "togglericon", { + collapsed: $data.d_collapsed + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.d_collapsed ? "PlusIcon" : "MinusIcon"), mergeProps({ + "class": slotProps["class"] + }, _ctx.ptm("pcToggleButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["id", "class", "aria-label", "aria-controls", "aria-expanded", "unstyled", "onClick", "onKeydown", "pt"])) : createCommentVNode("", true)], 16)], 16), createVNode(Transition, mergeProps({ + name: "p-toggleable-content" + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [withDirectives(createBaseVNode("div", mergeProps({ + id: $data.id + "_content", + "class": _ctx.cx("contentContainer"), + role: "region", + "aria-labelledby": $data.id + "_header" + }, _ctx.ptm("contentContainer")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "default")], 16), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("footer") + }, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true)], 16, _hoisted_2$8), [[vShow, !$data.d_collapsed]])]; + }), + _: 3 + }, 16)], 16); +} +__name(render$8, "render$8"); +script$4.render = render$8; +const _hoisted_1$9 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$7 = /* @__PURE__ */ createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "M6 4v16m4-16l10 8l-10 8z" +}, null, -1); +const _hoisted_3$6 = [ + _hoisted_2$7 +]; +function render$7(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$9, [..._hoisted_3$6]); +} +__name(render$7, "render$7"); +const __unplugin_components_3 = markRaw({ name: "lucide-step-forward", render: render$7 }); +const _hoisted_1$8 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m13 19l9-7l-9-7zM2 19l9-7l-9-7z" +}, null, -1); +const _hoisted_3$5 = [ + _hoisted_2$6 +]; +function render$6(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$8, [..._hoisted_3$5]); +} +__name(render$6, "render$6"); +const __unplugin_components_2 = markRaw({ name: "lucide-fast-forward", render: render$6 }); +const _hoisted_1$7 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m6 3l14 9l-14 9z" +}, null, -1); +const _hoisted_3$4 = [ + _hoisted_2$5 +]; +function render$5(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$7, [..._hoisted_3$4]); +} +__name(render$5, "render$5"); +const __unplugin_components_1$1 = markRaw({ name: "lucide-play", render: render$5 }); +const _hoisted_1$6 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode("g", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2" +}, [ + /* @__PURE__ */ createBaseVNode("path", { d: "M16 12H3m13 6H3m7-12H3m18 12V8a2 2 0 0 0-2-2h-5" }), + /* @__PURE__ */ createBaseVNode("path", { d: "m16 8l-2-2l2-2" }) +], -1); +const _hoisted_3$3 = [ + _hoisted_2$4 +]; +function render$4(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$6, [..._hoisted_3$3]); +} +__name(render$4, "render$4"); +const __unplugin_components_0$1 = markRaw({ name: "lucide-list-start", render: render$4 }); +var theme$1 = /* @__PURE__ */ __name(function theme8(_ref) { + var dt = _ref.dt; + return "\n.p-tieredmenu {\n background: ".concat(dt("tieredmenu.background"), ";\n color: ").concat(dt("tieredmenu.color"), ";\n border: 1px solid ").concat(dt("tieredmenu.border.color"), ";\n border-radius: ").concat(dt("tieredmenu.border.radius"), ";\n min-width: 12.5rem;\n}\n\n.p-tieredmenu-root-list,\n.p-tieredmenu-submenu {\n margin: 0;\n padding: ").concat(dt("tieredmenu.list.padding"), ";\n list-style: none;\n outline: 0 none;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("tieredmenu.list.gap"), ";\n}\n\n.p-tieredmenu-submenu {\n position: absolute;\n min-width: 100%;\n z-index: 1;\n background: ").concat(dt("tieredmenu.background"), ";\n color: ").concat(dt("tieredmenu.color"), ";\n border: 1px solid ").concat(dt("tieredmenu.border.color"), ";\n border-radius: ").concat(dt("tieredmenu.border.radius"), ";\n box-shadow: ").concat(dt("tieredmenu.shadow"), ";\n}\n\n.p-tieredmenu-item {\n position: relative;\n}\n\n.p-tieredmenu-item-content {\n transition: background ").concat(dt("tieredmenu.transition.duration"), ", color ").concat(dt("tieredmenu.transition.duration"), ";\n border-radius: ").concat(dt("tieredmenu.item.border.radius"), ";\n color: ").concat(dt("tieredmenu.item.color"), ";\n}\n\n.p-tieredmenu-item-link {\n cursor: pointer;\n display: flex;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n color: inherit;\n padding: ").concat(dt("tieredmenu.item.padding"), ";\n gap: ").concat(dt("tieredmenu.item.gap"), ";\n user-select: none;\n outline: 0 none;\n}\n\n.p-tieredmenu-item-label {\n line-height: 1;\n}\n\n.p-tieredmenu-item-icon {\n color: ").concat(dt("tieredmenu.item.icon.color"), ";\n}\n\n.p-tieredmenu-submenu-icon {\n color: ").concat(dt("tieredmenu.submenu.icon.color"), ";\n margin-left: auto;\n font-size: ").concat(dt("tieredmenu.submenu.icon.size"), ";\n width: ").concat(dt("tieredmenu.submenu.icon.size"), ";\n height: ").concat(dt("tieredmenu.submenu.icon.size"), ";\n}\n\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content {\n color: ").concat(dt("tieredmenu.item.focus.color"), ";\n background: ").concat(dt("tieredmenu.item.focus.background"), ";\n}\n\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content .p-tieredmenu-item-icon {\n color: ").concat(dt("tieredmenu.item.icon.focus.color"), ";\n}\n\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content .p-tieredmenu-submenu-icon {\n color: ").concat(dt("tieredmenu.submenu.icon.focus.color"), ";\n}\n\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover {\n color: ").concat(dt("tieredmenu.item.focus.color"), ";\n background: ").concat(dt("tieredmenu.item.focus.background"), ";\n}\n\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover .p-tieredmenu-item-icon {\n color: ").concat(dt("tieredmenu.item.icon.focus.color"), ";\n}\n\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover .p-tieredmenu-submenu-icon {\n color: ").concat(dt("tieredmenu.submenu.icon.focus.color"), ";\n}\n\n.p-tieredmenu-item-active > .p-tieredmenu-item-content {\n color: ").concat(dt("tieredmenu.item.active.color"), ";\n background: ").concat(dt("tieredmenu.item.active.background"), ";\n}\n\n.p-tieredmenu-item-active > .p-tieredmenu-item-content .p-tieredmenu-item-icon {\n color: ").concat(dt("tieredmenu.item.icon.active.color"), ";\n}\n\n.p-tieredmenu-item-active > .p-tieredmenu-item-content .p-tieredmenu-submenu-icon {\n color: ").concat(dt("tieredmenu.submenu.icon.active.color"), ";\n}\n\n.p-tieredmenu-separator {\n border-top: 1px solid ").concat(dt("tieredmenu.separator.border.color"), ";\n}\n\n.p-tieredmenu-overlay {\n box-shadow: ").concat(dt("tieredmenu.shadow"), ";\n}\n\n.p-tieredmenu-enter-from,\n.p-tieredmenu-leave-active {\n opacity: 0;\n}\n\n.p-tieredmenu-enter-active {\n transition: opacity 250ms;\n}\n"); +}, "theme"); +var inlineStyles = { + submenu: /* @__PURE__ */ __name(function submenu2(_ref2) { + var instance = _ref2.instance, processedItem = _ref2.processedItem; + return { + display: instance.isItemActive(processedItem) ? "flex" : "none" + }; + }, "submenu") +}; +var classes$1 = { + root: /* @__PURE__ */ __name(function root10(_ref3) { + _ref3.instance; + var props = _ref3.props; + return ["p-tieredmenu p-component", { + "p-tieredmenu-overlay": props.popup + }]; + }, "root"), + start: "p-tieredmenu-start", + rootList: "p-tieredmenu-root-list", + item: /* @__PURE__ */ __name(function item2(_ref4) { + var instance = _ref4.instance, processedItem = _ref4.processedItem; + return ["p-tieredmenu-item", { + "p-tieredmenu-item-active": instance.isItemActive(processedItem), + "p-focus": instance.isItemFocused(processedItem), + "p-disabled": instance.isItemDisabled(processedItem) + }]; + }, "item"), + itemContent: "p-tieredmenu-item-content", + itemLink: "p-tieredmenu-item-link", + itemIcon: "p-tieredmenu-item-icon", + itemLabel: "p-tieredmenu-item-label", + submenuIcon: "p-tieredmenu-submenu-icon", + submenu: "p-tieredmenu-submenu", + separator: "p-tieredmenu-separator", + end: "p-tieredmenu-end" +}; +var TieredMenuStyle = BaseStyle.extend({ + name: "tieredmenu", + theme: theme$1, + classes: classes$1, + inlineStyles +}); +var script$2 = { + name: "BaseTieredMenu", + "extends": script$g, + props: { + popup: { + type: Boolean, + "default": false + }, + model: { + type: Array, + "default": null + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + autoZIndex: { + type: Boolean, + "default": true + }, + baseZIndex: { + type: Number, + "default": 0 + }, + disabled: { + type: Boolean, + "default": false + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: TieredMenuStyle, + provide: /* @__PURE__ */ __name(function provide12() { + return { + $pcTieredMenu: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$1 = { + name: "TieredMenuSub", + hostName: "TieredMenu", + "extends": script$g, + emits: ["item-click", "item-mouseenter", "item-mousemove"], + container: null, + props: { + menuId: { + type: String, + "default": null + }, + focusedItemId: { + type: String, + "default": null + }, + items: { + type: Array, + "default": null + }, + visible: { + type: Boolean, + "default": false + }, + level: { + type: Number, + "default": 0 + }, + templates: { + type: Object, + "default": null + }, + activeItemPath: { + type: Object, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + } + }, + methods: { + getItemId: /* @__PURE__ */ __name(function getItemId2(processedItem) { + return "".concat(this.menuId, "_").concat(processedItem.key); + }, "getItemId"), + getItemKey: /* @__PURE__ */ __name(function getItemKey2(processedItem) { + return this.getItemId(processedItem); + }, "getItemKey"), + getItemProp: /* @__PURE__ */ __name(function getItemProp3(processedItem, name, params) { + return processedItem && processedItem.item ? resolve(processedItem.item[name], params) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel3(processedItem) { + return this.getItemProp(processedItem, "label"); + }, "getItemLabel"), + getItemLabelId: /* @__PURE__ */ __name(function getItemLabelId2(processedItem) { + return "".concat(this.menuId, "_").concat(processedItem.key, "_label"); + }, "getItemLabelId"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions5(processedItem, index, key) { + return this.ptm(key, { + context: { + item: processedItem.item, + index, + active: this.isItemActive(processedItem), + focused: this.isItemFocused(processedItem), + disabled: this.isItemDisabled(processedItem) + } + }); + }, "getPTOptions"), + isItemActive: /* @__PURE__ */ __name(function isItemActive2(processedItem) { + return this.activeItemPath.some(function(path) { + return path.key === processedItem.key; + }); + }, "isItemActive"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible3(processedItem) { + return this.getItemProp(processedItem, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled3(processedItem) { + return this.getItemProp(processedItem, "disabled"); + }, "isItemDisabled"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused2(processedItem) { + return this.focusedItemId === this.getItemId(processedItem); + }, "isItemFocused"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup3(processedItem) { + return isNotEmpty(processedItem.items); + }, "isItemGroup"), + onEnter: /* @__PURE__ */ __name(function onEnter2() { + nestedPosition(this.container, this.level); + }, "onEnter"), + onItemClick: /* @__PURE__ */ __name(function onItemClick3(event, processedItem) { + this.getItemProp(processedItem, "command", { + originalEvent: event, + item: processedItem.item + }); + this.$emit("item-click", { + originalEvent: event, + processedItem, + isFocus: true + }); + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter3(event, processedItem) { + this.$emit("item-mouseenter", { + originalEvent: event, + processedItem + }); + }, "onItemMouseEnter"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove3(event, processedItem) { + this.$emit("item-mousemove", { + originalEvent: event, + processedItem + }); + }, "onItemMouseMove"), + getAriaSetSize: /* @__PURE__ */ __name(function getAriaSetSize2() { + var _this = this; + return this.items.filter(function(processedItem) { + return _this.isItemVisible(processedItem) && !_this.getItemProp(processedItem, "separator"); + }).length; + }, "getAriaSetSize"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset3(index) { + var _this2 = this; + return index - this.items.slice(0, index).filter(function(processedItem) { + return _this2.isItemVisible(processedItem) && _this2.getItemProp(processedItem, "separator"); + }).length + 1; + }, "getAriaPosInset"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps2(processedItem, index) { + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: -1, + "aria-hidden": true + }, this.getPTOptions(processedItem, index, "itemLink")), + icon: mergeProps({ + "class": [this.cx("itemIcon"), this.getItemProp(processedItem, "icon")] + }, this.getPTOptions(processedItem, index, "itemIcon")), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions(processedItem, index, "itemLabel")), + submenuicon: mergeProps({ + "class": this.cx("submenuIcon") + }, this.getPTOptions(processedItem, index, "submenuIcon")) + }; + }, "getMenuItemProps"), + containerRef: /* @__PURE__ */ __name(function containerRef2(el) { + this.container = el; + }, "containerRef") + }, + components: { + AngleRightIcon: script$z + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$1$1 = ["tabindex"]; +var _hoisted_2$3 = ["id", "aria-label", "aria-disabled", "aria-expanded", "aria-haspopup", "aria-level", "aria-setsize", "aria-posinset", "data-p-active", "data-p-focused", "data-p-disabled"]; +var _hoisted_3$2 = ["onClick", "onMouseenter", "onMousemove"]; +var _hoisted_4 = ["href", "target"]; +var _hoisted_5 = ["id"]; +var _hoisted_6 = ["id"]; +function render$1$1(_ctx, _cache, $props, $setup, $data, $options) { + var _component_AngleRightIcon = resolveComponent("AngleRightIcon"); + var _component_TieredMenuSub = resolveComponent("TieredMenuSub", true); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createBlock(Transition, mergeProps({ + name: "p-tieredmenu", + onEnter: $options.onEnter + }, _ctx.ptm("menu.transition")), { + "default": withCtx(function() { + return [($props.level === 0 ? true : $props.visible) ? (openBlock(), createElementBlock("ul", mergeProps({ + key: 0, + ref: $options.containerRef, + "class": $props.level === 0 ? _ctx.cx("rootList") : _ctx.cx("submenu"), + tabindex: $props.tabindex + }, $props.level === 0 ? _ctx.ptm("rootList") : _ctx.ptm("submenu")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function(processedItem, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getItemKey(processedItem) + }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $options.getItemId(processedItem), + style: $options.getItemProp(processedItem, "style"), + "class": [_ctx.cx("item", { + processedItem + }), $options.getItemProp(processedItem, "class")], + role: "menuitem", + "aria-label": $options.getItemLabel(processedItem), + "aria-disabled": $options.isItemDisabled(processedItem) || void 0, + "aria-expanded": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : void 0, + "aria-haspopup": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, "to") ? "menu" : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $options.getAriaSetSize(), + "aria-posinset": $options.getAriaPosInset(index), + ref_for: true + }, $options.getPTOptions(processedItem, index, "item"), { + "data-p-active": $options.isItemActive(processedItem), + "data-p-focused": $options.isItemFocused(processedItem), + "data-p-disabled": $options.isItemDisabled(processedItem) + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + onClick: /* @__PURE__ */ __name(function onClick2($event) { + return $options.onItemClick($event, processedItem); + }, "onClick"), + onMouseenter: /* @__PURE__ */ __name(function onMouseenter($event) { + return $options.onItemMouseEnter($event, processedItem); + }, "onMouseenter"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onItemMouseMove($event, processedItem); + }, "onMousemove"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemContent")), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $options.getItemProp(processedItem, "url"), + "class": _ctx.cx("itemLink"), + target: $options.getItemProp(processedItem, "target"), + tabindex: "-1", + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLink")), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 0, + item: processedItem.item, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : $options.getItemProp(processedItem, "icon") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), $options.getItemProp(processedItem, "icon")], + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemIcon")), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + id: $options.getItemLabelId(processedItem), + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLabel")), toDisplayString($options.getItemLabel(processedItem)), 17, _hoisted_5), $options.getItemProp(processedItem, "items") ? (openBlock(), createElementBlock(Fragment, { + key: 2 + }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), mergeProps({ + key: 0, + "class": _ctx.cx("submenuIcon"), + active: $options.isItemActive(processedItem), + ref_for: true + }, $options.getPTOptions(processedItem, index, "submenuIcon")), null, 16, ["class", "active"])) : (openBlock(), createBlock(_component_AngleRightIcon, mergeProps({ + key: 1, + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "submenuIcon")), null, 16, ["class"]))], 64)) : createCommentVNode("", true)], 16, _hoisted_4)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: processedItem.item, + hasSubmenu: $options.getItemProp(processedItem, "items"), + label: $options.getItemLabel(processedItem), + props: $options.getMenuItemProps(processedItem, index) + }, null, 8, ["item", "hasSubmenu", "label", "props"]))], 16, _hoisted_3$2), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_TieredMenuSub, { + key: 0, + id: $options.getItemId(processedItem) + "_list", + style: normalizeStyle(_ctx.sx("submenu", true, { + processedItem + })), + "aria-labelledby": $options.getItemLabelId(processedItem), + role: "menu", + menuId: $props.menuId, + focusedItemId: $props.focusedItemId, + items: processedItem.items, + templates: $props.templates, + activeItemPath: $props.activeItemPath, + level: $props.level + 1, + visible: $options.isItemActive(processedItem) && $options.isItemGroup(processedItem), + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onItemClick: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("item-click", $event); + }), + onItemMouseenter: _cache[1] || (_cache[1] = function($event) { + return _ctx.$emit("item-mouseenter", $event); + }), + onItemMousemove: _cache[2] || (_cache[2] = function($event) { + return _ctx.$emit("item-mousemove", $event); + }) + }, null, 8, ["id", "style", "aria-labelledby", "menuId", "focusedItemId", "items", "templates", "activeItemPath", "level", "visible", "pt", "unstyled"])) : createCommentVNode("", true)], 16, _hoisted_2$3)) : createCommentVNode("", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 1, + id: $options.getItemId(processedItem), + style: $options.getItemProp(processedItem, "style"), + "class": [_ctx.cx("separator"), $options.getItemProp(processedItem, "class")], + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16, _hoisted_6)) : createCommentVNode("", true)], 64); + }), 128))], 16, _hoisted_1$1$1)) : createCommentVNode("", true)]; + }), + _: 1 + }, 16, ["onEnter"]); +} +__name(render$1$1, "render$1$1"); +script$1$1.render = render$1$1; +var script$3 = { + name: "TieredMenu", + "extends": script$2, + inheritAttrs: false, + emits: ["focus", "blur", "before-show", "before-hide", "hide", "show"], + outsideClickListener: null, + scrollHandler: null, + resizeListener: null, + target: null, + container: null, + menubar: null, + searchTimeout: null, + searchValue: null, + data: /* @__PURE__ */ __name(function data8() { + return { + id: this.$attrs.id, + focused: false, + focusedItemInfo: { + index: -1, + level: 0, + parentKey: "" + }, + activeItemPath: [], + visible: !this.popup, + submenuVisible: false, + dirty: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId4(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + activeItemPath: /* @__PURE__ */ __name(function activeItemPath2(newPath) { + if (!this.popup) { + if (isNotEmpty(newPath)) { + this.bindOutsideClickListener(); + this.bindResizeListener(); + } else { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + } + } + }, "activeItemPath") + }, + mounted: /* @__PURE__ */ __name(function mounted8() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount7() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.container && this.autoZIndex) { + ZIndex.clear(this.container); + } + this.target = null; + this.container = null; + }, "beforeUnmount"), + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp4(item3, name) { + return item3 ? resolve(item3[name]) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel4(item3) { + return this.getItemProp(item3, "label"); + }, "getItemLabel"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled4(item3) { + return this.getItemProp(item3, "disabled"); + }, "isItemDisabled"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible4(item3) { + return this.getItemProp(item3, "visible") !== false; + }, "isItemVisible"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup4(item3) { + return isNotEmpty(this.getItemProp(item3, "items")); + }, "isItemGroup"), + isItemSeparator: /* @__PURE__ */ __name(function isItemSeparator2(item3) { + return this.getItemProp(item3, "separator"); + }, "isItemSeparator"), + getProccessedItemLabel: /* @__PURE__ */ __name(function getProccessedItemLabel2(processedItem) { + return processedItem ? this.getItemLabel(processedItem.item) : void 0; + }, "getProccessedItemLabel"), + isProccessedItemGroup: /* @__PURE__ */ __name(function isProccessedItemGroup2(processedItem) { + return processedItem && isNotEmpty(processedItem.items); + }, "isProccessedItemGroup"), + toggle: /* @__PURE__ */ __name(function toggle3(event) { + this.visible ? this.hide(event, true) : this.show(event); + }, "toggle"), + show: /* @__PURE__ */ __name(function show3(event, isFocus) { + if (this.popup) { + this.$emit("before-show"); + this.visible = true; + this.target = this.target || event.currentTarget; + this.relatedTarget = event.relatedTarget || null; + } + isFocus && focus(this.menubar); + }, "show"), + hide: /* @__PURE__ */ __name(function hide3(event, isFocus) { + if (this.popup) { + this.$emit("before-hide"); + this.visible = false; + } + this.activeItemPath = []; + this.focusedItemInfo = { + index: -1, + level: 0, + parentKey: "" + }; + isFocus && focus(this.relatedTarget || this.target || this.menubar); + this.dirty = false; + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus4(event) { + this.focused = true; + if (!this.popup) { + this.focusedItemInfo = this.focusedItemInfo.index !== -1 ? this.focusedItemInfo : { + index: this.findFirstFocusedItemIndex(), + level: 0, + parentKey: "" + }; + } + this.$emit("focus", event); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur3(event) { + this.focused = false; + this.focusedItemInfo = { + index: -1, + level: 0, + parentKey: "" + }; + this.searchValue = ""; + this.dirty = false; + this.$emit("blur", event); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown4(event) { + if (this.disabled) { + event.preventDefault(); + return; + } + var metaKey = event.metaKey || event.ctrlKey; + switch (event.code) { + case "ArrowDown": + this.onArrowDownKey(event); + break; + case "ArrowUp": + this.onArrowUpKey(event); + break; + case "ArrowLeft": + this.onArrowLeftKey(event); + break; + case "ArrowRight": + this.onArrowRightKey(event); + break; + case "Home": + this.onHomeKey(event); + break; + case "End": + this.onEndKey(event); + break; + case "Space": + this.onSpaceKey(event); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event); + break; + case "Escape": + this.onEscapeKey(event); + break; + case "Tab": + this.onTabKey(event); + break; + case "PageDown": + case "PageUp": + case "Backspace": + case "ShiftLeft": + case "ShiftRight": + break; + default: + if (!metaKey && isPrintableCharacter(event.key)) { + this.searchItems(event, event.key); + } + break; + } + }, "onKeyDown"), + onItemChange: /* @__PURE__ */ __name(function onItemChange2(event) { + var processedItem = event.processedItem, isFocus = event.isFocus; + if (isEmpty(processedItem)) return; + var index = processedItem.index, key = processedItem.key, level = processedItem.level, parentKey = processedItem.parentKey, items = processedItem.items; + var grouped = isNotEmpty(items); + var activeItemPath3 = this.activeItemPath.filter(function(p) { + return p.parentKey !== parentKey && p.parentKey !== key; + }); + if (grouped) { + activeItemPath3.push(processedItem); + this.submenuVisible = true; + } + this.focusedItemInfo = { + index, + level, + parentKey + }; + this.activeItemPath = activeItemPath3; + grouped && (this.dirty = true); + isFocus && focus(this.menubar); + }, "onItemChange"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick2(event) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event, + target: this.target + }); + }, "onOverlayClick"), + onItemClick: /* @__PURE__ */ __name(function onItemClick4(event) { + var originalEvent = event.originalEvent, processedItem = event.processedItem; + var grouped = this.isProccessedItemGroup(processedItem); + var root12 = isEmpty(processedItem.parent); + var selected = this.isSelected(processedItem); + if (selected) { + var index = processedItem.index, key = processedItem.key, level = processedItem.level, parentKey = processedItem.parentKey; + this.activeItemPath = this.activeItemPath.filter(function(p) { + return key !== p.key && key.startsWith(p.key); + }); + this.focusedItemInfo = { + index, + level, + parentKey + }; + this.dirty = !root12; + focus(this.menubar); + } else { + if (grouped) { + this.onItemChange(event); + } else { + var rootProcessedItem = root12 ? processedItem : this.activeItemPath.find(function(p) { + return p.parentKey === ""; + }); + this.hide(originalEvent); + this.changeFocusedItemIndex(originalEvent, rootProcessedItem ? rootProcessedItem.index : -1); + focus(this.menubar); + } + } + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter4(event) { + if (this.dirty) { + this.onItemChange(event); + } + }, "onItemMouseEnter"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove4(event) { + if (this.focused) { + this.changeFocusedItemIndex(event, event.processedItem.index); + } + }, "onItemMouseMove"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey3(event) { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + event.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey3(event) { + if (event.altKey) { + if (this.focusedItemInfo.index !== -1) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && this.onItemChange({ + originalEvent: event, + processedItem + }); + } + this.popup && this.hide(event, true); + event.preventDefault(); + } else { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex(); + this.changeFocusedItemIndex(event, itemIndex); + event.preventDefault(); + } + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey4(event) { + var _this = this; + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var parentItem = this.activeItemPath.find(function(p) { + return p.key === processedItem.parentKey; + }); + var root12 = isEmpty(processedItem.parent); + if (!root12) { + this.focusedItemInfo = { + index: -1, + parentKey: parentItem ? parentItem.parentKey : "" + }; + this.searchValue = ""; + this.onArrowDownKey(event); + } + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.parentKey !== _this.focusedItemInfo.parentKey; + }); + event.preventDefault(); + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey4(event) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + this.onItemChange({ + originalEvent: event, + processedItem + }); + this.focusedItemInfo = { + index: -1, + parentKey: processedItem.key + }; + this.searchValue = ""; + this.onArrowDownKey(event); + } + event.preventDefault(); + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey4(event) { + this.changeFocusedItemIndex(event, this.findFirstItemIndex()); + event.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey4(event) { + this.changeFocusedItemIndex(event, this.findLastItemIndex()); + event.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey4(event) { + if (this.focusedItemInfo.index !== -1) { + var element = findSingle(this.menubar, 'li[id="'.concat("".concat(this.focusedItemId), '"]')); + var anchorElement = element && findSingle(element, '[data-pc-section="itemlink"]'); + anchorElement ? anchorElement.click() : element && element.click(); + if (!this.popup) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex()); + } + } + event.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey2(event) { + this.onEnterKey(event); + }, "onSpaceKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey3(event) { + if (this.popup || this.focusedItemInfo.level !== 0) { + var _focusedItemInfo = this.focusedItemInfo; + this.hide(event, false); + this.focusedItemInfo = { + index: Number(_focusedItemInfo.parentKey.split("_")[0]), + level: 0, + parentKey: "" + }; + this.popup && focus(this.target); + } + event.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey3(event) { + if (this.focusedItemInfo.index !== -1) { + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && this.onItemChange({ + originalEvent: event, + processedItem + }); + } + this.hide(); + }, "onTabKey"), + onEnter: /* @__PURE__ */ __name(function onEnter3(el) { + if (this.autoZIndex) { + ZIndex.set("menu", el, this.baseZIndex + this.$primevue.config.zIndex.menu); + } + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + focus(this.menubar); + this.scrollInView(); + }, "onEnter"), + onAfterEnter: /* @__PURE__ */ __name(function onAfterEnter() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + this.$emit("show"); + }, "onAfterEnter"), + onLeave: /* @__PURE__ */ __name(function onLeave2() { + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.container = null; + this.dirty = false; + }, "onLeave"), + onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave(el) { + if (this.autoZIndex) { + ZIndex.clear(el); + } + }, "onAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay2() { + absolutePosition(this.container, this.target); + var targetWidth = getOuterWidth(this.target); + if (targetWidth > getOuterWidth(this.container)) { + this.container.style.minWidth = getOuterWidth(this.target) + "px"; + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener3() { + var _this2 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event) { + var isOutsideContainer = _this2.container && !_this2.container.contains(event.target); + var isOutsideTarget = _this2.popup ? !(_this2.target && (_this2.target === event.target || _this2.target.contains(event.target))) : true; + if (isOutsideContainer && isOutsideTarget) { + _this2.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener3() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener2() { + var _this3 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, function(event) { + _this3.hide(event, true); + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener2() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener3() { + var _this4 = this; + if (!this.resizeListener) { + this.resizeListener = function(event) { + if (!isTouchDevice()) { + _this4.hide(event, true); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener3() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + isItemMatched: /* @__PURE__ */ __name(function isItemMatched2(processedItem) { + var _this$getProccessedIt; + return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase())); + }, "isItemMatched"), + isValidItem: /* @__PURE__ */ __name(function isValidItem2(processedItem) { + return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item); + }, "isValidItem"), + isValidSelectedItem: /* @__PURE__ */ __name(function isValidSelectedItem2(processedItem) { + return this.isValidItem(processedItem) && this.isSelected(processedItem); + }, "isValidSelectedItem"), + isSelected: /* @__PURE__ */ __name(function isSelected3(processedItem) { + return this.activeItemPath.some(function(p) { + return p.key === processedItem.key; + }); + }, "isSelected"), + findFirstItemIndex: /* @__PURE__ */ __name(function findFirstItemIndex2() { + var _this5 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this5.isValidItem(processedItem); + }); + }, "findFirstItemIndex"), + findLastItemIndex: /* @__PURE__ */ __name(function findLastItemIndex2() { + var _this6 = this; + return findLastIndex(this.visibleItems, function(processedItem) { + return _this6.isValidItem(processedItem); + }); + }, "findLastItemIndex"), + findNextItemIndex: /* @__PURE__ */ __name(function findNextItemIndex2(index) { + var _this7 = this; + var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function(processedItem) { + return _this7.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index; + }, "findNextItemIndex"), + findPrevItemIndex: /* @__PURE__ */ __name(function findPrevItemIndex2(index) { + var _this8 = this; + var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function(processedItem) { + return _this8.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex : index; + }, "findPrevItemIndex"), + findSelectedItemIndex: /* @__PURE__ */ __name(function findSelectedItemIndex2() { + var _this9 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this9.isValidSelectedItem(processedItem); + }); + }, "findSelectedItemIndex"), + findFirstFocusedItemIndex: /* @__PURE__ */ __name(function findFirstFocusedItemIndex2() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex; + }, "findFirstFocusedItemIndex"), + findLastFocusedItemIndex: /* @__PURE__ */ __name(function findLastFocusedItemIndex2() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex; + }, "findLastFocusedItemIndex"), + searchItems: /* @__PURE__ */ __name(function searchItems2(event, _char) { + var _this10 = this; + this.searchValue = (this.searchValue || "") + _char; + var itemIndex = -1; + var matched = false; + if (this.focusedItemInfo.index !== -1) { + itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this10.isItemMatched(processedItem); + }); + itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this10.isItemMatched(processedItem); + }) : itemIndex + this.focusedItemInfo.index; + } else { + itemIndex = this.visibleItems.findIndex(function(processedItem) { + return _this10.isItemMatched(processedItem); + }); + } + if (itemIndex !== -1) { + matched = true; + } + if (itemIndex === -1 && this.focusedItemInfo.index === -1) { + itemIndex = this.findFirstFocusedItemIndex(); + } + if (itemIndex !== -1) { + this.changeFocusedItemIndex(event, itemIndex); + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this10.searchValue = ""; + _this10.searchTimeout = null; + }, 500); + return matched; + }, "searchItems"), + changeFocusedItemIndex: /* @__PURE__ */ __name(function changeFocusedItemIndex2(event, index) { + if (this.focusedItemInfo.index !== index) { + this.focusedItemInfo.index = index; + this.scrollInView(); + } + }, "changeFocusedItemIndex"), + scrollInView: /* @__PURE__ */ __name(function scrollInView4() { + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + var id2 = index !== -1 ? "".concat(this.id, "_").concat(index) : this.focusedItemId; + var element = findSingle(this.menubar, 'li[id="'.concat(id2, '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } + }, "scrollInView"), + createProcessedItems: /* @__PURE__ */ __name(function createProcessedItems2(items) { + var _this11 = this; + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var parentKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ""; + var processedItems3 = []; + items && items.forEach(function(item3, index) { + var key = (parentKey !== "" ? parentKey + "_" : "") + index; + var newItem = { + item: item3, + index, + level, + key, + parent, + parentKey + }; + newItem["items"] = _this11.createProcessedItems(item3.items, level + 1, newItem, key); + processedItems3.push(newItem); + }); + return processedItems3; + }, "createProcessedItems"), + containerRef: /* @__PURE__ */ __name(function containerRef3(el) { + this.container = el; + }, "containerRef"), + menubarRef: /* @__PURE__ */ __name(function menubarRef2(el) { + this.menubar = el ? el.$el : void 0; + }, "menubarRef") + }, + computed: { + processedItems: /* @__PURE__ */ __name(function processedItems2() { + return this.createProcessedItems(this.model || []); + }, "processedItems"), + visibleItems: /* @__PURE__ */ __name(function visibleItems2() { + var _this12 = this; + var processedItem = this.activeItemPath.find(function(p) { + return p.key === _this12.focusedItemInfo.parentKey; + }); + return processedItem ? processedItem.items : this.processedItems; + }, "visibleItems"), + focusedItemId: /* @__PURE__ */ __name(function focusedItemId2() { + return this.focusedItemInfo.index !== -1 ? "".concat(this.id).concat(isNotEmpty(this.focusedItemInfo.parentKey) ? "_" + this.focusedItemInfo.parentKey : "", "_").concat(this.focusedItemInfo.index) : null; + }, "focusedItemId") + }, + components: { + TieredMenuSub: script$1$1, + Portal: script$m + } +}; +var _hoisted_1$5 = ["id"]; +function render$3(_ctx, _cache, $props, $setup, $data, $options) { + var _component_TieredMenuSub = resolveComponent("TieredMenuSub"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createBlock(_component_Portal, { + appendTo: _ctx.appendTo, + disabled: !_ctx.popup + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onEnter, + onAfterEnter: $options.onAfterEnter, + onLeave: $options.onLeave, + onAfterLeave: $options.onAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.visible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.containerRef, + id: $data.id, + "class": _ctx.cx("root"), + onClick: _cache[0] || (_cache[0] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [_ctx.$slots.start ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("start") + }, _ctx.ptm("start")), [renderSlot(_ctx.$slots, "start")], 16)) : createCommentVNode("", true), createVNode(_component_TieredMenuSub, { + ref: $options.menubarRef, + id: $data.id + "_list", + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + role: "menubar", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-disabled": _ctx.disabled || void 0, + "aria-orientation": "vertical", + "aria-activedescendant": $data.focused ? $options.focusedItemId : void 0, + menuId: $data.id, + focusedItemId: $data.focused ? $options.focusedItemId : void 0, + items: $options.processedItems, + templates: _ctx.$slots, + activeItemPath: $data.activeItemPath, + level: 0, + visible: $data.submenuVisible, + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onItemClick: $options.onItemClick, + onItemMouseenter: $options.onItemMouseEnter, + onItemMousemove: $options.onItemMouseMove + }, null, 8, ["id", "tabindex", "aria-label", "aria-labelledby", "aria-disabled", "aria-activedescendant", "menuId", "focusedItemId", "items", "templates", "activeItemPath", "visible", "pt", "unstyled", "onFocus", "onBlur", "onKeydown", "onItemClick", "onItemMouseenter", "onItemMousemove"]), _ctx.$slots.end ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("end") + }, _ctx.ptm("end")), [renderSlot(_ctx.$slots, "end")], 16)) : createCommentVNode("", true)], 16, _hoisted_1$5)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo", "disabled"]); +} +__name(render$3, "render$3"); +script$3.render = render$3; +var theme9 = /* @__PURE__ */ __name(function theme10(_ref) { + var dt = _ref.dt; + return "\n.p-splitbutton {\n display: inline-flex;\n position: relative;\n border-radius: ".concat(dt("splitbutton.border.radius"), ";\n}\n\n.p-splitbutton-button {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-right: 0 none;\n}\n\n.p-splitbutton-button:focus-visible,\n.p-splitbutton-dropdown:focus-visible {\n z-index: 1;\n}\n\n.p-splitbutton-button:not(:disabled):hover,\n.p-splitbutton-button:not(:disabled):active {\n border-right: 0 none;\n}\n\n.p-splitbutton-dropdown {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.p-splitbutton .p-menu {\n min-width: 100%;\n}\n\n.p-splitbutton-fluid {\n display: flex;\n}\n\n.p-splitbutton-rounded .p-splitbutton-dropdown {\n border-top-right-radius: ").concat(dt("splitbutton.rounded.border.radius"), ";\n border-bottom-right-radius: ").concat(dt("splitbutton.rounded.border.radius"), ";\n}\n\n.p-splitbutton-rounded .p-splitbutton-button {\n border-top-left-radius: ").concat(dt("splitbutton.rounded.border.radius"), ";\n border-bottom-left-radius: ").concat(dt("splitbutton.rounded.border.radius"), ";\n}\n\n.p-splitbutton-raised {\n box-shadow: ").concat(dt("splitbutton.raised.shadow"), ";\n}\n"); +}, "theme"); +var classes = { + root: /* @__PURE__ */ __name(function root11(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-splitbutton p-component", { + "p-splitbutton-raised": props.raised, + "p-splitbutton-rounded": props.rounded, + "p-splitbutton-fluid": instance.hasFluid + }]; + }, "root"), + pcButton: "p-splitbutton-button", + pcDropdown: "p-splitbutton-dropdown" +}; +var SplitButtonStyle = BaseStyle.extend({ + name: "splitbutton", + theme: theme9, + classes +}); +var script$1 = { + name: "BaseSplitButton", + "extends": script$g, + props: { + label: { + type: String, + "default": null + }, + icon: { + type: String, + "default": null + }, + model: { + type: Array, + "default": null + }, + autoZIndex: { + type: Boolean, + "default": true + }, + baseZIndex: { + type: Number, + "default": 0 + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + disabled: { + type: Boolean, + "default": false + }, + fluid: { + type: Boolean, + "default": null + }, + "class": { + type: null, + "default": null + }, + style: { + type: null, + "default": null + }, + buttonProps: { + type: null, + "default": null + }, + menuButtonProps: { + type: null, + "default": null + }, + menuButtonIcon: { + type: String, + "default": void 0 + }, + dropdownIcon: { + type: String, + "default": void 0 + }, + severity: { + type: String, + "default": null + }, + raised: { + type: Boolean, + "default": false + }, + rounded: { + type: Boolean, + "default": false + }, + text: { + type: Boolean, + "default": false + }, + outlined: { + type: Boolean, + "default": false + }, + size: { + type: String, + "default": null + }, + plain: { + type: Boolean, + "default": false + } + }, + style: SplitButtonStyle, + provide: /* @__PURE__ */ __name(function provide13() { + return { + $pcSplitButton: this, + $parentInstance: this + }; + }, "provide") +}; +var script = { + name: "SplitButton", + "extends": script$1, + inheritAttrs: false, + emits: ["click"], + inject: { + $pcFluid: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data9() { + return { + id: this.$attrs.id, + isExpanded: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId5(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + mounted: /* @__PURE__ */ __name(function mounted9() { + var _this = this; + this.id = this.id || UniqueComponentId(); + this.$watch("$refs.menu.visible", function(newValue) { + _this.isExpanded = newValue; + }); + }, "mounted"), + methods: { + onDropdownButtonClick: /* @__PURE__ */ __name(function onDropdownButtonClick(event) { + if (event) { + event.preventDefault(); + } + this.$refs.menu.toggle({ + currentTarget: this.$el, + relatedTarget: this.$refs.button.$el + }); + this.isExpanded = this.$refs.menu.visible; + }, "onDropdownButtonClick"), + onDropdownKeydown: /* @__PURE__ */ __name(function onDropdownKeydown(event) { + if (event.code === "ArrowDown" || event.code === "ArrowUp") { + this.onDropdownButtonClick(); + event.preventDefault(); + } + }, "onDropdownKeydown"), + onDefaultButtonClick: /* @__PURE__ */ __name(function onDefaultButtonClick(event) { + if (this.isExpanded) { + this.$refs.menu.hide(event); + } + this.$emit("click", event); + }, "onDefaultButtonClick") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass() { + return [this.cx("root"), this["class"]]; + }, "containerClass"), + hasFluid: /* @__PURE__ */ __name(function hasFluid2() { + return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid; + }, "hasFluid") + }, + components: { + PVSButton: script$f, + PVSMenu: script$3, + ChevronDownIcon: script$n + } +}; +var _hoisted_1$4 = ["data-p-severity"]; +function render$2(_ctx, _cache, $props, $setup, $data, $options) { + var _component_PVSButton = resolveComponent("PVSButton"); + var _component_PVSMenu = resolveComponent("PVSMenu"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": $options.containerClass, + style: _ctx.style + }, _ctx.ptmi("root"), { + "data-p-severity": _ctx.severity + }), [createVNode(_component_PVSButton, mergeProps({ + type: "button", + "class": _ctx.cx("pcButton"), + label: _ctx.label, + disabled: _ctx.disabled, + severity: _ctx.severity, + text: _ctx.text, + icon: _ctx.icon, + outlined: _ctx.outlined, + size: _ctx.size, + fluid: _ctx.fluid, + "aria-label": _ctx.label, + onClick: $options.onDefaultButtonClick + }, _ctx.buttonProps, { + pt: _ctx.ptm("pcButton"), + unstyled: _ctx.unstyled + }), createSlots({ + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "default")]; + }), + _: 2 + }, [_ctx.$slots.icon ? { + name: "icon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "icon", { + "class": normalizeClass(slotProps["class"]) + }, function() { + return [createBaseVNode("span", mergeProps({ + "class": [_ctx.icon, slotProps["class"]] + }, _ctx.ptm("pcButton")["icon"], { + "data-pc-section": "buttonicon" + }), null, 16)]; + })]; + }), + key: "0" + } : void 0]), 1040, ["class", "label", "disabled", "severity", "text", "icon", "outlined", "size", "fluid", "aria-label", "onClick", "pt", "unstyled"]), createVNode(_component_PVSButton, mergeProps({ + ref: "button", + type: "button", + "class": _ctx.cx("pcDropdown"), + disabled: _ctx.disabled, + "aria-haspopup": "true", + "aria-expanded": $data.isExpanded, + "aria-controls": $data.id + "_overlay", + onClick: $options.onDropdownButtonClick, + onKeydown: $options.onDropdownKeydown, + severity: _ctx.severity, + text: _ctx.text, + outlined: _ctx.outlined, + size: _ctx.size, + unstyled: _ctx.unstyled + }, _ctx.menuButtonProps, { + pt: _ctx.ptm("pcDropdown") + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, _ctx.$slots.dropdownicon ? "dropdownicon" : "menubuttonicon", { + "class": normalizeClass(slotProps["class"]) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.menuButtonIcon || _ctx.dropdownIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.dropdownIcon || _ctx.menuButtonIcon, slotProps["class"]] + }, _ctx.ptm("pcDropdown")["icon"], { + "data-pc-section": "menubuttonicon" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "disabled", "aria-expanded", "aria-controls", "onClick", "onKeydown", "severity", "text", "outlined", "size", "unstyled", "pt"]), createVNode(_component_PVSMenu, { + ref: "menu", + id: $data.id + "_overlay", + model: _ctx.model, + popup: true, + autoZIndex: _ctx.autoZIndex, + baseZIndex: _ctx.baseZIndex, + appendTo: _ctx.appendTo, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcMenu") + }, createSlots({ + _: 2 + }, [_ctx.$slots.menuitemicon ? { + name: "itemicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "menuitemicon", { + item: slotProps.item, + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "0" + } : void 0, _ctx.$slots.item ? { + name: "item", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "item", { + item: slotProps.item, + hasSubmenu: slotProps.hasSubmenu, + label: slotProps.label, + props: slotProps.props + })]; + }), + key: "1" + } : void 0]), 1032, ["id", "model", "autoZIndex", "baseZIndex", "appendTo", "unstyled", "pt"])], 16, _hoisted_1$4); +} +__name(render$2, "render$2"); +script.render = render$2; +const minQueueCount = 1; +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "BatchCountEdit", + props: { + class: { default: "" } + }, + setup(__props) { + const props = __props; + const queueSettingsStore = useQueueSettingsStore(); + const { batchCount } = storeToRefs(queueSettingsStore); + const settingStore = useSettingStore(); + const maxQueueCount = computed( + () => settingStore.get("Comfy.QueueButton.BatchCountLimit") + ); + const handleClick = /* @__PURE__ */ __name((increment) => { + let newCount; + if (increment) { + const originalCount = batchCount.value - 1; + newCount = originalCount * 2; + } else { + const originalCount = batchCount.value + 1; + newCount = Math.floor(originalCount / 2); + } + batchCount.value = newCount; + }, "handleClick"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createElementBlock("div", { + class: normalizeClass(["batch-count", props.class]) + }, [ + createVNode(unref(script$E), { + class: "w-14", + modelValue: unref(batchCount), + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(batchCount) ? batchCount.value = $event : null), + min: minQueueCount, + max: maxQueueCount.value, + fluid: "", + showButtons: "", + pt: { + incrementButton: { + class: "w-6", + onmousedown: /* @__PURE__ */ __name(() => { + handleClick(true); + }, "onmousedown") + }, + decrementButton: { + class: "w-6", + onmousedown: /* @__PURE__ */ __name(() => { + handleClick(false); + }, "onmousedown") + } + } + }, null, 8, ["modelValue", "max", "pt"]) + ], 2)), [ + [ + _directive_tooltip, + _ctx.$t("menu.batchCount"), + void 0, + { bottom: true } + ] + ]); + }; + } +}); +const BatchCountEdit = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-713442be"]]); +const _withScopeId$1 = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-d3897845"), n = n(), popScopeId(), n), "_withScopeId$1"); +const _hoisted_1$3 = { class: "queue-button-group flex" }; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "ComfyQueueButton", + setup(__props) { + const workspaceStore = useWorkspaceStore(); + const queueCountStore = storeToRefs(useQueuePendingTaskCountStore()); + const { mode: queueMode } = storeToRefs(useQueueSettingsStore()); + const { t } = useI18n(); + const queueModeMenuItemLookup = computed(() => ({ + disabled: { + key: "disabled", + label: t("menu.queue"), + tooltip: t("menu.disabledTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "disabled"; + }, "command") + }, + instant: { + key: "instant", + label: `${t("menu.queue")} (${t("menu.instant")})`, + tooltip: t("menu.instantTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "instant"; + }, "command") + }, + change: { + key: "change", + label: `${t("menu.queue")} (${t("menu.onChange")})`, + tooltip: t("menu.onChangeTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "change"; + }, "command") + } + })); + const activeQueueModeMenuItem = computed( + () => queueModeMenuItemLookup.value[queueMode.value] + ); + const queueModeMenuItems = computed( + () => Object.values(queueModeMenuItemLookup.value) + ); + const executingPrompt = computed(() => !!queueCountStore.count.value); + const hasPendingTasks = computed(() => queueCountStore.count.value > 1); + const commandStore = useCommandStore(); + const queuePrompt = /* @__PURE__ */ __name((e) => { + const commandId = e.shiftKey ? "Comfy.QueuePromptFront" : "Comfy.QueuePrompt"; + commandStore.execute(commandId); + }, "queuePrompt"); + return (_ctx, _cache) => { + const _component_i_lucide58list_start = __unplugin_components_0$1; + const _component_i_lucide58play = __unplugin_components_1$1; + const _component_i_lucide58fast_forward = __unplugin_components_2; + const _component_i_lucide58step_forward = __unplugin_components_3; + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1$3, [ + withDirectives((openBlock(), createBlock(unref(script), { + class: "comfyui-queue-button", + label: activeQueueModeMenuItem.value.label, + severity: "primary", + size: "small", + onClick: queuePrompt, + model: queueModeMenuItems.value, + "data-testid": "queue-button" + }, { + icon: withCtx(() => [ + unref(workspaceStore).shiftDown ? (openBlock(), createBlock(_component_i_lucide58list_start, { key: 0 })) : unref(queueMode) === "disabled" ? (openBlock(), createBlock(_component_i_lucide58play, { key: 1 })) : unref(queueMode) === "instant" ? (openBlock(), createBlock(_component_i_lucide58fast_forward, { key: 2 })) : unref(queueMode) === "change" ? (openBlock(), createBlock(_component_i_lucide58step_forward, { key: 3 })) : createCommentVNode("", true) + ]), + item: withCtx(({ item: item3 }) => [ + withDirectives(createVNode(unref(script$f), { + label: item3.label, + icon: item3.icon, + severity: item3.key === unref(queueMode) ? "primary" : "secondary", + size: "small", + text: "" + }, null, 8, ["label", "icon", "severity"]), [ + [_directive_tooltip, item3.tooltip] + ]) + ]), + _: 1 + }, 8, ["label", "model"])), [ + [ + _directive_tooltip, + unref(workspaceStore).shiftDown ? _ctx.$t("menu.queueWorkflowFront") : _ctx.$t("menu.queueWorkflow"), + void 0, + { bottom: true } + ] + ]), + createVNode(BatchCountEdit), + createVNode(unref(script$7), { class: "execution-actions flex flex-nowrap" }, { + default: withCtx(() => [ + withDirectives(createVNode(unref(script$f), { + icon: "pi pi-times", + severity: executingPrompt.value ? "danger" : "secondary", + disabled: !executingPrompt.value, + text: "", + onClick: _cache[0] || (_cache[0] = () => unref(commandStore).execute("Comfy.Interrupt")) + }, null, 8, ["severity", "disabled"]), [ + [ + _directive_tooltip, + _ctx.$t("menu.interrupt"), + void 0, + { bottom: true } + ] + ]), + withDirectives(createVNode(unref(script$f), { + icon: "pi pi-stop", + severity: hasPendingTasks.value ? "danger" : "secondary", + disabled: !hasPendingTasks.value, + text: "", + onClick: _cache[1] || (_cache[1] = () => unref(commandStore).execute("Comfy.ClearPendingTasks")) + }, null, 8, ["severity", "disabled"]), [ + [ + _directive_tooltip, + _ctx.$t("sideToolbar.queueTab.clearPendingTasks"), + void 0, + { bottom: true } + ] + ]) + ]), + _: 1 + }) + ]); + }; + } +}); +const ComfyQueueButton = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-d3897845"]]); +const overlapThreshold = 20; +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "ComfyActionbar", + setup(__props) { + const settingsStore = useSettingStore(); + const visible = computed( + () => settingsStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const panelRef = ref(null); + const dragHandleRef = ref(null); + const isDocked = useLocalStorage("Comfy.MenuPosition.Docked", false); + const storedPosition = useLocalStorage("Comfy.MenuPosition.Floating", { + x: 0, + y: 0 + }); + const { + x, + y, + style, + isDragging + } = useDraggable(panelRef, { + initialValue: { x: 0, y: 0 }, + handle: dragHandleRef, + containerElement: document.body + }); + watchDebounced( + [x, y], + ([newX, newY]) => { + storedPosition.value = { x: newX, y: newY }; + }, + { debounce: 300 } + ); + const setInitialPosition = /* @__PURE__ */ __name(() => { + if (x.value !== 0 || y.value !== 0) { + return; + } + if (storedPosition.value.x !== 0 || storedPosition.value.y !== 0) { + x.value = storedPosition.value.x; + y.value = storedPosition.value.y; + captureLastDragState(); + return; + } + if (panelRef.value) { + const screenWidth = window.innerWidth; + const screenHeight = window.innerHeight; + const menuWidth = panelRef.value.offsetWidth; + const menuHeight = panelRef.value.offsetHeight; + if (menuWidth === 0 || menuHeight === 0) { + return; + } + x.value = (screenWidth - menuWidth) / 2; + y.value = screenHeight - menuHeight - 10; + captureLastDragState(); + } + }, "setInitialPosition"); + onMounted(setInitialPosition); + watch(visible, (newVisible) => { + if (newVisible) { + nextTick(setInitialPosition); + } + }); + const lastDragState = ref({ + x: x.value, + y: y.value, + windowWidth: window.innerWidth, + windowHeight: window.innerHeight + }); + const captureLastDragState = /* @__PURE__ */ __name(() => { + lastDragState.value = { + x: x.value, + y: y.value, + windowWidth: window.innerWidth, + windowHeight: window.innerHeight + }; + }, "captureLastDragState"); + watch( + isDragging, + (newIsDragging) => { + if (!newIsDragging) { + captureLastDragState(); + } + }, + { immediate: true } + ); + const adjustMenuPosition = /* @__PURE__ */ __name(() => { + if (panelRef.value) { + const screenWidth = window.innerWidth; + const screenHeight = window.innerHeight; + const menuWidth = panelRef.value.offsetWidth; + const menuHeight = panelRef.value.offsetHeight; + const distanceLeft = lastDragState.value.x; + const distanceRight = lastDragState.value.windowWidth - (lastDragState.value.x + menuWidth); + const distanceTop = lastDragState.value.y; + const distanceBottom = lastDragState.value.windowHeight - (lastDragState.value.y + menuHeight); + const distances = [ + { edge: "left", distance: distanceLeft }, + { edge: "right", distance: distanceRight }, + { edge: "top", distance: distanceTop }, + { edge: "bottom", distance: distanceBottom } + ]; + const closestEdge = distances.reduce( + (min, curr) => curr.distance < min.distance ? curr : min + ); + const verticalRatio = lastDragState.value.y / lastDragState.value.windowHeight; + const horizontalRatio = lastDragState.value.x / lastDragState.value.windowWidth; + if (closestEdge.edge === "left") { + x.value = closestEdge.distance; + y.value = verticalRatio * screenHeight; + } else if (closestEdge.edge === "right") { + x.value = screenWidth - menuWidth - closestEdge.distance; + y.value = verticalRatio * screenHeight; + } else if (closestEdge.edge === "top") { + x.value = horizontalRatio * screenWidth; + y.value = closestEdge.distance; + } else { + x.value = horizontalRatio * screenWidth; + y.value = screenHeight - menuHeight - closestEdge.distance; + } + x.value = lodashExports.clamp(x.value, 0, screenWidth - menuWidth); + y.value = lodashExports.clamp(y.value, 0, screenHeight - menuHeight); + } + }, "adjustMenuPosition"); + useEventListener(window, "resize", adjustMenuPosition); + const topMenuRef = inject("topMenuRef"); + const topMenuBounds = useElementBounding(topMenuRef); + const isOverlappingWithTopMenu = computed(() => { + if (!panelRef.value) { + return false; + } + const { height } = panelRef.value.getBoundingClientRect(); + const actionbarBottom = y.value + height; + const topMenuBottom = topMenuBounds.bottom.value; + const overlapPixels = Math.min(actionbarBottom, topMenuBottom) - Math.max(y.value, topMenuBounds.top.value); + return overlapPixels > overlapThreshold; + }); + watch(isDragging, (newIsDragging) => { + if (!newIsDragging) { + isDocked.value = isOverlappingWithTopMenu.value; + } else { + isDocked.value = false; + } + }); + const eventBus = useEventBus("topMenu"); + watch([isDragging, isOverlappingWithTopMenu], ([dragging, overlapping]) => { + eventBus.emit("updateHighlight", { + isDragging: dragging, + isOverlapping: overlapping + }); + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$4), { + class: normalizeClass(["actionbar w-fit", { "is-dragging": unref(isDragging), "is-docked": unref(isDocked) }]), + style: normalizeStyle(unref(style)) + }, { + default: withCtx(() => [ + createBaseVNode("div", { + class: "actionbar-content flex items-center", + ref_key: "panelRef", + ref: panelRef + }, [ + createBaseVNode("span", { + class: "drag-handle cursor-move mr-2 p-0!", + ref_key: "dragHandleRef", + ref: dragHandleRef + }, null, 512), + createVNode(ComfyQueueButton) + ], 512) + ]), + _: 1 + }, 8, ["style", "class"]); + }; + } +}); +const Actionbar = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-542a7001"]]); +const _hoisted_1$2 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("path", { + fill: "currentColor", + d: "M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-5v3h14v-3zm0-2h14V5H5zm0 2v3z" +}, null, -1); +const _hoisted_3$1 = [ + _hoisted_2$2 +]; +function render$1(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$2, [..._hoisted_3$1]); +} +__name(render$1, "render$1"); +const __unplugin_components_1 = markRaw({ name: "material-symbols-dock-to-bottom-outline", render: render$1 }); +const _hoisted_1$1 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("path", { + fill: "currentColor", + d: "M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-7h14V5H5z" +}, null, -1); +const _hoisted_3 = [ + _hoisted_2$1 +]; +function render(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._hoisted_3]); +} +__name(render, "render"); +const __unplugin_components_0 = markRaw({ name: "material-symbols-dock-to-bottom", render }); +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ + __name: "BottomPanelToggleButton", + setup(__props) { + const bottomPanelStore = useBottomPanelStore(); + return (_ctx, _cache) => { + const _component_i_material_symbols58dock_to_bottom = __unplugin_components_0; + const _component_i_material_symbols58dock_to_bottom_outline = __unplugin_components_1; + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createBlock(unref(script$f), { + severity: "secondary", + text: "", + onClick: unref(bottomPanelStore).toggleBottomPanel + }, { + icon: withCtx(() => [ + unref(bottomPanelStore).bottomPanelVisible ? (openBlock(), createBlock(_component_i_material_symbols58dock_to_bottom, { key: 0 })) : (openBlock(), createBlock(_component_i_material_symbols58dock_to_bottom_outline, { key: 1 })) + ]), + _: 1 + }, 8, ["onClick"])), [ + [vShow, unref(bottomPanelStore).bottomPanelTabs.length > 0], + [_directive_tooltip, { value: _ctx.$t("menu.toggleBottomPanel"), showDelay: 300 }] + ]); + }; + } +}); +const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-d792da31"), n = n(), popScopeId(), n), "_withScopeId"); +const _hoisted_1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("h1", { class: "comfyui-logo mx-2" }, "ComfyUI", -1)); +const _hoisted_2 = { class: "flex-grow" }; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "TopMenubar", + setup(__props) { + const workspaceState = useWorkspaceStore(); + const settingStore = useSettingStore(); + const workflowTabsPosition = computed( + () => settingStore.get("Comfy.Workflow.WorkflowTabsPosition") + ); + const betaMenuEnabled = computed( + () => settingStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const teleportTarget = computed( + () => settingStore.get("Comfy.UseNewMenu") === "Top" ? ".comfyui-body-top" : ".comfyui-body-bottom" + ); + const menuRight = ref(null); + onMounted(() => { + if (menuRight.value) { + menuRight.value.appendChild(app.menu.element); + } + }); + const topMenuRef = ref(null); + provide("topMenuRef", topMenuRef); + const eventBus = useEventBus("topMenu"); + const isDropZone = ref(false); + const isDroppable = ref(false); + eventBus.on((event, payload) => { + if (event === "updateHighlight") { + isDropZone.value = payload.isDragging; + isDroppable.value = payload.isOverlapping && payload.isDragging; + } + }); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(Teleport, { to: teleportTarget.value }, [ + withDirectives(createBaseVNode("div", { + ref_key: "topMenuRef", + ref: topMenuRef, + class: normalizeClass(["comfyui-menu flex items-center", { dropzone: isDropZone.value, "dropzone-active": isDroppable.value }]) + }, [ + _hoisted_1, + createVNode(CommandMenubar), + createVNode(unref(script$F), { + layout: "vertical", + class: "mx-2" + }), + createBaseVNode("div", _hoisted_2, [ + workflowTabsPosition.value === "Topbar" ? (openBlock(), createBlock(WorkflowTabs, { key: 0 })) : createCommentVNode("", true) + ]), + createBaseVNode("div", { + class: "comfyui-menu-right", + ref_key: "menuRight", + ref: menuRight + }, null, 512), + createVNode(Actionbar), + createVNode(_sfc_main$2), + withDirectives(createVNode(unref(script$f), { + icon: "pi pi-bars", + severity: "secondary", + text: "", + onClick: _cache[0] || (_cache[0] = ($event) => unref(workspaceState).focusMode = true), + onContextmenu: unref(showNativeMenu) + }, null, 8, ["onContextmenu"]), [ + [_directive_tooltip, { value: _ctx.$t("menu.hideMenu"), showDelay: 300 }] + ]) + ], 2), [ + [vShow, betaMenuEnabled.value && !unref(workspaceState).focusMode] + ]) + ], 8, ["to"]); + }; + } +}); +const TopMenubar = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-d792da31"]]); +function setupAutoQueueHandler() { + const queueCountStore = useQueuePendingTaskCountStore(); + const queueSettingsStore = useQueueSettingsStore(); + let graphHasChanged = false; + let internalCount = 0; + api.addEventListener("graphChanged", () => { + if (queueSettingsStore.mode === "change") { + if (internalCount) { + graphHasChanged = true; + } else { + graphHasChanged = false; + app.queuePrompt(0, queueSettingsStore.batchCount); + internalCount++; + } + } + }); + queueCountStore.$subscribe( + () => { + internalCount = queueCountStore.count; + if (!internalCount && !app.lastExecutionError) { + if (queueSettingsStore.mode === "instant" || queueSettingsStore.mode === "change" && graphHasChanged) { + graphHasChanged = false; + app.queuePrompt(0, queueSettingsStore.batchCount); + } + } + }, + { detached: true } + ); +} +__name(setupAutoQueueHandler, "setupAutoQueueHandler"); +var LatentPreviewMethod = /* @__PURE__ */ ((LatentPreviewMethod2) => { + LatentPreviewMethod2["NoPreviews"] = "none"; + LatentPreviewMethod2["Auto"] = "auto"; + LatentPreviewMethod2["Latent2RGB"] = "latent2rgb"; + LatentPreviewMethod2["TAESD"] = "taesd"; + return LatentPreviewMethod2; +})(LatentPreviewMethod || {}); +var LogLevel = /* @__PURE__ */ ((LogLevel2) => { + LogLevel2["DEBUG"] = "DEBUG"; + LogLevel2["INFO"] = "INFO"; + LogLevel2["WARNING"] = "WARNING"; + LogLevel2["ERROR"] = "ERROR"; + LogLevel2["CRITICAL"] = "CRITICAL"; + return LogLevel2; +})(LogLevel || {}); +var HashFunction = /* @__PURE__ */ ((HashFunction2) => { + HashFunction2["MD5"] = "md5"; + HashFunction2["SHA1"] = "sha1"; + HashFunction2["SHA256"] = "sha256"; + HashFunction2["SHA512"] = "sha512"; + return HashFunction2; +})(HashFunction || {}); +var AutoLaunch = /* @__PURE__ */ ((AutoLaunch2) => { + AutoLaunch2["Auto"] = "auto"; + AutoLaunch2["Disable"] = "disable"; + AutoLaunch2["Enable"] = "enable"; + return AutoLaunch2; +})(AutoLaunch || {}); +var CudaMalloc = /* @__PURE__ */ ((CudaMalloc2) => { + CudaMalloc2["Auto"] = "auto"; + CudaMalloc2["Disable"] = "disable"; + CudaMalloc2["Enable"] = "enable"; + return CudaMalloc2; +})(CudaMalloc || {}); +var FloatingPointPrecision = /* @__PURE__ */ ((FloatingPointPrecision2) => { + FloatingPointPrecision2["AUTO"] = "auto"; + FloatingPointPrecision2["FP64"] = "fp64"; + FloatingPointPrecision2["FP32"] = "fp32"; + FloatingPointPrecision2["FP16"] = "fp16"; + FloatingPointPrecision2["BF16"] = "bf16"; + FloatingPointPrecision2["FP8E4M3FN"] = "fp8_e4m3fn"; + FloatingPointPrecision2["FP8E5M2"] = "fp8_e5m2"; + return FloatingPointPrecision2; +})(FloatingPointPrecision || {}); +var CrossAttentionMethod = /* @__PURE__ */ ((CrossAttentionMethod2) => { + CrossAttentionMethod2["Auto"] = "auto"; + CrossAttentionMethod2["Split"] = "split"; + CrossAttentionMethod2["Quad"] = "quad"; + CrossAttentionMethod2["Pytorch"] = "pytorch"; + return CrossAttentionMethod2; +})(CrossAttentionMethod || {}); +var VramManagement = /* @__PURE__ */ ((VramManagement2) => { + VramManagement2["Auto"] = "auto"; + VramManagement2["GPUOnly"] = "gpu-only"; + VramManagement2["HighVram"] = "highvram"; + VramManagement2["NormalVram"] = "normalvram"; + VramManagement2["LowVram"] = "lowvram"; + VramManagement2["NoVram"] = "novram"; + VramManagement2["CPU"] = "cpu"; + return VramManagement2; +})(VramManagement || {}); +const WEB_ONLY_CONFIG_ITEMS = [ + // Launch behavior + { + id: "auto-launch", + name: "Automatically opens in the browser on startup", + category: ["Launch"], + type: "combo", + options: Object.values(AutoLaunch), + defaultValue: AutoLaunch.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case AutoLaunch.Auto: + return {}; + case AutoLaunch.Enable: + return { + ["auto-launch"]: true + }; + case AutoLaunch.Disable: + return { + ["disable-auto-launch"]: true + }; + } + }, "getValue") + } +]; +const SERVER_CONFIG_ITEMS = [ + // Network settings + { + id: "listen", + name: "Host: The IP address to listen on", + category: ["Network"], + type: "text", + defaultValue: "127.0.0.1" + }, + { + id: "port", + name: "Port: The port to listen on", + category: ["Network"], + type: "number", + // The default launch port for desktop app is 8000 instead of 8188. + defaultValue: 8e3 + }, + { + id: "tls-keyfile", + name: "TLS Key File: Path to TLS key file for HTTPS", + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "tls-certfile", + name: "TLS Certificate File: Path to TLS certificate file for HTTPS", + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "enable-cors-header", + name: 'Enable CORS header: Use "*" for all origins or specify domain', + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "max-upload-size", + name: "Maximum upload size (MB)", + category: ["Network"], + type: "number", + defaultValue: 100 + }, + // CUDA settings + { + id: "cuda-device", + name: "CUDA device index to use", + category: ["CUDA"], + type: "number", + defaultValue: null + }, + { + id: "cuda-malloc", + name: "Use CUDA malloc for memory allocation", + category: ["CUDA"], + type: "combo", + options: Object.values(CudaMalloc), + defaultValue: CudaMalloc.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case CudaMalloc.Auto: + return {}; + case CudaMalloc.Enable: + return { + ["cuda-malloc"]: true + }; + case CudaMalloc.Disable: + return { + ["disable-cuda-malloc"]: true + }; + } + }, "getValue") + }, + // Precision settings + { + id: "global-precision", + name: "Global floating point precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP32, + FloatingPointPrecision.FP16 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "Global floating point precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + case FloatingPointPrecision.FP32: + return { + ["force-fp32"]: true + }; + case FloatingPointPrecision.FP16: + return { + ["force-fp16"]: true + }; + default: + return {}; + } + }, "getValue") + }, + // UNET precision + { + id: "unet-precision", + name: "UNET precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP64, + FloatingPointPrecision.FP32, + FloatingPointPrecision.FP16, + FloatingPointPrecision.BF16, + FloatingPointPrecision.FP8E4M3FN, + FloatingPointPrecision.FP8E5M2 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "UNET precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-unet`]: true + }; + } + }, "getValue") + }, + // VAE settings + { + id: "vae-precision", + name: "VAE precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP16, + FloatingPointPrecision.FP32, + FloatingPointPrecision.BF16 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "VAE precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-vae`]: true + }; + } + }, "getValue") + }, + { + id: "cpu-vae", + name: "Run VAE on CPU", + category: ["Inference"], + type: "boolean", + defaultValue: false + }, + // Text Encoder settings + { + id: "text-encoder-precision", + name: "Text Encoder precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP8E4M3FN, + FloatingPointPrecision.FP8E5M2, + FloatingPointPrecision.FP16, + FloatingPointPrecision.FP32 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "Text Encoder precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-text-enc`]: true + }; + } + }, "getValue") + }, + // Memory and performance settings + { + id: "force-channels-last", + name: "Force channels-last memory format", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + { + id: "directml", + name: "DirectML device index", + category: ["Memory"], + type: "number", + defaultValue: null + }, + { + id: "disable-ipex-optimize", + name: "Disable IPEX optimization", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + // Preview settings + { + id: "preview-method", + name: "Method used for latent previews", + category: ["Preview"], + type: "combo", + options: Object.values(LatentPreviewMethod), + defaultValue: LatentPreviewMethod.NoPreviews + }, + { + id: "preview-size", + name: "Size of preview images", + category: ["Preview"], + type: "slider", + defaultValue: 512, + attrs: { + min: 128, + max: 2048, + step: 128 + } + }, + // Cache settings + { + id: "cache-classic", + name: "Use classic cache system", + category: ["Cache"], + type: "boolean", + defaultValue: false + }, + { + id: "cache-lru", + name: "Use LRU caching with a maximum of N node results cached.", + category: ["Cache"], + type: "number", + defaultValue: null, + tooltip: "May use more RAM/VRAM." + }, + // Attention settings + { + id: "cross-attention-method", + name: "Cross attention method", + category: ["Attention"], + type: "combo", + options: Object.values(CrossAttentionMethod), + defaultValue: CrossAttentionMethod.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case CrossAttentionMethod.Auto: + return {}; + default: + return { + [`use-${value.toLowerCase()}-cross-attention`]: true + }; + } + }, "getValue") + }, + { + id: "disable-xformers", + name: "Disable xFormers optimization", + type: "boolean", + defaultValue: false + }, + { + id: "force-upcast-attention", + name: "Force attention upcast", + category: ["Attention"], + type: "boolean", + defaultValue: false + }, + { + id: "dont-upcast-attention", + name: "Prevent attention upcast", + category: ["Attention"], + type: "boolean", + defaultValue: false + }, + // VRAM management + { + id: "vram-management", + name: "VRAM management mode", + category: ["Memory"], + type: "combo", + options: Object.values(VramManagement), + defaultValue: VramManagement.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case VramManagement.Auto: + return {}; + default: + return { + [value]: true + }; + } + }, "getValue") + }, + { + id: "reserve-vram", + name: "Reserved VRAM (GB)", + category: ["Memory"], + type: "number", + defaultValue: null, + tooltip: "Set the amount of vram in GB you want to reserve for use by your OS/other software. By default some amount is reverved depending on your OS." + }, + // Misc settings + { + id: "default-hashing-function", + name: "Default hashing function for model files", + type: "combo", + options: Object.values(HashFunction), + defaultValue: HashFunction.SHA256 + }, + { + id: "disable-smart-memory", + name: "Disable smart memory management", + tooltip: "Force ComfyUI to aggressively offload to regular ram instead of keeping models in vram when it can.", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + { + id: "deterministic", + name: "Make pytorch use slower deterministic algorithms when it can.", + type: "boolean", + defaultValue: false, + tooltip: "Note that this might not make images deterministic in all cases." + }, + { + id: "fast", + name: "Enable some untested and potentially quality deteriorating optimizations.", + type: "boolean", + defaultValue: false + }, + { + id: "dont-print-server", + name: "Don't print server output to console.", + type: "boolean", + defaultValue: false + }, + { + id: "disable-metadata", + name: "Disable saving prompt metadata in files.", + type: "boolean", + defaultValue: false + }, + { + id: "disable-all-custom-nodes", + name: "Disable loading all custom nodes.", + type: "boolean", + defaultValue: false + }, + { + id: "log-level", + name: "Logging verbosity level", + type: "combo", + options: Object.values(LogLevel), + defaultValue: LogLevel.INFO, + getValue: /* @__PURE__ */ __name((value) => { + return { + verbose: value + }; + }, "getValue") + }, + // Directories + { + id: "input-directory", + name: "Input directory", + category: ["Directories"], + type: "text", + defaultValue: "" + }, + { + id: "output-directory", + name: "Output directory", + category: ["Directories"], + type: "text", + defaultValue: "" + } +]; +function useCoreCommands() { + const getTracker = /* @__PURE__ */ __name(() => useWorkflowStore()?.activeWorkflow?.changeTracker, "getTracker"); + const getSelectedNodes = /* @__PURE__ */ __name(() => { + const selectedNodes = app.canvas.selected_nodes; + const result = []; + if (selectedNodes) { + for (const i in selectedNodes) { + const node = selectedNodes[i]; + result.push(node); + } + } + return result; + }, "getSelectedNodes"); + const toggleSelectedNodesMode = /* @__PURE__ */ __name((mode) => { + getSelectedNodes().forEach((node) => { + if (node.mode === mode) { + node.mode = LGraphEventMode.ALWAYS; + } else { + node.mode = mode; + } + }); + }, "toggleSelectedNodesMode"); + return [ + { + id: "Comfy.NewBlankWorkflow", + icon: "pi pi-plus", + label: "New Blank Workflow", + menubarLabel: "New", + function: /* @__PURE__ */ __name(() => workflowService.loadBlankWorkflow(), "function") + }, + { + id: "Comfy.OpenWorkflow", + icon: "pi pi-folder-open", + label: "Open Workflow", + menubarLabel: "Open", + function: /* @__PURE__ */ __name(() => { + app.ui.loadFile(); + }, "function") + }, + { + id: "Comfy.LoadDefaultWorkflow", + icon: "pi pi-code", + label: "Load Default Workflow", + function: /* @__PURE__ */ __name(() => workflowService.loadDefaultWorkflow(), "function") + }, + { + id: "Comfy.SaveWorkflow", + icon: "pi pi-save", + label: "Save Workflow", + menubarLabel: "Save", + function: /* @__PURE__ */ __name(async () => { + const workflow = useWorkflowStore().activeWorkflow; + if (!workflow) return; + await workflowService.saveWorkflow(workflow); + }, "function") + }, + { + id: "Comfy.SaveWorkflowAs", + icon: "pi pi-save", + label: "Save Workflow As", + menubarLabel: "Save As", + function: /* @__PURE__ */ __name(async () => { + const workflow = useWorkflowStore().activeWorkflow; + if (!workflow) return; + await workflowService.saveWorkflowAs(workflow); + }, "function") + }, + { + id: "Comfy.ExportWorkflow", + icon: "pi pi-download", + label: "Export Workflow", + menubarLabel: "Export", + function: /* @__PURE__ */ __name(() => { + workflowService.exportWorkflow("workflow", "workflow"); + }, "function") + }, + { + id: "Comfy.ExportWorkflowAPI", + icon: "pi pi-download", + label: "Export Workflow (API Format)", + menubarLabel: "Export (API)", + function: /* @__PURE__ */ __name(() => { + workflowService.exportWorkflow("workflow_api", "output"); + }, "function") + }, + { + id: "Comfy.Undo", + icon: "pi pi-undo", + label: "Undo", + function: /* @__PURE__ */ __name(async () => { + await getTracker()?.undo?.(); + }, "function") + }, + { + id: "Comfy.Redo", + icon: "pi pi-refresh", + label: "Redo", + function: /* @__PURE__ */ __name(async () => { + await getTracker()?.redo?.(); + }, "function") + }, + { + id: "Comfy.ClearWorkflow", + icon: "pi pi-trash", + label: "Clear Workflow", + function: /* @__PURE__ */ __name(() => { + const settingStore = useSettingStore(); + if (!settingStore.get("Comfy.ComfirmClear") || confirm("Clear workflow?")) { + app.clean(); + app.graph.clear(); + api.dispatchCustomEvent("graphCleared"); + } + }, "function") + }, + { + id: "Comfy.Canvas.ResetView", + icon: "pi pi-expand", + label: "Reset View", + function: /* @__PURE__ */ __name(() => { + app.resetView(); + }, "function") + }, + { + id: "Comfy.OpenClipspace", + icon: "pi pi-clipboard", + label: "Clipspace", + function: /* @__PURE__ */ __name(() => { + app.openClipspace(); + }, "function") + }, + { + id: "Comfy.RefreshNodeDefinitions", + icon: "pi pi-refresh", + label: "Refresh Node Definitions", + function: /* @__PURE__ */ __name(async () => { + await app.refreshComboInNodes(); + }, "function") + }, + { + id: "Comfy.Interrupt", + icon: "pi pi-stop", + label: "Interrupt", + function: /* @__PURE__ */ __name(async () => { + await api.interrupt(); + useToastStore().add({ + severity: "info", + summary: "Interrupted", + detail: "Execution has been interrupted", + life: 1e3 + }); + }, "function") + }, + { + id: "Comfy.ClearPendingTasks", + icon: "pi pi-stop", + label: "Clear Pending Tasks", + function: /* @__PURE__ */ __name(async () => { + await useQueueStore().clear(["queue"]); + useToastStore().add({ + severity: "info", + summary: "Confirmed", + detail: "Pending tasks deleted", + life: 3e3 + }); + }, "function") + }, + { + id: "Comfy.BrowseTemplates", + icon: "pi pi-folder-open", + label: "Browse Templates", + function: showTemplateWorkflowsDialog + }, + { + id: "Comfy.Canvas.ZoomIn", + icon: "pi pi-plus", + label: "Zoom In", + function: /* @__PURE__ */ __name(() => { + const ds = app.canvas.ds; + ds.changeScale( + ds.scale * 1.1, + ds.element ? [ds.element.width / 2, ds.element.height / 2] : void 0 + ); + app.canvas.setDirty(true, true); + }, "function") + }, + { + id: "Comfy.Canvas.ZoomOut", + icon: "pi pi-minus", + label: "Zoom Out", + function: /* @__PURE__ */ __name(() => { + const ds = app.canvas.ds; + ds.changeScale( + ds.scale / 1.1, + ds.element ? [ds.element.width / 2, ds.element.height / 2] : void 0 + ); + app.canvas.setDirty(true, true); + }, "function") + }, + { + id: "Comfy.Canvas.FitView", + icon: "pi pi-expand", + label: "Fit view to selected nodes", + function: /* @__PURE__ */ __name(() => { + if (app.canvas.empty) { + useToastStore().add({ + severity: "error", + summary: "Empty canvas", + life: 3e3 + }); + return; + } + app.canvas.fitViewToSelectionAnimated(); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleLock", + icon: "pi pi-lock", + label: "Canvas Toggle Lock", + function: /* @__PURE__ */ __name(() => { + app.canvas["read_only"] = !app.canvas["read_only"]; + }, "function") + }, + { + id: "Comfy.Canvas.ToggleLinkVisibility", + icon: "pi pi-eye", + label: "Canvas Toggle Link Visibility", + versionAdded: "1.3.6", + function: (() => { + const settingStore = useSettingStore(); + let lastLinksRenderMode = LiteGraph.SPLINE_LINK; + return () => { + const currentMode = settingStore.get("Comfy.LinkRenderMode"); + if (currentMode === LiteGraph.HIDDEN_LINK) { + settingStore.set("Comfy.LinkRenderMode", lastLinksRenderMode); + } else { + lastLinksRenderMode = currentMode; + settingStore.set("Comfy.LinkRenderMode", LiteGraph.HIDDEN_LINK); + } + }; + })() + }, + { + id: "Comfy.QueuePrompt", + icon: "pi pi-play", + label: "Queue Prompt", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const batchCount = useQueueSettingsStore().batchCount; + app.queuePrompt(0, batchCount); + }, "function") + }, + { + id: "Comfy.QueuePromptFront", + icon: "pi pi-play", + label: "Queue Prompt (Front)", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const batchCount = useQueueSettingsStore().batchCount; + app.queuePrompt(-1, batchCount); + }, "function") + }, + { + id: "Comfy.ShowSettingsDialog", + icon: "pi pi-cog", + label: "Show Settings Dialog", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + showSettingsDialog(); + }, "function") + }, + { + id: "Comfy.Graph.GroupSelectedNodes", + icon: "pi pi-sitemap", + label: "Group Selected Nodes", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const { canvas } = app; + if (!canvas.selectedItems?.size) { + useToastStore().add({ + severity: "error", + summary: "Nothing to group", + detail: "Please select the nodes (or other groups) to create a group for", + life: 3e3 + }); + return; + } + const group = new LGraphGroup(); + const padding = useSettingStore().get( + "Comfy.GroupSelectedNodes.Padding" + ); + group.resizeTo(canvas.selectedItems, padding); + canvas.graph.add(group); + useTitleEditorStore().titleEditorTarget = group; + }, "function") + }, + { + id: "Workspace.NextOpenedWorkflow", + icon: "pi pi-step-forward", + label: "Next Opened Workflow", + versionAdded: "1.3.9", + function: /* @__PURE__ */ __name(() => { + workflowService.loadNextOpenedWorkflow(); + }, "function") + }, + { + id: "Workspace.PreviousOpenedWorkflow", + icon: "pi pi-step-backward", + label: "Previous Opened Workflow", + versionAdded: "1.3.9", + function: /* @__PURE__ */ __name(() => { + workflowService.loadPreviousOpenedWorkflow(); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Mute", + icon: "pi pi-volume-off", + label: "Mute/Unmute Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + toggleSelectedNodesMode(LGraphEventMode.NEVER); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Bypass", + icon: "pi pi-shield", + label: "Bypass/Unbypass Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + toggleSelectedNodesMode(LGraphEventMode.BYPASS); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Pin", + icon: "pi pi-pin", + label: "Pin/Unpin Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + getSelectedNodes().forEach((node) => { + node.pin(!node.pinned); + }); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelected.Pin", + icon: "pi pi-pin", + label: "Pin/Unpin Selected Items", + versionAdded: "1.3.33", + function: /* @__PURE__ */ __name(() => { + for (const item3 of app.canvas.selectedItems) { + if (item3 instanceof LGraphNode || item3 instanceof LGraphGroup) { + item3.pin(!item3.pinned); + } + } + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Collapse", + icon: "pi pi-minus", + label: "Collapse/Expand Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + getSelectedNodes().forEach((node) => { + node.collapse(); + }); + }, "function") + }, + { + id: "Comfy.ToggleTheme", + icon: "pi pi-moon", + label: "Toggle Theme (Dark/Light)", + versionAdded: "1.3.12", + function: /* @__PURE__ */ (() => { + let previousDarkTheme = "dark"; + const isDarkMode = /* @__PURE__ */ __name((themeId) => themeId !== "light", "isDarkMode"); + return () => { + const settingStore = useSettingStore(); + const currentTheme = settingStore.get("Comfy.ColorPalette"); + if (isDarkMode(currentTheme)) { + previousDarkTheme = currentTheme; + settingStore.set("Comfy.ColorPalette", "light"); + } else { + settingStore.set("Comfy.ColorPalette", previousDarkTheme); + } + }; + })() + }, + { + id: "Workspace.ToggleBottomPanel", + icon: "pi pi-list", + label: "Toggle Bottom Panel", + versionAdded: "1.3.22", + function: /* @__PURE__ */ __name(() => { + useBottomPanelStore().toggleBottomPanel(); + }, "function") + }, + { + id: "Workspace.ToggleFocusMode", + icon: "pi pi-eye", + label: "Toggle Focus Mode", + versionAdded: "1.3.27", + function: /* @__PURE__ */ __name(() => { + useWorkspaceStore().toggleFocusMode(); + }, "function") + }, + { + id: "Comfy.Graph.FitGroupToContents", + icon: "pi pi-expand", + label: "Fit Group To Contents", + versionAdded: "1.4.9", + function: /* @__PURE__ */ __name(() => { + for (const group of app.canvas.selectedItems) { + if (group instanceof LGraphGroup) { + group.recomputeInsideNodes(); + const padding = useSettingStore().get( + "Comfy.GroupSelectedNodes.Padding" + ); + group.resizeTo(group.children, padding); + app.graph.change(); + } + } + }, "function") + }, + { + id: "Comfy.Help.OpenComfyUIIssues", + icon: "pi pi-github", + label: "Open ComfyUI Issues", + menubarLabel: "ComfyUI Issues", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open( + "https://github.com/comfyanonymous/ComfyUI/issues", + "_blank" + ); + }, "function") + }, + { + id: "Comfy.Help.OpenComfyUIDocs", + icon: "pi pi-info-circle", + label: "Open ComfyUI Docs", + menubarLabel: "ComfyUI Docs", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open("https://docs.comfy.org/", "_blank"); + }, "function") + }, + { + id: "Comfy.Help.OpenComfyOrgDiscord", + icon: "pi pi-discord", + label: "Open Comfy-Org Discord", + menubarLabel: "Comfy-Org Discord", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open("https://www.comfy.org/discord", "_blank"); + }, "function") + }, + { + id: "Workspace.SearchBox.Toggle", + icon: "pi pi-search", + label: "Toggle Search Box", + versionAdded: "1.5.7", + function: /* @__PURE__ */ __name(() => { + useSearchBoxStore().toggleVisible(); + }, "function") + } + ]; +} +__name(useCoreCommands, "useCoreCommands"); +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "GraphView", + setup(__props) { + setupAutoQueueHandler(); + const { t } = useI18n(); + const toast = useToast(); + const settingStore = useSettingStore(); + const executionStore = useExecutionStore(); + const theme11 = computed(() => settingStore.get("Comfy.ColorPalette")); + watch( + theme11, + (newTheme) => { + const DARK_THEME_CLASS = "dark-theme"; + const isDarkTheme = newTheme !== "light"; + if (isDarkTheme) { + document.body.classList.add(DARK_THEME_CLASS); + } else { + document.body.classList.remove(DARK_THEME_CLASS); + } + }, + { immediate: true } + ); + watchEffect(() => { + const fontSize = settingStore.get("Comfy.TextareaWidget.FontSize"); + document.documentElement.style.setProperty( + "--comfy-textarea-font-size", + `${fontSize}px` + ); + }); + watchEffect(() => { + const padding = settingStore.get("Comfy.TreeExplorer.ItemPadding"); + document.documentElement.style.setProperty( + "--comfy-tree-explorer-item-padding", + `${padding}px` + ); + }); + watchEffect(() => { + const locale = settingStore.get("Comfy.Locale"); + if (locale) { + i18n.global.locale.value = locale; + } + }); + watchEffect(() => { + const useNewMenu = settingStore.get("Comfy.UseNewMenu"); + if (useNewMenu === "Disabled") { + app.ui.menuContainer.style.removeProperty("display"); + app.ui.restoreMenuPosition(); + } else { + app.ui.menuContainer.style.setProperty("display", "none"); + } + }); + watchEffect(() => { + useQueueStore().maxHistoryItems = settingStore.get( + "Comfy.Queue.MaxHistoryItems" + ); + }); + const init = /* @__PURE__ */ __name(() => { + settingStore.addSettings(app.ui.settings); + const coreCommands = useCoreCommands(); + useCommandStore().registerCommands(coreCommands); + useMenuItemStore().registerCoreMenuCommands(); + useKeybindingStore().loadCoreKeybindings(); + useSidebarTabStore().registerCoreSidebarTabs(); + useBottomPanelStore().registerCoreBottomPanelTabs(); + app.extensionManager = useWorkspaceStore(); + }, "init"); + const queuePendingTaskCountStore = useQueuePendingTaskCountStore(); + const onStatus = /* @__PURE__ */ __name((e) => { + queuePendingTaskCountStore.update(e); + }, "onStatus"); + const reconnectingMessage = { + severity: "error", + summary: t("g.reconnecting") + }; + const onReconnecting = /* @__PURE__ */ __name(() => { + toast.remove(reconnectingMessage); + toast.add(reconnectingMessage); + }, "onReconnecting"); + const onReconnected = /* @__PURE__ */ __name(() => { + toast.remove(reconnectingMessage); + toast.add({ + severity: "success", + summary: t("g.reconnected"), + life: 2e3 + }); + }, "onReconnected"); + onMounted(() => { + api.addEventListener("status", onStatus); + api.addEventListener("reconnecting", onReconnecting); + api.addEventListener("reconnected", onReconnected); + executionStore.bindExecutionEvents(); + try { + init(); + } catch (e) { + console.error("Failed to init ComfyUI frontend", e); + } + }); + onBeforeUnmount(() => { + api.removeEventListener("status", onStatus); + api.removeEventListener("reconnecting", onReconnecting); + api.removeEventListener("reconnected", onReconnected); + executionStore.unbindExecutionEvents(); + }); + const onGraphReady = /* @__PURE__ */ __name(() => { + requestIdleCallback( + () => { + useKeybindingStore().loadUserKeybindings(); + useServerConfigStore().loadServerConfig( + SERVER_CONFIG_ITEMS, + settingStore.get("Comfy.Server.ServerConfigValues") + ); + useModelStore().loadModelFolders(); + useNodeDefStore().nodeSearchService.endsWithFilterStartSequence(""); + useNodeFrequencyStore().loadNodeFrequencies(); + }, + { timeout: 1e3 } + ); + }, "onGraphReady"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createVNode(TopMenubar), + createVNode(_sfc_main$c, { onReady: onGraphReady }), + createVNode(_sfc_main$a), + createVNode(_sfc_main$9), + createVNode(_sfc_main$8), + createVNode(MenuHamburger) + ], 64); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=GraphView-DMP_lefG.js.map diff --git a/web/assets/GraphView-DMP_lefG.js.map b/web/assets/GraphView-DMP_lefG.js.map new file mode 100644 index 000000000..1689f136a --- /dev/null +++ b/web/assets/GraphView-DMP_lefG.js.map @@ -0,0 +1 @@ +{"version":3,"file":"GraphView-DMP_lefG.js","sources":["../../src/stores/graphStore.ts","../../src/components/graph/TitleEditor.vue","../../node_modules/primevue/overlaybadge/style/index.mjs","../../node_modules/primevue/overlaybadge/index.mjs","../../src/components/sidebar/SidebarIcon.vue","../../src/components/sidebar/SidebarThemeToggleIcon.vue","../../src/components/sidebar/SidebarSettingsToggleIcon.vue","../../src/components/sidebar/SidebarLogoutIcon.vue","../../src/components/common/ExtensionSlot.vue","../../src/components/sidebar/SideToolbar.vue","../../node_modules/primevue/tablist/style/index.mjs","../../node_modules/primevue/tablist/index.mjs","../../node_modules/primevue/tab/style/index.mjs","../../node_modules/primevue/tab/index.mjs","../../src/components/bottomPanel/BottomPanel.vue","../../node_modules/primevue/splitter/style/index.mjs","../../node_modules/primevue/splitter/index.mjs","../../node_modules/primevue/splitterpanel/style/index.mjs","../../node_modules/primevue/splitterpanel/index.mjs","../../src/components/LiteGraphCanvasSplitterOverlay.vue","../../node_modules/primevue/autocomplete/style/index.mjs","../../node_modules/primevue/autocomplete/index.mjs","../../src/components/primevueOverride/AutoCompletePlus.vue","../../src/components/searchbox/NodeSearchItem.vue","../../src/components/searchbox/NodeSearchBox.vue","../../src/types/litegraphTypes.ts","../../src/stores/workspace/searchBoxStore.ts","../../src/components/searchbox/NodeSearchBoxPopover.vue","../../src/components/graph/NodeTooltip.vue","../../src/components/graph/NodeBadge.vue","../../node_modules/primevue/buttongroup/style/index.mjs","../../node_modules/primevue/buttongroup/index.mjs","../../src/components/graph/GraphCanvasMenu.vue","../../src/components/graph/GraphCanvas.vue","../../src/components/MenuHamburger.vue","../../node_modules/primevue/toast/style/index.mjs","../../node_modules/primevue/toast/index.mjs","../../src/components/toast/GlobalToast.vue","../../src/components/dialog/UnloadWindowConfirmDialog.vue","../../src/components/BrowserTabTitle.vue","../../src/components/topbar/WorkflowTabs.vue","../../node_modules/primevue/menubar/style/index.mjs","../../node_modules/primevue/menubar/index.mjs","../../src/components/topbar/CommandMenubar.vue","../../node_modules/primevue/panel/style/index.mjs","../../node_modules/primevue/panel/index.mjs","../../node_modules/primevue/tieredmenu/style/index.mjs","../../node_modules/primevue/tieredmenu/index.mjs","../../node_modules/primevue/splitbutton/style/index.mjs","../../node_modules/primevue/splitbutton/index.mjs","../../src/components/actionbar/BatchCountEdit.vue","../../src/components/actionbar/ComfyQueueButton.vue","../../src/components/actionbar/ComfyActionbar.vue","../../src/components/topbar/BottomPanelToggleButton.vue","../../src/components/topbar/TopMenubar.vue","../../src/services/autoQueueService.ts","../../src/types/serverArgs.ts","../../src/constants/serverConfig.ts","../../src/hooks/coreCommandHooks.ts","../../src/views/GraphView.vue"],"sourcesContent":["import { LGraphNode, LGraphGroup, LGraphCanvas } from '@comfyorg/litegraph'\nimport { defineStore } from 'pinia'\nimport { shallowRef } from 'vue'\n\nexport const useTitleEditorStore = defineStore('titleEditor', () => {\n const titleEditorTarget = shallowRef(null)\n\n return {\n titleEditorTarget\n }\n})\n\nexport const useCanvasStore = defineStore('canvas', () => {\n /**\n * The LGraphCanvas instance.\n *\n * The root LGraphCanvas object is shallow reactive.\n */\n const canvas = shallowRef(null)\n\n return {\n canvas\n }\n})\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-overlaybadge {\\n position: relative;\\n}\\n\\n.p-overlaybadge .p-badge {\\n position: absolute;\\n top: 0;\\n right: 0;\\n transform: translate(50%, -50%);\\n transform-origin: 100% 0;\\n margin: 0;\\n outline-width: \".concat(dt('overlaybadge.outline.width'), \";\\n outline-style: solid;\\n outline-color: \").concat(dt('overlaybadge.outline.color'), \";\\n}\\n\");\n};\nvar classes = {\n root: 'p-overlaybadge'\n};\nvar OverlayBadgeStyle = BaseStyle.extend({\n name: 'overlaybadge',\n theme: theme,\n classes: classes\n});\n\nexport { OverlayBadgeStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import Badge from 'primevue/badge';\nimport OverlayBadgeStyle from 'primevue/overlaybadge/style';\nimport { resolveComponent, openBlock, createElementBlock, mergeProps, renderSlot, createVNode } from 'vue';\n\nvar script$1 = {\n name: 'OverlayBadge',\n \"extends\": Badge,\n style: OverlayBadgeStyle,\n provide: function provide() {\n return {\n $pcOverlayBadge: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'OverlayBadge',\n \"extends\": script$1,\n inheritAttrs: false,\n components: {\n Badge: Badge\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_Badge = resolveComponent(\"Badge\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\"), createVNode(_component_Badge, mergeProps(_ctx.$props, {\n pt: _ctx.ptm('pcBadge')\n }), null, 16, [\"pt\"])], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: 'p-tablist',\n content: function content(_ref) {\n var instance = _ref.instance;\n return ['p-tablist-content', {\n 'p-tablist-viewport': instance.$pcTabs.scrollable\n }];\n },\n tabList: 'p-tablist-tab-list',\n activeBar: 'p-tablist-active-bar',\n prevButton: 'p-tablist-prev-button p-tablist-nav-button',\n nextButton: 'p-tablist-next-button p-tablist-nav-button'\n};\nvar TabListStyle = BaseStyle.extend({\n name: 'tablist',\n classes: classes\n});\n\nexport { TabListStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { getWidth, findSingle, getOuterHeight, getOffset, getOuterWidth, getHeight } from '@primeuix/utils/dom';\nimport ChevronLeftIcon from '@primevue/icons/chevronleft';\nimport ChevronRightIcon from '@primevue/icons/chevronright';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TabListStyle from 'primevue/tablist/style';\nimport Ripple from 'primevue/ripple';\nimport { resolveDirective, openBlock, createElementBlock, mergeProps, withDirectives, createBlock, resolveDynamicComponent, createCommentVNode, createElementVNode, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseTabList',\n \"extends\": BaseComponent,\n props: {},\n style: TabListStyle,\n provide: function provide() {\n return {\n $pcTabList: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'TabList',\n \"extends\": script$1,\n inheritAttrs: false,\n inject: ['$pcTabs'],\n data: function data() {\n return {\n isPrevButtonEnabled: false,\n isNextButtonEnabled: true\n };\n },\n resizeObserver: undefined,\n watch: {\n showNavigators: function showNavigators(newValue) {\n newValue ? this.bindResizeObserver() : this.unbindResizeObserver();\n },\n activeValue: {\n flush: 'post',\n handler: function handler() {\n this.updateInkBar();\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n this.$nextTick(function () {\n _this.updateInkBar();\n });\n if (this.showNavigators) {\n this.updateButtonState();\n this.bindResizeObserver();\n }\n },\n updated: function updated() {\n this.showNavigators && this.updateButtonState();\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindResizeObserver();\n },\n methods: {\n onScroll: function onScroll(event) {\n this.showNavigators && this.updateButtonState();\n event.preventDefault();\n },\n onPrevButtonClick: function onPrevButtonClick() {\n var content = this.$refs.content;\n var width = getWidth(content);\n var pos = content.scrollLeft - width;\n content.scrollLeft = pos <= 0 ? 0 : pos;\n },\n onNextButtonClick: function onNextButtonClick() {\n var content = this.$refs.content;\n var width = getWidth(content) - this.getVisibleButtonWidths();\n var pos = content.scrollLeft + width;\n var lastPos = content.scrollWidth - width;\n content.scrollLeft = pos >= lastPos ? lastPos : pos;\n },\n bindResizeObserver: function bindResizeObserver() {\n var _this2 = this;\n this.resizeObserver = new ResizeObserver(function () {\n return _this2.updateButtonState();\n });\n this.resizeObserver.observe(this.$refs.list);\n },\n unbindResizeObserver: function unbindResizeObserver() {\n var _this$resizeObserver;\n (_this$resizeObserver = this.resizeObserver) === null || _this$resizeObserver === void 0 || _this$resizeObserver.unobserve(this.$refs.list);\n this.resizeObserver = undefined;\n },\n updateInkBar: function updateInkBar() {\n var _this$$refs = this.$refs,\n content = _this$$refs.content,\n inkbar = _this$$refs.inkbar,\n tabs = _this$$refs.tabs;\n var activeTab = findSingle(content, '[data-pc-name=\"tab\"][data-p-active=\"true\"]');\n if (this.$pcTabs.isVertical()) {\n inkbar.style.height = getOuterHeight(activeTab) + 'px';\n inkbar.style.top = getOffset(activeTab).top - getOffset(tabs).top + 'px';\n } else {\n inkbar.style.width = getOuterWidth(activeTab) + 'px';\n inkbar.style.left = getOffset(activeTab).left - getOffset(tabs).left + 'px';\n }\n },\n updateButtonState: function updateButtonState() {\n var _this$$refs2 = this.$refs,\n list = _this$$refs2.list,\n content = _this$$refs2.content;\n var scrollLeft = content.scrollLeft,\n scrollTop = content.scrollTop,\n scrollWidth = content.scrollWidth,\n scrollHeight = content.scrollHeight,\n offsetWidth = content.offsetWidth,\n offsetHeight = content.offsetHeight;\n var _ref = [getWidth(content), getHeight(content)],\n width = _ref[0],\n height = _ref[1];\n if (this.$pcTabs.isVertical()) {\n this.isPrevButtonEnabled = scrollTop !== 0;\n this.isNextButtonEnabled = list.offsetHeight >= offsetHeight && parseInt(scrollTop) !== scrollHeight - height;\n } else {\n this.isPrevButtonEnabled = scrollLeft !== 0;\n this.isNextButtonEnabled = list.offsetWidth >= offsetWidth && parseInt(scrollLeft) !== scrollWidth - width;\n }\n },\n getVisibleButtonWidths: function getVisibleButtonWidths() {\n var _this$$refs3 = this.$refs,\n prevBtn = _this$$refs3.prevBtn,\n nextBtn = _this$$refs3.nextBtn;\n return [prevBtn, nextBtn].reduce(function (acc, el) {\n return el ? acc + getWidth(el) : acc;\n }, 0);\n }\n },\n computed: {\n templates: function templates() {\n return this.$pcTabs.$slots;\n },\n activeValue: function activeValue() {\n return this.$pcTabs.d_value;\n },\n showNavigators: function showNavigators() {\n return this.$pcTabs.scrollable && this.$pcTabs.showNavigators;\n },\n prevButtonAriaLabel: function prevButtonAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.previous : undefined;\n },\n nextButtonAriaLabel: function nextButtonAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.next : undefined;\n }\n },\n components: {\n ChevronLeftIcon: ChevronLeftIcon,\n ChevronRightIcon: ChevronRightIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1 = [\"aria-label\", \"tabindex\"];\nvar _hoisted_2 = [\"aria-orientation\"];\nvar _hoisted_3 = [\"aria-label\", \"tabindex\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref: \"list\",\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [$options.showNavigators && $data.isPrevButtonEnabled ? withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n key: 0,\n ref: \"prevButton\",\n \"class\": _ctx.cx('prevButton'),\n \"aria-label\": $options.prevButtonAriaLabel,\n tabindex: $options.$pcTabs.tabindex,\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.onPrevButtonClick && $options.onPrevButtonClick.apply($options, arguments);\n })\n }, _ctx.ptm('prevButton'), {\n \"data-pc-group-section\": \"navigator\"\n }), [(openBlock(), createBlock(resolveDynamicComponent($options.templates.previcon || 'ChevronLeftIcon'), mergeProps({\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('prevIcon')), null, 16))], 16, _hoisted_1)), [[_directive_ripple]]) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n ref: \"content\",\n \"class\": _ctx.cx('content'),\n onScroll: _cache[1] || (_cache[1] = function () {\n return $options.onScroll && $options.onScroll.apply($options, arguments);\n })\n }, _ctx.ptm('content')), [createElementVNode(\"div\", mergeProps({\n ref: \"tabs\",\n \"class\": _ctx.cx('tabList'),\n role: \"tablist\",\n \"aria-orientation\": $options.$pcTabs.orientation || 'horizontal'\n }, _ctx.ptm('tabList')), [renderSlot(_ctx.$slots, \"default\"), createElementVNode(\"span\", mergeProps({\n ref: \"inkbar\",\n \"class\": _ctx.cx('activeBar'),\n role: \"presentation\",\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('activeBar')), null, 16)], 16, _hoisted_2)], 16), $options.showNavigators && $data.isNextButtonEnabled ? withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n key: 1,\n ref: \"nextButton\",\n \"class\": _ctx.cx('nextButton'),\n \"aria-label\": $options.nextButtonAriaLabel,\n tabindex: $options.$pcTabs.tabindex,\n onClick: _cache[2] || (_cache[2] = function () {\n return $options.onNextButtonClick && $options.onNextButtonClick.apply($options, arguments);\n })\n }, _ctx.ptm('nextButton'), {\n \"data-pc-group-section\": \"navigator\"\n }), [(openBlock(), createBlock(resolveDynamicComponent($options.templates.nexticon || 'ChevronRightIcon'), mergeProps({\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('nextIcon')), null, 16))], 16, _hoisted_3)), [[_directive_ripple]]) : createCommentVNode(\"\", true)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: function root(_ref) {\n var instance = _ref.instance,\n props = _ref.props;\n return ['p-tab', {\n 'p-tab-active': instance.active,\n 'p-disabled': props.disabled\n }];\n }\n};\nvar TabStyle = BaseStyle.extend({\n name: 'tab',\n classes: classes\n});\n\nexport { TabStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { getAttribute, findSingle, focus } from '@primeuix/utils/dom';\nimport { equals } from '@primeuix/utils/object';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps, resolveDirective, withDirectives, openBlock, createBlock, resolveDynamicComponent, withCtx, renderSlot, normalizeClass } from 'vue';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TabStyle from 'primevue/tab/style';\n\nvar script$1 = {\n name: 'BaseTab',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n as: {\n type: [String, Object],\n \"default\": 'BUTTON'\n },\n asChild: {\n type: Boolean,\n \"default\": false\n }\n },\n style: TabStyle,\n provide: function provide() {\n return {\n $pcTab: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Tab',\n \"extends\": script$1,\n inheritAttrs: false,\n inject: ['$pcTabs', '$pcTabList'],\n methods: {\n onFocus: function onFocus() {\n this.$pcTabs.selectOnFocus && this.changeActiveValue();\n },\n onClick: function onClick() {\n this.changeActiveValue();\n },\n onKeydown: function onKeydown(event) {\n switch (event.code) {\n case 'ArrowRight':\n this.onArrowRightKey(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeftKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'PageDown':\n this.onPageDownKey(event);\n break;\n case 'PageUp':\n this.onPageUpKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n this.onEnterKey(event);\n break;\n }\n },\n onArrowRightKey: function onArrowRightKey(event) {\n var nextTab = this.findNextTab(event.currentTarget);\n nextTab ? this.changeFocusedTab(event, nextTab) : this.onHomeKey(event);\n event.preventDefault();\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var prevTab = this.findPrevTab(event.currentTarget);\n prevTab ? this.changeFocusedTab(event, prevTab) : this.onEndKey(event);\n event.preventDefault();\n },\n onHomeKey: function onHomeKey(event) {\n var firstTab = this.findFirstTab();\n this.changeFocusedTab(event, firstTab);\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n var lastTab = this.findLastTab();\n this.changeFocusedTab(event, lastTab);\n event.preventDefault();\n },\n onPageDownKey: function onPageDownKey(event) {\n this.scrollInView(this.findLastTab());\n event.preventDefault();\n },\n onPageUpKey: function onPageUpKey(event) {\n this.scrollInView(this.findFirstTab());\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n this.changeActiveValue();\n event.preventDefault();\n },\n findNextTab: function findNextTab(tabElement) {\n var selfCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var element = selfCheck ? tabElement : tabElement.nextElementSibling;\n return element ? getAttribute(element, 'data-p-disabled') || getAttribute(element, 'data-pc-section') === 'inkbar' ? this.findNextTab(element) : findSingle(element, '[data-pc-name=\"tab\"]') : null;\n },\n findPrevTab: function findPrevTab(tabElement) {\n var selfCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var element = selfCheck ? tabElement : tabElement.previousElementSibling;\n return element ? getAttribute(element, 'data-p-disabled') || getAttribute(element, 'data-pc-section') === 'inkbar' ? this.findPrevTab(element) : findSingle(element, '[data-pc-name=\"tab\"]') : null;\n },\n findFirstTab: function findFirstTab() {\n return this.findNextTab(this.$pcTabList.$refs.content.firstElementChild, true);\n },\n findLastTab: function findLastTab() {\n return this.findPrevTab(this.$pcTabList.$refs.content.lastElementChild, true);\n },\n changeActiveValue: function changeActiveValue() {\n this.$pcTabs.updateValue(this.value);\n },\n changeFocusedTab: function changeFocusedTab(event, element) {\n focus(element);\n this.scrollInView(element);\n },\n scrollInView: function scrollInView(element) {\n var _element$scrollIntoVi;\n element === null || element === void 0 || (_element$scrollIntoVi = element.scrollIntoView) === null || _element$scrollIntoVi === void 0 || _element$scrollIntoVi.call(element, {\n block: 'nearest'\n });\n }\n },\n computed: {\n active: function active() {\n var _this$$pcTabs;\n return equals((_this$$pcTabs = this.$pcTabs) === null || _this$$pcTabs === void 0 ? void 0 : _this$$pcTabs.d_value, this.value);\n },\n id: function id() {\n var _this$$pcTabs2;\n return \"\".concat((_this$$pcTabs2 = this.$pcTabs) === null || _this$$pcTabs2 === void 0 ? void 0 : _this$$pcTabs2.id, \"_tab_\").concat(this.value);\n },\n ariaControls: function ariaControls() {\n var _this$$pcTabs3;\n return \"\".concat((_this$$pcTabs3 = this.$pcTabs) === null || _this$$pcTabs3 === void 0 ? void 0 : _this$$pcTabs3.id, \"_tabpanel_\").concat(this.value);\n },\n attrs: function attrs() {\n return mergeProps(this.asAttrs, this.a11yAttrs, this.ptmi('root', this.ptParams));\n },\n asAttrs: function asAttrs() {\n return this.as === 'BUTTON' ? {\n type: 'button',\n disabled: this.disabled\n } : undefined;\n },\n a11yAttrs: function a11yAttrs() {\n return {\n id: this.id,\n tabindex: this.active ? this.$pcTabs.tabindex : -1,\n role: 'tab',\n 'aria-selected': this.active,\n 'aria-controls': this.ariaControls,\n 'data-pc-name': 'tab',\n 'data-p-disabled': this.disabled,\n 'data-p-active': this.active,\n onFocus: this.onFocus,\n onKeydown: this.onKeydown\n };\n },\n ptParams: function ptParams() {\n return {\n context: {\n active: this.active\n }\n };\n }\n },\n directives: {\n ripple: Ripple\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _directive_ripple = resolveDirective(\"ripple\");\n return !_ctx.asChild ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({\n key: 0,\n \"class\": _ctx.cx('root'),\n onClick: $options.onClick\n }, $options.attrs), {\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, \"default\")];\n }),\n _: 3\n }, 16, [\"class\", \"onClick\"])), [[_directive_ripple]]) : renderSlot(_ctx.$slots, \"default\", {\n key: 1,\n \"class\": normalizeClass(_ctx.cx('root')),\n active: $options.active,\n a11yAttrs: $options.a11yAttrs,\n onClick: $options.onClick\n });\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-splitter {\\n display: flex;\\n flex-wrap: nowrap;\\n border: 1px solid \".concat(dt('splitter.border.color'), \";\\n background: \").concat(dt('splitter.background'), \";\\n border-radius: \").concat(dt('border.radius.md'), \";\\n color: \").concat(dt('splitter.color'), \";\\n}\\n\\n.p-splitter-vertical {\\n flex-direction: column;\\n}\\n\\n.p-splitter-gutter {\\n flex-grow: 0;\\n flex-shrink: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 1;\\n background: \").concat(dt('splitter.gutter.background'), \";\\n}\\n\\n.p-splitter-gutter-handle {\\n border-radius: \").concat(dt('splitter.handle.border.radius'), \";\\n background: \").concat(dt('splitter.handle.background'), \";\\n transition: outline-color \").concat(dt('splitter.transition.duration'), \", box-shadow \").concat(dt('splitter.transition.duration'), \";\\n outline-color: transparent;\\n}\\n\\n.p-splitter-gutter-handle:focus-visible {\\n box-shadow: \").concat(dt('splitter.handle.focus.ring.shadow'), \";\\n outline: \").concat(dt('splitter.handle.focus.ring.width'), \" \").concat(dt('splitter.handle.focus.ring.style'), \" \").concat(dt('splitter.handle.focus.ring.color'), \";\\n outline-offset: \").concat(dt('splitter.handle.focus.ring.offset'), \";\\n}\\n\\n.p-splitter-horizontal.p-splitter-resizing {\\n cursor: col-resize;\\n user-select: none;\\n}\\n\\n.p-splitter-vertical.p-splitter-resizing {\\n cursor: row-resize;\\n user-select: none;\\n}\\n\\n.p-splitter-horizontal > .p-splitter-gutter > .p-splitter-gutter-handle {\\n height: \").concat(dt('splitter.handle.size'), \";\\n width: 100%;\\n}\\n\\n.p-splitter-vertical > .p-splitter-gutter > .p-splitter-gutter-handle {\\n width: \").concat(dt('splitter.handle.size'), \";\\n height: 100%;\\n}\\n\\n.p-splitter-horizontal > .p-splitter-gutter {\\n cursor: col-resize;\\n}\\n\\n.p-splitter-vertical > .p-splitter-gutter {\\n cursor: row-resize;\\n}\\n\\n.p-splitterpanel {\\n flex-grow: 1;\\n overflow: hidden;\\n}\\n\\n.p-splitterpanel-nested {\\n display: flex;\\n}\\n\\n.p-splitterpanel .p-splitter {\\n flex-grow: 1;\\n border: 0 none;\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-splitter p-component', 'p-splitter-' + props.layout];\n },\n gutter: 'p-splitter-gutter',\n gutterHandle: 'p-splitter-gutter-handle'\n};\nvar inlineStyles = {\n root: function root(_ref3) {\n var props = _ref3.props;\n return [{\n display: 'flex',\n 'flex-wrap': 'nowrap'\n }, props.layout === 'vertical' ? {\n 'flex-direction': 'column'\n } : ''];\n }\n};\nvar SplitterStyle = BaseStyle.extend({\n name: 'splitter',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { SplitterStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { getVNodeProp } from '@primevue/core/utils';\nimport { getWidth, getHeight, getOuterWidth, getOuterHeight } from '@primeuix/utils/dom';\nimport { isArray } from '@primeuix/utils/object';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SplitterStyle from 'primevue/splitter/style';\nimport { openBlock, createElementBlock, mergeProps, Fragment, renderList, createBlock, resolveDynamicComponent, createElementVNode, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseSplitter',\n \"extends\": BaseComponent,\n props: {\n layout: {\n type: String,\n \"default\": 'horizontal'\n },\n gutterSize: {\n type: Number,\n \"default\": 4\n },\n stateKey: {\n type: String,\n \"default\": null\n },\n stateStorage: {\n type: String,\n \"default\": 'session'\n },\n step: {\n type: Number,\n \"default\": 5\n }\n },\n style: SplitterStyle,\n provide: function provide() {\n return {\n $pcSplitter: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script = {\n name: 'Splitter',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['resizestart', 'resizeend', 'resize'],\n dragging: false,\n mouseMoveListener: null,\n mouseUpListener: null,\n touchMoveListener: null,\n touchEndListener: null,\n size: null,\n gutterElement: null,\n startPos: null,\n prevPanelElement: null,\n nextPanelElement: null,\n nextPanelSize: null,\n prevPanelSize: null,\n panelSizes: null,\n prevPanelIndex: null,\n timer: null,\n data: function data() {\n return {\n prevSize: null\n };\n },\n mounted: function mounted() {\n var _this = this;\n if (this.panels && this.panels.length) {\n var initialized = false;\n if (this.isStateful()) {\n initialized = this.restoreState();\n }\n if (!initialized) {\n var children = _toConsumableArray(this.$el.children).filter(function (child) {\n return child.getAttribute('data-pc-name') === 'splitterpanel';\n });\n var _panelSizes = [];\n this.panels.map(function (panel, i) {\n var panelInitialSize = panel.props && panel.props.size ? panel.props.size : null;\n var panelSize = panelInitialSize || 100 / _this.panels.length;\n _panelSizes[i] = panelSize;\n children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + (_this.panels.length - 1) * _this.gutterSize + 'px)';\n });\n this.panelSizes = _panelSizes;\n this.prevSize = parseFloat(_panelSizes[0]).toFixed(4);\n }\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.clear();\n this.unbindMouseListeners();\n },\n methods: {\n isSplitterPanel: function isSplitterPanel(child) {\n return child.type.name === 'SplitterPanel';\n },\n onResizeStart: function onResizeStart(event, index, isKeyDown) {\n this.gutterElement = event.currentTarget || event.target.parentElement;\n this.size = this.horizontal ? getWidth(this.$el) : getHeight(this.$el);\n if (!isKeyDown) {\n this.dragging = true;\n this.startPos = this.layout === 'horizontal' ? event.pageX || event.changedTouches[0].pageX : event.pageY || event.changedTouches[0].pageY;\n }\n this.prevPanelElement = this.gutterElement.previousElementSibling;\n this.nextPanelElement = this.gutterElement.nextElementSibling;\n if (isKeyDown) {\n this.prevPanelSize = this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true);\n this.nextPanelSize = this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true);\n } else {\n this.prevPanelSize = 100 * (this.horizontal ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true)) / this.size;\n this.nextPanelSize = 100 * (this.horizontal ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true)) / this.size;\n }\n this.prevPanelIndex = index;\n this.$emit('resizestart', {\n originalEvent: event,\n sizes: this.panelSizes\n });\n this.$refs.gutter[index].setAttribute('data-p-gutter-resizing', true);\n this.$el.setAttribute('data-p-resizing', true);\n },\n onResize: function onResize(event, step, isKeyDown) {\n var newPos, newPrevPanelSize, newNextPanelSize;\n if (isKeyDown) {\n if (this.horizontal) {\n newPrevPanelSize = 100 * (this.prevPanelSize + step) / this.size;\n newNextPanelSize = 100 * (this.nextPanelSize - step) / this.size;\n } else {\n newPrevPanelSize = 100 * (this.prevPanelSize - step) / this.size;\n newNextPanelSize = 100 * (this.nextPanelSize + step) / this.size;\n }\n } else {\n if (this.horizontal) newPos = event.pageX * 100 / this.size - this.startPos * 100 / this.size;else newPos = event.pageY * 100 / this.size - this.startPos * 100 / this.size;\n newPrevPanelSize = this.prevPanelSize + newPos;\n newNextPanelSize = this.nextPanelSize - newPos;\n }\n if (this.validateResize(newPrevPanelSize, newNextPanelSize)) {\n this.prevPanelElement.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n this.nextPanelElement.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n this.panelSizes[this.prevPanelIndex] = newPrevPanelSize;\n this.panelSizes[this.prevPanelIndex + 1] = newNextPanelSize;\n this.prevSize = parseFloat(newPrevPanelSize).toFixed(4);\n }\n this.$emit('resize', {\n originalEvent: event,\n sizes: this.panelSizes\n });\n },\n onResizeEnd: function onResizeEnd(event) {\n if (this.isStateful()) {\n this.saveState();\n }\n this.$emit('resizeend', {\n originalEvent: event,\n sizes: this.panelSizes\n });\n this.$refs.gutter.forEach(function (gutter) {\n return gutter.setAttribute('data-p-gutter-resizing', false);\n });\n this.$el.setAttribute('data-p-resizing', false);\n this.clear();\n },\n repeat: function repeat(event, index, step) {\n this.onResizeStart(event, index, true);\n this.onResize(event, step, true);\n },\n setTimer: function setTimer(event, index, step) {\n var _this2 = this;\n if (!this.timer) {\n this.timer = setInterval(function () {\n _this2.repeat(event, index, step);\n }, 40);\n }\n },\n clearTimer: function clearTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n },\n onGutterKeyUp: function onGutterKeyUp() {\n this.clearTimer();\n this.onResizeEnd();\n },\n onGutterKeyDown: function onGutterKeyDown(event, index) {\n switch (event.code) {\n case 'ArrowLeft':\n {\n if (this.layout === 'horizontal') {\n this.setTimer(event, index, this.step * -1);\n }\n event.preventDefault();\n break;\n }\n case 'ArrowRight':\n {\n if (this.layout === 'horizontal') {\n this.setTimer(event, index, this.step);\n }\n event.preventDefault();\n break;\n }\n case 'ArrowDown':\n {\n if (this.layout === 'vertical') {\n this.setTimer(event, index, this.step * -1);\n }\n event.preventDefault();\n break;\n }\n case 'ArrowUp':\n {\n if (this.layout === 'vertical') {\n this.setTimer(event, index, this.step);\n }\n event.preventDefault();\n break;\n }\n }\n },\n onGutterMouseDown: function onGutterMouseDown(event, index) {\n this.onResizeStart(event, index);\n this.bindMouseListeners();\n },\n onGutterTouchStart: function onGutterTouchStart(event, index) {\n this.onResizeStart(event, index);\n this.bindTouchListeners();\n event.preventDefault();\n },\n onGutterTouchMove: function onGutterTouchMove(event) {\n this.onResize(event);\n event.preventDefault();\n },\n onGutterTouchEnd: function onGutterTouchEnd(event) {\n this.onResizeEnd(event);\n this.unbindTouchListeners();\n event.preventDefault();\n },\n bindMouseListeners: function bindMouseListeners() {\n var _this3 = this;\n if (!this.mouseMoveListener) {\n this.mouseMoveListener = function (event) {\n return _this3.onResize(event);\n };\n document.addEventListener('mousemove', this.mouseMoveListener);\n }\n if (!this.mouseUpListener) {\n this.mouseUpListener = function (event) {\n _this3.onResizeEnd(event);\n _this3.unbindMouseListeners();\n };\n document.addEventListener('mouseup', this.mouseUpListener);\n }\n },\n bindTouchListeners: function bindTouchListeners() {\n var _this4 = this;\n if (!this.touchMoveListener) {\n this.touchMoveListener = function (event) {\n return _this4.onResize(event.changedTouches[0]);\n };\n document.addEventListener('touchmove', this.touchMoveListener);\n }\n if (!this.touchEndListener) {\n this.touchEndListener = function (event) {\n _this4.resizeEnd(event);\n _this4.unbindTouchListeners();\n };\n document.addEventListener('touchend', this.touchEndListener);\n }\n },\n validateResize: function validateResize(newPrevPanelSize, newNextPanelSize) {\n if (newPrevPanelSize > 100 || newPrevPanelSize < 0) return false;\n if (newNextPanelSize > 100 || newNextPanelSize < 0) return false;\n var prevPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex], 'minSize');\n if (this.panels[this.prevPanelIndex].props && prevPanelMinSize && prevPanelMinSize > newPrevPanelSize) {\n return false;\n }\n var newPanelMinSize = getVNodeProp(this.panels[this.prevPanelIndex + 1], 'minSize');\n if (this.panels[this.prevPanelIndex + 1].props && newPanelMinSize && newPanelMinSize > newNextPanelSize) {\n return false;\n }\n return true;\n },\n unbindMouseListeners: function unbindMouseListeners() {\n if (this.mouseMoveListener) {\n document.removeEventListener('mousemove', this.mouseMoveListener);\n this.mouseMoveListener = null;\n }\n if (this.mouseUpListener) {\n document.removeEventListener('mouseup', this.mouseUpListener);\n this.mouseUpListener = null;\n }\n },\n unbindTouchListeners: function unbindTouchListeners() {\n if (this.touchMoveListener) {\n document.removeEventListener('touchmove', this.touchMoveListener);\n this.touchMoveListener = null;\n }\n if (this.touchEndListener) {\n document.removeEventListener('touchend', this.touchEndListener);\n this.touchEndListener = null;\n }\n },\n clear: function clear() {\n this.dragging = false;\n this.size = null;\n this.startPos = null;\n this.prevPanelElement = null;\n this.nextPanelElement = null;\n this.prevPanelSize = null;\n this.nextPanelSize = null;\n this.gutterElement = null;\n this.prevPanelIndex = null;\n },\n isStateful: function isStateful() {\n return this.stateKey != null;\n },\n getStorage: function getStorage() {\n switch (this.stateStorage) {\n case 'local':\n return window.localStorage;\n case 'session':\n return window.sessionStorage;\n default:\n throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n }\n },\n saveState: function saveState() {\n if (isArray(this.panelSizes)) {\n this.getStorage().setItem(this.stateKey, JSON.stringify(this.panelSizes));\n }\n },\n restoreState: function restoreState() {\n var _this5 = this;\n var storage = this.getStorage();\n var stateString = storage.getItem(this.stateKey);\n if (stateString) {\n this.panelSizes = JSON.parse(stateString);\n var children = _toConsumableArray(this.$el.children).filter(function (child) {\n return child.getAttribute('data-pc-name') === 'splitterpanel';\n });\n children.forEach(function (child, i) {\n child.style.flexBasis = 'calc(' + _this5.panelSizes[i] + '% - ' + (_this5.panels.length - 1) * _this5.gutterSize + 'px)';\n });\n return true;\n }\n return false;\n }\n },\n computed: {\n panels: function panels() {\n var _this6 = this;\n var panels = [];\n this.$slots[\"default\"]().forEach(function (child) {\n if (_this6.isSplitterPanel(child)) {\n panels.push(child);\n } else if (child.children instanceof Array) {\n child.children.forEach(function (nestedChild) {\n if (_this6.isSplitterPanel(nestedChild)) {\n panels.push(nestedChild);\n }\n });\n }\n });\n return panels;\n },\n gutterStyle: function gutterStyle() {\n if (this.horizontal) return {\n width: this.gutterSize + 'px'\n };else return {\n height: this.gutterSize + 'px'\n };\n },\n horizontal: function horizontal() {\n return this.layout === 'horizontal';\n },\n getPTOptions: function getPTOptions() {\n var _this$$parentInstance;\n return {\n context: {\n nested: (_this$$parentInstance = this.$parentInstance) === null || _this$$parentInstance === void 0 ? void 0 : _this$$parentInstance.nestedState\n }\n };\n }\n }\n};\n\nvar _hoisted_1 = [\"onMousedown\", \"onTouchstart\", \"onTouchmove\", \"onTouchend\"];\nvar _hoisted_2 = [\"aria-orientation\", \"aria-valuenow\", \"onKeydown\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n style: _ctx.sx('root'),\n \"data-p-resizing\": false\n }, _ctx.ptmi('root', $options.getPTOptions)), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.panels, function (panel, i) {\n return openBlock(), createElementBlock(Fragment, {\n key: i\n }, [(openBlock(), createBlock(resolveDynamicComponent(panel), {\n tabindex: \"-1\"\n })), i !== $options.panels.length - 1 ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n ref_for: true,\n ref: \"gutter\",\n \"class\": _ctx.cx('gutter'),\n role: \"separator\",\n tabindex: \"-1\",\n onMousedown: function onMousedown($event) {\n return $options.onGutterMouseDown($event, i);\n },\n onTouchstart: function onTouchstart($event) {\n return $options.onGutterTouchStart($event, i);\n },\n onTouchmove: function onTouchmove($event) {\n return $options.onGutterTouchMove($event, i);\n },\n onTouchend: function onTouchend($event) {\n return $options.onGutterTouchEnd($event, i);\n },\n \"data-p-gutter-resizing\": false\n }, _ctx.ptm('gutter')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('gutterHandle'),\n tabindex: \"0\",\n style: [$options.gutterStyle],\n \"aria-orientation\": _ctx.layout,\n \"aria-valuenow\": $data.prevSize,\n onKeyup: _cache[0] || (_cache[0] = function () {\n return $options.onGutterKeyUp && $options.onGutterKeyUp.apply($options, arguments);\n }),\n onKeydown: function onKeydown($event) {\n return $options.onGutterKeyDown($event, i);\n },\n ref_for: true\n }, _ctx.ptm('gutterHandle')), null, 16, _hoisted_2)], 16, _hoisted_1)) : createCommentVNode(\"\", true)], 64);\n }), 128))], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: function root(_ref) {\n var instance = _ref.instance;\n return ['p-splitterpanel', {\n 'p-splitterpanel-nested': instance.isNested\n }];\n }\n};\nvar SplitterPanelStyle = BaseStyle.extend({\n name: 'splitterpanel',\n classes: classes\n});\n\nexport { SplitterPanelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport SplitterPanelStyle from 'primevue/splitterpanel/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseSplitterPanel',\n \"extends\": BaseComponent,\n props: {\n size: {\n type: Number,\n \"default\": null\n },\n minSize: {\n type: Number,\n \"default\": null\n }\n },\n style: SplitterPanelStyle,\n provide: function provide() {\n return {\n $pcSplitterPanel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'SplitterPanel',\n \"extends\": script$1,\n inheritAttrs: false,\n data: function data() {\n return {\n nestedState: null\n };\n },\n computed: {\n isNested: function isNested() {\n var _this = this;\n return this.$slots[\"default\"]().some(function (child) {\n _this.nestedState = child.type.name === 'Splitter' ? true : null;\n return _this.nestedState;\n });\n },\n getPTOptions: function getPTOptions() {\n return {\n context: {\n nested: this.isNested\n }\n };\n }\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref: \"container\",\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root', $options.getPTOptions)), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","import { isNotEmpty } from '@primeuix/utils/object';\nimport BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-autocomplete {\\n display: inline-flex;\\n}\\n\\n.p-autocomplete-loader {\\n position: absolute;\\n top: 50%;\\n margin-top: -0.5rem;\\n right: \".concat(dt('autocomplete.padding.x'), \";\\n}\\n\\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-loader {\\n right: calc(\").concat(dt('autocomplete.dropdown.width'), \" + \").concat(dt('autocomplete.padding.x'), \");\\n}\\n\\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input {\\n flex: 1 1 auto;\\n width: 1%;\\n}\\n\\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input,\\n.p-autocomplete:has(.p-autocomplete-dropdown) .p-autocomplete-input-multiple {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\\n.p-autocomplete-dropdown {\\n cursor: pointer;\\n display: inline-flex;\\n cursor: pointer;\\n user-select: none;\\n align-items: center;\\n justify-content: center;\\n overflow: hidden;\\n position: relative;\\n width: \").concat(dt('autocomplete.dropdown.width'), \";\\n border-top-right-radius: \").concat(dt('autocomplete.dropdown.border.radius'), \";\\n border-bottom-right-radius: \").concat(dt('autocomplete.dropdown.border.radius'), \";\\n background: \").concat(dt('autocomplete.dropdown.background'), \";\\n border: 1px solid \").concat(dt('autocomplete.dropdown.border.color'), \";\\n border-left: 0 none;\\n color: \").concat(dt('autocomplete.dropdown.color'), \";\\n transition: background \").concat(dt('autocomplete.transition.duration'), \", color \").concat(dt('autocomplete.transition.duration'), \", border-color \").concat(dt('autocomplete.transition.duration'), \", outline-color \").concat(dt('autocomplete.transition.duration'), \", box-shadow \").concat(dt('autocomplete.transition.duration'), \";\\n outline-color: transparent;\\n}\\n\\n.p-autocomplete-dropdown:not(:disabled):hover {\\n background: \").concat(dt('autocomplete.dropdown.hover.background'), \";\\n border-color: \").concat(dt('autocomplete.dropdown.hover.border.color'), \";\\n color: \").concat(dt('autocomplete.dropdown.hover.color'), \";\\n}\\n\\n.p-autocomplete-dropdown:not(:disabled):active {\\n background: \").concat(dt('autocomplete.dropdown.active.background'), \";\\n border-color: \").concat(dt('autocomplete.dropdown.active.border.color'), \";\\n color: \").concat(dt('autocomplete.dropdown.active.color'), \";\\n}\\n\\n.p-autocomplete-dropdown:focus-visible {\\n box-shadow: \").concat(dt('autocomplete.dropdown.focus.ring.shadow'), \";\\n outline: \").concat(dt('autocomplete.dropdown.focus.ring.width'), \" \").concat(dt('autocomplete.dropdown.focus.ring.style'), \" \").concat(dt('autocomplete.dropdown.focus.ring.color'), \";\\n outline-offset: \").concat(dt('autocomplete.dropdown.focus.ring.offset'), \";\\n}\\n\\n.p-autocomplete .p-autocomplete-overlay {\\n min-width: 100%;\\n}\\n\\n.p-autocomplete-overlay {\\n position: absolute;\\n overflow: auto;\\n top: 0;\\n left: 0;\\n background: \").concat(dt('autocomplete.overlay.background'), \";\\n color: \").concat(dt('autocomplete.overlay.color'), \";\\n border: 1px solid \").concat(dt('autocomplete.overlay.border.color'), \";\\n border-radius: \").concat(dt('autocomplete.overlay.border.radius'), \";\\n box-shadow: \").concat(dt('autocomplete.overlay.shadow'), \";\\n}\\n\\n.p-autocomplete-list {\\n margin: 0;\\n padding: 0;\\n list-style-type: none;\\n display: flex;\\n flex-direction: column;\\n gap: \").concat(dt('autocomplete.list.gap'), \";\\n padding: \").concat(dt('autocomplete.list.padding'), \";\\n}\\n\\n.p-autocomplete-option {\\n cursor: pointer;\\n white-space: nowrap;\\n position: relative;\\n overflow: hidden;\\n display: flex;\\n align-items: center;\\n padding: \").concat(dt('autocomplete.option.padding'), \";\\n border: 0 none;\\n color: \").concat(dt('autocomplete.option.color'), \";\\n background: transparent;\\n transition: background \").concat(dt('autocomplete.transition.duration'), \", color \").concat(dt('autocomplete.transition.duration'), \", border-color \").concat(dt('autocomplete.transition.duration'), \";\\n border-radius: \").concat(dt('autocomplete.option.border.radius'), \";\\n}\\n\\n.p-autocomplete-option:not(.p-autocomplete-option-selected):not(.p-disabled).p-focus {\\n background: \").concat(dt('autocomplete.option.focus.background'), \";\\n color: \").concat(dt('autocomplete.option.focus.color'), \";\\n}\\n\\n.p-autocomplete-option-selected {\\n background: \").concat(dt('autocomplete.option.selected.background'), \";\\n color: \").concat(dt('autocomplete.option.selected.color'), \";\\n}\\n\\n.p-autocomplete-option-selected.p-focus {\\n background: \").concat(dt('autocomplete.option.selected.focus.background'), \";\\n color: \").concat(dt('autocomplete.option.selected.focus.color'), \";\\n}\\n\\n.p-autocomplete-option-group {\\n margin: 0;\\n padding: \").concat(dt('autocomplete.option.group.padding'), \";\\n color: \").concat(dt('autocomplete.option.group.color'), \";\\n background: \").concat(dt('autocomplete.option.group.background'), \";\\n font-weight: \").concat(dt('autocomplete.option.group.font.weight'), \";\\n}\\n\\n.p-autocomplete-input-multiple {\\n margin: 0;\\n list-style-type: none;\\n cursor: text;\\n overflow: hidden;\\n display: flex;\\n align-items: center;\\n flex-wrap: wrap;\\n padding: calc(\").concat(dt('autocomplete.padding.y'), \" / 2) \").concat(dt('autocomplete.padding.x'), \";\\n gap: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n color: \").concat(dt('autocomplete.color'), \";\\n background: \").concat(dt('autocomplete.background'), \";\\n border: 1px solid \").concat(dt('autocomplete.border.color'), \";\\n border-radius: \").concat(dt('autocomplete.border.radius'), \";\\n width: 100%;\\n transition: background \").concat(dt('autocomplete.transition.duration'), \", color \").concat(dt('autocomplete.transition.duration'), \", border-color \").concat(dt('autocomplete.transition.duration'), \", outline-color \").concat(dt('autocomplete.transition.duration'), \", box-shadow \").concat(dt('autocomplete.transition.duration'), \";\\n outline-color: transparent;\\n box-shadow: \").concat(dt('autocomplete.shadow'), \";\\n}\\n\\n.p-autocomplete:not(.p-disabled):hover .p-autocomplete-input-multiple {\\n border-color: \").concat(dt('autocomplete.hover.border.color'), \";\\n}\\n\\n.p-autocomplete:not(.p-disabled).p-focus .p-autocomplete-input-multiple {\\n border-color: \").concat(dt('autocomplete.focus.border.color'), \";\\n box-shadow: \").concat(dt('autocomplete.focus.ring.shadow'), \";\\n outline: \").concat(dt('autocomplete.focus.ring.width'), \" \").concat(dt('autocomplete.focus.ring.style'), \" \").concat(dt('autocomplete.focus.ring.color'), \";\\n outline-offset: \").concat(dt('autocomplete.focus.ring.offset'), \";\\n}\\n\\n.p-autocomplete.p-invalid .p-autocomplete-input-multiple {\\n border-color: \").concat(dt('autocomplete.invalid.border.color'), \";\\n}\\n\\n.p-variant-filled.p-autocomplete-input-multiple {\\n background: \").concat(dt('autocomplete.filled.background'), \";\\n}\\n\\n.p-autocomplete:not(.p-disabled).p-focus .p-variant-filled.p-autocomplete-input-multiple {\\n background: \").concat(dt('autocomplete.filled.focus.background'), \";\\n}\\n\\n.p-autocomplete.p-disabled .p-autocomplete-input-multiple {\\n opacity: 1;\\n background: \").concat(dt('autocomplete.disabled.background'), \";\\n color: \").concat(dt('autocomplete.disabled.color'), \";\\n}\\n\\n.p-autocomplete-chip.p-chip {\\n padding-top: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n padding-bottom: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n border-radius: \").concat(dt('autocomplete.chip.border.radius'), \";\\n}\\n\\n.p-autocomplete-input-multiple:has(.p-autocomplete-chip) {\\n padding-left: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n padding-right: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n}\\n\\n.p-autocomplete-chip-item.p-focus .p-autocomplete-chip {\\n background: \").concat(dt('inputchips.chip.focus.background'), \";\\n color: \").concat(dt('inputchips.chip.focus.color'), \";\\n}\\n\\n.p-autocomplete-input-chip {\\n flex: 1 1 auto;\\n display: inline-flex;\\n padding-top: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n padding-bottom: calc(\").concat(dt('autocomplete.padding.y'), \" / 2);\\n}\\n\\n.p-autocomplete-input-chip input {\\n border: 0 none;\\n outline: 0 none;\\n background: transparent;\\n margin: 0;\\n padding: 0;\\n box-shadow: none;\\n border-radius: 0;\\n width: 100%;\\n font-family: inherit;\\n font-feature-settings: inherit;\\n font-size: 1rem;\\n color: inherit;\\n}\\n\\n.p-autocomplete-input-chip input::placeholder {\\n color: \").concat(dt('autocomplete.placeholder.color'), \";\\n}\\n\\n.p-autocomplete-empty-message {\\n padding: \").concat(dt('autocomplete.empty.message.padding'), \";\\n}\\n\\n.p-autocomplete-fluid {\\n display: flex;\\n}\\n\\n.p-autocomplete-fluid:has(.p-autocomplete-dropdown) .p-autocomplete-input {\\n width: 1%;\\n}\\n\");\n};\nvar inlineStyles = {\n root: {\n position: 'relative'\n }\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props;\n return ['p-autocomplete p-component p-inputwrapper', {\n 'p-disabled': props.disabled,\n 'p-invalid': props.invalid,\n 'p-focus': instance.focused,\n 'p-inputwrapper-filled': props.modelValue || isNotEmpty(instance.inputValue),\n 'p-inputwrapper-focus': instance.focused,\n 'p-autocomplete-open': instance.overlayVisible,\n 'p-autocomplete-fluid': instance.hasFluid\n }];\n },\n pcInput: 'p-autocomplete-input',\n inputMultiple: function inputMultiple(_ref3) {\n var props = _ref3.props,\n instance = _ref3.instance;\n return ['p-autocomplete-input-multiple', {\n 'p-variant-filled': props.variant ? props.variant === 'filled' : instance.$primevue.config.inputStyle === 'filled' || instance.$primevue.config.inputVariant === 'filled'\n }];\n },\n chipItem: function chipItem(_ref4) {\n var instance = _ref4.instance,\n i = _ref4.i;\n return ['p-autocomplete-chip-item', {\n 'p-focus': instance.focusedMultipleOptionIndex === i\n }];\n },\n pcChip: 'p-autocomplete-chip',\n chipIcon: 'p-autocomplete-chip-icon',\n inputChip: 'p-autocomplete-input-chip',\n loader: 'p-autocomplete-loader',\n dropdown: 'p-autocomplete-dropdown',\n overlay: 'p-autocomplete-overlay p-component',\n list: 'p-autocomplete-list',\n optionGroup: 'p-autocomplete-option-group',\n option: function option(_ref5) {\n var instance = _ref5.instance,\n _option = _ref5.option,\n i = _ref5.i,\n getItemOptions = _ref5.getItemOptions;\n return ['p-autocomplete-option', {\n 'p-autocomplete-option-selected': instance.isSelected(_option),\n 'p-focus': instance.focusedOptionIndex === instance.getOptionIndex(i, getItemOptions),\n 'p-disabled': instance.isOptionDisabled(_option)\n }];\n },\n emptyMessage: 'p-autocomplete-empty-message'\n};\nvar AutoCompleteStyle = BaseStyle.extend({\n name: 'autocomplete',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { AutoCompleteStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { focus, addStyle, relativePosition, getOuterWidth, absolutePosition, isTouchDevice, findSingle } from '@primeuix/utils/dom';\nimport { resolveFieldData, isEmpty, isNotEmpty, equals, findLastIndex } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport { UniqueComponentId, ConnectedOverlayScrollHandler } from '@primevue/core/utils';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport Chip from 'primevue/chip';\nimport InputText from 'primevue/inputtext';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport Ripple from 'primevue/ripple';\nimport VirtualScroller from 'primevue/virtualscroller';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport AutoCompleteStyle from 'primevue/autocomplete/style';\nimport { resolveComponent, resolveDirective, openBlock, createElementBlock, mergeProps, createBlock, normalizeClass, normalizeStyle, createCommentVNode, Fragment, renderList, renderSlot, createVNode, withCtx, createElementVNode, resolveDynamicComponent, toDisplayString, Transition, createSlots, createTextVNode, withDirectives } from 'vue';\n\nvar script$1 = {\n name: 'BaseAutoComplete',\n \"extends\": BaseComponent,\n props: {\n modelValue: null,\n suggestions: {\n type: Array,\n \"default\": null\n },\n optionLabel: null,\n optionDisabled: null,\n optionGroupLabel: null,\n optionGroupChildren: null,\n scrollHeight: {\n type: String,\n \"default\": '14rem'\n },\n dropdown: {\n type: Boolean,\n \"default\": false\n },\n dropdownMode: {\n type: String,\n \"default\": 'blank'\n },\n multiple: {\n type: Boolean,\n \"default\": false\n },\n loading: {\n type: Boolean,\n \"default\": false\n },\n variant: {\n type: String,\n \"default\": null\n },\n invalid: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n placeholder: {\n type: String,\n \"default\": null\n },\n dataKey: {\n type: String,\n \"default\": null\n },\n minLength: {\n type: Number,\n \"default\": 1\n },\n delay: {\n type: Number,\n \"default\": 300\n },\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n forceSelection: {\n type: Boolean,\n \"default\": false\n },\n completeOnFocus: {\n type: Boolean,\n \"default\": false\n },\n inputId: {\n type: String,\n \"default\": null\n },\n inputStyle: {\n type: Object,\n \"default\": null\n },\n inputClass: {\n type: [String, Object],\n \"default\": null\n },\n panelStyle: {\n type: Object,\n \"default\": null\n },\n panelClass: {\n type: [String, Object],\n \"default\": null\n },\n overlayStyle: {\n type: Object,\n \"default\": null\n },\n overlayClass: {\n type: [String, Object],\n \"default\": null\n },\n dropdownIcon: {\n type: String,\n \"default\": null\n },\n dropdownClass: {\n type: [String, Object],\n \"default\": null\n },\n loader: {\n type: String,\n \"default\": null\n },\n loadingIcon: {\n type: String,\n \"default\": null\n },\n removeTokenIcon: {\n type: String,\n \"default\": null\n },\n chipIcon: {\n type: String,\n \"default\": null\n },\n virtualScrollerOptions: {\n type: Object,\n \"default\": null\n },\n autoOptionFocus: {\n type: Boolean,\n \"default\": false\n },\n selectOnFocus: {\n type: Boolean,\n \"default\": false\n },\n focusOnHover: {\n type: Boolean,\n \"default\": true\n },\n searchLocale: {\n type: String,\n \"default\": undefined\n },\n searchMessage: {\n type: String,\n \"default\": null\n },\n selectionMessage: {\n type: String,\n \"default\": null\n },\n emptySelectionMessage: {\n type: String,\n \"default\": null\n },\n emptySearchMessage: {\n type: String,\n \"default\": null\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n typeahead: {\n type: Boolean,\n \"default\": true\n },\n ariaLabel: {\n type: String,\n \"default\": null\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n fluid: {\n type: Boolean,\n \"default\": null\n }\n },\n style: AutoCompleteStyle,\n provide: function provide() {\n return {\n $pcAutoComplete: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _typeof$1(o) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$1(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script = {\n name: 'AutoComplete',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'item-select', 'item-unselect', 'option-select', 'option-unselect', 'dropdown-click', 'clear', 'complete', 'before-show', 'before-hide', 'show', 'hide'],\n inject: {\n $pcFluid: {\n \"default\": null\n }\n },\n outsideClickListener: null,\n resizeListener: null,\n scrollHandler: null,\n overlay: null,\n virtualScroller: null,\n searchTimeout: null,\n dirty: false,\n data: function data() {\n return {\n id: this.$attrs.id,\n clicked: false,\n focused: false,\n focusedOptionIndex: -1,\n focusedMultipleOptionIndex: -1,\n overlayVisible: false,\n searching: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n suggestions: function suggestions() {\n if (this.searching) {\n this.show();\n this.focusedOptionIndex = this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;\n this.searching = false;\n }\n this.autoUpdateModel();\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n this.autoUpdateModel();\n },\n updated: function updated() {\n if (this.overlayVisible) {\n this.alignOverlay();\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n if (this.overlay) {\n ZIndex.clear(this.overlay);\n this.overlay = null;\n }\n },\n methods: {\n getOptionIndex: function getOptionIndex(index, fn) {\n return this.virtualScrollerDisabled ? index : fn && fn(index)['index'];\n },\n getOptionLabel: function getOptionLabel(option) {\n return this.optionLabel ? resolveFieldData(option, this.optionLabel) : option;\n },\n getOptionValue: function getOptionValue(option) {\n return option; // TODO: The 'optionValue' properties can be added.\n },\n getOptionRenderKey: function getOptionRenderKey(option, index) {\n return (this.dataKey ? resolveFieldData(option, this.dataKey) : this.getOptionLabel(option)) + '_' + index;\n },\n getPTOptions: function getPTOptions(option, itemOptions, index, key) {\n return this.ptm(key, {\n context: {\n selected: this.isSelected(option),\n focused: this.focusedOptionIndex === this.getOptionIndex(index, itemOptions),\n disabled: this.isOptionDisabled(option)\n }\n });\n },\n isOptionDisabled: function isOptionDisabled(option) {\n return this.optionDisabled ? resolveFieldData(option, this.optionDisabled) : false;\n },\n isOptionGroup: function isOptionGroup(option) {\n return this.optionGroupLabel && option.optionGroup && option.group;\n },\n getOptionGroupLabel: function getOptionGroupLabel(optionGroup) {\n return resolveFieldData(optionGroup, this.optionGroupLabel);\n },\n getOptionGroupChildren: function getOptionGroupChildren(optionGroup) {\n return resolveFieldData(optionGroup, this.optionGroupChildren);\n },\n getAriaPosInset: function getAriaPosInset(index) {\n var _this = this;\n return (this.optionGroupLabel ? index - this.visibleOptions.slice(0, index).filter(function (option) {\n return _this.isOptionGroup(option);\n }).length : index) + 1;\n },\n show: function show(isFocus) {\n this.$emit('before-show');\n this.dirty = true;\n this.overlayVisible = true;\n this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;\n isFocus && focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el);\n },\n hide: function hide(isFocus) {\n var _this2 = this;\n var _hide = function _hide() {\n _this2.$emit('before-hide');\n _this2.dirty = isFocus;\n _this2.overlayVisible = false;\n _this2.clicked = false;\n _this2.focusedOptionIndex = -1;\n isFocus && focus(_this2.multiple ? _this2.$refs.focusInput : _this2.$refs.focusInput.$el);\n };\n setTimeout(function () {\n _hide();\n }, 0); // For ScreenReaders\n },\n onFocus: function onFocus(event) {\n if (this.disabled) {\n // For ScreenReaders\n return;\n }\n if (!this.dirty && this.completeOnFocus) {\n this.search(event, event.target.value, 'focus');\n }\n this.dirty = true;\n this.focused = true;\n if (this.overlayVisible) {\n this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;\n this.scrollInView(this.focusedOptionIndex);\n }\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.dirty = false;\n this.focused = false;\n this.focusedOptionIndex = -1;\n this.$emit('blur', event);\n },\n onKeyDown: function onKeyDown(event) {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeftKey(event);\n break;\n case 'ArrowRight':\n this.onArrowRightKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'PageDown':\n this.onPageDownKey(event);\n break;\n case 'PageUp':\n this.onPageUpKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'Backspace':\n this.onBackspaceKey(event);\n break;\n }\n this.clicked = false;\n },\n onInput: function onInput(event) {\n var _this3 = this;\n if (this.typeahead) {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n var query = event.target.value;\n if (!this.multiple) {\n this.updateModel(event, query);\n }\n if (query.length === 0) {\n this.hide();\n this.$emit('clear');\n } else {\n if (query.length >= this.minLength) {\n this.focusedOptionIndex = -1;\n this.searchTimeout = setTimeout(function () {\n _this3.search(event, query, 'input');\n }, this.delay);\n } else {\n this.hide();\n }\n }\n }\n },\n onChange: function onChange(event) {\n var _this4 = this;\n if (this.forceSelection) {\n var valid = false;\n\n // when forceSelection is on, prevent called twice onOptionSelect()\n if (this.visibleOptions && !this.multiple) {\n var value = this.multiple ? this.$refs.focusInput.value : this.$refs.focusInput.$el.value;\n var matchedValue = this.visibleOptions.find(function (option) {\n return _this4.isOptionMatched(option, value || '');\n });\n if (matchedValue !== undefined) {\n valid = true;\n !this.isSelected(matchedValue) && this.onOptionSelect(event, matchedValue);\n }\n }\n if (!valid) {\n if (this.multiple) this.$refs.focusInput.value = '';else this.$refs.focusInput.$el.value = '';\n this.$emit('clear');\n !this.multiple && this.updateModel(event, null);\n }\n }\n },\n onMultipleContainerFocus: function onMultipleContainerFocus() {\n if (this.disabled) {\n // For ScreenReaders\n return;\n }\n this.focused = true;\n },\n onMultipleContainerBlur: function onMultipleContainerBlur() {\n this.focusedMultipleOptionIndex = -1;\n this.focused = false;\n },\n onMultipleContainerKeyDown: function onMultipleContainerKeyDown(event) {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n switch (event.code) {\n case 'ArrowLeft':\n this.onArrowLeftKeyOnMultiple(event);\n break;\n case 'ArrowRight':\n this.onArrowRightKeyOnMultiple(event);\n break;\n case 'Backspace':\n this.onBackspaceKeyOnMultiple(event);\n break;\n }\n },\n onContainerClick: function onContainerClick(event) {\n this.clicked = true;\n if (this.disabled || this.searching || this.loading || this.isInputClicked(event) || this.isDropdownClicked(event)) {\n return;\n }\n if (!this.overlay || !this.overlay.contains(event.target)) {\n focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el);\n }\n },\n onDropdownClick: function onDropdownClick(event) {\n var query = undefined;\n if (this.overlayVisible) {\n this.hide(true);\n } else {\n var target = this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el;\n focus(target);\n query = target.value;\n if (this.dropdownMode === 'blank') this.search(event, '', 'dropdown');else if (this.dropdownMode === 'current') this.search(event, query, 'dropdown');\n }\n this.$emit('dropdown-click', {\n originalEvent: event,\n query: query\n });\n },\n onOptionSelect: function onOptionSelect(event, option) {\n var isHide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var value = this.getOptionValue(option);\n if (this.multiple) {\n this.$refs.focusInput.value = '';\n if (!this.isSelected(option)) {\n this.updateModel(event, [].concat(_toConsumableArray(this.modelValue || []), [value]));\n }\n } else {\n this.updateModel(event, value);\n }\n this.$emit('item-select', {\n originalEvent: event,\n value: option\n });\n this.$emit('option-select', {\n originalEvent: event,\n value: option\n });\n isHide && this.hide(true);\n },\n onOptionMouseMove: function onOptionMouseMove(event, index) {\n if (this.focusOnHover) {\n this.changeFocusedOptionIndex(event, index);\n }\n },\n onOverlayClick: function onOverlayClick(event) {\n OverlayEventBus.emit('overlay-click', {\n originalEvent: event,\n target: this.$el\n });\n },\n onOverlayKeyDown: function onOverlayKeyDown(event) {\n switch (event.code) {\n case 'Escape':\n this.onEscapeKey(event);\n break;\n }\n },\n onArrowDownKey: function onArrowDownKey(event) {\n if (!this.overlayVisible) {\n return;\n }\n var optionIndex = this.focusedOptionIndex !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n event.preventDefault();\n },\n onArrowUpKey: function onArrowUpKey(event) {\n if (!this.overlayVisible) {\n return;\n }\n if (event.altKey) {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.overlayVisible && this.hide();\n event.preventDefault();\n } else {\n var optionIndex = this.focusedOptionIndex !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n event.preventDefault();\n }\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var target = event.currentTarget;\n this.focusedOptionIndex = -1;\n if (this.multiple) {\n if (isEmpty(target.value) && this.hasSelectedOption) {\n focus(this.$refs.multiContainer);\n this.focusedMultipleOptionIndex = this.modelValue.length;\n } else {\n event.stopPropagation(); // To prevent onArrowLeftKeyOnMultiple method\n }\n }\n },\n onArrowRightKey: function onArrowRightKey(event) {\n this.focusedOptionIndex = -1;\n this.multiple && event.stopPropagation(); // To prevent onArrowRightKeyOnMultiple method\n },\n onHomeKey: function onHomeKey(event) {\n var currentTarget = event.currentTarget;\n var len = currentTarget.value.length;\n currentTarget.setSelectionRange(0, event.shiftKey ? len : 0);\n this.focusedOptionIndex = -1;\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n var currentTarget = event.currentTarget;\n var len = currentTarget.value.length;\n currentTarget.setSelectionRange(event.shiftKey ? 0 : len, len);\n this.focusedOptionIndex = -1;\n event.preventDefault();\n },\n onPageUpKey: function onPageUpKey(event) {\n this.scrollInView(0);\n event.preventDefault();\n },\n onPageDownKey: function onPageDownKey(event) {\n this.scrollInView(this.visibleOptions.length - 1);\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n if (!this.typeahead) {\n if (this.multiple) {\n this.updateModel(event, [].concat(_toConsumableArray(this.modelValue || []), [event.target.value]));\n this.$refs.focusInput.value = '';\n }\n } else {\n if (!this.overlayVisible) {\n this.focusedOptionIndex = -1; // reset\n this.onArrowDownKey(event);\n } else {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.hide();\n }\n }\n },\n onEscapeKey: function onEscapeKey(event) {\n this.overlayVisible && this.hide(true);\n event.preventDefault();\n },\n onTabKey: function onTabKey(event) {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.overlayVisible && this.hide();\n },\n onBackspaceKey: function onBackspaceKey(event) {\n if (this.multiple) {\n if (isNotEmpty(this.modelValue) && !this.$refs.focusInput.value) {\n var removedValue = this.modelValue[this.modelValue.length - 1];\n var newValue = this.modelValue.slice(0, -1);\n this.$emit('update:modelValue', newValue);\n this.$emit('item-unselect', {\n originalEvent: event,\n value: removedValue\n });\n this.$emit('option-unselect', {\n originalEvent: event,\n value: removedValue\n });\n }\n event.stopPropagation(); // To prevent onBackspaceKeyOnMultiple method\n }\n },\n onArrowLeftKeyOnMultiple: function onArrowLeftKeyOnMultiple() {\n this.focusedMultipleOptionIndex = this.focusedMultipleOptionIndex < 1 ? 0 : this.focusedMultipleOptionIndex - 1;\n },\n onArrowRightKeyOnMultiple: function onArrowRightKeyOnMultiple() {\n this.focusedMultipleOptionIndex++;\n if (this.focusedMultipleOptionIndex > this.modelValue.length - 1) {\n this.focusedMultipleOptionIndex = -1;\n focus(this.$refs.focusInput);\n }\n },\n onBackspaceKeyOnMultiple: function onBackspaceKeyOnMultiple(event) {\n if (this.focusedMultipleOptionIndex !== -1) {\n this.removeOption(event, this.focusedMultipleOptionIndex);\n }\n },\n onOverlayEnter: function onOverlayEnter(el) {\n ZIndex.set('overlay', el, this.$primevue.config.zIndex.overlay);\n addStyle(el, {\n position: 'absolute',\n top: '0',\n left: '0'\n });\n this.alignOverlay();\n },\n onOverlayAfterEnter: function onOverlayAfterEnter() {\n this.bindOutsideClickListener();\n this.bindScrollListener();\n this.bindResizeListener();\n this.$emit('show');\n },\n onOverlayLeave: function onOverlayLeave() {\n this.unbindOutsideClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n this.$emit('hide');\n this.overlay = null;\n },\n onOverlayAfterLeave: function onOverlayAfterLeave(el) {\n ZIndex.clear(el);\n },\n alignOverlay: function alignOverlay() {\n var target = this.multiple ? this.$refs.multiContainer : this.$refs.focusInput.$el;\n if (this.appendTo === 'self') {\n relativePosition(this.overlay, target);\n } else {\n this.overlay.style.minWidth = getOuterWidth(target) + 'px';\n absolutePosition(this.overlay, target);\n }\n },\n bindOutsideClickListener: function bindOutsideClickListener() {\n var _this5 = this;\n if (!this.outsideClickListener) {\n this.outsideClickListener = function (event) {\n if (_this5.overlayVisible && _this5.overlay && _this5.isOutsideClicked(event)) {\n _this5.hide();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n },\n unbindOutsideClickListener: function unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n },\n bindScrollListener: function bindScrollListener() {\n var _this6 = this;\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function () {\n if (_this6.overlayVisible) {\n _this6.hide();\n }\n });\n }\n this.scrollHandler.bindScrollListener();\n },\n unbindScrollListener: function unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n },\n bindResizeListener: function bindResizeListener() {\n var _this7 = this;\n if (!this.resizeListener) {\n this.resizeListener = function () {\n if (_this7.overlayVisible && !isTouchDevice()) {\n _this7.hide();\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n },\n unbindResizeListener: function unbindResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n },\n isOutsideClicked: function isOutsideClicked(event) {\n return !this.overlay.contains(event.target) && !this.isInputClicked(event) && !this.isDropdownClicked(event);\n },\n isInputClicked: function isInputClicked(event) {\n if (this.multiple) return event.target === this.$refs.multiContainer || this.$refs.multiContainer.contains(event.target);else return event.target === this.$refs.focusInput.$el;\n },\n isDropdownClicked: function isDropdownClicked(event) {\n return this.$refs.dropdownButton ? event.target === this.$refs.dropdownButton || this.$refs.dropdownButton.contains(event.target) : false;\n },\n isOptionMatched: function isOptionMatched(option, value) {\n var _this$getOptionLabel;\n return this.isValidOption(option) && ((_this$getOptionLabel = this.getOptionLabel(option)) === null || _this$getOptionLabel === void 0 ? void 0 : _this$getOptionLabel.toLocaleLowerCase(this.searchLocale)) === value.toLocaleLowerCase(this.searchLocale);\n },\n isValidOption: function isValidOption(option) {\n return isNotEmpty(option) && !(this.isOptionDisabled(option) || this.isOptionGroup(option));\n },\n isValidSelectedOption: function isValidSelectedOption(option) {\n return this.isValidOption(option) && this.isSelected(option);\n },\n isEquals: function isEquals(value1, value2) {\n return equals(value1, value2, this.equalityKey);\n },\n isSelected: function isSelected(option) {\n var _this8 = this;\n var optionValue = this.getOptionValue(option);\n return this.multiple ? (this.modelValue || []).some(function (value) {\n return _this8.isEquals(value, optionValue);\n }) : this.isEquals(this.modelValue, this.getOptionValue(option));\n },\n findFirstOptionIndex: function findFirstOptionIndex() {\n var _this9 = this;\n return this.visibleOptions.findIndex(function (option) {\n return _this9.isValidOption(option);\n });\n },\n findLastOptionIndex: function findLastOptionIndex() {\n var _this10 = this;\n return findLastIndex(this.visibleOptions, function (option) {\n return _this10.isValidOption(option);\n });\n },\n findNextOptionIndex: function findNextOptionIndex(index) {\n var _this11 = this;\n var matchedOptionIndex = index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function (option) {\n return _this11.isValidOption(option);\n }) : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;\n },\n findPrevOptionIndex: function findPrevOptionIndex(index) {\n var _this12 = this;\n var matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function (option) {\n return _this12.isValidOption(option);\n }) : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex : index;\n },\n findSelectedOptionIndex: function findSelectedOptionIndex() {\n var _this13 = this;\n return this.hasSelectedOption ? this.visibleOptions.findIndex(function (option) {\n return _this13.isValidSelectedOption(option);\n }) : -1;\n },\n findFirstFocusedOptionIndex: function findFirstFocusedOptionIndex() {\n var selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex;\n },\n findLastFocusedOptionIndex: function findLastFocusedOptionIndex() {\n var selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex;\n },\n search: function search(event, query, source) {\n //allow empty string but not undefined or null\n if (query === undefined || query === null) {\n return;\n }\n\n //do not search blank values on input change\n if (source === 'input' && query.trim().length === 0) {\n return;\n }\n this.searching = true;\n this.$emit('complete', {\n originalEvent: event,\n query: query\n });\n },\n removeOption: function removeOption(event, index) {\n var _this14 = this;\n var removedOption = this.modelValue[index];\n var value = this.modelValue.filter(function (_, i) {\n return i !== index;\n }).map(function (option) {\n return _this14.getOptionValue(option);\n });\n this.updateModel(event, value);\n this.$emit('item-unselect', {\n originalEvent: event,\n value: removedOption\n });\n this.$emit('option-unselect', {\n originalEvent: event,\n value: removedOption\n });\n this.dirty = true;\n focus(this.multiple ? this.$refs.focusInput : this.$refs.focusInput.$el);\n },\n changeFocusedOptionIndex: function changeFocusedOptionIndex(event, index) {\n if (this.focusedOptionIndex !== index) {\n this.focusedOptionIndex = index;\n this.scrollInView();\n if (this.selectOnFocus) {\n this.onOptionSelect(event, this.visibleOptions[index], false);\n }\n }\n },\n scrollInView: function scrollInView() {\n var _this15 = this;\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n this.$nextTick(function () {\n var id = index !== -1 ? \"\".concat(_this15.id, \"_\").concat(index) : _this15.focusedOptionId;\n var element = findSingle(_this15.list, \"li[id=\\\"\".concat(id, \"\\\"]\"));\n if (element) {\n element.scrollIntoView && element.scrollIntoView({\n block: 'nearest',\n inline: 'start'\n });\n } else if (!_this15.virtualScrollerDisabled) {\n _this15.virtualScroller && _this15.virtualScroller.scrollToIndex(index !== -1 ? index : _this15.focusedOptionIndex);\n }\n });\n },\n autoUpdateModel: function autoUpdateModel() {\n if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption) {\n this.focusedOptionIndex = this.findFirstFocusedOptionIndex();\n this.onOptionSelect(null, this.visibleOptions[this.focusedOptionIndex], false);\n }\n },\n updateModel: function updateModel(event, value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', {\n originalEvent: event,\n value: value\n });\n },\n flatOptions: function flatOptions(options) {\n var _this16 = this;\n return (options || []).reduce(function (result, option, index) {\n result.push({\n optionGroup: option,\n group: true,\n index: index\n });\n var optionGroupChildren = _this16.getOptionGroupChildren(option);\n optionGroupChildren && optionGroupChildren.forEach(function (o) {\n return result.push(o);\n });\n return result;\n }, []);\n },\n overlayRef: function overlayRef(el) {\n this.overlay = el;\n },\n listRef: function listRef(el, contentRef) {\n this.list = el;\n contentRef && contentRef(el); // For VirtualScroller\n },\n virtualScrollerRef: function virtualScrollerRef(el) {\n this.virtualScroller = el;\n }\n },\n computed: {\n visibleOptions: function visibleOptions() {\n return this.optionGroupLabel ? this.flatOptions(this.suggestions) : this.suggestions || [];\n },\n inputValue: function inputValue() {\n if (isNotEmpty(this.modelValue)) {\n if (_typeof$1(this.modelValue) === 'object') {\n var label = this.getOptionLabel(this.modelValue);\n return label != null ? label : this.modelValue;\n } else {\n return this.modelValue;\n }\n } else {\n return '';\n }\n },\n hasSelectedOption: function hasSelectedOption() {\n return isNotEmpty(this.modelValue);\n },\n equalityKey: function equalityKey() {\n return this.dataKey; // TODO: The 'optionValue' properties can be added.\n },\n searchResultMessageText: function searchResultMessageText() {\n return isNotEmpty(this.visibleOptions) && this.overlayVisible ? this.searchMessageText.replaceAll('{0}', this.visibleOptions.length) : this.emptySearchMessageText;\n },\n searchMessageText: function searchMessageText() {\n return this.searchMessage || this.$primevue.config.locale.searchMessage || '';\n },\n emptySearchMessageText: function emptySearchMessageText() {\n return this.emptySearchMessage || this.$primevue.config.locale.emptySearchMessage || '';\n },\n selectionMessageText: function selectionMessageText() {\n return this.selectionMessage || this.$primevue.config.locale.selectionMessage || '';\n },\n emptySelectionMessageText: function emptySelectionMessageText() {\n return this.emptySelectionMessage || this.$primevue.config.locale.emptySelectionMessage || '';\n },\n selectedMessageText: function selectedMessageText() {\n return this.hasSelectedOption ? this.selectionMessageText.replaceAll('{0}', this.multiple ? this.modelValue.length : '1') : this.emptySelectionMessageText;\n },\n listAriaLabel: function listAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.listLabel : undefined;\n },\n focusedOptionId: function focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? \"\".concat(this.id, \"_\").concat(this.focusedOptionIndex) : null;\n },\n focusedMultipleOptionId: function focusedMultipleOptionId() {\n return this.focusedMultipleOptionIndex !== -1 ? \"\".concat(this.id, \"_multiple_option_\").concat(this.focusedMultipleOptionIndex) : null;\n },\n ariaSetSize: function ariaSetSize() {\n var _this17 = this;\n return this.visibleOptions.filter(function (option) {\n return !_this17.isOptionGroup(option);\n }).length;\n },\n virtualScrollerDisabled: function virtualScrollerDisabled() {\n return !this.virtualScrollerOptions;\n },\n panelId: function panelId() {\n return this.id + '_panel';\n },\n hasFluid: function hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n components: {\n InputText: InputText,\n VirtualScroller: VirtualScroller,\n Portal: Portal,\n ChevronDownIcon: ChevronDownIcon,\n SpinnerIcon: SpinnerIcon,\n Chip: Chip\n },\n directives: {\n ripple: Ripple\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar _hoisted_1 = [\"aria-activedescendant\"];\nvar _hoisted_2 = [\"id\", \"aria-label\", \"aria-setsize\", \"aria-posinset\"];\nvar _hoisted_3 = [\"id\", \"placeholder\", \"tabindex\", \"disabled\", \"aria-label\", \"aria-labelledby\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\", \"aria-invalid\"];\nvar _hoisted_4 = [\"disabled\", \"aria-expanded\", \"aria-controls\"];\nvar _hoisted_5 = [\"id\"];\nvar _hoisted_6 = [\"id\", \"aria-label\"];\nvar _hoisted_7 = [\"id\"];\nvar _hoisted_8 = [\"id\", \"aria-label\", \"aria-selected\", \"aria-disabled\", \"aria-setsize\", \"aria-posinset\", \"onClick\", \"onMousemove\", \"data-p-selected\", \"data-p-focus\", \"data-p-disabled\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_InputText = resolveComponent(\"InputText\");\n var _component_Chip = resolveComponent(\"Chip\");\n var _component_SpinnerIcon = resolveComponent(\"SpinnerIcon\");\n var _component_VirtualScroller = resolveComponent(\"VirtualScroller\");\n var _component_Portal = resolveComponent(\"Portal\");\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref: \"container\",\n \"class\": _ctx.cx('root'),\n style: _ctx.sx('root'),\n onClick: _cache[11] || (_cache[11] = function () {\n return $options.onContainerClick && $options.onContainerClick.apply($options, arguments);\n })\n }, _ctx.ptmi('root')), [!_ctx.multiple ? (openBlock(), createBlock(_component_InputText, {\n key: 0,\n ref: \"focusInput\",\n id: _ctx.inputId,\n type: \"text\",\n \"class\": normalizeClass([_ctx.cx('pcInput'), _ctx.inputClass]),\n style: normalizeStyle(_ctx.inputStyle),\n value: $options.inputValue,\n placeholder: _ctx.placeholder,\n tabindex: !_ctx.disabled ? _ctx.tabindex : -1,\n fluid: $options.hasFluid,\n disabled: _ctx.disabled,\n invalid: _ctx.invalid,\n variant: _ctx.variant,\n autocomplete: \"off\",\n role: \"combobox\",\n \"aria-label\": _ctx.ariaLabel,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": $data.overlayVisible,\n \"aria-controls\": $options.panelId,\n \"aria-activedescendant\": $data.focused ? $options.focusedOptionId : undefined,\n onFocus: $options.onFocus,\n onBlur: $options.onBlur,\n onKeydown: $options.onKeyDown,\n onInput: $options.onInput,\n onChange: $options.onChange,\n unstyled: _ctx.unstyled,\n pt: _ctx.ptm('pcInput')\n }, null, 8, [\"id\", \"class\", \"style\", \"value\", \"placeholder\", \"tabindex\", \"fluid\", \"disabled\", \"invalid\", \"variant\", \"aria-label\", \"aria-labelledby\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\", \"onFocus\", \"onBlur\", \"onKeydown\", \"onInput\", \"onChange\", \"unstyled\", \"pt\"])) : createCommentVNode(\"\", true), _ctx.multiple ? (openBlock(), createElementBlock(\"ul\", mergeProps({\n key: 1,\n ref: \"multiContainer\",\n \"class\": _ctx.cx('inputMultiple'),\n tabindex: \"-1\",\n role: \"listbox\",\n \"aria-orientation\": \"horizontal\",\n \"aria-activedescendant\": $data.focused ? $options.focusedMultipleOptionId : undefined,\n onFocus: _cache[5] || (_cache[5] = function () {\n return $options.onMultipleContainerFocus && $options.onMultipleContainerFocus.apply($options, arguments);\n }),\n onBlur: _cache[6] || (_cache[6] = function () {\n return $options.onMultipleContainerBlur && $options.onMultipleContainerBlur.apply($options, arguments);\n }),\n onKeydown: _cache[7] || (_cache[7] = function () {\n return $options.onMultipleContainerKeyDown && $options.onMultipleContainerKeyDown.apply($options, arguments);\n })\n }, _ctx.ptm('inputMultiple')), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.modelValue, function (option, i) {\n return openBlock(), createElementBlock(\"li\", mergeProps({\n key: \"\".concat(i, \"_\").concat($options.getOptionLabel(option)),\n id: $data.id + '_multiple_option_' + i,\n \"class\": _ctx.cx('chipItem', {\n i: i\n }),\n role: \"option\",\n \"aria-label\": $options.getOptionLabel(option),\n \"aria-selected\": true,\n \"aria-setsize\": _ctx.modelValue.length,\n \"aria-posinset\": i + 1,\n ref_for: true\n }, _ctx.ptm('chipItem')), [renderSlot(_ctx.$slots, \"chip\", mergeProps({\n \"class\": _ctx.cx('pcChip'),\n value: option,\n index: i,\n removeCallback: function removeCallback(event) {\n return $options.removeOption(event, i);\n },\n ref_for: true\n }, _ctx.ptm('pcChip')), function () {\n return [createVNode(_component_Chip, {\n \"class\": normalizeClass(_ctx.cx('pcChip')),\n label: $options.getOptionLabel(option),\n removeIcon: _ctx.chipIcon || _ctx.removeTokenIcon,\n removable: \"\",\n unstyled: _ctx.unstyled,\n onRemove: function onRemove($event) {\n return $options.removeOption($event, i);\n },\n pt: _ctx.ptm('pcChip')\n }, {\n removeicon: withCtx(function () {\n return [renderSlot(_ctx.$slots, _ctx.$slots.chipicon ? 'chipicon' : 'removetokenicon', {\n \"class\": normalizeClass(_ctx.cx('chipIcon')),\n index: i,\n removeCallback: function removeCallback(event) {\n return $options.removeOption(event, i);\n }\n })];\n }),\n _: 2\n }, 1032, [\"class\", \"label\", \"removeIcon\", \"unstyled\", \"onRemove\", \"pt\"])];\n })], 16, _hoisted_2);\n }), 128)), createElementVNode(\"li\", mergeProps({\n \"class\": _ctx.cx('inputChip'),\n role: \"option\"\n }, _ctx.ptm('inputChip')), [createElementVNode(\"input\", mergeProps({\n ref: \"focusInput\",\n id: _ctx.inputId,\n type: \"text\",\n style: _ctx.inputStyle,\n \"class\": _ctx.inputClass,\n placeholder: _ctx.placeholder,\n tabindex: !_ctx.disabled ? _ctx.tabindex : -1,\n disabled: _ctx.disabled,\n autocomplete: \"off\",\n role: \"combobox\",\n \"aria-label\": _ctx.ariaLabel,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": $data.overlayVisible,\n \"aria-controls\": $data.id + '_list',\n \"aria-activedescendant\": $data.focused ? $options.focusedOptionId : undefined,\n \"aria-invalid\": _ctx.invalid || undefined,\n onFocus: _cache[0] || (_cache[0] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[1] || (_cache[1] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n }),\n onKeydown: _cache[2] || (_cache[2] = function () {\n return $options.onKeyDown && $options.onKeyDown.apply($options, arguments);\n }),\n onInput: _cache[3] || (_cache[3] = function () {\n return $options.onInput && $options.onInput.apply($options, arguments);\n }),\n onChange: _cache[4] || (_cache[4] = function () {\n return $options.onChange && $options.onChange.apply($options, arguments);\n })\n }, _ctx.ptm('input')), null, 16, _hoisted_3)], 16)], 16, _hoisted_1)) : createCommentVNode(\"\", true), $data.searching || _ctx.loading ? renderSlot(_ctx.$slots, _ctx.$slots.loader ? 'loader' : 'loadingicon', {\n key: 2,\n \"class\": normalizeClass(_ctx.cx('loader'))\n }, function () {\n return [_ctx.loader || _ctx.loadingIcon ? (openBlock(), createElementBlock(\"i\", mergeProps({\n key: 0,\n \"class\": ['pi-spin', _ctx.cx('loader'), _ctx.loader, _ctx.loadingIcon],\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('loader')), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('loader'),\n spin: \"\",\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('loader')), null, 16, [\"class\"]))];\n }) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, _ctx.$slots.dropdown ? 'dropdown' : 'dropdownbutton', {\n toggleCallback: function toggleCallback(event) {\n return $options.onDropdownClick(event);\n }\n }, function () {\n return [_ctx.dropdown ? (openBlock(), createElementBlock(\"button\", mergeProps({\n key: 0,\n ref: \"dropdownButton\",\n type: \"button\",\n \"class\": [_ctx.cx('dropdown'), _ctx.dropdownClass],\n disabled: _ctx.disabled,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": $data.overlayVisible,\n \"aria-controls\": $options.panelId,\n onClick: _cache[8] || (_cache[8] = function () {\n return $options.onDropdownClick && $options.onDropdownClick.apply($options, arguments);\n })\n }, _ctx.ptm('dropdown')), [renderSlot(_ctx.$slots, \"dropdownicon\", {\n \"class\": normalizeClass(_ctx.dropdownIcon)\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.dropdownIcon ? 'span' : 'ChevronDownIcon'), mergeProps({\n \"class\": _ctx.dropdownIcon\n }, _ctx.ptm('dropdownIcon')), null, 16, [\"class\"]))];\n })], 16, _hoisted_4)) : createCommentVNode(\"\", true)];\n }), createElementVNode(\"span\", mergeProps({\n role: \"status\",\n \"aria-live\": \"polite\",\n \"class\": \"p-hidden-accessible\"\n }, _ctx.ptm('hiddenSearchResult'), {\n \"data-p-hidden-accessible\": true\n }), toDisplayString($options.searchResultMessageText), 17), createVNode(_component_Portal, {\n appendTo: _ctx.appendTo\n }, {\n \"default\": withCtx(function () {\n return [createVNode(Transition, mergeProps({\n name: \"p-connected-overlay\",\n onEnter: $options.onOverlayEnter,\n onAfterEnter: $options.onOverlayAfterEnter,\n onLeave: $options.onOverlayLeave,\n onAfterLeave: $options.onOverlayAfterLeave\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [$data.overlayVisible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n ref: $options.overlayRef,\n id: $options.panelId,\n \"class\": [_ctx.cx('overlay'), _ctx.panelClass, _ctx.overlayClass],\n style: _objectSpread(_objectSpread(_objectSpread({}, _ctx.panelStyle), _ctx.overlayStyle), {}, {\n 'max-height': $options.virtualScrollerDisabled ? _ctx.scrollHeight : ''\n }),\n onClick: _cache[9] || (_cache[9] = function () {\n return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments);\n }),\n onKeydown: _cache[10] || (_cache[10] = function () {\n return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments);\n })\n }, _ctx.ptm('overlay')), [renderSlot(_ctx.$slots, \"header\", {\n value: _ctx.modelValue,\n suggestions: $options.visibleOptions\n }), createVNode(_component_VirtualScroller, mergeProps({\n ref: $options.virtualScrollerRef\n }, _ctx.virtualScrollerOptions, {\n style: {\n height: _ctx.scrollHeight\n },\n items: $options.visibleOptions,\n tabindex: -1,\n disabled: $options.virtualScrollerDisabled,\n pt: _ctx.ptm('virtualScroller')\n }), createSlots({\n content: withCtx(function (_ref) {\n var styleClass = _ref.styleClass,\n contentRef = _ref.contentRef,\n items = _ref.items,\n getItemOptions = _ref.getItemOptions,\n contentStyle = _ref.contentStyle,\n itemSize = _ref.itemSize;\n return [createElementVNode(\"ul\", mergeProps({\n ref: function ref(el) {\n return $options.listRef(el, contentRef);\n },\n id: $data.id + '_list',\n \"class\": [_ctx.cx('list'), styleClass],\n style: contentStyle,\n role: \"listbox\",\n \"aria-label\": $options.listAriaLabel\n }, _ctx.ptm('list')), [(openBlock(true), createElementBlock(Fragment, null, renderList(items, function (option, i) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getOptionRenderKey(option, $options.getOptionIndex(i, getItemOptions))\n }, [$options.isOptionGroup(option) ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n id: $data.id + '_' + $options.getOptionIndex(i, getItemOptions),\n style: {\n height: itemSize ? itemSize + 'px' : undefined\n },\n \"class\": _ctx.cx('optionGroup'),\n role: \"option\",\n ref_for: true\n }, _ctx.ptm('optionGroup')), [renderSlot(_ctx.$slots, \"optiongroup\", {\n option: option.optionGroup,\n index: $options.getOptionIndex(i, getItemOptions)\n }, function () {\n return [createTextVNode(toDisplayString($options.getOptionGroupLabel(option.optionGroup)), 1)];\n })], 16, _hoisted_7)) : withDirectives((openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n id: $data.id + '_' + $options.getOptionIndex(i, getItemOptions),\n style: {\n height: itemSize ? itemSize + 'px' : undefined\n },\n \"class\": _ctx.cx('option', {\n option: option,\n i: i,\n getItemOptions: getItemOptions\n }),\n role: \"option\",\n \"aria-label\": $options.getOptionLabel(option),\n \"aria-selected\": $options.isSelected(option),\n \"aria-disabled\": $options.isOptionDisabled(option),\n \"aria-setsize\": $options.ariaSetSize,\n \"aria-posinset\": $options.getAriaPosInset($options.getOptionIndex(i, getItemOptions)),\n onClick: function onClick($event) {\n return $options.onOptionSelect($event, option);\n },\n onMousemove: function onMousemove($event) {\n return $options.onOptionMouseMove($event, $options.getOptionIndex(i, getItemOptions));\n },\n \"data-p-selected\": $options.isSelected(option),\n \"data-p-focus\": $data.focusedOptionIndex === $options.getOptionIndex(i, getItemOptions),\n \"data-p-disabled\": $options.isOptionDisabled(option),\n ref_for: true\n }, $options.getPTOptions(option, getItemOptions, i, 'option')), [renderSlot(_ctx.$slots, \"option\", {\n option: option,\n index: $options.getOptionIndex(i, getItemOptions)\n }, function () {\n return [createTextVNode(toDisplayString($options.getOptionLabel(option)), 1)];\n })], 16, _hoisted_8)), [[_directive_ripple]])], 64);\n }), 128)), !items || items && items.length === 0 ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('emptyMessage'),\n role: \"option\"\n }, _ctx.ptm('emptyMessage')), [renderSlot(_ctx.$slots, \"empty\", {}, function () {\n return [createTextVNode(toDisplayString($options.searchResultMessageText), 1)];\n })], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_6)];\n }),\n _: 2\n }, [_ctx.$slots.loader ? {\n name: \"loader\",\n fn: withCtx(function (_ref2) {\n var options = _ref2.options;\n return [renderSlot(_ctx.$slots, \"loader\", {\n options: options\n })];\n }),\n key: \"0\"\n } : undefined]), 1040, [\"style\", \"items\", \"disabled\", \"pt\"]), renderSlot(_ctx.$slots, \"footer\", {\n value: _ctx.modelValue,\n suggestions: $options.visibleOptions\n }), createElementVNode(\"span\", mergeProps({\n role: \"status\",\n \"aria-live\": \"polite\",\n \"class\": \"p-hidden-accessible\"\n }, _ctx.ptm('hiddenSelectedMessage'), {\n \"data-p-hidden-accessible\": true\n }), toDisplayString($options.selectedMessageText), 17)], 16, _hoisted_5)) : createCommentVNode(\"\", true)];\n }),\n _: 3\n }, 16, [\"onEnter\", \"onAfterEnter\", \"onLeave\", \"onAfterLeave\"])];\n }),\n _: 3\n }, 8, [\"appendTo\"])], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n","\n\n\n\n\n","\n\n\n","import type {\n ConnectingLink,\n LGraphNode,\n Vector2,\n INodeInputSlot,\n INodeOutputSlot,\n INodeSlot,\n ISlotType\n} from '@comfyorg/litegraph'\nimport { LiteGraph } from '@comfyorg/litegraph'\nimport { RerouteId } from '@comfyorg/litegraph/dist/Reroute'\n\nexport class ConnectingLinkImpl implements ConnectingLink {\n constructor(\n public node: LGraphNode,\n public slot: number,\n public input: INodeInputSlot | undefined,\n public output: INodeOutputSlot | undefined,\n public pos: Vector2,\n public afterRerouteId?: RerouteId\n ) {}\n\n static createFromPlainObject(obj: ConnectingLink) {\n return new ConnectingLinkImpl(\n obj.node,\n obj.slot,\n obj.input,\n obj.output,\n obj.pos,\n obj.afterRerouteId\n )\n }\n\n get type(): ISlotType | null {\n const result = this.input ? this.input.type : this.output?.type ?? null\n return result === -1 ? null : result\n }\n\n /**\n * Which slot type is release and need to be reconnected.\n * - 'output' means we need a new node's outputs slot to connect with this link\n */\n get releaseSlotType(): 'input' | 'output' {\n return this.output ? 'input' : 'output'\n }\n\n connectTo(newNode: LGraphNode) {\n const newNodeSlots =\n this.releaseSlotType === 'output' ? newNode.outputs : newNode.inputs\n if (!newNodeSlots) return\n\n const newNodeSlot = newNodeSlots.findIndex((slot: INodeSlot) =>\n LiteGraph.isValidConnection(slot.type, this.type)\n )\n\n if (newNodeSlot === -1) {\n console.warn(\n `Could not find slot with type ${this.type} on node ${newNode.title}. This should never happen`\n )\n return\n }\n\n if (this.releaseSlotType === 'input') {\n this.node.connect(this.slot, newNode, newNodeSlot, this.afterRerouteId)\n } else {\n newNode.connect(newNodeSlot, this.node, this.slot, this.afterRerouteId)\n }\n }\n}\n\nexport type CanvasDragAndDropData = {\n type: 'add-node'\n data: T\n}\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nexport const useSearchBoxStore = defineStore('searchBox', () => {\n const visible = ref(false)\n function toggleVisible() {\n visible.value = !visible.value\n }\n\n return {\n visible,\n toggleVisible\n }\n})\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n _ref.dt;\n return \"\\n.p-buttongroup .p-button {\\n margin: 0;\\n}\\n\\n.p-buttongroup .p-button:not(:last-child),\\n.p-buttongroup .p-button:not(:last-child):hover {\\n border-right: 0 none;\\n}\\n\\n.p-buttongroup .p-button:not(:first-of-type):not(:last-of-type) {\\n border-radius: 0;\\n}\\n\\n.p-buttongroup .p-button:first-of-type:not(:only-of-type) {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\\n.p-buttongroup .p-button:last-of-type:not(:only-of-type) {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n}\\n\\n.p-buttongroup .p-button:focus {\\n position: relative;\\n z-index: 1;\\n}\\n\";\n};\nvar classes = {\n root: 'p-buttongroup p-component'\n};\nvar ButtonGroupStyle = BaseStyle.extend({\n name: 'buttongroup',\n theme: theme,\n classes: classes\n});\n\nexport { ButtonGroupStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport ButtonGroupStyle from 'primevue/buttongroup/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseButtonGroup',\n \"extends\": BaseComponent,\n style: ButtonGroupStyle,\n provide: function provide() {\n return {\n $pcButtonGroup: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'ButtonGroup',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"group\"\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-toast {\\n width: \".concat(dt('toast.width'), \";\\n white-space: pre-line;\\n word-break: break-word;\\n}\\n\\n.p-toast-message {\\n margin: 0 0 1rem 0;\\n}\\n\\n.p-toast-message-icon {\\n flex-shrink: 0;\\n font-size: \").concat(dt('toast.icon.size'), \";\\n width: \").concat(dt('toast.icon.size'), \";\\n height: \").concat(dt('toast.icon.size'), \";\\n}\\n\\n.p-toast-message-content {\\n display: flex;\\n align-items: flex-start;\\n padding: \").concat(dt('toast.content.padding'), \";\\n gap: \").concat(dt('toast.content.gap'), \";\\n}\\n\\n.p-toast-message-text {\\n flex: 1 1 auto;\\n display: flex;\\n flex-direction: column;\\n gap: \").concat(dt('toast.text.gap'), \";\\n}\\n\\n.p-toast-summary {\\n font-weight: \").concat(dt('toast.summary.font.weight'), \";\\n font-size: \").concat(dt('toast.summary.font.size'), \";\\n}\\n\\n.p-toast-detail {\\n font-weight: \").concat(dt('toast.detail.font.weight'), \";\\n font-size: \").concat(dt('toast.detail.font.size'), \";\\n}\\n\\n.p-toast-close-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n overflow: hidden;\\n position: relative;\\n cursor: pointer;\\n background: transparent;\\n transition: background \").concat(dt('toast.transition.duration'), \", color \").concat(dt('toast.transition.duration'), \", outline-color \").concat(dt('toast.transition.duration'), \", box-shadow \").concat(dt('toast.transition.duration'), \";\\n outline-color: transparent;\\n color: inherit;\\n width: \").concat(dt('toast.close.button.width'), \";\\n height: \").concat(dt('toast.close.button.height'), \";\\n border-radius: \").concat(dt('toast.close.button.border.radius'), \";\\n margin: -25% 0 0 0;\\n right: -25%;\\n padding: 0;\\n border: none;\\n user-select: none;\\n}\\n\\n.p-toast-message-info,\\n.p-toast-message-success,\\n.p-toast-message-warn,\\n.p-toast-message-error,\\n.p-toast-message-secondary,\\n.p-toast-message-contrast {\\n border-width: \").concat(dt('toast.border.width'), \";\\n border-style: solid;\\n backdrop-filter: blur(\").concat(dt('toast.blur'), \");\\n border-radius: \").concat(dt('toast.border.radius'), \";\\n}\\n\\n.p-toast-close-icon {\\n font-size: \").concat(dt('toast.close.icon.size'), \";\\n width: \").concat(dt('toast.close.icon.size'), \";\\n height: \").concat(dt('toast.close.icon.size'), \";\\n}\\n\\n.p-toast-close-button:focus-visible {\\n outline-width: \").concat(dt('focus.ring.width'), \";\\n outline-style: \").concat(dt('focus.ring.style'), \";\\n outline-offset: \").concat(dt('focus.ring.offset'), \";\\n}\\n\\n.p-toast-message-info {\\n background: \").concat(dt('toast.info.background'), \";\\n border-color: \").concat(dt('toast.info.border.color'), \";\\n color: \").concat(dt('toast.info.color'), \";\\n box-shadow: \").concat(dt('toast.info.shadow'), \";\\n}\\n\\n.p-toast-message-info .p-toast-detail {\\n color: \").concat(dt('toast.info.detail.color'), \";\\n}\\n\\n.p-toast-message-info .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.info.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.info.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-info .p-toast-close-button:hover {\\n background: \").concat(dt('toast.info.close.button.hover.background'), \";\\n}\\n\\n.p-toast-message-success {\\n background: \").concat(dt('toast.success.background'), \";\\n border-color: \").concat(dt('toast.success.border.color'), \";\\n color: \").concat(dt('toast.success.color'), \";\\n box-shadow: \").concat(dt('toast.success.shadow'), \";\\n}\\n\\n.p-toast-message-success .p-toast-detail {\\n color: \").concat(dt('toast.success.detail.color'), \";\\n}\\n\\n.p-toast-message-success .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.success.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.success.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-success .p-toast-close-button:hover {\\n background: \").concat(dt('toast.success.close.button.hover.background'), \";\\n}\\n\\n.p-toast-message-warn {\\n background: \").concat(dt('toast.warn.background'), \";\\n border-color: \").concat(dt('toast.warn.border.color'), \";\\n color: \").concat(dt('toast.warn.color'), \";\\n box-shadow: \").concat(dt('toast.warn.shadow'), \";\\n}\\n\\n.p-toast-message-warn .p-toast-detail {\\n color: \").concat(dt('toast.warn.detail.color'), \";\\n}\\n\\n.p-toast-message-warn .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.warn.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.warn.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-warn .p-toast-close-button:hover {\\n background: \").concat(dt('toast.warn.close.button.hover.background'), \";\\n}\\n\\n.p-toast-message-error {\\n background: \").concat(dt('toast.error.background'), \";\\n border-color: \").concat(dt('toast.error.border.color'), \";\\n color: \").concat(dt('toast.error.color'), \";\\n box-shadow: \").concat(dt('toast.error.shadow'), \";\\n}\\n\\n.p-toast-message-error .p-toast-detail {\\n color: \").concat(dt('toast.error.detail.color'), \";\\n}\\n\\n.p-toast-message-error .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.error.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.error.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-error .p-toast-close-button:hover {\\n background: \").concat(dt('toast.error.close.button.hover.background'), \";\\n}\\n\\n.p-toast-message-secondary {\\n background: \").concat(dt('toast.secondary.background'), \";\\n border-color: \").concat(dt('toast.secondary.border.color'), \";\\n color: \").concat(dt('toast.secondary.color'), \";\\n box-shadow: \").concat(dt('toast.secondary.shadow'), \";\\n}\\n\\n.p-toast-message-secondary .p-toast-detail {\\n color: \").concat(dt('toast.secondary.detail.color'), \";\\n}\\n\\n.p-toast-message-secondary .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.secondary.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.secondary.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-secondary .p-toast-close-button:hover {\\n background: \").concat(dt('toast.secondary.close.button.hover.background'), \";\\n}\\n\\n.p-toast-message-contrast {\\n background: \").concat(dt('toast.contrast.background'), \";\\n border-color: \").concat(dt('toast.contrast.border.color'), \";\\n color: \").concat(dt('toast.contrast.color'), \";\\n box-shadow: \").concat(dt('toast.contrast.shadow'), \";\\n}\\n\\n.p-toast-message-contrast .p-toast-detail {\\n color: \").concat(dt('toast.contrast.detail.color'), \";\\n}\\n\\n.p-toast-message-contrast .p-toast-close-button:focus-visible {\\n outline-color: \").concat(dt('toast.contrast.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('toast.contrast.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-toast-message-contrast .p-toast-close-button:hover {\\n background: \").concat(dt('toast.contrast.close.button.hover.background'), \";\\n}\\n\\n.p-toast-top-center {\\n transform: translateX(-50%);\\n}\\n\\n.p-toast-bottom-center {\\n transform: translateX(-50%);\\n}\\n\\n.p-toast-center {\\n min-width: 20vw;\\n transform: translate(-50%, -50%);\\n}\\n\\n.p-toast-message-enter-from {\\n opacity: 0;\\n transform: translateY(50%);\\n}\\n\\n.p-toast-message-leave-from {\\n max-height: 1000px;\\n}\\n\\n.p-toast .p-toast-message.p-toast-message-leave-to {\\n max-height: 0;\\n opacity: 0;\\n margin-bottom: 0;\\n overflow: hidden;\\n}\\n\\n.p-toast-message-enter-active {\\n transition: transform 0.3s, opacity 0.3s;\\n}\\n\\n.p-toast-message-leave-active {\\n transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s;\\n}\\n\");\n};\n\n// Position\nvar inlineStyles = {\n root: function root(_ref2) {\n var position = _ref2.position;\n return {\n position: 'fixed',\n top: position === 'top-right' || position === 'top-left' || position === 'top-center' ? '20px' : position === 'center' ? '50%' : null,\n right: (position === 'top-right' || position === 'bottom-right') && '20px',\n bottom: (position === 'bottom-left' || position === 'bottom-right' || position === 'bottom-center') && '20px',\n left: position === 'top-left' || position === 'bottom-left' ? '20px' : position === 'center' || position === 'top-center' || position === 'bottom-center' ? '50%' : null\n };\n }\n};\nvar classes = {\n root: function root(_ref3) {\n var props = _ref3.props;\n return ['p-toast p-component p-toast-' + props.position];\n },\n message: function message(_ref4) {\n var props = _ref4.props;\n return ['p-toast-message', {\n 'p-toast-message-info': props.message.severity === 'info' || props.message.severity === undefined,\n 'p-toast-message-warn': props.message.severity === 'warn',\n 'p-toast-message-error': props.message.severity === 'error',\n 'p-toast-message-success': props.message.severity === 'success',\n 'p-toast-message-secondary': props.message.severity === 'secondary',\n 'p-toast-message-contrast': props.message.severity === 'contrast'\n }];\n },\n messageContent: 'p-toast-message-content',\n messageIcon: function messageIcon(_ref5) {\n var props = _ref5.props;\n return ['p-toast-message-icon', _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, props.infoIcon, props.message.severity === 'info'), props.warnIcon, props.message.severity === 'warn'), props.errorIcon, props.message.severity === 'error'), props.successIcon, props.message.severity === 'success')];\n },\n messageText: 'p-toast-message-text',\n summary: 'p-toast-summary',\n detail: 'p-toast-detail',\n closeButton: 'p-toast-close-button',\n closeIcon: 'p-toast-close-icon'\n};\nvar ToastStyle = BaseStyle.extend({\n name: 'toast',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { ToastStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { setAttribute } from '@primeuix/utils/dom';\nimport { isEmpty } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport { UniqueComponentId } from '@primevue/core/utils';\nimport Portal from 'primevue/portal';\nimport ToastEventBus from 'primevue/toasteventbus';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport ToastStyle from 'primevue/toast/style';\nimport CheckIcon from '@primevue/icons/check';\nimport ExclamationTriangleIcon from '@primevue/icons/exclamationtriangle';\nimport InfoCircleIcon from '@primevue/icons/infocircle';\nimport TimesIcon from '@primevue/icons/times';\nimport TimesCircleIcon from '@primevue/icons/timescircle';\nimport Ripple from 'primevue/ripple';\nimport { resolveDirective, openBlock, createElementBlock, mergeProps, createBlock, resolveDynamicComponent, Fragment, createElementVNode, toDisplayString, normalizeProps, withDirectives, createCommentVNode, resolveComponent, withCtx, createVNode, TransitionGroup, renderList } from 'vue';\n\nvar script$2 = {\n name: 'BaseToast',\n \"extends\": BaseComponent,\n props: {\n group: {\n type: String,\n \"default\": null\n },\n position: {\n type: String,\n \"default\": 'top-right'\n },\n autoZIndex: {\n type: Boolean,\n \"default\": true\n },\n baseZIndex: {\n type: Number,\n \"default\": 0\n },\n breakpoints: {\n type: Object,\n \"default\": null\n },\n closeIcon: {\n type: String,\n \"default\": undefined\n },\n infoIcon: {\n type: String,\n \"default\": undefined\n },\n warnIcon: {\n type: String,\n \"default\": undefined\n },\n errorIcon: {\n type: String,\n \"default\": undefined\n },\n successIcon: {\n type: String,\n \"default\": undefined\n },\n closeButtonProps: {\n type: null,\n \"default\": null\n }\n },\n style: ToastStyle,\n provide: function provide() {\n return {\n $pcToast: this,\n $parentInstance: this\n };\n }\n};\n\nvar script$1 = {\n name: 'ToastMessage',\n hostName: 'Toast',\n \"extends\": BaseComponent,\n emits: ['close'],\n closeTimeout: null,\n props: {\n message: {\n type: null,\n \"default\": null\n },\n templates: {\n type: Object,\n \"default\": null\n },\n closeIcon: {\n type: String,\n \"default\": null\n },\n infoIcon: {\n type: String,\n \"default\": null\n },\n warnIcon: {\n type: String,\n \"default\": null\n },\n errorIcon: {\n type: String,\n \"default\": null\n },\n successIcon: {\n type: String,\n \"default\": null\n },\n closeButtonProps: {\n type: null,\n \"default\": null\n }\n },\n mounted: function mounted() {\n var _this = this;\n if (this.message.life) {\n this.closeTimeout = setTimeout(function () {\n _this.close({\n message: _this.message,\n type: 'life-end'\n });\n }, this.message.life);\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.clearCloseTimeout();\n },\n methods: {\n close: function close(params) {\n this.$emit('close', params);\n },\n onCloseClick: function onCloseClick() {\n this.clearCloseTimeout();\n this.close({\n message: this.message,\n type: 'close'\n });\n },\n clearCloseTimeout: function clearCloseTimeout() {\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n },\n computed: {\n iconComponent: function iconComponent() {\n return {\n info: !this.infoIcon && InfoCircleIcon,\n success: !this.successIcon && CheckIcon,\n warn: !this.warnIcon && ExclamationTriangleIcon,\n error: !this.errorIcon && TimesCircleIcon\n }[this.message.severity];\n },\n closeAriaLabel: function closeAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : undefined;\n }\n },\n components: {\n TimesIcon: TimesIcon,\n InfoCircleIcon: InfoCircleIcon,\n CheckIcon: CheckIcon,\n ExclamationTriangleIcon: ExclamationTriangleIcon,\n TimesCircleIcon: TimesCircleIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nfunction _typeof$1(o) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$1(o); }\nfunction ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty$1(e, r, t) { return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey$1(t) { var i = _toPrimitive$1(t, \"string\"); return \"symbol\" == _typeof$1(i) ? i : i + \"\"; }\nfunction _toPrimitive$1(t, r) { if (\"object\" != _typeof$1(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof$1(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar _hoisted_1 = [\"aria-label\"];\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": [_ctx.cx('message'), $props.message.styleClass],\n role: \"alert\",\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\"\n }, _ctx.ptm('message')), [$props.templates.container ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.container), {\n key: 0,\n message: $props.message,\n closeCallback: $options.onCloseClick\n }, null, 8, [\"message\", \"closeCallback\"])) : (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 1,\n \"class\": [_ctx.cx('messageContent'), $props.message.contentStyleClass]\n }, _ctx.ptm('messageContent')), [!$props.templates.message ? (openBlock(), createElementBlock(Fragment, {\n key: 0\n }, [(openBlock(), createBlock(resolveDynamicComponent($props.templates.messageicon ? $props.templates.messageicon : $props.templates.icon ? $props.templates.icon : $options.iconComponent && $options.iconComponent.name ? $options.iconComponent : 'span'), mergeProps({\n \"class\": _ctx.cx('messageIcon')\n }, _ctx.ptm('messageIcon')), null, 16, [\"class\"])), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('messageText')\n }, _ctx.ptm('messageText')), [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('summary')\n }, _ctx.ptm('summary')), toDisplayString($props.message.summary), 17), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('detail')\n }, _ctx.ptm('detail')), toDisplayString($props.message.detail), 17)], 16)], 64)) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.message), {\n key: 1,\n message: $props.message\n }, null, 8, [\"message\"])), $props.message.closable !== false ? (openBlock(), createElementBlock(\"div\", normalizeProps(mergeProps({\n key: 2\n }, _ctx.ptm('buttonContainer'))), [withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n \"class\": _ctx.cx('closeButton'),\n type: \"button\",\n \"aria-label\": $options.closeAriaLabel,\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.onCloseClick && $options.onCloseClick.apply($options, arguments);\n }),\n autofocus: \"\"\n }, _objectSpread$1(_objectSpread$1({}, $props.closeButtonProps), _ctx.ptm('closeButton'))), [(openBlock(), createBlock(resolveDynamicComponent($props.templates.closeicon || 'TimesIcon'), mergeProps({\n \"class\": [_ctx.cx('closeIcon'), $props.closeIcon]\n }, _ctx.ptm('closeIcon')), null, 16, [\"class\"]))], 16, _hoisted_1)), [[_directive_ripple]])], 16)) : createCommentVNode(\"\", true)], 16))], 16);\n}\n\nscript$1.render = render$1;\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar messageIdx = 0;\nvar script = {\n name: 'Toast',\n \"extends\": script$2,\n inheritAttrs: false,\n emits: ['close', 'life-end'],\n data: function data() {\n return {\n messages: []\n };\n },\n styleElement: null,\n mounted: function mounted() {\n ToastEventBus.on('add', this.onAdd);\n ToastEventBus.on('remove', this.onRemove);\n ToastEventBus.on('remove-group', this.onRemoveGroup);\n ToastEventBus.on('remove-all-groups', this.onRemoveAllGroups);\n if (this.breakpoints) {\n this.createStyle();\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.destroyStyle();\n if (this.$refs.container && this.autoZIndex) {\n ZIndex.clear(this.$refs.container);\n }\n ToastEventBus.off('add', this.onAdd);\n ToastEventBus.off('remove', this.onRemove);\n ToastEventBus.off('remove-group', this.onRemoveGroup);\n ToastEventBus.off('remove-all-groups', this.onRemoveAllGroups);\n },\n methods: {\n add: function add(message) {\n if (message.id == null) {\n message.id = messageIdx++;\n }\n this.messages = [].concat(_toConsumableArray(this.messages), [message]);\n },\n remove: function remove(params) {\n var index = this.messages.findIndex(function (m) {\n return m.id === params.message.id;\n });\n if (index !== -1) {\n this.messages.splice(index, 1);\n this.$emit(params.type, {\n message: params.message\n });\n }\n },\n onAdd: function onAdd(message) {\n if (this.group == message.group) {\n this.add(message);\n }\n },\n onRemove: function onRemove(message) {\n this.remove({\n message: message,\n type: 'close'\n });\n },\n onRemoveGroup: function onRemoveGroup(group) {\n if (this.group === group) {\n this.messages = [];\n }\n },\n onRemoveAllGroups: function onRemoveAllGroups() {\n this.messages = [];\n },\n onEnter: function onEnter() {\n this.$refs.container.setAttribute(this.attributeSelector, '');\n if (this.autoZIndex) {\n ZIndex.set('modal', this.$refs.container, this.baseZIndex || this.$primevue.config.zIndex.modal);\n }\n },\n onLeave: function onLeave() {\n var _this = this;\n if (this.$refs.container && this.autoZIndex && isEmpty(this.messages)) {\n setTimeout(function () {\n ZIndex.clear(_this.$refs.container);\n }, 200);\n }\n },\n createStyle: function createStyle() {\n if (!this.styleElement && !this.isUnstyled) {\n var _this$$primevue;\n this.styleElement = document.createElement('style');\n this.styleElement.type = 'text/css';\n setAttribute(this.styleElement, 'nonce', (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce);\n document.head.appendChild(this.styleElement);\n var innerHTML = '';\n for (var breakpoint in this.breakpoints) {\n var breakpointStyle = '';\n for (var styleProp in this.breakpoints[breakpoint]) {\n breakpointStyle += styleProp + ':' + this.breakpoints[breakpoint][styleProp] + '!important;';\n }\n innerHTML += \"\\n @media screen and (max-width: \".concat(breakpoint, \") {\\n .p-toast[\").concat(this.attributeSelector, \"] {\\n \").concat(breakpointStyle, \"\\n }\\n }\\n \");\n }\n this.styleElement.innerHTML = innerHTML;\n }\n },\n destroyStyle: function destroyStyle() {\n if (this.styleElement) {\n document.head.removeChild(this.styleElement);\n this.styleElement = null;\n }\n }\n },\n computed: {\n attributeSelector: function attributeSelector() {\n return UniqueComponentId();\n }\n },\n components: {\n ToastMessage: script$1,\n Portal: Portal\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_ToastMessage = resolveComponent(\"ToastMessage\");\n var _component_Portal = resolveComponent(\"Portal\");\n return openBlock(), createBlock(_component_Portal, null, {\n \"default\": withCtx(function () {\n return [createElementVNode(\"div\", mergeProps({\n ref: \"container\",\n \"class\": _ctx.cx('root'),\n style: _ctx.sx('root', true, {\n position: _ctx.position\n })\n }, _ctx.ptmi('root')), [createVNode(TransitionGroup, mergeProps({\n name: \"p-toast-message\",\n tag: \"div\",\n onEnter: $options.onEnter,\n onLeave: $options.onLeave\n }, _objectSpread({}, _ctx.ptm('transition'))), {\n \"default\": withCtx(function () {\n return [(openBlock(true), createElementBlock(Fragment, null, renderList($data.messages, function (msg) {\n return openBlock(), createBlock(_component_ToastMessage, {\n key: msg.id,\n message: msg,\n templates: _ctx.$slots,\n closeIcon: _ctx.closeIcon,\n infoIcon: _ctx.infoIcon,\n warnIcon: _ctx.warnIcon,\n errorIcon: _ctx.errorIcon,\n successIcon: _ctx.successIcon,\n closeButtonProps: _ctx.closeButtonProps,\n unstyled: _ctx.unstyled,\n onClose: _cache[0] || (_cache[0] = function ($event) {\n return $options.remove($event);\n }),\n pt: _ctx.pt\n }, null, 8, [\"message\", \"templates\", \"closeIcon\", \"infoIcon\", \"warnIcon\", \"errorIcon\", \"successIcon\", \"closeButtonProps\", \"unstyled\", \"pt\"]);\n }), 128))];\n }),\n _: 1\n }, 16, [\"onEnter\", \"onLeave\"])], 16)];\n }),\n _: 1\n });\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-menubar {\\n display: flex;\\n align-items: center;\\n background: \".concat(dt('menubar.background'), \";\\n border: 1px solid \").concat(dt('menubar.border.color'), \";\\n border-radius: \").concat(dt('menubar.border.radius'), \";\\n color: \").concat(dt('menubar.color'), \";\\n padding: \").concat(dt('menubar.padding'), \";\\n gap: \").concat(dt('menubar.gap'), \";\\n}\\n\\n.p-menubar-start,\\n.p-megamenu-end {\\n display: flex;\\n align-items: center;\\n}\\n\\n.p-menubar-root-list,\\n.p-menubar-submenu {\\n display: flex;\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n outline: 0 none;\\n}\\n\\n.p-menubar-root-list {\\n align-items: center;\\n flex-wrap: wrap;\\n gap: \").concat(dt('menubar.gap'), \";\\n}\\n\\n.p-menubar-root-list > .p-menubar-item > .p-menubar-item-content {\\n border-radius: \").concat(dt('menubar.base.item.border.radius'), \";\\n}\\n\\n.p-menubar-root-list > .p-menubar-item > .p-menubar-item-content > .p-menubar-item-link {\\n padding: \").concat(dt('menubar.base.item.padding'), \";\\n}\\n\\n.p-menubar-item-content {\\n transition: background \").concat(dt('menubar.transition.duration'), \", color \").concat(dt('menubar.transition.duration'), \";\\n border-radius: \").concat(dt('menubar.item.border.radius'), \";\\n color: \").concat(dt('menubar.item.color'), \";\\n}\\n\\n.p-menubar-item-link {\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n text-decoration: none;\\n overflow: hidden;\\n position: relative;\\n color: inherit;\\n padding: \").concat(dt('menubar.item.padding'), \";\\n gap: \").concat(dt('menubar.item.gap'), \";\\n user-select: none;\\n outline: 0 none;\\n}\\n\\n.p-menubar-item-label {\\n line-height: 1;\\n}\\n\\n.p-menubar-item-icon {\\n color: \").concat(dt('menubar.item.icon.color'), \";\\n}\\n\\n.p-menubar-submenu-icon {\\n color: \").concat(dt('menubar.submenu.icon.color'), \";\\n margin-left: auto;\\n font-size: \").concat(dt('menubar.submenu.icon.size'), \";\\n width: \").concat(dt('menubar.submenu.icon.size'), \";\\n height: \").concat(dt('menubar.submenu.icon.size'), \";\\n}\\n\\n.p-menubar-item.p-focus > .p-menubar-item-content {\\n color: \").concat(dt('menubar.item.focus.color'), \";\\n background: \").concat(dt('menubar.item.focus.background'), \";\\n}\\n\\n.p-menubar-item.p-focus > .p-menubar-item-content .p-menubar-item-icon {\\n color: \").concat(dt('menubar.item.icon.focus.color'), \";\\n}\\n\\n.p-menubar-item.p-focus > .p-menubar-item-content .p-menubar-submenu-icon {\\n color: \").concat(dt('menubar.submenu.icon.focus.color'), \";\\n}\\n\\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover {\\n color: \").concat(dt('menubar.item.focus.color'), \";\\n background: \").concat(dt('menubar.item.focus.background'), \";\\n}\\n\\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover .p-menubar-item-icon {\\n color: \").concat(dt('menubar.item.icon.focus.color'), \";\\n}\\n\\n.p-menubar-item:not(.p-disabled) > .p-menubar-item-content:hover .p-menubar-submenu-icon {\\n color: \").concat(dt('menubar.submenu.icon.focus.color'), \";\\n}\\n\\n.p-menubar-item-active > .p-menubar-item-content {\\n color: \").concat(dt('menubar.item.active.color'), \";\\n background: \").concat(dt('menubar.item.active.background'), \";\\n}\\n\\n.p-menubar-item-active > .p-menubar-item-content .p-menubar-item-icon {\\n color: \").concat(dt('menubar.item.icon.active.color'), \";\\n}\\n\\n.p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\\n color: \").concat(dt('menubar.submenu.icon.active.color'), \";\\n}\\n\\n.p-menubar-submenu {\\n display: none;\\n position: absolute;\\n min-width: 12.5rem;\\n z-index: 1;\\n background: \").concat(dt('menubar.submenu.background'), \";\\n border: 1px solid \").concat(dt('menubar.submenu.border.color'), \";\\n border-radius: \").concat(dt('menubar.border.radius'), \";\\n box-shadow: \").concat(dt('menubar.submenu.shadow'), \";\\n color: \").concat(dt('menubar.submenu.color'), \";\\n flex-direction: column;\\n padding: \").concat(dt('menubar.submenu.padding'), \";\\n gap: \").concat(dt('menubar.submenu.gap'), \";\\n}\\n\\n.p-menubar-submenu .p-menubar-separator {\\n border-top: 1px solid \").concat(dt('menubar.separator.border.color'), \";\\n}\\n\\n.p-menubar-submenu .p-menubar-item {\\n position: relative;\\n}\\n\\n .p-menubar-submenu > .p-menubar-item-active > .p-menubar-submenu {\\n display: block;\\n left: 100%;\\n top: 0;\\n}\\n\\n.p-menubar-end {\\n margin-left: auto;\\n align-self: center;\\n}\\n\\n.p-menubar-button {\\n display: none;\\n justify-content: center;\\n align-items: center;\\n cursor: pointer;\\n width: \").concat(dt('menubar.mobile.button.size'), \";\\n height: \").concat(dt('menubar.mobile.button.size'), \";\\n position: relative;\\n color: \").concat(dt('menubar.mobile.button.color'), \";\\n border: 0 none;\\n background: transparent;\\n border-radius: \").concat(dt('menubar.mobile.button.border.radius'), \";\\n transition: background \").concat(dt('menubar.transition.duration'), \", color \").concat(dt('menubar.transition.duration'), \", outline-color \").concat(dt('menubar.transition.duration'), \";\\n outline-color: transparent;\\n}\\n\\n.p-menubar-button:hover {\\n color: \").concat(dt('menubar.mobile.button.hover.color'), \";\\n background: \").concat(dt('menubar.mobile.button.hover.background'), \";\\n}\\n\\n.p-menubar-button:focus-visible {\\n box-shadow: \").concat(dt('menubar.mobile.button.focus.ring.shadow'), \";\\n outline: \").concat(dt('menubar.mobile.button.focus.ring.width'), \" \").concat(dt('menubar.mobile.button.focus.ring.style'), \" \").concat(dt('menubar.mobile.button.focus.ring.color'), \";\\n outline-offset: \").concat(dt('menubar.mobile.button.focus.ring.offset'), \";\\n}\\n\\n.p-menubar-mobile {\\n position: relative;\\n}\\n\\n.p-menubar-mobile .p-menubar-button {\\n display: flex;\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list {\\n position: absolute;\\n display: none;\\n width: 100%;\\n padding: \").concat(dt('menubar.submenu.padding'), \";\\n background: \").concat(dt('menubar.submenu.background'), \";\\n border: 1px solid \").concat(dt('menubar.submenu.border.color'), \";\\n box-shadow: \").concat(dt('menubar.submenu.shadow'), \";\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content {\\n border-radius: \").concat(dt('menubar.item.border.radius'), \";\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content > .p-menubar-item-link {\\n padding: \").concat(dt('menubar.item.padding'), \";\\n}\\n\\n.p-menubar-mobile-active .p-menubar-root-list {\\n display: flex;\\n flex-direction: column;\\n top: 100%;\\n left: 0;\\n z-index: 1;\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list .p-menubar-item {\\n width: 100%;\\n position: static;\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list .p-menubar-separator {\\n border-top: 1px solid \").concat(dt('menubar.separator.border.color'), \";\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item > .p-menubar-item-content .p-menubar-submenu-icon {\\n margin-left: auto;\\n transition: transform 0.2s;\\n}\\n\\n.p-menubar-mobile .p-menubar-root-list > .p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\\n transform: rotate(-180deg);\\n}\\n\\n.p-menubar-mobile .p-menubar-submenu .p-menubar-submenu-icon {\\n transition: transform 0.2s;\\n transform: rotate(90deg);\\n}\\n\\n.p-menubar-mobile .p-menubar-item-active > .p-menubar-item-content .p-menubar-submenu-icon {\\n transform: rotate(-90deg);\\n}\\n\\n.p-menubar-mobile .p-menubar-submenu {\\n width: 100%;\\n position: static;\\n box-shadow: none;\\n border: 0 none;\\n padding-left: \").concat(dt('menubar.submenu.mobile.indent'), \";\\n}\\n\");\n};\nvar inlineStyles = {\n submenu: function submenu(_ref2) {\n var instance = _ref2.instance,\n processedItem = _ref2.processedItem;\n return {\n display: instance.isItemActive(processedItem) ? 'flex' : 'none'\n };\n }\n};\nvar classes = {\n root: function root(_ref3) {\n var instance = _ref3.instance;\n return ['p-menubar p-component', {\n 'p-menubar-mobile': instance.queryMatches,\n 'p-menubar-mobile-active': instance.mobileActive\n }];\n },\n start: 'p-menubar-start',\n button: 'p-menubar-button',\n rootList: 'p-menubar-root-list',\n item: function item(_ref4) {\n var instance = _ref4.instance,\n processedItem = _ref4.processedItem;\n return ['p-menubar-item', {\n 'p-menubar-item-active': instance.isItemActive(processedItem),\n 'p-focus': instance.isItemFocused(processedItem),\n 'p-disabled': instance.isItemDisabled(processedItem)\n }];\n },\n itemContent: 'p-menubar-item-content',\n itemLink: 'p-menubar-item-link',\n itemIcon: 'p-menubar-item-icon',\n itemLabel: 'p-menubar-item-label',\n submenuIcon: 'p-menubar-submenu-icon',\n submenu: 'p-menubar-submenu',\n separator: 'p-menubar-separator',\n end: 'p-menubar-end'\n};\nvar MenubarStyle = BaseStyle.extend({\n name: 'menubar',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { MenubarStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport { focus, findSingle, isTouchDevice } from '@primeuix/utils/dom';\nimport { resolve, isNotEmpty, isPrintableCharacter, isEmpty, findLastIndex } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport BarsIcon from '@primevue/icons/bars';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport MenubarStyle from 'primevue/menubar/style';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleRightIcon from '@primevue/icons/angleright';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps, resolveComponent, resolveDirective, openBlock, createElementBlock, Fragment, renderList, createElementVNode, withDirectives, createBlock, resolveDynamicComponent, normalizeClass, createCommentVNode, toDisplayString, normalizeStyle, renderSlot, createVNode, normalizeProps, guardReactiveProps } from 'vue';\n\nvar script$2 = {\n name: 'BaseMenubar',\n \"extends\": BaseComponent,\n props: {\n model: {\n type: Array,\n \"default\": null\n },\n buttonProps: {\n type: null,\n \"default\": null\n },\n breakpoint: {\n type: String,\n \"default\": '960px'\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: MenubarStyle,\n provide: function provide() {\n return {\n $pcMenubar: this,\n $parentInstance: this\n };\n }\n};\n\nvar script$1 = {\n name: 'MenubarSub',\n hostName: 'Menubar',\n \"extends\": BaseComponent,\n emits: ['item-mouseenter', 'item-click', 'item-mousemove'],\n props: {\n items: {\n type: Array,\n \"default\": null\n },\n root: {\n type: Boolean,\n \"default\": false\n },\n popup: {\n type: Boolean,\n \"default\": false\n },\n mobileActive: {\n type: Boolean,\n \"default\": false\n },\n templates: {\n type: Object,\n \"default\": null\n },\n level: {\n type: Number,\n \"default\": 0\n },\n menuId: {\n type: String,\n \"default\": null\n },\n focusedItemId: {\n type: String,\n \"default\": null\n },\n activeItemPath: {\n type: Object,\n \"default\": null\n }\n },\n list: null,\n methods: {\n getItemId: function getItemId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key);\n },\n getItemKey: function getItemKey(processedItem) {\n return this.getItemId(processedItem);\n },\n getItemProp: function getItemProp(processedItem, name, params) {\n return processedItem && processedItem.item ? resolve(processedItem.item[name], params) : undefined;\n },\n getItemLabel: function getItemLabel(processedItem) {\n return this.getItemProp(processedItem, 'label');\n },\n getItemLabelId: function getItemLabelId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key, \"_label\");\n },\n getPTOptions: function getPTOptions(processedItem, index, key) {\n return this.ptm(key, {\n context: {\n item: processedItem.item,\n index: index,\n active: this.isItemActive(processedItem),\n focused: this.isItemFocused(processedItem),\n disabled: this.isItemDisabled(processedItem),\n level: this.level\n }\n });\n },\n isItemActive: function isItemActive(processedItem) {\n return this.activeItemPath.some(function (path) {\n return path.key === processedItem.key;\n });\n },\n isItemVisible: function isItemVisible(processedItem) {\n return this.getItemProp(processedItem, 'visible') !== false;\n },\n isItemDisabled: function isItemDisabled(processedItem) {\n return this.getItemProp(processedItem, 'disabled');\n },\n isItemFocused: function isItemFocused(processedItem) {\n return this.focusedItemId === this.getItemId(processedItem);\n },\n isItemGroup: function isItemGroup(processedItem) {\n return isNotEmpty(processedItem.items);\n },\n onItemClick: function onItemClick(event, processedItem) {\n this.getItemProp(processedItem, 'command', {\n originalEvent: event,\n item: processedItem.item\n });\n this.$emit('item-click', {\n originalEvent: event,\n processedItem: processedItem,\n isFocus: true\n });\n },\n onItemMouseEnter: function onItemMouseEnter(event, processedItem) {\n this.$emit('item-mouseenter', {\n originalEvent: event,\n processedItem: processedItem\n });\n },\n onItemMouseMove: function onItemMouseMove(event, processedItem) {\n this.$emit('item-mousemove', {\n originalEvent: event,\n processedItem: processedItem\n });\n },\n getAriaPosInset: function getAriaPosInset(index) {\n return index - this.calculateAriaSetSize.slice(0, index).length + 1;\n },\n getMenuItemProps: function getMenuItemProps(processedItem, index) {\n return {\n action: mergeProps({\n \"class\": this.cx('itemLink'),\n tabindex: -1,\n 'aria-hidden': true\n }, this.getPTOptions(processedItem, index, 'itemLink')),\n icon: mergeProps({\n \"class\": [this.cx('itemIcon'), this.getItemProp(processedItem, 'icon')]\n }, this.getPTOptions(processedItem, index, 'itemIcon')),\n label: mergeProps({\n \"class\": this.cx('itemLabel')\n }, this.getPTOptions(processedItem, index, 'itemLabel')),\n submenuicon: mergeProps({\n \"class\": this.cx('submenuIcon')\n }, this.getPTOptions(processedItem, index, 'submenuIcon'))\n };\n }\n },\n computed: {\n calculateAriaSetSize: function calculateAriaSetSize() {\n var _this = this;\n return this.items.filter(function (processedItem) {\n return _this.isItemVisible(processedItem) && _this.getItemProp(processedItem, 'separator');\n });\n },\n getAriaSetSize: function getAriaSetSize() {\n var _this2 = this;\n return this.items.filter(function (processedItem) {\n return _this2.isItemVisible(processedItem) && !_this2.getItemProp(processedItem, 'separator');\n }).length;\n }\n },\n components: {\n AngleRightIcon: AngleRightIcon,\n AngleDownIcon: AngleDownIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1$1 = [\"id\", \"aria-label\", \"aria-disabled\", \"aria-expanded\", \"aria-haspopup\", \"aria-level\", \"aria-setsize\", \"aria-posinset\", \"data-p-active\", \"data-p-focused\", \"data-p-disabled\"];\nvar _hoisted_2 = [\"onClick\", \"onMouseenter\", \"onMousemove\"];\nvar _hoisted_3 = [\"href\", \"target\"];\nvar _hoisted_4 = [\"id\"];\nvar _hoisted_5 = [\"id\"];\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_MenubarSub = resolveComponent(\"MenubarSub\", true);\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"ul\", mergeProps({\n \"class\": $props.level === 0 ? _ctx.cx('rootList') : _ctx.cx('submenu')\n }, $props.level === 0 ? _ctx.ptm('rootList') : _ctx.ptm('submenu')), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function (processedItem, index) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getItemKey(processedItem)\n }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n id: $options.getItemId(processedItem),\n style: $options.getItemProp(processedItem, 'style'),\n \"class\": [_ctx.cx('item', {\n processedItem: processedItem\n }), $options.getItemProp(processedItem, 'class')],\n role: \"menuitem\",\n \"aria-label\": $options.getItemLabel(processedItem),\n \"aria-disabled\": $options.isItemDisabled(processedItem) || undefined,\n \"aria-expanded\": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : undefined,\n \"aria-haspopup\": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, 'to') ? 'menu' : undefined,\n \"aria-level\": $props.level + 1,\n \"aria-setsize\": $options.getAriaSetSize,\n \"aria-posinset\": $options.getAriaPosInset(index),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'item'), {\n \"data-p-active\": $options.isItemActive(processedItem),\n \"data-p-focused\": $options.isItemFocused(processedItem),\n \"data-p-disabled\": $options.isItemDisabled(processedItem)\n }), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('itemContent'),\n onClick: function onClick($event) {\n return $options.onItemClick($event, processedItem);\n },\n onMouseenter: function onMouseenter($event) {\n return $options.onItemMouseEnter($event, processedItem);\n },\n onMousemove: function onMousemove($event) {\n return $options.onItemMouseMove($event, processedItem);\n },\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemContent')), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock(\"a\", mergeProps({\n key: 0,\n href: $options.getItemProp(processedItem, 'url'),\n \"class\": _ctx.cx('itemLink'),\n target: $options.getItemProp(processedItem, 'target'),\n tabindex: \"-1\",\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemLink')), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), {\n key: 0,\n item: processedItem.item,\n \"class\": normalizeClass(_ctx.cx('itemIcon'))\n }, null, 8, [\"item\", \"class\"])) : $options.getItemProp(processedItem, 'icon') ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n \"class\": [_ctx.cx('itemIcon'), $options.getItemProp(processedItem, 'icon')],\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemIcon')), null, 16)) : createCommentVNode(\"\", true), createElementVNode(\"span\", mergeProps({\n id: $options.getItemLabelId(processedItem),\n \"class\": _ctx.cx('itemLabel'),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemLabel')), toDisplayString($options.getItemLabel(processedItem)), 17, _hoisted_4), $options.getItemProp(processedItem, 'items') ? (openBlock(), createElementBlock(Fragment, {\n key: 2\n }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), {\n key: 0,\n root: $props.root,\n active: $options.isItemActive(processedItem),\n \"class\": normalizeClass(_ctx.cx('submenuIcon'))\n }, null, 8, [\"root\", \"active\", \"class\"])) : (openBlock(), createBlock(resolveDynamicComponent($props.root ? 'AngleDownIcon' : 'AngleRightIcon'), mergeProps({\n key: 1,\n \"class\": _ctx.cx('submenuIcon'),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'submenuIcon')), null, 16, [\"class\"]))], 64)) : createCommentVNode(\"\", true)], 16, _hoisted_3)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), {\n key: 1,\n item: processedItem.item,\n root: $props.root,\n hasSubmenu: $options.getItemProp(processedItem, 'items'),\n label: $options.getItemLabel(processedItem),\n props: $options.getMenuItemProps(processedItem, index)\n }, null, 8, [\"item\", \"root\", \"hasSubmenu\", \"label\", \"props\"]))], 16, _hoisted_2), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_MenubarSub, {\n key: 0,\n id: $options.getItemId(processedItem) + '_list',\n menuId: $props.menuId,\n role: \"menu\",\n style: normalizeStyle(_ctx.sx('submenu', true, {\n processedItem: processedItem\n })),\n focusedItemId: $props.focusedItemId,\n items: processedItem.items,\n mobileActive: $props.mobileActive,\n activeItemPath: $props.activeItemPath,\n templates: $props.templates,\n level: $props.level + 1,\n \"aria-labelledby\": $options.getItemLabelId(processedItem),\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onItemClick: _cache[0] || (_cache[0] = function ($event) {\n return _ctx.$emit('item-click', $event);\n }),\n onItemMouseenter: _cache[1] || (_cache[1] = function ($event) {\n return _ctx.$emit('item-mouseenter', $event);\n }),\n onItemMousemove: _cache[2] || (_cache[2] = function ($event) {\n return _ctx.$emit('item-mousemove', $event);\n })\n }, null, 8, [\"id\", \"menuId\", \"style\", \"focusedItemId\", \"items\", \"mobileActive\", \"activeItemPath\", \"templates\", \"level\", \"aria-labelledby\", \"pt\", \"unstyled\"])) : createCommentVNode(\"\", true)], 16, _hoisted_1$1)) : createCommentVNode(\"\", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n id: $options.getItemId(processedItem),\n \"class\": [_ctx.cx('separator'), $options.getItemProp(processedItem, 'class')],\n style: $options.getItemProp(processedItem, 'style'),\n role: \"separator\",\n ref_for: true\n }, _ctx.ptm('separator')), null, 16, _hoisted_5)) : createCommentVNode(\"\", true)], 64);\n }), 128))], 16);\n}\n\nscript$1.render = render$1;\n\nvar script = {\n name: 'Menubar',\n \"extends\": script$2,\n inheritAttrs: false,\n emits: ['focus', 'blur'],\n matchMediaListener: null,\n data: function data() {\n return {\n id: this.$attrs.id,\n mobileActive: false,\n focused: false,\n focusedItemInfo: {\n index: -1,\n level: 0,\n parentKey: ''\n },\n activeItemPath: [],\n dirty: false,\n query: null,\n queryMatches: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n activeItemPath: function activeItemPath(newPath) {\n if (isNotEmpty(newPath)) {\n this.bindOutsideClickListener();\n this.bindResizeListener();\n } else {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n }\n }\n },\n outsideClickListener: null,\n container: null,\n menubar: null,\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n this.bindMatchMediaListener();\n },\n beforeUnmount: function beforeUnmount() {\n this.mobileActive = false;\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n this.unbindMatchMediaListener();\n if (this.container) {\n ZIndex.clear(this.container);\n }\n this.container = null;\n },\n methods: {\n getItemProp: function getItemProp(item, name) {\n return item ? resolve(item[name]) : undefined;\n },\n getItemLabel: function getItemLabel(item) {\n return this.getItemProp(item, 'label');\n },\n isItemDisabled: function isItemDisabled(item) {\n return this.getItemProp(item, 'disabled');\n },\n isItemVisible: function isItemVisible(item) {\n return this.getItemProp(item, 'visible') !== false;\n },\n isItemGroup: function isItemGroup(item) {\n return isNotEmpty(this.getItemProp(item, 'items'));\n },\n isItemSeparator: function isItemSeparator(item) {\n return this.getItemProp(item, 'separator');\n },\n getProccessedItemLabel: function getProccessedItemLabel(processedItem) {\n return processedItem ? this.getItemLabel(processedItem.item) : undefined;\n },\n isProccessedItemGroup: function isProccessedItemGroup(processedItem) {\n return processedItem && isNotEmpty(processedItem.items);\n },\n toggle: function toggle(event) {\n var _this = this;\n if (this.mobileActive) {\n this.mobileActive = false;\n ZIndex.clear(this.menubar);\n this.hide();\n } else {\n this.mobileActive = true;\n ZIndex.set('menu', this.menubar, this.$primevue.config.zIndex.menu);\n setTimeout(function () {\n _this.show();\n }, 1);\n }\n this.bindOutsideClickListener();\n event.preventDefault();\n },\n show: function show() {\n focus(this.menubar);\n },\n hide: function hide(event, isFocus) {\n var _this2 = this;\n if (this.mobileActive) {\n this.mobileActive = false;\n setTimeout(function () {\n focus(_this2.$refs.menubutton);\n }, 0);\n }\n this.activeItemPath = [];\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n isFocus && focus(this.menubar);\n this.dirty = false;\n },\n onFocus: function onFocus(event) {\n this.focused = true;\n this.focusedItemInfo = this.focusedItemInfo.index !== -1 ? this.focusedItemInfo : {\n index: this.findFirstFocusedItemIndex(),\n level: 0,\n parentKey: ''\n };\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.focused = false;\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n this.searchValue = '';\n this.dirty = false;\n this.$emit('blur', event);\n },\n onKeyDown: function onKeyDown(event) {\n var metaKey = event.metaKey || event.ctrlKey;\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeftKey(event);\n break;\n case 'ArrowRight':\n this.onArrowRightKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'Space':\n this.onSpaceKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n //NOOP\n break;\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n this.searchItems(event, event.key);\n }\n break;\n }\n },\n onItemChange: function onItemChange(event) {\n var processedItem = event.processedItem,\n isFocus = event.isFocus;\n if (isEmpty(processedItem)) return;\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey,\n items = processedItem.items;\n var grouped = isNotEmpty(items);\n var activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== parentKey && p.parentKey !== key;\n });\n grouped && activeItemPath.push(processedItem);\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n this.activeItemPath = activeItemPath;\n grouped && (this.dirty = true);\n isFocus && focus(this.menubar);\n },\n onItemClick: function onItemClick(event) {\n var originalEvent = event.originalEvent,\n processedItem = event.processedItem;\n var grouped = this.isProccessedItemGroup(processedItem);\n var root = isEmpty(processedItem.parent);\n var selected = this.isSelected(processedItem);\n if (selected) {\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey;\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return key !== p.key && key.startsWith(p.key);\n });\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n this.dirty = !root;\n focus(this.menubar);\n } else {\n if (grouped) {\n this.onItemChange(event);\n } else {\n var rootProcessedItem = root ? processedItem : this.activeItemPath.find(function (p) {\n return p.parentKey === '';\n });\n this.hide(originalEvent);\n this.changeFocusedItemIndex(originalEvent, rootProcessedItem ? rootProcessedItem.index : -1);\n this.mobileActive = false;\n focus(this.menubar);\n }\n }\n },\n onItemMouseEnter: function onItemMouseEnter(event) {\n if (this.dirty) {\n this.onItemChange(event);\n }\n },\n onItemMouseMove: function onItemMouseMove(event) {\n if (this.focused) {\n this.changeFocusedItemIndex(event, event.processedItem.index);\n }\n },\n menuButtonClick: function menuButtonClick(event) {\n this.toggle(event);\n },\n menuButtonKeydown: function menuButtonKeydown(event) {\n (event.code === 'Enter' || event.code === 'NumpadEnter' || event.code === 'Space') && this.menuButtonClick(event);\n },\n onArrowDownKey: function onArrowDownKey(event) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var root = processedItem ? isEmpty(processedItem.parent) : null;\n if (root) {\n var grouped = this.isProccessedItemGroup(processedItem);\n if (grouped) {\n this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n this.focusedItemInfo = {\n index: -1,\n parentKey: processedItem.key\n };\n this.onArrowRightKey(event);\n }\n } else {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n }\n event.preventDefault();\n },\n onArrowUpKey: function onArrowUpKey(event) {\n var _this3 = this;\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var root = isEmpty(processedItem.parent);\n if (root) {\n var grouped = this.isProccessedItemGroup(processedItem);\n if (grouped) {\n this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n this.focusedItemInfo = {\n index: -1,\n parentKey: processedItem.key\n };\n var itemIndex = this.findLastItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n }\n } else {\n var parentItem = this.activeItemPath.find(function (p) {\n return p.key === processedItem.parentKey;\n });\n if (this.focusedItemInfo.index === 0) {\n this.focusedItemInfo = {\n index: -1,\n parentKey: parentItem ? parentItem.parentKey : ''\n };\n this.searchValue = '';\n this.onArrowLeftKey(event);\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== _this3.focusedItemInfo.parentKey;\n });\n } else {\n var _itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex();\n this.changeFocusedItemIndex(event, _itemIndex);\n }\n }\n event.preventDefault();\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var _this4 = this;\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var parentItem = processedItem ? this.activeItemPath.find(function (p) {\n return p.key === processedItem.parentKey;\n }) : null;\n if (parentItem) {\n this.onItemChange({\n originalEvent: event,\n processedItem: parentItem\n });\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== _this4.focusedItemInfo.parentKey;\n });\n event.preventDefault();\n } else {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n }\n },\n onArrowRightKey: function onArrowRightKey(event) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var parentItem = processedItem ? this.activeItemPath.find(function (p) {\n return p.key === processedItem.parentKey;\n }) : null;\n if (parentItem) {\n var grouped = this.isProccessedItemGroup(processedItem);\n if (grouped) {\n this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n this.focusedItemInfo = {\n index: -1,\n parentKey: processedItem.key\n };\n this.onArrowDownKey(event);\n }\n } else {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n }\n },\n onHomeKey: function onHomeKey(event) {\n this.changeFocusedItemIndex(event, this.findFirstItemIndex());\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n this.changeFocusedItemIndex(event, this.findLastItemIndex());\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var element = findSingle(this.menubar, \"li[id=\\\"\".concat(\"\".concat(this.focusedItemId), \"\\\"]\"));\n var anchorElement = element && findSingle(element, 'a[data-pc-section=\"itemlink\"]');\n anchorElement ? anchorElement.click() : element && element.click();\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex());\n }\n event.preventDefault();\n },\n onSpaceKey: function onSpaceKey(event) {\n this.onEnterKey(event);\n },\n onEscapeKey: function onEscapeKey(event) {\n if (this.focusedItemInfo.level !== 0) {\n var _focusedItemInfo = this.focusedItemInfo;\n this.hide(event, false);\n this.focusedItemInfo = {\n index: Number(_focusedItemInfo.parentKey.split('_')[0]),\n level: 0,\n parentKey: ''\n };\n }\n event.preventDefault();\n },\n onTabKey: function onTabKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n }\n this.hide();\n },\n bindOutsideClickListener: function bindOutsideClickListener() {\n var _this5 = this;\n if (!this.outsideClickListener) {\n this.outsideClickListener = function (event) {\n var isOutsideContainer = _this5.container && !_this5.container.contains(event.target);\n var isOutsideTarget = !(_this5.target && (_this5.target === event.target || _this5.target.contains(event.target)));\n if (isOutsideContainer && isOutsideTarget) {\n _this5.hide();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n },\n unbindOutsideClickListener: function unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n },\n bindResizeListener: function bindResizeListener() {\n var _this6 = this;\n if (!this.resizeListener) {\n this.resizeListener = function (event) {\n if (!isTouchDevice()) {\n _this6.hide(event, true);\n }\n _this6.mobileActive = false;\n };\n window.addEventListener('resize', this.resizeListener);\n }\n },\n unbindResizeListener: function unbindResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n },\n bindMatchMediaListener: function bindMatchMediaListener() {\n var _this7 = this;\n if (!this.matchMediaListener) {\n var query = matchMedia(\"(max-width: \".concat(this.breakpoint, \")\"));\n this.query = query;\n this.queryMatches = query.matches;\n this.matchMediaListener = function () {\n _this7.queryMatches = query.matches;\n _this7.mobileActive = false;\n };\n this.query.addEventListener('change', this.matchMediaListener);\n }\n },\n unbindMatchMediaListener: function unbindMatchMediaListener() {\n if (this.matchMediaListener) {\n this.query.removeEventListener('change', this.matchMediaListener);\n this.matchMediaListener = null;\n }\n },\n isItemMatched: function isItemMatched(processedItem) {\n var _this$getProccessedIt;\n return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase()));\n },\n isValidItem: function isValidItem(processedItem) {\n return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item);\n },\n isValidSelectedItem: function isValidSelectedItem(processedItem) {\n return this.isValidItem(processedItem) && this.isSelected(processedItem);\n },\n isSelected: function isSelected(processedItem) {\n return this.activeItemPath.some(function (p) {\n return p.key === processedItem.key;\n });\n },\n findFirstItemIndex: function findFirstItemIndex() {\n var _this8 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this8.isValidItem(processedItem);\n });\n },\n findLastItemIndex: function findLastItemIndex() {\n var _this9 = this;\n return findLastIndex(this.visibleItems, function (processedItem) {\n return _this9.isValidItem(processedItem);\n });\n },\n findNextItemIndex: function findNextItemIndex(index) {\n var _this10 = this;\n var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function (processedItem) {\n return _this10.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index;\n },\n findPrevItemIndex: function findPrevItemIndex(index) {\n var _this11 = this;\n var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function (processedItem) {\n return _this11.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex : index;\n },\n findSelectedItemIndex: function findSelectedItemIndex() {\n var _this12 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this12.isValidSelectedItem(processedItem);\n });\n },\n findFirstFocusedItemIndex: function findFirstFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex;\n },\n findLastFocusedItemIndex: function findLastFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex;\n },\n searchItems: function searchItems(event, _char) {\n var _this13 = this;\n this.searchValue = (this.searchValue || '') + _char;\n var itemIndex = -1;\n var matched = false;\n if (this.focusedItemInfo.index !== -1) {\n itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this13.isItemMatched(processedItem);\n });\n itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this13.isItemMatched(processedItem);\n }) : itemIndex + this.focusedItemInfo.index;\n } else {\n itemIndex = this.visibleItems.findIndex(function (processedItem) {\n return _this13.isItemMatched(processedItem);\n });\n }\n if (itemIndex !== -1) {\n matched = true;\n }\n if (itemIndex === -1 && this.focusedItemInfo.index === -1) {\n itemIndex = this.findFirstFocusedItemIndex();\n }\n if (itemIndex !== -1) {\n this.changeFocusedItemIndex(event, itemIndex);\n }\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(function () {\n _this13.searchValue = '';\n _this13.searchTimeout = null;\n }, 500);\n return matched;\n },\n changeFocusedItemIndex: function changeFocusedItemIndex(event, index) {\n if (this.focusedItemInfo.index !== index) {\n this.focusedItemInfo.index = index;\n this.scrollInView();\n }\n },\n scrollInView: function scrollInView() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n var id = index !== -1 ? \"\".concat(this.id, \"_\").concat(index) : this.focusedItemId;\n var element = findSingle(this.menubar, \"li[id=\\\"\".concat(id, \"\\\"]\"));\n if (element) {\n element.scrollIntoView && element.scrollIntoView({\n block: 'nearest',\n inline: 'start'\n });\n }\n },\n createProcessedItems: function createProcessedItems(items) {\n var _this14 = this;\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parentKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var processedItems = [];\n items && items.forEach(function (item, index) {\n var key = (parentKey !== '' ? parentKey + '_' : '') + index;\n var newItem = {\n item: item,\n index: index,\n level: level,\n key: key,\n parent: parent,\n parentKey: parentKey\n };\n newItem['items'] = _this14.createProcessedItems(item.items, level + 1, newItem, key);\n processedItems.push(newItem);\n });\n return processedItems;\n },\n containerRef: function containerRef(el) {\n this.container = el;\n },\n menubarRef: function menubarRef(el) {\n this.menubar = el ? el.$el : undefined;\n }\n },\n computed: {\n processedItems: function processedItems() {\n return this.createProcessedItems(this.model || []);\n },\n visibleItems: function visibleItems() {\n var _this15 = this;\n var processedItem = this.activeItemPath.find(function (p) {\n return p.key === _this15.focusedItemInfo.parentKey;\n });\n return processedItem ? processedItem.items : this.processedItems;\n },\n focusedItemId: function focusedItemId() {\n return this.focusedItemInfo.index !== -1 ? \"\".concat(this.id).concat(isNotEmpty(this.focusedItemInfo.parentKey) ? '_' + this.focusedItemInfo.parentKey : '', \"_\").concat(this.focusedItemInfo.index) : null;\n }\n },\n components: {\n MenubarSub: script$1,\n BarsIcon: BarsIcon\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar _hoisted_1 = [\"aria-haspopup\", \"aria-expanded\", \"aria-controls\", \"aria-label\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_BarsIcon = resolveComponent(\"BarsIcon\");\n var _component_MenubarSub = resolveComponent(\"MenubarSub\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref: $options.containerRef,\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [_ctx.$slots.start ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('start')\n }, _ctx.ptm('start')), [renderSlot(_ctx.$slots, \"start\")], 16)) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, _ctx.$slots.button ? 'button' : 'menubutton', {\n id: $data.id,\n \"class\": normalizeClass(_ctx.cx('button')),\n toggleCallback: function toggleCallback(event) {\n return $options.menuButtonClick(event);\n }\n }, function () {\n var _ctx$$primevue$config;\n return [_ctx.model && _ctx.model.length > 0 ? (openBlock(), createElementBlock(\"a\", mergeProps({\n key: 0,\n ref: \"menubutton\",\n role: \"button\",\n tabindex: \"0\",\n \"class\": _ctx.cx('button'),\n \"aria-haspopup\": _ctx.model.length && _ctx.model.length > 0 ? true : false,\n \"aria-expanded\": $data.mobileActive,\n \"aria-controls\": $data.id,\n \"aria-label\": (_ctx$$primevue$config = _ctx.$primevue.config.locale.aria) === null || _ctx$$primevue$config === void 0 ? void 0 : _ctx$$primevue$config.navigation,\n onClick: _cache[0] || (_cache[0] = function ($event) {\n return $options.menuButtonClick($event);\n }),\n onKeydown: _cache[1] || (_cache[1] = function ($event) {\n return $options.menuButtonKeydown($event);\n })\n }, _objectSpread(_objectSpread({}, _ctx.buttonProps), _ctx.ptm('button'))), [renderSlot(_ctx.$slots, _ctx.$slots.buttonicon ? 'buttonicon' : 'menubuttonicon', {}, function () {\n return [createVNode(_component_BarsIcon, normalizeProps(guardReactiveProps(_ctx.ptm('buttonicon'))), null, 16)];\n })], 16, _hoisted_1)) : createCommentVNode(\"\", true)];\n }), createVNode(_component_MenubarSub, {\n ref: $options.menubarRef,\n id: $data.id + '_list',\n role: \"menubar\",\n items: $options.processedItems,\n templates: _ctx.$slots,\n root: true,\n mobileActive: $data.mobileActive,\n tabindex: \"0\",\n \"aria-activedescendant\": $data.focused ? $options.focusedItemId : undefined,\n menuId: $data.id,\n focusedItemId: $data.focused ? $options.focusedItemId : undefined,\n activeItemPath: $data.activeItemPath,\n level: 0,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onFocus: $options.onFocus,\n onBlur: $options.onBlur,\n onKeydown: $options.onKeyDown,\n onItemClick: $options.onItemClick,\n onItemMouseenter: $options.onItemMouseEnter,\n onItemMousemove: $options.onItemMouseMove\n }, null, 8, [\"id\", \"items\", \"templates\", \"mobileActive\", \"aria-activedescendant\", \"menuId\", \"focusedItemId\", \"activeItemPath\", \"aria-labelledby\", \"aria-label\", \"pt\", \"unstyled\", \"onFocus\", \"onBlur\", \"onKeydown\", \"onItemClick\", \"onItemMouseenter\", \"onItemMousemove\"]), _ctx.$slots.end ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('end')\n }, _ctx.ptm('end')), [renderSlot(_ctx.$slots, \"end\")], 16)) : createCommentVNode(\"\", true)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-panel {\\n border: 1px solid \".concat(dt('panel.border.color'), \";\\n border-radius: \").concat(dt('panel.border.radius'), \";\\n background: \").concat(dt('panel.background'), \";\\n color: \").concat(dt('panel.color'), \";\\n}\\n\\n.p-panel-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: \").concat(dt('panel.header.padding'), \";\\n background: \").concat(dt('panel.header.background'), \";\\n color: \").concat(dt('panel.header.color'), \";\\n border-style: solid;\\n border-width: \").concat(dt('panel.header.border.width'), \";\\n border-color: \").concat(dt('panel.header.border.color'), \";\\n border-radius: \").concat(dt('panel.header.border.radius'), \";\\n}\\n\\n.p-panel-toggleable .p-panel-header {\\n padding: \").concat(dt('panel.toggleable.header.padding'), \";\\n}\\n\\n.p-panel-title {\\n line-height: 1;\\n font-weight: \").concat(dt('panel.title.font.weight'), \";\\n}\\n\\n.p-panel-content {\\n padding: \").concat(dt('panel.content.padding'), \";\\n}\\n\\n.p-panel-footer {\\n padding: \").concat(dt('panel.footer.padding'), \";\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-panel p-component', {\n 'p-panel-toggleable': props.toggleable\n }];\n },\n header: 'p-panel-header',\n title: 'p-panel-title',\n headerActions: 'p-panel-header-actions',\n pcToggleButton: 'p-panel-toggle-button',\n contentContainer: 'p-panel-content-container',\n content: 'p-panel-content',\n footer: 'p-panel-footer'\n};\nvar PanelStyle = BaseStyle.extend({\n name: 'panel',\n theme: theme,\n classes: classes\n});\n\nexport { PanelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport MinusIcon from '@primevue/icons/minus';\nimport PlusIcon from '@primevue/icons/plus';\nimport Button from 'primevue/button';\nimport Ripple from 'primevue/ripple';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport PanelStyle from 'primevue/panel/style';\nimport { resolveComponent, openBlock, createElementBlock, mergeProps, createElementVNode, renderSlot, normalizeClass, toDisplayString, createCommentVNode, createBlock, withCtx, resolveDynamicComponent, createVNode, Transition, withDirectives, vShow } from 'vue';\n\nvar script$1 = {\n name: 'BasePanel',\n \"extends\": BaseComponent,\n props: {\n header: String,\n toggleable: Boolean,\n collapsed: Boolean,\n toggleButtonProps: {\n type: Object,\n \"default\": function _default() {\n return {\n severity: 'secondary',\n text: true,\n rounded: true\n };\n }\n }\n },\n style: PanelStyle,\n provide: function provide() {\n return {\n $pcPanel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Panel',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:collapsed', 'toggle'],\n data: function data() {\n return {\n id: this.$attrs.id,\n d_collapsed: this.collapsed\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n collapsed: function collapsed(newValue) {\n this.d_collapsed = newValue;\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n },\n methods: {\n toggle: function toggle(event) {\n this.d_collapsed = !this.d_collapsed;\n this.$emit('update:collapsed', this.d_collapsed);\n this.$emit('toggle', {\n originalEvent: event,\n value: this.d_collapsed\n });\n },\n onKeyDown: function onKeyDown(event) {\n if (event.code === 'Enter' || event.code === 'NumpadEnter' || event.code === 'Space') {\n this.toggle(event);\n event.preventDefault();\n }\n }\n },\n computed: {\n buttonAriaLabel: function buttonAriaLabel() {\n return this.toggleButtonProps && this.toggleButtonProps.ariaLabel ? this.toggleButtonProps.ariaLabel : this.header;\n }\n },\n components: {\n PlusIcon: PlusIcon,\n MinusIcon: MinusIcon,\n Button: Button\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1 = [\"id\"];\nvar _hoisted_2 = [\"id\", \"aria-labelledby\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_Button = resolveComponent(\"Button\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('header')\n }, _ctx.ptm('header')), [renderSlot(_ctx.$slots, \"header\", {\n id: $data.id + '_header',\n \"class\": normalizeClass(_ctx.cx('title'))\n }, function () {\n return [_ctx.header ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n id: $data.id + '_header',\n \"class\": _ctx.cx('title')\n }, _ctx.ptm('title')), toDisplayString(_ctx.header), 17, _hoisted_1)) : createCommentVNode(\"\", true)];\n }), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('headerActions')\n }, _ctx.ptm('headerActions')), [renderSlot(_ctx.$slots, \"icons\"), _ctx.toggleable ? (openBlock(), createBlock(_component_Button, mergeProps({\n key: 0,\n id: $data.id + '_header',\n \"class\": _ctx.cx('pcToggleButton'),\n \"aria-label\": $options.buttonAriaLabel,\n \"aria-controls\": $data.id + '_content',\n \"aria-expanded\": !$data.d_collapsed,\n unstyled: _ctx.unstyled,\n onClick: $options.toggle,\n onKeydown: $options.onKeyDown\n }, _ctx.toggleButtonProps, {\n pt: _ctx.ptm('pcToggleButton')\n }), {\n icon: withCtx(function (slotProps) {\n return [renderSlot(_ctx.$slots, _ctx.$slots.toggleicon ? 'toggleicon' : 'togglericon', {\n collapsed: $data.d_collapsed\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent($data.d_collapsed ? 'PlusIcon' : 'MinusIcon'), mergeProps({\n \"class\": slotProps[\"class\"]\n }, _ctx.ptm('pcToggleButton')['icon']), null, 16, [\"class\"]))];\n })];\n }),\n _: 3\n }, 16, [\"id\", \"class\", \"aria-label\", \"aria-controls\", \"aria-expanded\", \"unstyled\", \"onClick\", \"onKeydown\", \"pt\"])) : createCommentVNode(\"\", true)], 16)], 16), createVNode(Transition, mergeProps({\n name: \"p-toggleable-content\"\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [withDirectives(createElementVNode(\"div\", mergeProps({\n id: $data.id + '_content',\n \"class\": _ctx.cx('contentContainer'),\n role: \"region\",\n \"aria-labelledby\": $data.id + '_header'\n }, _ctx.ptm('contentContainer')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('content')\n }, _ctx.ptm('content')), [renderSlot(_ctx.$slots, \"default\")], 16), _ctx.$slots.footer ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('footer')\n }, _ctx.ptm('footer')), [renderSlot(_ctx.$slots, \"footer\")], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_2), [[vShow, !$data.d_collapsed]])];\n }),\n _: 3\n }, 16)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-tieredmenu {\\n background: \".concat(dt('tieredmenu.background'), \";\\n color: \").concat(dt('tieredmenu.color'), \";\\n border: 1px solid \").concat(dt('tieredmenu.border.color'), \";\\n border-radius: \").concat(dt('tieredmenu.border.radius'), \";\\n min-width: 12.5rem;\\n}\\n\\n.p-tieredmenu-root-list,\\n.p-tieredmenu-submenu {\\n margin: 0;\\n padding: \").concat(dt('tieredmenu.list.padding'), \";\\n list-style: none;\\n outline: 0 none;\\n display: flex;\\n flex-direction: column;\\n gap: \").concat(dt('tieredmenu.list.gap'), \";\\n}\\n\\n.p-tieredmenu-submenu {\\n position: absolute;\\n min-width: 100%;\\n z-index: 1;\\n background: \").concat(dt('tieredmenu.background'), \";\\n color: \").concat(dt('tieredmenu.color'), \";\\n border: 1px solid \").concat(dt('tieredmenu.border.color'), \";\\n border-radius: \").concat(dt('tieredmenu.border.radius'), \";\\n box-shadow: \").concat(dt('tieredmenu.shadow'), \";\\n}\\n\\n.p-tieredmenu-item {\\n position: relative;\\n}\\n\\n.p-tieredmenu-item-content {\\n transition: background \").concat(dt('tieredmenu.transition.duration'), \", color \").concat(dt('tieredmenu.transition.duration'), \";\\n border-radius: \").concat(dt('tieredmenu.item.border.radius'), \";\\n color: \").concat(dt('tieredmenu.item.color'), \";\\n}\\n\\n.p-tieredmenu-item-link {\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n text-decoration: none;\\n overflow: hidden;\\n position: relative;\\n color: inherit;\\n padding: \").concat(dt('tieredmenu.item.padding'), \";\\n gap: \").concat(dt('tieredmenu.item.gap'), \";\\n user-select: none;\\n outline: 0 none;\\n}\\n\\n.p-tieredmenu-item-label {\\n line-height: 1;\\n}\\n\\n.p-tieredmenu-item-icon {\\n color: \").concat(dt('tieredmenu.item.icon.color'), \";\\n}\\n\\n.p-tieredmenu-submenu-icon {\\n color: \").concat(dt('tieredmenu.submenu.icon.color'), \";\\n margin-left: auto;\\n font-size: \").concat(dt('tieredmenu.submenu.icon.size'), \";\\n width: \").concat(dt('tieredmenu.submenu.icon.size'), \";\\n height: \").concat(dt('tieredmenu.submenu.icon.size'), \";\\n}\\n\\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content {\\n color: \").concat(dt('tieredmenu.item.focus.color'), \";\\n background: \").concat(dt('tieredmenu.item.focus.background'), \";\\n}\\n\\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content .p-tieredmenu-item-icon {\\n color: \").concat(dt('tieredmenu.item.icon.focus.color'), \";\\n}\\n\\n.p-tieredmenu-item.p-focus > .p-tieredmenu-item-content .p-tieredmenu-submenu-icon {\\n color: \").concat(dt('tieredmenu.submenu.icon.focus.color'), \";\\n}\\n\\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover {\\n color: \").concat(dt('tieredmenu.item.focus.color'), \";\\n background: \").concat(dt('tieredmenu.item.focus.background'), \";\\n}\\n\\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover .p-tieredmenu-item-icon {\\n color: \").concat(dt('tieredmenu.item.icon.focus.color'), \";\\n}\\n\\n.p-tieredmenu-item:not(.p-disabled) > .p-tieredmenu-item-content:hover .p-tieredmenu-submenu-icon {\\n color: \").concat(dt('tieredmenu.submenu.icon.focus.color'), \";\\n}\\n\\n.p-tieredmenu-item-active > .p-tieredmenu-item-content {\\n color: \").concat(dt('tieredmenu.item.active.color'), \";\\n background: \").concat(dt('tieredmenu.item.active.background'), \";\\n}\\n\\n.p-tieredmenu-item-active > .p-tieredmenu-item-content .p-tieredmenu-item-icon {\\n color: \").concat(dt('tieredmenu.item.icon.active.color'), \";\\n}\\n\\n.p-tieredmenu-item-active > .p-tieredmenu-item-content .p-tieredmenu-submenu-icon {\\n color: \").concat(dt('tieredmenu.submenu.icon.active.color'), \";\\n}\\n\\n.p-tieredmenu-separator {\\n border-top: 1px solid \").concat(dt('tieredmenu.separator.border.color'), \";\\n}\\n\\n.p-tieredmenu-overlay {\\n box-shadow: \").concat(dt('tieredmenu.shadow'), \";\\n}\\n\\n.p-tieredmenu-enter-from,\\n.p-tieredmenu-leave-active {\\n opacity: 0;\\n}\\n\\n.p-tieredmenu-enter-active {\\n transition: opacity 250ms;\\n}\\n\");\n};\nvar inlineStyles = {\n submenu: function submenu(_ref2) {\n var instance = _ref2.instance,\n processedItem = _ref2.processedItem;\n return {\n display: instance.isItemActive(processedItem) ? 'flex' : 'none'\n };\n }\n};\nvar classes = {\n root: function root(_ref3) {\n _ref3.instance;\n var props = _ref3.props;\n return ['p-tieredmenu p-component', {\n 'p-tieredmenu-overlay': props.popup\n }];\n },\n start: 'p-tieredmenu-start',\n rootList: 'p-tieredmenu-root-list',\n item: function item(_ref4) {\n var instance = _ref4.instance,\n processedItem = _ref4.processedItem;\n return ['p-tieredmenu-item', {\n 'p-tieredmenu-item-active': instance.isItemActive(processedItem),\n 'p-focus': instance.isItemFocused(processedItem),\n 'p-disabled': instance.isItemDisabled(processedItem)\n }];\n },\n itemContent: 'p-tieredmenu-item-content',\n itemLink: 'p-tieredmenu-item-link',\n itemIcon: 'p-tieredmenu-item-icon',\n itemLabel: 'p-tieredmenu-item-label',\n submenuIcon: 'p-tieredmenu-submenu-icon',\n submenu: 'p-tieredmenu-submenu',\n separator: 'p-tieredmenu-separator',\n end: 'p-tieredmenu-end'\n};\nvar TieredMenuStyle = BaseStyle.extend({\n name: 'tieredmenu',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { TieredMenuStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId, ConnectedOverlayScrollHandler } from '@primevue/core/utils';\nimport { nestedPosition, focus, findSingle, addStyle, absolutePosition, getOuterWidth, isTouchDevice } from '@primeuix/utils/dom';\nimport { resolve, isNotEmpty, isPrintableCharacter, isEmpty, findLastIndex } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TieredMenuStyle from 'primevue/tieredmenu/style';\nimport AngleRightIcon from '@primevue/icons/angleright';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps, resolveComponent, resolveDirective, openBlock, createBlock, Transition, withCtx, createElementBlock, Fragment, renderList, createElementVNode, withDirectives, resolveDynamicComponent, normalizeClass, createCommentVNode, toDisplayString, normalizeStyle, createVNode, renderSlot } from 'vue';\n\nvar script$2 = {\n name: 'BaseTieredMenu',\n \"extends\": BaseComponent,\n props: {\n popup: {\n type: Boolean,\n \"default\": false\n },\n model: {\n type: Array,\n \"default\": null\n },\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n autoZIndex: {\n type: Boolean,\n \"default\": true\n },\n baseZIndex: {\n type: Number,\n \"default\": 0\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: TieredMenuStyle,\n provide: function provide() {\n return {\n $pcTieredMenu: this,\n $parentInstance: this\n };\n }\n};\n\nvar script$1 = {\n name: 'TieredMenuSub',\n hostName: 'TieredMenu',\n \"extends\": BaseComponent,\n emits: ['item-click', 'item-mouseenter', 'item-mousemove'],\n container: null,\n props: {\n menuId: {\n type: String,\n \"default\": null\n },\n focusedItemId: {\n type: String,\n \"default\": null\n },\n items: {\n type: Array,\n \"default\": null\n },\n visible: {\n type: Boolean,\n \"default\": false\n },\n level: {\n type: Number,\n \"default\": 0\n },\n templates: {\n type: Object,\n \"default\": null\n },\n activeItemPath: {\n type: Object,\n \"default\": null\n },\n tabindex: {\n type: Number,\n \"default\": 0\n }\n },\n methods: {\n getItemId: function getItemId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key);\n },\n getItemKey: function getItemKey(processedItem) {\n return this.getItemId(processedItem);\n },\n getItemProp: function getItemProp(processedItem, name, params) {\n return processedItem && processedItem.item ? resolve(processedItem.item[name], params) : undefined;\n },\n getItemLabel: function getItemLabel(processedItem) {\n return this.getItemProp(processedItem, 'label');\n },\n getItemLabelId: function getItemLabelId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key, \"_label\");\n },\n getPTOptions: function getPTOptions(processedItem, index, key) {\n return this.ptm(key, {\n context: {\n item: processedItem.item,\n index: index,\n active: this.isItemActive(processedItem),\n focused: this.isItemFocused(processedItem),\n disabled: this.isItemDisabled(processedItem)\n }\n });\n },\n isItemActive: function isItemActive(processedItem) {\n return this.activeItemPath.some(function (path) {\n return path.key === processedItem.key;\n });\n },\n isItemVisible: function isItemVisible(processedItem) {\n return this.getItemProp(processedItem, 'visible') !== false;\n },\n isItemDisabled: function isItemDisabled(processedItem) {\n return this.getItemProp(processedItem, 'disabled');\n },\n isItemFocused: function isItemFocused(processedItem) {\n return this.focusedItemId === this.getItemId(processedItem);\n },\n isItemGroup: function isItemGroup(processedItem) {\n return isNotEmpty(processedItem.items);\n },\n onEnter: function onEnter() {\n nestedPosition(this.container, this.level);\n },\n onItemClick: function onItemClick(event, processedItem) {\n this.getItemProp(processedItem, 'command', {\n originalEvent: event,\n item: processedItem.item\n });\n this.$emit('item-click', {\n originalEvent: event,\n processedItem: processedItem,\n isFocus: true\n });\n },\n onItemMouseEnter: function onItemMouseEnter(event, processedItem) {\n this.$emit('item-mouseenter', {\n originalEvent: event,\n processedItem: processedItem\n });\n },\n onItemMouseMove: function onItemMouseMove(event, processedItem) {\n this.$emit('item-mousemove', {\n originalEvent: event,\n processedItem: processedItem\n });\n },\n getAriaSetSize: function getAriaSetSize() {\n var _this = this;\n return this.items.filter(function (processedItem) {\n return _this.isItemVisible(processedItem) && !_this.getItemProp(processedItem, 'separator');\n }).length;\n },\n getAriaPosInset: function getAriaPosInset(index) {\n var _this2 = this;\n return index - this.items.slice(0, index).filter(function (processedItem) {\n return _this2.isItemVisible(processedItem) && _this2.getItemProp(processedItem, 'separator');\n }).length + 1;\n },\n getMenuItemProps: function getMenuItemProps(processedItem, index) {\n return {\n action: mergeProps({\n \"class\": this.cx('itemLink'),\n tabindex: -1,\n 'aria-hidden': true\n }, this.getPTOptions(processedItem, index, 'itemLink')),\n icon: mergeProps({\n \"class\": [this.cx('itemIcon'), this.getItemProp(processedItem, 'icon')]\n }, this.getPTOptions(processedItem, index, 'itemIcon')),\n label: mergeProps({\n \"class\": this.cx('itemLabel')\n }, this.getPTOptions(processedItem, index, 'itemLabel')),\n submenuicon: mergeProps({\n \"class\": this.cx('submenuIcon')\n }, this.getPTOptions(processedItem, index, 'submenuIcon'))\n };\n },\n containerRef: function containerRef(el) {\n this.container = el;\n }\n },\n components: {\n AngleRightIcon: AngleRightIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1$1 = [\"tabindex\"];\nvar _hoisted_2 = [\"id\", \"aria-label\", \"aria-disabled\", \"aria-expanded\", \"aria-haspopup\", \"aria-level\", \"aria-setsize\", \"aria-posinset\", \"data-p-active\", \"data-p-focused\", \"data-p-disabled\"];\nvar _hoisted_3 = [\"onClick\", \"onMouseenter\", \"onMousemove\"];\nvar _hoisted_4 = [\"href\", \"target\"];\nvar _hoisted_5 = [\"id\"];\nvar _hoisted_6 = [\"id\"];\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_AngleRightIcon = resolveComponent(\"AngleRightIcon\");\n var _component_TieredMenuSub = resolveComponent(\"TieredMenuSub\", true);\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createBlock(Transition, mergeProps({\n name: \"p-tieredmenu\",\n onEnter: $options.onEnter\n }, _ctx.ptm('menu.transition')), {\n \"default\": withCtx(function () {\n return [($props.level === 0 ? true : $props.visible) ? (openBlock(), createElementBlock(\"ul\", mergeProps({\n key: 0,\n ref: $options.containerRef,\n \"class\": $props.level === 0 ? _ctx.cx('rootList') : _ctx.cx('submenu'),\n tabindex: $props.tabindex\n }, $props.level === 0 ? _ctx.ptm('rootList') : _ctx.ptm('submenu')), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function (processedItem, index) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getItemKey(processedItem)\n }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n id: $options.getItemId(processedItem),\n style: $options.getItemProp(processedItem, 'style'),\n \"class\": [_ctx.cx('item', {\n processedItem: processedItem\n }), $options.getItemProp(processedItem, 'class')],\n role: \"menuitem\",\n \"aria-label\": $options.getItemLabel(processedItem),\n \"aria-disabled\": $options.isItemDisabled(processedItem) || undefined,\n \"aria-expanded\": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : undefined,\n \"aria-haspopup\": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, 'to') ? 'menu' : undefined,\n \"aria-level\": $props.level + 1,\n \"aria-setsize\": $options.getAriaSetSize(),\n \"aria-posinset\": $options.getAriaPosInset(index),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'item'), {\n \"data-p-active\": $options.isItemActive(processedItem),\n \"data-p-focused\": $options.isItemFocused(processedItem),\n \"data-p-disabled\": $options.isItemDisabled(processedItem)\n }), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('itemContent'),\n onClick: function onClick($event) {\n return $options.onItemClick($event, processedItem);\n },\n onMouseenter: function onMouseenter($event) {\n return $options.onItemMouseEnter($event, processedItem);\n },\n onMousemove: function onMousemove($event) {\n return $options.onItemMouseMove($event, processedItem);\n },\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemContent')), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock(\"a\", mergeProps({\n key: 0,\n href: $options.getItemProp(processedItem, 'url'),\n \"class\": _ctx.cx('itemLink'),\n target: $options.getItemProp(processedItem, 'target'),\n tabindex: \"-1\",\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemLink')), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), {\n key: 0,\n item: processedItem.item,\n \"class\": normalizeClass(_ctx.cx('itemIcon'))\n }, null, 8, [\"item\", \"class\"])) : $options.getItemProp(processedItem, 'icon') ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n \"class\": [_ctx.cx('itemIcon'), $options.getItemProp(processedItem, 'icon')],\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemIcon')), null, 16)) : createCommentVNode(\"\", true), createElementVNode(\"span\", mergeProps({\n id: $options.getItemLabelId(processedItem),\n \"class\": _ctx.cx('itemLabel'),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'itemLabel')), toDisplayString($options.getItemLabel(processedItem)), 17, _hoisted_5), $options.getItemProp(processedItem, 'items') ? (openBlock(), createElementBlock(Fragment, {\n key: 2\n }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), mergeProps({\n key: 0,\n \"class\": _ctx.cx('submenuIcon'),\n active: $options.isItemActive(processedItem),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'submenuIcon')), null, 16, [\"class\", \"active\"])) : (openBlock(), createBlock(_component_AngleRightIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('submenuIcon'),\n ref_for: true\n }, $options.getPTOptions(processedItem, index, 'submenuIcon')), null, 16, [\"class\"]))], 64)) : createCommentVNode(\"\", true)], 16, _hoisted_4)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), {\n key: 1,\n item: processedItem.item,\n hasSubmenu: $options.getItemProp(processedItem, 'items'),\n label: $options.getItemLabel(processedItem),\n props: $options.getMenuItemProps(processedItem, index)\n }, null, 8, [\"item\", \"hasSubmenu\", \"label\", \"props\"]))], 16, _hoisted_3), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_TieredMenuSub, {\n key: 0,\n id: $options.getItemId(processedItem) + '_list',\n style: normalizeStyle(_ctx.sx('submenu', true, {\n processedItem: processedItem\n })),\n \"aria-labelledby\": $options.getItemLabelId(processedItem),\n role: \"menu\",\n menuId: $props.menuId,\n focusedItemId: $props.focusedItemId,\n items: processedItem.items,\n templates: $props.templates,\n activeItemPath: $props.activeItemPath,\n level: $props.level + 1,\n visible: $options.isItemActive(processedItem) && $options.isItemGroup(processedItem),\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onItemClick: _cache[0] || (_cache[0] = function ($event) {\n return _ctx.$emit('item-click', $event);\n }),\n onItemMouseenter: _cache[1] || (_cache[1] = function ($event) {\n return _ctx.$emit('item-mouseenter', $event);\n }),\n onItemMousemove: _cache[2] || (_cache[2] = function ($event) {\n return _ctx.$emit('item-mousemove', $event);\n })\n }, null, 8, [\"id\", \"style\", \"aria-labelledby\", \"menuId\", \"focusedItemId\", \"items\", \"templates\", \"activeItemPath\", \"level\", \"visible\", \"pt\", \"unstyled\"])) : createCommentVNode(\"\", true)], 16, _hoisted_2)) : createCommentVNode(\"\", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n id: $options.getItemId(processedItem),\n style: $options.getItemProp(processedItem, 'style'),\n \"class\": [_ctx.cx('separator'), $options.getItemProp(processedItem, 'class')],\n role: \"separator\",\n ref_for: true\n }, _ctx.ptm('separator')), null, 16, _hoisted_6)) : createCommentVNode(\"\", true)], 64);\n }), 128))], 16, _hoisted_1$1)) : createCommentVNode(\"\", true)];\n }),\n _: 1\n }, 16, [\"onEnter\"]);\n}\n\nscript$1.render = render$1;\n\nvar script = {\n name: 'TieredMenu',\n \"extends\": script$2,\n inheritAttrs: false,\n emits: ['focus', 'blur', 'before-show', 'before-hide', 'hide', 'show'],\n outsideClickListener: null,\n scrollHandler: null,\n resizeListener: null,\n target: null,\n container: null,\n menubar: null,\n searchTimeout: null,\n searchValue: null,\n data: function data() {\n return {\n id: this.$attrs.id,\n focused: false,\n focusedItemInfo: {\n index: -1,\n level: 0,\n parentKey: ''\n },\n activeItemPath: [],\n visible: !this.popup,\n submenuVisible: false,\n dirty: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n activeItemPath: function activeItemPath(newPath) {\n if (!this.popup) {\n if (isNotEmpty(newPath)) {\n this.bindOutsideClickListener();\n this.bindResizeListener();\n } else {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n }\n }\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n if (this.container && this.autoZIndex) {\n ZIndex.clear(this.container);\n }\n this.target = null;\n this.container = null;\n },\n methods: {\n getItemProp: function getItemProp(item, name) {\n return item ? resolve(item[name]) : undefined;\n },\n getItemLabel: function getItemLabel(item) {\n return this.getItemProp(item, 'label');\n },\n isItemDisabled: function isItemDisabled(item) {\n return this.getItemProp(item, 'disabled');\n },\n isItemVisible: function isItemVisible(item) {\n return this.getItemProp(item, 'visible') !== false;\n },\n isItemGroup: function isItemGroup(item) {\n return isNotEmpty(this.getItemProp(item, 'items'));\n },\n isItemSeparator: function isItemSeparator(item) {\n return this.getItemProp(item, 'separator');\n },\n getProccessedItemLabel: function getProccessedItemLabel(processedItem) {\n return processedItem ? this.getItemLabel(processedItem.item) : undefined;\n },\n isProccessedItemGroup: function isProccessedItemGroup(processedItem) {\n return processedItem && isNotEmpty(processedItem.items);\n },\n toggle: function toggle(event) {\n this.visible ? this.hide(event, true) : this.show(event);\n },\n show: function show(event, isFocus) {\n if (this.popup) {\n this.$emit('before-show');\n this.visible = true;\n this.target = this.target || event.currentTarget;\n this.relatedTarget = event.relatedTarget || null;\n }\n isFocus && focus(this.menubar);\n },\n hide: function hide(event, isFocus) {\n if (this.popup) {\n this.$emit('before-hide');\n this.visible = false;\n }\n this.activeItemPath = [];\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n isFocus && focus(this.relatedTarget || this.target || this.menubar);\n this.dirty = false;\n },\n onFocus: function onFocus(event) {\n this.focused = true;\n if (!this.popup) {\n this.focusedItemInfo = this.focusedItemInfo.index !== -1 ? this.focusedItemInfo : {\n index: this.findFirstFocusedItemIndex(),\n level: 0,\n parentKey: ''\n };\n }\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.focused = false;\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n this.searchValue = '';\n this.dirty = false;\n this.$emit('blur', event);\n },\n onKeyDown: function onKeyDown(event) {\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n var metaKey = event.metaKey || event.ctrlKey;\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeftKey(event);\n break;\n case 'ArrowRight':\n this.onArrowRightKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'Space':\n this.onSpaceKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n //NOOP\n break;\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n this.searchItems(event, event.key);\n }\n break;\n }\n },\n onItemChange: function onItemChange(event) {\n var processedItem = event.processedItem,\n isFocus = event.isFocus;\n if (isEmpty(processedItem)) return;\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey,\n items = processedItem.items;\n var grouped = isNotEmpty(items);\n var activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== parentKey && p.parentKey !== key;\n });\n if (grouped) {\n activeItemPath.push(processedItem);\n this.submenuVisible = true;\n }\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n this.activeItemPath = activeItemPath;\n grouped && (this.dirty = true);\n isFocus && focus(this.menubar);\n },\n onOverlayClick: function onOverlayClick(event) {\n OverlayEventBus.emit('overlay-click', {\n originalEvent: event,\n target: this.target\n });\n },\n onItemClick: function onItemClick(event) {\n var originalEvent = event.originalEvent,\n processedItem = event.processedItem;\n var grouped = this.isProccessedItemGroup(processedItem);\n var root = isEmpty(processedItem.parent);\n var selected = this.isSelected(processedItem);\n if (selected) {\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey;\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return key !== p.key && key.startsWith(p.key);\n });\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n this.dirty = !root;\n focus(this.menubar);\n } else {\n if (grouped) {\n this.onItemChange(event);\n } else {\n var rootProcessedItem = root ? processedItem : this.activeItemPath.find(function (p) {\n return p.parentKey === '';\n });\n this.hide(originalEvent);\n this.changeFocusedItemIndex(originalEvent, rootProcessedItem ? rootProcessedItem.index : -1);\n focus(this.menubar);\n }\n }\n },\n onItemMouseEnter: function onItemMouseEnter(event) {\n if (this.dirty) {\n this.onItemChange(event);\n }\n },\n onItemMouseMove: function onItemMouseMove(event) {\n if (this.focused) {\n this.changeFocusedItemIndex(event, event.processedItem.index);\n }\n },\n onArrowDownKey: function onArrowDownKey(event) {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n },\n onArrowUpKey: function onArrowUpKey(event) {\n if (event.altKey) {\n if (this.focusedItemInfo.index !== -1) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n }\n this.popup && this.hide(event, true);\n event.preventDefault();\n } else {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n }\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var _this = this;\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var parentItem = this.activeItemPath.find(function (p) {\n return p.key === processedItem.parentKey;\n });\n var root = isEmpty(processedItem.parent);\n if (!root) {\n this.focusedItemInfo = {\n index: -1,\n parentKey: parentItem ? parentItem.parentKey : ''\n };\n this.searchValue = '';\n this.onArrowDownKey(event);\n }\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== _this.focusedItemInfo.parentKey;\n });\n event.preventDefault();\n },\n onArrowRightKey: function onArrowRightKey(event) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n if (grouped) {\n this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n this.focusedItemInfo = {\n index: -1,\n parentKey: processedItem.key\n };\n this.searchValue = '';\n this.onArrowDownKey(event);\n }\n event.preventDefault();\n },\n onHomeKey: function onHomeKey(event) {\n this.changeFocusedItemIndex(event, this.findFirstItemIndex());\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n this.changeFocusedItemIndex(event, this.findLastItemIndex());\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var element = findSingle(this.menubar, \"li[id=\\\"\".concat(\"\".concat(this.focusedItemId), \"\\\"]\"));\n var anchorElement = element && findSingle(element, '[data-pc-section=\"itemlink\"]');\n anchorElement ? anchorElement.click() : element && element.click();\n if (!this.popup) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex());\n }\n }\n event.preventDefault();\n },\n onSpaceKey: function onSpaceKey(event) {\n this.onEnterKey(event);\n },\n onEscapeKey: function onEscapeKey(event) {\n if (this.popup || this.focusedItemInfo.level !== 0) {\n var _focusedItemInfo = this.focusedItemInfo;\n this.hide(event, false);\n this.focusedItemInfo = {\n index: Number(_focusedItemInfo.parentKey.split('_')[0]),\n level: 0,\n parentKey: ''\n };\n this.popup && focus(this.target);\n }\n event.preventDefault();\n },\n onTabKey: function onTabKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n }\n this.hide();\n },\n onEnter: function onEnter(el) {\n if (this.autoZIndex) {\n ZIndex.set('menu', el, this.baseZIndex + this.$primevue.config.zIndex.menu);\n }\n addStyle(el, {\n position: 'absolute',\n top: '0',\n left: '0'\n });\n this.alignOverlay();\n focus(this.menubar);\n this.scrollInView();\n },\n onAfterEnter: function onAfterEnter() {\n this.bindOutsideClickListener();\n this.bindScrollListener();\n this.bindResizeListener();\n this.$emit('show');\n },\n onLeave: function onLeave() {\n this.unbindOutsideClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n this.$emit('hide');\n this.container = null;\n this.dirty = false;\n },\n onAfterLeave: function onAfterLeave(el) {\n if (this.autoZIndex) {\n ZIndex.clear(el);\n }\n },\n alignOverlay: function alignOverlay() {\n absolutePosition(this.container, this.target);\n var targetWidth = getOuterWidth(this.target);\n if (targetWidth > getOuterWidth(this.container)) {\n this.container.style.minWidth = getOuterWidth(this.target) + 'px';\n }\n },\n bindOutsideClickListener: function bindOutsideClickListener() {\n var _this2 = this;\n if (!this.outsideClickListener) {\n this.outsideClickListener = function (event) {\n var isOutsideContainer = _this2.container && !_this2.container.contains(event.target);\n var isOutsideTarget = _this2.popup ? !(_this2.target && (_this2.target === event.target || _this2.target.contains(event.target))) : true;\n if (isOutsideContainer && isOutsideTarget) {\n _this2.hide();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n },\n unbindOutsideClickListener: function unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n },\n bindScrollListener: function bindScrollListener() {\n var _this3 = this;\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, function (event) {\n _this3.hide(event, true);\n });\n }\n this.scrollHandler.bindScrollListener();\n },\n unbindScrollListener: function unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n },\n bindResizeListener: function bindResizeListener() {\n var _this4 = this;\n if (!this.resizeListener) {\n this.resizeListener = function (event) {\n if (!isTouchDevice()) {\n _this4.hide(event, true);\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n },\n unbindResizeListener: function unbindResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n },\n isItemMatched: function isItemMatched(processedItem) {\n var _this$getProccessedIt;\n return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase()));\n },\n isValidItem: function isValidItem(processedItem) {\n return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item);\n },\n isValidSelectedItem: function isValidSelectedItem(processedItem) {\n return this.isValidItem(processedItem) && this.isSelected(processedItem);\n },\n isSelected: function isSelected(processedItem) {\n return this.activeItemPath.some(function (p) {\n return p.key === processedItem.key;\n });\n },\n findFirstItemIndex: function findFirstItemIndex() {\n var _this5 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this5.isValidItem(processedItem);\n });\n },\n findLastItemIndex: function findLastItemIndex() {\n var _this6 = this;\n return findLastIndex(this.visibleItems, function (processedItem) {\n return _this6.isValidItem(processedItem);\n });\n },\n findNextItemIndex: function findNextItemIndex(index) {\n var _this7 = this;\n var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function (processedItem) {\n return _this7.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index;\n },\n findPrevItemIndex: function findPrevItemIndex(index) {\n var _this8 = this;\n var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function (processedItem) {\n return _this8.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex : index;\n },\n findSelectedItemIndex: function findSelectedItemIndex() {\n var _this9 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this9.isValidSelectedItem(processedItem);\n });\n },\n findFirstFocusedItemIndex: function findFirstFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex;\n },\n findLastFocusedItemIndex: function findLastFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex;\n },\n searchItems: function searchItems(event, _char) {\n var _this10 = this;\n this.searchValue = (this.searchValue || '') + _char;\n var itemIndex = -1;\n var matched = false;\n if (this.focusedItemInfo.index !== -1) {\n itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n });\n itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n }) : itemIndex + this.focusedItemInfo.index;\n } else {\n itemIndex = this.visibleItems.findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n });\n }\n if (itemIndex !== -1) {\n matched = true;\n }\n if (itemIndex === -1 && this.focusedItemInfo.index === -1) {\n itemIndex = this.findFirstFocusedItemIndex();\n }\n if (itemIndex !== -1) {\n this.changeFocusedItemIndex(event, itemIndex);\n }\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(function () {\n _this10.searchValue = '';\n _this10.searchTimeout = null;\n }, 500);\n return matched;\n },\n changeFocusedItemIndex: function changeFocusedItemIndex(event, index) {\n if (this.focusedItemInfo.index !== index) {\n this.focusedItemInfo.index = index;\n this.scrollInView();\n }\n },\n scrollInView: function scrollInView() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n var id = index !== -1 ? \"\".concat(this.id, \"_\").concat(index) : this.focusedItemId;\n var element = findSingle(this.menubar, \"li[id=\\\"\".concat(id, \"\\\"]\"));\n if (element) {\n element.scrollIntoView && element.scrollIntoView({\n block: 'nearest',\n inline: 'start'\n });\n }\n },\n createProcessedItems: function createProcessedItems(items) {\n var _this11 = this;\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parentKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var processedItems = [];\n items && items.forEach(function (item, index) {\n var key = (parentKey !== '' ? parentKey + '_' : '') + index;\n var newItem = {\n item: item,\n index: index,\n level: level,\n key: key,\n parent: parent,\n parentKey: parentKey\n };\n newItem['items'] = _this11.createProcessedItems(item.items, level + 1, newItem, key);\n processedItems.push(newItem);\n });\n return processedItems;\n },\n containerRef: function containerRef(el) {\n this.container = el;\n },\n menubarRef: function menubarRef(el) {\n this.menubar = el ? el.$el : undefined;\n }\n },\n computed: {\n processedItems: function processedItems() {\n return this.createProcessedItems(this.model || []);\n },\n visibleItems: function visibleItems() {\n var _this12 = this;\n var processedItem = this.activeItemPath.find(function (p) {\n return p.key === _this12.focusedItemInfo.parentKey;\n });\n return processedItem ? processedItem.items : this.processedItems;\n },\n focusedItemId: function focusedItemId() {\n return this.focusedItemInfo.index !== -1 ? \"\".concat(this.id).concat(isNotEmpty(this.focusedItemInfo.parentKey) ? '_' + this.focusedItemInfo.parentKey : '', \"_\").concat(this.focusedItemInfo.index) : null;\n }\n },\n components: {\n TieredMenuSub: script$1,\n Portal: Portal\n }\n};\n\nvar _hoisted_1 = [\"id\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_TieredMenuSub = resolveComponent(\"TieredMenuSub\");\n var _component_Portal = resolveComponent(\"Portal\");\n return openBlock(), createBlock(_component_Portal, {\n appendTo: _ctx.appendTo,\n disabled: !_ctx.popup\n }, {\n \"default\": withCtx(function () {\n return [createVNode(Transition, mergeProps({\n name: \"p-connected-overlay\",\n onEnter: $options.onEnter,\n onAfterEnter: $options.onAfterEnter,\n onLeave: $options.onLeave,\n onAfterLeave: $options.onAfterLeave\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [$data.visible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n ref: $options.containerRef,\n id: $data.id,\n \"class\": _ctx.cx('root'),\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments);\n })\n }, _ctx.ptmi('root')), [_ctx.$slots.start ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('start')\n }, _ctx.ptm('start')), [renderSlot(_ctx.$slots, \"start\")], 16)) : createCommentVNode(\"\", true), createVNode(_component_TieredMenuSub, {\n ref: $options.menubarRef,\n id: $data.id + '_list',\n tabindex: !_ctx.disabled ? _ctx.tabindex : -1,\n role: \"menubar\",\n \"aria-label\": _ctx.ariaLabel,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-disabled\": _ctx.disabled || undefined,\n \"aria-orientation\": \"vertical\",\n \"aria-activedescendant\": $data.focused ? $options.focusedItemId : undefined,\n menuId: $data.id,\n focusedItemId: $data.focused ? $options.focusedItemId : undefined,\n items: $options.processedItems,\n templates: _ctx.$slots,\n activeItemPath: $data.activeItemPath,\n level: 0,\n visible: $data.submenuVisible,\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onFocus: $options.onFocus,\n onBlur: $options.onBlur,\n onKeydown: $options.onKeyDown,\n onItemClick: $options.onItemClick,\n onItemMouseenter: $options.onItemMouseEnter,\n onItemMousemove: $options.onItemMouseMove\n }, null, 8, [\"id\", \"tabindex\", \"aria-label\", \"aria-labelledby\", \"aria-disabled\", \"aria-activedescendant\", \"menuId\", \"focusedItemId\", \"items\", \"templates\", \"activeItemPath\", \"visible\", \"pt\", \"unstyled\", \"onFocus\", \"onBlur\", \"onKeydown\", \"onItemClick\", \"onItemMouseenter\", \"onItemMousemove\"]), _ctx.$slots.end ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('end')\n }, _ctx.ptm('end')), [renderSlot(_ctx.$slots, \"end\")], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_1)) : createCommentVNode(\"\", true)];\n }),\n _: 3\n }, 16, [\"onEnter\", \"onAfterEnter\", \"onLeave\", \"onAfterLeave\"])];\n }),\n _: 3\n }, 8, [\"appendTo\", \"disabled\"]);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-splitbutton {\\n display: inline-flex;\\n position: relative;\\n border-radius: \".concat(dt('splitbutton.border.radius'), \";\\n}\\n\\n.p-splitbutton-button {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n border-right: 0 none;\\n}\\n\\n.p-splitbutton-button:focus-visible,\\n.p-splitbutton-dropdown:focus-visible {\\n z-index: 1;\\n}\\n\\n.p-splitbutton-button:not(:disabled):hover,\\n.p-splitbutton-button:not(:disabled):active {\\n border-right: 0 none;\\n}\\n\\n.p-splitbutton-dropdown {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n}\\n\\n.p-splitbutton .p-menu {\\n min-width: 100%;\\n}\\n\\n.p-splitbutton-fluid {\\n display: flex;\\n}\\n\\n.p-splitbutton-rounded .p-splitbutton-dropdown {\\n border-top-right-radius: \").concat(dt('splitbutton.rounded.border.radius'), \";\\n border-bottom-right-radius: \").concat(dt('splitbutton.rounded.border.radius'), \";\\n}\\n\\n.p-splitbutton-rounded .p-splitbutton-button {\\n border-top-left-radius: \").concat(dt('splitbutton.rounded.border.radius'), \";\\n border-bottom-left-radius: \").concat(dt('splitbutton.rounded.border.radius'), \";\\n}\\n\\n.p-splitbutton-raised {\\n box-shadow: \").concat(dt('splitbutton.raised.shadow'), \";\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props;\n return ['p-splitbutton p-component', {\n 'p-splitbutton-raised': props.raised,\n 'p-splitbutton-rounded': props.rounded,\n 'p-splitbutton-fluid': instance.hasFluid\n }];\n },\n pcButton: 'p-splitbutton-button',\n pcDropdown: 'p-splitbutton-dropdown'\n};\nvar SplitButtonStyle = BaseStyle.extend({\n name: 'splitbutton',\n theme: theme,\n classes: classes\n});\n\nexport { SplitButtonStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { isEmpty } from '@primeuix/utils/object';\nimport { UniqueComponentId } from '@primevue/core/utils';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport Button from 'primevue/button';\nimport TieredMenu from 'primevue/tieredmenu';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SplitButtonStyle from 'primevue/splitbutton/style';\nimport { resolveComponent, openBlock, createElementBlock, mergeProps, createVNode, createSlots, withCtx, renderSlot, normalizeClass, createElementVNode, createBlock, resolveDynamicComponent } from 'vue';\n\nvar script$1 = {\n name: 'BaseSplitButton',\n \"extends\": BaseComponent,\n props: {\n label: {\n type: String,\n \"default\": null\n },\n icon: {\n type: String,\n \"default\": null\n },\n model: {\n type: Array,\n \"default\": null\n },\n autoZIndex: {\n type: Boolean,\n \"default\": true\n },\n baseZIndex: {\n type: Number,\n \"default\": 0\n },\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n fluid: {\n type: Boolean,\n \"default\": null\n },\n \"class\": {\n type: null,\n \"default\": null\n },\n style: {\n type: null,\n \"default\": null\n },\n buttonProps: {\n type: null,\n \"default\": null\n },\n menuButtonProps: {\n type: null,\n \"default\": null\n },\n menuButtonIcon: {\n type: String,\n \"default\": undefined\n },\n dropdownIcon: {\n type: String,\n \"default\": undefined\n },\n severity: {\n type: String,\n \"default\": null\n },\n raised: {\n type: Boolean,\n \"default\": false\n },\n rounded: {\n type: Boolean,\n \"default\": false\n },\n text: {\n type: Boolean,\n \"default\": false\n },\n outlined: {\n type: Boolean,\n \"default\": false\n },\n size: {\n type: String,\n \"default\": null\n },\n plain: {\n type: Boolean,\n \"default\": false\n }\n },\n style: SplitButtonStyle,\n provide: function provide() {\n return {\n $pcSplitButton: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'SplitButton',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['click'],\n inject: {\n $pcFluid: {\n \"default\": null\n }\n },\n data: function data() {\n return {\n id: this.$attrs.id,\n isExpanded: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n }\n },\n mounted: function mounted() {\n var _this = this;\n this.id = this.id || UniqueComponentId();\n this.$watch('$refs.menu.visible', function (newValue) {\n _this.isExpanded = newValue;\n });\n },\n methods: {\n onDropdownButtonClick: function onDropdownButtonClick(event) {\n if (event) {\n event.preventDefault();\n }\n this.$refs.menu.toggle({\n currentTarget: this.$el,\n relatedTarget: this.$refs.button.$el\n });\n this.isExpanded = this.$refs.menu.visible;\n },\n onDropdownKeydown: function onDropdownKeydown(event) {\n if (event.code === 'ArrowDown' || event.code === 'ArrowUp') {\n this.onDropdownButtonClick();\n event.preventDefault();\n }\n },\n onDefaultButtonClick: function onDefaultButtonClick(event) {\n if (this.isExpanded) {\n this.$refs.menu.hide(event);\n }\n this.$emit('click', event);\n }\n },\n computed: {\n containerClass: function containerClass() {\n return [this.cx('root'), this[\"class\"]];\n },\n hasFluid: function hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n components: {\n PVSButton: Button,\n PVSMenu: TieredMenu,\n ChevronDownIcon: ChevronDownIcon\n }\n};\n\nvar _hoisted_1 = [\"data-p-severity\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_PVSButton = resolveComponent(\"PVSButton\");\n var _component_PVSMenu = resolveComponent(\"PVSMenu\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": $options.containerClass,\n style: _ctx.style\n }, _ctx.ptmi('root'), {\n \"data-p-severity\": _ctx.severity\n }), [createVNode(_component_PVSButton, mergeProps({\n type: \"button\",\n \"class\": _ctx.cx('pcButton'),\n label: _ctx.label,\n disabled: _ctx.disabled,\n severity: _ctx.severity,\n text: _ctx.text,\n icon: _ctx.icon,\n outlined: _ctx.outlined,\n size: _ctx.size,\n fluid: _ctx.fluid,\n \"aria-label\": _ctx.label,\n onClick: $options.onDefaultButtonClick\n }, _ctx.buttonProps, {\n pt: _ctx.ptm('pcButton'),\n unstyled: _ctx.unstyled\n }), createSlots({\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, \"default\")];\n }),\n _: 2\n }, [_ctx.$slots.icon ? {\n name: \"icon\",\n fn: withCtx(function (slotProps) {\n return [renderSlot(_ctx.$slots, \"icon\", {\n \"class\": normalizeClass(slotProps[\"class\"])\n }, function () {\n return [createElementVNode(\"span\", mergeProps({\n \"class\": [_ctx.icon, slotProps[\"class\"]]\n }, _ctx.ptm('pcButton')['icon'], {\n \"data-pc-section\": \"buttonicon\"\n }), null, 16)];\n })];\n }),\n key: \"0\"\n } : undefined]), 1040, [\"class\", \"label\", \"disabled\", \"severity\", \"text\", \"icon\", \"outlined\", \"size\", \"fluid\", \"aria-label\", \"onClick\", \"pt\", \"unstyled\"]), createVNode(_component_PVSButton, mergeProps({\n ref: \"button\",\n type: \"button\",\n \"class\": _ctx.cx('pcDropdown'),\n disabled: _ctx.disabled,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": $data.isExpanded,\n \"aria-controls\": $data.id + '_overlay',\n onClick: $options.onDropdownButtonClick,\n onKeydown: $options.onDropdownKeydown,\n severity: _ctx.severity,\n text: _ctx.text,\n outlined: _ctx.outlined,\n size: _ctx.size,\n unstyled: _ctx.unstyled\n }, _ctx.menuButtonProps, {\n pt: _ctx.ptm('pcDropdown')\n }), {\n icon: withCtx(function (slotProps) {\n return [renderSlot(_ctx.$slots, _ctx.$slots.dropdownicon ? 'dropdownicon' : 'menubuttonicon', {\n \"class\": normalizeClass(slotProps[\"class\"])\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.menuButtonIcon || _ctx.dropdownIcon ? 'span' : 'ChevronDownIcon'), mergeProps({\n \"class\": [_ctx.dropdownIcon || _ctx.menuButtonIcon, slotProps[\"class\"]]\n }, _ctx.ptm('pcDropdown')['icon'], {\n \"data-pc-section\": \"menubuttonicon\"\n }), null, 16, [\"class\"]))];\n })];\n }),\n _: 3\n }, 16, [\"class\", \"disabled\", \"aria-expanded\", \"aria-controls\", \"onClick\", \"onKeydown\", \"severity\", \"text\", \"outlined\", \"size\", \"unstyled\", \"pt\"]), createVNode(_component_PVSMenu, {\n ref: \"menu\",\n id: $data.id + '_overlay',\n model: _ctx.model,\n popup: true,\n autoZIndex: _ctx.autoZIndex,\n baseZIndex: _ctx.baseZIndex,\n appendTo: _ctx.appendTo,\n unstyled: _ctx.unstyled,\n pt: _ctx.ptm('pcMenu')\n }, createSlots({\n _: 2\n }, [_ctx.$slots.menuitemicon ? {\n name: \"itemicon\",\n fn: withCtx(function (slotProps) {\n return [renderSlot(_ctx.$slots, \"menuitemicon\", {\n item: slotProps.item,\n \"class\": normalizeClass(slotProps[\"class\"])\n })];\n }),\n key: \"0\"\n } : undefined, _ctx.$slots.item ? {\n name: \"item\",\n fn: withCtx(function (slotProps) {\n return [renderSlot(_ctx.$slots, \"item\", {\n item: slotProps.item,\n hasSubmenu: slotProps.hasSubmenu,\n label: slotProps.label,\n props: slotProps.props\n })];\n }),\n key: \"1\"\n } : undefined]), 1032, [\"id\", \"model\", \"autoZIndex\", \"baseZIndex\", \"appendTo\", \"unstyled\", \"pt\"])], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","import {\n useQueueSettingsStore,\n useQueuePendingTaskCountStore\n} from '@/stores/queueStore'\nimport { app } from '@/scripts/app'\nimport { api } from '@/scripts/api'\n\nexport function setupAutoQueueHandler() {\n const queueCountStore = useQueuePendingTaskCountStore()\n const queueSettingsStore = useQueueSettingsStore()\n\n let graphHasChanged = false\n let internalCount = 0 // Use an internal counter here so it is instantly updated when re-queuing\n api.addEventListener('graphChanged', () => {\n if (queueSettingsStore.mode === 'change') {\n if (internalCount) {\n graphHasChanged = true\n } else {\n graphHasChanged = false\n app.queuePrompt(0, queueSettingsStore.batchCount)\n internalCount++\n }\n }\n })\n\n queueCountStore.$subscribe(\n () => {\n internalCount = queueCountStore.count\n if (!internalCount && !app.lastExecutionError) {\n if (\n queueSettingsStore.mode === 'instant' ||\n (queueSettingsStore.mode === 'change' && graphHasChanged)\n ) {\n graphHasChanged = false\n app.queuePrompt(0, queueSettingsStore.batchCount)\n }\n }\n },\n { detached: true }\n )\n}\n","export enum LatentPreviewMethod {\n NoPreviews = 'none',\n Auto = 'auto',\n Latent2RGB = 'latent2rgb',\n TAESD = 'taesd'\n}\n\nexport enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARNING = 'WARNING',\n ERROR = 'ERROR',\n CRITICAL = 'CRITICAL'\n}\n\nexport enum HashFunction {\n MD5 = 'md5',\n SHA1 = 'sha1',\n SHA256 = 'sha256',\n SHA512 = 'sha512'\n}\n\nexport enum AutoLaunch {\n // Let server decide whether to auto launch based on the current environment\n Auto = 'auto',\n // Disable auto launch\n Disable = 'disable',\n // Enable auto launch\n Enable = 'enable'\n}\n\nexport enum CudaMalloc {\n // Let server decide whether to use CUDA malloc based on the current environment\n Auto = 'auto',\n // Disable CUDA malloc\n Disable = 'disable',\n // Enable CUDA malloc\n Enable = 'enable'\n}\n\nexport enum FloatingPointPrecision {\n AUTO = 'auto',\n FP64 = 'fp64',\n FP32 = 'fp32',\n FP16 = 'fp16',\n BF16 = 'bf16',\n FP8E4M3FN = 'fp8_e4m3fn',\n FP8E5M2 = 'fp8_e5m2'\n}\n\nexport enum CrossAttentionMethod {\n Auto = 'auto',\n Split = 'split',\n Quad = 'quad',\n Pytorch = 'pytorch'\n}\n\nexport enum VramManagement {\n Auto = 'auto',\n GPUOnly = 'gpu-only',\n HighVram = 'highvram',\n NormalVram = 'normalvram',\n LowVram = 'lowvram',\n NoVram = 'novram',\n CPU = 'cpu'\n}\n","import { FormItem } from '@/types/settingTypes'\nimport {\n LatentPreviewMethod,\n LogLevel,\n HashFunction,\n AutoLaunch,\n CudaMalloc,\n FloatingPointPrecision,\n CrossAttentionMethod,\n VramManagement\n} from '@/types/serverArgs'\n\nexport type ServerConfigValue = string | number | true | null | undefined\n\nexport interface ServerConfig extends FormItem {\n id: string\n defaultValue: T\n category?: string[]\n // Override the default value getter with a custom function.\n getValue?: (value: T) => Record\n}\n\nexport const WEB_ONLY_CONFIG_ITEMS: ServerConfig[] = [\n // Launch behavior\n {\n id: 'auto-launch',\n name: 'Automatically opens in the browser on startup',\n category: ['Launch'],\n type: 'combo',\n options: Object.values(AutoLaunch),\n defaultValue: AutoLaunch.Auto,\n getValue: (value: AutoLaunch) => {\n switch (value) {\n case AutoLaunch.Auto:\n return {}\n case AutoLaunch.Enable:\n return {\n ['auto-launch']: true\n }\n case AutoLaunch.Disable:\n return {\n ['disable-auto-launch']: true\n }\n }\n }\n }\n]\n\nexport const SERVER_CONFIG_ITEMS: ServerConfig[] = [\n // Network settings\n {\n id: 'listen',\n name: 'Host: The IP address to listen on',\n category: ['Network'],\n type: 'text',\n defaultValue: '127.0.0.1'\n },\n {\n id: 'port',\n name: 'Port: The port to listen on',\n category: ['Network'],\n type: 'number',\n // The default launch port for desktop app is 8000 instead of 8188.\n defaultValue: 8000\n },\n {\n id: 'tls-keyfile',\n name: 'TLS Key File: Path to TLS key file for HTTPS',\n category: ['Network'],\n type: 'text',\n defaultValue: ''\n },\n {\n id: 'tls-certfile',\n name: 'TLS Certificate File: Path to TLS certificate file for HTTPS',\n category: ['Network'],\n type: 'text',\n defaultValue: ''\n },\n {\n id: 'enable-cors-header',\n name: 'Enable CORS header: Use \"*\" for all origins or specify domain',\n category: ['Network'],\n type: 'text',\n defaultValue: ''\n },\n {\n id: 'max-upload-size',\n name: 'Maximum upload size (MB)',\n category: ['Network'],\n type: 'number',\n defaultValue: 100\n },\n\n // CUDA settings\n {\n id: 'cuda-device',\n name: 'CUDA device index to use',\n category: ['CUDA'],\n type: 'number',\n defaultValue: null\n },\n {\n id: 'cuda-malloc',\n name: 'Use CUDA malloc for memory allocation',\n category: ['CUDA'],\n type: 'combo',\n options: Object.values(CudaMalloc),\n defaultValue: CudaMalloc.Auto,\n getValue: (value: CudaMalloc) => {\n switch (value) {\n case CudaMalloc.Auto:\n return {}\n case CudaMalloc.Enable:\n return {\n ['cuda-malloc']: true\n }\n case CudaMalloc.Disable:\n return {\n ['disable-cuda-malloc']: true\n }\n }\n }\n },\n\n // Precision settings\n {\n id: 'global-precision',\n name: 'Global floating point precision',\n category: ['Inference'],\n type: 'combo',\n options: [\n FloatingPointPrecision.AUTO,\n FloatingPointPrecision.FP32,\n FloatingPointPrecision.FP16\n ],\n defaultValue: FloatingPointPrecision.AUTO,\n tooltip: 'Global floating point precision',\n getValue: (value: FloatingPointPrecision) => {\n switch (value) {\n case FloatingPointPrecision.AUTO:\n return {}\n case FloatingPointPrecision.FP32:\n return {\n ['force-fp32']: true\n }\n case FloatingPointPrecision.FP16:\n return {\n ['force-fp16']: true\n }\n default:\n return {}\n }\n }\n },\n\n // UNET precision\n {\n id: 'unet-precision',\n name: 'UNET precision',\n category: ['Inference'],\n type: 'combo',\n options: [\n FloatingPointPrecision.AUTO,\n FloatingPointPrecision.FP64,\n FloatingPointPrecision.FP32,\n FloatingPointPrecision.FP16,\n FloatingPointPrecision.BF16,\n FloatingPointPrecision.FP8E4M3FN,\n FloatingPointPrecision.FP8E5M2\n ],\n defaultValue: FloatingPointPrecision.AUTO,\n tooltip: 'UNET precision',\n getValue: (value: FloatingPointPrecision) => {\n switch (value) {\n case FloatingPointPrecision.AUTO:\n return {}\n default:\n return {\n [`${value.toLowerCase()}-unet`]: true\n }\n }\n }\n },\n\n // VAE settings\n {\n id: 'vae-precision',\n name: 'VAE precision',\n category: ['Inference'],\n type: 'combo',\n options: [\n FloatingPointPrecision.AUTO,\n FloatingPointPrecision.FP16,\n FloatingPointPrecision.FP32,\n FloatingPointPrecision.BF16\n ],\n defaultValue: FloatingPointPrecision.AUTO,\n tooltip: 'VAE precision',\n getValue: (value: FloatingPointPrecision) => {\n switch (value) {\n case FloatingPointPrecision.AUTO:\n return {}\n default:\n return {\n [`${value.toLowerCase()}-vae`]: true\n }\n }\n }\n },\n {\n id: 'cpu-vae',\n name: 'Run VAE on CPU',\n category: ['Inference'],\n type: 'boolean',\n defaultValue: false\n },\n\n // Text Encoder settings\n {\n id: 'text-encoder-precision',\n name: 'Text Encoder precision',\n category: ['Inference'],\n type: 'combo',\n options: [\n FloatingPointPrecision.AUTO,\n FloatingPointPrecision.FP8E4M3FN,\n FloatingPointPrecision.FP8E5M2,\n FloatingPointPrecision.FP16,\n FloatingPointPrecision.FP32\n ],\n defaultValue: FloatingPointPrecision.AUTO,\n tooltip: 'Text Encoder precision',\n getValue: (value: FloatingPointPrecision) => {\n switch (value) {\n case FloatingPointPrecision.AUTO:\n return {}\n default:\n return {\n [`${value.toLowerCase()}-text-enc`]: true\n }\n }\n }\n },\n\n // Memory and performance settings\n {\n id: 'force-channels-last',\n name: 'Force channels-last memory format',\n category: ['Memory'],\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'directml',\n name: 'DirectML device index',\n category: ['Memory'],\n type: 'number',\n defaultValue: null\n },\n {\n id: 'disable-ipex-optimize',\n name: 'Disable IPEX optimization',\n category: ['Memory'],\n type: 'boolean',\n defaultValue: false\n },\n\n // Preview settings\n {\n id: 'preview-method',\n name: 'Method used for latent previews',\n category: ['Preview'],\n type: 'combo',\n options: Object.values(LatentPreviewMethod),\n defaultValue: LatentPreviewMethod.NoPreviews\n },\n {\n id: 'preview-size',\n name: 'Size of preview images',\n category: ['Preview'],\n type: 'slider',\n defaultValue: 512,\n attrs: {\n min: 128,\n max: 2048,\n step: 128\n }\n },\n\n // Cache settings\n {\n id: 'cache-classic',\n name: 'Use classic cache system',\n category: ['Cache'],\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'cache-lru',\n name: 'Use LRU caching with a maximum of N node results cached.',\n category: ['Cache'],\n type: 'number',\n defaultValue: null,\n tooltip: 'May use more RAM/VRAM.'\n },\n\n // Attention settings\n {\n id: 'cross-attention-method',\n name: 'Cross attention method',\n category: ['Attention'],\n type: 'combo',\n options: Object.values(CrossAttentionMethod),\n defaultValue: CrossAttentionMethod.Auto,\n getValue: (value: CrossAttentionMethod) => {\n switch (value) {\n case CrossAttentionMethod.Auto:\n return {}\n default:\n return {\n [`use-${value.toLowerCase()}-cross-attention`]: true\n }\n }\n }\n },\n {\n id: 'disable-xformers',\n name: 'Disable xFormers optimization',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'force-upcast-attention',\n name: 'Force attention upcast',\n category: ['Attention'],\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'dont-upcast-attention',\n name: 'Prevent attention upcast',\n category: ['Attention'],\n type: 'boolean',\n defaultValue: false\n },\n\n // VRAM management\n {\n id: 'vram-management',\n name: 'VRAM management mode',\n category: ['Memory'],\n type: 'combo',\n options: Object.values(VramManagement),\n defaultValue: VramManagement.Auto,\n getValue: (value: VramManagement) => {\n switch (value) {\n case VramManagement.Auto:\n return {}\n default:\n return {\n [value]: true\n }\n }\n }\n },\n {\n id: 'reserve-vram',\n name: 'Reserved VRAM (GB)',\n category: ['Memory'],\n type: 'number',\n defaultValue: null,\n tooltip:\n 'Set the amount of vram in GB you want to reserve for use by your OS/other software. By default some amount is reverved depending on your OS.'\n },\n\n // Misc settings\n {\n id: 'default-hashing-function',\n name: 'Default hashing function for model files',\n type: 'combo',\n options: Object.values(HashFunction),\n defaultValue: HashFunction.SHA256\n },\n {\n id: 'disable-smart-memory',\n name: 'Disable smart memory management',\n tooltip:\n 'Force ComfyUI to aggressively offload to regular ram instead of keeping models in vram when it can.',\n category: ['Memory'],\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'deterministic',\n name: 'Make pytorch use slower deterministic algorithms when it can.',\n type: 'boolean',\n defaultValue: false,\n tooltip: 'Note that this might not make images deterministic in all cases.'\n },\n {\n id: 'fast',\n name: 'Enable some untested and potentially quality deteriorating optimizations.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'dont-print-server',\n name: \"Don't print server output to console.\",\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'disable-metadata',\n name: 'Disable saving prompt metadata in files.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'disable-all-custom-nodes',\n name: 'Disable loading all custom nodes.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'log-level',\n name: 'Logging verbosity level',\n type: 'combo',\n options: Object.values(LogLevel),\n defaultValue: LogLevel.INFO,\n getValue: (value: LogLevel) => {\n return {\n verbose: value\n }\n }\n },\n // Directories\n {\n id: 'input-directory',\n name: 'Input directory',\n category: ['Directories'],\n type: 'text',\n defaultValue: ''\n },\n {\n id: 'output-directory',\n name: 'Output directory',\n category: ['Directories'],\n type: 'text',\n defaultValue: ''\n }\n]\n","import { app } from '@/scripts/app'\nimport { api } from '@/scripts/api'\nimport {\n showSettingsDialog,\n showTemplateWorkflowsDialog\n} from '@/services/dialogService'\nimport { workflowService } from '@/services/workflowService'\nimport type { ComfyCommand } from '@/stores/commandStore'\nimport { useTitleEditorStore } from '@/stores/graphStore'\nimport { useQueueSettingsStore, useQueueStore } from '@/stores/queueStore'\nimport { useSettingStore } from '@/stores/settingStore'\nimport { useToastStore } from '@/stores/toastStore'\nimport { type ComfyWorkflow, useWorkflowStore } from '@/stores/workflowStore'\nimport { useBottomPanelStore } from '@/stores/workspace/bottomPanelStore'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\nimport {\n LiteGraph,\n LGraphEventMode,\n LGraphNode,\n LGraphGroup\n} from '@comfyorg/litegraph'\nimport { useSearchBoxStore } from '@/stores/workspace/searchBoxStore'\n\nexport function useCoreCommands(): ComfyCommand[] {\n const getTracker = () => useWorkflowStore()?.activeWorkflow?.changeTracker\n\n const getSelectedNodes = (): LGraphNode[] => {\n const selectedNodes = app.canvas.selected_nodes\n const result: LGraphNode[] = []\n if (selectedNodes) {\n for (const i in selectedNodes) {\n const node = selectedNodes[i]\n result.push(node)\n }\n }\n return result\n }\n\n const toggleSelectedNodesMode = (mode: LGraphEventMode) => {\n getSelectedNodes().forEach((node) => {\n if (node.mode === mode) {\n node.mode = LGraphEventMode.ALWAYS\n } else {\n node.mode = mode\n }\n })\n }\n\n return [\n {\n id: 'Comfy.NewBlankWorkflow',\n icon: 'pi pi-plus',\n label: 'New Blank Workflow',\n menubarLabel: 'New',\n function: () => workflowService.loadBlankWorkflow()\n },\n {\n id: 'Comfy.OpenWorkflow',\n icon: 'pi pi-folder-open',\n label: 'Open Workflow',\n menubarLabel: 'Open',\n function: () => {\n app.ui.loadFile()\n }\n },\n {\n id: 'Comfy.LoadDefaultWorkflow',\n icon: 'pi pi-code',\n label: 'Load Default Workflow',\n function: () => workflowService.loadDefaultWorkflow()\n },\n {\n id: 'Comfy.SaveWorkflow',\n icon: 'pi pi-save',\n label: 'Save Workflow',\n menubarLabel: 'Save',\n function: async () => {\n const workflow = useWorkflowStore().activeWorkflow as ComfyWorkflow\n if (!workflow) return\n\n await workflowService.saveWorkflow(workflow)\n }\n },\n {\n id: 'Comfy.SaveWorkflowAs',\n icon: 'pi pi-save',\n label: 'Save Workflow As',\n menubarLabel: 'Save As',\n function: async () => {\n const workflow = useWorkflowStore().activeWorkflow as ComfyWorkflow\n if (!workflow) return\n\n await workflowService.saveWorkflowAs(workflow)\n }\n },\n {\n id: 'Comfy.ExportWorkflow',\n icon: 'pi pi-download',\n label: 'Export Workflow',\n menubarLabel: 'Export',\n function: () => {\n workflowService.exportWorkflow('workflow', 'workflow')\n }\n },\n {\n id: 'Comfy.ExportWorkflowAPI',\n icon: 'pi pi-download',\n label: 'Export Workflow (API Format)',\n menubarLabel: 'Export (API)',\n function: () => {\n workflowService.exportWorkflow('workflow_api', 'output')\n }\n },\n {\n id: 'Comfy.Undo',\n icon: 'pi pi-undo',\n label: 'Undo',\n function: async () => {\n await getTracker()?.undo?.()\n }\n },\n {\n id: 'Comfy.Redo',\n icon: 'pi pi-refresh',\n label: 'Redo',\n function: async () => {\n await getTracker()?.redo?.()\n }\n },\n {\n id: 'Comfy.ClearWorkflow',\n icon: 'pi pi-trash',\n label: 'Clear Workflow',\n function: () => {\n const settingStore = useSettingStore()\n if (\n !settingStore.get('Comfy.ComfirmClear') ||\n confirm('Clear workflow?')\n ) {\n app.clean()\n app.graph.clear()\n api.dispatchCustomEvent('graphCleared')\n }\n }\n },\n {\n id: 'Comfy.Canvas.ResetView',\n icon: 'pi pi-expand',\n label: 'Reset View',\n function: () => {\n app.resetView()\n }\n },\n {\n id: 'Comfy.OpenClipspace',\n icon: 'pi pi-clipboard',\n label: 'Clipspace',\n function: () => {\n app.openClipspace()\n }\n },\n {\n id: 'Comfy.RefreshNodeDefinitions',\n icon: 'pi pi-refresh',\n label: 'Refresh Node Definitions',\n function: async () => {\n await app.refreshComboInNodes()\n }\n },\n {\n id: 'Comfy.Interrupt',\n icon: 'pi pi-stop',\n label: 'Interrupt',\n function: async () => {\n await api.interrupt()\n useToastStore().add({\n severity: 'info',\n summary: 'Interrupted',\n detail: 'Execution has been interrupted',\n life: 1000\n })\n }\n },\n {\n id: 'Comfy.ClearPendingTasks',\n icon: 'pi pi-stop',\n label: 'Clear Pending Tasks',\n function: async () => {\n await useQueueStore().clear(['queue'])\n useToastStore().add({\n severity: 'info',\n summary: 'Confirmed',\n detail: 'Pending tasks deleted',\n life: 3000\n })\n }\n },\n {\n id: 'Comfy.BrowseTemplates',\n icon: 'pi pi-folder-open',\n label: 'Browse Templates',\n function: showTemplateWorkflowsDialog\n },\n {\n id: 'Comfy.Canvas.ZoomIn',\n icon: 'pi pi-plus',\n label: 'Zoom In',\n function: () => {\n const ds = app.canvas.ds\n ds.changeScale(\n ds.scale * 1.1,\n ds.element ? [ds.element.width / 2, ds.element.height / 2] : undefined\n )\n app.canvas.setDirty(true, true)\n }\n },\n {\n id: 'Comfy.Canvas.ZoomOut',\n icon: 'pi pi-minus',\n label: 'Zoom Out',\n function: () => {\n const ds = app.canvas.ds\n ds.changeScale(\n ds.scale / 1.1,\n ds.element ? [ds.element.width / 2, ds.element.height / 2] : undefined\n )\n app.canvas.setDirty(true, true)\n }\n },\n {\n id: 'Comfy.Canvas.FitView',\n icon: 'pi pi-expand',\n label: 'Fit view to selected nodes',\n function: () => {\n if (app.canvas.empty) {\n useToastStore().add({\n severity: 'error',\n summary: 'Empty canvas',\n life: 3000\n })\n return\n }\n app.canvas.fitViewToSelectionAnimated()\n }\n },\n {\n id: 'Comfy.Canvas.ToggleLock',\n icon: 'pi pi-lock',\n label: 'Canvas Toggle Lock',\n function: () => {\n app.canvas['read_only'] = !app.canvas['read_only']\n }\n },\n {\n id: 'Comfy.Canvas.ToggleLinkVisibility',\n icon: 'pi pi-eye',\n label: 'Canvas Toggle Link Visibility',\n versionAdded: '1.3.6',\n\n function: (() => {\n const settingStore = useSettingStore()\n let lastLinksRenderMode = LiteGraph.SPLINE_LINK\n\n return () => {\n const currentMode = settingStore.get('Comfy.LinkRenderMode')\n\n if (currentMode === LiteGraph.HIDDEN_LINK) {\n // If links are hidden, restore the last positive value or default to spline mode\n settingStore.set('Comfy.LinkRenderMode', lastLinksRenderMode)\n } else {\n // If links are visible, store the current mode and hide links\n lastLinksRenderMode = currentMode\n settingStore.set('Comfy.LinkRenderMode', LiteGraph.HIDDEN_LINK)\n }\n }\n })()\n },\n {\n id: 'Comfy.QueuePrompt',\n icon: 'pi pi-play',\n label: 'Queue Prompt',\n versionAdded: '1.3.7',\n function: () => {\n const batchCount = useQueueSettingsStore().batchCount\n app.queuePrompt(0, batchCount)\n }\n },\n {\n id: 'Comfy.QueuePromptFront',\n icon: 'pi pi-play',\n label: 'Queue Prompt (Front)',\n versionAdded: '1.3.7',\n function: () => {\n const batchCount = useQueueSettingsStore().batchCount\n app.queuePrompt(-1, batchCount)\n }\n },\n {\n id: 'Comfy.ShowSettingsDialog',\n icon: 'pi pi-cog',\n label: 'Show Settings Dialog',\n versionAdded: '1.3.7',\n function: () => {\n showSettingsDialog()\n }\n },\n {\n id: 'Comfy.Graph.GroupSelectedNodes',\n icon: 'pi pi-sitemap',\n label: 'Group Selected Nodes',\n versionAdded: '1.3.7',\n function: () => {\n const { canvas } = app\n if (!canvas.selectedItems?.size) {\n useToastStore().add({\n severity: 'error',\n summary: 'Nothing to group',\n detail:\n 'Please select the nodes (or other groups) to create a group for',\n life: 3000\n })\n return\n }\n const group = new LGraphGroup()\n const padding = useSettingStore().get(\n 'Comfy.GroupSelectedNodes.Padding'\n )\n group.resizeTo(canvas.selectedItems, padding)\n canvas.graph.add(group)\n useTitleEditorStore().titleEditorTarget = group\n }\n },\n {\n id: 'Workspace.NextOpenedWorkflow',\n icon: 'pi pi-step-forward',\n label: 'Next Opened Workflow',\n versionAdded: '1.3.9',\n function: () => {\n workflowService.loadNextOpenedWorkflow()\n }\n },\n {\n id: 'Workspace.PreviousOpenedWorkflow',\n icon: 'pi pi-step-backward',\n label: 'Previous Opened Workflow',\n versionAdded: '1.3.9',\n function: () => {\n workflowService.loadPreviousOpenedWorkflow()\n }\n },\n {\n id: 'Comfy.Canvas.ToggleSelectedNodes.Mute',\n icon: 'pi pi-volume-off',\n label: 'Mute/Unmute Selected Nodes',\n versionAdded: '1.3.11',\n function: () => {\n toggleSelectedNodesMode(LGraphEventMode.NEVER)\n }\n },\n {\n id: 'Comfy.Canvas.ToggleSelectedNodes.Bypass',\n icon: 'pi pi-shield',\n label: 'Bypass/Unbypass Selected Nodes',\n versionAdded: '1.3.11',\n function: () => {\n toggleSelectedNodesMode(LGraphEventMode.BYPASS)\n }\n },\n {\n id: 'Comfy.Canvas.ToggleSelectedNodes.Pin',\n icon: 'pi pi-pin',\n label: 'Pin/Unpin Selected Nodes',\n versionAdded: '1.3.11',\n function: () => {\n getSelectedNodes().forEach((node) => {\n node.pin(!node.pinned)\n })\n }\n },\n {\n id: 'Comfy.Canvas.ToggleSelected.Pin',\n icon: 'pi pi-pin',\n label: 'Pin/Unpin Selected Items',\n versionAdded: '1.3.33',\n function: () => {\n for (const item of app.canvas.selectedItems) {\n if (item instanceof LGraphNode || item instanceof LGraphGroup) {\n item.pin(!item.pinned)\n }\n }\n }\n },\n {\n id: 'Comfy.Canvas.ToggleSelectedNodes.Collapse',\n icon: 'pi pi-minus',\n label: 'Collapse/Expand Selected Nodes',\n versionAdded: '1.3.11',\n function: () => {\n getSelectedNodes().forEach((node) => {\n node.collapse()\n })\n }\n },\n {\n id: 'Comfy.ToggleTheme',\n icon: 'pi pi-moon',\n label: 'Toggle Theme (Dark/Light)',\n versionAdded: '1.3.12',\n function: (() => {\n let previousDarkTheme: string = 'dark'\n\n // Official light theme is the only light theme supported now.\n const isDarkMode = (themeId: string) => themeId !== 'light'\n return () => {\n const settingStore = useSettingStore()\n const currentTheme = settingStore.get('Comfy.ColorPalette')\n if (isDarkMode(currentTheme)) {\n previousDarkTheme = currentTheme\n settingStore.set('Comfy.ColorPalette', 'light')\n } else {\n settingStore.set('Comfy.ColorPalette', previousDarkTheme)\n }\n }\n })()\n },\n {\n id: 'Workspace.ToggleBottomPanel',\n icon: 'pi pi-list',\n label: 'Toggle Bottom Panel',\n versionAdded: '1.3.22',\n function: () => {\n useBottomPanelStore().toggleBottomPanel()\n }\n },\n {\n id: 'Workspace.ToggleFocusMode',\n icon: 'pi pi-eye',\n label: 'Toggle Focus Mode',\n versionAdded: '1.3.27',\n function: () => {\n useWorkspaceStore().toggleFocusMode()\n }\n },\n {\n id: 'Comfy.Graph.FitGroupToContents',\n icon: 'pi pi-expand',\n label: 'Fit Group To Contents',\n versionAdded: '1.4.9',\n function: () => {\n for (const group of app.canvas.selectedItems) {\n if (group instanceof LGraphGroup) {\n group.recomputeInsideNodes()\n const padding = useSettingStore().get(\n 'Comfy.GroupSelectedNodes.Padding'\n )\n group.resizeTo(group.children, padding)\n app.graph.change()\n }\n }\n }\n },\n {\n id: 'Comfy.Help.OpenComfyUIIssues',\n icon: 'pi pi-github',\n label: 'Open ComfyUI Issues',\n menubarLabel: 'ComfyUI Issues',\n versionAdded: '1.5.5',\n function: () => {\n window.open(\n 'https://github.com/comfyanonymous/ComfyUI/issues',\n '_blank'\n )\n }\n },\n {\n id: 'Comfy.Help.OpenComfyUIDocs',\n icon: 'pi pi-info-circle',\n label: 'Open ComfyUI Docs',\n menubarLabel: 'ComfyUI Docs',\n versionAdded: '1.5.5',\n function: () => {\n window.open('https://docs.comfy.org/', '_blank')\n }\n },\n {\n id: 'Comfy.Help.OpenComfyOrgDiscord',\n icon: 'pi pi-discord',\n label: 'Open Comfy-Org Discord',\n menubarLabel: 'Comfy-Org Discord',\n versionAdded: '1.5.5',\n function: () => {\n window.open('https://www.comfy.org/discord', '_blank')\n }\n },\n {\n id: 'Workspace.SearchBox.Toggle',\n icon: 'pi pi-search',\n label: 'Toggle Search Box',\n versionAdded: '1.5.7',\n function: () => {\n useSearchBoxStore().toggleVisible()\n }\n }\n ]\n}\n","\n\n\n"],"names":["theme","classes","script$1","Badge","provide","script","render","item","BaseComponent","content","showNavigators","ChevronLeftIcon","ChevronRightIcon","_hoisted_1","_hoisted_2","_hoisted_3","createElementVNode","root","inlineStyles","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","data","mounted","beforeUnmount","panels","onKeydown","getPTOptions","_typeof$1","o","updated","option","_hide","onFocus","onArrowLeftKey","onArrowRightKey","onHomeKey","onEndKey","onPageUpKey","onPageDownKey","onEnterKey","_","scrollInView","id","InputText","VirtualScroller","Portal","ChevronDownIcon","SpinnerIcon","Chip","_typeof","ownKeys","r","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","onRemove","ref","onClick","_sfc_main","AutoComplete","suggestions","search","comfyApp","repeat","widget","script$2","InfoCircleIcon","CheckIcon","ExclamationTriangleIcon","TimesCircleIcon","TimesIcon","render$1","message","options","getAriaPosInset","AngleRightIcon","AngleDownIcon","_hoisted_1$1","$attrsId","getItemProp","getItemLabel","isItemDisabled","isItemVisible","isItemGroup","show","hide","onBlur","onKeyDown","activeItemPath","onItemClick","onItemMouseEnter","onItemMouseMove","onArrowDownKey","onArrowUpKey","onEscapeKey","onTabKey","bindOutsideClickListener","unbindOutsideClickListener","bindResizeListener","unbindResizeListener","isSelected","processedItems","BarsIcon","toggle","PlusIcon","MinusIcon","Button","submenu","getItemId","getItemKey","getItemLabelId","isItemActive","isItemFocused","onEnter","getAriaSetSize","getMenuItemProps","containerRef","isItemSeparator","getProccessedItemLabel","isProccessedItemGroup","onItemChange","onOverlayClick","onSpaceKey","onLeave","alignOverlay","bindScrollListener","unbindScrollListener","isItemMatched","isValidItem","isValidSelectedItem","findFirstItemIndex","findLastItemIndex","findNextItemIndex","findPrevItemIndex","findSelectedItemIndex","findFirstFocusedItemIndex","findLastFocusedItemIndex","searchItems","changeFocusedItemIndex","createProcessedItems","menubarRef","visibleItems","focusedItemId","hasFluid","TieredMenu","clamp","LatentPreviewMethod","LogLevel","HashFunction","AutoLaunch","CudaMalloc","FloatingPointPrecision","CrossAttentionMethod","VramManagement"],"mappings":"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","x_google_ignoreList":[2,3,10,11,12,13,15,16,17,18,20,21,30,31,35,36,41,42,44,45,46,47,48,49]} \ No newline at end of file diff --git a/web/assets/InstallView-8N2LdZUx.css b/web/assets/InstallView-8N2LdZUx.css new file mode 100644 index 000000000..5ce7563a9 --- /dev/null +++ b/web/assets/InstallView-8N2LdZUx.css @@ -0,0 +1,4 @@ + +[data-v-7ef01cf2] .p-steppanel { + background-color: transparent +} diff --git a/web/assets/InstallView-D4T0qJ1I.js b/web/assets/InstallView-D4T0qJ1I.js new file mode 100644 index 000000000..d40bfa4b1 --- /dev/null +++ b/web/assets/InstallView-D4T0qJ1I.js @@ -0,0 +1,1067 @@ +var __defProp = Object.defineProperty; +var __name = (target, value2) => __defProp(target, "name", { value: value2, configurable: true }); +import { B as BaseStyle, V as script$7, af as UniqueComponentId, f as openBlock, g as createElementBlock, m as mergeProps, p as renderSlot, i as createCommentVNode, b_ as findIndexInList, b$ as find, l as resolveComponent, x as createBlock, M as resolveDynamicComponent, y as withCtx, A as createBaseVNode, a8 as toDisplayString, C as normalizeClass, X as findSingle, P as Fragment, aw as Transition, v as withDirectives, ad as vShow, a as defineComponent, I as useI18n, c0 as useModel, r as ref, o as onMounted, t as resolveDirective, h as createVNode, z as unref, aq as script$8, c1 as script$9, c2 as script$a, D as script$b, ay as createTextVNode, bW as script$c, bZ as electronAPI, c3 as MigrationItems, q as computed, aL as watchEffect, Q as renderList, br as withModifiers, c4 as script$d, aC as script$e, c5 as script$f, bN as script$g, aI as script$h, bU as useRouter, R as pushScopeId, U as popScopeId, aO as toRaw, _ as _export_sfc } from "./index-CSl7lfOs.js"; +var theme = /* @__PURE__ */ __name(function theme2(_ref) { + var dt = _ref.dt; + return "\n.p-steplist {\n position: relative;\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 0;\n padding: 0;\n list-style-type: none;\n overflow-x: auto;\n}\n\n.p-step {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n gap: ".concat(dt("stepper.step.gap"), ";\n padding: ").concat(dt("stepper.step.padding"), ";\n}\n\n.p-step:last-of-type {\n flex: initial;\n}\n\n.p-step-header {\n border: 0 none;\n display: inline-flex;\n align-items: center;\n text-decoration: none;\n cursor: pointer;\n transition: background ").concat(dt("stepper.transition.duration"), ", color ").concat(dt("stepper.transition.duration"), ", border-color ").concat(dt("stepper.transition.duration"), ", outline-color ").concat(dt("stepper.transition.duration"), ", box-shadow ").concat(dt("stepper.transition.duration"), ";\n border-radius: ").concat(dt("stepper.step.header.border.radius"), ";\n outline-color: transparent;\n background: transparent;\n padding: ").concat(dt("stepper.step.header.padding"), ";\n gap: ").concat(dt("stepper.step.header.gap"), ";\n}\n\n.p-step-header:focus-visible {\n box-shadow: ").concat(dt("stepper.step.header.focus.ring.shadow"), ";\n outline: ").concat(dt("stepper.step.header.focus.ring.width"), " ").concat(dt("stepper.step.header.focus.ring.style"), " ").concat(dt("stepper.step.header.focus.ring.color"), ";\n outline-offset: ").concat(dt("stepper.step.header.focus.ring.offset"), ";\n}\n\n.p-stepper.p-stepper-readonly .p-step {\n cursor: auto;\n}\n\n.p-step-title {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n color: ").concat(dt("stepper.step.title.color"), ";\n font-weight: ").concat(dt("stepper.step.title.font.weight"), ";\n transition: background ").concat(dt("stepper.transition.duration"), ", color ").concat(dt("stepper.transition.duration"), ", border-color ").concat(dt("stepper.transition.duration"), ", box-shadow ").concat(dt("stepper.transition.duration"), ", outline-color ").concat(dt("stepper.transition.duration"), ";\n}\n\n.p-step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n color: ").concat(dt("stepper.step.number.color"), ";\n border: 2px solid ").concat(dt("stepper.step.number.border.color"), ";\n background: ").concat(dt("stepper.step.number.background"), ";\n min-width: ").concat(dt("stepper.step.number.size"), ";\n height: ").concat(dt("stepper.step.number.size"), ";\n line-height: ").concat(dt("stepper.step.number.size"), ";\n font-size: ").concat(dt("stepper.step.number.font.size"), ";\n z-index: 1;\n border-radius: ").concat(dt("stepper.step.number.border.radius"), ";\n position: relative;\n font-weight: ").concat(dt("stepper.step.number.font.weight"), ';\n}\n\n.p-step-number::after {\n content: " ";\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: ').concat(dt("stepper.step.number.border.radius"), ";\n box-shadow: ").concat(dt("stepper.step.number.shadow"), ";\n}\n\n.p-step-active .p-step-header {\n cursor: default;\n}\n\n.p-step-active .p-step-number {\n background: ").concat(dt("stepper.step.number.active.background"), ";\n border-color: ").concat(dt("stepper.step.number.active.border.color"), ";\n color: ").concat(dt("stepper.step.number.active.color"), ";\n}\n\n.p-step-active .p-step-title {\n color: ").concat(dt("stepper.step.title.active.color"), ";\n}\n\n.p-step:not(.p-disabled):focus-visible {\n outline: ").concat(dt("focus.ring.width"), " ").concat(dt("focus.ring.style"), " ").concat(dt("focus.ring.color"), ";\n outline-offset: ").concat(dt("focus.ring.offset"), ";\n}\n\n.p-step:has(~ .p-step-active) .p-stepper-separator {\n background: ").concat(dt("stepper.separator.active.background"), ";\n}\n\n.p-stepper-separator {\n flex: 1 1 0;\n background: ").concat(dt("stepper.separator.background"), ";\n width: 100%;\n height: ").concat(dt("stepper.separator.size"), ";\n transition: background ").concat(dt("stepper.transition.duration"), ", color ").concat(dt("stepper.transition.duration"), ", border-color ").concat(dt("stepper.transition.duration"), ", box-shadow ").concat(dt("stepper.transition.duration"), ", outline-color ").concat(dt("stepper.transition.duration"), ";\n}\n\n.p-steppanels {\n padding: ").concat(dt("stepper.steppanels.padding"), ";\n}\n\n.p-steppanel {\n background: ").concat(dt("stepper.steppanel.background"), ";\n color: ").concat(dt("stepper.steppanel.color"), ";\n}\n\n.p-stepper:has(.p-stepitem) {\n display: flex;\n flex-direction: column;\n}\n\n.p-stepitem {\n display: flex;\n flex-direction: column;\n flex: initial;\n}\n\n.p-stepitem.p-stepitem-active {\n flex: 1 1 auto;\n}\n\n.p-stepitem .p-step {\n flex: initial;\n}\n\n.p-stepitem .p-steppanel-content {\n width: 100%;\n padding: ").concat(dt("stepper.steppanel.padding"), ";\n}\n\n.p-stepitem .p-steppanel {\n display: flex;\n flex: 1 1 auto;\n}\n\n.p-stepitem .p-stepper-separator {\n flex: 0 0 auto;\n width: ").concat(dt("stepper.separator.size"), ";\n height: auto;\n margin: ").concat(dt("stepper.separator.margin"), ";\n position: relative;\n left: calc(-1 * ").concat(dt("stepper.separator.size"), ");\n}\n\n.p-stepitem:has(~ .p-stepitem-active) .p-stepper-separator {\n background: ").concat(dt("stepper.separator.active.background"), ";\n}\n\n.p-stepitem:last-of-type .p-steppanel {\n padding-inline-start: ").concat(dt("stepper.step.number.size"), ";\n}\n"); +}, "theme"); +var classes$4 = { + root: /* @__PURE__ */ __name(function root(_ref2) { + var props = _ref2.props; + return ["p-stepper p-component", { + "p-readonly": props.linear + }]; + }, "root"), + separator: "p-stepper-separator" +}; +var StepperStyle = BaseStyle.extend({ + name: "stepper", + theme, + classes: classes$4 +}); +var script$1$4 = { + name: "BaseStepper", + "extends": script$7, + props: { + value: { + type: [String, Number], + "default": void 0 + }, + linear: { + type: Boolean, + "default": false + } + }, + style: StepperStyle, + provide: /* @__PURE__ */ __name(function provide() { + return { + $pcStepper: this, + $parentInstance: this + }; + }, "provide") +}; +var script$6 = { + name: "Stepper", + "extends": script$1$4, + inheritAttrs: false, + emits: ["update:value"], + data: /* @__PURE__ */ __name(function data() { + return { + id: this.$attrs.id, + d_value: this.value + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + value: /* @__PURE__ */ __name(function value(newValue) { + this.d_value = newValue; + }, "value") + }, + mounted: /* @__PURE__ */ __name(function mounted() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + updateValue: /* @__PURE__ */ __name(function updateValue(newValue) { + if (this.d_value !== newValue) { + this.d_value = newValue; + this.$emit("update:value", newValue); + } + }, "updateValue"), + isStepActive: /* @__PURE__ */ __name(function isStepActive(value2) { + return this.d_value === value2; + }, "isStepActive"), + isStepDisabled: /* @__PURE__ */ __name(function isStepDisabled() { + return this.linear; + }, "isStepDisabled") + } +}; +function render$5(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + role: "tablist" + }, _ctx.ptmi("root")), [_ctx.$slots.start ? renderSlot(_ctx.$slots, "start", { + key: 0 + }) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default"), _ctx.$slots.end ? renderSlot(_ctx.$slots, "end", { + key: 1 + }) : createCommentVNode("", true)], 16); +} +__name(render$5, "render$5"); +script$6.render = render$5; +var classes$3 = { + root: "p-steplist" +}; +var StepListStyle = BaseStyle.extend({ + name: "steplist", + classes: classes$3 +}); +var script$1$3 = { + name: "BaseStepList", + "extends": script$7, + style: StepListStyle, + provide: /* @__PURE__ */ __name(function provide2() { + return { + $pcStepList: this, + $parentInstance: this + }; + }, "provide") +}; +var script$5 = { + name: "StepList", + "extends": script$1$3, + inheritAttrs: false +}; +function render$4(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$4, "render$4"); +script$5.render = render$4; +var classes$2 = { + root: "p-steppanels" +}; +var StepPanelsStyle = BaseStyle.extend({ + name: "steppanels", + classes: classes$2 +}); +var script$1$2 = { + name: "BaseStepPanels", + "extends": script$7, + style: StepPanelsStyle, + provide: /* @__PURE__ */ __name(function provide3() { + return { + $pcStepPanels: this, + $parentInstance: this + }; + }, "provide") +}; +var script$4 = { + name: "StepPanels", + "extends": script$1$2, + inheritAttrs: false +}; +function render$3(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$3, "render$3"); +script$4.render = render$3; +var classes$1 = { + root: /* @__PURE__ */ __name(function root2(_ref) { + var instance = _ref.instance; + return ["p-step", { + "p-step-active": instance.active, + "p-disabled": instance.isStepDisabled + }]; + }, "root"), + header: "p-step-header", + number: "p-step-number", + title: "p-step-title" +}; +var StepStyle = BaseStyle.extend({ + name: "step", + classes: classes$1 +}); +var script$2$1 = { + name: "StepperSeparator", + hostName: "Stepper", + "extends": script$7 +}; +function render$1$1(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("span", mergeProps({ + "class": _ctx.cx("separator") + }, _ctx.ptm("separator")), null, 16); +} +__name(render$1$1, "render$1$1"); +script$2$1.render = render$1$1; +var script$1$1 = { + name: "BaseStep", + "extends": script$7, + props: { + value: { + type: [String, Number], + "default": void 0 + }, + disabled: { + type: Boolean, + "default": false + }, + asChild: { + type: Boolean, + "default": false + }, + as: { + type: [String, Object], + "default": "DIV" + } + }, + style: StepStyle, + provide: /* @__PURE__ */ __name(function provide4() { + return { + $pcStep: this, + $parentInstance: this + }; + }, "provide") +}; +var script$3 = { + name: "Step", + "extends": script$1$1, + inheritAttrs: false, + inject: { + $pcStepper: { + "default": null + }, + $pcStepList: { + "default": null + }, + $pcStepItem: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data2() { + return { + isSeparatorVisible: false + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted2() { + if (this.$el && this.$pcStepList) { + var index = findIndexInList(this.$el, find(this.$pcStepper.$el, '[data-pc-name="step"]')); + var stepLen = find(this.$pcStepper.$el, '[data-pc-name="step"]').length; + this.isSeparatorVisible = index !== stepLen - 1; + } + }, "mounted"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions(key) { + var _ptm = key === "root" ? this.ptmi : this.ptm; + return _ptm(key, { + context: { + active: this.active, + disabled: this.isStepDisabled + } + }); + }, "getPTOptions"), + onStepClick: /* @__PURE__ */ __name(function onStepClick() { + this.$pcStepper.updateValue(this.activeValue); + }, "onStepClick") + }, + computed: { + active: /* @__PURE__ */ __name(function active() { + return this.$pcStepper.isStepActive(this.activeValue); + }, "active"), + activeValue: /* @__PURE__ */ __name(function activeValue() { + var _this$$pcStepItem; + return !!this.$pcStepItem ? (_this$$pcStepItem = this.$pcStepItem) === null || _this$$pcStepItem === void 0 ? void 0 : _this$$pcStepItem.value : this.value; + }, "activeValue"), + isStepDisabled: /* @__PURE__ */ __name(function isStepDisabled2() { + return !this.active && (this.$pcStepper.isStepDisabled() || this.disabled); + }, "isStepDisabled"), + id: /* @__PURE__ */ __name(function id() { + var _this$$pcStepper; + return "".concat((_this$$pcStepper = this.$pcStepper) === null || _this$$pcStepper === void 0 ? void 0 : _this$$pcStepper.id, "_step_").concat(this.activeValue); + }, "id"), + ariaControls: /* @__PURE__ */ __name(function ariaControls() { + var _this$$pcStepper2; + return "".concat((_this$$pcStepper2 = this.$pcStepper) === null || _this$$pcStepper2 === void 0 ? void 0 : _this$$pcStepper2.id, "_steppanel_").concat(this.activeValue); + }, "ariaControls"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs() { + return { + root: { + role: "presentation", + "aria-current": this.active ? "step" : void 0, + "data-pc-name": "step", + "data-pc-section": "root", + "data-p-disabled": this.disabled, + "data-p-active": this.active + }, + header: { + id: this.id, + role: "tab", + taindex: this.disabled ? -1 : void 0, + "aria-controls": this.ariaControls, + "data-pc-section": "header", + disabled: this.disabled, + onClick: this.onStepClick + } + }; + }, "a11yAttrs") + }, + components: { + StepperSeparator: script$2$1 + } +}; +var _hoisted_1$4 = ["id", "tabindex", "aria-controls", "disabled"]; +function render$2(_ctx, _cache, $props, $setup, $data, $options) { + var _component_StepperSeparator = resolveComponent("StepperSeparator"); + return !_ctx.asChild ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + "class": _ctx.cx("root"), + "aria-current": $options.active ? "step" : void 0, + role: "presentation", + "data-p-active": $options.active, + "data-p-disabled": $options.isStepDisabled + }, $options.getPTOptions("root")), { + "default": withCtx(function() { + return [createBaseVNode("button", mergeProps({ + id: $options.id, + "class": _ctx.cx("header"), + role: "tab", + type: "button", + tabindex: $options.isStepDisabled ? -1 : void 0, + "aria-controls": $options.ariaControls, + disabled: $options.isStepDisabled, + onClick: _cache[0] || (_cache[0] = function() { + return $options.onStepClick && $options.onStepClick.apply($options, arguments); + }) + }, $options.getPTOptions("header")), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("number") + }, $options.getPTOptions("number")), toDisplayString($options.activeValue), 17), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("title") + }, $options.getPTOptions("title")), [renderSlot(_ctx.$slots, "default")], 16)], 16, _hoisted_1$4), $data.isSeparatorVisible ? (openBlock(), createBlock(_component_StepperSeparator, { + key: 0 + })) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["class", "aria-current", "data-p-active", "data-p-disabled"])) : renderSlot(_ctx.$slots, "default", { + key: 1, + "class": normalizeClass(_ctx.cx("root")), + active: $options.active, + value: _ctx.value, + a11yAttrs: $options.a11yAttrs, + activateCallback: $options.onStepClick + }); +} +__name(render$2, "render$2"); +script$3.render = render$2; +var classes = { + root: /* @__PURE__ */ __name(function root3(_ref) { + var instance = _ref.instance; + return ["p-steppanel", { + "p-steppanel-active": instance.isVertical && instance.active + }]; + }, "root"), + content: "p-steppanel-content" +}; +var StepPanelStyle = BaseStyle.extend({ + name: "steppanel", + classes +}); +var script$2 = { + name: "StepperSeparator", + hostName: "Stepper", + "extends": script$7 +}; +function render$1(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("span", mergeProps({ + "class": _ctx.cx("separator") + }, _ctx.ptm("separator")), null, 16); +} +__name(render$1, "render$1"); +script$2.render = render$1; +var script$1 = { + name: "BaseStepPanel", + "extends": script$7, + props: { + value: { + type: [String, Number], + "default": void 0 + }, + asChild: { + type: Boolean, + "default": false + }, + as: { + type: [String, Object], + "default": "DIV" + } + }, + style: StepPanelStyle, + provide: /* @__PURE__ */ __name(function provide5() { + return { + $pcStepPanel: this, + $parentInstance: this + }; + }, "provide") +}; +var script = { + name: "StepPanel", + "extends": script$1, + inheritAttrs: false, + inject: { + $pcStepper: { + "default": null + }, + $pcStepItem: { + "default": null + }, + $pcStepList: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data3() { + return { + isSeparatorVisible: false + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted3() { + if (this.$el) { + var _this$$pcStepItem, _this$$pcStepList; + var stepElements = find(this.$pcStepper.$el, '[data-pc-name="step"]'); + var stepPanelEl = findSingle(this.isVertical ? (_this$$pcStepItem = this.$pcStepItem) === null || _this$$pcStepItem === void 0 ? void 0 : _this$$pcStepItem.$el : (_this$$pcStepList = this.$pcStepList) === null || _this$$pcStepList === void 0 ? void 0 : _this$$pcStepList.$el, '[data-pc-name="step"]'); + var stepPanelIndex = findIndexInList(stepPanelEl, stepElements); + this.isSeparatorVisible = this.isVertical && stepPanelIndex !== stepElements.length - 1; + } + }, "mounted"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions2(key) { + var _ptm = key === "root" ? this.ptmi : this.ptm; + return _ptm(key, { + context: { + active: this.active + } + }); + }, "getPTOptions"), + updateValue: /* @__PURE__ */ __name(function updateValue2(val) { + this.$pcStepper.updateValue(val); + }, "updateValue") + }, + computed: { + active: /* @__PURE__ */ __name(function active2() { + var _this$$pcStepItem2, _this$$pcStepper; + var activeValue3 = !!this.$pcStepItem ? (_this$$pcStepItem2 = this.$pcStepItem) === null || _this$$pcStepItem2 === void 0 ? void 0 : _this$$pcStepItem2.value : this.value; + return activeValue3 === ((_this$$pcStepper = this.$pcStepper) === null || _this$$pcStepper === void 0 ? void 0 : _this$$pcStepper.d_value); + }, "active"), + isVertical: /* @__PURE__ */ __name(function isVertical() { + return !!this.$pcStepItem; + }, "isVertical"), + activeValue: /* @__PURE__ */ __name(function activeValue2() { + var _this$$pcStepItem3; + return this.isVertical ? (_this$$pcStepItem3 = this.$pcStepItem) === null || _this$$pcStepItem3 === void 0 ? void 0 : _this$$pcStepItem3.value : this.value; + }, "activeValue"), + id: /* @__PURE__ */ __name(function id2() { + var _this$$pcStepper2; + return "".concat((_this$$pcStepper2 = this.$pcStepper) === null || _this$$pcStepper2 === void 0 ? void 0 : _this$$pcStepper2.id, "_steppanel_").concat(this.activeValue); + }, "id"), + ariaControls: /* @__PURE__ */ __name(function ariaControls2() { + var _this$$pcStepper3; + return "".concat((_this$$pcStepper3 = this.$pcStepper) === null || _this$$pcStepper3 === void 0 ? void 0 : _this$$pcStepper3.id, "_step_").concat(this.activeValue); + }, "ariaControls"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs2() { + return { + id: this.id, + role: "tabpanel", + "aria-controls": this.ariaControls, + "data-pc-name": "steppanel", + "data-p-active": this.active + }; + }, "a11yAttrs") + }, + components: { + StepperSeparator: script$2 + } +}; +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_StepperSeparator = resolveComponent("StepperSeparator"); + return $options.isVertical ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [!_ctx.asChild ? (openBlock(), createBlock(Transition, mergeProps({ + key: 0, + name: "p-toggleable-content" + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + id: $options.id, + "class": _ctx.cx("root"), + role: "tabpanel", + "aria-controls": $options.ariaControls + }, $options.getPTOptions("root")), { + "default": withCtx(function() { + return [$data.isSeparatorVisible ? (openBlock(), createBlock(_component_StepperSeparator, { + key: 0 + })) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, $options.getPTOptions("content")), [renderSlot(_ctx.$slots, "default", { + active: $options.active, + activateCallback: /* @__PURE__ */ __name(function activateCallback(val) { + return $options.updateValue(val); + }, "activateCallback") + })], 16)]; + }), + _: 3 + }, 16, ["id", "class", "aria-controls"])), [[vShow, $options.active]])]; + }), + _: 3 + }, 16)) : renderSlot(_ctx.$slots, "default", { + key: 1, + active: $options.active, + a11yAttrs: $options.a11yAttrs, + activateCallback: /* @__PURE__ */ __name(function activateCallback(val) { + return $options.updateValue(val); + }, "activateCallback") + })], 64)) : (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [!_ctx.asChild ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + id: $options.id, + "class": _ctx.cx("root"), + role: "tabpanel", + "aria-controls": $options.ariaControls + }, $options.getPTOptions("root")), { + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "default", { + active: $options.active, + activateCallback: /* @__PURE__ */ __name(function activateCallback(val) { + return $options.updateValue(val); + }, "activateCallback") + })]; + }), + _: 3 + }, 16, ["id", "class", "aria-controls"])), [[vShow, $options.active]]) : _ctx.asChild && $options.active ? renderSlot(_ctx.$slots, "default", { + key: 1, + active: $options.active, + a11yAttrs: $options.a11yAttrs, + activateCallback: /* @__PURE__ */ __name(function activateCallback(val) { + return $options.updateValue(val); + }, "activateCallback") + }) : createCommentVNode("", true)], 64)); +} +__name(render, "render"); +script.render = render; +const _hoisted_1$3 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$3 = { class: "flex flex-col gap-4" }; +const _hoisted_3$3 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$3 = { class: "text-neutral-400 my-0" }; +const _hoisted_5$2 = { class: "flex gap-2" }; +const _hoisted_6$2 = { class: "bg-neutral-800 p-4 rounded-lg" }; +const _hoisted_7$2 = { class: "text-lg font-medium mt-0 mb-3 text-neutral-100" }; +const _hoisted_8$2 = { class: "flex flex-col gap-2" }; +const _hoisted_9$2 = { class: "flex items-center gap-2" }; +const _hoisted_10$2 = /* @__PURE__ */ createBaseVNode("i", { class: "pi pi-folder text-neutral-400" }, null, -1); +const _hoisted_11$2 = /* @__PURE__ */ createBaseVNode("span", { class: "text-neutral-400" }, "App Data:", -1); +const _hoisted_12$2 = { class: "text-neutral-200" }; +const _hoisted_13$2 = { class: "pi pi-info-circle" }; +const _hoisted_14$2 = { class: "flex items-center gap-2" }; +const _hoisted_15$2 = /* @__PURE__ */ createBaseVNode("i", { class: "pi pi-desktop text-neutral-400" }, null, -1); +const _hoisted_16$1 = /* @__PURE__ */ createBaseVNode("span", { class: "text-neutral-400" }, "App Path:", -1); +const _hoisted_17$1 = { class: "text-neutral-200" }; +const _hoisted_18$1 = { class: "pi pi-info-circle" }; +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "InstallLocationPicker", + props: { + "installPath": { required: true }, + "installPathModifiers": {}, + "pathError": { required: true }, + "pathErrorModifiers": {} + }, + emits: ["update:installPath", "update:pathError"], + setup(__props) { + const { t } = useI18n(); + const installPath = useModel(__props, "installPath"); + const pathError = useModel(__props, "pathError"); + const appData = ref(""); + const appPath = ref(""); + const electron = electronAPI(); + onMounted(async () => { + const paths = await electron.getSystemPaths(); + appData.value = paths.appData; + appPath.value = paths.appPath; + installPath.value = paths.defaultInstallPath; + await validatePath(paths.defaultInstallPath); + }); + const validatePath = /* @__PURE__ */ __name(async (path) => { + try { + pathError.value = ""; + const validation = await electron.validateInstallPath(path); + if (!validation.isValid) { + pathError.value = validation.error; + } + } catch (error) { + pathError.value = t("install.pathValidationFailed"); + } + }, "validatePath"); + const browsePath = /* @__PURE__ */ __name(async () => { + try { + const result = await electron.showDirectoryPicker(); + if (result) { + installPath.value = result; + await validatePath(result); + } + } catch (error) { + pathError.value = t("install.failedToSelectDirectory"); + } + }, "browsePath"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1$3, [ + createBaseVNode("div", _hoisted_2$3, [ + createBaseVNode("h2", _hoisted_3$3, toDisplayString(_ctx.$t("install.chooseInstallationLocation")), 1), + createBaseVNode("p", _hoisted_4$3, toDisplayString(_ctx.$t("install.installLocationDescription")), 1), + createBaseVNode("div", _hoisted_5$2, [ + createVNode(unref(script$a), { class: "flex-1" }, { + default: withCtx(() => [ + createVNode(unref(script$8), { + modelValue: installPath.value, + "onUpdate:modelValue": [ + _cache[0] || (_cache[0] = ($event) => installPath.value = $event), + validatePath + ], + class: normalizeClass(["w-full", { "p-invalid": pathError.value }]) + }, null, 8, ["modelValue", "class"]), + withDirectives(createVNode(unref(script$9), { class: "pi pi-info-circle" }, null, 512), [ + [_directive_tooltip, _ctx.$t("install.installLocationTooltip")] + ]) + ]), + _: 1 + }), + createVNode(unref(script$b), { + icon: "pi pi-folder", + onClick: browsePath, + class: "w-12" + }) + ]), + pathError.value ? (openBlock(), createBlock(unref(script$c), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(pathError.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + createBaseVNode("div", _hoisted_6$2, [ + createBaseVNode("h3", _hoisted_7$2, toDisplayString(_ctx.$t("install.systemLocations")), 1), + createBaseVNode("div", _hoisted_8$2, [ + createBaseVNode("div", _hoisted_9$2, [ + _hoisted_10$2, + _hoisted_11$2, + createBaseVNode("span", _hoisted_12$2, toDisplayString(appData.value), 1), + withDirectives(createBaseVNode("span", _hoisted_13$2, null, 512), [ + [_directive_tooltip, _ctx.$t("install.appDataLocationTooltip")] + ]) + ]), + createBaseVNode("div", _hoisted_14$2, [ + _hoisted_15$2, + _hoisted_16$1, + createBaseVNode("span", _hoisted_17$1, toDisplayString(appPath.value), 1), + withDirectives(createBaseVNode("span", _hoisted_18$1, null, 512), [ + [_directive_tooltip, _ctx.$t("install.appPathLocationTooltip")] + ]) + ]) + ]) + ]) + ]); + }; + } +}); +const _hoisted_1$2 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$2 = { class: "flex flex-col gap-4" }; +const _hoisted_3$2 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$2 = { class: "text-neutral-400 my-0" }; +const _hoisted_5$1 = { class: "flex gap-2" }; +const _hoisted_6$1 = { + key: 0, + class: "flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg" +}; +const _hoisted_7$1 = { class: "text-lg mt-0 font-medium text-neutral-100" }; +const _hoisted_8$1 = { class: "flex flex-col gap-3" }; +const _hoisted_9$1 = ["onClick"]; +const _hoisted_10$1 = ["for"]; +const _hoisted_11$1 = { class: "text-sm text-neutral-400 my-1" }; +const _hoisted_12$1 = { class: "flex items-center gap-3 p-2 rounded cursor-not-allowed" }; +const _hoisted_13$1 = { class: "text-neutral-200 font-medium" }; +const _hoisted_14$1 = { class: "text-sm text-neutral-400 my-1" }; +const _hoisted_15$1 = { + key: 1, + class: "text-neutral-400 italic" +}; +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ + __name: "MigrationPicker", + props: { + "sourcePath": { required: false }, + "sourcePathModifiers": {}, + "migrationItemIds": { + required: false + }, + "migrationItemIdsModifiers": {} + }, + emits: ["update:sourcePath", "update:migrationItemIds"], + setup(__props) { + const { t } = useI18n(); + const electron = electronAPI(); + const sourcePath = useModel(__props, "sourcePath"); + const migrationItemIds = useModel(__props, "migrationItemIds"); + const migrationItems = ref( + MigrationItems.map((item) => ({ + ...item, + selected: true + })) + ); + const pathError = ref(""); + const isValidSource = computed( + () => sourcePath.value !== "" && pathError.value === "" + ); + const validateSource = /* @__PURE__ */ __name(async (sourcePath2) => { + if (!sourcePath2) { + pathError.value = ""; + return; + } + try { + pathError.value = ""; + const validation = await electron.validateComfyUISource(sourcePath2); + if (!validation.isValid) pathError.value = validation.error; + } catch (error) { + console.error(error); + pathError.value = t("install.pathValidationFailed"); + } + }, "validateSource"); + const browsePath = /* @__PURE__ */ __name(async () => { + try { + const result = await electron.showDirectoryPicker(); + if (result) { + sourcePath.value = result; + await validateSource(result); + } + } catch (error) { + console.error(error); + pathError.value = t("install.failedToSelectDirectory"); + } + }, "browsePath"); + watchEffect(() => { + migrationItemIds.value = migrationItems.value.filter((item) => item.selected).map((item) => item.id); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + createBaseVNode("div", _hoisted_2$2, [ + createBaseVNode("h2", _hoisted_3$2, toDisplayString(_ctx.$t("install.migrateFromExistingInstallation")), 1), + createBaseVNode("p", _hoisted_4$2, toDisplayString(_ctx.$t("install.migrationSourcePathDescription")), 1), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(script$8), { + modelValue: sourcePath.value, + "onUpdate:modelValue": [ + _cache[0] || (_cache[0] = ($event) => sourcePath.value = $event), + validateSource + ], + placeholder: "Select existing ComfyUI installation (optional)", + class: normalizeClass(["flex-1", { "p-invalid": pathError.value }]) + }, null, 8, ["modelValue", "class"]), + createVNode(unref(script$b), { + icon: "pi pi-folder", + onClick: browsePath, + class: "w-12" + }) + ]), + pathError.value ? (openBlock(), createBlock(unref(script$c), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(pathError.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + isValidSource.value ? (openBlock(), createElementBlock("div", _hoisted_6$1, [ + createBaseVNode("h3", _hoisted_7$1, toDisplayString(_ctx.$t("install.selectItemsToMigrate")), 1), + createBaseVNode("div", _hoisted_8$1, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(migrationItems.value, (item) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: "flex items-center gap-3 p-2 hover:bg-neutral-700 rounded", + onClick: /* @__PURE__ */ __name(($event) => item.selected = !item.selected, "onClick") + }, [ + createVNode(unref(script$d), { + modelValue: item.selected, + "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => item.selected = $event, "onUpdate:modelValue"), + inputId: item.id, + binary: true, + onClick: _cache[1] || (_cache[1] = withModifiers(() => { + }, ["stop"])) + }, null, 8, ["modelValue", "onUpdate:modelValue", "inputId"]), + createBaseVNode("div", null, [ + createBaseVNode("label", { + for: item.id, + class: "text-neutral-200 font-medium" + }, toDisplayString(item.label), 9, _hoisted_10$1), + createBaseVNode("p", _hoisted_11$1, toDisplayString(item.description), 1) + ]) + ], 8, _hoisted_9$1); + }), 128)), + createBaseVNode("div", _hoisted_12$1, [ + createVNode(unref(script$d), { + disabled: "", + binary: true + }), + createBaseVNode("div", null, [ + createBaseVNode("label", _hoisted_13$1, [ + createTextVNode(toDisplayString(_ctx.$t("install.customNodes")) + " ", 1), + createVNode(unref(script$e), { severity: "secondary" }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("g.comingSoon")) + "... ", 1) + ]), + _: 1 + }) + ]), + createBaseVNode("p", _hoisted_14$1, toDisplayString(_ctx.$t("install.customNodesDescription")), 1) + ]) + ]) + ]) + ])) : (openBlock(), createElementBlock("div", _hoisted_15$1, toDisplayString(_ctx.$t("install.migrationOptional")), 1)) + ]); + }; + } +}); +const _hoisted_1$1 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$1 = { class: "flex flex-col gap-4" }; +const _hoisted_3$1 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$1 = { class: "text-neutral-400 my-0" }; +const _hoisted_5 = { class: "flex flex-col bg-neutral-800 p-4 rounded-lg" }; +const _hoisted_6 = { class: "flex items-center gap-4" }; +const _hoisted_7 = { class: "flex-1" }; +const _hoisted_8 = { class: "text-lg font-medium text-neutral-100" }; +const _hoisted_9 = { class: "text-sm text-neutral-400 mt-1" }; +const _hoisted_10 = { class: "flex items-center gap-4" }; +const _hoisted_11 = { class: "flex-1" }; +const _hoisted_12 = { class: "text-lg font-medium text-neutral-100" }; +const _hoisted_13 = { class: "text-sm text-neutral-400 mt-1" }; +const _hoisted_14 = { class: "text-neutral-300" }; +const _hoisted_15 = { class: "font-medium mb-2" }; +const _hoisted_16 = { class: "list-disc pl-6 space-y-1" }; +const _hoisted_17 = { class: "font-medium mt-4 mb-2" }; +const _hoisted_18 = { class: "list-disc pl-6 space-y-1" }; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "DesktopSettingsConfiguration", + props: { + "autoUpdate": { required: true }, + "autoUpdateModifiers": {}, + "allowMetrics": { required: true }, + "allowMetricsModifiers": {} + }, + emits: ["update:autoUpdate", "update:allowMetrics"], + setup(__props) { + const showDialog = ref(false); + const autoUpdate = useModel(__props, "autoUpdate"); + const allowMetrics = useModel(__props, "allowMetrics"); + const showMetricsInfo = /* @__PURE__ */ __name(() => { + showDialog.value = true; + }, "showMetricsInfo"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$1, [ + createBaseVNode("div", _hoisted_2$1, [ + createBaseVNode("h2", _hoisted_3$1, toDisplayString(_ctx.$t("install.desktopAppSettings")), 1), + createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.$t("install.desktopAppSettingsDescription")), 1) + ]), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_6, [ + createBaseVNode("div", _hoisted_7, [ + createBaseVNode("h3", _hoisted_8, toDisplayString(_ctx.$t("install.settings.autoUpdate")), 1), + createBaseVNode("p", _hoisted_9, toDisplayString(_ctx.$t("install.settings.autoUpdateDescription")), 1) + ]), + createVNode(unref(script$f), { + modelValue: autoUpdate.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => autoUpdate.value = $event) + }, null, 8, ["modelValue"]) + ]), + createVNode(unref(script$g)), + createBaseVNode("div", _hoisted_10, [ + createBaseVNode("div", _hoisted_11, [ + createBaseVNode("h3", _hoisted_12, toDisplayString(_ctx.$t("install.settings.allowMetrics")), 1), + createBaseVNode("p", _hoisted_13, toDisplayString(_ctx.$t("install.settings.allowMetricsDescription")), 1), + createBaseVNode("a", { + href: "#", + class: "text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block", + onClick: withModifiers(showMetricsInfo, ["prevent"]) + }, toDisplayString(_ctx.$t("install.settings.learnMoreAboutData")), 1) + ]), + createVNode(unref(script$f), { + modelValue: allowMetrics.value, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => allowMetrics.value = $event) + }, null, 8, ["modelValue"]) + ]) + ]), + createVNode(unref(script$h), { + visible: showDialog.value, + "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => showDialog.value = $event), + modal: "", + header: _ctx.$t("install.settings.dataCollectionDialog.title") + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_14, [ + createBaseVNode("h4", _hoisted_15, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeCollect")), 1), + createBaseVNode("ul", _hoisted_16, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.errorReports")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.systemInfo")), 1) + ]), + createBaseVNode("h4", _hoisted_17, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeDoNotCollect")), 1), + createBaseVNode("ul", _hoisted_18, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.personalInformation")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.workflowContents")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.fileSystemInformation")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.customNodeConfigurations" + )), 1) + ]) + ]) + ]), + _: 1 + }, 8, ["visible", "header"]) + ]); + }; + } +}); +const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-7ef01cf2"), n = n(), popScopeId(), n), "_withScopeId"); +const _hoisted_1 = { class: "font-sans flex flex-col items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" }; +const _hoisted_2 = { class: "flex pt-6 justify-end" }; +const _hoisted_3 = { class: "flex pt-6 justify-between" }; +const _hoisted_4 = { class: "flex pt-6 justify-between" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "InstallView", + setup(__props) { + const installPath = ref(""); + const pathError = ref(""); + const migrationSourcePath = ref(""); + const migrationItemIds = ref([]); + const autoUpdate = ref(true); + const allowMetrics = ref(true); + const hasError = computed(() => pathError.value !== ""); + const router = useRouter(); + const install = /* @__PURE__ */ __name(() => { + const options = toRaw({ + installPath: installPath.value, + autoUpdate: autoUpdate.value, + allowMetrics: allowMetrics.value, + migrationSourcePath: migrationSourcePath.value, + migrationItemIds: toRaw(migrationItemIds.value) + }); + electronAPI().installComfyUI(options); + router.push("/server-start"); + }, "install"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createVNode(unref(script$6), { + class: "mt-[5vh] 2xl:mt-[20vh]", + value: "1" + }, { + default: withCtx(() => [ + createVNode(unref(script$5), null, { + default: withCtx(() => [ + createVNode(unref(script$3), { + value: "1", + disabled: hasError.value + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.installLocation")), 1) + ]), + _: 1 + }, 8, ["disabled"]), + createVNode(unref(script$3), { + value: "2", + disabled: hasError.value + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.migration")), 1) + ]), + _: 1 + }, 8, ["disabled"]), + createVNode(unref(script$3), { + value: "3", + disabled: hasError.value + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.desktopSettings")), 1) + ]), + _: 1 + }, 8, ["disabled"]) + ]), + _: 1 + }), + createVNode(unref(script$4), null, { + default: withCtx(() => [ + createVNode(unref(script), { value: "1" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$3, { + installPath: installPath.value, + "onUpdate:installPath": _cache[0] || (_cache[0] = ($event) => installPath.value = $event), + pathError: pathError.value, + "onUpdate:pathError": _cache[1] || (_cache[1] = ($event) => pathError.value = $event) + }, null, 8, ["installPath", "pathError"]), + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(script$b), { + label: "Next", + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick"), + disabled: pathError.value !== "" + }, null, 8, ["onClick", "disabled"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script), { value: "2" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$2, { + sourcePath: migrationSourcePath.value, + "onUpdate:sourcePath": _cache[2] || (_cache[2] = ($event) => migrationSourcePath.value = $event), + migrationItemIds: migrationItemIds.value, + "onUpdate:migrationItemIds": _cache[3] || (_cache[3] = ($event) => migrationItemIds.value = $event) + }, null, 8, ["sourcePath", "migrationItemIds"]), + createBaseVNode("div", _hoisted_3, [ + createVNode(unref(script$b), { + label: "Back", + severity: "secondary", + icon: "pi pi-arrow-left", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick") + }, null, 8, ["onClick"]), + createVNode(unref(script$b), { + label: "Next", + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("3"), "onClick") + }, null, 8, ["onClick"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script), { value: "3" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$1, { + autoUpdate: autoUpdate.value, + "onUpdate:autoUpdate": _cache[4] || (_cache[4] = ($event) => autoUpdate.value = $event), + allowMetrics: allowMetrics.value, + "onUpdate:allowMetrics": _cache[5] || (_cache[5] = ($event) => allowMetrics.value = $event) + }, null, 8, ["autoUpdate", "allowMetrics"]), + createBaseVNode("div", _hoisted_4, [ + createVNode(unref(script$b), { + label: "Back", + severity: "secondary", + icon: "pi pi-arrow-left", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick") + }, null, 8, ["onClick"]), + createVNode(unref(script$b), { + label: "Install", + icon: "pi pi-check", + iconPos: "right", + disabled: hasError.value, + onClick: _cache[6] || (_cache[6] = ($event) => install()) + }, null, 8, ["disabled"]) + ]) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]); + }; + } +}); +const InstallView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7ef01cf2"]]); +export { + InstallView as default +}; +//# sourceMappingURL=InstallView-D4T0qJ1I.js.map diff --git a/web/assets/InstallView-D4T0qJ1I.js.map b/web/assets/InstallView-D4T0qJ1I.js.map new file mode 100644 index 000000000..0fed60396 --- /dev/null +++ b/web/assets/InstallView-D4T0qJ1I.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InstallView-D4T0qJ1I.js","sources":["../../node_modules/primevue/stepper/style/index.mjs","../../node_modules/primevue/stepper/index.mjs","../../node_modules/primevue/steplist/style/index.mjs","../../node_modules/primevue/steplist/index.mjs","../../node_modules/primevue/steppanels/style/index.mjs","../../node_modules/primevue/steppanels/index.mjs","../../node_modules/primevue/step/style/index.mjs","../../node_modules/primevue/step/index.mjs","../../node_modules/primevue/steppanel/style/index.mjs","../../node_modules/primevue/steppanel/index.mjs","../../src/components/install/InstallLocationPicker.vue","../../src/components/install/MigrationPicker.vue","../../src/components/install/DesktopSettingsConfiguration.vue","../../src/views/InstallView.vue"],"sourcesContent":["import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-steplist {\\n position: relative;\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin: 0;\\n padding: 0;\\n list-style-type: none;\\n overflow-x: auto;\\n}\\n\\n.p-step {\\n position: relative;\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n gap: \".concat(dt('stepper.step.gap'), \";\\n padding: \").concat(dt('stepper.step.padding'), \";\\n}\\n\\n.p-step:last-of-type {\\n flex: initial;\\n}\\n\\n.p-step-header {\\n border: 0 none;\\n display: inline-flex;\\n align-items: center;\\n text-decoration: none;\\n cursor: pointer;\\n transition: background \").concat(dt('stepper.transition.duration'), \", color \").concat(dt('stepper.transition.duration'), \", border-color \").concat(dt('stepper.transition.duration'), \", outline-color \").concat(dt('stepper.transition.duration'), \", box-shadow \").concat(dt('stepper.transition.duration'), \";\\n border-radius: \").concat(dt('stepper.step.header.border.radius'), \";\\n outline-color: transparent;\\n background: transparent;\\n padding: \").concat(dt('stepper.step.header.padding'), \";\\n gap: \").concat(dt('stepper.step.header.gap'), \";\\n}\\n\\n.p-step-header:focus-visible {\\n box-shadow: \").concat(dt('stepper.step.header.focus.ring.shadow'), \";\\n outline: \").concat(dt('stepper.step.header.focus.ring.width'), \" \").concat(dt('stepper.step.header.focus.ring.style'), \" \").concat(dt('stepper.step.header.focus.ring.color'), \";\\n outline-offset: \").concat(dt('stepper.step.header.focus.ring.offset'), \";\\n}\\n\\n.p-stepper.p-stepper-readonly .p-step {\\n cursor: auto;\\n}\\n\\n.p-step-title {\\n display: block;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 100%;\\n color: \").concat(dt('stepper.step.title.color'), \";\\n font-weight: \").concat(dt('stepper.step.title.font.weight'), \";\\n transition: background \").concat(dt('stepper.transition.duration'), \", color \").concat(dt('stepper.transition.duration'), \", border-color \").concat(dt('stepper.transition.duration'), \", box-shadow \").concat(dt('stepper.transition.duration'), \", outline-color \").concat(dt('stepper.transition.duration'), \";\\n}\\n\\n.p-step-number {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: \").concat(dt('stepper.step.number.color'), \";\\n border: 2px solid \").concat(dt('stepper.step.number.border.color'), \";\\n background: \").concat(dt('stepper.step.number.background'), \";\\n min-width: \").concat(dt('stepper.step.number.size'), \";\\n height: \").concat(dt('stepper.step.number.size'), \";\\n line-height: \").concat(dt('stepper.step.number.size'), \";\\n font-size: \").concat(dt('stepper.step.number.font.size'), \";\\n z-index: 1;\\n border-radius: \").concat(dt('stepper.step.number.border.radius'), \";\\n position: relative;\\n font-weight: \").concat(dt('stepper.step.number.font.weight'), \";\\n}\\n\\n.p-step-number::after {\\n content: \\\" \\\";\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n border-radius: \").concat(dt('stepper.step.number.border.radius'), \";\\n box-shadow: \").concat(dt('stepper.step.number.shadow'), \";\\n}\\n\\n.p-step-active .p-step-header {\\n cursor: default;\\n}\\n\\n.p-step-active .p-step-number {\\n background: \").concat(dt('stepper.step.number.active.background'), \";\\n border-color: \").concat(dt('stepper.step.number.active.border.color'), \";\\n color: \").concat(dt('stepper.step.number.active.color'), \";\\n}\\n\\n.p-step-active .p-step-title {\\n color: \").concat(dt('stepper.step.title.active.color'), \";\\n}\\n\\n.p-step:not(.p-disabled):focus-visible {\\n outline: \").concat(dt('focus.ring.width'), \" \").concat(dt('focus.ring.style'), \" \").concat(dt('focus.ring.color'), \";\\n outline-offset: \").concat(dt('focus.ring.offset'), \";\\n}\\n\\n.p-step:has(~ .p-step-active) .p-stepper-separator {\\n background: \").concat(dt('stepper.separator.active.background'), \";\\n}\\n\\n.p-stepper-separator {\\n flex: 1 1 0;\\n background: \").concat(dt('stepper.separator.background'), \";\\n width: 100%;\\n height: \").concat(dt('stepper.separator.size'), \";\\n transition: background \").concat(dt('stepper.transition.duration'), \", color \").concat(dt('stepper.transition.duration'), \", border-color \").concat(dt('stepper.transition.duration'), \", box-shadow \").concat(dt('stepper.transition.duration'), \", outline-color \").concat(dt('stepper.transition.duration'), \";\\n}\\n\\n.p-steppanels {\\n padding: \").concat(dt('stepper.steppanels.padding'), \";\\n}\\n\\n.p-steppanel {\\n background: \").concat(dt('stepper.steppanel.background'), \";\\n color: \").concat(dt('stepper.steppanel.color'), \";\\n}\\n\\n.p-stepper:has(.p-stepitem) {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.p-stepitem {\\n display: flex;\\n flex-direction: column;\\n flex: initial;\\n}\\n\\n.p-stepitem.p-stepitem-active {\\n flex: 1 1 auto;\\n}\\n\\n.p-stepitem .p-step {\\n flex: initial;\\n}\\n\\n.p-stepitem .p-steppanel-content {\\n width: 100%;\\n padding: \").concat(dt('stepper.steppanel.padding'), \";\\n}\\n\\n.p-stepitem .p-steppanel {\\n display: flex;\\n flex: 1 1 auto;\\n}\\n\\n.p-stepitem .p-stepper-separator {\\n flex: 0 0 auto;\\n width: \").concat(dt('stepper.separator.size'), \";\\n height: auto;\\n margin: \").concat(dt('stepper.separator.margin'), \";\\n position: relative;\\n left: calc(-1 * \").concat(dt('stepper.separator.size'), \");\\n}\\n\\n.p-stepitem:has(~ .p-stepitem-active) .p-stepper-separator {\\n background: \").concat(dt('stepper.separator.active.background'), \";\\n}\\n\\n.p-stepitem:last-of-type .p-steppanel {\\n padding-inline-start: \").concat(dt('stepper.step.number.size'), \";\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-stepper p-component', {\n 'p-readonly': props.linear\n }];\n },\n separator: 'p-stepper-separator'\n};\nvar StepperStyle = BaseStyle.extend({\n name: 'stepper',\n theme: theme,\n classes: classes\n});\n\nexport { StepperStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport StepperStyle from 'primevue/stepper/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseStepper',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n linear: {\n type: Boolean,\n \"default\": false\n }\n },\n style: StepperStyle,\n provide: function provide() {\n return {\n $pcStepper: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Stepper',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:value'],\n data: function data() {\n return {\n id: this.$attrs.id,\n d_value: this.value\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n value: function value(newValue) {\n this.d_value = newValue;\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n },\n methods: {\n updateValue: function updateValue(newValue) {\n if (this.d_value !== newValue) {\n this.d_value = newValue;\n this.$emit('update:value', newValue);\n }\n },\n isStepActive: function isStepActive(value) {\n return this.d_value === value;\n },\n isStepDisabled: function isStepDisabled() {\n return this.linear;\n }\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"tablist\"\n }, _ctx.ptmi('root')), [_ctx.$slots.start ? renderSlot(_ctx.$slots, \"start\", {\n key: 0\n }) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, \"default\"), _ctx.$slots.end ? renderSlot(_ctx.$slots, \"end\", {\n key: 1\n }) : createCommentVNode(\"\", true)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: 'p-steplist'\n};\nvar StepListStyle = BaseStyle.extend({\n name: 'steplist',\n classes: classes\n});\n\nexport { StepListStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport StepListStyle from 'primevue/steplist/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseStepList',\n \"extends\": BaseComponent,\n style: StepListStyle,\n provide: function provide() {\n return {\n $pcStepList: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'StepList',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: 'p-steppanels'\n};\nvar StepPanelsStyle = BaseStyle.extend({\n name: 'steppanels',\n classes: classes\n});\n\nexport { StepPanelsStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport StepPanelsStyle from 'primevue/steppanels/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseStepPanels',\n \"extends\": BaseComponent,\n style: StepPanelsStyle,\n provide: function provide() {\n return {\n $pcStepPanels: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'StepPanels',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: function root(_ref) {\n var instance = _ref.instance;\n return ['p-step', {\n 'p-step-active': instance.active,\n 'p-disabled': instance.isStepDisabled\n }];\n },\n header: 'p-step-header',\n number: 'p-step-number',\n title: 'p-step-title'\n};\nvar StepStyle = BaseStyle.extend({\n name: 'step',\n classes: classes\n});\n\nexport { StepStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { find } from '@primeuix/utils/dom';\nimport { findIndexInList } from '@primeuix/utils/object';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport { openBlock, createElementBlock, mergeProps, resolveComponent, createBlock, resolveDynamicComponent, withCtx, createElementVNode, toDisplayString, renderSlot, createCommentVNode, normalizeClass } from 'vue';\nimport StepStyle from 'primevue/step/style';\n\nvar script$2 = {\n name: 'StepperSeparator',\n hostName: 'Stepper',\n \"extends\": BaseComponent\n};\n\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('separator')\n }, _ctx.ptm('separator')), null, 16);\n}\n\nscript$2.render = render$1;\n\nvar script$1 = {\n name: 'BaseStep',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n asChild: {\n type: Boolean,\n \"default\": false\n },\n as: {\n type: [String, Object],\n \"default\": 'DIV'\n }\n },\n style: StepStyle,\n provide: function provide() {\n return {\n $pcStep: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Step',\n \"extends\": script$1,\n inheritAttrs: false,\n inject: {\n $pcStepper: {\n \"default\": null\n },\n $pcStepList: {\n \"default\": null\n },\n $pcStepItem: {\n \"default\": null\n }\n },\n data: function data() {\n return {\n isSeparatorVisible: false\n };\n },\n mounted: function mounted() {\n if (this.$el && this.$pcStepList) {\n var index = findIndexInList(this.$el, find(this.$pcStepper.$el, '[data-pc-name=\"step\"]'));\n var stepLen = find(this.$pcStepper.$el, '[data-pc-name=\"step\"]').length;\n this.isSeparatorVisible = index !== stepLen - 1;\n }\n },\n methods: {\n getPTOptions: function getPTOptions(key) {\n var _ptm = key === 'root' ? this.ptmi : this.ptm;\n return _ptm(key, {\n context: {\n active: this.active,\n disabled: this.isStepDisabled\n }\n });\n },\n onStepClick: function onStepClick() {\n this.$pcStepper.updateValue(this.activeValue);\n }\n },\n computed: {\n active: function active() {\n return this.$pcStepper.isStepActive(this.activeValue);\n },\n activeValue: function activeValue() {\n var _this$$pcStepItem;\n return !!this.$pcStepItem ? (_this$$pcStepItem = this.$pcStepItem) === null || _this$$pcStepItem === void 0 ? void 0 : _this$$pcStepItem.value : this.value;\n },\n isStepDisabled: function isStepDisabled() {\n return !this.active && (this.$pcStepper.isStepDisabled() || this.disabled);\n },\n id: function id() {\n var _this$$pcStepper;\n return \"\".concat((_this$$pcStepper = this.$pcStepper) === null || _this$$pcStepper === void 0 ? void 0 : _this$$pcStepper.id, \"_step_\").concat(this.activeValue);\n },\n ariaControls: function ariaControls() {\n var _this$$pcStepper2;\n return \"\".concat((_this$$pcStepper2 = this.$pcStepper) === null || _this$$pcStepper2 === void 0 ? void 0 : _this$$pcStepper2.id, \"_steppanel_\").concat(this.activeValue);\n },\n a11yAttrs: function a11yAttrs() {\n return {\n root: {\n role: 'presentation',\n 'aria-current': this.active ? 'step' : undefined,\n 'data-pc-name': 'step',\n 'data-pc-section': 'root',\n 'data-p-disabled': this.disabled,\n 'data-p-active': this.active\n },\n header: {\n id: this.id,\n role: 'tab',\n taindex: this.disabled ? -1 : undefined,\n 'aria-controls': this.ariaControls,\n 'data-pc-section': 'header',\n disabled: this.disabled,\n onClick: this.onStepClick\n }\n };\n }\n },\n components: {\n StepperSeparator: script$2\n }\n};\n\nvar _hoisted_1 = [\"id\", \"tabindex\", \"aria-controls\", \"disabled\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_StepperSeparator = resolveComponent(\"StepperSeparator\");\n return !_ctx.asChild ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({\n key: 0,\n \"class\": _ctx.cx('root'),\n \"aria-current\": $options.active ? 'step' : undefined,\n role: \"presentation\",\n \"data-p-active\": $options.active,\n \"data-p-disabled\": $options.isStepDisabled\n }, $options.getPTOptions('root')), {\n \"default\": withCtx(function () {\n return [createElementVNode(\"button\", mergeProps({\n id: $options.id,\n \"class\": _ctx.cx('header'),\n role: \"tab\",\n type: \"button\",\n tabindex: $options.isStepDisabled ? -1 : undefined,\n \"aria-controls\": $options.ariaControls,\n disabled: $options.isStepDisabled,\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.onStepClick && $options.onStepClick.apply($options, arguments);\n })\n }, $options.getPTOptions('header')), [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('number')\n }, $options.getPTOptions('number')), toDisplayString($options.activeValue), 17), createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('title')\n }, $options.getPTOptions('title')), [renderSlot(_ctx.$slots, \"default\")], 16)], 16, _hoisted_1), $data.isSeparatorVisible ? (openBlock(), createBlock(_component_StepperSeparator, {\n key: 0\n })) : createCommentVNode(\"\", true)];\n }),\n _: 3\n }, 16, [\"class\", \"aria-current\", \"data-p-active\", \"data-p-disabled\"])) : renderSlot(_ctx.$slots, \"default\", {\n key: 1,\n \"class\": normalizeClass(_ctx.cx('root')),\n active: $options.active,\n value: _ctx.value,\n a11yAttrs: $options.a11yAttrs,\n activateCallback: $options.onStepClick\n });\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: function root(_ref) {\n var instance = _ref.instance;\n return ['p-steppanel', {\n 'p-steppanel-active': instance.isVertical && instance.active\n }];\n },\n content: 'p-steppanel-content'\n};\nvar StepPanelStyle = BaseStyle.extend({\n name: 'steppanel',\n classes: classes\n});\n\nexport { StepPanelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { find, findSingle } from '@primeuix/utils/dom';\nimport { findIndexInList } from '@primeuix/utils/object';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport { openBlock, createElementBlock, mergeProps, resolveComponent, Fragment, createBlock, Transition, withCtx, withDirectives, resolveDynamicComponent, createCommentVNode, createElementVNode, renderSlot, vShow } from 'vue';\nimport StepPanelStyle from 'primevue/steppanel/style';\n\nvar script$2 = {\n name: 'StepperSeparator',\n hostName: 'Stepper',\n \"extends\": BaseComponent\n};\n\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('separator')\n }, _ctx.ptm('separator')), null, 16);\n}\n\nscript$2.render = render$1;\n\nvar script$1 = {\n name: 'BaseStepPanel',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n asChild: {\n type: Boolean,\n \"default\": false\n },\n as: {\n type: [String, Object],\n \"default\": 'DIV'\n }\n },\n style: StepPanelStyle,\n provide: function provide() {\n return {\n $pcStepPanel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'StepPanel',\n \"extends\": script$1,\n inheritAttrs: false,\n inject: {\n $pcStepper: {\n \"default\": null\n },\n $pcStepItem: {\n \"default\": null\n },\n $pcStepList: {\n \"default\": null\n }\n },\n data: function data() {\n return {\n isSeparatorVisible: false\n };\n },\n mounted: function mounted() {\n if (this.$el) {\n var _this$$pcStepItem, _this$$pcStepList;\n var stepElements = find(this.$pcStepper.$el, '[data-pc-name=\"step\"]');\n var stepPanelEl = findSingle(this.isVertical ? (_this$$pcStepItem = this.$pcStepItem) === null || _this$$pcStepItem === void 0 ? void 0 : _this$$pcStepItem.$el : (_this$$pcStepList = this.$pcStepList) === null || _this$$pcStepList === void 0 ? void 0 : _this$$pcStepList.$el, '[data-pc-name=\"step\"]');\n var stepPanelIndex = findIndexInList(stepPanelEl, stepElements);\n this.isSeparatorVisible = this.isVertical && stepPanelIndex !== stepElements.length - 1;\n }\n },\n methods: {\n getPTOptions: function getPTOptions(key) {\n var _ptm = key === 'root' ? this.ptmi : this.ptm;\n return _ptm(key, {\n context: {\n active: this.active\n }\n });\n },\n updateValue: function updateValue(val) {\n this.$pcStepper.updateValue(val);\n }\n },\n computed: {\n active: function active() {\n var _this$$pcStepItem2, _this$$pcStepper;\n var activeValue = !!this.$pcStepItem ? (_this$$pcStepItem2 = this.$pcStepItem) === null || _this$$pcStepItem2 === void 0 ? void 0 : _this$$pcStepItem2.value : this.value;\n return activeValue === ((_this$$pcStepper = this.$pcStepper) === null || _this$$pcStepper === void 0 ? void 0 : _this$$pcStepper.d_value);\n },\n isVertical: function isVertical() {\n return !!this.$pcStepItem;\n },\n activeValue: function activeValue() {\n var _this$$pcStepItem3;\n return this.isVertical ? (_this$$pcStepItem3 = this.$pcStepItem) === null || _this$$pcStepItem3 === void 0 ? void 0 : _this$$pcStepItem3.value : this.value;\n },\n id: function id() {\n var _this$$pcStepper2;\n return \"\".concat((_this$$pcStepper2 = this.$pcStepper) === null || _this$$pcStepper2 === void 0 ? void 0 : _this$$pcStepper2.id, \"_steppanel_\").concat(this.activeValue);\n },\n ariaControls: function ariaControls() {\n var _this$$pcStepper3;\n return \"\".concat((_this$$pcStepper3 = this.$pcStepper) === null || _this$$pcStepper3 === void 0 ? void 0 : _this$$pcStepper3.id, \"_step_\").concat(this.activeValue);\n },\n a11yAttrs: function a11yAttrs() {\n return {\n id: this.id,\n role: 'tabpanel',\n 'aria-controls': this.ariaControls,\n 'data-pc-name': 'steppanel',\n 'data-p-active': this.active\n };\n }\n },\n components: {\n StepperSeparator: script$2\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_StepperSeparator = resolveComponent(\"StepperSeparator\");\n return $options.isVertical ? (openBlock(), createElementBlock(Fragment, {\n key: 0\n }, [!_ctx.asChild ? (openBlock(), createBlock(Transition, mergeProps({\n key: 0,\n name: \"p-toggleable-content\"\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({\n id: $options.id,\n \"class\": _ctx.cx('root'),\n role: \"tabpanel\",\n \"aria-controls\": $options.ariaControls\n }, $options.getPTOptions('root')), {\n \"default\": withCtx(function () {\n return [$data.isSeparatorVisible ? (openBlock(), createBlock(_component_StepperSeparator, {\n key: 0\n })) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('content')\n }, $options.getPTOptions('content')), [renderSlot(_ctx.$slots, \"default\", {\n active: $options.active,\n activateCallback: function activateCallback(val) {\n return $options.updateValue(val);\n }\n })], 16)];\n }),\n _: 3\n }, 16, [\"id\", \"class\", \"aria-controls\"])), [[vShow, $options.active]])];\n }),\n _: 3\n }, 16)) : renderSlot(_ctx.$slots, \"default\", {\n key: 1,\n active: $options.active,\n a11yAttrs: $options.a11yAttrs,\n activateCallback: function activateCallback(val) {\n return $options.updateValue(val);\n }\n })], 64)) : (openBlock(), createElementBlock(Fragment, {\n key: 1\n }, [!_ctx.asChild ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({\n key: 0,\n id: $options.id,\n \"class\": _ctx.cx('root'),\n role: \"tabpanel\",\n \"aria-controls\": $options.ariaControls\n }, $options.getPTOptions('root')), {\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, \"default\", {\n active: $options.active,\n activateCallback: function activateCallback(val) {\n return $options.updateValue(val);\n }\n })];\n }),\n _: 3\n }, 16, [\"id\", \"class\", \"aria-controls\"])), [[vShow, $options.active]]) : _ctx.asChild && $options.active ? renderSlot(_ctx.$slots, \"default\", {\n key: 1,\n active: $options.active,\n a11yAttrs: $options.a11yAttrs,\n activateCallback: function activateCallback(val) {\n return $options.updateValue(val);\n }\n }) : createCommentVNode(\"\", true)], 64));\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n"],"names":["theme","classes","script$1","BaseComponent","script","value","render","provide","root","script$2","render$1","data","mounted","isStepDisabled","_hoisted_1","createElementVNode","getPTOptions","updateValue","active","activeValue","id","ariaControls","a11yAttrs","_useModel","sourcePath"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]} \ No newline at end of file diff --git a/web/assets/KeybindingPanel-BlOA8Yhu.js b/web/assets/KeybindingPanel-BlOA8Yhu.js new file mode 100644 index 000000000..c23a6ce50 --- /dev/null +++ b/web/assets/KeybindingPanel-BlOA8Yhu.js @@ -0,0 +1,281 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, q as computed, f as openBlock, g as createElementBlock, P as Fragment, Q as renderList, h as createVNode, y as withCtx, ay as createTextVNode, a8 as toDisplayString, z as unref, aC as script, i as createCommentVNode, r as ref, ck as FilterMatchMode, O as useKeybindingStore, F as useCommandStore, I as useI18n, aS as normalizeI18nKey, aL as watchEffect, bn as useToast, t as resolveDirective, x as createBlock, cl as SearchBox, A as createBaseVNode, D as script$2, aq as script$4, br as withModifiers, bW as script$5, aI as script$6, v as withDirectives, cm as _sfc_main$2, R as pushScopeId, U as popScopeId, ce as KeyComboImpl, cn as KeybindingImpl, _ as _export_sfc } from "./index-CSl7lfOs.js"; +import { s as script$1, a as script$3 } from "./index-CgmI-OoW.js"; +import "./index-aSkd2KAK.js"; +const _hoisted_1$1 = { + key: 0, + class: "px-2" +}; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "KeyComboDisplay", + props: { + keyCombo: {}, + isModified: { type: Boolean, default: false } + }, + setup(__props) { + const props = __props; + const keySequences = computed(() => props.keyCombo.getKeySequences()); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("span", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => { + return openBlock(), createElementBlock(Fragment, { key: index }, [ + createVNode(unref(script), { + severity: _ctx.isModified ? "info" : "secondary" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(sequence), 1) + ]), + _: 2 + }, 1032, ["severity"]), + index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true) + ], 64); + }), 128)) + ]); + }; + } +}); +const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c20ad403"), n = n(), popScopeId(), n), "_withScopeId"); +const _hoisted_1 = { class: "actions invisible flex flex-row" }; +const _hoisted_2 = ["title"]; +const _hoisted_3 = { key: 1 }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "KeybindingPanel", + setup(__props) { + const filters = ref({ + global: { value: "", matchMode: FilterMatchMode.CONTAINS } + }); + const keybindingStore = useKeybindingStore(); + const commandStore = useCommandStore(); + const { t } = useI18n(); + const commandsData = computed(() => { + return Object.values(commandStore.commands).map((command) => ({ + id: command.id, + label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label), + keybinding: keybindingStore.getKeybindingByCommandId(command.id) + })); + }); + const selectedCommandData = ref(null); + const editDialogVisible = ref(false); + const newBindingKeyCombo = ref(null); + const currentEditingCommand = ref(null); + const keybindingInput = ref(null); + const existingKeybindingOnCombo = computed(() => { + if (!currentEditingCommand.value) { + return null; + } + if (currentEditingCommand.value.keybinding?.combo?.equals( + newBindingKeyCombo.value + )) { + return null; + } + if (!newBindingKeyCombo.value) { + return null; + } + return keybindingStore.getKeybinding(newBindingKeyCombo.value); + }); + function editKeybinding(commandData) { + currentEditingCommand.value = commandData; + newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null; + editDialogVisible.value = true; + } + __name(editKeybinding, "editKeybinding"); + watchEffect(() => { + if (editDialogVisible.value) { + setTimeout(() => { + keybindingInput.value?.$el?.focus(); + }, 300); + } + }); + function removeKeybinding(commandData) { + if (commandData.keybinding) { + keybindingStore.unsetKeybinding(commandData.keybinding); + keybindingStore.persistUserKeybindings(); + } + } + __name(removeKeybinding, "removeKeybinding"); + function captureKeybinding(event) { + const keyCombo = KeyComboImpl.fromEvent(event); + newBindingKeyCombo.value = keyCombo; + } + __name(captureKeybinding, "captureKeybinding"); + function cancelEdit() { + editDialogVisible.value = false; + currentEditingCommand.value = null; + newBindingKeyCombo.value = null; + } + __name(cancelEdit, "cancelEdit"); + function saveKeybinding() { + if (currentEditingCommand.value && newBindingKeyCombo.value) { + const updated = keybindingStore.updateKeybindingOnCommand( + new KeybindingImpl({ + commandId: currentEditingCommand.value.id, + combo: newBindingKeyCombo.value + }) + ); + if (updated) { + keybindingStore.persistUserKeybindings(); + } + } + cancelEdit(); + } + __name(saveKeybinding, "saveKeybinding"); + const toast = useToast(); + async function resetKeybindings() { + keybindingStore.resetKeybindings(); + await keybindingStore.persistUserKeybindings(); + toast.add({ + severity: "info", + summary: "Info", + detail: "Keybindings reset", + life: 3e3 + }); + } + __name(resetKeybindings, "resetKeybindings"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(_sfc_main$2, { + value: "Keybinding", + class: "keybinding-panel" + }, { + header: withCtx(() => [ + createVNode(SearchBox, { + modelValue: filters.value["global"].value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event), + placeholder: _ctx.$t("g.searchKeybindings") + "..." + }, null, 8, ["modelValue", "placeholder"]) + ]), + default: withCtx(() => [ + createVNode(unref(script$3), { + value: commandsData.value, + selection: selectedCommandData.value, + "onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event), + "global-filter-fields": ["id"], + filters: filters.value, + selectionMode: "single", + stripedRows: "", + pt: { + header: "px-0" + } + }, { + default: withCtx(() => [ + createVNode(unref(script$1), { + field: "actions", + header: "" + }, { + body: withCtx((slotProps) => [ + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script$2), { + icon: "pi pi-pencil", + class: "p-button-text", + onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick") + }, null, 8, ["onClick"]), + createVNode(unref(script$2), { + icon: "pi pi-trash", + class: "p-button-text p-button-danger", + onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"), + disabled: !slotProps.data.keybinding + }, null, 8, ["onClick", "disabled"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script$1), { + field: "id", + header: "Command ID", + sortable: "", + class: "max-w-64 2xl:max-w-full" + }, { + body: withCtx((slotProps) => [ + createBaseVNode("div", { + class: "overflow-hidden text-ellipsis whitespace-nowrap", + title: slotProps.data.id + }, toDisplayString(slotProps.data.label), 9, _hoisted_2) + ]), + _: 1 + }), + createVNode(unref(script$1), { + field: "keybinding", + header: "Keybinding" + }, { + body: withCtx((slotProps) => [ + slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, { + key: 0, + keyCombo: slotProps.data.keybinding.combo, + isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id) + }, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-")) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["value", "selection", "filters"]), + createVNode(unref(script$6), { + class: "min-w-96", + visible: editDialogVisible.value, + "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event), + modal: "", + header: currentEditingCommand.value?.id, + onHide: cancelEdit + }, { + footer: withCtx(() => [ + createVNode(unref(script$2), { + label: "Save", + icon: "pi pi-check", + onClick: saveKeybinding, + disabled: !!existingKeybindingOnCombo.value, + autofocus: "" + }, null, 8, ["disabled"]) + ]), + default: withCtx(() => [ + createBaseVNode("div", null, [ + createVNode(unref(script$4), { + class: "mb-2 text-center", + ref_key: "keybindingInput", + ref: keybindingInput, + modelValue: newBindingKeyCombo.value?.toString() ?? "", + placeholder: "Press keys for new binding", + onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]), + autocomplete: "off", + fluid: "", + invalid: !!existingKeybindingOnCombo.value + }, null, 8, ["modelValue", "invalid"]), + existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(" Keybinding already exists on "), + createVNode(unref(script), { + severity: "secondary", + value: existingKeybindingOnCombo.value.commandId + }, null, 8, ["value"]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]), + _: 1 + }, 8, ["visible", "header"]), + withDirectives(createVNode(unref(script$2), { + class: "mt-4", + label: _ctx.$t("g.reset"), + icon: "pi pi-trash", + severity: "danger", + fluid: "", + text: "", + onClick: resetKeybindings + }, null, 8, ["label"]), [ + [_directive_tooltip, _ctx.$t("g.resetKeybindingsTooltip")] + ]) + ]), + _: 1 + }); + }; + } +}); +const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c20ad403"]]); +export { + KeybindingPanel as default +}; +//# sourceMappingURL=KeybindingPanel-BlOA8Yhu.js.map diff --git a/web/assets/KeybindingPanel-BlOA8Yhu.js.map b/web/assets/KeybindingPanel-BlOA8Yhu.js.map new file mode 100644 index 000000000..02141bad2 --- /dev/null +++ b/web/assets/KeybindingPanel-BlOA8Yhu.js.map @@ -0,0 +1 @@ +{"version":3,"file":"KeybindingPanel-BlOA8Yhu.js","sources":["../../src/components/dialog/content/setting/keybinding/KeyComboDisplay.vue","../../src/components/dialog/content/setting/KeybindingPanel.vue"],"sourcesContent":["\n\n\n","\n\n\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgBA,UAAM,QAAQ;AAUd,UAAM,eAAe,SAAS,MAAM,MAAM,SAAS,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgHpE,UAAM,UAAU,IAAI;AAAA,MAClB,QAAQ,EAAE,OAAO,IAAI,WAAW,gBAAgB,SAAS;AAAA,IAAA,CAC1D;AAED,UAAM,kBAAkB;AACxB,UAAM,eAAe;AACf,UAAA,EAAE,MAAM;AAOR,UAAA,eAAe,SAAyB,MAAM;AAClD,aAAO,OAAO,OAAO,aAAa,QAAQ,EAAE,IAAI,CAAC,aAAa;AAAA,QAC5D,IAAI,QAAQ;AAAA,QACZ,OAAO,EAAE,YAAY,iBAAiB,QAAQ,EAAE,CAAC,UAAU,QAAQ,KAAK;AAAA,QACxE,YAAY,gBAAgB,yBAAyB,QAAQ,EAAE;AAAA,MAC/D,EAAA;AAAA,IAAA,CACH;AAEK,UAAA,sBAAsB,IAAyB,IAAI;AACnD,UAAA,oBAAoB,IAAI,KAAK;AAC7B,UAAA,qBAAqB,IAAyB,IAAI;AAClD,UAAA,wBAAwB,IAAyB,IAAI;AACrD,UAAA,kBAAkB,IAAI,IAAI;AAE1B,UAAA,4BAA4B,SAAgC,MAAM;AAClE,UAAA,CAAC,sBAAsB,OAAO;AACzB,eAAA;AAAA,MACT;AAIE,UAAA,sBAAsB,MAAM,YAAY,OAAO;AAAA,QAC7C,mBAAmB;AAAA,MAAA,GAErB;AACO,eAAA;AAAA,MACT;AAEI,UAAA,CAAC,mBAAmB,OAAO;AACtB,eAAA;AAAA,MACT;AAEO,aAAA,gBAAgB,cAAc,mBAAmB,KAAK;AAAA,IAAA,CAC9D;AAED,aAAS,eAAe,aAA2B;AACjD,4BAAsB,QAAQ;AAC9B,yBAAmB,QAAQ,YAAY,aACnC,YAAY,WAAW,QACvB;AACJ,wBAAkB,QAAQ;AAAA,IAC5B;AANS;AAQT,gBAAY,MAAM;AAChB,UAAI,kBAAkB,OAAO;AAE3B,mBAAW,MAAM;AACC,0BAAA,OAAO,KAAK;WAC3B,GAAG;AAAA,MACR;AAAA,IAAA,CACD;AAED,aAAS,iBAAiB,aAA2B;AACnD,UAAI,YAAY,YAAY;AACV,wBAAA,gBAAgB,YAAY,UAAU;AACtD,wBAAgB,uBAAuB;AAAA,MACzC;AAAA,IACF;AALS;AAOT,aAAS,kBAAkB,OAAsB;AACzC,YAAA,WAAW,aAAa,UAAU,KAAK;AAC7C,yBAAmB,QAAQ;AAAA,IAC7B;AAHS;AAKT,aAAS,aAAa;AACpB,wBAAkB,QAAQ;AAC1B,4BAAsB,QAAQ;AAC9B,yBAAmB,QAAQ;AAAA,IAC7B;AAJS;AAMT,aAAS,iBAAiB;AACpB,UAAA,sBAAsB,SAAS,mBAAmB,OAAO;AAC3D,cAAM,UAAU,gBAAgB;AAAA,UAC9B,IAAI,eAAe;AAAA,YACjB,WAAW,sBAAsB,MAAM;AAAA,YACvC,OAAO,mBAAmB;AAAA,UAAA,CAC3B;AAAA,QAAA;AAEH,YAAI,SAAS;AACX,0BAAgB,uBAAuB;AAAA,QACzC;AAAA,MACF;AACW;IACb;AAbS;AAeT,UAAM,QAAQ;AACd,mBAAe,mBAAmB;AAChC,sBAAgB,iBAAiB;AACjC,YAAM,gBAAgB;AACtB,YAAM,IAAI;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AATe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/KeybindingPanel-C3wT8hYZ.css b/web/assets/KeybindingPanel-C3wT8hYZ.css new file mode 100644 index 000000000..2a6bf2338 --- /dev/null +++ b/web/assets/KeybindingPanel-C3wT8hYZ.css @@ -0,0 +1,8 @@ + +[data-v-c20ad403] .p-datatable-tbody > tr > td { + padding: 0.25rem; + min-height: 2rem +} +[data-v-c20ad403] .p-datatable-row-selected .actions,[data-v-c20ad403] .p-datatable-selectable-row:hover .actions { + visibility: visible +} diff --git a/web/assets/NotSupportedView-Dhitj9aO.js b/web/assets/NotSupportedView-Dhitj9aO.js new file mode 100644 index 000000000..9dbe8ccce --- /dev/null +++ b/web/assets/NotSupportedView-Dhitj9aO.js @@ -0,0 +1,82 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, bU as useRouter, t as resolveDirective, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, v as withDirectives } from "./index-CSl7lfOs.js"; +const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href; +const _hoisted_1 = { class: "font-sans w-screen h-screen flex items-center m-0 text-neutral-900 bg-neutral-300 pointer-events-auto" }; +const _hoisted_2 = { class: "flex-grow flex items-center justify-center" }; +const _hoisted_3 = { class: "flex flex-col gap-8 p-8" }; +const _hoisted_4 = { class: "text-4xl font-bold text-red-500" }; +const _hoisted_5 = { class: "space-y-4" }; +const _hoisted_6 = { class: "text-xl" }; +const _hoisted_7 = { class: "list-disc list-inside space-y-1 text-neutral-800" }; +const _hoisted_8 = { class: "flex gap-4" }; +const _hoisted_9 = /* @__PURE__ */ createBaseVNode("div", { class: "h-screen flex-grow-0" }, [ + /* @__PURE__ */ createBaseVNode("img", { + src: _imports_0, + alt: "Sad girl illustration", + class: "h-full object-cover" + }) +], -1); +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "NotSupportedView", + setup(__props) { + const openDocs = /* @__PURE__ */ __name(() => { + window.open( + "https://github.com/Comfy-Org/desktop#currently-supported-platforms", + "_blank" + ); + }, "openDocs"); + const reportIssue = /* @__PURE__ */ __name(() => { + window.open("https://forum.comfy.org/c/v1-feedback/", "_blank"); + }, "reportIssue"); + const router = useRouter(); + const continueToInstall = /* @__PURE__ */ __name(() => { + router.push("/install"); + }, "continueToInstall"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("notSupported.title")), 1), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("notSupported.message")), 1), + createBaseVNode("ul", _hoisted_7, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1) + ]) + ]), + createBaseVNode("div", _hoisted_8, [ + createVNode(unref(script), { + label: _ctx.$t("notSupported.learnMore"), + icon: "pi pi-github", + onClick: openDocs, + severity: "secondary" + }, null, 8, ["label"]), + createVNode(unref(script), { + label: _ctx.$t("notSupported.reportIssue"), + icon: "pi pi-flag", + onClick: reportIssue, + severity: "secondary" + }, null, 8, ["label"]), + withDirectives(createVNode(unref(script), { + label: _ctx.$t("notSupported.continue"), + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: continueToInstall, + severity: "danger" + }, null, 8, ["label"]), [ + [_directive_tooltip, _ctx.$t("notSupported.continueTooltip")] + ]) + ]) + ]) + ]), + _hoisted_9 + ]); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=NotSupportedView-Dhitj9aO.js.map diff --git a/web/assets/NotSupportedView-Dhitj9aO.js.map b/web/assets/NotSupportedView-Dhitj9aO.js.map new file mode 100644 index 000000000..e93fe8841 --- /dev/null +++ b/web/assets/NotSupportedView-Dhitj9aO.js.map @@ -0,0 +1 @@ +{"version":3,"file":"NotSupportedView-Dhitj9aO.js","sources":["../../../../../../../assets/images/sad_girl.png","../../src/views/NotSupportedView.vue"],"sourcesContent":["export default \"__VITE_PUBLIC_ASSET__b82952e7__\"","\n\n\n"],"names":[],"mappings":";;;AAAA,MAAe,aAAA,KAAA,IAAA,IAAA,uBAAA,YAAA,GAAA,EAAA;;;;;;;;;;;;;;;;;;;AC+Df,UAAM,WAAW,6BAAM;AACd,aAAA;AAAA,QACL;AAAA,QACA;AAAA,MAAA;AAAA,IACF,GAJe;AAOjB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAAA,GAD5C;AAIpB,UAAM,SAAS;AACf,UAAM,oBAAoB,6BAAM;AAC9B,aAAO,KAAK,UAAU;AAAA,IAAA,GADE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/ServerConfigPanel-6N6BTSXC.js b/web/assets/ServerConfigPanel-6N6BTSXC.js new file mode 100644 index 000000000..6725c1d9a --- /dev/null +++ b/web/assets/ServerConfigPanel-6N6BTSXC.js @@ -0,0 +1,158 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { A as createBaseVNode, f as openBlock, g as createElementBlock, aZ as markRaw, a as defineComponent, u as useSettingStore, aK as storeToRefs, w as watch, cL as useCopyToClipboard, I as useI18n, x as createBlock, y as withCtx, z as unref, bW as script, a8 as toDisplayString, Q as renderList, P as Fragment, h as createVNode, D as script$1, i as createCommentVNode, bN as script$2, cM as FormItem, cm as _sfc_main$1, bZ as electronAPI } from "./index-CSl7lfOs.js"; +import { u as useServerConfigStore } from "./serverConfigStore-D4vD2qBB.js"; +const _hoisted_1$1 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m4 17l6-6l-6-6m8 14h8" +}, null, -1); +const _hoisted_3$1 = [ + _hoisted_2$1 +]; +function render(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._hoisted_3$1]); +} +__name(render, "render"); +const __unplugin_components_0 = markRaw({ name: "lucide-terminal", render }); +const _hoisted_1 = { class: "flex flex-col gap-2" }; +const _hoisted_2 = { class: "flex justify-end gap-2" }; +const _hoisted_3 = { class: "flex items-center justify-between" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ServerConfigPanel", + setup(__props) { + const settingStore = useSettingStore(); + const serverConfigStore = useServerConfigStore(); + const { + serverConfigsByCategory, + serverConfigValues, + launchArgs, + commandLineArgs, + modifiedConfigs + } = storeToRefs(serverConfigStore); + const revertChanges = /* @__PURE__ */ __name(() => { + serverConfigStore.revertChanges(); + }, "revertChanges"); + const restartApp = /* @__PURE__ */ __name(() => { + electronAPI().restartApp(); + }, "restartApp"); + watch(launchArgs, (newVal) => { + settingStore.set("Comfy.Server.LaunchArgs", newVal); + }); + watch(serverConfigValues, (newVal) => { + settingStore.set("Comfy.Server.ServerConfigValues", newVal); + }); + const { copyToClipboard } = useCopyToClipboard(); + const copyCommandLineArgs = /* @__PURE__ */ __name(async () => { + await copyToClipboard(commandLineArgs.value); + }, "copyCommandLineArgs"); + const { t } = useI18n(); + const translateItem = /* @__PURE__ */ __name((item) => { + return { + ...item, + name: t(`serverConfigItems.${item.id}.name`, item.name), + tooltip: item.tooltip ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip) : void 0 + }; + }, "translateItem"); + return (_ctx, _cache) => { + const _component_i_lucide58terminal = __unplugin_components_0; + return openBlock(), createBlock(_sfc_main$1, { + value: "Server-Config", + class: "server-config-panel" + }, { + header: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + unref(modifiedConfigs).length > 0 ? (openBlock(), createBlock(unref(script), { + key: 0, + severity: "info", + "pt:text": "w-full" + }, { + default: withCtx(() => [ + createBaseVNode("p", null, toDisplayString(_ctx.$t("serverConfig.modifiedConfigs")), 1), + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(modifiedConfigs), (config) => { + return openBlock(), createElementBlock("li", { + key: config.id + }, toDisplayString(config.name) + ": " + toDisplayString(config.initialValue) + " → " + toDisplayString(config.value), 1); + }), 128)) + ]), + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(script$1), { + label: _ctx.$t("serverConfig.revertChanges"), + onClick: revertChanges, + outlined: "" + }, null, 8, ["label"]), + createVNode(unref(script$1), { + label: _ctx.$t("serverConfig.restart"), + onClick: restartApp, + outlined: "", + severity: "danger" + }, null, 8, ["label"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true), + unref(commandLineArgs) ? (openBlock(), createBlock(unref(script), { + key: 1, + severity: "secondary", + "pt:text": "w-full" + }, { + icon: withCtx(() => [ + createVNode(_component_i_lucide58terminal, { class: "text-xl font-bold" }) + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("p", null, toDisplayString(unref(commandLineArgs)), 1), + createVNode(unref(script$1), { + icon: "pi pi-clipboard", + onClick: copyCommandLineArgs, + severity: "secondary", + text: "" + }) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]), + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(serverConfigsByCategory)), ([label, items], i) => { + return openBlock(), createElementBlock("div", { key: label }, [ + i > 0 ? (openBlock(), createBlock(unref(script$2), { key: 0 })) : createCommentVNode("", true), + createBaseVNode("h3", null, toDisplayString(_ctx.$t(`serverConfigCategories.${label}`, label)), 1), + (openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => { + return openBlock(), createElementBlock("div", { + key: item.name, + class: "flex items-center mb-4" + }, [ + createVNode(FormItem, { + item: translateItem(item), + formValue: item.value, + "onUpdate:formValue": /* @__PURE__ */ __name(($event) => item.value = $event, "onUpdate:formValue"), + id: item.id, + labelClass: { + "text-highlight": item.initialValue !== item.value + } + }, null, 8, ["item", "formValue", "onUpdate:formValue", "id", "labelClass"]) + ]); + }), 128)) + ]); + }), 128)) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=ServerConfigPanel-6N6BTSXC.js.map diff --git a/web/assets/ServerConfigPanel-6N6BTSXC.js.map b/web/assets/ServerConfigPanel-6N6BTSXC.js.map new file mode 100644 index 000000000..db74ac562 --- /dev/null +++ b/web/assets/ServerConfigPanel-6N6BTSXC.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ServerConfigPanel-6N6BTSXC.js","sources":["../../src/components/dialog/content/setting/ServerConfigPanel.vue"],"sourcesContent":["\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,eAAe;AACrB,UAAM,oBAAoB;AACpB,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,YAAY,iBAAiB;AAEjC,UAAM,gBAAgB,6BAAM;AAC1B,wBAAkB,cAAc;AAAA,IAAA,GADZ;AAItB,UAAM,aAAa,6BAAM;AACvB,kBAAA,EAAc;IAAW,GADR;AAIb,UAAA,YAAY,CAAC,WAAW;AACf,mBAAA,IAAI,2BAA2B,MAAM;AAAA,IAAA,CACnD;AAEK,UAAA,oBAAoB,CAAC,WAAW;AACvB,mBAAA,IAAI,mCAAmC,MAAM;AAAA,IAAA,CAC3D;AAEK,UAAA,EAAE,oBAAoB;AAC5B,UAAM,sBAAsB,mCAAY;AAChC,YAAA,gBAAgB,gBAAgB,KAAK;AAAA,IAAA,GADjB;AAItB,UAAA,EAAE,MAAM;AACR,UAAA,gBAAgB,wBAAC,SAA0C;AACxD,aAAA;AAAA,QACL,GAAG;AAAA,QACH,MAAM,EAAE,qBAAqB,KAAK,EAAE,SAAS,KAAK,IAAI;AAAA,QACtD,SAAS,KAAK,UACV,EAAE,qBAAqB,KAAK,EAAE,YAAY,KAAK,OAAO,IACtD;AAAA,MAAA;AAAA,IACN,GAPoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/ServerStartView-BHqjjHcl.css b/web/assets/ServerStartView-BHqjjHcl.css new file mode 100644 index 000000000..50d444d78 --- /dev/null +++ b/web/assets/ServerStartView-BHqjjHcl.css @@ -0,0 +1,5 @@ + +[data-v-c0d3157e] .xterm-helper-textarea { + /* Hide this as it moves all over when uv is running */ + display: none; +} diff --git a/web/assets/ServerStartView-BykYRkoj.js b/web/assets/ServerStartView-BykYRkoj.js new file mode 100644 index 000000000..2c11f8b48 --- /dev/null +++ b/web/assets/ServerStartView-BykYRkoj.js @@ -0,0 +1,92 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, I as useI18n, r as ref, bX as ProgressStatus, o as onMounted, f as openBlock, g as createElementBlock, A as createBaseVNode, ay as createTextVNode, a8 as toDisplayString, z as unref, i as createCommentVNode, h as createVNode, D as script, x as createBlock, v as withDirectives, ad as vShow, bY as BaseTerminal, R as pushScopeId, U as popScopeId, bZ as electronAPI, _ as _export_sfc } from "./index-CSl7lfOs.js"; +const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c0d3157e"), n = n(), popScopeId(), n), "_withScopeId"); +const _hoisted_1 = { class: "font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" }; +const _hoisted_2 = { class: "text-2xl font-bold" }; +const _hoisted_3 = { key: 0 }; +const _hoisted_4 = { + key: 0, + class: "flex flex-col items-center gap-4" +}; +const _hoisted_5 = { class: "flex items-center my-4 gap-2" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ServerStartView", + setup(__props) { + const electron = electronAPI(); + const { t } = useI18n(); + const status = ref(ProgressStatus.INITIAL_STATE); + const electronVersion = ref(""); + let xterm; + const terminalVisible = ref(true); + const updateProgress = /* @__PURE__ */ __name(({ status: newStatus }) => { + status.value = newStatus; + if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false; + else xterm?.clear(); + }, "updateProgress"); + const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => { + xterm = terminal; + useAutoSize(root, true, true); + electron.onLogMessage((message) => { + terminal.write(message); + }); + terminal.options.cursorBlink = false; + terminal.options.disableStdin = true; + terminal.options.cursorInactiveStyle = "block"; + }, "terminalCreated"); + const reinstall = /* @__PURE__ */ __name(() => electron.reinstall(), "reinstall"); + const reportIssue = /* @__PURE__ */ __name(() => { + window.open("https://forum.comfy.org/c/v1-feedback/", "_blank"); + }, "reportIssue"); + const openLogs = /* @__PURE__ */ __name(() => electron.openLogsFolder(), "openLogs"); + onMounted(async () => { + electron.sendReady(); + electron.onProgressUpdate(updateProgress); + electronVersion.value = await electron.getElectronVersion(); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("h2", _hoisted_2, [ + createTextVNode(toDisplayString(unref(t)(`serverStart.process.${status.value}`)) + " ", 1), + status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("span", _hoisted_3, " v" + toDisplayString(electronVersion.value), 1)) : createCommentVNode("", true) + ]), + status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("div", _hoisted_4, [ + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(script), { + icon: "pi pi-flag", + severity: "secondary", + label: unref(t)("serverStart.reportIssue"), + onClick: reportIssue + }, null, 8, ["label"]), + createVNode(unref(script), { + icon: "pi pi-file", + severity: "secondary", + label: unref(t)("serverStart.openLogs"), + onClick: openLogs + }, null, 8, ["label"]), + createVNode(unref(script), { + icon: "pi pi-refresh", + label: unref(t)("serverStart.reinstall"), + onClick: reinstall + }, null, 8, ["label"]) + ]), + !terminalVisible.value ? (openBlock(), createBlock(unref(script), { + key: 0, + icon: "pi pi-search", + severity: "secondary", + label: unref(t)("serverStart.showTerminal"), + onClick: _cache[0] || (_cache[0] = ($event) => terminalVisible.value = true) + }, null, 8, ["label"])) : createCommentVNode("", true) + ])) : createCommentVNode("", true), + withDirectives(createVNode(BaseTerminal, { onCreated: terminalCreated }, null, 512), [ + [vShow, terminalVisible.value] + ]) + ]); + }; + } +}); +const ServerStartView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c0d3157e"]]); +export { + ServerStartView as default +}; +//# sourceMappingURL=ServerStartView-BykYRkoj.js.map diff --git a/web/assets/ServerStartView-BykYRkoj.js.map b/web/assets/ServerStartView-BykYRkoj.js.map new file mode 100644 index 000000000..9c15a8369 --- /dev/null +++ b/web/assets/ServerStartView-BykYRkoj.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ServerStartView-BykYRkoj.js","sources":["../../src/views/ServerStartView.vue"],"sourcesContent":["\n\n\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAuDA,UAAM,WAAW;AACX,UAAA,EAAE,MAAM;AAER,UAAA,SAAS,IAAoB,eAAe,aAAa;AACzD,UAAA,kBAAkB,IAAY,EAAE;AAClC,QAAA;AAEE,UAAA,kBAAkB,IAAI,IAAI;AAEhC,UAAM,iBAAiB,wBAAC,EAAE,QAAQ,gBAA4C;AAC5E,aAAO,QAAQ;AAGf,UAAI,cAAc,eAAe,MAAO,iBAAgB,QAAQ;AAAA,kBACpD,MAAM;AAAA,IAAA,GALG;AAQvB,UAAM,kBAAkB,wBACtB,EAAE,UAAU,YAAA,GACZ,SACG;AACK,cAAA;AAEI,kBAAA,MAAM,MAAM,IAAI;AACnB,eAAA,aAAa,CAAC,YAAoB;AACzC,iBAAS,MAAM,OAAO;AAAA,MAAA,CACvB;AAED,eAAS,QAAQ,cAAc;AAC/B,eAAS,QAAQ,eAAe;AAChC,eAAS,QAAQ,sBAAsB;AAAA,IAAA,GAbjB;AAgBlB,UAAA,YAAY,6BAAM,SAAS,aAAf;AAClB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAAA,GAD5C;AAGd,UAAA,WAAW,6BAAM,SAAS,kBAAf;AAEjB,cAAU,YAAY;AACpB,eAAS,UAAU;AACnB,eAAS,iBAAiB,cAAc;AACxB,sBAAA,QAAQ,MAAM,SAAS,mBAAmB;AAAA,IAAA,CAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/UserSelectView-DMDUPUPX.js b/web/assets/UserSelectView-DMDUPUPX.js new file mode 100644 index 000000000..9c5c9ea6c --- /dev/null +++ b/web/assets/UserSelectView-DMDUPUPX.js @@ -0,0 +1,98 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, J as useUserStore, bU as useRouter, r as ref, q as computed, o as onMounted, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, aq as script, bN as script$1, bV as script$2, x as createBlock, y as withCtx, ay as createTextVNode, bW as script$3, i as createCommentVNode, D as script$4 } from "./index-CSl7lfOs.js"; +const _hoisted_1 = { + id: "comfy-user-selection", + class: "font-sans flex flex-col items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" +}; +const _hoisted_2 = { class: "mt-[5vh] 2xl:mt-[20vh] min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg" }; +const _hoisted_3 = /* @__PURE__ */ createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1); +const _hoisted_4 = { class: "flex w-full flex-col items-center" }; +const _hoisted_5 = { class: "flex w-full flex-col gap-2" }; +const _hoisted_6 = { for: "new-user-input" }; +const _hoisted_7 = { class: "flex w-full flex-col gap-2" }; +const _hoisted_8 = { for: "existing-user-select" }; +const _hoisted_9 = { class: "mt-5" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "UserSelectView", + setup(__props) { + const userStore = useUserStore(); + const router = useRouter(); + const selectedUser = ref(null); + const newUsername = ref(""); + const loginError = ref(""); + const createNewUser = computed(() => newUsername.value.trim() !== ""); + const newUserExistsError = computed(() => { + return userStore.users.find((user) => user.username === newUsername.value) ? `User "${newUsername.value}" already exists` : ""; + }); + const error = computed(() => newUserExistsError.value || loginError.value); + const login = /* @__PURE__ */ __name(async () => { + try { + const user = createNewUser.value ? await userStore.createUser(newUsername.value) : selectedUser.value; + if (!user) { + throw new Error("No user selected"); + } + userStore.login(user); + router.push("/"); + } catch (err) { + loginError.value = err.message ?? JSON.stringify(err); + } + }, "login"); + onMounted(async () => { + if (!userStore.initialized) { + await userStore.initialize(); + } + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("main", _hoisted_2, [ + _hoisted_3, + createBaseVNode("form", _hoisted_4, [ + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("label", _hoisted_6, toDisplayString(_ctx.$t("userSelect.newUser")) + ":", 1), + createVNode(unref(script), { + id: "new-user-input", + modelValue: newUsername.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newUsername.value = $event), + placeholder: _ctx.$t("userSelect.enterUsername") + }, null, 8, ["modelValue", "placeholder"]) + ]), + createVNode(unref(script$1)), + createBaseVNode("div", _hoisted_7, [ + createBaseVNode("label", _hoisted_8, toDisplayString(_ctx.$t("userSelect.existingUser")) + ":", 1), + createVNode(unref(script$2), { + modelValue: selectedUser.value, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedUser.value = $event), + class: "w-full", + inputId: "existing-user-select", + options: unref(userStore).users, + "option-label": "username", + placeholder: _ctx.$t("userSelect.selectUser"), + disabled: createNewUser.value + }, null, 8, ["modelValue", "options", "placeholder", "disabled"]), + error.value ? (openBlock(), createBlock(unref(script$3), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(error.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + createBaseVNode("footer", _hoisted_9, [ + createVNode(unref(script$4), { + label: _ctx.$t("userSelect.next"), + onClick: login + }, null, 8, ["label"]) + ]) + ]) + ]) + ]); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=UserSelectView-DMDUPUPX.js.map diff --git a/web/assets/UserSelectView-DMDUPUPX.js.map b/web/assets/UserSelectView-DMDUPUPX.js.map new file mode 100644 index 000000000..64a11a7c5 --- /dev/null +++ b/web/assets/UserSelectView-DMDUPUPX.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UserSelectView-DMDUPUPX.js","sources":["../../src/views/UserSelectView.vue"],"sourcesContent":["\n\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAoDA,UAAM,YAAY;AAClB,UAAM,SAAS;AAET,UAAA,eAAe,IAAiB,IAAI;AACpC,UAAA,cAAc,IAAI,EAAE;AACpB,UAAA,aAAa,IAAI,EAAE;AAEzB,UAAM,gBAAgB,SAAS,MAAM,YAAY,MAAM,KAAA,MAAW,EAAE;AAC9D,UAAA,qBAAqB,SAAS,MAAM;AACxC,aAAO,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,aAAa,YAAY,KAAK,IACrE,SAAS,YAAY,KAAK,qBAC1B;AAAA,IAAA,CACL;AACD,UAAM,QAAQ,SAAS,MAAM,mBAAmB,SAAS,WAAW,KAAK;AAEzE,UAAM,QAAQ,mCAAY;AACpB,UAAA;AACI,cAAA,OAAO,cAAc,QACvB,MAAM,UAAU,WAAW,YAAY,KAAK,IAC5C,aAAa;AAEjB,YAAI,CAAC,MAAM;AACH,gBAAA,IAAI,MAAM,kBAAkB;AAAA,QACpC;AAEA,kBAAU,MAAM,IAAI;AACpB,eAAO,KAAK,GAAG;AAAA,eACR,KAAK;AACZ,mBAAW,QAAQ,IAAI,WAAW,KAAK,UAAU,GAAG;AAAA,MACtD;AAAA,IAAA,GAdY;AAiBd,cAAU,YAAY;AAChB,UAAA,CAAC,UAAU,aAAa;AAC1B,cAAM,UAAU;MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/WelcomeView-BD34JMsC.css b/web/assets/WelcomeView-BD34JMsC.css new file mode 100644 index 000000000..43c9f9339 --- /dev/null +++ b/web/assets/WelcomeView-BD34JMsC.css @@ -0,0 +1,36 @@ + +.animated-gradient-text[data-v-c4d014c5] { + font-weight: 700; + font-size: clamp(2rem, 8vw, 4rem); + background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9); + background-size: 300% auto; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: gradient-c4d014c5 8s linear infinite; +} +.text-glow[data-v-c4d014c5] { + filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3)); +} +@keyframes gradient-c4d014c5 { +0% { + background-position: 0% center; +} +100% { + background-position: 300% center; +} +} +.fade-in-up[data-v-c4d014c5] { + animation: fadeInUp-c4d014c5 1.5s ease-out; + animation-fill-mode: both; +} +@keyframes fadeInUp-c4d014c5 { +0% { + opacity: 0; + transform: translateY(20px); +} +100% { + opacity: 1; + transform: translateY(0); +} +} diff --git a/web/assets/WelcomeView-D6WEsVyp.js b/web/assets/WelcomeView-D6WEsVyp.js new file mode 100644 index 000000000..b9e29ae98 --- /dev/null +++ b/web/assets/WelcomeView-D6WEsVyp.js @@ -0,0 +1,37 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { a as defineComponent, bU as useRouter, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, R as pushScopeId, U as popScopeId, _ as _export_sfc } from "./index-CSl7lfOs.js"; +const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c4d014c5"), n = n(), popScopeId(), n), "_withScopeId"); +const _hoisted_1 = { class: "font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" }; +const _hoisted_2 = { class: "flex flex-col items-center justify-center gap-8 p-8" }; +const _hoisted_3 = { class: "animated-gradient-text text-glow select-none" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "WelcomeView", + setup(__props) { + const router = useRouter(); + const navigateTo = /* @__PURE__ */ __name((path) => { + router.push(path); + }, "navigateTo"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("h1", _hoisted_3, toDisplayString(_ctx.$t("welcome.title")), 1), + createVNode(unref(script), { + label: _ctx.$t("welcome.getStarted"), + icon: "pi pi-arrow-right", + iconPos: "right", + size: "large", + rounded: "", + onClick: _cache[0] || (_cache[0] = ($event) => navigateTo("/install")), + class: "p-4 text-lg fade-in-up" + }, null, 8, ["label"]) + ]) + ]); + }; + } +}); +const WelcomeView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c4d014c5"]]); +export { + WelcomeView as default +}; +//# sourceMappingURL=WelcomeView-D6WEsVyp.js.map diff --git a/web/assets/WelcomeView-D6WEsVyp.js.map b/web/assets/WelcomeView-D6WEsVyp.js.map new file mode 100644 index 000000000..e4046a621 --- /dev/null +++ b/web/assets/WelcomeView-D6WEsVyp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WelcomeView-D6WEsVyp.js","sources":["../../src/views/WelcomeView.vue"],"sourcesContent":["\n\n\n\n\n"],"names":[],"mappings":";;;;;;;;;;AA4BA,UAAM,SAAS;AACT,UAAA,aAAa,wBAAC,SAAiB;AACnC,aAAO,KAAK,IAAI;AAAA,IAAA,GADC;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/web/assets/images/Git-Logo-White.svg b/web/assets/images/Git-Logo-White.svg new file mode 100644 index 000000000..f2961b944 --- /dev/null +++ b/web/assets/images/Git-Logo-White.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/assets/images/sad_girl.png b/web/assets/images/sad_girl.png new file mode 100644 index 000000000..2b0925a63 Binary files /dev/null and b/web/assets/images/sad_girl.png differ diff --git a/web/assets/index-DAK31IJJ.css b/web/assets/index-1vLlIVor.css similarity index 55% rename from web/assets/index-DAK31IJJ.css rename to web/assets/index-1vLlIVor.css index f104acbaf..f549121de 100644 --- a/web/assets/index-DAK31IJJ.css +++ b/web/assets/index-1vLlIVor.css @@ -1,3 +1,3468 @@ + +.no-results-placeholder[data-v-a1e982e0] .p-card { + background-color: var(--surface-ground); + text-align: center; + box-shadow: unset; +} +.no-results-placeholder h3[data-v-a1e982e0] { + color: var(--text-color); + margin-bottom: 0.5rem; +} +.no-results-placeholder p[data-v-a1e982e0] { + color: var(--text-color-secondary); + margin-bottom: 1rem; +} + +.comfy-missing-nodes[data-v-05a7c5eb] { + max-height: 300px; + overflow-y: auto; +} +.node-hint[data-v-05a7c5eb] { + margin-left: 0.5rem; + font-style: italic; + color: var(--text-color-secondary); +} +[data-v-05a7c5eb] .p-button { + margin-left: auto; +} + +.comfy-missing-models[data-v-8528eb79] { + max-height: 300px; + overflow-y: auto; +} + +[data-v-a4c03005] .i-badge { + + --tw-bg-opacity: 1; + + background-color: rgb(150 206 76 / var(--tw-bg-opacity)); + + --tw-text-opacity: 1; + + color: rgb(255 255 255 / var(--tw-text-opacity)) +} +[data-v-a4c03005] .o-badge { + + --tw-bg-opacity: 1; + + background-color: rgb(239 68 68 / var(--tw-bg-opacity)); + + --tw-text-opacity: 1; + + color: rgb(255 255 255 / var(--tw-text-opacity)) +} +[data-v-a4c03005] .c-badge { + + --tw-bg-opacity: 1; + + background-color: rgb(66 153 225 / var(--tw-bg-opacity)); + + --tw-text-opacity: 1; + + color: rgb(255 255 255 / var(--tw-text-opacity)) +} +[data-v-a4c03005] .s-badge { + + --tw-bg-opacity: 1; + + background-color: rgb(234 179 8 / var(--tw-bg-opacity)) +} + +.search-box-input[data-v-e10998c1] { + width: 100%; + padding-left: 36px; +} +.search-box-input.with-filter[data-v-e10998c1] { + padding-right: 36px; +} +.p-button.p-inputicon[data-v-e10998c1] { + padding: 0; + width: auto; + border: none !important; +} + +.form-input[data-v-e54b447b] .input-slider .p-inputnumber input, +.form-input[data-v-e54b447b] .input-slider .slider-part { + + width: 5rem +} +.form-input[data-v-e54b447b] .p-inputtext, +.form-input[data-v-e54b447b] .p-select { + + width: 11rem +} +/** + * Copyright (c) 2014 The xterm.js authors. All rights reserved. + * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License) + * https://github.com/chjj/term.js + * @license MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Originally forked from (with the author's permission): + * Fabrice Bellard's javascript vt100 for jslinux: + * http://bellard.org/jslinux/ + * Copyright (c) 2011 Fabrice Bellard + * The original design remains. The terminal itself + * has been extended to include xterm CSI codes, among + * other features. + */ + +/** + * Default styles for xterm.js + */ + +.xterm { + cursor: text; + position: relative; + -moz-user-select: none; + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.xterm.focus, +.xterm:focus { + outline: none; +} + +.xterm .xterm-helpers { + position: absolute; + top: 0; + /** + * The z-index of the helpers must be higher than the canvases in order for + * IMEs to appear on top. + */ + z-index: 5; +} + +.xterm .xterm-helper-textarea { + padding: 0; + border: 0; + margin: 0; + /* Move textarea out of the screen to the far left, so that the cursor is not visible */ + position: absolute; + opacity: 0; + left: -9999em; + top: 0; + width: 0; + height: 0; + z-index: -5; + /** Prevent wrapping so the IME appears against the textarea at the correct position */ + white-space: nowrap; + overflow: hidden; + resize: none; +} + +.xterm .composition-view { + /* TODO: Composition position got messed up somewhere */ + background: #000; + color: #FFF; + display: none; + position: absolute; + white-space: nowrap; + z-index: 1; +} + +.xterm .composition-view.active { + display: block; +} + +.xterm .xterm-viewport { + /* On OS X this is required in order for the scroll bar to appear fully opaque */ + background-color: #000; + overflow-y: scroll; + cursor: default; + position: absolute; + right: 0; + left: 0; + top: 0; + bottom: 0; +} + +.xterm .xterm-screen { + position: relative; +} + +.xterm .xterm-screen canvas { + position: absolute; + left: 0; + top: 0; +} + +.xterm .xterm-scroll-area { + visibility: hidden; +} + +.xterm-char-measure-element { + display: inline-block; + visibility: hidden; + position: absolute; + top: 0; + left: -9999em; + line-height: normal; +} + +.xterm.enable-mouse-events { + /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */ + cursor: default; +} + +.xterm.xterm-cursor-pointer, +.xterm .xterm-cursor-pointer { + cursor: pointer; +} + +.xterm.column-select.focus { + /* Column selection mode */ + cursor: crosshair; +} + +.xterm .xterm-accessibility:not(.debug), +.xterm .xterm-message { + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + z-index: 10; + color: transparent; + pointer-events: none; +} + +.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection { + color: transparent; +} + +.xterm .xterm-accessibility-tree:not(.debug) *::selection { + color: transparent; +} + +.xterm .xterm-accessibility-tree { + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; + white-space: pre; +} + +.xterm .live-region { + position: absolute; + left: -9999px; + width: 1px; + height: 1px; + overflow: hidden; +} + +.xterm-dim { + /* Dim should not apply to background, so the opacity of the foreground color is applied + * explicitly in the generated class and reset to 1 here */ + opacity: 1 !important; +} + +.xterm-underline-1 { text-decoration: underline; } +.xterm-underline-2 { -webkit-text-decoration: double underline; text-decoration: double underline; } +.xterm-underline-3 { -webkit-text-decoration: wavy underline; text-decoration: wavy underline; } +.xterm-underline-4 { -webkit-text-decoration: dotted underline; text-decoration: dotted underline; } +.xterm-underline-5 { -webkit-text-decoration: dashed underline; text-decoration: dashed underline; } + +.xterm-overline { + text-decoration: overline; +} + +.xterm-overline.xterm-underline-1 { text-decoration: overline underline; } +.xterm-overline.xterm-underline-2 { -webkit-text-decoration: overline double underline; text-decoration: overline double underline; } +.xterm-overline.xterm-underline-3 { -webkit-text-decoration: overline wavy underline; text-decoration: overline wavy underline; } +.xterm-overline.xterm-underline-4 { -webkit-text-decoration: overline dotted underline; text-decoration: overline dotted underline; } +.xterm-overline.xterm-underline-5 { -webkit-text-decoration: overline dashed underline; text-decoration: overline dashed underline; } + +.xterm-strikethrough { + text-decoration: line-through; +} + +.xterm-screen .xterm-decoration-container .xterm-decoration { + z-index: 6; + position: absolute; +} + +.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer { + z-index: 7; +} + +.xterm-decoration-overview-ruler { + z-index: 8; + position: absolute; + top: 0; + right: 0; + pointer-events: none; +} + +.xterm-decoration-top { + z-index: 2; + position: relative; +} + +[data-v-4f7907e3] .p-terminal .xterm { + overflow-x: auto; +} +[data-v-4f7907e3] .p-terminal .xterm-screen { + background-color: black; + overflow-y: hidden; +} + +[data-v-b7201572] .p-terminal .xterm { + overflow-x: auto; +} +[data-v-b7201572] .p-terminal .xterm-screen { + background-color: black; + overflow-y: hidden; +} + +[data-v-36dec989] .p-terminal .xterm { + overflow-x: auto; +} +[data-v-36dec989] .p-terminal .xterm-screen { + background-color: black; + overflow-y: hidden; +} + +.settings-tab-panels { + padding-top: 0px !important; +} + +.settings-container[data-v-d85d6e64] { + display: flex; + height: 70vh; + width: 60vw; + max-width: 1024px; + overflow: hidden; +} +@media (max-width: 768px) { +.settings-container[data-v-d85d6e64] { + flex-direction: column; + height: auto; +} +.settings-sidebar[data-v-d85d6e64] { + width: 100%; +} +.settings-content[data-v-d85d6e64] { + height: 350px; +} +} + +/* Show a separator line above the Keybinding tab */ +/* This indicates the start of custom setting panels */ +.settings-sidebar[data-v-d85d6e64] .p-listbox-option[aria-label='Keybinding'] { + position: relative; +} +.settings-sidebar[data-v-d85d6e64] .p-listbox-option[aria-label='Keybinding']::before { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + --tw-content: ''; + content: var(--tw-content); + border-top: 1px solid var(--p-divider-border-color); +} + +.pi-cog[data-v-43089afc] { + font-size: 1.25rem; + margin-right: 0.5rem; +} +.version-tag[data-v-43089afc] { + margin-left: 0.5rem; +} + +.comfy-error-report[data-v-5c200f18] { + display: flex; + flex-direction: column; + gap: 1rem; +} +.action-container[data-v-5c200f18] { + display: flex; + gap: 1rem; + justify-content: flex-end; +} +.wrapper-pre[data-v-5c200f18] { + white-space: pre-wrap; + word-wrap: break-word; +} + +.p-card[data-v-98830966] { + --p-card-body-padding: 10px 0 0 0; + overflow: hidden; +} +[data-v-98830966] .p-card-subtitle { + text-align: center; +} + +.prompt-dialog-content[data-v-abaaab2c] { + white-space: pre-wrap; +} +.mdi.rotate270::before { + transform: rotate(270deg); +} + +/* Generic */ +.comfyui-button { + display: flex; + align-items: center; + gap: 0.5em; + cursor: pointer; + border: none; + border-radius: 4px; + padding: 4px 8px; + box-sizing: border-box; + margin: 0; + transition: box-shadow 0.1s; +} + +.comfyui-button:active { + box-shadow: inset 1px 1px 10px rgba(0, 0, 0, 0.5); +} + +.comfyui-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} +.primary .comfyui-button, +.primary.comfyui-button { + background-color: var(--primary-bg) !important; + color: var(--primary-fg) !important; +} + +.primary .comfyui-button:not(:disabled):hover, +.primary.comfyui-button:not(:disabled):hover { + background-color: var(--primary-hover-bg) !important; + color: var(--primary-hover-fg) !important; +} + +/* Popup */ +.comfyui-popup { + position: absolute; + left: var(--left); + right: var(--right); + top: var(--top); + bottom: var(--bottom); + z-index: 2000; + max-height: calc(100vh - var(--limit) - 10px); + box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.3); +} + +.comfyui-popup:not(.open) { + display: none; +} + +.comfyui-popup.right.open { + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + overflow: hidden; +} +/* Split button */ +.comfyui-split-button { + position: relative; + display: flex; +} + +.comfyui-split-primary { + flex: auto; +} + +.comfyui-split-primary .comfyui-button { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 1px solid var(--comfy-menu-bg); + width: 100%; +} + +.comfyui-split-arrow .comfyui-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-left: 2px; + padding-right: 2px; +} + +.comfyui-split-button-popup { + white-space: nowrap; + background-color: var(--content-bg); + color: var(--content-fg); + display: flex; + flex-direction: column; + overflow: auto; +} + +.comfyui-split-button-popup.hover { + z-index: 2001; +} +.comfyui-split-button-popup > .comfyui-button { + border: none; + background-color: transparent; + color: var(--fg-color); + padding: 8px 12px 8px 8px; +} + +.comfyui-split-button-popup > .comfyui-button:not(:disabled):hover { + background-color: var(--comfy-input-bg); +} + +/* Button group */ +.comfyui-button-group { + display: flex; + border-radius: 4px; + overflow: hidden; +} + +.comfyui-button-group:empty { + display: none; +} +.comfyui-button-group > .comfyui-button, +.comfyui-button-group > .comfyui-button-wrapper > .comfyui-button { + padding: 4px 10px; + border-radius: 0; +} + +/* Menu */ +.comfyui-menu .mdi::before { + font-size: 18px; +} + +.comfyui-menu .comfyui-button { + background: var(--comfy-input-bg); + color: var(--fg-color); + white-space: nowrap; +} + +.comfyui-menu .comfyui-button:not(:disabled):hover { + background: var(--border-color); + color: var(--content-fg); +} + +.comfyui-menu .comfyui-split-button-popup > .comfyui-button { + border-radius: 0; + background-color: transparent; +} + +.comfyui-menu .comfyui-split-button-popup > .comfyui-button:not(:disabled):hover { + background-color: var(--comfy-input-bg); +} + +.comfyui-menu .comfyui-split-button-popup.left { + border-top-right-radius: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.comfyui-menu .comfyui-button.popup-open { + background-color: var(--content-bg); + color: var(--content-fg); +} + +.comfyui-menu-push { + margin-left: -0.8em; + flex: auto; +} + +/** Send to workflow widget selection dialog */ +.comfy-widget-selection-dialog { + border: none; +} + +.comfy-widget-selection-dialog div { + color: var(--fg-color); + font-family: Arial, Helvetica, sans-serif; +} + +.comfy-widget-selection-dialog h2 { + margin-top: 0; +} + +.comfy-widget-selection-dialog section { + width: -moz-fit-content; + width: fit-content; + display: flex; + flex-direction: column; +} + +.comfy-widget-selection-item { + display: flex; + gap: 10px; + align-items: center; +} + +.comfy-widget-selection-item span { + margin-right: auto; +} + +.comfy-widget-selection-item span::before { + content: '#' attr(data-id); + opacity: 0.5; + margin-right: 5px; +} + +.comfy-modal .comfy-widget-selection-item button { + font-size: 1em; +} + +/***** Responsive *****/ +.lg.comfyui-menu .lt-lg-show { + display: none !important; +} +.comfyui-menu:not(.lg) .nlg-hide { + display: none !important; +} +/** Large screen */ +.lg.comfyui-menu>.comfyui-menu-mobile-collapse .comfyui-button span, +.lg.comfyui-menu>.comfyui-menu-mobile-collapse.comfyui-button span { + display: none; +} +.lg.comfyui-menu>.comfyui-menu-mobile-collapse .comfyui-popup .comfyui-button span { + display: unset; +} + +/** Non large screen */ +.lt-lg.comfyui-menu { + flex-wrap: wrap; +} + +.lt-lg.comfyui-menu > *:not(.comfyui-menu-mobile-collapse) { + order: 1; +} + +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse { + order: 9999; + width: 100%; +} + +.comfyui-body-bottom .lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse { + order: -1; +} + +.comfyui-body-bottom .lt-lg.comfyui-menu > .comfyui-menu-button { + top: unset; + bottom: 4px; +} + +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse.comfyui-button-group { + flex-wrap: wrap; +} + +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button, +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse.comfyui-button { + padding: 10px; +} +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button, +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button-wrapper { + width: 100%; +} + +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-popup { + position: static; + background-color: var(--comfy-input-bg); + max-width: unset; + max-height: 50vh; + overflow: auto; +} + +.lt-lg.comfyui-menu:not(.expanded) > .comfyui-menu-mobile-collapse { + display: none; +} + +.lt-lg .comfyui-menu-button { + position: absolute; + top: 4px; + right: 8px; +} + +.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-view-list-popup { + border-radius: 0; +} + +.lt-lg.comfyui-menu .comfyui-workflows-popup { + width: 100vw; +} + +/** Small */ +.lt-md .comfyui-workflows-button-inner { + width: unset !important; +} +.lt-md .comfyui-workflows-label { + display: none; +} + +/** Extra small */ +.lt-sm .comfyui-interrupt-button { + margin-right: 45px; +} +.comfyui-body-bottom .lt-sm.comfyui-menu > .comfyui-menu-button{ + bottom: 41px; +} + + +.editable-text[data-v-d670c40f] { + display: inline; +} +.editable-text input[data-v-d670c40f] { + width: 100%; + box-sizing: border-box; +} + +.tree-node[data-v-d8fc59be] { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; +} +.leaf-count-badge[data-v-d8fc59be] { + margin-left: 0.5rem; +} +.node-content[data-v-d8fc59be] { + display: flex; + align-items: center; + flex-grow: 1; +} +.leaf-label[data-v-d8fc59be] { + margin-left: 0.5rem; +} +[data-v-d8fc59be] .editable-text span { + word-break: break-all; +} + +[data-v-82fb18cb] .tree-explorer-node-label { + width: 100%; + display: flex; + align-items: center; + margin-left: var(--p-tree-node-gap); + flex-grow: 1; +} + +/* + * The following styles are necessary to avoid layout shift when dragging nodes over folders. + * By setting the position to relative on the parent and using an absolutely positioned pseudo-element, + * we can create a visual indicator for the drop target without affecting the layout of other elements. + */ +[data-v-82fb18cb] .p-tree-node-content:has(.tree-folder) { + position: relative; +} +[data-v-82fb18cb] .p-tree-node-content:has(.tree-folder.can-drop)::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border: 1px solid var(--p-content-color); + pointer-events: none; +} + +[data-v-100ab5c6] .p-toolbar-end .p-button { + padding-top: 0.25rem; + padding-bottom: 0.25rem +} +@media (min-width: 1536px) { +[data-v-100ab5c6] .p-toolbar-end .p-button { + padding-top: 0.5rem; + padding-bottom: 0.5rem +} +} + +.model_preview[data-v-32e6c4d9] { + background-color: var(--comfy-menu-bg); + font-family: 'Open Sans', sans-serif; + color: var(--descrip-text); + border: 1px solid var(--descrip-text); + min-width: 300px; + max-width: 500px; + width: -moz-fit-content; + width: fit-content; + height: -moz-fit-content; + height: fit-content; + z-index: 9999; + border-radius: 12px; + overflow: hidden; + font-size: 12px; + padding: 10px; +} +.model_preview_image[data-v-32e6c4d9] { + margin: auto; + width: -moz-fit-content; + width: fit-content; +} +.model_preview_image img[data-v-32e6c4d9] { + max-width: 100%; + max-height: 150px; + -o-object-fit: contain; + object-fit: contain; +} +.model_preview_title[data-v-32e6c4d9] { + font-weight: bold; + text-align: center; + font-size: 14px; +} +.model_preview_top_container[data-v-32e6c4d9] { + text-align: center; + line-height: 0.5; +} +.model_preview_filename[data-v-32e6c4d9], +.model_preview_author[data-v-32e6c4d9], +.model_preview_architecture[data-v-32e6c4d9] { + display: inline-block; + text-align: center; + margin: 5px; + font-size: 10px; +} +.model_preview_prefix[data-v-32e6c4d9] { + font-weight: bold; +} + +.model-lib-model-icon-container[data-v-be871f15] { + display: inline-block; + position: relative; + left: 0; + height: 1.5rem; + vertical-align: top; + width: 0px; +} +.model-lib-model-icon[data-v-be871f15] { + background-size: cover; + background-position: center; + display: inline-block; + position: relative; + left: -2.5rem; + height: 2rem; + width: 2rem; + vertical-align: top; +} + +[data-v-31a92a0f] .pi-fake-spacer { + height: 1px; + width: 16px; +} + +.slot_row[data-v-e86c3783] { + padding: 2px; +} + +/* Original N-Sidebar styles */ +._sb_dot[data-v-e86c3783] { + width: 8px; + height: 8px; + border-radius: 50%; + background-color: grey; +} +.node_header[data-v-e86c3783] { + line-height: 1; + padding: 8px 13px 7px; + margin-bottom: 5px; + font-size: 15px; + text-wrap: nowrap; + overflow: hidden; + display: flex; + align-items: center; +} +.headdot[data-v-e86c3783] { + width: 10px; + height: 10px; + float: inline-start; + margin-right: 8px; +} +.IMAGE[data-v-e86c3783] { + background-color: #64b5f6; +} +.VAE[data-v-e86c3783] { + background-color: #ff6e6e; +} +.LATENT[data-v-e86c3783] { + background-color: #ff9cf9; +} +.MASK[data-v-e86c3783] { + background-color: #81c784; +} +.CONDITIONING[data-v-e86c3783] { + background-color: #ffa931; +} +.CLIP[data-v-e86c3783] { + background-color: #ffd500; +} +.MODEL[data-v-e86c3783] { + background-color: #b39ddb; +} +.CONTROL_NET[data-v-e86c3783] { + background-color: #a5d6a7; +} +._sb_node_preview[data-v-e86c3783] { + background-color: var(--comfy-menu-bg); + font-family: 'Open Sans', sans-serif; + font-size: small; + color: var(--descrip-text); + border: 1px solid var(--descrip-text); + min-width: 300px; + width: -moz-min-content; + width: min-content; + height: -moz-fit-content; + height: fit-content; + z-index: 9999; + border-radius: 12px; + overflow: hidden; + font-size: 12px; + padding-bottom: 10px; +} +._sb_node_preview ._sb_description[data-v-e86c3783] { + margin: 10px; + padding: 6px; + background: var(--border-color); + border-radius: 5px; + font-style: italic; + font-weight: 500; + font-size: 0.9rem; + word-break: break-word; +} +._sb_table[data-v-e86c3783] { + display: grid; + + grid-column-gap: 10px; + /* Spazio tra le colonne */ + width: 100%; + /* Imposta la larghezza della tabella al 100% del contenitore */ +} +._sb_row[data-v-e86c3783] { + display: grid; + grid-template-columns: 10px 1fr 1fr 1fr 10px; + grid-column-gap: 10px; + align-items: center; + padding-left: 9px; + padding-right: 9px; +} +._sb_row_string[data-v-e86c3783] { + grid-template-columns: 10px 1fr 1fr 10fr 1fr; +} +._sb_col[data-v-e86c3783] { + border: 0px solid #000; + display: flex; + align-items: flex-end; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-content: flex-start; + justify-content: flex-end; +} +._sb_inherit[data-v-e86c3783] { + display: inherit; +} +._long_field[data-v-e86c3783] { + background: var(--bg-color); + border: 2px solid var(--border-color); + margin: 5px 5px 0 5px; + border-radius: 10px; + line-height: 1.7; + text-wrap: nowrap; +} +._sb_arrow[data-v-e86c3783] { + color: var(--fg-color); +} +._sb_preview_badge[data-v-e86c3783] { + text-align: center; + background: var(--comfy-input-bg); + font-weight: bold; + color: var(--error-text); +} + +.node-lib-node-container[data-v-20bd95eb] { + height: 100%; + width: 100% +} + +.p-selectbutton .p-button[data-v-29268946] { + padding: 0.5rem; +} +.p-selectbutton .p-button .pi[data-v-29268946] { + font-size: 1.5rem; +} +.field[data-v-29268946] { + display: flex; + flex-direction: column; + gap: 0.5rem; +} +.color-picker-container[data-v-29268946] { + display: flex; + align-items: center; + gap: 0.5rem; +} + +._content[data-v-2fc57c5b] { + + display: flex; + + flex-direction: column +} +._content[data-v-2fc57c5b] > :not([hidden]) ~ :not([hidden]) { + + --tw-space-y-reverse: 0; + + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)) +} +._footer[data-v-2fc57c5b] { + + display: flex; + + flex-direction: column; + + align-items: flex-end; + + padding-top: 1rem +} + +.comfy-image-wrap[data-v-ffe66146] { + display: contents; +} +.comfy-image-blur[data-v-ffe66146] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.comfy-image-main[data-v-ffe66146] { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; + -o-object-position: center; + object-position: center; + z-index: 1; +} +.contain .comfy-image-wrap[data-v-ffe66146] { + position: relative; + width: 100%; + height: 100%; +} +.contain .comfy-image-main[data-v-ffe66146] { + -o-object-fit: contain; + object-fit: contain; + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + position: absolute; +} +.broken-image-placeholder[data-v-ffe66146] { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + margin: 2rem; +} +.broken-image-placeholder i[data-v-ffe66146] { + font-size: 3rem; + margin-bottom: 0.5rem; +} + +.result-container[data-v-62b7731e] { + width: 100%; + height: 100%; + aspect-ratio: 1 / 1; + overflow: hidden; + position: relative; + display: flex; + justify-content: center; + align-items: center; +} +.preview-mask[data-v-62b7731e] { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transition: opacity 0.3s ease; + z-index: 1; +} +.result-container:hover .preview-mask[data-v-62b7731e] { + opacity: 1; +} + +.task-result-preview[data-v-28bce53e] { + aspect-ratio: 1 / 1; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} +.task-result-preview i[data-v-28bce53e], +.task-result-preview span[data-v-28bce53e] { + font-size: 2rem; +} +.task-item[data-v-28bce53e] { + display: flex; + flex-direction: column; + border-radius: 4px; + overflow: hidden; + position: relative; +} +.task-item-details[data-v-28bce53e] { + position: absolute; + bottom: 0; + padding: 0.6rem; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + z-index: 1; +} +.task-node-link[data-v-28bce53e] { + padding: 2px; +} + +/* In dark mode, transparent background color for tags is not ideal for tags that +are floating on top of images. */ +.tag-wrapper[data-v-28bce53e] { + background-color: var(--p-primary-contrast-color); + border-radius: 6px; + display: inline-flex; +} +.node-name-tag[data-v-28bce53e] { + word-break: break-all; +} +.status-tag-group[data-v-28bce53e] { + display: flex; + flex-direction: column; +} +.progress-preview-img[data-v-28bce53e] { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; + -o-object-position: center; + object-position: center; +} + +/* PrimeVue's galleria teleports the fullscreen gallery out of subtree so we +cannot use scoped style here. */ +img.galleria-image { + max-width: 100vw; + max-height: 100vh; + -o-object-fit: contain; + object-fit: contain; +} +.p-galleria-close-button { + /* Set z-index so the close button doesn't get hidden behind the image when image is large */ + z-index: 1; +} + +.scroll-container[data-v-375f3c50] { + height: 100%; + overflow-y: auto; +} +.scroll-container[data-v-375f3c50]::-webkit-scrollbar { + width: 1px; +} +.scroll-container[data-v-375f3c50]::-webkit-scrollbar-thumb { + background-color: transparent; +} +.queue-grid[data-v-375f3c50] { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + padding: 0.5rem; + gap: 0.5rem; +} + +.global-dialog .p-dialog-header { + padding: 0.5rem +} +@media (min-width: 1536px) { +.global-dialog .p-dialog-header { + padding: var(--p-dialog-header-padding) +} +} +.global-dialog .p-dialog-header { + padding-bottom: 0px +} +.global-dialog .p-dialog-content { + padding: 0.5rem +} +@media (min-width: 1536px) { +.global-dialog .p-dialog-content { + padding: var(--p-dialog-content-padding) +} +} +.global-dialog .p-dialog-content { + padding-top: 0px +} +/* this CSS contains only the basic CSS needed to run the app and use it */ + +.lgraphcanvas { + /*cursor: crosshair;*/ + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + outline: none; + font-family: Tahoma, sans-serif; +} + +.lgraphcanvas * { + box-sizing: border-box; +} + +.litegraph.litecontextmenu { + font-family: Tahoma, sans-serif; + position: fixed; + top: 100px; + left: 100px; + min-width: 100px; + color: #aaf; + padding: 0; + box-shadow: 0 0 10px black !important; + background-color: #2e2e2e !important; + z-index: 10; +} + +.litegraph.litecontextmenu.dark { + background-color: #000 !important; +} + +.litegraph.litecontextmenu .litemenu-title img { + margin-top: 2px; + margin-left: 2px; + margin-right: 4px; +} + +.litegraph.litecontextmenu .litemenu-entry { + margin: 2px; + padding: 2px; +} + +.litegraph.litecontextmenu .litemenu-entry.submenu { + background-color: #2e2e2e !important; +} + +.litegraph.litecontextmenu.dark .litemenu-entry.submenu { + background-color: #000 !important; +} + +.litegraph .litemenubar ul { + font-family: Tahoma, sans-serif; + margin: 0; + padding: 0; +} + +.litegraph .litemenubar li { + font-size: 14px; + color: #999; + display: inline-block; + min-width: 50px; + padding-left: 10px; + padding-right: 10px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + cursor: pointer; +} + +.litegraph .litemenubar li:hover { + background-color: #777; + color: #eee; +} + +.litegraph .litegraph .litemenubar-panel { + position: absolute; + top: 5px; + left: 5px; + min-width: 100px; + background-color: #444; + box-shadow: 0 0 3px black; + padding: 4px; + border-bottom: 2px solid #aaf; + z-index: 10; +} + +.litegraph .litemenu-entry, +.litemenu-title { + font-size: 12px; + color: #aaa; + padding: 0 0 0 4px; + margin: 2px; + padding-left: 2px; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + cursor: pointer; +} + +.litegraph .litemenu-entry .icon { + display: inline-block; + width: 12px; + height: 12px; + margin: 2px; + vertical-align: top; +} + +.litegraph .litemenu-entry.checked .icon { + background-color: #aaf; +} + +.litegraph .litemenu-entry .more { + float: right; + padding-right: 5px; +} + +.litegraph .litemenu-entry.disabled { + opacity: 0.5; + cursor: default; +} + +.litegraph .litemenu-entry.separator { + display: block; + border-top: 1px solid #333; + border-bottom: 1px solid #666; + width: 100%; + height: 0px; + margin: 3px 0 2px 0; + background-color: transparent; + padding: 0 !important; + cursor: default !important; +} + +.litegraph .litemenu-entry.has_submenu { + border-right: 2px solid cyan; +} + +.litegraph .litemenu-title { + color: #dde; + background-color: #111; + margin: 0; + padding: 2px; + cursor: default; +} + +.litegraph .litemenu-entry:hover:not(.disabled):not(.separator) { + background-color: #444 !important; + color: #eee; + transition: all 0.2s; +} + +.litegraph .litemenu-entry .property_name { + display: inline-block; + text-align: left; + min-width: 80px; + min-height: 1.2em; +} + +.litegraph .litemenu-entry .property_value { + display: inline-block; + background-color: rgba(0, 0, 0, 0.5); + text-align: right; + min-width: 80px; + min-height: 1.2em; + vertical-align: middle; + padding-right: 10px; +} + +.litegraph.litesearchbox { + font-family: Tahoma, sans-serif; + position: absolute; + background-color: rgba(0, 0, 0, 0.5); + padding-top: 4px; +} + +.litegraph.litesearchbox input, +.litegraph.litesearchbox select { + margin-top: 3px; + min-width: 60px; + min-height: 1.5em; + background-color: black; + border: 0; + color: white; + padding-left: 10px; + margin-right: 5px; + max-width: 300px; +} + +.litegraph.litesearchbox .name { + display: inline-block; + min-width: 60px; + min-height: 1.5em; + padding-left: 10px; +} + +.litegraph.litesearchbox .helper { + overflow: auto; + max-height: 200px; + margin-top: 2px; +} + +.litegraph.lite-search-item { + font-family: Tahoma, sans-serif; + background-color: rgba(0, 0, 0, 0.5); + color: white; + padding-top: 2px; +} + +.litegraph.lite-search-item.not_in_filter { + /*background-color: rgba(50, 50, 50, 0.5);*/ + /*color: #999;*/ + color: #b99; + font-style: italic; +} + +.litegraph.lite-search-item.generic_type { + /*background-color: rgba(50, 50, 50, 0.5);*/ + /*color: #DD9;*/ + color: #999; + font-style: italic; +} + +.litegraph.lite-search-item:hover, +.litegraph.lite-search-item.selected { + cursor: pointer; + background-color: white; + color: black; +} + +.litegraph.lite-search-item-type { + display: inline-block; + background: rgba(0, 0, 0, 0.2); + margin-left: 5px; + font-size: 14px; + padding: 2px 5px; + position: relative; + top: -2px; + opacity: 0.8; + border-radius: 4px; +} + +/* DIALOGs ******/ + +.litegraph .dialog { + position: absolute; + top: 50%; + left: 50%; + margin-top: -150px; + margin-left: -200px; + + background-color: #2a2a2a; + + min-width: 400px; + min-height: 200px; + box-shadow: 0 0 4px #111; + border-radius: 6px; +} + +.litegraph .dialog.settings { + left: 10px; + top: 10px; + height: calc(100% - 20px); + margin: auto; + max-width: 50%; +} + +.litegraph .dialog.centered { + top: 50px; + left: 50%; + position: absolute; + transform: translateX(-50%); + min-width: 600px; + min-height: 300px; + height: calc(100% - 100px); + margin: auto; +} + +.litegraph .dialog .close { + float: right; + margin: 4px; + margin-right: 10px; + cursor: pointer; + font-size: 1.4em; +} + +.litegraph .dialog .close:hover { + color: white; +} + +.litegraph .dialog .dialog-header { + color: #aaa; + border-bottom: 1px solid #161616; + height: 40px; +} +.litegraph .dialog .dialog-footer { + height: 50px; + padding: 10px; + border-top: 1px solid #1a1a1a; +} + +.litegraph .dialog .dialog-header .dialog-title { + font: 20px "Arial"; + margin: 4px; + padding: 4px 10px; + display: inline-block; +} + +.litegraph .dialog .dialog-content, +.litegraph .dialog .dialog-alt-content { + height: calc(100% - 90px); + width: 100%; + min-height: 100px; + display: inline-block; + color: #aaa; + /*background-color: black;*/ + overflow: auto; +} + +.litegraph .dialog .dialog-content h3 { + margin: 10px; +} + +.litegraph .dialog .dialog-content .connections { + flex-direction: row; +} + +.litegraph .dialog .dialog-content .connections .connections_side { + width: calc(50% - 5px); + min-height: 100px; + background-color: black; + display: flex; +} + +.litegraph .dialog .node_type { + font-size: 1.2em; + display: block; + margin: 10px; +} + +.litegraph .dialog .node_desc { + opacity: 0.5; + display: block; + margin: 10px; +} + +.litegraph .dialog .separator { + display: block; + width: calc(100% - 4px); + height: 1px; + border-top: 1px solid #000; + border-bottom: 1px solid #333; + margin: 10px 2px; + padding: 0; +} + +.litegraph .dialog .property { + margin-bottom: 2px; + padding: 4px; +} + +.litegraph .dialog .property:hover { + background: #545454; +} + +.litegraph .dialog .property_name { + color: #737373; + display: inline-block; + text-align: left; + vertical-align: top; + width: 160px; + padding-left: 4px; + overflow: hidden; + margin-right: 6px; +} + +.litegraph .dialog .property:hover .property_name { + color: white; +} + +.litegraph .dialog .property_value { + display: inline-block; + text-align: right; + color: #aaa; + background-color: #1a1a1a; + /*width: calc( 100% - 122px );*/ + max-width: calc(100% - 162px); + min-width: 200px; + max-height: 300px; + min-height: 20px; + padding: 4px; + padding-right: 12px; + overflow: hidden; + cursor: pointer; + border-radius: 3px; +} + +.litegraph .dialog .property_value:hover { + color: white; +} + +.litegraph .dialog .property.boolean .property_value { + padding-right: 30px; + color: #a88; + /*width: auto; + float: right;*/ +} + +.litegraph .dialog .property.boolean.bool-on .property_name { + color: #8a8; +} +.litegraph .dialog .property.boolean.bool-on .property_value { + color: #8a8; +} + +.litegraph .dialog .btn { + border: 0; + border-radius: 4px; + padding: 4px 20px; + margin-left: 0px; + background-color: #060606; + color: #8e8e8e; +} + +.litegraph .dialog .btn:hover { + background-color: #111; + color: #fff; +} + +.litegraph .dialog .btn.delete:hover { + background-color: #f33; + color: black; +} + +.litegraph .subgraph_property { + padding: 4px; +} + +.litegraph .subgraph_property:hover { + background-color: #333; +} + +.litegraph .subgraph_property.extra { + margin-top: 8px; +} + +.litegraph .subgraph_property span.name { + font-size: 1.3em; + padding-left: 4px; +} + +.litegraph .subgraph_property span.type { + opacity: 0.5; + margin-right: 20px; + padding-left: 4px; +} + +.litegraph .subgraph_property span.label { + display: inline-block; + width: 60px; + padding: 0px 10px; +} + +.litegraph .subgraph_property input { + width: 140px; + color: #999; + background-color: #1a1a1a; + border-radius: 4px; + border: 0; + margin-right: 10px; + padding: 4px; + padding-left: 10px; +} + +.litegraph .subgraph_property button { + background-color: #1c1c1c; + color: #aaa; + border: 0; + border-radius: 2px; + padding: 4px 10px; + cursor: pointer; +} + +.litegraph .subgraph_property.extra { + color: #ccc; +} + +.litegraph .subgraph_property.extra input { + background-color: #111; +} + +.litegraph .bullet_icon { + margin-left: 10px; + border-radius: 10px; + width: 12px; + height: 12px; + background-color: #666; + display: inline-block; + margin-top: 2px; + margin-right: 4px; + transition: background-color 0.1s ease 0s; + -moz-transition: background-color 0.1s ease 0s; +} + +.litegraph .bullet_icon:hover { + background-color: #698; + cursor: pointer; +} + +/* OLD */ + +.graphcontextmenu { + padding: 4px; + min-width: 100px; +} + +.graphcontextmenu-title { + color: #dde; + background-color: #222; + margin: 0; + padding: 2px; + cursor: default; +} + +.graphmenu-entry { + box-sizing: border-box; + margin: 2px; + padding-left: 20px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + transition: all linear 0.3s; +} + +.graphmenu-entry.event, +.litemenu-entry.event { + border-left: 8px solid orange; + padding-left: 12px; +} + +.graphmenu-entry.disabled { + opacity: 0.3; +} + +.graphmenu-entry.submenu { + border-right: 2px solid #eee; +} + +.graphmenu-entry:hover { + background-color: #555; +} + +.graphmenu-entry.separator { + background-color: #111; + border-bottom: 1px solid #666; + height: 1px; + width: calc(100% - 20px); + -moz-width: calc(100% - 20px); + -webkit-width: calc(100% - 20px); +} + +.graphmenu-entry .property_name { + display: inline-block; + text-align: left; + min-width: 80px; + min-height: 1.2em; +} + +.graphmenu-entry .property_value, +.litemenu-entry .property_value { + display: inline-block; + background-color: rgba(0, 0, 0, 0.5); + text-align: right; + min-width: 80px; + min-height: 1.2em; + vertical-align: middle; + padding-right: 10px; +} + +.graphdialog { + position: absolute; + top: 10px; + left: 10px; + min-height: 2em; + background-color: #333; + font-size: 1.2em; + box-shadow: 0 0 10px black !important; + z-index: 10; +} + +.graphdialog.rounded { + border-radius: 12px; + padding-right: 2px; +} + +.graphdialog .name { + display: inline-block; + min-width: 60px; + min-height: 1.5em; + padding-left: 10px; +} + +.graphdialog input, +.graphdialog textarea, +.graphdialog select { + margin: 3px; + min-width: 60px; + min-height: 1.5em; + background-color: black; + border: 0; + color: white; + padding-left: 10px; + outline: none; +} + +.graphdialog textarea { + min-height: 150px; +} + +.graphdialog button { + margin-top: 3px; + vertical-align: top; + background-color: #999; + border: 0; +} + +.graphdialog button.rounded, +.graphdialog input.rounded { + border-radius: 0 12px 12px 0; +} + +.graphdialog .helper { + overflow: auto; + max-height: 200px; +} + +.graphdialog .help-item { + padding-left: 10px; +} + +.graphdialog .help-item:hover, +.graphdialog .help-item.selected { + cursor: pointer; + background-color: white; + color: black; +} + +.litegraph .dialog { + min-height: 0; +} +.litegraph .dialog .dialog-content { + display: block; +} +.litegraph .dialog .dialog-content .subgraph_property { + padding: 5px; +} +.litegraph .dialog .dialog-footer { + margin: 0; +} +.litegraph .dialog .dialog-footer .subgraph_property { + margin-top: 0; + display: flex; + align-items: center; + padding: 5px; +} +.litegraph .dialog .dialog-footer .subgraph_property .name { + flex: 1; +} +.litegraph .graphdialog { + display: flex; + align-items: center; + border-radius: 20px; + padding: 4px 10px; + position: fixed; +} +.litegraph .graphdialog .name { + padding: 0; + min-height: 0; + font-size: 16px; + vertical-align: middle; +} +.litegraph .graphdialog .value { + font-size: 16px; + min-height: 0; + margin: 0 10px; + padding: 2px 5px; +} +.litegraph .graphdialog input[type="checkbox"] { + width: 16px; + height: 16px; +} +.litegraph .graphdialog button { + padding: 4px 18px; + border-radius: 20px; + cursor: pointer; +} +@layer primevue, tailwind-utilities; + +@layer tailwind-utilities { + .container{ + width: 100%; + } + @media (min-width: 640px){ + + .container{ + max-width: 640px; + } + } + @media (min-width: 768px){ + + .container{ + max-width: 768px; + } + } + @media (min-width: 1024px){ + + .container{ + max-width: 1024px; + } + } + @media (min-width: 1280px){ + + .container{ + max-width: 1280px; + } + } + @media (min-width: 1536px){ + + .container{ + max-width: 1536px; + } + } + @media (min-width: 1800px){ + + .container{ + max-width: 1800px; + } + } + @media (min-width: 2500px){ + + .container{ + max-width: 2500px; + } + } + @media (min-width: 3200px){ + + .container{ + max-width: 3200px; + } + } + .pointer-events-none{ + pointer-events: none; + } + .pointer-events-auto{ + pointer-events: auto; + } + .\!visible{ + visibility: visible !important; + } + .visible{ + visibility: visible; + } + .invisible{ + visibility: hidden; + } + .collapse{ + visibility: collapse; + } + .static{ + position: static; + } + .fixed{ + position: fixed; + } + .absolute{ + position: absolute; + } + .relative{ + position: relative; + } + .inset-0{ + inset: 0px; + } + .bottom-\[10px\]{ + bottom: 10px; + } + .bottom-full{ + bottom: 100%; + } + .left-0{ + left: 0px; + } + .left-\[-350px\]{ + left: -350px; + } + .right-\[10px\]{ + right: 10px; + } + .top-0{ + top: 0px; + } + .top-\[50px\]{ + top: 50px; + } + .top-auto{ + top: auto; + } + .z-10{ + z-index: 10; + } + .z-\[1000\]{ + z-index: 1000; + } + .col-start-1{ + grid-column-start: 1; + } + .row-start-1{ + grid-row-start: 1; + } + .m-0{ + margin: 0px; + } + .m-2{ + margin: 0.5rem; + } + .mx-0{ + margin-left: 0px; + margin-right: 0px; + } + .mx-1{ + margin-left: 0.25rem; + margin-right: 0.25rem; + } + .mx-2{ + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .mx-6{ + margin-left: 1.5rem; + margin-right: 1.5rem; + } + .mx-auto{ + margin-left: auto; + margin-right: auto; + } + .my-0{ + margin-top: 0px; + margin-bottom: 0px; + } + .my-1{ + margin-top: 0.25rem; + margin-bottom: 0.25rem; + } + .my-2{ + margin-top: 0.5rem; + margin-bottom: 0.5rem; + } + .my-2\.5{ + margin-top: 0.625rem; + margin-bottom: 0.625rem; + } + .my-4{ + margin-top: 1rem; + margin-bottom: 1rem; + } + .mb-2{ + margin-bottom: 0.5rem; + } + .mb-3{ + margin-bottom: 0.75rem; + } + .mb-4{ + margin-bottom: 1rem; + } + .mb-6{ + margin-bottom: 1.5rem; + } + .mb-7{ + margin-bottom: 1.75rem; + } + .ml-2{ + margin-left: 0.5rem; + } + .ml-\[-13px\]{ + margin-left: -13px; + } + .ml-auto{ + margin-left: auto; + } + .mr-1{ + margin-right: 0.25rem; + } + .mr-2{ + margin-right: 0.5rem; + } + .mt-0{ + margin-top: 0px; + } + .mt-1{ + margin-top: 0.25rem; + } + .mt-2{ + margin-top: 0.5rem; + } + .mt-24{ + margin-top: 6rem; + } + .mt-4{ + margin-top: 1rem; + } + .mt-5{ + margin-top: 1.25rem; + } + .mt-\[5vh\]{ + margin-top: 5vh; + } + .block{ + display: block; + } + .inline-block{ + display: inline-block; + } + .inline{ + display: inline; + } + .flex{ + display: flex; + } + .inline-flex{ + display: inline-flex; + } + .table{ + display: table; + } + .grid{ + display: grid; + } + .contents{ + display: contents; + } + .hidden{ + display: none; + } + .h-0{ + height: 0px; + } + .h-6{ + height: 1.5rem; + } + .h-64{ + height: 16rem; + } + .h-\[22px\]{ + height: 22px; + } + .h-full{ + height: 100%; + } + .h-screen{ + height: 100vh; + } + .min-h-8{ + min-height: 2rem; + } + .min-h-screen{ + min-height: 100vh; + } + .w-12{ + width: 3rem; + } + .w-14{ + width: 3.5rem; + } + .w-3\/12{ + width: 25%; + } + .w-48{ + width: 12rem; + } + .w-6{ + width: 1.5rem; + } + .w-64{ + width: 16rem; + } + .w-\[22px\]{ + width: 22px; + } + .w-\[600px\]{ + width: 600px; + } + .w-auto{ + width: auto; + } + .w-fit{ + width: -moz-fit-content; + width: fit-content; + } + .w-full{ + width: 100%; + } + .w-screen{ + width: 100vw; + } + .min-w-84{ + min-width: 22rem; + } + .min-w-96{ + min-width: 26rem; + } + .max-w-64{ + max-width: 16rem; + } + .max-w-\[150px\]{ + max-width: 150px; + } + .max-w-full{ + max-width: 100%; + } + .max-w-screen-sm{ + max-width: 640px; + } + .flex-1{ + flex: 1 1 0%; + } + .flex-shrink-0{ + flex-shrink: 0; + } + .shrink-0{ + flex-shrink: 0; + } + .flex-grow{ + flex-grow: 1; + } + .flex-grow-0{ + flex-grow: 0; + } + .grow{ + flex-grow: 1; + } + .scale-75{ + --tw-scale-x: .75; + --tw-scale-y: .75; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + } + .transform{ + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + } + .cursor-move{ + cursor: move; + } + .cursor-not-allowed{ + cursor: not-allowed; + } + .cursor-pointer{ + cursor: pointer; + } + .select-none{ + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + } + .resize{ + resize: both; + } + .list-inside{ + list-style-position: inside; + } + .list-disc{ + list-style-type: disc; + } + .grid-cols-2{ + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .flex-row{ + flex-direction: row; + } + .flex-row-reverse{ + flex-direction: row-reverse; + } + .flex-col{ + flex-direction: column; + } + .flex-wrap{ + flex-wrap: wrap; + } + .flex-nowrap{ + flex-wrap: nowrap; + } + .place-content-center{ + place-content: center; + } + .place-items-center{ + place-items: center; + } + .content-around{ + align-content: space-around; + } + .items-center{ + align-items: center; + } + .justify-end{ + justify-content: flex-end; + } + .justify-center{ + justify-content: center; + } + .justify-between{ + justify-content: space-between; + } + .justify-around{ + justify-content: space-around; + } + .gap-0{ + gap: 0px; + } + .gap-2{ + gap: 0.5rem; + } + .gap-3{ + gap: 0.75rem; + } + .gap-4{ + gap: 1rem; + } + .gap-6{ + gap: 1.5rem; + } + .gap-8{ + gap: 2rem; + } + .space-y-1 > :not([hidden]) ~ :not([hidden]){ + --tw-space-y-reverse: 0; + margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); + } + .space-y-2 > :not([hidden]) ~ :not([hidden]){ + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); + } + .space-y-4 > :not([hidden]) ~ :not([hidden]){ + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); + } + .justify-self-end{ + justify-self: end; + } + .overflow-hidden{ + overflow: hidden; + } + .overflow-y-auto{ + overflow-y: auto; + } + .overflow-x-hidden{ + overflow-x: hidden; + } + .truncate{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .text-ellipsis{ + text-overflow: ellipsis; + } + .whitespace-nowrap{ + white-space: nowrap; + } + .whitespace-pre-line{ + white-space: pre-line; + } + .whitespace-pre-wrap{ + white-space: pre-wrap; + } + .text-wrap{ + text-wrap: wrap; + } + .rounded{ + border-radius: 0.25rem; + } + .rounded-lg{ + border-radius: 0.5rem; + } + .rounded-none{ + border-radius: 0px; + } + .border{ + border-width: 1px; + } + .border-x-0{ + border-left-width: 0px; + border-right-width: 0px; + } + .border-t-0{ + border-top-width: 0px; + } + .border-none{ + border-style: none; + } + .bg-\[var\(--comfy-menu-bg\)\]{ + background-color: var(--comfy-menu-bg); + } + .bg-\[var\(--p-tree-background\)\]{ + background-color: var(--p-tree-background); + } + .bg-black{ + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); + } + .bg-blue-500{ + --tw-bg-opacity: 1; + background-color: rgb(66 153 225 / var(--tw-bg-opacity)); + } + .bg-green-500{ + --tw-bg-opacity: 1; + background-color: rgb(150 206 76 / var(--tw-bg-opacity)); + } + .bg-neutral-300{ + --tw-bg-opacity: 1; + background-color: rgb(212 212 212 / var(--tw-bg-opacity)); + } + .bg-neutral-800{ + --tw-bg-opacity: 1; + background-color: rgb(38 38 38 / var(--tw-bg-opacity)); + } + .bg-neutral-900{ + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity)); + } + .bg-red-500{ + --tw-bg-opacity: 1; + background-color: rgb(239 68 68 / var(--tw-bg-opacity)); + } + .bg-red-700{ + --tw-bg-opacity: 1; + background-color: rgb(185 28 28 / var(--tw-bg-opacity)); + } + .bg-transparent{ + background-color: transparent; + } + .bg-opacity-50{ + --tw-bg-opacity: 0.5; + } + .bg-\[url\(\'\/assets\/images\/Git-Logo-White\.svg\'\)\]{ + background-image: url('../assets/images/Git-Logo-White.svg'); + } + .bg-right-top{ + background-position: right top; + } + .bg-no-repeat{ + background-repeat: no-repeat; + } + .bg-origin-padding{ + background-origin: padding-box; + } + .object-cover{ + -o-object-fit: cover; + object-fit: cover; + } + .p-0{ + padding: 0px; + } + .p-1{ + padding: 0.25rem; + } + .p-2{ + padding: 0.5rem; + } + .p-3{ + padding: 0.75rem; + } + .p-4{ + padding: 1rem; + } + .p-5{ + padding: 1.25rem; + } + .p-8{ + padding: 2rem; + } + .px-0{ + padding-left: 0px; + padding-right: 0px; + } + .px-10{ + padding-left: 2.5rem; + padding-right: 2.5rem; + } + .px-2{ + padding-left: 0.5rem; + padding-right: 0.5rem; + } + .px-4{ + padding-left: 1rem; + padding-right: 1rem; + } + .py-0{ + padding-top: 0px; + padding-bottom: 0px; + } + .py-1{ + padding-top: 0.25rem; + padding-bottom: 0.25rem; + } + .pb-0{ + padding-bottom: 0px; + } + .pl-4{ + padding-left: 1rem; + } + .pl-6{ + padding-left: 1.5rem; + } + .pr-0{ + padding-right: 0px; + } + .pr-2{ + padding-right: 0.5rem; + } + .pt-2{ + padding-top: 0.5rem; + } + .pt-4{ + padding-top: 1rem; + } + .pt-6{ + padding-top: 1.5rem; + } + .pt-8{ + padding-top: 2rem; + } + .text-center{ + text-align: center; + } + .font-sans{ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + } + .text-2xl{ + font-size: 1.5rem; + } + .text-4xl{ + font-size: 2.25rem; + } + .text-lg{ + font-size: 1.125rem; + } + .text-sm{ + font-size: 0.875rem; + } + .text-xl{ + font-size: 1.25rem; + } + .text-xs{ + font-size: 0.75rem; + } + .font-bold{ + font-weight: 700; + } + .font-light{ + font-weight: 300; + } + .font-medium{ + font-weight: 500; + } + .font-normal{ + font-weight: 400; + } + .font-semibold{ + font-weight: 600; + } + .uppercase{ + text-transform: uppercase; + } + .italic{ + font-style: italic; + } + .text-blue-400{ + --tw-text-opacity: 1; + color: rgb(99 179 237 / var(--tw-text-opacity)); + } + .text-gray-400{ + --tw-text-opacity: 1; + color: rgb(203 213 224 / var(--tw-text-opacity)); + } + .text-green-500{ + --tw-text-opacity: 1; + color: rgb(150 206 76 / var(--tw-text-opacity)); + } + .text-highlight{ + color: var(--p-primary-color); + } + .text-muted{ + color: var(--p-text-muted-color); + } + .text-neutral-100{ + --tw-text-opacity: 1; + color: rgb(245 245 245 / var(--tw-text-opacity)); + } + .text-neutral-200{ + --tw-text-opacity: 1; + color: rgb(229 229 229 / var(--tw-text-opacity)); + } + .text-neutral-300{ + --tw-text-opacity: 1; + color: rgb(212 212 212 / var(--tw-text-opacity)); + } + .text-neutral-400{ + --tw-text-opacity: 1; + color: rgb(163 163 163 / var(--tw-text-opacity)); + } + .text-neutral-800{ + --tw-text-opacity: 1; + color: rgb(38 38 38 / var(--tw-text-opacity)); + } + .text-neutral-900{ + --tw-text-opacity: 1; + color: rgb(23 23 23 / var(--tw-text-opacity)); + } + .text-red-500{ + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity)); + } + .no-underline{ + text-decoration-line: none; + } + .opacity-0{ + opacity: 0; + } + .shadow-lg{ + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + } + .outline{ + outline-style: solid; + } + .blur{ + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } + .drop-shadow{ + --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } + .invert{ + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } + .filter{ + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } + .backdrop-filter{ + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + } + .transition{ + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + .transition-all{ + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + .duration-100{ + transition-duration: 100ms; + } + .duration-300{ + transition-duration: 300ms; + } + .ease-in{ + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); + } + .ease-in-out{ + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + } + .ease-out{ + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); + } + .content-\[\'\'\]{ + --tw-content: ''; + content: var(--tw-content); + } +} + +:root { + --fg-color: #000; + --bg-color: #fff; + --comfy-menu-bg: #353535; + --comfy-menu-secondary-bg: #292929; + --comfy-input-bg: #222; + --input-text: #ddd; + --descrip-text: #999; + --drag-text: #ccc; + --error-text: #ff4444; + --border-color: #4e4e4e; + --tr-even-bg-color: #222; + --tr-odd-bg-color: #353535; + --primary-bg: #236692; + --primary-fg: #ffffff; + --primary-hover-bg: #3485bb; + --primary-hover-fg: #ffffff; + --content-bg: #e0e0e0; + --content-fg: #000; + --content-hover-bg: #adadad; + --content-hover-fg: #000; +} + +@media (prefers-color-scheme: dark) { + :root { + --fg-color: #fff; + --bg-color: #202020; + --content-bg: #4e4e4e; + --content-fg: #fff; + --content-hover-bg: #222; + --content-hover-fg: #fff; + } +} + +body { + width: 100vw; + height: 100vh; + margin: 0; + overflow: hidden; + grid-template-columns: auto 1fr auto; + grid-template-rows: auto 1fr auto; + background: var(--bg-color) var(--bg-img); + color: var(--fg-color); + min-height: -webkit-fill-available; + max-height: -webkit-fill-available; + min-width: -webkit-fill-available; + max-width: -webkit-fill-available; + font-family: Arial, sans-serif; +} + +/** + +------------------+------------------+------------------+ + | | + | .comfyui-body- | + | top | + | (spans all cols) | + | | + +------------------+------------------+------------------+ + | | | | + | .comfyui-body- | #graph-canvas | .comfyui-body- | + | left | | right | + | | | | + | | | | + +------------------+------------------+------------------+ + | | + | .comfyui-body- | + | bottom | + | (spans all cols) | + | | + +------------------+------------------+------------------+ +*/ + +.comfyui-body-top { + order: -5; + /* Span across all columns */ + grid-column: 1/-1; + /* Position at the first row */ + grid-row: 1; + /* Top menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */ + /* Top menu bar z-index needs to be higher than bottom menu bar z-index as by default + pysssss's image feed is located at body-bottom, and it can overlap with the queue button, which + is located in body-top. */ + z-index: 1001; + display: flex; + flex-direction: column; +} + +.comfyui-body-left { + order: -4; + /* Position in the first column */ + grid-column: 1; + /* Position below the top element */ + grid-row: 2; + z-index: 10; + display: flex; +} + +.graph-canvas-container { + width: 100%; + height: 100%; + order: -3; + grid-column: 2; + grid-row: 2; + position: relative; + overflow: hidden; +} + +#graph-canvas { + width: 100%; + height: 100%; + touch-action: none; +} + +.comfyui-body-right { + order: -2; + z-index: 10; + grid-column: 3; + grid-row: 2; +} + +.comfyui-body-bottom { + order: 4; + /* Span across all columns */ + grid-column: 1/-1; + grid-row: 3; + /* Bottom menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */ + z-index: 1000; + display: flex; + flex-direction: column; +} + +.comfy-multiline-input { + background-color: var(--comfy-input-bg); + color: var(--input-text); + overflow: hidden; + overflow-y: auto; + padding: 2px; + resize: none; + border: none; + box-sizing: border-box; + font-size: var(--comfy-textarea-font-size); +} + +.comfy-modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 100; /* Sit on top */ + padding: 30px 30px 10px 30px; + background-color: var(--comfy-menu-bg); /* Modal background */ + color: var(--error-text); + box-shadow: 0 0 20px #888888; + border-radius: 10px; + top: 50%; + left: 50%; + max-width: 80vw; + max-height: 80vh; + transform: translate(-50%, -50%); + overflow: hidden; + justify-content: center; + font-family: monospace; + font-size: 15px; +} + +.comfy-modal-content { + display: flex; + flex-direction: column; +} + +.comfy-modal p { + overflow: auto; + white-space: pre-line; /* This will respect line breaks */ + margin-bottom: 20px; /* Add some margin between the text and the close button*/ +} + +.comfy-modal select, +.comfy-modal input[type='button'], +.comfy-modal input[type='checkbox'] { + margin: 3px 3px 3px 4px; +} + +.comfy-menu { + font-size: 15px; + position: absolute; + top: 50%; + right: 0; + text-align: center; + z-index: 999; + width: 190px; + display: flex; + flex-direction: column; + align-items: center; + color: var(--descrip-text); + background-color: var(--comfy-menu-bg); + font-family: sans-serif; + padding: 10px; + border-radius: 0 8px 8px 8px; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); +} + +.comfy-menu-header { + display: flex; +} + +.comfy-menu-actions { + display: flex; + gap: 3px; + align-items: center; + height: 20px; + position: relative; + top: -1px; + font-size: 22px; +} + +.comfy-menu .comfy-menu-actions button { + background-color: rgba(0, 0, 0, 0); + padding: 0; + border: none; + cursor: pointer; + font-size: inherit; +} + +.comfy-menu .comfy-menu-actions .comfy-settings-btn { + font-size: 0.6em; +} + +button.comfy-close-menu-btn { + font-size: 1em; + line-height: 12px; + color: #ccc; + position: relative; + top: -1px; +} + +.comfy-menu-queue-size { + flex: auto; +} + +.comfy-menu button, +.comfy-modal button { + font-size: 20px; +} + +.comfy-menu-btns { + margin-bottom: 10px; + width: 100%; +} + +.comfy-menu-btns button { + font-size: 10px; + width: 50%; + color: var(--descrip-text) !important; +} + +.comfy-menu > button { + width: 100%; +} + +.comfy-btn, +.comfy-menu > button, +.comfy-menu-btns button, +.comfy-menu .comfy-list button, +.comfy-modal button { + color: var(--input-text); + background-color: var(--comfy-input-bg); + border-radius: 8px; + border-color: var(--border-color); + border-style: solid; + margin-top: 2px; +} + +.comfy-btn:hover:not(:disabled), +.comfy-menu > button:hover, +.comfy-menu-btns button:hover, +.comfy-menu .comfy-list button:hover, +.comfy-modal button:hover, +.comfy-menu-actions button:hover { + filter: brightness(1.2); + will-change: transform; + cursor: pointer; +} + +span.drag-handle { + width: 10px; + height: 20px; + display: inline-block; + overflow: hidden; + line-height: 5px; + padding: 3px 4px; + cursor: move; + vertical-align: middle; + margin-top: -0.4em; + margin-left: -0.2em; + font-size: 12px; + font-family: sans-serif; + letter-spacing: 2px; + color: var(--drag-text); + text-shadow: 1px 0 1px black; + touch-action: none; +} + +span.drag-handle::after { + content: '.. .. ..'; +} + +.comfy-queue-btn { + width: 100%; +} + +.comfy-list { + color: var(--descrip-text); + background-color: var(--comfy-menu-bg); + margin-bottom: 10px; + border-color: var(--border-color); + border-style: solid; +} + +.comfy-list-items { + overflow-y: scroll; + max-height: 100px; + min-height: 25px; + background-color: var(--comfy-input-bg); + padding: 5px; +} + +.comfy-list h4 { + min-width: 160px; + margin: 0; + padding: 3px; + font-weight: normal; +} + +.comfy-list-items button { + font-size: 10px; +} + +.comfy-list-actions { + margin: 5px; + display: flex; + gap: 5px; + justify-content: center; +} + +.comfy-list-actions button { + font-size: 12px; +} + +button.comfy-queue-btn { + margin: 6px 0 !important; +} + +.comfy-modal.comfy-settings, +.comfy-modal.comfy-manage-templates { + text-align: center; + font-family: sans-serif; + color: var(--descrip-text); + z-index: 99; +} + +.comfy-modal.comfy-settings input[type='range'] { + vertical-align: middle; +} + +.comfy-modal.comfy-settings input[type='range'] + input[type='number'] { + width: 3.5em; +} + +.comfy-modal input, +.comfy-modal select { + color: var(--input-text); + background-color: var(--comfy-input-bg); + border-radius: 8px; + border-color: var(--border-color); + border-style: solid; + font-size: inherit; +} + +.comfy-tooltip-indicator { + text-decoration: underline; + text-decoration-style: dashed; +} + +@media only screen and (max-height: 850px) { + .comfy-menu { + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + border-radius: 0; + } + + .comfy-menu span.drag-handle { + display: none; + } + + .comfy-menu-queue-size { + flex: unset; + } + + .comfy-menu-header { + justify-content: space-between; + } + .comfy-menu-actions { + gap: 10px; + font-size: 28px; + } +} + +/* Input popup */ + +.graphdialog { + min-height: 1em; + background-color: var(--comfy-menu-bg); +} + +.graphdialog .name { + font-size: 14px; + font-family: sans-serif; + color: var(--descrip-text); +} + +.graphdialog button { + margin-top: unset; + vertical-align: unset; + height: 1.6em; + padding-right: 8px; +} + +.graphdialog input, +.graphdialog textarea, +.graphdialog select { + background-color: var(--comfy-input-bg); + border: 2px solid; + border-color: var(--border-color); + color: var(--input-text); + border-radius: 12px 0 0 12px; +} + +/* Dialogs */ + +dialog { + box-shadow: 0 0 20px #888888; +} + +dialog::backdrop { + background: rgba(0, 0, 0, 0.5); +} + +.comfy-dialog.comfyui-dialog.comfy-modal { + top: 0; + left: 0; + right: 0; + bottom: 0; + transform: none; +} + +.comfy-dialog.comfy-modal { + font-family: Arial, sans-serif; + border-color: var(--bg-color); + box-shadow: none; + border: 2px solid var(--border-color); +} + +.comfy-dialog .comfy-modal-content { + flex-direction: row; + flex-wrap: wrap; + gap: 10px; + color: var(--fg-color); +} + +.comfy-dialog .comfy-modal-content h3 { + margin-top: 0; +} + +.comfy-dialog .comfy-modal-content > p { + width: 100%; +} + +.comfy-dialog .comfy-modal-content > .comfyui-button { + flex: 1; + justify-content: center; +} + +#comfy-settings-dialog { + padding: 0; + width: 41rem; +} + +#comfy-settings-dialog tr > td:first-child { + text-align: right; +} + +#comfy-settings-dialog tbody button, +#comfy-settings-dialog table > button { + background-color: var(--bg-color); + border: 1px var(--border-color) solid; + border-radius: 0; + color: var(--input-text); + font-size: 1rem; + padding: 0.5rem; +} + +#comfy-settings-dialog button:hover { + background-color: var(--tr-odd-bg-color); +} + +/* General CSS for tables */ + +.comfy-table { + border-collapse: collapse; + color: var(--input-text); + font-family: Arial, sans-serif; + width: 100%; +} + +.comfy-table caption { + position: sticky; + top: 0; + background-color: var(--bg-color); + color: var(--input-text); + font-size: 1rem; + font-weight: bold; + padding: 8px; + text-align: center; + border-bottom: 1px solid var(--border-color); +} + +.comfy-table caption .comfy-btn { + position: absolute; + top: -2px; + right: 0; + bottom: 0; + cursor: pointer; + border: none; + height: 100%; + border-radius: 0; + aspect-ratio: 1/1; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + font-size: 20px; +} + +.comfy-table caption .comfy-btn:focus { + outline: none; +} + +.comfy-table tr:nth-child(even) { + background-color: var(--tr-even-bg-color); +} + +.comfy-table tr:nth-child(odd) { + background-color: var(--tr-odd-bg-color); +} + +.comfy-table td, +.comfy-table th { + border: 1px solid var(--border-color); + padding: 8px; +} + +/* Context menu */ + +.litegraph .dialog { + z-index: 1; + font-family: Arial, sans-serif; +} + +.litegraph .litemenu-entry.has_submenu { + position: relative; + padding-right: 20px; +} + +.litemenu-entry.has_submenu::after { + content: '>'; + position: absolute; + top: 0; + right: 2px; +} + +.litegraph.litecontextmenu, +.litegraph.litecontextmenu.dark { + z-index: 9999 !important; + background-color: var(--comfy-menu-bg) !important; + filter: brightness(95%); + will-change: transform; +} + +.litegraph.litecontextmenu + .litemenu-entry:hover:not(.disabled):not(.separator) { + background-color: var(--comfy-menu-bg) !important; + filter: brightness(155%); + will-change: transform; + color: var(--input-text); +} + +.litegraph.litecontextmenu .litemenu-entry.submenu, +.litegraph.litecontextmenu.dark .litemenu-entry.submenu { + background-color: var(--comfy-menu-bg) !important; + color: var(--input-text); +} + +.litegraph.litecontextmenu input { + background-color: var(--comfy-input-bg) !important; + color: var(--input-text) !important; +} + +.comfy-context-menu-filter { + box-sizing: border-box; + border: 1px solid #999; + margin: 0 0 5px 5px; + width: calc(100% - 10px); +} + +.comfy-img-preview { + pointer-events: none; + overflow: hidden; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + justify-content: center; +} + +.comfy-img-preview img { + -o-object-fit: contain; + object-fit: contain; + width: var(--comfy-img-preview-width); + height: var(--comfy-img-preview-height); +} + +.comfy-missing-nodes li button { + font-size: 12px; + margin-left: 5px; +} + +/* Search box */ + +.litegraph.litesearchbox { + z-index: 9999 !important; + background-color: var(--comfy-menu-bg) !important; + overflow: hidden; + display: block; +} + +.litegraph.litesearchbox input, +.litegraph.litesearchbox select { + background-color: var(--comfy-input-bg) !important; + color: var(--input-text); +} + +.litegraph.lite-search-item { + color: var(--input-text); + background-color: var(--comfy-input-bg); + filter: brightness(80%); + will-change: transform; + padding-left: 0.2em; +} + +.litegraph.lite-search-item.generic_type { + color: var(--input-text); + filter: brightness(50%); + will-change: transform; +} + +@media only screen and (max-width: 450px) { + #comfy-settings-dialog .comfy-table tbody { + display: grid; + } + #comfy-settings-dialog .comfy-table tr { + display: grid; + } + #comfy-settings-dialog tr > td:first-child { + text-align: center; + border-bottom: none; + padding-bottom: 0; + } + #comfy-settings-dialog tr > td:not(:first-child) { + text-align: center; + border-top: none; + } +} + +audio.comfy-audio.empty-audio-widget { + display: none; +} + +#vue-app { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +/* Set auto complete panel's width as it is not accessible within vue-root */ +.p-autocomplete-overlay { + max-width: 25vw; +} + +.p-tree-node-content { + padding: var(--comfy-tree-explorer-item-padding) !important; +} + +.hover\:bg-neutral-700:hover{ + --tw-bg-opacity: 1; + background-color: rgb(64 64 64 / var(--tw-bg-opacity)); +} + +.hover\:text-blue-300:hover{ + --tw-text-opacity: 1; + color: rgb(144 205 244 / var(--tw-text-opacity)); +} + +.hover\:opacity-100:hover{ + opacity: 1; +} + +@media (min-width: 768px){ + + .md\:flex{ + display: flex; + } + + .md\:hidden{ + display: none; + } +} + +@media (min-width: 1536px){ + + .\32xl\:mx-4{ + margin-left: 1rem; + margin-right: 1rem; + } + + .\32xl\:mt-\[20vh\]{ + margin-top: 20vh; + } + + .\32xl\:w-64{ + width: 16rem; + } + + .\32xl\:max-w-full{ + max-width: 100%; + } + + .\32xl\:p-4{ + padding: 1rem; + } + + .\32xl\:p-\[var\(--p-dialog-content-padding\)\]{ + padding: var(--p-dialog-content-padding); + } + + .\32xl\:p-\[var\(--p-dialog-header-padding\)\]{ + padding: var(--p-dialog-header-padding); + } + + .\32xl\:px-4{ + padding-left: 1rem; + padding-right: 1rem; + } +} @font-face { font-family: 'primeicons'; font-display: block; @@ -1308,2834 +4773,3 @@ .pi-spinner:before { content: "\e926"; } - -.side-bar-button-icon { - font-size: var(--sidebar-icon-size) !important; -} -.side-bar-button-selected .side-bar-button-icon { - font-size: var(--sidebar-icon-size) !important; - font-weight: bold; -} - -.side-bar-button[data-v-7a0b94a3] { - width: var(--sidebar-width); - height: var(--sidebar-width); - border-radius: 0; -} -.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-7a0b94a3], -.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-7a0b94a3]:hover { - border-left: 4px solid var(--p-button-text-primary-color); -} -.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-7a0b94a3], -.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-7a0b94a3]:hover { - border-right: 4px solid var(--p-button-text-primary-color); -} - -:root { - --red-600: #dc3545; -} - -.comfy-missing-nodes[data-v-286402f2] { - font-family: monospace; - color: var(--red-600); - padding: 1.5rem; - background-color: var(--surface-ground); - border-radius: var(--border-radius); - box-shadow: var(--card-shadow); -} -.warning-title[data-v-286402f2] { - margin-top: 0; - margin-bottom: 1rem; -} -.warning-description[data-v-286402f2] { - margin-bottom: 1rem; -} -.missing-nodes-list[data-v-286402f2] { - max-height: 300px; - overflow-y: auto; -} -.missing-nodes-list.maximized[data-v-286402f2] { - max-height: unset; -} -.missing-node-item[data-v-286402f2] { - display: flex; - align-items: center; - padding: 0.5rem; -} -.node-type[data-v-286402f2] { - font-weight: 600; - color: var(--text-color); -} -.node-hint[data-v-286402f2] { - margin-left: 0.5rem; - font-style: italic; - color: var(--text-color-secondary); -} -[data-v-286402f2] .p-button { - margin-left: auto; -} -.added-nodes-warning[data-v-286402f2] { - margin-top: 1rem; - font-style: italic; -} - -.input-slider[data-v-fbaf7a8c] { - display: flex; - align-items: center; - gap: 1rem; -} -.slider-part[data-v-fbaf7a8c] { - flex-grow: 1; -} -.input-part[data-v-fbaf7a8c] { - width: 5rem !important; -} - -.info-chip[data-v-6361f2fb] { - background: transparent; -} -.setting-item[data-v-6361f2fb] { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -} -.setting-label[data-v-6361f2fb] { - display: flex; - align-items: center; - flex: 1; -} -.setting-input[data-v-6361f2fb] { - flex: 1; - display: flex; - justify-content: flex-end; - margin-left: 1rem; -} - -/* Ensure PrimeVue components take full width of their container */ -.setting-input[data-v-6361f2fb] .p-inputtext, -.setting-input[data-v-6361f2fb] .input-slider, -.setting-input[data-v-6361f2fb] .p-select, -.setting-input[data-v-6361f2fb] .p-togglebutton { - width: 100%; - max-width: 200px; -} -.setting-input[data-v-6361f2fb] .p-inputtext { - max-width: unset; -} - -/* Special case for ToggleSwitch to align it to the right */ -.setting-input[data-v-6361f2fb] .p-toggleswitch { - margin-left: auto; -} - -.search-box-input[data-v-8160f15b] { - width: 100%; -} - -.no-results-placeholder[data-v-5a7d148a] { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - padding: 2rem; -} -.no-results-placeholder[data-v-5a7d148a] .p-card { - background-color: var(--surface-ground); - text-align: center; -} -.no-results-placeholder h3[data-v-5a7d148a] { - color: var(--text-color); - margin-bottom: 0.5rem; -} -.no-results-placeholder p[data-v-5a7d148a] { - color: var(--text-color-secondary); - margin-bottom: 1rem; -} - -/* Remove after we have tailwind setup */ -.border-none { - border: none !important; -} -.settings-tab-panels { - padding-top: 0px !important; -} - -.settings-container[data-v-29723d1f] { - display: flex; - height: 70vh; - width: 60vw; - max-width: 1000px; - overflow: hidden; - /* Prevents container from scrolling */ -} -.settings-sidebar[data-v-29723d1f] { - width: 250px; - flex-shrink: 0; - /* Prevents sidebar from shrinking */ - overflow-y: auto; - padding: 10px; -} -.settings-search-box[data-v-29723d1f] { - width: 100%; - margin-bottom: 10px; -} -.settings-content[data-v-29723d1f] { - flex-grow: 1; - overflow-y: auto; - /* Allows vertical scrolling */ -} - -/* Ensure the Listbox takes full width of the sidebar */ -.settings-sidebar[data-v-29723d1f] .p-listbox { - width: 100%; -} - -/* Optional: Style scrollbars for webkit browsers */ -.settings-sidebar[data-v-29723d1f]::-webkit-scrollbar, -.settings-content[data-v-29723d1f]::-webkit-scrollbar { - width: 1px; -} -.settings-sidebar[data-v-29723d1f]::-webkit-scrollbar-thumb, -.settings-content[data-v-29723d1f]::-webkit-scrollbar-thumb { - background-color: transparent; -} - -.pi-cog[data-v-969a1066] { - font-size: 1.25rem; - margin-right: 0.5rem; -} -.version-tag[data-v-969a1066] { - margin-left: 0.5rem; -} -.lds-ring { - display: inline-block; - position: relative; - width: 1em; - height: 1em; -} -.lds-ring div { - box-sizing: border-box; - display: block; - position: absolute; - width: 100%; - height: 100%; - border: 0.15em solid #fff; - border-radius: 50%; - animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; - border-color: #fff transparent transparent transparent; -} -.lds-ring div:nth-child(1) { - animation-delay: -0.45s; -} -.lds-ring div:nth-child(2) { - animation-delay: -0.3s; -} -.lds-ring div:nth-child(3) { - animation-delay: -0.15s; -} -@keyframes lds-ring { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} -.relative { - position: relative; -} -.hidden { - display: none !important; -} -.mdi.rotate270::before { - transform: rotate(270deg); -} - -/* Generic */ -.comfyui-button { - display: flex; - align-items: center; - gap: 0.5em; - cursor: pointer; - border: none; - border-radius: 4px; - padding: 4px 8px; - box-sizing: border-box; - margin: 0; - transition: box-shadow 0.1s; -} - -.comfyui-button:active { - box-shadow: inset 1px 1px 10px rgba(0, 0, 0, 0.5); -} - -.comfyui-button:disabled { - opacity: 0.5; - cursor: not-allowed; -} -.primary .comfyui-button, -.primary.comfyui-button { - background-color: var(--primary-bg) !important; - color: var(--primary-fg) !important; -} - -.primary .comfyui-button:not(:disabled):hover, -.primary.comfyui-button:not(:disabled):hover { - background-color: var(--primary-hover-bg) !important; - color: var(--primary-hover-fg) !important; -} - -/* Popup */ -.comfyui-popup { - position: absolute; - left: var(--left); - right: var(--right); - top: var(--top); - bottom: var(--bottom); - z-index: 2000; - max-height: calc(100vh - var(--limit) - 10px); - box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.3); -} - -.comfyui-popup:not(.open) { - display: none; -} - -.comfyui-popup.right.open { - border-top-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; - overflow: hidden; -} -/* Split button */ -.comfyui-split-button { - position: relative; - display: flex; -} - -.comfyui-split-primary { - flex: auto; -} - -.comfyui-split-primary .comfyui-button { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: 1px solid var(--comfy-menu-bg); - width: 100%; -} - -.comfyui-split-arrow .comfyui-button { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - padding-left: 2px; - padding-right: 2px; -} - -.comfyui-split-button-popup { - white-space: nowrap; - background-color: var(--content-bg); - color: var(--content-fg); - display: flex; - flex-direction: column; - overflow: auto; -} - -.comfyui-split-button-popup.hover { - z-index: 2001; -} -.comfyui-split-button-popup > .comfyui-button { - border: none; - background-color: transparent; - color: var(--fg-color); - padding: 8px 12px 8px 8px; -} - -.comfyui-split-button-popup > .comfyui-button:not(:disabled):hover { - background-color: var(--comfy-input-bg); -} - -/* Button group */ -.comfyui-button-group { - display: flex; - border-radius: 4px; - overflow: hidden; -} - -.comfyui-button-group > .comfyui-button, -.comfyui-button-group > .comfyui-button-wrapper > .comfyui-button { - padding: 4px 10px; - border-radius: 0; -} - -/* Menu */ -.comfyui-menu { - width: 100vw; - background: var(--comfy-menu-bg); - color: var(--fg-color); - font-family: Arial, Helvetica, sans-serif; - font-size: 0.8em; - display: flex; - padding: 4px 8px; - align-items: center; - gap: 8px; - box-sizing: border-box; - z-index: 1000; - order: 0; - grid-column: 1/-1; - overflow: auto; - max-height: 90vh; -} - -.comfyui-menu>* { - flex-shrink: 0; -} -.comfyui-menu .mdi::before { - font-size: 18px; -} - -.comfyui-menu .comfyui-button { - background: var(--comfy-input-bg); - color: var(--fg-color); - white-space: nowrap; -} - -.comfyui-menu .comfyui-button:not(:disabled):hover { - background: var(--border-color); - color: var(--content-fg); -} - -.comfyui-menu .comfyui-split-button-popup > .comfyui-button { - border-radius: 0; - background-color: transparent; -} - -.comfyui-menu .comfyui-split-button-popup > .comfyui-button:not(:disabled):hover { - background-color: var(--comfy-input-bg); -} - -.comfyui-menu .comfyui-split-button-popup.left { - border-top-right-radius: 4px; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; -} - -.comfyui-menu .comfyui-button.popup-open { - background-color: var(--content-bg); - color: var(--content-fg); -} - -.comfyui-menu-push { - margin-left: -0.8em; - flex: auto; -} - -.comfyui-logo { - font-size: 1.2em; - margin: 0; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - cursor: default; -} - -/* Workflows */ -.comfyui-workflows-button { - flex-direction: row-reverse; - max-width: 200px; - position: relative; - z-index: 0; -} - -.comfyui-workflows-button.popup-open { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.comfyui-workflows-button.unsaved { - font-style: italic; -} -.comfyui-workflows-button-progress { - position: absolute; - top: 0; - left: 0; - background-color: green; - height: 100%; - border-radius: 4px; - z-index: -1; -} - -.comfyui-workflows-button > span { - flex: auto; - text-align: left; - overflow: hidden; -} -.comfyui-workflows-button-inner { - display: flex; - align-items: center; - gap: 7px; - width: 150px; -} -.comfyui-workflows-label { - overflow: hidden; - text-overflow: ellipsis; - direction: rtl; - flex: auto; - position: relative; -} - -.comfyui-workflows-button.unsaved .comfyui-workflows-label { - padding-left: 8px; -} - -.comfyui-workflows-button.unsaved .comfyui-workflows-label:after { - content: "*"; - position: absolute; - top: 0; - left: 0; -} -.comfyui-workflows-button-inner .mdi-graph::before { - transform: rotate(-90deg); -} - -.comfyui-workflows-popup { - font-family: Arial, Helvetica, sans-serif; - font-size: 0.8em; - padding: 10px; - overflow: auto; - background-color: var(--content-bg); - color: var(--content-fg); - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; - z-index: 1001; -} - -.comfyui-workflows-panel { - min-height: 150px; -} - -.comfyui-workflows-panel .lds-ring { - transform: translate(-50%); - position: absolute; - left: 50%; - top: 75px; -} - -.comfyui-workflows-panel h3 { - margin: 10px 0 10px 0; - font-size: 11px; - opacity: 0.8; -} - -.comfyui-workflows-panel section header { - display: flex; - justify-content: space-between; - align-items: center; -} -.comfy-ui-workflows-search .mdi { - position: relative; - top: 2px; - pointer-events: none; -} -.comfy-ui-workflows-search input { - background-color: var(--comfy-input-bg); - color: var(--input-text); - border: none; - border-radius: 4px; - padding: 4px 10px; - margin-left: -24px; - text-indent: 18px; -} -.comfy-ui-workflows-search input:-moz-placeholder-shown { - width: 10px; -} -.comfy-ui-workflows-search input:placeholder-shown { - width: 10px; -} -.comfy-ui-workflows-search input:-moz-placeholder-shown:focus { - width: auto; -} -.comfy-ui-workflows-search input:placeholder-shown:focus { - width: auto; -} -.comfyui-workflows-actions { - display: flex; - gap: 10px; - margin-bottom: 10px; -} - -.comfyui-workflows-actions .comfyui-button { - background: var(--comfy-input-bg); - color: var(--input-text); -} - -.comfyui-workflows-actions .comfyui-button:not(:disabled):hover { - background: var(--primary-bg); - color: var(--primary-fg); -} - -.comfyui-workflows-favorites, -.comfyui-workflows-open { - border-bottom: 1px solid var(--comfy-input-bg); - padding-bottom: 5px; - margin-bottom: 5px; -} - -.comfyui-workflows-open .active { - font-weight: bold; - color: var(--primary-fg); -} - -.comfyui-workflows-favorites:empty { - display: none; -} - -.comfyui-workflows-tree { - padding: 0; - margin: 0; -} - -.comfyui-workflows-tree:empty::after { - content: "No saved workflows"; - display: block; - text-align: center; -} -.comfyui-workflows-tree > ul { - padding: 0; -} - -.comfyui-workflows-tree > ul ul { - margin: 0; - padding: 0 0 0 25px; -} - -.comfyui-workflows-tree:not(.filtered) .closed > ul { - display: none; -} - -.comfyui-workflows-tree li, -.comfyui-workflows-tree-file { - --item-height: 32px; - list-style-type: none; - height: var(--item-height); - display: flex; - align-items: center; - gap: 5px; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.comfyui-workflows-tree-file.active::before, -.comfyui-workflows-tree li:hover::before, -.comfyui-workflows-tree-file:hover::before { - content: ""; - position: absolute; - width: 100%; - left: 0; - height: var(--item-height); - background-color: var(--content-hover-bg); - color: var(--content-hover-fg); - z-index: -1; -} - -.comfyui-workflows-tree-file.active::before { - background-color: var(--primary-bg); - color: var(--primary-fg); -} - -.comfyui-workflows-tree-file.running:not(:hover)::before { - content: ""; - position: absolute; - width: var(--progress, 0); - left: 0; - height: var(--item-height); - background-color: green; - z-index: -1; -} - -.comfyui-workflows-tree-file.unsaved span { - font-style: italic; -} - -.comfyui-workflows-tree-file span { - flex: auto; -} - -.comfyui-workflows-tree-file span + .comfyui-workflows-file-action { - margin-left: 10px; -} - -.comfyui-workflows-tree-file .comfyui-workflows-file-action { - background-color: transparent; - color: var(--fg-color); - padding: 2px 4px; -} - -.comfyui-workflows-tree-file.active .comfyui-workflows-file-action { - color: var(--primary-fg); -} - -.lg ~ .comfyui-workflows-popup .comfyui-workflows-tree-file:not(:hover) .comfyui-workflows-file-action { - opacity: 0; -} - -.comfyui-workflows-tree-file .comfyui-workflows-file-action:hover { - background-color: var(--primary-bg); - color: var(--primary-fg); -} - -.comfyui-workflows-tree-file .comfyui-workflows-file-action-primary { - background-color: transparent; - color: var(--fg-color); - padding: 2px 4px; - margin: 0 -4px; -} - -.comfyui-workflows-file-action-favorite .mdi-star { - color: orange; -} - -/* View List */ -.comfyui-view-list-popup { - padding: 10px; - background-color: var(--content-bg); - color: var(--content-fg); - min-width: 170px; - min-height: 435px; - display: flex; - flex-direction: column; - align-items: center; - box-sizing: border-box; -} -.comfyui-view-list-popup h3 { - margin: 0 0 5px 0; -} -.comfyui-view-list-items { - width: 100%; - background: var(--comfy-menu-bg); - border-radius: 5px; - display: flex; - justify-content: center; - flex: auto; - align-items: center; - flex-direction: column; -} -.comfyui-view-list-items section { - max-height: 400px; - overflow: auto; - width: 100%; - display: grid; - grid-template-columns: auto auto auto; - align-items: center; - justify-content: center; - gap: 5px; - padding: 5px 0; -} -.comfyui-view-list-items section + section { - border-top: 1px solid var(--border-color); - margin-top: 10px; - padding-top: 5px; -} -.comfyui-view-list-items section h5 { - grid-column: 1 / 4; - text-align: center; - margin: 5px; -} -.comfyui-view-list-items span { - text-align: center; - padding: 0 2px; -} -.comfyui-view-list-popup header { - margin-bottom: 10px; - display: flex; - gap: 5px; -} -.comfyui-view-list-popup header .comfyui-button { - border: 1px solid transparent; -} -.comfyui-view-list-popup header .comfyui-button:not(:disabled):hover { - border: 1px solid var(--comfy-menu-bg); -} -/* Queue button */ -.comfyui-queue-button .comfyui-split-primary .comfyui-button { - padding-right: 12px; -} -.comfyui-queue-count { - margin-left: 5px; - border-radius: 10px; - background-color: rgb(8, 80, 153); - padding: 2px 4px; - font-size: 10px; - min-width: 1em; - display: inline-block; -} -/* Queue options*/ -.comfyui-queue-options { - padding: 10px; - font-family: Arial, Helvetica, sans-serif; - font-size: 12px; - display: flex; - gap: 10px; -} - -.comfyui-queue-batch { - display: flex; - flex-direction: column; - border-right: 1px solid var(--comfy-menu-bg); - padding-right: 10px; - gap: 5px; -} - -.comfyui-queue-batch input { - width: 145px; -} - -.comfyui-queue-batch .comfyui-queue-batch-value { - width: 70px; -} - -.comfyui-queue-mode { - display: flex; - flex-direction: column; -} - -.comfyui-queue-mode span { - font-weight: bold; - margin-bottom: 2px; -} - -.comfyui-queue-mode label { - display: flex; - flex-direction: row-reverse; - justify-content: start; - gap: 5px; - padding: 2px 0; -} - -.comfyui-queue-mode label input { - padding: 0; - margin: 0; -} - -/** Send to workflow widget selection dialog */ -.comfy-widget-selection-dialog { - border: none; -} - -.comfy-widget-selection-dialog div { - color: var(--fg-color); - font-family: Arial, Helvetica, sans-serif; -} - -.comfy-widget-selection-dialog h2 { - margin-top: 0; -} - -.comfy-widget-selection-dialog section { - width: -moz-fit-content; - width: fit-content; - display: flex; - flex-direction: column; -} - -.comfy-widget-selection-item { - display: flex; - gap: 10px; - align-items: center; -} - -.comfy-widget-selection-item span { - margin-right: auto; -} - -.comfy-widget-selection-item span::before { - content: '#' attr(data-id); - opacity: 0.5; - margin-right: 5px; -} - -.comfy-modal .comfy-widget-selection-item button { - font-size: 1em; -} - -/***** Responsive *****/ -.lg.comfyui-menu .lt-lg-show { - display: none !important; -} -.comfyui-menu:not(.lg) .nlg-hide { - display: none !important; -} -/** Large screen */ -.lg.comfyui-menu>.comfyui-menu-mobile-collapse .comfyui-button span, -.lg.comfyui-menu>.comfyui-menu-mobile-collapse.comfyui-button span { - display: none; -} -.lg.comfyui-menu>.comfyui-menu-mobile-collapse .comfyui-popup .comfyui-button span { - display: unset; -} - -/** Non large screen */ -.lt-lg.comfyui-menu { - flex-wrap: wrap; -} - -.lt-lg.comfyui-menu > *:not(.comfyui-menu-mobile-collapse) { - order: 1; -} - -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse { - order: 9999; - width: 100%; -} - -.comfyui-body-bottom .lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse { - order: -1; -} - -.comfyui-body-bottom .lt-lg.comfyui-menu > .comfyui-menu-button { - top: unset; - bottom: 4px; -} - -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse.comfyui-button-group { - flex-wrap: wrap; -} - -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button, -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse.comfyui-button { - padding: 10px; -} -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button, -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-button-wrapper { - width: 100%; -} - -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-popup { - position: static; - background-color: var(--comfy-input-bg); - max-width: unset; - max-height: 50vh; - overflow: auto; -} - -.lt-lg.comfyui-menu:not(.expanded) > .comfyui-menu-mobile-collapse { - display: none; -} - -.lt-lg .comfyui-queue-button { - margin-right: 44px; -} - -.lt-lg .comfyui-menu-button { - position: absolute; - top: 4px; - right: 8px; -} - -.lt-lg.comfyui-menu > .comfyui-menu-mobile-collapse .comfyui-view-list-popup { - border-radius: 0; -} - -.lt-lg.comfyui-menu .comfyui-workflows-popup { - width: 100vw; -} - -/** Small */ -.lt-md .comfyui-workflows-button-inner { - width: unset !important; -} -.lt-md .comfyui-workflows-label { - display: none; -} - -/** Extra small */ -.lt-sm .comfyui-queue-button { - margin-right: 0; - width: 100%; -} -.lt-sm .comfyui-queue-button .comfyui-button { - justify-content: center; -} -.lt-sm .comfyui-interrupt-button { - margin-right: 45px; -} -.comfyui-body-bottom .lt-sm.comfyui-menu > .comfyui-menu-button{ - bottom: 41px; -}/* this CSS contains only the basic CSS needed to run the app and use it */ - -.lgraphcanvas { - /*cursor: crosshair;*/ - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - outline: none; - font-family: Tahoma, sans-serif; -} - -.lgraphcanvas * { - box-sizing: border-box; -} - -.litegraph.litecontextmenu { - font-family: Tahoma, sans-serif; - position: fixed; - top: 100px; - left: 100px; - min-width: 100px; - color: #aaf; - padding: 0; - box-shadow: 0 0 10px black !important; - background-color: #2e2e2e !important; - z-index: 10; -} - -.litegraph.litecontextmenu.dark { - background-color: #000 !important; -} - -.litegraph.litecontextmenu .litemenu-title img { - margin-top: 2px; - margin-left: 2px; - margin-right: 4px; -} - -.litegraph.litecontextmenu .litemenu-entry { - margin: 2px; - padding: 2px; -} - -.litegraph.litecontextmenu .litemenu-entry.submenu { - background-color: #2e2e2e !important; -} - -.litegraph.litecontextmenu.dark .litemenu-entry.submenu { - background-color: #000 !important; -} - -.litegraph .litemenubar ul { - font-family: Tahoma, sans-serif; - margin: 0; - padding: 0; -} - -.litegraph .litemenubar li { - font-size: 14px; - color: #999; - display: inline-block; - min-width: 50px; - padding-left: 10px; - padding-right: 10px; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - cursor: pointer; -} - -.litegraph .litemenubar li:hover { - background-color: #777; - color: #eee; -} - -.litegraph .litegraph .litemenubar-panel { - position: absolute; - top: 5px; - left: 5px; - min-width: 100px; - background-color: #444; - box-shadow: 0 0 3px black; - padding: 4px; - border-bottom: 2px solid #aaf; - z-index: 10; -} - -.litegraph .litemenu-entry, -.litemenu-title { - font-size: 12px; - color: #aaa; - padding: 0 0 0 4px; - margin: 2px; - padding-left: 2px; - -moz-user-select: none; - -webkit-user-select: none; - user-select: none; - cursor: pointer; -} - -.litegraph .litemenu-entry .icon { - display: inline-block; - width: 12px; - height: 12px; - margin: 2px; - vertical-align: top; -} - -.litegraph .litemenu-entry.checked .icon { - background-color: #aaf; -} - -.litegraph .litemenu-entry .more { - float: right; - padding-right: 5px; -} - -.litegraph .litemenu-entry.disabled { - opacity: 0.5; - cursor: default; -} - -.litegraph .litemenu-entry.separator { - display: block; - border-top: 1px solid #333; - border-bottom: 1px solid #666; - width: 100%; - height: 0px; - margin: 3px 0 2px 0; - background-color: transparent; - padding: 0 !important; - cursor: default !important; -} - -.litegraph .litemenu-entry.has_submenu { - border-right: 2px solid cyan; -} - -.litegraph .litemenu-title { - color: #dde; - background-color: #111; - margin: 0; - padding: 2px; - cursor: default; -} - -.litegraph .litemenu-entry:hover:not(.disabled):not(.separator) { - background-color: #444 !important; - color: #eee; - transition: all 0.2s; -} - -.litegraph .litemenu-entry .property_name { - display: inline-block; - text-align: left; - min-width: 80px; - min-height: 1.2em; -} - -.litegraph .litemenu-entry .property_value { - display: inline-block; - background-color: rgba(0, 0, 0, 0.5); - text-align: right; - min-width: 80px; - min-height: 1.2em; - vertical-align: middle; - padding-right: 10px; -} - -.litegraph.litesearchbox { - font-family: Tahoma, sans-serif; - position: absolute; - background-color: rgba(0, 0, 0, 0.5); - padding-top: 4px; -} - -.litegraph.litesearchbox input, -.litegraph.litesearchbox select { - margin-top: 3px; - min-width: 60px; - min-height: 1.5em; - background-color: black; - border: 0; - color: white; - padding-left: 10px; - margin-right: 5px; - max-width: 300px; -} - -.litegraph.litesearchbox .name { - display: inline-block; - min-width: 60px; - min-height: 1.5em; - padding-left: 10px; -} - -.litegraph.litesearchbox .helper { - overflow: auto; - max-height: 200px; - margin-top: 2px; -} - -.litegraph.lite-search-item { - font-family: Tahoma, sans-serif; - background-color: rgba(0, 0, 0, 0.5); - color: white; - padding-top: 2px; -} - -.litegraph.lite-search-item.not_in_filter{ - /*background-color: rgba(50, 50, 50, 0.5);*/ - /*color: #999;*/ - color: #B99; - font-style: italic; -} - -.litegraph.lite-search-item.generic_type{ - /*background-color: rgba(50, 50, 50, 0.5);*/ - /*color: #DD9;*/ - color: #999; - font-style: italic; -} - -.litegraph.lite-search-item:hover, -.litegraph.lite-search-item.selected { - cursor: pointer; - background-color: white; - color: black; -} - -.litegraph.lite-search-item-type { - display: inline-block; - background: rgba(0,0,0,0.2); - margin-left: 5px; - font-size: 14px; - padding: 2px 5px; - position: relative; - top: -2px; - opacity: 0.8; - border-radius: 4px; - } - -/* DIALOGs ******/ - -.litegraph .dialog { - position: absolute; - top: 50%; - left: 50%; - margin-top: -150px; - margin-left: -200px; - - background-color: #2A2A2A; - - min-width: 400px; - min-height: 200px; - box-shadow: 0 0 4px #111; - border-radius: 6px; -} - -.litegraph .dialog.settings { - left: 10px; - top: 10px; - height: calc( 100% - 20px ); - margin: auto; - max-width: 50%; -} - -.litegraph .dialog.centered { - top: 50px; - left: 50%; - position: absolute; - transform: translateX(-50%); - min-width: 600px; - min-height: 300px; - height: calc( 100% - 100px ); - margin: auto; -} - -.litegraph .dialog .close { - float: right; - margin: 4px; - margin-right: 10px; - cursor: pointer; - font-size: 1.4em; -} - -.litegraph .dialog .close:hover { - color: white; -} - -.litegraph .dialog .dialog-header { - color: #AAA; - border-bottom: 1px solid #161616; height: 40px; -} -.litegraph .dialog .dialog-footer { height: 50px; padding: 10px; border-top: 1px solid #1a1a1a;} - -.litegraph .dialog .dialog-header .dialog-title { - font: 20px "Arial"; - margin: 4px; - padding: 4px 10px; - display: inline-block; -} - -.litegraph .dialog .dialog-content, .litegraph .dialog .dialog-alt-content { - height: calc(100% - 90px); - width: 100%; - min-height: 100px; - display: inline-block; - color: #AAA; - /*background-color: black;*/ - overflow: auto; -} - -.litegraph .dialog .dialog-content h3 { - margin: 10px; -} - -.litegraph .dialog .dialog-content .connections { - flex-direction: row; -} - -.litegraph .dialog .dialog-content .connections .connections_side { - width: calc(50% - 5px); - min-height: 100px; - background-color: black; - display: flex; -} - -.litegraph .dialog .node_type { - font-size: 1.2em; - display: block; - margin: 10px; -} - -.litegraph .dialog .node_desc { - opacity: 0.5; - display: block; - margin: 10px; -} - -.litegraph .dialog .separator { - display: block; - width: calc( 100% - 4px ); - height: 1px; - border-top: 1px solid #000; - border-bottom: 1px solid #333; - margin: 10px 2px; - padding: 0; -} - -.litegraph .dialog .property { - margin-bottom: 2px; - padding: 4px; -} - -.litegraph .dialog .property:hover { - background: #545454; -} - -.litegraph .dialog .property_name { - color: #737373; - display: inline-block; - text-align: left; - vertical-align: top; - width: 160px; - padding-left: 4px; - overflow: hidden; - margin-right: 6px; -} - -.litegraph .dialog .property:hover .property_name { - color: white; -} - -.litegraph .dialog .property_value { - display: inline-block; - text-align: right; - color: #AAA; - background-color: #1A1A1A; - /*width: calc( 100% - 122px );*/ - max-width: calc( 100% - 162px ); - min-width: 200px; - max-height: 300px; - min-height: 20px; - padding: 4px; - padding-right: 12px; - overflow: hidden; - cursor: pointer; - border-radius: 3px; -} - -.litegraph .dialog .property_value:hover { - color: white; -} - -.litegraph .dialog .property.boolean .property_value { - padding-right: 30px; - color: #A88; - /*width: auto; - float: right;*/ -} - -.litegraph .dialog .property.boolean.bool-on .property_name{ - color: #8A8; -} -.litegraph .dialog .property.boolean.bool-on .property_value{ - color: #8A8; -} - -.litegraph .dialog .btn { - border: 0; - border-radius: 4px; - padding: 4px 20px; - margin-left: 0px; - background-color: #060606; - color: #8e8e8e; -} - -.litegraph .dialog .btn:hover { - background-color: #111; - color: #FFF; -} - -.litegraph .dialog .btn.delete:hover { - background-color: #F33; - color: black; -} - -.litegraph .subgraph_property { - padding: 4px; -} - -.litegraph .subgraph_property:hover { - background-color: #333; -} - -.litegraph .subgraph_property.extra { - margin-top: 8px; -} - -.litegraph .subgraph_property span.name { - font-size: 1.3em; - padding-left: 4px; -} - -.litegraph .subgraph_property span.type { - opacity: 0.5; - margin-right: 20px; - padding-left: 4px; -} - -.litegraph .subgraph_property span.label { - display: inline-block; - width: 60px; - padding: 0px 10px; -} - -.litegraph .subgraph_property input { - width: 140px; - color: #999; - background-color: #1A1A1A; - border-radius: 4px; - border: 0; - margin-right: 10px; - padding: 4px; - padding-left: 10px; -} - -.litegraph .subgraph_property button { - background-color: #1c1c1c; - color: #aaa; - border: 0; - border-radius: 2px; - padding: 4px 10px; - cursor: pointer; -} - -.litegraph .subgraph_property.extra { - color: #ccc; -} - -.litegraph .subgraph_property.extra input { - background-color: #111; -} - -.litegraph .bullet_icon { - margin-left: 10px; - border-radius: 10px; - width: 12px; - height: 12px; - background-color: #666; - display: inline-block; - margin-top: 2px; - margin-right: 4px; - transition: background-color 0.1s ease 0s; - -moz-transition: background-color 0.1s ease 0s; -} - -.litegraph .bullet_icon:hover { - background-color: #698; - cursor: pointer; -} - -/* OLD */ - -.graphcontextmenu { - padding: 4px; - min-width: 100px; -} - -.graphcontextmenu-title { - color: #dde; - background-color: #222; - margin: 0; - padding: 2px; - cursor: default; -} - -.graphmenu-entry { - box-sizing: border-box; - margin: 2px; - padding-left: 20px; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - transition: all linear 0.3s; -} - -.graphmenu-entry.event, -.litemenu-entry.event { - border-left: 8px solid orange; - padding-left: 12px; -} - -.graphmenu-entry.disabled { - opacity: 0.3; -} - -.graphmenu-entry.submenu { - border-right: 2px solid #eee; -} - -.graphmenu-entry:hover { - background-color: #555; -} - -.graphmenu-entry.separator { - background-color: #111; - border-bottom: 1px solid #666; - height: 1px; - width: calc(100% - 20px); - -moz-width: calc(100% - 20px); - -webkit-width: calc(100% - 20px); -} - -.graphmenu-entry .property_name { - display: inline-block; - text-align: left; - min-width: 80px; - min-height: 1.2em; -} - -.graphmenu-entry .property_value, -.litemenu-entry .property_value { - display: inline-block; - background-color: rgba(0, 0, 0, 0.5); - text-align: right; - min-width: 80px; - min-height: 1.2em; - vertical-align: middle; - padding-right: 10px; -} - -.graphdialog { - position: absolute; - top: 10px; - left: 10px; - min-height: 2em; - background-color: #333; - font-size: 1.2em; - box-shadow: 0 0 10px black !important; - z-index: 10; -} - -.graphdialog.rounded { - border-radius: 12px; - padding-right: 2px; -} - -.graphdialog .name { - display: inline-block; - min-width: 60px; - min-height: 1.5em; - padding-left: 10px; -} - -.graphdialog input, -.graphdialog textarea, -.graphdialog select { - margin: 3px; - min-width: 60px; - min-height: 1.5em; - background-color: black; - border: 0; - color: white; - padding-left: 10px; - outline: none; -} - -.graphdialog textarea { - min-height: 150px; -} - -.graphdialog button { - margin-top: 3px; - vertical-align: top; - background-color: #999; - border: 0; -} - -.graphdialog button.rounded, -.graphdialog input.rounded { - border-radius: 0 12px 12px 0; -} - -.graphdialog .helper { - overflow: auto; - max-height: 200px; -} - -.graphdialog .help-item { - padding-left: 10px; -} - -.graphdialog .help-item:hover, -.graphdialog .help-item.selected { - cursor: pointer; - background-color: white; - color: black; -} - -.litegraph .dialog { - min-height: 0; -} -.litegraph .dialog .dialog-content { -display: block; -} -.litegraph .dialog .dialog-content .subgraph_property { -padding: 5px; -} -.litegraph .dialog .dialog-footer { -margin: 0; -} -.litegraph .dialog .dialog-footer .subgraph_property { -margin-top: 0; -display: flex; -align-items: center; -padding: 5px; -} -.litegraph .dialog .dialog-footer .subgraph_property .name { -flex: 1; -} -.litegraph .graphdialog { -display: flex; -align-items: center; -border-radius: 20px; -padding: 4px 10px; -position: fixed; -} -.litegraph .graphdialog .name { -padding: 0; -min-height: 0; -font-size: 16px; -vertical-align: middle; -} -.litegraph .graphdialog .value { -font-size: 16px; -min-height: 0; -margin: 0 10px; -padding: 2px 5px; -} -.litegraph .graphdialog input[type="checkbox"] { -width: 16px; -height: 16px; -} -.litegraph .graphdialog button { -padding: 4px 18px; -border-radius: 20px; -cursor: pointer; -} - -:root { - --fg-color: #000; - --bg-color: #fff; - --comfy-menu-bg: #353535; - --comfy-input-bg: #222; - --input-text: #ddd; - --descrip-text: #999; - --drag-text: #ccc; - --error-text: #ff4444; - --border-color: #4e4e4e; - --tr-even-bg-color: #222; - --tr-odd-bg-color: #353535; - --primary-bg: #236692; - --primary-fg: #ffffff; - --primary-hover-bg: #3485bb; - --primary-hover-fg: #ffffff; - --content-bg: #e0e0e0; - --content-fg: #000; - --content-hover-bg: #adadad; - --content-hover-fg: #000; -} - -@media (prefers-color-scheme: dark) { - :root { - --fg-color: #fff; - --bg-color: #202020; - --content-bg: #4e4e4e; - --content-fg: #fff; - --content-hover-bg: #222; - --content-hover-fg: #fff; - } -} - -body { - width: 100vw; - height: 100vh; - margin: 0; - overflow: hidden; - grid-template-columns: auto 1fr auto; - grid-template-rows: auto 1fr auto; - background-color: var(--bg-color); - color: var(--fg-color); - min-height: -webkit-fill-available; - max-height: -webkit-fill-available; - min-width: -webkit-fill-available; - max-width: -webkit-fill-available; - font-family: Arial, sans-serif; -} - -/** - +------------------+------------------+------------------+ - | | - | .comfyui-body- | - | top | - | (spans all cols) | - | | - +------------------+------------------+------------------+ - | | | | - | .comfyui-body- | #graph-canvas | .comfyui-body- | - | left | | right | - | | | | - | | | | - +------------------+------------------+------------------+ - | | - | .comfyui-body- | - | bottom | - | (spans all cols) | - | | - +------------------+------------------+------------------+ -*/ - -.comfyui-body-top { - order: -5; - /* Span across all columns */ - grid-column: 1/-1; - /* Position at the first row */ - grid-row: 1; - z-index: 10; - display: flex; - flex-direction: column; -} - -.comfyui-body-left { - order: -4; - /* Position in the first column */ - grid-column: 1; - /* Position below the top element */ - grid-row: 2; - z-index: 10; - display: flex; -} - -.graph-canvas-container { - width: 100%; - height: 100%; - order: -3; - grid-column: 2; - grid-row: 2; - position: relative; - overflow: hidden; -} - -#graph-canvas { - width: 100%; - height: 100%; - touch-action: none; -} - -.comfyui-body-right { - order: -2; - z-index: 10; - grid-column: 3; - grid-row: 2; -} - -.comfyui-body-bottom { - order: 4; - /* Span across all columns */ - grid-column: 1/-1; - grid-row: 3; - z-index: 10; - display: flex; - flex-direction: column; -} - -.comfy-multiline-input { - background-color: var(--comfy-input-bg); - color: var(--input-text); - overflow: hidden; - overflow-y: auto; - padding: 2px; - resize: none; - border: none; - box-sizing: border-box; - font-size: var(--comfy-textarea-font-size); -} - -.comfy-modal { - display: none; /* Hidden by default */ - position: fixed; /* Stay in place */ - z-index: 100; /* Sit on top */ - padding: 30px 30px 10px 30px; - background-color: var(--comfy-menu-bg); /* Modal background */ - color: var(--error-text); - box-shadow: 0 0 20px #888888; - border-radius: 10px; - top: 50%; - left: 50%; - max-width: 80vw; - max-height: 80vh; - transform: translate(-50%, -50%); - overflow: hidden; - justify-content: center; - font-family: monospace; - font-size: 15px; -} - -.comfy-modal-content { - display: flex; - flex-direction: column; -} - -.comfy-modal p { - overflow: auto; - white-space: pre-line; /* This will respect line breaks */ - margin-bottom: 20px; /* Add some margin between the text and the close button*/ -} - -.comfy-modal select, -.comfy-modal input[type=button], -.comfy-modal input[type=checkbox] { - margin: 3px 3px 3px 4px; -} - -.comfy-menu-hamburger { - position: fixed; - top: 10px; - z-index: 9999; - right: 10px; - width: 30px; - display: none; - gap: 8px; - flex-direction: column; - cursor: pointer; -} - -.comfy-menu-hamburger div { - height: 3px; - width: 100%; - border-radius: 20px; - background-color: white; -} - -.comfy-menu { - font-size: 15px; - position: absolute; - top: 50%; - right: 0; - text-align: center; - z-index: 999; - width: 190px; - display: flex; - flex-direction: column; - align-items: center; - color: var(--descrip-text); - background-color: var(--comfy-menu-bg); - font-family: sans-serif; - padding: 10px; - border-radius: 0 8px 8px 8px; - box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); -} - -.comfy-menu-header { - display: flex; -} - -.comfy-menu-actions { - display: flex; - gap: 3px; - align-items: center; - height: 20px; - position: relative; - top: -1px; - font-size: 22px; -} - -.comfy-menu .comfy-menu-actions button { - background-color: rgba(0, 0, 0, 0); - padding: 0; - border: none; - cursor: pointer; - font-size: inherit; -} - -.comfy-menu .comfy-menu-actions .comfy-settings-btn { - font-size: 0.6em; -} - -button.comfy-close-menu-btn { - font-size: 1em; - line-height: 12px; - color: #ccc; - position: relative; - top: -1px; -} - -.comfy-menu-queue-size { - flex: auto; -} - -.comfy-menu button, -.comfy-modal button { - font-size: 20px; -} - -.comfy-menu-btns { - margin-bottom: 10px; - width: 100%; -} - -.comfy-menu-btns button { - font-size: 10px; - width: 50%; - color: var(--descrip-text) !important; -} - -.comfy-menu > button { - width: 100%; -} - -.comfy-btn, -.comfy-menu > button, -.comfy-menu-btns button, -.comfy-menu .comfy-list button, -.comfy-modal button { - color: var(--input-text); - background-color: var(--comfy-input-bg); - border-radius: 8px; - border-color: var(--border-color); - border-style: solid; - margin-top: 2px; -} - -.comfy-btn:hover:not(:disabled), -.comfy-menu > button:hover, -.comfy-menu-btns button:hover, -.comfy-menu .comfy-list button:hover, -.comfy-modal button:hover, -.comfy-menu-actions button:hover { - filter: brightness(1.2); - will-change: transform; - cursor: pointer; -} - -span.drag-handle { - width: 10px; - height: 20px; - display: inline-block; - overflow: hidden; - line-height: 5px; - padding: 3px 4px; - cursor: move; - vertical-align: middle; - margin-top: -.4em; - margin-left: -.2em; - font-size: 12px; - font-family: sans-serif; - letter-spacing: 2px; - color: var(--drag-text); - text-shadow: 1px 0 1px black; -} - -span.drag-handle::after { - content: '.. .. ..'; -} - -.comfy-queue-btn { - width: 100%; -} - -.comfy-list { - color: var(--descrip-text); - background-color: var(--comfy-menu-bg); - margin-bottom: 10px; - border-color: var(--border-color); - border-style: solid; -} - -.comfy-list-items { - overflow-y: scroll; - max-height: 100px; - min-height: 25px; - background-color: var(--comfy-input-bg); - padding: 5px; -} - -.comfy-list h4 { - min-width: 160px; - margin: 0; - padding: 3px; - font-weight: normal; -} - -.comfy-list-items button { - font-size: 10px; -} - -.comfy-list-actions { - margin: 5px; - display: flex; - gap: 5px; - justify-content: center; -} - -.comfy-list-actions button { - font-size: 12px; -} - -button.comfy-queue-btn { - margin: 6px 0 !important; -} - -.comfy-modal.comfy-settings, -.comfy-modal.comfy-manage-templates { - text-align: center; - font-family: sans-serif; - color: var(--descrip-text); - z-index: 99; -} - -.comfy-modal.comfy-settings input[type="range"] { - vertical-align: middle; -} - -.comfy-modal.comfy-settings input[type="range"] + input[type="number"] { - width: 3.5em; -} - -.comfy-modal input, -.comfy-modal select { - color: var(--input-text); - background-color: var(--comfy-input-bg); - border-radius: 8px; - border-color: var(--border-color); - border-style: solid; - font-size: inherit; -} - -.comfy-tooltip-indicator { - text-decoration: underline; - text-decoration-style: dashed; -} - -@media only screen and (max-height: 850px) { - .comfy-menu { - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - border-radius: 0; - } - - .comfy-menu span.drag-handle { - display: none; - } - - .comfy-menu-queue-size { - flex: unset; - } - - .comfy-menu-header { - justify-content: space-between; - } - .comfy-menu-actions { - gap: 10px; - font-size: 28px; - } -} - -/* Input popup */ - -.graphdialog { - min-height: 1em; - background-color: var(--comfy-menu-bg); -} - -.graphdialog .name { - font-size: 14px; - font-family: sans-serif; - color: var(--descrip-text); -} - -.graphdialog button { - margin-top: unset; - vertical-align: unset; - height: 1.6em; - padding-right: 8px; -} - -.graphdialog input, .graphdialog textarea, .graphdialog select { - background-color: var(--comfy-input-bg); - border: 2px solid; - border-color: var(--border-color); - color: var(--input-text); - border-radius: 12px 0 0 12px; -} - -/* Dialogs */ - -dialog { - box-shadow: 0 0 20px #888888; -} - -dialog::backdrop { - background: rgba(0, 0, 0, 0.5); -} - -.comfy-dialog.comfyui-dialog.comfy-modal { - top: 0; - left: 0; - right: 0; - bottom: 0; - transform: none; -} - -.comfy-dialog.comfy-modal { - font-family: Arial, sans-serif; - border-color: var(--bg-color); - box-shadow: none; - border: 2px solid var(--border-color); -} - -.comfy-dialog .comfy-modal-content { - flex-direction: row; - flex-wrap: wrap; - gap: 10px; - color: var(--fg-color); -} - -.comfy-dialog .comfy-modal-content h3 { - margin-top: 0; -} - -.comfy-dialog .comfy-modal-content > p { - width: 100%; -} - -.comfy-dialog .comfy-modal-content > .comfyui-button { - flex: 1; - justify-content: center; -} - -#comfy-settings-dialog { - padding: 0; - width: 41rem; -} - -#comfy-settings-dialog tr > td:first-child { - text-align: right; -} - -#comfy-settings-dialog tbody button, #comfy-settings-dialog table > button { - background-color: var(--bg-color); - border: 1px var(--border-color) solid; - border-radius: 0; - color: var(--input-text); - font-size: 1rem; - padding: 0.5rem; -} - -#comfy-settings-dialog button:hover { - background-color: var(--tr-odd-bg-color); -} - -/* General CSS for tables */ - -.comfy-table { - border-collapse: collapse; - color: var(--input-text); - font-family: Arial, sans-serif; - width: 100%; -} - -.comfy-table caption { - position: sticky; - top: 0; - background-color: var(--bg-color); - color: var(--input-text); - font-size: 1rem; - font-weight: bold; - padding: 8px; - text-align: center; - border-bottom: 1px solid var(--border-color); -} - -.comfy-table caption .comfy-btn { - position: absolute; - top: -2px; - right: 0; - bottom: 0; - cursor: pointer; - border: none; - height: 100%; - border-radius: 0; - aspect-ratio: 1/1; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - font-size: 20px; -} - -.comfy-table caption .comfy-btn:focus { - outline: none; -} - -.comfy-table tr:nth-child(even) { - background-color: var(--tr-even-bg-color); -} - -.comfy-table tr:nth-child(odd) { - background-color: var(--tr-odd-bg-color); -} - -.comfy-table td, -.comfy-table th { - border: 1px solid var(--border-color); - padding: 8px; -} - -/* Context menu */ - -.litegraph .dialog { - z-index: 1; - font-family: Arial, sans-serif; -} - -.litegraph .litemenu-entry.has_submenu { - position: relative; - padding-right: 20px; -} - -.litemenu-entry.has_submenu::after { - content: ">"; - position: absolute; - top: 0; - right: 2px; -} - -.litegraph.litecontextmenu, -.litegraph.litecontextmenu.dark { - z-index: 9999 !important; - background-color: var(--comfy-menu-bg) !important; - filter: brightness(95%); - will-change: transform; -} - -.litegraph.litecontextmenu .litemenu-entry:hover:not(.disabled):not(.separator) { - background-color: var(--comfy-menu-bg) !important; - filter: brightness(155%); - will-change: transform; - color: var(--input-text); -} - -.litegraph.litecontextmenu .litemenu-entry.submenu, -.litegraph.litecontextmenu.dark .litemenu-entry.submenu { - background-color: var(--comfy-menu-bg) !important; - color: var(--input-text); -} - -.litegraph.litecontextmenu input { - background-color: var(--comfy-input-bg) !important; - color: var(--input-text) !important; -} - -.comfy-context-menu-filter { - box-sizing: border-box; - border: 1px solid #999; - margin: 0 0 5px 5px; - width: calc(100% - 10px); -} - -.comfy-img-preview { - pointer-events: none; - overflow: hidden; - display: flex; - flex-wrap: wrap; - align-content: flex-start; - justify-content: center; -} - -.comfy-img-preview img { - -o-object-fit: contain; - object-fit: contain; - width: var(--comfy-img-preview-width); - height: var(--comfy-img-preview-height); -} - -.comfy-missing-nodes li button { - font-size: 12px; - margin-left: 5px; -} - -/* Search box */ - -.litegraph.litesearchbox { - z-index: 9999 !important; - background-color: var(--comfy-menu-bg) !important; - overflow: hidden; - display: block; -} - -.litegraph.litesearchbox input, -.litegraph.litesearchbox select { - background-color: var(--comfy-input-bg) !important; - color: var(--input-text); -} - -.litegraph.lite-search-item { - color: var(--input-text); - background-color: var(--comfy-input-bg); - filter: brightness(80%); - will-change: transform; - padding-left: 0.2em; -} - -.litegraph.lite-search-item.generic_type { - color: var(--input-text); - filter: brightness(50%); - will-change: transform; -} - -@media only screen and (max-width: 450px) { - #comfy-settings-dialog .comfy-table tbody { - display: grid; - } - #comfy-settings-dialog .comfy-table tr { - display: grid; - } - #comfy-settings-dialog tr > td:first-child { - text-align: center; - border-bottom: none; - padding-bottom: 0; - } - #comfy-settings-dialog tr > td:not(:first-child) { - text-align: center; - border-top: none; - } -} - -audio.comfy-audio.empty-audio-widget { - display: none; -} - -#vue-app { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - pointer-events: none; -} - -/* Set auto complete panel's width as it is not accessible within vue-root */ -.p-autocomplete-overlay { - max-width: 25vw; -} - -:root { - --sidebar-width: 64px; - --sidebar-icon-size: 1.5rem; -} -:root .small-sidebar { - --sidebar-width: 40px; - --sidebar-icon-size: 1rem; -} - -.side-tool-bar-container[data-v-f54e0ebc] { - display: flex; - flex-direction: column; - align-items: center; - - pointer-events: auto; - - width: var(--sidebar-width); - height: 100%; - - background-color: var(--comfy-menu-bg); - color: var(--fg-color); -} -.side-tool-bar-end[data-v-f54e0ebc] { - align-self: flex-end; - margin-top: auto; -} -.sidebar-content-container[data-v-f54e0ebc] { - height: 100%; - overflow-y: auto; -} - -.p-splitter-gutter { - pointer-events: auto; -} -.gutter-hidden { - display: none !important; -} - -.side-bar-panel[data-v-1c49e664] { - background-color: var(--bg-color); - pointer-events: auto; -} -.splitter-overlay[data-v-1c49e664] { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - background-color: transparent; - pointer-events: none; - /* Set it the same as the ComfyUI menu */ - /* Note: Lite-graph DOM widgets have the same z-index as the node id, so - 999 should be sufficient to make sure splitter overlays on node's DOM - widgets */ - z-index: 999; - border: none; -} - -._filter-button[data-v-071f55e3] { - z-index: 10; -} -._dialog[data-v-071f55e3] { - min-width: 24rem; -} -._dialog-body[data-v-071f55e3] { - display: flex; - flex-direction: column; -} -._dialog-body[data-v-071f55e3] > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); -} - -.comfy-core[data-v-1d7c94e5], -.comfy-custom-nodes[data-v-1d7c94e5], -.comfy-unknown[data-v-1d7c94e5] { - font-size: small; - font-weight: lighter; -} - -.slot_row[data-v-d926c92a] { - padding: 2px; -} - -/* Original N-Sidebar styles */ -._sb_dot[data-v-d926c92a] { - width: 8px; - height: 8px; - border-radius: 50%; - background-color: grey; -} -.node_header[data-v-d926c92a] { - line-height: 1; - padding: 8px 13px 7px; - background: var(--comfy-input-bg); - margin-bottom: 5px; - font-size: 15px; - text-wrap: nowrap; - overflow: hidden; - display: flex; - align-items: center; -} -.headdot[data-v-d926c92a] { - width: 10px; - height: 10px; - float: inline-start; - margin-right: 8px; -} -.IMAGE[data-v-d926c92a] { - background-color: #64b5f6; -} -.VAE[data-v-d926c92a] { - background-color: #ff6e6e; -} -.LATENT[data-v-d926c92a] { - background-color: #ff9cf9; -} -.MASK[data-v-d926c92a] { - background-color: #81c784; -} -.CONDITIONING[data-v-d926c92a] { - background-color: #ffa931; -} -.CLIP[data-v-d926c92a] { - background-color: #ffd500; -} -.MODEL[data-v-d926c92a] { - background-color: #b39ddb; -} -.CONTROL_NET[data-v-d926c92a] { - background-color: #a5d6a7; -} -._sb_node_preview[data-v-d926c92a] { - background-color: var(--comfy-menu-bg); - font-family: 'Open Sans', sans-serif; - font-size: small; - color: var(--descrip-text); - border: 1px solid var(--descrip-text); - min-width: 300px; - width: -moz-min-content; - width: min-content; - height: -moz-fit-content; - height: fit-content; - z-index: 9999; - border-radius: 12px; - overflow: hidden; - font-size: 12px; - padding-bottom: 10px; -} -._sb_node_preview ._sb_description[data-v-d926c92a] { - margin: 10px; - padding: 6px; - background: var(--border-color); - border-radius: 5px; - font-style: italic; - font-weight: 500; - font-size: 0.9rem; - word-break: break-word; -} -._sb_table[data-v-d926c92a] { - display: grid; - - grid-column-gap: 10px; - /* Spazio tra le colonne */ - width: 100%; - /* Imposta la larghezza della tabella al 100% del contenitore */ -} -._sb_row[data-v-d926c92a] { - display: grid; - grid-template-columns: 10px 1fr 1fr 1fr 10px; - grid-column-gap: 10px; - align-items: center; - padding-left: 9px; - padding-right: 9px; -} -._sb_row_string[data-v-d926c92a] { - grid-template-columns: 10px 1fr 1fr 10fr 1fr; -} -._sb_col[data-v-d926c92a] { - border: 0px solid #000; - display: flex; - align-items: flex-end; - flex-direction: row-reverse; - flex-wrap: nowrap; - align-content: flex-start; - justify-content: flex-end; -} -._sb_inherit[data-v-d926c92a] { - display: inherit; -} -._long_field[data-v-d926c92a] { - background: var(--bg-color); - border: 2px solid var(--border-color); - margin: 5px 5px 0 5px; - border-radius: 10px; - line-height: 1.7; - text-wrap: nowrap; -} -._sb_arrow[data-v-d926c92a] { - color: var(--fg-color); -} -._sb_preview_badge[data-v-d926c92a] { - text-align: center; - background: var(--comfy-input-bg); - font-weight: bold; - color: var(--error-text); -} - -.comfy-vue-node-search-container[data-v-ba2c5897] { - display: flex; - width: 100%; - min-width: 24rem; - align-items: center; - justify-content: center; -} -.comfy-vue-node-search-container[data-v-ba2c5897] * { - pointer-events: auto; -} -.comfy-vue-node-preview-container[data-v-ba2c5897] { - position: absolute; - left: -350px; - top: 50px; -} -.comfy-vue-node-search-box[data-v-ba2c5897] { - z-index: 10; - flex-grow: 1; -} -.option-container[data-v-ba2c5897] { - display: flex; - width: 100%; - cursor: pointer; - align-items: center; - justify-content: space-between; - overflow: hidden; - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-top: 0px; - padding-bottom: 0px; -} -.option-display-name[data-v-ba2c5897] { - display: flex; - flex-direction: column; - font-weight: 600; -} -.option-category[data-v-ba2c5897] { - overflow: hidden; - text-overflow: ellipsis; - font-size: 0.875rem; - line-height: 1.25rem; - font-weight: 300; - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); - /* Keeps the text on a single line by default */ - white-space: nowrap; -} -.i-badge[data-v-ba2c5897] { - --tw-bg-opacity: 1; - background-color: rgb(34 197 94 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.o-badge[data-v-ba2c5897] { - --tw-bg-opacity: 1; - background-color: rgb(239 68 68 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.c-badge[data-v-ba2c5897] { - --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.s-badge[data-v-ba2c5897] { - --tw-bg-opacity: 1; - background-color: rgb(234 179 8 / var(--tw-bg-opacity)); -} -[data-v-ba2c5897] .highlight { - background-color: var(--p-primary-color); - color: var(--p-primary-contrast-color); - font-weight: bold; - border-radius: 0.25rem; - padding: 0rem 0.125rem; - margin: -0.125rem 0.125rem; -} - -.invisible-dialog-root { - width: 30%; - min-width: 24rem; - max-width: 48rem; - border: 0 !important; - background-color: transparent !important; - margin-top: 25vh; -} -.node-search-box-dialog-mask { - align-items: flex-start !important; -} - -.node-tooltip[data-v-d5e6001c] { - background: var(--comfy-input-bg); - border-radius: 5px; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); - color: var(--input-text); - font-family: sans-serif; - left: 0; - max-width: 30vw; - padding: 4px 8px; - position: absolute; - top: 0; - transform: translate(5px, calc(-100% - 5px)); - white-space: pre-wrap; - z-index: 99999; -} - -.broken-image[data-v-1a883642] { - display: none; -} -.broken-image-placeholder[data-v-1a883642] { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - margin: 2rem; -} -.broken-image-placeholder i[data-v-1a883642] { - font-size: 3rem; - margin-bottom: 0.5rem; -} - -.result-container[data-v-7ceacc88] { - width: 100%; - height: 100%; - aspect-ratio: 1 / 1; - overflow: hidden; - position: relative; - display: flex; - justify-content: center; - align-items: center; -} -[data-v-7ceacc88] .task-output-image { - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; - -o-object-position: center; - object-position: center; -} -.image-preview-mask[data-v-7ceacc88] { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - transition: opacity 0.3s ease; -} -.result-container:hover .image-preview-mask[data-v-7ceacc88] { - opacity: 1; -} - -.task-result-preview[data-v-7c099cb7] { - aspect-ratio: 1 / 1; - overflow: hidden; - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} -.task-result-preview i[data-v-7c099cb7], -.task-result-preview span[data-v-7c099cb7] { - font-size: 2rem; -} -.task-item[data-v-7c099cb7] { - display: flex; - flex-direction: column; - border-radius: 4px; - overflow: hidden; - position: relative; -} -.task-item-details[data-v-7c099cb7] { - position: absolute; - bottom: 0; - padding: 0.6rem; - display: flex; - justify-content: space-between; - width: 100%; -} - -/* In dark mode, transparent background color for tags is not ideal for tags that -are floating on top of images. */ -.tag-wrapper[data-v-7c099cb7] { - background-color: var(--p-primary-contrast-color); - border-radius: 6px; - display: inline-flex; -} - -/* PrimeVue's galleria teleports the fullscreen gallery out of subtree so we -cannot use scoped style here. */ -img.galleria-image { - max-width: 100vw; - max-height: 100vh; - -o-object-fit: contain; - object-fit: contain; - /* Set z-index so the close button doesn't get hidden behind the image when image is large */ - z-index: -1; -} - -.comfy-vue-side-bar-container[data-v-bde767d2] { - display: flex; - flex-direction: column; - height: 100%; - overflow: hidden; -} -.comfy-vue-side-bar-header[data-v-bde767d2] { - flex-shrink: 0; - border-left: none; - border-right: none; - border-top: none; - border-radius: 0; - padding: 0.25rem 1rem; - min-height: 2.5rem; -} -.comfy-vue-side-bar-header-span[data-v-bde767d2] { - font-size: small; -} -.comfy-vue-side-bar-body[data-v-bde767d2] { - flex-grow: 1; - overflow: auto; - scrollbar-width: thin; - scrollbar-color: transparent transparent; -} -.comfy-vue-side-bar-body[data-v-bde767d2]::-webkit-scrollbar { - width: 1px; -} -.comfy-vue-side-bar-body[data-v-bde767d2]::-webkit-scrollbar-thumb { - background-color: transparent; -} - -.scroll-container[data-v-bd027c46] { - height: 100%; - overflow-y: auto; -} -.queue-grid[data-v-bd027c46] { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - padding: 0.5rem; - gap: 0.5rem; -} - -.node-lib-tree-node-label { - display: flex; - align-items: center; - margin-left: var(--p-tree-node-gap); -} - -[data-v-11e12183] .node-lib-search-box { - margin-left: 1rem; - margin-right: 1rem; - margin-top: 1rem; -} -[data-v-11e12183] .comfy-vue-side-bar-body { - background: var(--p-tree-background); -} - -.spinner[data-v-afce9bd6] { - position: absolute; - inset: 0px; - display: flex; - height: 100vh; - align-items: center; - justify-content: center -} diff --git a/web/assets/index-BNMdgttb.js b/web/assets/index-BNMdgttb.js new file mode 100644 index 000000000..0d3d912ae --- /dev/null +++ b/web/assets/index-BNMdgttb.js @@ -0,0 +1,52406 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { c6 as ComfyDialog, c7 as $el, c8 as ComfyApp, b as app, j as LiteGraph, b9 as LGraphCanvas, c9 as DraggableList, bo as useToastStore, ca as showPromptDialog, cb as t, cc as serialise, aF as useNodeDefStore, cd as deserialiseAndCreate, b2 as api, u as useSettingStore, L as LGraphGroup, ce as KeyComboImpl, O as useKeybindingStore, F as useCommandStore, c as LGraphNode, cf as ComfyWidgets, cg as applyTextReplacements, ch as isElectron, bZ as electronAPI, ci as showConfirmationDialog, aQ as nextTick } from "./index-CSl7lfOs.js"; +import { mergeIfValid, getWidgetConfig, setWidgetConfig } from "./widgetInputs-4aSRGZNs.js"; +class ClipspaceDialog extends ComfyDialog { + static { + __name(this, "ClipspaceDialog"); + } + static items = []; + static instance = null; + static registerButton(name, contextPredicate, callback) { + const item = $el("button", { + type: "button", + textContent: name, + contextPredicate, + onclick: callback + }); + ClipspaceDialog.items.push(item); + } + static invalidatePreview() { + if (ComfyApp.clipspace && ComfyApp.clipspace.imgs && ComfyApp.clipspace.imgs.length > 0) { + const img_preview = document.getElementById( + "clipspace_preview" + ); + if (img_preview) { + img_preview.src = ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]].src; + img_preview.style.maxHeight = "100%"; + img_preview.style.maxWidth = "100%"; + } + } + } + static invalidate() { + if (ClipspaceDialog.instance) { + const self2 = ClipspaceDialog.instance; + const children = $el("div.comfy-modal-content", [ + self2.createImgSettings(), + ...self2.createButtons() + ]); + if (self2.element) { + if (self2.element.firstChild) { + self2.element.removeChild(self2.element.firstChild); + } + self2.element.appendChild(children); + } else { + self2.element = $el("div.comfy-modal", { parent: document.body }, [ + children + ]); + } + if (self2.element.children[0].children.length <= 1) { + self2.element.children[0].appendChild( + $el("p", {}, [ + "Unable to find the features to edit content of a format stored in the current Clipspace." + ]) + ); + } + ClipspaceDialog.invalidatePreview(); + } + } + constructor() { + super(); + } + createButtons() { + const buttons = []; + for (let idx in ClipspaceDialog.items) { + const item = ClipspaceDialog.items[idx]; + if (!item.contextPredicate || item.contextPredicate()) + buttons.push(ClipspaceDialog.items[idx]); + } + buttons.push( + $el("button", { + type: "button", + textContent: "Close", + onclick: /* @__PURE__ */ __name(() => { + this.close(); + }, "onclick") + }) + ); + return buttons; + } + createImgSettings() { + if (ComfyApp.clipspace?.imgs) { + const combo_items = []; + const imgs = ComfyApp.clipspace.imgs; + for (let i = 0; i < imgs.length; i++) { + combo_items.push($el("option", { value: i }, [`${i}`])); + } + const combo1 = $el( + "select", + { + id: "clipspace_img_selector", + onchange: /* @__PURE__ */ __name((event) => { + if (event.target && ComfyApp.clipspace) { + ComfyApp.clipspace["selectedIndex"] = event.target.selectedIndex; + ClipspaceDialog.invalidatePreview(); + } + }, "onchange") + }, + combo_items + ); + const row1 = $el("tr", {}, [ + $el("td", {}, [$el("font", { color: "white" }, ["Select Image"])]), + $el("td", {}, [combo1]) + ]); + const combo2 = $el( + "select", + { + id: "clipspace_img_paste_mode", + onchange: /* @__PURE__ */ __name((event) => { + if (event.target && ComfyApp.clipspace) { + ComfyApp.clipspace["img_paste_mode"] = event.target.value; + } + }, "onchange") + }, + [ + $el("option", { value: "selected" }, "selected"), + $el("option", { value: "all" }, "all") + ] + ); + combo2.value = ComfyApp.clipspace["img_paste_mode"]; + const row2 = $el("tr", {}, [ + $el("td", {}, [$el("font", { color: "white" }, ["Paste Mode"])]), + $el("td", {}, [combo2]) + ]); + const td2 = $el( + "td", + { align: "center", width: "100px", height: "100px", colSpan: "2" }, + [$el("img", { id: "clipspace_preview", ondragstart: /* @__PURE__ */ __name(() => false, "ondragstart") }, [])] + ); + const row3 = $el("tr", {}, [td2]); + return $el("table", {}, [row1, row2, row3]); + } else { + return []; + } + } + createImgPreview() { + if (ComfyApp.clipspace?.imgs) { + return $el("img", { id: "clipspace_preview", ondragstart: /* @__PURE__ */ __name(() => false, "ondragstart") }); + } else return []; + } + show() { + const img_preview = document.getElementById("clipspace_preview"); + ClipspaceDialog.invalidate(); + this.element.style.display = "block"; + } +} +app.registerExtension({ + name: "Comfy.Clipspace", + init(app2) { + app2.openClipspace = function() { + if (!ClipspaceDialog.instance) { + ClipspaceDialog.instance = new ClipspaceDialog(); + ComfyApp.clipspace_invalidate_handler = ClipspaceDialog.invalidate; + } + if (ComfyApp.clipspace) { + ClipspaceDialog.instance.show(); + } else app2.ui.dialog.show("Clipspace is Empty!"); + }; + } +}); +window.comfyAPI = window.comfyAPI || {}; +window.comfyAPI.clipspace = window.comfyAPI.clipspace || {}; +window.comfyAPI.clipspace.ClipspaceDialog = ClipspaceDialog; +const ext$1 = { + name: "Comfy.ContextMenuFilter", + init() { + const ctxMenu = LiteGraph.ContextMenu; + LiteGraph.ContextMenu = function(values, options) { + const ctx = new ctxMenu(values, options); + if (options?.className === "dark" && values?.length > 4) { + const filter = document.createElement("input"); + filter.classList.add("comfy-context-menu-filter"); + filter.placeholder = "Filter list"; + ctx.root.prepend(filter); + const items = Array.from( + ctx.root.querySelectorAll(".litemenu-entry") + ); + let displayedItems = [...items]; + let itemCount = displayedItems.length; + requestAnimationFrame(() => { + const currentNode = LGraphCanvas.active_canvas.current_node; + const clickedComboValue = currentNode?.widgets?.filter( + (w) => w.type === "combo" && w.options.values?.length === values.length + ).find( + (w) => w.options.values?.every((v, i) => v === values[i]) + )?.value; + let selectedIndex = clickedComboValue ? values.findIndex((v) => v === clickedComboValue) : 0; + if (selectedIndex < 0) { + selectedIndex = 0; + } + let selectedItem = displayedItems[selectedIndex]; + updateSelected(); + function updateSelected() { + selectedItem?.style.setProperty("background-color", ""); + selectedItem?.style.setProperty("color", ""); + selectedItem = displayedItems[selectedIndex]; + selectedItem?.style.setProperty( + "background-color", + "#ccc", + "important" + ); + selectedItem?.style.setProperty("color", "#000", "important"); + } + __name(updateSelected, "updateSelected"); + const positionList = /* @__PURE__ */ __name(() => { + const rect = ctx.root.getBoundingClientRect(); + if (rect.top < 0) { + const scale = 1 - ctx.root.getBoundingClientRect().height / ctx.root.clientHeight; + const shift = ctx.root.clientHeight * scale / 2; + ctx.root.style.top = -shift + "px"; + } + }, "positionList"); + filter.addEventListener("keydown", (event) => { + switch (event.key) { + case "ArrowUp": + event.preventDefault(); + if (selectedIndex === 0) { + selectedIndex = itemCount - 1; + } else { + selectedIndex--; + } + updateSelected(); + break; + case "ArrowRight": + event.preventDefault(); + selectedIndex = itemCount - 1; + updateSelected(); + break; + case "ArrowDown": + event.preventDefault(); + if (selectedIndex === itemCount - 1) { + selectedIndex = 0; + } else { + selectedIndex++; + } + updateSelected(); + break; + case "ArrowLeft": + event.preventDefault(); + selectedIndex = 0; + updateSelected(); + break; + case "Enter": + selectedItem?.click(); + break; + case "Escape": + ctx.close(); + break; + } + }); + filter.addEventListener("input", () => { + const term = filter.value.toLocaleLowerCase(); + displayedItems = items.filter((item) => { + const isVisible = !term || item.textContent?.toLocaleLowerCase().includes(term); + item.style.display = isVisible ? "block" : "none"; + return isVisible; + }); + selectedIndex = 0; + if (displayedItems.includes(selectedItem)) { + selectedIndex = displayedItems.findIndex( + (d) => d === selectedItem + ); + } + itemCount = displayedItems.length; + updateSelected(); + if (options.event) { + let top = options.event.clientY - 10; + const bodyRect = document.body.getBoundingClientRect(); + const rootRect = ctx.root.getBoundingClientRect(); + if (bodyRect.height && top > bodyRect.height - rootRect.height - 10) { + top = Math.max(0, bodyRect.height - rootRect.height - 10); + } + ctx.root.style.top = top + "px"; + positionList(); + } + }); + requestAnimationFrame(() => { + filter.focus(); + positionList(); + }); + }); + } + return ctx; + }; + LiteGraph.ContextMenu.prototype = ctxMenu.prototype; + } +}; +app.registerExtension(ext$1); +function stripComments(str) { + return str.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, ""); +} +__name(stripComments, "stripComments"); +app.registerExtension({ + name: "Comfy.DynamicPrompts", + nodeCreated(node) { + if (node.widgets) { + const widgets = node.widgets.filter((n) => n.dynamicPrompts); + for (const widget of widgets) { + widget.serializeValue = (workflowNode, widgetIndex) => { + let prompt = stripComments(widget.value); + while (prompt.replace("\\{", "").includes("{") && prompt.replace("\\}", "").includes("}")) { + const startIndex = prompt.replace("\\{", "00").indexOf("{"); + const endIndex = prompt.replace("\\}", "00").indexOf("}"); + const optionsString = prompt.substring(startIndex + 1, endIndex); + const options = optionsString.split("|"); + const randomIndex = Math.floor(Math.random() * options.length); + const randomOption = options[randomIndex]; + prompt = prompt.substring(0, startIndex) + randomOption + prompt.substring(endIndex + 1); + } + if (workflowNode?.widgets_values) + workflowNode.widgets_values[widgetIndex] = prompt; + return prompt; + }; + } + } + } +}); +app.registerExtension({ + name: "Comfy.EditAttention", + init() { + const editAttentionDelta = app.ui.settings.addSetting({ + id: "Comfy.EditAttention.Delta", + category: ["Comfy", "EditTokenWeight", "Delta"], + name: "Ctrl+up/down precision", + type: "slider", + attrs: { + min: 0.01, + max: 0.5, + step: 0.01 + }, + defaultValue: 0.05 + }); + function incrementWeight(weight, delta) { + const floatWeight = parseFloat(weight); + if (isNaN(floatWeight)) return weight; + const newWeight = floatWeight + delta; + return String(Number(newWeight.toFixed(10))); + } + __name(incrementWeight, "incrementWeight"); + function findNearestEnclosure(text, cursorPos) { + let start = cursorPos, end = cursorPos; + let openCount = 0, closeCount = 0; + while (start >= 0) { + start--; + if (text[start] === "(" && openCount === closeCount) break; + if (text[start] === "(") openCount++; + if (text[start] === ")") closeCount++; + } + if (start < 0) return null; + openCount = 0; + closeCount = 0; + while (end < text.length) { + if (text[end] === ")" && openCount === closeCount) break; + if (text[end] === "(") openCount++; + if (text[end] === ")") closeCount++; + end++; + } + if (end === text.length) return null; + return { start: start + 1, end }; + } + __name(findNearestEnclosure, "findNearestEnclosure"); + function addWeightToParentheses(text) { + const parenRegex = /^\((.*)\)$/; + const parenMatch = text.match(parenRegex); + const floatRegex = /:([+-]?(\d*\.)?\d+([eE][+-]?\d+)?)/; + const floatMatch = text.match(floatRegex); + if (parenMatch && !floatMatch) { + return `(${parenMatch[1]}:1.0)`; + } else { + return text; + } + } + __name(addWeightToParentheses, "addWeightToParentheses"); + function editAttention(event) { + const inputField = event.composedPath()[0]; + const delta = parseFloat(editAttentionDelta.value); + if (inputField.tagName !== "TEXTAREA") return; + if (!(event.key === "ArrowUp" || event.key === "ArrowDown")) return; + if (!event.ctrlKey && !event.metaKey) return; + event.preventDefault(); + let start = inputField.selectionStart; + let end = inputField.selectionEnd; + let selectedText = inputField.value.substring(start, end); + if (!selectedText) { + const nearestEnclosure = findNearestEnclosure(inputField.value, start); + if (nearestEnclosure) { + start = nearestEnclosure.start; + end = nearestEnclosure.end; + selectedText = inputField.value.substring(start, end); + } else { + const delimiters = " .,\\/!?%^*;:{}=-_`~()\r\n "; + while (!delimiters.includes(inputField.value[start - 1]) && start > 0) { + start--; + } + while (!delimiters.includes(inputField.value[end]) && end < inputField.value.length) { + end++; + } + selectedText = inputField.value.substring(start, end); + if (!selectedText) return; + } + } + if (selectedText[selectedText.length - 1] === " ") { + selectedText = selectedText.substring(0, selectedText.length - 1); + end -= 1; + } + if (inputField.value[start - 1] === "(" && inputField.value[end] === ")") { + start -= 1; + end += 1; + selectedText = inputField.value.substring(start, end); + } + if (selectedText[0] !== "(" || selectedText[selectedText.length - 1] !== ")") { + selectedText = `(${selectedText})`; + } + selectedText = addWeightToParentheses(selectedText); + const weightDelta = event.key === "ArrowUp" ? delta : -delta; + const updatedText = selectedText.replace( + /\((.*):([+-]?\d+(?:\.\d+)?)\)/, + (match, text, weight) => { + weight = incrementWeight(weight, weightDelta); + if (weight == 1) { + return text; + } else { + return `(${text}:${weight})`; + } + } + ); + inputField.setSelectionRange(start, end); + document.execCommand("insertText", false, updatedText); + inputField.setSelectionRange(start, start + updatedText.length); + } + __name(editAttention, "editAttention"); + window.addEventListener("keydown", editAttention); + } +}); +const ORDER = Symbol(); +const PREFIX$1 = "workflow"; +const SEPARATOR$1 = ">"; +function merge(target, source) { + if (typeof target === "object" && typeof source === "object") { + for (const key in source) { + const sv = source[key]; + if (typeof sv === "object") { + let tv = target[key]; + if (!tv) tv = target[key] = {}; + merge(tv, source[key]); + } else { + target[key] = sv; + } + } + } + return target; +} +__name(merge, "merge"); +class ManageGroupDialog extends ComfyDialog { + static { + __name(this, "ManageGroupDialog"); + } + tabs; + selectedNodeIndex; + selectedTab = "Inputs"; + selectedGroup; + modifications = {}; + nodeItems; + app; + groupNodeType; + groupNodeDef; + groupData; + innerNodesList; + widgetsPage; + inputsPage; + outputsPage; + draggable; + get selectedNodeInnerIndex() { + return +this.nodeItems[this.selectedNodeIndex].dataset.nodeindex; + } + constructor(app2) { + super(); + this.app = app2; + this.element = $el("dialog.comfy-group-manage", { + parent: document.body + }); + } + changeTab(tab) { + this.tabs[this.selectedTab].tab.classList.remove("active"); + this.tabs[this.selectedTab].page.classList.remove("active"); + this.tabs[tab].tab.classList.add("active"); + this.tabs[tab].page.classList.add("active"); + this.selectedTab = tab; + } + changeNode(index, force) { + if (!force && this.selectedNodeIndex === index) return; + if (this.selectedNodeIndex != null) { + this.nodeItems[this.selectedNodeIndex].classList.remove("selected"); + } + this.nodeItems[index].classList.add("selected"); + this.selectedNodeIndex = index; + if (!this.buildInputsPage() && this.selectedTab === "Inputs") { + this.changeTab("Widgets"); + } + if (!this.buildWidgetsPage() && this.selectedTab === "Widgets") { + this.changeTab("Outputs"); + } + if (!this.buildOutputsPage() && this.selectedTab === "Outputs") { + this.changeTab("Inputs"); + } + this.changeTab(this.selectedTab); + } + getGroupData() { + this.groupNodeType = LiteGraph.registered_node_types[`${PREFIX$1}${SEPARATOR$1}` + this.selectedGroup]; + this.groupNodeDef = this.groupNodeType.nodeData; + this.groupData = GroupNodeHandler.getGroupData(this.groupNodeType); + } + changeGroup(group, reset = true) { + this.selectedGroup = group; + this.getGroupData(); + const nodes = this.groupData.nodeData.nodes; + this.nodeItems = nodes.map( + (n, i) => $el( + "li.draggable-item", + { + dataset: { + nodeindex: n.index + "" + }, + onclick: /* @__PURE__ */ __name(() => { + this.changeNode(i); + }, "onclick") + }, + [ + $el("span.drag-handle"), + $el( + "div", + { + textContent: n.title ?? n.type + }, + n.title ? $el("span", { + textContent: n.type + }) : [] + ) + ] + ) + ); + this.innerNodesList.replaceChildren(...this.nodeItems); + if (reset) { + this.selectedNodeIndex = null; + this.changeNode(0); + } else { + const items = this.draggable.getAllItems(); + let index = items.findIndex((item) => item.classList.contains("selected")); + if (index === -1) index = this.selectedNodeIndex; + this.changeNode(index, true); + } + const ordered = [...nodes]; + this.draggable?.dispose(); + this.draggable = new DraggableList(this.innerNodesList, "li"); + this.draggable.addEventListener( + "dragend", + ({ detail: { oldPosition, newPosition } }) => { + if (oldPosition === newPosition) return; + ordered.splice(newPosition, 0, ordered.splice(oldPosition, 1)[0]); + for (let i = 0; i < ordered.length; i++) { + this.storeModification({ + nodeIndex: ordered[i].index, + section: ORDER, + prop: "order", + value: i + }); + } + } + ); + } + storeModification(props) { + const { nodeIndex, section, prop, value } = props; + const groupMod = this.modifications[this.selectedGroup] ??= {}; + const nodesMod = groupMod.nodes ??= {}; + const nodeMod = nodesMod[nodeIndex ?? this.selectedNodeInnerIndex] ??= {}; + const typeMod = nodeMod[section] ??= {}; + if (typeof value === "object") { + const objMod = typeMod[prop] ??= {}; + Object.assign(objMod, value); + } else { + typeMod[prop] = value; + } + } + getEditElement(section, prop, value, placeholder, checked, checkable = true) { + if (value === placeholder) value = ""; + const mods = this.modifications[this.selectedGroup]?.nodes?.[this.selectedNodeInnerIndex]?.[section]?.[prop]; + if (mods) { + if (mods.name != null) { + value = mods.name; + } + if (mods.visible != null) { + checked = mods.visible; + } + } + return $el("div", [ + $el("input", { + value, + placeholder, + type: "text", + onchange: /* @__PURE__ */ __name((e) => { + this.storeModification({ + section, + prop, + value: { name: e.target.value } + }); + }, "onchange") + }), + $el("label", { textContent: "Visible" }, [ + $el("input", { + type: "checkbox", + checked, + disabled: !checkable, + onchange: /* @__PURE__ */ __name((e) => { + this.storeModification({ + section, + prop, + value: { visible: !!e.target.checked } + }); + }, "onchange") + }) + ]) + ]); + } + buildWidgetsPage() { + const widgets = this.groupData.oldToNewWidgetMap[this.selectedNodeInnerIndex]; + const items = Object.keys(widgets ?? {}); + const type = app.graph.extra.groupNodes[this.selectedGroup]; + const config = type.config?.[this.selectedNodeInnerIndex]?.input; + this.widgetsPage.replaceChildren( + ...items.map((oldName) => { + return this.getEditElement( + "input", + oldName, + widgets[oldName], + oldName, + config?.[oldName]?.visible !== false + ); + }) + ); + return !!items.length; + } + buildInputsPage() { + const inputs = this.groupData.nodeInputs[this.selectedNodeInnerIndex]; + const items = Object.keys(inputs ?? {}); + const type = app.graph.extra.groupNodes[this.selectedGroup]; + const config = type.config?.[this.selectedNodeInnerIndex]?.input; + this.inputsPage.replaceChildren( + ...items.map((oldName) => { + let value = inputs[oldName]; + if (!value) { + return; + } + return this.getEditElement( + "input", + oldName, + value, + oldName, + config?.[oldName]?.visible !== false + ); + }).filter(Boolean) + ); + return !!items.length; + } + buildOutputsPage() { + const nodes = this.groupData.nodeData.nodes; + const innerNodeDef = this.groupData.getNodeDef( + nodes[this.selectedNodeInnerIndex] + ); + const outputs = innerNodeDef?.output ?? []; + const groupOutputs = this.groupData.oldToNewOutputMap[this.selectedNodeInnerIndex]; + const type = app.graph.extra.groupNodes[this.selectedGroup]; + const config = type.config?.[this.selectedNodeInnerIndex]?.output; + const node = this.groupData.nodeData.nodes[this.selectedNodeInnerIndex]; + const checkable = node.type !== "PrimitiveNode"; + this.outputsPage.replaceChildren( + ...outputs.map((type2, slot) => { + const groupOutputIndex = groupOutputs?.[slot]; + const oldName = innerNodeDef.output_name?.[slot] ?? type2; + let value = config?.[slot]?.name; + const visible = config?.[slot]?.visible || groupOutputIndex != null; + if (!value || value === oldName) { + value = ""; + } + return this.getEditElement( + "output", + slot, + value, + oldName, + visible, + checkable + ); + }).filter(Boolean) + ); + return !!outputs.length; + } + show(type) { + const groupNodes = Object.keys(app.graph.extra?.groupNodes ?? {}).sort( + (a, b) => a.localeCompare(b) + ); + this.innerNodesList = $el( + "ul.comfy-group-manage-list-items" + ); + this.widgetsPage = $el("section.comfy-group-manage-node-page"); + this.inputsPage = $el("section.comfy-group-manage-node-page"); + this.outputsPage = $el("section.comfy-group-manage-node-page"); + const pages = $el("div", [ + this.widgetsPage, + this.inputsPage, + this.outputsPage + ]); + this.tabs = [ + ["Inputs", this.inputsPage], + ["Widgets", this.widgetsPage], + ["Outputs", this.outputsPage] + ].reduce((p, [name, page]) => { + p[name] = { + tab: $el("a", { + onclick: /* @__PURE__ */ __name(() => { + this.changeTab(name); + }, "onclick"), + textContent: name + }), + page + }; + return p; + }, {}); + const outer = $el("div.comfy-group-manage-outer", [ + $el("header", [ + $el("h2", "Group Nodes"), + $el( + "select", + { + onchange: /* @__PURE__ */ __name((e) => { + this.changeGroup(e.target.value); + }, "onchange") + }, + groupNodes.map( + (g) => $el("option", { + textContent: g, + selected: `${PREFIX$1}${SEPARATOR$1}` + g === type, + value: g + }) + ) + ) + ]), + $el("main", [ + $el("section.comfy-group-manage-list", this.innerNodesList), + $el("section.comfy-group-manage-node", [ + $el( + "header", + Object.values(this.tabs).map((t2) => t2.tab) + ), + pages + ]) + ]), + $el("footer", [ + $el( + "button.comfy-btn", + { + onclick: /* @__PURE__ */ __name((e) => { + const node = app.graph.nodes.find( + (n) => n.type === `${PREFIX$1}${SEPARATOR$1}` + this.selectedGroup + ); + if (node) { + useToastStore().addAlert( + "This group node is in use in the current workflow, please first remove these." + ); + return; + } + if (confirm( + `Are you sure you want to remove the node: "${this.selectedGroup}"` + )) { + delete app.graph.extra.groupNodes[this.selectedGroup]; + LiteGraph.unregisterNodeType( + `${PREFIX$1}${SEPARATOR$1}` + this.selectedGroup + ); + } + this.show(); + }, "onclick") + }, + "Delete Group Node" + ), + $el( + "button.comfy-btn", + { + onclick: /* @__PURE__ */ __name(async () => { + let nodesByType; + let recreateNodes = []; + const types = {}; + for (const g in this.modifications) { + const type2 = app.graph.extra.groupNodes[g]; + let config = type2.config ??= {}; + let nodeMods = this.modifications[g]?.nodes; + if (nodeMods) { + const keys = Object.keys(nodeMods); + if (nodeMods[keys[0]][ORDER]) { + const orderedNodes = []; + const orderedMods = {}; + const orderedConfig = {}; + for (const n of keys) { + const order = nodeMods[n][ORDER].order; + orderedNodes[order] = type2.nodes[+n]; + orderedMods[order] = nodeMods[n]; + orderedNodes[order].index = order; + } + for (const l of type2.links) { + if (l[0] != null) l[0] = type2.nodes[l[0]].index; + if (l[2] != null) l[2] = type2.nodes[l[2]].index; + } + if (type2.external) { + for (const ext2 of type2.external) { + ext2[0] = type2.nodes[ext2[0]]; + } + } + for (const id2 of keys) { + if (config[id2]) { + orderedConfig[type2.nodes[id2].index] = config[id2]; + } + delete config[id2]; + } + type2.nodes = orderedNodes; + nodeMods = orderedMods; + type2.config = config = orderedConfig; + } + merge(config, nodeMods); + } + types[g] = type2; + if (!nodesByType) { + nodesByType = app.graph.nodes.reduce((p, n) => { + p[n.type] ??= []; + p[n.type].push(n); + return p; + }, {}); + } + const nodes = nodesByType[`${PREFIX$1}${SEPARATOR$1}` + g]; + if (nodes) recreateNodes.push(...nodes); + } + await GroupNodeConfig.registerFromWorkflow(types, {}); + for (const node of recreateNodes) { + node.recreate(); + } + this.modifications = {}; + this.app.graph.setDirtyCanvas(true, true); + this.changeGroup(this.selectedGroup, false); + }, "onclick") + }, + "Save" + ), + $el( + "button.comfy-btn", + { onclick: /* @__PURE__ */ __name(() => this.element.close(), "onclick") }, + "Close" + ) + ]) + ]); + this.element.replaceChildren(outer); + this.changeGroup( + type ? groupNodes.find((g) => `${PREFIX$1}${SEPARATOR$1}` + g === type) : groupNodes[0] + ); + this.element.showModal(); + this.element.addEventListener("close", () => { + this.draggable?.dispose(); + this.element.remove(); + }); + } +} +window.comfyAPI = window.comfyAPI || {}; +window.comfyAPI.groupNodeManage = window.comfyAPI.groupNodeManage || {}; +window.comfyAPI.groupNodeManage.ManageGroupDialog = ManageGroupDialog; +const GROUP = Symbol(); +const PREFIX = "workflow"; +const SEPARATOR = ">"; +const Workflow = { + InUse: { + Free: 0, + Registered: 1, + InWorkflow: 2 + }, + isInUseGroupNode(name) { + const id2 = `${PREFIX}${SEPARATOR}${name}`; + if (app.graph.extra?.groupNodes?.[name]) { + if (app.graph.nodes.find((n) => n.type === id2)) { + return Workflow.InUse.InWorkflow; + } else { + return Workflow.InUse.Registered; + } + } + return Workflow.InUse.Free; + }, + storeGroupNode(name, data) { + let extra = app.graph.extra; + if (!extra) app.graph.extra = extra = {}; + let groupNodes = extra.groupNodes; + if (!groupNodes) extra.groupNodes = groupNodes = {}; + groupNodes[name] = data; + } +}; +class GroupNodeBuilder { + static { + __name(this, "GroupNodeBuilder"); + } + nodes; + nodeData; + constructor(nodes) { + this.nodes = nodes; + } + async build() { + const name = await this.getName(); + if (!name) return; + this.sortNodes(); + this.nodeData = this.getNodeData(); + Workflow.storeGroupNode(name, this.nodeData); + return { name, nodeData: this.nodeData }; + } + async getName() { + const name = await showPromptDialog({ + title: t("groupNode.create"), + message: t("groupNode.enterName"), + defaultValue: "" + }); + if (!name) return; + const used = Workflow.isInUseGroupNode(name); + switch (used) { + case Workflow.InUse.InWorkflow: + useToastStore().addAlert( + "An in use group node with this name already exists embedded in this workflow, please remove any instances or use a new name." + ); + return; + case Workflow.InUse.Registered: + if (!confirm( + "A group node with this name already exists embedded in this workflow, are you sure you want to overwrite it?" + )) { + return; + } + break; + } + return name; + } + sortNodes() { + const nodesInOrder = app.graph.computeExecutionOrder(false); + this.nodes = this.nodes.map((node) => ({ index: nodesInOrder.indexOf(node), node })).sort((a, b) => a.index - b.index || a.node.id - b.node.id).map(({ node }) => node); + } + getNodeData() { + const storeLinkTypes = /* @__PURE__ */ __name((config) => { + for (const link of config.links) { + const origin = app.graph.getNodeById(link[4]); + const type = origin.outputs[link[1]].type; + link.push(type); + } + }, "storeLinkTypes"); + const storeExternalLinks = /* @__PURE__ */ __name((config) => { + config.external = []; + for (let i = 0; i < this.nodes.length; i++) { + const node = this.nodes[i]; + if (!node.outputs?.length) continue; + for (let slot = 0; slot < node.outputs.length; slot++) { + let hasExternal = false; + const output = node.outputs[slot]; + let type = output.type; + if (!output.links?.length) continue; + for (const l of output.links) { + const link = app.graph.links[l]; + if (!link) continue; + if (type === "*") type = link.type; + if (!app.canvas.selected_nodes[link.target_id]) { + hasExternal = true; + break; + } + } + if (hasExternal) { + config.external.push([i, slot, type]); + } + } + } + }, "storeExternalLinks"); + try { + const serialised = serialise(this.nodes, app.canvas.graph); + const config = JSON.parse(serialised); + storeLinkTypes(config); + storeExternalLinks(config); + return config; + } finally { + } + } +} +class GroupNodeConfig { + static { + __name(this, "GroupNodeConfig"); + } + name; + nodeData; + inputCount; + oldToNewOutputMap; + newToOldOutputMap; + oldToNewInputMap; + oldToNewWidgetMap; + newToOldWidgetMap; + primitiveDefs; + widgetToPrimitive; + primitiveToWidget; + nodeInputs; + outputVisibility; + nodeDef; + inputs; + linksFrom; + linksTo; + externalFrom; + constructor(name, nodeData) { + this.name = name; + this.nodeData = nodeData; + this.getLinks(); + this.inputCount = 0; + this.oldToNewOutputMap = {}; + this.newToOldOutputMap = {}; + this.oldToNewInputMap = {}; + this.oldToNewWidgetMap = {}; + this.newToOldWidgetMap = {}; + this.primitiveDefs = {}; + this.widgetToPrimitive = {}; + this.primitiveToWidget = {}; + this.nodeInputs = {}; + this.outputVisibility = []; + } + async registerType(source = PREFIX) { + this.nodeDef = { + output: [], + output_name: [], + output_is_list: [], + // @ts-expect-error Unused, doesn't exist + output_is_hidden: [], + name: source + SEPARATOR + this.name, + display_name: this.name, + category: "group nodes" + (SEPARATOR + source), + input: { required: {} }, + description: `Group node combining ${this.nodeData.nodes.map((n) => n.type).join(", ")}`, + python_module: "custom_nodes." + this.name, + [GROUP]: this + }; + this.inputs = []; + const seenInputs = {}; + const seenOutputs = {}; + for (let i = 0; i < this.nodeData.nodes.length; i++) { + const node = this.nodeData.nodes[i]; + node.index = i; + this.processNode(node, seenInputs, seenOutputs); + } + for (const p of this.#convertedToProcess) { + p(); + } + this.#convertedToProcess = null; + await app.registerNodeDef(`${PREFIX}${SEPARATOR}` + this.name, this.nodeDef); + useNodeDefStore().addNodeDef(this.nodeDef); + } + getLinks() { + this.linksFrom = {}; + this.linksTo = {}; + this.externalFrom = {}; + for (const l of this.nodeData.links) { + const [sourceNodeId, sourceNodeSlot, targetNodeId, targetNodeSlot] = l; + if (sourceNodeId == null) continue; + if (!this.linksFrom[sourceNodeId]) { + this.linksFrom[sourceNodeId] = {}; + } + if (!this.linksFrom[sourceNodeId][sourceNodeSlot]) { + this.linksFrom[sourceNodeId][sourceNodeSlot] = []; + } + this.linksFrom[sourceNodeId][sourceNodeSlot].push(l); + if (!this.linksTo[targetNodeId]) { + this.linksTo[targetNodeId] = {}; + } + this.linksTo[targetNodeId][targetNodeSlot] = l; + } + if (this.nodeData.external) { + for (const ext2 of this.nodeData.external) { + if (!this.externalFrom[ext2[0]]) { + this.externalFrom[ext2[0]] = { [ext2[1]]: ext2[2] }; + } else { + this.externalFrom[ext2[0]][ext2[1]] = ext2[2]; + } + } + } + } + processNode(node, seenInputs, seenOutputs) { + const def = this.getNodeDef(node); + if (!def) return; + const inputs = { ...def.input?.required, ...def.input?.optional }; + this.inputs.push(this.processNodeInputs(node, seenInputs, inputs)); + if (def.output?.length) this.processNodeOutputs(node, seenOutputs, def); + } + getNodeDef(node) { + const def = globalDefs[node.type]; + if (def) return def; + const linksFrom = this.linksFrom[node.index]; + if (node.type === "PrimitiveNode") { + if (!linksFrom) return; + let type = linksFrom["0"][0][5]; + if (type === "COMBO") { + const source = node.outputs[0].widget.name; + const fromTypeName = this.nodeData.nodes[linksFrom["0"][0][2]].type; + const fromType = globalDefs[fromTypeName]; + const input = fromType.input.required[source] ?? fromType.input.optional[source]; + type = input[0]; + } + const def2 = this.primitiveDefs[node.index] = { + input: { + required: { + value: [type, {}] + } + }, + output: [type], + output_name: [], + output_is_list: [] + }; + return def2; + } else if (node.type === "Reroute") { + const linksTo = this.linksTo[node.index]; + if (linksTo && linksFrom && !this.externalFrom[node.index]?.[0]) { + return null; + } + let config = {}; + let rerouteType = "*"; + if (linksFrom) { + for (const [, , id2, slot] of linksFrom["0"]) { + const node2 = this.nodeData.nodes[id2]; + const input = node2.inputs[slot]; + if (rerouteType === "*") { + rerouteType = input.type; + } + if (input.widget) { + const targetDef = globalDefs[node2.type]; + const targetWidget = targetDef.input.required[input.widget.name] ?? targetDef.input.optional[input.widget.name]; + const widget = [targetWidget[0], config]; + const res = mergeIfValid( + { + widget + }, + targetWidget, + false, + null, + widget + ); + config = res?.customConfig ?? config; + } + } + } else if (linksTo) { + const [id2, slot] = linksTo["0"]; + rerouteType = this.nodeData.nodes[id2].outputs[slot].type; + } else { + for (const l of this.nodeData.links) { + if (l[2] === node.index) { + rerouteType = l[5]; + break; + } + } + if (rerouteType === "*") { + const t2 = this.externalFrom[node.index]?.[0]; + if (t2) { + rerouteType = t2; + } + } + } + config.forceInput = true; + return { + input: { + required: { + [rerouteType]: [rerouteType, config] + } + }, + output: [rerouteType], + output_name: [], + output_is_list: [] + }; + } + console.warn( + "Skipping virtual node " + node.type + " when building group node " + this.name + ); + } + getInputConfig(node, inputName, seenInputs, config, extra) { + const customConfig = this.nodeData.config?.[node.index]?.input?.[inputName]; + let name = customConfig?.name ?? node.inputs?.find((inp) => inp.name === inputName)?.label ?? inputName; + let key = name; + let prefix = ""; + if (node.type === "PrimitiveNode" && node.title || name in seenInputs) { + prefix = `${node.title ?? node.type} `; + key = name = `${prefix}${inputName}`; + if (name in seenInputs) { + name = `${prefix}${seenInputs[name]} ${inputName}`; + } + } + seenInputs[key] = (seenInputs[key] ?? 1) + 1; + if (inputName === "seed" || inputName === "noise_seed") { + if (!extra) extra = {}; + extra.control_after_generate = `${prefix}control_after_generate`; + } + if (config[0] === "IMAGEUPLOAD") { + if (!extra) extra = {}; + extra.widget = this.oldToNewWidgetMap[node.index]?.[config[1]?.widget ?? "image"] ?? "image"; + } + if (extra) { + config = [config[0], { ...config[1], ...extra }]; + } + return { name, config, customConfig }; + } + processWidgetInputs(inputs, node, inputNames, seenInputs) { + const slots = []; + const converted = /* @__PURE__ */ new Map(); + const widgetMap = this.oldToNewWidgetMap[node.index] = {}; + for (const inputName of inputNames) { + let widgetType = app.getWidgetType(inputs[inputName], inputName); + if (widgetType) { + const convertedIndex = node.inputs?.findIndex( + (inp) => inp.name === inputName && inp.widget?.name === inputName + ); + if (convertedIndex > -1) { + converted.set(convertedIndex, inputName); + widgetMap[inputName] = null; + } else { + const { name, config } = this.getInputConfig( + node, + inputName, + seenInputs, + inputs[inputName] + ); + this.nodeDef.input.required[name] = config; + widgetMap[inputName] = name; + this.newToOldWidgetMap[name] = { node, inputName }; + } + } else { + slots.push(inputName); + } + } + return { converted, slots }; + } + checkPrimitiveConnection(link, inputName, inputs) { + const sourceNode = this.nodeData.nodes[link[0]]; + if (sourceNode.type === "PrimitiveNode") { + const [sourceNodeId, _, targetNodeId, __] = link; + const primitiveDef = this.primitiveDefs[sourceNodeId]; + const targetWidget = inputs[inputName]; + const primitiveConfig = primitiveDef.input.required.value; + const output = { widget: primitiveConfig }; + const config = mergeIfValid( + output, + targetWidget, + false, + null, + primitiveConfig + ); + primitiveConfig[1] = config?.customConfig ?? inputs[inputName][1] ? { ...inputs[inputName][1] } : {}; + let name = this.oldToNewWidgetMap[sourceNodeId]["value"]; + name = name.substr(0, name.length - 6); + primitiveConfig[1].control_after_generate = true; + primitiveConfig[1].control_prefix = name; + let toPrimitive = this.widgetToPrimitive[targetNodeId]; + if (!toPrimitive) { + toPrimitive = this.widgetToPrimitive[targetNodeId] = {}; + } + if (toPrimitive[inputName]) { + toPrimitive[inputName].push(sourceNodeId); + } + toPrimitive[inputName] = sourceNodeId; + let toWidget = this.primitiveToWidget[sourceNodeId]; + if (!toWidget) { + toWidget = this.primitiveToWidget[sourceNodeId] = []; + } + toWidget.push({ nodeId: targetNodeId, inputName }); + } + } + processInputSlots(inputs, node, slots, linksTo, inputMap, seenInputs) { + this.nodeInputs[node.index] = {}; + for (let i = 0; i < slots.length; i++) { + const inputName = slots[i]; + if (linksTo[i]) { + this.checkPrimitiveConnection(linksTo[i], inputName, inputs); + continue; + } + const { name, config, customConfig } = this.getInputConfig( + node, + inputName, + seenInputs, + inputs[inputName] + ); + this.nodeInputs[node.index][inputName] = name; + if (customConfig?.visible === false) continue; + this.nodeDef.input.required[name] = config; + inputMap[i] = this.inputCount++; + } + } + processConvertedWidgets(inputs, node, slots, converted, linksTo, inputMap, seenInputs) { + const convertedSlots = [...converted.keys()].sort().map((k) => converted.get(k)); + for (let i = 0; i < convertedSlots.length; i++) { + const inputName = convertedSlots[i]; + if (linksTo[slots.length + i]) { + this.checkPrimitiveConnection( + linksTo[slots.length + i], + inputName, + inputs + ); + continue; + } + const { name, config } = this.getInputConfig( + node, + inputName, + seenInputs, + inputs[inputName], + { + defaultInput: true + } + ); + this.nodeDef.input.required[name] = config; + this.newToOldWidgetMap[name] = { node, inputName }; + if (!this.oldToNewWidgetMap[node.index]) { + this.oldToNewWidgetMap[node.index] = {}; + } + this.oldToNewWidgetMap[node.index][inputName] = name; + inputMap[slots.length + i] = this.inputCount++; + } + } + #convertedToProcess = []; + processNodeInputs(node, seenInputs, inputs) { + const inputMapping = []; + const inputNames = Object.keys(inputs); + if (!inputNames.length) return; + const { converted, slots } = this.processWidgetInputs( + inputs, + node, + inputNames, + seenInputs + ); + const linksTo = this.linksTo[node.index] ?? {}; + const inputMap = this.oldToNewInputMap[node.index] = {}; + this.processInputSlots(inputs, node, slots, linksTo, inputMap, seenInputs); + this.#convertedToProcess.push( + () => this.processConvertedWidgets( + inputs, + node, + slots, + converted, + linksTo, + inputMap, + seenInputs + ) + ); + return inputMapping; + } + processNodeOutputs(node, seenOutputs, def) { + const oldToNew = this.oldToNewOutputMap[node.index] = {}; + for (let outputId = 0; outputId < def.output.length; outputId++) { + const linksFrom = this.linksFrom[node.index]; + const hasLink = linksFrom?.[outputId] && !this.externalFrom[node.index]?.[outputId]; + const customConfig = this.nodeData.config?.[node.index]?.output?.[outputId]; + const visible = customConfig?.visible ?? !hasLink; + this.outputVisibility.push(visible); + if (!visible) { + continue; + } + oldToNew[outputId] = this.nodeDef.output.length; + this.newToOldOutputMap[this.nodeDef.output.length] = { + node, + slot: outputId + }; + this.nodeDef.output.push(def.output[outputId]); + this.nodeDef.output_is_list.push(def.output_is_list[outputId]); + let label = customConfig?.name; + if (!label) { + label = def.output_name?.[outputId] ?? def.output[outputId]; + const output = node.outputs.find((o) => o.name === label); + if (output?.label) { + label = output.label; + } + } + let name = label; + if (name in seenOutputs) { + const prefix = `${node.title ?? node.type} `; + name = `${prefix}${label}`; + if (name in seenOutputs) { + name = `${prefix}${node.index} ${label}`; + } + } + seenOutputs[name] = 1; + this.nodeDef.output_name.push(name); + } + } + static async registerFromWorkflow(groupNodes, missingNodeTypes) { + for (const g in groupNodes) { + const groupData = groupNodes[g]; + let hasMissing = false; + for (const n of groupData.nodes) { + if (!(n.type in LiteGraph.registered_node_types)) { + missingNodeTypes.push({ + type: n.type, + hint: ` (In group node '${PREFIX}${SEPARATOR}${g}')` + }); + missingNodeTypes.push({ + type: `${PREFIX}${SEPARATOR}` + g, + action: { + text: "Remove from workflow", + callback: /* @__PURE__ */ __name((e) => { + delete groupNodes[g]; + e.target.textContent = "Removed"; + e.target.style.pointerEvents = "none"; + e.target.style.opacity = 0.7; + }, "callback") + } + }); + hasMissing = true; + } + } + if (hasMissing) continue; + const config = new GroupNodeConfig(g, groupData); + await config.registerType(); + } + } +} +class GroupNodeHandler { + static { + __name(this, "GroupNodeHandler"); + } + node; + groupData; + innerNodes; + constructor(node) { + this.node = node; + this.groupData = node.constructor?.nodeData?.[GROUP]; + this.node.setInnerNodes = (innerNodes) => { + this.innerNodes = innerNodes; + for (let innerNodeIndex = 0; innerNodeIndex < this.innerNodes.length; innerNodeIndex++) { + const innerNode = this.innerNodes[innerNodeIndex]; + for (const w of innerNode.widgets ?? []) { + if (w.type === "converted-widget") { + w.serializeValue = w.origSerializeValue; + } + } + innerNode.index = innerNodeIndex; + innerNode.getInputNode = (slot) => { + const externalSlot = this.groupData.oldToNewInputMap[innerNode.index]?.[slot]; + if (externalSlot != null) { + return this.node.getInputNode(externalSlot); + } + const innerLink = this.groupData.linksTo[innerNode.index]?.[slot]; + if (!innerLink) return null; + const inputNode = innerNodes[innerLink[0]]; + if (inputNode.type === "PrimitiveNode") return null; + return inputNode; + }; + innerNode.getInputLink = (slot) => { + const externalSlot = this.groupData.oldToNewInputMap[innerNode.index]?.[slot]; + if (externalSlot != null) { + const linkId = this.node.inputs[externalSlot].link; + let link2 = app.graph.links[linkId]; + link2 = { + ...link2, + target_id: innerNode.id, + target_slot: +slot + }; + return link2; + } + let link = this.groupData.linksTo[innerNode.index]?.[slot]; + if (!link) return null; + link = { + origin_id: innerNodes[link[0]].id, + origin_slot: link[1], + target_id: innerNode.id, + target_slot: +slot + }; + return link; + }; + } + }; + this.node.updateLink = (link) => { + link = { ...link }; + const output = this.groupData.newToOldOutputMap[link.origin_slot]; + let innerNode = this.innerNodes[output.node.index]; + let l; + while (innerNode?.type === "Reroute") { + l = innerNode.getInputLink(0); + innerNode = innerNode.getInputNode(0); + } + if (!innerNode) { + return null; + } + if (l && GroupNodeHandler.isGroupNode(innerNode)) { + return innerNode.updateLink(l); + } + link.origin_id = innerNode.id; + link.origin_slot = l?.origin_slot ?? output.slot; + return link; + }; + this.node.getInnerNodes = () => { + if (!this.innerNodes) { + this.node.setInnerNodes( + this.groupData.nodeData.nodes.map((n, i) => { + const innerNode = LiteGraph.createNode(n.type); + innerNode.configure(n); + innerNode.id = `${this.node.id}:${i}`; + return innerNode; + }) + ); + } + this.updateInnerWidgets(); + return this.innerNodes; + }; + this.node.recreate = async () => { + const id2 = this.node.id; + const sz = this.node.size; + const nodes = this.node.convertToNodes(); + const groupNode = LiteGraph.createNode(this.node.type); + groupNode.id = id2; + groupNode.setInnerNodes(nodes); + groupNode[GROUP].populateWidgets(); + app.graph.add(groupNode); + groupNode.size = [ + Math.max(groupNode.size[0], sz[0]), + Math.max(groupNode.size[1], sz[1]) + ]; + const builder = new GroupNodeBuilder(nodes); + const nodeData = builder.getNodeData(); + groupNode[GROUP].groupData.nodeData.links = nodeData.links; + groupNode[GROUP].replaceNodes(nodes); + return groupNode; + }; + this.node.convertToNodes = () => { + const addInnerNodes = /* @__PURE__ */ __name(() => { + const c = { ...this.groupData.nodeData }; + c.nodes = [...c.nodes]; + const innerNodes = this.node.getInnerNodes(); + let ids = []; + for (let i = 0; i < c.nodes.length; i++) { + let id2 = innerNodes?.[i]?.id; + if (id2 == null || isNaN(id2)) { + id2 = void 0; + } else { + ids.push(id2); + } + c.nodes[i] = { ...c.nodes[i], id: id2 }; + } + deserialiseAndCreate(JSON.stringify(c), app.canvas); + const [x, y] = this.node.pos; + let top; + let left; + const selectedIds = ids.length ? ids : Object.keys(app.canvas.selected_nodes); + const newNodes = []; + for (let i = 0; i < selectedIds.length; i++) { + const id2 = selectedIds[i]; + const newNode = app.graph.getNodeById(id2); + const innerNode = innerNodes[i]; + newNodes.push(newNode); + if (left == null || newNode.pos[0] < left) { + left = newNode.pos[0]; + } + if (top == null || newNode.pos[1] < top) { + top = newNode.pos[1]; + } + if (!newNode.widgets) continue; + const map = this.groupData.oldToNewWidgetMap[innerNode.index]; + if (map) { + const widgets = Object.keys(map); + for (const oldName of widgets) { + const newName = map[oldName]; + if (!newName) continue; + const widgetIndex = this.node.widgets.findIndex( + (w) => w.name === newName + ); + if (widgetIndex === -1) continue; + if (innerNode.type === "PrimitiveNode") { + for (let i2 = 0; i2 < newNode.widgets.length; i2++) { + newNode.widgets[i2].value = this.node.widgets[widgetIndex + i2].value; + } + } else { + const outerWidget = this.node.widgets[widgetIndex]; + const newWidget = newNode.widgets.find( + (w) => w.name === oldName + ); + if (!newWidget) continue; + newWidget.value = outerWidget.value; + for (let w = 0; w < outerWidget.linkedWidgets?.length; w++) { + newWidget.linkedWidgets[w].value = outerWidget.linkedWidgets[w].value; + } + } + } + } + } + for (const newNode of newNodes) { + newNode.pos[0] -= left - x; + newNode.pos[1] -= top - y; + } + return { newNodes, selectedIds }; + }, "addInnerNodes"); + const reconnectInputs = /* @__PURE__ */ __name((selectedIds) => { + for (const innerNodeIndex in this.groupData.oldToNewInputMap) { + const id2 = selectedIds[innerNodeIndex]; + const newNode = app.graph.getNodeById(id2); + const map = this.groupData.oldToNewInputMap[innerNodeIndex]; + for (const innerInputId in map) { + const groupSlotId = map[innerInputId]; + if (groupSlotId == null) continue; + const slot = node.inputs[groupSlotId]; + if (slot.link == null) continue; + const link = app.graph.links[slot.link]; + if (!link) continue; + const originNode = app.graph.getNodeById(link.origin_id); + originNode.connect(link.origin_slot, newNode, +innerInputId); + } + } + }, "reconnectInputs"); + const reconnectOutputs = /* @__PURE__ */ __name((selectedIds) => { + for (let groupOutputId = 0; groupOutputId < node.outputs?.length; groupOutputId++) { + const output = node.outputs[groupOutputId]; + if (!output.links) continue; + const links = [...output.links]; + for (const l of links) { + const slot = this.groupData.newToOldOutputMap[groupOutputId]; + const link = app.graph.links[l]; + const targetNode = app.graph.getNodeById(link.target_id); + const newNode = app.graph.getNodeById(selectedIds[slot.node.index]); + newNode.connect(slot.slot, targetNode, link.target_slot); + } + } + }, "reconnectOutputs"); + app.canvas.emitBeforeChange(); + try { + const { newNodes, selectedIds } = addInnerNodes(); + reconnectInputs(selectedIds); + reconnectOutputs(selectedIds); + app.graph.remove(this.node); + return newNodes; + } finally { + app.canvas.emitAfterChange(); + } + }; + const getExtraMenuOptions = this.node.getExtraMenuOptions; + this.node.getExtraMenuOptions = function(_, options) { + getExtraMenuOptions?.apply(this, arguments); + let optionIndex = options.findIndex((o) => o.content === "Outputs"); + if (optionIndex === -1) optionIndex = options.length; + else optionIndex++; + options.splice( + optionIndex, + 0, + null, + { + content: "Convert to nodes", + // @ts-expect-error + callback: /* @__PURE__ */ __name(() => { + return this.convertToNodes(); + }, "callback") + }, + { + content: "Manage Group Node", + callback: /* @__PURE__ */ __name(() => manageGroupNodes(this.type), "callback") + } + ); + }; + const onDrawTitleBox = this.node.onDrawTitleBox; + this.node.onDrawTitleBox = function(ctx, height, size, scale) { + onDrawTitleBox?.apply(this, arguments); + const fill2 = ctx.fillStyle; + ctx.beginPath(); + ctx.rect(11, -height + 11, 2, 2); + ctx.rect(14, -height + 11, 2, 2); + ctx.rect(17, -height + 11, 2, 2); + ctx.rect(11, -height + 14, 2, 2); + ctx.rect(14, -height + 14, 2, 2); + ctx.rect(17, -height + 14, 2, 2); + ctx.rect(11, -height + 17, 2, 2); + ctx.rect(14, -height + 17, 2, 2); + ctx.rect(17, -height + 17, 2, 2); + ctx.fillStyle = this.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; + ctx.fill(); + ctx.fillStyle = fill2; + }; + const onDrawForeground = node.onDrawForeground; + const groupData = this.groupData.nodeData; + node.onDrawForeground = function(ctx) { + const r = onDrawForeground?.apply?.(this, arguments); + if (+app.runningNodeId === this.id && this.runningInternalNodeId !== null) { + const n = groupData.nodes[this.runningInternalNodeId]; + if (!n) return; + const message = `Running ${n.title || n.type} (${this.runningInternalNodeId}/${groupData.nodes.length})`; + ctx.save(); + ctx.font = "12px sans-serif"; + const sz = ctx.measureText(message); + ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; + ctx.beginPath(); + ctx.roundRect( + 0, + -LiteGraph.NODE_TITLE_HEIGHT - 20, + sz.width + 12, + 20, + 5 + ); + ctx.fill(); + ctx.fillStyle = "#fff"; + ctx.fillText(message, 6, -LiteGraph.NODE_TITLE_HEIGHT - 6); + ctx.restore(); + } + }; + const onExecutionStart = this.node.onExecutionStart; + this.node.onExecutionStart = function() { + this.resetExecution = true; + return onExecutionStart?.apply(this, arguments); + }; + const self2 = this; + const onNodeCreated = this.node.onNodeCreated; + this.node.onNodeCreated = function() { + if (!this.widgets) { + return; + } + const config = self2.groupData.nodeData.config; + if (config) { + for (const n in config) { + const inputs = config[n]?.input; + for (const w in inputs) { + if (inputs[w].visible !== false) continue; + const widgetName = self2.groupData.oldToNewWidgetMap[n][w]; + const widget = this.widgets.find((w2) => w2.name === widgetName); + if (widget) { + widget.type = "hidden"; + widget.computeSize = () => [0, -4]; + } + } + } + } + return onNodeCreated?.apply(this, arguments); + }; + function handleEvent(type, getId, getEvent) { + const handler = /* @__PURE__ */ __name(({ detail }) => { + const id2 = getId(detail); + if (!id2) return; + const node2 = app.graph.getNodeById(id2); + if (node2) return; + const innerNodeIndex = this.innerNodes?.findIndex((n) => n.id == id2); + if (innerNodeIndex > -1) { + this.node.runningInternalNodeId = innerNodeIndex; + api.dispatchCustomEvent( + type, + getEvent(detail, `${this.node.id}`, this.node) + ); + } + }, "handler"); + api.addEventListener(type, handler); + return handler; + } + __name(handleEvent, "handleEvent"); + const executing = handleEvent.call( + this, + "executing", + (d) => d, + (d, id2, node2) => id2 + ); + const executed = handleEvent.call( + this, + "executed", + (d) => d?.display_node || d?.node, + (d, id2, node2) => ({ + ...d, + node: id2, + display_node: id2, + merge: !node2.resetExecution + }) + ); + const onRemoved = node.onRemoved; + this.node.onRemoved = function() { + onRemoved?.apply(this, arguments); + api.removeEventListener("executing", executing); + api.removeEventListener("executed", executed); + }; + this.node.refreshComboInNode = (defs) => { + for (const widgetName in this.groupData.newToOldWidgetMap) { + const widget = this.node.widgets.find((w) => w.name === widgetName); + if (widget?.type === "combo") { + const old = this.groupData.newToOldWidgetMap[widgetName]; + const def = defs[old.node.type]; + const input = def?.input?.required?.[old.inputName] ?? def?.input?.optional?.[old.inputName]; + if (!input) continue; + widget.options.values = input[0]; + if (old.inputName !== "image" && // @ts-expect-error Widget values + !widget.options.values.includes(widget.value)) { + widget.value = widget.options.values[0]; + widget.callback(widget.value); + } + } + } + }; + } + updateInnerWidgets() { + for (const newWidgetName in this.groupData.newToOldWidgetMap) { + const newWidget = this.node.widgets.find((w) => w.name === newWidgetName); + if (!newWidget) continue; + const newValue = newWidget.value; + const old = this.groupData.newToOldWidgetMap[newWidgetName]; + let innerNode = this.innerNodes[old.node.index]; + if (innerNode.type === "PrimitiveNode") { + innerNode.primitiveValue = newValue; + const primitiveLinked = this.groupData.primitiveToWidget[old.node.index]; + for (const linked of primitiveLinked ?? []) { + const node = this.innerNodes[linked.nodeId]; + const widget2 = node.widgets.find((w) => w.name === linked.inputName); + if (widget2) { + widget2.value = newValue; + } + } + continue; + } else if (innerNode.type === "Reroute") { + const rerouteLinks = this.groupData.linksFrom[old.node.index]; + if (rerouteLinks) { + for (const [_, , targetNodeId, targetSlot] of rerouteLinks["0"]) { + const node = this.innerNodes[targetNodeId]; + const input = node.inputs[targetSlot]; + if (input.widget) { + const widget2 = node.widgets?.find( + (w) => w.name === input.widget.name + ); + if (widget2) { + widget2.value = newValue; + } + } + } + } + } + const widget = innerNode.widgets?.find((w) => w.name === old.inputName); + if (widget) { + widget.value = newValue; + } + } + } + populatePrimitive(node, nodeId, oldName, i, linkedShift) { + const primitiveId = this.groupData.widgetToPrimitive[nodeId]?.[oldName]; + if (primitiveId == null) return; + const targetWidgetName = this.groupData.oldToNewWidgetMap[primitiveId]["value"]; + const targetWidgetIndex = this.node.widgets.findIndex( + (w) => w.name === targetWidgetName + ); + if (targetWidgetIndex > -1) { + const primitiveNode = this.innerNodes[primitiveId]; + let len = primitiveNode.widgets.length; + if (len - 1 !== this.node.widgets[targetWidgetIndex].linkedWidgets?.length) { + len = 1; + } + for (let i2 = 0; i2 < len; i2++) { + this.node.widgets[targetWidgetIndex + i2].value = primitiveNode.widgets[i2].value; + } + } + return true; + } + populateReroute(node, nodeId, map) { + if (node.type !== "Reroute") return; + const link = this.groupData.linksFrom[nodeId]?.[0]?.[0]; + if (!link) return; + const [, , targetNodeId, targetNodeSlot] = link; + const targetNode = this.groupData.nodeData.nodes[targetNodeId]; + const inputs = targetNode.inputs; + const targetWidget = inputs?.[targetNodeSlot]?.widget; + if (!targetWidget) return; + const offset = inputs.length - (targetNode.widgets_values?.length ?? 0); + const v = targetNode.widgets_values?.[targetNodeSlot - offset]; + if (v == null) return; + const widgetName = Object.values(map)[0]; + const widget = this.node.widgets.find((w) => w.name === widgetName); + if (widget) { + widget.value = v; + } + } + populateWidgets() { + if (!this.node.widgets) return; + for (let nodeId = 0; nodeId < this.groupData.nodeData.nodes.length; nodeId++) { + const node = this.groupData.nodeData.nodes[nodeId]; + const map = this.groupData.oldToNewWidgetMap[nodeId] ?? {}; + const widgets = Object.keys(map); + if (!node.widgets_values?.length) { + this.populateReroute(node, nodeId, map); + continue; + } + let linkedShift = 0; + for (let i = 0; i < widgets.length; i++) { + const oldName = widgets[i]; + const newName = map[oldName]; + const widgetIndex = this.node.widgets.findIndex( + (w) => w.name === newName + ); + const mainWidget = this.node.widgets[widgetIndex]; + if (this.populatePrimitive(node, nodeId, oldName, i, linkedShift) || widgetIndex === -1) { + const innerWidget = this.innerNodes[nodeId].widgets?.find( + (w) => w.name === oldName + ); + linkedShift += innerWidget?.linkedWidgets?.length ?? 0; + } + if (widgetIndex === -1) { + continue; + } + mainWidget.value = node.widgets_values[i + linkedShift]; + for (let w = 0; w < mainWidget.linkedWidgets?.length; w++) { + this.node.widgets[widgetIndex + w + 1].value = node.widgets_values[i + ++linkedShift]; + } + } + } + } + replaceNodes(nodes) { + let top; + let left; + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (left == null || node.pos[0] < left) { + left = node.pos[0]; + } + if (top == null || node.pos[1] < top) { + top = node.pos[1]; + } + this.linkOutputs(node, i); + app.graph.remove(node); + } + this.linkInputs(); + this.node.pos = [left, top]; + } + linkOutputs(originalNode, nodeId) { + if (!originalNode.outputs) return; + for (const output of originalNode.outputs) { + if (!output.links) continue; + const links = [...output.links]; + for (const l of links) { + const link = app.graph.links[l]; + if (!link) continue; + const targetNode = app.graph.getNodeById(link.target_id); + const newSlot = this.groupData.oldToNewOutputMap[nodeId]?.[link.origin_slot]; + if (newSlot != null) { + this.node.connect(newSlot, targetNode, link.target_slot); + } + } + } + } + linkInputs() { + for (const link of this.groupData.nodeData.links ?? []) { + const [, originSlot, targetId, targetSlot, actualOriginId] = link; + const originNode = app.graph.getNodeById(actualOriginId); + if (!originNode) continue; + originNode.connect( + originSlot, + // @ts-expect-error Valid - uses deprecated interface. Required check: if (graph.getNodeById(this.node.id) !== this.node) report() + this.node.id, + this.groupData.oldToNewInputMap[targetId][targetSlot] + ); + } + } + static getGroupData(node) { + return (node.nodeData ?? node.constructor?.nodeData)?.[GROUP]; + } + static isGroupNode(node) { + return !!node.constructor?.nodeData?.[GROUP]; + } + static async fromNodes(nodes) { + const builder = new GroupNodeBuilder(nodes); + const res = await builder.build(); + if (!res) return; + const { name, nodeData } = res; + const config = new GroupNodeConfig(name, nodeData); + await config.registerType(); + const groupNode = LiteGraph.createNode(`${PREFIX}${SEPARATOR}${name}`); + groupNode.setInnerNodes(builder.nodes); + groupNode[GROUP].populateWidgets(); + app.graph.add(groupNode); + groupNode[GROUP].replaceNodes(builder.nodes); + return groupNode; + } +} +function addConvertToGroupOptions() { + function addConvertOption(options, index) { + const selected = Object.values(app.canvas.selected_nodes ?? {}); + const disabled = selected.length < 2 || selected.find((n) => GroupNodeHandler.isGroupNode(n)); + options.splice(index + 1, null, { + content: `Convert to Group Node`, + disabled, + callback: convertSelectedNodesToGroupNode + }); + } + __name(addConvertOption, "addConvertOption"); + function addManageOption(options, index) { + const groups = app.graph.extra?.groupNodes; + const disabled = !groups || !Object.keys(groups).length; + options.splice(index + 1, null, { + content: `Manage Group Nodes`, + disabled, + callback: manageGroupNodes + }); + } + __name(addManageOption, "addManageOption"); + const getCanvasMenuOptions = LGraphCanvas.prototype.getCanvasMenuOptions; + LGraphCanvas.prototype.getCanvasMenuOptions = function() { + const options = getCanvasMenuOptions.apply(this, arguments); + const index = options.findIndex((o) => o?.content === "Add Group") + 1 || options.length; + addConvertOption(options, index); + addManageOption(options, index + 1); + return options; + }; + const getNodeMenuOptions = LGraphCanvas.prototype.getNodeMenuOptions; + LGraphCanvas.prototype.getNodeMenuOptions = function(node) { + const options = getNodeMenuOptions.apply(this, arguments); + if (!GroupNodeHandler.isGroupNode(node)) { + const index = options.findIndex((o) => o?.content === "Outputs") + 1 || options.length - 1; + addConvertOption(options, index); + } + return options; + }; +} +__name(addConvertToGroupOptions, "addConvertToGroupOptions"); +const replaceLegacySeparators = /* @__PURE__ */ __name((nodes) => { + for (const node of nodes) { + if (typeof node.type === "string" && node.type.startsWith("workflow/")) { + node.type = node.type.replace(/^workflow\//, `${PREFIX}${SEPARATOR}`); + } + } +}, "replaceLegacySeparators"); +async function convertSelectedNodesToGroupNode() { + const nodes = Object.values(app.canvas.selected_nodes ?? {}); + if (nodes.length === 0) { + throw new Error("No nodes selected"); + } + if (nodes.length === 1) { + throw new Error("Please select multiple nodes to convert to group node"); + } + if (nodes.some((n) => GroupNodeHandler.isGroupNode(n))) { + throw new Error("Selected nodes contain a group node"); + } + return await GroupNodeHandler.fromNodes(nodes); +} +__name(convertSelectedNodesToGroupNode, "convertSelectedNodesToGroupNode"); +function ungroupSelectedGroupNodes() { + const nodes = Object.values(app.canvas.selected_nodes ?? {}); + for (const node of nodes) { + if (GroupNodeHandler.isGroupNode(node)) { + node.convertToNodes?.(); + } + } +} +__name(ungroupSelectedGroupNodes, "ungroupSelectedGroupNodes"); +function manageGroupNodes(type) { + new ManageGroupDialog(app).show(type); +} +__name(manageGroupNodes, "manageGroupNodes"); +const id$2 = "Comfy.GroupNode"; +let globalDefs; +const ext = { + name: id$2, + commands: [ + { + id: "Comfy.GroupNode.ConvertSelectedNodesToGroupNode", + label: "Convert selected nodes to group node", + icon: "pi pi-sitemap", + versionAdded: "1.3.17", + function: convertSelectedNodesToGroupNode + }, + { + id: "Comfy.GroupNode.UngroupSelectedGroupNodes", + label: "Ungroup selected group nodes", + icon: "pi pi-sitemap", + versionAdded: "1.3.17", + function: ungroupSelectedGroupNodes + }, + { + id: "Comfy.GroupNode.ManageGroupNodes", + label: "Manage group nodes", + icon: "pi pi-cog", + versionAdded: "1.3.17", + function: manageGroupNodes + } + ], + keybindings: [ + { + commandId: "Comfy.GroupNode.ConvertSelectedNodesToGroupNode", + combo: { + alt: true, + key: "g" + } + }, + { + commandId: "Comfy.GroupNode.UngroupSelectedGroupNodes", + combo: { + alt: true, + shift: true, + key: "G" + } + } + ], + setup() { + addConvertToGroupOptions(); + }, + async beforeConfigureGraph(graphData, missingNodeTypes) { + const nodes = graphData?.extra?.groupNodes; + if (nodes) { + replaceLegacySeparators(graphData.nodes); + await GroupNodeConfig.registerFromWorkflow(nodes, missingNodeTypes); + } + }, + addCustomNodeDefs(defs) { + globalDefs = defs; + }, + nodeCreated(node) { + if (GroupNodeHandler.isGroupNode(node)) { + node[GROUP] = new GroupNodeHandler(node); + if (node.title && node[GROUP]?.groupData?.nodeData) { + Workflow.storeGroupNode(node.title, node[GROUP].groupData.nodeData); + } + } + }, + async refreshComboInNodes(defs) { + Object.assign(globalDefs, defs); + const nodes = app.graph.extra?.groupNodes; + if (nodes) { + await GroupNodeConfig.registerFromWorkflow(nodes, {}); + } + } +}; +app.registerExtension(ext); +window.comfyAPI = window.comfyAPI || {}; +window.comfyAPI.groupNode = window.comfyAPI.groupNode || {}; +window.comfyAPI.groupNode.GroupNodeConfig = GroupNodeConfig; +window.comfyAPI.groupNode.GroupNodeHandler = GroupNodeHandler; +function setNodeMode(node, mode) { + node.mode = mode; + node.graph?.change(); +} +__name(setNodeMode, "setNodeMode"); +function addNodesToGroup(group, items) { + const padding = useSettingStore().get("Comfy.GroupSelectedNodes.Padding"); + group.resizeTo([...group.children, ...items], padding); +} +__name(addNodesToGroup, "addNodesToGroup"); +app.registerExtension({ + name: "Comfy.GroupOptions", + setup() { + const orig = LGraphCanvas.prototype.getCanvasMenuOptions; + LGraphCanvas.prototype.getCanvasMenuOptions = function() { + const options = orig.apply(this, arguments); + const group = this.graph.getGroupOnPos( + this.graph_mouse[0], + this.graph_mouse[1] + ); + if (!group) { + options.push({ + content: "Add Group For Selected Nodes", + disabled: !this.selectedItems?.size, + callback: /* @__PURE__ */ __name(() => { + const group2 = new LGraphGroup(); + addNodesToGroup(group2, this.selectedItems); + this.graph.add(group2); + this.graph.change(); + }, "callback") + }); + return options; + } + group.recomputeInsideNodes(); + const nodesInGroup = group.nodes; + options.push({ + content: "Add Selected Nodes To Group", + disabled: !this.selectedItems?.size, + callback: /* @__PURE__ */ __name(() => { + addNodesToGroup(group, this.selectedItems); + this.graph.change(); + }, "callback") + }); + if (nodesInGroup.length === 0) { + return options; + } else { + options.push(null); + } + let allNodesAreSameMode = true; + for (let i = 1; i < nodesInGroup.length; i++) { + if (nodesInGroup[i].mode !== nodesInGroup[0].mode) { + allNodesAreSameMode = false; + break; + } + } + options.push({ + content: "Fit Group To Nodes", + callback: /* @__PURE__ */ __name(() => { + group.recomputeInsideNodes(); + const padding = useSettingStore().get( + "Comfy.GroupSelectedNodes.Padding" + ); + group.resizeTo(group.children, padding); + this.graph.change(); + }, "callback") + }); + options.push({ + content: "Select Nodes", + callback: /* @__PURE__ */ __name(() => { + this.selectNodes(nodesInGroup); + this.graph.change(); + this.canvas.focus(); + }, "callback") + }); + if (allNodesAreSameMode) { + const mode = nodesInGroup[0].mode; + switch (mode) { + case 0: + options.push({ + content: "Set Group Nodes to Never", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 2); + } + }, "callback") + }); + options.push({ + content: "Bypass Group Nodes", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 4); + } + }, "callback") + }); + break; + case 2: + options.push({ + content: "Set Group Nodes to Always", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 0); + } + }, "callback") + }); + options.push({ + content: "Bypass Group Nodes", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 4); + } + }, "callback") + }); + break; + case 4: + options.push({ + content: "Set Group Nodes to Always", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 0); + } + }, "callback") + }); + options.push({ + content: "Set Group Nodes to Never", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 2); + } + }, "callback") + }); + break; + default: + options.push({ + content: "Set Group Nodes to Always", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 0); + } + }, "callback") + }); + options.push({ + content: "Set Group Nodes to Never", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 2); + } + }, "callback") + }); + options.push({ + content: "Bypass Group Nodes", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 4); + } + }, "callback") + }); + break; + } + } else { + options.push({ + content: "Set Group Nodes to Always", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 0); + } + }, "callback") + }); + options.push({ + content: "Set Group Nodes to Never", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 2); + } + }, "callback") + }); + options.push({ + content: "Bypass Group Nodes", + callback: /* @__PURE__ */ __name(() => { + for (const node of nodesInGroup) { + setNodeMode(node, 4); + } + }, "callback") + }); + } + return options; + }; + } +}); +const id$1 = "Comfy.InvertMenuScrolling"; +app.registerExtension({ + name: id$1, + init() { + const ctxMenu = LiteGraph.ContextMenu; + const replace = /* @__PURE__ */ __name(() => { + LiteGraph.ContextMenu = function(values, options) { + options = options || {}; + if (options.scroll_speed) { + options.scroll_speed *= -1; + } else { + options.scroll_speed = -0.1; + } + return ctxMenu.call(this, values, options); + }; + LiteGraph.ContextMenu.prototype = ctxMenu.prototype; + }, "replace"); + app.ui.settings.addSetting({ + id: id$1, + category: ["LiteGraph", "Menu", "InvertMenuScrolling"], + name: "Invert Context Menu Scrolling", + type: "boolean", + defaultValue: false, + onChange(value) { + if (value) { + replace(); + } else { + LiteGraph.ContextMenu = ctxMenu; + } + } + }); + } +}); +app.registerExtension({ + name: "Comfy.Keybinds", + init() { + const keybindListener = /* @__PURE__ */ __name(async function(event) { + if (!app.vueAppReady) return; + const keyCombo = KeyComboImpl.fromEvent(event); + if (keyCombo.isModifier) { + return; + } + const target = event.composedPath()[0]; + if (!keyCombo.hasModifier && (target.tagName === "TEXTAREA" || target.tagName === "INPUT" || target.tagName === "SPAN" && target.classList.contains("property_value"))) { + return; + } + const keybindingStore = useKeybindingStore(); + const commandStore = useCommandStore(); + const keybinding = keybindingStore.getKeybinding(keyCombo); + if (keybinding && keybinding.targetSelector !== "#graph-canvas") { + event.preventDefault(); + await commandStore.execute(keybinding.commandId); + return; + } + if (event.ctrlKey || event.altKey || event.metaKey) { + return; + } + if (event.key === "Escape") { + const modals = document.querySelectorAll(".comfy-modal"); + for (const modal of modals) { + const modalDisplay = window.getComputedStyle(modal).getPropertyValue("display"); + if (modalDisplay !== "none") { + modal.style.display = "none"; + break; + } + } + for (const d of document.querySelectorAll("dialog")) d.close(); + } + }, "keybindListener"); + window.addEventListener("keydown", keybindListener); + } +}); +function dataURLToBlob(dataURL) { + const parts = dataURL.split(";base64,"); + const contentType = parts[0].split(":")[1]; + const byteString = atob(parts[1]); + const arrayBuffer = new ArrayBuffer(byteString.length); + const uint8Array = new Uint8Array(arrayBuffer); + for (let i = 0; i < byteString.length; i++) { + uint8Array[i] = byteString.charCodeAt(i); + } + return new Blob([arrayBuffer], { type: contentType }); +} +__name(dataURLToBlob, "dataURLToBlob"); +function loadedImageToBlob(image) { + const canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + const ctx = canvas.getContext("2d"); + ctx.drawImage(image, 0, 0); + const dataURL = canvas.toDataURL("image/png", 1); + const blob = dataURLToBlob(dataURL); + return blob; +} +__name(loadedImageToBlob, "loadedImageToBlob"); +function loadImage(imagePath) { + return new Promise((resolve, reject) => { + const image = new Image(); + image.onload = function() { + resolve(image); + }; + image.src = imagePath; + }); +} +__name(loadImage, "loadImage"); +async function uploadMask(filepath, formData) { + await api.fetchApi("/upload/mask", { + method: "POST", + body: formData + }).then((response) => { + }).catch((error) => { + console.error("Error:", error); + }); + ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]] = new Image(); + ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]].src = api.apiURL( + "/view?" + new URLSearchParams(filepath).toString() + app.getPreviewFormatParam() + app.getRandParam() + ); + if (ComfyApp.clipspace.images) + ComfyApp.clipspace.images[ComfyApp.clipspace["selectedIndex"]] = filepath; + ClipspaceDialog.invalidatePreview(); +} +__name(uploadMask, "uploadMask"); +function prepare_mask(image, maskCanvas, maskCtx, maskColor) { + maskCtx.drawImage(image, 0, 0, maskCanvas.width, maskCanvas.height); + const maskData = maskCtx.getImageData( + 0, + 0, + maskCanvas.width, + maskCanvas.height + ); + for (let i = 0; i < maskData.data.length; i += 4) { + if (maskData.data[i + 3] == 255) maskData.data[i + 3] = 0; + else maskData.data[i + 3] = 255; + maskData.data[i] = maskColor.r; + maskData.data[i + 1] = maskColor.g; + maskData.data[i + 2] = maskColor.b; + } + maskCtx.globalCompositeOperation = "source-over"; + maskCtx.putImageData(maskData, 0, 0); +} +__name(prepare_mask, "prepare_mask"); +var PointerType = /* @__PURE__ */ ((PointerType2) => { + PointerType2["Arc"] = "arc"; + PointerType2["Rect"] = "rect"; + return PointerType2; +})(PointerType || {}); +var CompositionOperation$1 = /* @__PURE__ */ ((CompositionOperation2) => { + CompositionOperation2["SourceOver"] = "source-over"; + CompositionOperation2["DestinationOut"] = "destination-out"; + return CompositionOperation2; +})(CompositionOperation$1 || {}); +class MaskEditorDialogOld extends ComfyDialog { + static { + __name(this, "MaskEditorDialogOld"); + } + static instance = null; + static mousedown_x = null; + static mousedown_y = null; + brush; + maskCtx; + maskCanvas; + brush_size_slider; + brush_opacity_slider; + colorButton; + saveButton; + zoom_ratio; + pan_x; + pan_y; + imgCanvas; + last_display_style; + is_visible; + image; + handler_registered; + brush_slider_input; + cursorX; + cursorY; + mousedown_pan_x; + mousedown_pan_y; + last_pressure; + pointer_type; + brush_pointer_type_select; + static getInstance() { + if (!MaskEditorDialogOld.instance) { + MaskEditorDialogOld.instance = new MaskEditorDialogOld(); + } + return MaskEditorDialogOld.instance; + } + is_layout_created = false; + constructor() { + super(); + this.element = $el("div.comfy-modal", { parent: document.body }, [ + $el("div.comfy-modal-content", [...this.createButtons()]) + ]); + } + createButtons() { + return []; + } + createButton(name, callback) { + var button = document.createElement("button"); + button.style.pointerEvents = "auto"; + button.innerText = name; + button.addEventListener("click", callback); + return button; + } + createLeftButton(name, callback) { + var button = this.createButton(name, callback); + button.style.cssFloat = "left"; + button.style.marginRight = "4px"; + return button; + } + createRightButton(name, callback) { + var button = this.createButton(name, callback); + button.style.cssFloat = "right"; + button.style.marginLeft = "4px"; + return button; + } + createLeftSlider(self2, name, callback) { + const divElement = document.createElement("div"); + divElement.id = "maskeditor-slider"; + divElement.style.cssFloat = "left"; + divElement.style.fontFamily = "sans-serif"; + divElement.style.marginRight = "4px"; + divElement.style.color = "var(--input-text)"; + divElement.style.backgroundColor = "var(--comfy-input-bg)"; + divElement.style.borderRadius = "8px"; + divElement.style.borderColor = "var(--border-color)"; + divElement.style.borderStyle = "solid"; + divElement.style.fontSize = "15px"; + divElement.style.height = "25px"; + divElement.style.padding = "1px 6px"; + divElement.style.display = "flex"; + divElement.style.position = "relative"; + divElement.style.top = "2px"; + divElement.style.pointerEvents = "auto"; + self2.brush_slider_input = document.createElement("input"); + self2.brush_slider_input.setAttribute("type", "range"); + self2.brush_slider_input.setAttribute("min", "1"); + self2.brush_slider_input.setAttribute("max", "100"); + self2.brush_slider_input.setAttribute("value", "10"); + const labelElement = document.createElement("label"); + labelElement.textContent = name; + divElement.appendChild(labelElement); + divElement.appendChild(self2.brush_slider_input); + self2.brush_slider_input.addEventListener("change", callback); + return divElement; + } + createOpacitySlider(self2, name, callback) { + const divElement = document.createElement("div"); + divElement.id = "maskeditor-opacity-slider"; + divElement.style.cssFloat = "left"; + divElement.style.fontFamily = "sans-serif"; + divElement.style.marginRight = "4px"; + divElement.style.color = "var(--input-text)"; + divElement.style.backgroundColor = "var(--comfy-input-bg)"; + divElement.style.borderRadius = "8px"; + divElement.style.borderColor = "var(--border-color)"; + divElement.style.borderStyle = "solid"; + divElement.style.fontSize = "15px"; + divElement.style.height = "25px"; + divElement.style.padding = "1px 6px"; + divElement.style.display = "flex"; + divElement.style.position = "relative"; + divElement.style.top = "2px"; + divElement.style.pointerEvents = "auto"; + self2.opacity_slider_input = document.createElement("input"); + self2.opacity_slider_input.setAttribute("type", "range"); + self2.opacity_slider_input.setAttribute("min", "0.1"); + self2.opacity_slider_input.setAttribute("max", "1.0"); + self2.opacity_slider_input.setAttribute("step", "0.01"); + self2.opacity_slider_input.setAttribute("value", "0.7"); + const labelElement = document.createElement("label"); + labelElement.textContent = name; + divElement.appendChild(labelElement); + divElement.appendChild(self2.opacity_slider_input); + self2.opacity_slider_input.addEventListener("input", callback); + return divElement; + } + createPointerTypeSelect(self2) { + const divElement = document.createElement("div"); + divElement.id = "maskeditor-pointer-type"; + divElement.style.cssFloat = "left"; + divElement.style.fontFamily = "sans-serif"; + divElement.style.marginRight = "4px"; + divElement.style.color = "var(--input-text)"; + divElement.style.backgroundColor = "var(--comfy-input-bg)"; + divElement.style.borderRadius = "8px"; + divElement.style.borderColor = "var(--border-color)"; + divElement.style.borderStyle = "solid"; + divElement.style.fontSize = "15px"; + divElement.style.height = "25px"; + divElement.style.padding = "1px 6px"; + divElement.style.display = "flex"; + divElement.style.position = "relative"; + divElement.style.top = "2px"; + divElement.style.pointerEvents = "auto"; + const labelElement = document.createElement("label"); + labelElement.textContent = "Pointer Type:"; + const selectElement = document.createElement("select"); + selectElement.style.borderRadius = "0"; + selectElement.style.borderColor = "transparent"; + selectElement.style.borderStyle = "unset"; + selectElement.style.fontSize = "0.9em"; + const optionArc = document.createElement("option"); + optionArc.value = "arc"; + optionArc.text = "Circle"; + optionArc.selected = true; + const optionRect = document.createElement("option"); + optionRect.value = "rect"; + optionRect.text = "Square"; + selectElement.appendChild(optionArc); + selectElement.appendChild(optionRect); + selectElement.addEventListener("change", (event) => { + const target = event.target; + self2.pointer_type = target.value; + this.setBrushBorderRadius(self2); + }); + divElement.appendChild(labelElement); + divElement.appendChild(selectElement); + return divElement; + } + setBrushBorderRadius(self2) { + if (self2.pointer_type === "rect") { + this.brush.style.borderRadius = "0%"; + this.brush.style.MozBorderRadius = "0%"; + this.brush.style.WebkitBorderRadius = "0%"; + } else { + this.brush.style.borderRadius = "50%"; + this.brush.style.MozBorderRadius = "50%"; + this.brush.style.WebkitBorderRadius = "50%"; + } + } + setlayout(imgCanvas, maskCanvas) { + const self2 = this; + self2.pointer_type = "arc"; + var bottom_panel = document.createElement("div"); + bottom_panel.style.position = "absolute"; + bottom_panel.style.bottom = "0px"; + bottom_panel.style.left = "20px"; + bottom_panel.style.right = "20px"; + bottom_panel.style.height = "50px"; + bottom_panel.style.pointerEvents = "none"; + var brush = document.createElement("div"); + brush.id = "brush"; + brush.style.backgroundColor = "transparent"; + brush.style.outline = "1px dashed black"; + brush.style.boxShadow = "0 0 0 1px white"; + brush.style.position = "absolute"; + brush.style.zIndex = "8889"; + brush.style.pointerEvents = "none"; + this.brush = brush; + this.setBrushBorderRadius(self2); + this.element.appendChild(imgCanvas); + this.element.appendChild(maskCanvas); + this.element.appendChild(bottom_panel); + document.body.appendChild(brush); + var clearButton = this.createLeftButton("Clear", () => { + self2.maskCtx.clearRect( + 0, + 0, + self2.maskCanvas.width, + self2.maskCanvas.height + ); + }); + this.brush_size_slider = this.createLeftSlider( + self2, + "Thickness", + (event) => { + self2.brush_size = event.target.value; + self2.updateBrushPreview(self2); + } + ); + this.brush_opacity_slider = this.createOpacitySlider( + self2, + "Opacity", + (event) => { + self2.brush_opacity = event.target.value; + if (self2.brush_color_mode !== "negative") { + self2.maskCanvas.style.opacity = self2.brush_opacity.toString(); + } + } + ); + this.brush_pointer_type_select = this.createPointerTypeSelect(self2); + this.colorButton = this.createLeftButton(this.getColorButtonText(), () => { + if (self2.brush_color_mode === "black") { + self2.brush_color_mode = "white"; + } else if (self2.brush_color_mode === "white") { + self2.brush_color_mode = "negative"; + } else { + self2.brush_color_mode = "black"; + } + self2.updateWhenBrushColorModeChanged(); + }); + var cancelButton = this.createRightButton("Cancel", () => { + document.removeEventListener("keydown", MaskEditorDialogOld.handleKeyDown); + self2.close(); + }); + this.saveButton = this.createRightButton("Save", () => { + document.removeEventListener("keydown", MaskEditorDialogOld.handleKeyDown); + self2.save(); + }); + this.element.appendChild(imgCanvas); + this.element.appendChild(maskCanvas); + this.element.appendChild(bottom_panel); + bottom_panel.appendChild(clearButton); + bottom_panel.appendChild(this.saveButton); + bottom_panel.appendChild(cancelButton); + bottom_panel.appendChild(this.brush_size_slider); + bottom_panel.appendChild(this.brush_opacity_slider); + bottom_panel.appendChild(this.brush_pointer_type_select); + bottom_panel.appendChild(this.colorButton); + imgCanvas.style.position = "absolute"; + maskCanvas.style.position = "absolute"; + imgCanvas.style.top = "200"; + imgCanvas.style.left = "0"; + maskCanvas.style.top = imgCanvas.style.top; + maskCanvas.style.left = imgCanvas.style.left; + const maskCanvasStyle = this.getMaskCanvasStyle(); + maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode; + maskCanvas.style.opacity = maskCanvasStyle.opacity.toString(); + } + async show() { + this.zoom_ratio = 1; + this.pan_x = 0; + this.pan_y = 0; + if (!this.is_layout_created) { + const imgCanvas = document.createElement("canvas"); + const maskCanvas = document.createElement("canvas"); + imgCanvas.id = "imageCanvas"; + maskCanvas.id = "maskCanvas"; + this.setlayout(imgCanvas, maskCanvas); + this.imgCanvas = imgCanvas; + this.maskCanvas = maskCanvas; + this.maskCtx = maskCanvas.getContext("2d", { willReadFrequently: true }); + this.setEventHandler(maskCanvas); + this.is_layout_created = true; + const self2 = this; + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === "attributes" && mutation.attributeName === "style") { + if (self2.last_display_style && self2.last_display_style != "none" && self2.element.style.display == "none") { + self2.brush.style.display = "none"; + ComfyApp.onClipspaceEditorClosed(); + } + self2.last_display_style = self2.element.style.display; + } + }); + }); + const config = { attributes: true }; + observer.observe(this.element, config); + } + document.addEventListener("keydown", MaskEditorDialogOld.handleKeyDown); + if (ComfyApp.clipspace_return_node) { + this.saveButton.innerText = "Save to node"; + } else { + this.saveButton.innerText = "Save"; + } + this.saveButton.disabled = false; + this.element.style.display = "block"; + this.element.style.width = "85%"; + this.element.style.margin = "0 7.5%"; + this.element.style.height = "100vh"; + this.element.style.top = "50%"; + this.element.style.left = "42%"; + this.element.style.zIndex = "8888"; + await this.setImages(this.imgCanvas); + this.is_visible = true; + } + isOpened() { + return this.element.style.display == "block"; + } + invalidateCanvas(orig_image, mask_image) { + this.imgCanvas.width = orig_image.width; + this.imgCanvas.height = orig_image.height; + this.maskCanvas.width = orig_image.width; + this.maskCanvas.height = orig_image.height; + let imgCtx = this.imgCanvas.getContext("2d", { willReadFrequently: true }); + let maskCtx = this.maskCanvas.getContext("2d", { + willReadFrequently: true + }); + imgCtx.drawImage(orig_image, 0, 0, orig_image.width, orig_image.height); + prepare_mask(mask_image, this.maskCanvas, maskCtx, this.getMaskColor()); + } + async setImages(imgCanvas) { + let self2 = this; + const imgCtx = imgCanvas.getContext("2d", { willReadFrequently: true }); + const maskCtx = this.maskCtx; + const maskCanvas = this.maskCanvas; + imgCtx.clearRect(0, 0, this.imgCanvas.width, this.imgCanvas.height); + maskCtx.clearRect(0, 0, this.maskCanvas.width, this.maskCanvas.height); + const filepath = ComfyApp.clipspace.images; + const alpha_url = new URL( + ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]].src + ); + alpha_url.searchParams.delete("channel"); + alpha_url.searchParams.delete("preview"); + alpha_url.searchParams.set("channel", "a"); + let mask_image = await loadImage(alpha_url); + const rgb_url = new URL( + ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]].src + ); + rgb_url.searchParams.delete("channel"); + rgb_url.searchParams.set("channel", "rgb"); + this.image = new Image(); + this.image.onload = function() { + maskCanvas.width = self2.image.width; + maskCanvas.height = self2.image.height; + self2.invalidateCanvas(self2.image, mask_image); + self2.initializeCanvasPanZoom(); + }; + this.image.src = rgb_url.toString(); + } + initializeCanvasPanZoom() { + let drawWidth = this.image.width; + let drawHeight = this.image.height; + let width = this.element.clientWidth; + let height = this.element.clientHeight; + if (this.image.width > width) { + drawWidth = width; + drawHeight = drawWidth / this.image.width * this.image.height; + } + if (drawHeight > height) { + drawHeight = height; + drawWidth = drawHeight / this.image.height * this.image.width; + } + this.zoom_ratio = drawWidth / this.image.width; + const canvasX = (width - drawWidth) / 2; + const canvasY = (height - drawHeight) / 2; + this.pan_x = canvasX; + this.pan_y = canvasY; + this.invalidatePanZoom(); + } + invalidatePanZoom() { + let raw_width = this.image.width * this.zoom_ratio; + let raw_height = this.image.height * this.zoom_ratio; + if (this.pan_x + raw_width < 10) { + this.pan_x = 10 - raw_width; + } + if (this.pan_y + raw_height < 10) { + this.pan_y = 10 - raw_height; + } + let width = `${raw_width}px`; + let height = `${raw_height}px`; + let left = `${this.pan_x}px`; + let top = `${this.pan_y}px`; + this.maskCanvas.style.width = width; + this.maskCanvas.style.height = height; + this.maskCanvas.style.left = left; + this.maskCanvas.style.top = top; + this.imgCanvas.style.width = width; + this.imgCanvas.style.height = height; + this.imgCanvas.style.left = left; + this.imgCanvas.style.top = top; + } + setEventHandler(maskCanvas) { + const self2 = this; + if (!this.handler_registered) { + maskCanvas.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + this.element.addEventListener( + "wheel", + (event) => this.handleWheelEvent(self2, event) + ); + this.element.addEventListener( + "pointermove", + (event) => this.pointMoveEvent(self2, event) + ); + this.element.addEventListener( + "touchmove", + (event) => this.pointMoveEvent(self2, event) + ); + this.element.addEventListener("dragstart", (event) => { + if (event.ctrlKey) { + event.preventDefault(); + } + }); + maskCanvas.addEventListener( + "pointerdown", + (event) => this.handlePointerDown(self2, event) + ); + maskCanvas.addEventListener( + "pointermove", + (event) => this.draw_move(self2, event) + ); + maskCanvas.addEventListener( + "touchmove", + (event) => this.draw_move(self2, event) + ); + maskCanvas.addEventListener("pointerover", (event) => { + this.brush.style.display = "block"; + }); + maskCanvas.addEventListener("pointerleave", (event) => { + this.brush.style.display = "none"; + }); + document.addEventListener( + "pointerup", + MaskEditorDialogOld.handlePointerUp + ); + this.handler_registered = true; + } + } + getMaskCanvasStyle() { + if (this.brush_color_mode === "negative") { + return { + mixBlendMode: "difference", + opacity: "1" + }; + } else { + return { + mixBlendMode: "initial", + opacity: this.brush_opacity + }; + } + } + getMaskColor() { + if (this.brush_color_mode === "black") { + return { r: 0, g: 0, b: 0 }; + } + if (this.brush_color_mode === "white") { + return { r: 255, g: 255, b: 255 }; + } + if (this.brush_color_mode === "negative") { + return { r: 255, g: 255, b: 255 }; + } + return { r: 0, g: 0, b: 0 }; + } + getMaskFillStyle() { + const maskColor = this.getMaskColor(); + return "rgb(" + maskColor.r + "," + maskColor.g + "," + maskColor.b + ")"; + } + getColorButtonText() { + let colorCaption = "unknown"; + if (this.brush_color_mode === "black") { + colorCaption = "black"; + } else if (this.brush_color_mode === "white") { + colorCaption = "white"; + } else if (this.brush_color_mode === "negative") { + colorCaption = "negative"; + } + return "Color: " + colorCaption; + } + updateWhenBrushColorModeChanged() { + this.colorButton.innerText = this.getColorButtonText(); + const maskCanvasStyle = this.getMaskCanvasStyle(); + this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode; + this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString(); + const maskColor = this.getMaskColor(); + const maskData = this.maskCtx.getImageData( + 0, + 0, + this.maskCanvas.width, + this.maskCanvas.height + ); + for (let i = 0; i < maskData.data.length; i += 4) { + maskData.data[i] = maskColor.r; + maskData.data[i + 1] = maskColor.g; + maskData.data[i + 2] = maskColor.b; + } + this.maskCtx.putImageData(maskData, 0, 0); + } + brush_opacity = 0.7; + brush_size = 10; + brush_color_mode = "black"; + drawing_mode = false; + lastx = -1; + lasty = -1; + lasttime = 0; + static handleKeyDown(event) { + const self2 = MaskEditorDialogOld.instance; + if (event.key === "]") { + self2.brush_size = Math.min(self2.brush_size + 2, 100); + self2.brush_slider_input.value = self2.brush_size; + } else if (event.key === "[") { + self2.brush_size = Math.max(self2.brush_size - 2, 1); + self2.brush_slider_input.value = self2.brush_size; + } else if (event.key === "Enter") { + self2.save(); + } + self2.updateBrushPreview(self2); + } + static handlePointerUp(event) { + event.preventDefault(); + this.mousedown_x = null; + this.mousedown_y = null; + MaskEditorDialogOld.instance.drawing_mode = false; + } + updateBrushPreview(self2) { + const brush = self2.brush; + var centerX = self2.cursorX; + var centerY = self2.cursorY; + brush.style.width = self2.brush_size * 2 * this.zoom_ratio + "px"; + brush.style.height = self2.brush_size * 2 * this.zoom_ratio + "px"; + brush.style.left = centerX - self2.brush_size * this.zoom_ratio + "px"; + brush.style.top = centerY - self2.brush_size * this.zoom_ratio + "px"; + } + handleWheelEvent(self2, event) { + event.preventDefault(); + if (event.ctrlKey) { + if (event.deltaY < 0) { + this.zoom_ratio = Math.min(10, this.zoom_ratio + 0.2); + } else { + this.zoom_ratio = Math.max(0.2, this.zoom_ratio - 0.2); + } + this.invalidatePanZoom(); + } else { + if (event.deltaY < 0) this.brush_size = Math.min(this.brush_size + 2, 100); + else this.brush_size = Math.max(this.brush_size - 2, 1); + this.brush_slider_input.value = this.brush_size.toString(); + this.updateBrushPreview(this); + } + } + pointMoveEvent(self2, event) { + this.cursorX = event.pageX; + this.cursorY = event.pageY; + self2.updateBrushPreview(self2); + if (event.ctrlKey) { + event.preventDefault(); + self2.pan_move(self2, event); + } + let left_button_down = window.TouchEvent && event instanceof TouchEvent || event.buttons == 1; + if (event.shiftKey && left_button_down) { + self2.drawing_mode = false; + const y = event.clientY; + let delta = (self2.zoom_lasty - y) * 5e-3; + self2.zoom_ratio = Math.max( + Math.min(10, self2.last_zoom_ratio - delta), + 0.2 + ); + this.invalidatePanZoom(); + return; + } + } + pan_move(self2, event) { + if (event.buttons == 1) { + if (MaskEditorDialogOld.mousedown_x) { + let deltaX = MaskEditorDialogOld.mousedown_x - event.clientX; + let deltaY = MaskEditorDialogOld.mousedown_y - event.clientY; + self2.pan_x = this.mousedown_pan_x - deltaX; + self2.pan_y = this.mousedown_pan_y - deltaY; + self2.invalidatePanZoom(); + } + } + } + draw_move(self2, event) { + if (event.ctrlKey || event.shiftKey) { + return; + } + event.preventDefault(); + this.cursorX = event.pageX; + this.cursorY = event.pageY; + self2.updateBrushPreview(self2); + let left_button_down = window.TouchEvent && event instanceof TouchEvent || event.buttons == 1; + let right_button_down = [2, 5, 32].includes(event.buttons); + if (!event.altKey && left_button_down) { + var diff = performance.now() - self2.lasttime; + const maskRect = self2.maskCanvas.getBoundingClientRect(); + var x = event.offsetX; + var y = event.offsetY; + if (event.offsetX == null) { + x = event.targetTouches[0].clientX - maskRect.left; + } + if (event.offsetY == null) { + y = event.targetTouches[0].clientY - maskRect.top; + } + x /= self2.zoom_ratio; + y /= self2.zoom_ratio; + var brush_size = this.brush_size; + if (event instanceof PointerEvent && event.pointerType == "pen") { + brush_size *= event.pressure; + this.last_pressure = event.pressure; + } else if (window.TouchEvent && event instanceof TouchEvent && diff < 20) { + brush_size *= this.last_pressure; + } else { + brush_size = this.brush_size; + } + if (diff > 20 && !this.drawing_mode) + requestAnimationFrame(() => { + self2.init_shape( + self2, + "source-over" + /* SourceOver */ + ); + self2.draw_shape(self2, x, y, brush_size); + self2.lastx = x; + self2.lasty = y; + }); + else + requestAnimationFrame(() => { + self2.init_shape( + self2, + "source-over" + /* SourceOver */ + ); + var dx = x - self2.lastx; + var dy = y - self2.lasty; + var distance = Math.sqrt(dx * dx + dy * dy); + var directionX = dx / distance; + var directionY = dy / distance; + for (var i = 0; i < distance; i += 5) { + var px2 = self2.lastx + directionX * i; + var py2 = self2.lasty + directionY * i; + self2.draw_shape(self2, px2, py2, brush_size); + } + self2.lastx = x; + self2.lasty = y; + }); + self2.lasttime = performance.now(); + } else if (event.altKey && left_button_down || right_button_down) { + const maskRect = self2.maskCanvas.getBoundingClientRect(); + const x2 = (event.offsetX || event.targetTouches[0].clientX - maskRect.left) / self2.zoom_ratio; + const y2 = (event.offsetY || event.targetTouches[0].clientY - maskRect.top) / self2.zoom_ratio; + var brush_size = this.brush_size; + if (event instanceof PointerEvent && event.pointerType == "pen") { + brush_size *= event.pressure; + this.last_pressure = event.pressure; + } else if (window.TouchEvent && event instanceof TouchEvent && diff < 20) { + brush_size *= this.last_pressure; + } else { + brush_size = this.brush_size; + } + if (diff > 20 && !this.drawing_mode) + requestAnimationFrame(() => { + self2.init_shape( + self2, + "destination-out" + /* DestinationOut */ + ); + self2.draw_shape(self2, x2, y2, brush_size); + self2.lastx = x2; + self2.lasty = y2; + }); + else + requestAnimationFrame(() => { + self2.init_shape( + self2, + "destination-out" + /* DestinationOut */ + ); + var dx = x2 - self2.lastx; + var dy = y2 - self2.lasty; + var distance = Math.sqrt(dx * dx + dy * dy); + var directionX = dx / distance; + var directionY = dy / distance; + for (var i = 0; i < distance; i += 5) { + var px2 = self2.lastx + directionX * i; + var py2 = self2.lasty + directionY * i; + self2.draw_shape(self2, px2, py2, brush_size); + } + self2.lastx = x2; + self2.lasty = y2; + }); + self2.lasttime = performance.now(); + } + } + handlePointerDown(self2, event) { + if (event.ctrlKey) { + if (event.buttons == 1) { + MaskEditorDialogOld.mousedown_x = event.clientX; + MaskEditorDialogOld.mousedown_y = event.clientY; + this.mousedown_pan_x = this.pan_x; + this.mousedown_pan_y = this.pan_y; + } + return; + } + var brush_size = this.brush_size; + if (event instanceof PointerEvent && event.pointerType == "pen") { + brush_size *= event.pressure; + this.last_pressure = event.pressure; + } + if ([0, 2, 5].includes(event.button)) { + self2.drawing_mode = true; + event.preventDefault(); + if (event.shiftKey) { + self2.zoom_lasty = event.clientY; + self2.last_zoom_ratio = self2.zoom_ratio; + return; + } + const maskRect = self2.maskCanvas.getBoundingClientRect(); + const x = (event.offsetX || event.targetTouches[0].clientX - maskRect.left) / self2.zoom_ratio; + const y = (event.offsetY || event.targetTouches[0].clientY - maskRect.top) / self2.zoom_ratio; + if (!event.altKey && event.button == 0) { + self2.init_shape( + self2, + "source-over" + /* SourceOver */ + ); + } else { + self2.init_shape( + self2, + "destination-out" + /* DestinationOut */ + ); + } + self2.draw_shape(self2, x, y, brush_size); + self2.lastx = x; + self2.lasty = y; + self2.lasttime = performance.now(); + } + } + init_shape(self2, compositionOperation) { + self2.maskCtx.beginPath(); + if (compositionOperation == "source-over") { + self2.maskCtx.fillStyle = this.getMaskFillStyle(); + self2.maskCtx.globalCompositeOperation = "source-over"; + } else if (compositionOperation == "destination-out") { + self2.maskCtx.globalCompositeOperation = "destination-out"; + } + } + draw_shape(self2, x, y, brush_size) { + if (self2.pointer_type === "rect") { + self2.maskCtx.rect( + x - brush_size, + y - brush_size, + brush_size * 2, + brush_size * 2 + ); + } else { + self2.maskCtx.arc(x, y, brush_size, 0, Math.PI * 2, false); + } + self2.maskCtx.fill(); + } + async save() { + const backupCanvas = document.createElement("canvas"); + const backupCtx = backupCanvas.getContext("2d", { + willReadFrequently: true + }); + backupCanvas.width = this.image.width; + backupCanvas.height = this.image.height; + backupCtx.clearRect(0, 0, backupCanvas.width, backupCanvas.height); + backupCtx.drawImage( + this.maskCanvas, + 0, + 0, + this.maskCanvas.width, + this.maskCanvas.height, + 0, + 0, + backupCanvas.width, + backupCanvas.height + ); + const backupData = backupCtx.getImageData( + 0, + 0, + backupCanvas.width, + backupCanvas.height + ); + for (let i = 0; i < backupData.data.length; i += 4) { + if (backupData.data[i + 3] == 255) backupData.data[i + 3] = 0; + else backupData.data[i + 3] = 255; + backupData.data[i] = 0; + backupData.data[i + 1] = 0; + backupData.data[i + 2] = 0; + } + backupCtx.globalCompositeOperation = "source-over"; + backupCtx.putImageData(backupData, 0, 0); + const formData = new FormData(); + const filename = "clipspace-mask-" + performance.now() + ".png"; + const item = { + filename, + subfolder: "clipspace", + type: "input" + }; + if (ComfyApp.clipspace.images) ComfyApp.clipspace.images[0] = item; + if (ComfyApp.clipspace.widgets) { + const index = ComfyApp.clipspace.widgets.findIndex( + (obj) => obj.name === "image" + ); + if (index >= 0) ComfyApp.clipspace.widgets[index].value = item; + } + const dataURL = backupCanvas.toDataURL(); + const blob = dataURLToBlob(dataURL); + let original_url = new URL(this.image.src); + const original_ref = { + filename: original_url.searchParams.get("filename") + }; + let original_subfolder = original_url.searchParams.get("subfolder"); + if (original_subfolder) original_ref.subfolder = original_subfolder; + let original_type = original_url.searchParams.get("type"); + if (original_type) original_ref.type = original_type; + formData.append("image", blob, filename); + formData.append("original_ref", JSON.stringify(original_ref)); + formData.append("type", "input"); + formData.append("subfolder", "clipspace"); + this.saveButton.innerText = "Saving..."; + this.saveButton.disabled = true; + await uploadMask(item, formData); + ComfyApp.onClipspaceEditorSave(); + this.close(); + } +} +window.comfyAPI = window.comfyAPI || {}; +window.comfyAPI.maskEditorOld = window.comfyAPI.maskEditorOld || {}; +window.comfyAPI.maskEditorOld.MaskEditorDialogOld = MaskEditorDialogOld; +var styles = ` + #maskEditorContainer { + display: fixed; + } + #maskEditor_brush { + position: absolute; + backgroundColor: transparent; + z-index: 8889; + pointer-events: none; + border-radius: 50%; + overflow: visible; + outline: 1px dashed black; + box-shadow: 0 0 0 1px white; + } + #maskEditor_brushPreviewGradient { + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + display: none; + } + #maskEditor { + display: block; + width: 100%; + height: 100vh; + left: 0; + z-index: 8888; + position: fixed; + background: rgba(50,50,50,0.75); + backdrop-filter: blur(10px); + overflow: hidden; + user-select: none; + } + #maskEditor_sidePanelContainer { + height: 100%; + width: 220px; + z-index: 8888; + display: flex; + flex-direction: column; + } + #maskEditor_sidePanel { + background: var(--comfy-menu-bg); + height: 100%; + display: flex; + align-items: center; + overflow-y: hidden; + width: 220px; + } + #maskEditor_sidePanelShortcuts { + display: flex; + flex-direction: row; + width: 200px; + margin-top: 10px; + gap: 10px; + justify-content: center; + } + .maskEditor_sidePanelIconButton { + width: 40px; + height: 40px; + pointer-events: auto; + display: flex; + justify-content: center; + align-items: center; + transition: background-color 0.1s; + } + .maskEditor_sidePanelIconButton:hover { + background-color: rgba(0, 0, 0, 0.2); + } + #maskEditor_sidePanelBrushSettings { + display: flex; + flex-direction: column; + gap: 10px; + width: 200px; + padding: 10px; + } + .maskEditor_sidePanelTitle { + text-align: center; + font-size: 15px; + font-family: sans-serif; + color: var(--descrip-text); + margin-top: 10px; + } + #maskEditor_sidePanelBrushShapeContainer { + display: flex; + width: 180px; + height: 50px; + border: 1px solid var(--border-color); + pointer-events: auto; + background: rgba(0, 0, 0, 0.2); + } + #maskEditor_sidePanelBrushShapeCircle { + width: 35px; + height: 35px; + border-radius: 50%; + border: 1px solid var(--border-color); + pointer-events: auto; + transition: background 0.1s; + margin-left: 7.5px; + } + .maskEditor_sidePanelBrushRange { + width: 180px; + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + } + .maskEditor_sidePanelBrushRange::-webkit-slider-thumb { + height: 20px; + width: 20px; + border-radius: 50%; + cursor: grab; + margin-top: -8px; + background: var(--p-surface-700); + border: 1px solid var(--border-color); + } + .maskEditor_sidePanelBrushRange::-moz-range-thumb { + height: 20px; + width: 20px; + border-radius: 50%; + cursor: grab; + background: var(--p-surface-800); + border: 1px solid var(--border-color); + } + .maskEditor_sidePanelBrushRange::-webkit-slider-runnable-track { + background: var(--p-surface-700); + height: 3px; + } + .maskEditor_sidePanelBrushRange::-moz-range-track { + background: var(--p-surface-700); + height: 3px; + } + + #maskEditor_sidePanelBrushShapeSquare { + width: 35px; + height: 35px; + margin: 5px; + border: 1px solid var(--border-color); + pointer-events: auto; + transition: background 0.1s; + } + + .maskEditor_brushShape_dark { + background: transparent; + } + + .maskEditor_brushShape_dark:hover { + background: var(--p-surface-900); + } + + .maskEditor_brushShape_light { + background: transparent; + } + + .maskEditor_brushShape_light:hover { + background: var(--comfy-menu-bg); + } + + #maskEditor_sidePanelImageLayerSettings { + display: flex; + flex-direction: column; + gap: 10px; + width: 200px; + align-items: center; + } + .maskEditor_sidePanelLayer { + display: flex; + width: 200px; + height: 50px; + } + .maskEditor_sidePanelLayerVisibilityContainer { + width: 50px; + height: 50px; + border-radius: 8px; + display: flex; + justify-content: center; + align-items: center; + } + .maskEditor_sidePanelVisibilityToggle { + width: 12px; + height: 12px; + border-radius: 50%; + pointer-events: auto; + } + .maskEditor_sidePanelLayerIconContainer { + width: 60px; + height: 50px; + border-radius: 8px; + display: flex; + justify-content: center; + align-items: center; + fill: var(--input-text); + } + .maskEditor_sidePanelLayerIconContainer svg { + width: 30px; + height: 30px; + } + #maskEditor_sidePanelMaskLayerBlendingContainer { + width: 80px; + height: 50px; + border-radius: 8px; + display: flex; + justify-content: center; + align-items: center; + } + #maskEditor_sidePanelMaskLayerBlendingSelect { + width: 80px; + height: 30px; + border: 1px solid var(--border-color); + background-color: rgba(0, 0, 0, 0.2); + color: var(--input-text); + font-family: sans-serif; + font-size: 15px; + pointer-events: auto; + transition: background-color border 0.1s; + } + #maskEditor_sidePanelClearCanvasButton:hover { + background-color: var(--p-overlaybadge-outline-color); + border: none; + } + #maskEditor_sidePanelClearCanvasButton { + width: 180px; + height: 30px; + border: none; + background: rgba(0, 0, 0, 0.2); + border: 1px solid var(--border-color); + color: var(--input-text); + font-family: sans-serif; + font-size: 15px; + pointer-events: auto; + transition: background-color 0.1s; + } + #maskEditor_sidePanelClearCanvasButton:hover { + background-color: var(--p-overlaybadge-outline-color); + } + #maskEditor_sidePanelHorizontalButtonContainer { + display: flex; + gap: 10px; + height: 40px; + } + .maskEditor_sidePanelBigButton { + width: 85px; + height: 30px; + border: none; + background: rgba(0, 0, 0, 0.2); + border: 1px solid var(--border-color); + color: var(--input-text); + font-family: sans-serif; + font-size: 15px; + pointer-events: auto; + transition: background-color border 0.1s; + } + .maskEditor_sidePanelBigButton:hover { + background-color: var(--p-overlaybadge-outline-color); + border: none; + } + #maskEditor_toolPanel { + height: 100%; + width: var(--sidebar-width); + z-index: 8888; + background: var(--comfy-menu-bg); + display: flex; + flex-direction: column; + } + .maskEditor_toolPanelContainer { + width: var(--sidebar-width); + height: var(--sidebar-width); + display: flex; + justify-content: center; + align-items: center; + position: relative; + transition: background-color 0.2s; + } + .maskEditor_toolPanelContainerSelected svg { + fill: var(--p-button-text-primary-color) !important; + } + .maskEditor_toolPanelContainerSelected .maskEditor_toolPanelIndicator { + display: block; + } + .maskEditor_toolPanelContainer svg { + width: 75%; + aspect-ratio: 1/1; + fill: var(--p-button-text-secondary-color); + } + + .maskEditor_toolPanelContainerDark:hover { + background-color: var(--p-surface-800); + } + + .maskEditor_toolPanelContainerLight:hover { + background-color: var(--p-surface-300); + } + + .maskEditor_toolPanelIndicator { + display: none; + height: 100%; + width: 4px; + position: absolute; + left: 0; + background: var(--p-button-text-primary-color); + } + #maskEditor_sidePanelPaintBucketSettings { + display: flex; + flex-direction: column; + gap: 10px; + width: 200px; + padding: 10px; + } + #canvasBackground { + background: white; + width: 100%; + height: 100%; + } + #maskEditor_sidePanelButtonsContainer { + display: flex; + flex-direction: column; + gap: 10px; + margin-top: 10px; + } + .maskEditor_sidePanelSeparator { + width: 200px; + height: 2px; + background: var(--border-color); + margin-top: 5px; + margin-bottom: 5px; + } + #maskEditor_pointerZone { + width: calc(100% - var(--sidebar-width) - 220px); + height: 100%; + } + #maskEditor_uiContainer { + width: 100%; + height: 100%; + position: absolute; + z-index: 8888; + display: flex; + flex-direction: column; + } + #maskEditorCanvasContainer { + position: absolute; + width: 1000px; + height: 667px; + left: 359px; + top: 280px; + } + #imageCanvas { + width: 100%; + height: 100%; + } + #maskCanvas { + width: 100%; + height: 100%; + } + #maskEditor_uiHorizontalContainer { + width: 100%; + height: 100%; + display: flex; + } + #maskEditor_topBar { + display: flex; + height: 44px; + align-items: center; + background: var(--comfy-menu-bg); + } + #maskEditor_topBarTitle { + margin: 0; + margin-left: 0.5rem; + margin-right: 0.5rem; + font-size: 1.2em; + } + #maskEditor_topBarButtonContainer { + display: flex; + gap: 10px; + margin-right: 0.5rem; + position: absolute; + right: 0; + width: 200px; + } + #maskEditor_topBarShortcutsContainer { + display: flex; + gap: 10px; + margin-left: 5px; + } + + .maskEditor_topPanelIconButton_dark { + width: 50px; + height: 30px; + pointer-events: auto; + display: flex; + justify-content: center; + align-items: center; + transition: background-color 0.1s; + background: var(--p-surface-800); + border: 1px solid var(--p-form-field-border-color); + border-radius: 10px; + } + + .maskEditor_topPanelIconButton_dark:hover { + background-color: var(--p-surface-900); + } + + .maskEditor_topPanelIconButton_dark svg { + width: 25px; + height: 25px; + pointer-events: none; + fill: var(--input-text); + } + + .maskEditor_topPanelIconButton_light { + width: 50px; + height: 30px; + pointer-events: auto; + display: flex; + justify-content: center; + align-items: center; + transition: background-color 0.1s; + background: var(--comfy-menu-bg); + border: 1px solid var(--p-form-field-border-color); + border-radius: 10px; + } + + .maskEditor_topPanelIconButton_light:hover { + background-color: var(--p-surface-300); + } + + .maskEditor_topPanelIconButton_light svg { + width: 25px; + height: 25px; + pointer-events: none; + fill: var(--input-text); + } + + .maskEditor_topPanelButton_dark { + height: 30px; + background: var(--p-surface-800); + border: 1px solid var(--p-form-field-border-color); + border-radius: 10px; + color: var(--input-text); + font-family: sans-serif; + pointer-events: auto; + transition: 0.1s; + width: 60px; + } + + .maskEditor_topPanelButton_dark:hover { + background-color: var(--p-surface-900); + } + + .maskEditor_topPanelButton_light { + height: 30px; + background: var(--comfy-menu-bg); + border: 1px solid var(--p-form-field-border-color); + border-radius: 10px; + color: var(--input-text); + font-family: sans-serif; + pointer-events: auto; + transition: 0.1s; + width: 60px; + } + + .maskEditor_topPanelButton_light:hover { + background-color: var(--p-surface-300); + } + + + #maskEditor_sidePanelColorSelectSettings { + flex-direction: column; + } + + .maskEditor_sidePanel_paintBucket_Container { + width: 180px; + display: flex; + flex-direction: column; + position: relative; + } + + .maskEditor_sidePanel_colorSelect_Container { + display: flex; + width: 180px; + align-items: center; + gap: 5px; + height: 30px; + } + + #maskEditor_sidePanelVisibilityToggle { + position: absolute; + right: 0; + } + + #maskEditor_sidePanelColorSelectMethodSelect { + position: absolute; + right: 0; + height: 30px; + border-radius: 0; + border: 1px solid var(--border-color); + background: rgba(0,0,0,0.2); + } + + #maskEditor_sidePanelVisibilityToggle { + position: absolute; + right: 0; + } + + .maskEditor_sidePanel_colorSelect_tolerance_container { + display: flex; + flex-direction: column; + gap: 10px; + margin-bottom: 10px; + } + + .maskEditor_sidePanelContainerColumn { + display: flex; + flex-direction: column; + gap: 12px; + } + + .maskEditor_sidePanelContainerRow { + display: flex; + flex-direction: row; + gap: 10px; + align-items: center; + min-height: 24px; + position: relative; + } + + .maskEditor_accent_bg_dark { + background: var(--p-surface-800); + } + + .maskEditor_accent_bg_very_dark { + background: var(--p-surface-900); + } + + .maskEditor_accent_bg_light { + background: var(--p-surface-300); + } + + .maskEditor_accent_bg_very_light { + background: var(--comfy-menu-bg); + } + + #maskEditor_paintBucketSettings { + display: none; + } + + #maskEditor_colorSelectSettings { + display: none; + } + + .maskEditor_sidePanelToggleContainer { + cursor: pointer; + display: inline-block; + position: absolute; + right: 0; + } + + .maskEditor_toggle_bg_dark { + background: var(--p-surface-700); + } + + .maskEditor_toggle_bg_light { + background: var(--p-surface-300); + } + + .maskEditor_sidePanelToggleSwitch { + display: inline-block; + border-radius: 16px; + width: 40px; + height: 24px; + position: relative; + vertical-align: middle; + transition: background 0.25s; + } + .maskEditor_sidePanelToggleSwitch:before, .maskEditor_sidePanelToggleSwitch:after { + content: ""; + } + .maskEditor_sidePanelToggleSwitch:before { + display: block; + background: linear-gradient(to bottom, #fff 0%, #eee 100%); + border-radius: 50%; + width: 16px; + height: 16px; + position: absolute; + top: 4px; + left: 4px; + transition: ease 0.2s; + } + .maskEditor_sidePanelToggleContainer:hover .maskEditor_sidePanelToggleSwitch:before { + background: linear-gradient(to bottom, #fff 0%, #fff 100%); + } + .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_sidePanelToggleSwitch { + background: var(--p-button-text-primary-color); + } + .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_toggle_bg_dark:before { + background: var(--p-surface-900); + } + .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_toggle_bg_light:before { + background: var(--comfy-menu-bg); + } + .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_sidePanelToggleSwitch:before { + left: 20px; + } + + .maskEditor_sidePanelToggleCheckbox { + position: absolute; + visibility: hidden; + } + + .maskEditor_sidePanelDropdown_dark { + border: 1px solid var(--p-form-field-border-color); + background: var(--p-surface-900); + height: 24px; + padding-left: 5px; + padding-right: 5px; + border-radius: 6px; + transition: background 0.1s; + } + + .maskEditor_sidePanelDropdown_dark option { + background: var(--p-surface-900); + } + + .maskEditor_sidePanelDropdown_dark:focus { + outline: 1px solid var(--p-button-text-primary-color); + } + + .maskEditor_sidePanelDropdown_dark option:hover { + background: white; + } + .maskEditor_sidePanelDropdown_dark option:active { + background: var(--p-highlight-background); + } + + .maskEditor_sidePanelDropdown_light { + border: 1px solid var(--p-form-field-border-color); + background: var(--comfy-menu-bg); + height: 24px; + padding-left: 5px; + padding-right: 5px; + border-radius: 6px; + transition: background 0.1s; + } + + .maskEditor_sidePanelDropdown_light option { + background: var(--comfy-menu-bg); + } + + .maskEditor_sidePanelDropdown_light:focus { + outline: 1px solid var(--p-surface-300); + } + + .maskEditor_sidePanelDropdown_light option:hover { + background: white; + } + .maskEditor_sidePanelDropdown_light option:active { + background: var(--p-surface-300); + } + + .maskEditor_layerRow { + height: 50px; + width: 200px; + border-radius: 10px; + } + + .maskEditor_sidePanelLayerPreviewContainer { + width: 40px; + height: 30px; + } + + .maskEditor_sidePanelLayerPreviewContainer > svg{ + width: 100%; + height: 100%; + object-fit: contain; + fill: var(--p-surface-100); + } + + #maskEditor_sidePanelImageLayerImage { + width: 100%; + height: 100%; + object-fit: contain; + } + + .maskEditor_sidePanelSubTitle { + text-align: left; + font-size: 12px; + font-family: sans-serif; + color: var(--descrip-text); + } + + .maskEditor_containerDropdown { + position: absolute; + right: 0; + } + + .maskEditor_sidePanelLayerCheckbox { + margin-left: 15px; + } + + .maskEditor_toolPanelZoomIndicator { + width: var(--sidebar-width); + height: var(--sidebar-width); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 5px; + color: var(--p-button-text-secondary-color); + position: absolute; + bottom: 0; + transition: background-color 0.2s; + } + + #maskEditor_toolPanelDimensionsText { + font-size: 12px; + } + + #maskEditor_topBarSaveButton { + background: var(--p-primary-color) !important; + color: var(--p-button-primary-color) !important; + } + + #maskEditor_topBarSaveButton:hover { + background: var(--p-primary-hover-color) !important; + } + +`; +var styleSheet = document.createElement("style"); +styleSheet.type = "text/css"; +styleSheet.innerText = styles; +document.head.appendChild(styleSheet); +var BrushShape = /* @__PURE__ */ ((BrushShape2) => { + BrushShape2["Arc"] = "arc"; + BrushShape2["Rect"] = "rect"; + return BrushShape2; +})(BrushShape || {}); +var Tools = /* @__PURE__ */ ((Tools2) => { + Tools2["Pen"] = "pen"; + Tools2["Eraser"] = "eraser"; + Tools2["PaintBucket"] = "paintBucket"; + Tools2["ColorSelect"] = "colorSelect"; + return Tools2; +})(Tools || {}); +var CompositionOperation = /* @__PURE__ */ ((CompositionOperation2) => { + CompositionOperation2["SourceOver"] = "source-over"; + CompositionOperation2["DestinationOut"] = "destination-out"; + return CompositionOperation2; +})(CompositionOperation || {}); +var MaskBlendMode = /* @__PURE__ */ ((MaskBlendMode2) => { + MaskBlendMode2["Black"] = "black"; + MaskBlendMode2["White"] = "white"; + MaskBlendMode2["Negative"] = "negative"; + return MaskBlendMode2; +})(MaskBlendMode || {}); +var ColorComparisonMethod = /* @__PURE__ */ ((ColorComparisonMethod2) => { + ColorComparisonMethod2["Simple"] = "simple"; + ColorComparisonMethod2["HSL"] = "hsl"; + ColorComparisonMethod2["LAB"] = "lab"; + return ColorComparisonMethod2; +})(ColorComparisonMethod || {}); +class MaskEditorDialog extends ComfyDialog { + static { + __name(this, "MaskEditorDialog"); + } + static instance = null; + //new + uiManager; + toolManager; + panAndZoomManager; + brushTool; + paintBucketTool; + colorSelectTool; + canvasHistory; + messageBroker; + keyboardManager; + rootElement; + imageURL; + isLayoutCreated = false; + isOpen = false; + //variables needed? + last_display_style = null; + constructor() { + super(); + this.rootElement = $el( + "div.maskEditor_hidden", + { parent: document.body }, + [] + ); + this.element = this.rootElement; + } + static getInstance() { + if (!ComfyApp.clipspace || !ComfyApp.clipspace.imgs) { + throw new Error("No clipspace images found"); + } + const currentSrc = ComfyApp.clipspace.imgs[ComfyApp.clipspace["selectedIndex"]].src; + if (!MaskEditorDialog.instance || currentSrc !== MaskEditorDialog.instance.imageURL) { + MaskEditorDialog.instance = new MaskEditorDialog(); + } + return MaskEditorDialog.instance; + } + async show() { + this.cleanup(); + if (!this.isLayoutCreated) { + this.messageBroker = new MessageBroker(); + this.canvasHistory = new CanvasHistory(this, 20); + this.paintBucketTool = new PaintBucketTool(this); + this.brushTool = new BrushTool(this); + this.panAndZoomManager = new PanAndZoomManager(this); + this.toolManager = new ToolManager(this); + this.keyboardManager = new KeyboardManager(this); + this.uiManager = new UIManager(this.rootElement, this); + this.colorSelectTool = new ColorSelectTool(this); + const self2 = this; + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === "attributes" && mutation.attributeName === "style") { + if (self2.last_display_style && self2.last_display_style != "none" && self2.element.style.display == "none") { + ComfyApp.onClipspaceEditorClosed(); + } + self2.last_display_style = self2.element.style.display; + } + }); + }); + const config = { attributes: true }; + observer.observe(this.rootElement, config); + this.isLayoutCreated = true; + await this.uiManager.setlayout(); + } + this.rootElement.id = "maskEditor"; + this.rootElement.style.display = "flex"; + this.element.style.display = "flex"; + await this.uiManager.initUI(); + this.paintBucketTool.initPaintBucketTool(); + this.colorSelectTool.initColorSelectTool(); + await this.canvasHistory.saveInitialState(); + this.isOpen = true; + if (ComfyApp.clipspace && ComfyApp.clipspace.imgs) { + this.uiManager.setSidebarImage(); + } + this.keyboardManager.addListeners(); + } + cleanup() { + const maskEditors = document.querySelectorAll('[id^="maskEditor"]'); + maskEditors.forEach((element) => element.remove()); + const brushElements = document.querySelectorAll("#maskEditor_brush"); + brushElements.forEach((element) => element.remove()); + } + isOpened() { + return this.isOpen; + } + async save() { + const backupCanvas = document.createElement("canvas"); + const imageCanvas = this.uiManager.getImgCanvas(); + const maskCanvas = this.uiManager.getMaskCanvas(); + const image = this.uiManager.getImage(); + const backupCtx = backupCanvas.getContext("2d", { + willReadFrequently: true + }); + backupCanvas.width = imageCanvas.width; + backupCanvas.height = imageCanvas.height; + if (!backupCtx) { + return; + } + const maskImageLoaded = new Promise((resolve, reject) => { + const maskImage = new Image(); + maskImage.src = maskCanvas.toDataURL(); + maskImage.onload = () => { + resolve(); + }; + maskImage.onerror = (error) => { + reject(error); + }; + }); + try { + await maskImageLoaded; + } catch (error) { + console.error("Error loading mask image:", error); + return; + } + backupCtx.clearRect(0, 0, backupCanvas.width, backupCanvas.height); + backupCtx.drawImage( + maskCanvas, + 0, + 0, + maskCanvas.width, + maskCanvas.height, + 0, + 0, + backupCanvas.width, + backupCanvas.height + ); + let maskHasContent = false; + const maskData = backupCtx.getImageData( + 0, + 0, + backupCanvas.width, + backupCanvas.height + ); + for (let i = 0; i < maskData.data.length; i += 4) { + if (maskData.data[i + 3] !== 0) { + maskHasContent = true; + break; + } + } + const backupData = backupCtx.getImageData( + 0, + 0, + backupCanvas.width, + backupCanvas.height + ); + let backupHasContent = false; + for (let i = 0; i < backupData.data.length; i += 4) { + if (backupData.data[i + 3] !== 0) { + backupHasContent = true; + break; + } + } + if (maskHasContent && !backupHasContent) { + console.error("Mask appears to be empty"); + alert("Cannot save empty mask"); + return; + } + for (let i = 0; i < backupData.data.length; i += 4) { + const alpha = backupData.data[i + 3]; + backupData.data[i] = 0; + backupData.data[i + 1] = 0; + backupData.data[i + 2] = 0; + backupData.data[i + 3] = 255 - alpha; + } + backupCtx.globalCompositeOperation = "source-over"; + backupCtx.putImageData(backupData, 0, 0); + const formData = new FormData(); + const filename = "clipspace-mask-" + performance.now() + ".png"; + const item = { + filename, + subfolder: "clipspace", + type: "input" + }; + if (ComfyApp?.clipspace?.widgets?.length) { + const index = ComfyApp.clipspace.widgets.findIndex( + (obj) => obj?.name === "image" + ); + if (index >= 0 && item !== void 0) { + try { + ComfyApp.clipspace.widgets[index].value = item; + } catch (err2) { + console.warn("Failed to set widget value:", err2); + } + } + } + const dataURL = backupCanvas.toDataURL(); + const blob = this.dataURLToBlob(dataURL); + let original_url = new URL(image.src); + this.uiManager.setBrushOpacity(0); + const filenameRef = original_url.searchParams.get("filename"); + if (!filenameRef) { + throw new Error("filename parameter is required"); + } + const original_ref = { + filename: filenameRef + }; + let original_subfolder = original_url.searchParams.get("subfolder"); + if (original_subfolder) original_ref.subfolder = original_subfolder; + let original_type = original_url.searchParams.get("type"); + if (original_type) original_ref.type = original_type; + formData.append("image", blob, filename); + formData.append("original_ref", JSON.stringify(original_ref)); + formData.append("type", "input"); + formData.append("subfolder", "clipspace"); + this.uiManager.setSaveButtonText("Saving"); + this.uiManager.setSaveButtonEnabled(false); + this.keyboardManager.removeListeners(); + const maxRetries = 3; + let attempt = 0; + let success = false; + while (attempt < maxRetries && !success) { + try { + await this.uploadMask(item, formData); + success = true; + } catch (error) { + console.error(`Upload attempt ${attempt + 1} failed:`, error); + attempt++; + if (attempt < maxRetries) { + console.log("Retrying upload..."); + } else { + console.log("Max retries reached. Upload failed."); + } + } + } + if (success) { + ComfyApp.onClipspaceEditorSave(); + this.close(); + this.isOpen = false; + } else { + this.uiManager.setSaveButtonText("Save"); + this.uiManager.setSaveButtonEnabled(true); + this.keyboardManager.addListeners(); + } + } + getMessageBroker() { + return this.messageBroker; + } + // Helper function to convert a data URL to a Blob object + dataURLToBlob(dataURL) { + const parts = dataURL.split(";base64,"); + const contentType = parts[0].split(":")[1]; + const byteString = atob(parts[1]); + const arrayBuffer = new ArrayBuffer(byteString.length); + const uint8Array = new Uint8Array(arrayBuffer); + for (let i = 0; i < byteString.length; i++) { + uint8Array[i] = byteString.charCodeAt(i); + } + return new Blob([arrayBuffer], { type: contentType }); + } + async uploadMask(filepath, formData, retries = 3) { + if (retries <= 0) { + throw new Error("Max retries reached"); + return; + } + await api.fetchApi("/upload/mask", { + method: "POST", + body: formData + }).then((response) => { + if (!response.ok) { + console.log("Failed to upload mask:", response); + this.uploadMask(filepath, formData, 2); + } + }).catch((error) => { + console.error("Error:", error); + }); + try { + const selectedIndex = ComfyApp.clipspace?.selectedIndex; + if (ComfyApp.clipspace?.imgs && selectedIndex !== void 0) { + const newImage = new Image(); + newImage.src = api.apiURL( + "/view?" + new URLSearchParams(filepath).toString() + app.getPreviewFormatParam() + app.getRandParam() + ); + ComfyApp.clipspace.imgs[selectedIndex] = newImage; + if (ComfyApp.clipspace.images) { + ComfyApp.clipspace.images[selectedIndex] = filepath; + } + } + } catch (err2) { + console.warn("Failed to update clipspace image:", err2); + } + ClipspaceDialog.invalidatePreview(); + } +} +class CanvasHistory { + static { + __name(this, "CanvasHistory"); + } + maskEditor; + messageBroker; + canvas; + ctx; + states = []; + currentStateIndex = -1; + maxStates = 20; + initialized = false; + constructor(maskEditor, maxStates = 20) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.maxStates = maxStates; + this.createListeners(); + } + async pullCanvas() { + this.canvas = await this.messageBroker.pull("maskCanvas"); + this.ctx = await this.messageBroker.pull("maskCtx"); + } + createListeners() { + this.messageBroker.subscribe("saveState", () => this.saveState()); + this.messageBroker.subscribe("undo", () => this.undo()); + this.messageBroker.subscribe("redo", () => this.redo()); + } + clearStates() { + this.states = []; + this.currentStateIndex = -1; + this.initialized = false; + } + async saveInitialState() { + await this.pullCanvas(); + if (!this.canvas.width || !this.canvas.height) { + requestAnimationFrame(() => this.saveInitialState()); + return; + } + this.clearStates(); + const state = this.ctx.getImageData( + 0, + 0, + this.canvas.width, + this.canvas.height + ); + this.states.push(state); + this.currentStateIndex = 0; + this.initialized = true; + } + saveState() { + if (!this.initialized || this.currentStateIndex === -1) { + this.saveInitialState(); + return; + } + this.states = this.states.slice(0, this.currentStateIndex + 1); + const state = this.ctx.getImageData( + 0, + 0, + this.canvas.width, + this.canvas.height + ); + this.states.push(state); + this.currentStateIndex++; + if (this.states.length > this.maxStates) { + this.states.shift(); + this.currentStateIndex--; + } + } + undo() { + if (this.states.length > 1 && this.currentStateIndex > 0) { + this.currentStateIndex--; + this.restoreState(this.states[this.currentStateIndex]); + } else { + alert("No more undo states available"); + } + } + redo() { + if (this.states.length > 1 && this.currentStateIndex < this.states.length - 1) { + this.currentStateIndex++; + this.restoreState(this.states[this.currentStateIndex]); + } else { + alert("No more redo states available"); + } + } + restoreState(state) { + if (state && this.initialized) { + this.ctx.putImageData(state, 0, 0); + } + } +} +class PaintBucketTool { + static { + __name(this, "PaintBucketTool"); + } + maskEditor; + messageBroker; + canvas; + ctx; + width = null; + height = null; + imageData = null; + data = null; + tolerance = 5; + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.createListeners(); + this.addPullTopics(); + } + initPaintBucketTool() { + this.pullCanvas(); + } + async pullCanvas() { + this.canvas = await this.messageBroker.pull("maskCanvas"); + this.ctx = await this.messageBroker.pull("maskCtx"); + } + createListeners() { + this.messageBroker.subscribe( + "setPaintBucketTolerance", + (tolerance) => this.setTolerance(tolerance) + ); + this.messageBroker.subscribe( + "paintBucketFill", + (point) => this.floodFill(point) + ); + this.messageBroker.subscribe("invert", () => this.invertMask()); + } + addPullTopics() { + this.messageBroker.createPullTopic( + "getTolerance", + async () => this.tolerance + ); + } + getPixel(x, y) { + return this.data[(y * this.width + x) * 4 + 3]; + } + setPixel(x, y, alpha, color) { + const index = (y * this.width + x) * 4; + this.data[index] = color.r; + this.data[index + 1] = color.g; + this.data[index + 2] = color.b; + this.data[index + 3] = alpha; + } + shouldProcessPixel(currentAlpha, targetAlpha, tolerance, isFillMode) { + if (currentAlpha === -1) return false; + if (isFillMode) { + return currentAlpha !== 255 && Math.abs(currentAlpha - targetAlpha) <= tolerance; + } else { + return currentAlpha === 255 || Math.abs(currentAlpha - targetAlpha) <= tolerance; + } + } + async floodFill(point) { + let startX = Math.floor(point.x); + let startY = Math.floor(point.y); + this.width = this.canvas.width; + this.height = this.canvas.height; + if (startX < 0 || startX >= this.width || startY < 0 || startY >= this.height) { + return; + } + this.imageData = this.ctx.getImageData(0, 0, this.width, this.height); + this.data = this.imageData.data; + const targetAlpha = this.getPixel(startX, startY); + const isFillMode = targetAlpha !== 255; + if (targetAlpha === -1) return; + const maskColor = await this.messageBroker.pull("getMaskColor"); + const stack = []; + const visited = new Uint8Array(this.width * this.height); + if (this.shouldProcessPixel( + targetAlpha, + targetAlpha, + this.tolerance, + isFillMode + )) { + stack.push([startX, startY]); + } + while (stack.length > 0) { + const [x, y] = stack.pop(); + const visitedIndex = y * this.width + x; + if (visited[visitedIndex]) continue; + const currentAlpha = this.getPixel(x, y); + if (!this.shouldProcessPixel( + currentAlpha, + targetAlpha, + this.tolerance, + isFillMode + )) { + continue; + } + visited[visitedIndex] = 1; + this.setPixel(x, y, isFillMode ? 255 : 0, maskColor); + const checkNeighbor = /* @__PURE__ */ __name((nx, ny) => { + if (nx < 0 || nx >= this.width || ny < 0 || ny >= this.height) return; + if (!visited[ny * this.width + nx]) { + const alpha = this.getPixel(nx, ny); + if (this.shouldProcessPixel( + alpha, + targetAlpha, + this.tolerance, + isFillMode + )) { + stack.push([nx, ny]); + } + } + }, "checkNeighbor"); + checkNeighbor(x - 1, y); + checkNeighbor(x + 1, y); + checkNeighbor(x, y - 1); + checkNeighbor(x, y + 1); + } + this.ctx.putImageData(this.imageData, 0, 0); + this.imageData = null; + this.data = null; + } + setTolerance(tolerance) { + this.tolerance = tolerance; + } + getTolerance() { + return this.tolerance; + } + //invert mask + invertMask() { + const imageData = this.ctx.getImageData( + 0, + 0, + this.canvas.width, + this.canvas.height + ); + const data = imageData.data; + let maskR = 0, maskG = 0, maskB = 0; + for (let i = 0; i < data.length; i += 4) { + if (data[i + 3] > 0) { + maskR = data[i]; + maskG = data[i + 1]; + maskB = data[i + 2]; + break; + } + } + for (let i = 0; i < data.length; i += 4) { + const alpha = data[i + 3]; + data[i + 3] = 255 - alpha; + if (alpha === 0) { + data[i] = maskR; + data[i + 1] = maskG; + data[i + 2] = maskB; + } + } + this.ctx.putImageData(imageData, 0, 0); + this.messageBroker.publish("saveState"); + } +} +class ColorSelectTool { + static { + __name(this, "ColorSelectTool"); + } + maskEditor; + messageBroker; + width = null; + height = null; + canvas; + maskCTX; + imageCTX; + maskData = null; + imageData = null; + tolerance = 20; + livePreview = false; + lastPoint = null; + colorComparisonMethod = "simple"; + applyWholeImage = false; + maskBoundry = false; + maskTolerance = 0; + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.createListeners(); + this.addPullTopics(); + } + async initColorSelectTool() { + await this.pullCanvas(); + } + async pullCanvas() { + this.canvas = await this.messageBroker.pull("imgCanvas"); + this.maskCTX = await this.messageBroker.pull("maskCtx"); + this.imageCTX = await this.messageBroker.pull("imageCtx"); + } + createListeners() { + this.messageBroker.subscribe( + "colorSelectFill", + (point) => this.fillColorSelection(point) + ); + this.messageBroker.subscribe( + "setColorSelectTolerance", + (tolerance) => this.setTolerance(tolerance) + ); + this.messageBroker.subscribe( + "setLivePreview", + (livePreview) => this.setLivePreview(livePreview) + ); + this.messageBroker.subscribe( + "setColorComparisonMethod", + (method) => this.setComparisonMethod(method) + ); + this.messageBroker.subscribe("clearLastPoint", () => this.clearLastPoint()); + this.messageBroker.subscribe( + "setWholeImage", + (applyWholeImage) => this.setApplyWholeImage(applyWholeImage) + ); + this.messageBroker.subscribe( + "setMaskBoundary", + (maskBoundry) => this.setMaskBoundary(maskBoundry) + ); + this.messageBroker.subscribe( + "setMaskTolerance", + (maskTolerance) => this.setMaskTolerance(maskTolerance) + ); + } + async addPullTopics() { + this.messageBroker.createPullTopic( + "getLivePreview", + async () => this.livePreview + ); + } + getPixel(x, y) { + const index = (y * this.width + x) * 4; + return { + r: this.imageData[index], + g: this.imageData[index + 1], + b: this.imageData[index + 2] + }; + } + getMaskAlpha(x, y) { + return this.maskData[(y * this.width + x) * 4 + 3]; + } + isPixelInRange(pixel, target) { + switch (this.colorComparisonMethod) { + case "simple": + return this.isPixelInRangeSimple(pixel, target); + case "hsl": + return this.isPixelInRangeHSL(pixel, target); + case "lab": + return this.isPixelInRangeLab(pixel, target); + default: + return this.isPixelInRangeSimple(pixel, target); + } + } + isPixelInRangeSimple(pixel, target) { + const distance = Math.sqrt( + Math.pow(pixel.r - target.r, 2) + Math.pow(pixel.g - target.g, 2) + Math.pow(pixel.b - target.b, 2) + ); + return distance <= this.tolerance; + } + isPixelInRangeHSL(pixel, target) { + const pixelHSL = this.rgbToHSL(pixel.r, pixel.g, pixel.b); + const targetHSL = this.rgbToHSL(target.r, target.g, target.b); + const hueDiff = Math.abs(pixelHSL.h - targetHSL.h); + const satDiff = Math.abs(pixelHSL.s - targetHSL.s); + const lightDiff = Math.abs(pixelHSL.l - targetHSL.l); + const distance = Math.sqrt( + Math.pow(hueDiff / 360 * 255, 2) + Math.pow(satDiff / 100 * 255, 2) + Math.pow(lightDiff / 100 * 255, 2) + ); + return distance <= this.tolerance; + } + rgbToHSL(r, g, b) { + r /= 255; + g /= 255; + b /= 255; + const max2 = Math.max(r, g, b); + const min = Math.min(r, g, b); + let h = 0, s = 0, l = (max2 + min) / 2; + if (max2 !== min) { + const d = max2 - min; + s = l > 0.5 ? d / (2 - max2 - min) : d / (max2 + min); + switch (max2) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + return { + h: h * 360, + s: s * 100, + l: l * 100 + }; + } + isPixelInRangeLab(pixel, target) { + const pixelLab = this.rgbToLab(pixel); + const targetLab = this.rgbToLab(target); + const deltaE = Math.sqrt( + Math.pow(pixelLab.l - targetLab.l, 2) + Math.pow(pixelLab.a - targetLab.a, 2) + Math.pow(pixelLab.b - targetLab.b, 2) + ); + const normalizedDeltaE = deltaE / 100 * 255; + return normalizedDeltaE <= this.tolerance; + } + rgbToLab(rgb) { + let r = rgb.r / 255; + let g = rgb.g / 255; + let b = rgb.b / 255; + r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92; + g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92; + b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; + r *= 100; + g *= 100; + b *= 100; + const x = r * 0.4124 + g * 0.3576 + b * 0.1805; + const y = r * 0.2126 + g * 0.7152 + b * 0.0722; + const z = r * 0.0193 + g * 0.1192 + b * 0.9505; + const xn = 95.047; + const yn = 100; + const zn = 108.883; + const xyz = [x / xn, y / yn, z / zn]; + for (let i = 0; i < xyz.length; i++) { + xyz[i] = xyz[i] > 8856e-6 ? Math.pow(xyz[i], 1 / 3) : 7.787 * xyz[i] + 16 / 116; + } + return { + l: 116 * xyz[1] - 16, + a: 500 * (xyz[0] - xyz[1]), + b: 200 * (xyz[1] - xyz[2]) + }; + } + setPixel(x, y, alpha, color) { + const index = (y * this.width + x) * 4; + this.maskData[index] = color.r; + this.maskData[index + 1] = color.g; + this.maskData[index + 2] = color.b; + this.maskData[index + 3] = alpha; + } + async fillColorSelection(point) { + this.width = this.canvas.width; + this.height = this.canvas.height; + this.lastPoint = point; + const maskData = this.maskCTX.getImageData(0, 0, this.width, this.height); + this.maskData = maskData.data; + this.imageData = this.imageCTX.getImageData( + 0, + 0, + this.width, + this.height + ).data; + if (this.applyWholeImage) { + const targetPixel = this.getPixel( + Math.floor(point.x), + Math.floor(point.y) + ); + const maskColor = await this.messageBroker.pull("getMaskColor"); + const width = this.width; + const height = this.height; + const CHUNK_SIZE = 1e4; + for (let i = 0; i < width * height; i += CHUNK_SIZE) { + const endIndex = Math.min(i + CHUNK_SIZE, width * height); + for (let pixelIndex = i; pixelIndex < endIndex; pixelIndex++) { + const x = pixelIndex % width; + const y = Math.floor(pixelIndex / width); + if (this.isPixelInRange(this.getPixel(x, y), targetPixel)) { + this.setPixel(x, y, 255, maskColor); + } + } + await new Promise((resolve) => setTimeout(resolve, 0)); + } + } else { + let startX = Math.floor(point.x); + let startY = Math.floor(point.y); + if (startX < 0 || startX >= this.width || startY < 0 || startY >= this.height) { + return; + } + const pixel = this.getPixel(startX, startY); + const stack = []; + const visited = new Uint8Array(this.width * this.height); + stack.push([startX, startY]); + const maskColor = await this.messageBroker.pull("getMaskColor"); + while (stack.length > 0) { + const [x, y] = stack.pop(); + const visitedIndex = y * this.width + x; + if (visited[visitedIndex] || !this.isPixelInRange(this.getPixel(x, y), pixel)) { + continue; + } + visited[visitedIndex] = 1; + this.setPixel(x, y, 255, maskColor); + if (x > 0 && !visited[y * this.width + (x - 1)] && this.isPixelInRange(this.getPixel(x - 1, y), pixel)) { + if (!this.maskBoundry || 255 - this.getMaskAlpha(x - 1, y) > this.maskTolerance) { + stack.push([x - 1, y]); + } + } + if (x < this.width - 1 && !visited[y * this.width + (x + 1)] && this.isPixelInRange(this.getPixel(x + 1, y), pixel)) { + if (!this.maskBoundry || 255 - this.getMaskAlpha(x + 1, y) > this.maskTolerance) { + stack.push([x + 1, y]); + } + } + if (y > 0 && !visited[(y - 1) * this.width + x] && this.isPixelInRange(this.getPixel(x, y - 1), pixel)) { + if (!this.maskBoundry || 255 - this.getMaskAlpha(x, y - 1) > this.maskTolerance) { + stack.push([x, y - 1]); + } + } + if (y < this.height - 1 && !visited[(y + 1) * this.width + x] && this.isPixelInRange(this.getPixel(x, y + 1), pixel)) { + if (!this.maskBoundry || 255 - this.getMaskAlpha(x, y + 1) > this.maskTolerance) { + stack.push([x, y + 1]); + } + } + } + } + this.maskCTX.putImageData(maskData, 0, 0); + this.messageBroker.publish("saveState"); + this.maskData = null; + this.imageData = null; + } + setTolerance(tolerance) { + this.tolerance = tolerance; + if (this.lastPoint && this.livePreview) { + this.messageBroker.publish("undo"); + this.fillColorSelection(this.lastPoint); + } + } + setLivePreview(livePreview) { + this.livePreview = livePreview; + } + setComparisonMethod(method) { + this.colorComparisonMethod = method; + if (this.lastPoint && this.livePreview) { + this.messageBroker.publish("undo"); + this.fillColorSelection(this.lastPoint); + } + } + clearLastPoint() { + this.lastPoint = null; + } + setApplyWholeImage(applyWholeImage) { + this.applyWholeImage = applyWholeImage; + } + setMaskBoundary(maskBoundry) { + this.maskBoundry = maskBoundry; + } + setMaskTolerance(maskTolerance) { + this.maskTolerance = maskTolerance; + } +} +class BrushTool { + static { + __name(this, "BrushTool"); + } + brushSettings; + //this saves the current brush settings + maskBlendMode; + isDrawing = false; + isDrawingLine = false; + lineStartPoint = null; + smoothingPrecision = 10; + smoothingCordsArray = []; + smoothingLastDrawTime; + maskCtx = null; + initialDraw = true; + brushStrokeCanvas = null; + brushStrokeCtx = null; + //brush adjustment + isBrushAdjusting = false; + brushPreviewGradient = null; + initialPoint = null; + useDominantAxis = false; + brushAdjustmentSpeed = 1; + maskEditor; + messageBroker; + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.createListeners(); + this.addPullTopics(); + this.useDominantAxis = app.extensionManager.setting.get( + "Comfy.MaskEditor.UseDominantAxis" + ); + this.brushAdjustmentSpeed = app.extensionManager.setting.get( + "Comfy.MaskEditor.BrushAdjustmentSpeed" + ); + this.brushSettings = { + size: 10, + opacity: 100, + hardness: 1, + type: "arc" + /* Arc */ + }; + this.maskBlendMode = "black"; + } + createListeners() { + this.messageBroker.subscribe( + "setBrushSize", + (size) => this.setBrushSize(size) + ); + this.messageBroker.subscribe( + "setBrushOpacity", + (opacity) => this.setBrushOpacity(opacity) + ); + this.messageBroker.subscribe( + "setBrushHardness", + (hardness) => this.setBrushHardness(hardness) + ); + this.messageBroker.subscribe( + "setBrushShape", + (type) => this.setBrushType(type) + ); + this.messageBroker.subscribe( + "setBrushSmoothingPrecision", + (precision) => this.setBrushSmoothingPrecision(precision) + ); + this.messageBroker.subscribe( + "brushAdjustmentStart", + (event) => this.startBrushAdjustment(event) + ); + this.messageBroker.subscribe( + "brushAdjustment", + (event) => this.handleBrushAdjustment(event) + ); + this.messageBroker.subscribe( + "drawStart", + (event) => this.startDrawing(event) + ); + this.messageBroker.subscribe( + "draw", + (event) => this.handleDrawing(event) + ); + this.messageBroker.subscribe( + "drawEnd", + (event) => this.drawEnd(event) + ); + } + addPullTopics() { + this.messageBroker.createPullTopic( + "brushSize", + async () => this.brushSettings.size + ); + this.messageBroker.createPullTopic( + "brushOpacity", + async () => this.brushSettings.opacity + ); + this.messageBroker.createPullTopic( + "brushHardness", + async () => this.brushSettings.hardness + ); + this.messageBroker.createPullTopic( + "brushType", + async () => this.brushSettings.type + ); + this.messageBroker.createPullTopic( + "maskBlendMode", + async () => this.maskBlendMode + ); + this.messageBroker.createPullTopic( + "brushSettings", + async () => this.brushSettings + ); + } + async createBrushStrokeCanvas() { + if (this.brushStrokeCanvas !== null) { + return; + } + const maskCanvas = await this.messageBroker.pull("maskCanvas"); + const canvas = document.createElement("canvas"); + canvas.width = maskCanvas.width; + canvas.height = maskCanvas.height; + this.brushStrokeCanvas = canvas; + this.brushStrokeCtx = canvas.getContext("2d"); + } + async startDrawing(event) { + this.isDrawing = true; + let compositionOp; + let currentTool = await this.messageBroker.pull("currentTool"); + let coords = { x: event.offsetX, y: event.offsetY }; + let coords_canvas = await this.messageBroker.pull("screenToCanvas", coords); + await this.createBrushStrokeCanvas(); + if (currentTool === "eraser" || event.buttons == 2) { + compositionOp = "destination-out"; + } else { + compositionOp = "source-over"; + } + if (event.shiftKey && this.lineStartPoint) { + this.isDrawingLine = true; + this.drawLine(this.lineStartPoint, coords_canvas, compositionOp); + } else { + this.isDrawingLine = false; + this.init_shape(compositionOp); + this.draw_shape(coords_canvas); + } + this.lineStartPoint = coords_canvas; + this.smoothingCordsArray = [coords_canvas]; + this.smoothingLastDrawTime = /* @__PURE__ */ new Date(); + } + async handleDrawing(event) { + var diff = performance.now() - this.smoothingLastDrawTime.getTime(); + let coords = { x: event.offsetX, y: event.offsetY }; + let coords_canvas = await this.messageBroker.pull("screenToCanvas", coords); + let currentTool = await this.messageBroker.pull("currentTool"); + if (diff > 20 && !this.isDrawing) + requestAnimationFrame(() => { + this.init_shape( + "source-over" + /* SourceOver */ + ); + this.draw_shape(coords_canvas); + this.smoothingCordsArray.push(coords_canvas); + }); + else + requestAnimationFrame(() => { + if (currentTool === "eraser" || event.buttons == 2) { + this.init_shape( + "destination-out" + /* DestinationOut */ + ); + } else { + this.init_shape( + "source-over" + /* SourceOver */ + ); + } + this.drawWithBetterSmoothing(coords_canvas); + }); + this.smoothingLastDrawTime = /* @__PURE__ */ new Date(); + } + async drawEnd(event) { + const coords = { x: event.offsetX, y: event.offsetY }; + const coords_canvas = await this.messageBroker.pull( + "screenToCanvas", + coords + ); + if (this.isDrawing) { + this.isDrawing = false; + this.messageBroker.publish("saveState"); + this.lineStartPoint = coords_canvas; + this.initialDraw = true; + } + } + drawWithBetterSmoothing(point) { + if (!this.smoothingCordsArray) { + this.smoothingCordsArray = []; + } + const opacityConstant = 1 / (1 + Math.exp(3)); + const interpolatedOpacity = 1 / (1 + Math.exp(-6 * (this.brushSettings.opacity - 0.5))) - opacityConstant; + this.smoothingCordsArray.push(point); + const POINTS_NR = 5; + if (this.smoothingCordsArray.length < POINTS_NR) { + return; + } + let totalLength = 0; + const points = this.smoothingCordsArray; + const len = points.length - 1; + let dx, dy; + for (let i = 0; i < len; i++) { + dx = points[i + 1].x - points[i].x; + dy = points[i + 1].y - points[i].y; + totalLength += Math.sqrt(dx * dx + dy * dy); + } + const distanceBetweenPoints = this.brushSettings.size / this.smoothingPrecision * 6; + const stepNr = Math.ceil(totalLength / distanceBetweenPoints); + let interpolatedPoints = points; + if (stepNr > 0) { + interpolatedPoints = this.generateEquidistantPoints( + this.smoothingCordsArray, + distanceBetweenPoints + // Distance between interpolated points + ); + } + if (!this.initialDraw) { + const spliceIndex = interpolatedPoints.findIndex( + (point2) => point2.x === this.smoothingCordsArray[2].x && point2.y === this.smoothingCordsArray[2].y + ); + if (spliceIndex !== -1) { + interpolatedPoints = interpolatedPoints.slice(spliceIndex + 1); + } + } + for (const point2 of interpolatedPoints) { + this.draw_shape(point2, interpolatedOpacity); + } + if (!this.initialDraw) { + this.smoothingCordsArray = this.smoothingCordsArray.slice(2); + } else { + this.initialDraw = false; + } + } + async drawLine(p1, p2, compositionOp) { + const brush_size = await this.messageBroker.pull("brushSize"); + const distance = Math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2); + const steps = Math.ceil( + distance / (brush_size / this.smoothingPrecision * 4) + ); + const interpolatedOpacity = 1 / (1 + Math.exp(-6 * (this.brushSettings.opacity - 0.5))) - 1 / (1 + Math.exp(3)); + this.init_shape(compositionOp); + for (let i = 0; i <= steps; i++) { + const t2 = i / steps; + const x = p1.x + (p2.x - p1.x) * t2; + const y = p1.y + (p2.y - p1.y) * t2; + const point = { x, y }; + this.draw_shape(point, interpolatedOpacity); + } + } + //brush adjustment + async startBrushAdjustment(event) { + event.preventDefault(); + const coords = { x: event.offsetX, y: event.offsetY }; + let coords_canvas = await this.messageBroker.pull("screenToCanvas", coords); + this.messageBroker.publish("setBrushPreviewGradientVisibility", true); + this.initialPoint = coords_canvas; + this.isBrushAdjusting = true; + return; + } + async handleBrushAdjustment(event) { + const coords = { x: event.offsetX, y: event.offsetY }; + const brushDeadZone = 5; + let coords_canvas = await this.messageBroker.pull("screenToCanvas", coords); + const delta_x = coords_canvas.x - this.initialPoint.x; + const delta_y = coords_canvas.y - this.initialPoint.y; + const effectiveDeltaX = Math.abs(delta_x) < brushDeadZone ? 0 : delta_x; + const effectiveDeltaY = Math.abs(delta_y) < brushDeadZone ? 0 : delta_y; + let finalDeltaX = effectiveDeltaX; + let finalDeltaY = effectiveDeltaY; + console.log(this.useDominantAxis); + if (this.useDominantAxis) { + const ratio = Math.abs(effectiveDeltaX) / Math.abs(effectiveDeltaY); + const threshold = 2; + if (ratio > threshold) { + finalDeltaY = 0; + } else if (ratio < 1 / threshold) { + finalDeltaX = 0; + } + } + const cappedDeltaX = Math.max(-100, Math.min(100, finalDeltaX)); + const cappedDeltaY = Math.max(-100, Math.min(100, finalDeltaY)); + const sizeDelta = cappedDeltaX / 40; + const hardnessDelta = cappedDeltaY / 800; + const newSize = Math.max( + 1, + Math.min( + 100, + this.brushSettings.size + cappedDeltaX / 35 * this.brushAdjustmentSpeed + ) + ); + const newHardness = Math.max( + 0, + Math.min( + 1, + this.brushSettings.hardness - cappedDeltaY / 4e3 * this.brushAdjustmentSpeed + ) + ); + this.brushSettings.size = newSize; + this.brushSettings.hardness = newHardness; + this.messageBroker.publish("updateBrushPreview"); + } + //helper functions + async draw_shape(point, overrideOpacity) { + const brushSettings = this.brushSettings; + const maskCtx = this.maskCtx || await this.messageBroker.pull("maskCtx"); + const brushType = await this.messageBroker.pull("brushType"); + const maskColor = await this.messageBroker.pull("getMaskColor"); + const size = brushSettings.size; + const sliderOpacity = brushSettings.opacity; + const opacity = overrideOpacity == void 0 ? sliderOpacity : overrideOpacity; + const hardness = brushSettings.hardness; + const x = point.x; + const y = point.y; + const extendedSize = size * (2 - hardness); + let gradient = maskCtx.createRadialGradient(x, y, 0, x, y, extendedSize); + const isErasing = maskCtx.globalCompositeOperation === "destination-out"; + if (hardness === 1) { + console.log(sliderOpacity, opacity); + gradient.addColorStop( + 0, + isErasing ? `rgba(255, 255, 255, ${opacity})` : `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})` + ); + gradient.addColorStop( + 1, + isErasing ? `rgba(255, 255, 255, ${opacity})` : `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})` + ); + } else { + let softness = 1 - hardness; + let innerStop = Math.max(0, hardness - softness); + let outerStop = size / extendedSize; + if (isErasing) { + gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`); + gradient.addColorStop(innerStop, `rgba(255, 255, 255, ${opacity})`); + gradient.addColorStop(outerStop, `rgba(255, 255, 255, ${opacity / 2})`); + gradient.addColorStop(1, `rgba(255, 255, 255, 0)`); + } else { + gradient.addColorStop( + 0, + `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})` + ); + gradient.addColorStop( + innerStop, + `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})` + ); + gradient.addColorStop( + outerStop, + `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity / 2})` + ); + gradient.addColorStop( + 1, + `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, 0)` + ); + } + } + maskCtx.fillStyle = gradient; + maskCtx.beginPath(); + if (brushType === "rect") { + maskCtx.rect( + x - extendedSize, + y - extendedSize, + extendedSize * 2, + extendedSize * 2 + ); + } else { + maskCtx.arc(x, y, extendedSize, 0, Math.PI * 2, false); + } + maskCtx.fill(); + } + async init_shape(compositionOperation) { + const maskBlendMode = await this.messageBroker.pull("maskBlendMode"); + const maskCtx = this.maskCtx || await this.messageBroker.pull("maskCtx"); + maskCtx.beginPath(); + if (compositionOperation == "source-over") { + maskCtx.fillStyle = maskBlendMode; + maskCtx.globalCompositeOperation = "source-over"; + } else if (compositionOperation == "destination-out") { + maskCtx.globalCompositeOperation = "destination-out"; + } + } + calculateCubicSplinePoints(points, numSegments = 10) { + const result = []; + const xCoords = points.map((p) => p.x); + const yCoords = points.map((p) => p.y); + const xDerivatives = this.calculateSplineCoefficients(xCoords); + const yDerivatives = this.calculateSplineCoefficients(yCoords); + for (let i = 0; i < points.length - 1; i++) { + const p0 = points[i]; + const p1 = points[i + 1]; + const d0x = xDerivatives[i]; + const d1x = xDerivatives[i + 1]; + const d0y = yDerivatives[i]; + const d1y = yDerivatives[i + 1]; + for (let t2 = 0; t2 <= numSegments; t2++) { + const t_normalized = t2 / numSegments; + const h00 = 2 * t_normalized ** 3 - 3 * t_normalized ** 2 + 1; + const h10 = t_normalized ** 3 - 2 * t_normalized ** 2 + t_normalized; + const h01 = -2 * t_normalized ** 3 + 3 * t_normalized ** 2; + const h11 = t_normalized ** 3 - t_normalized ** 2; + const x = h00 * p0.x + h10 * d0x + h01 * p1.x + h11 * d1x; + const y = h00 * p0.y + h10 * d0y + h01 * p1.y + h11 * d1y; + result.push({ x, y }); + } + } + return result; + } + generateEvenlyDistributedPoints(splinePoints, numPoints) { + const distances = [0]; + for (let i = 1; i < splinePoints.length; i++) { + const dx = splinePoints[i].x - splinePoints[i - 1].x; + const dy = splinePoints[i].y - splinePoints[i - 1].y; + const dist = Math.hypot(dx, dy); + distances.push(distances[i - 1] + dist); + } + const totalLength = distances[distances.length - 1]; + const interval = totalLength / (numPoints - 1); + const result = []; + let currentIndex = 0; + for (let i = 0; i < numPoints; i++) { + const targetDistance = i * interval; + while (currentIndex < distances.length - 1 && distances[currentIndex + 1] < targetDistance) { + currentIndex++; + } + const t2 = (targetDistance - distances[currentIndex]) / (distances[currentIndex + 1] - distances[currentIndex]); + const x = splinePoints[currentIndex].x + t2 * (splinePoints[currentIndex + 1].x - splinePoints[currentIndex].x); + const y = splinePoints[currentIndex].y + t2 * (splinePoints[currentIndex + 1].y - splinePoints[currentIndex].y); + result.push({ x, y }); + } + return result; + } + generateEquidistantPoints(points, distance) { + const result = []; + const cumulativeDistances = [0]; + for (let i = 1; i < points.length; i++) { + const dx = points[i].x - points[i - 1].x; + const dy = points[i].y - points[i - 1].y; + const dist = Math.hypot(dx, dy); + cumulativeDistances[i] = cumulativeDistances[i - 1] + dist; + } + const totalLength = cumulativeDistances[cumulativeDistances.length - 1]; + const numPoints = Math.floor(totalLength / distance); + for (let i = 0; i <= numPoints; i++) { + const targetDistance = i * distance; + let idx = 0; + while (idx < cumulativeDistances.length - 1 && cumulativeDistances[idx + 1] < targetDistance) { + idx++; + } + if (idx >= points.length - 1) { + result.push(points[points.length - 1]); + continue; + } + const d0 = cumulativeDistances[idx]; + const d1 = cumulativeDistances[idx + 1]; + const t2 = (targetDistance - d0) / (d1 - d0); + const x = points[idx].x + t2 * (points[idx + 1].x - points[idx].x); + const y = points[idx].y + t2 * (points[idx + 1].y - points[idx].y); + result.push({ x, y }); + } + return result; + } + calculateSplineCoefficients(values) { + const n = values.length - 1; + const matrix = new Array(n + 1).fill(0).map(() => new Array(n + 1).fill(0)); + const rhs = new Array(n + 1).fill(0); + for (let i = 1; i < n; i++) { + matrix[i][i - 1] = 1; + matrix[i][i] = 4; + matrix[i][i + 1] = 1; + rhs[i] = 3 * (values[i + 1] - values[i - 1]); + } + matrix[0][0] = 2; + matrix[0][1] = 1; + matrix[n][n - 1] = 1; + matrix[n][n] = 2; + rhs[0] = 3 * (values[1] - values[0]); + rhs[n] = 3 * (values[n] - values[n - 1]); + for (let i = 1; i <= n; i++) { + const m = matrix[i][i - 1] / matrix[i - 1][i - 1]; + matrix[i][i] -= m * matrix[i - 1][i]; + rhs[i] -= m * rhs[i - 1]; + } + const solution = new Array(n + 1); + solution[n] = rhs[n] / matrix[n][n]; + for (let i = n - 1; i >= 0; i--) { + solution[i] = (rhs[i] - matrix[i][i + 1] * solution[i + 1]) / matrix[i][i]; + } + return solution; + } + setBrushSize(size) { + this.brushSettings.size = size; + } + setBrushOpacity(opacity) { + this.brushSettings.opacity = opacity; + } + setBrushHardness(hardness) { + this.brushSettings.hardness = hardness; + } + setBrushType(type) { + this.brushSettings.type = type; + } + setBrushSmoothingPrecision(precision) { + this.smoothingPrecision = precision; + } +} +class UIManager { + static { + __name(this, "UIManager"); + } + rootElement; + brush; + brushPreviewGradient; + maskCtx; + imageCtx; + maskCanvas; + imgCanvas; + brushSettingsHTML; + paintBucketSettingsHTML; + colorSelectSettingsHTML; + maskOpacitySlider; + brushHardnessSlider; + brushSizeSlider; + brushOpacitySlider; + sidebarImage; + saveButton; + toolPanel; + sidePanel; + pointerZone; + canvasBackground; + canvasContainer; + image; + imageURL; + darkMode = true; + maskEditor; + messageBroker; + mask_opacity = 1; + maskBlendMode = "black"; + zoomTextHTML; + dimensionsTextHTML; + constructor(rootElement, maskEditor) { + this.rootElement = rootElement; + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.addListeners(); + this.addPullTopics(); + } + addListeners() { + this.messageBroker.subscribe( + "updateBrushPreview", + async () => this.updateBrushPreview() + ); + this.messageBroker.subscribe( + "paintBucketCursor", + (isPaintBucket) => this.handlePaintBucketCursor(isPaintBucket) + ); + this.messageBroker.subscribe( + "panCursor", + (isPan) => this.handlePanCursor(isPan) + ); + this.messageBroker.subscribe( + "setBrushVisibility", + (isVisible) => this.setBrushVisibility(isVisible) + ); + this.messageBroker.subscribe( + "setBrushPreviewGradientVisibility", + (isVisible) => this.setBrushPreviewGradientVisibility(isVisible) + ); + this.messageBroker.subscribe("updateCursor", () => this.updateCursor()); + this.messageBroker.subscribe( + "setZoomText", + (text) => this.setZoomText(text) + ); + } + addPullTopics() { + this.messageBroker.createPullTopic( + "maskCanvas", + async () => this.maskCanvas + ); + this.messageBroker.createPullTopic("maskCtx", async () => this.maskCtx); + this.messageBroker.createPullTopic("imageCtx", async () => this.imageCtx); + this.messageBroker.createPullTopic("imgCanvas", async () => this.imgCanvas); + this.messageBroker.createPullTopic( + "screenToCanvas", + async (coords) => this.screenToCanvas(coords) + ); + this.messageBroker.createPullTopic( + "getCanvasContainer", + async () => this.canvasContainer + ); + this.messageBroker.createPullTopic( + "getMaskColor", + async () => this.getMaskColor() + ); + } + async setlayout() { + this.detectLightMode(); + var user_ui = await this.createUI(); + var canvasContainer = this.createBackgroundUI(); + var brush = await this.createBrush(); + await this.setBrushBorderRadius(); + this.setBrushOpacity(1); + this.rootElement.appendChild(canvasContainer); + this.rootElement.appendChild(user_ui); + document.body.appendChild(brush); + } + async createUI() { + var ui_container = document.createElement("div"); + ui_container.id = "maskEditor_uiContainer"; + var top_bar = await this.createTopBar(); + var ui_horizontal_container = document.createElement("div"); + ui_horizontal_container.id = "maskEditor_uiHorizontalContainer"; + var side_panel_container = await this.createSidePanel(); + var pointer_zone = this.createPointerZone(); + var tool_panel = this.createToolPanel(); + ui_horizontal_container.appendChild(tool_panel); + ui_horizontal_container.appendChild(pointer_zone); + ui_horizontal_container.appendChild(side_panel_container); + ui_container.appendChild(top_bar); + ui_container.appendChild(ui_horizontal_container); + return ui_container; + } + createBackgroundUI() { + const canvasContainer = document.createElement("div"); + canvasContainer.id = "maskEditorCanvasContainer"; + const imgCanvas = document.createElement("canvas"); + imgCanvas.id = "imageCanvas"; + const maskCanvas = document.createElement("canvas"); + maskCanvas.id = "maskCanvas"; + const canvas_background = document.createElement("div"); + canvas_background.id = "canvasBackground"; + canvasContainer.appendChild(imgCanvas); + canvasContainer.appendChild(maskCanvas); + canvasContainer.appendChild(canvas_background); + this.imgCanvas = imgCanvas; + this.maskCanvas = maskCanvas; + this.canvasContainer = canvasContainer; + this.canvasBackground = canvas_background; + let maskCtx = maskCanvas.getContext("2d", { willReadFrequently: true }); + if (maskCtx) { + this.maskCtx = maskCtx; + } + let imgCtx = imgCanvas.getContext("2d", { willReadFrequently: true }); + if (imgCtx) { + this.imageCtx = imgCtx; + } + this.setEventHandler(); + this.imgCanvas.style.position = "absolute"; + this.maskCanvas.style.position = "absolute"; + this.imgCanvas.style.top = "200"; + this.imgCanvas.style.left = "0"; + this.maskCanvas.style.top = this.imgCanvas.style.top; + this.maskCanvas.style.left = this.imgCanvas.style.left; + const maskCanvasStyle = this.getMaskCanvasStyle(); + this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode; + this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString(); + return canvasContainer; + } + async setBrushBorderRadius() { + const brushSettings = await this.messageBroker.pull("brushSettings"); + if (brushSettings.type === "rect") { + this.brush.style.borderRadius = "0%"; + this.brush.style.MozBorderRadius = "0%"; + this.brush.style.WebkitBorderRadius = "0%"; + } else { + this.brush.style.borderRadius = "50%"; + this.brush.style.MozBorderRadius = "50%"; + this.brush.style.WebkitBorderRadius = "50%"; + } + } + async initUI() { + this.saveButton.innerText = "Save"; + this.saveButton.disabled = false; + await this.setImages(this.imgCanvas); + } + async createSidePanel() { + const side_panel = this.createContainer(true); + side_panel.id = "maskEditor_sidePanel"; + const brush_settings = await this.createBrushSettings(); + brush_settings.id = "maskEditor_brushSettings"; + this.brushSettingsHTML = brush_settings; + const paint_bucket_settings = await this.createPaintBucketSettings(); + paint_bucket_settings.id = "maskEditor_paintBucketSettings"; + this.paintBucketSettingsHTML = paint_bucket_settings; + const color_select_settings = await this.createColorSelectSettings(); + color_select_settings.id = "maskEditor_colorSelectSettings"; + this.colorSelectSettingsHTML = color_select_settings; + const image_layer_settings = await this.createImageLayerSettings(); + const separator = this.createSeparator(); + side_panel.appendChild(brush_settings); + side_panel.appendChild(paint_bucket_settings); + side_panel.appendChild(color_select_settings); + side_panel.appendChild(separator); + side_panel.appendChild(image_layer_settings); + return side_panel; + } + async createBrushSettings() { + const shapeColor = this.darkMode ? "maskEditor_brushShape_dark" : "maskEditor_brushShape_light"; + const brush_settings_container = this.createContainer(true); + const brush_settings_title = this.createHeadline("Brush Settings"); + const brush_shape_outer_container = this.createContainer(true); + const brush_shape_title = this.createContainerTitle("Brush Shape"); + const brush_shape_container = this.createContainer(false); + const accentColor = this.darkMode ? "maskEditor_accent_bg_dark" : "maskEditor_accent_bg_light"; + brush_shape_container.classList.add(accentColor); + brush_shape_container.classList.add("maskEditor_layerRow"); + const circle_shape = document.createElement("div"); + circle_shape.id = "maskEditor_sidePanelBrushShapeCircle"; + circle_shape.classList.add(shapeColor); + circle_shape.style.background = "var(--p-button-text-primary-color)"; + circle_shape.addEventListener("click", () => { + this.messageBroker.publish( + "setBrushShape", + "arc" + /* Arc */ + ); + this.setBrushBorderRadius(); + circle_shape.style.background = "var(--p-button-text-primary-color)"; + square_shape.style.background = ""; + }); + const square_shape = document.createElement("div"); + square_shape.id = "maskEditor_sidePanelBrushShapeSquare"; + square_shape.classList.add(shapeColor); + square_shape.style.background = ""; + square_shape.addEventListener("click", () => { + this.messageBroker.publish( + "setBrushShape", + "rect" + /* Rect */ + ); + this.setBrushBorderRadius(); + square_shape.style.background = "var(--p-button-text-primary-color)"; + circle_shape.style.background = ""; + }); + brush_shape_container.appendChild(circle_shape); + brush_shape_container.appendChild(square_shape); + brush_shape_outer_container.appendChild(brush_shape_title); + brush_shape_outer_container.appendChild(brush_shape_container); + const thicknesSliderObj = this.createSlider( + "Thickness", + 1, + 100, + 1, + 10, + (event, value) => { + this.messageBroker.publish("setBrushSize", parseInt(value)); + this.updateBrushPreview(); + } + ); + this.brushSizeSlider = thicknesSliderObj.slider; + const opacitySliderObj = this.createSlider( + "Opacity", + 0, + 1, + 0.01, + 0.7, + (event, value) => { + this.messageBroker.publish("setBrushOpacity", parseFloat(value)); + this.updateBrushPreview(); + } + ); + this.brushOpacitySlider = opacitySliderObj.slider; + const hardnessSliderObj = this.createSlider( + "Hardness", + 0, + 1, + 0.01, + 1, + (event, value) => { + this.messageBroker.publish("setBrushHardness", parseFloat(value)); + this.updateBrushPreview(); + } + ); + this.brushHardnessSlider = hardnessSliderObj.slider; + const brushSmoothingPrecisionSliderObj = this.createSlider( + "Smoothing Precision", + 1, + 100, + 1, + 10, + (event, value) => { + this.messageBroker.publish( + "setBrushSmoothingPrecision", + parseInt(value) + ); + } + ); + brush_settings_container.appendChild(brush_settings_title); + brush_settings_container.appendChild(brush_shape_outer_container); + brush_settings_container.appendChild(thicknesSliderObj.container); + brush_settings_container.appendChild(opacitySliderObj.container); + brush_settings_container.appendChild(hardnessSliderObj.container); + brush_settings_container.appendChild( + brushSmoothingPrecisionSliderObj.container + ); + return brush_settings_container; + } + async createPaintBucketSettings() { + const paint_bucket_settings_container = this.createContainer(true); + const paint_bucket_settings_title = this.createHeadline( + "Paint Bucket Settings" + ); + const tolerance = await this.messageBroker.pull("getTolerance"); + const paintBucketToleranceSliderObj = this.createSlider( + "Tolerance", + 0, + 255, + 1, + tolerance, + (event, value) => { + this.messageBroker.publish("setPaintBucketTolerance", parseInt(value)); + } + ); + paint_bucket_settings_container.appendChild(paint_bucket_settings_title); + paint_bucket_settings_container.appendChild( + paintBucketToleranceSliderObj.container + ); + return paint_bucket_settings_container; + } + async createColorSelectSettings() { + const color_select_settings_container = this.createContainer(true); + const color_select_settings_title = this.createHeadline( + "Color Select Settings" + ); + var tolerance = await this.messageBroker.pull("getTolerance"); + const colorSelectToleranceSliderObj = this.createSlider( + "Tolerance", + 0, + 255, + 1, + tolerance, + (event, value) => { + this.messageBroker.publish("setColorSelectTolerance", parseInt(value)); + } + ); + const livePreviewToggle = this.createToggle( + "Live Preview", + (event, value) => { + this.messageBroker.publish("setLivePreview", value); + } + ); + const wholeImageToggle = this.createToggle( + "Apply to Whole Image", + (event, value) => { + this.messageBroker.publish("setWholeImage", value); + } + ); + const methodOptions = Object.values(ColorComparisonMethod); + const methodSelect = this.createDropdown( + "Method", + methodOptions, + (event, value) => { + this.messageBroker.publish("setColorComparisonMethod", value); + } + ); + const maskBoundaryToggle = this.createToggle( + "Stop at mask", + (event, value) => { + this.messageBroker.publish("setMaskBoundary", value); + } + ); + const maskToleranceSliderObj = this.createSlider( + "Mask Tolerance", + 0, + 255, + 1, + 0, + (event, value) => { + this.messageBroker.publish("setMaskTolerance", parseInt(value)); + } + ); + color_select_settings_container.appendChild(color_select_settings_title); + color_select_settings_container.appendChild( + colorSelectToleranceSliderObj.container + ); + color_select_settings_container.appendChild(livePreviewToggle); + color_select_settings_container.appendChild(wholeImageToggle); + color_select_settings_container.appendChild(methodSelect); + color_select_settings_container.appendChild(maskBoundaryToggle); + color_select_settings_container.appendChild( + maskToleranceSliderObj.container + ); + return color_select_settings_container; + } + async createImageLayerSettings() { + const accentColor = this.darkMode ? "maskEditor_accent_bg_dark" : "maskEditor_accent_bg_light"; + const image_layer_settings_container = this.createContainer(true); + const image_layer_settings_title = this.createHeadline("Layers"); + const mask_layer_title = this.createContainerTitle("Mask Layer"); + const mask_layer_container = this.createContainer(false); + mask_layer_container.classList.add(accentColor); + mask_layer_container.classList.add("maskEditor_layerRow"); + const mask_layer_visibility_checkbox = document.createElement("input"); + mask_layer_visibility_checkbox.setAttribute("type", "checkbox"); + mask_layer_visibility_checkbox.checked = true; + mask_layer_visibility_checkbox.classList.add( + "maskEditor_sidePanelLayerCheckbox" + ); + mask_layer_visibility_checkbox.addEventListener("change", (event) => { + if (!event.target.checked) { + this.maskCanvas.style.opacity = "0"; + } else { + this.maskCanvas.style.opacity = String(this.mask_opacity); + } + }); + var mask_layer_image_container = document.createElement("div"); + mask_layer_image_container.classList.add( + "maskEditor_sidePanelLayerPreviewContainer" + ); + mask_layer_image_container.innerHTML = ' '; + var blending_options = ["black", "white", "negative"]; + const sidePanelDropdownAccent = this.darkMode ? "maskEditor_sidePanelDropdown_dark" : "maskEditor_sidePanelDropdown_light"; + var mask_layer_dropdown = document.createElement("select"); + mask_layer_dropdown.classList.add(sidePanelDropdownAccent); + mask_layer_dropdown.classList.add(sidePanelDropdownAccent); + blending_options.forEach((option) => { + var option_element = document.createElement("option"); + option_element.value = option; + option_element.innerText = option; + mask_layer_dropdown.appendChild(option_element); + if (option == this.maskBlendMode) { + option_element.selected = true; + } + }); + mask_layer_dropdown.addEventListener("change", (event) => { + const selectedValue = event.target.value; + this.maskBlendMode = selectedValue; + this.updateMaskColor(); + }); + mask_layer_container.appendChild(mask_layer_visibility_checkbox); + mask_layer_container.appendChild(mask_layer_image_container); + mask_layer_container.appendChild(mask_layer_dropdown); + const mask_layer_opacity_sliderObj = this.createSlider( + "Mask Opacity", + 0, + 1, + 0.01, + this.mask_opacity, + (event, value) => { + this.mask_opacity = parseFloat(value); + this.maskCanvas.style.opacity = String(this.mask_opacity); + if (this.mask_opacity == 0) { + mask_layer_visibility_checkbox.checked = false; + } else { + mask_layer_visibility_checkbox.checked = true; + } + } + ); + this.maskOpacitySlider = mask_layer_opacity_sliderObj.slider; + const image_layer_title = this.createContainerTitle("Image Layer"); + const image_layer_container = this.createContainer(false); + image_layer_container.classList.add(accentColor); + image_layer_container.classList.add("maskEditor_layerRow"); + const image_layer_visibility_checkbox = document.createElement("input"); + image_layer_visibility_checkbox.setAttribute("type", "checkbox"); + image_layer_visibility_checkbox.classList.add( + "maskEditor_sidePanelLayerCheckbox" + ); + image_layer_visibility_checkbox.checked = true; + image_layer_visibility_checkbox.addEventListener("change", (event) => { + if (!event.target.checked) { + this.imgCanvas.style.opacity = "0"; + } else { + this.imgCanvas.style.opacity = "1"; + } + }); + const image_layer_image_container = document.createElement("div"); + image_layer_image_container.classList.add( + "maskEditor_sidePanelLayerPreviewContainer" + ); + const image_layer_image = document.createElement("img"); + image_layer_image.id = "maskEditor_sidePanelImageLayerImage"; + image_layer_image.src = ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src ?? ""; + this.sidebarImage = image_layer_image; + image_layer_image_container.appendChild(image_layer_image); + image_layer_container.appendChild(image_layer_visibility_checkbox); + image_layer_container.appendChild(image_layer_image_container); + image_layer_settings_container.appendChild(image_layer_settings_title); + image_layer_settings_container.appendChild(mask_layer_title); + image_layer_settings_container.appendChild(mask_layer_container); + image_layer_settings_container.appendChild( + mask_layer_opacity_sliderObj.container + ); + image_layer_settings_container.appendChild(image_layer_title); + image_layer_settings_container.appendChild(image_layer_container); + return image_layer_settings_container; + } + createHeadline(title) { + var headline = document.createElement("h3"); + headline.classList.add("maskEditor_sidePanelTitle"); + headline.innerText = title; + return headline; + } + createContainer(flexDirection) { + var container = document.createElement("div"); + if (flexDirection) { + container.classList.add("maskEditor_sidePanelContainerColumn"); + } else { + container.classList.add("maskEditor_sidePanelContainerRow"); + } + return container; + } + createContainerTitle(title) { + var container_title = document.createElement("span"); + container_title.classList.add("maskEditor_sidePanelSubTitle"); + container_title.innerText = title; + return container_title; + } + createSlider(title, min, max2, step, value, callback) { + var slider_container = this.createContainer(true); + var slider_title = this.createContainerTitle(title); + var slider = document.createElement("input"); + slider.classList.add("maskEditor_sidePanelBrushRange"); + slider.setAttribute("type", "range"); + slider.setAttribute("min", String(min)); + slider.setAttribute("max", String(max2)); + slider.setAttribute("step", String(step)); + slider.setAttribute("value", String(value)); + slider.addEventListener("input", (event) => { + callback(event, event.target.value); + }); + slider_container.appendChild(slider_title); + slider_container.appendChild(slider); + return { container: slider_container, slider }; + } + createToggle(title, callback) { + var outer_Container = this.createContainer(false); + var toggle_title = this.createContainerTitle(title); + var toggle_container = document.createElement("label"); + toggle_container.classList.add("maskEditor_sidePanelToggleContainer"); + var toggle_checkbox = document.createElement("input"); + toggle_checkbox.setAttribute("type", "checkbox"); + toggle_checkbox.classList.add("maskEditor_sidePanelToggleCheckbox"); + toggle_checkbox.addEventListener("change", (event) => { + callback(event, event.target.checked); + }); + var toggleAccentColor = this.darkMode ? "maskEditor_toggle_bg_dark" : "maskEditor_toggle_bg_light"; + var toggle_switch = document.createElement("div"); + toggle_switch.classList.add("maskEditor_sidePanelToggleSwitch"); + toggle_switch.classList.add(toggleAccentColor); + toggle_container.appendChild(toggle_checkbox); + toggle_container.appendChild(toggle_switch); + outer_Container.appendChild(toggle_title); + outer_Container.appendChild(toggle_container); + return outer_Container; + } + createDropdown(title, options, callback) { + const sidePanelDropdownAccent = this.darkMode ? "maskEditor_sidePanelDropdown_dark" : "maskEditor_sidePanelDropdown_light"; + var dropdown_container = this.createContainer(false); + var dropdown_title = this.createContainerTitle(title); + var dropdown = document.createElement("select"); + dropdown.classList.add(sidePanelDropdownAccent); + dropdown.classList.add("maskEditor_containerDropdown"); + options.forEach((option) => { + var option_element = document.createElement("option"); + option_element.value = option; + option_element.innerText = option; + dropdown.appendChild(option_element); + }); + dropdown.addEventListener("change", (event) => { + callback(event, event.target.value); + }); + dropdown_container.appendChild(dropdown_title); + dropdown_container.appendChild(dropdown); + return dropdown_container; + } + createSeparator() { + var separator = document.createElement("div"); + separator.classList.add("maskEditor_sidePanelSeparator"); + return separator; + } + //---------------- + async createTopBar() { + const buttonAccentColor = this.darkMode ? "maskEditor_topPanelButton_dark" : "maskEditor_topPanelButton_light"; + const iconButtonAccentColor = this.darkMode ? "maskEditor_topPanelIconButton_dark" : "maskEditor_topPanelIconButton_light"; + var top_bar = document.createElement("div"); + top_bar.id = "maskEditor_topBar"; + var top_bar_title_container = document.createElement("div"); + top_bar_title_container.id = "maskEditor_topBarTitleContainer"; + var top_bar_title = document.createElement("h1"); + top_bar_title.id = "maskEditor_topBarTitle"; + top_bar_title.innerText = "ComfyUI"; + top_bar_title_container.appendChild(top_bar_title); + var top_bar_shortcuts_container = document.createElement("div"); + top_bar_shortcuts_container.id = "maskEditor_topBarShortcutsContainer"; + var top_bar_undo_button = document.createElement("div"); + top_bar_undo_button.id = "maskEditor_topBarUndoButton"; + top_bar_undo_button.classList.add(iconButtonAccentColor); + top_bar_undo_button.innerHTML = ' '; + top_bar_undo_button.addEventListener("click", () => { + this.messageBroker.publish("undo"); + }); + var top_bar_redo_button = document.createElement("div"); + top_bar_redo_button.id = "maskEditor_topBarRedoButton"; + top_bar_redo_button.classList.add(iconButtonAccentColor); + top_bar_redo_button.innerHTML = ' '; + top_bar_redo_button.addEventListener("click", () => { + this.messageBroker.publish("redo"); + }); + var top_bar_invert_button = document.createElement("button"); + top_bar_invert_button.id = "maskEditor_topBarInvertButton"; + top_bar_invert_button.classList.add(buttonAccentColor); + top_bar_invert_button.innerText = "Invert"; + top_bar_invert_button.addEventListener("click", () => { + this.messageBroker.publish("invert"); + }); + var top_bar_clear_button = document.createElement("button"); + top_bar_clear_button.id = "maskEditor_topBarClearButton"; + top_bar_clear_button.classList.add(buttonAccentColor); + top_bar_clear_button.innerText = "Clear"; + top_bar_clear_button.addEventListener("click", () => { + this.maskCtx.clearRect( + 0, + 0, + this.maskCanvas.width, + this.maskCanvas.height + ); + this.messageBroker.publish("saveState"); + }); + var top_bar_save_button = document.createElement("button"); + top_bar_save_button.id = "maskEditor_topBarSaveButton"; + top_bar_save_button.classList.add(buttonAccentColor); + top_bar_save_button.innerText = "Save"; + this.saveButton = top_bar_save_button; + top_bar_save_button.addEventListener("click", () => { + this.maskEditor.save(); + }); + var top_bar_cancel_button = document.createElement("button"); + top_bar_cancel_button.id = "maskEditor_topBarCancelButton"; + top_bar_cancel_button.classList.add(buttonAccentColor); + top_bar_cancel_button.innerText = "Cancel"; + top_bar_cancel_button.addEventListener("click", () => { + this.maskEditor.close(); + }); + top_bar_shortcuts_container.appendChild(top_bar_undo_button); + top_bar_shortcuts_container.appendChild(top_bar_redo_button); + top_bar_shortcuts_container.appendChild(top_bar_invert_button); + top_bar_shortcuts_container.appendChild(top_bar_clear_button); + top_bar_shortcuts_container.appendChild(top_bar_save_button); + top_bar_shortcuts_container.appendChild(top_bar_cancel_button); + top_bar.appendChild(top_bar_title_container); + top_bar.appendChild(top_bar_shortcuts_container); + return top_bar; + } + createToolPanel() { + var tool_panel = document.createElement("div"); + tool_panel.id = "maskEditor_toolPanel"; + this.toolPanel = tool_panel; + var toolPanelHoverAccent = this.darkMode ? "maskEditor_toolPanelContainerDark" : "maskEditor_toolPanelContainerLight"; + var toolElements = []; + var toolPanel_brushToolContainer = document.createElement("div"); + toolPanel_brushToolContainer.classList.add("maskEditor_toolPanelContainer"); + toolPanel_brushToolContainer.classList.add( + "maskEditor_toolPanelContainerSelected" + ); + toolPanel_brushToolContainer.classList.add(toolPanelHoverAccent); + toolPanel_brushToolContainer.innerHTML = ` + + + + + `; + toolElements.push(toolPanel_brushToolContainer); + toolPanel_brushToolContainer.addEventListener("click", () => { + this.messageBroker.publish( + "setTool", + "pen" + /* Pen */ + ); + for (let toolElement of toolElements) { + if (toolElement != toolPanel_brushToolContainer) { + toolElement.classList.remove("maskEditor_toolPanelContainerSelected"); + } else { + toolElement.classList.add("maskEditor_toolPanelContainerSelected"); + this.brushSettingsHTML.style.display = "flex"; + this.colorSelectSettingsHTML.style.display = "none"; + this.paintBucketSettingsHTML.style.display = "none"; + } + } + this.messageBroker.publish( + "setTool", + "pen" + /* Pen */ + ); + this.pointerZone.style.cursor = "none"; + }); + var toolPanel_brushToolIndicator = document.createElement("div"); + toolPanel_brushToolIndicator.classList.add("maskEditor_toolPanelIndicator"); + toolPanel_brushToolContainer.appendChild(toolPanel_brushToolIndicator); + var toolPanel_eraserToolContainer = document.createElement("div"); + toolPanel_eraserToolContainer.classList.add("maskEditor_toolPanelContainer"); + toolPanel_eraserToolContainer.classList.add(toolPanelHoverAccent); + toolPanel_eraserToolContainer.innerHTML = ` + + + + + + + + `; + toolElements.push(toolPanel_eraserToolContainer); + toolPanel_eraserToolContainer.addEventListener("click", () => { + this.messageBroker.publish( + "setTool", + "eraser" + /* Eraser */ + ); + for (let toolElement of toolElements) { + if (toolElement != toolPanel_eraserToolContainer) { + toolElement.classList.remove("maskEditor_toolPanelContainerSelected"); + } else { + toolElement.classList.add("maskEditor_toolPanelContainerSelected"); + this.brushSettingsHTML.style.display = "flex"; + this.colorSelectSettingsHTML.style.display = "none"; + this.paintBucketSettingsHTML.style.display = "none"; + } + } + this.messageBroker.publish( + "setTool", + "eraser" + /* Eraser */ + ); + this.pointerZone.style.cursor = "none"; + }); + var toolPanel_eraserToolIndicator = document.createElement("div"); + toolPanel_eraserToolIndicator.classList.add("maskEditor_toolPanelIndicator"); + toolPanel_eraserToolContainer.appendChild(toolPanel_eraserToolIndicator); + var toolPanel_paintBucketToolContainer = document.createElement("div"); + toolPanel_paintBucketToolContainer.classList.add( + "maskEditor_toolPanelContainer" + ); + toolPanel_paintBucketToolContainer.classList.add(toolPanelHoverAccent); + toolPanel_paintBucketToolContainer.innerHTML = ` + + + + + + `; + toolElements.push(toolPanel_paintBucketToolContainer); + toolPanel_paintBucketToolContainer.addEventListener("click", () => { + this.messageBroker.publish( + "setTool", + "paintBucket" + /* PaintBucket */ + ); + for (let toolElement of toolElements) { + if (toolElement != toolPanel_paintBucketToolContainer) { + toolElement.classList.remove("maskEditor_toolPanelContainerSelected"); + } else { + toolElement.classList.add("maskEditor_toolPanelContainerSelected"); + this.brushSettingsHTML.style.display = "none"; + this.colorSelectSettingsHTML.style.display = "none"; + this.paintBucketSettingsHTML.style.display = "flex"; + } + } + this.messageBroker.publish( + "setTool", + "paintBucket" + /* PaintBucket */ + ); + this.pointerZone.style.cursor = "url('/cursor/paintBucket.png') 30 25, auto"; + this.brush.style.opacity = "0"; + }); + var toolPanel_paintBucketToolIndicator = document.createElement("div"); + toolPanel_paintBucketToolIndicator.classList.add( + "maskEditor_toolPanelIndicator" + ); + toolPanel_paintBucketToolContainer.appendChild( + toolPanel_paintBucketToolIndicator + ); + var toolPanel_colorSelectToolContainer = document.createElement("div"); + toolPanel_colorSelectToolContainer.classList.add( + "maskEditor_toolPanelContainer" + ); + toolPanel_colorSelectToolContainer.classList.add(toolPanelHoverAccent); + toolPanel_colorSelectToolContainer.innerHTML = ` + + + + `; + toolElements.push(toolPanel_colorSelectToolContainer); + toolPanel_colorSelectToolContainer.addEventListener("click", () => { + this.messageBroker.publish("setTool", "colorSelect"); + for (let toolElement of toolElements) { + if (toolElement != toolPanel_colorSelectToolContainer) { + toolElement.classList.remove("maskEditor_toolPanelContainerSelected"); + } else { + toolElement.classList.add("maskEditor_toolPanelContainerSelected"); + this.brushSettingsHTML.style.display = "none"; + this.paintBucketSettingsHTML.style.display = "none"; + this.colorSelectSettingsHTML.style.display = "flex"; + } + } + this.messageBroker.publish( + "setTool", + "colorSelect" + /* ColorSelect */ + ); + this.pointerZone.style.cursor = "url('/cursor/colorSelect.png') 15 25, auto"; + this.brush.style.opacity = "0"; + }); + var toolPanel_colorSelectToolIndicator = document.createElement("div"); + toolPanel_colorSelectToolIndicator.classList.add( + "maskEditor_toolPanelIndicator" + ); + toolPanel_colorSelectToolContainer.appendChild( + toolPanel_colorSelectToolIndicator + ); + var toolPanel_zoomIndicator = document.createElement("div"); + toolPanel_zoomIndicator.classList.add("maskEditor_toolPanelZoomIndicator"); + toolPanel_zoomIndicator.classList.add(toolPanelHoverAccent); + var toolPanel_zoomText = document.createElement("span"); + toolPanel_zoomText.id = "maskEditor_toolPanelZoomText"; + toolPanel_zoomText.innerText = "100%"; + this.zoomTextHTML = toolPanel_zoomText; + var toolPanel_DimensionsText = document.createElement("span"); + toolPanel_DimensionsText.id = "maskEditor_toolPanelDimensionsText"; + toolPanel_DimensionsText.innerText = " "; + this.dimensionsTextHTML = toolPanel_DimensionsText; + toolPanel_zoomIndicator.appendChild(toolPanel_zoomText); + toolPanel_zoomIndicator.appendChild(toolPanel_DimensionsText); + toolPanel_zoomIndicator.addEventListener("click", () => { + this.messageBroker.publish("resetZoom"); + }); + tool_panel.appendChild(toolPanel_brushToolContainer); + tool_panel.appendChild(toolPanel_eraserToolContainer); + tool_panel.appendChild(toolPanel_paintBucketToolContainer); + tool_panel.appendChild(toolPanel_colorSelectToolContainer); + tool_panel.appendChild(toolPanel_zoomIndicator); + return tool_panel; + } + createPointerZone() { + const pointer_zone = document.createElement("div"); + pointer_zone.id = "maskEditor_pointerZone"; + this.pointerZone = pointer_zone; + pointer_zone.addEventListener("pointerdown", (event) => { + this.messageBroker.publish("pointerDown", event); + }); + pointer_zone.addEventListener("pointermove", (event) => { + this.messageBroker.publish("pointerMove", event); + }); + pointer_zone.addEventListener("pointerup", (event) => { + this.messageBroker.publish("pointerUp", event); + }); + pointer_zone.addEventListener("pointerleave", (event) => { + this.brush.style.opacity = "0"; + this.pointerZone.style.cursor = ""; + }); + pointer_zone.addEventListener("touchstart", (event) => { + this.messageBroker.publish("handleTouchStart", event); + }); + pointer_zone.addEventListener("touchmove", (event) => { + this.messageBroker.publish("handleTouchMove", event); + }); + pointer_zone.addEventListener("touchend", (event) => { + this.messageBroker.publish("handleTouchEnd", event); + }); + pointer_zone.addEventListener( + "wheel", + (event) => this.messageBroker.publish("wheel", event) + ); + pointer_zone.addEventListener( + "pointerenter", + async (event) => { + this.updateCursor(); + } + ); + return pointer_zone; + } + async screenToCanvas(clientPoint) { + const zoomRatio = await this.messageBroker.pull("zoomRatio"); + const canvasRect = this.maskCanvas.getBoundingClientRect(); + const offsetX = clientPoint.x - canvasRect.left + this.toolPanel.clientWidth; + const offsetY = clientPoint.y - canvasRect.top + 44; + const x = offsetX / zoomRatio; + const y = offsetY / zoomRatio; + return { x, y }; + } + setEventHandler() { + this.maskCanvas.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + this.rootElement.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + this.rootElement.addEventListener("dragstart", (event) => { + if (event.ctrlKey) { + event.preventDefault(); + } + }); + } + async createBrush() { + var brush = document.createElement("div"); + const brushSettings = await this.messageBroker.pull("brushSettings"); + brush.id = "maskEditor_brush"; + var brush_preview_gradient = document.createElement("div"); + brush_preview_gradient.id = "maskEditor_brushPreviewGradient"; + brush.appendChild(brush_preview_gradient); + this.brush = brush; + this.brushPreviewGradient = brush_preview_gradient; + return brush; + } + async setImages(imgCanvas) { + const imgCtx = imgCanvas.getContext("2d", { willReadFrequently: true }); + const maskCtx = this.maskCtx; + const maskCanvas = this.maskCanvas; + imgCtx.clearRect(0, 0, this.imgCanvas.width, this.imgCanvas.height); + maskCtx.clearRect(0, 0, this.maskCanvas.width, this.maskCanvas.height); + const alpha_url = new URL( + ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src ?? "" + ); + alpha_url.searchParams.delete("channel"); + alpha_url.searchParams.delete("preview"); + alpha_url.searchParams.set("channel", "a"); + let mask_image = await this.loadImage(alpha_url); + if (!ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src) { + throw new Error( + "Unable to access image source - clipspace or image is null" + ); + } + const rgb_url = new URL( + ComfyApp.clipspace.imgs[ComfyApp.clipspace.selectedIndex].src + ); + this.imageURL = rgb_url; + console.log(rgb_url); + rgb_url.searchParams.delete("channel"); + rgb_url.searchParams.set("channel", "rgb"); + this.image = new Image(); + this.image = await new Promise((resolve, reject) => { + const img = new Image(); + img.onload = () => resolve(img); + img.onerror = reject; + img.src = rgb_url.toString(); + }); + maskCanvas.width = this.image.width; + maskCanvas.height = this.image.height; + this.dimensionsTextHTML.innerText = `${this.image.width}x${this.image.height}`; + await this.invalidateCanvas(this.image, mask_image); + this.messageBroker.publish("initZoomPan", [this.image, this.rootElement]); + } + async invalidateCanvas(orig_image, mask_image) { + this.imgCanvas.width = orig_image.width; + this.imgCanvas.height = orig_image.height; + this.maskCanvas.width = orig_image.width; + this.maskCanvas.height = orig_image.height; + let imgCtx = this.imgCanvas.getContext("2d", { willReadFrequently: true }); + let maskCtx = this.maskCanvas.getContext("2d", { + willReadFrequently: true + }); + imgCtx.drawImage(orig_image, 0, 0, orig_image.width, orig_image.height); + await this.prepare_mask( + mask_image, + this.maskCanvas, + maskCtx, + await this.getMaskColor() + ); + } + async prepare_mask(image, maskCanvas, maskCtx, maskColor) { + maskCtx.drawImage(image, 0, 0, maskCanvas.width, maskCanvas.height); + const maskData = maskCtx.getImageData( + 0, + 0, + maskCanvas.width, + maskCanvas.height + ); + for (let i = 0; i < maskData.data.length; i += 4) { + const alpha = maskData.data[i + 3]; + maskData.data[i] = maskColor.r; + maskData.data[i + 1] = maskColor.g; + maskData.data[i + 2] = maskColor.b; + maskData.data[i + 3] = 255 - alpha; + } + maskCtx.globalCompositeOperation = "source-over"; + maskCtx.putImageData(maskData, 0, 0); + } + async updateMaskColor() { + const maskCanvasStyle = this.getMaskCanvasStyle(); + this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode; + this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString(); + const maskColor = await this.getMaskColor(); + this.maskCtx.fillStyle = `rgb(${maskColor.r}, ${maskColor.g}, ${maskColor.b})`; + this.setCanvasBackground(); + const maskData = this.maskCtx.getImageData( + 0, + 0, + this.maskCanvas.width, + this.maskCanvas.height + ); + for (let i = 0; i < maskData.data.length; i += 4) { + maskData.data[i] = maskColor.r; + maskData.data[i + 1] = maskColor.g; + maskData.data[i + 2] = maskColor.b; + } + this.maskCtx.putImageData(maskData, 0, 0); + } + getMaskCanvasStyle() { + if (this.maskBlendMode === "negative") { + return { + mixBlendMode: "difference", + opacity: "1" + }; + } else { + return { + mixBlendMode: "initial", + opacity: this.mask_opacity + }; + } + } + detectLightMode() { + this.darkMode = document.body.classList.contains("dark-theme"); + } + loadImage(imagePath) { + return new Promise((resolve, reject) => { + const image = new Image(); + image.onload = function() { + resolve(image); + }; + image.onerror = function(error) { + reject(error); + }; + image.src = imagePath.href; + }); + } + async updateBrushPreview() { + const cursorPoint = await this.messageBroker.pull("cursorPoint"); + const pan_offset = await this.messageBroker.pull("panOffset"); + const brushSettings = await this.messageBroker.pull("brushSettings"); + const zoom_ratio = await this.messageBroker.pull("zoomRatio"); + const centerX = cursorPoint.x + pan_offset.x; + const centerY = cursorPoint.y + pan_offset.y; + const brush = this.brush; + const hardness = brushSettings.hardness; + const extendedSize = brushSettings.size * (2 - hardness) * 2 * zoom_ratio; + this.brushSizeSlider.value = String(brushSettings.size); + this.brushHardnessSlider.value = String(hardness); + brush.style.width = extendedSize + "px"; + brush.style.height = extendedSize + "px"; + brush.style.left = centerX - extendedSize / 2 + "px"; + brush.style.top = centerY - extendedSize / 2 + "px"; + if (hardness === 1) { + this.brushPreviewGradient.style.background = "rgba(255, 0, 0, 0.5)"; + return; + } + const opacityStop = hardness / 4 + 0.25; + this.brushPreviewGradient.style.background = ` + radial-gradient( + circle, + rgba(255, 0, 0, 0.5) 0%, + rgba(255, 0, 0, ${opacityStop}) ${hardness * 100}%, + rgba(255, 0, 0, 0) 100% + ) + `; + } + getMaskBlendMode() { + return this.maskBlendMode; + } + setSidebarImage() { + this.sidebarImage.src = this.imageURL.href; + } + async getMaskColor() { + if (this.maskBlendMode === "black") { + return { r: 0, g: 0, b: 0 }; + } + if (this.maskBlendMode === "white") { + return { r: 255, g: 255, b: 255 }; + } + if (this.maskBlendMode === "negative") { + return { r: 255, g: 255, b: 255 }; + } + return { r: 0, g: 0, b: 0 }; + } + async getMaskFillStyle() { + const maskColor = await this.getMaskColor(); + return "rgb(" + maskColor.r + "," + maskColor.g + "," + maskColor.b + ")"; + } + async setCanvasBackground() { + if (this.maskBlendMode === "white") { + this.canvasBackground.style.background = "black"; + } else { + this.canvasBackground.style.background = "white"; + } + } + getMaskCanvas() { + return this.maskCanvas; + } + getImgCanvas() { + return this.imgCanvas; + } + getImage() { + return this.image; + } + setBrushOpacity(opacity) { + this.brush.style.opacity = String(opacity); + } + setSaveButtonEnabled(enabled) { + this.saveButton.disabled = !enabled; + } + setSaveButtonText(text) { + this.saveButton.innerText = text; + } + handlePaintBucketCursor(isPaintBucket) { + if (isPaintBucket) { + this.pointerZone.style.cursor = "url('/cursor/paintBucket.png') 30 25, auto"; + } else { + this.pointerZone.style.cursor = "none"; + } + } + handlePanCursor(isPanning) { + if (isPanning) { + this.pointerZone.style.cursor = "grabbing"; + } else { + this.pointerZone.style.cursor = "none"; + } + } + setBrushVisibility(visible) { + this.brush.style.opacity = visible ? "1" : "0"; + } + setBrushPreviewGradientVisibility(visible) { + this.brushPreviewGradient.style.display = visible ? "block" : "none"; + } + async updateCursor() { + const currentTool = await this.messageBroker.pull("currentTool"); + if (currentTool === "paintBucket") { + this.pointerZone.style.cursor = "url('/cursor/paintBucket.png') 30 25, auto"; + this.setBrushOpacity(0); + } else if (currentTool === "colorSelect") { + this.pointerZone.style.cursor = "url('/cursor/colorSelect.png') 15 25, auto"; + this.setBrushOpacity(0); + } else { + this.pointerZone.style.cursor = "none"; + this.setBrushOpacity(1); + } + this.updateBrushPreview(); + this.setBrushPreviewGradientVisibility(false); + } + setZoomText(zoomText) { + this.zoomTextHTML.innerText = zoomText; + } + setDimensionsText(dimensionsText) { + this.dimensionsTextHTML.innerText = dimensionsText; + } +} +class ToolManager { + static { + __name(this, "ToolManager"); + } + maskEditor; + messageBroker; + mouseDownPoint = null; + currentTool = "pen"; + isAdjustingBrush = false; + // is user adjusting brush size or hardness with alt + right mouse button + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.addListeners(); + this.addPullTopics(); + } + addListeners() { + this.messageBroker.subscribe("setTool", async (tool) => { + this.setTool(tool); + }); + this.messageBroker.subscribe("pointerDown", async (event) => { + this.handlePointerDown(event); + }); + this.messageBroker.subscribe("pointerMove", async (event) => { + this.handlePointerMove(event); + }); + this.messageBroker.subscribe("pointerUp", async (event) => { + this.handlePointerUp(event); + }); + this.messageBroker.subscribe("wheel", async (event) => { + this.handleWheelEvent(event); + }); + } + async addPullTopics() { + this.messageBroker.createPullTopic( + "currentTool", + async () => this.getCurrentTool() + ); + } + //tools + setTool(tool) { + this.currentTool = tool; + if (tool != "colorSelect") { + this.messageBroker.publish("clearLastPoint"); + } + } + getCurrentTool() { + return this.currentTool; + } + async handlePointerDown(event) { + event.preventDefault(); + if (event.pointerType == "touch") return; + var isSpacePressed = await this.messageBroker.pull("isKeyPressed", " "); + if (event.buttons === 4 || event.buttons === 1 && isSpacePressed) { + this.messageBroker.publish("panStart", event); + this.messageBroker.publish("setBrushVisibility", false); + return; + } + if (this.currentTool === "paintBucket" && event.button === 0) { + const offset = { x: event.offsetX, y: event.offsetY }; + const coords_canvas = await this.messageBroker.pull( + "screenToCanvas", + offset + ); + this.messageBroker.publish("paintBucketFill", coords_canvas); + this.messageBroker.publish("saveState"); + return; + } + if (this.currentTool === "colorSelect" && event.button === 0) { + const offset = { x: event.offsetX, y: event.offsetY }; + const coords_canvas = await this.messageBroker.pull( + "screenToCanvas", + offset + ); + this.messageBroker.publish("colorSelectFill", coords_canvas); + return; + } + if (event.altKey && event.button === 2) { + this.isAdjustingBrush = true; + this.messageBroker.publish("brushAdjustmentStart", event); + return; + } + var isDrawingTool = [ + "pen", + "eraser" + /* Eraser */ + ].includes(this.currentTool); + if ([0, 2].includes(event.button) && isDrawingTool) { + this.messageBroker.publish("drawStart", event); + return; + } + } + async handlePointerMove(event) { + event.preventDefault(); + if (event.pointerType == "touch") return; + const newCursorPoint = { x: event.clientX, y: event.clientY }; + this.messageBroker.publish("cursorPoint", newCursorPoint); + var isSpacePressed = await this.messageBroker.pull("isKeyPressed", " "); + this.messageBroker.publish("updateBrushPreview"); + if (event.buttons === 4 || event.buttons === 1 && isSpacePressed) { + this.messageBroker.publish("panMove", event); + return; + } + var isDrawingTool = [ + "pen", + "eraser" + /* Eraser */ + ].includes(this.currentTool); + if (!isDrawingTool) return; + if (this.isAdjustingBrush && (this.currentTool === "pen" || this.currentTool === "eraser") && event.altKey && event.buttons === 2) { + this.messageBroker.publish("brushAdjustment", event); + return; + } + if (event.buttons == 1 || event.buttons == 2) { + this.messageBroker.publish("draw", event); + return; + } + } + handlePointerUp(event) { + this.messageBroker.publish("panCursor", false); + if (event.pointerType === "touch") return; + this.messageBroker.publish("updateCursor"); + this.isAdjustingBrush = false; + this.messageBroker.publish("drawEnd", event); + this.mouseDownPoint = null; + } + handleWheelEvent(event) { + this.messageBroker.publish("zoom", event); + const newCursorPoint = { x: event.clientX, y: event.clientY }; + this.messageBroker.publish("cursorPoint", newCursorPoint); + } +} +class PanAndZoomManager { + static { + __name(this, "PanAndZoomManager"); + } + maskEditor; + messageBroker; + DOUBLE_TAP_DELAY = 300; + lastTwoFingerTap = 0; + isTouchZooming = false; + lastTouchZoomDistance = 0; + lastTouchMidPoint = { x: 0, y: 0 }; + lastTouchPoint = { x: 0, y: 0 }; + zoom_ratio = 1; + interpolatedZoomRatio = 1; + pan_offset = { x: 0, y: 0 }; + mouseDownPoint = null; + initialPan = { x: 0, y: 0 }; + canvasContainer = null; + maskCanvas = null; + rootElement = null; + image = null; + imageRootWidth = 0; + imageRootHeight = 0; + cursorPoint = { x: 0, y: 0 }; + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.addListeners(); + this.addPullTopics(); + } + addListeners() { + this.messageBroker.subscribe( + "initZoomPan", + async (args) => { + await this.initializeCanvasPanZoom(args[0], args[1]); + } + ); + this.messageBroker.subscribe("panStart", async (event) => { + this.handlePanStart(event); + }); + this.messageBroker.subscribe("panMove", async (event) => { + this.handlePanMove(event); + }); + this.messageBroker.subscribe("zoom", async (event) => { + this.zoom(event); + }); + this.messageBroker.subscribe("cursorPoint", async (point) => { + this.updateCursorPosition(point); + }); + this.messageBroker.subscribe( + "handleTouchStart", + async (event) => { + this.handleTouchStart(event); + } + ); + this.messageBroker.subscribe( + "handleTouchMove", + async (event) => { + this.handleTouchMove(event); + } + ); + this.messageBroker.subscribe( + "handleTouchEnd", + async (event) => { + this.handleTouchEnd(event); + } + ); + this.messageBroker.subscribe("resetZoom", async () => { + if (this.interpolatedZoomRatio === 1) return; + await this.smoothResetView(); + }); + } + addPullTopics() { + this.messageBroker.createPullTopic( + "cursorPoint", + async () => this.cursorPoint + ); + this.messageBroker.createPullTopic("zoomRatio", async () => this.zoom_ratio); + this.messageBroker.createPullTopic("panOffset", async () => this.pan_offset); + } + handleTouchStart(event) { + event.preventDefault(); + if (event.touches[0].touchType === "stylus") return; + this.messageBroker.publish("setBrushVisibility", false); + if (event.touches.length === 2) { + const currentTime = (/* @__PURE__ */ new Date()).getTime(); + const tapTimeDiff = currentTime - this.lastTwoFingerTap; + if (tapTimeDiff < this.DOUBLE_TAP_DELAY) { + this.handleDoubleTap(); + this.lastTwoFingerTap = 0; + } else { + this.lastTwoFingerTap = currentTime; + this.isTouchZooming = true; + this.lastTouchZoomDistance = this.getTouchDistance(event.touches); + const midpoint = this.getTouchMidpoint(event.touches); + this.lastTouchMidPoint = midpoint; + } + } else if (event.touches.length === 1) { + this.lastTouchPoint = { + x: event.touches[0].clientX, + y: event.touches[0].clientY + }; + } + } + async handleTouchMove(event) { + event.preventDefault(); + if (event.touches[0].touchType === "stylus") return; + this.lastTwoFingerTap = 0; + if (this.isTouchZooming && event.touches.length === 2) { + const newDistance = this.getTouchDistance(event.touches); + const zoomFactor = newDistance / this.lastTouchZoomDistance; + const oldZoom = this.zoom_ratio; + this.zoom_ratio = Math.max( + 0.2, + Math.min(10, this.zoom_ratio * zoomFactor) + ); + const newZoom = this.zoom_ratio; + const midpoint = this.getTouchMidpoint(event.touches); + if (this.lastTouchMidPoint) { + const deltaX = midpoint.x - this.lastTouchMidPoint.x; + const deltaY = midpoint.y - this.lastTouchMidPoint.y; + this.pan_offset.x += deltaX; + this.pan_offset.y += deltaY; + } + if (this.maskCanvas === null) { + this.maskCanvas = await this.messageBroker.pull("maskCanvas"); + } + const rect = this.maskCanvas.getBoundingClientRect(); + const touchX = midpoint.x - rect.left; + const touchY = midpoint.y - rect.top; + const scaleFactor = newZoom / oldZoom; + this.pan_offset.x += touchX - touchX * scaleFactor; + this.pan_offset.y += touchY - touchY * scaleFactor; + this.invalidatePanZoom(); + this.lastTouchZoomDistance = newDistance; + this.lastTouchMidPoint = midpoint; + } else if (event.touches.length === 1) { + this.handleSingleTouchPan(event.touches[0]); + } + } + handleTouchEnd(event) { + event.preventDefault(); + if (event.touches.length === 0 && event.touches[0].touchType === "stylus") { + return; + } + this.isTouchZooming = false; + this.lastTouchMidPoint = { x: 0, y: 0 }; + if (event.touches.length === 0) { + this.lastTouchPoint = { x: 0, y: 0 }; + } else if (event.touches.length === 1) { + this.lastTouchPoint = { + x: event.touches[0].clientX, + y: event.touches[0].clientY + }; + } + } + getTouchDistance(touches) { + const dx = touches[0].clientX - touches[1].clientX; + const dy = touches[0].clientY - touches[1].clientY; + return Math.sqrt(dx * dx + dy * dy); + } + getTouchMidpoint(touches) { + return { + x: (touches[0].clientX + touches[1].clientX) / 2, + y: (touches[0].clientY + touches[1].clientY) / 2 + }; + } + async handleSingleTouchPan(touch) { + if (this.lastTouchPoint === null) { + this.lastTouchPoint = { x: touch.clientX, y: touch.clientY }; + return; + } + const deltaX = touch.clientX - this.lastTouchPoint.x; + const deltaY = touch.clientY - this.lastTouchPoint.y; + this.pan_offset.x += deltaX; + this.pan_offset.y += deltaY; + await this.invalidatePanZoom(); + this.lastTouchPoint = { x: touch.clientX, y: touch.clientY }; + } + updateCursorPosition(clientPoint) { + var cursorX = clientPoint.x - this.pan_offset.x; + var cursorY = clientPoint.y - this.pan_offset.y; + this.cursorPoint = { x: cursorX, y: cursorY }; + } + //prob redundant + handleDoubleTap() { + this.messageBroker.publish("undo"); + } + async zoom(event) { + const cursorPoint = { x: event.clientX, y: event.clientY }; + const oldZoom = this.zoom_ratio; + const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9; + this.zoom_ratio = Math.max( + 0.2, + Math.min(10, this.zoom_ratio * zoomFactor) + ); + const newZoom = this.zoom_ratio; + const maskCanvas = await this.messageBroker.pull("maskCanvas"); + const rect = maskCanvas.getBoundingClientRect(); + const mouseX = cursorPoint.x - rect.left; + const mouseY = cursorPoint.y - rect.top; + console.log(oldZoom, newZoom); + const scaleFactor = newZoom / oldZoom; + this.pan_offset.x += mouseX - mouseX * scaleFactor; + this.pan_offset.y += mouseY - mouseY * scaleFactor; + await this.invalidatePanZoom(); + const newImageWidth = maskCanvas.clientWidth; + const zoomRatio = newImageWidth / this.imageRootWidth; + this.interpolatedZoomRatio = zoomRatio; + this.messageBroker.publish("setZoomText", `${Math.round(zoomRatio * 100)}%`); + this.updateCursorPosition(cursorPoint); + requestAnimationFrame(() => { + this.messageBroker.publish("updateBrushPreview"); + }); + } + async smoothResetView(duration = 500) { + const startZoom = this.zoom_ratio; + const startPan = { ...this.pan_offset }; + const sidePanelWidth = 220; + const toolPanelWidth = 64; + const topBarHeight = 44; + const availableWidth = this.rootElement.clientWidth - sidePanelWidth - toolPanelWidth; + const availableHeight = this.rootElement.clientHeight - topBarHeight; + const zoomRatioWidth = availableWidth / this.image.width; + const zoomRatioHeight = availableHeight / this.image.height; + const targetZoom = Math.min(zoomRatioWidth, zoomRatioHeight); + const aspectRatio = this.image.width / this.image.height; + let finalWidth = 0; + let finalHeight = 0; + const targetPan = { x: toolPanelWidth, y: topBarHeight }; + if (zoomRatioHeight > zoomRatioWidth) { + finalWidth = availableWidth; + finalHeight = finalWidth / aspectRatio; + targetPan.y = (availableHeight - finalHeight) / 2 + topBarHeight; + } else { + finalHeight = availableHeight; + finalWidth = finalHeight * aspectRatio; + targetPan.x = (availableWidth - finalWidth) / 2 + toolPanelWidth; + } + const startTime = performance.now(); + const animate = /* @__PURE__ */ __name((currentTime) => { + const elapsed = currentTime - startTime; + const progress = Math.min(elapsed / duration, 1); + const eased = 1 - Math.pow(1 - progress, 3); + const currentZoom = startZoom + (targetZoom - startZoom) * eased; + this.zoom_ratio = currentZoom; + this.pan_offset.x = startPan.x + (targetPan.x - startPan.x) * eased; + this.pan_offset.y = startPan.y + (targetPan.y - startPan.y) * eased; + this.invalidatePanZoom(); + const interpolatedZoomRatio = startZoom + (1 - startZoom) * eased; + this.messageBroker.publish( + "setZoomText", + `${Math.round(interpolatedZoomRatio * 100)}%` + ); + if (progress < 1) { + requestAnimationFrame(animate); + } + }, "animate"); + requestAnimationFrame(animate); + this.interpolatedZoomRatio = 1; + } + async initializeCanvasPanZoom(image, rootElement) { + let sidePanelWidth = 220; + const toolPanelWidth = 64; + let topBarHeight = 44; + this.rootElement = rootElement; + let availableWidth = rootElement.clientWidth - sidePanelWidth - toolPanelWidth; + let availableHeight = rootElement.clientHeight - topBarHeight; + let zoomRatioWidth = availableWidth / image.width; + let zoomRatioHeight = availableHeight / image.height; + let aspectRatio = image.width / image.height; + let finalWidth = 0; + let finalHeight = 0; + let pan_offset = { x: toolPanelWidth, y: topBarHeight }; + if (zoomRatioHeight > zoomRatioWidth) { + finalWidth = availableWidth; + finalHeight = finalWidth / aspectRatio; + pan_offset.y = (availableHeight - finalHeight) / 2 + topBarHeight; + } else { + finalHeight = availableHeight; + finalWidth = finalHeight * aspectRatio; + pan_offset.x = (availableWidth - finalWidth) / 2 + toolPanelWidth; + } + if (this.image === null) { + this.image = image; + } + this.imageRootWidth = finalWidth; + this.imageRootHeight = finalHeight; + this.zoom_ratio = Math.min(zoomRatioWidth, zoomRatioHeight); + this.pan_offset = pan_offset; + await this.invalidatePanZoom(); + } + async invalidatePanZoom() { + if (!this.image?.width || !this.image?.height || !this.pan_offset || !this.zoom_ratio) { + console.warn("Missing required properties for pan/zoom"); + return; + } + const raw_width = this.image.width * this.zoom_ratio; + const raw_height = this.image.height * this.zoom_ratio; + this.canvasContainer ??= await this.messageBroker?.pull("getCanvasContainer"); + if (!this.canvasContainer) return; + Object.assign(this.canvasContainer.style, { + width: `${raw_width}px`, + height: `${raw_height}px`, + left: `${this.pan_offset.x}px`, + top: `${this.pan_offset.y}px` + }); + } + handlePanStart(event) { + let coords_canvas = this.messageBroker.pull("screenToCanvas", { + x: event.offsetX, + y: event.offsetY + }); + this.mouseDownPoint = { x: event.clientX, y: event.clientY }; + this.messageBroker.publish("panCursor", true); + this.initialPan = this.pan_offset; + return; + } + handlePanMove(event) { + if (this.mouseDownPoint === null) throw new Error("mouseDownPoint is null"); + let deltaX = this.mouseDownPoint.x - event.clientX; + let deltaY = this.mouseDownPoint.y - event.clientY; + let pan_x = this.initialPan.x - deltaX; + let pan_y = this.initialPan.y - deltaY; + this.pan_offset = { x: pan_x, y: pan_y }; + this.invalidatePanZoom(); + } +} +class MessageBroker { + static { + __name(this, "MessageBroker"); + } + pushTopics = {}; + pullTopics = {}; + constructor() { + this.registerListeners(); + } + // Push + registerListeners() { + this.createPushTopic("panStart"); + this.createPushTopic("paintBucketFill"); + this.createPushTopic("saveState"); + this.createPushTopic("brushAdjustmentStart"); + this.createPushTopic("drawStart"); + this.createPushTopic("panMove"); + this.createPushTopic("updateBrushPreview"); + this.createPushTopic("brushAdjustment"); + this.createPushTopic("draw"); + this.createPushTopic("paintBucketCursor"); + this.createPushTopic("panCursor"); + this.createPushTopic("drawEnd"); + this.createPushTopic("zoom"); + this.createPushTopic("undo"); + this.createPushTopic("redo"); + this.createPushTopic("cursorPoint"); + this.createPushTopic("panOffset"); + this.createPushTopic("zoomRatio"); + this.createPushTopic("getMaskCanvas"); + this.createPushTopic("getCanvasContainer"); + this.createPushTopic("screenToCanvas"); + this.createPushTopic("isKeyPressed"); + this.createPushTopic("isCombinationPressed"); + this.createPushTopic("setPaintBucketTolerance"); + this.createPushTopic("setBrushSize"); + this.createPushTopic("setBrushHardness"); + this.createPushTopic("setBrushOpacity"); + this.createPushTopic("setBrushShape"); + this.createPushTopic("initZoomPan"); + this.createPushTopic("setTool"); + this.createPushTopic("pointerDown"); + this.createPushTopic("pointerMove"); + this.createPushTopic("pointerUp"); + this.createPushTopic("wheel"); + this.createPushTopic("initPaintBucketTool"); + this.createPushTopic("setBrushVisibility"); + this.createPushTopic("setBrushPreviewGradientVisibility"); + this.createPushTopic("handleTouchStart"); + this.createPushTopic("handleTouchMove"); + this.createPushTopic("handleTouchEnd"); + this.createPushTopic("colorSelectFill"); + this.createPushTopic("setColorSelectTolerance"); + this.createPushTopic("setLivePreview"); + this.createPushTopic("updateCursor"); + this.createPushTopic("setColorComparisonMethod"); + this.createPushTopic("clearLastPoint"); + this.createPushTopic("setWholeImage"); + this.createPushTopic("setMaskBoundary"); + this.createPushTopic("setMaskTolerance"); + this.createPushTopic("setBrushSmoothingPrecision"); + this.createPushTopic("setZoomText"); + this.createPushTopic("resetZoom"); + this.createPushTopic("invert"); + } + /** + * Creates a new push topic (listener is notified) + * + * @param {string} topicName - The name of the topic to create. + * @throws {Error} If the topic already exists. + */ + createPushTopic(topicName) { + if (this.topicExists(this.pushTopics, topicName)) { + throw new Error("Topic already exists"); + } + this.pushTopics[topicName] = []; + } + /** + * Subscribe a callback function to the given topic. + * + * @param {string} topicName - The name of the topic to subscribe to. + * @param {Callback} callback - The callback function to be subscribed. + * @throws {Error} If the topic does not exist. + */ + subscribe(topicName, callback) { + if (!this.topicExists(this.pushTopics, topicName)) { + throw new Error(`Topic "${topicName}" does not exist!`); + } + this.pushTopics[topicName].push(callback); + } + /** + * Removes a callback function from the list of subscribers for a given topic. + * + * @param {string} topicName - The name of the topic to unsubscribe from. + * @param {Callback} callback - The callback function to remove from the subscribers list. + * @throws {Error} If the topic does not exist in the list of topics. + */ + unsubscribe(topicName, callback) { + if (!this.topicExists(this.pushTopics, topicName)) { + throw new Error("Topic does not exist"); + } + const index = this.pushTopics[topicName].indexOf(callback); + if (index > -1) { + this.pushTopics[topicName].splice(index, 1); + } + } + /** + * Publishes data to a specified topic with variable number of arguments. + * @param {string} topicName - The name of the topic to publish to. + * @param {...any[]} args - Variable number of arguments to pass to subscribers + * @throws {Error} If the specified topic does not exist. + */ + publish(topicName, ...args) { + if (!this.topicExists(this.pushTopics, topicName)) { + throw new Error(`Topic "${topicName}" does not exist!`); + } + this.pushTopics[topicName].forEach((callback) => { + callback(...args); + }); + } + // Pull + /** + * Creates a new pull topic (listener must request data) + * + * @param {string} topicName - The name of the topic to create. + * @param {() => Promise} callBack - The callback function to be called when data is requested. + * @throws {Error} If the topic already exists. + */ + createPullTopic(topicName, callBack) { + if (this.topicExists(this.pullTopics, topicName)) { + throw new Error("Topic already exists"); + } + this.pullTopics[topicName] = callBack; + } + /** + * Requests data from a specified pull topic. + * @param {string} topicName - The name of the topic to request data from. + * @returns {Promise} - The data from the pull topic. + * @throws {Error} If the specified topic does not exist. + */ + async pull(topicName, data) { + if (!this.topicExists(this.pullTopics, topicName)) { + throw new Error("Topic does not exist"); + } + const callBack = this.pullTopics[topicName]; + try { + const result = await callBack(data); + return result; + } catch (error) { + console.error(`Error pulling data from topic "${topicName}":`, error); + throw error; + } + } + // Helper Methods + /** + * Checks if a topic exists in the given topics object. + * @param {Record} topics - The topics object to check. + * @param {string} topicName - The name of the topic to check. + * @returns {boolean} - True if the topic exists, false otherwise. + */ + topicExists(topics, topicName) { + return topics.hasOwnProperty(topicName); + } +} +class KeyboardManager { + static { + __name(this, "KeyboardManager"); + } + keysDown = []; + maskEditor; + messageBroker; + constructor(maskEditor) { + this.maskEditor = maskEditor; + this.messageBroker = maskEditor.getMessageBroker(); + this.addPullTopics(); + } + addPullTopics() { + this.messageBroker.createPullTopic( + "isKeyPressed", + (key) => Promise.resolve(this.isKeyDown(key)) + ); + } + addListeners() { + document.addEventListener("keydown", (event) => this.handleKeyDown(event)); + document.addEventListener("keyup", (event) => this.handleKeyUp(event)); + window.addEventListener("blur", () => this.clearKeys()); + } + removeListeners() { + document.removeEventListener( + "keydown", + (event) => this.handleKeyDown(event) + ); + document.removeEventListener("keyup", (event) => this.handleKeyUp(event)); + } + clearKeys() { + this.keysDown = []; + } + handleKeyDown(event) { + if (!this.keysDown.includes(event.key)) { + this.keysDown.push(event.key); + } + } + handleKeyUp(event) { + this.keysDown = this.keysDown.filter((key) => key !== event.key); + } + isKeyDown(key) { + return this.keysDown.includes(key); + } + // combinations + undoCombinationPressed() { + const combination = ["ctrl", "z"]; + const keysDownLower = this.keysDown.map((key) => key.toLowerCase()); + const result = combination.every((key) => keysDownLower.includes(key)); + if (result) this.messageBroker.publish("undo"); + return result; + } + redoCombinationPressed() { + const combination = ["ctrl", "shift", "z"]; + const keysDownLower = this.keysDown.map((key) => key.toLowerCase()); + const result = combination.every((key) => keysDownLower.includes(key)); + if (result) this.messageBroker.publish("redo"); + return result; + } +} +app.registerExtension({ + name: "Comfy.MaskEditor", + settings: [ + { + id: "Comfy.MaskEditor.UseNewEditor", + category: ["Mask Editor", "NewEditor"], + name: "Use new mask editor", + tooltip: "Switch to the new mask editor interface", + type: "boolean", + defaultValue: true, + experimental: true + }, + { + id: "Comfy.MaskEditor.BrushAdjustmentSpeed", + category: ["Mask Editor", "BrushAdjustment", "Sensitivity"], + name: "Brush adjustment speed multiplier", + tooltip: "Controls how quickly the brush size and hardness change when adjusting. Higher values mean faster changes.", + experimental: true, + type: "slider", + attrs: { + min: 0.1, + max: 2, + step: 0.1 + }, + defaultValue: 1, + versionAdded: "1.0.0" + }, + { + id: "Comfy.MaskEditor.UseDominantAxis", + category: ["Mask Editor", "BrushAdjustment", "UseDominantAxis"], + name: "Lock brush adjustment to dominant axis", + tooltip: "When enabled, brush adjustments will only affect size OR hardness based on which direction you move more", + type: "boolean", + defaultValue: true, + experimental: true + } + ], + init(app2) { + function openMaskEditor() { + const useNewEditor = app2.extensionManager.setting.get( + "Comfy.MaskEditor.UseNewEditor" + ); + if (useNewEditor) { + const dlg = MaskEditorDialog.getInstance(); + if (dlg?.isOpened && !dlg.isOpened()) { + dlg.show(); + } + } else { + const dlg = MaskEditorDialogOld.getInstance(); + if (dlg?.isOpened && !dlg.isOpened()) { + dlg.show(); + } + } + } + __name(openMaskEditor, "openMaskEditor"); + ; + ComfyApp.open_maskeditor = openMaskEditor; + const context_predicate = /* @__PURE__ */ __name(() => { + return !!(ComfyApp.clipspace && ComfyApp.clipspace.imgs && ComfyApp.clipspace.imgs.length > 0); + }, "context_predicate"); + ClipspaceDialog.registerButton( + "MaskEditor", + context_predicate, + openMaskEditor + ); + } +}); +const id = "Comfy.NodeTemplates"; +const file = "comfy.templates.json"; +class ManageTemplates extends ComfyDialog { + static { + __name(this, "ManageTemplates"); + } + templates; + draggedEl; + saveVisualCue; + emptyImg; + importInput; + constructor() { + super(); + this.load().then((v) => { + this.templates = v; + }); + this.element.classList.add("comfy-manage-templates"); + this.draggedEl = null; + this.saveVisualCue = null; + this.emptyImg = new Image(); + this.emptyImg.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="; + this.importInput = $el("input", { + type: "file", + accept: ".json", + multiple: true, + style: { display: "none" }, + parent: document.body, + onchange: /* @__PURE__ */ __name(() => this.importAll(), "onchange") + }); + } + createButtons() { + const btns = super.createButtons(); + btns[0].textContent = "Close"; + btns[0].onclick = (e) => { + clearTimeout(this.saveVisualCue); + this.close(); + }; + btns.unshift( + $el("button", { + type: "button", + textContent: "Export", + onclick: /* @__PURE__ */ __name(() => this.exportAll(), "onclick") + }) + ); + btns.unshift( + $el("button", { + type: "button", + textContent: "Import", + onclick: /* @__PURE__ */ __name(() => { + this.importInput.click(); + }, "onclick") + }) + ); + return btns; + } + async load() { + let templates = []; + const res = await api.getUserData(file); + if (res.status === 200) { + try { + templates = await res.json(); + } catch (error) { + } + } else if (res.status !== 404) { + console.error(res.status + " " + res.statusText); + } + return templates ?? []; + } + async store() { + const templates = JSON.stringify(this.templates, void 0, 4); + try { + await api.storeUserData(file, templates, { stringify: false }); + } catch (error) { + console.error(error); + useToastStore().addAlert(error.message); + } + } + async importAll() { + for (const file2 of this.importInput.files) { + if (file2.type === "application/json" || file2.name.endsWith(".json")) { + const reader = new FileReader(); + reader.onload = async () => { + const importFile = JSON.parse(reader.result); + if (importFile?.templates) { + for (const template of importFile.templates) { + if (template?.name && template?.data) { + this.templates.push(template); + } + } + await this.store(); + } + }; + await reader.readAsText(file2); + } + } + this.importInput.value = null; + this.close(); + } + exportAll() { + if (this.templates.length == 0) { + useToastStore().addAlert("No templates to export."); + return; + } + const json = JSON.stringify({ templates: this.templates }, null, 2); + const blob = new Blob([json], { type: "application/json" }); + const url = URL.createObjectURL(blob); + const a = $el("a", { + href: url, + download: "node_templates.json", + style: { display: "none" }, + parent: document.body + }); + a.click(); + setTimeout(function() { + a.remove(); + window.URL.revokeObjectURL(url); + }, 0); + } + show() { + super.show( + $el( + "div", + {}, + this.templates.flatMap((t2, i) => { + let nameInput; + return [ + $el( + "div", + { + dataset: { id: i.toString() }, + className: "templateManagerRow", + style: { + display: "grid", + gridTemplateColumns: "1fr auto", + border: "1px dashed transparent", + gap: "5px", + backgroundColor: "var(--comfy-menu-bg)" + }, + ondragstart: /* @__PURE__ */ __name((e) => { + this.draggedEl = e.currentTarget; + e.currentTarget.style.opacity = "0.6"; + e.currentTarget.style.border = "1px dashed yellow"; + e.dataTransfer.effectAllowed = "move"; + e.dataTransfer.setDragImage(this.emptyImg, 0, 0); + }, "ondragstart"), + ondragend: /* @__PURE__ */ __name((e) => { + e.target.style.opacity = "1"; + e.currentTarget.style.border = "1px dashed transparent"; + e.currentTarget.removeAttribute("draggable"); + this.element.querySelectorAll(".templateManagerRow").forEach((el, i2) => { + var prev_i = Number.parseInt(el.dataset.id); + if (el == this.draggedEl && prev_i != i2) { + this.templates.splice( + i2, + 0, + this.templates.splice(prev_i, 1)[0] + ); + } + el.dataset.id = i2.toString(); + }); + this.store(); + }, "ondragend"), + ondragover: /* @__PURE__ */ __name((e) => { + e.preventDefault(); + if (e.currentTarget == this.draggedEl) return; + let rect = e.currentTarget.getBoundingClientRect(); + if (e.clientY > rect.top + rect.height / 2) { + e.currentTarget.parentNode.insertBefore( + this.draggedEl, + e.currentTarget.nextSibling + ); + } else { + e.currentTarget.parentNode.insertBefore( + this.draggedEl, + e.currentTarget + ); + } + }, "ondragover") + }, + [ + $el( + "label", + { + textContent: "Name: ", + style: { + cursor: "grab" + }, + onmousedown: /* @__PURE__ */ __name((e) => { + if (e.target.localName == "label") + e.currentTarget.parentNode.draggable = "true"; + }, "onmousedown") + }, + [ + $el("input", { + value: t2.name, + dataset: { name: t2.name }, + style: { + transitionProperty: "background-color", + transitionDuration: "0s" + }, + onchange: /* @__PURE__ */ __name((e) => { + clearTimeout(this.saveVisualCue); + var el = e.target; + var row = el.parentNode.parentNode; + this.templates[row.dataset.id].name = el.value.trim() || "untitled"; + this.store(); + el.style.backgroundColor = "rgb(40, 95, 40)"; + el.style.transitionDuration = "0s"; + this.saveVisualCue = setTimeout(function() { + el.style.transitionDuration = ".7s"; + el.style.backgroundColor = "var(--comfy-input-bg)"; + }, 15); + }, "onchange"), + onkeypress: /* @__PURE__ */ __name((e) => { + var el = e.target; + clearTimeout(this.saveVisualCue); + el.style.transitionDuration = "0s"; + el.style.backgroundColor = "var(--comfy-input-bg)"; + }, "onkeypress"), + $: /* @__PURE__ */ __name((el) => nameInput = el, "$") + }) + ] + ), + $el("div", {}, [ + $el("button", { + textContent: "Export", + style: { + fontSize: "12px", + fontWeight: "normal" + }, + onclick: /* @__PURE__ */ __name((e) => { + const json = JSON.stringify({ templates: [t2] }, null, 2); + const blob = new Blob([json], { + type: "application/json" + }); + const url = URL.createObjectURL(blob); + const a = $el("a", { + href: url, + download: (nameInput.value || t2.name) + ".json", + style: { display: "none" }, + parent: document.body + }); + a.click(); + setTimeout(function() { + a.remove(); + window.URL.revokeObjectURL(url); + }, 0); + }, "onclick") + }), + $el("button", { + textContent: "Delete", + style: { + fontSize: "12px", + color: "red", + fontWeight: "normal" + }, + onclick: /* @__PURE__ */ __name((e) => { + const item = e.target.parentNode.parentNode; + item.parentNode.removeChild(item); + this.templates.splice(item.dataset.id * 1, 1); + this.store(); + var that = this; + setTimeout(function() { + that.element.querySelectorAll(".templateManagerRow").forEach((el, i2) => { + el.dataset.id = i2.toString(); + }); + }, 0); + }, "onclick") + }) + ]) + ] + ) + ]; + }) + ) + ); + } +} +app.registerExtension({ + name: id, + setup() { + const manage = new ManageTemplates(); + const clipboardAction = /* @__PURE__ */ __name(async (cb) => { + const old = localStorage.getItem("litegrapheditor_clipboard"); + await cb(); + localStorage.setItem("litegrapheditor_clipboard", old); + }, "clipboardAction"); + const orig = LGraphCanvas.prototype.getCanvasMenuOptions; + LGraphCanvas.prototype.getCanvasMenuOptions = function() { + const options = orig.apply(this, arguments); + options.push(null); + options.push({ + content: `Save Selected as Template`, + disabled: !Object.keys(app.canvas.selected_nodes || {}).length, + callback: /* @__PURE__ */ __name(async () => { + const name = await showPromptDialog({ + title: t("nodeTemplates.saveAsTemplate"), + message: t("nodeTemplates.enterName"), + defaultValue: "" + }); + if (!name?.trim()) return; + clipboardAction(() => { + app.canvas.copyToClipboard(); + let data = localStorage.getItem("litegrapheditor_clipboard"); + data = JSON.parse(data); + const nodeIds = Object.keys(app.canvas.selected_nodes); + for (let i = 0; i < nodeIds.length; i++) { + const node = app.graph.getNodeById(nodeIds[i]); + const nodeData = node?.constructor.nodeData; + let groupData = GroupNodeHandler.getGroupData(node); + if (groupData) { + groupData = groupData.nodeData; + if (!data.groupNodes) { + data.groupNodes = {}; + } + data.groupNodes[nodeData.name] = groupData; + data.nodes[i].type = nodeData.name; + } + } + manage.templates.push({ + name, + data: JSON.stringify(data) + }); + manage.store(); + }); + }, "callback") + }); + const subItems = manage.templates.map((t2) => { + return { + content: t2.name, + callback: /* @__PURE__ */ __name(() => { + clipboardAction(async () => { + const data = JSON.parse(t2.data); + await GroupNodeConfig.registerFromWorkflow(data.groupNodes, {}); + if (!data.reroutes) { + deserialiseAndCreate(t2.data, app.canvas); + } else { + localStorage.setItem("litegrapheditor_clipboard", t2.data); + app.canvas.pasteFromClipboard(); + } + }); + }, "callback") + }; + }); + subItems.push(null, { + content: "Manage", + callback: /* @__PURE__ */ __name(() => manage.show(), "callback") + }); + options.push({ + content: "Node Templates", + submenu: { + options: subItems + } + }); + return options; + }; + } +}); +app.registerExtension({ + name: "Comfy.NoteNode", + registerCustomNodes() { + class NoteNode extends LGraphNode { + static { + __name(this, "NoteNode"); + } + static category; + color = LGraphCanvas.node_colors.yellow.color; + bgcolor = LGraphCanvas.node_colors.yellow.bgcolor; + groupcolor = LGraphCanvas.node_colors.yellow.groupcolor; + isVirtualNode; + collapsable; + title_mode; + constructor(title) { + super(title); + if (!this.properties) { + this.properties = { text: "" }; + } + ComfyWidgets.STRING( + // Should we extends LGraphNode? Yesss + this, + "", + ["", { default: this.properties.text, multiline: true }], + app + ); + this.serialize_widgets = true; + this.isVirtualNode = true; + } + } + LiteGraph.registerNodeType( + "Note", + Object.assign(NoteNode, { + title_mode: LiteGraph.NORMAL_TITLE, + title: "Note", + collapsable: true + }) + ); + NoteNode.category = "utils"; + } +}); +app.registerExtension({ + name: "Comfy.RerouteNode", + registerCustomNodes(app2) { + class RerouteNode extends LGraphNode { + static { + __name(this, "RerouteNode"); + } + static category; + static defaultVisibility = false; + constructor(title) { + super(title); + if (!this.properties) { + this.properties = {}; + } + this.properties.showOutputText = RerouteNode.defaultVisibility; + this.properties.horizontal = false; + this.addInput("", "*"); + this.addOutput(this.properties.showOutputText ? "*" : "", "*"); + this.onAfterGraphConfigured = function() { + requestAnimationFrame(() => { + this.onConnectionsChange(LiteGraph.INPUT, null, true, null); + }); + }; + this.onConnectionsChange = (type, index, connected, link_info) => { + this.applyOrientation(); + if (connected && type === LiteGraph.OUTPUT) { + const types = new Set( + this.outputs[0].links.map((l) => app2.graph.links[l].type).filter((t2) => t2 !== "*") + ); + if (types.size > 1) { + const linksToDisconnect = []; + for (let i = 0; i < this.outputs[0].links.length - 1; i++) { + const linkId = this.outputs[0].links[i]; + const link = app2.graph.links[linkId]; + linksToDisconnect.push(link); + } + for (const link of linksToDisconnect) { + const node = app2.graph.getNodeById(link.target_id); + node.disconnectInput(link.target_slot); + } + } + } + let currentNode = this; + let updateNodes = []; + let inputType = null; + let inputNode = null; + while (currentNode) { + updateNodes.unshift(currentNode); + const linkId = currentNode.inputs[0].link; + if (linkId !== null) { + const link = app2.graph.links[linkId]; + if (!link) return; + const node = app2.graph.getNodeById(link.origin_id); + const type2 = node.constructor.type; + if (type2 === "Reroute") { + if (node === this) { + currentNode.disconnectInput(link.target_slot); + currentNode = null; + } else { + currentNode = node; + } + } else { + inputNode = currentNode; + inputType = node.outputs[link.origin_slot]?.type ?? null; + break; + } + } else { + currentNode = null; + break; + } + } + const nodes = [this]; + let outputType = null; + while (nodes.length) { + currentNode = nodes.pop(); + const outputs = (currentNode.outputs ? currentNode.outputs[0].links : []) || []; + if (outputs.length) { + for (const linkId of outputs) { + const link = app2.graph.links[linkId]; + if (!link) continue; + const node = app2.graph.getNodeById(link.target_id); + const type2 = node.constructor.type; + if (type2 === "Reroute") { + nodes.push(node); + updateNodes.push(node); + } else { + const nodeOutType = node.inputs && node.inputs[link?.target_slot] && node.inputs[link.target_slot].type ? node.inputs[link.target_slot].type : null; + if (inputType && !LiteGraph.isValidConnection(inputType, nodeOutType)) { + node.disconnectInput(link.target_slot); + } else { + outputType = nodeOutType; + } + } + } + } else { + } + } + const displayType = inputType || outputType || "*"; + const color = LGraphCanvas.link_type_colors[displayType]; + let widgetConfig; + let targetWidget; + let widgetType; + for (const node of updateNodes) { + node.outputs[0].type = inputType || "*"; + node.__outputType = displayType; + node.outputs[0].name = node.properties.showOutputText ? displayType : ""; + node.size = node.computeSize(); + node.applyOrientation(); + for (const l of node.outputs[0].links || []) { + const link = app2.graph.links[l]; + if (link) { + link.color = color; + if (app2.configuringGraph) continue; + const targetNode = app2.graph.getNodeById(link.target_id); + const targetInput = targetNode.inputs?.[link.target_slot]; + if (targetInput?.widget) { + const config = getWidgetConfig(targetInput); + if (!widgetConfig) { + widgetConfig = config[1] ?? {}; + widgetType = config[0]; + } + if (!targetWidget) { + targetWidget = targetNode.widgets?.find( + (w) => w.name === targetInput.widget.name + ); + } + const merged = mergeIfValid(targetInput, [ + config[0], + widgetConfig + ]); + if (merged.customConfig) { + widgetConfig = merged.customConfig; + } + } + } + } + } + for (const node of updateNodes) { + if (widgetConfig && outputType) { + node.inputs[0].widget = { name: "value" }; + setWidgetConfig( + node.inputs[0], + [widgetType ?? displayType, widgetConfig], + targetWidget + ); + } else { + setWidgetConfig(node.inputs[0], null); + } + } + if (inputNode) { + const link = app2.graph.links[inputNode.inputs[0].link]; + if (link) { + link.color = color; + } + } + }; + this.clone = function() { + const cloned = RerouteNode.prototype.clone.apply(this); + cloned.removeOutput(0); + cloned.addOutput(this.properties.showOutputText ? "*" : "", "*"); + cloned.size = cloned.computeSize(); + return cloned; + }; + this.isVirtualNode = true; + } + getExtraMenuOptions(_, options) { + options.unshift( + { + content: (this.properties.showOutputText ? "Hide" : "Show") + " Type", + callback: /* @__PURE__ */ __name(() => { + this.properties.showOutputText = !this.properties.showOutputText; + if (this.properties.showOutputText) { + this.outputs[0].name = this.__outputType || this.outputs[0].type; + } else { + this.outputs[0].name = ""; + } + this.size = this.computeSize(); + this.applyOrientation(); + app2.graph.setDirtyCanvas(true, true); + }, "callback") + }, + { + content: (RerouteNode.defaultVisibility ? "Hide" : "Show") + " Type By Default", + callback: /* @__PURE__ */ __name(() => { + RerouteNode.setDefaultTextVisibility( + !RerouteNode.defaultVisibility + ); + }, "callback") + }, + { + // naming is inverted with respect to LiteGraphNode.horizontal + // LiteGraphNode.horizontal == true means that + // each slot in the inputs and outputs are laid out horizontally, + // which is the opposite of the visual orientation of the inputs and outputs as a node + content: "Set " + (this.properties.horizontal ? "Horizontal" : "Vertical"), + callback: /* @__PURE__ */ __name(() => { + this.properties.horizontal = !this.properties.horizontal; + this.applyOrientation(); + }, "callback") + } + ); + return []; + } + applyOrientation() { + this.horizontal = this.properties.horizontal; + if (this.horizontal) { + this.inputs[0].pos = [this.size[0] / 2, 0]; + } else { + delete this.inputs[0].pos; + } + app2.graph.setDirtyCanvas(true, true); + } + computeSize() { + return [ + this.properties.showOutputText && this.outputs && this.outputs.length ? Math.max( + 75, + LiteGraph.NODE_TEXT_SIZE * this.outputs[0].name.length * 0.6 + 40 + ) : 75, + 26 + ]; + } + static setDefaultTextVisibility(visible) { + RerouteNode.defaultVisibility = visible; + if (visible) { + localStorage["Comfy.RerouteNode.DefaultVisibility"] = "true"; + } else { + delete localStorage["Comfy.RerouteNode.DefaultVisibility"]; + } + } + } + RerouteNode.setDefaultTextVisibility( + !!localStorage["Comfy.RerouteNode.DefaultVisibility"] + ); + LiteGraph.registerNodeType( + "Reroute", + Object.assign(RerouteNode, { + title_mode: LiteGraph.NO_TITLE, + title: "Reroute", + collapsable: false + }) + ); + RerouteNode.category = "utils"; + } +}); +app.registerExtension({ + name: "Comfy.SaveImageExtraOutput", + async beforeRegisterNodeDef(nodeType, nodeData, app2) { + if (nodeData.name === "SaveImage" || nodeData.name === "SaveAnimatedWEBP") { + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function() { + const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : void 0; + const widget = this.widgets.find((w) => w.name === "filename_prefix"); + widget.serializeValue = () => { + return applyTextReplacements(app2, widget.value); + }; + return r; + }; + } else { + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function() { + const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : void 0; + if (!this.properties || !("Node name for S&R" in this.properties)) { + this.addProperty("Node name for S&R", this.constructor.type, "string"); + } + return r; + }; + } + } +}); +let touchZooming; +let touchCount = 0; +app.registerExtension({ + name: "Comfy.SimpleTouchSupport", + setup() { + let touchDist; + let touchTime; + let lastTouch; + let lastScale; + function getMultiTouchPos(e) { + return Math.hypot( + e.touches[0].clientX - e.touches[1].clientX, + e.touches[0].clientY - e.touches[1].clientY + ); + } + __name(getMultiTouchPos, "getMultiTouchPos"); + function getMultiTouchCenter(e) { + return { + clientX: (e.touches[0].clientX + e.touches[1].clientX) / 2, + clientY: (e.touches[0].clientY + e.touches[1].clientY) / 2 + }; + } + __name(getMultiTouchCenter, "getMultiTouchCenter"); + app.canvasEl.parentElement.addEventListener( + "touchstart", + (e) => { + touchCount++; + lastTouch = null; + lastScale = null; + if (e.touches?.length === 1) { + touchTime = /* @__PURE__ */ new Date(); + lastTouch = e.touches[0]; + } else { + touchTime = null; + if (e.touches?.length === 2) { + lastScale = app.canvas.ds.scale; + lastTouch = getMultiTouchCenter(e); + touchDist = getMultiTouchPos(e); + app.canvas.pointer.isDown = false; + } + } + }, + true + ); + app.canvasEl.parentElement.addEventListener("touchend", (e) => { + touchCount--; + if (e.touches?.length !== 1) touchZooming = false; + if (touchTime && !e.touches?.length) { + if ((/* @__PURE__ */ new Date()).getTime() - touchTime > 600) { + if (e.target === app.canvasEl) { + app.canvasEl.dispatchEvent( + new PointerEvent("pointerdown", { + button: 2, + clientX: e.changedTouches[0].clientX, + clientY: e.changedTouches[0].clientY + }) + ); + e.preventDefault(); + } + } + touchTime = null; + } + }); + app.canvasEl.parentElement.addEventListener( + "touchmove", + (e) => { + touchTime = null; + if (e.touches?.length === 2 && lastTouch && !e.ctrlKey && !e.shiftKey) { + e.preventDefault(); + app.canvas.pointer.isDown = false; + touchZooming = true; + LiteGraph.closeAllContextMenus(window); + app.canvas.search_box?.close(); + const newTouchDist = getMultiTouchPos(e); + const center = getMultiTouchCenter(e); + let scale = lastScale * newTouchDist / touchDist; + const newX = (center.clientX - lastTouch.clientX) / scale; + const newY = (center.clientY - lastTouch.clientY) / scale; + if (scale < app.canvas.ds.min_scale) { + scale = app.canvas.ds.min_scale; + } else if (scale > app.canvas.ds.max_scale) { + scale = app.canvas.ds.max_scale; + } + const oldScale = app.canvas.ds.scale; + app.canvas.ds.scale = scale; + if (Math.abs(app.canvas.ds.scale - 1) < 0.01) { + app.canvas.ds.scale = 1; + } + const newScale = app.canvas.ds.scale; + const convertScaleToOffset = /* @__PURE__ */ __name((scale2) => [ + center.clientX / scale2 - app.canvas.ds.offset[0], + center.clientY / scale2 - app.canvas.ds.offset[1] + ], "convertScaleToOffset"); + var oldCenter = convertScaleToOffset(oldScale); + var newCenter = convertScaleToOffset(newScale); + app.canvas.ds.offset[0] += newX + newCenter[0] - oldCenter[0]; + app.canvas.ds.offset[1] += newY + newCenter[1] - oldCenter[1]; + lastTouch.clientX = center.clientX; + lastTouch.clientY = center.clientY; + app.canvas.setDirty(true, true); + } + }, + true + ); + } +}); +const processMouseDown = LGraphCanvas.prototype.processMouseDown; +LGraphCanvas.prototype.processMouseDown = function(e) { + if (touchZooming || touchCount) { + return; + } + app.canvas.pointer.isDown = false; + return processMouseDown.apply(this, arguments); +}; +const processMouseMove = LGraphCanvas.prototype.processMouseMove; +LGraphCanvas.prototype.processMouseMove = function(e) { + if (touchZooming || touchCount > 1) { + return; + } + return processMouseMove.apply(this, arguments); +}; +app.registerExtension({ + name: "Comfy.SlotDefaults", + suggestionsNumber: null, + init() { + LiteGraph.search_filter_enabled = true; + LiteGraph.middle_click_slot_add_default_node = true; + this.suggestionsNumber = app.ui.settings.addSetting({ + id: "Comfy.NodeSuggestions.number", + category: ["Comfy", "Node Search Box", "NodeSuggestions"], + name: "Number of nodes suggestions", + tooltip: "Only for litegraph searchbox/context menu", + type: "slider", + attrs: { + min: 1, + max: 100, + step: 1 + }, + defaultValue: 5, + onChange: /* @__PURE__ */ __name((newVal, oldVal) => { + this.setDefaults(newVal); + }, "onChange") + }); + }, + slot_types_default_out: {}, + slot_types_default_in: {}, + async beforeRegisterNodeDef(nodeType, nodeData, app2) { + var nodeId = nodeData.name; + const inputs = nodeData["input"]?.["required"]; + for (const inputKey in inputs) { + var input = inputs[inputKey]; + if (typeof input[0] !== "string") continue; + var type = input[0]; + if (type in ComfyWidgets) { + var customProperties = input[1]; + if (!customProperties?.forceInput) continue; + } + if (!(type in this.slot_types_default_out)) { + this.slot_types_default_out[type] = ["Reroute"]; + } + if (this.slot_types_default_out[type].includes(nodeId)) continue; + this.slot_types_default_out[type].push(nodeId); + const lowerType = type.toLocaleLowerCase(); + if (!(lowerType in LiteGraph.registered_slot_in_types)) { + LiteGraph.registered_slot_in_types[lowerType] = { nodes: [] }; + } + LiteGraph.registered_slot_in_types[lowerType].nodes.push( + // @ts-expect-error ComfyNode + nodeType.comfyClass + ); + } + var outputs = nodeData["output"] ?? []; + for (const el of outputs) { + const type2 = el; + if (!(type2 in this.slot_types_default_in)) { + this.slot_types_default_in[type2] = ["Reroute"]; + } + this.slot_types_default_in[type2].push(nodeId); + if (!(type2 in LiteGraph.registered_slot_out_types)) { + LiteGraph.registered_slot_out_types[type2] = { nodes: [] }; + } + LiteGraph.registered_slot_out_types[type2].nodes.push(nodeType.comfyClass); + if (!LiteGraph.slot_types_out.includes(type2)) { + LiteGraph.slot_types_out.push(type2); + } + } + var maxNum = this.suggestionsNumber.value; + this.setDefaults(maxNum); + }, + setDefaults(maxNum) { + LiteGraph.slot_types_default_out = {}; + LiteGraph.slot_types_default_in = {}; + for (const type in this.slot_types_default_out) { + LiteGraph.slot_types_default_out[type] = this.slot_types_default_out[type].slice(0, maxNum); + } + for (const type in this.slot_types_default_in) { + LiteGraph.slot_types_default_in[type] = this.slot_types_default_in[type].slice(0, maxNum); + } + } +}); +app.registerExtension({ + name: "Comfy.UploadImage", + beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData?.input?.required?.image?.[1]?.image_upload === true) { + nodeData.input.required.upload = ["IMAGEUPLOAD"]; + } + } +}); +const WEBCAM_READY = Symbol(); +app.registerExtension({ + name: "Comfy.WebcamCapture", + getCustomWidgets(app2) { + return { + WEBCAM(node, inputName) { + let res; + node[WEBCAM_READY] = new Promise((resolve) => res = resolve); + const container = document.createElement("div"); + container.style.background = "rgba(0,0,0,0.25)"; + container.style.textAlign = "center"; + const video = document.createElement("video"); + video.style.height = video.style.width = "100%"; + const loadVideo = /* @__PURE__ */ __name(async () => { + try { + const stream = await navigator.mediaDevices.getUserMedia({ + video: true, + audio: false + }); + container.replaceChildren(video); + setTimeout(() => res(video), 500); + video.addEventListener("loadedmetadata", () => res(video), false); + video.srcObject = stream; + video.play(); + } catch (error) { + const label = document.createElement("div"); + label.style.color = "red"; + label.style.overflow = "auto"; + label.style.maxHeight = "100%"; + label.style.whiteSpace = "pre-wrap"; + if (window.isSecureContext) { + label.textContent = "Unable to load webcam, please ensure access is granted:\n" + error.message; + } else { + label.textContent = "Unable to load webcam. A secure context is required, if you are not accessing ComfyUI on localhost (127.0.0.1) you will have to enable TLS (https)\n\n" + error.message; + } + container.replaceChildren(label); + } + }, "loadVideo"); + loadVideo(); + return { widget: node.addDOMWidget(inputName, "WEBCAM", container) }; + } + }; + }, + nodeCreated(node) { + if (node.type, node.constructor.comfyClass !== "WebcamCapture") return; + let video; + const camera = node.widgets.find((w2) => w2.name === "image"); + const w = node.widgets.find((w2) => w2.name === "width"); + const h = node.widgets.find((w2) => w2.name === "height"); + const captureOnQueue = node.widgets.find( + (w2) => w2.name === "capture_on_queue" + ); + const canvas = document.createElement("canvas"); + const capture = /* @__PURE__ */ __name(() => { + canvas.width = w.value; + canvas.height = h.value; + const ctx = canvas.getContext("2d"); + ctx.drawImage(video, 0, 0, w.value, h.value); + const data = canvas.toDataURL("image/png"); + const img = new Image(); + img.onload = () => { + node.imgs = [img]; + app.graph.setDirtyCanvas(true); + requestAnimationFrame(() => { + node.setSizeForImage?.(); + }); + }; + img.src = data; + }, "capture"); + const btn = node.addWidget( + "button", + "waiting for camera...", + "capture", + capture + ); + btn.disabled = true; + btn.serializeValue = () => void 0; + camera.serializeValue = async () => { + if (captureOnQueue.value) { + capture(); + } else if (!node.imgs?.length) { + const err2 = `No webcam image captured`; + useToastStore().addAlert(err2); + throw new Error(err2); + } + const blob = await new Promise((r) => canvas.toBlob(r)); + const name = `${+/* @__PURE__ */ new Date()}.png`; + const file2 = new File([blob], name); + const body = new FormData(); + body.append("image", file2); + body.append("subfolder", "webcam"); + body.append("type", "temp"); + const resp = await api.fetchApi("/upload/image", { + method: "POST", + body + }); + if (resp.status !== 200) { + const err2 = `Error uploading camera image: ${resp.status} - ${resp.statusText}`; + useToastStore().addAlert(err2); + throw new Error(err2); + } + return `webcam/${name} [temp]`; + }; + node[WEBCAM_READY].then((v) => { + video = v; + if (!w.value) { + w.value = video.videoWidth || 640; + h.value = video.videoHeight || 480; + } + btn.disabled = false; + btn.label = "capture"; + }); + } +}); +function splitFilePath$1(path) { + const folder_separator = path.lastIndexOf("/"); + if (folder_separator === -1) { + return ["", path]; + } + return [ + path.substring(0, folder_separator), + path.substring(folder_separator + 1) + ]; +} +__name(splitFilePath$1, "splitFilePath$1"); +function getResourceURL$1(subfolder, filename, type = "input") { + const params = [ + "filename=" + encodeURIComponent(filename), + "type=" + type, + "subfolder=" + subfolder, + app.getRandParam().substring(1) + ].join("&"); + return `/view?${params}`; +} +__name(getResourceURL$1, "getResourceURL$1"); +async function uploadFile$1(audioWidget, audioUIWidget, file2, updateNode, pasted = false) { + try { + const body = new FormData(); + body.append("image", file2); + if (pasted) body.append("subfolder", "pasted"); + const resp = await api.fetchApi("/upload/image", { + method: "POST", + body + }); + if (resp.status === 200) { + const data = await resp.json(); + let path = data.name; + if (data.subfolder) path = data.subfolder + "/" + path; + if (!audioWidget.options.values.includes(path)) { + audioWidget.options.values.push(path); + } + if (updateNode) { + audioUIWidget.element.src = api.apiURL( + getResourceURL$1(...splitFilePath$1(path)) + ); + audioWidget.value = path; + } + } else { + useToastStore().addAlert(resp.status + " - " + resp.statusText); + } + } catch (error) { + useToastStore().addAlert(error); + } +} +__name(uploadFile$1, "uploadFile$1"); +app.registerExtension({ + name: "Comfy.AudioWidget", + async beforeRegisterNodeDef(nodeType, nodeData) { + if ( + // @ts-expect-error ComfyNode + ["LoadAudio", "SaveAudio", "PreviewAudio"].includes(nodeType.comfyClass) + ) { + nodeData.input.required.audioUI = ["AUDIO_UI"]; + } + }, + getCustomWidgets() { + return { + AUDIO_UI(node, inputName) { + const audio = document.createElement("audio"); + audio.controls = true; + audio.classList.add("comfy-audio"); + audio.setAttribute("name", "media"); + const audioUIWidget = node.addDOMWidget( + inputName, + /* name=*/ + "audioUI", + audio, + { + serialize: false + } + ); + const isOutputNode = node.constructor.nodeData.output_node; + if (isOutputNode) { + audioUIWidget.element.classList.add("empty-audio-widget"); + const onExecuted = node.onExecuted; + node.onExecuted = function(message) { + onExecuted?.apply(this, arguments); + const audios = message.audio; + if (!audios) return; + const audio2 = audios[0]; + audioUIWidget.element.src = api.apiURL( + getResourceURL$1(audio2.subfolder, audio2.filename, audio2.type) + ); + audioUIWidget.element.classList.remove("empty-audio-widget"); + }; + } + return { widget: audioUIWidget }; + } + }; + }, + onNodeOutputsUpdated(nodeOutputs) { + for (const [nodeId, output] of Object.entries(nodeOutputs)) { + const node = app.graph.getNodeById(nodeId); + if ("audio" in output) { + const audioUIWidget = node.widgets.find( + (w) => w.name === "audioUI" + ); + const audio = output.audio[0]; + audioUIWidget.element.src = api.apiURL( + getResourceURL$1(audio.subfolder, audio.filename, audio.type) + ); + audioUIWidget.element.classList.remove("empty-audio-widget"); + } + } + } +}); +app.registerExtension({ + name: "Comfy.UploadAudio", + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData?.input?.required?.audio?.[1]?.audio_upload === true) { + nodeData.input.required.upload = ["AUDIOUPLOAD"]; + } + }, + getCustomWidgets() { + return { + AUDIOUPLOAD(node, inputName) { + const audioWidget = node.widgets.find( + (w) => w.name === "audio" + ); + const audioUIWidget = node.widgets.find( + (w) => w.name === "audioUI" + ); + const onAudioWidgetUpdate = /* @__PURE__ */ __name(() => { + audioUIWidget.element.src = api.apiURL( + getResourceURL$1(...splitFilePath$1(audioWidget.value)) + ); + }, "onAudioWidgetUpdate"); + if (audioWidget.value) { + onAudioWidgetUpdate(); + } + audioWidget.callback = onAudioWidgetUpdate; + const onGraphConfigured = node.onGraphConfigured; + node.onGraphConfigured = function() { + onGraphConfigured?.apply(this, arguments); + if (audioWidget.value) { + onAudioWidgetUpdate(); + } + }; + const fileInput = document.createElement("input"); + fileInput.type = "file"; + fileInput.accept = "audio/*"; + fileInput.style.display = "none"; + fileInput.onchange = () => { + if (fileInput.files.length) { + uploadFile$1(audioWidget, audioUIWidget, fileInput.files[0], true); + } + }; + const uploadWidget = node.addWidget( + "button", + inputName, + /* value=*/ + "", + () => { + fileInput.click(); + }, + { serialize: false } + ); + uploadWidget.label = "choose file to upload"; + return { widget: uploadWidget }; + } + }; + } +}); +(async () => { + if (!isElectron()) return; + const electronAPI$1 = electronAPI(); + const desktopAppVersion = await electronAPI$1.getElectronVersion(); + const onChangeRestartApp = /* @__PURE__ */ __name((newValue, oldValue) => { + if (oldValue !== void 0 && newValue !== oldValue) { + electronAPI$1.restartApp("Restart ComfyUI to apply changes.", 1500); + } + }, "onChangeRestartApp"); + app.registerExtension({ + name: "Comfy.ElectronAdapter", + settings: [ + { + id: "Comfy-Desktop.AutoUpdate", + category: ["Comfy-Desktop", "General", "AutoUpdate"], + name: "Automatically check for updates", + type: "boolean", + defaultValue: true, + onChange: onChangeRestartApp + }, + { + id: "Comfy-Desktop.SendStatistics", + category: ["Comfy-Desktop", "General", "Send Statistics"], + name: "Send anonymous crash reports", + type: "boolean", + defaultValue: true, + onChange: onChangeRestartApp + } + ], + commands: [ + { + id: "Comfy-Desktop.Folders.OpenLogsFolder", + label: "Open Logs Folder", + icon: "pi pi-folder-open", + function() { + electronAPI$1.openLogsFolder(); + } + }, + { + id: "Comfy-Desktop.Folders.OpenModelsFolder", + label: "Open Models Folder", + icon: "pi pi-folder-open", + function() { + electronAPI$1.openModelsFolder(); + } + }, + { + id: "Comfy-Desktop.Folders.OpenOutputsFolder", + label: "Open Outputs Folder", + icon: "pi pi-folder-open", + function() { + electronAPI$1.openOutputsFolder(); + } + }, + { + id: "Comfy-Desktop.Folders.OpenInputsFolder", + label: "Open Inputs Folder", + icon: "pi pi-folder-open", + function() { + electronAPI$1.openInputsFolder(); + } + }, + { + id: "Comfy-Desktop.Folders.OpenCustomNodesFolder", + label: "Open Custom Nodes Folder", + icon: "pi pi-folder-open", + function() { + electronAPI$1.openCustomNodesFolder(); + } + }, + { + id: "Comfy-Desktop.Folders.OpenModelConfig", + label: "Open extra_model_paths.yaml", + icon: "pi pi-file", + function() { + electronAPI$1.openModelConfig(); + } + }, + { + id: "Comfy-Desktop.OpenDevTools", + label: "Open DevTools", + icon: "pi pi-code", + function() { + electronAPI$1.openDevTools(); + } + }, + { + id: "Comfy-Desktop.OpenFeedbackPage", + label: "Feedback", + icon: "pi pi-envelope", + function() { + window.open("https://forum.comfy.org/c/v1-feedback/", "_blank"); + } + }, + { + id: "Comfy-Desktop.OpenUserGuide", + label: "Desktop User Guide", + icon: "pi pi-book", + function() { + window.open("https://comfyorg.notion.site/", "_blank"); + } + }, + { + id: "Comfy-Desktop.Reinstall", + label: "Reinstall", + icon: "pi pi-refresh", + async function() { + const proceed = await showConfirmationDialog({ + message: t("desktopMenu.confirmReinstall"), + title: t("desktopMenu.reinstall"), + type: "reinstall" + }); + if (proceed) electronAPI$1.reinstall(); + } + }, + { + id: "Comfy-Desktop.Restart", + label: "Restart", + icon: "pi pi-refresh", + function() { + electronAPI$1.restartApp(); + } + } + ], + menuCommands: [ + { + path: ["Help"], + commands: [ + "Comfy-Desktop.OpenUserGuide", + "Comfy-Desktop.OpenFeedbackPage" + ] + }, + { + path: ["Help"], + commands: ["Comfy-Desktop.OpenDevTools"] + }, + { + path: ["Help", "Open Folder"], + commands: [ + "Comfy-Desktop.Folders.OpenLogsFolder", + "Comfy-Desktop.Folders.OpenModelsFolder", + "Comfy-Desktop.Folders.OpenOutputsFolder", + "Comfy-Desktop.Folders.OpenInputsFolder", + "Comfy-Desktop.Folders.OpenCustomNodesFolder", + "Comfy-Desktop.Folders.OpenModelConfig" + ] + }, + { + path: ["Help"], + commands: ["Comfy-Desktop.Reinstall"] + } + ], + aboutPageBadges: [ + { + label: "ComfyUI_desktop v" + desktopAppVersion, + url: "https://github.com/Comfy-Org/electron", + icon: "pi pi-github" + } + ] + }); +})(); +/** + * @license + * Copyright 2010-2024 Three.js Authors + * SPDX-License-Identifier: MIT + */ +const REVISION = "170"; +const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; +const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; +const CullFaceNone = 0; +const CullFaceBack = 1; +const CullFaceFront = 2; +const CullFaceFrontBack = 3; +const BasicShadowMap = 0; +const PCFShadowMap = 1; +const PCFSoftShadowMap = 2; +const VSMShadowMap = 3; +const FrontSide = 0; +const BackSide = 1; +const DoubleSide = 2; +const NoBlending = 0; +const NormalBlending = 1; +const AdditiveBlending = 2; +const SubtractiveBlending = 3; +const MultiplyBlending = 4; +const CustomBlending = 5; +const AddEquation = 100; +const SubtractEquation = 101; +const ReverseSubtractEquation = 102; +const MinEquation = 103; +const MaxEquation = 104; +const ZeroFactor = 200; +const OneFactor = 201; +const SrcColorFactor = 202; +const OneMinusSrcColorFactor = 203; +const SrcAlphaFactor = 204; +const OneMinusSrcAlphaFactor = 205; +const DstAlphaFactor = 206; +const OneMinusDstAlphaFactor = 207; +const DstColorFactor = 208; +const OneMinusDstColorFactor = 209; +const SrcAlphaSaturateFactor = 210; +const ConstantColorFactor = 211; +const OneMinusConstantColorFactor = 212; +const ConstantAlphaFactor = 213; +const OneMinusConstantAlphaFactor = 214; +const NeverDepth = 0; +const AlwaysDepth = 1; +const LessDepth = 2; +const LessEqualDepth = 3; +const EqualDepth = 4; +const GreaterEqualDepth = 5; +const GreaterDepth = 6; +const NotEqualDepth = 7; +const MultiplyOperation = 0; +const MixOperation = 1; +const AddOperation = 2; +const NoToneMapping = 0; +const LinearToneMapping = 1; +const ReinhardToneMapping = 2; +const CineonToneMapping = 3; +const ACESFilmicToneMapping = 4; +const CustomToneMapping = 5; +const AgXToneMapping = 6; +const NeutralToneMapping = 7; +const AttachedBindMode = "attached"; +const DetachedBindMode = "detached"; +const UVMapping = 300; +const CubeReflectionMapping = 301; +const CubeRefractionMapping = 302; +const EquirectangularReflectionMapping = 303; +const EquirectangularRefractionMapping = 304; +const CubeUVReflectionMapping = 306; +const RepeatWrapping = 1e3; +const ClampToEdgeWrapping = 1001; +const MirroredRepeatWrapping = 1002; +const NearestFilter = 1003; +const NearestMipmapNearestFilter = 1004; +const NearestMipMapNearestFilter = 1004; +const NearestMipmapLinearFilter = 1005; +const NearestMipMapLinearFilter = 1005; +const LinearFilter = 1006; +const LinearMipmapNearestFilter = 1007; +const LinearMipMapNearestFilter = 1007; +const LinearMipmapLinearFilter = 1008; +const LinearMipMapLinearFilter = 1008; +const UnsignedByteType = 1009; +const ByteType = 1010; +const ShortType = 1011; +const UnsignedShortType = 1012; +const IntType = 1013; +const UnsignedIntType = 1014; +const FloatType = 1015; +const HalfFloatType = 1016; +const UnsignedShort4444Type = 1017; +const UnsignedShort5551Type = 1018; +const UnsignedInt248Type = 1020; +const UnsignedInt5999Type = 35902; +const AlphaFormat = 1021; +const RGBFormat = 1022; +const RGBAFormat = 1023; +const LuminanceFormat = 1024; +const LuminanceAlphaFormat = 1025; +const DepthFormat = 1026; +const DepthStencilFormat = 1027; +const RedFormat = 1028; +const RedIntegerFormat = 1029; +const RGFormat = 1030; +const RGIntegerFormat = 1031; +const RGBIntegerFormat = 1032; +const RGBAIntegerFormat = 1033; +const RGB_S3TC_DXT1_Format = 33776; +const RGBA_S3TC_DXT1_Format = 33777; +const RGBA_S3TC_DXT3_Format = 33778; +const RGBA_S3TC_DXT5_Format = 33779; +const RGB_PVRTC_4BPPV1_Format = 35840; +const RGB_PVRTC_2BPPV1_Format = 35841; +const RGBA_PVRTC_4BPPV1_Format = 35842; +const RGBA_PVRTC_2BPPV1_Format = 35843; +const RGB_ETC1_Format = 36196; +const RGB_ETC2_Format = 37492; +const RGBA_ETC2_EAC_Format = 37496; +const RGBA_ASTC_4x4_Format = 37808; +const RGBA_ASTC_5x4_Format = 37809; +const RGBA_ASTC_5x5_Format = 37810; +const RGBA_ASTC_6x5_Format = 37811; +const RGBA_ASTC_6x6_Format = 37812; +const RGBA_ASTC_8x5_Format = 37813; +const RGBA_ASTC_8x6_Format = 37814; +const RGBA_ASTC_8x8_Format = 37815; +const RGBA_ASTC_10x5_Format = 37816; +const RGBA_ASTC_10x6_Format = 37817; +const RGBA_ASTC_10x8_Format = 37818; +const RGBA_ASTC_10x10_Format = 37819; +const RGBA_ASTC_12x10_Format = 37820; +const RGBA_ASTC_12x12_Format = 37821; +const RGBA_BPTC_Format = 36492; +const RGB_BPTC_SIGNED_Format = 36494; +const RGB_BPTC_UNSIGNED_Format = 36495; +const RED_RGTC1_Format = 36283; +const SIGNED_RED_RGTC1_Format = 36284; +const RED_GREEN_RGTC2_Format = 36285; +const SIGNED_RED_GREEN_RGTC2_Format = 36286; +const LoopOnce = 2200; +const LoopRepeat = 2201; +const LoopPingPong = 2202; +const InterpolateDiscrete = 2300; +const InterpolateLinear = 2301; +const InterpolateSmooth = 2302; +const ZeroCurvatureEnding = 2400; +const ZeroSlopeEnding = 2401; +const WrapAroundEnding = 2402; +const NormalAnimationBlendMode = 2500; +const AdditiveAnimationBlendMode = 2501; +const TrianglesDrawMode = 0; +const TriangleStripDrawMode = 1; +const TriangleFanDrawMode = 2; +const BasicDepthPacking = 3200; +const RGBADepthPacking = 3201; +const RGBDepthPacking = 3202; +const RGDepthPacking = 3203; +const TangentSpaceNormalMap = 0; +const ObjectSpaceNormalMap = 1; +const NoColorSpace = ""; +const SRGBColorSpace = "srgb"; +const LinearSRGBColorSpace = "srgb-linear"; +const LinearTransfer = "linear"; +const SRGBTransfer = "srgb"; +const ZeroStencilOp = 0; +const KeepStencilOp = 7680; +const ReplaceStencilOp = 7681; +const IncrementStencilOp = 7682; +const DecrementStencilOp = 7683; +const IncrementWrapStencilOp = 34055; +const DecrementWrapStencilOp = 34056; +const InvertStencilOp = 5386; +const NeverStencilFunc = 512; +const LessStencilFunc = 513; +const EqualStencilFunc = 514; +const LessEqualStencilFunc = 515; +const GreaterStencilFunc = 516; +const NotEqualStencilFunc = 517; +const GreaterEqualStencilFunc = 518; +const AlwaysStencilFunc = 519; +const NeverCompare = 512; +const LessCompare = 513; +const EqualCompare = 514; +const LessEqualCompare = 515; +const GreaterCompare = 516; +const NotEqualCompare = 517; +const GreaterEqualCompare = 518; +const AlwaysCompare = 519; +const StaticDrawUsage = 35044; +const DynamicDrawUsage = 35048; +const StreamDrawUsage = 35040; +const StaticReadUsage = 35045; +const DynamicReadUsage = 35049; +const StreamReadUsage = 35041; +const StaticCopyUsage = 35046; +const DynamicCopyUsage = 35050; +const StreamCopyUsage = 35042; +const GLSL1 = "100"; +const GLSL3 = "300 es"; +const WebGLCoordinateSystem = 2e3; +const WebGPUCoordinateSystem = 2001; +class EventDispatcher { + static { + __name(this, "EventDispatcher"); + } + addEventListener(type, listener) { + if (this._listeners === void 0) this._listeners = {}; + const listeners = this._listeners; + if (listeners[type] === void 0) { + listeners[type] = []; + } + if (listeners[type].indexOf(listener) === -1) { + listeners[type].push(listener); + } + } + hasEventListener(type, listener) { + if (this._listeners === void 0) return false; + const listeners = this._listeners; + return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1; + } + removeEventListener(type, listener) { + if (this._listeners === void 0) return; + const listeners = this._listeners; + const listenerArray = listeners[type]; + if (listenerArray !== void 0) { + const index = listenerArray.indexOf(listener); + if (index !== -1) { + listenerArray.splice(index, 1); + } + } + } + dispatchEvent(event) { + if (this._listeners === void 0) return; + const listeners = this._listeners; + const listenerArray = listeners[event.type]; + if (listenerArray !== void 0) { + event.target = this; + const array = listenerArray.slice(0); + for (let i = 0, l = array.length; i < l; i++) { + array[i].call(this, event); + } + event.target = null; + } + } +} +const _lut = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"]; +let _seed = 1234567; +const DEG2RAD = Math.PI / 180; +const RAD2DEG = 180 / Math.PI; +function generateUUID() { + const d0 = Math.random() * 4294967295 | 0; + const d1 = Math.random() * 4294967295 | 0; + const d2 = Math.random() * 4294967295 | 0; + const d3 = Math.random() * 4294967295 | 0; + const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255]; + return uuid.toLowerCase(); +} +__name(generateUUID, "generateUUID"); +function clamp(value, min, max2) { + return Math.max(min, Math.min(max2, value)); +} +__name(clamp, "clamp"); +function euclideanModulo(n, m) { + return (n % m + m) % m; +} +__name(euclideanModulo, "euclideanModulo"); +function mapLinear(x, a1, a2, b1, b22) { + return b1 + (x - a1) * (b22 - b1) / (a2 - a1); +} +__name(mapLinear, "mapLinear"); +function inverseLerp(x, y, value) { + if (x !== y) { + return (value - x) / (y - x); + } else { + return 0; + } +} +__name(inverseLerp, "inverseLerp"); +function lerp(x, y, t2) { + return (1 - t2) * x + t2 * y; +} +__name(lerp, "lerp"); +function damp(x, y, lambda, dt) { + return lerp(x, y, 1 - Math.exp(-lambda * dt)); +} +__name(damp, "damp"); +function pingpong(x, length = 1) { + return length - Math.abs(euclideanModulo(x, length * 2) - length); +} +__name(pingpong, "pingpong"); +function smoothstep(x, min, max2) { + if (x <= min) return 0; + if (x >= max2) return 1; + x = (x - min) / (max2 - min); + return x * x * (3 - 2 * x); +} +__name(smoothstep, "smoothstep"); +function smootherstep(x, min, max2) { + if (x <= min) return 0; + if (x >= max2) return 1; + x = (x - min) / (max2 - min); + return x * x * x * (x * (x * 6 - 15) + 10); +} +__name(smootherstep, "smootherstep"); +function randInt(low, high) { + return low + Math.floor(Math.random() * (high - low + 1)); +} +__name(randInt, "randInt"); +function randFloat(low, high) { + return low + Math.random() * (high - low); +} +__name(randFloat, "randFloat"); +function randFloatSpread(range) { + return range * (0.5 - Math.random()); +} +__name(randFloatSpread, "randFloatSpread"); +function seededRandom(s) { + if (s !== void 0) _seed = s; + let t2 = _seed += 1831565813; + t2 = Math.imul(t2 ^ t2 >>> 15, t2 | 1); + t2 ^= t2 + Math.imul(t2 ^ t2 >>> 7, t2 | 61); + return ((t2 ^ t2 >>> 14) >>> 0) / 4294967296; +} +__name(seededRandom, "seededRandom"); +function degToRad(degrees) { + return degrees * DEG2RAD; +} +__name(degToRad, "degToRad"); +function radToDeg(radians) { + return radians * RAD2DEG; +} +__name(radToDeg, "radToDeg"); +function isPowerOfTwo(value) { + return (value & value - 1) === 0 && value !== 0; +} +__name(isPowerOfTwo, "isPowerOfTwo"); +function ceilPowerOfTwo(value) { + return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2)); +} +__name(ceilPowerOfTwo, "ceilPowerOfTwo"); +function floorPowerOfTwo(value) { + return Math.pow(2, Math.floor(Math.log(value) / Math.LN2)); +} +__name(floorPowerOfTwo, "floorPowerOfTwo"); +function setQuaternionFromProperEuler(q, a, b, c, order) { + const cos = Math.cos; + const sin = Math.sin; + const c2 = cos(b / 2); + const s2 = sin(b / 2); + const c13 = cos((a + c) / 2); + const s13 = sin((a + c) / 2); + const c1_3 = cos((a - c) / 2); + const s1_3 = sin((a - c) / 2); + const c3_1 = cos((c - a) / 2); + const s3_1 = sin((c - a) / 2); + switch (order) { + case "XYX": + q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13); + break; + case "YZY": + q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13); + break; + case "ZXZ": + q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13); + break; + case "XZX": + q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13); + break; + case "YXY": + q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13); + break; + case "ZYZ": + q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + order); + } +} +__name(setQuaternionFromProperEuler, "setQuaternionFromProperEuler"); +function denormalize(value, array) { + switch (array.constructor) { + case Float32Array: + return value; + case Uint32Array: + return value / 4294967295; + case Uint16Array: + return value / 65535; + case Uint8Array: + return value / 255; + case Int32Array: + return Math.max(value / 2147483647, -1); + case Int16Array: + return Math.max(value / 32767, -1); + case Int8Array: + return Math.max(value / 127, -1); + default: + throw new Error("Invalid component type."); + } +} +__name(denormalize, "denormalize"); +function normalize(value, array) { + switch (array.constructor) { + case Float32Array: + return value; + case Uint32Array: + return Math.round(value * 4294967295); + case Uint16Array: + return Math.round(value * 65535); + case Uint8Array: + return Math.round(value * 255); + case Int32Array: + return Math.round(value * 2147483647); + case Int16Array: + return Math.round(value * 32767); + case Int8Array: + return Math.round(value * 127); + default: + throw new Error("Invalid component type."); + } +} +__name(normalize, "normalize"); +const MathUtils = { + DEG2RAD, + RAD2DEG, + generateUUID, + clamp, + euclideanModulo, + mapLinear, + inverseLerp, + lerp, + damp, + pingpong, + smoothstep, + smootherstep, + randInt, + randFloat, + randFloatSpread, + seededRandom, + degToRad, + radToDeg, + isPowerOfTwo, + ceilPowerOfTwo, + floorPowerOfTwo, + setQuaternionFromProperEuler, + normalize, + denormalize +}; +class Vector2 { + static { + __name(this, "Vector2"); + } + constructor(x = 0, y = 0) { + Vector2.prototype.isVector2 = true; + this.x = x; + this.y = y; + } + get width() { + return this.x; + } + set width(value) { + this.x = value; + } + get height() { + return this.y; + } + set height(value) { + this.y = value; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y); + } + copy(v) { + this.x = v.x; + this.y = v.y; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + return this; + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + applyMatrix3(m) { + const x = this.x, y = this.y; + const e = m.elements; + this.x = e[0] * x + e[3] * y + e[6]; + this.y = e[1] * x + e[4] * y + e[7]; + return this; + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + return this; + } + clamp(min, max2) { + this.x = Math.max(min.x, Math.min(max2.x, this.x)); + this.y = Math.max(min.y, Math.min(max2.y, this.y)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + return this; + } + clampLength(min, max2) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max2, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y; + } + cross(v) { + return this.x * v.y - this.y * v.x; + } + lengthSq() { + return this.x * this.x + this.y * this.y; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + angle() { + const angle = Math.atan2(-this.y, -this.x) + Math.PI; + return angle; + } + angleTo(v) { + const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); + if (denominator === 0) return Math.PI / 2; + const theta = this.dot(v) / denominator; + return Math.acos(clamp(theta, -1, 1)); + } + distanceTo(v) { + return Math.sqrt(this.distanceToSquared(v)); + } + distanceToSquared(v) { + const dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + } + manhattanDistanceTo(v) { + return Math.abs(this.x - v.x) + Math.abs(this.y - v.y); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + return this; + } + rotateAround(center, angle) { + const c = Math.cos(angle), s = Math.sin(angle); + const x = this.x - center.x; + const y = this.y - center.y; + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + } +} +class Matrix3 { + static { + __name(this, "Matrix3"); + } + constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + Matrix3.prototype.isMatrix3 = true; + this.elements = [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33); + } + } + set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + const te2 = this.elements; + te2[0] = n11; + te2[1] = n21; + te2[2] = n31; + te2[3] = n12; + te2[4] = n22; + te2[5] = n32; + te2[6] = n13; + te2[7] = n23; + te2[8] = n33; + return this; + } + identity() { + this.set( + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + return this; + } + copy(m) { + const te2 = this.elements; + const me = m.elements; + te2[0] = me[0]; + te2[1] = me[1]; + te2[2] = me[2]; + te2[3] = me[3]; + te2[4] = me[4]; + te2[5] = me[5]; + te2[6] = me[6]; + te2[7] = me[7]; + te2[8] = me[8]; + return this; + } + extractBasis(xAxis, yAxis, zAxis) { + xAxis.setFromMatrix3Column(this, 0); + yAxis.setFromMatrix3Column(this, 1); + zAxis.setFromMatrix3Column(this, 2); + return this; + } + setFromMatrix4(m) { + const me = m.elements; + this.set( + me[0], + me[4], + me[8], + me[1], + me[5], + me[9], + me[2], + me[6], + me[10] + ); + return this; + } + multiply(m) { + return this.multiplyMatrices(this, m); + } + premultiply(m) { + return this.multiplyMatrices(m, this); + } + multiplyMatrices(a, b) { + const ae = a.elements; + const be = b.elements; + const te2 = this.elements; + const a11 = ae[0], a12 = ae[3], a13 = ae[6]; + const a21 = ae[1], a22 = ae[4], a23 = ae[7]; + const a31 = ae[2], a32 = ae[5], a33 = ae[8]; + const b11 = be[0], b12 = be[3], b13 = be[6]; + const b21 = be[1], b22 = be[4], b23 = be[7]; + const b31 = be[2], b32 = be[5], b33 = be[8]; + te2[0] = a11 * b11 + a12 * b21 + a13 * b31; + te2[3] = a11 * b12 + a12 * b22 + a13 * b32; + te2[6] = a11 * b13 + a12 * b23 + a13 * b33; + te2[1] = a21 * b11 + a22 * b21 + a23 * b31; + te2[4] = a21 * b12 + a22 * b22 + a23 * b32; + te2[7] = a21 * b13 + a22 * b23 + a23 * b33; + te2[2] = a31 * b11 + a32 * b21 + a33 * b31; + te2[5] = a31 * b12 + a32 * b22 + a33 * b32; + te2[8] = a31 * b13 + a32 * b23 + a33 * b33; + return this; + } + multiplyScalar(s) { + const te2 = this.elements; + te2[0] *= s; + te2[3] *= s; + te2[6] *= s; + te2[1] *= s; + te2[4] *= s; + te2[7] *= s; + te2[2] *= s; + te2[5] *= s; + te2[8] *= s; + return this; + } + determinant() { + const te2 = this.elements; + const a = te2[0], b = te2[1], c = te2[2], d = te2[3], e = te2[4], f = te2[5], g = te2[6], h = te2[7], i = te2[8]; + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + } + invert() { + const te2 = this.elements, n11 = te2[0], n21 = te2[1], n31 = te2[2], n12 = te2[3], n22 = te2[4], n32 = te2[5], n13 = te2[6], n23 = te2[7], n33 = te2[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; + if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const detInv = 1 / det; + te2[0] = t11 * detInv; + te2[1] = (n31 * n23 - n33 * n21) * detInv; + te2[2] = (n32 * n21 - n31 * n22) * detInv; + te2[3] = t12 * detInv; + te2[4] = (n33 * n11 - n31 * n13) * detInv; + te2[5] = (n31 * n12 - n32 * n11) * detInv; + te2[6] = t13 * detInv; + te2[7] = (n21 * n13 - n23 * n11) * detInv; + te2[8] = (n22 * n11 - n21 * n12) * detInv; + return this; + } + transpose() { + let tmp2; + const m = this.elements; + tmp2 = m[1]; + m[1] = m[3]; + m[3] = tmp2; + tmp2 = m[2]; + m[2] = m[6]; + m[6] = tmp2; + tmp2 = m[5]; + m[5] = m[7]; + m[7] = tmp2; + return this; + } + getNormalMatrix(matrix4) { + return this.setFromMatrix4(matrix4).invert().transpose(); + } + transposeIntoArray(r) { + const m = this.elements; + r[0] = m[0]; + r[1] = m[3]; + r[2] = m[6]; + r[3] = m[1]; + r[4] = m[4]; + r[5] = m[7]; + r[6] = m[2]; + r[7] = m[5]; + r[8] = m[8]; + return this; + } + setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { + const c = Math.cos(rotation); + const s = Math.sin(rotation); + this.set( + sx * c, + sx * s, + -sx * (c * cx + s * cy) + cx + tx, + -sy * s, + sy * c, + -sy * (-s * cx + c * cy) + cy + ty, + 0, + 0, + 1 + ); + return this; + } + // + scale(sx, sy) { + this.premultiply(_m3.makeScale(sx, sy)); + return this; + } + rotate(theta) { + this.premultiply(_m3.makeRotation(-theta)); + return this; + } + translate(tx, ty) { + this.premultiply(_m3.makeTranslation(tx, ty)); + return this; + } + // for 2D Transforms + makeTranslation(x, y) { + if (x.isVector2) { + this.set( + 1, + 0, + x.x, + 0, + 1, + x.y, + 0, + 0, + 1 + ); + } else { + this.set( + 1, + 0, + x, + 0, + 1, + y, + 0, + 0, + 1 + ); + } + return this; + } + makeRotation(theta) { + const c = Math.cos(theta); + const s = Math.sin(theta); + this.set( + c, + -s, + 0, + s, + c, + 0, + 0, + 0, + 1 + ); + return this; + } + makeScale(x, y) { + this.set( + x, + 0, + 0, + 0, + y, + 0, + 0, + 0, + 1 + ); + return this; + } + // + equals(matrix) { + const te2 = this.elements; + const me = matrix.elements; + for (let i = 0; i < 9; i++) { + if (te2[i] !== me[i]) return false; + } + return true; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 9; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + toArray(array = [], offset = 0) { + const te2 = this.elements; + array[offset] = te2[0]; + array[offset + 1] = te2[1]; + array[offset + 2] = te2[2]; + array[offset + 3] = te2[3]; + array[offset + 4] = te2[4]; + array[offset + 5] = te2[5]; + array[offset + 6] = te2[6]; + array[offset + 7] = te2[7]; + array[offset + 8] = te2[8]; + return array; + } + clone() { + return new this.constructor().fromArray(this.elements); + } +} +const _m3 = /* @__PURE__ */ new Matrix3(); +function arrayNeedsUint32(array) { + for (let i = array.length - 1; i >= 0; --i) { + if (array[i] >= 65535) return true; + } + return false; +} +__name(arrayNeedsUint32, "arrayNeedsUint32"); +const TYPED_ARRAYS = { + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array +}; +function getTypedArray(type, buffer) { + return new TYPED_ARRAYS[type](buffer); +} +__name(getTypedArray, "getTypedArray"); +function createElementNS(name) { + return document.createElementNS("http://www.w3.org/1999/xhtml", name); +} +__name(createElementNS, "createElementNS"); +function createCanvasElement() { + const canvas = createElementNS("canvas"); + canvas.style.display = "block"; + return canvas; +} +__name(createCanvasElement, "createCanvasElement"); +const _cache = {}; +function warnOnce(message) { + if (message in _cache) return; + _cache[message] = true; + console.warn(message); +} +__name(warnOnce, "warnOnce"); +function probeAsync(gl, sync, interval) { + return new Promise(function(resolve, reject) { + function probe() { + switch (gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0)) { + case gl.WAIT_FAILED: + reject(); + break; + case gl.TIMEOUT_EXPIRED: + setTimeout(probe, interval); + break; + default: + resolve(); + } + } + __name(probe, "probe"); + setTimeout(probe, interval); + }); +} +__name(probeAsync, "probeAsync"); +function toNormalizedProjectionMatrix(projectionMatrix) { + const m = projectionMatrix.elements; + m[2] = 0.5 * m[2] + 0.5 * m[3]; + m[6] = 0.5 * m[6] + 0.5 * m[7]; + m[10] = 0.5 * m[10] + 0.5 * m[11]; + m[14] = 0.5 * m[14] + 0.5 * m[15]; +} +__name(toNormalizedProjectionMatrix, "toNormalizedProjectionMatrix"); +function toReversedProjectionMatrix(projectionMatrix) { + const m = projectionMatrix.elements; + const isPerspectiveMatrix = m[11] === -1; + if (isPerspectiveMatrix) { + m[10] = -m[10] - 1; + m[14] = -m[14]; + } else { + m[10] = -m[10]; + m[14] = -m[14] + 1; + } +} +__name(toReversedProjectionMatrix, "toReversedProjectionMatrix"); +const ColorManagement = { + enabled: true, + workingColorSpace: LinearSRGBColorSpace, + /** + * Implementations of supported color spaces. + * + * Required: + * - primaries: chromaticity coordinates [ rx ry gx gy bx by ] + * - whitePoint: reference white [ x y ] + * - transfer: transfer function (pre-defined) + * - toXYZ: Matrix3 RGB to XYZ transform + * - fromXYZ: Matrix3 XYZ to RGB transform + * - luminanceCoefficients: RGB luminance coefficients + * + * Optional: + * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace } + * - workingColorSpaceConfig: { unpackColorSpace: ColorSpace } + * + * Reference: + * - https://www.russellcottrell.com/photo/matrixCalculator.htm + */ + spaces: {}, + convert: /* @__PURE__ */ __name(function(color, sourceColorSpace, targetColorSpace) { + if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) { + return color; + } + if (this.spaces[sourceColorSpace].transfer === SRGBTransfer) { + color.r = SRGBToLinear(color.r); + color.g = SRGBToLinear(color.g); + color.b = SRGBToLinear(color.b); + } + if (this.spaces[sourceColorSpace].primaries !== this.spaces[targetColorSpace].primaries) { + color.applyMatrix3(this.spaces[sourceColorSpace].toXYZ); + color.applyMatrix3(this.spaces[targetColorSpace].fromXYZ); + } + if (this.spaces[targetColorSpace].transfer === SRGBTransfer) { + color.r = LinearToSRGB(color.r); + color.g = LinearToSRGB(color.g); + color.b = LinearToSRGB(color.b); + } + return color; + }, "convert"), + fromWorkingColorSpace: /* @__PURE__ */ __name(function(color, targetColorSpace) { + return this.convert(color, this.workingColorSpace, targetColorSpace); + }, "fromWorkingColorSpace"), + toWorkingColorSpace: /* @__PURE__ */ __name(function(color, sourceColorSpace) { + return this.convert(color, sourceColorSpace, this.workingColorSpace); + }, "toWorkingColorSpace"), + getPrimaries: /* @__PURE__ */ __name(function(colorSpace) { + return this.spaces[colorSpace].primaries; + }, "getPrimaries"), + getTransfer: /* @__PURE__ */ __name(function(colorSpace) { + if (colorSpace === NoColorSpace) return LinearTransfer; + return this.spaces[colorSpace].transfer; + }, "getTransfer"), + getLuminanceCoefficients: /* @__PURE__ */ __name(function(target, colorSpace = this.workingColorSpace) { + return target.fromArray(this.spaces[colorSpace].luminanceCoefficients); + }, "getLuminanceCoefficients"), + define: /* @__PURE__ */ __name(function(colorSpaces) { + Object.assign(this.spaces, colorSpaces); + }, "define"), + // Internal APIs + _getMatrix: /* @__PURE__ */ __name(function(targetMatrix, sourceColorSpace, targetColorSpace) { + return targetMatrix.copy(this.spaces[sourceColorSpace].toXYZ).multiply(this.spaces[targetColorSpace].fromXYZ); + }, "_getMatrix"), + _getDrawingBufferColorSpace: /* @__PURE__ */ __name(function(colorSpace) { + return this.spaces[colorSpace].outputColorSpaceConfig.drawingBufferColorSpace; + }, "_getDrawingBufferColorSpace"), + _getUnpackColorSpace: /* @__PURE__ */ __name(function(colorSpace = this.workingColorSpace) { + return this.spaces[colorSpace].workingColorSpaceConfig.unpackColorSpace; + }, "_getUnpackColorSpace") +}; +function SRGBToLinear(c) { + return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4); +} +__name(SRGBToLinear, "SRGBToLinear"); +function LinearToSRGB(c) { + return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055; +} +__name(LinearToSRGB, "LinearToSRGB"); +const REC709_PRIMARIES = [0.64, 0.33, 0.3, 0.6, 0.15, 0.06]; +const REC709_LUMINANCE_COEFFICIENTS = [0.2126, 0.7152, 0.0722]; +const D65 = [0.3127, 0.329]; +const LINEAR_REC709_TO_XYZ = /* @__PURE__ */ new Matrix3().set( + 0.4123908, + 0.3575843, + 0.1804808, + 0.212639, + 0.7151687, + 0.0721923, + 0.0193308, + 0.1191948, + 0.9505322 +); +const XYZ_TO_LINEAR_REC709 = /* @__PURE__ */ new Matrix3().set( + 3.2409699, + -1.5373832, + -0.4986108, + -0.9692436, + 1.8759675, + 0.0415551, + 0.0556301, + -0.203977, + 1.0569715 +); +ColorManagement.define({ + [LinearSRGBColorSpace]: { + primaries: REC709_PRIMARIES, + whitePoint: D65, + transfer: LinearTransfer, + toXYZ: LINEAR_REC709_TO_XYZ, + fromXYZ: XYZ_TO_LINEAR_REC709, + luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS, + workingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace }, + outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace } + }, + [SRGBColorSpace]: { + primaries: REC709_PRIMARIES, + whitePoint: D65, + transfer: SRGBTransfer, + toXYZ: LINEAR_REC709_TO_XYZ, + fromXYZ: XYZ_TO_LINEAR_REC709, + luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS, + outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace } + } +}); +let _canvas; +class ImageUtils { + static { + __name(this, "ImageUtils"); + } + static getDataURL(image) { + if (/^data:/i.test(image.src)) { + return image.src; + } + if (typeof HTMLCanvasElement === "undefined") { + return image.src; + } + let canvas; + if (image instanceof HTMLCanvasElement) { + canvas = image; + } else { + if (_canvas === void 0) _canvas = createElementNS("canvas"); + _canvas.width = image.width; + _canvas.height = image.height; + const context = _canvas.getContext("2d"); + if (image instanceof ImageData) { + context.putImageData(image, 0, 0); + } else { + context.drawImage(image, 0, 0, image.width, image.height); + } + canvas = _canvas; + } + if (canvas.width > 2048 || canvas.height > 2048) { + console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons", image); + return canvas.toDataURL("image/jpeg", 0.6); + } else { + return canvas.toDataURL("image/png"); + } + } + static sRGBToLinear(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + const canvas = createElementNS("canvas"); + canvas.width = image.width; + canvas.height = image.height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, image.width, image.height); + const imageData = context.getImageData(0, 0, image.width, image.height); + const data = imageData.data; + for (let i = 0; i < data.length; i++) { + data[i] = SRGBToLinear(data[i] / 255) * 255; + } + context.putImageData(imageData, 0, 0); + return canvas; + } else if (image.data) { + const data = image.data.slice(0); + for (let i = 0; i < data.length; i++) { + if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) { + data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255); + } else { + data[i] = SRGBToLinear(data[i]); + } + } + return { + data, + width: image.width, + height: image.height + }; + } else { + console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."); + return image; + } + } +} +let _sourceId = 0; +class Source { + static { + __name(this, "Source"); + } + constructor(data = null) { + this.isSource = true; + Object.defineProperty(this, "id", { value: _sourceId++ }); + this.uuid = generateUUID(); + this.data = data; + this.dataReady = true; + this.version = 0; + } + set needsUpdate(value) { + if (value === true) this.version++; + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (!isRootObject && meta.images[this.uuid] !== void 0) { + return meta.images[this.uuid]; + } + const output = { + uuid: this.uuid, + url: "" + }; + const data = this.data; + if (data !== null) { + let url; + if (Array.isArray(data)) { + url = []; + for (let i = 0, l = data.length; i < l; i++) { + if (data[i].isDataTexture) { + url.push(serializeImage(data[i].image)); + } else { + url.push(serializeImage(data[i])); + } + } + } else { + url = serializeImage(data); + } + output.url = url; + } + if (!isRootObject) { + meta.images[this.uuid] = output; + } + return output; + } +} +function serializeImage(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + return ImageUtils.getDataURL(image); + } else { + if (image.data) { + return { + data: Array.from(image.data), + width: image.width, + height: image.height, + type: image.data.constructor.name + }; + } else { + console.warn("THREE.Texture: Unable to serialize Texture."); + return {}; + } + } +} +__name(serializeImage, "serializeImage"); +let _textureId = 0; +class Texture extends EventDispatcher { + static { + __name(this, "Texture"); + } + constructor(image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace) { + super(); + this.isTexture = true; + Object.defineProperty(this, "id", { value: _textureId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.source = new Source(image); + this.mipmaps = []; + this.mapping = mapping; + this.channel = 0; + this.wrapS = wrapS; + this.wrapT = wrapT; + this.magFilter = magFilter; + this.minFilter = minFilter; + this.anisotropy = anisotropy; + this.format = format; + this.internalFormat = null; + this.type = type; + this.offset = new Vector2(0, 0); + this.repeat = new Vector2(1, 1); + this.center = new Vector2(0, 0); + this.rotation = 0; + this.matrixAutoUpdate = true; + this.matrix = new Matrix3(); + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; + this.colorSpace = colorSpace; + this.userData = {}; + this.version = 0; + this.onUpdate = null; + this.isRenderTargetTexture = false; + this.pmremVersion = 0; + } + get image() { + return this.source.data; + } + set image(value = null) { + this.source.data = value; + } + updateMatrix() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y); + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.name = source.name; + this.source = source.source; + this.mipmaps = source.mipmaps.slice(0); + this.mapping = source.mapping; + this.channel = source.channel; + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + this.anisotropy = source.anisotropy; + this.format = source.format; + this.internalFormat = source.internalFormat; + this.type = source.type; + this.offset.copy(source.offset); + this.repeat.copy(source.repeat); + this.center.copy(source.center); + this.rotation = source.rotation; + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrix.copy(source.matrix); + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.colorSpace = source.colorSpace; + this.userData = JSON.parse(JSON.stringify(source.userData)); + this.needsUpdate = true; + return this; + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (!isRootObject && meta.textures[this.uuid] !== void 0) { + return meta.textures[this.uuid]; + } + const output = { + metadata: { + version: 4.6, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + image: this.source.toJSON(meta).uuid, + mapping: this.mapping, + channel: this.channel, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + internalFormat: this.internalFormat, + type: this.type, + colorSpace: this.colorSpace, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + generateMipmaps: this.generateMipmaps, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (Object.keys(this.userData).length > 0) output.userData = this.userData; + if (!isRootObject) { + meta.textures[this.uuid] = output; + } + return output; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } + transformUv(uv) { + if (this.mapping !== UVMapping) return uv; + uv.applyMatrix3(this.matrix); + if (uv.x < 0 || uv.x > 1) { + switch (this.wrapS) { + case RepeatWrapping: + uv.x = uv.x - Math.floor(uv.x); + break; + case ClampToEdgeWrapping: + uv.x = uv.x < 0 ? 0 : 1; + break; + case MirroredRepeatWrapping: + if (Math.abs(Math.floor(uv.x) % 2) === 1) { + uv.x = Math.ceil(uv.x) - uv.x; + } else { + uv.x = uv.x - Math.floor(uv.x); + } + break; + } + } + if (uv.y < 0 || uv.y > 1) { + switch (this.wrapT) { + case RepeatWrapping: + uv.y = uv.y - Math.floor(uv.y); + break; + case ClampToEdgeWrapping: + uv.y = uv.y < 0 ? 0 : 1; + break; + case MirroredRepeatWrapping: + if (Math.abs(Math.floor(uv.y) % 2) === 1) { + uv.y = Math.ceil(uv.y) - uv.y; + } else { + uv.y = uv.y - Math.floor(uv.y); + } + break; + } + } + if (this.flipY) { + uv.y = 1 - uv.y; + } + return uv; + } + set needsUpdate(value) { + if (value === true) { + this.version++; + this.source.needsUpdate = true; + } + } + set needsPMREMUpdate(value) { + if (value === true) { + this.pmremVersion++; + } + } +} +Texture.DEFAULT_IMAGE = null; +Texture.DEFAULT_MAPPING = UVMapping; +Texture.DEFAULT_ANISOTROPY = 1; +class Vector4 { + static { + __name(this, "Vector4"); + } + constructor(x = 0, y = 0, z = 0, w = 1) { + Vector4.prototype.isVector4 = true; + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + get width() { + return this.z; + } + set width(value) { + this.z = value; + } + get height() { + return this.w; + } + set height(value) { + this.w = value; + } + set(x, y, z, w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setZ(z) { + this.z = z; + return this; + } + setW(w) { + this.w = w; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + case 2: + this.z = value; + break; + case 3: + this.w = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w); + } + copy(v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = v.w !== void 0 ? v.w : 1; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + this.z += s; + this.w += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + this.w *= v.w; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + return this; + } + applyMatrix4(m) { + const x = this.x, y = this.y, z = this.z, w = this.w; + const e = m.elements; + this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w; + this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w; + this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w; + this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w; + return this; + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + this.w /= v.w; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + setAxisAngleFromQuaternion(q) { + this.w = 2 * Math.acos(q.w); + const s = Math.sqrt(1 - q.w * q.w); + if (s < 1e-4) { + this.x = 1; + this.y = 0; + this.z = 0; + } else { + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + } + return this; + } + setAxisAngleFromRotationMatrix(m) { + let angle, x, y, z; + const epsilon = 0.01, epsilon2 = 0.1, te2 = m.elements, m11 = te2[0], m12 = te2[4], m13 = te2[8], m21 = te2[1], m22 = te2[5], m23 = te2[9], m31 = te2[2], m32 = te2[6], m33 = te2[10]; + if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) { + if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) { + this.set(1, 0, 0, 0); + return this; + } + angle = Math.PI; + const xx = (m11 + 1) / 2; + const yy = (m22 + 1) / 2; + const zz = (m33 + 1) / 2; + const xy = (m12 + m21) / 4; + const xz = (m13 + m31) / 4; + const yz = (m23 + m32) / 4; + if (xx > yy && xx > zz) { + if (xx < epsilon) { + x = 0; + y = 0.707106781; + z = 0.707106781; + } else { + x = Math.sqrt(xx); + y = xy / x; + z = xz / x; + } + } else if (yy > zz) { + if (yy < epsilon) { + x = 0.707106781; + y = 0; + z = 0.707106781; + } else { + y = Math.sqrt(yy); + x = xy / y; + z = yz / y; + } + } else { + if (zz < epsilon) { + x = 0.707106781; + y = 0.707106781; + z = 0; + } else { + z = Math.sqrt(zz); + x = xz / z; + y = yz / z; + } + } + this.set(x, y, z, angle); + return this; + } + let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); + if (Math.abs(s) < 1e-3) s = 1; + this.x = (m32 - m23) / s; + this.y = (m13 - m31) / s; + this.z = (m21 - m12) / s; + this.w = Math.acos((m11 + m22 + m33 - 1) / 2); + return this; + } + setFromMatrixPosition(m) { + const e = m.elements; + this.x = e[12]; + this.y = e[13]; + this.z = e[14]; + this.w = e[15]; + return this; + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + this.z = Math.min(this.z, v.z); + this.w = Math.min(this.w, v.w); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + this.z = Math.max(this.z, v.z); + this.w = Math.max(this.w, v.w); + return this; + } + clamp(min, max2) { + this.x = Math.max(min.x, Math.min(max2.x, this.x)); + this.y = Math.max(min.y, Math.min(max2.y, this.y)); + this.z = Math.max(min.z, Math.min(max2.z, this.z)); + this.w = Math.max(min.w, Math.min(max2.w, this.w)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + this.z = Math.max(minVal, Math.min(maxVal, this.z)); + this.w = Math.max(minVal, Math.min(maxVal, this.w)); + return this; + } + clampLength(min, max2) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max2, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + this.w = Math.floor(this.w); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + this.w = Math.ceil(this.w); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + this.w = Math.round(this.w); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + this.z = Math.trunc(this.z); + this.w = Math.trunc(this.w); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + this.w = -this.w; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + this.z += (v.z - this.z) * alpha; + this.w += (v.w - this.w) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + this.z = v1.z + (v2.z - v1.z) * alpha; + this.w = v1.w + (v2.w - v1.w) * alpha; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + this.z = array[offset + 2]; + this.w = array[offset + 3]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + array[offset + 2] = this.z; + array[offset + 3] = this.w; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + this.z = attribute.getZ(index); + this.w = attribute.getW(index); + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + this.w = Math.random(); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + yield this.z; + yield this.w; + } +} +class RenderTarget extends EventDispatcher { + static { + __name(this, "RenderTarget"); + } + constructor(width = 1, height = 1, options = {}) { + super(); + this.isRenderTarget = true; + this.width = width; + this.height = height; + this.depth = 1; + this.scissor = new Vector4(0, 0, width, height); + this.scissorTest = false; + this.viewport = new Vector4(0, 0, width, height); + const image = { width, height, depth: 1 }; + options = Object.assign({ + generateMipmaps: false, + internalFormat: null, + minFilter: LinearFilter, + depthBuffer: true, + stencilBuffer: false, + resolveDepthBuffer: true, + resolveStencilBuffer: true, + depthTexture: null, + samples: 0, + count: 1 + }, options); + const texture = new Texture(image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); + texture.flipY = false; + texture.generateMipmaps = options.generateMipmaps; + texture.internalFormat = options.internalFormat; + this.textures = []; + const count = options.count; + for (let i = 0; i < count; i++) { + this.textures[i] = texture.clone(); + this.textures[i].isRenderTargetTexture = true; + } + this.depthBuffer = options.depthBuffer; + this.stencilBuffer = options.stencilBuffer; + this.resolveDepthBuffer = options.resolveDepthBuffer; + this.resolveStencilBuffer = options.resolveStencilBuffer; + this.depthTexture = options.depthTexture; + this.samples = options.samples; + } + get texture() { + return this.textures[0]; + } + set texture(value) { + this.textures[0] = value; + } + setSize(width, height, depth = 1) { + if (this.width !== width || this.height !== height || this.depth !== depth) { + this.width = width; + this.height = height; + this.depth = depth; + for (let i = 0, il = this.textures.length; i < il; i++) { + this.textures[i].image.width = width; + this.textures[i].image.height = height; + this.textures[i].image.depth = depth; + } + this.dispose(); + } + this.viewport.set(0, 0, width, height); + this.scissor.set(0, 0, width, height); + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.width = source.width; + this.height = source.height; + this.depth = source.depth; + this.scissor.copy(source.scissor); + this.scissorTest = source.scissorTest; + this.viewport.copy(source.viewport); + this.textures.length = 0; + for (let i = 0, il = source.textures.length; i < il; i++) { + this.textures[i] = source.textures[i].clone(); + this.textures[i].isRenderTargetTexture = true; + } + const image = Object.assign({}, source.texture.image); + this.texture.source = new Source(image); + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.resolveDepthBuffer = source.resolveDepthBuffer; + this.resolveStencilBuffer = source.resolveStencilBuffer; + if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); + this.samples = source.samples; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } +} +class WebGLRenderTarget extends RenderTarget { + static { + __name(this, "WebGLRenderTarget"); + } + constructor(width = 1, height = 1, options = {}) { + super(width, height, options); + this.isWebGLRenderTarget = true; + } +} +class DataArrayTexture extends Texture { + static { + __name(this, "DataArrayTexture"); + } + constructor(data = null, width = 1, height = 1, depth = 1) { + super(null); + this.isDataArrayTexture = true; + this.image = { data, width, height, depth }; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.wrapR = ClampToEdgeWrapping; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + this.layerUpdates = /* @__PURE__ */ new Set(); + } + addLayerUpdate(layerIndex) { + this.layerUpdates.add(layerIndex); + } + clearLayerUpdates() { + this.layerUpdates.clear(); + } +} +class WebGLArrayRenderTarget extends WebGLRenderTarget { + static { + __name(this, "WebGLArrayRenderTarget"); + } + constructor(width = 1, height = 1, depth = 1, options = {}) { + super(width, height, options); + this.isWebGLArrayRenderTarget = true; + this.depth = depth; + this.texture = new DataArrayTexture(null, width, height, depth); + this.texture.isRenderTargetTexture = true; + } +} +class Data3DTexture extends Texture { + static { + __name(this, "Data3DTexture"); + } + constructor(data = null, width = 1, height = 1, depth = 1) { + super(null); + this.isData3DTexture = true; + this.image = { data, width, height, depth }; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.wrapR = ClampToEdgeWrapping; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + } +} +class WebGL3DRenderTarget extends WebGLRenderTarget { + static { + __name(this, "WebGL3DRenderTarget"); + } + constructor(width = 1, height = 1, depth = 1, options = {}) { + super(width, height, options); + this.isWebGL3DRenderTarget = true; + this.depth = depth; + this.texture = new Data3DTexture(null, width, height, depth); + this.texture.isRenderTargetTexture = true; + } +} +class Quaternion { + static { + __name(this, "Quaternion"); + } + constructor(x = 0, y = 0, z = 0, w = 1) { + this.isQuaternion = true; + this._x = x; + this._y = y; + this._z = z; + this._w = w; + } + static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t2) { + let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3]; + if (t2 === 0) { + dst[dstOffset + 0] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + return; + } + if (t2 === 1) { + dst[dstOffset + 0] = x1; + dst[dstOffset + 1] = y1; + dst[dstOffset + 2] = z1; + dst[dstOffset + 3] = w1; + return; + } + if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { + let s = 1 - t2; + const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos; + if (sqrSin > Number.EPSILON) { + const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir); + s = Math.sin(s * len) / sin; + t2 = Math.sin(t2 * len) / sin; + } + const tDir = t2 * dir; + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + if (s === 1 - t2) { + const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + } + } + dst[dstOffset] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + } + static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { + const x0 = src0[srcOffset0]; + const y0 = src0[srcOffset0 + 1]; + const z0 = src0[srcOffset0 + 2]; + const w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1]; + const y1 = src1[srcOffset1 + 1]; + const z1 = src1[srcOffset1 + 2]; + const w1 = src1[srcOffset1 + 3]; + dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; + dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; + dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; + dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; + return dst; + } + get x() { + return this._x; + } + set x(value) { + this._x = value; + this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(value) { + this._y = value; + this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(value) { + this._z = value; + this._onChangeCallback(); + } + get w() { + return this._w; + } + set w(value) { + this._w = value; + this._onChangeCallback(); + } + set(x, y, z, w) { + this._x = x; + this._y = y; + this._z = z; + this._w = w; + this._onChangeCallback(); + return this; + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w); + } + copy(quaternion) { + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + this._onChangeCallback(); + return this; + } + setFromEuler(euler, update = true) { + const x = euler._x, y = euler._y, z = euler._z, order = euler._order; + const cos = Math.cos; + const sin = Math.sin; + const c1 = cos(x / 2); + const c2 = cos(y / 2); + const c3 = cos(z / 2); + const s1 = sin(x / 2); + const s2 = sin(y / 2); + const s3 = sin(z / 2); + switch (order) { + case "XYZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "YXZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "ZXY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "ZYX": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "YZX": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "XZY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order); + } + if (update === true) this._onChangeCallback(); + return this; + } + setFromAxisAngle(axis, angle) { + const halfAngle = angle / 2, s = Math.sin(halfAngle); + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos(halfAngle); + this._onChangeCallback(); + return this; + } + setFromRotationMatrix(m) { + const te2 = m.elements, m11 = te2[0], m12 = te2[4], m13 = te2[8], m21 = te2[1], m22 = te2[5], m23 = te2[9], m31 = te2[2], m32 = te2[6], m33 = te2[10], trace = m11 + m22 + m33; + if (trace > 0) { + const s = 0.5 / Math.sqrt(trace + 1); + this._w = 0.25 / s; + this._x = (m32 - m23) * s; + this._y = (m13 - m31) * s; + this._z = (m21 - m12) * s; + } else if (m11 > m22 && m11 > m33) { + const s = 2 * Math.sqrt(1 + m11 - m22 - m33); + this._w = (m32 - m23) / s; + this._x = 0.25 * s; + this._y = (m12 + m21) / s; + this._z = (m13 + m31) / s; + } else if (m22 > m33) { + const s = 2 * Math.sqrt(1 + m22 - m11 - m33); + this._w = (m13 - m31) / s; + this._x = (m12 + m21) / s; + this._y = 0.25 * s; + this._z = (m23 + m32) / s; + } else { + const s = 2 * Math.sqrt(1 + m33 - m11 - m22); + this._w = (m21 - m12) / s; + this._x = (m13 + m31) / s; + this._y = (m23 + m32) / s; + this._z = 0.25 * s; + } + this._onChangeCallback(); + return this; + } + setFromUnitVectors(vFrom, vTo) { + let r = vFrom.dot(vTo) + 1; + if (r < Number.EPSILON) { + r = 0; + if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { + this._x = -vFrom.y; + this._y = vFrom.x; + this._z = 0; + this._w = r; + } else { + this._x = 0; + this._y = -vFrom.z; + this._z = vFrom.y; + this._w = r; + } + } else { + this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; + this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; + this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._w = r; + } + return this.normalize(); + } + angleTo(q) { + return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1))); + } + rotateTowards(q, step) { + const angle = this.angleTo(q); + if (angle === 0) return this; + const t2 = Math.min(1, step / angle); + this.slerp(q, t2); + return this; + } + identity() { + return this.set(0, 0, 0, 1); + } + invert() { + return this.conjugate(); + } + conjugate() { + this._x *= -1; + this._y *= -1; + this._z *= -1; + this._onChangeCallback(); + return this; + } + dot(v) { + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); + } + normalize() { + let l = this.length(); + if (l === 0) { + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + } else { + l = 1 / l; + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + } + this._onChangeCallback(); + return this; + } + multiply(q) { + return this.multiplyQuaternions(this, q); + } + premultiply(q) { + return this.multiplyQuaternions(q, this); + } + multiplyQuaternions(a, b) { + const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + this._onChangeCallback(); + return this; + } + slerp(qb, t2) { + if (t2 === 0) return this; + if (t2 === 1) return this.copy(qb); + const x = this._x, y = this._y, z = this._z, w = this._w; + let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + if (cosHalfTheta < 0) { + this._w = -qb._w; + this._x = -qb._x; + this._y = -qb._y; + this._z = -qb._z; + cosHalfTheta = -cosHalfTheta; + } else { + this.copy(qb); + } + if (cosHalfTheta >= 1) { + this._w = w; + this._x = x; + this._y = y; + this._z = z; + return this; + } + const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta; + if (sqrSinHalfTheta <= Number.EPSILON) { + const s = 1 - t2; + this._w = s * w + t2 * this._w; + this._x = s * x + t2 * this._x; + this._y = s * y + t2 * this._y; + this._z = s * z + t2 * this._z; + this.normalize(); + return this; + } + const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); + const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); + const ratioA = Math.sin((1 - t2) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t2 * halfTheta) / sinHalfTheta; + this._w = w * ratioA + this._w * ratioB; + this._x = x * ratioA + this._x * ratioB; + this._y = y * ratioA + this._y * ratioB; + this._z = z * ratioA + this._z * ratioB; + this._onChangeCallback(); + return this; + } + slerpQuaternions(qa, qb, t2) { + return this.copy(qa).slerp(qb, t2); + } + random() { + const theta1 = 2 * Math.PI * Math.random(); + const theta2 = 2 * Math.PI * Math.random(); + const x0 = Math.random(); + const r1 = Math.sqrt(1 - x0); + const r2 = Math.sqrt(x0); + return this.set( + r1 * Math.sin(theta1), + r1 * Math.cos(theta1), + r2 * Math.sin(theta2), + r2 * Math.cos(theta2) + ); + } + equals(quaternion) { + return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; + } + fromArray(array, offset = 0) { + this._x = array[offset]; + this._y = array[offset + 1]; + this._z = array[offset + 2]; + this._w = array[offset + 3]; + this._onChangeCallback(); + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this._x; + array[offset + 1] = this._y; + array[offset + 2] = this._z; + array[offset + 3] = this._w; + return array; + } + fromBufferAttribute(attribute, index) { + this._x = attribute.getX(index); + this._y = attribute.getY(index); + this._z = attribute.getZ(index); + this._w = attribute.getW(index); + this._onChangeCallback(); + return this; + } + toJSON() { + return this.toArray(); + } + _onChange(callback) { + this._onChangeCallback = callback; + return this; + } + _onChangeCallback() { + } + *[Symbol.iterator]() { + yield this._x; + yield this._y; + yield this._z; + yield this._w; + } +} +class Vector3 { + static { + __name(this, "Vector3"); + } + constructor(x = 0, y = 0, z = 0) { + Vector3.prototype.isVector3 = true; + this.x = x; + this.y = y; + this.z = z; + } + set(x, y, z) { + if (z === void 0) z = this.z; + this.x = x; + this.y = y; + this.z = z; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + this.z = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setZ(z) { + this.z = z; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + case 2: + this.z = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z); + } + copy(v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + this.z += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + this.z -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + return this; + } + multiplyVectors(a, b) { + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + return this; + } + applyEuler(euler) { + return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); + } + applyAxisAngle(axis, angle) { + return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle)); + } + applyMatrix3(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x + e[3] * y + e[6] * z; + this.y = e[1] * x + e[4] * y + e[7] * z; + this.z = e[2] * x + e[5] * y + e[8] * z; + return this; + } + applyNormalMatrix(m) { + return this.applyMatrix3(m).normalize(); + } + applyMatrix4(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); + this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; + this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; + this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; + return this; + } + applyQuaternion(q) { + const vx = this.x, vy = this.y, vz = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + const tx = 2 * (qy * vz - qz * vy); + const ty = 2 * (qz * vx - qx * vz); + const tz = 2 * (qx * vy - qy * vx); + this.x = vx + qw * tx + qy * tz - qz * ty; + this.y = vy + qw * ty + qz * tx - qx * tz; + this.z = vz + qw * tz + qx * ty - qy * tx; + return this; + } + project(camera) { + return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); + } + unproject(camera) { + return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); + } + transformDirection(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x + e[4] * y + e[8] * z; + this.y = e[1] * x + e[5] * y + e[9] * z; + this.z = e[2] * x + e[6] * y + e[10] * z; + return this.normalize(); + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + this.z = Math.min(this.z, v.z); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + this.z = Math.max(this.z, v.z); + return this; + } + clamp(min, max2) { + this.x = Math.max(min.x, Math.min(max2.x, this.x)); + this.y = Math.max(min.y, Math.min(max2.y, this.y)); + this.z = Math.max(min.z, Math.min(max2.z, this.z)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + this.z = Math.max(minVal, Math.min(maxVal, this.z)); + return this; + } + clampLength(min, max2) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max2, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + this.z = Math.trunc(this.z); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + } + // TODO lengthSquared? + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + this.z += (v.z - this.z) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + this.z = v1.z + (v2.z - v1.z) * alpha; + return this; + } + cross(v) { + return this.crossVectors(this, v); + } + crossVectors(a, b) { + const ax = a.x, ay = a.y, az = a.z; + const bx = b.x, by = b.y, bz = b.z; + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + return this; + } + projectOnVector(v) { + const denominator = v.lengthSq(); + if (denominator === 0) return this.set(0, 0, 0); + const scalar = v.dot(this) / denominator; + return this.copy(v).multiplyScalar(scalar); + } + projectOnPlane(planeNormal) { + _vector$c.copy(this).projectOnVector(planeNormal); + return this.sub(_vector$c); + } + reflect(normal) { + return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal))); + } + angleTo(v) { + const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); + if (denominator === 0) return Math.PI / 2; + const theta = this.dot(v) / denominator; + return Math.acos(clamp(theta, -1, 1)); + } + distanceTo(v) { + return Math.sqrt(this.distanceToSquared(v)); + } + distanceToSquared(v) { + const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + return dx * dx + dy * dy + dz * dz; + } + manhattanDistanceTo(v) { + return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); + } + setFromSpherical(s) { + return this.setFromSphericalCoords(s.radius, s.phi, s.theta); + } + setFromSphericalCoords(radius, phi, theta) { + const sinPhiRadius = Math.sin(phi) * radius; + this.x = sinPhiRadius * Math.sin(theta); + this.y = Math.cos(phi) * radius; + this.z = sinPhiRadius * Math.cos(theta); + return this; + } + setFromCylindrical(c) { + return this.setFromCylindricalCoords(c.radius, c.theta, c.y); + } + setFromCylindricalCoords(radius, theta, y) { + this.x = radius * Math.sin(theta); + this.y = y; + this.z = radius * Math.cos(theta); + return this; + } + setFromMatrixPosition(m) { + const e = m.elements; + this.x = e[12]; + this.y = e[13]; + this.z = e[14]; + return this; + } + setFromMatrixScale(m) { + const sx = this.setFromMatrixColumn(m, 0).length(); + const sy = this.setFromMatrixColumn(m, 1).length(); + const sz = this.setFromMatrixColumn(m, 2).length(); + this.x = sx; + this.y = sy; + this.z = sz; + return this; + } + setFromMatrixColumn(m, index) { + return this.fromArray(m.elements, index * 4); + } + setFromMatrix3Column(m, index) { + return this.fromArray(m.elements, index * 3); + } + setFromEuler(e) { + this.x = e._x; + this.y = e._y; + this.z = e._z; + return this; + } + setFromColor(c) { + this.x = c.r; + this.y = c.g; + this.z = c.b; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y && v.z === this.z; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + this.z = array[offset + 2]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + array[offset + 2] = this.z; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + this.z = attribute.getZ(index); + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + return this; + } + randomDirection() { + const theta = Math.random() * Math.PI * 2; + const u = Math.random() * 2 - 1; + const c = Math.sqrt(1 - u * u); + this.x = c * Math.cos(theta); + this.y = u; + this.z = c * Math.sin(theta); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + yield this.z; + } +} +const _vector$c = /* @__PURE__ */ new Vector3(); +const _quaternion$4 = /* @__PURE__ */ new Quaternion(); +class Box3 { + static { + __name(this, "Box3"); + } + constructor(min = new Vector3(Infinity, Infinity, Infinity), max2 = new Vector3(-Infinity, -Infinity, -Infinity)) { + this.isBox3 = true; + this.min = min; + this.max = max2; + } + set(min, max2) { + this.min.copy(min); + this.max.copy(max2); + return this; + } + setFromArray(array) { + this.makeEmpty(); + for (let i = 0, il = array.length; i < il; i += 3) { + this.expandByPoint(_vector$b.fromArray(array, i)); + } + return this; + } + setFromBufferAttribute(attribute) { + this.makeEmpty(); + for (let i = 0, il = attribute.count; i < il; i++) { + this.expandByPoint(_vector$b.fromBufferAttribute(attribute, i)); + } + return this; + } + setFromPoints(points) { + this.makeEmpty(); + for (let i = 0, il = points.length; i < il; i++) { + this.expandByPoint(points[i]); + } + return this; + } + setFromCenterAndSize(center, size) { + const halfSize = _vector$b.copy(size).multiplyScalar(0.5); + this.min.copy(center).sub(halfSize); + this.max.copy(center).add(halfSize); + return this; + } + setFromObject(object, precise = false) { + this.makeEmpty(); + return this.expandByObject(object, precise); + } + clone() { + return new this.constructor().copy(this); + } + copy(box) { + this.min.copy(box.min); + this.max.copy(box.max); + return this; + } + makeEmpty() { + this.min.x = this.min.y = this.min.z = Infinity; + this.max.x = this.max.y = this.max.z = -Infinity; + return this; + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z; + } + getCenter(target) { + return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); + } + getSize(target) { + return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min); + } + expandByPoint(point) { + this.min.min(point); + this.max.max(point); + return this; + } + expandByVector(vector) { + this.min.sub(vector); + this.max.add(vector); + return this; + } + expandByScalar(scalar) { + this.min.addScalar(-scalar); + this.max.addScalar(scalar); + return this; + } + expandByObject(object, precise = false) { + object.updateWorldMatrix(false, false); + const geometry = object.geometry; + if (geometry !== void 0) { + const positionAttribute = geometry.getAttribute("position"); + if (precise === true && positionAttribute !== void 0 && object.isInstancedMesh !== true) { + for (let i = 0, l = positionAttribute.count; i < l; i++) { + if (object.isMesh === true) { + object.getVertexPosition(i, _vector$b); + } else { + _vector$b.fromBufferAttribute(positionAttribute, i); + } + _vector$b.applyMatrix4(object.matrixWorld); + this.expandByPoint(_vector$b); + } + } else { + if (object.boundingBox !== void 0) { + if (object.boundingBox === null) { + object.computeBoundingBox(); + } + _box$4.copy(object.boundingBox); + } else { + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + _box$4.copy(geometry.boundingBox); + } + _box$4.applyMatrix4(object.matrixWorld); + this.union(_box$4); + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + this.expandByObject(children[i], precise); + } + return this; + } + containsPoint(point) { + return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y && point.z >= this.min.z && point.z <= this.max.z; + } + containsBox(box) { + return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; + } + getParameter(point, target) { + return target.set( + (point.x - this.min.x) / (this.max.x - this.min.x), + (point.y - this.min.y) / (this.max.y - this.min.y), + (point.z - this.min.z) / (this.max.z - this.min.z) + ); + } + intersectsBox(box) { + return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y && box.max.z >= this.min.z && box.min.z <= this.max.z; + } + intersectsSphere(sphere) { + this.clampPoint(sphere.center, _vector$b); + return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; + } + intersectsPlane(plane) { + let min, max2; + if (plane.normal.x > 0) { + min = plane.normal.x * this.min.x; + max2 = plane.normal.x * this.max.x; + } else { + min = plane.normal.x * this.max.x; + max2 = plane.normal.x * this.min.x; + } + if (plane.normal.y > 0) { + min += plane.normal.y * this.min.y; + max2 += plane.normal.y * this.max.y; + } else { + min += plane.normal.y * this.max.y; + max2 += plane.normal.y * this.min.y; + } + if (plane.normal.z > 0) { + min += plane.normal.z * this.min.z; + max2 += plane.normal.z * this.max.z; + } else { + min += plane.normal.z * this.max.z; + max2 += plane.normal.z * this.min.z; + } + return min <= -plane.constant && max2 >= -plane.constant; + } + intersectsTriangle(triangle) { + if (this.isEmpty()) { + return false; + } + this.getCenter(_center); + _extents.subVectors(this.max, _center); + _v0$3.subVectors(triangle.a, _center); + _v1$7.subVectors(triangle.b, _center); + _v2$4.subVectors(triangle.c, _center); + _f0.subVectors(_v1$7, _v0$3); + _f1.subVectors(_v2$4, _v1$7); + _f2.subVectors(_v0$3, _v2$4); + let axes = [ + 0, + -_f0.z, + _f0.y, + 0, + -_f1.z, + _f1.y, + 0, + -_f2.z, + _f2.y, + _f0.z, + 0, + -_f0.x, + _f1.z, + 0, + -_f1.x, + _f2.z, + 0, + -_f2.x, + -_f0.y, + _f0.x, + 0, + -_f1.y, + _f1.x, + 0, + -_f2.y, + _f2.x, + 0 + ]; + if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { + return false; + } + axes = [1, 0, 0, 0, 1, 0, 0, 0, 1]; + if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { + return false; + } + _triangleNormal.crossVectors(_f0, _f1); + axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z]; + return satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents); + } + clampPoint(point, target) { + return target.copy(point).clamp(this.min, this.max); + } + distanceToPoint(point) { + return this.clampPoint(point, _vector$b).distanceTo(point); + } + getBoundingSphere(target) { + if (this.isEmpty()) { + target.makeEmpty(); + } else { + this.getCenter(target.center); + target.radius = this.getSize(_vector$b).length() * 0.5; + } + return target; + } + intersect(box) { + this.min.max(box.min); + this.max.min(box.max); + if (this.isEmpty()) this.makeEmpty(); + return this; + } + union(box) { + this.min.min(box.min); + this.max.max(box.max); + return this; + } + applyMatrix4(matrix) { + if (this.isEmpty()) return this; + _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); + _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); + _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); + _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); + _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); + _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); + _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); + _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); + this.setFromPoints(_points); + return this; + } + translate(offset) { + this.min.add(offset); + this.max.add(offset); + return this; + } + equals(box) { + return box.min.equals(this.min) && box.max.equals(this.max); + } +} +const _points = [ + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3(), + /* @__PURE__ */ new Vector3() +]; +const _vector$b = /* @__PURE__ */ new Vector3(); +const _box$4 = /* @__PURE__ */ new Box3(); +const _v0$3 = /* @__PURE__ */ new Vector3(); +const _v1$7 = /* @__PURE__ */ new Vector3(); +const _v2$4 = /* @__PURE__ */ new Vector3(); +const _f0 = /* @__PURE__ */ new Vector3(); +const _f1 = /* @__PURE__ */ new Vector3(); +const _f2 = /* @__PURE__ */ new Vector3(); +const _center = /* @__PURE__ */ new Vector3(); +const _extents = /* @__PURE__ */ new Vector3(); +const _triangleNormal = /* @__PURE__ */ new Vector3(); +const _testAxis = /* @__PURE__ */ new Vector3(); +function satForAxes(axes, v0, v1, v2, extents) { + for (let i = 0, j = axes.length - 3; i <= j; i += 3) { + _testAxis.fromArray(axes, i); + const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); + const p0 = v0.dot(_testAxis); + const p1 = v1.dot(_testAxis); + const p2 = v2.dot(_testAxis); + if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) { + return false; + } + } + return true; +} +__name(satForAxes, "satForAxes"); +const _box$3 = /* @__PURE__ */ new Box3(); +const _v1$6 = /* @__PURE__ */ new Vector3(); +const _v2$3 = /* @__PURE__ */ new Vector3(); +class Sphere { + static { + __name(this, "Sphere"); + } + constructor(center = new Vector3(), radius = -1) { + this.isSphere = true; + this.center = center; + this.radius = radius; + } + set(center, radius) { + this.center.copy(center); + this.radius = radius; + return this; + } + setFromPoints(points, optionalCenter) { + const center = this.center; + if (optionalCenter !== void 0) { + center.copy(optionalCenter); + } else { + _box$3.setFromPoints(points).getCenter(center); + } + let maxRadiusSq = 0; + for (let i = 0, il = points.length; i < il; i++) { + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i])); + } + this.radius = Math.sqrt(maxRadiusSq); + return this; + } + copy(sphere) { + this.center.copy(sphere.center); + this.radius = sphere.radius; + return this; + } + isEmpty() { + return this.radius < 0; + } + makeEmpty() { + this.center.set(0, 0, 0); + this.radius = -1; + return this; + } + containsPoint(point) { + return point.distanceToSquared(this.center) <= this.radius * this.radius; + } + distanceToPoint(point) { + return point.distanceTo(this.center) - this.radius; + } + intersectsSphere(sphere) { + const radiusSum = this.radius + sphere.radius; + return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum; + } + intersectsBox(box) { + return box.intersectsSphere(this); + } + intersectsPlane(plane) { + return Math.abs(plane.distanceToPoint(this.center)) <= this.radius; + } + clampPoint(point, target) { + const deltaLengthSq = this.center.distanceToSquared(point); + target.copy(point); + if (deltaLengthSq > this.radius * this.radius) { + target.sub(this.center).normalize(); + target.multiplyScalar(this.radius).add(this.center); + } + return target; + } + getBoundingBox(target) { + if (this.isEmpty()) { + target.makeEmpty(); + return target; + } + target.set(this.center, this.center); + target.expandByScalar(this.radius); + return target; + } + applyMatrix4(matrix) { + this.center.applyMatrix4(matrix); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + return this; + } + translate(offset) { + this.center.add(offset); + return this; + } + expandByPoint(point) { + if (this.isEmpty()) { + this.center.copy(point); + this.radius = 0; + return this; + } + _v1$6.subVectors(point, this.center); + const lengthSq = _v1$6.lengthSq(); + if (lengthSq > this.radius * this.radius) { + const length = Math.sqrt(lengthSq); + const delta = (length - this.radius) * 0.5; + this.center.addScaledVector(_v1$6, delta / length); + this.radius += delta; + } + return this; + } + union(sphere) { + if (sphere.isEmpty()) { + return this; + } + if (this.isEmpty()) { + this.copy(sphere); + return this; + } + if (this.center.equals(sphere.center) === true) { + this.radius = Math.max(this.radius, sphere.radius); + } else { + _v2$3.subVectors(sphere.center, this.center).setLength(sphere.radius); + this.expandByPoint(_v1$6.copy(sphere.center).add(_v2$3)); + this.expandByPoint(_v1$6.copy(sphere.center).sub(_v2$3)); + } + return this; + } + equals(sphere) { + return sphere.center.equals(this.center) && sphere.radius === this.radius; + } + clone() { + return new this.constructor().copy(this); + } +} +const _vector$a = /* @__PURE__ */ new Vector3(); +const _segCenter = /* @__PURE__ */ new Vector3(); +const _segDir = /* @__PURE__ */ new Vector3(); +const _diff = /* @__PURE__ */ new Vector3(); +const _edge1 = /* @__PURE__ */ new Vector3(); +const _edge2 = /* @__PURE__ */ new Vector3(); +const _normal$1 = /* @__PURE__ */ new Vector3(); +class Ray { + static { + __name(this, "Ray"); + } + constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) { + this.origin = origin; + this.direction = direction; + } + set(origin, direction) { + this.origin.copy(origin); + this.direction.copy(direction); + return this; + } + copy(ray) { + this.origin.copy(ray.origin); + this.direction.copy(ray.direction); + return this; + } + at(t2, target) { + return target.copy(this.origin).addScaledVector(this.direction, t2); + } + lookAt(v) { + this.direction.copy(v).sub(this.origin).normalize(); + return this; + } + recast(t2) { + this.origin.copy(this.at(t2, _vector$a)); + return this; + } + closestPointToPoint(point, target) { + target.subVectors(point, this.origin); + const directionDistance = target.dot(this.direction); + if (directionDistance < 0) { + return target.copy(this.origin); + } + return target.copy(this.origin).addScaledVector(this.direction, directionDistance); + } + distanceToPoint(point) { + return Math.sqrt(this.distanceSqToPoint(point)); + } + distanceSqToPoint(point) { + const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); + if (directionDistance < 0) { + return this.origin.distanceToSquared(point); + } + _vector$a.copy(this.origin).addScaledVector(this.direction, directionDistance); + return _vector$a.distanceToSquared(point); + } + distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) { + _segCenter.copy(v0).add(v1).multiplyScalar(0.5); + _segDir.copy(v1).sub(v0).normalize(); + _diff.copy(this.origin).sub(_segCenter); + const segExtent = v0.distanceTo(v1) * 0.5; + const a01 = -this.direction.dot(_segDir); + const b0 = _diff.dot(this.direction); + const b1 = -_diff.dot(_segDir); + const c = _diff.lengthSq(); + const det = Math.abs(1 - a01 * a01); + let s0, s1, sqrDist, extDet; + if (det > 0) { + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + if (s0 >= 0) { + if (s1 >= -extDet) { + if (s1 <= extDet) { + const invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c; + } else { + s1 = segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } else { + s1 = -segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } else { + if (s1 <= -extDet) { + s0 = Math.max(0, -(-a01 * segExtent + b0)); + s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } else if (s1 <= extDet) { + s0 = 0; + s1 = Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = s1 * (s1 + 2 * b1) + c; + } else { + s0 = Math.max(0, -(a01 * segExtent + b0)); + s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } + } else { + s1 = a01 > 0 ? -segExtent : segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + if (optionalPointOnRay) { + optionalPointOnRay.copy(this.origin).addScaledVector(this.direction, s0); + } + if (optionalPointOnSegment) { + optionalPointOnSegment.copy(_segCenter).addScaledVector(_segDir, s1); + } + return sqrDist; + } + intersectSphere(sphere, target) { + _vector$a.subVectors(sphere.center, this.origin); + const tca = _vector$a.dot(this.direction); + const d2 = _vector$a.dot(_vector$a) - tca * tca; + const radius2 = sphere.radius * sphere.radius; + if (d2 > radius2) return null; + const thc = Math.sqrt(radius2 - d2); + const t0 = tca - thc; + const t1 = tca + thc; + if (t1 < 0) return null; + if (t0 < 0) return this.at(t1, target); + return this.at(t0, target); + } + intersectsSphere(sphere) { + return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius; + } + distanceToPlane(plane) { + const denominator = plane.normal.dot(this.direction); + if (denominator === 0) { + if (plane.distanceToPoint(this.origin) === 0) { + return 0; + } + return null; + } + const t2 = -(this.origin.dot(plane.normal) + plane.constant) / denominator; + return t2 >= 0 ? t2 : null; + } + intersectPlane(plane, target) { + const t2 = this.distanceToPlane(plane); + if (t2 === null) { + return null; + } + return this.at(t2, target); + } + intersectsPlane(plane) { + const distToPoint = plane.distanceToPoint(this.origin); + if (distToPoint === 0) { + return true; + } + const denominator = plane.normal.dot(this.direction); + if (denominator * distToPoint < 0) { + return true; + } + return false; + } + intersectBox(box, target) { + let tmin, tmax, tymin, tymax, tzmin, tzmax; + const invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z; + const origin = this.origin; + if (invdirx >= 0) { + tmin = (box.min.x - origin.x) * invdirx; + tmax = (box.max.x - origin.x) * invdirx; + } else { + tmin = (box.max.x - origin.x) * invdirx; + tmax = (box.min.x - origin.x) * invdirx; + } + if (invdiry >= 0) { + tymin = (box.min.y - origin.y) * invdiry; + tymax = (box.max.y - origin.y) * invdiry; + } else { + tymin = (box.max.y - origin.y) * invdiry; + tymax = (box.min.y - origin.y) * invdiry; + } + if (tmin > tymax || tymin > tmax) return null; + if (tymin > tmin || isNaN(tmin)) tmin = tymin; + if (tymax < tmax || isNaN(tmax)) tmax = tymax; + if (invdirz >= 0) { + tzmin = (box.min.z - origin.z) * invdirz; + tzmax = (box.max.z - origin.z) * invdirz; + } else { + tzmin = (box.max.z - origin.z) * invdirz; + tzmax = (box.min.z - origin.z) * invdirz; + } + if (tmin > tzmax || tzmin > tmax) return null; + if (tzmin > tmin || tmin !== tmin) tmin = tzmin; + if (tzmax < tmax || tmax !== tmax) tmax = tzmax; + if (tmax < 0) return null; + return this.at(tmin >= 0 ? tmin : tmax, target); + } + intersectsBox(box) { + return this.intersectBox(box, _vector$a) !== null; + } + intersectTriangle(a, b, c, backfaceCulling, target) { + _edge1.subVectors(b, a); + _edge2.subVectors(c, a); + _normal$1.crossVectors(_edge1, _edge2); + let DdN = this.direction.dot(_normal$1); + let sign2; + if (DdN > 0) { + if (backfaceCulling) return null; + sign2 = 1; + } else if (DdN < 0) { + sign2 = -1; + DdN = -DdN; + } else { + return null; + } + _diff.subVectors(this.origin, a); + const DdQxE2 = sign2 * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); + if (DdQxE2 < 0) { + return null; + } + const DdE1xQ = sign2 * this.direction.dot(_edge1.cross(_diff)); + if (DdE1xQ < 0) { + return null; + } + if (DdQxE2 + DdE1xQ > DdN) { + return null; + } + const QdN = -sign2 * _diff.dot(_normal$1); + if (QdN < 0) { + return null; + } + return this.at(QdN / DdN, target); + } + applyMatrix4(matrix4) { + this.origin.applyMatrix4(matrix4); + this.direction.transformDirection(matrix4); + return this; + } + equals(ray) { + return ray.origin.equals(this.origin) && ray.direction.equals(this.direction); + } + clone() { + return new this.constructor().copy(this); + } +} +class Matrix4 { + static { + __name(this, "Matrix4"); + } + constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { + Matrix4.prototype.isMatrix4 = true; + this.elements = [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44); + } + } + set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { + const te2 = this.elements; + te2[0] = n11; + te2[4] = n12; + te2[8] = n13; + te2[12] = n14; + te2[1] = n21; + te2[5] = n22; + te2[9] = n23; + te2[13] = n24; + te2[2] = n31; + te2[6] = n32; + te2[10] = n33; + te2[14] = n34; + te2[3] = n41; + te2[7] = n42; + te2[11] = n43; + te2[15] = n44; + return this; + } + identity() { + this.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + clone() { + return new Matrix4().fromArray(this.elements); + } + copy(m) { + const te2 = this.elements; + const me = m.elements; + te2[0] = me[0]; + te2[1] = me[1]; + te2[2] = me[2]; + te2[3] = me[3]; + te2[4] = me[4]; + te2[5] = me[5]; + te2[6] = me[6]; + te2[7] = me[7]; + te2[8] = me[8]; + te2[9] = me[9]; + te2[10] = me[10]; + te2[11] = me[11]; + te2[12] = me[12]; + te2[13] = me[13]; + te2[14] = me[14]; + te2[15] = me[15]; + return this; + } + copyPosition(m) { + const te2 = this.elements, me = m.elements; + te2[12] = me[12]; + te2[13] = me[13]; + te2[14] = me[14]; + return this; + } + setFromMatrix3(m) { + const me = m.elements; + this.set( + me[0], + me[3], + me[6], + 0, + me[1], + me[4], + me[7], + 0, + me[2], + me[5], + me[8], + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + extractBasis(xAxis, yAxis, zAxis) { + xAxis.setFromMatrixColumn(this, 0); + yAxis.setFromMatrixColumn(this, 1); + zAxis.setFromMatrixColumn(this, 2); + return this; + } + makeBasis(xAxis, yAxis, zAxis) { + this.set( + xAxis.x, + yAxis.x, + zAxis.x, + 0, + xAxis.y, + yAxis.y, + zAxis.y, + 0, + xAxis.z, + yAxis.z, + zAxis.z, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + extractRotation(m) { + const te2 = this.elements; + const me = m.elements; + const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length(); + const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length(); + const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length(); + te2[0] = me[0] * scaleX; + te2[1] = me[1] * scaleX; + te2[2] = me[2] * scaleX; + te2[3] = 0; + te2[4] = me[4] * scaleY; + te2[5] = me[5] * scaleY; + te2[6] = me[6] * scaleY; + te2[7] = 0; + te2[8] = me[8] * scaleZ; + te2[9] = me[9] * scaleZ; + te2[10] = me[10] * scaleZ; + te2[11] = 0; + te2[12] = 0; + te2[13] = 0; + te2[14] = 0; + te2[15] = 1; + return this; + } + makeRotationFromEuler(euler) { + const te2 = this.elements; + const x = euler.x, y = euler.y, z = euler.z; + const a = Math.cos(x), b = Math.sin(x); + const c = Math.cos(y), d = Math.sin(y); + const e = Math.cos(z), f = Math.sin(z); + if (euler.order === "XYZ") { + const ae = a * e, af = a * f, be = b * e, bf = b * f; + te2[0] = c * e; + te2[4] = -c * f; + te2[8] = d; + te2[1] = af + be * d; + te2[5] = ae - bf * d; + te2[9] = -b * c; + te2[2] = bf - ae * d; + te2[6] = be + af * d; + te2[10] = a * c; + } else if (euler.order === "YXZ") { + const ce = c * e, cf = c * f, de = d * e, df = d * f; + te2[0] = ce + df * b; + te2[4] = de * b - cf; + te2[8] = a * d; + te2[1] = a * f; + te2[5] = a * e; + te2[9] = -b; + te2[2] = cf * b - de; + te2[6] = df + ce * b; + te2[10] = a * c; + } else if (euler.order === "ZXY") { + const ce = c * e, cf = c * f, de = d * e, df = d * f; + te2[0] = ce - df * b; + te2[4] = -a * f; + te2[8] = de + cf * b; + te2[1] = cf + de * b; + te2[5] = a * e; + te2[9] = df - ce * b; + te2[2] = -a * d; + te2[6] = b; + te2[10] = a * c; + } else if (euler.order === "ZYX") { + const ae = a * e, af = a * f, be = b * e, bf = b * f; + te2[0] = c * e; + te2[4] = be * d - af; + te2[8] = ae * d + bf; + te2[1] = c * f; + te2[5] = bf * d + ae; + te2[9] = af * d - be; + te2[2] = -d; + te2[6] = b * c; + te2[10] = a * c; + } else if (euler.order === "YZX") { + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + te2[0] = c * e; + te2[4] = bd - ac * f; + te2[8] = bc * f + ad; + te2[1] = f; + te2[5] = a * e; + te2[9] = -b * e; + te2[2] = -d * e; + te2[6] = ad * f + bc; + te2[10] = ac - bd * f; + } else if (euler.order === "XZY") { + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + te2[0] = c * e; + te2[4] = -f; + te2[8] = d * e; + te2[1] = ac * f + bd; + te2[5] = a * e; + te2[9] = ad * f - bc; + te2[2] = bc * f - ad; + te2[6] = b * e; + te2[10] = bd * f + ac; + } + te2[3] = 0; + te2[7] = 0; + te2[11] = 0; + te2[12] = 0; + te2[13] = 0; + te2[14] = 0; + te2[15] = 1; + return this; + } + makeRotationFromQuaternion(q) { + return this.compose(_zero, q, _one); + } + lookAt(eye, target, up) { + const te2 = this.elements; + _z.subVectors(eye, target); + if (_z.lengthSq() === 0) { + _z.z = 1; + } + _z.normalize(); + _x.crossVectors(up, _z); + if (_x.lengthSq() === 0) { + if (Math.abs(up.z) === 1) { + _z.x += 1e-4; + } else { + _z.z += 1e-4; + } + _z.normalize(); + _x.crossVectors(up, _z); + } + _x.normalize(); + _y.crossVectors(_z, _x); + te2[0] = _x.x; + te2[4] = _y.x; + te2[8] = _z.x; + te2[1] = _x.y; + te2[5] = _y.y; + te2[9] = _z.y; + te2[2] = _x.z; + te2[6] = _y.z; + te2[10] = _z.z; + return this; + } + multiply(m) { + return this.multiplyMatrices(this, m); + } + premultiply(m) { + return this.multiplyMatrices(m, this); + } + multiplyMatrices(a, b) { + const ae = a.elements; + const be = b.elements; + const te2 = this.elements; + const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12]; + const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13]; + const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14]; + const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15]; + const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12]; + const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13]; + const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14]; + const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15]; + te2[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te2[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te2[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te2[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + te2[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te2[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te2[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te2[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + te2[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te2[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te2[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te2[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + te2[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te2[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te2[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te2[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + return this; + } + multiplyScalar(s) { + const te2 = this.elements; + te2[0] *= s; + te2[4] *= s; + te2[8] *= s; + te2[12] *= s; + te2[1] *= s; + te2[5] *= s; + te2[9] *= s; + te2[13] *= s; + te2[2] *= s; + te2[6] *= s; + te2[10] *= s; + te2[14] *= s; + te2[3] *= s; + te2[7] *= s; + te2[11] *= s; + te2[15] *= s; + return this; + } + determinant() { + const te2 = this.elements; + const n11 = te2[0], n12 = te2[4], n13 = te2[8], n14 = te2[12]; + const n21 = te2[1], n22 = te2[5], n23 = te2[9], n24 = te2[13]; + const n31 = te2[2], n32 = te2[6], n33 = te2[10], n34 = te2[14]; + const n41 = te2[3], n42 = te2[7], n43 = te2[11], n44 = te2[15]; + return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31); + } + transpose() { + const te2 = this.elements; + let tmp2; + tmp2 = te2[1]; + te2[1] = te2[4]; + te2[4] = tmp2; + tmp2 = te2[2]; + te2[2] = te2[8]; + te2[8] = tmp2; + tmp2 = te2[6]; + te2[6] = te2[9]; + te2[9] = tmp2; + tmp2 = te2[3]; + te2[3] = te2[12]; + te2[12] = tmp2; + tmp2 = te2[7]; + te2[7] = te2[13]; + te2[13] = tmp2; + tmp2 = te2[11]; + te2[11] = te2[14]; + te2[14] = tmp2; + return this; + } + setPosition(x, y, z) { + const te2 = this.elements; + if (x.isVector3) { + te2[12] = x.x; + te2[13] = x.y; + te2[14] = x.z; + } else { + te2[12] = x; + te2[13] = y; + te2[14] = z; + } + return this; + } + invert() { + const te2 = this.elements, n11 = te2[0], n21 = te2[1], n31 = te2[2], n41 = te2[3], n12 = te2[4], n22 = te2[5], n32 = te2[6], n42 = te2[7], n13 = te2[8], n23 = te2[9], n33 = te2[10], n43 = te2[11], n14 = te2[12], n24 = te2[13], n34 = te2[14], n44 = te2[15], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const detInv = 1 / det; + te2[0] = t11 * detInv; + te2[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv; + te2[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv; + te2[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv; + te2[4] = t12 * detInv; + te2[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv; + te2[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv; + te2[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv; + te2[8] = t13 * detInv; + te2[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv; + te2[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv; + te2[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv; + te2[12] = t14 * detInv; + te2[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv; + te2[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv; + te2[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv; + return this; + } + scale(v) { + const te2 = this.elements; + const x = v.x, y = v.y, z = v.z; + te2[0] *= x; + te2[4] *= y; + te2[8] *= z; + te2[1] *= x; + te2[5] *= y; + te2[9] *= z; + te2[2] *= x; + te2[6] *= y; + te2[10] *= z; + te2[3] *= x; + te2[7] *= y; + te2[11] *= z; + return this; + } + getMaxScaleOnAxis() { + const te2 = this.elements; + const scaleXSq = te2[0] * te2[0] + te2[1] * te2[1] + te2[2] * te2[2]; + const scaleYSq = te2[4] * te2[4] + te2[5] * te2[5] + te2[6] * te2[6]; + const scaleZSq = te2[8] * te2[8] + te2[9] * te2[9] + te2[10] * te2[10]; + return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq)); + } + makeTranslation(x, y, z) { + if (x.isVector3) { + this.set( + 1, + 0, + 0, + x.x, + 0, + 1, + 0, + x.y, + 0, + 0, + 1, + x.z, + 0, + 0, + 0, + 1 + ); + } else { + this.set( + 1, + 0, + 0, + x, + 0, + 1, + 0, + y, + 0, + 0, + 1, + z, + 0, + 0, + 0, + 1 + ); + } + return this; + } + makeRotationX(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + 1, + 0, + 0, + 0, + 0, + c, + -s, + 0, + 0, + s, + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationY(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + c, + 0, + s, + 0, + 0, + 1, + 0, + 0, + -s, + 0, + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationZ(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + c, + -s, + 0, + 0, + s, + c, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationAxis(axis, angle) { + const c = Math.cos(angle); + const s = Math.sin(angle); + const t2 = 1 - c; + const x = axis.x, y = axis.y, z = axis.z; + const tx = t2 * x, ty = t2 * y; + this.set( + tx * x + c, + tx * y - s * z, + tx * z + s * y, + 0, + tx * y + s * z, + ty * y + c, + ty * z - s * x, + 0, + tx * z - s * y, + ty * z + s * x, + t2 * z * z + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeScale(x, y, z) { + this.set( + x, + 0, + 0, + 0, + 0, + y, + 0, + 0, + 0, + 0, + z, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeShear(xy, xz, yx, yz, zx, zy) { + this.set( + 1, + yx, + zx, + 0, + xy, + 1, + zy, + 0, + xz, + yz, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + compose(position, quaternion, scale) { + const te2 = this.elements; + const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; + const x2 = x + x, y2 = y + y, z2 = z + z; + const xx = x * x2, xy = x * y2, xz = x * z2; + const yy = y * y2, yz = y * z2, zz = z * z2; + const wx = w * x2, wy = w * y2, wz = w * z2; + const sx = scale.x, sy = scale.y, sz = scale.z; + te2[0] = (1 - (yy + zz)) * sx; + te2[1] = (xy + wz) * sx; + te2[2] = (xz - wy) * sx; + te2[3] = 0; + te2[4] = (xy - wz) * sy; + te2[5] = (1 - (xx + zz)) * sy; + te2[6] = (yz + wx) * sy; + te2[7] = 0; + te2[8] = (xz + wy) * sz; + te2[9] = (yz - wx) * sz; + te2[10] = (1 - (xx + yy)) * sz; + te2[11] = 0; + te2[12] = position.x; + te2[13] = position.y; + te2[14] = position.z; + te2[15] = 1; + return this; + } + decompose(position, quaternion, scale) { + const te2 = this.elements; + let sx = _v1$5.set(te2[0], te2[1], te2[2]).length(); + const sy = _v1$5.set(te2[4], te2[5], te2[6]).length(); + const sz = _v1$5.set(te2[8], te2[9], te2[10]).length(); + const det = this.determinant(); + if (det < 0) sx = -sx; + position.x = te2[12]; + position.y = te2[13]; + position.z = te2[14]; + _m1$4.copy(this); + const invSX = 1 / sx; + const invSY = 1 / sy; + const invSZ = 1 / sz; + _m1$4.elements[0] *= invSX; + _m1$4.elements[1] *= invSX; + _m1$4.elements[2] *= invSX; + _m1$4.elements[4] *= invSY; + _m1$4.elements[5] *= invSY; + _m1$4.elements[6] *= invSY; + _m1$4.elements[8] *= invSZ; + _m1$4.elements[9] *= invSZ; + _m1$4.elements[10] *= invSZ; + quaternion.setFromRotationMatrix(_m1$4); + scale.x = sx; + scale.y = sy; + scale.z = sz; + return this; + } + makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { + const te2 = this.elements; + const x = 2 * near / (right - left); + const y = 2 * near / (top - bottom); + const a = (right + left) / (right - left); + const b = (top + bottom) / (top - bottom); + let c, d; + if (coordinateSystem === WebGLCoordinateSystem) { + c = -(far + near) / (far - near); + d = -2 * far * near / (far - near); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + c = -far / (far - near); + d = -far * near / (far - near); + } else { + throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: " + coordinateSystem); + } + te2[0] = x; + te2[4] = 0; + te2[8] = a; + te2[12] = 0; + te2[1] = 0; + te2[5] = y; + te2[9] = b; + te2[13] = 0; + te2[2] = 0; + te2[6] = 0; + te2[10] = c; + te2[14] = d; + te2[3] = 0; + te2[7] = 0; + te2[11] = -1; + te2[15] = 0; + return this; + } + makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { + const te2 = this.elements; + const w = 1 / (right - left); + const h = 1 / (top - bottom); + const p = 1 / (far - near); + const x = (right + left) * w; + const y = (top + bottom) * h; + let z, zInv; + if (coordinateSystem === WebGLCoordinateSystem) { + z = (far + near) * p; + zInv = -2 * p; + } else if (coordinateSystem === WebGPUCoordinateSystem) { + z = near * p; + zInv = -1 * p; + } else { + throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + coordinateSystem); + } + te2[0] = 2 * w; + te2[4] = 0; + te2[8] = 0; + te2[12] = -x; + te2[1] = 0; + te2[5] = 2 * h; + te2[9] = 0; + te2[13] = -y; + te2[2] = 0; + te2[6] = 0; + te2[10] = zInv; + te2[14] = -z; + te2[3] = 0; + te2[7] = 0; + te2[11] = 0; + te2[15] = 1; + return this; + } + equals(matrix) { + const te2 = this.elements; + const me = matrix.elements; + for (let i = 0; i < 16; i++) { + if (te2[i] !== me[i]) return false; + } + return true; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 16; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + toArray(array = [], offset = 0) { + const te2 = this.elements; + array[offset] = te2[0]; + array[offset + 1] = te2[1]; + array[offset + 2] = te2[2]; + array[offset + 3] = te2[3]; + array[offset + 4] = te2[4]; + array[offset + 5] = te2[5]; + array[offset + 6] = te2[6]; + array[offset + 7] = te2[7]; + array[offset + 8] = te2[8]; + array[offset + 9] = te2[9]; + array[offset + 10] = te2[10]; + array[offset + 11] = te2[11]; + array[offset + 12] = te2[12]; + array[offset + 13] = te2[13]; + array[offset + 14] = te2[14]; + array[offset + 15] = te2[15]; + return array; + } +} +const _v1$5 = /* @__PURE__ */ new Vector3(); +const _m1$4 = /* @__PURE__ */ new Matrix4(); +const _zero = /* @__PURE__ */ new Vector3(0, 0, 0); +const _one = /* @__PURE__ */ new Vector3(1, 1, 1); +const _x = /* @__PURE__ */ new Vector3(); +const _y = /* @__PURE__ */ new Vector3(); +const _z = /* @__PURE__ */ new Vector3(); +const _matrix$2 = /* @__PURE__ */ new Matrix4(); +const _quaternion$3 = /* @__PURE__ */ new Quaternion(); +class Euler { + static { + __name(this, "Euler"); + } + constructor(x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER) { + this.isEuler = true; + this._x = x; + this._y = y; + this._z = z; + this._order = order; + } + get x() { + return this._x; + } + set x(value) { + this._x = value; + this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(value) { + this._y = value; + this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(value) { + this._z = value; + this._onChangeCallback(); + } + get order() { + return this._order; + } + set order(value) { + this._order = value; + this._onChangeCallback(); + } + set(x, y, z, order = this._order) { + this._x = x; + this._y = y; + this._z = z; + this._order = order; + this._onChangeCallback(); + return this; + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order); + } + copy(euler) { + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + this._onChangeCallback(); + return this; + } + setFromRotationMatrix(m, order = this._order, update = true) { + const te2 = m.elements; + const m11 = te2[0], m12 = te2[4], m13 = te2[8]; + const m21 = te2[1], m22 = te2[5], m23 = te2[9]; + const m31 = te2[2], m32 = te2[6], m33 = te2[10]; + switch (order) { + case "XYZ": + this._y = Math.asin(clamp(m13, -1, 1)); + if (Math.abs(m13) < 0.9999999) { + this._x = Math.atan2(-m23, m33); + this._z = Math.atan2(-m12, m11); + } else { + this._x = Math.atan2(m32, m22); + this._z = 0; + } + break; + case "YXZ": + this._x = Math.asin(-clamp(m23, -1, 1)); + if (Math.abs(m23) < 0.9999999) { + this._y = Math.atan2(m13, m33); + this._z = Math.atan2(m21, m22); + } else { + this._y = Math.atan2(-m31, m11); + this._z = 0; + } + break; + case "ZXY": + this._x = Math.asin(clamp(m32, -1, 1)); + if (Math.abs(m32) < 0.9999999) { + this._y = Math.atan2(-m31, m33); + this._z = Math.atan2(-m12, m22); + } else { + this._y = 0; + this._z = Math.atan2(m21, m11); + } + break; + case "ZYX": + this._y = Math.asin(-clamp(m31, -1, 1)); + if (Math.abs(m31) < 0.9999999) { + this._x = Math.atan2(m32, m33); + this._z = Math.atan2(m21, m11); + } else { + this._x = 0; + this._z = Math.atan2(-m12, m22); + } + break; + case "YZX": + this._z = Math.asin(clamp(m21, -1, 1)); + if (Math.abs(m21) < 0.9999999) { + this._x = Math.atan2(-m23, m22); + this._y = Math.atan2(-m31, m11); + } else { + this._x = 0; + this._y = Math.atan2(m13, m33); + } + break; + case "XZY": + this._z = Math.asin(-clamp(m12, -1, 1)); + if (Math.abs(m12) < 0.9999999) { + this._x = Math.atan2(m32, m22); + this._y = Math.atan2(m13, m11); + } else { + this._x = Math.atan2(-m23, m33); + this._y = 0; + } + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + order); + } + this._order = order; + if (update === true) this._onChangeCallback(); + return this; + } + setFromQuaternion(q, order, update) { + _matrix$2.makeRotationFromQuaternion(q); + return this.setFromRotationMatrix(_matrix$2, order, update); + } + setFromVector3(v, order = this._order) { + return this.set(v.x, v.y, v.z, order); + } + reorder(newOrder) { + _quaternion$3.setFromEuler(this); + return this.setFromQuaternion(_quaternion$3, newOrder); + } + equals(euler) { + return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order; + } + fromArray(array) { + this._x = array[0]; + this._y = array[1]; + this._z = array[2]; + if (array[3] !== void 0) this._order = array[3]; + this._onChangeCallback(); + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this._x; + array[offset + 1] = this._y; + array[offset + 2] = this._z; + array[offset + 3] = this._order; + return array; + } + _onChange(callback) { + this._onChangeCallback = callback; + return this; + } + _onChangeCallback() { + } + *[Symbol.iterator]() { + yield this._x; + yield this._y; + yield this._z; + yield this._order; + } +} +Euler.DEFAULT_ORDER = "XYZ"; +class Layers { + static { + __name(this, "Layers"); + } + constructor() { + this.mask = 1 | 0; + } + set(channel) { + this.mask = (1 << channel | 0) >>> 0; + } + enable(channel) { + this.mask |= 1 << channel | 0; + } + enableAll() { + this.mask = 4294967295 | 0; + } + toggle(channel) { + this.mask ^= 1 << channel | 0; + } + disable(channel) { + this.mask &= ~(1 << channel | 0); + } + disableAll() { + this.mask = 0; + } + test(layers) { + return (this.mask & layers.mask) !== 0; + } + isEnabled(channel) { + return (this.mask & (1 << channel | 0)) !== 0; + } +} +let _object3DId = 0; +const _v1$4 = /* @__PURE__ */ new Vector3(); +const _q1 = /* @__PURE__ */ new Quaternion(); +const _m1$3 = /* @__PURE__ */ new Matrix4(); +const _target = /* @__PURE__ */ new Vector3(); +const _position$3 = /* @__PURE__ */ new Vector3(); +const _scale$2 = /* @__PURE__ */ new Vector3(); +const _quaternion$2 = /* @__PURE__ */ new Quaternion(); +const _xAxis = /* @__PURE__ */ new Vector3(1, 0, 0); +const _yAxis = /* @__PURE__ */ new Vector3(0, 1, 0); +const _zAxis = /* @__PURE__ */ new Vector3(0, 0, 1); +const _addedEvent = { type: "added" }; +const _removedEvent = { type: "removed" }; +const _childaddedEvent = { type: "childadded", child: null }; +const _childremovedEvent = { type: "childremoved", child: null }; +class Object3D extends EventDispatcher { + static { + __name(this, "Object3D"); + } + constructor() { + super(); + this.isObject3D = true; + Object.defineProperty(this, "id", { value: _object3DId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.type = "Object3D"; + this.parent = null; + this.children = []; + this.up = Object3D.DEFAULT_UP.clone(); + const position = new Vector3(); + const rotation = new Euler(); + const quaternion = new Quaternion(); + const scale = new Vector3(1, 1, 1); + function onRotationChange() { + quaternion.setFromEuler(rotation, false); + } + __name(onRotationChange, "onRotationChange"); + function onQuaternionChange() { + rotation.setFromQuaternion(quaternion, void 0, false); + } + __name(onQuaternionChange, "onQuaternionChange"); + rotation._onChange(onRotationChange); + quaternion._onChange(onQuaternionChange); + Object.defineProperties(this, { + position: { + configurable: true, + enumerable: true, + value: position + }, + rotation: { + configurable: true, + enumerable: true, + value: rotation + }, + quaternion: { + configurable: true, + enumerable: true, + value: quaternion + }, + scale: { + configurable: true, + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + }); + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE; + this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; + this.matrixWorldNeedsUpdate = false; + this.layers = new Layers(); + this.visible = true; + this.castShadow = false; + this.receiveShadow = false; + this.frustumCulled = true; + this.renderOrder = 0; + this.animations = []; + this.userData = {}; + } + onBeforeShadow() { + } + onAfterShadow() { + } + onBeforeRender() { + } + onAfterRender() { + } + applyMatrix4(matrix) { + if (this.matrixAutoUpdate) this.updateMatrix(); + this.matrix.premultiply(matrix); + this.matrix.decompose(this.position, this.quaternion, this.scale); + } + applyQuaternion(q) { + this.quaternion.premultiply(q); + return this; + } + setRotationFromAxisAngle(axis, angle) { + this.quaternion.setFromAxisAngle(axis, angle); + } + setRotationFromEuler(euler) { + this.quaternion.setFromEuler(euler, true); + } + setRotationFromMatrix(m) { + this.quaternion.setFromRotationMatrix(m); + } + setRotationFromQuaternion(q) { + this.quaternion.copy(q); + } + rotateOnAxis(axis, angle) { + _q1.setFromAxisAngle(axis, angle); + this.quaternion.multiply(_q1); + return this; + } + rotateOnWorldAxis(axis, angle) { + _q1.setFromAxisAngle(axis, angle); + this.quaternion.premultiply(_q1); + return this; + } + rotateX(angle) { + return this.rotateOnAxis(_xAxis, angle); + } + rotateY(angle) { + return this.rotateOnAxis(_yAxis, angle); + } + rotateZ(angle) { + return this.rotateOnAxis(_zAxis, angle); + } + translateOnAxis(axis, distance) { + _v1$4.copy(axis).applyQuaternion(this.quaternion); + this.position.add(_v1$4.multiplyScalar(distance)); + return this; + } + translateX(distance) { + return this.translateOnAxis(_xAxis, distance); + } + translateY(distance) { + return this.translateOnAxis(_yAxis, distance); + } + translateZ(distance) { + return this.translateOnAxis(_zAxis, distance); + } + localToWorld(vector) { + this.updateWorldMatrix(true, false); + return vector.applyMatrix4(this.matrixWorld); + } + worldToLocal(vector) { + this.updateWorldMatrix(true, false); + return vector.applyMatrix4(_m1$3.copy(this.matrixWorld).invert()); + } + lookAt(x, y, z) { + if (x.isVector3) { + _target.copy(x); + } else { + _target.set(x, y, z); + } + const parent = this.parent; + this.updateWorldMatrix(true, false); + _position$3.setFromMatrixPosition(this.matrixWorld); + if (this.isCamera || this.isLight) { + _m1$3.lookAt(_position$3, _target, this.up); + } else { + _m1$3.lookAt(_target, _position$3, this.up); + } + this.quaternion.setFromRotationMatrix(_m1$3); + if (parent) { + _m1$3.extractRotation(parent.matrixWorld); + _q1.setFromRotationMatrix(_m1$3); + this.quaternion.premultiply(_q1.invert()); + } + } + add(object) { + if (arguments.length > 1) { + for (let i = 0; i < arguments.length; i++) { + this.add(arguments[i]); + } + return this; + } + if (object === this) { + console.error("THREE.Object3D.add: object can't be added as a child of itself.", object); + return this; + } + if (object && object.isObject3D) { + object.removeFromParent(); + object.parent = this; + this.children.push(object); + object.dispatchEvent(_addedEvent); + _childaddedEvent.child = object; + this.dispatchEvent(_childaddedEvent); + _childaddedEvent.child = null; + } else { + console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", object); + } + return this; + } + remove(object) { + if (arguments.length > 1) { + for (let i = 0; i < arguments.length; i++) { + this.remove(arguments[i]); + } + return this; + } + const index = this.children.indexOf(object); + if (index !== -1) { + object.parent = null; + this.children.splice(index, 1); + object.dispatchEvent(_removedEvent); + _childremovedEvent.child = object; + this.dispatchEvent(_childremovedEvent); + _childremovedEvent.child = null; + } + return this; + } + removeFromParent() { + const parent = this.parent; + if (parent !== null) { + parent.remove(this); + } + return this; + } + clear() { + return this.remove(...this.children); + } + attach(object) { + this.updateWorldMatrix(true, false); + _m1$3.copy(this.matrixWorld).invert(); + if (object.parent !== null) { + object.parent.updateWorldMatrix(true, false); + _m1$3.multiply(object.parent.matrixWorld); + } + object.applyMatrix4(_m1$3); + object.removeFromParent(); + object.parent = this; + this.children.push(object); + object.updateWorldMatrix(false, true); + object.dispatchEvent(_addedEvent); + _childaddedEvent.child = object; + this.dispatchEvent(_childaddedEvent); + _childaddedEvent.child = null; + return this; + } + getObjectById(id2) { + return this.getObjectByProperty("id", id2); + } + getObjectByName(name) { + return this.getObjectByProperty("name", name); + } + getObjectByProperty(name, value) { + if (this[name] === value) return this; + for (let i = 0, l = this.children.length; i < l; i++) { + const child = this.children[i]; + const object = child.getObjectByProperty(name, value); + if (object !== void 0) { + return object; + } + } + return void 0; + } + getObjectsByProperty(name, value, result = []) { + if (this[name] === value) result.push(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].getObjectsByProperty(name, value, result); + } + return result; + } + getWorldPosition(target) { + this.updateWorldMatrix(true, false); + return target.setFromMatrixPosition(this.matrixWorld); + } + getWorldQuaternion(target) { + this.updateWorldMatrix(true, false); + this.matrixWorld.decompose(_position$3, target, _scale$2); + return target; + } + getWorldScale(target) { + this.updateWorldMatrix(true, false); + this.matrixWorld.decompose(_position$3, _quaternion$2, target); + return target; + } + getWorldDirection(target) { + this.updateWorldMatrix(true, false); + const e = this.matrixWorld.elements; + return target.set(e[8], e[9], e[10]).normalize(); + } + raycast() { + } + traverse(callback) { + callback(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].traverse(callback); + } + } + traverseVisible(callback) { + if (this.visible === false) return; + callback(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].traverseVisible(callback); + } + } + traverseAncestors(callback) { + const parent = this.parent; + if (parent !== null) { + callback(parent); + parent.traverseAncestors(callback); + } + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale); + this.matrixWorldNeedsUpdate = true; + } + updateMatrixWorld(force) { + if (this.matrixAutoUpdate) this.updateMatrix(); + if (this.matrixWorldNeedsUpdate || force) { + if (this.matrixWorldAutoUpdate === true) { + if (this.parent === null) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + } + this.matrixWorldNeedsUpdate = false; + force = true; + } + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + const child = children[i]; + child.updateMatrixWorld(force); + } + } + updateWorldMatrix(updateParents, updateChildren) { + const parent = this.parent; + if (updateParents === true && parent !== null) { + parent.updateWorldMatrix(true, false); + } + if (this.matrixAutoUpdate) this.updateMatrix(); + if (this.matrixWorldAutoUpdate === true) { + if (this.parent === null) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + } + if (updateChildren === true) { + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + const child = children[i]; + child.updateWorldMatrix(false, true); + } + } + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + const output = {}; + if (isRootObject) { + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + nodes: {} + }; + output.metadata = { + version: 4.6, + type: "Object", + generator: "Object3D.toJSON" + }; + } + const object = {}; + object.uuid = this.uuid; + object.type = this.type; + if (this.name !== "") object.name = this.name; + if (this.castShadow === true) object.castShadow = true; + if (this.receiveShadow === true) object.receiveShadow = true; + if (this.visible === false) object.visible = false; + if (this.frustumCulled === false) object.frustumCulled = false; + if (this.renderOrder !== 0) object.renderOrder = this.renderOrder; + if (Object.keys(this.userData).length > 0) object.userData = this.userData; + object.layers = this.layers.mask; + object.matrix = this.matrix.toArray(); + object.up = this.up.toArray(); + if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; + if (this.isInstancedMesh) { + object.type = "InstancedMesh"; + object.count = this.count; + object.instanceMatrix = this.instanceMatrix.toJSON(); + if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON(); + } + if (this.isBatchedMesh) { + object.type = "BatchedMesh"; + object.perObjectFrustumCulled = this.perObjectFrustumCulled; + object.sortObjects = this.sortObjects; + object.drawRanges = this._drawRanges; + object.reservedRanges = this._reservedRanges; + object.visibility = this._visibility; + object.active = this._active; + object.bounds = this._bounds.map((bound) => ({ + boxInitialized: bound.boxInitialized, + boxMin: bound.box.min.toArray(), + boxMax: bound.box.max.toArray(), + sphereInitialized: bound.sphereInitialized, + sphereRadius: bound.sphere.radius, + sphereCenter: bound.sphere.center.toArray() + })); + object.maxInstanceCount = this._maxInstanceCount; + object.maxVertexCount = this._maxVertexCount; + object.maxIndexCount = this._maxIndexCount; + object.geometryInitialized = this._geometryInitialized; + object.geometryCount = this._geometryCount; + object.matricesTexture = this._matricesTexture.toJSON(meta); + if (this._colorsTexture !== null) object.colorsTexture = this._colorsTexture.toJSON(meta); + if (this.boundingSphere !== null) { + object.boundingSphere = { + center: object.boundingSphere.center.toArray(), + radius: object.boundingSphere.radius + }; + } + if (this.boundingBox !== null) { + object.boundingBox = { + min: object.boundingBox.min.toArray(), + max: object.boundingBox.max.toArray() + }; + } + } + function serialize(library, element) { + if (library[element.uuid] === void 0) { + library[element.uuid] = element.toJSON(meta); + } + return element.uuid; + } + __name(serialize, "serialize"); + if (this.isScene) { + if (this.background) { + if (this.background.isColor) { + object.background = this.background.toJSON(); + } else if (this.background.isTexture) { + object.background = this.background.toJSON(meta).uuid; + } + } + if (this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true) { + object.environment = this.environment.toJSON(meta).uuid; + } + } else if (this.isMesh || this.isLine || this.isPoints) { + object.geometry = serialize(meta.geometries, this.geometry); + const parameters = this.geometry.parameters; + if (parameters !== void 0 && parameters.shapes !== void 0) { + const shapes = parameters.shapes; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + serialize(meta.shapes, shape); + } + } else { + serialize(meta.shapes, shapes); + } + } + } + if (this.isSkinnedMesh) { + object.bindMode = this.bindMode; + object.bindMatrix = this.bindMatrix.toArray(); + if (this.skeleton !== void 0) { + serialize(meta.skeletons, this.skeleton); + object.skeleton = this.skeleton.uuid; + } + } + if (this.material !== void 0) { + if (Array.isArray(this.material)) { + const uuids = []; + for (let i = 0, l = this.material.length; i < l; i++) { + uuids.push(serialize(meta.materials, this.material[i])); + } + object.material = uuids; + } else { + object.material = serialize(meta.materials, this.material); + } + } + if (this.children.length > 0) { + object.children = []; + for (let i = 0; i < this.children.length; i++) { + object.children.push(this.children[i].toJSON(meta).object); + } + } + if (this.animations.length > 0) { + object.animations = []; + for (let i = 0; i < this.animations.length; i++) { + const animation = this.animations[i]; + object.animations.push(serialize(meta.animations, animation)); + } + } + if (isRootObject) { + const geometries = extractFromCache(meta.geometries); + const materials = extractFromCache(meta.materials); + const textures = extractFromCache(meta.textures); + const images = extractFromCache(meta.images); + const shapes = extractFromCache(meta.shapes); + const skeletons = extractFromCache(meta.skeletons); + const animations = extractFromCache(meta.animations); + const nodes = extractFromCache(meta.nodes); + if (geometries.length > 0) output.geometries = geometries; + if (materials.length > 0) output.materials = materials; + if (textures.length > 0) output.textures = textures; + if (images.length > 0) output.images = images; + if (shapes.length > 0) output.shapes = shapes; + if (skeletons.length > 0) output.skeletons = skeletons; + if (animations.length > 0) output.animations = animations; + if (nodes.length > 0) output.nodes = nodes; + } + output.object = object; + return output; + function extractFromCache(cache) { + const values = []; + for (const key in cache) { + const data = cache[key]; + delete data.metadata; + values.push(data); + } + return values; + } + __name(extractFromCache, "extractFromCache"); + } + clone(recursive) { + return new this.constructor().copy(this, recursive); + } + copy(source, recursive = true) { + this.name = source.name; + this.up.copy(source.up); + this.position.copy(source.position); + this.rotation.order = source.rotation.order; + this.quaternion.copy(source.quaternion); + this.scale.copy(source.scale); + this.matrix.copy(source.matrix); + this.matrixWorld.copy(source.matrixWorld); + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + this.layers.mask = source.layers.mask; + this.visible = source.visible; + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + this.animations = source.animations.slice(); + this.userData = JSON.parse(JSON.stringify(source.userData)); + if (recursive === true) { + for (let i = 0; i < source.children.length; i++) { + const child = source.children[i]; + this.add(child.clone()); + } + } + return this; + } +} +Object3D.DEFAULT_UP = /* @__PURE__ */ new Vector3(0, 1, 0); +Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true; +Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true; +const _v0$2 = /* @__PURE__ */ new Vector3(); +const _v1$3 = /* @__PURE__ */ new Vector3(); +const _v2$2 = /* @__PURE__ */ new Vector3(); +const _v3$2 = /* @__PURE__ */ new Vector3(); +const _vab = /* @__PURE__ */ new Vector3(); +const _vac = /* @__PURE__ */ new Vector3(); +const _vbc = /* @__PURE__ */ new Vector3(); +const _vap = /* @__PURE__ */ new Vector3(); +const _vbp = /* @__PURE__ */ new Vector3(); +const _vcp = /* @__PURE__ */ new Vector3(); +const _v40 = /* @__PURE__ */ new Vector4(); +const _v41 = /* @__PURE__ */ new Vector4(); +const _v42 = /* @__PURE__ */ new Vector4(); +class Triangle { + static { + __name(this, "Triangle"); + } + constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) { + this.a = a; + this.b = b; + this.c = c; + } + static getNormal(a, b, c, target) { + target.subVectors(c, b); + _v0$2.subVectors(a, b); + target.cross(_v0$2); + const targetLengthSq = target.lengthSq(); + if (targetLengthSq > 0) { + return target.multiplyScalar(1 / Math.sqrt(targetLengthSq)); + } + return target.set(0, 0, 0); + } + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + static getBarycoord(point, a, b, c, target) { + _v0$2.subVectors(c, a); + _v1$3.subVectors(b, a); + _v2$2.subVectors(point, a); + const dot00 = _v0$2.dot(_v0$2); + const dot01 = _v0$2.dot(_v1$3); + const dot02 = _v0$2.dot(_v2$2); + const dot11 = _v1$3.dot(_v1$3); + const dot12 = _v1$3.dot(_v2$2); + const denom = dot00 * dot11 - dot01 * dot01; + if (denom === 0) { + target.set(0, 0, 0); + return null; + } + const invDenom = 1 / denom; + const u = (dot11 * dot02 - dot01 * dot12) * invDenom; + const v = (dot00 * dot12 - dot01 * dot02) * invDenom; + return target.set(1 - u - v, v, u); + } + static containsPoint(point, a, b, c) { + if (this.getBarycoord(point, a, b, c, _v3$2) === null) { + return false; + } + return _v3$2.x >= 0 && _v3$2.y >= 0 && _v3$2.x + _v3$2.y <= 1; + } + static getInterpolation(point, p1, p2, p3, v1, v2, v3, target) { + if (this.getBarycoord(point, p1, p2, p3, _v3$2) === null) { + target.x = 0; + target.y = 0; + if ("z" in target) target.z = 0; + if ("w" in target) target.w = 0; + return null; + } + target.setScalar(0); + target.addScaledVector(v1, _v3$2.x); + target.addScaledVector(v2, _v3$2.y); + target.addScaledVector(v3, _v3$2.z); + return target; + } + static getInterpolatedAttribute(attr, i1, i2, i3, barycoord, target) { + _v40.setScalar(0); + _v41.setScalar(0); + _v42.setScalar(0); + _v40.fromBufferAttribute(attr, i1); + _v41.fromBufferAttribute(attr, i2); + _v42.fromBufferAttribute(attr, i3); + target.setScalar(0); + target.addScaledVector(_v40, barycoord.x); + target.addScaledVector(_v41, barycoord.y); + target.addScaledVector(_v42, barycoord.z); + return target; + } + static isFrontFacing(a, b, c, direction) { + _v0$2.subVectors(c, b); + _v1$3.subVectors(a, b); + return _v0$2.cross(_v1$3).dot(direction) < 0 ? true : false; + } + set(a, b, c) { + this.a.copy(a); + this.b.copy(b); + this.c.copy(c); + return this; + } + setFromPointsAndIndices(points, i0, i1, i2) { + this.a.copy(points[i0]); + this.b.copy(points[i1]); + this.c.copy(points[i2]); + return this; + } + setFromAttributeAndIndices(attribute, i0, i1, i2) { + this.a.fromBufferAttribute(attribute, i0); + this.b.fromBufferAttribute(attribute, i1); + this.c.fromBufferAttribute(attribute, i2); + return this; + } + clone() { + return new this.constructor().copy(this); + } + copy(triangle) { + this.a.copy(triangle.a); + this.b.copy(triangle.b); + this.c.copy(triangle.c); + return this; + } + getArea() { + _v0$2.subVectors(this.c, this.b); + _v1$3.subVectors(this.a, this.b); + return _v0$2.cross(_v1$3).length() * 0.5; + } + getMidpoint(target) { + return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3); + } + getNormal(target) { + return Triangle.getNormal(this.a, this.b, this.c, target); + } + getPlane(target) { + return target.setFromCoplanarPoints(this.a, this.b, this.c); + } + getBarycoord(point, target) { + return Triangle.getBarycoord(point, this.a, this.b, this.c, target); + } + getInterpolation(point, v1, v2, v3, target) { + return Triangle.getInterpolation(point, this.a, this.b, this.c, v1, v2, v3, target); + } + containsPoint(point) { + return Triangle.containsPoint(point, this.a, this.b, this.c); + } + isFrontFacing(direction) { + return Triangle.isFrontFacing(this.a, this.b, this.c, direction); + } + intersectsBox(box) { + return box.intersectsTriangle(this); + } + closestPointToPoint(p, target) { + const a = this.a, b = this.b, c = this.c; + let v, w; + _vab.subVectors(b, a); + _vac.subVectors(c, a); + _vap.subVectors(p, a); + const d1 = _vab.dot(_vap); + const d2 = _vac.dot(_vap); + if (d1 <= 0 && d2 <= 0) { + return target.copy(a); + } + _vbp.subVectors(p, b); + const d3 = _vab.dot(_vbp); + const d4 = _vac.dot(_vbp); + if (d3 >= 0 && d4 <= d3) { + return target.copy(b); + } + const vc = d1 * d4 - d3 * d2; + if (vc <= 0 && d1 >= 0 && d3 <= 0) { + v = d1 / (d1 - d3); + return target.copy(a).addScaledVector(_vab, v); + } + _vcp.subVectors(p, c); + const d5 = _vab.dot(_vcp); + const d6 = _vac.dot(_vcp); + if (d6 >= 0 && d5 <= d6) { + return target.copy(c); + } + const vb = d5 * d2 - d1 * d6; + if (vb <= 0 && d2 >= 0 && d6 <= 0) { + w = d2 / (d2 - d6); + return target.copy(a).addScaledVector(_vac, w); + } + const va = d3 * d6 - d5 * d4; + if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) { + _vbc.subVectors(c, b); + w = (d4 - d3) / (d4 - d3 + (d5 - d6)); + return target.copy(b).addScaledVector(_vbc, w); + } + const denom = 1 / (va + vb + vc); + v = vb * denom; + w = vc * denom; + return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w); + } + equals(triangle) { + return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c); + } +} +const _colorKeywords = { + "aliceblue": 15792383, + "antiquewhite": 16444375, + "aqua": 65535, + "aquamarine": 8388564, + "azure": 15794175, + "beige": 16119260, + "bisque": 16770244, + "black": 0, + "blanchedalmond": 16772045, + "blue": 255, + "blueviolet": 9055202, + "brown": 10824234, + "burlywood": 14596231, + "cadetblue": 6266528, + "chartreuse": 8388352, + "chocolate": 13789470, + "coral": 16744272, + "cornflowerblue": 6591981, + "cornsilk": 16775388, + "crimson": 14423100, + "cyan": 65535, + "darkblue": 139, + "darkcyan": 35723, + "darkgoldenrod": 12092939, + "darkgray": 11119017, + "darkgreen": 25600, + "darkgrey": 11119017, + "darkkhaki": 12433259, + "darkmagenta": 9109643, + "darkolivegreen": 5597999, + "darkorange": 16747520, + "darkorchid": 10040012, + "darkred": 9109504, + "darksalmon": 15308410, + "darkseagreen": 9419919, + "darkslateblue": 4734347, + "darkslategray": 3100495, + "darkslategrey": 3100495, + "darkturquoise": 52945, + "darkviolet": 9699539, + "deeppink": 16716947, + "deepskyblue": 49151, + "dimgray": 6908265, + "dimgrey": 6908265, + "dodgerblue": 2003199, + "firebrick": 11674146, + "floralwhite": 16775920, + "forestgreen": 2263842, + "fuchsia": 16711935, + "gainsboro": 14474460, + "ghostwhite": 16316671, + "gold": 16766720, + "goldenrod": 14329120, + "gray": 8421504, + "green": 32768, + "greenyellow": 11403055, + "grey": 8421504, + "honeydew": 15794160, + "hotpink": 16738740, + "indianred": 13458524, + "indigo": 4915330, + "ivory": 16777200, + "khaki": 15787660, + "lavender": 15132410, + "lavenderblush": 16773365, + "lawngreen": 8190976, + "lemonchiffon": 16775885, + "lightblue": 11393254, + "lightcoral": 15761536, + "lightcyan": 14745599, + "lightgoldenrodyellow": 16448210, + "lightgray": 13882323, + "lightgreen": 9498256, + "lightgrey": 13882323, + "lightpink": 16758465, + "lightsalmon": 16752762, + "lightseagreen": 2142890, + "lightskyblue": 8900346, + "lightslategray": 7833753, + "lightslategrey": 7833753, + "lightsteelblue": 11584734, + "lightyellow": 16777184, + "lime": 65280, + "limegreen": 3329330, + "linen": 16445670, + "magenta": 16711935, + "maroon": 8388608, + "mediumaquamarine": 6737322, + "mediumblue": 205, + "mediumorchid": 12211667, + "mediumpurple": 9662683, + "mediumseagreen": 3978097, + "mediumslateblue": 8087790, + "mediumspringgreen": 64154, + "mediumturquoise": 4772300, + "mediumvioletred": 13047173, + "midnightblue": 1644912, + "mintcream": 16121850, + "mistyrose": 16770273, + "moccasin": 16770229, + "navajowhite": 16768685, + "navy": 128, + "oldlace": 16643558, + "olive": 8421376, + "olivedrab": 7048739, + "orange": 16753920, + "orangered": 16729344, + "orchid": 14315734, + "palegoldenrod": 15657130, + "palegreen": 10025880, + "paleturquoise": 11529966, + "palevioletred": 14381203, + "papayawhip": 16773077, + "peachpuff": 16767673, + "peru": 13468991, + "pink": 16761035, + "plum": 14524637, + "powderblue": 11591910, + "purple": 8388736, + "rebeccapurple": 6697881, + "red": 16711680, + "rosybrown": 12357519, + "royalblue": 4286945, + "saddlebrown": 9127187, + "salmon": 16416882, + "sandybrown": 16032864, + "seagreen": 3050327, + "seashell": 16774638, + "sienna": 10506797, + "silver": 12632256, + "skyblue": 8900331, + "slateblue": 6970061, + "slategray": 7372944, + "slategrey": 7372944, + "snow": 16775930, + "springgreen": 65407, + "steelblue": 4620980, + "tan": 13808780, + "teal": 32896, + "thistle": 14204888, + "tomato": 16737095, + "turquoise": 4251856, + "violet": 15631086, + "wheat": 16113331, + "white": 16777215, + "whitesmoke": 16119285, + "yellow": 16776960, + "yellowgreen": 10145074 +}; +const _hslA = { h: 0, s: 0, l: 0 }; +const _hslB = { h: 0, s: 0, l: 0 }; +function hue2rgb(p, q, t2) { + if (t2 < 0) t2 += 1; + if (t2 > 1) t2 -= 1; + if (t2 < 1 / 6) return p + (q - p) * 6 * t2; + if (t2 < 1 / 2) return q; + if (t2 < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t2); + return p; +} +__name(hue2rgb, "hue2rgb"); +class Color { + static { + __name(this, "Color"); + } + constructor(r, g, b) { + this.isColor = true; + this.r = 1; + this.g = 1; + this.b = 1; + return this.set(r, g, b); + } + set(r, g, b) { + if (g === void 0 && b === void 0) { + const value = r; + if (value && value.isColor) { + this.copy(value); + } else if (typeof value === "number") { + this.setHex(value); + } else if (typeof value === "string") { + this.setStyle(value); + } + } else { + this.setRGB(r, g, b); + } + return this; + } + setScalar(scalar) { + this.r = scalar; + this.g = scalar; + this.b = scalar; + return this; + } + setHex(hex, colorSpace = SRGBColorSpace) { + hex = Math.floor(hex); + this.r = (hex >> 16 & 255) / 255; + this.g = (hex >> 8 & 255) / 255; + this.b = (hex & 255) / 255; + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) { + this.r = r; + this.g = g; + this.b = b; + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) { + h = euclideanModulo(h, 1); + s = clamp(s, 0, 1); + l = clamp(l, 0, 1); + if (s === 0) { + this.r = this.g = this.b = l; + } else { + const p = l <= 0.5 ? l * (1 + s) : l + s - l * s; + const q = 2 * l - p; + this.r = hue2rgb(q, p, h + 1 / 3); + this.g = hue2rgb(q, p, h); + this.b = hue2rgb(q, p, h - 1 / 3); + } + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setStyle(style, colorSpace = SRGBColorSpace) { + function handleAlpha(string) { + if (string === void 0) return; + if (parseFloat(string) < 1) { + console.warn("THREE.Color: Alpha component of " + style + " will be ignored."); + } + } + __name(handleAlpha, "handleAlpha"); + let m; + if (m = /^(\w+)\(([^\)]*)\)/.exec(style)) { + let color; + const name = m[1]; + const components = m[2]; + switch (name) { + case "rgb": + case "rgba": + if (color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setRGB( + Math.min(255, parseInt(color[1], 10)) / 255, + Math.min(255, parseInt(color[2], 10)) / 255, + Math.min(255, parseInt(color[3], 10)) / 255, + colorSpace + ); + } + if (color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setRGB( + Math.min(100, parseInt(color[1], 10)) / 100, + Math.min(100, parseInt(color[2], 10)) / 100, + Math.min(100, parseInt(color[3], 10)) / 100, + colorSpace + ); + } + break; + case "hsl": + case "hsla": + if (color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setHSL( + parseFloat(color[1]) / 360, + parseFloat(color[2]) / 100, + parseFloat(color[3]) / 100, + colorSpace + ); + } + break; + default: + console.warn("THREE.Color: Unknown color model " + style); + } + } else if (m = /^\#([A-Fa-f\d]+)$/.exec(style)) { + const hex = m[1]; + const size = hex.length; + if (size === 3) { + return this.setRGB( + parseInt(hex.charAt(0), 16) / 15, + parseInt(hex.charAt(1), 16) / 15, + parseInt(hex.charAt(2), 16) / 15, + colorSpace + ); + } else if (size === 6) { + return this.setHex(parseInt(hex, 16), colorSpace); + } else { + console.warn("THREE.Color: Invalid hex color " + style); + } + } else if (style && style.length > 0) { + return this.setColorName(style, colorSpace); + } + return this; + } + setColorName(style, colorSpace = SRGBColorSpace) { + const hex = _colorKeywords[style.toLowerCase()]; + if (hex !== void 0) { + this.setHex(hex, colorSpace); + } else { + console.warn("THREE.Color: Unknown color " + style); + } + return this; + } + clone() { + return new this.constructor(this.r, this.g, this.b); + } + copy(color) { + this.r = color.r; + this.g = color.g; + this.b = color.b; + return this; + } + copySRGBToLinear(color) { + this.r = SRGBToLinear(color.r); + this.g = SRGBToLinear(color.g); + this.b = SRGBToLinear(color.b); + return this; + } + copyLinearToSRGB(color) { + this.r = LinearToSRGB(color.r); + this.g = LinearToSRGB(color.g); + this.b = LinearToSRGB(color.b); + return this; + } + convertSRGBToLinear() { + this.copySRGBToLinear(this); + return this; + } + convertLinearToSRGB() { + this.copyLinearToSRGB(this); + return this; + } + getHex(colorSpace = SRGBColorSpace) { + ColorManagement.fromWorkingColorSpace(_color$1.copy(this), colorSpace); + return Math.round(clamp(_color$1.r * 255, 0, 255)) * 65536 + Math.round(clamp(_color$1.g * 255, 0, 255)) * 256 + Math.round(clamp(_color$1.b * 255, 0, 255)); + } + getHexString(colorSpace = SRGBColorSpace) { + return ("000000" + this.getHex(colorSpace).toString(16)).slice(-6); + } + getHSL(target, colorSpace = ColorManagement.workingColorSpace) { + ColorManagement.fromWorkingColorSpace(_color$1.copy(this), colorSpace); + const r = _color$1.r, g = _color$1.g, b = _color$1.b; + const max2 = Math.max(r, g, b); + const min = Math.min(r, g, b); + let hue, saturation; + const lightness = (min + max2) / 2; + if (min === max2) { + hue = 0; + saturation = 0; + } else { + const delta = max2 - min; + saturation = lightness <= 0.5 ? delta / (max2 + min) : delta / (2 - max2 - min); + switch (max2) { + case r: + hue = (g - b) / delta + (g < b ? 6 : 0); + break; + case g: + hue = (b - r) / delta + 2; + break; + case b: + hue = (r - g) / delta + 4; + break; + } + hue /= 6; + } + target.h = hue; + target.s = saturation; + target.l = lightness; + return target; + } + getRGB(target, colorSpace = ColorManagement.workingColorSpace) { + ColorManagement.fromWorkingColorSpace(_color$1.copy(this), colorSpace); + target.r = _color$1.r; + target.g = _color$1.g; + target.b = _color$1.b; + return target; + } + getStyle(colorSpace = SRGBColorSpace) { + ColorManagement.fromWorkingColorSpace(_color$1.copy(this), colorSpace); + const r = _color$1.r, g = _color$1.g, b = _color$1.b; + if (colorSpace !== SRGBColorSpace) { + return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`; + } + return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`; + } + offsetHSL(h, s, l) { + this.getHSL(_hslA); + return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l); + } + add(color) { + this.r += color.r; + this.g += color.g; + this.b += color.b; + return this; + } + addColors(color1, color2) { + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + return this; + } + addScalar(s) { + this.r += s; + this.g += s; + this.b += s; + return this; + } + sub(color) { + this.r = Math.max(0, this.r - color.r); + this.g = Math.max(0, this.g - color.g); + this.b = Math.max(0, this.b - color.b); + return this; + } + multiply(color) { + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + return this; + } + multiplyScalar(s) { + this.r *= s; + this.g *= s; + this.b *= s; + return this; + } + lerp(color, alpha) { + this.r += (color.r - this.r) * alpha; + this.g += (color.g - this.g) * alpha; + this.b += (color.b - this.b) * alpha; + return this; + } + lerpColors(color1, color2, alpha) { + this.r = color1.r + (color2.r - color1.r) * alpha; + this.g = color1.g + (color2.g - color1.g) * alpha; + this.b = color1.b + (color2.b - color1.b) * alpha; + return this; + } + lerpHSL(color, alpha) { + this.getHSL(_hslA); + color.getHSL(_hslB); + const h = lerp(_hslA.h, _hslB.h, alpha); + const s = lerp(_hslA.s, _hslB.s, alpha); + const l = lerp(_hslA.l, _hslB.l, alpha); + this.setHSL(h, s, l); + return this; + } + setFromVector3(v) { + this.r = v.x; + this.g = v.y; + this.b = v.z; + return this; + } + applyMatrix3(m) { + const r = this.r, g = this.g, b = this.b; + const e = m.elements; + this.r = e[0] * r + e[3] * g + e[6] * b; + this.g = e[1] * r + e[4] * g + e[7] * b; + this.b = e[2] * r + e[5] * g + e[8] * b; + return this; + } + equals(c) { + return c.r === this.r && c.g === this.g && c.b === this.b; + } + fromArray(array, offset = 0) { + this.r = array[offset]; + this.g = array[offset + 1]; + this.b = array[offset + 2]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.r; + array[offset + 1] = this.g; + array[offset + 2] = this.b; + return array; + } + fromBufferAttribute(attribute, index) { + this.r = attribute.getX(index); + this.g = attribute.getY(index); + this.b = attribute.getZ(index); + return this; + } + toJSON() { + return this.getHex(); + } + *[Symbol.iterator]() { + yield this.r; + yield this.g; + yield this.b; + } +} +const _color$1 = /* @__PURE__ */ new Color(); +Color.NAMES = _colorKeywords; +let _materialId = 0; +class Material extends EventDispatcher { + static { + __name(this, "Material"); + } + static get type() { + return "Material"; + } + get type() { + return this.constructor.type; + } + set type(_value) { + } + constructor() { + super(); + this.isMaterial = true; + Object.defineProperty(this, "id", { value: _materialId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.blending = NormalBlending; + this.side = FrontSide; + this.vertexColors = false; + this.opacity = 1; + this.transparent = false; + this.alphaHash = false; + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + this.blendColor = new Color(0, 0, 0); + this.blendAlpha = 0; + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + this.stencilWriteMask = 255; + this.stencilFunc = AlwaysStencilFunc; + this.stencilRef = 0; + this.stencilFuncMask = 255; + this.stencilFail = KeepStencilOp; + this.stencilZFail = KeepStencilOp; + this.stencilZPass = KeepStencilOp; + this.stencilWrite = false; + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + this.shadowSide = null; + this.colorWrite = true; + this.precision = null; + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + this.dithering = false; + this.alphaToCoverage = false; + this.premultipliedAlpha = false; + this.forceSinglePass = false; + this.visible = true; + this.toneMapped = true; + this.userData = {}; + this.version = 0; + this._alphaTest = 0; + } + get alphaTest() { + return this._alphaTest; + } + set alphaTest(value) { + if (this._alphaTest > 0 !== value > 0) { + this.version++; + } + this._alphaTest = value; + } + // onBeforeRender and onBeforeCompile only supported in WebGLRenderer + onBeforeRender() { + } + onBeforeCompile() { + } + customProgramCacheKey() { + return this.onBeforeCompile.toString(); + } + setValues(values) { + if (values === void 0) return; + for (const key in values) { + const newValue = values[key]; + if (newValue === void 0) { + console.warn(`THREE.Material: parameter '${key}' has value of undefined.`); + continue; + } + const currentValue = this[key]; + if (currentValue === void 0) { + console.warn(`THREE.Material: '${key}' is not a property of THREE.${this.type}.`); + continue; + } + if (currentValue && currentValue.isColor) { + currentValue.set(newValue); + } else if (currentValue && currentValue.isVector3 && (newValue && newValue.isVector3)) { + currentValue.copy(newValue); + } else { + this[key] = newValue; + } + } + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (isRootObject) { + meta = { + textures: {}, + images: {} + }; + } + const data = { + metadata: { + version: 4.6, + type: "Material", + generator: "Material.toJSON" + } + }; + data.uuid = this.uuid; + data.type = this.type; + if (this.name !== "") data.name = this.name; + if (this.color && this.color.isColor) data.color = this.color.getHex(); + if (this.roughness !== void 0) data.roughness = this.roughness; + if (this.metalness !== void 0) data.metalness = this.metalness; + if (this.sheen !== void 0) data.sheen = this.sheen; + if (this.sheenColor && this.sheenColor.isColor) data.sheenColor = this.sheenColor.getHex(); + if (this.sheenRoughness !== void 0) data.sheenRoughness = this.sheenRoughness; + if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex(); + if (this.emissiveIntensity !== void 0 && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity; + if (this.specular && this.specular.isColor) data.specular = this.specular.getHex(); + if (this.specularIntensity !== void 0) data.specularIntensity = this.specularIntensity; + if (this.specularColor && this.specularColor.isColor) data.specularColor = this.specularColor.getHex(); + if (this.shininess !== void 0) data.shininess = this.shininess; + if (this.clearcoat !== void 0) data.clearcoat = this.clearcoat; + if (this.clearcoatRoughness !== void 0) data.clearcoatRoughness = this.clearcoatRoughness; + if (this.clearcoatMap && this.clearcoatMap.isTexture) { + data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid; + } + if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) { + data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid; + } + if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) { + data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid; + data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); + } + if (this.dispersion !== void 0) data.dispersion = this.dispersion; + if (this.iridescence !== void 0) data.iridescence = this.iridescence; + if (this.iridescenceIOR !== void 0) data.iridescenceIOR = this.iridescenceIOR; + if (this.iridescenceThicknessRange !== void 0) data.iridescenceThicknessRange = this.iridescenceThicknessRange; + if (this.iridescenceMap && this.iridescenceMap.isTexture) { + data.iridescenceMap = this.iridescenceMap.toJSON(meta).uuid; + } + if (this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture) { + data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(meta).uuid; + } + if (this.anisotropy !== void 0) data.anisotropy = this.anisotropy; + if (this.anisotropyRotation !== void 0) data.anisotropyRotation = this.anisotropyRotation; + if (this.anisotropyMap && this.anisotropyMap.isTexture) { + data.anisotropyMap = this.anisotropyMap.toJSON(meta).uuid; + } + if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid; + if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid; + if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid; + if (this.lightMap && this.lightMap.isTexture) { + data.lightMap = this.lightMap.toJSON(meta).uuid; + data.lightMapIntensity = this.lightMapIntensity; + } + if (this.aoMap && this.aoMap.isTexture) { + data.aoMap = this.aoMap.toJSON(meta).uuid; + data.aoMapIntensity = this.aoMapIntensity; + } + if (this.bumpMap && this.bumpMap.isTexture) { + data.bumpMap = this.bumpMap.toJSON(meta).uuid; + data.bumpScale = this.bumpScale; + } + if (this.normalMap && this.normalMap.isTexture) { + data.normalMap = this.normalMap.toJSON(meta).uuid; + data.normalMapType = this.normalMapType; + data.normalScale = this.normalScale.toArray(); + } + if (this.displacementMap && this.displacementMap.isTexture) { + data.displacementMap = this.displacementMap.toJSON(meta).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + } + if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid; + if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid; + if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid; + if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid; + if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid; + if (this.specularColorMap && this.specularColorMap.isTexture) data.specularColorMap = this.specularColorMap.toJSON(meta).uuid; + if (this.envMap && this.envMap.isTexture) { + data.envMap = this.envMap.toJSON(meta).uuid; + if (this.combine !== void 0) data.combine = this.combine; + } + if (this.envMapRotation !== void 0) data.envMapRotation = this.envMapRotation.toArray(); + if (this.envMapIntensity !== void 0) data.envMapIntensity = this.envMapIntensity; + if (this.reflectivity !== void 0) data.reflectivity = this.reflectivity; + if (this.refractionRatio !== void 0) data.refractionRatio = this.refractionRatio; + if (this.gradientMap && this.gradientMap.isTexture) { + data.gradientMap = this.gradientMap.toJSON(meta).uuid; + } + if (this.transmission !== void 0) data.transmission = this.transmission; + if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid; + if (this.thickness !== void 0) data.thickness = this.thickness; + if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid; + if (this.attenuationDistance !== void 0 && this.attenuationDistance !== Infinity) data.attenuationDistance = this.attenuationDistance; + if (this.attenuationColor !== void 0) data.attenuationColor = this.attenuationColor.getHex(); + if (this.size !== void 0) data.size = this.size; + if (this.shadowSide !== null) data.shadowSide = this.shadowSide; + if (this.sizeAttenuation !== void 0) data.sizeAttenuation = this.sizeAttenuation; + if (this.blending !== NormalBlending) data.blending = this.blending; + if (this.side !== FrontSide) data.side = this.side; + if (this.vertexColors === true) data.vertexColors = true; + if (this.opacity < 1) data.opacity = this.opacity; + if (this.transparent === true) data.transparent = true; + if (this.blendSrc !== SrcAlphaFactor) data.blendSrc = this.blendSrc; + if (this.blendDst !== OneMinusSrcAlphaFactor) data.blendDst = this.blendDst; + if (this.blendEquation !== AddEquation) data.blendEquation = this.blendEquation; + if (this.blendSrcAlpha !== null) data.blendSrcAlpha = this.blendSrcAlpha; + if (this.blendDstAlpha !== null) data.blendDstAlpha = this.blendDstAlpha; + if (this.blendEquationAlpha !== null) data.blendEquationAlpha = this.blendEquationAlpha; + if (this.blendColor && this.blendColor.isColor) data.blendColor = this.blendColor.getHex(); + if (this.blendAlpha !== 0) data.blendAlpha = this.blendAlpha; + if (this.depthFunc !== LessEqualDepth) data.depthFunc = this.depthFunc; + if (this.depthTest === false) data.depthTest = this.depthTest; + if (this.depthWrite === false) data.depthWrite = this.depthWrite; + if (this.colorWrite === false) data.colorWrite = this.colorWrite; + if (this.stencilWriteMask !== 255) data.stencilWriteMask = this.stencilWriteMask; + if (this.stencilFunc !== AlwaysStencilFunc) data.stencilFunc = this.stencilFunc; + if (this.stencilRef !== 0) data.stencilRef = this.stencilRef; + if (this.stencilFuncMask !== 255) data.stencilFuncMask = this.stencilFuncMask; + if (this.stencilFail !== KeepStencilOp) data.stencilFail = this.stencilFail; + if (this.stencilZFail !== KeepStencilOp) data.stencilZFail = this.stencilZFail; + if (this.stencilZPass !== KeepStencilOp) data.stencilZPass = this.stencilZPass; + if (this.stencilWrite === true) data.stencilWrite = this.stencilWrite; + if (this.rotation !== void 0 && this.rotation !== 0) data.rotation = this.rotation; + if (this.polygonOffset === true) data.polygonOffset = true; + if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor; + if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits; + if (this.linewidth !== void 0 && this.linewidth !== 1) data.linewidth = this.linewidth; + if (this.dashSize !== void 0) data.dashSize = this.dashSize; + if (this.gapSize !== void 0) data.gapSize = this.gapSize; + if (this.scale !== void 0) data.scale = this.scale; + if (this.dithering === true) data.dithering = true; + if (this.alphaTest > 0) data.alphaTest = this.alphaTest; + if (this.alphaHash === true) data.alphaHash = true; + if (this.alphaToCoverage === true) data.alphaToCoverage = true; + if (this.premultipliedAlpha === true) data.premultipliedAlpha = true; + if (this.forceSinglePass === true) data.forceSinglePass = true; + if (this.wireframe === true) data.wireframe = true; + if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth; + if (this.wireframeLinecap !== "round") data.wireframeLinecap = this.wireframeLinecap; + if (this.wireframeLinejoin !== "round") data.wireframeLinejoin = this.wireframeLinejoin; + if (this.flatShading === true) data.flatShading = true; + if (this.visible === false) data.visible = false; + if (this.toneMapped === false) data.toneMapped = false; + if (this.fog === false) data.fog = false; + if (Object.keys(this.userData).length > 0) data.userData = this.userData; + function extractFromCache(cache) { + const values = []; + for (const key in cache) { + const data2 = cache[key]; + delete data2.metadata; + values.push(data2); + } + return values; + } + __name(extractFromCache, "extractFromCache"); + if (isRootObject) { + const textures = extractFromCache(meta.textures); + const images = extractFromCache(meta.images); + if (textures.length > 0) data.textures = textures; + if (images.length > 0) data.images = images; + } + return data; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.name = source.name; + this.blending = source.blending; + this.side = source.side; + this.vertexColors = source.vertexColors; + this.opacity = source.opacity; + this.transparent = source.transparent; + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + this.blendColor.copy(source.blendColor); + this.blendAlpha = source.blendAlpha; + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + this.stencilWriteMask = source.stencilWriteMask; + this.stencilFunc = source.stencilFunc; + this.stencilRef = source.stencilRef; + this.stencilFuncMask = source.stencilFuncMask; + this.stencilFail = source.stencilFail; + this.stencilZFail = source.stencilZFail; + this.stencilZPass = source.stencilZPass; + this.stencilWrite = source.stencilWrite; + const srcPlanes = source.clippingPlanes; + let dstPlanes = null; + if (srcPlanes !== null) { + const n = srcPlanes.length; + dstPlanes = new Array(n); + for (let i = 0; i !== n; ++i) { + dstPlanes[i] = srcPlanes[i].clone(); + } + } + this.clippingPlanes = dstPlanes; + this.clipIntersection = source.clipIntersection; + this.clipShadows = source.clipShadows; + this.shadowSide = source.shadowSide; + this.colorWrite = source.colorWrite; + this.precision = source.precision; + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + this.dithering = source.dithering; + this.alphaTest = source.alphaTest; + this.alphaHash = source.alphaHash; + this.alphaToCoverage = source.alphaToCoverage; + this.premultipliedAlpha = source.premultipliedAlpha; + this.forceSinglePass = source.forceSinglePass; + this.visible = source.visible; + this.toneMapped = source.toneMapped; + this.userData = JSON.parse(JSON.stringify(source.userData)); + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } + set needsUpdate(value) { + if (value === true) this.version++; + } + onBuild() { + console.warn("Material: onBuild() has been removed."); + } +} +class MeshBasicMaterial extends Material { + static { + __name(this, "MeshBasicMaterial"); + } + static get type() { + return "MeshBasicMaterial"; + } + constructor(parameters) { + super(); + this.isMeshBasicMaterial = true; + this.color = new Color(16777215); + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.fog = source.fog; + return this; + } +} +const _tables = /* @__PURE__ */ _generateTables(); +function _generateTables() { + const buffer = new ArrayBuffer(4); + const floatView = new Float32Array(buffer); + const uint32View = new Uint32Array(buffer); + const baseTable = new Uint32Array(512); + const shiftTable = new Uint32Array(512); + for (let i = 0; i < 256; ++i) { + const e = i - 127; + if (e < -27) { + baseTable[i] = 0; + baseTable[i | 256] = 32768; + shiftTable[i] = 24; + shiftTable[i | 256] = 24; + } else if (e < -14) { + baseTable[i] = 1024 >> -e - 14; + baseTable[i | 256] = 1024 >> -e - 14 | 32768; + shiftTable[i] = -e - 1; + shiftTable[i | 256] = -e - 1; + } else if (e <= 15) { + baseTable[i] = e + 15 << 10; + baseTable[i | 256] = e + 15 << 10 | 32768; + shiftTable[i] = 13; + shiftTable[i | 256] = 13; + } else if (e < 128) { + baseTable[i] = 31744; + baseTable[i | 256] = 64512; + shiftTable[i] = 24; + shiftTable[i | 256] = 24; + } else { + baseTable[i] = 31744; + baseTable[i | 256] = 64512; + shiftTable[i] = 13; + shiftTable[i | 256] = 13; + } + } + const mantissaTable = new Uint32Array(2048); + const exponentTable = new Uint32Array(64); + const offsetTable = new Uint32Array(64); + for (let i = 1; i < 1024; ++i) { + let m = i << 13; + let e = 0; + while ((m & 8388608) === 0) { + m <<= 1; + e -= 8388608; + } + m &= ~8388608; + e += 947912704; + mantissaTable[i] = m | e; + } + for (let i = 1024; i < 2048; ++i) { + mantissaTable[i] = 939524096 + (i - 1024 << 13); + } + for (let i = 1; i < 31; ++i) { + exponentTable[i] = i << 23; + } + exponentTable[31] = 1199570944; + exponentTable[32] = 2147483648; + for (let i = 33; i < 63; ++i) { + exponentTable[i] = 2147483648 + (i - 32 << 23); + } + exponentTable[63] = 3347054592; + for (let i = 1; i < 64; ++i) { + if (i !== 32) { + offsetTable[i] = 1024; + } + } + return { + floatView, + uint32View, + baseTable, + shiftTable, + mantissaTable, + exponentTable, + offsetTable + }; +} +__name(_generateTables, "_generateTables"); +function toHalfFloat(val) { + if (Math.abs(val) > 65504) console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."); + val = clamp(val, -65504, 65504); + _tables.floatView[0] = val; + const f = _tables.uint32View[0]; + const e = f >> 23 & 511; + return _tables.baseTable[e] + ((f & 8388607) >> _tables.shiftTable[e]); +} +__name(toHalfFloat, "toHalfFloat"); +function fromHalfFloat(val) { + const m = val >> 10; + _tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 1023)] + _tables.exponentTable[m]; + return _tables.floatView[0]; +} +__name(fromHalfFloat, "fromHalfFloat"); +const DataUtils = { + toHalfFloat, + fromHalfFloat +}; +const _vector$9 = /* @__PURE__ */ new Vector3(); +const _vector2$1 = /* @__PURE__ */ new Vector2(); +class BufferAttribute { + static { + __name(this, "BufferAttribute"); + } + constructor(array, itemSize, normalized = false) { + if (Array.isArray(array)) { + throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + } + this.isBufferAttribute = true; + this.name = ""; + this.array = array; + this.itemSize = itemSize; + this.count = array !== void 0 ? array.length / itemSize : 0; + this.normalized = normalized; + this.usage = StaticDrawUsage; + this.updateRanges = []; + this.gpuType = FloatType; + this.version = 0; + } + onUploadCallback() { + } + set needsUpdate(value) { + if (value === true) this.version++; + } + setUsage(value) { + this.usage = value; + return this; + } + addUpdateRange(start, count) { + this.updateRanges.push({ start, count }); + } + clearUpdateRanges() { + this.updateRanges.length = 0; + } + copy(source) { + this.name = source.name; + this.array = new source.array.constructor(source.array); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + this.usage = source.usage; + this.gpuType = source.gpuType; + return this; + } + copyAt(index1, attribute, index2) { + index1 *= this.itemSize; + index2 *= attribute.itemSize; + for (let i = 0, l = this.itemSize; i < l; i++) { + this.array[index1 + i] = attribute.array[index2 + i]; + } + return this; + } + copyArray(array) { + this.array.set(array); + return this; + } + applyMatrix3(m) { + if (this.itemSize === 2) { + for (let i = 0, l = this.count; i < l; i++) { + _vector2$1.fromBufferAttribute(this, i); + _vector2$1.applyMatrix3(m); + this.setXY(i, _vector2$1.x, _vector2$1.y); + } + } else if (this.itemSize === 3) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyMatrix3(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + } + return this; + } + applyMatrix4(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyMatrix4(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + applyNormalMatrix(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyNormalMatrix(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + transformDirection(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.transformDirection(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + set(value, offset = 0) { + this.array.set(value, offset); + return this; + } + getComponent(index, component) { + let value = this.array[index * this.itemSize + component]; + if (this.normalized) value = denormalize(value, this.array); + return value; + } + setComponent(index, component, value) { + if (this.normalized) value = normalize(value, this.array); + this.array[index * this.itemSize + component] = value; + return this; + } + getX(index) { + let x = this.array[index * this.itemSize]; + if (this.normalized) x = denormalize(x, this.array); + return x; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.array[index * this.itemSize] = x; + return this; + } + getY(index) { + let y = this.array[index * this.itemSize + 1]; + if (this.normalized) y = denormalize(y, this.array); + return y; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.array[index * this.itemSize + 1] = y; + return this; + } + getZ(index) { + let z = this.array[index * this.itemSize + 2]; + if (this.normalized) z = denormalize(z, this.array); + return z; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.array[index * this.itemSize + 2] = z; + return this; + } + getW(index) { + let w = this.array[index * this.itemSize + 3]; + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.array[index * this.itemSize + 3] = w; + return this; + } + setXY(index, x, y) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + return this; + } + setXYZ(index, x, y, z) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + this.array[index + 2] = z; + return this; + } + setXYZW(index, x, y, z, w) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + this.array[index + 2] = z; + this.array[index + 3] = w; + return this; + } + onUpload(callback) { + this.onUploadCallback = callback; + return this; + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this); + } + toJSON() { + const data = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.from(this.array), + normalized: this.normalized + }; + if (this.name !== "") data.name = this.name; + if (this.usage !== StaticDrawUsage) data.usage = this.usage; + return data; + } +} +class Int8BufferAttribute extends BufferAttribute { + static { + __name(this, "Int8BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Int8Array(array), itemSize, normalized); + } +} +class Uint8BufferAttribute extends BufferAttribute { + static { + __name(this, "Uint8BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Uint8Array(array), itemSize, normalized); + } +} +class Uint8ClampedBufferAttribute extends BufferAttribute { + static { + __name(this, "Uint8ClampedBufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Uint8ClampedArray(array), itemSize, normalized); + } +} +class Int16BufferAttribute extends BufferAttribute { + static { + __name(this, "Int16BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Int16Array(array), itemSize, normalized); + } +} +class Uint16BufferAttribute extends BufferAttribute { + static { + __name(this, "Uint16BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Uint16Array(array), itemSize, normalized); + } +} +class Int32BufferAttribute extends BufferAttribute { + static { + __name(this, "Int32BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Int32Array(array), itemSize, normalized); + } +} +class Uint32BufferAttribute extends BufferAttribute { + static { + __name(this, "Uint32BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Uint32Array(array), itemSize, normalized); + } +} +class Float16BufferAttribute extends BufferAttribute { + static { + __name(this, "Float16BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Uint16Array(array), itemSize, normalized); + this.isFloat16BufferAttribute = true; + } + getX(index) { + let x = fromHalfFloat(this.array[index * this.itemSize]); + if (this.normalized) x = denormalize(x, this.array); + return x; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.array[index * this.itemSize] = toHalfFloat(x); + return this; + } + getY(index) { + let y = fromHalfFloat(this.array[index * this.itemSize + 1]); + if (this.normalized) y = denormalize(y, this.array); + return y; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.array[index * this.itemSize + 1] = toHalfFloat(y); + return this; + } + getZ(index) { + let z = fromHalfFloat(this.array[index * this.itemSize + 2]); + if (this.normalized) z = denormalize(z, this.array); + return z; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.array[index * this.itemSize + 2] = toHalfFloat(z); + return this; + } + getW(index) { + let w = fromHalfFloat(this.array[index * this.itemSize + 3]); + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.array[index * this.itemSize + 3] = toHalfFloat(w); + return this; + } + setXY(index, x, y) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + return this; + } + setXYZ(index, x, y, z) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + this.array[index + 2] = toHalfFloat(z); + return this; + } + setXYZW(index, x, y, z, w) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + this.array[index + 2] = toHalfFloat(z); + this.array[index + 3] = toHalfFloat(w); + return this; + } +} +class Float32BufferAttribute extends BufferAttribute { + static { + __name(this, "Float32BufferAttribute"); + } + constructor(array, itemSize, normalized) { + super(new Float32Array(array), itemSize, normalized); + } +} +let _id$2 = 0; +const _m1$2 = /* @__PURE__ */ new Matrix4(); +const _obj = /* @__PURE__ */ new Object3D(); +const _offset = /* @__PURE__ */ new Vector3(); +const _box$2 = /* @__PURE__ */ new Box3(); +const _boxMorphTargets = /* @__PURE__ */ new Box3(); +const _vector$8 = /* @__PURE__ */ new Vector3(); +class BufferGeometry extends EventDispatcher { + static { + __name(this, "BufferGeometry"); + } + constructor() { + super(); + this.isBufferGeometry = true; + Object.defineProperty(this, "id", { value: _id$2++ }); + this.uuid = generateUUID(); + this.name = ""; + this.type = "BufferGeometry"; + this.index = null; + this.indirect = null; + this.attributes = {}; + this.morphAttributes = {}; + this.morphTargetsRelative = false; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + this.drawRange = { start: 0, count: Infinity }; + this.userData = {}; + } + getIndex() { + return this.index; + } + setIndex(index) { + if (Array.isArray(index)) { + this.index = new (arrayNeedsUint32(index) ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1); + } else { + this.index = index; + } + return this; + } + setIndirect(indirect) { + this.indirect = indirect; + return this; + } + getIndirect() { + return this.indirect; + } + getAttribute(name) { + return this.attributes[name]; + } + setAttribute(name, attribute) { + this.attributes[name] = attribute; + return this; + } + deleteAttribute(name) { + delete this.attributes[name]; + return this; + } + hasAttribute(name) { + return this.attributes[name] !== void 0; + } + addGroup(start, count, materialIndex = 0) { + this.groups.push({ + start, + count, + materialIndex + }); + } + clearGroups() { + this.groups = []; + } + setDrawRange(start, count) { + this.drawRange.start = start; + this.drawRange.count = count; + } + applyMatrix4(matrix) { + const position = this.attributes.position; + if (position !== void 0) { + position.applyMatrix4(matrix); + position.needsUpdate = true; + } + const normal = this.attributes.normal; + if (normal !== void 0) { + const normalMatrix = new Matrix3().getNormalMatrix(matrix); + normal.applyNormalMatrix(normalMatrix); + normal.needsUpdate = true; + } + const tangent = this.attributes.tangent; + if (tangent !== void 0) { + tangent.transformDirection(matrix); + tangent.needsUpdate = true; + } + if (this.boundingBox !== null) { + this.computeBoundingBox(); + } + if (this.boundingSphere !== null) { + this.computeBoundingSphere(); + } + return this; + } + applyQuaternion(q) { + _m1$2.makeRotationFromQuaternion(q); + this.applyMatrix4(_m1$2); + return this; + } + rotateX(angle) { + _m1$2.makeRotationX(angle); + this.applyMatrix4(_m1$2); + return this; + } + rotateY(angle) { + _m1$2.makeRotationY(angle); + this.applyMatrix4(_m1$2); + return this; + } + rotateZ(angle) { + _m1$2.makeRotationZ(angle); + this.applyMatrix4(_m1$2); + return this; + } + translate(x, y, z) { + _m1$2.makeTranslation(x, y, z); + this.applyMatrix4(_m1$2); + return this; + } + scale(x, y, z) { + _m1$2.makeScale(x, y, z); + this.applyMatrix4(_m1$2); + return this; + } + lookAt(vector) { + _obj.lookAt(vector); + _obj.updateMatrix(); + this.applyMatrix4(_obj.matrix); + return this; + } + center() { + this.computeBoundingBox(); + this.boundingBox.getCenter(_offset).negate(); + this.translate(_offset.x, _offset.y, _offset.z); + return this; + } + setFromPoints(points) { + const positionAttribute = this.getAttribute("position"); + if (positionAttribute === void 0) { + const position = []; + for (let i = 0, l = points.length; i < l; i++) { + const point = points[i]; + position.push(point.x, point.y, point.z || 0); + } + this.setAttribute("position", new Float32BufferAttribute(position, 3)); + } else { + for (let i = 0, l = positionAttribute.count; i < l; i++) { + const point = points[i]; + positionAttribute.setXYZ(i, point.x, point.y, point.z || 0); + } + if (points.length > positionAttribute.count) { + console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."); + } + positionAttribute.needsUpdate = true; + } + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + if (position && position.isGLBufferAttribute) { + console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.", this); + this.boundingBox.set( + new Vector3(-Infinity, -Infinity, -Infinity), + new Vector3(Infinity, Infinity, Infinity) + ); + return; + } + if (position !== void 0) { + this.boundingBox.setFromBufferAttribute(position); + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + _box$2.setFromBufferAttribute(morphAttribute); + if (this.morphTargetsRelative) { + _vector$8.addVectors(this.boundingBox.min, _box$2.min); + this.boundingBox.expandByPoint(_vector$8); + _vector$8.addVectors(this.boundingBox.max, _box$2.max); + this.boundingBox.expandByPoint(_vector$8); + } else { + this.boundingBox.expandByPoint(_box$2.min); + this.boundingBox.expandByPoint(_box$2.max); + } + } + } + } else { + this.boundingBox.makeEmpty(); + } + if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) { + console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + if (position && position.isGLBufferAttribute) { + console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.", this); + this.boundingSphere.set(new Vector3(), Infinity); + return; + } + if (position) { + const center = this.boundingSphere.center; + _box$2.setFromBufferAttribute(position); + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + _boxMorphTargets.setFromBufferAttribute(morphAttribute); + if (this.morphTargetsRelative) { + _vector$8.addVectors(_box$2.min, _boxMorphTargets.min); + _box$2.expandByPoint(_vector$8); + _vector$8.addVectors(_box$2.max, _boxMorphTargets.max); + _box$2.expandByPoint(_vector$8); + } else { + _box$2.expandByPoint(_boxMorphTargets.min); + _box$2.expandByPoint(_boxMorphTargets.max); + } + } + } + _box$2.getCenter(center); + let maxRadiusSq = 0; + for (let i = 0, il = position.count; i < il; i++) { + _vector$8.fromBufferAttribute(position, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); + } + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + const morphTargetsRelative = this.morphTargetsRelative; + for (let j = 0, jl = morphAttribute.count; j < jl; j++) { + _vector$8.fromBufferAttribute(morphAttribute, j); + if (morphTargetsRelative) { + _offset.fromBufferAttribute(position, j); + _vector$8.add(_offset); + } + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); + } + } + } + this.boundingSphere.radius = Math.sqrt(maxRadiusSq); + if (isNaN(this.boundingSphere.radius)) { + console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this); + } + } + } + computeTangents() { + const index = this.index; + const attributes = this.attributes; + if (index === null || attributes.position === void 0 || attributes.normal === void 0 || attributes.uv === void 0) { + console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + return; + } + const positionAttribute = attributes.position; + const normalAttribute = attributes.normal; + const uvAttribute = attributes.uv; + if (this.hasAttribute("tangent") === false) { + this.setAttribute("tangent", new BufferAttribute(new Float32Array(4 * positionAttribute.count), 4)); + } + const tangentAttribute = this.getAttribute("tangent"); + const tan1 = [], tan2 = []; + for (let i = 0; i < positionAttribute.count; i++) { + tan1[i] = new Vector3(); + tan2[i] = new Vector3(); + } + const vA = new Vector3(), vB = new Vector3(), vC = new Vector3(), uvA = new Vector2(), uvB = new Vector2(), uvC = new Vector2(), sdir = new Vector3(), tdir = new Vector3(); + function handleTriangle(a, b, c) { + vA.fromBufferAttribute(positionAttribute, a); + vB.fromBufferAttribute(positionAttribute, b); + vC.fromBufferAttribute(positionAttribute, c); + uvA.fromBufferAttribute(uvAttribute, a); + uvB.fromBufferAttribute(uvAttribute, b); + uvC.fromBufferAttribute(uvAttribute, c); + vB.sub(vA); + vC.sub(vA); + uvB.sub(uvA); + uvC.sub(uvA); + const r = 1 / (uvB.x * uvC.y - uvC.x * uvB.y); + if (!isFinite(r)) return; + sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r); + tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r); + tan1[a].add(sdir); + tan1[b].add(sdir); + tan1[c].add(sdir); + tan2[a].add(tdir); + tan2[b].add(tdir); + tan2[c].add(tdir); + } + __name(handleTriangle, "handleTriangle"); + let groups = this.groups; + if (groups.length === 0) { + groups = [{ + start: 0, + count: index.count + }]; + } + for (let i = 0, il = groups.length; i < il; ++i) { + const group = groups[i]; + const start = group.start; + const count = group.count; + for (let j = start, jl = start + count; j < jl; j += 3) { + handleTriangle( + index.getX(j + 0), + index.getX(j + 1), + index.getX(j + 2) + ); + } + } + const tmp2 = new Vector3(), tmp22 = new Vector3(); + const n = new Vector3(), n2 = new Vector3(); + function handleVertex(v) { + n.fromBufferAttribute(normalAttribute, v); + n2.copy(n); + const t2 = tan1[v]; + tmp2.copy(t2); + tmp2.sub(n.multiplyScalar(n.dot(t2))).normalize(); + tmp22.crossVectors(n2, t2); + const test = tmp22.dot(tan2[v]); + const w = test < 0 ? -1 : 1; + tangentAttribute.setXYZW(v, tmp2.x, tmp2.y, tmp2.z, w); + } + __name(handleVertex, "handleVertex"); + for (let i = 0, il = groups.length; i < il; ++i) { + const group = groups[i]; + const start = group.start; + const count = group.count; + for (let j = start, jl = start + count; j < jl; j += 3) { + handleVertex(index.getX(j + 0)); + handleVertex(index.getX(j + 1)); + handleVertex(index.getX(j + 2)); + } + } + } + computeVertexNormals() { + const index = this.index; + const positionAttribute = this.getAttribute("position"); + if (positionAttribute !== void 0) { + let normalAttribute = this.getAttribute("normal"); + if (normalAttribute === void 0) { + normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); + this.setAttribute("normal", normalAttribute); + } else { + for (let i = 0, il = normalAttribute.count; i < il; i++) { + normalAttribute.setXYZ(i, 0, 0, 0); + } + } + const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); + const cb = new Vector3(), ab = new Vector3(); + if (index) { + for (let i = 0, il = index.count; i < il; i += 3) { + const vA = index.getX(i + 0); + const vB = index.getX(i + 1); + const vC = index.getX(i + 2); + pA.fromBufferAttribute(positionAttribute, vA); + pB.fromBufferAttribute(positionAttribute, vB); + pC.fromBufferAttribute(positionAttribute, vC); + cb.subVectors(pC, pB); + ab.subVectors(pA, pB); + cb.cross(ab); + nA.fromBufferAttribute(normalAttribute, vA); + nB.fromBufferAttribute(normalAttribute, vB); + nC.fromBufferAttribute(normalAttribute, vC); + nA.add(cb); + nB.add(cb); + nC.add(cb); + normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); + normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); + normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); + } + } else { + for (let i = 0, il = positionAttribute.count; i < il; i += 3) { + pA.fromBufferAttribute(positionAttribute, i + 0); + pB.fromBufferAttribute(positionAttribute, i + 1); + pC.fromBufferAttribute(positionAttribute, i + 2); + cb.subVectors(pC, pB); + ab.subVectors(pA, pB); + cb.cross(ab); + normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); + normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); + normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); + } + } + this.normalizeNormals(); + normalAttribute.needsUpdate = true; + } + } + normalizeNormals() { + const normals = this.attributes.normal; + for (let i = 0, il = normals.count; i < il; i++) { + _vector$8.fromBufferAttribute(normals, i); + _vector$8.normalize(); + normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z); + } + } + toNonIndexed() { + function convertBufferAttribute(attribute, indices2) { + const array = attribute.array; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + const array2 = new array.constructor(indices2.length * itemSize); + let index = 0, index2 = 0; + for (let i = 0, l = indices2.length; i < l; i++) { + if (attribute.isInterleavedBufferAttribute) { + index = indices2[i] * attribute.data.stride + attribute.offset; + } else { + index = indices2[i] * itemSize; + } + for (let j = 0; j < itemSize; j++) { + array2[index2++] = array[index++]; + } + } + return new BufferAttribute(array2, itemSize, normalized); + } + __name(convertBufferAttribute, "convertBufferAttribute"); + if (this.index === null) { + console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."); + return this; + } + const geometry2 = new BufferGeometry(); + const indices = this.index.array; + const attributes = this.attributes; + for (const name in attributes) { + const attribute = attributes[name]; + const newAttribute = convertBufferAttribute(attribute, indices); + geometry2.setAttribute(name, newAttribute); + } + const morphAttributes = this.morphAttributes; + for (const name in morphAttributes) { + const morphArray = []; + const morphAttribute = morphAttributes[name]; + for (let i = 0, il = morphAttribute.length; i < il; i++) { + const attribute = morphAttribute[i]; + const newAttribute = convertBufferAttribute(attribute, indices); + morphArray.push(newAttribute); + } + geometry2.morphAttributes[name] = morphArray; + } + geometry2.morphTargetsRelative = this.morphTargetsRelative; + const groups = this.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + geometry2.addGroup(group.start, group.count, group.materialIndex); + } + return geometry2; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + data.uuid = this.uuid; + data.type = this.type; + if (this.name !== "") data.name = this.name; + if (Object.keys(this.userData).length > 0) data.userData = this.userData; + if (this.parameters !== void 0) { + const parameters = this.parameters; + for (const key in parameters) { + if (parameters[key] !== void 0) data[key] = parameters[key]; + } + return data; + } + data.data = { attributes: {} }; + const index = this.index; + if (index !== null) { + data.data.index = { + type: index.array.constructor.name, + array: Array.prototype.slice.call(index.array) + }; + } + const attributes = this.attributes; + for (const key in attributes) { + const attribute = attributes[key]; + data.data.attributes[key] = attribute.toJSON(data.data); + } + const morphAttributes = {}; + let hasMorphAttributes = false; + for (const key in this.morphAttributes) { + const attributeArray = this.morphAttributes[key]; + const array = []; + for (let i = 0, il = attributeArray.length; i < il; i++) { + const attribute = attributeArray[i]; + array.push(attribute.toJSON(data.data)); + } + if (array.length > 0) { + morphAttributes[key] = array; + hasMorphAttributes = true; + } + } + if (hasMorphAttributes) { + data.data.morphAttributes = morphAttributes; + data.data.morphTargetsRelative = this.morphTargetsRelative; + } + const groups = this.groups; + if (groups.length > 0) { + data.data.groups = JSON.parse(JSON.stringify(groups)); + } + const boundingSphere = this.boundingSphere; + if (boundingSphere !== null) { + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + } + return data; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + const data = {}; + this.name = source.name; + const index = source.index; + if (index !== null) { + this.setIndex(index.clone(data)); + } + const attributes = source.attributes; + for (const name in attributes) { + const attribute = attributes[name]; + this.setAttribute(name, attribute.clone(data)); + } + const morphAttributes = source.morphAttributes; + for (const name in morphAttributes) { + const array = []; + const morphAttribute = morphAttributes[name]; + for (let i = 0, l = morphAttribute.length; i < l; i++) { + array.push(morphAttribute[i].clone(data)); + } + this.morphAttributes[name] = array; + } + this.morphTargetsRelative = source.morphTargetsRelative; + const groups = source.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + this.addGroup(group.start, group.count, group.materialIndex); + } + const boundingBox = source.boundingBox; + if (boundingBox !== null) { + this.boundingBox = boundingBox.clone(); + } + const boundingSphere = source.boundingSphere; + if (boundingSphere !== null) { + this.boundingSphere = boundingSphere.clone(); + } + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + this.userData = source.userData; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } +} +const _inverseMatrix$3 = /* @__PURE__ */ new Matrix4(); +const _ray$3 = /* @__PURE__ */ new Ray(); +const _sphere$6 = /* @__PURE__ */ new Sphere(); +const _sphereHitAt = /* @__PURE__ */ new Vector3(); +const _vA$1 = /* @__PURE__ */ new Vector3(); +const _vB$1 = /* @__PURE__ */ new Vector3(); +const _vC$1 = /* @__PURE__ */ new Vector3(); +const _tempA = /* @__PURE__ */ new Vector3(); +const _morphA = /* @__PURE__ */ new Vector3(); +const _intersectionPoint = /* @__PURE__ */ new Vector3(); +const _intersectionPointWorld = /* @__PURE__ */ new Vector3(); +class Mesh extends Object3D { + static { + __name(this, "Mesh"); + } + constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) { + super(); + this.isMesh = true; + this.type = "Mesh"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.morphTargetInfluences !== void 0) { + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + } + if (source.morphTargetDictionary !== void 0) { + this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary); + } + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } + getVertexPosition(index, target) { + const geometry = this.geometry; + const position = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + target.fromBufferAttribute(position, index); + const morphInfluences = this.morphTargetInfluences; + if (morphPosition && morphInfluences) { + _morphA.set(0, 0, 0); + for (let i = 0, il = morphPosition.length; i < il; i++) { + const influence = morphInfluences[i]; + const morphAttribute = morphPosition[i]; + if (influence === 0) continue; + _tempA.fromBufferAttribute(morphAttribute, index); + if (morphTargetsRelative) { + _morphA.addScaledVector(_tempA, influence); + } else { + _morphA.addScaledVector(_tempA.sub(target), influence); + } + } + target.add(_morphA); + } + return target; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const material = this.material; + const matrixWorld = this.matrixWorld; + if (material === void 0) return; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$6.copy(geometry.boundingSphere); + _sphere$6.applyMatrix4(matrixWorld); + _ray$3.copy(raycaster.ray).recast(raycaster.near); + if (_sphere$6.containsPoint(_ray$3.origin) === false) { + if (_ray$3.intersectSphere(_sphere$6, _sphereHitAt) === null) return; + if (_ray$3.origin.distanceToSquared(_sphereHitAt) > (raycaster.far - raycaster.near) ** 2) return; + } + _inverseMatrix$3.copy(matrixWorld).invert(); + _ray$3.copy(raycaster.ray).applyMatrix4(_inverseMatrix$3); + if (geometry.boundingBox !== null) { + if (_ray$3.intersectsBox(geometry.boundingBox) === false) return; + } + this._computeIntersections(raycaster, intersects2, _ray$3); + } + _computeIntersections(raycaster, intersects2, rayLocalSpace) { + let intersection; + const geometry = this.geometry; + const material = this.material; + const index = geometry.index; + const position = geometry.attributes.position; + const uv = geometry.attributes.uv; + const uv1 = geometry.attributes.uv1; + const normal = geometry.attributes.normal; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + if (index !== null) { + if (Array.isArray(material)) { + for (let i = 0, il = groups.length; i < il; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + const start = Math.max(group.start, drawRange.start); + const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); + for (let j = start, jl = end; j < jl; j += 3) { + const a = index.getX(j); + const b = index.getX(j + 1); + const c = index.getX(j + 2); + intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(j / 3); + intersection.face.materialIndex = group.materialIndex; + intersects2.push(intersection); + } + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i += 3) { + const a = index.getX(i); + const b = index.getX(i + 1); + const c = index.getX(i + 2); + intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(i / 3); + intersects2.push(intersection); + } + } + } + } else if (position !== void 0) { + if (Array.isArray(material)) { + for (let i = 0, il = groups.length; i < il; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + const start = Math.max(group.start, drawRange.start); + const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); + for (let j = start, jl = end; j < jl; j += 3) { + const a = j; + const b = j + 1; + const c = j + 2; + intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(j / 3); + intersection.face.materialIndex = group.materialIndex; + intersects2.push(intersection); + } + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(position.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i += 3) { + const a = i; + const b = i + 1; + const c = i + 2; + intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(i / 3); + intersects2.push(intersection); + } + } + } + } + } +} +function checkIntersection$1(object, material, raycaster, ray, pA, pB, pC, point) { + let intersect2; + if (material.side === BackSide) { + intersect2 = ray.intersectTriangle(pC, pB, pA, true, point); + } else { + intersect2 = ray.intersectTriangle(pA, pB, pC, material.side === FrontSide, point); + } + if (intersect2 === null) return null; + _intersectionPointWorld.copy(point); + _intersectionPointWorld.applyMatrix4(object.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); + if (distance < raycaster.near || distance > raycaster.far) return null; + return { + distance, + point: _intersectionPointWorld.clone(), + object + }; +} +__name(checkIntersection$1, "checkIntersection$1"); +function checkGeometryIntersection(object, material, raycaster, ray, uv, uv1, normal, a, b, c) { + object.getVertexPosition(a, _vA$1); + object.getVertexPosition(b, _vB$1); + object.getVertexPosition(c, _vC$1); + const intersection = checkIntersection$1(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint); + if (intersection) { + const barycoord = new Vector3(); + Triangle.getBarycoord(_intersectionPoint, _vA$1, _vB$1, _vC$1, barycoord); + if (uv) { + intersection.uv = Triangle.getInterpolatedAttribute(uv, a, b, c, barycoord, new Vector2()); + } + if (uv1) { + intersection.uv1 = Triangle.getInterpolatedAttribute(uv1, a, b, c, barycoord, new Vector2()); + } + if (normal) { + intersection.normal = Triangle.getInterpolatedAttribute(normal, a, b, c, barycoord, new Vector3()); + if (intersection.normal.dot(ray.direction) > 0) { + intersection.normal.multiplyScalar(-1); + } + } + const face = { + a, + b, + c, + normal: new Vector3(), + materialIndex: 0 + }; + Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); + intersection.face = face; + intersection.barycoord = barycoord; + } + return intersection; +} +__name(checkGeometryIntersection, "checkGeometryIntersection"); +class BoxGeometry extends BufferGeometry { + static { + __name(this, "BoxGeometry"); + } + constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { + super(); + this.type = "BoxGeometry"; + this.parameters = { + width, + height, + depth, + widthSegments, + heightSegments, + depthSegments + }; + const scope = this; + widthSegments = Math.floor(widthSegments); + heightSegments = Math.floor(heightSegments); + depthSegments = Math.floor(depthSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let numberOfVertices = 0; + let groupStart = 0; + buildPlane("z", "y", "x", -1, -1, depth, height, width, depthSegments, heightSegments, 0); + buildPlane("z", "y", "x", 1, -1, depth, height, -width, depthSegments, heightSegments, 1); + buildPlane("x", "z", "y", 1, 1, width, depth, height, widthSegments, depthSegments, 2); + buildPlane("x", "z", "y", 1, -1, width, depth, -height, widthSegments, depthSegments, 3); + buildPlane("x", "y", "z", 1, -1, width, height, depth, widthSegments, heightSegments, 4); + buildPlane("x", "y", "z", -1, -1, width, height, -depth, widthSegments, heightSegments, 5); + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function buildPlane(u, v, w, udir, vdir, width2, height2, depth2, gridX, gridY, materialIndex) { + const segmentWidth = width2 / gridX; + const segmentHeight = height2 / gridY; + const widthHalf = width2 / 2; + const heightHalf = height2 / 2; + const depthHalf = depth2 / 2; + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + let vertexCounter = 0; + let groupCount = 0; + const vector = new Vector3(); + for (let iy = 0; iy < gridY1; iy++) { + const y = iy * segmentHeight - heightHalf; + for (let ix = 0; ix < gridX1; ix++) { + const x = ix * segmentWidth - widthHalf; + vector[u] = x * udir; + vector[v] = y * vdir; + vector[w] = depthHalf; + vertices.push(vector.x, vector.y, vector.z); + vector[u] = 0; + vector[v] = 0; + vector[w] = depth2 > 0 ? 1 : -1; + normals.push(vector.x, vector.y, vector.z); + uvs.push(ix / gridX); + uvs.push(1 - iy / gridY); + vertexCounter += 1; + } + } + for (let iy = 0; iy < gridY; iy++) { + for (let ix = 0; ix < gridX; ix++) { + const a = numberOfVertices + ix + gridX1 * iy; + const b = numberOfVertices + ix + gridX1 * (iy + 1); + const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1); + const d = numberOfVertices + (ix + 1) + gridX1 * iy; + indices.push(a, b, d); + indices.push(b, c, d); + groupCount += 6; + } + } + scope.addGroup(groupStart, groupCount, materialIndex); + groupStart += groupCount; + numberOfVertices += vertexCounter; + } + __name(buildPlane, "buildPlane"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments); + } +} +function cloneUniforms(src) { + const dst = {}; + for (const u in src) { + dst[u] = {}; + for (const p in src[u]) { + const property = src[u][p]; + if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) { + if (property.isRenderTargetTexture) { + console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."); + dst[u][p] = null; + } else { + dst[u][p] = property.clone(); + } + } else if (Array.isArray(property)) { + dst[u][p] = property.slice(); + } else { + dst[u][p] = property; + } + } + } + return dst; +} +__name(cloneUniforms, "cloneUniforms"); +function mergeUniforms(uniforms) { + const merged = {}; + for (let u = 0; u < uniforms.length; u++) { + const tmp2 = cloneUniforms(uniforms[u]); + for (const p in tmp2) { + merged[p] = tmp2[p]; + } + } + return merged; +} +__name(mergeUniforms, "mergeUniforms"); +function cloneUniformsGroups(src) { + const dst = []; + for (let u = 0; u < src.length; u++) { + dst.push(src[u].clone()); + } + return dst; +} +__name(cloneUniformsGroups, "cloneUniformsGroups"); +function getUnlitUniformColorSpace(renderer) { + const currentRenderTarget = renderer.getRenderTarget(); + if (currentRenderTarget === null) { + return renderer.outputColorSpace; + } + if (currentRenderTarget.isXRRenderTarget === true) { + return currentRenderTarget.texture.colorSpace; + } + return ColorManagement.workingColorSpace; +} +__name(getUnlitUniformColorSpace, "getUnlitUniformColorSpace"); +const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; +var default_vertex = "void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; +var default_fragment = "void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; +class ShaderMaterial extends Material { + static { + __name(this, "ShaderMaterial"); + } + static get type() { + return "ShaderMaterial"; + } + constructor(parameters) { + super(); + this.isShaderMaterial = true; + this.defines = {}; + this.uniforms = {}; + this.uniformsGroups = []; + this.vertexShader = default_vertex; + this.fragmentShader = default_fragment; + this.linewidth = 1; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.fog = false; + this.lights = false; + this.clipping = false; + this.forceSinglePass = true; + this.extensions = { + clipCullDistance: false, + // set to use vertex shader clipping + multiDraw: false + // set to use vertex shader multi_draw / enable gl_DrawID + }; + this.defaultAttributeValues = { + "color": [1, 1, 1], + "uv": [0, 0], + "uv1": [0, 0] + }; + this.index0AttributeName = void 0; + this.uniformsNeedUpdate = false; + this.glslVersion = null; + if (parameters !== void 0) { + this.setValues(parameters); + } + } + copy(source) { + super.copy(source); + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + this.uniforms = cloneUniforms(source.uniforms); + this.uniformsGroups = cloneUniformsGroups(source.uniformsGroups); + this.defines = Object.assign({}, source.defines); + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.fog = source.fog; + this.lights = source.lights; + this.clipping = source.clipping; + this.extensions = Object.assign({}, source.extensions); + this.glslVersion = source.glslVersion; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.glslVersion = this.glslVersion; + data.uniforms = {}; + for (const name in this.uniforms) { + const uniform = this.uniforms[name]; + const value = uniform.value; + if (value && value.isTexture) { + data.uniforms[name] = { + type: "t", + value: value.toJSON(meta).uuid + }; + } else if (value && value.isColor) { + data.uniforms[name] = { + type: "c", + value: value.getHex() + }; + } else if (value && value.isVector2) { + data.uniforms[name] = { + type: "v2", + value: value.toArray() + }; + } else if (value && value.isVector3) { + data.uniforms[name] = { + type: "v3", + value: value.toArray() + }; + } else if (value && value.isVector4) { + data.uniforms[name] = { + type: "v4", + value: value.toArray() + }; + } else if (value && value.isMatrix3) { + data.uniforms[name] = { + type: "m3", + value: value.toArray() + }; + } else if (value && value.isMatrix4) { + data.uniforms[name] = { + type: "m4", + value: value.toArray() + }; + } else { + data.uniforms[name] = { + value + }; + } + } + if (Object.keys(this.defines).length > 0) data.defines = this.defines; + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + data.lights = this.lights; + data.clipping = this.clipping; + const extensions = {}; + for (const key in this.extensions) { + if (this.extensions[key] === true) extensions[key] = true; + } + if (Object.keys(extensions).length > 0) data.extensions = extensions; + return data; + } +} +class Camera extends Object3D { + static { + __name(this, "Camera"); + } + constructor() { + super(); + this.isCamera = true; + this.type = "Camera"; + this.matrixWorldInverse = new Matrix4(); + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + this.coordinateSystem = WebGLCoordinateSystem; + } + copy(source, recursive) { + super.copy(source, recursive); + this.matrixWorldInverse.copy(source.matrixWorldInverse); + this.projectionMatrix.copy(source.projectionMatrix); + this.projectionMatrixInverse.copy(source.projectionMatrixInverse); + this.coordinateSystem = source.coordinateSystem; + return this; + } + getWorldDirection(target) { + return super.getWorldDirection(target).negate(); + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + updateWorldMatrix(updateParents, updateChildren) { + super.updateWorldMatrix(updateParents, updateChildren); + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + clone() { + return new this.constructor().copy(this); + } +} +const _v3$1 = /* @__PURE__ */ new Vector3(); +const _minTarget = /* @__PURE__ */ new Vector2(); +const _maxTarget = /* @__PURE__ */ new Vector2(); +class PerspectiveCamera extends Camera { + static { + __name(this, "PerspectiveCamera"); + } + constructor(fov2 = 50, aspect2 = 1, near = 0.1, far = 2e3) { + super(); + this.isPerspectiveCamera = true; + this.type = "PerspectiveCamera"; + this.fov = fov2; + this.zoom = 1; + this.near = near; + this.far = far; + this.focus = 10; + this.aspect = aspect2; + this.view = null; + this.filmGauge = 35; + this.filmOffset = 0; + this.updateProjectionMatrix(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.fov = source.fov; + this.zoom = source.zoom; + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign({}, source.view); + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + return this; + } + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength(focalLength) { + const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope); + this.updateProjectionMatrix(); + } + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength() { + const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov); + return 0.5 * this.getFilmHeight() / vExtentSlope; + } + getEffectiveFOV() { + return RAD2DEG * 2 * Math.atan( + Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom + ); + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1); + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1); + } + /** + * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction. + * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle. + */ + getViewBounds(distance, minTarget, maxTarget) { + _v3$1.set(-1, -1, 0.5).applyMatrix4(this.projectionMatrixInverse); + minTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); + _v3$1.set(1, 1, 0.5).applyMatrix4(this.projectionMatrixInverse); + maxTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); + } + /** + * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction. + * Copies the result into the target Vector2, where x is width and y is height. + */ + getViewSize(distance, target) { + this.getViewBounds(distance, _minTarget, _maxTarget); + return target.subVectors(_maxTarget, _minTarget); + } + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * const w = 1920; + * const h = 1080; + * const fullWidth = w * 3; + * const fullHeight = h * 2; + * + * --A-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset(fullWidth, fullHeight, x, y, width, height) { + this.aspect = fullWidth / fullHeight; + if (this.view === null) { + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + } + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + this.updateProjectionMatrix(); + } + clearViewOffset() { + if (this.view !== null) { + this.view.enabled = false; + } + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const near = this.near; + let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom; + let height = 2 * top; + let width = this.aspect * height; + let left = -0.5 * width; + const view = this.view; + if (this.view !== null && this.view.enabled) { + const fullWidth = view.fullWidth, fullHeight = view.fullHeight; + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + } + const skew = this.filmOffset; + if (skew !== 0) left += near * skew / this.getFilmWidth(); + this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far, this.coordinateSystem); + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.fov = this.fov; + data.object.zoom = this.zoom; + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + data.object.aspect = this.aspect; + if (this.view !== null) data.object.view = Object.assign({}, this.view); + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + return data; + } +} +const fov = -90; +const aspect = 1; +class CubeCamera extends Object3D { + static { + __name(this, "CubeCamera"); + } + constructor(near, far, renderTarget) { + super(); + this.type = "CubeCamera"; + this.renderTarget = renderTarget; + this.coordinateSystem = null; + this.activeMipmapLevel = 0; + const cameraPX = new PerspectiveCamera(fov, aspect, near, far); + cameraPX.layers = this.layers; + this.add(cameraPX); + const cameraNX = new PerspectiveCamera(fov, aspect, near, far); + cameraNX.layers = this.layers; + this.add(cameraNX); + const cameraPY = new PerspectiveCamera(fov, aspect, near, far); + cameraPY.layers = this.layers; + this.add(cameraPY); + const cameraNY = new PerspectiveCamera(fov, aspect, near, far); + cameraNY.layers = this.layers; + this.add(cameraNY); + const cameraPZ = new PerspectiveCamera(fov, aspect, near, far); + cameraPZ.layers = this.layers; + this.add(cameraPZ); + const cameraNZ = new PerspectiveCamera(fov, aspect, near, far); + cameraNZ.layers = this.layers; + this.add(cameraNZ); + } + updateCoordinateSystem() { + const coordinateSystem = this.coordinateSystem; + const cameras = this.children.concat(); + const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = cameras; + for (const camera of cameras) this.remove(camera); + if (coordinateSystem === WebGLCoordinateSystem) { + cameraPX.up.set(0, 1, 0); + cameraPX.lookAt(1, 0, 0); + cameraNX.up.set(0, 1, 0); + cameraNX.lookAt(-1, 0, 0); + cameraPY.up.set(0, 0, -1); + cameraPY.lookAt(0, 1, 0); + cameraNY.up.set(0, 0, 1); + cameraNY.lookAt(0, -1, 0); + cameraPZ.up.set(0, 1, 0); + cameraPZ.lookAt(0, 0, 1); + cameraNZ.up.set(0, 1, 0); + cameraNZ.lookAt(0, 0, -1); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + cameraPX.up.set(0, -1, 0); + cameraPX.lookAt(-1, 0, 0); + cameraNX.up.set(0, -1, 0); + cameraNX.lookAt(1, 0, 0); + cameraPY.up.set(0, 0, 1); + cameraPY.lookAt(0, 1, 0); + cameraNY.up.set(0, 0, -1); + cameraNY.lookAt(0, -1, 0); + cameraPZ.up.set(0, -1, 0); + cameraPZ.lookAt(0, 0, 1); + cameraNZ.up.set(0, -1, 0); + cameraNZ.lookAt(0, 0, -1); + } else { + throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: " + coordinateSystem); + } + for (const camera of cameras) { + this.add(camera); + camera.updateMatrixWorld(); + } + } + update(renderer, scene) { + if (this.parent === null) this.updateMatrixWorld(); + const { renderTarget, activeMipmapLevel } = this; + if (this.coordinateSystem !== renderer.coordinateSystem) { + this.coordinateSystem = renderer.coordinateSystem; + this.updateCoordinateSystem(); + } + const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children; + const currentRenderTarget = renderer.getRenderTarget(); + const currentActiveCubeFace = renderer.getActiveCubeFace(); + const currentActiveMipmapLevel = renderer.getActiveMipmapLevel(); + const currentXrEnabled = renderer.xr.enabled; + renderer.xr.enabled = false; + const generateMipmaps = renderTarget.texture.generateMipmaps; + renderTarget.texture.generateMipmaps = false; + renderer.setRenderTarget(renderTarget, 0, activeMipmapLevel); + renderer.render(scene, cameraPX); + renderer.setRenderTarget(renderTarget, 1, activeMipmapLevel); + renderer.render(scene, cameraNX); + renderer.setRenderTarget(renderTarget, 2, activeMipmapLevel); + renderer.render(scene, cameraPY); + renderer.setRenderTarget(renderTarget, 3, activeMipmapLevel); + renderer.render(scene, cameraNY); + renderer.setRenderTarget(renderTarget, 4, activeMipmapLevel); + renderer.render(scene, cameraPZ); + renderTarget.texture.generateMipmaps = generateMipmaps; + renderer.setRenderTarget(renderTarget, 5, activeMipmapLevel); + renderer.render(scene, cameraNZ); + renderer.setRenderTarget(currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel); + renderer.xr.enabled = currentXrEnabled; + renderTarget.texture.needsPMREMUpdate = true; + } +} +class CubeTexture extends Texture { + static { + __name(this, "CubeTexture"); + } + constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace) { + images = images !== void 0 ? images : []; + mapping = mapping !== void 0 ? mapping : CubeReflectionMapping; + super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isCubeTexture = true; + this.flipY = false; + } + get images() { + return this.image; + } + set images(value) { + this.image = value; + } +} +class WebGLCubeRenderTarget extends WebGLRenderTarget { + static { + __name(this, "WebGLCubeRenderTarget"); + } + constructor(size = 1, options = {}) { + super(size, size, options); + this.isWebGLCubeRenderTarget = true; + const image = { width: size, height: size, depth: 1 }; + const images = [image, image, image, image, image, image]; + this.texture = new CubeTexture(images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); + this.texture.isRenderTargetTexture = true; + this.texture.generateMipmaps = options.generateMipmaps !== void 0 ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== void 0 ? options.minFilter : LinearFilter; + } + fromEquirectangularTexture(renderer, texture) { + this.texture.type = texture.type; + this.texture.colorSpace = texture.colorSpace; + this.texture.generateMipmaps = texture.generateMipmaps; + this.texture.minFilter = texture.minFilter; + this.texture.magFilter = texture.magFilter; + const shader = { + uniforms: { + tEquirect: { value: null } + }, + vertexShader: ( + /* glsl */ + ` + + varying vec3 vWorldDirection; + + vec3 transformDirection( in vec3 dir, in mat4 matrix ) { + + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); + + } + + void main() { + + vWorldDirection = transformDirection( position, modelMatrix ); + + #include + #include + + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + + uniform sampler2D tEquirect; + + varying vec3 vWorldDirection; + + #include + + void main() { + + vec3 direction = normalize( vWorldDirection ); + + vec2 sampleUV = equirectUv( direction ); + + gl_FragColor = texture2D( tEquirect, sampleUV ); + + } + ` + ) + }; + const geometry = new BoxGeometry(5, 5, 5); + const material = new ShaderMaterial({ + name: "CubemapFromEquirect", + uniforms: cloneUniforms(shader.uniforms), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader, + side: BackSide, + blending: NoBlending + }); + material.uniforms.tEquirect.value = texture; + const mesh = new Mesh(geometry, material); + const currentMinFilter = texture.minFilter; + if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter; + const camera = new CubeCamera(1, 10, this); + camera.update(renderer, mesh); + texture.minFilter = currentMinFilter; + mesh.geometry.dispose(); + mesh.material.dispose(); + return this; + } + clear(renderer, color, depth, stencil) { + const currentRenderTarget = renderer.getRenderTarget(); + for (let i = 0; i < 6; i++) { + renderer.setRenderTarget(this, i); + renderer.clear(color, depth, stencil); + } + renderer.setRenderTarget(currentRenderTarget); + } +} +const _vector1 = /* @__PURE__ */ new Vector3(); +const _vector2 = /* @__PURE__ */ new Vector3(); +const _normalMatrix = /* @__PURE__ */ new Matrix3(); +class Plane { + static { + __name(this, "Plane"); + } + constructor(normal = new Vector3(1, 0, 0), constant = 0) { + this.isPlane = true; + this.normal = normal; + this.constant = constant; + } + set(normal, constant) { + this.normal.copy(normal); + this.constant = constant; + return this; + } + setComponents(x, y, z, w) { + this.normal.set(x, y, z); + this.constant = w; + return this; + } + setFromNormalAndCoplanarPoint(normal, point) { + this.normal.copy(normal); + this.constant = -point.dot(this.normal); + return this; + } + setFromCoplanarPoints(a, b, c) { + const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); + this.setFromNormalAndCoplanarPoint(normal, a); + return this; + } + copy(plane) { + this.normal.copy(plane.normal); + this.constant = plane.constant; + return this; + } + normalize() { + const inverseNormalLength = 1 / this.normal.length(); + this.normal.multiplyScalar(inverseNormalLength); + this.constant *= inverseNormalLength; + return this; + } + negate() { + this.constant *= -1; + this.normal.negate(); + return this; + } + distanceToPoint(point) { + return this.normal.dot(point) + this.constant; + } + distanceToSphere(sphere) { + return this.distanceToPoint(sphere.center) - sphere.radius; + } + projectPoint(point, target) { + return target.copy(point).addScaledVector(this.normal, -this.distanceToPoint(point)); + } + intersectLine(line, target) { + const direction = line.delta(_vector1); + const denominator = this.normal.dot(direction); + if (denominator === 0) { + if (this.distanceToPoint(line.start) === 0) { + return target.copy(line.start); + } + return null; + } + const t2 = -(line.start.dot(this.normal) + this.constant) / denominator; + if (t2 < 0 || t2 > 1) { + return null; + } + return target.copy(line.start).addScaledVector(direction, t2); + } + intersectsLine(line) { + const startSign = this.distanceToPoint(line.start); + const endSign = this.distanceToPoint(line.end); + return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0; + } + intersectsBox(box) { + return box.intersectsPlane(this); + } + intersectsSphere(sphere) { + return sphere.intersectsPlane(this); + } + coplanarPoint(target) { + return target.copy(this.normal).multiplyScalar(-this.constant); + } + applyMatrix4(matrix, optionalNormalMatrix) { + const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix); + const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix); + const normal = this.normal.applyMatrix3(normalMatrix).normalize(); + this.constant = -referencePoint.dot(normal); + return this; + } + translate(offset) { + this.constant -= offset.dot(this.normal); + return this; + } + equals(plane) { + return plane.normal.equals(this.normal) && plane.constant === this.constant; + } + clone() { + return new this.constructor().copy(this); + } +} +const _sphere$5 = /* @__PURE__ */ new Sphere(); +const _vector$7 = /* @__PURE__ */ new Vector3(); +class Frustum { + static { + __name(this, "Frustum"); + } + constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) { + this.planes = [p0, p1, p2, p3, p4, p5]; + } + set(p0, p1, p2, p3, p4, p5) { + const planes = this.planes; + planes[0].copy(p0); + planes[1].copy(p1); + planes[2].copy(p2); + planes[3].copy(p3); + planes[4].copy(p4); + planes[5].copy(p5); + return this; + } + copy(frustum) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + planes[i].copy(frustum.planes[i]); + } + return this; + } + setFromProjectionMatrix(m, coordinateSystem = WebGLCoordinateSystem) { + const planes = this.planes; + const me = m.elements; + const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3]; + const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7]; + const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11]; + const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15]; + planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize(); + planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize(); + planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize(); + planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize(); + planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize(); + if (coordinateSystem === WebGLCoordinateSystem) { + planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize(); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + planes[5].setComponents(me2, me6, me10, me14).normalize(); + } else { + throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: " + coordinateSystem); + } + return this; + } + intersectsObject(object) { + if (object.boundingSphere !== void 0) { + if (object.boundingSphere === null) object.computeBoundingSphere(); + _sphere$5.copy(object.boundingSphere).applyMatrix4(object.matrixWorld); + } else { + const geometry = object.geometry; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$5.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld); + } + return this.intersectsSphere(_sphere$5); + } + intersectsSprite(sprite) { + _sphere$5.center.set(0, 0, 0); + _sphere$5.radius = 0.7071067811865476; + _sphere$5.applyMatrix4(sprite.matrixWorld); + return this.intersectsSphere(_sphere$5); + } + intersectsSphere(sphere) { + const planes = this.planes; + const center = sphere.center; + const negRadius = -sphere.radius; + for (let i = 0; i < 6; i++) { + const distance = planes[i].distanceToPoint(center); + if (distance < negRadius) { + return false; + } + } + return true; + } + intersectsBox(box) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + const plane = planes[i]; + _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x; + _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y; + _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z; + if (plane.distanceToPoint(_vector$7) < 0) { + return false; + } + } + return true; + } + containsPoint(point) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + if (planes[i].distanceToPoint(point) < 0) { + return false; + } + } + return true; + } + clone() { + return new this.constructor().copy(this); + } +} +function WebGLAnimation() { + let context = null; + let isAnimating = false; + let animationLoop = null; + let requestId = null; + function onAnimationFrame(time, frame) { + animationLoop(time, frame); + requestId = context.requestAnimationFrame(onAnimationFrame); + } + __name(onAnimationFrame, "onAnimationFrame"); + return { + start: /* @__PURE__ */ __name(function() { + if (isAnimating === true) return; + if (animationLoop === null) return; + requestId = context.requestAnimationFrame(onAnimationFrame); + isAnimating = true; + }, "start"), + stop: /* @__PURE__ */ __name(function() { + context.cancelAnimationFrame(requestId); + isAnimating = false; + }, "stop"), + setAnimationLoop: /* @__PURE__ */ __name(function(callback) { + animationLoop = callback; + }, "setAnimationLoop"), + setContext: /* @__PURE__ */ __name(function(value) { + context = value; + }, "setContext") + }; +} +__name(WebGLAnimation, "WebGLAnimation"); +function WebGLAttributes(gl) { + const buffers = /* @__PURE__ */ new WeakMap(); + function createBuffer(attribute, bufferType) { + const array = attribute.array; + const usage = attribute.usage; + const size = array.byteLength; + const buffer = gl.createBuffer(); + gl.bindBuffer(bufferType, buffer); + gl.bufferData(bufferType, array, usage); + attribute.onUploadCallback(); + let type; + if (array instanceof Float32Array) { + type = gl.FLOAT; + } else if (array instanceof Uint16Array) { + if (attribute.isFloat16BufferAttribute) { + type = gl.HALF_FLOAT; + } else { + type = gl.UNSIGNED_SHORT; + } + } else if (array instanceof Int16Array) { + type = gl.SHORT; + } else if (array instanceof Uint32Array) { + type = gl.UNSIGNED_INT; + } else if (array instanceof Int32Array) { + type = gl.INT; + } else if (array instanceof Int8Array) { + type = gl.BYTE; + } else if (array instanceof Uint8Array) { + type = gl.UNSIGNED_BYTE; + } else if (array instanceof Uint8ClampedArray) { + type = gl.UNSIGNED_BYTE; + } else { + throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: " + array); + } + return { + buffer, + type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version, + size + }; + } + __name(createBuffer, "createBuffer"); + function updateBuffer(buffer, attribute, bufferType) { + const array = attribute.array; + const updateRanges = attribute.updateRanges; + gl.bindBuffer(bufferType, buffer); + if (updateRanges.length === 0) { + gl.bufferSubData(bufferType, 0, array); + } else { + updateRanges.sort((a, b) => a.start - b.start); + let mergeIndex = 0; + for (let i = 1; i < updateRanges.length; i++) { + const previousRange = updateRanges[mergeIndex]; + const range = updateRanges[i]; + if (range.start <= previousRange.start + previousRange.count + 1) { + previousRange.count = Math.max( + previousRange.count, + range.start + range.count - previousRange.start + ); + } else { + ++mergeIndex; + updateRanges[mergeIndex] = range; + } + } + updateRanges.length = mergeIndex + 1; + for (let i = 0, l = updateRanges.length; i < l; i++) { + const range = updateRanges[i]; + gl.bufferSubData( + bufferType, + range.start * array.BYTES_PER_ELEMENT, + array, + range.start, + range.count + ); + } + attribute.clearUpdateRanges(); + } + attribute.onUploadCallback(); + } + __name(updateBuffer, "updateBuffer"); + function get(attribute) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + return buffers.get(attribute); + } + __name(get, "get"); + function remove(attribute) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + const data = buffers.get(attribute); + if (data) { + gl.deleteBuffer(data.buffer); + buffers.delete(attribute); + } + } + __name(remove, "remove"); + function update(attribute, bufferType) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + if (attribute.isGLBufferAttribute) { + const cached = buffers.get(attribute); + if (!cached || cached.version < attribute.version) { + buffers.set(attribute, { + buffer: attribute.buffer, + type: attribute.type, + bytesPerElement: attribute.elementSize, + version: attribute.version + }); + } + return; + } + const data = buffers.get(attribute); + if (data === void 0) { + buffers.set(attribute, createBuffer(attribute, bufferType)); + } else if (data.version < attribute.version) { + if (data.size !== attribute.array.byteLength) { + throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported."); + } + updateBuffer(data.buffer, attribute, bufferType); + data.version = attribute.version; + } + } + __name(update, "update"); + return { + get, + remove, + update + }; +} +__name(WebGLAttributes, "WebGLAttributes"); +class PlaneGeometry extends BufferGeometry { + static { + __name(this, "PlaneGeometry"); + } + constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) { + super(); + this.type = "PlaneGeometry"; + this.parameters = { + width, + height, + widthSegments, + heightSegments + }; + const width_half = width / 2; + const height_half = height / 2; + const gridX = Math.floor(widthSegments); + const gridY = Math.floor(heightSegments); + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + const segment_width = width / gridX; + const segment_height = height / gridY; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + for (let iy = 0; iy < gridY1; iy++) { + const y = iy * segment_height - height_half; + for (let ix = 0; ix < gridX1; ix++) { + const x = ix * segment_width - width_half; + vertices.push(x, -y, 0); + normals.push(0, 0, 1); + uvs.push(ix / gridX); + uvs.push(1 - iy / gridY); + } + } + for (let iy = 0; iy < gridY; iy++) { + for (let ix = 0; ix < gridX; ix++) { + const a = ix + gridX1 * iy; + const b = ix + gridX1 * (iy + 1); + const c = ix + 1 + gridX1 * (iy + 1); + const d = ix + 1 + gridX1 * iy; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments); + } +} +var alphahash_fragment = "#ifdef USE_ALPHAHASH\n if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif"; +var alphahash_pars_fragment = "#ifdef USE_ALPHAHASH\n const float ALPHA_HASH_SCALE = 0.05;\n float hash2D( vec2 value ) {\n return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n }\n float hash3D( vec3 value ) {\n return hash2D( vec2( hash2D( value.xy ), value.z ) );\n }\n float getAlphaHashThreshold( vec3 position ) {\n float maxDeriv = max(\n length( dFdx( position.xyz ) ),\n length( dFdy( position.xyz ) )\n );\n float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n vec2 pixScales = vec2(\n exp2( floor( log2( pixScale ) ) ),\n exp2( ceil( log2( pixScale ) ) )\n );\n vec2 alpha = vec2(\n hash3D( floor( pixScales.x * position.xyz ) ),\n hash3D( floor( pixScales.y * position.xyz ) )\n );\n float lerpFactor = fract( log2( pixScale ) );\n float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n float a = min( lerpFactor, 1.0 - lerpFactor );\n vec3 cases = vec3(\n x * x / ( 2.0 * a * ( 1.0 - a ) ),\n ( x - 0.5 * a ) / ( 1.0 - a ),\n 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n );\n float threshold = ( x < ( 1.0 - a ) )\n ? ( ( x < a ) ? cases.x : cases.y )\n : cases.z;\n return clamp( threshold , 1.0e-6, 1.0 );\n }\n#endif"; +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif"; +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; +var alphatest_fragment = "#ifdef USE_ALPHATEST\n #ifdef ALPHA_TO_COVERAGE\n diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n if ( diffuseColor.a < alphaTest ) discard;\n #endif\n#endif"; +var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n uniform float alphaTest;\n#endif"; +var aomap_fragment = "#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_CLEARCOAT ) \n clearcoatSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_SHEEN ) \n sheenSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n #endif\n#endif"; +var aomap_pars_fragment = "#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif"; +var batching_pars_vertex = "#ifdef USE_BATCHING\n #if ! defined( GL_ANGLE_multi_draw )\n #define gl_DrawID _gl_DrawID\n uniform int _gl_DrawID;\n #endif\n uniform highp sampler2D batchingTexture;\n uniform highp usampler2D batchingIdTexture;\n mat4 getBatchingMatrix( const in float i ) {\n int size = textureSize( batchingTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n float getIndirectIndex( const in int i ) {\n int size = textureSize( batchingIdTexture, 0 ).x;\n int x = i % size;\n int y = i / size;\n return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n }\n#endif\n#ifdef USE_BATCHING_COLOR\n uniform sampler2D batchingColorTexture;\n vec3 getBatchingColor( const in float i ) {\n int size = textureSize( batchingColorTexture, 0 ).x;\n int j = int( i );\n int x = j % size;\n int y = j / size;\n return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n }\n#endif"; +var batching_vertex = "#ifdef USE_BATCHING\n mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif"; +var begin_vertex = "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n vPosition = vec3( position );\n#endif"; +var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n vec3 objectTangent = vec3( tangent.xyz );\n#endif"; +var bsdfs = "float G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( specularColor, 1.0, dotVH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n} // validated"; +var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n const mat3 XYZ_TO_REC709 = mat3(\n 3.2404542, -0.9692660, 0.0556434,\n -1.5371385, 1.8760108, -0.2040259,\n -0.4985314, 0.0415560, 1.0572252\n );\n vec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n }\n vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n }\n float IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n }\n vec3 evalSensitivity( float OPD, vec3 shift ) {\n float phase = 2.0 * PI * OPD * 1.0e-9;\n vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n xyz /= 1.0685e-7;\n vec3 rgb = XYZ_TO_REC709 * xyz;\n return rgb;\n }\n vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq < 0.0 ) {\n return vec3( 1.0 );\n }\n float cosTheta2 = sqrt( cosTheta2Sq );\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR < outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n vec3 r123 = sqrt( R123 );\n vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n vec3 C0 = R12 + Rs;\n I = C0;\n vec3 Cm = Rs - T121;\n for ( int m = 1; m <= 2; ++ m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n return max( I, vec3( 0.0 ) );\n }\n#endif"; +var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vBumpMapUv );\n vec2 dSTdy = dFdy( vBumpMapUv );\n float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif"; +var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #ifdef ALPHA_TO_COVERAGE\n float distanceToPlane, distanceGradient;\n float clipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n if ( clipOpacity == 0.0 ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n float unionClipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n }\n #pragma unroll_loop_end\n clipOpacity *= 1.0 - unionClipOpacity;\n #endif\n diffuseColor.a *= clipOpacity;\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n #endif\n#endif"; +var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; +var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif"; +var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif"; +var color_fragment = "#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif"; +var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif"; +var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n varying vec3 vColor;\n#endif"; +var color_vertex = "#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n vColor.xyz *= batchingColor.xyz;\n#endif"; +var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n varying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated"; +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n uv.x += filterInt * 3.0 * cubeUV_minTileSize;\n uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n uv.x *= CUBEUV_TEXEL_WIDTH;\n uv.y *= CUBEUV_TEXEL_HEIGHT;\n #ifdef texture2DGradEXT\n return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n #else\n return texture2D( envMap, uv ).rgb;\n #endif\n }\n #define cubeUV_r0 1.0\n #define cubeUV_m0 - 2.0\n #define cubeUV_r1 0.8\n #define cubeUV_m1 - 1.0\n #define cubeUV_r4 0.4\n #define cubeUV_m4 2.0\n #define cubeUV_r5 0.305\n #define cubeUV_m5 3.0\n #define cubeUV_r6 0.21\n #define cubeUV_m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= cubeUV_r1 ) {\n mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n } else if ( roughness >= cubeUV_r4 ) {\n mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n } else if ( roughness >= cubeUV_r5 ) {\n mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n } else if ( roughness >= cubeUV_r6 ) {\n mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif"; +var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n vec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n mat3 bm = mat3( batchingMatrix );\n transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n transformedNormal = bm * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = bm * transformedTangent;\n #endif\n#endif\n#ifdef USE_INSTANCING\n mat3 im = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n transformedNormal = im * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = im * transformedTangent;\n #endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif"; +var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif"; +var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif"; +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n emissiveColor = sRGBTransferEOTF( emissiveColor );\n #endif\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif"; +var colorspace_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; +var colorspace_pars_fragment = "vec4 LinearTransferOETF( in vec4 value ) {\n return value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}"; +var envmap_fragment = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif"; +var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform mat3 envMapRotation;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif"; +var envmap_pars_fragment = "#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif"; +var envmap_pars_vertex = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif"; +var envmap_vertex = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif"; +var fog_vertex = "#ifdef USE_FOG\n vFogDepth = - mvPosition.z;\n#endif"; +var fog_pars_vertex = "#ifdef USE_FOG\n varying float vFogDepth;\n#endif"; +var fog_fragment = "#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; +var fog_pars_fragment = "#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float vFogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif"; +var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return vec3( texture2D( gradientMap, coord ).r );\n #else\n vec2 fw = fwidth( coord ) * 0.5;\n return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n #endif\n}"; +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif"; +var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;"; +var lights_lambert_pars_fragment = "varying vec3 vViewPosition;\nstruct LambertMaterial {\n vec3 diffuseColor;\n float specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Lambert\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert"; +var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n uniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n return irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n if ( cutoffDistance > 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n light.color = directionalLight.color;\n light.direction = directionalLight.direction;\n light.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = pointLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float lightDistance = length( lVector );\n light.color = pointLight.color;\n light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = spotLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float angleCos = dot( light.direction, spotLight.direction );\n float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n if ( spotAttenuation > 0.0 ) {\n float lightDistance = length( lVector );\n light.color = spotLight.color * spotAttenuation;\n light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n } else {\n light.color = vec3( 0.0 );\n light.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n float dotNL = dot( normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n return irradiance;\n }\n#endif"; +var envmap_physical_pars_fragment = "#ifdef USE_ENVMAP\n vec3 getIBLIrradiance( const in vec3 normal ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n return PI * envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 reflectVec = reflect( - viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n return envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n #ifdef USE_ANISOTROPY\n vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 bentNormal = cross( bitangent, viewDir );\n bentNormal = normalize( cross( bentNormal, bitangent ) );\n bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n return getIBLRadiance( viewDir, bentNormal, roughness );\n #else\n return vec3( 0.0 );\n #endif\n }\n #endif\n#endif"; +var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; +var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon"; +var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; +var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong"; +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n material.ior = ior;\n #ifdef USE_SPECULAR\n float specularIntensityFactor = specularIntensity;\n vec3 specularColorFactor = specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n #endif\n material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n #else\n float specularIntensityFactor = 1.0;\n vec3 specularColorFactor = vec3( 1.0 );\n material.specularF90 = 1.0;\n #endif\n material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n material.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n material.clearcoatF0 = vec3( 0.04 );\n material.clearcoatF90 = 1.0;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n material.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n material.iridescence = iridescence;\n material.iridescenceIOR = iridescenceIOR;\n #ifdef USE_IRIDESCENCEMAP\n material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n #endif\n #ifdef USE_IRIDESCENCE_THICKNESSMAP\n material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n #else\n material.iridescenceThickness = iridescenceThicknessMaximum;\n #endif\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheenColor;\n #ifdef USE_SHEEN_COLORMAP\n material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n #endif\n material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n #ifdef USE_SHEEN_ROUGHNESSMAP\n material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n #ifdef USE_ANISOTROPYMAP\n mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n #else\n vec2 anisotropyV = anisotropyVector;\n #endif\n material.anisotropy = length( anisotropyV );\n if( material.anisotropy == 0.0 ) {\n anisotropyV = vec2( 1.0, 0.0 );\n } else {\n anisotropyV /= material.anisotropy;\n material.anisotropy = saturate( material.anisotropy );\n }\n material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif"; +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n vec3 diffuseColor;\n float roughness;\n vec3 specularColor;\n float specularF90;\n float dispersion;\n #ifdef USE_CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n vec3 clearcoatF0;\n float clearcoatF90;\n #endif\n #ifdef USE_IRIDESCENCE\n float iridescence;\n float iridescenceIOR;\n float iridescenceThickness;\n vec3 iridescenceFresnel;\n vec3 iridescenceF0;\n #endif\n #ifdef USE_SHEEN\n vec3 sheenColor;\n float sheenRoughness;\n #endif\n #ifdef IOR\n float ior;\n #endif\n #ifdef USE_TRANSMISSION\n float transmission;\n float transmissionAlpha;\n float thickness;\n float attenuationDistance;\n vec3 attenuationColor;\n #endif\n #ifdef USE_ANISOTROPY\n float anisotropy;\n float alphaT;\n vec3 anisotropyT;\n vec3 anisotropyB;\n #endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n float v = 0.5 / ( gv + gl );\n return saturate(v);\n }\n float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n float a2 = alphaT * alphaB;\n highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n highp float v2 = dot( v, v );\n float w2 = a2 / v2;\n return RECIPROCAL_PI * a2 * pow2 ( w2 );\n }\n#endif\n#ifdef USE_CLEARCOAT\n vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n vec3 f0 = material.clearcoatF0;\n float f90 = material.clearcoatF90;\n float roughness = material.clearcoatRoughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( V * D );\n }\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n vec3 f0 = material.specularColor;\n float f90 = material.specularF90;\n float roughness = material.roughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n #ifdef USE_IRIDESCENCE\n F = mix( F, material.iridescenceFresnel, material.iridescence );\n #endif\n #ifdef USE_ANISOTROPY\n float dotTL = dot( material.anisotropyT, lightDir );\n float dotTV = dot( material.anisotropyT, viewDir );\n float dotTH = dot( material.anisotropyT, halfDir );\n float dotBL = dot( material.anisotropyB, lightDir );\n float dotBV = dot( material.anisotropyB, viewDir );\n float dotBH = dot( material.anisotropyB, halfDir );\n float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n #else\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n #endif\n return F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n float alpha = pow2( roughness );\n float invAlpha = 1.0 / alpha;\n float cos2h = dotNH * dotNH;\n float sin2h = max( 1.0 - cos2h, 0.0078125 );\n return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float D = D_Charlie( sheenRoughness, dotNH );\n float V = V_Neubelt( dotNV, dotNL );\n return sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n float r2 = roughness * roughness;\n float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n return saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n return fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n return specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n #ifdef USE_IRIDESCENCE\n vec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n #else\n vec3 Fr = specularColor;\n #endif\n vec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n float Ess = fab.x + fab.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometryNormal;\n vec3 viewDir = geometryViewDir;\n vec3 position = geometryPosition;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.roughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifdef USE_CLEARCOAT\n float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = dotNLcc * directLight.color;\n clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef USE_CLEARCOAT\n clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n #endif\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n #ifdef USE_IRIDESCENCE\n computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n #else\n computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n #endif\n vec3 totalScattering = singleScattering + multiScattering;\n vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n reflectedLight.indirectSpecular += radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; +var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n geometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n float dotNVi = saturate( dot( normal, geometryViewDir ) );\n if ( material.iridescenceThickness == 0.0 ) {\n material.iridescence = 0.0;\n } else {\n material.iridescence = saturate( material.iridescence );\n }\n if ( material.iridescence > 0.0 ) {\n material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n }\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointLightInfo( pointLight, geometryPosition, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n vec4 spotColor;\n vec3 spotLightCoord;\n bool inSpotLightMap;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotLightInfo( spotLight, geometryPosition, directLight );\n #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n #else\n #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #endif\n #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n #endif\n #undef SPOT_LIGHT_MAP_INDEX\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; +var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getIBLIrradiance( geometryNormal );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n #ifdef USE_ANISOTROPY\n radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n #else\n radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n #endif\n #ifdef USE_CLEARCOAT\n clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n #endif\n#endif"; +var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif"; +var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF )\n gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; +var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif"; +var map_fragment = "#ifdef USE_MAP\n vec4 sampledDiffuseColor = texture2D( map, vMapUv );\n #ifdef DECODE_VIDEO_TEXTURE\n sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n #endif\n diffuseColor *= sampledDiffuseColor;\n#endif"; +var map_pars_fragment = "#ifdef USE_MAP\n uniform sampler2D map;\n#endif"; +var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n #if defined( USE_POINTS_UV )\n vec2 uv = vUv;\n #else\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n #endif\n#endif\n#ifdef USE_MAP\n diffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; +var map_particle_pars_fragment = "#if defined( USE_POINTS_UV )\n varying vec2 vUv;\n#else\n #if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n #endif\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; +var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n metalnessFactor *= texelMetalness.b;\n#endif"; +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif"; +var morphinstance_vertex = "#ifdef USE_INSTANCING_MORPH\n float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n }\n#endif"; +var morphcolor_vertex = "#if defined( USE_MORPHCOLORS )\n vColor *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n #if defined( USE_COLOR_ALPHA )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n #elif defined( USE_COLOR )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n #endif\n }\n#endif"; +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n #ifndef USE_INSTANCING_MORPH\n uniform float morphTargetBaseInfluence;\n uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n #endif\n uniform sampler2DArray morphTargetsTexture;\n uniform ivec2 morphTargetsTextureSize;\n vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n int y = texelIndex / morphTargetsTextureSize.x;\n int x = texelIndex - y * morphTargetsTextureSize.x;\n ivec3 morphUV = ivec3( x, y, morphTargetIndex );\n return texelFetch( morphTargetsTexture, morphUV, 0 );\n }\n#endif"; +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; +var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = dFdx( vViewPosition );\n vec3 fdy = dFdy( vViewPosition );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal *= faceDirection;\n #endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n #ifdef USE_TANGENT\n mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn = getTangentFrame( - vViewPosition, normal,\n #if defined( USE_NORMALMAP )\n vNormalMapUv\n #elif defined( USE_CLEARCOAT_NORMALMAP )\n vClearcoatNormalMapUv\n #else\n vUv\n #endif\n );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn[0] *= faceDirection;\n tbn[1] *= faceDirection;\n #endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n #ifdef USE_TANGENT\n mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn2[0] *= faceDirection;\n tbn2[1] *= faceDirection;\n #endif\n#endif\nvec3 nonPerturbedNormal = normal;"; +var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n normal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; +var normal_pars_fragment = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; +var normal_pars_vertex = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; +var normal_vertex = "#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif"; +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( uv.st );\n vec2 st1 = dFdy( uv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n return mat3( T * scale, B * scale, N );\n }\n#endif"; +var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n vec3 clearcoatNormal = nonPerturbedNormal;\n#endif"; +var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n clearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif"; +var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif"; +var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n uniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform sampler2D iridescenceThicknessMap;\n#endif"; +var opaque_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );"; +var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n if( v <= 0.0 )\n return vec4( 0., 0., 0., 0. );\n if( v >= 1.0 )\n return vec4( 1., 1., 1., 1. );\n float vuf;\n float af = modf( v * PackFactors.a, vuf );\n float bf = modf( vuf * ShiftRight8, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n if( v <= 0.0 )\n return vec3( 0., 0., 0. );\n if( v >= 1.0 )\n return vec3( 1., 1., 1. );\n float vuf;\n float bf = modf( v * PackFactors.b, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n if( v <= 0.0 )\n return vec2( 0., 0. );\n if( v >= 1.0 )\n return vec2( 1., 1. );\n float vuf;\n float gf = modf( v * 256., vuf );\n return vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n return dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * depth - far );\n}"; +var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif"; +var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n mvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; +var dithering_fragment = "#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; +var dithering_pars_fragment = "#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif"; +var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n roughnessFactor *= texelRoughness.g;\n#endif"; +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif"; +var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n float shadow = 1.0;\n vec3 lightToPosition = shadowCoord.xyz;\n \n float lightToPositionLength = length( lightToPosition );\n if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n shadow = (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n#endif"; +var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif"; +var shadowmap_vertex = "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n shadowWorldPosition = worldPosition;\n #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n #endif\n vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n#endif"; +var shadowmask_pars_fragment = "float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}"; +var skinbase_vertex = "#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; +var skinning_pars_vertex = "#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n uniform highp sampler2D boneTexture;\n mat4 getBoneMatrix( const in float i ) {\n int size = textureSize( boneTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n#endif"; +var skinning_vertex = "#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; +var skinnormal_vertex = "#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif"; +var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif"; +var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif"; +var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; +var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n vec3( 1.6605, - 0.1246, - 0.0182 ),\n vec3( - 0.5876, 1.1329, - 0.1006 ),\n vec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n vec3( 0.6274, 0.0691, 0.0164 ),\n vec3( 0.3293, 0.9195, 0.0880 ),\n vec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n vec3 x2 = x * x;\n vec3 x4 = x2 * x2;\n return + 15.5 * x4 * x2\n - 40.14 * x4 * x\n + 31.96 * x4\n - 6.868 * x2 * x\n + 0.4298 * x2\n + 0.1191 * x\n - 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n const mat3 AgXInsetMatrix = mat3(\n vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n );\n const mat3 AgXOutsetMatrix = mat3(\n vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n );\n const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;\n color *= toneMappingExposure;\n color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n color = AgXInsetMatrix * color;\n color = max( color, 1e-10 ); color = log2( color );\n color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n color = clamp( color, 0.0, 1.0 );\n color = agxDefaultContrastApprox( color );\n color = AgXOutsetMatrix * color;\n color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n color = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n color = clamp( color, 0.0, 1.0 );\n return color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n const float StartCompression = 0.8 - 0.04;\n const float Desaturation = 0.15;\n color *= toneMappingExposure;\n float x = min( color.r, min( color.g, color.b ) );\n float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n color -= offset;\n float peak = max( color.r, max( color.g, color.b ) );\n if ( peak < StartCompression ) return color;\n float d = 1. - StartCompression;\n float newPeak = 1. - d * d / ( peak + d - StartCompression );\n color *= newPeak / peak;\n float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n return mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; +var transmission_fragment = "#ifdef USE_TRANSMISSION\n material.transmission = transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n #endif\n vec3 pos = vWorldPosition;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec4 transmitted = getIBLVolumeRefraction(\n n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n material.attenuationColor, material.attenuationDistance );\n material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif"; +var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n uniform float transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n float w0( float a ) {\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n }\n float w1( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n }\n float w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n }\n float w3( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * a );\n }\n float g0( float a ) {\n return w0( a ) + w1( a );\n }\n float g1( float a ) {\n return w2( a ) + w3( a );\n }\n float h0( float a ) {\n return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n }\n float h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n }\n vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n uv = uv * texelSize.zw + 0.5;\n vec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n }\n vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n vec2 fLodSizeInv = 1.0 / fLodSize;\n vec2 cLodSizeInv = 1.0 / cLodSize;\n vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n return mix( fSample, cSample, fract( lod ) );\n }\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n }\n vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n return vec3( 1.0 );\n } else {\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec4 transmittedLight;\n vec3 transmittance;\n #ifdef USE_DISPERSION\n float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n for ( int i = 0; i < 3; i ++ ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n \n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n \n vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n transmittedLight[ i ] = transmissionSample[ i ];\n transmittedLight.a += transmissionSample.a;\n transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n }\n transmittedLight.a /= 3.0;\n \n #else\n \n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n \n #endif\n vec3 attenuatedColor = transmittance * transmittedLight.rgb;\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n }\n#endif"; +var uv_pars_fragment = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; +var uv_pars_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n uniform mat3 mapTransform;\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n uniform mat3 alphaMapTransform;\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n uniform mat3 lightMapTransform;\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n uniform mat3 aoMapTransform;\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n uniform mat3 bumpMapTransform;\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n uniform mat3 normalMapTransform;\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n uniform mat3 displacementMapTransform;\n varying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n uniform mat3 emissiveMapTransform;\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n uniform mat3 metalnessMapTransform;\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n uniform mat3 roughnessMapTransform;\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n uniform mat3 anisotropyMapTransform;\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n uniform mat3 clearcoatMapTransform;\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform mat3 clearcoatNormalMapTransform;\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform mat3 clearcoatRoughnessMapTransform;\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n uniform mat3 sheenColorMapTransform;\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n uniform mat3 sheenRoughnessMapTransform;\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n uniform mat3 iridescenceMapTransform;\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform mat3 iridescenceThicknessMapTransform;\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n uniform mat3 specularMapTransform;\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n uniform mat3 specularColorMapTransform;\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n uniform mat3 specularIntensityMapTransform;\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; +var uv_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n vUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif"; +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_BATCHING\n worldPosition = batchingMatrix * worldPosition;\n #endif\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif"; +const vertex$h = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; +const fragment$h = "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n #ifdef DECODE_VIDEO_TEXTURE\n texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; +const vertex$g = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; +const fragment$g = "#ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n uniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n #ifdef ENVMAP_TYPE_CUBE\n vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n #else\n vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; +const vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; +const fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n gl_FragColor = texColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}"; +const vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}"; +const fragment$e = "#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #elif DEPTH_PACKING == 3202\n gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n #elif DEPTH_PACKING == 3203\n gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n #endif\n}"; +const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}"; +const fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}"; +const vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}"; +const fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n #include \n}"; +const vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n #include \n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$9 = "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; +const fragment$9 = "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}"; +const fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n #else\n vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n vViewPosition = - mvPosition.xyz;\n#endif\n}"; +const fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n #ifdef OPAQUE\n gl_FragColor.a = 1.0;\n #endif\n}"; +const vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; +const fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n varying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n#ifdef USE_TRANSMISSION\n vWorldPosition = worldPosition.xyz;\n#endif\n}"; +const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n #define IOR\n #define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n uniform float ior;\n#endif\n#ifdef USE_SPECULAR\n uniform float specularIntensity;\n uniform vec3 specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n uniform sampler2D specularColorMap;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n uniform sampler2D specularIntensityMap;\n #endif\n#endif\n#ifdef USE_CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n uniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n uniform float iridescence;\n uniform float iridescenceIOR;\n uniform float iridescenceThicknessMinimum;\n uniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheenColor;\n uniform float sheenRoughness;\n #ifdef USE_SHEEN_COLORMAP\n uniform sampler2D sheenColorMap;\n #endif\n #ifdef USE_SHEEN_ROUGHNESSMAP\n uniform sampler2D sheenRoughnessMap;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n uniform vec2 anisotropyVector;\n #ifdef USE_ANISOTROPYMAP\n uniform sampler2D anisotropyMap;\n #endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n #include \n vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n #ifdef USE_SHEEN\n float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n #endif\n #ifdef USE_CLEARCOAT\n float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}"; +const fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$3 = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n varying vec2 vUv;\n uniform mat3 uvTransform;\n#endif\nvoid main() {\n #ifdef USE_POINTS_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}"; +const fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; +const vertex$2 = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +const fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}"; +const vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix[ 3 ];\n vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}"; +const fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n}"; +const ShaderChunk = { + alphahash_fragment, + alphahash_pars_fragment, + alphamap_fragment, + alphamap_pars_fragment, + alphatest_fragment, + alphatest_pars_fragment, + aomap_fragment, + aomap_pars_fragment, + batching_pars_vertex, + batching_vertex, + begin_vertex, + beginnormal_vertex, + bsdfs, + iridescence_fragment, + bumpmap_pars_fragment, + clipping_planes_fragment, + clipping_planes_pars_fragment, + clipping_planes_pars_vertex, + clipping_planes_vertex, + color_fragment, + color_pars_fragment, + color_pars_vertex, + color_vertex, + common, + cube_uv_reflection_fragment, + defaultnormal_vertex, + displacementmap_pars_vertex, + displacementmap_vertex, + emissivemap_fragment, + emissivemap_pars_fragment, + colorspace_fragment, + colorspace_pars_fragment, + envmap_fragment, + envmap_common_pars_fragment, + envmap_pars_fragment, + envmap_pars_vertex, + envmap_physical_pars_fragment, + envmap_vertex, + fog_vertex, + fog_pars_vertex, + fog_fragment, + fog_pars_fragment, + gradientmap_pars_fragment, + lightmap_pars_fragment, + lights_lambert_fragment, + lights_lambert_pars_fragment, + lights_pars_begin, + lights_toon_fragment, + lights_toon_pars_fragment, + lights_phong_fragment, + lights_phong_pars_fragment, + lights_physical_fragment, + lights_physical_pars_fragment, + lights_fragment_begin, + lights_fragment_maps, + lights_fragment_end, + logdepthbuf_fragment, + logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex, + logdepthbuf_vertex, + map_fragment, + map_pars_fragment, + map_particle_fragment, + map_particle_pars_fragment, + metalnessmap_fragment, + metalnessmap_pars_fragment, + morphinstance_vertex, + morphcolor_vertex, + morphnormal_vertex, + morphtarget_pars_vertex, + morphtarget_vertex, + normal_fragment_begin, + normal_fragment_maps, + normal_pars_fragment, + normal_pars_vertex, + normal_vertex, + normalmap_pars_fragment, + clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps, + clearcoat_pars_fragment, + iridescence_pars_fragment, + opaque_fragment, + packing, + premultiplied_alpha_fragment, + project_vertex, + dithering_fragment, + dithering_pars_fragment, + roughnessmap_fragment, + roughnessmap_pars_fragment, + shadowmap_pars_fragment, + shadowmap_pars_vertex, + shadowmap_vertex, + shadowmask_pars_fragment, + skinbase_vertex, + skinning_pars_vertex, + skinning_vertex, + skinnormal_vertex, + specularmap_fragment, + specularmap_pars_fragment, + tonemapping_fragment, + tonemapping_pars_fragment, + transmission_fragment, + transmission_pars_fragment, + uv_pars_fragment, + uv_pars_vertex, + uv_vertex, + worldpos_vertex, + background_vert: vertex$h, + background_frag: fragment$h, + backgroundCube_vert: vertex$g, + backgroundCube_frag: fragment$g, + cube_vert: vertex$f, + cube_frag: fragment$f, + depth_vert: vertex$e, + depth_frag: fragment$e, + distanceRGBA_vert: vertex$d, + distanceRGBA_frag: fragment$d, + equirect_vert: vertex$c, + equirect_frag: fragment$c, + linedashed_vert: vertex$b, + linedashed_frag: fragment$b, + meshbasic_vert: vertex$a, + meshbasic_frag: fragment$a, + meshlambert_vert: vertex$9, + meshlambert_frag: fragment$9, + meshmatcap_vert: vertex$8, + meshmatcap_frag: fragment$8, + meshnormal_vert: vertex$7, + meshnormal_frag: fragment$7, + meshphong_vert: vertex$6, + meshphong_frag: fragment$6, + meshphysical_vert: vertex$5, + meshphysical_frag: fragment$5, + meshtoon_vert: vertex$4, + meshtoon_frag: fragment$4, + points_vert: vertex$3, + points_frag: fragment$3, + shadow_vert: vertex$2, + shadow_frag: fragment$2, + sprite_vert: vertex$1, + sprite_frag: fragment$1 +}; +const UniformsLib = { + common: { + diffuse: { value: /* @__PURE__ */ new Color(16777215) }, + opacity: { value: 1 }, + map: { value: null }, + mapTransform: { value: /* @__PURE__ */ new Matrix3() }, + alphaMap: { value: null }, + alphaMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + alphaTest: { value: 0 } + }, + specularmap: { + specularMap: { value: null }, + specularMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + envmap: { + envMap: { value: null }, + envMapRotation: { value: /* @__PURE__ */ new Matrix3() }, + flipEnvMap: { value: -1 }, + reflectivity: { value: 1 }, + // basic, lambert, phong + ior: { value: 1.5 }, + // physical + refractionRatio: { value: 0.98 } + // basic, lambert, phong + }, + aomap: { + aoMap: { value: null }, + aoMapIntensity: { value: 1 }, + aoMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + lightmap: { + lightMap: { value: null }, + lightMapIntensity: { value: 1 }, + lightMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + bumpmap: { + bumpMap: { value: null }, + bumpMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + bumpScale: { value: 1 } + }, + normalmap: { + normalMap: { value: null }, + normalMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + normalScale: { value: /* @__PURE__ */ new Vector2(1, 1) } + }, + displacementmap: { + displacementMap: { value: null }, + displacementMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + }, + emissivemap: { + emissiveMap: { value: null }, + emissiveMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + metalnessmap: { + metalnessMap: { value: null }, + metalnessMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + roughnessmap: { + roughnessMap: { value: null }, + roughnessMapTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + gradientmap: { + gradientMap: { value: null } + }, + fog: { + fogDensity: { value: 25e-5 }, + fogNear: { value: 1 }, + fogFar: { value: 2e3 }, + fogColor: { value: /* @__PURE__ */ new Color(16777215) } + }, + lights: { + ambientLightColor: { value: [] }, + lightProbe: { value: [] }, + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + directionalLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + spotLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + spotLightMap: { value: [] }, + spotShadowMap: { value: [] }, + spotLightMatrix: { value: [] }, + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + pointLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + ltc_1: { value: null }, + ltc_2: { value: null } + }, + points: { + diffuse: { value: /* @__PURE__ */ new Color(16777215) }, + opacity: { value: 1 }, + size: { value: 1 }, + scale: { value: 1 }, + map: { value: null }, + alphaMap: { value: null }, + alphaMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + alphaTest: { value: 0 }, + uvTransform: { value: /* @__PURE__ */ new Matrix3() } + }, + sprite: { + diffuse: { value: /* @__PURE__ */ new Color(16777215) }, + opacity: { value: 1 }, + center: { value: /* @__PURE__ */ new Vector2(0.5, 0.5) }, + rotation: { value: 0 }, + map: { value: null }, + mapTransform: { value: /* @__PURE__ */ new Matrix3() }, + alphaMap: { value: null }, + alphaMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + alphaTest: { value: 0 } + } +}; +const ShaderLib = { + basic: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + }, + lambert: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: /* @__PURE__ */ new Color(0) } + } + ]), + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + }, + phong: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: /* @__PURE__ */ new Color(0) }, + specular: { value: /* @__PURE__ */ new Color(1118481) }, + shininess: { value: 30 } + } + ]), + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + }, + standard: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: /* @__PURE__ */ new Color(0) }, + roughness: { value: 1 }, + metalness: { value: 0 }, + envMapIntensity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + }, + toon: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: /* @__PURE__ */ new Color(0) } + } + ]), + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + }, + matcap: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ]), + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + }, + points: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.points, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + }, + dashed: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ]), + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + }, + depth: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.displacementmap + ]), + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + }, + normal: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.meshnormal_vert, + fragmentShader: ShaderChunk.meshnormal_frag + }, + sprite: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.sprite, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + }, + background: { + uniforms: { + uvTransform: { value: /* @__PURE__ */ new Matrix3() }, + t2D: { value: null }, + backgroundIntensity: { value: 1 } + }, + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + }, + backgroundCube: { + uniforms: { + envMap: { value: null }, + flipEnvMap: { value: -1 }, + backgroundBlurriness: { value: 0 }, + backgroundIntensity: { value: 1 }, + backgroundRotation: { value: /* @__PURE__ */ new Matrix3() } + }, + vertexShader: ShaderChunk.backgroundCube_vert, + fragmentShader: ShaderChunk.backgroundCube_frag + }, + cube: { + uniforms: { + tCube: { value: null }, + tFlip: { value: -1 }, + opacity: { value: 1 } + }, + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { value: null } + }, + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + }, + distanceRGBA: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: /* @__PURE__ */ new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1e3 } + } + ]), + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + }, + shadow: { + uniforms: /* @__PURE__ */ mergeUniforms([ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: /* @__PURE__ */ new Color(0) }, + opacity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + } +}; +ShaderLib.physical = { + uniforms: /* @__PURE__ */ mergeUniforms([ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + clearcoatNormalMap: { value: null }, + clearcoatNormalMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + clearcoatNormalScale: { value: /* @__PURE__ */ new Vector2(1, 1) }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatRoughnessMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + dispersion: { value: 0 }, + iridescence: { value: 0 }, + iridescenceMap: { value: null }, + iridescenceMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + iridescenceIOR: { value: 1.3 }, + iridescenceThicknessMinimum: { value: 100 }, + iridescenceThicknessMaximum: { value: 400 }, + iridescenceThicknessMap: { value: null }, + iridescenceThicknessMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + sheen: { value: 0 }, + sheenColor: { value: /* @__PURE__ */ new Color(0) }, + sheenColorMap: { value: null }, + sheenColorMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + sheenRoughness: { value: 1 }, + sheenRoughnessMap: { value: null }, + sheenRoughnessMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + transmissionMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + transmissionSamplerSize: { value: /* @__PURE__ */ new Vector2() }, + transmissionSamplerMap: { value: null }, + thickness: { value: 0 }, + thicknessMap: { value: null }, + thicknessMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + attenuationDistance: { value: 0 }, + attenuationColor: { value: /* @__PURE__ */ new Color(0) }, + specularColor: { value: /* @__PURE__ */ new Color(1, 1, 1) }, + specularColorMap: { value: null }, + specularColorMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + specularIntensity: { value: 1 }, + specularIntensityMap: { value: null }, + specularIntensityMapTransform: { value: /* @__PURE__ */ new Matrix3() }, + anisotropyVector: { value: /* @__PURE__ */ new Vector2() }, + anisotropyMap: { value: null }, + anisotropyMapTransform: { value: /* @__PURE__ */ new Matrix3() } + } + ]), + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag +}; +const _rgb = { r: 0, b: 0, g: 0 }; +const _e1$1 = /* @__PURE__ */ new Euler(); +const _m1$1 = /* @__PURE__ */ new Matrix4(); +function WebGLBackground(renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha) { + const clearColor = new Color(0); + let clearAlpha = alpha === true ? 0 : 1; + let planeMesh; + let boxMesh; + let currentBackground = null; + let currentBackgroundVersion = 0; + let currentTonemapping = null; + function getBackground(scene) { + let background = scene.isScene === true ? scene.background : null; + if (background && background.isTexture) { + const usePMREM = scene.backgroundBlurriness > 0; + background = (usePMREM ? cubeuvmaps : cubemaps).get(background); + } + return background; + } + __name(getBackground, "getBackground"); + function render(scene) { + let forceClear = false; + const background = getBackground(scene); + if (background === null) { + setClear(clearColor, clearAlpha); + } else if (background && background.isColor) { + setClear(background, 1); + forceClear = true; + } + const environmentBlendMode = renderer.xr.getEnvironmentBlendMode(); + if (environmentBlendMode === "additive") { + state.buffers.color.setClear(0, 0, 0, 1, premultipliedAlpha); + } else if (environmentBlendMode === "alpha-blend") { + state.buffers.color.setClear(0, 0, 0, 0, premultipliedAlpha); + } + if (renderer.autoClear || forceClear) { + state.buffers.depth.setTest(true); + state.buffers.depth.setMask(true); + state.buffers.color.setMask(true); + renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); + } + } + __name(render, "render"); + function addToRenderList(renderList, scene) { + const background = getBackground(scene); + if (background && (background.isCubeTexture || background.mapping === CubeUVReflectionMapping)) { + if (boxMesh === void 0) { + boxMesh = new Mesh( + new BoxGeometry(1, 1, 1), + new ShaderMaterial({ + name: "BackgroundCubeMaterial", + uniforms: cloneUniforms(ShaderLib.backgroundCube.uniforms), + vertexShader: ShaderLib.backgroundCube.vertexShader, + fragmentShader: ShaderLib.backgroundCube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + }) + ); + boxMesh.geometry.deleteAttribute("normal"); + boxMesh.geometry.deleteAttribute("uv"); + boxMesh.onBeforeRender = function(renderer2, scene2, camera) { + this.matrixWorld.copyPosition(camera.matrixWorld); + }; + Object.defineProperty(boxMesh.material, "envMap", { + get: /* @__PURE__ */ __name(function() { + return this.uniforms.envMap.value; + }, "get") + }); + objects.update(boxMesh); + } + _e1$1.copy(scene.backgroundRotation); + _e1$1.x *= -1; + _e1$1.y *= -1; + _e1$1.z *= -1; + if (background.isCubeTexture && background.isRenderTargetTexture === false) { + _e1$1.y *= -1; + _e1$1.z *= -1; + } + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture && background.isRenderTargetTexture === false ? -1 : 1; + boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness; + boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; + boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4(_m1$1.makeRotationFromEuler(_e1$1)); + boxMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; + if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { + boxMesh.material.needsUpdate = true; + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + } + boxMesh.layers.enableAll(); + renderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null); + } else if (background && background.isTexture) { + if (planeMesh === void 0) { + planeMesh = new Mesh( + new PlaneGeometry(2, 2), + new ShaderMaterial({ + name: "BackgroundMaterial", + uniforms: cloneUniforms(ShaderLib.background.uniforms), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + }) + ); + planeMesh.geometry.deleteAttribute("normal"); + Object.defineProperty(planeMesh.material, "map", { + get: /* @__PURE__ */ __name(function() { + return this.uniforms.t2D.value; + }, "get") + }); + objects.update(planeMesh); + } + planeMesh.material.uniforms.t2D.value = background; + planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; + planeMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; + if (background.matrixAutoUpdate === true) { + background.updateMatrix(); + } + planeMesh.material.uniforms.uvTransform.value.copy(background.matrix); + if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { + planeMesh.material.needsUpdate = true; + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + } + planeMesh.layers.enableAll(); + renderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null); + } + } + __name(addToRenderList, "addToRenderList"); + function setClear(color, alpha2) { + color.getRGB(_rgb, getUnlitUniformColorSpace(renderer)); + state.buffers.color.setClear(_rgb.r, _rgb.g, _rgb.b, alpha2, premultipliedAlpha); + } + __name(setClear, "setClear"); + return { + getClearColor: /* @__PURE__ */ __name(function() { + return clearColor; + }, "getClearColor"), + setClearColor: /* @__PURE__ */ __name(function(color, alpha2 = 1) { + clearColor.set(color); + clearAlpha = alpha2; + setClear(clearColor, clearAlpha); + }, "setClearColor"), + getClearAlpha: /* @__PURE__ */ __name(function() { + return clearAlpha; + }, "getClearAlpha"), + setClearAlpha: /* @__PURE__ */ __name(function(alpha2) { + clearAlpha = alpha2; + setClear(clearColor, clearAlpha); + }, "setClearAlpha"), + render, + addToRenderList + }; +} +__name(WebGLBackground, "WebGLBackground"); +function WebGLBindingStates(gl, attributes) { + const maxVertexAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + const bindingStates = {}; + const defaultState = createBindingState(null); + let currentState = defaultState; + let forceUpdate = false; + function setup(object, material, program, geometry, index) { + let updateBuffers = false; + const state = getBindingState(geometry, program, material); + if (currentState !== state) { + currentState = state; + bindVertexArrayObject(currentState.object); + } + updateBuffers = needsUpdate(object, geometry, program, index); + if (updateBuffers) saveCache(object, geometry, program, index); + if (index !== null) { + attributes.update(index, gl.ELEMENT_ARRAY_BUFFER); + } + if (updateBuffers || forceUpdate) { + forceUpdate = false; + setupVertexAttributes(object, material, program, geometry); + if (index !== null) { + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, attributes.get(index).buffer); + } + } + } + __name(setup, "setup"); + function createVertexArrayObject() { + return gl.createVertexArray(); + } + __name(createVertexArrayObject, "createVertexArrayObject"); + function bindVertexArrayObject(vao) { + return gl.bindVertexArray(vao); + } + __name(bindVertexArrayObject, "bindVertexArrayObject"); + function deleteVertexArrayObject(vao) { + return gl.deleteVertexArray(vao); + } + __name(deleteVertexArrayObject, "deleteVertexArrayObject"); + function getBindingState(geometry, program, material) { + const wireframe = material.wireframe === true; + let programMap = bindingStates[geometry.id]; + if (programMap === void 0) { + programMap = {}; + bindingStates[geometry.id] = programMap; + } + let stateMap = programMap[program.id]; + if (stateMap === void 0) { + stateMap = {}; + programMap[program.id] = stateMap; + } + let state = stateMap[wireframe]; + if (state === void 0) { + state = createBindingState(createVertexArrayObject()); + stateMap[wireframe] = state; + } + return state; + } + __name(getBindingState, "getBindingState"); + function createBindingState(vao) { + const newAttributes = []; + const enabledAttributes = []; + const attributeDivisors = []; + for (let i = 0; i < maxVertexAttributes; i++) { + newAttributes[i] = 0; + enabledAttributes[i] = 0; + attributeDivisors[i] = 0; + } + return { + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + newAttributes, + enabledAttributes, + attributeDivisors, + object: vao, + attributes: {}, + index: null + }; + } + __name(createBindingState, "createBindingState"); + function needsUpdate(object, geometry, program, index) { + const cachedAttributes = currentState.attributes; + const geometryAttributes = geometry.attributes; + let attributesNum = 0; + const programAttributes = program.getAttributes(); + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + const cachedAttribute = cachedAttributes[name]; + let geometryAttribute = geometryAttributes[name]; + if (geometryAttribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; + } + if (cachedAttribute === void 0) return true; + if (cachedAttribute.attribute !== geometryAttribute) return true; + if (geometryAttribute && cachedAttribute.data !== geometryAttribute.data) return true; + attributesNum++; + } + } + if (currentState.attributesNum !== attributesNum) return true; + if (currentState.index !== index) return true; + return false; + } + __name(needsUpdate, "needsUpdate"); + function saveCache(object, geometry, program, index) { + const cache = {}; + const attributes2 = geometry.attributes; + let attributesNum = 0; + const programAttributes = program.getAttributes(); + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + let attribute = attributes2[name]; + if (attribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) attribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) attribute = object.instanceColor; + } + const data = {}; + data.attribute = attribute; + if (attribute && attribute.data) { + data.data = attribute.data; + } + cache[name] = data; + attributesNum++; + } + } + currentState.attributes = cache; + currentState.attributesNum = attributesNum; + currentState.index = index; + } + __name(saveCache, "saveCache"); + function initAttributes() { + const newAttributes = currentState.newAttributes; + for (let i = 0, il = newAttributes.length; i < il; i++) { + newAttributes[i] = 0; + } + } + __name(initAttributes, "initAttributes"); + function enableAttribute(attribute) { + enableAttributeAndDivisor(attribute, 0); + } + __name(enableAttribute, "enableAttribute"); + function enableAttributeAndDivisor(attribute, meshPerAttribute) { + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + const attributeDivisors = currentState.attributeDivisors; + newAttributes[attribute] = 1; + if (enabledAttributes[attribute] === 0) { + gl.enableVertexAttribArray(attribute); + enabledAttributes[attribute] = 1; + } + if (attributeDivisors[attribute] !== meshPerAttribute) { + gl.vertexAttribDivisor(attribute, meshPerAttribute); + attributeDivisors[attribute] = meshPerAttribute; + } + } + __name(enableAttributeAndDivisor, "enableAttributeAndDivisor"); + function disableUnusedAttributes() { + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + for (let i = 0, il = enabledAttributes.length; i < il; i++) { + if (enabledAttributes[i] !== newAttributes[i]) { + gl.disableVertexAttribArray(i); + enabledAttributes[i] = 0; + } + } + } + __name(disableUnusedAttributes, "disableUnusedAttributes"); + function vertexAttribPointer(index, size, type, normalized, stride, offset, integer) { + if (integer === true) { + gl.vertexAttribIPointer(index, size, type, stride, offset); + } else { + gl.vertexAttribPointer(index, size, type, normalized, stride, offset); + } + } + __name(vertexAttribPointer, "vertexAttribPointer"); + function setupVertexAttributes(object, material, program, geometry) { + initAttributes(); + const geometryAttributes = geometry.attributes; + const programAttributes = program.getAttributes(); + const materialDefaultAttributeValues = material.defaultAttributeValues; + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + let geometryAttribute = geometryAttributes[name]; + if (geometryAttribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; + } + if (geometryAttribute !== void 0) { + const normalized = geometryAttribute.normalized; + const size = geometryAttribute.itemSize; + const attribute = attributes.get(geometryAttribute); + if (attribute === void 0) continue; + const buffer = attribute.buffer; + const type = attribute.type; + const bytesPerElement = attribute.bytesPerElement; + const integer = type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType; + if (geometryAttribute.isInterleavedBufferAttribute) { + const data = geometryAttribute.data; + const stride = data.stride; + const offset = geometryAttribute.offset; + if (data.isInstancedInterleavedBuffer) { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttributeAndDivisor(programAttribute.location + i, data.meshPerAttribute); + } + if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + } + } else { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttribute(programAttribute.location + i); + } + } + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + for (let i = 0; i < programAttribute.locationSize; i++) { + vertexAttribPointer( + programAttribute.location + i, + size / programAttribute.locationSize, + type, + normalized, + stride * bytesPerElement, + (offset + size / programAttribute.locationSize * i) * bytesPerElement, + integer + ); + } + } else { + if (geometryAttribute.isInstancedBufferAttribute) { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttributeAndDivisor(programAttribute.location + i, geometryAttribute.meshPerAttribute); + } + if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + } + } else { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttribute(programAttribute.location + i); + } + } + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + for (let i = 0; i < programAttribute.locationSize; i++) { + vertexAttribPointer( + programAttribute.location + i, + size / programAttribute.locationSize, + type, + normalized, + size * bytesPerElement, + size / programAttribute.locationSize * i * bytesPerElement, + integer + ); + } + } + } else if (materialDefaultAttributeValues !== void 0) { + const value = materialDefaultAttributeValues[name]; + if (value !== void 0) { + switch (value.length) { + case 2: + gl.vertexAttrib2fv(programAttribute.location, value); + break; + case 3: + gl.vertexAttrib3fv(programAttribute.location, value); + break; + case 4: + gl.vertexAttrib4fv(programAttribute.location, value); + break; + default: + gl.vertexAttrib1fv(programAttribute.location, value); + } + } + } + } + } + disableUnusedAttributes(); + } + __name(setupVertexAttributes, "setupVertexAttributes"); + function dispose() { + reset(); + for (const geometryId in bindingStates) { + const programMap = bindingStates[geometryId]; + for (const programId in programMap) { + const stateMap = programMap[programId]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[programId]; + } + delete bindingStates[geometryId]; + } + } + __name(dispose, "dispose"); + function releaseStatesOfGeometry(geometry) { + if (bindingStates[geometry.id] === void 0) return; + const programMap = bindingStates[geometry.id]; + for (const programId in programMap) { + const stateMap = programMap[programId]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[programId]; + } + delete bindingStates[geometry.id]; + } + __name(releaseStatesOfGeometry, "releaseStatesOfGeometry"); + function releaseStatesOfProgram(program) { + for (const geometryId in bindingStates) { + const programMap = bindingStates[geometryId]; + if (programMap[program.id] === void 0) continue; + const stateMap = programMap[program.id]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[program.id]; + } + } + __name(releaseStatesOfProgram, "releaseStatesOfProgram"); + function reset() { + resetDefaultState(); + forceUpdate = true; + if (currentState === defaultState) return; + currentState = defaultState; + bindVertexArrayObject(currentState.object); + } + __name(reset, "reset"); + function resetDefaultState() { + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + } + __name(resetDefaultState, "resetDefaultState"); + return { + setup, + reset, + resetDefaultState, + dispose, + releaseStatesOfGeometry, + releaseStatesOfProgram, + initAttributes, + enableAttribute, + disableUnusedAttributes + }; +} +__name(WebGLBindingStates, "WebGLBindingStates"); +function WebGLBufferRenderer(gl, extensions, info) { + let mode; + function setMode(value) { + mode = value; + } + __name(setMode, "setMode"); + function render(start, count) { + gl.drawArrays(mode, start, count); + info.update(count, mode, 1); + } + __name(render, "render"); + function renderInstances(start, count, primcount) { + if (primcount === 0) return; + gl.drawArraysInstanced(mode, start, count, primcount); + info.update(count, mode, primcount); + } + __name(renderInstances, "renderInstances"); + function renderMultiDraw(starts, counts, drawCount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + extension.multiDrawArraysWEBGL(mode, starts, 0, counts, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + info.update(elementCount, mode, 1); + } + __name(renderMultiDraw, "renderMultiDraw"); + function renderMultiDrawInstances(starts, counts, drawCount, primcount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + if (extension === null) { + for (let i = 0; i < starts.length; i++) { + renderInstances(starts[i], counts[i], primcount[i]); + } + } else { + extension.multiDrawArraysInstancedWEBGL(mode, starts, 0, counts, 0, primcount, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i] * primcount[i]; + } + info.update(elementCount, mode, 1); + } + } + __name(renderMultiDrawInstances, "renderMultiDrawInstances"); + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + this.renderMultiDraw = renderMultiDraw; + this.renderMultiDrawInstances = renderMultiDrawInstances; +} +__name(WebGLBufferRenderer, "WebGLBufferRenderer"); +function WebGLCapabilities(gl, extensions, parameters, utils) { + let maxAnisotropy; + function getMaxAnisotropy() { + if (maxAnisotropy !== void 0) return maxAnisotropy; + if (extensions.has("EXT_texture_filter_anisotropic") === true) { + const extension = extensions.get("EXT_texture_filter_anisotropic"); + maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT); + } else { + maxAnisotropy = 0; + } + return maxAnisotropy; + } + __name(getMaxAnisotropy, "getMaxAnisotropy"); + function textureFormatReadable(textureFormat) { + if (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT)) { + return false; + } + return true; + } + __name(textureFormatReadable, "textureFormatReadable"); + function textureTypeReadable(textureType) { + const halfFloatSupportedByExt = textureType === HalfFloatType && (extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float")); + if (textureType !== UnsignedByteType && utils.convert(textureType) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE) && // Edge and Chrome Mac < 52 (#9513) + textureType !== FloatType && !halfFloatSupportedByExt) { + return false; + } + return true; + } + __name(textureTypeReadable, "textureTypeReadable"); + function getMaxPrecision(precision2) { + if (precision2 === "highp") { + if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0) { + return "highp"; + } + precision2 = "mediump"; + } + if (precision2 === "mediump") { + if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0) { + return "mediump"; + } + } + return "lowp"; + } + __name(getMaxPrecision, "getMaxPrecision"); + let precision = parameters.precision !== void 0 ? parameters.precision : "highp"; + const maxPrecision = getMaxPrecision(precision); + if (maxPrecision !== precision) { + console.warn("THREE.WebGLRenderer:", precision, "not supported, using", maxPrecision, "instead."); + precision = maxPrecision; + } + const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + const reverseDepthBuffer = parameters.reverseDepthBuffer === true && extensions.has("EXT_clip_control"); + const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); + const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); + const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS); + const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS); + const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); + const vertexTextures = maxVertexTextures > 0; + const maxSamples = gl.getParameter(gl.MAX_SAMPLES); + return { + isWebGL2: true, + // keeping this for backwards compatibility + getMaxAnisotropy, + getMaxPrecision, + textureFormatReadable, + textureTypeReadable, + precision, + logarithmicDepthBuffer, + reverseDepthBuffer, + maxTextures, + maxVertexTextures, + maxTextureSize, + maxCubemapSize, + maxAttributes, + maxVertexUniforms, + maxVaryings, + maxFragmentUniforms, + vertexTextures, + maxSamples + }; +} +__name(WebGLCapabilities, "WebGLCapabilities"); +function WebGLClipping(properties) { + const scope = this; + let globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false; + const plane = new Plane(), viewNormalMatrix = new Matrix3(), uniform = { value: null, needsUpdate: false }; + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + this.init = function(planes, enableLocalClipping) { + const enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || localClippingEnabled; + localClippingEnabled = enableLocalClipping; + numGlobalPlanes = planes.length; + return enabled; + }; + this.beginShadows = function() { + renderingShadows = true; + projectPlanes(null); + }; + this.endShadows = function() { + renderingShadows = false; + }; + this.setGlobalState = function(planes, camera) { + globalState = projectPlanes(planes, camera, 0); + }; + this.setState = function(material, camera, useCache) { + const planes = material.clippingPlanes, clipIntersection = material.clipIntersection, clipShadows = material.clipShadows; + const materialProperties = properties.get(material); + if (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) { + if (renderingShadows) { + projectPlanes(null); + } else { + resetGlobalState(); + } + } else { + const nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4; + let dstArray = materialProperties.clippingState || null; + uniform.value = dstArray; + dstArray = projectPlanes(planes, camera, lGlobal, useCache); + for (let i = 0; i !== lGlobal; ++i) { + dstArray[i] = globalState[i]; + } + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + } + }; + function resetGlobalState() { + if (uniform.value !== globalState) { + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + } + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + } + __name(resetGlobalState, "resetGlobalState"); + function projectPlanes(planes, camera, dstOffset, skipTransform) { + const nPlanes = planes !== null ? planes.length : 0; + let dstArray = null; + if (nPlanes !== 0) { + dstArray = uniform.value; + if (skipTransform !== true || dstArray === null) { + const flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse; + viewNormalMatrix.getNormalMatrix(viewMatrix); + if (dstArray === null || dstArray.length < flatSize) { + dstArray = new Float32Array(flatSize); + } + for (let i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) { + plane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix); + plane.normal.toArray(dstArray, i4); + dstArray[i4 + 3] = plane.constant; + } + } + uniform.value = dstArray; + uniform.needsUpdate = true; + } + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + return dstArray; + } + __name(projectPlanes, "projectPlanes"); +} +__name(WebGLClipping, "WebGLClipping"); +function WebGLCubeMaps(renderer) { + let cubemaps = /* @__PURE__ */ new WeakMap(); + function mapTextureMapping(texture, mapping) { + if (mapping === EquirectangularReflectionMapping) { + texture.mapping = CubeReflectionMapping; + } else if (mapping === EquirectangularRefractionMapping) { + texture.mapping = CubeRefractionMapping; + } + return texture; + } + __name(mapTextureMapping, "mapTextureMapping"); + function get(texture) { + if (texture && texture.isTexture) { + const mapping = texture.mapping; + if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) { + if (cubemaps.has(texture)) { + const cubemap = cubemaps.get(texture).texture; + return mapTextureMapping(cubemap, texture.mapping); + } else { + const image = texture.image; + if (image && image.height > 0) { + const renderTarget = new WebGLCubeRenderTarget(image.height); + renderTarget.fromEquirectangularTexture(renderer, texture); + cubemaps.set(texture, renderTarget); + texture.addEventListener("dispose", onTextureDispose); + return mapTextureMapping(renderTarget.texture, texture.mapping); + } else { + return null; + } + } + } + } + return texture; + } + __name(get, "get"); + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + const cubemap = cubemaps.get(texture); + if (cubemap !== void 0) { + cubemaps.delete(texture); + cubemap.dispose(); + } + } + __name(onTextureDispose, "onTextureDispose"); + function dispose() { + cubemaps = /* @__PURE__ */ new WeakMap(); + } + __name(dispose, "dispose"); + return { + get, + dispose + }; +} +__name(WebGLCubeMaps, "WebGLCubeMaps"); +class OrthographicCamera extends Camera { + static { + __name(this, "OrthographicCamera"); + } + constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2e3) { + super(); + this.isOrthographicCamera = true; + this.type = "OrthographicCamera"; + this.zoom = 1; + this.view = null; + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + this.near = near; + this.far = far; + this.updateProjectionMatrix(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign({}, source.view); + return this; + } + setViewOffset(fullWidth, fullHeight, x, y, width, height) { + if (this.view === null) { + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + } + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + this.updateProjectionMatrix(); + } + clearViewOffset() { + if (this.view !== null) { + this.view.enabled = false; + } + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const dx = (this.right - this.left) / (2 * this.zoom); + const dy = (this.top - this.bottom) / (2 * this.zoom); + const cx = (this.right + this.left) / 2; + const cy = (this.top + this.bottom) / 2; + let left = cx - dx; + let right = cx + dx; + let top = cy + dy; + let bottom = cy - dy; + if (this.view !== null && this.view.enabled) { + const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom; + const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + } + this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far, this.coordinateSystem); + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + if (this.view !== null) data.object.view = Object.assign({}, this.view); + return data; + } +} +const LOD_MIN = 4; +const EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582]; +const MAX_SAMPLES = 20; +const _flatCamera = /* @__PURE__ */ new OrthographicCamera(); +const _clearColor = /* @__PURE__ */ new Color(); +let _oldTarget = null; +let _oldActiveCubeFace = 0; +let _oldActiveMipmapLevel = 0; +let _oldXrEnabled = false; +const PHI = (1 + Math.sqrt(5)) / 2; +const INV_PHI = 1 / PHI; +const _axisDirections = [ + /* @__PURE__ */ new Vector3(-PHI, INV_PHI, 0), + /* @__PURE__ */ new Vector3(PHI, INV_PHI, 0), + /* @__PURE__ */ new Vector3(-INV_PHI, 0, PHI), + /* @__PURE__ */ new Vector3(INV_PHI, 0, PHI), + /* @__PURE__ */ new Vector3(0, PHI, -INV_PHI), + /* @__PURE__ */ new Vector3(0, PHI, INV_PHI), + /* @__PURE__ */ new Vector3(-1, 1, -1), + /* @__PURE__ */ new Vector3(1, 1, -1), + /* @__PURE__ */ new Vector3(-1, 1, 1), + /* @__PURE__ */ new Vector3(1, 1, 1) +]; +class PMREMGenerator { + static { + __name(this, "PMREMGenerator"); + } + constructor(renderer) { + this._renderer = renderer; + this._pingPongRenderTarget = null; + this._lodMax = 0; + this._cubeSize = 0; + this._lodPlanes = []; + this._sizeLods = []; + this._sigmas = []; + this._blurMaterial = null; + this._cubemapMaterial = null; + this._equirectMaterial = null; + this._compileMaterial(this._blurMaterial); + } + /** + * Generates a PMREM from a supplied Scene, which can be faster than using an + * image if networking bandwidth is low. Optional sigma specifies a blur radius + * in radians to be applied to the scene before PMREM generation. Optional near + * and far planes ensure the scene is rendered in its entirety (the cubeCamera + * is placed at the origin). + */ + fromScene(scene, sigma = 0, near = 0.1, far = 100) { + _oldTarget = this._renderer.getRenderTarget(); + _oldActiveCubeFace = this._renderer.getActiveCubeFace(); + _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); + _oldXrEnabled = this._renderer.xr.enabled; + this._renderer.xr.enabled = false; + this._setSize(256); + const cubeUVRenderTarget = this._allocateTargets(); + cubeUVRenderTarget.depthBuffer = true; + this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget); + if (sigma > 0) { + this._blur(cubeUVRenderTarget, 0, 0, sigma); + } + this._applyPMREM(cubeUVRenderTarget); + this._cleanup(cubeUVRenderTarget); + return cubeUVRenderTarget; + } + /** + * Generates a PMREM from an equirectangular texture, which can be either LDR + * or HDR. The ideal input image size is 1k (1024 x 512), + * as this matches best with the 256 x 256 cubemap output. + * The smallest supported equirectangular image size is 64 x 32. + */ + fromEquirectangular(equirectangular, renderTarget = null) { + return this._fromTexture(equirectangular, renderTarget); + } + /** + * Generates a PMREM from an cubemap texture, which can be either LDR + * or HDR. The ideal input cube size is 256 x 256, + * as this matches best with the 256 x 256 cubemap output. + * The smallest supported cube size is 16 x 16. + */ + fromCubemap(cubemap, renderTarget = null) { + return this._fromTexture(cubemap, renderTarget); + } + /** + * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileCubemapShader() { + if (this._cubemapMaterial === null) { + this._cubemapMaterial = _getCubemapMaterial(); + this._compileMaterial(this._cubemapMaterial); + } + } + /** + * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileEquirectangularShader() { + if (this._equirectMaterial === null) { + this._equirectMaterial = _getEquirectMaterial(); + this._compileMaterial(this._equirectMaterial); + } + } + /** + * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, + * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on + * one of them will cause any others to also become unusable. + */ + dispose() { + this._dispose(); + if (this._cubemapMaterial !== null) this._cubemapMaterial.dispose(); + if (this._equirectMaterial !== null) this._equirectMaterial.dispose(); + } + // private interface + _setSize(cubeSize) { + this._lodMax = Math.floor(Math.log2(cubeSize)); + this._cubeSize = Math.pow(2, this._lodMax); + } + _dispose() { + if (this._blurMaterial !== null) this._blurMaterial.dispose(); + if (this._pingPongRenderTarget !== null) this._pingPongRenderTarget.dispose(); + for (let i = 0; i < this._lodPlanes.length; i++) { + this._lodPlanes[i].dispose(); + } + } + _cleanup(outputTarget) { + this._renderer.setRenderTarget(_oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel); + this._renderer.xr.enabled = _oldXrEnabled; + outputTarget.scissorTest = false; + _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height); + } + _fromTexture(texture, renderTarget) { + if (texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping) { + this._setSize(texture.image.length === 0 ? 16 : texture.image[0].width || texture.image[0].image.width); + } else { + this._setSize(texture.image.width / 4); + } + _oldTarget = this._renderer.getRenderTarget(); + _oldActiveCubeFace = this._renderer.getActiveCubeFace(); + _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); + _oldXrEnabled = this._renderer.xr.enabled; + this._renderer.xr.enabled = false; + const cubeUVRenderTarget = renderTarget || this._allocateTargets(); + this._textureToCubeUV(texture, cubeUVRenderTarget); + this._applyPMREM(cubeUVRenderTarget); + this._cleanup(cubeUVRenderTarget); + return cubeUVRenderTarget; + } + _allocateTargets() { + const width = 3 * Math.max(this._cubeSize, 16 * 7); + const height = 4 * this._cubeSize; + const params = { + magFilter: LinearFilter, + minFilter: LinearFilter, + generateMipmaps: false, + type: HalfFloatType, + format: RGBAFormat, + colorSpace: LinearSRGBColorSpace, + depthBuffer: false + }; + const cubeUVRenderTarget = _createRenderTarget(width, height, params); + if (this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height) { + if (this._pingPongRenderTarget !== null) { + this._dispose(); + } + this._pingPongRenderTarget = _createRenderTarget(width, height, params); + const { _lodMax } = this; + ({ sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes(_lodMax)); + this._blurMaterial = _getBlurShader(_lodMax, width, height); + } + return cubeUVRenderTarget; + } + _compileMaterial(material) { + const tmpMesh = new Mesh(this._lodPlanes[0], material); + this._renderer.compile(tmpMesh, _flatCamera); + } + _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) { + const fov2 = 90; + const aspect2 = 1; + const cubeCamera = new PerspectiveCamera(fov2, aspect2, near, far); + const upSign = [1, -1, 1, 1, 1, 1]; + const forwardSign = [1, 1, 1, -1, -1, -1]; + const renderer = this._renderer; + const originalAutoClear = renderer.autoClear; + const toneMapping = renderer.toneMapping; + renderer.getClearColor(_clearColor); + renderer.toneMapping = NoToneMapping; + renderer.autoClear = false; + const backgroundMaterial = new MeshBasicMaterial({ + name: "PMREM.Background", + side: BackSide, + depthWrite: false, + depthTest: false + }); + const backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial); + let useSolidColor = false; + const background = scene.background; + if (background) { + if (background.isColor) { + backgroundMaterial.color.copy(background); + scene.background = null; + useSolidColor = true; + } + } else { + backgroundMaterial.color.copy(_clearColor); + useSolidColor = true; + } + for (let i = 0; i < 6; i++) { + const col = i % 3; + if (col === 0) { + cubeCamera.up.set(0, upSign[i], 0); + cubeCamera.lookAt(forwardSign[i], 0, 0); + } else if (col === 1) { + cubeCamera.up.set(0, 0, upSign[i]); + cubeCamera.lookAt(0, forwardSign[i], 0); + } else { + cubeCamera.up.set(0, upSign[i], 0); + cubeCamera.lookAt(0, 0, forwardSign[i]); + } + const size = this._cubeSize; + _setViewport(cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size); + renderer.setRenderTarget(cubeUVRenderTarget); + if (useSolidColor) { + renderer.render(backgroundBox, cubeCamera); + } + renderer.render(scene, cubeCamera); + } + backgroundBox.geometry.dispose(); + backgroundBox.material.dispose(); + renderer.toneMapping = toneMapping; + renderer.autoClear = originalAutoClear; + scene.background = background; + } + _textureToCubeUV(texture, cubeUVRenderTarget) { + const renderer = this._renderer; + const isCubeTexture = texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping; + if (isCubeTexture) { + if (this._cubemapMaterial === null) { + this._cubemapMaterial = _getCubemapMaterial(); + } + this._cubemapMaterial.uniforms.flipEnvMap.value = texture.isRenderTargetTexture === false ? -1 : 1; + } else { + if (this._equirectMaterial === null) { + this._equirectMaterial = _getEquirectMaterial(); + } + } + const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; + const mesh = new Mesh(this._lodPlanes[0], material); + const uniforms = material.uniforms; + uniforms["envMap"].value = texture; + const size = this._cubeSize; + _setViewport(cubeUVRenderTarget, 0, 0, 3 * size, 2 * size); + renderer.setRenderTarget(cubeUVRenderTarget); + renderer.render(mesh, _flatCamera); + } + _applyPMREM(cubeUVRenderTarget) { + const renderer = this._renderer; + const autoClear = renderer.autoClear; + renderer.autoClear = false; + const n = this._lodPlanes.length; + for (let i = 1; i < n; i++) { + const sigma = Math.sqrt(this._sigmas[i] * this._sigmas[i] - this._sigmas[i - 1] * this._sigmas[i - 1]); + const poleAxis = _axisDirections[(n - i - 1) % _axisDirections.length]; + this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis); + } + renderer.autoClear = autoClear; + } + /** + * This is a two-pass Gaussian blur for a cubemap. Normally this is done + * vertically and horizontally, but this breaks down on a cube. Here we apply + * the blur latitudinally (around the poles), and then longitudinally (towards + * the poles) to approximate the orthogonally-separable blur. It is least + * accurate at the poles, but still does a decent job. + */ + _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) { + const pingPongRenderTarget = this._pingPongRenderTarget; + this._halfBlur( + cubeUVRenderTarget, + pingPongRenderTarget, + lodIn, + lodOut, + sigma, + "latitudinal", + poleAxis + ); + this._halfBlur( + pingPongRenderTarget, + cubeUVRenderTarget, + lodOut, + lodOut, + sigma, + "longitudinal", + poleAxis + ); + } + _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) { + const renderer = this._renderer; + const blurMaterial = this._blurMaterial; + if (direction !== "latitudinal" && direction !== "longitudinal") { + console.error( + "blur direction must be either latitudinal or longitudinal!" + ); + } + const STANDARD_DEVIATIONS = 3; + const blurMesh = new Mesh(this._lodPlanes[lodOut], blurMaterial); + const blurUniforms = blurMaterial.uniforms; + const pixels = this._sizeLods[lodIn] - 1; + const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1); + const sigmaPixels = sigmaRadians / radiansPerPixel; + const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES; + if (samples > MAX_SAMPLES) { + console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`); + } + const weights = []; + let sum = 0; + for (let i = 0; i < MAX_SAMPLES; ++i) { + const x2 = i / sigmaPixels; + const weight = Math.exp(-x2 * x2 / 2); + weights.push(weight); + if (i === 0) { + sum += weight; + } else if (i < samples) { + sum += 2 * weight; + } + } + for (let i = 0; i < weights.length; i++) { + weights[i] = weights[i] / sum; + } + blurUniforms["envMap"].value = targetIn.texture; + blurUniforms["samples"].value = samples; + blurUniforms["weights"].value = weights; + blurUniforms["latitudinal"].value = direction === "latitudinal"; + if (poleAxis) { + blurUniforms["poleAxis"].value = poleAxis; + } + const { _lodMax } = this; + blurUniforms["dTheta"].value = radiansPerPixel; + blurUniforms["mipInt"].value = _lodMax - lodIn; + const outputSize = this._sizeLods[lodOut]; + const x = 3 * outputSize * (lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0); + const y = 4 * (this._cubeSize - outputSize); + _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize); + renderer.setRenderTarget(targetOut); + renderer.render(blurMesh, _flatCamera); + } +} +function _createPlanes(lodMax) { + const lodPlanes = []; + const sizeLods = []; + const sigmas = []; + let lod = lodMax; + const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; + for (let i = 0; i < totalLods; i++) { + const sizeLod = Math.pow(2, lod); + sizeLods.push(sizeLod); + let sigma = 1 / sizeLod; + if (i > lodMax - LOD_MIN) { + sigma = EXTRA_LOD_SIGMA[i - lodMax + LOD_MIN - 1]; + } else if (i === 0) { + sigma = 0; + } + sigmas.push(sigma); + const texelSize = 1 / (sizeLod - 2); + const min = -texelSize; + const max2 = 1 + texelSize; + const uv1 = [min, min, max2, min, max2, max2, min, min, max2, max2, min, max2]; + const cubeFaces = 6; + const vertices = 6; + const positionSize = 3; + const uvSize = 2; + const faceIndexSize = 1; + const position = new Float32Array(positionSize * vertices * cubeFaces); + const uv = new Float32Array(uvSize * vertices * cubeFaces); + const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces); + for (let face = 0; face < cubeFaces; face++) { + const x = face % 3 * 2 / 3 - 1; + const y = face > 2 ? 0 : -1; + const coordinates = [ + x, + y, + 0, + x + 2 / 3, + y, + 0, + x + 2 / 3, + y + 1, + 0, + x, + y, + 0, + x + 2 / 3, + y + 1, + 0, + x, + y + 1, + 0 + ]; + position.set(coordinates, positionSize * vertices * face); + uv.set(uv1, uvSize * vertices * face); + const fill2 = [face, face, face, face, face, face]; + faceIndex.set(fill2, faceIndexSize * vertices * face); + } + const planes = new BufferGeometry(); + planes.setAttribute("position", new BufferAttribute(position, positionSize)); + planes.setAttribute("uv", new BufferAttribute(uv, uvSize)); + planes.setAttribute("faceIndex", new BufferAttribute(faceIndex, faceIndexSize)); + lodPlanes.push(planes); + if (lod > LOD_MIN) { + lod--; + } + } + return { lodPlanes, sizeLods, sigmas }; +} +__name(_createPlanes, "_createPlanes"); +function _createRenderTarget(width, height, params) { + const cubeUVRenderTarget = new WebGLRenderTarget(width, height, params); + cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; + cubeUVRenderTarget.texture.name = "PMREM.cubeUv"; + cubeUVRenderTarget.scissorTest = true; + return cubeUVRenderTarget; +} +__name(_createRenderTarget, "_createRenderTarget"); +function _setViewport(target, x, y, width, height) { + target.viewport.set(x, y, width, height); + target.scissor.set(x, y, width, height); +} +__name(_setViewport, "_setViewport"); +function _getBlurShader(lodMax, width, height) { + const weights = new Float32Array(MAX_SAMPLES); + const poleAxis = new Vector3(0, 1, 0); + const shaderMaterial = new ShaderMaterial({ + name: "SphericalGaussianBlur", + defines: { + "n": MAX_SAMPLES, + "CUBEUV_TEXEL_WIDTH": 1 / width, + "CUBEUV_TEXEL_HEIGHT": 1 / height, + "CUBEUV_MAX_MIP": `${lodMax}.0` + }, + uniforms: { + "envMap": { value: null }, + "samples": { value: 1 }, + "weights": { value: weights }, + "latitudinal": { value: false }, + "dTheta": { value: 0 }, + "mipInt": { value: 0 }, + "poleAxis": { value: poleAxis } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform int samples; + uniform float weights[ n ]; + uniform bool latitudinal; + uniform float dTheta; + uniform float mipInt; + uniform vec3 poleAxis; + + #define ENVMAP_TYPE_CUBE_UV + #include + + vec3 getSample( float theta, vec3 axis ) { + + float cosTheta = cos( theta ); + // Rodrigues' axis-angle rotation + vec3 sampleDirection = vOutputDirection * cosTheta + + cross( axis, vOutputDirection ) * sin( theta ) + + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); + + return bilinearCubeUV( envMap, sampleDirection, mipInt ); + + } + + void main() { + + vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); + + if ( all( equal( axis, vec3( 0.0 ) ) ) ) { + + axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); + + } + + axis = normalize( axis ); + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); + + for ( int i = 1; i < n; i++ ) { + + if ( i >= samples ) { + + break; + + } + + float theta = dTheta * float( i ); + gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); + gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); + + } + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); + return shaderMaterial; +} +__name(_getBlurShader, "_getBlurShader"); +function _getEquirectMaterial() { + return new ShaderMaterial({ + name: "EquirectangularToCubeUV", + uniforms: { + "envMap": { value: null } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + + #include + + void main() { + + vec3 outputDirection = normalize( vOutputDirection ); + vec2 uv = equirectUv( outputDirection ); + + gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); +} +__name(_getEquirectMaterial, "_getEquirectMaterial"); +function _getCubemapMaterial() { + return new ShaderMaterial({ + name: "CubemapToCubeUV", + uniforms: { + "envMap": { value: null }, + "flipEnvMap": { value: -1 } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + uniform float flipEnvMap; + + varying vec3 vOutputDirection; + + uniform samplerCube envMap; + + void main() { + + gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); +} +__name(_getCubemapMaterial, "_getCubemapMaterial"); +function _getCommonVertexShader() { + return ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + attribute float faceIndex; + + varying vec3 vOutputDirection; + + // RH coordinate system; PMREM face-indexing convention + vec3 getDirection( vec2 uv, float face ) { + + uv = 2.0 * uv - 1.0; + + vec3 direction = vec3( uv, 1.0 ); + + if ( face == 0.0 ) { + + direction = direction.zyx; // ( 1, v, u ) pos x + + } else if ( face == 1.0 ) { + + direction = direction.xzy; + direction.xz *= -1.0; // ( -u, 1, -v ) pos y + + } else if ( face == 2.0 ) { + + direction.x *= -1.0; // ( -u, v, 1 ) pos z + + } else if ( face == 3.0 ) { + + direction = direction.zyx; + direction.xz *= -1.0; // ( -1, v, -u ) neg x + + } else if ( face == 4.0 ) { + + direction = direction.xzy; + direction.xy *= -1.0; // ( -u, -1, v ) neg y + + } else if ( face == 5.0 ) { + + direction.z *= -1.0; // ( u, v, -1 ) neg z + + } + + return direction; + + } + + void main() { + + vOutputDirection = getDirection( uv, faceIndex ); + gl_Position = vec4( position, 1.0 ); + + } + ` + ); +} +__name(_getCommonVertexShader, "_getCommonVertexShader"); +function WebGLCubeUVMaps(renderer) { + let cubeUVmaps = /* @__PURE__ */ new WeakMap(); + let pmremGenerator = null; + function get(texture) { + if (texture && texture.isTexture) { + const mapping = texture.mapping; + const isEquirectMap = mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping; + const isCubeMap = mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; + if (isEquirectMap || isCubeMap) { + let renderTarget = cubeUVmaps.get(texture); + const currentPMREMVersion = renderTarget !== void 0 ? renderTarget.texture.pmremVersion : 0; + if (texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion) { + if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); + renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture, renderTarget) : pmremGenerator.fromCubemap(texture, renderTarget); + renderTarget.texture.pmremVersion = texture.pmremVersion; + cubeUVmaps.set(texture, renderTarget); + return renderTarget.texture; + } else { + if (renderTarget !== void 0) { + return renderTarget.texture; + } else { + const image = texture.image; + if (isEquirectMap && image && image.height > 0 || isCubeMap && image && isCubeTextureComplete(image)) { + if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); + renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture) : pmremGenerator.fromCubemap(texture); + renderTarget.texture.pmremVersion = texture.pmremVersion; + cubeUVmaps.set(texture, renderTarget); + texture.addEventListener("dispose", onTextureDispose); + return renderTarget.texture; + } else { + return null; + } + } + } + } + } + return texture; + } + __name(get, "get"); + function isCubeTextureComplete(image) { + let count = 0; + const length = 6; + for (let i = 0; i < length; i++) { + if (image[i] !== void 0) count++; + } + return count === length; + } + __name(isCubeTextureComplete, "isCubeTextureComplete"); + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + const cubemapUV = cubeUVmaps.get(texture); + if (cubemapUV !== void 0) { + cubeUVmaps.delete(texture); + cubemapUV.dispose(); + } + } + __name(onTextureDispose, "onTextureDispose"); + function dispose() { + cubeUVmaps = /* @__PURE__ */ new WeakMap(); + if (pmremGenerator !== null) { + pmremGenerator.dispose(); + pmremGenerator = null; + } + } + __name(dispose, "dispose"); + return { + get, + dispose + }; +} +__name(WebGLCubeUVMaps, "WebGLCubeUVMaps"); +function WebGLExtensions(gl) { + const extensions = {}; + function getExtension(name) { + if (extensions[name] !== void 0) { + return extensions[name]; + } + let extension; + switch (name) { + case "WEBGL_depth_texture": + extension = gl.getExtension("WEBGL_depth_texture") || gl.getExtension("MOZ_WEBGL_depth_texture") || gl.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + extension = gl.getExtension("EXT_texture_filter_anisotropic") || gl.getExtension("MOZ_EXT_texture_filter_anisotropic") || gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + extension = gl.getExtension("WEBGL_compressed_texture_s3tc") || gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + extension = gl.getExtension("WEBGL_compressed_texture_pvrtc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + extension = gl.getExtension(name); + } + extensions[name] = extension; + return extension; + } + __name(getExtension, "getExtension"); + return { + has: /* @__PURE__ */ __name(function(name) { + return getExtension(name) !== null; + }, "has"), + init: /* @__PURE__ */ __name(function() { + getExtension("EXT_color_buffer_float"); + getExtension("WEBGL_clip_cull_distance"); + getExtension("OES_texture_float_linear"); + getExtension("EXT_color_buffer_half_float"); + getExtension("WEBGL_multisampled_render_to_texture"); + getExtension("WEBGL_render_shared_exponent"); + }, "init"), + get: /* @__PURE__ */ __name(function(name) { + const extension = getExtension(name); + if (extension === null) { + warnOnce("THREE.WebGLRenderer: " + name + " extension not supported."); + } + return extension; + }, "get") + }; +} +__name(WebGLExtensions, "WebGLExtensions"); +function WebGLGeometries(gl, attributes, info, bindingStates) { + const geometries = {}; + const wireframeAttributes = /* @__PURE__ */ new WeakMap(); + function onGeometryDispose(event) { + const geometry = event.target; + if (geometry.index !== null) { + attributes.remove(geometry.index); + } + for (const name in geometry.attributes) { + attributes.remove(geometry.attributes[name]); + } + for (const name in geometry.morphAttributes) { + const array = geometry.morphAttributes[name]; + for (let i = 0, l = array.length; i < l; i++) { + attributes.remove(array[i]); + } + } + geometry.removeEventListener("dispose", onGeometryDispose); + delete geometries[geometry.id]; + const attribute = wireframeAttributes.get(geometry); + if (attribute) { + attributes.remove(attribute); + wireframeAttributes.delete(geometry); + } + bindingStates.releaseStatesOfGeometry(geometry); + if (geometry.isInstancedBufferGeometry === true) { + delete geometry._maxInstanceCount; + } + info.memory.geometries--; + } + __name(onGeometryDispose, "onGeometryDispose"); + function get(object, geometry) { + if (geometries[geometry.id] === true) return geometry; + geometry.addEventListener("dispose", onGeometryDispose); + geometries[geometry.id] = true; + info.memory.geometries++; + return geometry; + } + __name(get, "get"); + function update(geometry) { + const geometryAttributes = geometry.attributes; + for (const name in geometryAttributes) { + attributes.update(geometryAttributes[name], gl.ARRAY_BUFFER); + } + const morphAttributes = geometry.morphAttributes; + for (const name in morphAttributes) { + const array = morphAttributes[name]; + for (let i = 0, l = array.length; i < l; i++) { + attributes.update(array[i], gl.ARRAY_BUFFER); + } + } + } + __name(update, "update"); + function updateWireframeAttribute(geometry) { + const indices = []; + const geometryIndex = geometry.index; + const geometryPosition = geometry.attributes.position; + let version = 0; + if (geometryIndex !== null) { + const array = geometryIndex.array; + version = geometryIndex.version; + for (let i = 0, l = array.length; i < l; i += 3) { + const a = array[i + 0]; + const b = array[i + 1]; + const c = array[i + 2]; + indices.push(a, b, b, c, c, a); + } + } else if (geometryPosition !== void 0) { + const array = geometryPosition.array; + version = geometryPosition.version; + for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) { + const a = i + 0; + const b = i + 1; + const c = i + 2; + indices.push(a, b, b, c, c, a); + } + } else { + return; + } + const attribute = new (arrayNeedsUint32(indices) ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1); + attribute.version = version; + const previousAttribute = wireframeAttributes.get(geometry); + if (previousAttribute) attributes.remove(previousAttribute); + wireframeAttributes.set(geometry, attribute); + } + __name(updateWireframeAttribute, "updateWireframeAttribute"); + function getWireframeAttribute(geometry) { + const currentAttribute = wireframeAttributes.get(geometry); + if (currentAttribute) { + const geometryIndex = geometry.index; + if (geometryIndex !== null) { + if (currentAttribute.version < geometryIndex.version) { + updateWireframeAttribute(geometry); + } + } + } else { + updateWireframeAttribute(geometry); + } + return wireframeAttributes.get(geometry); + } + __name(getWireframeAttribute, "getWireframeAttribute"); + return { + get, + update, + getWireframeAttribute + }; +} +__name(WebGLGeometries, "WebGLGeometries"); +function WebGLIndexedBufferRenderer(gl, extensions, info) { + let mode; + function setMode(value) { + mode = value; + } + __name(setMode, "setMode"); + let type, bytesPerElement; + function setIndex(value) { + type = value.type; + bytesPerElement = value.bytesPerElement; + } + __name(setIndex, "setIndex"); + function render(start, count) { + gl.drawElements(mode, count, type, start * bytesPerElement); + info.update(count, mode, 1); + } + __name(render, "render"); + function renderInstances(start, count, primcount) { + if (primcount === 0) return; + gl.drawElementsInstanced(mode, count, type, start * bytesPerElement, primcount); + info.update(count, mode, primcount); + } + __name(renderInstances, "renderInstances"); + function renderMultiDraw(starts, counts, drawCount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + extension.multiDrawElementsWEBGL(mode, counts, 0, type, starts, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + info.update(elementCount, mode, 1); + } + __name(renderMultiDraw, "renderMultiDraw"); + function renderMultiDrawInstances(starts, counts, drawCount, primcount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + if (extension === null) { + for (let i = 0; i < starts.length; i++) { + renderInstances(starts[i] / bytesPerElement, counts[i], primcount[i]); + } + } else { + extension.multiDrawElementsInstancedWEBGL(mode, counts, 0, type, starts, 0, primcount, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i] * primcount[i]; + } + info.update(elementCount, mode, 1); + } + } + __name(renderMultiDrawInstances, "renderMultiDrawInstances"); + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + this.renderMultiDraw = renderMultiDraw; + this.renderMultiDrawInstances = renderMultiDrawInstances; +} +__name(WebGLIndexedBufferRenderer, "WebGLIndexedBufferRenderer"); +function WebGLInfo(gl) { + const memory = { + geometries: 0, + textures: 0 + }; + const render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + function update(count, mode, instanceCount) { + render.calls++; + switch (mode) { + case gl.TRIANGLES: + render.triangles += instanceCount * (count / 3); + break; + case gl.LINES: + render.lines += instanceCount * (count / 2); + break; + case gl.LINE_STRIP: + render.lines += instanceCount * (count - 1); + break; + case gl.LINE_LOOP: + render.lines += instanceCount * count; + break; + case gl.POINTS: + render.points += instanceCount * count; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", mode); + break; + } + } + __name(update, "update"); + function reset() { + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + } + __name(reset, "reset"); + return { + memory, + render, + programs: null, + autoReset: true, + reset, + update + }; +} +__name(WebGLInfo, "WebGLInfo"); +function WebGLMorphtargets(gl, capabilities, textures) { + const morphTextures = /* @__PURE__ */ new WeakMap(); + const morph = new Vector4(); + function update(object, geometry, program) { + const objectInfluences = object.morphTargetInfluences; + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + let entry = morphTextures.get(geometry); + if (entry === void 0 || entry.count !== morphTargetsCount) { + let disposeTexture = function() { + texture.dispose(); + morphTextures.delete(geometry); + geometry.removeEventListener("dispose", disposeTexture); + }; + __name(disposeTexture, "disposeTexture"); + if (entry !== void 0) entry.texture.dispose(); + const hasMorphPosition = geometry.morphAttributes.position !== void 0; + const hasMorphNormals = geometry.morphAttributes.normal !== void 0; + const hasMorphColors = geometry.morphAttributes.color !== void 0; + const morphTargets = geometry.morphAttributes.position || []; + const morphNormals = geometry.morphAttributes.normal || []; + const morphColors = geometry.morphAttributes.color || []; + let vertexDataCount = 0; + if (hasMorphPosition === true) vertexDataCount = 1; + if (hasMorphNormals === true) vertexDataCount = 2; + if (hasMorphColors === true) vertexDataCount = 3; + let width = geometry.attributes.position.count * vertexDataCount; + let height = 1; + if (width > capabilities.maxTextureSize) { + height = Math.ceil(width / capabilities.maxTextureSize); + width = capabilities.maxTextureSize; + } + const buffer = new Float32Array(width * height * 4 * morphTargetsCount); + const texture = new DataArrayTexture(buffer, width, height, morphTargetsCount); + texture.type = FloatType; + texture.needsUpdate = true; + const vertexDataStride = vertexDataCount * 4; + for (let i = 0; i < morphTargetsCount; i++) { + const morphTarget = morphTargets[i]; + const morphNormal = morphNormals[i]; + const morphColor = morphColors[i]; + const offset = width * height * 4 * i; + for (let j = 0; j < morphTarget.count; j++) { + const stride = j * vertexDataStride; + if (hasMorphPosition === true) { + morph.fromBufferAttribute(morphTarget, j); + buffer[offset + stride + 0] = morph.x; + buffer[offset + stride + 1] = morph.y; + buffer[offset + stride + 2] = morph.z; + buffer[offset + stride + 3] = 0; + } + if (hasMorphNormals === true) { + morph.fromBufferAttribute(morphNormal, j); + buffer[offset + stride + 4] = morph.x; + buffer[offset + stride + 5] = morph.y; + buffer[offset + stride + 6] = morph.z; + buffer[offset + stride + 7] = 0; + } + if (hasMorphColors === true) { + morph.fromBufferAttribute(morphColor, j); + buffer[offset + stride + 8] = morph.x; + buffer[offset + stride + 9] = morph.y; + buffer[offset + stride + 10] = morph.z; + buffer[offset + stride + 11] = morphColor.itemSize === 4 ? morph.w : 1; + } + } + } + entry = { + count: morphTargetsCount, + texture, + size: new Vector2(width, height) + }; + morphTextures.set(geometry, entry); + geometry.addEventListener("dispose", disposeTexture); + } + if (object.isInstancedMesh === true && object.morphTexture !== null) { + program.getUniforms().setValue(gl, "morphTexture", object.morphTexture, textures); + } else { + let morphInfluencesSum = 0; + for (let i = 0; i < objectInfluences.length; i++) { + morphInfluencesSum += objectInfluences[i]; + } + const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + program.getUniforms().setValue(gl, "morphTargetBaseInfluence", morphBaseInfluence); + program.getUniforms().setValue(gl, "morphTargetInfluences", objectInfluences); + } + program.getUniforms().setValue(gl, "morphTargetsTexture", entry.texture, textures); + program.getUniforms().setValue(gl, "morphTargetsTextureSize", entry.size); + } + __name(update, "update"); + return { + update + }; +} +__name(WebGLMorphtargets, "WebGLMorphtargets"); +function WebGLObjects(gl, geometries, attributes, info) { + let updateMap = /* @__PURE__ */ new WeakMap(); + function update(object) { + const frame = info.render.frame; + const geometry = object.geometry; + const buffergeometry = geometries.get(object, geometry); + if (updateMap.get(buffergeometry) !== frame) { + geometries.update(buffergeometry); + updateMap.set(buffergeometry, frame); + } + if (object.isInstancedMesh) { + if (object.hasEventListener("dispose", onInstancedMeshDispose) === false) { + object.addEventListener("dispose", onInstancedMeshDispose); + } + if (updateMap.get(object) !== frame) { + attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER); + if (object.instanceColor !== null) { + attributes.update(object.instanceColor, gl.ARRAY_BUFFER); + } + updateMap.set(object, frame); + } + } + if (object.isSkinnedMesh) { + const skeleton = object.skeleton; + if (updateMap.get(skeleton) !== frame) { + skeleton.update(); + updateMap.set(skeleton, frame); + } + } + return buffergeometry; + } + __name(update, "update"); + function dispose() { + updateMap = /* @__PURE__ */ new WeakMap(); + } + __name(dispose, "dispose"); + function onInstancedMeshDispose(event) { + const instancedMesh = event.target; + instancedMesh.removeEventListener("dispose", onInstancedMeshDispose); + attributes.remove(instancedMesh.instanceMatrix); + if (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor); + } + __name(onInstancedMeshDispose, "onInstancedMeshDispose"); + return { + update, + dispose + }; +} +__name(WebGLObjects, "WebGLObjects"); +class DepthTexture extends Texture { + static { + __name(this, "DepthTexture"); + } + constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat) { + if (format !== DepthFormat && format !== DepthStencilFormat) { + throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + } + if (type === void 0 && format === DepthFormat) type = UnsignedIntType; + if (type === void 0 && format === DepthStencilFormat) type = UnsignedInt248Type; + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isDepthTexture = true; + this.image = { width, height }; + this.magFilter = magFilter !== void 0 ? magFilter : NearestFilter; + this.minFilter = minFilter !== void 0 ? minFilter : NearestFilter; + this.flipY = false; + this.generateMipmaps = false; + this.compareFunction = null; + } + copy(source) { + super.copy(source); + this.compareFunction = source.compareFunction; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.compareFunction !== null) data.compareFunction = this.compareFunction; + return data; + } +} +const emptyTexture = /* @__PURE__ */ new Texture(); +const emptyShadowTexture = /* @__PURE__ */ new DepthTexture(1, 1); +const emptyArrayTexture = /* @__PURE__ */ new DataArrayTexture(); +const empty3dTexture = /* @__PURE__ */ new Data3DTexture(); +const emptyCubeTexture = /* @__PURE__ */ new CubeTexture(); +const arrayCacheF32 = []; +const arrayCacheI32 = []; +const mat4array = new Float32Array(16); +const mat3array = new Float32Array(9); +const mat2array = new Float32Array(4); +function flatten(array, nBlocks, blockSize) { + const firstElem = array[0]; + if (firstElem <= 0 || firstElem > 0) return array; + const n = nBlocks * blockSize; + let r = arrayCacheF32[n]; + if (r === void 0) { + r = new Float32Array(n); + arrayCacheF32[n] = r; + } + if (nBlocks !== 0) { + firstElem.toArray(r, 0); + for (let i = 1, offset = 0; i !== nBlocks; ++i) { + offset += blockSize; + array[i].toArray(r, offset); + } + } + return r; +} +__name(flatten, "flatten"); +function arraysEqual(a, b) { + if (a.length !== b.length) return false; + for (let i = 0, l = a.length; i < l; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} +__name(arraysEqual, "arraysEqual"); +function copyArray(a, b) { + for (let i = 0, l = b.length; i < l; i++) { + a[i] = b[i]; + } +} +__name(copyArray, "copyArray"); +function allocTexUnits(textures, n) { + let r = arrayCacheI32[n]; + if (r === void 0) { + r = new Int32Array(n); + arrayCacheI32[n] = r; + } + for (let i = 0; i !== n; ++i) { + r[i] = textures.allocateTextureUnit(); + } + return r; +} +__name(allocTexUnits, "allocTexUnits"); +function setValueV1f(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1f(this.addr, v); + cache[0] = v; +} +__name(setValueV1f, "setValueV1f"); +function setValueV2f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2f(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2fv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV2f, "setValueV2f"); +function setValueV3f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3f(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else if (v.r !== void 0) { + if (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) { + gl.uniform3f(this.addr, v.r, v.g, v.b); + cache[0] = v.r; + cache[1] = v.g; + cache[2] = v.b; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3fv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV3f, "setValueV3f"); +function setValueV4f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4f(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4fv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV4f, "setValueV4f"); +function setValueM2(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix2fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat2array.set(elements); + gl.uniformMatrix2fv(this.addr, false, mat2array); + copyArray(cache, elements); + } +} +__name(setValueM2, "setValueM2"); +function setValueM3(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix3fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat3array.set(elements); + gl.uniformMatrix3fv(this.addr, false, mat3array); + copyArray(cache, elements); + } +} +__name(setValueM3, "setValueM3"); +function setValueM4(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix4fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat4array.set(elements); + gl.uniformMatrix4fv(this.addr, false, mat4array); + copyArray(cache, elements); + } +} +__name(setValueM4, "setValueM4"); +function setValueV1i(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1i(this.addr, v); + cache[0] = v; +} +__name(setValueV1i, "setValueV1i"); +function setValueV2i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2i(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2iv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV2i, "setValueV2i"); +function setValueV3i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3i(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3iv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV3i, "setValueV3i"); +function setValueV4i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4i(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4iv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV4i, "setValueV4i"); +function setValueV1ui(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1ui(this.addr, v); + cache[0] = v; +} +__name(setValueV1ui, "setValueV1ui"); +function setValueV2ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2ui(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2uiv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV2ui, "setValueV2ui"); +function setValueV3ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3ui(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3uiv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV3ui, "setValueV3ui"); +function setValueV4ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4ui(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4uiv(this.addr, v); + copyArray(cache, v); + } +} +__name(setValueV4ui, "setValueV4ui"); +function setValueT1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + let emptyTexture2D; + if (this.type === gl.SAMPLER_2D_SHADOW) { + emptyShadowTexture.compareFunction = LessEqualCompare; + emptyTexture2D = emptyShadowTexture; + } else { + emptyTexture2D = emptyTexture; + } + textures.setTexture2D(v || emptyTexture2D, unit); +} +__name(setValueT1, "setValueT1"); +function setValueT3D1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTexture3D(v || empty3dTexture, unit); +} +__name(setValueT3D1, "setValueT3D1"); +function setValueT6(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTextureCube(v || emptyCubeTexture, unit); +} +__name(setValueT6, "setValueT6"); +function setValueT2DArray1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTexture2DArray(v || emptyArrayTexture, unit); +} +__name(setValueT2DArray1, "setValueT2DArray1"); +function getSingularSetter(type) { + switch (type) { + case 5126: + return setValueV1f; + case 35664: + return setValueV2f; + case 35665: + return setValueV3f; + case 35666: + return setValueV4f; + case 35674: + return setValueM2; + case 35675: + return setValueM3; + case 35676: + return setValueM4; + case 5124: + case 35670: + return setValueV1i; + case 35667: + case 35671: + return setValueV2i; + case 35668: + case 35672: + return setValueV3i; + case 35669: + case 35673: + return setValueV4i; + case 5125: + return setValueV1ui; + case 36294: + return setValueV2ui; + case 36295: + return setValueV3ui; + case 36296: + return setValueV4ui; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return setValueT1; + case 35679: + case 36299: + case 36307: + return setValueT3D1; + case 35680: + case 36300: + case 36308: + case 36293: + return setValueT6; + case 36289: + case 36303: + case 36311: + case 36292: + return setValueT2DArray1; + } +} +__name(getSingularSetter, "getSingularSetter"); +function setValueV1fArray(gl, v) { + gl.uniform1fv(this.addr, v); +} +__name(setValueV1fArray, "setValueV1fArray"); +function setValueV2fArray(gl, v) { + const data = flatten(v, this.size, 2); + gl.uniform2fv(this.addr, data); +} +__name(setValueV2fArray, "setValueV2fArray"); +function setValueV3fArray(gl, v) { + const data = flatten(v, this.size, 3); + gl.uniform3fv(this.addr, data); +} +__name(setValueV3fArray, "setValueV3fArray"); +function setValueV4fArray(gl, v) { + const data = flatten(v, this.size, 4); + gl.uniform4fv(this.addr, data); +} +__name(setValueV4fArray, "setValueV4fArray"); +function setValueM2Array(gl, v) { + const data = flatten(v, this.size, 4); + gl.uniformMatrix2fv(this.addr, false, data); +} +__name(setValueM2Array, "setValueM2Array"); +function setValueM3Array(gl, v) { + const data = flatten(v, this.size, 9); + gl.uniformMatrix3fv(this.addr, false, data); +} +__name(setValueM3Array, "setValueM3Array"); +function setValueM4Array(gl, v) { + const data = flatten(v, this.size, 16); + gl.uniformMatrix4fv(this.addr, false, data); +} +__name(setValueM4Array, "setValueM4Array"); +function setValueV1iArray(gl, v) { + gl.uniform1iv(this.addr, v); +} +__name(setValueV1iArray, "setValueV1iArray"); +function setValueV2iArray(gl, v) { + gl.uniform2iv(this.addr, v); +} +__name(setValueV2iArray, "setValueV2iArray"); +function setValueV3iArray(gl, v) { + gl.uniform3iv(this.addr, v); +} +__name(setValueV3iArray, "setValueV3iArray"); +function setValueV4iArray(gl, v) { + gl.uniform4iv(this.addr, v); +} +__name(setValueV4iArray, "setValueV4iArray"); +function setValueV1uiArray(gl, v) { + gl.uniform1uiv(this.addr, v); +} +__name(setValueV1uiArray, "setValueV1uiArray"); +function setValueV2uiArray(gl, v) { + gl.uniform2uiv(this.addr, v); +} +__name(setValueV2uiArray, "setValueV2uiArray"); +function setValueV3uiArray(gl, v) { + gl.uniform3uiv(this.addr, v); +} +__name(setValueV3uiArray, "setValueV3uiArray"); +function setValueV4uiArray(gl, v) { + gl.uniform4uiv(this.addr, v); +} +__name(setValueV4uiArray, "setValueV4uiArray"); +function setValueT1Array(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture2D(v[i] || emptyTexture, units[i]); + } +} +__name(setValueT1Array, "setValueT1Array"); +function setValueT3DArray(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture3D(v[i] || empty3dTexture, units[i]); + } +} +__name(setValueT3DArray, "setValueT3DArray"); +function setValueT6Array(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTextureCube(v[i] || emptyCubeTexture, units[i]); + } +} +__name(setValueT6Array, "setValueT6Array"); +function setValueT2DArrayArray(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture2DArray(v[i] || emptyArrayTexture, units[i]); + } +} +__name(setValueT2DArrayArray, "setValueT2DArrayArray"); +function getPureArraySetter(type) { + switch (type) { + case 5126: + return setValueV1fArray; + case 35664: + return setValueV2fArray; + case 35665: + return setValueV3fArray; + case 35666: + return setValueV4fArray; + case 35674: + return setValueM2Array; + case 35675: + return setValueM3Array; + case 35676: + return setValueM4Array; + case 5124: + case 35670: + return setValueV1iArray; + case 35667: + case 35671: + return setValueV2iArray; + case 35668: + case 35672: + return setValueV3iArray; + case 35669: + case 35673: + return setValueV4iArray; + case 5125: + return setValueV1uiArray; + case 36294: + return setValueV2uiArray; + case 36295: + return setValueV3uiArray; + case 36296: + return setValueV4uiArray; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return setValueT1Array; + case 35679: + case 36299: + case 36307: + return setValueT3DArray; + case 35680: + case 36300: + case 36308: + case 36293: + return setValueT6Array; + case 36289: + case 36303: + case 36311: + case 36292: + return setValueT2DArrayArray; + } +} +__name(getPureArraySetter, "getPureArraySetter"); +class SingleUniform { + static { + __name(this, "SingleUniform"); + } + constructor(id2, activeInfo, addr) { + this.id = id2; + this.addr = addr; + this.cache = []; + this.type = activeInfo.type; + this.setValue = getSingularSetter(activeInfo.type); + } +} +class PureArrayUniform { + static { + __name(this, "PureArrayUniform"); + } + constructor(id2, activeInfo, addr) { + this.id = id2; + this.addr = addr; + this.cache = []; + this.type = activeInfo.type; + this.size = activeInfo.size; + this.setValue = getPureArraySetter(activeInfo.type); + } +} +class StructuredUniform { + static { + __name(this, "StructuredUniform"); + } + constructor(id2) { + this.id = id2; + this.seq = []; + this.map = {}; + } + setValue(gl, value, textures) { + const seq = this.seq; + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i]; + u.setValue(gl, value[u.id], textures); + } + } +} +const RePathPart = /(\w+)(\])?(\[|\.)?/g; +function addUniform(container, uniformObject) { + container.seq.push(uniformObject); + container.map[uniformObject.id] = uniformObject; +} +__name(addUniform, "addUniform"); +function parseUniform(activeInfo, addr, container) { + const path = activeInfo.name, pathLength = path.length; + RePathPart.lastIndex = 0; + while (true) { + const match = RePathPart.exec(path), matchEnd = RePathPart.lastIndex; + let id2 = match[1]; + const idIsIndex = match[2] === "]", subscript = match[3]; + if (idIsIndex) id2 = id2 | 0; + if (subscript === void 0 || subscript === "[" && matchEnd + 2 === pathLength) { + addUniform(container, subscript === void 0 ? new SingleUniform(id2, activeInfo, addr) : new PureArrayUniform(id2, activeInfo, addr)); + break; + } else { + const map = container.map; + let next = map[id2]; + if (next === void 0) { + next = new StructuredUniform(id2); + addUniform(container, next); + } + container = next; + } + } +} +__name(parseUniform, "parseUniform"); +class WebGLUniforms { + static { + __name(this, "WebGLUniforms"); + } + constructor(gl, program) { + this.seq = []; + this.map = {}; + const n = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); + for (let i = 0; i < n; ++i) { + const info = gl.getActiveUniform(program, i), addr = gl.getUniformLocation(program, info.name); + parseUniform(info, addr, this); + } + } + setValue(gl, name, value, textures) { + const u = this.map[name]; + if (u !== void 0) u.setValue(gl, value, textures); + } + setOptional(gl, object, name) { + const v = object[name]; + if (v !== void 0) this.setValue(gl, name, v); + } + static upload(gl, seq, values, textures) { + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i], v = values[u.id]; + if (v.needsUpdate !== false) { + u.setValue(gl, v.value, textures); + } + } + } + static seqWithValue(seq, values) { + const r = []; + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i]; + if (u.id in values) r.push(u); + } + return r; + } +} +function WebGLShader(gl, type, string) { + const shader = gl.createShader(type); + gl.shaderSource(shader, string); + gl.compileShader(shader); + return shader; +} +__name(WebGLShader, "WebGLShader"); +const COMPLETION_STATUS_KHR = 37297; +let programIdCount = 0; +function handleSource(string, errorLine) { + const lines = string.split("\n"); + const lines2 = []; + const from = Math.max(errorLine - 6, 0); + const to = Math.min(errorLine + 6, lines.length); + for (let i = from; i < to; i++) { + const line = i + 1; + lines2.push(`${line === errorLine ? ">" : " "} ${line}: ${lines[i]}`); + } + return lines2.join("\n"); +} +__name(handleSource, "handleSource"); +const _m0 = /* @__PURE__ */ new Matrix3(); +function getEncodingComponents(colorSpace) { + ColorManagement._getMatrix(_m0, ColorManagement.workingColorSpace, colorSpace); + const encodingMatrix = `mat3( ${_m0.elements.map((v) => v.toFixed(4))} )`; + switch (ColorManagement.getTransfer(colorSpace)) { + case LinearTransfer: + return [encodingMatrix, "LinearTransferOETF"]; + case SRGBTransfer: + return [encodingMatrix, "sRGBTransferOETF"]; + default: + console.warn("THREE.WebGLProgram: Unsupported color space: ", colorSpace); + return [encodingMatrix, "LinearTransferOETF"]; + } +} +__name(getEncodingComponents, "getEncodingComponents"); +function getShaderErrors(gl, shader, type) { + const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + const errors = gl.getShaderInfoLog(shader).trim(); + if (status && errors === "") return ""; + const errorMatches = /ERROR: 0:(\d+)/.exec(errors); + if (errorMatches) { + const errorLine = parseInt(errorMatches[1]); + return type.toUpperCase() + "\n\n" + errors + "\n\n" + handleSource(gl.getShaderSource(shader), errorLine); + } else { + return errors; + } +} +__name(getShaderErrors, "getShaderErrors"); +function getTexelEncodingFunction(functionName, colorSpace) { + const components = getEncodingComponents(colorSpace); + return [ + `vec4 ${functionName}( vec4 value ) {`, + ` return ${components[1]}( vec4( value.rgb * ${components[0]}, value.a ) );`, + "}" + ].join("\n"); +} +__name(getTexelEncodingFunction, "getTexelEncodingFunction"); +function getToneMappingFunction(functionName, toneMapping) { + let toneMappingName; + switch (toneMapping) { + case LinearToneMapping: + toneMappingName = "Linear"; + break; + case ReinhardToneMapping: + toneMappingName = "Reinhard"; + break; + case CineonToneMapping: + toneMappingName = "Cineon"; + break; + case ACESFilmicToneMapping: + toneMappingName = "ACESFilmic"; + break; + case AgXToneMapping: + toneMappingName = "AgX"; + break; + case NeutralToneMapping: + toneMappingName = "Neutral"; + break; + case CustomToneMapping: + toneMappingName = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", toneMapping); + toneMappingName = "Linear"; + } + return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; +} +__name(getToneMappingFunction, "getToneMappingFunction"); +const _v0$1 = /* @__PURE__ */ new Vector3(); +function getLuminanceFunction() { + ColorManagement.getLuminanceCoefficients(_v0$1); + const r = _v0$1.x.toFixed(4); + const g = _v0$1.y.toFixed(4); + const b = _v0$1.z.toFixed(4); + return [ + "float luminance( const in vec3 rgb ) {", + ` const vec3 weights = vec3( ${r}, ${g}, ${b} );`, + " return dot( weights, rgb );", + "}" + ].join("\n"); +} +__name(getLuminanceFunction, "getLuminanceFunction"); +function generateVertexExtensions(parameters) { + const chunks = [ + parameters.extensionClipCullDistance ? "#extension GL_ANGLE_clip_cull_distance : require" : "", + parameters.extensionMultiDraw ? "#extension GL_ANGLE_multi_draw : require" : "" + ]; + return chunks.filter(filterEmptyLine).join("\n"); +} +__name(generateVertexExtensions, "generateVertexExtensions"); +function generateDefines(defines) { + const chunks = []; + for (const name in defines) { + const value = defines[name]; + if (value === false) continue; + chunks.push("#define " + name + " " + value); + } + return chunks.join("\n"); +} +__name(generateDefines, "generateDefines"); +function fetchAttributeLocations(gl, program) { + const attributes = {}; + const n = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); + for (let i = 0; i < n; i++) { + const info = gl.getActiveAttrib(program, i); + const name = info.name; + let locationSize = 1; + if (info.type === gl.FLOAT_MAT2) locationSize = 2; + if (info.type === gl.FLOAT_MAT3) locationSize = 3; + if (info.type === gl.FLOAT_MAT4) locationSize = 4; + attributes[name] = { + type: info.type, + location: gl.getAttribLocation(program, name), + locationSize + }; + } + return attributes; +} +__name(fetchAttributeLocations, "fetchAttributeLocations"); +function filterEmptyLine(string) { + return string !== ""; +} +__name(filterEmptyLine, "filterEmptyLine"); +function replaceLightNums(string, parameters) { + const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps; + return string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows); +} +__name(replaceLightNums, "replaceLightNums"); +function replaceClippingPlaneNums(string, parameters) { + return string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection); +} +__name(replaceClippingPlaneNums, "replaceClippingPlaneNums"); +const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; +function resolveIncludes(string) { + return string.replace(includePattern, includeReplacer); +} +__name(resolveIncludes, "resolveIncludes"); +const shaderChunkMap = /* @__PURE__ */ new Map(); +function includeReplacer(match, include) { + let string = ShaderChunk[include]; + if (string === void 0) { + const newInclude = shaderChunkMap.get(include); + if (newInclude !== void 0) { + string = ShaderChunk[newInclude]; + console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude); + } else { + throw new Error("Can not resolve #include <" + include + ">"); + } + } + return resolveIncludes(string); +} +__name(includeReplacer, "includeReplacer"); +const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; +function unrollLoops(string) { + return string.replace(unrollLoopPattern, loopReplacer); +} +__name(unrollLoops, "unrollLoops"); +function loopReplacer(match, start, end, snippet) { + let string = ""; + for (let i = parseInt(start); i < parseInt(end); i++) { + string += snippet.replace(/\[\s*i\s*\]/g, "[ " + i + " ]").replace(/UNROLLED_LOOP_INDEX/g, i); + } + return string; +} +__name(loopReplacer, "loopReplacer"); +function generatePrecision(parameters) { + let precisionstring = `precision ${parameters.precision} float; + precision ${parameters.precision} int; + precision ${parameters.precision} sampler2D; + precision ${parameters.precision} samplerCube; + precision ${parameters.precision} sampler3D; + precision ${parameters.precision} sampler2DArray; + precision ${parameters.precision} sampler2DShadow; + precision ${parameters.precision} samplerCubeShadow; + precision ${parameters.precision} sampler2DArrayShadow; + precision ${parameters.precision} isampler2D; + precision ${parameters.precision} isampler3D; + precision ${parameters.precision} isamplerCube; + precision ${parameters.precision} isampler2DArray; + precision ${parameters.precision} usampler2D; + precision ${parameters.precision} usampler3D; + precision ${parameters.precision} usamplerCube; + precision ${parameters.precision} usampler2DArray; + `; + if (parameters.precision === "highp") { + precisionstring += "\n#define HIGH_PRECISION"; + } else if (parameters.precision === "mediump") { + precisionstring += "\n#define MEDIUM_PRECISION"; + } else if (parameters.precision === "lowp") { + precisionstring += "\n#define LOW_PRECISION"; + } + return precisionstring; +} +__name(generatePrecision, "generatePrecision"); +function generateShadowMapTypeDefine(parameters) { + let shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC"; + if (parameters.shadowMapType === PCFShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF"; + } else if (parameters.shadowMapType === PCFSoftShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT"; + } else if (parameters.shadowMapType === VSMShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_VSM"; + } + return shadowMapTypeDefine; +} +__name(generateShadowMapTypeDefine, "generateShadowMapTypeDefine"); +function generateEnvMapTypeDefine(parameters) { + let envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + if (parameters.envMap) { + switch (parameters.envMapMode) { + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + break; + case CubeUVReflectionMapping: + envMapTypeDefine = "ENVMAP_TYPE_CUBE_UV"; + break; + } + } + return envMapTypeDefine; +} +__name(generateEnvMapTypeDefine, "generateEnvMapTypeDefine"); +function generateEnvMapModeDefine(parameters) { + let envMapModeDefine = "ENVMAP_MODE_REFLECTION"; + if (parameters.envMap) { + switch (parameters.envMapMode) { + case CubeRefractionMapping: + envMapModeDefine = "ENVMAP_MODE_REFRACTION"; + break; + } + } + return envMapModeDefine; +} +__name(generateEnvMapModeDefine, "generateEnvMapModeDefine"); +function generateEnvMapBlendingDefine(parameters) { + let envMapBlendingDefine = "ENVMAP_BLENDING_NONE"; + if (parameters.envMap) { + switch (parameters.combine) { + case MultiplyOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY"; + break; + case MixOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MIX"; + break; + case AddOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_ADD"; + break; + } + } + return envMapBlendingDefine; +} +__name(generateEnvMapBlendingDefine, "generateEnvMapBlendingDefine"); +function generateCubeUVSize(parameters) { + const imageHeight = parameters.envMapCubeUVHeight; + if (imageHeight === null) return null; + const maxMip = Math.log2(imageHeight) - 2; + const texelHeight = 1 / imageHeight; + const texelWidth = 1 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16)); + return { texelWidth, texelHeight, maxMip }; +} +__name(generateCubeUVSize, "generateCubeUVSize"); +function WebGLProgram(renderer, cacheKey, parameters, bindingStates) { + const gl = renderer.getContext(); + const defines = parameters.defines; + let vertexShader = parameters.vertexShader; + let fragmentShader = parameters.fragmentShader; + const shadowMapTypeDefine = generateShadowMapTypeDefine(parameters); + const envMapTypeDefine = generateEnvMapTypeDefine(parameters); + const envMapModeDefine = generateEnvMapModeDefine(parameters); + const envMapBlendingDefine = generateEnvMapBlendingDefine(parameters); + const envMapCubeUVSize = generateCubeUVSize(parameters); + const customVertexExtensions = generateVertexExtensions(parameters); + const customDefines = generateDefines(defines); + const program = gl.createProgram(); + let prefixVertex, prefixFragment; + let versionString = parameters.glslVersion ? "#version " + parameters.glslVersion + "\n" : ""; + if (parameters.isRawShaderMaterial) { + prefixVertex = [ + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines + ].filter(filterEmptyLine).join("\n"); + if (prefixVertex.length > 0) { + prefixVertex += "\n"; + } + prefixFragment = [ + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines + ].filter(filterEmptyLine).join("\n"); + if (prefixFragment.length > 0) { + prefixFragment += "\n"; + } + } else { + prefixVertex = [ + generatePrecision(parameters), + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines, + parameters.extensionClipCullDistance ? "#define USE_CLIP_DISTANCE" : "", + parameters.batching ? "#define USE_BATCHING" : "", + parameters.batchingColor ? "#define USE_BATCHING_COLOR" : "", + parameters.instancing ? "#define USE_INSTANCING" : "", + parameters.instancingColor ? "#define USE_INSTANCING_COLOR" : "", + parameters.instancingMorph ? "#define USE_INSTANCING_MORPH" : "", + parameters.useFog && parameters.fog ? "#define USE_FOG" : "", + parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", + parameters.map ? "#define USE_MAP" : "", + parameters.envMap ? "#define USE_ENVMAP" : "", + parameters.envMap ? "#define " + envMapModeDefine : "", + parameters.lightMap ? "#define USE_LIGHTMAP" : "", + parameters.aoMap ? "#define USE_AOMAP" : "", + parameters.bumpMap ? "#define USE_BUMPMAP" : "", + parameters.normalMap ? "#define USE_NORMALMAP" : "", + parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", + parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", + parameters.displacementMap ? "#define USE_DISPLACEMENTMAP" : "", + parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", + parameters.anisotropy ? "#define USE_ANISOTROPY" : "", + parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", + parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", + parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", + parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", + parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", + parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", + parameters.specularMap ? "#define USE_SPECULARMAP" : "", + parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", + parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", + parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", + parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", + parameters.alphaMap ? "#define USE_ALPHAMAP" : "", + parameters.alphaHash ? "#define USE_ALPHAHASH" : "", + parameters.transmission ? "#define USE_TRANSMISSION" : "", + parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", + parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", + parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", + parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", + // + parameters.mapUv ? "#define MAP_UV " + parameters.mapUv : "", + parameters.alphaMapUv ? "#define ALPHAMAP_UV " + parameters.alphaMapUv : "", + parameters.lightMapUv ? "#define LIGHTMAP_UV " + parameters.lightMapUv : "", + parameters.aoMapUv ? "#define AOMAP_UV " + parameters.aoMapUv : "", + parameters.emissiveMapUv ? "#define EMISSIVEMAP_UV " + parameters.emissiveMapUv : "", + parameters.bumpMapUv ? "#define BUMPMAP_UV " + parameters.bumpMapUv : "", + parameters.normalMapUv ? "#define NORMALMAP_UV " + parameters.normalMapUv : "", + parameters.displacementMapUv ? "#define DISPLACEMENTMAP_UV " + parameters.displacementMapUv : "", + parameters.metalnessMapUv ? "#define METALNESSMAP_UV " + parameters.metalnessMapUv : "", + parameters.roughnessMapUv ? "#define ROUGHNESSMAP_UV " + parameters.roughnessMapUv : "", + parameters.anisotropyMapUv ? "#define ANISOTROPYMAP_UV " + parameters.anisotropyMapUv : "", + parameters.clearcoatMapUv ? "#define CLEARCOATMAP_UV " + parameters.clearcoatMapUv : "", + parameters.clearcoatNormalMapUv ? "#define CLEARCOAT_NORMALMAP_UV " + parameters.clearcoatNormalMapUv : "", + parameters.clearcoatRoughnessMapUv ? "#define CLEARCOAT_ROUGHNESSMAP_UV " + parameters.clearcoatRoughnessMapUv : "", + parameters.iridescenceMapUv ? "#define IRIDESCENCEMAP_UV " + parameters.iridescenceMapUv : "", + parameters.iridescenceThicknessMapUv ? "#define IRIDESCENCE_THICKNESSMAP_UV " + parameters.iridescenceThicknessMapUv : "", + parameters.sheenColorMapUv ? "#define SHEEN_COLORMAP_UV " + parameters.sheenColorMapUv : "", + parameters.sheenRoughnessMapUv ? "#define SHEEN_ROUGHNESSMAP_UV " + parameters.sheenRoughnessMapUv : "", + parameters.specularMapUv ? "#define SPECULARMAP_UV " + parameters.specularMapUv : "", + parameters.specularColorMapUv ? "#define SPECULAR_COLORMAP_UV " + parameters.specularColorMapUv : "", + parameters.specularIntensityMapUv ? "#define SPECULAR_INTENSITYMAP_UV " + parameters.specularIntensityMapUv : "", + parameters.transmissionMapUv ? "#define TRANSMISSIONMAP_UV " + parameters.transmissionMapUv : "", + parameters.thicknessMapUv ? "#define THICKNESSMAP_UV " + parameters.thicknessMapUv : "", + // + parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", + parameters.vertexColors ? "#define USE_COLOR" : "", + parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", + parameters.vertexUv1s ? "#define USE_UV1" : "", + parameters.vertexUv2s ? "#define USE_UV2" : "", + parameters.vertexUv3s ? "#define USE_UV3" : "", + parameters.pointsUvs ? "#define USE_POINTS_UV" : "", + parameters.flatShading ? "#define FLAT_SHADED" : "", + parameters.skinning ? "#define USE_SKINNING" : "", + parameters.morphTargets ? "#define USE_MORPHTARGETS" : "", + parameters.morphNormals && parameters.flatShading === false ? "#define USE_MORPHNORMALS" : "", + parameters.morphColors ? "#define USE_MORPHCOLORS" : "", + parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_TEXTURE_STRIDE " + parameters.morphTextureStride : "", + parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_COUNT " + parameters.morphTargetsCount : "", + parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", + parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", + parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", + parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", + parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", + parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", + parameters.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", + "uniform mat4 modelMatrix;", + "uniform mat4 modelViewMatrix;", + "uniform mat4 projectionMatrix;", + "uniform mat4 viewMatrix;", + "uniform mat3 normalMatrix;", + "uniform vec3 cameraPosition;", + "uniform bool isOrthographic;", + "#ifdef USE_INSTANCING", + " attribute mat4 instanceMatrix;", + "#endif", + "#ifdef USE_INSTANCING_COLOR", + " attribute vec3 instanceColor;", + "#endif", + "#ifdef USE_INSTANCING_MORPH", + " uniform sampler2D morphTexture;", + "#endif", + "attribute vec3 position;", + "attribute vec3 normal;", + "attribute vec2 uv;", + "#ifdef USE_UV1", + " attribute vec2 uv1;", + "#endif", + "#ifdef USE_UV2", + " attribute vec2 uv2;", + "#endif", + "#ifdef USE_UV3", + " attribute vec2 uv3;", + "#endif", + "#ifdef USE_TANGENT", + " attribute vec4 tangent;", + "#endif", + "#if defined( USE_COLOR_ALPHA )", + " attribute vec4 color;", + "#elif defined( USE_COLOR )", + " attribute vec3 color;", + "#endif", + "#ifdef USE_SKINNING", + " attribute vec4 skinIndex;", + " attribute vec4 skinWeight;", + "#endif", + "\n" + ].filter(filterEmptyLine).join("\n"); + prefixFragment = [ + generatePrecision(parameters), + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines, + parameters.useFog && parameters.fog ? "#define USE_FOG" : "", + parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", + parameters.alphaToCoverage ? "#define ALPHA_TO_COVERAGE" : "", + parameters.map ? "#define USE_MAP" : "", + parameters.matcap ? "#define USE_MATCAP" : "", + parameters.envMap ? "#define USE_ENVMAP" : "", + parameters.envMap ? "#define " + envMapTypeDefine : "", + parameters.envMap ? "#define " + envMapModeDefine : "", + parameters.envMap ? "#define " + envMapBlendingDefine : "", + envMapCubeUVSize ? "#define CUBEUV_TEXEL_WIDTH " + envMapCubeUVSize.texelWidth : "", + envMapCubeUVSize ? "#define CUBEUV_TEXEL_HEIGHT " + envMapCubeUVSize.texelHeight : "", + envMapCubeUVSize ? "#define CUBEUV_MAX_MIP " + envMapCubeUVSize.maxMip + ".0" : "", + parameters.lightMap ? "#define USE_LIGHTMAP" : "", + parameters.aoMap ? "#define USE_AOMAP" : "", + parameters.bumpMap ? "#define USE_BUMPMAP" : "", + parameters.normalMap ? "#define USE_NORMALMAP" : "", + parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", + parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", + parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", + parameters.anisotropy ? "#define USE_ANISOTROPY" : "", + parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", + parameters.clearcoat ? "#define USE_CLEARCOAT" : "", + parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", + parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", + parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", + parameters.dispersion ? "#define USE_DISPERSION" : "", + parameters.iridescence ? "#define USE_IRIDESCENCE" : "", + parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", + parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", + parameters.specularMap ? "#define USE_SPECULARMAP" : "", + parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", + parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", + parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", + parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", + parameters.alphaMap ? "#define USE_ALPHAMAP" : "", + parameters.alphaTest ? "#define USE_ALPHATEST" : "", + parameters.alphaHash ? "#define USE_ALPHAHASH" : "", + parameters.sheen ? "#define USE_SHEEN" : "", + parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", + parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", + parameters.transmission ? "#define USE_TRANSMISSION" : "", + parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", + parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", + parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", + parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? "#define USE_COLOR" : "", + parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", + parameters.vertexUv1s ? "#define USE_UV1" : "", + parameters.vertexUv2s ? "#define USE_UV2" : "", + parameters.vertexUv3s ? "#define USE_UV3" : "", + parameters.pointsUvs ? "#define USE_POINTS_UV" : "", + parameters.gradientMap ? "#define USE_GRADIENTMAP" : "", + parameters.flatShading ? "#define FLAT_SHADED" : "", + parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", + parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", + parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", + parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", + parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", + parameters.decodeVideoTexture ? "#define DECODE_VIDEO_TEXTURE" : "", + parameters.decodeVideoTextureEmissive ? "#define DECODE_VIDEO_TEXTURE_EMISSIVE" : "", + parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", + parameters.reverseDepthBuffer ? "#define USE_REVERSEDEPTHBUF" : "", + "uniform mat4 viewMatrix;", + "uniform vec3 cameraPosition;", + "uniform bool isOrthographic;", + parameters.toneMapping !== NoToneMapping ? "#define TONE_MAPPING" : "", + parameters.toneMapping !== NoToneMapping ? ShaderChunk["tonemapping_pars_fragment"] : "", + // this code is required here because it is used by the toneMapping() function defined below + parameters.toneMapping !== NoToneMapping ? getToneMappingFunction("toneMapping", parameters.toneMapping) : "", + parameters.dithering ? "#define DITHERING" : "", + parameters.opaque ? "#define OPAQUE" : "", + ShaderChunk["colorspace_pars_fragment"], + // this code is required here because it is used by the various encoding/decoding function defined below + getTexelEncodingFunction("linearToOutputTexel", parameters.outputColorSpace), + getLuminanceFunction(), + parameters.useDepthPacking ? "#define DEPTH_PACKING " + parameters.depthPacking : "", + "\n" + ].filter(filterEmptyLine).join("\n"); + } + vertexShader = resolveIncludes(vertexShader); + vertexShader = replaceLightNums(vertexShader, parameters); + vertexShader = replaceClippingPlaneNums(vertexShader, parameters); + fragmentShader = resolveIncludes(fragmentShader); + fragmentShader = replaceLightNums(fragmentShader, parameters); + fragmentShader = replaceClippingPlaneNums(fragmentShader, parameters); + vertexShader = unrollLoops(vertexShader); + fragmentShader = unrollLoops(fragmentShader); + if (parameters.isRawShaderMaterial !== true) { + versionString = "#version 300 es\n"; + prefixVertex = [ + customVertexExtensions, + "#define attribute in", + "#define varying out", + "#define texture2D texture" + ].join("\n") + "\n" + prefixVertex; + prefixFragment = [ + "#define varying in", + parameters.glslVersion === GLSL3 ? "" : "layout(location = 0) out highp vec4 pc_fragColor;", + parameters.glslVersion === GLSL3 ? "" : "#define gl_FragColor pc_fragColor", + "#define gl_FragDepthEXT gl_FragDepth", + "#define texture2D texture", + "#define textureCube texture", + "#define texture2DProj textureProj", + "#define texture2DLodEXT textureLod", + "#define texture2DProjLodEXT textureProjLod", + "#define textureCubeLodEXT textureLod", + "#define texture2DGradEXT textureGrad", + "#define texture2DProjGradEXT textureProjGrad", + "#define textureCubeGradEXT textureGrad" + ].join("\n") + "\n" + prefixFragment; + } + const vertexGlsl = versionString + prefixVertex + vertexShader; + const fragmentGlsl = versionString + prefixFragment + fragmentShader; + const glVertexShader = WebGLShader(gl, gl.VERTEX_SHADER, vertexGlsl); + const glFragmentShader = WebGLShader(gl, gl.FRAGMENT_SHADER, fragmentGlsl); + gl.attachShader(program, glVertexShader); + gl.attachShader(program, glFragmentShader); + if (parameters.index0AttributeName !== void 0) { + gl.bindAttribLocation(program, 0, parameters.index0AttributeName); + } else if (parameters.morphTargets === true) { + gl.bindAttribLocation(program, 0, "position"); + } + gl.linkProgram(program); + function onFirstUse(self2) { + if (renderer.debug.checkShaderErrors) { + const programLog = gl.getProgramInfoLog(program).trim(); + const vertexLog = gl.getShaderInfoLog(glVertexShader).trim(); + const fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim(); + let runnable = true; + let haveDiagnostics = true; + if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { + runnable = false; + if (typeof renderer.debug.onShaderError === "function") { + renderer.debug.onShaderError(gl, program, glVertexShader, glFragmentShader); + } else { + const vertexErrors = getShaderErrors(gl, glVertexShader, "vertex"); + const fragmentErrors = getShaderErrors(gl, glFragmentShader, "fragment"); + console.error( + "THREE.WebGLProgram: Shader Error " + gl.getError() + " - VALIDATE_STATUS " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n\nMaterial Name: " + self2.name + "\nMaterial Type: " + self2.type + "\n\nProgram Info Log: " + programLog + "\n" + vertexErrors + "\n" + fragmentErrors + ); + } + } else if (programLog !== "") { + console.warn("THREE.WebGLProgram: Program Info Log:", programLog); + } else if (vertexLog === "" || fragmentLog === "") { + haveDiagnostics = false; + } + if (haveDiagnostics) { + self2.diagnostics = { + runnable, + programLog, + vertexShader: { + log: vertexLog, + prefix: prefixVertex + }, + fragmentShader: { + log: fragmentLog, + prefix: prefixFragment + } + }; + } + } + gl.deleteShader(glVertexShader); + gl.deleteShader(glFragmentShader); + cachedUniforms = new WebGLUniforms(gl, program); + cachedAttributes = fetchAttributeLocations(gl, program); + } + __name(onFirstUse, "onFirstUse"); + let cachedUniforms; + this.getUniforms = function() { + if (cachedUniforms === void 0) { + onFirstUse(this); + } + return cachedUniforms; + }; + let cachedAttributes; + this.getAttributes = function() { + if (cachedAttributes === void 0) { + onFirstUse(this); + } + return cachedAttributes; + }; + let programReady = parameters.rendererExtensionParallelShaderCompile === false; + this.isReady = function() { + if (programReady === false) { + programReady = gl.getProgramParameter(program, COMPLETION_STATUS_KHR); + } + return programReady; + }; + this.destroy = function() { + bindingStates.releaseStatesOfProgram(this); + gl.deleteProgram(program); + this.program = void 0; + }; + this.type = parameters.shaderType; + this.name = parameters.shaderName; + this.id = programIdCount++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + return this; +} +__name(WebGLProgram, "WebGLProgram"); +let _id$1 = 0; +class WebGLShaderCache { + static { + __name(this, "WebGLShaderCache"); + } + constructor() { + this.shaderCache = /* @__PURE__ */ new Map(); + this.materialCache = /* @__PURE__ */ new Map(); + } + update(material) { + const vertexShader = material.vertexShader; + const fragmentShader = material.fragmentShader; + const vertexShaderStage = this._getShaderStage(vertexShader); + const fragmentShaderStage = this._getShaderStage(fragmentShader); + const materialShaders = this._getShaderCacheForMaterial(material); + if (materialShaders.has(vertexShaderStage) === false) { + materialShaders.add(vertexShaderStage); + vertexShaderStage.usedTimes++; + } + if (materialShaders.has(fragmentShaderStage) === false) { + materialShaders.add(fragmentShaderStage); + fragmentShaderStage.usedTimes++; + } + return this; + } + remove(material) { + const materialShaders = this.materialCache.get(material); + for (const shaderStage of materialShaders) { + shaderStage.usedTimes--; + if (shaderStage.usedTimes === 0) this.shaderCache.delete(shaderStage.code); + } + this.materialCache.delete(material); + return this; + } + getVertexShaderID(material) { + return this._getShaderStage(material.vertexShader).id; + } + getFragmentShaderID(material) { + return this._getShaderStage(material.fragmentShader).id; + } + dispose() { + this.shaderCache.clear(); + this.materialCache.clear(); + } + _getShaderCacheForMaterial(material) { + const cache = this.materialCache; + let set = cache.get(material); + if (set === void 0) { + set = /* @__PURE__ */ new Set(); + cache.set(material, set); + } + return set; + } + _getShaderStage(code) { + const cache = this.shaderCache; + let stage = cache.get(code); + if (stage === void 0) { + stage = new WebGLShaderStage(code); + cache.set(code, stage); + } + return stage; + } +} +class WebGLShaderStage { + static { + __name(this, "WebGLShaderStage"); + } + constructor(code) { + this.id = _id$1++; + this.code = code; + this.usedTimes = 0; + } +} +function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping) { + const _programLayers = new Layers(); + const _customShaders = new WebGLShaderCache(); + const _activeChannels = /* @__PURE__ */ new Set(); + const programs = []; + const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures; + let precision = capabilities.precision; + const shaderIDs = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }; + function getChannel(value) { + _activeChannels.add(value); + if (value === 0) return "uv"; + return `uv${value}`; + } + __name(getChannel, "getChannel"); + function getParameters(material, lights, shadows, scene, object) { + const fog = scene.fog; + const geometry = object.geometry; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); + const envMapCubeUVHeight = !!envMap && envMap.mapping === CubeUVReflectionMapping ? envMap.image.height : null; + const shaderID = shaderIDs[material.type]; + if (material.precision !== null) { + precision = capabilities.getMaxPrecision(material.precision); + if (precision !== material.precision) { + console.warn("THREE.WebGLProgram.getParameters:", material.precision, "not supported, using", precision, "instead."); + } + } + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + let morphTextureStride = 0; + if (geometry.morphAttributes.position !== void 0) morphTextureStride = 1; + if (geometry.morphAttributes.normal !== void 0) morphTextureStride = 2; + if (geometry.morphAttributes.color !== void 0) morphTextureStride = 3; + let vertexShader, fragmentShader; + let customVertexShaderID, customFragmentShaderID; + if (shaderID) { + const shader = ShaderLib[shaderID]; + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + } else { + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + _customShaders.update(material); + customVertexShaderID = _customShaders.getVertexShaderID(material); + customFragmentShaderID = _customShaders.getFragmentShaderID(material); + } + const currentRenderTarget = renderer.getRenderTarget(); + const reverseDepthBuffer = renderer.state.buffers.depth.getReversed(); + const IS_INSTANCEDMESH = object.isInstancedMesh === true; + const IS_BATCHEDMESH = object.isBatchedMesh === true; + const HAS_MAP = !!material.map; + const HAS_MATCAP = !!material.matcap; + const HAS_ENVMAP = !!envMap; + const HAS_AOMAP = !!material.aoMap; + const HAS_LIGHTMAP = !!material.lightMap; + const HAS_BUMPMAP = !!material.bumpMap; + const HAS_NORMALMAP = !!material.normalMap; + const HAS_DISPLACEMENTMAP = !!material.displacementMap; + const HAS_EMISSIVEMAP = !!material.emissiveMap; + const HAS_METALNESSMAP = !!material.metalnessMap; + const HAS_ROUGHNESSMAP = !!material.roughnessMap; + const HAS_ANISOTROPY = material.anisotropy > 0; + const HAS_CLEARCOAT = material.clearcoat > 0; + const HAS_DISPERSION = material.dispersion > 0; + const HAS_IRIDESCENCE = material.iridescence > 0; + const HAS_SHEEN = material.sheen > 0; + const HAS_TRANSMISSION = material.transmission > 0; + const HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !!material.anisotropyMap; + const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !!material.clearcoatMap; + const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !!material.clearcoatNormalMap; + const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !!material.clearcoatRoughnessMap; + const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !!material.iridescenceMap; + const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !!material.iridescenceThicknessMap; + const HAS_SHEEN_COLORMAP = HAS_SHEEN && !!material.sheenColorMap; + const HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !!material.sheenRoughnessMap; + const HAS_SPECULARMAP = !!material.specularMap; + const HAS_SPECULAR_COLORMAP = !!material.specularColorMap; + const HAS_SPECULAR_INTENSITYMAP = !!material.specularIntensityMap; + const HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !!material.transmissionMap; + const HAS_THICKNESSMAP = HAS_TRANSMISSION && !!material.thicknessMap; + const HAS_GRADIENTMAP = !!material.gradientMap; + const HAS_ALPHAMAP = !!material.alphaMap; + const HAS_ALPHATEST = material.alphaTest > 0; + const HAS_ALPHAHASH = !!material.alphaHash; + const HAS_EXTENSIONS = !!material.extensions; + let toneMapping = NoToneMapping; + if (material.toneMapped) { + if (currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true) { + toneMapping = renderer.toneMapping; + } + } + const parameters = { + shaderID, + shaderType: material.type, + shaderName: material.name, + vertexShader, + fragmentShader, + defines: material.defines, + customVertexShaderID, + customFragmentShaderID, + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + precision, + batching: IS_BATCHEDMESH, + batchingColor: IS_BATCHEDMESH && object._colorsTexture !== null, + instancing: IS_INSTANCEDMESH, + instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null, + instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null, + supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES, + outputColorSpace: currentRenderTarget === null ? renderer.outputColorSpace : currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace, + alphaToCoverage: !!material.alphaToCoverage, + map: HAS_MAP, + matcap: HAS_MATCAP, + envMap: HAS_ENVMAP, + envMapMode: HAS_ENVMAP && envMap.mapping, + envMapCubeUVHeight, + aoMap: HAS_AOMAP, + lightMap: HAS_LIGHTMAP, + bumpMap: HAS_BUMPMAP, + normalMap: HAS_NORMALMAP, + displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP, + emissiveMap: HAS_EMISSIVEMAP, + normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, + normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, + metalnessMap: HAS_METALNESSMAP, + roughnessMap: HAS_ROUGHNESSMAP, + anisotropy: HAS_ANISOTROPY, + anisotropyMap: HAS_ANISOTROPYMAP, + clearcoat: HAS_CLEARCOAT, + clearcoatMap: HAS_CLEARCOATMAP, + clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP, + clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP, + dispersion: HAS_DISPERSION, + iridescence: HAS_IRIDESCENCE, + iridescenceMap: HAS_IRIDESCENCEMAP, + iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP, + sheen: HAS_SHEEN, + sheenColorMap: HAS_SHEEN_COLORMAP, + sheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP, + specularMap: HAS_SPECULARMAP, + specularColorMap: HAS_SPECULAR_COLORMAP, + specularIntensityMap: HAS_SPECULAR_INTENSITYMAP, + transmission: HAS_TRANSMISSION, + transmissionMap: HAS_TRANSMISSIONMAP, + thicknessMap: HAS_THICKNESSMAP, + gradientMap: HAS_GRADIENTMAP, + opaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false, + alphaMap: HAS_ALPHAMAP, + alphaTest: HAS_ALPHATEST, + alphaHash: HAS_ALPHAHASH, + combine: material.combine, + // + mapUv: HAS_MAP && getChannel(material.map.channel), + aoMapUv: HAS_AOMAP && getChannel(material.aoMap.channel), + lightMapUv: HAS_LIGHTMAP && getChannel(material.lightMap.channel), + bumpMapUv: HAS_BUMPMAP && getChannel(material.bumpMap.channel), + normalMapUv: HAS_NORMALMAP && getChannel(material.normalMap.channel), + displacementMapUv: HAS_DISPLACEMENTMAP && getChannel(material.displacementMap.channel), + emissiveMapUv: HAS_EMISSIVEMAP && getChannel(material.emissiveMap.channel), + metalnessMapUv: HAS_METALNESSMAP && getChannel(material.metalnessMap.channel), + roughnessMapUv: HAS_ROUGHNESSMAP && getChannel(material.roughnessMap.channel), + anisotropyMapUv: HAS_ANISOTROPYMAP && getChannel(material.anisotropyMap.channel), + clearcoatMapUv: HAS_CLEARCOATMAP && getChannel(material.clearcoatMap.channel), + clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel(material.clearcoatNormalMap.channel), + clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel(material.clearcoatRoughnessMap.channel), + iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel(material.iridescenceMap.channel), + iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel(material.iridescenceThicknessMap.channel), + sheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel(material.sheenColorMap.channel), + sheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel(material.sheenRoughnessMap.channel), + specularMapUv: HAS_SPECULARMAP && getChannel(material.specularMap.channel), + specularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel(material.specularColorMap.channel), + specularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel(material.specularIntensityMap.channel), + transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel(material.transmissionMap.channel), + thicknessMapUv: HAS_THICKNESSMAP && getChannel(material.thicknessMap.channel), + alphaMapUv: HAS_ALPHAMAP && getChannel(material.alphaMap.channel), + // + vertexTangents: !!geometry.attributes.tangent && (HAS_NORMALMAP || HAS_ANISOTROPY), + vertexColors: material.vertexColors, + vertexAlphas: material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4, + pointsUvs: object.isPoints === true && !!geometry.attributes.uv && (HAS_MAP || HAS_ALPHAMAP), + fog: !!fog, + useFog: material.fog === true, + fogExp2: !!fog && fog.isFogExp2, + flatShading: material.flatShading === true, + sizeAttenuation: material.sizeAttenuation === true, + logarithmicDepthBuffer, + reverseDepthBuffer, + skinning: object.isSkinnedMesh === true, + morphTargets: geometry.morphAttributes.position !== void 0, + morphNormals: geometry.morphAttributes.normal !== void 0, + morphColors: geometry.morphAttributes.color !== void 0, + morphTargetsCount, + morphTextureStride, + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numSpotLightMaps: lights.spotLightMap.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps, + numLightProbes: lights.numLightProbes, + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + dithering: material.dithering, + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + toneMapping, + decodeVideoTexture: HAS_MAP && material.map.isVideoTexture === true && ColorManagement.getTransfer(material.map.colorSpace) === SRGBTransfer, + decodeVideoTextureEmissive: HAS_EMISSIVEMAP && material.emissiveMap.isVideoTexture === true && ColorManagement.getTransfer(material.emissiveMap.colorSpace) === SRGBTransfer, + premultipliedAlpha: material.premultipliedAlpha, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + useDepthPacking: material.depthPacking >= 0, + depthPacking: material.depthPacking || 0, + index0AttributeName: material.index0AttributeName, + extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has("WEBGL_clip_cull_distance"), + extensionMultiDraw: (HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH) && extensions.has("WEBGL_multi_draw"), + rendererExtensionParallelShaderCompile: extensions.has("KHR_parallel_shader_compile"), + customProgramCacheKey: material.customProgramCacheKey() + }; + parameters.vertexUv1s = _activeChannels.has(1); + parameters.vertexUv2s = _activeChannels.has(2); + parameters.vertexUv3s = _activeChannels.has(3); + _activeChannels.clear(); + return parameters; + } + __name(getParameters, "getParameters"); + function getProgramCacheKey(parameters) { + const array = []; + if (parameters.shaderID) { + array.push(parameters.shaderID); + } else { + array.push(parameters.customVertexShaderID); + array.push(parameters.customFragmentShaderID); + } + if (parameters.defines !== void 0) { + for (const name in parameters.defines) { + array.push(name); + array.push(parameters.defines[name]); + } + } + if (parameters.isRawShaderMaterial === false) { + getProgramCacheKeyParameters(array, parameters); + getProgramCacheKeyBooleans(array, parameters); + array.push(renderer.outputColorSpace); + } + array.push(parameters.customProgramCacheKey); + return array.join(); + } + __name(getProgramCacheKey, "getProgramCacheKey"); + function getProgramCacheKeyParameters(array, parameters) { + array.push(parameters.precision); + array.push(parameters.outputColorSpace); + array.push(parameters.envMapMode); + array.push(parameters.envMapCubeUVHeight); + array.push(parameters.mapUv); + array.push(parameters.alphaMapUv); + array.push(parameters.lightMapUv); + array.push(parameters.aoMapUv); + array.push(parameters.bumpMapUv); + array.push(parameters.normalMapUv); + array.push(parameters.displacementMapUv); + array.push(parameters.emissiveMapUv); + array.push(parameters.metalnessMapUv); + array.push(parameters.roughnessMapUv); + array.push(parameters.anisotropyMapUv); + array.push(parameters.clearcoatMapUv); + array.push(parameters.clearcoatNormalMapUv); + array.push(parameters.clearcoatRoughnessMapUv); + array.push(parameters.iridescenceMapUv); + array.push(parameters.iridescenceThicknessMapUv); + array.push(parameters.sheenColorMapUv); + array.push(parameters.sheenRoughnessMapUv); + array.push(parameters.specularMapUv); + array.push(parameters.specularColorMapUv); + array.push(parameters.specularIntensityMapUv); + array.push(parameters.transmissionMapUv); + array.push(parameters.thicknessMapUv); + array.push(parameters.combine); + array.push(parameters.fogExp2); + array.push(parameters.sizeAttenuation); + array.push(parameters.morphTargetsCount); + array.push(parameters.morphAttributeCount); + array.push(parameters.numDirLights); + array.push(parameters.numPointLights); + array.push(parameters.numSpotLights); + array.push(parameters.numSpotLightMaps); + array.push(parameters.numHemiLights); + array.push(parameters.numRectAreaLights); + array.push(parameters.numDirLightShadows); + array.push(parameters.numPointLightShadows); + array.push(parameters.numSpotLightShadows); + array.push(parameters.numSpotLightShadowsWithMaps); + array.push(parameters.numLightProbes); + array.push(parameters.shadowMapType); + array.push(parameters.toneMapping); + array.push(parameters.numClippingPlanes); + array.push(parameters.numClipIntersection); + array.push(parameters.depthPacking); + } + __name(getProgramCacheKeyParameters, "getProgramCacheKeyParameters"); + function getProgramCacheKeyBooleans(array, parameters) { + _programLayers.disableAll(); + if (parameters.supportsVertexTextures) + _programLayers.enable(0); + if (parameters.instancing) + _programLayers.enable(1); + if (parameters.instancingColor) + _programLayers.enable(2); + if (parameters.instancingMorph) + _programLayers.enable(3); + if (parameters.matcap) + _programLayers.enable(4); + if (parameters.envMap) + _programLayers.enable(5); + if (parameters.normalMapObjectSpace) + _programLayers.enable(6); + if (parameters.normalMapTangentSpace) + _programLayers.enable(7); + if (parameters.clearcoat) + _programLayers.enable(8); + if (parameters.iridescence) + _programLayers.enable(9); + if (parameters.alphaTest) + _programLayers.enable(10); + if (parameters.vertexColors) + _programLayers.enable(11); + if (parameters.vertexAlphas) + _programLayers.enable(12); + if (parameters.vertexUv1s) + _programLayers.enable(13); + if (parameters.vertexUv2s) + _programLayers.enable(14); + if (parameters.vertexUv3s) + _programLayers.enable(15); + if (parameters.vertexTangents) + _programLayers.enable(16); + if (parameters.anisotropy) + _programLayers.enable(17); + if (parameters.alphaHash) + _programLayers.enable(18); + if (parameters.batching) + _programLayers.enable(19); + if (parameters.dispersion) + _programLayers.enable(20); + if (parameters.batchingColor) + _programLayers.enable(21); + array.push(_programLayers.mask); + _programLayers.disableAll(); + if (parameters.fog) + _programLayers.enable(0); + if (parameters.useFog) + _programLayers.enable(1); + if (parameters.flatShading) + _programLayers.enable(2); + if (parameters.logarithmicDepthBuffer) + _programLayers.enable(3); + if (parameters.reverseDepthBuffer) + _programLayers.enable(4); + if (parameters.skinning) + _programLayers.enable(5); + if (parameters.morphTargets) + _programLayers.enable(6); + if (parameters.morphNormals) + _programLayers.enable(7); + if (parameters.morphColors) + _programLayers.enable(8); + if (parameters.premultipliedAlpha) + _programLayers.enable(9); + if (parameters.shadowMapEnabled) + _programLayers.enable(10); + if (parameters.doubleSided) + _programLayers.enable(11); + if (parameters.flipSided) + _programLayers.enable(12); + if (parameters.useDepthPacking) + _programLayers.enable(13); + if (parameters.dithering) + _programLayers.enable(14); + if (parameters.transmission) + _programLayers.enable(15); + if (parameters.sheen) + _programLayers.enable(16); + if (parameters.opaque) + _programLayers.enable(17); + if (parameters.pointsUvs) + _programLayers.enable(18); + if (parameters.decodeVideoTexture) + _programLayers.enable(19); + if (parameters.decodeVideoTextureEmissive) + _programLayers.enable(20); + if (parameters.alphaToCoverage) + _programLayers.enable(21); + array.push(_programLayers.mask); + } + __name(getProgramCacheKeyBooleans, "getProgramCacheKeyBooleans"); + function getUniforms(material) { + const shaderID = shaderIDs[material.type]; + let uniforms; + if (shaderID) { + const shader = ShaderLib[shaderID]; + uniforms = UniformsUtils.clone(shader.uniforms); + } else { + uniforms = material.uniforms; + } + return uniforms; + } + __name(getUniforms, "getUniforms"); + function acquireProgram(parameters, cacheKey) { + let program; + for (let p = 0, pl = programs.length; p < pl; p++) { + const preexistingProgram = programs[p]; + if (preexistingProgram.cacheKey === cacheKey) { + program = preexistingProgram; + ++program.usedTimes; + break; + } + } + if (program === void 0) { + program = new WebGLProgram(renderer, cacheKey, parameters, bindingStates); + programs.push(program); + } + return program; + } + __name(acquireProgram, "acquireProgram"); + function releaseProgram(program) { + if (--program.usedTimes === 0) { + const i = programs.indexOf(program); + programs[i] = programs[programs.length - 1]; + programs.pop(); + program.destroy(); + } + } + __name(releaseProgram, "releaseProgram"); + function releaseShaderCache(material) { + _customShaders.remove(material); + } + __name(releaseShaderCache, "releaseShaderCache"); + function dispose() { + _customShaders.dispose(); + } + __name(dispose, "dispose"); + return { + getParameters, + getProgramCacheKey, + getUniforms, + acquireProgram, + releaseProgram, + releaseShaderCache, + // Exposed for resource monitoring & error feedback via renderer.info: + programs, + dispose + }; +} +__name(WebGLPrograms, "WebGLPrograms"); +function WebGLProperties() { + let properties = /* @__PURE__ */ new WeakMap(); + function has(object) { + return properties.has(object); + } + __name(has, "has"); + function get(object) { + let map = properties.get(object); + if (map === void 0) { + map = {}; + properties.set(object, map); + } + return map; + } + __name(get, "get"); + function remove(object) { + properties.delete(object); + } + __name(remove, "remove"); + function update(object, key, value) { + properties.get(object)[key] = value; + } + __name(update, "update"); + function dispose() { + properties = /* @__PURE__ */ new WeakMap(); + } + __name(dispose, "dispose"); + return { + has, + get, + remove, + update, + dispose + }; +} +__name(WebGLProperties, "WebGLProperties"); +function painterSortStable(a, b) { + if (a.groupOrder !== b.groupOrder) { + return a.groupOrder - b.groupOrder; + } else if (a.renderOrder !== b.renderOrder) { + return a.renderOrder - b.renderOrder; + } else if (a.material.id !== b.material.id) { + return a.material.id - b.material.id; + } else if (a.z !== b.z) { + return a.z - b.z; + } else { + return a.id - b.id; + } +} +__name(painterSortStable, "painterSortStable"); +function reversePainterSortStable(a, b) { + if (a.groupOrder !== b.groupOrder) { + return a.groupOrder - b.groupOrder; + } else if (a.renderOrder !== b.renderOrder) { + return a.renderOrder - b.renderOrder; + } else if (a.z !== b.z) { + return b.z - a.z; + } else { + return a.id - b.id; + } +} +__name(reversePainterSortStable, "reversePainterSortStable"); +function WebGLRenderList() { + const renderItems = []; + let renderItemsIndex = 0; + const opaque = []; + const transmissive = []; + const transparent = []; + function init() { + renderItemsIndex = 0; + opaque.length = 0; + transmissive.length = 0; + transparent.length = 0; + } + __name(init, "init"); + function getNextRenderItem(object, geometry, material, groupOrder, z, group) { + let renderItem = renderItems[renderItemsIndex]; + if (renderItem === void 0) { + renderItem = { + id: object.id, + object, + geometry, + material, + groupOrder, + renderOrder: object.renderOrder, + z, + group + }; + renderItems[renderItemsIndex] = renderItem; + } else { + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + } + renderItemsIndex++; + return renderItem; + } + __name(getNextRenderItem, "getNextRenderItem"); + function push(object, geometry, material, groupOrder, z, group) { + const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); + if (material.transmission > 0) { + transmissive.push(renderItem); + } else if (material.transparent === true) { + transparent.push(renderItem); + } else { + opaque.push(renderItem); + } + } + __name(push, "push"); + function unshift(object, geometry, material, groupOrder, z, group) { + const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); + if (material.transmission > 0) { + transmissive.unshift(renderItem); + } else if (material.transparent === true) { + transparent.unshift(renderItem); + } else { + opaque.unshift(renderItem); + } + } + __name(unshift, "unshift"); + function sort(customOpaqueSort, customTransparentSort) { + if (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable); + if (transmissive.length > 1) transmissive.sort(customTransparentSort || reversePainterSortStable); + if (transparent.length > 1) transparent.sort(customTransparentSort || reversePainterSortStable); + } + __name(sort, "sort"); + function finish() { + for (let i = renderItemsIndex, il = renderItems.length; i < il; i++) { + const renderItem = renderItems[i]; + if (renderItem.id === null) break; + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.group = null; + } + } + __name(finish, "finish"); + return { + opaque, + transmissive, + transparent, + init, + push, + unshift, + finish, + sort + }; +} +__name(WebGLRenderList, "WebGLRenderList"); +function WebGLRenderLists() { + let lists = /* @__PURE__ */ new WeakMap(); + function get(scene, renderCallDepth) { + const listArray = lists.get(scene); + let list; + if (listArray === void 0) { + list = new WebGLRenderList(); + lists.set(scene, [list]); + } else { + if (renderCallDepth >= listArray.length) { + list = new WebGLRenderList(); + listArray.push(list); + } else { + list = listArray[renderCallDepth]; + } + } + return list; + } + __name(get, "get"); + function dispose() { + lists = /* @__PURE__ */ new WeakMap(); + } + __name(dispose, "dispose"); + return { + get, + dispose + }; +} +__name(WebGLRenderLists, "WebGLRenderLists"); +function UniformsCache() { + const lights = {}; + return { + get: /* @__PURE__ */ __name(function(light) { + if (lights[light.id] !== void 0) { + return lights[light.id]; + } + let uniforms; + switch (light.type) { + case "DirectionalLight": + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + case "SpotLight": + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + case "RectAreaLight": + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + } + lights[light.id] = uniforms; + return uniforms; + }, "get") + }; +} +__name(UniformsCache, "UniformsCache"); +function ShadowUniformsCache() { + const lights = {}; + return { + get: /* @__PURE__ */ __name(function(light) { + if (lights[light.id] !== void 0) { + return lights[light.id]; + } + let uniforms; + switch (light.type) { + case "DirectionalLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + case "SpotLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + case "PointLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1e3 + }; + break; + } + lights[light.id] = uniforms; + return uniforms; + }, "get") + }; +} +__name(ShadowUniformsCache, "ShadowUniformsCache"); +let nextVersion = 0; +function shadowCastingAndTexturingLightsFirst(lightA, lightB) { + return (lightB.castShadow ? 2 : 0) - (lightA.castShadow ? 2 : 0) + (lightB.map ? 1 : 0) - (lightA.map ? 1 : 0); +} +__name(shadowCastingAndTexturingLightsFirst, "shadowCastingAndTexturingLightsFirst"); +function WebGLLights(extensions) { + const cache = new UniformsCache(); + const shadowCache = ShadowUniformsCache(); + const state = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + numSpotMaps: -1, + numLightProbes: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotLightMap: [], + spotShadow: [], + spotShadowMap: [], + spotLightMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + numSpotLightShadowsWithMaps: 0, + numLightProbes: 0 + }; + for (let i = 0; i < 9; i++) state.probe.push(new Vector3()); + const vector3 = new Vector3(); + const matrix4 = new Matrix4(); + const matrix42 = new Matrix4(); + function setup(lights) { + let r = 0, g = 0, b = 0; + for (let i = 0; i < 9; i++) state.probe[i].set(0, 0, 0); + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + let numDirectionalShadows = 0; + let numPointShadows = 0; + let numSpotShadows = 0; + let numSpotMaps = 0; + let numSpotShadowsWithMaps = 0; + let numLightProbes = 0; + lights.sort(shadowCastingAndTexturingLightsFirst); + for (let i = 0, l = lights.length; i < l; i++) { + const light = lights[i]; + const color = light.color; + const intensity = light.intensity; + const distance = light.distance; + const shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null; + if (light.isAmbientLight) { + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + } else if (light.isLightProbe) { + for (let j = 0; j < 9; j++) { + state.probe[j].addScaledVector(light.sh.coefficients[j], intensity); + } + numLightProbes++; + } else if (light.isDirectionalLight) { + const uniforms = cache.get(light); + uniforms.color.copy(light.color).multiplyScalar(light.intensity); + if (light.castShadow) { + const shadow = light.shadow; + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + state.directionalShadow[directionalLength] = shadowUniforms; + state.directionalShadowMap[directionalLength] = shadowMap; + state.directionalShadowMatrix[directionalLength] = light.shadow.matrix; + numDirectionalShadows++; + } + state.directional[directionalLength] = uniforms; + directionalLength++; + } else if (light.isSpotLight) { + const uniforms = cache.get(light); + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.color.copy(color).multiplyScalar(intensity); + uniforms.distance = distance; + uniforms.coneCos = Math.cos(light.angle); + uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra)); + uniforms.decay = light.decay; + state.spot[spotLength] = uniforms; + const shadow = light.shadow; + if (light.map) { + state.spotLightMap[numSpotMaps] = light.map; + numSpotMaps++; + shadow.updateMatrices(light); + if (light.castShadow) numSpotShadowsWithMaps++; + } + state.spotLightMatrix[spotLength] = shadow.matrix; + if (light.castShadow) { + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + state.spotShadow[spotLength] = shadowUniforms; + state.spotShadowMap[spotLength] = shadowMap; + numSpotShadows++; + } + spotLength++; + } else if (light.isRectAreaLight) { + const uniforms = cache.get(light); + uniforms.color.copy(color).multiplyScalar(intensity); + uniforms.halfWidth.set(light.width * 0.5, 0, 0); + uniforms.halfHeight.set(0, light.height * 0.5, 0); + state.rectArea[rectAreaLength] = uniforms; + rectAreaLength++; + } else if (light.isPointLight) { + const uniforms = cache.get(light); + uniforms.color.copy(light.color).multiplyScalar(light.intensity); + uniforms.distance = light.distance; + uniforms.decay = light.decay; + if (light.castShadow) { + const shadow = light.shadow; + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + shadowUniforms.shadowCameraNear = shadow.camera.near; + shadowUniforms.shadowCameraFar = shadow.camera.far; + state.pointShadow[pointLength] = shadowUniforms; + state.pointShadowMap[pointLength] = shadowMap; + state.pointShadowMatrix[pointLength] = light.shadow.matrix; + numPointShadows++; + } + state.point[pointLength] = uniforms; + pointLength++; + } else if (light.isHemisphereLight) { + const uniforms = cache.get(light); + uniforms.skyColor.copy(light.color).multiplyScalar(intensity); + uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity); + state.hemi[hemiLength] = uniforms; + hemiLength++; + } + } + if (rectAreaLength > 0) { + if (extensions.has("OES_texture_float_linear") === true) { + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + } else { + state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; + state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; + } + } + state.ambient[0] = r; + state.ambient[1] = g; + state.ambient[2] = b; + const hash = state.hash; + if (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows || hash.numSpotMaps !== numSpotMaps || hash.numLightProbes !== numLightProbes) { + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps; + state.spotLightMap.length = numSpotMaps; + state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps; + state.numLightProbes = numLightProbes; + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + hash.numSpotMaps = numSpotMaps; + hash.numLightProbes = numLightProbes; + state.version = nextVersion++; + } + } + __name(setup, "setup"); + function setupView(lights, camera) { + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + const viewMatrix = camera.matrixWorldInverse; + for (let i = 0, l = lights.length; i < l; i++) { + const light = lights[i]; + if (light.isDirectionalLight) { + const uniforms = state.directional[directionalLength]; + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + vector3.setFromMatrixPosition(light.target.matrixWorld); + uniforms.direction.sub(vector3); + uniforms.direction.transformDirection(viewMatrix); + directionalLength++; + } else if (light.isSpotLight) { + const uniforms = state.spot[spotLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + vector3.setFromMatrixPosition(light.target.matrixWorld); + uniforms.direction.sub(vector3); + uniforms.direction.transformDirection(viewMatrix); + spotLength++; + } else if (light.isRectAreaLight) { + const uniforms = state.rectArea[rectAreaLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + matrix42.identity(); + matrix4.copy(light.matrixWorld); + matrix4.premultiply(viewMatrix); + matrix42.extractRotation(matrix4); + uniforms.halfWidth.set(light.width * 0.5, 0, 0); + uniforms.halfHeight.set(0, light.height * 0.5, 0); + uniforms.halfWidth.applyMatrix4(matrix42); + uniforms.halfHeight.applyMatrix4(matrix42); + rectAreaLength++; + } else if (light.isPointLight) { + const uniforms = state.point[pointLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + pointLength++; + } else if (light.isHemisphereLight) { + const uniforms = state.hemi[hemiLength]; + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + uniforms.direction.transformDirection(viewMatrix); + hemiLength++; + } + } + } + __name(setupView, "setupView"); + return { + setup, + setupView, + state + }; +} +__name(WebGLLights, "WebGLLights"); +function WebGLRenderState(extensions) { + const lights = new WebGLLights(extensions); + const lightsArray = []; + const shadowsArray = []; + function init(camera) { + state.camera = camera; + lightsArray.length = 0; + shadowsArray.length = 0; + } + __name(init, "init"); + function pushLight(light) { + lightsArray.push(light); + } + __name(pushLight, "pushLight"); + function pushShadow(shadowLight) { + shadowsArray.push(shadowLight); + } + __name(pushShadow, "pushShadow"); + function setupLights() { + lights.setup(lightsArray); + } + __name(setupLights, "setupLights"); + function setupLightsView(camera) { + lights.setupView(lightsArray, camera); + } + __name(setupLightsView, "setupLightsView"); + const state = { + lightsArray, + shadowsArray, + camera: null, + lights, + transmissionRenderTarget: {} + }; + return { + init, + state, + setupLights, + setupLightsView, + pushLight, + pushShadow + }; +} +__name(WebGLRenderState, "WebGLRenderState"); +function WebGLRenderStates(extensions) { + let renderStates = /* @__PURE__ */ new WeakMap(); + function get(scene, renderCallDepth = 0) { + const renderStateArray = renderStates.get(scene); + let renderState; + if (renderStateArray === void 0) { + renderState = new WebGLRenderState(extensions); + renderStates.set(scene, [renderState]); + } else { + if (renderCallDepth >= renderStateArray.length) { + renderState = new WebGLRenderState(extensions); + renderStateArray.push(renderState); + } else { + renderState = renderStateArray[renderCallDepth]; + } + } + return renderState; + } + __name(get, "get"); + function dispose() { + renderStates = /* @__PURE__ */ new WeakMap(); + } + __name(dispose, "dispose"); + return { + get, + dispose + }; +} +__name(WebGLRenderStates, "WebGLRenderStates"); +class MeshDepthMaterial extends Material { + static { + __name(this, "MeshDepthMaterial"); + } + static get type() { + return "MeshDepthMaterial"; + } + constructor(parameters) { + super(); + this.isMeshDepthMaterial = true; + this.depthPacking = BasicDepthPacking; + this.map = null; + this.alphaMap = null; + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.depthPacking = source.depthPacking; + this.map = source.map; + this.alphaMap = source.alphaMap; + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + return this; + } +} +class MeshDistanceMaterial extends Material { + static { + __name(this, "MeshDistanceMaterial"); + } + static get type() { + return "MeshDistanceMaterial"; + } + constructor(parameters) { + super(); + this.isMeshDistanceMaterial = true; + this.map = null; + this.alphaMap = null; + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + return this; + } +} +const vertex = "void main() {\n gl_Position = vec4( position, 1.0 );\n}"; +const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n const float samples = float( VSM_SAMPLES );\n float mean = 0.0;\n float squared_mean = 0.0;\n float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n float uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n for ( float i = 0.0; i < samples; i ++ ) {\n float uvOffset = uvStart + i * uvStride;\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean / samples;\n squared_mean = squared_mean / samples;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; +function WebGLShadowMap(renderer, objects, capabilities) { + let _frustum2 = new Frustum(); + const _shadowMapSize = new Vector2(), _viewportSize = new Vector2(), _viewport = new Vector4(), _depthMaterial = new MeshDepthMaterial({ depthPacking: RGBADepthPacking }), _distanceMaterial = new MeshDistanceMaterial(), _materialCache = {}, _maxTextureSize = capabilities.maxTextureSize; + const shadowSide = { [FrontSide]: BackSide, [BackSide]: FrontSide, [DoubleSide]: DoubleSide }; + const shadowMaterialVertical = new ShaderMaterial({ + defines: { + VSM_SAMPLES: 8 + }, + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4 } + }, + vertexShader: vertex, + fragmentShader: fragment + }); + const shadowMaterialHorizontal = shadowMaterialVertical.clone(); + shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; + const fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + "position", + new BufferAttribute( + new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), + 3 + ) + ); + const fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical); + const scope = this; + this.enabled = false; + this.autoUpdate = true; + this.needsUpdate = false; + this.type = PCFShadowMap; + let _previousType = this.type; + this.render = function(lights, scene, camera) { + if (scope.enabled === false) return; + if (scope.autoUpdate === false && scope.needsUpdate === false) return; + if (lights.length === 0) return; + const currentRenderTarget = renderer.getRenderTarget(); + const activeCubeFace = renderer.getActiveCubeFace(); + const activeMipmapLevel = renderer.getActiveMipmapLevel(); + const _state = renderer.state; + _state.setBlending(NoBlending); + _state.buffers.color.setClear(1, 1, 1, 1); + _state.buffers.depth.setTest(true); + _state.setScissorTest(false); + const toVSM = _previousType !== VSMShadowMap && this.type === VSMShadowMap; + const fromVSM = _previousType === VSMShadowMap && this.type !== VSMShadowMap; + for (let i = 0, il = lights.length; i < il; i++) { + const light = lights[i]; + const shadow = light.shadow; + if (shadow === void 0) { + console.warn("THREE.WebGLShadowMap:", light, "has no shadow."); + continue; + } + if (shadow.autoUpdate === false && shadow.needsUpdate === false) continue; + _shadowMapSize.copy(shadow.mapSize); + const shadowFrameExtents = shadow.getFrameExtents(); + _shadowMapSize.multiply(shadowFrameExtents); + _viewportSize.copy(shadow.mapSize); + if (_shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize) { + if (_shadowMapSize.x > _maxTextureSize) { + _viewportSize.x = Math.floor(_maxTextureSize / shadowFrameExtents.x); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + } + if (_shadowMapSize.y > _maxTextureSize) { + _viewportSize.y = Math.floor(_maxTextureSize / shadowFrameExtents.y); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + } + } + if (shadow.map === null || toVSM === true || fromVSM === true) { + const pars = this.type !== VSMShadowMap ? { minFilter: NearestFilter, magFilter: NearestFilter } : {}; + if (shadow.map !== null) { + shadow.map.dispose(); + } + shadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars); + shadow.map.texture.name = light.name + ".shadowMap"; + shadow.camera.updateProjectionMatrix(); + } + renderer.setRenderTarget(shadow.map); + renderer.clear(); + const viewportCount = shadow.getViewportCount(); + for (let vp = 0; vp < viewportCount; vp++) { + const viewport = shadow.getViewport(vp); + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + _state.viewport(_viewport); + shadow.updateMatrices(light, vp); + _frustum2 = shadow.getFrustum(); + renderObject(scene, camera, shadow.camera, light, this.type); + } + if (shadow.isPointLightShadow !== true && this.type === VSMShadowMap) { + VSMPass(shadow, camera); + } + shadow.needsUpdate = false; + } + _previousType = this.type; + scope.needsUpdate = false; + renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel); + }; + function VSMPass(shadow, camera) { + const geometry = objects.update(fullScreenMesh); + if (shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples) { + shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples; + shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples; + shadowMaterialVertical.needsUpdate = true; + shadowMaterialHorizontal.needsUpdate = true; + } + if (shadow.mapPass === null) { + shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y); + } + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + renderer.setRenderTarget(shadow.mapPass); + renderer.clear(); + renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null); + shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; + renderer.setRenderTarget(shadow.map); + renderer.clear(); + renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null); + } + __name(VSMPass, "VSMPass"); + function getDepthMaterial(object, material, light, type) { + let result = null; + const customMaterial = light.isPointLight === true ? object.customDistanceMaterial : object.customDepthMaterial; + if (customMaterial !== void 0) { + result = customMaterial; + } else { + result = light.isPointLight === true ? _distanceMaterial : _depthMaterial; + if (renderer.localClippingEnabled && material.clipShadows === true && Array.isArray(material.clippingPlanes) && material.clippingPlanes.length !== 0 || material.displacementMap && material.displacementScale !== 0 || material.alphaMap && material.alphaTest > 0 || material.map && material.alphaTest > 0) { + const keyA = result.uuid, keyB = material.uuid; + let materialsForVariant = _materialCache[keyA]; + if (materialsForVariant === void 0) { + materialsForVariant = {}; + _materialCache[keyA] = materialsForVariant; + } + let cachedMaterial = materialsForVariant[keyB]; + if (cachedMaterial === void 0) { + cachedMaterial = result.clone(); + materialsForVariant[keyB] = cachedMaterial; + material.addEventListener("dispose", onMaterialDispose); + } + result = cachedMaterial; + } + } + result.visible = material.visible; + result.wireframe = material.wireframe; + if (type === VSMShadowMap) { + result.side = material.shadowSide !== null ? material.shadowSide : material.side; + } else { + result.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side]; + } + result.alphaMap = material.alphaMap; + result.alphaTest = material.alphaTest; + result.map = material.map; + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + result.displacementMap = material.displacementMap; + result.displacementScale = material.displacementScale; + result.displacementBias = material.displacementBias; + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + if (light.isPointLight === true && result.isMeshDistanceMaterial === true) { + const materialProperties = renderer.properties.get(result); + materialProperties.light = light; + } + return result; + } + __name(getDepthMaterial, "getDepthMaterial"); + function renderObject(object, camera, shadowCamera, light, type) { + if (object.visible === false) return; + const visible = object.layers.test(camera.layers); + if (visible && (object.isMesh || object.isLine || object.isPoints)) { + if ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum2.intersectsObject(object))) { + object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld); + const geometry = objects.update(object); + const material = object.material; + if (Array.isArray(material)) { + const groups = geometry.groups; + for (let k = 0, kl = groups.length; k < kl; k++) { + const group = groups[k]; + const groupMaterial = material[group.materialIndex]; + if (groupMaterial && groupMaterial.visible) { + const depthMaterial = getDepthMaterial(object, groupMaterial, light, type); + object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); + renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group); + object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); + } + } + } else if (material.visible) { + const depthMaterial = getDepthMaterial(object, material, light, type); + object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); + renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null); + object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); + } + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + renderObject(children[i], camera, shadowCamera, light, type); + } + } + __name(renderObject, "renderObject"); + function onMaterialDispose(event) { + const material = event.target; + material.removeEventListener("dispose", onMaterialDispose); + for (const id2 in _materialCache) { + const cache = _materialCache[id2]; + const uuid = event.target.uuid; + if (uuid in cache) { + const shadowMaterial = cache[uuid]; + shadowMaterial.dispose(); + delete cache[uuid]; + } + } + } + __name(onMaterialDispose, "onMaterialDispose"); +} +__name(WebGLShadowMap, "WebGLShadowMap"); +const reversedFuncs = { + [NeverDepth]: AlwaysDepth, + [LessDepth]: GreaterDepth, + [EqualDepth]: NotEqualDepth, + [LessEqualDepth]: GreaterEqualDepth, + [AlwaysDepth]: NeverDepth, + [GreaterDepth]: LessDepth, + [NotEqualDepth]: EqualDepth, + [GreaterEqualDepth]: LessEqualDepth +}; +function WebGLState(gl, extensions) { + function ColorBuffer() { + let locked = false; + const color = new Vector4(); + let currentColorMask = null; + const currentColorClear = new Vector4(0, 0, 0, 0); + return { + setMask: /* @__PURE__ */ __name(function(colorMask) { + if (currentColorMask !== colorMask && !locked) { + gl.colorMask(colorMask, colorMask, colorMask, colorMask); + currentColorMask = colorMask; + } + }, "setMask"), + setLocked: /* @__PURE__ */ __name(function(lock) { + locked = lock; + }, "setLocked"), + setClear: /* @__PURE__ */ __name(function(r, g, b, a, premultipliedAlpha) { + if (premultipliedAlpha === true) { + r *= a; + g *= a; + b *= a; + } + color.set(r, g, b, a); + if (currentColorClear.equals(color) === false) { + gl.clearColor(r, g, b, a); + currentColorClear.copy(color); + } + }, "setClear"), + reset: /* @__PURE__ */ __name(function() { + locked = false; + currentColorMask = null; + currentColorClear.set(-1, 0, 0, 0); + }, "reset") + }; + } + __name(ColorBuffer, "ColorBuffer"); + function DepthBuffer() { + let locked = false; + let reversed = false; + let currentDepthMask = null; + let currentDepthFunc = null; + let currentDepthClear = null; + return { + setReversed: /* @__PURE__ */ __name(function(value) { + if (reversed !== value) { + const ext2 = extensions.get("EXT_clip_control"); + if (reversed) { + ext2.clipControlEXT(ext2.LOWER_LEFT_EXT, ext2.ZERO_TO_ONE_EXT); + } else { + ext2.clipControlEXT(ext2.LOWER_LEFT_EXT, ext2.NEGATIVE_ONE_TO_ONE_EXT); + } + const oldDepth = currentDepthClear; + currentDepthClear = null; + this.setClear(oldDepth); + } + reversed = value; + }, "setReversed"), + getReversed: /* @__PURE__ */ __name(function() { + return reversed; + }, "getReversed"), + setTest: /* @__PURE__ */ __name(function(depthTest) { + if (depthTest) { + enable(gl.DEPTH_TEST); + } else { + disable(gl.DEPTH_TEST); + } + }, "setTest"), + setMask: /* @__PURE__ */ __name(function(depthMask) { + if (currentDepthMask !== depthMask && !locked) { + gl.depthMask(depthMask); + currentDepthMask = depthMask; + } + }, "setMask"), + setFunc: /* @__PURE__ */ __name(function(depthFunc) { + if (reversed) depthFunc = reversedFuncs[depthFunc]; + if (currentDepthFunc !== depthFunc) { + switch (depthFunc) { + case NeverDepth: + gl.depthFunc(gl.NEVER); + break; + case AlwaysDepth: + gl.depthFunc(gl.ALWAYS); + break; + case LessDepth: + gl.depthFunc(gl.LESS); + break; + case LessEqualDepth: + gl.depthFunc(gl.LEQUAL); + break; + case EqualDepth: + gl.depthFunc(gl.EQUAL); + break; + case GreaterEqualDepth: + gl.depthFunc(gl.GEQUAL); + break; + case GreaterDepth: + gl.depthFunc(gl.GREATER); + break; + case NotEqualDepth: + gl.depthFunc(gl.NOTEQUAL); + break; + default: + gl.depthFunc(gl.LEQUAL); + } + currentDepthFunc = depthFunc; + } + }, "setFunc"), + setLocked: /* @__PURE__ */ __name(function(lock) { + locked = lock; + }, "setLocked"), + setClear: /* @__PURE__ */ __name(function(depth) { + if (currentDepthClear !== depth) { + if (reversed) { + depth = 1 - depth; + } + gl.clearDepth(depth); + currentDepthClear = depth; + } + }, "setClear"), + reset: /* @__PURE__ */ __name(function() { + locked = false; + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + reversed = false; + }, "reset") + }; + } + __name(DepthBuffer, "DepthBuffer"); + function StencilBuffer() { + let locked = false; + let currentStencilMask = null; + let currentStencilFunc = null; + let currentStencilRef = null; + let currentStencilFuncMask = null; + let currentStencilFail = null; + let currentStencilZFail = null; + let currentStencilZPass = null; + let currentStencilClear = null; + return { + setTest: /* @__PURE__ */ __name(function(stencilTest) { + if (!locked) { + if (stencilTest) { + enable(gl.STENCIL_TEST); + } else { + disable(gl.STENCIL_TEST); + } + } + }, "setTest"), + setMask: /* @__PURE__ */ __name(function(stencilMask) { + if (currentStencilMask !== stencilMask && !locked) { + gl.stencilMask(stencilMask); + currentStencilMask = stencilMask; + } + }, "setMask"), + setFunc: /* @__PURE__ */ __name(function(stencilFunc, stencilRef, stencilMask) { + if (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) { + gl.stencilFunc(stencilFunc, stencilRef, stencilMask); + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + } + }, "setFunc"), + setOp: /* @__PURE__ */ __name(function(stencilFail, stencilZFail, stencilZPass) { + if (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) { + gl.stencilOp(stencilFail, stencilZFail, stencilZPass); + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + } + }, "setOp"), + setLocked: /* @__PURE__ */ __name(function(lock) { + locked = lock; + }, "setLocked"), + setClear: /* @__PURE__ */ __name(function(stencil) { + if (currentStencilClear !== stencil) { + gl.clearStencil(stencil); + currentStencilClear = stencil; + } + }, "setClear"), + reset: /* @__PURE__ */ __name(function() { + locked = false; + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + }, "reset") + }; + } + __name(StencilBuffer, "StencilBuffer"); + const colorBuffer = new ColorBuffer(); + const depthBuffer = new DepthBuffer(); + const stencilBuffer = new StencilBuffer(); + const uboBindings = /* @__PURE__ */ new WeakMap(); + const uboProgramMap = /* @__PURE__ */ new WeakMap(); + let enabledCapabilities = {}; + let currentBoundFramebuffers = {}; + let currentDrawbuffers = /* @__PURE__ */ new WeakMap(); + let defaultDrawbuffers = []; + let currentProgram = null; + let currentBlendingEnabled = false; + let currentBlending = null; + let currentBlendEquation = null; + let currentBlendSrc = null; + let currentBlendDst = null; + let currentBlendEquationAlpha = null; + let currentBlendSrcAlpha = null; + let currentBlendDstAlpha = null; + let currentBlendColor = new Color(0, 0, 0); + let currentBlendAlpha = 0; + let currentPremultipledAlpha = false; + let currentFlipSided = null; + let currentCullFace = null; + let currentLineWidth = null; + let currentPolygonOffsetFactor = null; + let currentPolygonOffsetUnits = null; + const maxTextures = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS); + let lineWidthAvailable = false; + let version = 0; + const glVersion = gl.getParameter(gl.VERSION); + if (glVersion.indexOf("WebGL") !== -1) { + version = parseFloat(/^WebGL (\d)/.exec(glVersion)[1]); + lineWidthAvailable = version >= 1; + } else if (glVersion.indexOf("OpenGL ES") !== -1) { + version = parseFloat(/^OpenGL ES (\d)/.exec(glVersion)[1]); + lineWidthAvailable = version >= 2; + } + let currentTextureSlot = null; + let currentBoundTextures = {}; + const scissorParam = gl.getParameter(gl.SCISSOR_BOX); + const viewportParam = gl.getParameter(gl.VIEWPORT); + const currentScissor = new Vector4().fromArray(scissorParam); + const currentViewport = new Vector4().fromArray(viewportParam); + function createTexture(type, target, count, dimensions) { + const data = new Uint8Array(4); + const texture = gl.createTexture(); + gl.bindTexture(type, texture); + gl.texParameteri(type, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(type, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + for (let i = 0; i < count; i++) { + if (type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY) { + gl.texImage3D(target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + } else { + gl.texImage2D(target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + } + } + return texture; + } + __name(createTexture, "createTexture"); + const emptyTextures = {}; + emptyTextures[gl.TEXTURE_2D] = createTexture(gl.TEXTURE_2D, gl.TEXTURE_2D, 1); + emptyTextures[gl.TEXTURE_CUBE_MAP] = createTexture(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6); + emptyTextures[gl.TEXTURE_2D_ARRAY] = createTexture(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1); + emptyTextures[gl.TEXTURE_3D] = createTexture(gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1); + colorBuffer.setClear(0, 0, 0, 1); + depthBuffer.setClear(1); + stencilBuffer.setClear(0); + enable(gl.DEPTH_TEST); + depthBuffer.setFunc(LessEqualDepth); + setFlipSided(false); + setCullFace(CullFaceBack); + enable(gl.CULL_FACE); + setBlending(NoBlending); + function enable(id2) { + if (enabledCapabilities[id2] !== true) { + gl.enable(id2); + enabledCapabilities[id2] = true; + } + } + __name(enable, "enable"); + function disable(id2) { + if (enabledCapabilities[id2] !== false) { + gl.disable(id2); + enabledCapabilities[id2] = false; + } + } + __name(disable, "disable"); + function bindFramebuffer(target, framebuffer) { + if (currentBoundFramebuffers[target] !== framebuffer) { + gl.bindFramebuffer(target, framebuffer); + currentBoundFramebuffers[target] = framebuffer; + if (target === gl.DRAW_FRAMEBUFFER) { + currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer; + } + if (target === gl.FRAMEBUFFER) { + currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer; + } + return true; + } + return false; + } + __name(bindFramebuffer, "bindFramebuffer"); + function drawBuffers(renderTarget, framebuffer) { + let drawBuffers2 = defaultDrawbuffers; + let needsUpdate = false; + if (renderTarget) { + drawBuffers2 = currentDrawbuffers.get(framebuffer); + if (drawBuffers2 === void 0) { + drawBuffers2 = []; + currentDrawbuffers.set(framebuffer, drawBuffers2); + } + const textures = renderTarget.textures; + if (drawBuffers2.length !== textures.length || drawBuffers2[0] !== gl.COLOR_ATTACHMENT0) { + for (let i = 0, il = textures.length; i < il; i++) { + drawBuffers2[i] = gl.COLOR_ATTACHMENT0 + i; + } + drawBuffers2.length = textures.length; + needsUpdate = true; + } + } else { + if (drawBuffers2[0] !== gl.BACK) { + drawBuffers2[0] = gl.BACK; + needsUpdate = true; + } + } + if (needsUpdate) { + gl.drawBuffers(drawBuffers2); + } + } + __name(drawBuffers, "drawBuffers"); + function useProgram(program) { + if (currentProgram !== program) { + gl.useProgram(program); + currentProgram = program; + return true; + } + return false; + } + __name(useProgram, "useProgram"); + const equationToGL = { + [AddEquation]: gl.FUNC_ADD, + [SubtractEquation]: gl.FUNC_SUBTRACT, + [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT + }; + equationToGL[MinEquation] = gl.MIN; + equationToGL[MaxEquation] = gl.MAX; + const factorToGL = { + [ZeroFactor]: gl.ZERO, + [OneFactor]: gl.ONE, + [SrcColorFactor]: gl.SRC_COLOR, + [SrcAlphaFactor]: gl.SRC_ALPHA, + [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE, + [DstColorFactor]: gl.DST_COLOR, + [DstAlphaFactor]: gl.DST_ALPHA, + [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR, + [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA, + [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR, + [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA, + [ConstantColorFactor]: gl.CONSTANT_COLOR, + [OneMinusConstantColorFactor]: gl.ONE_MINUS_CONSTANT_COLOR, + [ConstantAlphaFactor]: gl.CONSTANT_ALPHA, + [OneMinusConstantAlphaFactor]: gl.ONE_MINUS_CONSTANT_ALPHA + }; + function setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha) { + if (blending === NoBlending) { + if (currentBlendingEnabled === true) { + disable(gl.BLEND); + currentBlendingEnabled = false; + } + return; + } + if (currentBlendingEnabled === false) { + enable(gl.BLEND); + currentBlendingEnabled = true; + } + if (blending !== CustomBlending) { + if (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) { + if (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) { + gl.blendEquation(gl.FUNC_ADD); + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + } + if (premultipliedAlpha) { + switch (blending) { + case NormalBlending: + gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + break; + case AdditiveBlending: + gl.blendFunc(gl.ONE, gl.ONE); + break; + case SubtractiveBlending: + gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); + break; + case MultiplyBlending: + gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", blending); + break; + } + } else { + switch (blending) { + case NormalBlending: + gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + break; + case AdditiveBlending: + gl.blendFunc(gl.SRC_ALPHA, gl.ONE); + break; + case SubtractiveBlending: + gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); + break; + case MultiplyBlending: + gl.blendFunc(gl.ZERO, gl.SRC_COLOR); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", blending); + break; + } + } + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentBlendColor.set(0, 0, 0); + currentBlendAlpha = 0; + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + } + return; + } + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + if (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) { + gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]); + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + } + if (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) { + gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]); + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + } + if (blendColor.equals(currentBlendColor) === false || blendAlpha !== currentBlendAlpha) { + gl.blendColor(blendColor.r, blendColor.g, blendColor.b, blendAlpha); + currentBlendColor.copy(blendColor); + currentBlendAlpha = blendAlpha; + } + currentBlending = blending; + currentPremultipledAlpha = false; + } + __name(setBlending, "setBlending"); + function setMaterial(material, frontFaceCW) { + material.side === DoubleSide ? disable(gl.CULL_FACE) : enable(gl.CULL_FACE); + let flipSided = material.side === BackSide; + if (frontFaceCW) flipSided = !flipSided; + setFlipSided(flipSided); + material.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha); + depthBuffer.setFunc(material.depthFunc); + depthBuffer.setTest(material.depthTest); + depthBuffer.setMask(material.depthWrite); + colorBuffer.setMask(material.colorWrite); + const stencilWrite = material.stencilWrite; + stencilBuffer.setTest(stencilWrite); + if (stencilWrite) { + stencilBuffer.setMask(material.stencilWriteMask); + stencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask); + stencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass); + } + setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits); + material.alphaToCoverage === true ? enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : disable(gl.SAMPLE_ALPHA_TO_COVERAGE); + } + __name(setMaterial, "setMaterial"); + function setFlipSided(flipSided) { + if (currentFlipSided !== flipSided) { + if (flipSided) { + gl.frontFace(gl.CW); + } else { + gl.frontFace(gl.CCW); + } + currentFlipSided = flipSided; + } + } + __name(setFlipSided, "setFlipSided"); + function setCullFace(cullFace) { + if (cullFace !== CullFaceNone) { + enable(gl.CULL_FACE); + if (cullFace !== currentCullFace) { + if (cullFace === CullFaceBack) { + gl.cullFace(gl.BACK); + } else if (cullFace === CullFaceFront) { + gl.cullFace(gl.FRONT); + } else { + gl.cullFace(gl.FRONT_AND_BACK); + } + } + } else { + disable(gl.CULL_FACE); + } + currentCullFace = cullFace; + } + __name(setCullFace, "setCullFace"); + function setLineWidth(width) { + if (width !== currentLineWidth) { + if (lineWidthAvailable) gl.lineWidth(width); + currentLineWidth = width; + } + } + __name(setLineWidth, "setLineWidth"); + function setPolygonOffset(polygonOffset, factor, units) { + if (polygonOffset) { + enable(gl.POLYGON_OFFSET_FILL); + if (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) { + gl.polygonOffset(factor, units); + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + } + } else { + disable(gl.POLYGON_OFFSET_FILL); + } + } + __name(setPolygonOffset, "setPolygonOffset"); + function setScissorTest(scissorTest) { + if (scissorTest) { + enable(gl.SCISSOR_TEST); + } else { + disable(gl.SCISSOR_TEST); + } + } + __name(setScissorTest, "setScissorTest"); + function activeTexture(webglSlot) { + if (webglSlot === void 0) webglSlot = gl.TEXTURE0 + maxTextures - 1; + if (currentTextureSlot !== webglSlot) { + gl.activeTexture(webglSlot); + currentTextureSlot = webglSlot; + } + } + __name(activeTexture, "activeTexture"); + function bindTexture(webglType, webglTexture, webglSlot) { + if (webglSlot === void 0) { + if (currentTextureSlot === null) { + webglSlot = gl.TEXTURE0 + maxTextures - 1; + } else { + webglSlot = currentTextureSlot; + } + } + let boundTexture = currentBoundTextures[webglSlot]; + if (boundTexture === void 0) { + boundTexture = { type: void 0, texture: void 0 }; + currentBoundTextures[webglSlot] = boundTexture; + } + if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) { + if (currentTextureSlot !== webglSlot) { + gl.activeTexture(webglSlot); + currentTextureSlot = webglSlot; + } + gl.bindTexture(webglType, webglTexture || emptyTextures[webglType]); + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + } + } + __name(bindTexture, "bindTexture"); + function unbindTexture() { + const boundTexture = currentBoundTextures[currentTextureSlot]; + if (boundTexture !== void 0 && boundTexture.type !== void 0) { + gl.bindTexture(boundTexture.type, null); + boundTexture.type = void 0; + boundTexture.texture = void 0; + } + } + __name(unbindTexture, "unbindTexture"); + function compressedTexImage2D() { + try { + gl.compressedTexImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(compressedTexImage2D, "compressedTexImage2D"); + function compressedTexImage3D() { + try { + gl.compressedTexImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(compressedTexImage3D, "compressedTexImage3D"); + function texSubImage2D() { + try { + gl.texSubImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texSubImage2D, "texSubImage2D"); + function texSubImage3D() { + try { + gl.texSubImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texSubImage3D, "texSubImage3D"); + function compressedTexSubImage2D() { + try { + gl.compressedTexSubImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(compressedTexSubImage2D, "compressedTexSubImage2D"); + function compressedTexSubImage3D() { + try { + gl.compressedTexSubImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(compressedTexSubImage3D, "compressedTexSubImage3D"); + function texStorage2D() { + try { + gl.texStorage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texStorage2D, "texStorage2D"); + function texStorage3D() { + try { + gl.texStorage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texStorage3D, "texStorage3D"); + function texImage2D() { + try { + gl.texImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texImage2D, "texImage2D"); + function texImage3D() { + try { + gl.texImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + __name(texImage3D, "texImage3D"); + function scissor(scissor2) { + if (currentScissor.equals(scissor2) === false) { + gl.scissor(scissor2.x, scissor2.y, scissor2.z, scissor2.w); + currentScissor.copy(scissor2); + } + } + __name(scissor, "scissor"); + function viewport(viewport2) { + if (currentViewport.equals(viewport2) === false) { + gl.viewport(viewport2.x, viewport2.y, viewport2.z, viewport2.w); + currentViewport.copy(viewport2); + } + } + __name(viewport, "viewport"); + function updateUBOMapping(uniformsGroup, program) { + let mapping = uboProgramMap.get(program); + if (mapping === void 0) { + mapping = /* @__PURE__ */ new WeakMap(); + uboProgramMap.set(program, mapping); + } + let blockIndex = mapping.get(uniformsGroup); + if (blockIndex === void 0) { + blockIndex = gl.getUniformBlockIndex(program, uniformsGroup.name); + mapping.set(uniformsGroup, blockIndex); + } + } + __name(updateUBOMapping, "updateUBOMapping"); + function uniformBlockBinding(uniformsGroup, program) { + const mapping = uboProgramMap.get(program); + const blockIndex = mapping.get(uniformsGroup); + if (uboBindings.get(program) !== blockIndex) { + gl.uniformBlockBinding(program, blockIndex, uniformsGroup.__bindingPointIndex); + uboBindings.set(program, blockIndex); + } + } + __name(uniformBlockBinding, "uniformBlockBinding"); + function reset() { + gl.disable(gl.BLEND); + gl.disable(gl.CULL_FACE); + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.disable(gl.SCISSOR_TEST); + gl.disable(gl.STENCIL_TEST); + gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE); + gl.blendEquation(gl.FUNC_ADD); + gl.blendFunc(gl.ONE, gl.ZERO); + gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); + gl.blendColor(0, 0, 0, 0); + gl.colorMask(true, true, true, true); + gl.clearColor(0, 0, 0, 0); + gl.depthMask(true); + gl.depthFunc(gl.LESS); + depthBuffer.setReversed(false); + gl.clearDepth(1); + gl.stencilMask(4294967295); + gl.stencilFunc(gl.ALWAYS, 0, 4294967295); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + gl.clearStencil(0); + gl.cullFace(gl.BACK); + gl.frontFace(gl.CCW); + gl.polygonOffset(0, 0); + gl.activeTexture(gl.TEXTURE0); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null); + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); + gl.useProgram(null); + gl.lineWidth(1); + gl.scissor(0, 0, gl.canvas.width, gl.canvas.height); + gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); + enabledCapabilities = {}; + currentTextureSlot = null; + currentBoundTextures = {}; + currentBoundFramebuffers = {}; + currentDrawbuffers = /* @__PURE__ */ new WeakMap(); + defaultDrawbuffers = []; + currentProgram = null; + currentBlendingEnabled = false; + currentBlending = null; + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentBlendColor = new Color(0, 0, 0); + currentBlendAlpha = 0; + currentPremultipledAlpha = false; + currentFlipSided = null; + currentCullFace = null; + currentLineWidth = null; + currentPolygonOffsetFactor = null; + currentPolygonOffsetUnits = null; + currentScissor.set(0, 0, gl.canvas.width, gl.canvas.height); + currentViewport.set(0, 0, gl.canvas.width, gl.canvas.height); + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + } + __name(reset, "reset"); + return { + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + enable, + disable, + bindFramebuffer, + drawBuffers, + useProgram, + setBlending, + setMaterial, + setFlipSided, + setCullFace, + setLineWidth, + setPolygonOffset, + setScissorTest, + activeTexture, + bindTexture, + unbindTexture, + compressedTexImage2D, + compressedTexImage3D, + texImage2D, + texImage3D, + updateUBOMapping, + uniformBlockBinding, + texStorage2D, + texStorage3D, + texSubImage2D, + texSubImage3D, + compressedTexSubImage2D, + compressedTexSubImage3D, + scissor, + viewport, + reset + }; +} +__name(WebGLState, "WebGLState"); +function contain(texture, aspect2) { + const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; + if (imageAspect > aspect2) { + texture.repeat.x = 1; + texture.repeat.y = imageAspect / aspect2; + texture.offset.x = 0; + texture.offset.y = (1 - texture.repeat.y) / 2; + } else { + texture.repeat.x = aspect2 / imageAspect; + texture.repeat.y = 1; + texture.offset.x = (1 - texture.repeat.x) / 2; + texture.offset.y = 0; + } + return texture; +} +__name(contain, "contain"); +function cover(texture, aspect2) { + const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; + if (imageAspect > aspect2) { + texture.repeat.x = aspect2 / imageAspect; + texture.repeat.y = 1; + texture.offset.x = (1 - texture.repeat.x) / 2; + texture.offset.y = 0; + } else { + texture.repeat.x = 1; + texture.repeat.y = imageAspect / aspect2; + texture.offset.x = 0; + texture.offset.y = (1 - texture.repeat.y) / 2; + } + return texture; +} +__name(cover, "cover"); +function fill(texture) { + texture.repeat.x = 1; + texture.repeat.y = 1; + texture.offset.x = 0; + texture.offset.y = 0; + return texture; +} +__name(fill, "fill"); +function getByteLength(width, height, format, type) { + const typeByteLength = getTextureTypeByteLength(type); + switch (format) { + case AlphaFormat: + return width * height; + case LuminanceFormat: + return width * height; + case LuminanceAlphaFormat: + return width * height * 2; + case RedFormat: + return width * height / typeByteLength.components * typeByteLength.byteLength; + case RedIntegerFormat: + return width * height / typeByteLength.components * typeByteLength.byteLength; + case RGFormat: + return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; + case RGIntegerFormat: + return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; + case RGBFormat: + return width * height * 3 / typeByteLength.components * typeByteLength.byteLength; + case RGBAFormat: + return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; + case RGBAIntegerFormat: + return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; + case RGB_S3TC_DXT1_Format: + case RGBA_S3TC_DXT1_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; + case RGBA_S3TC_DXT3_Format: + case RGBA_S3TC_DXT5_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGB_PVRTC_2BPPV1_Format: + case RGBA_PVRTC_2BPPV1_Format: + return Math.max(width, 16) * Math.max(height, 8) / 4; + case RGB_PVRTC_4BPPV1_Format: + case RGBA_PVRTC_4BPPV1_Format: + return Math.max(width, 8) * Math.max(height, 8) / 2; + case RGB_ETC1_Format: + case RGB_ETC2_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; + case RGBA_ETC2_EAC_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_4x4_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_5x4_Format: + return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_5x5_Format: + return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_6x5_Format: + return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_6x6_Format: + return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_8x5_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_8x6_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_8x8_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16; + case RGBA_ASTC_10x5_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_10x6_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_10x8_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16; + case RGBA_ASTC_10x10_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16; + case RGBA_ASTC_12x10_Format: + return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16; + case RGBA_ASTC_12x12_Format: + return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16; + case RGBA_BPTC_Format: + case RGB_BPTC_SIGNED_Format: + case RGB_BPTC_UNSIGNED_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; + case RED_RGTC1_Format: + case SIGNED_RED_RGTC1_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 8; + case RED_GREEN_RGTC2_Format: + case SIGNED_RED_GREEN_RGTC2_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; + } + throw new Error( + `Unable to determine texture byte length for ${format} format.` + ); +} +__name(getByteLength, "getByteLength"); +function getTextureTypeByteLength(type) { + switch (type) { + case UnsignedByteType: + case ByteType: + return { byteLength: 1, components: 1 }; + case UnsignedShortType: + case ShortType: + case HalfFloatType: + return { byteLength: 2, components: 1 }; + case UnsignedShort4444Type: + case UnsignedShort5551Type: + return { byteLength: 2, components: 4 }; + case UnsignedIntType: + case IntType: + case FloatType: + return { byteLength: 4, components: 1 }; + case UnsignedInt5999Type: + return { byteLength: 4, components: 3 }; + } + throw new Error(`Unknown texture type ${type}.`); +} +__name(getTextureTypeByteLength, "getTextureTypeByteLength"); +const TextureUtils = { + contain, + cover, + fill, + getByteLength +}; +function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) { + const multisampledRTTExt = extensions.has("WEBGL_multisampled_render_to_texture") ? extensions.get("WEBGL_multisampled_render_to_texture") : null; + const supportsInvalidateFramebuffer = typeof navigator === "undefined" ? false : /OculusBrowser/g.test(navigator.userAgent); + const _imageDimensions = new Vector2(); + const _videoTextures = /* @__PURE__ */ new WeakMap(); + let _canvas2; + const _sources = /* @__PURE__ */ new WeakMap(); + let useOffscreenCanvas = false; + try { + useOffscreenCanvas = typeof OffscreenCanvas !== "undefined" && new OffscreenCanvas(1, 1).getContext("2d") !== null; + } catch (err2) { + } + function createCanvas(width, height) { + return useOffscreenCanvas ? ( + // eslint-disable-next-line compat/compat + new OffscreenCanvas(width, height) + ) : createElementNS("canvas"); + } + __name(createCanvas, "createCanvas"); + function resizeImage(image, needsNewCanvas, maxSize) { + let scale = 1; + const dimensions = getDimensions(image); + if (dimensions.width > maxSize || dimensions.height > maxSize) { + scale = maxSize / Math.max(dimensions.width, dimensions.height); + } + if (scale < 1) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap || typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { + const width = Math.floor(scale * dimensions.width); + const height = Math.floor(scale * dimensions.height); + if (_canvas2 === void 0) _canvas2 = createCanvas(width, height); + const canvas = needsNewCanvas ? createCanvas(width, height) : _canvas2; + canvas.width = width; + canvas.height = height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, width, height); + console.warn("THREE.WebGLRenderer: Texture has been resized from (" + dimensions.width + "x" + dimensions.height + ") to (" + width + "x" + height + ")."); + return canvas; + } else { + if ("data" in image) { + console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + dimensions.width + "x" + dimensions.height + ")."); + } + return image; + } + } + return image; + } + __name(resizeImage, "resizeImage"); + function textureNeedsGenerateMipmaps(texture) { + return texture.generateMipmaps; + } + __name(textureNeedsGenerateMipmaps, "textureNeedsGenerateMipmaps"); + function generateMipmap(target) { + _gl.generateMipmap(target); + } + __name(generateMipmap, "generateMipmap"); + function getTargetType(texture) { + if (texture.isWebGLCubeRenderTarget) return _gl.TEXTURE_CUBE_MAP; + if (texture.isWebGL3DRenderTarget) return _gl.TEXTURE_3D; + if (texture.isWebGLArrayRenderTarget || texture.isCompressedArrayTexture) return _gl.TEXTURE_2D_ARRAY; + return _gl.TEXTURE_2D; + } + __name(getTargetType, "getTargetType"); + function getInternalFormat(internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false) { + if (internalFormatName !== null) { + if (_gl[internalFormatName] !== void 0) return _gl[internalFormatName]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + internalFormatName + "'"); + } + let internalFormat = glFormat; + if (glFormat === _gl.RED) { + if (glType === _gl.FLOAT) internalFormat = _gl.R32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.R16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8; + } + if (glFormat === _gl.RED_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.R16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.R32UI; + if (glType === _gl.BYTE) internalFormat = _gl.R8I; + if (glType === _gl.SHORT) internalFormat = _gl.R16I; + if (glType === _gl.INT) internalFormat = _gl.R32I; + } + if (glFormat === _gl.RG) { + if (glType === _gl.FLOAT) internalFormat = _gl.RG32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RG16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8; + } + if (glFormat === _gl.RG_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.RG16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.RG32UI; + if (glType === _gl.BYTE) internalFormat = _gl.RG8I; + if (glType === _gl.SHORT) internalFormat = _gl.RG16I; + if (glType === _gl.INT) internalFormat = _gl.RG32I; + } + if (glFormat === _gl.RGB_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RGB8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.RGB16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.RGB32UI; + if (glType === _gl.BYTE) internalFormat = _gl.RGB8I; + if (glType === _gl.SHORT) internalFormat = _gl.RGB16I; + if (glType === _gl.INT) internalFormat = _gl.RGB32I; + } + if (glFormat === _gl.RGBA_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RGBA8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.RGBA16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.RGBA32UI; + if (glType === _gl.BYTE) internalFormat = _gl.RGBA8I; + if (glType === _gl.SHORT) internalFormat = _gl.RGBA16I; + if (glType === _gl.INT) internalFormat = _gl.RGBA32I; + } + if (glFormat === _gl.RGB) { + if (glType === _gl.UNSIGNED_INT_5_9_9_9_REV) internalFormat = _gl.RGB9_E5; + } + if (glFormat === _gl.RGBA) { + const transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer(colorSpace); + if (glType === _gl.FLOAT) internalFormat = _gl.RGBA32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RGBA16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = transfer === SRGBTransfer ? _gl.SRGB8_ALPHA8 : _gl.RGBA8; + if (glType === _gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = _gl.RGBA4; + if (glType === _gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = _gl.RGB5_A1; + } + if (internalFormat === _gl.R16F || internalFormat === _gl.R32F || internalFormat === _gl.RG16F || internalFormat === _gl.RG32F || internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F) { + extensions.get("EXT_color_buffer_float"); + } + return internalFormat; + } + __name(getInternalFormat, "getInternalFormat"); + function getInternalDepthFormat(useStencil, depthType) { + let glInternalFormat; + if (useStencil) { + if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { + glInternalFormat = _gl.DEPTH24_STENCIL8; + } else if (depthType === FloatType) { + glInternalFormat = _gl.DEPTH32F_STENCIL8; + } else if (depthType === UnsignedShortType) { + glInternalFormat = _gl.DEPTH24_STENCIL8; + console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment."); + } + } else { + if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { + glInternalFormat = _gl.DEPTH_COMPONENT24; + } else if (depthType === FloatType) { + glInternalFormat = _gl.DEPTH_COMPONENT32F; + } else if (depthType === UnsignedShortType) { + glInternalFormat = _gl.DEPTH_COMPONENT16; + } + } + return glInternalFormat; + } + __name(getInternalDepthFormat, "getInternalDepthFormat"); + function getMipLevels(texture, image) { + if (textureNeedsGenerateMipmaps(texture) === true || texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) { + return Math.log2(Math.max(image.width, image.height)) + 1; + } else if (texture.mipmaps !== void 0 && texture.mipmaps.length > 0) { + return texture.mipmaps.length; + } else if (texture.isCompressedTexture && Array.isArray(texture.image)) { + return image.mipmaps.length; + } else { + return 1; + } + } + __name(getMipLevels, "getMipLevels"); + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + deallocateTexture(texture); + if (texture.isVideoTexture) { + _videoTextures.delete(texture); + } + } + __name(onTextureDispose, "onTextureDispose"); + function onRenderTargetDispose(event) { + const renderTarget = event.target; + renderTarget.removeEventListener("dispose", onRenderTargetDispose); + deallocateRenderTarget(renderTarget); + } + __name(onRenderTargetDispose, "onRenderTargetDispose"); + function deallocateTexture(texture) { + const textureProperties = properties.get(texture); + if (textureProperties.__webglInit === void 0) return; + const source = texture.source; + const webglTextures = _sources.get(source); + if (webglTextures) { + const webglTexture = webglTextures[textureProperties.__cacheKey]; + webglTexture.usedTimes--; + if (webglTexture.usedTimes === 0) { + deleteTexture(texture); + } + if (Object.keys(webglTextures).length === 0) { + _sources.delete(source); + } + } + properties.remove(texture); + } + __name(deallocateTexture, "deallocateTexture"); + function deleteTexture(texture) { + const textureProperties = properties.get(texture); + _gl.deleteTexture(textureProperties.__webglTexture); + const source = texture.source; + const webglTextures = _sources.get(source); + delete webglTextures[textureProperties.__cacheKey]; + info.memory.textures--; + } + __name(deleteTexture, "deleteTexture"); + function deallocateRenderTarget(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + if (renderTarget.depthTexture) { + renderTarget.depthTexture.dispose(); + properties.remove(renderTarget.depthTexture); + } + if (renderTarget.isWebGLCubeRenderTarget) { + for (let i = 0; i < 6; i++) { + if (Array.isArray(renderTargetProperties.__webglFramebuffer[i])) { + for (let level = 0; level < renderTargetProperties.__webglFramebuffer[i].length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i][level]); + } else { + _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]); + } + if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]); + } + } else { + if (Array.isArray(renderTargetProperties.__webglFramebuffer)) { + for (let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[level]); + } else { + _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer); + } + if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer); + if (renderTargetProperties.__webglMultisampledFramebuffer) _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer); + if (renderTargetProperties.__webglColorRenderbuffer) { + for (let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i++) { + if (renderTargetProperties.__webglColorRenderbuffer[i]) _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer[i]); + } + } + if (renderTargetProperties.__webglDepthRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer); + } + const textures = renderTarget.textures; + for (let i = 0, il = textures.length; i < il; i++) { + const attachmentProperties = properties.get(textures[i]); + if (attachmentProperties.__webglTexture) { + _gl.deleteTexture(attachmentProperties.__webglTexture); + info.memory.textures--; + } + properties.remove(textures[i]); + } + properties.remove(renderTarget); + } + __name(deallocateRenderTarget, "deallocateRenderTarget"); + let textureUnits = 0; + function resetTextureUnits() { + textureUnits = 0; + } + __name(resetTextureUnits, "resetTextureUnits"); + function allocateTextureUnit() { + const textureUnit = textureUnits; + if (textureUnit >= capabilities.maxTextures) { + console.warn("THREE.WebGLTextures: Trying to use " + textureUnit + " texture units while this GPU supports only " + capabilities.maxTextures); + } + textureUnits += 1; + return textureUnit; + } + __name(allocateTextureUnit, "allocateTextureUnit"); + function getTextureCacheKey(texture) { + const array = []; + array.push(texture.wrapS); + array.push(texture.wrapT); + array.push(texture.wrapR || 0); + array.push(texture.magFilter); + array.push(texture.minFilter); + array.push(texture.anisotropy); + array.push(texture.internalFormat); + array.push(texture.format); + array.push(texture.type); + array.push(texture.generateMipmaps); + array.push(texture.premultiplyAlpha); + array.push(texture.flipY); + array.push(texture.unpackAlignment); + array.push(texture.colorSpace); + return array.join(); + } + __name(getTextureCacheKey, "getTextureCacheKey"); + function setTexture2D(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.isVideoTexture) updateVideoTexture(texture); + if (texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version) { + const image = texture.image; + if (image === null) { + console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found."); + } else if (image.complete === false) { + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete"); + } else { + uploadTexture(textureProperties, texture, slot); + return; + } + } + state.bindTexture(_gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + __name(setTexture2D, "setTexture2D"); + function setTexture2DArray(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + __name(setTexture2DArray, "setTexture2DArray"); + function setTexture3D(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + __name(setTexture3D, "setTexture3D"); + function setTextureCube(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadCubeTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + __name(setTextureCube, "setTextureCube"); + const wrappingToGL = { + [RepeatWrapping]: _gl.REPEAT, + [ClampToEdgeWrapping]: _gl.CLAMP_TO_EDGE, + [MirroredRepeatWrapping]: _gl.MIRRORED_REPEAT + }; + const filterToGL = { + [NearestFilter]: _gl.NEAREST, + [NearestMipmapNearestFilter]: _gl.NEAREST_MIPMAP_NEAREST, + [NearestMipmapLinearFilter]: _gl.NEAREST_MIPMAP_LINEAR, + [LinearFilter]: _gl.LINEAR, + [LinearMipmapNearestFilter]: _gl.LINEAR_MIPMAP_NEAREST, + [LinearMipmapLinearFilter]: _gl.LINEAR_MIPMAP_LINEAR + }; + const compareToGL = { + [NeverCompare]: _gl.NEVER, + [AlwaysCompare]: _gl.ALWAYS, + [LessCompare]: _gl.LESS, + [LessEqualCompare]: _gl.LEQUAL, + [EqualCompare]: _gl.EQUAL, + [GreaterEqualCompare]: _gl.GEQUAL, + [GreaterCompare]: _gl.GREATER, + [NotEqualCompare]: _gl.NOTEQUAL + }; + function setTextureParameters(textureType, texture) { + if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false && (texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter || texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter)) { + console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."); + } + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]); + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]); + if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) { + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]); + } + _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]); + _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]); + if (texture.compareFunction) { + _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE); + _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[texture.compareFunction]); + } + if (extensions.has("EXT_texture_filter_anisotropic") === true) { + if (texture.magFilter === NearestFilter) return; + if (texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter) return; + if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false) return; + if (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) { + const extension = extensions.get("EXT_texture_filter_anisotropic"); + _gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy())); + properties.get(texture).__currentAnisotropy = texture.anisotropy; + } + } + } + __name(setTextureParameters, "setTextureParameters"); + function initTexture(textureProperties, texture) { + let forceUpload = false; + if (textureProperties.__webglInit === void 0) { + textureProperties.__webglInit = true; + texture.addEventListener("dispose", onTextureDispose); + } + const source = texture.source; + let webglTextures = _sources.get(source); + if (webglTextures === void 0) { + webglTextures = {}; + _sources.set(source, webglTextures); + } + const textureCacheKey = getTextureCacheKey(texture); + if (textureCacheKey !== textureProperties.__cacheKey) { + if (webglTextures[textureCacheKey] === void 0) { + webglTextures[textureCacheKey] = { + texture: _gl.createTexture(), + usedTimes: 0 + }; + info.memory.textures++; + forceUpload = true; + } + webglTextures[textureCacheKey].usedTimes++; + const webglTexture = webglTextures[textureProperties.__cacheKey]; + if (webglTexture !== void 0) { + webglTextures[textureProperties.__cacheKey].usedTimes--; + if (webglTexture.usedTimes === 0) { + deleteTexture(texture); + } + } + textureProperties.__cacheKey = textureCacheKey; + textureProperties.__webglTexture = webglTextures[textureCacheKey].texture; + } + return forceUpload; + } + __name(initTexture, "initTexture"); + function uploadTexture(textureProperties, texture, slot) { + let textureType = _gl.TEXTURE_2D; + if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) textureType = _gl.TEXTURE_2D_ARRAY; + if (texture.isData3DTexture) textureType = _gl.TEXTURE_3D; + const forceUpload = initTexture(textureProperties, texture); + const source = texture.source; + state.bindTexture(textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + const sourceProperties = properties.get(source); + if (source.version !== sourceProperties.__version || forceUpload === true) { + state.activeTexture(_gl.TEXTURE0 + slot); + const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); + const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); + const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); + _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); + let image = resizeImage(texture.image, false, capabilities.maxTextureSize); + image = verifyColorSpace(texture, image); + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + let glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture); + setTextureParameters(textureType, texture); + let mipmap; + const mipmaps = texture.mipmaps; + const useTexStorage = texture.isVideoTexture !== true; + const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; + const dataReady = source.dataReady; + const levels = getMipLevels(texture, image); + if (texture.isDepthTexture) { + glInternalFormat = getInternalDepthFormat(texture.format === DepthStencilFormat, texture.type); + if (allocateMemory) { + if (useTexStorage) { + state.texStorage2D(_gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height); + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null); + } + } + } else if (texture.isDataTexture) { + if (mipmaps.length > 0) { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + texture.generateMipmaps = false; + } else { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); + } + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data); + } + } + } else if (texture.isCompressedTexture) { + if (texture.isCompressedArrayTexture) { + if (useTexStorage && allocateMemory) { + state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height, image.depth); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + if (texture.layerUpdates.size > 0) { + const layerByteLength = getByteLength(mipmap.width, mipmap.height, texture.format, texture.type); + for (const layerIndex of texture.layerUpdates) { + const layerData = mipmap.data.subarray( + layerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT, + (layerIndex + 1) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT + ); + state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData); + } + texture.clearLayerUpdates(); + } else { + state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data); + } + } + } else { + state.compressedTexImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data); + } + } else { + state.texImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data); + } + } + } + } else { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + state.compressedTexSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); + } + } else { + state.compressedTexImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + } + } + } else if (texture.isDataArrayTexture) { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth); + } + if (dataReady) { + if (texture.layerUpdates.size > 0) { + const layerByteLength = getByteLength(image.width, image.height, texture.format, texture.type); + for (const layerIndex of texture.layerUpdates) { + const layerData = image.data.subarray( + layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT, + (layerIndex + 1) * layerByteLength / image.data.BYTES_PER_ELEMENT + ); + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData); + } + texture.clearLayerUpdates(); + } else { + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); + } + } + } else { + state.texImage3D(_gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); + } + } else if (texture.isData3DTexture) { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage3D(_gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth); + } + if (dataReady) { + state.texSubImage3D(_gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); + } + } else { + state.texImage3D(_gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); + } + } else if (texture.isFramebufferTexture) { + if (allocateMemory) { + if (useTexStorage) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); + } else { + let width = image.width, height = image.height; + for (let i = 0; i < levels; i++) { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null); + width >>= 1; + height >>= 1; + } + } + } + } else { + if (mipmaps.length > 0) { + if (useTexStorage && allocateMemory) { + const dimensions = getDimensions(mipmaps[0]); + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap); + } + } + texture.generateMipmaps = false; + } else { + if (useTexStorage) { + if (allocateMemory) { + const dimensions = getDimensions(image); + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); + } + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image); + } + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(textureType); + } + sourceProperties.__version = source.version; + if (texture.onUpdate) texture.onUpdate(texture); + } + textureProperties.__version = texture.version; + } + __name(uploadTexture, "uploadTexture"); + function uploadCubeTexture(textureProperties, texture, slot) { + if (texture.image.length !== 6) return; + const forceUpload = initTexture(textureProperties, texture); + const source = texture.source; + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + const sourceProperties = properties.get(source); + if (source.version !== sourceProperties.__version || forceUpload === true) { + state.activeTexture(_gl.TEXTURE0 + slot); + const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); + const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); + const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); + _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); + const isCompressed = texture.isCompressedTexture || texture.image[0].isCompressedTexture; + const isDataTexture = texture.image[0] && texture.image[0].isDataTexture; + const cubeImage = []; + for (let i = 0; i < 6; i++) { + if (!isCompressed && !isDataTexture) { + cubeImage[i] = resizeImage(texture.image[i], true, capabilities.maxCubemapSize); + } else { + cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i]; + } + cubeImage[i] = verifyColorSpace(texture, cubeImage[i]); + } + const image = cubeImage[0], glFormat = utils.convert(texture.format, texture.colorSpace), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const useTexStorage = texture.isVideoTexture !== true; + const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; + const dataReady = source.dataReady; + let levels = getMipLevels(texture, image); + setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); + let mipmaps; + if (isCompressed) { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height); + } + for (let i = 0; i < 6; i++) { + mipmaps = cubeImage[i].mipmaps; + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + state.compressedTexSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); + } + } else { + state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + } + } + } else { + mipmaps = texture.mipmaps; + if (useTexStorage && allocateMemory) { + if (mipmaps.length > 0) levels++; + const dimensions = getDimensions(cubeImage[0]); + state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height); + } + for (let i = 0; i < 6; i++) { + if (isDataTexture) { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[i].width, cubeImage[i].height, glFormat, glType, cubeImage[i].data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[i].width, cubeImage[i].height, 0, glFormat, glType, cubeImage[i].data); + } + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + const mipmapImage = mipmap.image[i].image; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data); + } + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[i]); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[i]); + } + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[i]); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[i]); + } + } + } + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(_gl.TEXTURE_CUBE_MAP); + } + sourceProperties.__version = source.version; + if (texture.onUpdate) texture.onUpdate(texture); + } + textureProperties.__version = texture.version; + } + __name(uploadCubeTexture, "uploadCubeTexture"); + function setupFrameBufferTexture(framebuffer, renderTarget, texture, attachment, textureTarget, level) { + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const renderTargetProperties = properties.get(renderTarget); + const textureProperties = properties.get(texture); + textureProperties.__renderTarget = renderTarget; + if (!renderTargetProperties.__hasExternalTextures) { + const width = Math.max(1, renderTarget.width >> level); + const height = Math.max(1, renderTarget.height >> level); + if (textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY) { + state.texImage3D(textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null); + } else { + state.texImage2D(textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null); + } + } + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, 0, getRenderTargetSamples(renderTarget)); + } else if (textureTarget === _gl.TEXTURE_2D || textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, level); + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + __name(setupFrameBufferTexture, "setupFrameBufferTexture"); + function setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) { + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); + if (renderTarget.depthBuffer) { + const depthTexture = renderTarget.depthTexture; + const depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null; + const glInternalFormat = getInternalDepthFormat(renderTarget.stencilBuffer, depthType); + const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const samples = getRenderTargetSamples(renderTarget); + const isUseMultisampledRTT = useMultisampledRTT(renderTarget); + if (isUseMultisampledRTT) { + multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else if (isMultisample) { + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else { + _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); + } + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer); + } else { + const textures = renderTarget.textures; + for (let i = 0; i < textures.length; i++) { + const texture = textures[i]; + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const samples = getRenderTargetSamples(renderTarget); + if (isMultisample && useMultisampledRTT(renderTarget) === false) { + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else { + _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); + } + } + } + _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); + } + __name(setupRenderBufferStorage, "setupRenderBufferStorage"); + function setupDepthTexture(framebuffer, renderTarget) { + const isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget; + if (isCube) throw new Error("Depth Texture with cube render targets is not supported"); + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) { + throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + } + const textureProperties = properties.get(renderTarget.depthTexture); + textureProperties.__renderTarget = renderTarget; + if (!textureProperties.__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) { + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + } + setTexture2D(renderTarget.depthTexture, 0); + const webglDepthTexture = textureProperties.__webglTexture; + const samples = getRenderTargetSamples(renderTarget); + if (renderTarget.depthTexture.format === DepthFormat) { + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); + } else { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); + } + } else if (renderTarget.depthTexture.format === DepthStencilFormat) { + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); + } else { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); + } + } else { + throw new Error("Unknown depthTexture format"); + } + } + __name(setupDepthTexture, "setupDepthTexture"); + function setupDepthRenderbuffer(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + const isCube = renderTarget.isWebGLCubeRenderTarget === true; + if (renderTargetProperties.__boundDepthTexture !== renderTarget.depthTexture) { + const depthTexture = renderTarget.depthTexture; + if (renderTargetProperties.__depthDisposeCallback) { + renderTargetProperties.__depthDisposeCallback(); + } + if (depthTexture) { + const disposeEvent = /* @__PURE__ */ __name(() => { + delete renderTargetProperties.__boundDepthTexture; + delete renderTargetProperties.__depthDisposeCallback; + depthTexture.removeEventListener("dispose", disposeEvent); + }, "disposeEvent"); + depthTexture.addEventListener("dispose", disposeEvent); + renderTargetProperties.__depthDisposeCallback = disposeEvent; + } + renderTargetProperties.__boundDepthTexture = depthTexture; + } + if (renderTarget.depthTexture && !renderTargetProperties.__autoAllocateDepthBuffer) { + if (isCube) throw new Error("target.depthTexture not supported in Cube render targets"); + setupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget); + } else { + if (isCube) { + renderTargetProperties.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[i]); + if (renderTargetProperties.__webglDepthbuffer[i] === void 0) { + renderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false); + } else { + const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const renderbuffer = renderTargetProperties.__webglDepthbuffer[i]; + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer); + } + } + } else { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + if (renderTargetProperties.__webglDepthbuffer === void 0) { + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false); + } else { + const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const renderbuffer = renderTargetProperties.__webglDepthbuffer; + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer); + } + } + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + __name(setupDepthRenderbuffer, "setupDepthRenderbuffer"); + function rebindTextures(renderTarget, colorTexture, depthTexture) { + const renderTargetProperties = properties.get(renderTarget); + if (colorTexture !== void 0) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0); + } + if (depthTexture !== void 0) { + setupDepthRenderbuffer(renderTarget); + } + } + __name(rebindTextures, "rebindTextures"); + function setupRenderTarget(renderTarget) { + const texture = renderTarget.texture; + const renderTargetProperties = properties.get(renderTarget); + const textureProperties = properties.get(texture); + renderTarget.addEventListener("dispose", onRenderTargetDispose); + const textures = renderTarget.textures; + const isCube = renderTarget.isWebGLCubeRenderTarget === true; + const isMultipleRenderTargets = textures.length > 1; + if (!isMultipleRenderTargets) { + if (textureProperties.__webglTexture === void 0) { + textureProperties.__webglTexture = _gl.createTexture(); + } + textureProperties.__version = texture.version; + info.memory.textures++; + } + if (isCube) { + renderTargetProperties.__webglFramebuffer = []; + for (let i = 0; i < 6; i++) { + if (texture.mipmaps && texture.mipmaps.length > 0) { + renderTargetProperties.__webglFramebuffer[i] = []; + for (let level = 0; level < texture.mipmaps.length; level++) { + renderTargetProperties.__webglFramebuffer[i][level] = _gl.createFramebuffer(); + } + } else { + renderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer(); + } + } + } else { + if (texture.mipmaps && texture.mipmaps.length > 0) { + renderTargetProperties.__webglFramebuffer = []; + for (let level = 0; level < texture.mipmaps.length; level++) { + renderTargetProperties.__webglFramebuffer[level] = _gl.createFramebuffer(); + } + } else { + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + } + if (isMultipleRenderTargets) { + for (let i = 0, il = textures.length; i < il; i++) { + const attachmentProperties = properties.get(textures[i]); + if (attachmentProperties.__webglTexture === void 0) { + attachmentProperties.__webglTexture = _gl.createTexture(); + info.memory.textures++; + } + } + } + if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = []; + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + for (let i = 0; i < textures.length; i++) { + const texture2 = textures[i]; + renderTargetProperties.__webglColorRenderbuffer[i] = _gl.createRenderbuffer(); + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const glFormat = utils.convert(texture2.format, texture2.colorSpace); + const glType = utils.convert(texture2.type); + const glInternalFormat = getInternalFormat(texture2.internalFormat, glFormat, glType, texture2.colorSpace, renderTarget.isXRRenderTarget === true); + const samples = getRenderTargetSamples(renderTarget); + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + } + _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); + if (renderTarget.depthBuffer) { + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true); + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + } + if (isCube) { + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); + setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); + for (let i = 0; i < 6; i++) { + if (texture.mipmaps && texture.mipmaps.length > 0) { + for (let level = 0; level < texture.mipmaps.length; level++) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i][level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level); + } + } else { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0); + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(_gl.TEXTURE_CUBE_MAP); + } + state.unbindTexture(); + } else if (isMultipleRenderTargets) { + for (let i = 0, il = textures.length; i < il; i++) { + const attachment = textures[i]; + const attachmentProperties = properties.get(attachment); + state.bindTexture(_gl.TEXTURE_2D, attachmentProperties.__webglTexture); + setTextureParameters(_gl.TEXTURE_2D, attachment); + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0); + if (textureNeedsGenerateMipmaps(attachment)) { + generateMipmap(_gl.TEXTURE_2D); + } + } + state.unbindTexture(); + } else { + let glTextureType = _gl.TEXTURE_2D; + if (renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { + glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY; + } + state.bindTexture(glTextureType, textureProperties.__webglTexture); + setTextureParameters(glTextureType, texture); + if (texture.mipmaps && texture.mipmaps.length > 0) { + for (let level = 0; level < texture.mipmaps.length; level++) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level); + } + } else { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0); + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(glTextureType); + } + state.unbindTexture(); + } + if (renderTarget.depthBuffer) { + setupDepthRenderbuffer(renderTarget); + } + } + __name(setupRenderTarget, "setupRenderTarget"); + function updateRenderTargetMipmap(renderTarget) { + const textures = renderTarget.textures; + for (let i = 0, il = textures.length; i < il; i++) { + const texture = textures[i]; + if (textureNeedsGenerateMipmaps(texture)) { + const targetType = getTargetType(renderTarget); + const webglTexture = properties.get(texture).__webglTexture; + state.bindTexture(targetType, webglTexture); + generateMipmap(targetType); + state.unbindTexture(); + } + } + } + __name(updateRenderTargetMipmap, "updateRenderTargetMipmap"); + const invalidationArrayRead = []; + const invalidationArrayDraw = []; + function updateMultisampleRenderTarget(renderTarget) { + if (renderTarget.samples > 0) { + if (useMultisampledRTT(renderTarget) === false) { + const textures = renderTarget.textures; + const width = renderTarget.width; + const height = renderTarget.height; + let mask = _gl.COLOR_BUFFER_BIT; + const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const renderTargetProperties = properties.get(renderTarget); + const isMultipleRenderTargets = textures.length > 1; + if (isMultipleRenderTargets) { + for (let i = 0; i < textures.length; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null); + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0); + } + } + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + for (let i = 0; i < textures.length; i++) { + if (renderTarget.resolveDepthBuffer) { + if (renderTarget.depthBuffer) mask |= _gl.DEPTH_BUFFER_BIT; + if (renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer) mask |= _gl.STENCIL_BUFFER_BIT; + } + if (isMultipleRenderTargets) { + _gl.framebufferRenderbuffer(_gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const webglTexture = properties.get(textures[i]).__webglTexture; + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0); + } + _gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST); + if (supportsInvalidateFramebuffer === true) { + invalidationArrayRead.length = 0; + invalidationArrayDraw.length = 0; + invalidationArrayRead.push(_gl.COLOR_ATTACHMENT0 + i); + if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false) { + invalidationArrayRead.push(depthStyle); + invalidationArrayDraw.push(depthStyle); + _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, invalidationArrayDraw); + } + _gl.invalidateFramebuffer(_gl.READ_FRAMEBUFFER, invalidationArrayRead); + } + } + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, null); + if (isMultipleRenderTargets) { + for (let i = 0; i < textures.length; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const webglTexture = properties.get(textures[i]).__webglTexture; + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0); + } + } + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + } else { + if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer) { + const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, [depthStyle]); + } + } + } + } + __name(updateMultisampleRenderTarget, "updateMultisampleRenderTarget"); + function getRenderTargetSamples(renderTarget) { + return Math.min(capabilities.maxSamples, renderTarget.samples); + } + __name(getRenderTargetSamples, "getRenderTargetSamples"); + function useMultisampledRTT(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + return renderTarget.samples > 0 && extensions.has("WEBGL_multisampled_render_to_texture") === true && renderTargetProperties.__useRenderToTexture !== false; + } + __name(useMultisampledRTT, "useMultisampledRTT"); + function updateVideoTexture(texture) { + const frame = info.render.frame; + if (_videoTextures.get(texture) !== frame) { + _videoTextures.set(texture, frame); + texture.update(); + } + } + __name(updateVideoTexture, "updateVideoTexture"); + function verifyColorSpace(texture, image) { + const colorSpace = texture.colorSpace; + const format = texture.format; + const type = texture.type; + if (texture.isCompressedTexture === true || texture.isVideoTexture === true) return image; + if (colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace) { + if (ColorManagement.getTransfer(colorSpace) === SRGBTransfer) { + if (format !== RGBAFormat || type !== UnsignedByteType) { + console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."); + } + } else { + console.error("THREE.WebGLTextures: Unsupported texture color space:", colorSpace); + } + } + return image; + } + __name(verifyColorSpace, "verifyColorSpace"); + function getDimensions(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement) { + _imageDimensions.width = image.naturalWidth || image.width; + _imageDimensions.height = image.naturalHeight || image.height; + } else if (typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { + _imageDimensions.width = image.displayWidth; + _imageDimensions.height = image.displayHeight; + } else { + _imageDimensions.width = image.width; + _imageDimensions.height = image.height; + } + return _imageDimensions; + } + __name(getDimensions, "getDimensions"); + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.rebindTextures = rebindTextures; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + this.setupDepthRenderbuffer = setupDepthRenderbuffer; + this.setupFrameBufferTexture = setupFrameBufferTexture; + this.useMultisampledRTT = useMultisampledRTT; +} +__name(WebGLTextures, "WebGLTextures"); +function WebGLUtils(gl, extensions) { + function convert(p, colorSpace = NoColorSpace) { + let extension; + const transfer = ColorManagement.getTransfer(colorSpace); + if (p === UnsignedByteType) return gl.UNSIGNED_BYTE; + if (p === UnsignedShort4444Type) return gl.UNSIGNED_SHORT_4_4_4_4; + if (p === UnsignedShort5551Type) return gl.UNSIGNED_SHORT_5_5_5_1; + if (p === UnsignedInt5999Type) return gl.UNSIGNED_INT_5_9_9_9_REV; + if (p === ByteType) return gl.BYTE; + if (p === ShortType) return gl.SHORT; + if (p === UnsignedShortType) return gl.UNSIGNED_SHORT; + if (p === IntType) return gl.INT; + if (p === UnsignedIntType) return gl.UNSIGNED_INT; + if (p === FloatType) return gl.FLOAT; + if (p === HalfFloatType) return gl.HALF_FLOAT; + if (p === AlphaFormat) return gl.ALPHA; + if (p === RGBFormat) return gl.RGB; + if (p === RGBAFormat) return gl.RGBA; + if (p === LuminanceFormat) return gl.LUMINANCE; + if (p === LuminanceAlphaFormat) return gl.LUMINANCE_ALPHA; + if (p === DepthFormat) return gl.DEPTH_COMPONENT; + if (p === DepthStencilFormat) return gl.DEPTH_STENCIL; + if (p === RedFormat) return gl.RED; + if (p === RedIntegerFormat) return gl.RED_INTEGER; + if (p === RGFormat) return gl.RG; + if (p === RGIntegerFormat) return gl.RG_INTEGER; + if (p === RGBAIntegerFormat) return gl.RGBA_INTEGER; + if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { + if (transfer === SRGBTransfer) { + extension = extensions.get("WEBGL_compressed_texture_s3tc_srgb"); + if (extension !== null) { + if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; + } else { + return null; + } + } else { + extension = extensions.get("WEBGL_compressed_texture_s3tc"); + if (extension !== null) { + if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + } else { + return null; + } + } + } + if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { + extension = extensions.get("WEBGL_compressed_texture_pvrtc"); + if (extension !== null) { + if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + } else { + return null; + } + } + if (p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { + extension = extensions.get("WEBGL_compressed_texture_etc"); + if (extension !== null) { + if (p === RGB_ETC1_Format || p === RGB_ETC2_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; + if (p === RGBA_ETC2_EAC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; + } else { + return null; + } + } + if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { + extension = extensions.get("WEBGL_compressed_texture_astc"); + if (extension !== null) { + if (p === RGBA_ASTC_4x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; + if (p === RGBA_ASTC_5x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; + if (p === RGBA_ASTC_5x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; + if (p === RGBA_ASTC_6x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; + if (p === RGBA_ASTC_6x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; + if (p === RGBA_ASTC_8x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; + if (p === RGBA_ASTC_8x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; + if (p === RGBA_ASTC_8x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; + if (p === RGBA_ASTC_10x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; + if (p === RGBA_ASTC_10x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; + if (p === RGBA_ASTC_10x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; + if (p === RGBA_ASTC_10x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; + if (p === RGBA_ASTC_12x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; + if (p === RGBA_ASTC_12x12_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; + } else { + return null; + } + } + if (p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format) { + extension = extensions.get("EXT_texture_compression_bptc"); + if (extension !== null) { + if (p === RGBA_BPTC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; + if (p === RGB_BPTC_SIGNED_Format) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT; + if (p === RGB_BPTC_UNSIGNED_Format) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT; + } else { + return null; + } + } + if (p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format) { + extension = extensions.get("EXT_texture_compression_rgtc"); + if (extension !== null) { + if (p === RGBA_BPTC_Format) return extension.COMPRESSED_RED_RGTC1_EXT; + if (p === SIGNED_RED_RGTC1_Format) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT; + if (p === RED_GREEN_RGTC2_Format) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT; + if (p === SIGNED_RED_GREEN_RGTC2_Format) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT; + } else { + return null; + } + } + if (p === UnsignedInt248Type) return gl.UNSIGNED_INT_24_8; + return gl[p] !== void 0 ? gl[p] : null; + } + __name(convert, "convert"); + return { convert }; +} +__name(WebGLUtils, "WebGLUtils"); +class ArrayCamera extends PerspectiveCamera { + static { + __name(this, "ArrayCamera"); + } + constructor(array = []) { + super(); + this.isArrayCamera = true; + this.cameras = array; + } +} +class Group extends Object3D { + static { + __name(this, "Group"); + } + constructor() { + super(); + this.isGroup = true; + this.type = "Group"; + } +} +const _moveEvent = { type: "move" }; +class WebXRController { + static { + __name(this, "WebXRController"); + } + constructor() { + this._targetRay = null; + this._grip = null; + this._hand = null; + } + getHandSpace() { + if (this._hand === null) { + this._hand = new Group(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + this._hand.joints = {}; + this._hand.inputState = { pinching: false }; + } + return this._hand; + } + getTargetRaySpace() { + if (this._targetRay === null) { + this._targetRay = new Group(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + this._targetRay.hasLinearVelocity = false; + this._targetRay.linearVelocity = new Vector3(); + this._targetRay.hasAngularVelocity = false; + this._targetRay.angularVelocity = new Vector3(); + } + return this._targetRay; + } + getGripSpace() { + if (this._grip === null) { + this._grip = new Group(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + this._grip.hasLinearVelocity = false; + this._grip.linearVelocity = new Vector3(); + this._grip.hasAngularVelocity = false; + this._grip.angularVelocity = new Vector3(); + } + return this._grip; + } + dispatchEvent(event) { + if (this._targetRay !== null) { + this._targetRay.dispatchEvent(event); + } + if (this._grip !== null) { + this._grip.dispatchEvent(event); + } + if (this._hand !== null) { + this._hand.dispatchEvent(event); + } + return this; + } + connect(inputSource) { + if (inputSource && inputSource.hand) { + const hand = this._hand; + if (hand) { + for (const inputjoint of inputSource.hand.values()) { + this._getHandJoint(hand, inputjoint); + } + } + } + this.dispatchEvent({ type: "connected", data: inputSource }); + return this; + } + disconnect(inputSource) { + this.dispatchEvent({ type: "disconnected", data: inputSource }); + if (this._targetRay !== null) { + this._targetRay.visible = false; + } + if (this._grip !== null) { + this._grip.visible = false; + } + if (this._hand !== null) { + this._hand.visible = false; + } + return this; + } + update(inputSource, frame, referenceSpace) { + let inputPose = null; + let gripPose = null; + let handPose = null; + const targetRay = this._targetRay; + const grip = this._grip; + const hand = this._hand; + if (inputSource && frame.session.visibilityState !== "visible-blurred") { + if (hand && inputSource.hand) { + handPose = true; + for (const inputjoint of inputSource.hand.values()) { + const jointPose = frame.getJointPose(inputjoint, referenceSpace); + const joint = this._getHandJoint(hand, inputjoint); + if (jointPose !== null) { + joint.matrix.fromArray(jointPose.transform.matrix); + joint.matrix.decompose(joint.position, joint.rotation, joint.scale); + joint.matrixWorldNeedsUpdate = true; + joint.jointRadius = jointPose.radius; + } + joint.visible = jointPose !== null; + } + const indexTip = hand.joints["index-finger-tip"]; + const thumbTip = hand.joints["thumb-tip"]; + const distance = indexTip.position.distanceTo(thumbTip.position); + const distanceToPinch = 0.02; + const threshold = 5e-3; + if (hand.inputState.pinching && distance > distanceToPinch + threshold) { + hand.inputState.pinching = false; + this.dispatchEvent({ + type: "pinchend", + handedness: inputSource.handedness, + target: this + }); + } else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) { + hand.inputState.pinching = true; + this.dispatchEvent({ + type: "pinchstart", + handedness: inputSource.handedness, + target: this + }); + } + } else { + if (grip !== null && inputSource.gripSpace) { + gripPose = frame.getPose(inputSource.gripSpace, referenceSpace); + if (gripPose !== null) { + grip.matrix.fromArray(gripPose.transform.matrix); + grip.matrix.decompose(grip.position, grip.rotation, grip.scale); + grip.matrixWorldNeedsUpdate = true; + if (gripPose.linearVelocity) { + grip.hasLinearVelocity = true; + grip.linearVelocity.copy(gripPose.linearVelocity); + } else { + grip.hasLinearVelocity = false; + } + if (gripPose.angularVelocity) { + grip.hasAngularVelocity = true; + grip.angularVelocity.copy(gripPose.angularVelocity); + } else { + grip.hasAngularVelocity = false; + } + } + } + } + if (targetRay !== null) { + inputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace); + if (inputPose === null && gripPose !== null) { + inputPose = gripPose; + } + if (inputPose !== null) { + targetRay.matrix.fromArray(inputPose.transform.matrix); + targetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale); + targetRay.matrixWorldNeedsUpdate = true; + if (inputPose.linearVelocity) { + targetRay.hasLinearVelocity = true; + targetRay.linearVelocity.copy(inputPose.linearVelocity); + } else { + targetRay.hasLinearVelocity = false; + } + if (inputPose.angularVelocity) { + targetRay.hasAngularVelocity = true; + targetRay.angularVelocity.copy(inputPose.angularVelocity); + } else { + targetRay.hasAngularVelocity = false; + } + this.dispatchEvent(_moveEvent); + } + } + } + if (targetRay !== null) { + targetRay.visible = inputPose !== null; + } + if (grip !== null) { + grip.visible = gripPose !== null; + } + if (hand !== null) { + hand.visible = handPose !== null; + } + return this; + } + // private method + _getHandJoint(hand, inputjoint) { + if (hand.joints[inputjoint.jointName] === void 0) { + const joint = new Group(); + joint.matrixAutoUpdate = false; + joint.visible = false; + hand.joints[inputjoint.jointName] = joint; + hand.add(joint); + } + return hand.joints[inputjoint.jointName]; + } +} +const _occlusion_vertex = ` +void main() { + + gl_Position = vec4( position, 1.0 ); + +}`; +const _occlusion_fragment = ` +uniform sampler2DArray depthColor; +uniform float depthWidth; +uniform float depthHeight; + +void main() { + + vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); + + if ( coord.x >= 1.0 ) { + + gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; + + } else { + + gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; + + } + +}`; +class WebXRDepthSensing { + static { + __name(this, "WebXRDepthSensing"); + } + constructor() { + this.texture = null; + this.mesh = null; + this.depthNear = 0; + this.depthFar = 0; + } + init(renderer, depthData, renderState) { + if (this.texture === null) { + const texture = new Texture(); + const texProps = renderer.properties.get(texture); + texProps.__webglTexture = depthData.texture; + if (depthData.depthNear != renderState.depthNear || depthData.depthFar != renderState.depthFar) { + this.depthNear = depthData.depthNear; + this.depthFar = depthData.depthFar; + } + this.texture = texture; + } + } + getMesh(cameraXR) { + if (this.texture !== null) { + if (this.mesh === null) { + const viewport = cameraXR.cameras[0].viewport; + const material = new ShaderMaterial({ + vertexShader: _occlusion_vertex, + fragmentShader: _occlusion_fragment, + uniforms: { + depthColor: { value: this.texture }, + depthWidth: { value: viewport.z }, + depthHeight: { value: viewport.w } + } + }); + this.mesh = new Mesh(new PlaneGeometry(20, 20), material); + } + } + return this.mesh; + } + reset() { + this.texture = null; + this.mesh = null; + } + getDepthTexture() { + return this.texture; + } +} +class WebXRManager extends EventDispatcher { + static { + __name(this, "WebXRManager"); + } + constructor(renderer, gl) { + super(); + const scope = this; + let session = null; + let framebufferScaleFactor = 1; + let referenceSpace = null; + let referenceSpaceType = "local-floor"; + let foveation = 1; + let customReferenceSpace = null; + let pose = null; + let glBinding = null; + let glProjLayer = null; + let glBaseLayer = null; + let xrFrame = null; + const depthSensing = new WebXRDepthSensing(); + const attributes = gl.getContextAttributes(); + let initialRenderTarget = null; + let newRenderTarget = null; + const controllers = []; + const controllerInputSources = []; + const currentSize = new Vector2(); + let currentPixelRatio = null; + const cameraL = new PerspectiveCamera(); + cameraL.viewport = new Vector4(); + const cameraR = new PerspectiveCamera(); + cameraR.viewport = new Vector4(); + const cameras = [cameraL, cameraR]; + const cameraXR = new ArrayCamera(); + let _currentDepthNear = null; + let _currentDepthFar = null; + this.cameraAutoUpdate = true; + this.enabled = false; + this.isPresenting = false; + this.getController = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getTargetRaySpace(); + }; + this.getControllerGrip = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getGripSpace(); + }; + this.getHand = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getHandSpace(); + }; + function onSessionEvent(event) { + const controllerIndex = controllerInputSources.indexOf(event.inputSource); + if (controllerIndex === -1) { + return; + } + const controller = controllers[controllerIndex]; + if (controller !== void 0) { + controller.update(event.inputSource, event.frame, customReferenceSpace || referenceSpace); + controller.dispatchEvent({ type: event.type, data: event.inputSource }); + } + } + __name(onSessionEvent, "onSessionEvent"); + function onSessionEnd() { + session.removeEventListener("select", onSessionEvent); + session.removeEventListener("selectstart", onSessionEvent); + session.removeEventListener("selectend", onSessionEvent); + session.removeEventListener("squeeze", onSessionEvent); + session.removeEventListener("squeezestart", onSessionEvent); + session.removeEventListener("squeezeend", onSessionEvent); + session.removeEventListener("end", onSessionEnd); + session.removeEventListener("inputsourceschange", onInputSourcesChange); + for (let i = 0; i < controllers.length; i++) { + const inputSource = controllerInputSources[i]; + if (inputSource === null) continue; + controllerInputSources[i] = null; + controllers[i].disconnect(inputSource); + } + _currentDepthNear = null; + _currentDepthFar = null; + depthSensing.reset(); + renderer.setRenderTarget(initialRenderTarget); + glBaseLayer = null; + glProjLayer = null; + glBinding = null; + session = null; + newRenderTarget = null; + animation.stop(); + scope.isPresenting = false; + renderer.setPixelRatio(currentPixelRatio); + renderer.setSize(currentSize.width, currentSize.height, false); + scope.dispatchEvent({ type: "sessionend" }); + } + __name(onSessionEnd, "onSessionEnd"); + this.setFramebufferScaleFactor = function(value) { + framebufferScaleFactor = value; + if (scope.isPresenting === true) { + console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting."); + } + }; + this.setReferenceSpaceType = function(value) { + referenceSpaceType = value; + if (scope.isPresenting === true) { + console.warn("THREE.WebXRManager: Cannot change reference space type while presenting."); + } + }; + this.getReferenceSpace = function() { + return customReferenceSpace || referenceSpace; + }; + this.setReferenceSpace = function(space) { + customReferenceSpace = space; + }; + this.getBaseLayer = function() { + return glProjLayer !== null ? glProjLayer : glBaseLayer; + }; + this.getBinding = function() { + return glBinding; + }; + this.getFrame = function() { + return xrFrame; + }; + this.getSession = function() { + return session; + }; + this.setSession = async function(value) { + session = value; + if (session !== null) { + initialRenderTarget = renderer.getRenderTarget(); + session.addEventListener("select", onSessionEvent); + session.addEventListener("selectstart", onSessionEvent); + session.addEventListener("selectend", onSessionEvent); + session.addEventListener("squeeze", onSessionEvent); + session.addEventListener("squeezestart", onSessionEvent); + session.addEventListener("squeezeend", onSessionEvent); + session.addEventListener("end", onSessionEnd); + session.addEventListener("inputsourceschange", onInputSourcesChange); + if (attributes.xrCompatible !== true) { + await gl.makeXRCompatible(); + } + currentPixelRatio = renderer.getPixelRatio(); + renderer.getSize(currentSize); + if (session.renderState.layers === void 0) { + const layerInit = { + antialias: attributes.antialias, + alpha: true, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor + }; + glBaseLayer = new XRWebGLLayer(session, gl, layerInit); + session.updateRenderState({ baseLayer: glBaseLayer }); + renderer.setPixelRatio(1); + renderer.setSize(glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false); + newRenderTarget = new WebGLRenderTarget( + glBaseLayer.framebufferWidth, + glBaseLayer.framebufferHeight, + { + format: RGBAFormat, + type: UnsignedByteType, + colorSpace: renderer.outputColorSpace, + stencilBuffer: attributes.stencil + } + ); + } else { + let depthFormat = null; + let depthType = null; + let glDepthFormat = null; + if (attributes.depth) { + glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24; + depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat; + depthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType; + } + const projectionlayerInit = { + colorFormat: gl.RGBA8, + depthFormat: glDepthFormat, + scaleFactor: framebufferScaleFactor + }; + glBinding = new XRWebGLBinding(session, gl); + glProjLayer = glBinding.createProjectionLayer(projectionlayerInit); + session.updateRenderState({ layers: [glProjLayer] }); + renderer.setPixelRatio(1); + renderer.setSize(glProjLayer.textureWidth, glProjLayer.textureHeight, false); + newRenderTarget = new WebGLRenderTarget( + glProjLayer.textureWidth, + glProjLayer.textureHeight, + { + format: RGBAFormat, + type: UnsignedByteType, + depthTexture: new DepthTexture(glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, void 0, void 0, void 0, void 0, void 0, void 0, depthFormat), + stencilBuffer: attributes.stencil, + colorSpace: renderer.outputColorSpace, + samples: attributes.antialias ? 4 : 0, + resolveDepthBuffer: glProjLayer.ignoreDepthValues === false + } + ); + } + newRenderTarget.isXRRenderTarget = true; + this.setFoveation(foveation); + customReferenceSpace = null; + referenceSpace = await session.requestReferenceSpace(referenceSpaceType); + animation.setContext(session); + animation.start(); + scope.isPresenting = true; + scope.dispatchEvent({ type: "sessionstart" }); + } + }; + this.getEnvironmentBlendMode = function() { + if (session !== null) { + return session.environmentBlendMode; + } + }; + this.getDepthTexture = function() { + return depthSensing.getDepthTexture(); + }; + function onInputSourcesChange(event) { + for (let i = 0; i < event.removed.length; i++) { + const inputSource = event.removed[i]; + const index = controllerInputSources.indexOf(inputSource); + if (index >= 0) { + controllerInputSources[index] = null; + controllers[index].disconnect(inputSource); + } + } + for (let i = 0; i < event.added.length; i++) { + const inputSource = event.added[i]; + let controllerIndex = controllerInputSources.indexOf(inputSource); + if (controllerIndex === -1) { + for (let i2 = 0; i2 < controllers.length; i2++) { + if (i2 >= controllerInputSources.length) { + controllerInputSources.push(inputSource); + controllerIndex = i2; + break; + } else if (controllerInputSources[i2] === null) { + controllerInputSources[i2] = inputSource; + controllerIndex = i2; + break; + } + } + if (controllerIndex === -1) break; + } + const controller = controllers[controllerIndex]; + if (controller) { + controller.connect(inputSource); + } + } + } + __name(onInputSourcesChange, "onInputSourcesChange"); + const cameraLPos = new Vector3(); + const cameraRPos = new Vector3(); + function setProjectionFromUnion(camera, cameraL2, cameraR2) { + cameraLPos.setFromMatrixPosition(cameraL2.matrixWorld); + cameraRPos.setFromMatrixPosition(cameraR2.matrixWorld); + const ipd = cameraLPos.distanceTo(cameraRPos); + const projL = cameraL2.projectionMatrix.elements; + const projR = cameraR2.projectionMatrix.elements; + const near = projL[14] / (projL[10] - 1); + const far = projL[14] / (projL[10] + 1); + const topFov = (projL[9] + 1) / projL[5]; + const bottomFov = (projL[9] - 1) / projL[5]; + const leftFov = (projL[8] - 1) / projL[0]; + const rightFov = (projR[8] + 1) / projR[0]; + const left = near * leftFov; + const right = near * rightFov; + const zOffset = ipd / (-leftFov + rightFov); + const xOffset = zOffset * -leftFov; + cameraL2.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale); + camera.translateX(xOffset); + camera.translateZ(zOffset); + camera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale); + camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); + if (projL[10] === -1) { + camera.projectionMatrix.copy(cameraL2.projectionMatrix); + camera.projectionMatrixInverse.copy(cameraL2.projectionMatrixInverse); + } else { + const near2 = near + zOffset; + const far2 = far + zOffset; + const left2 = left - xOffset; + const right2 = right + (ipd - xOffset); + const top2 = topFov * far / far2 * near2; + const bottom2 = bottomFov * far / far2 * near2; + camera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2); + camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); + } + } + __name(setProjectionFromUnion, "setProjectionFromUnion"); + function updateCamera(camera, parent) { + if (parent === null) { + camera.matrixWorld.copy(camera.matrix); + } else { + camera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix); + } + camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); + } + __name(updateCamera, "updateCamera"); + this.updateCamera = function(camera) { + if (session === null) return; + let depthNear = camera.near; + let depthFar = camera.far; + if (depthSensing.texture !== null) { + if (depthSensing.depthNear > 0) depthNear = depthSensing.depthNear; + if (depthSensing.depthFar > 0) depthFar = depthSensing.depthFar; + } + cameraXR.near = cameraR.near = cameraL.near = depthNear; + cameraXR.far = cameraR.far = cameraL.far = depthFar; + if (_currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far) { + session.updateRenderState({ + depthNear: cameraXR.near, + depthFar: cameraXR.far + }); + _currentDepthNear = cameraXR.near; + _currentDepthFar = cameraXR.far; + } + cameraL.layers.mask = camera.layers.mask | 2; + cameraR.layers.mask = camera.layers.mask | 4; + cameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask; + const parent = camera.parent; + const cameras2 = cameraXR.cameras; + updateCamera(cameraXR, parent); + for (let i = 0; i < cameras2.length; i++) { + updateCamera(cameras2[i], parent); + } + if (cameras2.length === 2) { + setProjectionFromUnion(cameraXR, cameraL, cameraR); + } else { + cameraXR.projectionMatrix.copy(cameraL.projectionMatrix); + } + updateUserCamera(camera, cameraXR, parent); + }; + function updateUserCamera(camera, cameraXR2, parent) { + if (parent === null) { + camera.matrix.copy(cameraXR2.matrixWorld); + } else { + camera.matrix.copy(parent.matrixWorld); + camera.matrix.invert(); + camera.matrix.multiply(cameraXR2.matrixWorld); + } + camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); + camera.updateMatrixWorld(true); + camera.projectionMatrix.copy(cameraXR2.projectionMatrix); + camera.projectionMatrixInverse.copy(cameraXR2.projectionMatrixInverse); + if (camera.isPerspectiveCamera) { + camera.fov = RAD2DEG * 2 * Math.atan(1 / camera.projectionMatrix.elements[5]); + camera.zoom = 1; + } + } + __name(updateUserCamera, "updateUserCamera"); + this.getCamera = function() { + return cameraXR; + }; + this.getFoveation = function() { + if (glProjLayer === null && glBaseLayer === null) { + return void 0; + } + return foveation; + }; + this.setFoveation = function(value) { + foveation = value; + if (glProjLayer !== null) { + glProjLayer.fixedFoveation = value; + } + if (glBaseLayer !== null && glBaseLayer.fixedFoveation !== void 0) { + glBaseLayer.fixedFoveation = value; + } + }; + this.hasDepthSensing = function() { + return depthSensing.texture !== null; + }; + this.getDepthSensingMesh = function() { + return depthSensing.getMesh(cameraXR); + }; + let onAnimationFrameCallback = null; + function onAnimationFrame(time, frame) { + pose = frame.getViewerPose(customReferenceSpace || referenceSpace); + xrFrame = frame; + if (pose !== null) { + const views = pose.views; + if (glBaseLayer !== null) { + renderer.setRenderTargetFramebuffer(newRenderTarget, glBaseLayer.framebuffer); + renderer.setRenderTarget(newRenderTarget); + } + let cameraXRNeedsUpdate = false; + if (views.length !== cameraXR.cameras.length) { + cameraXR.cameras.length = 0; + cameraXRNeedsUpdate = true; + } + for (let i = 0; i < views.length; i++) { + const view = views[i]; + let viewport = null; + if (glBaseLayer !== null) { + viewport = glBaseLayer.getViewport(view); + } else { + const glSubImage = glBinding.getViewSubImage(glProjLayer, view); + viewport = glSubImage.viewport; + if (i === 0) { + renderer.setRenderTargetTextures( + newRenderTarget, + glSubImage.colorTexture, + glProjLayer.ignoreDepthValues ? void 0 : glSubImage.depthStencilTexture + ); + renderer.setRenderTarget(newRenderTarget); + } + } + let camera = cameras[i]; + if (camera === void 0) { + camera = new PerspectiveCamera(); + camera.layers.enable(i); + camera.viewport = new Vector4(); + cameras[i] = camera; + } + camera.matrix.fromArray(view.transform.matrix); + camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); + camera.projectionMatrix.fromArray(view.projectionMatrix); + camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); + camera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height); + if (i === 0) { + cameraXR.matrix.copy(camera.matrix); + cameraXR.matrix.decompose(cameraXR.position, cameraXR.quaternion, cameraXR.scale); + } + if (cameraXRNeedsUpdate === true) { + cameraXR.cameras.push(camera); + } + } + const enabledFeatures = session.enabledFeatures; + if (enabledFeatures && enabledFeatures.includes("depth-sensing")) { + const depthData = glBinding.getDepthInformation(views[0]); + if (depthData && depthData.isValid && depthData.texture) { + depthSensing.init(renderer, depthData, session.renderState); + } + } + } + for (let i = 0; i < controllers.length; i++) { + const inputSource = controllerInputSources[i]; + const controller = controllers[i]; + if (inputSource !== null && controller !== void 0) { + controller.update(inputSource, frame, customReferenceSpace || referenceSpace); + } + } + if (onAnimationFrameCallback) onAnimationFrameCallback(time, frame); + if (frame.detectedPlanes) { + scope.dispatchEvent({ type: "planesdetected", data: frame }); + } + xrFrame = null; + } + __name(onAnimationFrame, "onAnimationFrame"); + const animation = new WebGLAnimation(); + animation.setAnimationLoop(onAnimationFrame); + this.setAnimationLoop = function(callback) { + onAnimationFrameCallback = callback; + }; + this.dispose = function() { + }; + } +} +const _e1 = /* @__PURE__ */ new Euler(); +const _m1 = /* @__PURE__ */ new Matrix4(); +function WebGLMaterials(renderer, properties) { + function refreshTransformUniform(map, uniform) { + if (map.matrixAutoUpdate === true) { + map.updateMatrix(); + } + uniform.value.copy(map.matrix); + } + __name(refreshTransformUniform, "refreshTransformUniform"); + function refreshFogUniforms(uniforms, fog) { + fog.color.getRGB(uniforms.fogColor.value, getUnlitUniformColorSpace(renderer)); + if (fog.isFog) { + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + } else if (fog.isFogExp2) { + uniforms.fogDensity.value = fog.density; + } + } + __name(refreshFogUniforms, "refreshFogUniforms"); + function refreshMaterialUniforms(uniforms, material, pixelRatio, height, transmissionRenderTarget) { + if (material.isMeshBasicMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshLambertMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshToonMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsToon(uniforms, material); + } else if (material.isMeshPhongMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsPhong(uniforms, material); + } else if (material.isMeshStandardMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsStandard(uniforms, material); + if (material.isMeshPhysicalMaterial) { + refreshUniformsPhysical(uniforms, material, transmissionRenderTarget); + } + } else if (material.isMeshMatcapMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsMatcap(uniforms, material); + } else if (material.isMeshDepthMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshDistanceMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsDistance(uniforms, material); + } else if (material.isMeshNormalMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isLineBasicMaterial) { + refreshUniformsLine(uniforms, material); + if (material.isLineDashedMaterial) { + refreshUniformsDash(uniforms, material); + } + } else if (material.isPointsMaterial) { + refreshUniformsPoints(uniforms, material, pixelRatio, height); + } else if (material.isSpriteMaterial) { + refreshUniformsSprites(uniforms, material); + } else if (material.isShadowMaterial) { + uniforms.color.value.copy(material.color); + uniforms.opacity.value = material.opacity; + } else if (material.isShaderMaterial) { + material.uniformsNeedUpdate = false; + } + } + __name(refreshMaterialUniforms, "refreshMaterialUniforms"); + function refreshUniformsCommon(uniforms, material) { + uniforms.opacity.value = material.opacity; + if (material.color) { + uniforms.diffuse.value.copy(material.color); + } + if (material.emissive) { + uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity); + } + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.bumpMap) { + uniforms.bumpMap.value = material.bumpMap; + refreshTransformUniform(material.bumpMap, uniforms.bumpMapTransform); + uniforms.bumpScale.value = material.bumpScale; + if (material.side === BackSide) { + uniforms.bumpScale.value *= -1; + } + } + if (material.normalMap) { + uniforms.normalMap.value = material.normalMap; + refreshTransformUniform(material.normalMap, uniforms.normalMapTransform); + uniforms.normalScale.value.copy(material.normalScale); + if (material.side === BackSide) { + uniforms.normalScale.value.negate(); + } + } + if (material.displacementMap) { + uniforms.displacementMap.value = material.displacementMap; + refreshTransformUniform(material.displacementMap, uniforms.displacementMapTransform); + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + } + if (material.emissiveMap) { + uniforms.emissiveMap.value = material.emissiveMap; + refreshTransformUniform(material.emissiveMap, uniforms.emissiveMapTransform); + } + if (material.specularMap) { + uniforms.specularMap.value = material.specularMap; + refreshTransformUniform(material.specularMap, uniforms.specularMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + const materialProperties = properties.get(material); + const envMap = materialProperties.envMap; + const envMapRotation = materialProperties.envMapRotation; + if (envMap) { + uniforms.envMap.value = envMap; + _e1.copy(envMapRotation); + _e1.x *= -1; + _e1.y *= -1; + _e1.z *= -1; + if (envMap.isCubeTexture && envMap.isRenderTargetTexture === false) { + _e1.y *= -1; + _e1.z *= -1; + } + uniforms.envMapRotation.value.setFromMatrix4(_m1.makeRotationFromEuler(_e1)); + uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; + uniforms.reflectivity.value = material.reflectivity; + uniforms.ior.value = material.ior; + uniforms.refractionRatio.value = material.refractionRatio; + } + if (material.lightMap) { + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + refreshTransformUniform(material.lightMap, uniforms.lightMapTransform); + } + if (material.aoMap) { + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + refreshTransformUniform(material.aoMap, uniforms.aoMapTransform); + } + } + __name(refreshUniformsCommon, "refreshUniformsCommon"); + function refreshUniformsLine(uniforms, material) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + } + __name(refreshUniformsLine, "refreshUniformsLine"); + function refreshUniformsDash(uniforms, material) { + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + } + __name(refreshUniformsDash, "refreshUniformsDash"); + function refreshUniformsPoints(uniforms, material, pixelRatio, height) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.uvTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + } + __name(refreshUniformsPoints, "refreshUniformsPoints"); + function refreshUniformsSprites(uniforms, material) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + } + __name(refreshUniformsSprites, "refreshUniformsSprites"); + function refreshUniformsPhong(uniforms, material) { + uniforms.specular.value.copy(material.specular); + uniforms.shininess.value = Math.max(material.shininess, 1e-4); + } + __name(refreshUniformsPhong, "refreshUniformsPhong"); + function refreshUniformsToon(uniforms, material) { + if (material.gradientMap) { + uniforms.gradientMap.value = material.gradientMap; + } + } + __name(refreshUniformsToon, "refreshUniformsToon"); + function refreshUniformsStandard(uniforms, material) { + uniforms.metalness.value = material.metalness; + if (material.metalnessMap) { + uniforms.metalnessMap.value = material.metalnessMap; + refreshTransformUniform(material.metalnessMap, uniforms.metalnessMapTransform); + } + uniforms.roughness.value = material.roughness; + if (material.roughnessMap) { + uniforms.roughnessMap.value = material.roughnessMap; + refreshTransformUniform(material.roughnessMap, uniforms.roughnessMapTransform); + } + if (material.envMap) { + uniforms.envMapIntensity.value = material.envMapIntensity; + } + } + __name(refreshUniformsStandard, "refreshUniformsStandard"); + function refreshUniformsPhysical(uniforms, material, transmissionRenderTarget) { + uniforms.ior.value = material.ior; + if (material.sheen > 0) { + uniforms.sheenColor.value.copy(material.sheenColor).multiplyScalar(material.sheen); + uniforms.sheenRoughness.value = material.sheenRoughness; + if (material.sheenColorMap) { + uniforms.sheenColorMap.value = material.sheenColorMap; + refreshTransformUniform(material.sheenColorMap, uniforms.sheenColorMapTransform); + } + if (material.sheenRoughnessMap) { + uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; + refreshTransformUniform(material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform); + } + } + if (material.clearcoat > 0) { + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + if (material.clearcoatMap) { + uniforms.clearcoatMap.value = material.clearcoatMap; + refreshTransformUniform(material.clearcoatMap, uniforms.clearcoatMapTransform); + } + if (material.clearcoatRoughnessMap) { + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + refreshTransformUniform(material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform); + } + if (material.clearcoatNormalMap) { + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + refreshTransformUniform(material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform); + uniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale); + if (material.side === BackSide) { + uniforms.clearcoatNormalScale.value.negate(); + } + } + } + if (material.dispersion > 0) { + uniforms.dispersion.value = material.dispersion; + } + if (material.iridescence > 0) { + uniforms.iridescence.value = material.iridescence; + uniforms.iridescenceIOR.value = material.iridescenceIOR; + uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[0]; + uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[1]; + if (material.iridescenceMap) { + uniforms.iridescenceMap.value = material.iridescenceMap; + refreshTransformUniform(material.iridescenceMap, uniforms.iridescenceMapTransform); + } + if (material.iridescenceThicknessMap) { + uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap; + refreshTransformUniform(material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform); + } + } + if (material.transmission > 0) { + uniforms.transmission.value = material.transmission; + uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; + uniforms.transmissionSamplerSize.value.set(transmissionRenderTarget.width, transmissionRenderTarget.height); + if (material.transmissionMap) { + uniforms.transmissionMap.value = material.transmissionMap; + refreshTransformUniform(material.transmissionMap, uniforms.transmissionMapTransform); + } + uniforms.thickness.value = material.thickness; + if (material.thicknessMap) { + uniforms.thicknessMap.value = material.thicknessMap; + refreshTransformUniform(material.thicknessMap, uniforms.thicknessMapTransform); + } + uniforms.attenuationDistance.value = material.attenuationDistance; + uniforms.attenuationColor.value.copy(material.attenuationColor); + } + if (material.anisotropy > 0) { + uniforms.anisotropyVector.value.set(material.anisotropy * Math.cos(material.anisotropyRotation), material.anisotropy * Math.sin(material.anisotropyRotation)); + if (material.anisotropyMap) { + uniforms.anisotropyMap.value = material.anisotropyMap; + refreshTransformUniform(material.anisotropyMap, uniforms.anisotropyMapTransform); + } + } + uniforms.specularIntensity.value = material.specularIntensity; + uniforms.specularColor.value.copy(material.specularColor); + if (material.specularColorMap) { + uniforms.specularColorMap.value = material.specularColorMap; + refreshTransformUniform(material.specularColorMap, uniforms.specularColorMapTransform); + } + if (material.specularIntensityMap) { + uniforms.specularIntensityMap.value = material.specularIntensityMap; + refreshTransformUniform(material.specularIntensityMap, uniforms.specularIntensityMapTransform); + } + } + __name(refreshUniformsPhysical, "refreshUniformsPhysical"); + function refreshUniformsMatcap(uniforms, material) { + if (material.matcap) { + uniforms.matcap.value = material.matcap; + } + } + __name(refreshUniformsMatcap, "refreshUniformsMatcap"); + function refreshUniformsDistance(uniforms, material) { + const light = properties.get(material).light; + uniforms.referencePosition.value.setFromMatrixPosition(light.matrixWorld); + uniforms.nearDistance.value = light.shadow.camera.near; + uniforms.farDistance.value = light.shadow.camera.far; + } + __name(refreshUniformsDistance, "refreshUniformsDistance"); + return { + refreshFogUniforms, + refreshMaterialUniforms + }; +} +__name(WebGLMaterials, "WebGLMaterials"); +function WebGLUniformsGroups(gl, info, capabilities, state) { + let buffers = {}; + let updateList = {}; + let allocatedBindingPoints = []; + const maxBindingPoints = gl.getParameter(gl.MAX_UNIFORM_BUFFER_BINDINGS); + function bind(uniformsGroup, program) { + const webglProgram = program.program; + state.uniformBlockBinding(uniformsGroup, webglProgram); + } + __name(bind, "bind"); + function update(uniformsGroup, program) { + let buffer = buffers[uniformsGroup.id]; + if (buffer === void 0) { + prepareUniformsGroup(uniformsGroup); + buffer = createBuffer(uniformsGroup); + buffers[uniformsGroup.id] = buffer; + uniformsGroup.addEventListener("dispose", onUniformsGroupsDispose); + } + const webglProgram = program.program; + state.updateUBOMapping(uniformsGroup, webglProgram); + const frame = info.render.frame; + if (updateList[uniformsGroup.id] !== frame) { + updateBufferData(uniformsGroup); + updateList[uniformsGroup.id] = frame; + } + } + __name(update, "update"); + function createBuffer(uniformsGroup) { + const bindingPointIndex = allocateBindingPointIndex(); + uniformsGroup.__bindingPointIndex = bindingPointIndex; + const buffer = gl.createBuffer(); + const size = uniformsGroup.__size; + const usage = uniformsGroup.usage; + gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); + gl.bufferData(gl.UNIFORM_BUFFER, size, usage); + gl.bindBuffer(gl.UNIFORM_BUFFER, null); + gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPointIndex, buffer); + return buffer; + } + __name(createBuffer, "createBuffer"); + function allocateBindingPointIndex() { + for (let i = 0; i < maxBindingPoints; i++) { + if (allocatedBindingPoints.indexOf(i) === -1) { + allocatedBindingPoints.push(i); + return i; + } + } + console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."); + return 0; + } + __name(allocateBindingPointIndex, "allocateBindingPointIndex"); + function updateBufferData(uniformsGroup) { + const buffer = buffers[uniformsGroup.id]; + const uniforms = uniformsGroup.uniforms; + const cache = uniformsGroup.__cache; + gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); + for (let i = 0, il = uniforms.length; i < il; i++) { + const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; + for (let j = 0, jl = uniformArray.length; j < jl; j++) { + const uniform = uniformArray[j]; + if (hasUniformChanged(uniform, i, j, cache) === true) { + const offset = uniform.__offset; + const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; + let arrayOffset = 0; + for (let k = 0; k < values.length; k++) { + const value = values[k]; + const info2 = getUniformSize(value); + if (typeof value === "number" || typeof value === "boolean") { + uniform.__data[0] = value; + gl.bufferSubData(gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data); + } else if (value.isMatrix3) { + uniform.__data[0] = value.elements[0]; + uniform.__data[1] = value.elements[1]; + uniform.__data[2] = value.elements[2]; + uniform.__data[3] = 0; + uniform.__data[4] = value.elements[3]; + uniform.__data[5] = value.elements[4]; + uniform.__data[6] = value.elements[5]; + uniform.__data[7] = 0; + uniform.__data[8] = value.elements[6]; + uniform.__data[9] = value.elements[7]; + uniform.__data[10] = value.elements[8]; + uniform.__data[11] = 0; + } else { + value.toArray(uniform.__data, arrayOffset); + arrayOffset += info2.storage / Float32Array.BYTES_PER_ELEMENT; + } + } + gl.bufferSubData(gl.UNIFORM_BUFFER, offset, uniform.__data); + } + } + } + gl.bindBuffer(gl.UNIFORM_BUFFER, null); + } + __name(updateBufferData, "updateBufferData"); + function hasUniformChanged(uniform, index, indexArray, cache) { + const value = uniform.value; + const indexString = index + "_" + indexArray; + if (cache[indexString] === void 0) { + if (typeof value === "number" || typeof value === "boolean") { + cache[indexString] = value; + } else { + cache[indexString] = value.clone(); + } + return true; + } else { + const cachedObject = cache[indexString]; + if (typeof value === "number" || typeof value === "boolean") { + if (cachedObject !== value) { + cache[indexString] = value; + return true; + } + } else { + if (cachedObject.equals(value) === false) { + cachedObject.copy(value); + return true; + } + } + } + return false; + } + __name(hasUniformChanged, "hasUniformChanged"); + function prepareUniformsGroup(uniformsGroup) { + const uniforms = uniformsGroup.uniforms; + let offset = 0; + const chunkSize = 16; + for (let i = 0, l = uniforms.length; i < l; i++) { + const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; + for (let j = 0, jl = uniformArray.length; j < jl; j++) { + const uniform = uniformArray[j]; + const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; + for (let k = 0, kl = values.length; k < kl; k++) { + const value = values[k]; + const info2 = getUniformSize(value); + const chunkOffset2 = offset % chunkSize; + const chunkPadding = chunkOffset2 % info2.boundary; + const chunkStart = chunkOffset2 + chunkPadding; + offset += chunkPadding; + if (chunkStart !== 0 && chunkSize - chunkStart < info2.storage) { + offset += chunkSize - chunkStart; + } + uniform.__data = new Float32Array(info2.storage / Float32Array.BYTES_PER_ELEMENT); + uniform.__offset = offset; + offset += info2.storage; + } + } + } + const chunkOffset = offset % chunkSize; + if (chunkOffset > 0) offset += chunkSize - chunkOffset; + uniformsGroup.__size = offset; + uniformsGroup.__cache = {}; + return this; + } + __name(prepareUniformsGroup, "prepareUniformsGroup"); + function getUniformSize(value) { + const info2 = { + boundary: 0, + // bytes + storage: 0 + // bytes + }; + if (typeof value === "number" || typeof value === "boolean") { + info2.boundary = 4; + info2.storage = 4; + } else if (value.isVector2) { + info2.boundary = 8; + info2.storage = 8; + } else if (value.isVector3 || value.isColor) { + info2.boundary = 16; + info2.storage = 12; + } else if (value.isVector4) { + info2.boundary = 16; + info2.storage = 16; + } else if (value.isMatrix3) { + info2.boundary = 48; + info2.storage = 48; + } else if (value.isMatrix4) { + info2.boundary = 64; + info2.storage = 64; + } else if (value.isTexture) { + console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."); + } else { + console.warn("THREE.WebGLRenderer: Unsupported uniform value type.", value); + } + return info2; + } + __name(getUniformSize, "getUniformSize"); + function onUniformsGroupsDispose(event) { + const uniformsGroup = event.target; + uniformsGroup.removeEventListener("dispose", onUniformsGroupsDispose); + const index = allocatedBindingPoints.indexOf(uniformsGroup.__bindingPointIndex); + allocatedBindingPoints.splice(index, 1); + gl.deleteBuffer(buffers[uniformsGroup.id]); + delete buffers[uniformsGroup.id]; + delete updateList[uniformsGroup.id]; + } + __name(onUniformsGroupsDispose, "onUniformsGroupsDispose"); + function dispose() { + for (const id2 in buffers) { + gl.deleteBuffer(buffers[id2]); + } + allocatedBindingPoints = []; + buffers = {}; + updateList = {}; + } + __name(dispose, "dispose"); + return { + bind, + update, + dispose + }; +} +__name(WebGLUniformsGroups, "WebGLUniformsGroups"); +class WebGLRenderer { + static { + __name(this, "WebGLRenderer"); + } + constructor(parameters = {}) { + const { + canvas = createCanvasElement(), + context = null, + depth = true, + stencil = false, + alpha = false, + antialias = false, + premultipliedAlpha = true, + preserveDrawingBuffer = false, + powerPreference = "default", + failIfMajorPerformanceCaveat = false, + reverseDepthBuffer = false + } = parameters; + this.isWebGLRenderer = true; + let _alpha; + if (context !== null) { + if (typeof WebGLRenderingContext !== "undefined" && context instanceof WebGLRenderingContext) { + throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163."); + } + _alpha = context.getContextAttributes().alpha; + } else { + _alpha = alpha; + } + const uintClearColor = new Uint32Array(4); + const intClearColor = new Int32Array(4); + let currentRenderList = null; + let currentRenderState = null; + const renderListStack = []; + const renderStateStack = []; + this.domElement = canvas; + this.debug = { + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true, + /** + * Callback for custom error reporting. + * @type {?Function} + */ + onShaderError: null + }; + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + this.sortObjects = true; + this.clippingPlanes = []; + this.localClippingEnabled = false; + this._outputColorSpace = SRGBColorSpace; + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1; + const _this = this; + let _isContextLost = false; + let _currentActiveCubeFace = 0; + let _currentActiveMipmapLevel = 0; + let _currentRenderTarget = null; + let _currentMaterialId = -1; + let _currentCamera = null; + const _currentViewport = new Vector4(); + const _currentScissor = new Vector4(); + let _currentScissorTest = null; + const _currentClearColor = new Color(0); + let _currentClearAlpha = 0; + let _width = canvas.width; + let _height = canvas.height; + let _pixelRatio = 1; + let _opaqueSort = null; + let _transparentSort = null; + const _viewport = new Vector4(0, 0, _width, _height); + const _scissor = new Vector4(0, 0, _width, _height); + let _scissorTest = false; + const _frustum2 = new Frustum(); + let _clippingEnabled = false; + let _localClippingEnabled = false; + const _currentProjectionMatrix = new Matrix4(); + const _projScreenMatrix2 = new Matrix4(); + const _vector32 = new Vector3(); + const _vector4 = new Vector4(); + const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + let _renderBackground = false; + function getTargetPixelRatio() { + return _currentRenderTarget === null ? _pixelRatio : 1; + } + __name(getTargetPixelRatio, "getTargetPixelRatio"); + let _gl = context; + function getContext(contextName, contextAttributes) { + return canvas.getContext(contextName, contextAttributes); + } + __name(getContext, "getContext"); + try { + const contextAttributes = { + alpha: true, + depth, + stencil, + antialias, + premultipliedAlpha, + preserveDrawingBuffer, + powerPreference, + failIfMajorPerformanceCaveat + }; + if ("setAttribute" in canvas) canvas.setAttribute("data-engine", `three.js r${REVISION}`); + canvas.addEventListener("webglcontextlost", onContextLost, false); + canvas.addEventListener("webglcontextrestored", onContextRestore, false); + canvas.addEventListener("webglcontextcreationerror", onContextCreationError, false); + if (_gl === null) { + const contextName = "webgl2"; + _gl = getContext(contextName, contextAttributes); + if (_gl === null) { + if (getContext(contextName)) { + throw new Error("Error creating WebGL context with your selected attributes."); + } else { + throw new Error("Error creating WebGL context."); + } + } + } + } catch (error) { + console.error("THREE.WebGLRenderer: " + error.message); + throw error; + } + let extensions, capabilities, state, info; + let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; + let programCache, materials, renderLists, renderStates, clipping, shadowMap; + let background, morphtargets, bufferRenderer, indexedBufferRenderer; + let utils, bindingStates, uniformsGroups; + function initGLContext() { + extensions = new WebGLExtensions(_gl); + extensions.init(); + utils = new WebGLUtils(_gl, extensions); + capabilities = new WebGLCapabilities(_gl, extensions, parameters, utils); + state = new WebGLState(_gl, extensions); + if (capabilities.reverseDepthBuffer && reverseDepthBuffer) { + state.buffers.depth.setReversed(true); + } + info = new WebGLInfo(_gl); + properties = new WebGLProperties(); + textures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info); + cubemaps = new WebGLCubeMaps(_this); + cubeuvmaps = new WebGLCubeUVMaps(_this); + attributes = new WebGLAttributes(_gl); + bindingStates = new WebGLBindingStates(_gl, attributes); + geometries = new WebGLGeometries(_gl, attributes, info, bindingStates); + objects = new WebGLObjects(_gl, geometries, attributes, info); + morphtargets = new WebGLMorphtargets(_gl, capabilities, textures); + clipping = new WebGLClipping(properties); + programCache = new WebGLPrograms(_this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping); + materials = new WebGLMaterials(_this, properties); + renderLists = new WebGLRenderLists(); + renderStates = new WebGLRenderStates(extensions); + background = new WebGLBackground(_this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha); + shadowMap = new WebGLShadowMap(_this, objects, capabilities); + uniformsGroups = new WebGLUniformsGroups(_gl, info, capabilities, state); + bufferRenderer = new WebGLBufferRenderer(_gl, extensions, info); + indexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info); + info.programs = programCache.programs; + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.shadowMap = shadowMap; + _this.state = state; + _this.info = info; + } + __name(initGLContext, "initGLContext"); + initGLContext(); + const xr = new WebXRManager(_this, _gl); + this.xr = xr; + this.getContext = function() { + return _gl; + }; + this.getContextAttributes = function() { + return _gl.getContextAttributes(); + }; + this.forceContextLoss = function() { + const extension = extensions.get("WEBGL_lose_context"); + if (extension) extension.loseContext(); + }; + this.forceContextRestore = function() { + const extension = extensions.get("WEBGL_lose_context"); + if (extension) extension.restoreContext(); + }; + this.getPixelRatio = function() { + return _pixelRatio; + }; + this.setPixelRatio = function(value) { + if (value === void 0) return; + _pixelRatio = value; + this.setSize(_width, _height, false); + }; + this.getSize = function(target) { + return target.set(_width, _height); + }; + this.setSize = function(width, height, updateStyle = true) { + if (xr.isPresenting) { + console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."); + return; + } + _width = width; + _height = height; + canvas.width = Math.floor(width * _pixelRatio); + canvas.height = Math.floor(height * _pixelRatio); + if (updateStyle === true) { + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } + this.setViewport(0, 0, width, height); + }; + this.getDrawingBufferSize = function(target) { + return target.set(_width * _pixelRatio, _height * _pixelRatio).floor(); + }; + this.setDrawingBufferSize = function(width, height, pixelRatio) { + _width = width; + _height = height; + _pixelRatio = pixelRatio; + canvas.width = Math.floor(width * pixelRatio); + canvas.height = Math.floor(height * pixelRatio); + this.setViewport(0, 0, width, height); + }; + this.getCurrentViewport = function(target) { + return target.copy(_currentViewport); + }; + this.getViewport = function(target) { + return target.copy(_viewport); + }; + this.setViewport = function(x, y, width, height) { + if (x.isVector4) { + _viewport.set(x.x, x.y, x.z, x.w); + } else { + _viewport.set(x, y, width, height); + } + state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).round()); + }; + this.getScissor = function(target) { + return target.copy(_scissor); + }; + this.setScissor = function(x, y, width, height) { + if (x.isVector4) { + _scissor.set(x.x, x.y, x.z, x.w); + } else { + _scissor.set(x, y, width, height); + } + state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).round()); + }; + this.getScissorTest = function() { + return _scissorTest; + }; + this.setScissorTest = function(boolean) { + state.setScissorTest(_scissorTest = boolean); + }; + this.setOpaqueSort = function(method) { + _opaqueSort = method; + }; + this.setTransparentSort = function(method) { + _transparentSort = method; + }; + this.getClearColor = function(target) { + return target.copy(background.getClearColor()); + }; + this.setClearColor = function() { + background.setClearColor.apply(background, arguments); + }; + this.getClearAlpha = function() { + return background.getClearAlpha(); + }; + this.setClearAlpha = function() { + background.setClearAlpha.apply(background, arguments); + }; + this.clear = function(color = true, depth2 = true, stencil2 = true) { + let bits2 = 0; + if (color) { + let isIntegerFormat = false; + if (_currentRenderTarget !== null) { + const targetFormat = _currentRenderTarget.texture.format; + isIntegerFormat = targetFormat === RGBAIntegerFormat || targetFormat === RGIntegerFormat || targetFormat === RedIntegerFormat; + } + if (isIntegerFormat) { + const targetType = _currentRenderTarget.texture.type; + const isUnsignedType = targetType === UnsignedByteType || targetType === UnsignedIntType || targetType === UnsignedShortType || targetType === UnsignedInt248Type || targetType === UnsignedShort4444Type || targetType === UnsignedShort5551Type; + const clearColor = background.getClearColor(); + const a = background.getClearAlpha(); + const r = clearColor.r; + const g = clearColor.g; + const b = clearColor.b; + if (isUnsignedType) { + uintClearColor[0] = r; + uintClearColor[1] = g; + uintClearColor[2] = b; + uintClearColor[3] = a; + _gl.clearBufferuiv(_gl.COLOR, 0, uintClearColor); + } else { + intClearColor[0] = r; + intClearColor[1] = g; + intClearColor[2] = b; + intClearColor[3] = a; + _gl.clearBufferiv(_gl.COLOR, 0, intClearColor); + } + } else { + bits2 |= _gl.COLOR_BUFFER_BIT; + } + } + if (depth2) { + bits2 |= _gl.DEPTH_BUFFER_BIT; + } + if (stencil2) { + bits2 |= _gl.STENCIL_BUFFER_BIT; + this.state.buffers.stencil.setMask(4294967295); + } + _gl.clear(bits2); + }; + this.clearColor = function() { + this.clear(true, false, false); + }; + this.clearDepth = function() { + this.clear(false, true, false); + }; + this.clearStencil = function() { + this.clear(false, false, true); + }; + this.dispose = function() { + canvas.removeEventListener("webglcontextlost", onContextLost, false); + canvas.removeEventListener("webglcontextrestored", onContextRestore, false); + canvas.removeEventListener("webglcontextcreationerror", onContextCreationError, false); + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + cubeuvmaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + uniformsGroups.dispose(); + programCache.dispose(); + xr.dispose(); + xr.removeEventListener("sessionstart", onXRSessionStart); + xr.removeEventListener("sessionend", onXRSessionEnd); + animation.stop(); + }; + function onContextLost(event) { + event.preventDefault(); + console.log("THREE.WebGLRenderer: Context Lost."); + _isContextLost = true; + } + __name(onContextLost, "onContextLost"); + function onContextRestore() { + console.log("THREE.WebGLRenderer: Context Restored."); + _isContextLost = false; + const infoAutoReset = info.autoReset; + const shadowMapEnabled = shadowMap.enabled; + const shadowMapAutoUpdate = shadowMap.autoUpdate; + const shadowMapNeedsUpdate = shadowMap.needsUpdate; + const shadowMapType = shadowMap.type; + initGLContext(); + info.autoReset = infoAutoReset; + shadowMap.enabled = shadowMapEnabled; + shadowMap.autoUpdate = shadowMapAutoUpdate; + shadowMap.needsUpdate = shadowMapNeedsUpdate; + shadowMap.type = shadowMapType; + } + __name(onContextRestore, "onContextRestore"); + function onContextCreationError(event) { + console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ", event.statusMessage); + } + __name(onContextCreationError, "onContextCreationError"); + function onMaterialDispose(event) { + const material = event.target; + material.removeEventListener("dispose", onMaterialDispose); + deallocateMaterial(material); + } + __name(onMaterialDispose, "onMaterialDispose"); + function deallocateMaterial(material) { + releaseMaterialProgramReferences(material); + properties.remove(material); + } + __name(deallocateMaterial, "deallocateMaterial"); + function releaseMaterialProgramReferences(material) { + const programs = properties.get(material).programs; + if (programs !== void 0) { + programs.forEach(function(program) { + programCache.releaseProgram(program); + }); + if (material.isShaderMaterial) { + programCache.releaseShaderCache(material); + } + } + } + __name(releaseMaterialProgramReferences, "releaseMaterialProgramReferences"); + this.renderBufferDirect = function(camera, scene, geometry, material, object, group) { + if (scene === null) scene = _emptyScene; + const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0; + const program = setProgram(camera, scene, geometry, material, object); + state.setMaterial(material, frontFaceCW); + let index = geometry.index; + let rangeFactor = 1; + if (material.wireframe === true) { + index = geometries.getWireframeAttribute(geometry); + if (index === void 0) return; + rangeFactor = 2; + } + const drawRange = geometry.drawRange; + const position = geometry.attributes.position; + let drawStart = drawRange.start * rangeFactor; + let drawEnd = (drawRange.start + drawRange.count) * rangeFactor; + if (group !== null) { + drawStart = Math.max(drawStart, group.start * rangeFactor); + drawEnd = Math.min(drawEnd, (group.start + group.count) * rangeFactor); + } + if (index !== null) { + drawStart = Math.max(drawStart, 0); + drawEnd = Math.min(drawEnd, index.count); + } else if (position !== void 0 && position !== null) { + drawStart = Math.max(drawStart, 0); + drawEnd = Math.min(drawEnd, position.count); + } + const drawCount = drawEnd - drawStart; + if (drawCount < 0 || drawCount === Infinity) return; + bindingStates.setup(object, material, program, geometry, index); + let attribute; + let renderer = bufferRenderer; + if (index !== null) { + attribute = attributes.get(index); + renderer = indexedBufferRenderer; + renderer.setIndex(attribute); + } + if (object.isMesh) { + if (material.wireframe === true) { + state.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio()); + renderer.setMode(_gl.LINES); + } else { + renderer.setMode(_gl.TRIANGLES); + } + } else if (object.isLine) { + let lineWidth = material.linewidth; + if (lineWidth === void 0) lineWidth = 1; + state.setLineWidth(lineWidth * getTargetPixelRatio()); + if (object.isLineSegments) { + renderer.setMode(_gl.LINES); + } else if (object.isLineLoop) { + renderer.setMode(_gl.LINE_LOOP); + } else { + renderer.setMode(_gl.LINE_STRIP); + } + } else if (object.isPoints) { + renderer.setMode(_gl.POINTS); + } else if (object.isSprite) { + renderer.setMode(_gl.TRIANGLES); + } + if (object.isBatchedMesh) { + if (object._multiDrawInstances !== null) { + renderer.renderMultiDrawInstances(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances); + } else { + if (!extensions.get("WEBGL_multi_draw")) { + const starts = object._multiDrawStarts; + const counts = object._multiDrawCounts; + const drawCount2 = object._multiDrawCount; + const bytesPerElement = index ? attributes.get(index).bytesPerElement : 1; + const uniforms = properties.get(material).currentProgram.getUniforms(); + for (let i = 0; i < drawCount2; i++) { + uniforms.setValue(_gl, "_gl_DrawID", i); + renderer.render(starts[i] / bytesPerElement, counts[i]); + } + } else { + renderer.renderMultiDraw(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount); + } + } + } else if (object.isInstancedMesh) { + renderer.renderInstances(drawStart, drawCount, object.count); + } else if (geometry.isInstancedBufferGeometry) { + const maxInstanceCount = geometry._maxInstanceCount !== void 0 ? geometry._maxInstanceCount : Infinity; + const instanceCount = Math.min(geometry.instanceCount, maxInstanceCount); + renderer.renderInstances(drawStart, drawCount, instanceCount); + } else { + renderer.render(drawStart, drawCount); + } + }; + function prepareMaterial(material, scene, object) { + if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { + material.side = BackSide; + material.needsUpdate = true; + getProgram(material, scene, object); + material.side = FrontSide; + material.needsUpdate = true; + getProgram(material, scene, object); + material.side = DoubleSide; + } else { + getProgram(material, scene, object); + } + } + __name(prepareMaterial, "prepareMaterial"); + this.compile = function(scene, camera, targetScene = null) { + if (targetScene === null) targetScene = scene; + currentRenderState = renderStates.get(targetScene); + currentRenderState.init(camera); + renderStateStack.push(currentRenderState); + targetScene.traverseVisible(function(object) { + if (object.isLight && object.layers.test(camera.layers)) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } + }); + if (scene !== targetScene) { + scene.traverseVisible(function(object) { + if (object.isLight && object.layers.test(camera.layers)) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } + }); + } + currentRenderState.setupLights(); + const materials2 = /* @__PURE__ */ new Set(); + scene.traverse(function(object) { + if (!(object.isMesh || object.isPoints || object.isLine || object.isSprite)) { + return; + } + const material = object.material; + if (material) { + if (Array.isArray(material)) { + for (let i = 0; i < material.length; i++) { + const material2 = material[i]; + prepareMaterial(material2, targetScene, object); + materials2.add(material2); + } + } else { + prepareMaterial(material, targetScene, object); + materials2.add(material); + } + } + }); + renderStateStack.pop(); + currentRenderState = null; + return materials2; + }; + this.compileAsync = function(scene, camera, targetScene = null) { + const materials2 = this.compile(scene, camera, targetScene); + return new Promise((resolve) => { + function checkMaterialsReady() { + materials2.forEach(function(material) { + const materialProperties = properties.get(material); + const program = materialProperties.currentProgram; + if (program.isReady()) { + materials2.delete(material); + } + }); + if (materials2.size === 0) { + resolve(scene); + return; + } + setTimeout(checkMaterialsReady, 10); + } + __name(checkMaterialsReady, "checkMaterialsReady"); + if (extensions.get("KHR_parallel_shader_compile") !== null) { + checkMaterialsReady(); + } else { + setTimeout(checkMaterialsReady, 10); + } + }); + }; + let onAnimationFrameCallback = null; + function onAnimationFrame(time) { + if (onAnimationFrameCallback) onAnimationFrameCallback(time); + } + __name(onAnimationFrame, "onAnimationFrame"); + function onXRSessionStart() { + animation.stop(); + } + __name(onXRSessionStart, "onXRSessionStart"); + function onXRSessionEnd() { + animation.start(); + } + __name(onXRSessionEnd, "onXRSessionEnd"); + const animation = new WebGLAnimation(); + animation.setAnimationLoop(onAnimationFrame); + if (typeof self !== "undefined") animation.setContext(self); + this.setAnimationLoop = function(callback) { + onAnimationFrameCallback = callback; + xr.setAnimationLoop(callback); + callback === null ? animation.stop() : animation.start(); + }; + xr.addEventListener("sessionstart", onXRSessionStart); + xr.addEventListener("sessionend", onXRSessionEnd); + this.render = function(scene, camera) { + if (camera !== void 0 && camera.isCamera !== true) { + console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + return; + } + if (_isContextLost === true) return; + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + if (xr.enabled === true && xr.isPresenting === true) { + if (xr.cameraAutoUpdate === true) xr.updateCamera(camera); + camera = xr.getCamera(); + } + if (scene.isScene === true) scene.onBeforeRender(_this, scene, camera, _currentRenderTarget); + currentRenderState = renderStates.get(scene, renderStateStack.length); + currentRenderState.init(camera); + renderStateStack.push(currentRenderState); + _projScreenMatrix2.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); + _frustum2.setFromProjectionMatrix(_projScreenMatrix2); + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled); + currentRenderList = renderLists.get(scene, renderListStack.length); + currentRenderList.init(); + renderListStack.push(currentRenderList); + if (xr.enabled === true && xr.isPresenting === true) { + const depthSensingMesh = _this.xr.getDepthSensingMesh(); + if (depthSensingMesh !== null) { + projectObject(depthSensingMesh, camera, -Infinity, _this.sortObjects); + } + } + projectObject(scene, camera, 0, _this.sortObjects); + currentRenderList.finish(); + if (_this.sortObjects === true) { + currentRenderList.sort(_opaqueSort, _transparentSort); + } + _renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false; + if (_renderBackground) { + background.addToRenderList(currentRenderList, scene); + } + this.info.render.frame++; + if (_clippingEnabled === true) clipping.beginShadows(); + const shadowsArray = currentRenderState.state.shadowsArray; + shadowMap.render(shadowsArray, scene, camera); + if (_clippingEnabled === true) clipping.endShadows(); + if (this.info.autoReset === true) this.info.reset(); + const opaqueObjects = currentRenderList.opaque; + const transmissiveObjects = currentRenderList.transmissive; + currentRenderState.setupLights(); + if (camera.isArrayCamera) { + const cameras = camera.cameras; + if (transmissiveObjects.length > 0) { + for (let i = 0, l = cameras.length; i < l; i++) { + const camera2 = cameras[i]; + renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera2); + } + } + if (_renderBackground) background.render(scene); + for (let i = 0, l = cameras.length; i < l; i++) { + const camera2 = cameras[i]; + renderScene(currentRenderList, scene, camera2, camera2.viewport); + } + } else { + if (transmissiveObjects.length > 0) renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera); + if (_renderBackground) background.render(scene); + renderScene(currentRenderList, scene, camera); + } + if (_currentRenderTarget !== null) { + textures.updateMultisampleRenderTarget(_currentRenderTarget); + textures.updateRenderTargetMipmap(_currentRenderTarget); + } + if (scene.isScene === true) scene.onAfterRender(_this, scene, camera); + bindingStates.resetDefaultState(); + _currentMaterialId = -1; + _currentCamera = null; + renderStateStack.pop(); + if (renderStateStack.length > 0) { + currentRenderState = renderStateStack[renderStateStack.length - 1]; + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, currentRenderState.state.camera); + } else { + currentRenderState = null; + } + renderListStack.pop(); + if (renderListStack.length > 0) { + currentRenderList = renderListStack[renderListStack.length - 1]; + } else { + currentRenderList = null; + } + }; + function projectObject(object, camera, groupOrder, sortObjects) { + if (object.visible === false) return; + const visible = object.layers.test(camera.layers); + if (visible) { + if (object.isGroup) { + groupOrder = object.renderOrder; + } else if (object.isLOD) { + if (object.autoUpdate === true) object.update(camera); + } else if (object.isLight) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } else if (object.isSprite) { + if (!object.frustumCulled || _frustum2.intersectsSprite(object)) { + if (sortObjects) { + _vector4.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix2); + } + const geometry = objects.update(object); + const material = object.material; + if (material.visible) { + currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); + } + } + } else if (object.isMesh || object.isLine || object.isPoints) { + if (!object.frustumCulled || _frustum2.intersectsObject(object)) { + const geometry = objects.update(object); + const material = object.material; + if (sortObjects) { + if (object.boundingSphere !== void 0) { + if (object.boundingSphere === null) object.computeBoundingSphere(); + _vector4.copy(object.boundingSphere.center); + } else { + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _vector4.copy(geometry.boundingSphere.center); + } + _vector4.applyMatrix4(object.matrixWorld).applyMatrix4(_projScreenMatrix2); + } + if (Array.isArray(material)) { + const groups = geometry.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + if (groupMaterial && groupMaterial.visible) { + currentRenderList.push(object, geometry, groupMaterial, groupOrder, _vector4.z, group); + } + } + } else if (material.visible) { + currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); + } + } + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + projectObject(children[i], camera, groupOrder, sortObjects); + } + } + __name(projectObject, "projectObject"); + function renderScene(currentRenderList2, scene, camera, viewport) { + const opaqueObjects = currentRenderList2.opaque; + const transmissiveObjects = currentRenderList2.transmissive; + const transparentObjects = currentRenderList2.transparent; + currentRenderState.setupLightsView(camera); + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); + if (viewport) state.viewport(_currentViewport.copy(viewport)); + if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera); + if (transmissiveObjects.length > 0) renderObjects(transmissiveObjects, scene, camera); + if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); + state.buffers.depth.setTest(true); + state.buffers.depth.setMask(true); + state.buffers.color.setMask(true); + state.setPolygonOffset(false); + } + __name(renderScene, "renderScene"); + function renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera) { + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + if (overrideMaterial !== null) { + return; + } + if (currentRenderState.state.transmissionRenderTarget[camera.id] === void 0) { + currentRenderState.state.transmissionRenderTarget[camera.id] = new WebGLRenderTarget(1, 1, { + generateMipmaps: true, + type: extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float") ? HalfFloatType : UnsignedByteType, + minFilter: LinearMipmapLinearFilter, + samples: 4, + stencilBuffer: stencil, + resolveDepthBuffer: false, + resolveStencilBuffer: false, + colorSpace: ColorManagement.workingColorSpace + }); + } + const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[camera.id]; + const activeViewport = camera.viewport || _currentViewport; + transmissionRenderTarget.setSize(activeViewport.z, activeViewport.w); + const currentRenderTarget = _this.getRenderTarget(); + _this.setRenderTarget(transmissionRenderTarget); + _this.getClearColor(_currentClearColor); + _currentClearAlpha = _this.getClearAlpha(); + if (_currentClearAlpha < 1) _this.setClearColor(16777215, 0.5); + _this.clear(); + if (_renderBackground) background.render(scene); + const currentToneMapping = _this.toneMapping; + _this.toneMapping = NoToneMapping; + const currentCameraViewport = camera.viewport; + if (camera.viewport !== void 0) camera.viewport = void 0; + currentRenderState.setupLightsView(camera); + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); + renderObjects(opaqueObjects, scene, camera); + textures.updateMultisampleRenderTarget(transmissionRenderTarget); + textures.updateRenderTargetMipmap(transmissionRenderTarget); + if (extensions.has("WEBGL_multisampled_render_to_texture") === false) { + let renderTargetNeedsUpdate = false; + for (let i = 0, l = transmissiveObjects.length; i < l; i++) { + const renderItem = transmissiveObjects[i]; + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = renderItem.material; + const group = renderItem.group; + if (material.side === DoubleSide && object.layers.test(camera.layers)) { + const currentSide = material.side; + material.side = BackSide; + material.needsUpdate = true; + renderObject(object, scene, camera, geometry, material, group); + material.side = currentSide; + material.needsUpdate = true; + renderTargetNeedsUpdate = true; + } + } + if (renderTargetNeedsUpdate === true) { + textures.updateMultisampleRenderTarget(transmissionRenderTarget); + textures.updateRenderTargetMipmap(transmissionRenderTarget); + } + } + _this.setRenderTarget(currentRenderTarget); + _this.setClearColor(_currentClearColor, _currentClearAlpha); + if (currentCameraViewport !== void 0) camera.viewport = currentCameraViewport; + _this.toneMapping = currentToneMapping; + } + __name(renderTransmissionPass, "renderTransmissionPass"); + function renderObjects(renderList, scene, camera) { + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + for (let i = 0, l = renderList.length; i < l; i++) { + const renderItem = renderList[i]; + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + if (object.layers.test(camera.layers)) { + renderObject(object, scene, camera, geometry, material, group); + } + } + } + __name(renderObjects, "renderObjects"); + function renderObject(object, scene, camera, geometry, material, group) { + object.onBeforeRender(_this, scene, camera, geometry, material, group); + object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); + object.normalMatrix.getNormalMatrix(object.modelViewMatrix); + material.onBeforeRender(_this, scene, camera, geometry, object, group); + if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { + material.side = BackSide; + material.needsUpdate = true; + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + material.side = FrontSide; + material.needsUpdate = true; + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + material.side = DoubleSide; + } else { + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + } + object.onAfterRender(_this, scene, camera, geometry, material, group); + } + __name(renderObject, "renderObject"); + function getProgram(material, scene, object) { + if (scene.isScene !== true) scene = _emptyScene; + const materialProperties = properties.get(material); + const lights = currentRenderState.state.lights; + const shadowsArray = currentRenderState.state.shadowsArray; + const lightsStateVersion = lights.state.version; + const parameters2 = programCache.getParameters(material, lights.state, shadowsArray, scene, object); + const programCacheKey = programCache.getProgramCacheKey(parameters2); + let programs = materialProperties.programs; + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || materialProperties.environment); + materialProperties.envMapRotation = materialProperties.environment !== null && material.envMap === null ? scene.environmentRotation : material.envMapRotation; + if (programs === void 0) { + material.addEventListener("dispose", onMaterialDispose); + programs = /* @__PURE__ */ new Map(); + materialProperties.programs = programs; + } + let program = programs.get(programCacheKey); + if (program !== void 0) { + if (materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion) { + updateCommonMaterialProperties(material, parameters2); + return program; + } + } else { + parameters2.uniforms = programCache.getUniforms(material); + material.onBeforeCompile(parameters2, _this); + program = programCache.acquireProgram(parameters2, programCacheKey); + programs.set(programCacheKey, program); + materialProperties.uniforms = parameters2.uniforms; + } + const uniforms = materialProperties.uniforms; + if (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) { + uniforms.clippingPlanes = clipping.uniform; + } + updateCommonMaterialProperties(material, parameters2); + materialProperties.needsLights = materialNeedsLights(material); + materialProperties.lightsStateVersion = lightsStateVersion; + if (materialProperties.needsLights) { + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotLightMatrix.value = lights.state.spotLightMatrix; + uniforms.spotLightMap.value = lights.state.spotLightMap; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + } + materialProperties.currentProgram = program; + materialProperties.uniformsList = null; + return program; + } + __name(getProgram, "getProgram"); + function getUniformList(materialProperties) { + if (materialProperties.uniformsList === null) { + const progUniforms = materialProperties.currentProgram.getUniforms(); + materialProperties.uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, materialProperties.uniforms); + } + return materialProperties.uniformsList; + } + __name(getUniformList, "getUniformList"); + function updateCommonMaterialProperties(material, parameters2) { + const materialProperties = properties.get(material); + materialProperties.outputColorSpace = parameters2.outputColorSpace; + materialProperties.batching = parameters2.batching; + materialProperties.batchingColor = parameters2.batchingColor; + materialProperties.instancing = parameters2.instancing; + materialProperties.instancingColor = parameters2.instancingColor; + materialProperties.instancingMorph = parameters2.instancingMorph; + materialProperties.skinning = parameters2.skinning; + materialProperties.morphTargets = parameters2.morphTargets; + materialProperties.morphNormals = parameters2.morphNormals; + materialProperties.morphColors = parameters2.morphColors; + materialProperties.morphTargetsCount = parameters2.morphTargetsCount; + materialProperties.numClippingPlanes = parameters2.numClippingPlanes; + materialProperties.numIntersection = parameters2.numClipIntersection; + materialProperties.vertexAlphas = parameters2.vertexAlphas; + materialProperties.vertexTangents = parameters2.vertexTangents; + materialProperties.toneMapping = parameters2.toneMapping; + } + __name(updateCommonMaterialProperties, "updateCommonMaterialProperties"); + function setProgram(camera, scene, geometry, material, object) { + if (scene.isScene !== true) scene = _emptyScene; + textures.resetTextureUnits(); + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const colorSpace = _currentRenderTarget === null ? _this.outputColorSpace : _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace; + const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); + const vertexAlphas = material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4; + const vertexTangents = !!geometry.attributes.tangent && (!!material.normalMap || material.anisotropy > 0); + const morphTargets = !!geometry.morphAttributes.position; + const morphNormals = !!geometry.morphAttributes.normal; + const morphColors = !!geometry.morphAttributes.color; + let toneMapping = NoToneMapping; + if (material.toneMapped) { + if (_currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true) { + toneMapping = _this.toneMapping; + } + } + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + const materialProperties = properties.get(material); + const lights = currentRenderState.state.lights; + if (_clippingEnabled === true) { + if (_localClippingEnabled === true || camera !== _currentCamera) { + const useCache = camera === _currentCamera && material.id === _currentMaterialId; + clipping.setState(material, camera, useCache); + } + } + let needsProgramChange = false; + if (material.version === materialProperties.__version) { + if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) { + needsProgramChange = true; + } else if (materialProperties.outputColorSpace !== colorSpace) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batching === false) { + needsProgramChange = true; + } else if (!object.isBatchedMesh && materialProperties.batching === true) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancing === false) { + needsProgramChange = true; + } else if (!object.isInstancedMesh && materialProperties.instancing === true) { + needsProgramChange = true; + } else if (object.isSkinnedMesh && materialProperties.skinning === false) { + needsProgramChange = true; + } else if (!object.isSkinnedMesh && materialProperties.skinning === true) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null) { + needsProgramChange = true; + } else if (materialProperties.envMap !== envMap) { + needsProgramChange = true; + } else if (material.fog === true && materialProperties.fog !== fog) { + needsProgramChange = true; + } else if (materialProperties.numClippingPlanes !== void 0 && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) { + needsProgramChange = true; + } else if (materialProperties.vertexAlphas !== vertexAlphas) { + needsProgramChange = true; + } else if (materialProperties.vertexTangents !== vertexTangents) { + needsProgramChange = true; + } else if (materialProperties.morphTargets !== morphTargets) { + needsProgramChange = true; + } else if (materialProperties.morphNormals !== morphNormals) { + needsProgramChange = true; + } else if (materialProperties.morphColors !== morphColors) { + needsProgramChange = true; + } else if (materialProperties.toneMapping !== toneMapping) { + needsProgramChange = true; + } else if (materialProperties.morphTargetsCount !== morphTargetsCount) { + needsProgramChange = true; + } + } else { + needsProgramChange = true; + materialProperties.__version = material.version; + } + let program = materialProperties.currentProgram; + if (needsProgramChange === true) { + program = getProgram(material, scene, object); + } + let refreshProgram = false; + let refreshMaterial = false; + let refreshLights = false; + const p_uniforms = program.getUniforms(), m_uniforms = materialProperties.uniforms; + if (state.useProgram(program.program)) { + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + } + if (material.id !== _currentMaterialId) { + _currentMaterialId = material.id; + refreshMaterial = true; + } + if (refreshProgram || _currentCamera !== camera) { + const reverseDepthBuffer2 = state.buffers.depth.getReversed(); + if (reverseDepthBuffer2) { + _currentProjectionMatrix.copy(camera.projectionMatrix); + toNormalizedProjectionMatrix(_currentProjectionMatrix); + toReversedProjectionMatrix(_currentProjectionMatrix); + p_uniforms.setValue(_gl, "projectionMatrix", _currentProjectionMatrix); + } else { + p_uniforms.setValue(_gl, "projectionMatrix", camera.projectionMatrix); + } + p_uniforms.setValue(_gl, "viewMatrix", camera.matrixWorldInverse); + const uCamPos = p_uniforms.map.cameraPosition; + if (uCamPos !== void 0) { + uCamPos.setValue(_gl, _vector32.setFromMatrixPosition(camera.matrixWorld)); + } + if (capabilities.logarithmicDepthBuffer) { + p_uniforms.setValue( + _gl, + "logDepthBufFC", + 2 / (Math.log(camera.far + 1) / Math.LN2) + ); + } + if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) { + p_uniforms.setValue(_gl, "isOrthographic", camera.isOrthographicCamera === true); + } + if (_currentCamera !== camera) { + _currentCamera = camera; + refreshMaterial = true; + refreshLights = true; + } + } + if (object.isSkinnedMesh) { + p_uniforms.setOptional(_gl, object, "bindMatrix"); + p_uniforms.setOptional(_gl, object, "bindMatrixInverse"); + const skeleton = object.skeleton; + if (skeleton) { + if (skeleton.boneTexture === null) skeleton.computeBoneTexture(); + p_uniforms.setValue(_gl, "boneTexture", skeleton.boneTexture, textures); + } + } + if (object.isBatchedMesh) { + p_uniforms.setOptional(_gl, object, "batchingTexture"); + p_uniforms.setValue(_gl, "batchingTexture", object._matricesTexture, textures); + p_uniforms.setOptional(_gl, object, "batchingIdTexture"); + p_uniforms.setValue(_gl, "batchingIdTexture", object._indirectTexture, textures); + p_uniforms.setOptional(_gl, object, "batchingColorTexture"); + if (object._colorsTexture !== null) { + p_uniforms.setValue(_gl, "batchingColorTexture", object._colorsTexture, textures); + } + } + const morphAttributes = geometry.morphAttributes; + if (morphAttributes.position !== void 0 || morphAttributes.normal !== void 0 || morphAttributes.color !== void 0) { + morphtargets.update(object, geometry, program); + } + if (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) { + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue(_gl, "receiveShadow", object.receiveShadow); + } + if (material.isMeshGouraudMaterial && material.envMap !== null) { + m_uniforms.envMap.value = envMap; + m_uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; + } + if (material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null) { + m_uniforms.envMapIntensity.value = scene.environmentIntensity; + } + if (refreshMaterial) { + p_uniforms.setValue(_gl, "toneMappingExposure", _this.toneMappingExposure); + if (materialProperties.needsLights) { + markUniformsLightsNeedsUpdate(m_uniforms, refreshLights); + } + if (fog && material.fog === true) { + materials.refreshFogUniforms(m_uniforms, fog); + } + materials.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[camera.id]); + WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); + } + if (material.isShaderMaterial && material.uniformsNeedUpdate === true) { + WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); + material.uniformsNeedUpdate = false; + } + if (material.isSpriteMaterial) { + p_uniforms.setValue(_gl, "center", object.center); + } + p_uniforms.setValue(_gl, "modelViewMatrix", object.modelViewMatrix); + p_uniforms.setValue(_gl, "normalMatrix", object.normalMatrix); + p_uniforms.setValue(_gl, "modelMatrix", object.matrixWorld); + if (material.isShaderMaterial || material.isRawShaderMaterial) { + const groups = material.uniformsGroups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + uniformsGroups.update(group, program); + uniformsGroups.bind(group, program); + } + } + return program; + } + __name(setProgram, "setProgram"); + function markUniformsLightsNeedsUpdate(uniforms, value) { + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + } + __name(markUniformsLightsNeedsUpdate, "markUniformsLightsNeedsUpdate"); + function materialNeedsLights(material) { + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true; + } + __name(materialNeedsLights, "materialNeedsLights"); + this.getActiveCubeFace = function() { + return _currentActiveCubeFace; + }; + this.getActiveMipmapLevel = function() { + return _currentActiveMipmapLevel; + }; + this.getRenderTarget = function() { + return _currentRenderTarget; + }; + this.setRenderTargetTextures = function(renderTarget, colorTexture, depthTexture) { + properties.get(renderTarget.texture).__webglTexture = colorTexture; + properties.get(renderTarget.depthTexture).__webglTexture = depthTexture; + const renderTargetProperties = properties.get(renderTarget); + renderTargetProperties.__hasExternalTextures = true; + renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === void 0; + if (!renderTargetProperties.__autoAllocateDepthBuffer) { + if (extensions.has("WEBGL_multisampled_render_to_texture") === true) { + console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"); + renderTargetProperties.__useRenderToTexture = false; + } + } + }; + this.setRenderTargetFramebuffer = function(renderTarget, defaultFramebuffer) { + const renderTargetProperties = properties.get(renderTarget); + renderTargetProperties.__webglFramebuffer = defaultFramebuffer; + renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === void 0; + }; + this.setRenderTarget = function(renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) { + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + let useDefaultFramebuffer = true; + let framebuffer = null; + let isCube = false; + let isRenderTarget3D = false; + if (renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + if (renderTargetProperties.__useDefaultFramebuffer !== void 0) { + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + useDefaultFramebuffer = false; + } else if (renderTargetProperties.__webglFramebuffer === void 0) { + textures.setupRenderTarget(renderTarget); + } else if (renderTargetProperties.__hasExternalTextures) { + textures.rebindTextures(renderTarget, properties.get(renderTarget.texture).__webglTexture, properties.get(renderTarget.depthTexture).__webglTexture); + } else if (renderTarget.depthBuffer) { + const depthTexture = renderTarget.depthTexture; + if (renderTargetProperties.__boundDepthTexture !== depthTexture) { + if (depthTexture !== null && properties.has(depthTexture) && (renderTarget.width !== depthTexture.image.width || renderTarget.height !== depthTexture.image.height)) { + throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size."); + } + textures.setupDepthRenderbuffer(renderTarget); + } + } + const texture = renderTarget.texture; + if (texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + isRenderTarget3D = true; + } + const __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget) { + if (Array.isArray(__webglFramebuffer[activeCubeFace])) { + framebuffer = __webglFramebuffer[activeCubeFace][activeMipmapLevel]; + } else { + framebuffer = __webglFramebuffer[activeCubeFace]; + } + isCube = true; + } else if (renderTarget.samples > 0 && textures.useMultisampledRTT(renderTarget) === false) { + framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; + } else { + if (Array.isArray(__webglFramebuffer)) { + framebuffer = __webglFramebuffer[activeMipmapLevel]; + } else { + framebuffer = __webglFramebuffer; + } + } + _currentViewport.copy(renderTarget.viewport); + _currentScissor.copy(renderTarget.scissor); + _currentScissorTest = renderTarget.scissorTest; + } else { + _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor(); + _currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor(); + _currentScissorTest = _scissorTest; + } + const framebufferBound = state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (framebufferBound && useDefaultFramebuffer) { + state.drawBuffers(renderTarget, framebuffer); + } + state.viewport(_currentViewport); + state.scissor(_currentScissor); + state.setScissorTest(_currentScissorTest); + if (isCube) { + const textureProperties = properties.get(renderTarget.texture); + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel); + } else if (isRenderTarget3D) { + const textureProperties = properties.get(renderTarget.texture); + const layer = activeCubeFace || 0; + _gl.framebufferTextureLayer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer); + } + _currentMaterialId = -1; + }; + this.readRenderTargetPixels = function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { + if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + return; + } + let framebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { + framebuffer = framebuffer[activeCubeFaceIndex]; + } + if (framebuffer) { + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + try { + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + if (!capabilities.textureFormatReadable(textureFormat)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + return; + } + if (!capabilities.textureTypeReadable(textureType)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + return; + } + if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { + _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer); + } + } finally { + const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2); + } + } + }; + this.readRenderTargetPixelsAsync = async function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { + if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + } + let framebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { + framebuffer = framebuffer[activeCubeFaceIndex]; + } + if (framebuffer) { + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + if (!capabilities.textureFormatReadable(textureFormat)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format."); + } + if (!capabilities.textureTypeReadable(textureType)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type."); + } + if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + const glBuffer = _gl.createBuffer(); + _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); + _gl.bufferData(_gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ); + _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), 0); + const currFramebuffer = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; + state.bindFramebuffer(_gl.FRAMEBUFFER, currFramebuffer); + const sync = _gl.fenceSync(_gl.SYNC_GPU_COMMANDS_COMPLETE, 0); + _gl.flush(); + await probeAsync(_gl, sync, 4); + _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); + _gl.getBufferSubData(_gl.PIXEL_PACK_BUFFER, 0, buffer); + _gl.deleteBuffer(glBuffer); + _gl.deleteSync(sync); + return buffer; + } else { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range."); + } + } + }; + this.copyFramebufferToTexture = function(texture, position = null, level = 0) { + if (texture.isTexture !== true) { + warnOnce("WebGLRenderer: copyFramebufferToTexture function signature has changed."); + position = arguments[0] || null; + texture = arguments[1]; + } + const levelScale = Math.pow(2, -level); + const width = Math.floor(texture.image.width * levelScale); + const height = Math.floor(texture.image.height * levelScale); + const x = position !== null ? position.x : 0; + const y = position !== null ? position.y : 0; + textures.setTexture2D(texture, 0); + _gl.copyTexSubImage2D(_gl.TEXTURE_2D, level, 0, 0, x, y, width, height); + state.unbindTexture(); + }; + this.copyTextureToTexture = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { + if (srcTexture.isTexture !== true) { + warnOnce("WebGLRenderer: copyTextureToTexture function signature has changed."); + dstPosition = arguments[0] || null; + srcTexture = arguments[1]; + dstTexture = arguments[2]; + level = arguments[3] || 0; + srcRegion = null; + } + let width, height, depth2, minX, minY, minZ; + let dstX, dstY, dstZ; + const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; + if (srcRegion !== null) { + width = srcRegion.max.x - srcRegion.min.x; + height = srcRegion.max.y - srcRegion.min.y; + depth2 = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1; + minX = srcRegion.min.x; + minY = srcRegion.min.y; + minZ = srcRegion.isBox3 ? srcRegion.min.z : 0; + } else { + width = image.width; + height = image.height; + depth2 = image.depth || 1; + minX = 0; + minY = 0; + minZ = 0; + } + if (dstPosition !== null) { + dstX = dstPosition.x; + dstY = dstPosition.y; + dstZ = dstPosition.z; + } else { + dstX = 0; + dstY = 0; + dstZ = 0; + } + const glFormat = utils.convert(dstTexture.format); + const glType = utils.convert(dstTexture.type); + let glTarget; + if (dstTexture.isData3DTexture) { + textures.setTexture3D(dstTexture, 0); + glTarget = _gl.TEXTURE_3D; + } else if (dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture) { + textures.setTexture2DArray(dstTexture, 0); + glTarget = _gl.TEXTURE_2D_ARRAY; + } else { + textures.setTexture2D(dstTexture, 0); + glTarget = _gl.TEXTURE_2D; + } + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); + const currentUnpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); + const currentUnpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); + const currentUnpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); + const currentUnpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); + const currentUnpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, minX); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, minY); + _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, minZ); + const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture; + const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture; + if (srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture) { + const srcTextureProperties = properties.get(srcTexture); + const dstTextureProperties = properties.get(dstTexture); + const srcRenderTargetProperties = properties.get(srcTextureProperties.__renderTarget); + const dstRenderTargetProperties = properties.get(dstTextureProperties.__renderTarget); + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer); + for (let i = 0; i < depth2; i++) { + if (isSrc3D) { + _gl.framebufferTextureLayer(_gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get(srcTexture).__webglTexture, level, minZ + i); + } + if (srcTexture.isDepthTexture) { + if (isDst3D) { + _gl.framebufferTextureLayer(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get(dstTexture).__webglTexture, level, dstZ + i); + } + _gl.blitFramebuffer(minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST); + } else if (isDst3D) { + _gl.copyTexSubImage3D(glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height); + } else { + _gl.copyTexSubImage2D(glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height); + } + } + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, null); + } else { + if (isDst3D) { + if (srcTexture.isDataTexture || srcTexture.isData3DTexture) { + _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image.data); + } else if (dstTexture.isCompressedArrayTexture) { + _gl.compressedTexSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, image.data); + } else { + _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image); + } + } else { + if (srcTexture.isDataTexture) { + _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data); + } else if (srcTexture.isCompressedTexture) { + _gl.compressedTexSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data); + } else { + _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image); + } + } + } + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); + _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); + if (level === 0 && dstTexture.generateMipmaps) { + _gl.generateMipmap(glTarget); + } + state.unbindTexture(); + }; + this.copyTextureToTexture3D = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { + if (srcTexture.isTexture !== true) { + warnOnce("WebGLRenderer: copyTextureToTexture3D function signature has changed."); + srcRegion = arguments[0] || null; + dstPosition = arguments[1] || null; + srcTexture = arguments[2]; + dstTexture = arguments[3]; + level = arguments[4] || 0; + } + warnOnce('WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.'); + return this.copyTextureToTexture(srcTexture, dstTexture, srcRegion, dstPosition, level); + }; + this.initRenderTarget = function(target) { + if (properties.get(target).__webglFramebuffer === void 0) { + textures.setupRenderTarget(target); + } + }; + this.initTexture = function(texture) { + if (texture.isCubeTexture) { + textures.setTextureCube(texture, 0); + } else if (texture.isData3DTexture) { + textures.setTexture3D(texture, 0); + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + textures.setTexture2DArray(texture, 0); + } else { + textures.setTexture2D(texture, 0); + } + state.unbindTexture(); + }; + this.resetState = function() { + _currentActiveCubeFace = 0; + _currentActiveMipmapLevel = 0; + _currentRenderTarget = null; + state.reset(); + bindingStates.reset(); + }; + if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); + } + } + get coordinateSystem() { + return WebGLCoordinateSystem; + } + get outputColorSpace() { + return this._outputColorSpace; + } + set outputColorSpace(colorSpace) { + this._outputColorSpace = colorSpace; + const gl = this.getContext(); + gl.drawingBufferColorspace = ColorManagement._getDrawingBufferColorSpace(colorSpace); + gl.unpackColorSpace = ColorManagement._getUnpackColorSpace(); + } +} +class FogExp2 { + static { + __name(this, "FogExp2"); + } + constructor(color, density = 25e-5) { + this.isFogExp2 = true; + this.name = ""; + this.color = new Color(color); + this.density = density; + } + clone() { + return new FogExp2(this.color, this.density); + } + toJSON() { + return { + type: "FogExp2", + name: this.name, + color: this.color.getHex(), + density: this.density + }; + } +} +class Fog { + static { + __name(this, "Fog"); + } + constructor(color, near = 1, far = 1e3) { + this.isFog = true; + this.name = ""; + this.color = new Color(color); + this.near = near; + this.far = far; + } + clone() { + return new Fog(this.color, this.near, this.far); + } + toJSON() { + return { + type: "Fog", + name: this.name, + color: this.color.getHex(), + near: this.near, + far: this.far + }; + } +} +class Scene extends Object3D { + static { + __name(this, "Scene"); + } + constructor() { + super(); + this.isScene = true; + this.type = "Scene"; + this.background = null; + this.environment = null; + this.fog = null; + this.backgroundBlurriness = 0; + this.backgroundIntensity = 1; + this.backgroundRotation = new Euler(); + this.environmentIntensity = 1; + this.environmentRotation = new Euler(); + this.overrideMaterial = null; + if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); + } + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.background !== null) this.background = source.background.clone(); + if (source.environment !== null) this.environment = source.environment.clone(); + if (source.fog !== null) this.fog = source.fog.clone(); + this.backgroundBlurriness = source.backgroundBlurriness; + this.backgroundIntensity = source.backgroundIntensity; + this.backgroundRotation.copy(source.backgroundRotation); + this.environmentIntensity = source.environmentIntensity; + this.environmentRotation.copy(source.environmentRotation); + if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone(); + this.matrixAutoUpdate = source.matrixAutoUpdate; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.fog !== null) data.object.fog = this.fog.toJSON(); + if (this.backgroundBlurriness > 0) data.object.backgroundBlurriness = this.backgroundBlurriness; + if (this.backgroundIntensity !== 1) data.object.backgroundIntensity = this.backgroundIntensity; + data.object.backgroundRotation = this.backgroundRotation.toArray(); + if (this.environmentIntensity !== 1) data.object.environmentIntensity = this.environmentIntensity; + data.object.environmentRotation = this.environmentRotation.toArray(); + return data; + } +} +class InterleavedBuffer { + static { + __name(this, "InterleavedBuffer"); + } + constructor(array, stride) { + this.isInterleavedBuffer = true; + this.array = array; + this.stride = stride; + this.count = array !== void 0 ? array.length / stride : 0; + this.usage = StaticDrawUsage; + this.updateRanges = []; + this.version = 0; + this.uuid = generateUUID(); + } + onUploadCallback() { + } + set needsUpdate(value) { + if (value === true) this.version++; + } + setUsage(value) { + this.usage = value; + return this; + } + addUpdateRange(start, count) { + this.updateRanges.push({ start, count }); + } + clearUpdateRanges() { + this.updateRanges.length = 0; + } + copy(source) { + this.array = new source.array.constructor(source.array); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + return this; + } + copyAt(index1, attribute, index2) { + index1 *= this.stride; + index2 *= attribute.stride; + for (let i = 0, l = this.stride; i < l; i++) { + this.array[index1 + i] = attribute.array[index2 + i]; + } + return this; + } + set(value, offset = 0) { + this.array.set(value, offset); + return this; + } + clone(data) { + if (data.arrayBuffers === void 0) { + data.arrayBuffers = {}; + } + if (this.array.buffer._uuid === void 0) { + this.array.buffer._uuid = generateUUID(); + } + if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { + data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer; + } + const array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]); + const ib = new this.constructor(array, this.stride); + ib.setUsage(this.usage); + return ib; + } + onUpload(callback) { + this.onUploadCallback = callback; + return this; + } + toJSON(data) { + if (data.arrayBuffers === void 0) { + data.arrayBuffers = {}; + } + if (this.array.buffer._uuid === void 0) { + this.array.buffer._uuid = generateUUID(); + } + if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { + data.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer)); + } + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + } +} +const _vector$6 = /* @__PURE__ */ new Vector3(); +class InterleavedBufferAttribute { + static { + __name(this, "InterleavedBufferAttribute"); + } + constructor(interleavedBuffer, itemSize, offset, normalized = false) { + this.isInterleavedBufferAttribute = true; + this.name = ""; + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + this.normalized = normalized; + } + get count() { + return this.data.count; + } + get array() { + return this.data.array; + } + set needsUpdate(value) { + this.data.needsUpdate = value; + } + applyMatrix4(m) { + for (let i = 0, l = this.data.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.applyMatrix4(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + applyNormalMatrix(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.applyNormalMatrix(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + transformDirection(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.transformDirection(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + getComponent(index, component) { + let value = this.array[index * this.data.stride + this.offset + component]; + if (this.normalized) value = denormalize(value, this.array); + return value; + } + setComponent(index, component, value) { + if (this.normalized) value = normalize(value, this.array); + this.data.array[index * this.data.stride + this.offset + component] = value; + return this; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.data.array[index * this.data.stride + this.offset] = x; + return this; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.data.array[index * this.data.stride + this.offset + 1] = y; + return this; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.data.array[index * this.data.stride + this.offset + 2] = z; + return this; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.data.array[index * this.data.stride + this.offset + 3] = w; + return this; + } + getX(index) { + let x = this.data.array[index * this.data.stride + this.offset]; + if (this.normalized) x = denormalize(x, this.array); + return x; + } + getY(index) { + let y = this.data.array[index * this.data.stride + this.offset + 1]; + if (this.normalized) y = denormalize(y, this.array); + return y; + } + getZ(index) { + let z = this.data.array[index * this.data.stride + this.offset + 2]; + if (this.normalized) z = denormalize(z, this.array); + return z; + } + getW(index) { + let w = this.data.array[index * this.data.stride + this.offset + 3]; + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setXY(index, x, y) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + return this; + } + setXYZ(index, x, y, z) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + this.data.array[index + 2] = z; + return this; + } + setXYZW(index, x, y, z, w) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + this.data.array[index + 2] = z; + this.data.array[index + 3] = w; + return this; + } + clone(data) { + if (data === void 0) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data."); + const array = []; + for (let i = 0; i < this.count; i++) { + const index = i * this.data.stride + this.offset; + for (let j = 0; j < this.itemSize; j++) { + array.push(this.data.array[index + j]); + } + } + return new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized); + } else { + if (data.interleavedBuffers === void 0) { + data.interleavedBuffers = {}; + } + if (data.interleavedBuffers[this.data.uuid] === void 0) { + data.interleavedBuffers[this.data.uuid] = this.data.clone(data); + } + return new InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized); + } + } + toJSON(data) { + if (data === void 0) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data."); + const array = []; + for (let i = 0; i < this.count; i++) { + const index = i * this.data.stride + this.offset; + for (let j = 0; j < this.itemSize; j++) { + array.push(this.data.array[index + j]); + } + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array, + normalized: this.normalized + }; + } else { + if (data.interleavedBuffers === void 0) { + data.interleavedBuffers = {}; + } + if (data.interleavedBuffers[this.data.uuid] === void 0) { + data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data); + } + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + } + } +} +class SpriteMaterial extends Material { + static { + __name(this, "SpriteMaterial"); + } + static get type() { + return "SpriteMaterial"; + } + constructor(parameters) { + super(); + this.isSpriteMaterial = true; + this.color = new Color(16777215); + this.map = null; + this.alphaMap = null; + this.rotation = 0; + this.sizeAttenuation = true; + this.transparent = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.rotation = source.rotation; + this.sizeAttenuation = source.sizeAttenuation; + this.fog = source.fog; + return this; + } +} +let _geometry; +const _intersectPoint = /* @__PURE__ */ new Vector3(); +const _worldScale = /* @__PURE__ */ new Vector3(); +const _mvPosition = /* @__PURE__ */ new Vector3(); +const _alignedPosition = /* @__PURE__ */ new Vector2(); +const _rotatedPosition = /* @__PURE__ */ new Vector2(); +const _viewWorldMatrix = /* @__PURE__ */ new Matrix4(); +const _vA$2 = /* @__PURE__ */ new Vector3(); +const _vB$2 = /* @__PURE__ */ new Vector3(); +const _vC$2 = /* @__PURE__ */ new Vector3(); +const _uvA = /* @__PURE__ */ new Vector2(); +const _uvB = /* @__PURE__ */ new Vector2(); +const _uvC = /* @__PURE__ */ new Vector2(); +class Sprite extends Object3D { + static { + __name(this, "Sprite"); + } + constructor(material = new SpriteMaterial()) { + super(); + this.isSprite = true; + this.type = "Sprite"; + if (_geometry === void 0) { + _geometry = new BufferGeometry(); + const float32Array = new Float32Array([ + -0.5, + -0.5, + 0, + 0, + 0, + 0.5, + -0.5, + 0, + 1, + 0, + 0.5, + 0.5, + 0, + 1, + 1, + -0.5, + 0.5, + 0, + 0, + 1 + ]); + const interleavedBuffer = new InterleavedBuffer(float32Array, 5); + _geometry.setIndex([0, 1, 2, 0, 2, 3]); + _geometry.setAttribute("position", new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); + _geometry.setAttribute("uv", new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); + } + this.geometry = _geometry; + this.material = material; + this.center = new Vector2(0.5, 0.5); + } + raycast(raycaster, intersects2) { + if (raycaster.camera === null) { + console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'); + } + _worldScale.setFromMatrixScale(this.matrixWorld); + _viewWorldMatrix.copy(raycaster.camera.matrixWorld); + this.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld); + _mvPosition.setFromMatrixPosition(this.modelViewMatrix); + if (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) { + _worldScale.multiplyScalar(-_mvPosition.z); + } + const rotation = this.material.rotation; + let sin, cos; + if (rotation !== 0) { + cos = Math.cos(rotation); + sin = Math.sin(rotation); + } + const center = this.center; + transformVertex(_vA$2.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); + transformVertex(_vB$2.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); + transformVertex(_vC$2.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); + _uvA.set(0, 0); + _uvB.set(1, 0); + _uvC.set(1, 1); + let intersect2 = raycaster.ray.intersectTriangle(_vA$2, _vB$2, _vC$2, false, _intersectPoint); + if (intersect2 === null) { + transformVertex(_vB$2.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); + _uvB.set(0, 1); + intersect2 = raycaster.ray.intersectTriangle(_vA$2, _vC$2, _vB$2, false, _intersectPoint); + if (intersect2 === null) { + return; + } + } + const distance = raycaster.ray.origin.distanceTo(_intersectPoint); + if (distance < raycaster.near || distance > raycaster.far) return; + intersects2.push({ + distance, + point: _intersectPoint.clone(), + uv: Triangle.getInterpolation(_intersectPoint, _vA$2, _vB$2, _vC$2, _uvA, _uvB, _uvC, new Vector2()), + face: null, + object: this + }); + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.center !== void 0) this.center.copy(source.center); + this.material = source.material; + return this; + } +} +function transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) { + _alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); + if (sin !== void 0) { + _rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y; + _rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y; + } else { + _rotatedPosition.copy(_alignedPosition); + } + vertexPosition.copy(mvPosition); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + vertexPosition.applyMatrix4(_viewWorldMatrix); +} +__name(transformVertex, "transformVertex"); +const _v1$2 = /* @__PURE__ */ new Vector3(); +const _v2$1 = /* @__PURE__ */ new Vector3(); +class LOD extends Object3D { + static { + __name(this, "LOD"); + } + constructor() { + super(); + this._currentLevel = 0; + this.type = "LOD"; + Object.defineProperties(this, { + levels: { + enumerable: true, + value: [] + }, + isLOD: { + value: true + } + }); + this.autoUpdate = true; + } + copy(source) { + super.copy(source, false); + const levels = source.levels; + for (let i = 0, l = levels.length; i < l; i++) { + const level = levels[i]; + this.addLevel(level.object.clone(), level.distance, level.hysteresis); + } + this.autoUpdate = source.autoUpdate; + return this; + } + addLevel(object, distance = 0, hysteresis = 0) { + distance = Math.abs(distance); + const levels = this.levels; + let l; + for (l = 0; l < levels.length; l++) { + if (distance < levels[l].distance) { + break; + } + } + levels.splice(l, 0, { distance, hysteresis, object }); + this.add(object); + return this; + } + removeLevel(distance) { + const levels = this.levels; + for (let i = 0; i < levels.length; i++) { + if (levels[i].distance === distance) { + const removedElements = levels.splice(i, 1); + this.remove(removedElements[0].object); + return true; + } + } + return false; + } + getCurrentLevel() { + return this._currentLevel; + } + getObjectForDistance(distance) { + const levels = this.levels; + if (levels.length > 0) { + let i, l; + for (i = 1, l = levels.length; i < l; i++) { + let levelDistance = levels[i].distance; + if (levels[i].object.visible) { + levelDistance -= levelDistance * levels[i].hysteresis; + } + if (distance < levelDistance) { + break; + } + } + return levels[i - 1].object; + } + return null; + } + raycast(raycaster, intersects2) { + const levels = this.levels; + if (levels.length > 0) { + _v1$2.setFromMatrixPosition(this.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_v1$2); + this.getObjectForDistance(distance).raycast(raycaster, intersects2); + } + } + update(camera) { + const levels = this.levels; + if (levels.length > 1) { + _v1$2.setFromMatrixPosition(camera.matrixWorld); + _v2$1.setFromMatrixPosition(this.matrixWorld); + const distance = _v1$2.distanceTo(_v2$1) / camera.zoom; + levels[0].object.visible = true; + let i, l; + for (i = 1, l = levels.length; i < l; i++) { + let levelDistance = levels[i].distance; + if (levels[i].object.visible) { + levelDistance -= levelDistance * levels[i].hysteresis; + } + if (distance >= levelDistance) { + levels[i - 1].object.visible = false; + levels[i].object.visible = true; + } else { + break; + } + } + this._currentLevel = i - 1; + for (; i < l; i++) { + levels[i].object.visible = false; + } + } + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.autoUpdate === false) data.object.autoUpdate = false; + data.object.levels = []; + const levels = this.levels; + for (let i = 0, l = levels.length; i < l; i++) { + const level = levels[i]; + data.object.levels.push({ + object: level.object.uuid, + distance: level.distance, + hysteresis: level.hysteresis + }); + } + return data; + } +} +const _basePosition = /* @__PURE__ */ new Vector3(); +const _skinIndex = /* @__PURE__ */ new Vector4(); +const _skinWeight = /* @__PURE__ */ new Vector4(); +const _vector3 = /* @__PURE__ */ new Vector3(); +const _matrix4 = /* @__PURE__ */ new Matrix4(); +const _vertex = /* @__PURE__ */ new Vector3(); +const _sphere$4 = /* @__PURE__ */ new Sphere(); +const _inverseMatrix$2 = /* @__PURE__ */ new Matrix4(); +const _ray$2 = /* @__PURE__ */ new Ray(); +class SkinnedMesh extends Mesh { + static { + __name(this, "SkinnedMesh"); + } + constructor(geometry, material) { + super(geometry, material); + this.isSkinnedMesh = true; + this.type = "SkinnedMesh"; + this.bindMode = AttachedBindMode; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + this.boundingBox = null; + this.boundingSphere = null; + } + computeBoundingBox() { + const geometry = this.geometry; + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + this.boundingBox.makeEmpty(); + const positionAttribute = geometry.getAttribute("position"); + for (let i = 0; i < positionAttribute.count; i++) { + this.getVertexPosition(i, _vertex); + this.boundingBox.expandByPoint(_vertex); + } + } + computeBoundingSphere() { + const geometry = this.geometry; + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + this.boundingSphere.makeEmpty(); + const positionAttribute = geometry.getAttribute("position"); + for (let i = 0; i < positionAttribute.count; i++) { + this.getVertexPosition(i, _vertex); + this.boundingSphere.expandByPoint(_vertex); + } + } + copy(source, recursive) { + super.copy(source, recursive); + this.bindMode = source.bindMode; + this.bindMatrix.copy(source.bindMatrix); + this.bindMatrixInverse.copy(source.bindMatrixInverse); + this.skeleton = source.skeleton; + if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); + if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); + return this; + } + raycast(raycaster, intersects2) { + const material = this.material; + const matrixWorld = this.matrixWorld; + if (material === void 0) return; + if (this.boundingSphere === null) this.computeBoundingSphere(); + _sphere$4.copy(this.boundingSphere); + _sphere$4.applyMatrix4(matrixWorld); + if (raycaster.ray.intersectsSphere(_sphere$4) === false) return; + _inverseMatrix$2.copy(matrixWorld).invert(); + _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); + if (this.boundingBox !== null) { + if (_ray$2.intersectsBox(this.boundingBox) === false) return; + } + this._computeIntersections(raycaster, intersects2, _ray$2); + } + getVertexPosition(index, target) { + super.getVertexPosition(index, target); + this.applyBoneTransform(index, target); + return target; + } + bind(skeleton, bindMatrix) { + this.skeleton = skeleton; + if (bindMatrix === void 0) { + this.updateMatrixWorld(true); + this.skeleton.calculateInverses(); + bindMatrix = this.matrixWorld; + } + this.bindMatrix.copy(bindMatrix); + this.bindMatrixInverse.copy(bindMatrix).invert(); + } + pose() { + this.skeleton.pose(); + } + normalizeSkinWeights() { + const vector = new Vector4(); + const skinWeight = this.geometry.attributes.skinWeight; + for (let i = 0, l = skinWeight.count; i < l; i++) { + vector.fromBufferAttribute(skinWeight, i); + const scale = 1 / vector.manhattanLength(); + if (scale !== Infinity) { + vector.multiplyScalar(scale); + } else { + vector.set(1, 0, 0, 0); + } + skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w); + } + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + if (this.bindMode === AttachedBindMode) { + this.bindMatrixInverse.copy(this.matrixWorld).invert(); + } else if (this.bindMode === DetachedBindMode) { + this.bindMatrixInverse.copy(this.bindMatrix).invert(); + } else { + console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode); + } + } + applyBoneTransform(index, vector) { + const skeleton = this.skeleton; + const geometry = this.geometry; + _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index); + _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index); + _basePosition.copy(vector).applyMatrix4(this.bindMatrix); + vector.set(0, 0, 0); + for (let i = 0; i < 4; i++) { + const weight = _skinWeight.getComponent(i); + if (weight !== 0) { + const boneIndex = _skinIndex.getComponent(i); + _matrix4.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]); + vector.addScaledVector(_vector3.copy(_basePosition).applyMatrix4(_matrix4), weight); + } + } + return vector.applyMatrix4(this.bindMatrixInverse); + } +} +class Bone extends Object3D { + static { + __name(this, "Bone"); + } + constructor() { + super(); + this.isBone = true; + this.type = "Bone"; + } +} +class DataTexture extends Texture { + static { + __name(this, "DataTexture"); + } + constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace) { + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isDataTexture = true; + this.image = { data, width, height }; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + } +} +const _offsetMatrix = /* @__PURE__ */ new Matrix4(); +const _identityMatrix$1 = /* @__PURE__ */ new Matrix4(); +class Skeleton { + static { + __name(this, "Skeleton"); + } + constructor(bones = [], boneInverses = []) { + this.uuid = generateUUID(); + this.bones = bones.slice(0); + this.boneInverses = boneInverses; + this.boneMatrices = null; + this.boneTexture = null; + this.init(); + } + init() { + const bones = this.bones; + const boneInverses = this.boneInverses; + this.boneMatrices = new Float32Array(bones.length * 16); + if (boneInverses.length === 0) { + this.calculateInverses(); + } else { + if (bones.length !== boneInverses.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."); + this.boneInverses = []; + for (let i = 0, il = this.bones.length; i < il; i++) { + this.boneInverses.push(new Matrix4()); + } + } + } + } + calculateInverses() { + this.boneInverses.length = 0; + for (let i = 0, il = this.bones.length; i < il; i++) { + const inverse = new Matrix4(); + if (this.bones[i]) { + inverse.copy(this.bones[i].matrixWorld).invert(); + } + this.boneInverses.push(inverse); + } + } + pose() { + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone) { + bone.matrixWorld.copy(this.boneInverses[i]).invert(); + } + } + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone) { + if (bone.parent && bone.parent.isBone) { + bone.matrix.copy(bone.parent.matrixWorld).invert(); + bone.matrix.multiply(bone.matrixWorld); + } else { + bone.matrix.copy(bone.matrixWorld); + } + bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); + } + } + } + update() { + const bones = this.bones; + const boneInverses = this.boneInverses; + const boneMatrices = this.boneMatrices; + const boneTexture = this.boneTexture; + for (let i = 0, il = bones.length; i < il; i++) { + const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix$1; + _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]); + _offsetMatrix.toArray(boneMatrices, i * 16); + } + if (boneTexture !== null) { + boneTexture.needsUpdate = true; + } + } + clone() { + return new Skeleton(this.bones, this.boneInverses); + } + computeBoneTexture() { + let size = Math.sqrt(this.bones.length * 4); + size = Math.ceil(size / 4) * 4; + size = Math.max(size, 4); + const boneMatrices = new Float32Array(size * size * 4); + boneMatrices.set(this.boneMatrices); + const boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType); + boneTexture.needsUpdate = true; + this.boneMatrices = boneMatrices; + this.boneTexture = boneTexture; + return this; + } + getBoneByName(name) { + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone.name === name) { + return bone; + } + } + return void 0; + } + dispose() { + if (this.boneTexture !== null) { + this.boneTexture.dispose(); + this.boneTexture = null; + } + } + fromJSON(json, bones) { + this.uuid = json.uuid; + for (let i = 0, l = json.bones.length; i < l; i++) { + const uuid = json.bones[i]; + let bone = bones[uuid]; + if (bone === void 0) { + console.warn("THREE.Skeleton: No bone found with UUID:", uuid); + bone = new Bone(); + } + this.bones.push(bone); + this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i])); + } + this.init(); + return this; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + data.uuid = this.uuid; + const bones = this.bones; + const boneInverses = this.boneInverses; + for (let i = 0, l = bones.length; i < l; i++) { + const bone = bones[i]; + data.bones.push(bone.uuid); + const boneInverse = boneInverses[i]; + data.boneInverses.push(boneInverse.toArray()); + } + return data; + } +} +class InstancedBufferAttribute extends BufferAttribute { + static { + __name(this, "InstancedBufferAttribute"); + } + constructor(array, itemSize, normalized, meshPerAttribute = 1) { + super(array, itemSize, normalized); + this.isInstancedBufferAttribute = true; + this.meshPerAttribute = meshPerAttribute; + } + copy(source) { + super.copy(source); + this.meshPerAttribute = source.meshPerAttribute; + return this; + } + toJSON() { + const data = super.toJSON(); + data.meshPerAttribute = this.meshPerAttribute; + data.isInstancedBufferAttribute = true; + return data; + } +} +const _instanceLocalMatrix = /* @__PURE__ */ new Matrix4(); +const _instanceWorldMatrix = /* @__PURE__ */ new Matrix4(); +const _instanceIntersects = []; +const _box3 = /* @__PURE__ */ new Box3(); +const _identity = /* @__PURE__ */ new Matrix4(); +const _mesh$1 = /* @__PURE__ */ new Mesh(); +const _sphere$3 = /* @__PURE__ */ new Sphere(); +class InstancedMesh extends Mesh { + static { + __name(this, "InstancedMesh"); + } + constructor(geometry, material, count) { + super(geometry, material); + this.isInstancedMesh = true; + this.instanceMatrix = new InstancedBufferAttribute(new Float32Array(count * 16), 16); + this.instanceColor = null; + this.morphTexture = null; + this.count = count; + this.boundingBox = null; + this.boundingSphere = null; + for (let i = 0; i < count; i++) { + this.setMatrixAt(i, _identity); + } + } + computeBoundingBox() { + const geometry = this.geometry; + const count = this.count; + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + this.boundingBox.makeEmpty(); + for (let i = 0; i < count; i++) { + this.getMatrixAt(i, _instanceLocalMatrix); + _box3.copy(geometry.boundingBox).applyMatrix4(_instanceLocalMatrix); + this.boundingBox.union(_box3); + } + } + computeBoundingSphere() { + const geometry = this.geometry; + const count = this.count; + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + if (geometry.boundingSphere === null) { + geometry.computeBoundingSphere(); + } + this.boundingSphere.makeEmpty(); + for (let i = 0; i < count; i++) { + this.getMatrixAt(i, _instanceLocalMatrix); + _sphere$3.copy(geometry.boundingSphere).applyMatrix4(_instanceLocalMatrix); + this.boundingSphere.union(_sphere$3); + } + } + copy(source, recursive) { + super.copy(source, recursive); + this.instanceMatrix.copy(source.instanceMatrix); + if (source.morphTexture !== null) this.morphTexture = source.morphTexture.clone(); + if (source.instanceColor !== null) this.instanceColor = source.instanceColor.clone(); + this.count = source.count; + if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); + if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); + return this; + } + getColorAt(index, color) { + color.fromArray(this.instanceColor.array, index * 3); + } + getMatrixAt(index, matrix) { + matrix.fromArray(this.instanceMatrix.array, index * 16); + } + getMorphAt(index, object) { + const objectInfluences = object.morphTargetInfluences; + const array = this.morphTexture.source.data.data; + const len = objectInfluences.length + 1; + const dataIndex = index * len + 1; + for (let i = 0; i < objectInfluences.length; i++) { + objectInfluences[i] = array[dataIndex + i]; + } + } + raycast(raycaster, intersects2) { + const matrixWorld = this.matrixWorld; + const raycastTimes = this.count; + _mesh$1.geometry = this.geometry; + _mesh$1.material = this.material; + if (_mesh$1.material === void 0) return; + if (this.boundingSphere === null) this.computeBoundingSphere(); + _sphere$3.copy(this.boundingSphere); + _sphere$3.applyMatrix4(matrixWorld); + if (raycaster.ray.intersectsSphere(_sphere$3) === false) return; + for (let instanceId = 0; instanceId < raycastTimes; instanceId++) { + this.getMatrixAt(instanceId, _instanceLocalMatrix); + _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); + _mesh$1.matrixWorld = _instanceWorldMatrix; + _mesh$1.raycast(raycaster, _instanceIntersects); + for (let i = 0, l = _instanceIntersects.length; i < l; i++) { + const intersect2 = _instanceIntersects[i]; + intersect2.instanceId = instanceId; + intersect2.object = this; + intersects2.push(intersect2); + } + _instanceIntersects.length = 0; + } + } + setColorAt(index, color) { + if (this.instanceColor === null) { + this.instanceColor = new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count * 3).fill(1), 3); + } + color.toArray(this.instanceColor.array, index * 3); + } + setMatrixAt(index, matrix) { + matrix.toArray(this.instanceMatrix.array, index * 16); + } + setMorphAt(index, object) { + const objectInfluences = object.morphTargetInfluences; + const len = objectInfluences.length + 1; + if (this.morphTexture === null) { + this.morphTexture = new DataTexture(new Float32Array(len * this.count), len, this.count, RedFormat, FloatType); + } + const array = this.morphTexture.source.data.data; + let morphInfluencesSum = 0; + for (let i = 0; i < objectInfluences.length; i++) { + morphInfluencesSum += objectInfluences[i]; + } + const morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + const dataIndex = len * index; + array[dataIndex] = morphBaseInfluence; + array.set(objectInfluences, dataIndex + 1); + } + updateMorphTargets() { + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + if (this.morphTexture !== null) { + this.morphTexture.dispose(); + this.morphTexture = null; + } + return this; + } +} +function ascIdSort(a, b) { + return a - b; +} +__name(ascIdSort, "ascIdSort"); +function sortOpaque(a, b) { + return a.z - b.z; +} +__name(sortOpaque, "sortOpaque"); +function sortTransparent(a, b) { + return b.z - a.z; +} +__name(sortTransparent, "sortTransparent"); +class MultiDrawRenderList { + static { + __name(this, "MultiDrawRenderList"); + } + constructor() { + this.index = 0; + this.pool = []; + this.list = []; + } + push(start, count, z, index) { + const pool = this.pool; + const list = this.list; + if (this.index >= pool.length) { + pool.push({ + start: -1, + count: -1, + z: -1, + index: -1 + }); + } + const item = pool[this.index]; + list.push(item); + this.index++; + item.start = start; + item.count = count; + item.z = z; + item.index = index; + } + reset() { + this.list.length = 0; + this.index = 0; + } +} +const _matrix$1 = /* @__PURE__ */ new Matrix4(); +const _whiteColor = /* @__PURE__ */ new Color(1, 1, 1); +const _frustum = /* @__PURE__ */ new Frustum(); +const _box$1 = /* @__PURE__ */ new Box3(); +const _sphere$2 = /* @__PURE__ */ new Sphere(); +const _vector$5 = /* @__PURE__ */ new Vector3(); +const _forward = /* @__PURE__ */ new Vector3(); +const _temp = /* @__PURE__ */ new Vector3(); +const _renderList = /* @__PURE__ */ new MultiDrawRenderList(); +const _mesh = /* @__PURE__ */ new Mesh(); +const _batchIntersects = []; +function copyAttributeData(src, target, targetOffset = 0) { + const itemSize = target.itemSize; + if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) { + const vertexCount = src.count; + for (let i = 0; i < vertexCount; i++) { + for (let c = 0; c < itemSize; c++) { + target.setComponent(i + targetOffset, c, src.getComponent(i, c)); + } + } + } else { + target.array.set(src.array, targetOffset * itemSize); + } + target.needsUpdate = true; +} +__name(copyAttributeData, "copyAttributeData"); +function copyArrayContents(src, target) { + if (src.constructor !== target.constructor) { + const len = Math.min(src.length, target.length); + for (let i = 0; i < len; i++) { + target[i] = src[i]; + } + } else { + const len = Math.min(src.length, target.length); + target.set(new src.constructor(src.buffer, 0, len)); + } +} +__name(copyArrayContents, "copyArrayContents"); +class BatchedMesh extends Mesh { + static { + __name(this, "BatchedMesh"); + } + get maxInstanceCount() { + return this._maxInstanceCount; + } + get instanceCount() { + return this._instanceInfo.length - this._availableInstanceIds.length; + } + get unusedVertexCount() { + return this._maxVertexCount - this._nextVertexStart; + } + get unusedIndexCount() { + return this._maxIndexCount - this._nextIndexStart; + } + constructor(maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) { + super(new BufferGeometry(), material); + this.isBatchedMesh = true; + this.perObjectFrustumCulled = true; + this.sortObjects = true; + this.boundingBox = null; + this.boundingSphere = null; + this.customSort = null; + this._instanceInfo = []; + this._geometryInfo = []; + this._availableInstanceIds = []; + this._availableGeometryIds = []; + this._nextIndexStart = 0; + this._nextVertexStart = 0; + this._geometryCount = 0; + this._visibilityChanged = true; + this._geometryInitialized = false; + this._maxInstanceCount = maxInstanceCount; + this._maxVertexCount = maxVertexCount; + this._maxIndexCount = maxIndexCount; + this._multiDrawCounts = new Int32Array(maxInstanceCount); + this._multiDrawStarts = new Int32Array(maxInstanceCount); + this._multiDrawCount = 0; + this._multiDrawInstances = null; + this._matricesTexture = null; + this._indirectTexture = null; + this._colorsTexture = null; + this._initMatricesTexture(); + this._initIndirectTexture(); + } + _initMatricesTexture() { + let size = Math.sqrt(this._maxInstanceCount * 4); + size = Math.ceil(size / 4) * 4; + size = Math.max(size, 4); + const matricesArray = new Float32Array(size * size * 4); + const matricesTexture = new DataTexture(matricesArray, size, size, RGBAFormat, FloatType); + this._matricesTexture = matricesTexture; + } + _initIndirectTexture() { + let size = Math.sqrt(this._maxInstanceCount); + size = Math.ceil(size); + const indirectArray = new Uint32Array(size * size); + const indirectTexture = new DataTexture(indirectArray, size, size, RedIntegerFormat, UnsignedIntType); + this._indirectTexture = indirectTexture; + } + _initColorsTexture() { + let size = Math.sqrt(this._maxInstanceCount); + size = Math.ceil(size); + const colorsArray = new Float32Array(size * size * 4).fill(1); + const colorsTexture = new DataTexture(colorsArray, size, size, RGBAFormat, FloatType); + colorsTexture.colorSpace = ColorManagement.workingColorSpace; + this._colorsTexture = colorsTexture; + } + _initializeGeometry(reference) { + const geometry = this.geometry; + const maxVertexCount = this._maxVertexCount; + const maxIndexCount = this._maxIndexCount; + if (this._geometryInitialized === false) { + for (const attributeName in reference.attributes) { + const srcAttribute = reference.getAttribute(attributeName); + const { array, itemSize, normalized } = srcAttribute; + const dstArray = new array.constructor(maxVertexCount * itemSize); + const dstAttribute = new BufferAttribute(dstArray, itemSize, normalized); + geometry.setAttribute(attributeName, dstAttribute); + } + if (reference.getIndex() !== null) { + const indexArray = maxVertexCount > 65535 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount); + geometry.setIndex(new BufferAttribute(indexArray, 1)); + } + this._geometryInitialized = true; + } + } + // Make sure the geometry is compatible with the existing combined geometry attributes + _validateGeometry(geometry) { + const batchGeometry = this.geometry; + if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) { + throw new Error('BatchedMesh: All geometries must consistently have "index".'); + } + for (const attributeName in batchGeometry.attributes) { + if (!geometry.hasAttribute(attributeName)) { + throw new Error(`BatchedMesh: Added geometry missing "${attributeName}". All geometries must have consistent attributes.`); + } + const srcAttribute = geometry.getAttribute(attributeName); + const dstAttribute = batchGeometry.getAttribute(attributeName); + if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) { + throw new Error("BatchedMesh: All attributes must have a consistent itemSize and normalized value."); + } + } + } + setCustomSort(func) { + this.customSort = func; + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const boundingBox = this.boundingBox; + const instanceInfo = this._instanceInfo; + boundingBox.makeEmpty(); + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (instanceInfo[i].active === false) continue; + const geometryId = instanceInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingBoxAt(geometryId, _box$1).applyMatrix4(_matrix$1); + boundingBox.union(_box$1); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + const boundingSphere = this.boundingSphere; + const instanceInfo = this._instanceInfo; + boundingSphere.makeEmpty(); + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (instanceInfo[i].active === false) continue; + const geometryId = instanceInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + boundingSphere.union(_sphere$2); + } + } + addInstance(geometryId) { + const atCapacity = this._instanceInfo.length >= this.maxInstanceCount; + if (atCapacity && this._availableInstanceIds.length === 0) { + throw new Error("BatchedMesh: Maximum item count reached."); + } + const instanceInfo = { + visible: true, + active: true, + geometryIndex: geometryId + }; + let drawId = null; + if (this._availableInstanceIds.length > 0) { + this._availableInstanceIds.sort(ascIdSort); + drawId = this._availableInstanceIds.shift(); + this._instanceInfo[drawId] = instanceInfo; + } else { + drawId = this._instanceInfo.length; + this._instanceInfo.push(instanceInfo); + } + const matricesTexture = this._matricesTexture; + _matrix$1.identity().toArray(matricesTexture.image.data, drawId * 16); + matricesTexture.needsUpdate = true; + const colorsTexture = this._colorsTexture; + if (colorsTexture) { + _whiteColor.toArray(colorsTexture.image.data, drawId * 4); + colorsTexture.needsUpdate = true; + } + this._visibilityChanged = true; + return drawId; + } + addGeometry(geometry, reservedVertexCount = -1, reservedIndexCount = -1) { + this._initializeGeometry(geometry); + this._validateGeometry(geometry); + const geometryInfo = { + // geometry information + vertexStart: -1, + vertexCount: -1, + reservedVertexCount: -1, + indexStart: -1, + indexCount: -1, + reservedIndexCount: -1, + // draw range information + start: -1, + count: -1, + // state + boundingBox: null, + boundingSphere: null, + active: true + }; + const geometryInfoList = this._geometryInfo; + geometryInfo.vertexStart = this._nextVertexStart; + geometryInfo.reservedVertexCount = reservedVertexCount === -1 ? geometry.getAttribute("position").count : reservedVertexCount; + const index = geometry.getIndex(); + const hasIndex = index !== null; + if (hasIndex) { + geometryInfo.indexStart = this._nextIndexStart; + geometryInfo.reservedIndexCount = reservedIndexCount === -1 ? index.count : reservedIndexCount; + } + if (geometryInfo.indexStart !== -1 && geometryInfo.indexStart + geometryInfo.reservedIndexCount > this._maxIndexCount || geometryInfo.vertexStart + geometryInfo.reservedVertexCount > this._maxVertexCount) { + throw new Error("BatchedMesh: Reserved space request exceeds the maximum buffer size."); + } + let geometryId; + if (this._availableGeometryIds.length > 0) { + this._availableGeometryIds.sort(ascIdSort); + geometryId = this._availableGeometryIds.shift(); + geometryInfoList[geometryId] = geometryInfo; + } else { + geometryId = this._geometryCount; + this._geometryCount++; + geometryInfoList.push(geometryInfo); + } + this.setGeometryAt(geometryId, geometry); + this._nextIndexStart = geometryInfo.indexStart + geometryInfo.reservedIndexCount; + this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount; + return geometryId; + } + setGeometryAt(geometryId, geometry) { + if (geometryId >= this._geometryCount) { + throw new Error("BatchedMesh: Maximum geometry count reached."); + } + this._validateGeometry(geometry); + const batchGeometry = this.geometry; + const hasIndex = batchGeometry.getIndex() !== null; + const dstIndex = batchGeometry.getIndex(); + const srcIndex = geometry.getIndex(); + const geometryInfo = this._geometryInfo[geometryId]; + if (hasIndex && srcIndex.count > geometryInfo.reservedIndexCount || geometry.attributes.position.count > geometryInfo.reservedVertexCount) { + throw new Error("BatchedMesh: Reserved space not large enough for provided geometry."); + } + const vertexStart = geometryInfo.vertexStart; + const reservedVertexCount = geometryInfo.reservedVertexCount; + geometryInfo.vertexCount = geometry.getAttribute("position").count; + for (const attributeName in batchGeometry.attributes) { + const srcAttribute = geometry.getAttribute(attributeName); + const dstAttribute = batchGeometry.getAttribute(attributeName); + copyAttributeData(srcAttribute, dstAttribute, vertexStart); + const itemSize = srcAttribute.itemSize; + for (let i = srcAttribute.count, l = reservedVertexCount; i < l; i++) { + const index = vertexStart + i; + for (let c = 0; c < itemSize; c++) { + dstAttribute.setComponent(index, c, 0); + } + } + dstAttribute.needsUpdate = true; + dstAttribute.addUpdateRange(vertexStart * itemSize, reservedVertexCount * itemSize); + } + if (hasIndex) { + const indexStart = geometryInfo.indexStart; + const reservedIndexCount = geometryInfo.reservedIndexCount; + geometryInfo.indexCount = geometry.getIndex().count; + for (let i = 0; i < srcIndex.count; i++) { + dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i)); + } + for (let i = srcIndex.count, l = reservedIndexCount; i < l; i++) { + dstIndex.setX(indexStart + i, vertexStart); + } + dstIndex.needsUpdate = true; + dstIndex.addUpdateRange(indexStart, geometryInfo.reservedIndexCount); + } + geometryInfo.start = hasIndex ? geometryInfo.indexStart : geometryInfo.vertexStart; + geometryInfo.count = hasIndex ? geometryInfo.indexCount : geometryInfo.vertexCount; + geometryInfo.boundingBox = null; + if (geometry.boundingBox !== null) { + geometryInfo.boundingBox = geometry.boundingBox.clone(); + } + geometryInfo.boundingSphere = null; + if (geometry.boundingSphere !== null) { + geometryInfo.boundingSphere = geometry.boundingSphere.clone(); + } + this._visibilityChanged = true; + return geometryId; + } + deleteGeometry(geometryId) { + const geometryInfoList = this._geometryInfo; + if (geometryId >= geometryInfoList.length || geometryInfoList[geometryId].active === false) { + return this; + } + const instanceInfo = this._instanceInfo; + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (instanceInfo[i].geometryIndex === geometryId) { + this.deleteInstance(i); + } + } + geometryInfoList[geometryId].active = false; + this._availableGeometryIds.push(geometryId); + this._visibilityChanged = true; + return this; + } + deleteInstance(instanceId) { + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return this; + } + instanceInfo[instanceId].active = false; + this._availableInstanceIds.push(instanceId); + this._visibilityChanged = true; + return this; + } + optimize() { + let nextVertexStart = 0; + let nextIndexStart = 0; + const geometryInfoList = this._geometryInfo; + const indices = geometryInfoList.map((e, i) => i).sort((a, b) => { + return geometryInfoList[a].vertexStart - geometryInfoList[b].vertexStart; + }); + const geometry = this.geometry; + for (let i = 0, l = geometryInfoList.length; i < l; i++) { + const index = indices[i]; + const geometryInfo = geometryInfoList[index]; + if (geometryInfo.active === false) { + continue; + } + if (geometry.index !== null) { + if (geometryInfo.indexStart !== nextIndexStart) { + const { indexStart, vertexStart, reservedIndexCount } = geometryInfo; + const index2 = geometry.index; + const array = index2.array; + const elementDelta = nextVertexStart - vertexStart; + for (let j = indexStart; j < indexStart + reservedIndexCount; j++) { + array[j] = array[j] + elementDelta; + } + index2.array.copyWithin(nextIndexStart, indexStart, indexStart + reservedIndexCount); + index2.addUpdateRange(nextIndexStart, reservedIndexCount); + geometryInfo.indexStart = nextIndexStart; + } + nextIndexStart += geometryInfo.reservedIndexCount; + } + if (geometryInfo.vertexStart !== nextVertexStart) { + const { vertexStart, reservedVertexCount } = geometryInfo; + const attributes = geometry.attributes; + for (const key in attributes) { + const attribute = attributes[key]; + const { array, itemSize } = attribute; + array.copyWithin(nextVertexStart * itemSize, vertexStart * itemSize, (vertexStart + reservedVertexCount) * itemSize); + attribute.addUpdateRange(nextVertexStart * itemSize, reservedVertexCount * itemSize); + } + geometryInfo.vertexStart = nextVertexStart; + } + nextVertexStart += geometryInfo.reservedVertexCount; + geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart; + this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0; + this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount; + } + return this; + } + // get bounding box and compute it if it doesn't exist + getBoundingBoxAt(geometryId, target) { + if (geometryId >= this._geometryCount) { + return null; + } + const geometry = this.geometry; + const geometryInfo = this._geometryInfo[geometryId]; + if (geometryInfo.boundingBox === null) { + const box = new Box3(); + const index = geometry.index; + const position = geometry.attributes.position; + for (let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i++) { + let iv = i; + if (index) { + iv = index.getX(iv); + } + box.expandByPoint(_vector$5.fromBufferAttribute(position, iv)); + } + geometryInfo.boundingBox = box; + } + target.copy(geometryInfo.boundingBox); + return target; + } + // get bounding sphere and compute it if it doesn't exist + getBoundingSphereAt(geometryId, target) { + if (geometryId >= this._geometryCount) { + return null; + } + const geometry = this.geometry; + const geometryInfo = this._geometryInfo[geometryId]; + if (geometryInfo.boundingSphere === null) { + const sphere = new Sphere(); + this.getBoundingBoxAt(geometryId, _box$1); + _box$1.getCenter(sphere.center); + const index = geometry.index; + const position = geometry.attributes.position; + let maxRadiusSq = 0; + for (let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i++) { + let iv = i; + if (index) { + iv = index.getX(iv); + } + _vector$5.fromBufferAttribute(position, iv); + maxRadiusSq = Math.max(maxRadiusSq, sphere.center.distanceToSquared(_vector$5)); + } + sphere.radius = Math.sqrt(maxRadiusSq); + geometryInfo.boundingSphere = sphere; + } + target.copy(geometryInfo.boundingSphere); + return target; + } + setMatrixAt(instanceId, matrix) { + const instanceInfo = this._instanceInfo; + const matricesTexture = this._matricesTexture; + const matricesArray = this._matricesTexture.image.data; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return this; + } + matrix.toArray(matricesArray, instanceId * 16); + matricesTexture.needsUpdate = true; + return this; + } + getMatrixAt(instanceId, matrix) { + const instanceInfo = this._instanceInfo; + const matricesArray = this._matricesTexture.image.data; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return null; + } + return matrix.fromArray(matricesArray, instanceId * 16); + } + setColorAt(instanceId, color) { + if (this._colorsTexture === null) { + this._initColorsTexture(); + } + const colorsTexture = this._colorsTexture; + const colorsArray = this._colorsTexture.image.data; + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return this; + } + color.toArray(colorsArray, instanceId * 4); + colorsTexture.needsUpdate = true; + return this; + } + getColorAt(instanceId, color) { + const colorsArray = this._colorsTexture.image.data; + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return null; + } + return color.fromArray(colorsArray, instanceId * 4); + } + setVisibleAt(instanceId, value) { + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false || instanceInfo[instanceId].visible === value) { + return this; + } + instanceInfo[instanceId].visible = value; + this._visibilityChanged = true; + return this; + } + getVisibleAt(instanceId) { + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return false; + } + return instanceInfo[instanceId].visible; + } + setGeometryIdAt(instanceId, geometryId) { + const instanceInfo = this._instanceInfo; + const geometryInfoList = this._geometryInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return null; + } + if (geometryId >= geometryInfoList.length || geometryInfoList[geometryId].active === false) { + return null; + } + instanceInfo[instanceId].geometryIndex = geometryId; + return this; + } + getGeometryIdAt(instanceId) { + const instanceInfo = this._instanceInfo; + if (instanceId >= instanceInfo.length || instanceInfo[instanceId].active === false) { + return -1; + } + return instanceInfo[instanceId].geometryIndex; + } + getGeometryRangeAt(geometryId, target = {}) { + if (geometryId < 0 || geometryId >= this._geometryCount) { + return null; + } + const geometryInfo = this._geometryInfo[geometryId]; + target.vertexStart = geometryInfo.vertexStart; + target.vertexCount = geometryInfo.vertexCount; + target.reservedVertexCount = geometryInfo.reservedVertexCount; + target.indexStart = geometryInfo.indexStart; + target.indexCount = geometryInfo.indexCount; + target.reservedIndexCount = geometryInfo.reservedIndexCount; + target.start = geometryInfo.start; + target.count = geometryInfo.count; + return target; + } + setInstanceCount(maxInstanceCount) { + const availableInstanceIds = this._availableInstanceIds; + const instanceInfo = this._instanceInfo; + availableInstanceIds.sort(ascIdSort); + while (availableInstanceIds[availableInstanceIds.length - 1] === instanceInfo.length) { + instanceInfo.pop(); + availableInstanceIds.pop(); + } + if (maxInstanceCount < instanceInfo.length) { + throw new Error(`BatchedMesh: Instance ids outside the range ${maxInstanceCount} are being used. Cannot shrink instance count.`); + } + const multiDrawCounts = new Int32Array(maxInstanceCount); + const multiDrawStarts = new Int32Array(maxInstanceCount); + copyArrayContents(this._multiDrawCounts, multiDrawCounts); + copyArrayContents(this._multiDrawStarts, multiDrawStarts); + this._multiDrawCounts = multiDrawCounts; + this._multiDrawStarts = multiDrawStarts; + this._maxInstanceCount = maxInstanceCount; + const indirectTexture = this._indirectTexture; + const matricesTexture = this._matricesTexture; + const colorsTexture = this._colorsTexture; + indirectTexture.dispose(); + this._initIndirectTexture(); + copyArrayContents(indirectTexture.image.data, this._indirectTexture.image.data); + matricesTexture.dispose(); + this._initMatricesTexture(); + copyArrayContents(matricesTexture.image.data, this._matricesTexture.image.data); + if (colorsTexture) { + colorsTexture.dispose(); + this._initColorsTexture(); + copyArrayContents(colorsTexture.image.data, this._colorsTexture.image.data); + } + } + setGeometrySize(maxVertexCount, maxIndexCount) { + const validRanges = [...this._geometryInfo].filter((info) => info.active); + const requiredVertexLength = Math.max(...validRanges.map((range) => range.vertexStart + range.reservedVertexCount)); + if (requiredVertexLength > maxVertexCount) { + throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${maxIndexCount}. Cannot shrink further.`); + } + if (this.geometry.index) { + const requiredIndexLength = Math.max(...validRanges.map((range) => range.indexStart + range.reservedIndexCount)); + if (requiredIndexLength > maxIndexCount) { + throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${maxIndexCount}. Cannot shrink further.`); + } + } + const oldGeometry = this.geometry; + oldGeometry.dispose(); + this._maxVertexCount = maxVertexCount; + this._maxIndexCount = maxIndexCount; + if (this._geometryInitialized) { + this._geometryInitialized = false; + this.geometry = new BufferGeometry(); + this._initializeGeometry(oldGeometry); + } + const geometry = this.geometry; + if (oldGeometry.index) { + copyArrayContents(oldGeometry.index.array, geometry.index.array); + } + for (const key in oldGeometry.attributes) { + copyArrayContents(oldGeometry.attributes[key].array, geometry.attributes[key].array); + } + } + raycast(raycaster, intersects2) { + const instanceInfo = this._instanceInfo; + const geometryInfoList = this._geometryInfo; + const matrixWorld = this.matrixWorld; + const batchGeometry = this.geometry; + _mesh.material = this.material; + _mesh.geometry.index = batchGeometry.index; + _mesh.geometry.attributes = batchGeometry.attributes; + if (_mesh.geometry.boundingBox === null) { + _mesh.geometry.boundingBox = new Box3(); + } + if (_mesh.geometry.boundingSphere === null) { + _mesh.geometry.boundingSphere = new Sphere(); + } + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (!instanceInfo[i].visible || !instanceInfo[i].active) { + continue; + } + const geometryId = instanceInfo[i].geometryIndex; + const geometryInfo = geometryInfoList[geometryId]; + _mesh.geometry.setDrawRange(geometryInfo.start, geometryInfo.count); + this.getMatrixAt(i, _mesh.matrixWorld).premultiply(matrixWorld); + this.getBoundingBoxAt(geometryId, _mesh.geometry.boundingBox); + this.getBoundingSphereAt(geometryId, _mesh.geometry.boundingSphere); + _mesh.raycast(raycaster, _batchIntersects); + for (let j = 0, l2 = _batchIntersects.length; j < l2; j++) { + const intersect2 = _batchIntersects[j]; + intersect2.object = this; + intersect2.batchId = i; + intersects2.push(intersect2); + } + _batchIntersects.length = 0; + } + _mesh.material = null; + _mesh.geometry.index = null; + _mesh.geometry.attributes = {}; + _mesh.geometry.setDrawRange(0, Infinity); + } + copy(source) { + super.copy(source); + this.geometry = source.geometry.clone(); + this.perObjectFrustumCulled = source.perObjectFrustumCulled; + this.sortObjects = source.sortObjects; + this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null; + this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null; + this._geometryInfo = source._geometryInfo.map((info) => ({ + ...info, + boundingBox: info.boundingBox !== null ? info.boundingBox.clone() : null, + boundingSphere: info.boundingSphere !== null ? info.boundingSphere.clone() : null + })); + this._instanceInfo = source._instanceInfo.map((info) => ({ ...info })); + this._maxInstanceCount = source._maxInstanceCount; + this._maxVertexCount = source._maxVertexCount; + this._maxIndexCount = source._maxIndexCount; + this._geometryInitialized = source._geometryInitialized; + this._geometryCount = source._geometryCount; + this._multiDrawCounts = source._multiDrawCounts.slice(); + this._multiDrawStarts = source._multiDrawStarts.slice(); + this._matricesTexture = source._matricesTexture.clone(); + this._matricesTexture.image.data = this._matricesTexture.image.data.slice(); + if (this._colorsTexture !== null) { + this._colorsTexture = source._colorsTexture.clone(); + this._colorsTexture.image.data = this._colorsTexture.image.data.slice(); + } + return this; + } + dispose() { + this.geometry.dispose(); + this._matricesTexture.dispose(); + this._matricesTexture = null; + this._indirectTexture.dispose(); + this._indirectTexture = null; + if (this._colorsTexture !== null) { + this._colorsTexture.dispose(); + this._colorsTexture = null; + } + return this; + } + onBeforeRender(renderer, scene, camera, geometry, material) { + if (!this._visibilityChanged && !this.perObjectFrustumCulled && !this.sortObjects) { + return; + } + const index = geometry.getIndex(); + const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT; + const instanceInfo = this._instanceInfo; + const multiDrawStarts = this._multiDrawStarts; + const multiDrawCounts = this._multiDrawCounts; + const geometryInfoList = this._geometryInfo; + const perObjectFrustumCulled = this.perObjectFrustumCulled; + const indirectTexture = this._indirectTexture; + const indirectArray = indirectTexture.image.data; + if (perObjectFrustumCulled) { + _matrix$1.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse).multiply(this.matrixWorld); + _frustum.setFromProjectionMatrix( + _matrix$1, + renderer.coordinateSystem + ); + } + let multiDrawCount = 0; + if (this.sortObjects) { + _matrix$1.copy(this.matrixWorld).invert(); + _vector$5.setFromMatrixPosition(camera.matrixWorld).applyMatrix4(_matrix$1); + _forward.set(0, 0, -1).transformDirection(camera.matrixWorld).transformDirection(_matrix$1); + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (instanceInfo[i].visible && instanceInfo[i].active) { + const geometryId = instanceInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + let culled = false; + if (perObjectFrustumCulled) { + culled = !_frustum.intersectsSphere(_sphere$2); + } + if (!culled) { + const geometryInfo = geometryInfoList[geometryId]; + const z = _temp.subVectors(_sphere$2.center, _vector$5).dot(_forward); + _renderList.push(geometryInfo.start, geometryInfo.count, z, i); + } + } + } + const list = _renderList.list; + const customSort = this.customSort; + if (customSort === null) { + list.sort(material.transparent ? sortTransparent : sortOpaque); + } else { + customSort.call(this, list, camera); + } + for (let i = 0, l = list.length; i < l; i++) { + const item = list[i]; + multiDrawStarts[multiDrawCount] = item.start * bytesPerElement; + multiDrawCounts[multiDrawCount] = item.count; + indirectArray[multiDrawCount] = item.index; + multiDrawCount++; + } + _renderList.reset(); + } else { + for (let i = 0, l = instanceInfo.length; i < l; i++) { + if (instanceInfo[i].visible && instanceInfo[i].active) { + const geometryId = instanceInfo[i].geometryIndex; + let culled = false; + if (perObjectFrustumCulled) { + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + culled = !_frustum.intersectsSphere(_sphere$2); + } + if (!culled) { + const geometryInfo = geometryInfoList[geometryId]; + multiDrawStarts[multiDrawCount] = geometryInfo.start * bytesPerElement; + multiDrawCounts[multiDrawCount] = geometryInfo.count; + indirectArray[multiDrawCount] = i; + multiDrawCount++; + } + } + } + } + indirectTexture.needsUpdate = true; + this._multiDrawCount = multiDrawCount; + this._visibilityChanged = false; + } + onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial) { + this.onBeforeRender(renderer, null, shadowCamera, geometry, depthMaterial); + } +} +class LineBasicMaterial extends Material { + static { + __name(this, "LineBasicMaterial"); + } + static get type() { + return "LineBasicMaterial"; + } + constructor(parameters) { + super(); + this.isLineBasicMaterial = true; + this.color = new Color(16777215); + this.map = null; + this.linewidth = 1; + this.linecap = "round"; + this.linejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + this.fog = source.fog; + return this; + } +} +const _vStart = /* @__PURE__ */ new Vector3(); +const _vEnd = /* @__PURE__ */ new Vector3(); +const _inverseMatrix$1 = /* @__PURE__ */ new Matrix4(); +const _ray$1 = /* @__PURE__ */ new Ray(); +const _sphere$1 = /* @__PURE__ */ new Sphere(); +const _intersectPointOnRay = /* @__PURE__ */ new Vector3(); +const _intersectPointOnSegment = /* @__PURE__ */ new Vector3(); +class Line extends Object3D { + static { + __name(this, "Line"); + } + constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) { + super(); + this.isLine = true; + this.type = "Line"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + computeLineDistances() { + const geometry = this.geometry; + if (geometry.index === null) { + const positionAttribute = geometry.attributes.position; + const lineDistances = [0]; + for (let i = 1, l = positionAttribute.count; i < l; i++) { + _vStart.fromBufferAttribute(positionAttribute, i - 1); + _vEnd.fromBufferAttribute(positionAttribute, i); + lineDistances[i] = lineDistances[i - 1]; + lineDistances[i] += _vStart.distanceTo(_vEnd); + } + geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); + } else { + console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + } + return this; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Line.threshold; + const drawRange = geometry.drawRange; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$1.copy(geometry.boundingSphere); + _sphere$1.applyMatrix4(matrixWorld); + _sphere$1.radius += threshold; + if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; + _inverseMatrix$1.copy(matrixWorld).invert(); + _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); + const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); + const localThresholdSq = localThreshold * localThreshold; + const step = this.isLineSegments ? 2 : 1; + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + if (index !== null) { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, l = end - 1; i < l; i += step) { + const a = index.getX(i); + const b = index.getX(i + 1); + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); + if (intersect2) { + intersects2.push(intersect2); + } + } + if (this.isLineLoop) { + const a = index.getX(end - 1); + const b = index.getX(start); + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); + if (intersect2) { + intersects2.push(intersect2); + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (let i = start, l = end - 1; i < l; i += step) { + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, i, i + 1); + if (intersect2) { + intersects2.push(intersect2); + } + } + if (this.isLineLoop) { + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, end - 1, start); + if (intersect2) { + intersects2.push(intersect2); + } + } + } + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } +} +function checkIntersection(object, raycaster, ray, thresholdSq, a, b) { + const positionAttribute = object.geometry.attributes.position; + _vStart.fromBufferAttribute(positionAttribute, a); + _vEnd.fromBufferAttribute(positionAttribute, b); + const distSq = ray.distanceSqToSegment(_vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment); + if (distSq > thresholdSq) return; + _intersectPointOnRay.applyMatrix4(object.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_intersectPointOnRay); + if (distance < raycaster.near || distance > raycaster.far) return; + return { + distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: _intersectPointOnSegment.clone().applyMatrix4(object.matrixWorld), + index: a, + face: null, + faceIndex: null, + barycoord: null, + object + }; +} +__name(checkIntersection, "checkIntersection"); +const _start = /* @__PURE__ */ new Vector3(); +const _end = /* @__PURE__ */ new Vector3(); +class LineSegments extends Line { + static { + __name(this, "LineSegments"); + } + constructor(geometry, material) { + super(geometry, material); + this.isLineSegments = true; + this.type = "LineSegments"; + } + computeLineDistances() { + const geometry = this.geometry; + if (geometry.index === null) { + const positionAttribute = geometry.attributes.position; + const lineDistances = []; + for (let i = 0, l = positionAttribute.count; i < l; i += 2) { + _start.fromBufferAttribute(positionAttribute, i); + _end.fromBufferAttribute(positionAttribute, i + 1); + lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1]; + lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end); + } + geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); + } else { + console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + } + return this; + } +} +class LineLoop extends Line { + static { + __name(this, "LineLoop"); + } + constructor(geometry, material) { + super(geometry, material); + this.isLineLoop = true; + this.type = "LineLoop"; + } +} +class PointsMaterial extends Material { + static { + __name(this, "PointsMaterial"); + } + static get type() { + return "PointsMaterial"; + } + constructor(parameters) { + super(); + this.isPointsMaterial = true; + this.color = new Color(16777215); + this.map = null; + this.alphaMap = null; + this.size = 1; + this.sizeAttenuation = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + this.fog = source.fog; + return this; + } +} +const _inverseMatrix = /* @__PURE__ */ new Matrix4(); +const _ray$4 = /* @__PURE__ */ new Ray(); +const _sphere = /* @__PURE__ */ new Sphere(); +const _position$2 = /* @__PURE__ */ new Vector3(); +class Points extends Object3D { + static { + __name(this, "Points"); + } + constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) { + super(); + this.isPoints = true; + this.type = "Points"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Points.threshold; + const drawRange = geometry.drawRange; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere.copy(geometry.boundingSphere); + _sphere.applyMatrix4(matrixWorld); + _sphere.radius += threshold; + if (raycaster.ray.intersectsSphere(_sphere) === false) return; + _inverseMatrix.copy(matrixWorld).invert(); + _ray$4.copy(raycaster.ray).applyMatrix4(_inverseMatrix); + const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); + const localThresholdSq = localThreshold * localThreshold; + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + if (index !== null) { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i++) { + const a = index.getX(i); + _position$2.fromBufferAttribute(positionAttribute, a); + testPoint(_position$2, a, localThresholdSq, matrixWorld, raycaster, intersects2, this); + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (let i = start, l = end; i < l; i++) { + _position$2.fromBufferAttribute(positionAttribute, i); + testPoint(_position$2, i, localThresholdSq, matrixWorld, raycaster, intersects2, this); + } + } + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } +} +function testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects2, object) { + const rayPointDistanceSq = _ray$4.distanceSqToPoint(point); + if (rayPointDistanceSq < localThresholdSq) { + const intersectPoint = new Vector3(); + _ray$4.closestPointToPoint(point, intersectPoint); + intersectPoint.applyMatrix4(matrixWorld); + const distance = raycaster.ray.origin.distanceTo(intersectPoint); + if (distance < raycaster.near || distance > raycaster.far) return; + intersects2.push({ + distance, + distanceToRay: Math.sqrt(rayPointDistanceSq), + point: intersectPoint, + index, + face: null, + faceIndex: null, + barycoord: null, + object + }); + } +} +__name(testPoint, "testPoint"); +class VideoTexture extends Texture { + static { + __name(this, "VideoTexture"); + } + constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { + super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isVideoTexture = true; + this.minFilter = minFilter !== void 0 ? minFilter : LinearFilter; + this.magFilter = magFilter !== void 0 ? magFilter : LinearFilter; + this.generateMipmaps = false; + const scope = this; + function updateVideo() { + scope.needsUpdate = true; + video.requestVideoFrameCallback(updateVideo); + } + __name(updateVideo, "updateVideo"); + if ("requestVideoFrameCallback" in video) { + video.requestVideoFrameCallback(updateVideo); + } + } + clone() { + return new this.constructor(this.image).copy(this); + } + update() { + const video = this.image; + const hasVideoFrameCallback = "requestVideoFrameCallback" in video; + if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { + this.needsUpdate = true; + } + } +} +class FramebufferTexture extends Texture { + static { + __name(this, "FramebufferTexture"); + } + constructor(width, height) { + super({ width, height }); + this.isFramebufferTexture = true; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.generateMipmaps = false; + this.needsUpdate = true; + } +} +class CompressedTexture extends Texture { + static { + __name(this, "CompressedTexture"); + } + constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace) { + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isCompressedTexture = true; + this.image = { width, height }; + this.mipmaps = mipmaps; + this.flipY = false; + this.generateMipmaps = false; + } +} +class CompressedArrayTexture extends CompressedTexture { + static { + __name(this, "CompressedArrayTexture"); + } + constructor(mipmaps, width, height, depth, format, type) { + super(mipmaps, width, height, format, type); + this.isCompressedArrayTexture = true; + this.image.depth = depth; + this.wrapR = ClampToEdgeWrapping; + this.layerUpdates = /* @__PURE__ */ new Set(); + } + addLayerUpdate(layerIndex) { + this.layerUpdates.add(layerIndex); + } + clearLayerUpdates() { + this.layerUpdates.clear(); + } +} +class CompressedCubeTexture extends CompressedTexture { + static { + __name(this, "CompressedCubeTexture"); + } + constructor(images, format, type) { + super(void 0, images[0].width, images[0].height, format, type, CubeReflectionMapping); + this.isCompressedCubeTexture = true; + this.isCubeTexture = true; + this.image = images; + } +} +class CanvasTexture extends Texture { + static { + __name(this, "CanvasTexture"); + } + constructor(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { + super(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isCanvasTexture = true; + this.needsUpdate = true; + } +} +class Curve { + static { + __name(this, "Curve"); + } + constructor() { + this.type = "Curve"; + this.arcLengthDivisions = 200; + } + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + getPoint() { + console.warn("THREE.Curve: .getPoint() not implemented."); + return null; + } + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + getPointAt(u, optionalTarget) { + const t2 = this.getUtoTmapping(u); + return this.getPoint(t2, optionalTarget); + } + // Get sequence of points using getPoint( t ) + getPoints(divisions = 5) { + const points = []; + for (let d = 0; d <= divisions; d++) { + points.push(this.getPoint(d / divisions)); + } + return points; + } + // Get sequence of points using getPointAt( u ) + getSpacedPoints(divisions = 5) { + const points = []; + for (let d = 0; d <= divisions; d++) { + points.push(this.getPointAt(d / divisions)); + } + return points; + } + // Get total curve arc length + getLength() { + const lengths = this.getLengths(); + return lengths[lengths.length - 1]; + } + // Get list of cumulative segment lengths + getLengths(divisions = this.arcLengthDivisions) { + if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) { + return this.cacheArcLengths; + } + this.needsUpdate = false; + const cache = []; + let current, last = this.getPoint(0); + let sum = 0; + cache.push(0); + for (let p = 1; p <= divisions; p++) { + current = this.getPoint(p / divisions); + sum += current.distanceTo(last); + cache.push(sum); + last = current; + } + this.cacheArcLengths = cache; + return cache; + } + updateArcLengths() { + this.needsUpdate = true; + this.getLengths(); + } + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + getUtoTmapping(u, distance) { + const arcLengths = this.getLengths(); + let i = 0; + const il = arcLengths.length; + let targetArcLength; + if (distance) { + targetArcLength = distance; + } else { + targetArcLength = u * arcLengths[il - 1]; + } + let low = 0, high = il - 1, comparison; + while (low <= high) { + i = Math.floor(low + (high - low) / 2); + comparison = arcLengths[i] - targetArcLength; + if (comparison < 0) { + low = i + 1; + } else if (comparison > 0) { + high = i - 1; + } else { + high = i; + break; + } + } + i = high; + if (arcLengths[i] === targetArcLength) { + return i / (il - 1); + } + const lengthBefore = arcLengths[i]; + const lengthAfter = arcLengths[i + 1]; + const segmentLength = lengthAfter - lengthBefore; + const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; + const t2 = (i + segmentFraction) / (il - 1); + return t2; + } + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + getTangent(t2, optionalTarget) { + const delta = 1e-4; + let t1 = t2 - delta; + let t22 = t2 + delta; + if (t1 < 0) t1 = 0; + if (t22 > 1) t22 = 1; + const pt1 = this.getPoint(t1); + const pt2 = this.getPoint(t22); + const tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3()); + tangent.copy(pt2).sub(pt1).normalize(); + return tangent; + } + getTangentAt(u, optionalTarget) { + const t2 = this.getUtoTmapping(u); + return this.getTangent(t2, optionalTarget); + } + computeFrenetFrames(segments, closed) { + const normal = new Vector3(); + const tangents = []; + const normals = []; + const binormals = []; + const vec = new Vector3(); + const mat = new Matrix4(); + for (let i = 0; i <= segments; i++) { + const u = i / segments; + tangents[i] = this.getTangentAt(u, new Vector3()); + } + normals[0] = new Vector3(); + binormals[0] = new Vector3(); + let min = Number.MAX_VALUE; + const tx = Math.abs(tangents[0].x); + const ty = Math.abs(tangents[0].y); + const tz = Math.abs(tangents[0].z); + if (tx <= min) { + min = tx; + normal.set(1, 0, 0); + } + if (ty <= min) { + min = ty; + normal.set(0, 1, 0); + } + if (tz <= min) { + normal.set(0, 0, 1); + } + vec.crossVectors(tangents[0], normal).normalize(); + normals[0].crossVectors(tangents[0], vec); + binormals[0].crossVectors(tangents[0], normals[0]); + for (let i = 1; i <= segments; i++) { + normals[i] = normals[i - 1].clone(); + binormals[i] = binormals[i - 1].clone(); + vec.crossVectors(tangents[i - 1], tangents[i]); + if (vec.length() > Number.EPSILON) { + vec.normalize(); + const theta = Math.acos(clamp(tangents[i - 1].dot(tangents[i]), -1, 1)); + normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta)); + } + binormals[i].crossVectors(tangents[i], normals[i]); + } + if (closed === true) { + let theta = Math.acos(clamp(normals[0].dot(normals[segments]), -1, 1)); + theta /= segments; + if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) { + theta = -theta; + } + for (let i = 1; i <= segments; i++) { + normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i)); + binormals[i].crossVectors(tangents[i], normals[i]); + } + } + return { + tangents, + normals, + binormals + }; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.arcLengthDivisions = source.arcLengthDivisions; + return this; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "Curve", + generator: "Curve.toJSON" + } + }; + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + return data; + } + fromJSON(json) { + this.arcLengthDivisions = json.arcLengthDivisions; + return this; + } +} +class EllipseCurve extends Curve { + static { + __name(this, "EllipseCurve"); + } + constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0) { + super(); + this.isEllipseCurve = true; + this.type = "EllipseCurve"; + this.aX = aX; + this.aY = aY; + this.xRadius = xRadius; + this.yRadius = yRadius; + this.aStartAngle = aStartAngle; + this.aEndAngle = aEndAngle; + this.aClockwise = aClockwise; + this.aRotation = aRotation; + } + getPoint(t2, optionalTarget = new Vector2()) { + const point = optionalTarget; + const twoPi = Math.PI * 2; + let deltaAngle = this.aEndAngle - this.aStartAngle; + const samePoints = Math.abs(deltaAngle) < Number.EPSILON; + while (deltaAngle < 0) deltaAngle += twoPi; + while (deltaAngle > twoPi) deltaAngle -= twoPi; + if (deltaAngle < Number.EPSILON) { + if (samePoints) { + deltaAngle = 0; + } else { + deltaAngle = twoPi; + } + } + if (this.aClockwise === true && !samePoints) { + if (deltaAngle === twoPi) { + deltaAngle = -twoPi; + } else { + deltaAngle = deltaAngle - twoPi; + } + } + const angle = this.aStartAngle + t2 * deltaAngle; + let x = this.aX + this.xRadius * Math.cos(angle); + let y = this.aY + this.yRadius * Math.sin(angle); + if (this.aRotation !== 0) { + const cos = Math.cos(this.aRotation); + const sin = Math.sin(this.aRotation); + const tx = x - this.aX; + const ty = y - this.aY; + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + } + return point.set(x, y); + } + copy(source) { + super.copy(source); + this.aX = source.aX; + this.aY = source.aY; + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + this.aClockwise = source.aClockwise; + this.aRotation = source.aRotation; + return this; + } + toJSON() { + const data = super.toJSON(); + data.aX = this.aX; + data.aY = this.aY; + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + data.aClockwise = this.aClockwise; + data.aRotation = this.aRotation; + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.aX = json.aX; + this.aY = json.aY; + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + this.aClockwise = json.aClockwise; + this.aRotation = json.aRotation; + return this; + } +} +class ArcCurve extends EllipseCurve { + static { + __name(this, "ArcCurve"); + } + constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + super(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); + this.isArcCurve = true; + this.type = "ArcCurve"; + } +} +function CubicPoly() { + let c0 = 0, c1 = 0, c2 = 0, c3 = 0; + function init(x0, x1, t0, t1) { + c0 = x0; + c1 = t0; + c2 = -3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + } + __name(init, "init"); + return { + initCatmullRom: /* @__PURE__ */ __name(function(x0, x1, x2, x3, tension) { + init(x1, x2, tension * (x2 - x0), tension * (x3 - x1)); + }, "initCatmullRom"), + initNonuniformCatmullRom: /* @__PURE__ */ __name(function(x0, x1, x2, x3, dt0, dt1, dt2) { + let t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1; + let t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; + t1 *= dt1; + t2 *= dt1; + init(x1, x2, t1, t2); + }, "initNonuniformCatmullRom"), + calc: /* @__PURE__ */ __name(function(t2) { + const t22 = t2 * t2; + const t3 = t22 * t2; + return c0 + c1 * t2 + c2 * t22 + c3 * t3; + }, "calc") + }; +} +__name(CubicPoly, "CubicPoly"); +const tmp = /* @__PURE__ */ new Vector3(); +const px = /* @__PURE__ */ new CubicPoly(); +const py = /* @__PURE__ */ new CubicPoly(); +const pz = /* @__PURE__ */ new CubicPoly(); +class CatmullRomCurve3 extends Curve { + static { + __name(this, "CatmullRomCurve3"); + } + constructor(points = [], closed = false, curveType = "centripetal", tension = 0.5) { + super(); + this.isCatmullRomCurve3 = true; + this.type = "CatmullRomCurve3"; + this.points = points; + this.closed = closed; + this.curveType = curveType; + this.tension = tension; + } + getPoint(t2, optionalTarget = new Vector3()) { + const point = optionalTarget; + const points = this.points; + const l = points.length; + const p = (l - (this.closed ? 0 : 1)) * t2; + let intPoint = Math.floor(p); + let weight = p - intPoint; + if (this.closed) { + intPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l; + } else if (weight === 0 && intPoint === l - 1) { + intPoint = l - 2; + weight = 1; + } + let p0, p3; + if (this.closed || intPoint > 0) { + p0 = points[(intPoint - 1) % l]; + } else { + tmp.subVectors(points[0], points[1]).add(points[0]); + p0 = tmp; + } + const p1 = points[intPoint % l]; + const p2 = points[(intPoint + 1) % l]; + if (this.closed || intPoint + 2 < l) { + p3 = points[(intPoint + 2) % l]; + } else { + tmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]); + p3 = tmp; + } + if (this.curveType === "centripetal" || this.curveType === "chordal") { + const pow = this.curveType === "chordal" ? 0.5 : 0.25; + let dt0 = Math.pow(p0.distanceToSquared(p1), pow); + let dt1 = Math.pow(p1.distanceToSquared(p2), pow); + let dt2 = Math.pow(p2.distanceToSquared(p3), pow); + if (dt1 < 1e-4) dt1 = 1; + if (dt0 < 1e-4) dt0 = dt1; + if (dt2 < 1e-4) dt2 = dt1; + px.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2); + py.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2); + pz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2); + } else if (this.curveType === "catmullrom") { + px.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension); + py.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension); + pz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension); + } + point.set( + px.calc(weight), + py.calc(weight), + pz.calc(weight) + ); + return point; + } + copy(source) { + super.copy(source); + this.points = []; + for (let i = 0, l = source.points.length; i < l; i++) { + const point = source.points[i]; + this.points.push(point.clone()); + } + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + return this; + } + toJSON() { + const data = super.toJSON(); + data.points = []; + for (let i = 0, l = this.points.length; i < l; i++) { + const point = this.points[i]; + data.points.push(point.toArray()); + } + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.points = []; + for (let i = 0, l = json.points.length; i < l; i++) { + const point = json.points[i]; + this.points.push(new Vector3().fromArray(point)); + } + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + return this; + } +} +function CatmullRom(t2, p0, p1, p2, p3) { + const v0 = (p2 - p0) * 0.5; + const v1 = (p3 - p1) * 0.5; + const t22 = t2 * t2; + const t3 = t2 * t22; + return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t22 + v0 * t2 + p1; +} +__name(CatmullRom, "CatmullRom"); +function QuadraticBezierP0(t2, p) { + const k = 1 - t2; + return k * k * p; +} +__name(QuadraticBezierP0, "QuadraticBezierP0"); +function QuadraticBezierP1(t2, p) { + return 2 * (1 - t2) * t2 * p; +} +__name(QuadraticBezierP1, "QuadraticBezierP1"); +function QuadraticBezierP2(t2, p) { + return t2 * t2 * p; +} +__name(QuadraticBezierP2, "QuadraticBezierP2"); +function QuadraticBezier(t2, p0, p1, p2) { + return QuadraticBezierP0(t2, p0) + QuadraticBezierP1(t2, p1) + QuadraticBezierP2(t2, p2); +} +__name(QuadraticBezier, "QuadraticBezier"); +function CubicBezierP0(t2, p) { + const k = 1 - t2; + return k * k * k * p; +} +__name(CubicBezierP0, "CubicBezierP0"); +function CubicBezierP1(t2, p) { + const k = 1 - t2; + return 3 * k * k * t2 * p; +} +__name(CubicBezierP1, "CubicBezierP1"); +function CubicBezierP2(t2, p) { + return 3 * (1 - t2) * t2 * t2 * p; +} +__name(CubicBezierP2, "CubicBezierP2"); +function CubicBezierP3(t2, p) { + return t2 * t2 * t2 * p; +} +__name(CubicBezierP3, "CubicBezierP3"); +function CubicBezier(t2, p0, p1, p2, p3) { + return CubicBezierP0(t2, p0) + CubicBezierP1(t2, p1) + CubicBezierP2(t2, p2) + CubicBezierP3(t2, p3); +} +__name(CubicBezier, "CubicBezier"); +class CubicBezierCurve extends Curve { + static { + __name(this, "CubicBezierCurve"); + } + constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2()) { + super(); + this.isCubicBezierCurve = true; + this.type = "CubicBezierCurve"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + } + getPoint(t2, optionalTarget = new Vector2()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + point.set( + CubicBezier(t2, v0.x, v1.x, v2.x, v3.x), + CubicBezier(t2, v0.y, v1.y, v2.y, v3.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + this.v3.copy(source.v3); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + this.v3.fromArray(json.v3); + return this; + } +} +class CubicBezierCurve3 extends Curve { + static { + __name(this, "CubicBezierCurve3"); + } + constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3()) { + super(); + this.isCubicBezierCurve3 = true; + this.type = "CubicBezierCurve3"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + } + getPoint(t2, optionalTarget = new Vector3()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + point.set( + CubicBezier(t2, v0.x, v1.x, v2.x, v3.x), + CubicBezier(t2, v0.y, v1.y, v2.y, v3.y), + CubicBezier(t2, v0.z, v1.z, v2.z, v3.z) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + this.v3.copy(source.v3); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + this.v3.fromArray(json.v3); + return this; + } +} +class LineCurve extends Curve { + static { + __name(this, "LineCurve"); + } + constructor(v1 = new Vector2(), v2 = new Vector2()) { + super(); + this.isLineCurve = true; + this.type = "LineCurve"; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t2, optionalTarget = new Vector2()) { + const point = optionalTarget; + if (t2 === 1) { + point.copy(this.v2); + } else { + point.copy(this.v2).sub(this.v1); + point.multiplyScalar(t2).add(this.v1); + } + return point; + } + // Line curve is linear, so we can overwrite default getPointAt + getPointAt(u, optionalTarget) { + return this.getPoint(u, optionalTarget); + } + getTangent(t2, optionalTarget = new Vector2()) { + return optionalTarget.subVectors(this.v2, this.v1).normalize(); + } + getTangentAt(u, optionalTarget) { + return this.getTangent(u, optionalTarget); + } + copy(source) { + super.copy(source); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +} +class LineCurve3 extends Curve { + static { + __name(this, "LineCurve3"); + } + constructor(v1 = new Vector3(), v2 = new Vector3()) { + super(); + this.isLineCurve3 = true; + this.type = "LineCurve3"; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t2, optionalTarget = new Vector3()) { + const point = optionalTarget; + if (t2 === 1) { + point.copy(this.v2); + } else { + point.copy(this.v2).sub(this.v1); + point.multiplyScalar(t2).add(this.v1); + } + return point; + } + // Line curve is linear, so we can overwrite default getPointAt + getPointAt(u, optionalTarget) { + return this.getPoint(u, optionalTarget); + } + getTangent(t2, optionalTarget = new Vector3()) { + return optionalTarget.subVectors(this.v2, this.v1).normalize(); + } + getTangentAt(u, optionalTarget) { + return this.getTangent(u, optionalTarget); + } + copy(source) { + super.copy(source); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +} +class QuadraticBezierCurve extends Curve { + static { + __name(this, "QuadraticBezierCurve"); + } + constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) { + super(); + this.isQuadraticBezierCurve = true; + this.type = "QuadraticBezierCurve"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t2, optionalTarget = new Vector2()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + point.set( + QuadraticBezier(t2, v0.x, v1.x, v2.x), + QuadraticBezier(t2, v0.y, v1.y, v2.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +} +class QuadraticBezierCurve3 extends Curve { + static { + __name(this, "QuadraticBezierCurve3"); + } + constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) { + super(); + this.isQuadraticBezierCurve3 = true; + this.type = "QuadraticBezierCurve3"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t2, optionalTarget = new Vector3()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + point.set( + QuadraticBezier(t2, v0.x, v1.x, v2.x), + QuadraticBezier(t2, v0.y, v1.y, v2.y), + QuadraticBezier(t2, v0.z, v1.z, v2.z) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +} +class SplineCurve extends Curve { + static { + __name(this, "SplineCurve"); + } + constructor(points = []) { + super(); + this.isSplineCurve = true; + this.type = "SplineCurve"; + this.points = points; + } + getPoint(t2, optionalTarget = new Vector2()) { + const point = optionalTarget; + const points = this.points; + const p = (points.length - 1) * t2; + const intPoint = Math.floor(p); + const weight = p - intPoint; + const p0 = points[intPoint === 0 ? intPoint : intPoint - 1]; + const p1 = points[intPoint]; + const p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1]; + const p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2]; + point.set( + CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), + CatmullRom(weight, p0.y, p1.y, p2.y, p3.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.points = []; + for (let i = 0, l = source.points.length; i < l; i++) { + const point = source.points[i]; + this.points.push(point.clone()); + } + return this; + } + toJSON() { + const data = super.toJSON(); + data.points = []; + for (let i = 0, l = this.points.length; i < l; i++) { + const point = this.points[i]; + data.points.push(point.toArray()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.points = []; + for (let i = 0, l = json.points.length; i < l; i++) { + const point = json.points[i]; + this.points.push(new Vector2().fromArray(point)); + } + return this; + } +} +var Curves = /* @__PURE__ */ Object.freeze({ + __proto__: null, + ArcCurve, + CatmullRomCurve3, + CubicBezierCurve, + CubicBezierCurve3, + EllipseCurve, + LineCurve, + LineCurve3, + QuadraticBezierCurve, + QuadraticBezierCurve3, + SplineCurve +}); +class CurvePath extends Curve { + static { + __name(this, "CurvePath"); + } + constructor() { + super(); + this.type = "CurvePath"; + this.curves = []; + this.autoClose = false; + } + add(curve) { + this.curves.push(curve); + } + closePath() { + const startPoint = this.curves[0].getPoint(0); + const endPoint = this.curves[this.curves.length - 1].getPoint(1); + if (!startPoint.equals(endPoint)) { + const lineType = startPoint.isVector2 === true ? "LineCurve" : "LineCurve3"; + this.curves.push(new Curves[lineType](endPoint, startPoint)); + } + return this; + } + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + getPoint(t2, optionalTarget) { + const d = t2 * this.getLength(); + const curveLengths = this.getCurveLengths(); + let i = 0; + while (i < curveLengths.length) { + if (curveLengths[i] >= d) { + const diff = curveLengths[i] - d; + const curve = this.curves[i]; + const segmentLength = curve.getLength(); + const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + return curve.getPointAt(u, optionalTarget); + } + i++; + } + return null; + } + // We cannot use the default THREE.Curve getPoint() with getLength() because in + // THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath + // getPoint() depends on getLength + getLength() { + const lens = this.getCurveLengths(); + return lens[lens.length - 1]; + } + // cacheLengths must be recalculated. + updateArcLengths() { + this.needsUpdate = true; + this.cacheLengths = null; + this.getCurveLengths(); + } + // Compute lengths and cache them + // We cannot overwrite getLengths() because UtoT mapping uses it. + getCurveLengths() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) { + return this.cacheLengths; + } + const lengths = []; + let sums = 0; + for (let i = 0, l = this.curves.length; i < l; i++) { + sums += this.curves[i].getLength(); + lengths.push(sums); + } + this.cacheLengths = lengths; + return lengths; + } + getSpacedPoints(divisions = 40) { + const points = []; + for (let i = 0; i <= divisions; i++) { + points.push(this.getPoint(i / divisions)); + } + if (this.autoClose) { + points.push(points[0]); + } + return points; + } + getPoints(divisions = 12) { + const points = []; + let last; + for (let i = 0, curves = this.curves; i < curves.length; i++) { + const curve = curves[i]; + const resolution = curve.isEllipseCurve ? divisions * 2 : curve.isLineCurve || curve.isLineCurve3 ? 1 : curve.isSplineCurve ? divisions * curve.points.length : divisions; + const pts = curve.getPoints(resolution); + for (let j = 0; j < pts.length; j++) { + const point = pts[j]; + if (last && last.equals(point)) continue; + points.push(point); + last = point; + } + } + if (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0])) { + points.push(points[0]); + } + return points; + } + copy(source) { + super.copy(source); + this.curves = []; + for (let i = 0, l = source.curves.length; i < l; i++) { + const curve = source.curves[i]; + this.curves.push(curve.clone()); + } + this.autoClose = source.autoClose; + return this; + } + toJSON() { + const data = super.toJSON(); + data.autoClose = this.autoClose; + data.curves = []; + for (let i = 0, l = this.curves.length; i < l; i++) { + const curve = this.curves[i]; + data.curves.push(curve.toJSON()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.autoClose = json.autoClose; + this.curves = []; + for (let i = 0, l = json.curves.length; i < l; i++) { + const curve = json.curves[i]; + this.curves.push(new Curves[curve.type]().fromJSON(curve)); + } + return this; + } +} +class Path extends CurvePath { + static { + __name(this, "Path"); + } + constructor(points) { + super(); + this.type = "Path"; + this.currentPoint = new Vector2(); + if (points) { + this.setFromPoints(points); + } + } + setFromPoints(points) { + this.moveTo(points[0].x, points[0].y); + for (let i = 1, l = points.length; i < l; i++) { + this.lineTo(points[i].x, points[i].y); + } + return this; + } + moveTo(x, y) { + this.currentPoint.set(x, y); + return this; + } + lineTo(x, y) { + const curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y)); + this.curves.push(curve); + this.currentPoint.set(x, y); + return this; + } + quadraticCurveTo(aCPx, aCPy, aX, aY) { + const curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2(aCPx, aCPy), + new Vector2(aX, aY) + ); + this.curves.push(curve); + this.currentPoint.set(aX, aY); + return this; + } + bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { + const curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2(aCP1x, aCP1y), + new Vector2(aCP2x, aCP2y), + new Vector2(aX, aY) + ); + this.curves.push(curve); + this.currentPoint.set(aX, aY); + return this; + } + splineThru(pts) { + const npts = [this.currentPoint.clone()].concat(pts); + const curve = new SplineCurve(npts); + this.curves.push(curve); + this.currentPoint.copy(pts[pts.length - 1]); + return this; + } + arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + this.absarc( + aX + x0, + aY + y0, + aRadius, + aStartAngle, + aEndAngle, + aClockwise + ); + return this; + } + absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + this.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); + return this; + } + ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + this.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + return this; + } + absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + const curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + if (this.curves.length > 0) { + const firstPoint = curve.getPoint(0); + if (!firstPoint.equals(this.currentPoint)) { + this.lineTo(firstPoint.x, firstPoint.y); + } + } + this.curves.push(curve); + const lastPoint = curve.getPoint(1); + this.currentPoint.copy(lastPoint); + return this; + } + copy(source) { + super.copy(source); + this.currentPoint.copy(source.currentPoint); + return this; + } + toJSON() { + const data = super.toJSON(); + data.currentPoint = this.currentPoint.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.currentPoint.fromArray(json.currentPoint); + return this; + } +} +class LatheGeometry extends BufferGeometry { + static { + __name(this, "LatheGeometry"); + } + constructor(points = [new Vector2(0, -0.5), new Vector2(0.5, 0), new Vector2(0, 0.5)], segments = 12, phiStart = 0, phiLength = Math.PI * 2) { + super(); + this.type = "LatheGeometry"; + this.parameters = { + points, + segments, + phiStart, + phiLength + }; + segments = Math.floor(segments); + phiLength = clamp(phiLength, 0, Math.PI * 2); + const indices = []; + const vertices = []; + const uvs = []; + const initNormals = []; + const normals = []; + const inverseSegments = 1 / segments; + const vertex2 = new Vector3(); + const uv = new Vector2(); + const normal = new Vector3(); + const curNormal = new Vector3(); + const prevNormal = new Vector3(); + let dx = 0; + let dy = 0; + for (let j = 0; j <= points.length - 1; j++) { + switch (j) { + case 0: + dx = points[j + 1].x - points[j].x; + dy = points[j + 1].y - points[j].y; + normal.x = dy * 1; + normal.y = -dx; + normal.z = dy * 0; + prevNormal.copy(normal); + normal.normalize(); + initNormals.push(normal.x, normal.y, normal.z); + break; + case points.length - 1: + initNormals.push(prevNormal.x, prevNormal.y, prevNormal.z); + break; + default: + dx = points[j + 1].x - points[j].x; + dy = points[j + 1].y - points[j].y; + normal.x = dy * 1; + normal.y = -dx; + normal.z = dy * 0; + curNormal.copy(normal); + normal.x += prevNormal.x; + normal.y += prevNormal.y; + normal.z += prevNormal.z; + normal.normalize(); + initNormals.push(normal.x, normal.y, normal.z); + prevNormal.copy(curNormal); + } + } + for (let i = 0; i <= segments; i++) { + const phi = phiStart + i * inverseSegments * phiLength; + const sin = Math.sin(phi); + const cos = Math.cos(phi); + for (let j = 0; j <= points.length - 1; j++) { + vertex2.x = points[j].x * sin; + vertex2.y = points[j].y; + vertex2.z = points[j].x * cos; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + uv.x = i / segments; + uv.y = j / (points.length - 1); + uvs.push(uv.x, uv.y); + const x = initNormals[3 * j + 0] * sin; + const y = initNormals[3 * j + 1]; + const z = initNormals[3 * j + 0] * cos; + normals.push(x, y, z); + } + } + for (let i = 0; i < segments; i++) { + for (let j = 0; j < points.length - 1; j++) { + const base = j + i * points.length; + const a = base; + const b = base + points.length; + const c = base + points.length + 1; + const d = base + 1; + indices.push(a, b, d); + indices.push(c, d, b); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new LatheGeometry(data.points, data.segments, data.phiStart, data.phiLength); + } +} +class CapsuleGeometry extends LatheGeometry { + static { + __name(this, "CapsuleGeometry"); + } + constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { + const path = new Path(); + path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); + path.absarc(0, length / 2, radius, 0, Math.PI * 0.5); + super(path.getPoints(capSegments), radialSegments); + this.type = "CapsuleGeometry"; + this.parameters = { + radius, + length, + capSegments, + radialSegments + }; + } + static fromJSON(data) { + return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments); + } +} +class CircleGeometry extends BufferGeometry { + static { + __name(this, "CircleGeometry"); + } + constructor(radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "CircleGeometry"; + this.parameters = { + radius, + segments, + thetaStart, + thetaLength + }; + segments = Math.max(3, segments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const vertex2 = new Vector3(); + const uv = new Vector2(); + vertices.push(0, 0, 0); + normals.push(0, 0, 1); + uvs.push(0.5, 0.5); + for (let s = 0, i = 3; s <= segments; s++, i += 3) { + const segment = thetaStart + s / segments * thetaLength; + vertex2.x = radius * Math.cos(segment); + vertex2.y = radius * Math.sin(segment); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, 0, 1); + uv.x = (vertices[i] / radius + 1) / 2; + uv.y = (vertices[i + 1] / radius + 1) / 2; + uvs.push(uv.x, uv.y); + } + for (let i = 1; i <= segments; i++) { + indices.push(i, i + 1, 0); + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new CircleGeometry(data.radius, data.segments, data.thetaStart, data.thetaLength); + } +} +class CylinderGeometry extends BufferGeometry { + static { + __name(this, "CylinderGeometry"); + } + constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "CylinderGeometry"; + this.parameters = { + radiusTop, + radiusBottom, + height, + radialSegments, + heightSegments, + openEnded, + thetaStart, + thetaLength + }; + const scope = this; + radialSegments = Math.floor(radialSegments); + heightSegments = Math.floor(heightSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let index = 0; + const indexArray = []; + const halfHeight = height / 2; + let groupStart = 0; + generateTorso(); + if (openEnded === false) { + if (radiusTop > 0) generateCap(true); + if (radiusBottom > 0) generateCap(false); + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generateTorso() { + const normal = new Vector3(); + const vertex2 = new Vector3(); + let groupCount = 0; + const slope = (radiusBottom - radiusTop) / height; + for (let y = 0; y <= heightSegments; y++) { + const indexRow = []; + const v = y / heightSegments; + const radius = v * (radiusBottom - radiusTop) + radiusTop; + for (let x = 0; x <= radialSegments; x++) { + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + const sinTheta = Math.sin(theta); + const cosTheta = Math.cos(theta); + vertex2.x = radius * sinTheta; + vertex2.y = -v * height + halfHeight; + vertex2.z = radius * cosTheta; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.set(sinTheta, slope, cosTheta).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u, 1 - v); + indexRow.push(index++); + } + indexArray.push(indexRow); + } + for (let x = 0; x < radialSegments; x++) { + for (let y = 0; y < heightSegments; y++) { + const a = indexArray[y][x]; + const b = indexArray[y + 1][x]; + const c = indexArray[y + 1][x + 1]; + const d = indexArray[y][x + 1]; + if (radiusTop > 0 || y !== 0) { + indices.push(a, b, d); + groupCount += 3; + } + if (radiusBottom > 0 || y !== heightSegments - 1) { + indices.push(b, c, d); + groupCount += 3; + } + } + } + scope.addGroup(groupStart, groupCount, 0); + groupStart += groupCount; + } + __name(generateTorso, "generateTorso"); + function generateCap(top) { + const centerIndexStart = index; + const uv = new Vector2(); + const vertex2 = new Vector3(); + let groupCount = 0; + const radius = top === true ? radiusTop : radiusBottom; + const sign2 = top === true ? 1 : -1; + for (let x = 1; x <= radialSegments; x++) { + vertices.push(0, halfHeight * sign2, 0); + normals.push(0, sign2, 0); + uvs.push(0.5, 0.5); + index++; + } + const centerIndexEnd = index; + for (let x = 0; x <= radialSegments; x++) { + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + const cosTheta = Math.cos(theta); + const sinTheta = Math.sin(theta); + vertex2.x = radius * sinTheta; + vertex2.y = halfHeight * sign2; + vertex2.z = radius * cosTheta; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, sign2, 0); + uv.x = cosTheta * 0.5 + 0.5; + uv.y = sinTheta * 0.5 * sign2 + 0.5; + uvs.push(uv.x, uv.y); + index++; + } + for (let x = 0; x < radialSegments; x++) { + const c = centerIndexStart + x; + const i = centerIndexEnd + x; + if (top === true) { + indices.push(i, i + 1, c); + } else { + indices.push(i + 1, i, c); + } + groupCount += 3; + } + scope.addGroup(groupStart, groupCount, top === true ? 1 : 2); + groupStart += groupCount; + } + __name(generateCap, "generateCap"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new CylinderGeometry(data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); + } +} +class ConeGeometry extends CylinderGeometry { + static { + __name(this, "ConeGeometry"); + } + constructor(radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { + super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength); + this.type = "ConeGeometry"; + this.parameters = { + radius, + height, + radialSegments, + heightSegments, + openEnded, + thetaStart, + thetaLength + }; + } + static fromJSON(data) { + return new ConeGeometry(data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); + } +} +class PolyhedronGeometry extends BufferGeometry { + static { + __name(this, "PolyhedronGeometry"); + } + constructor(vertices = [], indices = [], radius = 1, detail = 0) { + super(); + this.type = "PolyhedronGeometry"; + this.parameters = { + vertices, + indices, + radius, + detail + }; + const vertexBuffer = []; + const uvBuffer = []; + subdivide(detail); + applyRadius(radius); + generateUVs(); + this.setAttribute("position", new Float32BufferAttribute(vertexBuffer, 3)); + this.setAttribute("normal", new Float32BufferAttribute(vertexBuffer.slice(), 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvBuffer, 2)); + if (detail === 0) { + this.computeVertexNormals(); + } else { + this.normalizeNormals(); + } + function subdivide(detail2) { + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + for (let i = 0; i < indices.length; i += 3) { + getVertexByIndex(indices[i + 0], a); + getVertexByIndex(indices[i + 1], b); + getVertexByIndex(indices[i + 2], c); + subdivideFace(a, b, c, detail2); + } + } + __name(subdivide, "subdivide"); + function subdivideFace(a, b, c, detail2) { + const cols = detail2 + 1; + const v = []; + for (let i = 0; i <= cols; i++) { + v[i] = []; + const aj = a.clone().lerp(c, i / cols); + const bj = b.clone().lerp(c, i / cols); + const rows = cols - i; + for (let j = 0; j <= rows; j++) { + if (j === 0 && i === cols) { + v[i][j] = aj; + } else { + v[i][j] = aj.clone().lerp(bj, j / rows); + } + } + } + for (let i = 0; i < cols; i++) { + for (let j = 0; j < 2 * (cols - i) - 1; j++) { + const k = Math.floor(j / 2); + if (j % 2 === 0) { + pushVertex(v[i][k + 1]); + pushVertex(v[i + 1][k]); + pushVertex(v[i][k]); + } else { + pushVertex(v[i][k + 1]); + pushVertex(v[i + 1][k + 1]); + pushVertex(v[i + 1][k]); + } + } + } + } + __name(subdivideFace, "subdivideFace"); + function applyRadius(radius2) { + const vertex2 = new Vector3(); + for (let i = 0; i < vertexBuffer.length; i += 3) { + vertex2.x = vertexBuffer[i + 0]; + vertex2.y = vertexBuffer[i + 1]; + vertex2.z = vertexBuffer[i + 2]; + vertex2.normalize().multiplyScalar(radius2); + vertexBuffer[i + 0] = vertex2.x; + vertexBuffer[i + 1] = vertex2.y; + vertexBuffer[i + 2] = vertex2.z; + } + } + __name(applyRadius, "applyRadius"); + function generateUVs() { + const vertex2 = new Vector3(); + for (let i = 0; i < vertexBuffer.length; i += 3) { + vertex2.x = vertexBuffer[i + 0]; + vertex2.y = vertexBuffer[i + 1]; + vertex2.z = vertexBuffer[i + 2]; + const u = azimuth(vertex2) / 2 / Math.PI + 0.5; + const v = inclination(vertex2) / Math.PI + 0.5; + uvBuffer.push(u, 1 - v); + } + correctUVs(); + correctSeam(); + } + __name(generateUVs, "generateUVs"); + function correctSeam() { + for (let i = 0; i < uvBuffer.length; i += 6) { + const x0 = uvBuffer[i + 0]; + const x1 = uvBuffer[i + 2]; + const x2 = uvBuffer[i + 4]; + const max2 = Math.max(x0, x1, x2); + const min = Math.min(x0, x1, x2); + if (max2 > 0.9 && min < 0.1) { + if (x0 < 0.2) uvBuffer[i + 0] += 1; + if (x1 < 0.2) uvBuffer[i + 2] += 1; + if (x2 < 0.2) uvBuffer[i + 4] += 1; + } + } + } + __name(correctSeam, "correctSeam"); + function pushVertex(vertex2) { + vertexBuffer.push(vertex2.x, vertex2.y, vertex2.z); + } + __name(pushVertex, "pushVertex"); + function getVertexByIndex(index, vertex2) { + const stride = index * 3; + vertex2.x = vertices[stride + 0]; + vertex2.y = vertices[stride + 1]; + vertex2.z = vertices[stride + 2]; + } + __name(getVertexByIndex, "getVertexByIndex"); + function correctUVs() { + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + const centroid = new Vector3(); + const uvA = new Vector2(); + const uvB = new Vector2(); + const uvC = new Vector2(); + for (let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) { + a.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]); + b.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]); + c.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]); + uvA.set(uvBuffer[j + 0], uvBuffer[j + 1]); + uvB.set(uvBuffer[j + 2], uvBuffer[j + 3]); + uvC.set(uvBuffer[j + 4], uvBuffer[j + 5]); + centroid.copy(a).add(b).add(c).divideScalar(3); + const azi = azimuth(centroid); + correctUV(uvA, j + 0, a, azi); + correctUV(uvB, j + 2, b, azi); + correctUV(uvC, j + 4, c, azi); + } + } + __name(correctUVs, "correctUVs"); + function correctUV(uv, stride, vector, azimuth2) { + if (azimuth2 < 0 && uv.x === 1) { + uvBuffer[stride] = uv.x - 1; + } + if (vector.x === 0 && vector.z === 0) { + uvBuffer[stride] = azimuth2 / 2 / Math.PI + 0.5; + } + } + __name(correctUV, "correctUV"); + function azimuth(vector) { + return Math.atan2(vector.z, -vector.x); + } + __name(azimuth, "azimuth"); + function inclination(vector) { + return Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z)); + } + __name(inclination, "inclination"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new PolyhedronGeometry(data.vertices, data.indices, data.radius, data.details); + } +} +class DodecahedronGeometry extends PolyhedronGeometry { + static { + __name(this, "DodecahedronGeometry"); + } + constructor(radius = 1, detail = 0) { + const t2 = (1 + Math.sqrt(5)) / 2; + const r = 1 / t2; + const vertices = [ + // (±1, ±1, ±1) + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + // (0, ±1/φ, ±φ) + 0, + -r, + -t2, + 0, + -r, + t2, + 0, + r, + -t2, + 0, + r, + t2, + // (±1/φ, ±φ, 0) + -r, + -t2, + 0, + -r, + t2, + 0, + r, + -t2, + 0, + r, + t2, + 0, + // (±φ, 0, ±1/φ) + -t2, + 0, + -r, + t2, + 0, + -r, + -t2, + 0, + r, + t2, + 0, + r + ]; + const indices = [ + 3, + 11, + 7, + 3, + 7, + 15, + 3, + 15, + 13, + 7, + 19, + 17, + 7, + 17, + 6, + 7, + 6, + 15, + 17, + 4, + 8, + 17, + 8, + 10, + 17, + 10, + 6, + 8, + 0, + 16, + 8, + 16, + 2, + 8, + 2, + 10, + 0, + 12, + 1, + 0, + 1, + 18, + 0, + 18, + 16, + 6, + 10, + 2, + 6, + 2, + 13, + 6, + 13, + 15, + 2, + 16, + 18, + 2, + 18, + 3, + 2, + 3, + 13, + 18, + 1, + 9, + 18, + 9, + 11, + 18, + 11, + 3, + 4, + 14, + 12, + 4, + 12, + 0, + 4, + 0, + 8, + 11, + 9, + 5, + 11, + 5, + 19, + 11, + 19, + 7, + 19, + 5, + 14, + 19, + 14, + 4, + 19, + 4, + 17, + 1, + 12, + 14, + 1, + 14, + 5, + 1, + 5, + 9 + ]; + super(vertices, indices, radius, detail); + this.type = "DodecahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new DodecahedronGeometry(data.radius, data.detail); + } +} +const _v0 = /* @__PURE__ */ new Vector3(); +const _v1$1 = /* @__PURE__ */ new Vector3(); +const _normal = /* @__PURE__ */ new Vector3(); +const _triangle = /* @__PURE__ */ new Triangle(); +class EdgesGeometry extends BufferGeometry { + static { + __name(this, "EdgesGeometry"); + } + constructor(geometry = null, thresholdAngle = 1) { + super(); + this.type = "EdgesGeometry"; + this.parameters = { + geometry, + thresholdAngle + }; + if (geometry !== null) { + const precisionPoints = 4; + const precision = Math.pow(10, precisionPoints); + const thresholdDot = Math.cos(DEG2RAD * thresholdAngle); + const indexAttr = geometry.getIndex(); + const positionAttr = geometry.getAttribute("position"); + const indexCount = indexAttr ? indexAttr.count : positionAttr.count; + const indexArr = [0, 0, 0]; + const vertKeys = ["a", "b", "c"]; + const hashes = new Array(3); + const edgeData = {}; + const vertices = []; + for (let i = 0; i < indexCount; i += 3) { + if (indexAttr) { + indexArr[0] = indexAttr.getX(i); + indexArr[1] = indexAttr.getX(i + 1); + indexArr[2] = indexAttr.getX(i + 2); + } else { + indexArr[0] = i; + indexArr[1] = i + 1; + indexArr[2] = i + 2; + } + const { a, b, c } = _triangle; + a.fromBufferAttribute(positionAttr, indexArr[0]); + b.fromBufferAttribute(positionAttr, indexArr[1]); + c.fromBufferAttribute(positionAttr, indexArr[2]); + _triangle.getNormal(_normal); + hashes[0] = `${Math.round(a.x * precision)},${Math.round(a.y * precision)},${Math.round(a.z * precision)}`; + hashes[1] = `${Math.round(b.x * precision)},${Math.round(b.y * precision)},${Math.round(b.z * precision)}`; + hashes[2] = `${Math.round(c.x * precision)},${Math.round(c.y * precision)},${Math.round(c.z * precision)}`; + if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) { + continue; + } + for (let j = 0; j < 3; j++) { + const jNext = (j + 1) % 3; + const vecHash0 = hashes[j]; + const vecHash1 = hashes[jNext]; + const v0 = _triangle[vertKeys[j]]; + const v1 = _triangle[vertKeys[jNext]]; + const hash = `${vecHash0}_${vecHash1}`; + const reverseHash = `${vecHash1}_${vecHash0}`; + if (reverseHash in edgeData && edgeData[reverseHash]) { + if (_normal.dot(edgeData[reverseHash].normal) <= thresholdDot) { + vertices.push(v0.x, v0.y, v0.z); + vertices.push(v1.x, v1.y, v1.z); + } + edgeData[reverseHash] = null; + } else if (!(hash in edgeData)) { + edgeData[hash] = { + index0: indexArr[j], + index1: indexArr[jNext], + normal: _normal.clone() + }; + } + } + } + for (const key in edgeData) { + if (edgeData[key]) { + const { index0, index1 } = edgeData[key]; + _v0.fromBufferAttribute(positionAttr, index0); + _v1$1.fromBufferAttribute(positionAttr, index1); + vertices.push(_v0.x, _v0.y, _v0.z); + vertices.push(_v1$1.x, _v1$1.y, _v1$1.z); + } + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +} +class Shape extends Path { + static { + __name(this, "Shape"); + } + constructor(points) { + super(points); + this.uuid = generateUUID(); + this.type = "Shape"; + this.holes = []; + } + getPointsHoles(divisions) { + const holesPts = []; + for (let i = 0, l = this.holes.length; i < l; i++) { + holesPts[i] = this.holes[i].getPoints(divisions); + } + return holesPts; + } + // get points of shape and holes (keypoints based on segments parameter) + extractPoints(divisions) { + return { + shape: this.getPoints(divisions), + holes: this.getPointsHoles(divisions) + }; + } + copy(source) { + super.copy(source); + this.holes = []; + for (let i = 0, l = source.holes.length; i < l; i++) { + const hole = source.holes[i]; + this.holes.push(hole.clone()); + } + return this; + } + toJSON() { + const data = super.toJSON(); + data.uuid = this.uuid; + data.holes = []; + for (let i = 0, l = this.holes.length; i < l; i++) { + const hole = this.holes[i]; + data.holes.push(hole.toJSON()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.uuid = json.uuid; + this.holes = []; + for (let i = 0, l = json.holes.length; i < l; i++) { + const hole = json.holes[i]; + this.holes.push(new Path().fromJSON(hole)); + } + return this; + } +} +const Earcut = { + triangulate: /* @__PURE__ */ __name(function(data, holeIndices, dim = 2) { + const hasHoles = holeIndices && holeIndices.length; + const outerLen = hasHoles ? holeIndices[0] * dim : data.length; + let outerNode = linkedList(data, 0, outerLen, dim, true); + const triangles = []; + if (!outerNode || outerNode.next === outerNode.prev) return triangles; + let minX, minY, maxX, maxY, x, y, invSize; + if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); + if (data.length > 80 * dim) { + minX = maxX = data[0]; + minY = maxY = data[1]; + for (let i = dim; i < outerLen; i += dim) { + x = data[i]; + y = data[i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + } + invSize = Math.max(maxX - minX, maxY - minY); + invSize = invSize !== 0 ? 32767 / invSize : 0; + } + earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0); + return triangles; + }, "triangulate") +}; +function linkedList(data, start, end, dim, clockwise) { + let i, last; + if (clockwise === signedArea(data, start, end, dim) > 0) { + for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); + } else { + for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); + } + if (last && equals(last, last.next)) { + removeNode(last); + last = last.next; + } + return last; +} +__name(linkedList, "linkedList"); +function filterPoints(start, end) { + if (!start) return start; + if (!end) end = start; + let p = start, again; + do { + again = false; + if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { + removeNode(p); + p = end = p.prev; + if (p === p.next) break; + again = true; + } else { + p = p.next; + } + } while (again || p !== end); + return end; +} +__name(filterPoints, "filterPoints"); +function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { + if (!ear) return; + if (!pass && invSize) indexCurve(ear, minX, minY, invSize); + let stop = ear, prev, next; + while (ear.prev !== ear.next) { + prev = ear.prev; + next = ear.next; + if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { + triangles.push(prev.i / dim | 0); + triangles.push(ear.i / dim | 0); + triangles.push(next.i / dim | 0); + removeNode(ear); + ear = next.next; + stop = next.next; + continue; + } + ear = next; + if (ear === stop) { + if (!pass) { + earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); + } else if (pass === 1) { + ear = cureLocalIntersections(filterPoints(ear), triangles, dim); + earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); + } else if (pass === 2) { + splitEarcut(ear, triangles, dim, minX, minY, invSize); + } + break; + } + } +} +__name(earcutLinked, "earcutLinked"); +function isEar(ear) { + const a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; + const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; + let p = c.next; + while (p !== a) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.next; + } + return true; +} +__name(isEar, "isEar"); +function isEarHashed(ear, minX, minY, invSize) { + const a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; + const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; + const minZ = zOrder(x0, y0, minX, minY, invSize), maxZ = zOrder(x1, y1, minX, minY, invSize); + let p = ear.prevZ, n = ear.nextZ; + while (p && p.z >= minZ && n && n.z <= maxZ) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + while (p && p.z >= minZ) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + } + while (n && n.z <= maxZ) { + if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + return true; +} +__name(isEarHashed, "isEarHashed"); +function cureLocalIntersections(start, triangles, dim) { + let p = start; + do { + const a = p.prev, b = p.next.next; + if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { + triangles.push(a.i / dim | 0); + triangles.push(p.i / dim | 0); + triangles.push(b.i / dim | 0); + removeNode(p); + removeNode(p.next); + p = start = b; + } + p = p.next; + } while (p !== start); + return filterPoints(p); +} +__name(cureLocalIntersections, "cureLocalIntersections"); +function splitEarcut(start, triangles, dim, minX, minY, invSize) { + let a = start; + do { + let b = a.next.next; + while (b !== a.prev) { + if (a.i !== b.i && isValidDiagonal(a, b)) { + let c = splitPolygon(a, b); + a = filterPoints(a, a.next); + c = filterPoints(c, c.next); + earcutLinked(a, triangles, dim, minX, minY, invSize, 0); + earcutLinked(c, triangles, dim, minX, minY, invSize, 0); + return; + } + b = b.next; + } + a = a.next; + } while (a !== start); +} +__name(splitEarcut, "splitEarcut"); +function eliminateHoles(data, holeIndices, outerNode, dim) { + const queue = []; + let i, len, start, end, list; + for (i = 0, len = holeIndices.length; i < len; i++) { + start = holeIndices[i] * dim; + end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; + list = linkedList(data, start, end, dim, false); + if (list === list.next) list.steiner = true; + queue.push(getLeftmost(list)); + } + queue.sort(compareX); + for (i = 0; i < queue.length; i++) { + outerNode = eliminateHole(queue[i], outerNode); + } + return outerNode; +} +__name(eliminateHoles, "eliminateHoles"); +function compareX(a, b) { + return a.x - b.x; +} +__name(compareX, "compareX"); +function eliminateHole(hole, outerNode) { + const bridge = findHoleBridge(hole, outerNode); + if (!bridge) { + return outerNode; + } + const bridgeReverse = splitPolygon(bridge, hole); + filterPoints(bridgeReverse, bridgeReverse.next); + return filterPoints(bridge, bridge.next); +} +__name(eliminateHole, "eliminateHole"); +function findHoleBridge(hole, outerNode) { + let p = outerNode, qx = -Infinity, m; + const hx = hole.x, hy = hole.y; + do { + if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { + const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); + if (x <= hx && x > qx) { + qx = x; + m = p.x < p.next.x ? p : p.next; + if (x === hx) return m; + } + } + p = p.next; + } while (p !== outerNode); + if (!m) return null; + const stop = m, mx = m.x, my = m.y; + let tanMin = Infinity, tan; + p = m; + do { + if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { + tan = Math.abs(hy - p.y) / (hx - p.x); + if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) { + m = p; + tanMin = tan; + } + } + p = p.next; + } while (p !== stop); + return m; +} +__name(findHoleBridge, "findHoleBridge"); +function sectorContainsSector(m, p) { + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; +} +__name(sectorContainsSector, "sectorContainsSector"); +function indexCurve(start, minX, minY, invSize) { + let p = start; + do { + if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + } while (p !== start); + p.prevZ.nextZ = null; + p.prevZ = null; + sortLinked(p); +} +__name(indexCurve, "indexCurve"); +function sortLinked(list) { + let i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; + do { + p = list; + list = null; + tail = null; + numMerges = 0; + while (p) { + numMerges++; + q = p; + pSize = 0; + for (i = 0; i < inSize; i++) { + pSize++; + q = q.nextZ; + if (!q) break; + } + qSize = inSize; + while (pSize > 0 || qSize > 0 && q) { + if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { + e = p; + p = p.nextZ; + pSize--; + } else { + e = q; + q = q.nextZ; + qSize--; + } + if (tail) tail.nextZ = e; + else list = e; + e.prevZ = tail; + tail = e; + } + p = q; + } + tail.nextZ = null; + inSize *= 2; + } while (numMerges > 1); + return list; +} +__name(sortLinked, "sortLinked"); +function zOrder(x, y, minX, minY, invSize) { + x = (x - minX) * invSize | 0; + y = (y - minY) * invSize | 0; + x = (x | x << 8) & 16711935; + x = (x | x << 4) & 252645135; + x = (x | x << 2) & 858993459; + x = (x | x << 1) & 1431655765; + y = (y | y << 8) & 16711935; + y = (y | y << 4) & 252645135; + y = (y | y << 2) & 858993459; + y = (y | y << 1) & 1431655765; + return x | y << 1; +} +__name(zOrder, "zOrder"); +function getLeftmost(start) { + let p = start, leftmost = start; + do { + if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p; + p = p.next; + } while (p !== start); + return leftmost; +} +__name(getLeftmost, "getLeftmost"); +function pointInTriangle(ax, ay, bx, by, cx, cy, px2, py2) { + return (cx - px2) * (ay - py2) >= (ax - px2) * (cy - py2) && (ax - px2) * (by - py2) >= (bx - px2) * (ay - py2) && (bx - px2) * (cy - py2) >= (cx - px2) * (by - py2); +} +__name(pointInTriangle, "pointInTriangle"); +function isValidDiagonal(a, b) { + return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges + (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible + (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors + equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); +} +__name(isValidDiagonal, "isValidDiagonal"); +function area(p, q, r) { + return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); +} +__name(area, "area"); +function equals(p1, p2) { + return p1.x === p2.x && p1.y === p2.y; +} +__name(equals, "equals"); +function intersects(p1, q1, p2, q2) { + const o1 = sign(area(p1, q1, p2)); + const o2 = sign(area(p1, q1, q2)); + const o3 = sign(area(p2, q2, p1)); + const o4 = sign(area(p2, q2, q1)); + if (o1 !== o2 && o3 !== o4) return true; + if (o1 === 0 && onSegment(p1, p2, q1)) return true; + if (o2 === 0 && onSegment(p1, q2, q1)) return true; + if (o3 === 0 && onSegment(p2, p1, q2)) return true; + if (o4 === 0 && onSegment(p2, q1, q2)) return true; + return false; +} +__name(intersects, "intersects"); +function onSegment(p, q, r) { + return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); +} +__name(onSegment, "onSegment"); +function sign(num) { + return num > 0 ? 1 : num < 0 ? -1 : 0; +} +__name(sign, "sign"); +function intersectsPolygon(a, b) { + let p = a; + do { + if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; + p = p.next; + } while (p !== a); + return false; +} +__name(intersectsPolygon, "intersectsPolygon"); +function locallyInside(a, b) { + return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; +} +__name(locallyInside, "locallyInside"); +function middleInside(a, b) { + let p = a, inside = false; + const px2 = (a.x + b.x) / 2, py2 = (a.y + b.y) / 2; + do { + if (p.y > py2 !== p.next.y > py2 && p.next.y !== p.y && px2 < (p.next.x - p.x) * (py2 - p.y) / (p.next.y - p.y) + p.x) + inside = !inside; + p = p.next; + } while (p !== a); + return inside; +} +__name(middleInside, "middleInside"); +function splitPolygon(a, b) { + const a2 = new Node(a.i, a.x, a.y), b22 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev; + a.next = b; + b.prev = a; + a2.next = an; + an.prev = a2; + b22.next = a2; + a2.prev = b22; + bp.next = b22; + b22.prev = bp; + return b22; +} +__name(splitPolygon, "splitPolygon"); +function insertNode(i, x, y, last) { + const p = new Node(i, x, y); + if (!last) { + p.prev = p; + p.next = p; + } else { + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + } + return p; +} +__name(insertNode, "insertNode"); +function removeNode(p) { + p.next.prev = p.prev; + p.prev.next = p.next; + if (p.prevZ) p.prevZ.nextZ = p.nextZ; + if (p.nextZ) p.nextZ.prevZ = p.prevZ; +} +__name(removeNode, "removeNode"); +function Node(i, x, y) { + this.i = i; + this.x = x; + this.y = y; + this.prev = null; + this.next = null; + this.z = 0; + this.prevZ = null; + this.nextZ = null; + this.steiner = false; +} +__name(Node, "Node"); +function signedArea(data, start, end, dim) { + let sum = 0; + for (let i = start, j = end - dim; i < end; i += dim) { + sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); + j = i; + } + return sum; +} +__name(signedArea, "signedArea"); +class ShapeUtils { + static { + __name(this, "ShapeUtils"); + } + // calculate area of the contour polygon + static area(contour) { + const n = contour.length; + let a = 0; + for (let p = n - 1, q = 0; q < n; p = q++) { + a += contour[p].x * contour[q].y - contour[q].x * contour[p].y; + } + return a * 0.5; + } + static isClockWise(pts) { + return ShapeUtils.area(pts) < 0; + } + static triangulateShape(contour, holes) { + const vertices = []; + const holeIndices = []; + const faces = []; + removeDupEndPts(contour); + addContour(vertices, contour); + let holeIndex = contour.length; + holes.forEach(removeDupEndPts); + for (let i = 0; i < holes.length; i++) { + holeIndices.push(holeIndex); + holeIndex += holes[i].length; + addContour(vertices, holes[i]); + } + const triangles = Earcut.triangulate(vertices, holeIndices); + for (let i = 0; i < triangles.length; i += 3) { + faces.push(triangles.slice(i, i + 3)); + } + return faces; + } +} +function removeDupEndPts(points) { + const l = points.length; + if (l > 2 && points[l - 1].equals(points[0])) { + points.pop(); + } +} +__name(removeDupEndPts, "removeDupEndPts"); +function addContour(vertices, contour) { + for (let i = 0; i < contour.length; i++) { + vertices.push(contour[i].x); + vertices.push(contour[i].y); + } +} +__name(addContour, "addContour"); +class ExtrudeGeometry extends BufferGeometry { + static { + __name(this, "ExtrudeGeometry"); + } + constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), options = {}) { + super(); + this.type = "ExtrudeGeometry"; + this.parameters = { + shapes, + options + }; + shapes = Array.isArray(shapes) ? shapes : [shapes]; + const scope = this; + const verticesArray = []; + const uvArray = []; + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + addShape(shape); + } + this.setAttribute("position", new Float32BufferAttribute(verticesArray, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvArray, 2)); + this.computeVertexNormals(); + function addShape(shape) { + const placeholder = []; + const curveSegments = options.curveSegments !== void 0 ? options.curveSegments : 12; + const steps = options.steps !== void 0 ? options.steps : 1; + const depth = options.depth !== void 0 ? options.depth : 1; + let bevelEnabled = options.bevelEnabled !== void 0 ? options.bevelEnabled : true; + let bevelThickness = options.bevelThickness !== void 0 ? options.bevelThickness : 0.2; + let bevelSize = options.bevelSize !== void 0 ? options.bevelSize : bevelThickness - 0.1; + let bevelOffset = options.bevelOffset !== void 0 ? options.bevelOffset : 0; + let bevelSegments = options.bevelSegments !== void 0 ? options.bevelSegments : 3; + const extrudePath = options.extrudePath; + const uvgen = options.UVGenerator !== void 0 ? options.UVGenerator : WorldUVGenerator; + let extrudePts, extrudeByPath = false; + let splineTube, binormal, normal, position2; + if (extrudePath) { + extrudePts = extrudePath.getSpacedPoints(steps); + extrudeByPath = true; + bevelEnabled = false; + splineTube = extrudePath.computeFrenetFrames(steps, false); + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + } + if (!bevelEnabled) { + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + } + const shapePoints = shape.extractPoints(curveSegments); + let vertices = shapePoints.shape; + const holes = shapePoints.holes; + const reverse = !ShapeUtils.isClockWise(vertices); + if (reverse) { + vertices = vertices.reverse(); + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + if (ShapeUtils.isClockWise(ahole)) { + holes[h] = ahole.reverse(); + } + } + } + const faces = ShapeUtils.triangulateShape(vertices, holes); + const contour = vertices; + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + vertices = vertices.concat(ahole); + } + function scalePt2(pt, vec, size) { + if (!vec) console.error("THREE.ExtrudeGeometry: vec does not exist"); + return pt.clone().addScaledVector(vec, size); + } + __name(scalePt2, "scalePt2"); + const vlen = vertices.length, flen = faces.length; + function getBevelVec(inPt, inPrev, inNext) { + let v_trans_x, v_trans_y, shrink_by; + const v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y; + const v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y; + const v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; + const collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x; + if (Math.abs(collinear0) > Number.EPSILON) { + const v_prev_len = Math.sqrt(v_prev_lensq); + const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); + const ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len; + const ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len; + const ptNextShift_x = inNext.x - v_next_y / v_next_len; + const ptNextShift_y = inNext.y + v_next_x / v_next_len; + const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); + v_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x; + v_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; + const v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y; + if (v_trans_lensq <= 2) { + return new Vector2(v_trans_x, v_trans_y); + } else { + shrink_by = Math.sqrt(v_trans_lensq / 2); + } + } else { + let direction_eq = false; + if (v_prev_x > Number.EPSILON) { + if (v_next_x > Number.EPSILON) { + direction_eq = true; + } + } else { + if (v_prev_x < -Number.EPSILON) { + if (v_next_x < -Number.EPSILON) { + direction_eq = true; + } + } else { + if (Math.sign(v_prev_y) === Math.sign(v_next_y)) { + direction_eq = true; + } + } + } + if (direction_eq) { + v_trans_x = -v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt(v_prev_lensq); + } else { + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt(v_prev_lensq / 2); + } + } + return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by); + } + __name(getBevelVec, "getBevelVec"); + const contourMovements = []; + for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { + if (j === il) j = 0; + if (k === il) k = 0; + contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]); + } + const holesMovements = []; + let oneHoleMovements, verticesMovements = contourMovements.concat(); + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = []; + for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { + if (j === il) j = 0; + if (k === il) k = 0; + oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]); + } + holesMovements.push(oneHoleMovements); + verticesMovements = verticesMovements.concat(oneHoleMovements); + } + for (let b = 0; b < bevelSegments; b++) { + const t2 = b / bevelSegments; + const z = bevelThickness * Math.cos(t2 * Math.PI / 2); + const bs2 = bevelSize * Math.sin(t2 * Math.PI / 2) + bevelOffset; + for (let i = 0, il = contour.length; i < il; i++) { + const vert = scalePt2(contour[i], contourMovements[i], bs2); + v(vert.x, vert.y, -z); + } + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = holesMovements[h]; + for (let i = 0, il = ahole.length; i < il; i++) { + const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); + v(vert.x, vert.y, -z); + } + } + } + const bs = bevelSize + bevelOffset; + for (let i = 0; i < vlen; i++) { + const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; + if (!extrudeByPath) { + v(vert.x, vert.y, 0); + } else { + normal.copy(splineTube.normals[0]).multiplyScalar(vert.x); + binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y); + position2.copy(extrudePts[0]).add(normal).add(binormal); + v(position2.x, position2.y, position2.z); + } + } + for (let s = 1; s <= steps; s++) { + for (let i = 0; i < vlen; i++) { + const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; + if (!extrudeByPath) { + v(vert.x, vert.y, depth / steps * s); + } else { + normal.copy(splineTube.normals[s]).multiplyScalar(vert.x); + binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y); + position2.copy(extrudePts[s]).add(normal).add(binormal); + v(position2.x, position2.y, position2.z); + } + } + } + for (let b = bevelSegments - 1; b >= 0; b--) { + const t2 = b / bevelSegments; + const z = bevelThickness * Math.cos(t2 * Math.PI / 2); + const bs2 = bevelSize * Math.sin(t2 * Math.PI / 2) + bevelOffset; + for (let i = 0, il = contour.length; i < il; i++) { + const vert = scalePt2(contour[i], contourMovements[i], bs2); + v(vert.x, vert.y, depth + z); + } + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = holesMovements[h]; + for (let i = 0, il = ahole.length; i < il; i++) { + const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); + if (!extrudeByPath) { + v(vert.x, vert.y, depth + z); + } else { + v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z); + } + } + } + } + buildLidFaces(); + buildSideFaces(); + function buildLidFaces() { + const start = verticesArray.length / 3; + if (bevelEnabled) { + let layer = 0; + let offset = vlen * layer; + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[2] + offset, face[1] + offset, face[0] + offset); + } + layer = steps + bevelSegments * 2; + offset = vlen * layer; + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[0] + offset, face[1] + offset, face[2] + offset); + } + } else { + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[2], face[1], face[0]); + } + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps); + } + } + scope.addGroup(start, verticesArray.length / 3 - start, 0); + } + __name(buildLidFaces, "buildLidFaces"); + function buildSideFaces() { + const start = verticesArray.length / 3; + let layeroffset = 0; + sidewalls(contour, layeroffset); + layeroffset += contour.length; + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + sidewalls(ahole, layeroffset); + layeroffset += ahole.length; + } + scope.addGroup(start, verticesArray.length / 3 - start, 1); + } + __name(buildSideFaces, "buildSideFaces"); + function sidewalls(contour2, layeroffset) { + let i = contour2.length; + while (--i >= 0) { + const j = i; + let k = i - 1; + if (k < 0) k = contour2.length - 1; + for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s++) { + const slen1 = vlen * s; + const slen2 = vlen * (s + 1); + const a = layeroffset + j + slen1, b = layeroffset + k + slen1, c = layeroffset + k + slen2, d = layeroffset + j + slen2; + f4(a, b, c, d); + } + } + } + __name(sidewalls, "sidewalls"); + function v(x, y, z) { + placeholder.push(x); + placeholder.push(y); + placeholder.push(z); + } + __name(v, "v"); + function f3(a, b, c) { + addVertex(a); + addVertex(b); + addVertex(c); + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1); + addUV(uvs[0]); + addUV(uvs[1]); + addUV(uvs[2]); + } + __name(f3, "f3"); + function f4(a, b, c, d) { + addVertex(a); + addVertex(b); + addVertex(d); + addVertex(b); + addVertex(c); + addVertex(d); + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1); + addUV(uvs[0]); + addUV(uvs[1]); + addUV(uvs[3]); + addUV(uvs[1]); + addUV(uvs[2]); + addUV(uvs[3]); + } + __name(f4, "f4"); + function addVertex(index) { + verticesArray.push(placeholder[index * 3 + 0]); + verticesArray.push(placeholder[index * 3 + 1]); + verticesArray.push(placeholder[index * 3 + 2]); + } + __name(addVertex, "addVertex"); + function addUV(vector2) { + uvArray.push(vector2.x); + uvArray.push(vector2.y); + } + __name(addUV, "addUV"); + } + __name(addShape, "addShape"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + const shapes = this.parameters.shapes; + const options = this.parameters.options; + return toJSON$1(shapes, options, data); + } + static fromJSON(data, shapes) { + const geometryShapes = []; + for (let j = 0, jl = data.shapes.length; j < jl; j++) { + const shape = shapes[data.shapes[j]]; + geometryShapes.push(shape); + } + const extrudePath = data.options.extrudePath; + if (extrudePath !== void 0) { + data.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath); + } + return new ExtrudeGeometry(geometryShapes, data.options); + } +} +const WorldUVGenerator = { + generateTopUV: /* @__PURE__ */ __name(function(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new Vector2(a_x, a_y), + new Vector2(b_x, b_y), + new Vector2(c_x, c_y) + ]; + }, "generateTopUV"), + generateSideWallUV: /* @__PURE__ */ __name(function(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new Vector2(a_x, 1 - a_z), + new Vector2(b_x, 1 - b_z), + new Vector2(c_x, 1 - c_z), + new Vector2(d_x, 1 - d_z) + ]; + } else { + return [ + new Vector2(a_y, 1 - a_z), + new Vector2(b_y, 1 - b_z), + new Vector2(c_y, 1 - c_z), + new Vector2(d_y, 1 - d_z) + ]; + } + }, "generateSideWallUV") +}; +function toJSON$1(shapes, options, data) { + data.shapes = []; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + data.shapes.push(shape.uuid); + } + } else { + data.shapes.push(shapes.uuid); + } + data.options = Object.assign({}, options); + if (options.extrudePath !== void 0) data.options.extrudePath = options.extrudePath.toJSON(); + return data; +} +__name(toJSON$1, "toJSON$1"); +class IcosahedronGeometry extends PolyhedronGeometry { + static { + __name(this, "IcosahedronGeometry"); + } + constructor(radius = 1, detail = 0) { + const t2 = (1 + Math.sqrt(5)) / 2; + const vertices = [ + -1, + t2, + 0, + 1, + t2, + 0, + -1, + -t2, + 0, + 1, + -t2, + 0, + 0, + -1, + t2, + 0, + 1, + t2, + 0, + -1, + -t2, + 0, + 1, + -t2, + t2, + 0, + -1, + t2, + 0, + 1, + -t2, + 0, + -1, + -t2, + 0, + 1 + ]; + const indices = [ + 0, + 11, + 5, + 0, + 5, + 1, + 0, + 1, + 7, + 0, + 7, + 10, + 0, + 10, + 11, + 1, + 5, + 9, + 5, + 11, + 4, + 11, + 10, + 2, + 10, + 7, + 6, + 7, + 1, + 8, + 3, + 9, + 4, + 3, + 4, + 2, + 3, + 2, + 6, + 3, + 6, + 8, + 3, + 8, + 9, + 4, + 9, + 5, + 2, + 4, + 11, + 6, + 2, + 10, + 8, + 6, + 7, + 9, + 8, + 1 + ]; + super(vertices, indices, radius, detail); + this.type = "IcosahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new IcosahedronGeometry(data.radius, data.detail); + } +} +class OctahedronGeometry extends PolyhedronGeometry { + static { + __name(this, "OctahedronGeometry"); + } + constructor(radius = 1, detail = 0) { + const vertices = [ + 1, + 0, + 0, + -1, + 0, + 0, + 0, + 1, + 0, + 0, + -1, + 0, + 0, + 0, + 1, + 0, + 0, + -1 + ]; + const indices = [ + 0, + 2, + 4, + 0, + 4, + 3, + 0, + 3, + 5, + 0, + 5, + 2, + 1, + 2, + 5, + 1, + 5, + 3, + 1, + 3, + 4, + 1, + 4, + 2 + ]; + super(vertices, indices, radius, detail); + this.type = "OctahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new OctahedronGeometry(data.radius, data.detail); + } +} +class RingGeometry extends BufferGeometry { + static { + __name(this, "RingGeometry"); + } + constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "RingGeometry"; + this.parameters = { + innerRadius, + outerRadius, + thetaSegments, + phiSegments, + thetaStart, + thetaLength + }; + thetaSegments = Math.max(3, thetaSegments); + phiSegments = Math.max(1, phiSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let radius = innerRadius; + const radiusStep = (outerRadius - innerRadius) / phiSegments; + const vertex2 = new Vector3(); + const uv = new Vector2(); + for (let j = 0; j <= phiSegments; j++) { + for (let i = 0; i <= thetaSegments; i++) { + const segment = thetaStart + i / thetaSegments * thetaLength; + vertex2.x = radius * Math.cos(segment); + vertex2.y = radius * Math.sin(segment); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, 0, 1); + uv.x = (vertex2.x / outerRadius + 1) / 2; + uv.y = (vertex2.y / outerRadius + 1) / 2; + uvs.push(uv.x, uv.y); + } + radius += radiusStep; + } + for (let j = 0; j < phiSegments; j++) { + const thetaSegmentLevel = j * (thetaSegments + 1); + for (let i = 0; i < thetaSegments; i++) { + const segment = i + thetaSegmentLevel; + const a = segment; + const b = segment + thetaSegments + 1; + const c = segment + thetaSegments + 2; + const d = segment + 1; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new RingGeometry(data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength); + } +} +class ShapeGeometry extends BufferGeometry { + static { + __name(this, "ShapeGeometry"); + } + constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), curveSegments = 12) { + super(); + this.type = "ShapeGeometry"; + this.parameters = { + shapes, + curveSegments + }; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let groupStart = 0; + let groupCount = 0; + if (Array.isArray(shapes) === false) { + addShape(shapes); + } else { + for (let i = 0; i < shapes.length; i++) { + addShape(shapes[i]); + this.addGroup(groupStart, groupCount, i); + groupStart += groupCount; + groupCount = 0; + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function addShape(shape) { + const indexOffset = vertices.length / 3; + const points = shape.extractPoints(curveSegments); + let shapeVertices = points.shape; + const shapeHoles = points.holes; + if (ShapeUtils.isClockWise(shapeVertices) === false) { + shapeVertices = shapeVertices.reverse(); + } + for (let i = 0, l = shapeHoles.length; i < l; i++) { + const shapeHole = shapeHoles[i]; + if (ShapeUtils.isClockWise(shapeHole) === true) { + shapeHoles[i] = shapeHole.reverse(); + } + } + const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); + for (let i = 0, l = shapeHoles.length; i < l; i++) { + const shapeHole = shapeHoles[i]; + shapeVertices = shapeVertices.concat(shapeHole); + } + for (let i = 0, l = shapeVertices.length; i < l; i++) { + const vertex2 = shapeVertices[i]; + vertices.push(vertex2.x, vertex2.y, 0); + normals.push(0, 0, 1); + uvs.push(vertex2.x, vertex2.y); + } + for (let i = 0, l = faces.length; i < l; i++) { + const face = faces[i]; + const a = face[0] + indexOffset; + const b = face[1] + indexOffset; + const c = face[2] + indexOffset; + indices.push(a, b, c); + groupCount += 3; + } + } + __name(addShape, "addShape"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + const shapes = this.parameters.shapes; + return toJSON(shapes, data); + } + static fromJSON(data, shapes) { + const geometryShapes = []; + for (let j = 0, jl = data.shapes.length; j < jl; j++) { + const shape = shapes[data.shapes[j]]; + geometryShapes.push(shape); + } + return new ShapeGeometry(geometryShapes, data.curveSegments); + } +} +function toJSON(shapes, data) { + data.shapes = []; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + data.shapes.push(shape.uuid); + } + } else { + data.shapes.push(shapes.uuid); + } + return data; +} +__name(toJSON, "toJSON"); +class SphereGeometry extends BufferGeometry { + static { + __name(this, "SphereGeometry"); + } + constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) { + super(); + this.type = "SphereGeometry"; + this.parameters = { + radius, + widthSegments, + heightSegments, + phiStart, + phiLength, + thetaStart, + thetaLength + }; + widthSegments = Math.max(3, Math.floor(widthSegments)); + heightSegments = Math.max(2, Math.floor(heightSegments)); + const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); + let index = 0; + const grid = []; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + for (let iy = 0; iy <= heightSegments; iy++) { + const verticesRow = []; + const v = iy / heightSegments; + let uOffset = 0; + if (iy === 0 && thetaStart === 0) { + uOffset = 0.5 / widthSegments; + } else if (iy === heightSegments && thetaEnd === Math.PI) { + uOffset = -0.5 / widthSegments; + } + for (let ix = 0; ix <= widthSegments; ix++) { + const u = ix / widthSegments; + vertex2.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); + vertex2.y = radius * Math.cos(thetaStart + v * thetaLength); + vertex2.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.copy(vertex2).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u + uOffset, 1 - v); + verticesRow.push(index++); + } + grid.push(verticesRow); + } + for (let iy = 0; iy < heightSegments; iy++) { + for (let ix = 0; ix < widthSegments; ix++) { + const a = grid[iy][ix + 1]; + const b = grid[iy][ix]; + const c = grid[iy + 1][ix]; + const d = grid[iy + 1][ix + 1]; + if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); + if (iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new SphereGeometry(data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength); + } +} +class TetrahedronGeometry extends PolyhedronGeometry { + static { + __name(this, "TetrahedronGeometry"); + } + constructor(radius = 1, detail = 0) { + const vertices = [ + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + -1 + ]; + const indices = [ + 2, + 1, + 0, + 0, + 3, + 2, + 1, + 3, + 0, + 2, + 3, + 1 + ]; + super(vertices, indices, radius, detail); + this.type = "TetrahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new TetrahedronGeometry(data.radius, data.detail); + } +} +class TorusGeometry extends BufferGeometry { + static { + __name(this, "TorusGeometry"); + } + constructor(radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2) { + super(); + this.type = "TorusGeometry"; + this.parameters = { + radius, + tube, + radialSegments, + tubularSegments, + arc + }; + radialSegments = Math.floor(radialSegments); + tubularSegments = Math.floor(tubularSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const center = new Vector3(); + const vertex2 = new Vector3(); + const normal = new Vector3(); + for (let j = 0; j <= radialSegments; j++) { + for (let i = 0; i <= tubularSegments; i++) { + const u = i / tubularSegments * arc; + const v = j / radialSegments * Math.PI * 2; + vertex2.x = (radius + tube * Math.cos(v)) * Math.cos(u); + vertex2.y = (radius + tube * Math.cos(v)) * Math.sin(u); + vertex2.z = tube * Math.sin(v); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + center.x = radius * Math.cos(u); + center.y = radius * Math.sin(u); + normal.subVectors(vertex2, center).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(i / tubularSegments); + uvs.push(j / radialSegments); + } + } + for (let j = 1; j <= radialSegments; j++) { + for (let i = 1; i <= tubularSegments; i++) { + const a = (tubularSegments + 1) * j + i - 1; + const b = (tubularSegments + 1) * (j - 1) + i - 1; + const c = (tubularSegments + 1) * (j - 1) + i; + const d = (tubularSegments + 1) * j + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new TorusGeometry(data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc); + } +} +class TorusKnotGeometry extends BufferGeometry { + static { + __name(this, "TorusKnotGeometry"); + } + constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3) { + super(); + this.type = "TorusKnotGeometry"; + this.parameters = { + radius, + tube, + tubularSegments, + radialSegments, + p, + q + }; + tubularSegments = Math.floor(tubularSegments); + radialSegments = Math.floor(radialSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const P1 = new Vector3(); + const P2 = new Vector3(); + const B = new Vector3(); + const T = new Vector3(); + const N = new Vector3(); + for (let i = 0; i <= tubularSegments; ++i) { + const u = i / tubularSegments * p * Math.PI * 2; + calculatePositionOnCurve(u, p, q, radius, P1); + calculatePositionOnCurve(u + 0.01, p, q, radius, P2); + T.subVectors(P2, P1); + N.addVectors(P2, P1); + B.crossVectors(T, N); + N.crossVectors(B, T); + B.normalize(); + N.normalize(); + for (let j = 0; j <= radialSegments; ++j) { + const v = j / radialSegments * Math.PI * 2; + const cx = -tube * Math.cos(v); + const cy = tube * Math.sin(v); + vertex2.x = P1.x + (cx * N.x + cy * B.x); + vertex2.y = P1.y + (cx * N.y + cy * B.y); + vertex2.z = P1.z + (cx * N.z + cy * B.z); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.subVectors(vertex2, P1).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(i / tubularSegments); + uvs.push(j / radialSegments); + } + } + for (let j = 1; j <= tubularSegments; j++) { + for (let i = 1; i <= radialSegments; i++) { + const a = (radialSegments + 1) * (j - 1) + (i - 1); + const b = (radialSegments + 1) * j + (i - 1); + const c = (radialSegments + 1) * j + i; + const d = (radialSegments + 1) * (j - 1) + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function calculatePositionOnCurve(u, p2, q2, radius2, position) { + const cu = Math.cos(u); + const su = Math.sin(u); + const quOverP = q2 / p2 * u; + const cs = Math.cos(quOverP); + position.x = radius2 * (2 + cs) * 0.5 * cu; + position.y = radius2 * (2 + cs) * su * 0.5; + position.z = radius2 * Math.sin(quOverP) * 0.5; + } + __name(calculatePositionOnCurve, "calculatePositionOnCurve"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new TorusKnotGeometry(data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q); + } +} +class TubeGeometry extends BufferGeometry { + static { + __name(this, "TubeGeometry"); + } + constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) { + super(); + this.type = "TubeGeometry"; + this.parameters = { + path, + tubularSegments, + radius, + radialSegments, + closed + }; + const frames = path.computeFrenetFrames(tubularSegments, closed); + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const uv = new Vector2(); + let P = new Vector3(); + const vertices = []; + const normals = []; + const uvs = []; + const indices = []; + generateBufferData(); + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generateBufferData() { + for (let i = 0; i < tubularSegments; i++) { + generateSegment(i); + } + generateSegment(closed === false ? tubularSegments : 0); + generateUVs(); + generateIndices(); + } + __name(generateBufferData, "generateBufferData"); + function generateSegment(i) { + P = path.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = cos * N.x + sin * B.x; + normal.y = cos * N.y + sin * B.y; + normal.z = cos * N.z + sin * B.z; + normal.normalize(); + normals.push(normal.x, normal.y, normal.z); + vertex2.x = P.x + radius * normal.x; + vertex2.y = P.y + radius * normal.y; + vertex2.z = P.z + radius * normal.z; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + } + } + __name(generateSegment, "generateSegment"); + function generateIndices() { + for (let j = 1; j <= tubularSegments; j++) { + for (let i = 1; i <= radialSegments; i++) { + const a = (radialSegments + 1) * (j - 1) + (i - 1); + const b = (radialSegments + 1) * j + (i - 1); + const c = (radialSegments + 1) * j + i; + const d = (radialSegments + 1) * (j - 1) + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + } + __name(generateIndices, "generateIndices"); + function generateUVs() { + for (let i = 0; i <= tubularSegments; i++) { + for (let j = 0; j <= radialSegments; j++) { + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + uvs.push(uv.x, uv.y); + } + } + } + __name(generateUVs, "generateUVs"); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + data.path = this.parameters.path.toJSON(); + return data; + } + static fromJSON(data) { + return new TubeGeometry( + new Curves[data.path.type]().fromJSON(data.path), + data.tubularSegments, + data.radius, + data.radialSegments, + data.closed + ); + } +} +class WireframeGeometry extends BufferGeometry { + static { + __name(this, "WireframeGeometry"); + } + constructor(geometry = null) { + super(); + this.type = "WireframeGeometry"; + this.parameters = { + geometry + }; + if (geometry !== null) { + const vertices = []; + const edges = /* @__PURE__ */ new Set(); + const start = new Vector3(); + const end = new Vector3(); + if (geometry.index !== null) { + const position = geometry.attributes.position; + const indices = geometry.index; + let groups = geometry.groups; + if (groups.length === 0) { + groups = [{ start: 0, count: indices.count, materialIndex: 0 }]; + } + for (let o = 0, ol = groups.length; o < ol; ++o) { + const group = groups[o]; + const groupStart = group.start; + const groupCount = group.count; + for (let i = groupStart, l = groupStart + groupCount; i < l; i += 3) { + for (let j = 0; j < 3; j++) { + const index1 = indices.getX(i + j); + const index2 = indices.getX(i + (j + 1) % 3); + start.fromBufferAttribute(position, index1); + end.fromBufferAttribute(position, index2); + if (isUniqueEdge(start, end, edges) === true) { + vertices.push(start.x, start.y, start.z); + vertices.push(end.x, end.y, end.z); + } + } + } + } + } else { + const position = geometry.attributes.position; + for (let i = 0, l = position.count / 3; i < l; i++) { + for (let j = 0; j < 3; j++) { + const index1 = 3 * i + j; + const index2 = 3 * i + (j + 1) % 3; + start.fromBufferAttribute(position, index1); + end.fromBufferAttribute(position, index2); + if (isUniqueEdge(start, end, edges) === true) { + vertices.push(start.x, start.y, start.z); + vertices.push(end.x, end.y, end.z); + } + } + } + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +} +function isUniqueEdge(start, end, edges) { + const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; + const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; + if (edges.has(hash1) === true || edges.has(hash2) === true) { + return false; + } else { + edges.add(hash1); + edges.add(hash2); + return true; + } +} +__name(isUniqueEdge, "isUniqueEdge"); +var Geometries = /* @__PURE__ */ Object.freeze({ + __proto__: null, + BoxGeometry, + CapsuleGeometry, + CircleGeometry, + ConeGeometry, + CylinderGeometry, + DodecahedronGeometry, + EdgesGeometry, + ExtrudeGeometry, + IcosahedronGeometry, + LatheGeometry, + OctahedronGeometry, + PlaneGeometry, + PolyhedronGeometry, + RingGeometry, + ShapeGeometry, + SphereGeometry, + TetrahedronGeometry, + TorusGeometry, + TorusKnotGeometry, + TubeGeometry, + WireframeGeometry +}); +class ShadowMaterial extends Material { + static { + __name(this, "ShadowMaterial"); + } + static get type() { + return "ShadowMaterial"; + } + constructor(parameters) { + super(); + this.isShadowMaterial = true; + this.color = new Color(0); + this.transparent = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.fog = source.fog; + return this; + } +} +class RawShaderMaterial extends ShaderMaterial { + static { + __name(this, "RawShaderMaterial"); + } + static get type() { + return "RawShaderMaterial"; + } + constructor(parameters) { + super(parameters); + this.isRawShaderMaterial = true; + } +} +class MeshStandardMaterial extends Material { + static { + __name(this, "MeshStandardMaterial"); + } + static get type() { + return "MeshStandardMaterial"; + } + constructor(parameters) { + super(); + this.isMeshStandardMaterial = true; + this.defines = { "STANDARD": "" }; + this.color = new Color(16777215); + this.roughness = 1; + this.metalness = 0; + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.roughnessMap = null; + this.metalnessMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.envMapIntensity = 1; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.defines = { "STANDARD": "" }; + this.color.copy(source.color); + this.roughness = source.roughness; + this.metalness = source.metalness; + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.roughnessMap = source.roughnessMap; + this.metalnessMap = source.metalnessMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.envMapIntensity = source.envMapIntensity; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +} +class MeshPhysicalMaterial extends MeshStandardMaterial { + static { + __name(this, "MeshPhysicalMaterial"); + } + static get type() { + return "MeshPhysicalMaterial"; + } + constructor(parameters) { + super(); + this.isMeshPhysicalMaterial = true; + this.defines = { + "STANDARD": "", + "PHYSICAL": "" + }; + this.anisotropyRotation = 0; + this.anisotropyMap = null; + this.clearcoatMap = null; + this.clearcoatRoughness = 0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2(1, 1); + this.clearcoatNormalMap = null; + this.ior = 1.5; + Object.defineProperty(this, "reflectivity", { + get: /* @__PURE__ */ __name(function() { + return clamp(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1); + }, "get"), + set: /* @__PURE__ */ __name(function(reflectivity) { + this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity); + }, "set") + }); + this.iridescenceMap = null; + this.iridescenceIOR = 1.3; + this.iridescenceThicknessRange = [100, 400]; + this.iridescenceThicknessMap = null; + this.sheenColor = new Color(0); + this.sheenColorMap = null; + this.sheenRoughness = 1; + this.sheenRoughnessMap = null; + this.transmissionMap = null; + this.thickness = 0; + this.thicknessMap = null; + this.attenuationDistance = Infinity; + this.attenuationColor = new Color(1, 1, 1); + this.specularIntensity = 1; + this.specularIntensityMap = null; + this.specularColor = new Color(1, 1, 1); + this.specularColorMap = null; + this._anisotropy = 0; + this._clearcoat = 0; + this._dispersion = 0; + this._iridescence = 0; + this._sheen = 0; + this._transmission = 0; + this.setValues(parameters); + } + get anisotropy() { + return this._anisotropy; + } + set anisotropy(value) { + if (this._anisotropy > 0 !== value > 0) { + this.version++; + } + this._anisotropy = value; + } + get clearcoat() { + return this._clearcoat; + } + set clearcoat(value) { + if (this._clearcoat > 0 !== value > 0) { + this.version++; + } + this._clearcoat = value; + } + get iridescence() { + return this._iridescence; + } + set iridescence(value) { + if (this._iridescence > 0 !== value > 0) { + this.version++; + } + this._iridescence = value; + } + get dispersion() { + return this._dispersion; + } + set dispersion(value) { + if (this._dispersion > 0 !== value > 0) { + this.version++; + } + this._dispersion = value; + } + get sheen() { + return this._sheen; + } + set sheen(value) { + if (this._sheen > 0 !== value > 0) { + this.version++; + } + this._sheen = value; + } + get transmission() { + return this._transmission; + } + set transmission(value) { + if (this._transmission > 0 !== value > 0) { + this.version++; + } + this._transmission = value; + } + copy(source) { + super.copy(source); + this.defines = { + "STANDARD": "", + "PHYSICAL": "" + }; + this.anisotropy = source.anisotropy; + this.anisotropyRotation = source.anisotropyRotation; + this.anisotropyMap = source.anisotropyMap; + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy(source.clearcoatNormalScale); + this.dispersion = source.dispersion; + this.ior = source.ior; + this.iridescence = source.iridescence; + this.iridescenceMap = source.iridescenceMap; + this.iridescenceIOR = source.iridescenceIOR; + this.iridescenceThicknessRange = [...source.iridescenceThicknessRange]; + this.iridescenceThicknessMap = source.iridescenceThicknessMap; + this.sheen = source.sheen; + this.sheenColor.copy(source.sheenColor); + this.sheenColorMap = source.sheenColorMap; + this.sheenRoughness = source.sheenRoughness; + this.sheenRoughnessMap = source.sheenRoughnessMap; + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + this.thickness = source.thickness; + this.thicknessMap = source.thicknessMap; + this.attenuationDistance = source.attenuationDistance; + this.attenuationColor.copy(source.attenuationColor); + this.specularIntensity = source.specularIntensity; + this.specularIntensityMap = source.specularIntensityMap; + this.specularColor.copy(source.specularColor); + this.specularColorMap = source.specularColorMap; + return this; + } +} +class MeshPhongMaterial extends Material { + static { + __name(this, "MeshPhongMaterial"); + } + static get type() { + return "MeshPhongMaterial"; + } + constructor(parameters) { + super(); + this.isMeshPhongMaterial = true; + this.color = new Color(16777215); + this.specular = new Color(1118481); + this.shininess = 30; + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.specular.copy(source.specular); + this.shininess = source.shininess; + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +} +class MeshToonMaterial extends Material { + static { + __name(this, "MeshToonMaterial"); + } + static get type() { + return "MeshToonMaterial"; + } + constructor(parameters) { + super(); + this.isMeshToonMaterial = true; + this.defines = { "TOON": "" }; + this.color = new Color(16777215); + this.map = null; + this.gradientMap = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.alphaMap = null; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.gradientMap = source.gradientMap; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.alphaMap = source.alphaMap; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.fog = source.fog; + return this; + } +} +class MeshNormalMaterial extends Material { + static { + __name(this, "MeshNormalMaterial"); + } + static get type() { + return "MeshNormalMaterial"; + } + constructor(parameters) { + super(); + this.isMeshNormalMaterial = true; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.flatShading = false; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.flatShading = source.flatShading; + return this; + } +} +class MeshLambertMaterial extends Material { + static { + __name(this, "MeshLambertMaterial"); + } + static get type() { + return "MeshLambertMaterial"; + } + constructor(parameters) { + super(); + this.isMeshLambertMaterial = true; + this.color = new Color(16777215); + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +} +class MeshMatcapMaterial extends Material { + static { + __name(this, "MeshMatcapMaterial"); + } + static get type() { + return "MeshMatcapMaterial"; + } + constructor(parameters) { + super(); + this.isMeshMatcapMaterial = true; + this.defines = { "MATCAP": "" }; + this.color = new Color(16777215); + this.matcap = null; + this.map = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.alphaMap = null; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.defines = { "MATCAP": "" }; + this.color.copy(source.color); + this.matcap = source.matcap; + this.map = source.map; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.alphaMap = source.alphaMap; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +} +class LineDashedMaterial extends LineBasicMaterial { + static { + __name(this, "LineDashedMaterial"); + } + static get type() { + return "LineDashedMaterial"; + } + constructor(parameters) { + super(); + this.isLineDashedMaterial = true; + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + return this; + } +} +function convertArray(array, type, forceClone) { + if (!array || // let 'undefined' and 'null' pass + !forceClone && array.constructor === type) return array; + if (typeof type.BYTES_PER_ELEMENT === "number") { + return new type(array); + } + return Array.prototype.slice.call(array); +} +__name(convertArray, "convertArray"); +function isTypedArray(object) { + return ArrayBuffer.isView(object) && !(object instanceof DataView); +} +__name(isTypedArray, "isTypedArray"); +function getKeyframeOrder(times) { + function compareTime(i, j) { + return times[i] - times[j]; + } + __name(compareTime, "compareTime"); + const n = times.length; + const result = new Array(n); + for (let i = 0; i !== n; ++i) result[i] = i; + result.sort(compareTime); + return result; +} +__name(getKeyframeOrder, "getKeyframeOrder"); +function sortedArray(values, stride, order) { + const nValues = values.length; + const result = new values.constructor(nValues); + for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) { + const srcOffset = order[i] * stride; + for (let j = 0; j !== stride; ++j) { + result[dstOffset++] = values[srcOffset + j]; + } + } + return result; +} +__name(sortedArray, "sortedArray"); +function flattenJSON(jsonKeys, times, values, valuePropertyName) { + let i = 1, key = jsonKeys[0]; + while (key !== void 0 && key[valuePropertyName] === void 0) { + key = jsonKeys[i++]; + } + if (key === void 0) return; + let value = key[valuePropertyName]; + if (value === void 0) return; + if (Array.isArray(value)) { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + values.push.apply(values, value); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } else if (value.toArray !== void 0) { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + value.toArray(values, values.length); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } else { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + values.push(value); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } +} +__name(flattenJSON, "flattenJSON"); +function subclip(sourceClip, name, startFrame, endFrame, fps = 30) { + const clip = sourceClip.clone(); + clip.name = name; + const tracks = []; + for (let i = 0; i < clip.tracks.length; ++i) { + const track = clip.tracks[i]; + const valueSize = track.getValueSize(); + const times = []; + const values = []; + for (let j = 0; j < track.times.length; ++j) { + const frame = track.times[j] * fps; + if (frame < startFrame || frame >= endFrame) continue; + times.push(track.times[j]); + for (let k = 0; k < valueSize; ++k) { + values.push(track.values[j * valueSize + k]); + } + } + if (times.length === 0) continue; + track.times = convertArray(times, track.times.constructor); + track.values = convertArray(values, track.values.constructor); + tracks.push(track); + } + clip.tracks = tracks; + let minStartTime = Infinity; + for (let i = 0; i < clip.tracks.length; ++i) { + if (minStartTime > clip.tracks[i].times[0]) { + minStartTime = clip.tracks[i].times[0]; + } + } + for (let i = 0; i < clip.tracks.length; ++i) { + clip.tracks[i].shift(-1 * minStartTime); + } + clip.resetDuration(); + return clip; +} +__name(subclip, "subclip"); +function makeClipAdditive(targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30) { + if (fps <= 0) fps = 30; + const numTracks = referenceClip.tracks.length; + const referenceTime = referenceFrame / fps; + for (let i = 0; i < numTracks; ++i) { + const referenceTrack = referenceClip.tracks[i]; + const referenceTrackType = referenceTrack.ValueTypeName; + if (referenceTrackType === "bool" || referenceTrackType === "string") continue; + const targetTrack = targetClip.tracks.find(function(track) { + return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; + }); + if (targetTrack === void 0) continue; + let referenceOffset = 0; + const referenceValueSize = referenceTrack.getValueSize(); + if (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + referenceOffset = referenceValueSize / 3; + } + let targetOffset = 0; + const targetValueSize = targetTrack.getValueSize(); + if (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + targetOffset = targetValueSize / 3; + } + const lastIndex = referenceTrack.times.length - 1; + let referenceValue; + if (referenceTime <= referenceTrack.times[0]) { + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + referenceValue = referenceTrack.values.slice(startIndex, endIndex); + } else if (referenceTime >= referenceTrack.times[lastIndex]) { + const startIndex = lastIndex * referenceValueSize + referenceOffset; + const endIndex = startIndex + referenceValueSize - referenceOffset; + referenceValue = referenceTrack.values.slice(startIndex, endIndex); + } else { + const interpolant = referenceTrack.createInterpolant(); + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + interpolant.evaluate(referenceTime); + referenceValue = interpolant.resultBuffer.slice(startIndex, endIndex); + } + if (referenceTrackType === "quaternion") { + const referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate(); + referenceQuat.toArray(referenceValue); + } + const numTimes = targetTrack.times.length; + for (let j = 0; j < numTimes; ++j) { + const valueStart = j * targetValueSize + targetOffset; + if (referenceTrackType === "quaternion") { + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + } else { + const valueEnd = targetValueSize - targetOffset * 2; + for (let k = 0; k < valueEnd; ++k) { + targetTrack.values[valueStart + k] -= referenceValue[k]; + } + } + } + } + targetClip.blendMode = AdditiveAnimationBlendMode; + return targetClip; +} +__name(makeClipAdditive, "makeClipAdditive"); +const AnimationUtils = { + convertArray, + isTypedArray, + getKeyframeOrder, + sortedArray, + flattenJSON, + subclip, + makeClipAdditive +}; +class Interpolant { + static { + __name(this, "Interpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + this.resultBuffer = resultBuffer !== void 0 ? resultBuffer : new sampleValues.constructor(sampleSize); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + this.settings = null; + this.DefaultSettings_ = {}; + } + evaluate(t2) { + const pp = this.parameterPositions; + let i1 = this._cachedIndex, t1 = pp[i1], t0 = pp[i1 - 1]; + validate_interval: { + seek: { + let right; + linear_scan: { + forward_scan: if (!(t2 < t1)) { + for (let giveUpAt = i1 + 2; ; ) { + if (t1 === void 0) { + if (t2 < t0) break forward_scan; + i1 = pp.length; + this._cachedIndex = i1; + return this.copySampleValue_(i1 - 1); + } + if (i1 === giveUpAt) break; + t0 = t1; + t1 = pp[++i1]; + if (t2 < t1) { + break seek; + } + } + right = pp.length; + break linear_scan; + } + if (!(t2 >= t0)) { + const t1global = pp[1]; + if (t2 < t1global) { + i1 = 2; + t0 = t1global; + } + for (let giveUpAt = i1 - 2; ; ) { + if (t0 === void 0) { + this._cachedIndex = 0; + return this.copySampleValue_(0); + } + if (i1 === giveUpAt) break; + t1 = t0; + t0 = pp[--i1 - 1]; + if (t2 >= t0) { + break seek; + } + } + right = i1; + i1 = 0; + break linear_scan; + } + break validate_interval; + } + while (i1 < right) { + const mid = i1 + right >>> 1; + if (t2 < pp[mid]) { + right = mid; + } else { + i1 = mid + 1; + } + } + t1 = pp[i1]; + t0 = pp[i1 - 1]; + if (t0 === void 0) { + this._cachedIndex = 0; + return this.copySampleValue_(0); + } + if (t1 === void 0) { + i1 = pp.length; + this._cachedIndex = i1; + return this.copySampleValue_(i1 - 1); + } + } + this._cachedIndex = i1; + this.intervalChanged_(i1, t0, t1); + } + return this.interpolate_(i1, t0, t2, t1); + } + getSettings_() { + return this.settings || this.DefaultSettings_; + } + copySampleValue_(index) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride; + for (let i = 0; i !== stride; ++i) { + result[i] = values[offset + i]; + } + return result; + } + // Template methods for derived classes: + interpolate_() { + throw new Error("call to abstract method"); + } + intervalChanged_() { + } +} +class CubicInterpolant extends Interpolant { + static { + __name(this, "CubicInterpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + this._weightPrev = -0; + this._offsetPrev = -0; + this._weightNext = -0; + this._offsetNext = -0; + this.DefaultSettings_ = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + } + intervalChanged_(i1, t0, t1) { + const pp = this.parameterPositions; + let iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[iPrev], tNext = pp[iNext]; + if (tPrev === void 0) { + switch (this.getSettings_().endingStart) { + case ZeroSlopeEnding: + iPrev = i1; + tPrev = 2 * t0 - t1; + break; + case WrapAroundEnding: + iPrev = pp.length - 2; + tPrev = t0 + pp[iPrev] - pp[iPrev + 1]; + break; + default: + iPrev = i1; + tPrev = t1; + } + } + if (tNext === void 0) { + switch (this.getSettings_().endingEnd) { + case ZeroSlopeEnding: + iNext = i1; + tNext = 2 * t1 - t0; + break; + case WrapAroundEnding: + iNext = 1; + tNext = t1 + pp[1] - pp[0]; + break; + default: + iNext = i1 - 1; + tNext = t0; + } + } + const halfDt = (t1 - t0) * 0.5, stride = this.valueSize; + this._weightPrev = halfDt / (t0 - tPrev); + this._weightNext = halfDt / (tNext - t1); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + } + interpolate_(i1, t0, t2, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = (t2 - t0) / (t1 - t0), pp = p * p, ppp = pp * p; + const sP = -wP * ppp + 2 * wP * pp - wP * p; + const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1; + const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p; + const sN = wN * ppp - wN * pp; + for (let i = 0; i !== stride; ++i) { + result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i]; + } + return result; + } +} +class LinearInterpolant extends Interpolant { + static { + __name(this, "LinearInterpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1, t0, t2, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset1 = i1 * stride, offset0 = offset1 - stride, weight1 = (t2 - t0) / (t1 - t0), weight0 = 1 - weight1; + for (let i = 0; i !== stride; ++i) { + result[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1; + } + return result; + } +} +class DiscreteInterpolant extends Interpolant { + static { + __name(this, "DiscreteInterpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1) { + return this.copySampleValue_(i1 - 1); + } +} +class KeyframeTrack { + static { + __name(this, "KeyframeTrack"); + } + constructor(name, times, values, interpolation) { + if (name === void 0) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (times === void 0 || times.length === 0) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + name); + this.name = name; + this.times = convertArray(times, this.TimeBufferType); + this.values = convertArray(values, this.ValueBufferType); + this.setInterpolation(interpolation || this.DefaultInterpolation); + } + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + static toJSON(track) { + const trackType = track.constructor; + let json; + if (trackType.toJSON !== this.toJSON) { + json = trackType.toJSON(track); + } else { + json = { + "name": track.name, + "times": convertArray(track.times, Array), + "values": convertArray(track.values, Array) + }; + const interpolation = track.getInterpolation(); + if (interpolation !== track.DefaultInterpolation) { + json.interpolation = interpolation; + } + } + json.type = track.ValueTypeName; + return json; + } + InterpolantFactoryMethodDiscrete(result) { + return new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result); + } + InterpolantFactoryMethodLinear(result) { + return new LinearInterpolant(this.times, this.values, this.getValueSize(), result); + } + InterpolantFactoryMethodSmooth(result) { + return new CubicInterpolant(this.times, this.values, this.getValueSize(), result); + } + setInterpolation(interpolation) { + let factoryMethod; + switch (interpolation) { + case InterpolateDiscrete: + factoryMethod = this.InterpolantFactoryMethodDiscrete; + break; + case InterpolateLinear: + factoryMethod = this.InterpolantFactoryMethodLinear; + break; + case InterpolateSmooth: + factoryMethod = this.InterpolantFactoryMethodSmooth; + break; + } + if (factoryMethod === void 0) { + const message = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (this.createInterpolant === void 0) { + if (interpolation !== this.DefaultInterpolation) { + this.setInterpolation(this.DefaultInterpolation); + } else { + throw new Error(message); + } + } + console.warn("THREE.KeyframeTrack:", message); + return this; + } + this.createInterpolant = factoryMethod; + return this; + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return InterpolateDiscrete; + case this.InterpolantFactoryMethodLinear: + return InterpolateLinear; + case this.InterpolantFactoryMethodSmooth: + return InterpolateSmooth; + } + } + getValueSize() { + return this.values.length / this.times.length; + } + // move all keyframes either forwards or backwards in time + shift(timeOffset) { + if (timeOffset !== 0) { + const times = this.times; + for (let i = 0, n = times.length; i !== n; ++i) { + times[i] += timeOffset; + } + } + return this; + } + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale(timeScale) { + if (timeScale !== 1) { + const times = this.times; + for (let i = 0, n = times.length; i !== n; ++i) { + times[i] *= timeScale; + } + } + return this; + } + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim(startTime, endTime) { + const times = this.times, nKeys = times.length; + let from = 0, to = nKeys - 1; + while (from !== nKeys && times[from] < startTime) { + ++from; + } + while (to !== -1 && times[to] > endTime) { + --to; + } + ++to; + if (from !== 0 || to !== nKeys) { + if (from >= to) { + to = Math.max(to, 1); + from = to - 1; + } + const stride = this.getValueSize(); + this.times = times.slice(from, to); + this.values = this.values.slice(from * stride, to * stride); + } + return this; + } + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate() { + let valid = true; + const valueSize = this.getValueSize(); + if (valueSize - Math.floor(valueSize) !== 0) { + console.error("THREE.KeyframeTrack: Invalid value size in track.", this); + valid = false; + } + const times = this.times, values = this.values, nKeys = times.length; + if (nKeys === 0) { + console.error("THREE.KeyframeTrack: Track is empty.", this); + valid = false; + } + let prevTime = null; + for (let i = 0; i !== nKeys; i++) { + const currTime = times[i]; + if (typeof currTime === "number" && isNaN(currTime)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, i, currTime); + valid = false; + break; + } + if (prevTime !== null && prevTime > currTime) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, i, currTime, prevTime); + valid = false; + break; + } + prevTime = currTime; + } + if (values !== void 0) { + if (isTypedArray(values)) { + for (let i = 0, n = values.length; i !== n; ++i) { + const value = values[i]; + if (isNaN(value)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, i, value); + valid = false; + break; + } + } + } + } + return valid; + } + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize() { + const times = this.times.slice(), values = this.values.slice(), stride = this.getValueSize(), smoothInterpolation = this.getInterpolation() === InterpolateSmooth, lastIndex = times.length - 1; + let writeIndex = 1; + for (let i = 1; i < lastIndex; ++i) { + let keep = false; + const time = times[i]; + const timeNext = times[i + 1]; + if (time !== timeNext && (i !== 1 || time !== times[0])) { + if (!smoothInterpolation) { + const offset = i * stride, offsetP = offset - stride, offsetN = offset + stride; + for (let j = 0; j !== stride; ++j) { + const value = values[offset + j]; + if (value !== values[offsetP + j] || value !== values[offsetN + j]) { + keep = true; + break; + } + } + } else { + keep = true; + } + } + if (keep) { + if (i !== writeIndex) { + times[writeIndex] = times[i]; + const readOffset = i * stride, writeOffset = writeIndex * stride; + for (let j = 0; j !== stride; ++j) { + values[writeOffset + j] = values[readOffset + j]; + } + } + ++writeIndex; + } + } + if (lastIndex > 0) { + times[writeIndex] = times[lastIndex]; + for (let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++j) { + values[writeOffset + j] = values[readOffset + j]; + } + ++writeIndex; + } + if (writeIndex !== times.length) { + this.times = times.slice(0, writeIndex); + this.values = values.slice(0, writeIndex * stride); + } else { + this.times = times; + this.values = values; + } + return this; + } + clone() { + const times = this.times.slice(); + const values = this.values.slice(); + const TypedKeyframeTrack = this.constructor; + const track = new TypedKeyframeTrack(this.name, times, values); + track.createInterpolant = this.createInterpolant; + return track; + } +} +KeyframeTrack.prototype.TimeBufferType = Float32Array; +KeyframeTrack.prototype.ValueBufferType = Float32Array; +KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; +class BooleanKeyframeTrack extends KeyframeTrack { + static { + __name(this, "BooleanKeyframeTrack"); + } + // No interpolation parameter because only InterpolateDiscrete is valid. + constructor(name, times, values) { + super(name, times, values); + } +} +BooleanKeyframeTrack.prototype.ValueTypeName = "bool"; +BooleanKeyframeTrack.prototype.ValueBufferType = Array; +BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +class ColorKeyframeTrack extends KeyframeTrack { + static { + __name(this, "ColorKeyframeTrack"); + } +} +ColorKeyframeTrack.prototype.ValueTypeName = "color"; +class NumberKeyframeTrack extends KeyframeTrack { + static { + __name(this, "NumberKeyframeTrack"); + } +} +NumberKeyframeTrack.prototype.ValueTypeName = "number"; +class QuaternionLinearInterpolant extends Interpolant { + static { + __name(this, "QuaternionLinearInterpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1, t0, t2, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, alpha = (t2 - t0) / (t1 - t0); + let offset = i1 * stride; + for (let end = offset + stride; offset !== end; offset += 4) { + Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha); + } + return result; + } +} +class QuaternionKeyframeTrack extends KeyframeTrack { + static { + __name(this, "QuaternionKeyframeTrack"); + } + InterpolantFactoryMethodLinear(result) { + return new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result); + } +} +QuaternionKeyframeTrack.prototype.ValueTypeName = "quaternion"; +QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +class StringKeyframeTrack extends KeyframeTrack { + static { + __name(this, "StringKeyframeTrack"); + } + // No interpolation parameter because only InterpolateDiscrete is valid. + constructor(name, times, values) { + super(name, times, values); + } +} +StringKeyframeTrack.prototype.ValueTypeName = "string"; +StringKeyframeTrack.prototype.ValueBufferType = Array; +StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; +StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +class VectorKeyframeTrack extends KeyframeTrack { + static { + __name(this, "VectorKeyframeTrack"); + } +} +VectorKeyframeTrack.prototype.ValueTypeName = "vector"; +class AnimationClip { + static { + __name(this, "AnimationClip"); + } + constructor(name = "", duration = -1, tracks = [], blendMode = NormalAnimationBlendMode) { + this.name = name; + this.tracks = tracks; + this.duration = duration; + this.blendMode = blendMode; + this.uuid = generateUUID(); + if (this.duration < 0) { + this.resetDuration(); + } + } + static parse(json) { + const tracks = [], jsonTracks = json.tracks, frameTime = 1 / (json.fps || 1); + for (let i = 0, n = jsonTracks.length; i !== n; ++i) { + tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime)); + } + const clip = new this(json.name, json.duration, tracks, json.blendMode); + clip.uuid = json.uuid; + return clip; + } + static toJSON(clip) { + const tracks = [], clipTracks = clip.tracks; + const json = { + "name": clip.name, + "duration": clip.duration, + "tracks": tracks, + "uuid": clip.uuid, + "blendMode": clip.blendMode + }; + for (let i = 0, n = clipTracks.length; i !== n; ++i) { + tracks.push(KeyframeTrack.toJSON(clipTracks[i])); + } + return json; + } + static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) { + const numMorphTargets = morphTargetSequence.length; + const tracks = []; + for (let i = 0; i < numMorphTargets; i++) { + let times = []; + let values = []; + times.push( + (i + numMorphTargets - 1) % numMorphTargets, + i, + (i + 1) % numMorphTargets + ); + values.push(0, 1, 0); + const order = getKeyframeOrder(times); + times = sortedArray(times, 1, order); + values = sortedArray(values, 1, order); + if (!noLoop && times[0] === 0) { + times.push(numMorphTargets); + values.push(values[0]); + } + tracks.push( + new NumberKeyframeTrack( + ".morphTargetInfluences[" + morphTargetSequence[i].name + "]", + times, + values + ).scale(1 / fps) + ); + } + return new this(name, -1, tracks); + } + static findByName(objectOrClipArray, name) { + let clipArray = objectOrClipArray; + if (!Array.isArray(objectOrClipArray)) { + const o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + } + for (let i = 0; i < clipArray.length; i++) { + if (clipArray[i].name === name) { + return clipArray[i]; + } + } + return null; + } + static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) { + const animationToMorphTargets = {}; + const pattern = /^([\w-]*?)([\d]+)$/; + for (let i = 0, il = morphTargets.length; i < il; i++) { + const morphTarget = morphTargets[i]; + const parts = morphTarget.name.match(pattern); + if (parts && parts.length > 1) { + const name = parts[1]; + let animationMorphTargets = animationToMorphTargets[name]; + if (!animationMorphTargets) { + animationToMorphTargets[name] = animationMorphTargets = []; + } + animationMorphTargets.push(morphTarget); + } + } + const clips = []; + for (const name in animationToMorphTargets) { + clips.push(this.CreateFromMorphTargetSequence(name, animationToMorphTargets[name], fps, noLoop)); + } + return clips; + } + // parse the animation.hierarchy format + static parseAnimation(animation, bones) { + if (!animation) { + console.error("THREE.AnimationClip: No animation in JSONLoader data."); + return null; + } + const addNonemptyTrack = /* @__PURE__ */ __name(function(trackType, trackName, animationKeys, propertyName, destTracks) { + if (animationKeys.length !== 0) { + const times = []; + const values = []; + flattenJSON(animationKeys, times, values, propertyName); + if (times.length !== 0) { + destTracks.push(new trackType(trackName, times, values)); + } + } + }, "addNonemptyTrack"); + const tracks = []; + const clipName = animation.name || "default"; + const fps = animation.fps || 30; + const blendMode = animation.blendMode; + let duration = animation.length || -1; + const hierarchyTracks = animation.hierarchy || []; + for (let h = 0; h < hierarchyTracks.length; h++) { + const animationKeys = hierarchyTracks[h].keys; + if (!animationKeys || animationKeys.length === 0) continue; + if (animationKeys[0].morphTargets) { + const morphTargetNames = {}; + let k; + for (k = 0; k < animationKeys.length; k++) { + if (animationKeys[k].morphTargets) { + for (let m = 0; m < animationKeys[k].morphTargets.length; m++) { + morphTargetNames[animationKeys[k].morphTargets[m]] = -1; + } + } + } + for (const morphTargetName in morphTargetNames) { + const times = []; + const values = []; + for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) { + const animationKey = animationKeys[k]; + times.push(animationKey.time); + values.push(animationKey.morphTarget === morphTargetName ? 1 : 0); + } + tracks.push(new NumberKeyframeTrack(".morphTargetInfluence[" + morphTargetName + "]", times, values)); + } + duration = morphTargetNames.length * fps; + } else { + const boneName = ".bones[" + bones[h].name + "]"; + addNonemptyTrack( + VectorKeyframeTrack, + boneName + ".position", + animationKeys, + "pos", + tracks + ); + addNonemptyTrack( + QuaternionKeyframeTrack, + boneName + ".quaternion", + animationKeys, + "rot", + tracks + ); + addNonemptyTrack( + VectorKeyframeTrack, + boneName + ".scale", + animationKeys, + "scl", + tracks + ); + } + } + if (tracks.length === 0) { + return null; + } + const clip = new this(clipName, duration, tracks, blendMode); + return clip; + } + resetDuration() { + const tracks = this.tracks; + let duration = 0; + for (let i = 0, n = tracks.length; i !== n; ++i) { + const track = this.tracks[i]; + duration = Math.max(duration, track.times[track.times.length - 1]); + } + this.duration = duration; + return this; + } + trim() { + for (let i = 0; i < this.tracks.length; i++) { + this.tracks[i].trim(0, this.duration); + } + return this; + } + validate() { + let valid = true; + for (let i = 0; i < this.tracks.length; i++) { + valid = valid && this.tracks[i].validate(); + } + return valid; + } + optimize() { + for (let i = 0; i < this.tracks.length; i++) { + this.tracks[i].optimize(); + } + return this; + } + clone() { + const tracks = []; + for (let i = 0; i < this.tracks.length; i++) { + tracks.push(this.tracks[i].clone()); + } + return new this.constructor(this.name, this.duration, tracks, this.blendMode); + } + toJSON() { + return this.constructor.toJSON(this); + } +} +function getTrackTypeForValueTypeName(typeName) { + switch (typeName.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return NumberKeyframeTrack; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return VectorKeyframeTrack; + case "color": + return ColorKeyframeTrack; + case "quaternion": + return QuaternionKeyframeTrack; + case "bool": + case "boolean": + return BooleanKeyframeTrack; + case "string": + return StringKeyframeTrack; + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + typeName); +} +__name(getTrackTypeForValueTypeName, "getTrackTypeForValueTypeName"); +function parseKeyframeTrack(json) { + if (json.type === void 0) { + throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + } + const trackType = getTrackTypeForValueTypeName(json.type); + if (json.times === void 0) { + const times = [], values = []; + flattenJSON(json.keys, times, values, "value"); + json.times = times; + json.values = values; + } + if (trackType.parse !== void 0) { + return trackType.parse(json); + } else { + return new trackType(json.name, json.times, json.values, json.interpolation); + } +} +__name(parseKeyframeTrack, "parseKeyframeTrack"); +const Cache = { + enabled: false, + files: {}, + add: /* @__PURE__ */ __name(function(key, file2) { + if (this.enabled === false) return; + this.files[key] = file2; + }, "add"), + get: /* @__PURE__ */ __name(function(key) { + if (this.enabled === false) return; + return this.files[key]; + }, "get"), + remove: /* @__PURE__ */ __name(function(key) { + delete this.files[key]; + }, "remove"), + clear: /* @__PURE__ */ __name(function() { + this.files = {}; + }, "clear") +}; +class LoadingManager { + static { + __name(this, "LoadingManager"); + } + constructor(onLoad, onProgress, onError) { + const scope = this; + let isLoading = false; + let itemsLoaded = 0; + let itemsTotal = 0; + let urlModifier = void 0; + const handlers = []; + this.onStart = void 0; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + this.itemStart = function(url) { + itemsTotal++; + if (isLoading === false) { + if (scope.onStart !== void 0) { + scope.onStart(url, itemsLoaded, itemsTotal); + } + } + isLoading = true; + }; + this.itemEnd = function(url) { + itemsLoaded++; + if (scope.onProgress !== void 0) { + scope.onProgress(url, itemsLoaded, itemsTotal); + } + if (itemsLoaded === itemsTotal) { + isLoading = false; + if (scope.onLoad !== void 0) { + scope.onLoad(); + } + } + }; + this.itemError = function(url) { + if (scope.onError !== void 0) { + scope.onError(url); + } + }; + this.resolveURL = function(url) { + if (urlModifier) { + return urlModifier(url); + } + return url; + }; + this.setURLModifier = function(transform) { + urlModifier = transform; + return this; + }; + this.addHandler = function(regex, loader) { + handlers.push(regex, loader); + return this; + }; + this.removeHandler = function(regex) { + const index = handlers.indexOf(regex); + if (index !== -1) { + handlers.splice(index, 2); + } + return this; + }; + this.getHandler = function(file2) { + for (let i = 0, l = handlers.length; i < l; i += 2) { + const regex = handlers[i]; + const loader = handlers[i + 1]; + if (regex.global) regex.lastIndex = 0; + if (regex.test(file2)) { + return loader; + } + } + return null; + }; + } +} +const DefaultLoadingManager = /* @__PURE__ */ new LoadingManager(); +class Loader { + static { + __name(this, "Loader"); + } + constructor(manager) { + this.manager = manager !== void 0 ? manager : DefaultLoadingManager; + this.crossOrigin = "anonymous"; + this.withCredentials = false; + this.path = ""; + this.resourcePath = ""; + this.requestHeader = {}; + } + load() { + } + loadAsync(url, onProgress) { + const scope = this; + return new Promise(function(resolve, reject) { + scope.load(url, resolve, onProgress, reject); + }); + } + parse() { + } + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + setWithCredentials(value) { + this.withCredentials = value; + return this; + } + setPath(path) { + this.path = path; + return this; + } + setResourcePath(resourcePath) { + this.resourcePath = resourcePath; + return this; + } + setRequestHeader(requestHeader) { + this.requestHeader = requestHeader; + return this; + } +} +Loader.DEFAULT_MATERIAL_NAME = "__DEFAULT"; +const loading = {}; +class HttpError extends Error { + static { + __name(this, "HttpError"); + } + constructor(message, response) { + super(message); + this.response = response; + } +} +class FileLoader extends Loader { + static { + __name(this, "FileLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + if (url === void 0) url = ""; + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const cached = Cache.get(url); + if (cached !== void 0) { + this.manager.itemStart(url); + setTimeout(() => { + if (onLoad) onLoad(cached); + this.manager.itemEnd(url); + }, 0); + return cached; + } + if (loading[url] !== void 0) { + loading[url].push({ + onLoad, + onProgress, + onError + }); + return; + } + loading[url] = []; + loading[url].push({ + onLoad, + onProgress, + onError + }); + const req = new Request(url, { + headers: new Headers(this.requestHeader), + credentials: this.withCredentials ? "include" : "same-origin" + // An abort controller could be added within a future PR + }); + const mimeType = this.mimeType; + const responseType = this.responseType; + fetch(req).then((response) => { + if (response.status === 200 || response.status === 0) { + if (response.status === 0) { + console.warn("THREE.FileLoader: HTTP Status 0 received."); + } + if (typeof ReadableStream === "undefined" || response.body === void 0 || response.body.getReader === void 0) { + return response; + } + const callbacks = loading[url]; + const reader = response.body.getReader(); + const contentLength = response.headers.get("X-File-Size") || response.headers.get("Content-Length"); + const total = contentLength ? parseInt(contentLength) : 0; + const lengthComputable = total !== 0; + let loaded = 0; + const stream = new ReadableStream({ + start(controller) { + readData(); + function readData() { + reader.read().then(({ done, value }) => { + if (done) { + controller.close(); + } else { + loaded += value.byteLength; + const event = new ProgressEvent("progress", { lengthComputable, loaded, total }); + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onProgress) callback.onProgress(event); + } + controller.enqueue(value); + readData(); + } + }, (e) => { + controller.error(e); + }); + } + __name(readData, "readData"); + } + }); + return new Response(stream); + } else { + throw new HttpError(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response); + } + }).then((response) => { + switch (responseType) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "document": + return response.text().then((text) => { + const parser = new DOMParser(); + return parser.parseFromString(text, mimeType); + }); + case "json": + return response.json(); + default: + if (mimeType === void 0) { + return response.text(); + } else { + const re = /charset="?([^;"\s]*)"?/i; + const exec = re.exec(mimeType); + const label = exec && exec[1] ? exec[1].toLowerCase() : void 0; + const decoder = new TextDecoder(label); + return response.arrayBuffer().then((ab) => decoder.decode(ab)); + } + } + }).then((data) => { + Cache.add(url, data); + const callbacks = loading[url]; + delete loading[url]; + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onLoad) callback.onLoad(data); + } + }).catch((err2) => { + const callbacks = loading[url]; + if (callbacks === void 0) { + this.manager.itemError(url); + throw err2; + } + delete loading[url]; + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onError) callback.onError(err2); + } + this.manager.itemError(url); + }).finally(() => { + this.manager.itemEnd(url); + }); + this.manager.itemStart(url); + } + setResponseType(value) { + this.responseType = value; + return this; + } + setMimeType(value) { + this.mimeType = value; + return this; + } +} +class AnimationLoader extends Loader { + static { + __name(this, "AnimationLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const animations = []; + for (let i = 0; i < json.length; i++) { + const clip = AnimationClip.parse(json[i]); + animations.push(clip); + } + return animations; + } +} +class CompressedTextureLoader extends Loader { + static { + __name(this, "CompressedTextureLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const images = []; + const texture = new CompressedTexture(); + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(scope.withCredentials); + let loaded = 0; + function loadTexture(i) { + loader.load(url[i], function(buffer) { + const texDatas = scope.parse(buffer, true); + images[i] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + loaded += 1; + if (loaded === 6) { + if (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter; + texture.image = images; + texture.format = texDatas.format; + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, onProgress, onError); + } + __name(loadTexture, "loadTexture"); + if (Array.isArray(url)) { + for (let i = 0, il = url.length; i < il; ++i) { + loadTexture(i); + } + } else { + loader.load(url, function(buffer) { + const texDatas = scope.parse(buffer, true); + if (texDatas.isCubemap) { + const faces = texDatas.mipmaps.length / texDatas.mipmapCount; + for (let f = 0; f < faces; f++) { + images[f] = { mipmaps: [] }; + for (let i = 0; i < texDatas.mipmapCount; i++) { + images[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + i]); + images[f].format = texDatas.format; + images[f].width = texDatas.width; + images[f].height = texDatas.height; + } + } + texture.image = images; + } else { + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + } + if (texDatas.mipmapCount === 1) { + texture.minFilter = LinearFilter; + } + texture.format = texDatas.format; + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + }, onProgress, onError); + } + return texture; + } +} +class ImageLoader extends Loader { + static { + __name(this, "ImageLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const scope = this; + const cached = Cache.get(url); + if (cached !== void 0) { + scope.manager.itemStart(url); + setTimeout(function() { + if (onLoad) onLoad(cached); + scope.manager.itemEnd(url); + }, 0); + return cached; + } + const image = createElementNS("img"); + function onImageLoad() { + removeEventListeners(); + Cache.add(url, this); + if (onLoad) onLoad(this); + scope.manager.itemEnd(url); + } + __name(onImageLoad, "onImageLoad"); + function onImageError(event) { + removeEventListeners(); + if (onError) onError(event); + scope.manager.itemError(url); + scope.manager.itemEnd(url); + } + __name(onImageError, "onImageError"); + function removeEventListeners() { + image.removeEventListener("load", onImageLoad, false); + image.removeEventListener("error", onImageError, false); + } + __name(removeEventListeners, "removeEventListeners"); + image.addEventListener("load", onImageLoad, false); + image.addEventListener("error", onImageError, false); + if (url.slice(0, 5) !== "data:") { + if (this.crossOrigin !== void 0) image.crossOrigin = this.crossOrigin; + } + scope.manager.itemStart(url); + image.src = url; + return image; + } +} +class CubeTextureLoader extends Loader { + static { + __name(this, "CubeTextureLoader"); + } + constructor(manager) { + super(manager); + } + load(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + texture.colorSpace = SRGBColorSpace; + const loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + loader.setPath(this.path); + let loaded = 0; + function loadTexture(i) { + loader.load(urls[i], function(image) { + texture.images[i] = image; + loaded++; + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, void 0, onError); + } + __name(loadTexture, "loadTexture"); + for (let i = 0; i < urls.length; ++i) { + loadTexture(i); + } + return texture; + } +} +class DataTextureLoader extends Loader { + static { + __name(this, "DataTextureLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const texture = new DataTexture(); + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setPath(this.path); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + let texData; + try { + texData = scope.parse(buffer); + } catch (error) { + if (onError !== void 0) { + onError(error); + } else { + console.error(error); + return; + } + } + if (texData.image !== void 0) { + texture.image = texData.image; + } else if (texData.data !== void 0) { + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + } + texture.wrapS = texData.wrapS !== void 0 ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== void 0 ? texData.wrapT : ClampToEdgeWrapping; + texture.magFilter = texData.magFilter !== void 0 ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== void 0 ? texData.minFilter : LinearFilter; + texture.anisotropy = texData.anisotropy !== void 0 ? texData.anisotropy : 1; + if (texData.colorSpace !== void 0) { + texture.colorSpace = texData.colorSpace; + } + if (texData.flipY !== void 0) { + texture.flipY = texData.flipY; + } + if (texData.format !== void 0) { + texture.format = texData.format; + } + if (texData.type !== void 0) { + texture.type = texData.type; + } + if (texData.mipmaps !== void 0) { + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; + } + if (texData.mipmapCount === 1) { + texture.minFilter = LinearFilter; + } + if (texData.generateMipmaps !== void 0) { + texture.generateMipmaps = texData.generateMipmaps; + } + texture.needsUpdate = true; + if (onLoad) onLoad(texture, texData); + }, onProgress, onError); + return texture; + } +} +class TextureLoader extends Loader { + static { + __name(this, "TextureLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const texture = new Texture(); + const loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + loader.setPath(this.path); + loader.load(url, function(image) { + texture.image = image; + texture.needsUpdate = true; + if (onLoad !== void 0) { + onLoad(texture); + } + }, onProgress, onError); + return texture; + } +} +class Light extends Object3D { + static { + __name(this, "Light"); + } + constructor(color, intensity = 1) { + super(); + this.isLight = true; + this.type = "Light"; + this.color = new Color(color); + this.intensity = intensity; + } + dispose() { + } + copy(source, recursive) { + super.copy(source, recursive); + this.color.copy(source.color); + this.intensity = source.intensity; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + if (this.groundColor !== void 0) data.object.groundColor = this.groundColor.getHex(); + if (this.distance !== void 0) data.object.distance = this.distance; + if (this.angle !== void 0) data.object.angle = this.angle; + if (this.decay !== void 0) data.object.decay = this.decay; + if (this.penumbra !== void 0) data.object.penumbra = this.penumbra; + if (this.shadow !== void 0) data.object.shadow = this.shadow.toJSON(); + if (this.target !== void 0) data.object.target = this.target.uuid; + return data; + } +} +class HemisphereLight extends Light { + static { + __name(this, "HemisphereLight"); + } + constructor(skyColor, groundColor, intensity) { + super(skyColor, intensity); + this.isHemisphereLight = true; + this.type = "HemisphereLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.groundColor = new Color(groundColor); + } + copy(source, recursive) { + super.copy(source, recursive); + this.groundColor.copy(source.groundColor); + return this; + } +} +const _projScreenMatrix$1 = /* @__PURE__ */ new Matrix4(); +const _lightPositionWorld$1 = /* @__PURE__ */ new Vector3(); +const _lookTarget$1 = /* @__PURE__ */ new Vector3(); +class LightShadow { + static { + __name(this, "LightShadow"); + } + constructor(camera) { + this.camera = camera; + this.intensity = 1; + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + this.blurSamples = 8; + this.mapSize = new Vector2(512, 512); + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + this.autoUpdate = true; + this.needsUpdate = false; + this._frustum = new Frustum(); + this._frameExtents = new Vector2(1, 1); + this._viewportCount = 1; + this._viewports = [ + new Vector4(0, 0, 1, 1) + ]; + } + getViewportCount() { + return this._viewportCount; + } + getFrustum() { + return this._frustum; + } + updateMatrices(light) { + const shadowCamera = this.camera; + const shadowMatrix = this.matrix; + _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld); + shadowCamera.position.copy(_lightPositionWorld$1); + _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld); + shadowCamera.lookAt(_lookTarget$1); + shadowCamera.updateMatrixWorld(); + _projScreenMatrix$1.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse); + this._frustum.setFromProjectionMatrix(_projScreenMatrix$1); + shadowMatrix.set( + 0.5, + 0, + 0, + 0.5, + 0, + 0.5, + 0, + 0.5, + 0, + 0, + 0.5, + 0.5, + 0, + 0, + 0, + 1 + ); + shadowMatrix.multiply(_projScreenMatrix$1); + } + getViewport(viewportIndex) { + return this._viewports[viewportIndex]; + } + getFrameExtents() { + return this._frameExtents; + } + dispose() { + if (this.map) { + this.map.dispose(); + } + if (this.mapPass) { + this.mapPass.dispose(); + } + } + copy(source) { + this.camera = source.camera.clone(); + this.intensity = source.intensity; + this.bias = source.bias; + this.radius = source.radius; + this.mapSize.copy(source.mapSize); + return this; + } + clone() { + return new this.constructor().copy(this); + } + toJSON() { + const object = {}; + if (this.intensity !== 1) object.intensity = this.intensity; + if (this.bias !== 0) object.bias = this.bias; + if (this.normalBias !== 0) object.normalBias = this.normalBias; + if (this.radius !== 1) object.radius = this.radius; + if (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray(); + object.camera = this.camera.toJSON(false).object; + delete object.camera.matrix; + return object; + } +} +class SpotLightShadow extends LightShadow { + static { + __name(this, "SpotLightShadow"); + } + constructor() { + super(new PerspectiveCamera(50, 1, 0.5, 500)); + this.isSpotLightShadow = true; + this.focus = 1; + } + updateMatrices(light) { + const camera = this.camera; + const fov2 = RAD2DEG * 2 * light.angle * this.focus; + const aspect2 = this.mapSize.width / this.mapSize.height; + const far = light.distance || camera.far; + if (fov2 !== camera.fov || aspect2 !== camera.aspect || far !== camera.far) { + camera.fov = fov2; + camera.aspect = aspect2; + camera.far = far; + camera.updateProjectionMatrix(); + } + super.updateMatrices(light); + } + copy(source) { + super.copy(source); + this.focus = source.focus; + return this; + } +} +class SpotLight extends Light { + static { + __name(this, "SpotLight"); + } + constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2) { + super(color, intensity); + this.isSpotLight = true; + this.type = "SpotLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.target = new Object3D(); + this.distance = distance; + this.angle = angle; + this.penumbra = penumbra; + this.decay = decay; + this.map = null; + this.shadow = new SpotLightShadow(); + } + get power() { + return this.intensity * Math.PI; + } + set power(power) { + this.intensity = power / Math.PI; + } + dispose() { + this.shadow.dispose(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + this.target = source.target.clone(); + this.shadow = source.shadow.clone(); + return this; + } +} +const _projScreenMatrix = /* @__PURE__ */ new Matrix4(); +const _lightPositionWorld = /* @__PURE__ */ new Vector3(); +const _lookTarget = /* @__PURE__ */ new Vector3(); +class PointLightShadow extends LightShadow { + static { + __name(this, "PointLightShadow"); + } + constructor() { + super(new PerspectiveCamera(90, 1, 0.5, 500)); + this.isPointLightShadow = true; + this._frameExtents = new Vector2(4, 2); + this._viewportCount = 6; + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + // positive X + new Vector4(2, 1, 1, 1), + // negative X + new Vector4(0, 1, 1, 1), + // positive Z + new Vector4(3, 1, 1, 1), + // negative Z + new Vector4(1, 1, 1, 1), + // positive Y + new Vector4(3, 0, 1, 1), + // negative Y + new Vector4(1, 0, 1, 1) + ]; + this._cubeDirections = [ + new Vector3(1, 0, 0), + new Vector3(-1, 0, 0), + new Vector3(0, 0, 1), + new Vector3(0, 0, -1), + new Vector3(0, 1, 0), + new Vector3(0, -1, 0) + ]; + this._cubeUps = [ + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 0, 1), + new Vector3(0, 0, -1) + ]; + } + updateMatrices(light, viewportIndex = 0) { + const camera = this.camera; + const shadowMatrix = this.matrix; + const far = light.distance || camera.far; + if (far !== camera.far) { + camera.far = far; + camera.updateProjectionMatrix(); + } + _lightPositionWorld.setFromMatrixPosition(light.matrixWorld); + camera.position.copy(_lightPositionWorld); + _lookTarget.copy(camera.position); + _lookTarget.add(this._cubeDirections[viewportIndex]); + camera.up.copy(this._cubeUps[viewportIndex]); + camera.lookAt(_lookTarget); + camera.updateMatrixWorld(); + shadowMatrix.makeTranslation(-_lightPositionWorld.x, -_lightPositionWorld.y, -_lightPositionWorld.z); + _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); + this._frustum.setFromProjectionMatrix(_projScreenMatrix); + } +} +class PointLight extends Light { + static { + __name(this, "PointLight"); + } + constructor(color, intensity, distance = 0, decay = 2) { + super(color, intensity); + this.isPointLight = true; + this.type = "PointLight"; + this.distance = distance; + this.decay = decay; + this.shadow = new PointLightShadow(); + } + get power() { + return this.intensity * 4 * Math.PI; + } + set power(power) { + this.intensity = power / (4 * Math.PI); + } + dispose() { + this.shadow.dispose(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.distance = source.distance; + this.decay = source.decay; + this.shadow = source.shadow.clone(); + return this; + } +} +class DirectionalLightShadow extends LightShadow { + static { + __name(this, "DirectionalLightShadow"); + } + constructor() { + super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500)); + this.isDirectionalLightShadow = true; + } +} +class DirectionalLight extends Light { + static { + __name(this, "DirectionalLight"); + } + constructor(color, intensity) { + super(color, intensity); + this.isDirectionalLight = true; + this.type = "DirectionalLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.target = new Object3D(); + this.shadow = new DirectionalLightShadow(); + } + dispose() { + this.shadow.dispose(); + } + copy(source) { + super.copy(source); + this.target = source.target.clone(); + this.shadow = source.shadow.clone(); + return this; + } +} +class AmbientLight extends Light { + static { + __name(this, "AmbientLight"); + } + constructor(color, intensity) { + super(color, intensity); + this.isAmbientLight = true; + this.type = "AmbientLight"; + } +} +class RectAreaLight extends Light { + static { + __name(this, "RectAreaLight"); + } + constructor(color, intensity, width = 10, height = 10) { + super(color, intensity); + this.isRectAreaLight = true; + this.type = "RectAreaLight"; + this.width = width; + this.height = height; + } + get power() { + return this.intensity * this.width * this.height * Math.PI; + } + set power(power) { + this.intensity = power / (this.width * this.height * Math.PI); + } + copy(source) { + super.copy(source); + this.width = source.width; + this.height = source.height; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.width = this.width; + data.object.height = this.height; + return data; + } +} +class SphericalHarmonics3 { + static { + __name(this, "SphericalHarmonics3"); + } + constructor() { + this.isSphericalHarmonics3 = true; + this.coefficients = []; + for (let i = 0; i < 9; i++) { + this.coefficients.push(new Vector3()); + } + } + set(coefficients) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].copy(coefficients[i]); + } + return this; + } + zero() { + for (let i = 0; i < 9; i++) { + this.coefficients[i].set(0, 0, 0); + } + return this; + } + // get the radiance in the direction of the normal + // target is a Vector3 + getAt(normal, target) { + const x = normal.x, y = normal.y, z = normal.z; + const coeff = this.coefficients; + target.copy(coeff[0]).multiplyScalar(0.282095); + target.addScaledVector(coeff[1], 0.488603 * y); + target.addScaledVector(coeff[2], 0.488603 * z); + target.addScaledVector(coeff[3], 0.488603 * x); + target.addScaledVector(coeff[4], 1.092548 * (x * y)); + target.addScaledVector(coeff[5], 1.092548 * (y * z)); + target.addScaledVector(coeff[6], 0.315392 * (3 * z * z - 1)); + target.addScaledVector(coeff[7], 1.092548 * (x * z)); + target.addScaledVector(coeff[8], 0.546274 * (x * x - y * y)); + return target; + } + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + getIrradianceAt(normal, target) { + const x = normal.x, y = normal.y, z = normal.z; + const coeff = this.coefficients; + target.copy(coeff[0]).multiplyScalar(0.886227); + target.addScaledVector(coeff[1], 2 * 0.511664 * y); + target.addScaledVector(coeff[2], 2 * 0.511664 * z); + target.addScaledVector(coeff[3], 2 * 0.511664 * x); + target.addScaledVector(coeff[4], 2 * 0.429043 * x * y); + target.addScaledVector(coeff[5], 2 * 0.429043 * y * z); + target.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); + target.addScaledVector(coeff[7], 2 * 0.429043 * x * z); + target.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); + return target; + } + add(sh) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].add(sh.coefficients[i]); + } + return this; + } + addScaledSH(sh, s) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].addScaledVector(sh.coefficients[i], s); + } + return this; + } + scale(s) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].multiplyScalar(s); + } + return this; + } + lerp(sh, alpha) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].lerp(sh.coefficients[i], alpha); + } + return this; + } + equals(sh) { + for (let i = 0; i < 9; i++) { + if (!this.coefficients[i].equals(sh.coefficients[i])) { + return false; + } + } + return true; + } + copy(sh) { + return this.set(sh.coefficients); + } + clone() { + return new this.constructor().copy(this); + } + fromArray(array, offset = 0) { + const coefficients = this.coefficients; + for (let i = 0; i < 9; i++) { + coefficients[i].fromArray(array, offset + i * 3); + } + return this; + } + toArray(array = [], offset = 0) { + const coefficients = this.coefficients; + for (let i = 0; i < 9; i++) { + coefficients[i].toArray(array, offset + i * 3); + } + return array; + } + // evaluate the basis functions + // shBasis is an Array[ 9 ] + static getBasisAt(normal, shBasis) { + const x = normal.x, y = normal.y, z = normal.z; + shBasis[0] = 0.282095; + shBasis[1] = 0.488603 * y; + shBasis[2] = 0.488603 * z; + shBasis[3] = 0.488603 * x; + shBasis[4] = 1.092548 * x * y; + shBasis[5] = 1.092548 * y * z; + shBasis[6] = 0.315392 * (3 * z * z - 1); + shBasis[7] = 1.092548 * x * z; + shBasis[8] = 0.546274 * (x * x - y * y); + } +} +class LightProbe extends Light { + static { + __name(this, "LightProbe"); + } + constructor(sh = new SphericalHarmonics3(), intensity = 1) { + super(void 0, intensity); + this.isLightProbe = true; + this.sh = sh; + } + copy(source) { + super.copy(source); + this.sh.copy(source.sh); + return this; + } + fromJSON(json) { + this.intensity = json.intensity; + this.sh.fromArray(json.sh); + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.sh = this.sh.toArray(); + return data; + } +} +class MaterialLoader extends Loader { + static { + __name(this, "MaterialLoader"); + } + constructor(manager) { + super(manager); + this.textures = {}; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const textures = this.textures; + function getTexture(name) { + if (textures[name] === void 0) { + console.warn("THREE.MaterialLoader: Undefined texture", name); + } + return textures[name]; + } + __name(getTexture, "getTexture"); + const material = this.createMaterialFromType(json.type); + if (json.uuid !== void 0) material.uuid = json.uuid; + if (json.name !== void 0) material.name = json.name; + if (json.color !== void 0 && material.color !== void 0) material.color.setHex(json.color); + if (json.roughness !== void 0) material.roughness = json.roughness; + if (json.metalness !== void 0) material.metalness = json.metalness; + if (json.sheen !== void 0) material.sheen = json.sheen; + if (json.sheenColor !== void 0) material.sheenColor = new Color().setHex(json.sheenColor); + if (json.sheenRoughness !== void 0) material.sheenRoughness = json.sheenRoughness; + if (json.emissive !== void 0 && material.emissive !== void 0) material.emissive.setHex(json.emissive); + if (json.specular !== void 0 && material.specular !== void 0) material.specular.setHex(json.specular); + if (json.specularIntensity !== void 0) material.specularIntensity = json.specularIntensity; + if (json.specularColor !== void 0 && material.specularColor !== void 0) material.specularColor.setHex(json.specularColor); + if (json.shininess !== void 0) material.shininess = json.shininess; + if (json.clearcoat !== void 0) material.clearcoat = json.clearcoat; + if (json.clearcoatRoughness !== void 0) material.clearcoatRoughness = json.clearcoatRoughness; + if (json.dispersion !== void 0) material.dispersion = json.dispersion; + if (json.iridescence !== void 0) material.iridescence = json.iridescence; + if (json.iridescenceIOR !== void 0) material.iridescenceIOR = json.iridescenceIOR; + if (json.iridescenceThicknessRange !== void 0) material.iridescenceThicknessRange = json.iridescenceThicknessRange; + if (json.transmission !== void 0) material.transmission = json.transmission; + if (json.thickness !== void 0) material.thickness = json.thickness; + if (json.attenuationDistance !== void 0) material.attenuationDistance = json.attenuationDistance; + if (json.attenuationColor !== void 0 && material.attenuationColor !== void 0) material.attenuationColor.setHex(json.attenuationColor); + if (json.anisotropy !== void 0) material.anisotropy = json.anisotropy; + if (json.anisotropyRotation !== void 0) material.anisotropyRotation = json.anisotropyRotation; + if (json.fog !== void 0) material.fog = json.fog; + if (json.flatShading !== void 0) material.flatShading = json.flatShading; + if (json.blending !== void 0) material.blending = json.blending; + if (json.combine !== void 0) material.combine = json.combine; + if (json.side !== void 0) material.side = json.side; + if (json.shadowSide !== void 0) material.shadowSide = json.shadowSide; + if (json.opacity !== void 0) material.opacity = json.opacity; + if (json.transparent !== void 0) material.transparent = json.transparent; + if (json.alphaTest !== void 0) material.alphaTest = json.alphaTest; + if (json.alphaHash !== void 0) material.alphaHash = json.alphaHash; + if (json.depthFunc !== void 0) material.depthFunc = json.depthFunc; + if (json.depthTest !== void 0) material.depthTest = json.depthTest; + if (json.depthWrite !== void 0) material.depthWrite = json.depthWrite; + if (json.colorWrite !== void 0) material.colorWrite = json.colorWrite; + if (json.blendSrc !== void 0) material.blendSrc = json.blendSrc; + if (json.blendDst !== void 0) material.blendDst = json.blendDst; + if (json.blendEquation !== void 0) material.blendEquation = json.blendEquation; + if (json.blendSrcAlpha !== void 0) material.blendSrcAlpha = json.blendSrcAlpha; + if (json.blendDstAlpha !== void 0) material.blendDstAlpha = json.blendDstAlpha; + if (json.blendEquationAlpha !== void 0) material.blendEquationAlpha = json.blendEquationAlpha; + if (json.blendColor !== void 0 && material.blendColor !== void 0) material.blendColor.setHex(json.blendColor); + if (json.blendAlpha !== void 0) material.blendAlpha = json.blendAlpha; + if (json.stencilWriteMask !== void 0) material.stencilWriteMask = json.stencilWriteMask; + if (json.stencilFunc !== void 0) material.stencilFunc = json.stencilFunc; + if (json.stencilRef !== void 0) material.stencilRef = json.stencilRef; + if (json.stencilFuncMask !== void 0) material.stencilFuncMask = json.stencilFuncMask; + if (json.stencilFail !== void 0) material.stencilFail = json.stencilFail; + if (json.stencilZFail !== void 0) material.stencilZFail = json.stencilZFail; + if (json.stencilZPass !== void 0) material.stencilZPass = json.stencilZPass; + if (json.stencilWrite !== void 0) material.stencilWrite = json.stencilWrite; + if (json.wireframe !== void 0) material.wireframe = json.wireframe; + if (json.wireframeLinewidth !== void 0) material.wireframeLinewidth = json.wireframeLinewidth; + if (json.wireframeLinecap !== void 0) material.wireframeLinecap = json.wireframeLinecap; + if (json.wireframeLinejoin !== void 0) material.wireframeLinejoin = json.wireframeLinejoin; + if (json.rotation !== void 0) material.rotation = json.rotation; + if (json.linewidth !== void 0) material.linewidth = json.linewidth; + if (json.dashSize !== void 0) material.dashSize = json.dashSize; + if (json.gapSize !== void 0) material.gapSize = json.gapSize; + if (json.scale !== void 0) material.scale = json.scale; + if (json.polygonOffset !== void 0) material.polygonOffset = json.polygonOffset; + if (json.polygonOffsetFactor !== void 0) material.polygonOffsetFactor = json.polygonOffsetFactor; + if (json.polygonOffsetUnits !== void 0) material.polygonOffsetUnits = json.polygonOffsetUnits; + if (json.dithering !== void 0) material.dithering = json.dithering; + if (json.alphaToCoverage !== void 0) material.alphaToCoverage = json.alphaToCoverage; + if (json.premultipliedAlpha !== void 0) material.premultipliedAlpha = json.premultipliedAlpha; + if (json.forceSinglePass !== void 0) material.forceSinglePass = json.forceSinglePass; + if (json.visible !== void 0) material.visible = json.visible; + if (json.toneMapped !== void 0) material.toneMapped = json.toneMapped; + if (json.userData !== void 0) material.userData = json.userData; + if (json.vertexColors !== void 0) { + if (typeof json.vertexColors === "number") { + material.vertexColors = json.vertexColors > 0 ? true : false; + } else { + material.vertexColors = json.vertexColors; + } + } + if (json.uniforms !== void 0) { + for (const name in json.uniforms) { + const uniform = json.uniforms[name]; + material.uniforms[name] = {}; + switch (uniform.type) { + case "t": + material.uniforms[name].value = getTexture(uniform.value); + break; + case "c": + material.uniforms[name].value = new Color().setHex(uniform.value); + break; + case "v2": + material.uniforms[name].value = new Vector2().fromArray(uniform.value); + break; + case "v3": + material.uniforms[name].value = new Vector3().fromArray(uniform.value); + break; + case "v4": + material.uniforms[name].value = new Vector4().fromArray(uniform.value); + break; + case "m3": + material.uniforms[name].value = new Matrix3().fromArray(uniform.value); + break; + case "m4": + material.uniforms[name].value = new Matrix4().fromArray(uniform.value); + break; + default: + material.uniforms[name].value = uniform.value; + } + } + } + if (json.defines !== void 0) material.defines = json.defines; + if (json.vertexShader !== void 0) material.vertexShader = json.vertexShader; + if (json.fragmentShader !== void 0) material.fragmentShader = json.fragmentShader; + if (json.glslVersion !== void 0) material.glslVersion = json.glslVersion; + if (json.extensions !== void 0) { + for (const key in json.extensions) { + material.extensions[key] = json.extensions[key]; + } + } + if (json.lights !== void 0) material.lights = json.lights; + if (json.clipping !== void 0) material.clipping = json.clipping; + if (json.size !== void 0) material.size = json.size; + if (json.sizeAttenuation !== void 0) material.sizeAttenuation = json.sizeAttenuation; + if (json.map !== void 0) material.map = getTexture(json.map); + if (json.matcap !== void 0) material.matcap = getTexture(json.matcap); + if (json.alphaMap !== void 0) material.alphaMap = getTexture(json.alphaMap); + if (json.bumpMap !== void 0) material.bumpMap = getTexture(json.bumpMap); + if (json.bumpScale !== void 0) material.bumpScale = json.bumpScale; + if (json.normalMap !== void 0) material.normalMap = getTexture(json.normalMap); + if (json.normalMapType !== void 0) material.normalMapType = json.normalMapType; + if (json.normalScale !== void 0) { + let normalScale = json.normalScale; + if (Array.isArray(normalScale) === false) { + normalScale = [normalScale, normalScale]; + } + material.normalScale = new Vector2().fromArray(normalScale); + } + if (json.displacementMap !== void 0) material.displacementMap = getTexture(json.displacementMap); + if (json.displacementScale !== void 0) material.displacementScale = json.displacementScale; + if (json.displacementBias !== void 0) material.displacementBias = json.displacementBias; + if (json.roughnessMap !== void 0) material.roughnessMap = getTexture(json.roughnessMap); + if (json.metalnessMap !== void 0) material.metalnessMap = getTexture(json.metalnessMap); + if (json.emissiveMap !== void 0) material.emissiveMap = getTexture(json.emissiveMap); + if (json.emissiveIntensity !== void 0) material.emissiveIntensity = json.emissiveIntensity; + if (json.specularMap !== void 0) material.specularMap = getTexture(json.specularMap); + if (json.specularIntensityMap !== void 0) material.specularIntensityMap = getTexture(json.specularIntensityMap); + if (json.specularColorMap !== void 0) material.specularColorMap = getTexture(json.specularColorMap); + if (json.envMap !== void 0) material.envMap = getTexture(json.envMap); + if (json.envMapRotation !== void 0) material.envMapRotation.fromArray(json.envMapRotation); + if (json.envMapIntensity !== void 0) material.envMapIntensity = json.envMapIntensity; + if (json.reflectivity !== void 0) material.reflectivity = json.reflectivity; + if (json.refractionRatio !== void 0) material.refractionRatio = json.refractionRatio; + if (json.lightMap !== void 0) material.lightMap = getTexture(json.lightMap); + if (json.lightMapIntensity !== void 0) material.lightMapIntensity = json.lightMapIntensity; + if (json.aoMap !== void 0) material.aoMap = getTexture(json.aoMap); + if (json.aoMapIntensity !== void 0) material.aoMapIntensity = json.aoMapIntensity; + if (json.gradientMap !== void 0) material.gradientMap = getTexture(json.gradientMap); + if (json.clearcoatMap !== void 0) material.clearcoatMap = getTexture(json.clearcoatMap); + if (json.clearcoatRoughnessMap !== void 0) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap); + if (json.clearcoatNormalMap !== void 0) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap); + if (json.clearcoatNormalScale !== void 0) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale); + if (json.iridescenceMap !== void 0) material.iridescenceMap = getTexture(json.iridescenceMap); + if (json.iridescenceThicknessMap !== void 0) material.iridescenceThicknessMap = getTexture(json.iridescenceThicknessMap); + if (json.transmissionMap !== void 0) material.transmissionMap = getTexture(json.transmissionMap); + if (json.thicknessMap !== void 0) material.thicknessMap = getTexture(json.thicknessMap); + if (json.anisotropyMap !== void 0) material.anisotropyMap = getTexture(json.anisotropyMap); + if (json.sheenColorMap !== void 0) material.sheenColorMap = getTexture(json.sheenColorMap); + if (json.sheenRoughnessMap !== void 0) material.sheenRoughnessMap = getTexture(json.sheenRoughnessMap); + return material; + } + setTextures(value) { + this.textures = value; + return this; + } + createMaterialFromType(type) { + return MaterialLoader.createMaterialFromType(type); + } + static createMaterialFromType(type) { + const materialLib = { + ShadowMaterial, + SpriteMaterial, + RawShaderMaterial, + ShaderMaterial, + PointsMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MeshPhongMaterial, + MeshToonMaterial, + MeshNormalMaterial, + MeshLambertMaterial, + MeshDepthMaterial, + MeshDistanceMaterial, + MeshBasicMaterial, + MeshMatcapMaterial, + LineDashedMaterial, + LineBasicMaterial, + Material + }; + return new materialLib[type](); + } +} +class LoaderUtils { + static { + __name(this, "LoaderUtils"); + } + static decodeText(array) { + console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."); + if (typeof TextDecoder !== "undefined") { + return new TextDecoder().decode(array); + } + let s = ""; + for (let i = 0, il = array.length; i < il; i++) { + s += String.fromCharCode(array[i]); + } + try { + return decodeURIComponent(escape(s)); + } catch (e) { + return s; + } + } + static extractUrlBase(url) { + const index = url.lastIndexOf("/"); + if (index === -1) return "./"; + return url.slice(0, index + 1); + } + static resolveURL(url, path) { + if (typeof url !== "string" || url === "") return ""; + if (/^https?:\/\//i.test(path) && /^\//.test(url)) { + path = path.replace(/(^https?:\/\/[^\/]+).*/i, "$1"); + } + if (/^(https?:)?\/\//i.test(url)) return url; + if (/^data:.*,.*$/i.test(url)) return url; + if (/^blob:.*$/i.test(url)) return url; + return path + url; + } +} +class InstancedBufferGeometry extends BufferGeometry { + static { + __name(this, "InstancedBufferGeometry"); + } + constructor() { + super(); + this.isInstancedBufferGeometry = true; + this.type = "InstancedBufferGeometry"; + this.instanceCount = Infinity; + } + copy(source) { + super.copy(source); + this.instanceCount = source.instanceCount; + return this; + } + toJSON() { + const data = super.toJSON(); + data.instanceCount = this.instanceCount; + data.isInstancedBufferGeometry = true; + return data; + } +} +class BufferGeometryLoader extends Loader { + static { + __name(this, "BufferGeometryLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const interleavedBufferMap = {}; + const arrayBufferMap = {}; + function getInterleavedBuffer(json2, uuid) { + if (interleavedBufferMap[uuid] !== void 0) return interleavedBufferMap[uuid]; + const interleavedBuffers = json2.interleavedBuffers; + const interleavedBuffer = interleavedBuffers[uuid]; + const buffer = getArrayBuffer(json2, interleavedBuffer.buffer); + const array = getTypedArray(interleavedBuffer.type, buffer); + const ib = new InterleavedBuffer(array, interleavedBuffer.stride); + ib.uuid = interleavedBuffer.uuid; + interleavedBufferMap[uuid] = ib; + return ib; + } + __name(getInterleavedBuffer, "getInterleavedBuffer"); + function getArrayBuffer(json2, uuid) { + if (arrayBufferMap[uuid] !== void 0) return arrayBufferMap[uuid]; + const arrayBuffers = json2.arrayBuffers; + const arrayBuffer = arrayBuffers[uuid]; + const ab = new Uint32Array(arrayBuffer).buffer; + arrayBufferMap[uuid] = ab; + return ab; + } + __name(getArrayBuffer, "getArrayBuffer"); + const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + const index = json.data.index; + if (index !== void 0) { + const typedArray = getTypedArray(index.type, index.array); + geometry.setIndex(new BufferAttribute(typedArray, 1)); + } + const attributes = json.data.attributes; + for (const key in attributes) { + const attribute = attributes[key]; + let bufferAttribute; + if (attribute.isInterleavedBufferAttribute) { + const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); + bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); + } else { + const typedArray = getTypedArray(attribute.type, attribute.array); + const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr(typedArray, attribute.itemSize, attribute.normalized); + } + if (attribute.name !== void 0) bufferAttribute.name = attribute.name; + if (attribute.usage !== void 0) bufferAttribute.setUsage(attribute.usage); + geometry.setAttribute(key, bufferAttribute); + } + const morphAttributes = json.data.morphAttributes; + if (morphAttributes) { + for (const key in morphAttributes) { + const attributeArray = morphAttributes[key]; + const array = []; + for (let i = 0, il = attributeArray.length; i < il; i++) { + const attribute = attributeArray[i]; + let bufferAttribute; + if (attribute.isInterleavedBufferAttribute) { + const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); + bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); + } else { + const typedArray = getTypedArray(attribute.type, attribute.array); + bufferAttribute = new BufferAttribute(typedArray, attribute.itemSize, attribute.normalized); + } + if (attribute.name !== void 0) bufferAttribute.name = attribute.name; + array.push(bufferAttribute); + } + geometry.morphAttributes[key] = array; + } + } + const morphTargetsRelative = json.data.morphTargetsRelative; + if (morphTargetsRelative) { + geometry.morphTargetsRelative = true; + } + const groups = json.data.groups || json.data.drawcalls || json.data.offsets; + if (groups !== void 0) { + for (let i = 0, n = groups.length; i !== n; ++i) { + const group = groups[i]; + geometry.addGroup(group.start, group.count, group.materialIndex); + } + } + const boundingSphere = json.data.boundingSphere; + if (boundingSphere !== void 0) { + const center = new Vector3(); + if (boundingSphere.center !== void 0) { + center.fromArray(boundingSphere.center); + } + geometry.boundingSphere = new Sphere(center, boundingSphere.radius); + } + if (json.name) geometry.name = json.name; + if (json.userData) geometry.userData = json.userData; + return geometry; + } +} +class ObjectLoader extends Loader { + static { + __name(this, "ObjectLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + this.resourcePath = this.resourcePath || path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + let json = null; + try { + json = JSON.parse(text); + } catch (error) { + if (onError !== void 0) onError(error); + console.error("THREE:ObjectLoader: Can't parse " + url + ".", error.message); + return; + } + const metadata = json.metadata; + if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { + if (onError !== void 0) onError(new Error("THREE.ObjectLoader: Can't load " + url)); + console.error("THREE.ObjectLoader: Can't load " + url); + return; + } + scope.parse(json, onLoad); + }, onProgress, onError); + } + async loadAsync(url, onProgress) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + this.resourcePath = this.resourcePath || path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + const text = await loader.loadAsync(url, onProgress); + const json = JSON.parse(text); + const metadata = json.metadata; + if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { + throw new Error("THREE.ObjectLoader: Can't load " + url); + } + return await scope.parseAsync(json); + } + parse(json, onLoad) { + const animations = this.parseAnimations(json.animations); + const shapes = this.parseShapes(json.shapes); + const geometries = this.parseGeometries(json.geometries, shapes); + const images = this.parseImages(json.images, function() { + if (onLoad !== void 0) onLoad(object); + }); + const textures = this.parseTextures(json.textures, images); + const materials = this.parseMaterials(json.materials, textures); + const object = this.parseObject(json.object, geometries, materials, textures, animations); + const skeletons = this.parseSkeletons(json.skeletons, object); + this.bindSkeletons(object, skeletons); + this.bindLightTargets(object); + if (onLoad !== void 0) { + let hasImages = false; + for (const uuid in images) { + if (images[uuid].data instanceof HTMLImageElement) { + hasImages = true; + break; + } + } + if (hasImages === false) onLoad(object); + } + return object; + } + async parseAsync(json) { + const animations = this.parseAnimations(json.animations); + const shapes = this.parseShapes(json.shapes); + const geometries = this.parseGeometries(json.geometries, shapes); + const images = await this.parseImagesAsync(json.images); + const textures = this.parseTextures(json.textures, images); + const materials = this.parseMaterials(json.materials, textures); + const object = this.parseObject(json.object, geometries, materials, textures, animations); + const skeletons = this.parseSkeletons(json.skeletons, object); + this.bindSkeletons(object, skeletons); + this.bindLightTargets(object); + return object; + } + parseShapes(json) { + const shapes = {}; + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const shape = new Shape().fromJSON(json[i]); + shapes[shape.uuid] = shape; + } + } + return shapes; + } + parseSkeletons(json, object) { + const skeletons = {}; + const bones = {}; + object.traverse(function(child) { + if (child.isBone) bones[child.uuid] = child; + }); + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const skeleton = new Skeleton().fromJSON(json[i], bones); + skeletons[skeleton.uuid] = skeleton; + } + } + return skeletons; + } + parseGeometries(json, shapes) { + const geometries = {}; + if (json !== void 0) { + const bufferGeometryLoader = new BufferGeometryLoader(); + for (let i = 0, l = json.length; i < l; i++) { + let geometry; + const data = json[i]; + switch (data.type) { + case "BufferGeometry": + case "InstancedBufferGeometry": + geometry = bufferGeometryLoader.parse(data); + break; + default: + if (data.type in Geometries) { + geometry = Geometries[data.type].fromJSON(data, shapes); + } else { + console.warn(`THREE.ObjectLoader: Unsupported geometry type "${data.type}"`); + } + } + geometry.uuid = data.uuid; + if (data.name !== void 0) geometry.name = data.name; + if (data.userData !== void 0) geometry.userData = data.userData; + geometries[data.uuid] = geometry; + } + } + return geometries; + } + parseMaterials(json, textures) { + const cache = {}; + const materials = {}; + if (json !== void 0) { + const loader = new MaterialLoader(); + loader.setTextures(textures); + for (let i = 0, l = json.length; i < l; i++) { + const data = json[i]; + if (cache[data.uuid] === void 0) { + cache[data.uuid] = loader.parse(data); + } + materials[data.uuid] = cache[data.uuid]; + } + } + return materials; + } + parseAnimations(json) { + const animations = {}; + if (json !== void 0) { + for (let i = 0; i < json.length; i++) { + const data = json[i]; + const clip = AnimationClip.parse(data); + animations[clip.uuid] = clip; + } + } + return animations; + } + parseImages(json, onLoad) { + const scope = this; + const images = {}; + let loader; + function loadImage2(url) { + scope.manager.itemStart(url); + return loader.load(url, function() { + scope.manager.itemEnd(url); + }, void 0, function() { + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }); + } + __name(loadImage2, "loadImage"); + function deserializeImage(image) { + if (typeof image === "string") { + const url = image; + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; + return loadImage2(path); + } else { + if (image.data) { + return { + data: getTypedArray(image.type, image.data), + width: image.width, + height: image.height + }; + } else { + return null; + } + } + } + __name(deserializeImage, "deserializeImage"); + if (json !== void 0 && json.length > 0) { + const manager = new LoadingManager(onLoad); + loader = new ImageLoader(manager); + loader.setCrossOrigin(this.crossOrigin); + for (let i = 0, il = json.length; i < il; i++) { + const image = json[i]; + const url = image.url; + if (Array.isArray(url)) { + const imageArray = []; + for (let j = 0, jl = url.length; j < jl; j++) { + const currentUrl = url[j]; + const deserializedImage = deserializeImage(currentUrl); + if (deserializedImage !== null) { + if (deserializedImage instanceof HTMLImageElement) { + imageArray.push(deserializedImage); + } else { + imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); + } + } + } + images[image.uuid] = new Source(imageArray); + } else { + const deserializedImage = deserializeImage(image.url); + images[image.uuid] = new Source(deserializedImage); + } + } + } + return images; + } + async parseImagesAsync(json) { + const scope = this; + const images = {}; + let loader; + async function deserializeImage(image) { + if (typeof image === "string") { + const url = image; + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; + return await loader.loadAsync(path); + } else { + if (image.data) { + return { + data: getTypedArray(image.type, image.data), + width: image.width, + height: image.height + }; + } else { + return null; + } + } + } + __name(deserializeImage, "deserializeImage"); + if (json !== void 0 && json.length > 0) { + loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + for (let i = 0, il = json.length; i < il; i++) { + const image = json[i]; + const url = image.url; + if (Array.isArray(url)) { + const imageArray = []; + for (let j = 0, jl = url.length; j < jl; j++) { + const currentUrl = url[j]; + const deserializedImage = await deserializeImage(currentUrl); + if (deserializedImage !== null) { + if (deserializedImage instanceof HTMLImageElement) { + imageArray.push(deserializedImage); + } else { + imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); + } + } + } + images[image.uuid] = new Source(imageArray); + } else { + const deserializedImage = await deserializeImage(image.url); + images[image.uuid] = new Source(deserializedImage); + } + } + } + return images; + } + parseTextures(json, images) { + function parseConstant(value, type) { + if (typeof value === "number") return value; + console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", value); + return type[value]; + } + __name(parseConstant, "parseConstant"); + const textures = {}; + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const data = json[i]; + if (data.image === void 0) { + console.warn('THREE.ObjectLoader: No "image" specified for', data.uuid); + } + if (images[data.image] === void 0) { + console.warn("THREE.ObjectLoader: Undefined image", data.image); + } + const source = images[data.image]; + const image = source.data; + let texture; + if (Array.isArray(image)) { + texture = new CubeTexture(); + if (image.length === 6) texture.needsUpdate = true; + } else { + if (image && image.data) { + texture = new DataTexture(); + } else { + texture = new Texture(); + } + if (image) texture.needsUpdate = true; + } + texture.source = source; + texture.uuid = data.uuid; + if (data.name !== void 0) texture.name = data.name; + if (data.mapping !== void 0) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING); + if (data.channel !== void 0) texture.channel = data.channel; + if (data.offset !== void 0) texture.offset.fromArray(data.offset); + if (data.repeat !== void 0) texture.repeat.fromArray(data.repeat); + if (data.center !== void 0) texture.center.fromArray(data.center); + if (data.rotation !== void 0) texture.rotation = data.rotation; + if (data.wrap !== void 0) { + texture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING); + texture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING); + } + if (data.format !== void 0) texture.format = data.format; + if (data.internalFormat !== void 0) texture.internalFormat = data.internalFormat; + if (data.type !== void 0) texture.type = data.type; + if (data.colorSpace !== void 0) texture.colorSpace = data.colorSpace; + if (data.minFilter !== void 0) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER); + if (data.magFilter !== void 0) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER); + if (data.anisotropy !== void 0) texture.anisotropy = data.anisotropy; + if (data.flipY !== void 0) texture.flipY = data.flipY; + if (data.generateMipmaps !== void 0) texture.generateMipmaps = data.generateMipmaps; + if (data.premultiplyAlpha !== void 0) texture.premultiplyAlpha = data.premultiplyAlpha; + if (data.unpackAlignment !== void 0) texture.unpackAlignment = data.unpackAlignment; + if (data.compareFunction !== void 0) texture.compareFunction = data.compareFunction; + if (data.userData !== void 0) texture.userData = data.userData; + textures[data.uuid] = texture; + } + } + return textures; + } + parseObject(data, geometries, materials, textures, animations) { + let object; + function getGeometry(name) { + if (geometries[name] === void 0) { + console.warn("THREE.ObjectLoader: Undefined geometry", name); + } + return geometries[name]; + } + __name(getGeometry, "getGeometry"); + function getMaterial(name) { + if (name === void 0) return void 0; + if (Array.isArray(name)) { + const array = []; + for (let i = 0, l = name.length; i < l; i++) { + const uuid = name[i]; + if (materials[uuid] === void 0) { + console.warn("THREE.ObjectLoader: Undefined material", uuid); + } + array.push(materials[uuid]); + } + return array; + } + if (materials[name] === void 0) { + console.warn("THREE.ObjectLoader: Undefined material", name); + } + return materials[name]; + } + __name(getMaterial, "getMaterial"); + function getTexture(uuid) { + if (textures[uuid] === void 0) { + console.warn("THREE.ObjectLoader: Undefined texture", uuid); + } + return textures[uuid]; + } + __name(getTexture, "getTexture"); + let geometry, material; + switch (data.type) { + case "Scene": + object = new Scene(); + if (data.background !== void 0) { + if (Number.isInteger(data.background)) { + object.background = new Color(data.background); + } else { + object.background = getTexture(data.background); + } + } + if (data.environment !== void 0) { + object.environment = getTexture(data.environment); + } + if (data.fog !== void 0) { + if (data.fog.type === "Fog") { + object.fog = new Fog(data.fog.color, data.fog.near, data.fog.far); + } else if (data.fog.type === "FogExp2") { + object.fog = new FogExp2(data.fog.color, data.fog.density); + } + if (data.fog.name !== "") { + object.fog.name = data.fog.name; + } + } + if (data.backgroundBlurriness !== void 0) object.backgroundBlurriness = data.backgroundBlurriness; + if (data.backgroundIntensity !== void 0) object.backgroundIntensity = data.backgroundIntensity; + if (data.backgroundRotation !== void 0) object.backgroundRotation.fromArray(data.backgroundRotation); + if (data.environmentIntensity !== void 0) object.environmentIntensity = data.environmentIntensity; + if (data.environmentRotation !== void 0) object.environmentRotation.fromArray(data.environmentRotation); + break; + case "PerspectiveCamera": + object = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far); + if (data.focus !== void 0) object.focus = data.focus; + if (data.zoom !== void 0) object.zoom = data.zoom; + if (data.filmGauge !== void 0) object.filmGauge = data.filmGauge; + if (data.filmOffset !== void 0) object.filmOffset = data.filmOffset; + if (data.view !== void 0) object.view = Object.assign({}, data.view); + break; + case "OrthographicCamera": + object = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far); + if (data.zoom !== void 0) object.zoom = data.zoom; + if (data.view !== void 0) object.view = Object.assign({}, data.view); + break; + case "AmbientLight": + object = new AmbientLight(data.color, data.intensity); + break; + case "DirectionalLight": + object = new DirectionalLight(data.color, data.intensity); + object.target = data.target || ""; + break; + case "PointLight": + object = new PointLight(data.color, data.intensity, data.distance, data.decay); + break; + case "RectAreaLight": + object = new RectAreaLight(data.color, data.intensity, data.width, data.height); + break; + case "SpotLight": + object = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay); + object.target = data.target || ""; + break; + case "HemisphereLight": + object = new HemisphereLight(data.color, data.groundColor, data.intensity); + break; + case "LightProbe": + object = new LightProbe().fromJSON(data); + break; + case "SkinnedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new SkinnedMesh(geometry, material); + if (data.bindMode !== void 0) object.bindMode = data.bindMode; + if (data.bindMatrix !== void 0) object.bindMatrix.fromArray(data.bindMatrix); + if (data.skeleton !== void 0) object.skeleton = data.skeleton; + break; + case "Mesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new Mesh(geometry, material); + break; + case "InstancedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + const count = data.count; + const instanceMatrix = data.instanceMatrix; + const instanceColor = data.instanceColor; + object = new InstancedMesh(geometry, material, count); + object.instanceMatrix = new InstancedBufferAttribute(new Float32Array(instanceMatrix.array), 16); + if (instanceColor !== void 0) object.instanceColor = new InstancedBufferAttribute(new Float32Array(instanceColor.array), instanceColor.itemSize); + break; + case "BatchedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new BatchedMesh(data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material); + object.geometry = geometry; + object.perObjectFrustumCulled = data.perObjectFrustumCulled; + object.sortObjects = data.sortObjects; + object._drawRanges = data.drawRanges; + object._reservedRanges = data.reservedRanges; + object._visibility = data.visibility; + object._active = data.active; + object._bounds = data.bounds.map((bound) => { + const box = new Box3(); + box.min.fromArray(bound.boxMin); + box.max.fromArray(bound.boxMax); + const sphere = new Sphere(); + sphere.radius = bound.sphereRadius; + sphere.center.fromArray(bound.sphereCenter); + return { + boxInitialized: bound.boxInitialized, + box, + sphereInitialized: bound.sphereInitialized, + sphere + }; + }); + object._maxInstanceCount = data.maxInstanceCount; + object._maxVertexCount = data.maxVertexCount; + object._maxIndexCount = data.maxIndexCount; + object._geometryInitialized = data.geometryInitialized; + object._geometryCount = data.geometryCount; + object._matricesTexture = getTexture(data.matricesTexture.uuid); + if (data.colorsTexture !== void 0) object._colorsTexture = getTexture(data.colorsTexture.uuid); + break; + case "LOD": + object = new LOD(); + break; + case "Line": + object = new Line(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "LineLoop": + object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "LineSegments": + object = new LineSegments(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "PointCloud": + case "Points": + object = new Points(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "Sprite": + object = new Sprite(getMaterial(data.material)); + break; + case "Group": + object = new Group(); + break; + case "Bone": + object = new Bone(); + break; + default: + object = new Object3D(); + } + object.uuid = data.uuid; + if (data.name !== void 0) object.name = data.name; + if (data.matrix !== void 0) { + object.matrix.fromArray(data.matrix); + if (data.matrixAutoUpdate !== void 0) object.matrixAutoUpdate = data.matrixAutoUpdate; + if (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale); + } else { + if (data.position !== void 0) object.position.fromArray(data.position); + if (data.rotation !== void 0) object.rotation.fromArray(data.rotation); + if (data.quaternion !== void 0) object.quaternion.fromArray(data.quaternion); + if (data.scale !== void 0) object.scale.fromArray(data.scale); + } + if (data.up !== void 0) object.up.fromArray(data.up); + if (data.castShadow !== void 0) object.castShadow = data.castShadow; + if (data.receiveShadow !== void 0) object.receiveShadow = data.receiveShadow; + if (data.shadow) { + if (data.shadow.intensity !== void 0) object.shadow.intensity = data.shadow.intensity; + if (data.shadow.bias !== void 0) object.shadow.bias = data.shadow.bias; + if (data.shadow.normalBias !== void 0) object.shadow.normalBias = data.shadow.normalBias; + if (data.shadow.radius !== void 0) object.shadow.radius = data.shadow.radius; + if (data.shadow.mapSize !== void 0) object.shadow.mapSize.fromArray(data.shadow.mapSize); + if (data.shadow.camera !== void 0) object.shadow.camera = this.parseObject(data.shadow.camera); + } + if (data.visible !== void 0) object.visible = data.visible; + if (data.frustumCulled !== void 0) object.frustumCulled = data.frustumCulled; + if (data.renderOrder !== void 0) object.renderOrder = data.renderOrder; + if (data.userData !== void 0) object.userData = data.userData; + if (data.layers !== void 0) object.layers.mask = data.layers; + if (data.children !== void 0) { + const children = data.children; + for (let i = 0; i < children.length; i++) { + object.add(this.parseObject(children[i], geometries, materials, textures, animations)); + } + } + if (data.animations !== void 0) { + const objectAnimations = data.animations; + for (let i = 0; i < objectAnimations.length; i++) { + const uuid = objectAnimations[i]; + object.animations.push(animations[uuid]); + } + } + if (data.type === "LOD") { + if (data.autoUpdate !== void 0) object.autoUpdate = data.autoUpdate; + const levels = data.levels; + for (let l = 0; l < levels.length; l++) { + const level = levels[l]; + const child = object.getObjectByProperty("uuid", level.object); + if (child !== void 0) { + object.addLevel(child, level.distance, level.hysteresis); + } + } + } + return object; + } + bindSkeletons(object, skeletons) { + if (Object.keys(skeletons).length === 0) return; + object.traverse(function(child) { + if (child.isSkinnedMesh === true && child.skeleton !== void 0) { + const skeleton = skeletons[child.skeleton]; + if (skeleton === void 0) { + console.warn("THREE.ObjectLoader: No skeleton found with UUID:", child.skeleton); + } else { + child.bind(skeleton, child.bindMatrix); + } + } + }); + } + bindLightTargets(object) { + object.traverse(function(child) { + if (child.isDirectionalLight || child.isSpotLight) { + const uuid = child.target; + const target = object.getObjectByProperty("uuid", uuid); + if (target !== void 0) { + child.target = target; + } else { + child.target = new Object3D(); + } + } + }); + } +} +const TEXTURE_MAPPING = { + UVMapping, + CubeReflectionMapping, + CubeRefractionMapping, + EquirectangularReflectionMapping, + EquirectangularRefractionMapping, + CubeUVReflectionMapping +}; +const TEXTURE_WRAPPING = { + RepeatWrapping, + ClampToEdgeWrapping, + MirroredRepeatWrapping +}; +const TEXTURE_FILTER = { + NearestFilter, + NearestMipmapNearestFilter, + NearestMipmapLinearFilter, + LinearFilter, + LinearMipmapNearestFilter, + LinearMipmapLinearFilter +}; +class ImageBitmapLoader extends Loader { + static { + __name(this, "ImageBitmapLoader"); + } + constructor(manager) { + super(manager); + this.isImageBitmapLoader = true; + if (typeof createImageBitmap === "undefined") { + console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."); + } + if (typeof fetch === "undefined") { + console.warn("THREE.ImageBitmapLoader: fetch() not supported."); + } + this.options = { premultiplyAlpha: "none" }; + } + setOptions(options) { + this.options = options; + return this; + } + load(url, onLoad, onProgress, onError) { + if (url === void 0) url = ""; + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const scope = this; + const cached = Cache.get(url); + if (cached !== void 0) { + scope.manager.itemStart(url); + if (cached.then) { + cached.then((imageBitmap) => { + if (onLoad) onLoad(imageBitmap); + scope.manager.itemEnd(url); + }).catch((e) => { + if (onError) onError(e); + }); + return; + } + setTimeout(function() { + if (onLoad) onLoad(cached); + scope.manager.itemEnd(url); + }, 0); + return cached; + } + const fetchOptions = {}; + fetchOptions.credentials = this.crossOrigin === "anonymous" ? "same-origin" : "include"; + fetchOptions.headers = this.requestHeader; + const promise = fetch(url, fetchOptions).then(function(res) { + return res.blob(); + }).then(function(blob) { + return createImageBitmap(blob, Object.assign(scope.options, { colorSpaceConversion: "none" })); + }).then(function(imageBitmap) { + Cache.add(url, imageBitmap); + if (onLoad) onLoad(imageBitmap); + scope.manager.itemEnd(url); + return imageBitmap; + }).catch(function(e) { + if (onError) onError(e); + Cache.remove(url); + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }); + Cache.add(url, promise); + scope.manager.itemStart(url); + } +} +let _context; +class AudioContext { + static { + __name(this, "AudioContext"); + } + static getContext() { + if (_context === void 0) { + _context = new (window.AudioContext || window.webkitAudioContext)(); + } + return _context; + } + static setContext(value) { + _context = value; + } +} +class AudioLoader extends Loader { + static { + __name(this, "AudioLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + const bufferCopy = buffer.slice(0); + const context = AudioContext.getContext(); + context.decodeAudioData(bufferCopy, function(audioBuffer) { + onLoad(audioBuffer); + }).catch(handleError); + } catch (e) { + handleError(e); + } + }, onProgress, onError); + function handleError(e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + __name(handleError, "handleError"); + } +} +const _eyeRight = /* @__PURE__ */ new Matrix4(); +const _eyeLeft = /* @__PURE__ */ new Matrix4(); +const _projectionMatrix = /* @__PURE__ */ new Matrix4(); +class StereoCamera { + static { + __name(this, "StereoCamera"); + } + constructor() { + this.type = "StereoCamera"; + this.aspect = 1; + this.eyeSep = 0.064; + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable(1); + this.cameraL.matrixAutoUpdate = false; + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable(2); + this.cameraR.matrixAutoUpdate = false; + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + } + update(camera) { + const cache = this._cache; + const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; + if (needsUpdate) { + cache.focus = camera.focus; + cache.fov = camera.fov; + cache.aspect = camera.aspect * this.aspect; + cache.near = camera.near; + cache.far = camera.far; + cache.zoom = camera.zoom; + cache.eyeSep = this.eyeSep; + _projectionMatrix.copy(camera.projectionMatrix); + const eyeSepHalf = cache.eyeSep / 2; + const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + const ymax = cache.near * Math.tan(DEG2RAD * cache.fov * 0.5) / cache.zoom; + let xmin, xmax; + _eyeLeft.elements[12] = -eyeSepHalf; + _eyeRight.elements[12] = eyeSepHalf; + xmin = -ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); + _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); + this.cameraL.projectionMatrix.copy(_projectionMatrix); + xmin = -ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); + _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); + this.cameraR.projectionMatrix.copy(_projectionMatrix); + } + this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft); + this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight); + } +} +class Clock { + static { + __name(this, "Clock"); + } + constructor(autoStart = true) { + this.autoStart = autoStart; + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + this.running = false; + } + start() { + this.startTime = now(); + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + } + stop() { + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + } + getElapsedTime() { + this.getDelta(); + return this.elapsedTime; + } + getDelta() { + let diff = 0; + if (this.autoStart && !this.running) { + this.start(); + return 0; + } + if (this.running) { + const newTime = now(); + diff = (newTime - this.oldTime) / 1e3; + this.oldTime = newTime; + this.elapsedTime += diff; + } + return diff; + } +} +function now() { + return performance.now(); +} +__name(now, "now"); +const _position$1 = /* @__PURE__ */ new Vector3(); +const _quaternion$1 = /* @__PURE__ */ new Quaternion(); +const _scale$1 = /* @__PURE__ */ new Vector3(); +const _orientation$1 = /* @__PURE__ */ new Vector3(); +class AudioListener extends Object3D { + static { + __name(this, "AudioListener"); + } + constructor() { + super(); + this.type = "AudioListener"; + this.context = AudioContext.getContext(); + this.gain = this.context.createGain(); + this.gain.connect(this.context.destination); + this.filter = null; + this.timeDelta = 0; + this._clock = new Clock(); + } + getInput() { + return this.gain; + } + removeFilter() { + if (this.filter !== null) { + this.gain.disconnect(this.filter); + this.filter.disconnect(this.context.destination); + this.gain.connect(this.context.destination); + this.filter = null; + } + return this; + } + getFilter() { + return this.filter; + } + setFilter(value) { + if (this.filter !== null) { + this.gain.disconnect(this.filter); + this.filter.disconnect(this.context.destination); + } else { + this.gain.disconnect(this.context.destination); + } + this.filter = value; + this.gain.connect(this.filter); + this.filter.connect(this.context.destination); + return this; + } + getMasterVolume() { + return this.gain.gain.value; + } + setMasterVolume(value) { + this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); + return this; + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + const listener = this.context.listener; + const up = this.up; + this.timeDelta = this._clock.getDelta(); + this.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); + _orientation$1.set(0, 0, -1).applyQuaternion(_quaternion$1); + if (listener.positionX) { + const endTime = this.context.currentTime + this.timeDelta; + listener.positionX.linearRampToValueAtTime(_position$1.x, endTime); + listener.positionY.linearRampToValueAtTime(_position$1.y, endTime); + listener.positionZ.linearRampToValueAtTime(_position$1.z, endTime); + listener.forwardX.linearRampToValueAtTime(_orientation$1.x, endTime); + listener.forwardY.linearRampToValueAtTime(_orientation$1.y, endTime); + listener.forwardZ.linearRampToValueAtTime(_orientation$1.z, endTime); + listener.upX.linearRampToValueAtTime(up.x, endTime); + listener.upY.linearRampToValueAtTime(up.y, endTime); + listener.upZ.linearRampToValueAtTime(up.z, endTime); + } else { + listener.setPosition(_position$1.x, _position$1.y, _position$1.z); + listener.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z); + } + } +} +class Audio extends Object3D { + static { + __name(this, "Audio"); + } + constructor(listener) { + super(); + this.type = "Audio"; + this.listener = listener; + this.context = listener.context; + this.gain = this.context.createGain(); + this.gain.connect(listener.getInput()); + this.autoplay = false; + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = void 0; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = "empty"; + this._startedAt = 0; + this._progress = 0; + this._connected = false; + this.filters = []; + } + getOutput() { + return this.gain; + } + setNodeSource(audioNode) { + this.hasPlaybackControl = false; + this.sourceType = "audioNode"; + this.source = audioNode; + this.connect(); + return this; + } + setMediaElementSource(mediaElement) { + this.hasPlaybackControl = false; + this.sourceType = "mediaNode"; + this.source = this.context.createMediaElementSource(mediaElement); + this.connect(); + return this; + } + setMediaStreamSource(mediaStream) { + this.hasPlaybackControl = false; + this.sourceType = "mediaStreamNode"; + this.source = this.context.createMediaStreamSource(mediaStream); + this.connect(); + return this; + } + setBuffer(audioBuffer) { + this.buffer = audioBuffer; + this.sourceType = "buffer"; + if (this.autoplay) this.play(); + return this; + } + play(delay = 0) { + if (this.isPlaying === true) { + console.warn("THREE.Audio: Audio is already playing."); + return; + } + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this._startedAt = this.context.currentTime + delay; + const source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind(this); + source.start(this._startedAt, this._progress + this.offset, this.duration); + this.isPlaying = true; + this.source = source; + this.setDetune(this.detune); + this.setPlaybackRate(this.playbackRate); + return this.connect(); + } + pause() { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + if (this.isPlaying === true) { + this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate; + if (this.loop === true) { + this._progress = this._progress % (this.duration || this.buffer.duration); + } + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + } + return this; + } + stop(delay = 0) { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this._progress = 0; + if (this.source !== null) { + this.source.stop(this.context.currentTime + delay); + this.source.onended = null; + } + this.isPlaying = false; + return this; + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (let i = 1, l = this.filters.length; i < l; i++) { + this.filters[i - 1].connect(this.filters[i]); + } + this.filters[this.filters.length - 1].connect(this.getOutput()); + } else { + this.source.connect(this.getOutput()); + } + this._connected = true; + return this; + } + disconnect() { + if (this._connected === false) { + return; + } + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (let i = 1, l = this.filters.length; i < l; i++) { + this.filters[i - 1].disconnect(this.filters[i]); + } + this.filters[this.filters.length - 1].disconnect(this.getOutput()); + } else { + this.source.disconnect(this.getOutput()); + } + this._connected = false; + return this; + } + getFilters() { + return this.filters; + } + setFilters(value) { + if (!value) value = []; + if (this._connected === true) { + this.disconnect(); + this.filters = value.slice(); + this.connect(); + } else { + this.filters = value.slice(); + } + return this; + } + setDetune(value) { + this.detune = value; + if (this.isPlaying === true && this.source.detune !== void 0) { + this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01); + } + return this; + } + getDetune() { + return this.detune; + } + getFilter() { + return this.getFilters()[0]; + } + setFilter(filter) { + return this.setFilters(filter ? [filter] : []); + } + setPlaybackRate(value) { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this.playbackRate = value; + if (this.isPlaying === true) { + this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01); + } + return this; + } + getPlaybackRate() { + return this.playbackRate; + } + onEnded() { + this.isPlaying = false; + } + getLoop() { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return false; + } + return this.loop; + } + setLoop(value) { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this.loop = value; + if (this.isPlaying === true) { + this.source.loop = this.loop; + } + return this; + } + setLoopStart(value) { + this.loopStart = value; + return this; + } + setLoopEnd(value) { + this.loopEnd = value; + return this; + } + getVolume() { + return this.gain.gain.value; + } + setVolume(value) { + this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); + return this; + } +} +const _position = /* @__PURE__ */ new Vector3(); +const _quaternion = /* @__PURE__ */ new Quaternion(); +const _scale = /* @__PURE__ */ new Vector3(); +const _orientation = /* @__PURE__ */ new Vector3(); +class PositionalAudio extends Audio { + static { + __name(this, "PositionalAudio"); + } + constructor(listener) { + super(listener); + this.panner = this.context.createPanner(); + this.panner.panningModel = "HRTF"; + this.panner.connect(this.gain); + } + connect() { + super.connect(); + this.panner.connect(this.gain); + } + disconnect() { + super.disconnect(); + this.panner.disconnect(this.gain); + } + getOutput() { + return this.panner; + } + getRefDistance() { + return this.panner.refDistance; + } + setRefDistance(value) { + this.panner.refDistance = value; + return this; + } + getRolloffFactor() { + return this.panner.rolloffFactor; + } + setRolloffFactor(value) { + this.panner.rolloffFactor = value; + return this; + } + getDistanceModel() { + return this.panner.distanceModel; + } + setDistanceModel(value) { + this.panner.distanceModel = value; + return this; + } + getMaxDistance() { + return this.panner.maxDistance; + } + setMaxDistance(value) { + this.panner.maxDistance = value; + return this; + } + setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) { + this.panner.coneInnerAngle = coneInnerAngle; + this.panner.coneOuterAngle = coneOuterAngle; + this.panner.coneOuterGain = coneOuterGain; + return this; + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + if (this.hasPlaybackControl === true && this.isPlaying === false) return; + this.matrixWorld.decompose(_position, _quaternion, _scale); + _orientation.set(0, 0, 1).applyQuaternion(_quaternion); + const panner = this.panner; + if (panner.positionX) { + const endTime = this.context.currentTime + this.listener.timeDelta; + panner.positionX.linearRampToValueAtTime(_position.x, endTime); + panner.positionY.linearRampToValueAtTime(_position.y, endTime); + panner.positionZ.linearRampToValueAtTime(_position.z, endTime); + panner.orientationX.linearRampToValueAtTime(_orientation.x, endTime); + panner.orientationY.linearRampToValueAtTime(_orientation.y, endTime); + panner.orientationZ.linearRampToValueAtTime(_orientation.z, endTime); + } else { + panner.setPosition(_position.x, _position.y, _position.z); + panner.setOrientation(_orientation.x, _orientation.y, _orientation.z); + } + } +} +class AudioAnalyser { + static { + __name(this, "AudioAnalyser"); + } + constructor(audio, fftSize = 2048) { + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize; + this.data = new Uint8Array(this.analyser.frequencyBinCount); + audio.getOutput().connect(this.analyser); + } + getFrequencyData() { + this.analyser.getByteFrequencyData(this.data); + return this.data; + } + getAverageFrequency() { + let value = 0; + const data = this.getFrequencyData(); + for (let i = 0; i < data.length; i++) { + value += data[i]; + } + return value / data.length; + } +} +class PropertyMixer { + static { + __name(this, "PropertyMixer"); + } + constructor(binding, typeName, valueSize) { + this.binding = binding; + this.valueSize = valueSize; + let mixFunction, mixFunctionAdditive, setIdentity; + switch (typeName) { + case "quaternion": + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + this.buffer = new Float64Array(valueSize * 6); + this._workIndex = 5; + break; + case "string": + case "bool": + mixFunction = this._select; + mixFunctionAdditive = this._select; + setIdentity = this._setAdditiveIdentityOther; + this.buffer = new Array(valueSize * 5); + break; + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + this.buffer = new Float64Array(valueSize * 5); + } + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + this.useCount = 0; + this.referenceCount = 0; + } + // accumulate data in the 'incoming' region into 'accu' + accumulate(accuIndex, weight) { + const buffer = this.buffer, stride = this.valueSize, offset = accuIndex * stride + stride; + let currentWeight = this.cumulativeWeight; + if (currentWeight === 0) { + for (let i = 0; i !== stride; ++i) { + buffer[offset + i] = buffer[i]; + } + currentWeight = weight; + } else { + currentWeight += weight; + const mix = weight / currentWeight; + this._mixBufferRegion(buffer, offset, 0, mix, stride); + } + this.cumulativeWeight = currentWeight; + } + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive(weight) { + const buffer = this.buffer, stride = this.valueSize, offset = stride * this._addIndex; + if (this.cumulativeWeightAdditive === 0) { + this._setIdentity(); + } + this._mixBufferRegionAdditive(buffer, offset, 0, weight, stride); + this.cumulativeWeightAdditive += weight; + } + // apply the state of 'accu' to the binding when accus differ + apply(accuIndex) { + const stride = this.valueSize, buffer = this.buffer, offset = accuIndex * stride + stride, weight = this.cumulativeWeight, weightAdditive = this.cumulativeWeightAdditive, binding = this.binding; + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + if (weight < 1) { + const originalValueOffset = stride * this._origIndex; + this._mixBufferRegion( + buffer, + offset, + originalValueOffset, + 1 - weight, + stride + ); + } + if (weightAdditive > 0) { + this._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride); + } + for (let i = stride, e = stride + stride; i !== e; ++i) { + if (buffer[i] !== buffer[i + stride]) { + binding.setValue(buffer, offset); + break; + } + } + } + // remember the state of the bound property and copy it to both accus + saveOriginalState() { + const binding = this.binding; + const buffer = this.buffer, stride = this.valueSize, originalValueOffset = stride * this._origIndex; + binding.getValue(buffer, originalValueOffset); + for (let i = stride, e = originalValueOffset; i !== e; ++i) { + buffer[i] = buffer[originalValueOffset + i % stride]; + } + this._setIdentity(); + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + } + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState() { + const originalValueOffset = this.valueSize * 3; + this.binding.setValue(this.buffer, originalValueOffset); + } + _setAdditiveIdentityNumeric() { + const startIndex = this._addIndex * this.valueSize; + const endIndex = startIndex + this.valueSize; + for (let i = startIndex; i < endIndex; i++) { + this.buffer[i] = 0; + } + } + _setAdditiveIdentityQuaternion() { + this._setAdditiveIdentityNumeric(); + this.buffer[this._addIndex * this.valueSize + 3] = 1; + } + _setAdditiveIdentityOther() { + const startIndex = this._origIndex * this.valueSize; + const targetIndex = this._addIndex * this.valueSize; + for (let i = 0; i < this.valueSize; i++) { + this.buffer[targetIndex + i] = this.buffer[startIndex + i]; + } + } + // mix functions + _select(buffer, dstOffset, srcOffset, t2, stride) { + if (t2 >= 0.5) { + for (let i = 0; i !== stride; ++i) { + buffer[dstOffset + i] = buffer[srcOffset + i]; + } + } + } + _slerp(buffer, dstOffset, srcOffset, t2) { + Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t2); + } + _slerpAdditive(buffer, dstOffset, srcOffset, t2, stride) { + const workOffset = this._workIndex * stride; + Quaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); + Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t2); + } + _lerp(buffer, dstOffset, srcOffset, t2, stride) { + const s = 1 - t2; + for (let i = 0; i !== stride; ++i) { + const j = dstOffset + i; + buffer[j] = buffer[j] * s + buffer[srcOffset + i] * t2; + } + } + _lerpAdditive(buffer, dstOffset, srcOffset, t2, stride) { + for (let i = 0; i !== stride; ++i) { + const j = dstOffset + i; + buffer[j] = buffer[j] + buffer[srcOffset + i] * t2; + } + } +} +const _RESERVED_CHARS_RE = "\\[\\]\\.:\\/"; +const _reservedRe = new RegExp("[" + _RESERVED_CHARS_RE + "]", "g"); +const _wordChar = "[^" + _RESERVED_CHARS_RE + "]"; +const _wordCharOrDot = "[^" + _RESERVED_CHARS_RE.replace("\\.", "") + "]"; +const _directoryRe = /* @__PURE__ */ /((?:WC+[\/:])*)/.source.replace("WC", _wordChar); +const _nodeRe = /* @__PURE__ */ /(WCOD+)?/.source.replace("WCOD", _wordCharOrDot); +const _objectRe = /* @__PURE__ */ /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", _wordChar); +const _propertyRe = /* @__PURE__ */ /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", _wordChar); +const _trackRe = new RegExp( + "^" + _directoryRe + _nodeRe + _objectRe + _propertyRe + "$" +); +const _supportedObjectNames = ["material", "materials", "bones", "map"]; +class Composite { + static { + __name(this, "Composite"); + } + constructor(targetGroup, path, optionalParsedPath) { + const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path); + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_(path, parsedPath); + } + getValue(array, offset) { + this.bind(); + const firstValidIndex = this._targetGroup.nCachedObjects_, binding = this._bindings[firstValidIndex]; + if (binding !== void 0) binding.getValue(array, offset); + } + setValue(array, offset) { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].setValue(array, offset); + } + } + bind() { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].bind(); + } + } + unbind() { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].unbind(); + } + } +} +class PropertyBinding { + static { + __name(this, "PropertyBinding"); + } + constructor(rootNode, path, parsedPath) { + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName(path); + this.node = PropertyBinding.findNode(rootNode, this.parsedPath.nodeName); + this.rootNode = rootNode; + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + } + static create(root, path, parsedPath) { + if (!(root && root.isAnimationObjectGroup)) { + return new PropertyBinding(root, path, parsedPath); + } else { + return new PropertyBinding.Composite(root, path, parsedPath); + } + } + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + static sanitizeNodeName(name) { + return name.replace(/\s/g, "_").replace(_reservedRe, ""); + } + static parseTrackName(trackName) { + const matches = _trackRe.exec(trackName); + if (matches === null) { + throw new Error("PropertyBinding: Cannot parse trackName: " + trackName); + } + const results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[2], + objectName: matches[3], + objectIndex: matches[4], + propertyName: matches[5], + // required + propertyIndex: matches[6] + }; + const lastDot = results.nodeName && results.nodeName.lastIndexOf("."); + if (lastDot !== void 0 && lastDot !== -1) { + const objectName = results.nodeName.substring(lastDot + 1); + if (_supportedObjectNames.indexOf(objectName) !== -1) { + results.nodeName = results.nodeName.substring(0, lastDot); + results.objectName = objectName; + } + } + if (results.propertyName === null || results.propertyName.length === 0) { + throw new Error("PropertyBinding: can not parse propertyName from trackName: " + trackName); + } + return results; + } + static findNode(root, nodeName) { + if (nodeName === void 0 || nodeName === "" || nodeName === "." || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) { + return root; + } + if (root.skeleton) { + const bone = root.skeleton.getBoneByName(nodeName); + if (bone !== void 0) { + return bone; + } + } + if (root.children) { + const searchNodeSubtree = /* @__PURE__ */ __name(function(children) { + for (let i = 0; i < children.length; i++) { + const childNode = children[i]; + if (childNode.name === nodeName || childNode.uuid === nodeName) { + return childNode; + } + const result = searchNodeSubtree(childNode.children); + if (result) return result; + } + return null; + }, "searchNodeSubtree"); + const subTreeNode = searchNodeSubtree(root.children); + if (subTreeNode) { + return subTreeNode; + } + } + return null; + } + // these are used to "bind" a nonexistent property + _getValue_unavailable() { + } + _setValue_unavailable() { + } + // Getters + _getValue_direct(buffer, offset) { + buffer[offset] = this.targetObject[this.propertyName]; + } + _getValue_array(buffer, offset) { + const source = this.resolvedProperty; + for (let i = 0, n = source.length; i !== n; ++i) { + buffer[offset++] = source[i]; + } + } + _getValue_arrayElement(buffer, offset) { + buffer[offset] = this.resolvedProperty[this.propertyIndex]; + } + _getValue_toArray(buffer, offset) { + this.resolvedProperty.toArray(buffer, offset); + } + // Direct + _setValue_direct(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + } + _setValue_direct_setNeedsUpdate(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + this.targetObject.needsUpdate = true; + } + _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + this.targetObject.matrixWorldNeedsUpdate = true; + } + // EntireArray + _setValue_array(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + } + _setValue_array_setNeedsUpdate(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + this.targetObject.needsUpdate = true; + } + _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + this.targetObject.matrixWorldNeedsUpdate = true; + } + // ArrayElement + _setValue_arrayElement(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + } + _setValue_arrayElement_setNeedsUpdate(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + this.targetObject.needsUpdate = true; + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + this.targetObject.matrixWorldNeedsUpdate = true; + } + // HasToFromArray + _setValue_fromArray(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + } + _setValue_fromArray_setNeedsUpdate(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + this.targetObject.needsUpdate = true; + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + this.targetObject.matrixWorldNeedsUpdate = true; + } + _getValue_unbound(targetArray, offset) { + this.bind(); + this.getValue(targetArray, offset); + } + _setValue_unbound(sourceArray, offset) { + this.bind(); + this.setValue(sourceArray, offset); + } + // create getter / setter pair for a property in the scene graph + bind() { + let targetObject = this.node; + const parsedPath = this.parsedPath; + const objectName = parsedPath.objectName; + const propertyName = parsedPath.propertyName; + let propertyIndex = parsedPath.propertyIndex; + if (!targetObject) { + targetObject = PropertyBinding.findNode(this.rootNode, parsedPath.nodeName); + this.node = targetObject; + } + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + if (!targetObject) { + console.warn("THREE.PropertyBinding: No target node found for track: " + this.path + "."); + return; + } + if (objectName) { + let objectIndex = parsedPath.objectIndex; + switch (objectName) { + case "materials": + if (!targetObject.material) { + console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + return; + } + if (!targetObject.material.materials) { + console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + return; + } + targetObject = targetObject.material.materials; + break; + case "bones": + if (!targetObject.skeleton) { + console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + return; + } + targetObject = targetObject.skeleton.bones; + for (let i = 0; i < targetObject.length; i++) { + if (targetObject[i].name === objectIndex) { + objectIndex = i; + break; + } + } + break; + case "map": + if ("map" in targetObject) { + targetObject = targetObject.map; + break; + } + if (!targetObject.material) { + console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + return; + } + if (!targetObject.material.map) { + console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.", this); + return; + } + targetObject = targetObject.material.map; + break; + default: + if (targetObject[objectName] === void 0) { + console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + return; + } + targetObject = targetObject[objectName]; + } + if (objectIndex !== void 0) { + if (targetObject[objectIndex] === void 0) { + console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, targetObject); + return; + } + targetObject = targetObject[objectIndex]; + } + } + const nodeProperty = targetObject[propertyName]; + if (nodeProperty === void 0) { + const nodeName = parsedPath.nodeName; + console.error("THREE.PropertyBinding: Trying to update property for track: " + nodeName + "." + propertyName + " but it wasn't found.", targetObject); + return; + } + let versioning = this.Versioning.None; + this.targetObject = targetObject; + if (targetObject.needsUpdate !== void 0) { + versioning = this.Versioning.NeedsUpdate; + } else if (targetObject.matrixWorldNeedsUpdate !== void 0) { + versioning = this.Versioning.MatrixWorldNeedsUpdate; + } + let bindingType = this.BindingType.Direct; + if (propertyIndex !== void 0) { + if (propertyName === "morphTargetInfluences") { + if (!targetObject.geometry) { + console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + return; + } + if (!targetObject.geometry.morphAttributes) { + console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + return; + } + if (targetObject.morphTargetDictionary[propertyIndex] !== void 0) { + propertyIndex = targetObject.morphTargetDictionary[propertyIndex]; + } + } + bindingType = this.BindingType.ArrayElement; + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + } else if (nodeProperty.fromArray !== void 0 && nodeProperty.toArray !== void 0) { + bindingType = this.BindingType.HasFromToArray; + this.resolvedProperty = nodeProperty; + } else if (Array.isArray(nodeProperty)) { + bindingType = this.BindingType.EntireArray; + this.resolvedProperty = nodeProperty; + } else { + this.propertyName = propertyName; + } + this.getValue = this.GetterByBindingType[bindingType]; + this.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning]; + } + unbind() { + this.node = null; + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + } +} +PropertyBinding.Composite = Composite; +PropertyBinding.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 +}; +PropertyBinding.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 +}; +PropertyBinding.prototype.GetterByBindingType = [ + PropertyBinding.prototype._getValue_direct, + PropertyBinding.prototype._getValue_array, + PropertyBinding.prototype._getValue_arrayElement, + PropertyBinding.prototype._getValue_toArray +]; +PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ + [ + // Direct + PropertyBinding.prototype._setValue_direct, + PropertyBinding.prototype._setValue_direct_setNeedsUpdate, + PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate + ], + [ + // EntireArray + PropertyBinding.prototype._setValue_array, + PropertyBinding.prototype._setValue_array_setNeedsUpdate, + PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate + ], + [ + // ArrayElement + PropertyBinding.prototype._setValue_arrayElement, + PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, + PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate + ], + [ + // HasToFromArray + PropertyBinding.prototype._setValue_fromArray, + PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, + PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate + ] +]; +class AnimationObjectGroup { + static { + __name(this, "AnimationObjectGroup"); + } + constructor() { + this.isAnimationObjectGroup = true; + this.uuid = generateUUID(); + this._objects = Array.prototype.slice.call(arguments); + this.nCachedObjects_ = 0; + const indices = {}; + this._indicesByUUID = indices; + for (let i = 0, n = arguments.length; i !== n; ++i) { + indices[arguments[i].uuid] = i; + } + this._paths = []; + this._parsedPaths = []; + this._bindings = []; + this._bindingsIndicesByPath = {}; + const scope = this; + this.stats = { + objects: { + get total() { + return scope._objects.length; + }, + get inUse() { + return this.total - scope.nCachedObjects_; + } + }, + get bindingsPerObject() { + return scope._bindings.length; + } + }; + } + add() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length; + let knownObject = void 0, nObjects = objects.length, nCachedObjects = this.nCachedObjects_; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid; + let index = indicesByUUID[uuid]; + if (index === void 0) { + index = nObjects++; + indicesByUUID[uuid] = index; + objects.push(object); + for (let j = 0, m = nBindings; j !== m; ++j) { + bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j])); + } + } else if (index < nCachedObjects) { + knownObject = objects[index]; + const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex]; + indicesByUUID[lastCachedObject.uuid] = index; + objects[index] = lastCachedObject; + indicesByUUID[uuid] = firstActiveIndex; + objects[firstActiveIndex] = object; + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex]; + let binding = bindingsForPath[index]; + bindingsForPath[index] = lastCached; + if (binding === void 0) { + binding = new PropertyBinding(object, paths[j], parsedPaths[j]); + } + bindingsForPath[firstActiveIndex] = binding; + } + } else if (objects[index] !== knownObject) { + console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes."); + } + } + this.nCachedObjects_ = nCachedObjects; + } + remove() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; + let nCachedObjects = this.nCachedObjects_; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; + if (index !== void 0 && index >= nCachedObjects) { + const lastCachedIndex = nCachedObjects++, firstActiveObject = objects[lastCachedIndex]; + indicesByUUID[firstActiveObject.uuid] = index; + objects[index] = firstActiveObject; + indicesByUUID[uuid] = lastCachedIndex; + objects[lastCachedIndex] = object; + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], firstActive = bindingsForPath[lastCachedIndex], binding = bindingsForPath[index]; + bindingsForPath[index] = firstActive; + bindingsForPath[lastCachedIndex] = binding; + } + } + } + this.nCachedObjects_ = nCachedObjects; + } + // remove & forget + uncache() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; + let nCachedObjects = this.nCachedObjects_, nObjects = objects.length; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; + if (index !== void 0) { + delete indicesByUUID[uuid]; + if (index < nCachedObjects) { + const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex], lastIndex = --nObjects, lastObject = objects[lastIndex]; + indicesByUUID[lastCachedObject.uuid] = index; + objects[index] = lastCachedObject; + indicesByUUID[lastObject.uuid] = firstActiveIndex; + objects[firstActiveIndex] = lastObject; + objects.pop(); + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex], last = bindingsForPath[lastIndex]; + bindingsForPath[index] = lastCached; + bindingsForPath[firstActiveIndex] = last; + bindingsForPath.pop(); + } + } else { + const lastIndex = --nObjects, lastObject = objects[lastIndex]; + if (lastIndex > 0) { + indicesByUUID[lastObject.uuid] = index; + } + objects[index] = lastObject; + objects.pop(); + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j]; + bindingsForPath[index] = bindingsForPath[lastIndex]; + bindingsForPath.pop(); + } + } + } + } + this.nCachedObjects_ = nCachedObjects; + } + // Internal interface used by befriended PropertyBinding.Composite: + subscribe_(path, parsedPath) { + const indicesByPath = this._bindingsIndicesByPath; + let index = indicesByPath[path]; + const bindings = this._bindings; + if (index !== void 0) return bindings[index]; + const paths = this._paths, parsedPaths = this._parsedPaths, objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, bindingsForPath = new Array(nObjects); + index = bindings.length; + indicesByPath[path] = index; + paths.push(path); + parsedPaths.push(parsedPath); + bindings.push(bindingsForPath); + for (let i = nCachedObjects, n = objects.length; i !== n; ++i) { + const object = objects[i]; + bindingsForPath[i] = new PropertyBinding(object, path, parsedPath); + } + return bindingsForPath; + } + unsubscribe_(path) { + const indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[path]; + if (index !== void 0) { + const paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, lastBindingsIndex = bindings.length - 1, lastBindings = bindings[lastBindingsIndex], lastBindingsPath = path[lastBindingsIndex]; + indicesByPath[lastBindingsPath] = index; + bindings[index] = lastBindings; + bindings.pop(); + parsedPaths[index] = parsedPaths[lastBindingsIndex]; + parsedPaths.pop(); + paths[index] = paths[lastBindingsIndex]; + paths.pop(); + } + } +} +class AnimationAction { + static { + __name(this, "AnimationAction"); + } + constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) { + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot; + this.blendMode = blendMode; + const tracks = clip.tracks, nTracks = tracks.length, interpolants = new Array(nTracks); + const interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + for (let i = 0; i !== nTracks; ++i) { + const interpolant = tracks[i].createInterpolant(null); + interpolants[i] = interpolant; + interpolant.settings = interpolantSettings; + } + this._interpolantSettings = interpolantSettings; + this._interpolants = interpolants; + this._propertyBindings = new Array(nTracks); + this._cacheIndex = null; + this._byClipCacheIndex = null; + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + this.loop = LoopRepeat; + this._loopCount = -1; + this._startTime = null; + this.time = 0; + this.timeScale = 1; + this._effectiveTimeScale = 1; + this.weight = 1; + this._effectiveWeight = 1; + this.repetitions = Infinity; + this.paused = false; + this.enabled = true; + this.clampWhenFinished = false; + this.zeroSlopeAtStart = true; + this.zeroSlopeAtEnd = true; + } + // State & Scheduling + play() { + this._mixer._activateAction(this); + return this; + } + stop() { + this._mixer._deactivateAction(this); + return this.reset(); + } + reset() { + this.paused = false; + this.enabled = true; + this.time = 0; + this._loopCount = -1; + this._startTime = null; + return this.stopFading().stopWarping(); + } + isRunning() { + return this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this); + } + // return true when play has been called + isScheduled() { + return this._mixer._isActiveAction(this); + } + startAt(time) { + this._startTime = time; + return this; + } + setLoop(mode, repetitions) { + this.loop = mode; + this.repetitions = repetitions; + return this; + } + // Weight + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight(weight) { + this.weight = weight; + this._effectiveWeight = this.enabled ? weight : 0; + return this.stopFading(); + } + // return the weight considering fading and .enabled + getEffectiveWeight() { + return this._effectiveWeight; + } + fadeIn(duration) { + return this._scheduleFading(duration, 0, 1); + } + fadeOut(duration) { + return this._scheduleFading(duration, 1, 0); + } + crossFadeFrom(fadeOutAction, duration, warp) { + fadeOutAction.fadeOut(duration); + this.fadeIn(duration); + if (warp) { + const fadeInDuration = this._clip.duration, fadeOutDuration = fadeOutAction._clip.duration, startEndRatio = fadeOutDuration / fadeInDuration, endStartRatio = fadeInDuration / fadeOutDuration; + fadeOutAction.warp(1, startEndRatio, duration); + this.warp(endStartRatio, 1, duration); + } + return this; + } + crossFadeTo(fadeInAction, duration, warp) { + return fadeInAction.crossFadeFrom(this, duration, warp); + } + stopFading() { + const weightInterpolant = this._weightInterpolant; + if (weightInterpolant !== null) { + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant(weightInterpolant); + } + return this; + } + // Time Scale Control + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale(timeScale) { + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + return this.stopWarping(); + } + // return the time scale considering warping and .paused + getEffectiveTimeScale() { + return this._effectiveTimeScale; + } + setDuration(duration) { + this.timeScale = this._clip.duration / duration; + return this.stopWarping(); + } + syncWith(action) { + this.time = action.time; + this.timeScale = action.timeScale; + return this.stopWarping(); + } + halt(duration) { + return this.warp(this._effectiveTimeScale, 0, duration); + } + warp(startTimeScale, endTimeScale, duration) { + const mixer = this._mixer, now2 = mixer.time, timeScale = this.timeScale; + let interpolant = this._timeScaleInterpolant; + if (interpolant === null) { + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + } + const times = interpolant.parameterPositions, values = interpolant.sampleValues; + times[0] = now2; + times[1] = now2 + duration; + values[0] = startTimeScale / timeScale; + values[1] = endTimeScale / timeScale; + return this; + } + stopWarping() { + const timeScaleInterpolant = this._timeScaleInterpolant; + if (timeScaleInterpolant !== null) { + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant(timeScaleInterpolant); + } + return this; + } + // Object Accessors + getMixer() { + return this._mixer; + } + getClip() { + return this._clip; + } + getRoot() { + return this._localRoot || this._mixer._root; + } + // Interna + _update(time, deltaTime, timeDirection, accuIndex) { + if (!this.enabled) { + this._updateWeight(time); + return; + } + const startTime = this._startTime; + if (startTime !== null) { + const timeRunning = (time - startTime) * timeDirection; + if (timeRunning < 0 || timeDirection === 0) { + deltaTime = 0; + } else { + this._startTime = null; + deltaTime = timeDirection * timeRunning; + } + } + deltaTime *= this._updateTimeScale(time); + const clipTime = this._updateTime(deltaTime); + const weight = this._updateWeight(time); + if (weight > 0) { + const interpolants = this._interpolants; + const propertyMixers = this._propertyBindings; + switch (this.blendMode) { + case AdditiveAnimationBlendMode: + for (let j = 0, m = interpolants.length; j !== m; ++j) { + interpolants[j].evaluate(clipTime); + propertyMixers[j].accumulateAdditive(weight); + } + break; + case NormalAnimationBlendMode: + default: + for (let j = 0, m = interpolants.length; j !== m; ++j) { + interpolants[j].evaluate(clipTime); + propertyMixers[j].accumulate(accuIndex, weight); + } + } + } + } + _updateWeight(time) { + let weight = 0; + if (this.enabled) { + weight = this.weight; + const interpolant = this._weightInterpolant; + if (interpolant !== null) { + const interpolantValue = interpolant.evaluate(time)[0]; + weight *= interpolantValue; + if (time > interpolant.parameterPositions[1]) { + this.stopFading(); + if (interpolantValue === 0) { + this.enabled = false; + } + } + } + } + this._effectiveWeight = weight; + return weight; + } + _updateTimeScale(time) { + let timeScale = 0; + if (!this.paused) { + timeScale = this.timeScale; + const interpolant = this._timeScaleInterpolant; + if (interpolant !== null) { + const interpolantValue = interpolant.evaluate(time)[0]; + timeScale *= interpolantValue; + if (time > interpolant.parameterPositions[1]) { + this.stopWarping(); + if (timeScale === 0) { + this.paused = true; + } else { + this.timeScale = timeScale; + } + } + } + } + this._effectiveTimeScale = timeScale; + return timeScale; + } + _updateTime(deltaTime) { + const duration = this._clip.duration; + const loop = this.loop; + let time = this.time + deltaTime; + let loopCount = this._loopCount; + const pingPong = loop === LoopPingPong; + if (deltaTime === 0) { + if (loopCount === -1) return time; + return pingPong && (loopCount & 1) === 1 ? duration - time : time; + } + if (loop === LoopOnce) { + if (loopCount === -1) { + this._loopCount = 0; + this._setEndings(true, true, false); + } + handle_stop: { + if (time >= duration) { + time = duration; + } else if (time < 0) { + time = 0; + } else { + this.time = time; + break handle_stop; + } + if (this.clampWhenFinished) this.paused = true; + else this.enabled = false; + this.time = time; + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: deltaTime < 0 ? -1 : 1 + }); + } + } else { + if (loopCount === -1) { + if (deltaTime >= 0) { + loopCount = 0; + this._setEndings(true, this.repetitions === 0, pingPong); + } else { + this._setEndings(this.repetitions === 0, true, pingPong); + } + } + if (time >= duration || time < 0) { + const loopDelta = Math.floor(time / duration); + time -= duration * loopDelta; + loopCount += Math.abs(loopDelta); + const pending = this.repetitions - loopCount; + if (pending <= 0) { + if (this.clampWhenFinished) this.paused = true; + else this.enabled = false; + time = deltaTime > 0 ? duration : 0; + this.time = time; + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: deltaTime > 0 ? 1 : -1 + }); + } else { + if (pending === 1) { + const atStart = deltaTime < 0; + this._setEndings(atStart, !atStart, pingPong); + } else { + this._setEndings(false, false, pingPong); + } + this._loopCount = loopCount; + this.time = time; + this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta + }); + } + } else { + this.time = time; + } + if (pingPong && (loopCount & 1) === 1) { + return duration - time; + } + } + return time; + } + _setEndings(atStart, atEnd, pingPong) { + const settings = this._interpolantSettings; + if (pingPong) { + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + } else { + if (atStart) { + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + } else { + settings.endingStart = WrapAroundEnding; + } + if (atEnd) { + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + } else { + settings.endingEnd = WrapAroundEnding; + } + } + } + _scheduleFading(duration, weightNow, weightThen) { + const mixer = this._mixer, now2 = mixer.time; + let interpolant = this._weightInterpolant; + if (interpolant === null) { + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + } + const times = interpolant.parameterPositions, values = interpolant.sampleValues; + times[0] = now2; + values[0] = weightNow; + times[1] = now2 + duration; + values[1] = weightThen; + return this; + } +} +const _controlInterpolantsResultBuffer = new Float32Array(1); +class AnimationMixer extends EventDispatcher { + static { + __name(this, "AnimationMixer"); + } + constructor(root) { + super(); + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + this.time = 0; + this.timeScale = 1; + } + _bindAction(action, prototypeAction) { + const root = action._localRoot || this._root, tracks = action._clip.tracks, nTracks = tracks.length, bindings = action._propertyBindings, interpolants = action._interpolants, rootUuid = root.uuid, bindingsByRoot = this._bindingsByRootAndName; + let bindingsByName = bindingsByRoot[rootUuid]; + if (bindingsByName === void 0) { + bindingsByName = {}; + bindingsByRoot[rootUuid] = bindingsByName; + } + for (let i = 0; i !== nTracks; ++i) { + const track = tracks[i], trackName = track.name; + let binding = bindingsByName[trackName]; + if (binding !== void 0) { + ++binding.referenceCount; + bindings[i] = binding; + } else { + binding = bindings[i]; + if (binding !== void 0) { + if (binding._cacheIndex === null) { + ++binding.referenceCount; + this._addInactiveBinding(binding, rootUuid, trackName); + } + continue; + } + const path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath; + binding = new PropertyMixer( + PropertyBinding.create(root, trackName, path), + track.ValueTypeName, + track.getValueSize() + ); + ++binding.referenceCount; + this._addInactiveBinding(binding, rootUuid, trackName); + bindings[i] = binding; + } + interpolants[i].resultBuffer = binding.buffer; + } + } + _activateAction(action) { + if (!this._isActiveAction(action)) { + if (action._cacheIndex === null) { + const rootUuid = (action._localRoot || this._root).uuid, clipUuid = action._clip.uuid, actionsForClip = this._actionsByClip[clipUuid]; + this._bindAction( + action, + actionsForClip && actionsForClip.knownActions[0] + ); + this._addInactiveAction(action, clipUuid, rootUuid); + } + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (binding.useCount++ === 0) { + this._lendBinding(binding); + binding.saveOriginalState(); + } + } + this._lendAction(action); + } + } + _deactivateAction(action) { + if (this._isActiveAction(action)) { + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (--binding.useCount === 0) { + binding.restoreOriginalState(); + this._takeBackBinding(binding); + } + } + this._takeBackAction(action); + } + } + // Memory manager + _initMemoryManager() { + this._actions = []; + this._nActiveActions = 0; + this._actionsByClip = {}; + this._bindings = []; + this._nActiveBindings = 0; + this._bindingsByRootAndName = {}; + this._controlInterpolants = []; + this._nActiveControlInterpolants = 0; + const scope = this; + this.stats = { + actions: { + get total() { + return scope._actions.length; + }, + get inUse() { + return scope._nActiveActions; + } + }, + bindings: { + get total() { + return scope._bindings.length; + }, + get inUse() { + return scope._nActiveBindings; + } + }, + controlInterpolants: { + get total() { + return scope._controlInterpolants.length; + }, + get inUse() { + return scope._nActiveControlInterpolants; + } + } + }; + } + // Memory management for AnimationAction objects + _isActiveAction(action) { + const index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + } + _addInactiveAction(action, clipUuid, rootUuid) { + const actions = this._actions, actionsByClip = this._actionsByClip; + let actionsForClip = actionsByClip[clipUuid]; + if (actionsForClip === void 0) { + actionsForClip = { + knownActions: [action], + actionByRoot: {} + }; + action._byClipCacheIndex = 0; + actionsByClip[clipUuid] = actionsForClip; + } else { + const knownActions = actionsForClip.knownActions; + action._byClipCacheIndex = knownActions.length; + knownActions.push(action); + } + action._cacheIndex = actions.length; + actions.push(action); + actionsForClip.actionByRoot[rootUuid] = action; + } + _removeInactiveAction(action) { + const actions = this._actions, lastInactiveAction = actions[actions.length - 1], cacheIndex = action._cacheIndex; + lastInactiveAction._cacheIndex = cacheIndex; + actions[cacheIndex] = lastInactiveAction; + actions.pop(); + action._cacheIndex = null; + const clipUuid = action._clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid], knownActionsForClip = actionsForClip.knownActions, lastKnownAction = knownActionsForClip[knownActionsForClip.length - 1], byClipCacheIndex = action._byClipCacheIndex; + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[byClipCacheIndex] = lastKnownAction; + knownActionsForClip.pop(); + action._byClipCacheIndex = null; + const actionByRoot = actionsForClip.actionByRoot, rootUuid = (action._localRoot || this._root).uuid; + delete actionByRoot[rootUuid]; + if (knownActionsForClip.length === 0) { + delete actionsByClip[clipUuid]; + } + this._removeInactiveBindingsForAction(action); + } + _removeInactiveBindingsForAction(action) { + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (--binding.referenceCount === 0) { + this._removeInactiveBinding(binding); + } + } + } + _lendAction(action) { + const actions = this._actions, prevIndex = action._cacheIndex, lastActiveIndex = this._nActiveActions++, firstInactiveAction = actions[lastActiveIndex]; + action._cacheIndex = lastActiveIndex; + actions[lastActiveIndex] = action; + firstInactiveAction._cacheIndex = prevIndex; + actions[prevIndex] = firstInactiveAction; + } + _takeBackAction(action) { + const actions = this._actions, prevIndex = action._cacheIndex, firstInactiveIndex = --this._nActiveActions, lastActiveAction = actions[firstInactiveIndex]; + action._cacheIndex = firstInactiveIndex; + actions[firstInactiveIndex] = action; + lastActiveAction._cacheIndex = prevIndex; + actions[prevIndex] = lastActiveAction; + } + // Memory management for PropertyMixer objects + _addInactiveBinding(binding, rootUuid, trackName) { + const bindingsByRoot = this._bindingsByRootAndName, bindings = this._bindings; + let bindingByName = bindingsByRoot[rootUuid]; + if (bindingByName === void 0) { + bindingByName = {}; + bindingsByRoot[rootUuid] = bindingByName; + } + bindingByName[trackName] = binding; + binding._cacheIndex = bindings.length; + bindings.push(binding); + } + _removeInactiveBinding(binding) { + const bindings = this._bindings, propBinding = binding.binding, rootUuid = propBinding.rootNode.uuid, trackName = propBinding.path, bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid], lastInactiveBinding = bindings[bindings.length - 1], cacheIndex = binding._cacheIndex; + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[cacheIndex] = lastInactiveBinding; + bindings.pop(); + delete bindingByName[trackName]; + if (Object.keys(bindingByName).length === 0) { + delete bindingsByRoot[rootUuid]; + } + } + _lendBinding(binding) { + const bindings = this._bindings, prevIndex = binding._cacheIndex, lastActiveIndex = this._nActiveBindings++, firstInactiveBinding = bindings[lastActiveIndex]; + binding._cacheIndex = lastActiveIndex; + bindings[lastActiveIndex] = binding; + firstInactiveBinding._cacheIndex = prevIndex; + bindings[prevIndex] = firstInactiveBinding; + } + _takeBackBinding(binding) { + const bindings = this._bindings, prevIndex = binding._cacheIndex, firstInactiveIndex = --this._nActiveBindings, lastActiveBinding = bindings[firstInactiveIndex]; + binding._cacheIndex = firstInactiveIndex; + bindings[firstInactiveIndex] = binding; + lastActiveBinding._cacheIndex = prevIndex; + bindings[prevIndex] = lastActiveBinding; + } + // Memory management of Interpolants for weight and time scale + _lendControlInterpolant() { + const interpolants = this._controlInterpolants, lastActiveIndex = this._nActiveControlInterpolants++; + let interpolant = interpolants[lastActiveIndex]; + if (interpolant === void 0) { + interpolant = new LinearInterpolant( + new Float32Array(2), + new Float32Array(2), + 1, + _controlInterpolantsResultBuffer + ); + interpolant.__cacheIndex = lastActiveIndex; + interpolants[lastActiveIndex] = interpolant; + } + return interpolant; + } + _takeBackControlInterpolant(interpolant) { + const interpolants = this._controlInterpolants, prevIndex = interpolant.__cacheIndex, firstInactiveIndex = --this._nActiveControlInterpolants, lastActiveInterpolant = interpolants[firstInactiveIndex]; + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[firstInactiveIndex] = interpolant; + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[prevIndex] = lastActiveInterpolant; + } + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction(clip, optionalRoot, blendMode) { + const root = optionalRoot || this._root, rootUuid = root.uuid; + let clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip; + const clipUuid = clipObject !== null ? clipObject.uuid : clip; + const actionsForClip = this._actionsByClip[clipUuid]; + let prototypeAction = null; + if (blendMode === void 0) { + if (clipObject !== null) { + blendMode = clipObject.blendMode; + } else { + blendMode = NormalAnimationBlendMode; + } + } + if (actionsForClip !== void 0) { + const existingAction = actionsForClip.actionByRoot[rootUuid]; + if (existingAction !== void 0 && existingAction.blendMode === blendMode) { + return existingAction; + } + prototypeAction = actionsForClip.knownActions[0]; + if (clipObject === null) + clipObject = prototypeAction._clip; + } + if (clipObject === null) return null; + const newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode); + this._bindAction(newAction, prototypeAction); + this._addInactiveAction(newAction, clipUuid, rootUuid); + return newAction; + } + // get an existing action + existingAction(clip, optionalRoot) { + const root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip, clipUuid = clipObject ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[clipUuid]; + if (actionsForClip !== void 0) { + return actionsForClip.actionByRoot[rootUuid] || null; + } + return null; + } + // deactivates all previously scheduled actions + stopAllAction() { + const actions = this._actions, nActions = this._nActiveActions; + for (let i = nActions - 1; i >= 0; --i) { + actions[i].stop(); + } + return this; + } + // advance the time and update apply the animation + update(deltaTime) { + deltaTime *= this.timeScale; + const actions = this._actions, nActions = this._nActiveActions, time = this.time += deltaTime, timeDirection = Math.sign(deltaTime), accuIndex = this._accuIndex ^= 1; + for (let i = 0; i !== nActions; ++i) { + const action = actions[i]; + action._update(time, deltaTime, timeDirection, accuIndex); + } + const bindings = this._bindings, nBindings = this._nActiveBindings; + for (let i = 0; i !== nBindings; ++i) { + bindings[i].apply(accuIndex); + } + return this; + } + // Allows you to seek to a specific time in an animation. + setTime(timeInSeconds) { + this.time = 0; + for (let i = 0; i < this._actions.length; i++) { + this._actions[i].time = 0; + } + return this.update(timeInSeconds); + } + // return this mixer's root target object + getRoot() { + return this._root; + } + // free all resources specific to a particular clip + uncacheClip(clip) { + const actions = this._actions, clipUuid = clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid]; + if (actionsForClip !== void 0) { + const actionsToRemove = actionsForClip.knownActions; + for (let i = 0, n = actionsToRemove.length; i !== n; ++i) { + const action = actionsToRemove[i]; + this._deactivateAction(action); + const cacheIndex = action._cacheIndex, lastInactiveAction = actions[actions.length - 1]; + action._cacheIndex = null; + action._byClipCacheIndex = null; + lastInactiveAction._cacheIndex = cacheIndex; + actions[cacheIndex] = lastInactiveAction; + actions.pop(); + this._removeInactiveBindingsForAction(action); + } + delete actionsByClip[clipUuid]; + } + } + // free all resources specific to a particular root target object + uncacheRoot(root) { + const rootUuid = root.uuid, actionsByClip = this._actionsByClip; + for (const clipUuid in actionsByClip) { + const actionByRoot = actionsByClip[clipUuid].actionByRoot, action = actionByRoot[rootUuid]; + if (action !== void 0) { + this._deactivateAction(action); + this._removeInactiveAction(action); + } + } + const bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid]; + if (bindingByName !== void 0) { + for (const trackName in bindingByName) { + const binding = bindingByName[trackName]; + binding.restoreOriginalState(); + this._removeInactiveBinding(binding); + } + } + } + // remove a targeted clip from the cache + uncacheAction(clip, optionalRoot) { + const action = this.existingAction(clip, optionalRoot); + if (action !== null) { + this._deactivateAction(action); + this._removeInactiveAction(action); + } + } +} +class Uniform { + static { + __name(this, "Uniform"); + } + constructor(value) { + this.value = value; + } + clone() { + return new Uniform(this.value.clone === void 0 ? this.value : this.value.clone()); + } +} +let _id = 0; +class UniformsGroup extends EventDispatcher { + static { + __name(this, "UniformsGroup"); + } + constructor() { + super(); + this.isUniformsGroup = true; + Object.defineProperty(this, "id", { value: _id++ }); + this.name = ""; + this.usage = StaticDrawUsage; + this.uniforms = []; + } + add(uniform) { + this.uniforms.push(uniform); + return this; + } + remove(uniform) { + const index = this.uniforms.indexOf(uniform); + if (index !== -1) this.uniforms.splice(index, 1); + return this; + } + setName(name) { + this.name = name; + return this; + } + setUsage(value) { + this.usage = value; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + return this; + } + copy(source) { + this.name = source.name; + this.usage = source.usage; + const uniformsSource = source.uniforms; + this.uniforms.length = 0; + for (let i = 0, l = uniformsSource.length; i < l; i++) { + const uniforms = Array.isArray(uniformsSource[i]) ? uniformsSource[i] : [uniformsSource[i]]; + for (let j = 0; j < uniforms.length; j++) { + this.uniforms.push(uniforms[j].clone()); + } + } + return this; + } + clone() { + return new this.constructor().copy(this); + } +} +class InstancedInterleavedBuffer extends InterleavedBuffer { + static { + __name(this, "InstancedInterleavedBuffer"); + } + constructor(array, stride, meshPerAttribute = 1) { + super(array, stride); + this.isInstancedInterleavedBuffer = true; + this.meshPerAttribute = meshPerAttribute; + } + copy(source) { + super.copy(source); + this.meshPerAttribute = source.meshPerAttribute; + return this; + } + clone(data) { + const ib = super.clone(data); + ib.meshPerAttribute = this.meshPerAttribute; + return ib; + } + toJSON(data) { + const json = super.toJSON(data); + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + return json; + } +} +class GLBufferAttribute { + static { + __name(this, "GLBufferAttribute"); + } + constructor(buffer, type, itemSize, elementSize, count) { + this.isGLBufferAttribute = true; + this.name = ""; + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + this.version = 0; + } + set needsUpdate(value) { + if (value === true) this.version++; + } + setBuffer(buffer) { + this.buffer = buffer; + return this; + } + setType(type, elementSize) { + this.type = type; + this.elementSize = elementSize; + return this; + } + setItemSize(itemSize) { + this.itemSize = itemSize; + return this; + } + setCount(count) { + this.count = count; + return this; + } +} +const _matrix = /* @__PURE__ */ new Matrix4(); +class Raycaster { + static { + __name(this, "Raycaster"); + } + constructor(origin, direction, near = 0, far = Infinity) { + this.ray = new Ray(origin, direction); + this.near = near; + this.far = far; + this.camera = null; + this.layers = new Layers(); + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + } + set(origin, direction) { + this.ray.set(origin, direction); + } + setFromCamera(coords, camera) { + if (camera.isPerspectiveCamera) { + this.ray.origin.setFromMatrixPosition(camera.matrixWorld); + this.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize(); + this.camera = camera; + } else if (camera.isOrthographicCamera) { + this.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); + this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld); + this.camera = camera; + } else { + console.error("THREE.Raycaster: Unsupported camera type: " + camera.type); + } + } + setFromXRController(controller) { + _matrix.identity().extractRotation(controller.matrixWorld); + this.ray.origin.setFromMatrixPosition(controller.matrixWorld); + this.ray.direction.set(0, 0, -1).applyMatrix4(_matrix); + return this; + } + intersectObject(object, recursive = true, intersects2 = []) { + intersect(object, this, intersects2, recursive); + intersects2.sort(ascSort); + return intersects2; + } + intersectObjects(objects, recursive = true, intersects2 = []) { + for (let i = 0, l = objects.length; i < l; i++) { + intersect(objects[i], this, intersects2, recursive); + } + intersects2.sort(ascSort); + return intersects2; + } +} +function ascSort(a, b) { + return a.distance - b.distance; +} +__name(ascSort, "ascSort"); +function intersect(object, raycaster, intersects2, recursive) { + let propagate = true; + if (object.layers.test(raycaster.layers)) { + const result = object.raycast(raycaster, intersects2); + if (result === false) propagate = false; + } + if (propagate === true && recursive === true) { + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + intersect(children[i], raycaster, intersects2, true); + } + } +} +__name(intersect, "intersect"); +class Spherical { + static { + __name(this, "Spherical"); + } + constructor(radius = 1, phi = 0, theta = 0) { + this.radius = radius; + this.phi = phi; + this.theta = theta; + return this; + } + set(radius, phi, theta) { + this.radius = radius; + this.phi = phi; + this.theta = theta; + return this; + } + copy(other) { + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + return this; + } + // restrict phi to be between EPS and PI-EPS + makeSafe() { + const EPS = 1e-6; + this.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi)); + return this; + } + setFromVector3(v) { + return this.setFromCartesianCoords(v.x, v.y, v.z); + } + setFromCartesianCoords(x, y, z) { + this.radius = Math.sqrt(x * x + y * y + z * z); + if (this.radius === 0) { + this.theta = 0; + this.phi = 0; + } else { + this.theta = Math.atan2(x, z); + this.phi = Math.acos(clamp(y / this.radius, -1, 1)); + } + return this; + } + clone() { + return new this.constructor().copy(this); + } +} +class Cylindrical { + static { + __name(this, "Cylindrical"); + } + constructor(radius = 1, theta = 0, y = 0) { + this.radius = radius; + this.theta = theta; + this.y = y; + return this; + } + set(radius, theta, y) { + this.radius = radius; + this.theta = theta; + this.y = y; + return this; + } + copy(other) { + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + return this; + } + setFromVector3(v) { + return this.setFromCartesianCoords(v.x, v.y, v.z); + } + setFromCartesianCoords(x, y, z) { + this.radius = Math.sqrt(x * x + z * z); + this.theta = Math.atan2(x, z); + this.y = y; + return this; + } + clone() { + return new this.constructor().copy(this); + } +} +class Matrix2 { + static { + __name(this, "Matrix2"); + } + constructor(n11, n12, n21, n22) { + Matrix2.prototype.isMatrix2 = true; + this.elements = [ + 1, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n21, n22); + } + } + identity() { + this.set( + 1, + 0, + 0, + 1 + ); + return this; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 4; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + set(n11, n12, n21, n22) { + const te2 = this.elements; + te2[0] = n11; + te2[2] = n12; + te2[1] = n21; + te2[3] = n22; + return this; + } +} +const _vector$4 = /* @__PURE__ */ new Vector2(); +class Box2 { + static { + __name(this, "Box2"); + } + constructor(min = new Vector2(Infinity, Infinity), max2 = new Vector2(-Infinity, -Infinity)) { + this.isBox2 = true; + this.min = min; + this.max = max2; + } + set(min, max2) { + this.min.copy(min); + this.max.copy(max2); + return this; + } + setFromPoints(points) { + this.makeEmpty(); + for (let i = 0, il = points.length; i < il; i++) { + this.expandByPoint(points[i]); + } + return this; + } + setFromCenterAndSize(center, size) { + const halfSize = _vector$4.copy(size).multiplyScalar(0.5); + this.min.copy(center).sub(halfSize); + this.max.copy(center).add(halfSize); + return this; + } + clone() { + return new this.constructor().copy(this); + } + copy(box) { + this.min.copy(box.min); + this.max.copy(box.max); + return this; + } + makeEmpty() { + this.min.x = this.min.y = Infinity; + this.max.x = this.max.y = -Infinity; + return this; + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y; + } + getCenter(target) { + return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); + } + getSize(target) { + return this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min); + } + expandByPoint(point) { + this.min.min(point); + this.max.max(point); + return this; + } + expandByVector(vector) { + this.min.sub(vector); + this.max.add(vector); + return this; + } + expandByScalar(scalar) { + this.min.addScalar(-scalar); + this.max.addScalar(scalar); + return this; + } + containsPoint(point) { + return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y; + } + containsBox(box) { + return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; + } + getParameter(point, target) { + return target.set( + (point.x - this.min.x) / (this.max.x - this.min.x), + (point.y - this.min.y) / (this.max.y - this.min.y) + ); + } + intersectsBox(box) { + return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y; + } + clampPoint(point, target) { + return target.copy(point).clamp(this.min, this.max); + } + distanceToPoint(point) { + return this.clampPoint(point, _vector$4).distanceTo(point); + } + intersect(box) { + this.min.max(box.min); + this.max.min(box.max); + if (this.isEmpty()) this.makeEmpty(); + return this; + } + union(box) { + this.min.min(box.min); + this.max.max(box.max); + return this; + } + translate(offset) { + this.min.add(offset); + this.max.add(offset); + return this; + } + equals(box) { + return box.min.equals(this.min) && box.max.equals(this.max); + } +} +const _startP = /* @__PURE__ */ new Vector3(); +const _startEnd = /* @__PURE__ */ new Vector3(); +class Line3 { + static { + __name(this, "Line3"); + } + constructor(start = new Vector3(), end = new Vector3()) { + this.start = start; + this.end = end; + } + set(start, end) { + this.start.copy(start); + this.end.copy(end); + return this; + } + copy(line) { + this.start.copy(line.start); + this.end.copy(line.end); + return this; + } + getCenter(target) { + return target.addVectors(this.start, this.end).multiplyScalar(0.5); + } + delta(target) { + return target.subVectors(this.end, this.start); + } + distanceSq() { + return this.start.distanceToSquared(this.end); + } + distance() { + return this.start.distanceTo(this.end); + } + at(t2, target) { + return this.delta(target).multiplyScalar(t2).add(this.start); + } + closestPointToPointParameter(point, clampToLine) { + _startP.subVectors(point, this.start); + _startEnd.subVectors(this.end, this.start); + const startEnd2 = _startEnd.dot(_startEnd); + const startEnd_startP = _startEnd.dot(_startP); + let t2 = startEnd_startP / startEnd2; + if (clampToLine) { + t2 = clamp(t2, 0, 1); + } + return t2; + } + closestPointToPoint(point, clampToLine, target) { + const t2 = this.closestPointToPointParameter(point, clampToLine); + return this.delta(target).multiplyScalar(t2).add(this.start); + } + applyMatrix4(matrix) { + this.start.applyMatrix4(matrix); + this.end.applyMatrix4(matrix); + return this; + } + equals(line) { + return line.start.equals(this.start) && line.end.equals(this.end); + } + clone() { + return new this.constructor().copy(this); + } +} +const _vector$3 = /* @__PURE__ */ new Vector3(); +class SpotLightHelper extends Object3D { + static { + __name(this, "SpotLightHelper"); + } + constructor(light, color) { + super(); + this.light = light; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "SpotLightHelper"; + const geometry = new BufferGeometry(); + const positions = [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + -1, + 1 + ]; + for (let i = 0, j = 1, l = 32; i < l; i++, j++) { + const p1 = i / l * Math.PI * 2; + const p2 = j / l * Math.PI * 2; + positions.push( + Math.cos(p1), + Math.sin(p1), + 1, + Math.cos(p2), + Math.sin(p2), + 1 + ); + } + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + const material = new LineBasicMaterial({ fog: false, toneMapped: false }); + this.cone = new LineSegments(geometry, material); + this.add(this.cone); + this.update(); + } + dispose() { + this.cone.geometry.dispose(); + this.cone.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + this.light.target.updateWorldMatrix(true, false); + if (this.parent) { + this.parent.updateWorldMatrix(true); + this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld); + } else { + this.matrix.copy(this.light.matrixWorld); + } + this.matrixWorld.copy(this.light.matrixWorld); + const coneLength = this.light.distance ? this.light.distance : 1e3; + const coneWidth = coneLength * Math.tan(this.light.angle); + this.cone.scale.set(coneWidth, coneWidth, coneLength); + _vector$3.setFromMatrixPosition(this.light.target.matrixWorld); + this.cone.lookAt(_vector$3); + if (this.color !== void 0) { + this.cone.material.color.set(this.color); + } else { + this.cone.material.color.copy(this.light.color); + } + } +} +const _vector$2 = /* @__PURE__ */ new Vector3(); +const _boneMatrix = /* @__PURE__ */ new Matrix4(); +const _matrixWorldInv = /* @__PURE__ */ new Matrix4(); +class SkeletonHelper extends LineSegments { + static { + __name(this, "SkeletonHelper"); + } + constructor(object) { + const bones = getBoneList(object); + const geometry = new BufferGeometry(); + const vertices = []; + const colors = []; + const color1 = new Color(0, 0, 1); + const color2 = new Color(0, 1, 0); + for (let i = 0; i < bones.length; i++) { + const bone = bones[i]; + if (bone.parent && bone.parent.isBone) { + vertices.push(0, 0, 0); + vertices.push(0, 0, 0); + colors.push(color1.r, color1.g, color1.b); + colors.push(color2.r, color2.g, color2.b); + } + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true }); + super(geometry, material); + this.isSkeletonHelper = true; + this.type = "SkeletonHelper"; + this.root = object; + this.bones = bones; + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + } + updateMatrixWorld(force) { + const bones = this.bones; + const geometry = this.geometry; + const position = geometry.getAttribute("position"); + _matrixWorldInv.copy(this.root.matrixWorld).invert(); + for (let i = 0, j = 0; i < bones.length; i++) { + const bone = bones[i]; + if (bone.parent && bone.parent.isBone) { + _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld); + _vector$2.setFromMatrixPosition(_boneMatrix); + position.setXYZ(j, _vector$2.x, _vector$2.y, _vector$2.z); + _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld); + _vector$2.setFromMatrixPosition(_boneMatrix); + position.setXYZ(j + 1, _vector$2.x, _vector$2.y, _vector$2.z); + j += 2; + } + } + geometry.getAttribute("position").needsUpdate = true; + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +function getBoneList(object) { + const boneList = []; + if (object.isBone === true) { + boneList.push(object); + } + for (let i = 0; i < object.children.length; i++) { + boneList.push.apply(boneList, getBoneList(object.children[i])); + } + return boneList; +} +__name(getBoneList, "getBoneList"); +class PointLightHelper extends Mesh { + static { + __name(this, "PointLightHelper"); + } + constructor(light, sphereSize, color) { + const geometry = new SphereGeometry(sphereSize, 4, 2); + const material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); + super(geometry, material); + this.light = light; + this.color = color; + this.type = "PointLightHelper"; + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + this.update(); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + if (this.color !== void 0) { + this.material.color.set(this.color); + } else { + this.material.color.copy(this.light.color); + } + } +} +const _vector$1 = /* @__PURE__ */ new Vector3(); +const _color1 = /* @__PURE__ */ new Color(); +const _color2 = /* @__PURE__ */ new Color(); +class HemisphereLightHelper extends Object3D { + static { + __name(this, "HemisphereLightHelper"); + } + constructor(light, size, color) { + super(); + this.light = light; + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "HemisphereLightHelper"; + const geometry = new OctahedronGeometry(size); + geometry.rotateY(Math.PI * 0.5); + this.material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); + if (this.color === void 0) this.material.vertexColors = true; + const position = geometry.getAttribute("position"); + const colors = new Float32Array(position.count * 3); + geometry.setAttribute("color", new BufferAttribute(colors, 3)); + this.add(new Mesh(geometry, this.material)); + this.update(); + } + dispose() { + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } + update() { + const mesh = this.children[0]; + if (this.color !== void 0) { + this.material.color.set(this.color); + } else { + const colors = mesh.geometry.getAttribute("color"); + _color1.copy(this.light.color); + _color2.copy(this.light.groundColor); + for (let i = 0, l = colors.count; i < l; i++) { + const color = i < l / 2 ? _color1 : _color2; + colors.setXYZ(i, color.r, color.g, color.b); + } + colors.needsUpdate = true; + } + this.light.updateWorldMatrix(true, false); + mesh.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate()); + } +} +class GridHelper extends LineSegments { + static { + __name(this, "GridHelper"); + } + constructor(size = 10, divisions = 10, color1 = 4473924, color2 = 8947848) { + color1 = new Color(color1); + color2 = new Color(color2); + const center = divisions / 2; + const step = size / divisions; + const halfSize = size / 2; + const vertices = [], colors = []; + for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) { + vertices.push(-halfSize, 0, k, halfSize, 0, k); + vertices.push(k, 0, -halfSize, k, 0, halfSize); + const color = i === center ? color1 : color2; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "GridHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +class PolarGridHelper extends LineSegments { + static { + __name(this, "PolarGridHelper"); + } + constructor(radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 4473924, color2 = 8947848) { + color1 = new Color(color1); + color2 = new Color(color2); + const vertices = []; + const colors = []; + if (sectors > 1) { + for (let i = 0; i < sectors; i++) { + const v = i / sectors * (Math.PI * 2); + const x = Math.sin(v) * radius; + const z = Math.cos(v) * radius; + vertices.push(0, 0, 0); + vertices.push(x, 0, z); + const color = i & 1 ? color1 : color2; + colors.push(color.r, color.g, color.b); + colors.push(color.r, color.g, color.b); + } + } + for (let i = 0; i < rings; i++) { + const color = i & 1 ? color1 : color2; + const r = radius - radius / rings * i; + for (let j = 0; j < divisions; j++) { + let v = j / divisions * (Math.PI * 2); + let x = Math.sin(v) * r; + let z = Math.cos(v) * r; + vertices.push(x, 0, z); + colors.push(color.r, color.g, color.b); + v = (j + 1) / divisions * (Math.PI * 2); + x = Math.sin(v) * r; + z = Math.cos(v) * r; + vertices.push(x, 0, z); + colors.push(color.r, color.g, color.b); + } + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "PolarGridHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +const _v1 = /* @__PURE__ */ new Vector3(); +const _v2 = /* @__PURE__ */ new Vector3(); +const _v3 = /* @__PURE__ */ new Vector3(); +class DirectionalLightHelper extends Object3D { + static { + __name(this, "DirectionalLightHelper"); + } + constructor(light, size, color) { + super(); + this.light = light; + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "DirectionalLightHelper"; + if (size === void 0) size = 1; + let geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([ + -size, + size, + 0, + size, + size, + 0, + size, + -size, + 0, + -size, + -size, + 0, + -size, + size, + 0 + ], 3)); + const material = new LineBasicMaterial({ fog: false, toneMapped: false }); + this.lightPlane = new Line(geometry, material); + this.add(this.lightPlane); + geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); + this.targetLine = new Line(geometry, material); + this.add(this.targetLine); + this.update(); + } + dispose() { + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + this.light.target.updateWorldMatrix(true, false); + _v1.setFromMatrixPosition(this.light.matrixWorld); + _v2.setFromMatrixPosition(this.light.target.matrixWorld); + _v3.subVectors(_v2, _v1); + this.lightPlane.lookAt(_v2); + if (this.color !== void 0) { + this.lightPlane.material.color.set(this.color); + this.targetLine.material.color.set(this.color); + } else { + this.lightPlane.material.color.copy(this.light.color); + this.targetLine.material.color.copy(this.light.color); + } + this.targetLine.lookAt(_v2); + this.targetLine.scale.z = _v3.length(); + } +} +const _vector = /* @__PURE__ */ new Vector3(); +const _camera = /* @__PURE__ */ new Camera(); +class CameraHelper extends LineSegments { + static { + __name(this, "CameraHelper"); + } + constructor(camera) { + const geometry = new BufferGeometry(); + const material = new LineBasicMaterial({ color: 16777215, vertexColors: true, toneMapped: false }); + const vertices = []; + const colors = []; + const pointMap = {}; + addLine("n1", "n2"); + addLine("n2", "n4"); + addLine("n4", "n3"); + addLine("n3", "n1"); + addLine("f1", "f2"); + addLine("f2", "f4"); + addLine("f4", "f3"); + addLine("f3", "f1"); + addLine("n1", "f1"); + addLine("n2", "f2"); + addLine("n3", "f3"); + addLine("n4", "f4"); + addLine("p", "n1"); + addLine("p", "n2"); + addLine("p", "n3"); + addLine("p", "n4"); + addLine("u1", "u2"); + addLine("u2", "u3"); + addLine("u3", "u1"); + addLine("c", "t"); + addLine("p", "c"); + addLine("cn1", "cn2"); + addLine("cn3", "cn4"); + addLine("cf1", "cf2"); + addLine("cf3", "cf4"); + function addLine(a, b) { + addPoint(a); + addPoint(b); + } + __name(addLine, "addLine"); + function addPoint(id2) { + vertices.push(0, 0, 0); + colors.push(0, 0, 0); + if (pointMap[id2] === void 0) { + pointMap[id2] = []; + } + pointMap[id2].push(vertices.length / 3 - 1); + } + __name(addPoint, "addPoint"); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + super(geometry, material); + this.type = "CameraHelper"; + this.camera = camera; + if (this.camera.updateProjectionMatrix) this.camera.updateProjectionMatrix(); + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + this.pointMap = pointMap; + this.update(); + const colorFrustum = new Color(16755200); + const colorCone = new Color(16711680); + const colorUp = new Color(43775); + const colorTarget = new Color(16777215); + const colorCross = new Color(3355443); + this.setColors(colorFrustum, colorCone, colorUp, colorTarget, colorCross); + } + setColors(frustum, cone, up, target, cross) { + const geometry = this.geometry; + const colorAttribute = geometry.getAttribute("color"); + colorAttribute.setXYZ(0, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(1, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(2, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(3, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(4, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(5, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(6, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(7, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(8, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(9, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(10, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(11, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(12, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(13, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(14, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(15, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(16, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(17, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(18, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(19, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(20, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(21, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(22, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(23, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(24, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(25, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(26, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(27, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(28, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(29, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(30, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(31, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(32, up.r, up.g, up.b); + colorAttribute.setXYZ(33, up.r, up.g, up.b); + colorAttribute.setXYZ(34, up.r, up.g, up.b); + colorAttribute.setXYZ(35, up.r, up.g, up.b); + colorAttribute.setXYZ(36, up.r, up.g, up.b); + colorAttribute.setXYZ(37, up.r, up.g, up.b); + colorAttribute.setXYZ(38, target.r, target.g, target.b); + colorAttribute.setXYZ(39, target.r, target.g, target.b); + colorAttribute.setXYZ(40, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(41, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(42, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(43, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(44, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(45, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(46, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(47, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(48, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(49, cross.r, cross.g, cross.b); + colorAttribute.needsUpdate = true; + } + update() { + const geometry = this.geometry; + const pointMap = this.pointMap; + const w = 1, h = 1; + _camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); + setPoint("c", pointMap, geometry, _camera, 0, 0, -1); + setPoint("t", pointMap, geometry, _camera, 0, 0, 1); + setPoint("n1", pointMap, geometry, _camera, -w, -h, -1); + setPoint("n2", pointMap, geometry, _camera, w, -h, -1); + setPoint("n3", pointMap, geometry, _camera, -w, h, -1); + setPoint("n4", pointMap, geometry, _camera, w, h, -1); + setPoint("f1", pointMap, geometry, _camera, -w, -h, 1); + setPoint("f2", pointMap, geometry, _camera, w, -h, 1); + setPoint("f3", pointMap, geometry, _camera, -w, h, 1); + setPoint("f4", pointMap, geometry, _camera, w, h, 1); + setPoint("u1", pointMap, geometry, _camera, w * 0.7, h * 1.1, -1); + setPoint("u2", pointMap, geometry, _camera, -w * 0.7, h * 1.1, -1); + setPoint("u3", pointMap, geometry, _camera, 0, h * 2, -1); + setPoint("cf1", pointMap, geometry, _camera, -w, 0, 1); + setPoint("cf2", pointMap, geometry, _camera, w, 0, 1); + setPoint("cf3", pointMap, geometry, _camera, 0, -h, 1); + setPoint("cf4", pointMap, geometry, _camera, 0, h, 1); + setPoint("cn1", pointMap, geometry, _camera, -w, 0, -1); + setPoint("cn2", pointMap, geometry, _camera, w, 0, -1); + setPoint("cn3", pointMap, geometry, _camera, 0, -h, -1); + setPoint("cn4", pointMap, geometry, _camera, 0, h, -1); + geometry.getAttribute("position").needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +function setPoint(point, pointMap, geometry, camera, x, y, z) { + _vector.set(x, y, z).unproject(camera); + const points = pointMap[point]; + if (points !== void 0) { + const position = geometry.getAttribute("position"); + for (let i = 0, l = points.length; i < l; i++) { + position.setXYZ(points[i], _vector.x, _vector.y, _vector.z); + } + } +} +__name(setPoint, "setPoint"); +const _box = /* @__PURE__ */ new Box3(); +class BoxHelper extends LineSegments { + static { + __name(this, "BoxHelper"); + } + constructor(object, color = 16776960) { + const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); + const positions = new Float32Array(8 * 3); + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute("position", new BufferAttribute(positions, 3)); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.type = "BoxHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update(object) { + if (object !== void 0) { + console.warn("THREE.BoxHelper: .update() has no longer arguments."); + } + if (this.object !== void 0) { + _box.setFromObject(this.object); + } + if (_box.isEmpty()) return; + const min = _box.min; + const max2 = _box.max; + const position = this.geometry.attributes.position; + const array = position.array; + array[0] = max2.x; + array[1] = max2.y; + array[2] = max2.z; + array[3] = min.x; + array[4] = max2.y; + array[5] = max2.z; + array[6] = min.x; + array[7] = min.y; + array[8] = max2.z; + array[9] = max2.x; + array[10] = min.y; + array[11] = max2.z; + array[12] = max2.x; + array[13] = max2.y; + array[14] = min.z; + array[15] = min.x; + array[16] = max2.y; + array[17] = min.z; + array[18] = min.x; + array[19] = min.y; + array[20] = min.z; + array[21] = max2.x; + array[22] = min.y; + array[23] = min.z; + position.needsUpdate = true; + this.geometry.computeBoundingSphere(); + } + setFromObject(object) { + this.object = object; + this.update(); + return this; + } + copy(source, recursive) { + super.copy(source, recursive); + this.object = source.object; + return this; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +class Box3Helper extends LineSegments { + static { + __name(this, "Box3Helper"); + } + constructor(box, color = 16776960) { + const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); + const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]; + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.box = box; + this.type = "Box3Helper"; + this.geometry.computeBoundingSphere(); + } + updateMatrixWorld(force) { + const box = this.box; + if (box.isEmpty()) return; + box.getCenter(this.position); + box.getSize(this.scale); + this.scale.multiplyScalar(0.5); + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +class PlaneHelper extends Line { + static { + __name(this, "PlaneHelper"); + } + constructor(plane, size = 1, hex = 16776960) { + const color = hex; + const positions = [1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.computeBoundingSphere(); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.type = "PlaneHelper"; + this.plane = plane; + this.size = size; + const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; + const geometry2 = new BufferGeometry(); + geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); + geometry2.computeBoundingSphere(); + this.add(new Mesh(geometry2, new MeshBasicMaterial({ color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false }))); + } + updateMatrixWorld(force) { + this.position.set(0, 0, 0); + this.scale.set(0.5 * this.size, 0.5 * this.size, 1); + this.lookAt(this.plane.normal); + this.translateZ(-this.plane.constant); + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } +} +const _axis = /* @__PURE__ */ new Vector3(); +let _lineGeometry, _coneGeometry; +class ArrowHelper extends Object3D { + static { + __name(this, "ArrowHelper"); + } + // dir is assumed to be normalized + constructor(dir = new Vector3(0, 0, 1), origin = new Vector3(0, 0, 0), length = 1, color = 16776960, headLength = length * 0.2, headWidth = headLength * 0.2) { + super(); + this.type = "ArrowHelper"; + if (_lineGeometry === void 0) { + _lineGeometry = new BufferGeometry(); + _lineGeometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3)); + _coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1); + _coneGeometry.translate(0, -0.5, 0); + } + this.position.copy(origin); + this.line = new Line(_lineGeometry, new LineBasicMaterial({ color, toneMapped: false })); + this.line.matrixAutoUpdate = false; + this.add(this.line); + this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ color, toneMapped: false })); + this.cone.matrixAutoUpdate = false; + this.add(this.cone); + this.setDirection(dir); + this.setLength(length, headLength, headWidth); + } + setDirection(dir) { + if (dir.y > 0.99999) { + this.quaternion.set(0, 0, 0, 1); + } else if (dir.y < -0.99999) { + this.quaternion.set(1, 0, 0, 0); + } else { + _axis.set(dir.z, 0, -dir.x).normalize(); + const radians = Math.acos(dir.y); + this.quaternion.setFromAxisAngle(_axis, radians); + } + } + setLength(length, headLength = length * 0.2, headWidth = headLength * 0.2) { + this.line.scale.set(1, Math.max(1e-4, length - headLength), 1); + this.line.updateMatrix(); + this.cone.scale.set(headWidth, headLength, headWidth); + this.cone.position.y = length; + this.cone.updateMatrix(); + } + setColor(color) { + this.line.material.color.set(color); + this.cone.material.color.set(color); + } + copy(source) { + super.copy(source, false); + this.line.copy(source.line); + this.cone.copy(source.cone); + return this; + } + dispose() { + this.line.geometry.dispose(); + this.line.material.dispose(); + this.cone.geometry.dispose(); + this.cone.material.dispose(); + } +} +class AxesHelper extends LineSegments { + static { + __name(this, "AxesHelper"); + } + constructor(size = 1) { + const vertices = [ + 0, + 0, + 0, + size, + 0, + 0, + 0, + 0, + 0, + 0, + size, + 0, + 0, + 0, + 0, + 0, + 0, + size + ]; + const colors = [ + 1, + 0, + 0, + 1, + 0.6, + 0, + 0, + 1, + 0, + 0.6, + 1, + 0, + 0, + 0, + 1, + 0, + 0.6, + 1 + ]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "AxesHelper"; + } + setColors(xAxisColor, yAxisColor, zAxisColor) { + const color = new Color(); + const array = this.geometry.attributes.color.array; + color.set(xAxisColor); + color.toArray(array, 0); + color.toArray(array, 3); + color.set(yAxisColor); + color.toArray(array, 6); + color.toArray(array, 9); + color.set(zAxisColor); + color.toArray(array, 12); + color.toArray(array, 15); + this.geometry.attributes.color.needsUpdate = true; + return this; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +} +class ShapePath { + static { + __name(this, "ShapePath"); + } + constructor() { + this.type = "ShapePath"; + this.color = new Color(); + this.subPaths = []; + this.currentPath = null; + } + moveTo(x, y) { + this.currentPath = new Path(); + this.subPaths.push(this.currentPath); + this.currentPath.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.currentPath.lineTo(x, y); + return this; + } + quadraticCurveTo(aCPx, aCPy, aX, aY) { + this.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY); + return this; + } + bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { + this.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY); + return this; + } + splineThru(pts) { + this.currentPath.splineThru(pts); + return this; + } + toShapes(isCCW) { + function toShapesNoHoles(inSubpaths) { + const shapes2 = []; + for (let i = 0, l = inSubpaths.length; i < l; i++) { + const tmpPath2 = inSubpaths[i]; + const tmpShape2 = new Shape(); + tmpShape2.curves = tmpPath2.curves; + shapes2.push(tmpShape2); + } + return shapes2; + } + __name(toShapesNoHoles, "toShapesNoHoles"); + function isPointInsidePolygon(inPt, inPolygon) { + const polyLen = inPolygon.length; + let inside = false; + for (let p = polyLen - 1, q = 0; q < polyLen; p = q++) { + let edgeLowPt = inPolygon[p]; + let edgeHighPt = inPolygon[q]; + let edgeDx = edgeHighPt.x - edgeLowPt.x; + let edgeDy = edgeHighPt.y - edgeLowPt.y; + if (Math.abs(edgeDy) > Number.EPSILON) { + if (edgeDy < 0) { + edgeLowPt = inPolygon[q]; + edgeDx = -edgeDx; + edgeHighPt = inPolygon[p]; + edgeDy = -edgeDy; + } + if (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue; + if (inPt.y === edgeLowPt.y) { + if (inPt.x === edgeLowPt.x) return true; + } else { + const perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y); + if (perpEdge === 0) return true; + if (perpEdge < 0) continue; + inside = !inside; + } + } else { + if (inPt.y !== edgeLowPt.y) continue; + if (edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x || edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x) return true; + } + } + return inside; + } + __name(isPointInsidePolygon, "isPointInsidePolygon"); + const isClockWise = ShapeUtils.isClockWise; + const subPaths = this.subPaths; + if (subPaths.length === 0) return []; + let solid, tmpPath, tmpShape; + const shapes = []; + if (subPaths.length === 1) { + tmpPath = subPaths[0]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push(tmpShape); + return shapes; + } + let holesFirst = !isClockWise(subPaths[0].getPoints()); + holesFirst = isCCW ? !holesFirst : holesFirst; + const betterShapeHoles = []; + const newShapes = []; + let newShapeHoles = []; + let mainIdx = 0; + let tmpPoints; + newShapes[mainIdx] = void 0; + newShapeHoles[mainIdx] = []; + for (let i = 0, l = subPaths.length; i < l; i++) { + tmpPath = subPaths[i]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise(tmpPoints); + solid = isCCW ? !solid : solid; + if (solid) { + if (!holesFirst && newShapes[mainIdx]) mainIdx++; + newShapes[mainIdx] = { s: new Shape(), p: tmpPoints }; + newShapes[mainIdx].s.curves = tmpPath.curves; + if (holesFirst) mainIdx++; + newShapeHoles[mainIdx] = []; + } else { + newShapeHoles[mainIdx].push({ h: tmpPath, p: tmpPoints[0] }); + } + } + if (!newShapes[0]) return toShapesNoHoles(subPaths); + if (newShapes.length > 1) { + let ambiguous = false; + let toChange = 0; + for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { + betterShapeHoles[sIdx] = []; + } + for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { + const sho = newShapeHoles[sIdx]; + for (let hIdx = 0; hIdx < sho.length; hIdx++) { + const ho = sho[hIdx]; + let hole_unassigned = true; + for (let s2Idx = 0; s2Idx < newShapes.length; s2Idx++) { + if (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) { + if (sIdx !== s2Idx) toChange++; + if (hole_unassigned) { + hole_unassigned = false; + betterShapeHoles[s2Idx].push(ho); + } else { + ambiguous = true; + } + } + } + if (hole_unassigned) { + betterShapeHoles[sIdx].push(ho); + } + } + } + if (toChange > 0 && ambiguous === false) { + newShapeHoles = betterShapeHoles; + } + } + let tmpHoles; + for (let i = 0, il = newShapes.length; i < il; i++) { + tmpShape = newShapes[i].s; + shapes.push(tmpShape); + tmpHoles = newShapeHoles[i]; + for (let j = 0, jl = tmpHoles.length; j < jl; j++) { + tmpShape.holes.push(tmpHoles[j].h); + } + } + return shapes; + } +} +class Controls extends EventDispatcher { + static { + __name(this, "Controls"); + } + constructor(object, domElement = null) { + super(); + this.object = object; + this.domElement = domElement; + this.enabled = true; + this.state = -1; + this.keys = {}; + this.mouseButtons = { LEFT: null, MIDDLE: null, RIGHT: null }; + this.touches = { ONE: null, TWO: null }; + } + connect() { + } + disconnect() { + } + dispose() { + } + update() { + } +} +class WebGLMultipleRenderTargets extends WebGLRenderTarget { + static { + __name(this, "WebGLMultipleRenderTargets"); + } + // @deprecated, r162 + constructor(width = 1, height = 1, count = 1, options = {}) { + console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'); + super(width, height, { ...options, count }); + this.isWebGLMultipleRenderTargets = true; + } + get texture() { + return this.textures; + } +} +if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: { + revision: REVISION + } })); +} +if (typeof window !== "undefined") { + if (window.__THREE__) { + console.warn("WARNING: Multiple instances of Three.js being imported."); + } else { + window.__THREE__ = REVISION; + } +} +const _changeEvent = { type: "change" }; +const _startEvent = { type: "start" }; +const _endEvent = { type: "end" }; +const _ray = new Ray(); +const _plane = new Plane(); +const _TILT_LIMIT = Math.cos(70 * MathUtils.DEG2RAD); +const _v = new Vector3(); +const _twoPI = 2 * Math.PI; +const _STATE = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 +}; +const _EPS = 1e-6; +class OrbitControls extends Controls { + static { + __name(this, "OrbitControls"); + } + constructor(object, domElement = null) { + super(object, domElement); + this.state = _STATE.NONE; + this.enabled = true; + this.target = new Vector3(); + this.cursor = new Vector3(); + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.minTargetRadius = 0; + this.maxTargetRadius = Infinity; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.minAzimuthAngle = -Infinity; + this.maxAzimuthAngle = Infinity; + this.enableDamping = false; + this.dampingFactor = 0.05; + this.enableZoom = true; + this.zoomSpeed = 1; + this.enableRotate = true; + this.rotateSpeed = 1; + this.enablePan = true; + this.panSpeed = 1; + this.screenSpacePanning = true; + this.keyPanSpeed = 7; + this.zoomToCursor = false; + this.autoRotate = false; + this.autoRotateSpeed = 2; + this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }; + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + this._domElementKeyEvents = null; + this._lastPosition = new Vector3(); + this._lastQuaternion = new Quaternion(); + this._lastTargetPosition = new Vector3(); + this._quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0)); + this._quatInverse = this._quat.clone().invert(); + this._spherical = new Spherical(); + this._sphericalDelta = new Spherical(); + this._scale = 1; + this._panOffset = new Vector3(); + this._rotateStart = new Vector2(); + this._rotateEnd = new Vector2(); + this._rotateDelta = new Vector2(); + this._panStart = new Vector2(); + this._panEnd = new Vector2(); + this._panDelta = new Vector2(); + this._dollyStart = new Vector2(); + this._dollyEnd = new Vector2(); + this._dollyDelta = new Vector2(); + this._dollyDirection = new Vector3(); + this._mouse = new Vector2(); + this._performCursorZoom = false; + this._pointers = []; + this._pointerPositions = {}; + this._controlActive = false; + this._onPointerMove = onPointerMove.bind(this); + this._onPointerDown = onPointerDown.bind(this); + this._onPointerUp = onPointerUp.bind(this); + this._onContextMenu = onContextMenu.bind(this); + this._onMouseWheel = onMouseWheel.bind(this); + this._onKeyDown = onKeyDown.bind(this); + this._onTouchStart = onTouchStart.bind(this); + this._onTouchMove = onTouchMove.bind(this); + this._onMouseDown = onMouseDown.bind(this); + this._onMouseMove = onMouseMove.bind(this); + this._interceptControlDown = interceptControlDown.bind(this); + this._interceptControlUp = interceptControlUp.bind(this); + if (this.domElement !== null) { + this.connect(); + } + this.update(); + } + connect() { + this.domElement.addEventListener("pointerdown", this._onPointerDown); + this.domElement.addEventListener("pointercancel", this._onPointerUp); + this.domElement.addEventListener("contextmenu", this._onContextMenu); + this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: false }); + const document2 = this.domElement.getRootNode(); + document2.addEventListener("keydown", this._interceptControlDown, { passive: true, capture: true }); + this.domElement.style.touchAction = "none"; + } + disconnect() { + this.domElement.removeEventListener("pointerdown", this._onPointerDown); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.domElement.removeEventListener("pointerup", this._onPointerUp); + this.domElement.removeEventListener("pointercancel", this._onPointerUp); + this.domElement.removeEventListener("wheel", this._onMouseWheel); + this.domElement.removeEventListener("contextmenu", this._onContextMenu); + this.stopListenToKeyEvents(); + const document2 = this.domElement.getRootNode(); + document2.removeEventListener("keydown", this._interceptControlDown, { capture: true }); + this.domElement.style.touchAction = "auto"; + } + dispose() { + this.disconnect(); + } + getPolarAngle() { + return this._spherical.phi; + } + getAzimuthalAngle() { + return this._spherical.theta; + } + getDistance() { + return this.object.position.distanceTo(this.target); + } + listenToKeyEvents(domElement) { + domElement.addEventListener("keydown", this._onKeyDown); + this._domElementKeyEvents = domElement; + } + stopListenToKeyEvents() { + if (this._domElementKeyEvents !== null) { + this._domElementKeyEvents.removeEventListener("keydown", this._onKeyDown); + this._domElementKeyEvents = null; + } + } + saveState() { + this.target0.copy(this.target); + this.position0.copy(this.object.position); + this.zoom0 = this.object.zoom; + } + reset() { + this.target.copy(this.target0); + this.object.position.copy(this.position0); + this.object.zoom = this.zoom0; + this.object.updateProjectionMatrix(); + this.dispatchEvent(_changeEvent); + this.update(); + this.state = _STATE.NONE; + } + update(deltaTime = null) { + const position = this.object.position; + _v.copy(position).sub(this.target); + _v.applyQuaternion(this._quat); + this._spherical.setFromVector3(_v); + if (this.autoRotate && this.state === _STATE.NONE) { + this._rotateLeft(this._getAutoRotationAngle(deltaTime)); + } + if (this.enableDamping) { + this._spherical.theta += this._sphericalDelta.theta * this.dampingFactor; + this._spherical.phi += this._sphericalDelta.phi * this.dampingFactor; + } else { + this._spherical.theta += this._sphericalDelta.theta; + this._spherical.phi += this._sphericalDelta.phi; + } + let min = this.minAzimuthAngle; + let max2 = this.maxAzimuthAngle; + if (isFinite(min) && isFinite(max2)) { + if (min < -Math.PI) min += _twoPI; + else if (min > Math.PI) min -= _twoPI; + if (max2 < -Math.PI) max2 += _twoPI; + else if (max2 > Math.PI) max2 -= _twoPI; + if (min <= max2) { + this._spherical.theta = Math.max(min, Math.min(max2, this._spherical.theta)); + } else { + this._spherical.theta = this._spherical.theta > (min + max2) / 2 ? Math.max(min, this._spherical.theta) : Math.min(max2, this._spherical.theta); + } + } + this._spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this._spherical.phi)); + this._spherical.makeSafe(); + if (this.enableDamping === true) { + this.target.addScaledVector(this._panOffset, this.dampingFactor); + } else { + this.target.add(this._panOffset); + } + this.target.sub(this.cursor); + this.target.clampLength(this.minTargetRadius, this.maxTargetRadius); + this.target.add(this.cursor); + let zoomChanged = false; + if (this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera) { + this._spherical.radius = this._clampDistance(this._spherical.radius); + } else { + const prevRadius = this._spherical.radius; + this._spherical.radius = this._clampDistance(this._spherical.radius * this._scale); + zoomChanged = prevRadius != this._spherical.radius; + } + _v.setFromSpherical(this._spherical); + _v.applyQuaternion(this._quatInverse); + position.copy(this.target).add(_v); + this.object.lookAt(this.target); + if (this.enableDamping === true) { + this._sphericalDelta.theta *= 1 - this.dampingFactor; + this._sphericalDelta.phi *= 1 - this.dampingFactor; + this._panOffset.multiplyScalar(1 - this.dampingFactor); + } else { + this._sphericalDelta.set(0, 0, 0); + this._panOffset.set(0, 0, 0); + } + if (this.zoomToCursor && this._performCursorZoom) { + let newRadius = null; + if (this.object.isPerspectiveCamera) { + const prevRadius = _v.length(); + newRadius = this._clampDistance(prevRadius * this._scale); + const radiusDelta = prevRadius - newRadius; + this.object.position.addScaledVector(this._dollyDirection, radiusDelta); + this.object.updateMatrixWorld(); + zoomChanged = !!radiusDelta; + } else if (this.object.isOrthographicCamera) { + const mouseBefore = new Vector3(this._mouse.x, this._mouse.y, 0); + mouseBefore.unproject(this.object); + const prevZoom = this.object.zoom; + this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)); + this.object.updateProjectionMatrix(); + zoomChanged = prevZoom !== this.object.zoom; + const mouseAfter = new Vector3(this._mouse.x, this._mouse.y, 0); + mouseAfter.unproject(this.object); + this.object.position.sub(mouseAfter).add(mouseBefore); + this.object.updateMatrixWorld(); + newRadius = _v.length(); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."); + this.zoomToCursor = false; + } + if (newRadius !== null) { + if (this.screenSpacePanning) { + this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(newRadius).add(this.object.position); + } else { + _ray.origin.copy(this.object.position); + _ray.direction.set(0, 0, -1).transformDirection(this.object.matrix); + if (Math.abs(this.object.up.dot(_ray.direction)) < _TILT_LIMIT) { + this.object.lookAt(this.target); + } else { + _plane.setFromNormalAndCoplanarPoint(this.object.up, this.target); + _ray.intersectPlane(_plane, this.target); + } + } + } + } else if (this.object.isOrthographicCamera) { + const prevZoom = this.object.zoom; + this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)); + if (prevZoom !== this.object.zoom) { + this.object.updateProjectionMatrix(); + zoomChanged = true; + } + } + this._scale = 1; + this._performCursorZoom = false; + if (zoomChanged || this._lastPosition.distanceToSquared(this.object.position) > _EPS || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > _EPS || this._lastTargetPosition.distanceToSquared(this.target) > _EPS) { + this.dispatchEvent(_changeEvent); + this._lastPosition.copy(this.object.position); + this._lastQuaternion.copy(this.object.quaternion); + this._lastTargetPosition.copy(this.target); + return true; + } + return false; + } + _getAutoRotationAngle(deltaTime) { + if (deltaTime !== null) { + return _twoPI / 60 * this.autoRotateSpeed * deltaTime; + } else { + return _twoPI / 60 / 60 * this.autoRotateSpeed; + } + } + _getZoomScale(delta) { + const normalizedDelta = Math.abs(delta * 0.01); + return Math.pow(0.95, this.zoomSpeed * normalizedDelta); + } + _rotateLeft(angle) { + this._sphericalDelta.theta -= angle; + } + _rotateUp(angle) { + this._sphericalDelta.phi -= angle; + } + _panLeft(distance, objectMatrix) { + _v.setFromMatrixColumn(objectMatrix, 0); + _v.multiplyScalar(-distance); + this._panOffset.add(_v); + } + _panUp(distance, objectMatrix) { + if (this.screenSpacePanning === true) { + _v.setFromMatrixColumn(objectMatrix, 1); + } else { + _v.setFromMatrixColumn(objectMatrix, 0); + _v.crossVectors(this.object.up, _v); + } + _v.multiplyScalar(distance); + this._panOffset.add(_v); + } + // deltaX and deltaY are in pixels; right and down are positive + _pan(deltaX, deltaY) { + const element = this.domElement; + if (this.object.isPerspectiveCamera) { + const position = this.object.position; + _v.copy(position).sub(this.target); + let targetDistance = _v.length(); + targetDistance *= Math.tan(this.object.fov / 2 * Math.PI / 180); + this._panLeft(2 * deltaX * targetDistance / element.clientHeight, this.object.matrix); + this._panUp(2 * deltaY * targetDistance / element.clientHeight, this.object.matrix); + } else if (this.object.isOrthographicCamera) { + this._panLeft(deltaX * (this.object.right - this.object.left) / this.object.zoom / element.clientWidth, this.object.matrix); + this._panUp(deltaY * (this.object.top - this.object.bottom) / this.object.zoom / element.clientHeight, this.object.matrix); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."); + this.enablePan = false; + } + } + _dollyOut(dollyScale) { + if (this.object.isPerspectiveCamera || this.object.isOrthographicCamera) { + this._scale /= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + this.enableZoom = false; + } + } + _dollyIn(dollyScale) { + if (this.object.isPerspectiveCamera || this.object.isOrthographicCamera) { + this._scale *= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + this.enableZoom = false; + } + } + _updateZoomParameters(x, y) { + if (!this.zoomToCursor) { + return; + } + this._performCursorZoom = true; + const rect = this.domElement.getBoundingClientRect(); + const dx = x - rect.left; + const dy = y - rect.top; + const w = rect.width; + const h = rect.height; + this._mouse.x = dx / w * 2 - 1; + this._mouse.y = -(dy / h) * 2 + 1; + this._dollyDirection.set(this._mouse.x, this._mouse.y, 1).unproject(this.object).sub(this.object.position).normalize(); + } + _clampDistance(dist) { + return Math.max(this.minDistance, Math.min(this.maxDistance, dist)); + } + // + // event callbacks - update the object state + // + _handleMouseDownRotate(event) { + this._rotateStart.set(event.clientX, event.clientY); + } + _handleMouseDownDolly(event) { + this._updateZoomParameters(event.clientX, event.clientX); + this._dollyStart.set(event.clientX, event.clientY); + } + _handleMouseDownPan(event) { + this._panStart.set(event.clientX, event.clientY); + } + _handleMouseMoveRotate(event) { + this._rotateEnd.set(event.clientX, event.clientY); + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed); + const element = this.domElement; + this._rotateLeft(_twoPI * this._rotateDelta.x / element.clientHeight); + this._rotateUp(_twoPI * this._rotateDelta.y / element.clientHeight); + this._rotateStart.copy(this._rotateEnd); + this.update(); + } + _handleMouseMoveDolly(event) { + this._dollyEnd.set(event.clientX, event.clientY); + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart); + if (this._dollyDelta.y > 0) { + this._dollyOut(this._getZoomScale(this._dollyDelta.y)); + } else if (this._dollyDelta.y < 0) { + this._dollyIn(this._getZoomScale(this._dollyDelta.y)); + } + this._dollyStart.copy(this._dollyEnd); + this.update(); + } + _handleMouseMovePan(event) { + this._panEnd.set(event.clientX, event.clientY); + this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed); + this._pan(this._panDelta.x, this._panDelta.y); + this._panStart.copy(this._panEnd); + this.update(); + } + _handleMouseWheel(event) { + this._updateZoomParameters(event.clientX, event.clientY); + if (event.deltaY < 0) { + this._dollyIn(this._getZoomScale(event.deltaY)); + } else if (event.deltaY > 0) { + this._dollyOut(this._getZoomScale(event.deltaY)); + } + this.update(); + } + _handleKeyDown(event) { + let needsUpdate = false; + switch (event.code) { + case this.keys.UP: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + this._rotateUp(_twoPI * this.rotateSpeed / this.domElement.clientHeight); + } else { + this._pan(0, this.keyPanSpeed); + } + needsUpdate = true; + break; + case this.keys.BOTTOM: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + this._rotateUp(-_twoPI * this.rotateSpeed / this.domElement.clientHeight); + } else { + this._pan(0, -this.keyPanSpeed); + } + needsUpdate = true; + break; + case this.keys.LEFT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + this._rotateLeft(_twoPI * this.rotateSpeed / this.domElement.clientHeight); + } else { + this._pan(this.keyPanSpeed, 0); + } + needsUpdate = true; + break; + case this.keys.RIGHT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + this._rotateLeft(-_twoPI * this.rotateSpeed / this.domElement.clientHeight); + } else { + this._pan(-this.keyPanSpeed, 0); + } + needsUpdate = true; + break; + } + if (needsUpdate) { + event.preventDefault(); + this.update(); + } + } + _handleTouchStartRotate(event) { + if (this._pointers.length === 1) { + this._rotateStart.set(event.pageX, event.pageY); + } else { + const position = this._getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + this._rotateStart.set(x, y); + } + } + _handleTouchStartPan(event) { + if (this._pointers.length === 1) { + this._panStart.set(event.pageX, event.pageY); + } else { + const position = this._getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + this._panStart.set(x, y); + } + } + _handleTouchStartDolly(event) { + const position = this._getSecondPointerPosition(event); + const dx = event.pageX - position.x; + const dy = event.pageY - position.y; + const distance = Math.sqrt(dx * dx + dy * dy); + this._dollyStart.set(0, distance); + } + _handleTouchStartDollyPan(event) { + if (this.enableZoom) this._handleTouchStartDolly(event); + if (this.enablePan) this._handleTouchStartPan(event); + } + _handleTouchStartDollyRotate(event) { + if (this.enableZoom) this._handleTouchStartDolly(event); + if (this.enableRotate) this._handleTouchStartRotate(event); + } + _handleTouchMoveRotate(event) { + if (this._pointers.length == 1) { + this._rotateEnd.set(event.pageX, event.pageY); + } else { + const position = this._getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + this._rotateEnd.set(x, y); + } + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed); + const element = this.domElement; + this._rotateLeft(_twoPI * this._rotateDelta.x / element.clientHeight); + this._rotateUp(_twoPI * this._rotateDelta.y / element.clientHeight); + this._rotateStart.copy(this._rotateEnd); + } + _handleTouchMovePan(event) { + if (this._pointers.length === 1) { + this._panEnd.set(event.pageX, event.pageY); + } else { + const position = this._getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + this._panEnd.set(x, y); + } + this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed); + this._pan(this._panDelta.x, this._panDelta.y); + this._panStart.copy(this._panEnd); + } + _handleTouchMoveDolly(event) { + const position = this._getSecondPointerPosition(event); + const dx = event.pageX - position.x; + const dy = event.pageY - position.y; + const distance = Math.sqrt(dx * dx + dy * dy); + this._dollyEnd.set(0, distance); + this._dollyDelta.set(0, Math.pow(this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed)); + this._dollyOut(this._dollyDelta.y); + this._dollyStart.copy(this._dollyEnd); + const centerX = (event.pageX + position.x) * 0.5; + const centerY = (event.pageY + position.y) * 0.5; + this._updateZoomParameters(centerX, centerY); + } + _handleTouchMoveDollyPan(event) { + if (this.enableZoom) this._handleTouchMoveDolly(event); + if (this.enablePan) this._handleTouchMovePan(event); + } + _handleTouchMoveDollyRotate(event) { + if (this.enableZoom) this._handleTouchMoveDolly(event); + if (this.enableRotate) this._handleTouchMoveRotate(event); + } + // pointers + _addPointer(event) { + this._pointers.push(event.pointerId); + } + _removePointer(event) { + delete this._pointerPositions[event.pointerId]; + for (let i = 0; i < this._pointers.length; i++) { + if (this._pointers[i] == event.pointerId) { + this._pointers.splice(i, 1); + return; + } + } + } + _isTrackingPointer(event) { + for (let i = 0; i < this._pointers.length; i++) { + if (this._pointers[i] == event.pointerId) return true; + } + return false; + } + _trackPointer(event) { + let position = this._pointerPositions[event.pointerId]; + if (position === void 0) { + position = new Vector2(); + this._pointerPositions[event.pointerId] = position; + } + position.set(event.pageX, event.pageY); + } + _getSecondPointerPosition(event) { + const pointerId = event.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0]; + return this._pointerPositions[pointerId]; + } + // + _customWheelEvent(event) { + const mode = event.deltaMode; + const newEvent = { + clientX: event.clientX, + clientY: event.clientY, + deltaY: event.deltaY + }; + switch (mode) { + case 1: + newEvent.deltaY *= 16; + break; + case 2: + newEvent.deltaY *= 100; + break; + } + if (event.ctrlKey && !this._controlActive) { + newEvent.deltaY *= 10; + } + return newEvent; + } +} +function onPointerDown(event) { + if (this.enabled === false) return; + if (this._pointers.length === 0) { + this.domElement.setPointerCapture(event.pointerId); + this.domElement.addEventListener("pointermove", this._onPointerMove); + this.domElement.addEventListener("pointerup", this._onPointerUp); + } + if (this._isTrackingPointer(event)) return; + this._addPointer(event); + if (event.pointerType === "touch") { + this._onTouchStart(event); + } else { + this._onMouseDown(event); + } +} +__name(onPointerDown, "onPointerDown"); +function onPointerMove(event) { + if (this.enabled === false) return; + if (event.pointerType === "touch") { + this._onTouchMove(event); + } else { + this._onMouseMove(event); + } +} +__name(onPointerMove, "onPointerMove"); +function onPointerUp(event) { + this._removePointer(event); + switch (this._pointers.length) { + case 0: + this.domElement.releasePointerCapture(event.pointerId); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.domElement.removeEventListener("pointerup", this._onPointerUp); + this.dispatchEvent(_endEvent); + this.state = _STATE.NONE; + break; + case 1: + const pointerId = this._pointers[0]; + const position = this._pointerPositions[pointerId]; + this._onTouchStart({ pointerId, pageX: position.x, pageY: position.y }); + break; + } +} +__name(onPointerUp, "onPointerUp"); +function onMouseDown(event) { + let mouseAction; + switch (event.button) { + case 0: + mouseAction = this.mouseButtons.LEFT; + break; + case 1: + mouseAction = this.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = this.mouseButtons.RIGHT; + break; + default: + mouseAction = -1; + } + switch (mouseAction) { + case MOUSE.DOLLY: + if (this.enableZoom === false) return; + this._handleMouseDownDolly(event); + this.state = _STATE.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (this.enablePan === false) return; + this._handleMouseDownPan(event); + this.state = _STATE.PAN; + } else { + if (this.enableRotate === false) return; + this._handleMouseDownRotate(event); + this.state = _STATE.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (this.enableRotate === false) return; + this._handleMouseDownRotate(event); + this.state = _STATE.ROTATE; + } else { + if (this.enablePan === false) return; + this._handleMouseDownPan(event); + this.state = _STATE.PAN; + } + break; + default: + this.state = _STATE.NONE; + } + if (this.state !== _STATE.NONE) { + this.dispatchEvent(_startEvent); + } +} +__name(onMouseDown, "onMouseDown"); +function onMouseMove(event) { + switch (this.state) { + case _STATE.ROTATE: + if (this.enableRotate === false) return; + this._handleMouseMoveRotate(event); + break; + case _STATE.DOLLY: + if (this.enableZoom === false) return; + this._handleMouseMoveDolly(event); + break; + case _STATE.PAN: + if (this.enablePan === false) return; + this._handleMouseMovePan(event); + break; + } +} +__name(onMouseMove, "onMouseMove"); +function onMouseWheel(event) { + if (this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE) return; + event.preventDefault(); + this.dispatchEvent(_startEvent); + this._handleMouseWheel(this._customWheelEvent(event)); + this.dispatchEvent(_endEvent); +} +__name(onMouseWheel, "onMouseWheel"); +function onKeyDown(event) { + if (this.enabled === false || this.enablePan === false) return; + this._handleKeyDown(event); +} +__name(onKeyDown, "onKeyDown"); +function onTouchStart(event) { + this._trackPointer(event); + switch (this._pointers.length) { + case 1: + switch (this.touches.ONE) { + case TOUCH.ROTATE: + if (this.enableRotate === false) return; + this._handleTouchStartRotate(event); + this.state = _STATE.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (this.enablePan === false) return; + this._handleTouchStartPan(event); + this.state = _STATE.TOUCH_PAN; + break; + default: + this.state = _STATE.NONE; + } + break; + case 2: + switch (this.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (this.enableZoom === false && this.enablePan === false) return; + this._handleTouchStartDollyPan(event); + this.state = _STATE.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (this.enableZoom === false && this.enableRotate === false) return; + this._handleTouchStartDollyRotate(event); + this.state = _STATE.TOUCH_DOLLY_ROTATE; + break; + default: + this.state = _STATE.NONE; + } + break; + default: + this.state = _STATE.NONE; + } + if (this.state !== _STATE.NONE) { + this.dispatchEvent(_startEvent); + } +} +__name(onTouchStart, "onTouchStart"); +function onTouchMove(event) { + this._trackPointer(event); + switch (this.state) { + case _STATE.TOUCH_ROTATE: + if (this.enableRotate === false) return; + this._handleTouchMoveRotate(event); + this.update(); + break; + case _STATE.TOUCH_PAN: + if (this.enablePan === false) return; + this._handleTouchMovePan(event); + this.update(); + break; + case _STATE.TOUCH_DOLLY_PAN: + if (this.enableZoom === false && this.enablePan === false) return; + this._handleTouchMoveDollyPan(event); + this.update(); + break; + case _STATE.TOUCH_DOLLY_ROTATE: + if (this.enableZoom === false && this.enableRotate === false) return; + this._handleTouchMoveDollyRotate(event); + this.update(); + break; + default: + this.state = _STATE.NONE; + } +} +__name(onTouchMove, "onTouchMove"); +function onContextMenu(event) { + if (this.enabled === false) return; + event.preventDefault(); +} +__name(onContextMenu, "onContextMenu"); +function interceptControlDown(event) { + if (event.key === "Control") { + this._controlActive = true; + const document2 = this.domElement.getRootNode(); + document2.addEventListener("keyup", this._interceptControlUp, { passive: true, capture: true }); + } +} +__name(interceptControlDown, "interceptControlDown"); +function interceptControlUp(event) { + if (event.key === "Control") { + this._controlActive = false; + const document2 = this.domElement.getRootNode(); + document2.removeEventListener("keyup", this._interceptControlUp, { passive: true, capture: true }); + } +} +__name(interceptControlUp, "interceptControlUp"); +function computeMikkTSpaceTangents(geometry, MikkTSpace, negateSign = true) { + if (!MikkTSpace || !MikkTSpace.isReady) { + throw new Error("BufferGeometryUtils: Initialized MikkTSpace library required."); + } + if (!geometry.hasAttribute("position") || !geometry.hasAttribute("normal") || !geometry.hasAttribute("uv")) { + throw new Error('BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.'); + } + function getAttributeArray(attribute) { + if (attribute.normalized || attribute.isInterleavedBufferAttribute) { + const dstArray = new Float32Array(attribute.count * attribute.itemSize); + for (let i = 0, j = 0; i < attribute.count; i++) { + dstArray[j++] = attribute.getX(i); + dstArray[j++] = attribute.getY(i); + if (attribute.itemSize > 2) { + dstArray[j++] = attribute.getZ(i); + } + } + return dstArray; + } + if (attribute.array instanceof Float32Array) { + return attribute.array; + } + return new Float32Array(attribute.array); + } + __name(getAttributeArray, "getAttributeArray"); + const _geometry2 = geometry.index ? geometry.toNonIndexed() : geometry; + const tangents = MikkTSpace.generateTangents( + getAttributeArray(_geometry2.attributes.position), + getAttributeArray(_geometry2.attributes.normal), + getAttributeArray(_geometry2.attributes.uv) + ); + if (negateSign) { + for (let i = 3; i < tangents.length; i += 4) { + tangents[i] *= -1; + } + } + _geometry2.setAttribute("tangent", new BufferAttribute(tangents, 4)); + if (geometry !== _geometry2) { + geometry.copy(_geometry2); + } + return geometry; +} +__name(computeMikkTSpaceTangents, "computeMikkTSpaceTangents"); +function mergeGeometries(geometries, useGroups = false) { + const isIndexed = geometries[0].index !== null; + const attributesUsed = new Set(Object.keys(geometries[0].attributes)); + const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes)); + const attributes = {}; + const morphAttributes = {}; + const morphTargetsRelative = geometries[0].morphTargetsRelative; + const mergedGeometry = new BufferGeometry(); + let offset = 0; + for (let i = 0; i < geometries.length; ++i) { + const geometry = geometries[i]; + let attributesCount = 0; + if (isIndexed !== (geometry.index !== null)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."); + return null; + } + for (const name in geometry.attributes) { + if (!attributesUsed.has(name)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + '. All geometries must have compatible attributes; make sure "' + name + '" attribute exists among all geometries, or in none of them.'); + return null; + } + if (attributes[name] === void 0) attributes[name] = []; + attributes[name].push(geometry.attributes[name]); + attributesCount++; + } + if (attributesCount !== attributesUsed.size) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". Make sure all geometries have the same number of attributes."); + return null; + } + if (morphTargetsRelative !== geometry.morphTargetsRelative) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphTargetsRelative must be consistent throughout all geometries."); + return null; + } + for (const name in geometry.morphAttributes) { + if (!morphAttributesUsed.has(name)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphAttributes must be consistent throughout all geometries."); + return null; + } + if (morphAttributes[name] === void 0) morphAttributes[name] = []; + morphAttributes[name].push(geometry.morphAttributes[name]); + } + if (useGroups) { + let count; + if (isIndexed) { + count = geometry.index.count; + } else if (geometry.attributes.position !== void 0) { + count = geometry.attributes.position.count; + } else { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". The geometry must have either an index or a position attribute"); + return null; + } + mergedGeometry.addGroup(offset, count, i); + offset += count; + } + } + if (isIndexed) { + let indexOffset = 0; + const mergedIndex = []; + for (let i = 0; i < geometries.length; ++i) { + const index = geometries[i].index; + for (let j = 0; j < index.count; ++j) { + mergedIndex.push(index.getX(j) + indexOffset); + } + indexOffset += geometries[i].attributes.position.count; + } + mergedGeometry.setIndex(mergedIndex); + } + for (const name in attributes) { + const mergedAttribute = mergeAttributes(attributes[name]); + if (!mergedAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name + " attribute."); + return null; + } + mergedGeometry.setAttribute(name, mergedAttribute); + } + for (const name in morphAttributes) { + const numMorphTargets = morphAttributes[name][0].length; + if (numMorphTargets === 0) break; + mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {}; + mergedGeometry.morphAttributes[name] = []; + for (let i = 0; i < numMorphTargets; ++i) { + const morphAttributesToMerge = []; + for (let j = 0; j < morphAttributes[name].length; ++j) { + morphAttributesToMerge.push(morphAttributes[name][j][i]); + } + const mergedMorphAttribute = mergeAttributes(morphAttributesToMerge); + if (!mergedMorphAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name + " morphAttribute."); + return null; + } + mergedGeometry.morphAttributes[name].push(mergedMorphAttribute); + } + } + return mergedGeometry; +} +__name(mergeGeometries, "mergeGeometries"); +function mergeAttributes(attributes) { + let TypedArray; + let itemSize; + let normalized; + let gpuType = -1; + let arrayLength = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."); + return null; + } + if (itemSize === void 0) itemSize = attribute.itemSize; + if (itemSize !== attribute.itemSize) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."); + return null; + } + if (normalized === void 0) normalized = attribute.normalized; + if (normalized !== attribute.normalized) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."); + return null; + } + if (gpuType === -1) gpuType = attribute.gpuType; + if (gpuType !== attribute.gpuType) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."); + return null; + } + arrayLength += attribute.count * itemSize; + } + const array = new TypedArray(arrayLength); + const result = new BufferAttribute(array, itemSize, normalized); + let offset = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (attribute.isInterleavedBufferAttribute) { + const tupleOffset = offset / itemSize; + for (let j = 0, l = attribute.count; j < l; j++) { + for (let c = 0; c < itemSize; c++) { + const value = attribute.getComponent(j, c); + result.setComponent(j + tupleOffset, c, value); + } + } + } else { + array.set(attribute.array, offset); + } + offset += attribute.count * itemSize; + } + if (gpuType !== void 0) { + result.gpuType = gpuType; + } + return result; +} +__name(mergeAttributes, "mergeAttributes"); +function deepCloneAttribute(attribute) { + if (attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute) { + return deinterleaveAttribute(attribute); + } + if (attribute.isInstancedBufferAttribute) { + return new InstancedBufferAttribute().copy(attribute); + } + return new BufferAttribute().copy(attribute); +} +__name(deepCloneAttribute, "deepCloneAttribute"); +function interleaveAttributes(attributes) { + let TypedArray; + let arrayLength = 0; + let stride = 0; + for (let i = 0, l = attributes.length; i < l; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("AttributeBuffers of different types cannot be interleaved"); + return null; + } + arrayLength += attribute.array.length; + stride += attribute.itemSize; + } + const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride); + let offset = 0; + const res = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let j = 0, l = attributes.length; j < l; j++) { + const attribute = attributes[j]; + const itemSize = attribute.itemSize; + const count = attribute.count; + const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized); + res.push(iba); + offset += itemSize; + for (let c = 0; c < count; c++) { + for (let k = 0; k < itemSize; k++) { + iba[setters[k]](c, attribute[getters[k]](c)); + } + } + } + return res; +} +__name(interleaveAttributes, "interleaveAttributes"); +function deinterleaveAttribute(attribute) { + const cons = attribute.data.array.constructor; + const count = attribute.count; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + const array = new cons(count * itemSize); + let newAttribute; + if (attribute.isInstancedInterleavedBufferAttribute) { + newAttribute = new InstancedBufferAttribute(array, itemSize, normalized, attribute.meshPerAttribute); + } else { + newAttribute = new BufferAttribute(array, itemSize, normalized); + } + for (let i = 0; i < count; i++) { + newAttribute.setX(i, attribute.getX(i)); + if (itemSize >= 2) { + newAttribute.setY(i, attribute.getY(i)); + } + if (itemSize >= 3) { + newAttribute.setZ(i, attribute.getZ(i)); + } + if (itemSize >= 4) { + newAttribute.setW(i, attribute.getW(i)); + } + } + return newAttribute; +} +__name(deinterleaveAttribute, "deinterleaveAttribute"); +function deinterleaveGeometry(geometry) { + const attributes = geometry.attributes; + const morphTargets = geometry.morphTargets; + const attrMap = /* @__PURE__ */ new Map(); + for (const key in attributes) { + const attr = attributes[key]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + attributes[key] = attrMap.get(attr); + } + } + for (const key in morphTargets) { + const attr = morphTargets[key]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + morphTargets[key] = attrMap.get(attr); + } + } +} +__name(deinterleaveGeometry, "deinterleaveGeometry"); +function estimateBytesUsed(geometry) { + let mem = 0; + for (const name in geometry.attributes) { + const attr = geometry.getAttribute(name); + mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT; + } + const indices = geometry.getIndex(); + mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0; + return mem; +} +__name(estimateBytesUsed, "estimateBytesUsed"); +function mergeVertices(geometry, tolerance = 1e-4) { + tolerance = Math.max(tolerance, Number.EPSILON); + const hashToIndex = {}; + const indices = geometry.getIndex(); + const positions = geometry.getAttribute("position"); + const vertexCount = indices ? indices.count : positions.count; + let nextIndex = 0; + const attributeNames = Object.keys(geometry.attributes); + const tmpAttributes = {}; + const tmpMorphAttributes = {}; + const newIndices = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let i = 0, l = attributeNames.length; i < l; i++) { + const name = attributeNames[i]; + const attr = geometry.attributes[name]; + tmpAttributes[name] = new attr.constructor( + new attr.array.constructor(attr.count * attr.itemSize), + attr.itemSize, + attr.normalized + ); + const morphAttributes = geometry.morphAttributes[name]; + if (morphAttributes) { + if (!tmpMorphAttributes[name]) tmpMorphAttributes[name] = []; + morphAttributes.forEach((morphAttr, i2) => { + const array = new morphAttr.array.constructor(morphAttr.count * morphAttr.itemSize); + tmpMorphAttributes[name][i2] = new morphAttr.constructor(array, morphAttr.itemSize, morphAttr.normalized); + }); + } + } + const halfTolerance = tolerance * 0.5; + const exponent = Math.log10(1 / tolerance); + const hashMultiplier = Math.pow(10, exponent); + const hashAdditive = halfTolerance * hashMultiplier; + for (let i = 0; i < vertexCount; i++) { + const index = indices ? indices.getX(i) : i; + let hash = ""; + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const itemSize = attribute.itemSize; + for (let k = 0; k < itemSize; k++) { + hash += `${~~(attribute[getters[k]](index) * hashMultiplier + hashAdditive)},`; + } + } + if (hash in hashToIndex) { + newIndices.push(hashToIndex[hash]); + } else { + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const morphAttributes = geometry.morphAttributes[name]; + const itemSize = attribute.itemSize; + const newArray = tmpAttributes[name]; + const newMorphArrays = tmpMorphAttributes[name]; + for (let k = 0; k < itemSize; k++) { + const getterFunc = getters[k]; + const setterFunc = setters[k]; + newArray[setterFunc](nextIndex, attribute[getterFunc](index)); + if (morphAttributes) { + for (let m = 0, ml = morphAttributes.length; m < ml; m++) { + newMorphArrays[m][setterFunc](nextIndex, morphAttributes[m][getterFunc](index)); + } + } + } + } + hashToIndex[hash] = nextIndex; + newIndices.push(nextIndex); + nextIndex++; + } + } + const result = geometry.clone(); + for (const name in geometry.attributes) { + const tmpAttribute = tmpAttributes[name]; + result.setAttribute(name, new tmpAttribute.constructor( + tmpAttribute.array.slice(0, nextIndex * tmpAttribute.itemSize), + tmpAttribute.itemSize, + tmpAttribute.normalized + )); + if (!(name in tmpMorphAttributes)) continue; + for (let j = 0; j < tmpMorphAttributes[name].length; j++) { + const tmpMorphAttribute = tmpMorphAttributes[name][j]; + result.morphAttributes[name][j] = new tmpMorphAttribute.constructor( + tmpMorphAttribute.array.slice(0, nextIndex * tmpMorphAttribute.itemSize), + tmpMorphAttribute.itemSize, + tmpMorphAttribute.normalized + ); + } + } + result.setIndex(newIndices); + return result; +} +__name(mergeVertices, "mergeVertices"); +function toTrianglesDrawMode(geometry, drawMode) { + if (drawMode === TrianglesDrawMode) { + console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); + return geometry; + } + if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) { + let index = geometry.getIndex(); + if (index === null) { + const indices = []; + const position = geometry.getAttribute("position"); + if (position !== void 0) { + for (let i = 0; i < position.count; i++) { + indices.push(i); + } + geometry.setIndex(indices); + index = geometry.getIndex(); + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); + return geometry; + } + } + const numberOfTriangles = index.count - 2; + const newIndices = []; + if (drawMode === TriangleFanDrawMode) { + for (let i = 1; i <= numberOfTriangles; i++) { + newIndices.push(index.getX(0)); + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + } + } else { + for (let i = 0; i < numberOfTriangles; i++) { + if (i % 2 === 0) { + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i + 2)); + } else { + newIndices.push(index.getX(i + 2)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i)); + } + } + } + if (newIndices.length / 3 !== numberOfTriangles) { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + } + const newGeometry = geometry.clone(); + newGeometry.setIndex(newIndices); + newGeometry.clearGroups(); + return newGeometry; + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); + return geometry; + } +} +__name(toTrianglesDrawMode, "toTrianglesDrawMode"); +function computeMorphedAttributes(object) { + const _vA2 = new Vector3(); + const _vB2 = new Vector3(); + const _vC2 = new Vector3(); + const _tempA2 = new Vector3(); + const _tempB = new Vector3(); + const _tempC = new Vector3(); + const _morphA2 = new Vector3(); + const _morphB = new Vector3(); + const _morphC = new Vector3(); + function _calculateMorphedAttributeData(object2, attribute, morphAttribute, morphTargetsRelative2, a2, b3, c2, modifiedAttributeArray) { + _vA2.fromBufferAttribute(attribute, a2); + _vB2.fromBufferAttribute(attribute, b3); + _vC2.fromBufferAttribute(attribute, c2); + const morphInfluences = object2.morphTargetInfluences; + if (morphAttribute && morphInfluences) { + _morphA2.set(0, 0, 0); + _morphB.set(0, 0, 0); + _morphC.set(0, 0, 0); + for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) { + const influence = morphInfluences[i2]; + const morph = morphAttribute[i2]; + if (influence === 0) continue; + _tempA2.fromBufferAttribute(morph, a2); + _tempB.fromBufferAttribute(morph, b3); + _tempC.fromBufferAttribute(morph, c2); + if (morphTargetsRelative2) { + _morphA2.addScaledVector(_tempA2, influence); + _morphB.addScaledVector(_tempB, influence); + _morphC.addScaledVector(_tempC, influence); + } else { + _morphA2.addScaledVector(_tempA2.sub(_vA2), influence); + _morphB.addScaledVector(_tempB.sub(_vB2), influence); + _morphC.addScaledVector(_tempC.sub(_vC2), influence); + } + } + _vA2.add(_morphA2); + _vB2.add(_morphB); + _vC2.add(_morphC); + } + if (object2.isSkinnedMesh) { + object2.applyBoneTransform(a2, _vA2); + object2.applyBoneTransform(b3, _vB2); + object2.applyBoneTransform(c2, _vC2); + } + modifiedAttributeArray[a2 * 3 + 0] = _vA2.x; + modifiedAttributeArray[a2 * 3 + 1] = _vA2.y; + modifiedAttributeArray[a2 * 3 + 2] = _vA2.z; + modifiedAttributeArray[b3 * 3 + 0] = _vB2.x; + modifiedAttributeArray[b3 * 3 + 1] = _vB2.y; + modifiedAttributeArray[b3 * 3 + 2] = _vB2.z; + modifiedAttributeArray[c2 * 3 + 0] = _vC2.x; + modifiedAttributeArray[c2 * 3 + 1] = _vC2.y; + modifiedAttributeArray[c2 * 3 + 2] = _vC2.z; + } + __name(_calculateMorphedAttributeData, "_calculateMorphedAttributeData"); + const geometry = object.geometry; + const material = object.material; + let a, b, c; + const index = geometry.index; + const positionAttribute = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const normalAttribute = geometry.attributes.normal; + const morphNormal = geometry.morphAttributes.position; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + let i, j, il, jl; + let group; + let start, end; + const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize); + const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize); + if (index !== null) { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a = index.getX(j); + b = index.getX(j + 1); + c = index.getX(j + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(index.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a = index.getX(i); + b = index.getX(i + 1); + c = index.getX(i + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a = j; + b = j + 1; + c = j + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a = i; + b = i + 1; + c = i + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } + const morphedPositionAttribute = new Float32BufferAttribute(modifiedPosition, 3); + const morphedNormalAttribute = new Float32BufferAttribute(modifiedNormal, 3); + return { + positionAttribute, + normalAttribute, + morphedPositionAttribute, + morphedNormalAttribute + }; +} +__name(computeMorphedAttributes, "computeMorphedAttributes"); +function mergeGroups(geometry) { + if (geometry.groups.length === 0) { + console.warn("THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge."); + return geometry; + } + let groups = geometry.groups; + groups = groups.sort((a, b) => { + if (a.materialIndex !== b.materialIndex) return a.materialIndex - b.materialIndex; + return a.start - b.start; + }); + if (geometry.getIndex() === null) { + const positionAttribute = geometry.getAttribute("position"); + const indices = []; + for (let i = 0; i < positionAttribute.count; i += 3) { + indices.push(i, i + 1, i + 2); + } + geometry.setIndex(indices); + } + const index = geometry.getIndex(); + const newIndices = []; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + const groupStart = group.start; + const groupLength = groupStart + group.count; + for (let j = groupStart; j < groupLength; j++) { + newIndices.push(index.getX(j)); + } + } + geometry.dispose(); + geometry.setIndex(newIndices); + let start = 0; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + group.start = start; + start += group.count; + } + let currentGroup = groups[0]; + geometry.groups = [currentGroup]; + for (let i = 1; i < groups.length; i++) { + const group = groups[i]; + if (currentGroup.materialIndex === group.materialIndex) { + currentGroup.count += group.count; + } else { + currentGroup = group; + geometry.groups.push(currentGroup); + } + } + return geometry; +} +__name(mergeGroups, "mergeGroups"); +function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) { + const creaseDot = Math.cos(creaseAngle); + const hashMultiplier = (1 + 1e-10) * 100; + const verts = [new Vector3(), new Vector3(), new Vector3()]; + const tempVec1 = new Vector3(); + const tempVec2 = new Vector3(); + const tempNorm = new Vector3(); + const tempNorm2 = new Vector3(); + function hashVertex(v) { + const x = ~~(v.x * hashMultiplier); + const y = ~~(v.y * hashMultiplier); + const z = ~~(v.z * hashMultiplier); + return `${x},${y},${z}`; + } + __name(hashVertex, "hashVertex"); + const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry; + const posAttr = resultGeometry.attributes.position; + const vertexMap = {}; + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const hash = hashVertex(vert); + if (!(hash in vertexMap)) { + vertexMap[hash] = []; + } + vertexMap[hash].push(normal); + } + } + const normalArray = new Float32Array(posAttr.count * 3); + const normAttr = new BufferAttribute(normalArray, 3, false); + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + tempNorm.crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const hash = hashVertex(vert); + const otherNormals = vertexMap[hash]; + tempNorm2.set(0, 0, 0); + for (let k = 0, lk = otherNormals.length; k < lk; k++) { + const otherNorm = otherNormals[k]; + if (tempNorm.dot(otherNorm) > creaseDot) { + tempNorm2.add(otherNorm); + } + } + tempNorm2.normalize(); + normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z); + } + } + resultGeometry.setAttribute("normal", normAttr); + return resultGeometry; +} +__name(toCreasedNormals, "toCreasedNormals"); +class GLTFLoader extends Loader { + static { + __name(this, "GLTFLoader"); + } + constructor(manager) { + super(manager); + this.dracoLoader = null; + this.ktx2Loader = null; + this.meshoptDecoder = null; + this.pluginCallbacks = []; + this.register(function(parser) { + return new GLTFMaterialsClearcoatExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsDispersionExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureBasisUExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureWebPExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureAVIFExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSheenExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsTransmissionExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsVolumeExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIorExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsEmissiveStrengthExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSpecularExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIridescenceExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsAnisotropyExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsBumpExtension(parser); + }); + this.register(function(parser) { + return new GLTFLightsExtension(parser); + }); + this.register(function(parser) { + return new GLTFMeshoptCompression(parser); + }); + this.register(function(parser) { + return new GLTFMeshGpuInstancing(parser); + }); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + let resourcePath; + if (this.resourcePath !== "") { + resourcePath = this.resourcePath; + } else if (this.path !== "") { + const relativeUrl = LoaderUtils.extractUrlBase(url); + resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); + } else { + resourcePath = LoaderUtils.extractUrlBase(url); + } + this.manager.itemStart(url); + const _onError = /* @__PURE__ */ __name(function(e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }, "_onError"); + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data) { + try { + scope.parse(data, resourcePath, function(gltf) { + onLoad(gltf); + scope.manager.itemEnd(url); + }, _onError); + } catch (e) { + _onError(e); + } + }, onProgress, _onError); + } + setDRACOLoader(dracoLoader) { + this.dracoLoader = dracoLoader; + return this; + } + setKTX2Loader(ktx2Loader) { + this.ktx2Loader = ktx2Loader; + return this; + } + setMeshoptDecoder(meshoptDecoder) { + this.meshoptDecoder = meshoptDecoder; + return this; + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) { + this.pluginCallbacks.push(callback); + } + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) { + this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + } + return this; + } + parse(data, path, onLoad, onError) { + let json; + const extensions = {}; + const plugins = {}; + const textDecoder = new TextDecoder(); + if (typeof data === "string") { + json = JSON.parse(data); + } else if (data instanceof ArrayBuffer) { + const magic = textDecoder.decode(new Uint8Array(data, 0, 4)); + if (magic === BINARY_EXTENSION_HEADER_MAGIC) { + try { + extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data); + } catch (error) { + if (onError) onError(error); + return; + } + json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); + } else { + json = JSON.parse(textDecoder.decode(data)); + } + } else { + json = data; + } + if (json.asset === void 0 || json.asset.version[0] < 2) { + if (onError) onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + return; + } + const parser = new GLTFParser(json, { + path: path || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + parser.fileLoader.setRequestHeader(this.requestHeader); + for (let i = 0; i < this.pluginCallbacks.length; i++) { + const plugin = this.pluginCallbacks[i](parser); + if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); + plugins[plugin.name] = plugin; + extensions[plugin.name] = true; + } + if (json.extensionsUsed) { + for (let i = 0; i < json.extensionsUsed.length; ++i) { + const extensionName = json.extensionsUsed[i]; + const extensionsRequired = json.extensionsRequired || []; + switch (extensionName) { + case EXTENSIONS.KHR_MATERIALS_UNLIT: + extensions[extensionName] = new GLTFMaterialsUnlitExtension(); + break; + case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: + extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); + break; + case EXTENSIONS.KHR_TEXTURE_TRANSFORM: + extensions[extensionName] = new GLTFTextureTransformExtension(); + break; + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[extensionName] = new GLTFMeshQuantizationExtension(); + break; + default: + if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) { + console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".'); + } + } + } + } + parser.setExtensions(extensions); + parser.setPlugins(plugins); + parser.parse(onLoad, onError); + } + parseAsync(data, path) { + const scope = this; + return new Promise(function(resolve, reject) { + scope.parse(data, path, resolve, reject); + }); + } +} +function GLTFRegistry() { + let objects = {}; + return { + get: /* @__PURE__ */ __name(function(key) { + return objects[key]; + }, "get"), + add: /* @__PURE__ */ __name(function(key, object) { + objects[key] = object; + }, "add"), + remove: /* @__PURE__ */ __name(function(key) { + delete objects[key]; + }, "remove"), + removeAll: /* @__PURE__ */ __name(function() { + objects = {}; + }, "removeAll") + }; +} +__name(GLTFRegistry, "GLTFRegistry"); +const EXTENSIONS = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" +}; +class GLTFLightsExtension { + static { + __name(this, "GLTFLightsExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; + this.cache = { refs: {}, uses: {} }; + } + _markDefs() { + const parser = this.parser; + const nodeDefs = this.parser.json.nodes || []; + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) { + parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); + } + } + } + _loadLight(lightIndex) { + const parser = this.parser; + const cacheKey = "light:" + lightIndex; + let dependency = parser.cache.get(cacheKey); + if (dependency) return dependency; + const json = parser.json; + const extensions = json.extensions && json.extensions[this.name] || {}; + const lightDefs = extensions.lights || []; + const lightDef = lightDefs[lightIndex]; + let lightNode; + const color = new Color(16777215); + if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace); + const range = lightDef.range !== void 0 ? lightDef.range : 0; + switch (lightDef.type) { + case "directional": + lightNode = new DirectionalLight(color); + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + case "point": + lightNode = new PointLight(color); + lightNode.distance = range; + break; + case "spot": + lightNode = new SpotLight(color); + lightNode.distance = range; + lightDef.spot = lightDef.spot || {}; + lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; + lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; + lightNode.angle = lightDef.spot.outerConeAngle; + lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); + } + lightNode.position.set(0, 0, 0); + lightNode.decay = 2; + assignExtrasToUserData(lightNode, lightDef); + if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; + lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); + dependency = Promise.resolve(lightNode); + parser.cache.add(cacheKey, dependency); + return dependency; + } + getDependency(type, index) { + if (type !== "light") return; + return this._loadLight(index); + } + createNodeAttachment(nodeIndex) { + const self2 = this; + const parser = this.parser; + const json = parser.json; + const nodeDef = json.nodes[nodeIndex]; + const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {}; + const lightIndex = lightDef.light; + if (lightIndex === void 0) return null; + return this._loadLight(lightIndex).then(function(light) { + return parser._getNodeRef(self2.cache, lightIndex, light); + }); + } +} +class GLTFMaterialsUnlitExtension { + static { + __name(this, "GLTFMaterialsUnlitExtension"); + } + constructor() { + this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; + } + getMaterialType() { + return MeshBasicMaterial; + } + extendParams(materialParams, materialDef, parser) { + const pending = []; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + const metallicRoughness = materialDef.pbrMetallicRoughness; + if (metallicRoughness) { + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + } + return Promise.all(pending); + } +} +class GLTFMaterialsEmissiveStrengthExtension { + static { + __name(this, "GLTFMaterialsEmissiveStrengthExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; + if (emissiveStrength !== void 0) { + materialParams.emissiveIntensity = emissiveStrength; + } + return Promise.resolve(); + } +} +class GLTFMaterialsClearcoatExtension { + static { + __name(this, "GLTFMaterialsClearcoatExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.clearcoatFactor !== void 0) { + materialParams.clearcoat = extension.clearcoatFactor; + } + if (extension.clearcoatTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); + } + if (extension.clearcoatRoughnessFactor !== void 0) { + materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; + } + if (extension.clearcoatRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); + } + if (extension.clearcoatNormalTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); + if (extension.clearcoatNormalTexture.scale !== void 0) { + const scale = extension.clearcoatNormalTexture.scale; + materialParams.clearcoatNormalScale = new Vector2(scale, scale); + } + } + return Promise.all(pending); + } +} +class GLTFMaterialsDispersionExtension { + static { + __name(this, "GLTFMaterialsDispersionExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; + return Promise.resolve(); + } +} +class GLTFMaterialsIridescenceExtension { + static { + __name(this, "GLTFMaterialsIridescenceExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.iridescenceFactor !== void 0) { + materialParams.iridescence = extension.iridescenceFactor; + } + if (extension.iridescenceTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); + } + if (extension.iridescenceIor !== void 0) { + materialParams.iridescenceIOR = extension.iridescenceIor; + } + if (materialParams.iridescenceThicknessRange === void 0) { + materialParams.iridescenceThicknessRange = [100, 400]; + } + if (extension.iridescenceThicknessMinimum !== void 0) { + materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; + } + if (extension.iridescenceThicknessMaximum !== void 0) { + materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; + } + if (extension.iridescenceThicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); + } + return Promise.all(pending); + } +} +class GLTFMaterialsSheenExtension { + static { + __name(this, "GLTFMaterialsSheenExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + materialParams.sheenColor = new Color(0, 0, 0); + materialParams.sheenRoughness = 0; + materialParams.sheen = 1; + const extension = materialDef.extensions[this.name]; + if (extension.sheenColorFactor !== void 0) { + const colorFactor = extension.sheenColorFactor; + materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace); + } + if (extension.sheenRoughnessFactor !== void 0) { + materialParams.sheenRoughness = extension.sheenRoughnessFactor; + } + if (extension.sheenColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace)); + } + if (extension.sheenRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); + } + return Promise.all(pending); + } +} +class GLTFMaterialsTransmissionExtension { + static { + __name(this, "GLTFMaterialsTransmissionExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.transmissionFactor !== void 0) { + materialParams.transmission = extension.transmissionFactor; + } + if (extension.transmissionTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); + } + return Promise.all(pending); + } +} +class GLTFMaterialsVolumeExtension { + static { + __name(this, "GLTFMaterialsVolumeExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; + if (extension.thicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); + } + materialParams.attenuationDistance = extension.attenuationDistance || Infinity; + const colorArray = extension.attenuationColor || [1, 1, 1]; + materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + return Promise.all(pending); + } +} +class GLTFMaterialsIorExtension { + static { + __name(this, "GLTFMaterialsIorExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IOR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; + return Promise.resolve(); + } +} +class GLTFMaterialsSpecularExtension { + static { + __name(this, "GLTFMaterialsSpecularExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; + if (extension.specularTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); + } + const colorArray = extension.specularColorFactor || [1, 1, 1]; + materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + if (extension.specularColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace)); + } + return Promise.all(pending); + } +} +class GLTFMaterialsBumpExtension { + static { + __name(this, "GLTFMaterialsBumpExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_MATERIALS_BUMP; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; + if (extension.bumpTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); + } + return Promise.all(pending); + } +} +class GLTFMaterialsAnisotropyExtension { + static { + __name(this, "GLTFMaterialsAnisotropyExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.anisotropyStrength !== void 0) { + materialParams.anisotropy = extension.anisotropyStrength; + } + if (extension.anisotropyRotation !== void 0) { + materialParams.anisotropyRotation = extension.anisotropyRotation; + } + if (extension.anisotropyTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); + } + return Promise.all(pending); + } +} +class GLTFTextureBasisUExtension { + static { + __name(this, "GLTFTextureBasisUExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_TEXTURE_BASISU; + } + loadTexture(textureIndex) { + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[this.name]) { + return null; + } + const extension = textureDef.extensions[this.name]; + const loader = parser.options.ktx2Loader; + if (!loader) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + } else { + return null; + } + } + return parser.loadTextureImage(textureIndex, extension.source, loader); + } +} +class GLTFTextureWebPExtension { + static { + __name(this, "GLTFTextureWebPExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_WEBP; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) { + return null; + } + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { + throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +} +class GLTFTextureAVIFExtension { + static { + __name(this, "GLTFTextureAVIFExtension"); + } + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_AVIF; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) { + return null; + } + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { + throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +} +class GLTFMeshoptCompression { + static { + __name(this, "GLTFMeshoptCompression"); + } + constructor(parser) { + this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; + this.parser = parser; + } + loadBufferView(index) { + const json = this.parser.json; + const bufferView = json.bufferViews[index]; + if (bufferView.extensions && bufferView.extensions[this.name]) { + const extensionDef = bufferView.extensions[this.name]; + const buffer = this.parser.getDependency("buffer", extensionDef.buffer); + const decoder = this.parser.options.meshoptDecoder; + if (!decoder || !decoder.supported) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + } else { + return null; + } + } + return buffer.then(function(res) { + const byteOffset = extensionDef.byteOffset || 0; + const byteLength = extensionDef.byteLength || 0; + const count = extensionDef.count; + const stride = extensionDef.byteStride; + const source = new Uint8Array(res, byteOffset, byteLength); + if (decoder.decodeGltfBufferAsync) { + return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { + return res2.buffer; + }); + } else { + return decoder.ready.then(function() { + const result = new ArrayBuffer(count * stride); + decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); + return result; + }); + } + }); + } else { + return null; + } + } +} +class GLTFMeshGpuInstancing { + static { + __name(this, "GLTFMeshGpuInstancing"); + } + constructor(parser) { + this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; + this.parser = parser; + } + createNodeMesh(nodeIndex) { + const json = this.parser.json; + const nodeDef = json.nodes[nodeIndex]; + if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) { + return null; + } + const meshDef = json.meshes[nodeDef.mesh]; + for (const primitive of meshDef.primitives) { + if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) { + return null; + } + } + const extensionDef = nodeDef.extensions[this.name]; + const attributesDef = extensionDef.attributes; + const pending = []; + const attributes = {}; + for (const key in attributesDef) { + pending.push(this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => { + attributes[key] = accessor; + return attributes[key]; + })); + } + if (pending.length < 1) { + return null; + } + pending.push(this.parser.createNodeMesh(nodeIndex)); + return Promise.all(pending).then((results) => { + const nodeObject = results.pop(); + const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; + const count = results[0].count; + const instancedMeshes = []; + for (const mesh of meshes) { + const m = new Matrix4(); + const p = new Vector3(); + const q = new Quaternion(); + const s = new Vector3(1, 1, 1); + const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); + for (let i = 0; i < count; i++) { + if (attributes.TRANSLATION) { + p.fromBufferAttribute(attributes.TRANSLATION, i); + } + if (attributes.ROTATION) { + q.fromBufferAttribute(attributes.ROTATION, i); + } + if (attributes.SCALE) { + s.fromBufferAttribute(attributes.SCALE, i); + } + instancedMesh.setMatrixAt(i, m.compose(p, q, s)); + } + for (const attributeName in attributes) { + if (attributeName === "_COLOR_0") { + const attr = attributes[attributeName]; + instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); + } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") { + mesh.geometry.setAttribute(attributeName, attributes[attributeName]); + } + } + Object3D.prototype.copy.call(instancedMesh, mesh); + this.parser.assignFinalMaterial(instancedMesh); + instancedMeshes.push(instancedMesh); + } + if (nodeObject.isGroup) { + nodeObject.clear(); + nodeObject.add(...instancedMeshes); + return nodeObject; + } + return instancedMeshes[0]; + }); + } +} +const BINARY_EXTENSION_HEADER_MAGIC = "glTF"; +const BINARY_EXTENSION_HEADER_LENGTH = 12; +const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 }; +class GLTFBinaryExtension { + static { + __name(this, "GLTFBinaryExtension"); + } + constructor(data) { + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH); + const textDecoder = new TextDecoder(); + this.header = { + magic: textDecoder.decode(new Uint8Array(data.slice(0, 4))), + version: headerView.getUint32(4, true), + length: headerView.getUint32(8, true) + }; + if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) { + throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + } else if (this.header.version < 2) { + throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + } + const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; + const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH); + let chunkIndex = 0; + while (chunkIndex < chunkContentsLength) { + const chunkLength = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + const chunkType = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { + const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); + this.content = textDecoder.decode(contentArray); + } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { + const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice(byteOffset, byteOffset + chunkLength); + } + chunkIndex += chunkLength; + } + if (this.content === null) { + throw new Error("THREE.GLTFLoader: JSON content not found."); + } + } +} +class GLTFDracoMeshCompressionExtension { + static { + __name(this, "GLTFDracoMeshCompressionExtension"); + } + constructor(json, dracoLoader) { + if (!dracoLoader) { + throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + } + this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; + this.json = json; + this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); + } + decodePrimitive(primitive, parser) { + const json = this.json; + const dracoLoader = this.dracoLoader; + const bufferViewIndex = primitive.extensions[this.name].bufferView; + const gltfAttributeMap = primitive.extensions[this.name].attributes; + const threeAttributeMap = {}; + const attributeNormalizedMap = {}; + const attributeTypeMap = {}; + for (const attributeName in gltfAttributeMap) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; + } + for (const attributeName in primitive.attributes) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + if (gltfAttributeMap[attributeName] !== void 0) { + const accessorDef = json.accessors[primitive.attributes[attributeName]]; + const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + attributeTypeMap[threeAttributeName] = componentType.name; + attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; + } + } + return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { + return new Promise(function(resolve, reject) { + dracoLoader.decodeDracoFile(bufferView, function(geometry) { + for (const attributeName in geometry.attributes) { + const attribute = geometry.attributes[attributeName]; + const normalized = attributeNormalizedMap[attributeName]; + if (normalized !== void 0) attribute.normalized = normalized; + } + resolve(geometry); + }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject); + }); + }); + } +} +class GLTFTextureTransformExtension { + static { + __name(this, "GLTFTextureTransformExtension"); + } + constructor() { + this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; + } + extendTexture(texture, transform) { + if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) { + return texture; + } + texture = texture.clone(); + if (transform.texCoord !== void 0) { + texture.channel = transform.texCoord; + } + if (transform.offset !== void 0) { + texture.offset.fromArray(transform.offset); + } + if (transform.rotation !== void 0) { + texture.rotation = transform.rotation; + } + if (transform.scale !== void 0) { + texture.repeat.fromArray(transform.scale); + } + texture.needsUpdate = true; + return texture; + } +} +class GLTFMeshQuantizationExtension { + static { + __name(this, "GLTFMeshQuantizationExtension"); + } + constructor() { + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + } +} +class GLTFCubicSplineInterpolant extends Interpolant { + static { + __name(this, "GLTFCubicSplineInterpolant"); + } + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + copySampleValue_(index) { + const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; + for (let i = 0; i !== valueSize; i++) { + result[i] = values[offset + i]; + } + return result; + } + interpolate_(i1, t0, t2, t1) { + const result = this.resultBuffer; + const values = this.sampleValues; + const stride = this.valueSize; + const stride2 = stride * 2; + const stride3 = stride * 3; + const td2 = t1 - t0; + const p = (t2 - t0) / td2; + const pp = p * p; + const ppp = pp * p; + const offset1 = i1 * stride3; + const offset0 = offset1 - stride3; + const s2 = -2 * ppp + 3 * pp; + const s3 = ppp - pp; + const s0 = 1 - s2; + const s1 = s3 - pp + p; + for (let i = 0; i !== stride; i++) { + const p0 = values[offset0 + i + stride]; + const m0 = values[offset0 + i + stride2] * td2; + const p1 = values[offset1 + i + stride]; + const m1 = values[offset1 + i] * td2; + result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; + } + return result; + } +} +const _q = new Quaternion(); +class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant { + static { + __name(this, "GLTFCubicSplineQuaternionInterpolant"); + } + interpolate_(i1, t0, t2, t1) { + const result = super.interpolate_(i1, t0, t2, t1); + _q.fromArray(result).normalize().toArray(result); + return result; + } +} +const WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 +}; +const WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array +}; +const WEBGL_FILTERS = { + 9728: NearestFilter, + 9729: LinearFilter, + 9984: NearestMipmapNearestFilter, + 9985: LinearMipmapNearestFilter, + 9986: NearestMipmapLinearFilter, + 9987: LinearMipmapLinearFilter +}; +const WEBGL_WRAPPINGS = { + 33071: ClampToEdgeWrapping, + 33648: MirroredRepeatWrapping, + 10497: RepeatWrapping +}; +const WEBGL_TYPE_SIZES = { + "SCALAR": 1, + "VEC2": 2, + "VEC3": 3, + "VEC4": 4, + "MAT2": 4, + "MAT3": 9, + "MAT4": 16 +}; +const ATTRIBUTES = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" +}; +const PATH_PROPERTIES = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" +}; +const INTERPOLATION = { + CUBICSPLINE: void 0, + // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each + // keyframe track will be initialized with a default interpolation type, then modified. + LINEAR: InterpolateLinear, + STEP: InterpolateDiscrete +}; +const ALPHA_MODES = { + OPAQUE: "OPAQUE", + MASK: "MASK", + BLEND: "BLEND" +}; +function createDefaultMaterial(cache) { + if (cache["DefaultMaterial"] === void 0) { + cache["DefaultMaterial"] = new MeshStandardMaterial({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: FrontSide + }); + } + return cache["DefaultMaterial"]; +} +__name(createDefaultMaterial, "createDefaultMaterial"); +function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { + for (const name in objectDef.extensions) { + if (knownExtensions[name] === void 0) { + object.userData.gltfExtensions = object.userData.gltfExtensions || {}; + object.userData.gltfExtensions[name] = objectDef.extensions[name]; + } + } +} +__name(addUnknownExtensionsToUserData, "addUnknownExtensionsToUserData"); +function assignExtrasToUserData(object, gltfDef) { + if (gltfDef.extras !== void 0) { + if (typeof gltfDef.extras === "object") { + Object.assign(object.userData, gltfDef.extras); + } else { + console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); + } + } +} +__name(assignExtrasToUserData, "assignExtrasToUserData"); +function addMorphTargets(geometry, targets, parser) { + let hasMorphPosition = false; + let hasMorphNormal = false; + let hasMorphColor = false; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) hasMorphPosition = true; + if (target.NORMAL !== void 0) hasMorphNormal = true; + if (target.COLOR_0 !== void 0) hasMorphColor = true; + if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; + } + if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); + const pendingPositionAccessors = []; + const pendingNormalAccessors = []; + const pendingColorAccessors = []; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (hasMorphPosition) { + const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; + pendingPositionAccessors.push(pendingAccessor); + } + if (hasMorphNormal) { + const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; + pendingNormalAccessors.push(pendingAccessor); + } + if (hasMorphColor) { + const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; + pendingColorAccessors.push(pendingAccessor); + } + } + return Promise.all([ + Promise.all(pendingPositionAccessors), + Promise.all(pendingNormalAccessors), + Promise.all(pendingColorAccessors) + ]).then(function(accessors) { + const morphPositions = accessors[0]; + const morphNormals = accessors[1]; + const morphColors = accessors[2]; + if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; + if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; + if (hasMorphColor) geometry.morphAttributes.color = morphColors; + geometry.morphTargetsRelative = true; + return geometry; + }); +} +__name(addMorphTargets, "addMorphTargets"); +function updateMorphTargets(mesh, meshDef) { + mesh.updateMorphTargets(); + if (meshDef.weights !== void 0) { + for (let i = 0, il = meshDef.weights.length; i < il; i++) { + mesh.morphTargetInfluences[i] = meshDef.weights[i]; + } + } + if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { + const targetNames = meshDef.extras.targetNames; + if (mesh.morphTargetInfluences.length === targetNames.length) { + mesh.morphTargetDictionary = {}; + for (let i = 0, il = targetNames.length; i < il; i++) { + mesh.morphTargetDictionary[targetNames[i]] = i; + } + } else { + console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); + } + } +} +__name(updateMorphTargets, "updateMorphTargets"); +function createPrimitiveKey(primitiveDef) { + let geometryKey; + const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; + if (dracoExtension) { + geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); + } else { + geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; + } + if (primitiveDef.targets !== void 0) { + for (let i = 0, il = primitiveDef.targets.length; i < il; i++) { + geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); + } + } + return geometryKey; +} +__name(createPrimitiveKey, "createPrimitiveKey"); +function createAttributesKey(attributes) { + let attributesKey = ""; + const keys = Object.keys(attributes).sort(); + for (let i = 0, il = keys.length; i < il; i++) { + attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"; + } + return attributesKey; +} +__name(createAttributesKey, "createAttributesKey"); +function getNormalizedComponentScale(constructor) { + switch (constructor) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); + } +} +__name(getNormalizedComponentScale, "getNormalizedComponentScale"); +function getImageURIMimeType(uri) { + if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; + if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; + if (uri.search(/\.ktx2($|\?)/i) > 0 || uri.search(/^data\:image\/ktx2/) === 0) return "image/ktx2"; + return "image/png"; +} +__name(getImageURIMimeType, "getImageURIMimeType"); +const _identityMatrix = new Matrix4(); +class GLTFParser { + static { + __name(this, "GLTFParser"); + } + constructor(json = {}, options = {}) { + this.json = json; + this.extensions = {}; + this.plugins = {}; + this.options = options; + this.cache = new GLTFRegistry(); + this.associations = /* @__PURE__ */ new Map(); + this.primitiveCache = {}; + this.nodeCache = {}; + this.meshCache = { refs: {}, uses: {} }; + this.cameraCache = { refs: {}, uses: {} }; + this.lightCache = { refs: {}, uses: {} }; + this.sourceCache = {}; + this.textureCache = {}; + this.nodeNamesUsed = {}; + let isSafari = false; + let safariVersion = -1; + let isFirefox = false; + let firefoxVersion = -1; + if (typeof navigator !== "undefined") { + const userAgent = navigator.userAgent; + isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) === true; + const safariMatch = userAgent.match(/Version\/(\d+)/); + safariVersion = isSafari && safariMatch ? parseInt(safariMatch[1], 10) : -1; + isFirefox = userAgent.indexOf("Firefox") > -1; + firefoxVersion = isFirefox ? userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; + } + if (typeof createImageBitmap === "undefined" || isSafari && safariVersion < 17 || isFirefox && firefoxVersion < 98) { + this.textureLoader = new TextureLoader(this.options.manager); + } else { + this.textureLoader = new ImageBitmapLoader(this.options.manager); + } + this.textureLoader.setCrossOrigin(this.options.crossOrigin); + this.textureLoader.setRequestHeader(this.options.requestHeader); + this.fileLoader = new FileLoader(this.options.manager); + this.fileLoader.setResponseType("arraybuffer"); + if (this.options.crossOrigin === "use-credentials") { + this.fileLoader.setWithCredentials(true); + } + } + setExtensions(extensions) { + this.extensions = extensions; + } + setPlugins(plugins) { + this.plugins = plugins; + } + parse(onLoad, onError) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + this.cache.removeAll(); + this.nodeCache = {}; + this._invokeAll(function(ext2) { + return ext2._markDefs && ext2._markDefs(); + }); + Promise.all(this._invokeAll(function(ext2) { + return ext2.beforeRoot && ext2.beforeRoot(); + })).then(function() { + return Promise.all([ + parser.getDependencies("scene"), + parser.getDependencies("animation"), + parser.getDependencies("camera") + ]); + }).then(function(dependencies) { + const result = { + scene: dependencies[0][json.scene || 0], + scenes: dependencies[0], + animations: dependencies[1], + cameras: dependencies[2], + asset: json.asset, + parser, + userData: {} + }; + addUnknownExtensionsToUserData(extensions, result, json); + assignExtrasToUserData(result, json); + return Promise.all(parser._invokeAll(function(ext2) { + return ext2.afterRoot && ext2.afterRoot(result); + })).then(function() { + for (const scene of result.scenes) { + scene.updateMatrixWorld(); + } + onLoad(result); + }); + }).catch(onError); + } + /** + * Marks the special nodes/meshes in json for efficient parse. + */ + _markDefs() { + const nodeDefs = this.json.nodes || []; + const skinDefs = this.json.skins || []; + const meshDefs = this.json.meshes || []; + for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { + const joints = skinDefs[skinIndex].joints; + for (let i = 0, il = joints.length; i < il; i++) { + nodeDefs[joints[i]].isBone = true; + } + } + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.mesh !== void 0) { + this._addNodeRef(this.meshCache, nodeDef.mesh); + if (nodeDef.skin !== void 0) { + meshDefs[nodeDef.mesh].isSkinnedMesh = true; + } + } + if (nodeDef.camera !== void 0) { + this._addNodeRef(this.cameraCache, nodeDef.camera); + } + } + } + /** + * Counts references to shared node / Object3D resources. These resources + * can be reused, or "instantiated", at multiple nodes in the scene + * hierarchy. Mesh, Camera, and Light instances are instantiated and must + * be marked. Non-scenegraph resources (like Materials, Geometries, and + * Textures) can be reused directly and are not marked here. + * + * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. + */ + _addNodeRef(cache, index) { + if (index === void 0) return; + if (cache.refs[index] === void 0) { + cache.refs[index] = cache.uses[index] = 0; + } + cache.refs[index]++; + } + /** Returns a reference to a shared resource, cloning it if necessary. */ + _getNodeRef(cache, index, object) { + if (cache.refs[index] <= 1) return object; + const ref = object.clone(); + const updateMappings = /* @__PURE__ */ __name((original, clone) => { + const mappings = this.associations.get(original); + if (mappings != null) { + this.associations.set(clone, mappings); + } + for (const [i, child] of original.children.entries()) { + updateMappings(child, clone.children[i]); + } + }, "updateMappings"); + updateMappings(object, ref); + ref.name += "_instance_" + cache.uses[index]++; + return ref; + } + _invokeOne(func) { + const extensions = Object.values(this.plugins); + extensions.push(this); + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) return result; + } + return null; + } + _invokeAll(func) { + const extensions = Object.values(this.plugins); + extensions.unshift(this); + const pending = []; + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) pending.push(result); + } + return pending; + } + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + getDependency(type, index) { + const cacheKey = type + ":" + index; + let dependency = this.cache.get(cacheKey); + if (!dependency) { + switch (type) { + case "scene": + dependency = this.loadScene(index); + break; + case "node": + dependency = this._invokeOne(function(ext2) { + return ext2.loadNode && ext2.loadNode(index); + }); + break; + case "mesh": + dependency = this._invokeOne(function(ext2) { + return ext2.loadMesh && ext2.loadMesh(index); + }); + break; + case "accessor": + dependency = this.loadAccessor(index); + break; + case "bufferView": + dependency = this._invokeOne(function(ext2) { + return ext2.loadBufferView && ext2.loadBufferView(index); + }); + break; + case "buffer": + dependency = this.loadBuffer(index); + break; + case "material": + dependency = this._invokeOne(function(ext2) { + return ext2.loadMaterial && ext2.loadMaterial(index); + }); + break; + case "texture": + dependency = this._invokeOne(function(ext2) { + return ext2.loadTexture && ext2.loadTexture(index); + }); + break; + case "skin": + dependency = this.loadSkin(index); + break; + case "animation": + dependency = this._invokeOne(function(ext2) { + return ext2.loadAnimation && ext2.loadAnimation(index); + }); + break; + case "camera": + dependency = this.loadCamera(index); + break; + default: + dependency = this._invokeOne(function(ext2) { + return ext2 != this && ext2.getDependency && ext2.getDependency(type, index); + }); + if (!dependency) { + throw new Error("Unknown type: " + type); + } + break; + } + this.cache.add(cacheKey, dependency); + } + return dependency; + } + /** + * Requests all dependencies of the specified type asynchronously, with caching. + * @param {string} type + * @return {Promise>} + */ + getDependencies(type) { + let dependencies = this.cache.get(type); + if (!dependencies) { + const parser = this; + const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; + dependencies = Promise.all(defs.map(function(def, index) { + return parser.getDependency(type, index); + })); + this.cache.add(type, dependencies); + } + return dependencies; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + loadBuffer(bufferIndex) { + const bufferDef = this.json.buffers[bufferIndex]; + const loader = this.fileLoader; + if (bufferDef.type && bufferDef.type !== "arraybuffer") { + throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); + } + if (bufferDef.uri === void 0 && bufferIndex === 0) { + return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); + } + const options = this.options; + return new Promise(function(resolve, reject) { + loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { + reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".')); + }); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + loadBufferView(bufferViewIndex) { + const bufferViewDef = this.json.bufferViews[bufferViewIndex]; + return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { + const byteLength = bufferViewDef.byteLength || 0; + const byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice(byteOffset, byteOffset + byteLength); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors + * @param {number} accessorIndex + * @return {Promise} + */ + loadAccessor(accessorIndex) { + const parser = this; + const json = this.json; + const accessorDef = this.json.accessors[accessorIndex]; + if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const normalized = accessorDef.normalized === true; + const array = new TypedArray(accessorDef.count * itemSize); + return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); + } + const pendingBufferViews = []; + if (accessorDef.bufferView !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); + } else { + pendingBufferViews.push(null); + } + if (accessorDef.sparse !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); + } + return Promise.all(pendingBufferViews).then(function(bufferViews) { + const bufferView = bufferViews[0]; + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const elementBytes = TypedArray.BYTES_PER_ELEMENT; + const itemBytes = elementBytes * itemSize; + const byteOffset = accessorDef.byteOffset || 0; + const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; + const normalized = accessorDef.normalized === true; + let array, bufferAttribute; + if (byteStride && byteStride !== itemBytes) { + const ibSlice = Math.floor(byteOffset / byteStride); + const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; + let ib = parser.cache.get(ibCacheKey); + if (!ib) { + array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); + ib = new InterleavedBuffer(array, byteStride / elementBytes); + parser.cache.add(ibCacheKey, ib); + } + bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); + } else { + if (bufferView === null) { + array = new TypedArray(accessorDef.count * itemSize); + } else { + array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); + } + bufferAttribute = new BufferAttribute(array, itemSize, normalized); + } + if (accessorDef.sparse !== void 0) { + const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; + const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; + const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; + const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; + const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); + const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); + if (bufferView !== null) { + bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); + } + bufferAttribute.normalized = false; + for (let i = 0, il = sparseIndices.length; i < il; i++) { + const index = sparseIndices[i]; + bufferAttribute.setX(index, sparseValues[i * itemSize]); + if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]); + if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]); + if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]); + if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); + } + bufferAttribute.normalized = normalized; + } + return bufferAttribute; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + loadTexture(textureIndex) { + const json = this.json; + const options = this.options; + const textureDef = json.textures[textureIndex]; + const sourceIndex = textureDef.source; + const sourceDef = json.images[sourceIndex]; + let loader = this.textureLoader; + if (sourceDef.uri) { + const handler = options.manager.getHandler(sourceDef.uri); + if (handler !== null) loader = handler; + } + return this.loadTextureImage(textureIndex, sourceIndex, loader); + } + loadTextureImage(textureIndex, sourceIndex, loader) { + const parser = this; + const json = this.json; + const textureDef = json.textures[textureIndex]; + const sourceDef = json.images[sourceIndex]; + const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; + if (this.textureCache[cacheKey]) { + return this.textureCache[cacheKey]; + } + const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { + texture.flipY = false; + texture.name = textureDef.name || sourceDef.name || ""; + if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) { + texture.name = sourceDef.uri; + } + const samplers = json.samplers || {}; + const sampler = samplers[textureDef.sampler] || {}; + texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter; + texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping; + texture.generateMipmaps = !texture.isCompressedTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + parser.associations.set(texture, { textures: textureIndex }); + return texture; + }).catch(function() { + return null; + }); + this.textureCache[cacheKey] = promise; + return promise; + } + loadImageSource(sourceIndex, loader) { + const parser = this; + const json = this.json; + const options = this.options; + if (this.sourceCache[sourceIndex] !== void 0) { + return this.sourceCache[sourceIndex].then((texture) => texture.clone()); + } + const sourceDef = json.images[sourceIndex]; + const URL2 = self.URL || self.webkitURL; + let sourceURI = sourceDef.uri || ""; + let isObjectURL = false; + if (sourceDef.bufferView !== void 0) { + sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { + isObjectURL = true; + const blob = new Blob([bufferView], { type: sourceDef.mimeType }); + sourceURI = URL2.createObjectURL(blob); + return sourceURI; + }); + } else if (sourceDef.uri === void 0) { + throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); + } + const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { + return new Promise(function(resolve, reject) { + let onLoad = resolve; + if (loader.isImageBitmapLoader === true) { + onLoad = /* @__PURE__ */ __name(function(imageBitmap) { + const texture = new Texture(imageBitmap); + texture.needsUpdate = true; + resolve(texture); + }, "onLoad"); + } + loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject); + }); + }).then(function(texture) { + if (isObjectURL === true) { + URL2.revokeObjectURL(sourceURI); + } + assignExtrasToUserData(texture, sourceDef); + texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); + return texture; + }).catch(function(error) { + console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); + throw error; + }); + this.sourceCache[sourceIndex] = promise; + return promise; + } + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} mapName + * @param {Object} mapDef + * @return {Promise} + */ + assignTexture(materialParams, mapName, mapDef, colorSpace) { + const parser = this; + return this.getDependency("texture", mapDef.index).then(function(texture) { + if (!texture) return null; + if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { + texture = texture.clone(); + texture.channel = mapDef.texCoord; + } + if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { + const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; + if (transform) { + const gltfReference = parser.associations.get(texture); + texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform); + parser.associations.set(texture, gltfReference); + } + } + if (colorSpace !== void 0) { + texture.colorSpace = colorSpace; + } + materialParams[mapName] = texture; + return texture; + }); + } + /** + * Assigns final material to a Mesh, Line, or Points instance. The instance + * already has a material (generated from the glTF material options alone) + * but reuse of the same glTF material may require multiple threejs materials + * to accommodate different primitive types, defines, etc. New materials will + * be created if necessary, and reused from a cache. + * @param {Object3D} mesh Mesh, Line, or Points instance. + */ + assignFinalMaterial(mesh) { + const geometry = mesh.geometry; + let material = mesh.material; + const useDerivativeTangents = geometry.attributes.tangent === void 0; + const useVertexColors = geometry.attributes.color !== void 0; + const useFlatShading = geometry.attributes.normal === void 0; + if (mesh.isPoints) { + const cacheKey = "PointsMaterial:" + material.uuid; + let pointsMaterial = this.cache.get(cacheKey); + if (!pointsMaterial) { + pointsMaterial = new PointsMaterial(); + Material.prototype.copy.call(pointsMaterial, material); + pointsMaterial.color.copy(material.color); + pointsMaterial.map = material.map; + pointsMaterial.sizeAttenuation = false; + this.cache.add(cacheKey, pointsMaterial); + } + material = pointsMaterial; + } else if (mesh.isLine) { + const cacheKey = "LineBasicMaterial:" + material.uuid; + let lineMaterial = this.cache.get(cacheKey); + if (!lineMaterial) { + lineMaterial = new LineBasicMaterial(); + Material.prototype.copy.call(lineMaterial, material); + lineMaterial.color.copy(material.color); + lineMaterial.map = material.map; + this.cache.add(cacheKey, lineMaterial); + } + material = lineMaterial; + } + if (useDerivativeTangents || useVertexColors || useFlatShading) { + let cacheKey = "ClonedMaterial:" + material.uuid + ":"; + if (useDerivativeTangents) cacheKey += "derivative-tangents:"; + if (useVertexColors) cacheKey += "vertex-colors:"; + if (useFlatShading) cacheKey += "flat-shading:"; + let cachedMaterial = this.cache.get(cacheKey); + if (!cachedMaterial) { + cachedMaterial = material.clone(); + if (useVertexColors) cachedMaterial.vertexColors = true; + if (useFlatShading) cachedMaterial.flatShading = true; + if (useDerivativeTangents) { + if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; + if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; + } + this.cache.add(cacheKey, cachedMaterial); + this.associations.set(cachedMaterial, this.associations.get(material)); + } + material = cachedMaterial; + } + mesh.material = material; + } + getMaterialType() { + return MeshStandardMaterial; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @param {number} materialIndex + * @return {Promise} + */ + loadMaterial(materialIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const materialDef = json.materials[materialIndex]; + let materialType; + const materialParams = {}; + const materialExtensions = materialDef.extensions || {}; + const pending = []; + if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { + const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; + materialType = kmuExtension.getMaterialType(); + pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); + } else { + const metallicRoughness = materialDef.pbrMetallicRoughness || {}; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; + materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; + if (metallicRoughness.metallicRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); + pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); + } + materialType = this._invokeOne(function(ext2) { + return ext2.getMaterialType && ext2.getMaterialType(materialIndex); + }); + pending.push(Promise.all(this._invokeAll(function(ext2) { + return ext2.extendMaterialParams && ext2.extendMaterialParams(materialIndex, materialParams); + }))); + } + if (materialDef.doubleSided === true) { + materialParams.side = DoubleSide; + } + const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; + if (alphaMode === ALPHA_MODES.BLEND) { + materialParams.transparent = true; + materialParams.depthWrite = false; + } else { + materialParams.transparent = false; + if (alphaMode === ALPHA_MODES.MASK) { + materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5; + } + } + if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); + materialParams.normalScale = new Vector2(1, 1); + if (materialDef.normalTexture.scale !== void 0) { + const scale = materialDef.normalTexture.scale; + materialParams.normalScale.set(scale, scale); + } + } + if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); + if (materialDef.occlusionTexture.strength !== void 0) { + materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; + } + } + if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { + const emissiveFactor = materialDef.emissiveFactor; + materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace); + } + if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace)); + } + return Promise.all(pending).then(function() { + const material = new materialType(materialParams); + if (materialDef.name) material.name = materialDef.name; + assignExtrasToUserData(material, materialDef); + parser.associations.set(material, { materials: materialIndex }); + if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); + return material; + }); + } + /** When Object3D instances are targeted by animation, they need unique names. */ + createUniqueName(originalName) { + const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); + if (sanitizedName in this.nodeNamesUsed) { + return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; + } else { + this.nodeNamesUsed[sanitizedName] = 0; + return sanitizedName; + } + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry + * + * Creates BufferGeometries from primitives. + * + * @param {Array} primitives + * @return {Promise>} + */ + loadGeometries(primitives) { + const parser = this; + const extensions = this.extensions; + const cache = this.primitiveCache; + function createDracoPrimitive(primitive) { + return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { + return addPrimitiveAttributes(geometry, primitive, parser); + }); + } + __name(createDracoPrimitive, "createDracoPrimitive"); + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const primitive = primitives[i]; + const cacheKey = createPrimitiveKey(primitive); + const cached = cache[cacheKey]; + if (cached) { + pending.push(cached.promise); + } else { + let geometryPromise; + if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) { + geometryPromise = createDracoPrimitive(primitive); + } else { + geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); + } + cache[cacheKey] = { primitive, promise: geometryPromise }; + pending.push(geometryPromise); + } + } + return Promise.all(pending); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + * @param {number} meshIndex + * @return {Promise} + */ + loadMesh(meshIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const meshDef = json.meshes[meshIndex]; + const primitives = meshDef.primitives; + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); + pending.push(material); + } + pending.push(parser.loadGeometries(primitives)); + return Promise.all(pending).then(function(results) { + const materials = results.slice(0, results.length - 1); + const geometries = results[results.length - 1]; + const meshes = []; + for (let i = 0, il = geometries.length; i < il; i++) { + const geometry = geometries[i]; + const primitive = primitives[i]; + let mesh; + const material = materials[i]; + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) { + mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); + if (mesh.isSkinnedMesh === true) { + mesh.normalizeSkinWeights(); + } + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode); + } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode); + } + } else if (primitive.mode === WEBGL_CONSTANTS.LINES) { + mesh = new LineSegments(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) { + mesh = new Line(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) { + mesh = new LineLoop(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) { + mesh = new Points(geometry, material); + } else { + throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); + } + if (Object.keys(mesh.geometry.morphAttributes).length > 0) { + updateMorphTargets(mesh, meshDef); + } + mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); + assignExtrasToUserData(mesh, meshDef); + if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); + parser.assignFinalMaterial(mesh); + meshes.push(mesh); + } + for (let i = 0, il = meshes.length; i < il; i++) { + parser.associations.set(meshes[i], { + meshes: meshIndex, + primitives: i + }); + } + if (meshes.length === 1) { + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); + return meshes[0]; + } + const group = new Group(); + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); + parser.associations.set(group, { meshes: meshIndex }); + for (let i = 0, il = meshes.length; i < il; i++) { + group.add(meshes[i]); + } + return group; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + * @param {number} cameraIndex + * @return {Promise} + */ + loadCamera(cameraIndex) { + let camera; + const cameraDef = this.json.cameras[cameraIndex]; + const params = cameraDef[cameraDef.type]; + if (!params) { + console.warn("THREE.GLTFLoader: Missing camera parameters."); + return; + } + if (cameraDef.type === "perspective") { + camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); + } else if (cameraDef.type === "orthographic") { + camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); + } + if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); + assignExtrasToUserData(camera, cameraDef); + return Promise.resolve(camera); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins + * @param {number} skinIndex + * @return {Promise} + */ + loadSkin(skinIndex) { + const skinDef = this.json.skins[skinIndex]; + const pending = []; + for (let i = 0, il = skinDef.joints.length; i < il; i++) { + pending.push(this._loadNodeShallow(skinDef.joints[i])); + } + if (skinDef.inverseBindMatrices !== void 0) { + pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); + } else { + pending.push(null); + } + return Promise.all(pending).then(function(results) { + const inverseBindMatrices = results.pop(); + const jointNodes = results; + const bones = []; + const boneInverses = []; + for (let i = 0, il = jointNodes.length; i < il; i++) { + const jointNode = jointNodes[i]; + if (jointNode) { + bones.push(jointNode); + const mat = new Matrix4(); + if (inverseBindMatrices !== null) { + mat.fromArray(inverseBindMatrices.array, i * 16); + } + boneInverses.push(mat); + } else { + console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]); + } + } + return new Skeleton(bones, boneInverses); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations + * @param {number} animationIndex + * @return {Promise} + */ + loadAnimation(animationIndex) { + const json = this.json; + const parser = this; + const animationDef = json.animations[animationIndex]; + const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; + const pendingNodes = []; + const pendingInputAccessors = []; + const pendingOutputAccessors = []; + const pendingSamplers = []; + const pendingTargets = []; + for (let i = 0, il = animationDef.channels.length; i < il; i++) { + const channel = animationDef.channels[i]; + const sampler = animationDef.samplers[channel.sampler]; + const target = channel.target; + const name = target.node; + const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; + const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; + if (target.node === void 0) continue; + pendingNodes.push(this.getDependency("node", name)); + pendingInputAccessors.push(this.getDependency("accessor", input)); + pendingOutputAccessors.push(this.getDependency("accessor", output)); + pendingSamplers.push(sampler); + pendingTargets.push(target); + } + return Promise.all([ + Promise.all(pendingNodes), + Promise.all(pendingInputAccessors), + Promise.all(pendingOutputAccessors), + Promise.all(pendingSamplers), + Promise.all(pendingTargets) + ]).then(function(dependencies) { + const nodes = dependencies[0]; + const inputAccessors = dependencies[1]; + const outputAccessors = dependencies[2]; + const samplers = dependencies[3]; + const targets = dependencies[4]; + const tracks = []; + for (let i = 0, il = nodes.length; i < il; i++) { + const node = nodes[i]; + const inputAccessor = inputAccessors[i]; + const outputAccessor = outputAccessors[i]; + const sampler = samplers[i]; + const target = targets[i]; + if (node === void 0) continue; + if (node.updateMatrix) { + node.updateMatrix(); + } + const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); + if (createdTracks) { + for (let k = 0; k < createdTracks.length; k++) { + tracks.push(createdTracks[k]); + } + } + } + return new AnimationClip(animationName, void 0, tracks); + }); + } + createNodeMesh(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + if (nodeDef.mesh === void 0) return null; + return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { + const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); + if (nodeDef.weights !== void 0) { + node.traverse(function(o) { + if (!o.isMesh) return; + for (let i = 0, il = nodeDef.weights.length; i < il; i++) { + o.morphTargetInfluences[i] = nodeDef.weights[i]; + } + }); + } + return node; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy + * @param {number} nodeIndex + * @return {Promise} + */ + loadNode(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + const nodePending = parser._loadNodeShallow(nodeIndex); + const childPending = []; + const childrenDef = nodeDef.children || []; + for (let i = 0, il = childrenDef.length; i < il; i++) { + childPending.push(parser.getDependency("node", childrenDef[i])); + } + const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); + return Promise.all([ + nodePending, + Promise.all(childPending), + skeletonPending + ]).then(function(results) { + const node = results[0]; + const children = results[1]; + const skeleton = results[2]; + if (skeleton !== null) { + node.traverse(function(mesh) { + if (!mesh.isSkinnedMesh) return; + mesh.bind(skeleton, _identityMatrix); + }); + } + for (let i = 0, il = children.length; i < il; i++) { + node.add(children[i]); + } + return node; + }); + } + // ._loadNodeShallow() parses a single node. + // skin and child nodes are created and added in .loadNode() (no '_' prefix). + _loadNodeShallow(nodeIndex) { + const json = this.json; + const extensions = this.extensions; + const parser = this; + if (this.nodeCache[nodeIndex] !== void 0) { + return this.nodeCache[nodeIndex]; + } + const nodeDef = json.nodes[nodeIndex]; + const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; + const pending = []; + const meshPromise = parser._invokeOne(function(ext2) { + return ext2.createNodeMesh && ext2.createNodeMesh(nodeIndex); + }); + if (meshPromise) { + pending.push(meshPromise); + } + if (nodeDef.camera !== void 0) { + pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { + return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); + })); + } + parser._invokeAll(function(ext2) { + return ext2.createNodeAttachment && ext2.createNodeAttachment(nodeIndex); + }).forEach(function(promise) { + pending.push(promise); + }); + this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { + let node; + if (nodeDef.isBone === true) { + node = new Bone(); + } else if (objects.length > 1) { + node = new Group(); + } else if (objects.length === 1) { + node = objects[0]; + } else { + node = new Object3D(); + } + if (node !== objects[0]) { + for (let i = 0, il = objects.length; i < il; i++) { + node.add(objects[i]); + } + } + if (nodeDef.name) { + node.userData.name = nodeDef.name; + node.name = nodeName; + } + assignExtrasToUserData(node, nodeDef); + if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); + if (nodeDef.matrix !== void 0) { + const matrix = new Matrix4(); + matrix.fromArray(nodeDef.matrix); + node.applyMatrix4(matrix); + } else { + if (nodeDef.translation !== void 0) { + node.position.fromArray(nodeDef.translation); + } + if (nodeDef.rotation !== void 0) { + node.quaternion.fromArray(nodeDef.rotation); + } + if (nodeDef.scale !== void 0) { + node.scale.fromArray(nodeDef.scale); + } + } + if (!parser.associations.has(node)) { + parser.associations.set(node, {}); + } + parser.associations.get(node).nodes = nodeIndex; + return node; + }); + return this.nodeCache[nodeIndex]; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes + * @param {number} sceneIndex + * @return {Promise} + */ + loadScene(sceneIndex) { + const extensions = this.extensions; + const sceneDef = this.json.scenes[sceneIndex]; + const parser = this; + const scene = new Group(); + if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); + assignExtrasToUserData(scene, sceneDef); + if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); + const nodeIds = sceneDef.nodes || []; + const pending = []; + for (let i = 0, il = nodeIds.length; i < il; i++) { + pending.push(parser.getDependency("node", nodeIds[i])); + } + return Promise.all(pending).then(function(nodes) { + for (let i = 0, il = nodes.length; i < il; i++) { + scene.add(nodes[i]); + } + const reduceAssociations = /* @__PURE__ */ __name((node) => { + const reducedAssociations = /* @__PURE__ */ new Map(); + for (const [key, value] of parser.associations) { + if (key instanceof Material || key instanceof Texture) { + reducedAssociations.set(key, value); + } + } + node.traverse((node2) => { + const mappings = parser.associations.get(node2); + if (mappings != null) { + reducedAssociations.set(node2, mappings); + } + }); + return reducedAssociations; + }, "reduceAssociations"); + parser.associations = reduceAssociations(scene); + return scene; + }); + } + _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { + const tracks = []; + const targetName = node.name ? node.name : node.uuid; + const targetNames = []; + if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) { + node.traverse(function(object) { + if (object.morphTargetInfluences) { + targetNames.push(object.name ? object.name : object.uuid); + } + }); + } else { + targetNames.push(targetName); + } + let TypedKeyframeTrack; + switch (PATH_PROPERTIES[target.path]) { + case PATH_PROPERTIES.weights: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case PATH_PROPERTIES.rotation: + TypedKeyframeTrack = QuaternionKeyframeTrack; + break; + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + default: + switch (outputAccessor.itemSize) { + case 1: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case 2: + case 3: + default: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + } + break; + } + const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; + const outputArray = this._getArrayFromAccessor(outputAccessor); + for (let j = 0, jl = targetNames.length; j < jl; j++) { + const track = new TypedKeyframeTrack( + targetNames[j] + "." + PATH_PROPERTIES[target.path], + inputAccessor.array, + outputArray, + interpolation + ); + if (sampler.interpolation === "CUBICSPLINE") { + this._createCubicSplineTrackInterpolant(track); + } + tracks.push(track); + } + return tracks; + } + _getArrayFromAccessor(accessor) { + let outputArray = accessor.array; + if (accessor.normalized) { + const scale = getNormalizedComponentScale(outputArray.constructor); + const scaled = new Float32Array(outputArray.length); + for (let j = 0, jl = outputArray.length; j < jl; j++) { + scaled[j] = outputArray[j] * scale; + } + outputArray = scaled; + } + return outputArray; + } + _createCubicSplineTrackInterpolant(track) { + track.createInterpolant = /* @__PURE__ */ __name(function InterpolantFactoryMethodGLTFCubicSpline(result) { + const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant; + return new interpolantType(this.times, this.values, this.getValueSize() / 3, result); + }, "InterpolantFactoryMethodGLTFCubicSpline"); + track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; + } +} +function computeBounds(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const box = new Box3(); + if (attributes.POSITION !== void 0) { + const accessor = parser.json.accessors[attributes.POSITION]; + const min = accessor.min; + const max2 = accessor.max; + if (min !== void 0 && max2 !== void 0) { + box.set( + new Vector3(min[0], min[1], min[2]), + new Vector3(max2[0], max2[1], max2[2]) + ); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + box.min.multiplyScalar(boxScale); + box.max.multiplyScalar(boxScale); + } + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + return; + } + } else { + return; + } + const targets = primitiveDef.targets; + if (targets !== void 0) { + const maxDisplacement = new Vector3(); + const vector = new Vector3(); + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) { + const accessor = parser.json.accessors[target.POSITION]; + const min = accessor.min; + const max2 = accessor.max; + if (min !== void 0 && max2 !== void 0) { + vector.setX(Math.max(Math.abs(min[0]), Math.abs(max2[0]))); + vector.setY(Math.max(Math.abs(min[1]), Math.abs(max2[1]))); + vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max2[2]))); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + vector.multiplyScalar(boxScale); + } + maxDisplacement.max(vector); + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + } + } + } + box.expandByVector(maxDisplacement); + } + geometry.boundingBox = box; + const sphere = new Sphere(); + box.getCenter(sphere.center); + sphere.radius = box.min.distanceTo(box.max) / 2; + geometry.boundingSphere = sphere; +} +__name(computeBounds, "computeBounds"); +function addPrimitiveAttributes(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const pending = []; + function assignAttributeAccessor(accessorIndex, attributeName) { + return parser.getDependency("accessor", accessorIndex).then(function(accessor) { + geometry.setAttribute(attributeName, accessor); + }); + } + __name(assignAttributeAccessor, "assignAttributeAccessor"); + for (const gltfAttributeName in attributes) { + const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); + if (threeAttributeName in geometry.attributes) continue; + pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); + } + if (primitiveDef.indices !== void 0 && !geometry.index) { + const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { + geometry.setIndex(accessor2); + }); + pending.push(accessor); + } + if (ColorManagement.workingColorSpace !== LinearSRGBColorSpace && "COLOR_0" in attributes) { + console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.`); + } + assignExtrasToUserData(geometry, primitiveDef); + computeBounds(geometry, primitiveDef, parser); + return Promise.all(pending).then(function() { + return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; + }); +} +__name(addPrimitiveAttributes, "addPrimitiveAttributes"); +const _object_pattern = /^[og]\s*(.+)?/; +const _material_library_pattern = /^mtllib /; +const _material_use_pattern = /^usemtl /; +const _map_use_pattern = /^usemap /; +const _face_vertex_data_separator_pattern = /\s+/; +const _vA = new Vector3(); +const _vB = new Vector3(); +const _vC = new Vector3(); +const _ab = new Vector3(); +const _cb = new Vector3(); +const _color = new Color(); +function ParserState() { + const state = { + objects: [], + object: {}, + vertices: [], + normals: [], + colors: [], + uvs: [], + materials: {}, + materialLibraries: [], + startObject: /* @__PURE__ */ __name(function(name, fromDeclaration) { + if (this.object && this.object.fromDeclaration === false) { + this.object.name = name; + this.object.fromDeclaration = fromDeclaration !== false; + return; + } + const previousMaterial = this.object && typeof this.object.currentMaterial === "function" ? this.object.currentMaterial() : void 0; + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + this.object = { + name: name || "", + fromDeclaration: fromDeclaration !== false, + geometry: { + vertices: [], + normals: [], + colors: [], + uvs: [], + hasUVIndices: false + }, + materials: [], + smooth: true, + startMaterial: /* @__PURE__ */ __name(function(name2, libraries) { + const previous = this._finalize(false); + if (previous && (previous.inherited || previous.groupCount <= 0)) { + this.materials.splice(previous.index, 1); + } + const material = { + index: this.materials.length, + name: name2 || "", + mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : "", + smooth: previous !== void 0 ? previous.smooth : this.smooth, + groupStart: previous !== void 0 ? previous.groupEnd : 0, + groupEnd: -1, + groupCount: -1, + inherited: false, + clone: /* @__PURE__ */ __name(function(index) { + const cloned = { + index: typeof index === "number" ? index : this.index, + name: this.name, + mtllib: this.mtllib, + smooth: this.smooth, + groupStart: 0, + groupEnd: -1, + groupCount: -1, + inherited: false + }; + cloned.clone = this.clone.bind(cloned); + return cloned; + }, "clone") + }; + this.materials.push(material); + return material; + }, "startMaterial"), + currentMaterial: /* @__PURE__ */ __name(function() { + if (this.materials.length > 0) { + return this.materials[this.materials.length - 1]; + } + return void 0; + }, "currentMaterial"), + _finalize: /* @__PURE__ */ __name(function(end) { + const lastMultiMaterial = this.currentMaterial(); + if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) { + lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3; + lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart; + lastMultiMaterial.inherited = false; + } + if (end && this.materials.length > 1) { + for (let mi = this.materials.length - 1; mi >= 0; mi--) { + if (this.materials[mi].groupCount <= 0) { + this.materials.splice(mi, 1); + } + } + } + if (end && this.materials.length === 0) { + this.materials.push({ + name: "", + smooth: this.smooth + }); + } + return lastMultiMaterial; + }, "_finalize") + }; + if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === "function") { + const declared = previousMaterial.clone(0); + declared.inherited = true; + this.object.materials.push(declared); + } + this.objects.push(this.object); + }, "startObject"), + finalize: /* @__PURE__ */ __name(function() { + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + }, "finalize"), + parseVertexIndex: /* @__PURE__ */ __name(function(value, len) { + const index = parseInt(value, 10); + return (index >= 0 ? index - 1 : index + len / 3) * 3; + }, "parseVertexIndex"), + parseNormalIndex: /* @__PURE__ */ __name(function(value, len) { + const index = parseInt(value, 10); + return (index >= 0 ? index - 1 : index + len / 3) * 3; + }, "parseNormalIndex"), + parseUVIndex: /* @__PURE__ */ __name(function(value, len) { + const index = parseInt(value, 10); + return (index >= 0 ? index - 1 : index + len / 2) * 2; + }, "parseUVIndex"), + addVertex: /* @__PURE__ */ __name(function(a, b, c) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a + 0], src[a + 1], src[a + 2]); + dst.push(src[b + 0], src[b + 1], src[b + 2]); + dst.push(src[c + 0], src[c + 1], src[c + 2]); + }, "addVertex"), + addVertexPoint: /* @__PURE__ */ __name(function(a) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a + 0], src[a + 1], src[a + 2]); + }, "addVertexPoint"), + addVertexLine: /* @__PURE__ */ __name(function(a) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a + 0], src[a + 1], src[a + 2]); + }, "addVertexLine"), + addNormal: /* @__PURE__ */ __name(function(a, b, c) { + const src = this.normals; + const dst = this.object.geometry.normals; + dst.push(src[a + 0], src[a + 1], src[a + 2]); + dst.push(src[b + 0], src[b + 1], src[b + 2]); + dst.push(src[c + 0], src[c + 1], src[c + 2]); + }, "addNormal"), + addFaceNormal: /* @__PURE__ */ __name(function(a, b, c) { + const src = this.vertices; + const dst = this.object.geometry.normals; + _vA.fromArray(src, a); + _vB.fromArray(src, b); + _vC.fromArray(src, c); + _cb.subVectors(_vC, _vB); + _ab.subVectors(_vA, _vB); + _cb.cross(_ab); + _cb.normalize(); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + }, "addFaceNormal"), + addColor: /* @__PURE__ */ __name(function(a, b, c) { + const src = this.colors; + const dst = this.object.geometry.colors; + if (src[a] !== void 0) dst.push(src[a + 0], src[a + 1], src[a + 2]); + if (src[b] !== void 0) dst.push(src[b + 0], src[b + 1], src[b + 2]); + if (src[c] !== void 0) dst.push(src[c + 0], src[c + 1], src[c + 2]); + }, "addColor"), + addUV: /* @__PURE__ */ __name(function(a, b, c) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a + 0], src[a + 1]); + dst.push(src[b + 0], src[b + 1]); + dst.push(src[c + 0], src[c + 1]); + }, "addUV"), + addDefaultUV: /* @__PURE__ */ __name(function() { + const dst = this.object.geometry.uvs; + dst.push(0, 0); + dst.push(0, 0); + dst.push(0, 0); + }, "addDefaultUV"), + addUVLine: /* @__PURE__ */ __name(function(a) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a + 0], src[a + 1]); + }, "addUVLine"), + addFace: /* @__PURE__ */ __name(function(a, b, c, ua, ub, uc, na, nb, nc) { + const vLen = this.vertices.length; + let ia = this.parseVertexIndex(a, vLen); + let ib = this.parseVertexIndex(b, vLen); + let ic = this.parseVertexIndex(c, vLen); + this.addVertex(ia, ib, ic); + this.addColor(ia, ib, ic); + if (na !== void 0 && na !== "") { + const nLen = this.normals.length; + ia = this.parseNormalIndex(na, nLen); + ib = this.parseNormalIndex(nb, nLen); + ic = this.parseNormalIndex(nc, nLen); + this.addNormal(ia, ib, ic); + } else { + this.addFaceNormal(ia, ib, ic); + } + if (ua !== void 0 && ua !== "") { + const uvLen = this.uvs.length; + ia = this.parseUVIndex(ua, uvLen); + ib = this.parseUVIndex(ub, uvLen); + ic = this.parseUVIndex(uc, uvLen); + this.addUV(ia, ib, ic); + this.object.geometry.hasUVIndices = true; + } else { + this.addDefaultUV(); + } + }, "addFace"), + addPointGeometry: /* @__PURE__ */ __name(function(vertices) { + this.object.geometry.type = "Points"; + const vLen = this.vertices.length; + for (let vi = 0, l = vertices.length; vi < l; vi++) { + const index = this.parseVertexIndex(vertices[vi], vLen); + this.addVertexPoint(index); + this.addColor(index); + } + }, "addPointGeometry"), + addLineGeometry: /* @__PURE__ */ __name(function(vertices, uvs) { + this.object.geometry.type = "Line"; + const vLen = this.vertices.length; + const uvLen = this.uvs.length; + for (let vi = 0, l = vertices.length; vi < l; vi++) { + this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen)); + } + for (let uvi = 0, l = uvs.length; uvi < l; uvi++) { + this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen)); + } + }, "addLineGeometry") + }; + state.startObject("", false); + return state; +} +__name(ParserState, "ParserState"); +class OBJLoader extends Loader { + static { + __name(this, "OBJLoader"); + } + constructor(manager) { + super(manager); + this.materials = null; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(text)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterials(materials) { + this.materials = materials; + return this; + } + parse(text) { + const state = new ParserState(); + if (text.indexOf("\r\n") !== -1) { + text = text.replace(/\r\n/g, "\n"); + } + if (text.indexOf("\\\n") !== -1) { + text = text.replace(/\\\n/g, ""); + } + const lines = text.split("\n"); + let result = []; + for (let i = 0, l = lines.length; i < l; i++) { + const line = lines[i].trimStart(); + if (line.length === 0) continue; + const lineFirstChar = line.charAt(0); + if (lineFirstChar === "#") continue; + if (lineFirstChar === "v") { + const data = line.split(_face_vertex_data_separator_pattern); + switch (data[0]) { + case "v": + state.vertices.push( + parseFloat(data[1]), + parseFloat(data[2]), + parseFloat(data[3]) + ); + if (data.length >= 7) { + _color.setRGB( + parseFloat(data[4]), + parseFloat(data[5]), + parseFloat(data[6]), + SRGBColorSpace + ); + state.colors.push(_color.r, _color.g, _color.b); + } else { + state.colors.push(void 0, void 0, void 0); + } + break; + case "vn": + state.normals.push( + parseFloat(data[1]), + parseFloat(data[2]), + parseFloat(data[3]) + ); + break; + case "vt": + state.uvs.push( + parseFloat(data[1]), + parseFloat(data[2]) + ); + break; + } + } else if (lineFirstChar === "f") { + const lineData = line.slice(1).trim(); + const vertexData = lineData.split(_face_vertex_data_separator_pattern); + const faceVertices = []; + for (let j = 0, jl = vertexData.length; j < jl; j++) { + const vertex2 = vertexData[j]; + if (vertex2.length > 0) { + const vertexParts = vertex2.split("/"); + faceVertices.push(vertexParts); + } + } + const v1 = faceVertices[0]; + for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) { + const v2 = faceVertices[j]; + const v3 = faceVertices[j + 1]; + state.addFace( + v1[0], + v2[0], + v3[0], + v1[1], + v2[1], + v3[1], + v1[2], + v2[2], + v3[2] + ); + } + } else if (lineFirstChar === "l") { + const lineParts = line.substring(1).trim().split(" "); + let lineVertices = []; + const lineUVs = []; + if (line.indexOf("/") === -1) { + lineVertices = lineParts; + } else { + for (let li = 0, llen = lineParts.length; li < llen; li++) { + const parts = lineParts[li].split("/"); + if (parts[0] !== "") lineVertices.push(parts[0]); + if (parts[1] !== "") lineUVs.push(parts[1]); + } + } + state.addLineGeometry(lineVertices, lineUVs); + } else if (lineFirstChar === "p") { + const lineData = line.slice(1).trim(); + const pointData = lineData.split(" "); + state.addPointGeometry(pointData); + } else if ((result = _object_pattern.exec(line)) !== null) { + const name = (" " + result[0].slice(1).trim()).slice(1); + state.startObject(name); + } else if (_material_use_pattern.test(line)) { + state.object.startMaterial(line.substring(7).trim(), state.materialLibraries); + } else if (_material_library_pattern.test(line)) { + state.materialLibraries.push(line.substring(7).trim()); + } else if (_map_use_pattern.test(line)) { + console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.'); + } else if (lineFirstChar === "s") { + result = line.split(" "); + if (result.length > 1) { + const value = result[1].trim().toLowerCase(); + state.object.smooth = value !== "0" && value !== "off"; + } else { + state.object.smooth = true; + } + const material = state.object.currentMaterial(); + if (material) material.smooth = state.object.smooth; + } else { + if (line === "\0") continue; + console.warn('THREE.OBJLoader: Unexpected line: "' + line + '"'); + } + } + state.finalize(); + const container = new Group(); + container.materialLibraries = [].concat(state.materialLibraries); + const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0); + if (hasPrimitives === true) { + for (let i = 0, l = state.objects.length; i < l; i++) { + const object = state.objects[i]; + const geometry = object.geometry; + const materials = object.materials; + const isLine = geometry.type === "Line"; + const isPoints = geometry.type === "Points"; + let hasVertexColors = false; + if (geometry.vertices.length === 0) continue; + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(geometry.vertices, 3)); + if (geometry.normals.length > 0) { + buffergeometry.setAttribute("normal", new Float32BufferAttribute(geometry.normals, 3)); + } + if (geometry.colors.length > 0) { + hasVertexColors = true; + buffergeometry.setAttribute("color", new Float32BufferAttribute(geometry.colors, 3)); + } + if (geometry.hasUVIndices === true) { + buffergeometry.setAttribute("uv", new Float32BufferAttribute(geometry.uvs, 2)); + } + const createdMaterials = []; + for (let mi = 0, miLen = materials.length; mi < miLen; mi++) { + const sourceMaterial = materials[mi]; + const materialHash = sourceMaterial.name + "_" + sourceMaterial.smooth + "_" + hasVertexColors; + let material = state.materials[materialHash]; + if (this.materials !== null) { + material = this.materials.create(sourceMaterial.name); + if (isLine && material && !(material instanceof LineBasicMaterial)) { + const materialLine = new LineBasicMaterial(); + Material.prototype.copy.call(materialLine, material); + materialLine.color.copy(material.color); + material = materialLine; + } else if (isPoints && material && !(material instanceof PointsMaterial)) { + const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false }); + Material.prototype.copy.call(materialPoints, material); + materialPoints.color.copy(material.color); + materialPoints.map = material.map; + material = materialPoints; + } + } + if (material === void 0) { + if (isLine) { + material = new LineBasicMaterial(); + } else if (isPoints) { + material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + } else { + material = new MeshPhongMaterial(); + } + material.name = sourceMaterial.name; + material.flatShading = sourceMaterial.smooth ? false : true; + material.vertexColors = hasVertexColors; + state.materials[materialHash] = material; + } + createdMaterials.push(material); + } + let mesh; + if (createdMaterials.length > 1) { + for (let mi = 0, miLen = materials.length; mi < miLen; mi++) { + const sourceMaterial = materials[mi]; + buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi); + } + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials); + } else { + mesh = new Mesh(buffergeometry, createdMaterials); + } + } else { + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials[0]); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials[0]); + } else { + mesh = new Mesh(buffergeometry, createdMaterials[0]); + } + } + mesh.name = object.name; + container.add(mesh); + } + } else { + if (state.vertices.length > 0) { + const material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(state.vertices, 3)); + if (state.colors.length > 0 && state.colors[0] !== void 0) { + buffergeometry.setAttribute("color", new Float32BufferAttribute(state.colors, 3)); + material.vertexColors = true; + } + const points = new Points(buffergeometry, material); + container.add(points); + } + } + return container; + } +} +class MTLLoader extends Loader { + static { + __name(this, "MTLLoader"); + } + constructor(manager) { + super(manager); + } + /** + * Loads and parses a MTL asset from a URL. + * + * @param {String} url - URL to the MTL file. + * @param {Function} [onLoad] - Callback invoked with the loaded object. + * @param {Function} [onProgress] - Callback for download progress. + * @param {Function} [onError] - Callback for download errors. + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to load. + */ + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(text, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterialOptions(value) { + this.materialOptions = value; + return this; + } + /** + * Parses a MTL file. + * + * @param {String} text - Content of MTL file + * @return {MaterialCreator} + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to parse. + */ + parse(text, path) { + const lines = text.split("\n"); + let info = {}; + const delimiter_pattern = /\s+/; + const materialsInfo = {}; + for (let i = 0; i < lines.length; i++) { + let line = lines[i]; + line = line.trim(); + if (line.length === 0 || line.charAt(0) === "#") { + continue; + } + const pos = line.indexOf(" "); + let key = pos >= 0 ? line.substring(0, pos) : line; + key = key.toLowerCase(); + let value = pos >= 0 ? line.substring(pos + 1) : ""; + value = value.trim(); + if (key === "newmtl") { + info = { name: value }; + materialsInfo[value] = info; + } else { + if (key === "ka" || key === "kd" || key === "ks" || key === "ke") { + const ss = value.split(delimiter_pattern, 3); + info[key] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])]; + } else { + info[key] = value; + } + } + } + const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions); + materialCreator.setCrossOrigin(this.crossOrigin); + materialCreator.setManager(this.manager); + materialCreator.setMaterials(materialsInfo); + return materialCreator; + } +} +class MaterialCreator { + static { + __name(this, "MaterialCreator"); + } + constructor(baseUrl = "", options = {}) { + this.baseUrl = baseUrl; + this.options = options; + this.materialsInfo = {}; + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + this.crossOrigin = "anonymous"; + this.side = this.options.side !== void 0 ? this.options.side : FrontSide; + this.wrap = this.options.wrap !== void 0 ? this.options.wrap : RepeatWrapping; + } + setCrossOrigin(value) { + this.crossOrigin = value; + return this; + } + setManager(value) { + this.manager = value; + } + setMaterials(materialsInfo) { + this.materialsInfo = this.convert(materialsInfo); + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + } + convert(materialsInfo) { + if (!this.options) return materialsInfo; + const converted = {}; + for (const mn in materialsInfo) { + const mat = materialsInfo[mn]; + const covmat = {}; + converted[mn] = covmat; + for (const prop in mat) { + let save = true; + let value = mat[prop]; + const lprop = prop.toLowerCase(); + switch (lprop) { + case "kd": + case "ka": + case "ks": + if (this.options && this.options.normalizeRGB) { + value = [value[0] / 255, value[1] / 255, value[2] / 255]; + } + if (this.options && this.options.ignoreZeroRGBs) { + if (value[0] === 0 && value[1] === 0 && value[2] === 0) { + save = false; + } + } + break; + default: + break; + } + if (save) { + covmat[lprop] = value; + } + } + } + return converted; + } + preload() { + for (const mn in this.materialsInfo) { + this.create(mn); + } + } + getIndex(materialName) { + return this.nameLookup[materialName]; + } + getAsArray() { + let index = 0; + for (const mn in this.materialsInfo) { + this.materialsArray[index] = this.create(mn); + this.nameLookup[mn] = index; + index++; + } + return this.materialsArray; + } + create(materialName) { + if (this.materials[materialName] === void 0) { + this.createMaterial_(materialName); + } + return this.materials[materialName]; + } + createMaterial_(materialName) { + const scope = this; + const mat = this.materialsInfo[materialName]; + const params = { + name: materialName, + side: this.side + }; + function resolveURL(baseUrl, url) { + if (typeof url !== "string" || url === "") + return ""; + if (/^https?:\/\//i.test(url)) return url; + return baseUrl + url; + } + __name(resolveURL, "resolveURL"); + function setMapForType(mapType, value) { + if (params[mapType]) return; + const texParams = scope.getTextureParams(value, params); + const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url)); + map.repeat.copy(texParams.scale); + map.offset.copy(texParams.offset); + map.wrapS = scope.wrap; + map.wrapT = scope.wrap; + if (mapType === "map" || mapType === "emissiveMap") { + map.colorSpace = SRGBColorSpace; + } + params[mapType] = map; + } + __name(setMapForType, "setMapForType"); + for (const prop in mat) { + const value = mat[prop]; + let n; + if (value === "") continue; + switch (prop.toLowerCase()) { + case "kd": + params.color = ColorManagement.toWorkingColorSpace(new Color().fromArray(value), SRGBColorSpace); + break; + case "ks": + params.specular = ColorManagement.toWorkingColorSpace(new Color().fromArray(value), SRGBColorSpace); + break; + case "ke": + params.emissive = ColorManagement.toWorkingColorSpace(new Color().fromArray(value), SRGBColorSpace); + break; + case "map_kd": + setMapForType("map", value); + break; + case "map_ks": + setMapForType("specularMap", value); + break; + case "map_ke": + setMapForType("emissiveMap", value); + break; + case "norm": + setMapForType("normalMap", value); + break; + case "map_bump": + case "bump": + setMapForType("bumpMap", value); + break; + case "map_d": + setMapForType("alphaMap", value); + params.transparent = true; + break; + case "ns": + params.shininess = parseFloat(value); + break; + case "d": + n = parseFloat(value); + if (n < 1) { + params.opacity = n; + params.transparent = true; + } + break; + case "tr": + n = parseFloat(value); + if (this.options && this.options.invertTrProperty) n = 1 - n; + if (n > 0) { + params.opacity = 1 - n; + params.transparent = true; + } + break; + default: + break; + } + } + this.materials[materialName] = new MeshPhongMaterial(params); + return this.materials[materialName]; + } + getTextureParams(value, matParams) { + const texParams = { + scale: new Vector2(1, 1), + offset: new Vector2(0, 0) + }; + const items = value.split(/\s+/); + let pos; + pos = items.indexOf("-bm"); + if (pos >= 0) { + matParams.bumpScale = parseFloat(items[pos + 1]); + items.splice(pos, 2); + } + pos = items.indexOf("-s"); + if (pos >= 0) { + texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + pos = items.indexOf("-o"); + if (pos >= 0) { + texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + texParams.url = items.join(" ").trim(); + return texParams; + } + loadTexture(url, mapping, onLoad, onProgress, onError) { + const manager = this.manager !== void 0 ? this.manager : DefaultLoadingManager; + let loader = manager.getHandler(url); + if (loader === null) { + loader = new TextureLoader(manager); + } + if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin); + const texture = loader.load(url, onLoad, onProgress, onError); + if (mapping !== void 0) texture.mapping = mapping; + return texture; + } +} +/*! +fflate - fast JavaScript compression/decompression + +Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE +version 0.8.2 +*/ +var ch2 = {}; +var wk = /* @__PURE__ */ __name(function(c, id2, msg, transfer, cb) { + var w = new Worker(ch2[id2] || (ch2[id2] = URL.createObjectURL(new Blob([ + c + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})' + ], { type: "text/javascript" })))); + w.onmessage = function(e) { + var d = e.data, ed = d.$e$; + if (ed) { + var err2 = new Error(ed[0]); + err2["code"] = ed[1]; + err2.stack = ed[2]; + cb(err2, null); + } else + cb(null, d); + }; + w.postMessage(msg, transfer); + return w; +}, "wk"); +var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array; +var fleb = new u8([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + /* unused */ + 0, + 0, + /* impossible */ + 0 +]); +var fdeb = new u8([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + /* unused */ + 0, + 0 +]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = /* @__PURE__ */ __name(function(eb, start) { + var b = new u16(31); + for (var i = 0; i < 31; ++i) { + b[i] = start += 1 << eb[i - 1]; + } + var r = new i32(b[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b[i]; j < b[i + 1]; ++j) { + r[j] = j - b[i] << 5 | i; + } + } + return { b, r }; +}, "freb"); +var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r; +var rev = new u16(32768); +for (var i = 0; i < 32768; ++i) { + var x = (i & 43690) >> 1 | (i & 21845) << 1; + x = (x & 52428) >> 2 | (x & 13107) << 2; + x = (x & 61680) >> 4 | (x & 3855) << 4; + rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1; +} +var hMap = /* @__PURE__ */ __name(function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l = new u16(mb); + for (; i < s; ++i) { + if (cd[i]) + ++l[cd[i] - 1]; + } + var le = new u16(mb); + for (i = 1; i < mb; ++i) { + le[i] = le[i - 1] + l[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; + } + } + } + return co; +}, "hMap"); +var flt = new u8(288); +for (var i = 0; i < 144; ++i) + flt[i] = 8; +for (var i = 144; i < 256; ++i) + flt[i] = 9; +for (var i = 256; i < 280; ++i) + flt[i] = 7; +for (var i = 280; i < 288; ++i) + flt[i] = 8; +var fdt = new u8(32); +for (var i = 0; i < 32; ++i) + fdt[i] = 5; +var flm = /* @__PURE__ */ hMap(flt, 9, 0), flrm = /* @__PURE__ */ hMap(flt, 9, 1); +var fdm = /* @__PURE__ */ hMap(fdt, 5, 0), fdrm = /* @__PURE__ */ hMap(fdt, 5, 1); +var max = /* @__PURE__ */ __name(function(a) { + var m = a[0]; + for (var i = 1; i < a.length; ++i) { + if (a[i] > m) + m = a[i]; + } + return m; +}, "max"); +var bits = /* @__PURE__ */ __name(function(d, p, m) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p & 7) & m; +}, "bits"); +var bits16 = /* @__PURE__ */ __name(function(d, p) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); +}, "bits16"); +var shft = /* @__PURE__ */ __name(function(p) { + return (p + 7) / 8 | 0; +}, "shft"); +var slc = /* @__PURE__ */ __name(function(v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + return new u8(v.subarray(s, e)); +}, "slc"); +var FlateErrorCode = { + UnexpectedEOF: 0, + InvalidBlockType: 1, + InvalidLengthLiteral: 2, + InvalidDistance: 3, + StreamFinished: 4, + NoStreamHandler: 5, + InvalidHeader: 6, + NoCallback: 7, + InvalidUTF8: 8, + ExtraFieldTooLong: 9, + InvalidDate: 10, + FilenameTooLong: 11, + StreamFinishing: 12, + InvalidZipData: 13, + UnknownCompressionMethod: 14 +}; +var ec = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +]; +; +var err = /* @__PURE__ */ __name(function(ind, msg, nt) { + var e = new Error(msg || ec[ind]); + e.code = ind; + if (Error.captureStackTrace) + Error.captureStackTrace(e, err); + if (!nt) + throw e; + return e; +}, "err"); +var inflt = /* @__PURE__ */ __name(function(dat, st, buf, dict) { + var sl = dat.length, dl = dict ? dict.length : 0; + if (!sl || st.f && !st.l) + return buf || new u8(0); + var noBuf = !buf; + var resize = noBuf || st.i != 2; + var noSt = st.i; + if (noBuf) + buf = new u8(sl * 3); + var cbuf = /* @__PURE__ */ __name(function(l2) { + var bl = buf.length; + if (l2 > bl) { + var nbuf = new u8(Math.max(bl * 2, l2)); + nbuf.set(buf); + buf = nbuf; + } + }, "cbuf"); + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t2 = s + l; + if (t2 > sl) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + l); + buf.set(dat.subarray(s, t2), bt); + st.b = bt += l, st.p = pos = t2 * 8, st.f = final; + continue; + } else if (type == 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl; ) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c = 0, n = 0; + if (s == 16) + n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; + else if (s == 17) + n = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) + n = 11 + bits(dat, pos, 127), pos += 7; + while (n--) + ldt[i++] = c; + } + } + var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); + lbt = max(lt); + dbt = max(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else + err(1); + if (pos > tbts) { + if (noSt) + err(0); + break; + } + } + if (resize) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c = lm[bits16(dat, pos) & lms], sym = c >> 4; + pos += c & 15; + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (!c) + err(2); + if (sym < 256) + buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add = sym - 254; + if (sym > 264) { + var i = sym - 257, b = fleb[i]; + add = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; + if (!d) + err(3); + pos += d & 15; + var dt = fd[dsym]; + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + 131072); + var end = bt + add; + if (bt < dt) { + var shift = dl - dt, dend = Math.min(dt, end); + if (shift + bt < 0) + err(3); + for (; bt < dend; ++bt) + buf[bt] = dict[shift + bt]; + } + for (; bt < end; ++bt) + buf[bt] = buf[bt - dt]; + } + } + st.l = lm, st.p = lpos, st.b = bt, st.f = final; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); +}, "inflt"); +var wbits = /* @__PURE__ */ __name(function(d, p, v) { + v <<= p & 7; + var o = p / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; +}, "wbits"); +var wbits16 = /* @__PURE__ */ __name(function(d, p, v) { + v <<= p & 7; + var o = p / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; + d[o + 2] |= v >> 16; +}, "wbits16"); +var hTree = /* @__PURE__ */ __name(function(d, mb) { + var t2 = []; + for (var i = 0; i < d.length; ++i) { + if (d[i]) + t2.push({ s: i, f: d[i] }); + } + var s = t2.length; + var t22 = t2.slice(); + if (!s) + return { t: et, l: 0 }; + if (s == 1) { + var v = new u8(t2[0].s + 1); + v[t2[0].s] = 1; + return { t: v, l: 1 }; + } + t2.sort(function(a, b) { + return a.f - b.f; + }); + t2.push({ s: -1, f: 25001 }); + var l = t2[0], r = t2[1], i0 = 0, i1 = 1, i2 = 2; + t2[0] = { s: -1, f: l.f + r.f, l, r }; + while (i1 != s - 1) { + l = t2[t2[i0].f < t2[i2].f ? i0++ : i2++]; + r = t2[i0 != i1 && t2[i0].f < t2[i2].f ? i0++ : i2++]; + t2[i1++] = { s: -1, f: l.f + r.f, l, r }; + } + var maxSym = t22[0].s; + for (var i = 1; i < s; ++i) { + if (t22[i].s > maxSym) + maxSym = t22[i].s; + } + var tr = new u16(maxSym + 1); + var mbt = ln(t2[i1 - 1], tr, 0); + if (mbt > mb) { + var i = 0, dt = 0; + var lft = mbt - mb, cst = 1 << lft; + t22.sort(function(a, b) { + return tr[b.s] - tr[a.s] || a.f - b.f; + }); + for (; i < s; ++i) { + var i2_1 = t22[i].s; + if (tr[i2_1] > mb) { + dt += cst - (1 << mbt - tr[i2_1]); + tr[i2_1] = mb; + } else + break; + } + dt >>= lft; + while (dt > 0) { + var i2_2 = t22[i].s; + if (tr[i2_2] < mb) + dt -= 1 << mb - tr[i2_2]++ - 1; + else + ++i; + } + for (; i >= 0 && dt; --i) { + var i2_3 = t22[i].s; + if (tr[i2_3] == mb) { + --tr[i2_3]; + ++dt; + } + } + mbt = mb; + } + return { t: new u8(tr), l: mbt }; +}, "hTree"); +var ln = /* @__PURE__ */ __name(function(n, l, d) { + return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d; +}, "ln"); +var lc = /* @__PURE__ */ __name(function(c) { + var s = c.length; + while (s && !c[--s]) + ; + var cl = new u16(++s); + var cli = 0, cln = c[0], cls = 1; + var w = /* @__PURE__ */ __name(function(v) { + cl[cli++] = v; + }, "w"); + for (var i = 1; i <= s; ++i) { + if (c[i] == cln && i != s) + ++cls; + else { + if (!cln && cls > 2) { + for (; cls > 138; cls -= 138) + w(32754); + if (cls > 2) { + w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); + cls = 0; + } + } else if (cls > 3) { + w(cln), --cls; + for (; cls > 6; cls -= 6) + w(8304); + if (cls > 2) + w(cls - 3 << 5 | 8208), cls = 0; + } + while (cls--) + w(cln); + cls = 1; + cln = c[i]; + } + } + return { c: cl.subarray(0, cli), n: s }; +}, "lc"); +var clen = /* @__PURE__ */ __name(function(cf, cl) { + var l = 0; + for (var i = 0; i < cl.length; ++i) + l += cf[i] * cl[i]; + return l; +}, "clen"); +var wfblk = /* @__PURE__ */ __name(function(out, pos, dat) { + var s = dat.length; + var o = shft(pos + 2); + out[o] = s & 255; + out[o + 1] = s >> 8; + out[o + 2] = out[o] ^ 255; + out[o + 3] = out[o + 1] ^ 255; + for (var i = 0; i < s; ++i) + out[o + i + 4] = dat[i]; + return (o + 4 + s) * 8; +}, "wfblk"); +var wblk = /* @__PURE__ */ __name(function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) { + wbits(out, p++, final); + ++lf[256]; + var _a2 = hTree(lf, 15), dlt = _a2.t, mlb = _a2.l; + var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l; + var _c = lc(dlt), lclt = _c.c, nlc = _c.n; + var _d = lc(ddt), lcdt = _d.c, ndc = _d.n; + var lcfreq = new u16(19); + for (var i = 0; i < lclt.length; ++i) + ++lcfreq[lclt[i] & 31]; + for (var i = 0; i < lcdt.length; ++i) + ++lcfreq[lcdt[i] & 31]; + var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l; + var nlcc = 19; + for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc) + ; + var flen = bl + 5 << 3; + var ftlen = clen(lf, flt) + clen(df, fdt) + eb; + var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]; + if (bs >= 0 && flen <= ftlen && flen <= dtlen) + return wfblk(out, p, dat.subarray(bs, bs + bl)); + var lm, ll, dm, dl; + wbits(out, p, 1 + (dtlen < ftlen)), p += 2; + if (dtlen < ftlen) { + lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; + var llm = hMap(lct, mlcb, 0); + wbits(out, p, nlc - 257); + wbits(out, p + 5, ndc - 1); + wbits(out, p + 10, nlcc - 4); + p += 14; + for (var i = 0; i < nlcc; ++i) + wbits(out, p + 3 * i, lct[clim[i]]); + p += 3 * nlcc; + var lcts = [lclt, lcdt]; + for (var it = 0; it < 2; ++it) { + var clct = lcts[it]; + for (var i = 0; i < clct.length; ++i) { + var len = clct[i] & 31; + wbits(out, p, llm[len]), p += lct[len]; + if (len > 15) + wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12; + } + } + } else { + lm = flm, ll = flt, dm = fdm, dl = fdt; + } + for (var i = 0; i < li; ++i) { + var sym = syms[i]; + if (sym > 255) { + var len = sym >> 18 & 31; + wbits16(out, p, lm[len + 257]), p += ll[len + 257]; + if (len > 7) + wbits(out, p, sym >> 23 & 31), p += fleb[len]; + var dst = sym & 31; + wbits16(out, p, dm[dst]), p += dl[dst]; + if (dst > 3) + wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst]; + } else { + wbits16(out, p, lm[sym]), p += ll[sym]; + } + } + wbits16(out, p, lm[256]); + return p + ll[256]; +}, "wblk"); +var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); +var et = /* @__PURE__ */ new u8(0); +var dflt = /* @__PURE__ */ __name(function(dat, lvl, plvl, pre, post, st) { + var s = st.z || dat.length; + var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post); + var w = o.subarray(pre, o.length - post); + var lst = st.l; + var pos = (st.r || 0) & 7; + if (lvl) { + if (pos) + w[0] = st.r >> 3; + var opt = deo[lvl - 1]; + var n = opt >> 13, c = opt & 8191; + var msk_1 = (1 << plvl) - 1; + var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1); + var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; + var hsh = /* @__PURE__ */ __name(function(i2) { + return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1; + }, "hsh"); + var syms = new i32(25e3); + var lf = new u16(288), df = new u16(32); + var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0; + for (; i + 2 < s; ++i) { + var hv = hsh(i); + var imod = i & 32767, pimod = head[hv]; + prev[imod] = pimod; + head[hv] = imod; + if (wi <= i) { + var rem = s - i; + if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) { + pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); + li = lc_1 = eb = 0, bs = i; + for (var j = 0; j < 286; ++j) + lf[j] = 0; + for (var j = 0; j < 30; ++j) + df[j] = 0; + } + var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767; + if (rem > 2 && hv == hsh(i - dif)) { + var maxn = Math.min(n, rem) - 1; + var maxd = Math.min(32767, i); + var ml = Math.min(258, rem); + while (dif <= maxd && --ch_1 && imod != pimod) { + if (dat[i + l] == dat[i + l - dif]) { + var nl = 0; + for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl) + ; + if (nl > l) { + l = nl, d = dif; + if (nl > maxn) + break; + var mmd = Math.min(dif, nl - 2); + var md = 0; + for (var j = 0; j < mmd; ++j) { + var ti = i - dif + j & 32767; + var pti = prev[ti]; + var cd = ti - pti & 32767; + if (cd > md) + md = cd, pimod = ti; + } + } + } + imod = pimod, pimod = prev[imod]; + dif += imod - pimod & 32767; + } + } + if (d) { + syms[li++] = 268435456 | revfl[l] << 18 | revfd[d]; + var lin = revfl[l] & 31, din = revfd[d] & 31; + eb += fleb[lin] + fdeb[din]; + ++lf[257 + lin]; + ++df[din]; + wi = i + l; + ++lc_1; + } else { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + } + } + for (i = Math.max(i, wi); i < s; ++i) { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); + if (!lst) { + st.r = pos & 7 | w[pos / 8 | 0] << 3; + pos -= 7; + st.h = head, st.p = prev, st.i = i, st.w = wi; + } + } else { + for (var i = st.w || 0; i < s + lst; i += 65535) { + var e = i + 65535; + if (e >= s) { + w[pos / 8 | 0] = lst; + e = s; + } + pos = wfblk(w, pos + 1, dat.subarray(i, e)); + } + st.i = s; + } + return slc(o, 0, pre + shft(pos) + post); +}, "dflt"); +var crct = /* @__PURE__ */ function() { + var t2 = new Int32Array(256); + for (var i = 0; i < 256; ++i) { + var c = i, k = 9; + while (--k) + c = (c & 1 && -306674912) ^ c >>> 1; + t2[i] = c; + } + return t2; +}(); +var crc = /* @__PURE__ */ __name(function() { + var c = -1; + return { + p: /* @__PURE__ */ __name(function(d) { + var cr = c; + for (var i = 0; i < d.length; ++i) + cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8; + c = cr; + }, "p"), + d: /* @__PURE__ */ __name(function() { + return ~c; + }, "d") + }; +}, "crc"); +var adler = /* @__PURE__ */ __name(function() { + var a = 1, b = 0; + return { + p: /* @__PURE__ */ __name(function(d) { + var n = a, m = b; + var l = d.length | 0; + for (var i = 0; i != l; ) { + var e = Math.min(i + 2655, l); + for (; i < e; ++i) + m += n += d[i]; + n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16); + } + a = n, b = m; + }, "p"), + d: /* @__PURE__ */ __name(function() { + a %= 65521, b %= 65521; + return (a & 255) << 24 | (a & 65280) << 8 | (b & 255) << 8 | b >> 8; + }, "d") + }; +}, "adler"); +; +var dopt = /* @__PURE__ */ __name(function(dat, opt, pre, post, st) { + if (!st) { + st = { l: 1 }; + if (opt.dictionary) { + var dict = opt.dictionary.subarray(-32768); + var newDat = new u8(dict.length + dat.length); + newDat.set(dict); + newDat.set(dat, dict.length); + dat = newDat; + st.w = dict.length; + } + } + return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post, st); +}, "dopt"); +var mrg = /* @__PURE__ */ __name(function(a, b) { + var o = {}; + for (var k in a) + o[k] = a[k]; + for (var k in b) + o[k] = b[k]; + return o; +}, "mrg"); +var wcln = /* @__PURE__ */ __name(function(fn, fnStr, td2) { + var dt = fn(); + var st = fn.toString(); + var ks = st.slice(st.indexOf("[") + 1, st.lastIndexOf("]")).replace(/\s+/g, "").split(","); + for (var i = 0; i < dt.length; ++i) { + var v = dt[i], k = ks[i]; + if (typeof v == "function") { + fnStr += ";" + k + "="; + var st_1 = v.toString(); + if (v.prototype) { + if (st_1.indexOf("[native code]") != -1) { + var spInd = st_1.indexOf(" ", 8) + 1; + fnStr += st_1.slice(spInd, st_1.indexOf("(", spInd)); + } else { + fnStr += st_1; + for (var t2 in v.prototype) + fnStr += ";" + k + ".prototype." + t2 + "=" + v.prototype[t2].toString(); + } + } else + fnStr += st_1; + } else + td2[k] = v; + } + return fnStr; +}, "wcln"); +var ch = []; +var cbfs = /* @__PURE__ */ __name(function(v) { + var tl = []; + for (var k in v) { + if (v[k].buffer) { + tl.push((v[k] = new v[k].constructor(v[k])).buffer); + } + } + return tl; +}, "cbfs"); +var wrkr = /* @__PURE__ */ __name(function(fns, init, id2, cb) { + if (!ch[id2]) { + var fnStr = "", td_1 = {}, m = fns.length - 1; + for (var i = 0; i < m; ++i) + fnStr = wcln(fns[i], fnStr, td_1); + ch[id2] = { c: wcln(fns[m], fnStr, td_1), e: td_1 }; + } + var td2 = mrg({}, ch[id2].e); + return wk(ch[id2].c + ";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=" + init.toString() + "}", id2, td2, cbfs(td2), cb); +}, "wrkr"); +var bInflt = /* @__PURE__ */ __name(function() { + return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; +}, "bInflt"); +var bDflt = /* @__PURE__ */ __name(function() { + return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; +}, "bDflt"); +var gze = /* @__PURE__ */ __name(function() { + return [gzh, gzhl, wbytes, crc, crct]; +}, "gze"); +var guze = /* @__PURE__ */ __name(function() { + return [gzs, gzl]; +}, "guze"); +var zle = /* @__PURE__ */ __name(function() { + return [zlh, wbytes, adler]; +}, "zle"); +var zule = /* @__PURE__ */ __name(function() { + return [zls]; +}, "zule"); +var pbf = /* @__PURE__ */ __name(function(msg) { + return postMessage(msg, [msg.buffer]); +}, "pbf"); +var gopt = /* @__PURE__ */ __name(function(o) { + return o && { + out: o.size && new u8(o.size), + dictionary: o.dictionary + }; +}, "gopt"); +var cbify = /* @__PURE__ */ __name(function(dat, opts, fns, init, id2, cb) { + var w = wrkr(fns, init, id2, function(err2, dat2) { + w.terminate(); + cb(err2, dat2); + }); + w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []); + return function() { + w.terminate(); + }; +}, "cbify"); +var astrm = /* @__PURE__ */ __name(function(strm) { + strm.ondata = function(dat, final) { + return postMessage([dat, final], [dat.buffer]); + }; + return function(ev) { + if (ev.data.length) { + strm.push(ev.data[0], ev.data[1]); + postMessage([ev.data[0].length]); + } else + strm.flush(); + }; +}, "astrm"); +var astrmify = /* @__PURE__ */ __name(function(fns, strm, opts, init, id2, flush, ext2) { + var t2; + var w = wrkr(fns, init, id2, function(err2, dat) { + if (err2) + w.terminate(), strm.ondata.call(strm, err2); + else if (!Array.isArray(dat)) + ext2(dat); + else if (dat.length == 1) { + strm.queuedSize -= dat[0]; + if (strm.ondrain) + strm.ondrain(dat[0]); + } else { + if (dat[1]) + w.terminate(); + strm.ondata.call(strm, err2, dat[0], dat[1]); + } + }); + w.postMessage(opts); + strm.queuedSize = 0; + strm.push = function(d, f) { + if (!strm.ondata) + err(5); + if (t2) + strm.ondata(err(4, 0, 1), null, !!f); + strm.queuedSize += d.length; + w.postMessage([d, t2 = f], [d.buffer]); + }; + strm.terminate = function() { + w.terminate(); + }; + if (flush) { + strm.flush = function() { + w.postMessage([]); + }; + } +}, "astrmify"); +var b2 = /* @__PURE__ */ __name(function(d, b) { + return d[b] | d[b + 1] << 8; +}, "b2"); +var b4 = /* @__PURE__ */ __name(function(d, b) { + return (d[b] | d[b + 1] << 8 | d[b + 2] << 16 | d[b + 3] << 24) >>> 0; +}, "b4"); +var b8 = /* @__PURE__ */ __name(function(d, b) { + return b4(d, b) + b4(d, b + 4) * 4294967296; +}, "b8"); +var wbytes = /* @__PURE__ */ __name(function(d, b, v) { + for (; v; ++b) + d[b] = v, v >>>= 8; +}, "wbytes"); +var gzh = /* @__PURE__ */ __name(function(c, o) { + var fn = o.filename; + c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; + if (o.mtime != 0) + wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3)); + if (fn) { + c[3] = 8; + for (var i = 0; i <= fn.length; ++i) + c[i + 10] = fn.charCodeAt(i); + } +}, "gzh"); +var gzs = /* @__PURE__ */ __name(function(d) { + if (d[0] != 31 || d[1] != 139 || d[2] != 8) + err(6, "invalid gzip data"); + var flg = d[3]; + var st = 10; + if (flg & 4) + st += (d[10] | d[11] << 8) + 2; + for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) + ; + return st + (flg & 2); +}, "gzs"); +var gzl = /* @__PURE__ */ __name(function(d) { + var l = d.length; + return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0; +}, "gzl"); +var gzhl = /* @__PURE__ */ __name(function(o) { + return 10 + (o.filename ? o.filename.length + 1 : 0); +}, "gzhl"); +var zlh = /* @__PURE__ */ __name(function(c, o) { + var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2; + c[0] = 120, c[1] = fl2 << 6 | (o.dictionary && 32); + c[1] |= 31 - (c[0] << 8 | c[1]) % 31; + if (o.dictionary) { + var h = adler(); + h.p(o.dictionary); + wbytes(c, 2, h.d()); + } +}, "zlh"); +var zls = /* @__PURE__ */ __name(function(d, dict) { + if ((d[0] & 15) != 8 || d[0] >> 4 > 7 || (d[0] << 8 | d[1]) % 31) + err(6, "invalid zlib data"); + if ((d[1] >> 5 & 1) == +!dict) + err(6, "invalid zlib data: " + (d[1] & 32 ? "need" : "unexpected") + " dictionary"); + return (d[1] >> 3 & 4) + 2; +}, "zls"); +function StrmOpt(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + return opts; +} +__name(StrmOpt, "StrmOpt"); +var Deflate = /* @__PURE__ */ function() { + function Deflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + this.o = opts || {}; + this.s = { l: 0, i: 32768, w: 32768, z: 32768 }; + this.b = new u8(98304); + if (this.o.dictionary) { + var dict = this.o.dictionary.subarray(-32768); + this.b.set(dict, 32768 - dict.length); + this.s.i = 32768 - dict.length; + } + } + __name(Deflate2, "Deflate"); + Deflate2.prototype.p = function(c, f) { + this.ondata(dopt(c, this.o, 0, 0, this.s), f); + }; + Deflate2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + var endLen = chunk.length + this.s.z; + if (endLen > this.b.length) { + if (endLen > 2 * this.b.length - 32768) { + var newBuf = new u8(endLen & -32768); + newBuf.set(this.b.subarray(0, this.s.z)); + this.b = newBuf; + } + var split = this.b.length - this.s.z; + this.b.set(chunk.subarray(0, split), this.s.z); + this.s.z = this.b.length; + this.p(this.b, false); + this.b.set(this.b.subarray(-32768)); + this.b.set(chunk.subarray(split), 32768); + this.s.z = chunk.length - split + 32768; + this.s.i = 32766, this.s.w = 32768; + } else { + this.b.set(chunk, this.s.z); + this.s.z += chunk.length; + } + this.s.l = final & 1; + if (this.s.z > this.s.w + 8191 || final) { + this.p(this.b, final || false); + this.s.w = this.s.i, this.s.i -= 2; + } + }; + Deflate2.prototype.flush = function() { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + this.p(this.b, false); + this.s.w = this.s.i, this.s.i -= 2; + }; + return Deflate2; +}(); +var AsyncDeflate = /* @__PURE__ */ function() { + function AsyncDeflate2(opts, cb) { + astrmify([ + bDflt, + function() { + return [astrm, Deflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Deflate(ev.data); + onmessage = astrm(strm); + }, 6, 1); + } + __name(AsyncDeflate2, "AsyncDeflate"); + return AsyncDeflate2; +}(); +function deflate(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bDflt + ], function(ev) { + return pbf(deflateSync(ev.data[0], ev.data[1])); + }, 0, cb); +} +__name(deflate, "deflate"); +function deflateSync(data, opts) { + return dopt(data, opts || {}, 0, 0); +} +__name(deflateSync, "deflateSync"); +var Inflate = /* @__PURE__ */ function() { + function Inflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768); + this.s = { i: 0, b: dict ? dict.length : 0 }; + this.o = new u8(32768); + this.p = new u8(0); + if (dict) + this.o.set(dict); + } + __name(Inflate2, "Inflate"); + Inflate2.prototype.e = function(c) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + if (!this.p.length) + this.p = c; + else if (c.length) { + var n = new u8(this.p.length + c.length); + n.set(this.p), n.set(c, this.p.length), this.p = n; + } + }; + Inflate2.prototype.c = function(final) { + this.s.i = +(this.d = final || false); + var bts = this.s.b; + var dt = inflt(this.p, this.s, this.o); + this.ondata(slc(dt, bts, this.s.b), this.d); + this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length; + this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }; + Inflate2.prototype.push = function(chunk, final) { + this.e(chunk), this.c(final); + }; + return Inflate2; +}(); +var AsyncInflate = /* @__PURE__ */ function() { + function AsyncInflate2(opts, cb) { + astrmify([ + bInflt, + function() { + return [astrm, Inflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Inflate(ev.data); + onmessage = astrm(strm); + }, 7, 0); + } + __name(AsyncInflate2, "AsyncInflate"); + return AsyncInflate2; +}(); +function inflate(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bInflt + ], function(ev) { + return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); + }, 1, cb); +} +__name(inflate, "inflate"); +function inflateSync(data, opts) { + return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +__name(inflateSync, "inflateSync"); +var Gzip = /* @__PURE__ */ function() { + function Gzip2(opts, cb) { + this.c = crc(); + this.l = 0; + this.v = 1; + Deflate.call(this, opts, cb); + } + __name(Gzip2, "Gzip"); + Gzip2.prototype.push = function(chunk, final) { + this.c.p(chunk); + this.l += chunk.length; + Deflate.prototype.push.call(this, chunk, final); + }; + Gzip2.prototype.p = function(c, f) { + var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s); + if (this.v) + gzh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l); + this.ondata(raw, f); + }; + Gzip2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Gzip2; +}(); +var AsyncGzip = /* @__PURE__ */ function() { + function AsyncGzip2(opts, cb) { + astrmify([ + bDflt, + gze, + function() { + return [astrm, Deflate, Gzip]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Gzip(ev.data); + onmessage = astrm(strm); + }, 8, 1); + } + __name(AsyncGzip2, "AsyncGzip"); + return AsyncGzip2; +}(); +function gzip(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bDflt, + gze, + function() { + return [gzipSync]; + } + ], function(ev) { + return pbf(gzipSync(ev.data[0], ev.data[1])); + }, 2, cb); +} +__name(gzip, "gzip"); +function gzipSync(data, opts) { + if (!opts) + opts = {}; + var c = crc(), l = data.length; + c.p(data); + var d = dopt(data, opts, gzhl(opts), 8), s = d.length; + return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d; +} +__name(gzipSync, "gzipSync"); +var Gunzip = /* @__PURE__ */ function() { + function Gunzip2(opts, cb) { + this.v = 1; + this.r = 0; + Inflate.call(this, opts, cb); + } + __name(Gunzip2, "Gunzip"); + Gunzip2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + this.r += chunk.length; + if (this.v) { + var p = this.p.subarray(this.v - 1); + var s = p.length > 3 ? gzs(p) : 4; + if (s > p.length) { + if (!final) + return; + } else if (this.v > 1 && this.onmember) { + this.onmember(this.r - p.length); + } + this.p = p.subarray(s), this.v = 0; + } + Inflate.prototype.c.call(this, final); + if (this.s.f && !this.s.l && !final) { + this.v = shft(this.s.p) + 9; + this.s = { i: 0 }; + this.o = new u8(0); + this.push(new u8(0), final); + } + }; + return Gunzip2; +}(); +var AsyncGunzip = /* @__PURE__ */ function() { + function AsyncGunzip2(opts, cb) { + var _this = this; + astrmify([ + bInflt, + guze, + function() { + return [astrm, Inflate, Gunzip]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Gunzip(ev.data); + strm.onmember = function(offset) { + return postMessage(offset); + }; + onmessage = astrm(strm); + }, 9, 0, function(offset) { + return _this.onmember && _this.onmember(offset); + }); + } + __name(AsyncGunzip2, "AsyncGunzip"); + return AsyncGunzip2; +}(); +function gunzip(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bInflt, + guze, + function() { + return [gunzipSync]; + } + ], function(ev) { + return pbf(gunzipSync(ev.data[0], ev.data[1])); + }, 3, cb); +} +__name(gunzip, "gunzip"); +function gunzipSync(data, opts) { + var st = gzs(data); + if (st + 8 > data.length) + err(6, "invalid gzip data"); + return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary); +} +__name(gunzipSync, "gunzipSync"); +var Zlib = /* @__PURE__ */ function() { + function Zlib2(opts, cb) { + this.c = adler(); + this.v = 1; + Deflate.call(this, opts, cb); + } + __name(Zlib2, "Zlib"); + Zlib2.prototype.push = function(chunk, final) { + this.c.p(chunk); + Deflate.prototype.push.call(this, chunk, final); + }; + Zlib2.prototype.p = function(c, f) { + var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s); + if (this.v) + zlh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 4, this.c.d()); + this.ondata(raw, f); + }; + Zlib2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Zlib2; +}(); +var AsyncZlib = /* @__PURE__ */ function() { + function AsyncZlib2(opts, cb) { + astrmify([ + bDflt, + zle, + function() { + return [astrm, Deflate, Zlib]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Zlib(ev.data); + onmessage = astrm(strm); + }, 10, 1); + } + __name(AsyncZlib2, "AsyncZlib"); + return AsyncZlib2; +}(); +function zlib(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bDflt, + zle, + function() { + return [zlibSync]; + } + ], function(ev) { + return pbf(zlibSync(ev.data[0], ev.data[1])); + }, 4, cb); +} +__name(zlib, "zlib"); +function zlibSync(data, opts) { + if (!opts) + opts = {}; + var a = adler(); + a.p(data); + var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4); + return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d; +} +__name(zlibSync, "zlibSync"); +var Unzlib = /* @__PURE__ */ function() { + function Unzlib2(opts, cb) { + Inflate.call(this, opts, cb); + this.v = opts && opts.dictionary ? 2 : 1; + } + __name(Unzlib2, "Unzlib"); + Unzlib2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + if (this.v) { + if (this.p.length < 6 && !final) + return; + this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0; + } + if (final) { + if (this.p.length < 4) + err(6, "invalid zlib data"); + this.p = this.p.subarray(0, -4); + } + Inflate.prototype.c.call(this, final); + }; + return Unzlib2; +}(); +var AsyncUnzlib = /* @__PURE__ */ function() { + function AsyncUnzlib2(opts, cb) { + astrmify([ + bInflt, + zule, + function() { + return [astrm, Inflate, Unzlib]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Unzlib(ev.data); + onmessage = astrm(strm); + }, 11, 0); + } + __name(AsyncUnzlib2, "AsyncUnzlib"); + return AsyncUnzlib2; +}(); +function unzlib(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return cbify(data, opts, [ + bInflt, + zule, + function() { + return [unzlibSync]; + } + ], function(ev) { + return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); + }, 5, cb); +} +__name(unzlib, "unzlib"); +function unzlibSync(data, opts) { + return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +__name(unzlibSync, "unzlibSync"); +var Decompress = /* @__PURE__ */ function() { + function Decompress2(opts, cb) { + this.o = StrmOpt.call(this, opts, cb) || {}; + this.G = Gunzip; + this.I = Inflate; + this.Z = Unzlib; + } + __name(Decompress2, "Decompress"); + Decompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(dat, final) { + _this.ondata(dat, final); + }; + }; + Decompress2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (!this.s) { + if (this.p && this.p.length) { + var n = new u8(this.p.length + chunk.length); + n.set(this.p), n.set(chunk, this.p.length); + } else + this.p = chunk; + if (this.p.length > 2) { + this.s = this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8 ? new this.G(this.o) : (this.p[0] & 15) != 8 || this.p[0] >> 4 > 7 || (this.p[0] << 8 | this.p[1]) % 31 ? new this.I(this.o) : new this.Z(this.o); + this.i(); + this.s.push(this.p, final); + this.p = null; + } + } else + this.s.push(chunk, final); + }; + return Decompress2; +}(); +var AsyncDecompress = /* @__PURE__ */ function() { + function AsyncDecompress2(opts, cb) { + Decompress.call(this, opts, cb); + this.queuedSize = 0; + this.G = AsyncGunzip; + this.I = AsyncInflate; + this.Z = AsyncUnzlib; + } + __name(AsyncDecompress2, "AsyncDecompress"); + AsyncDecompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(err2, dat, final) { + _this.ondata(err2, dat, final); + }; + this.s.ondrain = function(size) { + _this.queuedSize -= size; + if (_this.ondrain) + _this.ondrain(size); + }; + }; + AsyncDecompress2.prototype.push = function(chunk, final) { + this.queuedSize += chunk.length; + Decompress.prototype.push.call(this, chunk, final); + }; + return AsyncDecompress2; +}(); +function decompress(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + return data[0] == 31 && data[1] == 139 && data[2] == 8 ? gunzip(data, opts, cb) : (data[0] & 15) != 8 || data[0] >> 4 > 7 || (data[0] << 8 | data[1]) % 31 ? inflate(data, opts, cb) : unzlib(data, opts, cb); +} +__name(decompress, "decompress"); +function decompressSync(data, opts) { + return data[0] == 31 && data[1] == 139 && data[2] == 8 ? gunzipSync(data, opts) : (data[0] & 15) != 8 || data[0] >> 4 > 7 || (data[0] << 8 | data[1]) % 31 ? inflateSync(data, opts) : unzlibSync(data, opts); +} +__name(decompressSync, "decompressSync"); +var fltn = /* @__PURE__ */ __name(function(d, p, t2, o) { + for (var k in d) { + var val = d[k], n = p + k, op = o; + if (Array.isArray(val)) + op = mrg(o, val[1]), val = val[0]; + if (val instanceof u8) + t2[n] = [val, op]; + else { + t2[n += "/"] = [new u8(0), op]; + fltn(val, n, t2, o); + } + } +}, "fltn"); +var te = typeof TextEncoder != "undefined" && /* @__PURE__ */ new TextEncoder(); +var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder(); +var tds = 0; +try { + td.decode(et, { stream: true }); + tds = 1; +} catch (e) { +} +var dutf8 = /* @__PURE__ */ __name(function(d) { + for (var r = "", i = 0; ; ) { + var c = d[i++]; + var eb = (c > 127) + (c > 223) + (c > 239); + if (i + eb > d.length) + return { s: r, r: slc(d, i - 1) }; + if (!eb) + r += String.fromCharCode(c); + else if (eb == 3) { + c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | d[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023); + } else if (eb & 1) + r += String.fromCharCode((c & 31) << 6 | d[i++] & 63); + else + r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63); + } +}, "dutf8"); +var DecodeUTF8 = /* @__PURE__ */ function() { + function DecodeUTF82(cb) { + this.ondata = cb; + if (tds) + this.t = new TextDecoder(); + else + this.p = et; + } + __name(DecodeUTF82, "DecodeUTF8"); + DecodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + final = !!final; + if (this.t) { + this.ondata(this.t.decode(chunk, { stream: true }), final); + if (final) { + if (this.t.decode().length) + err(8); + this.t = null; + } + return; + } + if (!this.p) + err(4); + var dat = new u8(this.p.length + chunk.length); + dat.set(this.p); + dat.set(chunk, this.p.length); + var _a2 = dutf8(dat), s = _a2.s, r = _a2.r; + if (final) { + if (r.length) + err(8); + this.p = null; + } else + this.p = r; + this.ondata(s, final); + }; + return DecodeUTF82; +}(); +var EncodeUTF8 = /* @__PURE__ */ function() { + function EncodeUTF82(cb) { + this.ondata = cb; + } + __name(EncodeUTF82, "EncodeUTF8"); + EncodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + this.ondata(strToU8(chunk), this.d = final || false); + }; + return EncodeUTF82; +}(); +function strToU8(str, latin1) { + if (latin1) { + var ar_1 = new u8(str.length); + for (var i = 0; i < str.length; ++i) + ar_1[i] = str.charCodeAt(i); + return ar_1; + } + if (te) + return te.encode(str); + var l = str.length; + var ar = new u8(str.length + (str.length >> 1)); + var ai = 0; + var w = /* @__PURE__ */ __name(function(v) { + ar[ai++] = v; + }, "w"); + for (var i = 0; i < l; ++i) { + if (ai + 5 > ar.length) { + var n = new u8(ai + 8 + (l - i << 1)); + n.set(ar); + ar = n; + } + var c = str.charCodeAt(i); + if (c < 128 || latin1) + w(c); + else if (c < 2048) + w(192 | c >> 6), w(128 | c & 63); + else if (c > 55295 && c < 57344) + c = 65536 + (c & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c >> 18), w(128 | c >> 12 & 63), w(128 | c >> 6 & 63), w(128 | c & 63); + else + w(224 | c >> 12), w(128 | c >> 6 & 63), w(128 | c & 63); + } + return slc(ar, 0, ai); +} +__name(strToU8, "strToU8"); +function strFromU8(dat, latin1) { + if (latin1) { + var r = ""; + for (var i = 0; i < dat.length; i += 16384) + r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384)); + return r; + } else if (td) { + return td.decode(dat); + } else { + var _a2 = dutf8(dat), s = _a2.s, r = _a2.r; + if (r.length) + err(8); + return s; + } +} +__name(strFromU8, "strFromU8"); +; +var dbf = /* @__PURE__ */ __name(function(l) { + return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; +}, "dbf"); +var slzh = /* @__PURE__ */ __name(function(d, b) { + return b + 30 + b2(d, b + 26) + b2(d, b + 28); +}, "slzh"); +var zh = /* @__PURE__ */ __name(function(d, b, z) { + var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20); + var _a2 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a2[0], su = _a2[1], off = _a2[2]; + return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off]; +}, "zh"); +var z64e = /* @__PURE__ */ __name(function(d, b) { + for (; b2(d, b) != 1; b += 4 + b2(d, b + 2)) + ; + return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)]; +}, "z64e"); +var exfl = /* @__PURE__ */ __name(function(ex) { + var le = 0; + if (ex) { + for (var k in ex) { + var l = ex[k].length; + if (l > 65535) + err(9); + le += l + 4; + } + } + return le; +}, "exfl"); +var wzh = /* @__PURE__ */ __name(function(d, b, f, fn, u, c, ce, co) { + var fl2 = fn.length, ex = f.extra, col = co && co.length; + var exl = exfl(ex); + wbytes(d, b, ce != null ? 33639248 : 67324752), b += 4; + if (ce != null) + d[b++] = 20, d[b++] = f.os; + d[b] = 20, b += 2; + d[b++] = f.flag << 1 | (c < 0 && 8), d[b++] = u && 8; + d[b++] = f.compression & 255, d[b++] = f.compression >> 8; + var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980; + if (y < 0 || y > 119) + err(10); + wbytes(d, b, y << 25 | dt.getMonth() + 1 << 21 | dt.getDate() << 16 | dt.getHours() << 11 | dt.getMinutes() << 5 | dt.getSeconds() >> 1), b += 4; + if (c != -1) { + wbytes(d, b, f.crc); + wbytes(d, b + 4, c < 0 ? -c - 2 : c); + wbytes(d, b + 8, f.size); + } + wbytes(d, b + 12, fl2); + wbytes(d, b + 14, exl), b += 16; + if (ce != null) { + wbytes(d, b, col); + wbytes(d, b + 6, f.attrs); + wbytes(d, b + 10, ce), b += 14; + } + d.set(fn, b); + b += fl2; + if (exl) { + for (var k in ex) { + var exf = ex[k], l = exf.length; + wbytes(d, b, +k); + wbytes(d, b + 2, l); + d.set(exf, b + 4), b += 4 + l; + } + } + if (col) + d.set(co, b), b += col; + return b; +}, "wzh"); +var wzf = /* @__PURE__ */ __name(function(o, b, c, d, e) { + wbytes(o, b, 101010256); + wbytes(o, b + 8, c); + wbytes(o, b + 10, c); + wbytes(o, b + 12, d); + wbytes(o, b + 16, e); +}, "wzf"); +var ZipPassThrough = /* @__PURE__ */ function() { + function ZipPassThrough2(filename) { + this.filename = filename; + this.c = crc(); + this.size = 0; + this.compression = 0; + } + __name(ZipPassThrough2, "ZipPassThrough"); + ZipPassThrough2.prototype.process = function(chunk, final) { + this.ondata(null, chunk, final); + }; + ZipPassThrough2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + this.c.p(chunk); + this.size += chunk.length; + if (final) + this.crc = this.c.d(); + this.process(chunk, final || false); + }; + return ZipPassThrough2; +}(); +var ZipDeflate = /* @__PURE__ */ function() { + function ZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new Deflate(opts, function(dat, final) { + _this.ondata(null, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + } + __name(ZipDeflate2, "ZipDeflate"); + ZipDeflate2.prototype.process = function(chunk, final) { + try { + this.d.push(chunk, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + ZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return ZipDeflate2; +}(); +var AsyncZipDeflate = /* @__PURE__ */ function() { + function AsyncZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new AsyncDeflate(opts, function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + this.terminate = this.d.terminate; + } + __name(AsyncZipDeflate2, "AsyncZipDeflate"); + AsyncZipDeflate2.prototype.process = function(chunk, final) { + this.d.push(chunk, final); + }; + AsyncZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return AsyncZipDeflate2; +}(); +var Zip = /* @__PURE__ */ function() { + function Zip2(cb) { + this.ondata = cb; + this.u = []; + this.d = 1; + } + __name(Zip2, "Zip"); + Zip2.prototype.add = function(file2) { + var _this = this; + if (!this.ondata) + err(5); + if (this.d & 2) + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false); + else { + var f = strToU8(file2.filename), fl_1 = f.length; + var com = file2.comment, o = com && strToU8(com); + var u = fl_1 != file2.filename.length || o && com.length != o.length; + var hl_1 = fl_1 + exfl(file2.extra) + 30; + if (fl_1 > 65535) + this.ondata(err(11, 0, 1), null, false); + var header = new u8(hl_1); + wzh(header, 0, file2, f, u, -1); + var chks_1 = [header]; + var pAll_1 = /* @__PURE__ */ __name(function() { + for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) { + var chk = chks_2[_i]; + _this.ondata(null, chk, false); + } + chks_1 = []; + }, "pAll_1"); + var tr_1 = this.d; + this.d = 0; + var ind_1 = this.u.length; + var uf_1 = mrg(file2, { + f, + u, + o, + t: /* @__PURE__ */ __name(function() { + if (file2.terminate) + file2.terminate(); + }, "t"), + r: /* @__PURE__ */ __name(function() { + pAll_1(); + if (tr_1) { + var nxt = _this.u[ind_1 + 1]; + if (nxt) + nxt.r(); + else + _this.d = 1; + } + tr_1 = 1; + }, "r") + }); + var cl_1 = 0; + file2.ondata = function(err2, dat, final) { + if (err2) { + _this.ondata(err2, dat, final); + _this.terminate(); + } else { + cl_1 += dat.length; + chks_1.push(dat); + if (final) { + var dd = new u8(16); + wbytes(dd, 0, 134695760); + wbytes(dd, 4, file2.crc); + wbytes(dd, 8, cl_1); + wbytes(dd, 12, file2.size); + chks_1.push(dd); + uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file2.crc, uf_1.size = file2.size; + if (tr_1) + uf_1.r(); + tr_1 = 1; + } else if (tr_1) + pAll_1(); + } + }; + this.u.push(uf_1); + } + }; + Zip2.prototype.end = function() { + var _this = this; + if (this.d & 2) { + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true); + return; + } + if (this.d) + this.e(); + else + this.u.push({ + r: /* @__PURE__ */ __name(function() { + if (!(_this.d & 1)) + return; + _this.u.splice(-1, 1); + _this.e(); + }, "r"), + t: /* @__PURE__ */ __name(function() { + }, "t") + }); + this.d = 3; + }; + Zip2.prototype.e = function() { + var bt = 0, l = 0, tl = 0; + for (var _i = 0, _a2 = this.u; _i < _a2.length; _i++) { + var f = _a2[_i]; + tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0); + } + var out = new u8(tl + 22); + for (var _b2 = 0, _c = this.u; _b2 < _c.length; _b2++) { + var f = _c[_b2]; + wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o); + bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b; + } + wzf(out, bt, this.u.length, tl, l); + this.ondata(null, out, true); + this.d = 2; + }; + Zip2.prototype.terminate = function() { + for (var _i = 0, _a2 = this.u; _i < _a2.length; _i++) { + var f = _a2[_i]; + f.t(); + } + this.d = 2; + }; + return Zip2; +}(); +function zip(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + var r = {}; + fltn(data, "", r, opts); + var k = Object.keys(r); + var lft = k.length, o = 0, tot = 0; + var slft = lft, files = new Array(lft); + var term = []; + var tAll = /* @__PURE__ */ __name(function() { + for (var i2 = 0; i2 < term.length; ++i2) + term[i2](); + }, "tAll"); + var cbd = /* @__PURE__ */ __name(function(a, b) { + mt(function() { + cb(a, b); + }); + }, "cbd"); + mt(function() { + cbd = cb; + }); + var cbf = /* @__PURE__ */ __name(function() { + var out = new u8(tot + 22), oe = o, cdl = tot - o; + tot = 0; + for (var i2 = 0; i2 < slft; ++i2) { + var f = files[i2]; + try { + var l = f.c.length; + wzh(out, tot, f, f.f, f.u, l); + var badd = 30 + f.f.length + exfl(f.extra); + var loc = tot + badd; + out.set(f.c, loc); + wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l; + } catch (e) { + return cbd(e, null); + } + } + wzf(out, o, files.length, cdl, oe); + cbd(null, out); + }, "cbf"); + if (!lft) + cbf(); + var _loop_1 = /* @__PURE__ */ __name(function(i2) { + var fn = k[i2]; + var _a2 = r[fn], file2 = _a2[0], p = _a2[1]; + var c = crc(), size = file2.length; + c.p(file2); + var f = strToU8(fn), s = f.length; + var com = p.comment, m = com && strToU8(com), ms = m && m.length; + var exl = exfl(p.extra); + var compression = p.level == 0 ? 0 : 8; + var cbl = /* @__PURE__ */ __name(function(e, d) { + if (e) { + tAll(); + cbd(e, null); + } else { + var l = d.length; + files[i2] = mrg(p, { + size, + crc: c.d(), + c: d, + f, + m, + u: s != fn.length || m && com.length != ms, + compression + }); + o += 30 + s + exl + l; + tot += 76 + 2 * (s + exl) + (ms || 0) + l; + if (!--lft) + cbf(); + } + }, "cbl"); + if (s > 65535) + cbl(err(11, 0, 1), null); + if (!compression) + cbl(null, file2); + else if (size < 16e4) { + try { + cbl(null, deflateSync(file2, p)); + } catch (e) { + cbl(e, null); + } + } else + term.push(deflate(file2, p, cbl)); + }, "_loop_1"); + for (var i = 0; i < slft; ++i) { + _loop_1(i); + } + return tAll; +} +__name(zip, "zip"); +function zipSync(data, opts) { + if (!opts) + opts = {}; + var r = {}; + var files = []; + fltn(data, "", r, opts); + var o = 0; + var tot = 0; + for (var fn in r) { + var _a2 = r[fn], file2 = _a2[0], p = _a2[1]; + var compression = p.level == 0 ? 0 : 8; + var f = strToU8(fn), s = f.length; + var com = p.comment, m = com && strToU8(com), ms = m && m.length; + var exl = exfl(p.extra); + if (s > 65535) + err(11); + var d = compression ? deflateSync(file2, p) : file2, l = d.length; + var c = crc(); + c.p(file2); + files.push(mrg(p, { + size: file2.length, + crc: c.d(), + c: d, + f, + m, + u: s != fn.length || m && com.length != ms, + o, + compression + })); + o += 30 + s + exl + l; + tot += 76 + 2 * (s + exl) + (ms || 0) + l; + } + var out = new u8(tot + 22), oe = o, cdl = tot - o; + for (var i = 0; i < files.length; ++i) { + var f = files[i]; + wzh(out, f.o, f, f.f, f.u, f.c.length); + var badd = 30 + f.f.length + exfl(f.extra); + out.set(f.c, f.o + badd); + wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0); + } + wzf(out, o, files.length, cdl, oe); + return out; +} +__name(zipSync, "zipSync"); +var UnzipPassThrough = /* @__PURE__ */ function() { + function UnzipPassThrough2() { + } + __name(UnzipPassThrough2, "UnzipPassThrough"); + UnzipPassThrough2.prototype.push = function(data, final) { + this.ondata(null, data, final); + }; + UnzipPassThrough2.compression = 0; + return UnzipPassThrough2; +}(); +var UnzipInflate = /* @__PURE__ */ function() { + function UnzipInflate2() { + var _this = this; + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } + __name(UnzipInflate2, "UnzipInflate"); + UnzipInflate2.prototype.push = function(data, final) { + try { + this.i.push(data, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + UnzipInflate2.compression = 8; + return UnzipInflate2; +}(); +var AsyncUnzipInflate = /* @__PURE__ */ function() { + function AsyncUnzipInflate2(_, sz) { + var _this = this; + if (sz < 32e4) { + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } else { + this.i = new AsyncInflate(function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.terminate = this.i.terminate; + } + } + __name(AsyncUnzipInflate2, "AsyncUnzipInflate"); + AsyncUnzipInflate2.prototype.push = function(data, final) { + if (this.i.terminate) + data = slc(data, 0); + this.i.push(data, final); + }; + AsyncUnzipInflate2.compression = 8; + return AsyncUnzipInflate2; +}(); +var Unzip = /* @__PURE__ */ function() { + function Unzip2(cb) { + this.onfile = cb; + this.k = []; + this.o = { + 0: UnzipPassThrough + }; + this.p = et; + } + __name(Unzip2, "Unzip"); + Unzip2.prototype.push = function(chunk, final) { + var _this = this; + if (!this.onfile) + err(5); + if (!this.p) + err(4); + if (this.c > 0) { + var len = Math.min(this.c, chunk.length); + var toAdd = chunk.subarray(0, len); + this.c -= len; + if (this.d) + this.d.push(toAdd, !this.c); + else + this.k[0].push(toAdd); + chunk = chunk.subarray(len); + if (chunk.length) + return this.push(chunk, final); + } else { + var f = 0, i = 0, is = void 0, buf = void 0; + if (!this.p.length) + buf = chunk; + else if (!chunk.length) + buf = this.p; + else { + buf = new u8(this.p.length + chunk.length); + buf.set(this.p), buf.set(chunk, this.p.length); + } + var l = buf.length, oc = this.c, add = oc && this.d; + var _loop_2 = /* @__PURE__ */ __name(function() { + var _a2; + var sig = b4(buf, i); + if (sig == 67324752) { + f = 1, is = i; + this_1.d = null; + this_1.c = 0; + var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28); + if (l > i + 30 + fnl + es) { + var chks_3 = []; + this_1.k.unshift(chks_3); + f = 2; + var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22); + var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u); + if (sc_1 == 4294967295) { + _a2 = dd ? [-2] : z64e(buf, i), sc_1 = _a2[0], su_1 = _a2[1]; + } else if (dd) + sc_1 = -1; + i += es; + this_1.c = sc_1; + var d_1; + var file_1 = { + name: fn_1, + compression: cmp_1, + start: /* @__PURE__ */ __name(function() { + if (!file_1.ondata) + err(5); + if (!sc_1) + file_1.ondata(null, et, true); + else { + var ctr = _this.o[cmp_1]; + if (!ctr) + file_1.ondata(err(14, "unknown compression type " + cmp_1, 1), null, false); + d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1); + d_1.ondata = function(err2, dat3, final2) { + file_1.ondata(err2, dat3, final2); + }; + for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) { + var dat2 = chks_4[_i]; + d_1.push(dat2, false); + } + if (_this.k[0] == chks_3 && _this.c) + _this.d = d_1; + else + d_1.push(et, true); + } + }, "start"), + terminate: /* @__PURE__ */ __name(function() { + if (d_1 && d_1.terminate) + d_1.terminate(); + }, "terminate") + }; + if (sc_1 >= 0) + file_1.size = sc_1, file_1.originalSize = su_1; + this_1.onfile(file_1); + } + return "break"; + } else if (oc) { + if (sig == 134695760) { + is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0; + return "break"; + } else if (sig == 33639248) { + is = i -= 4, f = 3, this_1.c = 0; + return "break"; + } + } + }, "_loop_2"); + var this_1 = this; + for (; i < l - 4; ++i) { + var state_1 = _loop_2(); + if (state_1 === "break") + break; + } + this.p = et; + if (oc < 0) { + var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 134695760 && 4)) : buf.subarray(0, i); + if (add) + add.push(dat, !!f); + else + this.k[+(f == 2)].push(dat); + } + if (f & 2) + return this.push(buf.subarray(i), final); + this.p = buf.subarray(i); + } + if (final) { + if (this.c) + err(13); + this.p = null; + } + }; + Unzip2.prototype.register = function(decoder) { + this.o[decoder.compression] = decoder; + }; + return Unzip2; +}(); +var mt = typeof queueMicrotask == "function" ? queueMicrotask : typeof setTimeout == "function" ? setTimeout : function(fn) { + fn(); +}; +function unzip(data, opts, cb) { + if (!cb) + cb = opts, opts = {}; + if (typeof cb != "function") + err(7); + var term = []; + var tAll = /* @__PURE__ */ __name(function() { + for (var i2 = 0; i2 < term.length; ++i2) + term[i2](); + }, "tAll"); + var files = {}; + var cbd = /* @__PURE__ */ __name(function(a, b) { + mt(function() { + cb(a, b); + }); + }, "cbd"); + mt(function() { + cbd = cb; + }); + var e = data.length - 22; + for (; b4(data, e) != 101010256; --e) { + if (!e || data.length - e > 65558) { + cbd(err(13, 0, 1), null); + return tAll; + } + } + ; + var lft = b2(data, e + 8); + if (lft) { + var c = lft; + var o = b4(data, e + 16); + var z = o == 4294967295 || c == 65535; + if (z) { + var ze = b4(data, e - 12); + z = b4(data, ze) == 101075792; + if (z) { + c = lft = b4(data, ze + 32); + o = b4(data, ze + 48); + } + } + var fltr = opts && opts.filter; + var _loop_3 = /* @__PURE__ */ __name(function(i2) { + var _a2 = zh(data, o, z), c_1 = _a2[0], sc = _a2[1], su = _a2[2], fn = _a2[3], no = _a2[4], off = _a2[5], b = slzh(data, off); + o = no; + var cbl = /* @__PURE__ */ __name(function(e2, d) { + if (e2) { + tAll(); + cbd(e2, null); + } else { + if (d) + files[fn] = d; + if (!--lft) + cbd(null, files); + } + }, "cbl"); + if (!fltr || fltr({ + name: fn, + size: sc, + originalSize: su, + compression: c_1 + })) { + if (!c_1) + cbl(null, slc(data, b, b + sc)); + else if (c_1 == 8) { + var infl = data.subarray(b, b + sc); + if (su < 524288 || sc > 0.8 * su) { + try { + cbl(null, inflateSync(infl, { out: new u8(su) })); + } catch (e2) { + cbl(e2, null); + } + } else + term.push(inflate(infl, { size: su }, cbl)); + } else + cbl(err(14, "unknown compression type " + c_1, 1), null); + } else + cbl(null, null); + }, "_loop_3"); + for (var i = 0; i < c; ++i) { + _loop_3(i); + } + } else + cbd(null, {}); + return tAll; +} +__name(unzip, "unzip"); +function unzipSync(data, opts) { + var files = {}; + var e = data.length - 22; + for (; b4(data, e) != 101010256; --e) { + if (!e || data.length - e > 65558) + err(13); + } + ; + var c = b2(data, e + 8); + if (!c) + return {}; + var o = b4(data, e + 16); + var z = o == 4294967295 || c == 65535; + if (z) { + var ze = b4(data, e - 12); + z = b4(data, ze) == 101075792; + if (z) { + c = b4(data, ze + 32); + o = b4(data, ze + 48); + } + } + var fltr = opts && opts.filter; + for (var i = 0; i < c; ++i) { + var _a2 = zh(data, o, z), c_2 = _a2[0], sc = _a2[1], su = _a2[2], fn = _a2[3], no = _a2[4], off = _a2[5], b = slzh(data, off); + o = no; + if (!fltr || fltr({ + name: fn, + size: sc, + originalSize: su, + compression: c_2 + })) { + if (!c_2) + files[fn] = slc(data, b, b + sc); + else if (c_2 == 8) + files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) }); + else + err(14, "unknown compression type " + c_2); + } + } + return files; +} +__name(unzipSync, "unzipSync"); +function findSpan(p, u, U) { + const n = U.length - p - 1; + if (u >= U[n]) { + return n - 1; + } + if (u <= U[p]) { + return p; + } + let low = p; + let high = n; + let mid = Math.floor((low + high) / 2); + while (u < U[mid] || u >= U[mid + 1]) { + if (u < U[mid]) { + high = mid; + } else { + low = mid; + } + mid = Math.floor((low + high) / 2); + } + return mid; +} +__name(findSpan, "findSpan"); +function calcBasisFunctions(span, u, p, U) { + const N = []; + const left = []; + const right = []; + N[0] = 1; + for (let j = 1; j <= p; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r = 0; r < j; ++r) { + const rv = right[r + 1]; + const lv = left[j - r]; + const temp = N[r] / (rv + lv); + N[r] = saved + rv * temp; + saved = lv * temp; + } + N[j] = saved; + } + return N; +} +__name(calcBasisFunctions, "calcBasisFunctions"); +function calcBSplinePoint(p, U, P, u) { + const span = findSpan(p, u, U); + const N = calcBasisFunctions(span, u, p, U); + const C = new Vector4(0, 0, 0, 0); + for (let j = 0; j <= p; ++j) { + const point = P[span - p + j]; + const Nj = N[j]; + const wNj = point.w * Nj; + C.x += point.x * wNj; + C.y += point.y * wNj; + C.z += point.z * wNj; + C.w += point.w * Nj; + } + return C; +} +__name(calcBSplinePoint, "calcBSplinePoint"); +function calcBasisFunctionDerivatives(span, u, p, n, U) { + const zeroArr = []; + for (let i = 0; i <= p; ++i) + zeroArr[i] = 0; + const ders = []; + for (let i = 0; i <= n; ++i) + ders[i] = zeroArr.slice(0); + const ndu = []; + for (let i = 0; i <= p; ++i) + ndu[i] = zeroArr.slice(0); + ndu[0][0] = 1; + const left = zeroArr.slice(0); + const right = zeroArr.slice(0); + for (let j = 1; j <= p; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r2 = 0; r2 < j; ++r2) { + const rv = right[r2 + 1]; + const lv = left[j - r2]; + ndu[j][r2] = rv + lv; + const temp = ndu[r2][j - 1] / ndu[j][r2]; + ndu[r2][j] = saved + rv * temp; + saved = lv * temp; + } + ndu[j][j] = saved; + } + for (let j = 0; j <= p; ++j) { + ders[0][j] = ndu[j][p]; + } + for (let r2 = 0; r2 <= p; ++r2) { + let s1 = 0; + let s2 = 1; + const a = []; + for (let i = 0; i <= p; ++i) { + a[i] = zeroArr.slice(0); + } + a[0][0] = 1; + for (let k = 1; k <= n; ++k) { + let d = 0; + const rk = r2 - k; + const pk = p - k; + if (r2 >= k) { + a[s2][0] = a[s1][0] / ndu[pk + 1][rk]; + d = a[s2][0] * ndu[rk][pk]; + } + const j1 = rk >= -1 ? 1 : -rk; + const j2 = r2 - 1 <= pk ? k - 1 : p - r2; + for (let j3 = j1; j3 <= j2; ++j3) { + a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3]; + d += a[s2][j3] * ndu[rk + j3][pk]; + } + if (r2 <= pk) { + a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2]; + d += a[s2][k] * ndu[r2][pk]; + } + ders[k][r2] = d; + const j = s1; + s1 = s2; + s2 = j; + } + } + let r = p; + for (let k = 1; k <= n; ++k) { + for (let j = 0; j <= p; ++j) { + ders[k][j] *= r; + } + r *= p - k; + } + return ders; +} +__name(calcBasisFunctionDerivatives, "calcBasisFunctionDerivatives"); +function calcBSplineDerivatives(p, U, P, u, nd) { + const du = nd < p ? nd : p; + const CK = []; + const span = findSpan(p, u, U); + const nders = calcBasisFunctionDerivatives(span, u, p, du, U); + const Pw = []; + for (let i = 0; i < P.length; ++i) { + const point = P[i].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + Pw[i] = point; + } + for (let k = 0; k <= du; ++k) { + const point = Pw[span - p].clone().multiplyScalar(nders[k][0]); + for (let j = 1; j <= p; ++j) { + point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j])); + } + CK[k] = point; + } + for (let k = du + 1; k <= nd + 1; ++k) { + CK[k] = new Vector4(0, 0, 0); + } + return CK; +} +__name(calcBSplineDerivatives, "calcBSplineDerivatives"); +function calcKoverI(k, i) { + let nom = 1; + for (let j = 2; j <= k; ++j) { + nom *= j; + } + let denom = 1; + for (let j = 2; j <= i; ++j) { + denom *= j; + } + for (let j = 2; j <= k - i; ++j) { + denom *= j; + } + return nom / denom; +} +__name(calcKoverI, "calcKoverI"); +function calcRationalCurveDerivatives(Pders) { + const nd = Pders.length; + const Aders = []; + const wders = []; + for (let i = 0; i < nd; ++i) { + const point = Pders[i]; + Aders[i] = new Vector3(point.x, point.y, point.z); + wders[i] = point.w; + } + const CK = []; + for (let k = 0; k < nd; ++k) { + const v = Aders[k].clone(); + for (let i = 1; i <= k; ++i) { + v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i])); + } + CK[k] = v.divideScalar(wders[0]); + } + return CK; +} +__name(calcRationalCurveDerivatives, "calcRationalCurveDerivatives"); +function calcNURBSDerivatives(p, U, P, u, nd) { + const Pders = calcBSplineDerivatives(p, U, P, u, nd); + return calcRationalCurveDerivatives(Pders); +} +__name(calcNURBSDerivatives, "calcNURBSDerivatives"); +function calcSurfacePoint(p, q, U, V, P, u, v, target) { + const uspan = findSpan(p, u, U); + const vspan = findSpan(q, v, V); + const Nu = calcBasisFunctions(uspan, u, p, U); + const Nv = calcBasisFunctions(vspan, v, q, V); + const temp = []; + for (let l = 0; l <= q; ++l) { + temp[l] = new Vector4(0, 0, 0, 0); + for (let k = 0; k <= p; ++k) { + const point = P[uspan - p + k][vspan - q + l].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + temp[l].add(point.multiplyScalar(Nu[k])); + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let l = 0; l <= q; ++l) { + Sw.add(temp[l].multiplyScalar(Nv[l])); + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} +__name(calcSurfacePoint, "calcSurfacePoint"); +function calcVolumePoint(p, q, r, U, V, W, P, u, v, w, target) { + const uspan = findSpan(p, u, U); + const vspan = findSpan(q, v, V); + const wspan = findSpan(r, w, W); + const Nu = calcBasisFunctions(uspan, u, p, U); + const Nv = calcBasisFunctions(vspan, v, q, V); + const Nw = calcBasisFunctions(wspan, w, r, W); + const temp = []; + for (let m = 0; m <= r; ++m) { + temp[m] = []; + for (let l = 0; l <= q; ++l) { + temp[m][l] = new Vector4(0, 0, 0, 0); + for (let k = 0; k <= p; ++k) { + const point = P[uspan - p + k][vspan - q + l][wspan - r + m].clone(); + const w2 = point.w; + point.x *= w2; + point.y *= w2; + point.z *= w2; + temp[m][l].add(point.multiplyScalar(Nu[k])); + } + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let m = 0; m <= r; ++m) { + for (let l = 0; l <= q; ++l) { + Sw.add(temp[m][l].multiplyScalar(Nw[m]).multiplyScalar(Nv[l])); + } + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} +__name(calcVolumePoint, "calcVolumePoint"); +class NURBSCurve extends Curve { + static { + __name(this, "NURBSCurve"); + } + constructor(degree, knots, controlPoints, startKnot, endKnot) { + super(); + const knotsLength = knots ? knots.length - 1 : 0; + const pointsLength = controlPoints ? controlPoints.length : 0; + this.degree = degree; + this.knots = knots; + this.controlPoints = []; + this.startKnot = startKnot || 0; + this.endKnot = endKnot || knotsLength; + for (let i = 0; i < pointsLength; ++i) { + const point = controlPoints[i]; + this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w); + } + } + getPoint(t2, optionalTarget = new Vector3()) { + const point = optionalTarget; + const u = this.knots[this.startKnot] + t2 * (this.knots[this.endKnot] - this.knots[this.startKnot]); + const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u); + if (hpoint.w !== 1) { + hpoint.divideScalar(hpoint.w); + } + return point.set(hpoint.x, hpoint.y, hpoint.z); + } + getTangent(t2, optionalTarget = new Vector3()) { + const tangent = optionalTarget; + const u = this.knots[0] + t2 * (this.knots[this.knots.length - 1] - this.knots[0]); + const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1); + tangent.copy(ders[1]).normalize(); + return tangent; + } + toJSON() { + const data = super.toJSON(); + data.degree = this.degree; + data.knots = [...this.knots]; + data.controlPoints = this.controlPoints.map((p) => p.toArray()); + data.startKnot = this.startKnot; + data.endKnot = this.endKnot; + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.degree = json.degree; + this.knots = [...json.knots]; + this.controlPoints = json.controlPoints.map((p) => new Vector4(p[0], p[1], p[2], p[3])); + this.startKnot = json.startKnot; + this.endKnot = json.endKnot; + return this; + } +} +let fbxTree; +let connections; +let sceneGraph; +class FBXLoader extends Loader { + static { + __name(this, "FBXLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(FBXBuffer, path) { + if (isFbxFormatBinary(FBXBuffer)) { + fbxTree = new BinaryParser().parse(FBXBuffer); + } else { + const FBXText = convertArrayBufferToString(FBXBuffer); + if (!isFbxFormatASCII(FBXText)) { + throw new Error("THREE.FBXLoader: Unknown format."); + } + if (getFbxVersion(FBXText) < 7e3) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText)); + } + fbxTree = new TextParser().parse(FBXText); + } + const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree); + } +} +class FBXTreeParser { + static { + __name(this, "FBXTreeParser"); + } + constructor(textureLoader, manager) { + this.textureLoader = textureLoader; + this.manager = manager; + } + parse() { + connections = this.parseConnections(); + const images = this.parseImages(); + const textures = this.parseTextures(images); + const materials = this.parseMaterials(textures); + const deformers = this.parseDeformers(); + const geometryMap = new GeometryParser().parse(deformers); + this.parseScene(deformers, geometryMap, materials); + return sceneGraph; + } + // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry ) + // and details the connection type + parseConnections() { + const connectionMap = /* @__PURE__ */ new Map(); + if ("Connections" in fbxTree) { + const rawConnections = fbxTree.Connections.connections; + rawConnections.forEach(function(rawConnection) { + const fromID = rawConnection[0]; + const toID = rawConnection[1]; + const relationship = rawConnection[2]; + if (!connectionMap.has(fromID)) { + connectionMap.set(fromID, { + parents: [], + children: [] + }); + } + const parentRelationship = { ID: toID, relationship }; + connectionMap.get(fromID).parents.push(parentRelationship); + if (!connectionMap.has(toID)) { + connectionMap.set(toID, { + parents: [], + children: [] + }); + } + const childRelationship = { ID: fromID, relationship }; + connectionMap.get(toID).children.push(childRelationship); + }); + } + return connectionMap; + } + // Parse FBXTree.Objects.Video for embedded image data + // These images are connected to textures in FBXTree.Objects.Textures + // via FBXTree.Connections. + parseImages() { + const images = {}; + const blobs = {}; + if ("Video" in fbxTree.Objects) { + const videoNodes = fbxTree.Objects.Video; + for (const nodeID in videoNodes) { + const videoNode = videoNodes[nodeID]; + const id2 = parseInt(nodeID); + images[id2] = videoNode.RelativeFilename || videoNode.Filename; + if ("Content" in videoNode) { + const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0; + const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== ""; + if (arrayBufferContent || base64Content) { + const image = this.parseImage(videoNodes[nodeID]); + blobs[videoNode.RelativeFilename || videoNode.Filename] = image; + } + } + } + } + for (const id2 in images) { + const filename = images[id2]; + if (blobs[filename] !== void 0) images[id2] = blobs[filename]; + else images[id2] = images[id2].split("\\").pop(); + } + return images; + } + // Parse embedded image data in FBXTree.Video.Content + parseImage(videoNode) { + const content = videoNode.Content; + const fileName = videoNode.RelativeFilename || videoNode.Filename; + const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); + let type; + switch (extension) { + case "bmp": + type = "image/bmp"; + break; + case "jpg": + case "jpeg": + type = "image/jpeg"; + break; + case "png": + type = "image/png"; + break; + case "tif": + type = "image/tiff"; + break; + case "tga": + if (this.manager.getHandler(".tga") === null) { + console.warn("FBXLoader: TGA loader not found, skipping ", fileName); + } + type = "image/tga"; + break; + default: + console.warn('FBXLoader: Image type "' + extension + '" is not supported.'); + return; + } + if (typeof content === "string") { + return "data:" + type + ";base64," + content; + } else { + const array = new Uint8Array(content); + return window.URL.createObjectURL(new Blob([array], { type })); + } + } + // Parse nodes in FBXTree.Objects.Texture + // These contain details such as UV scaling, cropping, rotation etc and are connected + // to images in FBXTree.Objects.Video + parseTextures(images) { + const textureMap = /* @__PURE__ */ new Map(); + if ("Texture" in fbxTree.Objects) { + const textureNodes = fbxTree.Objects.Texture; + for (const nodeID in textureNodes) { + const texture = this.parseTexture(textureNodes[nodeID], images); + textureMap.set(parseInt(nodeID), texture); + } + } + return textureMap; + } + // Parse individual node in FBXTree.Objects.Texture + parseTexture(textureNode, images) { + const texture = this.loadTexture(textureNode, images); + texture.ID = textureNode.id; + texture.name = textureNode.attrName; + const wrapModeU = textureNode.WrapModeU; + const wrapModeV = textureNode.WrapModeV; + const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0; + const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0; + texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if ("Scaling" in textureNode) { + const values = textureNode.Scaling.value; + texture.repeat.x = values[0]; + texture.repeat.y = values[1]; + } + if ("Translation" in textureNode) { + const values = textureNode.Translation.value; + texture.offset.x = values[0]; + texture.offset.y = values[1]; + } + return texture; + } + // load a texture specified as a blob or data URI, or via an external URL using TextureLoader + loadTexture(textureNode, images) { + const nonNativeExtensions = /* @__PURE__ */ new Set(["tga", "tif", "tiff", "exr", "dds", "hdr", "ktx2"]); + const extension = textureNode.FileName.split(".").pop().toLowerCase(); + const loader = nonNativeExtensions.has(extension) ? this.manager.getHandler(`.${extension}`) : this.textureLoader; + if (!loader) { + console.warn( + `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`, + textureNode.RelativeFilename + ); + return new Texture(); + } + const loaderPath = loader.path; + if (!loaderPath) { + loader.setPath(this.textureLoader.path); + } + const children = connections.get(textureNode.id).children; + let fileName; + if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) { + fileName = images[children[0].ID]; + if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) { + loader.setPath(void 0); + } + } + const texture = loader.load(fileName); + loader.setPath(loaderPath); + return texture; + } + // Parse nodes in FBXTree.Objects.Material + parseMaterials(textureMap) { + const materialMap = /* @__PURE__ */ new Map(); + if ("Material" in fbxTree.Objects) { + const materialNodes = fbxTree.Objects.Material; + for (const nodeID in materialNodes) { + const material = this.parseMaterial(materialNodes[nodeID], textureMap); + if (material !== null) materialMap.set(parseInt(nodeID), material); + } + } + return materialMap; + } + // Parse single node in FBXTree.Objects.Material + // Materials are connected to texture maps in FBXTree.Objects.Textures + // FBX format currently only supports Lambert and Phong shading models + parseMaterial(materialNode, textureMap) { + const ID = materialNode.id; + const name = materialNode.attrName; + let type = materialNode.ShadingModel; + if (typeof type === "object") { + type = type.value; + } + if (!connections.has(ID)) return null; + const parameters = this.parseParameters(materialNode, textureMap, ID); + let material; + switch (type.toLowerCase()) { + case "phong": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type); + material = new MeshPhongMaterial(); + break; + } + material.setValues(parameters); + material.name = name; + return material; + } + // Parse FBX material and return parameters suitable for a three.js material + // Also parse the texture map and return any textures associated with the material + parseParameters(materialNode, textureMap, ID) { + const parameters = {}; + if (materialNode.BumpFactor) { + parameters.bumpScale = materialNode.BumpFactor.value; + } + if (materialNode.Diffuse) { + parameters.color = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.Diffuse.value), SRGBColorSpace); + } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) { + parameters.color = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.DiffuseColor.value), SRGBColorSpace); + } + if (materialNode.DisplacementFactor) { + parameters.displacementScale = materialNode.DisplacementFactor.value; + } + if (materialNode.Emissive) { + parameters.emissive = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.Emissive.value), SRGBColorSpace); + } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) { + parameters.emissive = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.EmissiveColor.value), SRGBColorSpace); + } + if (materialNode.EmissiveFactor) { + parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value); + } + parameters.opacity = 1 - (materialNode.TransparencyFactor ? parseFloat(materialNode.TransparencyFactor.value) : 0); + if (parameters.opacity === 1 || parameters.opacity === 0) { + parameters.opacity = materialNode.Opacity ? parseFloat(materialNode.Opacity.value) : null; + if (parameters.opacity === null) { + parameters.opacity = 1 - (materialNode.TransparentColor ? parseFloat(materialNode.TransparentColor.value[0]) : 0); + } + } + if (parameters.opacity < 1) { + parameters.transparent = true; + } + if (materialNode.ReflectionFactor) { + parameters.reflectivity = materialNode.ReflectionFactor.value; + } + if (materialNode.Shininess) { + parameters.shininess = materialNode.Shininess.value; + } + if (materialNode.Specular) { + parameters.specular = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.Specular.value), SRGBColorSpace); + } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") { + parameters.specular = ColorManagement.toWorkingColorSpace(new Color().fromArray(materialNode.SpecularColor.value), SRGBColorSpace); + } + const scope = this; + connections.get(ID).children.forEach(function(child) { + const type = child.relationship; + switch (type) { + case "Bump": + parameters.bumpMap = scope.getTexture(textureMap, child.ID); + break; + case "Maya|TEX_ao_map": + parameters.aoMap = scope.getTexture(textureMap, child.ID); + break; + case "DiffuseColor": + case "Maya|TEX_color_map": + parameters.map = scope.getTexture(textureMap, child.ID); + if (parameters.map !== void 0) { + parameters.map.colorSpace = SRGBColorSpace; + } + break; + case "DisplacementColor": + parameters.displacementMap = scope.getTexture(textureMap, child.ID); + break; + case "EmissiveColor": + parameters.emissiveMap = scope.getTexture(textureMap, child.ID); + if (parameters.emissiveMap !== void 0) { + parameters.emissiveMap.colorSpace = SRGBColorSpace; + } + break; + case "NormalMap": + case "Maya|TEX_normal_map": + parameters.normalMap = scope.getTexture(textureMap, child.ID); + break; + case "ReflectionColor": + parameters.envMap = scope.getTexture(textureMap, child.ID); + if (parameters.envMap !== void 0) { + parameters.envMap.mapping = EquirectangularReflectionMapping; + parameters.envMap.colorSpace = SRGBColorSpace; + } + break; + case "SpecularColor": + parameters.specularMap = scope.getTexture(textureMap, child.ID); + if (parameters.specularMap !== void 0) { + parameters.specularMap.colorSpace = SRGBColorSpace; + } + break; + case "TransparentColor": + case "TransparencyFactor": + parameters.alphaMap = scope.getTexture(textureMap, child.ID); + parameters.transparent = true; + break; + case "AmbientColor": + case "ShininessExponent": + case "SpecularFactor": + case "VectorDisplacementColor": + default: + console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type); + break; + } + }); + return parameters; + } + // get a texture from the textureMap for use by a material. + getTexture(textureMap, id2) { + if ("LayeredTexture" in fbxTree.Objects && id2 in fbxTree.Objects.LayeredTexture) { + console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."); + id2 = connections.get(id2).children[0].ID; + } + return textureMap.get(id2); + } + // Parse nodes in FBXTree.Objects.Deformer + // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here + // Generates map of Skeleton-like objects for use later when generating and binding skeletons. + parseDeformers() { + const skeletons = {}; + const morphTargets = {}; + if ("Deformer" in fbxTree.Objects) { + const DeformerNodes = fbxTree.Objects.Deformer; + for (const nodeID in DeformerNodes) { + const deformerNode = DeformerNodes[nodeID]; + const relationships = connections.get(parseInt(nodeID)); + if (deformerNode.attrType === "Skin") { + const skeleton = this.parseSkeleton(relationships, DeformerNodes); + skeleton.ID = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."); + skeleton.geometryID = relationships.parents[0].ID; + skeletons[nodeID] = skeleton; + } else if (deformerNode.attrType === "BlendShape") { + const morphTarget = { + id: nodeID + }; + morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes); + morphTarget.id = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."); + morphTargets[nodeID] = morphTarget; + } + } + } + return { + skeletons, + morphTargets + }; + } + // Parse single nodes in FBXTree.Objects.Deformer + // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster' + // Each skin node represents a skeleton and each cluster node represents a bone + parseSkeleton(relationships, deformerNodes) { + const rawBones = []; + relationships.children.forEach(function(child) { + const boneNode = deformerNodes[child.ID]; + if (boneNode.attrType !== "Cluster") return; + const rawBone = { + ID: child.ID, + indices: [], + weights: [], + transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) + // transform: new Matrix4().fromArray( boneNode.Transform.a ), + // linkMode: boneNode.Mode, + }; + if ("Indexes" in boneNode) { + rawBone.indices = boneNode.Indexes.a; + rawBone.weights = boneNode.Weights.a; + } + rawBones.push(rawBone); + }); + return { + rawBones, + bones: [] + }; + } + // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel" + parseMorphTargets(relationships, deformerNodes) { + const rawMorphTargets = []; + for (let i = 0; i < relationships.children.length; i++) { + const child = relationships.children[i]; + const morphTargetNode = deformerNodes[child.ID]; + const rawMorphTarget = { + name: morphTargetNode.attrName, + initialWeight: morphTargetNode.DeformPercent, + id: morphTargetNode.id, + fullWeights: morphTargetNode.FullWeights.a + }; + if (morphTargetNode.attrType !== "BlendShapeChannel") return; + rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) { + return child2.relationship === void 0; + })[0].ID; + rawMorphTargets.push(rawMorphTarget); + } + return rawMorphTargets; + } + // create the main Group() to be returned by the loader + parseScene(deformers, geometryMap, materialMap) { + sceneGraph = new Group(); + const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap); + const modelNodes = fbxTree.Objects.Model; + const scope = this; + modelMap.forEach(function(model) { + const modelNode = modelNodes[model.ID]; + scope.setLookAtProperties(model, modelNode); + const parentConnections = connections.get(model.ID).parents; + parentConnections.forEach(function(connection) { + const parent = modelMap.get(connection.ID); + if (parent !== void 0) parent.add(model); + }); + if (model.parent === null) { + sceneGraph.add(model); + } + }); + this.bindSkeleton(deformers.skeletons, geometryMap, modelMap); + this.addGlobalSceneSettings(); + sceneGraph.traverse(function(node) { + if (node.userData.transformData) { + if (node.parent) { + node.userData.transformData.parentMatrix = node.parent.matrix; + node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld; + } + const transform = generateTransform(node.userData.transformData); + node.applyMatrix4(transform); + node.updateWorldMatrix(); + } + }); + const animations = new AnimationParser().parse(); + if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) { + sceneGraph.children[0].animations = animations; + sceneGraph = sceneGraph.children[0]; + } + sceneGraph.animations = animations; + } + // parse nodes in FBXTree.Objects.Model + parseModels(skeletons, geometryMap, materialMap) { + const modelMap = /* @__PURE__ */ new Map(); + const modelNodes = fbxTree.Objects.Model; + for (const nodeID in modelNodes) { + const id2 = parseInt(nodeID); + const node = modelNodes[nodeID]; + const relationships = connections.get(id2); + let model = this.buildSkeleton(relationships, skeletons, id2, node.attrName); + if (!model) { + switch (node.attrType) { + case "Camera": + model = this.createCamera(relationships); + break; + case "Light": + model = this.createLight(relationships); + break; + case "Mesh": + model = this.createMesh(relationships, geometryMap, materialMap); + break; + case "NurbsCurve": + model = this.createCurve(relationships, geometryMap); + break; + case "LimbNode": + case "Root": + model = new Bone(); + break; + case "Null": + default: + model = new Group(); + break; + } + model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : ""; + model.userData.originalName = node.attrName; + model.ID = id2; + } + this.getTransformData(model, node); + modelMap.set(id2, model); + } + return modelMap; + } + buildSkeleton(relationships, skeletons, id2, name) { + let bone = null; + relationships.parents.forEach(function(parent) { + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + skeleton.rawBones.forEach(function(rawBone, i) { + if (rawBone.ID === parent.ID) { + const subBone = bone; + bone = new Bone(); + bone.matrixWorld.copy(rawBone.transformLink); + bone.name = name ? PropertyBinding.sanitizeNodeName(name) : ""; + bone.userData.originalName = name; + bone.ID = id2; + skeleton.bones[i] = bone; + if (subBone !== null) { + bone.add(subBone); + } + } + }); + } + }); + return bone; + } + // create a PerspectiveCamera or OrthographicCamera + createCamera(relationships) { + let model; + let cameraAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + cameraAttribute = attr; + } + }); + if (cameraAttribute === void 0) { + model = new Object3D(); + } else { + let type = 0; + if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) { + type = 1; + } + let nearClippingPlane = 1; + if (cameraAttribute.NearPlane !== void 0) { + nearClippingPlane = cameraAttribute.NearPlane.value / 1e3; + } + let farClippingPlane = 1e3; + if (cameraAttribute.FarPlane !== void 0) { + farClippingPlane = cameraAttribute.FarPlane.value / 1e3; + } + let width = window.innerWidth; + let height = window.innerHeight; + if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) { + width = cameraAttribute.AspectWidth.value; + height = cameraAttribute.AspectHeight.value; + } + const aspect2 = width / height; + let fov2 = 45; + if (cameraAttribute.FieldOfView !== void 0) { + fov2 = cameraAttribute.FieldOfView.value; + } + const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; + switch (type) { + case 0: + model = new PerspectiveCamera(fov2, aspect2, nearClippingPlane, farClippingPlane); + if (focalLength !== null) model.setFocalLength(focalLength); + break; + case 1: + console.warn("THREE.FBXLoader: Orthographic cameras not supported yet."); + model = new Object3D(); + break; + default: + console.warn("THREE.FBXLoader: Unknown camera type " + type + "."); + model = new Object3D(); + break; + } + } + return model; + } + // Create a DirectionalLight, PointLight or SpotLight + createLight(relationships) { + let model; + let lightAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + lightAttribute = attr; + } + }); + if (lightAttribute === void 0) { + model = new Object3D(); + } else { + let type; + if (lightAttribute.LightType === void 0) { + type = 0; + } else { + type = lightAttribute.LightType.value; + } + let color = 16777215; + if (lightAttribute.Color !== void 0) { + color = ColorManagement.toWorkingColorSpace(new Color().fromArray(lightAttribute.Color.value), SRGBColorSpace); + } + let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100; + if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) { + intensity = 0; + } + let distance = 0; + if (lightAttribute.FarAttenuationEnd !== void 0) { + if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) { + distance = 0; + } else { + distance = lightAttribute.FarAttenuationEnd.value; + } + } + const decay = 1; + switch (type) { + case 0: + model = new PointLight(color, intensity, distance, decay); + break; + case 1: + model = new DirectionalLight(color, intensity); + break; + case 2: + let angle = Math.PI / 3; + if (lightAttribute.InnerAngle !== void 0) { + angle = MathUtils.degToRad(lightAttribute.InnerAngle.value); + } + let penumbra = 0; + if (lightAttribute.OuterAngle !== void 0) { + penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value); + penumbra = Math.max(penumbra, 1); + } + model = new SpotLight(color, intensity, distance, angle, penumbra, decay); + break; + default: + console.warn("THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."); + model = new PointLight(color, intensity); + break; + } + if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) { + model.castShadow = true; + } + } + return model; + } + createMesh(relationships, geometryMap, materialMap) { + let model; + let geometry = null; + let material = null; + const materials = []; + relationships.children.forEach(function(child) { + if (geometryMap.has(child.ID)) { + geometry = geometryMap.get(child.ID); + } + if (materialMap.has(child.ID)) { + materials.push(materialMap.get(child.ID)); + } + }); + if (materials.length > 1) { + material = materials; + } else if (materials.length > 0) { + material = materials[0]; + } else { + material = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 13421772 + }); + materials.push(material); + } + if ("color" in geometry.attributes) { + materials.forEach(function(material2) { + material2.vertexColors = true; + }); + } + if (geometry.FBX_Deformer) { + model = new SkinnedMesh(geometry, material); + model.normalizeSkinWeights(); + } else { + model = new Mesh(geometry, material); + } + return model; + } + createCurve(relationships, geometryMap) { + const geometry = relationships.children.reduce(function(geo, child) { + if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID); + return geo; + }, null); + const material = new LineBasicMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 3342591, + linewidth: 1 + }); + return new Line(geometry, material); + } + // parse the model node for transform data + getTransformData(model, modelNode) { + const transformData = {}; + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + else transformData.eulerOrder = getEulerOrder(0); + if ("Lcl_Translation" in modelNode) transformData.translation = modelNode.Lcl_Translation.value; + if ("PreRotation" in modelNode) transformData.preRotation = modelNode.PreRotation.value; + if ("Lcl_Rotation" in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value; + if ("PostRotation" in modelNode) transformData.postRotation = modelNode.PostRotation.value; + if ("Lcl_Scaling" in modelNode) transformData.scale = modelNode.Lcl_Scaling.value; + if ("ScalingOffset" in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value; + if ("ScalingPivot" in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value; + if ("RotationOffset" in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value; + if ("RotationPivot" in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value; + model.userData.transformData = transformData; + } + setLookAtProperties(model, modelNode) { + if ("LookAtProperty" in modelNode) { + const children = connections.get(model.ID).children; + children.forEach(function(child) { + if (child.relationship === "LookAtProperty") { + const lookAtTarget = fbxTree.Objects.Model[child.ID]; + if ("Lcl_Translation" in lookAtTarget) { + const pos = lookAtTarget.Lcl_Translation.value; + if (model.target !== void 0) { + model.target.position.fromArray(pos); + sceneGraph.add(model.target); + } else { + model.lookAt(new Vector3().fromArray(pos)); + } + } + } + }); + } + } + bindSkeleton(skeletons, geometryMap, modelMap) { + const bindMatrices = this.parsePoseNodes(); + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + const parents = connections.get(parseInt(skeleton.ID)).parents; + parents.forEach(function(parent) { + if (geometryMap.has(parent.ID)) { + const geoID = parent.ID; + const geoRelationships = connections.get(geoID); + geoRelationships.parents.forEach(function(geoConnParent) { + if (modelMap.has(geoConnParent.ID)) { + const model = modelMap.get(geoConnParent.ID); + model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]); + } + }); + } + }); + } + } + parsePoseNodes() { + const bindMatrices = {}; + if ("Pose" in fbxTree.Objects) { + const BindPoseNode = fbxTree.Objects.Pose; + for (const nodeID in BindPoseNode) { + if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) { + const poseNodes = BindPoseNode[nodeID].PoseNode; + if (Array.isArray(poseNodes)) { + poseNodes.forEach(function(poseNode) { + bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a); + }); + } else { + bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a); + } + } + } + } + return bindMatrices; + } + addGlobalSceneSettings() { + if ("GlobalSettings" in fbxTree) { + if ("AmbientColor" in fbxTree.GlobalSettings) { + const ambientColor = fbxTree.GlobalSettings.AmbientColor.value; + const r = ambientColor[0]; + const g = ambientColor[1]; + const b = ambientColor[2]; + if (r !== 0 || g !== 0 || b !== 0) { + const color = new Color().setRGB(r, g, b, SRGBColorSpace); + sceneGraph.add(new AmbientLight(color, 1)); + } + } + if ("UnitScaleFactor" in fbxTree.GlobalSettings) { + sceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value; + } + } + } +} +class GeometryParser { + static { + __name(this, "GeometryParser"); + } + constructor() { + this.negativeMaterialIndices = false; + } + // Parse nodes in FBXTree.Objects.Geometry + parse(deformers) { + const geometryMap = /* @__PURE__ */ new Map(); + if ("Geometry" in fbxTree.Objects) { + const geoNodes = fbxTree.Objects.Geometry; + for (const nodeID in geoNodes) { + const relationships = connections.get(parseInt(nodeID)); + const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers); + geometryMap.set(parseInt(nodeID), geo); + } + } + if (this.negativeMaterialIndices === true) { + console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."); + } + return geometryMap; + } + // Parse single node in FBXTree.Objects.Geometry + parseGeometry(relationships, geoNode, deformers) { + switch (geoNode.attrType) { + case "Mesh": + return this.parseMeshGeometry(relationships, geoNode, deformers); + break; + case "NurbsCurve": + return this.parseNurbsGeometry(geoNode); + break; + } + } + // Parse single node mesh geometry in FBXTree.Objects.Geometry + parseMeshGeometry(relationships, geoNode, deformers) { + const skeletons = deformers.skeletons; + const morphTargets = []; + const modelNodes = relationships.parents.map(function(parent) { + return fbxTree.Objects.Model[parent.ID]; + }); + if (modelNodes.length === 0) return; + const skeleton = relationships.children.reduce(function(skeleton2, child) { + if (skeletons[child.ID] !== void 0) skeleton2 = skeletons[child.ID]; + return skeleton2; + }, null); + relationships.children.forEach(function(child) { + if (deformers.morphTargets[child.ID] !== void 0) { + morphTargets.push(deformers.morphTargets[child.ID]); + } + }); + const modelNode = modelNodes[0]; + const transformData = {}; + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("GeometricTranslation" in modelNode) transformData.translation = modelNode.GeometricTranslation.value; + if ("GeometricRotation" in modelNode) transformData.rotation = modelNode.GeometricRotation.value; + if ("GeometricScaling" in modelNode) transformData.scale = modelNode.GeometricScaling.value; + const transform = generateTransform(transformData); + return this.genGeometry(geoNode, skeleton, morphTargets, transform); + } + // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry + genGeometry(geoNode, skeleton, morphTargets, preTransform) { + const geo = new BufferGeometry(); + if (geoNode.attrName) geo.name = geoNode.attrName; + const geoInfo = this.parseGeoNode(geoNode, skeleton); + const buffers = this.genBuffers(geoInfo); + const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3); + positionAttribute.applyMatrix4(preTransform); + geo.setAttribute("position", positionAttribute); + if (buffers.colors.length > 0) { + geo.setAttribute("color", new Float32BufferAttribute(buffers.colors, 3)); + } + if (skeleton) { + geo.setAttribute("skinIndex", new Uint16BufferAttribute(buffers.weightsIndices, 4)); + geo.setAttribute("skinWeight", new Float32BufferAttribute(buffers.vertexWeights, 4)); + geo.FBX_Deformer = skeleton; + } + if (buffers.normal.length > 0) { + const normalMatrix = new Matrix3().getNormalMatrix(preTransform); + const normalAttribute = new Float32BufferAttribute(buffers.normal, 3); + normalAttribute.applyNormalMatrix(normalMatrix); + geo.setAttribute("normal", normalAttribute); + } + buffers.uvs.forEach(function(uvBuffer, i) { + const name = i === 0 ? "uv" : `uv${i}`; + geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2)); + }); + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + let prevMaterialIndex = buffers.materialIndex[0]; + let startIndex = 0; + buffers.materialIndex.forEach(function(currentIndex, i) { + if (currentIndex !== prevMaterialIndex) { + geo.addGroup(startIndex, i - startIndex, prevMaterialIndex); + prevMaterialIndex = currentIndex; + startIndex = i; + } + }); + if (geo.groups.length > 0) { + const lastGroup = geo.groups[geo.groups.length - 1]; + const lastIndex = lastGroup.start + lastGroup.count; + if (lastIndex !== buffers.materialIndex.length) { + geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex); + } + } + if (geo.groups.length === 0) { + geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]); + } + } + this.addMorphTargets(geo, geoNode, morphTargets, preTransform); + return geo; + } + parseGeoNode(geoNode, skeleton) { + const geoInfo = {}; + geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : []; + geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : []; + if (geoNode.LayerElementColor) { + geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]); + } + if (geoNode.LayerElementMaterial) { + geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]); + } + if (geoNode.LayerElementNormal) { + geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]); + } + if (geoNode.LayerElementUV) { + geoInfo.uv = []; + let i = 0; + while (geoNode.LayerElementUV[i]) { + if (geoNode.LayerElementUV[i].UV) { + geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i])); + } + i++; + } + } + geoInfo.weightTable = {}; + if (skeleton !== null) { + geoInfo.skeleton = skeleton; + skeleton.rawBones.forEach(function(rawBone, i) { + rawBone.indices.forEach(function(index, j) { + if (geoInfo.weightTable[index] === void 0) geoInfo.weightTable[index] = []; + geoInfo.weightTable[index].push({ + id: i, + weight: rawBone.weights[j] + }); + }); + }); + } + return geoInfo; + } + genBuffers(geoInfo) { + const buffers = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [] + }; + let polygonIndex = 0; + let faceLength = 0; + let displayedWeightsWarning = false; + let facePositionIndexes = []; + let faceNormals = []; + let faceColors = []; + let faceUVs = []; + let faceWeights = []; + let faceWeightIndices = []; + const scope = this; + geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) { + let materialIndex; + let endOfFace = false; + if (vertexIndex < 0) { + vertexIndex = vertexIndex ^ -1; + endOfFace = true; + } + let weightIndices = []; + let weights = []; + facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2); + if (geoInfo.color) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color); + faceColors.push(data[0], data[1], data[2]); + } + if (geoInfo.skeleton) { + if (geoInfo.weightTable[vertexIndex] !== void 0) { + geoInfo.weightTable[vertexIndex].forEach(function(wt) { + weights.push(wt.weight); + weightIndices.push(wt.id); + }); + } + if (weights.length > 4) { + if (!displayedWeightsWarning) { + console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."); + displayedWeightsWarning = true; + } + const wIndex = [0, 0, 0, 0]; + const Weight = [0, 0, 0, 0]; + weights.forEach(function(weight, weightIndex) { + let currentWeight = weight; + let currentIndex = weightIndices[weightIndex]; + Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) { + if (currentWeight > comparedWeight) { + comparedWeightArray[comparedWeightIndex] = currentWeight; + currentWeight = comparedWeight; + const tmp2 = wIndex[comparedWeightIndex]; + wIndex[comparedWeightIndex] = currentIndex; + currentIndex = tmp2; + } + }); + }); + weightIndices = wIndex; + weights = Weight; + } + while (weights.length < 4) { + weights.push(0); + weightIndices.push(0); + } + for (let i = 0; i < 4; ++i) { + faceWeights.push(weights[i]); + faceWeightIndices.push(weightIndices[i]); + } + } + if (geoInfo.normal) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal); + faceNormals.push(data[0], data[1], data[2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0]; + if (materialIndex < 0) { + scope.negativeMaterialIndices = true; + materialIndex = 0; + } + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, i) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv); + if (faceUVs[i] === void 0) { + faceUVs[i] = []; + } + faceUVs[i].push(data[0]); + faceUVs[i].push(data[1]); + }); + } + faceLength++; + if (endOfFace) { + scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength); + polygonIndex++; + faceLength = 0; + facePositionIndexes = []; + faceNormals = []; + faceColors = []; + faceUVs = []; + faceWeights = []; + faceWeightIndices = []; + } + }); + return buffers; + } + // See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal + getNormalNewell(vertices) { + const normal = new Vector3(0, 0, 0); + for (let i = 0; i < vertices.length; i++) { + const current = vertices[i]; + const next = vertices[(i + 1) % vertices.length]; + normal.x += (current.y - next.y) * (current.z + next.z); + normal.y += (current.z - next.z) * (current.x + next.x); + normal.z += (current.x - next.x) * (current.y + next.y); + } + normal.normalize(); + return normal; + } + getNormalTangentAndBitangent(vertices) { + const normalVector = this.getNormalNewell(vertices); + const up = Math.abs(normalVector.z) > 0.5 ? new Vector3(0, 1, 0) : new Vector3(0, 0, 1); + const tangent = up.cross(normalVector).normalize(); + const bitangent = normalVector.clone().cross(tangent).normalize(); + return { + normal: normalVector, + tangent, + bitangent + }; + } + flattenVertex(vertex2, normalTangent, normalBitangent) { + return new Vector2( + vertex2.dot(normalTangent), + vertex2.dot(normalBitangent) + ); + } + // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris + genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) { + let triangles; + if (faceLength > 3) { + const vertices = []; + const positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions; + for (let i = 0; i < facePositionIndexes.length; i += 3) { + vertices.push( + new Vector3( + positions[facePositionIndexes[i]], + positions[facePositionIndexes[i + 1]], + positions[facePositionIndexes[i + 2]] + ) + ); + } + const { tangent, bitangent } = this.getNormalTangentAndBitangent(vertices); + const triangulationInput = []; + for (const vertex2 of vertices) { + triangulationInput.push(this.flattenVertex(vertex2, tangent, bitangent)); + } + triangles = ShapeUtils.triangulateShape(triangulationInput, []); + } else { + triangles = [[0, 1, 2]]; + } + for (const [i0, i1, i2] of triangles) { + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 2]]); + if (geoInfo.skeleton) { + buffers.vertexWeights.push(faceWeights[i0 * 4]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i1 * 4]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i2 * 4]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 3]); + } + if (geoInfo.color) { + buffers.colors.push(faceColors[i0 * 3]); + buffers.colors.push(faceColors[i0 * 3 + 1]); + buffers.colors.push(faceColors[i0 * 3 + 2]); + buffers.colors.push(faceColors[i1 * 3]); + buffers.colors.push(faceColors[i1 * 3 + 1]); + buffers.colors.push(faceColors[i1 * 3 + 2]); + buffers.colors.push(faceColors[i2 * 3]); + buffers.colors.push(faceColors[i2 * 3 + 1]); + buffers.colors.push(faceColors[i2 * 3 + 2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + } + if (geoInfo.normal) { + buffers.normal.push(faceNormals[i0 * 3]); + buffers.normal.push(faceNormals[i0 * 3 + 1]); + buffers.normal.push(faceNormals[i0 * 3 + 2]); + buffers.normal.push(faceNormals[i1 * 3]); + buffers.normal.push(faceNormals[i1 * 3 + 1]); + buffers.normal.push(faceNormals[i1 * 3 + 2]); + buffers.normal.push(faceNormals[i2 * 3]); + buffers.normal.push(faceNormals[i2 * 3 + 1]); + buffers.normal.push(faceNormals[i2 * 3 + 2]); + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, j) { + if (buffers.uvs[j] === void 0) buffers.uvs[j] = []; + buffers.uvs[j].push(faceUVs[j][i0 * 2]); + buffers.uvs[j].push(faceUVs[j][i0 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i1 * 2]); + buffers.uvs[j].push(faceUVs[j][i1 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i2 * 2]); + buffers.uvs[j].push(faceUVs[j][i2 * 2 + 1]); + }); + } + } + } + addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) { + if (morphTargets.length === 0) return; + parentGeo.morphTargetsRelative = true; + parentGeo.morphAttributes.position = []; + const scope = this; + morphTargets.forEach(function(morphTarget) { + morphTarget.rawTargets.forEach(function(rawTarget) { + const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID]; + if (morphGeoNode !== void 0) { + scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name); + } + }); + }); + } + // a morph geometry node is similar to a standard node, and the node is also contained + // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal + // and a special attribute Index defining which vertices of the original geometry are affected + // Normal and position attributes only have data for the vertices that are affected by the morph + genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) { + const basePositions = parentGeoNode.Vertices !== void 0 ? parentGeoNode.Vertices.a : []; + const baseIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : []; + const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : []; + const morphIndices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : []; + const length = parentGeo.attributes.position.count * 3; + const morphPositions = new Float32Array(length); + for (let i = 0; i < morphIndices.length; i++) { + const morphIndex = morphIndices[i] * 3; + morphPositions[morphIndex] = morphPositionsSparse[i * 3]; + morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1]; + morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2]; + } + const morphGeoInfo = { + vertexIndices: baseIndices, + vertexPositions: morphPositions, + baseVertexPositions: basePositions + }; + const morphBuffers = this.genBuffers(morphGeoInfo); + const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3); + positionAttribute.name = name || morphGeoNode.attrName; + positionAttribute.applyMatrix4(preTransform); + parentGeo.morphAttributes.position.push(positionAttribute); + } + // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists + parseNormals(NormalNode) { + const mappingType = NormalNode.MappingInformationType; + const referenceType = NormalNode.ReferenceInformationType; + const buffer = NormalNode.Normals.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + if ("NormalIndex" in NormalNode) { + indexBuffer = NormalNode.NormalIndex.a; + } else if ("NormalsIndex" in NormalNode) { + indexBuffer = NormalNode.NormalsIndex.a; + } + } + return { + dataSize: 3, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists + parseUVs(UVNode) { + const mappingType = UVNode.MappingInformationType; + const referenceType = UVNode.ReferenceInformationType; + const buffer = UVNode.UV.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = UVNode.UVIndex.a; + } + return { + dataSize: 2, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists + parseVertexColors(ColorNode) { + const mappingType = ColorNode.MappingInformationType; + const referenceType = ColorNode.ReferenceInformationType; + const buffer = ColorNode.Colors.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = ColorNode.ColorIndex.a; + } + for (let i = 0, c = new Color(); i < buffer.length; i += 4) { + c.fromArray(buffer, i); + ColorManagement.toWorkingColorSpace(c, SRGBColorSpace); + c.toArray(buffer, i); + } + return { + dataSize: 4, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists + parseMaterialIndices(MaterialNode) { + const mappingType = MaterialNode.MappingInformationType; + const referenceType = MaterialNode.ReferenceInformationType; + if (mappingType === "NoMappingInformation") { + return { + dataSize: 1, + buffer: [0], + indices: [0], + mappingType: "AllSame", + referenceType + }; + } + const materialIndexBuffer = MaterialNode.Materials.a; + const materialIndices = []; + for (let i = 0; i < materialIndexBuffer.length; ++i) { + materialIndices.push(i); + } + return { + dataSize: 1, + buffer: materialIndexBuffer, + indices: materialIndices, + mappingType, + referenceType + }; + } + // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry + parseNurbsGeometry(geoNode) { + const order = parseInt(geoNode.Order); + if (isNaN(order)) { + console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id); + return new BufferGeometry(); + } + const degree = order - 1; + const knots = geoNode.KnotVector.a; + const controlPoints = []; + const pointsValues = geoNode.Points.a; + for (let i = 0, l = pointsValues.length; i < l; i += 4) { + controlPoints.push(new Vector4().fromArray(pointsValues, i)); + } + let startKnot, endKnot; + if (geoNode.Form === "Closed") { + controlPoints.push(controlPoints[0]); + } else if (geoNode.Form === "Periodic") { + startKnot = degree; + endKnot = knots.length - 1 - startKnot; + for (let i = 0; i < degree; ++i) { + controlPoints.push(controlPoints[i]); + } + } + const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot); + const points = curve.getPoints(controlPoints.length * 12); + return new BufferGeometry().setFromPoints(points); + } +} +class AnimationParser { + static { + __name(this, "AnimationParser"); + } + // take raw animation clips and turn them into three.js animation clips + parse() { + const animationClips = []; + const rawClips = this.parseClips(); + if (rawClips !== void 0) { + for (const key in rawClips) { + const rawClip = rawClips[key]; + const clip = this.addClip(rawClip); + animationClips.push(clip); + } + } + return animationClips; + } + parseClips() { + if (fbxTree.Objects.AnimationCurve === void 0) return void 0; + const curveNodesMap = this.parseAnimationCurveNodes(); + this.parseAnimationCurves(curveNodesMap); + const layersMap = this.parseAnimationLayers(curveNodesMap); + const rawClips = this.parseAnimStacks(layersMap); + return rawClips; + } + // parse nodes in FBXTree.Objects.AnimationCurveNode + // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation ) + // and is referenced by an AnimationLayer + parseAnimationCurveNodes() { + const rawCurveNodes = fbxTree.Objects.AnimationCurveNode; + const curveNodesMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawCurveNodes) { + const rawCurveNode = rawCurveNodes[nodeID]; + if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) { + const curveNode = { + id: rawCurveNode.id, + attr: rawCurveNode.attrName, + curves: {} + }; + curveNodesMap.set(curveNode.id, curveNode); + } + } + return curveNodesMap; + } + // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to + // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated + // axis ( e.g. times and values of x rotation) + parseAnimationCurves(curveNodesMap) { + const rawCurves = fbxTree.Objects.AnimationCurve; + for (const nodeID in rawCurves) { + const animationCurve = { + id: rawCurves[nodeID].id, + times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds), + values: rawCurves[nodeID].KeyValueFloat.a + }; + const relationships = connections.get(animationCurve.id); + if (relationships !== void 0) { + const animationCurveID = relationships.parents[0].ID; + const animationCurveRelationship = relationships.parents[0].relationship; + if (animationCurveRelationship.match(/X/)) { + curveNodesMap.get(animationCurveID).curves["x"] = animationCurve; + } else if (animationCurveRelationship.match(/Y/)) { + curveNodesMap.get(animationCurveID).curves["y"] = animationCurve; + } else if (animationCurveRelationship.match(/Z/)) { + curveNodesMap.get(animationCurveID).curves["z"] = animationCurve; + } else if (animationCurveRelationship.match(/DeformPercent/) && curveNodesMap.has(animationCurveID)) { + curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve; + } + } + } + } + // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references + // to various AnimationCurveNodes and is referenced by an AnimationStack node + // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack + parseAnimationLayers(curveNodesMap) { + const rawLayers = fbxTree.Objects.AnimationLayer; + const layersMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawLayers) { + const layerCurveNodes = []; + const connection = connections.get(parseInt(nodeID)); + if (connection !== void 0) { + const children = connection.children; + children.forEach(function(child, i) { + if (curveNodesMap.has(child.ID)) { + const curveNode = curveNodesMap.get(child.ID); + if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) { + if (layerCurveNodes[i] === void 0) { + const modelID = connections.get(child.ID).parents.filter(function(parent) { + return parent.relationship !== void 0; + })[0].ID; + if (modelID !== void 0) { + const rawModel = fbxTree.Objects.Model[modelID.toString()]; + if (rawModel === void 0) { + console.warn("THREE.FBXLoader: Encountered a unused curve.", child); + return; + } + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + ID: rawModel.id, + initialPosition: [0, 0, 0], + initialRotation: [0, 0, 0], + initialScale: [1, 1, 1] + }; + sceneGraph.traverse(function(child2) { + if (child2.ID === rawModel.id) { + node.transform = child2.matrix; + if (child2.userData.transformData) node.eulerOrder = child2.userData.transformData.eulerOrder; + } + }); + if (!node.transform) node.transform = new Matrix4(); + if ("PreRotation" in rawModel) node.preRotation = rawModel.PreRotation.value; + if ("PostRotation" in rawModel) node.postRotation = rawModel.PostRotation.value; + layerCurveNodes[i] = node; + } + } + if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode; + } else if (curveNode.curves.morph !== void 0) { + if (layerCurveNodes[i] === void 0) { + const deformerID = connections.get(child.ID).parents.filter(function(parent) { + return parent.relationship !== void 0; + })[0].ID; + const morpherID = connections.get(deformerID).parents[0].ID; + const geoID = connections.get(morpherID).parents[0].ID; + const modelID = connections.get(geoID).parents[0].ID; + const rawModel = fbxTree.Objects.Model[modelID]; + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + morphName: fbxTree.Objects.Deformer[deformerID].attrName + }; + layerCurveNodes[i] = node; + } + layerCurveNodes[i][curveNode.attr] = curveNode; + } + } + }); + layersMap.set(parseInt(nodeID), layerCurveNodes); + } + } + return layersMap; + } + // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation + // hierarchy. Each Stack node will be used to create a AnimationClip + parseAnimStacks(layersMap) { + const rawStacks = fbxTree.Objects.AnimationStack; + const rawClips = {}; + for (const nodeID in rawStacks) { + const children = connections.get(parseInt(nodeID)).children; + if (children.length > 1) { + console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); + } + const layer = layersMap.get(children[0].ID); + rawClips[nodeID] = { + name: rawStacks[nodeID].attrName, + layer + }; + } + return rawClips; + } + addClip(rawClip) { + let tracks = []; + const scope = this; + rawClip.layer.forEach(function(rawTracks) { + tracks = tracks.concat(scope.generateTracks(rawTracks)); + }); + return new AnimationClip(rawClip.name, -1, tracks); + } + generateTracks(rawTracks) { + const tracks = []; + let initialPosition = new Vector3(); + let initialScale = new Vector3(); + if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, new Quaternion(), initialScale); + initialPosition = initialPosition.toArray(); + initialScale = initialScale.toArray(); + if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) { + const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, "position"); + if (positionTrack !== void 0) tracks.push(positionTrack); + } + if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) { + const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder); + if (rotationTrack !== void 0) tracks.push(rotationTrack); + } + if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) { + const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale"); + if (scaleTrack !== void 0) tracks.push(scaleTrack); + } + if (rawTracks.DeformPercent !== void 0) { + const morphTrack = this.generateMorphTrack(rawTracks); + if (morphTrack !== void 0) tracks.push(morphTrack); + } + return tracks; + } + generateVectorTrack(modelName, curves, initialValue, type) { + const times = this.getTimesForAllAxes(curves); + const values = this.getKeyframeTrackValues(times, curves, initialValue); + return new VectorKeyframeTrack(modelName + "." + type, times, values); + } + generateRotationTrack(modelName, curves, preRotation, postRotation, eulerOrder) { + let times; + let values; + if (curves.x !== void 0 && curves.y !== void 0 && curves.z !== void 0) { + const result = this.interpolateRotations(curves.x, curves.y, curves.z, eulerOrder); + times = result[0]; + values = result[1]; + } + const defaultEulerOrder = getEulerOrder(0); + if (preRotation !== void 0) { + preRotation = preRotation.map(MathUtils.degToRad); + preRotation.push(defaultEulerOrder); + preRotation = new Euler().fromArray(preRotation); + preRotation = new Quaternion().setFromEuler(preRotation); + } + if (postRotation !== void 0) { + postRotation = postRotation.map(MathUtils.degToRad); + postRotation.push(defaultEulerOrder); + postRotation = new Euler().fromArray(postRotation); + postRotation = new Quaternion().setFromEuler(postRotation).invert(); + } + const quaternion = new Quaternion(); + const euler = new Euler(); + const quaternionValues = []; + if (!values || !times) return new QuaternionKeyframeTrack(modelName + ".quaternion", [0], [0]); + for (let i = 0; i < values.length; i += 3) { + euler.set(values[i], values[i + 1], values[i + 2], eulerOrder); + quaternion.setFromEuler(euler); + if (preRotation !== void 0) quaternion.premultiply(preRotation); + if (postRotation !== void 0) quaternion.multiply(postRotation); + if (i > 2) { + const prevQuat = new Quaternion().fromArray( + quaternionValues, + (i - 3) / 3 * 4 + ); + if (prevQuat.dot(quaternion) < 0) { + quaternion.set(-quaternion.x, -quaternion.y, -quaternion.z, -quaternion.w); + } + } + quaternion.toArray(quaternionValues, i / 3 * 4); + } + return new QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues); + } + generateMorphTrack(rawTracks) { + const curves = rawTracks.DeformPercent.curves.morph; + const values = curves.values.map(function(val) { + return val / 100; + }); + const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName]; + return new NumberKeyframeTrack(rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]", curves.times, values); + } + // For all animated objects, times are defined separately for each axis + // Here we'll combine the times into one sorted array without duplicates + getTimesForAllAxes(curves) { + let times = []; + if (curves.x !== void 0) times = times.concat(curves.x.times); + if (curves.y !== void 0) times = times.concat(curves.y.times); + if (curves.z !== void 0) times = times.concat(curves.z.times); + times = times.sort(function(a, b) { + return a - b; + }); + if (times.length > 1) { + let targetIndex = 1; + let lastValue = times[0]; + for (let i = 1; i < times.length; i++) { + const currentValue = times[i]; + if (currentValue !== lastValue) { + times[targetIndex] = currentValue; + lastValue = currentValue; + targetIndex++; + } + } + times = times.slice(0, targetIndex); + } + return times; + } + getKeyframeTrackValues(times, curves, initialValue) { + const prevValue = initialValue; + const values = []; + let xIndex = -1; + let yIndex = -1; + let zIndex = -1; + times.forEach(function(time) { + if (curves.x) xIndex = curves.x.times.indexOf(time); + if (curves.y) yIndex = curves.y.times.indexOf(time); + if (curves.z) zIndex = curves.z.times.indexOf(time); + if (xIndex !== -1) { + const xValue = curves.x.values[xIndex]; + values.push(xValue); + prevValue[0] = xValue; + } else { + values.push(prevValue[0]); + } + if (yIndex !== -1) { + const yValue = curves.y.values[yIndex]; + values.push(yValue); + prevValue[1] = yValue; + } else { + values.push(prevValue[1]); + } + if (zIndex !== -1) { + const zValue = curves.z.values[zIndex]; + values.push(zValue); + prevValue[2] = zValue; + } else { + values.push(prevValue[2]); + } + }); + return values; + } + // Rotations are defined as Euler angles which can have values of any size + // These will be converted to quaternions which don't support values greater than + // PI, so we'll interpolate large rotations + interpolateRotations(curvex, curvey, curvez, eulerOrder) { + const times = []; + const values = []; + times.push(curvex.times[0]); + values.push(MathUtils.degToRad(curvex.values[0])); + values.push(MathUtils.degToRad(curvey.values[0])); + values.push(MathUtils.degToRad(curvez.values[0])); + for (let i = 1; i < curvex.values.length; i++) { + const initialValue = [ + curvex.values[i - 1], + curvey.values[i - 1], + curvez.values[i - 1] + ]; + if (isNaN(initialValue[0]) || isNaN(initialValue[1]) || isNaN(initialValue[2])) { + continue; + } + const initialValueRad = initialValue.map(MathUtils.degToRad); + const currentValue = [ + curvex.values[i], + curvey.values[i], + curvez.values[i] + ]; + if (isNaN(currentValue[0]) || isNaN(currentValue[1]) || isNaN(currentValue[2])) { + continue; + } + const currentValueRad = currentValue.map(MathUtils.degToRad); + const valuesSpan = [ + currentValue[0] - initialValue[0], + currentValue[1] - initialValue[1], + currentValue[2] - initialValue[2] + ]; + const absoluteSpan = [ + Math.abs(valuesSpan[0]), + Math.abs(valuesSpan[1]), + Math.abs(valuesSpan[2]) + ]; + if (absoluteSpan[0] >= 180 || absoluteSpan[1] >= 180 || absoluteSpan[2] >= 180) { + const maxAbsSpan = Math.max(...absoluteSpan); + const numSubIntervals = maxAbsSpan / 180; + const E1 = new Euler(...initialValueRad, eulerOrder); + const E2 = new Euler(...currentValueRad, eulerOrder); + const Q1 = new Quaternion().setFromEuler(E1); + const Q2 = new Quaternion().setFromEuler(E2); + if (Q1.dot(Q2)) { + Q2.set(-Q2.x, -Q2.y, -Q2.z, -Q2.w); + } + const initialTime = curvex.times[i - 1]; + const timeSpan = curvex.times[i] - initialTime; + const Q = new Quaternion(); + const E = new Euler(); + for (let t2 = 0; t2 < 1; t2 += 1 / numSubIntervals) { + Q.copy(Q1.clone().slerp(Q2.clone(), t2)); + times.push(initialTime + t2 * timeSpan); + E.setFromQuaternion(Q, eulerOrder); + values.push(E.x); + values.push(E.y); + values.push(E.z); + } + } else { + times.push(curvex.times[i]); + values.push(MathUtils.degToRad(curvex.values[i])); + values.push(MathUtils.degToRad(curvey.values[i])); + values.push(MathUtils.degToRad(curvez.values[i])); + } + } + return [times, values]; + } +} +class TextParser { + static { + __name(this, "TextParser"); + } + getPrevNode() { + return this.nodeStack[this.currentIndent - 2]; + } + getCurrentNode() { + return this.nodeStack[this.currentIndent - 1]; + } + getCurrentProp() { + return this.currentProp; + } + pushStack(node) { + this.nodeStack.push(node); + this.currentIndent += 1; + } + popStack() { + this.nodeStack.pop(); + this.currentIndent -= 1; + } + setCurrentProp(val, name) { + this.currentProp = val; + this.currentPropName = name; + } + parse(text) { + this.currentIndent = 0; + this.allNodes = new FBXTree(); + this.nodeStack = []; + this.currentProp = []; + this.currentPropName = ""; + const scope = this; + const split = text.split(/[\r\n]+/); + split.forEach(function(line, i) { + const matchComment = line.match(/^[\s\t]*;/); + const matchEmpty = line.match(/^[\s\t]*$/); + if (matchComment || matchEmpty) return; + const matchBeginning = line.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", ""); + const matchProperty = line.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"); + const matchEnd = line.match("^\\t{" + (scope.currentIndent - 1) + "}}"); + if (matchBeginning) { + scope.parseNodeBegin(line, matchBeginning); + } else if (matchProperty) { + scope.parseNodeProperty(line, matchProperty, split[++i]); + } else if (matchEnd) { + scope.popStack(); + } else if (line.match(/^[^\s\t}]/)) { + scope.parseNodePropertyContinued(line); + } + }); + return this.allNodes; + } + parseNodeBegin(line, property) { + const nodeName = property[1].trim().replace(/^"/, "").replace(/"$/, ""); + const nodeAttrs = property[2].split(",").map(function(attr) { + return attr.trim().replace(/^"/, "").replace(/"$/, ""); + }); + const node = { name: nodeName }; + const attrs = this.parseNodeAttr(nodeAttrs); + const currentNode = this.getCurrentNode(); + if (this.currentIndent === 0) { + this.allNodes.add(nodeName, node); + } else { + if (nodeName in currentNode) { + if (nodeName === "PoseNode") { + currentNode.PoseNode.push(node); + } else if (currentNode[nodeName].id !== void 0) { + currentNode[nodeName] = {}; + currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName]; + } + if (attrs.id !== "") currentNode[nodeName][attrs.id] = node; + } else if (typeof attrs.id === "number") { + currentNode[nodeName] = {}; + currentNode[nodeName][attrs.id] = node; + } else if (nodeName !== "Properties70") { + if (nodeName === "PoseNode") currentNode[nodeName] = [node]; + else currentNode[nodeName] = node; + } + } + if (typeof attrs.id === "number") node.id = attrs.id; + if (attrs.name !== "") node.attrName = attrs.name; + if (attrs.type !== "") node.attrType = attrs.type; + this.pushStack(node); + } + parseNodeAttr(attrs) { + let id2 = attrs[0]; + if (attrs[0] !== "") { + id2 = parseInt(attrs[0]); + if (isNaN(id2)) { + id2 = attrs[0]; + } + } + let name = "", type = ""; + if (attrs.length > 1) { + name = attrs[1].replace(/^(\w+)::/, ""); + type = attrs[2]; + } + return { id: id2, name, type }; + } + parseNodeProperty(line, property, contentLine) { + let propName = property[1].replace(/^"/, "").replace(/"$/, "").trim(); + let propValue = property[2].replace(/^"/, "").replace(/"$/, "").trim(); + if (propName === "Content" && propValue === ",") { + propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim(); + } + const currentNode = this.getCurrentNode(); + const parentName = currentNode.name; + if (parentName === "Properties70") { + this.parseNodeSpecialProperty(line, propName, propValue); + return; + } + if (propName === "C") { + const connProps = propValue.split(",").slice(1); + const from = parseInt(connProps[0]); + const to = parseInt(connProps[1]); + let rest = propValue.split(",").slice(3); + rest = rest.map(function(elem) { + return elem.trim().replace(/^"/, ""); + }); + propName = "connections"; + propValue = [from, to]; + append(propValue, rest); + if (currentNode[propName] === void 0) { + currentNode[propName] = []; + } + } + if (propName === "Node") currentNode.id = propValue; + if (propName in currentNode && Array.isArray(currentNode[propName])) { + currentNode[propName].push(propValue); + } else { + if (propName !== "a") currentNode[propName] = propValue; + else currentNode.a = propValue; + } + this.setCurrentProp(currentNode, propName); + if (propName === "a" && propValue.slice(-1) !== ",") { + currentNode.a = parseNumberArray(propValue); + } + } + parseNodePropertyContinued(line) { + const currentNode = this.getCurrentNode(); + currentNode.a += line; + if (line.slice(-1) !== ",") { + currentNode.a = parseNumberArray(currentNode.a); + } + } + // parse "Property70" + parseNodeSpecialProperty(line, propName, propValue) { + const props = propValue.split('",').map(function(prop) { + return prop.trim().replace(/^\"/, "").replace(/\s/, "_"); + }); + const innerPropName = props[0]; + const innerPropType1 = props[1]; + const innerPropType2 = props[2]; + const innerPropFlag = props[3]; + let innerPropValue = props[4]; + switch (innerPropType1) { + case "int": + case "enum": + case "bool": + case "ULongLong": + case "double": + case "Number": + case "FieldOfView": + innerPropValue = parseFloat(innerPropValue); + break; + case "Color": + case "ColorRGB": + case "Vector3D": + case "Lcl_Translation": + case "Lcl_Rotation": + case "Lcl_Scaling": + innerPropValue = parseNumberArray(innerPropValue); + break; + } + this.getPrevNode()[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + this.setCurrentProp(this.getPrevNode(), innerPropName); + } +} +class BinaryParser { + static { + __name(this, "BinaryParser"); + } + parse(buffer) { + const reader = new BinaryReader(buffer); + reader.skip(23); + const version = reader.getUint32(); + if (version < 6400) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version); + } + const allNodes = new FBXTree(); + while (!this.endOfContent(reader)) { + const node = this.parseNode(reader, version); + if (node !== null) allNodes.add(node.name, node); + } + return allNodes; + } + // Check if reader has reached the end of content. + endOfContent(reader) { + if (reader.size() % 16 === 0) { + return (reader.getOffset() + 160 + 16 & ~15) >= reader.size(); + } else { + return reader.getOffset() + 160 + 16 >= reader.size(); + } + } + // recursively parse nodes until the end of the file is reached + parseNode(reader, version) { + const node = {}; + const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32(); + const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32(); + version >= 7500 ? reader.getUint64() : reader.getUint32(); + const nameLen = reader.getUint8(); + const name = reader.getString(nameLen); + if (endOffset === 0) return null; + const propertyList = []; + for (let i = 0; i < numProperties; i++) { + propertyList.push(this.parseProperty(reader)); + } + const id2 = propertyList.length > 0 ? propertyList[0] : ""; + const attrName = propertyList.length > 1 ? propertyList[1] : ""; + const attrType = propertyList.length > 2 ? propertyList[2] : ""; + node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false; + while (endOffset > reader.getOffset()) { + const subNode = this.parseNode(reader, version); + if (subNode !== null) this.parseSubNode(name, node, subNode); + } + node.propertyList = propertyList; + if (typeof id2 === "number") node.id = id2; + if (attrName !== "") node.attrName = attrName; + if (attrType !== "") node.attrType = attrType; + if (name !== "") node.name = name; + return node; + } + parseSubNode(name, node, subNode) { + if (subNode.singleProperty === true) { + const value = subNode.propertyList[0]; + if (Array.isArray(value)) { + node[subNode.name] = subNode; + subNode.a = value; + } else { + node[subNode.name] = value; + } + } else if (name === "Connections" && subNode.name === "C") { + const array = []; + subNode.propertyList.forEach(function(property, i) { + if (i !== 0) array.push(property); + }); + if (node.connections === void 0) { + node.connections = []; + } + node.connections.push(array); + } else if (subNode.name === "Properties70") { + const keys = Object.keys(subNode); + keys.forEach(function(key) { + node[key] = subNode[key]; + }); + } else if (name === "Properties70" && subNode.name === "P") { + let innerPropName = subNode.propertyList[0]; + let innerPropType1 = subNode.propertyList[1]; + const innerPropType2 = subNode.propertyList[2]; + const innerPropFlag = subNode.propertyList[3]; + let innerPropValue; + if (innerPropName.indexOf("Lcl ") === 0) innerPropName = innerPropName.replace("Lcl ", "Lcl_"); + if (innerPropType1.indexOf("Lcl ") === 0) innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_"); + if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) { + innerPropValue = [ + subNode.propertyList[4], + subNode.propertyList[5], + subNode.propertyList[6] + ]; + } else { + innerPropValue = subNode.propertyList[4]; + } + node[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + } else if (node[subNode.name] === void 0) { + if (typeof subNode.id === "number") { + node[subNode.name] = {}; + node[subNode.name][subNode.id] = subNode; + } else { + node[subNode.name] = subNode; + } + } else { + if (subNode.name === "PoseNode") { + if (!Array.isArray(node[subNode.name])) { + node[subNode.name] = [node[subNode.name]]; + } + node[subNode.name].push(subNode); + } else if (node[subNode.name][subNode.id] === void 0) { + node[subNode.name][subNode.id] = subNode; + } + } + } + parseProperty(reader) { + const type = reader.getString(1); + let length; + switch (type) { + case "C": + return reader.getBoolean(); + case "D": + return reader.getFloat64(); + case "F": + return reader.getFloat32(); + case "I": + return reader.getInt32(); + case "L": + return reader.getInt64(); + case "R": + length = reader.getUint32(); + return reader.getArrayBuffer(length); + case "S": + length = reader.getUint32(); + return reader.getString(length); + case "Y": + return reader.getInt16(); + case "b": + case "c": + case "d": + case "f": + case "i": + case "l": + const arrayLength = reader.getUint32(); + const encoding = reader.getUint32(); + const compressedLength = reader.getUint32(); + if (encoding === 0) { + switch (type) { + case "b": + case "c": + return reader.getBooleanArray(arrayLength); + case "d": + return reader.getFloat64Array(arrayLength); + case "f": + return reader.getFloat32Array(arrayLength); + case "i": + return reader.getInt32Array(arrayLength); + case "l": + return reader.getInt64Array(arrayLength); + } + } + const data = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))); + const reader2 = new BinaryReader(data.buffer); + switch (type) { + case "b": + case "c": + return reader2.getBooleanArray(arrayLength); + case "d": + return reader2.getFloat64Array(arrayLength); + case "f": + return reader2.getFloat32Array(arrayLength); + case "i": + return reader2.getInt32Array(arrayLength); + case "l": + return reader2.getInt64Array(arrayLength); + } + break; + default: + throw new Error("THREE.FBXLoader: Unknown property type " + type); + } + } +} +class BinaryReader { + static { + __name(this, "BinaryReader"); + } + constructor(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + this._textDecoder = new TextDecoder(); + } + getOffset() { + return this.offset; + } + size() { + return this.dv.buffer.byteLength; + } + skip(length) { + this.offset += length; + } + // seems like true/false representation depends on exporter. + // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54) + // then sees LSB. + getBoolean() { + return (this.getUint8() & 1) === 1; + } + getBooleanArray(size) { + const a = []; + for (let i = 0; i < size; i++) { + a.push(this.getBoolean()); + } + return a; + } + getUint8() { + const value = this.dv.getUint8(this.offset); + this.offset += 1; + return value; + } + getInt16() { + const value = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value; + } + getInt32() { + const value = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + getInt32Array(size) { + const a = []; + for (let i = 0; i < size; i++) { + a.push(this.getInt32()); + } + return a; + } + getUint32() { + const value = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + // JavaScript doesn't support 64-bit integer so calculate this here + // 1 << 32 will return 1 so using multiply operation instead here. + // There's a possibility that this method returns wrong value if the value + // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER. + // TODO: safely handle 64-bit integer + getInt64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + if (high & 2147483648) { + high = ~high & 4294967295; + low = ~low & 4294967295; + if (low === 4294967295) high = high + 1 & 4294967295; + low = low + 1 & 4294967295; + return -(high * 4294967296 + low); + } + return high * 4294967296 + low; + } + getInt64Array(size) { + const a = []; + for (let i = 0; i < size; i++) { + a.push(this.getInt64()); + } + return a; + } + // Note: see getInt64() comment + getUint64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + return high * 4294967296 + low; + } + getFloat32() { + const value = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + getFloat32Array(size) { + const a = []; + for (let i = 0; i < size; i++) { + a.push(this.getFloat32()); + } + return a; + } + getFloat64() { + const value = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value; + } + getFloat64Array(size) { + const a = []; + for (let i = 0; i < size; i++) { + a.push(this.getFloat64()); + } + return a; + } + getArrayBuffer(size) { + const value = this.dv.buffer.slice(this.offset, this.offset + size); + this.offset += size; + return value; + } + getString(size) { + const start = this.offset; + let a = new Uint8Array(this.dv.buffer, start, size); + this.skip(size); + const nullByte = a.indexOf(0); + if (nullByte >= 0) a = new Uint8Array(this.dv.buffer, start, nullByte); + return this._textDecoder.decode(a); + } +} +class FBXTree { + static { + __name(this, "FBXTree"); + } + add(key, val) { + this[key] = val; + } +} +function isFbxFormatBinary(buffer) { + const CORRECT = "Kaydara FBX Binary \0"; + return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length); +} +__name(isFbxFormatBinary, "isFbxFormatBinary"); +function isFbxFormatASCII(text) { + const CORRECT = ["K", "a", "y", "d", "a", "r", "a", "\\", "F", "B", "X", "\\", "B", "i", "n", "a", "r", "y", "\\", "\\"]; + let cursor = 0; + function read(offset) { + const result = text[offset - 1]; + text = text.slice(cursor + offset); + cursor++; + return result; + } + __name(read, "read"); + for (let i = 0; i < CORRECT.length; ++i) { + const num = read(1); + if (num === CORRECT[i]) { + return false; + } + } + return true; +} +__name(isFbxFormatASCII, "isFbxFormatASCII"); +function getFbxVersion(text) { + const versionRegExp = /FBXVersion: (\d+)/; + const match = text.match(versionRegExp); + if (match) { + const version = parseInt(match[1]); + return version; + } + throw new Error("THREE.FBXLoader: Cannot find the version number for the file given."); +} +__name(getFbxVersion, "getFbxVersion"); +function convertFBXTimeToSeconds(time) { + return time / 46186158e3; +} +__name(convertFBXTimeToSeconds, "convertFBXTimeToSeconds"); +const dataArray = []; +function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) { + let index; + switch (infoObject.mappingType) { + case "ByPolygonVertex": + index = polygonVertexIndex; + break; + case "ByPolygon": + index = polygonIndex; + break; + case "ByVertice": + index = vertexIndex; + break; + case "AllSame": + index = infoObject.indices[0]; + break; + default: + console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType); + } + if (infoObject.referenceType === "IndexToDirect") index = infoObject.indices[index]; + const from = index * infoObject.dataSize; + const to = from + infoObject.dataSize; + return slice(dataArray, infoObject.buffer, from, to); +} +__name(getData, "getData"); +const tempEuler = new Euler(); +const tempVec = new Vector3(); +function generateTransform(transformData) { + const lTranslationM = new Matrix4(); + const lPreRotationM = new Matrix4(); + const lRotationM = new Matrix4(); + const lPostRotationM = new Matrix4(); + const lScalingM = new Matrix4(); + const lScalingPivotM = new Matrix4(); + const lScalingOffsetM = new Matrix4(); + const lRotationOffsetM = new Matrix4(); + const lRotationPivotM = new Matrix4(); + const lParentGX = new Matrix4(); + const lParentLX = new Matrix4(); + const lGlobalT = new Matrix4(); + const inheritType = transformData.inheritType ? transformData.inheritType : 0; + if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation)); + const defaultEulerOrder = getEulerOrder(0); + if (transformData.preRotation) { + const array = transformData.preRotation.map(MathUtils.degToRad); + array.push(defaultEulerOrder); + lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.rotation) { + const array = transformData.rotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || defaultEulerOrder); + lRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.postRotation) { + const array = transformData.postRotation.map(MathUtils.degToRad); + array.push(defaultEulerOrder); + lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + lPostRotationM.invert(); + } + if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); + if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset)); + if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot)); + if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset)); + if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); + if (transformData.parentMatrixWorld) { + lParentLX.copy(transformData.parentMatrix); + lParentGX.copy(transformData.parentMatrixWorld); + } + const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); + const lParentGRM = new Matrix4(); + lParentGRM.extractRotation(lParentGX); + const lParentTM = new Matrix4(); + lParentTM.copyPosition(lParentGX); + const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX); + const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM); + const lLSM = lScalingM; + const lGlobalRS = new Matrix4(); + if (inheritType === 0) { + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM); + } else if (inheritType === 1) { + lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM); + } else { + const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX)); + const lParentLSM_inv = lParentLSM.clone().invert(); + const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv); + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM); + } + const lRotationPivotM_inv = lRotationPivotM.clone().invert(); + const lScalingPivotM_inv = lScalingPivotM.clone().invert(); + let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv); + const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform); + const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo); + lGlobalT.copyPosition(lGlobalTranslation); + lTransform = lGlobalT.clone().multiply(lGlobalRS); + lTransform.premultiply(lParentGX.invert()); + return lTransform; +} +__name(generateTransform, "generateTransform"); +function getEulerOrder(order) { + order = order || 0; + const enums = [ + "ZYX", + // -> XYZ extrinsic + "YZX", + // -> XZY extrinsic + "XZY", + // -> YZX extrinsic + "ZXY", + // -> YXZ extrinsic + "YXZ", + // -> ZXY extrinsic + "XYZ" + // -> ZYX extrinsic + //'SphericXYZ', // not possible to support + ]; + if (order === 6) { + console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."); + return enums[0]; + } + return enums[order]; +} +__name(getEulerOrder, "getEulerOrder"); +function parseNumberArray(value) { + const array = value.split(",").map(function(val) { + return parseFloat(val); + }); + return array; +} +__name(parseNumberArray, "parseNumberArray"); +function convertArrayBufferToString(buffer, from, to) { + if (from === void 0) from = 0; + if (to === void 0) to = buffer.byteLength; + return new TextDecoder().decode(new Uint8Array(buffer, from, to)); +} +__name(convertArrayBufferToString, "convertArrayBufferToString"); +function append(a, b) { + for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) { + a[j] = b[i]; + } +} +__name(append, "append"); +function slice(a, b, from, to) { + for (let i = from, j = 0; i < to; i++, j++) { + a[j] = b[i]; + } + return a; +} +__name(slice, "slice"); +class STLLoader extends Loader { + static { + __name(this, "STLLoader"); + } + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(text)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data) { + function isBinary(data2) { + const reader = new DataView(data2); + const face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8; + const n_faces = reader.getUint32(80, true); + const expect = 80 + 32 / 8 + n_faces * face_size; + if (expect === reader.byteLength) { + return true; + } + const solid = [115, 111, 108, 105, 100]; + for (let off = 0; off < 5; off++) { + if (matchDataViewAt(solid, reader, off)) return false; + } + return true; + } + __name(isBinary, "isBinary"); + function matchDataViewAt(query, reader, offset) { + for (let i = 0, il = query.length; i < il; i++) { + if (query[i] !== reader.getUint8(offset + i)) return false; + } + return true; + } + __name(matchDataViewAt, "matchDataViewAt"); + function parseBinary(data2) { + const reader = new DataView(data2); + const faces = reader.getUint32(80, true); + let r, g, b, hasColors = false, colors; + let defaultR, defaultG, defaultB, alpha; + for (let index = 0; index < 80 - 10; index++) { + if (reader.getUint32(index, false) == 1129270351 && reader.getUint8(index + 4) == 82 && reader.getUint8(index + 5) == 61) { + hasColors = true; + colors = new Float32Array(faces * 3 * 3); + defaultR = reader.getUint8(index + 6) / 255; + defaultG = reader.getUint8(index + 7) / 255; + defaultB = reader.getUint8(index + 8) / 255; + alpha = reader.getUint8(index + 9) / 255; + } + } + const dataOffset = 84; + const faceLength = 12 * 4 + 2; + const geometry = new BufferGeometry(); + const vertices = new Float32Array(faces * 3 * 3); + const normals = new Float32Array(faces * 3 * 3); + const color = new Color(); + for (let face = 0; face < faces; face++) { + const start = dataOffset + face * faceLength; + const normalX = reader.getFloat32(start, true); + const normalY = reader.getFloat32(start + 4, true); + const normalZ = reader.getFloat32(start + 8, true); + if (hasColors) { + const packedColor = reader.getUint16(start + 48, true); + if ((packedColor & 32768) === 0) { + r = (packedColor & 31) / 31; + g = (packedColor >> 5 & 31) / 31; + b = (packedColor >> 10 & 31) / 31; + } else { + r = defaultR; + g = defaultG; + b = defaultB; + } + } + for (let i = 1; i <= 3; i++) { + const vertexstart = start + i * 12; + const componentIdx = face * 3 * 3 + (i - 1) * 3; + vertices[componentIdx] = reader.getFloat32(vertexstart, true); + vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true); + vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true); + normals[componentIdx] = normalX; + normals[componentIdx + 1] = normalY; + normals[componentIdx + 2] = normalZ; + if (hasColors) { + color.setRGB(r, g, b, SRGBColorSpace); + colors[componentIdx] = color.r; + colors[componentIdx + 1] = color.g; + colors[componentIdx + 2] = color.b; + } + } + } + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new BufferAttribute(normals, 3)); + if (hasColors) { + geometry.setAttribute("color", new BufferAttribute(colors, 3)); + geometry.hasColors = true; + geometry.alpha = alpha; + } + return geometry; + } + __name(parseBinary, "parseBinary"); + function parseASCII(data2) { + const geometry = new BufferGeometry(); + const patternSolid = /solid([\s\S]*?)endsolid/g; + const patternFace = /facet([\s\S]*?)endfacet/g; + const patternName = /solid\s(.+)/; + let faceCounter = 0; + const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source; + const patternVertex = new RegExp("vertex" + patternFloat + patternFloat + patternFloat, "g"); + const patternNormal = new RegExp("normal" + patternFloat + patternFloat + patternFloat, "g"); + const vertices = []; + const normals = []; + const groupNames = []; + const normal = new Vector3(); + let result; + let groupCount = 0; + let startVertex = 0; + let endVertex = 0; + while ((result = patternSolid.exec(data2)) !== null) { + startVertex = endVertex; + const solid = result[0]; + const name = (result = patternName.exec(solid)) !== null ? result[1] : ""; + groupNames.push(name); + while ((result = patternFace.exec(solid)) !== null) { + let vertexCountPerFace = 0; + let normalCountPerFace = 0; + const text = result[0]; + while ((result = patternNormal.exec(text)) !== null) { + normal.x = parseFloat(result[1]); + normal.y = parseFloat(result[2]); + normal.z = parseFloat(result[3]); + normalCountPerFace++; + } + while ((result = patternVertex.exec(text)) !== null) { + vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])); + normals.push(normal.x, normal.y, normal.z); + vertexCountPerFace++; + endVertex++; + } + if (normalCountPerFace !== 1) { + console.error("THREE.STLLoader: Something isn't right with the normal of face number " + faceCounter); + } + if (vertexCountPerFace !== 3) { + console.error("THREE.STLLoader: Something isn't right with the vertices of face number " + faceCounter); + } + faceCounter++; + } + const start = startVertex; + const count = endVertex - startVertex; + geometry.userData.groupNames = groupNames; + geometry.addGroup(start, count, groupCount); + groupCount++; + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + return geometry; + } + __name(parseASCII, "parseASCII"); + function ensureString(buffer) { + if (typeof buffer !== "string") { + return new TextDecoder().decode(buffer); + } + return buffer; + } + __name(ensureString, "ensureString"); + function ensureBinary(buffer) { + if (typeof buffer === "string") { + const array_buffer = new Uint8Array(buffer.length); + for (let i = 0; i < buffer.length; i++) { + array_buffer[i] = buffer.charCodeAt(i) & 255; + } + return array_buffer.buffer || array_buffer; + } else { + return buffer; + } + } + __name(ensureBinary, "ensureBinary"); + const binData = ensureBinary(data); + return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data)); + } +} +async function uploadFile(load3d, file2, fileInput) { + let uploadPath; + try { + const body = new FormData(); + body.append("image", file2); + body.append("subfolder", "3d"); + const resp = await api.fetchApi("/upload/image", { + method: "POST", + body + }); + if (resp.status === 200) { + const data = await resp.json(); + let path = data.name; + if (data.subfolder) path = data.subfolder + "/" + path; + uploadPath = path; + const modelUrl = api.apiURL( + getResourceURL(...splitFilePath(path), "input") + ); + await load3d.loadModel(modelUrl, file2.name); + const fileExt = file2.name.split(".").pop()?.toLowerCase(); + if (fileExt === "obj" && fileInput?.files) { + try { + const mtlFile = Array.from(fileInput.files).find( + (f) => f.name.toLowerCase().endsWith(".mtl") + ); + if (mtlFile) { + const mtlFormData = new FormData(); + mtlFormData.append("image", mtlFile); + mtlFormData.append("subfolder", "3d"); + await api.fetchApi("/upload/image", { + method: "POST", + body: mtlFormData + }); + } + } catch (mtlError) { + console.warn("Failed to upload MTL file:", mtlError); + } + } + } else { + useToastStore().addAlert(resp.status + " - " + resp.statusText); + } + } catch (error) { + console.error("Upload error:", error); + useToastStore().addAlert( + error instanceof Error ? error.message : "Upload failed" + ); + } + return uploadPath; +} +__name(uploadFile, "uploadFile"); +class Load3d { + static { + __name(this, "Load3d"); + } + scene; + perspectiveCamera; + orthographicCamera; + activeCamera; + renderer; + controls; + gltfLoader; + objLoader; + mtlLoader; + fbxLoader; + stlLoader; + currentModel = null; + originalModel = null; + node; + animationFrameId = null; + gridHelper; + lights = []; + clock; + normalMaterial; + standardMaterial; + wireframeMaterial; + depthMaterial; + originalMaterials = /* @__PURE__ */ new WeakMap(); + materialMode = "original"; + currentUpDirection = "original"; + originalRotation = null; + constructor(container) { + this.scene = new Scene(); + this.perspectiveCamera = new PerspectiveCamera(75, 1, 0.1, 1e3); + this.perspectiveCamera.position.set(5, 5, 5); + const frustumSize = 10; + this.orthographicCamera = new OrthographicCamera( + -frustumSize / 2, + frustumSize / 2, + frustumSize / 2, + -frustumSize / 2, + 0.1, + 1e3 + ); + this.orthographicCamera.position.set(5, 5, 5); + this.activeCamera = this.perspectiveCamera; + this.perspectiveCamera.lookAt(0, 0, 0); + this.orthographicCamera.lookAt(0, 0, 0); + this.renderer = new WebGLRenderer({ antialias: true }); + this.renderer.setSize(300, 300); + this.renderer.setClearColor(2631720); + const rendererDomElement = this.renderer.domElement; + container.appendChild(rendererDomElement); + this.controls = new OrbitControls( + this.activeCamera, + this.renderer.domElement + ); + this.controls.enableDamping = true; + this.gltfLoader = new GLTFLoader(); + this.objLoader = new OBJLoader(); + this.mtlLoader = new MTLLoader(); + this.fbxLoader = new FBXLoader(); + this.stlLoader = new STLLoader(); + this.clock = new Clock(); + this.setupLights(); + this.gridHelper = new GridHelper(10, 10); + this.gridHelper.position.set(0, 0, 0); + this.scene.add(this.gridHelper); + this.normalMaterial = new MeshNormalMaterial({ + flatShading: false, + side: DoubleSide, + normalScale: new Vector2(1, 1), + transparent: false, + opacity: 1 + }); + this.wireframeMaterial = new MeshBasicMaterial({ + color: 16777215, + wireframe: true, + transparent: false, + opacity: 1 + }); + this.depthMaterial = new MeshDepthMaterial({ + depthPacking: BasicDepthPacking, + side: DoubleSide + }); + this.standardMaterial = this.createSTLMaterial(); + this.animate(); + this.handleResize(); + this.startAnimation(); + } + getCameraState() { + const currentType = this.getCurrentCameraType(); + return { + position: this.activeCamera.position.clone(), + target: this.controls.target.clone(), + zoom: this.activeCamera instanceof OrthographicCamera ? this.activeCamera.zoom : this.activeCamera.zoom, + cameraType: currentType + }; + } + setCameraState(state) { + if (this.activeCamera !== (state.cameraType === "perspective" ? this.perspectiveCamera : this.orthographicCamera)) { + this.toggleCamera(state.cameraType); + } + this.activeCamera.position.copy(state.position); + this.controls.target.copy(state.target); + if (this.activeCamera instanceof OrthographicCamera) { + this.activeCamera.zoom = state.zoom; + this.activeCamera.updateProjectionMatrix(); + } else if (this.activeCamera instanceof PerspectiveCamera) { + this.activeCamera.zoom = state.zoom; + this.activeCamera.updateProjectionMatrix(); + } + this.controls.update(); + } + setUpDirection(direction) { + if (!this.currentModel) return; + if (!this.originalRotation && this.currentModel.rotation) { + this.originalRotation = this.currentModel.rotation.clone(); + } + this.currentUpDirection = direction; + if (this.originalRotation) { + this.currentModel.rotation.copy(this.originalRotation); + } + switch (direction) { + case "original": + break; + case "-x": + this.currentModel.rotation.z = Math.PI / 2; + break; + case "+x": + this.currentModel.rotation.z = -Math.PI / 2; + break; + case "-y": + this.currentModel.rotation.x = Math.PI; + break; + case "+y": + break; + case "-z": + this.currentModel.rotation.x = Math.PI / 2; + break; + case "+z": + this.currentModel.rotation.x = -Math.PI / 2; + break; + } + this.renderer.render(this.scene, this.activeCamera); + } + setMaterialMode(mode) { + this.materialMode = mode; + if (this.currentModel) { + if (mode === "depth") { + this.renderer.outputColorSpace = LinearSRGBColorSpace; + } else { + this.renderer.outputColorSpace = SRGBColorSpace; + } + this.currentModel.traverse((child) => { + if (child instanceof Mesh) { + switch (mode) { + case "depth": + if (!this.originalMaterials.has(child)) { + this.originalMaterials.set(child, child.material); + } + const depthMat = new MeshDepthMaterial({ + depthPacking: BasicDepthPacking, + side: DoubleSide + }); + depthMat.onBeforeCompile = (shader) => { + shader.uniforms.cameraType = { + value: this.activeCamera instanceof OrthographicCamera ? 1 : 0 + }; + shader.fragmentShader = ` + uniform float cameraType; + ${shader.fragmentShader} + `; + shader.fragmentShader = shader.fragmentShader.replace( + /gl_FragColor\s*=\s*vec4\(\s*vec3\(\s*1.0\s*-\s*fragCoordZ\s*\)\s*,\s*opacity\s*\)\s*;/, + ` + float depth = 1.0 - fragCoordZ; + if (cameraType > 0.5) { + depth = pow(depth, 400.0); + } else { + depth = pow(depth, 0.6); + } + gl_FragColor = vec4(vec3(depth), opacity); + ` + ); + }; + depthMat.customProgramCacheKey = () => { + return this.activeCamera instanceof OrthographicCamera ? "ortho" : "persp"; + }; + child.material = depthMat; + break; + case "normal": + if (!this.originalMaterials.has(child)) { + this.originalMaterials.set(child, child.material); + } + child.material = new MeshNormalMaterial({ + flatShading: false, + side: DoubleSide, + normalScale: new Vector2(1, 1), + transparent: false, + opacity: 1 + }); + child.geometry.computeVertexNormals(); + break; + case "wireframe": + if (!this.originalMaterials.has(child)) { + this.originalMaterials.set(child, child.material); + } + child.material = new MeshBasicMaterial({ + color: 16777215, + wireframe: true, + transparent: false, + opacity: 1 + }); + break; + case "original": + const originalMaterial = this.originalMaterials.get(child); + if (originalMaterial) { + child.material = originalMaterial; + } else { + child.material = this.standardMaterial; + } + break; + } + } + }); + this.renderer.render(this.scene, this.activeCamera); + } + } + setupLights() { + const ambientLight = new AmbientLight(16777215, 0.5); + this.scene.add(ambientLight); + this.lights.push(ambientLight); + const mainLight = new DirectionalLight(16777215, 0.8); + mainLight.position.set(0, 10, 10); + this.scene.add(mainLight); + this.lights.push(mainLight); + const backLight = new DirectionalLight(16777215, 0.5); + backLight.position.set(0, 10, -10); + this.scene.add(backLight); + this.lights.push(backLight); + const leftFillLight = new DirectionalLight(16777215, 0.3); + leftFillLight.position.set(-10, 0, 0); + this.scene.add(leftFillLight); + this.lights.push(leftFillLight); + const rightFillLight = new DirectionalLight(16777215, 0.3); + rightFillLight.position.set(10, 0, 0); + this.scene.add(rightFillLight); + this.lights.push(rightFillLight); + const bottomLight = new DirectionalLight(16777215, 0.2); + bottomLight.position.set(0, -10, 0); + this.scene.add(bottomLight); + this.lights.push(bottomLight); + } + toggleCamera(cameraType) { + const oldCamera = this.activeCamera; + const position = oldCamera.position.clone(); + const rotation = oldCamera.rotation.clone(); + const target = this.controls.target.clone(); + if (!cameraType) { + this.activeCamera = oldCamera === this.perspectiveCamera ? this.orthographicCamera : this.perspectiveCamera; + } else { + this.activeCamera = cameraType === "perspective" ? this.perspectiveCamera : this.orthographicCamera; + if (oldCamera === this.activeCamera) { + return; + } + } + this.activeCamera.position.copy(position); + this.activeCamera.rotation.copy(rotation); + if (this.materialMode === "depth" && oldCamera !== this.activeCamera) { + this.setMaterialMode("depth"); + } + this.controls.object = this.activeCamera; + this.controls.target.copy(target); + this.controls.update(); + this.handleResize(); + } + getCurrentCameraType() { + return this.activeCamera === this.perspectiveCamera ? "perspective" : "orthographic"; + } + toggleGrid(showGrid) { + if (this.gridHelper) { + this.gridHelper.visible = showGrid; + } + } + setLightIntensity(intensity) { + this.lights.forEach((light) => { + if (light instanceof DirectionalLight) { + if (light === this.lights[1]) { + light.intensity = intensity * 0.8; + } else if (light === this.lights[2]) { + light.intensity = intensity * 0.5; + } else if (light === this.lights[5]) { + light.intensity = intensity * 0.2; + } else { + light.intensity = intensity * 0.3; + } + } else if (light instanceof AmbientLight) { + light.intensity = intensity * 0.5; + } + }); + } + startAnimation() { + const animate = /* @__PURE__ */ __name(() => { + this.animationFrameId = requestAnimationFrame(animate); + this.controls.update(); + this.renderer.render(this.scene, this.activeCamera); + }, "animate"); + animate(); + } + clearModel() { + const objectsToRemove = []; + this.scene.traverse((object) => { + const isEnvironmentObject = object === this.gridHelper || this.lights.includes(object) || object === this.perspectiveCamera || object === this.orthographicCamera; + if (!isEnvironmentObject) { + objectsToRemove.push(object); + } + }); + objectsToRemove.forEach((obj) => { + if (obj.parent && obj.parent !== this.scene) { + obj.parent.remove(obj); + } else { + this.scene.remove(obj); + } + if (obj instanceof Mesh) { + obj.geometry?.dispose(); + if (Array.isArray(obj.material)) { + obj.material.forEach((material) => material.dispose()); + } else { + obj.material?.dispose(); + } + } + }); + this.resetScene(); + } + resetScene() { + this.currentModel = null; + this.originalRotation = null; + const defaultDistance = 10; + this.perspectiveCamera.position.set( + defaultDistance, + defaultDistance, + defaultDistance + ); + this.orthographicCamera.position.set( + defaultDistance, + defaultDistance, + defaultDistance + ); + this.perspectiveCamera.lookAt(0, 0, 0); + this.orthographicCamera.lookAt(0, 0, 0); + const frustumSize = 10; + const aspect2 = this.renderer.domElement.width / this.renderer.domElement.height; + this.orthographicCamera.left = -frustumSize * aspect2 / 2; + this.orthographicCamera.right = frustumSize * aspect2 / 2; + this.orthographicCamera.top = frustumSize / 2; + this.orthographicCamera.bottom = -frustumSize / 2; + this.perspectiveCamera.updateProjectionMatrix(); + this.orthographicCamera.updateProjectionMatrix(); + this.controls.target.set(0, 0, 0); + this.controls.update(); + this.renderer.render(this.scene, this.activeCamera); + this.materialMode = "original"; + this.originalMaterials = /* @__PURE__ */ new WeakMap(); + this.renderer.outputColorSpace = SRGBColorSpace; + } + remove() { + if (this.animationFrameId !== null) { + cancelAnimationFrame(this.animationFrameId); + } + this.controls.dispose(); + this.renderer.dispose(); + this.renderer.domElement.remove(); + this.scene.clear(); + } + async loadModelInternal(url, fileExtension) { + let model = null; + switch (fileExtension) { + case "stl": + const geometry = await this.stlLoader.loadAsync(url); + this.originalModel = geometry; + geometry.computeVertexNormals(); + const mesh = new Mesh(geometry, this.standardMaterial); + const group = new Group(); + group.add(mesh); + model = group; + break; + case "fbx": + const fbxModel = await this.fbxLoader.loadAsync(url); + this.originalModel = fbxModel; + model = fbxModel; + fbxModel.traverse((child) => { + if (child instanceof Mesh) { + this.originalMaterials.set(child, child.material); + } + }); + break; + case "obj": + if (this.materialMode === "original") { + const mtlUrl = url.replace(/\.obj([^.]*$)/, ".mtl$1"); + try { + const materials = await this.mtlLoader.loadAsync(mtlUrl); + materials.preload(); + this.objLoader.setMaterials(materials); + } catch (e) { + console.log( + "No MTL file found or error loading it, continuing without materials" + ); + } + } + model = await this.objLoader.loadAsync(url); + model.traverse((child) => { + if (child instanceof Mesh) { + this.originalMaterials.set(child, child.material); + } + }); + break; + case "gltf": + case "glb": + const gltf = await this.gltfLoader.loadAsync(url); + this.originalModel = gltf; + model = gltf.scene; + gltf.scene.traverse((child) => { + if (child instanceof Mesh) { + child.geometry.computeVertexNormals(); + this.originalMaterials.set(child, child.material); + } + }); + break; + } + return model; + } + async loadModel(url, originalFileName) { + try { + this.clearModel(); + let fileExtension; + if (originalFileName) { + fileExtension = originalFileName.split(".").pop()?.toLowerCase(); + } else { + const filename = new URLSearchParams(url.split("?")[1]).get("filename"); + fileExtension = filename?.split(".").pop()?.toLowerCase(); + } + if (!fileExtension) { + useToastStore().addAlert("Could not determine file type"); + return; + } + let model = await this.loadModelInternal(url, fileExtension); + if (model) { + this.currentModel = model; + await this.setupModel(model); + } + } catch (error) { + console.error("Error loading model:", error); + } + } + async setupModel(model) { + const box = new Box3().setFromObject(model); + const size = box.getSize(new Vector3()); + const center = box.getCenter(new Vector3()); + const maxDim = Math.max(size.x, size.y, size.z); + const targetSize = 5; + const scale = targetSize / maxDim; + model.scale.multiplyScalar(scale); + box.setFromObject(model); + box.getCenter(center); + box.getSize(size); + model.position.set(-center.x, -box.min.y, -center.z); + this.scene.add(model); + if (this.materialMode !== "original") { + this.setMaterialMode(this.materialMode); + } + if (this.currentUpDirection !== "original") { + this.setUpDirection(this.currentUpDirection); + } + await this.setupCamera(size); + } + async setupCamera(size) { + const distance = Math.max(size.x, size.z) * 2; + const height = size.y * 2; + this.perspectiveCamera.position.set(distance, height, distance); + this.orthographicCamera.position.set(distance, height, distance); + if (this.activeCamera === this.perspectiveCamera) { + this.perspectiveCamera.lookAt(0, size.y / 2, 0); + this.perspectiveCamera.updateProjectionMatrix(); + } else { + const frustumSize = Math.max(size.x, size.y, size.z) * 2; + const aspect2 = this.renderer.domElement.width / this.renderer.domElement.height; + this.orthographicCamera.left = -frustumSize * aspect2 / 2; + this.orthographicCamera.right = frustumSize * aspect2 / 2; + this.orthographicCamera.top = frustumSize / 2; + this.orthographicCamera.bottom = -frustumSize / 2; + this.orthographicCamera.lookAt(0, size.y / 2, 0); + this.orthographicCamera.updateProjectionMatrix(); + } + this.controls.target.set(0, size.y / 2, 0); + this.controls.update(); + this.renderer.outputColorSpace = SRGBColorSpace; + this.renderer.toneMapping = ACESFilmicToneMapping; + this.renderer.toneMappingExposure = 1; + this.handleResize(); + } + handleResize() { + const parentElement = this.renderer?.domElement?.parentElement; + if (!parentElement) { + console.warn("Parent element not found"); + return; + } + const width = parentElement?.clientWidth; + const height = parentElement?.clientHeight; + if (this.activeCamera === this.perspectiveCamera) { + this.perspectiveCamera.aspect = width / height; + this.perspectiveCamera.updateProjectionMatrix(); + } else { + const frustumSize = 10; + const aspect2 = width / height; + this.orthographicCamera.left = -frustumSize * aspect2 / 2; + this.orthographicCamera.right = frustumSize * aspect2 / 2; + this.orthographicCamera.top = frustumSize / 2; + this.orthographicCamera.bottom = -frustumSize / 2; + this.orthographicCamera.updateProjectionMatrix(); + } + this.renderer.setSize(width, height); + } + animate = /* @__PURE__ */ __name(() => { + requestAnimationFrame(this.animate); + this.controls.update(); + this.renderer.render(this.scene, this.activeCamera); + }, "animate"); + captureScene(width, height) { + return new Promise((resolve, reject) => { + try { + const originalWidth = this.renderer.domElement.width; + const originalHeight = this.renderer.domElement.height; + this.renderer.setSize(width, height); + if (this.activeCamera === this.perspectiveCamera) { + this.perspectiveCamera.aspect = width / height; + this.perspectiveCamera.updateProjectionMatrix(); + } else { + const frustumSize = 10; + const aspect2 = width / height; + this.orthographicCamera.left = -frustumSize * aspect2 / 2; + this.orthographicCamera.right = frustumSize * aspect2 / 2; + this.orthographicCamera.top = frustumSize / 2; + this.orthographicCamera.bottom = -frustumSize / 2; + this.orthographicCamera.updateProjectionMatrix(); + } + this.renderer.render(this.scene, this.activeCamera); + const imageData = this.renderer.domElement.toDataURL("image/png"); + this.renderer.setSize(originalWidth, originalHeight); + this.handleResize(); + resolve(imageData); + } catch (error) { + reject(error); + } + }); + } + createSTLMaterial() { + return new MeshStandardMaterial({ + color: 8421504, + metalness: 0.1, + roughness: 0.8, + flatShading: false, + side: DoubleSide + }); + } + setViewPosition(position) { + if (!this.currentModel) { + return; + } + const box = new Box3(); + let center = new Vector3(); + let size = new Vector3(); + if (this.currentModel) { + box.setFromObject(this.currentModel); + box.getCenter(center); + box.getSize(size); + } + const maxDim = Math.max(size.x, size.y, size.z); + const distance = maxDim * 2; + switch (position) { + case "front": + this.activeCamera.position.set(0, 0, distance); + break; + case "top": + this.activeCamera.position.set(0, distance, 0); + break; + case "right": + this.activeCamera.position.set(distance, 0, 0); + break; + case "isometric": + this.activeCamera.position.set(distance, distance, distance); + break; + } + this.activeCamera.lookAt(center); + this.controls.target.copy(center); + this.controls.update(); + } + setBackgroundColor(color) { + this.renderer.setClearColor(new Color(color)); + this.renderer.render(this.scene, this.activeCamera); + } +} +class Load3dAnimation extends Load3d { + static { + __name(this, "Load3dAnimation"); + } + currentAnimation = null; + animationActions = []; + animationClips = []; + selectedAnimationIndex = 0; + isAnimationPlaying = false; + animationSpeed = 1; + constructor(container) { + super(container); + } + async setupModel(model) { + await super.setupModel(model); + if (this.currentAnimation) { + this.currentAnimation.stopAllAction(); + this.animationActions = []; + } + let animations = []; + if (model.animations?.length > 0) { + animations = model.animations; + } else if (this.originalModel && "animations" in this.originalModel) { + animations = this.originalModel.animations; + } + if (animations.length > 0) { + this.animationClips = animations; + if (model.type === "Scene") { + this.currentAnimation = new AnimationMixer(model); + } else { + this.currentAnimation = new AnimationMixer(this.currentModel); + } + if (this.animationClips.length > 0) { + this.updateSelectedAnimation(0); + } + } + } + setAnimationSpeed(speed) { + this.animationSpeed = speed; + this.animationActions.forEach((action) => { + action.setEffectiveTimeScale(speed); + }); + } + updateSelectedAnimation(index) { + if (!this.currentAnimation || !this.animationClips || index >= this.animationClips.length) { + console.warn("Invalid animation update request"); + return; + } + this.animationActions.forEach((action2) => { + action2.stop(); + }); + this.currentAnimation.stopAllAction(); + this.animationActions = []; + this.selectedAnimationIndex = index; + const clip = this.animationClips[index]; + const action = this.currentAnimation.clipAction(clip); + action.setEffectiveTimeScale(this.animationSpeed); + action.reset(); + action.clampWhenFinished = false; + action.loop = LoopRepeat; + if (this.isAnimationPlaying) { + action.play(); + } else { + action.play(); + action.paused = true; + } + this.animationActions = [action]; + } + clearModel() { + if (this.currentAnimation) { + this.animationActions.forEach((action) => { + action.stop(); + }); + this.currentAnimation = null; + } + this.animationActions = []; + this.animationClips = []; + this.selectedAnimationIndex = 0; + this.isAnimationPlaying = false; + this.animationSpeed = 1; + super.clearModel(); + } + getAnimationNames() { + return this.animationClips.map((clip, index) => { + return clip.name || `Animation ${index + 1}`; + }); + } + toggleAnimation(play) { + if (!this.currentAnimation || this.animationActions.length === 0) { + console.warn("No animation to toggle"); + return; + } + this.isAnimationPlaying = play ?? !this.isAnimationPlaying; + this.animationActions.forEach((action) => { + if (this.isAnimationPlaying) { + action.paused = false; + if (action.time === 0 || action.time === action.getClip().duration) { + action.reset(); + } + } else { + action.paused = true; + } + }); + } + animate = /* @__PURE__ */ __name(() => { + requestAnimationFrame(this.animate); + if (this.currentAnimation && this.isAnimationPlaying) { + const delta = this.clock.getDelta(); + this.currentAnimation.update(delta); + } + this.controls.update(); + this.renderer.render(this.scene, this.activeCamera); + }, "animate"); +} +function splitFilePath(path) { + const folder_separator = path.lastIndexOf("/"); + if (folder_separator === -1) { + return ["", path]; + } + return [ + path.substring(0, folder_separator), + path.substring(folder_separator + 1) + ]; +} +__name(splitFilePath, "splitFilePath"); +function getResourceURL(subfolder, filename, type = "input") { + const params = [ + "filename=" + encodeURIComponent(filename), + "type=" + type, + "subfolder=" + subfolder, + app.getRandParam().substring(1) + ].join("&"); + return `/view?${params}`; +} +__name(getResourceURL, "getResourceURL"); +const load3dCSSCLASS = `display: flex; + flex-direction: column; + background: transparent; + flex: 1; + position: relative; + overflow: hidden;`; +const load3dCanvasCSSCLASS = `display: flex; + width: 100% !important; + height: 100% !important;`; +const containerToLoad3D = /* @__PURE__ */ new Map(); +function configureLoad3D(load3d, loadFolder, modelWidget, showGrid, cameraType, view, material, bgColor, lightIntensity, upDirection, cameraState, postModelUpdateFunc) { + const createModelUpdateHandler = /* @__PURE__ */ __name(() => { + let isFirstLoad = true; + return async (value) => { + if (!value) return; + const filename = value; + const modelUrl = api.apiURL( + getResourceURL(...splitFilePath(filename), loadFolder) + ); + await load3d.loadModel(modelUrl, filename); + load3d.setMaterialMode( + material.value + ); + load3d.setUpDirection( + upDirection.value + ); + if (postModelUpdateFunc) { + postModelUpdateFunc(load3d); + } + if (isFirstLoad && cameraState && typeof cameraState === "object") { + try { + load3d.setCameraState(cameraState); + } catch (error) { + console.warn("Failed to restore camera state:", error); + } + isFirstLoad = false; + } + }; + }, "createModelUpdateHandler"); + const onModelWidgetUpdate = createModelUpdateHandler(); + if (modelWidget.value) { + onModelWidgetUpdate(modelWidget.value); + } + modelWidget.callback = onModelWidgetUpdate; + load3d.toggleGrid(showGrid.value); + showGrid.callback = (value) => { + load3d.toggleGrid(value); + }; + load3d.toggleCamera(cameraType.value); + cameraType.callback = (value) => { + load3d.toggleCamera(value); + }; + view.callback = (value) => { + load3d.setViewPosition(value); + }; + material.callback = (value) => { + load3d.setMaterialMode(value); + }; + load3d.setMaterialMode(material.value); + load3d.setBackgroundColor(bgColor.value); + bgColor.callback = (value) => { + load3d.setBackgroundColor(value); + }; + load3d.setLightIntensity(lightIntensity.value); + lightIntensity.callback = (value) => { + load3d.setLightIntensity(value); + }; + upDirection.callback = (value) => { + load3d.setUpDirection(value); + }; + load3d.setUpDirection( + upDirection.value + ); +} +__name(configureLoad3D, "configureLoad3D"); +app.registerExtension({ + name: "Comfy.Load3D", + getCustomWidgets(app2) { + return { + LOAD_3D(node, inputName) { + let load3dNode = app2.graph._nodes.filter((wi) => wi.type == "Load3D"); + node.addProperty("Camera Info", ""); + const container = document.createElement("div"); + container.id = `comfy-load-3d-${load3dNode.length}`; + container.classList.add("comfy-load-3d"); + const load3d = new Load3d(container); + containerToLoad3D.set(container.id, load3d); + node.onResize = function() { + if (load3d) { + load3d.handleResize(); + } + }; + const origOnRemoved = node.onRemoved; + node.onRemoved = function() { + if (load3d) { + load3d.remove(); + } + containerToLoad3D.delete(container.id); + origOnRemoved?.apply(this, []); + }; + node.onDrawBackground = function() { + load3d.renderer.domElement.hidden = this.flags.collapsed ?? false; + }; + const fileInput = document.createElement("input"); + fileInput.type = "file"; + fileInput.accept = ".gltf,.glb,.obj,.mtl,.fbx,.stl"; + fileInput.style.display = "none"; + fileInput.onchange = async () => { + if (fileInput.files?.length) { + const modelWidget = node.widgets?.find( + (w) => w.name === "model_file" + ); + const uploadPath = await uploadFile( + load3d, + fileInput.files[0], + fileInput + ).catch((error) => { + console.error("File upload failed:", error); + useToastStore().addAlert("File upload failed"); + }); + if (uploadPath && modelWidget) { + if (!modelWidget.options?.values?.includes(uploadPath)) { + modelWidget.options?.values?.push(uploadPath); + } + modelWidget.value = uploadPath; + } + } + }; + node.addWidget("button", "upload 3d model", "upload3dmodel", () => { + fileInput.click(); + }); + node.addWidget("button", "clear", "clear", () => { + load3d.clearModel(); + const modelWidget = node.widgets?.find( + (w) => w.name === "model_file" + ); + if (modelWidget) { + modelWidget.value = ""; + } + }); + return { + widget: node.addDOMWidget(inputName, "LOAD_3D", container) + }; + } + }; + }, + init() { + const style = document.createElement("style"); + style.innerText = ` + .comfy-load-3d { + ${load3dCSSCLASS} + } + + .comfy-load-3d canvas { + ${load3dCanvasCSSCLASS} + } + `; + document.head.appendChild(style); + }, + async nodeCreated(node) { + if (node.constructor.comfyClass !== "Load3D") return; + const [oldWidth, oldHeight] = node.size; + node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 600)]); + await nextTick(); + const sceneWidget = node.widgets.find((w2) => w2.name === "image"); + const container = sceneWidget.element; + const load3d = containerToLoad3D.get(container.id); + const modelWidget = node.widgets.find( + (w2) => w2.name === "model_file" + ); + const showGrid = node.widgets.find((w2) => w2.name === "show_grid"); + const cameraType = node.widgets.find( + (w2) => w2.name === "camera_type" + ); + const view = node.widgets.find((w2) => w2.name === "view"); + const material = node.widgets.find((w2) => w2.name === "material"); + const bgColor = node.widgets.find((w2) => w2.name === "bg_color"); + const lightIntensity = node.widgets.find( + (w2) => w2.name === "light_intensity" + ); + const upDirection = node.widgets.find( + (w2) => w2.name === "up_direction" + ); + let cameraState; + try { + const cameraInfo = node.properties["Camera Info"]; + if (cameraInfo && typeof cameraInfo === "string" && cameraInfo.trim() !== "") { + cameraState = JSON.parse(cameraInfo); + } + } catch (error) { + console.warn("Failed to parse camera state:", error); + cameraState = void 0; + } + configureLoad3D( + load3d, + "input", + modelWidget, + showGrid, + cameraType, + view, + material, + bgColor, + lightIntensity, + upDirection, + cameraState + ); + const w = node.widgets.find((w2) => w2.name === "width"); + const h = node.widgets.find((w2) => w2.name === "height"); + sceneWidget.serializeValue = async () => { + node.properties["Camera Info"] = JSON.stringify(load3d.getCameraState()); + const imageData = await load3d.captureScene(w.value, h.value); + const blob = await fetch(imageData).then((r) => r.blob()); + const name = `scene_${Date.now()}.png`; + const file2 = new File([blob], name); + const body = new FormData(); + body.append("image", file2); + body.append("subfolder", "threed"); + body.append("type", "temp"); + const resp = await api.fetchApi("/upload/image", { + method: "POST", + body + }); + if (resp.status !== 200) { + const err2 = `Error uploading scene capture: ${resp.status} - ${resp.statusText}`; + useToastStore().addAlert(err2); + throw new Error(err2); + } + const data = await resp.json(); + return `threed/${data.name} [temp]`; + }; + } +}); +app.registerExtension({ + name: "Comfy.Load3DAnimation", + getCustomWidgets(app2) { + return { + LOAD_3D_ANIMATION(node, inputName) { + let load3dNode = app2.graph._nodes.filter( + (wi) => wi.type == "Load3DAnimation" + ); + node.addProperty("Camera Info", ""); + const container = document.createElement("div"); + container.id = `comfy-load-3d-animation-${load3dNode.length}`; + container.classList.add("comfy-load-3d-animation"); + const load3d = new Load3dAnimation(container); + containerToLoad3D.set(container.id, load3d); + node.onResize = function() { + if (load3d) { + load3d.handleResize(); + } + }; + const origOnRemoved = node.onRemoved; + node.onRemoved = function() { + if (load3d) { + load3d.remove(); + } + containerToLoad3D.delete(container.id); + origOnRemoved?.apply(this, []); + }; + node.onDrawBackground = function() { + load3d.renderer.domElement.hidden = this.flags.collapsed ?? false; + }; + const fileInput = document.createElement("input"); + fileInput.type = "file"; + fileInput.accept = ".fbx,glb,gltf"; + fileInput.style.display = "none"; + fileInput.onchange = async () => { + if (fileInput.files?.length) { + const modelWidget = node.widgets?.find( + (w) => w.name === "model_file" + ); + const uploadPath = await uploadFile( + load3d, + fileInput.files[0], + fileInput + ).catch((error) => { + console.error("File upload failed:", error); + useToastStore().addAlert("File upload failed"); + }); + if (uploadPath && modelWidget) { + if (!modelWidget.options?.values?.includes(uploadPath)) { + modelWidget.options?.values?.push(uploadPath); + } + modelWidget.value = uploadPath; + } + } + }; + node.addWidget("button", "upload 3d model", "upload3dmodel", () => { + fileInput.click(); + }); + node.addWidget("button", "clear", "clear", () => { + load3d.clearModel(); + const modelWidget = node.widgets?.find( + (w) => w.name === "model_file" + ); + if (modelWidget) { + modelWidget.value = ""; + } + const animationSelect2 = node.widgets?.find( + (w) => w.name === "animation" + ); + if (animationSelect2) { + animationSelect2.options.values = []; + animationSelect2.value = ""; + } + const speedSelect = node.widgets?.find( + (w) => w.name === "animation_speed" + ); + if (speedSelect) { + speedSelect.value = "1"; + } + }); + node.addWidget( + "button", + "Play/Pause Animation", + "toggle_animation", + () => { + load3d.toggleAnimation(); + } + ); + const animationSelect = node.addWidget( + "combo", + "animation", + "", + () => "", + { + values: [] + } + ); + animationSelect.callback = (value) => { + const names = load3d.getAnimationNames(); + const index = names.indexOf(value); + if (index !== -1) { + const wasPlaying = load3d.isAnimationPlaying; + if (wasPlaying) { + load3d.toggleAnimation(false); + } + load3d.updateSelectedAnimation(index); + if (wasPlaying) { + load3d.toggleAnimation(true); + } + } + }; + return { + widget: node.addDOMWidget(inputName, "LOAD_3D_ANIMATION", container) + }; + } + }; + }, + init() { + const style = document.createElement("style"); + style.innerText = ` + .comfy-load-3d-animation { + ${load3dCSSCLASS} + } + + .comfy-load-3d-animation canvas { + ${load3dCanvasCSSCLASS} + } + `; + document.head.appendChild(style); + }, + async nodeCreated(node) { + if (node.constructor.comfyClass !== "Load3DAnimation") return; + const [oldWidth, oldHeight] = node.size; + node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 700)]); + await nextTick(); + const sceneWidget = node.widgets.find((w2) => w2.name === "image"); + const container = sceneWidget.element; + const load3d = containerToLoad3D.get(container.id); + const modelWidget = node.widgets.find( + (w2) => w2.name === "model_file" + ); + const showGrid = node.widgets.find((w2) => w2.name === "show_grid"); + const cameraType = node.widgets.find( + (w2) => w2.name === "camera_type" + ); + const view = node.widgets.find((w2) => w2.name === "view"); + const material = node.widgets.find((w2) => w2.name === "material"); + const bgColor = node.widgets.find((w2) => w2.name === "bg_color"); + const lightIntensity = node.widgets.find( + (w2) => w2.name === "light_intensity" + ); + const upDirection = node.widgets.find( + (w2) => w2.name === "up_direction" + ); + const speedSelect = node.widgets.find( + (w2) => w2.name === "animation_speed" + ); + speedSelect.callback = (value) => { + const load3d2 = containerToLoad3D.get(container.id); + if (load3d2) { + load3d2.setAnimationSpeed(parseFloat(value)); + } + }; + let cameraState; + try { + const cameraInfo = node.properties["Camera Info"]; + if (cameraInfo && typeof cameraInfo === "string" && cameraInfo.trim() !== "") { + cameraState = JSON.parse(cameraInfo); + } + } catch (error) { + console.warn("Failed to parse camera state:", error); + cameraState = void 0; + } + configureLoad3D( + load3d, + "input", + modelWidget, + showGrid, + cameraType, + view, + material, + bgColor, + lightIntensity, + upDirection, + cameraState, + (load3d2) => { + const animationLoad3d = load3d2; + const names = animationLoad3d.getAnimationNames(); + const animationSelect = node.widgets.find( + (w2) => w2.name === "animation" + ); + animationSelect.options.values = names; + if (names.length) { + animationSelect.value = names[0]; + } + } + ); + const w = node.widgets.find((w2) => w2.name === "width"); + const h = node.widgets.find((w2) => w2.name === "height"); + sceneWidget.serializeValue = async () => { + node.properties["Camera Info"] = JSON.stringify(load3d.getCameraState()); + load3d.toggleAnimation(false); + const imageData = await load3d.captureScene(w.value, h.value); + const blob = await fetch(imageData).then((r) => r.blob()); + const name = `scene_${Date.now()}.png`; + const file2 = new File([blob], name); + const body = new FormData(); + body.append("image", file2); + body.append("subfolder", "threed"); + body.append("type", "temp"); + const resp = await api.fetchApi("/upload/image", { + method: "POST", + body + }); + if (resp.status !== 200) { + const err2 = `Error uploading scene capture: ${resp.status} - ${resp.statusText}`; + useToastStore().addAlert(err2); + throw new Error(err2); + } + const data = await resp.json(); + return `threed/${data.name} [temp]`; + }; + } +}); +app.registerExtension({ + name: "Comfy.Preview3D", + getCustomWidgets(app2) { + return { + PREVIEW_3D(node, inputName) { + let load3dNode = app2.graph._nodes.filter((wi) => wi.type == "Preview3D"); + const container = document.createElement("div"); + container.id = `comfy-preview-3d-${load3dNode.length}`; + container.classList.add("comfy-preview-3d"); + const load3d = new Load3d(container); + containerToLoad3D.set(container.id, load3d); + node.onResize = function() { + if (load3d) { + load3d.handleResize(); + } + }; + const origOnRemoved = node.onRemoved; + node.onRemoved = function() { + if (load3d) { + load3d.remove(); + } + containerToLoad3D.delete(container.id); + origOnRemoved?.apply(this, []); + }; + node.onDrawBackground = function() { + load3d.renderer.domElement.hidden = this.flags.collapsed ?? false; + }; + return { + widget: node.addDOMWidget(inputName, "PREVIEW_3D", container) + }; + } + }; + }, + init() { + const style = document.createElement("style"); + style.innerText = ` + .comfy-preview-3d { + ${load3dCSSCLASS} + } + + .comfy-preview-3d canvas { + ${load3dCanvasCSSCLASS} + } + `; + document.head.appendChild(style); + }, + async nodeCreated(node) { + if (node.constructor.comfyClass !== "Preview3D") return; + const [oldWidth, oldHeight] = node.size; + node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 550)]); + await nextTick(); + const sceneWidget = node.widgets.find((w) => w.name === "image"); + const container = sceneWidget.element; + const load3d = containerToLoad3D.get(container.id); + const modelWidget = node.widgets.find( + (w) => w.name === "model_file" + ); + const showGrid = node.widgets.find((w) => w.name === "show_grid"); + const cameraType = node.widgets.find( + (w) => w.name === "camera_type" + ); + const view = node.widgets.find((w) => w.name === "view"); + const material = node.widgets.find((w) => w.name === "material"); + const bgColor = node.widgets.find((w) => w.name === "bg_color"); + const lightIntensity = node.widgets.find( + (w) => w.name === "light_intensity" + ); + const upDirection = node.widgets.find( + (w) => w.name === "up_direction" + ); + configureLoad3D( + load3d, + "output", + modelWidget, + showGrid, + cameraType, + view, + material, + bgColor, + lightIntensity, + upDirection + ); + } +}); +//# sourceMappingURL=index-BNMdgttb.js.map diff --git a/web/assets/index-BNMdgttb.js.map b/web/assets/index-BNMdgttb.js.map new file mode 100644 index 000000000..f86e825dc --- /dev/null +++ b/web/assets/index-BNMdgttb.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-BNMdgttb.js","sources":["../../src/extensions/core/clipspace.ts","../../src/extensions/core/contextMenuFilter.ts","../../src/extensions/core/dynamicPrompts.ts","../../src/extensions/core/editAttention.ts","../../src/extensions/core/groupNodeManage.ts","../../src/extensions/core/groupNode.ts","../../src/extensions/core/groupOptions.ts","../../src/extensions/core/invertMenuScrolling.ts","../../src/extensions/core/keybinds.ts","../../src/extensions/core/maskEditorOld.ts","../../src/extensions/core/maskeditor.ts","../../src/extensions/core/nodeTemplates.ts","../../src/extensions/core/noteNode.ts","../../src/extensions/core/rerouteNode.ts","../../src/extensions/core/saveImageExtraOutput.ts","../../src/extensions/core/simpleTouchSupport.ts","../../src/extensions/core/slotDefaults.ts","../../src/extensions/core/uploadImage.ts","../../src/extensions/core/webcamCapture.ts","../../src/extensions/core/uploadAudio.ts","../../src/extensions/core/electronAdapter.ts","../../node_modules/three/build/three.module.js","../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../../node_modules/three/examples/jsm/loaders/GLTFLoader.js","../../node_modules/three/examples/jsm/loaders/OBJLoader.js","../../node_modules/three/examples/jsm/loaders/MTLLoader.js","../../node_modules/three/examples/jsm/libs/fflate.module.js","../../node_modules/three/examples/jsm/curves/NURBSUtils.js","../../node_modules/three/examples/jsm/curves/NURBSCurve.js","../../node_modules/three/examples/jsm/loaders/FBXLoader.js","../../node_modules/three/examples/jsm/loaders/STLLoader.js","../../src/extensions/core/load3d.ts"],"sourcesContent":["import { app } from '../../scripts/app'\nimport { ComfyDialog, $el } from '../../scripts/ui'\nimport { ComfyApp } from '../../scripts/app'\n\nexport class ClipspaceDialog extends ComfyDialog {\n static items: Array<\n HTMLButtonElement & {\n contextPredicate?: () => boolean\n }\n > = []\n static instance: ClipspaceDialog | null = null\n\n static registerButton(\n name: string,\n contextPredicate: () => boolean,\n callback: () => void\n ) {\n const item = $el('button', {\n type: 'button',\n textContent: name,\n contextPredicate: contextPredicate,\n onclick: callback\n })\n\n ClipspaceDialog.items.push(item)\n }\n\n static invalidatePreview() {\n if (\n ComfyApp.clipspace &&\n ComfyApp.clipspace.imgs &&\n ComfyApp.clipspace.imgs.length > 0\n ) {\n const img_preview = document.getElementById(\n 'clipspace_preview'\n ) as HTMLImageElement\n if (img_preview) {\n img_preview.src =\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src\n img_preview.style.maxHeight = '100%'\n img_preview.style.maxWidth = '100%'\n }\n }\n }\n\n static invalidate() {\n if (ClipspaceDialog.instance) {\n const self = ClipspaceDialog.instance\n // allow reconstruct controls when copying from non-image to image content.\n const children = $el('div.comfy-modal-content', [\n self.createImgSettings(),\n ...self.createButtons()\n ])\n\n if (self.element) {\n // update\n if (self.element.firstChild) {\n self.element.removeChild(self.element.firstChild)\n }\n self.element.appendChild(children)\n } else {\n // new\n self.element = $el('div.comfy-modal', { parent: document.body }, [\n children\n ])\n }\n\n if (self.element.children[0].children.length <= 1) {\n self.element.children[0].appendChild(\n $el('p', {}, [\n 'Unable to find the features to edit content of a format stored in the current Clipspace.'\n ])\n )\n }\n\n ClipspaceDialog.invalidatePreview()\n }\n }\n\n constructor() {\n super()\n }\n\n createButtons() {\n const buttons = []\n\n for (let idx in ClipspaceDialog.items) {\n const item = ClipspaceDialog.items[idx]\n if (!item.contextPredicate || item.contextPredicate())\n buttons.push(ClipspaceDialog.items[idx])\n }\n\n buttons.push(\n $el('button', {\n type: 'button',\n textContent: 'Close',\n onclick: () => {\n this.close()\n }\n })\n )\n\n return buttons\n }\n\n createImgSettings() {\n if (ComfyApp.clipspace?.imgs) {\n const combo_items = []\n const imgs = ComfyApp.clipspace.imgs\n\n for (let i = 0; i < imgs.length; i++) {\n combo_items.push($el('option', { value: i }, [`${i}`]))\n }\n\n const combo1 = $el(\n 'select',\n {\n id: 'clipspace_img_selector',\n onchange: (event: Event) => {\n if (event.target && ComfyApp.clipspace) {\n ComfyApp.clipspace['selectedIndex'] = (\n event.target as HTMLSelectElement\n ).selectedIndex\n ClipspaceDialog.invalidatePreview()\n }\n }\n },\n combo_items\n )\n\n const row1 = $el('tr', {}, [\n $el('td', {}, [$el('font', { color: 'white' }, ['Select Image'])]),\n $el('td', {}, [combo1])\n ])\n\n const combo2 = $el(\n 'select',\n {\n id: 'clipspace_img_paste_mode',\n onchange: (event: Event) => {\n if (event.target && ComfyApp.clipspace) {\n ComfyApp.clipspace['img_paste_mode'] = (\n event.target as HTMLSelectElement\n ).value\n }\n }\n },\n [\n $el('option', { value: 'selected' }, 'selected'),\n $el('option', { value: 'all' }, 'all')\n ]\n ) as HTMLSelectElement\n combo2.value = ComfyApp.clipspace['img_paste_mode']\n\n const row2 = $el('tr', {}, [\n $el('td', {}, [$el('font', { color: 'white' }, ['Paste Mode'])]),\n $el('td', {}, [combo2])\n ])\n\n const td = $el(\n 'td',\n { align: 'center', width: '100px', height: '100px', colSpan: '2' },\n [$el('img', { id: 'clipspace_preview', ondragstart: () => false }, [])]\n )\n\n const row3 = $el('tr', {}, [td])\n\n return $el('table', {}, [row1, row2, row3])\n } else {\n return []\n }\n }\n\n createImgPreview() {\n if (ComfyApp.clipspace?.imgs) {\n return $el('img', { id: 'clipspace_preview', ondragstart: () => false })\n } else return []\n }\n\n show() {\n const img_preview = document.getElementById('clipspace_preview')\n ClipspaceDialog.invalidate()\n\n this.element.style.display = 'block'\n }\n}\n\napp.registerExtension({\n name: 'Comfy.Clipspace',\n init(app) {\n app.openClipspace = function () {\n if (!ClipspaceDialog.instance) {\n ClipspaceDialog.instance = new ClipspaceDialog()\n ComfyApp.clipspace_invalidate_handler = ClipspaceDialog.invalidate\n }\n\n if (ComfyApp.clipspace) {\n ClipspaceDialog.instance.show()\n } else app.ui.dialog.show('Clipspace is Empty!')\n }\n }\n})\n","import { LiteGraph, LGraphCanvas } from '@comfyorg/litegraph'\nimport { app } from '../../scripts/app'\n\n// Adds filtering to combo context menus\n\nconst ext = {\n name: 'Comfy.ContextMenuFilter',\n init() {\n const ctxMenu = LiteGraph.ContextMenu\n\n // @ts-expect-error TODO Very hacky way to modify Litegraph behaviour. Fix ctx later.\n LiteGraph.ContextMenu = function (values, options) {\n const ctx = new ctxMenu(values, options)\n\n // If we are a dark menu (only used for combo boxes) then add a filter input\n if (options?.className === 'dark' && values?.length > 4) {\n const filter = document.createElement('input')\n filter.classList.add('comfy-context-menu-filter')\n filter.placeholder = 'Filter list'\n\n ctx.root.prepend(filter)\n\n const items = Array.from(\n ctx.root.querySelectorAll('.litemenu-entry')\n ) as HTMLElement[]\n let displayedItems = [...items]\n let itemCount = displayedItems.length\n\n // We must request an animation frame for the current node of the active canvas to update.\n requestAnimationFrame(() => {\n const currentNode = LGraphCanvas.active_canvas.current_node\n const clickedComboValue = currentNode?.widgets\n ?.filter(\n (w) =>\n w.type === 'combo' && w.options.values?.length === values.length\n )\n .find((w) =>\n w.options.values?.every((v, i) => v === values[i])\n )?.value\n\n let selectedIndex = clickedComboValue\n ? values.findIndex((v: string) => v === clickedComboValue)\n : 0\n if (selectedIndex < 0) {\n selectedIndex = 0\n }\n let selectedItem = displayedItems[selectedIndex]\n updateSelected()\n\n // Apply highlighting to the selected item\n function updateSelected() {\n selectedItem?.style.setProperty('background-color', '')\n selectedItem?.style.setProperty('color', '')\n selectedItem = displayedItems[selectedIndex]\n selectedItem?.style.setProperty(\n 'background-color',\n '#ccc',\n 'important'\n )\n selectedItem?.style.setProperty('color', '#000', 'important')\n }\n\n const positionList = () => {\n const rect = ctx.root.getBoundingClientRect()\n\n // If the top is off-screen then shift the element with scaling applied\n if (rect.top < 0) {\n const scale =\n 1 -\n ctx.root.getBoundingClientRect().height / ctx.root.clientHeight\n\n const shift = (ctx.root.clientHeight * scale) / 2\n\n ctx.root.style.top = -shift + 'px'\n }\n }\n\n // Arrow up/down to select items\n filter.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault()\n if (selectedIndex === 0) {\n selectedIndex = itemCount - 1\n } else {\n selectedIndex--\n }\n updateSelected()\n break\n case 'ArrowRight':\n event.preventDefault()\n selectedIndex = itemCount - 1\n updateSelected()\n break\n case 'ArrowDown':\n event.preventDefault()\n if (selectedIndex === itemCount - 1) {\n selectedIndex = 0\n } else {\n selectedIndex++\n }\n updateSelected()\n break\n case 'ArrowLeft':\n event.preventDefault()\n selectedIndex = 0\n updateSelected()\n break\n case 'Enter':\n selectedItem?.click()\n break\n case 'Escape':\n ctx.close()\n break\n }\n })\n\n filter.addEventListener('input', () => {\n // Hide all items that don't match our filter\n const term = filter.value.toLocaleLowerCase()\n // When filtering, recompute which items are visible for arrow up/down and maintain selection.\n displayedItems = items.filter((item) => {\n const isVisible =\n !term || item.textContent?.toLocaleLowerCase().includes(term)\n item.style.display = isVisible ? 'block' : 'none'\n return isVisible\n })\n\n selectedIndex = 0\n if (displayedItems.includes(selectedItem)) {\n selectedIndex = displayedItems.findIndex(\n (d) => d === selectedItem\n )\n }\n itemCount = displayedItems.length\n\n updateSelected()\n\n // If we have an event then we can try and position the list under the source\n if (options.event) {\n let top = options.event.clientY - 10\n\n const bodyRect = document.body.getBoundingClientRect()\n\n const rootRect = ctx.root.getBoundingClientRect()\n if (\n bodyRect.height &&\n top > bodyRect.height - rootRect.height - 10\n ) {\n top = Math.max(0, bodyRect.height - rootRect.height - 10)\n }\n\n ctx.root.style.top = top + 'px'\n positionList()\n }\n })\n\n requestAnimationFrame(() => {\n // Focus the filter box when opening\n filter.focus()\n\n positionList()\n })\n })\n }\n\n return ctx\n }\n\n LiteGraph.ContextMenu.prototype = ctxMenu.prototype\n }\n}\n\napp.registerExtension(ext)\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\n\n// Allows for simple dynamic prompt replacement\n// Inputs in the format {a|b} will have a random value of a or b chosen when the prompt is queued.\n\n/*\n * Strips C-style line and block comments from a string\n */\nfunction stripComments(str) {\n return str.replace(/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/g, '')\n}\n\napp.registerExtension({\n name: 'Comfy.DynamicPrompts',\n nodeCreated(node) {\n if (node.widgets) {\n // Locate dynamic prompt text widgets\n // Include any widgets with dynamicPrompts set to true, and customtext\n // @ts-expect-error dynamicPrompts is not typed\n const widgets = node.widgets.filter((n) => n.dynamicPrompts)\n for (const widget of widgets) {\n // Override the serialization of the value to resolve dynamic prompts for all widgets supporting it in this node\n // @ts-expect-error hacky override\n widget.serializeValue = (workflowNode, widgetIndex) => {\n let prompt = stripComments(widget.value)\n while (\n prompt.replace('\\\\{', '').includes('{') &&\n prompt.replace('\\\\}', '').includes('}')\n ) {\n const startIndex = prompt.replace('\\\\{', '00').indexOf('{')\n const endIndex = prompt.replace('\\\\}', '00').indexOf('}')\n\n const optionsString = prompt.substring(startIndex + 1, endIndex)\n const options = optionsString.split('|')\n\n const randomIndex = Math.floor(Math.random() * options.length)\n const randomOption = options[randomIndex]\n\n prompt =\n prompt.substring(0, startIndex) +\n randomOption +\n prompt.substring(endIndex + 1)\n }\n\n // Overwrite the value in the serialized workflow pnginfo\n if (workflowNode?.widgets_values)\n workflowNode.widgets_values[widgetIndex] = prompt\n\n return prompt\n }\n }\n }\n }\n})\n","import { app } from '../../scripts/app'\n\n// Allows you to edit the attention weight by holding ctrl (or cmd) and using the up/down arrow keys\n\napp.registerExtension({\n name: 'Comfy.EditAttention',\n init() {\n const editAttentionDelta = app.ui.settings.addSetting({\n id: 'Comfy.EditAttention.Delta',\n category: ['Comfy', 'EditTokenWeight', 'Delta'],\n name: 'Ctrl+up/down precision',\n type: 'slider',\n attrs: {\n min: 0.01,\n max: 0.5,\n step: 0.01\n },\n defaultValue: 0.05\n })\n\n function incrementWeight(weight: string, delta: number): string {\n const floatWeight = parseFloat(weight)\n if (isNaN(floatWeight)) return weight\n const newWeight = floatWeight + delta\n return String(Number(newWeight.toFixed(10)))\n }\n\n type Enclosure = {\n start: number\n end: number\n }\n\n function findNearestEnclosure(\n text: string,\n cursorPos: number\n ): Enclosure | null {\n let start = cursorPos,\n end = cursorPos\n let openCount = 0,\n closeCount = 0\n\n // Find opening parenthesis before cursor\n while (start >= 0) {\n start--\n if (text[start] === '(' && openCount === closeCount) break\n if (text[start] === '(') openCount++\n if (text[start] === ')') closeCount++\n }\n if (start < 0) return null\n\n openCount = 0\n closeCount = 0\n\n // Find closing parenthesis after cursor\n while (end < text.length) {\n if (text[end] === ')' && openCount === closeCount) break\n if (text[end] === '(') openCount++\n if (text[end] === ')') closeCount++\n end++\n }\n if (end === text.length) return null\n\n return { start: start + 1, end: end }\n }\n\n function addWeightToParentheses(text: string): string {\n const parenRegex = /^\\((.*)\\)$/\n const parenMatch = text.match(parenRegex)\n\n const floatRegex = /:([+-]?(\\d*\\.)?\\d+([eE][+-]?\\d+)?)/\n const floatMatch = text.match(floatRegex)\n\n if (parenMatch && !floatMatch) {\n return `(${parenMatch[1]}:1.0)`\n } else {\n return text\n }\n }\n\n function editAttention(event: KeyboardEvent) {\n // @ts-expect-error Runtime narrowing not impl.\n const inputField: HTMLTextAreaElement = event.composedPath()[0]\n const delta = parseFloat(editAttentionDelta.value)\n\n if (inputField.tagName !== 'TEXTAREA') return\n if (!(event.key === 'ArrowUp' || event.key === 'ArrowDown')) return\n if (!event.ctrlKey && !event.metaKey) return\n\n event.preventDefault()\n\n let start = inputField.selectionStart\n let end = inputField.selectionEnd\n let selectedText = inputField.value.substring(start, end)\n\n // If there is no selection, attempt to find the nearest enclosure, or select the current word\n if (!selectedText) {\n const nearestEnclosure = findNearestEnclosure(inputField.value, start)\n if (nearestEnclosure) {\n start = nearestEnclosure.start\n end = nearestEnclosure.end\n selectedText = inputField.value.substring(start, end)\n } else {\n // Select the current word, find the start and end of the word\n const delimiters = ' .,\\\\/!?%^*;:{}=-_`~()\\r\\n\\t'\n\n while (\n !delimiters.includes(inputField.value[start - 1]) &&\n start > 0\n ) {\n start--\n }\n\n while (\n !delimiters.includes(inputField.value[end]) &&\n end < inputField.value.length\n ) {\n end++\n }\n\n selectedText = inputField.value.substring(start, end)\n if (!selectedText) return\n }\n }\n\n // If the selection ends with a space, remove it\n if (selectedText[selectedText.length - 1] === ' ') {\n selectedText = selectedText.substring(0, selectedText.length - 1)\n end -= 1\n }\n\n // If there are parentheses left and right of the selection, select them\n if (\n inputField.value[start - 1] === '(' &&\n inputField.value[end] === ')'\n ) {\n start -= 1\n end += 1\n selectedText = inputField.value.substring(start, end)\n }\n\n // If the selection is not enclosed in parentheses, add them\n if (\n selectedText[0] !== '(' ||\n selectedText[selectedText.length - 1] !== ')'\n ) {\n selectedText = `(${selectedText})`\n }\n\n // If the selection does not have a weight, add a weight of 1.0\n selectedText = addWeightToParentheses(selectedText)\n\n // Increment the weight\n const weightDelta = event.key === 'ArrowUp' ? delta : -delta\n const updatedText = selectedText.replace(\n /\\((.*):([+-]?\\d+(?:\\.\\d+)?)\\)/,\n (match, text, weight) => {\n weight = incrementWeight(weight, weightDelta)\n if (weight == 1) {\n return text\n } else {\n return `(${text}:${weight})`\n }\n }\n )\n\n inputField.setSelectionRange(start, end)\n // Intentional use of deprecated: https://developer.mozilla.org/docs/Web/API/Document/execCommand#using_inserttext\n document.execCommand('insertText', false, updatedText)\n inputField.setSelectionRange(start, start + updatedText.length)\n }\n window.addEventListener('keydown', editAttention)\n }\n})\n","// @ts-strict-ignore\nimport { $el, ComfyDialog } from '../../scripts/ui'\nimport { DraggableList } from '../../scripts/ui/draggableList'\nimport { GroupNodeConfig, GroupNodeHandler } from './groupNode'\nimport './groupNodeManage.css'\nimport { app, type ComfyApp } from '../../scripts/app'\nimport {\n LiteGraph,\n type LGraphNode,\n type LGraphNodeConstructor\n} from '@comfyorg/litegraph'\nimport { useToastStore } from '@/stores/toastStore'\n\nconst ORDER: symbol = Symbol()\nconst PREFIX = 'workflow'\nconst SEPARATOR = '>'\n\nfunction merge(target, source) {\n if (typeof target === 'object' && typeof source === 'object') {\n for (const key in source) {\n const sv = source[key]\n if (typeof sv === 'object') {\n let tv = target[key]\n if (!tv) tv = target[key] = {}\n merge(tv, source[key])\n } else {\n target[key] = sv\n }\n }\n }\n\n return target\n}\n\nexport class ManageGroupDialog extends ComfyDialog {\n tabs: Record<\n 'Inputs' | 'Outputs' | 'Widgets',\n { tab: HTMLAnchorElement; page: HTMLElement }\n >\n selectedNodeIndex: number | null | undefined\n selectedTab: keyof ManageGroupDialog['tabs'] = 'Inputs'\n selectedGroup: string | undefined\n modifications: Record<\n string,\n Record<\n string,\n Record<\n string,\n { name?: string | undefined; visible?: boolean | undefined }\n >\n >\n > = {}\n nodeItems: any[]\n app: ComfyApp\n groupNodeType: LGraphNodeConstructor\n groupNodeDef: any\n groupData: any\n\n innerNodesList: HTMLUListElement\n widgetsPage: HTMLElement\n inputsPage: HTMLElement\n outputsPage: HTMLElement\n draggable: any\n\n get selectedNodeInnerIndex() {\n return +this.nodeItems[this.selectedNodeIndex].dataset.nodeindex\n }\n\n constructor(app) {\n super()\n this.app = app\n this.element = $el('dialog.comfy-group-manage', {\n parent: document.body\n }) as HTMLDialogElement\n }\n\n changeTab(tab) {\n this.tabs[this.selectedTab].tab.classList.remove('active')\n this.tabs[this.selectedTab].page.classList.remove('active')\n this.tabs[tab].tab.classList.add('active')\n this.tabs[tab].page.classList.add('active')\n this.selectedTab = tab\n }\n\n changeNode(index, force?) {\n if (!force && this.selectedNodeIndex === index) return\n\n if (this.selectedNodeIndex != null) {\n this.nodeItems[this.selectedNodeIndex].classList.remove('selected')\n }\n this.nodeItems[index].classList.add('selected')\n this.selectedNodeIndex = index\n\n if (!this.buildInputsPage() && this.selectedTab === 'Inputs') {\n this.changeTab('Widgets')\n }\n if (!this.buildWidgetsPage() && this.selectedTab === 'Widgets') {\n this.changeTab('Outputs')\n }\n if (!this.buildOutputsPage() && this.selectedTab === 'Outputs') {\n this.changeTab('Inputs')\n }\n\n this.changeTab(this.selectedTab)\n }\n\n getGroupData() {\n this.groupNodeType =\n LiteGraph.registered_node_types[\n `${PREFIX}${SEPARATOR}` + this.selectedGroup\n ]\n this.groupNodeDef = this.groupNodeType.nodeData\n this.groupData = GroupNodeHandler.getGroupData(this.groupNodeType)\n }\n\n changeGroup(group, reset = true) {\n this.selectedGroup = group\n this.getGroupData()\n\n const nodes = this.groupData.nodeData.nodes\n this.nodeItems = nodes.map((n, i) =>\n $el(\n 'li.draggable-item',\n {\n dataset: {\n nodeindex: n.index + ''\n },\n onclick: () => {\n this.changeNode(i)\n }\n },\n [\n $el('span.drag-handle'),\n $el(\n 'div',\n {\n textContent: n.title ?? n.type\n },\n n.title\n ? $el('span', {\n textContent: n.type\n })\n : []\n )\n ]\n )\n )\n\n this.innerNodesList.replaceChildren(...this.nodeItems)\n\n if (reset) {\n this.selectedNodeIndex = null\n this.changeNode(0)\n } else {\n const items = this.draggable.getAllItems()\n let index = items.findIndex((item) => item.classList.contains('selected'))\n if (index === -1) index = this.selectedNodeIndex\n this.changeNode(index, true)\n }\n\n const ordered = [...nodes]\n this.draggable?.dispose()\n this.draggable = new DraggableList(this.innerNodesList, 'li')\n this.draggable.addEventListener(\n 'dragend',\n ({ detail: { oldPosition, newPosition } }) => {\n if (oldPosition === newPosition) return\n ordered.splice(newPosition, 0, ordered.splice(oldPosition, 1)[0])\n for (let i = 0; i < ordered.length; i++) {\n this.storeModification({\n nodeIndex: ordered[i].index,\n section: ORDER,\n prop: 'order',\n value: i\n })\n }\n }\n )\n }\n\n storeModification(props: {\n nodeIndex?: number\n section: symbol\n prop: string\n value: any\n }) {\n const { nodeIndex, section, prop, value } = props\n const groupMod = (this.modifications[this.selectedGroup] ??= {})\n const nodesMod = (groupMod.nodes ??= {})\n const nodeMod = (nodesMod[nodeIndex ?? this.selectedNodeInnerIndex] ??= {})\n const typeMod = (nodeMod[section] ??= {})\n if (typeof value === 'object') {\n const objMod = (typeMod[prop] ??= {})\n Object.assign(objMod, value)\n } else {\n typeMod[prop] = value\n }\n }\n\n getEditElement(section, prop, value, placeholder, checked, checkable = true) {\n if (value === placeholder) value = ''\n\n const mods =\n this.modifications[this.selectedGroup]?.nodes?.[\n this.selectedNodeInnerIndex\n ]?.[section]?.[prop]\n if (mods) {\n if (mods.name != null) {\n value = mods.name\n }\n if (mods.visible != null) {\n checked = mods.visible\n }\n }\n\n return $el('div', [\n $el('input', {\n value,\n placeholder,\n type: 'text',\n onchange: (e) => {\n this.storeModification({\n section,\n prop,\n value: { name: e.target.value }\n })\n }\n }),\n $el('label', { textContent: 'Visible' }, [\n $el('input', {\n type: 'checkbox',\n checked,\n disabled: !checkable,\n onchange: (e) => {\n this.storeModification({\n section,\n prop,\n value: { visible: !!e.target.checked }\n })\n }\n })\n ])\n ])\n }\n\n buildWidgetsPage() {\n const widgets =\n this.groupData.oldToNewWidgetMap[this.selectedNodeInnerIndex]\n const items = Object.keys(widgets ?? {})\n const type = app.graph.extra.groupNodes[this.selectedGroup]\n const config = type.config?.[this.selectedNodeInnerIndex]?.input\n this.widgetsPage.replaceChildren(\n ...items.map((oldName) => {\n return this.getEditElement(\n 'input',\n oldName,\n widgets[oldName],\n oldName,\n config?.[oldName]?.visible !== false\n )\n })\n )\n return !!items.length\n }\n\n buildInputsPage() {\n const inputs = this.groupData.nodeInputs[this.selectedNodeInnerIndex]\n const items = Object.keys(inputs ?? {})\n const type = app.graph.extra.groupNodes[this.selectedGroup]\n const config = type.config?.[this.selectedNodeInnerIndex]?.input\n this.inputsPage.replaceChildren(\n ...items\n .map((oldName) => {\n let value = inputs[oldName]\n if (!value) {\n return\n }\n\n return this.getEditElement(\n 'input',\n oldName,\n value,\n oldName,\n config?.[oldName]?.visible !== false\n )\n })\n .filter(Boolean)\n )\n return !!items.length\n }\n\n buildOutputsPage() {\n const nodes = this.groupData.nodeData.nodes\n const innerNodeDef = this.groupData.getNodeDef(\n nodes[this.selectedNodeInnerIndex]\n )\n const outputs = innerNodeDef?.output ?? []\n const groupOutputs =\n this.groupData.oldToNewOutputMap[this.selectedNodeInnerIndex]\n\n const type = app.graph.extra.groupNodes[this.selectedGroup]\n const config = type.config?.[this.selectedNodeInnerIndex]?.output\n const node = this.groupData.nodeData.nodes[this.selectedNodeInnerIndex]\n const checkable = node.type !== 'PrimitiveNode'\n this.outputsPage.replaceChildren(\n ...outputs\n .map((type, slot) => {\n const groupOutputIndex = groupOutputs?.[slot]\n const oldName = innerNodeDef.output_name?.[slot] ?? type\n let value = config?.[slot]?.name\n const visible = config?.[slot]?.visible || groupOutputIndex != null\n if (!value || value === oldName) {\n value = ''\n }\n return this.getEditElement(\n 'output',\n slot,\n value,\n oldName,\n visible,\n checkable\n )\n })\n .filter(Boolean)\n )\n return !!outputs.length\n }\n\n show(type?) {\n const groupNodes = Object.keys(app.graph.extra?.groupNodes ?? {}).sort(\n (a, b) => a.localeCompare(b)\n )\n\n this.innerNodesList = $el(\n 'ul.comfy-group-manage-list-items'\n ) as HTMLUListElement\n this.widgetsPage = $el('section.comfy-group-manage-node-page')\n this.inputsPage = $el('section.comfy-group-manage-node-page')\n this.outputsPage = $el('section.comfy-group-manage-node-page')\n const pages = $el('div', [\n this.widgetsPage,\n this.inputsPage,\n this.outputsPage\n ])\n\n this.tabs = [\n ['Inputs', this.inputsPage],\n ['Widgets', this.widgetsPage],\n ['Outputs', this.outputsPage]\n ].reduce((p, [name, page]: [string, HTMLElement]) => {\n p[name] = {\n tab: $el('a', {\n onclick: () => {\n this.changeTab(name)\n },\n textContent: name\n }),\n page\n }\n return p\n }, {}) as any\n\n const outer = $el('div.comfy-group-manage-outer', [\n $el('header', [\n $el('h2', 'Group Nodes'),\n $el(\n 'select',\n {\n onchange: (e) => {\n this.changeGroup(e.target.value)\n }\n },\n groupNodes.map((g) =>\n $el('option', {\n textContent: g,\n selected: `${PREFIX}${SEPARATOR}` + g === type,\n value: g\n })\n )\n )\n ]),\n $el('main', [\n $el('section.comfy-group-manage-list', this.innerNodesList),\n $el('section.comfy-group-manage-node', [\n $el(\n 'header',\n Object.values(this.tabs).map((t) => t.tab)\n ),\n pages\n ])\n ]),\n $el('footer', [\n $el(\n 'button.comfy-btn',\n {\n onclick: (e) => {\n const node = app.graph.nodes.find(\n (n) => n.type === `${PREFIX}${SEPARATOR}` + this.selectedGroup\n )\n if (node) {\n useToastStore().addAlert(\n 'This group node is in use in the current workflow, please first remove these.'\n )\n return\n }\n if (\n confirm(\n `Are you sure you want to remove the node: \"${this.selectedGroup}\"`\n )\n ) {\n delete app.graph.extra.groupNodes[this.selectedGroup]\n LiteGraph.unregisterNodeType(\n `${PREFIX}${SEPARATOR}` + this.selectedGroup\n )\n }\n this.show()\n }\n },\n 'Delete Group Node'\n ),\n $el(\n 'button.comfy-btn',\n {\n onclick: async () => {\n let nodesByType\n let recreateNodes = []\n const types = {}\n for (const g in this.modifications) {\n const type = app.graph.extra.groupNodes[g]\n let config = (type.config ??= {})\n\n let nodeMods = this.modifications[g]?.nodes\n if (nodeMods) {\n const keys = Object.keys(nodeMods)\n if (nodeMods[keys[0]][ORDER]) {\n // If any node is reordered, they will all need sequencing\n const orderedNodes = []\n const orderedMods = {}\n const orderedConfig = {}\n\n for (const n of keys) {\n const order = nodeMods[n][ORDER].order\n orderedNodes[order] = type.nodes[+n]\n orderedMods[order] = nodeMods[n]\n orderedNodes[order].index = order\n }\n\n // Rewrite links\n for (const l of type.links) {\n if (l[0] != null) l[0] = type.nodes[l[0]].index\n if (l[2] != null) l[2] = type.nodes[l[2]].index\n }\n\n // Rewrite externals\n if (type.external) {\n for (const ext of type.external) {\n ext[0] = type.nodes[ext[0]]\n }\n }\n\n // Rewrite modifications\n for (const id of keys) {\n if (config[id]) {\n orderedConfig[type.nodes[id].index] = config[id]\n }\n delete config[id]\n }\n\n type.nodes = orderedNodes\n nodeMods = orderedMods\n type.config = config = orderedConfig\n }\n\n merge(config, nodeMods)\n }\n\n types[g] = type\n\n if (!nodesByType) {\n nodesByType = app.graph.nodes.reduce((p, n) => {\n p[n.type] ??= []\n p[n.type].push(n)\n return p\n }, {})\n }\n\n const nodes = nodesByType[`${PREFIX}${SEPARATOR}` + g]\n if (nodes) recreateNodes.push(...nodes)\n }\n\n await GroupNodeConfig.registerFromWorkflow(types, {})\n\n for (const node of recreateNodes) {\n node.recreate()\n }\n\n this.modifications = {}\n this.app.graph.setDirtyCanvas(true, true)\n this.changeGroup(this.selectedGroup, false)\n }\n },\n 'Save'\n ),\n $el(\n 'button.comfy-btn',\n { onclick: () => this.element.close() },\n 'Close'\n )\n ])\n ])\n\n this.element.replaceChildren(outer)\n this.changeGroup(\n type\n ? groupNodes.find((g) => `${PREFIX}${SEPARATOR}` + g === type)\n : groupNodes[0]\n )\n this.element.showModal()\n\n this.element.addEventListener('close', () => {\n this.draggable?.dispose()\n this.element.remove()\n })\n }\n}\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport { mergeIfValid } from './widgetInputs'\nimport { ManageGroupDialog } from './groupNodeManage'\nimport { LGraphCanvas, LiteGraph, type LGraph } from '@comfyorg/litegraph'\nimport { LGraphNode, type NodeId } from '@comfyorg/litegraph/dist/LGraphNode'\nimport { useNodeDefStore } from '@/stores/nodeDefStore'\nimport { ComfyLink, ComfyNode, ComfyWorkflowJSON } from '@/types/comfyWorkflow'\nimport { useToastStore } from '@/stores/toastStore'\nimport { ComfyExtension } from '@/types/comfy'\nimport {\n deserialiseAndCreate,\n serialise\n} from '@/extensions/core/vintageClipboard'\nimport type { ComfyNodeDef } from '@/types/apiTypes'\nimport { showPromptDialog } from '@/services/dialogService'\nimport { t } from '@/i18n'\n\ntype GroupNodeWorkflowData = {\n external: ComfyLink[]\n links: ComfyLink[]\n nodes: ComfyNode[]\n}\n\nconst GROUP = Symbol()\n\n// v1 Prefix + Separator: workflow/\n// v2 Prefix + Separator: workflow> (ComfyUI_frontend v1.2.63)\nconst PREFIX = 'workflow'\nconst SEPARATOR = '>'\n\nconst Workflow = {\n InUse: {\n Free: 0,\n Registered: 1,\n InWorkflow: 2\n },\n isInUseGroupNode(name) {\n const id = `${PREFIX}${SEPARATOR}${name}`\n // Check if lready registered/in use in this workflow\n if (app.graph.extra?.groupNodes?.[name]) {\n if (app.graph.nodes.find((n) => n.type === id)) {\n return Workflow.InUse.InWorkflow\n } else {\n return Workflow.InUse.Registered\n }\n }\n return Workflow.InUse.Free\n },\n storeGroupNode(name: string, data: GroupNodeWorkflowData) {\n let extra = app.graph.extra\n if (!extra) app.graph.extra = extra = {}\n let groupNodes = extra.groupNodes\n if (!groupNodes) extra.groupNodes = groupNodes = {}\n groupNodes[name] = data\n }\n}\n\nclass GroupNodeBuilder {\n nodes: LGraphNode[]\n nodeData: GroupNodeWorkflowData\n\n constructor(nodes: LGraphNode[]) {\n this.nodes = nodes\n }\n\n async build() {\n const name = await this.getName()\n if (!name) return\n\n // Sort the nodes so they are in execution order\n // this allows for widgets to be in the correct order when reconstructing\n this.sortNodes()\n\n this.nodeData = this.getNodeData()\n Workflow.storeGroupNode(name, this.nodeData)\n\n return { name, nodeData: this.nodeData }\n }\n\n async getName() {\n const name = await showPromptDialog({\n title: t('groupNode.create'),\n message: t('groupNode.enterName'),\n defaultValue: ''\n })\n if (!name) return\n const used = Workflow.isInUseGroupNode(name)\n switch (used) {\n case Workflow.InUse.InWorkflow:\n useToastStore().addAlert(\n 'An in use group node with this name already exists embedded in this workflow, please remove any instances or use a new name.'\n )\n return\n case Workflow.InUse.Registered:\n if (\n !confirm(\n 'A group node with this name already exists embedded in this workflow, are you sure you want to overwrite it?'\n )\n ) {\n return\n }\n break\n }\n return name\n }\n\n sortNodes() {\n // Gets the builders nodes in graph execution order\n const nodesInOrder = app.graph.computeExecutionOrder(false)\n this.nodes = this.nodes\n .map((node) => ({ index: nodesInOrder.indexOf(node), node }))\n // @ts-expect-error id might be string\n .sort((a, b) => a.index - b.index || a.node.id - b.node.id)\n .map(({ node }) => node)\n }\n\n getNodeData() {\n const storeLinkTypes = (config) => {\n // Store link types for dynamically typed nodes e.g. reroutes\n for (const link of config.links) {\n const origin = app.graph.getNodeById(link[4])\n const type = origin.outputs[link[1]].type\n link.push(type)\n }\n }\n\n const storeExternalLinks = (config) => {\n // Store any external links to the group in the config so when rebuilding we add extra slots\n config.external = []\n for (let i = 0; i < this.nodes.length; i++) {\n const node = this.nodes[i]\n if (!node.outputs?.length) continue\n for (let slot = 0; slot < node.outputs.length; slot++) {\n let hasExternal = false\n const output = node.outputs[slot]\n let type = output.type\n if (!output.links?.length) continue\n for (const l of output.links) {\n const link = app.graph.links[l]\n if (!link) continue\n if (type === '*') type = link.type\n\n if (!app.canvas.selected_nodes[link.target_id]) {\n hasExternal = true\n break\n }\n }\n if (hasExternal) {\n config.external.push([i, slot, type])\n }\n }\n }\n }\n\n // Use the built in copyToClipboard function to generate the node data we need\n try {\n const serialised = serialise(this.nodes, app.canvas.graph)\n const config = JSON.parse(serialised)\n\n storeLinkTypes(config)\n storeExternalLinks(config)\n\n return config\n } finally {\n }\n }\n}\n\nexport class GroupNodeConfig {\n name: string\n nodeData: any\n inputCount: number\n oldToNewOutputMap: {}\n newToOldOutputMap: {}\n oldToNewInputMap: {}\n oldToNewWidgetMap: {}\n newToOldWidgetMap: {}\n primitiveDefs: {}\n widgetToPrimitive: {}\n primitiveToWidget: {}\n nodeInputs: {}\n outputVisibility: any[]\n nodeDef: ComfyNodeDef\n inputs: any[]\n linksFrom: {}\n linksTo: {}\n externalFrom: {}\n\n constructor(name, nodeData) {\n this.name = name\n this.nodeData = nodeData\n this.getLinks()\n\n this.inputCount = 0\n this.oldToNewOutputMap = {}\n this.newToOldOutputMap = {}\n this.oldToNewInputMap = {}\n this.oldToNewWidgetMap = {}\n this.newToOldWidgetMap = {}\n this.primitiveDefs = {}\n this.widgetToPrimitive = {}\n this.primitiveToWidget = {}\n this.nodeInputs = {}\n this.outputVisibility = []\n }\n\n async registerType(source = PREFIX) {\n this.nodeDef = {\n output: [],\n output_name: [],\n output_is_list: [],\n // @ts-expect-error Unused, doesn't exist\n output_is_hidden: [],\n name: source + SEPARATOR + this.name,\n display_name: this.name,\n category: 'group nodes' + (SEPARATOR + source),\n input: { required: {} },\n description: `Group node combining ${this.nodeData.nodes\n .map((n) => n.type)\n .join(', ')}`,\n python_module: 'custom_nodes.' + this.name,\n\n [GROUP]: this\n }\n\n this.inputs = []\n const seenInputs = {}\n const seenOutputs = {}\n for (let i = 0; i < this.nodeData.nodes.length; i++) {\n const node = this.nodeData.nodes[i]\n node.index = i\n this.processNode(node, seenInputs, seenOutputs)\n }\n\n for (const p of this.#convertedToProcess) {\n p()\n }\n this.#convertedToProcess = null\n await app.registerNodeDef(`${PREFIX}${SEPARATOR}` + this.name, this.nodeDef)\n useNodeDefStore().addNodeDef(this.nodeDef)\n }\n\n getLinks() {\n this.linksFrom = {}\n this.linksTo = {}\n this.externalFrom = {}\n\n // Extract links for easy lookup\n for (const l of this.nodeData.links) {\n const [sourceNodeId, sourceNodeSlot, targetNodeId, targetNodeSlot] = l\n\n // Skip links outside the copy config\n if (sourceNodeId == null) continue\n\n if (!this.linksFrom[sourceNodeId]) {\n this.linksFrom[sourceNodeId] = {}\n }\n if (!this.linksFrom[sourceNodeId][sourceNodeSlot]) {\n this.linksFrom[sourceNodeId][sourceNodeSlot] = []\n }\n this.linksFrom[sourceNodeId][sourceNodeSlot].push(l)\n\n if (!this.linksTo[targetNodeId]) {\n this.linksTo[targetNodeId] = {}\n }\n this.linksTo[targetNodeId][targetNodeSlot] = l\n }\n\n if (this.nodeData.external) {\n for (const ext of this.nodeData.external) {\n if (!this.externalFrom[ext[0]]) {\n this.externalFrom[ext[0]] = { [ext[1]]: ext[2] }\n } else {\n this.externalFrom[ext[0]][ext[1]] = ext[2]\n }\n }\n }\n }\n\n processNode(node, seenInputs, seenOutputs) {\n const def = this.getNodeDef(node)\n if (!def) return\n\n const inputs = { ...def.input?.required, ...def.input?.optional }\n\n this.inputs.push(this.processNodeInputs(node, seenInputs, inputs))\n if (def.output?.length) this.processNodeOutputs(node, seenOutputs, def)\n }\n\n getNodeDef(node) {\n const def = globalDefs[node.type]\n if (def) return def\n\n const linksFrom = this.linksFrom[node.index]\n if (node.type === 'PrimitiveNode') {\n // Skip as its not linked\n if (!linksFrom) return\n\n let type = linksFrom['0'][0][5]\n if (type === 'COMBO') {\n // Use the array items\n const source = node.outputs[0].widget.name\n const fromTypeName = this.nodeData.nodes[linksFrom['0'][0][2]].type\n const fromType = globalDefs[fromTypeName]\n const input =\n fromType.input.required[source] ?? fromType.input.optional[source]\n type = input[0]\n }\n\n const def = (this.primitiveDefs[node.index] = {\n input: {\n required: {\n value: [type, {}]\n }\n },\n output: [type],\n output_name: [],\n output_is_list: []\n })\n return def\n } else if (node.type === 'Reroute') {\n const linksTo = this.linksTo[node.index]\n if (linksTo && linksFrom && !this.externalFrom[node.index]?.[0]) {\n // Being used internally\n return null\n }\n\n let config = {}\n let rerouteType = '*'\n if (linksFrom) {\n for (const [, , id, slot] of linksFrom['0']) {\n const node = this.nodeData.nodes[id]\n const input = node.inputs[slot]\n if (rerouteType === '*') {\n rerouteType = input.type\n }\n if (input.widget) {\n const targetDef = globalDefs[node.type]\n const targetWidget =\n targetDef.input.required[input.widget.name] ??\n targetDef.input.optional[input.widget.name]\n\n const widget = [targetWidget[0], config]\n const res = mergeIfValid(\n {\n widget\n },\n targetWidget,\n false,\n null,\n widget\n )\n config = res?.customConfig ?? config\n }\n }\n } else if (linksTo) {\n const [id, slot] = linksTo['0']\n rerouteType = this.nodeData.nodes[id].outputs[slot].type\n } else {\n // Reroute used as a pipe\n for (const l of this.nodeData.links) {\n if (l[2] === node.index) {\n rerouteType = l[5]\n break\n }\n }\n if (rerouteType === '*') {\n // Check for an external link\n const t = this.externalFrom[node.index]?.[0]\n if (t) {\n rerouteType = t\n }\n }\n }\n\n // @ts-expect-error\n config.forceInput = true\n return {\n input: {\n required: {\n [rerouteType]: [rerouteType, config]\n }\n },\n output: [rerouteType],\n output_name: [],\n output_is_list: []\n }\n }\n\n console.warn(\n 'Skipping virtual node ' +\n node.type +\n ' when building group node ' +\n this.name\n )\n }\n\n getInputConfig(node, inputName, seenInputs, config, extra?) {\n const customConfig = this.nodeData.config?.[node.index]?.input?.[inputName]\n let name =\n customConfig?.name ??\n node.inputs?.find((inp) => inp.name === inputName)?.label ??\n inputName\n let key = name\n let prefix = ''\n // Special handling for primitive to include the title if it is set rather than just \"value\"\n if ((node.type === 'PrimitiveNode' && node.title) || name in seenInputs) {\n prefix = `${node.title ?? node.type} `\n key = name = `${prefix}${inputName}`\n if (name in seenInputs) {\n name = `${prefix}${seenInputs[name]} ${inputName}`\n }\n }\n seenInputs[key] = (seenInputs[key] ?? 1) + 1\n\n if (inputName === 'seed' || inputName === 'noise_seed') {\n if (!extra) extra = {}\n extra.control_after_generate = `${prefix}control_after_generate`\n }\n if (config[0] === 'IMAGEUPLOAD') {\n if (!extra) extra = {}\n extra.widget =\n this.oldToNewWidgetMap[node.index]?.[config[1]?.widget ?? 'image'] ??\n 'image'\n }\n\n if (extra) {\n config = [config[0], { ...config[1], ...extra }]\n }\n\n return { name, config, customConfig }\n }\n\n processWidgetInputs(inputs, node, inputNames, seenInputs) {\n const slots = []\n const converted = new Map()\n const widgetMap = (this.oldToNewWidgetMap[node.index] = {})\n for (const inputName of inputNames) {\n let widgetType = app.getWidgetType(inputs[inputName], inputName)\n if (widgetType) {\n const convertedIndex = node.inputs?.findIndex(\n (inp) => inp.name === inputName && inp.widget?.name === inputName\n )\n if (convertedIndex > -1) {\n // This widget has been converted to a widget\n // We need to store this in the correct position so link ids line up\n converted.set(convertedIndex, inputName)\n widgetMap[inputName] = null\n } else {\n // Normal widget\n const { name, config } = this.getInputConfig(\n node,\n inputName,\n seenInputs,\n inputs[inputName]\n )\n this.nodeDef.input.required[name] = config\n widgetMap[inputName] = name\n this.newToOldWidgetMap[name] = { node, inputName }\n }\n } else {\n // Normal input\n slots.push(inputName)\n }\n }\n return { converted, slots }\n }\n\n checkPrimitiveConnection(link, inputName, inputs) {\n const sourceNode = this.nodeData.nodes[link[0]]\n if (sourceNode.type === 'PrimitiveNode') {\n // Merge link configurations\n const [sourceNodeId, _, targetNodeId, __] = link\n const primitiveDef = this.primitiveDefs[sourceNodeId]\n const targetWidget = inputs[inputName]\n const primitiveConfig = primitiveDef.input.required.value\n const output = { widget: primitiveConfig }\n const config = mergeIfValid(\n output,\n targetWidget,\n false,\n null,\n primitiveConfig\n )\n primitiveConfig[1] =\n config?.customConfig ?? inputs[inputName][1]\n ? { ...inputs[inputName][1] }\n : {}\n\n let name = this.oldToNewWidgetMap[sourceNodeId]['value']\n name = name.substr(0, name.length - 6)\n primitiveConfig[1].control_after_generate = true\n primitiveConfig[1].control_prefix = name\n\n let toPrimitive = this.widgetToPrimitive[targetNodeId]\n if (!toPrimitive) {\n toPrimitive = this.widgetToPrimitive[targetNodeId] = {}\n }\n if (toPrimitive[inputName]) {\n toPrimitive[inputName].push(sourceNodeId)\n }\n toPrimitive[inputName] = sourceNodeId\n\n let toWidget = this.primitiveToWidget[sourceNodeId]\n if (!toWidget) {\n toWidget = this.primitiveToWidget[sourceNodeId] = []\n }\n toWidget.push({ nodeId: targetNodeId, inputName })\n }\n }\n\n processInputSlots(inputs, node, slots, linksTo, inputMap, seenInputs) {\n this.nodeInputs[node.index] = {}\n for (let i = 0; i < slots.length; i++) {\n const inputName = slots[i]\n if (linksTo[i]) {\n this.checkPrimitiveConnection(linksTo[i], inputName, inputs)\n // This input is linked so we can skip it\n continue\n }\n\n const { name, config, customConfig } = this.getInputConfig(\n node,\n inputName,\n seenInputs,\n inputs[inputName]\n )\n\n this.nodeInputs[node.index][inputName] = name\n if (customConfig?.visible === false) continue\n\n this.nodeDef.input.required[name] = config\n inputMap[i] = this.inputCount++\n }\n }\n\n processConvertedWidgets(\n inputs,\n node,\n slots,\n converted,\n linksTo,\n inputMap,\n seenInputs\n ) {\n // Add converted widgets sorted into their index order (ordered as they were converted) so link ids match up\n const convertedSlots = [...converted.keys()]\n .sort()\n .map((k) => converted.get(k))\n for (let i = 0; i < convertedSlots.length; i++) {\n const inputName = convertedSlots[i]\n if (linksTo[slots.length + i]) {\n this.checkPrimitiveConnection(\n linksTo[slots.length + i],\n inputName,\n inputs\n )\n // This input is linked so we can skip it\n continue\n }\n\n const { name, config } = this.getInputConfig(\n node,\n inputName,\n seenInputs,\n inputs[inputName],\n {\n defaultInput: true\n }\n )\n\n this.nodeDef.input.required[name] = config\n this.newToOldWidgetMap[name] = { node, inputName }\n\n if (!this.oldToNewWidgetMap[node.index]) {\n this.oldToNewWidgetMap[node.index] = {}\n }\n this.oldToNewWidgetMap[node.index][inputName] = name\n\n inputMap[slots.length + i] = this.inputCount++\n }\n }\n\n #convertedToProcess = []\n processNodeInputs(node, seenInputs, inputs) {\n const inputMapping = []\n\n const inputNames = Object.keys(inputs)\n if (!inputNames.length) return\n\n const { converted, slots } = this.processWidgetInputs(\n inputs,\n node,\n inputNames,\n seenInputs\n )\n const linksTo = this.linksTo[node.index] ?? {}\n const inputMap = (this.oldToNewInputMap[node.index] = {})\n this.processInputSlots(inputs, node, slots, linksTo, inputMap, seenInputs)\n\n // Converted inputs have to be processed after all other nodes as they'll be at the end of the list\n this.#convertedToProcess.push(() =>\n this.processConvertedWidgets(\n inputs,\n node,\n slots,\n converted,\n linksTo,\n inputMap,\n seenInputs\n )\n )\n\n return inputMapping\n }\n\n processNodeOutputs(node, seenOutputs, def) {\n const oldToNew = (this.oldToNewOutputMap[node.index] = {})\n\n // Add outputs\n for (let outputId = 0; outputId < def.output.length; outputId++) {\n const linksFrom = this.linksFrom[node.index]\n // If this output is linked internally we flag it to hide\n const hasLink =\n linksFrom?.[outputId] && !this.externalFrom[node.index]?.[outputId]\n const customConfig =\n this.nodeData.config?.[node.index]?.output?.[outputId]\n const visible = customConfig?.visible ?? !hasLink\n this.outputVisibility.push(visible)\n if (!visible) {\n continue\n }\n\n oldToNew[outputId] = this.nodeDef.output.length\n this.newToOldOutputMap[this.nodeDef.output.length] = {\n node,\n slot: outputId\n }\n this.nodeDef.output.push(def.output[outputId])\n this.nodeDef.output_is_list.push(def.output_is_list[outputId])\n\n let label = customConfig?.name\n if (!label) {\n label = def.output_name?.[outputId] ?? def.output[outputId]\n const output = node.outputs.find((o) => o.name === label)\n if (output?.label) {\n label = output.label\n }\n }\n\n let name = label\n if (name in seenOutputs) {\n const prefix = `${node.title ?? node.type} `\n name = `${prefix}${label}`\n if (name in seenOutputs) {\n name = `${prefix}${node.index} ${label}`\n }\n }\n seenOutputs[name] = 1\n\n this.nodeDef.output_name.push(name)\n }\n }\n\n static async registerFromWorkflow(groupNodes, missingNodeTypes) {\n for (const g in groupNodes) {\n const groupData = groupNodes[g]\n\n let hasMissing = false\n for (const n of groupData.nodes) {\n // Find missing node types\n if (!(n.type in LiteGraph.registered_node_types)) {\n missingNodeTypes.push({\n type: n.type,\n hint: ` (In group node '${PREFIX}${SEPARATOR}${g}')`\n })\n\n missingNodeTypes.push({\n type: `${PREFIX}${SEPARATOR}` + g,\n action: {\n text: 'Remove from workflow',\n callback: (e) => {\n delete groupNodes[g]\n e.target.textContent = 'Removed'\n e.target.style.pointerEvents = 'none'\n e.target.style.opacity = 0.7\n }\n }\n })\n\n hasMissing = true\n }\n }\n\n if (hasMissing) continue\n\n const config = new GroupNodeConfig(g, groupData)\n await config.registerType()\n }\n }\n}\n\nexport class GroupNodeHandler {\n node: LGraphNode\n groupData\n innerNodes: any\n\n constructor(node: LGraphNode) {\n this.node = node\n this.groupData = node.constructor?.nodeData?.[GROUP]\n\n this.node.setInnerNodes = (innerNodes) => {\n this.innerNodes = innerNodes\n\n for (\n let innerNodeIndex = 0;\n innerNodeIndex < this.innerNodes.length;\n innerNodeIndex++\n ) {\n const innerNode = this.innerNodes[innerNodeIndex]\n\n for (const w of innerNode.widgets ?? []) {\n if (w.type === 'converted-widget') {\n w.serializeValue = w.origSerializeValue\n }\n }\n\n innerNode.index = innerNodeIndex\n innerNode.getInputNode = (slot) => {\n // Check if this input is internal or external\n const externalSlot =\n this.groupData.oldToNewInputMap[innerNode.index]?.[slot]\n if (externalSlot != null) {\n return this.node.getInputNode(externalSlot)\n }\n\n // Internal link\n const innerLink = this.groupData.linksTo[innerNode.index]?.[slot]\n if (!innerLink) return null\n\n const inputNode = innerNodes[innerLink[0]]\n // Primitives will already apply their values\n if (inputNode.type === 'PrimitiveNode') return null\n\n return inputNode\n }\n\n innerNode.getInputLink = (slot) => {\n const externalSlot =\n this.groupData.oldToNewInputMap[innerNode.index]?.[slot]\n if (externalSlot != null) {\n // The inner node is connected via the group node inputs\n const linkId = this.node.inputs[externalSlot].link\n let link = app.graph.links[linkId]\n\n // Use the outer link, but update the target to the inner node\n // @ts-expect-error\n // TODO: Fix this\n link = {\n ...link,\n target_id: innerNode.id,\n target_slot: +slot\n }\n return link\n }\n\n let link = this.groupData.linksTo[innerNode.index]?.[slot]\n if (!link) return null\n // Use the inner link, but update the origin node to be inner node id\n link = {\n origin_id: innerNodes[link[0]].id,\n origin_slot: link[1],\n target_id: innerNode.id,\n target_slot: +slot\n }\n return link\n }\n }\n }\n\n this.node.updateLink = (link) => {\n // Replace the group node reference with the internal node\n // @ts-expect-error Can this be removed? Or replaced with: LLink.create(link.asSerialisable())\n link = { ...link }\n const output = this.groupData.newToOldOutputMap[link.origin_slot]\n let innerNode = this.innerNodes[output.node.index]\n let l\n while (innerNode?.type === 'Reroute') {\n l = innerNode.getInputLink(0)\n innerNode = innerNode.getInputNode(0)\n }\n\n if (!innerNode) {\n return null\n }\n\n if (l && GroupNodeHandler.isGroupNode(innerNode)) {\n return innerNode.updateLink(l)\n }\n\n link.origin_id = innerNode.id\n link.origin_slot = l?.origin_slot ?? output.slot\n return link\n }\n\n this.node.getInnerNodes = () => {\n if (!this.innerNodes) {\n this.node.setInnerNodes(\n this.groupData.nodeData.nodes.map((n, i) => {\n const innerNode = LiteGraph.createNode(n.type)\n innerNode.configure(n)\n innerNode.id = `${this.node.id}:${i}`\n return innerNode\n })\n )\n }\n\n this.updateInnerWidgets()\n\n return this.innerNodes\n }\n\n this.node.recreate = async () => {\n const id = this.node.id\n const sz = this.node.size\n const nodes = this.node.convertToNodes()\n\n const groupNode = LiteGraph.createNode(this.node.type)\n groupNode.id = id\n\n // Reuse the existing nodes for this instance\n groupNode.setInnerNodes(nodes)\n groupNode[GROUP].populateWidgets()\n app.graph.add(groupNode)\n groupNode.size = [\n Math.max(groupNode.size[0], sz[0]),\n Math.max(groupNode.size[1], sz[1])\n ]\n\n // Remove all converted nodes and relink them\n const builder = new GroupNodeBuilder(nodes)\n const nodeData = builder.getNodeData()\n groupNode[GROUP].groupData.nodeData.links = nodeData.links\n groupNode[GROUP].replaceNodes(nodes)\n return groupNode\n }\n\n this.node.convertToNodes = () => {\n const addInnerNodes = () => {\n // Clone the node data so we dont mutate it for other nodes\n const c = { ...this.groupData.nodeData }\n c.nodes = [...c.nodes]\n const innerNodes = this.node.getInnerNodes()\n let ids = []\n for (let i = 0; i < c.nodes.length; i++) {\n let id = innerNodes?.[i]?.id\n // Use existing IDs if they are set on the inner nodes\n if (id == null || isNaN(id)) {\n id = undefined\n } else {\n ids.push(id)\n }\n c.nodes[i] = { ...c.nodes[i], id }\n }\n deserialiseAndCreate(JSON.stringify(c), app.canvas)\n\n const [x, y] = this.node.pos\n let top\n let left\n // Configure nodes with current widget data\n const selectedIds = ids.length\n ? ids\n : Object.keys(app.canvas.selected_nodes)\n const newNodes = []\n for (let i = 0; i < selectedIds.length; i++) {\n const id = selectedIds[i]\n const newNode = app.graph.getNodeById(id)\n const innerNode = innerNodes[i]\n newNodes.push(newNode)\n\n if (left == null || newNode.pos[0] < left) {\n left = newNode.pos[0]\n }\n if (top == null || newNode.pos[1] < top) {\n top = newNode.pos[1]\n }\n\n if (!newNode.widgets) continue\n\n const map = this.groupData.oldToNewWidgetMap[innerNode.index]\n if (map) {\n const widgets = Object.keys(map)\n\n for (const oldName of widgets) {\n const newName = map[oldName]\n if (!newName) continue\n\n const widgetIndex = this.node.widgets.findIndex(\n (w) => w.name === newName\n )\n if (widgetIndex === -1) continue\n\n // Populate the main and any linked widgets\n if (innerNode.type === 'PrimitiveNode') {\n for (let i = 0; i < newNode.widgets.length; i++) {\n newNode.widgets[i].value =\n this.node.widgets[widgetIndex + i].value\n }\n } else {\n const outerWidget = this.node.widgets[widgetIndex]\n const newWidget = newNode.widgets.find(\n (w) => w.name === oldName\n )\n if (!newWidget) continue\n\n newWidget.value = outerWidget.value\n for (let w = 0; w < outerWidget.linkedWidgets?.length; w++) {\n newWidget.linkedWidgets[w].value =\n outerWidget.linkedWidgets[w].value\n }\n }\n }\n }\n }\n\n // Shift each node\n for (const newNode of newNodes) {\n newNode.pos[0] -= left - x\n newNode.pos[1] -= top - y\n }\n\n return { newNodes, selectedIds }\n }\n\n const reconnectInputs = (selectedIds) => {\n for (const innerNodeIndex in this.groupData.oldToNewInputMap) {\n const id = selectedIds[innerNodeIndex]\n const newNode = app.graph.getNodeById(id)\n const map = this.groupData.oldToNewInputMap[innerNodeIndex]\n for (const innerInputId in map) {\n const groupSlotId = map[innerInputId]\n if (groupSlotId == null) continue\n const slot = node.inputs[groupSlotId]\n if (slot.link == null) continue\n const link = app.graph.links[slot.link]\n if (!link) continue\n // connect this node output to the input of another node\n const originNode = app.graph.getNodeById(link.origin_id)\n originNode.connect(link.origin_slot, newNode, +innerInputId)\n }\n }\n }\n\n const reconnectOutputs = (selectedIds) => {\n for (\n let groupOutputId = 0;\n groupOutputId < node.outputs?.length;\n groupOutputId++\n ) {\n const output = node.outputs[groupOutputId]\n if (!output.links) continue\n const links = [...output.links]\n for (const l of links) {\n const slot = this.groupData.newToOldOutputMap[groupOutputId]\n const link = app.graph.links[l]\n const targetNode = app.graph.getNodeById(link.target_id)\n const newNode = app.graph.getNodeById(selectedIds[slot.node.index])\n newNode.connect(slot.slot, targetNode, link.target_slot)\n }\n }\n }\n\n app.canvas.emitBeforeChange()\n\n try {\n const { newNodes, selectedIds } = addInnerNodes()\n reconnectInputs(selectedIds)\n reconnectOutputs(selectedIds)\n app.graph.remove(this.node)\n\n return newNodes\n } finally {\n app.canvas.emitAfterChange()\n }\n }\n\n const getExtraMenuOptions = this.node.getExtraMenuOptions\n // @ts-expect-error Should pass patched return value getExtraMenuOptions\n this.node.getExtraMenuOptions = function (_, options) {\n getExtraMenuOptions?.apply(this, arguments)\n\n let optionIndex = options.findIndex((o) => o.content === 'Outputs')\n if (optionIndex === -1) optionIndex = options.length\n else optionIndex++\n options.splice(\n optionIndex,\n 0,\n null,\n {\n content: 'Convert to nodes',\n // @ts-expect-error\n callback: () => {\n return this.convertToNodes()\n }\n },\n {\n content: 'Manage Group Node',\n callback: () => manageGroupNodes(this.type)\n }\n )\n }\n\n // Draw custom collapse icon to identity this as a group\n const onDrawTitleBox = this.node.onDrawTitleBox\n this.node.onDrawTitleBox = function (ctx, height, size, scale) {\n onDrawTitleBox?.apply(this, arguments)\n\n const fill = ctx.fillStyle\n ctx.beginPath()\n ctx.rect(11, -height + 11, 2, 2)\n ctx.rect(14, -height + 11, 2, 2)\n ctx.rect(17, -height + 11, 2, 2)\n ctx.rect(11, -height + 14, 2, 2)\n ctx.rect(14, -height + 14, 2, 2)\n ctx.rect(17, -height + 14, 2, 2)\n ctx.rect(11, -height + 17, 2, 2)\n ctx.rect(14, -height + 17, 2, 2)\n ctx.rect(17, -height + 17, 2, 2)\n\n ctx.fillStyle = this.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR\n ctx.fill()\n ctx.fillStyle = fill\n }\n\n // Draw progress label\n const onDrawForeground = node.onDrawForeground\n const groupData = this.groupData.nodeData\n node.onDrawForeground = function (ctx) {\n const r = onDrawForeground?.apply?.(this, arguments)\n if (\n +app.runningNodeId === this.id &&\n this.runningInternalNodeId !== null\n ) {\n const n = groupData.nodes[this.runningInternalNodeId]\n if (!n) return\n const message = `Running ${n.title || n.type} (${this.runningInternalNodeId}/${groupData.nodes.length})`\n ctx.save()\n ctx.font = '12px sans-serif'\n const sz = ctx.measureText(message)\n ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR\n ctx.beginPath()\n ctx.roundRect(\n 0,\n -LiteGraph.NODE_TITLE_HEIGHT - 20,\n sz.width + 12,\n 20,\n 5\n )\n ctx.fill()\n\n ctx.fillStyle = '#fff'\n ctx.fillText(message, 6, -LiteGraph.NODE_TITLE_HEIGHT - 6)\n ctx.restore()\n }\n }\n\n // Flag this node as needing to be reset\n const onExecutionStart = this.node.onExecutionStart\n this.node.onExecutionStart = function () {\n this.resetExecution = true\n return onExecutionStart?.apply(this, arguments)\n }\n\n const self = this\n const onNodeCreated = this.node.onNodeCreated\n this.node.onNodeCreated = function () {\n if (!this.widgets) {\n return\n }\n const config = self.groupData.nodeData.config\n if (config) {\n for (const n in config) {\n const inputs = config[n]?.input\n for (const w in inputs) {\n if (inputs[w].visible !== false) continue\n const widgetName = self.groupData.oldToNewWidgetMap[n][w]\n const widget = this.widgets.find((w) => w.name === widgetName)\n if (widget) {\n widget.type = 'hidden'\n widget.computeSize = () => [0, -4]\n }\n }\n }\n }\n\n return onNodeCreated?.apply(this, arguments)\n }\n\n function handleEvent(type, getId, getEvent) {\n const handler = ({ detail }) => {\n const id = getId(detail)\n if (!id) return\n const node = app.graph.getNodeById(id)\n if (node) return\n\n const innerNodeIndex = this.innerNodes?.findIndex((n) => n.id == id)\n if (innerNodeIndex > -1) {\n this.node.runningInternalNodeId = innerNodeIndex\n api.dispatchCustomEvent(\n type,\n getEvent(detail, `${this.node.id}`, this.node)\n )\n }\n }\n api.addEventListener(type, handler)\n return handler\n }\n\n const executing = handleEvent.call(\n this,\n 'executing',\n (d) => d,\n (d, id, node) => id\n )\n\n const executed = handleEvent.call(\n this,\n 'executed',\n (d) => d?.display_node || d?.node,\n (d, id, node) => ({\n ...d,\n node: id,\n display_node: id,\n merge: !node.resetExecution\n })\n )\n\n const onRemoved = node.onRemoved\n this.node.onRemoved = function () {\n onRemoved?.apply(this, arguments)\n api.removeEventListener('executing', executing)\n api.removeEventListener('executed', executed)\n }\n\n this.node.refreshComboInNode = (defs) => {\n // Update combo widget options\n for (const widgetName in this.groupData.newToOldWidgetMap) {\n const widget = this.node.widgets.find((w) => w.name === widgetName)\n if (widget?.type === 'combo') {\n const old = this.groupData.newToOldWidgetMap[widgetName]\n const def = defs[old.node.type]\n const input =\n def?.input?.required?.[old.inputName] ??\n def?.input?.optional?.[old.inputName]\n if (!input) continue\n\n widget.options.values = input[0]\n\n if (\n old.inputName !== 'image' &&\n // @ts-expect-error Widget values\n !widget.options.values.includes(widget.value)\n ) {\n widget.value = widget.options.values[0]\n widget.callback(widget.value)\n }\n }\n }\n }\n }\n\n updateInnerWidgets() {\n for (const newWidgetName in this.groupData.newToOldWidgetMap) {\n const newWidget = this.node.widgets.find((w) => w.name === newWidgetName)\n if (!newWidget) continue\n\n const newValue = newWidget.value\n const old = this.groupData.newToOldWidgetMap[newWidgetName]\n let innerNode = this.innerNodes[old.node.index]\n\n if (innerNode.type === 'PrimitiveNode') {\n innerNode.primitiveValue = newValue\n const primitiveLinked = this.groupData.primitiveToWidget[old.node.index]\n for (const linked of primitiveLinked ?? []) {\n const node = this.innerNodes[linked.nodeId]\n const widget = node.widgets.find((w) => w.name === linked.inputName)\n\n if (widget) {\n widget.value = newValue\n }\n }\n continue\n } else if (innerNode.type === 'Reroute') {\n const rerouteLinks = this.groupData.linksFrom[old.node.index]\n if (rerouteLinks) {\n for (const [_, , targetNodeId, targetSlot] of rerouteLinks['0']) {\n const node = this.innerNodes[targetNodeId]\n const input = node.inputs[targetSlot]\n if (input.widget) {\n const widget = node.widgets?.find(\n (w) => w.name === input.widget.name\n )\n if (widget) {\n widget.value = newValue\n }\n }\n }\n }\n }\n\n const widget = innerNode.widgets?.find((w) => w.name === old.inputName)\n if (widget) {\n widget.value = newValue\n }\n }\n }\n\n populatePrimitive(node, nodeId, oldName, i, linkedShift) {\n // Converted widget, populate primitive if linked\n const primitiveId = this.groupData.widgetToPrimitive[nodeId]?.[oldName]\n if (primitiveId == null) return\n const targetWidgetName =\n this.groupData.oldToNewWidgetMap[primitiveId]['value']\n const targetWidgetIndex = this.node.widgets.findIndex(\n (w) => w.name === targetWidgetName\n )\n if (targetWidgetIndex > -1) {\n const primitiveNode = this.innerNodes[primitiveId]\n let len = primitiveNode.widgets.length\n if (\n len - 1 !==\n this.node.widgets[targetWidgetIndex].linkedWidgets?.length\n ) {\n // Fallback handling for if some reason the primitive has a different number of widgets\n // we dont want to overwrite random widgets, better to leave blank\n len = 1\n }\n for (let i = 0; i < len; i++) {\n this.node.widgets[targetWidgetIndex + i].value =\n primitiveNode.widgets[i].value\n }\n }\n return true\n }\n\n populateReroute(node, nodeId, map) {\n if (node.type !== 'Reroute') return\n\n const link = this.groupData.linksFrom[nodeId]?.[0]?.[0]\n if (!link) return\n const [, , targetNodeId, targetNodeSlot] = link\n const targetNode = this.groupData.nodeData.nodes[targetNodeId]\n const inputs = targetNode.inputs\n const targetWidget = inputs?.[targetNodeSlot]?.widget\n if (!targetWidget) return\n\n const offset = inputs.length - (targetNode.widgets_values?.length ?? 0)\n const v = targetNode.widgets_values?.[targetNodeSlot - offset]\n if (v == null) return\n\n const widgetName = Object.values(map)[0]\n const widget = this.node.widgets.find((w) => w.name === widgetName)\n if (widget) {\n widget.value = v\n }\n }\n\n populateWidgets() {\n if (!this.node.widgets) return\n\n for (\n let nodeId = 0;\n nodeId < this.groupData.nodeData.nodes.length;\n nodeId++\n ) {\n const node = this.groupData.nodeData.nodes[nodeId]\n const map = this.groupData.oldToNewWidgetMap[nodeId] ?? {}\n const widgets = Object.keys(map)\n\n if (!node.widgets_values?.length) {\n // special handling for populating values into reroutes\n // this allows primitives connect to them to pick up the correct value\n this.populateReroute(node, nodeId, map)\n continue\n }\n\n let linkedShift = 0\n for (let i = 0; i < widgets.length; i++) {\n const oldName = widgets[i]\n const newName = map[oldName]\n const widgetIndex = this.node.widgets.findIndex(\n (w) => w.name === newName\n )\n const mainWidget = this.node.widgets[widgetIndex]\n if (\n this.populatePrimitive(node, nodeId, oldName, i, linkedShift) ||\n widgetIndex === -1\n ) {\n // Find the inner widget and shift by the number of linked widgets as they will have been removed too\n const innerWidget = this.innerNodes[nodeId].widgets?.find(\n (w) => w.name === oldName\n )\n linkedShift += innerWidget?.linkedWidgets?.length ?? 0\n }\n if (widgetIndex === -1) {\n continue\n }\n\n // Populate the main and any linked widget\n mainWidget.value = node.widgets_values[i + linkedShift]\n for (let w = 0; w < mainWidget.linkedWidgets?.length; w++) {\n this.node.widgets[widgetIndex + w + 1].value =\n node.widgets_values[i + ++linkedShift]\n }\n }\n }\n }\n\n replaceNodes(nodes) {\n let top\n let left\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if (left == null || node.pos[0] < left) {\n left = node.pos[0]\n }\n if (top == null || node.pos[1] < top) {\n top = node.pos[1]\n }\n\n this.linkOutputs(node, i)\n app.graph.remove(node)\n }\n\n this.linkInputs()\n this.node.pos = [left, top]\n }\n\n linkOutputs(originalNode, nodeId) {\n if (!originalNode.outputs) return\n\n for (const output of originalNode.outputs) {\n if (!output.links) continue\n // Clone the links as they'll be changed if we reconnect\n const links = [...output.links]\n for (const l of links) {\n const link = app.graph.links[l]\n if (!link) continue\n\n const targetNode = app.graph.getNodeById(link.target_id)\n const newSlot =\n this.groupData.oldToNewOutputMap[nodeId]?.[link.origin_slot]\n if (newSlot != null) {\n this.node.connect(newSlot, targetNode, link.target_slot)\n }\n }\n }\n }\n\n linkInputs() {\n for (const link of this.groupData.nodeData.links ?? []) {\n const [, originSlot, targetId, targetSlot, actualOriginId] = link\n const originNode = app.graph.getNodeById(actualOriginId)\n if (!originNode) continue // this node is in the group\n originNode.connect(\n originSlot,\n // @ts-expect-error Valid - uses deprecated interface. Required check: if (graph.getNodeById(this.node.id) !== this.node) report()\n this.node.id,\n this.groupData.oldToNewInputMap[targetId][targetSlot]\n )\n }\n }\n\n static getGroupData(node) {\n return (node.nodeData ?? node.constructor?.nodeData)?.[GROUP]\n }\n\n static isGroupNode(node: LGraphNode) {\n return !!node.constructor?.nodeData?.[GROUP]\n }\n\n static async fromNodes(nodes: LGraphNode[]) {\n // Process the nodes into the stored workflow group node data\n const builder = new GroupNodeBuilder(nodes)\n const res = await builder.build()\n if (!res) return\n\n const { name, nodeData } = res\n\n // Convert this data into a LG node definition and register it\n const config = new GroupNodeConfig(name, nodeData)\n await config.registerType()\n\n const groupNode = LiteGraph.createNode(`${PREFIX}${SEPARATOR}${name}`)\n // Reuse the existing nodes for this instance\n groupNode.setInnerNodes(builder.nodes)\n groupNode[GROUP].populateWidgets()\n app.graph.add(groupNode)\n\n // Remove all converted nodes and relink them\n groupNode[GROUP].replaceNodes(builder.nodes)\n return groupNode\n }\n}\n\nfunction addConvertToGroupOptions() {\n function addConvertOption(options, index) {\n const selected = Object.values(app.canvas.selected_nodes ?? {})\n const disabled =\n selected.length < 2 ||\n selected.find((n) => GroupNodeHandler.isGroupNode(n))\n options.splice(index + 1, null, {\n content: `Convert to Group Node`,\n disabled,\n callback: convertSelectedNodesToGroupNode\n })\n }\n\n function addManageOption(options, index) {\n const groups = app.graph.extra?.groupNodes\n const disabled = !groups || !Object.keys(groups).length\n options.splice(index + 1, null, {\n content: `Manage Group Nodes`,\n disabled,\n callback: manageGroupNodes\n })\n }\n\n // Add to canvas\n const getCanvasMenuOptions = LGraphCanvas.prototype.getCanvasMenuOptions\n LGraphCanvas.prototype.getCanvasMenuOptions = function () {\n const options = getCanvasMenuOptions.apply(this, arguments)\n const index =\n options.findIndex((o) => o?.content === 'Add Group') + 1 || options.length\n addConvertOption(options, index)\n addManageOption(options, index + 1)\n return options\n }\n\n // Add to nodes\n const getNodeMenuOptions = LGraphCanvas.prototype.getNodeMenuOptions\n LGraphCanvas.prototype.getNodeMenuOptions = function (node) {\n const options = getNodeMenuOptions.apply(this, arguments)\n if (!GroupNodeHandler.isGroupNode(node)) {\n const index =\n options.findIndex((o) => o?.content === 'Outputs') + 1 ||\n options.length - 1\n addConvertOption(options, index)\n }\n return options\n }\n}\n\nconst replaceLegacySeparators = (nodes: ComfyNode[]): void => {\n for (const node of nodes) {\n if (typeof node.type === 'string' && node.type.startsWith('workflow/')) {\n node.type = node.type.replace(/^workflow\\//, `${PREFIX}${SEPARATOR}`)\n }\n }\n}\n\n/**\n * Convert selected nodes to a group node\n * @throws {Error} if no nodes are selected\n * @throws {Error} if a group node is already selected\n * @throws {Error} if a group node is selected\n *\n * The context menu item should not be available if any of the above conditions are met.\n * The error is automatically handled by the commandStore when the command is executed.\n */\nasync function convertSelectedNodesToGroupNode() {\n const nodes = Object.values(app.canvas.selected_nodes ?? {})\n if (nodes.length === 0) {\n throw new Error('No nodes selected')\n }\n if (nodes.length === 1) {\n throw new Error('Please select multiple nodes to convert to group node')\n }\n if (nodes.some((n) => GroupNodeHandler.isGroupNode(n))) {\n throw new Error('Selected nodes contain a group node')\n }\n return await GroupNodeHandler.fromNodes(nodes)\n}\n\nfunction ungroupSelectedGroupNodes() {\n const nodes = Object.values(app.canvas.selected_nodes ?? {})\n for (const node of nodes) {\n if (GroupNodeHandler.isGroupNode(node)) {\n node.convertToNodes?.()\n }\n }\n}\n\nfunction manageGroupNodes(type?: string) {\n new ManageGroupDialog(app).show(type)\n}\n\nconst id = 'Comfy.GroupNode'\nlet globalDefs\nconst ext: ComfyExtension = {\n name: id,\n commands: [\n {\n id: 'Comfy.GroupNode.ConvertSelectedNodesToGroupNode',\n label: 'Convert selected nodes to group node',\n icon: 'pi pi-sitemap',\n versionAdded: '1.3.17',\n function: convertSelectedNodesToGroupNode\n },\n {\n id: 'Comfy.GroupNode.UngroupSelectedGroupNodes',\n label: 'Ungroup selected group nodes',\n icon: 'pi pi-sitemap',\n versionAdded: '1.3.17',\n function: ungroupSelectedGroupNodes\n },\n {\n id: 'Comfy.GroupNode.ManageGroupNodes',\n label: 'Manage group nodes',\n icon: 'pi pi-cog',\n versionAdded: '1.3.17',\n function: manageGroupNodes\n }\n ],\n keybindings: [\n {\n commandId: 'Comfy.GroupNode.ConvertSelectedNodesToGroupNode',\n combo: {\n alt: true,\n key: 'g'\n }\n },\n {\n commandId: 'Comfy.GroupNode.UngroupSelectedGroupNodes',\n combo: {\n alt: true,\n shift: true,\n key: 'G'\n }\n }\n ],\n setup() {\n addConvertToGroupOptions()\n },\n async beforeConfigureGraph(\n graphData: ComfyWorkflowJSON,\n missingNodeTypes: string[]\n ) {\n const nodes = graphData?.extra?.groupNodes\n if (nodes) {\n replaceLegacySeparators(graphData.nodes)\n await GroupNodeConfig.registerFromWorkflow(nodes, missingNodeTypes)\n }\n },\n addCustomNodeDefs(defs) {\n // Store this so we can mutate it later with group nodes\n globalDefs = defs\n },\n nodeCreated(node) {\n if (GroupNodeHandler.isGroupNode(node)) {\n node[GROUP] = new GroupNodeHandler(node)\n\n // Ensure group nodes pasted from other workflows are stored\n if (node.title && node[GROUP]?.groupData?.nodeData) {\n Workflow.storeGroupNode(node.title, node[GROUP].groupData.nodeData)\n }\n }\n },\n async refreshComboInNodes(defs) {\n // Re-register group nodes so new ones are created with the correct options\n Object.assign(globalDefs, defs)\n const nodes = app.graph.extra?.groupNodes\n if (nodes) {\n await GroupNodeConfig.registerFromWorkflow(nodes, {})\n }\n }\n}\n\napp.registerExtension(ext)\n","// @ts-strict-ignore\nimport { LGraphGroup } from '@comfyorg/litegraph'\nimport { app } from '../../scripts/app'\nimport { LGraphCanvas } from '@comfyorg/litegraph'\nimport type { Positionable } from '@comfyorg/litegraph/dist/interfaces'\nimport type { LGraphNode } from '@comfyorg/litegraph'\nimport { useSettingStore } from '@/stores/settingStore'\n\nfunction setNodeMode(node: LGraphNode, mode: number) {\n node.mode = mode\n node.graph?.change()\n}\n\nfunction addNodesToGroup(group: LGraphGroup, items: Iterable) {\n const padding = useSettingStore().get('Comfy.GroupSelectedNodes.Padding')\n group.resizeTo([...group.children, ...items], padding)\n}\n\napp.registerExtension({\n name: 'Comfy.GroupOptions',\n setup() {\n const orig = LGraphCanvas.prototype.getCanvasMenuOptions\n // graph_mouse\n LGraphCanvas.prototype.getCanvasMenuOptions = function (\n this: LGraphCanvas\n ) {\n const options = orig.apply(this, arguments)\n const group = this.graph.getGroupOnPos(\n this.graph_mouse[0],\n this.graph_mouse[1]\n )\n if (!group) {\n options.push({\n content: 'Add Group For Selected Nodes',\n disabled: !this.selectedItems?.size,\n callback: () => {\n const group = new LGraphGroup()\n addNodesToGroup(group, this.selectedItems)\n this.graph.add(group)\n this.graph.change()\n }\n })\n\n return options\n }\n\n // Group nodes aren't recomputed until the group is moved, this ensures the nodes are up-to-date\n group.recomputeInsideNodes()\n const nodesInGroup = group.nodes\n\n options.push({\n content: 'Add Selected Nodes To Group',\n disabled: !this.selectedItems?.size,\n callback: () => {\n addNodesToGroup(group, this.selectedItems)\n this.graph.change()\n }\n })\n\n // No nodes in group, return default options\n if (nodesInGroup.length === 0) {\n return options\n } else {\n // Add a separator between the default options and the group options\n options.push(null)\n }\n\n // Check if all nodes are the same mode\n let allNodesAreSameMode = true\n for (let i = 1; i < nodesInGroup.length; i++) {\n if (nodesInGroup[i].mode !== nodesInGroup[0].mode) {\n allNodesAreSameMode = false\n break\n }\n }\n\n options.push({\n content: 'Fit Group To Nodes',\n callback: () => {\n group.recomputeInsideNodes()\n const padding = useSettingStore().get(\n 'Comfy.GroupSelectedNodes.Padding'\n )\n group.resizeTo(group.children, padding)\n this.graph.change()\n }\n })\n\n options.push({\n content: 'Select Nodes',\n callback: () => {\n this.selectNodes(nodesInGroup)\n this.graph.change()\n this.canvas.focus()\n }\n })\n\n // Modes\n // 0: Always\n // 1: On Event\n // 2: Never\n // 3: On Trigger\n // 4: Bypass\n // If all nodes are the same mode, add a menu option to change the mode\n if (allNodesAreSameMode) {\n const mode = nodesInGroup[0].mode\n switch (mode) {\n case 0:\n // All nodes are always, option to disable, and bypass\n options.push({\n content: 'Set Group Nodes to Never',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 2)\n }\n }\n })\n options.push({\n content: 'Bypass Group Nodes',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 4)\n }\n }\n })\n break\n case 2:\n // All nodes are never, option to enable, and bypass\n options.push({\n content: 'Set Group Nodes to Always',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 0)\n }\n }\n })\n options.push({\n content: 'Bypass Group Nodes',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 4)\n }\n }\n })\n break\n case 4:\n // All nodes are bypass, option to enable, and disable\n options.push({\n content: 'Set Group Nodes to Always',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 0)\n }\n }\n })\n options.push({\n content: 'Set Group Nodes to Never',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 2)\n }\n }\n })\n break\n default:\n // All nodes are On Trigger or On Event(Or other?), option to disable, set to always, or bypass\n options.push({\n content: 'Set Group Nodes to Always',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 0)\n }\n }\n })\n options.push({\n content: 'Set Group Nodes to Never',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 2)\n }\n }\n })\n options.push({\n content: 'Bypass Group Nodes',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 4)\n }\n }\n })\n break\n }\n } else {\n // Nodes are not all the same mode, add a menu option to change the mode to always, never, or bypass\n options.push({\n content: 'Set Group Nodes to Always',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 0)\n }\n }\n })\n options.push({\n content: 'Set Group Nodes to Never',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 2)\n }\n }\n })\n options.push({\n content: 'Bypass Group Nodes',\n callback: () => {\n for (const node of nodesInGroup) {\n setNodeMode(node, 4)\n }\n }\n })\n }\n\n return options\n }\n }\n})\n","// @ts-strict-ignore\nimport { LiteGraph } from '@comfyorg/litegraph'\nimport { app } from '../../scripts/app'\n\n// Inverts the scrolling of context menus\n\nconst id = 'Comfy.InvertMenuScrolling'\napp.registerExtension({\n name: id,\n init() {\n const ctxMenu = LiteGraph.ContextMenu\n const replace = () => {\n // @ts-expect-error\n LiteGraph.ContextMenu = function (values, options) {\n options = options || {}\n if (options.scroll_speed) {\n options.scroll_speed *= -1\n } else {\n options.scroll_speed = -0.1\n }\n return ctxMenu.call(this, values, options)\n }\n LiteGraph.ContextMenu.prototype = ctxMenu.prototype\n }\n app.ui.settings.addSetting({\n id,\n category: ['LiteGraph', 'Menu', 'InvertMenuScrolling'],\n name: 'Invert Context Menu Scrolling',\n type: 'boolean',\n defaultValue: false,\n onChange(value) {\n if (value) {\n replace()\n } else {\n LiteGraph.ContextMenu = ctxMenu\n }\n }\n })\n }\n})\n","import { app } from '../../scripts/app'\nimport { KeyComboImpl, useKeybindingStore } from '@/stores/keybindingStore'\nimport { useCommandStore } from '@/stores/commandStore'\n\napp.registerExtension({\n name: 'Comfy.Keybinds',\n init() {\n const keybindListener = async function (event: KeyboardEvent) {\n // Ignore keybindings for legacy jest tests as jest tests don't have\n // a Vue app instance or pinia stores.\n if (!app.vueAppReady) return\n\n const keyCombo = KeyComboImpl.fromEvent(event)\n if (keyCombo.isModifier) {\n return\n }\n\n // Ignore non-modifier keybindings if typing in input fields\n const target = event.composedPath()[0] as HTMLElement\n if (\n !keyCombo.hasModifier &&\n (target.tagName === 'TEXTAREA' ||\n target.tagName === 'INPUT' ||\n (target.tagName === 'SPAN' &&\n target.classList.contains('property_value')))\n ) {\n return\n }\n\n const keybindingStore = useKeybindingStore()\n const commandStore = useCommandStore()\n const keybinding = keybindingStore.getKeybinding(keyCombo)\n if (keybinding && keybinding.targetSelector !== '#graph-canvas') {\n // Prevent default browser behavior first, then execute the command\n event.preventDefault()\n await commandStore.execute(keybinding.commandId)\n return\n }\n\n // Only clear dialogs if not using modifiers\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return\n }\n\n // Escape key: close the first open modal found, and all dialogs\n if (event.key === 'Escape') {\n const modals = document.querySelectorAll('.comfy-modal')\n for (const modal of modals) {\n const modalDisplay = window\n .getComputedStyle(modal)\n .getPropertyValue('display')\n\n if (modalDisplay !== 'none') {\n modal.style.display = 'none'\n break\n }\n }\n\n for (const d of document.querySelectorAll('dialog')) d.close()\n }\n }\n\n window.addEventListener('keydown', keybindListener)\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { ComfyDialog, $el } from '../../scripts/ui'\nimport { ComfyApp } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport { ClipspaceDialog } from './clipspace'\n\n// Helper function to convert a data URL to a Blob object\nfunction dataURLToBlob(dataURL) {\n const parts = dataURL.split(';base64,')\n const contentType = parts[0].split(':')[1]\n const byteString = atob(parts[1])\n const arrayBuffer = new ArrayBuffer(byteString.length)\n const uint8Array = new Uint8Array(arrayBuffer)\n for (let i = 0; i < byteString.length; i++) {\n uint8Array[i] = byteString.charCodeAt(i)\n }\n return new Blob([arrayBuffer], { type: contentType })\n}\n\nfunction loadedImageToBlob(image) {\n const canvas = document.createElement('canvas')\n\n canvas.width = image.width\n canvas.height = image.height\n\n const ctx = canvas.getContext('2d')\n\n ctx.drawImage(image, 0, 0)\n\n const dataURL = canvas.toDataURL('image/png', 1)\n const blob = dataURLToBlob(dataURL)\n\n return blob\n}\n\nfunction loadImage(imagePath) {\n return new Promise((resolve, reject) => {\n const image = new Image()\n\n image.onload = function () {\n resolve(image)\n }\n\n image.src = imagePath\n })\n}\n\nasync function uploadMask(filepath, formData) {\n await api\n .fetchApi('/upload/mask', {\n method: 'POST',\n body: formData\n })\n .then((response) => {})\n .catch((error) => {\n console.error('Error:', error)\n })\n\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']] = new Image()\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src = api.apiURL(\n '/view?' +\n new URLSearchParams(filepath).toString() +\n app.getPreviewFormatParam() +\n app.getRandParam()\n )\n\n if (ComfyApp.clipspace.images)\n ComfyApp.clipspace.images[ComfyApp.clipspace['selectedIndex']] = filepath\n\n ClipspaceDialog.invalidatePreview()\n}\n\nfunction prepare_mask(image, maskCanvas, maskCtx, maskColor) {\n // paste mask data into alpha channel\n maskCtx.drawImage(image, 0, 0, maskCanvas.width, maskCanvas.height)\n const maskData = maskCtx.getImageData(\n 0,\n 0,\n maskCanvas.width,\n maskCanvas.height\n )\n\n // invert mask\n for (let i = 0; i < maskData.data.length; i += 4) {\n if (maskData.data[i + 3] == 255) maskData.data[i + 3] = 0\n else maskData.data[i + 3] = 255\n\n maskData.data[i] = maskColor.r\n maskData.data[i + 1] = maskColor.g\n maskData.data[i + 2] = maskColor.b\n }\n\n maskCtx.globalCompositeOperation = 'source-over'\n maskCtx.putImageData(maskData, 0, 0)\n}\n\n// Define the PointerType enum\nenum PointerType {\n Arc = 'arc',\n Rect = 'rect'\n}\n\nenum CompositionOperation {\n SourceOver = 'source-over',\n DestinationOut = 'destination-out'\n}\n\nexport class MaskEditorDialogOld extends ComfyDialog {\n static instance = null\n static mousedown_x: number | null = null\n static mousedown_y: number | null = null\n\n brush: HTMLDivElement\n maskCtx: any\n maskCanvas: HTMLCanvasElement\n brush_size_slider: HTMLDivElement\n brush_opacity_slider: HTMLDivElement\n colorButton: HTMLButtonElement\n saveButton: HTMLButtonElement\n zoom_ratio: number\n pan_x: number\n pan_y: number\n imgCanvas: HTMLCanvasElement\n last_display_style: string\n is_visible: boolean\n image: HTMLImageElement\n handler_registered: boolean\n brush_slider_input: HTMLInputElement\n cursorX: number\n cursorY: number\n mousedown_pan_x: number\n mousedown_pan_y: number\n last_pressure: number\n pointer_type: PointerType\n brush_pointer_type_select: HTMLDivElement\n\n static getInstance() {\n if (!MaskEditorDialogOld.instance) {\n MaskEditorDialogOld.instance = new MaskEditorDialogOld()\n }\n\n return MaskEditorDialogOld.instance\n }\n\n is_layout_created = false\n\n constructor() {\n super()\n this.element = $el('div.comfy-modal', { parent: document.body }, [\n $el('div.comfy-modal-content', [...this.createButtons()])\n ])\n }\n\n createButtons() {\n return []\n }\n\n createButton(name, callback): HTMLButtonElement {\n var button = document.createElement('button')\n button.style.pointerEvents = 'auto'\n button.innerText = name\n button.addEventListener('click', callback)\n return button\n }\n\n createLeftButton(name, callback) {\n var button = this.createButton(name, callback)\n button.style.cssFloat = 'left'\n button.style.marginRight = '4px'\n return button\n }\n\n createRightButton(name, callback) {\n var button = this.createButton(name, callback)\n button.style.cssFloat = 'right'\n button.style.marginLeft = '4px'\n return button\n }\n\n createLeftSlider(self, name, callback): HTMLDivElement {\n const divElement = document.createElement('div')\n divElement.id = 'maskeditor-slider'\n divElement.style.cssFloat = 'left'\n divElement.style.fontFamily = 'sans-serif'\n divElement.style.marginRight = '4px'\n divElement.style.color = 'var(--input-text)'\n divElement.style.backgroundColor = 'var(--comfy-input-bg)'\n divElement.style.borderRadius = '8px'\n divElement.style.borderColor = 'var(--border-color)'\n divElement.style.borderStyle = 'solid'\n divElement.style.fontSize = '15px'\n divElement.style.height = '25px'\n divElement.style.padding = '1px 6px'\n divElement.style.display = 'flex'\n divElement.style.position = 'relative'\n divElement.style.top = '2px'\n divElement.style.pointerEvents = 'auto'\n self.brush_slider_input = document.createElement('input')\n self.brush_slider_input.setAttribute('type', 'range')\n self.brush_slider_input.setAttribute('min', '1')\n self.brush_slider_input.setAttribute('max', '100')\n self.brush_slider_input.setAttribute('value', '10')\n const labelElement = document.createElement('label')\n labelElement.textContent = name\n\n divElement.appendChild(labelElement)\n divElement.appendChild(self.brush_slider_input)\n\n self.brush_slider_input.addEventListener('change', callback)\n\n return divElement\n }\n\n createOpacitySlider(self, name, callback): HTMLDivElement {\n const divElement = document.createElement('div')\n divElement.id = 'maskeditor-opacity-slider'\n divElement.style.cssFloat = 'left'\n divElement.style.fontFamily = 'sans-serif'\n divElement.style.marginRight = '4px'\n divElement.style.color = 'var(--input-text)'\n divElement.style.backgroundColor = 'var(--comfy-input-bg)'\n divElement.style.borderRadius = '8px'\n divElement.style.borderColor = 'var(--border-color)'\n divElement.style.borderStyle = 'solid'\n divElement.style.fontSize = '15px'\n divElement.style.height = '25px'\n divElement.style.padding = '1px 6px'\n divElement.style.display = 'flex'\n divElement.style.position = 'relative'\n divElement.style.top = '2px'\n divElement.style.pointerEvents = 'auto'\n self.opacity_slider_input = document.createElement('input')\n self.opacity_slider_input.setAttribute('type', 'range')\n self.opacity_slider_input.setAttribute('min', '0.1')\n self.opacity_slider_input.setAttribute('max', '1.0')\n self.opacity_slider_input.setAttribute('step', '0.01')\n self.opacity_slider_input.setAttribute('value', '0.7')\n const labelElement = document.createElement('label')\n labelElement.textContent = name\n\n divElement.appendChild(labelElement)\n divElement.appendChild(self.opacity_slider_input)\n\n self.opacity_slider_input.addEventListener('input', callback)\n\n return divElement\n }\n\n createPointerTypeSelect(self: any): HTMLDivElement {\n const divElement = document.createElement('div')\n divElement.id = 'maskeditor-pointer-type'\n divElement.style.cssFloat = 'left'\n divElement.style.fontFamily = 'sans-serif'\n divElement.style.marginRight = '4px'\n divElement.style.color = 'var(--input-text)'\n divElement.style.backgroundColor = 'var(--comfy-input-bg)'\n divElement.style.borderRadius = '8px'\n divElement.style.borderColor = 'var(--border-color)'\n divElement.style.borderStyle = 'solid'\n divElement.style.fontSize = '15px'\n divElement.style.height = '25px'\n divElement.style.padding = '1px 6px'\n divElement.style.display = 'flex'\n divElement.style.position = 'relative'\n divElement.style.top = '2px'\n divElement.style.pointerEvents = 'auto'\n\n const labelElement = document.createElement('label')\n labelElement.textContent = 'Pointer Type:'\n\n const selectElement = document.createElement('select')\n selectElement.style.borderRadius = '0'\n selectElement.style.borderColor = 'transparent'\n selectElement.style.borderStyle = 'unset'\n selectElement.style.fontSize = '0.9em'\n\n const optionArc = document.createElement('option')\n optionArc.value = 'arc'\n optionArc.text = 'Circle'\n optionArc.selected = true // Fix for TypeScript, \"selected\" should be boolean\n\n const optionRect = document.createElement('option')\n optionRect.value = 'rect'\n optionRect.text = 'Square'\n\n selectElement.appendChild(optionArc)\n selectElement.appendChild(optionRect)\n\n selectElement.addEventListener('change', (event: Event) => {\n const target = event.target as HTMLSelectElement\n self.pointer_type = target.value\n this.setBrushBorderRadius(self)\n })\n\n divElement.appendChild(labelElement)\n divElement.appendChild(selectElement)\n\n return divElement\n }\n\n setBrushBorderRadius(self: any): void {\n if (self.pointer_type === PointerType.Rect) {\n this.brush.style.borderRadius = '0%'\n // @ts-expect-error\n this.brush.style.MozBorderRadius = '0%'\n // @ts-expect-error\n this.brush.style.WebkitBorderRadius = '0%'\n } else {\n this.brush.style.borderRadius = '50%'\n // @ts-expect-error\n this.brush.style.MozBorderRadius = '50%'\n // @ts-expect-error\n this.brush.style.WebkitBorderRadius = '50%'\n }\n }\n\n setlayout(imgCanvas: HTMLCanvasElement, maskCanvas: HTMLCanvasElement) {\n const self = this\n self.pointer_type = PointerType.Arc\n\n // If it is specified as relative, using it only as a hidden placeholder for padding is recommended\n // to prevent anomalies where it exceeds a certain size and goes outside of the window.\n var bottom_panel = document.createElement('div')\n bottom_panel.style.position = 'absolute'\n bottom_panel.style.bottom = '0px'\n bottom_panel.style.left = '20px'\n bottom_panel.style.right = '20px'\n bottom_panel.style.height = '50px'\n bottom_panel.style.pointerEvents = 'none'\n\n var brush = document.createElement('div')\n brush.id = 'brush'\n brush.style.backgroundColor = 'transparent'\n brush.style.outline = '1px dashed black'\n brush.style.boxShadow = '0 0 0 1px white'\n brush.style.position = 'absolute'\n brush.style.zIndex = '8889'\n brush.style.pointerEvents = 'none'\n this.brush = brush\n this.setBrushBorderRadius(self)\n this.element.appendChild(imgCanvas)\n this.element.appendChild(maskCanvas)\n this.element.appendChild(bottom_panel)\n document.body.appendChild(brush)\n\n var clearButton = this.createLeftButton('Clear', () => {\n self.maskCtx.clearRect(\n 0,\n 0,\n self.maskCanvas.width,\n self.maskCanvas.height\n )\n })\n\n this.brush_size_slider = this.createLeftSlider(\n self,\n 'Thickness',\n (event) => {\n self.brush_size = event.target.value\n self.updateBrushPreview(self)\n }\n )\n\n this.brush_opacity_slider = this.createOpacitySlider(\n self,\n 'Opacity',\n (event) => {\n self.brush_opacity = event.target.value\n if (self.brush_color_mode !== 'negative') {\n self.maskCanvas.style.opacity = self.brush_opacity.toString()\n }\n }\n )\n\n this.brush_pointer_type_select = this.createPointerTypeSelect(self)\n this.colorButton = this.createLeftButton(this.getColorButtonText(), () => {\n if (self.brush_color_mode === 'black') {\n self.brush_color_mode = 'white'\n } else if (self.brush_color_mode === 'white') {\n self.brush_color_mode = 'negative'\n } else {\n self.brush_color_mode = 'black'\n }\n\n self.updateWhenBrushColorModeChanged()\n })\n\n var cancelButton = this.createRightButton('Cancel', () => {\n document.removeEventListener('keydown', MaskEditorDialogOld.handleKeyDown)\n self.close()\n })\n\n this.saveButton = this.createRightButton('Save', () => {\n document.removeEventListener('keydown', MaskEditorDialogOld.handleKeyDown)\n self.save()\n })\n\n this.element.appendChild(imgCanvas)\n this.element.appendChild(maskCanvas)\n this.element.appendChild(bottom_panel)\n\n bottom_panel.appendChild(clearButton)\n bottom_panel.appendChild(this.saveButton)\n bottom_panel.appendChild(cancelButton)\n bottom_panel.appendChild(this.brush_size_slider)\n bottom_panel.appendChild(this.brush_opacity_slider)\n bottom_panel.appendChild(this.brush_pointer_type_select)\n bottom_panel.appendChild(this.colorButton)\n\n imgCanvas.style.position = 'absolute'\n maskCanvas.style.position = 'absolute'\n\n imgCanvas.style.top = '200'\n imgCanvas.style.left = '0'\n\n maskCanvas.style.top = imgCanvas.style.top\n maskCanvas.style.left = imgCanvas.style.left\n\n const maskCanvasStyle = this.getMaskCanvasStyle()\n maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode\n maskCanvas.style.opacity = maskCanvasStyle.opacity.toString()\n }\n\n async show() {\n this.zoom_ratio = 1.0\n this.pan_x = 0\n this.pan_y = 0\n\n if (!this.is_layout_created) {\n // layout\n const imgCanvas = document.createElement('canvas')\n const maskCanvas = document.createElement('canvas')\n\n imgCanvas.id = 'imageCanvas'\n maskCanvas.id = 'maskCanvas'\n\n this.setlayout(imgCanvas, maskCanvas)\n\n // prepare content\n this.imgCanvas = imgCanvas\n this.maskCanvas = maskCanvas\n this.maskCtx = maskCanvas.getContext('2d', { willReadFrequently: true })\n\n this.setEventHandler(maskCanvas)\n\n this.is_layout_created = true\n\n // replacement of onClose hook since close is not real close\n const self = this\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'style'\n ) {\n if (\n self.last_display_style &&\n self.last_display_style != 'none' &&\n self.element.style.display == 'none'\n ) {\n self.brush.style.display = 'none'\n ComfyApp.onClipspaceEditorClosed()\n }\n\n self.last_display_style = self.element.style.display\n }\n })\n })\n\n const config = { attributes: true }\n observer.observe(this.element, config)\n }\n\n // The keydown event needs to be reconfigured when closing the dialog as it gets removed.\n document.addEventListener('keydown', MaskEditorDialogOld.handleKeyDown)\n\n if (ComfyApp.clipspace_return_node) {\n this.saveButton.innerText = 'Save to node'\n } else {\n this.saveButton.innerText = 'Save'\n }\n this.saveButton.disabled = false\n\n this.element.style.display = 'block'\n this.element.style.width = '85%'\n this.element.style.margin = '0 7.5%'\n this.element.style.height = '100vh'\n this.element.style.top = '50%'\n this.element.style.left = '42%'\n this.element.style.zIndex = '8888' // NOTE: alert dialog must be high priority.\n\n await this.setImages(this.imgCanvas)\n\n this.is_visible = true\n }\n\n isOpened() {\n return this.element.style.display == 'block'\n }\n\n invalidateCanvas(orig_image, mask_image) {\n this.imgCanvas.width = orig_image.width\n this.imgCanvas.height = orig_image.height\n\n this.maskCanvas.width = orig_image.width\n this.maskCanvas.height = orig_image.height\n\n let imgCtx = this.imgCanvas.getContext('2d', { willReadFrequently: true })\n let maskCtx = this.maskCanvas.getContext('2d', {\n willReadFrequently: true\n })\n\n imgCtx.drawImage(orig_image, 0, 0, orig_image.width, orig_image.height)\n prepare_mask(mask_image, this.maskCanvas, maskCtx, this.getMaskColor())\n }\n\n async setImages(imgCanvas) {\n let self = this\n\n const imgCtx = imgCanvas.getContext('2d', { willReadFrequently: true })\n const maskCtx = this.maskCtx\n const maskCanvas = this.maskCanvas\n\n imgCtx.clearRect(0, 0, this.imgCanvas.width, this.imgCanvas.height)\n maskCtx.clearRect(0, 0, this.maskCanvas.width, this.maskCanvas.height)\n\n // image load\n const filepath = ComfyApp.clipspace.images\n\n const alpha_url = new URL(\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src\n )\n alpha_url.searchParams.delete('channel')\n alpha_url.searchParams.delete('preview')\n alpha_url.searchParams.set('channel', 'a')\n let mask_image = await loadImage(alpha_url)\n\n // original image load\n const rgb_url = new URL(\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src\n )\n rgb_url.searchParams.delete('channel')\n rgb_url.searchParams.set('channel', 'rgb')\n this.image = new Image()\n this.image.onload = function () {\n maskCanvas.width = self.image.width\n maskCanvas.height = self.image.height\n\n self.invalidateCanvas(self.image, mask_image)\n self.initializeCanvasPanZoom()\n }\n this.image.src = rgb_url.toString()\n }\n\n initializeCanvasPanZoom() {\n // set initialize\n let drawWidth = this.image.width\n let drawHeight = this.image.height\n\n let width = this.element.clientWidth\n let height = this.element.clientHeight\n\n if (this.image.width > width) {\n drawWidth = width\n drawHeight = (drawWidth / this.image.width) * this.image.height\n }\n\n if (drawHeight > height) {\n drawHeight = height\n drawWidth = (drawHeight / this.image.height) * this.image.width\n }\n\n this.zoom_ratio = drawWidth / this.image.width\n\n const canvasX = (width - drawWidth) / 2\n const canvasY = (height - drawHeight) / 2\n this.pan_x = canvasX\n this.pan_y = canvasY\n\n this.invalidatePanZoom()\n }\n\n invalidatePanZoom() {\n let raw_width = this.image.width * this.zoom_ratio\n let raw_height = this.image.height * this.zoom_ratio\n\n if (this.pan_x + raw_width < 10) {\n this.pan_x = 10 - raw_width\n }\n\n if (this.pan_y + raw_height < 10) {\n this.pan_y = 10 - raw_height\n }\n\n let width = `${raw_width}px`\n let height = `${raw_height}px`\n\n let left = `${this.pan_x}px`\n let top = `${this.pan_y}px`\n\n this.maskCanvas.style.width = width\n this.maskCanvas.style.height = height\n this.maskCanvas.style.left = left\n this.maskCanvas.style.top = top\n\n this.imgCanvas.style.width = width\n this.imgCanvas.style.height = height\n this.imgCanvas.style.left = left\n this.imgCanvas.style.top = top\n }\n\n setEventHandler(maskCanvas) {\n const self = this\n\n if (!this.handler_registered) {\n maskCanvas.addEventListener('contextmenu', (event) => {\n event.preventDefault()\n })\n\n this.element.addEventListener('wheel', (event) =>\n this.handleWheelEvent(self, event)\n )\n this.element.addEventListener('pointermove', (event) =>\n this.pointMoveEvent(self, event)\n )\n this.element.addEventListener('touchmove', (event) =>\n this.pointMoveEvent(self, event)\n )\n\n this.element.addEventListener('dragstart', (event) => {\n if (event.ctrlKey) {\n event.preventDefault()\n }\n })\n\n maskCanvas.addEventListener('pointerdown', (event) =>\n this.handlePointerDown(self, event)\n )\n maskCanvas.addEventListener('pointermove', (event) =>\n this.draw_move(self, event)\n )\n maskCanvas.addEventListener('touchmove', (event) =>\n this.draw_move(self, event)\n )\n maskCanvas.addEventListener('pointerover', (event) => {\n this.brush.style.display = 'block'\n })\n maskCanvas.addEventListener('pointerleave', (event) => {\n this.brush.style.display = 'none'\n })\n\n document.addEventListener(\n 'pointerup',\n MaskEditorDialogOld.handlePointerUp\n )\n\n this.handler_registered = true\n }\n }\n\n getMaskCanvasStyle() {\n if (this.brush_color_mode === 'negative') {\n return {\n mixBlendMode: 'difference',\n opacity: '1'\n }\n } else {\n return {\n mixBlendMode: 'initial',\n opacity: this.brush_opacity\n }\n }\n }\n\n getMaskColor() {\n if (this.brush_color_mode === 'black') {\n return { r: 0, g: 0, b: 0 }\n }\n if (this.brush_color_mode === 'white') {\n return { r: 255, g: 255, b: 255 }\n }\n if (this.brush_color_mode === 'negative') {\n // negative effect only works with white color\n return { r: 255, g: 255, b: 255 }\n }\n\n return { r: 0, g: 0, b: 0 }\n }\n\n getMaskFillStyle() {\n const maskColor = this.getMaskColor()\n\n return 'rgb(' + maskColor.r + ',' + maskColor.g + ',' + maskColor.b + ')'\n }\n\n getColorButtonText() {\n let colorCaption = 'unknown'\n\n if (this.brush_color_mode === 'black') {\n colorCaption = 'black'\n } else if (this.brush_color_mode === 'white') {\n colorCaption = 'white'\n } else if (this.brush_color_mode === 'negative') {\n colorCaption = 'negative'\n }\n\n return 'Color: ' + colorCaption\n }\n\n updateWhenBrushColorModeChanged() {\n this.colorButton.innerText = this.getColorButtonText()\n\n // update mask canvas css styles\n\n const maskCanvasStyle = this.getMaskCanvasStyle()\n this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode\n this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString()\n\n // update mask canvas rgb colors\n\n const maskColor = this.getMaskColor()\n\n const maskData = this.maskCtx.getImageData(\n 0,\n 0,\n this.maskCanvas.width,\n this.maskCanvas.height\n )\n\n for (let i = 0; i < maskData.data.length; i += 4) {\n maskData.data[i] = maskColor.r\n maskData.data[i + 1] = maskColor.g\n maskData.data[i + 2] = maskColor.b\n }\n\n this.maskCtx.putImageData(maskData, 0, 0)\n }\n\n brush_opacity = 0.7\n brush_size = 10\n brush_color_mode = 'black'\n drawing_mode = false\n lastx = -1\n lasty = -1\n lasttime = 0\n\n static handleKeyDown(event) {\n const self = MaskEditorDialogOld.instance\n if (event.key === ']') {\n self.brush_size = Math.min(self.brush_size + 2, 100)\n self.brush_slider_input.value = self.brush_size\n } else if (event.key === '[') {\n self.brush_size = Math.max(self.brush_size - 2, 1)\n self.brush_slider_input.value = self.brush_size\n } else if (event.key === 'Enter') {\n self.save()\n }\n\n self.updateBrushPreview(self)\n }\n\n static handlePointerUp(event) {\n event.preventDefault()\n\n this.mousedown_x = null\n this.mousedown_y = null\n\n MaskEditorDialogOld.instance.drawing_mode = false\n }\n\n updateBrushPreview(self) {\n const brush = self.brush\n\n var centerX = self.cursorX\n var centerY = self.cursorY\n\n brush.style.width = self.brush_size * 2 * this.zoom_ratio + 'px'\n brush.style.height = self.brush_size * 2 * this.zoom_ratio + 'px'\n brush.style.left = centerX - self.brush_size * this.zoom_ratio + 'px'\n brush.style.top = centerY - self.brush_size * this.zoom_ratio + 'px'\n }\n\n handleWheelEvent(self, event) {\n event.preventDefault()\n\n if (event.ctrlKey) {\n // zoom canvas\n if (event.deltaY < 0) {\n this.zoom_ratio = Math.min(10.0, this.zoom_ratio + 0.2)\n } else {\n this.zoom_ratio = Math.max(0.2, this.zoom_ratio - 0.2)\n }\n\n this.invalidatePanZoom()\n } else {\n // adjust brush size\n if (event.deltaY < 0) this.brush_size = Math.min(this.brush_size + 2, 100)\n else this.brush_size = Math.max(this.brush_size - 2, 1)\n\n this.brush_slider_input.value = this.brush_size.toString()\n\n this.updateBrushPreview(this)\n }\n }\n\n pointMoveEvent(self, event) {\n this.cursorX = event.pageX\n this.cursorY = event.pageY\n\n self.updateBrushPreview(self)\n\n if (event.ctrlKey) {\n event.preventDefault()\n self.pan_move(self, event)\n }\n\n let left_button_down =\n (window.TouchEvent && event instanceof TouchEvent) || event.buttons == 1\n\n if (event.shiftKey && left_button_down) {\n self.drawing_mode = false\n\n const y = event.clientY\n let delta = (self.zoom_lasty - y) * 0.005\n self.zoom_ratio = Math.max(\n Math.min(10.0, self.last_zoom_ratio - delta),\n 0.2\n )\n\n this.invalidatePanZoom()\n return\n }\n }\n\n pan_move(self, event) {\n if (event.buttons == 1) {\n if (MaskEditorDialogOld.mousedown_x) {\n let deltaX = MaskEditorDialogOld.mousedown_x - event.clientX\n let deltaY = MaskEditorDialogOld.mousedown_y - event.clientY\n\n self.pan_x = this.mousedown_pan_x - deltaX\n self.pan_y = this.mousedown_pan_y - deltaY\n\n self.invalidatePanZoom()\n }\n }\n }\n\n draw_move(self, event) {\n if (event.ctrlKey || event.shiftKey) {\n return\n }\n\n event.preventDefault()\n\n this.cursorX = event.pageX\n this.cursorY = event.pageY\n\n self.updateBrushPreview(self)\n\n let left_button_down =\n (window.TouchEvent && event instanceof TouchEvent) || event.buttons == 1\n let right_button_down = [2, 5, 32].includes(event.buttons)\n\n if (!event.altKey && left_button_down) {\n var diff = performance.now() - self.lasttime\n\n const maskRect = self.maskCanvas.getBoundingClientRect()\n\n var x = event.offsetX\n var y = event.offsetY\n\n if (event.offsetX == null) {\n x = event.targetTouches[0].clientX - maskRect.left\n }\n\n if (event.offsetY == null) {\n y = event.targetTouches[0].clientY - maskRect.top\n }\n\n x /= self.zoom_ratio\n y /= self.zoom_ratio\n\n var brush_size = this.brush_size\n if (event instanceof PointerEvent && event.pointerType == 'pen') {\n brush_size *= event.pressure\n this.last_pressure = event.pressure\n } else if (\n window.TouchEvent &&\n event instanceof TouchEvent &&\n diff < 20\n ) {\n // The firing interval of PointerEvents in Pen is unreliable, so it is supplemented by TouchEvents.\n brush_size *= this.last_pressure\n } else {\n brush_size = this.brush_size\n }\n\n if (diff > 20 && !this.drawing_mode)\n requestAnimationFrame(() => {\n self.init_shape(self, CompositionOperation.SourceOver)\n self.draw_shape(self, x, y, brush_size)\n self.lastx = x\n self.lasty = y\n })\n else\n requestAnimationFrame(() => {\n self.init_shape(self, CompositionOperation.SourceOver)\n\n var dx = x - self.lastx\n var dy = y - self.lasty\n\n var distance = Math.sqrt(dx * dx + dy * dy)\n var directionX = dx / distance\n var directionY = dy / distance\n\n for (var i = 0; i < distance; i += 5) {\n var px = self.lastx + directionX * i\n var py = self.lasty + directionY * i\n self.draw_shape(self, px, py, brush_size)\n }\n self.lastx = x\n self.lasty = y\n })\n\n self.lasttime = performance.now()\n } else if ((event.altKey && left_button_down) || right_button_down) {\n const maskRect = self.maskCanvas.getBoundingClientRect()\n const x =\n (event.offsetX || event.targetTouches[0].clientX - maskRect.left) /\n self.zoom_ratio\n const y =\n (event.offsetY || event.targetTouches[0].clientY - maskRect.top) /\n self.zoom_ratio\n\n var brush_size = this.brush_size\n if (event instanceof PointerEvent && event.pointerType == 'pen') {\n brush_size *= event.pressure\n this.last_pressure = event.pressure\n } else if (\n window.TouchEvent &&\n event instanceof TouchEvent &&\n diff < 20\n ) {\n brush_size *= this.last_pressure\n } else {\n brush_size = this.brush_size\n }\n\n if (diff > 20 && !this.drawing_mode)\n // cannot tracking drawing_mode for touch event\n requestAnimationFrame(() => {\n self.init_shape(self, CompositionOperation.DestinationOut)\n self.draw_shape(self, x, y, brush_size)\n self.lastx = x\n self.lasty = y\n })\n else\n requestAnimationFrame(() => {\n self.init_shape(self, CompositionOperation.DestinationOut)\n\n var dx = x - self.lastx\n var dy = y - self.lasty\n\n var distance = Math.sqrt(dx * dx + dy * dy)\n var directionX = dx / distance\n var directionY = dy / distance\n\n for (var i = 0; i < distance; i += 5) {\n var px = self.lastx + directionX * i\n var py = self.lasty + directionY * i\n self.draw_shape(self, px, py, brush_size)\n }\n self.lastx = x\n self.lasty = y\n })\n\n self.lasttime = performance.now()\n }\n }\n\n handlePointerDown(self, event) {\n if (event.ctrlKey) {\n if (event.buttons == 1) {\n MaskEditorDialogOld.mousedown_x = event.clientX\n MaskEditorDialogOld.mousedown_y = event.clientY\n\n this.mousedown_pan_x = this.pan_x\n this.mousedown_pan_y = this.pan_y\n }\n return\n }\n\n var brush_size = this.brush_size\n if (event instanceof PointerEvent && event.pointerType == 'pen') {\n brush_size *= event.pressure\n this.last_pressure = event.pressure\n }\n\n if ([0, 2, 5].includes(event.button)) {\n self.drawing_mode = true\n\n event.preventDefault()\n\n if (event.shiftKey) {\n self.zoom_lasty = event.clientY\n self.last_zoom_ratio = self.zoom_ratio\n return\n }\n\n const maskRect = self.maskCanvas.getBoundingClientRect()\n const x =\n (event.offsetX || event.targetTouches[0].clientX - maskRect.left) /\n self.zoom_ratio\n const y =\n (event.offsetY || event.targetTouches[0].clientY - maskRect.top) /\n self.zoom_ratio\n\n if (!event.altKey && event.button == 0) {\n self.init_shape(self, CompositionOperation.SourceOver)\n } else {\n self.init_shape(self, CompositionOperation.DestinationOut)\n }\n self.draw_shape(self, x, y, brush_size)\n self.lastx = x\n self.lasty = y\n self.lasttime = performance.now()\n }\n }\n\n init_shape(self, compositionOperation) {\n self.maskCtx.beginPath()\n if (compositionOperation == CompositionOperation.SourceOver) {\n self.maskCtx.fillStyle = this.getMaskFillStyle()\n self.maskCtx.globalCompositeOperation = CompositionOperation.SourceOver\n } else if (compositionOperation == CompositionOperation.DestinationOut) {\n self.maskCtx.globalCompositeOperation =\n CompositionOperation.DestinationOut\n }\n }\n\n draw_shape(self, x, y, brush_size) {\n if (self.pointer_type === PointerType.Rect) {\n self.maskCtx.rect(\n x - brush_size,\n y - brush_size,\n brush_size * 2,\n brush_size * 2\n )\n } else {\n self.maskCtx.arc(x, y, brush_size, 0, Math.PI * 2, false)\n }\n self.maskCtx.fill()\n }\n\n async save() {\n const backupCanvas = document.createElement('canvas')\n const backupCtx = backupCanvas.getContext('2d', {\n willReadFrequently: true\n })\n backupCanvas.width = this.image.width\n backupCanvas.height = this.image.height\n\n backupCtx.clearRect(0, 0, backupCanvas.width, backupCanvas.height)\n backupCtx.drawImage(\n this.maskCanvas,\n 0,\n 0,\n this.maskCanvas.width,\n this.maskCanvas.height,\n 0,\n 0,\n backupCanvas.width,\n backupCanvas.height\n )\n\n // paste mask data into alpha channel\n const backupData = backupCtx.getImageData(\n 0,\n 0,\n backupCanvas.width,\n backupCanvas.height\n )\n\n // refine mask image\n for (let i = 0; i < backupData.data.length; i += 4) {\n if (backupData.data[i + 3] == 255) backupData.data[i + 3] = 0\n else backupData.data[i + 3] = 255\n\n backupData.data[i] = 0\n backupData.data[i + 1] = 0\n backupData.data[i + 2] = 0\n }\n\n backupCtx.globalCompositeOperation = CompositionOperation.SourceOver\n backupCtx.putImageData(backupData, 0, 0)\n\n const formData = new FormData()\n const filename = 'clipspace-mask-' + performance.now() + '.png'\n\n const item = {\n filename: filename,\n subfolder: 'clipspace',\n type: 'input'\n }\n\n if (ComfyApp.clipspace.images) ComfyApp.clipspace.images[0] = item\n\n if (ComfyApp.clipspace.widgets) {\n const index = ComfyApp.clipspace.widgets.findIndex(\n (obj) => obj.name === 'image'\n )\n\n if (index >= 0) ComfyApp.clipspace.widgets[index].value = item\n }\n\n const dataURL = backupCanvas.toDataURL()\n const blob = dataURLToBlob(dataURL)\n\n let original_url = new URL(this.image.src)\n\n type Ref = { filename: string; subfolder?: string; type?: string }\n\n const original_ref: Ref = {\n filename: original_url.searchParams.get('filename')\n }\n\n let original_subfolder = original_url.searchParams.get('subfolder')\n if (original_subfolder) original_ref.subfolder = original_subfolder\n\n let original_type = original_url.searchParams.get('type')\n if (original_type) original_ref.type = original_type\n\n formData.append('image', blob, filename)\n formData.append('original_ref', JSON.stringify(original_ref))\n formData.append('type', 'input')\n formData.append('subfolder', 'clipspace')\n\n this.saveButton.innerText = 'Saving...'\n this.saveButton.disabled = true\n await uploadMask(item, formData)\n ComfyApp.onClipspaceEditorSave()\n this.close()\n }\n}\n","import { app } from '../../scripts/app'\nimport { ComfyDialog, $el } from '../../scripts/ui'\nimport { ComfyApp } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport { ClipspaceDialog } from './clipspace'\nimport { MaskEditorDialogOld } from './maskEditorOld'\n\nvar styles = `\n #maskEditorContainer {\n display: fixed;\n }\n #maskEditor_brush {\n position: absolute;\n backgroundColor: transparent;\n z-index: 8889;\n pointer-events: none;\n border-radius: 50%;\n overflow: visible;\n outline: 1px dashed black;\n box-shadow: 0 0 0 1px white;\n }\n #maskEditor_brushPreviewGradient {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n display: none;\n }\n #maskEditor {\n display: block;\n width: 100%;\n height: 100vh;\n left: 0;\n z-index: 8888;\n position: fixed;\n background: rgba(50,50,50,0.75);\n backdrop-filter: blur(10px);\n overflow: hidden;\n user-select: none;\n }\n #maskEditor_sidePanelContainer {\n height: 100%;\n width: 220px;\n z-index: 8888;\n display: flex;\n flex-direction: column;\n }\n #maskEditor_sidePanel {\n background: var(--comfy-menu-bg);\n height: 100%;\n display: flex;\n align-items: center;\n overflow-y: hidden;\n width: 220px;\n }\n #maskEditor_sidePanelShortcuts {\n display: flex;\n flex-direction: row;\n width: 200px;\n margin-top: 10px;\n gap: 10px;\n justify-content: center;\n }\n .maskEditor_sidePanelIconButton {\n width: 40px;\n height: 40px;\n pointer-events: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: background-color 0.1s;\n }\n .maskEditor_sidePanelIconButton:hover {\n background-color: rgba(0, 0, 0, 0.2);\n }\n #maskEditor_sidePanelBrushSettings {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 200px;\n padding: 10px;\n }\n .maskEditor_sidePanelTitle {\n text-align: center;\n font-size: 15px;\n font-family: sans-serif;\n color: var(--descrip-text);\n margin-top: 10px;\n }\n #maskEditor_sidePanelBrushShapeContainer {\n display: flex;\n width: 180px;\n height: 50px;\n border: 1px solid var(--border-color);\n pointer-events: auto;\n background: rgba(0, 0, 0, 0.2);\n }\n #maskEditor_sidePanelBrushShapeCircle {\n width: 35px;\n height: 35px;\n border-radius: 50%;\n border: 1px solid var(--border-color);\n pointer-events: auto;\n transition: background 0.1s;\n margin-left: 7.5px;\n }\n .maskEditor_sidePanelBrushRange {\n width: 180px;\n -webkit-appearance: none;\n appearance: none;\n background: transparent;\n cursor: pointer;\n }\n .maskEditor_sidePanelBrushRange::-webkit-slider-thumb {\n height: 20px;\n width: 20px;\n border-radius: 50%;\n cursor: grab;\n margin-top: -8px;\n background: var(--p-surface-700);\n border: 1px solid var(--border-color);\n }\n .maskEditor_sidePanelBrushRange::-moz-range-thumb {\n height: 20px;\n width: 20px;\n border-radius: 50%;\n cursor: grab;\n background: var(--p-surface-800);\n border: 1px solid var(--border-color);\n }\n .maskEditor_sidePanelBrushRange::-webkit-slider-runnable-track {\n background: var(--p-surface-700);\n height: 3px;\n }\n .maskEditor_sidePanelBrushRange::-moz-range-track {\n background: var(--p-surface-700);\n height: 3px;\n }\n\n #maskEditor_sidePanelBrushShapeSquare {\n width: 35px;\n height: 35px;\n margin: 5px;\n border: 1px solid var(--border-color);\n pointer-events: auto;\n transition: background 0.1s;\n }\n\n .maskEditor_brushShape_dark {\n background: transparent;\n }\n\n .maskEditor_brushShape_dark:hover {\n background: var(--p-surface-900);\n }\n\n .maskEditor_brushShape_light {\n background: transparent;\n }\n\n .maskEditor_brushShape_light:hover {\n background: var(--comfy-menu-bg);\n }\n\n #maskEditor_sidePanelImageLayerSettings {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 200px;\n align-items: center;\n }\n .maskEditor_sidePanelLayer {\n display: flex;\n width: 200px;\n height: 50px;\n }\n .maskEditor_sidePanelLayerVisibilityContainer {\n width: 50px;\n height: 50px;\n border-radius: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .maskEditor_sidePanelVisibilityToggle {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n pointer-events: auto;\n }\n .maskEditor_sidePanelLayerIconContainer {\n width: 60px;\n height: 50px;\n border-radius: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n fill: var(--input-text);\n }\n .maskEditor_sidePanelLayerIconContainer svg {\n width: 30px;\n height: 30px;\n }\n #maskEditor_sidePanelMaskLayerBlendingContainer {\n width: 80px;\n height: 50px;\n border-radius: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n #maskEditor_sidePanelMaskLayerBlendingSelect {\n width: 80px;\n height: 30px;\n border: 1px solid var(--border-color);\n background-color: rgba(0, 0, 0, 0.2);\n color: var(--input-text);\n font-family: sans-serif;\n font-size: 15px;\n pointer-events: auto;\n transition: background-color border 0.1s;\n }\n #maskEditor_sidePanelClearCanvasButton:hover {\n background-color: var(--p-overlaybadge-outline-color);\n border: none;\n }\n #maskEditor_sidePanelClearCanvasButton {\n width: 180px;\n height: 30px;\n border: none;\n background: rgba(0, 0, 0, 0.2);\n border: 1px solid var(--border-color);\n color: var(--input-text);\n font-family: sans-serif;\n font-size: 15px;\n pointer-events: auto;\n transition: background-color 0.1s;\n }\n #maskEditor_sidePanelClearCanvasButton:hover {\n background-color: var(--p-overlaybadge-outline-color);\n }\n #maskEditor_sidePanelHorizontalButtonContainer {\n display: flex;\n gap: 10px;\n height: 40px;\n }\n .maskEditor_sidePanelBigButton {\n width: 85px;\n height: 30px;\n border: none;\n background: rgba(0, 0, 0, 0.2);\n border: 1px solid var(--border-color);\n color: var(--input-text);\n font-family: sans-serif;\n font-size: 15px;\n pointer-events: auto;\n transition: background-color border 0.1s;\n }\n .maskEditor_sidePanelBigButton:hover {\n background-color: var(--p-overlaybadge-outline-color);\n border: none;\n }\n #maskEditor_toolPanel {\n height: 100%;\n width: var(--sidebar-width);\n z-index: 8888;\n background: var(--comfy-menu-bg);\n display: flex;\n flex-direction: column;\n }\n .maskEditor_toolPanelContainer {\n width: var(--sidebar-width);\n height: var(--sidebar-width);\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n transition: background-color 0.2s;\n }\n .maskEditor_toolPanelContainerSelected svg {\n fill: var(--p-button-text-primary-color) !important;\n }\n .maskEditor_toolPanelContainerSelected .maskEditor_toolPanelIndicator {\n display: block;\n }\n .maskEditor_toolPanelContainer svg {\n width: 75%;\n aspect-ratio: 1/1;\n fill: var(--p-button-text-secondary-color);\n }\n\n .maskEditor_toolPanelContainerDark:hover {\n background-color: var(--p-surface-800);\n }\n\n .maskEditor_toolPanelContainerLight:hover {\n background-color: var(--p-surface-300);\n }\n\n .maskEditor_toolPanelIndicator {\n display: none;\n height: 100%;\n width: 4px;\n position: absolute;\n left: 0;\n background: var(--p-button-text-primary-color);\n }\n #maskEditor_sidePanelPaintBucketSettings {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 200px;\n padding: 10px;\n }\n #canvasBackground {\n background: white;\n width: 100%;\n height: 100%;\n }\n #maskEditor_sidePanelButtonsContainer {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 10px;\n }\n .maskEditor_sidePanelSeparator {\n width: 200px;\n height: 2px;\n background: var(--border-color);\n margin-top: 5px;\n margin-bottom: 5px;\n }\n #maskEditor_pointerZone {\n width: calc(100% - var(--sidebar-width) - 220px);\n height: 100%;\n }\n #maskEditor_uiContainer {\n width: 100%;\n height: 100%;\n position: absolute;\n z-index: 8888;\n display: flex;\n flex-direction: column;\n }\n #maskEditorCanvasContainer {\n position: absolute;\n width: 1000px;\n height: 667px;\n left: 359px;\n top: 280px;\n }\n #imageCanvas {\n width: 100%;\n height: 100%;\n }\n #maskCanvas {\n width: 100%;\n height: 100%;\n }\n #maskEditor_uiHorizontalContainer {\n width: 100%;\n height: 100%;\n display: flex;\n }\n #maskEditor_topBar {\n display: flex;\n height: 44px;\n align-items: center;\n background: var(--comfy-menu-bg);\n }\n #maskEditor_topBarTitle {\n margin: 0;\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n font-size: 1.2em;\n }\n #maskEditor_topBarButtonContainer {\n display: flex;\n gap: 10px;\n margin-right: 0.5rem;\n position: absolute;\n right: 0;\n width: 200px;\n }\n #maskEditor_topBarShortcutsContainer {\n display: flex;\n gap: 10px;\n margin-left: 5px;\n }\n\n .maskEditor_topPanelIconButton_dark {\n width: 50px;\n height: 30px;\n pointer-events: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: background-color 0.1s;\n background: var(--p-surface-800);\n border: 1px solid var(--p-form-field-border-color);\n border-radius: 10px;\n }\n\n .maskEditor_topPanelIconButton_dark:hover {\n background-color: var(--p-surface-900);\n }\n\n .maskEditor_topPanelIconButton_dark svg {\n width: 25px;\n height: 25px;\n pointer-events: none;\n fill: var(--input-text);\n }\n\n .maskEditor_topPanelIconButton_light {\n width: 50px;\n height: 30px;\n pointer-events: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: background-color 0.1s;\n background: var(--comfy-menu-bg);\n border: 1px solid var(--p-form-field-border-color);\n border-radius: 10px;\n }\n\n .maskEditor_topPanelIconButton_light:hover {\n background-color: var(--p-surface-300);\n }\n\n .maskEditor_topPanelIconButton_light svg {\n width: 25px;\n height: 25px;\n pointer-events: none;\n fill: var(--input-text);\n }\n\n .maskEditor_topPanelButton_dark {\n height: 30px;\n background: var(--p-surface-800);\n border: 1px solid var(--p-form-field-border-color);\n border-radius: 10px;\n color: var(--input-text);\n font-family: sans-serif;\n pointer-events: auto;\n transition: 0.1s;\n width: 60px;\n }\n\n .maskEditor_topPanelButton_dark:hover {\n background-color: var(--p-surface-900);\n }\n\n .maskEditor_topPanelButton_light {\n height: 30px;\n background: var(--comfy-menu-bg);\n border: 1px solid var(--p-form-field-border-color);\n border-radius: 10px;\n color: var(--input-text);\n font-family: sans-serif;\n pointer-events: auto;\n transition: 0.1s;\n width: 60px;\n }\n\n .maskEditor_topPanelButton_light:hover {\n background-color: var(--p-surface-300);\n }\n\n\n #maskEditor_sidePanelColorSelectSettings {\n flex-direction: column;\n }\n \n .maskEditor_sidePanel_paintBucket_Container {\n width: 180px;\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .maskEditor_sidePanel_colorSelect_Container {\n display: flex;\n width: 180px;\n align-items: center;\n gap: 5px;\n height: 30px;\n }\n \n #maskEditor_sidePanelVisibilityToggle {\n position: absolute;\n right: 0;\n }\n\n #maskEditor_sidePanelColorSelectMethodSelect {\n position: absolute;\n right: 0;\n height: 30px;\n border-radius: 0;\n border: 1px solid var(--border-color);\n background: rgba(0,0,0,0.2);\n }\n\n #maskEditor_sidePanelVisibilityToggle {\n position: absolute;\n right: 0;\n }\n\n .maskEditor_sidePanel_colorSelect_tolerance_container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 10px;\n }\n\n .maskEditor_sidePanelContainerColumn {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .maskEditor_sidePanelContainerRow {\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n min-height: 24px;\n position: relative;\n }\n\n .maskEditor_accent_bg_dark {\n background: var(--p-surface-800);\n }\n\n .maskEditor_accent_bg_very_dark {\n background: var(--p-surface-900);\n }\n\n .maskEditor_accent_bg_light {\n background: var(--p-surface-300);\n }\n\n .maskEditor_accent_bg_very_light {\n background: var(--comfy-menu-bg);\n }\n\n #maskEditor_paintBucketSettings {\n display: none;\n }\n\n #maskEditor_colorSelectSettings {\n display: none;\n }\n\n .maskEditor_sidePanelToggleContainer {\n cursor: pointer;\n display: inline-block;\n position: absolute;\n right: 0;\n }\n\n .maskEditor_toggle_bg_dark {\n background: var(--p-surface-700);\n }\n\n .maskEditor_toggle_bg_light {\n background: var(--p-surface-300);\n }\n\n .maskEditor_sidePanelToggleSwitch {\n display: inline-block;\n border-radius: 16px;\n width: 40px;\n height: 24px;\n position: relative;\n vertical-align: middle;\n transition: background 0.25s;\n }\n .maskEditor_sidePanelToggleSwitch:before, .maskEditor_sidePanelToggleSwitch:after {\n content: \"\";\n }\n .maskEditor_sidePanelToggleSwitch:before {\n display: block;\n background: linear-gradient(to bottom, #fff 0%, #eee 100%);\n border-radius: 50%;\n width: 16px;\n height: 16px;\n position: absolute;\n top: 4px;\n left: 4px;\n transition: ease 0.2s;\n }\n .maskEditor_sidePanelToggleContainer:hover .maskEditor_sidePanelToggleSwitch:before {\n background: linear-gradient(to bottom, #fff 0%, #fff 100%);\n }\n .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_sidePanelToggleSwitch {\n background: var(--p-button-text-primary-color);\n }\n .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_toggle_bg_dark:before {\n background: var(--p-surface-900);\n }\n .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_toggle_bg_light:before {\n background: var(--comfy-menu-bg);\n }\n .maskEditor_sidePanelToggleCheckbox:checked + .maskEditor_sidePanelToggleSwitch:before {\n left: 20px;\n }\n\n .maskEditor_sidePanelToggleCheckbox {\n position: absolute;\n visibility: hidden;\n }\n\n .maskEditor_sidePanelDropdown_dark {\n border: 1px solid var(--p-form-field-border-color);\n background: var(--p-surface-900);\n height: 24px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 6px;\n transition: background 0.1s;\n }\n\n .maskEditor_sidePanelDropdown_dark option {\n background: var(--p-surface-900);\n }\n\n .maskEditor_sidePanelDropdown_dark:focus {\n outline: 1px solid var(--p-button-text-primary-color);\n }\n\n .maskEditor_sidePanelDropdown_dark option:hover {\n background: white;\n }\n .maskEditor_sidePanelDropdown_dark option:active {\n background: var(--p-highlight-background);\n }\n\n .maskEditor_sidePanelDropdown_light {\n border: 1px solid var(--p-form-field-border-color);\n background: var(--comfy-menu-bg);\n height: 24px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 6px;\n transition: background 0.1s;\n }\n\n .maskEditor_sidePanelDropdown_light option {\n background: var(--comfy-menu-bg);\n }\n\n .maskEditor_sidePanelDropdown_light:focus {\n outline: 1px solid var(--p-surface-300);\n }\n\n .maskEditor_sidePanelDropdown_light option:hover {\n background: white;\n }\n .maskEditor_sidePanelDropdown_light option:active {\n background: var(--p-surface-300);\n }\n\n .maskEditor_layerRow {\n height: 50px;\n width: 200px;\n border-radius: 10px;\n }\n\n .maskEditor_sidePanelLayerPreviewContainer {\n width: 40px;\n height: 30px;\n }\n\n .maskEditor_sidePanelLayerPreviewContainer > svg{\n width: 100%;\n height: 100%;\n object-fit: contain;\n fill: var(--p-surface-100);\n }\n\n #maskEditor_sidePanelImageLayerImage {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n .maskEditor_sidePanelSubTitle {\n text-align: left;\n font-size: 12px;\n font-family: sans-serif;\n color: var(--descrip-text);\n }\n\n .maskEditor_containerDropdown {\n position: absolute;\n right: 0;\n }\n\n .maskEditor_sidePanelLayerCheckbox {\n margin-left: 15px;\n }\n\n .maskEditor_toolPanelZoomIndicator {\n width: var(--sidebar-width);\n height: var(--sidebar-width);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 5px;\n color: var(--p-button-text-secondary-color);\n position: absolute;\n bottom: 0;\n transition: background-color 0.2s;\n }\n\n #maskEditor_toolPanelDimensionsText {\n font-size: 12px;\n }\n\n #maskEditor_topBarSaveButton {\n background: var(--p-primary-color) !important;\n color: var(--p-button-primary-color) !important;\n }\n\n #maskEditor_topBarSaveButton:hover {\n background: var(--p-primary-hover-color) !important;\n }\n\n`\n\nvar styleSheet = document.createElement('style')\nstyleSheet.type = 'text/css'\nstyleSheet.innerText = styles\ndocument.head.appendChild(styleSheet)\n\nenum BrushShape {\n Arc = 'arc',\n Rect = 'rect'\n}\n\nenum Tools {\n Pen = 'pen',\n Eraser = 'eraser',\n PaintBucket = 'paintBucket',\n ColorSelect = 'colorSelect'\n}\n\nenum CompositionOperation {\n SourceOver = 'source-over',\n DestinationOut = 'destination-out'\n}\n\nenum MaskBlendMode {\n Black = 'black',\n White = 'white',\n Negative = 'negative'\n}\n\nenum ColorComparisonMethod {\n Simple = 'simple',\n HSL = 'hsl',\n LAB = 'lab'\n}\n\ninterface Point {\n x: number\n y: number\n}\n\ninterface Offset {\n x: number\n y: number\n}\n\nexport interface Brush {\n size: number\n opacity: number\n hardness: number\n type: BrushShape\n}\n\ntype Callback = (data?: any) => void\n\nclass MaskEditorDialog extends ComfyDialog {\n static instance: MaskEditorDialog | null = null\n\n //new\n private uiManager!: UIManager\n private toolManager!: ToolManager\n private panAndZoomManager!: PanAndZoomManager\n private brushTool!: BrushTool\n private paintBucketTool!: PaintBucketTool\n private colorSelectTool!: ColorSelectTool\n private canvasHistory!: CanvasHistory\n private messageBroker!: MessageBroker\n private keyboardManager!: KeyboardManager\n\n private rootElement!: HTMLElement\n private imageURL!: string\n\n private isLayoutCreated: boolean = false\n private isOpen: boolean = false\n\n //variables needed?\n last_display_style: string | null = null\n\n constructor() {\n super()\n this.rootElement = $el(\n 'div.maskEditor_hidden',\n { parent: document.body },\n []\n )\n\n this.element = this.rootElement\n }\n\n static getInstance() {\n if (!ComfyApp.clipspace || !ComfyApp.clipspace.imgs) {\n throw new Error('No clipspace images found')\n }\n const currentSrc =\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src\n\n if (\n !MaskEditorDialog.instance ||\n currentSrc !== MaskEditorDialog.instance.imageURL\n ) {\n MaskEditorDialog.instance = new MaskEditorDialog()\n }\n return MaskEditorDialog.instance\n }\n\n async show() {\n this.cleanup()\n if (!this.isLayoutCreated) {\n // layout\n this.messageBroker = new MessageBroker()\n this.canvasHistory = new CanvasHistory(this, 20)\n this.paintBucketTool = new PaintBucketTool(this)\n this.brushTool = new BrushTool(this)\n this.panAndZoomManager = new PanAndZoomManager(this)\n this.toolManager = new ToolManager(this)\n this.keyboardManager = new KeyboardManager(this)\n this.uiManager = new UIManager(this.rootElement, this)\n this.colorSelectTool = new ColorSelectTool(this)\n\n // replacement of onClose hook since close is not real close\n const self = this\n const observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'style'\n ) {\n if (\n self.last_display_style &&\n self.last_display_style != 'none' &&\n self.element.style.display == 'none'\n ) {\n //self.brush.style.display = 'none'\n ComfyApp.onClipspaceEditorClosed()\n }\n\n self.last_display_style = self.element.style.display\n }\n })\n })\n\n const config = { attributes: true }\n observer.observe(this.rootElement, config)\n\n this.isLayoutCreated = true\n\n await this.uiManager.setlayout()\n }\n\n //this.zoomAndPanManager.reset()\n\n this.rootElement.id = 'maskEditor'\n this.rootElement.style.display = 'flex'\n this.element.style.display = 'flex'\n await this.uiManager.initUI()\n this.paintBucketTool.initPaintBucketTool()\n this.colorSelectTool.initColorSelectTool()\n await this.canvasHistory.saveInitialState()\n this.isOpen = true\n if (ComfyApp.clipspace && ComfyApp.clipspace.imgs) {\n this.uiManager.setSidebarImage()\n }\n this.keyboardManager.addListeners()\n }\n\n private cleanup() {\n // Remove all maskEditor elements\n const maskEditors = document.querySelectorAll('[id^=\"maskEditor\"]')\n maskEditors.forEach((element) => element.remove())\n\n // Remove brush elements specifically\n const brushElements = document.querySelectorAll('#maskEditor_brush')\n brushElements.forEach((element) => element.remove())\n }\n\n isOpened() {\n return this.isOpen\n }\n\n async save() {\n const backupCanvas = document.createElement('canvas')\n const imageCanvas = this.uiManager.getImgCanvas()\n const maskCanvas = this.uiManager.getMaskCanvas()\n const image = this.uiManager.getImage()\n const backupCtx = backupCanvas.getContext('2d', {\n willReadFrequently: true\n })\n\n backupCanvas.width = imageCanvas.width\n backupCanvas.height = imageCanvas.height\n\n if (!backupCtx) {\n return\n }\n\n // Ensure the mask image is fully loaded\n const maskImageLoaded = new Promise((resolve, reject) => {\n const maskImage = new Image()\n maskImage.src = maskCanvas.toDataURL()\n maskImage.onload = () => {\n resolve()\n }\n maskImage.onerror = (error) => {\n reject(error)\n }\n })\n\n try {\n await maskImageLoaded\n } catch (error) {\n console.error('Error loading mask image:', error)\n return\n }\n\n backupCtx.clearRect(0, 0, backupCanvas.width, backupCanvas.height)\n backupCtx.drawImage(\n maskCanvas,\n 0,\n 0,\n maskCanvas.width,\n maskCanvas.height,\n 0,\n 0,\n backupCanvas.width,\n backupCanvas.height\n )\n\n let maskHasContent = false\n const maskData = backupCtx.getImageData(\n 0,\n 0,\n backupCanvas.width,\n backupCanvas.height\n )\n\n for (let i = 0; i < maskData.data.length; i += 4) {\n if (maskData.data[i + 3] !== 0) {\n maskHasContent = true\n break\n }\n }\n\n // paste mask data into alpha channel\n const backupData = backupCtx.getImageData(\n 0,\n 0,\n backupCanvas.width,\n backupCanvas.height\n )\n\n let backupHasContent = false\n for (let i = 0; i < backupData.data.length; i += 4) {\n if (backupData.data[i + 3] !== 0) {\n backupHasContent = true\n break\n }\n }\n\n if (maskHasContent && !backupHasContent) {\n console.error('Mask appears to be empty')\n alert('Cannot save empty mask')\n return\n }\n\n // refine mask image\n for (let i = 0; i < backupData.data.length; i += 4) {\n const alpha = backupData.data[i + 3]\n backupData.data[i] = 0\n backupData.data[i + 1] = 0\n backupData.data[i + 2] = 0\n backupData.data[i + 3] = 255 - alpha\n }\n\n backupCtx.globalCompositeOperation = CompositionOperation.SourceOver\n backupCtx.putImageData(backupData, 0, 0)\n\n const formData = new FormData()\n const filename = 'clipspace-mask-' + performance.now() + '.png'\n\n const item = {\n filename: filename,\n subfolder: 'clipspace',\n type: 'input'\n }\n\n if (ComfyApp?.clipspace?.widgets?.length) {\n const index = ComfyApp.clipspace.widgets.findIndex(\n (obj) => obj?.name === 'image'\n )\n\n if (index >= 0 && item !== undefined) {\n try {\n ComfyApp.clipspace.widgets[index].value = item\n } catch (err) {\n console.warn('Failed to set widget value:', err)\n }\n }\n }\n\n const dataURL = backupCanvas.toDataURL()\n const blob = this.dataURLToBlob(dataURL)\n\n let original_url = new URL(image.src)\n\n type Ref = { filename: string; subfolder?: string; type?: string }\n\n this.uiManager.setBrushOpacity(0)\n\n const filenameRef = original_url.searchParams.get('filename')\n if (!filenameRef) {\n throw new Error('filename parameter is required')\n }\n const original_ref: Ref = {\n filename: filenameRef\n }\n\n let original_subfolder = original_url.searchParams.get('subfolder')\n if (original_subfolder) original_ref.subfolder = original_subfolder\n\n let original_type = original_url.searchParams.get('type')\n if (original_type) original_ref.type = original_type\n\n formData.append('image', blob, filename)\n formData.append('original_ref', JSON.stringify(original_ref))\n formData.append('type', 'input')\n formData.append('subfolder', 'clipspace')\n\n this.uiManager.setSaveButtonText('Saving')\n this.uiManager.setSaveButtonEnabled(false)\n this.keyboardManager.removeListeners()\n\n // Retry mechanism\n const maxRetries = 3\n let attempt = 0\n let success = false\n\n while (attempt < maxRetries && !success) {\n try {\n await this.uploadMask(item, formData)\n success = true\n } catch (error) {\n console.error(`Upload attempt ${attempt + 1} failed:`, error)\n attempt++\n if (attempt < maxRetries) {\n console.log('Retrying upload...')\n } else {\n console.log('Max retries reached. Upload failed.')\n }\n }\n }\n\n if (success) {\n ComfyApp.onClipspaceEditorSave()\n this.close()\n this.isOpen = false\n } else {\n this.uiManager.setSaveButtonText('Save')\n this.uiManager.setSaveButtonEnabled(true)\n this.keyboardManager.addListeners()\n }\n }\n\n getMessageBroker() {\n return this.messageBroker\n }\n\n // Helper function to convert a data URL to a Blob object\n private dataURLToBlob(dataURL: string) {\n const parts = dataURL.split(';base64,')\n const contentType = parts[0].split(':')[1]\n const byteString = atob(parts[1])\n const arrayBuffer = new ArrayBuffer(byteString.length)\n const uint8Array = new Uint8Array(arrayBuffer)\n for (let i = 0; i < byteString.length; i++) {\n uint8Array[i] = byteString.charCodeAt(i)\n }\n return new Blob([arrayBuffer], { type: contentType })\n }\n\n private async uploadMask(\n filepath: { filename: string; subfolder: string; type: string },\n formData: FormData,\n retries = 3\n ) {\n if (retries <= 0) {\n throw new Error('Max retries reached')\n return\n }\n await api\n .fetchApi('/upload/mask', {\n method: 'POST',\n body: formData\n })\n .then((response) => {\n if (!response.ok) {\n console.log('Failed to upload mask:', response)\n this.uploadMask(filepath, formData, 2)\n }\n })\n .catch((error) => {\n console.error('Error:', error)\n })\n\n try {\n const selectedIndex = ComfyApp.clipspace?.selectedIndex\n if (ComfyApp.clipspace?.imgs && selectedIndex !== undefined) {\n // Create and set new image\n const newImage = new Image()\n newImage.src = api.apiURL(\n '/view?' +\n new URLSearchParams(filepath).toString() +\n app.getPreviewFormatParam() +\n app.getRandParam()\n )\n ComfyApp.clipspace.imgs[selectedIndex] = newImage\n\n // Update images array if it exists\n if (ComfyApp.clipspace.images) {\n ComfyApp.clipspace.images[selectedIndex] = filepath\n }\n }\n } catch (err) {\n console.warn('Failed to update clipspace image:', err)\n }\n ClipspaceDialog.invalidatePreview()\n }\n}\n\nclass CanvasHistory {\n private maskEditor!: MaskEditorDialog\n private messageBroker!: MessageBroker\n\n private canvas!: HTMLCanvasElement\n private ctx!: CanvasRenderingContext2D\n private states: ImageData[] = []\n private currentStateIndex: number = -1\n private maxStates: number = 20\n private initialized: boolean = false\n\n constructor(maskEditor: MaskEditorDialog, maxStates = 20) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.maxStates = maxStates\n this.createListeners()\n }\n\n private async pullCanvas() {\n this.canvas = await this.messageBroker.pull('maskCanvas')\n this.ctx = await this.messageBroker.pull('maskCtx')\n }\n\n private createListeners() {\n this.messageBroker.subscribe('saveState', () => this.saveState())\n this.messageBroker.subscribe('undo', () => this.undo())\n this.messageBroker.subscribe('redo', () => this.redo())\n }\n\n clearStates() {\n this.states = []\n this.currentStateIndex = -1\n this.initialized = false\n }\n\n async saveInitialState() {\n await this.pullCanvas()\n if (!this.canvas.width || !this.canvas.height) {\n // Canvas not ready yet, defer initialization\n requestAnimationFrame(() => this.saveInitialState())\n return\n }\n\n this.clearStates()\n const state = this.ctx.getImageData(\n 0,\n 0,\n this.canvas.width,\n this.canvas.height\n )\n\n this.states.push(state)\n this.currentStateIndex = 0\n this.initialized = true\n }\n\n saveState() {\n // Ensure we have an initial state\n if (!this.initialized || this.currentStateIndex === -1) {\n this.saveInitialState()\n return\n }\n\n this.states = this.states.slice(0, this.currentStateIndex + 1)\n const state = this.ctx.getImageData(\n 0,\n 0,\n this.canvas.width,\n this.canvas.height\n )\n this.states.push(state)\n this.currentStateIndex++\n\n if (this.states.length > this.maxStates) {\n this.states.shift()\n this.currentStateIndex--\n }\n }\n\n undo() {\n if (this.states.length > 1 && this.currentStateIndex > 0) {\n this.currentStateIndex--\n this.restoreState(this.states[this.currentStateIndex])\n } else {\n alert('No more undo states available')\n }\n }\n\n redo() {\n if (\n this.states.length > 1 &&\n this.currentStateIndex < this.states.length - 1\n ) {\n this.currentStateIndex++\n this.restoreState(this.states[this.currentStateIndex])\n } else {\n alert('No more redo states available')\n }\n }\n\n restoreState(state: ImageData) {\n if (state && this.initialized) {\n this.ctx.putImageData(state, 0, 0)\n }\n }\n}\n\nclass PaintBucketTool {\n maskEditor: MaskEditorDialog\n messageBroker: MessageBroker\n\n private canvas!: HTMLCanvasElement\n private ctx!: CanvasRenderingContext2D\n private width: number | null = null\n private height: number | null = null\n private imageData: ImageData | null = null\n private data: Uint8ClampedArray | null = null\n private tolerance: number = 5\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.createListeners()\n this.addPullTopics()\n }\n\n initPaintBucketTool() {\n this.pullCanvas()\n }\n\n private async pullCanvas() {\n this.canvas = await this.messageBroker.pull('maskCanvas')\n this.ctx = await this.messageBroker.pull('maskCtx')\n }\n\n private createListeners() {\n this.messageBroker.subscribe(\n 'setPaintBucketTolerance',\n (tolerance: number) => this.setTolerance(tolerance)\n )\n\n this.messageBroker.subscribe('paintBucketFill', (point: Point) =>\n this.floodFill(point)\n )\n\n this.messageBroker.subscribe('invert', () => this.invertMask())\n }\n\n private addPullTopics() {\n this.messageBroker.createPullTopic(\n 'getTolerance',\n async () => this.tolerance\n )\n }\n\n private getPixel(x: number, y: number): number {\n return this.data![(y * this.width! + x) * 4 + 3]\n }\n\n private setPixel(\n x: number,\n y: number,\n alpha: number,\n color: { r: number; g: number; b: number }\n ): void {\n const index = (y * this.width! + x) * 4\n this.data![index] = color.r // R\n this.data![index + 1] = color.g // G\n this.data![index + 2] = color.b // B\n this.data![index + 3] = alpha // A\n }\n\n private shouldProcessPixel(\n currentAlpha: number,\n targetAlpha: number,\n tolerance: number,\n isFillMode: boolean\n ): boolean {\n if (currentAlpha === -1) return false\n\n if (isFillMode) {\n // Fill mode: process pixels that are empty/similar to target\n return (\n currentAlpha !== 255 &&\n Math.abs(currentAlpha - targetAlpha) <= tolerance\n )\n } else {\n // Erase mode: process pixels that are filled/similar to target\n return (\n currentAlpha === 255 ||\n Math.abs(currentAlpha - targetAlpha) <= tolerance\n )\n }\n }\n\n private async floodFill(point: Point): Promise {\n let startX = Math.floor(point.x)\n let startY = Math.floor(point.y)\n this.width = this.canvas.width\n this.height = this.canvas.height\n\n if (\n startX < 0 ||\n startX >= this.width ||\n startY < 0 ||\n startY >= this.height\n ) {\n return\n }\n\n this.imageData = this.ctx.getImageData(0, 0, this.width, this.height)\n this.data = this.imageData.data\n\n const targetAlpha = this.getPixel(startX, startY)\n const isFillMode = targetAlpha !== 255 // Determine mode based on clicked pixel\n\n if (targetAlpha === -1) return\n\n const maskColor = await this.messageBroker.pull('getMaskColor')\n const stack: Array<[number, number]> = []\n const visited = new Uint8Array(this.width * this.height)\n\n if (\n this.shouldProcessPixel(\n targetAlpha,\n targetAlpha,\n this.tolerance,\n isFillMode\n )\n ) {\n stack.push([startX, startY])\n }\n\n while (stack.length > 0) {\n const [x, y] = stack.pop()!\n const visitedIndex = y * this.width + x\n\n if (visited[visitedIndex]) continue\n\n const currentAlpha = this.getPixel(x, y)\n if (\n !this.shouldProcessPixel(\n currentAlpha,\n targetAlpha,\n this.tolerance,\n isFillMode\n )\n ) {\n continue\n }\n\n visited[visitedIndex] = 1\n // Set alpha to 255 for fill mode, 0 for erase mode\n this.setPixel(x, y, isFillMode ? 255 : 0, maskColor)\n\n // Check neighbors\n const checkNeighbor = (nx: number, ny: number) => {\n if (nx < 0 || nx >= this.width! || ny < 0 || ny >= this.height!) return\n if (!visited[ny * this.width! + nx]) {\n const alpha = this.getPixel(nx, ny)\n if (\n this.shouldProcessPixel(\n alpha,\n targetAlpha,\n this.tolerance,\n isFillMode\n )\n ) {\n stack.push([nx, ny])\n }\n }\n }\n\n checkNeighbor(x - 1, y) // Left\n checkNeighbor(x + 1, y) // Right\n checkNeighbor(x, y - 1) // Up\n checkNeighbor(x, y + 1) // Down\n }\n\n this.ctx.putImageData(this.imageData, 0, 0)\n this.imageData = null\n this.data = null\n }\n\n setTolerance(tolerance: number): void {\n this.tolerance = tolerance\n }\n\n getTolerance(): number {\n return this.tolerance\n }\n\n //invert mask\n\n private invertMask() {\n const imageData = this.ctx.getImageData(\n 0,\n 0,\n this.canvas.width,\n this.canvas.height\n )\n const data = imageData.data\n\n // Find first non-transparent pixel to get mask color\n let maskR = 0,\n maskG = 0,\n maskB = 0\n for (let i = 0; i < data.length; i += 4) {\n if (data[i + 3] > 0) {\n maskR = data[i]\n maskG = data[i + 1]\n maskB = data[i + 2]\n break\n }\n }\n\n // Process each pixel\n for (let i = 0; i < data.length; i += 4) {\n const alpha = data[i + 3]\n // Invert alpha channel (0 becomes 255, 255 becomes 0)\n data[i + 3] = 255 - alpha\n\n // If this was originally transparent (now opaque), fill with mask color\n if (alpha === 0) {\n data[i] = maskR\n data[i + 1] = maskG\n data[i + 2] = maskB\n }\n }\n\n this.ctx.putImageData(imageData, 0, 0)\n this.messageBroker.publish('saveState')\n }\n}\n\nclass ColorSelectTool {\n private maskEditor!: MaskEditorDialog\n private messageBroker!: MessageBroker\n private width: number | null = null\n private height: number | null = null\n private canvas!: HTMLCanvasElement\n private maskCTX!: CanvasRenderingContext2D\n private imageCTX!: CanvasRenderingContext2D\n private maskData: Uint8ClampedArray | null = null\n private imageData: Uint8ClampedArray | null = null\n private tolerance: number = 20\n private livePreview: boolean = false\n private lastPoint: Point | null = null\n private colorComparisonMethod: ColorComparisonMethod =\n ColorComparisonMethod.Simple\n private applyWholeImage: boolean = false\n private maskBoundry: boolean = false\n private maskTolerance: number = 0\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.createListeners()\n this.addPullTopics()\n }\n\n async initColorSelectTool() {\n await this.pullCanvas()\n }\n\n private async pullCanvas() {\n this.canvas = await this.messageBroker.pull('imgCanvas')\n this.maskCTX = await this.messageBroker.pull('maskCtx')\n this.imageCTX = await this.messageBroker.pull('imageCtx')\n }\n\n private createListeners() {\n this.messageBroker.subscribe('colorSelectFill', (point: Point) =>\n this.fillColorSelection(point)\n )\n this.messageBroker.subscribe(\n 'setColorSelectTolerance',\n (tolerance: number) => this.setTolerance(tolerance)\n )\n this.messageBroker.subscribe('setLivePreview', (livePreview: boolean) =>\n this.setLivePreview(livePreview)\n )\n this.messageBroker.subscribe(\n 'setColorComparisonMethod',\n (method: ColorComparisonMethod) => this.setComparisonMethod(method)\n )\n\n this.messageBroker.subscribe('clearLastPoint', () => this.clearLastPoint())\n\n this.messageBroker.subscribe('setWholeImage', (applyWholeImage: boolean) =>\n this.setApplyWholeImage(applyWholeImage)\n )\n\n this.messageBroker.subscribe('setMaskBoundary', (maskBoundry: boolean) =>\n this.setMaskBoundary(maskBoundry)\n )\n\n this.messageBroker.subscribe('setMaskTolerance', (maskTolerance: number) =>\n this.setMaskTolerance(maskTolerance)\n )\n }\n\n private async addPullTopics() {\n this.messageBroker.createPullTopic(\n 'getLivePreview',\n async () => this.livePreview\n )\n }\n\n private getPixel(x: number, y: number): { r: number; g: number; b: number } {\n const index = (y * this.width! + x) * 4\n return {\n r: this.imageData![index],\n g: this.imageData![index + 1],\n b: this.imageData![index + 2]\n }\n }\n\n private getMaskAlpha(x: number, y: number): number {\n return this.maskData![(y * this.width! + x) * 4 + 3]\n }\n\n private isPixelInRange(\n pixel: { r: number; g: number; b: number },\n target: { r: number; g: number; b: number }\n ): boolean {\n switch (this.colorComparisonMethod) {\n case ColorComparisonMethod.Simple:\n return this.isPixelInRangeSimple(pixel, target)\n case ColorComparisonMethod.HSL:\n return this.isPixelInRangeHSL(pixel, target)\n case ColorComparisonMethod.LAB:\n return this.isPixelInRangeLab(pixel, target)\n default:\n return this.isPixelInRangeSimple(pixel, target)\n }\n }\n\n private isPixelInRangeSimple(\n pixel: { r: number; g: number; b: number },\n target: { r: number; g: number; b: number }\n ): boolean {\n //calculate the euclidean distance between the two colors\n const distance = Math.sqrt(\n Math.pow(pixel.r - target.r, 2) +\n Math.pow(pixel.g - target.g, 2) +\n Math.pow(pixel.b - target.b, 2)\n )\n return distance <= this.tolerance\n }\n\n private isPixelInRangeHSL(\n pixel: { r: number; g: number; b: number },\n target: { r: number; g: number; b: number }\n ): boolean {\n // Convert RGB to HSL\n const pixelHSL = this.rgbToHSL(pixel.r, pixel.g, pixel.b)\n const targetHSL = this.rgbToHSL(target.r, target.g, target.b)\n\n // Compare mainly hue and saturation, be more lenient with lightness\n const hueDiff = Math.abs(pixelHSL.h - targetHSL.h)\n const satDiff = Math.abs(pixelHSL.s - targetHSL.s)\n const lightDiff = Math.abs(pixelHSL.l - targetHSL.l)\n\n const distance = Math.sqrt(\n Math.pow((hueDiff / 360) * 255, 2) +\n Math.pow((satDiff / 100) * 255, 2) +\n Math.pow((lightDiff / 100) * 255, 2)\n )\n return distance <= this.tolerance\n }\n\n private rgbToHSL(\n r: number,\n g: number,\n b: number\n ): { h: number; s: number; l: number } {\n r /= 255\n g /= 255\n b /= 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h = 0,\n s = 0,\n l = (max + min) / 2\n\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0)\n break\n case g:\n h = (b - r) / d + 2\n break\n case b:\n h = (r - g) / d + 4\n break\n }\n h /= 6\n }\n\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100\n }\n }\n\n private isPixelInRangeLab(\n pixel: { r: number; g: number; b: number },\n target: { r: number; g: number; b: number }\n ): boolean {\n const pixelLab = this.rgbToLab(pixel)\n const targetLab = this.rgbToLab(target)\n\n // Calculate Delta E (CIE76 formula)\n const deltaE = Math.sqrt(\n Math.pow(pixelLab.l - targetLab.l, 2) +\n Math.pow(pixelLab.a - targetLab.a, 2) +\n Math.pow(pixelLab.b - targetLab.b, 2)\n )\n\n const normalizedDeltaE = (deltaE / 100) * 255\n return normalizedDeltaE <= this.tolerance\n }\n\n private rgbToLab(rgb: { r: number; g: number; b: number }): {\n l: number\n a: number\n b: number\n } {\n // First convert RGB to XYZ\n let r = rgb.r / 255\n let g = rgb.g / 255\n let b = rgb.b / 255\n\n r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92\n g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92\n b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92\n\n r *= 100\n g *= 100\n b *= 100\n\n const x = r * 0.4124 + g * 0.3576 + b * 0.1805\n const y = r * 0.2126 + g * 0.7152 + b * 0.0722\n const z = r * 0.0193 + g * 0.1192 + b * 0.9505\n\n // Then XYZ to Lab\n const xn = 95.047\n const yn = 100.0\n const zn = 108.883\n\n const xyz = [x / xn, y / yn, z / zn]\n for (let i = 0; i < xyz.length; i++) {\n xyz[i] =\n xyz[i] > 0.008856 ? Math.pow(xyz[i], 1 / 3) : 7.787 * xyz[i] + 16 / 116\n }\n\n return {\n l: 116 * xyz[1] - 16,\n a: 500 * (xyz[0] - xyz[1]),\n b: 200 * (xyz[1] - xyz[2])\n }\n }\n\n private setPixel(\n x: number,\n y: number,\n alpha: number,\n color: { r: number; g: number; b: number }\n ): void {\n const index = (y * this.width! + x) * 4\n this.maskData![index] = color.r // R\n this.maskData![index + 1] = color.g // G\n this.maskData![index + 2] = color.b // B\n this.maskData![index + 3] = alpha // A\n }\n\n async fillColorSelection(point: Point) {\n this.width = this.canvas.width\n this.height = this.canvas.height\n this.lastPoint = point\n\n // Get image data\n const maskData = this.maskCTX.getImageData(0, 0, this.width, this.height)\n this.maskData = maskData.data\n this.imageData = this.imageCTX.getImageData(\n 0,\n 0,\n this.width,\n this.height\n ).data\n\n if (this.applyWholeImage) {\n // Process entire image\n const targetPixel = this.getPixel(\n Math.floor(point.x),\n Math.floor(point.y)\n )\n const maskColor = await this.messageBroker.pull('getMaskColor')\n\n // Use TypedArrays for better performance\n const width = this.width!\n const height = this.height!\n\n // Process in chunks for better performance\n const CHUNK_SIZE = 10000\n for (let i = 0; i < width * height; i += CHUNK_SIZE) {\n const endIndex = Math.min(i + CHUNK_SIZE, width * height)\n for (let pixelIndex = i; pixelIndex < endIndex; pixelIndex++) {\n const x = pixelIndex % width\n const y = Math.floor(pixelIndex / width)\n if (this.isPixelInRange(this.getPixel(x, y), targetPixel)) {\n this.setPixel(x, y, 255, maskColor)\n }\n }\n // Allow UI updates between chunks\n await new Promise((resolve) => setTimeout(resolve, 0))\n }\n } else {\n // Original flood fill logic\n let startX = Math.floor(point.x)\n let startY = Math.floor(point.y)\n\n if (\n startX < 0 ||\n startX >= this.width ||\n startY < 0 ||\n startY >= this.height\n ) {\n return\n }\n\n const pixel = this.getPixel(startX, startY)\n\n const stack: Array<[number, number]> = []\n const visited = new Uint8Array(this.width * this.height)\n\n stack.push([startX, startY])\n const maskColor = await this.messageBroker.pull('getMaskColor')\n\n while (stack.length > 0) {\n const [x, y] = stack.pop()!\n const visitedIndex = y * this.width + x\n\n if (\n visited[visitedIndex] ||\n !this.isPixelInRange(this.getPixel(x, y), pixel)\n ) {\n continue\n }\n\n visited[visitedIndex] = 1\n this.setPixel(x, y, 255, maskColor)\n\n // Inline direction checks for better performance\n if (\n x > 0 &&\n !visited[y * this.width + (x - 1)] &&\n this.isPixelInRange(this.getPixel(x - 1, y), pixel)\n ) {\n if (\n !this.maskBoundry ||\n 255 - this.getMaskAlpha(x - 1, y) > this.maskTolerance\n ) {\n stack.push([x - 1, y])\n }\n }\n if (\n x < this.width - 1 &&\n !visited[y * this.width + (x + 1)] &&\n this.isPixelInRange(this.getPixel(x + 1, y), pixel)\n ) {\n if (\n !this.maskBoundry ||\n 255 - this.getMaskAlpha(x + 1, y) > this.maskTolerance\n ) {\n stack.push([x + 1, y])\n }\n }\n if (\n y > 0 &&\n !visited[(y - 1) * this.width + x] &&\n this.isPixelInRange(this.getPixel(x, y - 1), pixel)\n ) {\n if (\n !this.maskBoundry ||\n 255 - this.getMaskAlpha(x, y - 1) > this.maskTolerance\n ) {\n stack.push([x, y - 1])\n }\n }\n if (\n y < this.height - 1 &&\n !visited[(y + 1) * this.width + x] &&\n this.isPixelInRange(this.getPixel(x, y + 1), pixel)\n ) {\n if (\n !this.maskBoundry ||\n 255 - this.getMaskAlpha(x, y + 1) > this.maskTolerance\n ) {\n stack.push([x, y + 1])\n }\n }\n }\n }\n\n this.maskCTX.putImageData(maskData, 0, 0)\n this.messageBroker.publish('saveState')\n this.maskData = null\n this.imageData = null\n }\n setTolerance(tolerance: number): void {\n this.tolerance = tolerance\n\n if (this.lastPoint && this.livePreview) {\n this.messageBroker.publish('undo')\n this.fillColorSelection(this.lastPoint)\n }\n }\n\n setLivePreview(livePreview: boolean): void {\n this.livePreview = livePreview\n }\n\n setComparisonMethod(method: ColorComparisonMethod): void {\n this.colorComparisonMethod = method\n\n if (this.lastPoint && this.livePreview) {\n this.messageBroker.publish('undo')\n this.fillColorSelection(this.lastPoint)\n }\n }\n\n clearLastPoint() {\n this.lastPoint = null\n }\n\n setApplyWholeImage(applyWholeImage: boolean): void {\n this.applyWholeImage = applyWholeImage\n }\n\n setMaskBoundary(maskBoundry: boolean): void {\n this.maskBoundry = maskBoundry\n }\n\n setMaskTolerance(maskTolerance: number): void {\n this.maskTolerance = maskTolerance\n }\n}\n\nclass BrushTool {\n brushSettings: Brush //this saves the current brush settings\n maskBlendMode: MaskBlendMode\n\n isDrawing: boolean = false\n isDrawingLine: boolean = false\n lineStartPoint: Point | null = null\n smoothingPrecision: number = 10\n smoothingCordsArray: Point[] = []\n smoothingLastDrawTime!: Date\n maskCtx: CanvasRenderingContext2D | null = null\n initialDraw: boolean = true\n\n brushStrokeCanvas: HTMLCanvasElement | null = null\n brushStrokeCtx: CanvasRenderingContext2D | null = null\n\n //brush adjustment\n isBrushAdjusting: boolean = false\n brushPreviewGradient: HTMLElement | null = null\n initialPoint: Point | null = null\n useDominantAxis: boolean = false\n brushAdjustmentSpeed: number = 1.0\n\n maskEditor: MaskEditorDialog\n messageBroker: MessageBroker\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.createListeners()\n this.addPullTopics()\n\n this.useDominantAxis = app.extensionManager.setting.get(\n 'Comfy.MaskEditor.UseDominantAxis'\n )\n this.brushAdjustmentSpeed = app.extensionManager.setting.get(\n 'Comfy.MaskEditor.BrushAdjustmentSpeed'\n )\n\n this.brushSettings = {\n size: 10,\n opacity: 100,\n hardness: 1,\n type: BrushShape.Arc\n }\n this.maskBlendMode = MaskBlendMode.Black\n }\n\n private createListeners() {\n //setters\n this.messageBroker.subscribe('setBrushSize', (size: number) =>\n this.setBrushSize(size)\n )\n this.messageBroker.subscribe('setBrushOpacity', (opacity: number) =>\n this.setBrushOpacity(opacity)\n )\n this.messageBroker.subscribe('setBrushHardness', (hardness: number) =>\n this.setBrushHardness(hardness)\n )\n this.messageBroker.subscribe('setBrushShape', (type: BrushShape) =>\n this.setBrushType(type)\n )\n this.messageBroker.subscribe(\n 'setBrushSmoothingPrecision',\n (precision: number) => this.setBrushSmoothingPrecision(precision)\n )\n //brush adjustment\n this.messageBroker.subscribe(\n 'brushAdjustmentStart',\n (event: PointerEvent) => this.startBrushAdjustment(event)\n )\n this.messageBroker.subscribe('brushAdjustment', (event: PointerEvent) =>\n this.handleBrushAdjustment(event)\n )\n //drawing\n this.messageBroker.subscribe('drawStart', (event: PointerEvent) =>\n this.startDrawing(event)\n )\n this.messageBroker.subscribe('draw', (event: PointerEvent) =>\n this.handleDrawing(event)\n )\n this.messageBroker.subscribe('drawEnd', (event: PointerEvent) =>\n this.drawEnd(event)\n )\n }\n\n private addPullTopics() {\n this.messageBroker.createPullTopic(\n 'brushSize',\n async () => this.brushSettings.size\n )\n this.messageBroker.createPullTopic(\n 'brushOpacity',\n async () => this.brushSettings.opacity\n )\n this.messageBroker.createPullTopic(\n 'brushHardness',\n async () => this.brushSettings.hardness\n )\n this.messageBroker.createPullTopic(\n 'brushType',\n async () => this.brushSettings.type\n )\n this.messageBroker.createPullTopic(\n 'maskBlendMode',\n async () => this.maskBlendMode\n )\n this.messageBroker.createPullTopic(\n 'brushSettings',\n async () => this.brushSettings\n )\n }\n\n private async createBrushStrokeCanvas() {\n if (this.brushStrokeCanvas !== null) {\n return\n }\n\n const maskCanvas = await this.messageBroker.pull('maskCanvas')\n const canvas = document.createElement('canvas')\n canvas.width = maskCanvas.width\n canvas.height = maskCanvas.height\n\n this.brushStrokeCanvas = canvas\n this.brushStrokeCtx = canvas.getContext('2d')!\n }\n\n private async startDrawing(event: PointerEvent) {\n this.isDrawing = true\n let compositionOp: CompositionOperation\n let currentTool = await this.messageBroker.pull('currentTool')\n let coords = { x: event.offsetX, y: event.offsetY }\n let coords_canvas = await this.messageBroker.pull('screenToCanvas', coords)\n await this.createBrushStrokeCanvas()\n\n //set drawing mode\n if (currentTool === Tools.Eraser || event.buttons == 2) {\n compositionOp = CompositionOperation.DestinationOut //eraser\n } else {\n compositionOp = CompositionOperation.SourceOver //pen\n }\n\n //check if user wants to draw line or free draw\n if (event.shiftKey && this.lineStartPoint) {\n this.isDrawingLine = true\n this.drawLine(this.lineStartPoint, coords_canvas, compositionOp)\n } else {\n this.isDrawingLine = false\n this.init_shape(compositionOp)\n this.draw_shape(coords_canvas)\n }\n this.lineStartPoint = coords_canvas\n this.smoothingCordsArray = [coords_canvas] //used to smooth the drawing line\n this.smoothingLastDrawTime = new Date()\n }\n\n private async handleDrawing(event: PointerEvent) {\n var diff = performance.now() - this.smoothingLastDrawTime.getTime()\n let coords = { x: event.offsetX, y: event.offsetY }\n let coords_canvas = await this.messageBroker.pull('screenToCanvas', coords)\n let currentTool = await this.messageBroker.pull('currentTool')\n\n if (diff > 20 && !this.isDrawing)\n requestAnimationFrame(() => {\n this.init_shape(CompositionOperation.SourceOver)\n this.draw_shape(coords_canvas)\n this.smoothingCordsArray.push(coords_canvas)\n })\n else\n requestAnimationFrame(() => {\n if (currentTool === Tools.Eraser || event.buttons == 2) {\n this.init_shape(CompositionOperation.DestinationOut)\n } else {\n this.init_shape(CompositionOperation.SourceOver)\n }\n\n //use drawWithSmoothing for better performance or change step in drawWithBetterSmoothing\n this.drawWithBetterSmoothing(coords_canvas)\n })\n\n this.smoothingLastDrawTime = new Date()\n }\n\n private async drawEnd(event: PointerEvent) {\n const coords = { x: event.offsetX, y: event.offsetY }\n const coords_canvas = await this.messageBroker.pull(\n 'screenToCanvas',\n coords\n )\n\n if (this.isDrawing) {\n this.isDrawing = false\n this.messageBroker.publish('saveState')\n this.lineStartPoint = coords_canvas\n this.initialDraw = true\n }\n }\n\n private drawWithBetterSmoothing(point: Point) {\n // Add current point to the smoothing array\n if (!this.smoothingCordsArray) {\n this.smoothingCordsArray = []\n }\n const opacityConstant = 1 / (1 + Math.exp(3))\n const interpolatedOpacity =\n 1 / (1 + Math.exp(-6 * (this.brushSettings.opacity - 0.5))) -\n opacityConstant\n\n this.smoothingCordsArray.push(point)\n\n // Keep a moving window of points for the spline\n const POINTS_NR = 5\n if (this.smoothingCordsArray.length < POINTS_NR) {\n return\n }\n\n // Calculate total length more efficiently\n let totalLength = 0\n const points = this.smoothingCordsArray\n const len = points.length - 1\n\n // Use local variables for better performance\n let dx, dy\n for (let i = 0; i < len; i++) {\n dx = points[i + 1].x - points[i].x\n dy = points[i + 1].y - points[i].y\n totalLength += Math.sqrt(dx * dx + dy * dy)\n }\n\n const distanceBetweenPoints =\n (this.brushSettings.size / this.smoothingPrecision) * 6\n const stepNr = Math.ceil(totalLength / distanceBetweenPoints)\n\n let interpolatedPoints = points\n\n if (stepNr > 0) {\n //this calculation needs to be improved\n interpolatedPoints = this.generateEquidistantPoints(\n this.smoothingCordsArray,\n distanceBetweenPoints // Distance between interpolated points\n )\n }\n\n if (!this.initialDraw) {\n // Remove the first 3 points from the array to avoid drawing the same points twice\n const spliceIndex = interpolatedPoints.findIndex(\n (point) =>\n point.x === this.smoothingCordsArray[2].x &&\n point.y === this.smoothingCordsArray[2].y\n )\n\n if (spliceIndex !== -1) {\n interpolatedPoints = interpolatedPoints.slice(spliceIndex + 1)\n }\n }\n\n // Draw all interpolated points\n for (const point of interpolatedPoints) {\n this.draw_shape(point, interpolatedOpacity)\n }\n\n if (!this.initialDraw) {\n // initially draw on all 5 points, then remove the first 3 points to go into 2 new, 3 old points cycle\n this.smoothingCordsArray = this.smoothingCordsArray.slice(2)\n } else {\n this.initialDraw = false\n }\n }\n\n private async drawLine(\n p1: Point,\n p2: Point,\n compositionOp: CompositionOperation\n ) {\n const brush_size = await this.messageBroker.pull('brushSize')\n const distance = Math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2)\n const steps = Math.ceil(\n distance / ((brush_size / this.smoothingPrecision) * 4)\n ) // Adjust for smoother lines\n const interpolatedOpacity =\n 1 / (1 + Math.exp(-6 * (this.brushSettings.opacity - 0.5))) -\n 1 / (1 + Math.exp(3))\n this.init_shape(compositionOp)\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps\n const x = p1.x + (p2.x - p1.x) * t\n const y = p1.y + (p2.y - p1.y) * t\n const point = { x: x, y: y }\n this.draw_shape(point, interpolatedOpacity)\n }\n }\n\n //brush adjustment\n\n private async startBrushAdjustment(event: PointerEvent) {\n event.preventDefault()\n const coords = { x: event.offsetX, y: event.offsetY }\n let coords_canvas = await this.messageBroker.pull('screenToCanvas', coords)\n this.messageBroker.publish('setBrushPreviewGradientVisibility', true)\n this.initialPoint = coords_canvas\n this.isBrushAdjusting = true\n return\n }\n\n private async handleBrushAdjustment(event: PointerEvent) {\n const coords = { x: event.offsetX, y: event.offsetY }\n const brushDeadZone = 5\n let coords_canvas = await this.messageBroker.pull('screenToCanvas', coords)\n\n const delta_x = coords_canvas.x - this.initialPoint!.x\n const delta_y = coords_canvas.y - this.initialPoint!.y\n\n const effectiveDeltaX = Math.abs(delta_x) < brushDeadZone ? 0 : delta_x\n const effectiveDeltaY = Math.abs(delta_y) < brushDeadZone ? 0 : delta_y\n\n // New dominant axis logic\n let finalDeltaX = effectiveDeltaX\n let finalDeltaY = effectiveDeltaY\n\n console.log(this.useDominantAxis)\n\n if (this.useDominantAxis) {\n // New setting flag\n const ratio = Math.abs(effectiveDeltaX) / Math.abs(effectiveDeltaY)\n const threshold = 2.0 // Configurable threshold\n\n if (ratio > threshold) {\n finalDeltaY = 0 // X is dominant\n } else if (ratio < 1 / threshold) {\n finalDeltaX = 0 // Y is dominant\n }\n }\n\n const cappedDeltaX = Math.max(-100, Math.min(100, finalDeltaX))\n const cappedDeltaY = Math.max(-100, Math.min(100, finalDeltaY))\n\n // Rest of the function remains the same\n const sizeDelta = cappedDeltaX / 40\n const hardnessDelta = cappedDeltaY / 800\n\n const newSize = Math.max(\n 1,\n Math.min(\n 100,\n this.brushSettings.size! +\n (cappedDeltaX / 35) * this.brushAdjustmentSpeed\n )\n )\n\n const newHardness = Math.max(\n 0,\n Math.min(\n 1,\n this.brushSettings!.hardness -\n (cappedDeltaY / 4000) * this.brushAdjustmentSpeed\n )\n )\n\n this.brushSettings.size = newSize\n this.brushSettings.hardness = newHardness\n\n this.messageBroker.publish('updateBrushPreview')\n }\n\n //helper functions\n\n private async draw_shape(point: Point, overrideOpacity?: number) {\n const brushSettings: Brush = this.brushSettings\n const maskCtx = this.maskCtx || (await this.messageBroker.pull('maskCtx'))\n const brushType = await this.messageBroker.pull('brushType')\n const maskColor = await this.messageBroker.pull('getMaskColor')\n const size = brushSettings.size\n const sliderOpacity = brushSettings.opacity\n const opacity =\n overrideOpacity == undefined ? sliderOpacity : overrideOpacity\n const hardness = brushSettings.hardness\n\n const x = point.x\n const y = point.y\n\n // Extend the gradient radius beyond the brush size\n const extendedSize = size * (2 - hardness)\n\n let gradient = maskCtx.createRadialGradient(x, y, 0, x, y, extendedSize)\n\n const isErasing = maskCtx.globalCompositeOperation === 'destination-out'\n\n if (hardness === 1) {\n console.log(sliderOpacity, opacity)\n gradient.addColorStop(\n 0,\n isErasing\n ? `rgba(255, 255, 255, ${opacity})`\n : `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})`\n )\n gradient.addColorStop(\n 1,\n isErasing\n ? `rgba(255, 255, 255, ${opacity})`\n : `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})`\n )\n } else {\n let softness = 1 - hardness\n let innerStop = Math.max(0, hardness - softness)\n let outerStop = size / extendedSize\n\n if (isErasing) {\n gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`)\n gradient.addColorStop(innerStop, `rgba(255, 255, 255, ${opacity})`)\n gradient.addColorStop(outerStop, `rgba(255, 255, 255, ${opacity / 2})`)\n gradient.addColorStop(1, `rgba(255, 255, 255, 0)`)\n } else {\n gradient.addColorStop(\n 0,\n `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})`\n )\n gradient.addColorStop(\n innerStop,\n `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity})`\n )\n gradient.addColorStop(\n outerStop,\n `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, ${opacity / 2})`\n )\n gradient.addColorStop(\n 1,\n `rgba(${maskColor.r}, ${maskColor.g}, ${maskColor.b}, 0)`\n )\n }\n }\n\n maskCtx.fillStyle = gradient\n maskCtx.beginPath()\n if (brushType === BrushShape.Rect) {\n maskCtx.rect(\n x - extendedSize,\n y - extendedSize,\n extendedSize * 2,\n extendedSize * 2\n )\n } else {\n maskCtx.arc(x, y, extendedSize, 0, Math.PI * 2, false)\n }\n maskCtx.fill()\n }\n\n private async init_shape(compositionOperation: CompositionOperation) {\n const maskBlendMode = await this.messageBroker.pull('maskBlendMode')\n const maskCtx = this.maskCtx || (await this.messageBroker.pull('maskCtx'))\n maskCtx.beginPath()\n if (compositionOperation == CompositionOperation.SourceOver) {\n maskCtx.fillStyle = maskBlendMode\n maskCtx.globalCompositeOperation = CompositionOperation.SourceOver\n } else if (compositionOperation == CompositionOperation.DestinationOut) {\n maskCtx.globalCompositeOperation = CompositionOperation.DestinationOut\n }\n }\n\n private calculateCubicSplinePoints(\n points: Point[],\n numSegments: number = 10\n ): Point[] {\n const result: Point[] = []\n\n const xCoords = points.map((p) => p.x)\n const yCoords = points.map((p) => p.y)\n\n const xDerivatives = this.calculateSplineCoefficients(xCoords)\n const yDerivatives = this.calculateSplineCoefficients(yCoords)\n\n // Generate points along the spline\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[i]\n const p1 = points[i + 1]\n const d0x = xDerivatives[i]\n const d1x = xDerivatives[i + 1]\n const d0y = yDerivatives[i]\n const d1y = yDerivatives[i + 1]\n\n for (let t = 0; t <= numSegments; t++) {\n const t_normalized = t / numSegments\n\n // Hermite basis functions\n const h00 = 2 * t_normalized ** 3 - 3 * t_normalized ** 2 + 1\n const h10 = t_normalized ** 3 - 2 * t_normalized ** 2 + t_normalized\n const h01 = -2 * t_normalized ** 3 + 3 * t_normalized ** 2\n const h11 = t_normalized ** 3 - t_normalized ** 2\n\n const x = h00 * p0.x + h10 * d0x + h01 * p1.x + h11 * d1x\n const y = h00 * p0.y + h10 * d0y + h01 * p1.y + h11 * d1y\n\n result.push({ x, y })\n }\n }\n\n return result\n }\n\n private generateEvenlyDistributedPoints(\n splinePoints: Point[],\n numPoints: number\n ): Point[] {\n const distances: number[] = [0]\n for (let i = 1; i < splinePoints.length; i++) {\n const dx = splinePoints[i].x - splinePoints[i - 1].x\n const dy = splinePoints[i].y - splinePoints[i - 1].y\n const dist = Math.hypot(dx, dy)\n distances.push(distances[i - 1] + dist)\n }\n\n const totalLength = distances[distances.length - 1]\n const interval = totalLength / (numPoints - 1)\n const result: Point[] = []\n let currentIndex = 0\n\n for (let i = 0; i < numPoints; i++) {\n const targetDistance = i * interval\n\n while (\n currentIndex < distances.length - 1 &&\n distances[currentIndex + 1] < targetDistance\n ) {\n currentIndex++\n }\n\n const t =\n (targetDistance - distances[currentIndex]) /\n (distances[currentIndex + 1] - distances[currentIndex])\n\n const x =\n splinePoints[currentIndex].x +\n t * (splinePoints[currentIndex + 1].x - splinePoints[currentIndex].x)\n const y =\n splinePoints[currentIndex].y +\n t * (splinePoints[currentIndex + 1].y - splinePoints[currentIndex].y)\n\n result.push({ x, y })\n }\n\n return result\n }\n\n private generateEquidistantPoints(\n points: Point[],\n distance: number\n ): Point[] {\n const result: Point[] = []\n const cumulativeDistances: number[] = [0]\n\n // Calculate cumulative distances between points\n for (let i = 1; i < points.length; i++) {\n const dx = points[i].x - points[i - 1].x\n const dy = points[i].y - points[i - 1].y\n const dist = Math.hypot(dx, dy)\n cumulativeDistances[i] = cumulativeDistances[i - 1] + dist\n }\n\n const totalLength = cumulativeDistances[cumulativeDistances.length - 1]\n const numPoints = Math.floor(totalLength / distance)\n\n for (let i = 0; i <= numPoints; i++) {\n const targetDistance = i * distance\n let idx = 0\n\n // Find the segment where the target distance falls\n while (\n idx < cumulativeDistances.length - 1 &&\n cumulativeDistances[idx + 1] < targetDistance\n ) {\n idx++\n }\n\n if (idx >= points.length - 1) {\n result.push(points[points.length - 1])\n continue\n }\n\n const d0 = cumulativeDistances[idx]\n const d1 = cumulativeDistances[idx + 1]\n const t = (targetDistance - d0) / (d1 - d0)\n\n const x = points[idx].x + t * (points[idx + 1].x - points[idx].x)\n const y = points[idx].y + t * (points[idx + 1].y - points[idx].y)\n\n result.push({ x, y })\n }\n\n return result\n }\n\n private calculateSplineCoefficients(values: number[]): number[] {\n const n = values.length - 1\n const matrix: number[][] = new Array(n + 1)\n .fill(0)\n .map(() => new Array(n + 1).fill(0))\n const rhs: number[] = new Array(n + 1).fill(0)\n\n // Set up tridiagonal matrix\n for (let i = 1; i < n; i++) {\n matrix[i][i - 1] = 1\n matrix[i][i] = 4\n matrix[i][i + 1] = 1\n rhs[i] = 3 * (values[i + 1] - values[i - 1])\n }\n\n // Set boundary conditions (natural spline)\n matrix[0][0] = 2\n matrix[0][1] = 1\n matrix[n][n - 1] = 1\n matrix[n][n] = 2\n rhs[0] = 3 * (values[1] - values[0])\n rhs[n] = 3 * (values[n] - values[n - 1])\n\n // Solve tridiagonal system using Thomas algorithm\n for (let i = 1; i <= n; i++) {\n const m = matrix[i][i - 1] / matrix[i - 1][i - 1]\n matrix[i][i] -= m * matrix[i - 1][i]\n rhs[i] -= m * rhs[i - 1]\n }\n\n const solution: number[] = new Array(n + 1)\n solution[n] = rhs[n] / matrix[n][n]\n for (let i = n - 1; i >= 0; i--) {\n solution[i] = (rhs[i] - matrix[i][i + 1] * solution[i + 1]) / matrix[i][i]\n }\n\n return solution\n }\n\n private setBrushSize(size: number) {\n this.brushSettings.size = size\n }\n\n private setBrushOpacity(opacity: number) {\n this.brushSettings.opacity = opacity\n }\n\n private setBrushHardness(hardness: number) {\n this.brushSettings.hardness = hardness\n }\n\n private setBrushType(type: BrushShape) {\n this.brushSettings.type = type\n }\n\n private setBrushSmoothingPrecision(precision: number) {\n //console.log('precision', precision)\n this.smoothingPrecision = precision\n }\n}\n\nclass UIManager {\n private rootElement: HTMLElement\n private brush!: HTMLDivElement\n private brushPreviewGradient!: HTMLDivElement\n private maskCtx!: CanvasRenderingContext2D\n private imageCtx!: CanvasRenderingContext2D\n private maskCanvas!: HTMLCanvasElement\n private imgCanvas!: HTMLCanvasElement\n private brushSettingsHTML!: HTMLDivElement\n private paintBucketSettingsHTML!: HTMLDivElement\n private colorSelectSettingsHTML!: HTMLDivElement\n private maskOpacitySlider!: HTMLInputElement\n private brushHardnessSlider!: HTMLInputElement\n private brushSizeSlider!: HTMLInputElement\n private brushOpacitySlider!: HTMLInputElement\n private sidebarImage!: HTMLImageElement\n private saveButton!: HTMLButtonElement\n private toolPanel!: HTMLDivElement\n private sidePanel!: HTMLDivElement\n private pointerZone!: HTMLDivElement\n private canvasBackground!: HTMLDivElement\n private canvasContainer!: HTMLDivElement\n private image!: HTMLImageElement\n private imageURL!: URL\n private darkMode: boolean = true\n\n private maskEditor: MaskEditorDialog\n private messageBroker: MessageBroker\n\n private mask_opacity: number = 1.0\n private maskBlendMode: MaskBlendMode = MaskBlendMode.Black\n\n private zoomTextHTML!: HTMLSpanElement\n private dimensionsTextHTML!: HTMLSpanElement\n\n constructor(rootElement: HTMLElement, maskEditor: MaskEditorDialog) {\n this.rootElement = rootElement\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.addListeners()\n this.addPullTopics()\n }\n\n addListeners() {\n this.messageBroker.subscribe('updateBrushPreview', async () =>\n this.updateBrushPreview()\n )\n\n this.messageBroker.subscribe(\n 'paintBucketCursor',\n (isPaintBucket: boolean) => this.handlePaintBucketCursor(isPaintBucket)\n )\n\n this.messageBroker.subscribe('panCursor', (isPan: boolean) =>\n this.handlePanCursor(isPan)\n )\n\n this.messageBroker.subscribe('setBrushVisibility', (isVisible: boolean) =>\n this.setBrushVisibility(isVisible)\n )\n\n this.messageBroker.subscribe(\n 'setBrushPreviewGradientVisibility',\n (isVisible: boolean) => this.setBrushPreviewGradientVisibility(isVisible)\n )\n\n this.messageBroker.subscribe('updateCursor', () => this.updateCursor())\n\n this.messageBroker.subscribe('setZoomText', (text: string) =>\n this.setZoomText(text)\n )\n }\n\n addPullTopics() {\n this.messageBroker.createPullTopic(\n 'maskCanvas',\n async () => this.maskCanvas\n )\n this.messageBroker.createPullTopic('maskCtx', async () => this.maskCtx)\n this.messageBroker.createPullTopic('imageCtx', async () => this.imageCtx)\n this.messageBroker.createPullTopic('imgCanvas', async () => this.imgCanvas)\n this.messageBroker.createPullTopic(\n 'screenToCanvas',\n async (coords: Point) => this.screenToCanvas(coords)\n )\n this.messageBroker.createPullTopic(\n 'getCanvasContainer',\n async () => this.canvasContainer\n )\n this.messageBroker.createPullTopic('getMaskColor', async () =>\n this.getMaskColor()\n )\n }\n\n async setlayout() {\n this.detectLightMode()\n var user_ui = await this.createUI()\n var canvasContainer = this.createBackgroundUI()\n\n var brush = await this.createBrush()\n await this.setBrushBorderRadius()\n this.setBrushOpacity(1)\n this.rootElement.appendChild(canvasContainer)\n this.rootElement.appendChild(user_ui)\n document.body.appendChild(brush)\n }\n\n private async createUI() {\n var ui_container = document.createElement('div')\n ui_container.id = 'maskEditor_uiContainer'\n\n var top_bar = await this.createTopBar()\n\n var ui_horizontal_container = document.createElement('div')\n ui_horizontal_container.id = 'maskEditor_uiHorizontalContainer'\n\n var side_panel_container = await this.createSidePanel()\n\n var pointer_zone = this.createPointerZone()\n\n var tool_panel = this.createToolPanel()\n\n ui_horizontal_container.appendChild(tool_panel)\n ui_horizontal_container.appendChild(pointer_zone)\n ui_horizontal_container.appendChild(side_panel_container)\n\n ui_container.appendChild(top_bar)\n ui_container.appendChild(ui_horizontal_container)\n\n return ui_container\n }\n\n private createBackgroundUI() {\n const canvasContainer = document.createElement('div')\n canvasContainer.id = 'maskEditorCanvasContainer'\n\n const imgCanvas = document.createElement('canvas')\n imgCanvas.id = 'imageCanvas'\n\n const maskCanvas = document.createElement('canvas')\n maskCanvas.id = 'maskCanvas'\n\n const canvas_background = document.createElement('div')\n canvas_background.id = 'canvasBackground'\n\n canvasContainer.appendChild(imgCanvas)\n canvasContainer.appendChild(maskCanvas)\n canvasContainer.appendChild(canvas_background)\n\n // prepare content\n this.imgCanvas = imgCanvas!\n this.maskCanvas = maskCanvas!\n this.canvasContainer = canvasContainer!\n this.canvasBackground = canvas_background!\n let maskCtx = maskCanvas!.getContext('2d', { willReadFrequently: true })\n if (maskCtx) {\n this.maskCtx = maskCtx\n }\n let imgCtx = imgCanvas!.getContext('2d', { willReadFrequently: true })\n if (imgCtx) {\n this.imageCtx = imgCtx\n }\n this.setEventHandler()\n\n //remove styling and move to css file\n\n this.imgCanvas.style.position = 'absolute'\n this.maskCanvas.style.position = 'absolute'\n\n this.imgCanvas.style.top = '200'\n this.imgCanvas.style.left = '0'\n\n this.maskCanvas.style.top = this.imgCanvas.style.top\n this.maskCanvas.style.left = this.imgCanvas.style.left\n\n const maskCanvasStyle = this.getMaskCanvasStyle()\n this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode\n this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString()\n\n return canvasContainer\n }\n\n async setBrushBorderRadius() {\n const brushSettings = await this.messageBroker.pull('brushSettings')\n\n if (brushSettings.type === BrushShape.Rect) {\n this.brush.style.borderRadius = '0%'\n // @ts-expect-error\n this.brush.style.MozBorderRadius = '0%'\n // @ts-expect-error\n this.brush.style.WebkitBorderRadius = '0%'\n } else {\n this.brush.style.borderRadius = '50%'\n // @ts-expect-error\n this.brush.style.MozBorderRadius = '50%'\n // @ts-expect-error\n this.brush.style.WebkitBorderRadius = '50%'\n }\n }\n\n async initUI() {\n this.saveButton.innerText = 'Save'\n this.saveButton.disabled = false\n\n await this.setImages(this.imgCanvas) //probably change method to initImageCanvas\n }\n\n private async createSidePanel() {\n const side_panel = this.createContainer(true)\n side_panel.id = 'maskEditor_sidePanel'\n\n const brush_settings = await this.createBrushSettings()\n brush_settings.id = 'maskEditor_brushSettings'\n this.brushSettingsHTML = brush_settings\n\n const paint_bucket_settings = await this.createPaintBucketSettings()\n paint_bucket_settings.id = 'maskEditor_paintBucketSettings'\n this.paintBucketSettingsHTML = paint_bucket_settings\n\n const color_select_settings = await this.createColorSelectSettings()\n color_select_settings.id = 'maskEditor_colorSelectSettings'\n this.colorSelectSettingsHTML = color_select_settings\n\n const image_layer_settings = await this.createImageLayerSettings()\n\n const separator = this.createSeparator()\n\n side_panel.appendChild(brush_settings)\n side_panel.appendChild(paint_bucket_settings)\n side_panel.appendChild(color_select_settings)\n side_panel.appendChild(separator)\n side_panel.appendChild(image_layer_settings)\n\n return side_panel\n }\n\n private async createBrushSettings() {\n const shapeColor = this.darkMode\n ? 'maskEditor_brushShape_dark'\n : 'maskEditor_brushShape_light'\n const brush_settings_container = this.createContainer(true)\n\n const brush_settings_title = this.createHeadline('Brush Settings')\n\n const brush_shape_outer_container = this.createContainer(true)\n\n const brush_shape_title = this.createContainerTitle('Brush Shape')\n\n const brush_shape_container = this.createContainer(false)\n\n const accentColor = this.darkMode\n ? 'maskEditor_accent_bg_dark'\n : 'maskEditor_accent_bg_light'\n\n brush_shape_container.classList.add(accentColor)\n brush_shape_container.classList.add('maskEditor_layerRow')\n\n const circle_shape = document.createElement('div')\n circle_shape.id = 'maskEditor_sidePanelBrushShapeCircle'\n circle_shape.classList.add(shapeColor)\n circle_shape.style.background = 'var(--p-button-text-primary-color)'\n circle_shape.addEventListener('click', () => {\n this.messageBroker.publish('setBrushShape', BrushShape.Arc)\n this.setBrushBorderRadius()\n circle_shape.style.background = 'var(--p-button-text-primary-color)'\n square_shape.style.background = ''\n })\n\n const square_shape = document.createElement('div')\n square_shape.id = 'maskEditor_sidePanelBrushShapeSquare'\n square_shape.classList.add(shapeColor)\n square_shape.style.background = ''\n square_shape.addEventListener('click', () => {\n this.messageBroker.publish('setBrushShape', BrushShape.Rect)\n this.setBrushBorderRadius()\n square_shape.style.background = 'var(--p-button-text-primary-color)'\n circle_shape.style.background = ''\n })\n\n brush_shape_container.appendChild(circle_shape)\n brush_shape_container.appendChild(square_shape)\n\n brush_shape_outer_container.appendChild(brush_shape_title)\n brush_shape_outer_container.appendChild(brush_shape_container)\n\n const thicknesSliderObj = this.createSlider(\n 'Thickness',\n 1,\n 100,\n 1,\n 10,\n (event, value) => {\n this.messageBroker.publish('setBrushSize', parseInt(value))\n this.updateBrushPreview()\n }\n )\n this.brushSizeSlider = thicknesSliderObj.slider\n\n const opacitySliderObj = this.createSlider(\n 'Opacity',\n 0,\n 1,\n 0.01,\n 0.7,\n (event, value) => {\n this.messageBroker.publish('setBrushOpacity', parseFloat(value))\n this.updateBrushPreview()\n }\n )\n this.brushOpacitySlider = opacitySliderObj.slider\n\n const hardnessSliderObj = this.createSlider(\n 'Hardness',\n 0,\n 1,\n 0.01,\n 1,\n (event, value) => {\n this.messageBroker.publish('setBrushHardness', parseFloat(value))\n this.updateBrushPreview()\n }\n )\n this.brushHardnessSlider = hardnessSliderObj.slider\n\n const brushSmoothingPrecisionSliderObj = this.createSlider(\n 'Smoothing Precision',\n 1,\n 100,\n 1,\n 10,\n (event, value) => {\n this.messageBroker.publish(\n 'setBrushSmoothingPrecision',\n parseInt(value)\n )\n }\n )\n\n brush_settings_container.appendChild(brush_settings_title)\n brush_settings_container.appendChild(brush_shape_outer_container)\n brush_settings_container.appendChild(thicknesSliderObj.container)\n brush_settings_container.appendChild(opacitySliderObj.container)\n brush_settings_container.appendChild(hardnessSliderObj.container)\n brush_settings_container.appendChild(\n brushSmoothingPrecisionSliderObj.container\n )\n\n return brush_settings_container\n }\n\n private async createPaintBucketSettings() {\n const paint_bucket_settings_container = this.createContainer(true)\n\n const paint_bucket_settings_title = this.createHeadline(\n 'Paint Bucket Settings'\n )\n\n const tolerance = await this.messageBroker.pull('getTolerance')\n const paintBucketToleranceSliderObj = this.createSlider(\n 'Tolerance',\n 0,\n 255,\n 1,\n tolerance,\n (event, value) => {\n this.messageBroker.publish('setPaintBucketTolerance', parseInt(value))\n }\n )\n\n paint_bucket_settings_container.appendChild(paint_bucket_settings_title)\n paint_bucket_settings_container.appendChild(\n paintBucketToleranceSliderObj.container\n )\n\n return paint_bucket_settings_container\n }\n\n private async createColorSelectSettings() {\n const color_select_settings_container = this.createContainer(true)\n\n const color_select_settings_title = this.createHeadline(\n 'Color Select Settings'\n )\n\n var tolerance = await this.messageBroker.pull('getTolerance')\n const colorSelectToleranceSliderObj = this.createSlider(\n 'Tolerance',\n 0,\n 255,\n 1,\n tolerance,\n (event, value) => {\n this.messageBroker.publish('setColorSelectTolerance', parseInt(value))\n }\n )\n\n const livePreviewToggle = this.createToggle(\n 'Live Preview',\n (event, value) => {\n this.messageBroker.publish('setLivePreview', value)\n }\n )\n\n const wholeImageToggle = this.createToggle(\n 'Apply to Whole Image',\n (event, value) => {\n this.messageBroker.publish('setWholeImage', value)\n }\n )\n\n const methodOptions = Object.values(ColorComparisonMethod)\n const methodSelect = this.createDropdown(\n 'Method',\n methodOptions,\n (event, value) => {\n this.messageBroker.publish('setColorComparisonMethod', value)\n }\n )\n\n const maskBoundaryToggle = this.createToggle(\n 'Stop at mask',\n (event, value) => {\n this.messageBroker.publish('setMaskBoundary', value)\n }\n )\n\n const maskToleranceSliderObj = this.createSlider(\n 'Mask Tolerance',\n 0,\n 255,\n 1,\n 0,\n (event, value) => {\n this.messageBroker.publish('setMaskTolerance', parseInt(value))\n }\n )\n\n color_select_settings_container.appendChild(color_select_settings_title)\n color_select_settings_container.appendChild(\n colorSelectToleranceSliderObj.container\n )\n color_select_settings_container.appendChild(livePreviewToggle)\n color_select_settings_container.appendChild(wholeImageToggle)\n color_select_settings_container.appendChild(methodSelect)\n color_select_settings_container.appendChild(maskBoundaryToggle)\n color_select_settings_container.appendChild(\n maskToleranceSliderObj.container\n )\n\n return color_select_settings_container\n }\n\n private async createImageLayerSettings() {\n const accentColor = this.darkMode\n ? 'maskEditor_accent_bg_dark'\n : 'maskEditor_accent_bg_light'\n\n const image_layer_settings_container = this.createContainer(true)\n\n const image_layer_settings_title = this.createHeadline('Layers')\n\n const mask_layer_title = this.createContainerTitle('Mask Layer')\n\n const mask_layer_container = this.createContainer(false)\n mask_layer_container.classList.add(accentColor)\n mask_layer_container.classList.add('maskEditor_layerRow')\n\n const mask_layer_visibility_checkbox = document.createElement('input')\n mask_layer_visibility_checkbox.setAttribute('type', 'checkbox')\n mask_layer_visibility_checkbox.checked = true\n mask_layer_visibility_checkbox.classList.add(\n 'maskEditor_sidePanelLayerCheckbox'\n )\n mask_layer_visibility_checkbox.addEventListener('change', (event) => {\n if (!(event.target as HTMLInputElement)!.checked) {\n this.maskCanvas.style.opacity = '0'\n } else {\n this.maskCanvas.style.opacity = String(this.mask_opacity) //change name\n }\n })\n\n var mask_layer_image_container = document.createElement('div')\n mask_layer_image_container.classList.add(\n 'maskEditor_sidePanelLayerPreviewContainer'\n )\n mask_layer_image_container.innerHTML =\n ' '\n\n var blending_options = ['black', 'white', 'negative']\n\n const sidePanelDropdownAccent = this.darkMode\n ? 'maskEditor_sidePanelDropdown_dark'\n : 'maskEditor_sidePanelDropdown_light'\n\n var mask_layer_dropdown = document.createElement('select')\n mask_layer_dropdown.classList.add(sidePanelDropdownAccent)\n mask_layer_dropdown.classList.add(sidePanelDropdownAccent)\n blending_options.forEach((option) => {\n var option_element = document.createElement('option')\n option_element.value = option\n option_element.innerText = option\n mask_layer_dropdown.appendChild(option_element)\n\n if (option == this.maskBlendMode) {\n option_element.selected = true\n }\n })\n\n mask_layer_dropdown.addEventListener('change', (event) => {\n const selectedValue = (event.target as HTMLSelectElement)\n .value as MaskBlendMode\n this.maskBlendMode = selectedValue\n this.updateMaskColor()\n })\n\n mask_layer_container.appendChild(mask_layer_visibility_checkbox)\n mask_layer_container.appendChild(mask_layer_image_container)\n mask_layer_container.appendChild(mask_layer_dropdown)\n\n const mask_layer_opacity_sliderObj = this.createSlider(\n 'Mask Opacity',\n 0.0,\n 1.0,\n 0.01,\n this.mask_opacity,\n (event, value) => {\n this.mask_opacity = parseFloat(value)\n this.maskCanvas.style.opacity = String(this.mask_opacity)\n\n if (this.mask_opacity == 0) {\n mask_layer_visibility_checkbox.checked = false\n } else {\n mask_layer_visibility_checkbox.checked = true\n }\n }\n )\n this.maskOpacitySlider = mask_layer_opacity_sliderObj.slider\n\n const image_layer_title = this.createContainerTitle('Image Layer')\n\n const image_layer_container = this.createContainer(false)\n image_layer_container.classList.add(accentColor)\n image_layer_container.classList.add('maskEditor_layerRow')\n\n const image_layer_visibility_checkbox = document.createElement('input')\n image_layer_visibility_checkbox.setAttribute('type', 'checkbox')\n image_layer_visibility_checkbox.classList.add(\n 'maskEditor_sidePanelLayerCheckbox'\n )\n image_layer_visibility_checkbox.checked = true\n image_layer_visibility_checkbox.addEventListener('change', (event) => {\n if (!(event.target as HTMLInputElement)!.checked) {\n this.imgCanvas.style.opacity = '0'\n } else {\n this.imgCanvas.style.opacity = '1'\n }\n })\n\n const image_layer_image_container = document.createElement('div')\n image_layer_image_container.classList.add(\n 'maskEditor_sidePanelLayerPreviewContainer'\n )\n\n const image_layer_image = document.createElement('img')\n image_layer_image.id = 'maskEditor_sidePanelImageLayerImage'\n image_layer_image.src =\n ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src ??\n ''\n this.sidebarImage = image_layer_image\n\n image_layer_image_container.appendChild(image_layer_image)\n\n image_layer_container.appendChild(image_layer_visibility_checkbox)\n image_layer_container.appendChild(image_layer_image_container)\n\n image_layer_settings_container.appendChild(image_layer_settings_title)\n image_layer_settings_container.appendChild(mask_layer_title)\n image_layer_settings_container.appendChild(mask_layer_container)\n image_layer_settings_container.appendChild(\n mask_layer_opacity_sliderObj.container\n )\n image_layer_settings_container.appendChild(image_layer_title)\n image_layer_settings_container.appendChild(image_layer_container)\n\n return image_layer_settings_container\n }\n\n private createHeadline(title: string) {\n var headline = document.createElement('h3')\n headline.classList.add('maskEditor_sidePanelTitle')\n headline.innerText = title\n\n return headline\n }\n\n private createContainer(flexDirection: boolean) {\n var container = document.createElement('div')\n if (flexDirection) {\n container.classList.add('maskEditor_sidePanelContainerColumn')\n } else {\n container.classList.add('maskEditor_sidePanelContainerRow')\n }\n\n return container\n }\n\n private createContainerTitle(title: string) {\n var container_title = document.createElement('span')\n container_title.classList.add('maskEditor_sidePanelSubTitle')\n container_title.innerText = title\n\n return container_title\n }\n\n private createSlider(\n title: string,\n min: number,\n max: number,\n step: number,\n value: number,\n callback: (event: Event, value: string) => void\n ) {\n var slider_container = this.createContainer(true)\n var slider_title = this.createContainerTitle(title)\n\n var slider = document.createElement('input')\n slider.classList.add('maskEditor_sidePanelBrushRange')\n slider.setAttribute('type', 'range')\n slider.setAttribute('min', String(min))\n slider.setAttribute('max', String(max))\n slider.setAttribute('step', String(step))\n slider.setAttribute('value', String(value))\n slider.addEventListener('input', (event) => {\n callback(event, (event.target as HTMLInputElement).value)\n })\n slider_container.appendChild(slider_title)\n slider_container.appendChild(slider)\n\n return { container: slider_container, slider: slider }\n }\n\n private createToggle(\n title: string,\n callback: (event: Event, value: boolean) => void\n ) {\n var outer_Container = this.createContainer(false)\n var toggle_title = this.createContainerTitle(title)\n\n var toggle_container = document.createElement('label')\n toggle_container.classList.add('maskEditor_sidePanelToggleContainer')\n\n var toggle_checkbox = document.createElement('input')\n toggle_checkbox.setAttribute('type', 'checkbox')\n toggle_checkbox.classList.add('maskEditor_sidePanelToggleCheckbox')\n toggle_checkbox.addEventListener('change', (event) => {\n callback(event, (event.target as HTMLInputElement).checked)\n })\n\n var toggleAccentColor = this.darkMode\n ? 'maskEditor_toggle_bg_dark'\n : 'maskEditor_toggle_bg_light'\n\n var toggle_switch = document.createElement('div')\n toggle_switch.classList.add('maskEditor_sidePanelToggleSwitch')\n toggle_switch.classList.add(toggleAccentColor)\n\n toggle_container.appendChild(toggle_checkbox)\n toggle_container.appendChild(toggle_switch)\n\n outer_Container.appendChild(toggle_title)\n outer_Container.appendChild(toggle_container)\n\n return outer_Container\n }\n\n private createDropdown(\n title: string,\n options: string[],\n callback: (event: Event, value: string) => void\n ) {\n const sidePanelDropdownAccent = this.darkMode\n ? 'maskEditor_sidePanelDropdown_dark'\n : 'maskEditor_sidePanelDropdown_light'\n var dropdown_container = this.createContainer(false)\n var dropdown_title = this.createContainerTitle(title)\n\n var dropdown = document.createElement('select')\n dropdown.classList.add(sidePanelDropdownAccent)\n dropdown.classList.add('maskEditor_containerDropdown')\n\n options.forEach((option) => {\n var option_element = document.createElement('option')\n option_element.value = option\n option_element.innerText = option\n dropdown.appendChild(option_element)\n })\n\n dropdown.addEventListener('change', (event) => {\n callback(event, (event.target as HTMLSelectElement).value)\n })\n\n dropdown_container.appendChild(dropdown_title)\n dropdown_container.appendChild(dropdown)\n\n return dropdown_container\n }\n\n private createSeparator() {\n var separator = document.createElement('div')\n separator.classList.add('maskEditor_sidePanelSeparator')\n\n return separator\n }\n\n //----------------\n\n private async createTopBar() {\n const buttonAccentColor = this.darkMode\n ? 'maskEditor_topPanelButton_dark'\n : 'maskEditor_topPanelButton_light'\n\n const iconButtonAccentColor = this.darkMode\n ? 'maskEditor_topPanelIconButton_dark'\n : 'maskEditor_topPanelIconButton_light'\n\n var top_bar = document.createElement('div')\n top_bar.id = 'maskEditor_topBar'\n\n var top_bar_title_container = document.createElement('div')\n top_bar_title_container.id = 'maskEditor_topBarTitleContainer'\n\n var top_bar_title = document.createElement('h1')\n top_bar_title.id = 'maskEditor_topBarTitle'\n top_bar_title.innerText = 'ComfyUI'\n\n top_bar_title_container.appendChild(top_bar_title)\n\n var top_bar_shortcuts_container = document.createElement('div')\n top_bar_shortcuts_container.id = 'maskEditor_topBarShortcutsContainer'\n\n var top_bar_undo_button = document.createElement('div')\n top_bar_undo_button.id = 'maskEditor_topBarUndoButton'\n top_bar_undo_button.classList.add(iconButtonAccentColor)\n top_bar_undo_button.innerHTML =\n ' '\n\n top_bar_undo_button.addEventListener('click', () => {\n this.messageBroker.publish('undo')\n })\n\n var top_bar_redo_button = document.createElement('div')\n top_bar_redo_button.id = 'maskEditor_topBarRedoButton'\n top_bar_redo_button.classList.add(iconButtonAccentColor)\n top_bar_redo_button.innerHTML =\n ' '\n\n top_bar_redo_button.addEventListener('click', () => {\n this.messageBroker.publish('redo')\n })\n\n var top_bar_invert_button = document.createElement('button')\n top_bar_invert_button.id = 'maskEditor_topBarInvertButton'\n top_bar_invert_button.classList.add(buttonAccentColor)\n top_bar_invert_button.innerText = 'Invert'\n top_bar_invert_button.addEventListener('click', () => {\n this.messageBroker.publish('invert')\n })\n\n var top_bar_clear_button = document.createElement('button')\n top_bar_clear_button.id = 'maskEditor_topBarClearButton'\n top_bar_clear_button.classList.add(buttonAccentColor)\n top_bar_clear_button.innerText = 'Clear'\n\n top_bar_clear_button.addEventListener('click', () => {\n this.maskCtx.clearRect(\n 0,\n 0,\n this.maskCanvas.width,\n this.maskCanvas.height\n )\n this.messageBroker.publish('saveState')\n })\n\n var top_bar_save_button = document.createElement('button')\n top_bar_save_button.id = 'maskEditor_topBarSaveButton'\n top_bar_save_button.classList.add(buttonAccentColor)\n top_bar_save_button.innerText = 'Save'\n this.saveButton = top_bar_save_button\n\n top_bar_save_button.addEventListener('click', () => {\n this.maskEditor.save()\n })\n\n var top_bar_cancel_button = document.createElement('button')\n top_bar_cancel_button.id = 'maskEditor_topBarCancelButton'\n top_bar_cancel_button.classList.add(buttonAccentColor)\n top_bar_cancel_button.innerText = 'Cancel'\n\n top_bar_cancel_button.addEventListener('click', () => {\n this.maskEditor.close()\n })\n\n top_bar_shortcuts_container.appendChild(top_bar_undo_button)\n top_bar_shortcuts_container.appendChild(top_bar_redo_button)\n top_bar_shortcuts_container.appendChild(top_bar_invert_button)\n top_bar_shortcuts_container.appendChild(top_bar_clear_button)\n top_bar_shortcuts_container.appendChild(top_bar_save_button)\n top_bar_shortcuts_container.appendChild(top_bar_cancel_button)\n\n top_bar.appendChild(top_bar_title_container)\n top_bar.appendChild(top_bar_shortcuts_container)\n\n return top_bar\n }\n\n private createToolPanel() {\n var tool_panel = document.createElement('div')\n tool_panel.id = 'maskEditor_toolPanel'\n this.toolPanel = tool_panel\n var toolPanelHoverAccent = this.darkMode\n ? 'maskEditor_toolPanelContainerDark'\n : 'maskEditor_toolPanelContainerLight'\n\n var toolElements: HTMLElement[] = []\n\n //brush tool\n\n var toolPanel_brushToolContainer = document.createElement('div')\n toolPanel_brushToolContainer.classList.add('maskEditor_toolPanelContainer')\n toolPanel_brushToolContainer.classList.add(\n 'maskEditor_toolPanelContainerSelected'\n )\n toolPanel_brushToolContainer.classList.add(toolPanelHoverAccent)\n toolPanel_brushToolContainer.innerHTML = `\n \n \n \n \n `\n toolElements.push(toolPanel_brushToolContainer)\n\n toolPanel_brushToolContainer.addEventListener('click', () => {\n //move logic to tool manager\n this.messageBroker.publish('setTool', Tools.Pen)\n for (let toolElement of toolElements) {\n if (toolElement != toolPanel_brushToolContainer) {\n toolElement.classList.remove('maskEditor_toolPanelContainerSelected')\n } else {\n toolElement.classList.add('maskEditor_toolPanelContainerSelected')\n this.brushSettingsHTML.style.display = 'flex'\n this.colorSelectSettingsHTML.style.display = 'none'\n this.paintBucketSettingsHTML.style.display = 'none'\n }\n }\n this.messageBroker.publish('setTool', Tools.Pen)\n this.pointerZone.style.cursor = 'none'\n })\n\n var toolPanel_brushToolIndicator = document.createElement('div')\n toolPanel_brushToolIndicator.classList.add('maskEditor_toolPanelIndicator')\n\n toolPanel_brushToolContainer.appendChild(toolPanel_brushToolIndicator)\n\n //eraser tool\n\n var toolPanel_eraserToolContainer = document.createElement('div')\n toolPanel_eraserToolContainer.classList.add('maskEditor_toolPanelContainer')\n toolPanel_eraserToolContainer.classList.add(toolPanelHoverAccent)\n toolPanel_eraserToolContainer.innerHTML = `\n \n \n \n \n \n \n \n `\n toolElements.push(toolPanel_eraserToolContainer)\n\n toolPanel_eraserToolContainer.addEventListener('click', () => {\n //move logic to tool manager\n this.messageBroker.publish('setTool', Tools.Eraser)\n for (let toolElement of toolElements) {\n if (toolElement != toolPanel_eraserToolContainer) {\n toolElement.classList.remove('maskEditor_toolPanelContainerSelected')\n } else {\n toolElement.classList.add('maskEditor_toolPanelContainerSelected')\n this.brushSettingsHTML.style.display = 'flex'\n this.colorSelectSettingsHTML.style.display = 'none'\n this.paintBucketSettingsHTML.style.display = 'none'\n }\n }\n this.messageBroker.publish('setTool', Tools.Eraser)\n this.pointerZone.style.cursor = 'none'\n })\n\n var toolPanel_eraserToolIndicator = document.createElement('div')\n toolPanel_eraserToolIndicator.classList.add('maskEditor_toolPanelIndicator')\n\n toolPanel_eraserToolContainer.appendChild(toolPanel_eraserToolIndicator)\n\n //paint bucket tool\n\n var toolPanel_paintBucketToolContainer = document.createElement('div')\n toolPanel_paintBucketToolContainer.classList.add(\n 'maskEditor_toolPanelContainer'\n )\n toolPanel_paintBucketToolContainer.classList.add(toolPanelHoverAccent)\n toolPanel_paintBucketToolContainer.innerHTML = `\n \n \n \n \n \n `\n toolElements.push(toolPanel_paintBucketToolContainer)\n\n toolPanel_paintBucketToolContainer.addEventListener('click', () => {\n //move logic to tool manager\n this.messageBroker.publish('setTool', Tools.PaintBucket)\n for (let toolElement of toolElements) {\n if (toolElement != toolPanel_paintBucketToolContainer) {\n toolElement.classList.remove('maskEditor_toolPanelContainerSelected')\n } else {\n toolElement.classList.add('maskEditor_toolPanelContainerSelected')\n this.brushSettingsHTML.style.display = 'none'\n this.colorSelectSettingsHTML.style.display = 'none'\n this.paintBucketSettingsHTML.style.display = 'flex'\n }\n }\n this.messageBroker.publish('setTool', Tools.PaintBucket)\n this.pointerZone.style.cursor =\n \"url('/cursor/paintBucket.png') 30 25, auto\"\n this.brush.style.opacity = '0'\n })\n\n var toolPanel_paintBucketToolIndicator = document.createElement('div')\n toolPanel_paintBucketToolIndicator.classList.add(\n 'maskEditor_toolPanelIndicator'\n )\n\n toolPanel_paintBucketToolContainer.appendChild(\n toolPanel_paintBucketToolIndicator\n )\n\n //color select tool\n\n var toolPanel_colorSelectToolContainer = document.createElement('div')\n toolPanel_colorSelectToolContainer.classList.add(\n 'maskEditor_toolPanelContainer'\n )\n toolPanel_colorSelectToolContainer.classList.add(toolPanelHoverAccent)\n toolPanel_colorSelectToolContainer.innerHTML = `\n \n \n \n `\n toolElements.push(toolPanel_colorSelectToolContainer)\n toolPanel_colorSelectToolContainer.addEventListener('click', () => {\n this.messageBroker.publish('setTool', 'colorSelect')\n for (let toolElement of toolElements) {\n if (toolElement != toolPanel_colorSelectToolContainer) {\n toolElement.classList.remove('maskEditor_toolPanelContainerSelected')\n } else {\n toolElement.classList.add('maskEditor_toolPanelContainerSelected')\n this.brushSettingsHTML.style.display = 'none'\n this.paintBucketSettingsHTML.style.display = 'none'\n this.colorSelectSettingsHTML.style.display = 'flex'\n }\n }\n this.messageBroker.publish('setTool', Tools.ColorSelect)\n this.pointerZone.style.cursor =\n \"url('/cursor/colorSelect.png') 15 25, auto\"\n this.brush.style.opacity = '0'\n })\n\n var toolPanel_colorSelectToolIndicator = document.createElement('div')\n toolPanel_colorSelectToolIndicator.classList.add(\n 'maskEditor_toolPanelIndicator'\n )\n toolPanel_colorSelectToolContainer.appendChild(\n toolPanel_colorSelectToolIndicator\n )\n\n //zoom indicator\n var toolPanel_zoomIndicator = document.createElement('div')\n toolPanel_zoomIndicator.classList.add('maskEditor_toolPanelZoomIndicator')\n toolPanel_zoomIndicator.classList.add(toolPanelHoverAccent)\n\n var toolPanel_zoomText = document.createElement('span')\n toolPanel_zoomText.id = 'maskEditor_toolPanelZoomText'\n toolPanel_zoomText.innerText = '100%'\n this.zoomTextHTML = toolPanel_zoomText\n\n var toolPanel_DimensionsText = document.createElement('span')\n toolPanel_DimensionsText.id = 'maskEditor_toolPanelDimensionsText'\n toolPanel_DimensionsText.innerText = ' '\n this.dimensionsTextHTML = toolPanel_DimensionsText\n\n toolPanel_zoomIndicator.appendChild(toolPanel_zoomText)\n toolPanel_zoomIndicator.appendChild(toolPanel_DimensionsText)\n\n toolPanel_zoomIndicator.addEventListener('click', () => {\n this.messageBroker.publish('resetZoom')\n })\n\n tool_panel.appendChild(toolPanel_brushToolContainer)\n tool_panel.appendChild(toolPanel_eraserToolContainer)\n tool_panel.appendChild(toolPanel_paintBucketToolContainer)\n tool_panel.appendChild(toolPanel_colorSelectToolContainer)\n tool_panel.appendChild(toolPanel_zoomIndicator)\n\n return tool_panel\n }\n\n private createPointerZone() {\n const pointer_zone = document.createElement('div')\n pointer_zone.id = 'maskEditor_pointerZone'\n\n this.pointerZone = pointer_zone\n\n pointer_zone.addEventListener('pointerdown', (event: PointerEvent) => {\n this.messageBroker.publish('pointerDown', event)\n })\n\n pointer_zone.addEventListener('pointermove', (event: PointerEvent) => {\n this.messageBroker.publish('pointerMove', event)\n })\n\n pointer_zone.addEventListener('pointerup', (event: PointerEvent) => {\n this.messageBroker.publish('pointerUp', event)\n })\n\n pointer_zone.addEventListener('pointerleave', (event: PointerEvent) => {\n this.brush.style.opacity = '0'\n this.pointerZone.style.cursor = ''\n })\n\n pointer_zone.addEventListener('touchstart', (event: TouchEvent) => {\n this.messageBroker.publish('handleTouchStart', event)\n })\n\n pointer_zone.addEventListener('touchmove', (event: TouchEvent) => {\n this.messageBroker.publish('handleTouchMove', event)\n })\n\n pointer_zone.addEventListener('touchend', (event: TouchEvent) => {\n this.messageBroker.publish('handleTouchEnd', event)\n })\n\n pointer_zone.addEventListener('wheel', (event) =>\n this.messageBroker.publish('wheel', event)\n )\n\n pointer_zone.addEventListener(\n 'pointerenter',\n async (event: PointerEvent) => {\n this.updateCursor()\n }\n )\n\n return pointer_zone\n }\n\n async screenToCanvas(clientPoint: Point): Promise {\n // Get the bounding rectangles for both elements\n const zoomRatio = await this.messageBroker.pull('zoomRatio')\n const canvasRect = this.maskCanvas.getBoundingClientRect()\n\n // Calculate the offset between pointer zone and canvas\n const offsetX = clientPoint.x - canvasRect.left + this.toolPanel.clientWidth\n const offsetY = clientPoint.y - canvasRect.top + 44 // 44 is the height of the top menu\n\n const x = offsetX / zoomRatio\n const y = offsetY / zoomRatio\n\n return { x: x, y: y }\n }\n\n private setEventHandler() {\n this.maskCanvas.addEventListener('contextmenu', (event: Event) => {\n event.preventDefault()\n })\n\n this.rootElement.addEventListener('contextmenu', (event: Event) => {\n event.preventDefault()\n })\n\n this.rootElement.addEventListener('dragstart', (event) => {\n if (event.ctrlKey) {\n event.preventDefault()\n }\n })\n }\n\n private async createBrush() {\n var brush = document.createElement('div')\n const brushSettings = await this.messageBroker.pull('brushSettings')\n brush.id = 'maskEditor_brush'\n\n var brush_preview_gradient = document.createElement('div')\n brush_preview_gradient.id = 'maskEditor_brushPreviewGradient'\n\n brush.appendChild(brush_preview_gradient)\n\n this.brush = brush\n this.brushPreviewGradient = brush_preview_gradient\n\n return brush\n }\n\n async setImages(imgCanvas: HTMLCanvasElement) {\n const imgCtx = imgCanvas.getContext('2d', { willReadFrequently: true })\n const maskCtx = this.maskCtx\n const maskCanvas = this.maskCanvas\n\n imgCtx!.clearRect(0, 0, this.imgCanvas.width, this.imgCanvas.height)\n maskCtx.clearRect(0, 0, this.maskCanvas.width, this.maskCanvas.height)\n\n const alpha_url = new URL(\n ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src ??\n ''\n )\n alpha_url.searchParams.delete('channel')\n alpha_url.searchParams.delete('preview')\n alpha_url.searchParams.set('channel', 'a')\n let mask_image: HTMLImageElement = await this.loadImage(alpha_url)\n\n // original image load\n if (\n !ComfyApp.clipspace?.imgs?.[ComfyApp.clipspace?.selectedIndex ?? 0]?.src\n ) {\n throw new Error(\n 'Unable to access image source - clipspace or image is null'\n )\n }\n\n const rgb_url = new URL(\n ComfyApp.clipspace.imgs[ComfyApp.clipspace.selectedIndex].src\n )\n this.imageURL = rgb_url\n console.log(rgb_url)\n rgb_url.searchParams.delete('channel')\n rgb_url.searchParams.set('channel', 'rgb')\n this.image = new Image()\n\n this.image = await new Promise((resolve, reject) => {\n const img = new Image()\n img.onload = () => resolve(img)\n img.onerror = reject\n img.src = rgb_url.toString()\n })\n\n maskCanvas.width = this.image.width\n maskCanvas.height = this.image.height\n\n this.dimensionsTextHTML.innerText = `${this.image.width}x${this.image.height}`\n\n await this.invalidateCanvas(this.image, mask_image)\n this.messageBroker.publish('initZoomPan', [this.image, this.rootElement])\n }\n\n async invalidateCanvas(\n orig_image: HTMLImageElement,\n mask_image: HTMLImageElement\n ) {\n this.imgCanvas.width = orig_image.width\n this.imgCanvas.height = orig_image.height\n\n this.maskCanvas.width = orig_image.width\n this.maskCanvas.height = orig_image.height\n\n let imgCtx = this.imgCanvas.getContext('2d', { willReadFrequently: true })\n let maskCtx = this.maskCanvas.getContext('2d', {\n willReadFrequently: true\n })\n\n imgCtx!.drawImage(orig_image, 0, 0, orig_image.width, orig_image.height)\n await this.prepare_mask(\n mask_image,\n this.maskCanvas,\n maskCtx!,\n await this.getMaskColor()\n )\n }\n\n private async prepare_mask(\n image: HTMLImageElement,\n maskCanvas: HTMLCanvasElement,\n maskCtx: CanvasRenderingContext2D,\n maskColor: { r: number; g: number; b: number }\n ) {\n // paste mask data into alpha channel\n maskCtx.drawImage(image, 0, 0, maskCanvas.width, maskCanvas.height)\n const maskData = maskCtx.getImageData(\n 0,\n 0,\n maskCanvas.width,\n maskCanvas.height\n )\n\n // invert mask\n for (let i = 0; i < maskData.data.length; i += 4) {\n const alpha = maskData.data[i + 3]\n maskData.data[i] = maskColor.r\n maskData.data[i + 1] = maskColor.g\n maskData.data[i + 2] = maskColor.b\n maskData.data[i + 3] = 255 - alpha\n }\n\n maskCtx.globalCompositeOperation = 'source-over'\n maskCtx.putImageData(maskData, 0, 0)\n }\n\n private async updateMaskColor() {\n // update mask canvas css styles\n const maskCanvasStyle = this.getMaskCanvasStyle()\n this.maskCanvas.style.mixBlendMode = maskCanvasStyle.mixBlendMode\n this.maskCanvas.style.opacity = maskCanvasStyle.opacity.toString()\n\n // update mask canvas rgb colors\n const maskColor = await this.getMaskColor()\n this.maskCtx.fillStyle = `rgb(${maskColor.r}, ${maskColor.g}, ${maskColor.b})`\n\n //set canvas background color\n this.setCanvasBackground()\n\n const maskData = this.maskCtx.getImageData(\n 0,\n 0,\n this.maskCanvas.width,\n this.maskCanvas.height\n )\n for (let i = 0; i < maskData.data.length; i += 4) {\n maskData.data[i] = maskColor.r\n maskData.data[i + 1] = maskColor.g\n maskData.data[i + 2] = maskColor.b\n }\n this.maskCtx.putImageData(maskData, 0, 0)\n }\n\n getMaskCanvasStyle() {\n if (this.maskBlendMode === MaskBlendMode.Negative) {\n return {\n mixBlendMode: 'difference',\n opacity: '1'\n }\n } else {\n return {\n mixBlendMode: 'initial',\n opacity: this.mask_opacity\n }\n }\n }\n\n private detectLightMode() {\n this.darkMode = document.body.classList.contains('dark-theme')\n }\n\n private loadImage(imagePath: URL): Promise {\n return new Promise((resolve, reject) => {\n const image = new Image() as HTMLImageElement\n image.onload = function () {\n resolve(image)\n }\n image.onerror = function (error) {\n reject(error)\n }\n image.src = imagePath.href\n })\n }\n\n async updateBrushPreview() {\n const cursorPoint = await this.messageBroker.pull('cursorPoint')\n const pan_offset = await this.messageBroker.pull('panOffset')\n const brushSettings = await this.messageBroker.pull('brushSettings')\n const zoom_ratio = await this.messageBroker.pull('zoomRatio')\n const centerX = cursorPoint.x + pan_offset.x\n const centerY = cursorPoint.y + pan_offset.y\n const brush = this.brush\n const hardness = brushSettings.hardness\n const extendedSize = brushSettings.size * (2 - hardness) * 2 * zoom_ratio\n\n this.brushSizeSlider.value = String(brushSettings.size)\n this.brushHardnessSlider.value = String(hardness)\n\n brush.style.width = extendedSize + 'px'\n brush.style.height = extendedSize + 'px'\n brush.style.left = centerX - extendedSize / 2 + 'px'\n brush.style.top = centerY - extendedSize / 2 + 'px'\n\n if (hardness === 1) {\n this.brushPreviewGradient.style.background = 'rgba(255, 0, 0, 0.5)'\n return\n }\n\n const opacityStop = hardness / 4 + 0.25\n\n this.brushPreviewGradient.style.background = `\n radial-gradient(\n circle,\n rgba(255, 0, 0, 0.5) 0%,\n rgba(255, 0, 0, ${opacityStop}) ${hardness * 100}%,\n rgba(255, 0, 0, 0) 100%\n )\n `\n }\n\n getMaskBlendMode() {\n return this.maskBlendMode\n }\n\n setSidebarImage() {\n this.sidebarImage.src = this.imageURL.href\n }\n\n async getMaskColor() {\n if (this.maskBlendMode === MaskBlendMode.Black) {\n return { r: 0, g: 0, b: 0 }\n }\n if (this.maskBlendMode === MaskBlendMode.White) {\n return { r: 255, g: 255, b: 255 }\n }\n if (this.maskBlendMode === MaskBlendMode.Negative) {\n // negative effect only works with white color\n return { r: 255, g: 255, b: 255 }\n }\n\n return { r: 0, g: 0, b: 0 }\n }\n\n async getMaskFillStyle() {\n const maskColor = await this.getMaskColor()\n\n return 'rgb(' + maskColor.r + ',' + maskColor.g + ',' + maskColor.b + ')'\n }\n\n async setCanvasBackground() {\n if (this.maskBlendMode === MaskBlendMode.White) {\n this.canvasBackground.style.background = 'black'\n } else {\n this.canvasBackground.style.background = 'white'\n }\n }\n\n getMaskCanvas() {\n return this.maskCanvas\n }\n\n getImgCanvas() {\n return this.imgCanvas\n }\n\n getImage() {\n return this.image\n }\n\n setBrushOpacity(opacity: number) {\n this.brush.style.opacity = String(opacity)\n }\n\n setSaveButtonEnabled(enabled: boolean) {\n this.saveButton.disabled = !enabled\n }\n\n setSaveButtonText(text: string) {\n this.saveButton.innerText = text\n }\n\n handlePaintBucketCursor(isPaintBucket: boolean) {\n if (isPaintBucket) {\n this.pointerZone.style.cursor =\n \"url('/cursor/paintBucket.png') 30 25, auto\"\n } else {\n this.pointerZone.style.cursor = 'none'\n }\n }\n\n handlePanCursor(isPanning: boolean) {\n if (isPanning) {\n this.pointerZone.style.cursor = 'grabbing'\n } else {\n this.pointerZone.style.cursor = 'none'\n }\n }\n\n setBrushVisibility(visible: boolean) {\n this.brush.style.opacity = visible ? '1' : '0'\n }\n\n setBrushPreviewGradientVisibility(visible: boolean) {\n this.brushPreviewGradient.style.display = visible ? 'block' : 'none'\n }\n\n async updateCursor() {\n const currentTool = await this.messageBroker.pull('currentTool')\n if (currentTool === Tools.PaintBucket) {\n this.pointerZone.style.cursor =\n \"url('/cursor/paintBucket.png') 30 25, auto\"\n this.setBrushOpacity(0)\n } else if (currentTool === Tools.ColorSelect) {\n this.pointerZone.style.cursor =\n \"url('/cursor/colorSelect.png') 15 25, auto\"\n this.setBrushOpacity(0)\n } else {\n this.pointerZone.style.cursor = 'none'\n this.setBrushOpacity(1)\n }\n\n this.updateBrushPreview()\n this.setBrushPreviewGradientVisibility(false)\n }\n\n setZoomText(zoomText: string) {\n this.zoomTextHTML.innerText = zoomText\n }\n\n setDimensionsText(dimensionsText: string) {\n this.dimensionsTextHTML.innerText = dimensionsText\n }\n}\n\nclass ToolManager {\n maskEditor: MaskEditorDialog\n messageBroker: MessageBroker\n mouseDownPoint: Point | null = null\n\n currentTool: Tools = Tools.Pen\n isAdjustingBrush: boolean = false // is user adjusting brush size or hardness with alt + right mouse button\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.addListeners()\n this.addPullTopics()\n }\n\n private addListeners() {\n this.messageBroker.subscribe('setTool', async (tool: Tools) => {\n this.setTool(tool)\n })\n\n this.messageBroker.subscribe('pointerDown', async (event: PointerEvent) => {\n this.handlePointerDown(event)\n })\n\n this.messageBroker.subscribe('pointerMove', async (event: PointerEvent) => {\n this.handlePointerMove(event)\n })\n\n this.messageBroker.subscribe('pointerUp', async (event: PointerEvent) => {\n this.handlePointerUp(event)\n })\n\n this.messageBroker.subscribe('wheel', async (event: WheelEvent) => {\n this.handleWheelEvent(event)\n })\n }\n\n private async addPullTopics() {\n this.messageBroker.createPullTopic('currentTool', async () =>\n this.getCurrentTool()\n )\n }\n\n //tools\n\n setTool(tool: Tools) {\n this.currentTool = tool\n\n if (tool != Tools.ColorSelect) {\n this.messageBroker.publish('clearLastPoint')\n }\n }\n\n getCurrentTool() {\n return this.currentTool\n }\n\n private async handlePointerDown(event: PointerEvent) {\n event.preventDefault()\n if (event.pointerType == 'touch') return\n\n var isSpacePressed = await this.messageBroker.pull('isKeyPressed', ' ')\n\n // Pan canvas\n if (event.buttons === 4 || (event.buttons === 1 && isSpacePressed)) {\n this.messageBroker.publish('panStart', event)\n this.messageBroker.publish('setBrushVisibility', false)\n return\n }\n\n //paint bucket\n if (this.currentTool === Tools.PaintBucket && event.button === 0) {\n const offset = { x: event.offsetX, y: event.offsetY }\n const coords_canvas = await this.messageBroker.pull(\n 'screenToCanvas',\n offset\n )\n this.messageBroker.publish('paintBucketFill', coords_canvas)\n this.messageBroker.publish('saveState')\n return\n }\n\n if (this.currentTool === Tools.ColorSelect && event.button === 0) {\n const offset = { x: event.offsetX, y: event.offsetY }\n const coords_canvas = await this.messageBroker.pull(\n 'screenToCanvas',\n offset\n )\n this.messageBroker.publish('colorSelectFill', coords_canvas)\n return\n }\n\n // (brush resize/change hardness) Check for alt + right mouse button\n if (event.altKey && event.button === 2) {\n this.isAdjustingBrush = true\n this.messageBroker.publish('brushAdjustmentStart', event)\n return\n }\n\n var isDrawingTool = [Tools.Pen, Tools.Eraser].includes(this.currentTool)\n //drawing\n if ([0, 2].includes(event.button) && isDrawingTool) {\n this.messageBroker.publish('drawStart', event)\n return\n }\n }\n\n private async handlePointerMove(event: PointerEvent) {\n event.preventDefault()\n if (event.pointerType == 'touch') return\n const newCursorPoint = { x: event.clientX, y: event.clientY }\n this.messageBroker.publish('cursorPoint', newCursorPoint)\n\n var isSpacePressed = await this.messageBroker.pull('isKeyPressed', ' ')\n this.messageBroker.publish('updateBrushPreview')\n\n //move the canvas\n if (event.buttons === 4 || (event.buttons === 1 && isSpacePressed)) {\n this.messageBroker.publish('panMove', event)\n return\n }\n\n //prevent drawing with other tools\n\n var isDrawingTool = [Tools.Pen, Tools.Eraser].includes(this.currentTool)\n if (!isDrawingTool) return\n\n // alt + right mouse button hold brush adjustment\n if (\n this.isAdjustingBrush &&\n (this.currentTool === Tools.Pen || this.currentTool === Tools.Eraser) &&\n event.altKey &&\n event.buttons === 2\n ) {\n this.messageBroker.publish('brushAdjustment', event)\n return\n }\n\n //draw with pen or eraser\n if (event.buttons == 1 || event.buttons == 2) {\n this.messageBroker.publish('draw', event)\n return\n }\n }\n\n private handlePointerUp(event: PointerEvent) {\n this.messageBroker.publish('panCursor', false)\n if (event.pointerType === 'touch') return\n this.messageBroker.publish('updateCursor')\n this.isAdjustingBrush = false\n this.messageBroker.publish('drawEnd', event)\n this.mouseDownPoint = null\n }\n\n private handleWheelEvent(event: WheelEvent) {\n this.messageBroker.publish('zoom', event)\n const newCursorPoint = { x: event.clientX, y: event.clientY }\n this.messageBroker.publish('cursorPoint', newCursorPoint)\n }\n}\n\nclass PanAndZoomManager {\n maskEditor: MaskEditorDialog\n messageBroker: MessageBroker\n\n DOUBLE_TAP_DELAY: number = 300\n lastTwoFingerTap: number = 0\n\n isTouchZooming: boolean = false\n lastTouchZoomDistance: number = 0\n lastTouchMidPoint: Point = { x: 0, y: 0 }\n lastTouchPoint: Point = { x: 0, y: 0 }\n\n zoom_ratio: number = 1\n interpolatedZoomRatio: number = 1\n pan_offset: Offset = { x: 0, y: 0 }\n\n mouseDownPoint: Point | null = null\n initialPan: Offset = { x: 0, y: 0 }\n\n canvasContainer: HTMLElement | null = null\n maskCanvas: HTMLCanvasElement | null = null\n rootElement: HTMLElement | null = null\n\n image: HTMLImageElement | null = null\n imageRootWidth: number = 0\n imageRootHeight: number = 0\n\n cursorPoint: Point = { x: 0, y: 0 }\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n\n this.addListeners()\n this.addPullTopics()\n }\n\n private addListeners() {\n this.messageBroker.subscribe(\n 'initZoomPan',\n async (args: [HTMLImageElement, HTMLElement]) => {\n await this.initializeCanvasPanZoom(args[0], args[1])\n }\n )\n\n this.messageBroker.subscribe('panStart', async (event: PointerEvent) => {\n this.handlePanStart(event)\n })\n\n this.messageBroker.subscribe('panMove', async (event: PointerEvent) => {\n this.handlePanMove(event)\n })\n\n this.messageBroker.subscribe('zoom', async (event: WheelEvent) => {\n this.zoom(event)\n })\n\n this.messageBroker.subscribe('cursorPoint', async (point: Point) => {\n this.updateCursorPosition(point)\n })\n\n this.messageBroker.subscribe(\n 'handleTouchStart',\n async (event: TouchEvent) => {\n this.handleTouchStart(event)\n }\n )\n\n this.messageBroker.subscribe(\n 'handleTouchMove',\n async (event: TouchEvent) => {\n this.handleTouchMove(event)\n }\n )\n\n this.messageBroker.subscribe(\n 'handleTouchEnd',\n async (event: TouchEvent) => {\n this.handleTouchEnd(event)\n }\n )\n\n this.messageBroker.subscribe('resetZoom', async () => {\n if (this.interpolatedZoomRatio === 1) return\n await this.smoothResetView()\n })\n }\n\n private addPullTopics() {\n this.messageBroker.createPullTopic(\n 'cursorPoint',\n async () => this.cursorPoint\n )\n this.messageBroker.createPullTopic('zoomRatio', async () => this.zoom_ratio)\n this.messageBroker.createPullTopic('panOffset', async () => this.pan_offset)\n }\n\n handleTouchStart(event: TouchEvent) {\n event.preventDefault()\n if ((event.touches[0] as any).touchType === 'stylus') return\n this.messageBroker.publish('setBrushVisibility', false)\n if (event.touches.length === 2) {\n const currentTime = new Date().getTime()\n const tapTimeDiff = currentTime - this.lastTwoFingerTap\n\n if (tapTimeDiff < this.DOUBLE_TAP_DELAY) {\n // Double tap detected\n this.handleDoubleTap()\n this.lastTwoFingerTap = 0 // Reset to prevent triple-tap\n } else {\n this.lastTwoFingerTap = currentTime\n\n // Existing two-finger touch logic\n this.isTouchZooming = true\n this.lastTouchZoomDistance = this.getTouchDistance(event.touches)\n const midpoint = this.getTouchMidpoint(event.touches)\n this.lastTouchMidPoint = midpoint\n }\n } else if (event.touches.length === 1) {\n this.lastTouchPoint = {\n x: event.touches[0].clientX,\n y: event.touches[0].clientY\n }\n }\n }\n\n async handleTouchMove(event: TouchEvent) {\n event.preventDefault()\n if ((event.touches[0] as any).touchType === 'stylus') return\n\n this.lastTwoFingerTap = 0\n if (this.isTouchZooming && event.touches.length === 2) {\n // Handle zooming\n const newDistance = this.getTouchDistance(event.touches)\n const zoomFactor = newDistance / this.lastTouchZoomDistance\n const oldZoom = this.zoom_ratio\n this.zoom_ratio = Math.max(\n 0.2,\n Math.min(10.0, this.zoom_ratio * zoomFactor)\n )\n const newZoom = this.zoom_ratio\n\n // Calculate the midpoint of the two touches\n const midpoint = this.getTouchMidpoint(event.touches)\n\n // Handle panning - calculate the movement of the midpoint\n if (this.lastTouchMidPoint) {\n const deltaX = midpoint.x - this.lastTouchMidPoint.x\n const deltaY = midpoint.y - this.lastTouchMidPoint.y\n\n // Apply the pan\n this.pan_offset.x += deltaX\n this.pan_offset.y += deltaY\n }\n\n // Get touch position relative to the container\n if (this.maskCanvas === null) {\n this.maskCanvas = await this.messageBroker.pull('maskCanvas')\n }\n const rect = this.maskCanvas!.getBoundingClientRect()\n const touchX = midpoint.x - rect.left\n const touchY = midpoint.y - rect.top\n\n // Calculate new pan position based on zoom\n const scaleFactor = newZoom / oldZoom\n this.pan_offset.x += touchX - touchX * scaleFactor\n this.pan_offset.y += touchY - touchY * scaleFactor\n\n this.invalidatePanZoom()\n this.lastTouchZoomDistance = newDistance\n this.lastTouchMidPoint = midpoint\n } else if (event.touches.length === 1) {\n // Handle single touch pan\n this.handleSingleTouchPan(event.touches[0])\n }\n }\n\n handleTouchEnd(event: TouchEvent) {\n event.preventDefault()\n if (\n event.touches.length === 0 &&\n (event.touches[0] as any).touchType === 'stylus'\n ) {\n return\n }\n\n this.isTouchZooming = false\n this.lastTouchMidPoint = { x: 0, y: 0 }\n\n if (event.touches.length === 0) {\n this.lastTouchPoint = { x: 0, y: 0 }\n } else if (event.touches.length === 1) {\n this.lastTouchPoint = {\n x: event.touches[0].clientX,\n y: event.touches[0].clientY\n }\n }\n }\n\n private getTouchDistance(touches: TouchList) {\n const dx = touches[0].clientX - touches[1].clientX\n const dy = touches[0].clientY - touches[1].clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n private getTouchMidpoint(touches: TouchList) {\n return {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n }\n }\n\n private async handleSingleTouchPan(touch: Touch) {\n if (this.lastTouchPoint === null) {\n this.lastTouchPoint = { x: touch.clientX, y: touch.clientY }\n return\n }\n\n const deltaX = touch.clientX - this.lastTouchPoint.x\n const deltaY = touch.clientY - this.lastTouchPoint.y\n\n this.pan_offset.x += deltaX\n this.pan_offset.y += deltaY\n\n await this.invalidatePanZoom()\n\n this.lastTouchPoint = { x: touch.clientX, y: touch.clientY }\n }\n\n private updateCursorPosition(clientPoint: Point) {\n var cursorX = clientPoint.x - this.pan_offset.x\n var cursorY = clientPoint.y - this.pan_offset.y\n\n this.cursorPoint = { x: cursorX, y: cursorY }\n }\n\n //prob redundant\n handleDoubleTap() {\n this.messageBroker.publish('undo')\n // Add any additional logic needed after undo\n }\n\n async zoom(event: WheelEvent) {\n // Store original cursor position\n const cursorPoint = { x: event.clientX, y: event.clientY }\n\n // zoom canvas\n const oldZoom = this.zoom_ratio\n const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9\n this.zoom_ratio = Math.max(\n 0.2,\n Math.min(10.0, this.zoom_ratio * zoomFactor)\n )\n const newZoom = this.zoom_ratio\n\n const maskCanvas = await this.messageBroker.pull('maskCanvas')\n\n // Get mouse position relative to the container\n const rect = maskCanvas.getBoundingClientRect()\n const mouseX = cursorPoint.x - rect.left\n const mouseY = cursorPoint.y - rect.top\n\n console.log(oldZoom, newZoom)\n // Calculate new pan position\n const scaleFactor = newZoom / oldZoom\n this.pan_offset.x += mouseX - mouseX * scaleFactor\n this.pan_offset.y += mouseY - mouseY * scaleFactor\n\n // Update pan and zoom immediately\n await this.invalidatePanZoom()\n\n const newImageWidth = maskCanvas.clientWidth\n\n const zoomRatio = newImageWidth / this.imageRootWidth\n\n this.interpolatedZoomRatio = zoomRatio\n\n this.messageBroker.publish('setZoomText', `${Math.round(zoomRatio * 100)}%`)\n\n // Update cursor position with new pan values\n this.updateCursorPosition(cursorPoint)\n\n // Update brush preview after pan/zoom is complete\n requestAnimationFrame(() => {\n this.messageBroker.publish('updateBrushPreview')\n })\n }\n\n private async smoothResetView(duration: number = 500) {\n // Store initial state\n const startZoom = this.zoom_ratio\n const startPan = { ...this.pan_offset }\n\n // Panel dimensions\n const sidePanelWidth = 220\n const toolPanelWidth = 64\n const topBarHeight = 44\n\n // Calculate available space\n const availableWidth =\n this.rootElement!.clientWidth - sidePanelWidth - toolPanelWidth\n const availableHeight = this.rootElement!.clientHeight - topBarHeight\n\n // Calculate target zoom\n const zoomRatioWidth = availableWidth / this.image!.width\n const zoomRatioHeight = availableHeight / this.image!.height\n const targetZoom = Math.min(zoomRatioWidth, zoomRatioHeight)\n\n // Calculate final dimensions\n const aspectRatio = this.image!.width / this.image!.height\n let finalWidth = 0\n let finalHeight = 0\n\n // Calculate target pan position\n const targetPan = { x: toolPanelWidth, y: topBarHeight }\n\n if (zoomRatioHeight > zoomRatioWidth) {\n finalWidth = availableWidth\n finalHeight = finalWidth / aspectRatio\n targetPan.y = (availableHeight - finalHeight) / 2 + topBarHeight\n } else {\n finalHeight = availableHeight\n finalWidth = finalHeight * aspectRatio\n targetPan.x = (availableWidth - finalWidth) / 2 + toolPanelWidth\n }\n\n const startTime = performance.now()\n const animate = (currentTime: number) => {\n const elapsed = currentTime - startTime\n const progress = Math.min(elapsed / duration, 1)\n // Cubic easing out for smooth deceleration\n const eased = 1 - Math.pow(1 - progress, 3)\n\n // Calculate intermediate zoom and pan values\n const currentZoom = startZoom + (targetZoom - startZoom) * eased\n\n this.zoom_ratio = currentZoom\n this.pan_offset.x = startPan.x + (targetPan.x - startPan.x) * eased\n this.pan_offset.y = startPan.y + (targetPan.y - startPan.y) * eased\n\n this.invalidatePanZoom()\n\n const interpolatedZoomRatio = startZoom + (1.0 - startZoom) * eased\n\n this.messageBroker.publish(\n 'setZoomText',\n `${Math.round(interpolatedZoomRatio * 100)}%`\n )\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n this.interpolatedZoomRatio = 1.0\n }\n\n async initializeCanvasPanZoom(\n image: HTMLImageElement,\n rootElement: HTMLElement\n ) {\n // Get side panel width\n let sidePanelWidth = 220\n const toolPanelWidth = 64\n let topBarHeight = 44\n\n this.rootElement = rootElement\n\n // Calculate available width accounting for both side panels\n let availableWidth =\n rootElement.clientWidth - sidePanelWidth - toolPanelWidth\n let availableHeight = rootElement.clientHeight - topBarHeight\n\n let zoomRatioWidth = availableWidth / image.width\n let zoomRatioHeight = availableHeight / image.height\n\n let aspectRatio = image.width / image.height\n\n let finalWidth = 0\n let finalHeight = 0\n\n let pan_offset: Offset = { x: toolPanelWidth, y: topBarHeight }\n\n if (zoomRatioHeight > zoomRatioWidth) {\n finalWidth = availableWidth\n finalHeight = finalWidth / aspectRatio\n pan_offset.y = (availableHeight - finalHeight) / 2 + topBarHeight\n } else {\n finalHeight = availableHeight\n finalWidth = finalHeight * aspectRatio\n pan_offset.x = (availableWidth - finalWidth) / 2 + toolPanelWidth\n }\n\n if (this.image === null) {\n this.image = image\n }\n\n this.imageRootWidth = finalWidth\n this.imageRootHeight = finalHeight\n\n this.zoom_ratio = Math.min(zoomRatioWidth, zoomRatioHeight)\n this.pan_offset = pan_offset\n\n await this.invalidatePanZoom()\n }\n\n async invalidatePanZoom() {\n // Single validation check upfront\n if (\n !this.image?.width ||\n !this.image?.height ||\n !this.pan_offset ||\n !this.zoom_ratio\n ) {\n console.warn('Missing required properties for pan/zoom')\n return\n }\n\n // Now TypeScript knows these are non-null\n const raw_width = this.image.width * this.zoom_ratio\n const raw_height = this.image.height * this.zoom_ratio\n\n // Get canvas container\n this.canvasContainer ??=\n await this.messageBroker?.pull('getCanvasContainer')\n if (!this.canvasContainer) return\n\n // Apply styles\n Object.assign(this.canvasContainer.style, {\n width: `${raw_width}px`,\n height: `${raw_height}px`,\n left: `${this.pan_offset.x}px`,\n top: `${this.pan_offset.y}px`\n })\n }\n\n private handlePanStart(event: PointerEvent) {\n let coords_canvas = this.messageBroker.pull('screenToCanvas', {\n x: event.offsetX,\n y: event.offsetY\n })\n this.mouseDownPoint = { x: event.clientX, y: event.clientY }\n this.messageBroker.publish('panCursor', true)\n this.initialPan = this.pan_offset\n return\n }\n\n private handlePanMove(event: PointerEvent) {\n if (this.mouseDownPoint === null) throw new Error('mouseDownPoint is null')\n\n let deltaX = this.mouseDownPoint.x - event.clientX\n let deltaY = this.mouseDownPoint.y - event.clientY\n\n let pan_x = this.initialPan.x - deltaX\n let pan_y = this.initialPan.y - deltaY\n\n this.pan_offset = { x: pan_x, y: pan_y }\n\n this.invalidatePanZoom()\n }\n}\n\nclass MessageBroker {\n private pushTopics: Record = {}\n private pullTopics: Record Promise> = {}\n\n constructor() {\n this.registerListeners()\n }\n\n // Push\n\n private registerListeners() {\n // Register listeners\n this.createPushTopic('panStart')\n this.createPushTopic('paintBucketFill')\n this.createPushTopic('saveState')\n this.createPushTopic('brushAdjustmentStart')\n this.createPushTopic('drawStart')\n this.createPushTopic('panMove')\n this.createPushTopic('updateBrushPreview')\n this.createPushTopic('brushAdjustment')\n this.createPushTopic('draw')\n this.createPushTopic('paintBucketCursor')\n this.createPushTopic('panCursor')\n this.createPushTopic('drawEnd')\n this.createPushTopic('zoom')\n this.createPushTopic('undo')\n this.createPushTopic('redo')\n this.createPushTopic('cursorPoint')\n this.createPushTopic('panOffset')\n this.createPushTopic('zoomRatio')\n this.createPushTopic('getMaskCanvas')\n this.createPushTopic('getCanvasContainer')\n this.createPushTopic('screenToCanvas')\n this.createPushTopic('isKeyPressed')\n this.createPushTopic('isCombinationPressed')\n this.createPushTopic('setPaintBucketTolerance')\n this.createPushTopic('setBrushSize')\n this.createPushTopic('setBrushHardness')\n this.createPushTopic('setBrushOpacity')\n this.createPushTopic('setBrushShape')\n this.createPushTopic('initZoomPan')\n this.createPushTopic('setTool')\n this.createPushTopic('pointerDown')\n this.createPushTopic('pointerMove')\n this.createPushTopic('pointerUp')\n this.createPushTopic('wheel')\n this.createPushTopic('initPaintBucketTool')\n this.createPushTopic('setBrushVisibility')\n this.createPushTopic('setBrushPreviewGradientVisibility')\n this.createPushTopic('handleTouchStart')\n this.createPushTopic('handleTouchMove')\n this.createPushTopic('handleTouchEnd')\n this.createPushTopic('colorSelectFill')\n this.createPushTopic('setColorSelectTolerance')\n this.createPushTopic('setLivePreview')\n this.createPushTopic('updateCursor')\n this.createPushTopic('setColorComparisonMethod')\n this.createPushTopic('clearLastPoint')\n this.createPushTopic('setWholeImage')\n this.createPushTopic('setMaskBoundary')\n this.createPushTopic('setMaskTolerance')\n this.createPushTopic('setBrushSmoothingPrecision')\n this.createPushTopic('setZoomText')\n this.createPushTopic('resetZoom')\n this.createPushTopic('invert')\n }\n\n /**\n * Creates a new push topic (listener is notified)\n *\n * @param {string} topicName - The name of the topic to create.\n * @throws {Error} If the topic already exists.\n */\n createPushTopic(topicName: string) {\n if (this.topicExists(this.pushTopics, topicName)) {\n throw new Error('Topic already exists')\n }\n this.pushTopics[topicName] = []\n }\n\n /**\n * Subscribe a callback function to the given topic.\n *\n * @param {string} topicName - The name of the topic to subscribe to.\n * @param {Callback} callback - The callback function to be subscribed.\n * @throws {Error} If the topic does not exist.\n */\n subscribe(topicName: string, callback: Callback) {\n if (!this.topicExists(this.pushTopics, topicName)) {\n throw new Error(`Topic \"${topicName}\" does not exist!`)\n }\n this.pushTopics[topicName].push(callback)\n }\n\n /**\n * Removes a callback function from the list of subscribers for a given topic.\n *\n * @param {string} topicName - The name of the topic to unsubscribe from.\n * @param {Callback} callback - The callback function to remove from the subscribers list.\n * @throws {Error} If the topic does not exist in the list of topics.\n */\n unsubscribe(topicName: string, callback: Callback) {\n if (!this.topicExists(this.pushTopics, topicName)) {\n throw new Error('Topic does not exist')\n }\n const index = this.pushTopics[topicName].indexOf(callback)\n if (index > -1) {\n this.pushTopics[topicName].splice(index, 1)\n }\n }\n\n /**\n * Publishes data to a specified topic with variable number of arguments.\n * @param {string} topicName - The name of the topic to publish to.\n * @param {...any[]} args - Variable number of arguments to pass to subscribers\n * @throws {Error} If the specified topic does not exist.\n */\n publish(topicName: string, ...args: any[]) {\n if (!this.topicExists(this.pushTopics, topicName)) {\n throw new Error(`Topic \"${topicName}\" does not exist!`)\n }\n\n this.pushTopics[topicName].forEach((callback) => {\n callback(...args)\n })\n }\n\n // Pull\n\n /**\n * Creates a new pull topic (listener must request data)\n *\n * @param {string} topicName - The name of the topic to create.\n * @param {() => Promise} callBack - The callback function to be called when data is requested.\n * @throws {Error} If the topic already exists.\n */\n createPullTopic(topicName: string, callBack: (data?: any) => Promise) {\n if (this.topicExists(this.pullTopics, topicName)) {\n throw new Error('Topic already exists')\n }\n this.pullTopics[topicName] = callBack\n }\n\n /**\n * Requests data from a specified pull topic.\n * @param {string} topicName - The name of the topic to request data from.\n * @returns {Promise} - The data from the pull topic.\n * @throws {Error} If the specified topic does not exist.\n */\n async pull(topicName: string, data?: any): Promise {\n if (!this.topicExists(this.pullTopics, topicName)) {\n throw new Error('Topic does not exist')\n }\n\n const callBack = this.pullTopics[topicName]\n try {\n const result = await callBack(data)\n return result\n } catch (error) {\n console.error(`Error pulling data from topic \"${topicName}\":`, error)\n throw error\n }\n }\n\n // Helper Methods\n\n /**\n * Checks if a topic exists in the given topics object.\n * @param {Record} topics - The topics object to check.\n * @param {string} topicName - The name of the topic to check.\n * @returns {boolean} - True if the topic exists, false otherwise.\n */\n private topicExists(topics: Record, topicName: string): boolean {\n return topics.hasOwnProperty(topicName)\n }\n}\n\nclass KeyboardManager {\n private keysDown: string[] = []\n private maskEditor: MaskEditorDialog\n private messageBroker: MessageBroker\n\n constructor(maskEditor: MaskEditorDialog) {\n this.maskEditor = maskEditor\n this.messageBroker = maskEditor.getMessageBroker()\n this.addPullTopics()\n }\n\n private addPullTopics() {\n // isKeyPressed\n this.messageBroker.createPullTopic('isKeyPressed', (key: string) =>\n Promise.resolve(this.isKeyDown(key))\n )\n }\n\n addListeners() {\n document.addEventListener('keydown', (event) => this.handleKeyDown(event))\n document.addEventListener('keyup', (event) => this.handleKeyUp(event))\n window.addEventListener('blur', () => this.clearKeys())\n }\n\n removeListeners() {\n document.removeEventListener('keydown', (event) =>\n this.handleKeyDown(event)\n )\n document.removeEventListener('keyup', (event) => this.handleKeyUp(event))\n }\n\n private clearKeys() {\n this.keysDown = []\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if (!this.keysDown.includes(event.key)) {\n this.keysDown.push(event.key)\n }\n //if (this.redoCombinationPressed()) return\n //this.undoCombinationPressed()\n }\n\n private handleKeyUp(event: KeyboardEvent) {\n this.keysDown = this.keysDown.filter((key) => key !== event.key)\n }\n\n private isKeyDown(key: string) {\n return this.keysDown.includes(key)\n }\n\n // combinations\n\n private undoCombinationPressed() {\n const combination = ['ctrl', 'z']\n const keysDownLower = this.keysDown.map((key) => key.toLowerCase())\n const result = combination.every((key) => keysDownLower.includes(key))\n if (result) this.messageBroker.publish('undo')\n return result\n }\n\n private redoCombinationPressed() {\n const combination = ['ctrl', 'shift', 'z']\n const keysDownLower = this.keysDown.map((key) => key.toLowerCase())\n const result = combination.every((key) => keysDownLower.includes(key))\n if (result) this.messageBroker.publish('redo')\n return result\n }\n}\n\napp.registerExtension({\n name: 'Comfy.MaskEditor',\n settings: [\n {\n id: 'Comfy.MaskEditor.UseNewEditor',\n category: ['Mask Editor', 'NewEditor'],\n name: 'Use new mask editor',\n tooltip: 'Switch to the new mask editor interface',\n type: 'boolean',\n defaultValue: true,\n experimental: true\n },\n {\n id: 'Comfy.MaskEditor.BrushAdjustmentSpeed',\n category: ['Mask Editor', 'BrushAdjustment', 'Sensitivity'],\n name: 'Brush adjustment speed multiplier',\n tooltip:\n 'Controls how quickly the brush size and hardness change when adjusting. Higher values mean faster changes.',\n experimental: true,\n type: 'slider',\n attrs: {\n min: 0.1,\n max: 2.0,\n step: 0.1\n },\n defaultValue: 1.0,\n versionAdded: '1.0.0'\n },\n {\n id: 'Comfy.MaskEditor.UseDominantAxis',\n category: ['Mask Editor', 'BrushAdjustment', 'UseDominantAxis'],\n name: 'Lock brush adjustment to dominant axis',\n tooltip:\n 'When enabled, brush adjustments will only affect size OR hardness based on which direction you move more',\n type: 'boolean',\n defaultValue: true,\n experimental: true\n }\n ],\n init(app) {\n // Create function before assignment\n function openMaskEditor(): void {\n const useNewEditor = app.extensionManager.setting.get(\n 'Comfy.MaskEditor.UseNewEditor'\n )\n if (useNewEditor) {\n const dlg = MaskEditorDialog.getInstance() as any\n if (dlg?.isOpened && !dlg.isOpened()) {\n dlg.show()\n }\n } else {\n const dlg = MaskEditorDialogOld.getInstance() as any\n if (dlg?.isOpened && !dlg.isOpened()) {\n dlg.show()\n }\n }\n }\n\n // Assign the created function\n ;(ComfyApp as any).open_maskeditor = openMaskEditor\n\n // Ensure boolean return type\n const context_predicate = (): boolean => {\n return !!(\n ComfyApp.clipspace &&\n ComfyApp.clipspace.imgs &&\n ComfyApp.clipspace.imgs.length > 0\n )\n }\n\n ClipspaceDialog.registerButton(\n 'MaskEditor',\n context_predicate,\n openMaskEditor\n )\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport { ComfyDialog, $el } from '../../scripts/ui'\nimport { GroupNodeConfig, GroupNodeHandler } from './groupNode'\nimport { LGraphCanvas } from '@comfyorg/litegraph'\nimport { useToastStore } from '@/stores/toastStore'\nimport { deserialiseAndCreate } from '@/extensions/core/vintageClipboard'\nimport { showPromptDialog } from '@/services/dialogService'\nimport { t } from '@/i18n'\n\n// Adds the ability to save and add multiple nodes as a template\n// To save:\n// Select multiple nodes (ctrl + drag to select a region or ctrl+click individual nodes)\n// Right click the canvas\n// Save Node Template -> give it a name\n//\n// To add:\n// Right click the canvas\n// Node templates -> click the one to add\n//\n// To delete/rename:\n// Right click the canvas\n// Node templates -> Manage\n//\n// To rearrange:\n// Open the manage dialog and Drag and drop elements using the \"Name:\" label as handle\n\nconst id = 'Comfy.NodeTemplates'\nconst file = 'comfy.templates.json'\n\nclass ManageTemplates extends ComfyDialog {\n templates: any[]\n draggedEl: HTMLElement | null\n saveVisualCue: number | null\n emptyImg: HTMLImageElement\n importInput: HTMLInputElement\n\n constructor() {\n super()\n this.load().then((v) => {\n this.templates = v\n })\n\n this.element.classList.add('comfy-manage-templates')\n this.draggedEl = null\n this.saveVisualCue = null\n this.emptyImg = new Image()\n this.emptyImg.src =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='\n\n this.importInput = $el('input', {\n type: 'file',\n accept: '.json',\n multiple: true,\n style: { display: 'none' },\n parent: document.body,\n onchange: () => this.importAll()\n }) as HTMLInputElement\n }\n\n createButtons() {\n const btns = super.createButtons()\n btns[0].textContent = 'Close'\n btns[0].onclick = (e) => {\n clearTimeout(this.saveVisualCue)\n this.close()\n }\n btns.unshift(\n $el('button', {\n type: 'button',\n textContent: 'Export',\n onclick: () => this.exportAll()\n })\n )\n btns.unshift(\n $el('button', {\n type: 'button',\n textContent: 'Import',\n onclick: () => {\n this.importInput.click()\n }\n })\n )\n return btns\n }\n\n async load() {\n let templates = []\n const res = await api.getUserData(file)\n if (res.status === 200) {\n try {\n templates = await res.json()\n } catch (error) {}\n } else if (res.status !== 404) {\n console.error(res.status + ' ' + res.statusText)\n }\n return templates ?? []\n }\n\n async store() {\n const templates = JSON.stringify(this.templates, undefined, 4)\n try {\n await api.storeUserData(file, templates, { stringify: false })\n } catch (error) {\n console.error(error)\n useToastStore().addAlert(error.message)\n }\n }\n\n async importAll() {\n for (const file of this.importInput.files) {\n if (file.type === 'application/json' || file.name.endsWith('.json')) {\n const reader = new FileReader()\n reader.onload = async () => {\n const importFile = JSON.parse(reader.result as string)\n if (importFile?.templates) {\n for (const template of importFile.templates) {\n if (template?.name && template?.data) {\n this.templates.push(template)\n }\n }\n await this.store()\n }\n }\n await reader.readAsText(file)\n }\n }\n\n this.importInput.value = null\n\n this.close()\n }\n\n exportAll() {\n if (this.templates.length == 0) {\n useToastStore().addAlert('No templates to export.')\n return\n }\n\n const json = JSON.stringify({ templates: this.templates }, null, 2) // convert the data to a JSON string\n const blob = new Blob([json], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = $el('a', {\n href: url,\n download: 'node_templates.json',\n style: { display: 'none' },\n parent: document.body\n })\n a.click()\n setTimeout(function () {\n a.remove()\n window.URL.revokeObjectURL(url)\n }, 0)\n }\n\n show() {\n // Show list of template names + delete button\n super.show(\n $el(\n 'div',\n {},\n this.templates.flatMap((t, i) => {\n let nameInput\n return [\n $el(\n 'div',\n {\n dataset: { id: i.toString() },\n className: 'templateManagerRow',\n style: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n border: '1px dashed transparent',\n gap: '5px',\n backgroundColor: 'var(--comfy-menu-bg)'\n },\n ondragstart: (e) => {\n this.draggedEl = e.currentTarget\n e.currentTarget.style.opacity = '0.6'\n e.currentTarget.style.border = '1px dashed yellow'\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setDragImage(this.emptyImg, 0, 0)\n },\n ondragend: (e) => {\n e.target.style.opacity = '1'\n e.currentTarget.style.border = '1px dashed transparent'\n e.currentTarget.removeAttribute('draggable')\n\n // rearrange the elements\n this.element\n .querySelectorAll('.templateManagerRow')\n .forEach((el: HTMLElement, i) => {\n var prev_i = Number.parseInt(el.dataset.id)\n\n if (el == this.draggedEl && prev_i != i) {\n this.templates.splice(\n i,\n 0,\n this.templates.splice(prev_i, 1)[0]\n )\n }\n el.dataset.id = i.toString()\n })\n this.store()\n },\n ondragover: (e) => {\n e.preventDefault()\n if (e.currentTarget == this.draggedEl) return\n\n let rect = e.currentTarget.getBoundingClientRect()\n if (e.clientY > rect.top + rect.height / 2) {\n e.currentTarget.parentNode.insertBefore(\n this.draggedEl,\n e.currentTarget.nextSibling\n )\n } else {\n e.currentTarget.parentNode.insertBefore(\n this.draggedEl,\n e.currentTarget\n )\n }\n }\n },\n [\n $el(\n 'label',\n {\n textContent: 'Name: ',\n style: {\n cursor: 'grab'\n },\n onmousedown: (e) => {\n // enable dragging only from the label\n if (e.target.localName == 'label')\n e.currentTarget.parentNode.draggable = 'true'\n }\n },\n [\n $el('input', {\n value: t.name,\n dataset: { name: t.name },\n style: {\n transitionProperty: 'background-color',\n transitionDuration: '0s'\n },\n onchange: (e) => {\n clearTimeout(this.saveVisualCue)\n var el = e.target\n var row = el.parentNode.parentNode\n this.templates[row.dataset.id].name =\n el.value.trim() || 'untitled'\n this.store()\n el.style.backgroundColor = 'rgb(40, 95, 40)'\n el.style.transitionDuration = '0s'\n // @ts-expect-error\n // In browser env the return value is number.\n this.saveVisualCue = setTimeout(function () {\n el.style.transitionDuration = '.7s'\n el.style.backgroundColor = 'var(--comfy-input-bg)'\n }, 15)\n },\n onkeypress: (e) => {\n var el = e.target\n clearTimeout(this.saveVisualCue)\n el.style.transitionDuration = '0s'\n el.style.backgroundColor = 'var(--comfy-input-bg)'\n },\n $: (el) => (nameInput = el)\n })\n ]\n ),\n $el('div', {}, [\n $el('button', {\n textContent: 'Export',\n style: {\n fontSize: '12px',\n fontWeight: 'normal'\n },\n onclick: (e) => {\n const json = JSON.stringify({ templates: [t] }, null, 2) // convert the data to a JSON string\n const blob = new Blob([json], {\n type: 'application/json'\n })\n const url = URL.createObjectURL(blob)\n const a = $el('a', {\n href: url,\n download: (nameInput.value || t.name) + '.json',\n style: { display: 'none' },\n parent: document.body\n })\n a.click()\n setTimeout(function () {\n a.remove()\n window.URL.revokeObjectURL(url)\n }, 0)\n }\n }),\n $el('button', {\n textContent: 'Delete',\n style: {\n fontSize: '12px',\n color: 'red',\n fontWeight: 'normal'\n },\n onclick: (e) => {\n const item = e.target.parentNode.parentNode\n item.parentNode.removeChild(item)\n this.templates.splice(item.dataset.id * 1, 1)\n this.store()\n // update the rows index, setTimeout ensures that the list is updated\n var that = this\n setTimeout(function () {\n that.element\n .querySelectorAll('.templateManagerRow')\n .forEach((el: HTMLElement, i) => {\n el.dataset.id = i.toString()\n })\n }, 0)\n }\n })\n ])\n ]\n )\n ]\n })\n )\n )\n }\n}\n\napp.registerExtension({\n name: id,\n setup() {\n const manage = new ManageTemplates()\n\n const clipboardAction = async (cb) => {\n // We use the clipboard functions but dont want to overwrite the current user clipboard\n // Restore it after we've run our callback\n const old = localStorage.getItem('litegrapheditor_clipboard')\n await cb()\n localStorage.setItem('litegrapheditor_clipboard', old)\n }\n\n const orig = LGraphCanvas.prototype.getCanvasMenuOptions\n LGraphCanvas.prototype.getCanvasMenuOptions = function () {\n const options = orig.apply(this, arguments)\n\n options.push(null)\n options.push({\n content: `Save Selected as Template`,\n disabled: !Object.keys(app.canvas.selected_nodes || {}).length,\n callback: async () => {\n const name = await showPromptDialog({\n title: t('nodeTemplates.saveAsTemplate'),\n message: t('nodeTemplates.enterName'),\n defaultValue: ''\n })\n if (!name?.trim()) return\n\n clipboardAction(() => {\n app.canvas.copyToClipboard()\n let data = localStorage.getItem('litegrapheditor_clipboard')\n data = JSON.parse(data)\n const nodeIds = Object.keys(app.canvas.selected_nodes)\n for (let i = 0; i < nodeIds.length; i++) {\n const node = app.graph.getNodeById(nodeIds[i])\n const nodeData = node?.constructor.nodeData\n\n let groupData = GroupNodeHandler.getGroupData(node)\n if (groupData) {\n groupData = groupData.nodeData\n // @ts-expect-error\n if (!data.groupNodes) {\n // @ts-expect-error\n data.groupNodes = {}\n }\n // @ts-expect-error\n data.groupNodes[nodeData.name] = groupData\n // @ts-expect-error\n data.nodes[i].type = nodeData.name\n }\n }\n\n manage.templates.push({\n name,\n data: JSON.stringify(data)\n })\n manage.store()\n })\n }\n })\n\n // Map each template to a menu item\n const subItems = manage.templates.map((t) => {\n return {\n content: t.name,\n callback: () => {\n clipboardAction(async () => {\n const data = JSON.parse(t.data)\n await GroupNodeConfig.registerFromWorkflow(data.groupNodes, {})\n\n // Check for old clipboard format\n if (!data.reroutes) {\n deserialiseAndCreate(t.data, app.canvas)\n } else {\n localStorage.setItem('litegrapheditor_clipboard', t.data)\n app.canvas.pasteFromClipboard()\n }\n })\n }\n }\n })\n\n subItems.push(null, {\n content: 'Manage',\n callback: () => manage.show()\n })\n\n options.push({\n content: 'Node Templates',\n submenu: {\n options: subItems\n }\n })\n\n return options\n }\n }\n})\n","// @ts-strict-ignore\nimport { LiteGraph, LGraphCanvas } from '@comfyorg/litegraph'\nimport { app } from '../../scripts/app'\nimport { ComfyWidgets } from '../../scripts/widgets'\nimport { LGraphNode } from '@comfyorg/litegraph'\n// Node that add notes to your project\n\napp.registerExtension({\n name: 'Comfy.NoteNode',\n registerCustomNodes() {\n class NoteNode extends LGraphNode {\n static category: string\n\n color = LGraphCanvas.node_colors.yellow.color\n bgcolor = LGraphCanvas.node_colors.yellow.bgcolor\n groupcolor = LGraphCanvas.node_colors.yellow.groupcolor\n isVirtualNode: boolean\n collapsable: boolean\n title_mode: number\n\n constructor(title?: string) {\n super(title)\n if (!this.properties) {\n this.properties = { text: '' }\n }\n ComfyWidgets.STRING(\n // Should we extends LGraphNode? Yesss\n this,\n '',\n ['', { default: this.properties.text, multiline: true }],\n app\n )\n\n this.serialize_widgets = true\n this.isVirtualNode = true\n }\n }\n\n // Load default visibility\n\n LiteGraph.registerNodeType(\n 'Note',\n Object.assign(NoteNode, {\n title_mode: LiteGraph.NORMAL_TITLE,\n title: 'Note',\n collapsable: true\n })\n )\n\n NoteNode.category = 'utils'\n }\n})\n","// @ts-strict-ignore\nimport type { IContextMenuValue } from '@comfyorg/litegraph'\nimport { app } from '../../scripts/app'\nimport { mergeIfValid, getWidgetConfig, setWidgetConfig } from './widgetInputs'\nimport { LiteGraph, LGraphCanvas, LGraphNode } from '@comfyorg/litegraph'\n\n// Node that allows you to redirect connections for cleaner graphs\n\napp.registerExtension({\n name: 'Comfy.RerouteNode',\n registerCustomNodes(app) {\n interface RerouteNode extends LGraphNode {\n __outputType?: string\n }\n\n class RerouteNode extends LGraphNode {\n static category: string | undefined\n static defaultVisibility = false\n\n constructor(title?: string) {\n super(title)\n if (!this.properties) {\n this.properties = {}\n }\n this.properties.showOutputText = RerouteNode.defaultVisibility\n this.properties.horizontal = false\n\n this.addInput('', '*')\n this.addOutput(this.properties.showOutputText ? '*' : '', '*')\n\n this.onAfterGraphConfigured = function () {\n requestAnimationFrame(() => {\n this.onConnectionsChange(LiteGraph.INPUT, null, true, null)\n })\n }\n\n this.onConnectionsChange = (type, index, connected, link_info) => {\n this.applyOrientation()\n\n // Prevent multiple connections to different types when we have no input\n if (connected && type === LiteGraph.OUTPUT) {\n // Ignore wildcard nodes as these will be updated to real types\n const types = new Set(\n this.outputs[0].links\n .map((l) => app.graph.links[l].type)\n .filter((t) => t !== '*')\n )\n if (types.size > 1) {\n const linksToDisconnect = []\n for (let i = 0; i < this.outputs[0].links.length - 1; i++) {\n const linkId = this.outputs[0].links[i]\n const link = app.graph.links[linkId]\n linksToDisconnect.push(link)\n }\n for (const link of linksToDisconnect) {\n const node = app.graph.getNodeById(link.target_id)\n node.disconnectInput(link.target_slot)\n }\n }\n }\n\n // Find root input\n let currentNode: LGraphNode | null = this\n let updateNodes = []\n let inputType = null\n let inputNode = null\n while (currentNode) {\n updateNodes.unshift(currentNode)\n const linkId = currentNode.inputs[0].link\n if (linkId !== null) {\n const link = app.graph.links[linkId]\n if (!link) return\n const node = app.graph.getNodeById(link.origin_id)\n const type = node.constructor.type\n if (type === 'Reroute') {\n if (node === this) {\n // We've found a circle\n currentNode.disconnectInput(link.target_slot)\n currentNode = null\n } else {\n // Move the previous node\n currentNode = node\n }\n } else {\n // We've found the end\n inputNode = currentNode\n inputType = node.outputs[link.origin_slot]?.type ?? null\n break\n }\n } else {\n // This path has no input node\n currentNode = null\n break\n }\n }\n\n // Find all outputs\n const nodes: LGraphNode[] = [this]\n let outputType = null\n while (nodes.length) {\n currentNode = nodes.pop()\n const outputs =\n (currentNode.outputs ? currentNode.outputs[0].links : []) || []\n if (outputs.length) {\n for (const linkId of outputs) {\n const link = app.graph.links[linkId]\n\n // When disconnecting sometimes the link is still registered\n if (!link) continue\n\n const node = app.graph.getNodeById(link.target_id)\n const type = node.constructor.type\n\n if (type === 'Reroute') {\n // Follow reroute nodes\n nodes.push(node)\n updateNodes.push(node)\n } else {\n // We've found an output\n const nodeOutType =\n node.inputs &&\n node.inputs[link?.target_slot] &&\n node.inputs[link.target_slot].type\n ? node.inputs[link.target_slot].type\n : null\n if (\n inputType &&\n !LiteGraph.isValidConnection(inputType, nodeOutType)\n ) {\n // The output doesnt match our input so disconnect it\n node.disconnectInput(link.target_slot)\n } else {\n outputType = nodeOutType\n }\n }\n }\n } else {\n // No more outputs for this path\n }\n }\n\n const displayType = inputType || outputType || '*'\n const color = LGraphCanvas.link_type_colors[displayType]\n\n let widgetConfig\n let targetWidget\n let widgetType\n // Update the types of each node\n for (const node of updateNodes) {\n // If we dont have an input type we are always wildcard but we'll show the output type\n // This lets you change the output link to a different type and all nodes will update\n node.outputs[0].type = inputType || '*'\n node.__outputType = displayType\n node.outputs[0].name = node.properties.showOutputText\n ? displayType\n : ''\n node.size = node.computeSize()\n node.applyOrientation()\n\n for (const l of node.outputs[0].links || []) {\n const link = app.graph.links[l]\n if (link) {\n link.color = color\n\n if (app.configuringGraph) continue\n const targetNode = app.graph.getNodeById(link.target_id)\n const targetInput = targetNode.inputs?.[link.target_slot]\n if (targetInput?.widget) {\n const config = getWidgetConfig(targetInput)\n if (!widgetConfig) {\n widgetConfig = config[1] ?? {}\n widgetType = config[0]\n }\n if (!targetWidget) {\n targetWidget = targetNode.widgets?.find(\n (w) => w.name === (targetInput.widget as any).name\n )\n }\n\n const merged = mergeIfValid(targetInput, [\n config[0],\n widgetConfig\n ])\n if (merged.customConfig) {\n widgetConfig = merged.customConfig\n }\n }\n }\n }\n }\n\n for (const node of updateNodes) {\n if (widgetConfig && outputType) {\n node.inputs[0].widget = { name: 'value' }\n setWidgetConfig(\n node.inputs[0],\n [widgetType ?? displayType, widgetConfig],\n targetWidget\n )\n } else {\n setWidgetConfig(node.inputs[0], null)\n }\n }\n\n if (inputNode) {\n const link = app.graph.links[inputNode.inputs[0].link]\n if (link) {\n link.color = color\n }\n }\n }\n\n this.clone = function () {\n const cloned = RerouteNode.prototype.clone.apply(this)\n cloned.removeOutput(0)\n cloned.addOutput(this.properties.showOutputText ? '*' : '', '*')\n cloned.size = cloned.computeSize()\n return cloned\n }\n\n // This node is purely frontend and does not impact the resulting prompt so should not be serialized\n this.isVirtualNode = true\n }\n\n getExtraMenuOptions(_, options): IContextMenuValue[] {\n options.unshift(\n {\n content:\n (this.properties.showOutputText ? 'Hide' : 'Show') + ' Type',\n callback: () => {\n this.properties.showOutputText = !this.properties.showOutputText\n if (this.properties.showOutputText) {\n this.outputs[0].name =\n this.__outputType || (this.outputs[0].type as string)\n } else {\n this.outputs[0].name = ''\n }\n this.size = this.computeSize()\n this.applyOrientation()\n app.graph.setDirtyCanvas(true, true)\n }\n },\n {\n content:\n (RerouteNode.defaultVisibility ? 'Hide' : 'Show') +\n ' Type By Default',\n callback: () => {\n RerouteNode.setDefaultTextVisibility(\n !RerouteNode.defaultVisibility\n )\n }\n },\n {\n // naming is inverted with respect to LiteGraphNode.horizontal\n // LiteGraphNode.horizontal == true means that\n // each slot in the inputs and outputs are laid out horizontally,\n // which is the opposite of the visual orientation of the inputs and outputs as a node\n content:\n 'Set ' + (this.properties.horizontal ? 'Horizontal' : 'Vertical'),\n callback: () => {\n this.properties.horizontal = !this.properties.horizontal\n this.applyOrientation()\n }\n }\n )\n return []\n }\n applyOrientation() {\n this.horizontal = this.properties.horizontal\n if (this.horizontal) {\n // we correct the input position, because LiteGraphNode.horizontal\n // doesn't account for title presence\n // which reroute nodes don't have\n this.inputs[0].pos = [this.size[0] / 2, 0]\n } else {\n delete this.inputs[0].pos\n }\n app.graph.setDirtyCanvas(true, true)\n }\n\n computeSize(): [number, number] {\n return [\n this.properties.showOutputText && this.outputs && this.outputs.length\n ? Math.max(\n 75,\n LiteGraph.NODE_TEXT_SIZE * this.outputs[0].name.length * 0.6 +\n 40\n )\n : 75,\n 26\n ]\n }\n\n static setDefaultTextVisibility(visible) {\n RerouteNode.defaultVisibility = visible\n if (visible) {\n localStorage['Comfy.RerouteNode.DefaultVisibility'] = 'true'\n } else {\n delete localStorage['Comfy.RerouteNode.DefaultVisibility']\n }\n }\n }\n\n // Load default visibility\n RerouteNode.setDefaultTextVisibility(\n !!localStorage['Comfy.RerouteNode.DefaultVisibility']\n )\n\n LiteGraph.registerNodeType(\n 'Reroute',\n Object.assign(RerouteNode, {\n title_mode: LiteGraph.NO_TITLE,\n title: 'Reroute',\n collapsable: false\n })\n )\n\n RerouteNode.category = 'utils'\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { applyTextReplacements } from '../../scripts/utils'\n// Use widget values and dates in output filenames\n\napp.registerExtension({\n name: 'Comfy.SaveImageExtraOutput',\n async beforeRegisterNodeDef(nodeType, nodeData, app) {\n if (nodeData.name === 'SaveImage' || nodeData.name === 'SaveAnimatedWEBP') {\n const onNodeCreated = nodeType.prototype.onNodeCreated\n // When the SaveImage node is created we want to override the serialization of the output name widget to run our S&R\n nodeType.prototype.onNodeCreated = function () {\n const r = onNodeCreated\n ? onNodeCreated.apply(this, arguments)\n : undefined\n\n const widget = this.widgets.find((w) => w.name === 'filename_prefix')\n widget.serializeValue = () => {\n return applyTextReplacements(app, widget.value)\n }\n\n return r\n }\n } else {\n // When any other node is created add a property to alias the node\n const onNodeCreated = nodeType.prototype.onNodeCreated\n nodeType.prototype.onNodeCreated = function () {\n const r = onNodeCreated\n ? onNodeCreated.apply(this, arguments)\n : undefined\n\n if (!this.properties || !('Node name for S&R' in this.properties)) {\n this.addProperty('Node name for S&R', this.constructor.type, 'string')\n }\n\n return r\n }\n }\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { LGraphCanvas, LiteGraph } from '@comfyorg/litegraph'\n\nlet touchZooming\nlet touchCount = 0\n\napp.registerExtension({\n name: 'Comfy.SimpleTouchSupport',\n setup() {\n let touchDist\n let touchTime\n let lastTouch\n let lastScale\n function getMultiTouchPos(e) {\n return Math.hypot(\n e.touches[0].clientX - e.touches[1].clientX,\n e.touches[0].clientY - e.touches[1].clientY\n )\n }\n\n function getMultiTouchCenter(e) {\n return {\n clientX: (e.touches[0].clientX + e.touches[1].clientX) / 2,\n clientY: (e.touches[0].clientY + e.touches[1].clientY) / 2\n }\n }\n\n app.canvasEl.parentElement.addEventListener(\n 'touchstart',\n (e: TouchEvent) => {\n touchCount++\n lastTouch = null\n lastScale = null\n if (e.touches?.length === 1) {\n // Store start time for press+hold for context menu\n touchTime = new Date()\n lastTouch = e.touches[0]\n } else {\n touchTime = null\n if (e.touches?.length === 2) {\n // Store center pos for zoom\n lastScale = app.canvas.ds.scale\n lastTouch = getMultiTouchCenter(e)\n\n touchDist = getMultiTouchPos(e)\n app.canvas.pointer.isDown = false\n }\n }\n },\n true\n )\n\n app.canvasEl.parentElement.addEventListener('touchend', (e: TouchEvent) => {\n touchCount--\n\n if (e.touches?.length !== 1) touchZooming = false\n if (touchTime && !e.touches?.length) {\n if (new Date().getTime() - touchTime > 600) {\n if (e.target === app.canvasEl) {\n app.canvasEl.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 2,\n clientX: e.changedTouches[0].clientX,\n clientY: e.changedTouches[0].clientY\n })\n )\n e.preventDefault()\n }\n }\n touchTime = null\n }\n })\n\n app.canvasEl.parentElement.addEventListener(\n 'touchmove',\n (e) => {\n touchTime = null\n if (e.touches?.length === 2 && lastTouch && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault() // Prevent browser from zooming when two textareas are touched\n app.canvas.pointer.isDown = false\n touchZooming = true\n\n LiteGraph.closeAllContextMenus(window)\n // @ts-expect-error\n app.canvas.search_box?.close()\n const newTouchDist = getMultiTouchPos(e)\n\n const center = getMultiTouchCenter(e)\n\n let scale = (lastScale * newTouchDist) / touchDist\n\n const newX = (center.clientX - lastTouch.clientX) / scale\n const newY = (center.clientY - lastTouch.clientY) / scale\n\n // Code from LiteGraph\n if (scale < app.canvas.ds.min_scale) {\n scale = app.canvas.ds.min_scale\n } else if (scale > app.canvas.ds.max_scale) {\n scale = app.canvas.ds.max_scale\n }\n\n const oldScale = app.canvas.ds.scale\n\n app.canvas.ds.scale = scale\n\n // Code from LiteGraph\n if (Math.abs(app.canvas.ds.scale - 1) < 0.01) {\n app.canvas.ds.scale = 1\n }\n\n const newScale = app.canvas.ds.scale\n\n const convertScaleToOffset = (scale) => [\n center.clientX / scale - app.canvas.ds.offset[0],\n center.clientY / scale - app.canvas.ds.offset[1]\n ]\n var oldCenter = convertScaleToOffset(oldScale)\n var newCenter = convertScaleToOffset(newScale)\n\n app.canvas.ds.offset[0] += newX + newCenter[0] - oldCenter[0]\n app.canvas.ds.offset[1] += newY + newCenter[1] - oldCenter[1]\n\n lastTouch.clientX = center.clientX\n lastTouch.clientY = center.clientY\n\n app.canvas.setDirty(true, true)\n }\n },\n true\n )\n }\n})\n\nconst processMouseDown = LGraphCanvas.prototype.processMouseDown\nLGraphCanvas.prototype.processMouseDown = function (e) {\n if (touchZooming || touchCount) {\n return\n }\n app.canvas.pointer.isDown = false // Prevent context menu from opening on second tap\n return processMouseDown.apply(this, arguments)\n}\n\nconst processMouseMove = LGraphCanvas.prototype.processMouseMove\nLGraphCanvas.prototype.processMouseMove = function (e) {\n if (touchZooming || touchCount > 1) {\n return\n }\n return processMouseMove.apply(this, arguments)\n}\n","import { app } from '../../scripts/app'\nimport { ComfyWidgets } from '../../scripts/widgets'\nimport { LiteGraph } from '@comfyorg/litegraph'\n// Adds defaults for quickly adding nodes with middle click on the input/output\n\napp.registerExtension({\n name: 'Comfy.SlotDefaults',\n suggestionsNumber: null,\n init() {\n LiteGraph.search_filter_enabled = true\n LiteGraph.middle_click_slot_add_default_node = true\n this.suggestionsNumber = app.ui.settings.addSetting({\n id: 'Comfy.NodeSuggestions.number',\n category: ['Comfy', 'Node Search Box', 'NodeSuggestions'],\n name: 'Number of nodes suggestions',\n tooltip: 'Only for litegraph searchbox/context menu',\n type: 'slider',\n attrs: {\n min: 1,\n max: 100,\n step: 1\n },\n defaultValue: 5,\n onChange: (newVal, oldVal) => {\n this.setDefaults(newVal)\n }\n })\n },\n slot_types_default_out: {},\n slot_types_default_in: {},\n async beforeRegisterNodeDef(nodeType, nodeData, app) {\n var nodeId = nodeData.name\n const inputs = nodeData['input']?.['required'] //only show required inputs to reduce the mess also not logical to create node with optional inputs\n for (const inputKey in inputs) {\n var input = inputs[inputKey]\n if (typeof input[0] !== 'string') continue\n\n var type = input[0]\n if (type in ComfyWidgets) {\n var customProperties = input[1]\n if (!customProperties?.forceInput) continue //ignore widgets that don't force input\n }\n\n if (!(type in this.slot_types_default_out)) {\n this.slot_types_default_out[type] = ['Reroute']\n }\n if (this.slot_types_default_out[type].includes(nodeId)) continue\n this.slot_types_default_out[type].push(nodeId)\n\n // Input types have to be stored as lower case\n // Store each node that can handle this input type\n const lowerType = type.toLocaleLowerCase()\n if (!(lowerType in LiteGraph.registered_slot_in_types)) {\n LiteGraph.registered_slot_in_types[lowerType] = { nodes: [] }\n }\n LiteGraph.registered_slot_in_types[lowerType].nodes.push(\n // @ts-expect-error ComfyNode\n nodeType.comfyClass\n )\n }\n\n var outputs = nodeData['output'] ?? []\n for (const el of outputs) {\n const type = el as string\n if (!(type in this.slot_types_default_in)) {\n this.slot_types_default_in[type] = ['Reroute'] // [\"Reroute\", \"Primitive\"]; primitive doesn't always work :'()\n }\n\n this.slot_types_default_in[type].push(nodeId)\n\n // Store each node that can handle this output type\n if (!(type in LiteGraph.registered_slot_out_types)) {\n LiteGraph.registered_slot_out_types[type] = { nodes: [] }\n }\n // @ts-expect-error ComfyNode\n LiteGraph.registered_slot_out_types[type].nodes.push(nodeType.comfyClass)\n\n if (!LiteGraph.slot_types_out.includes(type)) {\n LiteGraph.slot_types_out.push(type)\n }\n }\n\n var maxNum = this.suggestionsNumber.value\n this.setDefaults(maxNum)\n },\n setDefaults(maxNum?: number | null) {\n LiteGraph.slot_types_default_out = {}\n LiteGraph.slot_types_default_in = {}\n\n for (const type in this.slot_types_default_out) {\n LiteGraph.slot_types_default_out[type] = this.slot_types_default_out[\n type\n ].slice(0, maxNum)\n }\n for (const type in this.slot_types_default_in) {\n LiteGraph.slot_types_default_in[type] = this.slot_types_default_in[\n type\n ].slice(0, maxNum)\n }\n }\n})\n","import { app } from '../../scripts/app'\nimport { ComfyNodeDef } from '@/types/apiTypes'\n\n// Adds an upload button to the nodes\n\napp.registerExtension({\n name: 'Comfy.UploadImage',\n beforeRegisterNodeDef(nodeType, nodeData: ComfyNodeDef) {\n if (nodeData?.input?.required?.image?.[1]?.image_upload === true) {\n nodeData.input.required.upload = ['IMAGEUPLOAD']\n }\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport { useToastStore } from '@/stores/toastStore'\n\nconst WEBCAM_READY = Symbol()\n\napp.registerExtension({\n name: 'Comfy.WebcamCapture',\n getCustomWidgets(app) {\n return {\n WEBCAM(node, inputName) {\n let res\n node[WEBCAM_READY] = new Promise((resolve) => (res = resolve))\n\n const container = document.createElement('div')\n container.style.background = 'rgba(0,0,0,0.25)'\n container.style.textAlign = 'center'\n\n const video = document.createElement('video')\n video.style.height = video.style.width = '100%'\n\n const loadVideo = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n video: true,\n audio: false\n })\n container.replaceChildren(video)\n\n setTimeout(() => res(video), 500) // Fallback as loadedmetadata doesnt fire sometimes?\n video.addEventListener('loadedmetadata', () => res(video), false)\n video.srcObject = stream\n video.play()\n } catch (error) {\n const label = document.createElement('div')\n label.style.color = 'red'\n label.style.overflow = 'auto'\n label.style.maxHeight = '100%'\n label.style.whiteSpace = 'pre-wrap'\n\n if (window.isSecureContext) {\n label.textContent =\n 'Unable to load webcam, please ensure access is granted:\\n' +\n error.message\n } else {\n label.textContent =\n 'Unable to load webcam. A secure context is required, if you are not accessing ComfyUI on localhost (127.0.0.1) you will have to enable TLS (https)\\n\\n' +\n error.message\n }\n\n container.replaceChildren(label)\n }\n }\n\n loadVideo()\n\n return { widget: node.addDOMWidget(inputName, 'WEBCAM', container) }\n }\n }\n },\n nodeCreated(node) {\n if ((node.type, node.constructor.comfyClass !== 'WebcamCapture')) return\n\n let video\n const camera = node.widgets.find((w) => w.name === 'image')\n const w = node.widgets.find((w) => w.name === 'width')\n const h = node.widgets.find((w) => w.name === 'height')\n const captureOnQueue = node.widgets.find(\n (w) => w.name === 'capture_on_queue'\n )\n\n const canvas = document.createElement('canvas')\n\n const capture = () => {\n // @ts-expect-error widget value type narrow down\n canvas.width = w.value\n // @ts-expect-error widget value type narrow down\n canvas.height = h.value\n const ctx = canvas.getContext('2d')\n // @ts-expect-error widget value type narrow down\n ctx.drawImage(video, 0, 0, w.value, h.value)\n const data = canvas.toDataURL('image/png')\n\n const img = new Image()\n img.onload = () => {\n // @ts-expect-error adding extra property\n node.imgs = [img]\n app.graph.setDirtyCanvas(true)\n requestAnimationFrame(() => {\n // @ts-expect-error accessing extra property\n node.setSizeForImage?.()\n })\n }\n img.src = data\n }\n\n const btn = node.addWidget(\n 'button',\n 'waiting for camera...',\n 'capture',\n capture\n )\n btn.disabled = true\n // @ts-expect-error hacky override\n btn.serializeValue = () => undefined\n\n // @ts-expect-error hacky override\n camera.serializeValue = async () => {\n if (captureOnQueue.value) {\n capture()\n // @ts-expect-error accessing extra property\n } else if (!node.imgs?.length) {\n const err = `No webcam image captured`\n useToastStore().addAlert(err)\n throw new Error(err)\n }\n\n // Upload image to temp storage\n const blob = await new Promise((r) => canvas.toBlob(r))\n const name = `${+new Date()}.png`\n const file = new File([blob], name)\n const body = new FormData()\n body.append('image', file)\n body.append('subfolder', 'webcam')\n body.append('type', 'temp')\n const resp = await api.fetchApi('/upload/image', {\n method: 'POST',\n body\n })\n if (resp.status !== 200) {\n const err = `Error uploading camera image: ${resp.status} - ${resp.statusText}`\n useToastStore().addAlert(err)\n throw new Error(err)\n }\n return `webcam/${name} [temp]`\n }\n\n node[WEBCAM_READY].then((v) => {\n video = v\n // If width isnt specified then use video output resolution\n if (!w.value) {\n w.value = video.videoWidth || 640\n h.value = video.videoHeight || 480\n }\n btn.disabled = false\n btn.label = 'capture'\n })\n }\n})\n","// @ts-strict-ignore\nimport { app } from '../../scripts/app'\nimport { api } from '../../scripts/api'\nimport type { IWidget } from '@comfyorg/litegraph'\nimport type { DOMWidget } from '@/scripts/domWidget'\nimport { ComfyNodeDef } from '@/types/apiTypes'\nimport { useToastStore } from '@/stores/toastStore'\n\ntype FolderType = 'input' | 'output' | 'temp'\n\nfunction splitFilePath(path: string): [string, string] {\n const folder_separator = path.lastIndexOf('/')\n if (folder_separator === -1) {\n return ['', path]\n }\n return [\n path.substring(0, folder_separator),\n path.substring(folder_separator + 1)\n ]\n}\n\nfunction getResourceURL(\n subfolder: string,\n filename: string,\n type: FolderType = 'input'\n): string {\n const params = [\n 'filename=' + encodeURIComponent(filename),\n 'type=' + type,\n 'subfolder=' + subfolder,\n app.getRandParam().substring(1)\n ].join('&')\n\n return `/view?${params}`\n}\n\nasync function uploadFile(\n audioWidget: IWidget,\n audioUIWidget: DOMWidget,\n file: File,\n updateNode: boolean,\n pasted: boolean = false\n) {\n try {\n // Wrap file in formdata so it includes filename\n const body = new FormData()\n body.append('image', file)\n if (pasted) body.append('subfolder', 'pasted')\n const resp = await api.fetchApi('/upload/image', {\n method: 'POST',\n body\n })\n\n if (resp.status === 200) {\n const data = await resp.json()\n // Add the file to the dropdown list and update the widget value\n let path = data.name\n if (data.subfolder) path = data.subfolder + '/' + path\n\n if (!audioWidget.options.values.includes(path)) {\n audioWidget.options.values.push(path)\n }\n\n if (updateNode) {\n audioUIWidget.element.src = api.apiURL(\n getResourceURL(...splitFilePath(path))\n )\n audioWidget.value = path\n }\n } else {\n useToastStore().addAlert(resp.status + ' - ' + resp.statusText)\n }\n } catch (error) {\n useToastStore().addAlert(error)\n }\n}\n\n// AudioWidget MUST be registered first, as AUDIOUPLOAD depends on AUDIO_UI to be\n// present.\napp.registerExtension({\n name: 'Comfy.AudioWidget',\n async beforeRegisterNodeDef(nodeType, nodeData) {\n if (\n // @ts-expect-error ComfyNode\n ['LoadAudio', 'SaveAudio', 'PreviewAudio'].includes(nodeType.comfyClass)\n ) {\n nodeData.input.required.audioUI = ['AUDIO_UI']\n }\n },\n getCustomWidgets() {\n return {\n AUDIO_UI(node, inputName: string) {\n const audio = document.createElement('audio')\n audio.controls = true\n audio.classList.add('comfy-audio')\n audio.setAttribute('name', 'media')\n\n const audioUIWidget: DOMWidget =\n node.addDOMWidget(inputName, /* name=*/ 'audioUI', audio, {\n serialize: false\n })\n\n const isOutputNode = node.constructor.nodeData.output_node\n if (isOutputNode) {\n // Hide the audio widget when there is no audio initially.\n audioUIWidget.element.classList.add('empty-audio-widget')\n // Populate the audio widget UI on node execution.\n const onExecuted = node.onExecuted\n node.onExecuted = function (message: any) {\n onExecuted?.apply(this, arguments)\n const audios = message.audio\n if (!audios) return\n const audio = audios[0]\n audioUIWidget.element.src = api.apiURL(\n getResourceURL(audio.subfolder, audio.filename, audio.type)\n )\n audioUIWidget.element.classList.remove('empty-audio-widget')\n }\n }\n return { widget: audioUIWidget }\n }\n }\n },\n onNodeOutputsUpdated(nodeOutputs: Record) {\n for (const [nodeId, output] of Object.entries(nodeOutputs)) {\n const node = app.graph.getNodeById(nodeId)\n if ('audio' in output) {\n const audioUIWidget = node.widgets.find(\n (w) => w.name === 'audioUI'\n ) as unknown as DOMWidget\n const audio = output.audio[0]\n audioUIWidget.element.src = api.apiURL(\n getResourceURL(audio.subfolder, audio.filename, audio.type)\n )\n audioUIWidget.element.classList.remove('empty-audio-widget')\n }\n }\n }\n})\n\napp.registerExtension({\n name: 'Comfy.UploadAudio',\n async beforeRegisterNodeDef(nodeType, nodeData: ComfyNodeDef) {\n if (nodeData?.input?.required?.audio?.[1]?.audio_upload === true) {\n nodeData.input.required.upload = ['AUDIOUPLOAD']\n }\n },\n getCustomWidgets() {\n return {\n AUDIOUPLOAD(node, inputName: string) {\n // The widget that allows user to select file.\n const audioWidget: IWidget = node.widgets.find(\n (w: IWidget) => w.name === 'audio'\n )\n const audioUIWidget = node.widgets.find(\n (w: IWidget) => w.name === 'audioUI'\n ) as unknown as DOMWidget\n\n const onAudioWidgetUpdate = () => {\n audioUIWidget.element.src = api.apiURL(\n getResourceURL(...splitFilePath(audioWidget.value as string))\n )\n }\n // Initially load default audio file to audioUIWidget.\n if (audioWidget.value) {\n onAudioWidgetUpdate()\n }\n audioWidget.callback = onAudioWidgetUpdate\n\n // Load saved audio file widget values if restoring from workflow\n const onGraphConfigured = node.onGraphConfigured\n node.onGraphConfigured = function () {\n onGraphConfigured?.apply(this, arguments)\n if (audioWidget.value) {\n onAudioWidgetUpdate()\n }\n }\n\n const fileInput = document.createElement('input')\n fileInput.type = 'file'\n fileInput.accept = 'audio/*'\n fileInput.style.display = 'none'\n fileInput.onchange = () => {\n if (fileInput.files.length) {\n uploadFile(audioWidget, audioUIWidget, fileInput.files[0], true)\n }\n }\n // The widget to pop up the upload dialog.\n const uploadWidget = node.addWidget(\n 'button',\n inputName,\n /* value=*/ '',\n () => {\n fileInput.click()\n },\n { serialize: false }\n )\n uploadWidget.label = 'choose file to upload'\n\n return { widget: uploadWidget }\n }\n }\n }\n})\n","import { t } from '@/i18n'\nimport { app } from '@/scripts/app'\nimport { showConfirmationDialog } from '@/services/dialogService'\nimport { electronAPI as getElectronAPI, isElectron } from '@/utils/envUtil'\n;(async () => {\n if (!isElectron()) return\n\n const electronAPI = getElectronAPI()\n const desktopAppVersion = await electronAPI.getElectronVersion()\n\n const onChangeRestartApp = (newValue: string, oldValue: string) => {\n // Add a delay to allow changes to take effect before restarting.\n if (oldValue !== undefined && newValue !== oldValue) {\n electronAPI.restartApp('Restart ComfyUI to apply changes.', 1500)\n }\n }\n\n app.registerExtension({\n name: 'Comfy.ElectronAdapter',\n settings: [\n {\n id: 'Comfy-Desktop.AutoUpdate',\n category: ['Comfy-Desktop', 'General', 'AutoUpdate'],\n name: 'Automatically check for updates',\n type: 'boolean',\n defaultValue: true,\n onChange: onChangeRestartApp\n },\n {\n id: 'Comfy-Desktop.SendStatistics',\n category: ['Comfy-Desktop', 'General', 'Send Statistics'],\n name: 'Send anonymous crash reports',\n type: 'boolean',\n defaultValue: true,\n onChange: onChangeRestartApp\n }\n ],\n\n commands: [\n {\n id: 'Comfy-Desktop.Folders.OpenLogsFolder',\n label: 'Open Logs Folder',\n icon: 'pi pi-folder-open',\n function() {\n electronAPI.openLogsFolder()\n }\n },\n {\n id: 'Comfy-Desktop.Folders.OpenModelsFolder',\n label: 'Open Models Folder',\n icon: 'pi pi-folder-open',\n function() {\n electronAPI.openModelsFolder()\n }\n },\n {\n id: 'Comfy-Desktop.Folders.OpenOutputsFolder',\n label: 'Open Outputs Folder',\n icon: 'pi pi-folder-open',\n function() {\n electronAPI.openOutputsFolder()\n }\n },\n {\n id: 'Comfy-Desktop.Folders.OpenInputsFolder',\n label: 'Open Inputs Folder',\n icon: 'pi pi-folder-open',\n function() {\n electronAPI.openInputsFolder()\n }\n },\n {\n id: 'Comfy-Desktop.Folders.OpenCustomNodesFolder',\n label: 'Open Custom Nodes Folder',\n icon: 'pi pi-folder-open',\n function() {\n electronAPI.openCustomNodesFolder()\n }\n },\n {\n id: 'Comfy-Desktop.Folders.OpenModelConfig',\n label: 'Open extra_model_paths.yaml',\n icon: 'pi pi-file',\n function() {\n electronAPI.openModelConfig()\n }\n },\n {\n id: 'Comfy-Desktop.OpenDevTools',\n label: 'Open DevTools',\n icon: 'pi pi-code',\n function() {\n electronAPI.openDevTools()\n }\n },\n {\n id: 'Comfy-Desktop.OpenFeedbackPage',\n label: 'Feedback',\n icon: 'pi pi-envelope',\n function() {\n window.open('https://forum.comfy.org/c/v1-feedback/', '_blank')\n }\n },\n {\n id: 'Comfy-Desktop.OpenUserGuide',\n label: 'Desktop User Guide',\n icon: 'pi pi-book',\n function() {\n window.open('https://comfyorg.notion.site/', '_blank')\n }\n },\n {\n id: 'Comfy-Desktop.Reinstall',\n label: 'Reinstall',\n icon: 'pi pi-refresh',\n async function() {\n const proceed = await showConfirmationDialog({\n message: t('desktopMenu.confirmReinstall'),\n title: t('desktopMenu.reinstall'),\n type: 'reinstall'\n })\n\n if (proceed) electronAPI.reinstall()\n }\n },\n {\n id: 'Comfy-Desktop.Restart',\n label: 'Restart',\n icon: 'pi pi-refresh',\n function() {\n electronAPI.restartApp()\n }\n }\n ],\n\n menuCommands: [\n {\n path: ['Help'],\n commands: [\n 'Comfy-Desktop.OpenUserGuide',\n 'Comfy-Desktop.OpenFeedbackPage'\n ]\n },\n {\n path: ['Help'],\n commands: ['Comfy-Desktop.OpenDevTools']\n },\n {\n path: ['Help', 'Open Folder'],\n commands: [\n 'Comfy-Desktop.Folders.OpenLogsFolder',\n 'Comfy-Desktop.Folders.OpenModelsFolder',\n 'Comfy-Desktop.Folders.OpenOutputsFolder',\n 'Comfy-Desktop.Folders.OpenInputsFolder',\n 'Comfy-Desktop.Folders.OpenCustomNodesFolder',\n 'Comfy-Desktop.Folders.OpenModelConfig'\n ]\n },\n {\n path: ['Help'],\n commands: ['Comfy-Desktop.Reinstall']\n }\n ],\n\n aboutPageBadges: [\n {\n label: 'ComfyUI_desktop v' + desktopAppVersion,\n url: 'https://github.com/Comfy-Org/electron',\n icon: 'pi pi-github'\n }\n ]\n })\n})()\n","/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '170';\n\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst ConstantColorFactor = 211;\nconst OneMinusConstantColorFactor = 212;\nconst ConstantAlphaFactor = 213;\nconst OneMinusConstantAlphaFactor = 214;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\nconst AgXToneMapping = 6;\nconst NeutralToneMapping = 7;\nconst AttachedBindMode = 'attached';\nconst DetachedBindMode = 'detached';\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst UnsignedInt5999Type = 35902;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RGB_BPTC_SIGNED_Format = 36494;\nconst RGB_BPTC_UNSIGNED_Format = 36495;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst RGBDepthPacking = 3202;\nconst RGDepthPacking = 3203;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\n\nconst LinearTransfer = 'linear';\nconst SRGBTransfer = 'srgb';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst NeverCompare = 512;\nconst LessCompare = 513;\nconst EqualCompare = 514;\nconst LessEqualCompare = 515;\nconst GreaterCompare = 516;\nconst NotEqualCompare = 517;\nconst GreaterEqualCompare = 518;\nconst AlwaysCompare = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\nfunction toNormalizedProjectionMatrix( projectionMatrix ) {\n\n\tconst m = projectionMatrix.elements;\n\n\t// Convert [-1, 1] to [0, 1] projection matrix\n\tm[ 2 ] = 0.5 * m[ 2 ] + 0.5 * m[ 3 ];\n\tm[ 6 ] = 0.5 * m[ 6 ] + 0.5 * m[ 7 ];\n\tm[ 10 ] = 0.5 * m[ 10 ] + 0.5 * m[ 11 ];\n\tm[ 14 ] = 0.5 * m[ 14 ] + 0.5 * m[ 15 ];\n\n}\n\nfunction toReversedProjectionMatrix( projectionMatrix ) {\n\n\tconst m = projectionMatrix.elements;\n\tconst isPerspectiveMatrix = m[ 11 ] === - 1;\n\n\t// Reverse [0, 1] projection matrix\n\tif ( isPerspectiveMatrix ) {\n\n\t\tm[ 10 ] = - m[ 10 ] - 1;\n\t\tm[ 14 ] = - m[ 14 ];\n\n\t} else {\n\n\t\tm[ 10 ] = - m[ 10 ];\n\t\tm[ 14 ] = - m[ 14 ] + 1;\n\n\t}\n\n}\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\tworkingColorSpace: LinearSRGBColorSpace,\n\n\t/**\n\t * Implementations of supported color spaces.\n\t *\n\t * Required:\n\t *\t- primaries: chromaticity coordinates [ rx ry gx gy bx by ]\n\t *\t- whitePoint: reference white [ x y ]\n\t *\t- transfer: transfer function (pre-defined)\n\t *\t- toXYZ: Matrix3 RGB to XYZ transform\n\t *\t- fromXYZ: Matrix3 XYZ to RGB transform\n\t *\t- luminanceCoefficients: RGB luminance coefficients\n\t *\n\t * Optional:\n\t * - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace }\n\t * - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }\n\t *\n\t * Reference:\n\t * - https://www.russellcottrell.com/photo/matrixCalculator.htm\n\t */\n\tspaces: {},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tif ( this.spaces[ sourceColorSpace ].transfer === SRGBTransfer ) {\n\n\t\t\tcolor.r = SRGBToLinear( color.r );\n\t\t\tcolor.g = SRGBToLinear( color.g );\n\t\t\tcolor.b = SRGBToLinear( color.b );\n\n\t\t}\n\n\t\tif ( this.spaces[ sourceColorSpace ].primaries !== this.spaces[ targetColorSpace ].primaries ) {\n\n\t\t\tcolor.applyMatrix3( this.spaces[ sourceColorSpace ].toXYZ );\n\t\t\tcolor.applyMatrix3( this.spaces[ targetColorSpace ].fromXYZ );\n\n\t\t}\n\n\t\tif ( this.spaces[ targetColorSpace ].transfer === SRGBTransfer ) {\n\n\t\t\tcolor.r = LinearToSRGB( color.r );\n\t\t\tcolor.g = LinearToSRGB( color.g );\n\t\t\tcolor.b = LinearToSRGB( color.b );\n\n\t\t}\n\n\t\treturn color;\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n\tgetPrimaries: function ( colorSpace ) {\n\n\t\treturn this.spaces[ colorSpace ].primaries;\n\n\t},\n\n\tgetTransfer: function ( colorSpace ) {\n\n\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\treturn this.spaces[ colorSpace ].transfer;\n\n\t},\n\n\tgetLuminanceCoefficients: function ( target, colorSpace = this.workingColorSpace ) {\n\n\t\treturn target.fromArray( this.spaces[ colorSpace ].luminanceCoefficients );\n\n\t},\n\n\tdefine: function ( colorSpaces ) {\n\n\t\tObject.assign( this.spaces, colorSpaces );\n\n\t},\n\n\t// Internal APIs\n\n\t_getMatrix: function ( targetMatrix, sourceColorSpace, targetColorSpace ) {\n\n\t\treturn targetMatrix\n\t\t\t.copy( this.spaces[ sourceColorSpace ].toXYZ )\n\t\t\t.multiply( this.spaces[ targetColorSpace ].fromXYZ );\n\n\t},\n\n\t_getDrawingBufferColorSpace: function ( colorSpace ) {\n\n\t\treturn this.spaces[ colorSpace ].outputColorSpaceConfig.drawingBufferColorSpace;\n\n\t},\n\n\t_getUnpackColorSpace: function ( colorSpace = this.workingColorSpace ) {\n\n\t\treturn this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;\n\n\t}\n\n};\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n/******************************************************************************\n * sRGB definitions\n */\n\nconst REC709_PRIMARIES = [ 0.640, 0.330, 0.300, 0.600, 0.150, 0.060 ];\nconst REC709_LUMINANCE_COEFFICIENTS = [ 0.2126, 0.7152, 0.0722 ];\nconst D65 = [ 0.3127, 0.3290 ];\n\nconst LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(\n\t0.4123908, 0.3575843, 0.1804808,\n\t0.2126390, 0.7151687, 0.0721923,\n\t0.0193308, 0.1191948, 0.9505322\n);\n\nconst XYZ_TO_LINEAR_REC709 = /*@__PURE__*/ new Matrix3().set(\n\t3.2409699, - 1.5373832, - 0.4986108,\n\t- 0.9692436, 1.8759675, 0.0415551,\n\t0.0556301, - 0.2039770, 1.0569715\n);\n\nColorManagement.define( {\n\n\t[ LinearSRGBColorSpace ]: {\n\t\tprimaries: REC709_PRIMARIES,\n\t\twhitePoint: D65,\n\t\ttransfer: LinearTransfer,\n\t\ttoXYZ: LINEAR_REC709_TO_XYZ,\n\t\tfromXYZ: XYZ_TO_LINEAR_REC709,\n\t\tluminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n\t\tworkingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace },\n\t\toutputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n\t},\n\n\t[ SRGBColorSpace ]: {\n\t\tprimaries: REC709_PRIMARIES,\n\t\twhitePoint: D65,\n\t\ttransfer: SRGBTransfer,\n\t\ttoXYZ: LINEAR_REC709_TO_XYZ,\n\t\tfromXYZ: XYZ_TO_LINEAR_REC709,\n\t\tluminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n\t\toutputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n\t},\n\n} );\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\t\tthis.dataReady = true;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tthis.colorSpace = colorSpace;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\t\tthis.w /= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass RenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1\n\t\t}, options );\n\n\t\tconst texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\ttexture.flipY = false;\n\t\ttexture.generateMipmaps = options.generateMipmaps;\n\t\ttexture.internalFormat = options.internalFormat;\n\n\t\tthis.textures = [];\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\tthis.depthBuffer = options.depthBuffer;\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\tthis.samples = options.samples;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass WebGLRenderTarget extends RenderTarget {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// sets this quaternion to a uniform random unit quaternnion\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$3.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$3 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$3, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$3 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.isSphere = true;\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$4.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$4.elements[ 0 ] *= invSX;\n\t\t_m1$4.elements[ 1 ] *= invSX;\n\t\t_m1$4.elements[ 2 ] *= invSX;\n\n\t\t_m1$4.elements[ 4 ] *= invSY;\n\t\t_m1$4.elements[ 5 ] *= invSY;\n\t\t_m1$4.elements[ 6 ] *= invSY;\n\n\t\t_m1$4.elements[ 8 ] *= invSZ;\n\t\t_m1$4.elements[ 9 ] *= invSZ;\n\t\t_m1$4.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$4 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$4 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$3 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nconst _childaddedEvent = { type: 'childadded', child: null };\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$3.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$3.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$3 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$3.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$3 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$3.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$3.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$3 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.visibility = this._visibility;\n\t\t\tobject.active = this._active;\n\t\t\tobject.bounds = this._bounds.map( bound => ( {\n\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\tboxMin: bound.box.min.toArray(),\n\t\t\t\tboxMax: bound.box.max.toArray(),\n\n\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\tsphereRadius: bound.sphere.radius,\n\t\t\t\tsphereCenter: bound.sphere.center.toArray()\n\t\t\t} ) );\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) object.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = {\n\t\t\t\t\tcenter: object.boundingSphere.center.toArray(),\n\t\t\t\t\tradius: object.boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = {\n\t\t\t\t\tmin: object.boundingBox.min.toArray(),\n\t\t\t\t\tmax: object.boundingBox.max.toArray()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nconst _v40 = /*@__PURE__*/ new Vector4();\nconst _v41 = /*@__PURE__*/ new Vector4();\nconst _v42 = /*@__PURE__*/ new Vector4();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$3 );\n\t\tconst dot02 = _v0$2.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic getInterpolatedAttribute( attr, i1, i2, i3, barycoord, target ) {\n\n\t\t_v40.setScalar( 0 );\n\t\t_v41.setScalar( 0 );\n\t\t_v42.setScalar( 0 );\n\n\t\t_v40.fromBufferAttribute( attr, i1 );\n\t\t_v41.fromBufferAttribute( attr, i2 );\n\t\t_v42.fromBufferAttribute( attr, i3 );\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( _v40, barycoord.x );\n\t\ttarget.addScaledVector( _v41, barycoord.y );\n\t\ttarget.addScaledVector( _v42, barycoord.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$2.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nlet _materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tstatic get type() {\n\n\t\treturn 'Material';\n\n\t}\n\n\tget type() {\n\n\t\treturn this.constructor.type;\n\n\t}\n\n\tset type( _value ) { /* */ }\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\t\tthis.blendAlpha = 0;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\t// onBeforeRender and onBeforeCompile only supported in WebGLRenderer\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {\n\n\t\tconsole.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166\n\n\t}\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshBasicMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRanges = [];\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.indirect = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetIndirect( indirect ) {\n\n\t\tthis.indirect = indirect;\n\n\t\treturn this;\n\n\t}\n\n\tgetIndirect() {\n\n\t\treturn this.indirect;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1$2.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute === undefined ) {\n\n\t\t\tconst position = [];\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tpositionAttribute.setXYZ( i, point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tif ( points.length > positionAttribute.count ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.' );\n\n\t\t\t}\n\n\t\t\tpositionAttribute.needsUpdate = true;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tconst barycoord = new Vector3();\n\t\tTriangle.getBarycoord( _intersectionPoint, _vA$1, _vB$1, _vC$1, barycoord );\n\n\t\tif ( uv ) {\n\n\t\t\tintersection.uv = Triangle.getInterpolatedAttribute( uv, a, b, c, barycoord, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\tintersection.uv1 = Triangle.getInterpolatedAttribute( uv1, a, b, c, barycoord, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\tintersection.normal = Triangle.getInterpolatedAttribute( normal, a, b, c, barycoord, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\t\tintersection.barycoord = barycoord;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\tconsole.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'ShaderMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.forceSinglePass = true;\n\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Copies the result into the target Vector2, where x is width and y is height.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\t\tthis.coordinateSystem = null;\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\t\tcameraPX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$5.center.set( 0, 0, 0 );\n\t\t_sphere$5.radius = 0.7071067811865476;\n\t\t_sphere$5.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\t// Before applying update ranges, we merge any adjacent / overlapping\n\t\t\t// ranges to reduce load on `gl.bufferSubData`. Empirically, this has led\n\t\t\t// to performance improvements for applications which make heavy use of\n\t\t\t// update ranges. Likely due to GPU command overhead.\n\t\t\t//\n\t\t\t// Note that to reduce garbage collection between frames, we merge the\n\t\t\t// update ranges in-place. This is safe because this method will clear the\n\t\t\t// update ranges once updated.\n\n\t\t\tupdateRanges.sort( ( a, b ) => a.start - b.start );\n\n\t\t\t// To merge the update ranges in-place, we work from left to right in the\n\t\t\t// existing updateRanges array, merging ranges. This may result in a final\n\t\t\t// array which is smaller than the original. This index tracks the last\n\t\t\t// index representing a merged range, any data after this index can be\n\t\t\t// trimmed once the merge algorithm is completed.\n\t\t\tlet mergeIndex = 0;\n\n\t\t\tfor ( let i = 1; i < updateRanges.length; i ++ ) {\n\n\t\t\t\tconst previousRange = updateRanges[ mergeIndex ];\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\t// We add one here to merge adjacent ranges. This is safe because ranges\n\t\t\t\t// operate over positive integers.\n\t\t\t\tif ( range.start <= previousRange.start + previousRange.count + 1 ) {\n\n\t\t\t\t\tpreviousRange.count = Math.max(\n\t\t\t\t\t\tpreviousRange.count,\n\t\t\t\t\t\trange.start + range.count - previousRange.start\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t++ mergeIndex;\n\t\t\t\t\tupdateRanges[ mergeIndex ] = range;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Trim the array to only contain the merged ranges.\n\t\t\tupdateRanges.length = mergeIndex + 1;\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec3 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n\\tvColor.xyz *= batchingColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\\n\\t\\temissiveColor = sRGBTransferEOTF( emissiveColor );\\n\\t#endif\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"vec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferEOTF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\t\\n\\t\\tfloat lightToPositionLength = length( lightToPosition );\\n\\t\\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 CineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t\\n\\t\\t#else\\n\\t\\t\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix[ 3 ];\\n\\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _e1$1 = /*@__PURE__*/ new Euler();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\t_e1$1.copy( scene.backgroundRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1$1.x *= - 1; _e1$1.y *= - 1; _e1$1.z *= - 1;\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1$1.y *= - 1;\n\t\t\t\t_e1$1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) );\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ], counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ] * primcount[ i ];\n\n\t\t\t}\n\n\t\t\tinfo.update( elementCount, mode, 1 );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\tconst reverseDepthBuffer = parameters.reverseDepthBuffer === true && extensions.has( 'EXT_clip_control' );\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\treverseDepthBuffer: reverseDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported equirectangular image size is 64 x 32.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported cube size is 16 x 16.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\t\tconst n = this._lodPlanes.length;\n\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tconst array = geometry.morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.remove( array[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else if ( geometryPosition !== undefined ) {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ] * primcount[ i ];\n\n\t\t\t}\n\n\t\t\tinfo.update( elementCount, mode, 1 );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = LessEqualCompare; // #28670\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nconst _m0 = /*@__PURE__*/ new Matrix3();\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tColorManagement._getMatrix( _m0, ColorManagement.workingColorSpace, colorSpace );\n\n\tconst encodingMatrix = `mat3( ${ _m0.elements.map( ( v ) => v.toFixed( 4 ) ) } )`;\n\n\tswitch ( ColorManagement.getTransfer( colorSpace ) ) {\n\n\t\tcase LinearTransfer:\n\t\t\treturn [ encodingMatrix, 'LinearTransferOETF' ];\n\n\t\tcase SRGBTransfer:\n\t\t\treturn [ encodingMatrix, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported color space: ', colorSpace );\n\t\t\treturn [ encodingMatrix, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\n\treturn [\n\n\t\t`vec4 ${functionName}( vec4 value ) {`,\n\n\t\t`\treturn ${components[ 1 ]}( vec4( value.rgb * ${components[ 0 ]}, value.a ) );`,\n\n\t\t'}',\n\n\t].join( '\\n' );\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'Cineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase AgXToneMapping:\n\t\t\ttoneMappingName = 'AgX';\n\t\t\tbreak;\n\n\t\tcase NeutralToneMapping:\n\t\t\ttoneMappingName = 'Neutral';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0$1 );\n\n\tconst r = _v0$1.x.toFixed( 4 );\n\tconst g = _v0$1.y.toFixed( 4 );\n\tconst b = _v0$1.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\t\t\tparameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id$1 = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id$1 ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst reverseDepthBuffer = renderer.state.buffers.depth.getReversed();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\tsupportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading === true,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\t\treverseDepthBuffer: reverseDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\t\t\tdecodeVideoTextureEmissive: HAS_EMISSIVEMAP && ( material.emissiveMap.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.emissiveMap.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.reverseDepthBuffer )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.decodeVideoTextureEmissive )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction has( object ) {\n\n\t\treturn properties.has( object );\n\n\t}\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\thas: has,\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1,\n\n\t\t\tnumLightProbes: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {}\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshDepthMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshDistanceMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );\n\t\tconst fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null || toVSM === true || fromVSM === true ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\trenderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nconst reversedFuncs = {\n\t[ NeverDepth ]: AlwaysDepth,\n\t[ LessDepth ]: GreaterDepth,\n\t[ EqualDepth ]: NotEqualDepth,\n\t[ LessEqualDepth ]: GreaterEqualDepth,\n\n\t[ AlwaysDepth ]: NeverDepth,\n\t[ GreaterDepth ]: LessDepth,\n\t[ NotEqualDepth ]: EqualDepth,\n\t[ GreaterEqualDepth ]: LessEqualDepth,\n};\n\nfunction WebGLState( gl, extensions ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\t\tlet reversed = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetReversed: function ( value ) {\n\n\t\t\t\tif ( reversed !== value ) {\n\n\t\t\t\t\tconst ext = extensions.get( 'EXT_clip_control' );\n\n\t\t\t\t\tif ( reversed ) {\n\n\t\t\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.NEGATIVE_ONE_TO_ONE_EXT );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst oldDepth = currentDepthClear;\n\t\t\t\t\tcurrentDepthClear = null;\n\t\t\t\t\tthis.setClear( oldDepth );\n\n\t\t\t\t}\n\n\t\t\t\treversed = value;\n\n\t\t\t},\n\n\t\t\tgetReversed: function () {\n\n\t\t\t\treturn reversed;\n\n\t\t\t},\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( reversed ) depthFunc = reversedFuncs[ depthFunc ];\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tif ( reversed ) {\n\n\t\t\t\t\t\tdepth = 1 - depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\t\t\t\treversed = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\n\t\tdepthBuffer.setReversed( false );\n\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n\n\n/**\n * Given the width, height, format, and type of a texture. Determines how many\n * bytes must be used to represent the texture.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceAlphaFormat:\n\t\t\treturn width * height * 2;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\nconst TextureUtils = {\n\tcontain,\n\tcover,\n\tfill,\n\tgetByteLength\n};\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getTargetType( texture ) {\n\n\t\tif ( texture.isWebGLCubeRenderTarget ) return _gl.TEXTURE_CUBE_MAP;\n\t\tif ( texture.isWebGL3DRenderTarget ) return _gl.TEXTURE_3D;\n\t\tif ( texture.isWebGLArrayRenderTarget || texture.isCompressedArrayTexture ) return _gl.TEXTURE_2D_ARRAY;\n\t\treturn _gl.TEXTURE_2D;\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGB8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGB16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGB32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RGB8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RGB16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RGB32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGBA8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGBA16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGBA32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RGBA8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RGBA16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RGBA32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\tconsole.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t\tproperties.remove( renderTarget.depthTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__renderTarget = renderTarget;\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\tconst isUseMultisampledRTT = useMultisampledRTT( renderTarget );\n\t\t\tif ( isUseMultisampledRTT ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\tconst textureProperties = properties.get( renderTarget.depthTexture );\n\t\ttextureProperties.__renderTarget = renderTarget;\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! textureProperties.__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = textureProperties.__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\t// if the bound depth texture has changed\n\t\tif ( renderTargetProperties.__boundDepthTexture !== renderTarget.depthTexture ) {\n\n\t\t\t// fire the dispose event to get rid of stored state associated with the previously bound depth buffer\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tif ( renderTargetProperties.__depthDisposeCallback ) {\n\n\t\t\t\trenderTargetProperties.__depthDisposeCallback();\n\n\t\t\t}\n\n\t\t\t// set up dispose listeners to track when the currently attached buffer is implicitly unbound\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tconst disposeEvent = () => {\n\n\t\t\t\t\tdelete renderTargetProperties.__boundDepthTexture;\n\t\t\t\t\tdelete renderTargetProperties.__depthDisposeCallback;\n\t\t\t\t\tdepthTexture.removeEventListener( 'dispose', disposeEvent );\n\n\t\t\t\t};\n\n\t\t\t\tdepthTexture.addEventListener( 'dispose', disposeEvent );\n\t\t\t\trenderTargetProperties.__depthDisposeCallback = disposeEvent;\n\n\t\t\t}\n\n\t\t\trenderTargetProperties.__boundDepthTexture = depthTexture;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// attach buffer if it's been created already\n\t\t\t\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\t\t\tconst renderbuffer = renderTargetProperties.__webglDepthbuffer[ i ];\n\t\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer === undefined ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// attach buffer if it's been created already\n\t\t\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\t\tconst renderbuffer = renderTargetProperties.__webglDepthbuffer;\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst targetType = getTargetType( renderTarget );\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( targetType, webglTexture );\n\t\t\t\tgenerateMipmap( targetType );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\nclass WebXRDepthSensing {\n\n\tconstructor() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t\tthis.depthNear = 0;\n\t\tthis.depthFar = 0;\n\n\t}\n\n\tinit( renderer, depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst texProps = renderer.properties.get( texture );\n\t\t\ttexProps.__webglTexture = depthData.texture;\n\n\t\t\tif ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Check if the projection uses an infinite far plane.\n\t\t\tif ( projL[ 10 ] === - 1.0 ) {\n\n\t\t\t\t// Use the projection matrix from the left eye.\n\t\t\t\t// The camera offset is sufficient to include the view volumes\n\t\t\t\t// of both eyes (assuming symmetric projections).\n\t\t\t\tcamera.projectionMatrix.copy( cameraL.projectionMatrix );\n\t\t\t\tcamera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );\n\n\t\t\t} else {\n\n\t\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t\t// although must now be relative to the new union camera.\n\t\t\t\tconst near2 = near + zOffset;\n\t\t\t\tconst far2 = far + zOffset;\n\t\t\t\tconst left2 = left - xOffset;\n\t\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tlet depthNear = camera.near;\n\t\t\tlet depthFar = camera.far;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tif ( depthSensing.depthNear > 0 ) depthNear = depthSensing.depthNear;\n\t\t\t\tif ( depthSensing.depthFar > 0 ) depthFar = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = depthNear;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = depthFar;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t}\n\n\t\t\tcameraL.layers.mask = camera.layers.mask | 0b010;\n\t\t\tcameraR.layers.mask = camera.layers.mask | 0b100;\n\t\t\tcameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask;\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\n\t\t\t\tif ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( renderer, depthData, session.renderState );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _e1 = /*@__PURE__*/ new Euler();\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t_e1.copy( envMapRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1.y *= - 1;\n\t\t\t\t_e1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass WebGLRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t\treverseDepthBuffer = false,\n\t\t} = parameters;\n\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _currentProjectionMatrix = new Matrix4();\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl, extensions );\n\n\t\t\tif ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {\n\n\t\t\t\tstate.buffers.depth.setReversed( true );\n\n\t\t\t}\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.shadowMap = shadowMap;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = targetFormat === RGBAIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RGIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RedIntegerFormat;\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = targetType === UnsignedByteType ||\n\t\t\t\t\t\ttargetType === UnsignedIntType ||\n\t\t\t\t\t\ttargetType === UnsignedShortType ||\n\t\t\t\t\t\ttargetType === UnsignedInt248Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort4444Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort5551Type;\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) {\n\n\t\t\t\tbits |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t}\n\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tcubeuvmaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( object._multiDrawInstances !== null ) {\n\n\t\t\t\t\trenderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( ! ( object.isMesh || object.isPoints || object.isLine || object.isSprite ) ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\trenderStateStack.pop();\n\t\t\tcurrentRenderState = null;\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: 4,\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst object = renderItem.object;\n\t\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\t\tconst material = renderItem.material;\n\t\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );\n\t\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tconst reverseDepthBuffer = state.buffers.depth.getReversed();\n\n\t\t\t\tif ( reverseDepthBuffer ) {\n\n\t\t\t\t\t_currentProjectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t\t\ttoNormalizedProjectionMatrix( _currentProjectionMatrix );\n\t\t\t\t\ttoReversedProjectionMatrix( _currentProjectionMatrix );\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet useDefaultFramebuffer = true;\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\t\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t} else if ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t// check if the depth texture is already bound to the frame buffer and that it's been initialized\n\t\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\t\t\tif ( renderTargetProperties.__boundDepthTexture !== depthTexture ) {\n\n\t\t\t\t\t\t// check if the depth texture is compatible\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdepthTexture !== null &&\n\t\t\t\t\t\t\tproperties.has( depthTexture ) &&\n\t\t\t\t\t\t\t( renderTarget.width !== depthTexture.image.width || renderTarget.height !== depthTexture.image.height )\n\t\t\t\t\t\t) {\n\n\t\t\t\t\t\t\tthrow new Error( 'WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Swap the depth buffer to the currently attached one\n\t\t\t\t\t\ttextures.setupDepthRenderbuffer( renderTarget );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound && useDefaultFramebuffer ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t}\n\n\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t// set the active frame buffer to the one we want to read\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\n\t\t\t\t\t// reset the frame buffer to the currently set buffer before waiting\n\t\t\t\t\tconst currFramebuffer = _currentRenderTarget !== null ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, currFramebuffer );\n\n\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\n\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t// read the data and delete the buffer\n\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\treturn buffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\t// support previous signature with position first\n\t\t\tif ( texture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );\n\n\t\t\t\tposition = arguments[ 0 ] || null;\n\t\t\t\ttexture = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with dstPosition first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );\n\n\t\t\t\tdstPosition = arguments[ 0 ] || null;\n\t\t\t\tsrcTexture = arguments[ 1 ];\n\t\t\t\tdstTexture = arguments[ 2 ];\n\t\t\t\tlevel = arguments[ 3 ] || 0;\n\t\t\t\tsrcRegion = null;\n\n\t\t\t}\n\n\t\t\t// gather the necessary dimensions to copy\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.isBox3 ? srcRegion.min.z : 0;\n\n\t\t\t} else {\n\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tdepth = image.depth || 1;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\t// Set up the destination target\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D;\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\t// used for copying data from cpu\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\t// set up the src texture\n\t\t\tconst isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;\n\t\t\tconst isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;\n\t\t\tif ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {\n\n\t\t\t\tconst srcTextureProperties = properties.get( srcTexture );\n\t\t\t\tconst dstTextureProperties = properties.get( dstTexture );\n\t\t\t\tconst srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );\n\t\t\t\tconst dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < depth; i ++ ) {\n\n\t\t\t\t\t// if the source or destination are a 3d target then a layer needs to be bound\n\t\t\t\t\tif ( isSrc3D ) {\n\n\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, level, minZ + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( srcTexture.isDepthTexture ) {\n\n\t\t\t\t\t\tif ( isDst3D ) {\n\n\t\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, level, dstZ + i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );\n\n\t\t\t\t\t} else if ( isDst3D ) {\n\n\t\t\t\t\t\t_gl.copyTexSubImage3D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.copyTexSubImage2D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isDst3D ) {\n\n\t\t\t\t\t// copy data into the 3d texture\n\t\t\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t\t\t} else if ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// copy data into the 2d texture\n\t\t\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t\t\t} else if ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// reset values\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) {\n\n\t\t\t\t_gl.generateMipmap( glTarget );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with source box first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );\n\n\t\t\t\tsrcRegion = arguments[ 0 ] || null;\n\t\t\t\tdstPosition = arguments[ 1 ] || null;\n\t\t\t\tsrcTexture = arguments[ 2 ];\n\t\t\t\tdstTexture = arguments[ 3 ];\n\t\t\t\tlevel = arguments[ 4 ] || 0;\n\n\t\t\t}\n\n\t\t\t// @deprecated, r170\n\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use \"copyTextureToTexture\" instead.' );\n\n\t\t\treturn this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );\n\n\t\t};\n\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorspace = ColorManagement._getDrawingBufferColorSpace( colorSpace );\n\t\tgl.unpackColorSpace = ColorManagement._getUnpackColorSpace();\n\n\t}\n\n}\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\t\tthis.backgroundRotation = new Euler();\n\n\t\tthis.environmentIntensity = 1;\n\t\tthis.environmentRotation = new Euler();\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRanges = [];\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'SpriteMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material;\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tremoveLevel( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0; i < levels.length; i ++ ) {\n\n\t\t\tif ( levels[ i ].distance === distance ) {\n\n\t\t\t\tconst removedElements = levels.splice( i, 1 );\n\t\t\t\tthis.remove( removedElements[ 0 ].object );\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = AttachedBindMode;\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\t\tthis.morphTexture = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$3 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction ascIdSort( a, b ) {\n\n\treturn a - b;\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( start, count, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: - 1,\n\t\t\t\tcount: - 1,\n\t\t\t\tz: - 1,\n\t\t\t\tindex: - 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = start;\n\t\titem.count = count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\n// safely copies array contents to a potentially smaller array\nfunction copyArrayContents( src, target ) {\n\n\tif ( src.constructor !== target.constructor ) {\n\n\t\t// if arrays are of a different type (eg due to index size increasing) then data must be per-element copied\n\t\tconst len = Math.min( src.length, target.length );\n\t\tfor ( let i = 0; i < len; i ++ ) {\n\n\t\t\ttarget[ i ] = src[ i ];\n\n\t\t}\n\n\t} else {\n\n\t\t// if the arrays use the same data layout we can use a fast block copy\n\t\tconst len = Math.min( src.length, target.length );\n\t\ttarget.set( new src.constructor( src.buffer, 0, len ) );\n\n\t}\n\n}\n\nclass BatchedMesh extends Mesh {\n\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\tget instanceCount() {\n\n\t\treturn this._instanceInfo.length - this._availableInstanceIds.length;\n\n\t}\n\n\tget unusedVertexCount() {\n\n\t\treturn this._maxVertexCount - this._nextVertexStart;\n\n\t}\n\n\tget unusedIndexCount() {\n\n\t\treturn this._maxIndexCount - this._nextIndexStart;\n\n\t}\n\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\tthis.isBatchedMesh = true;\n\t\tthis.perObjectFrustumCulled = true;\n\t\tthis.sortObjects = true;\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per instance and reserved buffer ranges for geometries\n\t\tthis._instanceInfo = [];\n\t\tthis._geometryInfo = [];\n\n\t\t// instance, geometry ids that have been set as inactive, and are available to be overwritten\n\t\tthis._availableInstanceIds = [];\n\t\tthis._availableGeometryIds = [];\n\n\t\t// used to track where the next point is that geometry should be inserted\n\t\tthis._nextIndexStart = 0;\n\t\tthis._nextVertexStart = 0;\n\t\tthis._geometryCount = 0;\n\n\t\t// flags\n\t\tthis._visibilityChanged = true;\n\t\tthis._geometryInitialized = false;\n\n\t\t// cached user options\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\t// buffers for multi draw\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\t\tthis._multiDrawInstances = null;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst instanceInfo = this._instanceInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\t\tconst instanceInfo = this._instanceInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\taddInstance( geometryId ) {\n\n\t\tconst atCapacity = this._instanceInfo.length >= this.maxInstanceCount;\n\n\t\t// ensure we're not over geometry\n\t\tif ( atCapacity && this._availableInstanceIds.length === 0 ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tconst instanceInfo = {\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\t\t};\n\n\t\tlet drawId = null;\n\n\t\t// Prioritize using previously freed instance ids\n\t\tif ( this._availableInstanceIds.length > 0 ) {\n\n\t\t\tthis._availableInstanceIds.sort( ascIdSort );\n\n\t\t\tdrawId = this._availableInstanceIds.shift();\n\t\t\tthis._instanceInfo[ drawId ] = instanceInfo;\n\n\t\t} else {\n\n\t\t\tdrawId = this._instanceInfo.length;\n\t\t\tthis._instanceInfo.push( instanceInfo );\n\n\t\t}\n\n\t\tconst matricesTexture = this._matricesTexture;\n\t\t_matrix$1.identity().toArray( matricesTexture.image.data, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tthis._visibilityChanged = true;\n\t\treturn drawId;\n\n\t}\n\n\taddGeometry( geometry, reservedVertexCount = - 1, reservedIndexCount = - 1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst geometryInfo = {\n\t\t\t// geometry information\n\t\t\tvertexStart: - 1,\n\t\t\tvertexCount: - 1,\n\t\t\treservedVertexCount: - 1,\n\n\t\t\tindexStart: - 1,\n\t\t\tindexCount: - 1,\n\t\t\treservedIndexCount: - 1,\n\n\t\t\t// draw range information\n\t\t\tstart: - 1,\n\t\t\tcount: - 1,\n\n\t\t\t// state\n\t\t\tboundingBox: null,\n\t\t\tboundingSphere: null,\n\t\t\tactive: true,\n\t\t};\n\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tgeometryInfo.vertexStart = this._nextVertexStart;\n\t\tgeometryInfo.reservedVertexCount = reservedVertexCount === - 1 ? geometry.getAttribute( 'position' ).count : reservedVertexCount;\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tgeometryInfo.indexStart = this._nextIndexStart;\n\t\t\tgeometryInfo.reservedIndexCount = reservedIndexCount === - 1 ? index.count : reservedIndexCount;\n\n\t\t}\n\n\t\tif (\n\t\t\tgeometryInfo.indexStart !== - 1 &&\n\t\t\tgeometryInfo.indexStart + geometryInfo.reservedIndexCount > this._maxIndexCount ||\n\t\t\tgeometryInfo.vertexStart + geometryInfo.reservedVertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tlet geometryId;\n\t\tif ( this._availableGeometryIds.length > 0 ) {\n\n\t\t\tthis._availableGeometryIds.sort( ascIdSort );\n\n\t\t\tgeometryId = this._availableGeometryIds.shift();\n\t\t\tgeometryInfoList[ geometryId ] = geometryInfo;\n\n\n\t\t} else {\n\n\t\t\tgeometryId = this._geometryCount;\n\t\t\tthis._geometryCount ++;\n\t\t\tgeometryInfoList.push( geometryInfo );\n\n\t\t}\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\t// increment the next geometry position\n\t\tthis._nextIndexStart = geometryInfo.indexStart + geometryInfo.reservedIndexCount;\n\t\tthis._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;\n\n\t\treturn geometryId;\n\n\t}\n\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > geometryInfo.reservedIndexCount ||\n\t\t\tgeometry.attributes.position.count > geometryInfo.reservedVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry buffer data over\n\t\tconst vertexStart = geometryInfo.vertexStart;\n\t\tconst reservedVertexCount = geometryInfo.reservedVertexCount;\n\t\tgeometryInfo.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = reservedVertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, reservedVertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = geometryInfo.indexStart;\n\t\t\tconst reservedIndexCount = geometryInfo.reservedIndexCount;\n\t\t\tgeometryInfo.indexCount = geometry.getIndex().count;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedIndexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, geometryInfo.reservedIndexCount );\n\n\t\t}\n\n\t\t// update the draw range\n\t\tgeometryInfo.start = hasIndex ? geometryInfo.indexStart : geometryInfo.vertexStart;\n\t\tgeometryInfo.count = hasIndex ? geometryInfo.indexCount : geometryInfo.vertexCount;\n\n\t\t// store the bounding boxes\n\t\tgeometryInfo.boundingBox = null;\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tgeometryInfo.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tgeometryInfo.boundingSphere = null;\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tgeometryInfo.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tthis._visibilityChanged = true;\n\t\treturn geometryId;\n\n\t}\n\n\tdeleteGeometry( geometryId ) {\n\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tif ( geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// delete any instances associated with this geometry\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].geometryIndex === geometryId ) {\n\n\t\t\t\tthis.deleteInstance( i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometryInfoList[ geometryId ].active = false;\n\t\tthis._availableGeometryIds.push( geometryId );\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteInstance( instanceId ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tinstanceInfo[ instanceId ].active = false;\n\t\tthis._availableInstanceIds.push( instanceId );\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\toptimize() {\n\n\t\t// track the next indices to copy data to\n\t\tlet nextVertexStart = 0;\n\t\tlet nextIndexStart = 0;\n\n\t\t// Iterate over all geometry ranges in order sorted from earliest in the geometry buffer to latest\n\t\t// in the geometry buffer. Because draw range objects can be reused there is no guarantee of their order.\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst indices = geometryInfoList\n\t\t\t.map( ( e, i ) => i )\n\t\t\t.sort( ( a, b ) => {\n\n\t\t\t\treturn geometryInfoList[ a ].vertexStart - geometryInfoList[ b ].vertexStart;\n\n\t\t\t} );\n\n\t\tconst geometry = this.geometry;\n\t\tfor ( let i = 0, l = geometryInfoList.length; i < l; i ++ ) {\n\n\t\t\t// if a geometry range is inactive then don't copy anything\n\t\t\tconst index = indices[ i ];\n\t\t\tconst geometryInfo = geometryInfoList[ index ];\n\t\t\tif ( geometryInfo.active === false ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// if a geometry contains an index buffer then shift it, as well\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tif ( geometryInfo.indexStart !== nextIndexStart ) {\n\n\t\t\t\t\tconst { indexStart, vertexStart, reservedIndexCount } = geometryInfo;\n\t\t\t\t\tconst index = geometry.index;\n\t\t\t\t\tconst array = index.array;\n\n\t\t\t\t\t// shift the index pointers based on how the vertex data will shift\n\t\t\t\t\t// adjusting the index must happen first so the original vertex start value is available\n\t\t\t\t\tconst elementDelta = nextVertexStart - vertexStart;\n\t\t\t\t\tfor ( let j = indexStart; j < indexStart + reservedIndexCount; j ++ ) {\n\n\t\t\t\t\t\tarray[ j ] = array[ j ] + elementDelta;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );\n\t\t\t\t\tindex.addUpdateRange( nextIndexStart, reservedIndexCount );\n\n\t\t\t\t\tgeometryInfo.indexStart = nextIndexStart;\n\n\t\t\t\t}\n\n\t\t\t\tnextIndexStart += geometryInfo.reservedIndexCount;\n\n\t\t\t}\n\n\t\t\t// if a geometry needs to be moved then copy attribute data to overwrite unused space\n\t\t\tif ( geometryInfo.vertexStart !== nextVertexStart ) {\n\n\t\t\t\tconst { vertexStart, reservedVertexCount } = geometryInfo;\n\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\t\tconst { array, itemSize } = attribute;\n\t\t\t\t\tarray.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );\n\t\t\t\t\tattribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tgeometryInfo.vertexStart = nextVertexStart;\n\n\t\t\t}\n\n\t\t\tnextVertexStart += geometryInfo.reservedVertexCount;\n\t\t\tgeometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;\n\n\t\t\t// step the next geometry points to the shifted position\n\t\t\tthis._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;\n\t\t\tthis._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get bounding box and compute it if it doesn't exist\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst geometry = this.geometry;\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif ( geometryInfo.boundingBox === null ) {\n\n\t\t\tconst box = new Box3();\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tfor ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tgeometryInfo.boundingBox = box;\n\n\t\t}\n\n\t\ttarget.copy( geometryInfo.boundingBox );\n\t\treturn target;\n\n\t}\n\n\t// get bounding sphere and compute it if it doesn't exist\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst geometry = this.geometry;\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif ( geometryInfo.boundingSphere === null ) {\n\n\t\t\tconst sphere = new Sphere();\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tgeometryInfo.boundingSphere = sphere;\n\n\t\t}\n\n\t\ttarget.copy( geometryInfo.boundingSphere );\n\t\treturn target;\n\n\t}\n\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn matrix.fromArray( matricesArray, instanceId * 16 );\n\n\t}\n\n\tsetColorAt( instanceId, color ) {\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcolor.toArray( colorsArray, instanceId * 4 );\n\t\tcolorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( instanceId, color ) {\n\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn color.fromArray( colorsArray, instanceId * 4 );\n\n\t}\n\n\tsetVisibleAt( instanceId, value ) {\n\n\t\t// if the geometry is out of range, not active, or visibility state\n\t\t// does not change then return early\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif (\n\t\t\tinstanceId >= instanceInfo.length ||\n\t\t\tinstanceInfo[ instanceId ].active === false ||\n\t\t\tinstanceInfo[ instanceId ].visible === value\n\t\t) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tinstanceInfo[ instanceId ].visible = value;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetVisibleAt( instanceId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn instanceInfo[ instanceId ].visible;\n\n\t}\n\n\tsetGeometryIdAt( instanceId, geometryId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// check if the provided geometryId is within the valid range\n\t\tif ( geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tinstanceInfo[ instanceId ].geometryIndex = geometryId;\n\n\t\treturn this;\n\n\t}\n\n\tgetGeometryIdAt( instanceId ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\treturn - 1;\n\n\t\t}\n\n\t\treturn instanceInfo[ instanceId ].geometryIndex;\n\n\t}\n\n\tgetGeometryRangeAt( geometryId, target = {} ) {\n\n\t\tif ( geometryId < 0 || geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\ttarget.vertexStart = geometryInfo.vertexStart;\n\t\ttarget.vertexCount = geometryInfo.vertexCount;\n\t\ttarget.reservedVertexCount = geometryInfo.reservedVertexCount;\n\n\t\ttarget.indexStart = geometryInfo.indexStart;\n\t\ttarget.indexCount = geometryInfo.indexCount;\n\t\ttarget.reservedIndexCount = geometryInfo.reservedIndexCount;\n\n\t\ttarget.start = geometryInfo.start;\n\t\ttarget.count = geometryInfo.count;\n\n\t\treturn target;\n\n\t}\n\n\tsetInstanceCount( maxInstanceCount ) {\n\n\t\t// shrink the available instances as much as possible\n\t\tconst availableInstanceIds = this._availableInstanceIds;\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tavailableInstanceIds.sort( ascIdSort );\n\t\twhile ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length ) {\n\n\t\t\tinstanceInfo.pop();\n\t\t\tavailableInstanceIds.pop();\n\n\t\t}\n\n\t\t// throw an error if it can't be shrunk to the desired size\n\t\tif ( maxInstanceCount < instanceInfo.length ) {\n\n\t\t\tthrow new Error( `BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );\n\n\t\t}\n\n\t\t// copy the multi draw counts\n\t\tconst multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tconst multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tcopyArrayContents( this._multiDrawCounts, multiDrawCounts );\n\t\tcopyArrayContents( this._multiDrawStarts, multiDrawStarts );\n\n\t\tthis._multiDrawCounts = multiDrawCounts;\n\t\tthis._multiDrawStarts = multiDrawStarts;\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\n\t\t// update texture data for instance sampling\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst colorsTexture = this._colorsTexture;\n\n\t\tindirectTexture.dispose();\n\t\tthis._initIndirectTexture();\n\t\tcopyArrayContents( indirectTexture.image.data, this._indirectTexture.image.data );\n\n\t\tmatricesTexture.dispose();\n\t\tthis._initMatricesTexture();\n\t\tcopyArrayContents( matricesTexture.image.data, this._matricesTexture.image.data );\n\n\t\tif ( colorsTexture ) {\n\n\t\t\tcolorsTexture.dispose();\n\t\t\tthis._initColorsTexture();\n\t\t\tcopyArrayContents( colorsTexture.image.data, this._colorsTexture.image.data );\n\n\t\t}\n\n\t}\n\n\tsetGeometrySize( maxVertexCount, maxIndexCount ) {\n\n\t\t// Check if we can shrink to the requested vertex attribute size\n\t\tconst validRanges = [ ...this._geometryInfo ].filter( info => info.active );\n\t\tconst requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );\n\t\tif ( requiredVertexLength > maxVertexCount ) {\n\n\t\t\tthrow new Error( `BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );\n\n\t\t}\n\n\t\t// Check if we can shrink to the requested index attribute size\n\t\tif ( this.geometry.index ) {\n\n\t\t\tconst requiredIndexLength = Math.max( ...validRanges.map( range => range.indexStart + range.reservedIndexCount ) );\n\t\t\tif ( requiredIndexLength > maxIndexCount ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\t// dispose of the previous geometry\n\t\tconst oldGeometry = this.geometry;\n\t\toldGeometry.dispose();\n\n\t\t// recreate the geometry needed based on the previous variant\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tif ( this._geometryInitialized ) {\n\n\t\t\tthis._geometryInitialized = false;\n\t\t\tthis.geometry = new BufferGeometry();\n\t\t\tthis._initializeGeometry( oldGeometry );\n\n\t\t}\n\n\t\t// copy data from the previous geometry\n\t\tconst geometry = this.geometry;\n\t\tif ( oldGeometry.index ) {\n\n\t\t\tcopyArrayContents( oldGeometry.index.array, geometry.index.array );\n\n\t\t}\n\n\t\tfor ( const key in oldGeometry.attributes ) {\n\n\t\t\tcopyArrayContents( oldGeometry.attributes[ key ].array, geometry.attributes[ key ].array );\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! instanceInfo[ i ].visible || ! instanceInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( geometryInfo.start, geometryInfo.count );\n\n\t\t\t// get the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._geometryInfo = source._geometryInfo.map( info => ( {\n\t\t\t...info,\n\n\t\t\tboundingBox: info.boundingBox !== null ? info.boundingBox.clone() : null,\n\t\t\tboundingSphere: info.boundingSphere !== null ? info.boundingSphere.clone() : null,\n\t\t} ) );\n\t\tthis._instanceInfo = source._instanceInfo.map( info => ( { ...info } ) );\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._geometryCount = source._geometryCount;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tconst bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t_matrix$1\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_matrix$1,\n\t\t\t\trenderer.coordinateSystem\n\t\t\t);\n\n\t\t}\n\n\t\tlet multiDrawCount = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_matrix$1.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _matrix$1 );\n\t\t\t_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _matrix$1 );\n\n\t\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward );\n\t\t\t\t\t\t_renderList.push( geometryInfo.start, geometryInfo.count, z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;\n\t\t\t\tmultiDrawCounts[ multiDrawCount ] = item.count;\n\t\t\t\tindirectArray[ multiDrawCount ] = item.index;\n\t\t\t\tmultiDrawCount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;\n\t\t\t\t\t\tmultiDrawCounts[ multiDrawCount ] = geometryInfo.count;\n\t\t\t\t\t\tindirectArray[ multiDrawCount ] = i;\n\t\t\t\t\t\tmultiDrawCount ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = multiDrawCount;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'LineBasicMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: a,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tbarycoord: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'PointsMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tfaceIndex: null,\n\t\t\tbarycoord: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass CompressedCubeTexture extends CompressedTexture {\n\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\tthis.isCompressedCubeTexture = true;\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tlength: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tif ( radiusTop > 0 || y !== 0 ) {\n\n\t\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( radiusBottom > 0 || y !== heightSegments - 1 ) {\n\n\t\t\t\t\t\tindices.push( b, c, d );\n\t\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'ShadowMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'RawShaderMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshStandardMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshPhysicalMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshPhongMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshToonMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshNormalMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshLambertMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'MeshMatcapMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'LineDashedMaterial';\n\n\t}\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( error );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\t\tif ( this.target !== undefined ) data.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.intensity = 1;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = this.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tcreateMaterialFromType( type ) {\n\n\t\treturn MaterialLoader.createMaterialFromType( type );\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) { // @deprecated, r165\n\n\t\tconsole.warn( 'THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.' );\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._visibility = data.visibility;\n\t\t\t\tobject._active = data.active;\n\t\t\t\tobject._bounds = data.bounds.map( bound => {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tbox.min.fromArray( bound.boxMin );\n\t\t\t\t\tbox.max.fromArray( bound.boxMax );\n\n\t\t\t\t\tconst sphere = new Sphere();\n\t\t\t\t\tsphere.radius = bound.sphereRadius;\n\t\t\t\t\tsphere.center.fromArray( bound.sphereCenter );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\t\t\tbox: box,\n\n\t\t\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\t\t\tsphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\t\t\t\tif ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} ).catch( e => {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t} );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t\treturn imageBitmap;\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tCache.remove( url );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( url, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} ).catch( handleError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn performance.now();\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop( delay = 0 ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop( this.context.currentTime + delay );\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, - 1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.\n * theta (the azimuthal angle) is measured from the positive z-axis.\n */\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix2 {\n\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass Controls extends EventDispatcher {\n\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\tthis.enabled = true;\n\n\t\tthis.state = - 1;\n\n\t\tthis.keys = {};\n\t\tthis.mouseButtons = { LEFT: null, MIDDLE: null, RIGHT: null };\n\t\tthis.touches = { ONE: null, TWO: null };\n\n\t}\n\n\tconnect() {}\n\n\tdisconnect() {}\n\n\tdispose() {}\n\n\tupdate( /* delta */ ) {}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tconsole.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the \"count\" parameter to enable MRT.' );\n\n\t\tsuper( width, height, { ...options, count } );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures;\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, createCanvasElement };\n","import {\n\tControls,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nconst _v = new Vector3();\nconst _twoPI = 2 * Math.PI;\n\nconst _STATE = {\n\tNONE: - 1,\n\tROTATE: 0,\n\tDOLLY: 1,\n\tPAN: 2,\n\tTOUCH_ROTATE: 3,\n\tTOUCH_PAN: 4,\n\tTOUCH_DOLLY_PAN: 5,\n\tTOUCH_DOLLY_ROTATE: 6\n};\nconst _EPS = 0.000001;\n\nclass OrbitControls extends Controls {\n\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.state = _STATE.NONE;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect\n\t\tthis.cursor = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// Limit camera target within a spherical area around the cursor\n\t\tthis.minTargetRadius = 0;\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t// internals\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastTargetPosition = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tthis._quatInverse = this._quat.clone().invert();\n\n\t\t// current position in spherical coordinates\n\t\tthis._spherical = new Spherical();\n\t\tthis._sphericalDelta = new Spherical();\n\n\t\tthis._scale = 1;\n\t\tthis._panOffset = new Vector3();\n\n\t\tthis._rotateStart = new Vector2();\n\t\tthis._rotateEnd = new Vector2();\n\t\tthis._rotateDelta = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\t\tthis._panDelta = new Vector2();\n\n\t\tthis._dollyStart = new Vector2();\n\t\tthis._dollyEnd = new Vector2();\n\t\tthis._dollyDelta = new Vector2();\n\n\t\tthis._dollyDirection = new Vector3();\n\t\tthis._mouse = new Vector2();\n\t\tthis._performCursorZoom = false;\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\tthis._controlActive = false;\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\n\n\t\t//\n\n\t\tif ( this.domElement !== null ) {\n\n\t\t\tthis.connect();\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\tconnect() {\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.stopListenToKeyEvents();\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'auto';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tgetPolarAngle() {\n\n\t\treturn this._spherical.phi;\n\n\t}\n\n\tgetAzimuthalAngle() {\n\n\t\treturn this._spherical.theta;\n\n\t}\n\n\tgetDistance() {\n\n\t\treturn this.object.position.distanceTo( this.target );\n\n\t}\n\n\tlistenToKeyEvents( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t}\n\n\tstopListenToKeyEvents() {\n\n\t\tif ( this._domElementKeyEvents !== null ) {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t}\n\n\t}\n\n\tsaveState() {\n\n\t\tthis.target0.copy( this.target );\n\t\tthis.position0.copy( this.object.position );\n\t\tthis.zoom0 = this.object.zoom;\n\n\t}\n\n\treset() {\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\t\tthis.object.zoom = this.zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis.update();\n\n\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tupdate( deltaTime = null ) {\n\n\t\tconst position = this.object.position;\n\n\t\t_v.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t_v.applyQuaternion( this._quat );\n\n\t\t// angle from z-axis around y-axis\n\t\tthis._spherical.setFromVector3( _v );\n\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\n\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\n\n\t\t}\n\n\t\tif ( this.enableDamping ) {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\n\n\t\t} else {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\n\n\t\t}\n\n\t\t// restrict theta to be between desired limits\n\n\t\tlet min = this.minAzimuthAngle;\n\t\tlet max = this.maxAzimuthAngle;\n\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\n\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\n\n\t\t\tif ( min <= max ) {\n\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\n\t\t\t\t\tMath.min( max, this._spherical.theta );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restrict phi to be between desired limits\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\n\n\t\tthis._spherical.makeSafe();\n\n\n\t\t// move target to panned location\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis.target.add( this._panOffset );\n\n\t\t}\n\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\tthis.target.sub( this.cursor );\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\n\t\tthis.target.add( this.cursor );\n\n\t\tlet zoomChanged = false;\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t// we adjust zoom later in these cases\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\n\n\t\t} else {\n\n\t\t\tconst prevRadius = this._spherical.radius;\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\n\n\t\t}\n\n\t\t_v.setFromSpherical( this._spherical );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t_v.applyQuaternion( this._quatInverse );\n\n\t\tposition.copy( this.target ).add( _v );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\n\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\n\n\t\t\tthis._panOffset.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// adjust camera position\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\n\n\t\t\tlet newRadius = null;\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t// this method avoids floating point error\n\t\t\t\tconst prevRadius = _v.length();\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\n\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseBefore.unproject( this.object );\n\n\t\t\t\tconst prevZoom = this.object.zoom;\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\n\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseAfter.unproject( this.object );\n\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tnewRadius = _v.length();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\tthis.zoomToCursor = false;\n\n\t\t\t}\n\n\t\t\t// handle the placement of the target\n\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\n\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t.add( this.object.position );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t_ray.origin.copy( this.object.position );\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\n\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t// extremely large values\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\n\n\t\t\t\t\t\tthis.object.lookAt( this.target );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tconst prevZoom = this.object.zoom;\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\n\t\t\tif ( prevZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._scale = 1;\n\t\tthis._performCursorZoom = false;\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( zoomChanged ||\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\n\t\t\tthis._lastTargetPosition.copy( this.target );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_getAutoRotationAngle( deltaTime ) {\n\n\t\tif ( deltaTime !== null ) {\n\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\n\n\t\t} else {\n\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\n\n\t\t}\n\n\t}\n\n\t_getZoomScale( delta ) {\n\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\n\n\t}\n\n\t_rotateLeft( angle ) {\n\n\t\tthis._sphericalDelta.theta -= angle;\n\n\t}\n\n\t_rotateUp( angle ) {\n\n\t\tthis._sphericalDelta.phi -= angle;\n\n\t}\n\n\t_panLeft( distance, objectMatrix ) {\n\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t_v.multiplyScalar( - distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t_panUp( distance, objectMatrix ) {\n\n\t\tif ( this.screenSpacePanning === true ) {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t} else {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t_v.crossVectors( this.object.up, _v );\n\n\t\t}\n\n\t\t_v.multiplyScalar( distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\t_pan( deltaX, deltaY ) {\n\n\t\tconst element = this.domElement;\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t// perspective\n\t\t\tconst position = this.object.position;\n\t\t\t_v.copy( position ).sub( this.target );\n\t\t\tlet targetDistance = _v.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t// orthographic\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic nor perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\tthis.enablePan = false;\n\n\t\t}\n\n\t}\n\n\t_dollyOut( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale /= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_dollyIn( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale *= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_updateZoomParameters( x, y ) {\n\n\t\tif ( ! this.zoomToCursor ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._performCursorZoom = true;\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\t\tconst dx = x - rect.left;\n\t\tconst dy = y - rect.top;\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\n\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\n\n\t}\n\n\t_clampDistance( dist ) {\n\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\t_handleMouseDownRotate( event ) {\n\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownDolly( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownPan( event ) {\n\n\t\tthis._panStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseMoveRotate( event ) {\n\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMoveDolly( event ) {\n\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\n\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\n\n\t\tif ( this._dollyDelta.y > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t} else if ( this._dollyDelta.y < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t}\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMovePan( event ) {\n\n\t\tthis._panEnd.set( event.clientX, event.clientY );\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseWheel( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t_handleKeyDown( event ) {\n\n\t\tlet needsUpdate = false;\n\n\t\tswitch ( event.code ) {\n\n\t\t\tcase this.keys.UP:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateUp( _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.BOTTOM:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateUp( - _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateLeft( _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.RIGHT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tthis._rotateLeft( - _twoPI * this.rotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.update();\n\n\t\t}\n\n\n\t}\n\n\t_handleTouchStartRotate( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartPan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyStart.set( 0, distance );\n\n\t}\n\n\t_handleTouchStartDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\n\n\t}\n\n\t_handleTouchStartDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\n\n\t}\n\n\t_handleTouchMoveRotate( event ) {\n\n\t\tif ( this._pointers.length == 1 ) {\n\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t}\n\n\t_handleTouchMovePan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t}\n\n\t_handleTouchMoveDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyEnd.set( 0, distance );\n\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\n\n\t\tthis._dollyOut( this._dollyDelta.y );\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\tthis._updateZoomParameters( centerX, centerY );\n\n\t}\n\n\t_handleTouchMoveDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\n\n\t}\n\n\t_handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\n\n\t}\n\n\t// pointers\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event.pointerId );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_isTrackingPointer( event ) {\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointerId ];\n\n\t}\n\n\t//\n\n\t_customWheelEvent( event ) {\n\n\t\tconst mode = event.deltaMode;\n\n\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\tconst newEvent = {\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\tdeltaY: event.deltaY,\n\t\t};\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 1: // LINE_MODE\n\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // PAGE_MODE\n\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// detect if event was triggered by pinching\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\n\n\t\t\tnewEvent.deltaY *= 10;\n\n\t\t}\n\n\t\treturn newEvent;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tif ( this._isTrackingPointer( event ) ) return;\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tthis._removePointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tconst pointerId = this._pointers[ 0 ];\n\t\t\tconst position = this._pointerPositions[ pointerId ];\n\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseDownDolly( event );\n\n\t\t\tthis.state = _STATE.DOLLY;\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onMouseMove( event ) {\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleMouseMoveRotate( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseMoveDolly( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleMouseMovePan( event );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\n\n\tevent.preventDefault();\n\n\tthis.dispatchEvent( _startEvent );\n\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false || this.enablePan === false ) return;\n\n\tthis._handleKeyDown( event );\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\n\t\t\tswitch ( this.touches.ONE ) {\n\n\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tswitch ( this.touches.TWO ) {\n\n\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.TOUCH_ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMovePan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\n\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyPan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction interceptControlDown( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = true;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nfunction interceptControlUp( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = false;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\tif ( uri.search( /\\.ktx2($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/ktx2/ ) === 0 ) return 'image/ktx2';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\t// Ignore normalized since we copy from sparse\n\t\t\t\tbufferAttribute.normalized = false;\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute.normalized = normalized;\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\t\t\ttexture.generateMipmaps = ! texture.isCompressedTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor,\n\tSRGBColorSpace\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] ),\n\t\t\t\t\t\t\t\tSRGBColorSpace\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","import {\n\tColor,\n\tColorManagement,\n\tDefaultLoadingManager,\n\tFileLoader,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMeshPhongMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * Loads a Wavefront .mtl file specifying materials\n */\n\nclass MTLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Loads and parses a MTL asset from a URL.\n\t *\n\t * @param {String} url - URL to the MTL file.\n\t * @param {Function} [onLoad] - Callback invoked with the loaded object.\n\t * @param {Function} [onProgress] - Callback for download progress.\n\t * @param {Function} [onError] - Callback for download errors.\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to load.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterialOptions( value ) {\n\n\t\tthis.materialOptions = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses a MTL file.\n\t *\n\t * @param {String} text - Content of MTL file\n\t * @return {MaterialCreator}\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to parse.\n\t */\n\tparse( text, path ) {\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet info = {};\n\t\tconst delimiter_pattern = /\\s+/;\n\t\tconst materialsInfo = {};\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlet line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst pos = line.indexOf( ' ' );\n\n\t\t\tlet key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tlet value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke' ) {\n\n\t\t\t\t\tconst ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst materialCreator = new MaterialCreator( this.resourcePath || path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n}\n\n/**\n * Create a new MTLLoader.MaterialCreator\n * @param baseUrl - Url relative to which textures are loaded\n * @param options - Set of options on how to construct the materials\n * side: Which side to apply the material\n * FrontSide (default), THREE.BackSide, THREE.DoubleSide\n * wrap: What type of wrapping to apply for textures\n * RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping\n * normalizeRGB: RGBs need to be normalized to 0-1 from 0-255\n * Default: false, assumed to be already normalized\n * ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's\n * Default: false\n * @constructor\n */\n\nclass MaterialCreator {\n\n\tconstructor( baseUrl = '', options = {} ) {\n\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.options = options;\n\t\tthis.materialsInfo = {};\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t\tthis.crossOrigin = 'anonymous';\n\n\t\tthis.side = ( this.options.side !== undefined ) ? this.options.side : FrontSide;\n\t\tthis.wrap = ( this.options.wrap !== undefined ) ? this.options.wrap : RepeatWrapping;\n\n\t}\n\n\tsetCrossOrigin( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t}\n\n\tsetManager( value ) {\n\n\t\tthis.manager = value;\n\n\t}\n\n\tsetMaterials( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t}\n\n\tconvert( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tconst converted = {};\n\n\t\tfor ( const mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tconst mat = materialsInfo[ mn ];\n\n\t\t\tconst covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( const prop in mat ) {\n\n\t\t\t\tlet save = true;\n\t\t\t\tlet value = mat[ prop ];\n\t\t\t\tconst lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t}\n\n\tpreload() {\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t}\n\n\tgetIndex( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t}\n\n\tgetAsArray() {\n\n\t\tlet index = 0;\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t}\n\n\tcreate( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tcreateMaterial_( materialName ) {\n\n\t\t// Create material\n\n\t\tconst scope = this;\n\t\tconst mat = this.materialsInfo[ materialName ];\n\t\tconst params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tconst texParams = scope.getTextureParams( value, params );\n\t\t\tconst map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tif ( mapType === 'map' || mapType === 'emissiveMap' ) {\n\n\t\t\t\tmap.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( const prop in mat ) {\n\n\t\t\tconst value = mat[ prop ];\n\t\t\tlet n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ke':\n\n\t\t\t\t\t// Emissive using RGB values\n\t\t\t\t\tparams.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( 'map', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( 'specularMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ke':\n\n\t\t\t\t\t// Emissive map\n\n\t\t\t\t\tsetMapForType( 'emissiveMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( 'normalMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( 'bumpMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_d':\n\n\t\t\t\t\t// Alpha map\n\n\t\t\t\t\tsetMapForType( 'alphaMap', value );\n\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( this.options && this.options.invertTrProperty ) n = 1 - n;\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tgetTextureParams( value, matParams ) {\n\n\t\tconst texParams = {\n\n\t\t\tscale: new Vector2( 1, 1 ),\n\t\t\toffset: new Vector2( 0, 0 )\n\n\t\t };\n\n\t\tconst items = value.split( /\\s+/ );\n\t\tlet pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t}\n\n\tloadTexture( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tconst manager = ( this.manager !== undefined ) ? this.manager : DefaultLoadingManager;\n\t\tlet loader = manager.getHandler( url );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { MTLLoader };\n","/*!\nfflate - fast JavaScript compression/decompression\n\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.8.2\n*/\n\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","import {\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * NURBS utils\n *\n * See NURBSCurve and NURBSSurface.\n **/\n\n\n/**************************************************************\n *\tNURBS Utils\n **************************************************************/\n\n/*\nFinds knot vector span.\n\np : degree\nu : parametric value\nU : knot vector\n\nreturns the span\n*/\nfunction findSpan( p, u, U ) {\n\n\tconst n = U.length - p - 1;\n\n\tif ( u >= U[ n ] ) {\n\n\t\treturn n - 1;\n\n\t}\n\n\tif ( u <= U[ p ] ) {\n\n\t\treturn p;\n\n\t}\n\n\tlet low = p;\n\tlet high = n;\n\tlet mid = Math.floor( ( low + high ) / 2 );\n\n\twhile ( u < U[ mid ] || u >= U[ mid + 1 ] ) {\n\n\t\tif ( u < U[ mid ] ) {\n\n\t\t\thigh = mid;\n\n\t\t} else {\n\n\t\t\tlow = mid;\n\n\t\t}\n\n\t\tmid = Math.floor( ( low + high ) / 2 );\n\n\t}\n\n\treturn mid;\n\n}\n\n\n/*\nCalculate basis functions. See The NURBS Book, page 70, algorithm A2.2\n\nspan : span in which u lies\nu : parametric point\np : degree\nU : knot vector\n\nreturns array[p+1] with basis functions values.\n*/\nfunction calcBasisFunctions( span, u, p, U ) {\n\n\tconst N = [];\n\tconst left = [];\n\tconst right = [];\n\tN[ 0 ] = 1.0;\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tconst temp = N[ r ] / ( rv + lv );\n\t\t\tN[ r ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tN[ j ] = saved;\n\n\t}\n\n\treturn N;\n\n}\n\n\n/*\nCalculate B-Spline curve points. See The NURBS Book, page 82, algorithm A3.1.\n\np : degree of B-Spline\nU : knot vector\nP : control points (x, y, z, w)\nu : parametric point\n\nreturns point for given u\n*/\nfunction calcBSplinePoint( p, U, P, u ) {\n\n\tconst span = findSpan( p, u, U );\n\tconst N = calcBasisFunctions( span, u, p, U );\n\tconst C = new Vector4( 0, 0, 0, 0 );\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tconst point = P[ span - p + j ];\n\t\tconst Nj = N[ j ];\n\t\tconst wNj = point.w * Nj;\n\t\tC.x += point.x * wNj;\n\t\tC.y += point.y * wNj;\n\t\tC.z += point.z * wNj;\n\t\tC.w += point.w * Nj;\n\n\t}\n\n\treturn C;\n\n}\n\n\n/*\nCalculate basis functions derivatives. See The NURBS Book, page 72, algorithm A2.3.\n\nspan : span in which u lies\nu : parametric point\np : degree\nn : number of derivatives to calculate\nU : knot vector\n\nreturns array[n+1][p+1] with basis functions derivatives\n*/\nfunction calcBasisFunctionDerivatives( span, u, p, n, U ) {\n\n\tconst zeroArr = [];\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tzeroArr[ i ] = 0.0;\n\n\tconst ders = [];\n\n\tfor ( let i = 0; i <= n; ++ i )\n\t\tders[ i ] = zeroArr.slice( 0 );\n\n\tconst ndu = [];\n\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tndu[ i ] = zeroArr.slice( 0 );\n\n\tndu[ 0 ][ 0 ] = 1.0;\n\n\tconst left = zeroArr.slice( 0 );\n\tconst right = zeroArr.slice( 0 );\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tndu[ j ][ r ] = rv + lv;\n\n\t\t\tconst temp = ndu[ r ][ j - 1 ] / ndu[ j ][ r ];\n\t\t\tndu[ r ][ j ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tndu[ j ][ j ] = saved;\n\n\t}\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tders[ 0 ][ j ] = ndu[ j ][ p ];\n\n\t}\n\n\tfor ( let r = 0; r <= p; ++ r ) {\n\n\t\tlet s1 = 0;\n\t\tlet s2 = 1;\n\n\t\tconst a = [];\n\t\tfor ( let i = 0; i <= p; ++ i ) {\n\n\t\t\ta[ i ] = zeroArr.slice( 0 );\n\n\t\t}\n\n\t\ta[ 0 ][ 0 ] = 1.0;\n\n\t\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\t\tlet d = 0.0;\n\t\t\tconst rk = r - k;\n\t\t\tconst pk = p - k;\n\n\t\t\tif ( r >= k ) {\n\n\t\t\t\ta[ s2 ][ 0 ] = a[ s1 ][ 0 ] / ndu[ pk + 1 ][ rk ];\n\t\t\t\td = a[ s2 ][ 0 ] * ndu[ rk ][ pk ];\n\n\t\t\t}\n\n\t\t\tconst j1 = ( rk >= - 1 ) ? 1 : - rk;\n\t\t\tconst j2 = ( r - 1 <= pk ) ? k - 1 : p - r;\n\n\t\t\tfor ( let j = j1; j <= j2; ++ j ) {\n\n\t\t\t\ta[ s2 ][ j ] = ( a[ s1 ][ j ] - a[ s1 ][ j - 1 ] ) / ndu[ pk + 1 ][ rk + j ];\n\t\t\t\td += a[ s2 ][ j ] * ndu[ rk + j ][ pk ];\n\n\t\t\t}\n\n\t\t\tif ( r <= pk ) {\n\n\t\t\t\ta[ s2 ][ k ] = - a[ s1 ][ k - 1 ] / ndu[ pk + 1 ][ r ];\n\t\t\t\td += a[ s2 ][ k ] * ndu[ r ][ pk ];\n\n\t\t\t}\n\n\t\t\tders[ k ][ r ] = d;\n\n\t\t\tconst j = s1;\n\t\t\ts1 = s2;\n\t\t\ts2 = j;\n\n\t\t}\n\n\t}\n\n\tlet r = p;\n\n\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\t\tders[ k ][ j ] *= r;\n\n\t\t}\n\n\t\tr *= p - k;\n\n\t}\n\n\treturn ders;\n\n}\n\n\n/*\n\tCalculate derivatives of a B-Spline. See The NURBS Book, page 93, algorithm A3.2.\n\n\tp : degree\n\tU : knot vector\n\tP : control points\n\tu : Parametric points\n\tnd : number of derivatives\n\n\treturns array[d+1] with derivatives\n\t*/\nfunction calcBSplineDerivatives( p, U, P, u, nd ) {\n\n\tconst du = nd < p ? nd : p;\n\tconst CK = [];\n\tconst span = findSpan( p, u, U );\n\tconst nders = calcBasisFunctionDerivatives( span, u, p, du, U );\n\tconst Pw = [];\n\n\tfor ( let i = 0; i < P.length; ++ i ) {\n\n\t\tconst point = P[ i ].clone();\n\t\tconst w = point.w;\n\n\t\tpoint.x *= w;\n\t\tpoint.y *= w;\n\t\tpoint.z *= w;\n\n\t\tPw[ i ] = point;\n\n\t}\n\n\tfor ( let k = 0; k <= du; ++ k ) {\n\n\t\tconst point = Pw[ span - p ].clone().multiplyScalar( nders[ k ][ 0 ] );\n\n\t\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\t\tpoint.add( Pw[ span - p + j ].clone().multiplyScalar( nders[ k ][ j ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = point;\n\n\t}\n\n\tfor ( let k = du + 1; k <= nd + 1; ++ k ) {\n\n\t\tCK[ k ] = new Vector4( 0, 0, 0 );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate \"K over I\"\n\nreturns k!/(i!(k-i)!)\n*/\nfunction calcKoverI( k, i ) {\n\n\tlet nom = 1;\n\n\tfor ( let j = 2; j <= k; ++ j ) {\n\n\t\tnom *= j;\n\n\t}\n\n\tlet denom = 1;\n\n\tfor ( let j = 2; j <= i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\tfor ( let j = 2; j <= k - i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\treturn nom / denom;\n\n}\n\n\n/*\nCalculate derivatives (0-nd) of rational curve. See The NURBS Book, page 127, algorithm A4.2.\n\nPders : result of function calcBSplineDerivatives\n\nreturns array with derivatives for rational curve.\n*/\nfunction calcRationalCurveDerivatives( Pders ) {\n\n\tconst nd = Pders.length;\n\tconst Aders = [];\n\tconst wders = [];\n\n\tfor ( let i = 0; i < nd; ++ i ) {\n\n\t\tconst point = Pders[ i ];\n\t\tAders[ i ] = new Vector3( point.x, point.y, point.z );\n\t\twders[ i ] = point.w;\n\n\t}\n\n\tconst CK = [];\n\n\tfor ( let k = 0; k < nd; ++ k ) {\n\n\t\tconst v = Aders[ k ].clone();\n\n\t\tfor ( let i = 1; i <= k; ++ i ) {\n\n\t\t\tv.sub( CK[ k - i ].clone().multiplyScalar( calcKoverI( k, i ) * wders[ i ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = v.divideScalar( wders[ 0 ] );\n\n\t}\n\n\treturn CK;\n\n}\n\n\n/*\nCalculate NURBS curve derivatives. See The NURBS Book, page 127, algorithm A4.2.\n\np : degree\nU : knot vector\nP : control points in homogeneous space\nu : parametric points\nnd : number of derivatives\n\nreturns array with derivatives.\n*/\nfunction calcNURBSDerivatives( p, U, P, u, nd ) {\n\n\tconst Pders = calcBSplineDerivatives( p, U, P, u, nd );\n\treturn calcRationalCurveDerivatives( Pders );\n\n}\n\n\n/*\nCalculate rational B-Spline surface point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q : degrees of B-Spline surface\nU, V : knot vectors\nP : control points (x, y, z, w)\nu, v : parametric values\n\nreturns point for given (u, v)\n*/\nfunction calcSurfacePoint( p, q, U, V, P, u, v, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst temp = [];\n\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\ttemp[ l ] = new Vector4( 0, 0, 0, 0 );\n\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ].clone();\n\t\t\tconst w = point.w;\n\t\t\tpoint.x *= w;\n\t\t\tpoint.y *= w;\n\t\t\tpoint.z *= w;\n\t\t\ttemp[ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t}\n\n\t}\n\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\tSw.add( temp[ l ].multiplyScalar( Nv[ l ] ) );\n\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n/*\nCalculate rational B-Spline volume point. See The NURBS Book, page 134, algorithm A4.3.\n\np, q, r : degrees of B-Splinevolume\nU, V, W : knot vectors\nP : control points (x, y, z, w)\nu, v, w : parametric values\n\nreturns point for given (u, v, w)\n*/\nfunction calcVolumePoint( p, q, r, U, V, W, P, u, v, w, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst wspan = findSpan( r, w, W );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst Nw = calcBasisFunctions( wspan, w, r, W );\n\tconst temp = [];\n\n\tfor ( let m = 0; m <= r; ++ m ) {\n\n\t\ttemp[ m ] = [];\n\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\ttemp[ m ][ l ] = new Vector4( 0, 0, 0, 0 );\n\t\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ][ wspan - r + m ].clone();\n\t\t\t\tconst w = point.w;\n\t\t\t\tpoint.x *= w;\n\t\t\t\tpoint.y *= w;\n\t\t\t\tpoint.z *= w;\n\t\t\t\ttemp[ m ][ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let m = 0; m <= r; ++ m ) {\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\tSw.add( temp[ m ][ l ].multiplyScalar( Nw[ m ] ).multiplyScalar( Nv[ l ] ) );\n\n\t\t}\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n\nexport {\n\tfindSpan,\n\tcalcBasisFunctions,\n\tcalcBSplinePoint,\n\tcalcBasisFunctionDerivatives,\n\tcalcBSplineDerivatives,\n\tcalcKoverI,\n\tcalcRationalCurveDerivatives,\n\tcalcNURBSDerivatives,\n\tcalcSurfacePoint,\n\tcalcVolumePoint,\n};\n","import {\n\tCurve,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * NURBS curve object\n *\n * Derives from Curve, overriding getPoint and getTangent.\n *\n * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.\n *\n **/\n\nclass NURBSCurve extends Curve {\n\n\tconstructor(\n\t\tdegree,\n\t\tknots /* array of reals */,\n\t\tcontrolPoints /* array of Vector(2|3|4) */,\n\t\tstartKnot /* index in knots */,\n\t\tendKnot /* index in knots */\n\t) {\n\n\t\tsuper();\n\n\t\tconst knotsLength = knots ? knots.length - 1 : 0;\n\t\tconst pointsLength = controlPoints ? controlPoints.length : 0;\n\n\t\tthis.degree = degree;\n\t\tthis.knots = knots;\n\t\tthis.controlPoints = [];\n\t\t// Used by periodic NURBS to remove hidden spans\n\t\tthis.startKnot = startKnot || 0;\n\t\tthis.endKnot = endKnot || knotsLength;\n\n\t\tfor ( let i = 0; i < pointsLength; ++ i ) {\n\n\t\t\t// ensure Vector4 for control points\n\t\t\tconst point = controlPoints[ i ];\n\t\t\tthis.controlPoints[ i ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t}\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst u = this.knots[ this.startKnot ] + t * ( this.knots[ this.endKnot ] - this.knots[ this.startKnot ] ); // linear mapping t->u\n\n\t\t// following results in (wx, wy, wz, w) homogeneous point\n\t\tconst hpoint = NURBSUtils.calcBSplinePoint( this.degree, this.knots, this.controlPoints, u );\n\n\t\tif ( hpoint.w !== 1.0 ) {\n\n\t\t\t// project to 3D space: (wx, wy, wz, w) -> (x, y, z, 1)\n\t\t\thpoint.divideScalar( hpoint.w );\n\n\t\t}\n\n\t\treturn point.set( hpoint.x, hpoint.y, hpoint.z );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\tconst tangent = optionalTarget;\n\n\t\tconst u = this.knots[ 0 ] + t * ( this.knots[ this.knots.length - 1 ] - this.knots[ 0 ] );\n\t\tconst ders = NURBSUtils.calcNURBSDerivatives( this.degree, this.knots, this.controlPoints, u, 1 );\n\t\ttangent.copy( ders[ 1 ] ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.degree = this.degree;\n\t\tdata.knots = [ ...this.knots ];\n\t\tdata.controlPoints = this.controlPoints.map( p => p.toArray() );\n\t\tdata.startKnot = this.startKnot;\n\t\tdata.endKnot = this.endKnot;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.degree = json.degree;\n\t\tthis.knots = [ ...json.knots ];\n\t\tthis.controlPoints = json.controlPoints.map( p => new Vector4( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ] ) );\n\t\tthis.startKnot = json.startKnot;\n\t\tthis.endKnot = json.endKnot;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { NURBSCurve };","import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix3,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tPerspectiveCamera,\n\tPointLight,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSRGBColorSpace,\n\tShapeUtils,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4,\n\tVectorKeyframeTrack\n} from 'three';\n\nimport * as fflate from '../libs/fflate.module.js';\nimport { NURBSCurve } from '../curves/NURBSCurve.js';\n\n/**\n * Loader loads FBX file and generates Group representing FBX scene.\n * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format\n * Versions lower than this may load but will probably have errors\n *\n * Needs Support:\n * Morph normals / blend shape normals\n *\n * FBX format references:\n * \thttps://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)\n *\n * Binary format specification:\n *\thttps://code.blender.org/2013/08/fbx-binary-file-format-specification/\n */\n\n\nlet fbxTree;\nlet connections;\nlet sceneGraph;\n\nclass FBXLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( FBXBuffer, path ) {\n\n\t\tif ( isFbxFormatBinary( FBXBuffer ) ) {\n\n\t\t\tfbxTree = new BinaryParser().parse( FBXBuffer );\n\n\t\t} else {\n\n\t\t\tconst FBXText = convertArrayBufferToString( FBXBuffer );\n\n\t\t\tif ( ! isFbxFormatASCII( FBXText ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown format.' );\n\n\t\t\t}\n\n\t\t\tif ( getFbxVersion( FBXText ) < 7000 ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) );\n\n\t\t\t}\n\n\t\t\tfbxTree = new TextParser().parse( FBXText );\n\n\t\t}\n\n\t\t// console.log( fbxTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree );\n\n\t}\n\n}\n\n// Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group\nclass FBXTreeParser {\n\n\tconstructor( textureLoader, manager ) {\n\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse() {\n\n\t\tconnections = this.parseConnections();\n\n\t\tconst images = this.parseImages();\n\t\tconst textures = this.parseTextures( images );\n\t\tconst materials = this.parseMaterials( textures );\n\t\tconst deformers = this.parseDeformers();\n\t\tconst geometryMap = new GeometryParser().parse( deformers );\n\n\t\tthis.parseScene( deformers, geometryMap, materials );\n\n\t\treturn sceneGraph;\n\n\t}\n\n\t// Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n\t// and details the connection type\n\tparseConnections() {\n\n\t\tconst connectionMap = new Map();\n\n\t\tif ( 'Connections' in fbxTree ) {\n\n\t\t\tconst rawConnections = fbxTree.Connections.connections;\n\n\t\t\trawConnections.forEach( function ( rawConnection ) {\n\n\t\t\t\tconst fromID = rawConnection[ 0 ];\n\t\t\t\tconst toID = rawConnection[ 1 ];\n\t\t\t\tconst relationship = rawConnection[ 2 ];\n\n\t\t\t\tif ( ! connectionMap.has( fromID ) ) {\n\n\t\t\t\t\tconnectionMap.set( fromID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst parentRelationship = { ID: toID, relationship: relationship };\n\t\t\t\tconnectionMap.get( fromID ).parents.push( parentRelationship );\n\n\t\t\t\tif ( ! connectionMap.has( toID ) ) {\n\n\t\t\t\t\tconnectionMap.set( toID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst childRelationship = { ID: fromID, relationship: relationship };\n\t\t\t\tconnectionMap.get( toID ).children.push( childRelationship );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn connectionMap;\n\n\t}\n\n\t// Parse FBXTree.Objects.Video for embedded image data\n\t// These images are connected to textures in FBXTree.Objects.Textures\n\t// via FBXTree.Connections.\n\tparseImages() {\n\n\t\tconst images = {};\n\t\tconst blobs = {};\n\n\t\tif ( 'Video' in fbxTree.Objects ) {\n\n\t\t\tconst videoNodes = fbxTree.Objects.Video;\n\n\t\t\tfor ( const nodeID in videoNodes ) {\n\n\t\t\t\tconst videoNode = videoNodes[ nodeID ];\n\n\t\t\t\tconst id = parseInt( nodeID );\n\n\t\t\t\timages[ id ] = videoNode.RelativeFilename || videoNode.Filename;\n\n\t\t\t\t// raw image data is in videoNode.Content\n\t\t\t\tif ( 'Content' in videoNode ) {\n\n\t\t\t\t\tconst arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 );\n\t\t\t\t\tconst base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' );\n\n\t\t\t\t\tif ( arrayBufferContent || base64Content ) {\n\n\t\t\t\t\t\tconst image = this.parseImage( videoNodes[ nodeID ] );\n\n\t\t\t\t\t\tblobs[ videoNode.RelativeFilename || videoNode.Filename ] = image;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const id in images ) {\n\n\t\t\tconst filename = images[ id ];\n\n\t\t\tif ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ];\n\t\t\telse images[ id ] = images[ id ].split( '\\\\' ).pop();\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\t// Parse embedded image data in FBXTree.Video.Content\n\tparseImage( videoNode ) {\n\n\t\tconst content = videoNode.Content;\n\t\tconst fileName = videoNode.RelativeFilename || videoNode.Filename;\n\t\tconst extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase();\n\n\t\tlet type;\n\n\t\tswitch ( extension ) {\n\n\t\t\tcase 'bmp':\n\n\t\t\t\ttype = 'image/bmp';\n\t\t\t\tbreak;\n\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\n\t\t\t\ttype = 'image/jpeg';\n\t\t\t\tbreak;\n\n\t\t\tcase 'png':\n\n\t\t\t\ttype = 'image/png';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tif':\n\n\t\t\t\ttype = 'image/tiff';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tga':\n\n\t\t\t\tif ( this.manager.getHandler( '.tga' ) === null ) {\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, skipping ', fileName );\n\n\t\t\t\t}\n\n\t\t\t\ttype = 'image/tga';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'FBXLoader: Image type \"' + extension + '\" is not supported.' );\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof content === 'string' ) { // ASCII format\n\n\t\t\treturn 'data:' + type + ';base64,' + content;\n\n\t\t} else { // Binary Format\n\n\t\t\tconst array = new Uint8Array( content );\n\t\t\treturn window.URL.createObjectURL( new Blob( [ array ], { type: type } ) );\n\n\t\t}\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Texture\n\t// These contain details such as UV scaling, cropping, rotation etc and are connected\n\t// to images in FBXTree.Objects.Video\n\tparseTextures( images ) {\n\n\t\tconst textureMap = new Map();\n\n\t\tif ( 'Texture' in fbxTree.Objects ) {\n\n\t\t\tconst textureNodes = fbxTree.Objects.Texture;\n\t\t\tfor ( const nodeID in textureNodes ) {\n\n\t\t\t\tconst texture = this.parseTexture( textureNodes[ nodeID ], images );\n\t\t\t\ttextureMap.set( parseInt( nodeID ), texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textureMap;\n\n\t}\n\n\t// Parse individual node in FBXTree.Objects.Texture\n\tparseTexture( textureNode, images ) {\n\n\t\tconst texture = this.loadTexture( textureNode, images );\n\n\t\ttexture.ID = textureNode.id;\n\n\t\ttexture.name = textureNode.attrName;\n\n\t\tconst wrapModeU = textureNode.WrapModeU;\n\t\tconst wrapModeV = textureNode.WrapModeV;\n\n\t\tconst valueU = wrapModeU !== undefined ? wrapModeU.value : 0;\n\t\tconst valueV = wrapModeV !== undefined ? wrapModeV.value : 0;\n\n\t\t// http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a\n\t\t// 0: repeat(default), 1: clamp\n\n\t\ttexture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\ttexture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\tif ( 'Scaling' in textureNode ) {\n\n\t\t\tconst values = textureNode.Scaling.value;\n\n\t\t\ttexture.repeat.x = values[ 0 ];\n\t\t\ttexture.repeat.y = values[ 1 ];\n\n\t\t}\n\n\t\tif ( 'Translation' in textureNode ) {\n\n\t\t\tconst values = textureNode.Translation.value;\n\n\t\t\ttexture.offset.x = values[ 0 ];\n\t\t\ttexture.offset.y = values[ 1 ];\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t// load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n\tloadTexture( textureNode, images ) {\n\n\t\tconst nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );\n\n\t\tconst extension = textureNode.FileName.split( '.' ).pop().toLowerCase();\n\n\t\tconst loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t`FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,\n\t\t\t\ttextureNode.RelativeFilename\n\t\t\t);\n\t\t\treturn new Texture();\n\n\t\t}\n\n\t\tconst loaderPath = loader.path;\n\n\t\tif ( ! loaderPath ) {\n\n\t\t\tloader.setPath( this.textureLoader.path );\n\n\t\t}\n\n\t\tconst children = connections.get( textureNode.id ).children;\n\n\t\tlet fileName;\n\n\t\tif ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {\n\n\t\t\tfileName = images[ children[ 0 ].ID ];\n\n\t\t\tif ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {\n\n\t\t\t\tloader.setPath( undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst texture = loader.load( fileName );\n\n\t\t// revert to initial path\n\t\tloader.setPath( loaderPath );\n\n\t\treturn texture;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Material\n\tparseMaterials( textureMap ) {\n\n\t\tconst materialMap = new Map();\n\n\t\tif ( 'Material' in fbxTree.Objects ) {\n\n\t\t\tconst materialNodes = fbxTree.Objects.Material;\n\n\t\t\tfor ( const nodeID in materialNodes ) {\n\n\t\t\t\tconst material = this.parseMaterial( materialNodes[ nodeID ], textureMap );\n\n\t\t\t\tif ( material !== null ) materialMap.set( parseInt( nodeID ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materialMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Material\n\t// Materials are connected to texture maps in FBXTree.Objects.Textures\n\t// FBX format currently only supports Lambert and Phong shading models\n\tparseMaterial( materialNode, textureMap ) {\n\n\t\tconst ID = materialNode.id;\n\t\tconst name = materialNode.attrName;\n\t\tlet type = materialNode.ShadingModel;\n\n\t\t// Case where FBX wraps shading model in property object.\n\t\tif ( typeof type === 'object' ) {\n\n\t\t\ttype = type.value;\n\n\t\t}\n\n\t\t// Ignore unused materials which don't have any connections.\n\t\tif ( ! connections.has( ID ) ) return null;\n\n\t\tconst parameters = this.parseParameters( materialNode, textureMap, ID );\n\n\t\tlet material;\n\n\t\tswitch ( type.toLowerCase() ) {\n\n\t\t\tcase 'phong':\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\t\t\tcase 'lambert':\n\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type );\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.setValues( parameters );\n\t\tmaterial.name = name;\n\n\t\treturn material;\n\n\t}\n\n\t// Parse FBX material and return parameters suitable for a three.js material\n\t// Also parse the texture map and return any textures associated with the material\n\tparseParameters( materialNode, textureMap, ID ) {\n\n\t\tconst parameters = {};\n\n\t\tif ( materialNode.BumpFactor ) {\n\n\t\t\tparameters.bumpScale = materialNode.BumpFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Diffuse ) {\n\n\t\t\tparameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports diffuse here instead of in materialNode.Diffuse\n\t\t\tparameters.color = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialNode.DisplacementFactor ) {\n\n\t\t\tparameters.displacementScale = materialNode.DisplacementFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Emissive ) {\n\n\t\t\tparameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports emissive color here instead of in materialNode.Emissive\n\t\t\tparameters.emissive = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialNode.EmissiveFactor ) {\n\n\t\t\tparameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value );\n\n\t\t}\n\n\t\t// the transparency handling is implemented based on Blender/Unity's approach: https://github.com/sobotka/blender-addons/blob/7d80f2f97161fc8e353a657b179b9aa1f8e5280b/io_scene_fbx/import_fbx.py#L1444-L1459\n\n\t\tparameters.opacity = 1 - ( materialNode.TransparencyFactor ? parseFloat( materialNode.TransparencyFactor.value ) : 0 );\n\n\t\tif ( parameters.opacity === 1 || parameters.opacity === 0 ) {\n\n\t\t\tparameters.opacity = ( materialNode.Opacity ? parseFloat( materialNode.Opacity.value ) : null );\n\n\t\t\tif ( parameters.opacity === null ) {\n\n\t\t\t\tparameters.opacity = 1 - ( materialNode.TransparentColor ? parseFloat( materialNode.TransparentColor.value[ 0 ] ) : 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.opacity < 1.0 ) {\n\n\t\t\tparameters.transparent = true;\n\n\t\t}\n\n\t\tif ( materialNode.ReflectionFactor ) {\n\n\t\t\tparameters.reflectivity = materialNode.ReflectionFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Shininess ) {\n\n\t\t\tparameters.shininess = materialNode.Shininess.value;\n\n\t\t}\n\n\t\tif ( materialNode.Specular ) {\n\n\t\t\tparameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {\n\n\t\t\t// The blender exporter exports specular color here instead of in materialNode.Specular\n\t\t\tparameters.specular = ColorManagement.toWorkingColorSpace( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tconst scope = this;\n\t\tconnections.get( ID ).children.forEach( function ( child ) {\n\n\t\t\tconst type = child.relationship;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tparameters.bumpMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Maya|TEX_ao_map':\n\t\t\t\t\tparameters.aoMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DiffuseColor':\n\t\t\t\tcase 'Maya|TEX_color_map':\n\t\t\t\t\tparameters.map = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.map !== undefined ) {\n\n\t\t\t\t\t\tparameters.map.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DisplacementColor':\n\t\t\t\t\tparameters.displacementMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EmissiveColor':\n\t\t\t\t\tparameters.emissiveMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.emissiveMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.emissiveMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'NormalMap':\n\t\t\t\tcase 'Maya|TEX_normal_map':\n\t\t\t\t\tparameters.normalMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ReflectionColor':\n\t\t\t\t\tparameters.envMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.envMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.envMap.mapping = EquirectangularReflectionMapping;\n\t\t\t\t\t\tparameters.envMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpecularColor':\n\t\t\t\t\tparameters.specularMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.specularMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.specularMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TransparentColor':\n\t\t\t\tcase 'TransparencyFactor':\n\t\t\t\t\tparameters.alphaMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tparameters.transparent = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientColor':\n\t\t\t\tcase 'ShininessExponent': // AKA glossiness map\n\t\t\t\tcase 'SpecularFactor': // AKA specularLevel\n\t\t\t\tcase 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn parameters;\n\n\t}\n\n\t// get a texture from the textureMap for use by a material.\n\tgetTexture( textureMap, id ) {\n\n\t\t// if the texture is a layered texture, just use the first layer and issue a warning\n\t\tif ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );\n\t\t\tid = connections.get( id ).children[ 0 ].ID;\n\n\t\t}\n\n\t\treturn textureMap.get( id );\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Deformer\n\t// Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n\t// Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n\tparseDeformers() {\n\n\t\tconst skeletons = {};\n\t\tconst morphTargets = {};\n\n\t\tif ( 'Deformer' in fbxTree.Objects ) {\n\n\t\t\tconst DeformerNodes = fbxTree.Objects.Deformer;\n\n\t\t\tfor ( const nodeID in DeformerNodes ) {\n\n\t\t\t\tconst deformerNode = DeformerNodes[ nodeID ];\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\n\t\t\t\tif ( deformerNode.attrType === 'Skin' ) {\n\n\t\t\t\t\tconst skeleton = this.parseSkeleton( relationships, DeformerNodes );\n\t\t\t\t\tskeleton.ID = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' );\n\t\t\t\t\tskeleton.geometryID = relationships.parents[ 0 ].ID;\n\n\t\t\t\t\tskeletons[ nodeID ] = skeleton;\n\n\t\t\t\t} else if ( deformerNode.attrType === 'BlendShape' ) {\n\n\t\t\t\t\tconst morphTarget = {\n\t\t\t\t\t\tid: nodeID,\n\t\t\t\t\t};\n\n\t\t\t\t\tmorphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes );\n\t\t\t\t\tmorphTarget.id = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );\n\n\t\t\t\t\tmorphTargets[ nodeID ] = morphTarget;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tskeletons: skeletons,\n\t\t\tmorphTargets: morphTargets,\n\n\t\t};\n\n\t}\n\n\t// Parse single nodes in FBXTree.Objects.Deformer\n\t// The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n\t// Each skin node represents a skeleton and each cluster node represents a bone\n\tparseSkeleton( relationships, deformerNodes ) {\n\n\t\tconst rawBones = [];\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst boneNode = deformerNodes[ child.ID ];\n\n\t\t\tif ( boneNode.attrType !== 'Cluster' ) return;\n\n\t\t\tconst rawBone = {\n\n\t\t\t\tID: child.ID,\n\t\t\t\tindices: [],\n\t\t\t\tweights: [],\n\t\t\t\ttransformLink: new Matrix4().fromArray( boneNode.TransformLink.a ),\n\t\t\t\t// transform: new Matrix4().fromArray( boneNode.Transform.a ),\n\t\t\t\t// linkMode: boneNode.Mode,\n\n\t\t\t};\n\n\t\t\tif ( 'Indexes' in boneNode ) {\n\n\t\t\t\trawBone.indices = boneNode.Indexes.a;\n\t\t\t\trawBone.weights = boneNode.Weights.a;\n\n\t\t\t}\n\n\t\t\trawBones.push( rawBone );\n\n\t\t} );\n\n\t\treturn {\n\n\t\t\trawBones: rawBones,\n\t\t\tbones: []\n\n\t\t};\n\n\t}\n\n\t// The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n\tparseMorphTargets( relationships, deformerNodes ) {\n\n\t\tconst rawMorphTargets = [];\n\n\t\tfor ( let i = 0; i < relationships.children.length; i ++ ) {\n\n\t\t\tconst child = relationships.children[ i ];\n\n\t\t\tconst morphTargetNode = deformerNodes[ child.ID ];\n\n\t\t\tconst rawMorphTarget = {\n\n\t\t\t\tname: morphTargetNode.attrName,\n\t\t\t\tinitialWeight: morphTargetNode.DeformPercent,\n\t\t\t\tid: morphTargetNode.id,\n\t\t\t\tfullWeights: morphTargetNode.FullWeights.a\n\n\t\t\t};\n\n\t\t\tif ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return;\n\n\t\t\trawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) {\n\n\t\t\t\treturn child.relationship === undefined;\n\n\t\t\t} )[ 0 ].ID;\n\n\t\t\trawMorphTargets.push( rawMorphTarget );\n\n\t\t}\n\n\t\treturn rawMorphTargets;\n\n\t}\n\n\t// create the main Group() to be returned by the loader\n\tparseScene( deformers, geometryMap, materialMap ) {\n\n\t\tsceneGraph = new Group();\n\n\t\tconst modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );\n\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tconst scope = this;\n\t\tmodelMap.forEach( function ( model ) {\n\n\t\t\tconst modelNode = modelNodes[ model.ID ];\n\t\t\tscope.setLookAtProperties( model, modelNode );\n\n\t\t\tconst parentConnections = connections.get( model.ID ).parents;\n\n\t\t\tparentConnections.forEach( function ( connection ) {\n\n\t\t\t\tconst parent = modelMap.get( connection.ID );\n\t\t\t\tif ( parent !== undefined ) parent.add( model );\n\n\t\t\t} );\n\n\t\t\tif ( model.parent === null ) {\n\n\t\t\t\tsceneGraph.add( model );\n\n\t\t\t}\n\n\n\t\t} );\n\n\t\tthis.bindSkeleton( deformers.skeletons, geometryMap, modelMap );\n\n\t\tthis.addGlobalSceneSettings();\n\n\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\tif ( node.userData.transformData ) {\n\n\t\t\t\tif ( node.parent ) {\n\n\t\t\t\t\tnode.userData.transformData.parentMatrix = node.parent.matrix;\n\t\t\t\t\tnode.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n\n\t\t\t\t}\n\n\t\t\t\tconst transform = generateTransform( node.userData.transformData );\n\n\t\t\t\tnode.applyMatrix4( transform );\n\t\t\t\tnode.updateWorldMatrix();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst animations = new AnimationParser().parse();\n\n\t\t// if all the models where already combined in a single group, just return that\n\t\tif ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) {\n\n\t\t\tsceneGraph.children[ 0 ].animations = animations;\n\t\t\tsceneGraph = sceneGraph.children[ 0 ];\n\n\t\t}\n\n\t\tsceneGraph.animations = animations;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.Model\n\tparseModels( skeletons, geometryMap, materialMap ) {\n\n\t\tconst modelMap = new Map();\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tfor ( const nodeID in modelNodes ) {\n\n\t\t\tconst id = parseInt( nodeID );\n\t\t\tconst node = modelNodes[ nodeID ];\n\t\t\tconst relationships = connections.get( id );\n\n\t\t\tlet model = this.buildSkeleton( relationships, skeletons, id, node.attrName );\n\n\t\t\tif ( ! model ) {\n\n\t\t\t\tswitch ( node.attrType ) {\n\n\t\t\t\t\tcase 'Camera':\n\t\t\t\t\t\tmodel = this.createCamera( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Light':\n\t\t\t\t\t\tmodel = this.createLight( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\tmodel = this.createMesh( relationships, geometryMap, materialMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\t\tmodel = this.createCurve( relationships, geometryMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'LimbNode':\n\t\t\t\t\tcase 'Root':\n\t\t\t\t\t\tmodel = new Bone();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Null':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmodel = new Group();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmodel.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';\n\t\t\t\tmodel.userData.originalName = node.attrName;\n\n\t\t\t\tmodel.ID = id;\n\n\t\t\t}\n\n\t\t\tthis.getTransformData( model, node );\n\t\t\tmodelMap.set( id, model );\n\n\t\t}\n\n\t\treturn modelMap;\n\n\t}\n\n\tbuildSkeleton( relationships, skeletons, id, name ) {\n\n\t\tlet bone = null;\n\n\t\trelationships.parents.forEach( function ( parent ) {\n\n\t\t\tfor ( const ID in skeletons ) {\n\n\t\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\tif ( rawBone.ID === parent.ID ) {\n\n\t\t\t\t\t\tconst subBone = bone;\n\t\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t\t\tbone.matrixWorld.copy( rawBone.transformLink );\n\n\t\t\t\t\t\t// set name and id here - otherwise in cases where \"subBone\" is created it will not have a name / id\n\n\t\t\t\t\t\tbone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';\n\t\t\t\t\t\tbone.userData.originalName = name;\n\t\t\t\t\t\tbone.ID = id;\n\n\t\t\t\t\t\tskeleton.bones[ i ] = bone;\n\n\t\t\t\t\t\t// In cases where a bone is shared between multiple meshes\n\t\t\t\t\t\t// duplicate the bone here and and it as a child of the first bone\n\t\t\t\t\t\tif ( subBone !== null ) {\n\n\t\t\t\t\t\t\tbone.add( subBone );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn bone;\n\n\t}\n\n\t// create a PerspectiveCamera or OrthographicCamera\n\tcreateCamera( relationships ) {\n\n\t\tlet model;\n\t\tlet cameraAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tcameraAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( cameraAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type = 0;\n\t\t\tif ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) {\n\n\t\t\t\ttype = 1;\n\n\t\t\t}\n\n\t\t\tlet nearClippingPlane = 1;\n\t\t\tif ( cameraAttribute.NearPlane !== undefined ) {\n\n\t\t\t\tnearClippingPlane = cameraAttribute.NearPlane.value / 1000;\n\n\t\t\t}\n\n\t\t\tlet farClippingPlane = 1000;\n\t\t\tif ( cameraAttribute.FarPlane !== undefined ) {\n\n\t\t\t\tfarClippingPlane = cameraAttribute.FarPlane.value / 1000;\n\n\t\t\t}\n\n\n\t\t\tlet width = window.innerWidth;\n\t\t\tlet height = window.innerHeight;\n\n\t\t\tif ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) {\n\n\t\t\t\twidth = cameraAttribute.AspectWidth.value;\n\t\t\t\theight = cameraAttribute.AspectHeight.value;\n\n\t\t\t}\n\n\t\t\tconst aspect = width / height;\n\n\t\t\tlet fov = 45;\n\t\t\tif ( cameraAttribute.FieldOfView !== undefined ) {\n\n\t\t\t\tfov = cameraAttribute.FieldOfView.value;\n\n\t\t\t}\n\n\t\t\tconst focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Perspective\n\t\t\t\t\tmodel = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tif ( focalLength !== null ) model.setFocalLength( focalLength );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Orthographic\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Orthographic cameras not supported yet.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\t// Create a DirectionalLight, PointLight or SpotLight\n\tcreateLight( relationships ) {\n\n\t\tlet model;\n\t\tlet lightAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tlightAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( lightAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type;\n\n\t\t\t// LightType can be undefined for Point lights\n\t\t\tif ( lightAttribute.LightType === undefined ) {\n\n\t\t\t\ttype = 0;\n\n\t\t\t} else {\n\n\t\t\t\ttype = lightAttribute.LightType.value;\n\n\t\t\t}\n\n\t\t\tlet color = 0xffffff;\n\n\t\t\tif ( lightAttribute.Color !== undefined ) {\n\n\t\t\t\tcolor = ColorManagement.toWorkingColorSpace( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );\n\n\t\t\t}\n\n\t\t\tlet intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100;\n\n\t\t\t// light disabled\n\t\t\tif ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) {\n\n\t\t\t\tintensity = 0;\n\n\t\t\t}\n\n\t\t\tlet distance = 0;\n\t\t\tif ( lightAttribute.FarAttenuationEnd !== undefined ) {\n\n\t\t\t\tif ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) {\n\n\t\t\t\t\tdistance = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdistance = lightAttribute.FarAttenuationEnd.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?\n\t\t\tconst decay = 1;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Point\n\t\t\t\t\tmodel = new PointLight( color, intensity, distance, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Directional\n\t\t\t\t\tmodel = new DirectionalLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // Spot\n\t\t\t\t\tlet angle = Math.PI / 3;\n\n\t\t\t\t\tif ( lightAttribute.InnerAngle !== undefined ) {\n\n\t\t\t\t\t\tangle = MathUtils.degToRad( lightAttribute.InnerAngle.value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet penumbra = 0;\n\t\t\t\t\tif ( lightAttribute.OuterAngle !== undefined ) {\n\n\t\t\t\t\t\t// TODO: this is not correct - FBX calculates outer and inner angle in degrees\n\t\t\t\t\t\t// with OuterAngle > InnerAngle && OuterAngle <= Math.PI\n\t\t\t\t\t\t// while three.js uses a penumbra between (0, 1) to attenuate the inner angle\n\t\t\t\t\t\tpenumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );\n\t\t\t\t\t\tpenumbra = Math.max( penumbra, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = new SpotLight( color, intensity, distance, angle, penumbra, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' );\n\t\t\t\t\tmodel = new PointLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) {\n\n\t\t\t\tmodel.castShadow = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateMesh( relationships, geometryMap, materialMap ) {\n\n\t\tlet model;\n\t\tlet geometry = null;\n\t\tlet material = null;\n\t\tconst materials = [];\n\n\t\t// get geometry and materials(s) from connections\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) {\n\n\t\t\t\tgeometry = geometryMap.get( child.ID );\n\n\t\t\t}\n\n\t\t\tif ( materialMap.has( child.ID ) ) {\n\n\t\t\t\tmaterials.push( materialMap.get( child.ID ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( materials.length > 1 ) {\n\n\t\t\tmaterial = materials;\n\n\t\t} else if ( materials.length > 0 ) {\n\n\t\t\tmaterial = materials[ 0 ];\n\n\t\t} else {\n\n\t\t\tmaterial = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xcccccc\n\t\t\t} );\n\t\t\tmaterials.push( material );\n\n\t\t}\n\n\t\tif ( 'color' in geometry.attributes ) {\n\n\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( geometry.FBX_Deformer ) {\n\n\t\t\tmodel = new SkinnedMesh( geometry, material );\n\t\t\tmodel.normalizeSkinWeights();\n\n\t\t} else {\n\n\t\t\tmodel = new Mesh( geometry, material );\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateCurve( relationships, geometryMap ) {\n\n\t\tconst geometry = relationships.children.reduce( function ( geo, child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID );\n\n\t\t\treturn geo;\n\n\t\t}, null );\n\n\t\t// FBX does not list materials for Nurbs lines, so we'll just put our own in here.\n\t\tconst material = new LineBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0x3300ff,\n\t\t\tlinewidth: 1\n\t\t} );\n\t\treturn new Line( geometry, material );\n\n\t}\n\n\t// parse the model node for transform data\n\tgetTransformData( model, modelNode ) {\n\n\t\tconst transformData = {};\n\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\telse transformData.eulerOrder = getEulerOrder( 0 );\n\n\t\tif ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;\n\n\t\tif ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value;\n\t\tif ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value;\n\t\tif ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value;\n\n\t\tif ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value;\n\n\t\tif ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value;\n\t\tif ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value;\n\n\t\tif ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value;\n\t\tif ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value;\n\n\t\tmodel.userData.transformData = transformData;\n\n\t}\n\n\tsetLookAtProperties( model, modelNode ) {\n\n\t\tif ( 'LookAtProperty' in modelNode ) {\n\n\t\t\tconst children = connections.get( model.ID ).children;\n\n\t\t\tchildren.forEach( function ( child ) {\n\n\t\t\t\tif ( child.relationship === 'LookAtProperty' ) {\n\n\t\t\t\t\tconst lookAtTarget = fbxTree.Objects.Model[ child.ID ];\n\n\t\t\t\t\tif ( 'Lcl_Translation' in lookAtTarget ) {\n\n\t\t\t\t\t\tconst pos = lookAtTarget.Lcl_Translation.value;\n\n\t\t\t\t\t\t// DirectionalLight, SpotLight\n\t\t\t\t\t\tif ( model.target !== undefined ) {\n\n\t\t\t\t\t\t\tmodel.target.position.fromArray( pos );\n\t\t\t\t\t\t\tsceneGraph.add( model.target );\n\n\t\t\t\t\t\t} else { // Cameras and other Object3Ds\n\n\t\t\t\t\t\t\tmodel.lookAt( new Vector3().fromArray( pos ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tbindSkeleton( skeletons, geometryMap, modelMap ) {\n\n\t\tconst bindMatrices = this.parsePoseNodes();\n\n\t\tfor ( const ID in skeletons ) {\n\n\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\tconst parents = connections.get( parseInt( skeleton.ID ) ).parents;\n\n\t\t\tparents.forEach( function ( parent ) {\n\n\t\t\t\tif ( geometryMap.has( parent.ID ) ) {\n\n\t\t\t\t\tconst geoID = parent.ID;\n\t\t\t\t\tconst geoRelationships = connections.get( geoID );\n\n\t\t\t\t\tgeoRelationships.parents.forEach( function ( geoConnParent ) {\n\n\t\t\t\t\t\tif ( modelMap.has( geoConnParent.ID ) ) {\n\n\t\t\t\t\t\t\tconst model = modelMap.get( geoConnParent.ID );\n\n\t\t\t\t\t\t\tmodel.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tparsePoseNodes() {\n\n\t\tconst bindMatrices = {};\n\n\t\tif ( 'Pose' in fbxTree.Objects ) {\n\n\t\t\tconst BindPoseNode = fbxTree.Objects.Pose;\n\n\t\t\tfor ( const nodeID in BindPoseNode ) {\n\n\t\t\t\tif ( BindPoseNode[ nodeID ].attrType === 'BindPose' && BindPoseNode[ nodeID ].NbPoseNodes > 0 ) {\n\n\t\t\t\t\tconst poseNodes = BindPoseNode[ nodeID ].PoseNode;\n\n\t\t\t\t\tif ( Array.isArray( poseNodes ) ) {\n\n\t\t\t\t\t\tposeNodes.forEach( function ( poseNode ) {\n\n\t\t\t\t\t\t\tbindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindMatrices;\n\n\t}\n\n\taddGlobalSceneSettings() {\n\n\t\tif ( 'GlobalSettings' in fbxTree ) {\n\n\t\t\tif ( 'AmbientColor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\t// Parse ambient color - if it's not set to black (default), create an ambient light\n\n\t\t\t\tconst ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n\t\t\t\tconst r = ambientColor[ 0 ];\n\t\t\t\tconst g = ambientColor[ 1 ];\n\t\t\t\tconst b = ambientColor[ 2 ];\n\n\t\t\t\tif ( r !== 0 || g !== 0 || b !== 0 ) {\n\n\t\t\t\t\tconst color = new Color().setRGB( r, g, b, SRGBColorSpace );\n\t\t\t\t\tsceneGraph.add( new AmbientLight( color, 1 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( 'UnitScaleFactor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\tsceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// parse Geometry data from FBXTree and return map of BufferGeometries\nclass GeometryParser {\n\n\tconstructor() {\n\n\t\tthis.negativeMaterialIndices = false;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Geometry\n\tparse( deformers ) {\n\n\t\tconst geometryMap = new Map();\n\n\t\tif ( 'Geometry' in fbxTree.Objects ) {\n\n\t\t\tconst geoNodes = fbxTree.Objects.Geometry;\n\n\t\t\tfor ( const nodeID in geoNodes ) {\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\t\t\t\tconst geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers );\n\n\t\t\t\tgeometryMap.set( parseInt( nodeID ), geo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// report warnings\n\n\t\tif ( this.negativeMaterialIndices === true ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.' );\n\n\t\t}\n\n\t\treturn geometryMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Geometry\n\tparseGeometry( relationships, geoNode, deformers ) {\n\n\t\tswitch ( geoNode.attrType ) {\n\n\t\t\tcase 'Mesh':\n\t\t\t\treturn this.parseMeshGeometry( relationships, geoNode, deformers );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NurbsCurve':\n\t\t\t\treturn this.parseNurbsGeometry( geoNode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// Parse single node mesh geometry in FBXTree.Objects.Geometry\n\tparseMeshGeometry( relationships, geoNode, deformers ) {\n\n\t\tconst skeletons = deformers.skeletons;\n\t\tconst morphTargets = [];\n\n\t\tconst modelNodes = relationships.parents.map( function ( parent ) {\n\n\t\t\treturn fbxTree.Objects.Model[ parent.ID ];\n\n\t\t} );\n\n\t\t// don't create geometry if it is not associated with any models\n\t\tif ( modelNodes.length === 0 ) return;\n\n\t\tconst skeleton = relationships.children.reduce( function ( skeleton, child ) {\n\n\t\t\tif ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ];\n\n\t\t\treturn skeleton;\n\n\t\t}, null );\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( deformers.morphTargets[ child.ID ] !== undefined ) {\n\n\t\t\t\tmorphTargets.push( deformers.morphTargets[ child.ID ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Assume one model and get the preRotation from that\n\t\t// if there is more than one model associated with the geometry this may cause problems\n\t\tconst modelNode = modelNodes[ 0 ];\n\n\t\tconst transformData = {};\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value;\n\t\tif ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value;\n\t\tif ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value;\n\n\t\tconst transform = generateTransform( transformData );\n\n\t\treturn this.genGeometry( geoNode, skeleton, morphTargets, transform );\n\n\t}\n\n\t// Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n\tgenGeometry( geoNode, skeleton, morphTargets, preTransform ) {\n\n\t\tconst geo = new BufferGeometry();\n\t\tif ( geoNode.attrName ) geo.name = geoNode.attrName;\n\n\t\tconst geoInfo = this.parseGeoNode( geoNode, skeleton );\n\t\tconst buffers = this.genBuffers( geoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 );\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tgeo.setAttribute( 'position', positionAttribute );\n\n\t\tif ( buffers.colors.length > 0 ) {\n\n\t\t\tgeo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) );\n\n\t\t}\n\n\t\tif ( skeleton ) {\n\n\t\t\tgeo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) );\n\n\t\t\tgeo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) );\n\n\t\t\t// used later to bind the skeleton to the model\n\t\t\tgeo.FBX_Deformer = skeleton;\n\n\t\t}\n\n\t\tif ( buffers.normal.length > 0 ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( preTransform );\n\n\t\t\tconst normalAttribute = new Float32BufferAttribute( buffers.normal, 3 );\n\t\t\tnormalAttribute.applyNormalMatrix( normalMatrix );\n\n\t\t\tgeo.setAttribute( 'normal', normalAttribute );\n\n\t\t}\n\n\t\tbuffers.uvs.forEach( function ( uvBuffer, i ) {\n\n\t\t\tconst name = i === 0 ? 'uv' : `uv${ i }`;\n\n\t\t\tgeo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) );\n\n\t\t} );\n\n\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t// Convert the material indices of each vertex into rendering groups on the geometry.\n\t\t\tlet prevMaterialIndex = buffers.materialIndex[ 0 ];\n\t\t\tlet startIndex = 0;\n\n\t\t\tbuffers.materialIndex.forEach( function ( currentIndex, i ) {\n\n\t\t\t\tif ( currentIndex !== prevMaterialIndex ) {\n\n\t\t\t\t\tgeo.addGroup( startIndex, i - startIndex, prevMaterialIndex );\n\n\t\t\t\t\tprevMaterialIndex = currentIndex;\n\t\t\t\t\tstartIndex = i;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// the loop above doesn't add the last group, do that here.\n\t\t\tif ( geo.groups.length > 0 ) {\n\n\t\t\t\tconst lastGroup = geo.groups[ geo.groups.length - 1 ];\n\t\t\t\tconst lastIndex = lastGroup.start + lastGroup.count;\n\n\t\t\t\tif ( lastIndex !== buffers.materialIndex.length ) {\n\n\t\t\t\t\tgeo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// case where there are multiple materials but the whole geometry is only\n\t\t\t// using one of them\n\t\t\tif ( geo.groups.length === 0 ) {\n\n\t\t\t\tgeo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.addMorphTargets( geo, geoNode, morphTargets, preTransform );\n\n\t\treturn geo;\n\n\t}\n\n\tparseGeoNode( geoNode, skeleton ) {\n\n\t\tconst geoInfo = {};\n\n\t\tgeoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];\n\t\tgeoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];\n\n\t\tif ( geoNode.LayerElementColor ) {\n\n\t\t\tgeoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementMaterial ) {\n\n\t\t\tgeoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementNormal ) {\n\n\t\t\tgeoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementUV ) {\n\n\t\t\tgeoInfo.uv = [];\n\n\t\t\tlet i = 0;\n\t\t\twhile ( geoNode.LayerElementUV[ i ] ) {\n\n\t\t\t\tif ( geoNode.LayerElementUV[ i ].UV ) {\n\n\t\t\t\t\tgeoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeoInfo.weightTable = {};\n\n\t\tif ( skeleton !== null ) {\n\n\t\t\tgeoInfo.skeleton = skeleton;\n\n\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t// loop over the bone's vertex indices and weights\n\t\t\t\trawBone.indices.forEach( function ( index, j ) {\n\n\t\t\t\t\tif ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = [];\n\n\t\t\t\t\tgeoInfo.weightTable[ index ].push( {\n\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tweight: rawBone.weights[ j ],\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn geoInfo;\n\n\t}\n\n\tgenBuffers( geoInfo ) {\n\n\t\tconst buffers = {\n\t\t\tvertex: [],\n\t\t\tnormal: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\t\t\tmaterialIndex: [],\n\t\t\tvertexWeights: [],\n\t\t\tweightsIndices: [],\n\t\t};\n\n\t\tlet polygonIndex = 0;\n\t\tlet faceLength = 0;\n\t\tlet displayedWeightsWarning = false;\n\n\t\t// these will hold data for a single face\n\t\tlet facePositionIndexes = [];\n\t\tlet faceNormals = [];\n\t\tlet faceColors = [];\n\t\tlet faceUVs = [];\n\t\tlet faceWeights = [];\n\t\tlet faceWeightIndices = [];\n\n\t\tconst scope = this;\n\t\tgeoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) {\n\n\t\t\tlet materialIndex;\n\t\t\tlet endOfFace = false;\n\n\t\t\t// Face index and vertex index arrays are combined in a single array\n\t\t\t// A cube with quad faces looks like this:\n\t\t\t// PolygonVertexIndex: *24 {\n\t\t\t// a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5\n\t\t\t// }\n\t\t\t// Negative numbers mark the end of a face - first face here is 0, 1, 3, -3\n\t\t\t// to find index of last vertex bit shift the index: ^ - 1\n\t\t\tif ( vertexIndex < 0 ) {\n\n\t\t\t\tvertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1\n\t\t\t\tendOfFace = true;\n\n\t\t\t}\n\n\t\t\tlet weightIndices = [];\n\t\t\tlet weights = [];\n\n\t\t\tfacePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 );\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color );\n\n\t\t\t\tfaceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tif ( geoInfo.weightTable[ vertexIndex ] !== undefined ) {\n\n\t\t\t\t\tgeoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) {\n\n\t\t\t\t\t\tweights.push( wt.weight );\n\t\t\t\t\t\tweightIndices.push( wt.id );\n\n\t\t\t\t\t} );\n\n\n\t\t\t\t}\n\n\t\t\t\tif ( weights.length > 4 ) {\n\n\t\t\t\t\tif ( ! displayedWeightsWarning ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' );\n\t\t\t\t\t\tdisplayedWeightsWarning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst wIndex = [ 0, 0, 0, 0 ];\n\t\t\t\t\tconst Weight = [ 0, 0, 0, 0 ];\n\n\t\t\t\t\tweights.forEach( function ( weight, weightIndex ) {\n\n\t\t\t\t\t\tlet currentWeight = weight;\n\t\t\t\t\t\tlet currentIndex = weightIndices[ weightIndex ];\n\n\t\t\t\t\t\tWeight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) {\n\n\t\t\t\t\t\t\tif ( currentWeight > comparedWeight ) {\n\n\t\t\t\t\t\t\t\tcomparedWeightArray[ comparedWeightIndex ] = currentWeight;\n\t\t\t\t\t\t\t\tcurrentWeight = comparedWeight;\n\n\t\t\t\t\t\t\t\tconst tmp = wIndex[ comparedWeightIndex ];\n\t\t\t\t\t\t\t\twIndex[ comparedWeightIndex ] = currentIndex;\n\t\t\t\t\t\t\t\tcurrentIndex = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tweightIndices = wIndex;\n\t\t\t\t\tweights = Weight;\n\n\t\t\t\t}\n\n\t\t\t\t// if the weight array is shorter than 4 pad with 0s\n\t\t\t\twhile ( weights.length < 4 ) {\n\n\t\t\t\t\tweights.push( 0 );\n\t\t\t\t\tweightIndices.push( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\tfaceWeights.push( weights[ i ] );\n\t\t\t\t\tfaceWeightIndices.push( weightIndices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal );\n\n\t\t\t\tfaceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tmaterialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ];\n\n\t\t\t\tif ( materialIndex < 0 ) {\n\n\t\t\t\t\tscope.negativeMaterialIndices = true;\n\t\t\t\t\tmaterialIndex = 0; // fallback\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, i ) {\n\n\t\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv );\n\n\t\t\t\t\tif ( faceUVs[ i ] === undefined ) {\n\n\t\t\t\t\t\tfaceUVs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceUVs[ i ].push( data[ 0 ] );\n\t\t\t\t\tfaceUVs[ i ].push( data[ 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfaceLength ++;\n\n\t\t\tif ( endOfFace ) {\n\n\t\t\t\tscope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength );\n\n\t\t\t\tpolygonIndex ++;\n\t\t\t\tfaceLength = 0;\n\n\t\t\t\t// reset arrays for the next face\n\t\t\t\tfacePositionIndexes = [];\n\t\t\t\tfaceNormals = [];\n\t\t\t\tfaceColors = [];\n\t\t\t\tfaceUVs = [];\n\t\t\t\tfaceWeights = [];\n\t\t\t\tfaceWeightIndices = [];\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn buffers;\n\n\t}\n\n\t// See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal\n\tgetNormalNewell( vertices ) {\n\n\t\tconst normal = new Vector3( 0.0, 0.0, 0.0 );\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst current = vertices[ i ];\n\t\t\tconst next = vertices[ ( i + 1 ) % vertices.length ];\n\n\t\t\tnormal.x += ( current.y - next.y ) * ( current.z + next.z );\n\t\t\tnormal.y += ( current.z - next.z ) * ( current.x + next.x );\n\t\t\tnormal.z += ( current.x - next.x ) * ( current.y + next.y );\n\n\t\t}\n\n\t\tnormal.normalize();\n\n\t\treturn normal;\n\n\t}\n\n\tgetNormalTangentAndBitangent( vertices ) {\n\n\t\tconst normalVector = this.getNormalNewell( vertices );\n\t\t// Avoid up being equal or almost equal to normalVector\n\t\tconst up = Math.abs( normalVector.z ) > 0.5 ? new Vector3( 0.0, 1.0, 0.0 ) : new Vector3( 0.0, 0.0, 1.0 );\n\t\tconst tangent = up.cross( normalVector ).normalize();\n\t\tconst bitangent = normalVector.clone().cross( tangent ).normalize();\n\n\t\treturn {\n\t\t\tnormal: normalVector,\n\t\t\ttangent: tangent,\n\t\t\tbitangent: bitangent\n\t\t};\n\n\t}\n\n\tflattenVertex( vertex, normalTangent, normalBitangent ) {\n\n\t\treturn new Vector2(\n\t\t\tvertex.dot( normalTangent ),\n\t\t\tvertex.dot( normalBitangent )\n\t\t);\n\n\t}\n\n\t// Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n\tgenFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) {\n\n\t\tlet triangles;\n\n\t\tif ( faceLength > 3 ) {\n\n\t\t\t// Triangulate n-gon using earcut\n\n\t\t\tconst vertices = [];\n\t\t\t// in morphing scenario vertexPositions represent morphPositions\n\t\t\t// while baseVertexPositions represent the original geometry's positions\n\t\t\tconst positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;\n\t\t\tfor ( let i = 0; i < facePositionIndexes.length; i += 3 ) {\n\n\t\t\t\tvertices.push(\n\t\t\t\t\tnew Vector3(\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 1 ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 2 ] ]\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tconst { tangent, bitangent } = this.getNormalTangentAndBitangent( vertices );\n\t\t\tconst triangulationInput = [];\n\n\t\t\tfor ( const vertex of vertices ) {\n\n\t\t\t\ttriangulationInput.push( this.flattenVertex( vertex, tangent, bitangent ) );\n\n\t\t\t}\n\n\t\t\t// When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)\n\t\t\t// the triangulationInput will be an array of [0,0] elements\n\t\t\t// resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape\n\t\t\t// leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).\n\t\t\t// That's why, in order to support morphing scenario, \"positions\" is looking first for baseVertexPositions,\n\t\t\t// so that we don't end up with an array of 0 triangles for the faces not participating in morph.\n\t\t\ttriangles = ShapeUtils.triangulateShape( triangulationInput, [] );\n\n\t\t} else {\n\n\t\t\t// Regular triangle, skip earcut triangulation step\n\t\t\ttriangles = [[ 0, 1, 2 ]];\n\n\t\t}\n\n\t\tfor ( const [ i0, i1, i2 ] of triangles ) {\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 2 ] ] );\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 3 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, j ) {\n\n\t\t\t\t\tif ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = [];\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 + 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\taddMorphTargets( parentGeo, parentGeoNode, morphTargets, preTransform ) {\n\n\t\tif ( morphTargets.length === 0 ) return;\n\n\t\tparentGeo.morphTargetsRelative = true;\n\n\t\tparentGeo.morphAttributes.position = [];\n\t\t// parentGeo.morphAttributes.normal = []; // not implemented\n\n\t\tconst scope = this;\n\t\tmorphTargets.forEach( function ( morphTarget ) {\n\n\t\t\tmorphTarget.rawTargets.forEach( function ( rawTarget ) {\n\n\t\t\t\tconst morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ];\n\n\t\t\t\tif ( morphGeoNode !== undefined ) {\n\n\t\t\t\t\tscope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t// a morph geometry node is similar to a standard node, and the node is also contained\n\t// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n\t// and a special attribute Index defining which vertices of the original geometry are affected\n\t// Normal and position attributes only have data for the vertices that are affected by the morph\n\tgenMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {\n\n\t\tconst basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];\n\t\tconst baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];\n\n\t\tconst morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];\n\t\tconst morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];\n\n\t\tconst length = parentGeo.attributes.position.count * 3;\n\t\tconst morphPositions = new Float32Array( length );\n\n\t\tfor ( let i = 0; i < morphIndices.length; i ++ ) {\n\n\t\t\tconst morphIndex = morphIndices[ i ] * 3;\n\n\t\t\tmorphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];\n\t\t\tmorphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];\n\t\t\tmorphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ];\n\n\t\t}\n\n\t\t// TODO: add morph normal support\n\t\tconst morphGeoInfo = {\n\t\t\tvertexIndices: baseIndices,\n\t\t\tvertexPositions: morphPositions,\n\t\t\tbaseVertexPositions: basePositions\n\t\t};\n\n\t\tconst morphBuffers = this.genBuffers( morphGeoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 );\n\t\tpositionAttribute.name = name || morphGeoNode.attrName;\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tparentGeo.morphAttributes.position.push( positionAttribute );\n\n\t}\n\n\t// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n\tparseNormals( NormalNode ) {\n\n\t\tconst mappingType = NormalNode.MappingInformationType;\n\t\tconst referenceType = NormalNode.ReferenceInformationType;\n\t\tconst buffer = NormalNode.Normals.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tif ( 'NormalIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalIndex.a;\n\n\t\t\t} else if ( 'NormalsIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalsIndex.a;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 3,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n\tparseUVs( UVNode ) {\n\n\t\tconst mappingType = UVNode.MappingInformationType;\n\t\tconst referenceType = UVNode.ReferenceInformationType;\n\t\tconst buffer = UVNode.UV.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = UVNode.UVIndex.a;\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 2,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n\tparseVertexColors( ColorNode ) {\n\n\t\tconst mappingType = ColorNode.MappingInformationType;\n\t\tconst referenceType = ColorNode.ReferenceInformationType;\n\t\tconst buffer = ColorNode.Colors.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = ColorNode.ColorIndex.a;\n\n\t\t}\n\n\t\tfor ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {\n\n\t\t\tc.fromArray( buffer, i );\n\t\t\tColorManagement.toWorkingColorSpace( c, SRGBColorSpace );\n\t\t\tc.toArray( buffer, i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 4,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n\tparseMaterialIndices( MaterialNode ) {\n\n\t\tconst mappingType = MaterialNode.MappingInformationType;\n\t\tconst referenceType = MaterialNode.ReferenceInformationType;\n\n\t\tif ( mappingType === 'NoMappingInformation' ) {\n\n\t\t\treturn {\n\t\t\t\tdataSize: 1,\n\t\t\t\tbuffer: [ 0 ],\n\t\t\t\tindices: [ 0 ],\n\t\t\t\tmappingType: 'AllSame',\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t}\n\n\t\tconst materialIndexBuffer = MaterialNode.Materials.a;\n\n\t\t// Since materials are stored as indices, there's a bit of a mismatch between FBX and what\n\t\t// we expect.So we create an intermediate buffer that points to the index in the buffer,\n\t\t// for conforming with the other functions we've written for other data.\n\t\tconst materialIndices = [];\n\n\t\tfor ( let i = 0; i < materialIndexBuffer.length; ++ i ) {\n\n\t\t\tmaterialIndices.push( i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 1,\n\t\t\tbuffer: materialIndexBuffer,\n\t\t\tindices: materialIndices,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n\tparseNurbsGeometry( geoNode ) {\n\n\t\tconst order = parseInt( geoNode.Order );\n\n\t\tif ( isNaN( order ) ) {\n\n\t\t\tconsole.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst degree = order - 1;\n\n\t\tconst knots = geoNode.KnotVector.a;\n\t\tconst controlPoints = [];\n\t\tconst pointsValues = geoNode.Points.a;\n\n\t\tfor ( let i = 0, l = pointsValues.length; i < l; i += 4 ) {\n\n\t\t\tcontrolPoints.push( new Vector4().fromArray( pointsValues, i ) );\n\n\t\t}\n\n\t\tlet startKnot, endKnot;\n\n\t\tif ( geoNode.Form === 'Closed' ) {\n\n\t\t\tcontrolPoints.push( controlPoints[ 0 ] );\n\n\t\t} else if ( geoNode.Form === 'Periodic' ) {\n\n\t\t\tstartKnot = degree;\n\t\t\tendKnot = knots.length - 1 - startKnot;\n\n\t\t\tfor ( let i = 0; i < degree; ++ i ) {\n\n\t\t\t\tcontrolPoints.push( controlPoints[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );\n\t\tconst points = curve.getPoints( controlPoints.length * 12 );\n\n\t\treturn new BufferGeometry().setFromPoints( points );\n\n\t}\n\n}\n\n// parse animation data from FBXTree\nclass AnimationParser {\n\n\t// take raw animation clips and turn them into three.js animation clips\n\tparse() {\n\n\t\tconst animationClips = [];\n\n\t\tconst rawClips = this.parseClips();\n\n\t\tif ( rawClips !== undefined ) {\n\n\t\t\tfor ( const key in rawClips ) {\n\n\t\t\t\tconst rawClip = rawClips[ key ];\n\n\t\t\t\tconst clip = this.addClip( rawClip );\n\n\t\t\t\tanimationClips.push( clip );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animationClips;\n\n\t}\n\n\tparseClips() {\n\n\t\t// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,\n\t\t// if this is undefined we can safely assume there are no animations\n\t\tif ( fbxTree.Objects.AnimationCurve === undefined ) return undefined;\n\n\t\tconst curveNodesMap = this.parseAnimationCurveNodes();\n\n\t\tthis.parseAnimationCurves( curveNodesMap );\n\n\t\tconst layersMap = this.parseAnimationLayers( curveNodesMap );\n\t\tconst rawClips = this.parseAnimStacks( layersMap );\n\n\t\treturn rawClips;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurveNode\n\t// each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n\t// and is referenced by an AnimationLayer\n\tparseAnimationCurveNodes() {\n\n\t\tconst rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n\n\t\tconst curveNodesMap = new Map();\n\n\t\tfor ( const nodeID in rawCurveNodes ) {\n\n\t\t\tconst rawCurveNode = rawCurveNodes[ nodeID ];\n\n\t\t\tif ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) {\n\n\t\t\t\tconst curveNode = {\n\n\t\t\t\t\tid: rawCurveNode.id,\n\t\t\t\t\tattr: rawCurveNode.attrName,\n\t\t\t\t\tcurves: {},\n\n\t\t\t\t};\n\n\t\t\t\tcurveNodesMap.set( curveNode.id, curveNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn curveNodesMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n\t// previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n\t// axis ( e.g. times and values of x rotation)\n\tparseAnimationCurves( curveNodesMap ) {\n\n\t\tconst rawCurves = fbxTree.Objects.AnimationCurve;\n\n\t\t// TODO: Many values are identical up to roundoff error, but won't be optimised\n\t\t// e.g. position times: [0, 0.4, 0. 8]\n\t\t// position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]\n\t\t// clearly, this should be optimised to\n\t\t// times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]\n\t\t// this shows up in nearly every FBX file, and generally time array is length > 100\n\n\t\tfor ( const nodeID in rawCurves ) {\n\n\t\t\tconst animationCurve = {\n\n\t\t\t\tid: rawCurves[ nodeID ].id,\n\t\t\t\ttimes: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ),\n\t\t\t\tvalues: rawCurves[ nodeID ].KeyValueFloat.a,\n\n\t\t\t};\n\n\t\t\tconst relationships = connections.get( animationCurve.id );\n\n\t\t\tif ( relationships !== undefined ) {\n\n\t\t\t\tconst animationCurveID = relationships.parents[ 0 ].ID;\n\t\t\t\tconst animationCurveRelationship = relationships.parents[ 0 ].relationship;\n\n\t\t\t\tif ( animationCurveRelationship.match( /X/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Y/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Z/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n\t// to various AnimationCurveNodes and is referenced by an AnimationStack node\n\t// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n\tparseAnimationLayers( curveNodesMap ) {\n\n\t\tconst rawLayers = fbxTree.Objects.AnimationLayer;\n\n\t\tconst layersMap = new Map();\n\n\t\tfor ( const nodeID in rawLayers ) {\n\n\t\t\tconst layerCurveNodes = [];\n\n\t\t\tconst connection = connections.get( parseInt( nodeID ) );\n\n\t\t\tif ( connection !== undefined ) {\n\n\t\t\t\t// all the animationCurveNodes used in the layer\n\t\t\t\tconst children = connection.children;\n\n\t\t\t\tchildren.forEach( function ( child, i ) {\n\n\t\t\t\t\tif ( curveNodesMap.has( child.ID ) ) {\n\n\t\t\t\t\t\tconst curveNode = curveNodesMap.get( child.ID );\n\n\t\t\t\t\t\t// check that the curves are defined for at least one axis, otherwise ignore the curveNode\n\t\t\t\t\t\tif ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst modelID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tif ( modelID !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID.toString() ];\n\n\t\t\t\t\t\t\t\t\tif ( rawModel === undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered a unused curve.', child );\n\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\tID: rawModel.id,\n\t\t\t\t\t\t\t\t\t\tinitialPosition: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialRotation: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialScale: [ 1, 1, 1 ],\n\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( child.ID === rawModel.id ) {\n\n\t\t\t\t\t\t\t\t\t\t\tnode.transform = child.matrix;\n\n\t\t\t\t\t\t\t\t\t\t\tif ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\tif ( ! node.transform ) node.transform = new Matrix4();\n\n\t\t\t\t\t\t\t\t\t// if the animated model is pre rotated, we'll have to apply the pre rotations to every\n\t\t\t\t\t\t\t\t\t// animation value as well\n\t\t\t\t\t\t\t\t\tif ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value;\n\t\t\t\t\t\t\t\t\tif ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value;\n\n\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t} else if ( curveNode.curves.morph !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst deformerID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst morpherID = connections.get( deformerID ).parents[ 0 ].ID;\n\t\t\t\t\t\t\t\tconst geoID = connections.get( morpherID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t// assuming geometry is not used in more than one model\n\t\t\t\t\t\t\t\tconst modelID = connections.get( geoID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID ];\n\n\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\tmorphName: fbxTree.Objects.Deformer[ deformerID ].attrName,\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlayerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tlayersMap.set( parseInt( nodeID ), layerCurveNodes );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn layersMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n\t// hierarchy. Each Stack node will be used to create a AnimationClip\n\tparseAnimStacks( layersMap ) {\n\n\t\tconst rawStacks = fbxTree.Objects.AnimationStack;\n\n\t\t// connect the stacks (clips) up to the layers\n\t\tconst rawClips = {};\n\n\t\tfor ( const nodeID in rawStacks ) {\n\n\t\t\tconst children = connections.get( parseInt( nodeID ) ).children;\n\n\t\t\tif ( children.length > 1 ) {\n\n\t\t\t\t// it seems like stacks will always be associated with a single layer. But just in case there are files\n\t\t\t\t// where there are multiple layers per stack, we'll display a warning\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' );\n\n\t\t\t}\n\n\t\t\tconst layer = layersMap.get( children[ 0 ].ID );\n\n\t\t\trawClips[ nodeID ] = {\n\n\t\t\t\tname: rawStacks[ nodeID ].attrName,\n\t\t\t\tlayer: layer,\n\n\t\t\t};\n\n\t\t}\n\n\t\treturn rawClips;\n\n\t}\n\n\taddClip( rawClip ) {\n\n\t\tlet tracks = [];\n\n\t\tconst scope = this;\n\t\trawClip.layer.forEach( function ( rawTracks ) {\n\n\t\t\ttracks = tracks.concat( scope.generateTracks( rawTracks ) );\n\n\t\t} );\n\n\t\treturn new AnimationClip( rawClip.name, - 1, tracks );\n\n\t}\n\n\tgenerateTracks( rawTracks ) {\n\n\t\tconst tracks = [];\n\n\t\tlet initialPosition = new Vector3();\n\t\tlet initialScale = new Vector3();\n\n\t\tif ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, new Quaternion(), initialScale );\n\n\t\tinitialPosition = initialPosition.toArray();\n\t\tinitialScale = initialScale.toArray();\n\n\t\tif ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) {\n\n\t\t\tconst positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' );\n\t\t\tif ( positionTrack !== undefined ) tracks.push( positionTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) {\n\n\t\t\tconst rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder );\n\t\t\tif ( rotationTrack !== undefined ) tracks.push( rotationTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) {\n\n\t\t\tconst scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' );\n\t\t\tif ( scaleTrack !== undefined ) tracks.push( scaleTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.DeformPercent !== undefined ) {\n\n\t\t\tconst morphTrack = this.generateMorphTrack( rawTracks );\n\t\t\tif ( morphTrack !== undefined ) tracks.push( morphTrack );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\tgenerateVectorTrack( modelName, curves, initialValue, type ) {\n\n\t\tconst times = this.getTimesForAllAxes( curves );\n\t\tconst values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\treturn new VectorKeyframeTrack( modelName + '.' + type, times, values );\n\n\t}\n\n\tgenerateRotationTrack( modelName, curves, preRotation, postRotation, eulerOrder ) {\n\n\t\tlet times;\n\t\tlet values;\n\n\t\tif ( curves.x !== undefined && curves.y !== undefined && curves.z !== undefined ) {\n\n\t\t\tconst result = this.interpolateRotations( curves.x, curves.y, curves.z, eulerOrder );\n\n\t\t\ttimes = result[ 0 ];\n\t\t\tvalues = result[ 1 ];\n\n\t\t}\n\n\t\t// For Maya models using \"Joint Orient\", Euler order only applies to rotation, not pre/post-rotations\n\t\tconst defaultEulerOrder = getEulerOrder( 0 );\n\n\t\tif ( preRotation !== undefined ) {\n\n\t\t\tpreRotation = preRotation.map( MathUtils.degToRad );\n\t\t\tpreRotation.push( defaultEulerOrder );\n\n\t\t\tpreRotation = new Euler().fromArray( preRotation );\n\t\t\tpreRotation = new Quaternion().setFromEuler( preRotation );\n\n\t\t}\n\n\t\tif ( postRotation !== undefined ) {\n\n\t\t\tpostRotation = postRotation.map( MathUtils.degToRad );\n\t\t\tpostRotation.push( defaultEulerOrder );\n\n\t\t\tpostRotation = new Euler().fromArray( postRotation );\n\t\t\tpostRotation = new Quaternion().setFromEuler( postRotation ).invert();\n\n\t\t}\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\n\t\tconst quaternionValues = [];\n\n\t\tif ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [ 0 ], [ 0 ] );\n\n\t\tfor ( let i = 0; i < values.length; i += 3 ) {\n\n\t\t\teuler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tif ( preRotation !== undefined ) quaternion.premultiply( preRotation );\n\t\t\tif ( postRotation !== undefined ) quaternion.multiply( postRotation );\n\n\t\t\t// Check unroll\n\t\t\tif ( i > 2 ) {\n\n\t\t\t\tconst prevQuat = new Quaternion().fromArray(\n\t\t\t\t\tquaternionValues,\n\t\t\t\t\t( ( i - 3 ) / 3 ) * 4\n\t\t\t\t);\n\n\t\t\t\tif ( prevQuat.dot( quaternion ) < 0 ) {\n\n\t\t\t\t\tquaternion.set( - quaternion.x, - quaternion.y, - quaternion.z, - quaternion.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tquaternion.toArray( quaternionValues, ( i / 3 ) * 4 );\n\n\t\t}\n\n\t\treturn new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues );\n\n\t}\n\n\tgenerateMorphTrack( rawTracks ) {\n\n\t\tconst curves = rawTracks.DeformPercent.curves.morph;\n\t\tconst values = curves.values.map( function ( val ) {\n\n\t\t\treturn val / 100;\n\n\t\t} );\n\n\t\tconst morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ];\n\n\t\treturn new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values );\n\n\t}\n\n\t// For all animated objects, times are defined separately for each axis\n\t// Here we'll combine the times into one sorted array without duplicates\n\tgetTimesForAllAxes( curves ) {\n\n\t\tlet times = [];\n\n\t\t// first join together the times for each axis, if defined\n\t\tif ( curves.x !== undefined ) times = times.concat( curves.x.times );\n\t\tif ( curves.y !== undefined ) times = times.concat( curves.y.times );\n\t\tif ( curves.z !== undefined ) times = times.concat( curves.z.times );\n\n\t\t// then sort them\n\t\ttimes = times.sort( function ( a, b ) {\n\n\t\t\treturn a - b;\n\n\t\t} );\n\n\t\t// and remove duplicates\n\t\tif ( times.length > 1 ) {\n\n\t\t\tlet targetIndex = 1;\n\t\t\tlet lastValue = times[ 0 ];\n\t\t\tfor ( let i = 1; i < times.length; i ++ ) {\n\n\t\t\t\tconst currentValue = times[ i ];\n\t\t\t\tif ( currentValue !== lastValue ) {\n\n\t\t\t\t\ttimes[ targetIndex ] = currentValue;\n\t\t\t\t\tlastValue = currentValue;\n\t\t\t\t\ttargetIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes = times.slice( 0, targetIndex );\n\n\t\t}\n\n\t\treturn times;\n\n\t}\n\n\tgetKeyframeTrackValues( times, curves, initialValue ) {\n\n\t\tconst prevValue = initialValue;\n\n\t\tconst values = [];\n\n\t\tlet xIndex = - 1;\n\t\tlet yIndex = - 1;\n\t\tlet zIndex = - 1;\n\n\t\ttimes.forEach( function ( time ) {\n\n\t\t\tif ( curves.x ) xIndex = curves.x.times.indexOf( time );\n\t\t\tif ( curves.y ) yIndex = curves.y.times.indexOf( time );\n\t\t\tif ( curves.z ) zIndex = curves.z.times.indexOf( time );\n\n\t\t\t// if there is an x value defined for this frame, use that\n\t\t\tif ( xIndex !== - 1 ) {\n\n\t\t\t\tconst xValue = curves.x.values[ xIndex ];\n\t\t\t\tvalues.push( xValue );\n\t\t\t\tprevValue[ 0 ] = xValue;\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use the x value from the previous frame\n\t\t\t\tvalues.push( prevValue[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( yIndex !== - 1 ) {\n\n\t\t\t\tconst yValue = curves.y.values[ yIndex ];\n\t\t\t\tvalues.push( yValue );\n\t\t\t\tprevValue[ 1 ] = yValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 1 ] );\n\n\t\t\t}\n\n\t\t\tif ( zIndex !== - 1 ) {\n\n\t\t\t\tconst zValue = curves.z.values[ zIndex ];\n\t\t\t\tvalues.push( zValue );\n\t\t\t\tprevValue[ 2 ] = zValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 2 ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn values;\n\n\t}\n\n\t// Rotations are defined as Euler angles which can have values of any size\n\t// These will be converted to quaternions which don't support values greater than\n\t// PI, so we'll interpolate large rotations\n\tinterpolateRotations( curvex, curvey, curvez, eulerOrder ) {\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\t// Add first frame\n\t\ttimes.push( curvex.times[ 0 ] );\n\t\tvalues.push( MathUtils.degToRad( curvex.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvey.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvez.values[ 0 ] ) );\n\n\t\tfor ( let i = 1; i < curvex.values.length; i ++ ) {\n\n\t\t\tconst initialValue = [\n\t\t\t\tcurvex.values[ i - 1 ],\n\t\t\t\tcurvey.values[ i - 1 ],\n\t\t\t\tcurvez.values[ i - 1 ],\n\t\t\t];\n\n\t\t\tif ( isNaN( initialValue[ 0 ] ) || isNaN( initialValue[ 1 ] ) || isNaN( initialValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst initialValueRad = initialValue.map( MathUtils.degToRad );\n\n\t\t\tconst currentValue = [\n\t\t\t\tcurvex.values[ i ],\n\t\t\t\tcurvey.values[ i ],\n\t\t\t\tcurvez.values[ i ],\n\t\t\t];\n\n\t\t\tif ( isNaN( currentValue[ 0 ] ) || isNaN( currentValue[ 1 ] ) || isNaN( currentValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValueRad = currentValue.map( MathUtils.degToRad );\n\n\t\t\tconst valuesSpan = [\n\t\t\t\tcurrentValue[ 0 ] - initialValue[ 0 ],\n\t\t\t\tcurrentValue[ 1 ] - initialValue[ 1 ],\n\t\t\t\tcurrentValue[ 2 ] - initialValue[ 2 ],\n\t\t\t];\n\n\t\t\tconst absoluteSpan = [\n\t\t\t\tMath.abs( valuesSpan[ 0 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 1 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 2 ] ),\n\t\t\t];\n\n\t\t\tif ( absoluteSpan[ 0 ] >= 180 || absoluteSpan[ 1 ] >= 180 || absoluteSpan[ 2 ] >= 180 ) {\n\n\t\t\t\tconst maxAbsSpan = Math.max( ...absoluteSpan );\n\n\t\t\t\tconst numSubIntervals = maxAbsSpan / 180;\n\n\t\t\t\tconst E1 = new Euler( ...initialValueRad, eulerOrder );\n\t\t\t\tconst E2 = new Euler( ...currentValueRad, eulerOrder );\n\n\t\t\t\tconst Q1 = new Quaternion().setFromEuler( E1 );\n\t\t\t\tconst Q2 = new Quaternion().setFromEuler( E2 );\n\n\t\t\t\t// Check unroll\n\t\t\t\tif ( Q1.dot( Q2 ) ) {\n\n\t\t\t\t\tQ2.set( - Q2.x, - Q2.y, - Q2.z, - Q2.w );\n\n\t\t\t\t}\n\n\t\t\t\t// Interpolate\n\t\t\t\tconst initialTime = curvex.times[ i - 1 ];\n\t\t\t\tconst timeSpan = curvex.times[ i ] - initialTime;\n\n\t\t\t\tconst Q = new Quaternion();\n\t\t\t\tconst E = new Euler();\n\t\t\t\tfor ( let t = 0; t < 1; t += 1 / numSubIntervals ) {\n\n\t\t\t\t\tQ.copy( Q1.clone().slerp( Q2.clone(), t ) );\n\n\t\t\t\t\ttimes.push( initialTime + t * timeSpan );\n\t\t\t\t\tE.setFromQuaternion( Q, eulerOrder );\n\n\t\t\t\t\tvalues.push( E.x );\n\t\t\t\t\tvalues.push( E.y );\n\t\t\t\t\tvalues.push( E.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttimes.push( curvex.times[ i ] );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvex.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvey.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvez.values[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn [ times, values ];\n\n\t}\n\n}\n\n// parse an FBX file in ASCII format\nclass TextParser {\n\n\tgetPrevNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 2 ];\n\n\t}\n\n\tgetCurrentNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 1 ];\n\n\t}\n\n\tgetCurrentProp() {\n\n\t\treturn this.currentProp;\n\n\t}\n\n\tpushStack( node ) {\n\n\t\tthis.nodeStack.push( node );\n\t\tthis.currentIndent += 1;\n\n\t}\n\n\tpopStack() {\n\n\t\tthis.nodeStack.pop();\n\t\tthis.currentIndent -= 1;\n\n\t}\n\n\tsetCurrentProp( val, name ) {\n\n\t\tthis.currentProp = val;\n\t\tthis.currentPropName = name;\n\n\t}\n\n\tparse( text ) {\n\n\t\tthis.currentIndent = 0;\n\n\t\tthis.allNodes = new FBXTree();\n\t\tthis.nodeStack = [];\n\t\tthis.currentProp = [];\n\t\tthis.currentPropName = '';\n\n\t\tconst scope = this;\n\n\t\tconst split = text.split( /[\\r\\n]+/ );\n\n\t\tsplit.forEach( function ( line, i ) {\n\n\t\t\tconst matchComment = line.match( /^[\\s\\t]*;/ );\n\t\t\tconst matchEmpty = line.match( /^[\\s\\t]*$/ );\n\n\t\t\tif ( matchComment || matchEmpty ) return;\n\n\t\t\tconst matchBeginning = line.match( '^\\\\t{' + scope.currentIndent + '}(\\\\w+):(.*){', '' );\n\t\t\tconst matchProperty = line.match( '^\\\\t{' + ( scope.currentIndent ) + '}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)' );\n\t\t\tconst matchEnd = line.match( '^\\\\t{' + ( scope.currentIndent - 1 ) + '}}' );\n\n\t\t\tif ( matchBeginning ) {\n\n\t\t\t\tscope.parseNodeBegin( line, matchBeginning );\n\n\t\t\t} else if ( matchProperty ) {\n\n\t\t\t\tscope.parseNodeProperty( line, matchProperty, split[ ++ i ] );\n\n\t\t\t} else if ( matchEnd ) {\n\n\t\t\t\tscope.popStack();\n\n\t\t\t} else if ( line.match( /^[^\\s\\t}]/ ) ) {\n\n\t\t\t\t// large arrays are split over multiple lines terminated with a ',' character\n\t\t\t\t// if this is encountered the line needs to be joined to the previous line\n\t\t\t\tscope.parseNodePropertyContinued( line );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.allNodes;\n\n\t}\n\n\tparseNodeBegin( line, property ) {\n\n\t\tconst nodeName = property[ 1 ].trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\tconst nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) {\n\n\t\t\treturn attr.trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t} );\n\n\t\tconst node = { name: nodeName };\n\t\tconst attrs = this.parseNodeAttr( nodeAttrs );\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\t// a top node\n\t\tif ( this.currentIndent === 0 ) {\n\n\t\t\tthis.allNodes.add( nodeName, node );\n\n\t\t} else { // a subnode\n\n\t\t\t// if the subnode already exists, append it\n\t\t\tif ( nodeName in currentNode ) {\n\n\t\t\t\t// special case Pose needs PoseNodes as an array\n\t\t\t\tif ( nodeName === 'PoseNode' ) {\n\n\t\t\t\t\tcurrentNode.PoseNode.push( node );\n\n\t\t\t\t} else if ( currentNode[ nodeName ].id !== undefined ) {\n\n\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\tcurrentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( typeof attrs.id === 'number' ) {\n\n\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\tcurrentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( nodeName !== 'Properties70' ) {\n\n\t\t\t\tif ( nodeName === 'PoseNode' )\tcurrentNode[ nodeName ] = [ node ];\n\t\t\t\telse currentNode[ nodeName ] = node;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( typeof attrs.id === 'number' ) node.id = attrs.id;\n\t\tif ( attrs.name !== '' ) node.attrName = attrs.name;\n\t\tif ( attrs.type !== '' ) node.attrType = attrs.type;\n\n\t\tthis.pushStack( node );\n\n\t}\n\n\tparseNodeAttr( attrs ) {\n\n\t\tlet id = attrs[ 0 ];\n\n\t\tif ( attrs[ 0 ] !== '' ) {\n\n\t\t\tid = parseInt( attrs[ 0 ] );\n\n\t\t\tif ( isNaN( id ) ) {\n\n\t\t\t\tid = attrs[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet name = '', type = '';\n\n\t\tif ( attrs.length > 1 ) {\n\n\t\t\tname = attrs[ 1 ].replace( /^(\\w+)::/, '' );\n\t\t\ttype = attrs[ 2 ];\n\n\t\t}\n\n\t\treturn { id: id, name: name, type: type };\n\n\t}\n\n\tparseNodeProperty( line, property, contentLine ) {\n\n\t\tlet propName = property[ 1 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\t\tlet propValue = property[ 2 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\n\t\t// for special case: base64 image data follows \"Content: ,\" line\n\t\t//\tContent: ,\n\t\t//\t \"/9j/4RDaRXhpZgAATU0A...\"\n\t\tif ( propName === 'Content' && propValue === ',' ) {\n\n\t\t\tpropValue = contentLine.replace( /\"/g, '' ).replace( /,$/, '' ).trim();\n\n\t\t}\n\n\t\tconst currentNode = this.getCurrentNode();\n\t\tconst parentName = currentNode.name;\n\n\t\tif ( parentName === 'Properties70' ) {\n\n\t\t\tthis.parseNodeSpecialProperty( line, propName, propValue );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Connections\n\t\tif ( propName === 'C' ) {\n\n\t\t\tconst connProps = propValue.split( ',' ).slice( 1 );\n\t\t\tconst from = parseInt( connProps[ 0 ] );\n\t\t\tconst to = parseInt( connProps[ 1 ] );\n\n\t\t\tlet rest = propValue.split( ',' ).slice( 3 );\n\n\t\t\trest = rest.map( function ( elem ) {\n\n\t\t\t\treturn elem.trim().replace( /^\"/, '' );\n\n\t\t\t} );\n\n\t\t\tpropName = 'connections';\n\t\t\tpropValue = [ from, to ];\n\t\t\tappend( propValue, rest );\n\n\t\t\tif ( currentNode[ propName ] === undefined ) {\n\n\t\t\t\tcurrentNode[ propName ] = [];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Node\n\t\tif ( propName === 'Node' ) currentNode.id = propValue;\n\n\t\t// connections\n\t\tif ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) {\n\n\t\t\tcurrentNode[ propName ].push( propValue );\n\n\t\t} else {\n\n\t\t\tif ( propName !== 'a' ) currentNode[ propName ] = propValue;\n\t\t\telse currentNode.a = propValue;\n\n\t\t}\n\n\t\tthis.setCurrentProp( currentNode, propName );\n\n\t\t// convert string to array, unless it ends in ',' in which case more will be added to it\n\t\tif ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( propValue );\n\n\t\t}\n\n\t}\n\n\tparseNodePropertyContinued( line ) {\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\tcurrentNode.a += line;\n\n\t\t// if the line doesn't end in ',' we have reached the end of the property value\n\t\t// so convert the string to an array\n\t\tif ( line.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( currentNode.a );\n\n\t\t}\n\n\t}\n\n\t// parse \"Property70\"\n\tparseNodeSpecialProperty( line, propName, propValue ) {\n\n\t\t// split this\n\t\t// P: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t// into array like below\n\t\t// [\"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\", \"1,1,1\" ]\n\t\tconst props = propValue.split( '\",' ).map( function ( prop ) {\n\n\t\t\treturn prop.trim().replace( /^\\\"/, '' ).replace( /\\s/, '_' );\n\n\t\t} );\n\n\t\tconst innerPropName = props[ 0 ];\n\t\tconst innerPropType1 = props[ 1 ];\n\t\tconst innerPropType2 = props[ 2 ];\n\t\tconst innerPropFlag = props[ 3 ];\n\t\tlet innerPropValue = props[ 4 ];\n\n\t\t// cast values where needed, otherwise leave as strings\n\t\tswitch ( innerPropType1 ) {\n\n\t\t\tcase 'int':\n\t\t\tcase 'enum':\n\t\t\tcase 'bool':\n\t\t\tcase 'ULongLong':\n\t\t\tcase 'double':\n\t\t\tcase 'Number':\n\t\t\tcase 'FieldOfView':\n\t\t\t\tinnerPropValue = parseFloat( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t\tcase 'Color':\n\t\t\tcase 'ColorRGB':\n\t\t\tcase 'Vector3D':\n\t\t\tcase 'Lcl_Translation':\n\t\t\tcase 'Lcl_Rotation':\n\t\t\tcase 'Lcl_Scaling':\n\t\t\t\tinnerPropValue = parseNumberArray( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// CAUTION: these props must append to parent's parent\n\t\tthis.getPrevNode()[ innerPropName ] = {\n\n\t\t\t'type': innerPropType1,\n\t\t\t'type2': innerPropType2,\n\t\t\t'flag': innerPropFlag,\n\t\t\t'value': innerPropValue\n\n\t\t};\n\n\t\tthis.setCurrentProp( this.getPrevNode(), innerPropName );\n\n\t}\n\n}\n\n// Parse an FBX file in Binary format\nclass BinaryParser {\n\n\tparse( buffer ) {\n\n\t\tconst reader = new BinaryReader( buffer );\n\t\treader.skip( 23 ); // skip magic 23 bytes\n\n\t\tconst version = reader.getUint32();\n\n\t\tif ( version < 6400 ) {\n\n\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version );\n\n\t\t}\n\n\t\tconst allNodes = new FBXTree();\n\n\t\twhile ( ! this.endOfContent( reader ) ) {\n\n\t\t\tconst node = this.parseNode( reader, version );\n\t\t\tif ( node !== null ) allNodes.add( node.name, node );\n\n\t\t}\n\n\t\treturn allNodes;\n\n\t}\n\n\t// Check if reader has reached the end of content.\n\tendOfContent( reader ) {\n\n\t\t// footer size: 160bytes + 16-byte alignment padding\n\t\t// - 16bytes: magic\n\t\t// - padding til 16-byte alignment (at least 1byte?)\n\t\t//\t(seems like some exporters embed fixed 15 or 16bytes?)\n\t\t// - 4bytes: magic\n\t\t// - 4bytes: version\n\t\t// - 120bytes: zero\n\t\t// - 16bytes: magic\n\t\tif ( reader.size() % 16 === 0 ) {\n\n\t\t\treturn ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size();\n\n\t\t} else {\n\n\t\t\treturn reader.getOffset() + 160 + 16 >= reader.size();\n\n\t\t}\n\n\t}\n\n\t// recursively parse nodes until the end of the file is reached\n\tparseNode( reader, version ) {\n\n\t\tconst node = {};\n\n\t\t// The first three data sizes depends on version.\n\t\tconst endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\t\tconst numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\n\t\t( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used\n\n\t\tconst nameLen = reader.getUint8();\n\t\tconst name = reader.getString( nameLen );\n\n\t\t// Regards this node as NULL-record if endOffset is zero\n\t\tif ( endOffset === 0 ) return null;\n\n\t\tconst propertyList = [];\n\n\t\tfor ( let i = 0; i < numProperties; i ++ ) {\n\n\t\t\tpropertyList.push( this.parseProperty( reader ) );\n\n\t\t}\n\n\t\t// Regards the first three elements in propertyList as id, attrName, and attrType\n\t\tconst id = propertyList.length > 0 ? propertyList[ 0 ] : '';\n\t\tconst attrName = propertyList.length > 1 ? propertyList[ 1 ] : '';\n\t\tconst attrType = propertyList.length > 2 ? propertyList[ 2 ] : '';\n\n\t\t// check if this node represents just a single property\n\t\t// like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}\n\t\tnode.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false;\n\n\t\twhile ( endOffset > reader.getOffset() ) {\n\n\t\t\tconst subNode = this.parseNode( reader, version );\n\n\t\t\tif ( subNode !== null ) this.parseSubNode( name, node, subNode );\n\n\t\t}\n\n\t\tnode.propertyList = propertyList; // raw property list used by parent\n\n\t\tif ( typeof id === 'number' ) node.id = id;\n\t\tif ( attrName !== '' ) node.attrName = attrName;\n\t\tif ( attrType !== '' ) node.attrType = attrType;\n\t\tif ( name !== '' ) node.name = name;\n\n\t\treturn node;\n\n\t}\n\n\tparseSubNode( name, node, subNode ) {\n\n\t\t// special case: child node is single property\n\t\tif ( subNode.singleProperty === true ) {\n\n\t\t\tconst value = subNode.propertyList[ 0 ];\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\tsubNode.a = value;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = value;\n\n\t\t\t}\n\n\t\t} else if ( name === 'Connections' && subNode.name === 'C' ) {\n\n\t\t\tconst array = [];\n\n\t\t\tsubNode.propertyList.forEach( function ( property, i ) {\n\n\t\t\t\t// first Connection is FBX type (OO, OP, etc.). We'll discard these\n\t\t\t\tif ( i !== 0 ) array.push( property );\n\n\t\t\t} );\n\n\t\t\tif ( node.connections === undefined ) {\n\n\t\t\t\tnode.connections = [];\n\n\t\t\t}\n\n\t\t\tnode.connections.push( array );\n\n\t\t} else if ( subNode.name === 'Properties70' ) {\n\n\t\t\tconst keys = Object.keys( subNode );\n\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tnode[ key ] = subNode[ key ];\n\n\t\t\t} );\n\n\t\t} else if ( name === 'Properties70' && subNode.name === 'P' ) {\n\n\t\t\tlet innerPropName = subNode.propertyList[ 0 ];\n\t\t\tlet innerPropType1 = subNode.propertyList[ 1 ];\n\t\t\tconst innerPropType2 = subNode.propertyList[ 2 ];\n\t\t\tconst innerPropFlag = subNode.propertyList[ 3 ];\n\t\t\tlet innerPropValue;\n\n\t\t\tif ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' );\n\t\t\tif ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' );\n\n\t\t\tif ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) {\n\n\t\t\t\tinnerPropValue = [\n\t\t\t\t\tsubNode.propertyList[ 4 ],\n\t\t\t\t\tsubNode.propertyList[ 5 ],\n\t\t\t\t\tsubNode.propertyList[ 6 ]\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\tinnerPropValue = subNode.propertyList[ 4 ];\n\n\t\t\t}\n\n\t\t\t// this will be copied to parent, see above\n\t\t\tnode[ innerPropName ] = {\n\n\t\t\t\t'type': innerPropType1,\n\t\t\t\t'type2': innerPropType2,\n\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t'value': innerPropValue\n\n\t\t\t};\n\n\t\t} else if ( node[ subNode.name ] === undefined ) {\n\n\t\t\tif ( typeof subNode.id === 'number' ) {\n\n\t\t\t\tnode[ subNode.name ] = {};\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( subNode.name === 'PoseNode' ) {\n\n\t\t\t\tif ( ! Array.isArray( node[ subNode.name ] ) ) {\n\n\t\t\t\t\tnode[ subNode.name ] = [ node[ subNode.name ] ];\n\n\t\t\t\t}\n\n\t\t\t\tnode[ subNode.name ].push( subNode );\n\n\t\t\t} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {\n\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseProperty( reader ) {\n\n\t\tconst type = reader.getString( 1 );\n\t\tlet length;\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'C':\n\t\t\t\treturn reader.getBoolean();\n\n\t\t\tcase 'D':\n\t\t\t\treturn reader.getFloat64();\n\n\t\t\tcase 'F':\n\t\t\t\treturn reader.getFloat32();\n\n\t\t\tcase 'I':\n\t\t\t\treturn reader.getInt32();\n\n\t\t\tcase 'L':\n\t\t\t\treturn reader.getInt64();\n\n\t\t\tcase 'R':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getArrayBuffer( length );\n\n\t\t\tcase 'S':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getString( length );\n\n\t\t\tcase 'Y':\n\t\t\t\treturn reader.getInt16();\n\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'f':\n\t\t\tcase 'i':\n\t\t\tcase 'l':\n\n\t\t\t\tconst arrayLength = reader.getUint32();\n\t\t\t\tconst encoding = reader.getUint32(); // 0: non-compressed, 1: compressed\n\t\t\t\tconst compressedLength = reader.getUint32();\n\n\t\t\t\tif ( encoding === 0 ) {\n\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\treturn reader.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\treturn reader.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\treturn reader.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\treturn reader.getInt32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\treturn reader.getInt64Array( arrayLength );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst data = fflate.unzlibSync( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) );\n\t\t\t\tconst reader2 = new BinaryReader( data.buffer );\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\treturn reader2.getBooleanArray( arrayLength );\n\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\treturn reader2.getFloat64Array( arrayLength );\n\n\t\t\t\t\tcase 'f':\n\t\t\t\t\t\treturn reader2.getFloat32Array( arrayLength );\n\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\treturn reader2.getInt32Array( arrayLength );\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\treturn reader2.getInt64Array( arrayLength );\n\n\t\t\t\t}\n\n\t\t\t\tbreak; // cannot happen but is required by the DeepScan\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown property type ' + type );\n\n\t\t}\n\n\t}\n\n}\n\nclass BinaryReader {\n\n\tconstructor( buffer, littleEndian ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\t\tthis._textDecoder = new TextDecoder();\n\n\t}\n\n\tgetOffset() {\n\n\t\treturn this.offset;\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\t// seems like true/false representation depends on exporter.\n\t// true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n\t// then sees LSB.\n\tgetBoolean() {\n\n\t\treturn ( this.getUint8() & 1 ) === 1;\n\n\t}\n\n\tgetBooleanArray( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getBoolean() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint8() {\n\n\t\tconst value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetInt16() {\n\n\t\tconst value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tconst value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetInt32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint32() {\n\n\t\tconst value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\t// JavaScript doesn't support 64-bit integer so calculate this here\n\t// 1 << 32 will return 1 so using multiply operation instead here.\n\t// There's a possibility that this method returns wrong value if the value\n\t// is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n\t// TODO: safely handle 64-bit integer\n\tgetInt64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\t// calculate negative value\n\t\tif ( high & 0x80000000 ) {\n\n\t\t\thigh = ~ high & 0xFFFFFFFF;\n\t\t\tlow = ~ low & 0xFFFFFFFF;\n\n\t\t\tif ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF;\n\n\t\t\tlow = ( low + 1 ) & 0xFFFFFFFF;\n\n\t\t\treturn - ( high * 0x100000000 + low );\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetInt64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// Note: see getInt64() comment\n\tgetUint64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tconst value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tconst value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetArrayBuffer( size ) {\n\n\t\tconst value = this.dv.buffer.slice( this.offset, this.offset + size );\n\t\tthis.offset += size;\n\t\treturn value;\n\n\t}\n\n\tgetString( size ) {\n\n\t\tconst start = this.offset;\n\t\tlet a = new Uint8Array( this.dv.buffer, start, size );\n\n\t\tthis.skip( size );\n\n\t\tconst nullByte = a.indexOf( 0 );\n\t\tif ( nullByte >= 0 ) a = new Uint8Array( this.dv.buffer, start, nullByte );\n\n\t\treturn this._textDecoder.decode( a );\n\n\t}\n\n}\n\n// FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)\n// and BinaryParser( FBX Binary format)\nclass FBXTree {\n\n\tadd( key, val ) {\n\n\t\tthis[ key ] = val;\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isFbxFormatBinary( buffer ) {\n\n\tconst CORRECT = 'Kaydara\\u0020FBX\\u0020Binary\\u0020\\u0020\\0';\n\n\treturn buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length );\n\n}\n\nfunction isFbxFormatASCII( text ) {\n\n\tconst CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\\\', 'F', 'B', 'X', '\\\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\\\', '\\\\' ];\n\n\tlet cursor = 0;\n\n\tfunction read( offset ) {\n\n\t\tconst result = text[ offset - 1 ];\n\t\ttext = text.slice( cursor + offset );\n\t\tcursor ++;\n\t\treturn result;\n\n\t}\n\n\tfor ( let i = 0; i < CORRECT.length; ++ i ) {\n\n\t\tconst num = read( 1 );\n\t\tif ( num === CORRECT[ i ] ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nfunction getFbxVersion( text ) {\n\n\tconst versionRegExp = /FBXVersion: (\\d+)/;\n\tconst match = text.match( versionRegExp );\n\n\tif ( match ) {\n\n\t\tconst version = parseInt( match[ 1 ] );\n\t\treturn version;\n\n\t}\n\n\tthrow new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' );\n\n}\n\n// Converts FBX ticks into real time seconds.\nfunction convertFBXTimeToSeconds( time ) {\n\n\treturn time / 46186158000;\n\n}\n\nconst dataArray = [];\n\n// extracts the data from the correct position in the FBX array based on indexing type\nfunction getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {\n\n\tlet index;\n\n\tswitch ( infoObject.mappingType ) {\n\n\t\tcase 'ByPolygonVertex' :\n\t\t\tindex = polygonVertexIndex;\n\t\t\tbreak;\n\t\tcase 'ByPolygon' :\n\t\t\tindex = polygonIndex;\n\t\t\tbreak;\n\t\tcase 'ByVertice' :\n\t\t\tindex = vertexIndex;\n\t\t\tbreak;\n\t\tcase 'AllSame' :\n\t\t\tindex = infoObject.indices[ 0 ];\n\t\t\tbreak;\n\t\tdefault :\n\t\t\tconsole.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType );\n\n\t}\n\n\tif ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ];\n\n\tconst from = index * infoObject.dataSize;\n\tconst to = from + infoObject.dataSize;\n\n\treturn slice( dataArray, infoObject.buffer, from, to );\n\n}\n\nconst tempEuler = new Euler();\nconst tempVec = new Vector3();\n\n// generate transformation from FBX transform data\n// ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm\n// ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e\nfunction generateTransform( transformData ) {\n\n\tconst lTranslationM = new Matrix4();\n\tconst lPreRotationM = new Matrix4();\n\tconst lRotationM = new Matrix4();\n\tconst lPostRotationM = new Matrix4();\n\n\tconst lScalingM = new Matrix4();\n\tconst lScalingPivotM = new Matrix4();\n\tconst lScalingOffsetM = new Matrix4();\n\tconst lRotationOffsetM = new Matrix4();\n\tconst lRotationPivotM = new Matrix4();\n\n\tconst lParentGX = new Matrix4();\n\tconst lParentLX = new Matrix4();\n\tconst lGlobalT = new Matrix4();\n\n\tconst inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0;\n\n\tif ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );\n\n\t// For Maya models using \"Joint Orient\", Euler order only applies to rotation, not pre/post-rotations\n\tconst defaultEulerOrder = getEulerOrder( 0 );\n\n\tif ( transformData.preRotation ) {\n\n\t\tconst array = transformData.preRotation.map( MathUtils.degToRad );\n\t\tarray.push( defaultEulerOrder );\n\t\tlPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.rotation ) {\n\n\t\tconst array = transformData.rotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || defaultEulerOrder );\n\t\tlRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.postRotation ) {\n\n\t\tconst array = transformData.postRotation.map( MathUtils.degToRad );\n\t\tarray.push( defaultEulerOrder );\n\t\tlPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\t\tlPostRotationM.invert();\n\n\t}\n\n\tif ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) );\n\n\t// Pivots and offsets\n\tif ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) );\n\tif ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) );\n\tif ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) );\n\tif ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) );\n\n\t// parent transform\n\tif ( transformData.parentMatrixWorld ) {\n\n\t\tlParentLX.copy( transformData.parentMatrix );\n\t\tlParentGX.copy( transformData.parentMatrixWorld );\n\n\t}\n\n\tconst lLRM = lPreRotationM.clone().multiply( lRotationM ).multiply( lPostRotationM );\n\t// Global Rotation\n\tconst lParentGRM = new Matrix4();\n\tlParentGRM.extractRotation( lParentGX );\n\n\t// Global Shear*Scaling\n\tconst lParentTM = new Matrix4();\n\tlParentTM.copyPosition( lParentGX );\n\n\tconst lParentGRSM = lParentTM.clone().invert().multiply( lParentGX );\n\tconst lParentGSM = lParentGRM.clone().invert().multiply( lParentGRSM );\n\tconst lLSM = lScalingM;\n\n\tconst lGlobalRS = new Matrix4();\n\n\tif ( inheritType === 0 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );\n\n\t} else if ( inheritType === 1 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );\n\n\t} else {\n\n\t\tconst lParentLSM = new Matrix4().scale( new Vector3().setFromMatrixScale( lParentLX ) );\n\t\tconst lParentLSM_inv = lParentLSM.clone().invert();\n\t\tconst lParentGSM_noLocal = lParentGSM.clone().multiply( lParentLSM_inv );\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM );\n\n\t}\n\n\tconst lRotationPivotM_inv = lRotationPivotM.clone().invert();\n\tconst lScalingPivotM_inv = lScalingPivotM.clone().invert();\n\t// Calculate the local transform matrix\n\tlet lTransform = lTranslationM.clone().multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv );\n\n\tconst lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );\n\n\tconst lGlobalTranslation = lParentGX.clone().multiply( lLocalTWithAllPivotAndOffsetInfo );\n\tlGlobalT.copyPosition( lGlobalTranslation );\n\n\tlTransform = lGlobalT.clone().multiply( lGlobalRS );\n\n\t// from global to local\n\tlTransform.premultiply( lParentGX.invert() );\n\n\treturn lTransform;\n\n}\n\n// Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order\n// ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html\nfunction getEulerOrder( order ) {\n\n\torder = order || 0;\n\n\tconst enums = [\n\t\t'ZYX', // -> XYZ extrinsic\n\t\t'YZX', // -> XZY extrinsic\n\t\t'XZY', // -> YZX extrinsic\n\t\t'ZXY', // -> YXZ extrinsic\n\t\t'YXZ', // -> ZXY extrinsic\n\t\t'XYZ', // -> ZYX extrinsic\n\t\t//'SphericXYZ', // not possible to support\n\t];\n\n\tif ( order === 6 ) {\n\n\t\tconsole.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' );\n\t\treturn enums[ 0 ];\n\n\t}\n\n\treturn enums[ order ];\n\n}\n\n// Parses comma separated list of numbers and returns them an array.\n// Used internally by the TextParser\nfunction parseNumberArray( value ) {\n\n\tconst array = value.split( ',' ).map( function ( val ) {\n\n\t\treturn parseFloat( val );\n\n\t} );\n\n\treturn array;\n\n}\n\nfunction convertArrayBufferToString( buffer, from, to ) {\n\n\tif ( from === undefined ) from = 0;\n\tif ( to === undefined ) to = buffer.byteLength;\n\n\treturn new TextDecoder().decode( new Uint8Array( buffer, from, to ) );\n\n}\n\nfunction append( a, b ) {\n\n\tfor ( let i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n}\n\nfunction slice( a, b, from, to ) {\n\n\tfor ( let i = from, j = 0; i < to; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n\treturn a;\n\n}\n\n\nexport { FBXLoader };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolor.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\t\tcolors[ componentIdx ] = color.r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = color.g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tconst patternName = /solid\\s(.+)/;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst groupNames = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\tconst name = ( result = patternName.exec( solid ) ) !== null ? result[ 1 ] : '';\n\t\t\t\tgroupNames.push( name );\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.userData.groupNames = groupNames;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn new TextDecoder().decode( buffer );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","// @ts-strict-ignore\nimport { app } from '@/scripts/app'\nimport { api } from '@/scripts/api'\nimport { useToastStore } from '@/stores/toastStore'\nimport * as THREE from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'\nimport { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader'\nimport { IWidget } from '@comfyorg/litegraph'\nimport { nextTick } from 'vue'\n\nasync function uploadFile(\n load3d: Load3d,\n file: File,\n fileInput?: HTMLInputElement\n) {\n let uploadPath\n\n try {\n const body = new FormData()\n body.append('image', file)\n body.append('subfolder', '3d')\n\n const resp = await api.fetchApi('/upload/image', {\n method: 'POST',\n body\n })\n\n if (resp.status === 200) {\n const data = await resp.json()\n let path = data.name\n\n if (data.subfolder) path = data.subfolder + '/' + path\n\n uploadPath = path\n\n const modelUrl = api.apiURL(\n getResourceURL(...splitFilePath(path), 'input')\n )\n await load3d.loadModel(modelUrl, file.name)\n\n const fileExt = file.name.split('.').pop()?.toLowerCase()\n if (fileExt === 'obj' && fileInput?.files) {\n try {\n const mtlFile = Array.from(fileInput.files).find((f) =>\n f.name.toLowerCase().endsWith('.mtl')\n )\n\n if (mtlFile) {\n const mtlFormData = new FormData()\n mtlFormData.append('image', mtlFile)\n mtlFormData.append('subfolder', '3d')\n\n await api.fetchApi('/upload/image', {\n method: 'POST',\n body: mtlFormData\n })\n }\n } catch (mtlError) {\n console.warn('Failed to upload MTL file:', mtlError)\n }\n }\n } else {\n useToastStore().addAlert(resp.status + ' - ' + resp.statusText)\n }\n } catch (error) {\n console.error('Upload error:', error)\n useToastStore().addAlert(\n error instanceof Error ? error.message : 'Upload failed'\n )\n }\n\n return uploadPath\n}\n\nclass Load3d {\n scene: THREE.Scene\n perspectiveCamera: THREE.PerspectiveCamera\n orthographicCamera: THREE.OrthographicCamera\n activeCamera: THREE.Camera\n renderer: THREE.WebGLRenderer\n controls: OrbitControls\n gltfLoader: GLTFLoader\n objLoader: OBJLoader\n mtlLoader: MTLLoader\n fbxLoader: FBXLoader\n stlLoader: STLLoader\n currentModel: THREE.Object3D | null = null\n originalModel: THREE.Object3D | THREE.BufferGeometry | GLTF | null = null\n node: any\n private animationFrameId: number | null = null\n gridHelper: THREE.GridHelper\n lights: THREE.Light[] = []\n clock: THREE.Clock\n normalMaterial: THREE.MeshNormalMaterial\n standardMaterial: THREE.MeshStandardMaterial\n wireframeMaterial: THREE.MeshBasicMaterial\n depthMaterial: THREE.MeshDepthMaterial\n originalMaterials: WeakMap =\n new WeakMap()\n\n materialMode: 'original' | 'normal' | 'wireframe' | 'depth' = 'original'\n currentUpDirection: 'original' | '-x' | '+x' | '-y' | '+y' | '-z' | '+z' =\n 'original'\n originalRotation: THREE.Euler | null = null\n\n constructor(container: Element | HTMLElement) {\n this.scene = new THREE.Scene()\n\n this.perspectiveCamera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000)\n this.perspectiveCamera.position.set(5, 5, 5)\n\n const frustumSize = 10\n this.orthographicCamera = new THREE.OrthographicCamera(\n -frustumSize / 2,\n frustumSize / 2,\n frustumSize / 2,\n -frustumSize / 2,\n 0.1,\n 1000\n )\n this.orthographicCamera.position.set(5, 5, 5)\n\n this.activeCamera = this.perspectiveCamera\n\n this.perspectiveCamera.lookAt(0, 0, 0)\n this.orthographicCamera.lookAt(0, 0, 0)\n\n this.renderer = new THREE.WebGLRenderer({ antialias: true })\n this.renderer.setSize(300, 300)\n this.renderer.setClearColor(0x282828)\n\n const rendererDomElement: HTMLCanvasElement = this.renderer.domElement\n\n container.appendChild(rendererDomElement)\n\n this.controls = new OrbitControls(\n this.activeCamera,\n this.renderer.domElement\n )\n this.controls.enableDamping = true\n\n this.gltfLoader = new GLTFLoader()\n this.objLoader = new OBJLoader()\n this.mtlLoader = new MTLLoader()\n this.fbxLoader = new FBXLoader()\n this.stlLoader = new STLLoader()\n this.clock = new THREE.Clock()\n\n this.setupLights()\n\n this.gridHelper = new THREE.GridHelper(10, 10)\n this.gridHelper.position.set(0, 0, 0)\n this.scene.add(this.gridHelper)\n\n this.normalMaterial = new THREE.MeshNormalMaterial({\n flatShading: false,\n side: THREE.DoubleSide,\n normalScale: new THREE.Vector2(1, 1),\n transparent: false,\n opacity: 1.0\n })\n\n this.wireframeMaterial = new THREE.MeshBasicMaterial({\n color: 0xffffff,\n wireframe: true,\n transparent: false,\n opacity: 1.0\n })\n\n this.depthMaterial = new THREE.MeshDepthMaterial({\n depthPacking: THREE.BasicDepthPacking,\n side: THREE.DoubleSide\n })\n\n this.standardMaterial = this.createSTLMaterial()\n\n this.animate()\n\n this.handleResize()\n\n this.startAnimation()\n }\n\n getCameraState() {\n const currentType = this.getCurrentCameraType()\n return {\n position: this.activeCamera.position.clone(),\n target: this.controls.target.clone(),\n zoom:\n this.activeCamera instanceof THREE.OrthographicCamera\n ? this.activeCamera.zoom\n : (this.activeCamera as THREE.PerspectiveCamera).zoom,\n cameraType: currentType\n }\n }\n\n setCameraState(state: {\n position: THREE.Vector3\n target: THREE.Vector3\n zoom: number\n cameraType: 'perspective' | 'orthographic'\n }) {\n if (\n this.activeCamera !==\n (state.cameraType === 'perspective'\n ? this.perspectiveCamera\n : this.orthographicCamera)\n ) {\n this.toggleCamera(state.cameraType)\n }\n\n this.activeCamera.position.copy(state.position)\n\n this.controls.target.copy(state.target)\n\n if (this.activeCamera instanceof THREE.OrthographicCamera) {\n this.activeCamera.zoom = state.zoom\n this.activeCamera.updateProjectionMatrix()\n } else if (this.activeCamera instanceof THREE.PerspectiveCamera) {\n this.activeCamera.zoom = state.zoom\n this.activeCamera.updateProjectionMatrix()\n }\n\n this.controls.update()\n }\n\n setUpDirection(\n direction: 'original' | '-x' | '+x' | '-y' | '+y' | '-z' | '+z'\n ) {\n if (!this.currentModel) return\n\n if (!this.originalRotation && this.currentModel.rotation) {\n this.originalRotation = this.currentModel.rotation.clone()\n }\n\n this.currentUpDirection = direction\n\n if (this.originalRotation) {\n this.currentModel.rotation.copy(this.originalRotation)\n }\n\n switch (direction) {\n case 'original':\n break\n case '-x':\n this.currentModel.rotation.z = Math.PI / 2\n break\n case '+x':\n this.currentModel.rotation.z = -Math.PI / 2\n break\n case '-y':\n this.currentModel.rotation.x = Math.PI\n break\n case '+y':\n break\n case '-z':\n this.currentModel.rotation.x = Math.PI / 2\n break\n case '+z':\n this.currentModel.rotation.x = -Math.PI / 2\n break\n }\n\n this.renderer.render(this.scene, this.activeCamera)\n }\n\n setMaterialMode(mode: 'original' | 'normal' | 'wireframe' | 'depth') {\n this.materialMode = mode\n\n if (this.currentModel) {\n if (mode === 'depth') {\n this.renderer.outputColorSpace = THREE.LinearSRGBColorSpace\n } else {\n this.renderer.outputColorSpace = THREE.SRGBColorSpace\n }\n\n this.currentModel.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n switch (mode) {\n case 'depth':\n if (!this.originalMaterials.has(child)) {\n this.originalMaterials.set(child, child.material)\n }\n const depthMat = new THREE.MeshDepthMaterial({\n depthPacking: THREE.BasicDepthPacking,\n side: THREE.DoubleSide\n })\n\n depthMat.onBeforeCompile = (shader) => {\n shader.uniforms.cameraType = {\n value:\n this.activeCamera instanceof THREE.OrthographicCamera\n ? 1.0\n : 0.0\n }\n\n shader.fragmentShader = `\n uniform float cameraType;\n ${shader.fragmentShader}\n `\n\n shader.fragmentShader = shader.fragmentShader.replace(\n /gl_FragColor\\s*=\\s*vec4\\(\\s*vec3\\(\\s*1.0\\s*-\\s*fragCoordZ\\s*\\)\\s*,\\s*opacity\\s*\\)\\s*;/,\n `\n float depth = 1.0 - fragCoordZ;\n if (cameraType > 0.5) {\n depth = pow(depth, 400.0);\n } else {\n depth = pow(depth, 0.6);\n }\n gl_FragColor = vec4(vec3(depth), opacity);\n `\n )\n }\n\n depthMat.customProgramCacheKey = () => {\n return this.activeCamera instanceof THREE.OrthographicCamera\n ? 'ortho'\n : 'persp'\n }\n\n child.material = depthMat\n break\n case 'normal':\n if (!this.originalMaterials.has(child)) {\n this.originalMaterials.set(child, child.material)\n }\n child.material = new THREE.MeshNormalMaterial({\n flatShading: false,\n side: THREE.DoubleSide,\n normalScale: new THREE.Vector2(1, 1),\n transparent: false,\n opacity: 1.0\n })\n child.geometry.computeVertexNormals()\n break\n\n case 'wireframe':\n if (!this.originalMaterials.has(child)) {\n this.originalMaterials.set(child, child.material)\n }\n child.material = new THREE.MeshBasicMaterial({\n color: 0xffffff,\n wireframe: true,\n transparent: false,\n opacity: 1.0\n })\n break\n\n case 'original':\n const originalMaterial = this.originalMaterials.get(child)\n if (originalMaterial) {\n child.material = originalMaterial\n } else {\n child.material = this.standardMaterial\n }\n break\n }\n }\n })\n\n this.renderer.render(this.scene, this.activeCamera)\n }\n }\n\n setupLights() {\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.5)\n this.scene.add(ambientLight)\n this.lights.push(ambientLight)\n\n const mainLight = new THREE.DirectionalLight(0xffffff, 0.8)\n mainLight.position.set(0, 10, 10)\n this.scene.add(mainLight)\n this.lights.push(mainLight)\n\n const backLight = new THREE.DirectionalLight(0xffffff, 0.5)\n backLight.position.set(0, 10, -10)\n this.scene.add(backLight)\n this.lights.push(backLight)\n\n const leftFillLight = new THREE.DirectionalLight(0xffffff, 0.3)\n leftFillLight.position.set(-10, 0, 0)\n this.scene.add(leftFillLight)\n this.lights.push(leftFillLight)\n\n const rightFillLight = new THREE.DirectionalLight(0xffffff, 0.3)\n rightFillLight.position.set(10, 0, 0)\n this.scene.add(rightFillLight)\n this.lights.push(rightFillLight)\n\n const bottomLight = new THREE.DirectionalLight(0xffffff, 0.2)\n bottomLight.position.set(0, -10, 0)\n this.scene.add(bottomLight)\n this.lights.push(bottomLight)\n }\n\n toggleCamera(cameraType?: 'perspective' | 'orthographic') {\n const oldCamera = this.activeCamera\n\n const position = oldCamera.position.clone()\n const rotation = oldCamera.rotation.clone()\n const target = this.controls.target.clone()\n\n if (!cameraType) {\n this.activeCamera =\n oldCamera === this.perspectiveCamera\n ? this.orthographicCamera\n : this.perspectiveCamera\n } else {\n this.activeCamera =\n cameraType === 'perspective'\n ? this.perspectiveCamera\n : this.orthographicCamera\n\n if (oldCamera === this.activeCamera) {\n return\n }\n }\n\n this.activeCamera.position.copy(position)\n this.activeCamera.rotation.copy(rotation)\n\n if (this.materialMode === 'depth' && oldCamera !== this.activeCamera) {\n this.setMaterialMode('depth')\n }\n\n this.controls.object = this.activeCamera\n this.controls.target.copy(target)\n this.controls.update()\n\n this.handleResize()\n }\n\n getCurrentCameraType(): 'perspective' | 'orthographic' {\n return this.activeCamera === this.perspectiveCamera\n ? 'perspective'\n : 'orthographic'\n }\n\n toggleGrid(showGrid: boolean) {\n if (this.gridHelper) {\n this.gridHelper.visible = showGrid\n }\n }\n\n setLightIntensity(intensity: number) {\n this.lights.forEach((light) => {\n if (light instanceof THREE.DirectionalLight) {\n if (light === this.lights[1]) {\n light.intensity = intensity * 0.8\n } else if (light === this.lights[2]) {\n light.intensity = intensity * 0.5\n } else if (light === this.lights[5]) {\n light.intensity = intensity * 0.2\n } else {\n light.intensity = intensity * 0.3\n }\n } else if (light instanceof THREE.AmbientLight) {\n light.intensity = intensity * 0.5\n }\n })\n }\n\n startAnimation() {\n const animate = () => {\n this.animationFrameId = requestAnimationFrame(animate)\n this.controls.update()\n this.renderer.render(this.scene, this.activeCamera)\n }\n animate()\n }\n\n clearModel() {\n const objectsToRemove: THREE.Object3D[] = []\n\n this.scene.traverse((object) => {\n const isEnvironmentObject =\n object === this.gridHelper ||\n this.lights.includes(object as THREE.Light) ||\n object === this.perspectiveCamera ||\n object === this.orthographicCamera\n\n if (!isEnvironmentObject) {\n objectsToRemove.push(object)\n }\n })\n\n objectsToRemove.forEach((obj) => {\n if (obj.parent && obj.parent !== this.scene) {\n obj.parent.remove(obj)\n } else {\n this.scene.remove(obj)\n }\n\n if (obj instanceof THREE.Mesh) {\n obj.geometry?.dispose()\n if (Array.isArray(obj.material)) {\n obj.material.forEach((material) => material.dispose())\n } else {\n obj.material?.dispose()\n }\n }\n })\n\n this.resetScene()\n }\n\n protected resetScene() {\n this.currentModel = null\n this.originalRotation = null\n\n const defaultDistance = 10\n this.perspectiveCamera.position.set(\n defaultDistance,\n defaultDistance,\n defaultDistance\n )\n this.orthographicCamera.position.set(\n defaultDistance,\n defaultDistance,\n defaultDistance\n )\n\n this.perspectiveCamera.lookAt(0, 0, 0)\n this.orthographicCamera.lookAt(0, 0, 0)\n\n const frustumSize = 10\n const aspect =\n this.renderer.domElement.width / this.renderer.domElement.height\n this.orthographicCamera.left = (-frustumSize * aspect) / 2\n this.orthographicCamera.right = (frustumSize * aspect) / 2\n this.orthographicCamera.top = frustumSize / 2\n this.orthographicCamera.bottom = -frustumSize / 2\n\n this.perspectiveCamera.updateProjectionMatrix()\n this.orthographicCamera.updateProjectionMatrix()\n\n this.controls.target.set(0, 0, 0)\n this.controls.update()\n\n this.renderer.render(this.scene, this.activeCamera)\n\n this.materialMode = 'original'\n this.originalMaterials = new WeakMap()\n this.renderer.outputColorSpace = THREE.SRGBColorSpace\n }\n\n remove() {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId)\n }\n\n this.controls.dispose()\n this.renderer.dispose()\n this.renderer.domElement.remove()\n this.scene.clear()\n }\n\n protected async loadModelInternal(\n url: string,\n fileExtension: string\n ): Promise {\n let model: THREE.Object3D | null = null\n\n switch (fileExtension) {\n case 'stl':\n const geometry = await this.stlLoader.loadAsync(url)\n\n this.originalModel = geometry\n\n geometry.computeVertexNormals()\n const mesh = new THREE.Mesh(geometry, this.standardMaterial)\n const group = new THREE.Group()\n group.add(mesh)\n model = group\n break\n\n case 'fbx':\n const fbxModel = await this.fbxLoader.loadAsync(url)\n\n this.originalModel = fbxModel\n\n model = fbxModel\n\n fbxModel.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n this.originalMaterials.set(child, child.material)\n }\n })\n\n break\n\n case 'obj':\n if (this.materialMode === 'original') {\n const mtlUrl = url.replace(/\\.obj([^.]*$)/, '.mtl$1')\n try {\n const materials = await this.mtlLoader.loadAsync(mtlUrl)\n materials.preload()\n this.objLoader.setMaterials(materials)\n } catch (e) {\n console.log(\n 'No MTL file found or error loading it, continuing without materials'\n )\n }\n }\n model = await this.objLoader.loadAsync(url)\n model.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n this.originalMaterials.set(child, child.material)\n }\n })\n break\n\n case 'gltf':\n case 'glb':\n const gltf = await this.gltfLoader.loadAsync(url)\n\n this.originalModel = gltf\n\n model = gltf.scene\n gltf.scene.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n child.geometry.computeVertexNormals()\n this.originalMaterials.set(child, child.material)\n }\n })\n break\n }\n\n return model\n }\n\n async loadModel(url: string, originalFileName?: string) {\n try {\n this.clearModel()\n\n let fileExtension: string | undefined\n if (originalFileName) {\n fileExtension = originalFileName.split('.').pop()?.toLowerCase()\n } else {\n const filename = new URLSearchParams(url.split('?')[1]).get('filename')\n fileExtension = filename?.split('.').pop()?.toLowerCase()\n }\n\n if (!fileExtension) {\n useToastStore().addAlert('Could not determine file type')\n return\n }\n\n let model = await this.loadModelInternal(url, fileExtension)\n\n if (model) {\n this.currentModel = model\n await this.setupModel(model)\n }\n } catch (error) {\n console.error('Error loading model:', error)\n }\n }\n\n protected async setupModel(model: THREE.Object3D) {\n const box = new THREE.Box3().setFromObject(model)\n const size = box.getSize(new THREE.Vector3())\n const center = box.getCenter(new THREE.Vector3())\n\n const maxDim = Math.max(size.x, size.y, size.z)\n const targetSize = 5\n const scale = targetSize / maxDim\n model.scale.multiplyScalar(scale)\n\n box.setFromObject(model)\n box.getCenter(center)\n box.getSize(size)\n\n model.position.set(-center.x, -box.min.y, -center.z)\n\n this.scene.add(model)\n\n if (this.materialMode !== 'original') {\n this.setMaterialMode(this.materialMode)\n }\n\n if (this.currentUpDirection !== 'original') {\n this.setUpDirection(this.currentUpDirection)\n }\n\n await this.setupCamera(size)\n }\n\n protected async setupCamera(size: THREE.Vector3) {\n const distance = Math.max(size.x, size.z) * 2\n const height = size.y * 2\n\n this.perspectiveCamera.position.set(distance, height, distance)\n this.orthographicCamera.position.set(distance, height, distance)\n\n if (this.activeCamera === this.perspectiveCamera) {\n this.perspectiveCamera.lookAt(0, size.y / 2, 0)\n this.perspectiveCamera.updateProjectionMatrix()\n } else {\n const frustumSize = Math.max(size.x, size.y, size.z) * 2\n const aspect =\n this.renderer.domElement.width / this.renderer.domElement.height\n this.orthographicCamera.left = (-frustumSize * aspect) / 2\n this.orthographicCamera.right = (frustumSize * aspect) / 2\n this.orthographicCamera.top = frustumSize / 2\n this.orthographicCamera.bottom = -frustumSize / 2\n this.orthographicCamera.lookAt(0, size.y / 2, 0)\n this.orthographicCamera.updateProjectionMatrix()\n }\n\n this.controls.target.set(0, size.y / 2, 0)\n this.controls.update()\n\n this.renderer.outputColorSpace = THREE.SRGBColorSpace\n this.renderer.toneMapping = THREE.ACESFilmicToneMapping\n this.renderer.toneMappingExposure = 1\n\n this.handleResize()\n }\n\n handleResize() {\n const parentElement = this.renderer?.domElement?.parentElement\n\n if (!parentElement) {\n console.warn('Parent element not found')\n return\n }\n\n const width = parentElement?.clientWidth\n const height = parentElement?.clientHeight\n\n if (this.activeCamera === this.perspectiveCamera) {\n this.perspectiveCamera.aspect = width / height\n this.perspectiveCamera.updateProjectionMatrix()\n } else {\n const frustumSize = 10\n const aspect = width / height\n this.orthographicCamera.left = (-frustumSize * aspect) / 2\n this.orthographicCamera.right = (frustumSize * aspect) / 2\n this.orthographicCamera.top = frustumSize / 2\n this.orthographicCamera.bottom = -frustumSize / 2\n this.orthographicCamera.updateProjectionMatrix()\n }\n\n this.renderer.setSize(width, height)\n }\n\n animate = () => {\n requestAnimationFrame(this.animate)\n\n this.controls.update()\n this.renderer.render(this.scene, this.activeCamera)\n }\n\n captureScene(width: number, height: number): Promise {\n return new Promise((resolve, reject) => {\n try {\n const originalWidth = this.renderer.domElement.width\n const originalHeight = this.renderer.domElement.height\n\n this.renderer.setSize(width, height)\n\n if (this.activeCamera === this.perspectiveCamera) {\n this.perspectiveCamera.aspect = width / height\n this.perspectiveCamera.updateProjectionMatrix()\n } else {\n const frustumSize = 10\n const aspect = width / height\n this.orthographicCamera.left = (-frustumSize * aspect) / 2\n this.orthographicCamera.right = (frustumSize * aspect) / 2\n this.orthographicCamera.top = frustumSize / 2\n this.orthographicCamera.bottom = -frustumSize / 2\n this.orthographicCamera.updateProjectionMatrix()\n }\n\n this.renderer.render(this.scene, this.activeCamera)\n\n const imageData = this.renderer.domElement.toDataURL('image/png')\n\n this.renderer.setSize(originalWidth, originalHeight)\n this.handleResize()\n\n resolve(imageData)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n createSTLMaterial() {\n return new THREE.MeshStandardMaterial({\n color: 0x808080,\n metalness: 0.1,\n roughness: 0.8,\n flatShading: false,\n side: THREE.DoubleSide\n })\n }\n\n setViewPosition(position: 'front' | 'top' | 'right' | 'isometric') {\n if (!this.currentModel) {\n return\n }\n\n const box = new THREE.Box3()\n let center = new THREE.Vector3()\n let size = new THREE.Vector3()\n\n if (this.currentModel) {\n box.setFromObject(this.currentModel)\n box.getCenter(center)\n box.getSize(size)\n }\n\n const maxDim = Math.max(size.x, size.y, size.z)\n const distance = maxDim * 2\n\n switch (position) {\n case 'front':\n this.activeCamera.position.set(0, 0, distance)\n break\n case 'top':\n this.activeCamera.position.set(0, distance, 0)\n break\n case 'right':\n this.activeCamera.position.set(distance, 0, 0)\n break\n case 'isometric':\n this.activeCamera.position.set(distance, distance, distance)\n break\n }\n\n this.activeCamera.lookAt(center)\n this.controls.target.copy(center)\n this.controls.update()\n }\n\n setBackgroundColor(color: string) {\n this.renderer.setClearColor(new THREE.Color(color))\n this.renderer.render(this.scene, this.activeCamera)\n }\n}\n\nclass Load3dAnimation extends Load3d {\n currentAnimation: THREE.AnimationMixer | null = null\n animationActions: THREE.AnimationAction[] = []\n animationClips: THREE.AnimationClip[] = []\n selectedAnimationIndex: number = 0\n isAnimationPlaying: boolean = false\n\n animationSpeed: number = 1.0\n\n constructor(container: Element | HTMLElement) {\n super(container)\n }\n\n protected async setupModel(model: THREE.Object3D) {\n await super.setupModel(model)\n\n if (this.currentAnimation) {\n this.currentAnimation.stopAllAction()\n this.animationActions = []\n }\n\n let animations: THREE.AnimationClip[] = []\n if (model.animations?.length > 0) {\n animations = model.animations\n } else if (this.originalModel && 'animations' in this.originalModel) {\n animations = (\n this.originalModel as unknown as { animations: THREE.AnimationClip[] }\n ).animations\n }\n\n if (animations.length > 0) {\n this.animationClips = animations\n if (model.type === 'Scene') {\n this.currentAnimation = new THREE.AnimationMixer(model)\n } else {\n this.currentAnimation = new THREE.AnimationMixer(this.currentModel!)\n }\n\n if (this.animationClips.length > 0) {\n this.updateSelectedAnimation(0)\n }\n }\n }\n\n setAnimationSpeed(speed: number) {\n this.animationSpeed = speed\n this.animationActions.forEach((action) => {\n action.setEffectiveTimeScale(speed)\n })\n }\n\n updateSelectedAnimation(index: number) {\n if (\n !this.currentAnimation ||\n !this.animationClips ||\n index >= this.animationClips.length\n ) {\n console.warn('Invalid animation update request')\n return\n }\n\n this.animationActions.forEach((action) => {\n action.stop()\n })\n this.currentAnimation.stopAllAction()\n this.animationActions = []\n\n this.selectedAnimationIndex = index\n const clip = this.animationClips[index]\n\n const action = this.currentAnimation.clipAction(clip)\n\n action.setEffectiveTimeScale(this.animationSpeed)\n\n action.reset()\n action.clampWhenFinished = false\n action.loop = THREE.LoopRepeat\n\n if (this.isAnimationPlaying) {\n action.play()\n } else {\n action.play()\n action.paused = true\n }\n\n this.animationActions = [action]\n }\n\n clearModel() {\n if (this.currentAnimation) {\n this.animationActions.forEach((action) => {\n action.stop()\n })\n this.currentAnimation = null\n }\n this.animationActions = []\n this.animationClips = []\n this.selectedAnimationIndex = 0\n this.isAnimationPlaying = false\n this.animationSpeed = 1.0\n\n super.clearModel()\n }\n\n getAnimationNames(): string[] {\n return this.animationClips.map((clip, index) => {\n return clip.name || `Animation ${index + 1}`\n })\n }\n\n toggleAnimation(play?: boolean) {\n if (!this.currentAnimation || this.animationActions.length === 0) {\n console.warn('No animation to toggle')\n return\n }\n\n this.isAnimationPlaying = play ?? !this.isAnimationPlaying\n\n this.animationActions.forEach((action) => {\n if (this.isAnimationPlaying) {\n action.paused = false\n if (action.time === 0 || action.time === action.getClip().duration) {\n action.reset()\n }\n } else {\n action.paused = true\n }\n })\n }\n\n animate = () => {\n requestAnimationFrame(this.animate)\n\n if (this.currentAnimation && this.isAnimationPlaying) {\n const delta = this.clock.getDelta()\n this.currentAnimation.update(delta)\n }\n\n this.controls.update()\n this.renderer.render(this.scene, this.activeCamera)\n }\n}\n\nfunction splitFilePath(path: string): [string, string] {\n const folder_separator = path.lastIndexOf('/')\n if (folder_separator === -1) {\n return ['', path]\n }\n return [\n path.substring(0, folder_separator),\n path.substring(folder_separator + 1)\n ]\n}\n\nfunction getResourceURL(\n subfolder: string,\n filename: string,\n type: string = 'input'\n): string {\n const params = [\n 'filename=' + encodeURIComponent(filename),\n 'type=' + type,\n 'subfolder=' + subfolder,\n app.getRandParam().substring(1)\n ].join('&')\n\n return `/view?${params}`\n}\n\nconst load3dCSSCLASS = `display: flex;\n flex-direction: column;\n background: transparent;\n flex: 1;\n position: relative;\n overflow: hidden;`\n\nconst load3dCanvasCSSCLASS = `display: flex;\n width: 100% !important;\n height: 100% !important;`\n\nconst containerToLoad3D = new Map()\n\nfunction configureLoad3D(\n load3d: Load3d,\n loadFolder: 'input' | 'output',\n modelWidget: IWidget,\n showGrid: IWidget,\n cameraType: IWidget,\n view: IWidget,\n material: IWidget,\n bgColor: IWidget,\n lightIntensity: IWidget,\n upDirection: IWidget,\n cameraState?: any,\n postModelUpdateFunc?: (load3d: Load3d) => void\n) {\n const createModelUpdateHandler = () => {\n let isFirstLoad = true\n\n return async (value: string | number | boolean | object) => {\n if (!value) return\n\n const filename = value as string\n const modelUrl = api.apiURL(\n getResourceURL(...splitFilePath(filename), loadFolder)\n )\n\n await load3d.loadModel(modelUrl, filename)\n\n load3d.setMaterialMode(\n material.value as 'original' | 'normal' | 'wireframe'\n )\n\n load3d.setUpDirection(\n upDirection.value as\n | 'original'\n | '-x'\n | '+x'\n | '-y'\n | '+y'\n | '-z'\n | '+z'\n )\n\n if (postModelUpdateFunc) {\n postModelUpdateFunc(load3d)\n }\n\n if (isFirstLoad && cameraState && typeof cameraState === 'object') {\n try {\n load3d.setCameraState(cameraState)\n } catch (error) {\n console.warn('Failed to restore camera state:', error)\n }\n isFirstLoad = false\n }\n }\n }\n\n const onModelWidgetUpdate = createModelUpdateHandler()\n\n if (modelWidget.value) {\n onModelWidgetUpdate(modelWidget.value)\n }\n\n modelWidget.callback = onModelWidgetUpdate\n\n load3d.toggleGrid(showGrid.value as boolean)\n\n showGrid.callback = (value: boolean) => {\n load3d.toggleGrid(value)\n }\n\n load3d.toggleCamera(cameraType.value as 'perspective' | 'orthographic')\n\n cameraType.callback = (value: 'perspective' | 'orthographic') => {\n load3d.toggleCamera(value)\n }\n\n view.callback = (value: 'front' | 'top' | 'right' | 'isometric') => {\n load3d.setViewPosition(value)\n }\n\n material.callback = (value: 'original' | 'normal' | 'wireframe') => {\n load3d.setMaterialMode(value)\n }\n\n load3d.setMaterialMode(material.value as 'original' | 'normal' | 'wireframe')\n\n load3d.setBackgroundColor(bgColor.value as string)\n\n bgColor.callback = (value: string) => {\n load3d.setBackgroundColor(value)\n }\n\n load3d.setLightIntensity(lightIntensity.value as number)\n\n lightIntensity.callback = (value: number) => {\n load3d.setLightIntensity(value)\n }\n\n upDirection.callback = (\n value: 'original' | '-x' | '+x' | '-y' | '+y' | '-z' | '+z'\n ) => {\n load3d.setUpDirection(value)\n }\n\n load3d.setUpDirection(\n upDirection.value as 'original' | '-x' | '+x' | '-y' | '+y' | '-z' | '+z'\n )\n}\n\napp.registerExtension({\n name: 'Comfy.Load3D',\n\n getCustomWidgets(app) {\n return {\n LOAD_3D(node, inputName) {\n let load3dNode = app.graph._nodes.filter((wi) => wi.type == 'Load3D')\n\n node.addProperty('Camera Info', '')\n\n const container = document.createElement('div')\n container.id = `comfy-load-3d-${load3dNode.length}`\n container.classList.add('comfy-load-3d')\n\n const load3d = new Load3d(container)\n\n containerToLoad3D.set(container.id, load3d)\n\n node.onResize = function () {\n if (load3d) {\n load3d.handleResize()\n }\n }\n\n const origOnRemoved = node.onRemoved\n\n node.onRemoved = function () {\n if (load3d) {\n load3d.remove()\n }\n\n containerToLoad3D.delete(container.id)\n\n origOnRemoved?.apply(this, [])\n }\n\n node.onDrawBackground = function () {\n load3d.renderer.domElement.hidden = this.flags.collapsed ?? false\n }\n\n const fileInput = document.createElement('input')\n fileInput.type = 'file'\n fileInput.accept = '.gltf,.glb,.obj,.mtl,.fbx,.stl'\n fileInput.style.display = 'none'\n fileInput.onchange = async () => {\n if (fileInput.files?.length) {\n const modelWidget = node.widgets?.find(\n (w: IWidget) => w.name === 'model_file'\n )\n const uploadPath = await uploadFile(\n load3d,\n fileInput.files[0],\n fileInput\n ).catch((error) => {\n console.error('File upload failed:', error)\n useToastStore().addAlert('File upload failed')\n })\n\n if (uploadPath && modelWidget) {\n if (!modelWidget.options?.values?.includes(uploadPath)) {\n modelWidget.options?.values?.push(uploadPath)\n }\n\n modelWidget.value = uploadPath\n }\n }\n }\n\n node.addWidget('button', 'upload 3d model', 'upload3dmodel', () => {\n fileInput.click()\n })\n\n node.addWidget('button', 'clear', 'clear', () => {\n load3d.clearModel()\n const modelWidget = node.widgets?.find(\n (w: IWidget) => w.name === 'model_file'\n )\n if (modelWidget) {\n modelWidget.value = ''\n }\n })\n\n return {\n widget: node.addDOMWidget(inputName, 'LOAD_3D', container)\n }\n }\n }\n },\n\n init() {\n const style = document.createElement('style')\n\n style.innerText = `\n .comfy-load-3d {\n ${load3dCSSCLASS}\n }\n \n .comfy-load-3d canvas {\n ${load3dCanvasCSSCLASS}\n }\n `\n document.head.appendChild(style)\n },\n\n async nodeCreated(node) {\n if (node.constructor.comfyClass !== 'Load3D') return\n\n const [oldWidth, oldHeight] = node.size\n\n node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 600)])\n\n await nextTick()\n\n const sceneWidget = node.widgets.find((w: IWidget) => w.name === 'image')\n\n const container = sceneWidget.element\n\n const load3d = containerToLoad3D.get(container.id)\n\n const modelWidget = node.widgets.find(\n (w: IWidget) => w.name === 'model_file'\n )\n\n const showGrid = node.widgets.find((w: IWidget) => w.name === 'show_grid')\n\n const cameraType = node.widgets.find(\n (w: IWidget) => w.name === 'camera_type'\n )\n\n const view = node.widgets.find((w: IWidget) => w.name === 'view')\n\n const material = node.widgets.find((w: IWidget) => w.name === 'material')\n\n const bgColor = node.widgets.find((w: IWidget) => w.name === 'bg_color')\n\n const lightIntensity = node.widgets.find(\n (w: IWidget) => w.name === 'light_intensity'\n )\n\n const upDirection = node.widgets.find(\n (w: IWidget) => w.name === 'up_direction'\n )\n\n let cameraState\n try {\n const cameraInfo = node.properties['Camera Info']\n if (\n cameraInfo &&\n typeof cameraInfo === 'string' &&\n cameraInfo.trim() !== ''\n ) {\n cameraState = JSON.parse(cameraInfo)\n }\n } catch (error) {\n console.warn('Failed to parse camera state:', error)\n cameraState = undefined\n }\n\n configureLoad3D(\n load3d,\n 'input',\n modelWidget,\n showGrid,\n cameraType,\n view,\n material,\n bgColor,\n lightIntensity,\n upDirection,\n cameraState\n )\n\n const w = node.widgets.find((w: IWidget) => w.name === 'width')\n const h = node.widgets.find((w: IWidget) => w.name === 'height')\n\n // @ts-expect-error hacky override\n sceneWidget.serializeValue = async () => {\n node.properties['Camera Info'] = JSON.stringify(load3d.getCameraState())\n\n const imageData = await load3d.captureScene(w.value, h.value)\n\n const blob = await fetch(imageData).then((r) => r.blob())\n const name = `scene_${Date.now()}.png`\n const file = new File([blob], name)\n\n const body = new FormData()\n body.append('image', file)\n body.append('subfolder', 'threed')\n body.append('type', 'temp')\n\n const resp = await api.fetchApi('/upload/image', {\n method: 'POST',\n body\n })\n\n if (resp.status !== 200) {\n const err = `Error uploading scene capture: ${resp.status} - ${resp.statusText}`\n useToastStore().addAlert(err)\n throw new Error(err)\n }\n\n const data = await resp.json()\n return `threed/${data.name} [temp]`\n }\n }\n})\n\napp.registerExtension({\n name: 'Comfy.Load3DAnimation',\n\n getCustomWidgets(app) {\n return {\n LOAD_3D_ANIMATION(node, inputName) {\n let load3dNode = app.graph._nodes.filter(\n (wi) => wi.type == 'Load3DAnimation'\n )\n\n node.addProperty('Camera Info', '')\n\n const container = document.createElement('div')\n container.id = `comfy-load-3d-animation-${load3dNode.length}`\n container.classList.add('comfy-load-3d-animation')\n\n const load3d = new Load3dAnimation(container)\n\n containerToLoad3D.set(container.id, load3d)\n\n node.onResize = function () {\n if (load3d) {\n load3d.handleResize()\n }\n }\n\n const origOnRemoved = node.onRemoved\n\n node.onRemoved = function () {\n if (load3d) {\n load3d.remove()\n }\n\n containerToLoad3D.delete(container.id)\n\n origOnRemoved?.apply(this, [])\n }\n\n node.onDrawBackground = function () {\n load3d.renderer.domElement.hidden = this.flags.collapsed ?? false\n }\n\n const fileInput = document.createElement('input')\n fileInput.type = 'file'\n fileInput.accept = '.fbx,glb,gltf'\n fileInput.style.display = 'none'\n fileInput.onchange = async () => {\n if (fileInput.files?.length) {\n const modelWidget = node.widgets?.find(\n (w: IWidget) => w.name === 'model_file'\n )\n const uploadPath = await uploadFile(\n load3d,\n fileInput.files[0],\n fileInput\n ).catch((error) => {\n console.error('File upload failed:', error)\n useToastStore().addAlert('File upload failed')\n })\n\n if (uploadPath && modelWidget) {\n if (!modelWidget.options?.values?.includes(uploadPath)) {\n modelWidget.options?.values?.push(uploadPath)\n }\n\n modelWidget.value = uploadPath\n }\n }\n }\n\n node.addWidget('button', 'upload 3d model', 'upload3dmodel', () => {\n fileInput.click()\n })\n\n node.addWidget('button', 'clear', 'clear', () => {\n load3d.clearModel()\n const modelWidget = node.widgets?.find(\n (w: IWidget) => w.name === 'model_file'\n )\n if (modelWidget) {\n modelWidget.value = ''\n }\n\n const animationSelect = node.widgets?.find(\n (w: IWidget) => w.name === 'animation'\n )\n\n if (animationSelect) {\n animationSelect.options.values = []\n animationSelect.value = ''\n }\n\n const speedSelect = node.widgets?.find(\n (w: IWidget) => w.name === 'animation_speed'\n )\n\n if (speedSelect) {\n speedSelect.value = '1'\n }\n })\n\n node.addWidget(\n 'button',\n 'Play/Pause Animation',\n 'toggle_animation',\n () => {\n load3d.toggleAnimation()\n }\n )\n\n const animationSelect = node.addWidget(\n 'combo',\n 'animation',\n '',\n () => '',\n {\n values: []\n }\n ) as IWidget\n\n animationSelect.callback = (value: string) => {\n const names = load3d.getAnimationNames()\n const index = names.indexOf(value)\n\n if (index !== -1) {\n const wasPlaying = load3d.isAnimationPlaying\n\n if (wasPlaying) {\n load3d.toggleAnimation(false)\n }\n\n load3d.updateSelectedAnimation(index)\n\n if (wasPlaying) {\n load3d.toggleAnimation(true)\n }\n }\n }\n\n return {\n widget: node.addDOMWidget(inputName, 'LOAD_3D_ANIMATION', container)\n }\n }\n }\n },\n\n init() {\n const style = document.createElement('style')\n\n style.innerText = `\n .comfy-load-3d-animation {\n ${load3dCSSCLASS}\n }\n \n .comfy-load-3d-animation canvas {\n ${load3dCanvasCSSCLASS}\n }\n `\n document.head.appendChild(style)\n },\n\n async nodeCreated(node) {\n if (node.constructor.comfyClass !== 'Load3DAnimation') return\n\n const [oldWidth, oldHeight] = node.size\n\n node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 700)])\n\n await nextTick()\n\n const sceneWidget = node.widgets.find((w: IWidget) => w.name === 'image')\n\n const container = sceneWidget.element\n\n const load3d = containerToLoad3D.get(container.id)\n\n const modelWidget = node.widgets.find(\n (w: IWidget) => w.name === 'model_file'\n )\n\n const showGrid = node.widgets.find((w: IWidget) => w.name === 'show_grid')\n\n const cameraType = node.widgets.find(\n (w: IWidget) => w.name === 'camera_type'\n )\n\n const view = node.widgets.find((w: IWidget) => w.name === 'view')\n\n const material = node.widgets.find((w: IWidget) => w.name === 'material')\n\n const bgColor = node.widgets.find((w: IWidget) => w.name === 'bg_color')\n\n const lightIntensity = node.widgets.find(\n (w: IWidget) => w.name === 'light_intensity'\n )\n\n const upDirection = node.widgets.find(\n (w: IWidget) => w.name === 'up_direction'\n )\n\n const speedSelect = node.widgets.find(\n (w: IWidget) => w.name === 'animation_speed'\n )\n\n speedSelect.callback = (value: string) => {\n const load3d = containerToLoad3D.get(container.id) as Load3dAnimation\n if (load3d) {\n load3d.setAnimationSpeed(parseFloat(value))\n }\n }\n\n let cameraState\n try {\n const cameraInfo = node.properties['Camera Info']\n if (\n cameraInfo &&\n typeof cameraInfo === 'string' &&\n cameraInfo.trim() !== ''\n ) {\n cameraState = JSON.parse(cameraInfo)\n }\n } catch (error) {\n console.warn('Failed to parse camera state:', error)\n cameraState = undefined\n }\n\n configureLoad3D(\n load3d,\n 'input',\n modelWidget,\n showGrid,\n cameraType,\n view,\n material,\n bgColor,\n lightIntensity,\n upDirection,\n cameraState,\n (load3d: Load3d) => {\n const animationLoad3d = load3d as Load3dAnimation\n const names = animationLoad3d.getAnimationNames()\n\n const animationSelect = node.widgets.find(\n (w: IWidget) => w.name === 'animation'\n )\n\n animationSelect.options.values = names\n if (names.length) {\n animationSelect.value = names[0]\n }\n }\n )\n\n const w = node.widgets.find((w: IWidget) => w.name === 'width')\n const h = node.widgets.find((w: IWidget) => w.name === 'height')\n\n // @ts-expect-error hacky override\n sceneWidget.serializeValue = async () => {\n node.properties['Camera Info'] = JSON.stringify(load3d.getCameraState())\n\n load3d.toggleAnimation(false)\n\n const imageData = await load3d.captureScene(w.value, h.value)\n\n const blob = await fetch(imageData).then((r) => r.blob())\n const name = `scene_${Date.now()}.png`\n const file = new File([blob], name)\n\n const body = new FormData()\n body.append('image', file)\n body.append('subfolder', 'threed')\n body.append('type', 'temp')\n\n const resp = await api.fetchApi('/upload/image', {\n method: 'POST',\n body\n })\n\n if (resp.status !== 200) {\n const err = `Error uploading scene capture: ${resp.status} - ${resp.statusText}`\n useToastStore().addAlert(err)\n throw new Error(err)\n }\n\n const data = await resp.json()\n return `threed/${data.name} [temp]`\n }\n }\n})\n\napp.registerExtension({\n name: 'Comfy.Preview3D',\n\n getCustomWidgets(app) {\n return {\n PREVIEW_3D(node, inputName) {\n let load3dNode = app.graph._nodes.filter((wi) => wi.type == 'Preview3D')\n\n const container = document.createElement('div')\n container.id = `comfy-preview-3d-${load3dNode.length}`\n container.classList.add('comfy-preview-3d')\n\n const load3d = new Load3d(container)\n\n containerToLoad3D.set(container.id, load3d)\n\n node.onResize = function () {\n if (load3d) {\n load3d.handleResize()\n }\n }\n\n const origOnRemoved = node.onRemoved\n\n node.onRemoved = function () {\n if (load3d) {\n load3d.remove()\n }\n\n containerToLoad3D.delete(container.id)\n\n origOnRemoved?.apply(this, [])\n }\n\n node.onDrawBackground = function () {\n load3d.renderer.domElement.hidden = this.flags.collapsed ?? false\n }\n\n return {\n widget: node.addDOMWidget(inputName, 'PREVIEW_3D', container)\n }\n }\n }\n },\n\n init() {\n const style = document.createElement('style')\n\n style.innerText = `\n .comfy-preview-3d {\n ${load3dCSSCLASS}\n }\n \n .comfy-preview-3d canvas {\n ${load3dCanvasCSSCLASS}\n }\n `\n document.head.appendChild(style)\n },\n\n async nodeCreated(node) {\n if (node.constructor.comfyClass !== 'Preview3D') return\n\n const [oldWidth, oldHeight] = node.size\n\n node.setSize([Math.max(oldWidth, 300), Math.max(oldHeight, 550)])\n\n await nextTick()\n\n const sceneWidget = node.widgets.find((w: IWidget) => w.name === 'image')\n\n const container = sceneWidget.element\n\n const load3d = containerToLoad3D.get(container.id)\n\n const modelWidget = node.widgets.find(\n (w: IWidget) => w.name === 'model_file'\n )\n\n const showGrid = node.widgets.find((w: IWidget) => w.name === 'show_grid')\n\n const cameraType = node.widgets.find(\n (w: IWidget) => w.name === 'camera_type'\n )\n\n const view = node.widgets.find((w: IWidget) => w.name === 'view')\n\n const material = node.widgets.find((w: IWidget) => w.name === 'material')\n\n const bgColor = node.widgets.find((w: IWidget) => w.name === 'bg_color')\n\n const lightIntensity = node.widgets.find(\n (w: IWidget) => w.name === 'light_intensity'\n )\n\n const upDirection = node.widgets.find(\n (w: IWidget) => w.name === 'up_direction'\n )\n\n configureLoad3D(\n load3d,\n 'output',\n modelWidget,\n showGrid,\n cameraType,\n view,\n material,\n bgColor,\n lightIntensity,\n upDirection\n )\n }\n})\n"],"names":["self","td","app","ext","PREFIX","SEPARATOR","type","t","id","def","node","link","i","fill","w","widget","group","PointerType","CompositionOperation","px","py","x","y","BrushShape","Tools","MaskBlendMode","ColorComparisonMethod","err","max","point","file","scale","splitFilePath","getResourceURL","uploadFile","audio","electronAPI","getElectronAPI","b2","te","tmp","sign","_color","data","tmp2","indices","intersects","intersect","width","height","depth","fov","aspect","renderer","scene","alpha","attributes","precision","_frustum","drawBuffers","scissor","viewport","_canvas","texture","cameraL","cameraR","cameras","cameraXR","info","chunkOffset","_projScreenMatrix","_vector3","stencil","bits","drawCount","materials","currentRenderList","parameters","reverseDepthBuffer","framebuffer","_vA","_vB","_vC","_identityMatrix","index","l","_ray","t2","vertex","detail","radius","azimuth","bs","contour","p","q","json","loadImage","now","shapes","tmpPath","tmpShape","document","_geometry","_tempA","_morphA","object","morphTargetsRelative","a","b","c","il","res","URL","sourceURI","accessor","name","_a","_b","dat","fl","Deflate","AsyncDeflate","Inflate","AsyncInflate","Gzip","AsyncGzip","Gunzip","AsyncGunzip","Zlib","AsyncZlib","Unzlib","AsyncUnzlib","Decompress","AsyncDecompress","DecodeUTF8","EncodeUTF8","ZipPassThrough","ZipDeflate","AsyncZipDeflate","Zip","UnzipPassThrough","UnzipInflate","AsyncUnzipInflate","Unzip","final","e","r","j","NURBSUtils.calcBSplinePoint","NURBSUtils.calcNURBSDerivatives","child","material","skeleton","fflate.unzlibSync","THREE.Scene","THREE.PerspectiveCamera","THREE.OrthographicCamera","THREE.WebGLRenderer","THREE.Clock","THREE.GridHelper","THREE.MeshNormalMaterial","THREE.DoubleSide","THREE.Vector2","THREE.MeshBasicMaterial","THREE.MeshDepthMaterial","THREE.BasicDepthPacking","THREE.LinearSRGBColorSpace","THREE.SRGBColorSpace","THREE.Mesh","THREE.AmbientLight","THREE.DirectionalLight","THREE.Group","THREE.Box3","THREE.Vector3","THREE.ACESFilmicToneMapping","THREE.MeshStandardMaterial","THREE.Color","THREE.AnimationMixer","action","THREE.LoopRepeat","animationSelect","load3d"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","x_google_ignoreList":[21,22,23,24,25,26,27,28,29,30,31]} \ No newline at end of file diff --git a/web/assets/index-DjWyclij.css b/web/assets/index-BRhY6FpL.css similarity index 100% rename from web/assets/index-DjWyclij.css rename to web/assets/index-BRhY6FpL.css diff --git a/web/assets/index-CaD4RONs.js b/web/assets/index-CSl7lfOs.js similarity index 52% rename from web/assets/index-CaD4RONs.js rename to web/assets/index-CSl7lfOs.js index 07f9f3a07..0f81947f6 100644 --- a/web/assets/index-CaD4RONs.js +++ b/web/assets/index-CSl7lfOs.js @@ -1,74 +1,6 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-DkvOTKox.js","./index-DjWyclij.css","./userSelection-GRU1gtOt.js","./userSelection-BGzn1LuN.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./KeybindingPanel-BlOA8Yhu.js","./index-CgmI-OoW.js","./index-aSkd2KAK.js","./KeybindingPanel-C3wT8hYZ.css","./ExtensionPanel-DgaZovwi.js","./ServerConfigPanel-6N6BTSXC.js","./serverConfigStore-D4vD2qBB.js","./index-BNMdgttb.js","./widgetInputs-4aSRGZNs.js","./index-BRhY6FpL.css","./GraphView-DMP_lefG.js","./GraphView-B3TpSwhZ.css","./ServerStartView-BykYRkoj.js","./ServerStartView-BHqjjHcl.css","./InstallView-D4T0qJ1I.js","./InstallView-8N2LdZUx.css","./WelcomeView-D6WEsVyp.js","./WelcomeView-BD34JMsC.css"])))=>i.map(i=>d[i]); var __defProp2 = Object.defineProperty; -var __defProps2 = Object.defineProperties; -var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols2 = Object.getOwnPropertySymbols; -var __hasOwnProp2 = Object.prototype.hasOwnProperty; -var __propIsEnum2 = Object.prototype.propertyIsEnumerable; -var __typeError = (msg) => { - throw TypeError(msg); -}; -var __defNormalProp2 = (obj, key, value3) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value: value3 }) : obj[key] = value3; -var __spreadValues2 = (a, b) => { - for (var prop2 in b || (b = {})) - if (__hasOwnProp2.call(b, prop2)) - __defNormalProp2(a, prop2, b[prop2]); - if (__getOwnPropSymbols2) - for (var prop2 of __getOwnPropSymbols2(b)) { - if (__propIsEnum2.call(b, prop2)) - __defNormalProp2(a, prop2, b[prop2]); - } - return a; -}; -var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b)); var __name = (target, value3) => __defProp2(target, "name", { value: value3, configurable: true }); -var __objRest2 = (source, exclude) => { - var target = {}; - for (var prop2 in source) - if (__hasOwnProp2.call(source, prop2) && exclude.indexOf(prop2) < 0) - target[prop2] = source[prop2]; - if (source != null && __getOwnPropSymbols2) - for (var prop2 of __getOwnPropSymbols2(source)) { - if (exclude.indexOf(prop2) < 0 && __propIsEnum2.call(source, prop2)) - target[prop2] = source[prop2]; - } - return target; -}; -var __publicField2 = (obj, key, value3) => __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value3); -var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); -var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); -var __privateAdd = (obj, member, value3) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value3); -var __privateSet = (obj, member, value3, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value3) : member.set(obj, value3), value3); -var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method); -var __privateWrapper = (obj, member, setter, getter) => ({ - set _(value3) { - __privateSet(obj, member, value3, setter); - }, - get _() { - return __privateGet(obj, member, getter); - } -}); -var __async = (__this, __arguments, generator) => { - return new Promise((resolve8, reject2) => { - var fulfilled = (value3) => { - try { - step2(generator.next(value3)); - } catch (e) { - reject2(e); - } - }; - var rejected = (value3) => { - try { - step2(generator.throw(value3)); - } catch (e) { - reject2(e); - } - }; - var step2 = (x2) => x2.done ? resolve8(x2.value) : Promise.resolve(x2.value).then(fulfilled, rejected); - step2((generator = generator.apply(__this, __arguments)).next()); - }); -}; -var _a, _registered, _ComfyApi_instances, pollQueue_fn, createSocket_fn, postItem_fn, _buttons, _b, _ComfySettingsDialog_instances, dispatchChange_fn, _type, _text, _reverse, _enabled, _console, _over, _popupOpen, _ComfyPopup_instances, hide_fn, show_fn, _escHandler, _clickHandler, _internalQueueSize, _app, _ChangeTracker_instances, setApp_fn, _resolve, _activePromptId, _unsavedCount, _activeWorkflow, _ComfyWorkflowManager_instances, bindExecutionEvents_fn, _name, _path, _pathParts, _isFavorite, _ComfyWorkflow_instances, updatePath_fn, save_fn, _first, _updateProgress, _updateActive, _ComfyWorkflowsMenu_instances, bindEvents_fn, getMenuOptions_fn, getFavoriteMenuOptions_fn, _ComfyWorkflowsContent_instances, expandNode_fn, updateActive_fn, removeActive_fn, getFavoriteIcon_fn, getFavoriteOverIcon_fn, getFavoriteTooltip_fn, getFavoriteButton_fn, getDeleteButton_fn, getInsertButton_fn, getRenameButton_fn, getWorkflowElement_fn, createLeafNode_fn, createNode_fn, _options, _sizeBreak, _lastSizeBreaks, _sizeBreaks, _cachedInnerSize, _cacheTimeout, _c, _d, _queueItems, _processingQueue, _ComfyApp_instances, invokeExtensions_fn, invokeExtensionsAsync_fn, addRestoreWorkflowView_fn, addNodeContextMenuHandler_fn, addNodeKeyHandler_fn, addDrawBackgroundHandler_fn, addDropHandler_fn, addPasteHandler_fn, addCopyHandler_fn, addProcessMouseHandler_fn, addProcessKeyHandler_fn, addDrawGroupsHandler_fn, addDrawNodeHandler_fn, addApiUpdateHandlers_fn, addKeyboardHandler_fn, addConfigureHandler_fn, addAfterConfigureHandler_fn, loadExtensions_fn, migrateSettings_fn, setUser_fn, formatPromptError_fn, formatExecutionError_fn; (/* @__PURE__ */ __name(function polyfill() { const relList = document.createElement("link").relList; if (relList && relList.supports && relList.supports("modulepreload")) { @@ -108,1217 +40,6 @@ var _a, _registered, _ComfyApi_instances, pollQueue_fn, createSocket_fn, postIte } __name(processPreload, "processPreload"); }, "polyfill"))(); -var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -function getDefaultExportFromCjs(x2) { - return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2; -} -__name(getDefaultExportFromCjs, "getDefaultExportFromCjs"); -function getDefaultExportFromNamespaceIfPresent(n) { - return n && Object.prototype.hasOwnProperty.call(n, "default") ? n["default"] : n; -} -__name(getDefaultExportFromNamespaceIfPresent, "getDefaultExportFromNamespaceIfPresent"); -function getDefaultExportFromNamespaceIfNotNamed(n) { - return n && Object.prototype.hasOwnProperty.call(n, "default") && Object.keys(n).length === 1 ? n["default"] : n; -} -__name(getDefaultExportFromNamespaceIfNotNamed, "getDefaultExportFromNamespaceIfNotNamed"); -function getAugmentedNamespace(n) { - if (n.__esModule) return n; - var f = n.default; - if (typeof f == "function") { - var a = /* @__PURE__ */ __name(function a2() { - if (this instanceof a2) { - return Reflect.construct(f, arguments, this.constructor); - } - return f.apply(this, arguments); - }, "a"); - a.prototype = f.prototype; - } else a = {}; - Object.defineProperty(a, "__esModule", { value: true }); - Object.keys(n).forEach(function(k) { - var d = Object.getOwnPropertyDescriptor(n, k); - Object.defineProperty(a, k, d.get ? d : { - enumerable: true, - get: /* @__PURE__ */ __name(function() { - return n[k]; - }, "get") - }); - }); - return a; -} -__name(getAugmentedNamespace, "getAugmentedNamespace"); -var _Reflect = {}; -/*! ***************************************************************************** -Copyright (C) Microsoft. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -var Reflect$1; -(function(Reflect2) { - (function(factory) { - var root26 = typeof globalThis === "object" ? globalThis : typeof commonjsGlobal === "object" ? commonjsGlobal : typeof self === "object" ? self : typeof this === "object" ? this : sloppyModeThis(); - var exporter = makeExporter(Reflect2); - if (typeof root26.Reflect !== "undefined") { - exporter = makeExporter(root26.Reflect, exporter); - } - factory(exporter, root26); - if (typeof root26.Reflect === "undefined") { - root26.Reflect = Reflect2; - } - function makeExporter(target, previous) { - return function(key, value3) { - Object.defineProperty(target, key, { configurable: true, writable: true, value: value3 }); - if (previous) - previous(key, value3); - }; - } - __name(makeExporter, "makeExporter"); - function functionThis() { - try { - return Function("return this;")(); - } catch (_2) { - } - } - __name(functionThis, "functionThis"); - function indirectEvalThis() { - try { - return (void 0, eval)("(function() { return this; })()"); - } catch (_2) { - } - } - __name(indirectEvalThis, "indirectEvalThis"); - function sloppyModeThis() { - return functionThis() || indirectEvalThis(); - } - __name(sloppyModeThis, "sloppyModeThis"); - })(function(exporter, root26) { - var hasOwn2 = Object.prototype.hasOwnProperty; - var supportsSymbol = typeof Symbol === "function"; - var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== "undefined" ? Symbol.toPrimitive : "@@toPrimitive"; - var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== "undefined" ? Symbol.iterator : "@@iterator"; - var supportsCreate = typeof Object.create === "function"; - var supportsProto = { __proto__: [] } instanceof Array; - var downLevel = !supportsCreate && !supportsProto; - var HashMap = { - // create an object in dictionary mode (a.k.a. "slow" mode in v8) - create: supportsCreate ? function() { - return MakeDictionary(/* @__PURE__ */ Object.create(null)); - } : supportsProto ? function() { - return MakeDictionary({ __proto__: null }); - } : function() { - return MakeDictionary({}); - }, - has: downLevel ? function(map2, key) { - return hasOwn2.call(map2, key); - } : function(map2, key) { - return key in map2; - }, - get: downLevel ? function(map2, key) { - return hasOwn2.call(map2, key) ? map2[key] : void 0; - } : function(map2, key) { - return map2[key]; - } - }; - var functionPrototype = Object.getPrototypeOf(Function); - var _Map = typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill(); - var _Set = typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill(); - var _WeakMap = typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill(); - var registrySymbol = supportsSymbol ? Symbol.for("@reflect-metadata:registry") : void 0; - var metadataRegistry = GetOrCreateMetadataRegistry(); - var metadataProvider = CreateMetadataProvider(metadataRegistry); - function decorate(decorators, target, propertyKey, attributes) { - if (!IsUndefined(propertyKey)) { - if (!IsArray(decorators)) - throw new TypeError(); - if (!IsObject(target)) - throw new TypeError(); - if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes)) - throw new TypeError(); - if (IsNull(attributes)) - attributes = void 0; - propertyKey = ToPropertyKey(propertyKey); - return DecorateProperty(decorators, target, propertyKey, attributes); - } else { - if (!IsArray(decorators)) - throw new TypeError(); - if (!IsConstructor(target)) - throw new TypeError(); - return DecorateConstructor(decorators, target); - } - } - __name(decorate, "decorate"); - exporter("decorate", decorate); - function metadata(metadataKey, metadataValue) { - function decorator(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey)) - throw new TypeError(); - OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); - } - __name(decorator, "decorator"); - return decorator; - } - __name(metadata, "metadata"); - exporter("metadata", metadata); - function defineMetadata(metadataKey, metadataValue, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); - } - __name(defineMetadata, "defineMetadata"); - exporter("defineMetadata", defineMetadata); - function hasMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryHasMetadata(metadataKey, target, propertyKey); - } - __name(hasMetadata, "hasMetadata"); - exporter("hasMetadata", hasMetadata); - function hasOwnMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey); - } - __name(hasOwnMetadata, "hasOwnMetadata"); - exporter("hasOwnMetadata", hasOwnMetadata); - function getMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryGetMetadata(metadataKey, target, propertyKey); - } - __name(getMetadata, "getMetadata"); - exporter("getMetadata", getMetadata); - function getOwnMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey); - } - __name(getOwnMetadata, "getOwnMetadata"); - exporter("getOwnMetadata", getOwnMetadata); - function getMetadataKeys(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryMetadataKeys(target, propertyKey); - } - __name(getMetadataKeys, "getMetadataKeys"); - exporter("getMetadataKeys", getMetadataKeys); - function getOwnMetadataKeys(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryOwnMetadataKeys(target, propertyKey); - } - __name(getOwnMetadataKeys, "getOwnMetadataKeys"); - exporter("getOwnMetadataKeys", getOwnMetadataKeys); - function deleteMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - var provider = GetMetadataProvider( - target, - propertyKey, - /*Create*/ - false - ); - if (IsUndefined(provider)) - return false; - return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey); - } - __name(deleteMetadata, "deleteMetadata"); - exporter("deleteMetadata", deleteMetadata); - function DecorateConstructor(decorators, target) { - for (var i2 = decorators.length - 1; i2 >= 0; --i2) { - var decorator = decorators[i2]; - var decorated = decorator(target); - if (!IsUndefined(decorated) && !IsNull(decorated)) { - if (!IsConstructor(decorated)) - throw new TypeError(); - target = decorated; - } - } - return target; - } - __name(DecorateConstructor, "DecorateConstructor"); - function DecorateProperty(decorators, target, propertyKey, descriptor) { - for (var i2 = decorators.length - 1; i2 >= 0; --i2) { - var decorator = decorators[i2]; - var decorated = decorator(target, propertyKey, descriptor); - if (!IsUndefined(decorated) && !IsNull(decorated)) { - if (!IsObject(decorated)) - throw new TypeError(); - descriptor = decorated; - } - } - return descriptor; - } - __name(DecorateProperty, "DecorateProperty"); - function OrdinaryHasMetadata(MetadataKey, O, P) { - var hasOwn3 = OrdinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn3) - return true; - var parent = OrdinaryGetPrototypeOf(O); - if (!IsNull(parent)) - return OrdinaryHasMetadata(MetadataKey, parent, P); - return false; - } - __name(OrdinaryHasMetadata, "OrdinaryHasMetadata"); - function OrdinaryHasOwnMetadata(MetadataKey, O, P) { - var provider = GetMetadataProvider( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(provider)) - return false; - return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P)); - } - __name(OrdinaryHasOwnMetadata, "OrdinaryHasOwnMetadata"); - function OrdinaryGetMetadata(MetadataKey, O, P) { - var hasOwn3 = OrdinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn3) - return OrdinaryGetOwnMetadata(MetadataKey, O, P); - var parent = OrdinaryGetPrototypeOf(O); - if (!IsNull(parent)) - return OrdinaryGetMetadata(MetadataKey, parent, P); - return void 0; - } - __name(OrdinaryGetMetadata, "OrdinaryGetMetadata"); - function OrdinaryGetOwnMetadata(MetadataKey, O, P) { - var provider = GetMetadataProvider( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(provider)) - return; - return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P); - } - __name(OrdinaryGetOwnMetadata, "OrdinaryGetOwnMetadata"); - function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) { - var provider = GetMetadataProvider( - O, - P, - /*Create*/ - true - ); - provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P); - } - __name(OrdinaryDefineOwnMetadata, "OrdinaryDefineOwnMetadata"); - function OrdinaryMetadataKeys(O, P) { - var ownKeys2 = OrdinaryOwnMetadataKeys(O, P); - var parent = OrdinaryGetPrototypeOf(O); - if (parent === null) - return ownKeys2; - var parentKeys = OrdinaryMetadataKeys(parent, P); - if (parentKeys.length <= 0) - return ownKeys2; - if (ownKeys2.length <= 0) - return parentKeys; - var set2 = new _Set(); - var keys2 = []; - for (var _i = 0, ownKeys_1 = ownKeys2; _i < ownKeys_1.length; _i++) { - var key = ownKeys_1[_i]; - var hasKey = set2.has(key); - if (!hasKey) { - set2.add(key); - keys2.push(key); - } - } - for (var _a2 = 0, parentKeys_1 = parentKeys; _a2 < parentKeys_1.length; _a2++) { - var key = parentKeys_1[_a2]; - var hasKey = set2.has(key); - if (!hasKey) { - set2.add(key); - keys2.push(key); - } - } - return keys2; - } - __name(OrdinaryMetadataKeys, "OrdinaryMetadataKeys"); - function OrdinaryOwnMetadataKeys(O, P) { - var provider = GetMetadataProvider( - O, - P, - /*create*/ - false - ); - if (!provider) { - return []; - } - return provider.OrdinaryOwnMetadataKeys(O, P); - } - __name(OrdinaryOwnMetadataKeys, "OrdinaryOwnMetadataKeys"); - function Type2(x2) { - if (x2 === null) - return 1; - switch (typeof x2) { - case "undefined": - return 0; - case "boolean": - return 2; - case "string": - return 3; - case "symbol": - return 4; - case "number": - return 5; - case "object": - return x2 === null ? 1 : 6; - default: - return 6; - } - } - __name(Type2, "Type"); - function IsUndefined(x2) { - return x2 === void 0; - } - __name(IsUndefined, "IsUndefined"); - function IsNull(x2) { - return x2 === null; - } - __name(IsNull, "IsNull"); - function IsSymbol(x2) { - return typeof x2 === "symbol"; - } - __name(IsSymbol, "IsSymbol"); - function IsObject(x2) { - return typeof x2 === "object" ? x2 !== null : typeof x2 === "function"; - } - __name(IsObject, "IsObject"); - function ToPrimitive(input, PreferredType) { - switch (Type2(input)) { - case 0: - return input; - case 1: - return input; - case 2: - return input; - case 3: - return input; - case 4: - return input; - case 5: - return input; - } - var hint = PreferredType === 3 ? "string" : PreferredType === 5 ? "number" : "default"; - var exoticToPrim = GetMethod(input, toPrimitiveSymbol); - if (exoticToPrim !== void 0) { - var result = exoticToPrim.call(input, hint); - if (IsObject(result)) - throw new TypeError(); - return result; - } - return OrdinaryToPrimitive(input, hint === "default" ? "number" : hint); - } - __name(ToPrimitive, "ToPrimitive"); - function OrdinaryToPrimitive(O, hint) { - if (hint === "string") { - var toString_1 = O.toString; - if (IsCallable(toString_1)) { - var result = toString_1.call(O); - if (!IsObject(result)) - return result; - } - var valueOf = O.valueOf; - if (IsCallable(valueOf)) { - var result = valueOf.call(O); - if (!IsObject(result)) - return result; - } - } else { - var valueOf = O.valueOf; - if (IsCallable(valueOf)) { - var result = valueOf.call(O); - if (!IsObject(result)) - return result; - } - var toString_2 = O.toString; - if (IsCallable(toString_2)) { - var result = toString_2.call(O); - if (!IsObject(result)) - return result; - } - } - throw new TypeError(); - } - __name(OrdinaryToPrimitive, "OrdinaryToPrimitive"); - function ToBoolean(argument) { - return !!argument; - } - __name(ToBoolean, "ToBoolean"); - function ToString(argument) { - return "" + argument; - } - __name(ToString, "ToString"); - function ToPropertyKey(argument) { - var key = ToPrimitive( - argument, - 3 - /* String */ - ); - if (IsSymbol(key)) - return key; - return ToString(key); - } - __name(ToPropertyKey, "ToPropertyKey"); - function IsArray(argument) { - return Array.isArray ? Array.isArray(argument) : argument instanceof Object ? argument instanceof Array : Object.prototype.toString.call(argument) === "[object Array]"; - } - __name(IsArray, "IsArray"); - function IsCallable(argument) { - return typeof argument === "function"; - } - __name(IsCallable, "IsCallable"); - function IsConstructor(argument) { - return typeof argument === "function"; - } - __name(IsConstructor, "IsConstructor"); - function IsPropertyKey(argument) { - switch (Type2(argument)) { - case 3: - return true; - case 4: - return true; - default: - return false; - } - } - __name(IsPropertyKey, "IsPropertyKey"); - function SameValueZero(x2, y2) { - return x2 === y2 || x2 !== x2 && y2 !== y2; - } - __name(SameValueZero, "SameValueZero"); - function GetMethod(V, P) { - var func = V[P]; - if (func === void 0 || func === null) - return void 0; - if (!IsCallable(func)) - throw new TypeError(); - return func; - } - __name(GetMethod, "GetMethod"); - function GetIterator(obj) { - var method = GetMethod(obj, iteratorSymbol); - if (!IsCallable(method)) - throw new TypeError(); - var iterator = method.call(obj); - if (!IsObject(iterator)) - throw new TypeError(); - return iterator; - } - __name(GetIterator, "GetIterator"); - function IteratorValue(iterResult) { - return iterResult.value; - } - __name(IteratorValue, "IteratorValue"); - function IteratorStep(iterator) { - var result = iterator.next(); - return result.done ? false : result; - } - __name(IteratorStep, "IteratorStep"); - function IteratorClose(iterator) { - var f = iterator["return"]; - if (f) - f.call(iterator); - } - __name(IteratorClose, "IteratorClose"); - function OrdinaryGetPrototypeOf(O) { - var proto = Object.getPrototypeOf(O); - if (typeof O !== "function" || O === functionPrototype) - return proto; - if (proto !== functionPrototype) - return proto; - var prototype = O.prototype; - var prototypeProto = prototype && Object.getPrototypeOf(prototype); - if (prototypeProto == null || prototypeProto === Object.prototype) - return proto; - var constructor = prototypeProto.constructor; - if (typeof constructor !== "function") - return proto; - if (constructor === O) - return proto; - return constructor; - } - __name(OrdinaryGetPrototypeOf, "OrdinaryGetPrototypeOf"); - function CreateMetadataRegistry() { - var fallback; - if (!IsUndefined(registrySymbol) && typeof root26.Reflect !== "undefined" && !(registrySymbol in root26.Reflect) && typeof root26.Reflect.defineMetadata === "function") { - fallback = CreateFallbackProvider(root26.Reflect); - } - var first; - var second; - var rest; - var targetProviderMap = new _WeakMap(); - var registry = { - registerProvider, - getProvider, - setProvider - }; - return registry; - function registerProvider(provider) { - if (!Object.isExtensible(registry)) { - throw new Error("Cannot add provider to a frozen registry."); - } - switch (true) { - case fallback === provider: - break; - case IsUndefined(first): - first = provider; - break; - case first === provider: - break; - case IsUndefined(second): - second = provider; - break; - case second === provider: - break; - default: - if (rest === void 0) - rest = new _Set(); - rest.add(provider); - break; - } - } - __name(registerProvider, "registerProvider"); - function getProviderNoCache(O, P) { - if (!IsUndefined(first)) { - if (first.isProviderFor(O, P)) - return first; - if (!IsUndefined(second)) { - if (second.isProviderFor(O, P)) - return first; - if (!IsUndefined(rest)) { - var iterator = GetIterator(rest); - while (true) { - var next2 = IteratorStep(iterator); - if (!next2) { - return void 0; - } - var provider = IteratorValue(next2); - if (provider.isProviderFor(O, P)) { - IteratorClose(iterator); - return provider; - } - } - } - } - } - if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) { - return fallback; - } - return void 0; - } - __name(getProviderNoCache, "getProviderNoCache"); - function getProvider(O, P) { - var providerMap = targetProviderMap.get(O); - var provider; - if (!IsUndefined(providerMap)) { - provider = providerMap.get(P); - } - if (!IsUndefined(provider)) { - return provider; - } - provider = getProviderNoCache(O, P); - if (!IsUndefined(provider)) { - if (IsUndefined(providerMap)) { - providerMap = new _Map(); - targetProviderMap.set(O, providerMap); - } - providerMap.set(P, provider); - } - return provider; - } - __name(getProvider, "getProvider"); - function hasProvider(provider) { - if (IsUndefined(provider)) - throw new TypeError(); - return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider); - } - __name(hasProvider, "hasProvider"); - function setProvider(O, P, provider) { - if (!hasProvider(provider)) { - throw new Error("Metadata provider not registered."); - } - var existingProvider = getProvider(O, P); - if (existingProvider !== provider) { - if (!IsUndefined(existingProvider)) { - return false; - } - var providerMap = targetProviderMap.get(O); - if (IsUndefined(providerMap)) { - providerMap = new _Map(); - targetProviderMap.set(O, providerMap); - } - providerMap.set(P, provider); - } - return true; - } - __name(setProvider, "setProvider"); - } - __name(CreateMetadataRegistry, "CreateMetadataRegistry"); - function GetOrCreateMetadataRegistry() { - var metadataRegistry2; - if (!IsUndefined(registrySymbol) && IsObject(root26.Reflect) && Object.isExtensible(root26.Reflect)) { - metadataRegistry2 = root26.Reflect[registrySymbol]; - } - if (IsUndefined(metadataRegistry2)) { - metadataRegistry2 = CreateMetadataRegistry(); - } - if (!IsUndefined(registrySymbol) && IsObject(root26.Reflect) && Object.isExtensible(root26.Reflect)) { - Object.defineProperty(root26.Reflect, registrySymbol, { - enumerable: false, - configurable: false, - writable: false, - value: metadataRegistry2 - }); - } - return metadataRegistry2; - } - __name(GetOrCreateMetadataRegistry, "GetOrCreateMetadataRegistry"); - function CreateMetadataProvider(registry) { - var metadata2 = new _WeakMap(); - var provider = { - isProviderFor: /* @__PURE__ */ __name(function(O, P) { - var targetMetadata = metadata2.get(O); - if (IsUndefined(targetMetadata)) - return false; - return targetMetadata.has(P); - }, "isProviderFor"), - OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata2, - OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata2, - OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata2, - OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys2, - OrdinaryDeleteMetadata - }; - metadataRegistry.registerProvider(provider); - return provider; - function GetOrCreateMetadataMap(O, P, Create) { - var targetMetadata = metadata2.get(O); - var createdTargetMetadata = false; - if (IsUndefined(targetMetadata)) { - if (!Create) - return void 0; - targetMetadata = new _Map(); - metadata2.set(O, targetMetadata); - createdTargetMetadata = true; - } - var metadataMap = targetMetadata.get(P); - if (IsUndefined(metadataMap)) { - if (!Create) - return void 0; - metadataMap = new _Map(); - targetMetadata.set(P, metadataMap); - if (!registry.setProvider(O, P, provider)) { - targetMetadata.delete(P); - if (createdTargetMetadata) { - metadata2.delete(O); - } - throw new Error("Wrong provider for target."); - } - } - return metadataMap; - } - __name(GetOrCreateMetadataMap, "GetOrCreateMetadataMap"); - function OrdinaryHasOwnMetadata2(MetadataKey, O, P) { - var metadataMap = GetOrCreateMetadataMap( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(metadataMap)) - return false; - return ToBoolean(metadataMap.has(MetadataKey)); - } - __name(OrdinaryHasOwnMetadata2, "OrdinaryHasOwnMetadata"); - function OrdinaryGetOwnMetadata2(MetadataKey, O, P) { - var metadataMap = GetOrCreateMetadataMap( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(metadataMap)) - return void 0; - return metadataMap.get(MetadataKey); - } - __name(OrdinaryGetOwnMetadata2, "OrdinaryGetOwnMetadata"); - function OrdinaryDefineOwnMetadata2(MetadataKey, MetadataValue, O, P) { - var metadataMap = GetOrCreateMetadataMap( - O, - P, - /*Create*/ - true - ); - metadataMap.set(MetadataKey, MetadataValue); - } - __name(OrdinaryDefineOwnMetadata2, "OrdinaryDefineOwnMetadata"); - function OrdinaryOwnMetadataKeys2(O, P) { - var keys2 = []; - var metadataMap = GetOrCreateMetadataMap( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(metadataMap)) - return keys2; - var keysObj = metadataMap.keys(); - var iterator = GetIterator(keysObj); - var k = 0; - while (true) { - var next2 = IteratorStep(iterator); - if (!next2) { - keys2.length = k; - return keys2; - } - var nextValue = IteratorValue(next2); - try { - keys2[k] = nextValue; - } catch (e) { - try { - IteratorClose(iterator); - } finally { - throw e; - } - } - k++; - } - } - __name(OrdinaryOwnMetadataKeys2, "OrdinaryOwnMetadataKeys"); - function OrdinaryDeleteMetadata(MetadataKey, O, P) { - var metadataMap = GetOrCreateMetadataMap( - O, - P, - /*Create*/ - false - ); - if (IsUndefined(metadataMap)) - return false; - if (!metadataMap.delete(MetadataKey)) - return false; - if (metadataMap.size === 0) { - var targetMetadata = metadata2.get(O); - if (!IsUndefined(targetMetadata)) { - targetMetadata.delete(P); - if (targetMetadata.size === 0) { - metadata2.delete(targetMetadata); - } - } - } - return true; - } - __name(OrdinaryDeleteMetadata, "OrdinaryDeleteMetadata"); - } - __name(CreateMetadataProvider, "CreateMetadataProvider"); - function CreateFallbackProvider(reflect) { - var defineMetadata2 = reflect.defineMetadata, hasOwnMetadata2 = reflect.hasOwnMetadata, getOwnMetadata2 = reflect.getOwnMetadata, getOwnMetadataKeys2 = reflect.getOwnMetadataKeys, deleteMetadata2 = reflect.deleteMetadata; - var metadataOwner = new _WeakMap(); - var provider = { - isProviderFor: /* @__PURE__ */ __name(function(O, P) { - var metadataPropertySet = metadataOwner.get(O); - if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) { - return true; - } - if (getOwnMetadataKeys2(O, P).length) { - if (IsUndefined(metadataPropertySet)) { - metadataPropertySet = new _Set(); - metadataOwner.set(O, metadataPropertySet); - } - metadataPropertySet.add(P); - return true; - } - return false; - }, "isProviderFor"), - OrdinaryDefineOwnMetadata: defineMetadata2, - OrdinaryHasOwnMetadata: hasOwnMetadata2, - OrdinaryGetOwnMetadata: getOwnMetadata2, - OrdinaryOwnMetadataKeys: getOwnMetadataKeys2, - OrdinaryDeleteMetadata: deleteMetadata2 - }; - return provider; - } - __name(CreateFallbackProvider, "CreateFallbackProvider"); - function GetMetadataProvider(O, P, Create) { - var registeredProvider = metadataRegistry.getProvider(O, P); - if (!IsUndefined(registeredProvider)) { - return registeredProvider; - } - if (Create) { - if (metadataRegistry.setProvider(O, P, metadataProvider)) { - return metadataProvider; - } - throw new Error("Illegal state."); - } - return void 0; - } - __name(GetMetadataProvider, "GetMetadataProvider"); - function CreateMapPolyfill() { - var cacheSentinel = {}; - var arraySentinel = []; - var MapIterator = ( - /** @class */ - function() { - function MapIterator2(keys2, values2, selector) { - this._index = 0; - this._keys = keys2; - this._values = values2; - this._selector = selector; - } - __name(MapIterator2, "MapIterator"); - MapIterator2.prototype["@@iterator"] = function() { - return this; - }; - MapIterator2.prototype[iteratorSymbol] = function() { - return this; - }; - MapIterator2.prototype.next = function() { - var index2 = this._index; - if (index2 >= 0 && index2 < this._keys.length) { - var result = this._selector(this._keys[index2], this._values[index2]); - if (index2 + 1 >= this._keys.length) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } else { - this._index++; - } - return { value: result, done: false }; - } - return { value: void 0, done: true }; - }; - MapIterator2.prototype.throw = function(error) { - if (this._index >= 0) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } - throw error; - }; - MapIterator2.prototype.return = function(value3) { - if (this._index >= 0) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } - return { value: value3, done: true }; - }; - return MapIterator2; - }() - ); - var Map2 = ( - /** @class */ - function() { - function Map3() { - this._keys = []; - this._values = []; - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - } - __name(Map3, "Map"); - Object.defineProperty(Map3.prototype, "size", { - get: /* @__PURE__ */ __name(function() { - return this._keys.length; - }, "get"), - enumerable: true, - configurable: true - }); - Map3.prototype.has = function(key) { - return this._find( - key, - /*insert*/ - false - ) >= 0; - }; - Map3.prototype.get = function(key) { - var index2 = this._find( - key, - /*insert*/ - false - ); - return index2 >= 0 ? this._values[index2] : void 0; - }; - Map3.prototype.set = function(key, value3) { - var index2 = this._find( - key, - /*insert*/ - true - ); - this._values[index2] = value3; - return this; - }; - Map3.prototype.delete = function(key) { - var index2 = this._find( - key, - /*insert*/ - false - ); - if (index2 >= 0) { - var size2 = this._keys.length; - for (var i2 = index2 + 1; i2 < size2; i2++) { - this._keys[i2 - 1] = this._keys[i2]; - this._values[i2 - 1] = this._values[i2]; - } - this._keys.length--; - this._values.length--; - if (SameValueZero(key, this._cacheKey)) { - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - } - return true; - } - return false; - }; - Map3.prototype.clear = function() { - this._keys.length = 0; - this._values.length = 0; - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - }; - Map3.prototype.keys = function() { - return new MapIterator(this._keys, this._values, getKey); - }; - Map3.prototype.values = function() { - return new MapIterator(this._keys, this._values, getValue2); - }; - Map3.prototype.entries = function() { - return new MapIterator(this._keys, this._values, getEntry); - }; - Map3.prototype["@@iterator"] = function() { - return this.entries(); - }; - Map3.prototype[iteratorSymbol] = function() { - return this.entries(); - }; - Map3.prototype._find = function(key, insert2) { - if (!SameValueZero(this._cacheKey, key)) { - this._cacheIndex = -1; - for (var i2 = 0; i2 < this._keys.length; i2++) { - if (SameValueZero(this._keys[i2], key)) { - this._cacheIndex = i2; - break; - } - } - } - if (this._cacheIndex < 0 && insert2) { - this._cacheIndex = this._keys.length; - this._keys.push(key); - this._values.push(void 0); - } - return this._cacheIndex; - }; - return Map3; - }() - ); - return Map2; - function getKey(key, _2) { - return key; - } - __name(getKey, "getKey"); - function getValue2(_2, value3) { - return value3; - } - __name(getValue2, "getValue"); - function getEntry(key, value3) { - return [key, value3]; - } - __name(getEntry, "getEntry"); - } - __name(CreateMapPolyfill, "CreateMapPolyfill"); - function CreateSetPolyfill() { - var Set2 = ( - /** @class */ - function() { - function Set3() { - this._map = new _Map(); - } - __name(Set3, "Set"); - Object.defineProperty(Set3.prototype, "size", { - get: /* @__PURE__ */ __name(function() { - return this._map.size; - }, "get"), - enumerable: true, - configurable: true - }); - Set3.prototype.has = function(value3) { - return this._map.has(value3); - }; - Set3.prototype.add = function(value3) { - return this._map.set(value3, value3), this; - }; - Set3.prototype.delete = function(value3) { - return this._map.delete(value3); - }; - Set3.prototype.clear = function() { - this._map.clear(); - }; - Set3.prototype.keys = function() { - return this._map.keys(); - }; - Set3.prototype.values = function() { - return this._map.keys(); - }; - Set3.prototype.entries = function() { - return this._map.entries(); - }; - Set3.prototype["@@iterator"] = function() { - return this.keys(); - }; - Set3.prototype[iteratorSymbol] = function() { - return this.keys(); - }; - return Set3; - }() - ); - return Set2; - } - __name(CreateSetPolyfill, "CreateSetPolyfill"); - function CreateWeakMapPolyfill() { - var UUID_SIZE = 16; - var keys2 = HashMap.create(); - var rootKey = CreateUniqueKey(); - return ( - /** @class */ - function() { - function WeakMap2() { - this._key = CreateUniqueKey(); - } - __name(WeakMap2, "WeakMap"); - WeakMap2.prototype.has = function(target) { - var table = GetOrCreateWeakMapTable( - target, - /*create*/ - false - ); - return table !== void 0 ? HashMap.has(table, this._key) : false; - }; - WeakMap2.prototype.get = function(target) { - var table = GetOrCreateWeakMapTable( - target, - /*create*/ - false - ); - return table !== void 0 ? HashMap.get(table, this._key) : void 0; - }; - WeakMap2.prototype.set = function(target, value3) { - var table = GetOrCreateWeakMapTable( - target, - /*create*/ - true - ); - table[this._key] = value3; - return this; - }; - WeakMap2.prototype.delete = function(target) { - var table = GetOrCreateWeakMapTable( - target, - /*create*/ - false - ); - return table !== void 0 ? delete table[this._key] : false; - }; - WeakMap2.prototype.clear = function() { - this._key = CreateUniqueKey(); - }; - return WeakMap2; - }() - ); - function CreateUniqueKey() { - var key; - do - key = "@@WeakMap@@" + CreateUUID(); - while (HashMap.has(keys2, key)); - keys2[key] = true; - return key; - } - __name(CreateUniqueKey, "CreateUniqueKey"); - function GetOrCreateWeakMapTable(target, create2) { - if (!hasOwn2.call(target, rootKey)) { - if (!create2) - return void 0; - Object.defineProperty(target, rootKey, { value: HashMap.create() }); - } - return target[rootKey]; - } - __name(GetOrCreateWeakMapTable, "GetOrCreateWeakMapTable"); - function FillRandomBytes(buffer2, size2) { - for (var i2 = 0; i2 < size2; ++i2) - buffer2[i2] = Math.random() * 255 | 0; - return buffer2; - } - __name(FillRandomBytes, "FillRandomBytes"); - function GenRandomBytes(size2) { - if (typeof Uint8Array === "function") { - var array = new Uint8Array(size2); - if (typeof crypto !== "undefined") { - crypto.getRandomValues(array); - } else if (typeof msCrypto !== "undefined") { - msCrypto.getRandomValues(array); - } else { - FillRandomBytes(array, size2); - } - return array; - } - return FillRandomBytes(new Array(size2), size2); - } - __name(GenRandomBytes, "GenRandomBytes"); - function CreateUUID() { - var data21 = GenRandomBytes(UUID_SIZE); - data21[6] = data21[6] & 79 | 64; - data21[8] = data21[8] & 191 | 128; - var result = ""; - for (var offset = 0; offset < UUID_SIZE; ++offset) { - var byte = data21[offset]; - if (offset === 4 || offset === 6 || offset === 8) - result += "-"; - if (byte < 16) - result += "0"; - result += byte.toString(16).toLowerCase(); - } - return result; - } - __name(CreateUUID, "CreateUUID"); - } - __name(CreateWeakMapPolyfill, "CreateWeakMapPolyfill"); - function MakeDictionary(obj) { - obj.__ = void 0; - delete obj.__; - return obj; - } - __name(MakeDictionary, "MakeDictionary"); - }); -})(Reflect$1 || (Reflect$1 = {})); -window["__COMFYUI_FRONTEND_VERSION__"] = "1.2.30"; -console.log("ComfyUI Front-end version:", "1.2.30"); /** * @vue/shared v3.4.31 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -1339,34 +60,34 @@ const NO = /* @__PURE__ */ __name(() => false, "NO"); const isOn = /* @__PURE__ */ __name((key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter (key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97), "isOn"); const isModelListener = /* @__PURE__ */ __name((key) => key.startsWith("onUpdate:"), "isModelListener"); -const extend = Object.assign; +const extend$1 = Object.assign; const remove$1 = /* @__PURE__ */ __name((arr, el) => { - const i2 = arr.indexOf(el); - if (i2 > -1) { - arr.splice(i2, 1); + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); } }, "remove$1"); -const hasOwnProperty$2 = Object.prototype.hasOwnProperty; -const hasOwn$3 = /* @__PURE__ */ __name((val, key) => hasOwnProperty$2.call(val, key), "hasOwn$3"); -const isArray$3 = Array.isArray; +const hasOwnProperty$3 = Object.prototype.hasOwnProperty; +const hasOwn$3 = /* @__PURE__ */ __name((val, key) => hasOwnProperty$3.call(val, key), "hasOwn$3"); +const isArray$5 = Array.isArray; const isMap = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Map]", "isMap"); const isSet = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Set]", "isSet"); -const isDate$2 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Date]", "isDate$2"); -const isRegExp$1 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object RegExp]", "isRegExp$1"); +const isDate$3 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Date]", "isDate$3"); +const isRegExp$2 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object RegExp]", "isRegExp$2"); const isFunction$3 = /* @__PURE__ */ __name((val) => typeof val === "function", "isFunction$3"); -const isString$4 = /* @__PURE__ */ __name((val) => typeof val === "string", "isString$4"); +const isString$5 = /* @__PURE__ */ __name((val) => typeof val === "string", "isString$5"); const isSymbol$1 = /* @__PURE__ */ __name((val) => typeof val === "symbol", "isSymbol$1"); -const isObject$5 = /* @__PURE__ */ __name((val) => val !== null && typeof val === "object", "isObject$5"); -const isPromise$2 = /* @__PURE__ */ __name((val) => { - return (isObject$5(val) || isFunction$3(val)) && isFunction$3(val.then) && isFunction$3(val.catch); -}, "isPromise$2"); +const isObject$6 = /* @__PURE__ */ __name((val) => val !== null && typeof val === "object", "isObject$6"); +const isPromise$1 = /* @__PURE__ */ __name((val) => { + return (isObject$6(val) || isFunction$3(val)) && isFunction$3(val.then) && isFunction$3(val.catch); +}, "isPromise$1"); const objectToString$1 = Object.prototype.toString; const toTypeString$1 = /* @__PURE__ */ __name((value3) => objectToString$1.call(value3), "toTypeString$1"); const toRawType = /* @__PURE__ */ __name((value3) => { return toTypeString$1(value3).slice(8, -1); }, "toRawType"); -const isPlainObject$2 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Object]", "isPlainObject$2"); -const isIntegerKey = /* @__PURE__ */ __name((key) => isString$4(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key, "isIntegerKey"); +const isPlainObject$3 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Object]", "isPlainObject$3"); +const isIntegerKey = /* @__PURE__ */ __name((key) => isString$5(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key, "isIntegerKey"); const isReservedProp = /* @__PURE__ */ makeMap( // the leading comma is intentional so empty string "" is also included ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" @@ -1396,10 +117,10 @@ const toHandlerKey = cacheStringFunction$1((str) => { const s = str ? `on${capitalize$1(str)}` : ``; return s; }); -const hasChanged = /* @__PURE__ */ __name((value3, oldValue) => !Object.is(value3, oldValue), "hasChanged"); +const hasChanged = /* @__PURE__ */ __name((value3, oldValue2) => !Object.is(value3, oldValue2), "hasChanged"); const invokeArrayFns = /* @__PURE__ */ __name((fns, ...arg) => { - for (let i2 = 0; i2 < fns.length; i2++) { - fns[i2](...arg); + for (let i = 0; i < fns.length; i++) { + fns[i](...arg); } }, "invokeArrayFns"); const def = /* @__PURE__ */ __name((obj, key, value3, writable = false) => { @@ -1415,7 +136,7 @@ const looseToNumber = /* @__PURE__ */ __name((val) => { return isNaN(n) ? val : n; }, "looseToNumber"); const toNumber = /* @__PURE__ */ __name((val) => { - const n = isString$4(val) ? Number(val) : NaN; + const n = isString$5(val) ? Number(val) : NaN; return isNaN(n) ? val : n; }, "toNumber"); let _globalThis$1; @@ -1523,10 +244,10 @@ function generateCodeFrame$1(source, start2 = 0, end = source.length) { lines = lines.filter((_2, idx) => idx % 2 === 0); let count = 0; const res = []; - for (let i2 = 0; i2 < lines.length; i2++) { - count += lines[i2].length + (newlineSequences[i2] && newlineSequences[i2].length || 0); + for (let i = 0; i < lines.length; i++) { + count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0); if (count >= start2) { - for (let j = i2 - range; j <= i2 + range || end > count; j++) { + for (let j = i - range; j <= i + range || end > count; j++) { if (j < 0 || j >= lines.length) continue; const line = j + 1; res.push( @@ -1534,14 +255,14 @@ function generateCodeFrame$1(source, start2 = 0, end = source.length) { ); const lineLength = lines[j].length; const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0; - if (j === i2) { + if (j === i) { const pad = start2 - (count - (lineLength + newLineSeqLength)); const length = Math.max( 1, end > count ? lineLength - pad : end - start2 ); res.push(` | ` + " ".repeat(pad) + "^".repeat(length)); - } else if (j > i2) { + } else if (j > i) { if (end > count) { const length = Math.max(Math.min(end - count, lineLength), 1); res.push(` | ` + "^".repeat(length)); @@ -1556,11 +277,11 @@ function generateCodeFrame$1(source, start2 = 0, end = source.length) { } __name(generateCodeFrame$1, "generateCodeFrame$1"); function normalizeStyle(value3) { - if (isArray$3(value3)) { + if (isArray$5(value3)) { const res = {}; - for (let i2 = 0; i2 < value3.length; i2++) { - const item2 = value3[i2]; - const normalized = isString$4(item2) ? parseStringStyle(item2) : normalizeStyle(item2); + for (let i = 0; i < value3.length; i++) { + const item2 = value3[i]; + const normalized = isString$5(item2) ? parseStringStyle(item2) : normalizeStyle(item2); if (normalized) { for (const key in normalized) { res[key] = normalized[key]; @@ -1568,7 +289,7 @@ function normalizeStyle(value3) { } } return res; - } else if (isString$4(value3) || isObject$5(value3)) { + } else if (isString$5(value3) || isObject$6(value3)) { return value3; } } @@ -1589,12 +310,12 @@ function parseStringStyle(cssText) { __name(parseStringStyle, "parseStringStyle"); function stringifyStyle(styles) { let ret = ""; - if (!styles || isString$4(styles)) { + if (!styles || isString$5(styles)) { return ret; } for (const key in styles) { const value3 = styles[key]; - if (isString$4(value3) || typeof value3 === "number") { + if (isString$5(value3) || typeof value3 === "number") { const normalizedKey = key.startsWith(`--`) ? key : hyphenate$1(key); ret += `${normalizedKey}:${value3};`; } @@ -1604,16 +325,16 @@ function stringifyStyle(styles) { __name(stringifyStyle, "stringifyStyle"); function normalizeClass(value3) { let res = ""; - if (isString$4(value3)) { + if (isString$5(value3)) { res = value3; - } else if (isArray$3(value3)) { - for (let i2 = 0; i2 < value3.length; i2++) { - const normalized = normalizeClass(value3[i2]); + } else if (isArray$5(value3)) { + for (let i = 0; i < value3.length; i++) { + const normalized = normalizeClass(value3[i]); if (normalized) { res += normalized + " "; } } - } else if (isObject$5(value3)) { + } else if (isObject$6(value3)) { for (const name in value3) { if (value3[name]) { res += name + " "; @@ -1626,7 +347,7 @@ __name(normalizeClass, "normalizeClass"); function normalizeProps(props) { if (!props) return null; let { class: klass, style } = props; - if (klass && !isString$4(klass)) { + if (klass && !isString$5(klass)) { props.class = normalizeClass(klass); } if (style) { @@ -1733,16 +454,16 @@ __name(escapeHtmlComment, "escapeHtmlComment"); function looseCompareArrays(a, b) { if (a.length !== b.length) return false; let equal = true; - for (let i2 = 0; equal && i2 < a.length; i2++) { - equal = looseEqual(a[i2], b[i2]); + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]); } return equal; } __name(looseCompareArrays, "looseCompareArrays"); function looseEqual(a, b) { if (a === b) return true; - let aValidType = isDate$2(a); - let bValidType = isDate$2(b); + let aValidType = isDate$3(a); + let bValidType = isDate$3(b); if (aValidType || bValidType) { return aValidType && bValidType ? a.getTime() === b.getTime() : false; } @@ -1751,13 +472,13 @@ function looseEqual(a, b) { if (aValidType || bValidType) { return a === b; } - aValidType = isArray$3(a); - bValidType = isArray$3(b); + aValidType = isArray$5(a); + bValidType = isArray$5(b); if (aValidType || bValidType) { return aValidType && bValidType ? looseCompareArrays(a, b) : false; } - aValidType = isObject$5(a); - bValidType = isObject$5(b); + aValidType = isObject$6(a); + bValidType = isObject$6(b); if (aValidType || bValidType) { if (!aValidType || !bValidType) { return false; @@ -1786,7 +507,7 @@ const isRef$1 = /* @__PURE__ */ __name((val) => { return !!(val && val.__v_isRef === true); }, "isRef$1"); const toDisplayString$1 = /* @__PURE__ */ __name((val) => { - return isString$4(val) ? val : val == null ? "" : isArray$3(val) || isObject$5(val) && (val.toString === objectToString$1 || !isFunction$3(val.toString)) ? isRef$1(val) ? toDisplayString$1(val.value) : JSON.stringify(val, replacer, 2) : String(val); + return isString$5(val) ? val : val == null ? "" : isArray$5(val) || isObject$6(val) && (val.toString === objectToString$1 || !isFunction$3(val.toString)) ? isRef$1(val) ? toDisplayString$1(val.value) : JSON.stringify(val, replacer, 2) : String(val); }, "toDisplayString$1"); const replacer = /* @__PURE__ */ __name((_key, val) => { if (isRef$1(val)) { @@ -1794,8 +515,8 @@ const replacer = /* @__PURE__ */ __name((_key, val) => { } else if (isMap(val)) { return { [`Map(${val.size})`]: [...val.entries()].reduce( - (entries, [key, val2], i2) => { - entries[stringifySymbol(key, i2) + " =>"] = val2; + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; return entries; }, {} @@ -1807,17 +528,17 @@ const replacer = /* @__PURE__ */ __name((_key, val) => { }; } else if (isSymbol$1(val)) { return stringifySymbol(val); - } else if (isObject$5(val) && !isArray$3(val) && !isPlainObject$2(val)) { + } else if (isObject$6(val) && !isArray$5(val) && !isPlainObject$3(val)) { return String(val); } return val; }, "replacer"); -const stringifySymbol = /* @__PURE__ */ __name((v2, i2 = "") => { - var _a2; +const stringifySymbol = /* @__PURE__ */ __name((v2, i = "") => { + var _a; return ( // Symbol.description in es2019+ so we need to cast here to pass // the lib: es2016 check - isSymbol$1(v2) ? `Symbol(${(_a2 = v2.description) != null ? _a2 : i2})` : v2 + isSymbol$1(v2) ? `Symbol(${(_a = v2.description) != null ? _a : i})` : v2 ); }, "stringifySymbol"); /** @@ -1830,7 +551,10 @@ function warn$3(msg, ...args) { } __name(warn$3, "warn$3"); let activeEffectScope; -const _EffectScope = class _EffectScope { +class EffectScope { + static { + __name(this, "EffectScope"); + } constructor(detached = false) { this.detached = detached; this._active = true; @@ -1875,16 +599,16 @@ const _EffectScope = class _EffectScope { } stop(fromParent) { if (this._active) { - let i2, l; - for (i2 = 0, l = this.effects.length; i2 < l; i2++) { - this.effects[i2].stop(); + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); } - for (i2 = 0, l = this.cleanups.length; i2 < l; i2++) { - this.cleanups[i2](); + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); } if (this.scopes) { - for (i2 = 0, l = this.scopes.length; i2 < l; i2++) { - this.scopes[i2].stop(true); + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); } } if (!this.detached && this.parent && !fromParent) { @@ -1898,9 +622,7 @@ const _EffectScope = class _EffectScope { this._active = false; } } -}; -__name(_EffectScope, "EffectScope"); -let EffectScope = _EffectScope; +} function effectScope(detached) { return new EffectScope(detached); } @@ -1926,7 +648,10 @@ function onScopeDispose(fn) { } __name(onScopeDispose, "onScopeDispose"); let activeEffect; -const _ReactiveEffect = class _ReactiveEffect { +class ReactiveEffect { + static { + __name(this, "ReactiveEffect"); + } constructor(fn, trigger2, scheduler, scope) { this.fn = fn; this.trigger = trigger2; @@ -1944,8 +669,8 @@ const _ReactiveEffect = class _ReactiveEffect { if (this._dirtyLevel === 2 || this._dirtyLevel === 3) { this._dirtyLevel = 1; pauseTracking(); - for (let i2 = 0; i2 < this._depsLength; i2++) { - const dep = this.deps[i2]; + for (let i = 0; i < this._depsLength; i++) { + const dep = this.deps[i]; if (dep.computed) { triggerComputed(dep.computed); if (this._dirtyLevel >= 4) { @@ -1991,9 +716,7 @@ const _ReactiveEffect = class _ReactiveEffect { this.active = false; } } -}; -__name(_ReactiveEffect, "ReactiveEffect"); -let ReactiveEffect = _ReactiveEffect; +} function triggerComputed(computed2) { return computed2.value; } @@ -2005,8 +728,8 @@ function preCleanupEffect(effect2) { __name(preCleanupEffect, "preCleanupEffect"); function postCleanupEffect(effect2) { if (effect2.deps.length > effect2._depsLength) { - for (let i2 = effect2._depsLength; i2 < effect2.deps.length; i2++) { - cleanupDepEffect(effect2.deps[i2], effect2); + for (let i = effect2._depsLength; i < effect2.deps.length; i++) { + cleanupDepEffect(effect2.deps[i], effect2); } effect2.deps.length = effect2._depsLength; } @@ -2032,7 +755,7 @@ function effect(fn, options3) { } }); if (options3) { - extend(_effect, options3); + extend$1(_effect, options3); if (options3.scope) recordEffectScope(_effect, options3.scope); } if (!options3 || !options3.lazy) { @@ -2077,7 +800,7 @@ function resetScheduling() { } __name(resetScheduling, "resetScheduling"); function trackEffect(effect2, dep, debuggerEventExtraInfo) { - var _a2; + var _a; if (dep.get(effect2) !== effect2._trackId) { dep.set(effect2, effect2._trackId); const oldDep = effect2.deps[effect2._depsLength]; @@ -2090,14 +813,14 @@ function trackEffect(effect2, dep, debuggerEventExtraInfo) { effect2._depsLength++; } if (false) { - (_a2 = effect2.onTrack) == null ? void 0 : _a2.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend$1({ effect: effect2 }, debuggerEventExtraInfo)); } } } __name(trackEffect, "trackEffect"); const queueEffectSchedulers = []; function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { - var _a2; + var _a; pauseScheduling(); for (const effect2 of dep.keys()) { let tracking; @@ -2107,7 +830,7 @@ function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { } if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { if (false) { - (_a2 = effect2.onTrigger) == null ? void 0 : _a2.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend$1({ effect: effect2 }, debuggerEventExtraInfo)); } effect2.trigger(); if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) { @@ -2152,7 +875,7 @@ function track(target, type, key) { } } __name(track, "track"); -function trigger(target, type, key, newValue, oldValue, oldTarget) { +function trigger(target, type, key, newValue2, oldValue2, oldTarget) { const depsMap = targetMap.get(target); if (!depsMap) { return; @@ -2160,8 +883,8 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) { let deps = []; if (type === "clear") { deps = [...depsMap.values()]; - } else if (key === "length" && isArray$3(target)) { - const newLength = Number(newValue); + } else if (key === "length" && isArray$5(target)) { + const newLength = Number(newValue2); depsMap.forEach((dep, key2) => { if (key2 === "length" || !isSymbol$1(key2) && key2 >= newLength) { deps.push(dep); @@ -2173,7 +896,7 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) { } switch (type) { case "add": - if (!isArray$3(target)) { + if (!isArray$5(target)) { deps.push(depsMap.get(ITERATE_KEY)); if (isMap(target)) { deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); @@ -2183,7 +906,7 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) { } break; case "delete": - if (!isArray$3(target)) { + if (!isArray$5(target)) { deps.push(depsMap.get(ITERATE_KEY)); if (isMap(target)) { deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); @@ -2207,8 +930,8 @@ function trigger(target, type, key, newValue, oldValue, oldTarget) { target, type, key, - newValue, - oldValue, + newValue: newValue2, + oldValue: oldValue2, oldTarget } : void 0 ); @@ -2232,8 +955,8 @@ function createArrayInstrumentations() { ["includes", "indexOf", "lastIndexOf"].forEach((key) => { instrumentations[key] = function(...args) { const arr = toRaw(this); - for (let i2 = 0, l = this.length; i2 < l; i2++) { - track(arr, "get", i2 + ""); + for (let i = 0, l = this.length; i < l; i++) { + track(arr, "get", i + ""); } const res = arr[key](...args); if (res === -1 || res === false) { @@ -2256,14 +979,17 @@ function createArrayInstrumentations() { return instrumentations; } __name(createArrayInstrumentations, "createArrayInstrumentations"); -function hasOwnProperty$1(key) { +function hasOwnProperty$2(key) { if (!isSymbol$1(key)) key = String(key); const obj = toRaw(this); track(obj, "has", key); return obj.hasOwnProperty(key); } -__name(hasOwnProperty$1, "hasOwnProperty$1"); -const _BaseReactiveHandler = class _BaseReactiveHandler { +__name(hasOwnProperty$2, "hasOwnProperty$2"); +class BaseReactiveHandler { + static { + __name(this, "BaseReactiveHandler"); + } constructor(_isReadonly = false, _isShallow = false) { this._isReadonly = _isReadonly; this._isShallow = _isShallow; @@ -2284,13 +1010,13 @@ const _BaseReactiveHandler = class _BaseReactiveHandler { } return; } - const targetIsArray = isArray$3(target); + const targetIsArray = isArray$5(target); if (!isReadonly2) { if (targetIsArray && hasOwn$3(arrayInstrumentations, key)) { return Reflect.get(arrayInstrumentations, key, receiver); } if (key === "hasOwnProperty") { - return hasOwnProperty$1; + return hasOwnProperty$2; } } const res = Reflect.get(target, key, receiver); @@ -2306,52 +1032,53 @@ const _BaseReactiveHandler = class _BaseReactiveHandler { if (isRef(res)) { return targetIsArray && isIntegerKey(key) ? res : res.value; } - if (isObject$5(res)) { + if (isObject$6(res)) { return isReadonly2 ? readonly(res) : reactive(res); } return res; } -}; -__name(_BaseReactiveHandler, "BaseReactiveHandler"); -let BaseReactiveHandler = _BaseReactiveHandler; -const _MutableReactiveHandler = class _MutableReactiveHandler extends BaseReactiveHandler { +} +class MutableReactiveHandler extends BaseReactiveHandler { + static { + __name(this, "MutableReactiveHandler"); + } constructor(isShallow2 = false) { super(false, isShallow2); } set(target, key, value3, receiver) { - let oldValue = target[key]; + let oldValue2 = target[key]; if (!this._isShallow) { - const isOldValueReadonly = isReadonly(oldValue); + const isOldValueReadonly = isReadonly(oldValue2); if (!isShallow(value3) && !isReadonly(value3)) { - oldValue = toRaw(oldValue); + oldValue2 = toRaw(oldValue2); value3 = toRaw(value3); } - if (!isArray$3(target) && isRef(oldValue) && !isRef(value3)) { + if (!isArray$5(target) && isRef(oldValue2) && !isRef(value3)) { if (isOldValueReadonly) { return false; } else { - oldValue.value = value3; + oldValue2.value = value3; return true; } } } - const hadKey = isArray$3(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$3(target, key); + const hadKey = isArray$5(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$3(target, key); const result = Reflect.set(target, key, value3, receiver); if (target === toRaw(receiver)) { if (!hadKey) { trigger(target, "add", key, value3); - } else if (hasChanged(value3, oldValue)) { - trigger(target, "set", key, value3, oldValue); + } else if (hasChanged(value3, oldValue2)) { + trigger(target, "set", key, value3, oldValue2); } } return result; } deleteProperty(target, key) { const hadKey = hasOwn$3(target, key); - const oldValue = target[key]; + const oldValue2 = target[key]; const result = Reflect.deleteProperty(target, key); if (result && hadKey) { - trigger(target, "delete", key, void 0, oldValue); + trigger(target, "delete", key, void 0, oldValue2); } return result; } @@ -2366,14 +1093,15 @@ const _MutableReactiveHandler = class _MutableReactiveHandler extends BaseReacti track( target, "iterate", - isArray$3(target) ? "length" : ITERATE_KEY + isArray$5(target) ? "length" : ITERATE_KEY ); return Reflect.ownKeys(target); } -}; -__name(_MutableReactiveHandler, "MutableReactiveHandler"); -let MutableReactiveHandler = _MutableReactiveHandler; -const _ReadonlyReactiveHandler = class _ReadonlyReactiveHandler extends BaseReactiveHandler { +} +class ReadonlyReactiveHandler extends BaseReactiveHandler { + static { + __name(this, "ReadonlyReactiveHandler"); + } constructor(isShallow2 = false) { super(true, isShallow2); } @@ -2395,9 +1123,7 @@ const _ReadonlyReactiveHandler = class _ReadonlyReactiveHandler extends BaseReac } return true; } -}; -__name(_ReadonlyReactiveHandler, "ReadonlyReactiveHandler"); -let ReadonlyReactiveHandler = _ReadonlyReactiveHandler; +} const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler( @@ -2406,7 +1132,7 @@ const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler( const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); const toShallow = /* @__PURE__ */ __name((value3) => value3, "toShallow"); const getProto = /* @__PURE__ */ __name((v2) => Reflect.getPrototypeOf(v2), "getProto"); -function get$2(target, key, isReadonly2 = false, isShallow2 = false) { +function get$3(target, key, isReadonly2 = false, isShallow2 = false) { target = target["__v_raw"]; const rawTarget = toRaw(target); const rawKey = toRaw(key); @@ -2426,7 +1152,7 @@ function get$2(target, key, isReadonly2 = false, isShallow2 = false) { target.get(key); } } -__name(get$2, "get$2"); +__name(get$3, "get$3"); function has(key, isReadonly2 = false) { const target = this["__v_raw"]; const rawTarget = toRaw(target); @@ -2469,12 +1195,12 @@ function set$4(key, value3) { } else if (false) { checkIdentityKeys(target, has2, key); } - const oldValue = get2.call(target, key); + const oldValue2 = get2.call(target, key); target.set(key, value3); if (!hadKey) { trigger(target, "add", key, value3); - } else if (hasChanged(value3, oldValue)) { - trigger(target, "set", key, value3, oldValue); + } else if (hasChanged(value3, oldValue2)) { + trigger(target, "set", key, value3, oldValue2); } return this; } @@ -2489,10 +1215,10 @@ function deleteEntry(key) { } else if (false) { checkIdentityKeys(target, has2, key); } - const oldValue = get2 ? get2.call(target, key) : void 0; + const oldValue2 = get2 ? get2.call(target, key) : void 0; const result = target.delete(key); if (hadKey) { - trigger(target, "delete", key, void 0, oldValue); + trigger(target, "delete", key, void 0, oldValue2); } return result; } @@ -2509,7 +1235,7 @@ function clear() { } __name(clear, "clear"); function createForEach(isReadonly2, isShallow2) { - return /* @__PURE__ */ __name(function forEach(callback, thisArg) { + return /* @__PURE__ */ __name(function forEach2(callback, thisArg) { const observed = this; const target = observed["__v_raw"]; const rawTarget = toRaw(target); @@ -2568,7 +1294,7 @@ __name(createReadonlyMethod, "createReadonlyMethod"); function createInstrumentations() { const mutableInstrumentations2 = { get(key) { - return get$2(this, key); + return get$3(this, key); }, get size() { return size(this); @@ -2582,7 +1308,7 @@ function createInstrumentations() { }; const shallowInstrumentations2 = { get(key) { - return get$2(this, key, false, true); + return get$3(this, key, false, true); }, get size() { return size(this); @@ -2596,7 +1322,7 @@ function createInstrumentations() { }; const readonlyInstrumentations2 = { get(key) { - return get$2(this, key, true); + return get$3(this, key, true); }, get size() { return size(this, true); @@ -2612,7 +1338,7 @@ function createInstrumentations() { }; const shallowReadonlyInstrumentations2 = { get(key) { - return get$2(this, key, true, true); + return get$3(this, key, true, true); }, get size() { return size(this, true); @@ -2763,7 +1489,7 @@ function shallowReadonly(target) { } __name(shallowReadonly, "shallowReadonly"); function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject$5(target)) { + if (!isObject$6(target)) { if (false) { warn$3( `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( @@ -2823,10 +1549,13 @@ function markRaw(value3) { return value3; } __name(markRaw, "markRaw"); -const toReactive$1 = /* @__PURE__ */ __name((value3) => isObject$5(value3) ? reactive(value3) : value3, "toReactive$1"); -const toReadonly = /* @__PURE__ */ __name((value3) => isObject$5(value3) ? readonly(value3) : value3, "toReadonly"); +const toReactive$1 = /* @__PURE__ */ __name((value3) => isObject$6(value3) ? reactive(value3) : value3, "toReactive$1"); +const toReadonly = /* @__PURE__ */ __name((value3) => isObject$6(value3) ? readonly(value3) : value3, "toReadonly"); const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`; -const _ComputedRefImpl = class _ComputedRefImpl { +class ComputedRefImpl { + static { + __name(this, "ComputedRefImpl"); + } constructor(getter, _setter, isReadonly2, isSSR) { this.getter = getter; this._setter = _setter; @@ -2860,8 +1589,8 @@ getter: `, this.getter); } return self2._value; } - set value(newValue) { - this._setter(newValue); + set value(newValue2) { + this._setter(newValue2); } // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x get _dirty() { @@ -2871,9 +1600,7 @@ getter: `, this.getter); this.effect.dirty = v2; } // #endregion -}; -__name(_ComputedRefImpl, "ComputedRefImpl"); -let ComputedRefImpl = _ComputedRefImpl; +} function computed$1(getterOrOptions, debugOptions, isSSR = false) { let getter; let setter; @@ -2896,12 +1623,12 @@ function computed$1(getterOrOptions, debugOptions, isSSR = false) { } __name(computed$1, "computed$1"); function trackRefValue(ref2) { - var _a2; + var _a; if (shouldTrack && activeEffect) { ref2 = toRaw(ref2); trackEffect( activeEffect, - (_a2 = ref2.dep) != null ? _a2 : ref2.dep = createDep( + (_a = ref2.dep) != null ? _a : ref2.dep = createDep( () => ref2.dep = void 0, ref2 instanceof ComputedRefImpl ? ref2 : void 0 ), @@ -2951,7 +1678,10 @@ function createRef(rawValue, shallow) { return new RefImpl(rawValue, shallow); } __name(createRef, "createRef"); -const _RefImpl = class _RefImpl { +class RefImpl { + static { + __name(this, "RefImpl"); + } constructor(value3, __v_isShallow) { this.__v_isShallow = __v_isShallow; this.dep = void 0; @@ -2973,9 +1703,7 @@ const _RefImpl = class _RefImpl { triggerRefValue(this, 4, newVal, oldVal); } } -}; -__name(_RefImpl, "RefImpl"); -let RefImpl = _RefImpl; +} function triggerRef(ref2) { triggerRefValue(ref2, 4, false ? ref2.value : void 0); } @@ -2991,9 +1719,9 @@ __name(toValue$2, "toValue$2"); const shallowUnwrapHandlers = { get: /* @__PURE__ */ __name((target, key, receiver) => unref(Reflect.get(target, key, receiver)), "get"), set: /* @__PURE__ */ __name((target, key, value3, receiver) => { - const oldValue = target[key]; - if (isRef(oldValue) && !isRef(value3)) { - oldValue.value = value3; + const oldValue2 = target[key]; + if (isRef(oldValue2) && !isRef(value3)) { + oldValue2.value = value3; return true; } else { return Reflect.set(target, key, value3, receiver); @@ -3004,7 +1732,10 @@ function proxyRefs(objectWithRefs) { return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); } __name(proxyRefs, "proxyRefs"); -const _CustomRefImpl = class _CustomRefImpl { +class CustomRefImpl { + static { + __name(this, "CustomRefImpl"); + } constructor(factory) { this.dep = void 0; this.__v_isRef = true; @@ -3021,9 +1752,7 @@ const _CustomRefImpl = class _CustomRefImpl { set value(newVal) { this._set(newVal); } -}; -__name(_CustomRefImpl, "CustomRefImpl"); -let CustomRefImpl = _CustomRefImpl; +} function customRef(factory) { return new CustomRefImpl(factory); } @@ -3032,14 +1761,17 @@ function toRefs$1(object) { if (false) { warn$3(`toRefs() expects a reactive object but received a plain one.`); } - const ret = isArray$3(object) ? new Array(object.length) : {}; + const ret = isArray$5(object) ? new Array(object.length) : {}; for (const key in object) { ret[key] = propertyToRef(object, key); } return ret; } __name(toRefs$1, "toRefs$1"); -const _ObjectRefImpl = class _ObjectRefImpl { +class ObjectRefImpl { + static { + __name(this, "ObjectRefImpl"); + } constructor(_object, _key, _defaultValue) { this._object = _object; this._key = _key; @@ -3056,10 +1788,11 @@ const _ObjectRefImpl = class _ObjectRefImpl { get dep() { return getDepFromReactive(toRaw(this._object), this._key); } -}; -__name(_ObjectRefImpl, "ObjectRefImpl"); -let ObjectRefImpl = _ObjectRefImpl; -const _GetterRefImpl = class _GetterRefImpl { +} +class GetterRefImpl { + static { + __name(this, "GetterRefImpl"); + } constructor(_getter) { this._getter = _getter; this.__v_isRef = true; @@ -3068,15 +1801,13 @@ const _GetterRefImpl = class _GetterRefImpl { get value() { return this._getter(); } -}; -__name(_GetterRefImpl, "GetterRefImpl"); -let GetterRefImpl = _GetterRefImpl; +} function toRef$1(source, key, defaultValue) { if (isRef(source)) { return source; } else if (isFunction$3(source)) { return new GetterRefImpl(source); - } else if (isObject$5(source) && arguments.length > 1) { + } else if (isObject$6(source) && arguments.length > 1) { return propertyToRef(source, key, defaultValue); } else { return ref(source); @@ -3121,7 +1852,7 @@ function popWarningContext() { stack.pop(); } __name(popWarningContext, "popWarningContext"); -function warn$1(msg, ...args) { +function warn$1$1(msg, ...args) { pauseTracking(); const instance = stack.length ? stack[stack.length - 1].component : null; const appWarnHandler = instance && instance.appContext.config.warnHandler; @@ -3134,8 +1865,8 @@ function warn$1(msg, ...args) { [ // eslint-disable-next-line no-restricted-syntax msg + args.map((a) => { - var _a2, _b2; - return (_b2 = (_a2 = a.toString) == null ? void 0 : _a2.call(a)) != null ? _b2 : JSON.stringify(a); + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); }).join(""), instance && instance.proxy, trace.map( @@ -3155,7 +1886,7 @@ function warn$1(msg, ...args) { } resetTracking(); } -__name(warn$1, "warn$1"); +__name(warn$1$1, "warn$1$1"); function getComponentTrace() { let currentVNode = stack[stack.length - 1]; if (!currentVNode) { @@ -3180,8 +1911,8 @@ function getComponentTrace() { __name(getComponentTrace, "getComponentTrace"); function formatTrace(trace) { const logs = []; - trace.forEach((entry, i2) => { - logs.push(...i2 === 0 ? [] : [` + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` `], ...formatTraceEntry(entry)); }); return logs; @@ -3212,7 +1943,7 @@ function formatProps(props) { } __name(formatProps, "formatProps"); function formatProp(key, value3, raw) { - if (isString$4(value3)) { + if (isString$5(value3)) { value3 = JSON.stringify(value3); return raw ? value3 : [`${key}=${value3}`]; } else if (typeof value3 === "number" || typeof value3 === "boolean" || value3 == null) { @@ -3233,9 +1964,9 @@ function assertNumber(val, type) { if (val === void 0) { return; } else if (typeof val !== "number") { - warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + warn$1$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); } else if (isNaN(val)) { - warn$1(`${type} is NaN - the duration expression might be incorrect.`); + warn$1$1(`${type} is NaN - the duration expression might be incorrect.`); } } __name(assertNumber, "assertNumber"); @@ -3313,21 +2044,21 @@ __name(callWithErrorHandling, "callWithErrorHandling"); function callWithAsyncErrorHandling(fn, instance, type, args) { if (isFunction$3(fn)) { const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise$2(res)) { + if (res && isPromise$1(res)) { res.catch((err) => { handleError(err, instance, type); }); } return res; } - if (isArray$3(fn)) { - const values2 = []; - for (let i2 = 0; i2 < fn.length; i2++) { - values2.push(callWithAsyncErrorHandling(fn[i2], instance, type, args)); + if (isArray$5(fn)) { + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); } - return values2; + return values; } else if (false) { - warn$1( + warn$1$1( `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` ); } @@ -3342,8 +2073,8 @@ function handleError(err, instance, type, throwInDev = true) { while (cur) { const errorCapturedHooks = cur.ec; if (errorCapturedHooks) { - for (let i2 = 0; i2 < errorCapturedHooks.length; i2++) { - if (errorCapturedHooks[i2](err, exposedInstance, errorInfo) === false) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { return; } } @@ -3372,7 +2103,7 @@ function logError(err, type, contextVNode, throwInDev = true) { if (contextVNode) { pushWarningContext(contextVNode); } - warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + warn$1$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); if (contextVNode) { popWarningContext(); } @@ -3401,14 +2132,14 @@ function nextTick(fn) { return fn ? p2.then(this ? fn.bind(this) : fn) : p2; } __name(nextTick, "nextTick"); -function findInsertionIndex(id2) { +function findInsertionIndex$1(id3) { let start2 = flushIndex + 1; let end = queue.length; while (start2 < end) { const middle = start2 + end >>> 1; const middleJob = queue[middle]; const middleJobId = getId(middleJob); - if (middleJobId < id2 || middleJobId === id2 && middleJob.pre) { + if (middleJobId < id3 || middleJobId === id3 && middleJob.pre) { start2 = middle + 1; } else { end = middle; @@ -3416,7 +2147,7 @@ function findInsertionIndex(id2) { } return start2; } -__name(findInsertionIndex, "findInsertionIndex"); +__name(findInsertionIndex$1, "findInsertionIndex$1"); function queueJob(job) { if (!queue.length || !queue.includes( job, @@ -3425,7 +2156,7 @@ function queueJob(job) { if (job.id == null) { queue.push(job); } else { - queue.splice(findInsertionIndex(job.id), 0, job); + queue.splice(findInsertionIndex$1(job.id), 0, job); } queueFlush(); } @@ -3439,14 +2170,14 @@ function queueFlush() { } __name(queueFlush, "queueFlush"); function invalidateJob(job) { - const i2 = queue.indexOf(job); - if (i2 > flushIndex) { - queue.splice(i2, 1); + const i = queue.indexOf(job); + if (i > flushIndex) { + queue.splice(i, 1); } } __name(invalidateJob, "invalidateJob"); function queuePostFlushCb(cb) { - if (!isArray$3(cb)) { + if (!isArray$5(cb)) { if (!activePostFlushCbs || !activePostFlushCbs.includes( cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex @@ -3459,12 +2190,12 @@ function queuePostFlushCb(cb) { queueFlush(); } __name(queuePostFlushCb, "queuePostFlushCb"); -function flushPreFlushCbs(instance, seen2, i2 = isFlushing ? flushIndex + 1 : 0) { +function flushPreFlushCbs(instance, seen2, i = isFlushing ? flushIndex + 1 : 0) { if (false) { seen2 = seen2 || /* @__PURE__ */ new Map(); } - for (; i2 < queue.length; i2++) { - const cb = queue[i2]; + for (; i < queue.length; i++) { + const cb = queue[i]; if (cb && cb.pre) { if (instance && cb.id !== instance.uid) { continue; @@ -3472,8 +2203,8 @@ function flushPreFlushCbs(instance, seen2, i2 = isFlushing ? flushIndex + 1 : 0) if (false) { continue; } - queue.splice(i2, 1); - i2--; + queue.splice(i, 1); + i--; cb(); } } @@ -3507,12 +2238,12 @@ function flushPostFlushCbs(seen2) { __name(flushPostFlushCbs, "flushPostFlushCbs"); const getId = /* @__PURE__ */ __name((job) => job.id == null ? Infinity : job.id, "getId"); const comparator = /* @__PURE__ */ __name((a, b) => { - const diff = getId(a) - getId(b); - if (diff === 0) { + const diff2 = getId(a) - getId(b); + if (diff2 === 0) { if (a.pre && !b.pre) return -1; if (b.pre && !a.pre) return 1; } - return diff; + return diff2; }, "comparator"); function flushJobs(seen2) { isFlushPending = false; @@ -3575,11 +2306,11 @@ if (false) { } const map = /* @__PURE__ */ new Map(); function registerHMR(instance) { - const id2 = instance.type.__hmrId; - let record = map.get(id2); + const id3 = instance.type.__hmrId; + let record = map.get(id3); if (!record) { - createRecord(id2, instance.type); - record = map.get(id2); + createRecord(id3, instance.type); + record = map.get(id3); } record.instances.add(instance); } @@ -3588,11 +2319,11 @@ function unregisterHMR(instance) { map.get(instance.type.__hmrId).instances.delete(instance); } __name(unregisterHMR, "unregisterHMR"); -function createRecord(id2, initialDef) { - if (map.has(id2)) { +function createRecord(id3, initialDef) { + if (map.has(id3)) { return false; } - map.set(id2, { + map.set(id3, { initialDef: normalizeClassComponent(initialDef), instances: /* @__PURE__ */ new Set() }); @@ -3603,8 +2334,8 @@ function normalizeClassComponent(component) { return isClassComponent(component) ? component.__vccOpts : component; } __name(normalizeClassComponent, "normalizeClassComponent"); -function rerender(id2, newRender) { - const record = map.get(id2); +function rerender(id3, newRender) { + const record = map.get(id3); if (!record) { return; } @@ -3622,8 +2353,8 @@ function rerender(id2, newRender) { }); } __name(rerender, "rerender"); -function reload(id2, newComp) { - const record = map.get(id2); +function reload(id3, newComp) { + const record = map.get(id3); if (!record) return; newComp = normalizeClassComponent(newComp); updateComponentDef(record.initialDef, newComp); @@ -3669,7 +2400,7 @@ function reload(id2, newComp) { } __name(reload, "reload"); function updateComponentDef(oldComp, newComp) { - extend(oldComp, newComp); + extend$1(oldComp, newComp); for (const key in oldComp) { if (key !== "__file" && !(key in newComp)) { delete oldComp[key]; @@ -3678,11 +2409,11 @@ function updateComponentDef(oldComp, newComp) { } __name(updateComponentDef, "updateComponentDef"); function tryWrap(fn) { - return (id2, arg) => { + return (id3, arg) => { try { - return fn(id2, arg); - } catch (e) { - console.error(e); + return fn(id3, arg); + } catch (e2) { + console.error(e2); console.warn( `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` ); @@ -3693,20 +2424,20 @@ __name(tryWrap, "tryWrap"); let devtools$1; let buffer = []; let devtoolsNotInstalled = false; -function emit$1(event2, ...args) { +function emit$1(event, ...args) { if (devtools$1) { - devtools$1.emit(event2, ...args); + devtools$1.emit(event, ...args); } else if (!devtoolsNotInstalled) { - buffer.push({ event: event2, args }); + buffer.push({ event, args }); } } __name(emit$1, "emit$1"); function setDevtoolsHook$1(hook, target) { - var _a2, _b2; + var _a, _b; devtools$1 = hook; if (devtools$1) { devtools$1.enabled = true; - buffer.forEach(({ event: event2, args }) => devtools$1.emit(event2, ...args)); + buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); buffer = []; } else if ( // handle late devtools injection - only do this if we are in an actual @@ -3715,7 +2446,7 @@ function setDevtoolsHook$1(hook, target) { typeof window !== "undefined" && // some envs mock window but not fully window.HTMLElement && // also exclude jsdom // eslint-disable-next-line no-restricted-syntax - !((_b2 = (_a2 = window.navigator) == null ? void 0 : _a2.userAgent) == null ? void 0 : _b2.includes("jsdom")) + !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) ) { const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; replay.push((newHook) => { @@ -3737,7 +2468,7 @@ __name(setDevtoolsHook$1, "setDevtoolsHook$1"); function devtoolsInitApp(app2, version2) { emit$1("app:init", app2, version2, { Fragment, - Text, + Text: Text$1, Comment, Static }); @@ -3793,17 +2524,17 @@ function createDevtoolsPerformanceHook(hook) { }; } __name(createDevtoolsPerformanceHook, "createDevtoolsPerformanceHook"); -function devtoolsComponentEmit(component, event2, params) { +function devtoolsComponentEmit(component, event, params) { emit$1( "component:emit", component.appContext.app, component, - event2, + event, params ); } __name(devtoolsComponentEmit, "devtoolsComponentEmit"); -function emit(instance, event2, ...rawArgs) { +function emit(instance, event, ...rawArgs) { if (instance.isUnmounted) return; const props = instance.vnode.props || EMPTY_OBJ; if (false) { @@ -3812,19 +2543,19 @@ function emit(instance, event2, ...rawArgs) { propsOptions: [propsOptions] } = instance; if (emitsOptions) { - if (!(event2 in emitsOptions) && true) { - if (!propsOptions || !(toHandlerKey(event2) in propsOptions)) { - warn$1( - `Component emitted event "${event2}" but it is neither declared in the emits option nor as an "${toHandlerKey(event2)}" prop.` + if (!(event in emitsOptions) && true) { + if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { + warn$1$1( + `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.` ); } } else { - const validator2 = emitsOptions[event2]; - if (isFunction$3(validator2)) { - const isValid2 = validator2(...rawArgs); + const validator3 = emitsOptions[event]; + if (isFunction$3(validator3)) { + const isValid2 = validator3(...rawArgs); if (!isValid2) { - warn$1( - `Invalid event arguments: event validation failed for event "${event2}".` + warn$1$1( + `Invalid event arguments: event validation failed for event "${event}".` ); } } @@ -3832,43 +2563,43 @@ function emit(instance, event2, ...rawArgs) { } } let args = rawArgs; - const isModelListener2 = event2.startsWith("update:"); - const modelArg = isModelListener2 && event2.slice(7); + const isModelListener2 = event.startsWith("update:"); + const modelArg = isModelListener2 && event.slice(7); if (modelArg && modelArg in props) { const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; - const { number: number2, trim } = props[modifiersKey] || EMPTY_OBJ; - if (trim) { - args = rawArgs.map((a) => isString$4(a) ? a.trim() : a); + const { number: number2, trim: trim2 } = props[modifiersKey] || EMPTY_OBJ; + if (trim2) { + args = rawArgs.map((a) => isString$5(a) ? a.trim() : a); } if (number2) { args = rawArgs.map(looseToNumber); } } if (false) { - devtoolsComponentEmit(instance, event2, args); + devtoolsComponentEmit(instance, event, args); } if (false) { - const lowerCaseEvent = event2.toLowerCase(); - if (lowerCaseEvent !== event2 && props[toHandlerKey(lowerCaseEvent)]) { - warn$1( + const lowerCaseEvent = event.toLowerCase(); + if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { + warn$1$1( `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName( instance, instance.type - )} but the handler is registered for "${event2}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate$1( - event2 - )}" instead of "${event2}".` + )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate$1( + event + )}" instead of "${event}".` ); } } let handlerName; - let handler4 = props[handlerName = toHandlerKey(event2)] || // also try camelCase event handler (#2249) - props[handlerName = toHandlerKey(camelize$1(event2))]; - if (!handler4 && isModelListener2) { - handler4 = props[handlerName = toHandlerKey(hyphenate$1(event2))]; + let handler6 = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249) + props[handlerName = toHandlerKey(camelize$1(event))]; + if (!handler6 && isModelListener2) { + handler6 = props[handlerName = toHandlerKey(hyphenate$1(event))]; } - if (handler4) { + if (handler6) { callWithAsyncErrorHandling( - handler4, + handler6, instance, 6, args @@ -3905,7 +2636,7 @@ function normalizeEmitsOptions(comp, appContext, asMixin = false) { const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); if (normalizedFromExtend) { hasExtends = true; - extend(normalized, normalizedFromExtend); + extend$1(normalized, normalizedFromExtend); } }, "extendEmits"); if (!asMixin && appContext.mixins.length) { @@ -3919,17 +2650,17 @@ function normalizeEmitsOptions(comp, appContext, asMixin = false) { } } if (!raw && !hasExtends) { - if (isObject$5(comp)) { + if (isObject$6(comp)) { cache2.set(comp, null); } return null; } - if (isArray$3(raw)) { + if (isArray$5(raw)) { raw.forEach((key) => normalized[key] = null); } else { - extend(normalized, raw); + extend$1(normalized, raw); } - if (isObject$5(comp)) { + if (isObject$6(comp)) { cache2.set(comp, normalized); } return normalized; @@ -3952,8 +2683,8 @@ function setCurrentRenderingInstance(instance) { return prev2; } __name(setCurrentRenderingInstance, "setCurrentRenderingInstance"); -function pushScopeId(id2) { - currentScopeId = id2; +function pushScopeId(id3) { + currentScopeId = id3; } __name(pushScopeId, "pushScopeId"); function popScopeId() { @@ -4009,7 +2740,7 @@ function renderComponentRoot(instance) { render: render2, renderCache, props, - data: data21, + data: data23, setupState, ctx, inheritAttrs @@ -4025,7 +2756,7 @@ function renderComponentRoot(instance) { const proxyToUse = withProxy || proxy; const thisProxy = false ? new Proxy(proxyToUse, { get(target, key, receiver) { - warn$1( + warn$1$1( `Property '${String( key )}' was accessed via 'this'. Avoid using 'this' in templates.` @@ -4040,7 +2771,7 @@ function renderComponentRoot(instance) { renderCache, false ? shallowReadonly(props) : props, setupState, - data21, + data23, ctx ) ); @@ -4073,14 +2804,14 @@ function renderComponentRoot(instance) { handleError(err, instance, 1); result = createVNode(Comment); } - let root26 = result; + let root23 = result; let setRoot = void 0; if (false) { - [root26, setRoot] = getChildRoot(result); + [root23, setRoot] = getChildRoot(result); } if (fallthroughAttrs && inheritAttrs !== false) { const keys2 = Object.keys(fallthroughAttrs); - const { shapeFlag } = root26; + const { shapeFlag } = root23; if (keys2.length) { if (shapeFlag & (1 | 6)) { if (propsOptions && keys2.some(isModelListener)) { @@ -4089,13 +2820,13 @@ function renderComponentRoot(instance) { propsOptions ); } - root26 = cloneVNode(root26, fallthroughAttrs, false, true); + root23 = cloneVNode(root23, fallthroughAttrs, false, true); } else if (false) { const allAttrs = Object.keys(attrs3); const eventAttrs = []; const extraAttrs = []; - for (let i2 = 0, l = allAttrs.length; i2 < l; i2++) { - const key = allAttrs[i2]; + for (let i = 0, l = allAttrs.length; i < l; i++) { + const key = allAttrs[i]; if (isOn(key)) { if (!isModelListener(key)) { eventAttrs.push(key[2].toLowerCase() + key.slice(3)); @@ -4105,12 +2836,12 @@ function renderComponentRoot(instance) { } } if (extraAttrs.length) { - warn$1( + warn$1$1( `Extraneous non-props attributes (${extraAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.` ); } if (eventAttrs.length) { - warn$1( + warn$1$1( `Extraneous non-emits event listeners (${eventAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.` ); } @@ -4119,25 +2850,25 @@ function renderComponentRoot(instance) { } if (vnode.dirs) { if (false) { - warn$1( + warn$1$1( `Runtime directive used on component with non-element root node. The directives will not function as intended.` ); } - root26 = cloneVNode(root26, null, false, true); - root26.dirs = root26.dirs ? root26.dirs.concat(vnode.dirs) : vnode.dirs; + root23 = cloneVNode(root23, null, false, true); + root23.dirs = root23.dirs ? root23.dirs.concat(vnode.dirs) : vnode.dirs; } if (vnode.transition) { if (false) { - warn$1( + warn$1$1( `Component inside renders non-element root node that cannot be animated.` ); } - root26.transition = vnode.transition; + root23.transition = vnode.transition; } if (false) { - setRoot(root26); + setRoot(root23); } else { - result = root26; + result = root23; } setCurrentRenderingInstance(prev2); return result; @@ -4168,8 +2899,8 @@ const getChildRoot = /* @__PURE__ */ __name((vnode) => { }, "getChildRoot"); function filterSingleRoot(children, recurse = true) { let singleRoot; - for (let i2 = 0; i2 < children.length; i2++) { - const child = children[i2]; + for (let i = 0; i < children.length; i++) { + const child = children[i]; if (isVNode$1(child)) { if (child.type !== Comment || child.children === "v-if") { if (singleRoot) { @@ -4230,8 +2961,8 @@ function shouldUpdateComponent(prevVNode, nextVNode, optimized) { return hasPropsChanged(prevProps, nextProps, emits); } else if (patchFlag & 8) { const dynamicProps = nextVNode.dynamicProps; - for (let i2 = 0; i2 < dynamicProps.length; i2++) { - const key = dynamicProps[i2]; + for (let i = 0; i < dynamicProps.length; i++) { + const key = dynamicProps[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { return true; } @@ -4262,8 +2993,8 @@ function hasPropsChanged(prevProps, nextProps, emitsOptions) { if (nextKeys.length !== Object.keys(prevProps).length) { return true; } - for (let i2 = 0; i2 < nextKeys.length; i2++) { - const key = nextKeys[i2]; + for (let i = 0; i < nextKeys.length; i++) { + const key = nextKeys[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { return true; } @@ -4273,11 +3004,11 @@ function hasPropsChanged(prevProps, nextProps, emitsOptions) { __name(hasPropsChanged, "hasPropsChanged"); function updateHOCHostEl({ vnode, parent }, el) { while (parent) { - const root26 = parent.subTree; - if (root26.suspense && root26.suspense.activeBranch === vnode) { - root26.el = vnode.el; + const root23 = parent.subTree; + if (root23.suspense && root23.suspense.activeBranch === vnode) { + root23.el = vnode.el; } - if (root26 === vnode) { + if (root23 === vnode) { (vnode = parent.vnode).el = el; parent = parent.parent; } else { @@ -4294,7 +3025,7 @@ function resolveComponent(name, maybeSelfReference) { __name(resolveComponent, "resolveComponent"); const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); function resolveDynamicComponent(component) { - if (isString$4(component)) { + if (isString$5(component)) { return resolveAsset(COMPONENTS, component, false) || component; } else { return component || NULL_DYNAMIC_COMPONENT; @@ -4330,11 +3061,11 @@ function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false if (false) { const extra = type === COMPONENTS ? ` If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; - warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + warn$1$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); } return res; } else if (false) { - warn$1( + warn$1$1( `resolve${capitalize$1(type.slice(0, -1))} can only be used in render() or setup().` ); } @@ -4399,7 +3130,7 @@ function triggerEvent(vnode, name) { __name(triggerEvent, "triggerEvent"); function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { const { - p: patch, + p: patch2, o: { createElement: createElement2 } } = rendererInternals; const hiddenContainer = createElement2("div"); @@ -4415,7 +3146,7 @@ function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense optimized, rendererInternals ); - patch( + patch2( null, suspense.pendingBranch = vnode.ssContent, hiddenContainer, @@ -4428,7 +3159,7 @@ function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense if (suspense.deps > 0) { triggerEvent(vnode, "onPending"); triggerEvent(vnode, "onFallback"); - patch( + patch2( null, vnode.ssFallback, container, @@ -4445,7 +3176,7 @@ function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense } } __name(mountSuspense, "mountSuspense"); -function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement: createElement2 } }) { +function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch2, um: unmount, o: { createElement: createElement2 } }) { const suspense = n2.suspense = n1.suspense; suspense.vnode = n2; n2.el = n1.el; @@ -4455,7 +3186,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl if (pendingBranch) { suspense.pendingBranch = newBranch; if (isSameVNodeType(newBranch, pendingBranch)) { - patch( + patch2( pendingBranch, newBranch, suspense.hiddenContainer, @@ -4470,7 +3201,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl suspense.resolve(); } else if (isInFallback) { if (!isHydrating) { - patch( + patch2( activeBranch, newFallback, container, @@ -4497,7 +3228,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl suspense.effects.length = 0; suspense.hiddenContainer = createElement2("div"); if (isInFallback) { - patch( + patch2( null, newBranch, suspense.hiddenContainer, @@ -4511,7 +3242,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl if (suspense.deps <= 0) { suspense.resolve(); } else { - patch( + patch2( activeBranch, newFallback, container, @@ -4526,7 +3257,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl setActiveBranch(suspense, newFallback); } } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { - patch( + patch2( activeBranch, newBranch, container, @@ -4539,7 +3270,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl ); suspense.resolve(true); } else { - patch( + patch2( null, newBranch, suspense.hiddenContainer, @@ -4557,7 +3288,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl } } else { if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { - patch( + patch2( activeBranch, newBranch, container, @@ -4577,7 +3308,7 @@ function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, sl } else { suspense.pendingId = suspenseId++; } - patch( + patch2( null, newBranch, suspense.hiddenContainer, @@ -4615,7 +3346,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe ); } const { - p: patch, + p: patch2, m: move, um: unmount, n: next2, @@ -4738,7 +3469,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe if (!suspense.isInFallback) { return; } - patch( + patch2( null, fallbackVNode, container2, @@ -4900,10 +3631,10 @@ function normalizeSuspenseSlot(s) { closeBlock(); } } - if (isArray$3(s)) { + if (isArray$5(s)) { const singleChild = filterSingleRoot(s); if (false) { - warn$1(` slots expect a single root node.`); + warn$1$1(` slots expect a single root node.`); } s = singleChild; } @@ -4916,7 +3647,7 @@ function normalizeSuspenseSlot(s) { __name(normalizeSuspenseSlot, "normalizeSuspenseSlot"); function queueEffectWithSuspense(fn, suspense) { if (suspense && suspense.pendingBranch) { - if (isArray$3(fn)) { + if (isArray$5(fn)) { suspense.effects.push(...fn); } else { suspense.effects.push(fn); @@ -4965,7 +3696,7 @@ function injectHook(type, hook, target = currentInstance, prepend = false) { return wrappedHook; } else if (false) { const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); - warn$1( + warn$1$1( `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` ); } @@ -4995,7 +3726,7 @@ function onErrorCaptured(hook, target = currentInstance) { __name(onErrorCaptured, "onErrorCaptured"); function validateDirectiveName(name) { if (isBuiltInDirective(name)) { - warn$1("Do not use built-in directive ids as custom directive id: " + name); + warn$1$1("Do not use built-in directive ids as custom directive id: " + name); } } __name(validateDirectiveName, "validateDirectiveName"); @@ -5005,8 +3736,8 @@ function withDirectives(vnode, directives) { } const instance = getComponentPublicInstance(currentRenderingInstance); const bindings = vnode.dirs || (vnode.dirs = []); - for (let i2 = 0; i2 < directives.length; i2++) { - let [dir, value3, arg, modifiers = EMPTY_OBJ] = directives[i2]; + for (let i = 0; i < directives.length; i++) { + let [dir, value3, arg, modifiers = EMPTY_OBJ] = directives[i]; if (dir) { if (isFunction$3(dir)) { dir = { @@ -5033,10 +3764,10 @@ __name(withDirectives, "withDirectives"); function invokeDirectiveHook(vnode, prevVNode, instance, name) { const bindings = vnode.dirs; const oldBindings = prevVNode && prevVNode.dirs; - for (let i2 = 0; i2 < bindings.length; i2++) { - const binding = bindings[i2]; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; if (oldBindings) { - binding.oldValue = oldBindings[i2].value; + binding.oldValue = oldBindings[i].value; } let hook = binding.dir[name]; if (hook) { @@ -5055,31 +3786,31 @@ __name(invokeDirectiveHook, "invokeDirectiveHook"); function renderList(source, renderItem, cache2, index2) { let ret; const cached = cache2 && cache2[index2]; - if (isArray$3(source) || isString$4(source)) { + if (isArray$5(source) || isString$5(source)) { ret = new Array(source.length); - for (let i2 = 0, l = source.length; i2 < l; i2++) { - ret[i2] = renderItem(source[i2], i2, void 0, cached && cached[i2]); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]); } } else if (typeof source === "number") { if (false) { - warn$1(`The v-for range expect an integer value but got ${source}.`); + warn$1$1(`The v-for range expect an integer value but got ${source}.`); } ret = new Array(source); - for (let i2 = 0; i2 < source; i2++) { - ret[i2] = renderItem(i2 + 1, i2, void 0, cached && cached[i2]); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); } - } else if (isObject$5(source)) { + } else if (isObject$6(source)) { if (source[Symbol.iterator]) { ret = Array.from( source, - (item2, i2) => renderItem(item2, i2, void 0, cached && cached[i2]) + (item2, i) => renderItem(item2, i, void 0, cached && cached[i]) ); } else { const keys2 = Object.keys(source); ret = new Array(keys2.length); - for (let i2 = 0, l = keys2.length; i2 < l; i2++) { - const key = keys2[i2]; - ret[i2] = renderItem(source[key], key, i2, cached && cached[i2]); + for (let i = 0, l = keys2.length; i < l; i++) { + const key = keys2[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); } } } else { @@ -5092,9 +3823,9 @@ function renderList(source, renderItem, cache2, index2) { } __name(renderList, "renderList"); function createSlots(slots, dynamicSlots) { - for (let i2 = 0; i2 < dynamicSlots.length; i2++) { - const slot = dynamicSlots[i2]; - if (isArray$3(slot)) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if (isArray$5(slot)) { for (let j = 0; j < slot.length; j++) { slots[slot[j].name] = slot[j].fn; } @@ -5115,11 +3846,11 @@ function defineComponent(options3, extraOptions) { return isFunction$3(options3) ? ( // #8326: extend call and options.name access are considered side-effects // by Rollup, so we have to wrap it in a pure-annotated IIFE. - /* @__PURE__ */ (() => extend({ name: options3.name }, extraOptions, { setup: options3 }))() + /* @__PURE__ */ (() => extend$1({ name: options3.name }, extraOptions, { setup: options3 }))() ) : options3; } __name(defineComponent, "defineComponent"); -const isAsyncWrapper = /* @__PURE__ */ __name((i2) => !!i2.type.__asyncLoader, "isAsyncWrapper"); +const isAsyncWrapper = /* @__PURE__ */ __name((i) => !!i.type.__asyncLoader, "isAsyncWrapper"); /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function defineAsyncComponent(source) { @@ -5149,9 +3880,9 @@ function defineAsyncComponent(source) { return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { err = err instanceof Error ? err : new Error(String(err)); if (userOnError) { - return new Promise((resolve22, reject2) => { - const userRetry = /* @__PURE__ */ __name(() => resolve22(retry()), "userRetry"); - const userFail = /* @__PURE__ */ __name(() => reject2(err), "userFail"); + return new Promise((resolve2, reject3) => { + const userRetry = /* @__PURE__ */ __name(() => resolve2(retry()), "userRetry"); + const userFail = /* @__PURE__ */ __name(() => reject3(err), "userFail"); userOnError(err, userRetry, userFail, retries + 1); }); } else { @@ -5162,7 +3893,7 @@ function defineAsyncComponent(source) { return pendingRequest; } if (false) { - warn$1( + warn$1$1( `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` ); } @@ -5266,7 +3997,7 @@ function renderSlot(slots, name, props = {}, fallback, noSlotted) { } let slot = slots[name]; if (false) { - warn$1( + warn$1$1( `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` ); slot = /* @__PURE__ */ __name(() => [], "slot"); @@ -5308,7 +4039,7 @@ __name(ensureValidVNode, "ensureValidVNode"); function toHandlers(obj, preserveCaseIfNecessary) { const ret = {}; if (false) { - warn$1(`v-on with no argument expects an object value.`); + warn$1$1(`v-on with no argument expects an object value.`); return ret; } for (const key in obj) { @@ -5317,32 +4048,32 @@ function toHandlers(obj, preserveCaseIfNecessary) { return ret; } __name(toHandlers, "toHandlers"); -const getPublicInstance = /* @__PURE__ */ __name((i2) => { - if (!i2) return null; - if (isStatefulComponent(i2)) return getComponentPublicInstance(i2); - return getPublicInstance(i2.parent); +const getPublicInstance = /* @__PURE__ */ __name((i) => { + if (!i) return null; + if (isStatefulComponent(i)) return getComponentPublicInstance(i); + return getPublicInstance(i.parent); }, "getPublicInstance"); const publicPropertiesMap = ( // Move PURE marker to new line to workaround compiler discarding it // due to type annotation - /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), { - $: /* @__PURE__ */ __name((i2) => i2, "$"), - $el: /* @__PURE__ */ __name((i2) => i2.vnode.el, "$el"), - $data: /* @__PURE__ */ __name((i2) => i2.data, "$data"), - $props: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.props) : i2.props, "$props"), - $attrs: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.attrs) : i2.attrs, "$attrs"), - $slots: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.slots) : i2.slots, "$slots"), - $refs: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.refs) : i2.refs, "$refs"), - $parent: /* @__PURE__ */ __name((i2) => getPublicInstance(i2.parent), "$parent"), - $root: /* @__PURE__ */ __name((i2) => getPublicInstance(i2.root), "$root"), - $emit: /* @__PURE__ */ __name((i2) => i2.emit, "$emit"), - $options: /* @__PURE__ */ __name((i2) => true ? resolveMergedOptions(i2) : i2.type, "$options"), - $forceUpdate: /* @__PURE__ */ __name((i2) => i2.f || (i2.f = () => { - i2.effect.dirty = true; - queueJob(i2.update); + /* @__PURE__ */ extend$1(/* @__PURE__ */ Object.create(null), { + $: /* @__PURE__ */ __name((i) => i, "$"), + $el: /* @__PURE__ */ __name((i) => i.vnode.el, "$el"), + $data: /* @__PURE__ */ __name((i) => i.data, "$data"), + $props: /* @__PURE__ */ __name((i) => false ? shallowReadonly(i.props) : i.props, "$props"), + $attrs: /* @__PURE__ */ __name((i) => false ? shallowReadonly(i.attrs) : i.attrs, "$attrs"), + $slots: /* @__PURE__ */ __name((i) => false ? shallowReadonly(i.slots) : i.slots, "$slots"), + $refs: /* @__PURE__ */ __name((i) => false ? shallowReadonly(i.refs) : i.refs, "$refs"), + $parent: /* @__PURE__ */ __name((i) => getPublicInstance(i.parent), "$parent"), + $root: /* @__PURE__ */ __name((i) => getPublicInstance(i.root), "$root"), + $emit: /* @__PURE__ */ __name((i) => i.emit, "$emit"), + $options: /* @__PURE__ */ __name((i) => true ? resolveMergedOptions(i) : i.type, "$options"), + $forceUpdate: /* @__PURE__ */ __name((i) => i.f || (i.f = () => { + i.effect.dirty = true; + queueJob(i.update); }), "$forceUpdate"), - $nextTick: /* @__PURE__ */ __name((i2) => i2.n || (i2.n = nextTick.bind(i2.proxy)), "$nextTick"), - $watch: /* @__PURE__ */ __name((i2) => true ? instanceWatch.bind(i2) : NOOP, "$watch") + $nextTick: /* @__PURE__ */ __name((i) => i.n || (i.n = nextTick.bind(i.proxy)), "$nextTick"), + $watch: /* @__PURE__ */ __name((i) => true ? instanceWatch.bind(i) : NOOP, "$watch") }) ); const isReservedPrefix = /* @__PURE__ */ __name((key) => key === "_" || key === "$", "isReservedPrefix"); @@ -5352,7 +4083,7 @@ const PublicInstanceProxyHandlers = { if (key === "__v_skip") { return true; } - const { ctx, setupState, data: data21, props, accessCache, type, appContext } = instance; + const { ctx, setupState, data: data23, props, accessCache, type, appContext } = instance; if (false) { return true; } @@ -5364,7 +4095,7 @@ const PublicInstanceProxyHandlers = { case 1: return setupState[key]; case 2: - return data21[key]; + return data23[key]; case 4: return ctx[key]; case 3: @@ -5373,9 +4104,9 @@ const PublicInstanceProxyHandlers = { } else if (hasSetupBinding(setupState, key)) { accessCache[key] = 1; return setupState[key]; - } else if (data21 !== EMPTY_OBJ && hasOwn$3(data21, key)) { + } else if (data23 !== EMPTY_OBJ && hasOwn$3(data23, key)) { accessCache[key] = 2; - return data21[key]; + return data23[key]; } else if ( // only cache other properties when instance has declared (thus stable) // props @@ -5415,29 +4146,29 @@ const PublicInstanceProxyHandlers = { return globalProperties[key]; } } else if (false) { - if (data21 !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$3(data21, key)) { - warn$1( + if (data23 !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$3(data23, key)) { + warn$1$1( `Property ${JSON.stringify( key )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` ); } else if (instance === currentRenderingInstance) { - warn$1( + warn$1$1( `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` ); } } }, set({ _: instance }, key, value3) { - const { data: data21, setupState, ctx } = instance; + const { data: data23, setupState, ctx } = instance; if (hasSetupBinding(setupState, key)) { setupState[key] = value3; return true; } else if (false) { - warn$1(`Cannot mutate \n\n\n","\n\n\n\n\n","import { onMounted, ref } from 'vue'\n\nexport function useDownload(url: string, fileName?: string) {\n const fileSize = ref(null)\n\n const fetchFileSize = async (): Promise => {\n try {\n const response = await fetch(url, { method: 'HEAD' })\n if (!response.ok) throw new Error('Failed to fetch file size')\n\n const size = response.headers.get('content-length')\n if (size) {\n return parseInt(size)\n } else {\n console.error('\"content-length\" header not found')\n return null\n }\n } catch (e) {\n console.error('Error fetching file size:', e)\n return null\n }\n }\n\n /**\n * Trigger browser download\n */\n const triggerBrowserDownload = () => {\n const link = document.createElement('a')\n link.href = url\n link.download = fileName || url.split('/').pop() || 'download'\n link.target = '_blank' // Opens in new tab if download attribute is not supported\n link.rel = 'noopener noreferrer' // Security best practice for _blank links\n link.click()\n }\n\n onMounted(async () => {\n fileSize.value = await fetchFileSize()\n })\n\n return {\n triggerBrowserDownload,\n fileSize\n }\n}\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-progressbar {\\n position: relative;\\n overflow: hidden;\\n height: \".concat(dt('progressbar.height'), \";\\n background: \").concat(dt('progressbar.background'), \";\\n border-radius: \").concat(dt('progressbar.border.radius'), \";\\n}\\n\\n.p-progressbar-value {\\n margin: 0;\\n background: \").concat(dt('progressbar.value.background'), \";\\n}\\n\\n.p-progressbar-label {\\n color: \").concat(dt('progressbar.label.color'), \";\\n font-size: \").concat(dt('progressbar.label.font.size'), \";\\n font-weight: \").concat(dt('progressbar.label.font.weight'), \";\\n}\\n\\n.p-progressbar-determinate .p-progressbar-value {\\n height: 100%;\\n width: 0%;\\n position: absolute;\\n display: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n overflow: hidden;\\n transition: width 1s ease-in-out;\\n}\\n\\n.p-progressbar-determinate .p-progressbar-label {\\n display: inline-flex;\\n}\\n\\n.p-progressbar-indeterminate .p-progressbar-value::before {\\n content: \\\"\\\";\\n position: absolute;\\n background: inherit;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n will-change: left, right;\\n animation: p-progressbar-indeterminate-anim 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\\n}\\n\\n.p-progressbar-indeterminate .p-progressbar-value::after {\\n content: \\\"\\\";\\n position: absolute;\\n background: inherit;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n will-change: left, right;\\n animation: p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;\\n animation-delay: 1.15s;\\n}\\n\\n@-webkit-keyframes p-progressbar-indeterminate-anim {\\n 0% {\\n left: -35%;\\n right: 100%;\\n }\\n 60% {\\n left: 100%;\\n right: -90%;\\n }\\n 100% {\\n left: 100%;\\n right: -90%;\\n }\\n}\\n@keyframes p-progressbar-indeterminate-anim {\\n 0% {\\n left: -35%;\\n right: 100%;\\n }\\n 60% {\\n left: 100%;\\n right: -90%;\\n }\\n 100% {\\n left: 100%;\\n right: -90%;\\n }\\n}\\n@-webkit-keyframes p-progressbar-indeterminate-anim-short {\\n 0% {\\n left: -200%;\\n right: 100%;\\n }\\n 60% {\\n left: 107%;\\n right: -8%;\\n }\\n 100% {\\n left: 107%;\\n right: -8%;\\n }\\n}\\n@keyframes p-progressbar-indeterminate-anim-short {\\n 0% {\\n left: -200%;\\n right: 100%;\\n }\\n 60% {\\n left: 107%;\\n right: -8%;\\n }\\n 100% {\\n left: 107%;\\n right: -8%;\\n }\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance;\n return ['p-progressbar p-component', {\n 'p-progressbar-determinate': instance.determinate,\n 'p-progressbar-indeterminate': instance.indeterminate\n }];\n },\n value: 'p-progressbar-value',\n label: 'p-progressbar-label'\n};\nvar ProgressBarStyle = BaseStyle.extend({\n name: 'progressbar',\n theme: theme,\n classes: classes\n});\n\nexport { ProgressBarStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport ProgressBarStyle from 'primevue/progressbar/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseProgressBar',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: Number,\n \"default\": null\n },\n mode: {\n type: String,\n \"default\": 'determinate'\n },\n showValue: {\n type: Boolean,\n \"default\": true\n }\n },\n style: ProgressBarStyle,\n provide: function provide() {\n return {\n $pcProgressBar: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'ProgressBar',\n \"extends\": script$1,\n inheritAttrs: false,\n computed: {\n progressStyle: function progressStyle() {\n return {\n width: this.value + '%',\n display: 'flex'\n };\n },\n indeterminate: function indeterminate() {\n return this.mode === 'indeterminate';\n },\n determinate: function determinate() {\n return this.mode === 'determinate';\n }\n }\n};\n\nvar _hoisted_1 = [\"aria-valuenow\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n role: \"progressbar\",\n \"class\": _ctx.cx('root'),\n \"aria-valuemin\": \"0\",\n \"aria-valuenow\": _ctx.value,\n \"aria-valuemax\": \"100\"\n }, _ctx.ptmi('root')), [$options.determinate ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('value'),\n style: $options.progressStyle\n }, _ctx.ptm('value')), [_ctx.value != null && _ctx.value !== 0 && _ctx.showValue ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('label')\n }, _ctx.ptm('label')), [renderSlot(_ctx.$slots, \"default\", {}, function () {\n return [createTextVNode(toDisplayString(_ctx.value + '%'), 1)];\n })], 16)) : createCommentVNode(\"\", true)], 16)) : $options.indeterminate ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('value')\n }, _ctx.ptm('value')), null, 16)) : createCommentVNode(\"\", true)], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","export function formatCamelCase(str: string): string {\n // Check if the string is camel case\n const isCamelCase = /^([A-Z][a-z]*)+$/.test(str)\n\n if (!isCamelCase) {\n return str // Return original string if not camel case\n }\n\n // Split the string into words, keeping acronyms together\n const words = str.split(/(?=[A-Z][a-z])|\\d+/)\n\n // Process each word\n const processedWords = words.map((word) => {\n // If the word is all uppercase and longer than one character, it's likely an acronym\n if (word.length > 1 && word === word.toUpperCase()) {\n return word // Keep acronyms as is\n }\n // For other words, ensure the first letter is capitalized\n return word.charAt(0).toUpperCase() + word.slice(1)\n })\n\n // Join the words with spaces\n return processedWords.join(' ')\n}\n\nexport function appendJsonExt(path: string) {\n if (!path.toLowerCase().endsWith('.json')) {\n path += '.json'\n }\n return path\n}\n\nexport function trimJsonExt(path?: string) {\n return path?.replace(/\\.json$/, '')\n}\n\nexport function highlightQuery(text: string, query: string) {\n if (!query) return text\n const regex = new RegExp(`(${query})`, 'gi')\n return text.replace(regex, '$1')\n}\n\nexport function formatNumberWithSuffix(\n num: number,\n {\n precision = 1,\n roundToInt = false\n }: { precision?: number; roundToInt?: boolean } = {}\n): string {\n const suffixes = ['', 'k', 'm', 'b', 't']\n const absNum = Math.abs(num)\n\n if (absNum < 1000) {\n return roundToInt ? Math.round(num).toString() : num.toFixed(precision)\n }\n\n const exp = Math.min(Math.floor(Math.log10(absNum) / 3), suffixes.length - 1)\n const formattedNum = (num / Math.pow(1000, exp)).toFixed(precision)\n\n return `${formattedNum}${suffixes[exp]}`\n}\n\nexport function formatSize(value?: number) {\n if (value === null || value === undefined) {\n return '-'\n }\n\n const bytes = value\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`\n}\n\n/**\n * Finds the common directory prefix between two paths\n * @example\n * findCommonPrefix('a/b/c', 'a/b/d') // returns 'a/b'\n * findCommonPrefix('x/y/z', 'a/b/c') // returns ''\n * findCommonPrefix('a/b/c', 'a/b/c/d') // returns 'a/b/c'\n */\nexport function findCommonPrefix(path1: string, path2: string): string {\n const parts1 = path1.split('/')\n const parts2 = path2.split('/')\n\n const commonParts: string[] = []\n for (let i = 0; i < Math.min(parts1.length, parts2.length); i++) {\n if (parts1[i] === parts2[i]) {\n commonParts.push(parts1[i])\n } else {\n break\n }\n }\n return commonParts.join('/')\n}\n\n/**\n * Returns various filename components.\n * Example:\n * - fullFilename: 'file.txt'\n * - filename: 'file'\n * - suffix: 'txt'\n */\nexport function getFilenameDetails(fullFilename: string) {\n if (fullFilename.includes('.')) {\n return {\n filename: fullFilename.split('.').slice(0, -1).join('.'),\n suffix: fullFilename.split('.').pop() ?? null\n }\n } else {\n return { filename: fullFilename, suffix: null }\n }\n}\n\n/**\n * Returns various path components.\n * Example:\n * - path: 'dir/file.txt'\n * - directory: 'dir'\n * - fullFilename: 'file.txt'\n * - filename: 'file'\n * - suffix: 'txt'\n */\nexport function getPathDetails(path: string) {\n const directory = path.split('/').slice(0, -1).join('/')\n const fullFilename = path.split('/').pop() ?? path\n return { directory, fullFilename, ...getFilenameDetails(fullFilename) }\n}\n\n/**\n * Normalizes a string to be used as an i18n key.\n * Replaces dots with underscores.\n */\nexport function normalizeI18nKey(key: string) {\n return key.replace(/\\./g, '_')\n}\n","import { ElectronAPI } from '@comfyorg/comfyui-electron-types'\n\nexport function isElectron() {\n return 'electronAPI' in window && window['electronAPI'] !== undefined\n}\n\nexport function electronAPI() {\n return (window as any)['electronAPI'] as ElectronAPI\n}\n\ntype NativeContextOptions = Parameters[0]\nexport function showNativeMenu(options?: NativeContextOptions) {\n electronAPI()?.showContextMenu(options)\n}\n","const IPC_CHANNELS = {\n LOADING_PROGRESS: \"loading-progress\",\n IS_PACKAGED: \"is-packaged\",\n RENDERER_READY: \"renderer-ready\",\n RESTART_APP: \"restart-app\",\n REINSTALL: \"reinstall\",\n LOG_MESSAGE: \"log-message\",\n OPEN_DIALOG: \"open-dialog\",\n DOWNLOAD_PROGRESS: \"download-progress\",\n START_DOWNLOAD: \"start-download\",\n PAUSE_DOWNLOAD: \"pause-download\",\n RESUME_DOWNLOAD: \"resume-download\",\n CANCEL_DOWNLOAD: \"cancel-download\",\n DELETE_MODEL: \"delete-model\",\n GET_ALL_DOWNLOADS: \"get-all-downloads\",\n GET_ELECTRON_VERSION: \"get-electron-version\",\n SEND_ERROR_TO_SENTRY: \"send-error-to-sentry\",\n GET_BASE_PATH: \"get-base-path\",\n GET_MODEL_CONFIG_PATH: \"get-model-config-path\",\n OPEN_PATH: \"open-path\",\n OPEN_LOGS_PATH: \"open-logs-path\",\n OPEN_DEV_TOOLS: \"open-dev-tools\",\n TERMINAL_WRITE: \"execute-terminal-command\",\n TERMINAL_RESIZE: \"resize-terminal\",\n TERMINAL_RESTORE: \"restore-terminal\",\n TERMINAL_ON_OUTPUT: \"terminal-output\",\n IS_FIRST_TIME_SETUP: \"is-first-time-setup\",\n GET_SYSTEM_PATHS: \"get-system-paths\",\n VALIDATE_INSTALL_PATH: \"validate-install-path\",\n VALIDATE_COMFYUI_SOURCE: \"validate-comfyui-source\",\n SHOW_DIRECTORY_PICKER: \"show-directory-picker\",\n INSTALL_COMFYUI: \"install-comfyui\",\n SHOW_CONTEXT_MENU: \"show-context-menu\"\n};\nvar ProgressStatus = /* @__PURE__ */ ((ProgressStatus2) => {\n ProgressStatus2[\"INITIAL_STATE\"] = \"initial-state\";\n ProgressStatus2[\"PYTHON_SETUP\"] = \"python-setup\";\n ProgressStatus2[\"STARTING_SERVER\"] = \"starting-server\";\n ProgressStatus2[\"READY\"] = \"ready\";\n ProgressStatus2[\"ERROR\"] = \"error\";\n return ProgressStatus2;\n})(ProgressStatus || {});\nconst ProgressMessages = {\n [\n \"initial-state\"\n /* INITIAL_STATE */\n ]: \"Loading...\",\n [\n \"python-setup\"\n /* PYTHON_SETUP */\n ]: \"Setting up Python Environment...\",\n [\n \"starting-server\"\n /* STARTING_SERVER */\n ]: \"Starting ComfyUI server...\",\n [\n \"ready\"\n /* READY */\n ]: \"Finishing...\",\n [\n \"error\"\n /* ERROR */\n ]: \"Was not able to start ComfyUI. Please check the logs for more details. You can open it from the Help menu. Please report issues to: https://forum.comfy.org\"\n};\nconst ELECTRON_BRIDGE_API = \"electronAPI\";\nconst SENTRY_URL_ENDPOINT = \"https://942cadba58d247c9cab96f45221aa813@o4507954455314432.ingest.us.sentry.io/4508007940685824\";\nconst MigrationItems = [\n {\n id: \"user_files\",\n label: \"User Files\",\n description: \"Settings and user-created workflows\"\n },\n {\n id: \"models\",\n label: \"Models\",\n description: \"Reference model files from existing ComfyUI installations. (No copy)\"\n }\n // TODO: Decide whether we want to auto-migrate custom nodes, and install their dependencies.\n // huchenlei: This is a very essential thing for migration experience.\n // {\n // id: 'custom_nodes',\n // label: 'Custom Nodes',\n // description: 'Reference custom node files from existing ComfyUI installations. (No copy)',\n // },\n];\nconst DEFAULT_SERVER_ARGS = {\n /** The host to use for the ComfyUI server. */\n host: \"127.0.0.1\",\n /** The port to use for the ComfyUI server. */\n port: 8e3,\n // Extra arguments to pass to the ComfyUI server.\n extraServerArgs: {}\n};\nvar DownloadStatus = /* @__PURE__ */ ((DownloadStatus2) => {\n DownloadStatus2[\"PENDING\"] = \"pending\";\n DownloadStatus2[\"IN_PROGRESS\"] = \"in_progress\";\n DownloadStatus2[\"COMPLETED\"] = \"completed\";\n DownloadStatus2[\"PAUSED\"] = \"paused\";\n DownloadStatus2[\"ERROR\"] = \"error\";\n DownloadStatus2[\"CANCELLED\"] = \"cancelled\";\n return DownloadStatus2;\n})(DownloadStatus || {});\nexport {\n DEFAULT_SERVER_ARGS,\n DownloadStatus,\n ELECTRON_BRIDGE_API,\n IPC_CHANNELS,\n MigrationItems,\n ProgressMessages,\n ProgressStatus,\n SENTRY_URL_ENDPOINT\n};\n","import { computed, ref } from 'vue'\nimport { defineStore } from 'pinia'\nimport { isElectron, electronAPI } from '@/utils/envUtil'\nimport {\n type DownloadState,\n DownloadStatus\n} from '@comfyorg/comfyui-electron-types'\n\nexport interface ElectronDownload\n extends Pick {\n progress?: number\n savePath?: string\n status?: DownloadStatus\n}\n\n/** Electron donwloads store handler */\nexport const useElectronDownloadStore = defineStore('downloads', () => {\n const downloads = ref([])\n const { DownloadManager } = electronAPI()\n\n const findByUrl = (url: string) =>\n downloads.value.find((download) => url === download.url)\n\n const initialize = async () => {\n if (isElectron()) {\n const allDownloads = await DownloadManager.getAllDownloads()\n\n for (const download of allDownloads) {\n downloads.value.push(download)\n }\n\n // ToDO: replace with ElectronDownload type\n DownloadManager.onDownloadProgress((data) => {\n if (!findByUrl(data.url)) {\n downloads.value.push(data)\n }\n\n const download = findByUrl(data.url)\n\n if (download) {\n download.progress = data.progress\n download.status = data.status\n download.filename = data.filename\n download.savePath = data.savePath\n }\n })\n }\n }\n\n void initialize()\n\n const start = ({\n url,\n savePath,\n filename\n }: {\n url: string\n savePath: string\n filename: string\n }) => DownloadManager.startDownload(url, savePath, filename)\n const pause = (url: string) => DownloadManager.pauseDownload(url)\n const resume = (url: string) => DownloadManager.resumeDownload(url)\n const cancel = (url: string) => DownloadManager.cancelDownload(url)\n\n return {\n downloads,\n start,\n pause,\n resume,\n cancel,\n findByUrl,\n initialize,\n inProgressDownloads: computed(() =>\n downloads.value.filter(\n ({ status }) => status !== DownloadStatus.COMPLETED\n )\n )\n }\n})\n","\n\n\n\n","\n\n\n\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-tabs {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.p-tablist {\\n display: flex;\\n position: relative;\\n}\\n\\n.p-tabs-scrollable > .p-tablist {\\n overflow: hidden;\\n}\\n\\n.p-tablist-viewport {\\n overflow-x: auto;\\n overflow-y: hidden;\\n scroll-behavior: smooth;\\n scrollbar-width: none;\\n overscroll-behavior: contain auto;\\n}\\n\\n.p-tablist-viewport::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.p-tablist-tab-list {\\n position: relative;\\n display: flex;\\n background: \".concat(dt('tabs.tablist.background'), \";\\n border-style: solid;\\n border-color: \").concat(dt('tabs.tablist.border.color'), \";\\n border-width: \").concat(dt('tabs.tablist.border.width'), \";\\n}\\n\\n.p-tablist-content {\\n flex-grow: 1;\\n}\\n\\n.p-tablist-nav-button {\\n all: unset;\\n position: absolute !important;\\n flex-shrink: 0;\\n top: 0;\\n z-index: 2;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: \").concat(dt('tabs.nav.button.background'), \";\\n color: \").concat(dt('tabs.nav.button.color'), \";\\n width: \").concat(dt('tabs.nav.button.width'), \";\\n transition: color \").concat(dt('tabs.transition.duration'), \", outline-color \").concat(dt('tabs.transition.duration'), \", box-shadow \").concat(dt('tabs.transition.duration'), \";\\n box-shadow: \").concat(dt('tabs.nav.button.shadow'), \";\\n outline-color: transparent;\\n cursor: pointer;\\n}\\n\\n.p-tablist-nav-button:focus-visible {\\n z-index: 1;\\n box-shadow: \").concat(dt('tabs.nav.button.focus.ring.shadow'), \";\\n outline: \").concat(dt('tabs.nav.button.focus.ring.width'), \" \").concat(dt('tabs.nav.button.focus.ring.style'), \" \").concat(dt('tabs.nav.button.focus.ring.color'), \";\\n outline-offset: \").concat(dt('tabs.nav.button.focus.ring.offset'), \";\\n}\\n\\n.p-tablist-nav-button:hover {\\n color: \").concat(dt('tabs.nav.button.hover.color'), \";\\n}\\n\\n.p-tablist-prev-button {\\n left: 0;\\n}\\n\\n.p-tablist-next-button {\\n right: 0;\\n}\\n\\n.p-tab {\\n flex-shrink: 0;\\n cursor: pointer;\\n user-select: none;\\n position: relative;\\n border-style: solid;\\n white-space: nowrap;\\n background: \").concat(dt('tabs.tab.background'), \";\\n border-width: \").concat(dt('tabs.tab.border.width'), \";\\n border-color: \").concat(dt('tabs.tab.border.color'), \";\\n color: \").concat(dt('tabs.tab.color'), \";\\n padding: \").concat(dt('tabs.tab.padding'), \";\\n font-weight: \").concat(dt('tabs.tab.font.weight'), \";\\n transition: background \").concat(dt('tabs.transition.duration'), \", border-color \").concat(dt('tabs.transition.duration'), \", color \").concat(dt('tabs.transition.duration'), \", outline-color \").concat(dt('tabs.transition.duration'), \", box-shadow \").concat(dt('tabs.transition.duration'), \";\\n margin: \").concat(dt('tabs.tab.margin'), \";\\n outline-color: transparent;\\n}\\n\\n.p-tab:not(.p-disabled):focus-visible {\\n z-index: 1;\\n box-shadow: \").concat(dt('tabs.tab.focus.ring.shadow'), \";\\n outline: \").concat(dt('tabs.tab.focus.ring.width'), \" \").concat(dt('tabs.tab.focus.ring.style'), \" \").concat(dt('tabs.tab.focus.ring.color'), \";\\n outline-offset: \").concat(dt('tabs.tab.focus.ring.offset'), \";\\n}\\n\\n.p-tab:not(.p-tab-active):not(.p-disabled):hover {\\n background: \").concat(dt('tabs.tab.hover.background'), \";\\n border-color: \").concat(dt('tabs.tab.hover.border.color'), \";\\n color: \").concat(dt('tabs.tab.hover.color'), \";\\n}\\n\\n.p-tab-active {\\n background: \").concat(dt('tabs.tab.active.background'), \";\\n border-color: \").concat(dt('tabs.tab.active.border.color'), \";\\n color: \").concat(dt('tabs.tab.active.color'), \";\\n}\\n\\n.p-tabpanels {\\n background: \").concat(dt('tabs.tabpanel.background'), \";\\n color: \").concat(dt('tabs.tabpanel.color'), \";\\n padding: \").concat(dt('tabs.tabpanel.padding'), \";\\n outline: 0 none;\\n}\\n\\n.p-tabpanel:focus-visible {\\n box-shadow: \").concat(dt('tabs.tabpanel.focus.ring.shadow'), \";\\n outline: \").concat(dt('tabs.tabpanel.focus.ring.width'), \" \").concat(dt('tabs.tabpanel.focus.ring.style'), \" \").concat(dt('tabs.tabpanel.focus.ring.color'), \";\\n outline-offset: \").concat(dt('tabs.tabpanel.focus.ring.offset'), \";\\n}\\n\\n.p-tablist-active-bar {\\n z-index: 1;\\n display: block;\\n position: absolute;\\n bottom: \").concat(dt('tabs.active.bar.bottom'), \";\\n height: \").concat(dt('tabs.active.bar.height'), \";\\n background: \").concat(dt('tabs.active.bar.background'), \";\\n transition: 250ms cubic-bezier(0.35, 0, 0.25, 1);\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-tabs p-component', {\n 'p-tabs-scrollable': props.scrollable\n }];\n }\n};\nvar TabsStyle = BaseStyle.extend({\n name: 'tabs',\n theme: theme,\n classes: classes\n});\n\nexport { TabsStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TabsStyle from 'primevue/tabs/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseTabs',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n lazy: {\n type: Boolean,\n \"default\": false\n },\n scrollable: {\n type: Boolean,\n \"default\": false\n },\n showNavigators: {\n type: Boolean,\n \"default\": true\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n selectOnFocus: {\n type: Boolean,\n \"default\": false\n }\n },\n style: TabsStyle,\n provide: function provide() {\n return {\n $pcTabs: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Tabs',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:value'],\n data: function data() {\n return {\n id: this.$attrs.id,\n d_value: this.value\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n value: function value(newValue) {\n this.d_value = newValue;\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n },\n methods: {\n updateValue: function updateValue(newValue) {\n if (this.d_value !== newValue) {\n this.d_value = newValue;\n this.$emit('update:value', newValue);\n }\n },\n isVertical: function isVertical() {\n return this.orientation === 'vertical';\n }\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: 'p-tabpanels'\n};\nvar TabPanelsStyle = BaseStyle.extend({\n name: 'tabpanels',\n classes: classes\n});\n\nexport { TabPanelsStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport TabPanelsStyle from 'primevue/tabpanels/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseTabPanels',\n \"extends\": BaseComponent,\n props: {},\n style: TabPanelsStyle,\n provide: function provide() {\n return {\n $pcTabPanels: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'TabPanels',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"presentation\"\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-divider-horizontal {\\n display: flex;\\n width: 100%;\\n position: relative;\\n align-items: center;\\n margin: \".concat(dt('divider.horizontal.margin'), \";\\n padding: \").concat(dt('divider.horizontal.padding'), \";\\n}\\n\\n.p-divider-horizontal:before {\\n position: absolute;\\n display: block;\\n top: 50%;\\n left: 0;\\n width: 100%;\\n content: \\\"\\\";\\n border-top: 1px solid \").concat(dt('divider.border.color'), \";\\n}\\n\\n.p-divider-horizontal .p-divider-content {\\n padding: \").concat(dt('divider.horizontal.content.padding'), \";\\n}\\n\\n.p-divider-vertical {\\n min-height: 100%;\\n margin: 0 1rem;\\n display: flex;\\n position: relative;\\n justify-content: center;\\n margin: \").concat(dt('divider.vertical.margin'), \";\\n padding: \").concat(dt('divider.vertical.padding'), \";\\n}\\n\\n.p-divider-vertical:before {\\n position: absolute;\\n display: block;\\n top: 0;\\n left: 50%;\\n height: 100%;\\n content: \\\"\\\";\\n border-left: 1px solid \").concat(dt('divider.border.color'), \";\\n}\\n\\n.p-divider.p-divider-vertical .p-divider-content {\\n padding: \").concat(dt('divider.vertical.content.padding'), \";\\n}\\n\\n.p-divider-content {\\n z-index: 1;\\n background: \").concat(dt('divider.content.background'), \";\\n color: \").concat(dt('divider.content.color'), \";\\n}\\n\\n.p-divider-solid.p-divider-horizontal:before {\\n border-top-style: solid;\\n}\\n\\n.p-divider-solid.p-divider-vertical:before {\\n border-left-style: solid;\\n}\\n\\n.p-divider-dashed.p-divider-horizontal:before {\\n border-top-style: dashed;\\n}\\n\\n.p-divider-dashed.p-divider-vertical:before {\\n border-left-style: dashed;\\n}\\n\\n.p-divider-dotted.p-divider-horizontal:before {\\n border-top-style: dotted;\\n}\\n\\n.p-divider-dotted.p-divider-vertical:before {\\n border-left-style: dotted;\\n}\\n\");\n};\n\n/* Position */\nvar inlineStyles = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return {\n justifyContent: props.layout === 'horizontal' ? props.align === 'center' || props.align === null ? 'center' : props.align === 'left' ? 'flex-start' : props.align === 'right' ? 'flex-end' : null : null,\n alignItems: props.layout === 'vertical' ? props.align === 'center' || props.align === null ? 'center' : props.align === 'top' ? 'flex-start' : props.align === 'bottom' ? 'flex-end' : null : null\n };\n }\n};\nvar classes = {\n root: function root(_ref3) {\n var props = _ref3.props;\n return ['p-divider p-component', 'p-divider-' + props.layout, 'p-divider-' + props.type, {\n 'p-divider-left': props.layout === 'horizontal' && (!props.align || props.align === 'left')\n }, {\n 'p-divider-center': props.layout === 'horizontal' && props.align === 'center'\n }, {\n 'p-divider-right': props.layout === 'horizontal' && props.align === 'right'\n }, {\n 'p-divider-top': props.layout === 'vertical' && props.align === 'top'\n }, {\n 'p-divider-center': props.layout === 'vertical' && (!props.align || props.align === 'center')\n }, {\n 'p-divider-bottom': props.layout === 'vertical' && props.align === 'bottom'\n }];\n },\n content: 'p-divider-content'\n};\nvar DividerStyle = BaseStyle.extend({\n name: 'divider',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { DividerStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport DividerStyle from 'primevue/divider/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseDivider',\n \"extends\": BaseComponent,\n props: {\n align: {\n type: String,\n \"default\": null\n },\n layout: {\n type: String,\n \"default\": 'horizontal'\n },\n type: {\n type: String,\n \"default\": 'solid'\n }\n },\n style: DividerStyle,\n provide: function provide() {\n return {\n $pcDivider: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Divider',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nvar _hoisted_1 = [\"aria-orientation\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n style: _ctx.sx('root'),\n role: \"separator\",\n \"aria-orientation\": _ctx.layout\n }, _ctx.ptmi('root')), [_ctx.$slots[\"default\"] ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('content')\n }, _ctx.ptm('content')), [renderSlot(_ctx.$slots, \"default\")], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-scrollpanel-content-container {\\n overflow: hidden;\\n width: 100%;\\n height: 100%;\\n position: relative;\\n z-index: 1;\\n float: left;\\n}\\n\\n.p-scrollpanel-content {\\n height: calc(100% + calc(2 * \".concat(dt('scrollpanel.bar.size'), \"));\\n width: calc(100% + calc(2 * \").concat(dt('scrollpanel.bar.size'), \"));\\n padding: 0 calc(2 * \").concat(dt('scrollpanel.bar.size'), \") calc(2 * \").concat(dt('scrollpanel.bar.size'), \") 0;\\n position: relative;\\n overflow: auto;\\n box-sizing: border-box;\\n scrollbar-width: none;\\n}\\n\\n.p-scrollpanel-content::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.p-scrollpanel-bar {\\n position: relative;\\n border-radius: \").concat(dt('scrollpanel.bar.border.radius'), \";\\n z-index: 2;\\n cursor: pointer;\\n opacity: 0;\\n outline-color: transparent;\\n transition: outline-color \").concat(dt('scrollpanel.transition.duration'), \";\\n background: \").concat(dt('scrollpanel.bar.background'), \";\\n border: 0 none;\\n transition: outline-color \").concat(dt('scrollpanel.transition.duration'), \", opacity \").concat(dt('scrollpanel.transition.duration'), \";\\n}\\n\\n.p-scrollpanel-bar:focus-visible {\\n box-shadow: \").concat(dt('scrollpanel.bar.focus.ring.shadow'), \";\\n outline: \").concat(dt('scrollpanel.barfocus.ring.width'), \" \").concat(dt('scrollpanel.bar.focus.ring.style'), \" \").concat(dt('scrollpanel.bar.focus.ring.color'), \";\\n outline-offset: \").concat(dt('scrollpanel.barfocus.ring.offset'), \";\\n}\\n\\n.p-scrollpanel-bar-y {\\n width: \").concat(dt('scrollpanel.bar.size'), \";\\n top: 0;\\n}\\n\\n.p-scrollpanel-bar-x {\\n height: \").concat(dt('scrollpanel.bar.size'), \";\\n bottom: 0;\\n}\\n\\n.p-scrollpanel-hidden {\\n visibility: hidden;\\n}\\n\\n.p-scrollpanel:hover .p-scrollpanel-bar,\\n.p-scrollpanel:active .p-scrollpanel-bar {\\n opacity: 1;\\n}\\n\\n.p-scrollpanel-grabbed {\\n user-select: none;\\n}\\n\");\n};\nvar classes = {\n root: 'p-scrollpanel p-component',\n contentContainer: 'p-scrollpanel-content-container',\n content: 'p-scrollpanel-content',\n barX: 'p-scrollpanel-bar p-scrollpanel-bar-x',\n barY: 'p-scrollpanel-bar p-scrollpanel-bar-y'\n};\nvar ScrollPanelStyle = BaseStyle.extend({\n name: 'scrollpanel',\n theme: theme,\n classes: classes\n});\n\nexport { ScrollPanelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport { getHeight, addClass, removeClass } from '@primeuix/utils/dom';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport ScrollPanelStyle from 'primevue/scrollpanel/style';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseScrollPanel',\n \"extends\": BaseComponent,\n props: {\n step: {\n type: Number,\n \"default\": 5\n }\n },\n style: ScrollPanelStyle,\n provide: function provide() {\n return {\n $pcScrollPanel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'ScrollPanel',\n \"extends\": script$1,\n inheritAttrs: false,\n initialized: false,\n documentResizeListener: null,\n documentMouseMoveListener: null,\n documentMouseUpListener: null,\n frame: null,\n scrollXRatio: null,\n scrollYRatio: null,\n isXBarClicked: false,\n isYBarClicked: false,\n lastPageX: null,\n lastPageY: null,\n timer: null,\n outsideClickListener: null,\n data: function data() {\n return {\n id: this.$attrs.id,\n orientation: 'vertical',\n lastScrollTop: 0,\n lastScrollLeft: 0\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n if (this.$el.offsetParent) {\n this.initialize();\n }\n },\n updated: function updated() {\n if (!this.initialized && this.$el.offsetParent) {\n this.initialize();\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindDocumentResizeListener();\n if (this.frame) {\n window.cancelAnimationFrame(this.frame);\n }\n },\n methods: {\n initialize: function initialize() {\n this.moveBar();\n this.bindDocumentResizeListener();\n this.calculateContainerHeight();\n },\n calculateContainerHeight: function calculateContainerHeight() {\n var containerStyles = getComputedStyle(this.$el),\n xBarStyles = getComputedStyle(this.$refs.xBar),\n pureContainerHeight = getHeight(this.$el) - parseInt(xBarStyles['height'], 10);\n if (containerStyles['max-height'] !== 'none' && pureContainerHeight === 0) {\n if (this.$refs.content.offsetHeight + parseInt(xBarStyles['height'], 10) > parseInt(containerStyles['max-height'], 10)) {\n this.$el.style.height = containerStyles['max-height'];\n } else {\n this.$el.style.height = this.$refs.content.offsetHeight + parseFloat(containerStyles.paddingTop) + parseFloat(containerStyles.paddingBottom) + parseFloat(containerStyles.borderTopWidth) + parseFloat(containerStyles.borderBottomWidth) + 'px';\n }\n }\n },\n moveBar: function moveBar() {\n var _this = this;\n if (this.$refs.content) {\n /* horizontal scroll */\n var totalWidth = this.$refs.content.scrollWidth;\n var ownWidth = this.$refs.content.clientWidth;\n var bottom = (this.$el.clientHeight - this.$refs.xBar.clientHeight) * -1;\n this.scrollXRatio = ownWidth / totalWidth;\n\n /* vertical scroll */\n var totalHeight = this.$refs.content.scrollHeight;\n var ownHeight = this.$refs.content.clientHeight;\n var right = (this.$el.clientWidth - this.$refs.yBar.clientWidth) * -1;\n this.scrollYRatio = ownHeight / totalHeight;\n this.frame = this.requestAnimationFrame(function () {\n if (_this.$refs.xBar) {\n if (_this.scrollXRatio >= 1) {\n _this.$refs.xBar.setAttribute('data-p-scrollpanel-hidden', 'true');\n !_this.isUnstyled && addClass(_this.$refs.xBar, 'p-scrollpanel-hidden');\n } else {\n _this.$refs.xBar.setAttribute('data-p-scrollpanel-hidden', 'false');\n !_this.isUnstyled && removeClass(_this.$refs.xBar, 'p-scrollpanel-hidden');\n _this.$refs.xBar.style.cssText = 'width:' + Math.max(_this.scrollXRatio * 100, 10) + '%; left:' + _this.$refs.content.scrollLeft / totalWidth * 100 + '%;bottom:' + bottom + 'px;';\n }\n }\n if (_this.$refs.yBar) {\n if (_this.scrollYRatio >= 1) {\n _this.$refs.yBar.setAttribute('data-p-scrollpanel-hidden', 'true');\n !_this.isUnstyled && addClass(_this.$refs.yBar, 'p-scrollpanel-hidden');\n } else {\n _this.$refs.yBar.setAttribute('data-p-scrollpanel-hidden', 'false');\n !_this.isUnstyled && removeClass(_this.$refs.yBar, 'p-scrollpanel-hidden');\n _this.$refs.yBar.style.cssText = 'height:' + Math.max(_this.scrollYRatio * 100, 10) + '%; top: calc(' + _this.$refs.content.scrollTop / totalHeight * 100 + '% - ' + _this.$refs.xBar.clientHeight + 'px);right:' + right + 'px;';\n }\n }\n });\n }\n },\n onYBarMouseDown: function onYBarMouseDown(e) {\n this.isYBarClicked = true;\n this.$refs.yBar.focus();\n this.lastPageY = e.pageY;\n this.$refs.yBar.setAttribute('data-p-scrollpanel-grabbed', 'true');\n !this.isUnstyled && addClass(this.$refs.yBar, 'p-scrollpanel-grabbed');\n document.body.setAttribute('data-p-scrollpanel-grabbed', 'true');\n !this.isUnstyled && addClass(document.body, 'p-scrollpanel-grabbed');\n this.bindDocumentMouseListeners();\n e.preventDefault();\n },\n onXBarMouseDown: function onXBarMouseDown(e) {\n this.isXBarClicked = true;\n this.$refs.xBar.focus();\n this.lastPageX = e.pageX;\n this.$refs.yBar.setAttribute('data-p-scrollpanel-grabbed', 'false');\n !this.isUnstyled && addClass(this.$refs.xBar, 'p-scrollpanel-grabbed');\n document.body.setAttribute('data-p-scrollpanel-grabbed', 'false');\n !this.isUnstyled && addClass(document.body, 'p-scrollpanel-grabbed');\n this.bindDocumentMouseListeners();\n e.preventDefault();\n },\n onScroll: function onScroll(event) {\n if (this.lastScrollLeft !== event.target.scrollLeft) {\n this.lastScrollLeft = event.target.scrollLeft;\n this.orientation = 'horizontal';\n } else if (this.lastScrollTop !== event.target.scrollTop) {\n this.lastScrollTop = event.target.scrollTop;\n this.orientation = 'vertical';\n }\n this.moveBar();\n },\n onKeyDown: function onKeyDown(event) {\n if (this.orientation === 'vertical') {\n switch (event.code) {\n case 'ArrowDown':\n {\n this.setTimer('scrollTop', this.step);\n event.preventDefault();\n break;\n }\n case 'ArrowUp':\n {\n this.setTimer('scrollTop', this.step * -1);\n event.preventDefault();\n break;\n }\n case 'ArrowLeft':\n case 'ArrowRight':\n {\n event.preventDefault();\n break;\n }\n }\n } else if (this.orientation === 'horizontal') {\n switch (event.code) {\n case 'ArrowRight':\n {\n this.setTimer('scrollLeft', this.step);\n event.preventDefault();\n break;\n }\n case 'ArrowLeft':\n {\n this.setTimer('scrollLeft', this.step * -1);\n event.preventDefault();\n break;\n }\n case 'ArrowDown':\n case 'ArrowUp':\n {\n event.preventDefault();\n break;\n }\n }\n }\n },\n onKeyUp: function onKeyUp() {\n this.clearTimer();\n },\n repeat: function repeat(bar, step) {\n this.$refs.content[bar] += step;\n this.moveBar();\n },\n setTimer: function setTimer(bar, step) {\n var _this2 = this;\n this.clearTimer();\n this.timer = setTimeout(function () {\n _this2.repeat(bar, step);\n }, 40);\n },\n clearTimer: function clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n onDocumentMouseMove: function onDocumentMouseMove(e) {\n if (this.isXBarClicked) {\n this.onMouseMoveForXBar(e);\n } else if (this.isYBarClicked) {\n this.onMouseMoveForYBar(e);\n } else {\n this.onMouseMoveForXBar(e);\n this.onMouseMoveForYBar(e);\n }\n },\n onMouseMoveForXBar: function onMouseMoveForXBar(e) {\n var _this3 = this;\n var deltaX = e.pageX - this.lastPageX;\n this.lastPageX = e.pageX;\n this.frame = this.requestAnimationFrame(function () {\n _this3.$refs.content.scrollLeft += deltaX / _this3.scrollXRatio;\n });\n },\n onMouseMoveForYBar: function onMouseMoveForYBar(e) {\n var _this4 = this;\n var deltaY = e.pageY - this.lastPageY;\n this.lastPageY = e.pageY;\n this.frame = this.requestAnimationFrame(function () {\n _this4.$refs.content.scrollTop += deltaY / _this4.scrollYRatio;\n });\n },\n onFocus: function onFocus(event) {\n if (this.$refs.xBar.isSameNode(event.target)) {\n this.orientation = 'horizontal';\n } else if (this.$refs.yBar.isSameNode(event.target)) {\n this.orientation = 'vertical';\n }\n },\n onBlur: function onBlur() {\n if (this.orientation === 'horizontal') {\n this.orientation = 'vertical';\n }\n },\n onDocumentMouseUp: function onDocumentMouseUp() {\n this.$refs.yBar.setAttribute('data-p-scrollpanel-grabbed', 'false');\n !this.isUnstyled && removeClass(this.$refs.yBar, 'p-scrollpanel-grabbed');\n this.$refs.xBar.setAttribute('data-p-scrollpanel-grabbed', 'false');\n !this.isUnstyled && removeClass(this.$refs.xBar, 'p-scrollpanel-grabbed');\n document.body.setAttribute('data-p-scrollpanel-grabbed', 'false');\n !this.isUnstyled && removeClass(document.body, 'p-scrollpanel-grabbed');\n this.unbindDocumentMouseListeners();\n this.isXBarClicked = false;\n this.isYBarClicked = false;\n },\n requestAnimationFrame: function requestAnimationFrame(f) {\n var frame = window.requestAnimationFrame || this.timeoutFrame;\n return frame(f);\n },\n refresh: function refresh() {\n this.moveBar();\n },\n scrollTop: function scrollTop(_scrollTop) {\n var scrollableHeight = this.$refs.content.scrollHeight - this.$refs.content.clientHeight;\n _scrollTop = _scrollTop > scrollableHeight ? scrollableHeight : _scrollTop > 0 ? _scrollTop : 0;\n this.$refs.content.scrollTop = _scrollTop;\n },\n timeoutFrame: function timeoutFrame(fn) {\n setTimeout(fn, 0);\n },\n bindDocumentMouseListeners: function bindDocumentMouseListeners() {\n var _this5 = this;\n if (!this.documentMouseMoveListener) {\n this.documentMouseMoveListener = function (e) {\n _this5.onDocumentMouseMove(e);\n };\n document.addEventListener('mousemove', this.documentMouseMoveListener);\n }\n if (!this.documentMouseUpListener) {\n this.documentMouseUpListener = function (e) {\n _this5.onDocumentMouseUp(e);\n };\n document.addEventListener('mouseup', this.documentMouseUpListener);\n }\n },\n unbindDocumentMouseListeners: function unbindDocumentMouseListeners() {\n if (this.documentMouseMoveListener) {\n document.removeEventListener('mousemove', this.documentMouseMoveListener);\n this.documentMouseMoveListener = null;\n }\n if (this.documentMouseUpListener) {\n document.removeEventListener('mouseup', this.documentMouseUpListener);\n this.documentMouseUpListener = null;\n }\n },\n bindDocumentResizeListener: function bindDocumentResizeListener() {\n var _this6 = this;\n if (!this.documentResizeListener) {\n this.documentResizeListener = function () {\n _this6.moveBar();\n };\n window.addEventListener('resize', this.documentResizeListener);\n }\n },\n unbindDocumentResizeListener: function unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n },\n computed: {\n contentId: function contentId() {\n return this.id + '_content';\n }\n }\n};\n\nvar _hoisted_1 = [\"id\"];\nvar _hoisted_2 = [\"aria-controls\", \"aria-valuenow\"];\nvar _hoisted_3 = [\"aria-controls\", \"aria-valuenow\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('contentContainer')\n }, _ctx.ptm('contentContainer')), [createElementVNode(\"div\", mergeProps({\n ref: \"content\",\n id: $options.contentId,\n \"class\": _ctx.cx('content'),\n onScroll: _cache[0] || (_cache[0] = function () {\n return $options.onScroll && $options.onScroll.apply($options, arguments);\n }),\n onMouseenter: _cache[1] || (_cache[1] = function () {\n return $options.moveBar && $options.moveBar.apply($options, arguments);\n })\n }, _ctx.ptm('content')), [renderSlot(_ctx.$slots, \"default\")], 16, _hoisted_1)], 16), createElementVNode(\"div\", mergeProps({\n ref: \"xBar\",\n \"class\": _ctx.cx('barx'),\n tabindex: \"0\",\n role: \"scrollbar\",\n \"aria-orientation\": \"horizontal\",\n \"aria-controls\": $options.contentId,\n \"aria-valuenow\": $data.lastScrollLeft,\n onMousedown: _cache[2] || (_cache[2] = function () {\n return $options.onXBarMouseDown && $options.onXBarMouseDown.apply($options, arguments);\n }),\n onKeydown: _cache[3] || (_cache[3] = function ($event) {\n return $options.onKeyDown($event);\n }),\n onKeyup: _cache[4] || (_cache[4] = function () {\n return $options.onKeyUp && $options.onKeyUp.apply($options, arguments);\n }),\n onFocus: _cache[5] || (_cache[5] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[6] || (_cache[6] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n })\n }, _ctx.ptm('barx'), {\n \"data-pc-group-section\": \"bar\"\n }), null, 16, _hoisted_2), createElementVNode(\"div\", mergeProps({\n ref: \"yBar\",\n \"class\": _ctx.cx('bary'),\n tabindex: \"0\",\n role: \"scrollbar\",\n \"aria-orientation\": \"vertical\",\n \"aria-controls\": $options.contentId,\n \"aria-valuenow\": $data.lastScrollTop,\n onMousedown: _cache[7] || (_cache[7] = function () {\n return $options.onYBarMouseDown && $options.onYBarMouseDown.apply($options, arguments);\n }),\n onKeydown: _cache[8] || (_cache[8] = function ($event) {\n return $options.onKeyDown($event);\n }),\n onKeyup: _cache[9] || (_cache[9] = function () {\n return $options.onKeyUp && $options.onKeyUp.apply($options, arguments);\n }),\n onFocus: _cache[10] || (_cache[10] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n })\n }, _ctx.ptm('bary'), {\n \"data-pc-group-section\": \"bar\"\n }), null, 16, _hoisted_3)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'TimesCircleIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M7 14C5.61553 14 4.26215 13.5895 3.11101 12.8203C1.95987 12.0511 1.06266 10.9579 0.532846 9.67879C0.00303296 8.3997 -0.13559 6.99224 0.134506 5.63437C0.404603 4.2765 1.07129 3.02922 2.05026 2.05026C3.02922 1.07129 4.2765 0.404603 5.63437 0.134506C6.99224 -0.13559 8.3997 0.00303296 9.67879 0.532846C10.9579 1.06266 12.0511 1.95987 12.8203 3.11101C13.5895 4.26215 14 5.61553 14 7C14 8.85652 13.2625 10.637 11.9497 11.9497C10.637 13.2625 8.85652 14 7 14ZM7 1.16667C5.84628 1.16667 4.71846 1.50879 3.75918 2.14976C2.79989 2.79074 2.05222 3.70178 1.61071 4.76768C1.16919 5.83358 1.05367 7.00647 1.27876 8.13803C1.50384 9.26958 2.05941 10.309 2.87521 11.1248C3.69102 11.9406 4.73042 12.4962 5.86198 12.7212C6.99353 12.9463 8.16642 12.8308 9.23232 12.3893C10.2982 11.9478 11.2093 11.2001 11.8502 10.2408C12.4912 9.28154 12.8333 8.15373 12.8333 7C12.8333 5.45291 12.2188 3.96918 11.1248 2.87521C10.0308 1.78125 8.5471 1.16667 7 1.16667ZM4.66662 9.91668C4.58998 9.91704 4.51404 9.90209 4.44325 9.87271C4.37246 9.84333 4.30826 9.8001 4.2544 9.74557C4.14516 9.6362 4.0838 9.48793 4.0838 9.33335C4.0838 9.17876 4.14516 9.0305 4.2544 8.92113L6.17553 7L4.25443 5.07891C4.15139 4.96832 4.09529 4.82207 4.09796 4.67094C4.10063 4.51982 4.16185 4.37563 4.26872 4.26876C4.3756 4.16188 4.51979 4.10066 4.67091 4.09799C4.82204 4.09532 4.96829 4.15142 5.07887 4.25446L6.99997 6.17556L8.92106 4.25446C9.03164 4.15142 9.1779 4.09532 9.32903 4.09799C9.48015 4.10066 9.62434 4.16188 9.73121 4.26876C9.83809 4.37563 9.89931 4.51982 9.90198 4.67094C9.90464 4.82207 9.84855 4.96832 9.74551 5.07891L7.82441 7L9.74554 8.92113C9.85478 9.0305 9.91614 9.17876 9.91614 9.33335C9.91614 9.48793 9.85478 9.6362 9.74554 9.74557C9.69168 9.8001 9.62748 9.84333 9.55669 9.87271C9.4859 9.90209 9.40996 9.91704 9.33332 9.91668C9.25668 9.91704 9.18073 9.90209 9.10995 9.87271C9.03916 9.84333 8.97495 9.8001 8.9211 9.74557L6.99997 7.82444L5.07884 9.74557C5.02499 9.8001 4.96078 9.84333 4.88999 9.87271C4.81921 9.90209 4.74326 9.91704 4.66662 9.91668Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-chip {\\n display: inline-flex;\\n align-items: center;\\n background: \".concat(dt('chip.background'), \";\\n color: \").concat(dt('chip.color'), \";\\n border-radius: \").concat(dt('chip.border.radius'), \";\\n padding: \").concat(dt('chip.padding.y'), \" \").concat(dt('chip.padding.x'), \";\\n gap: \").concat(dt('chip.gap'), \";\\n}\\n\\n.p-chip-icon {\\n color: \").concat(dt('chip.icon.color'), \";\\n font-size: \").concat(dt('chip.icon.font.size'), \";\\n width: \").concat(dt('chip.icon.size'), \";\\n height: \").concat(dt('chip.icon.size'), \";\\n}\\n\\n.p-chip-image {\\n border-radius: 50%;\\n width: \").concat(dt('chip.image.width'), \";\\n height: \").concat(dt('chip.image.height'), \";\\n margin-left: calc(-1 * \").concat(dt('chip.padding.y'), \");\\n}\\n\\n.p-chip:has(.p-chip-remove-icon) {\\n padding-right: \").concat(dt('chip.padding.y'), \";\\n}\\n\\n.p-chip:has(.p-chip-image) {\\n padding-top: calc(\").concat(dt('chip.padding.y'), \" / 2);\\n padding-bottom: calc(\").concat(dt('chip.padding.y'), \" / 2);\\n}\\n\\n.p-chip-remove-icon {\\n cursor: pointer;\\n font-size: \").concat(dt('chip.remove.icon.size'), \";\\n width: \").concat(dt('chip.remove.icon.size'), \";\\n height: \").concat(dt('chip.remove.icon.size'), \";\\n color: \").concat(dt('chip.remove.icon.color'), \";\\n border-radius: 50%;\\n transition: outline-color \").concat(dt('chip.transition.duration'), \", box-shadow \").concat(dt('chip.transition.duration'), \";\\n outline-color: transparent;\\n}\\n\\n.p-chip-remove-icon:focus-visible {\\n box-shadow: \").concat(dt('chip.remove.icon.focus.ring.shadow'), \";\\n outline: \").concat(dt('chip.remove.icon.focus.ring.width'), \" \").concat(dt('chip.remove.icon.focus.ring.style'), \" \").concat(dt('chip.remove.icon.focus.ring.color'), \";\\n outline-offset: \").concat(dt('chip.remove.icon.focus.ring.offset'), \";\\n}\\n\");\n};\nvar classes = {\n root: 'p-chip p-component',\n image: 'p-chip-image',\n icon: 'p-chip-icon',\n label: 'p-chip-label',\n removeIcon: 'p-chip-remove-icon'\n};\nvar ChipStyle = BaseStyle.extend({\n name: 'chip',\n theme: theme,\n classes: classes\n});\n\nexport { ChipStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import TimesCircleIcon from '@primevue/icons/timescircle';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport ChipStyle from 'primevue/chip/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot, createBlock, resolveDynamicComponent, createCommentVNode, toDisplayString } from 'vue';\n\nvar script$1 = {\n name: 'BaseChip',\n \"extends\": BaseComponent,\n props: {\n label: {\n type: String,\n \"default\": null\n },\n icon: {\n type: String,\n \"default\": null\n },\n image: {\n type: String,\n \"default\": null\n },\n removable: {\n type: Boolean,\n \"default\": false\n },\n removeIcon: {\n type: String,\n \"default\": undefined\n }\n },\n style: ChipStyle,\n provide: function provide() {\n return {\n $pcChip: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Chip',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['remove'],\n data: function data() {\n return {\n visible: true\n };\n },\n methods: {\n onKeydown: function onKeydown(event) {\n if (event.key === 'Enter' || event.key === 'Backspace') {\n this.close(event);\n }\n },\n close: function close(event) {\n this.visible = false;\n this.$emit('remove', event);\n }\n },\n components: {\n TimesCircleIcon: TimesCircleIcon\n }\n};\n\nvar _hoisted_1 = [\"aria-label\"];\nvar _hoisted_2 = [\"src\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return $data.visible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('root'),\n \"aria-label\": _ctx.label\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\", {}, function () {\n return [_ctx.image ? (openBlock(), createElementBlock(\"img\", mergeProps({\n key: 0,\n src: _ctx.image\n }, _ctx.ptm('image'), {\n \"class\": _ctx.cx('image')\n }), null, 16, _hoisted_2)) : _ctx.$slots.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.icon), mergeProps({\n key: 1,\n \"class\": _ctx.cx('icon')\n }, _ctx.ptm('icon')), null, 16, [\"class\"])) : _ctx.icon ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 2,\n \"class\": [_ctx.cx('icon'), _ctx.icon]\n }, _ctx.ptm('icon')), null, 16)) : createCommentVNode(\"\", true), _ctx.label ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 3,\n \"class\": _ctx.cx('label')\n }, _ctx.ptm('label')), toDisplayString(_ctx.label), 17)) : createCommentVNode(\"\", true)];\n }), _ctx.removable ? renderSlot(_ctx.$slots, \"removeicon\", {\n key: 0,\n removeCallback: $options.close,\n keydownCallback: $options.onKeydown\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.removeIcon ? 'span' : 'TimesCircleIcon'), mergeProps({\n tabindex: \"0\",\n \"class\": [_ctx.cx('removeIcon'), _ctx.removeIcon],\n onClick: $options.close,\n onKeydown: $options.onKeydown\n }, _ctx.ptm('removeIcon')), null, 16, [\"class\", \"onClick\", \"onKeydown\"]))];\n }) : createCommentVNode(\"\", true)], 16, _hoisted_1)) : createCommentVNode(\"\", true);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-tag {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n background: \".concat(dt('tag.primary.background'), \";\\n color: \").concat(dt('tag.primary.color'), \";\\n font-size: \").concat(dt('tag.font.size'), \";\\n font-weight: \").concat(dt('tag.font.weight'), \";\\n padding: \").concat(dt('tag.padding'), \";\\n border-radius: \").concat(dt('tag.border.radius'), \";\\n gap: \").concat(dt('tag.gap'), \";\\n}\\n\\n.p-tag-icon {\\n font-size: \").concat(dt('tag.icon.size'), \";\\n width: \").concat(dt('tag.icon.size'), \";\\n height:\").concat(dt('tag.icon.size'), \";\\n}\\n\\n.p-tag-rounded {\\n border-radius: \").concat(dt('tag.rounded.border.radius'), \";\\n}\\n\\n.p-tag-success {\\n background: \").concat(dt('tag.success.background'), \";\\n color: \").concat(dt('tag.success.color'), \";\\n}\\n\\n.p-tag-info {\\n background: \").concat(dt('tag.info.background'), \";\\n color: \").concat(dt('tag.info.color'), \";\\n}\\n\\n.p-tag-warn {\\n background: \").concat(dt('tag.warn.background'), \";\\n color: \").concat(dt('tag.warn.color'), \";\\n}\\n\\n.p-tag-danger {\\n background: \").concat(dt('tag.danger.background'), \";\\n color: \").concat(dt('tag.danger.color'), \";\\n}\\n\\n.p-tag-secondary {\\n background: \").concat(dt('tag.secondary.background'), \";\\n color: \").concat(dt('tag.secondary.color'), \";\\n}\\n\\n.p-tag-contrast {\\n background: \").concat(dt('tag.contrast.background'), \";\\n color: \").concat(dt('tag.contrast.color'), \";\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-tag p-component', {\n 'p-tag-info': props.severity === 'info',\n 'p-tag-success': props.severity === 'success',\n 'p-tag-warn': props.severity === 'warn',\n 'p-tag-danger': props.severity === 'danger',\n 'p-tag-secondary': props.severity === 'secondary',\n 'p-tag-contrast': props.severity === 'contrast',\n 'p-tag-rounded': props.rounded\n }];\n },\n icon: 'p-tag-icon',\n label: 'p-tag-label'\n};\nvar TagStyle = BaseStyle.extend({\n name: 'tag',\n theme: theme,\n classes: classes\n});\n\nexport { TagStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport TagStyle from 'primevue/tag/style';\nimport { openBlock, createElementBlock, mergeProps, createBlock, resolveDynamicComponent, createCommentVNode, renderSlot, createElementVNode, toDisplayString } from 'vue';\n\nvar script$1 = {\n name: 'BaseTag',\n \"extends\": BaseComponent,\n props: {\n value: null,\n severity: null,\n rounded: Boolean,\n icon: String\n },\n style: TagStyle,\n provide: function provide() {\n return {\n $pcTag: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Tag',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [_ctx.$slots.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.icon), mergeProps({\n key: 0,\n \"class\": _ctx.cx('icon')\n }, _ctx.ptm('icon')), null, 16, [\"class\"])) : _ctx.icon ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n \"class\": [_ctx.cx('icon'), _ctx.icon]\n }, _ctx.ptm('icon')), null, 16)) : createCommentVNode(\"\", true), _ctx.value != null || _ctx.$slots[\"default\"] ? renderSlot(_ctx.$slots, \"default\", {\n key: 2\n }, function () {\n return [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('label')\n }, _ctx.ptm('label')), toDisplayString(_ctx.value), 17)];\n }) : createCommentVNode(\"\", true)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'AngleDownIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M3.58659 4.5007C3.68513 4.50023 3.78277 4.51945 3.87379 4.55723C3.9648 4.59501 4.04735 4.65058 4.11659 4.7207L7.11659 7.7207L10.1166 4.7207C10.2619 4.65055 10.4259 4.62911 10.5843 4.65956C10.7427 4.69002 10.8871 4.77074 10.996 4.88976C11.1049 5.00877 11.1726 5.15973 11.1889 5.32022C11.2052 5.48072 11.1693 5.6422 11.0866 5.7807L7.58659 9.2807C7.44597 9.42115 7.25534 9.50004 7.05659 9.50004C6.85784 9.50004 6.66722 9.42115 6.52659 9.2807L3.02659 5.7807C2.88614 5.64007 2.80725 5.44945 2.80725 5.2507C2.80725 5.05195 2.88614 4.86132 3.02659 4.7207C3.09932 4.64685 3.18675 4.58911 3.28322 4.55121C3.37969 4.51331 3.48305 4.4961 3.58659 4.5007Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'AngleUpIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M10.4134 9.49931C10.3148 9.49977 10.2172 9.48055 10.1262 9.44278C10.0352 9.405 9.95263 9.34942 9.88338 9.27931L6.88338 6.27931L3.88338 9.27931C3.73811 9.34946 3.57409 9.3709 3.41567 9.34044C3.25724 9.30999 3.11286 9.22926 3.00395 9.11025C2.89504 8.99124 2.82741 8.84028 2.8111 8.67978C2.79478 8.51928 2.83065 8.35781 2.91338 8.21931L6.41338 4.71931C6.55401 4.57886 6.74463 4.49997 6.94338 4.49997C7.14213 4.49997 7.33276 4.57886 7.47338 4.71931L10.9734 8.21931C11.1138 8.35994 11.1927 8.55056 11.1927 8.74931C11.1927 8.94806 11.1138 9.13868 10.9734 9.27931C10.9007 9.35315 10.8132 9.41089 10.7168 9.44879C10.6203 9.48669 10.5169 9.5039 10.4134 9.49931Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-inputnumber {\\n display: inline-flex;\\n position: relative;\\n}\\n\\n.p-inputnumber-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex: 0 0 auto;\\n cursor: pointer;\\n background: \".concat(dt('inputnumber.button.background'), \";\\n color: \").concat(dt('inputnumber.button.color'), \";\\n width: \").concat(dt('inputnumber.button.width'), \";\\n transition: background \").concat(dt('inputnumber.transition.duration'), \", color \").concat(dt('inputnumber.transition.duration'), \", border-color \").concat(dt('inputnumber.transition.duration'), \", outline-color \").concat(dt('inputnumber.transition.duration'), \";\\n}\\n\\n.p-inputnumber-button:hover {\\n background: \").concat(dt('inputnumber.button.hover.background'), \";\\n color: \").concat(dt('inputnumber.button.hover.color'), \";\\n}\\n\\n.p-inputnumber-button:active {\\n background: \").concat(dt('inputnumber.button.active.background'), \";\\n color: \").concat(dt('inputnumber.button.active.color'), \";\\n}\\n\\n.p-inputnumber-stacked .p-inputnumber-button {\\n position: relative;\\n border: 0 none;\\n}\\n\\n.p-inputnumber-stacked .p-inputnumber-button-group {\\n display: flex;\\n flex-direction: column;\\n position: absolute;\\n top: 1px;\\n right: 1px;\\n height: calc(100% - 2px);\\n z-index: 1;\\n}\\n\\n.p-inputnumber-stacked .p-inputnumber-increment-button {\\n padding: 0;\\n border-top-right-radius: calc(\").concat(dt('inputnumber.button.border.radius'), \" - 1px);\\n}\\n\\n.p-inputnumber-stacked .p-inputnumber-decrement-button {\\n padding: 0;\\n border-bottom-right-radius: calc(\").concat(dt('inputnumber.button.border.radius'), \" - 1px);\\n}\\n\\n.p-inputnumber-stacked .p-inputnumber-button {\\n flex: 1 1 auto;\\n border: 0 none;\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-button {\\n border: 1px solid \").concat(dt('inputnumber.button.border.color'), \";\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-button:hover {\\n border-color: \").concat(dt('inputnumber.button.hover.border.color'), \";\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-button:active {\\n border-color: \").concat(dt('inputnumber.button.active.border.color'), \";\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-increment-button {\\n order: 3;\\n border-top-right-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-bottom-right-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-left: 0 none;\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-input {\\n order: 2;\\n border-radius: 0;\\n}\\n\\n.p-inputnumber-horizontal .p-inputnumber-decrement-button {\\n order: 1;\\n border-top-left-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-bottom-left-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-right: 0 none;\\n}\\n\\n.p-inputnumber-vertical {\\n flex-direction: column;\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-button {\\n border: 1px solid \").concat(dt('inputnumber.button.border.color'), \";\\n padding: \").concat(dt('inputnumber.button.vertical.padding'), \"; 0;\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-button:hover {\\n border-color: \").concat(dt('inputnumber.button.hover.border.color'), \";\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-button:active {\\n border-color: \").concat(dt('inputnumber.button.active.border.color'), \";\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-increment-button {\\n order: 1;\\n border-top-left-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-top-right-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n width: 100%;\\n border-bottom: 0 none;\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-input {\\n order: 2;\\n border-radius: 0;\\n text-align: center;\\n}\\n\\n.p-inputnumber-vertical .p-inputnumber-decrement-button {\\n order: 3;\\n border-bottom-left-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n border-bottom-right-radius: \").concat(dt('inputnumber.button.border.radius'), \";\\n width: 100%;\\n border-top: 0 none;\\n}\\n\\n.p-inputnumber-input {\\n flex: 1 1 auto;\\n}\\n\\n.p-inputnumber-fluid {\\n width: 100%;\\n}\\n\\n.p-inputnumber-fluid .p-inputnumber-input {\\n width: 1%;\\n}\\n\\n.p-inputnumber-fluid.p-inputnumber-vertical .p-inputnumber-input {\\n width: 100%;\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props;\n return ['p-inputnumber p-component p-inputwrapper', {\n 'p-inputwrapper-filled': instance.filled || props.allowEmpty === false,\n 'p-inputwrapper-focus': instance.focused,\n 'p-inputnumber-stacked': props.showButtons && props.buttonLayout === 'stacked',\n 'p-inputnumber-horizontal': props.showButtons && props.buttonLayout === 'horizontal',\n 'p-inputnumber-vertical': props.showButtons && props.buttonLayout === 'vertical',\n 'p-inputnumber-fluid': instance.hasFluid\n }];\n },\n pcInput: 'p-inputnumber-input',\n buttonGroup: 'p-inputnumber-button-group',\n incrementButton: function incrementButton(_ref3) {\n var instance = _ref3.instance,\n props = _ref3.props;\n return ['p-inputnumber-button p-inputnumber-increment-button', {\n 'p-disabled': props.showButtons && props.max !== null && instance.maxBoundry()\n }];\n },\n decrementButton: function decrementButton(_ref4) {\n var instance = _ref4.instance,\n props = _ref4.props;\n return ['p-inputnumber-button p-inputnumber-decrement-button', {\n 'p-disabled': props.showButtons && props.min !== null && instance.minBoundry()\n }];\n }\n};\nvar InputNumberStyle = BaseStyle.extend({\n name: 'inputnumber',\n theme: theme,\n classes: classes\n});\n\nexport { InputNumberStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { getSelection, clearSelection } from '@primeuix/utils/dom';\nimport { isNotEmpty, isEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport InputText from 'primevue/inputtext';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport InputNumberStyle from 'primevue/inputnumber/style';\nimport { resolveComponent, openBlock, createElementBlock, mergeProps, createVNode, normalizeClass, normalizeStyle, renderSlot, createElementVNode, toHandlers, createBlock, resolveDynamicComponent, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseInputNumber',\n \"extends\": BaseComponent,\n props: {\n modelValue: {\n type: Number,\n \"default\": null\n },\n format: {\n type: Boolean,\n \"default\": true\n },\n showButtons: {\n type: Boolean,\n \"default\": false\n },\n buttonLayout: {\n type: String,\n \"default\": 'stacked'\n },\n incrementButtonClass: {\n type: String,\n \"default\": null\n },\n decrementButtonClass: {\n type: String,\n \"default\": null\n },\n incrementButtonIcon: {\n type: String,\n \"default\": undefined\n },\n incrementIcon: {\n type: String,\n \"default\": undefined\n },\n decrementButtonIcon: {\n type: String,\n \"default\": undefined\n },\n decrementIcon: {\n type: String,\n \"default\": undefined\n },\n locale: {\n type: String,\n \"default\": undefined\n },\n localeMatcher: {\n type: String,\n \"default\": undefined\n },\n mode: {\n type: String,\n \"default\": 'decimal'\n },\n prefix: {\n type: String,\n \"default\": null\n },\n suffix: {\n type: String,\n \"default\": null\n },\n currency: {\n type: String,\n \"default\": undefined\n },\n currencyDisplay: {\n type: String,\n \"default\": undefined\n },\n useGrouping: {\n type: Boolean,\n \"default\": true\n },\n minFractionDigits: {\n type: Number,\n \"default\": undefined\n },\n maxFractionDigits: {\n type: Number,\n \"default\": undefined\n },\n roundingMode: {\n type: String,\n \"default\": 'halfExpand',\n validator: function validator(value) {\n return ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'].includes(value);\n }\n },\n min: {\n type: Number,\n \"default\": null\n },\n max: {\n type: Number,\n \"default\": null\n },\n step: {\n type: Number,\n \"default\": 1\n },\n allowEmpty: {\n type: Boolean,\n \"default\": true\n },\n highlightOnFocus: {\n type: Boolean,\n \"default\": false\n },\n readonly: {\n type: Boolean,\n \"default\": false\n },\n variant: {\n type: String,\n \"default\": null\n },\n invalid: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n placeholder: {\n type: String,\n \"default\": null\n },\n fluid: {\n type: Boolean,\n \"default\": null\n },\n inputId: {\n type: String,\n \"default\": null\n },\n inputClass: {\n type: [String, Object],\n \"default\": null\n },\n inputStyle: {\n type: Object,\n \"default\": null\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: InputNumberStyle,\n provide: function provide() {\n return {\n $pcInputNumber: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script = {\n name: 'InputNumber',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'input', 'focus', 'blur'],\n inject: {\n $pcFluid: {\n \"default\": null\n }\n },\n numberFormat: null,\n _numeral: null,\n _decimal: null,\n _group: null,\n _minusSign: null,\n _currency: null,\n _suffix: null,\n _prefix: null,\n _index: null,\n groupChar: '',\n isSpecialChar: null,\n prefixChar: null,\n suffixChar: null,\n timer: null,\n data: function data() {\n return {\n d_modelValue: this.modelValue,\n focused: false\n };\n },\n watch: {\n modelValue: function modelValue(newValue) {\n this.d_modelValue = newValue;\n },\n locale: function locale(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n localeMatcher: function localeMatcher(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n mode: function mode(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currency: function currency(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currencyDisplay: function currencyDisplay(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n useGrouping: function useGrouping(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n minFractionDigits: function minFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n maxFractionDigits: function maxFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n suffix: function suffix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n prefix: function prefix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n }\n },\n created: function created() {\n this.constructParser();\n },\n methods: {\n getOptions: function getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits,\n roundingMode: this.roundingMode\n };\n },\n constructParser: function constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n var numerals = _toConsumableArray(new Intl.NumberFormat(this.locale, {\n useGrouping: false\n }).format(9876543210)).reverse();\n var index = new Map(numerals.map(function (d, i) {\n return [d, i];\n }));\n this._numeral = new RegExp(\"[\".concat(numerals.join(''), \"]\"), 'g');\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._decimal = this.getDecimalExpression();\n this._suffix = this.getSuffixExpression();\n this._prefix = this.getPrefixExpression();\n this._index = function (d) {\n return index.get(d);\n };\n },\n updateConstructParser: function updateConstructParser(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.constructParser();\n }\n },\n escapeRegExp: function escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n },\n getDecimalExpression: function getDecimalExpression() {\n var formatter = new Intl.NumberFormat(this.locale, _objectSpread(_objectSpread({}, this.getOptions()), {}, {\n useGrouping: false\n }));\n return new RegExp(\"[\".concat(formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, ''), \"]\"), 'g');\n },\n getGroupingExpression: function getGroupingExpression() {\n var formatter = new Intl.NumberFormat(this.locale, {\n useGrouping: true\n });\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n return new RegExp(\"[\".concat(this.groupChar, \"]\"), 'g');\n },\n getMinusSignExpression: function getMinusSignExpression() {\n var formatter = new Intl.NumberFormat(this.locale, {\n useGrouping: false\n });\n return new RegExp(\"[\".concat(formatter.format(-1).trim().replace(this._numeral, ''), \"]\"), 'g');\n },\n getCurrencyExpression: function getCurrencyExpression() {\n if (this.currency) {\n var formatter = new Intl.NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n roundingMode: this.roundingMode\n });\n return new RegExp(\"[\".concat(formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, ''), \"]\"), 'g');\n }\n return new RegExp(\"[]\", 'g');\n },\n getPrefixExpression: function getPrefixExpression() {\n if (this.prefix) {\n this.prefixChar = this.prefix;\n } else {\n var formatter = new Intl.NumberFormat(this.locale, {\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay\n });\n this.prefixChar = formatter.format(1).split('1')[0];\n }\n return new RegExp(\"\".concat(this.escapeRegExp(this.prefixChar || '')), 'g');\n },\n getSuffixExpression: function getSuffixExpression() {\n if (this.suffix) {\n this.suffixChar = this.suffix;\n } else {\n var formatter = new Intl.NumberFormat(this.locale, {\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n roundingMode: this.roundingMode\n });\n this.suffixChar = formatter.format(1).split('1')[1];\n }\n return new RegExp(\"\".concat(this.escapeRegExp(this.suffixChar || '')), 'g');\n },\n formatValue: function formatValue(value) {\n if (value != null) {\n if (value === '-') {\n // Minus sign\n return value;\n }\n if (this.format) {\n var formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n var formattedValue = formatter.format(value);\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n return formattedValue;\n }\n return value.toString();\n }\n return '';\n },\n parseValue: function parseValue(text) {\n var filteredText = text.replace(this._suffix, '').replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '').replace(this._group, '').replace(this._minusSign, '-').replace(this._decimal, '.').replace(this._numeral, this._index);\n if (filteredText) {\n if (filteredText === '-')\n // Minus sign\n return filteredText;\n var parsedValue = +filteredText;\n return isNaN(parsedValue) ? null : parsedValue;\n }\n return null;\n },\n repeat: function repeat(event, interval, dir) {\n var _this = this;\n if (this.readonly) {\n return;\n }\n var i = interval || 500;\n this.clearTimer();\n this.timer = setTimeout(function () {\n _this.repeat(event, 40, dir);\n }, i);\n this.spin(event, dir);\n },\n spin: function spin(event, dir) {\n if (this.$refs.input) {\n var step = this.step * dir;\n var currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n var newValue = this.validateValue(currentValue + step);\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n onUpButtonMouseDown: function onUpButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n },\n onUpButtonMouseUp: function onUpButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonMouseLeave: function onUpButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyUp: function onUpButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyDown: function onUpButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, 1);\n }\n },\n onDownButtonMouseDown: function onDownButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n },\n onDownButtonMouseUp: function onDownButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonMouseLeave: function onDownButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyUp: function onDownButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyDown: function onDownButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, -1);\n }\n },\n onUserInput: function onUserInput() {\n if (this.isSpecialChar) {\n this.$refs.input.$el.value = this.lastValue;\n }\n this.isSpecialChar = false;\n },\n onInputKeyDown: function onInputKeyDown(event) {\n if (this.readonly) {\n return;\n }\n if (event.altKey || event.ctrlKey || event.metaKey) {\n this.isSpecialChar = true;\n this.lastValue = this.$refs.input.$el.value;\n return;\n }\n this.lastValue = event.target.value;\n var selectionStart = event.target.selectionStart;\n var selectionEnd = event.target.selectionEnd;\n var inputValue = event.target.value;\n var newValueStr = null;\n switch (event.code) {\n case 'ArrowUp':\n this.spin(event, 1);\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.spin(event, -1);\n event.preventDefault();\n break;\n case 'ArrowLeft':\n if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n break;\n case 'ArrowRight':\n if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n break;\n case 'Tab':\n case 'Enter':\n case 'NumpadEnter':\n newValueStr = this.validateValue(this.parseValue(inputValue));\n this.$refs.input.$el.value = this.formatValue(newValueStr);\n this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n this.updateModel(event, newValueStr);\n break;\n case 'Backspace':\n {\n event.preventDefault();\n if (selectionStart === selectionEnd) {\n var deleteChar = inputValue.charAt(selectionStart - 1);\n var _this$getDecimalCharI = this.getDecimalCharIndexes(inputValue),\n decimalCharIndex = _this$getDecimalCharI.decimalCharIndex,\n decimalCharIndexWithoutPrefix = _this$getDecimalCharI.decimalCharIndexWithoutPrefix;\n if (this.isNumeralChar(deleteChar)) {\n var decimalLength = this.getDecimalLength(inputValue);\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n var insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n this.updateValue(event, newValueStr, null, 'delete-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n break;\n }\n case 'Delete':\n event.preventDefault();\n if (selectionStart === selectionEnd) {\n var _deleteChar = inputValue.charAt(selectionStart);\n var _this$getDecimalCharI2 = this.getDecimalCharIndexes(inputValue),\n _decimalCharIndex = _this$getDecimalCharI2.decimalCharIndex,\n _decimalCharIndexWithoutPrefix = _this$getDecimalCharI2.decimalCharIndexWithoutPrefix;\n if (this.isNumeralChar(_deleteChar)) {\n var _decimalLength = this.getDecimalLength(inputValue);\n if (this._group.test(_deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n } else if (this._decimal.test(_deleteChar)) {\n this._decimal.lastIndex = 0;\n if (_decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n } else if (_decimalCharIndex > 0 && selectionStart > _decimalCharIndex) {\n var _insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < _decimalLength ? '' : '0';\n newValueStr = inputValue.slice(0, selectionStart) + _insertedText + inputValue.slice(selectionStart + 1);\n } else if (_decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n break;\n case 'Home':\n event.preventDefault();\n if (isNotEmpty(this.min)) {\n this.updateModel(event, this.min);\n }\n break;\n case 'End':\n event.preventDefault();\n if (isNotEmpty(this.max)) {\n this.updateModel(event, this.max);\n }\n break;\n }\n },\n onInputKeyPress: function onInputKeyPress(event) {\n if (this.readonly) {\n return;\n }\n var _char = event.key;\n var isDecimalSign = this.isDecimalSign(_char);\n var isMinusSign = this.isMinusSign(_char);\n if (event.code !== 'Enter') {\n event.preventDefault();\n }\n if (Number(_char) >= 0 && Number(_char) <= 9 || isMinusSign || isDecimalSign) {\n this.insert(event, _char, {\n isDecimalSign: isDecimalSign,\n isMinusSign: isMinusSign\n });\n }\n },\n onPaste: function onPaste(event) {\n event.preventDefault();\n var data = (event.clipboardData || window['clipboardData']).getData('Text');\n if (data) {\n var filteredData = this.parseValue(data);\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n },\n allowMinusSign: function allowMinusSign() {\n return this.min === null || this.min < 0;\n },\n isMinusSign: function isMinusSign(_char2) {\n if (this._minusSign.test(_char2) || _char2 === '-') {\n this._minusSign.lastIndex = 0;\n return true;\n }\n return false;\n },\n isDecimalSign: function isDecimalSign(_char3) {\n if (this._decimal.test(_char3)) {\n this._decimal.lastIndex = 0;\n return true;\n }\n return false;\n },\n isDecimalMode: function isDecimalMode() {\n return this.mode === 'decimal';\n },\n getDecimalCharIndexes: function getDecimalCharIndexes(val) {\n var decimalCharIndex = val.search(this._decimal);\n this._decimal.lastIndex = 0;\n var filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n var decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n this._decimal.lastIndex = 0;\n return {\n decimalCharIndex: decimalCharIndex,\n decimalCharIndexWithoutPrefix: decimalCharIndexWithoutPrefix\n };\n },\n getCharIndexes: function getCharIndexes(val) {\n var decimalCharIndex = val.search(this._decimal);\n this._decimal.lastIndex = 0;\n var minusCharIndex = val.search(this._minusSign);\n this._minusSign.lastIndex = 0;\n var suffixCharIndex = val.search(this._suffix);\n this._suffix.lastIndex = 0;\n var currencyCharIndex = val.search(this._currency);\n this._currency.lastIndex = 0;\n return {\n decimalCharIndex: decimalCharIndex,\n minusCharIndex: minusCharIndex,\n suffixCharIndex: suffixCharIndex,\n currencyCharIndex: currencyCharIndex\n };\n },\n insert: function insert(event, text) {\n var sign = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n isDecimalSign: false,\n isMinusSign: false\n };\n var minusCharIndexOnText = text.search(this._minusSign);\n this._minusSign.lastIndex = 0;\n if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n return;\n }\n var selectionStart = this.$refs.input.$el.selectionStart;\n var selectionEnd = this.$refs.input.$el.selectionEnd;\n var inputValue = this.$refs.input.$el.value.trim();\n var _this$getCharIndexes = this.getCharIndexes(inputValue),\n decimalCharIndex = _this$getCharIndexes.decimalCharIndex,\n minusCharIndex = _this$getCharIndexes.minusCharIndex,\n suffixCharIndex = _this$getCharIndexes.suffixCharIndex,\n currencyCharIndex = _this$getCharIndexes.currencyCharIndex;\n var newValueStr;\n if (sign.isMinusSign) {\n if (selectionStart === 0) {\n newValueStr = inputValue;\n if (minusCharIndex === -1 || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else {\n var maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n var operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n var charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n this.updateValue(event, newValueStr, text, operation);\n }\n } else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n },\n insertText: function insertText(value, text, start, end) {\n var textSplit = text === '.' ? text : text.split('.');\n if (textSplit.length === 2) {\n var decimalCharIndex = value.slice(start, end).search(this._decimal);\n this._decimal.lastIndex = 0;\n return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n } else if (end - start === value.length) {\n return this.formatValue(text);\n } else if (start === 0) {\n return text + value.slice(end);\n } else if (end === value.length) {\n return value.slice(0, start) + text;\n } else {\n return value.slice(0, start) + text + value.slice(end);\n }\n },\n deleteRange: function deleteRange(value, start, end) {\n var newValueStr;\n if (end - start === value.length) newValueStr = '';else if (start === 0) newValueStr = value.slice(end);else if (end === value.length) newValueStr = value.slice(0, start);else newValueStr = value.slice(0, start) + value.slice(end);\n return newValueStr;\n },\n initCursor: function initCursor() {\n var selectionStart = this.$refs.input.$el.selectionStart;\n var inputValue = this.$refs.input.$el.value;\n var valueLength = inputValue.length;\n var index = null;\n\n // remove prefix\n var prefixLength = (this.prefixChar || '').length;\n inputValue = inputValue.replace(this._prefix, '');\n selectionStart = selectionStart - prefixLength;\n var _char4 = inputValue.charAt(selectionStart);\n if (this.isNumeralChar(_char4)) {\n return selectionStart + prefixLength;\n }\n\n //left\n var i = selectionStart - 1;\n while (i >= 0) {\n _char4 = inputValue.charAt(i);\n if (this.isNumeralChar(_char4)) {\n index = i + prefixLength;\n break;\n } else {\n i--;\n }\n }\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n } else {\n i = selectionStart;\n while (i < valueLength) {\n _char4 = inputValue.charAt(i);\n if (this.isNumeralChar(_char4)) {\n index = i + prefixLength;\n break;\n } else {\n i++;\n }\n }\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index, index);\n }\n }\n return index || 0;\n },\n onInputClick: function onInputClick() {\n var currentValue = this.$refs.input.$el.value;\n if (!this.readonly && currentValue !== getSelection()) {\n this.initCursor();\n }\n },\n isNumeralChar: function isNumeralChar(_char5) {\n if (_char5.length === 1 && (this._numeral.test(_char5) || this._decimal.test(_char5) || this._group.test(_char5) || this._minusSign.test(_char5))) {\n this.resetRegex();\n return true;\n }\n return false;\n },\n resetRegex: function resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n },\n updateValue: function updateValue(event, valueStr, insertedValueStr, operation) {\n var currentValue = this.$refs.input.$el.value;\n var newValue = null;\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n this.updateInput(newValue, insertedValueStr, operation, valueStr);\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n handleOnInput: function handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.$emit('input', {\n originalEvent: event,\n value: newValue,\n formattedValue: currentValue\n });\n }\n },\n isValueChanged: function isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n if (newValue != null) {\n var parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n return newValue !== parsedCurrentValue;\n }\n return false;\n },\n validateValue: function validateValue(value) {\n if (value === '-' || value == null) {\n return null;\n }\n if (this.min != null && value < this.min) {\n return this.min;\n }\n if (this.max != null && value > this.max) {\n return this.max;\n }\n return value;\n },\n updateInput: function updateInput(value, insertedValueStr, operation, valueStr) {\n insertedValueStr = insertedValueStr || '';\n var inputValue = this.$refs.input.$el.value;\n var newValue = this.formatValue(value);\n var currentLength = inputValue.length;\n if (newValue !== valueStr) {\n newValue = this.concatValues(newValue, valueStr);\n }\n if (currentLength === 0) {\n this.$refs.input.$el.value = newValue;\n this.$refs.input.$el.setSelectionRange(0, 0);\n var index = this.initCursor();\n var selectionEnd = index + insertedValueStr.length;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n var selectionStart = this.$refs.input.$el.selectionStart;\n var _selectionEnd = this.$refs.input.$el.selectionEnd;\n this.$refs.input.$el.value = newValue;\n var newLength = newValue.length;\n if (operation === 'range-insert') {\n var startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n var startValueStr = startValue !== null ? startValue.toString() : '';\n var startExpr = startValueStr.split('').join(\"(\".concat(this.groupChar, \")?\"));\n var sRegex = new RegExp(startExpr, 'g');\n sRegex.test(newValue);\n var tExpr = insertedValueStr.split('').join(\"(\".concat(this.groupChar, \")?\"));\n var tRegex = new RegExp(tExpr, 'g');\n tRegex.test(newValue.slice(sRegex.lastIndex));\n _selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.$refs.input.$el.setSelectionRange(_selectionEnd, _selectionEnd);\n } else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single') {\n this.$refs.input.$el.setSelectionRange(_selectionEnd + 1, _selectionEnd + 1);\n } else if (operation === 'delete-single') {\n this.$refs.input.$el.setSelectionRange(_selectionEnd - 1, _selectionEnd - 1);\n } else if (operation === 'delete-range' || operation === 'spin') {\n this.$refs.input.$el.setSelectionRange(_selectionEnd, _selectionEnd);\n }\n } else if (operation === 'delete-back-single') {\n var prevChar = inputValue.charAt(_selectionEnd - 1);\n var nextChar = inputValue.charAt(_selectionEnd);\n var diff = currentLength - newLength;\n var isGroupChar = this._group.test(nextChar);\n if (isGroupChar && diff === 1) {\n _selectionEnd += 1;\n } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n _selectionEnd += -1 * diff + 1;\n }\n this._group.lastIndex = 0;\n this.$refs.input.$el.setSelectionRange(_selectionEnd, _selectionEnd);\n } else if (inputValue === '-' && operation === 'insert') {\n this.$refs.input.$el.setSelectionRange(0, 0);\n var _index = this.initCursor();\n var _selectionEnd2 = _index + insertedValueStr.length + 1;\n this.$refs.input.$el.setSelectionRange(_selectionEnd2, _selectionEnd2);\n } else {\n _selectionEnd = _selectionEnd + (newLength - currentLength);\n this.$refs.input.$el.setSelectionRange(_selectionEnd, _selectionEnd);\n }\n }\n this.$refs.input.$el.setAttribute('aria-valuenow', value);\n },\n concatValues: function concatValues(val1, val2) {\n if (val1 && val2) {\n var decimalCharIndex = val2.search(this._decimal);\n this._decimal.lastIndex = 0;\n if (this.suffixChar) {\n return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n } else {\n return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n }\n }\n return val1;\n },\n getDecimalLength: function getDecimalLength(value) {\n if (value) {\n var valueSplit = value.split(this._decimal);\n if (valueSplit.length === 2) {\n return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n }\n }\n return 0;\n },\n updateModel: function updateModel(event, value) {\n this.d_modelValue = value;\n this.$emit('update:modelValue', value);\n },\n onInputFocus: function onInputFocus(event) {\n this.focused = true;\n if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n event.target.select();\n }\n this.$emit('focus', event);\n },\n onInputBlur: function onInputBlur(event) {\n this.focused = false;\n var input = event.target;\n var newValue = this.validateValue(this.parseValue(input.value));\n this.$emit('blur', {\n originalEvent: event,\n value: input.value\n });\n input.value = this.formatValue(newValue);\n input.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n clearSelection();\n }\n },\n clearTimer: function clearTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n },\n maxBoundry: function maxBoundry() {\n return this.d_modelValue >= this.max;\n },\n minBoundry: function minBoundry() {\n return this.d_modelValue <= this.min;\n }\n },\n computed: {\n filled: function filled() {\n return this.modelValue != null && this.modelValue.toString().length > 0;\n },\n upButtonListeners: function upButtonListeners() {\n var _this2 = this;\n return {\n mousedown: function mousedown(event) {\n return _this2.onUpButtonMouseDown(event);\n },\n mouseup: function mouseup(event) {\n return _this2.onUpButtonMouseUp(event);\n },\n mouseleave: function mouseleave(event) {\n return _this2.onUpButtonMouseLeave(event);\n },\n keydown: function keydown(event) {\n return _this2.onUpButtonKeyDown(event);\n },\n keyup: function keyup(event) {\n return _this2.onUpButtonKeyUp(event);\n }\n };\n },\n downButtonListeners: function downButtonListeners() {\n var _this3 = this;\n return {\n mousedown: function mousedown(event) {\n return _this3.onDownButtonMouseDown(event);\n },\n mouseup: function mouseup(event) {\n return _this3.onDownButtonMouseUp(event);\n },\n mouseleave: function mouseleave(event) {\n return _this3.onDownButtonMouseLeave(event);\n },\n keydown: function keydown(event) {\n return _this3.onDownButtonKeyDown(event);\n },\n keyup: function keyup(event) {\n return _this3.onDownButtonKeyUp(event);\n }\n };\n },\n formattedValue: function formattedValue() {\n var val = !this.modelValue && !this.allowEmpty ? 0 : this.modelValue;\n return this.formatValue(val);\n },\n getFormatter: function getFormatter() {\n return this.numberFormat;\n },\n hasFluid: function hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n components: {\n InputText: InputText,\n AngleUpIcon: AngleUpIcon,\n AngleDownIcon: AngleDownIcon\n }\n};\n\nvar _hoisted_1 = [\"disabled\"];\nvar _hoisted_2 = [\"disabled\"];\nvar _hoisted_3 = [\"disabled\"];\nvar _hoisted_4 = [\"disabled\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_InputText = resolveComponent(\"InputText\");\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [createVNode(_component_InputText, {\n ref: \"input\",\n id: _ctx.inputId,\n role: \"spinbutton\",\n \"class\": normalizeClass([_ctx.cx('pcInput'), _ctx.inputClass]),\n style: normalizeStyle(_ctx.inputStyle),\n value: $options.formattedValue,\n \"aria-valuemin\": _ctx.min,\n \"aria-valuemax\": _ctx.max,\n \"aria-valuenow\": _ctx.modelValue,\n inputmode: _ctx.mode === 'decimal' && !_ctx.minFractionDigits ? 'numeric' : 'decimal',\n disabled: _ctx.disabled,\n readonly: _ctx.readonly,\n placeholder: _ctx.placeholder,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n invalid: _ctx.invalid,\n variant: _ctx.variant,\n onInput: $options.onUserInput,\n onKeydown: $options.onInputKeyDown,\n onKeypress: $options.onInputKeyPress,\n onPaste: $options.onPaste,\n onClick: $options.onInputClick,\n onFocus: $options.onInputFocus,\n onBlur: $options.onInputBlur,\n pt: _ctx.ptm('pcInput'),\n unstyled: _ctx.unstyled\n }, null, 8, [\"id\", \"class\", \"style\", \"value\", \"aria-valuemin\", \"aria-valuemax\", \"aria-valuenow\", \"inputmode\", \"disabled\", \"readonly\", \"placeholder\", \"aria-labelledby\", \"aria-label\", \"invalid\", \"variant\", \"onInput\", \"onKeydown\", \"onKeypress\", \"onPaste\", \"onClick\", \"onFocus\", \"onBlur\", \"pt\", \"unstyled\"]), _ctx.showButtons && _ctx.buttonLayout === 'stacked' ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('buttonGroup')\n }, _ctx.ptm('buttonGroup')), [renderSlot(_ctx.$slots, \"incrementbutton\", {\n listeners: $options.upButtonListeners\n }, function () {\n return [createElementVNode(\"button\", mergeProps({\n \"class\": [_ctx.cx('incrementButton'), _ctx.incrementButtonClass]\n }, toHandlers($options.upButtonListeners, true), {\n disabled: _ctx.disabled,\n tabindex: -1,\n \"aria-hidden\": \"true\",\n type: \"button\"\n }, _ctx.ptm('incrementButton')), [renderSlot(_ctx.$slots, _ctx.$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon', {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon || _ctx.incrementButtonIcon ? 'span' : 'AngleUpIcon'), mergeProps({\n \"class\": [_ctx.incrementIcon, _ctx.incrementButtonIcon]\n }, _ctx.ptm('incrementIcon'), {\n \"data-pc-section\": \"incrementicon\"\n }), null, 16, [\"class\"]))];\n })], 16, _hoisted_1)];\n }), renderSlot(_ctx.$slots, \"decrementbutton\", {\n listeners: $options.downButtonListeners\n }, function () {\n return [createElementVNode(\"button\", mergeProps({\n \"class\": [_ctx.cx('decrementButton'), _ctx.decrementButtonClass]\n }, toHandlers($options.downButtonListeners, true), {\n disabled: _ctx.disabled,\n tabindex: -1,\n \"aria-hidden\": \"true\",\n type: \"button\"\n }, _ctx.ptm('decrementButton')), [renderSlot(_ctx.$slots, _ctx.$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon', {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon || _ctx.decrementButtonIcon ? 'span' : 'AngleDownIcon'), mergeProps({\n \"class\": [_ctx.decrementIcon, _ctx.decrementButtonIcon]\n }, _ctx.ptm('decrementIcon'), {\n \"data-pc-section\": \"decrementicon\"\n }), null, 16, [\"class\"]))];\n })], 16, _hoisted_2)];\n })], 16)) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, \"incrementbutton\", {\n listeners: $options.upButtonListeners\n }, function () {\n return [_ctx.showButtons && _ctx.buttonLayout !== 'stacked' ? (openBlock(), createElementBlock(\"button\", mergeProps({\n key: 0,\n \"class\": [_ctx.cx('incrementButton'), _ctx.incrementButtonClass]\n }, toHandlers($options.upButtonListeners, true), {\n disabled: _ctx.disabled,\n tabindex: -1,\n \"aria-hidden\": \"true\",\n type: \"button\"\n }, _ctx.ptm('incrementButton')), [renderSlot(_ctx.$slots, _ctx.$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon', {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon || _ctx.incrementButtonIcon ? 'span' : 'AngleUpIcon'), mergeProps({\n \"class\": [_ctx.incrementIcon, _ctx.incrementButtonIcon]\n }, _ctx.ptm('incrementIcon'), {\n \"data-pc-section\": \"incrementicon\"\n }), null, 16, [\"class\"]))];\n })], 16, _hoisted_3)) : createCommentVNode(\"\", true)];\n }), renderSlot(_ctx.$slots, \"decrementbutton\", {\n listeners: $options.downButtonListeners\n }, function () {\n return [_ctx.showButtons && _ctx.buttonLayout !== 'stacked' ? (openBlock(), createElementBlock(\"button\", mergeProps({\n key: 0,\n \"class\": [_ctx.cx('decrementButton'), _ctx.decrementButtonClass]\n }, toHandlers($options.downButtonListeners, true), {\n disabled: _ctx.disabled,\n tabindex: -1,\n \"aria-hidden\": \"true\",\n type: \"button\"\n }, _ctx.ptm('decrementButton')), [renderSlot(_ctx.$slots, _ctx.$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon', {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon || _ctx.decrementButtonIcon ? 'span' : 'AngleDownIcon'), mergeProps({\n \"class\": [_ctx.decrementIcon, _ctx.decrementButtonIcon]\n }, _ctx.ptm('decrementIcon'), {\n \"data-pc-section\": \"decrementicon\"\n }), null, 16, [\"class\"]))];\n })], 16, _hoisted_4)) : createCommentVNode(\"\", true)];\n })], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'ChevronDownIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'TimesIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M8.01186 7.00933L12.27 2.75116C12.341 2.68501 12.398 2.60524 12.4375 2.51661C12.4769 2.42798 12.4982 2.3323 12.4999 2.23529C12.5016 2.13827 12.4838 2.0419 12.4474 1.95194C12.4111 1.86197 12.357 1.78024 12.2884 1.71163C12.2198 1.64302 12.138 1.58893 12.0481 1.55259C11.9581 1.51625 11.8617 1.4984 11.7647 1.50011C11.6677 1.50182 11.572 1.52306 11.4834 1.56255C11.3948 1.60204 11.315 1.65898 11.2488 1.72997L6.99067 5.98814L2.7325 1.72997C2.59553 1.60234 2.41437 1.53286 2.22718 1.53616C2.03999 1.53946 1.8614 1.61529 1.72901 1.74767C1.59663 1.88006 1.5208 2.05865 1.5175 2.24584C1.5142 2.43303 1.58368 2.61419 1.71131 2.75116L5.96948 7.00933L1.71131 11.2675C1.576 11.403 1.5 11.5866 1.5 11.7781C1.5 11.9696 1.576 12.1532 1.71131 12.2887C1.84679 12.424 2.03043 12.5 2.2219 12.5C2.41338 12.5 2.59702 12.424 2.7325 12.2887L6.99067 8.03052L11.2488 12.2887C11.3843 12.424 11.568 12.5 11.7594 12.5C11.9509 12.5 12.1346 12.424 12.27 12.2887C12.4053 12.1532 12.4813 11.9696 12.4813 11.7781C12.4813 11.5866 12.4053 11.403 12.27 11.2675L8.01186 7.00933Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import { EventBus } from '@primeuix/utils/eventbus';\n\nvar OverlayEventBus = EventBus();\n\nexport { OverlayEventBus as default };\n//# sourceMappingURL=index.mjs.map\n","import { isClient } from '@primeuix/utils/dom';\nimport { renderSlot, openBlock, createBlock, Teleport, createCommentVNode } from 'vue';\n\nvar script = {\n name: 'Portal',\n props: {\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n disabled: {\n type: Boolean,\n \"default\": false\n }\n },\n data: function data() {\n return {\n mounted: false\n };\n },\n mounted: function mounted() {\n this.mounted = isClient();\n },\n computed: {\n inline: function inline() {\n return this.disabled || this.appendTo === 'self';\n }\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return $options.inline ? renderSlot(_ctx.$slots, \"default\", {\n key: 0\n }) : $data.mounted ? (openBlock(), createBlock(Teleport, {\n key: 1,\n to: $props.appendTo\n }, [renderSlot(_ctx.$slots, \"default\")], 8, [\"to\"])) : createCommentVNode(\"\", true);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-select {\\n display: inline-flex;\\n cursor: pointer;\\n position: relative;\\n user-select: none;\\n background: \".concat(dt('select.background'), \";\\n border: 1px solid \").concat(dt('select.border.color'), \";\\n transition: background \").concat(dt('select.transition.duration'), \", color \").concat(dt('select.transition.duration'), \", border-color \").concat(dt('select.transition.duration'), \",\\n outline-color \").concat(dt('select.transition.duration'), \", box-shadow \").concat(dt('select.transition.duration'), \";\\n border-radius: \").concat(dt('select.border.radius'), \";\\n outline-color: transparent;\\n box-shadow: \").concat(dt('select.shadow'), \";\\n}\\n\\n.p-select:not(.p-disabled):hover {\\n border-color: \").concat(dt('select.hover.border.color'), \";\\n}\\n\\n.p-select:not(.p-disabled).p-focus {\\n border-color: \").concat(dt('select.focus.border.color'), \";\\n box-shadow: \").concat(dt('select.focus.ring.shadow'), \";\\n outline: \").concat(dt('select.focus.ring.width'), \" \").concat(dt('select.focus.ring.style'), \" \").concat(dt('select.focus.ring.color'), \";\\n outline-offset: \").concat(dt('select.focus.ring.offset'), \";\\n}\\n\\n.p-select.p-variant-filled {\\n background: \").concat(dt('select.filled.background'), \";\\n}\\n\\n.p-select.p-variant-filled.p-focus {\\n background: \").concat(dt('select.filled.focus.background'), \";\\n}\\n\\n.p-select.p-invalid {\\n border-color: \").concat(dt('select.invalid.border.color'), \";\\n}\\n\\n.p-select.p-disabled {\\n opacity: 1;\\n background: \").concat(dt('select.disabled.background'), \";\\n}\\n\\n.p-select-clear-icon {\\n position: absolute;\\n top: 50%;\\n margin-top: -0.5rem;\\n color: \").concat(dt('select.clear.icon.color'), \";\\n right: \").concat(dt('select.dropdown.width'), \";\\n}\\n\\n.p-select-dropdown {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n background: transparent;\\n color: \").concat(dt('select.dropdown.color'), \";\\n width: \").concat(dt('select.dropdown.width'), \";\\n border-top-right-radius: \").concat(dt('select.border.radius'), \";\\n border-bottom-right-radius: \").concat(dt('select.border.radius'), \";\\n}\\n\\n.p-select-label {\\n display: block;\\n white-space: nowrap;\\n overflow: hidden;\\n flex: 1 1 auto;\\n width: 1%;\\n padding: \").concat(dt('select.padding.y'), \" \").concat(dt('select.padding.x'), \";\\n text-overflow: ellipsis;\\n cursor: pointer;\\n color: \").concat(dt('select.color'), \";\\n background: transparent;\\n border: 0 none;\\n outline: 0 none;\\n}\\n\\n.p-select-label.p-placeholder {\\n color: \").concat(dt('select.placeholder.color'), \";\\n}\\n\\n.p-select:has(.p-select-clear-icon) .p-select-label {\\n padding-right: calc(1rem + \").concat(dt('select.padding.x'), \");\\n}\\n\\n.p-select.p-disabled .p-select-label {\\n color: \").concat(dt('select.disabled.color'), \";\\n}\\n\\n.p-select-label-empty {\\n overflow: hidden;\\n opacity: 0;\\n}\\n\\ninput.p-select-label {\\n cursor: default;\\n}\\n\\n.p-select .p-select-overlay {\\n min-width: 100%;\\n}\\n\\n.p-select-overlay {\\n position: absolute;\\n top: 0;\\n left: 0;\\n background: \").concat(dt('select.overlay.background'), \";\\n color: \").concat(dt('select.overlay.color'), \";\\n border: 1px solid \").concat(dt('select.overlay.border.color'), \";\\n border-radius: \").concat(dt('select.overlay.border.radius'), \";\\n box-shadow: \").concat(dt('select.overlay.shadow'), \";\\n}\\n\\n.p-select-header {\\n padding: \").concat(dt('select.list.header.padding'), \";\\n}\\n\\n.p-select-filter {\\n width: 100%;\\n}\\n\\n.p-select-list-container {\\n overflow: auto;\\n}\\n\\n.p-select-option-group {\\n cursor: auto;\\n margin: 0;\\n padding: \").concat(dt('select.option.group.padding'), \";\\n background: \").concat(dt('select.option.group.background'), \";\\n color: \").concat(dt('select.option.group.color'), \";\\n font-weight: \").concat(dt('select.option.group.font.weight'), \";\\n}\\n\\n.p-select-list {\\n margin: 0;\\n padding: 0;\\n list-style-type: none;\\n padding: \").concat(dt('select.list.padding'), \";\\n gap: \").concat(dt('select.list.gap'), \";\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.p-select-option {\\n cursor: pointer;\\n font-weight: normal;\\n white-space: nowrap;\\n position: relative;\\n overflow: hidden;\\n display: flex;\\n align-items: center;\\n padding: \").concat(dt('select.option.padding'), \";\\n border: 0 none;\\n color: \").concat(dt('select.option.color'), \";\\n background: transparent;\\n transition: background \").concat(dt('select.transition.duration'), \", color \").concat(dt('select.transition.duration'), \", border-color \").concat(dt('select.transition.duration'), \",\\n box-shadow \").concat(dt('select.transition.duration'), \", outline-color \").concat(dt('select.transition.duration'), \";\\n border-radius: \").concat(dt('select.option.border.radius'), \";\\n}\\n\\n.p-select-option:not(.p-select-option-selected):not(.p-disabled).p-focus {\\n background: \").concat(dt('select.option.focus.background'), \";\\n color: \").concat(dt('select.option.focus.color'), \";\\n}\\n\\n.p-select-option.p-select-option-selected {\\n background: \").concat(dt('select.option.selected.background'), \";\\n color: \").concat(dt('select.option.selected.color'), \";\\n}\\n\\n.p-select-option.p-select-option-selected.p-focus {\\n background: \").concat(dt('select.option.selected.focus.background'), \";\\n color: \").concat(dt('select.option.selected.focus.color'), \";\\n}\\n\\n.p-select-option-check-icon {\\n position: relative;\\n margin-inline-start: \").concat(dt('select.checkmark.gutter.start'), \";\\n margin-inline-end: \").concat(dt('select.checkmark.gutter.end'), \";\\n color: \").concat(dt('select.checkmark.color'), \";\\n}\\n\\n.p-select-empty-message {\\n padding: \").concat(dt('select.empty.message.padding'), \";\\n}\\n\\n.p-select-fluid {\\n display: flex;\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props,\n state = _ref2.state;\n return ['p-select p-component p-inputwrapper', {\n 'p-disabled': props.disabled,\n 'p-invalid': props.invalid,\n 'p-variant-filled': props.variant ? props.variant === 'filled' : instance.$primevue.config.inputStyle === 'filled' || instance.$primevue.config.inputVariant === 'filled',\n 'p-focus': state.focused,\n 'p-inputwrapper-filled': instance.hasSelectedOption,\n 'p-inputwrapper-focus': state.focused || state.overlayVisible,\n 'p-select-open': state.overlayVisible,\n 'p-select-fluid': instance.hasFluid\n }];\n },\n label: function label(_ref3) {\n var instance = _ref3.instance,\n props = _ref3.props;\n return ['p-select-label', {\n 'p-placeholder': !props.editable && instance.label === props.placeholder,\n 'p-select-label-empty': !props.editable && !instance.$slots['value'] && (instance.label === 'p-emptylabel' || instance.label.length === 0)\n }];\n },\n clearIcon: 'p-select-clear-icon',\n dropdown: 'p-select-dropdown',\n loadingicon: 'p-select-loading-icon',\n dropdownIcon: 'p-select-dropdown-icon',\n overlay: 'p-select-overlay p-component',\n header: 'p-select-header',\n pcFilter: 'p-select-filter',\n listContainer: 'p-select-list-container',\n list: 'p-select-list',\n optionGroup: 'p-select-option-group',\n optionGroupLabel: 'p-select-option-group-label',\n option: function option(_ref4) {\n var instance = _ref4.instance,\n props = _ref4.props,\n state = _ref4.state,\n _option = _ref4.option,\n focusedOption = _ref4.focusedOption;\n return ['p-select-option', {\n 'p-select-option-selected': instance.isSelected(_option) && props.highlightOnSelect,\n 'p-focus': state.focusedOptionIndex === focusedOption,\n 'p-disabled': instance.isOptionDisabled(_option)\n }];\n },\n optionLabel: 'p-select-option-label',\n optionCheckIcon: 'p-select-option-check-icon',\n optionBlankIcon: 'p-select-option-blank-icon',\n emptyMessage: 'p-select-empty-message'\n};\nvar SelectStyle = BaseStyle.extend({\n name: 'select',\n theme: theme,\n classes: classes\n});\n\nexport { SelectStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { focus, isAndroid, getFirstFocusableElement, getLastFocusableElement, addStyle, relativePosition, getOuterWidth, absolutePosition, isTouchDevice, isVisible, getFocusableElements, findSingle } from '@primeuix/utils/dom';\nimport { resolveFieldData, isPrintableCharacter, isNotEmpty, equals, findLastIndex, isEmpty } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport { FilterService } from '@primevue/core/api';\nimport { UniqueComponentId, ConnectedOverlayScrollHandler } from '@primevue/core/utils';\nimport BlankIcon from '@primevue/icons/blank';\nimport CheckIcon from '@primevue/icons/check';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport SearchIcon from '@primevue/icons/search';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport TimesIcon from '@primevue/icons/times';\nimport IconField from 'primevue/iconfield';\nimport InputIcon from 'primevue/inputicon';\nimport InputText from 'primevue/inputtext';\nimport OverlayEventBus from 'primevue/overlayeventbus';\nimport Portal from 'primevue/portal';\nimport Ripple from 'primevue/ripple';\nimport VirtualScroller from 'primevue/virtualscroller';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SelectStyle from 'primevue/select/style';\nimport { resolveComponent, resolveDirective, openBlock, createElementBlock, mergeProps, renderSlot, createTextVNode, toDisplayString, normalizeClass, createBlock, resolveDynamicComponent, createCommentVNode, createElementVNode, createVNode, withCtx, Transition, normalizeProps, createSlots, Fragment, renderList, withDirectives } from 'vue';\n\nvar script$1 = {\n name: 'BaseSelect',\n \"extends\": BaseComponent,\n props: {\n modelValue: null,\n options: Array,\n optionLabel: [String, Function],\n optionValue: [String, Function],\n optionDisabled: [String, Function],\n optionGroupLabel: [String, Function],\n optionGroupChildren: [String, Function],\n scrollHeight: {\n type: String,\n \"default\": '14rem'\n },\n filter: Boolean,\n filterPlaceholder: String,\n filterLocale: String,\n filterMatchMode: {\n type: String,\n \"default\": 'contains'\n },\n filterFields: {\n type: Array,\n \"default\": null\n },\n editable: Boolean,\n placeholder: {\n type: String,\n \"default\": null\n },\n variant: {\n type: String,\n \"default\": null\n },\n invalid: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n dataKey: null,\n showClear: {\n type: Boolean,\n \"default\": false\n },\n fluid: {\n type: Boolean,\n \"default\": null\n },\n inputId: {\n type: String,\n \"default\": null\n },\n inputClass: {\n type: [String, Object],\n \"default\": null\n },\n inputStyle: {\n type: Object,\n \"default\": null\n },\n labelId: {\n type: String,\n \"default\": null\n },\n labelClass: {\n type: [String, Object],\n \"default\": null\n },\n labelStyle: {\n type: Object,\n \"default\": null\n },\n panelClass: {\n type: [String, Object],\n \"default\": null\n },\n overlayStyle: {\n type: Object,\n \"default\": null\n },\n overlayClass: {\n type: [String, Object],\n \"default\": null\n },\n panelStyle: {\n type: Object,\n \"default\": null\n },\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n loading: {\n type: Boolean,\n \"default\": false\n },\n clearIcon: {\n type: String,\n \"default\": undefined\n },\n dropdownIcon: {\n type: String,\n \"default\": undefined\n },\n filterIcon: {\n type: String,\n \"default\": undefined\n },\n loadingIcon: {\n type: String,\n \"default\": undefined\n },\n resetFilterOnHide: {\n type: Boolean,\n \"default\": false\n },\n resetFilterOnClear: {\n type: Boolean,\n \"default\": false\n },\n virtualScrollerOptions: {\n type: Object,\n \"default\": null\n },\n autoOptionFocus: {\n type: Boolean,\n \"default\": false\n },\n autoFilterFocus: {\n type: Boolean,\n \"default\": false\n },\n selectOnFocus: {\n type: Boolean,\n \"default\": false\n },\n focusOnHover: {\n type: Boolean,\n \"default\": true\n },\n highlightOnSelect: {\n type: Boolean,\n \"default\": true\n },\n checkmark: {\n type: Boolean,\n \"default\": false\n },\n filterMessage: {\n type: String,\n \"default\": null\n },\n selectionMessage: {\n type: String,\n \"default\": null\n },\n emptySelectionMessage: {\n type: String,\n \"default\": null\n },\n emptyFilterMessage: {\n type: String,\n \"default\": null\n },\n emptyMessage: {\n type: String,\n \"default\": null\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n ariaLabel: {\n type: String,\n \"default\": null\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n }\n },\n style: SelectStyle,\n provide: function provide() {\n return {\n $pcSelect: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar script = {\n name: 'Select',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'before-show', 'before-hide', 'show', 'hide', 'filter'],\n inject: {\n $pcFluid: {\n \"default\": null\n }\n },\n outsideClickListener: null,\n scrollHandler: null,\n resizeListener: null,\n labelClickListener: null,\n overlay: null,\n list: null,\n virtualScroller: null,\n searchTimeout: null,\n searchValue: null,\n isModelValueChanged: false,\n data: function data() {\n return {\n id: this.$attrs.id,\n clicked: false,\n focused: false,\n focusedOptionIndex: -1,\n filterValue: null,\n overlayVisible: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n modelValue: function modelValue() {\n this.isModelValueChanged = true;\n },\n options: function options() {\n this.autoUpdateModel();\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n this.autoUpdateModel();\n this.bindLabelClickListener();\n },\n updated: function updated() {\n if (this.overlayVisible && this.isModelValueChanged) {\n this.scrollInView(this.findSelectedOptionIndex());\n }\n this.isModelValueChanged = false;\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n this.unbindLabelClickListener();\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n if (this.overlay) {\n ZIndex.clear(this.overlay);\n this.overlay = null;\n }\n },\n methods: {\n getOptionIndex: function getOptionIndex(index, fn) {\n return this.virtualScrollerDisabled ? index : fn && fn(index)['index'];\n },\n getOptionLabel: function getOptionLabel(option) {\n return this.optionLabel ? resolveFieldData(option, this.optionLabel) : option;\n },\n getOptionValue: function getOptionValue(option) {\n return this.optionValue ? resolveFieldData(option, this.optionValue) : option;\n },\n getOptionRenderKey: function getOptionRenderKey(option, index) {\n return (this.dataKey ? resolveFieldData(option, this.dataKey) : this.getOptionLabel(option)) + '_' + index;\n },\n getPTItemOptions: function getPTItemOptions(option, itemOptions, index, key) {\n return this.ptm(key, {\n context: {\n option: option,\n index: index,\n selected: this.isSelected(option),\n focused: this.focusedOptionIndex === this.getOptionIndex(index, itemOptions),\n disabled: this.isOptionDisabled(option)\n }\n });\n },\n isOptionDisabled: function isOptionDisabled(option) {\n return this.optionDisabled ? resolveFieldData(option, this.optionDisabled) : false;\n },\n isOptionGroup: function isOptionGroup(option) {\n return this.optionGroupLabel && option.optionGroup && option.group;\n },\n getOptionGroupLabel: function getOptionGroupLabel(optionGroup) {\n return resolveFieldData(optionGroup, this.optionGroupLabel);\n },\n getOptionGroupChildren: function getOptionGroupChildren(optionGroup) {\n return resolveFieldData(optionGroup, this.optionGroupChildren);\n },\n getAriaPosInset: function getAriaPosInset(index) {\n var _this = this;\n return (this.optionGroupLabel ? index - this.visibleOptions.slice(0, index).filter(function (option) {\n return _this.isOptionGroup(option);\n }).length : index) + 1;\n },\n show: function show(isFocus) {\n this.$emit('before-show');\n this.overlayVisible = true;\n this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.editable ? -1 : this.findSelectedOptionIndex();\n isFocus && focus(this.$refs.focusInput);\n },\n hide: function hide(isFocus) {\n var _this2 = this;\n var _hide = function _hide() {\n _this2.$emit('before-hide');\n _this2.overlayVisible = false;\n _this2.clicked = false;\n _this2.focusedOptionIndex = -1;\n _this2.searchValue = '';\n _this2.resetFilterOnHide && (_this2.filterValue = null);\n isFocus && focus(_this2.$refs.focusInput);\n };\n setTimeout(function () {\n _hide();\n }, 0); // For ScreenReaders\n },\n onFocus: function onFocus(event) {\n if (this.disabled) {\n // For ScreenReaders\n return;\n }\n this.focused = true;\n if (this.overlayVisible) {\n this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.editable ? -1 : this.findSelectedOptionIndex();\n this.scrollInView(this.focusedOptionIndex);\n }\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.focused = false;\n this.focusedOptionIndex = -1;\n this.searchValue = '';\n this.$emit('blur', event);\n },\n onKeyDown: function onKeyDown(event) {\n if (this.disabled || isAndroid()) {\n event.preventDefault();\n return;\n }\n var metaKey = event.metaKey || event.ctrlKey;\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event, this.editable);\n break;\n case 'ArrowLeft':\n case 'ArrowRight':\n this.onArrowLeftKey(event, this.editable);\n break;\n case 'Home':\n this.onHomeKey(event, this.editable);\n break;\n case 'End':\n this.onEndKey(event, this.editable);\n break;\n case 'PageDown':\n this.onPageDownKey(event);\n break;\n case 'PageUp':\n this.onPageUpKey(event);\n break;\n case 'Space':\n this.onSpaceKey(event, this.editable);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'Backspace':\n this.onBackspaceKey(event, this.editable);\n break;\n case 'ShiftLeft':\n case 'ShiftRight':\n //NOOP\n break;\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n !this.overlayVisible && this.show();\n !this.editable && this.searchOptions(event, event.key);\n }\n break;\n }\n this.clicked = false;\n },\n onEditableInput: function onEditableInput(event) {\n var value = event.target.value;\n this.searchValue = '';\n var matched = this.searchOptions(event, value);\n !matched && (this.focusedOptionIndex = -1);\n this.updateModel(event, value);\n !this.overlayVisible && isNotEmpty(value) && this.show();\n },\n onContainerClick: function onContainerClick(event) {\n if (this.disabled || this.loading) {\n return;\n }\n if (event.target.tagName === 'INPUT' || event.target.getAttribute('data-pc-section') === 'clearicon' || event.target.closest('[data-pc-section=\"clearicon\"]')) {\n return;\n } else if (!this.overlay || !this.overlay.contains(event.target)) {\n this.overlayVisible ? this.hide(true) : this.show(true);\n }\n this.clicked = true;\n },\n onClearClick: function onClearClick(event) {\n this.updateModel(event, null);\n this.resetFilterOnClear && (this.filterValue = null);\n },\n onFirstHiddenFocus: function onFirstHiddenFocus(event) {\n var focusableEl = event.relatedTarget === this.$refs.focusInput ? getFirstFocusableElement(this.overlay, ':not([data-p-hidden-focusable=\"true\"])') : this.$refs.focusInput;\n focus(focusableEl);\n },\n onLastHiddenFocus: function onLastHiddenFocus(event) {\n var focusableEl = event.relatedTarget === this.$refs.focusInput ? getLastFocusableElement(this.overlay, ':not([data-p-hidden-focusable=\"true\"])') : this.$refs.focusInput;\n focus(focusableEl);\n },\n onOptionSelect: function onOptionSelect(event, option) {\n var isHide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var value = this.getOptionValue(option);\n this.updateModel(event, value);\n isHide && this.hide(true);\n },\n onOptionMouseMove: function onOptionMouseMove(event, index) {\n if (this.focusOnHover) {\n this.changeFocusedOptionIndex(event, index);\n }\n },\n onFilterChange: function onFilterChange(event) {\n var value = event.target.value;\n this.filterValue = value;\n this.focusedOptionIndex = -1;\n this.$emit('filter', {\n originalEvent: event,\n value: value\n });\n !this.virtualScrollerDisabled && this.virtualScroller.scrollToIndex(0);\n },\n onFilterKeyDown: function onFilterKeyDown(event) {\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event, true);\n break;\n case 'ArrowLeft':\n case 'ArrowRight':\n this.onArrowLeftKey(event, true);\n break;\n case 'Home':\n this.onHomeKey(event, true);\n break;\n case 'End':\n this.onEndKey(event, true);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event, true);\n break;\n }\n },\n onFilterBlur: function onFilterBlur() {\n this.focusedOptionIndex = -1;\n },\n onFilterUpdated: function onFilterUpdated() {\n if (this.overlayVisible) {\n this.alignOverlay();\n }\n },\n onOverlayClick: function onOverlayClick(event) {\n OverlayEventBus.emit('overlay-click', {\n originalEvent: event,\n target: this.$el\n });\n },\n onOverlayKeyDown: function onOverlayKeyDown(event) {\n switch (event.code) {\n case 'Escape':\n this.onEscapeKey(event);\n break;\n }\n },\n onArrowDownKey: function onArrowDownKey(event) {\n if (!this.overlayVisible) {\n this.show();\n this.editable && this.changeFocusedOptionIndex(event, this.findSelectedOptionIndex());\n } else {\n var optionIndex = this.focusedOptionIndex !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n }\n event.preventDefault();\n },\n onArrowUpKey: function onArrowUpKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (event.altKey && !pressedInInputText) {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.overlayVisible && this.hide();\n event.preventDefault();\n } else {\n var optionIndex = this.focusedOptionIndex !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex();\n this.changeFocusedOptionIndex(event, optionIndex);\n !this.overlayVisible && this.show();\n event.preventDefault();\n }\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n pressedInInputText && (this.focusedOptionIndex = -1);\n },\n onHomeKey: function onHomeKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (pressedInInputText) {\n var target = event.currentTarget;\n if (event.shiftKey) {\n target.setSelectionRange(0, event.target.selectionStart);\n } else {\n target.setSelectionRange(0, 0);\n this.focusedOptionIndex = -1;\n }\n } else {\n this.changeFocusedOptionIndex(event, this.findFirstOptionIndex());\n !this.overlayVisible && this.show();\n }\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (pressedInInputText) {\n var target = event.currentTarget;\n if (event.shiftKey) {\n target.setSelectionRange(event.target.selectionStart, target.value.length);\n } else {\n var len = target.value.length;\n target.setSelectionRange(len, len);\n this.focusedOptionIndex = -1;\n }\n } else {\n this.changeFocusedOptionIndex(event, this.findLastOptionIndex());\n !this.overlayVisible && this.show();\n }\n event.preventDefault();\n },\n onPageUpKey: function onPageUpKey(event) {\n this.scrollInView(0);\n event.preventDefault();\n },\n onPageDownKey: function onPageDownKey(event) {\n this.scrollInView(this.visibleOptions.length - 1);\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n if (!this.overlayVisible) {\n this.focusedOptionIndex = -1; // reset\n this.onArrowDownKey(event);\n } else {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.hide();\n }\n event.preventDefault();\n },\n onSpaceKey: function onSpaceKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n !pressedInInputText && this.onEnterKey(event);\n },\n onEscapeKey: function onEscapeKey(event) {\n this.overlayVisible && this.hide(true);\n event.preventDefault();\n event.stopPropagation(); //@todo will be changed next versionss\n },\n onTabKey: function onTabKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!pressedInInputText) {\n if (this.overlayVisible && this.hasFocusableElements()) {\n focus(this.$refs.firstHiddenFocusableElementOnOverlay);\n event.preventDefault();\n } else {\n if (this.focusedOptionIndex !== -1) {\n this.onOptionSelect(event, this.visibleOptions[this.focusedOptionIndex]);\n }\n this.overlayVisible && this.hide(this.filter);\n }\n }\n },\n onBackspaceKey: function onBackspaceKey(event) {\n var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (pressedInInputText) {\n !this.overlayVisible && this.show();\n }\n },\n onOverlayEnter: function onOverlayEnter(el) {\n ZIndex.set('overlay', el, this.$primevue.config.zIndex.overlay);\n addStyle(el, {\n position: 'absolute',\n top: '0',\n left: '0'\n });\n this.alignOverlay();\n this.scrollInView();\n this.autoFilterFocus && focus(this.$refs.filterInput.$el);\n },\n onOverlayAfterEnter: function onOverlayAfterEnter() {\n this.bindOutsideClickListener();\n this.bindScrollListener();\n this.bindResizeListener();\n this.$emit('show');\n },\n onOverlayLeave: function onOverlayLeave() {\n this.unbindOutsideClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n this.autoFilterFocus && focus(this.$refs.focusInput);\n this.$emit('hide');\n this.overlay = null;\n },\n onOverlayAfterLeave: function onOverlayAfterLeave(el) {\n ZIndex.clear(el);\n },\n alignOverlay: function alignOverlay() {\n if (this.appendTo === 'self') {\n relativePosition(this.overlay, this.$el);\n } else {\n this.overlay.style.minWidth = getOuterWidth(this.$el) + 'px';\n absolutePosition(this.overlay, this.$el);\n }\n },\n bindOutsideClickListener: function bindOutsideClickListener() {\n var _this3 = this;\n if (!this.outsideClickListener) {\n this.outsideClickListener = function (event) {\n if (_this3.overlayVisible && _this3.overlay && !_this3.$el.contains(event.target) && !_this3.overlay.contains(event.target)) {\n _this3.hide();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n },\n unbindOutsideClickListener: function unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n },\n bindScrollListener: function bindScrollListener() {\n var _this4 = this;\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function () {\n if (_this4.overlayVisible) {\n _this4.hide();\n }\n });\n }\n this.scrollHandler.bindScrollListener();\n },\n unbindScrollListener: function unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n },\n bindResizeListener: function bindResizeListener() {\n var _this5 = this;\n if (!this.resizeListener) {\n this.resizeListener = function () {\n if (_this5.overlayVisible && !isTouchDevice()) {\n _this5.hide();\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n },\n unbindResizeListener: function unbindResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n },\n bindLabelClickListener: function bindLabelClickListener() {\n var _this6 = this;\n if (!this.editable && !this.labelClickListener) {\n var label = document.querySelector(\"label[for=\\\"\".concat(this.inputId, \"\\\"]\"));\n if (label && isVisible(label)) {\n this.labelClickListener = function () {\n focus(_this6.$refs.focusInput);\n };\n label.addEventListener('click', this.labelClickListener);\n }\n }\n },\n unbindLabelClickListener: function unbindLabelClickListener() {\n if (this.labelClickListener) {\n var label = document.querySelector(\"label[for=\\\"\".concat(this.inputId, \"\\\"]\"));\n if (label && isVisible(label)) {\n label.removeEventListener('click', this.labelClickListener);\n }\n }\n },\n hasFocusableElements: function hasFocusableElements() {\n return getFocusableElements(this.overlay, ':not([data-p-hidden-focusable=\"true\"])').length > 0;\n },\n isOptionMatched: function isOptionMatched(option) {\n var _this$getOptionLabel;\n return this.isValidOption(option) && typeof this.getOptionLabel(option) === 'string' && ((_this$getOptionLabel = this.getOptionLabel(option)) === null || _this$getOptionLabel === void 0 ? void 0 : _this$getOptionLabel.toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)));\n },\n isValidOption: function isValidOption(option) {\n return isNotEmpty(option) && !(this.isOptionDisabled(option) || this.isOptionGroup(option));\n },\n isValidSelectedOption: function isValidSelectedOption(option) {\n return this.isValidOption(option) && this.isSelected(option);\n },\n isSelected: function isSelected(option) {\n return this.isValidOption(option) && equals(this.modelValue, this.getOptionValue(option), this.equalityKey);\n },\n findFirstOptionIndex: function findFirstOptionIndex() {\n var _this7 = this;\n return this.visibleOptions.findIndex(function (option) {\n return _this7.isValidOption(option);\n });\n },\n findLastOptionIndex: function findLastOptionIndex() {\n var _this8 = this;\n return findLastIndex(this.visibleOptions, function (option) {\n return _this8.isValidOption(option);\n });\n },\n findNextOptionIndex: function findNextOptionIndex(index) {\n var _this9 = this;\n var matchedOptionIndex = index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function (option) {\n return _this9.isValidOption(option);\n }) : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;\n },\n findPrevOptionIndex: function findPrevOptionIndex(index) {\n var _this10 = this;\n var matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function (option) {\n return _this10.isValidOption(option);\n }) : -1;\n return matchedOptionIndex > -1 ? matchedOptionIndex : index;\n },\n findSelectedOptionIndex: function findSelectedOptionIndex() {\n var _this11 = this;\n return this.hasSelectedOption ? this.visibleOptions.findIndex(function (option) {\n return _this11.isValidSelectedOption(option);\n }) : -1;\n },\n findFirstFocusedOptionIndex: function findFirstFocusedOptionIndex() {\n var selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex;\n },\n findLastFocusedOptionIndex: function findLastFocusedOptionIndex() {\n var selectedIndex = this.findSelectedOptionIndex();\n return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex;\n },\n searchOptions: function searchOptions(event, _char) {\n var _this12 = this;\n this.searchValue = (this.searchValue || '') + _char;\n var optionIndex = -1;\n var matched = false;\n if (isNotEmpty(this.searchValue)) {\n if (this.focusedOptionIndex !== -1) {\n optionIndex = this.visibleOptions.slice(this.focusedOptionIndex).findIndex(function (option) {\n return _this12.isOptionMatched(option);\n });\n optionIndex = optionIndex === -1 ? this.visibleOptions.slice(0, this.focusedOptionIndex).findIndex(function (option) {\n return _this12.isOptionMatched(option);\n }) : optionIndex + this.focusedOptionIndex;\n } else {\n optionIndex = this.visibleOptions.findIndex(function (option) {\n return _this12.isOptionMatched(option);\n });\n }\n if (optionIndex !== -1) {\n matched = true;\n }\n if (optionIndex === -1 && this.focusedOptionIndex === -1) {\n optionIndex = this.findFirstFocusedOptionIndex();\n }\n if (optionIndex !== -1) {\n this.changeFocusedOptionIndex(event, optionIndex);\n }\n }\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(function () {\n _this12.searchValue = '';\n _this12.searchTimeout = null;\n }, 500);\n return matched;\n },\n changeFocusedOptionIndex: function changeFocusedOptionIndex(event, index) {\n if (this.focusedOptionIndex !== index) {\n this.focusedOptionIndex = index;\n this.scrollInView();\n if (this.selectOnFocus) {\n this.onOptionSelect(event, this.visibleOptions[index], false);\n }\n }\n },\n scrollInView: function scrollInView() {\n var _this13 = this;\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n this.$nextTick(function () {\n var id = index !== -1 ? \"\".concat(_this13.id, \"_\").concat(index) : _this13.focusedOptionId;\n var element = findSingle(_this13.list, \"li[id=\\\"\".concat(id, \"\\\"]\"));\n if (element) {\n element.scrollIntoView && element.scrollIntoView({\n block: 'nearest',\n inline: 'start'\n });\n } else if (!_this13.virtualScrollerDisabled) {\n _this13.virtualScroller && _this13.virtualScroller.scrollToIndex(index !== -1 ? index : _this13.focusedOptionIndex);\n }\n });\n },\n autoUpdateModel: function autoUpdateModel() {\n if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption) {\n this.focusedOptionIndex = this.findFirstFocusedOptionIndex();\n this.onOptionSelect(null, this.visibleOptions[this.focusedOptionIndex], false);\n }\n },\n updateModel: function updateModel(event, value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', {\n originalEvent: event,\n value: value\n });\n },\n flatOptions: function flatOptions(options) {\n var _this14 = this;\n return (options || []).reduce(function (result, option, index) {\n result.push({\n optionGroup: option,\n group: true,\n index: index\n });\n var optionGroupChildren = _this14.getOptionGroupChildren(option);\n optionGroupChildren && optionGroupChildren.forEach(function (o) {\n return result.push(o);\n });\n return result;\n }, []);\n },\n overlayRef: function overlayRef(el) {\n this.overlay = el;\n },\n listRef: function listRef(el, contentRef) {\n this.list = el;\n contentRef && contentRef(el); // For VirtualScroller\n },\n virtualScrollerRef: function virtualScrollerRef(el) {\n this.virtualScroller = el;\n }\n },\n computed: {\n visibleOptions: function visibleOptions() {\n var _this15 = this;\n var options = this.optionGroupLabel ? this.flatOptions(this.options) : this.options || [];\n if (this.filterValue) {\n var filteredOptions = FilterService.filter(options, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n if (this.optionGroupLabel) {\n var optionGroups = this.options || [];\n var filtered = [];\n optionGroups.forEach(function (group) {\n var groupChildren = _this15.getOptionGroupChildren(group);\n var filteredItems = groupChildren.filter(function (item) {\n return filteredOptions.includes(item);\n });\n if (filteredItems.length > 0) filtered.push(_objectSpread(_objectSpread({}, group), {}, _defineProperty({}, typeof _this15.optionGroupChildren === 'string' ? _this15.optionGroupChildren : 'items', _toConsumableArray(filteredItems))));\n });\n return this.flatOptions(filtered);\n }\n return filteredOptions;\n }\n return options;\n },\n hasSelectedOption: function hasSelectedOption() {\n return isNotEmpty(this.modelValue);\n },\n label: function label() {\n var selectedOptionIndex = this.findSelectedOptionIndex();\n return selectedOptionIndex !== -1 ? this.getOptionLabel(this.visibleOptions[selectedOptionIndex]) : this.placeholder || 'p-emptylabel';\n },\n editableInputValue: function editableInputValue() {\n var selectedOptionIndex = this.findSelectedOptionIndex();\n return selectedOptionIndex !== -1 ? this.getOptionLabel(this.visibleOptions[selectedOptionIndex]) : this.modelValue || '';\n },\n equalityKey: function equalityKey() {\n return this.optionValue ? null : this.dataKey;\n },\n searchFields: function searchFields() {\n return this.filterFields || [this.optionLabel];\n },\n filterResultMessageText: function filterResultMessageText() {\n return isNotEmpty(this.visibleOptions) ? this.filterMessageText.replaceAll('{0}', this.visibleOptions.length) : this.emptyFilterMessageText;\n },\n filterMessageText: function filterMessageText() {\n return this.filterMessage || this.$primevue.config.locale.searchMessage || '';\n },\n emptyFilterMessageText: function emptyFilterMessageText() {\n return this.emptyFilterMessage || this.$primevue.config.locale.emptySearchMessage || this.$primevue.config.locale.emptyFilterMessage || '';\n },\n emptyMessageText: function emptyMessageText() {\n return this.emptyMessage || this.$primevue.config.locale.emptyMessage || '';\n },\n selectionMessageText: function selectionMessageText() {\n return this.selectionMessage || this.$primevue.config.locale.selectionMessage || '';\n },\n emptySelectionMessageText: function emptySelectionMessageText() {\n return this.emptySelectionMessage || this.$primevue.config.locale.emptySelectionMessage || '';\n },\n selectedMessageText: function selectedMessageText() {\n return this.hasSelectedOption ? this.selectionMessageText.replaceAll('{0}', '1') : this.emptySelectionMessageText;\n },\n focusedOptionId: function focusedOptionId() {\n return this.focusedOptionIndex !== -1 ? \"\".concat(this.id, \"_\").concat(this.focusedOptionIndex) : null;\n },\n ariaSetSize: function ariaSetSize() {\n var _this16 = this;\n return this.visibleOptions.filter(function (option) {\n return !_this16.isOptionGroup(option);\n }).length;\n },\n isClearIconVisible: function isClearIconVisible() {\n return this.showClear && this.modelValue != null && isNotEmpty(this.options);\n },\n virtualScrollerDisabled: function virtualScrollerDisabled() {\n return !this.virtualScrollerOptions;\n },\n hasFluid: function hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n directives: {\n ripple: Ripple\n },\n components: {\n InputText: InputText,\n VirtualScroller: VirtualScroller,\n Portal: Portal,\n InputIcon: InputIcon,\n IconField: IconField,\n TimesIcon: TimesIcon,\n ChevronDownIcon: ChevronDownIcon,\n SpinnerIcon: SpinnerIcon,\n SearchIcon: SearchIcon,\n CheckIcon: CheckIcon,\n BlankIcon: BlankIcon\n }\n};\n\nvar _hoisted_1 = [\"id\"];\nvar _hoisted_2 = [\"id\", \"value\", \"placeholder\", \"tabindex\", \"disabled\", \"aria-label\", \"aria-labelledby\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\", \"aria-invalid\"];\nvar _hoisted_3 = [\"id\", \"tabindex\", \"aria-label\", \"aria-labelledby\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\", \"aria-disabled\"];\nvar _hoisted_4 = [\"id\"];\nvar _hoisted_5 = [\"id\"];\nvar _hoisted_6 = [\"id\", \"aria-label\", \"aria-selected\", \"aria-disabled\", \"aria-setsize\", \"aria-posinset\", \"onClick\", \"onMousemove\", \"data-p-selected\", \"data-p-focused\", \"data-p-disabled\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_SpinnerIcon = resolveComponent(\"SpinnerIcon\");\n var _component_InputText = resolveComponent(\"InputText\");\n var _component_SearchIcon = resolveComponent(\"SearchIcon\");\n var _component_InputIcon = resolveComponent(\"InputIcon\");\n var _component_IconField = resolveComponent(\"IconField\");\n var _component_CheckIcon = resolveComponent(\"CheckIcon\");\n var _component_BlankIcon = resolveComponent(\"BlankIcon\");\n var _component_VirtualScroller = resolveComponent(\"VirtualScroller\");\n var _component_Portal = resolveComponent(\"Portal\");\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref: \"container\",\n id: $data.id,\n \"class\": _ctx.cx('root'),\n onClick: _cache[11] || (_cache[11] = function () {\n return $options.onContainerClick && $options.onContainerClick.apply($options, arguments);\n })\n }, _ctx.ptmi('root')), [_ctx.editable ? (openBlock(), createElementBlock(\"input\", mergeProps({\n key: 0,\n ref: \"focusInput\",\n id: _ctx.labelId || _ctx.inputId,\n type: \"text\",\n \"class\": [_ctx.cx('label'), _ctx.inputClass, _ctx.labelClass],\n style: [_ctx.inputStyle, _ctx.labelStyle],\n value: $options.editableInputValue,\n placeholder: _ctx.placeholder,\n tabindex: !_ctx.disabled ? _ctx.tabindex : -1,\n disabled: _ctx.disabled,\n autocomplete: \"off\",\n role: \"combobox\",\n \"aria-label\": _ctx.ariaLabel,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": $data.overlayVisible,\n \"aria-controls\": $data.id + '_list',\n \"aria-activedescendant\": $data.focused ? $options.focusedOptionId : undefined,\n \"aria-invalid\": _ctx.invalid || undefined,\n onFocus: _cache[0] || (_cache[0] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[1] || (_cache[1] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n }),\n onKeydown: _cache[2] || (_cache[2] = function () {\n return $options.onKeyDown && $options.onKeyDown.apply($options, arguments);\n }),\n onInput: _cache[3] || (_cache[3] = function () {\n return $options.onEditableInput && $options.onEditableInput.apply($options, arguments);\n })\n }, _ctx.ptm('label')), null, 16, _hoisted_2)) : (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n ref: \"focusInput\",\n id: _ctx.labelId || _ctx.inputId,\n \"class\": [_ctx.cx('label'), _ctx.inputClass, _ctx.labelClass],\n style: [_ctx.inputStyle, _ctx.labelStyle],\n tabindex: !_ctx.disabled ? _ctx.tabindex : -1,\n role: \"combobox\",\n \"aria-label\": _ctx.ariaLabel || ($options.label === 'p-emptylabel' ? undefined : $options.label),\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": $data.overlayVisible,\n \"aria-controls\": $data.id + '_list',\n \"aria-activedescendant\": $data.focused ? $options.focusedOptionId : undefined,\n \"aria-disabled\": _ctx.disabled,\n onFocus: _cache[4] || (_cache[4] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[5] || (_cache[5] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n }),\n onKeydown: _cache[6] || (_cache[6] = function () {\n return $options.onKeyDown && $options.onKeyDown.apply($options, arguments);\n })\n }, _ctx.ptm('label')), [renderSlot(_ctx.$slots, \"value\", {\n value: _ctx.modelValue,\n placeholder: _ctx.placeholder\n }, function () {\n return [createTextVNode(toDisplayString($options.label === 'p-emptylabel' ? ' ' : $options.label || 'empty'), 1)];\n })], 16, _hoisted_3)), $options.isClearIconVisible ? renderSlot(_ctx.$slots, \"clearicon\", {\n key: 2,\n \"class\": normalizeClass(_ctx.cx('clearIcon')),\n clearCallback: $options.onClearClick\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon ? 'i' : 'TimesIcon'), mergeProps({\n ref: \"clearIcon\",\n \"class\": [_ctx.cx('clearIcon'), _ctx.clearIcon],\n onClick: $options.onClearClick\n }, _ctx.ptm('clearIcon'), {\n \"data-pc-section\": \"clearicon\"\n }), null, 16, [\"class\", \"onClick\"]))];\n }) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('dropdown')\n }, _ctx.ptm('dropdown')), [_ctx.loading ? renderSlot(_ctx.$slots, \"loadingicon\", {\n key: 0,\n \"class\": normalizeClass(_ctx.cx('loadingIcon'))\n }, function () {\n return [_ctx.loadingIcon ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n \"class\": [_ctx.cx('loadingIcon'), 'pi-spin', _ctx.loadingIcon],\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('loadingIcon')), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('loadingIcon'),\n spin: \"\",\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('loadingIcon')), null, 16, [\"class\"]))];\n }) : renderSlot(_ctx.$slots, \"dropdownicon\", {\n key: 1,\n \"class\": normalizeClass(_ctx.cx('dropdownIcon'))\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.dropdownIcon ? 'span' : 'ChevronDownIcon'), mergeProps({\n \"class\": [_ctx.cx('dropdownIcon'), _ctx.dropdownIcon],\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('dropdownIcon')), null, 16, [\"class\"]))];\n })], 16), createVNode(_component_Portal, {\n appendTo: _ctx.appendTo\n }, {\n \"default\": withCtx(function () {\n return [createVNode(Transition, mergeProps({\n name: \"p-connected-overlay\",\n onEnter: $options.onOverlayEnter,\n onAfterEnter: $options.onOverlayAfterEnter,\n onLeave: $options.onOverlayLeave,\n onAfterLeave: $options.onOverlayAfterLeave\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [$data.overlayVisible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n ref: $options.overlayRef,\n \"class\": [_ctx.cx('overlay'), _ctx.panelClass, _ctx.overlayClass],\n style: [_ctx.panelStyle, _ctx.overlayStyle],\n onClick: _cache[9] || (_cache[9] = function () {\n return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments);\n }),\n onKeydown: _cache[10] || (_cache[10] = function () {\n return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments);\n })\n }, _ctx.ptm('overlay')), [createElementVNode(\"span\", mergeProps({\n ref: \"firstHiddenFocusableElementOnOverlay\",\n role: \"presentation\",\n \"aria-hidden\": \"true\",\n \"class\": \"p-hidden-accessible p-hidden-focusable\",\n tabindex: 0,\n onFocus: _cache[7] || (_cache[7] = function () {\n return $options.onFirstHiddenFocus && $options.onFirstHiddenFocus.apply($options, arguments);\n })\n }, _ctx.ptm('hiddenFirstFocusableEl'), {\n \"data-p-hidden-accessible\": true,\n \"data-p-hidden-focusable\": true\n }), null, 16), renderSlot(_ctx.$slots, \"header\", {\n value: _ctx.modelValue,\n options: $options.visibleOptions\n }), _ctx.filter ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('header')\n }, _ctx.ptm('header')), [createVNode(_component_IconField, {\n unstyled: _ctx.unstyled,\n pt: _ctx.ptm('pcFilterContainer')\n }, {\n \"default\": withCtx(function () {\n return [createVNode(_component_InputText, {\n ref: \"filterInput\",\n type: \"text\",\n value: $data.filterValue,\n onVnodeMounted: $options.onFilterUpdated,\n onVnodeUpdated: $options.onFilterUpdated,\n \"class\": normalizeClass(_ctx.cx('pcFilter')),\n placeholder: _ctx.filterPlaceholder,\n variant: _ctx.variant,\n unstyled: _ctx.unstyled,\n role: \"searchbox\",\n autocomplete: \"off\",\n \"aria-owns\": $data.id + '_list',\n \"aria-activedescendant\": $options.focusedOptionId,\n onKeydown: $options.onFilterKeyDown,\n onBlur: $options.onFilterBlur,\n onInput: $options.onFilterChange,\n pt: _ctx.ptm('pcFilter')\n }, null, 8, [\"value\", \"onVnodeMounted\", \"onVnodeUpdated\", \"class\", \"placeholder\", \"variant\", \"unstyled\", \"aria-owns\", \"aria-activedescendant\", \"onKeydown\", \"onBlur\", \"onInput\", \"pt\"]), createVNode(_component_InputIcon, mergeProps({\n unstyled: _ctx.unstyled\n }, _ctx.ptm('pcFilterIconContainer')), {\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, \"filtericon\", {}, function () {\n return [_ctx.filterIcon ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n \"class\": _ctx.filterIcon\n }, _ctx.ptm('filterIcon')), null, 16)) : (openBlock(), createBlock(_component_SearchIcon, normalizeProps(mergeProps({\n key: 1\n }, _ctx.ptm('filterIcon'))), null, 16))];\n })];\n }),\n _: 3\n }, 16, [\"unstyled\"])];\n }),\n _: 3\n }, 8, [\"unstyled\", \"pt\"]), createElementVNode(\"span\", mergeProps({\n role: \"status\",\n \"aria-live\": \"polite\",\n \"class\": \"p-hidden-accessible\"\n }, _ctx.ptm('hiddenFilterResult'), {\n \"data-p-hidden-accessible\": true\n }), toDisplayString($options.filterResultMessageText), 17)], 16)) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('listContainer'),\n style: {\n 'max-height': $options.virtualScrollerDisabled ? _ctx.scrollHeight : ''\n }\n }, _ctx.ptm('listContainer')), [createVNode(_component_VirtualScroller, mergeProps({\n ref: $options.virtualScrollerRef\n }, _ctx.virtualScrollerOptions, {\n items: $options.visibleOptions,\n style: {\n height: _ctx.scrollHeight\n },\n tabindex: -1,\n disabled: $options.virtualScrollerDisabled,\n pt: _ctx.ptm('virtualScroller')\n }), createSlots({\n content: withCtx(function (_ref) {\n var styleClass = _ref.styleClass,\n contentRef = _ref.contentRef,\n items = _ref.items,\n getItemOptions = _ref.getItemOptions,\n contentStyle = _ref.contentStyle,\n itemSize = _ref.itemSize;\n return [createElementVNode(\"ul\", mergeProps({\n ref: function ref(el) {\n return $options.listRef(el, contentRef);\n },\n id: $data.id + '_list',\n \"class\": [_ctx.cx('list'), styleClass],\n style: contentStyle,\n role: \"listbox\"\n }, _ctx.ptm('list')), [(openBlock(true), createElementBlock(Fragment, null, renderList(items, function (option, i) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getOptionRenderKey(option, $options.getOptionIndex(i, getItemOptions))\n }, [$options.isOptionGroup(option) ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n id: $data.id + '_' + $options.getOptionIndex(i, getItemOptions),\n style: {\n height: itemSize ? itemSize + 'px' : undefined\n },\n \"class\": _ctx.cx('optionGroup'),\n role: \"option\",\n ref_for: true\n }, _ctx.ptm('optionGroup')), [renderSlot(_ctx.$slots, \"optiongroup\", {\n option: option.optionGroup,\n index: $options.getOptionIndex(i, getItemOptions)\n }, function () {\n return [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('optionGroupLabel'),\n ref_for: true\n }, _ctx.ptm('optionGroupLabel')), toDisplayString($options.getOptionGroupLabel(option.optionGroup)), 17)];\n })], 16, _hoisted_5)) : withDirectives((openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n id: $data.id + '_' + $options.getOptionIndex(i, getItemOptions),\n \"class\": _ctx.cx('option', {\n option: option,\n focusedOption: $options.getOptionIndex(i, getItemOptions)\n }),\n style: {\n height: itemSize ? itemSize + 'px' : undefined\n },\n role: \"option\",\n \"aria-label\": $options.getOptionLabel(option),\n \"aria-selected\": $options.isSelected(option),\n \"aria-disabled\": $options.isOptionDisabled(option),\n \"aria-setsize\": $options.ariaSetSize,\n \"aria-posinset\": $options.getAriaPosInset($options.getOptionIndex(i, getItemOptions)),\n onClick: function onClick($event) {\n return $options.onOptionSelect($event, option);\n },\n onMousemove: function onMousemove($event) {\n return $options.onOptionMouseMove($event, $options.getOptionIndex(i, getItemOptions));\n },\n \"data-p-selected\": $options.isSelected(option),\n \"data-p-focused\": $data.focusedOptionIndex === $options.getOptionIndex(i, getItemOptions),\n \"data-p-disabled\": $options.isOptionDisabled(option),\n ref_for: true\n }, $options.getPTItemOptions(option, getItemOptions, i, 'option')), [_ctx.checkmark ? (openBlock(), createElementBlock(Fragment, {\n key: 0\n }, [$options.isSelected(option) ? (openBlock(), createBlock(_component_CheckIcon, mergeProps({\n key: 0,\n \"class\": _ctx.cx('optionCheckIcon'),\n ref_for: true\n }, _ctx.ptm('optionCheckIcon')), null, 16, [\"class\"])) : (openBlock(), createBlock(_component_BlankIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('optionBlankIcon'),\n ref_for: true\n }, _ctx.ptm('optionBlankIcon')), null, 16, [\"class\"]))], 64)) : createCommentVNode(\"\", true), renderSlot(_ctx.$slots, \"option\", {\n option: option,\n selected: $options.isSelected(option),\n index: $options.getOptionIndex(i, getItemOptions)\n }, function () {\n return [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('optionLabel'),\n ref_for: true\n }, _ctx.ptm('optionLabel')), toDisplayString($options.getOptionLabel(option)), 17)];\n })], 16, _hoisted_6)), [[_directive_ripple]])], 64);\n }), 128)), $data.filterValue && (!items || items && items.length === 0) ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('emptyMessage'),\n role: \"option\"\n }, _ctx.ptm('emptyMessage'), {\n \"data-p-hidden-accessible\": true\n }), [renderSlot(_ctx.$slots, \"emptyfilter\", {}, function () {\n return [createTextVNode(toDisplayString($options.emptyFilterMessageText), 1)];\n })], 16)) : !_ctx.options || _ctx.options && _ctx.options.length === 0 ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('emptyMessage'),\n role: \"option\"\n }, _ctx.ptm('emptyMessage'), {\n \"data-p-hidden-accessible\": true\n }), [renderSlot(_ctx.$slots, \"empty\", {}, function () {\n return [createTextVNode(toDisplayString($options.emptyMessageText), 1)];\n })], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_4)];\n }),\n _: 2\n }, [_ctx.$slots.loader ? {\n name: \"loader\",\n fn: withCtx(function (_ref2) {\n var options = _ref2.options;\n return [renderSlot(_ctx.$slots, \"loader\", {\n options: options\n })];\n }),\n key: \"0\"\n } : undefined]), 1040, [\"items\", \"style\", \"disabled\", \"pt\"])], 16), renderSlot(_ctx.$slots, \"footer\", {\n value: _ctx.modelValue,\n options: $options.visibleOptions\n }), !_ctx.options || _ctx.options && _ctx.options.length === 0 ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n role: \"status\",\n \"aria-live\": \"polite\",\n \"class\": \"p-hidden-accessible\"\n }, _ctx.ptm('hiddenEmptyMessage'), {\n \"data-p-hidden-accessible\": true\n }), toDisplayString($options.emptyMessageText), 17)) : createCommentVNode(\"\", true), createElementVNode(\"span\", mergeProps({\n role: \"status\",\n \"aria-live\": \"polite\",\n \"class\": \"p-hidden-accessible\"\n }, _ctx.ptm('hiddenSelectedMessage'), {\n \"data-p-hidden-accessible\": true\n }), toDisplayString($options.selectedMessageText), 17), createElementVNode(\"span\", mergeProps({\n ref: \"lastHiddenFocusableElementOnOverlay\",\n role: \"presentation\",\n \"aria-hidden\": \"true\",\n \"class\": \"p-hidden-accessible p-hidden-focusable\",\n tabindex: 0,\n onFocus: _cache[8] || (_cache[8] = function () {\n return $options.onLastHiddenFocus && $options.onLastHiddenFocus.apply($options, arguments);\n })\n }, _ctx.ptm('hiddenLastFocusableEl'), {\n \"data-p-hidden-accessible\": true,\n \"data-p-hidden-focusable\": true\n }), null, 16)], 16)) : createCommentVNode(\"\", true)];\n }),\n _: 3\n }, 16, [\"onEnter\", \"onAfterEnter\", \"onLeave\", \"onAfterLeave\"])];\n }),\n _: 3\n }, 8, [\"appendTo\"])], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-toggleswitch {\\n display: inline-block;\\n width: \".concat(dt('toggleswitch.width'), \";\\n height: \").concat(dt('toggleswitch.height'), \";\\n}\\n\\n.p-toggleswitch-input {\\n cursor: pointer;\\n appearance: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n padding: 0;\\n margin: 0;\\n opacity: 0;\\n z-index: 1;\\n outline: 0 none;\\n border-radius: \").concat(dt('toggleswitch.border.radius'), \";\\n}\\n\\n.p-toggleswitch-slider {\\n display: inline-block;\\n cursor: pointer;\\n width: 100%;\\n height: 100%;\\n border-width: \").concat(dt('toggleswitch.border.width'), \";\\n border-style: solid;\\n border-color: \").concat(dt('toggleswitch.border.color'), \";\\n background: \").concat(dt('toggleswitch.background'), \";\\n transition: background \").concat(dt('toggleswitch.transition.duration'), \", color \").concat(dt('toggleswitch.transition.duration'), \", border-color \").concat(dt('toggleswitch.transition.duration'), \", outline-color \").concat(dt('toggleswitch.transition.duration'), \", box-shadow \").concat(dt('toggleswitch.transition.duration'), \";\\n border-radius: \").concat(dt('toggleswitch.border.radius'), \";\\n outline-color: transparent;\\n box-shadow: \").concat(dt('toggleswitch.shadow'), \";\\n}\\n\\n.p-toggleswitch-slider:before {\\n position: absolute;\\n content: \\\"\\\";\\n top: 50%;\\n background: \").concat(dt('toggleswitch.handle.background'), \";\\n width: \").concat(dt('toggleswitch.handle.size'), \";\\n height: \").concat(dt('toggleswitch.handle.size'), \";\\n left: \").concat(dt('toggleswitch.gap'), \";\\n margin-top: calc(-1 * calc(\").concat(dt('toggleswitch.handle.size'), \" / 2));\\n border-radius: \").concat(dt('toggleswitch.handle.border.radius'), \";\\n transition: background \").concat(dt('toggleswitch.transition.duration'), \", left \").concat(dt('toggleswitch.slide.duration'), \";\\n}\\n\\n.p-toggleswitch.p-toggleswitch-checked .p-toggleswitch-slider {\\n background: \").concat(dt('toggleswitch.checked.background'), \";\\n border-color: \").concat(dt('toggleswitch.checked.border.color'), \";\\n}\\n\\n.p-toggleswitch.p-toggleswitch-checked .p-toggleswitch-slider:before {\\n background: \").concat(dt('toggleswitch.handle.checked.background'), \";\\n left: calc(\").concat(dt('toggleswitch.width'), \" - calc(\").concat(dt('toggleswitch.handle.size'), \" + \").concat(dt('toggleswitch.gap'), \"));\\n}\\n\\n.p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover) .p-toggleswitch-slider {\\n background: \").concat(dt('toggleswitch.hover.background'), \";\\n border-color: \").concat(dt('toggleswitch.hover.border.color'), \";\\n}\\n\\n.p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover) .p-toggleswitch-slider:before {\\n background: \").concat(dt('toggleswitch.handle.hover.background'), \";\\n}\\n\\n.p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover).p-toggleswitch-checked .p-toggleswitch-slider {\\n background: \").concat(dt('toggleswitch.checked.hover.background'), \";\\n border-color: \").concat(dt('toggleswitch.checked.hover.border.color'), \";\\n}\\n\\n.p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover).p-toggleswitch-checked .p-toggleswitch-slider:before {\\n background: \").concat(dt('toggleswitch.handle.checked.hover.background'), \";\\n}\\n\\n.p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:focus-visible) .p-toggleswitch-slider {\\n box-shadow: \").concat(dt('toggleswitch.focus.ring.shadow'), \";\\n outline: \").concat(dt('toggleswitch.focus.ring.width'), \" \").concat(dt('toggleswitch.focus.ring.style'), \" \").concat(dt('toggleswitch.focus.ring.color'), \";\\n outline-offset: \").concat(dt('toggleswitch.focus.ring.offset'), \";\\n}\\n\\n.p-toggleswitch.p-invalid > .p-toggleswitch-slider {\\n border-color: \").concat(dt('toggleswitch.invalid.border.color'), \";\\n}\\n\\n.p-toggleswitch.p-disabled {\\n opacity: 1;\\n}\\n\\n.p-toggleswitch.p-disabled .p-toggleswitch-slider {\\n background: \").concat(dt('toggleswitch.disabled.background'), \";\\n}\\n\\n.p-toggleswitch.p-disabled .p-toggleswitch-slider:before {\\n background: \").concat(dt('toggleswitch.handle.disabled.background'), \";\\n}\\n\");\n};\nvar inlineStyles = {\n root: {\n position: 'relative'\n }\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props;\n return ['p-toggleswitch p-component', {\n 'p-toggleswitch-checked': instance.checked,\n 'p-disabled': props.disabled,\n 'p-invalid': props.invalid\n }];\n },\n input: 'p-toggleswitch-input',\n slider: 'p-toggleswitch-slider'\n};\nvar ToggleSwitchStyle = BaseStyle.extend({\n name: 'toggleswitch',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { ToggleSwitchStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport ToggleSwitchStyle from 'primevue/toggleswitch/style';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseToggleSwitch',\n \"extends\": BaseComponent,\n props: {\n modelValue: {\n type: null,\n \"default\": false\n },\n trueValue: {\n type: null,\n \"default\": true\n },\n falseValue: {\n type: null,\n \"default\": false\n },\n invalid: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n readonly: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": null\n },\n inputId: {\n type: String,\n \"default\": null\n },\n inputClass: {\n type: [String, Object],\n \"default\": null\n },\n inputStyle: {\n type: Object,\n \"default\": null\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: ToggleSwitchStyle,\n provide: function provide() {\n return {\n $pcToggleSwitch: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'ToggleSwitch',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'change', 'focus', 'blur'],\n methods: {\n getPTOptions: function getPTOptions(key) {\n var _ptm = key === 'root' ? this.ptmi : this.ptm;\n return _ptm(key, {\n context: {\n checked: this.checked,\n disabled: this.disabled\n }\n });\n },\n onChange: function onChange(event) {\n if (!this.disabled && !this.readonly) {\n var newValue = this.checked ? this.falseValue : this.trueValue;\n this.$emit('update:modelValue', newValue);\n this.$emit('change', event);\n }\n },\n onFocus: function onFocus(event) {\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.$emit('blur', event);\n }\n },\n computed: {\n checked: function checked() {\n return this.modelValue === this.trueValue;\n }\n }\n};\n\nvar _hoisted_1 = [\"data-p-checked\", \"data-p-disabled\"];\nvar _hoisted_2 = [\"id\", \"checked\", \"tabindex\", \"disabled\", \"readonly\", \"aria-checked\", \"aria-labelledby\", \"aria-label\", \"aria-invalid\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n style: _ctx.sx('root')\n }, $options.getPTOptions('root'), {\n \"data-p-checked\": $options.checked,\n \"data-p-disabled\": _ctx.disabled\n }), [createElementVNode(\"input\", mergeProps({\n id: _ctx.inputId,\n type: \"checkbox\",\n role: \"switch\",\n \"class\": [_ctx.cx('input'), _ctx.inputClass],\n style: _ctx.inputStyle,\n checked: $options.checked,\n tabindex: _ctx.tabindex,\n disabled: _ctx.disabled,\n readonly: _ctx.readonly,\n \"aria-checked\": $options.checked,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-invalid\": _ctx.invalid || undefined,\n onFocus: _cache[0] || (_cache[0] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[1] || (_cache[1] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n }),\n onChange: _cache[2] || (_cache[2] = function () {\n return $options.onChange && $options.onChange.apply($options, arguments);\n })\n }, $options.getPTOptions('input')), null, 16, _hoisted_2), createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('slider')\n }, $options.getPTOptions('slider')), null, 16)], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-slider {\\n position: relative;\\n background: \".concat(dt('slider.track.background'), \";\\n border-radius: \").concat(dt('slider.border.radius'), \";\\n}\\n\\n.p-slider-handle {\\n cursor: grab;\\n touch-action: none;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n height: \").concat(dt('slider.handle.height'), \";\\n width: \").concat(dt('slider.handle.width'), \";\\n background: \").concat(dt('slider.handle.background'), \";\\n border-radius: \").concat(dt('slider.handle.border.radius'), \";\\n transition: background \").concat(dt('slider.transition.duration'), \", color \").concat(dt('slider.transition.duration'), \", border-color \").concat(dt('slider.transition.duration'), \", box-shadow \").concat(dt('slider.transition.duration'), \", outline-color \").concat(dt('slider.transition.duration'), \";\\n outline-color: transparent;\\n}\\n\\n.p-slider-handle::before {\\n content: \\\"\\\";\\n width: \").concat(dt('slider.handle.content.width'), \";\\n height: \").concat(dt('slider.handle.content.height'), \";\\n display: block;\\n background: \").concat(dt('slider.handle.content.background'), \";\\n border-radius: \").concat(dt('slider.handle.content.border.radius'), \";\\n box-shadow: \").concat(dt('slider.handle.content.shadow'), \";\\n transition: background \").concat(dt('slider.transition.duration'), \";\\n}\\n\\n.p-slider:not(.p-disabled) .p-slider-handle:hover {\\n background: \").concat(dt('slider.handle.hover.background'), \";\\n}\\n\\n.p-slider:not(.p-disabled) .p-slider-handle:hover::before {\\n background: \").concat(dt('slider.handle.content.hover.background'), \";\\n}\\n\\n.p-slider-handle:focus-visible {\\n border-color: \").concat(dt('slider.handle.focus.border.color'), \";\\n box-shadow: \").concat(dt('slider.handle.focus.ring.shadow'), \";\\n outline: \").concat(dt('slider.handle.focus.ring.width'), \" \").concat(dt('slider.handle.focus.ring.style'), \" \").concat(dt('slider.handle.focus.ring.color'), \";\\n outline-offset: \").concat(dt('slider.handle.focus.ring.offset'), \";\\n}\\n\\n.p-slider-range {\\n display: block;\\n background: \").concat(dt('slider.range.background'), \";\\n border-radius: \").concat(dt('slider.border.radius'), \";\\n}\\n\\n.p-slider.p-slider-horizontal {\\n height: \").concat(dt('slider.track.size'), \";\\n}\\n\\n.p-slider-horizontal .p-slider-range {\\n top: 0;\\n left: 0;\\n height: 100%;\\n}\\n\\n.p-slider-horizontal .p-slider-handle {\\n top: 50%;\\n margin-top: calc(-1 * calc(\").concat(dt('slider.handle.height'), \" / 2));\\n margin-left: calc(-1 * calc(\").concat(dt('slider.handle.width'), \" / 2));\\n}\\n\\n.p-slider-vertical {\\n min-height: 100px;\\n width: \").concat(dt('slider.track.size'), \";\\n}\\n\\n.p-slider-vertical .p-slider-handle {\\n left: 50%;\\n margin-left: calc(-1 * calc(\").concat(dt('slider.handle.width'), \" / 2));\\n margin-bottom: calc(-1 * calc(\").concat(dt('slider.handle.height'), \" / 2));\\n}\\n\\n.p-slider-vertical .p-slider-range {\\n bottom: 0;\\n left: 0;\\n width: 100%;\\n}\\n\");\n};\nvar inlineStyles = {\n handle: {\n position: 'absolute'\n },\n range: {\n position: 'absolute'\n }\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-slider p-component', {\n 'p-disabled': props.disabled,\n 'p-slider-horizontal': props.orientation === 'horizontal',\n 'p-slider-vertical': props.orientation === 'vertical'\n }];\n },\n range: 'p-slider-range',\n handle: 'p-slider-handle'\n};\nvar SliderStyle = BaseStyle.extend({\n name: 'slider',\n theme: theme,\n classes: classes,\n inlineStyles: inlineStyles\n});\n\nexport { SliderStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { getWindowScrollLeft, getWindowScrollTop, getAttribute } from '@primeuix/utils/dom';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport SliderStyle from 'primevue/slider/style';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseSlider',\n \"extends\": BaseComponent,\n props: {\n modelValue: [Number, Array],\n min: {\n type: Number,\n \"default\": 0\n },\n max: {\n type: Number,\n \"default\": 100\n },\n orientation: {\n type: String,\n \"default\": 'horizontal'\n },\n step: {\n type: Number,\n \"default\": null\n },\n range: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: SliderStyle,\n provide: function provide() {\n return {\n $pcSlider: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script = {\n name: 'Slider',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'change', 'slideend'],\n dragging: false,\n handleIndex: null,\n initX: null,\n initY: null,\n barWidth: null,\n barHeight: null,\n dragListener: null,\n dragEndListener: null,\n beforeUnmount: function beforeUnmount() {\n this.unbindDragListeners();\n },\n methods: {\n updateDomData: function updateDomData() {\n var rect = this.$el.getBoundingClientRect();\n this.initX = rect.left + getWindowScrollLeft();\n this.initY = rect.top + getWindowScrollTop();\n this.barWidth = this.$el.offsetWidth;\n this.barHeight = this.$el.offsetHeight;\n },\n setValue: function setValue(event) {\n var handleValue;\n var pageX = event.touches ? event.touches[0].pageX : event.pageX;\n var pageY = event.touches ? event.touches[0].pageY : event.pageY;\n if (this.orientation === 'horizontal') handleValue = (pageX - this.initX) * 100 / this.barWidth;else handleValue = (this.initY + this.barHeight - pageY) * 100 / this.barHeight;\n var newValue = (this.max - this.min) * (handleValue / 100) + this.min;\n if (this.step) {\n var oldValue = this.range ? this.value[this.handleIndex] : this.value;\n var diff = newValue - oldValue;\n if (diff < 0) newValue = oldValue + Math.ceil(newValue / this.step - oldValue / this.step) * this.step;else if (diff > 0) newValue = oldValue + Math.floor(newValue / this.step - oldValue / this.step) * this.step;\n } else {\n newValue = Math.floor(newValue);\n }\n this.updateModel(event, newValue);\n },\n updateModel: function updateModel(event, value) {\n var newValue = parseFloat(value.toFixed(10));\n var modelValue;\n if (this.range) {\n modelValue = this.value ? _toConsumableArray(this.value) : [];\n if (this.handleIndex == 0) {\n if (newValue < this.min) newValue = this.min;else if (newValue >= this.max) newValue = this.max;\n modelValue[0] = newValue;\n } else {\n if (newValue > this.max) newValue = this.max;else if (newValue <= this.min) newValue = this.min;\n modelValue[1] = newValue;\n }\n } else {\n if (newValue < this.min) newValue = this.min;else if (newValue > this.max) newValue = this.max;\n modelValue = newValue;\n }\n this.$emit('update:modelValue', modelValue);\n this.$emit('change', modelValue);\n },\n onDragStart: function onDragStart(event, index) {\n if (this.disabled) {\n return;\n }\n this.$el.setAttribute('data-p-sliding', true);\n this.dragging = true;\n this.updateDomData();\n if (this.range && this.value[0] === this.max) {\n this.handleIndex = 0;\n } else {\n this.handleIndex = index;\n }\n event.currentTarget.focus();\n event.preventDefault();\n },\n onDrag: function onDrag(event) {\n if (this.dragging) {\n this.setValue(event);\n event.preventDefault();\n }\n },\n onDragEnd: function onDragEnd(event) {\n if (this.dragging) {\n this.dragging = false;\n this.$el.setAttribute('data-p-sliding', false);\n this.$emit('slideend', {\n originalEvent: event,\n value: this.value\n });\n }\n },\n onBarClick: function onBarClick(event) {\n if (this.disabled) {\n return;\n }\n if (getAttribute(event.target, 'data-pc-section') !== 'handle') {\n this.updateDomData();\n this.setValue(event);\n }\n },\n onMouseDown: function onMouseDown(event, index) {\n this.bindDragListeners();\n this.onDragStart(event, index);\n },\n onKeyDown: function onKeyDown(event, index) {\n this.handleIndex = index;\n switch (event.code) {\n case 'ArrowDown':\n case 'ArrowLeft':\n this.decrementValue(event, index);\n event.preventDefault();\n break;\n case 'ArrowUp':\n case 'ArrowRight':\n this.incrementValue(event, index);\n event.preventDefault();\n break;\n case 'PageDown':\n this.decrementValue(event, index, true);\n event.preventDefault();\n break;\n case 'PageUp':\n this.incrementValue(event, index, true);\n event.preventDefault();\n break;\n case 'Home':\n this.updateModel(event, this.min);\n event.preventDefault();\n break;\n case 'End':\n this.updateModel(event, this.max);\n event.preventDefault();\n break;\n }\n },\n decrementValue: function decrementValue(event, index) {\n var pageKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var newValue;\n if (this.range) {\n if (this.step) newValue = this.value[index] - this.step;else newValue = this.value[index] - 1;\n } else {\n if (this.step) newValue = this.value - this.step;else if (!this.step && pageKey) newValue = this.value - 10;else newValue = this.value - 1;\n }\n this.updateModel(event, newValue);\n event.preventDefault();\n },\n incrementValue: function incrementValue(event, index) {\n var pageKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var newValue;\n if (this.range) {\n if (this.step) newValue = this.value[index] + this.step;else newValue = this.value[index] + 1;\n } else {\n if (this.step) newValue = this.value + this.step;else if (!this.step && pageKey) newValue = this.value + 10;else newValue = this.value + 1;\n }\n this.updateModel(event, newValue);\n event.preventDefault();\n },\n bindDragListeners: function bindDragListeners() {\n if (!this.dragListener) {\n this.dragListener = this.onDrag.bind(this);\n document.addEventListener('mousemove', this.dragListener);\n }\n if (!this.dragEndListener) {\n this.dragEndListener = this.onDragEnd.bind(this);\n document.addEventListener('mouseup', this.dragEndListener);\n }\n },\n unbindDragListeners: function unbindDragListeners() {\n if (this.dragListener) {\n document.removeEventListener('mousemove', this.dragListener);\n this.dragListener = null;\n }\n if (this.dragEndListener) {\n document.removeEventListener('mouseup', this.dragEndListener);\n this.dragEndListener = null;\n }\n }\n },\n computed: {\n value: function value() {\n var _this$modelValue3;\n if (this.range) {\n var _this$modelValue$, _this$modelValue, _this$modelValue$2, _this$modelValue2;\n return [(_this$modelValue$ = (_this$modelValue = this.modelValue) === null || _this$modelValue === void 0 ? void 0 : _this$modelValue[0]) !== null && _this$modelValue$ !== void 0 ? _this$modelValue$ : this.min, (_this$modelValue$2 = (_this$modelValue2 = this.modelValue) === null || _this$modelValue2 === void 0 ? void 0 : _this$modelValue2[1]) !== null && _this$modelValue$2 !== void 0 ? _this$modelValue$2 : this.max];\n }\n return (_this$modelValue3 = this.modelValue) !== null && _this$modelValue3 !== void 0 ? _this$modelValue3 : this.min;\n },\n horizontal: function horizontal() {\n return this.orientation === 'horizontal';\n },\n vertical: function vertical() {\n return this.orientation === 'vertical';\n },\n rangeStyle: function rangeStyle() {\n if (this.range) {\n var rangeSliderWidth = this.rangeEndPosition > this.rangeStartPosition ? this.rangeEndPosition - this.rangeStartPosition : this.rangeStartPosition - this.rangeEndPosition;\n var rangeSliderPosition = this.rangeEndPosition > this.rangeStartPosition ? this.rangeStartPosition : this.rangeEndPosition;\n if (this.horizontal) return {\n left: rangeSliderPosition + '%',\n width: rangeSliderWidth + '%'\n };else return {\n bottom: rangeSliderPosition + '%',\n height: rangeSliderWidth + '%'\n };\n } else {\n if (this.horizontal) return {\n width: this.handlePosition + '%'\n };else return {\n height: this.handlePosition + '%'\n };\n }\n },\n handleStyle: function handleStyle() {\n if (this.horizontal) return {\n left: this.handlePosition + '%'\n };else return {\n bottom: this.handlePosition + '%'\n };\n },\n handlePosition: function handlePosition() {\n if (this.value < this.min) return 0;else if (this.value > this.max) return 100;else return (this.value - this.min) * 100 / (this.max - this.min);\n },\n rangeStartPosition: function rangeStartPosition() {\n if (this.value && this.value[0]) return (this.value[0] < this.min ? 0 : this.value[0] - this.min) * 100 / (this.max - this.min);else return 0;\n },\n rangeEndPosition: function rangeEndPosition() {\n if (this.value && this.value.length === 2) return (this.value[1] > this.max ? 100 : this.value[1] - this.min) * 100 / (this.max - this.min);else return 100;\n },\n rangeStartHandleStyle: function rangeStartHandleStyle() {\n if (this.horizontal) return {\n left: this.rangeStartPosition + '%'\n };else return {\n bottom: this.rangeStartPosition + '%'\n };\n },\n rangeEndHandleStyle: function rangeEndHandleStyle() {\n if (this.horizontal) return {\n left: this.rangeEndPosition + '%'\n };else return {\n bottom: this.rangeEndPosition + '%'\n };\n }\n }\n};\n\nvar _hoisted_1 = [\"tabindex\", \"aria-valuemin\", \"aria-valuenow\", \"aria-valuemax\", \"aria-labelledby\", \"aria-label\", \"aria-orientation\"];\nvar _hoisted_2 = [\"tabindex\", \"aria-valuemin\", \"aria-valuenow\", \"aria-valuemax\", \"aria-labelledby\", \"aria-label\", \"aria-orientation\"];\nvar _hoisted_3 = [\"tabindex\", \"aria-valuemin\", \"aria-valuenow\", \"aria-valuemax\", \"aria-labelledby\", \"aria-label\", \"aria-orientation\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n onClick: _cache[15] || (_cache[15] = function () {\n return $options.onBarClick && $options.onBarClick.apply($options, arguments);\n })\n }, _ctx.ptmi('root'), {\n \"data-p-sliding\": false\n }), [createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('range'),\n style: [_ctx.sx('range'), $options.rangeStyle]\n }, _ctx.ptm('range')), null, 16), !_ctx.range ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('handle'),\n style: [_ctx.sx('handle'), $options.handleStyle],\n onTouchstartPassive: _cache[0] || (_cache[0] = function ($event) {\n return $options.onDragStart($event);\n }),\n onTouchmovePassive: _cache[1] || (_cache[1] = function ($event) {\n return $options.onDrag($event);\n }),\n onTouchend: _cache[2] || (_cache[2] = function ($event) {\n return $options.onDragEnd($event);\n }),\n onMousedown: _cache[3] || (_cache[3] = function ($event) {\n return $options.onMouseDown($event);\n }),\n onKeydown: _cache[4] || (_cache[4] = function ($event) {\n return $options.onKeyDown($event);\n }),\n tabindex: _ctx.tabindex,\n role: \"slider\",\n \"aria-valuemin\": _ctx.min,\n \"aria-valuenow\": _ctx.modelValue,\n \"aria-valuemax\": _ctx.max,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-orientation\": _ctx.orientation\n }, _ctx.ptm('handle')), null, 16, _hoisted_1)) : createCommentVNode(\"\", true), _ctx.range ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('handle'),\n style: [_ctx.sx('handle'), $options.rangeStartHandleStyle],\n onTouchstartPassive: _cache[5] || (_cache[5] = function ($event) {\n return $options.onDragStart($event, 0);\n }),\n onTouchmovePassive: _cache[6] || (_cache[6] = function ($event) {\n return $options.onDrag($event);\n }),\n onTouchend: _cache[7] || (_cache[7] = function ($event) {\n return $options.onDragEnd($event);\n }),\n onMousedown: _cache[8] || (_cache[8] = function ($event) {\n return $options.onMouseDown($event, 0);\n }),\n onKeydown: _cache[9] || (_cache[9] = function ($event) {\n return $options.onKeyDown($event, 0);\n }),\n tabindex: _ctx.tabindex,\n role: \"slider\",\n \"aria-valuemin\": _ctx.min,\n \"aria-valuenow\": _ctx.modelValue ? _ctx.modelValue[0] : null,\n \"aria-valuemax\": _ctx.max,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-orientation\": _ctx.orientation\n }, _ctx.ptm('startHandler')), null, 16, _hoisted_2)) : createCommentVNode(\"\", true), _ctx.range ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 2,\n \"class\": _ctx.cx('handle'),\n style: [_ctx.sx('handle'), $options.rangeEndHandleStyle],\n onTouchstartPassive: _cache[10] || (_cache[10] = function ($event) {\n return $options.onDragStart($event, 1);\n }),\n onTouchmovePassive: _cache[11] || (_cache[11] = function ($event) {\n return $options.onDrag($event);\n }),\n onTouchend: _cache[12] || (_cache[12] = function ($event) {\n return $options.onDragEnd($event);\n }),\n onMousedown: _cache[13] || (_cache[13] = function ($event) {\n return $options.onMouseDown($event, 1);\n }),\n onKeydown: _cache[14] || (_cache[14] = function ($event) {\n return $options.onKeyDown($event, 1);\n }),\n tabindex: _ctx.tabindex,\n role: \"slider\",\n \"aria-valuemin\": _ctx.min,\n \"aria-valuenow\": _ctx.modelValue ? _ctx.modelValue[1] : null,\n \"aria-valuemax\": _ctx.max,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-orientation\": _ctx.orientation\n }, _ctx.ptm('endHandler')), null, 16, _hoisted_3)) : createCommentVNode(\"\", true)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n\n\n\n","\n\n\n","\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar classes = {\n root: function root(_ref) {\n var instance = _ref.instance;\n return ['p-tabpanel', {\n 'p-tabpanel-active': instance.active\n }];\n }\n};\nvar TabPanelStyle = BaseStyle.extend({\n name: 'tabpanel',\n classes: classes\n});\n\nexport { TabPanelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { equals } from '@primeuix/utils/object';\nimport { mergeProps, renderSlot, openBlock, createElementBlock, Fragment, withDirectives, createBlock, resolveDynamicComponent, withCtx, vShow, createCommentVNode, normalizeClass } from 'vue';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TabPanelStyle from 'primevue/tabpanel/style';\n\nvar script$1 = {\n name: 'BaseTabPanel',\n \"extends\": BaseComponent,\n props: {\n // in Tabs\n value: {\n type: [String, Number],\n \"default\": undefined\n },\n as: {\n type: [String, Object],\n \"default\": 'DIV'\n },\n asChild: {\n type: Boolean,\n \"default\": false\n },\n // in TabView\n header: null,\n headerStyle: null,\n headerClass: null,\n headerProps: null,\n headerActionProps: null,\n contentStyle: null,\n contentClass: null,\n contentProps: null,\n disabled: Boolean\n },\n style: TabPanelStyle,\n provide: function provide() {\n return {\n $pcTabPanel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'TabPanel',\n \"extends\": script$1,\n inheritAttrs: false,\n inject: ['$pcTabs'],\n computed: {\n active: function active() {\n var _this$$pcTabs;\n return equals((_this$$pcTabs = this.$pcTabs) === null || _this$$pcTabs === void 0 ? void 0 : _this$$pcTabs.d_value, this.value);\n },\n id: function id() {\n var _this$$pcTabs2;\n return \"\".concat((_this$$pcTabs2 = this.$pcTabs) === null || _this$$pcTabs2 === void 0 ? void 0 : _this$$pcTabs2.id, \"_tabpanel_\").concat(this.value);\n },\n ariaLabelledby: function ariaLabelledby() {\n var _this$$pcTabs3;\n return \"\".concat((_this$$pcTabs3 = this.$pcTabs) === null || _this$$pcTabs3 === void 0 ? void 0 : _this$$pcTabs3.id, \"_tab_\").concat(this.value);\n },\n attrs: function attrs() {\n return mergeProps(this.a11yAttrs, this.ptmi('root', this.ptParams));\n },\n a11yAttrs: function a11yAttrs() {\n var _this$$pcTabs4;\n return {\n id: this.id,\n tabindex: (_this$$pcTabs4 = this.$pcTabs) === null || _this$$pcTabs4 === void 0 ? void 0 : _this$$pcTabs4.tabindex,\n role: 'tabpanel',\n 'aria-labelledby': this.ariaLabelledby,\n 'data-pc-name': 'tabpanel',\n 'data-p-active': this.active\n };\n },\n ptParams: function ptParams() {\n return {\n context: {\n active: this.active\n }\n };\n }\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _$options$$pcTabs, _$options$$pcTabs2;\n return !$options.$pcTabs ? renderSlot(_ctx.$slots, \"default\", {\n key: 0\n }) : (openBlock(), createElementBlock(Fragment, {\n key: 1\n }, [!_ctx.asChild ? (openBlock(), createElementBlock(Fragment, {\n key: 0\n }, [((_$options$$pcTabs = $options.$pcTabs) !== null && _$options$$pcTabs !== void 0 && _$options$$pcTabs.lazy ? $options.active : true) ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({\n key: 0,\n \"class\": _ctx.cx('root')\n }, $options.attrs), {\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, \"default\")];\n }),\n _: 3\n }, 16, [\"class\"])), [[vShow, (_$options$$pcTabs2 = $options.$pcTabs) !== null && _$options$$pcTabs2 !== void 0 && _$options$$pcTabs2.lazy ? true : $options.active]]) : createCommentVNode(\"\", true)], 64)) : renderSlot(_ctx.$slots, \"default\", {\n key: 1,\n \"class\": normalizeClass(_ctx.cx('root')),\n active: $options.active,\n a11yAttrs: $options.a11yAttrs\n })], 64));\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport { api } from '@/scripts/api'\nimport type { SystemStats } from '@/types/apiTypes'\n\nexport const useSystemStatsStore = defineStore('systemStats', () => {\n const systemStats = ref(null)\n const isLoading = ref(false)\n const error = ref(null)\n\n async function fetchSystemStats() {\n isLoading.value = true\n error.value = null\n\n try {\n systemStats.value = await api.getSystemStats()\n } catch (err) {\n error.value =\n err instanceof Error\n ? err.message\n : 'An error occurred while fetching system stats'\n console.error('Error fetching system stats:', err)\n } finally {\n isLoading.value = false\n }\n }\n\n return {\n systemStats,\n isLoading,\n error,\n fetchSystemStats\n }\n})\n","export const CORE_MENU_COMMANDS = [\n [['Workflow'], ['Comfy.NewBlankWorkflow']],\n [['Workflow'], ['Comfy.OpenWorkflow', 'Comfy.BrowseTemplates']],\n [\n ['Workflow'],\n [\n 'Comfy.SaveWorkflow',\n 'Comfy.SaveWorkflowAs',\n 'Comfy.ExportWorkflow',\n 'Comfy.ExportWorkflowAPI'\n ]\n ],\n [['Edit'], ['Comfy.Undo', 'Comfy.Redo']],\n [['Edit'], ['Comfy.RefreshNodeDefinitions']],\n [['Edit'], ['Comfy.ClearWorkflow']],\n [['Edit'], ['Comfy.OpenClipspace']],\n [\n ['Help'],\n [\n 'Comfy.Help.OpenComfyUIIssues',\n 'Comfy.Help.OpenComfyUIDocs',\n 'Comfy.Help.OpenComfyOrgDiscord'\n ]\n ]\n]\n","import { defineStore } from 'pinia'\nimport type { MenuItem } from 'primevue/menuitem'\nimport { ref } from 'vue'\nimport { useCommandStore } from './commandStore'\nimport { ComfyExtension } from '@/types/comfy'\nimport { CORE_MENU_COMMANDS } from '@/constants/coreMenuCommands'\n\nexport const useMenuItemStore = defineStore('menuItem', () => {\n const commandStore = useCommandStore()\n const menuItems = ref([])\n\n const registerMenuGroup = (path: string[], items: MenuItem[]) => {\n let currentLevel = menuItems.value\n\n // Traverse the path, creating nodes if necessary\n for (let i = 0; i < path.length; i++) {\n const segment = path[i]\n let found = currentLevel.find((item) => item.label === segment)\n\n if (!found) {\n // Create a new node if it doesn't exist\n found = {\n label: segment,\n items: []\n }\n currentLevel.push(found)\n }\n\n // Ensure the found item has an 'items' array\n if (!found.items) {\n found.items = []\n }\n\n // Move to the next level\n currentLevel = found.items\n }\n\n if (currentLevel.length > 0) {\n currentLevel.push({\n separator: true\n })\n }\n // Add the new items to the last level\n currentLevel.push(...items)\n }\n\n const registerCommands = (path: string[], commandIds: string[]) => {\n const items = commandIds\n .map((commandId) => commandStore.getCommand(commandId))\n .map(\n (command) =>\n ({\n command: () => commandStore.execute(command.id),\n label: command.menubarLabel,\n icon: command.icon,\n tooltip: command.tooltip,\n comfyCommand: command\n }) as MenuItem\n )\n registerMenuGroup(path, items)\n }\n\n const loadExtensionMenuCommands = (extension: ComfyExtension) => {\n if (!extension.menuCommands) {\n return\n }\n\n const extensionCommandIds = new Set(\n extension.commands?.map((command) => command.id) ?? []\n )\n extension.menuCommands.forEach((menuCommand) => {\n const commands = menuCommand.commands.filter((command) =>\n extensionCommandIds.has(command)\n )\n if (commands.length) {\n registerCommands(menuCommand.path, commands)\n }\n })\n }\n\n const registerCoreMenuCommands = () => {\n for (const [path, commands] of CORE_MENU_COMMANDS) {\n registerCommands(path, commands)\n }\n }\n\n return {\n menuItems,\n registerMenuGroup,\n registerCommands,\n loadExtensionMenuCommands,\n registerCoreMenuCommands\n }\n})\n","import { ref, computed } from 'vue'\nimport { defineStore } from 'pinia'\nimport { api } from '@/scripts/api'\nimport { ComfyWorkflow } from './workflowStore'\nimport type { ComfyNode, ComfyWorkflowJSON } from '@/types/comfyWorkflow'\nimport type {\n ExecutedWsMessage,\n ExecutingWsMessage,\n ExecutionCachedWsMessage,\n ExecutionStartWsMessage,\n ProgressWsMessage,\n StatusWsMessage\n} from '@/types/apiTypes'\n\nexport interface QueuedPrompt {\n nodes: Record\n workflow?: ComfyWorkflow\n}\n\nexport const useExecutionStore = defineStore('execution', () => {\n const clientId = ref(null)\n const activePromptId = ref(null)\n const queuedPrompts = ref>({})\n const executingNodeId = ref(null)\n const executingNode = computed(() => {\n if (!executingNodeId.value) return null\n\n const workflow: ComfyWorkflow | undefined = activePrompt.value?.workflow\n if (!workflow) return null\n\n const canvasState: ComfyWorkflowJSON | null =\n workflow.changeTracker?.activeState ?? null\n if (!canvasState) return null\n\n return (\n canvasState.nodes.find(\n (n: ComfyNode) => String(n.id) === executingNodeId.value\n ) ?? null\n )\n })\n\n // This is the progress of the currently executing node, if any\n const _executingNodeProgress = ref(null)\n const executingNodeProgress = computed(() =>\n _executingNodeProgress.value\n ? Math.round(\n (_executingNodeProgress.value.value /\n _executingNodeProgress.value.max) *\n 100\n )\n : null\n )\n\n const activePrompt = computed(\n () => queuedPrompts.value[activePromptId.value ?? '']\n )\n\n const totalNodesToExecute = computed(() => {\n if (!activePrompt.value) return 0\n return Object.values(activePrompt.value.nodes).length\n })\n\n const isIdle = computed(() => !activePromptId.value)\n\n const nodesExecuted = computed(() => {\n if (!activePrompt.value) return 0\n return Object.values(activePrompt.value.nodes).filter(Boolean).length\n })\n\n const executionProgress = computed(() => {\n if (!activePrompt.value) return 0\n const total = totalNodesToExecute.value\n const done = nodesExecuted.value\n return Math.round((done / total) * 100)\n })\n\n function bindExecutionEvents() {\n api.addEventListener(\n 'execution_start',\n handleExecutionStart as EventListener\n )\n api.addEventListener(\n 'execution_cached',\n handleExecutionCached as EventListener\n )\n api.addEventListener('executed', handleExecuted as EventListener)\n api.addEventListener('executing', handleExecuting as EventListener)\n api.addEventListener('progress', handleProgress as EventListener)\n api.addEventListener('status', handleStatus as EventListener)\n }\n\n function unbindExecutionEvents() {\n api.removeEventListener(\n 'execution_start',\n handleExecutionStart as EventListener\n )\n api.removeEventListener(\n 'execution_cached',\n handleExecutionCached as EventListener\n )\n api.removeEventListener('executed', handleExecuted as EventListener)\n api.removeEventListener('executing', handleExecuting as EventListener)\n api.removeEventListener('progress', handleProgress as EventListener)\n api.removeEventListener('status', handleStatus as EventListener)\n }\n\n function handleExecutionStart(e: CustomEvent) {\n activePromptId.value = e.detail.prompt_id\n queuedPrompts.value[activePromptId.value] ??= { nodes: {} }\n }\n\n function handleExecutionCached(e: CustomEvent) {\n if (!activePrompt.value) return\n for (const n of e.detail.nodes) {\n activePrompt.value.nodes[n] = true\n }\n }\n\n function handleExecuted(e: CustomEvent) {\n if (!activePrompt.value) return\n activePrompt.value.nodes[e.detail.node] = true\n }\n\n function handleExecuting(e: CustomEvent) {\n // Clear the current node progress when a new node starts executing\n _executingNodeProgress.value = null\n\n if (!activePrompt.value) return\n\n if (executingNodeId.value && activePrompt.value) {\n // Seems sometimes nodes that are cached fire executing but not executed\n activePrompt.value.nodes[executingNodeId.value] = true\n }\n executingNodeId.value = e.detail ? String(e.detail) : null\n if (!executingNodeId.value) {\n if (activePromptId.value) {\n delete queuedPrompts.value[activePromptId.value]\n }\n activePromptId.value = null\n }\n }\n\n function handleProgress(e: CustomEvent) {\n _executingNodeProgress.value = e.detail\n }\n\n function handleStatus(e: CustomEvent) {\n if (api.clientId) {\n clientId.value = api.clientId\n\n // Once we've received the clientId we no longer need to listen\n api.removeEventListener('status', handleStatus as EventListener)\n }\n }\n\n function storePrompt({\n nodes,\n id,\n workflow\n }: {\n nodes: string[]\n id: string\n workflow: ComfyWorkflow\n }) {\n queuedPrompts.value[id] ??= { nodes: {} }\n const queuedPrompt = queuedPrompts.value[id]\n queuedPrompt.nodes = {\n ...nodes.reduce((p: Record, n) => {\n p[n] = false\n return p\n }, {}),\n ...queuedPrompt.nodes\n }\n queuedPrompt.workflow = workflow\n\n console.debug(\n `queued task ${id} with ${Object.values(queuedPrompt.nodes).length} nodes`\n )\n }\n\n return {\n isIdle,\n clientId,\n activePromptId,\n queuedPrompts,\n executingNodeId,\n activePrompt,\n totalNodesToExecute,\n nodesExecuted,\n executionProgress,\n executingNode,\n executingNodeProgress,\n bindExecutionEvents,\n unbindExecutionEvents,\n storePrompt\n }\n})\n","import * as Vue from 'vue'\n\nvar isVue2 = false\nvar isVue3 = true\nvar Vue2 = undefined\n\nfunction install() {}\n\nexport function set(target, key, val) {\n if (Array.isArray(target)) {\n target.length = Math.max(target.length, key)\n target.splice(key, 1, val)\n return val\n }\n target[key] = val\n return val\n}\n\nexport function del(target, key) {\n if (Array.isArray(target)) {\n target.splice(key, 1)\n return\n }\n delete target[key]\n}\n\nexport * from 'vue'\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n}\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"injectLocal must be called in setup\");\n if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n return;\n }\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue(defaultValue);\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n toValue(element),\n toValue(value),\n index,\n toValue(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import * as Vue from 'vue'\n\nvar isVue2 = false\nvar isVue3 = true\nvar Vue2 = undefined\n\nfunction install() {}\n\nexport function set(target, key, val) {\n if (Array.isArray(target)) {\n target.length = Math.max(target.length, key)\n target.splice(key, 1, val)\n return val\n }\n target[key] = val\n return val\n}\n\nexport function del(target, key) {\n if (Array.isArray(target)) {\n target.splice(key, 1)\n return\n }\n delete target[key]\n}\n\nexport * from 'vue'\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n}\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, notNullish, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, isVue2, readonly, reactive, nextTick, markRaw, unref, getCurrentScope, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n return;\n }\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n if (!isVue3) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n return;\n }\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, isVue2 ? void 0 : instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n }, true);\n useEventListener(window, \"focus\", trigger, true);\n }\n if (triggerOnRemoval) {\n useMutationObserver(document, (mutations) => {\n mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {\n if (node === activeElement.value)\n trigger();\n });\n }, {\n childList: true,\n subtree: true\n });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit && delta < intervalLimit) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el)\n update();\n });\n watch(() => keyframes, (value) => {\n if (animate.value)\n update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\" } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update);\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window && !(storage instanceof Storage)) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue,\n storageArea: storage\n }\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1] && window)\n window.getComputedStyle(old[0]).removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => {\n if (mode.system) {\n return mode.system.value;\n } else {\n const preferredDark = usePreferredDark({ window });\n return preferredDark.value ? \"dark\" : \"light\";\n }\n });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isDataTypeIncluded = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const getFiles = (event) => {\n var _a, _b;\n const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n return files.value = list.length === 0 ? null : list;\n };\n useEventListener(target, \"dragenter\", (event) => {\n var _a, _b;\n const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n if (_options.dataTypes && event.dataTransfer) {\n const dataTypes = unref(_options.dataTypes);\n isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n if (!isDataTypeIncluded)\n return;\n }\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragover\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"dragleave\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener(target, \"drop\", (event) => {\n var _a;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n trigger(files.value);\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n trigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying)\n el.play();\n else\n el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on\n };\n}\n\nfunction getMapVue2Compat() {\n const data = shallowReactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n}\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX;\n y.value = pos[1] + window.scrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof HTMLElement))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n })\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a;\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n const textareaScrollHeight = ref(1);\n const textareaOldWidth = ref(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = ref(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? void 0 : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? void 0 : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n try {\n new Notification(\"\");\n } catch (e) {\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n if (!isClient || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === responseMessage)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, behavior = \"auto\" } = options;\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const internalX = ref(window.scrollX);\n const internalY = ref(window.scrollY);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo({ left: x2, behavior });\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo({ top: y2, behavior });\n }\n });\n useEventListener(\n window,\n \"scroll\",\n () => {\n internalX.value = window.scrollX;\n internalY.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.FitAddon=t():e.FitAddon=t()}(self,(()=>(()=>{\"use strict\";var e={};return(()=>{var t=e;Object.defineProperty(t,\"__esModule\",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core,t=e._renderService.dimensions;if(0===t.css.cell.width||0===t.css.cell.height)return;const r=0===this._terminal.options.scrollback?0:e.viewport.scrollBarWidth,i=window.getComputedStyle(this._terminal.element.parentElement),o=parseInt(i.getPropertyValue(\"height\")),s=Math.max(0,parseInt(i.getPropertyValue(\"width\"))),n=window.getComputedStyle(this._terminal.element),l=o-(parseInt(n.getPropertyValue(\"padding-top\"))+parseInt(n.getPropertyValue(\"padding-bottom\"))),a=s-(parseInt(n.getPropertyValue(\"padding-right\"))+parseInt(n.getPropertyValue(\"padding-left\")))-r;return{cols:Math.max(2,Math.floor(a/t.css.cell.width)),rows:Math.max(1,Math.floor(l/t.css.cell.height))}}}})(),e})()));\n//# sourceMappingURL=addon-fit.js.map","!function(e,t){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)(\"object\"==typeof exports?exports:e)[s]=i[s]}}(globalThis,(()=>(()=>{\"use strict\";var e={4567:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.AccessibilityManager=void 0;const n=i(9042),o=i(9924),a=i(844),h=i(4725),c=i(2585),l=i(3656);let d=t.AccessibilityManager=class extends a.Disposable{constructor(e,t,i,s){super(),this._terminal=e,this._coreBrowserService=i,this._renderService=s,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=\"\",this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement(\"div\"),this._accessibilityContainer.classList.add(\"xterm-accessibility\"),this._rowContainer=this._coreBrowserService.mainDocument.createElement(\"div\"),this._rowContainer.setAttribute(\"role\",\"list\"),this._rowContainer.classList.add(\"xterm-accessibility-tree\"),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement(\"div\"),this._liveRegion.classList.add(\"live-region\"),this._liveRegion.setAttribute(\"aria-live\",\"assertive\"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new o.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error(\"Cannot enable accessibility before Terminal.open\");this._terminal.element.insertAdjacentElement(\"afterbegin\",this._accessibilityContainer),this.register(this._terminal.onResize((e=>this._handleResize(e.rows)))),this.register(this._terminal.onRender((e=>this._refreshRows(e.start,e.end)))),this.register(this._terminal.onScroll((()=>this._refreshRows()))),this.register(this._terminal.onA11yChar((e=>this._handleChar(e)))),this.register(this._terminal.onLineFeed((()=>this._handleChar(\"\\n\")))),this.register(this._terminal.onA11yTab((e=>this._handleTab(e)))),this.register(this._terminal.onKey((e=>this._handleKey(e.key)))),this.register(this._terminal.onBlur((()=>this._clearLiveRegion()))),this.register(this._renderService.onDimensionsChange((()=>this._refreshRowsDimensions()))),this.register((0,l.addDisposableDomListener)(document,\"selectionchange\",(()=>this._handleSelectionChange()))),this.register(this._coreBrowserService.onDprChange((()=>this._refreshRowsDimensions()))),this._refreshRows(),this.register((0,a.toDisposable)((()=>{this._accessibilityContainer.remove(),this._rowElements.length=0})))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,\"\\n\"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=n.tooMuchOutput)))}_clearLiveRegion(){this._liveRegion.textContent=\"\",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],n=e?.translateToString(!0,void 0,void 0,t)||\"\",o=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===n.length?(a.innerText=\" \",this._rowColumns.set(a,[0,1])):(a.textContent=n,this._rowColumns.set(a,t)),a.setAttribute(\"aria-posinset\",o),a.setAttribute(\"aria-setsize\",s))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=\"\")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute(\"aria-posinset\")===(0===t?\"1\":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,n;if(0===t?(r=i,n=this._rowElements.pop(),this._rowContainer.removeChild(n)):(r=this._rowElements.shift(),n=i,this._rowContainer.removeChild(r)),r.removeEventListener(\"focus\",this._topBoundaryFocusListener),n.removeEventListener(\"focus\",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(\"afterbegin\",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=document.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error(\"anchorNode and/or focusNode are null\");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute(\"aria-posinset\"),10)-1;if(isNaN(s))return console.warn(\"row is invalid. Race condition?\"),null;const r=this._rowColumns.get(i);if(!r)return console.warn(\"columns is null. Race condition?\"),null;let n=t=this._terminal.cols&&(++s,n=0),{row:s,column:n}},n=r(t),o=r(i);if(n&&o){if(n.row>o.row||n.row===o.row&&n.column>=o.column)throw new Error(\"invalid range\");this._terminal.select(n.column,n.row,(o.row-n.row)*this._terminal.cols-n.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(\"focus\",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement(\"div\");return e.setAttribute(\"role\",\"listitem\"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{function i(e){return e.replace(/\\r?\\n/g,\"\\r\")}function s(e,t){return t?\"\u001b[200~\"+e+\"\u001b[201~\":e}function r(e,t,r,n){e=s(e=i(e),r.decPrivateModes.bracketedPasteMode&&!0!==n.rawOptions.ignoreBracketedPasteMode),r.triggerDataEvent(e,!0),t.value=\"\"}function n(e,t,i){const s=i.getBoundingClientRect(),r=e.clientX-s.left-10,n=e.clientY-s.top-10;t.style.width=\"20px\",t.style.height=\"20px\",t.style.left=`${r}px`,t.style.top=`${n}px`,t.style.zIndex=\"1000\",t.focus()}Object.defineProperty(t,\"__esModule\",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=i,t.bracketTextForPaste=s,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData(\"text/plain\",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,i,s){e.stopPropagation(),e.clipboardData&&r(e.clipboardData.getData(\"text/plain\"),t,i,s)},t.paste=r,t.moveTextAreaUnderMouseCursor=n,t.rightClickHandler=function(e,t,i,s,r){n(e,t,i),r&&s.rightClickSelect(e),t.value=s.selectionText,t.select()}},7239:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorContrastCache=void 0;const s=i(1505);t.ColorContrastCache=class{constructor(){this._color=new s.TwoKeyMap,this._css=new s.TwoKeyMap}setCss(e,t,i){this._css.set(e,t,i)}getCss(e,t){return this._css.get(e,t)}setColor(e,t,i){this._color.set(e,t,i)}getColor(e,t){return this._color.get(e,t)}clear(){this._color.clear(),this._css.clear()}}},3656:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,i,s){e.addEventListener(t,i,s);let r=!1;return{dispose:()=>{r||(r=!0,e.removeEventListener(t,i,s))}}}},3551:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Linkifier=void 0;const n=i(3656),o=i(8460),a=i(844),h=i(2585),c=i(4725);let l=t.Linkifier=class extends a.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new o.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new o.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,a.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,a.toDisposable)((()=>{this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()}))),this.register(this._bufferService.onResize((()=>{this._clearCurrentLink(),this._wasResized=!0}))),this.register((0,n.addDisposableDomListener)(this._element,\"mouseleave\",(()=>{this._isMouseOut=!0,this._clearCurrentLink()}))),this.register((0,n.addDisposableDomListener)(this._element,\"mousemove\",this._handleMouseMove.bind(this))),this.register((0,n.addDisposableDomListener)(this._element,\"mousedown\",this._handleMouseDown.bind(this))),this.register((0,n.addDisposableDomListener)(this._element,\"mouseup\",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach((e=>{e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,(t=>{if(this._isMouseOut)return;const r=t?.map((e=>({link:e})));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)}))}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=n;e<=o;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t)));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t)));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,a.disposeArray)(this._linkCacheDisposables))}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(\"xterm-cursor-pointer\",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange((e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}}))))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(\"xterm-cursor-pointer\")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(\"xterm-cursor-pointer\")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t,i){const s=i.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(s)return{x:s[0],y:s[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=l=s([r(1,c.IMouseService),r(2,c.IRenderService),r(3,h.IBufferService),r(4,c.ILinkProviderService)],l)},9042:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel=\"Terminal input\",t.tooMuchOutput=\"Too much output to announce, navigate to rows manually to read\"},3730:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscLinkProvider=void 0;const n=i(511),o=i(2585);let a=t.OscLinkProvider=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=new n.CellData,a=i.getTrimmedLength();let c=-1,l=-1,d=!1;for(let t=0;tr?r.activate(e,t,n):h(0,t),hover:(e,t)=>r?.hover?.(e,t,n),leave:(e,t)=>r?.leave?.(e,t,n)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,c=o.extended.urlId):(l=-1,c=-1)}}t(s)}};function h(e,t){if(confirm(`Do you want to navigate to ${t}?\\n\\nWARNING: This link could potentially be dangerous`)){const e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(\"Opening link blocked as opener could not be cleared\")}}t.OscLinkProvider=a=s([r(0,o.IBufferService),r(1,o.IOptionsService),r(2,o.IOscLinkService)],a)},6193:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderDebouncer=void 0,t.RenderDebouncer=class{constructor(e,t){this._renderCallback=e,this._coreBrowserService=t,this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(e){return this._refreshCallbacks.push(e),this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh()))),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},3236:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Terminal=void 0;const s=i(3614),r=i(3656),n=i(3551),o=i(9042),a=i(3730),h=i(1680),c=i(3107),l=i(5744),d=i(2950),_=i(1296),u=i(428),f=i(4269),v=i(5114),p=i(8934),g=i(3230),m=i(9312),S=i(4725),C=i(6731),b=i(8055),w=i(8969),y=i(8460),E=i(844),k=i(6114),L=i(8437),D=i(2584),R=i(7399),x=i(5941),A=i(9074),B=i(2585),T=i(5435),M=i(4567),O=i(779);class P extends w.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(e={}){super(e),this.browser=k,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new E.MutableDisposable),this._onCursorMove=this.register(new y.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new y.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new y.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new y.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new y.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new y.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new y.EventEmitter),this._onBlur=this.register(new y.EventEmitter),this._onA11yCharEmitter=this.register(new y.EventEmitter),this._onA11yTabEmitter=this.register(new y.EventEmitter),this._onWillOpen=this.register(new y.EventEmitter),this._setup(),this._decorationService=this._instantiationService.createInstance(A.DecorationService),this._instantiationService.setService(B.IDecorationService,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(O.LinkProviderService),this._instantiationService.setService(S.ILinkProviderService,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(a.OscLinkProvider)),this.register(this._inputHandler.onRequestBell((()=>this._onBell.fire()))),this.register(this._inputHandler.onRequestRefreshRows(((e,t)=>this.refresh(e,t)))),this.register(this._inputHandler.onRequestSendFocus((()=>this._reportFocus()))),this.register(this._inputHandler.onRequestReset((()=>this.reset()))),this.register(this._inputHandler.onRequestWindowsOptionsReport((e=>this._reportWindowsOptions(e)))),this.register(this._inputHandler.onColor((e=>this._handleColorEvent(e)))),this.register((0,y.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,y.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,y.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,y.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize((e=>this._afterResize(e.cols,e.rows)))),this.register((0,E.toDisposable)((()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)})))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i=\"\";switch(t.index){case 256:e=\"foreground\",i=\"10\";break;case 257:e=\"background\",i=\"11\";break;case 258:e=\"cursor\",i=\"12\";break;default:e=\"ansi\",i=\"4;\"+t.index}switch(t.type){case 0:const s=b.color.toColorRGB(\"ansi\"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${D.C0.ESC}]${i};${(0,x.toRgbString)(s)}${D.C1_ESCAPED.ST}`);break;case 1:if(\"ansi\"===e)this._themeService.modifyColors((e=>e.ansi[t.index]=b.channels.toColor(...t.color)));else{const i=e;this._themeService.modifyColors((e=>e[i]=b.channels.toColor(...t.color)))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(M.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+\"[I\"),this.element.classList.add(\"focus\"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=\"\",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+\"[O\"),this.element.classList.remove(\"focus\"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),n=this._renderService.dimensions.css.cell.width*r,o=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+\"px\",this.textarea.style.top=o+\"px\",this.textarea.style.width=n+\"px\",this.textarea.style.height=s+\"px\",this.textarea.style.lineHeight=s+\"px\",this.textarea.style.zIndex=\"-5\"}_initGlobal(){this._bindKeys(),this.register((0,r.addDisposableDomListener)(this.element,\"copy\",(e=>{this.hasSelection()&&(0,s.copyHandler)(e,this._selectionService)})));const e=e=>(0,s.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this.register((0,r.addDisposableDomListener)(this.textarea,\"paste\",e)),this.register((0,r.addDisposableDomListener)(this.element,\"paste\",e)),k.isFirefox?this.register((0,r.addDisposableDomListener)(this.element,\"mousedown\",(e=>{2===e.button&&(0,s.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))):this.register((0,r.addDisposableDomListener)(this.element,\"contextmenu\",(e=>{(0,s.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))),k.isLinux&&this.register((0,r.addDisposableDomListener)(this.element,\"auxclick\",(e=>{1===e.button&&(0,s.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)})))}_bindKeys(){this.register((0,r.addDisposableDomListener)(this.textarea,\"keyup\",(e=>this._keyUp(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"keydown\",(e=>this._keyDown(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"keypress\",(e=>this._keyPress(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionstart\",(()=>this._compositionHelper.compositionstart()))),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionupdate\",(e=>this._compositionHelper.compositionupdate(e)))),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionend\",(()=>this._compositionHelper.compositionend()))),this.register((0,r.addDisposableDomListener)(this.textarea,\"input\",(e=>this._inputEvent(e)),!0)),this.register(this.onRender((()=>this._compositionHelper.updateCompositionElements())))}open(e){if(!e)throw new Error(\"Terminal requires a parent element.\");if(e.isConnected||this._logService.debug(\"Terminal.open was called on an element that was not attached to the DOM\"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(\"div\"),this.element.dir=\"ltr\",this.element.classList.add(\"terminal\"),this.element.classList.add(\"xterm\"),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(\"div\"),this._viewportElement.classList.add(\"xterm-viewport\"),t.appendChild(this._viewportElement),this._viewportScrollArea=this._document.createElement(\"div\"),this._viewportScrollArea.classList.add(\"xterm-scroll-area\"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=this._document.createElement(\"div\"),this.screenElement.classList.add(\"xterm-screen\"),this.register((0,r.addDisposableDomListener)(this.screenElement,\"mousemove\",(e=>this.updateCursorStyle(e)))),this._helperContainer=this._document.createElement(\"div\"),this._helperContainer.classList.add(\"xterm-helpers\"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement),this.textarea=this._document.createElement(\"textarea\"),this.textarea.classList.add(\"xterm-helper-textarea\"),this.textarea.setAttribute(\"aria-label\",o.promptLabel),k.isChromeOS||this.textarea.setAttribute(\"aria-multiline\",\"false\"),this.textarea.setAttribute(\"autocorrect\",\"off\"),this.textarea.setAttribute(\"autocapitalize\",\"off\"),this.textarea.setAttribute(\"spellcheck\",\"false\"),this.textarea.tabIndex=0,this._coreBrowserService=this.register(this._instantiationService.createInstance(v.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??\"undefined\"!=typeof window?window.document:null)),this._instantiationService.setService(S.ICoreBrowserService,this._coreBrowserService),this.register((0,r.addDisposableDomListener)(this.textarea,\"focus\",(e=>this._handleTextAreaFocus(e)))),this.register((0,r.addDisposableDomListener)(this.textarea,\"blur\",(()=>this._handleTextAreaBlur()))),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(u.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(S.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(C.ThemeService),this._instantiationService.setService(S.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(f.CharacterJoinerService),this._instantiationService.setService(S.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(g.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(S.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange((e=>this._onRender.fire(e)))),this.onResize((e=>this._renderService.resize(e.cols,e.rows))),this._compositionView=this._document.createElement(\"div\"),this._compositionView.classList.add(\"composition-view\"),this._compositionHelper=this._instantiationService.createInstance(d.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(p.MouseService),this._instantiationService.setService(S.IMouseService,this._mouseService),this.linkifier=this.register(this._instantiationService.createInstance(n.Linkifier,this.screenElement)),this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this.viewport=this._instantiationService.createInstance(h.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent,1))),this.register(this._inputHandler.onRequestSyncScrollBar((()=>this.viewport.syncScrollArea()))),this.register(this.viewport),this.register(this.onCursorMove((()=>{this._renderService.handleCursorMove(),this._syncTextArea()}))),this.register(this.onResize((()=>this._renderService.handleResize(this.cols,this.rows)))),this.register(this.onBlur((()=>this._renderService.handleBlur()))),this.register(this.onFocus((()=>this._renderService.handleFocus()))),this.register(this._renderService.onDimensionsChange((()=>this.viewport.syncScrollArea()))),this._selectionService=this.register(this._instantiationService.createInstance(m.SelectionService,this.element,this.screenElement,this.linkifier)),this._instantiationService.setService(S.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent)))),this.register(this._selectionService.onSelectionChange((()=>this._onSelectionChange.fire()))),this.register(this._selectionService.onRequestRedraw((e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode)))),this.register(this._selectionService.onLinuxMouseSelection((e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()}))),this.register(this._onScroll.event((e=>{this.viewport.syncScrollArea(),this._selectionService.refresh()}))),this.register((0,r.addDisposableDomListener)(this._viewportElement,\"scroll\",(()=>this._selectionService.refresh()))),this.register(this._instantiationService.createInstance(c.BufferDecorationRenderer,this.screenElement)),this.register((0,r.addDisposableDomListener)(this.element,\"mousedown\",(e=>this._selectionService.handleMouseDown(e)))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(\"enable-mouse-events\")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(M.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange(\"screenReaderMode\",(e=>this._handleScreenReaderModeOptionChange(e)))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(l.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(\"overviewRulerWidth\",(e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(l.OverviewRulerRenderer,this._viewportElement,this.screenElement)))})),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(_.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){const e=this,t=this.element;function i(t){const i=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case\"mousemove\":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case\"mouseup\":r=0,s=t.button<3?t.button:3;break;case\"mousedown\":r=1,s=t.button<3?t.button:3;break;case\"wheel\":if(e._customWheelEventHandler&&!1===e._customWheelEventHandler(t))return!1;if(0===e.viewport.getLinesScrolled(t))return!1;r=t.deltaY<0?0:1,s=4;break;default:return!1}return!(void 0===r||void 0===s||s>4)&&e.coreMouseService.triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}const s={mouseup:null,wheel:null,mousedrag:null,mousemove:null},n={mouseup:e=>(i(e),e.buttons||(this._document.removeEventListener(\"mouseup\",s.mouseup),s.mousedrag&&this._document.removeEventListener(\"mousemove\",s.mousedrag)),this.cancel(e)),wheel:e=>(i(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&i(e)},mousemove:e=>{e.buttons||i(e)}};this.register(this.coreMouseService.onProtocolChange((e=>{e?(\"debug\"===this.optionsService.rawOptions.logLevel&&this._logService.debug(\"Binding to mouse events:\",this.coreMouseService.explainEvents(e)),this.element.classList.add(\"enable-mouse-events\"),this._selectionService.disable()):(this._logService.debug(\"Unbinding from mouse events.\"),this.element.classList.remove(\"enable-mouse-events\"),this._selectionService.enable()),8&e?s.mousemove||(t.addEventListener(\"mousemove\",n.mousemove),s.mousemove=n.mousemove):(t.removeEventListener(\"mousemove\",s.mousemove),s.mousemove=null),16&e?s.wheel||(t.addEventListener(\"wheel\",n.wheel,{passive:!1}),s.wheel=n.wheel):(t.removeEventListener(\"wheel\",s.wheel),s.wheel=null),2&e?s.mouseup||(s.mouseup=n.mouseup):(this._document.removeEventListener(\"mouseup\",s.mouseup),s.mouseup=null),4&e?s.mousedrag||(s.mousedrag=n.mousedrag):(this._document.removeEventListener(\"mousemove\",s.mousedrag),s.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,r.addDisposableDomListener)(t,\"mousedown\",(e=>{if(e.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(e))return i(e),s.mouseup&&this._document.addEventListener(\"mouseup\",s.mouseup),s.mousedrag&&this._document.addEventListener(\"mousemove\",s.mousedrag),this.cancel(e)}))),this.register((0,r.addDisposableDomListener)(t,\"wheel\",(e=>{if(!s.wheel){if(this._customWheelEventHandler&&!1===this._customWheelEventHandler(e))return!1;if(!this.buffer.hasScrollback){const t=this.viewport.getLinesScrolled(e);if(0===t)return;const i=D.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?\"O\":\"[\")+(e.deltaY<0?\"A\":\"B\");let s=\"\";for(let e=0;e{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(e),this.cancel(e)}),{passive:!0})),this.register((0,r.addDisposableDomListener)(t,\"touchmove\",(e=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(e)?void 0:this.cancel(e)}),{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(\"column-select\"):this.element.classList.remove(\"column-select\")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t,i=0){1===i?(super.scrollLines(e,t,i),this.refresh(0,this.rows-1)):this.viewport?.scrollLines(e)}paste(e){(0,s.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:\"\"}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;t||\"Dead\"!==e.key&&\"AltGraph\"!==e.key||(this._unprocessedDeadKey=!0);const i=(0,R.evaluateKeyboardEvent)(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),this.cancel(e,!0)}return 1===i.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(i.cancel&&this.cancel(e,!0),!i.key||!!(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(i.key!==D.C0.ETX&&i.key!==D.C0.CR||(this.textarea.value=\"\"),this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey?this.cancel(e,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(\"AltGraph\");return\"keypress\"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&\"insertText\"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure(),this.viewport?.syncScrollArea(!0)}clear(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(e,t,i){this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=Date.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0}),t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},1680:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Viewport=void 0;const n=i(3656),o=i(4725),a=i(8460),h=i(844),c=i(2585);let l=t.Viewport=class extends h.Disposable{constructor(e,t,i,s,r,o,h,c){super(),this._viewportElement=e,this._scrollArea=t,this._bufferService=i,this._optionsService=s,this._charSizeService=r,this._renderService=o,this._coreBrowserService=h,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new a.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,n.addDisposableDomListener)(this._viewportElement,\"scroll\",this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange((e=>this._renderDimensions=e))),this._handleThemeChange(c.colors),this.register(c.onChangeColors((e=>this._handleThemeChange(e)))),this.register(this._optionsService.onSpecificOptionChange(\"scrollback\",(()=>this.syncScrollArea()))),setTimeout((()=>this.syncScrollArea()))}_handleThemeChange(e){this._viewportElement.style.backgroundColor=e.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame((()=>this.syncScrollArea()))}_refresh(e){if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderDimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderDimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;const e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderDimensions.css.canvas.height);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+\"px\")}const e=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==e&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=e),this._refreshAnimationFrame=null}syncScrollArea(e=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(e)}_handleScroll(e){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});const t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:t,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||-1===this._smoothScrollState.origin||-1===this._smoothScrollState.target)return;const e=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(e*(this._smoothScrollState.target-this._smoothScrollState.origin)),e<1?this._coreBrowserService.window.requestAnimationFrame((()=>this._smoothScroll())):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(e,t){const i=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&i0&&(i=e),s=\"\"}}return{bufferElements:r,cursorElement:i}}getLinesScrolled(e){if(0===e.deltaY||e.shiftKey)return 0;let t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t}_applyScrollModifier(e,t){const i=this._optionsService.rawOptions.fastScrollModifier;return\"alt\"===i&&t.altKey||\"ctrl\"===i&&t.ctrlKey||\"shift\"===i&&t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(e){this._lastTouchY=e.touches[0].pageY}handleTouchMove(e){const t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))}};t.Viewport=l=s([r(2,c.IBufferService),r(3,c.IOptionsService),r(4,o.ICharSizeService),r(5,o.IRenderService),r(6,o.ICoreBrowserService),r(7,o.IThemeService)],l)},3107:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferDecorationRenderer=void 0;const n=i(4725),o=i(844),a=i(2585);let h=t.BufferDecorationRenderer=class extends o.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement(\"div\"),this._container.classList.add(\"xterm-decoration-container\"),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange((()=>this._doRefreshDecorations()))),this.register(this._renderService.onDimensionsChange((()=>{this._dimensionsChanged=!0,this._queueRefresh()}))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt}))),this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh()))),this.register(this._decorationService.onDecorationRemoved((e=>this._removeDecoration(e)))),this.register((0,o.toDisposable)((()=>{this._container.remove(),this._decorationElements.clear()})))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback((()=>{this._doRefreshDecorations(),this._animationFrame=void 0})))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement(\"div\");t.classList.add(\"xterm-decoration\"),t.classList.toggle(\"xterm-decoration-top-layer\",\"top\"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+\"px\",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+\"px\",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display=\"none\"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display=\"none\",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose((()=>{this._decorationElements.delete(e),i.remove()}))),i.style.top=t*this._renderService.dimensions.css.cell.height+\"px\",i.style.display=this._altBufferIsActive?\"none\":\"block\",e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;\"right\"===(e.options.anchor||\"left\")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+\"px\":\"\":t.style.left=i?i*this._renderService.dimensions.css.cell.width+\"px\":\"\"}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,n.ICoreBrowserService),r(3,a.IDecorationService),r(4,n.IRenderService)],h)},5871:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||\"full\"]&&t<=e.endBufferLine+this._linePadding[i||\"full\"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},5744:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OverviewRulerRenderer=void 0;const n=i(5871),o=i(4725),a=i(844),h=i(2585),c={full:0,left:0,center:0,right:0},l={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=t.OverviewRulerRenderer=class extends a.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(e,t,i,s,r,o,h){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=o,this._coreBrowserService=h,this._colorZoneStore=new n.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement(\"canvas\"),this._canvas.classList.add(\"xterm-decoration-overview-ruler\"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement);const c=this._canvas.getContext(\"2d\");if(!c)throw new Error(\"Ctx cannot be null\");this._ctx=c,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,a.toDisposable)((()=>{this._canvas?.remove()})))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh(void 0,!0)))),this.register(this._decorationService.onDecorationRemoved((()=>this._queueRefresh(void 0,!0))))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?\"none\":\"block\"}))),this.register(this._bufferService.onScroll((()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender((()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)}))),this.register(this._optionsService.onSpecificOptionChange(\"overviewRulerWidth\",(()=>this._queueRefresh(!0)))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh(!0)))),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor(this._canvas.width/3),t=Math.ceil(this._canvas.width/3);l.full=this._canvas.width,l.left=e,l.center=t,l.right=e,this._refreshDrawHeightConstants(),d.full=0,d.left=0,d.center=l.left,d.right=l.left+l.center}_refreshDrawHeightConstants(){c.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);c.left=t,c.center=t,c.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1;const e=this._colorZoneStore.zones;for(const t of e)\"full\"!==t.position&&this._renderColorZone(t);for(const t of e)\"full\"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||\"full\"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-c[e.position||\"full\"]/2),l[e.position||\"full\"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+c[e.position||\"full\"]))}_queueRefresh(e,t){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>{this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,o.IRenderService),r(5,h.IOptionsService),r(6,o.ICoreBrowserService)],_)},2950:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CompositionHelper=void 0;const n=i(4725),o=i(2585),a=i(2584);let h=t.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(e,t,i,s,r,n){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=n,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=\"\"}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=\"\",this._dataAlreadySent=\"\",this._compositionView.classList.add(\"active\")}compositionupdate(e){this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((()=>{this._compositionPosition.end=this._textarea.value.length}),0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove(\"active\"),this._isComposing=!1,e){const e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((()=>{if(this._isSendingComposition){let t;this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,t=this._isComposing?this._textarea.value.substring(e.start,e.end):this._textarea.value.substring(e.start),t.length>0&&this._coreService.triggerDataEvent(t,!0)}}),0)}else{this._isSendingComposition=!1;const e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){const e=this._textarea.value;setTimeout((()=>{if(!this._isComposing){const t=this._textarea.value,i=t.replace(e,\"\");this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0)),0)}}};t.CompositionHelper=h=s([r(2,o.IBufferService),r(3,o.IOptionsService),r(4,o.ICoreService),r(5,n.IRenderService)],h)},9806:(e,t)=>{function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),n=parseInt(r.getPropertyValue(\"padding-left\")),o=parseInt(r.getPropertyValue(\"padding-top\"));return[t.clientX-s.left-n,t.clientY-s.top-o]}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,n,o,a,h,c){if(!o)return;const l=i(e,t,s);return l?(l[0]=Math.ceil((l[0]+(c?a/2:0))/a),l[1]=Math.ceil(l[1]/h),l[0]=Math.min(Math.max(l[0],1),r+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l):void 0}},9504:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.moveToCellSequence=void 0;const s=i(2584);function r(e,t,i,s){const r=e-n(e,i),a=t-n(t,i),l=Math.abs(r-a)-function(e,t,i){let s=0;const r=e-n(e,i),a=t-n(t,i);for(let n=0;n=0&&et?\"A\":\"B\"}function a(e,t,i,s,r,n){let o=e,a=t,h=\"\";for(;o!==i||a!==s;)o+=r?1:-1,r&&o>n.cols-1?(h+=n.buffer.translateBufferLineToString(a,!1,e,o),o=0,e=0,a++):!r&&o<0&&(h+=n.buffer.translateBufferLineToString(a,!1,0,e+1),o=n.cols-1,e=o,a--);return h+n.buffer.translateBufferLineToString(a,!1,e,o)}function h(e,t){const i=t?\"O\":\"[\";return s.C0.ESC+i+e}function c(e,t){e=Math.floor(e);let i=\"\";for(let s=0;s0?s-n(s,o):t;const _=s,u=function(e,t,i,s,o,a){let h;return h=r(i,s,o,a).length>0?s-n(s,o):t,e=i&&he?\"D\":\"C\",c(Math.abs(o-e),h(d,s));d=l>t?\"D\":\"C\";const _=Math.abs(l-t);return c(function(e,t){return t.cols-e}(l>t?e:o,i)+(_-1)*i.cols+1+((l>t?o:e)-1),h(d,s))}},1296:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRenderer=void 0;const n=i(3787),o=i(2550),a=i(2223),h=i(6171),c=i(6052),l=i(4725),d=i(8055),_=i(8460),u=i(844),f=i(2585),v=\"xterm-dom-renderer-owner-\",p=\"xterm-rows\",g=\"xterm-fg-\",m=\"xterm-bg-\",S=\"xterm-focus\",C=\"xterm-selection\";let b=1,w=t.DomRenderer=class extends u.Disposable{constructor(e,t,i,s,r,a,l,d,f,g,m,S,w){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=l,this._charSizeService=f,this._optionsService=g,this._bufferService=m,this._coreBrowserService=S,this._themeService=w,this._terminalClass=b++,this._rowElements=[],this._selectionRenderModel=(0,c.createSelectionRenderModel)(),this.onRequestRedraw=this.register(new _.EventEmitter).event,this._rowContainer=this._document.createElement(\"div\"),this._rowContainer.classList.add(p),this._rowContainer.style.lineHeight=\"normal\",this._rowContainer.setAttribute(\"aria-hidden\",\"true\"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(\"div\"),this._selectionContainer.classList.add(C),this._selectionContainer.setAttribute(\"aria-hidden\",\"true\"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._themeService.onChangeColors((e=>this._injectCss(e)))),this._injectCss(this._themeService.colors),this._rowFactory=d.createInstance(n.DomRendererRowFactory,document),this._element.classList.add(v+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline((e=>this._handleLinkHover(e)))),this.register(this._linkifier2.onHideLinkUnderline((e=>this._handleLinkLeave(e)))),this.register((0,u.toDisposable)((()=>{this._element.classList.remove(v+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()}))),this._widthCache=new o.WidthCache(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow=\"hidden\";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .${p} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .${p} { color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;t+=`${this._terminalSelector} .${p} .xterm-dim { color: ${d.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .${C} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${C} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${C} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .${g}${i} { color: ${s.css}; }${this._terminalSelector} .${g}${i}.xterm-dim { color: ${d.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .${m}${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .${g}${a.INVERTED_DEFAULT_COLOR} { color: ${d.color.opaque(e.background).css}; }${this._terminalSelector} .${g}${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${d.color.multiplyOpacity(d.color.opaque(e.background),.5).css}; }${this._terminalSelector} .${m}${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get(\"W\",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement(\"div\");this._rowContainer.appendChild(e),this._rowElements.push(e)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(S),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(S),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,t,i){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i),this.renderRows(0,this._bufferService.rows-1),!e||!t)return;this._selectionRenderModel.update(this._terminal,e,t,i);const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,n=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow;if(n>=this._bufferService.rows||o<0)return;const a=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];a.appendChild(this._createSelectionElement(n,i?t[0]:e[0],i?e[0]:t[0],o-n+1))}else{const i=s===n?e[0]:0,h=n===r?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(n,i,h));const c=o-n-1;if(a.appendChild(this._createSelectionElement(n+1,0,this._bufferService.cols,c)),n!==o){const e=r===o?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,0,e))}}this._selectionContainer.appendChild(a)}_createSelectionElement(e,t,i,s=1){const r=this._document.createElement(\"div\"),n=t*this.dimensions.css.cell.width;let o=this.dimensions.css.cell.width*(i-t);return n+o>this.dimensions.css.canvas.width&&(o=this.dimensions.css.canvas.width-n),r.style.height=s*this.dimensions.css.cell.height+\"px\",r.style.top=e*this.dimensions.css.cell.height+\"px\",r.style.left=`${n}px`,r.style.width=`${o}px`,r}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren()}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),n=this._optionsService.rawOptions.cursorBlink,o=this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle;for(let h=e;h<=t;h++){const e=h+i.ydisp,t=this._rowElements[h],c=i.lines.get(e);if(!t||!c)break;t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,o,a,r,n,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${v}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,n){i<0&&(e=0),s<0&&(t=0);const o=this._bufferService.rows-1;i=Math.max(Math.min(i,o),0),s=Math.max(Math.min(s,o),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,c=Math.min(a.x,r-1),l=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle;for(let o=i;o<=s;++o){const u=o+a.ydisp,f=this._rowElements[o],v=a.lines.get(u);if(!f||!v)break;f.replaceChildren(...this._rowFactory.createRow(v,u,u===h,d,_,c,l,this.dimensions.css.cell.width,this._widthCache,n?o===i?e:0:-1,n?(o===s?t:r)-1:-1))}}};t.DomRenderer=w=s([r(7,f.IInstantiationService),r(8,l.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,l.ICoreBrowserService),r(12,l.IThemeService)],w)},3787:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRendererRowFactory=void 0;const n=i(2223),o=i(643),a=i(511),h=i(2585),c=i(8055),l=i(4725),d=i(4269),_=i(6171),u=i(3734);let f=t.DomRendererRowFactory=class{constructor(e,t,i,s,r,n,o){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=n,this._themeService=o,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,l,_,f,p){const g=[],m=this._characterJoinerService.getJoinedCharacters(t),S=this._themeService.colors;let C,b=e.getNoBgTrimmedLength();i&&b0&&M===m[0][0]){O=!0;const t=m.shift();I=new d.JoinedCellData(this._workCell,e.translateToString(!0,t[0],t[1]),t[1]-t[0]),P=t[1]-1,b=I.getWidth()}const H=this._isCellInSelection(M,t),F=i&&M===a,W=T&&M>=f&&M<=p;let U=!1;this._decorationService.forEachDecorationAtCell(M,t,void 0,(e=>{U=!0}));let N=I.getChars()||o.WHITESPACE_CELL_CHAR;if(\" \"===N&&(I.isUnderline()||I.isOverline())&&(N=\" \"),A=b*l-_.get(N,I.isBold(),I.isItalic()),C){if(w&&(H&&x||!H&&!x&&I.bg===E)&&(H&&x&&S.selectionForeground||I.fg===k)&&I.extended.ext===L&&W===D&&A===R&&!F&&!O&&!U){I.isInvisible()?y+=o.WHITESPACE_CELL_CHAR:y+=N,w++;continue}w&&(C.textContent=y),C=this._document.createElement(\"span\"),w=0,y=\"\"}else C=this._document.createElement(\"span\");if(E=I.bg,k=I.fg,L=I.extended.ext,D=W,R=A,x=H,O&&a>=M&&a<=P&&(a=M),!this._coreService.isCursorHidden&&F&&this._coreService.isCursorInitialized)if(B.push(\"xterm-cursor\"),this._coreBrowserService.isFocused)h&&B.push(\"xterm-cursor-blink\"),B.push(\"bar\"===s?\"xterm-cursor-bar\":\"underline\"===s?\"xterm-cursor-underline\":\"xterm-cursor-block\");else if(r)switch(r){case\"outline\":B.push(\"xterm-cursor-outline\");break;case\"block\":B.push(\"xterm-cursor-block\");break;case\"bar\":B.push(\"xterm-cursor-bar\");break;case\"underline\":B.push(\"xterm-cursor-underline\")}if(I.isBold()&&B.push(\"xterm-bold\"),I.isItalic()&&B.push(\"xterm-italic\"),I.isDim()&&B.push(\"xterm-dim\"),y=I.isInvisible()?o.WHITESPACE_CELL_CHAR:I.getChars()||o.WHITESPACE_CELL_CHAR,I.isUnderline()&&(B.push(`xterm-underline-${I.extended.underlineStyle}`),\" \"===y&&(y=\" \"),!I.isUnderlineColorDefault()))if(I.isUnderlineColorRGB())C.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(I.getUnderlineColor()).join(\",\")})`;else{let e=I.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&I.isBold()&&e<8&&(e+=8),C.style.textDecorationColor=S.ansi[e].css}I.isOverline()&&(B.push(\"xterm-overline\"),\" \"===y&&(y=\" \")),I.isStrikethrough()&&B.push(\"xterm-strikethrough\"),W&&(C.style.textDecoration=\"underline\");let $=I.getFgColor(),j=I.getFgColorMode(),z=I.getBgColor(),K=I.getBgColorMode();const q=!!I.isInverse();if(q){const e=$;$=z,z=e;const t=j;j=K,K=t}let V,G,X,J=!1;switch(this._decorationService.forEachDecorationAtCell(M,t,void 0,(e=>{\"top\"!==e.options.layer&&J||(e.backgroundColorRGB&&(K=50331648,z=e.backgroundColorRGB.rgba>>8&16777215,V=e.backgroundColorRGB),e.foregroundColorRGB&&(j=50331648,$=e.foregroundColorRGB.rgba>>8&16777215,G=e.foregroundColorRGB),J=\"top\"===e.options.layer)})),!J&&H&&(V=this._coreBrowserService.isFocused?S.selectionBackgroundOpaque:S.selectionInactiveBackgroundOpaque,z=V.rgba>>8&16777215,K=50331648,J=!0,S.selectionForeground&&(j=50331648,$=S.selectionForeground.rgba>>8&16777215,G=S.selectionForeground)),J&&B.push(\"xterm-decoration-top\"),K){case 16777216:case 33554432:X=S.ansi[z],B.push(`xterm-bg-${z}`);break;case 50331648:X=c.channels.toColor(z>>16,z>>8&255,255&z),this._addStyle(C,`background-color:#${v((z>>>0).toString(16),\"0\",6)}`);break;default:q?(X=S.foreground,B.push(`xterm-bg-${n.INVERTED_DEFAULT_COLOR}`)):X=S.background}switch(V||I.isDim()&&(V=c.color.multiplyOpacity(X,.5)),j){case 16777216:case 33554432:I.isBold()&&$<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&($+=8),this._applyMinimumContrast(C,X,S.ansi[$],I,V,void 0)||B.push(`xterm-fg-${$}`);break;case 50331648:const e=c.channels.toColor($>>16&255,$>>8&255,255&$);this._applyMinimumContrast(C,X,e,I,V,G)||this._addStyle(C,`color:#${v($.toString(16),\"0\",6)}`);break;default:this._applyMinimumContrast(C,X,S.foreground,I,V,G)||q&&B.push(`xterm-fg-${n.INVERTED_DEFAULT_COLOR}`)}B.length&&(C.className=B.join(\" \"),B.length=0),F||O||U?C.textContent=y:w++,A!==this.defaultSpacing&&(C.style.letterSpacing=`${A}px`),g.push(C),M=P}return C&&w&&(C.textContent=y),g}_applyMinimumContrast(e,t,i,s,r,n){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const o=this._getContrastCache(s);let a;if(r||n||(a=o.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=c.color.ensureContrastRatio(r||t,n||i,e),o.setColor((r||t).rgba,(n||i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute(\"style\",`${e.getAttribute(\"style\")||\"\"}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};function v(e,t,i){for(;e.length{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WidthCache=void 0,t.WidthCache=class{constructor(e,t){this._flat=new Float32Array(256),this._font=\"\",this._fontSize=0,this._weight=\"normal\",this._weightBold=\"bold\",this._measureElements=[],this._container=e.createElement(\"div\"),this._container.classList.add(\"xterm-width-cache-measure-container\"),this._container.setAttribute(\"aria-hidden\",\"true\"),this._container.style.whiteSpace=\"pre\",this._container.style.fontKerning=\"none\";const i=e.createElement(\"span\");i.classList.add(\"xterm-char-measure-element\");const s=e.createElement(\"span\");s.classList.add(\"xterm-char-measure-element\"),s.style.fontWeight=\"bold\";const r=e.createElement(\"span\");r.classList.add(\"xterm-char-measure-element\"),r.style.fontStyle=\"italic\";const n=e.createElement(\"span\");n.classList.add(\"xterm-char-measure-element\"),n.style.fontWeight=\"bold\",n.style.fontStyle=\"italic\",this._measureElements=[i,s,r,n],this._container.appendChild(i),this._container.appendChild(s),this._container.appendChild(r),this._container.appendChild(n),t.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${i}`,this._measureElements[1].style.fontWeight=`${s}`,this._measureElements[2].style.fontWeight=`${i}`,this._measureElements[3].style.fontWeight=`${s}`,this.clear())}get(e,t,i){let s=0;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+=\"B\"),i&&(r+=\"I\");let n=this._holey.get(r);if(void 0===n){let s=0;t&&(s|=1),i&&(s|=2),n=this._measure(e,s),n>0&&this._holey.set(r,n)}return n}_measure(e,t){const i=this._measureElements[t];return i.textContent=e.repeat(32),i.offsetWidth/32}}},2223:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;const s=i(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=s.isFirefox||s.isLegacyEdge?\"bottom\":\"ideographic\"},6171:(e,t)=>{function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,\"__esModule\",{value:!0}),t.computeNextVariantOffset=t.createRenderDimensions=t.treatGlyphAsBackgroundColor=t.allowRescaling=t.isEmoji=t.isRestrictedPowerlineGlyph=t.isPowerlineGlyph=t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error(\"value must not be falsy\");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,n){return 1===t&&r>Math.ceil(1.5*n)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},6052:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createSelectionRenderModel=void 0;class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,n=t[1]-r,o=i[1]-r,a=Math.max(n,0),h=Math.min(o,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=n,this.viewportEndRow=o,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}t.createSelectionRenderModel=function(){return new i}},456:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharSizeService=void 0;const n=i(2585),o=i(8460),a=i(844);let h=t.CharSizeService=class extends a.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this.register(new o.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this.register(new d(this._optionsService))}catch{this._measureStrategy=this.register(new l(e,t,this._optionsService))}this.register(this._optionsService.onMultipleOptionChange([\"fontFamily\",\"fontSize\"],(()=>this.measure())))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h=s([r(2,n.IOptionsService)],h);class c extends a.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class l extends c{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement(\"span\"),this._measureElement.classList.add(\"xterm-char-measure-element\"),this._measureElement.textContent=\"W\".repeat(32),this._measureElement.setAttribute(\"aria-hidden\",\"true\"),this._measureElement.style.whiteSpace=\"pre\",this._measureElement.style.fontKerning=\"none\",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends c{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(\"2d\");const t=this._ctx.measureText(\"W\");if(!(\"width\"in t&&\"fontBoundingBoxAscent\"in t&&\"fontBoundingBoxDescent\"in t))throw new Error(\"Required font metrics not supported\")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText(\"W\");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},4269:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(3734),o=i(643),a=i(511),h=i(2585);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData=\"\",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error(\"not implemented\")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let l=t.CharacterJoinerService=class e{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new a.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,a,n,t,r);for(let t=0;t1){const e=this._getJoinedRanges(s,a,n,t,r);for(let t=0;t{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreBrowserService=void 0;const s=i(844),r=i(8460),n=i(3656);class o extends s.Disposable{constructor(e,t,i){super(),this._textarea=e,this._window=t,this.mainDocument=i,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=new a(this._window),this._onDprChange=this.register(new r.EventEmitter),this.onDprChange=this._onDprChange.event,this._onWindowChange=this.register(new r.EventEmitter),this.onWindowChange=this._onWindowChange.event,this.register(this.onWindowChange((e=>this._screenDprMonitor.setWindow(e)))),this.register((0,r.forwardEvent)(this._screenDprMonitor.onDprChange,this._onDprChange)),this._textarea.addEventListener(\"focus\",(()=>this._isFocused=!0)),this._textarea.addEventListener(\"blur\",(()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask((()=>this._cachedIsFocused=void 0))),this._cachedIsFocused}}t.CoreBrowserService=o;class a extends s.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this.register(new s.MutableDisposable),this._onDprChange=this.register(new r.EventEmitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this.register((0,s.toDisposable)((()=>this.clearListener())))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,n.addDisposableDomListener)(this._parentWindow,\"resize\",(()=>this._setDprAndFireIfDiffers()))}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},779:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.LinkProviderService=void 0;const s=i(844);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this.register((0,s.toDisposable)((()=>this.linkProviders.length=0)))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8934:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MouseService=void 0;const n=i(4725),o=i(9806);let a=t.MouseService=class{constructor(e,t){this._renderService=e,this._charSizeService=t}getCoords(e,t,i,s,r){return(0,o.getCoords)(window,e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,o.getCoordsRelativeToElement)(window,e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseService=a=s([r(0,n.IRenderService),r(1,n.ICharSizeService)],a)},3230:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderService=void 0;const n=i(6193),o=i(4725),a=i(8460),h=i(844),c=i(7226),l=i(2585);let d=t.RenderService=class extends h.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,o,l,d){super(),this._rowCount=e,this._charSizeService=s,this._renderer=this.register(new h.MutableDisposable),this._pausedResizeTask=new c.DebouncedIdleTask,this._observerDisposable=this.register(new h.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new a.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new a.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new a.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new a.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new n.RenderDebouncer(((e,t)=>this._renderRows(e,t)),l),this.register(this._renderDebouncer),this.register(l.onDprChange((()=>this.handleDevicePixelRatioChange()))),this.register(o.onResize((()=>this._fullRefresh()))),this.register(o.buffers.onBufferActivate((()=>this._renderer.value?.clear()))),this.register(i.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._charSizeService.onCharSizeChange((()=>this.handleCharSizeChanged()))),this.register(r.onDecorationRegistered((()=>this._fullRefresh()))),this.register(r.onDecorationRemoved((()=>this._fullRefresh()))),this.register(i.onMultipleOptionChange([\"customGlyphs\",\"drawBoldTextInBrightColors\",\"letterSpacing\",\"lineHeight\",\"fontFamily\",\"fontSize\",\"fontWeight\",\"fontWeightBold\",\"minimumContrastRatio\",\"rescaleOverlappingGlyphs\"],(()=>{this.clear(),this.handleResize(o.cols,o.rows),this._fullRefresh()}))),this.register(i.onMultipleOptionChange([\"cursorBlink\",\"cursorStyle\"],(()=>this.refreshRows(o.buffer.y,o.buffer.y,!0)))),this.register(d.onChangeColors((()=>this._fullRefresh()))),this._registerIntersectionObserver(l.window,t),this.register(l.onWindowChange((e=>this._registerIntersectionObserver(e,t))))}_registerIntersectionObserver(e,t){if(\"IntersectionObserver\"in e){const i=new e.IntersectionObserver((e=>this._handleIntersectionChange(e[e.length-1])),{threshold:0});i.observe(t),this._observerDisposable.value=(0,h.toDisposable)((()=>i.disconnect()))}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1){this._isPaused?this._needsFullRefresh=!0:(i||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))}_renderRows(e,t){this._renderer.value&&(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0)}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw((e=>this.refreshRows(e.start,e.end,!0))),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set((()=>this._renderer.value?.handleResize(e,t))):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d=s([r(2,l.IOptionsService),r(3,o.ICharSizeService),r(4,l.IDecorationService),r(5,l.IBufferService),r(6,o.ICoreBrowserService),r(7,o.IThemeService)],d)},9312:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionService=void 0;const n=i(9806),o=i(9504),a=i(456),h=i(4725),c=i(8460),l=i(844),d=i(6114),_=i(4841),u=i(511),f=i(2585),v=String.fromCharCode(160),p=new RegExp(v,\"g\");let g=t.SelectionService=class extends l.Disposable{constructor(e,t,i,s,r,n,o,h,d){super(),this._element=e,this._screenElement=t,this._linkifier=i,this._bufferService=s,this._coreService=r,this._mouseService=n,this._optionsService=o,this._renderService=h,this._coreBrowserService=d,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new u.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new c.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new c.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new c.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new c.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=e=>this._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput((()=>{this.hasSelection&&this.clearSelection()})),this._trimListener=this._bufferService.buffer.lines.onTrim((e=>this._handleTrim(e))),this.register(this._bufferService.buffers.onBufferActivate((e=>this._handleBufferActivate(e)))),this.enable(),this._model=new a.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,l.toDisposable)((()=>{this._removeMouseDownListeners()})))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return\"\";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return\"\";const r=e[0]e.replace(p,\" \"))).join(d.isWindows?\"\\r\\n\":\"\\n\")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._refresh()))),d.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,_.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,n.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return d.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(\"mouseup\",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval((()=>this._dragScroll()),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(\"mouseup\",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0;const t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return e.altKey&&!(d.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,o.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((e=>this._handleTrim(e)))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,n=r.lines.get(e[1]);if(!n)return;const o=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(n,e[0]),h=a;const c=e[0]-a;let l=0,d=0,_=0,u=0;if(\" \"===o.charAt(a)){for(;a>0&&\" \"===o.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(n.loadCell(t-1,this._workCell));){n.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(l++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+c-l+_,v=Math.min(this._bufferService.cols,h-a+l+d-_-u);if(t||\"\"!==o.slice(a,h).trim()){if(i&&0===f&&32!==n.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&n.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,v+=e}}}if(s&&f+v===this._bufferService.cols&&32!==n.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(v+=t.length)}}return{start:f,length:v}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,_.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=g=s([r(3,f.IBufferService),r(4,f.ICoreService),r(5,h.IMouseService),r(6,f.IOptionsService),r(7,h.IRenderService),r(8,h.ICoreBrowserService)],g)},4725:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(8343);t.ICharSizeService=(0,s.createDecorator)(\"CharSizeService\"),t.ICoreBrowserService=(0,s.createDecorator)(\"CoreBrowserService\"),t.IMouseService=(0,s.createDecorator)(\"MouseService\"),t.IRenderService=(0,s.createDecorator)(\"RenderService\"),t.ISelectionService=(0,s.createDecorator)(\"SelectionService\"),t.ICharacterJoinerService=(0,s.createDecorator)(\"CharacterJoinerService\"),t.IThemeService=(0,s.createDecorator)(\"ThemeService\"),t.ILinkProviderService=(0,s.createDecorator)(\"LinkProviderService\")},6731:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.ThemeService=t.DEFAULT_ANSI_COLORS=void 0;const n=i(7239),o=i(8055),a=i(8460),h=i(844),c=i(2585),l=o.css.toColor(\"#ffffff\"),d=o.css.toColor(\"#000000\"),_=o.css.toColor(\"#ffffff\"),u=o.css.toColor(\"#000000\"),f={css:\"rgba(255, 255, 255, 0.3)\",rgba:4294967117};t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[o.css.toColor(\"#2e3436\"),o.css.toColor(\"#cc0000\"),o.css.toColor(\"#4e9a06\"),o.css.toColor(\"#c4a000\"),o.css.toColor(\"#3465a4\"),o.css.toColor(\"#75507b\"),o.css.toColor(\"#06989a\"),o.css.toColor(\"#d3d7cf\"),o.css.toColor(\"#555753\"),o.css.toColor(\"#ef2929\"),o.css.toColor(\"#8ae234\"),o.css.toColor(\"#fce94f\"),o.css.toColor(\"#729fcf\"),o.css.toColor(\"#ad7fa8\"),o.css.toColor(\"#34e2e2\"),o.css.toColor(\"#eeeeec\")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const s=t[i/36%6|0],r=t[i/6%6|0],n=t[i%6];e.push({css:o.channels.toCss(s,r,n),rgba:o.channels.toRgba(s,r,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:o.channels.toCss(i,i,i),rgba:o.channels.toRgba(i,i,i)})}return e})());let v=t.ThemeService=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new n.ColorContrastCache,this._halfContrastCache=new n.ColorContrastCache,this._onChangeColors=this.register(new a.EventEmitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:l,background:d,cursor:_,cursorAccent:u,selectionForeground:void 0,selectionBackgroundTransparent:f,selectionBackgroundOpaque:o.color.blend(d,f),selectionInactiveBackgroundTransparent:f,selectionInactiveBackgroundOpaque:o.color.blend(d,f),ansi:t.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this.register(this._optionsService.onSpecificOptionChange(\"minimumContrastRatio\",(()=>this._contrastCache.clear()))),this.register(this._optionsService.onSpecificOptionChange(\"theme\",(()=>this._setTheme(this._optionsService.rawOptions.theme))))}_setTheme(e={}){const i=this._colors;if(i.foreground=p(e.foreground,l),i.background=p(e.background,d),i.cursor=p(e.cursor,_),i.cursorAccent=p(e.cursorAccent,u),i.selectionBackgroundTransparent=p(e.selectionBackground,f),i.selectionBackgroundOpaque=o.color.blend(i.background,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundTransparent=p(e.selectionInactiveBackground,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundOpaque=o.color.blend(i.background,i.selectionInactiveBackgroundTransparent),i.selectionForeground=e.selectionForeground?p(e.selectionForeground,o.NULL_COLOR):void 0,i.selectionForeground===o.NULL_COLOR&&(i.selectionForeground=void 0),o.color.isOpaque(i.selectionBackgroundTransparent)){const e=.3;i.selectionBackgroundTransparent=o.color.opacity(i.selectionBackgroundTransparent,e)}if(o.color.isOpaque(i.selectionInactiveBackgroundTransparent)){const e=.3;i.selectionInactiveBackgroundTransparent=o.color.opacity(i.selectionInactiveBackgroundTransparent,e)}if(i.ansi=t.DEFAULT_ANSI_COLORS.slice(),i.ansi[0]=p(e.black,t.DEFAULT_ANSI_COLORS[0]),i.ansi[1]=p(e.red,t.DEFAULT_ANSI_COLORS[1]),i.ansi[2]=p(e.green,t.DEFAULT_ANSI_COLORS[2]),i.ansi[3]=p(e.yellow,t.DEFAULT_ANSI_COLORS[3]),i.ansi[4]=p(e.blue,t.DEFAULT_ANSI_COLORS[4]),i.ansi[5]=p(e.magenta,t.DEFAULT_ANSI_COLORS[5]),i.ansi[6]=p(e.cyan,t.DEFAULT_ANSI_COLORS[6]),i.ansi[7]=p(e.white,t.DEFAULT_ANSI_COLORS[7]),i.ansi[8]=p(e.brightBlack,t.DEFAULT_ANSI_COLORS[8]),i.ansi[9]=p(e.brightRed,t.DEFAULT_ANSI_COLORS[9]),i.ansi[10]=p(e.brightGreen,t.DEFAULT_ANSI_COLORS[10]),i.ansi[11]=p(e.brightYellow,t.DEFAULT_ANSI_COLORS[11]),i.ansi[12]=p(e.brightBlue,t.DEFAULT_ANSI_COLORS[12]),i.ansi[13]=p(e.brightMagenta,t.DEFAULT_ANSI_COLORS[13]),i.ansi[14]=p(e.brightCyan,t.DEFAULT_ANSI_COLORS[14]),i.ansi[15]=p(e.brightWhite,t.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const s=Math.min(i.ansi.length-16,e.extendedAnsi.length);for(let r=0;r{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CircularList=void 0;const s=i(8460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this.register(new s.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new s.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new s.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error(\"start argument out of range\");if(e+i<0)throw new Error(\"Cannot shift elements in list beyond index 0\");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s{Object.defineProperty(t,\"__esModule\",{value:!0}),t.clone=void 0,t.clone=function e(t,i=5){if(\"object\"!=typeof t)return t;const s=Array.isArray(t)?[]:{};for(const r in t)s[r]=i<=1?t[r]:t[r]&&e(t[r],i-1);return s}},8055:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.contrastRatio=t.toPaddedHex=t.rgba=t.rgb=t.css=t.color=t.channels=t.NULL_COLOR=void 0;let i=0,s=0,r=0,n=0;var o,a,h,c,l;function d(e){const t=e.toString(16);return t.length<2?\"0\"+t:t}function _(e,t){return e>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(o||(t.channels=o={})),function(e){function t(e,t){return n=Math.round(255*t),[i,s,r]=l.toChannels(e.rgba),{css:o.toCss(i,s,r,n),rgba:o.toRgba(i,s,r,n)}}e.blend=function(e,t){if(n=(255&t.rgba)/255,1===n)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,c=t.rgba>>8&255,l=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=l+Math.round((a-l)*n),s=d+Math.round((h-d)*n),r=_+Math.round((c-_)*n),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},e.isOpaque=function(e){return 255==(255&e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=l.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=l.toChannels(t),{css:o.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return n=255&e.rgba,t(e,n*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement(\"canvas\");e.width=1,e.height=1;const i=e.getContext(\"2d\",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation=\"copy\",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n=parseInt(e.slice(4,5).repeat(2),16),o.toColor(i,s,r,n);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);if(h)return i=parseInt(h[1]),s=parseInt(h[2]),r=parseInt(h[3]),n=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,n);if(!t||!a)throw new Error(\"css.toColor: Unsupported css format\");if(t.fillStyle=a,t.fillStyle=e,\"string\"!=typeof t.fillStyle)throw new Error(\"css.toColor: Unsupported css format\");if(t.fillRect(0,0,1,1),[i,s,r,n]=t.getImageData(0,0,1,1).data,255!==n)throw new Error(\"css.toColor: Unsupported css format\");return{rgba:o.toRgba(i,s,r,n),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,n=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(c||(t.rgb=c={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,n=e>>8&255;let o=t>>24&255,a=t>>16&255,h=t>>8&255,l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));for(;l0||a>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));return(o<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,n=e>>8&255;let o=t>>24&255,a=t>>16&255,h=t>>8&255,l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));for(;l>>0}e.blend=function(e,t){if(n=(255&t)/255,1===n)return t;const a=t>>24&255,h=t>>16&255,c=t>>8&255,l=e>>24&255,d=e>>16&255,_=e>>8&255;return i=l+Math.round((a-l)*n),s=d+Math.round((h-d)*n),r=_+Math.round((c-_)*n),o.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=c.relativeLuminance(e>>8),n=c.relativeLuminance(i>>8);if(_(r,n)>8));if(o_(r,c.relativeLuminance(t>>8))?n:t}return n}const o=a(e,i,s),h=_(r,c.relativeLuminance(o>>8));if(h_(r,c.relativeLuminance(n>>8))?o:n}return o}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(l||(t.rgba=l={})),t.toPaddedHex=d,t.contrastRatio=_},8969:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreTerminal=void 0;const s=i(844),r=i(2585),n=i(4348),o=i(7866),a=i(744),h=i(7302),c=i(6975),l=i(8460),d=i(1753),_=i(1480),u=i(7994),f=i(9282),v=i(5435),p=i(5981),g=i(2660);let m=!1;class S extends s.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new l.EventEmitter),this._onScroll.event((e=>{this._onScrollApi?.fire(e.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this.register(new s.MutableDisposable),this._onBinary=this.register(new l.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new l.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new l.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new l.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new l.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new l.EventEmitter),this._instantiationService=new n.InstantiationService,this.optionsService=this.register(new h.OptionsService(e)),this._instantiationService.setService(r.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(a.BufferService)),this._instantiationService.setService(r.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(r.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(c.CoreService)),this._instantiationService.setService(r.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(d.CoreMouseService)),this._instantiationService.setService(r.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(_.UnicodeService)),this._instantiationService.setService(r.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(u.CharsetService),this._instantiationService.setService(r.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(g.OscLinkService),this._instantiationService.setService(r.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new v.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,l.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,l.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,l.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,l.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom()))),this.register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this.register(this.optionsService.onMultipleOptionChange([\"windowsMode\",\"windowsPty\"],(()=>this._handleWindowsPtyOptionChange()))),this.register(this._bufferService.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this.register(this._inputHandler.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this.register(new p.WriteBuffer(((e,t)=>this._inputHandler.parse(e,t)))),this.register((0,l.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=r.LogLevelEnum.WARN&&!m&&(this._logService.warn(\"writeSync is unreliable and will be removed soon.\"),m=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,a.MINIMUM_COLS),t=Math.max(t,a.MINIMUM_ROWS),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t,i){this._bufferService.scrollLines(e,t,i)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.buildNumber&&void 0!==t.buildNumber?e=!!(\"conpty\"===t.backend&&t.buildNumber<21376):this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(f.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:\"H\"},(()=>((0,f.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,s.toDisposable)((()=>{for(const t of e)t.dispose()}))}}}t.CoreTerminal=S},8460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.runAndSubscribe=t.forwardEvent=t.EventEmitter=void 0,t.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=e=>(this._listeners.push(e),{dispose:()=>{if(!this._disposed)for(let t=0;tt.fire(e)))},t.runAndSubscribe=function(e,t){return t(void 0),e((e=>t(e)))}},5435:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;const n=i(2584),o=i(7116),a=i(2015),h=i(844),c=i(482),l=i(8437),d=i(8460),_=i(643),u=i(511),f=i(3734),v=i(2585),p=i(1480),g=i(6242),m=i(6351),S=i(5941),C={\"(\":0,\")\":1,\"*\":2,\"+\":3,\"-\":1,\".\":2},b=131072;function w(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var y;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]=\"GET_WIN_SIZE_PIXELS\",e[e.GET_CELL_SIZE_PIXELS=1]=\"GET_CELL_SIZE_PIXELS\"}(y||(t.WindowsOptionsReportType=y={}));let E=0;class k extends h.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,h,_,f,v=new a.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=h,this._coreMouseService=_,this._unicodeService=f,this._parser=v,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new c.StringToUtf32,this._utf8Decoder=new c.Utf8ToUtf32,this._workCell=new u.CellData,this._windowTitle=\"\",this._iconName=\"\",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new d.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new d.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new d.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new d.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new d.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new d.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new d.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new d.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new d.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new d.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new d.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new d.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new d.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new L(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._parser.setCsiHandlerFallback(((e,t)=>{this._logService.debug(\"Unknown CSI code: \",{identifier:this._parser.identToString(e),params:t.toArray()})})),this._parser.setEscHandlerFallback((e=>{this._logService.debug(\"Unknown ESC code: \",{identifier:this._parser.identToString(e)})})),this._parser.setExecuteHandlerFallback((e=>{this._logService.debug(\"Unknown EXECUTE code: \",{code:e})})),this._parser.setOscHandlerFallback(((e,t,i)=>{this._logService.debug(\"Unknown OSC code: \",{identifier:e,action:t,data:i})})),this._parser.setDcsHandlerFallback(((e,t,i)=>{\"HOOK\"===t&&(i=i.toArray()),this._logService.debug(\"Unknown DCS code: \",{identifier:this._parser.identToString(e),action:t,payload:i})})),this._parser.setPrintHandler(((e,t,i)=>this.print(e,t,i))),this._parser.registerCsiHandler({final:\"@\"},(e=>this.insertChars(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"@\"},(e=>this.scrollLeft(e))),this._parser.registerCsiHandler({final:\"A\"},(e=>this.cursorUp(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"A\"},(e=>this.scrollRight(e))),this._parser.registerCsiHandler({final:\"B\"},(e=>this.cursorDown(e))),this._parser.registerCsiHandler({final:\"C\"},(e=>this.cursorForward(e))),this._parser.registerCsiHandler({final:\"D\"},(e=>this.cursorBackward(e))),this._parser.registerCsiHandler({final:\"E\"},(e=>this.cursorNextLine(e))),this._parser.registerCsiHandler({final:\"F\"},(e=>this.cursorPrecedingLine(e))),this._parser.registerCsiHandler({final:\"G\"},(e=>this.cursorCharAbsolute(e))),this._parser.registerCsiHandler({final:\"H\"},(e=>this.cursorPosition(e))),this._parser.registerCsiHandler({final:\"I\"},(e=>this.cursorForwardTab(e))),this._parser.registerCsiHandler({final:\"J\"},(e=>this.eraseInDisplay(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"J\"},(e=>this.eraseInDisplay(e,!0))),this._parser.registerCsiHandler({final:\"K\"},(e=>this.eraseInLine(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"K\"},(e=>this.eraseInLine(e,!0))),this._parser.registerCsiHandler({final:\"L\"},(e=>this.insertLines(e))),this._parser.registerCsiHandler({final:\"M\"},(e=>this.deleteLines(e))),this._parser.registerCsiHandler({final:\"P\"},(e=>this.deleteChars(e))),this._parser.registerCsiHandler({final:\"S\"},(e=>this.scrollUp(e))),this._parser.registerCsiHandler({final:\"T\"},(e=>this.scrollDown(e))),this._parser.registerCsiHandler({final:\"X\"},(e=>this.eraseChars(e))),this._parser.registerCsiHandler({final:\"Z\"},(e=>this.cursorBackwardTab(e))),this._parser.registerCsiHandler({final:\"`\"},(e=>this.charPosAbsolute(e))),this._parser.registerCsiHandler({final:\"a\"},(e=>this.hPositionRelative(e))),this._parser.registerCsiHandler({final:\"b\"},(e=>this.repeatPrecedingCharacter(e))),this._parser.registerCsiHandler({final:\"c\"},(e=>this.sendDeviceAttributesPrimary(e))),this._parser.registerCsiHandler({prefix:\">\",final:\"c\"},(e=>this.sendDeviceAttributesSecondary(e))),this._parser.registerCsiHandler({final:\"d\"},(e=>this.linePosAbsolute(e))),this._parser.registerCsiHandler({final:\"e\"},(e=>this.vPositionRelative(e))),this._parser.registerCsiHandler({final:\"f\"},(e=>this.hVPosition(e))),this._parser.registerCsiHandler({final:\"g\"},(e=>this.tabClear(e))),this._parser.registerCsiHandler({final:\"h\"},(e=>this.setMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"h\"},(e=>this.setModePrivate(e))),this._parser.registerCsiHandler({final:\"l\"},(e=>this.resetMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"l\"},(e=>this.resetModePrivate(e))),this._parser.registerCsiHandler({final:\"m\"},(e=>this.charAttributes(e))),this._parser.registerCsiHandler({final:\"n\"},(e=>this.deviceStatus(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"n\"},(e=>this.deviceStatusPrivate(e))),this._parser.registerCsiHandler({intermediates:\"!\",final:\"p\"},(e=>this.softReset(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"q\"},(e=>this.setCursorStyle(e))),this._parser.registerCsiHandler({final:\"r\"},(e=>this.setScrollRegion(e))),this._parser.registerCsiHandler({final:\"s\"},(e=>this.saveCursor(e))),this._parser.registerCsiHandler({final:\"t\"},(e=>this.windowOptions(e))),this._parser.registerCsiHandler({final:\"u\"},(e=>this.restoreCursor(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"}\"},(e=>this.insertColumns(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"~\"},(e=>this.deleteColumns(e))),this._parser.registerCsiHandler({intermediates:'\"',final:\"q\"},(e=>this.selectProtected(e))),this._parser.registerCsiHandler({intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!0))),this._parser.registerCsiHandler({prefix:\"?\",intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!1))),this._parser.setExecuteHandler(n.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(n.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(n.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(n.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(n.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(n.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(n.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(n.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(n.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new g.OscHandler((e=>(this.setTitle(e),this.setIconName(e),!0)))),this._parser.registerOscHandler(1,new g.OscHandler((e=>this.setIconName(e)))),this._parser.registerOscHandler(2,new g.OscHandler((e=>this.setTitle(e)))),this._parser.registerOscHandler(4,new g.OscHandler((e=>this.setOrReportIndexedColor(e)))),this._parser.registerOscHandler(8,new g.OscHandler((e=>this.setHyperlink(e)))),this._parser.registerOscHandler(10,new g.OscHandler((e=>this.setOrReportFgColor(e)))),this._parser.registerOscHandler(11,new g.OscHandler((e=>this.setOrReportBgColor(e)))),this._parser.registerOscHandler(12,new g.OscHandler((e=>this.setOrReportCursorColor(e)))),this._parser.registerOscHandler(104,new g.OscHandler((e=>this.restoreIndexedColor(e)))),this._parser.registerOscHandler(110,new g.OscHandler((e=>this.restoreFgColor(e)))),this._parser.registerOscHandler(111,new g.OscHandler((e=>this.restoreBgColor(e)))),this._parser.registerOscHandler(112,new g.OscHandler((e=>this.restoreCursorColor(e)))),this._parser.registerEscHandler({final:\"7\"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:\"8\"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:\"D\"},(()=>this.index())),this._parser.registerEscHandler({final:\"E\"},(()=>this.nextLine())),this._parser.registerEscHandler({final:\"H\"},(()=>this.tabSet())),this._parser.registerEscHandler({final:\"M\"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:\"=\"},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:\">\"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:\"c\"},(()=>this.fullReset())),this._parser.registerEscHandler({final:\"n\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"o\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"|\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"}\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"~\"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:\"%\",final:\"@\"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:\"%\",final:\"G\"},(()=>this.selectDefaultCharset()));for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:\"(\",final:e},(()=>this.selectCharset(\"(\"+e))),this._parser.registerEscHandler({intermediates:\")\",final:e},(()=>this.selectCharset(\")\"+e))),this._parser.registerEscHandler({intermediates:\"*\",final:e},(()=>this.selectCharset(\"*\"+e))),this._parser.registerEscHandler({intermediates:\"+\",final:e},(()=>this.selectCharset(\"+\"+e))),this._parser.registerEscHandler({intermediates:\"-\",final:e},(()=>this.selectCharset(\"-\"+e))),this._parser.registerEscHandler({intermediates:\".\",final:e},(()=>this.selectCharset(\".\"+e))),this._parser.registerEscHandler({intermediates:\"/\",final:e},(()=>this.selectCharset(\"/\"+e)));this._parser.registerEscHandler({intermediates:\"#\",final:\"8\"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((e=>(this._logService.error(\"Parsing error: \",e),e))),this._parser.registerDcsHandler({intermediates:\"$\",final:\"q\"},new m.DcsHandler(((e,t)=>this.requestStatusString(e,t))))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){this._logService.logLevel<=v.LogLevelEnum.WARN&&Promise.race([e,new Promise(((e,t)=>setTimeout((()=>t(\"#SLOW_TIMEOUT\")),5e3)))]).catch((e=>{if(\"#SLOW_TIMEOUT\"!==e)throw e;console.warn(\"async parser handler taking longer than 5000 ms\")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,n=0;const o=this._parseStack.paused;if(o){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>b&&(n=this._parseStack.position+b)}if(this._logService.logLevel<=v.LogLevelEnum.DEBUG&&this._logService.debug(\"parsing data\"+(\"string\"==typeof e?` \"${e}\"`:` \"${Array.prototype.map.call(e,(e=>String.fromCharCode(e))).join(\"\")}\"`),\"string\"==typeof e?e.split(\"\").map((e=>e.charCodeAt(0))):e),this._parseBuffer.lengthb)for(let t=n;t0&&2===f.getWidth(this._activeBuffer.x-1)&&f.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(h){const e=f;let t=this._activeBuffer.x-m;for(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),m>0&&f instanceof l.BufferLine&&f.copyCellsFrom(e,t,0,m,!1);t=0;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}else if(d&&(f.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===f.getWidth(a-1)&&f.setCellFromCodepoint(a-1,_.NULL_CELL_CODE,_.NULL_CELL_WIDTH,u)),f.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===f.getWidth(this._activeBuffer.x)&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return\"t\"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(e=>!w(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e)))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new m.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new g.OscHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(n.isWrapped=!1)}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols&&(this._activeBuffer.lines.get(i+1).isWrapped=!1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is(\"xterm\")||this._is(\"rxvt-unicode\")||this._is(\"screen\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[?1;2c\"):this._is(\"linux\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[?6c\")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(\"xterm\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>0;276;0c\"):this._is(\"rxvt-unicode\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>85;95;0c\"):this._is(\"linux\")?this._coreService.triggerDataEvent(e.params[0]+\"c\"):this._is(\"screen\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[>83;40003;0c\")),!0}_is(e){return 0===(this._optionsService.rawOptions.termName+\"\").indexOf(e)}setMode(e){for(let t=0;te?1:2,u=e.params[0];return f=u,v=t?2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(d.convertEol):0:1===u?_(i.applicationCursorKeys):3===u?d.windowOptions.setWinLines?80===h?2:132===h?1:0:0:6===u?_(i.origin):7===u?_(i.wraparound):8===u?3:9===u?_(\"X10\"===s):12===u?_(d.cursorBlink):25===u?_(!o.isCursorHidden):45===u?_(i.reverseWraparound):66===u?_(i.applicationKeypad):67===u?4:1e3===u?_(\"VT200\"===s):1002===u?_(\"DRAG\"===s):1003===u?_(\"ANY\"===s):1004===u?_(i.sendFocus):1005===u?4:1006===u?_(\"SGR\"===r):1015===u?4:1016===u?_(\"SGR_PIXELS\"===r):1048===u?1:47===u||1047===u||1049===u?_(c===l):2004===u?_(i.bracketedPasteMode):0,o.triggerDataEvent(`${n.C0.ESC}[${t?\"\":\"?\"}${f};${v}$y`),!0;var f,v}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=f.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-50331904,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,n=0;do{if(s[n+r]=e.params[t+n],e.hasSubParams(t+n)){const i=e.getSubParams(t+n);let o=0;do{5===s[1]&&(r=1),s[n+o+1+r]=i[o]}while(++o=2||2===s[1]&&n+r>=5)break;s[1]&&(r=1)}while(++n+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-50331904,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-50331904,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-50331904,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-50331904,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):100===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg,s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):this._logService.debug(\"Unknown SGR attribute: %d.\",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${n.C0.ESC}[0n`);break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[${e};${t}R`)}return!0}deviceStatusPrivate(e){if(6===e.params[0]){const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[?${e};${t}R`)}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle=\"block\";break;case 3:case 4:this._optionsService.options.cursorStyle=\"underline\";break;case 5:case 6:this._optionsService.options.cursorStyle=\"bar\"}const i=t%2==1;return this._optionsService.options.cursorBlink=i,!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!w(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(y.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(y.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${n.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){const t=[],i=e.split(\";\");for(;i.length>1;){const e=i.shift(),s=i.shift();if(/^\\d+$/.exec(e)){const i=parseInt(e);if(D(i))if(\"?\"===s)t.push({type:0,index:i});else{const e=(0,S.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.split(\";\");return!(t.length<2)&&(t[1]?this._createHyperlink(t[0],t[1]):!t[0]&&this._finishHyperlink())}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(\":\");let s;const r=i.findIndex((e=>e.startsWith(\"id=\")));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(\";\");for(let e=0;e=this._specialColors.length);++e,++t)if(\"?\"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,S.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(\";\");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new u.CellData;e.content=1<<22|\"E\".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${n.C0.ESC}${e}${n.C0.ESC}\\\\`),!0))('\"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}\"q`:'\"p'===e?'P1$r61;1\"p':\"r\"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:\"m\"===e?\"P1$r0m\":\" q\"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:\"P0$r\")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}}t.InputHandler=k;let L=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(E=e,e=t,t=E),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function D(e){return 0<=e&&e<256}L=s([r(0,v.IBufferService)],L)},844:(e,t)=>{function i(e){for(const t of e)t.dispose();e.length=0}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.toDisposable=t.MutableDisposable=t.Disposable=void 0,t.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.length=0}register(e){return this._disposables.push(e),e}unregister(e){const t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)}},t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}},t.toDisposable=function(e){return{dispose:e}},t.disposeArray=i,t.getDisposeArrayDisposable=function(e){return{dispose:()=>i(e)}}},1505:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,n){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,n)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},6114:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.getSafariVersion=t.isSafari=t.isLegacyEdge=t.isFirefox=t.isNode=void 0,t.isNode=\"undefined\"!=typeof process&&\"title\"in process;const i=t.isNode?\"node\":navigator.userAgent,s=t.isNode?\"node\":navigator.platform;t.isFirefox=i.includes(\"Firefox\"),t.isLegacyEdge=i.includes(\"Edge\"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\\/(\\d+)/);return null===e||e.length<2?0:parseInt(e[1])},t.isMac=[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].includes(s),t.isIpad=\"iPad\"===s,t.isIphone=\"iPhone\"===s,t.isWindows=[\"Windows\",\"Win16\",\"Win32\",\"WinCE\"].includes(s),t.isLinux=s.indexOf(\"Linux\")>=0,t.isChromeOS=/\\bCrOS\\b/.test(i)},6106:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.SortedList=void 0;let i=0;t.SortedList=class{constructor(e){this._getKey=e,this._array=[]}clear(){this._array.length=0}insert(e){0!==this._array.length?(i=this._search(this._getKey(e)),this._array.splice(i,0,e)):this._array.push(e)}delete(e){if(0===this._array.length)return!1;const t=this._getKey(e);if(void 0===t)return!1;if(i=this._search(t),-1===i)return!1;if(this._getKey(this._array[i])!==t)return!1;do{if(this._array[i]===e)return this._array.splice(i,1),!0}while(++i=this._array.length)&&this._getKey(this._array[i])===e))do{yield this._array[i]}while(++i=this._array.length)&&this._getKey(this._array[i])===e))do{t(this._array[i])}while(++i=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},7226:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;const s=i(6114);class r{constructor(){this._tasks=[],this._i=0}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ir)return s-t<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),void this._start();s=r}this.clear()}}class n extends r{_requestCallback(e){return setTimeout((()=>e(this._createDeadline(16))))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=Date.now()+e;return{timeRemaining:()=>Math.max(0,t-Date.now())}}}t.PriorityTaskQueue=n,t.IdleTaskQueue=!s.isNode&&\"requestIdleCallback\"in window?class extends r{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:n,t.DebouncedIdleTask=class{constructor(){this._queue=new t.IdleTaskQueue}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}}},9282:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.updateWindowsModeWrappedState=void 0;const s=i(643);t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)}},3734:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return 50331648==(50331648&this.fg)}isBgRGB(){return 50331648==(50331648&this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return 0==(50331648&this.fg)}isBgDefault(){return 0==(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}t.ExtendedAttrs=s},9092:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(6349),r=i(7226),n=i(3734),o=i(8437),a=i(4634),h=i(511),c=i(643),l=i(4863),d=i(7116);t.MAX_BUFFER_SIZE=4294967295,t.Buffer=class{constructor(e,t,i){this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=o.DEFAULT_ATTR_DATA.clone(),this.savedCharset=d.DEFAULT_CHARSET,this.markers=[],this._nullCell=h.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=h.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new r.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new o.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){void 0===e&&(e=o.DEFAULT_ATTR_DATA);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(o.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+n+1?(this.ybase--,n++,this.ydisp>0&&this.ydisp--):this.lines.push(new o.BufferLine(e,i)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),n&&(this.y+=n),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&\"conpty\"===e.backend&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=(0,a.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(o.DEFAULT_ATTR_DATA));if(i.length>0){const s=(0,a.reflowLargerCreateNewLayout)(this.lines,i);(0,a.reflowLargerApplyNewLayout)(this.lines,s.layout),this._reflowLargerAdjustViewport(e,t,s.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(o.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let h=this.lines.get(n);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;const c=[h];for(;h.isWrapped&&n>0;)h=this.lines.get(--n),c.unshift(h);const l=this.ybase+this.y;if(l>=n&&l0&&(s.push({start:n+c.length+r,newLines:v}),r+=v.length),c.push(...v);let p=_.length-1,g=_[p];0===g&&(p--,g=_[p]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[p])break;if(c[p].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(p--,g=_[p]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,a.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;c--)if(a&&a.start>n+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(c--,a.newLines[e]);c++,e.push({index:n+1,amount:a.newLines.length}),h+=a.newLines.length,a=s[++o]}else this.lines.set(c,t[n--]);let c=0;for(let t=e.length-1;t>=0;t--)e[t].index+=c,this.lines.onInsertEmitter.fire(e[t]),c+=e[t].amount;const l=Math.max(0,i+r-this.lines.maxLength);l>0&&this.lines.onTrimEmitter.fire(l)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):\"\"}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()}))),t.register(this.lines.onInsert((e=>{t.line>=e.index&&(t.line+=e.amount)}))),t.register(this.lines.onDelete((e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)}))),t.register(t.onDispose((()=>this._removeMarker(t)))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}},8437:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(3734),r=i(511),n=i(643),o=i(482);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;class h{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);const s=t||r.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,o.stringFromCodePoint)(2097151&t):\"\"}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t}setCell(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){268435456&s.bg&&(this._extendedAttrs[e]=s.extended),this._data[3*e+0]=t|i<<22,this._data[3*e+1]=s.fg,this._data[3*e+2]=s.bg}addCodepointToCell(e,t,i){let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,o.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,o.stringFromCodePoint)(2097151&s)+(0,o.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,s));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){const n=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=n[3*(t+r)+e];268435456&n[3*(t+r)+2]&&(this._extendedAttrs[i+r]=e._extendedAttrs[t+r])}else for(let r=0;r=t&&(this._combined[r-t+i]=e._combined[r])}}translateToString(e,t,i,s){t=t??0,i=i??this.length,e&&(i=Math.min(i,this.getTrimmedLength())),s&&(s.length=0);let r=\"\";for(;t>22||1}return s&&s.push(t),r}}t.BufferLine=h},4841:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getRangeLength=void 0,t.getRangeLength=function(e,t){if(e.start.y>e.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},4634:(e,t)=>{function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,s,r,n){const o=[];for(let a=0;a=a&&r0&&(e>d||0===l[e].getTrimmedLength());e--)v++;v>0&&(o.push(a+l.length-v),o.push(v)),a+=l.length-1}return o},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],n=0;for(let o=0;oi(e,r,t))).reduce(((e,t)=>e+t));let o=0,a=0,h=0;for(;hc&&(o-=c,a++);const l=2===e[a].getWidth(o-1);l&&o--;const d=l?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},5295:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferSet=void 0;const s=i(8460),r=i(844),n=i(9092);class o extends r.Disposable{constructor(e,t){super(),this._optionsService=e,this._bufferService=t,this._onBufferActivate=this.register(new s.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange(\"scrollback\",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this.register(this._optionsService.onSpecificOptionChange(\"tabStopWidth\",(()=>this.setupTabStops())))}reset(){this._normal=new n.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new n.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=o},511:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CellData=void 0;const s=i(482),r=i(643),n=i(3734);class o extends n.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new n.ExtendedAttrs,this.combinedData=\"\"}static fromCharData(e){const t=new o;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):\"\"}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.CellData=o},643:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR=\"\",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=\" \",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},4863:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Marker=void 0;const s=i(8460),r=i(844);class n{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=n._nextId++,this._onDispose=this.register(new s.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,r.disposeArray)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=n,n._nextId=1},7116:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={\"`\":\"◆\",a:\"▒\",b:\"␉\",c:\"␌\",d:\"␍\",e:\"␊\",f:\"°\",g:\"±\",h:\"␤\",i:\"␋\",j:\"┘\",k:\"┐\",l:\"┌\",m:\"└\",n:\"┼\",o:\"⎺\",p:\"⎻\",q:\"─\",r:\"⎼\",s:\"⎽\",t:\"├\",u:\"┤\",v:\"┴\",w:\"┬\",x:\"│\",y:\"≤\",z:\"≥\",\"{\":\"π\",\"|\":\"≠\",\"}\":\"£\",\"~\":\"·\"},t.CHARSETS.A={\"#\":\"£\"},t.CHARSETS.B=void 0,t.CHARSETS[4]={\"#\":\"£\",\"@\":\"¾\",\"[\":\"ij\",\"\\\\\":\"½\",\"]\":\"|\",\"{\":\"¨\",\"|\":\"f\",\"}\":\"¼\",\"~\":\"´\"},t.CHARSETS.C=t.CHARSETS[5]={\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.R={\"#\":\"£\",\"@\":\"à\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"§\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"¨\"},t.CHARSETS.Q={\"@\":\"à\",\"[\":\"â\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",\"`\":\"ô\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"û\"},t.CHARSETS.K={\"@\":\"§\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Ü\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"ß\"},t.CHARSETS.Y={\"#\":\"£\",\"@\":\"§\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"é\",\"`\":\"ù\",\"{\":\"à\",\"|\":\"ò\",\"}\":\"è\",\"~\":\"ì\"},t.CHARSETS.E=t.CHARSETS[6]={\"@\":\"Ä\",\"[\":\"Æ\",\"\\\\\":\"Ø\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"ä\",\"{\":\"æ\",\"|\":\"ø\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.Z={\"#\":\"£\",\"@\":\"§\",\"[\":\"¡\",\"\\\\\":\"Ñ\",\"]\":\"¿\",\"{\":\"°\",\"|\":\"ñ\",\"}\":\"ç\"},t.CHARSETS.H=t.CHARSETS[7]={\"@\":\"É\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS[\"=\"]={\"#\":\"ù\",\"@\":\"à\",\"[\":\"é\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",_:\"è\",\"`\":\"ô\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"û\"}},2584:(e,t)=>{var i,s,r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.C1_ESCAPED=t.C1=t.C0=void 0,function(e){e.NUL=\"\\0\",e.SOH=\"\u0001\",e.STX=\"\u0002\",e.ETX=\"\u0003\",e.EOT=\"\u0004\",e.ENQ=\"\u0005\",e.ACK=\"\u0006\",e.BEL=\"\u0007\",e.BS=\"\\b\",e.HT=\"\\t\",e.LF=\"\\n\",e.VT=\"\\v\",e.FF=\"\\f\",e.CR=\"\\r\",e.SO=\"\u000e\",e.SI=\"\u000f\",e.DLE=\"\u0010\",e.DC1=\"\u0011\",e.DC2=\"\u0012\",e.DC3=\"\u0013\",e.DC4=\"\u0014\",e.NAK=\"\u0015\",e.SYN=\"\u0016\",e.ETB=\"\u0017\",e.CAN=\"\u0018\",e.EM=\"\u0019\",e.SUB=\"\u001a\",e.ESC=\"\u001b\",e.FS=\"\u001c\",e.GS=\"\u001d\",e.RS=\"\u001e\",e.US=\"\u001f\",e.SP=\" \",e.DEL=\"\"}(i||(t.C0=i={})),function(e){e.PAD=\"€\",e.HOP=\"\",e.BPH=\"‚\",e.NBH=\"ƒ\",e.IND=\"„\",e.NEL=\"…\",e.SSA=\"†\",e.ESA=\"‡\",e.HTS=\"ˆ\",e.HTJ=\"‰\",e.VTS=\"Š\",e.PLD=\"‹\",e.PLU=\"Œ\",e.RI=\"\",e.SS2=\"Ž\",e.SS3=\"\",e.DCS=\"\",e.PU1=\"‘\",e.PU2=\"’\",e.STS=\"“\",e.CCH=\"”\",e.MW=\"•\",e.SPA=\"–\",e.EPA=\"—\",e.SOS=\"˜\",e.SGCI=\"™\",e.SCI=\"š\",e.CSI=\"›\",e.ST=\"œ\",e.OSC=\"\",e.PM=\"ž\",e.APC=\"Ÿ\"}(s||(t.C1=s={})),function(e){e.ST=`${i.ESC}\\\\`}(r||(t.C1_ESCAPED=r={}))},7399:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.evaluateKeyboardEvent=void 0;const s=i(2584),r={48:[\"0\",\")\"],49:[\"1\",\"!\"],50:[\"2\",\"@\"],51:[\"3\",\"#\"],52:[\"4\",\"$\"],53:[\"5\",\"%\"],54:[\"6\",\"^\"],55:[\"7\",\"&\"],56:[\"8\",\"*\"],57:[\"9\",\"(\"],186:[\";\",\":\"],187:[\"=\",\"+\"],188:[\",\",\"<\"],189:[\"-\",\"_\"],190:[\".\",\">\"],191:[\"/\",\"?\"],192:[\"`\",\"~\"],219:[\"[\",\"{\"],220:[\"\\\\\",\"|\"],221:[\"]\",\"}\"],222:[\"'\",'\"']};t.evaluateKeyboardEvent=function(e,t,i,n){const o={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:\"UIKeyInputUpArrow\"===e.key?o.key=t?s.C0.ESC+\"OA\":s.C0.ESC+\"[A\":\"UIKeyInputLeftArrow\"===e.key?o.key=t?s.C0.ESC+\"OD\":s.C0.ESC+\"[D\":\"UIKeyInputRightArrow\"===e.key?o.key=t?s.C0.ESC+\"OC\":s.C0.ESC+\"[C\":\"UIKeyInputDownArrow\"===e.key&&(o.key=t?s.C0.ESC+\"OB\":s.C0.ESC+\"[B\");break;case 8:o.key=e.ctrlKey?\"\\b\":s.C0.DEL,e.altKey&&(o.key=s.C0.ESC+o.key);break;case 9:if(e.shiftKey){o.key=s.C0.ESC+\"[Z\";break}o.key=s.C0.HT,o.cancel=!0;break;case 13:o.key=e.altKey?s.C0.ESC+s.C0.CR:s.C0.CR,o.cancel=!0;break;case 27:o.key=s.C0.ESC,e.altKey&&(o.key=s.C0.ESC+s.C0.ESC),o.cancel=!0;break;case 37:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"D\",o.key===s.C0.ESC+\"[1;3D\"&&(o.key=s.C0.ESC+(i?\"b\":\"[1;5D\"))):o.key=t?s.C0.ESC+\"OD\":s.C0.ESC+\"[D\";break;case 39:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"C\",o.key===s.C0.ESC+\"[1;3C\"&&(o.key=s.C0.ESC+(i?\"f\":\"[1;5C\"))):o.key=t?s.C0.ESC+\"OC\":s.C0.ESC+\"[C\";break;case 38:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"A\",i||o.key!==s.C0.ESC+\"[1;3A\"||(o.key=s.C0.ESC+\"[1;5A\")):o.key=t?s.C0.ESC+\"OA\":s.C0.ESC+\"[A\";break;case 40:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"B\",i||o.key!==s.C0.ESC+\"[1;3B\"||(o.key=s.C0.ESC+\"[1;5B\")):o.key=t?s.C0.ESC+\"OB\":s.C0.ESC+\"[B\";break;case 45:e.shiftKey||e.ctrlKey||(o.key=s.C0.ESC+\"[2~\");break;case 46:o.key=a?s.C0.ESC+\"[3;\"+(a+1)+\"~\":s.C0.ESC+\"[3~\";break;case 36:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"H\":t?s.C0.ESC+\"OH\":s.C0.ESC+\"[H\";break;case 35:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"F\":t?s.C0.ESC+\"OF\":s.C0.ESC+\"[F\";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key=s.C0.ESC+\"[5;\"+(a+1)+\"~\":o.key=s.C0.ESC+\"[5~\";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key=s.C0.ESC+\"[6;\"+(a+1)+\"~\":o.key=s.C0.ESC+\"[6~\";break;case 112:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"P\":s.C0.ESC+\"OP\";break;case 113:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"Q\":s.C0.ESC+\"OQ\";break;case 114:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"R\":s.C0.ESC+\"OR\";break;case 115:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"S\":s.C0.ESC+\"OS\";break;case 116:o.key=a?s.C0.ESC+\"[15;\"+(a+1)+\"~\":s.C0.ESC+\"[15~\";break;case 117:o.key=a?s.C0.ESC+\"[17;\"+(a+1)+\"~\":s.C0.ESC+\"[17~\";break;case 118:o.key=a?s.C0.ESC+\"[18;\"+(a+1)+\"~\":s.C0.ESC+\"[18~\";break;case 119:o.key=a?s.C0.ESC+\"[19;\"+(a+1)+\"~\":s.C0.ESC+\"[19~\";break;case 120:o.key=a?s.C0.ESC+\"[20;\"+(a+1)+\"~\":s.C0.ESC+\"[20~\";break;case 121:o.key=a?s.C0.ESC+\"[21;\"+(a+1)+\"~\":s.C0.ESC+\"[21~\";break;case 122:o.key=a?s.C0.ESC+\"[23;\"+(a+1)+\"~\":s.C0.ESC+\"[23~\";break;case 123:o.key=a?s.C0.ESC+\"[24;\"+(a+1)+\"~\":s.C0.ESC+\"[24~\";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(i&&!n||!e.altKey||e.metaKey)!i||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey?e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?o.key=e.key:e.key&&e.ctrlKey&&(\"_\"===e.key&&(o.key=s.C0.US),\"@\"===e.key&&(o.key=s.C0.NUL)):65===e.keyCode&&(o.type=1);else{const t=r[e.keyCode],i=t?.[e.shiftKey?1:0];if(i)o.key=s.C0.ESC+i;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=s.C0.ESC+i}else if(32===e.keyCode)o.key=s.C0.ESC+(e.ctrlKey?s.C0.NUL:\" \");else if(\"Dead\"===e.key&&e.code.startsWith(\"Key\")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=s.C0.ESC+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key=s.C0.NUL:e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key=s.C0.DEL:219===e.keyCode?o.key=s.C0.ESC:220===e.keyCode?o.key=s.C0.FS:221===e.keyCode&&(o.key=s.C0.GS)}return o}},482:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s=\"\";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let n=r;n=i)return this._interim=r,s;const o=e.charCodeAt(n);56320<=o&&o<=57343?t[s++]=1024*(r-55296)+o-56320+65536:(t[s++]=r,t[s++]=o)}else 65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,n,o,a=0,h=0,c=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let n,o=0;for(;(n=63&this.interim[++o])&&o<4;)r<<=6,r|=n;const h=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,l=h-o;for(;c=i)return 0;if(n=e[c++],128!=(192&n)){c--,s=!0;break}this.interim[o++]=n,r<<=6,r|=63&n}s||(2===h?r<128?c--:t[a++]=r:3===h?r<2048||r>=55296&&r<=57343||65279===r||(t[a++]=r):r<65536||r>1114111||(t[a++]=r)),this.interim.fill(0)}const l=i-4;let d=c;for(;d=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(h=(31&s)<<6|63&r,h<128){d--;continue}t[a++]=h}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,a;if(n=e[d++],128!=(192&n)){d--;continue}if(h=(15&s)<<12|(63&r)<<6|63&n,h<2048||h>=55296&&h<=57343||65279===h)continue;t[a++]=h}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,a;if(n=e[d++],128!=(192&n)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=n,a;if(o=e[d++],128!=(192&o)){d--;continue}if(h=(7&s)<<18|(63&r)<<12|(63&n)<<6|63&o,h<65536||h>1114111)continue;t[a++]=h}}return a}}},225:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeV6=void 0;const s=i(1480),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],n=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let o;t.UnicodeV6=class{constructor(){if(this.version=\"6\",!o){o=new Uint8Array(65536),o.fill(1),o[0]=0,o.fill(0,1,32),o.fill(0,127,160),o.fill(2,4352,4448),o[9001]=2,o[9002]=2,o.fill(2,11904,42192),o[12351]=1,o.fill(2,44032,55204),o.fill(2,63744,64256),o.fill(2,65040,65050),o.fill(2,65072,65136),o.fill(2,65280,65377),o.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},5981:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WriteBuffer=void 0;const s=i(8460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new s.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,t){if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(this._pendingData>5e7)throw new Error(\"write data discarded, use flow control to avoid losing data\");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}_innerWrite(e=0,t=!0){const i=e||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>Date.now()-i>=12?setTimeout((()=>this._innerWrite(0,e))):this._innerWrite(i,e);return void s.catch((e=>(queueMicrotask((()=>{throw e})),Promise.resolve(!1)))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,Date.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((()=>this._innerWrite()))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},5941:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.toRgbString=t.parseColor=void 0;const i=/^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/,s=/^[\\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?\"0\"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(0===t.indexOf(\"rgb:\")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(0===t.indexOf(\"#\")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,n]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(n,t)}`}},5770:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},6351:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(482),r=i(8742),n=i(5770),o=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=o,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,\"HOOK\",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,\"PUT\",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,\"UNHOOK\",e);this._active=o,this._ident=0}};const a=new r.Params;a.addParam(0),t.DcsHandler=class{constructor(e){this._handler=e,this._data=\"\",this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,s.utf32ToString)(e,t,i),this._data.length>n.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data,this._params),t instanceof Promise))return t.then((e=>(this._params=a,this._data=\"\",this._hitLimit=!1,e)));return this._params=a,this._data=\"\",this._hitLimit=!1,t}}},2015:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(844),r=i(8742),n=i(6242),o=i(6351);class a{constructor(e){this.table=new Uint8Array(e)}setDefault(e,t){this.table.fill(e<<4|t)}add(e,t,i,s){this.table[t<<8|e]=i<<4|s}addMany(e,t,i,s){for(let r=0;rt)),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const n=i(0,14);let o;for(o in e.setDefault(1,0),e.addMany(s,0,2,0),n)e.addMany([24,26,153,154],o,3,0),e.addMany(i(128,144),o,3,0),e.addMany(i(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(28,32),9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(i(28,32),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(28,32),10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(28,32),12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(h,0,2,0),e.add(h,8,5,8),e.add(h,6,0,6),e.add(h,11,0,11),e.add(h,13,13,13),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,s.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this.register(new n.OscParser),this._dcsParser=this.register(new o.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:\"\\\\\"},(()=>!0))}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error(\"only one byte as prefix supported\");if(i=e.prefix.charCodeAt(0),i&&60>i||i>63)throw new Error(\"prefix must be in range 0x3c .. 0x3f\")}if(e.intermediates){if(e.intermediates.length>2)throw new Error(\"only two bytes as intermediates are supported\");for(let t=0;ts||s>47)throw new Error(\"intermediate must be in range 0x20 .. 0x2f\");i<<=8,i|=s}}if(1!==e.final.length)throw new Error(\"final must be a single byte\");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join(\"\")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);void 0===this._escHandlers[i]&&(this._escHandlers[i]=[]);const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){this._executeHandlers[e.charCodeAt(0)]=t}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);void 0===this._csiHandlers[i]&&(this._csiHandlers[i]=[]);const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r=0,n=0,o=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,o=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error(\"improper continuation due to previous async handler, giving up parsing\");const t=this._parseStack.handlers;let n=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](this._params),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 4:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 6:if(r=e[this._parseStack.chunkPos],s=this._dcsParser.unhook(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(r=e[this._parseStack.chunkPos],s=this._oscParser.end(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,o=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let i=o;i>4){case 2:for(let s=i+1;;++s){if(s>=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=0&&(s=o[a](this._params),!0!==s);a--)if(s instanceof Promise)return this._preserveStack(3,o,a,n,i),s;a<0&&this._csiHandlerFb(this._collect<<8|r,this._params),this.precedingJoinState=0;break;case 8:do{switch(r){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(r-48)}}while(++i47&&r<60);i--;break;case 9:this._collect<<=8,this._collect|=r;break;case 10:const c=this._escHandlers[this._collect<<8|r];let l=c?c.length-1:-1;for(;l>=0&&(s=c[l](),!0!==s);l--)if(s instanceof Promise)return this._preserveStack(4,c,l,n,i),s;l<0&&this._escHandlerFb(this._collect<<8|r),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|r,this._params);break;case 13:for(let s=i+1;;++s)if(s>=t||24===(r=e[s])||26===r||27===r||r>127&&r=t||(r=e[s])<32||r>127&&r{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(5770),r=i(482),n=[];t.OscParser=class{constructor(){this._state=0,this._active=n,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=n,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,\"START\")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,\"PUT\",(0,r.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,\"END\",e);this._active=n,this._id=-1,this._state=0}}},t.OscHandler=class{constructor(e){this._handler=e,this._data=\"\",this._hitLimit=!1}start(){this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,r.utf32ToString)(e,t,i),this._data.length>s.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data),t instanceof Promise))return t.then((e=>(this._data=\"\",this._hitLimit=!1,e)));return this._data=\"\",this._hitLimit=!1,t}}},8742:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Params=void 0;const i=2147483647;class s{static fromArray(e){const t=new s;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error(\"maxSubParamsLength must not be greater than 256\");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new s(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>i?i:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParams[this._subParamsLength++]=e>i?i:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const s=this._digitIsSub?this._subParams:this.params,r=s[t-1];s[t-1]=~r?Math.min(10*r+e,i):e}}t.Params=s},5741:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferApiView=void 0;const s=i(3785),r=i(511);t.BufferApiView=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){const t=this._buffer.lines.get(e);if(t)return new s.BufferLineApiView(t)}getNullCell(){return new r.CellData}}},3785:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLineApiView=void 0;const s=i(511);t.BufferLineApiView=class{constructor(e){this._line=e}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},8285:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(8771),r=i(8460),n=i(844);class o extends n.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this.register(new r.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,\"normal\"),this._alternate=new s.BufferApiView(this._core.buffers.alt,\"alternate\"),this._core.buffers.onBufferActivate((()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error(\"Active buffer is neither normal nor alternate\")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=o},7975:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,(e=>t(e.toArray())))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,((e,i)=>t(e,i.toArray())))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}}},7090:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},744:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;const n=i(8460),o=i(844),a=i(5295),h=i(2585);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;let c=t.BufferService=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e){super(),this.isUserScrolling=!1,this._onResize=this.register(new n.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new n.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,t.MINIMUM_COLS),this.rows=Math.max(e.rawOptions.rows||0,t.MINIMUM_ROWS),this.buffers=this.register(new a.BufferSet(e,this))}resize(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,n=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;n===i.lines.length-1?e?i.lines.recycle().copyFrom(s):i.lines.push(s.clone()):i.lines.splice(n+1,0,s.clone()),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=n-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(n,s.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t,i){const s=this.buffer;if(e<0){if(0===s.ydisp)return;this.isUserScrolling=!0}else e+s.ydisp>=s.ybase&&(this.isUserScrolling=!1);const r=s.ydisp;s.ydisp=Math.max(Math.min(s.ydisp+e,s.ybase),0),r!==s.ydisp&&(t||this._onScroll.fire(s.ydisp))}};t.BufferService=c=s([r(0,h.IOptionsService)],c)},7994:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},1753:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreMouseService=void 0;const n=i(2585),o=i(8460),a=i(844),h={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function c(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const l=String.fromCharCode,d={DEFAULT:e=>{const t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?\"\":`\u001b[M${l(t[0])}${l(t[1])}${l(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.x};${e.y}${t}`}};let _=t.CoreMouseService=class extends a.Disposable{constructor(e,t){super(),this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol=\"\",this._activeEncoding=\"\",this._lastEvent=null,this._onProtocolChange=this.register(new o.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(h))this.addProtocol(e,h[e]);for(const e of Object.keys(d))this.addEncoding(e,d[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol \"${e}\"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding \"${e}\"`);this._activeEncoding=e}reset(){this.activeProtocol=\"NONE\",this.activeEncoding=\"DEFAULT\",this._lastEvent=null}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,\"SGR_PIXELS\"===this._activeEncoding))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;const t=this._encodings[this._activeEncoding](e);return t&&(\"DEFAULT\"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.CoreMouseService=_=s([r(0,n.IBufferService),r(1,n.ICoreService)],_)},6975:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreService=void 0;const n=i(1439),o=i(8460),a=i(844),h=i(2585),c=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0});let d=t.CoreService=class extends a.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new o.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new o.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new o.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new o.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}reset(){this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onBinary.fire(e))}};t.CoreService=d=s([r(0,h.IBufferService),r(1,h.ILogService),r(2,h.IOptionsService)],d)},9074:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DecorationService=void 0;const s=i(8055),r=i(8460),n=i(844),o=i(6106);let a=0,h=0;class c extends n.Disposable{get decorations(){return this._decorations.values()}constructor(){super(),this._decorations=new o.SortedList((e=>e?.marker.line)),this._onDecorationRegistered=this.register(new r.EventEmitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this.register(new r.EventEmitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this.register((0,n.toDisposable)((()=>this.reset())))}registerDecoration(e){if(e.marker.isDisposed)return;const t=new l(e);if(t){const e=t.marker.onDispose((()=>t.dispose()));t.onDispose((()=>{t&&(this._decorations.delete(t)&&this._onDecorationRemoved.fire(t),e.dispose())})),this._decorations.insert(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,t,i){let s=0,r=0;for(const n of this._decorations.getKeyIterator(t))s=n.options.x??0,r=s+(n.options.width??1),e>=s&&e{a=t.options.x??0,h=a+(t.options.width??1),e>=a&&e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(2585),r=i(8343);class n{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=n,t.InstantiationService=class{constructor(){this._services=new n,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort(((e,t)=>e.index-t.index)),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id}.`);s.push(i)}const n=i.length>0?i[0].index:t.length;if(t.length!==n)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${n+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7866:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.traceCall=t.setTraceLogger=t.LogService=void 0;const n=i(844),o=i(2585),a={trace:o.LogLevelEnum.TRACE,debug:o.LogLevelEnum.DEBUG,info:o.LogLevelEnum.INFO,warn:o.LogLevelEnum.WARN,error:o.LogLevelEnum.ERROR,off:o.LogLevelEnum.OFF};let h,c=t.LogService=class extends n.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=o.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange(\"logLevel\",(()=>this._updateLogLevel()))),h=this}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tJSON.stringify(e))).join(\", \")})`);const t=s.apply(this,e);return h.trace(`GlyphRenderer#${s.name} return`,t),t}}},7302:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(8460),r=i(844),n=i(6114);t.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:\"block\",cursorWidth:1,cursorInactiveStyle:\"outline\",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:\"alt\",fastScrollSensitivity:5,fontFamily:\"courier-new, courier, monospace\",fontSize:15,fontWeight:\"normal\",fontWeightBold:\"bold\",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:\"info\",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rescaleOverlappingGlyphs:!1,rightClickSelectsWord:n.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:\" ()[]{}',\\\"`\",altClickMovesCursor:!0,convertEol:!1,termName:\"xterm\",cancelEvents:!1,overviewRulerWidth:0};const o=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"];class a extends r.Disposable{constructor(e){super(),this._onOptionChange=this.register(new s.EventEmitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this.register((0,r.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(e,t){return this.onOptionChange((i=>{i===e&&t(this.rawOptions[e])}))}onMultipleOptionChange(e,t){return this.onOptionChange((i=>{-1!==e.indexOf(i)&&t()}))}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case\"cursorStyle\":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return\"block\"===e||\"underline\"===e||\"bar\"===e}(i))throw new Error(`\"${i}\" is not a valid value for ${e}`);break;case\"wordSeparator\":i||(i=t.DEFAULT_OPTIONS[e]);break;case\"fontWeight\":case\"fontWeightBold\":if(\"number\"==typeof i&&1<=i&&i<=1e3)break;i=o.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case\"cursorWidth\":i=Math.floor(i);case\"lineHeight\":case\"tabStopWidth\":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case\"minimumContrastRatio\":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case\"scrollback\":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case\"fastScrollSensitivity\":case\"scrollSensitivity\":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case\"rows\":case\"cols\":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case\"windowsPty\":i=i??{}}return i}}t.OptionsService=a},2660:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscLinkService=void 0;const n=i(2585);let o=t.OscLinkService=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose((()=>this._removeMarkerFromLink(s,i))),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const n=t.addMarker(t.ybase+t.y),o={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[n]};return n.onDispose((()=>this._removeMarkerFromLink(o,n))),this._entriesWithId.set(o.key,o),this._dataByLinkId.set(o.id,o),o.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every((e=>e.line!==t))){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose((()=>this._removeMarkerFromLink(i,e)))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=o=s([r(0,n.IBufferService)],o)},8343:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0;const i=\"di$target\",s=\"di$dependencies\";t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e[s]||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const r=function(e,t,n){if(3!==arguments.length)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");!function(e,t,r){t[i]===t?t[s].push({id:e,index:r}):(t[s]=[{id:e,index:r}],t[i]=t)}(r,e,n)};return r.toString=()=>e,t.serviceRegistry.set(e,r),r}},2585:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;const s=i(8343);var r;t.IBufferService=(0,s.createDecorator)(\"BufferService\"),t.ICoreMouseService=(0,s.createDecorator)(\"CoreMouseService\"),t.ICoreService=(0,s.createDecorator)(\"CoreService\"),t.ICharsetService=(0,s.createDecorator)(\"CharsetService\"),t.IInstantiationService=(0,s.createDecorator)(\"InstantiationService\"),function(e){e[e.TRACE=0]=\"TRACE\",e[e.DEBUG=1]=\"DEBUG\",e[e.INFO=2]=\"INFO\",e[e.WARN=3]=\"WARN\",e[e.ERROR=4]=\"ERROR\",e[e.OFF=5]=\"OFF\"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)(\"LogService\"),t.IOptionsService=(0,s.createDecorator)(\"OptionsService\"),t.IOscLinkService=(0,s.createDecorator)(\"OscLinkService\"),t.IUnicodeService=(0,s.createDecorator)(\"UnicodeService\"),t.IDecorationService=(0,s.createDecorator)(\"DecorationService\")},1480:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeService=void 0;const s=i(8460),r=i(225);class n{static extractShouldJoin(e){return 0!=(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}constructor(){this._providers=Object.create(null),this._active=\"\",this._onChange=new s.EventEmitter,this.onChange=this._onChange.event;const e=new r.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version \"${e}\"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let r=0;r=s)return t+this.wcwidth(o);const i=e.charCodeAt(r);56320<=i&&i<=57343?o=1024*(o-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(o,i);let h=n.extractWidth(a);n.extractShouldJoin(a)&&(h-=n.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=n}},t={};function i(s){var r=t[s];if(void 0!==r)return r.exports;var n=t[s]={exports:{}};return e[s].call(n.exports,n,n.exports,i),n.exports}var s={};return(()=>{var e=s;Object.defineProperty(e,\"__esModule\",{value:!0}),e.Terminal=void 0;const t=i(9042),r=i(3236),n=i(844),o=i(5741),a=i(8285),h=i(7975),c=i(7090),l=[\"cols\",\"rows\"];class d extends n.Disposable{constructor(e){super(),this._core=this.register(new r.Terminal(e)),this._addonManager=this.register(new o.AddonManager),this._publicOptions={...this._core.options};const t=e=>this._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(l.includes(e))throw new Error(`Option \"${e}\" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error(\"You must set the allowProposedApi option to true to use proposed API\")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new h.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new c.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this.register(new a.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t=\"none\";switch(this._core.coreMouseService.activeProtocol){case\"X10\":t=\"x10\";break;case\"VT200\":t=\"vt200\";break;case\"DRAG\":t=\"drag\";break;case\"ANY\":t=\"any\"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._checkProposedApi(),this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(\"\\r\\n\",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return t}_verifyIntegers(...e){for(const t of e)if(t===1/0||isNaN(t)||t%1!=0)throw new Error(\"This API only accepts integers\")}_verifyPositiveIntegers(...e){for(const t of e)if(t&&(t===1/0||isNaN(t)||t%1!=0||t<0))throw new Error(\"This API only accepts positive integers\")}}e.Terminal=d})(),s})()));\n//# sourceMappingURL=xterm.js.map","import { FitAddon } from '@xterm/addon-fit'\nimport { Terminal } from '@xterm/xterm'\nimport { debounce } from 'lodash'\nimport { markRaw, onMounted, onUnmounted, Ref } from 'vue'\nimport '@xterm/xterm/css/xterm.css'\n\nexport function useTerminal(element: Ref) {\n const fitAddon = new FitAddon()\n const terminal = markRaw(\n new Terminal({\n convertEol: true\n })\n )\n terminal.loadAddon(fitAddon)\n\n terminal.attachCustomKeyEventHandler((event) => {\n if (event.type === 'keydown' && (event.ctrlKey || event.metaKey)) {\n if (event.key === 'c' || event.key === 'v') {\n // Allow default browser copy/paste handling\n return false\n }\n }\n return true\n })\n\n onMounted(async () => {\n terminal.open(element.value)\n })\n\n onUnmounted(() => {\n terminal.dispose()\n })\n\n return {\n terminal,\n useAutoSize(\n root: Ref,\n autoRows: boolean = true,\n autoCols: boolean = true,\n onResize?: () => void\n ) {\n const ensureValidRows = (rows: number | undefined) => {\n if (rows == null || isNaN(rows)) {\n return root.value?.clientHeight / 20\n }\n return rows\n }\n\n const ensureValidCols = (cols: number | undefined): number => {\n if (cols == null || isNaN(cols)) {\n // Sometimes this is NaN if so, estimate.\n return root.value?.clientWidth / 8\n }\n return cols\n }\n\n const resize = () => {\n const dims = fitAddon.proposeDimensions()\n // Sometimes propose returns NaN, so we may need to estimate.\n terminal.resize(\n autoCols ? ensureValidCols(dims?.cols) : terminal.cols,\n autoRows ? ensureValidRows(dims?.rows) : terminal.rows\n )\n onResize?.()\n }\n\n const resizeObserver = new ResizeObserver(debounce(resize, 25))\n\n onMounted(async () => {\n resizeObserver.observe(root.value)\n resize()\n })\n\n onUnmounted(() => {\n resizeObserver.disconnect()\n })\n\n return { resize }\n }\n }\n}\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-progressspinner {\\n position: relative;\\n margin: 0 auto;\\n width: 100px;\\n height: 100px;\\n display: inline-block;\\n}\\n\\n.p-progressspinner::before {\\n content: \\\"\\\";\\n display: block;\\n padding-top: 100%;\\n}\\n\\n.p-progressspinner-spin {\\n height: 100%;\\n transform-origin: center center;\\n width: 100%;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n margin: auto;\\n animation: p-progressspinner-rotate 2s linear infinite;\\n}\\n\\n.p-progressspinner-circle {\\n stroke-dasharray: 89, 200;\\n stroke-dashoffset: 0;\\n stroke: \".concat(dt('progressspinner.color.1'), \";\\n animation: p-progressspinner-dash 1.5s ease-in-out infinite, p-progressspinner-color 6s ease-in-out infinite;\\n stroke-linecap: round;\\n}\\n\\n@keyframes p-progressspinner-rotate {\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n@keyframes p-progressspinner-dash {\\n 0% {\\n stroke-dasharray: 1, 200;\\n stroke-dashoffset: 0;\\n }\\n 50% {\\n stroke-dasharray: 89, 200;\\n stroke-dashoffset: -35px;\\n }\\n 100% {\\n stroke-dasharray: 89, 200;\\n stroke-dashoffset: -124px;\\n }\\n}\\n@keyframes p-progressspinner-color {\\n 100%,\\n 0% {\\n stroke: \").concat(dt('progressspinner.color.1'), \";\\n }\\n 40% {\\n stroke: \").concat(dt('progressspinner.color.2'), \";\\n }\\n 66% {\\n stroke: \").concat(dt('progressspinner.color.3'), \";\\n }\\n 80%,\\n 90% {\\n stroke: \").concat(dt('progressspinner.color.4'), \";\\n }\\n}\\n\");\n};\nvar classes = {\n root: 'p-progressspinner',\n spin: 'p-progressspinner-spin',\n circle: 'p-progressspinner-circle'\n};\nvar ProgressSpinnerStyle = BaseStyle.extend({\n name: 'progressspinner',\n theme: theme,\n classes: classes\n});\n\nexport { ProgressSpinnerStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport ProgressSpinnerStyle from 'primevue/progressspinner/style';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseProgressSpinner',\n \"extends\": BaseComponent,\n props: {\n strokeWidth: {\n type: String,\n \"default\": '2'\n },\n fill: {\n type: String,\n \"default\": 'none'\n },\n animationDuration: {\n type: String,\n \"default\": '2s'\n }\n },\n style: ProgressSpinnerStyle,\n provide: function provide() {\n return {\n $pcProgressSpinner: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'ProgressSpinner',\n \"extends\": script$1,\n inheritAttrs: false,\n computed: {\n svgStyle: function svgStyle() {\n return {\n 'animation-duration': this.animationDuration\n };\n }\n }\n};\n\nvar _hoisted_1 = [\"fill\", \"stroke-width\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"progressbar\"\n }, _ctx.ptmi('root')), [(openBlock(), createElementBlock(\"svg\", mergeProps({\n \"class\": _ctx.cx('spin'),\n viewBox: \"25 25 50 50\",\n style: $options.svgStyle\n }, _ctx.ptm('spin')), [createElementVNode(\"circle\", mergeProps({\n \"class\": _ctx.cx('circle'),\n cx: \"50\",\n cy: \"50\",\n r: \"20\",\n fill: _ctx.fill,\n \"stroke-width\": _ctx.strokeWidth,\n strokeMiterlimit: \"10\"\n }, _ctx.ptm('circle')), null, 16, _hoisted_1)], 16))], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","\n\n\n\n\n","import { useI18n } from 'vue-i18n'\nimport { markRaw } from 'vue'\nimport { BottomPanelExtension } from '@/types/extensionTypes'\nimport LogsTerminal from '@/components/bottomPanel/tabs/terminal/LogsTerminal.vue'\nimport CommandTerminal from '@/components/bottomPanel/tabs/terminal/CommandTerminal.vue'\n\nexport const useLogsTerminalTab = (): BottomPanelExtension => {\n const { t } = useI18n()\n return {\n id: 'logs-terminal',\n title: t('g.logs'),\n component: markRaw(LogsTerminal),\n type: 'vue'\n }\n}\n\nexport const useCommandTerminalTab = (): BottomPanelExtension => {\n const { t } = useI18n()\n return {\n id: 'command-terminal',\n title: t('g.terminal'),\n component: markRaw(CommandTerminal),\n type: 'vue'\n }\n}\n","import type { BottomPanelExtension } from '@/types/extensionTypes'\nimport { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\nimport { useCommandStore } from '@/stores/commandStore'\nimport {\n useLogsTerminalTab,\n useCommandTerminalTab\n} from '@/hooks/bottomPanelTabs/terminalTabs'\nimport { ComfyExtension } from '@/types/comfy'\nimport { isElectron } from '@/utils/envUtil'\n\nexport const useBottomPanelStore = defineStore('bottomPanel', () => {\n const bottomPanelVisible = ref(false)\n const toggleBottomPanel = () => {\n // If there are no tabs, don't show the bottom panel\n if (bottomPanelTabs.value.length === 0) {\n return\n }\n bottomPanelVisible.value = !bottomPanelVisible.value\n }\n\n const bottomPanelTabs = ref([])\n const activeBottomPanelTabId = ref(null)\n const activeBottomPanelTab = computed(() => {\n return (\n bottomPanelTabs.value.find(\n (tab) => tab.id === activeBottomPanelTabId.value\n ) ?? null\n )\n })\n const setActiveTab = (tabId: string) => {\n activeBottomPanelTabId.value = tabId\n }\n const toggleBottomPanelTab = (tabId: string) => {\n if (activeBottomPanelTabId.value === tabId && bottomPanelVisible.value) {\n bottomPanelVisible.value = false\n } else {\n activeBottomPanelTabId.value = tabId\n bottomPanelVisible.value = true\n }\n }\n const registerBottomPanelTab = (tab: BottomPanelExtension) => {\n bottomPanelTabs.value = [...bottomPanelTabs.value, tab]\n if (bottomPanelTabs.value.length === 1) {\n activeBottomPanelTabId.value = tab.id\n }\n useCommandStore().registerCommand({\n id: `Workspace.ToggleBottomPanelTab.${tab.id}`,\n icon: 'pi pi-list',\n label: `Toggle ${tab.title} Bottom Panel`,\n function: () => toggleBottomPanelTab(tab.id)\n })\n }\n\n const registerCoreBottomPanelTabs = () => {\n registerBottomPanelTab(useLogsTerminalTab())\n if (isElectron()) {\n registerBottomPanelTab(useCommandTerminalTab())\n }\n }\n\n const registerExtensionBottomPanelTabs = (extension: ComfyExtension) => {\n if (extension.bottomPanelTabs) {\n extension.bottomPanelTabs.forEach(registerBottomPanelTab)\n }\n }\n\n return {\n bottomPanelVisible,\n toggleBottomPanel,\n bottomPanelTabs,\n activeBottomPanelTab,\n activeBottomPanelTabId,\n setActiveTab,\n toggleBottomPanelTab,\n registerBottomPanelTab,\n registerCoreBottomPanelTabs,\n registerExtensionBottomPanelTabs\n }\n})\n","import { ComfyWidgets, ComfyWidgetConstructor } from '@/scripts/widgets'\nimport { defineStore } from 'pinia'\nimport { ref, computed } from 'vue'\nimport type { BaseInputSpec } from './nodeDefStore'\n\nexport const useWidgetStore = defineStore('widget', () => {\n const coreWidgets = ComfyWidgets\n const customWidgets = ref>({})\n const widgets = computed(() => ({\n ...customWidgets.value,\n ...coreWidgets\n }))\n\n function getWidgetType(type: string, inputName: string) {\n if (type === 'COMBO') {\n return 'COMBO'\n } else if (`${type}:${inputName}` in widgets.value) {\n return `${type}:${inputName}`\n } else if (type in widgets.value) {\n return type\n } else {\n return null\n }\n }\n\n function inputIsWidget(spec: BaseInputSpec) {\n return getWidgetType(spec.type, spec.name) !== null\n }\n\n function registerCustomWidgets(\n newWidgets: Record\n ) {\n customWidgets.value = {\n ...customWidgets.value,\n ...newWidgets\n }\n }\n\n return {\n widgets,\n getWidgetType,\n inputIsWidget,\n registerCustomWidgets\n }\n})\n","import { ref, computed, markRaw } from 'vue'\nimport { defineStore } from 'pinia'\nimport type { ComfyExtension } from '@/types/comfy'\nimport { useKeybindingStore } from './keybindingStore'\nimport { useCommandStore } from './commandStore'\nimport { useSettingStore } from './settingStore'\nimport { app } from '@/scripts/app'\nimport { useMenuItemStore } from './menuItemStore'\nimport { useBottomPanelStore } from './workspace/bottomPanelStore'\nimport { useWidgetStore } from './widgetStore'\n\nexport const useExtensionStore = defineStore('extension', () => {\n // For legacy reasons, the name uniquely identifies an extension\n const extensionByName = ref>({})\n const extensions = computed(() => Object.values(extensionByName.value))\n // Not using computed because disable extension requires reloading of the page.\n // Dynamically update this list won't affect extensions that are already loaded.\n const disabledExtensionNames = ref>(new Set())\n\n // Disabled extension names that are currently not in the extension list.\n // If a node pack is disabled in the backend, we shouldn't remove the configuration\n // of the frontend extension disable list, in case the node pack is re-enabled.\n const inactiveDisabledExtensionNames = computed(() => {\n return Array.from(disabledExtensionNames.value).filter(\n (name) => !(name in extensionByName.value)\n )\n })\n\n const isExtensionEnabled = (name: string) =>\n !disabledExtensionNames.value.has(name)\n const enabledExtensions = computed(() => {\n return extensions.value.filter((ext) => isExtensionEnabled(ext.name))\n })\n\n function registerExtension(extension: ComfyExtension) {\n if (!extension.name) {\n throw new Error(\"Extensions must have a 'name' property.\")\n }\n\n if (extensionByName.value[extension.name]) {\n throw new Error(`Extension named '${extension.name}' already registered.`)\n }\n\n if (disabledExtensionNames.value.has(extension.name)) {\n console.log(`Extension ${extension.name} is disabled.`)\n }\n\n extensionByName.value[extension.name] = markRaw(extension)\n useKeybindingStore().loadExtensionKeybindings(extension)\n useCommandStore().loadExtensionCommands(extension)\n useMenuItemStore().loadExtensionMenuCommands(extension)\n useSettingStore().loadExtensionSettings(extension)\n useBottomPanelStore().registerExtensionBottomPanelTabs(extension)\n if (extension.getCustomWidgets) {\n // TODO(huchenlei): We should deprecate the async return value of\n // getCustomWidgets.\n ;(async () => {\n if (extension.getCustomWidgets) {\n const widgets = await extension.getCustomWidgets(app)\n useWidgetStore().registerCustomWidgets(widgets)\n }\n })()\n }\n /*\n * Extensions are currently stored in both extensionStore and app.extensions.\n * Legacy jest tests still depend on app.extensions being populated.\n */\n app.extensions.push(extension)\n }\n\n function loadDisabledExtensionNames() {\n disabledExtensionNames.value = new Set(\n useSettingStore().get('Comfy.Extension.Disabled')\n )\n // pysssss.Locking is replaced by pin/unpin in ComfyUI core.\n // https://github.com/Comfy-Org/litegraph.js/pull/117\n disabledExtensionNames.value.add('pysssss.Locking')\n // pysssss.SnapToGrid is replaced by Comfy.Graph.AlwaysSnapToGrid in ComfyUI core.\n // pysssss.SnapToGrid tries to write global app.shiftDown state, which is no longer\n // allowed since v1.3.12.\n // https://github.com/Comfy-Org/ComfyUI_frontend/issues/1176\n disabledExtensionNames.value.add('pysssss.SnapToGrid')\n }\n\n // Some core extensions are registered before the store is initialized, e.g.\n // colorPalette.\n // Register them manually here so the state of app.extensions and\n // extensionByName are in sync.\n for (const ext of app.extensions) {\n extensionByName.value[ext.name] = markRaw(ext)\n }\n\n return {\n extensions,\n enabledExtensions,\n inactiveDisabledExtensionNames,\n isExtensionEnabled,\n registerExtension,\n loadDisabledExtensionNames\n }\n})\n","import { AboutPageBadge } from '@/types/comfy'\nimport { defineStore } from 'pinia'\nimport { computed } from 'vue'\nimport { useSystemStatsStore } from './systemStatsStore'\nimport { useExtensionStore } from './extensionStore'\nimport { electronAPI, isElectron } from '@/utils/envUtil'\n\nexport const useAboutPanelStore = defineStore('aboutPanel', () => {\n const frontendVersion = __COMFYUI_FRONTEND_VERSION__\n const extensionStore = useExtensionStore()\n const systemStatsStore = useSystemStatsStore()\n const coreVersion = computed(\n () => systemStatsStore?.systemStats?.system?.comfyui_version ?? ''\n )\n\n const coreBadges = computed(() => [\n // In electron, the ComfyUI is packaged without the git repo,\n // so the python server's API doesn't have the version info.\n {\n label: `ComfyUI ${\n isElectron()\n ? 'v' + electronAPI().getComfyUIVersion()\n : coreVersion.value\n }`,\n url: 'https://github.com/comfyanonymous/ComfyUI',\n icon: 'pi pi-github'\n },\n {\n label: `ComfyUI_frontend v${frontendVersion}`,\n url: 'https://github.com/Comfy-Org/ComfyUI_frontend',\n icon: 'pi pi-github'\n },\n {\n label: 'Discord',\n url: 'https://www.comfy.org/discord',\n icon: 'pi pi-discord'\n },\n { label: 'ComfyOrg', url: 'https://www.comfy.org/', icon: 'pi pi-globe' }\n ])\n\n const allBadges = computed(() => [\n ...coreBadges.value,\n ...extensionStore.extensions.flatMap((e) => e.aboutPageBadges ?? [])\n ])\n\n return {\n badges: allBadges\n }\n})\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'ChevronLeftIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M9.61296 13C9.50997 13.0005 9.40792 12.9804 9.3128 12.9409C9.21767 12.9014 9.13139 12.8433 9.05902 12.7701L3.83313 7.54416C3.68634 7.39718 3.60388 7.19795 3.60388 6.99022C3.60388 6.78249 3.68634 6.58325 3.83313 6.43628L9.05902 1.21039C9.20762 1.07192 9.40416 0.996539 9.60724 1.00012C9.81032 1.00371 10.0041 1.08597 10.1477 1.22959C10.2913 1.37322 10.3736 1.56698 10.3772 1.77005C10.3808 1.97313 10.3054 2.16968 10.1669 2.31827L5.49496 6.99022L10.1669 11.6622C10.3137 11.8091 10.3962 12.0084 10.3962 12.2161C10.3962 12.4238 10.3137 12.6231 10.1669 12.7701C10.0945 12.8433 10.0083 12.9014 9.91313 12.9409C9.81801 12.9804 9.71596 13.0005 9.61296 13Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'ChevronRightIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M4.38708 13C4.28408 13.0005 4.18203 12.9804 4.08691 12.9409C3.99178 12.9014 3.9055 12.8433 3.83313 12.7701C3.68634 12.6231 3.60388 12.4238 3.60388 12.2161C3.60388 12.0084 3.68634 11.8091 3.83313 11.6622L8.50507 6.99022L3.83313 2.31827C3.69467 2.16968 3.61928 1.97313 3.62287 1.77005C3.62645 1.56698 3.70872 1.37322 3.85234 1.22959C3.99596 1.08597 4.18972 1.00371 4.3928 1.00012C4.59588 0.996539 4.79242 1.07192 4.94102 1.21039L10.1669 6.43628C10.3137 6.58325 10.3962 6.78249 10.3962 6.99022C10.3962 7.19795 10.3137 7.39718 10.1669 7.54416L4.94102 12.7701C4.86865 12.8433 4.78237 12.9014 4.68724 12.9409C4.59212 12.9804 4.49007 13.0005 4.38708 13Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-tabview-tablist-container {\\n position: relative;\\n}\\n\\n.p-tabview-scrollable > .p-tabview-tablist-container {\\n overflow: hidden;\\n}\\n\\n.p-tabview-tablist-scroll-container {\\n overflow-x: auto;\\n overflow-y: hidden;\\n scroll-behavior: smooth;\\n scrollbar-width: none;\\n overscroll-behavior: contain auto;\\n}\\n\\n.p-tabview-tablist-scroll-container::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.p-tabview-tablist {\\n display: flex;\\n margin: 0;\\n padding: 0;\\n list-style-type: none;\\n flex: 1 1 auto;\\n background: \".concat(dt('tabview.tab.list.background'), \";\\n border: 1px solid \").concat(dt('tabview.tab.list.border.color'), \";\\n border-width: 0 0 1px 0;\\n position: relative;\\n}\\n\\n.p-tabview-tab-header {\\n cursor: pointer;\\n user-select: none;\\n display: flex;\\n align-items: center;\\n text-decoration: none;\\n position: relative;\\n overflow: hidden;\\n border-style: solid;\\n border-width: 0 0 1px 0;\\n border-color: transparent transparent \").concat(dt('tabview.tab.border.color'), \" transparent;\\n color: \").concat(dt('tabview.tab.color'), \";\\n padding: 1rem 1.125rem;\\n font-weight: 600;\\n border-top-right-radius: \").concat(dt('border.radius.md'), \";\\n border-top-left-radius: \").concat(dt('border.radius.md'), \";\\n transition: color \").concat(dt('tabview.transition.duration'), \", outline-color \").concat(dt('tabview.transition.duration'), \";\\n margin: 0 0 -1px 0;\\n outline-color: transparent;\\n}\\n\\n.p-tabview-tablist-item:not(.p-disabled) .p-tabview-tab-header:focus-visible {\\n outline: \").concat(dt('focus.ring.width'), \" \").concat(dt('focus.ring.style'), \" \").concat(dt('focus.ring.color'), \";\\n outline-offset: -1px;\\n}\\n\\n.p-tabview-tablist-item:not(.p-highlight):not(.p-disabled):hover > .p-tabview-tab-header {\\n color: \").concat(dt('tabview.tab.hover.color'), \";\\n}\\n\\n.p-tabview-tablist-item.p-highlight > .p-tabview-tab-header {\\n color: \").concat(dt('tabview.tab.active.color'), \";\\n}\\n\\n.p-tabview-tab-title {\\n line-height: 1;\\n white-space: nowrap;\\n}\\n\\n.p-tabview-next-button,\\n.p-tabview-prev-button {\\n position: absolute;\\n top: 0;\\n margin: 0;\\n padding: 0;\\n z-index: 2;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: \").concat(dt('tabview.nav.button.background'), \";\\n color: \").concat(dt('tabview.nav.button.color'), \";\\n width: 2.5rem;\\n border-radius: 0;\\n outline-color: transparent;\\n transition: color \").concat(dt('tabview.transition.duration'), \", outline-color \").concat(dt('tabview.transition.duration'), \";\\n box-shadow: \").concat(dt('tabview.nav.button.shadow'), \";\\n border: none;\\n cursor: pointer;\\n user-select: none;\\n}\\n\\n.p-tabview-next-button:focus-visible,\\n.p-tabview-prev-button:focus-visible {\\n outline: \").concat(dt('focus.ring.width'), \" \").concat(dt('focus.ring.style'), \" \").concat(dt('focus.ring.color'), \";\\n outline-offset: \").concat(dt('focus.ring.offset'), \";\\n}\\n\\n.p-tabview-next-button:hover,\\n.p-tabview-prev-button:hover {\\n color: \").concat(dt('tabview.nav.button.hover.color'), \";\\n}\\n\\n.p-tabview-prev-button {\\n left: 0;\\n}\\n\\n.p-tabview-next-button {\\n right: 0;\\n}\\n\\n.p-tabview-panels {\\n background: \").concat(dt('tabview.tab.panel.background'), \";\\n color: \").concat(dt('tabview.tab.panel.color'), \";\\n padding: 0.875rem 1.125rem 1.125rem 1.125rem;\\n}\\n\\n.p-tabview-ink-bar {\\n z-index: 1;\\n display: block;\\n position: absolute;\\n bottom: -1px;\\n height: 1px;\\n background: \").concat(dt('tabview.tab.active.border.color'), \";\\n transition: 250ms cubic-bezier(0.35, 0, 0.25, 1);\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-tabview p-component', {\n 'p-tabview-scrollable': props.scrollable\n }];\n },\n navContainer: 'p-tabview-tablist-container',\n prevButton: 'p-tabview-prev-button',\n navContent: 'p-tabview-tablist-scroll-container',\n nav: 'p-tabview-tablist',\n tab: {\n header: function header(_ref3) {\n var instance = _ref3.instance,\n tab = _ref3.tab,\n index = _ref3.index;\n return ['p-tabview-tablist-item', instance.getTabProp(tab, 'headerClass'), {\n 'p-tabview-tablist-item-active': instance.d_activeIndex === index,\n 'p-disabled': instance.getTabProp(tab, 'disabled')\n }];\n },\n headerAction: 'p-tabview-tab-header',\n headerTitle: 'p-tabview-tab-title',\n content: function content(_ref4) {\n var instance = _ref4.instance,\n tab = _ref4.tab;\n return ['p-tabview-panel', instance.getTabProp(tab, 'contentClass')];\n }\n },\n inkbar: 'p-tabview-ink-bar',\n nextButton: 'p-tabview-next-button',\n panelContainer: 'p-tabview-panels'\n};\nvar TabViewStyle = BaseStyle.extend({\n name: 'tabview',\n theme: theme,\n classes: classes\n});\n\nexport { TabViewStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport { getWidth, getAttribute, findSingle, focus, getOffset } from '@primeuix/utils/dom';\nimport ChevronLeftIcon from '@primevue/icons/chevronleft';\nimport ChevronRightIcon from '@primevue/icons/chevronright';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps, resolveDirective, openBlock, createElementBlock, createElementVNode, withDirectives, renderSlot, createBlock, resolveDynamicComponent, createCommentVNode, Fragment, renderList, toDisplayString, vShow } from 'vue';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TabViewStyle from 'primevue/tabview/style';\n\nvar script$1 = {\n name: 'BaseTabView',\n \"extends\": BaseComponent,\n props: {\n activeIndex: {\n type: Number,\n \"default\": 0\n },\n lazy: {\n type: Boolean,\n \"default\": false\n },\n scrollable: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n selectOnFocus: {\n type: Boolean,\n \"default\": false\n },\n prevButtonProps: {\n type: null,\n \"default\": null\n },\n nextButtonProps: {\n type: null,\n \"default\": null\n },\n prevIcon: {\n type: String,\n \"default\": undefined\n },\n nextIcon: {\n type: String,\n \"default\": undefined\n }\n },\n style: TabViewStyle,\n provide: function provide() {\n return {\n $pcTabs: undefined,\n // Backwards compatible to prevent component from breaking\n $pcTabView: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'TabView',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:activeIndex', 'tab-change', 'tab-click'],\n data: function data() {\n return {\n id: this.$attrs.id,\n d_activeIndex: this.activeIndex,\n isPrevButtonDisabled: true,\n isNextButtonDisabled: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n activeIndex: function activeIndex(newValue) {\n this.d_activeIndex = newValue;\n this.scrollInView({\n index: newValue\n });\n }\n },\n mounted: function mounted() {\n console.warn('Deprecated since v4. Use Tabs component instead.');\n this.id = this.id || UniqueComponentId();\n this.updateInkBar();\n this.scrollable && this.updateButtonState();\n },\n updated: function updated() {\n this.updateInkBar();\n this.scrollable && this.updateButtonState();\n },\n methods: {\n isTabPanel: function isTabPanel(child) {\n return child.type.name === 'TabPanel';\n },\n isTabActive: function isTabActive(index) {\n return this.d_activeIndex === index;\n },\n getTabProp: function getTabProp(tab, name) {\n return tab.props ? tab.props[name] : undefined;\n },\n getKey: function getKey(tab, index) {\n return this.getTabProp(tab, 'header') || index;\n },\n getTabHeaderActionId: function getTabHeaderActionId(index) {\n return \"\".concat(this.id, \"_\").concat(index, \"_header_action\");\n },\n getTabContentId: function getTabContentId(index) {\n return \"\".concat(this.id, \"_\").concat(index, \"_content\");\n },\n getTabPT: function getTabPT(tab, key, index) {\n var count = this.tabs.length;\n var tabMetaData = {\n props: tab.props,\n parent: {\n instance: this,\n props: this.$props,\n state: this.$data\n },\n context: {\n index: index,\n count: count,\n first: index === 0,\n last: index === count - 1,\n active: this.isTabActive(index)\n }\n };\n return mergeProps(this.ptm(\"tabpanel.\".concat(key), {\n tabpanel: tabMetaData\n }), this.ptm(\"tabpanel.\".concat(key), tabMetaData), this.ptmo(this.getTabProp(tab, 'pt'), key, tabMetaData));\n },\n onScroll: function onScroll(event) {\n this.scrollable && this.updateButtonState();\n event.preventDefault();\n },\n onPrevButtonClick: function onPrevButtonClick() {\n var content = this.$refs.content;\n var width = getWidth(content);\n var pos = content.scrollLeft - width;\n content.scrollLeft = pos <= 0 ? 0 : pos;\n },\n onNextButtonClick: function onNextButtonClick() {\n var content = this.$refs.content;\n var width = getWidth(content) - this.getVisibleButtonWidths();\n var pos = content.scrollLeft + width;\n var lastPos = content.scrollWidth - width;\n content.scrollLeft = pos >= lastPos ? lastPos : pos;\n },\n onTabClick: function onTabClick(event, tab, index) {\n this.changeActiveIndex(event, tab, index);\n this.$emit('tab-click', {\n originalEvent: event,\n index: index\n });\n },\n onTabKeyDown: function onTabKeyDown(event, tab, index) {\n switch (event.code) {\n case 'ArrowLeft':\n this.onTabArrowLeftKey(event);\n break;\n case 'ArrowRight':\n this.onTabArrowRightKey(event);\n break;\n case 'Home':\n this.onTabHomeKey(event);\n break;\n case 'End':\n this.onTabEndKey(event);\n break;\n case 'PageDown':\n this.onPageDownKey(event);\n break;\n case 'PageUp':\n this.onPageUpKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n this.onTabEnterKey(event, tab, index);\n break;\n }\n },\n onTabArrowRightKey: function onTabArrowRightKey(event) {\n var nextHeaderAction = this.findNextHeaderAction(event.target.parentElement);\n nextHeaderAction ? this.changeFocusedTab(event, nextHeaderAction) : this.onTabHomeKey(event);\n event.preventDefault();\n },\n onTabArrowLeftKey: function onTabArrowLeftKey(event) {\n var prevHeaderAction = this.findPrevHeaderAction(event.target.parentElement);\n prevHeaderAction ? this.changeFocusedTab(event, prevHeaderAction) : this.onTabEndKey(event);\n event.preventDefault();\n },\n onTabHomeKey: function onTabHomeKey(event) {\n var firstHeaderAction = this.findFirstHeaderAction();\n this.changeFocusedTab(event, firstHeaderAction);\n event.preventDefault();\n },\n onTabEndKey: function onTabEndKey(event) {\n var lastHeaderAction = this.findLastHeaderAction();\n this.changeFocusedTab(event, lastHeaderAction);\n event.preventDefault();\n },\n onPageDownKey: function onPageDownKey(event) {\n this.scrollInView({\n index: this.$refs.nav.children.length - 2\n });\n event.preventDefault();\n },\n onPageUpKey: function onPageUpKey(event) {\n this.scrollInView({\n index: 0\n });\n event.preventDefault();\n },\n onTabEnterKey: function onTabEnterKey(event, tab, index) {\n this.changeActiveIndex(event, tab, index);\n event.preventDefault();\n },\n findNextHeaderAction: function findNextHeaderAction(tabElement) {\n var selfCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var headerElement = selfCheck ? tabElement : tabElement.nextElementSibling;\n return headerElement ? getAttribute(headerElement, 'data-p-disabled') || getAttribute(headerElement, 'data-pc-section') === 'inkbar' ? this.findNextHeaderAction(headerElement) : findSingle(headerElement, '[data-pc-section=\"headeraction\"]') : null;\n },\n findPrevHeaderAction: function findPrevHeaderAction(tabElement) {\n var selfCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var headerElement = selfCheck ? tabElement : tabElement.previousElementSibling;\n return headerElement ? getAttribute(headerElement, 'data-p-disabled') || getAttribute(headerElement, 'data-pc-section') === 'inkbar' ? this.findPrevHeaderAction(headerElement) : findSingle(headerElement, '[data-pc-section=\"headeraction\"]') : null;\n },\n findFirstHeaderAction: function findFirstHeaderAction() {\n return this.findNextHeaderAction(this.$refs.nav.firstElementChild, true);\n },\n findLastHeaderAction: function findLastHeaderAction() {\n return this.findPrevHeaderAction(this.$refs.nav.lastElementChild, true);\n },\n changeActiveIndex: function changeActiveIndex(event, tab, index) {\n if (!this.getTabProp(tab, 'disabled') && this.d_activeIndex !== index) {\n this.d_activeIndex = index;\n this.$emit('update:activeIndex', index);\n this.$emit('tab-change', {\n originalEvent: event,\n index: index\n });\n this.scrollInView({\n index: index\n });\n }\n },\n changeFocusedTab: function changeFocusedTab(event, element) {\n if (element) {\n focus(element);\n this.scrollInView({\n element: element\n });\n if (this.selectOnFocus) {\n var index = parseInt(element.parentElement.dataset.pcIndex, 10);\n var tab = this.tabs[index];\n this.changeActiveIndex(event, tab, index);\n }\n }\n },\n scrollInView: function scrollInView(_ref) {\n var element = _ref.element,\n _ref$index = _ref.index,\n index = _ref$index === void 0 ? -1 : _ref$index;\n var currentElement = element || this.$refs.nav.children[index];\n if (currentElement) {\n currentElement.scrollIntoView && currentElement.scrollIntoView({\n block: 'nearest'\n });\n }\n },\n updateInkBar: function updateInkBar() {\n var tabHeader = this.$refs.nav.children[this.d_activeIndex];\n this.$refs.inkbar.style.width = getWidth(tabHeader) + 'px';\n this.$refs.inkbar.style.left = getOffset(tabHeader).left - getOffset(this.$refs.nav).left + 'px';\n },\n updateButtonState: function updateButtonState() {\n var content = this.$refs.content;\n var scrollLeft = content.scrollLeft,\n scrollWidth = content.scrollWidth;\n var width = getWidth(content);\n this.isPrevButtonDisabled = scrollLeft === 0;\n this.isNextButtonDisabled = parseInt(scrollLeft) === scrollWidth - width;\n },\n getVisibleButtonWidths: function getVisibleButtonWidths() {\n var _this$$refs = this.$refs,\n prevBtn = _this$$refs.prevBtn,\n nextBtn = _this$$refs.nextBtn;\n return [prevBtn, nextBtn].reduce(function (acc, el) {\n return el ? acc + getWidth(el) : acc;\n }, 0);\n }\n },\n computed: {\n tabs: function tabs() {\n var _this = this;\n return this.$slots[\"default\"]().reduce(function (tabs, child) {\n if (_this.isTabPanel(child)) {\n tabs.push(child);\n } else if (child.children && child.children instanceof Array) {\n child.children.forEach(function (nestedChild) {\n if (_this.isTabPanel(nestedChild)) {\n tabs.push(nestedChild);\n }\n });\n }\n return tabs;\n }, []);\n },\n prevButtonAriaLabel: function prevButtonAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.previous : undefined;\n },\n nextButtonAriaLabel: function nextButtonAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.next : undefined;\n }\n },\n directives: {\n ripple: Ripple\n },\n components: {\n ChevronLeftIcon: ChevronLeftIcon,\n ChevronRightIcon: ChevronRightIcon\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar _hoisted_1 = [\"tabindex\", \"aria-label\"];\nvar _hoisted_2 = [\"data-p-active\", \"data-p-disabled\", \"data-pc-index\"];\nvar _hoisted_3 = [\"id\", \"tabindex\", \"aria-disabled\", \"aria-selected\", \"aria-controls\", \"onClick\", \"onKeydown\"];\nvar _hoisted_4 = [\"tabindex\", \"aria-label\"];\nvar _hoisted_5 = [\"id\", \"aria-labelledby\", \"data-pc-index\", \"data-p-active\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"tablist\"\n }, _ctx.ptmi('root')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('navContainer')\n }, _ctx.ptm('navContainer')), [_ctx.scrollable && !$data.isPrevButtonDisabled ? withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n key: 0,\n ref: \"prevBtn\",\n type: \"button\",\n \"class\": _ctx.cx('prevButton'),\n tabindex: _ctx.tabindex,\n \"aria-label\": $options.prevButtonAriaLabel,\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.onPrevButtonClick && $options.onPrevButtonClick.apply($options, arguments);\n })\n }, _objectSpread(_objectSpread({}, _ctx.prevButtonProps), _ctx.ptm('prevButton')), {\n \"data-pc-group-section\": \"navbutton\"\n }), [renderSlot(_ctx.$slots, \"previcon\", {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.prevIcon ? 'span' : 'ChevronLeftIcon'), mergeProps({\n \"aria-hidden\": \"true\",\n \"class\": _ctx.prevIcon\n }, _ctx.ptm('prevIcon')), null, 16, [\"class\"]))];\n })], 16, _hoisted_1)), [[_directive_ripple]]) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n ref: \"content\",\n \"class\": _ctx.cx('navContent'),\n onScroll: _cache[1] || (_cache[1] = function () {\n return $options.onScroll && $options.onScroll.apply($options, arguments);\n })\n }, _ctx.ptm('navContent')), [createElementVNode(\"ul\", mergeProps({\n ref: \"nav\",\n \"class\": _ctx.cx('nav')\n }, _ctx.ptm('nav')), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.tabs, function (tab, index) {\n return openBlock(), createElementBlock(\"li\", mergeProps({\n key: $options.getKey(tab, index),\n style: $options.getTabProp(tab, 'headerStyle'),\n \"class\": _ctx.cx('tab.header', {\n tab: tab,\n index: index\n }),\n role: \"presentation\",\n ref_for: true\n }, _objectSpread(_objectSpread(_objectSpread({}, $options.getTabProp(tab, 'headerProps')), $options.getTabPT(tab, 'root', index)), $options.getTabPT(tab, 'header', index)), {\n \"data-pc-name\": \"tabpanel\",\n \"data-p-active\": $data.d_activeIndex === index,\n \"data-p-disabled\": $options.getTabProp(tab, 'disabled'),\n \"data-pc-index\": index\n }), [withDirectives((openBlock(), createElementBlock(\"a\", mergeProps({\n id: $options.getTabHeaderActionId(index),\n \"class\": _ctx.cx('tab.headerAction'),\n tabindex: $options.getTabProp(tab, 'disabled') || !$options.isTabActive(index) ? -1 : _ctx.tabindex,\n role: \"tab\",\n \"aria-disabled\": $options.getTabProp(tab, 'disabled'),\n \"aria-selected\": $options.isTabActive(index),\n \"aria-controls\": $options.getTabContentId(index),\n onClick: function onClick($event) {\n return $options.onTabClick($event, tab, index);\n },\n onKeydown: function onKeydown($event) {\n return $options.onTabKeyDown($event, tab, index);\n },\n ref_for: true\n }, _objectSpread(_objectSpread({}, $options.getTabProp(tab, 'headerActionProps')), $options.getTabPT(tab, 'headerAction', index))), [tab.props && tab.props.header ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('tab.headerTitle'),\n ref_for: true\n }, $options.getTabPT(tab, 'headerTitle', index)), toDisplayString(tab.props.header), 17)) : createCommentVNode(\"\", true), tab.children && tab.children.header ? (openBlock(), createBlock(resolveDynamicComponent(tab.children.header), {\n key: 1\n })) : createCommentVNode(\"\", true)], 16, _hoisted_3)), [[_directive_ripple]])], 16, _hoisted_2);\n }), 128)), createElementVNode(\"li\", mergeProps({\n ref: \"inkbar\",\n \"class\": _ctx.cx('inkbar'),\n role: \"presentation\",\n \"aria-hidden\": \"true\"\n }, _ctx.ptm('inkbar')), null, 16)], 16)], 16), _ctx.scrollable && !$data.isNextButtonDisabled ? withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n key: 1,\n ref: \"nextBtn\",\n type: \"button\",\n \"class\": _ctx.cx('nextButton'),\n tabindex: _ctx.tabindex,\n \"aria-label\": $options.nextButtonAriaLabel,\n onClick: _cache[2] || (_cache[2] = function () {\n return $options.onNextButtonClick && $options.onNextButtonClick.apply($options, arguments);\n })\n }, _objectSpread(_objectSpread({}, _ctx.nextButtonProps), _ctx.ptm('nextButton')), {\n \"data-pc-group-section\": \"navbutton\"\n }), [renderSlot(_ctx.$slots, \"nexticon\", {}, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.nextIcon ? 'span' : 'ChevronRightIcon'), mergeProps({\n \"aria-hidden\": \"true\",\n \"class\": _ctx.nextIcon\n }, _ctx.ptm('nextIcon')), null, 16, [\"class\"]))];\n })], 16, _hoisted_4)), [[_directive_ripple]]) : createCommentVNode(\"\", true)], 16), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('panelContainer')\n }, _ctx.ptm('panelContainer')), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.tabs, function (tab, index) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getKey(tab, index)\n }, [(_ctx.lazy ? $options.isTabActive(index) : true) ? withDirectives((openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n id: $options.getTabContentId(index),\n style: $options.getTabProp(tab, 'contentStyle'),\n \"class\": _ctx.cx('tab.content', {\n tab: tab\n }),\n role: \"tabpanel\",\n \"aria-labelledby\": $options.getTabHeaderActionId(index),\n ref_for: true\n }, _objectSpread(_objectSpread(_objectSpread({}, $options.getTabProp(tab, 'contentProps')), $options.getTabPT(tab, 'root', index)), $options.getTabPT(tab, 'content', index)), {\n \"data-pc-name\": \"tabpanel\",\n \"data-pc-index\": index,\n \"data-p-active\": $data.d_activeIndex === index\n }), [(openBlock(), createBlock(resolveDynamicComponent(tab)))], 16, _hoisted_5)), [[vShow, _ctx.lazy ? true : $options.isTabActive(index)]]) : createCommentVNode(\"\", true)], 64);\n }), 128))], 16)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n","\n\n\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'ExclamationTriangleIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M13.4018 13.1893H0.598161C0.49329 13.189 0.390283 13.1615 0.299143 13.1097C0.208003 13.0578 0.131826 12.9832 0.0780112 12.8932C0.0268539 12.8015 0 12.6982 0 12.5931C0 12.4881 0.0268539 12.3848 0.0780112 12.293L6.47985 1.08982C6.53679 1.00399 6.61408 0.933574 6.70484 0.884867C6.7956 0.836159 6.897 0.810669 7 0.810669C7.103 0.810669 7.2044 0.836159 7.29516 0.884867C7.38592 0.933574 7.46321 1.00399 7.52015 1.08982L13.922 12.293C13.9731 12.3848 14 12.4881 14 12.5931C14 12.6982 13.9731 12.8015 13.922 12.8932C13.8682 12.9832 13.792 13.0578 13.7009 13.1097C13.6097 13.1615 13.5067 13.189 13.4018 13.1893ZM1.63046 11.989H12.3695L7 2.59425L1.63046 11.989Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M6.99996 8.78801C6.84143 8.78594 6.68997 8.72204 6.57787 8.60993C6.46576 8.49782 6.40186 8.34637 6.39979 8.18784V5.38703C6.39979 5.22786 6.46302 5.0752 6.57557 4.96265C6.68813 4.85009 6.84078 4.78686 6.99996 4.78686C7.15914 4.78686 7.31179 4.85009 7.42435 4.96265C7.5369 5.0752 7.60013 5.22786 7.60013 5.38703V8.18784C7.59806 8.34637 7.53416 8.49782 7.42205 8.60993C7.30995 8.72204 7.15849 8.78594 6.99996 8.78801Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_3 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M6.99996 11.1887C6.84143 11.1866 6.68997 11.1227 6.57787 11.0106C6.46576 10.8985 6.40186 10.7471 6.39979 10.5885V10.1884C6.39979 10.0292 6.46302 9.87658 6.57557 9.76403C6.68813 9.65147 6.84078 9.58824 6.99996 9.58824C7.15914 9.58824 7.31179 9.65147 7.42435 9.76403C7.5369 9.87658 7.60013 10.0292 7.60013 10.1884V10.5885C7.59806 10.7471 7.53416 10.8985 7.42205 11.0106C7.30995 11.1227 7.15849 11.1866 6.99996 11.1887Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_4 = [_hoisted_1, _hoisted_2, _hoisted_3];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_4, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'InfoCircleIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M3.11101 12.8203C4.26215 13.5895 5.61553 14 7 14C8.85652 14 10.637 13.2625 11.9497 11.9497C13.2625 10.637 14 8.85652 14 7C14 5.61553 13.5895 4.26215 12.8203 3.11101C12.0511 1.95987 10.9579 1.06266 9.67879 0.532846C8.3997 0.00303296 6.99224 -0.13559 5.63437 0.134506C4.2765 0.404603 3.02922 1.07129 2.05026 2.05026C1.07129 3.02922 0.404603 4.2765 0.134506 5.63437C-0.13559 6.99224 0.00303296 8.3997 0.532846 9.67879C1.06266 10.9579 1.95987 12.0511 3.11101 12.8203ZM3.75918 2.14976C4.71846 1.50879 5.84628 1.16667 7 1.16667C8.5471 1.16667 10.0308 1.78125 11.1248 2.87521C12.2188 3.96918 12.8333 5.45291 12.8333 7C12.8333 8.15373 12.4912 9.28154 11.8502 10.2408C11.2093 11.2001 10.2982 11.9478 9.23232 12.3893C8.16642 12.8308 6.99353 12.9463 5.86198 12.7212C4.73042 12.4962 3.69102 11.9406 2.87521 11.1248C2.05941 10.309 1.50384 9.26958 1.27876 8.13803C1.05367 7.00647 1.16919 5.83358 1.61071 4.76768C2.05222 3.70178 2.79989 2.79074 3.75918 2.14976ZM7.00002 4.8611C6.84594 4.85908 6.69873 4.79698 6.58977 4.68801C6.48081 4.57905 6.4187 4.43185 6.41669 4.27776V3.88888C6.41669 3.73417 6.47815 3.58579 6.58754 3.4764C6.69694 3.367 6.84531 3.30554 7.00002 3.30554C7.15473 3.30554 7.3031 3.367 7.4125 3.4764C7.52189 3.58579 7.58335 3.73417 7.58335 3.88888V4.27776C7.58134 4.43185 7.51923 4.57905 7.41027 4.68801C7.30131 4.79698 7.1541 4.85908 7.00002 4.8611ZM7.00002 10.6945C6.84594 10.6925 6.69873 10.6304 6.58977 10.5214C6.48081 10.4124 6.4187 10.2652 6.41669 10.1111V6.22225C6.41669 6.06754 6.47815 5.91917 6.58754 5.80977C6.69694 5.70037 6.84531 5.63892 7.00002 5.63892C7.15473 5.63892 7.3031 5.70037 7.4125 5.80977C7.52189 5.91917 7.58335 6.06754 7.58335 6.22225V10.1111C7.58134 10.2652 7.51923 10.4124 7.41027 10.5214C7.30131 10.6304 7.1541 10.6925 7.00002 10.6945Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-message {\\n border-radius: \".concat(dt('message.border.radius'), \";\\n outline-width: \").concat(dt('message.border.width'), \";\\n outline-style: solid;\\n}\\n\\n.p-message-content {\\n display: flex;\\n align-items: center;\\n padding: \").concat(dt('message.content.padding'), \";\\n gap: \").concat(dt('message.content.gap'), \";\\n height: 100%;\\n}\\n\\n.p-message-icon {\\n flex-shrink: 0;\\n}\\n\\n.p-message-close-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex-shrink: 0;\\n margin: 0 0 0 auto;\\n overflow: hidden;\\n position: relative;\\n width: \").concat(dt('message.close.button.width'), \";\\n height: \").concat(dt('message.close.button.height'), \";\\n border-radius: \").concat(dt('message.close.button.border.radius'), \";\\n background: transparent;\\n transition: background \").concat(dt('message.transition.duration'), \", color \").concat(dt('message.transition.duration'), \", outline-color \").concat(dt('message.transition.duration'), \", box-shadow \").concat(dt('message.transition.duration'), \", opacity 0.3s;\\n outline-color: transparent;\\n color: inherit;\\n padding: 0;\\n border: none;\\n cursor: pointer;\\n user-select: none;\\n}\\n\\n.p-message-close-icon {\\n font-size: \").concat(dt('message.close.icon.size'), \";\\n width: \").concat(dt('message.close.icon.size'), \";\\n height: \").concat(dt('message.close.icon.size'), \";\\n}\\n\\n.p-message-close-button:focus-visible {\\n outline-width: \").concat(dt('message.close.button.focus.ring.width'), \";\\n outline-style: \").concat(dt('message.close.button.focus.ring.style'), \";\\n outline-offset: \").concat(dt('message.close.button.focus.ring.offset'), \";\\n}\\n\\n.p-message-info {\\n background: \").concat(dt('message.info.background'), \";\\n outline-color: \").concat(dt('message.info.border.color'), \";\\n color: \").concat(dt('message.info.color'), \";\\n box-shadow: \").concat(dt('message.info.shadow'), \";\\n}\\n\\n.p-message-info .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.info.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.info.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-info .p-message-close-button:hover {\\n background: \").concat(dt('message.info.close.button.hover.background'), \";\\n}\\n\\n.p-message-success {\\n background: \").concat(dt('message.success.background'), \";\\n outline-color: \").concat(dt('message.success.border.color'), \";\\n color: \").concat(dt('message.success.color'), \";\\n box-shadow: \").concat(dt('message.success.shadow'), \";\\n}\\n\\n.p-message-success .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.success.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.success.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-success .p-message-close-button:hover {\\n background: \").concat(dt('message.success.close.button.hover.background'), \";\\n}\\n\\n.p-message-warn {\\n background: \").concat(dt('message.warn.background'), \";\\n outline-color: \").concat(dt('message.warn.border.color'), \";\\n color: \").concat(dt('message.warn.color'), \";\\n box-shadow: \").concat(dt('message.warn.shadow'), \";\\n}\\n\\n.p-message-warn .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.warn.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.warn.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-warn .p-message-close-button:hover {\\n background: \").concat(dt('message.warn.close.button.hover.background'), \";\\n}\\n\\n.p-message-error {\\n background: \").concat(dt('message.error.background'), \";\\n outline-color: \").concat(dt('message.error.border.color'), \";\\n color: \").concat(dt('message.error.color'), \";\\n box-shadow: \").concat(dt('message.error.shadow'), \";\\n}\\n\\n.p-message-error .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.error.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.error.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-error .p-message-close-button:hover {\\n background: \").concat(dt('message.error.close.button.hover.background'), \";\\n}\\n\\n.p-message-secondary {\\n background: \").concat(dt('message.secondary.background'), \";\\n outline-color: \").concat(dt('message.secondary.border.color'), \";\\n color: \").concat(dt('message.secondary.color'), \";\\n box-shadow: \").concat(dt('message.secondary.shadow'), \";\\n}\\n\\n.p-message-secondary .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.secondary.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.secondary.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-secondary .p-message-close-button:hover {\\n background: \").concat(dt('message.secondary.close.button.hover.background'), \";\\n}\\n\\n.p-message-contrast {\\n background: \").concat(dt('message.contrast.background'), \";\\n outline-color: \").concat(dt('message.contrast.border.color'), \";\\n color: \").concat(dt('message.contrast.color'), \";\\n box-shadow: \").concat(dt('message.contrast.shadow'), \";\\n}\\n\\n.p-message-contrast .p-message-close-button:focus-visible {\\n outline-color: \").concat(dt('message.contrast.close.button.focus.ring.color'), \";\\n box-shadow: \").concat(dt('message.contrast.close.button.focus.ring.shadow'), \";\\n}\\n\\n.p-message-contrast .p-message-close-button:hover {\\n background: \").concat(dt('message.contrast.close.button.hover.background'), \";\\n}\\n\\n.p-message-text {\\n font-size: \").concat(dt('message.text.font.size'), \";\\n font-weight: \").concat(dt('message.text.font.weight'), \";\\n}\\n\\n.p-message-icon {\\n font-size: \").concat(dt('message.icon.size'), \";\\n width: \").concat(dt('message.icon.size'), \";\\n height: \").concat(dt('message.icon.size'), \";\\n}\\n\\n.p-message-enter-from {\\n opacity: 0;\\n}\\n\\n.p-message-enter-active {\\n transition: opacity 0.3s;\\n}\\n\\n.p-message.p-message-leave-from {\\n max-height: 1000px;\\n}\\n\\n.p-message.p-message-leave-to {\\n max-height: 0;\\n opacity: 0;\\n margin: 0;\\n}\\n\\n.p-message-leave-active {\\n overflow: hidden;\\n transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin 0.3s;\\n}\\n\\n.p-message-leave-active .p-message-close-button {\\n opacity: 0;\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return 'p-message p-component p-message-' + props.severity;\n },\n content: 'p-message-content',\n icon: 'p-message-icon',\n text: 'p-message-text',\n closeButton: 'p-message-close-button',\n closeIcon: 'p-message-close-icon'\n};\nvar MessageStyle = BaseStyle.extend({\n name: 'message',\n theme: theme,\n classes: classes\n});\n\nexport { MessageStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import CheckIcon from '@primevue/icons/check';\nimport ExclamationTriangleIcon from '@primevue/icons/exclamationtriangle';\nimport InfoCircleIcon from '@primevue/icons/infocircle';\nimport TimesIcon from '@primevue/icons/times';\nimport TimesCircleIcon from '@primevue/icons/timescircle';\nimport Ripple from 'primevue/ripple';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport MessageStyle from 'primevue/message/style';\nimport { resolveComponent, resolveDirective, openBlock, createBlock, Transition, mergeProps, withCtx, withDirectives, createElementVNode, renderSlot, createElementBlock, resolveDynamicComponent, createCommentVNode, vShow } from 'vue';\n\nvar script$1 = {\n name: 'BaseMessage',\n \"extends\": BaseComponent,\n props: {\n severity: {\n type: String,\n \"default\": 'info'\n },\n closable: {\n type: Boolean,\n \"default\": false\n },\n life: {\n type: Number,\n \"default\": null\n },\n icon: {\n type: String,\n \"default\": undefined\n },\n closeIcon: {\n type: String,\n \"default\": undefined\n },\n closeButtonProps: {\n type: null,\n \"default\": null\n }\n },\n style: MessageStyle,\n provide: function provide() {\n return {\n $pcMessage: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'Message',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['close', 'life-end'],\n timeout: null,\n data: function data() {\n return {\n visible: true\n };\n },\n mounted: function mounted() {\n var _this = this;\n if (this.life) {\n setTimeout(function () {\n _this.visible = false;\n _this.$emit('life-end');\n }, this.life);\n }\n },\n methods: {\n close: function close(event) {\n this.visible = false;\n this.$emit('close', event);\n }\n },\n computed: {\n iconComponent: function iconComponent() {\n return {\n info: InfoCircleIcon,\n success: CheckIcon,\n warn: ExclamationTriangleIcon,\n error: TimesCircleIcon\n }[this.severity];\n },\n closeAriaLabel: function closeAriaLabel() {\n return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : undefined;\n }\n },\n directives: {\n ripple: Ripple\n },\n components: {\n TimesIcon: TimesIcon,\n InfoCircleIcon: InfoCircleIcon,\n CheckIcon: CheckIcon,\n ExclamationTriangleIcon: ExclamationTriangleIcon,\n TimesCircleIcon: TimesCircleIcon\n }\n};\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar _hoisted_1 = [\"aria-label\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_TimesIcon = resolveComponent(\"TimesIcon\");\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createBlock(Transition, mergeProps({\n name: \"p-message\",\n appear: \"\"\n }, _ctx.ptmi('transition')), {\n \"default\": withCtx(function () {\n return [withDirectives(createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('root'),\n role: \"alert\",\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\"\n }, _ctx.ptm('root')), [_ctx.$slots.container ? renderSlot(_ctx.$slots, \"container\", {\n key: 0,\n closeCallback: $options.close\n }) : (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('content')\n }, _ctx.ptm('content')), [renderSlot(_ctx.$slots, \"icon\", {\n \"class\": \"p-message-icon\"\n }, function () {\n return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.icon ? 'span' : null), mergeProps({\n \"class\": [_ctx.cx('icon'), _ctx.icon]\n }, _ctx.ptm('icon')), null, 16, [\"class\"]))];\n }), _ctx.$slots[\"default\"] ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": [\"p-message-text\", _ctx.cx('text')]\n }, _ctx.ptm('text')), [renderSlot(_ctx.$slots, \"default\")], 16)) : createCommentVNode(\"\", true), _ctx.closable ? withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n key: 1,\n \"class\": _ctx.cx('closeButton'),\n \"aria-label\": $options.closeAriaLabel,\n type: \"button\",\n onClick: _cache[0] || (_cache[0] = function ($event) {\n return $options.close($event);\n })\n }, _objectSpread(_objectSpread({}, _ctx.closeButtonProps), _ctx.ptm('closeButton'))), [renderSlot(_ctx.$slots, \"closeicon\", {}, function () {\n return [_ctx.closeIcon ? (openBlock(), createElementBlock(\"i\", mergeProps({\n key: 0,\n \"class\": [_ctx.cx('closeIcon'), _ctx.closeIcon]\n }, _ctx.ptm('closeIcon')), null, 16)) : (openBlock(), createBlock(_component_TimesIcon, mergeProps({\n key: 1,\n \"class\": [_ctx.cx('closeIcon'), _ctx.closeIcon]\n }, _ctx.ptm('closeIcon')), null, 16, [\"class\"]))];\n })], 16, _hoisted_1)), [[_directive_ripple]]) : createCommentVNode(\"\", true)], 16))], 16), [[vShow, $data.visible]])];\n }),\n _: 3\n }, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","import { api } from '@/scripts/api'\nimport { defineStore } from 'pinia'\nimport { computed, ref, watchEffect } from 'vue'\nimport type { User as UserConfig } from '@/types/apiTypes'\n\nexport interface User {\n userId: string\n username: string\n}\n\nexport const useUserStore = defineStore('user', () => {\n /**\n * The user config. null if not loaded.\n */\n const userConfig = ref(null)\n /**\n * The current user id. null if not logged in or in single user mode.\n */\n const currentUserId = ref(null)\n const isMultiUserServer = computed(\n () => userConfig.value && 'users' in userConfig.value\n )\n const needsLogin = computed(\n () => !currentUserId.value && isMultiUserServer.value\n )\n const users = computed(() =>\n Object.entries(userConfig.value?.users ?? {}).map(([userId, username]) => ({\n userId,\n username\n }))\n )\n const currentUser = computed(\n () =>\n users.value.find((user) => user.userId === currentUserId.value) ?? null\n )\n const initialized = computed(() => userConfig.value !== null)\n\n /**\n * Initialize the user store.\n */\n async function initialize() {\n userConfig.value = await api.getUserConfig()\n currentUserId.value = localStorage['Comfy.userId']\n }\n\n /**\n * Create a new user.\n *\n * @param username - The username.\n * @returns The new user.\n */\n async function createUser(username: string): Promise {\n const resp = await api.createUser(username)\n const data = await resp.json()\n if (resp.status >= 300) {\n throw new Error(\n data.error ??\n 'Error creating user: ' + resp.status + ' ' + resp.statusText\n )\n }\n return {\n userId: data,\n username\n }\n }\n\n /**\n * Login the current user.\n *\n * @param user - The user.\n */\n async function login({\n userId,\n username\n }: {\n userId: string\n username: string\n }) {\n currentUserId.value = userId\n localStorage['Comfy.userId'] = userId\n localStorage['Comfy.userName'] = username\n }\n\n watchEffect(() => {\n if (isMultiUserServer.value && currentUserId.value) {\n api.user = currentUserId.value\n }\n })\n\n /**\n * Logout the current user.\n */\n async function logout() {\n delete localStorage['Comfy.userId']\n delete localStorage['Comfy.userName']\n }\n\n return {\n users,\n currentUser,\n isMultiUserServer,\n needsLogin,\n initialized,\n initialize,\n createUser,\n login,\n logout\n }\n})\n","\n\n\n\n","import type { TreeNode } from 'primevue/treenode'\n\nexport function buildTree(items: T[], key: (item: T) => string[]): TreeNode {\n const root: TreeNode = {\n key: 'root',\n label: 'root',\n children: []\n }\n\n const map: Record = {\n root: root\n }\n\n for (const item of items) {\n const keys = key(item)\n let parent = root\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n // 'a/b/c/' represents an empty folder 'c' in folder 'b' in folder 'a'\n // 'a/b/c/' is split into ['a', 'b', 'c', '']\n if (k === '' && i === keys.length - 1) break\n\n const id = parent.key + '/' + k\n if (!map[id]) {\n const node: TreeNode = {\n key: id,\n label: k,\n leaf: false,\n children: []\n }\n map[id] = node\n parent.children?.push(node)\n }\n parent = map[id]\n }\n parent.leaf = keys[keys.length - 1] !== ''\n parent.data = item\n }\n return root\n}\n\nexport function flattenTree(tree: TreeNode): T[] {\n const result: T[] = []\n const stack: TreeNode[] = [tree]\n while (stack.length) {\n const node = stack.pop()!\n if (node.leaf && node.data) result.push(node.data)\n stack.push(...(node.children || []))\n }\n return result\n}\n\n/**\n * Sort the children of the node recursively.\n * @param node - The node to sort.\n * @param options - The options for sorting.\n * @param options.groupLeaf - Whether to group leaf nodes together.\n * @returns The sorted node.\n */\nexport function sortedTree(\n node: TreeNode,\n {\n groupLeaf = false\n }: {\n groupLeaf?: boolean\n } = {}\n): TreeNode {\n const newNode: TreeNode = {\n ...node\n }\n\n if (node.children) {\n if (groupLeaf) {\n // Split children into folders and files\n const folders = node.children.filter((child) => !child.leaf)\n const files = node.children.filter((child) => child.leaf)\n\n // Sort folders and files separately by label\n const sortedFolders = folders.sort((a, b) =>\n (a.label ?? '').localeCompare(b.label ?? '')\n )\n const sortedFiles = files.sort((a, b) =>\n (a.label ?? '').localeCompare(b.label ?? '')\n )\n\n // Recursively sort folder children\n newNode.children = [\n ...sortedFolders.map((folder) =>\n sortedTree(folder, { groupLeaf: true })\n ),\n ...sortedFiles\n ]\n } else {\n const sortedChildren = [...node.children].sort((a, b) =>\n (a.label ?? '').localeCompare(b.label ?? '')\n )\n newNode.children = [\n ...sortedChildren.map((child) =>\n sortedTree(child, { groupLeaf: false })\n )\n ]\n }\n }\n\n return newNode\n}\n\nexport const findNodeByKey = (root: TreeNode, key: string): TreeNode | null => {\n if (root.key === key) {\n return root\n }\n if (!root.children) {\n return null\n }\n for (const child of root.children) {\n const result = findNodeByKey(child, key)\n if (result) {\n return result\n }\n }\n return null\n}\n","\n\n\n\n\n\n\n","\n\n\n","import { inject } from 'vue';\n\nvar PrimeVueToastSymbol = Symbol();\nfunction useToast() {\n var PrimeVueToast = inject(PrimeVueToastSymbol);\n if (!PrimeVueToast) {\n throw new Error('No PrimeVue Toast provided!');\n }\n return PrimeVueToast;\n}\n\nexport { PrimeVueToastSymbol, useToast };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n","import { useClipboard } from '@vueuse/core'\nimport { useToast } from 'primevue/usetoast'\n\nexport function useCopyToClipboard() {\n const { copy, isSupported } = useClipboard()\n const toast = useToast()\n\n const copyToClipboard = async (text: string) => {\n if (isSupported) {\n try {\n await copy(text)\n toast.add({\n severity: 'success',\n summary: 'Success',\n detail: 'Copied to clipboard',\n life: 3000\n })\n } catch (err) {\n toast.add({\n severity: 'error',\n summary: 'Error',\n detail: 'Failed to copy report'\n })\n }\n } else {\n toast.add({\n severity: 'error',\n summary: 'Error',\n detail: 'Clipboard API not supported in your browser'\n })\n }\n }\n\n return {\n copyToClipboard\n }\n}\n","\n\n\n\n\n","\n\n\n\n\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-floatlabel {\\n display: block;\\n position: relative;\\n}\\n\\n.p-floatlabel label {\\n position: absolute;\\n pointer-events: none;\\n top: 50%;\\n margin-top: -.5rem;\\n transition-property: all;\\n transition-timing-function: ease;\\n line-height: 1;\\n left: 0.75rem;\\n color: \".concat(dt('floatlabel.color'), \";\\n transition-duration: \").concat(dt('floatlabel.transition.duration'), \";\\n}\\n\\n.p-floatlabel:has(textarea) label {\\n top: 1rem;\\n}\\n\\n.p-floatlabel:has(input:focus) label,\\n.p-floatlabel:has(input.p-filled) label,\\n.p-floatlabel:has(input:-webkit-autofill) label,\\n.p-floatlabel:has(textarea:focus) label,\\n.p-floatlabel:has(textarea.p-filled) label,\\n.p-floatlabel:has(.p-inputwrapper-focus) label,\\n.p-floatlabel:has(.p-inputwrapper-filled) label {\\n top: -.75rem;\\n font-size: 12px;\\n color: \").concat(dt('floatlabel.focus.color'), \";\\n}\\n\\n.p-floatlabel .p-placeholder,\\n.p-floatlabel input::placeholder,\\n.p-floatlabel .p-inputtext::placeholder {\\n opacity: 0;\\n transition-property: all;\\n transition-timing-function: ease;\\n}\\n\\n.p-floatlabel .p-focus .p-placeholder,\\n.p-floatlabel input:focus::placeholder,\\n.p-floatlabel .p-inputtext:focus::placeholder {\\n opacity: 1;\\n transition-property: all;\\n transition-timing-function: ease;\\n}\\n\\n.p-floatlabel > .p-invalid + label {\\n color: \").concat(dt('floatlabel.invalid.color'), \";\\n}\\n\");\n};\nvar classes = {\n root: 'p-floatlabel'\n};\nvar FloatLabelStyle = BaseStyle.extend({\n name: 'floatlabel',\n theme: theme,\n classes: classes\n});\n\nexport { FloatLabelStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseComponent from '@primevue/core/basecomponent';\nimport FloatLabelStyle from 'primevue/floatlabel/style';\nimport { openBlock, createElementBlock, mergeProps, renderSlot } from 'vue';\n\nvar script$1 = {\n name: 'BaseFloatLabel',\n \"extends\": BaseComponent,\n props: {},\n style: FloatLabelStyle,\n provide: function provide() {\n return {\n $pcFloatLabel: this,\n $parentInstance: this\n };\n }\n};\n\nvar script = {\n name: 'FloatLabel',\n \"extends\": script$1,\n inheritAttrs: false\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [renderSlot(_ctx.$slots, \"default\")], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n","\n\n\n\n\n","import { createI18n } from 'vue-i18n'\nimport en from './locales/en/main.json'\nimport zh from './locales/zh/main.json'\nimport ru from './locales/ru/main.json'\nimport ja from './locales/ja/main.json'\nimport ko from './locales/ko/main.json'\nimport enNodes from './locales/en/nodeDefs.json'\nimport zhNodes from './locales/zh/nodeDefs.json'\nimport ruNodes from './locales/ru/nodeDefs.json'\nimport jaNodes from './locales/ja/nodeDefs.json'\nimport koNodes from './locales/ko/nodeDefs.json'\nimport enCommands from './locales/en/commands.json'\nimport zhCommands from './locales/zh/commands.json'\nimport ruCommands from './locales/ru/commands.json'\nimport jaCommands from './locales/ja/commands.json'\nimport koCommands from './locales/ko/commands.json'\n\nfunction buildLocale(main: M, nodes: N, commands: C) {\n return {\n ...main,\n nodeDefs: nodes,\n commands: commands\n }\n}\n\nconst messages = {\n en: buildLocale(en, enNodes, enCommands),\n zh: buildLocale(zh, zhNodes, zhCommands),\n ru: buildLocale(ru, ruNodes, ruCommands),\n ja: buildLocale(ja, jaNodes, jaCommands),\n ko: buildLocale(ko, koNodes, koCommands)\n}\n\nexport const i18n = createI18n({\n // Must set `false`, as Vue I18n Legacy API is for Vue 2\n legacy: false,\n locale: navigator.language.split('-')[0] || 'en',\n fallbackLocale: 'en',\n messages,\n // Ignore warnings for locale options as each option is in its own language.\n // e.g. \"English\", \"中文\", \"Русский\", \"日本語\", \"한국어\"\n missingWarn: /^(?!settingsDialog\\.Comfy_Locale\\.options\\.).+/,\n fallbackWarn: /^(?!settingsDialog\\.Comfy_Locale\\.options\\.).+/\n})\n\n/** Convenience shorthand: i18n.global */\nexport const { t, te } = i18n.global\n\n/**\n * Safe translation function that returns the fallback message if the key is not found.\n *\n * @param key - The key to translate.\n * @param fallbackMessage - The fallback message to use if the key is not found.\n */\nexport function st(key: string, fallbackMessage: string) {\n return te(key) ? t(key) : fallbackMessage\n}\n","// This module is mocked in tests-ui/\n// Import vue components here to avoid tests-ui/ reporting errors\n// about importing primevue components.\nimport { useDialogStore, type ShowDialogOptions } from '@/stores/dialogStore'\nimport LoadWorkflowWarning from '@/components/dialog/content/LoadWorkflowWarning.vue'\nimport MissingModelsWarning from '@/components/dialog/content/MissingModelsWarning.vue'\nimport SettingDialogContent from '@/components/dialog/content/SettingDialogContent.vue'\nimport SettingDialogHeader from '@/components/dialog/header/SettingDialogHeader.vue'\nimport type { ExecutionErrorWsMessage } from '@/types/apiTypes'\nimport ExecutionErrorDialogContent from '@/components/dialog/content/ExecutionErrorDialogContent.vue'\nimport TemplateWorkflowsContent from '@/components/templates/TemplateWorkflowsContent.vue'\nimport PromptDialogContent from '@/components/dialog/content/PromptDialogContent.vue'\nimport ConfirmationDialogContent from '@/components/dialog/content/ConfirmationDialogContent.vue'\nimport { t } from '@/i18n'\nimport type { MissingNodeType } from '@/types/comfy'\n\nexport function showLoadWorkflowWarning(props: {\n missingNodeTypes: MissingNodeType[]\n [key: string]: any\n}) {\n const dialogStore = useDialogStore()\n dialogStore.showDialog({\n key: 'global-load-workflow-warning',\n component: LoadWorkflowWarning,\n props\n })\n}\n\nexport function showMissingModelsWarning(props: {\n missingModels: any[]\n paths: Record\n [key: string]: any\n}) {\n const dialogStore = useDialogStore()\n dialogStore.showDialog({\n key: 'global-missing-models-warning',\n component: MissingModelsWarning,\n props\n })\n}\n\nexport function showSettingsDialog() {\n useDialogStore().showDialog({\n key: 'global-settings',\n headerComponent: SettingDialogHeader,\n component: SettingDialogContent\n })\n}\n\nexport function showExecutionErrorDialog(error: ExecutionErrorWsMessage) {\n useDialogStore().showDialog({\n key: 'global-execution-error',\n component: ExecutionErrorDialogContent,\n props: {\n error\n }\n })\n}\n\nexport function showTemplateWorkflowsDialog() {\n useDialogStore().showDialog({\n key: 'global-template-workflows',\n title: t('templateWorkflows.title'),\n component: TemplateWorkflowsContent\n })\n}\n\nexport async function showPromptDialog({\n title,\n message,\n defaultValue = ''\n}: {\n title: string\n message: string\n defaultValue?: string\n}): Promise {\n const dialogStore = useDialogStore()\n\n return new Promise((resolve) => {\n dialogStore.showDialog({\n key: 'global-prompt',\n title,\n component: PromptDialogContent,\n props: {\n message,\n defaultValue,\n onConfirm: (value: string) => {\n resolve(value)\n }\n },\n dialogComponentProps: {\n onClose: () => {\n resolve(null)\n }\n }\n })\n })\n}\n\nexport type ConfirmationDialogType =\n | 'overwrite'\n | 'delete'\n | 'dirtyClose'\n | 'reinstall'\n\n/**\n *\n * @returns `true` if the user confirms the dialog,\n * `false` if denied (e.g. no in yes/no/cancel), or\n * `null` if the dialog is cancelled or closed\n */\nexport async function showConfirmationDialog({\n title,\n type,\n message,\n itemList = []\n}: {\n /** Dialog heading */\n title: string\n /** Pre-configured dialog type */\n type: ConfirmationDialogType\n /** The main message body */\n message: string\n /** Displayed as an unorderd list immediately below the message body */\n itemList?: string[]\n}): Promise {\n return new Promise((resolve) => {\n const options: ShowDialogOptions = {\n key: 'global-prompt',\n title,\n component: ConfirmationDialogContent,\n props: {\n message,\n type,\n itemList,\n onConfirm: resolve\n },\n dialogComponentProps: {\n onClose: () => resolve(null)\n }\n }\n\n useDialogStore().showDialog(options)\n })\n}\n","// @ts-strict-ignore\nimport { api } from './api'\nimport { ComfyDialog as _ComfyDialog } from './ui/dialog'\nimport { toggleSwitch } from './ui/toggleSwitch'\nimport { ComfySettingsDialog } from './ui/settings'\nimport { ComfyApp, app } from './app'\nimport { TaskItem, type StatusWsMessageStatus } from '@/types/apiTypes'\nimport { showSettingsDialog } from '@/services/dialogService'\nimport { useSettingStore } from '@/stores/settingStore'\nimport { useCommandStore } from '@/stores/commandStore'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\n\nexport const ComfyDialog = _ComfyDialog\n\ntype Position2D = {\n x: number\n y: number\n}\n\ntype Props = {\n parent?: HTMLElement\n $?: (el: HTMLElement) => void\n dataset?: DOMStringMap\n style?: Partial\n for?: string\n textContent?: string\n [key: string]: any\n}\n\ntype Children = Element[] | Element | string | string[]\n\ntype ElementType = K extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[K]\n : HTMLElement\n\nexport function $el(\n tag: TTag,\n propsOrChildren?: Children | Props,\n children?: Children\n): ElementType {\n const split = tag.split('.')\n const element = document.createElement(split.shift() as string)\n if (split.length > 0) {\n element.classList.add(...split)\n }\n\n if (propsOrChildren) {\n if (typeof propsOrChildren === 'string') {\n propsOrChildren = { textContent: propsOrChildren }\n } else if (propsOrChildren instanceof Element) {\n propsOrChildren = [propsOrChildren]\n }\n if (Array.isArray(propsOrChildren)) {\n element.append(...propsOrChildren)\n } else {\n const {\n parent,\n $: cb,\n dataset,\n style,\n ...rest\n } = propsOrChildren as Props\n\n if (rest.for) {\n element.setAttribute('for', rest.for)\n }\n\n if (style) {\n Object.assign(element.style, style)\n }\n\n if (dataset) {\n Object.assign(element.dataset, dataset)\n }\n\n Object.assign(element, rest)\n if (children) {\n element.append(...(Array.isArray(children) ? children : [children]))\n }\n\n if (parent) {\n parent.append(element)\n }\n\n if (cb) {\n cb(element)\n }\n }\n }\n return element as ElementType\n}\n\nfunction dragElement(dragEl, settings): () => void {\n var posDiffX = 0,\n posDiffY = 0,\n posStartX = 0,\n posStartY = 0,\n newPosX = 0,\n newPosY = 0\n if (dragEl.getElementsByClassName('drag-handle')[0]) {\n // if present, the handle is where you move the DIV from:\n dragEl.getElementsByClassName('drag-handle')[0].onmousedown = dragMouseDown\n } else {\n // otherwise, move the DIV from anywhere inside the DIV:\n dragEl.onmousedown = dragMouseDown\n }\n\n // When the element resizes (e.g. view queue) ensure it is still in the windows bounds\n const resizeObserver = new ResizeObserver(() => {\n ensureInBounds()\n }).observe(dragEl)\n\n function ensureInBounds() {\n try {\n newPosX = Math.min(\n document.body.clientWidth - dragEl.clientWidth,\n Math.max(0, dragEl.offsetLeft)\n )\n newPosY = Math.min(\n document.body.clientHeight - dragEl.clientHeight,\n Math.max(0, dragEl.offsetTop)\n )\n\n positionElement()\n } catch (exception) {\n // robust\n }\n }\n\n function positionElement() {\n if (dragEl.style.display === 'none') return\n\n const halfWidth = document.body.clientWidth / 2\n const anchorRight = newPosX + dragEl.clientWidth / 2 > halfWidth\n\n // set the element's new position:\n if (anchorRight) {\n dragEl.style.left = 'unset'\n dragEl.style.right =\n document.body.clientWidth - newPosX - dragEl.clientWidth + 'px'\n } else {\n dragEl.style.left = newPosX + 'px'\n dragEl.style.right = 'unset'\n }\n\n dragEl.style.top = newPosY + 'px'\n dragEl.style.bottom = 'unset'\n\n if (savePos) {\n localStorage.setItem(\n 'Comfy.MenuPosition',\n JSON.stringify({\n x: dragEl.offsetLeft,\n y: dragEl.offsetTop\n })\n )\n }\n }\n\n function restorePos() {\n let posString = localStorage.getItem('Comfy.MenuPosition')\n if (posString) {\n const pos = JSON.parse(posString) as Position2D\n newPosX = pos.x\n newPosY = pos.y\n positionElement()\n ensureInBounds()\n }\n }\n\n let savePos = undefined\n settings.addSetting({\n id: 'Comfy.MenuPosition',\n category: ['Comfy', 'Menu', 'MenuPosition'],\n name: \"Save legacy menu's position\",\n type: 'boolean',\n defaultValue: savePos,\n onChange(value) {\n if (savePos === undefined && value) {\n restorePos()\n }\n savePos = value\n }\n })\n\n function dragMouseDown(e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n posStartX = e.clientX\n posStartY = e.clientY\n document.onmouseup = closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = elementDrag\n }\n\n function elementDrag(e) {\n e = e || window.event\n e.preventDefault()\n\n dragEl.classList.add('comfy-menu-manual-pos')\n\n // calculate the new cursor position:\n posDiffX = e.clientX - posStartX\n posDiffY = e.clientY - posStartY\n posStartX = e.clientX\n posStartY = e.clientY\n\n newPosX = Math.min(\n document.body.clientWidth - dragEl.clientWidth,\n Math.max(0, dragEl.offsetLeft + posDiffX)\n )\n newPosY = Math.min(\n document.body.clientHeight - dragEl.clientHeight,\n Math.max(0, dragEl.offsetTop + posDiffY)\n )\n\n positionElement()\n }\n\n window.addEventListener('resize', () => {\n ensureInBounds()\n })\n\n function closeDragElement() {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n }\n\n return restorePos\n}\n\nclass ComfyList {\n #type\n #text\n #reverse\n element: HTMLDivElement\n button?: HTMLButtonElement\n\n constructor(text, type?, reverse?) {\n this.#text = text\n this.#type = type || text.toLowerCase()\n this.#reverse = reverse || false\n this.element = $el('div.comfy-list') as HTMLDivElement\n this.element.style.display = 'none'\n }\n\n get visible() {\n return this.element.style.display !== 'none'\n }\n\n async load() {\n const items = await api.getItems(this.#type)\n this.element.replaceChildren(\n ...Object.keys(items).flatMap((section) => [\n $el('h4', {\n textContent: section\n }),\n $el('div.comfy-list-items', [\n ...(this.#reverse ? items[section].reverse() : items[section]).map(\n (item: TaskItem) => {\n // Allow items to specify a custom remove action (e.g. for interrupt current prompt)\n const removeAction =\n 'remove' in item\n ? item.remove\n : {\n name: 'Delete',\n cb: () => api.deleteItem(this.#type, item.prompt[1])\n }\n return $el('div', { textContent: item.prompt[0] + ': ' }, [\n $el('button', {\n textContent: 'Load',\n onclick: async () => {\n await app.loadGraphData(\n item.prompt[3].extra_pnginfo.workflow,\n true,\n false\n )\n if ('outputs' in item) {\n app.nodeOutputs = {}\n for (const [key, value] of Object.entries(item.outputs)) {\n const realKey = item['meta']?.[key]?.display_node ?? key\n app.nodeOutputs[realKey] = value\n }\n }\n }\n }),\n $el('button', {\n textContent: removeAction.name,\n onclick: async () => {\n await removeAction.cb()\n await this.update()\n }\n })\n ])\n }\n )\n ])\n ]),\n $el('div.comfy-list-actions', [\n $el('button', {\n textContent: 'Clear ' + this.#text,\n onclick: async () => {\n await api.clearItems(this.#type)\n await this.load()\n }\n }),\n $el('button', { textContent: 'Refresh', onclick: () => this.load() })\n ])\n )\n }\n\n async update() {\n if (this.visible) {\n await this.load()\n }\n }\n\n async show() {\n this.element.style.display = 'block'\n this.button.textContent = 'Close'\n\n await this.load()\n }\n\n hide() {\n this.element.style.display = 'none'\n this.button.textContent = 'View ' + this.#text\n }\n\n toggle() {\n if (this.visible) {\n this.hide()\n return false\n } else {\n this.show()\n return true\n }\n }\n}\n\nexport class ComfyUI {\n app: ComfyApp\n dialog: _ComfyDialog\n settings: ComfySettingsDialog\n batchCount: number\n lastQueueSize: number\n queue: ComfyList\n history: ComfyList\n autoQueueMode: string\n graphHasChanged: boolean\n autoQueueEnabled: boolean\n menuContainer: HTMLDivElement\n queueSize: Element\n restoreMenuPosition: () => void\n loadFile: () => void\n\n constructor(app) {\n this.app = app\n this.dialog = new ComfyDialog()\n this.settings = new ComfySettingsDialog(app)\n\n this.batchCount = 1\n this.lastQueueSize = 0\n this.queue = new ComfyList('Queue')\n this.history = new ComfyList('History', 'history', true)\n\n api.addEventListener('status', () => {\n this.queue.update()\n this.history.update()\n })\n\n this.setup(document.body)\n }\n\n setup(containerElement: HTMLElement) {\n const fileInput = $el('input', {\n id: 'comfy-file-input',\n type: 'file',\n accept: '.json,image/png,.latent,.safetensors,image/webp,audio/flac',\n style: { display: 'none' },\n parent: document.body,\n onchange: async () => {\n await app.handleFile(fileInput.files[0])\n fileInput.value = ''\n }\n })\n\n this.loadFile = () => fileInput.click()\n\n const autoQueueModeEl = toggleSwitch(\n 'autoQueueMode',\n [\n {\n text: 'instant',\n tooltip: 'A new prompt will be queued as soon as the queue reaches 0'\n },\n {\n text: 'change',\n tooltip:\n 'A new prompt will be queued when the queue is at 0 and the graph is/has changed'\n }\n ],\n {\n onChange: (value) => {\n this.autoQueueMode = value.item.value\n }\n }\n )\n autoQueueModeEl.style.display = 'none'\n\n api.addEventListener('graphChanged', () => {\n if (this.autoQueueMode === 'change' && this.autoQueueEnabled === true) {\n if (this.lastQueueSize === 0) {\n this.graphHasChanged = false\n app.queuePrompt(0, this.batchCount)\n } else {\n this.graphHasChanged = true\n }\n }\n })\n\n this.menuContainer = $el('div.comfy-menu', { parent: containerElement }, [\n $el(\n 'div.drag-handle.comfy-menu-header',\n {\n style: {\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n cursor: 'default'\n }\n },\n [\n $el('span.drag-handle'),\n $el('span.comfy-menu-queue-size', { $: (q) => (this.queueSize = q) }),\n $el('div.comfy-menu-actions', [\n $el('button.comfy-settings-btn', {\n textContent: '⚙️',\n onclick: showSettingsDialog\n }),\n $el('button.comfy-close-menu-btn', {\n textContent: '\\u00d7',\n onclick: () => {\n useWorkspaceStore().focusMode = true\n }\n })\n ])\n ]\n ),\n $el('button.comfy-queue-btn', {\n id: 'queue-button',\n textContent: 'Queue Prompt',\n onclick: () => app.queuePrompt(0, this.batchCount)\n }),\n $el('div', {}, [\n $el('label', { innerHTML: 'Extra options' }, [\n $el('input', {\n type: 'checkbox',\n onchange: (i) => {\n document.getElementById('extraOptions').style.display = i\n .srcElement.checked\n ? 'block'\n : 'none'\n this.batchCount = i.srcElement.checked\n ? Number.parseInt(\n (\n document.getElementById(\n 'batchCountInputRange'\n ) as HTMLInputElement\n ).value\n )\n : 1\n ;(\n document.getElementById('autoQueueCheckbox') as HTMLInputElement\n ).checked = false\n this.autoQueueEnabled = false\n }\n })\n ])\n ]),\n $el(\n 'div',\n { id: 'extraOptions', style: { width: '100%', display: 'none' } },\n [\n $el('div', [\n $el('label', { innerHTML: 'Batch count' }),\n $el('input', {\n id: 'batchCountInputNumber',\n type: 'number',\n value: this.batchCount,\n min: '1',\n style: { width: '35%', marginLeft: '0.4em' },\n oninput: (i) => {\n this.batchCount = i.target.value\n /* Even though an element with a type of range logically represents a number (since\n it's used for numeric input), the value it holds is still treated as a string in HTML and\n JavaScript. This behavior is consistent across all elements regardless of their type\n (like text, number, or range), where the .value property is always a string. */\n ;(\n document.getElementById(\n 'batchCountInputRange'\n ) as HTMLInputElement\n ).value = this.batchCount.toString()\n }\n }),\n $el('input', {\n id: 'batchCountInputRange',\n type: 'range',\n min: '1',\n max: '100',\n value: this.batchCount,\n oninput: (i) => {\n this.batchCount = i.srcElement.value\n // Note\n ;(\n document.getElementById(\n 'batchCountInputNumber'\n ) as HTMLInputElement\n ).value = i.srcElement.value\n }\n })\n ]),\n $el('div', [\n $el('label', {\n for: 'autoQueueCheckbox',\n innerHTML: 'Auto Queue'\n }),\n $el('input', {\n id: 'autoQueueCheckbox',\n type: 'checkbox',\n checked: false,\n title: 'Automatically queue prompt when the queue size hits 0',\n onchange: (e) => {\n this.autoQueueEnabled = e.target.checked\n autoQueueModeEl.style.display = this.autoQueueEnabled\n ? ''\n : 'none'\n }\n }),\n autoQueueModeEl\n ])\n ]\n ),\n $el('div.comfy-menu-btns', [\n $el('button', {\n id: 'queue-front-button',\n textContent: 'Queue Front',\n onclick: () => app.queuePrompt(-1, this.batchCount)\n }),\n $el('button', {\n $: (b) => (this.queue.button = b as HTMLButtonElement),\n id: 'comfy-view-queue-button',\n textContent: 'View Queue',\n onclick: () => {\n this.history.hide()\n this.queue.toggle()\n }\n }),\n $el('button', {\n $: (b) => (this.history.button = b as HTMLButtonElement),\n id: 'comfy-view-history-button',\n textContent: 'View History',\n onclick: () => {\n this.queue.hide()\n this.history.toggle()\n }\n })\n ]),\n this.queue.element,\n this.history.element,\n $el('button', {\n id: 'comfy-save-button',\n textContent: 'Save',\n onclick: () => {\n useCommandStore().execute('Comfy.ExportWorkflow')\n }\n }),\n $el('button', {\n id: 'comfy-dev-save-api-button',\n textContent: 'Save (API Format)',\n style: { width: '100%', display: 'none' },\n onclick: () => {\n useCommandStore().execute('Comfy.ExportWorkflowAPI')\n }\n }),\n $el('button', {\n id: 'comfy-load-button',\n textContent: 'Load',\n onclick: () => fileInput.click()\n }),\n $el('button', {\n id: 'comfy-refresh-button',\n textContent: 'Refresh',\n onclick: () => app.refreshComboInNodes()\n }),\n $el('button', {\n id: 'comfy-clipspace-button',\n textContent: 'Clipspace',\n onclick: () => app.openClipspace()\n }),\n $el('button', {\n id: 'comfy-clear-button',\n textContent: 'Clear',\n onclick: () => {\n if (\n !useSettingStore().get('Comfy.ConfirmClear') ||\n confirm('Clear workflow?')\n ) {\n app.clean()\n app.graph.clear()\n app.resetView()\n api.dispatchCustomEvent('graphCleared')\n }\n }\n }),\n $el('button', {\n id: 'comfy-load-default-button',\n textContent: 'Load Default',\n onclick: async () => {\n if (\n !useSettingStore().get('Comfy.ConfirmClear') ||\n confirm('Load default workflow?')\n ) {\n app.resetView()\n await app.loadGraphData()\n }\n }\n }),\n $el('button', {\n id: 'comfy-reset-view-button',\n textContent: 'Reset View',\n onclick: async () => {\n app.resetView()\n }\n })\n ]) as HTMLDivElement\n // Hide by default on construction so it does not interfere with other views.\n this.menuContainer.style.display = 'none'\n\n this.restoreMenuPosition = dragElement(this.menuContainer, this.settings)\n\n // @ts-expect-error\n this.setStatus({ exec_info: { queue_remaining: 'X' } })\n }\n\n setStatus(status: StatusWsMessageStatus | null) {\n this.queueSize.textContent =\n 'Queue size: ' + (status ? status.exec_info.queue_remaining : 'ERR')\n if (status) {\n if (\n this.lastQueueSize != 0 &&\n status.exec_info.queue_remaining == 0 &&\n this.autoQueueEnabled &&\n (this.autoQueueMode === 'instant' || this.graphHasChanged) &&\n !app.lastExecutionError\n ) {\n app.queuePrompt(0, this.batchCount)\n status.exec_info.queue_remaining += this.batchCount\n this.graphHasChanged = false\n }\n this.lastQueueSize = status.exec_info.queue_remaining\n }\n }\n}\n","import type { ComfyWorkflowJSON } from '@/types/comfyWorkflow'\n\nexport const defaultGraph: ComfyWorkflowJSON = {\n last_node_id: 9,\n last_link_id: 9,\n nodes: [\n {\n id: 7,\n type: 'CLIPTextEncode',\n pos: [413, 389],\n size: [425.27801513671875, 180.6060791015625],\n flags: {},\n order: 3,\n mode: 0,\n inputs: [{ name: 'clip', type: 'CLIP', link: 5 }],\n outputs: [\n {\n name: 'CONDITIONING',\n type: 'CONDITIONING',\n links: [6],\n slot_index: 0\n }\n ],\n properties: {},\n widgets_values: ['text, watermark']\n },\n {\n id: 6,\n type: 'CLIPTextEncode',\n pos: [415, 186],\n size: [422.84503173828125, 164.31304931640625],\n flags: {},\n order: 2,\n mode: 0,\n inputs: [{ name: 'clip', type: 'CLIP', link: 3 }],\n outputs: [\n {\n name: 'CONDITIONING',\n type: 'CONDITIONING',\n links: [4],\n slot_index: 0\n }\n ],\n properties: {},\n widgets_values: [\n 'beautiful scenery nature glass bottle landscape, , purple galaxy bottle,'\n ]\n },\n {\n id: 5,\n type: 'EmptyLatentImage',\n pos: [473, 609],\n size: [315, 106],\n flags: {},\n order: 1,\n mode: 0,\n outputs: [{ name: 'LATENT', type: 'LATENT', links: [2], slot_index: 0 }],\n properties: {},\n widgets_values: [512, 512, 1]\n },\n {\n id: 3,\n type: 'KSampler',\n pos: [863, 186],\n size: [315, 262],\n flags: {},\n order: 4,\n mode: 0,\n inputs: [\n { name: 'model', type: 'MODEL', link: 1 },\n { name: 'positive', type: 'CONDITIONING', link: 4 },\n { name: 'negative', type: 'CONDITIONING', link: 6 },\n { name: 'latent_image', type: 'LATENT', link: 2 }\n ],\n outputs: [{ name: 'LATENT', type: 'LATENT', links: [7], slot_index: 0 }],\n properties: {},\n widgets_values: [156680208700286, true, 20, 8, 'euler', 'normal', 1]\n },\n {\n id: 8,\n type: 'VAEDecode',\n pos: [1209, 188],\n size: [210, 46],\n flags: {},\n order: 5,\n mode: 0,\n inputs: [\n { name: 'samples', type: 'LATENT', link: 7 },\n { name: 'vae', type: 'VAE', link: 8 }\n ],\n outputs: [{ name: 'IMAGE', type: 'IMAGE', links: [9], slot_index: 0 }],\n properties: {}\n },\n {\n id: 9,\n type: 'SaveImage',\n pos: [1451, 189],\n size: [210, 26],\n flags: {},\n order: 6,\n mode: 0,\n inputs: [{ name: 'images', type: 'IMAGE', link: 9 }],\n properties: {}\n },\n {\n id: 4,\n type: 'CheckpointLoaderSimple',\n pos: [26, 474],\n size: [315, 98],\n flags: {},\n order: 0,\n mode: 0,\n outputs: [\n { name: 'MODEL', type: 'MODEL', links: [1], slot_index: 0 },\n { name: 'CLIP', type: 'CLIP', links: [3, 5], slot_index: 1 },\n { name: 'VAE', type: 'VAE', links: [8], slot_index: 2 }\n ],\n properties: {},\n widgets_values: ['v1-5-pruned-emaonly.ckpt']\n }\n ],\n links: [\n [1, 4, 0, 3, 0, 'MODEL'],\n [2, 5, 0, 3, 3, 'LATENT'],\n [3, 4, 1, 6, 0, 'CLIP'],\n [4, 6, 0, 3, 1, 'CONDITIONING'],\n [5, 4, 1, 7, 0, 'CLIP'],\n [6, 7, 0, 3, 2, 'CONDITIONING'],\n [7, 3, 0, 8, 0, 'LATENT'],\n [8, 4, 2, 8, 1, 'VAE'],\n [9, 8, 0, 9, 0, 'IMAGE']\n ],\n groups: [],\n config: {},\n extra: {},\n version: 0.4\n}\n\nexport const defaultGraphJSON = JSON.stringify(defaultGraph)\n\nexport const blankGraph: ComfyWorkflowJSON = {\n last_node_id: 0,\n last_link_id: 0,\n nodes: [],\n links: [],\n groups: [],\n config: {},\n extra: {},\n version: 0.4\n}\n","// @ts-strict-ignore\nexport function getFromPngBuffer(buffer: ArrayBuffer) {\n // Get the PNG data as a Uint8Array\n const pngData = new Uint8Array(buffer)\n const dataView = new DataView(pngData.buffer)\n\n // Check that the PNG signature is present\n if (dataView.getUint32(0) !== 0x89504e47) {\n console.error('Not a valid PNG file')\n return\n }\n\n // Start searching for chunks after the PNG signature\n let offset = 8\n let txt_chunks: Record = {}\n // Loop through the chunks in the PNG file\n while (offset < pngData.length) {\n // Get the length of the chunk\n const length = dataView.getUint32(offset)\n // Get the chunk type\n const type = String.fromCharCode(...pngData.slice(offset + 4, offset + 8))\n if (type === 'tEXt' || type == 'comf' || type === 'iTXt') {\n // Get the keyword\n let keyword_end = offset + 8\n while (pngData[keyword_end] !== 0) {\n keyword_end++\n }\n const keyword = String.fromCharCode(\n ...pngData.slice(offset + 8, keyword_end)\n )\n // Get the text\n const contentArraySegment = pngData.slice(\n keyword_end + 1,\n offset + 8 + length\n )\n const contentJson = new TextDecoder('utf-8').decode(contentArraySegment)\n txt_chunks[keyword] = contentJson\n }\n\n offset += 12 + length\n }\n return txt_chunks\n}\n\nexport function getFromPngFile(file: File) {\n return new Promise>((r) => {\n const reader = new FileReader()\n reader.onload = (event) => {\n r(getFromPngBuffer(event.target.result as ArrayBuffer))\n }\n\n reader.readAsArrayBuffer(file)\n })\n}\n","// @ts-strict-ignore\nexport function getFromFlacBuffer(buffer: ArrayBuffer): Record {\n const dataView = new DataView(buffer)\n\n // Verify the FLAC signature\n const signature = String.fromCharCode(...new Uint8Array(buffer, 0, 4))\n if (signature !== 'fLaC') {\n console.error('Not a valid FLAC file')\n return\n }\n\n // Parse metadata blocks\n let offset = 4\n let vorbisComment = null\n while (offset < dataView.byteLength) {\n const isLastBlock = dataView.getUint8(offset) & 0x80\n const blockType = dataView.getUint8(offset) & 0x7f\n const blockSize = dataView.getUint32(offset, false) & 0xffffff\n offset += 4\n\n if (blockType === 4) {\n // Vorbis Comment block type\n vorbisComment = parseVorbisComment(\n new DataView(buffer, offset, blockSize)\n )\n }\n\n offset += blockSize\n if (isLastBlock) break\n }\n\n return vorbisComment\n}\n\nexport function getFromFlacFile(file: File): Promise> {\n return new Promise((r) => {\n const reader = new FileReader()\n reader.onload = function (event) {\n const arrayBuffer = event.target.result as ArrayBuffer\n r(getFromFlacBuffer(arrayBuffer))\n }\n reader.readAsArrayBuffer(file)\n })\n}\n\n// Function to parse the Vorbis Comment block\nfunction parseVorbisComment(dataView: DataView): Record {\n let offset = 0\n const vendorLength = dataView.getUint32(offset, true)\n offset += 4\n const vendorString = getString(dataView, offset, vendorLength)\n offset += vendorLength\n\n const userCommentListLength = dataView.getUint32(offset, true)\n offset += 4\n const comments = {}\n for (let i = 0; i < userCommentListLength; i++) {\n const commentLength = dataView.getUint32(offset, true)\n offset += 4\n const comment = getString(dataView, offset, commentLength)\n offset += commentLength\n\n const ind = comment.indexOf('=')\n const key = comment.substring(0, ind)\n\n comments[key] = comment.substring(ind + 1)\n }\n\n return comments\n}\n\nfunction getString(dataView: DataView, offset: number, length: number): string {\n let string = ''\n for (let i = 0; i < length; i++) {\n string += String.fromCharCode(dataView.getUint8(offset + i))\n }\n return string\n}\n","// @ts-strict-ignore\nimport { LiteGraph } from '@comfyorg/litegraph'\nimport { api } from './api'\nimport { getFromPngFile } from './metadata/png'\nimport { getFromFlacFile } from './metadata/flac'\nimport { workflowService } from '@/services/workflowService'\n\n// Original functions left in for backwards compatibility\nexport function getPngMetadata(file: File): Promise> {\n return getFromPngFile(file)\n}\n\nexport function getFlacMetadata(file: File): Promise> {\n return getFromFlacFile(file)\n}\n\nfunction parseExifData(exifData) {\n // Check for the correct TIFF header (0x4949 for little-endian or 0x4D4D for big-endian)\n const isLittleEndian = String.fromCharCode(...exifData.slice(0, 2)) === 'II'\n\n // Function to read 16-bit and 32-bit integers from binary data\n function readInt(offset, isLittleEndian, length) {\n let arr = exifData.slice(offset, offset + length)\n if (length === 2) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength).getUint16(\n 0,\n isLittleEndian\n )\n } else if (length === 4) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength).getUint32(\n 0,\n isLittleEndian\n )\n }\n }\n\n // Read the offset to the first IFD (Image File Directory)\n const ifdOffset = readInt(4, isLittleEndian, 4)\n\n function parseIFD(offset) {\n const numEntries = readInt(offset, isLittleEndian, 2)\n const result = {}\n\n for (let i = 0; i < numEntries; i++) {\n const entryOffset = offset + 2 + i * 12\n const tag = readInt(entryOffset, isLittleEndian, 2)\n const type = readInt(entryOffset + 2, isLittleEndian, 2)\n const numValues = readInt(entryOffset + 4, isLittleEndian, 4)\n const valueOffset = readInt(entryOffset + 8, isLittleEndian, 4)\n\n // Read the value(s) based on the data type\n let value\n if (type === 2) {\n // ASCII string\n value = new TextDecoder('utf-8').decode(\n exifData.subarray(valueOffset, valueOffset + numValues - 1)\n )\n }\n\n result[tag] = value\n }\n\n return result\n }\n\n // Parse the first IFD\n const ifdData = parseIFD(ifdOffset)\n return ifdData\n}\n\nfunction splitValues(input) {\n var output = {}\n for (var key in input) {\n var value = input[key]\n var splitValues = value.split(':', 2)\n output[splitValues[0]] = splitValues[1]\n }\n return output\n}\n\nexport function getWebpMetadata(file) {\n return new Promise>((r) => {\n const reader = new FileReader()\n reader.onload = (event) => {\n const webp = new Uint8Array(event.target.result as ArrayBuffer)\n const dataView = new DataView(webp.buffer)\n\n // Check that the WEBP signature is present\n if (\n dataView.getUint32(0) !== 0x52494646 ||\n dataView.getUint32(8) !== 0x57454250\n ) {\n console.error('Not a valid WEBP file')\n r({})\n return\n }\n\n // Start searching for chunks after the WEBP signature\n let offset = 12\n let txt_chunks = {}\n // Loop through the chunks in the WEBP file\n while (offset < webp.length) {\n const chunk_length = dataView.getUint32(offset + 4, true)\n const chunk_type = String.fromCharCode(\n ...webp.slice(offset, offset + 4)\n )\n if (chunk_type === 'EXIF') {\n if (\n String.fromCharCode(...webp.slice(offset + 8, offset + 8 + 6)) ==\n 'Exif\\0\\0'\n ) {\n offset += 6\n }\n let data = parseExifData(\n webp.slice(offset + 8, offset + 8 + chunk_length)\n )\n for (var key in data) {\n const value = data[key] as string\n if (typeof value === 'string') {\n const index = value.indexOf(':')\n txt_chunks[value.slice(0, index)] = value.slice(index + 1)\n }\n }\n break\n }\n\n offset += 8 + chunk_length\n }\n\n r(txt_chunks)\n }\n\n reader.readAsArrayBuffer(file)\n })\n}\n\nexport function getLatentMetadata(file) {\n return new Promise((r) => {\n const reader = new FileReader()\n reader.onload = (event) => {\n const safetensorsData = new Uint8Array(event.target.result as ArrayBuffer)\n const dataView = new DataView(safetensorsData.buffer)\n let header_size = dataView.getUint32(0, true)\n let offset = 8\n let header = JSON.parse(\n new TextDecoder().decode(\n safetensorsData.slice(offset, offset + header_size)\n )\n )\n r(header.__metadata__)\n }\n\n var slice = file.slice(0, 1024 * 1024 * 4)\n reader.readAsArrayBuffer(slice)\n })\n}\n\nexport async function importA1111(graph, parameters) {\n const p = parameters.lastIndexOf('\\nSteps:')\n if (p > -1) {\n const embeddings = await api.getEmbeddings()\n const opts = parameters\n .substr(p)\n .split('\\n')[1]\n .match(\n new RegExp('\\\\s*([^:]+:\\\\s*([^\"\\\\{].*?|\".*?\"|\\\\{.*?\\\\}))\\\\s*(,|$)', 'g')\n )\n .reduce((p, n) => {\n const s = n.split(':')\n if (s[1].endsWith(',')) {\n s[1] = s[1].substr(0, s[1].length - 1)\n }\n p[s[0].trim().toLowerCase()] = s[1].trim()\n return p\n }, {})\n const p2 = parameters.lastIndexOf('\\nNegative prompt:', p)\n if (p2 > -1) {\n let positive = parameters.substr(0, p2).trim()\n let negative = parameters.substring(p2 + 18, p).trim()\n\n const ckptNode = LiteGraph.createNode('CheckpointLoaderSimple')\n const clipSkipNode = LiteGraph.createNode('CLIPSetLastLayer')\n const positiveNode = LiteGraph.createNode('CLIPTextEncode')\n const negativeNode = LiteGraph.createNode('CLIPTextEncode')\n const samplerNode = LiteGraph.createNode('KSampler')\n const imageNode = LiteGraph.createNode('EmptyLatentImage')\n const vaeNode = LiteGraph.createNode('VAEDecode')\n const vaeLoaderNode = LiteGraph.createNode('VAELoader')\n const saveNode = LiteGraph.createNode('SaveImage')\n let hrSamplerNode = null\n let hrSteps = null\n\n const ceil64 = (v) => Math.ceil(v / 64) * 64\n\n const getWidget = (node, name) => {\n return node.widgets.find((w) => w.name === name)\n }\n\n const setWidgetValue = (node, name, value, isOptionPrefix?) => {\n const w = getWidget(node, name)\n if (isOptionPrefix) {\n const o = w.options.values.find((w) => w.startsWith(value))\n if (o) {\n w.value = o\n } else {\n console.warn(`Unknown value '${value}' for widget '${name}'`, node)\n w.value = value\n }\n } else {\n w.value = value\n }\n }\n\n const createLoraNodes = (clipNode, text, prevClip, prevModel) => {\n const loras = []\n text = text.replace(/]+)>/g, function (m, c) {\n const s = c.split(':')\n const weight = parseFloat(s[1])\n if (isNaN(weight)) {\n console.warn('Invalid LORA', m)\n } else {\n loras.push({ name: s[0], weight })\n }\n return ''\n })\n\n for (const l of loras) {\n const loraNode = LiteGraph.createNode('LoraLoader')\n graph.add(loraNode)\n setWidgetValue(loraNode, 'lora_name', l.name, true)\n setWidgetValue(loraNode, 'strength_model', l.weight)\n setWidgetValue(loraNode, 'strength_clip', l.weight)\n prevModel.node.connect(prevModel.index, loraNode, 0)\n prevClip.node.connect(prevClip.index, loraNode, 1)\n prevModel = { node: loraNode, index: 0 }\n prevClip = { node: loraNode, index: 1 }\n }\n\n prevClip.node.connect(1, clipNode, 0)\n prevModel.node.connect(0, samplerNode, 0)\n if (hrSamplerNode) {\n prevModel.node.connect(0, hrSamplerNode, 0)\n }\n\n return { text, prevModel, prevClip }\n }\n\n const replaceEmbeddings = (text) => {\n if (!embeddings.length) return text\n return text.replaceAll(\n new RegExp(\n '\\\\b(' +\n embeddings\n .map((e) => e.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('\\\\b|\\\\b') +\n ')\\\\b',\n 'ig'\n ),\n 'embedding:$1'\n )\n }\n\n const popOpt = (name) => {\n const v = opts[name]\n delete opts[name]\n return v\n }\n\n graph.clear()\n graph.add(ckptNode)\n graph.add(clipSkipNode)\n graph.add(positiveNode)\n graph.add(negativeNode)\n graph.add(samplerNode)\n graph.add(imageNode)\n graph.add(vaeNode)\n graph.add(vaeLoaderNode)\n graph.add(saveNode)\n\n ckptNode.connect(1, clipSkipNode, 0)\n clipSkipNode.connect(0, positiveNode, 0)\n clipSkipNode.connect(0, negativeNode, 0)\n ckptNode.connect(0, samplerNode, 0)\n positiveNode.connect(0, samplerNode, 1)\n negativeNode.connect(0, samplerNode, 2)\n imageNode.connect(0, samplerNode, 3)\n vaeNode.connect(0, saveNode, 0)\n samplerNode.connect(0, vaeNode, 0)\n vaeLoaderNode.connect(0, vaeNode, 1)\n\n const handlers = {\n model(v) {\n setWidgetValue(ckptNode, 'ckpt_name', v, true)\n },\n vae(v) {\n setWidgetValue(vaeLoaderNode, 'vae_name', v, true)\n },\n 'cfg scale'(v) {\n setWidgetValue(samplerNode, 'cfg', +v)\n },\n 'clip skip'(v) {\n setWidgetValue(clipSkipNode, 'stop_at_clip_layer', -v)\n },\n sampler(v) {\n let name = v.toLowerCase().replace('++', 'pp').replaceAll(' ', '_')\n if (name.includes('karras')) {\n name = name.replace('karras', '').replace(/_+$/, '')\n setWidgetValue(samplerNode, 'scheduler', 'karras')\n } else {\n setWidgetValue(samplerNode, 'scheduler', 'normal')\n }\n const w = getWidget(samplerNode, 'sampler_name')\n const o = w.options.values.find(\n (w) => w === name || w === 'sample_' + name\n )\n if (o) {\n setWidgetValue(samplerNode, 'sampler_name', o)\n }\n },\n size(v) {\n const wxh = v.split('x')\n const w = ceil64(+wxh[0])\n const h = ceil64(+wxh[1])\n const hrUp = popOpt('hires upscale')\n const hrSz = popOpt('hires resize')\n hrSteps = popOpt('hires steps')\n let hrMethod = popOpt('hires upscaler')\n\n setWidgetValue(imageNode, 'width', w)\n setWidgetValue(imageNode, 'height', h)\n\n if (hrUp || hrSz) {\n let uw, uh\n if (hrUp) {\n uw = w * hrUp\n uh = h * hrUp\n } else {\n const s = hrSz.split('x')\n uw = +s[0]\n uh = +s[1]\n }\n\n let upscaleNode\n let latentNode\n\n if (hrMethod.startsWith('Latent')) {\n latentNode = upscaleNode = LiteGraph.createNode('LatentUpscale')\n graph.add(upscaleNode)\n samplerNode.connect(0, upscaleNode, 0)\n\n switch (hrMethod) {\n case 'Latent (nearest-exact)':\n hrMethod = 'nearest-exact'\n break\n }\n setWidgetValue(upscaleNode, 'upscale_method', hrMethod, true)\n } else {\n const decode = LiteGraph.createNode('VAEDecodeTiled')\n graph.add(decode)\n samplerNode.connect(0, decode, 0)\n vaeLoaderNode.connect(0, decode, 1)\n\n const upscaleLoaderNode =\n LiteGraph.createNode('UpscaleModelLoader')\n graph.add(upscaleLoaderNode)\n setWidgetValue(upscaleLoaderNode, 'model_name', hrMethod, true)\n\n const modelUpscaleNode = LiteGraph.createNode(\n 'ImageUpscaleWithModel'\n )\n graph.add(modelUpscaleNode)\n decode.connect(0, modelUpscaleNode, 1)\n upscaleLoaderNode.connect(0, modelUpscaleNode, 0)\n\n upscaleNode = LiteGraph.createNode('ImageScale')\n graph.add(upscaleNode)\n modelUpscaleNode.connect(0, upscaleNode, 0)\n\n const vaeEncodeNode = (latentNode =\n LiteGraph.createNode('VAEEncodeTiled'))\n graph.add(vaeEncodeNode)\n upscaleNode.connect(0, vaeEncodeNode, 0)\n vaeLoaderNode.connect(0, vaeEncodeNode, 1)\n }\n\n setWidgetValue(upscaleNode, 'width', ceil64(uw))\n setWidgetValue(upscaleNode, 'height', ceil64(uh))\n\n hrSamplerNode = LiteGraph.createNode('KSampler')\n graph.add(hrSamplerNode)\n ckptNode.connect(0, hrSamplerNode, 0)\n positiveNode.connect(0, hrSamplerNode, 1)\n negativeNode.connect(0, hrSamplerNode, 2)\n latentNode.connect(0, hrSamplerNode, 3)\n hrSamplerNode.connect(0, vaeNode, 0)\n }\n },\n steps(v) {\n setWidgetValue(samplerNode, 'steps', +v)\n },\n seed(v) {\n setWidgetValue(samplerNode, 'seed', +v)\n }\n }\n\n for (const opt in opts) {\n if (opt in handlers) {\n handlers[opt](popOpt(opt))\n }\n }\n\n if (hrSamplerNode) {\n setWidgetValue(\n hrSamplerNode,\n 'steps',\n hrSteps ? +hrSteps : getWidget(samplerNode, 'steps').value\n )\n setWidgetValue(\n hrSamplerNode,\n 'cfg',\n getWidget(samplerNode, 'cfg').value\n )\n setWidgetValue(\n hrSamplerNode,\n 'scheduler',\n getWidget(samplerNode, 'scheduler').value\n )\n setWidgetValue(\n hrSamplerNode,\n 'sampler_name',\n getWidget(samplerNode, 'sampler_name').value\n )\n setWidgetValue(\n hrSamplerNode,\n 'denoise',\n +(popOpt('denoising strength') || '1')\n )\n }\n\n let n = createLoraNodes(\n positiveNode,\n positive,\n { node: clipSkipNode, index: 0 },\n { node: ckptNode, index: 0 }\n )\n positive = n.text\n n = createLoraNodes(negativeNode, negative, n.prevClip, n.prevModel)\n negative = n.text\n\n setWidgetValue(positiveNode, 'text', replaceEmbeddings(positive))\n setWidgetValue(negativeNode, 'text', replaceEmbeddings(negative))\n\n graph.arrange()\n\n for (const opt of [\n 'model hash',\n 'ensd',\n 'version',\n 'vae hash',\n 'ti hashes',\n 'lora hashes',\n 'hashes'\n ]) {\n delete opts[opt]\n }\n\n console.warn('Unhandled parameters:', opts)\n }\n }\n}\n","// @ts-strict-ignore\nimport { app } from '../app'\nimport { $el } from '../ui'\n\nexport function calculateImageGrid(imgs, dw, dh) {\n let best = 0\n let w = imgs[0].naturalWidth\n let h = imgs[0].naturalHeight\n const numImages = imgs.length\n\n let cellWidth, cellHeight, cols, rows, shiftX\n // compact style\n for (let c = 1; c <= numImages; c++) {\n const r = Math.ceil(numImages / c)\n const cW = dw / c\n const cH = dh / r\n const scaleX = cW / w\n const scaleY = cH / h\n\n const scale = Math.min(scaleX, scaleY, 1)\n const imageW = w * scale\n const imageH = h * scale\n const area = imageW * imageH * numImages\n\n if (area > best) {\n best = area\n cellWidth = imageW\n cellHeight = imageH\n cols = c\n rows = r\n shiftX = c * ((cW - imageW) / 2)\n }\n }\n\n return { cellWidth, cellHeight, cols, rows, shiftX }\n}\n\nexport function createImageHost(node) {\n const el = $el('div.comfy-img-preview')\n let currentImgs\n let first = true\n\n function updateSize() {\n let w = null\n let h = null\n\n if (currentImgs) {\n let elH = el.clientHeight\n if (first) {\n first = false\n // On first run, if we are small then grow a bit\n if (elH < 190) {\n elH = 190\n }\n el.style.setProperty('--comfy-widget-min-height', elH.toString())\n } else {\n el.style.setProperty('--comfy-widget-min-height', null)\n }\n\n const nw = node.size[0]\n ;({ cellWidth: w, cellHeight: h } = calculateImageGrid(\n currentImgs,\n nw - 20,\n elH\n ))\n w += 'px'\n h += 'px'\n\n el.style.setProperty('--comfy-img-preview-width', w)\n el.style.setProperty('--comfy-img-preview-height', h)\n }\n }\n return {\n el,\n updateImages(imgs) {\n if (imgs !== currentImgs) {\n if (currentImgs == null) {\n requestAnimationFrame(() => {\n updateSize()\n })\n }\n el.replaceChildren(...imgs)\n currentImgs = imgs\n node.onResize(node.size)\n node.graph.setDirtyCanvas(true, true)\n }\n },\n getHeight() {\n updateSize()\n },\n onDraw() {\n // Element from point uses a hittest find elements so we need to toggle pointer events\n el.style.pointerEvents = 'all'\n const over = document.elementFromPoint(\n app.canvas.mouse[0],\n app.canvas.mouse[1]\n )\n el.style.pointerEvents = 'none'\n\n if (!over) return\n // Set the overIndex so Open Image etc work\n const idx = currentImgs.indexOf(over)\n node.overIndex = idx\n }\n }\n}\n","import { memoize } from 'lodash'\n\ntype RGB = { r: number; g: number; b: number }\ntype HSL = { h: number; s: number; l: number }\ntype HSLA = { h: number; s: number; l: number; a: number }\ntype ColorFormat = 'hex' | 'rgb' | 'rgba' | 'hsl' | 'hsla'\n\nexport interface ColorAdjustOptions {\n lightness?: number\n opacity?: number\n}\n\nfunction rgbToHsl({ r, g, b }: RGB): HSL {\n r /= 255\n g /= 255\n b /= 255\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b)\n let h = 0,\n s = 0\n const l: number = (max + min) / 2\n\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0)\n break\n case g:\n h = (b - r) / d + 2\n break\n case b:\n h = (r - g) / d + 4\n break\n }\n h /= 6\n }\n\n return { h, s, l }\n}\n\nfunction hexToRgb(hex: string): RGB {\n let r = 0,\n g = 0,\n b = 0\n // 3 digits\n if (hex.length == 4) {\n r = parseInt(hex[1] + hex[1], 16)\n g = parseInt(hex[2] + hex[2], 16)\n b = parseInt(hex[3] + hex[3], 16)\n }\n // 6 digits\n else if (hex.length == 7) {\n r = parseInt(hex.slice(1, 3), 16)\n g = parseInt(hex.slice(3, 5), 16)\n b = parseInt(hex.slice(5, 7), 16)\n }\n return { r, g, b }\n}\n\nconst identifyColorFormat = (color: string): ColorFormat | null => {\n if (!color) return null\n if (color.startsWith('#') && (color.length === 4 || color.length === 7))\n return 'hex'\n if (/rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*/.test(color))\n return color.includes('rgba') ? 'rgba' : 'rgb'\n if (/hsla?\\(\\s*\\d+(\\.\\d+)?\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%/.test(color))\n return color.includes('hsla') ? 'hsla' : 'hsl'\n return null\n}\n\nconst isHSLA = (color: unknown): color is HSLA => {\n if (typeof color !== 'object' || color === null) return false\n\n return ['h', 's', 'l', 'a'].every(\n (key) =>\n typeof (color as Record)[key] === 'number' &&\n !isNaN((color as Record)[key])\n )\n}\n\nfunction parseToHSLA(color: string, format: ColorFormat): HSLA | null {\n let match: RegExpMatchArray | null\n\n switch (format) {\n case 'hex': {\n const hsl = rgbToHsl(hexToRgb(color))\n return {\n h: Math.round(hsl.h * 360),\n s: +(hsl.s * 100).toFixed(1),\n l: +(hsl.l * 100).toFixed(1),\n a: 1\n }\n }\n\n case 'rgb':\n case 'rgba': {\n match = color.match(/\\d+(\\.\\d+)?/g)\n if (!match || match.length < 3) return null\n const [r, g, b] = match.map(Number)\n const hsl = rgbToHsl({ r, g, b })\n\n const a = format === 'rgba' && match[3] ? parseFloat(match[3]) : 1\n\n return {\n h: Math.round(hsl.h * 360),\n s: +(hsl.s * 100).toFixed(1),\n l: +(hsl.l * 100).toFixed(1),\n a\n }\n }\n\n case 'hsl':\n case 'hsla': {\n match = color.match(/\\d+(\\.\\d+)?/g)\n if (!match || match.length < 3) return null\n const [h, s, l] = match.map(Number)\n const a = format === 'hsla' && match[3] ? parseFloat(match[3]) : 1\n return { h, s, l, a }\n }\n default:\n return null\n }\n}\n\nconst applyColorAdjustments = (\n color: string,\n options: ColorAdjustOptions\n): string => {\n if (!Object.keys(options).length) return color\n\n const format = identifyColorFormat(color)\n if (!format) {\n console.warn(`Unsupported color format in color palette: ${color}`)\n return color\n }\n\n const hsla = parseToHSLA(color, format)\n if (!isHSLA(hsla)) {\n console.warn(`Invalid color values in color palette: ${color}`)\n return color\n }\n\n if (options.lightness) {\n hsla.l = Math.max(0, Math.min(100, hsla.l + options.lightness * 100.0))\n }\n\n if (options.opacity) {\n hsla.a = Math.max(0, Math.min(1, options.opacity))\n }\n\n return `hsla(${hsla.h}, ${hsla.s}%, ${hsla.l}%, ${hsla.a})`\n}\n\nexport const adjustColor: (\n color: string,\n options: ColorAdjustOptions\n) => string = memoize(\n applyColorAdjustments,\n (color: string, options: ColorAdjustOptions): string =>\n `${color}-${JSON.stringify(options)}`\n)\n","// @ts-strict-ignore\nimport { api } from './api'\nimport type { ComfyApp } from './app'\nimport { $el } from './ui'\n\n// Simple date formatter\nconst parts = {\n d: (d) => d.getDate(),\n M: (d) => d.getMonth() + 1,\n h: (d) => d.getHours(),\n m: (d) => d.getMinutes(),\n s: (d) => d.getSeconds()\n}\nconst format =\n Object.keys(parts)\n .map((k) => k + k + '?')\n .join('|') + '|yyy?y?'\n\nfunction formatDate(text: string, date: Date) {\n return text.replace(new RegExp(format, 'g'), (text: string): string => {\n if (text === 'yy') return (date.getFullYear() + '').substring(2)\n if (text === 'yyyy') return date.getFullYear().toString()\n if (text[0] in parts) {\n const p = parts[text[0]](date)\n return (p + '').padStart(text.length, '0')\n }\n return text\n })\n}\n\nexport function clone(obj: any) {\n try {\n if (typeof structuredClone !== 'undefined') {\n return structuredClone(obj)\n }\n } catch (error) {\n // structuredClone is stricter than using JSON.parse/stringify so fallback to that\n }\n\n return JSON.parse(JSON.stringify(obj))\n}\n\nexport function applyTextReplacements(app: ComfyApp, value: string): string {\n return value.replace(/%([^%]+)%/g, function (match, text) {\n const split = text.split('.')\n if (split.length !== 2) {\n // Special handling for dates\n if (split[0].startsWith('date:')) {\n return formatDate(split[0].substring(5), new Date())\n }\n\n if (text !== 'width' && text !== 'height') {\n // Dont warn on standard replacements\n console.warn('Invalid replacement pattern', text)\n }\n return match\n }\n\n // Find node with matching S&R property name\n let nodes = app.graph.nodes.filter(\n (n) => n.properties?.['Node name for S&R'] === split[0]\n )\n // If we cant, see if there is a node with that title\n if (!nodes.length) {\n nodes = app.graph.nodes.filter((n) => n.title === split[0])\n }\n if (!nodes.length) {\n console.warn('Unable to find node', split[0])\n return match\n }\n\n if (nodes.length > 1) {\n console.warn('Multiple nodes matched', split[0], 'using first match')\n }\n\n const node = nodes[0]\n\n const widget = node.widgets?.find((w) => w.name === split[1])\n if (!widget) {\n console.warn('Unable to find widget', split[1], 'on node', split[0], node)\n return match\n }\n\n return ((widget.value ?? '') + '').replaceAll(/\\/|\\\\/g, '_')\n })\n}\n\nexport async function addStylesheet(\n urlOrFile: string,\n relativeTo?: string\n): Promise {\n return new Promise((res, rej) => {\n let url\n if (urlOrFile.endsWith('.js')) {\n url = urlOrFile.substr(0, urlOrFile.length - 2) + 'css'\n } else {\n url = new URL(\n urlOrFile,\n relativeTo ?? `${window.location.protocol}//${window.location.host}`\n ).toString()\n }\n $el('link', {\n parent: document.head,\n rel: 'stylesheet',\n type: 'text/css',\n href: url,\n onload: res,\n onerror: rej\n })\n })\n}\n\n/**\n * @param { string } filename\n * @param { Blob } blob\n */\nexport function downloadBlob(filename, blob) {\n const url = URL.createObjectURL(blob)\n const a = $el('a', {\n href: url,\n download: filename,\n style: { display: 'none' },\n parent: document.body\n })\n a.click()\n setTimeout(function () {\n a.remove()\n window.URL.revokeObjectURL(url)\n }, 0)\n}\n\nexport function prop(\n target: object,\n name: string,\n defaultValue: T,\n onChanged?: (\n currentValue: T,\n previousValue: T,\n target: object,\n name: string\n ) => void\n): T {\n let currentValue\n Object.defineProperty(target, name, {\n get() {\n return currentValue\n },\n set(newValue) {\n const prevValue = currentValue\n currentValue = newValue\n onChanged?.(currentValue, prevValue, target, name)\n }\n })\n return defaultValue\n}\n\nexport function getStorageValue(id: string) {\n const clientId = api.clientId ?? api.initialClientId\n return (\n (clientId && sessionStorage.getItem(`${id}:${clientId}`)) ??\n localStorage.getItem(id)\n )\n}\n\nexport function setStorageValue(id: string, value: string) {\n const clientId = api.clientId ?? api.initialClientId\n if (clientId) {\n sessionStorage.setItem(`${id}:${clientId}`, value)\n }\n localStorage.setItem(id, value)\n}\n","// @ts-strict-ignore\nimport { $el } from '../../ui'\nimport { ComfyButton } from './button'\nimport { prop } from '../../utils'\n\nexport class ComfyButtonGroup {\n element = $el('div.comfyui-button-group')\n buttons: (HTMLElement | ComfyButton)[]\n\n constructor(...buttons: (HTMLElement | ComfyButton)[]) {\n this.buttons = prop(this, 'buttons', buttons, () => this.update())\n }\n\n insert(button: ComfyButton, index: number) {\n this.buttons.splice(index, 0, button)\n this.update()\n }\n\n append(button: ComfyButton) {\n this.buttons.push(button)\n this.update()\n }\n\n remove(indexOrButton: ComfyButton | number) {\n if (typeof indexOrButton !== 'number') {\n indexOrButton = this.buttons.indexOf(indexOrButton)\n }\n if (indexOrButton > -1) {\n const r = this.buttons.splice(indexOrButton, 1)\n this.update()\n return r\n }\n }\n\n update() {\n this.element.replaceChildren(...this.buttons.map((b) => b['element'] ?? b))\n }\n}\n","// @ts-strict-ignore\nexport type ClassList = string | string[] | Record\n\nexport function applyClasses(\n element: HTMLElement,\n classList: ClassList,\n ...requiredClasses: string[]\n) {\n classList ??= ''\n\n let str: string\n if (typeof classList === 'string') {\n str = classList\n } else if (classList instanceof Array) {\n str = classList.join(' ')\n } else {\n str = Object.entries(classList).reduce((p, c) => {\n if (c[1]) {\n p += (p.length ? ' ' : '') + c[0]\n }\n return p\n }, '')\n }\n element.className = str\n if (requiredClasses) {\n element.classList.add(...requiredClasses)\n }\n}\n\nexport function toggleElement(\n element: HTMLElement,\n {\n onHide,\n onShow\n }: {\n onHide?: (el: HTMLElement) => void\n onShow?: (el: HTMLElement, value) => void\n } = {}\n) {\n let placeholder: HTMLElement | Comment\n let hidden: boolean\n return (value) => {\n if (value) {\n if (hidden) {\n hidden = false\n placeholder.replaceWith(element)\n }\n onShow?.(element, value)\n } else {\n if (!placeholder) {\n placeholder = document.createComment('')\n }\n hidden = true\n element.replaceWith(placeholder)\n onHide?.(element)\n }\n }\n}\n","// @ts-strict-ignore\nimport { $el } from '../../ui'\nimport { applyClasses, ClassList, toggleElement } from '../utils'\nimport { prop } from '../../utils'\nimport type { ComfyPopup } from './popup'\nimport type { ComfyComponent } from '.'\nimport type { ComfyApp } from '@/scripts/app'\nimport { Settings } from '@/types/apiTypes'\n\ntype ComfyButtonProps = {\n icon?: string\n overIcon?: string\n iconSize?: number\n content?: string | HTMLElement\n tooltip?: string\n enabled?: boolean\n action?: (e: Event, btn: ComfyButton) => void\n classList?: ClassList\n visibilitySetting?: { id: keyof Settings; showValue: boolean }\n app?: ComfyApp\n}\n\nexport class ComfyButton implements ComfyComponent {\n #over = 0\n #popupOpen = false\n isOver = false\n iconElement = $el('i.mdi')\n contentElement = $el('span')\n popup: ComfyPopup\n element: HTMLElement\n overIcon: string\n iconSize: number\n content: string | HTMLElement\n icon: string\n tooltip: string\n classList: ClassList\n hidden: boolean\n enabled: boolean\n action: (e: Event, btn: ComfyButton) => void\n\n constructor({\n icon,\n overIcon,\n iconSize,\n content,\n tooltip,\n action,\n classList = 'comfyui-button',\n visibilitySetting,\n app,\n enabled = true\n }: ComfyButtonProps) {\n this.element = $el(\n 'button',\n {\n onmouseenter: () => {\n this.isOver = true\n if (this.overIcon) {\n this.updateIcon()\n }\n },\n onmouseleave: () => {\n this.isOver = false\n if (this.overIcon) {\n this.updateIcon()\n }\n }\n },\n [this.iconElement, this.contentElement]\n )\n\n this.icon = prop(\n this,\n 'icon',\n icon,\n toggleElement(this.iconElement, { onShow: this.updateIcon })\n )\n this.overIcon = prop(this, 'overIcon', overIcon, () => {\n if (this.isOver) {\n this.updateIcon()\n }\n })\n this.iconSize = prop(this, 'iconSize', iconSize, this.updateIcon)\n this.content = prop(\n this,\n 'content',\n content,\n toggleElement(this.contentElement, {\n onShow: (el, v) => {\n if (typeof v === 'string') {\n el.textContent = v\n } else {\n el.replaceChildren(v)\n }\n }\n })\n )\n\n this.tooltip = prop(this, 'tooltip', tooltip, (v) => {\n if (v) {\n this.element.title = v\n } else {\n this.element.removeAttribute('title')\n }\n })\n if (tooltip !== undefined) {\n this.element.setAttribute('aria-label', tooltip)\n }\n this.classList = prop(this, 'classList', classList, this.updateClasses)\n this.hidden = prop(this, 'hidden', false, this.updateClasses)\n this.enabled = prop(this, 'enabled', enabled, () => {\n this.updateClasses()\n ;(this.element as HTMLButtonElement).disabled = !this.enabled\n })\n this.action = prop(this, 'action', action)\n this.element.addEventListener('click', (e) => {\n if (this.popup) {\n // we are either a touch device or triggered by click not hover\n if (!this.#over) {\n this.popup.toggle()\n }\n }\n this.action?.(e, this)\n })\n\n if (visibilitySetting?.id) {\n const settingUpdated = () => {\n this.hidden =\n app.ui.settings.getSettingValue(visibilitySetting.id) !==\n visibilitySetting.showValue\n }\n app.ui.settings.addEventListener(\n visibilitySetting.id + '.change',\n settingUpdated\n )\n settingUpdated()\n }\n }\n\n updateIcon = () =>\n (this.iconElement.className = `mdi mdi-${(this.isOver && this.overIcon) || this.icon}${this.iconSize ? ' mdi-' + this.iconSize + 'px' : ''}`)\n updateClasses = () => {\n const internalClasses = []\n if (this.hidden) {\n internalClasses.push('hidden')\n }\n if (!this.enabled) {\n internalClasses.push('disabled')\n }\n if (this.popup) {\n if (this.#popupOpen) {\n internalClasses.push('popup-open')\n } else {\n internalClasses.push('popup-closed')\n }\n }\n applyClasses(this.element, this.classList, ...internalClasses)\n }\n\n withPopup(popup: ComfyPopup, mode: 'click' | 'hover' = 'click') {\n this.popup = popup\n\n if (mode === 'hover') {\n for (const el of [this.element, this.popup.element]) {\n el.addEventListener('mouseenter', () => {\n this.popup.open = !!++this.#over\n })\n el.addEventListener('mouseleave', () => {\n this.popup.open = !!--this.#over\n })\n }\n }\n\n popup.addEventListener('change', () => {\n this.#popupOpen = popup.open\n this.updateClasses()\n })\n\n return this\n }\n}\n","// @ts-strict-ignore\nimport { prop } from '../../utils'\nimport { $el } from '../../ui'\nimport { applyClasses, ClassList } from '../utils'\n\nexport class ComfyPopup extends EventTarget {\n element = $el('div.comfyui-popup')\n open: boolean\n children: HTMLElement[]\n target: HTMLElement\n ignoreTarget: boolean\n container: HTMLElement\n position: string\n closeOnEscape: boolean\n horizontal: string\n classList: ClassList\n\n constructor(\n {\n target,\n container = document.body,\n classList = '',\n ignoreTarget = true,\n closeOnEscape = true,\n position = 'absolute',\n horizontal = 'left'\n }: {\n target: HTMLElement\n container?: HTMLElement\n classList?: ClassList\n ignoreTarget?: boolean\n closeOnEscape?: boolean\n position?: 'absolute' | 'relative'\n horizontal?: 'left' | 'right'\n },\n ...children: HTMLElement[]\n ) {\n super()\n this.target = target\n this.ignoreTarget = ignoreTarget\n this.container = container\n this.position = position\n this.closeOnEscape = closeOnEscape\n this.horizontal = horizontal\n\n container.append(this.element)\n\n this.children = prop(this, 'children', children, () => {\n this.element.replaceChildren(...this.children)\n this.update()\n })\n this.classList = prop(this, 'classList', classList, () =>\n applyClasses(this.element, this.classList, 'comfyui-popup', horizontal)\n )\n this.open = prop(this, 'open', false, (v, o) => {\n if (v === o) return\n if (v) {\n this.#show()\n } else {\n this.#hide()\n }\n })\n }\n\n toggle() {\n this.open = !this.open\n }\n\n #hide() {\n this.element.classList.remove('open')\n window.removeEventListener('resize', this.update)\n window.removeEventListener('click', this.#clickHandler, { capture: true })\n window.removeEventListener('keydown', this.#escHandler, { capture: true })\n\n this.dispatchEvent(new CustomEvent('close'))\n this.dispatchEvent(new CustomEvent('change'))\n }\n\n #show() {\n this.element.classList.add('open')\n this.update()\n\n window.addEventListener('resize', this.update)\n window.addEventListener('click', this.#clickHandler, { capture: true })\n if (this.closeOnEscape) {\n window.addEventListener('keydown', this.#escHandler, { capture: true })\n }\n\n this.dispatchEvent(new CustomEvent('open'))\n this.dispatchEvent(new CustomEvent('change'))\n }\n\n #escHandler = (e) => {\n if (e.key === 'Escape') {\n this.open = false\n e.preventDefault()\n e.stopImmediatePropagation()\n }\n }\n\n #clickHandler = (e) => {\n /** @type {any} */\n const target = e.target\n if (\n !this.element.contains(target) &&\n this.ignoreTarget &&\n !this.target.contains(target)\n ) {\n this.open = false\n }\n }\n\n update = () => {\n const rect = this.target.getBoundingClientRect()\n this.element.style.setProperty('--bottom', 'unset')\n if (this.position === 'absolute') {\n if (this.horizontal === 'left') {\n this.element.style.setProperty('--left', rect.left + 'px')\n } else {\n this.element.style.setProperty(\n '--left',\n rect.right - this.element.clientWidth + 'px'\n )\n }\n this.element.style.setProperty('--top', rect.bottom + 'px')\n this.element.style.setProperty('--limit', rect.bottom + 'px')\n } else {\n this.element.style.setProperty('--left', 0 + 'px')\n this.element.style.setProperty('--top', rect.height + 'px')\n this.element.style.setProperty('--limit', rect.height + 'px')\n }\n\n const thisRect = this.element.getBoundingClientRect()\n if (thisRect.height < 30) {\n // Move up instead\n this.element.style.setProperty('--top', 'unset')\n this.element.style.setProperty('--bottom', rect.height + 5 + 'px')\n this.element.style.setProperty('--limit', rect.height + 5 + 'px')\n }\n }\n}\n","import { $el } from '../../ui'\nimport { ComfyButton } from './button'\nimport { prop } from '../../utils'\nimport { ComfyPopup } from './popup'\n\nexport class ComfySplitButton {\n arrow: ComfyButton\n element: HTMLElement\n popup: ComfyPopup\n items: Array\n\n constructor(\n {\n primary,\n mode,\n horizontal = 'left',\n position = 'relative'\n }: {\n primary: ComfyButton\n mode?: 'hover' | 'click'\n horizontal?: 'left' | 'right'\n position?: 'relative' | 'absolute'\n },\n ...items: Array\n ) {\n this.arrow = new ComfyButton({\n icon: 'chevron-down'\n })\n this.element = $el(\n 'div.comfyui-split-button' + (mode === 'hover' ? '.hover' : ''),\n [\n $el(\n 'div.comfyui-split-primary',\n {\n ariaLabel: 'Queue current workflow'\n },\n primary.element\n ),\n $el(\n 'div.comfyui-split-arrow',\n {\n ariaLabel: 'Open extra opens',\n ariaHasPopup: 'true'\n },\n this.arrow.element\n )\n ]\n )\n this.popup = new ComfyPopup({\n target: this.element,\n container: position === 'relative' ? this.element : document.body,\n classList:\n 'comfyui-split-button-popup' + (mode === 'hover' ? ' hover' : ''),\n closeOnEscape: mode === 'click',\n position,\n horizontal\n })\n\n this.arrow.withPopup(this.popup, mode)\n\n this.items = prop(this, 'items', items, () => this.update())\n }\n\n update() {\n this.popup.element.replaceChildren(\n ...this.items.map((b) => ('element' in b ? b.element : b))\n )\n }\n}\n","// @ts-strict-ignore\nimport { ComfyDialog } from '../dialog'\nimport { $el } from '../../ui'\n\nexport class ComfyAsyncDialog extends ComfyDialog {\n #resolve: (value: any) => void\n\n constructor(actions?: Array) {\n super(\n 'dialog.comfy-dialog.comfyui-dialog',\n actions?.map((opt) => {\n if (typeof opt === 'string') {\n opt = { text: opt }\n }\n return $el('button.comfyui-button', {\n type: 'button',\n textContent: opt.text,\n onclick: () => this.close(opt.value ?? opt.text)\n })\n })\n )\n }\n\n show(html: string | HTMLElement | HTMLElement[]) {\n this.element.addEventListener('close', () => {\n this.close()\n })\n\n super.show(html)\n\n return new Promise((resolve) => {\n this.#resolve = resolve\n })\n }\n\n showModal(html: string | HTMLElement | HTMLElement[]) {\n this.element.addEventListener('close', () => {\n this.close()\n })\n\n super.show(html)\n this.element.showModal()\n\n return new Promise((resolve) => {\n this.#resolve = resolve\n })\n }\n\n close(result = null) {\n this.#resolve(result)\n this.element.close()\n super.close()\n }\n\n static async prompt({\n title = null,\n message,\n actions\n }: {\n title: string | null\n message: string\n actions: Array\n }) {\n const dialog = new ComfyAsyncDialog(actions)\n const content = [$el('span', message)]\n if (title) {\n content.unshift($el('h3', title))\n }\n const res = await dialog.showModal(content)\n dialog.element.remove()\n return res\n }\n}\n","// @ts-strict-ignore\n/*\n Original implementation:\n https://github.com/TahaSh/drag-to-reorder\n MIT License\n\n Copyright (c) 2023 Taha Shashtari\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n*/\n\nimport { $el } from '../ui'\n\n$el('style', {\n parent: document.head,\n textContent: `\n .draggable-item {\n position: relative;\n will-change: transform;\n user-select: none;\n }\n .draggable-item.is-idle {\n transition: 0.25s ease transform;\n }\n .draggable-item.is-draggable {\n z-index: 10;\n }\n `\n})\n\nexport class DraggableList extends EventTarget {\n listContainer\n draggableItem\n pointerStartX\n pointerStartY\n scrollYMax\n itemsGap = 0\n items = []\n itemSelector\n handleClass = 'drag-handle'\n off = []\n offDrag = []\n\n constructor(element, itemSelector) {\n super()\n this.listContainer = element\n this.itemSelector = itemSelector\n\n if (!this.listContainer) return\n\n this.off.push(this.on(this.listContainer, 'mousedown', this.dragStart))\n this.off.push(this.on(this.listContainer, 'touchstart', this.dragStart))\n this.off.push(this.on(document, 'mouseup', this.dragEnd))\n this.off.push(this.on(document, 'touchend', this.dragEnd))\n }\n\n getAllItems() {\n if (!this.items?.length) {\n this.items = Array.from(\n this.listContainer.querySelectorAll(this.itemSelector)\n )\n this.items.forEach((element) => {\n element.classList.add('is-idle')\n })\n }\n return this.items\n }\n\n getIdleItems() {\n return this.getAllItems().filter((item) =>\n item.classList.contains('is-idle')\n )\n }\n\n isItemAbove(item) {\n return item.hasAttribute('data-is-above')\n }\n\n isItemToggled(item) {\n return item.hasAttribute('data-is-toggled')\n }\n\n on(source, event, listener, options?) {\n listener = listener.bind(this)\n source.addEventListener(event, listener, options)\n return () => source.removeEventListener(event, listener)\n }\n\n dragStart(e) {\n if (e.target.classList.contains(this.handleClass)) {\n this.draggableItem = e.target.closest(this.itemSelector)\n }\n\n if (!this.draggableItem) return\n\n this.pointerStartX = e.clientX || e.touches[0].clientX\n this.pointerStartY = e.clientY || e.touches[0].clientY\n this.scrollYMax =\n this.listContainer.scrollHeight - this.listContainer.clientHeight\n\n this.setItemsGap()\n this.initDraggableItem()\n this.initItemsState()\n\n this.offDrag.push(this.on(document, 'mousemove', this.drag))\n this.offDrag.push(\n this.on(document, 'touchmove', this.drag, { passive: false })\n )\n\n this.dispatchEvent(\n new CustomEvent('dragstart', {\n detail: {\n element: this.draggableItem,\n position: this.getAllItems().indexOf(this.draggableItem)\n }\n })\n )\n }\n\n setItemsGap() {\n if (this.getIdleItems().length <= 1) {\n this.itemsGap = 0\n return\n }\n\n const item1 = this.getIdleItems()[0]\n const item2 = this.getIdleItems()[1]\n\n const item1Rect = item1.getBoundingClientRect()\n const item2Rect = item2.getBoundingClientRect()\n\n this.itemsGap = Math.abs(item1Rect.bottom - item2Rect.top)\n }\n\n initItemsState() {\n this.getIdleItems().forEach((item, i) => {\n if (this.getAllItems().indexOf(this.draggableItem) > i) {\n item.dataset.isAbove = ''\n }\n })\n }\n\n initDraggableItem() {\n this.draggableItem.classList.remove('is-idle')\n this.draggableItem.classList.add('is-draggable')\n }\n\n drag(e) {\n if (!this.draggableItem) return\n\n e.preventDefault()\n\n const clientX = e.clientX || e.touches[0].clientX\n const clientY = e.clientY || e.touches[0].clientY\n\n const listRect = this.listContainer.getBoundingClientRect()\n\n if (clientY > listRect.bottom) {\n if (this.listContainer.scrollTop < this.scrollYMax) {\n this.listContainer.scrollBy(0, 10)\n this.pointerStartY -= 10\n }\n } else if (clientY < listRect.top && this.listContainer.scrollTop > 0) {\n this.pointerStartY += 10\n this.listContainer.scrollBy(0, -10)\n }\n\n const pointerOffsetX = clientX - this.pointerStartX\n const pointerOffsetY = clientY - this.pointerStartY\n\n this.updateIdleItemsStateAndPosition()\n this.draggableItem.style.transform = `translate(${pointerOffsetX}px, ${pointerOffsetY}px)`\n }\n\n updateIdleItemsStateAndPosition() {\n const draggableItemRect = this.draggableItem.getBoundingClientRect()\n const draggableItemY = draggableItemRect.top + draggableItemRect.height / 2\n\n // Update state\n this.getIdleItems().forEach((item) => {\n const itemRect = item.getBoundingClientRect()\n const itemY = itemRect.top + itemRect.height / 2\n if (this.isItemAbove(item)) {\n if (draggableItemY <= itemY) {\n item.dataset.isToggled = ''\n } else {\n delete item.dataset.isToggled\n }\n } else {\n if (draggableItemY >= itemY) {\n item.dataset.isToggled = ''\n } else {\n delete item.dataset.isToggled\n }\n }\n })\n\n // Update position\n this.getIdleItems().forEach((item) => {\n if (this.isItemToggled(item)) {\n const direction = this.isItemAbove(item) ? 1 : -1\n item.style.transform = `translateY(${direction * (draggableItemRect.height + this.itemsGap)}px)`\n } else {\n item.style.transform = ''\n }\n })\n }\n\n dragEnd() {\n if (!this.draggableItem) return\n\n this.applyNewItemsOrder()\n this.cleanup()\n }\n\n applyNewItemsOrder() {\n const reorderedItems = []\n\n let oldPosition = -1\n this.getAllItems().forEach((item, index) => {\n if (item === this.draggableItem) {\n oldPosition = index\n return\n }\n if (!this.isItemToggled(item)) {\n reorderedItems[index] = item\n return\n }\n const newIndex = this.isItemAbove(item) ? index + 1 : index - 1\n reorderedItems[newIndex] = item\n })\n\n for (let index = 0; index < this.getAllItems().length; index++) {\n const item = reorderedItems[index]\n if (typeof item === 'undefined') {\n reorderedItems[index] = this.draggableItem\n }\n }\n\n reorderedItems.forEach((item) => {\n this.listContainer.appendChild(item)\n })\n\n this.items = reorderedItems\n\n this.dispatchEvent(\n new CustomEvent('dragend', {\n detail: {\n element: this.draggableItem,\n oldPosition,\n newPosition: reorderedItems.indexOf(this.draggableItem)\n }\n })\n )\n }\n\n cleanup() {\n this.itemsGap = 0\n this.items = []\n this.unsetDraggableItem()\n this.unsetItemState()\n\n this.offDrag.forEach((f) => f())\n this.offDrag = []\n }\n\n unsetDraggableItem() {\n this.draggableItem.style = null\n this.draggableItem.classList.remove('is-draggable')\n this.draggableItem.classList.add('is-idle')\n this.draggableItem = null\n }\n\n unsetItemState() {\n this.getIdleItems().forEach((item, i) => {\n delete item.dataset.isAbove\n delete item.dataset.isToggled\n item.style.transform = ''\n })\n }\n\n dispose() {\n this.off.forEach((f) => f())\n }\n}\n","import type { ComfyApp } from '@/scripts/app'\nimport { $el } from '../../ui'\nimport { ComfyButtonGroup } from '../components/buttonGroup'\nimport './menu.css'\n\n// Export to make sure following components are shimmed and exported by vite\nexport { ComfyButton } from '../components/button'\nexport { ComfySplitButton } from '../components/splitButton'\nexport { ComfyPopup } from '../components/popup'\nexport { ComfyAsyncDialog } from '@/scripts/ui/components/asyncDialog'\nexport { DraggableList } from '@/scripts/ui/draggableList'\nexport { applyTextReplacements, addStylesheet } from '@/scripts/utils'\n\nexport class ComfyAppMenu {\n app: ComfyApp\n actionsGroup: ComfyButtonGroup\n settingsGroup: ComfyButtonGroup\n viewGroup: ComfyButtonGroup\n element: HTMLElement\n\n constructor(app: ComfyApp) {\n this.app = app\n\n // Keep the group as there are custom scripts attaching extra\n // elements to it.\n this.actionsGroup = new ComfyButtonGroup()\n this.settingsGroup = new ComfyButtonGroup()\n this.viewGroup = new ComfyButtonGroup()\n\n this.element = $el('div.flex.gap-2.mx-2', [\n this.actionsGroup.element,\n this.settingsGroup.element,\n this.viewGroup.element\n ])\n }\n}\n","/**\n * Fuse.js v7.0.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2023 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '7.0.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","// @ts-strict-ignore\nimport { ComfyNodeDefImpl } from '@/stores/nodeDefStore'\nimport Fuse, { IFuseOptions, FuseSearchOptions } from 'fuse.js'\nimport _ from 'lodash'\n\nexport type SearchAuxScore = number[]\n\ninterface ExtraSearchOptions {\n matchWildcards?: boolean\n}\n\nexport class FuseSearch {\n public readonly fuse: Fuse\n public readonly keys: string[]\n public readonly data: T[]\n public readonly advancedScoring: boolean\n\n constructor(\n data: T[],\n options?: IFuseOptions,\n createIndex: boolean = true,\n advancedScoring: boolean = false\n ) {\n this.data = data\n this.keys = (options.keys ?? []) as string[]\n this.advancedScoring = advancedScoring\n const index =\n createIndex && options?.keys\n ? Fuse.createIndex(options.keys, data)\n : undefined\n this.fuse = new Fuse(data, options, index)\n }\n\n public search(query: string, options?: FuseSearchOptions): T[] {\n const fuseResult = !query\n ? this.data.map((x) => ({ item: x, score: 0 }))\n : this.fuse.search(query, options)\n\n if (!this.advancedScoring) {\n return fuseResult.map((x) => x.item)\n }\n\n const aux = fuseResult\n .map((x) => ({\n item: x.item,\n scores: this.calcAuxScores(query.toLocaleLowerCase(), x.item, x.score)\n }))\n .sort((a, b) => this.compareAux(a.scores, b.scores))\n\n return aux.map((x) => x.item)\n }\n\n public calcAuxScores(query: string, entry: T, score: number): SearchAuxScore {\n let values: string[] = []\n if (!this.keys.length) values = [entry as string]\n else values = this.keys.map((x) => entry[x])\n const scores = values.map((x) => this.calcAuxSingle(query, x, score))\n let result = scores.sort(this.compareAux)[0]\n\n const deprecated = values.some((x) =>\n x.toLocaleLowerCase().includes('deprecated')\n )\n result[0] += deprecated && result[0] != 0 ? 5 : 0\n if (entry['postProcessSearchScores']) {\n result = entry['postProcessSearchScores'](result) as SearchAuxScore\n }\n return result\n }\n\n public calcAuxSingle(\n query: string,\n item: string,\n score: number\n ): SearchAuxScore {\n const itemWords = item\n .split(/ |\\b|(?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z])/)\n .map((x) => x.toLocaleLowerCase())\n const queryParts = query.split(' ')\n item = item.toLocaleLowerCase()\n\n let main = 9\n let aux1 = 0\n let aux2 = 0\n\n if (item == query) {\n main = 0\n } else if (item.startsWith(query)) {\n main = 1\n aux2 = item.length\n } else if (itemWords.includes(query)) {\n main = 2\n aux1 = item.indexOf(query) + item.length * 0.5\n aux2 = item.length\n } else if (item.includes(query)) {\n main = 3\n aux1 = item.indexOf(query) + item.length * 0.5\n aux2 = item.length\n } else if (queryParts.every((x) => itemWords.includes(x))) {\n const indexes = queryParts.map((x) => itemWords.indexOf(x))\n const min = Math.min(...indexes)\n const max = Math.max(...indexes)\n main = 4\n aux1 = max - min + max * 0.5 + item.length * 0.5\n aux2 = item.length\n } else if (queryParts.every((x) => item.includes(x))) {\n const min = Math.min(...queryParts.map((x) => item.indexOf(x)))\n const max = Math.max(...queryParts.map((x) => item.indexOf(x) + x.length))\n main = 5\n aux1 = max - min + max * 0.5 + item.length * 0.5\n aux2 = item.length\n }\n\n const lengthPenalty =\n 0.2 *\n (1 -\n Math.min(item.length, query.length) /\n Math.max(item.length, query.length))\n return [main, aux1, aux2, score + lengthPenalty]\n }\n\n public compareAux(a: SearchAuxScore, b: SearchAuxScore) {\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n if (a[i] !== b[i]) {\n return a[i] - b[i]\n }\n }\n return a.length - b.length\n }\n}\n\nexport type FilterAndValue = [NodeFilter, T]\n\nexport class NodeFilter {\n public readonly fuseSearch: FuseSearch\n\n constructor(\n public readonly id: string,\n public readonly name: string,\n public readonly invokeSequence: string,\n public readonly longInvokeSequence: string,\n public readonly nodeOptions:\n | FilterOptionT[]\n | ((node: ComfyNodeDefImpl) => FilterOptionT[]),\n nodeDefs: ComfyNodeDefImpl[],\n options?: IFuseOptions\n ) {\n this.fuseSearch = new FuseSearch(this.getAllNodeOptions(nodeDefs), options)\n }\n\n public getNodeOptions(node: ComfyNodeDefImpl): FilterOptionT[] {\n return this.nodeOptions instanceof Function\n ? this.nodeOptions(node)\n : this.nodeOptions\n }\n\n public getAllNodeOptions(nodeDefs: ComfyNodeDefImpl[]): FilterOptionT[] {\n return [\n ...new Set(\n nodeDefs.reduce((acc, nodeDef) => {\n return [...acc, ...this.getNodeOptions(nodeDef)]\n }, [])\n )\n ]\n }\n\n public matches(\n node: ComfyNodeDefImpl,\n value: FilterOptionT,\n extraOptions?: ExtraSearchOptions\n ): boolean {\n const matchWildcards = extraOptions?.matchWildcards !== false\n if (matchWildcards && value === '*') {\n return true\n }\n const options = this.getNodeOptions(node)\n return (\n options.includes(value) ||\n (matchWildcards && _.some(options, (option) => option === '*'))\n )\n }\n}\n\nexport class NodeSearchService {\n public readonly nodeFuseSearch: FuseSearch\n public readonly nodeFilters: NodeFilter[]\n\n constructor(data: ComfyNodeDefImpl[]) {\n this.nodeFuseSearch = new FuseSearch(\n data,\n {\n keys: ['name', 'display_name'],\n includeScore: true,\n threshold: 0.3,\n shouldSort: false,\n useExtendedSearch: true\n },\n true,\n true\n )\n\n const filterSearchOptions = {\n includeScore: true,\n threshold: 0.3,\n shouldSort: true\n }\n\n const inputTypeFilter = new NodeFilter(\n /* id */ 'input',\n /* name */ 'Input Type',\n /* invokeSequence */ 'i',\n /* longInvokeSequence */ 'input',\n (node) => node.inputs.all.map((input) => input.type),\n data,\n filterSearchOptions\n )\n\n const outputTypeFilter = new NodeFilter(\n /* id */ 'output',\n /* name */ 'Output Type',\n /* invokeSequence */ 'o',\n /* longInvokeSequence */ 'output',\n (node) => node.outputs.all.map((output) => output.type),\n data,\n filterSearchOptions\n )\n\n const nodeCategoryFilter = new NodeFilter(\n /* id */ 'category',\n /* name */ 'Category',\n /* invokeSequence */ 'c',\n /* longInvokeSequence */ 'category',\n (node) => [node.category],\n data,\n filterSearchOptions\n )\n\n const nodeSourceFilter = new NodeFilter(\n /* id */ 'source',\n /* name */ 'Source',\n /* invokeSequence */ 's',\n /* longInvokeSequence */ 'source',\n (node) => [node.nodeSource.displayText],\n data,\n filterSearchOptions\n )\n\n this.nodeFilters = [\n inputTypeFilter,\n outputTypeFilter,\n nodeCategoryFilter,\n nodeSourceFilter\n ]\n }\n\n public endsWithFilterStartSequence(query: string): boolean {\n return query.endsWith(':')\n }\n\n public searchNode(\n query: string,\n filters: FilterAndValue[] = [],\n options?: FuseSearchOptions,\n extraOptions?: ExtraSearchOptions\n ): ComfyNodeDefImpl[] {\n const matchedNodes = this.nodeFuseSearch.search(query)\n\n const results = matchedNodes.filter((node) => {\n return _.every(filters, (filterAndValue) => {\n const [filter, value] = filterAndValue\n return filter.matches(node, value, extraOptions)\n })\n })\n\n return options?.limit ? results.slice(0, options.limit) : results\n }\n\n public getFilterById(id: string): NodeFilter | undefined {\n return this.nodeFilters.find((filter) => filter.id === id)\n }\n}\n","import {\n NodeSearchService,\n type SearchAuxScore\n} from '@/services/nodeSearchService'\nimport {\n type ComfyNodeDef,\n type ComfyInputsSpec as ComfyInputsSpecSchema,\n type ComfyOutputTypesSpec as ComfyOutputTypesSpecSchema,\n type InputSpec\n} from '@/types/apiTypes'\nimport { defineStore } from 'pinia'\nimport type { TreeNode } from 'primevue/treenode'\nimport { buildTree } from '@/utils/treeUtil'\nimport { computed, ref } from 'vue'\nimport axios from 'axios'\nimport {\n type NodeSource,\n NodeSourceType,\n getNodeSource\n} from '@/types/nodeSource'\nimport type { LGraphNode } from '@comfyorg/litegraph'\n\nexport interface BaseInputSpec {\n name: string\n type: string\n tooltip?: string\n default?: T\n\n forceInput?: boolean\n}\n\nexport interface NumericInputSpec extends BaseInputSpec {\n min?: number\n max?: number\n step?: number\n}\n\nexport interface IntInputSpec extends NumericInputSpec {\n type: 'INT'\n}\n\nexport interface FloatInputSpec extends NumericInputSpec {\n type: 'FLOAT'\n round?: number\n}\n\nexport interface BooleanInputSpec extends BaseInputSpec {\n type: 'BOOLEAN'\n labelOn?: string\n labelOff?: string\n}\n\nexport interface StringInputSpec extends BaseInputSpec {\n type: 'STRING'\n multiline?: boolean\n dynamicPrompts?: boolean\n}\n\nexport interface ComboInputSpec extends BaseInputSpec {\n type: 'COMBO'\n comboOptions: any[]\n controlAfterGenerate?: boolean\n imageUpload?: boolean\n}\n\nexport class ComfyInputsSpec {\n required: Record\n optional: Record\n hidden?: Record\n\n constructor(obj: ComfyInputsSpecSchema) {\n this.required = ComfyInputsSpec.transformInputSpecRecord(obj.required ?? {})\n this.optional = ComfyInputsSpec.transformInputSpecRecord(obj.optional ?? {})\n this.hidden = obj.hidden\n }\n\n private static transformInputSpecRecord(\n record: Record\n ): Record {\n const result: Record = {}\n for (const [key, value] of Object.entries(record)) {\n result[key] = ComfyInputsSpec.transformSingleInputSpec(key, value)\n }\n return result\n }\n\n private static isInputSpec(obj: any): boolean {\n return (\n Array.isArray(obj) &&\n obj.length >= 1 &&\n (typeof obj[0] === 'string' || Array.isArray(obj[0]))\n )\n }\n\n private static transformSingleInputSpec(\n name: string,\n value: any\n ): BaseInputSpec {\n if (!ComfyInputsSpec.isInputSpec(value)) return value\n\n const [typeRaw, _spec] = value\n const spec = _spec ?? {}\n const type = Array.isArray(typeRaw) ? 'COMBO' : value[0]\n\n switch (type) {\n case 'COMBO':\n return {\n name,\n type,\n ...spec,\n comboOptions: typeRaw,\n default: spec.default ?? typeRaw[0]\n } as ComboInputSpec\n case 'INT':\n case 'FLOAT':\n case 'BOOLEAN':\n case 'STRING':\n default:\n return { name, type, ...spec } as BaseInputSpec\n }\n }\n\n get all() {\n return [...Object.values(this.required), ...Object.values(this.optional)]\n }\n\n getInput(name: string): BaseInputSpec | undefined {\n return this.required[name] ?? this.optional[name]\n }\n}\n\nexport class ComfyOutputSpec {\n constructor(\n public index: number,\n // Name is not unique for output params\n public name: string,\n public type: string,\n public is_list: boolean,\n public comboOptions?: any[],\n public tooltip?: string\n ) {}\n}\n\nexport class ComfyOutputsSpec {\n constructor(public outputs: ComfyOutputSpec[]) {}\n\n get all() {\n return this.outputs\n }\n}\n\nexport class ComfyNodeDefImpl implements ComfyNodeDef {\n // ComfyNodeDef fields\n readonly name: string\n readonly display_name: string\n /**\n * Category is not marked as readonly as the bookmark system\n * needs to write to it to assign a node to a custom folder.\n */\n category: string\n readonly python_module: string\n readonly description: string\n readonly deprecated: boolean\n readonly experimental: boolean\n readonly output_node: boolean\n /**\n * @deprecated Use `inputs` instead\n */\n readonly input: ComfyInputsSpecSchema\n /**\n * @deprecated Use `outputs` instead\n */\n readonly output: ComfyOutputTypesSpecSchema\n /**\n * @deprecated Use `outputs[n].is_list` instead\n */\n readonly output_is_list?: boolean[]\n /**\n * @deprecated Use `outputs[n].name` instead\n */\n readonly output_name?: string[]\n /**\n * @deprecated Use `outputs[n].tooltip` instead\n */\n readonly output_tooltips?: string[]\n\n // ComfyNodeDefImpl fields\n readonly inputs: ComfyInputsSpec\n readonly outputs: ComfyOutputsSpec\n readonly nodeSource: NodeSource\n\n constructor(obj: ComfyNodeDef) {\n this.name = obj.name\n this.display_name = obj.display_name\n this.category = obj.category\n this.python_module = obj.python_module\n this.description = obj.description\n this.deprecated = obj.deprecated ?? obj.category === ''\n this.experimental =\n obj.experimental ?? obj.category.startsWith('_for_testing')\n this.output_node = obj.output_node\n this.input = obj.input ?? {}\n this.output = obj.output ?? []\n this.output_is_list = obj.output_is_list\n this.output_name = obj.output_name\n this.output_tooltips = obj.output_tooltips\n\n this.inputs = new ComfyInputsSpec(obj.input ?? {})\n this.outputs = ComfyNodeDefImpl.transformOutputSpec(obj)\n this.nodeSource = getNodeSource(obj.python_module)\n }\n\n private static transformOutputSpec(obj: any): ComfyOutputsSpec {\n const { output, output_is_list, output_name, output_tooltips } = obj\n const result = (output ?? []).map((type: string | any[], index: number) => {\n const typeString = Array.isArray(type) ? 'COMBO' : type\n\n return new ComfyOutputSpec(\n index,\n output_name?.[index],\n typeString,\n output_is_list?.[index],\n Array.isArray(type) ? type : undefined,\n output_tooltips?.[index]\n )\n })\n return new ComfyOutputsSpec(result)\n }\n\n get nodePath(): string {\n return (this.category ? this.category + '/' : '') + this.name\n }\n\n get isDummyFolder(): boolean {\n return this.name === ''\n }\n\n postProcessSearchScores(scores: SearchAuxScore): SearchAuxScore {\n const nodeFrequencyStore = useNodeFrequencyStore()\n const nodeFrequency = nodeFrequencyStore.getNodeFrequencyByName(this.name)\n return [scores[0], -nodeFrequency, ...scores.slice(1)]\n }\n\n get isCoreNode(): boolean {\n return this.nodeSource.type === NodeSourceType.Core\n }\n\n get nodeLifeCycleBadgeText(): string {\n if (this.deprecated) return '[DEPR]'\n if (this.experimental) return '[BETA]'\n return ''\n }\n}\n\nexport const SYSTEM_NODE_DEFS: Record = {\n PrimitiveNode: {\n name: 'PrimitiveNode',\n display_name: 'Primitive',\n category: 'utils',\n input: { required: {}, optional: {} },\n output: ['*'],\n output_name: ['connect to widget input'],\n output_is_list: [false],\n output_node: false,\n python_module: 'nodes',\n description: 'Primitive values like numbers, strings, and booleans.'\n },\n Reroute: {\n name: 'Reroute',\n display_name: 'Reroute',\n category: 'utils',\n input: { required: { '': ['*'] }, optional: {} },\n output: ['*'],\n output_name: [''],\n output_is_list: [false],\n output_node: false,\n python_module: 'nodes',\n description: 'Reroute the connection to another node.'\n },\n Note: {\n name: 'Note',\n display_name: 'Note',\n category: 'utils',\n input: { required: {}, optional: {} },\n output: [],\n output_name: [],\n output_is_list: [],\n output_node: false,\n python_module: 'nodes',\n description: 'Node that add notes to your project'\n }\n}\n\nexport function buildNodeDefTree(nodeDefs: ComfyNodeDefImpl[]): TreeNode {\n return buildTree(nodeDefs, (nodeDef: ComfyNodeDefImpl) =>\n nodeDef.nodePath.split('/')\n )\n}\n\nexport function createDummyFolderNodeDef(folderPath: string): ComfyNodeDefImpl {\n return new ComfyNodeDefImpl({\n name: '',\n display_name: '',\n category: folderPath.endsWith('/') ? folderPath.slice(0, -1) : folderPath,\n python_module: 'nodes',\n description: 'Dummy Folder Node (User should never see this string)',\n input: {},\n output: [],\n output_name: [],\n output_is_list: [],\n output_node: false\n } as ComfyNodeDef)\n}\n\nexport const useNodeDefStore = defineStore('nodeDef', () => {\n const nodeDefsByName = ref>({})\n const nodeDefsByDisplayName = ref>({})\n const showDeprecated = ref(false)\n const showExperimental = ref(false)\n\n const nodeDefs = computed(() => Object.values(nodeDefsByName.value))\n const visibleNodeDefs = computed(() =>\n nodeDefs.value.filter(\n (nodeDef: ComfyNodeDefImpl) =>\n (showDeprecated.value || !nodeDef.deprecated) &&\n (showExperimental.value || !nodeDef.experimental)\n )\n )\n const nodeSearchService = computed(\n () => new NodeSearchService(visibleNodeDefs.value)\n )\n const nodeTree = computed(() => buildNodeDefTree(visibleNodeDefs.value))\n\n function updateNodeDefs(nodeDefs: ComfyNodeDef[]) {\n const newNodeDefsByName: Record = {}\n const newNodeDefsByDisplayName: Record = {}\n for (const nodeDef of nodeDefs) {\n try {\n const nodeDefImpl = new ComfyNodeDefImpl(nodeDef)\n newNodeDefsByName[nodeDef.name] = nodeDefImpl\n newNodeDefsByDisplayName[nodeDef.display_name] = nodeDefImpl\n } catch (e) {\n // Avoid breaking the app for invalid nodeDefs\n // NodeDef validation is now optional for performance reasons\n console.error('Error adding nodeDef:', e)\n }\n }\n nodeDefsByName.value = newNodeDefsByName\n nodeDefsByDisplayName.value = newNodeDefsByDisplayName\n }\n function addNodeDef(nodeDef: ComfyNodeDef) {\n const nodeDefImpl = new ComfyNodeDefImpl(nodeDef)\n nodeDefsByName.value[nodeDef.name] = nodeDefImpl\n nodeDefsByDisplayName.value[nodeDef.display_name] = nodeDefImpl\n }\n function fromLGraphNode(node: LGraphNode): ComfyNodeDefImpl | null {\n // Frontend-only nodes don't have nodeDef\n return nodeDefsByName.value[node.constructor?.nodeData?.name] ?? null\n }\n\n return {\n nodeDefsByName,\n nodeDefsByDisplayName,\n showDeprecated,\n showExperimental,\n\n nodeDefs,\n visibleNodeDefs,\n nodeSearchService,\n nodeTree,\n\n updateNodeDefs,\n addNodeDef,\n fromLGraphNode\n }\n})\n\nexport const useNodeFrequencyStore = defineStore('nodeFrequency', () => {\n const topNodeDefLimit = ref(64)\n const nodeFrequencyLookup = ref>({})\n const nodeNamesByFrequency = computed(() =>\n Object.keys(nodeFrequencyLookup.value)\n )\n const isLoaded = ref(false)\n\n const loadNodeFrequencies = async () => {\n if (!isLoaded.value) {\n try {\n const response = await axios.get('assets/sorted-custom-node-map.json')\n nodeFrequencyLookup.value = response.data\n isLoaded.value = true\n } catch (error) {\n console.error('Error loading node frequencies:', error)\n }\n }\n }\n\n const getNodeFrequency = (nodeDef: ComfyNodeDefImpl) => {\n return getNodeFrequencyByName(nodeDef.name)\n }\n\n const getNodeFrequencyByName = (nodeName: string) => {\n return nodeFrequencyLookup.value[nodeName] ?? 0\n }\n\n const nodeDefStore = useNodeDefStore()\n const topNodeDefs = computed(() => {\n return nodeNamesByFrequency.value\n .map((nodeName: string) => nodeDefStore.nodeDefsByName[nodeName])\n .filter((nodeDef: ComfyNodeDefImpl) => nodeDef !== undefined)\n .slice(0, topNodeDefLimit.value)\n })\n\n return {\n nodeNamesByFrequency,\n topNodeDefs,\n isLoaded,\n loadNodeFrequencies,\n getNodeFrequency,\n getNodeFrequencyByName\n }\n})\n","import { computed, ref } from 'vue'\nimport { defineStore } from 'pinia'\nimport { api } from '@/scripts/api'\n\n/** (Internal helper) finds a value in a metadata object from any of a list of keys. */\nfunction _findInMetadata(metadata: any, ...keys: string[]): string | null {\n for (const key of keys) {\n if (key in metadata) {\n return metadata[key]\n }\n for (const k in metadata) {\n if (k.endsWith(key)) {\n return metadata[k]\n }\n }\n }\n return null\n}\n\n/** Defines and holds metadata for a model */\nexport class ComfyModelDef {\n /** Proper filename of the model */\n readonly file_name: string\n /** Normalized filename of the model, with all backslashes replaced with forward slashes */\n readonly normalized_file_name: string\n /** Directory containing the model, eg 'checkpoints' */\n readonly directory: string\n /** Simplified copy of name, used as a default title. Excludes the directory and the '.safetensors' file extension */\n readonly simplified_file_name: string\n /** Key for the model, used to uniquely identify the model. */\n readonly key: string\n /** Title / display name of the model, sometimes same as the name but not always */\n title: string\n /** Metadata: architecture ID for the model, such as 'stable-diffusion-xl-v1-base' */\n architecture_id: string = ''\n /** Metadata: author of the model */\n author: string = ''\n /** Metadata: resolution of the model, eg '1024x1024' */\n resolution: string = ''\n /** Metadata: description of the model */\n description: string = ''\n /** Metadata: usage hint for the model */\n usage_hint: string = ''\n /** Metadata: trigger phrase for the model */\n trigger_phrase: string = ''\n /** Metadata: tags list for the model */\n tags: string[] = []\n /** Metadata: image for the model */\n image: string = ''\n /** Whether the model metadata has been loaded from the server, used for `load()` */\n has_loaded_metadata: boolean = false\n /** If true, a metadata load request has been triggered, but may or may not yet have finished loading */\n is_load_requested: boolean = false\n /** A string full of auto-computed lowercase-only searchable text for this model */\n searchable: string = ''\n\n constructor(name: string, directory: string) {\n this.file_name = name\n this.normalized_file_name = name.replaceAll('\\\\', '/')\n this.simplified_file_name = this.normalized_file_name.split('/').pop() ?? ''\n if (this.simplified_file_name.endsWith('.safetensors')) {\n this.simplified_file_name = this.simplified_file_name.slice(\n 0,\n -'.safetensors'.length\n )\n }\n this.title = this.simplified_file_name\n this.directory = directory\n this.key = `${directory}/${this.normalized_file_name}`\n this.updateSearchable()\n }\n\n updateSearchable() {\n this.searchable = [\n this.file_name,\n this.title,\n this.author,\n this.description,\n this.trigger_phrase,\n this.tags.join(', ')\n ]\n .join('\\n')\n .toLowerCase()\n }\n\n /** Loads the model metadata from the server, filling in this object if data is available */\n async load(): Promise {\n if (this.has_loaded_metadata || this.is_load_requested) {\n return\n }\n this.is_load_requested = true\n try {\n const metadata = await api.viewMetadata(this.directory, this.file_name)\n if (!metadata) {\n return\n }\n this.title =\n _findInMetadata(\n metadata,\n 'modelspec.title',\n 'title',\n 'display_name',\n 'name'\n ) || this.title\n this.architecture_id =\n _findInMetadata(metadata, 'modelspec.architecture', 'architecture') ||\n ''\n this.author =\n _findInMetadata(metadata, 'modelspec.author', 'author') || ''\n this.description =\n _findInMetadata(metadata, 'modelspec.description', 'description') || ''\n this.resolution =\n _findInMetadata(metadata, 'modelspec.resolution', 'resolution') || ''\n this.usage_hint =\n _findInMetadata(metadata, 'modelspec.usage_hint', 'usage_hint') || ''\n this.trigger_phrase =\n _findInMetadata(\n metadata,\n 'modelspec.trigger_phrase',\n 'trigger_phrase'\n ) || ''\n this.image =\n _findInMetadata(\n metadata,\n 'modelspec.thumbnail',\n 'thumbnail',\n 'image',\n 'icon'\n ) || ''\n const tagsCommaSeparated =\n _findInMetadata(metadata, 'modelspec.tags', 'tags') || ''\n this.tags = tagsCommaSeparated.split(',').map((tag) => tag.trim())\n this.has_loaded_metadata = true\n this.updateSearchable()\n } catch (error) {\n console.error('Error loading model metadata', this.file_name, this, error)\n }\n }\n}\n\nexport enum ResourceState {\n Uninitialized,\n Loading,\n Loaded\n}\n\nexport class ModelFolder {\n /** Models in this folder */\n models: Record = {}\n state: ResourceState = ResourceState.Uninitialized\n\n constructor(public directory: string) {}\n\n get key(): string {\n return this.directory + '/'\n }\n\n /**\n * Loads the models in this folder from the server\n */\n async load() {\n if (this.state !== ResourceState.Uninitialized) {\n return this\n }\n this.state = ResourceState.Loading\n const models = await api.getModels(this.directory)\n for (const model of models) {\n this.models[model] = new ComfyModelDef(model, this.directory)\n }\n this.state = ResourceState.Loaded\n return this\n }\n}\n\n/** Model store handler, wraps individual per-folder model stores */\nexport const useModelStore = defineStore('models', () => {\n const modelFolderNames = ref([])\n const modelFolderByName = ref>({})\n const modelFolders = computed(() =>\n modelFolderNames.value.map(\n (folderName) => modelFolderByName.value[folderName]\n )\n )\n const models = computed(() =>\n modelFolders.value.flatMap((folder) => Object.values(folder.models))\n )\n\n /**\n * Loads the model folders from the server\n */\n async function loadModelFolders() {\n modelFolderNames.value = await api.getModelFolders()\n modelFolderByName.value = {}\n for (const folderName of modelFolderNames.value) {\n modelFolderByName.value[folderName] = new ModelFolder(folderName)\n }\n }\n\n async function getLoadedModelFolder(\n folderName: string\n ): Promise {\n const folder = modelFolderByName.value[folderName]\n return folder ? await folder.load() : null\n }\n\n /**\n * Loads all model folders' contents from the server\n */\n async function loadModels() {\n return Promise.all(modelFolders.value.map((folder) => folder.load()))\n }\n\n return {\n models,\n modelFolders,\n loadModelFolders,\n loadModels,\n getLoadedModelFolder\n }\n})\n","import { api } from '@/scripts/api'\n\n/**\n * Sync entities from the API to the entityByPath map.\n * @param dir The directory to sync from\n * @param entityByPath The map to sync to\n * @param createEntity A function to create an entity from a file\n * @param updateEntity A function to update an entity from a file\n * @param exclude A function to exclude an entity\n */\nexport async function syncEntities(\n dir: string,\n entityByPath: Record,\n createEntity: (file: any) => T,\n updateEntity: (entity: T, file: any) => void,\n exclude: (file: T) => boolean = () => false\n) {\n const files = (await api.listUserDataFullInfo(dir)).map((file) => ({\n ...file,\n path: dir ? `${dir}/${file.path}` : file.path\n }))\n\n for (const file of files) {\n const existingEntity = entityByPath[file.path]\n\n if (!existingEntity) {\n // New entity, add it to the map\n entityByPath[file.path] = createEntity(file)\n } else if (exclude(existingEntity)) {\n // Entity has been excluded, skip it\n continue\n } else {\n // Entity has been modified, update its properties\n updateEntity(existingEntity, file)\n }\n }\n\n // Remove entities that no longer exist\n for (const [path, entity] of Object.entries(entityByPath)) {\n if (exclude(entity)) continue\n if (!files.some((file) => file.path === path)) {\n delete entityByPath[path]\n }\n }\n}\n","import { defineStore } from 'pinia'\nimport { api } from '@/scripts/api'\nimport { buildTree } from '@/utils/treeUtil'\nimport { computed, ref } from 'vue'\nimport { TreeExplorerNode } from '@/types/treeExplorerTypes'\nimport { UserDataFullInfo } from '@/types/apiTypes'\nimport { syncEntities } from '@/utils/syncUtil'\nimport { getPathDetails } from '@/utils/formatUtil'\n\n/**\n * Represents a file in the user's data directory.\n */\nexport class UserFile {\n /**\n * Various path components.\n * Example:\n * - path: 'dir/file.txt'\n * - directory: 'dir'\n * - fullFilename: 'file.txt'\n * - filename: 'file'\n * - suffix: 'txt'\n */\n directory: string\n fullFilename: string\n filename: string\n suffix: string | null\n\n isLoading: boolean = false\n content: string | null = null\n originalContent: string | null = null\n\n constructor(\n /**\n * Path relative to ComfyUI/user/ directory.\n */\n public path: string,\n /**\n * Last modified timestamp.\n */\n public lastModified: number,\n /**\n * File size in bytes. -1 for temporary files.\n */\n public size: number\n ) {\n const details = getPathDetails(path)\n this.path = path\n this.directory = details.directory\n this.fullFilename = details.fullFilename\n this.filename = details.filename\n this.suffix = details.suffix\n }\n\n updatePath(newPath: string) {\n const details = getPathDetails(newPath)\n this.path = newPath\n this.directory = details.directory\n this.fullFilename = details.fullFilename\n this.filename = details.filename\n this.suffix = details.suffix\n }\n\n static createTemporary(path: string): UserFile {\n return new UserFile(path, Date.now(), -1)\n }\n\n get isTemporary() {\n return this.size === -1\n }\n\n get isPersisted() {\n return !this.isTemporary\n }\n\n get key(): string {\n return this.path\n }\n\n get isLoaded() {\n return this.content !== null\n }\n\n get isModified() {\n return this.content !== this.originalContent\n }\n\n /**\n * Loads the file content from the remote storage.\n */\n async load({\n force = false\n }: { force?: boolean } = {}): Promise {\n if (this.isTemporary || (!force && this.isLoaded))\n return this as LoadedUserFile\n\n this.isLoading = true\n const resp = await api.getUserData(this.path)\n if (resp.status !== 200) {\n throw new Error(\n `Failed to load file '${this.path}': ${resp.status} ${resp.statusText}`\n )\n }\n this.content = await resp.text()\n this.originalContent = this.content\n this.isLoading = false\n return this as LoadedUserFile\n }\n\n /**\n * Unloads the file content from memory\n */\n unload(): void {\n this.content = null\n this.originalContent = null\n this.isLoading = false\n }\n\n async saveAs(newPath: string): Promise {\n const tempFile = this.isTemporary ? this : UserFile.createTemporary(newPath)\n tempFile.content = this.content\n await tempFile.save()\n return tempFile\n }\n\n /**\n * Saves the file to the remote storage.\n * @param force Whether to force the save even if the file is not modified.\n */\n async save({ force = false }: { force?: boolean } = {}): Promise {\n if (this.isPersisted && !this.isModified && !force) return this\n\n const resp = await api.storeUserData(this.path, this.content, {\n overwrite: this.isPersisted,\n throwOnError: true,\n full_info: true\n })\n\n // Note: Backend supports full_info=true feature after\n // https://github.com/comfyanonymous/ComfyUI/pull/5446\n const updatedFile = (await resp.json()) as string | UserDataFullInfo\n if (typeof updatedFile === 'object') {\n this.lastModified = updatedFile.modified\n this.size = updatedFile.size\n }\n this.originalContent = this.content\n return this\n }\n\n async delete(): Promise {\n if (this.isTemporary) return\n\n const resp = await api.deleteUserData(this.path)\n if (resp.status !== 204) {\n throw new Error(\n `Failed to delete file '${this.path}': ${resp.status} ${resp.statusText}`\n )\n }\n }\n\n async rename(newPath: string): Promise {\n if (this.isTemporary) {\n this.updatePath(newPath)\n return this\n }\n\n const resp = await api.moveUserData(this.path, newPath)\n if (resp.status !== 200) {\n throw new Error(\n `Failed to rename file '${this.path}': ${resp.status} ${resp.statusText}`\n )\n }\n this.updatePath(newPath)\n // Note: Backend supports full_info=true feature after\n // https://github.com/comfyanonymous/ComfyUI/pull/5446\n const updatedFile = (await resp.json()) as string | UserDataFullInfo\n if (typeof updatedFile === 'object') {\n this.lastModified = updatedFile.modified\n this.size = updatedFile.size\n }\n return this\n }\n}\n\nexport interface LoadedUserFile extends UserFile {\n isLoaded: true\n originalContent: string\n content: string\n}\n\nexport const useUserFileStore = defineStore('userFile', () => {\n const userFilesByPath = ref>({})\n\n const userFiles = computed(() => Object.values(userFilesByPath.value))\n const modifiedFiles = computed(() =>\n userFiles.value.filter((file: UserFile) => file.isModified)\n )\n const loadedFiles = computed(() =>\n userFiles.value.filter((file: UserFile) => file.isLoaded)\n )\n\n const fileTree = computed>(\n () =>\n buildTree(userFiles.value, (userFile: UserFile) =>\n userFile.path.split('/')\n ) as TreeExplorerNode\n )\n\n /**\n * Syncs the files in the given directory with the API.\n * @param dir The directory to sync.\n */\n const syncFiles = async (dir: string = '') => {\n await syncEntities(\n dir,\n userFilesByPath.value,\n (file) => new UserFile(file.path, file.modified, file.size),\n (existingFile, file) => {\n existingFile.lastModified = file.modified\n existingFile.size = file.size\n existingFile.unload()\n }\n )\n }\n\n return {\n userFiles,\n modifiedFiles,\n loadedFiles,\n fileTree,\n syncFiles\n }\n})\n","class Processor {\n constructor(options) {\n this.selfOptions = options || {};\n this.pipes = {};\n }\n options(options) {\n if (options) {\n this.selfOptions = options;\n }\n return this.selfOptions;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(name, pipeArg) {\n let pipe = pipeArg;\n if (typeof name === 'string') {\n if (typeof pipe === 'undefined') {\n return this.pipes[name];\n }\n else {\n this.pipes[name] = pipe;\n }\n }\n if (name && name.name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe = name;\n if (pipe.processor === this) {\n return pipe;\n }\n this.pipes[pipe.name] = pipe;\n }\n pipe.processor = this;\n return pipe;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process(input, pipe) {\n let context = input;\n context.options = this.options();\n let nextPipe = pipe || input.pipe || 'default';\n let lastPipe;\n while (nextPipe) {\n if (typeof context.nextAfterChildren !== 'undefined') {\n // children processed and coming back to parent\n context.next = context.nextAfterChildren;\n context.nextAfterChildren = null;\n }\n if (typeof nextPipe === 'string') {\n nextPipe = this.pipe(nextPipe);\n }\n nextPipe.process(context);\n lastPipe = nextPipe;\n nextPipe = null;\n if (context) {\n if (context.next) {\n context = context.next;\n nextPipe = context.pipe || lastPipe;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return context.hasResult ? context.result : undefined;\n }\n}\nexport default Processor;\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nclass Pipe {\n constructor(name) {\n this.name = name;\n this.filters = [];\n }\n process(input) {\n if (!this.processor) {\n throw new Error('add this pipe to a processor before using it');\n }\n const debug = this.debug;\n const length = this.filters.length;\n const context = input;\n for (let index = 0; index < length; index++) {\n const filter = this.filters[index];\n if (debug) {\n this.log(`filter: ${filter.filterName}`);\n }\n filter(context);\n if (typeof context === 'object' && context.exiting) {\n context.exiting = false;\n break;\n }\n }\n if (!context.next && this.resultCheck) {\n this.resultCheck(context);\n }\n }\n log(msg) {\n console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`);\n }\n append(...args) {\n this.filters.push(...args);\n return this;\n }\n prepend(...args) {\n this.filters.unshift(...args);\n return this;\n }\n indexOf(filterName) {\n if (!filterName) {\n throw new Error('a filter name is required');\n }\n for (let index = 0; index < this.filters.length; index++) {\n const filter = this.filters[index];\n if (filter.filterName === filterName) {\n return index;\n }\n }\n throw new Error(`filter not found: ${filterName}`);\n }\n list() {\n return this.filters.map((f) => f.filterName);\n }\n after(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index + 1, 0, ...params);\n return this;\n }\n before(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 0, ...params);\n return this;\n }\n replace(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 1, ...params);\n return this;\n }\n remove(filterName) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 1);\n return this;\n }\n clear() {\n this.filters.length = 0;\n return this;\n }\n shouldHaveResult(should) {\n if (should === false) {\n this.resultCheck = null;\n return;\n }\n if (this.resultCheck) {\n return;\n }\n this.resultCheck = (context) => {\n if (!context.hasResult) {\n console.log(context);\n const error = new Error(`${this.name} failed`);\n error.noResult = true;\n throw error;\n }\n };\n return this;\n }\n}\nexport default Pipe;\n","export default class Context {\n setResult(result) {\n this.result = result;\n this.hasResult = true;\n return this;\n }\n exit() {\n this.exiting = true;\n return this;\n }\n push(child, name) {\n child.parent = this;\n if (typeof name !== 'undefined') {\n child.childName = name;\n }\n child.root = this.root || this;\n child.options = child.options || this.options;\n if (!this.children) {\n this.children = [child];\n this.nextAfterChildren = this.next || null;\n this.next = child;\n }\n else {\n this.children[this.children.length - 1].next = child;\n this.children.push(child);\n }\n child.next = this;\n return this;\n }\n}\n","function cloneRegExp(re) {\n const regexMatch = /^\\/(.*)\\/([gimyu]*)$/.exec(re.toString());\n return new RegExp(regexMatch[1], regexMatch[2]);\n}\nexport default function clone(arg) {\n if (typeof arg !== 'object') {\n return arg;\n }\n if (arg === null) {\n return null;\n }\n if (Array.isArray(arg)) {\n return arg.map(clone);\n }\n if (arg instanceof Date) {\n return new Date(arg.getTime());\n }\n if (arg instanceof RegExp) {\n return cloneRegExp(arg);\n }\n const cloned = {};\n for (const name in arg) {\n if (Object.prototype.hasOwnProperty.call(arg, name)) {\n cloned[name] = clone(arg[name]);\n }\n }\n return cloned;\n}\n","import Context from './context.js';\nimport defaultClone from '../clone.js';\nclass DiffContext extends Context {\n constructor(left, right) {\n super();\n this.left = left;\n this.right = right;\n this.pipe = 'diff';\n }\n setResult(result) {\n if (this.options.cloneDiffValues && typeof result === 'object') {\n const clone = typeof this.options.cloneDiffValues === 'function'\n ? this.options.cloneDiffValues\n : defaultClone;\n if (typeof result[0] === 'object') {\n result[0] = clone(result[0]);\n }\n if (typeof result[1] === 'object') {\n result[1] = clone(result[1]);\n }\n }\n return super.setResult(result);\n }\n}\nexport default DiffContext;\n","import Context from './context.js';\nclass PatchContext extends Context {\n constructor(left, delta) {\n super();\n this.left = left;\n this.delta = delta;\n this.pipe = 'patch';\n }\n}\nexport default PatchContext;\n","import Context from './context.js';\nclass ReverseContext extends Context {\n constructor(delta) {\n super();\n this.delta = delta;\n this.pipe = 'reverse';\n }\n}\nexport default ReverseContext;\n","export const diffFilter = function trivialMatchesDiffFilter(context) {\n if (context.left === context.right) {\n context.setResult(undefined).exit();\n return;\n }\n if (typeof context.left === 'undefined') {\n if (typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.setResult([context.right]).exit();\n return;\n }\n if (typeof context.right === 'undefined') {\n context.setResult([context.left, 0, 0]).exit();\n return;\n }\n if (typeof context.left === 'function' ||\n typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.leftType = context.left === null ? 'null' : typeof context.left;\n context.rightType = context.right === null ? 'null' : typeof context.right;\n if (context.leftType !== context.rightType) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'boolean' || context.leftType === 'number') {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'object') {\n context.leftIsArray = Array.isArray(context.left);\n }\n if (context.rightType === 'object') {\n context.rightIsArray = Array.isArray(context.right);\n }\n if (context.leftIsArray !== context.rightIsArray) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.left instanceof RegExp) {\n if (context.right instanceof RegExp) {\n context\n .setResult([context.left.toString(), context.right.toString()])\n .exit();\n }\n else {\n context.setResult([context.left, context.right]).exit();\n }\n }\n};\ndiffFilter.filterName = 'trivial';\nexport const patchFilter = function trivialMatchesPatchFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.left).exit();\n return;\n }\n context.nested = !Array.isArray(context.delta);\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta.length === 1) {\n context.setResult(nonNestedDelta[0]).exit();\n return;\n }\n if (nonNestedDelta.length === 2) {\n if (context.left instanceof RegExp) {\n const regexArgs = /^\\/(.*)\\/([gimyu]+)$/.exec(nonNestedDelta[1]);\n if (regexArgs) {\n context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();\n return;\n }\n }\n context.setResult(nonNestedDelta[1]).exit();\n return;\n }\n if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n context.setResult(undefined).exit();\n }\n};\npatchFilter.filterName = 'trivial';\nexport const reverseFilter = function trivialReferseFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.delta).exit();\n return;\n }\n context.nested = !Array.isArray(context.delta);\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta.length === 1) {\n context.setResult([nonNestedDelta[0], 0, 0]).exit();\n return;\n }\n if (nonNestedDelta.length === 2) {\n context.setResult([nonNestedDelta[1], nonNestedDelta[0]]).exit();\n return;\n }\n if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n context.setResult([nonNestedDelta[0]]).exit();\n }\n};\nreverseFilter.filterName = 'trivial';\n","import DiffContext from '../contexts/diff.js';\nimport PatchContext from '../contexts/patch.js';\nimport ReverseContext from '../contexts/reverse.js';\nexport const collectChildrenDiffFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const length = context.children.length;\n let child;\n let result = context.result;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n if (typeof child.result === 'undefined') {\n continue;\n }\n result = result || {};\n result[child.childName] = child.result;\n }\n if (result && context.leftIsArray) {\n result._t = 'a';\n }\n context.setResult(result).exit();\n};\ncollectChildrenDiffFilter.filterName = 'collectChildren';\nexport const objectsDiffFilter = (context) => {\n if (context.leftIsArray || context.leftType !== 'object') {\n return;\n }\n const left = context.left;\n const right = context.right;\n let name;\n let child;\n const propertyFilter = context.options.propertyFilter;\n for (name in left) {\n if (!Object.prototype.hasOwnProperty.call(left, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n child = new DiffContext(left[name], right[name]);\n context.push(child, name);\n }\n for (name in right) {\n if (!Object.prototype.hasOwnProperty.call(right, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n if (typeof left[name] === 'undefined') {\n child = new DiffContext(undefined, right[name]);\n context.push(child, name);\n }\n }\n if (!context.children || context.children.length === 0) {\n context.setResult(undefined).exit();\n return;\n }\n context.exit();\n};\nobjectsDiffFilter.filterName = 'objects';\nexport const patchFilter = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t) {\n return;\n }\n const objectDelta = nestedDelta;\n let name;\n let child;\n for (name in objectDelta) {\n child = new PatchContext(context.left[name], objectDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\npatchFilter.filterName = 'objects';\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t) {\n return;\n }\n const object = context.left;\n const length = context.children.length;\n let child;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const property = child.childName;\n if (Object.prototype.hasOwnProperty.call(context.left, property) &&\n child.result === undefined) {\n delete object[property];\n }\n else if (object[property] !== child.result) {\n object[property] = child.result;\n }\n }\n context.setResult(object).exit();\n};\ncollectChildrenPatchFilter.filterName = 'collectChildren';\nexport const reverseFilter = function nestedReverseFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t) {\n return;\n }\n const objectDelta = context.delta;\n let name;\n let child;\n for (name in objectDelta) {\n child = new ReverseContext(objectDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter.filterName = 'objects';\nexport const collectChildrenReverseFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t) {\n return;\n }\n const length = context.children.length;\n let child;\n const delta = {};\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const property = child.childName;\n if (delta[property] !== child.result) {\n delta[property] = child.result;\n }\n }\n context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'collectChildren';\n","/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\nconst defaultMatch = function (array1, array2, index1, index2) {\n return array1[index1] === array2[index2];\n};\nconst lengthMatrix = function (array1, array2, match, context) {\n const len1 = array1.length;\n const len2 = array2.length;\n let x, y;\n // initialize empty matrix of len1+1 x len2+1\n const matrix = new Array(len1 + 1);\n for (x = 0; x < len1 + 1; x++) {\n matrix[x] = new Array(len2 + 1);\n for (y = 0; y < len2 + 1; y++) {\n matrix[x][y] = 0;\n }\n }\n matrix.match = match;\n // save sequence lengths for each coordinate\n for (x = 1; x < len1 + 1; x++) {\n for (y = 1; y < len2 + 1; y++) {\n if (match(array1, array2, x - 1, y - 1, context)) {\n matrix[x][y] = matrix[x - 1][y - 1] + 1;\n }\n else {\n matrix[x][y] = Math.max(matrix[x - 1][y], matrix[x][y - 1]);\n }\n }\n }\n return matrix;\n};\nconst backtrack = function (matrix, array1, array2, context) {\n let index1 = array1.length;\n let index2 = array2.length;\n const subsequence = {\n sequence: [],\n indices1: [],\n indices2: [],\n };\n while (index1 !== 0 && index2 !== 0) {\n const sameLetter = matrix.match(array1, array2, index1 - 1, index2 - 1, context);\n if (sameLetter) {\n subsequence.sequence.unshift(array1[index1 - 1]);\n subsequence.indices1.unshift(index1 - 1);\n subsequence.indices2.unshift(index2 - 1);\n --index1;\n --index2;\n }\n else {\n const valueAtMatrixAbove = matrix[index1][index2 - 1];\n const valueAtMatrixLeft = matrix[index1 - 1][index2];\n if (valueAtMatrixAbove > valueAtMatrixLeft) {\n --index2;\n }\n else {\n --index1;\n }\n }\n }\n return subsequence;\n};\nconst get = function (array1, array2, match, context) {\n const innerContext = context || {};\n const matrix = lengthMatrix(array1, array2, match || defaultMatch, innerContext);\n return backtrack(matrix, array1, array2, innerContext);\n};\nexport default {\n get,\n};\n","import DiffContext from '../contexts/diff.js';\nimport PatchContext from '../contexts/patch.js';\nimport ReverseContext from '../contexts/reverse.js';\nimport lcs from './lcs.js';\nconst ARRAY_MOVE = 3;\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n for (let index1 = 0; index1 < len1; index1++) {\n const val1 = array1[index1];\n for (let index2 = 0; index2 < len2; index2++) {\n const val2 = array2[index2];\n if (index1 !== index2 && val1 === val2) {\n return true;\n }\n }\n }\n}\nfunction matchItems(array1, array2, index1, index2, context) {\n const value1 = array1[index1];\n const value2 = array2[index2];\n if (value1 === value2) {\n return true;\n }\n if (typeof value1 !== 'object' || typeof value2 !== 'object') {\n return false;\n }\n const objectHash = context.objectHash;\n if (!objectHash) {\n // no way to match objects was provided, try match by position\n return context.matchByPosition && index1 === index2;\n }\n context.hashCache1 = context.hashCache1 || [];\n let hash1 = context.hashCache1[index1];\n if (typeof hash1 === 'undefined') {\n context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n }\n if (typeof hash1 === 'undefined') {\n return false;\n }\n context.hashCache2 = context.hashCache2 || [];\n let hash2 = context.hashCache2[index2];\n if (typeof hash2 === 'undefined') {\n context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n }\n if (typeof hash2 === 'undefined') {\n return false;\n }\n return hash1 === hash2;\n}\nexport const diffFilter = function arraysDiffFilter(context) {\n if (!context.leftIsArray) {\n return;\n }\n const matchContext = {\n objectHash: context.options && context.options.objectHash,\n matchByPosition: context.options && context.options.matchByPosition,\n };\n let commonHead = 0;\n let commonTail = 0;\n let index;\n let index1;\n let index2;\n const array1 = context.left;\n const array2 = context.right;\n const len1 = array1.length;\n const len2 = array2.length;\n let child;\n if (len1 > 0 &&\n len2 > 0 &&\n !matchContext.objectHash &&\n typeof matchContext.matchByPosition !== 'boolean') {\n matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n }\n // separate common head\n while (commonHead < len1 &&\n commonHead < len2 &&\n matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n index = commonHead;\n child = new DiffContext(array1[index], array2[index]);\n context.push(child, index);\n commonHead++;\n }\n // separate common tail\n while (commonTail + commonHead < len1 &&\n commonTail + commonHead < len2 &&\n matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n index1 = len1 - 1 - commonTail;\n index2 = len2 - 1 - commonTail;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n commonTail++;\n }\n let result;\n if (commonHead + commonTail === len1) {\n if (len1 === len2) {\n // arrays are identical\n context.setResult(undefined).exit();\n return;\n }\n // trivial case, a block (1 or more consecutive items) was added\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len2 - commonTail; index++) {\n result[index] = [array2[index]];\n }\n context.setResult(result).exit();\n return;\n }\n if (commonHead + commonTail === len2) {\n // trivial case, a block (1 or more consecutive items) was removed\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n result[`_${index}`] = [array1[index], 0, 0];\n }\n context.setResult(result).exit();\n return;\n }\n // reset hash cache\n delete matchContext.hashCache1;\n delete matchContext.hashCache2;\n // diff is not trivial, find the LCS (Longest Common Subsequence)\n const trimmed1 = array1.slice(commonHead, len1 - commonTail);\n const trimmed2 = array2.slice(commonHead, len2 - commonTail);\n const seq = lcs.get(trimmed1, trimmed2, matchItems, matchContext);\n const removedItems = [];\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n if (seq.indices1.indexOf(index - commonHead) < 0) {\n // removed\n result[`_${index}`] = [array1[index], 0, 0];\n removedItems.push(index);\n }\n }\n let detectMove = true;\n if (context.options &&\n context.options.arrays &&\n context.options.arrays.detectMove === false) {\n detectMove = false;\n }\n let includeValueOnMove = false;\n if (context.options &&\n context.options.arrays &&\n context.options.arrays.includeValueOnMove) {\n includeValueOnMove = true;\n }\n const removedItemsLength = removedItems.length;\n for (index = commonHead; index < len2 - commonTail; index++) {\n const indexOnArray2 = seq.indices2.indexOf(index - commonHead);\n if (indexOnArray2 < 0) {\n // added, try to match with a removed item and register as position move\n let isMove = false;\n if (detectMove && removedItemsLength > 0) {\n for (let removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n index1 = removedItems[removeItemIndex1];\n if (matchItems(trimmed1, trimmed2, index1 - commonHead, index - commonHead, matchContext)) {\n // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n result[`_${index1}`].splice(1, 2, index, ARRAY_MOVE);\n if (!includeValueOnMove) {\n // don't include moved value on diff, to save bytes\n result[`_${index1}`][0] = '';\n }\n index2 = index;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n removedItems.splice(removeItemIndex1, 1);\n isMove = true;\n break;\n }\n }\n }\n if (!isMove) {\n // added\n result[index] = [array2[index]];\n }\n }\n else {\n // match, do inner diff\n index1 = seq.indices1[indexOnArray2] + commonHead;\n index2 = seq.indices2[indexOnArray2] + commonHead;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n }\n }\n context.setResult(result).exit();\n};\ndiffFilter.filterName = 'arrays';\nconst compare = {\n numerically(a, b) {\n return a - b;\n },\n numericallyBy(name) {\n return (a, b) => a[name] - b[name];\n },\n};\nexport const patchFilter = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t !== 'a') {\n return;\n }\n let index;\n let index1;\n const delta = nestedDelta;\n const array = context.left;\n // first, separate removals, insertions and modifications\n let toRemove = [];\n let toInsert = [];\n const toModify = [];\n for (index in delta) {\n if (index !== '_t') {\n if (index[0] === '_') {\n const removedOrMovedIndex = index;\n // removed item from original array\n if (delta[removedOrMovedIndex][2] === 0 ||\n delta[removedOrMovedIndex][2] === ARRAY_MOVE) {\n toRemove.push(parseInt(index.slice(1), 10));\n }\n else {\n throw new Error('only removal or move can be applied at original array indices,' +\n ` invalid diff type: ${delta[removedOrMovedIndex][2]}`);\n }\n }\n else {\n const numberIndex = index;\n if (delta[numberIndex].length === 1) {\n // added item at new array\n toInsert.push({\n index: parseInt(numberIndex, 10),\n value: delta[numberIndex][0],\n });\n }\n else {\n // modified item at new array\n toModify.push({\n index: parseInt(numberIndex, 10),\n delta: delta[numberIndex],\n });\n }\n }\n }\n }\n // remove items, in reverse order to avoid sawing our own floor\n toRemove = toRemove.sort(compare.numerically);\n for (index = toRemove.length - 1; index >= 0; index--) {\n index1 = toRemove[index];\n const indexDiff = delta[`_${index1}`];\n const removedValue = array.splice(index1, 1)[0];\n if (indexDiff[2] === ARRAY_MOVE) {\n // reinsert later\n toInsert.push({\n index: indexDiff[1],\n value: removedValue,\n });\n }\n }\n // insert items, in reverse order to avoid moving our own floor\n toInsert = toInsert.sort(compare.numericallyBy('index'));\n const toInsertLength = toInsert.length;\n for (index = 0; index < toInsertLength; index++) {\n const insertion = toInsert[index];\n array.splice(insertion.index, 0, insertion.value);\n }\n // apply modifications\n const toModifyLength = toModify.length;\n let child;\n if (toModifyLength > 0) {\n for (index = 0; index < toModifyLength; index++) {\n const modification = toModify[index];\n child = new PatchContext(array[modification.index], modification.delta);\n context.push(child, modification.index);\n }\n }\n if (!context.children) {\n context.setResult(array).exit();\n return;\n }\n context.exit();\n};\npatchFilter.filterName = 'arrays';\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t !== 'a') {\n return;\n }\n const array = context.left;\n const length = context.children.length;\n let child;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const arrayIndex = child.childName;\n array[arrayIndex] = child.result;\n }\n context.setResult(array).exit();\n};\ncollectChildrenPatchFilter.filterName = 'arraysCollectChildren';\nexport const reverseFilter = function arraysReverseFilter(context) {\n if (!context.nested) {\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] === ARRAY_MOVE) {\n const arrayMoveDelta = nonNestedDelta;\n context.newName = `_${arrayMoveDelta[1]}`;\n context\n .setResult([\n arrayMoveDelta[0],\n parseInt(context.childName.substring(1), 10),\n ARRAY_MOVE,\n ])\n .exit();\n }\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t !== 'a') {\n return;\n }\n const arrayDelta = nestedDelta;\n let name;\n let child;\n for (name in arrayDelta) {\n if (name === '_t') {\n continue;\n }\n child = new ReverseContext(arrayDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter.filterName = 'arrays';\nconst reverseArrayDeltaIndex = (delta, index, itemDelta) => {\n if (typeof index === 'string' && index[0] === '_') {\n return parseInt(index.substring(1), 10);\n }\n else if (Array.isArray(itemDelta) && itemDelta[2] === 0) {\n return `_${index}`;\n }\n let reverseIndex = +index;\n for (const deltaIndex in delta) {\n const deltaItem = delta[deltaIndex];\n if (Array.isArray(deltaItem)) {\n if (deltaItem[2] === ARRAY_MOVE) {\n const moveFromIndex = parseInt(deltaIndex.substring(1), 10);\n const moveToIndex = deltaItem[1];\n if (moveToIndex === +index) {\n return moveFromIndex;\n }\n if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n reverseIndex++;\n }\n else if (moveFromIndex >= reverseIndex &&\n moveToIndex < reverseIndex) {\n reverseIndex--;\n }\n }\n else if (deltaItem[2] === 0) {\n const deleteIndex = parseInt(deltaIndex.substring(1), 10);\n if (deleteIndex <= reverseIndex) {\n reverseIndex++;\n }\n }\n else if (deltaItem.length === 1 &&\n parseInt(deltaIndex, 10) <= reverseIndex) {\n reverseIndex--;\n }\n }\n }\n return reverseIndex;\n};\nexport const collectChildrenReverseFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t !== 'a') {\n return;\n }\n const arrayDelta = deltaWithChildren;\n const length = context.children.length;\n let child;\n const delta = {\n _t: 'a',\n };\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n let name = child.newName;\n if (typeof name === 'undefined') {\n name = reverseArrayDeltaIndex(arrayDelta, child.childName, child.result);\n }\n if (delta[name] !== child.result) {\n // There's no way to type this well.\n delta[name] = child.result;\n }\n }\n context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'arraysCollectChildren';\n","export const diffFilter = function datesDiffFilter(context) {\n if (context.left instanceof Date) {\n if (context.right instanceof Date) {\n if (context.left.getTime() !== context.right.getTime()) {\n context.setResult([context.left, context.right]);\n }\n else {\n context.setResult(undefined);\n }\n }\n else {\n context.setResult([context.left, context.right]);\n }\n context.exit();\n }\n else if (context.right instanceof Date) {\n context.setResult([context.left, context.right]).exit();\n }\n};\ndiffFilter.filterName = 'dates';\n","const TEXT_DIFF = 2;\nconst DEFAULT_MIN_LENGTH = 60;\nlet cachedDiffPatch = null;\nfunction getDiffMatchPatch(options, required) {\n var _a;\n if (!cachedDiffPatch) {\n let instance;\n if ((_a = options === null || options === void 0 ? void 0 : options.textDiff) === null || _a === void 0 ? void 0 : _a.diffMatchPatch) {\n instance = new options.textDiff.diffMatchPatch();\n }\n else {\n if (!required) {\n return null;\n }\n const error = new Error('The diff-match-patch library was not provided. Pass the library in through the options or use the `jsondiffpatch/with-text-diffs` entry-point.');\n // eslint-disable-next-line camelcase\n error.diff_match_patch_not_found = true;\n throw error;\n }\n cachedDiffPatch = {\n diff: function (txt1, txt2) {\n return instance.patch_toText(instance.patch_make(txt1, txt2));\n },\n patch: function (txt1, patch) {\n const results = instance.patch_apply(instance.patch_fromText(patch), txt1);\n for (let i = 0; i < results[1].length; i++) {\n if (!results[1][i]) {\n const error = new Error('text patch failed');\n error.textPatchFailed = true;\n }\n }\n return results[0];\n },\n };\n }\n return cachedDiffPatch;\n}\nexport const diffFilter = function textsDiffFilter(context) {\n if (context.leftType !== 'string') {\n return;\n }\n const left = context.left;\n const right = context.right;\n const minLength = (context.options &&\n context.options.textDiff &&\n context.options.textDiff.minLength) ||\n DEFAULT_MIN_LENGTH;\n if (left.length < minLength || right.length < minLength) {\n context.setResult([left, right]).exit();\n return;\n }\n // large text, try to use a text-diff algorithm\n const diffMatchPatch = getDiffMatchPatch(context.options);\n if (!diffMatchPatch) {\n // diff-match-patch library not available,\n // fallback to regular string replace\n context.setResult([left, right]).exit();\n return;\n }\n const diff = diffMatchPatch.diff;\n context.setResult([diff(left, right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter.filterName = 'texts';\nexport const patchFilter = function textsPatchFilter(context) {\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] !== TEXT_DIFF) {\n return;\n }\n const textDiffDelta = nonNestedDelta;\n // text-diff, use a text-patch algorithm\n const patch = getDiffMatchPatch(context.options, true).patch;\n context.setResult(patch(context.left, textDiffDelta[0])).exit();\n};\npatchFilter.filterName = 'texts';\nconst textDeltaReverse = function (delta) {\n let i;\n let l;\n let line;\n let lineTmp;\n let header = null;\n const headerRegex = /^@@ +-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/;\n let lineHeader;\n const lines = delta.split('\\n');\n for (i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n const lineStart = line.slice(0, 1);\n if (lineStart === '@') {\n header = headerRegex.exec(line);\n lineHeader = i;\n // fix header\n lines[lineHeader] =\n '@@ -' +\n header[3] +\n ',' +\n header[4] +\n ' +' +\n header[1] +\n ',' +\n header[2] +\n ' @@';\n }\n else if (lineStart === '+') {\n lines[i] = '-' + lines[i].slice(1);\n if (lines[i - 1].slice(0, 1) === '+') {\n // swap lines to keep default order (-+)\n lineTmp = lines[i];\n lines[i] = lines[i - 1];\n lines[i - 1] = lineTmp;\n }\n }\n else if (lineStart === '-') {\n lines[i] = '+' + lines[i].slice(1);\n }\n }\n return lines.join('\\n');\n};\nexport const reverseFilter = function textsReverseFilter(context) {\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] !== TEXT_DIFF) {\n return;\n }\n const textDiffDelta = nonNestedDelta;\n // text-diff, use a text-diff algorithm\n context\n .setResult([textDeltaReverse(textDiffDelta[0]), 0, TEXT_DIFF])\n .exit();\n};\nreverseFilter.filterName = 'texts';\n","import Processor from './processor.js';\nimport Pipe from './pipe.js';\nimport DiffContext from './contexts/diff.js';\nimport PatchContext from './contexts/patch.js';\nimport ReverseContext from './contexts/reverse.js';\nimport clone from './clone.js';\nimport * as trivial from './filters/trivial.js';\nimport * as nested from './filters/nested.js';\nimport * as arrays from './filters/arrays.js';\nimport * as dates from './filters/dates.js';\nimport * as texts from './filters/texts.js';\nclass DiffPatcher {\n constructor(options) {\n this.processor = new Processor(options);\n this.processor.pipe(new Pipe('diff')\n .append(nested.collectChildrenDiffFilter, trivial.diffFilter, dates.diffFilter, texts.diffFilter, nested.objectsDiffFilter, arrays.diffFilter)\n .shouldHaveResult());\n this.processor.pipe(new Pipe('patch')\n .append(nested.collectChildrenPatchFilter, arrays.collectChildrenPatchFilter, trivial.patchFilter, texts.patchFilter, nested.patchFilter, arrays.patchFilter)\n .shouldHaveResult());\n this.processor.pipe(new Pipe('reverse')\n .append(nested.collectChildrenReverseFilter, arrays.collectChildrenReverseFilter, trivial.reverseFilter, texts.reverseFilter, nested.reverseFilter, arrays.reverseFilter)\n .shouldHaveResult());\n }\n options(options) {\n return this.processor.options(options);\n }\n diff(left, right) {\n return this.processor.process(new DiffContext(left, right));\n }\n patch(left, delta) {\n return this.processor.process(new PatchContext(left, delta));\n }\n reverse(delta) {\n return this.processor.process(new ReverseContext(delta));\n }\n unpatch(right, delta) {\n return this.patch(right, this.reverse(delta));\n }\n clone(value) {\n return clone(value);\n }\n}\nexport default DiffPatcher;\n","// use as 2nd parameter for JSON.parse to revive Date instances\nexport default function dateReviver(key, value) {\n let parts;\n if (typeof value === 'string') {\n parts =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+-])(\\d{2}):(\\d{2}))$/.exec(value);\n if (parts) {\n return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n }\n }\n return value;\n}\n","import DiffPatcher from './diffpatcher.js';\nimport dateReviver from './date-reviver.js';\nexport { DiffPatcher, dateReviver };\nexport function create(options) {\n return new DiffPatcher(options);\n}\nlet defaultInstance;\nexport function diff(left, right) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.diff(left, right);\n}\nexport function patch(left, delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.patch(left, delta);\n}\nexport function unpatch(right, delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.unpatch(right, delta);\n}\nexport function reverse(delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.reverse(delta);\n}\nexport function clone(value) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.clone(value);\n}\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","import type { ComfyApp } from './app'\nimport { api } from './api'\nimport { LGraphCanvas, LiteGraph } from '@comfyorg/litegraph'\nimport { ComfyWorkflow, useWorkflowStore } from '@/stores/workflowStore'\nimport { LGraphNode } from '@comfyorg/litegraph'\nimport type { ComfyWorkflowJSON } from '@/types/comfyWorkflow'\nimport type { ExecutedWsMessage } from '@/types/apiTypes'\nimport { useExecutionStore } from '@/stores/executionStore'\nimport _ from 'lodash'\nimport * as jsondiffpatch from 'jsondiffpatch'\nimport log from 'loglevel'\n\nfunction clone(obj: T): T {\n return JSON.parse(JSON.stringify(obj))\n}\n\nconst logger = log.getLogger('ChangeTracker')\n// Change to debug for more verbose logging\nlogger.setLevel('info')\n\nexport class ChangeTracker {\n static MAX_HISTORY = 50\n /**\n * The active state of the workflow.\n */\n activeState: ComfyWorkflowJSON\n undoQueue: ComfyWorkflowJSON[] = []\n redoQueue: ComfyWorkflowJSON[] = []\n changeCount: number = 0\n /**\n * Whether the redo/undo restoring is in progress.\n */\n private restoringState: boolean = false\n\n ds?: { scale: number; offset: [number, number] }\n nodeOutputs?: Record\n\n static app?: ComfyApp\n get app(): ComfyApp {\n return ChangeTracker.app!\n }\n\n constructor(\n /**\n * The workflow that this change tracker is tracking\n */\n public workflow: ComfyWorkflow,\n /**\n * The initial state of the workflow\n */\n public initialState: ComfyWorkflowJSON\n ) {\n this.activeState = initialState\n }\n\n /**\n * Save the current state as the initial state.\n */\n reset(state?: ComfyWorkflowJSON) {\n // Do not reset the state if we are restoring.\n if (this.restoringState) return\n\n logger.debug('Reset State')\n if (state) this.activeState = clone(state)\n this.initialState = clone(this.activeState)\n }\n\n store() {\n this.ds = {\n scale: this.app.canvas.ds.scale,\n offset: [this.app.canvas.ds.offset[0], this.app.canvas.ds.offset[1]]\n }\n }\n\n restore() {\n if (this.ds) {\n this.app.canvas.ds.scale = this.ds.scale\n this.app.canvas.ds.offset = this.ds.offset\n }\n if (this.nodeOutputs) {\n this.app.nodeOutputs = this.nodeOutputs\n }\n }\n\n updateModified() {\n api.dispatchCustomEvent('graphChanged', this.activeState)\n\n // Get the workflow from the store as ChangeTracker is raw object, i.e.\n // `this.workflow` is not reactive.\n const workflow = useWorkflowStore().getWorkflowByPath(this.workflow.path)\n if (workflow) {\n workflow.isModified = !ChangeTracker.graphEqual(\n this.initialState,\n this.activeState\n )\n if (logger.getLevel() <= logger.levels.DEBUG && workflow.isModified) {\n const diff = ChangeTracker.graphDiff(\n this.initialState,\n this.activeState\n )\n logger.debug('Graph diff:', diff)\n }\n }\n }\n\n checkState() {\n if (!this.app.graph || this.changeCount) return\n // @ts-expect-error zod types issue. Will be fixed after we enable ts-strict\n const currentState = clone(this.app.graph.serialize()) as ComfyWorkflowJSON\n if (!this.activeState) {\n this.activeState = currentState\n return\n }\n if (!ChangeTracker.graphEqual(this.activeState, currentState)) {\n this.undoQueue.push(this.activeState)\n if (this.undoQueue.length > ChangeTracker.MAX_HISTORY) {\n this.undoQueue.shift()\n }\n logger.debug('Diff detected. Undo queue length:', this.undoQueue.length)\n\n this.activeState = currentState\n this.redoQueue.length = 0\n this.updateModified()\n }\n }\n\n async updateState(source: ComfyWorkflowJSON[], target: ComfyWorkflowJSON[]) {\n const prevState = source.pop()\n if (prevState) {\n target.push(this.activeState)\n this.restoringState = true\n try {\n await this.app.loadGraphData(prevState, false, false, this.workflow, {\n showMissingModelsDialog: false,\n showMissingNodesDialog: false\n })\n this.activeState = prevState\n this.updateModified()\n } finally {\n this.restoringState = false\n }\n }\n }\n\n async undo() {\n await this.updateState(this.undoQueue, this.redoQueue)\n logger.debug(\n 'Undo. Undo queue length:',\n this.undoQueue.length,\n 'Redo queue length:',\n this.redoQueue.length\n )\n }\n\n async redo() {\n await this.updateState(this.redoQueue, this.undoQueue)\n logger.debug(\n 'Redo. Undo queue length:',\n this.undoQueue.length,\n 'Redo queue length:',\n this.redoQueue.length\n )\n }\n\n async undoRedo(e: KeyboardEvent) {\n if ((e.ctrlKey || e.metaKey) && !e.altKey) {\n const key = e.key.toUpperCase()\n // Redo: Ctrl + Y, or Ctrl + Shift + Z\n if ((key === 'Y' && !e.shiftKey) || (key == 'Z' && e.shiftKey)) {\n await this.redo()\n return true\n } else if (key === 'Z' && !e.shiftKey) {\n await this.undo()\n return true\n }\n }\n }\n\n beforeChange() {\n this.changeCount++\n }\n\n afterChange() {\n if (!--this.changeCount) {\n this.checkState()\n }\n }\n\n static init(app: ComfyApp) {\n const getCurrentChangeTracker = () =>\n useWorkflowStore().activeWorkflow?.changeTracker\n const checkState = () => getCurrentChangeTracker()?.checkState()\n\n ChangeTracker.app = app\n\n let keyIgnored = false\n window.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n // Do not trigger on repeat events (Holding down a key)\n // This can happen when user is holding down \"Space\" to pan the canvas.\n if (e.repeat) return\n\n const activeEl = document.activeElement\n requestAnimationFrame(async () => {\n let bindInputEl: Element | null = null\n // If we are auto queue in change mode then we do want to trigger on inputs\n if (!app.ui.autoQueueEnabled || app.ui.autoQueueMode === 'instant') {\n if (\n activeEl?.tagName === 'INPUT' ||\n (activeEl && 'type' in activeEl && activeEl.type === 'textarea')\n ) {\n // Ignore events on inputs, they have their native history\n return\n }\n bindInputEl = activeEl\n }\n\n keyIgnored =\n e.key === 'Control' ||\n e.key === 'Shift' ||\n e.key === 'Alt' ||\n e.key === 'Meta'\n if (keyIgnored) return\n\n const changeTracker = getCurrentChangeTracker()\n if (!changeTracker) return\n\n // Check if this is a ctrl+z ctrl+y\n if (await changeTracker.undoRedo(e)) return\n\n // If our active element is some type of input then handle changes after they're done\n if (ChangeTracker.bindInput(app, bindInputEl)) return\n logger.debug('checkState on keydown')\n changeTracker.checkState()\n })\n },\n true\n )\n\n window.addEventListener('keyup', (e) => {\n if (keyIgnored) {\n keyIgnored = false\n logger.debug('checkState on keyup')\n checkState()\n }\n })\n\n // Handle clicking DOM elements (e.g. widgets)\n window.addEventListener('mouseup', () => {\n logger.debug('checkState on mouseup')\n checkState()\n })\n\n // Handle prompt queue event for dynamic widget changes\n api.addEventListener('promptQueued', () => {\n logger.debug('checkState on promptQueued')\n checkState()\n })\n\n api.addEventListener('graphCleared', () => {\n logger.debug('checkState on graphCleared')\n checkState()\n })\n\n // Handle litegraph clicks\n const processMouseUp = LGraphCanvas.prototype.processMouseUp\n LGraphCanvas.prototype.processMouseUp = function (e) {\n const v = processMouseUp.apply(this, [e])\n logger.debug('checkState on processMouseUp')\n checkState()\n return v\n }\n const processMouseDown = LGraphCanvas.prototype.processMouseDown\n LGraphCanvas.prototype.processMouseDown = function (e) {\n const v = processMouseDown.apply(this, [e])\n logger.debug('checkState on processMouseDown')\n checkState()\n return v\n }\n\n // Handle litegraph dialog popup for number/string widgets\n const prompt = LGraphCanvas.prototype.prompt\n LGraphCanvas.prototype.prompt = function (\n title: string,\n value: any,\n callback: (v: any) => void,\n event: any\n ) {\n const extendedCallback = (v: any) => {\n callback(v)\n checkState()\n }\n logger.debug('checkState on prompt')\n return prompt.apply(this, [title, value, extendedCallback, event])\n }\n\n // Handle litegraph context menu for COMBO widgets\n const close = LiteGraph.ContextMenu.prototype.close\n LiteGraph.ContextMenu.prototype.close = function (e: MouseEvent) {\n const v = close.apply(this, [e])\n logger.debug('checkState on contextMenuClose')\n checkState()\n return v\n }\n\n // Detects nodes being added via the node search dialog\n const onNodeAdded = LiteGraph.LGraph.prototype.onNodeAdded\n LiteGraph.LGraph.prototype.onNodeAdded = function (node: LGraphNode) {\n const v = onNodeAdded?.apply(this, [node])\n if (!app?.configuringGraph) {\n logger.debug('checkState on onNodeAdded')\n checkState()\n }\n return v\n }\n\n // Handle multiple commands as a single transaction\n document.addEventListener('litegraph:canvas', (e: Event) => {\n const detail = (e as CustomEvent).detail\n if (detail.subType === 'before-change') {\n getCurrentChangeTracker()?.beforeChange()\n } else if (detail.subType === 'after-change') {\n getCurrentChangeTracker()?.afterChange()\n }\n })\n\n // Store node outputs\n api.addEventListener('executed', (e: CustomEvent) => {\n const detail = e.detail\n const workflow =\n useExecutionStore().queuedPrompts[detail.prompt_id]?.workflow\n const changeTracker = workflow?.changeTracker\n if (!changeTracker) return\n changeTracker.nodeOutputs ??= {}\n const nodeOutputs = changeTracker.nodeOutputs\n const output = nodeOutputs[detail.node]\n if (detail.merge && output) {\n for (const k in detail.output ?? {}) {\n const v = output[k]\n if (v instanceof Array) {\n output[k] = v.concat(detail.output[k])\n } else {\n output[k] = detail.output[k]\n }\n }\n } else {\n nodeOutputs[detail.node] = detail.output\n }\n })\n }\n\n static bindInput(app: ComfyApp, activeEl: Element | null): boolean {\n if (\n !activeEl ||\n activeEl.tagName === 'CANVAS' ||\n activeEl.tagName === 'BODY'\n ) {\n return false\n }\n\n for (const evt of ['change', 'input', 'blur']) {\n const htmlElement = activeEl as HTMLElement\n if (`on${evt}` in htmlElement) {\n const listener = () => {\n useWorkflowStore().activeWorkflow?.changeTracker?.checkState?.()\n htmlElement.removeEventListener(evt, listener)\n }\n htmlElement.addEventListener(evt, listener)\n return true\n }\n }\n return false\n }\n\n static graphEqual(a: ComfyWorkflowJSON, b: ComfyWorkflowJSON) {\n if (a === b) return true\n\n if (typeof a == 'object' && a && typeof b == 'object' && b) {\n // Compare nodes ignoring order\n if (\n !_.isEqualWith(a.nodes, b.nodes, (arrA, arrB) => {\n if (Array.isArray(arrA) && Array.isArray(arrB)) {\n return _.isEqual(new Set(arrA), new Set(arrB))\n }\n })\n ) {\n return false\n }\n\n // Compare extra properties ignoring ds\n if (\n !_.isEqual(_.omit(a.extra ?? {}, ['ds']), _.omit(b.extra ?? {}, ['ds']))\n )\n return false\n\n // Compare other properties normally\n for (const key of ['links', 'reroutes', 'groups']) {\n if (!_.isEqual(a[key], b[key])) {\n return false\n }\n }\n\n return true\n }\n\n return false\n }\n\n private static graphDiff(a: ComfyWorkflowJSON, b: ComfyWorkflowJSON) {\n function sortGraphNodes(graph: ComfyWorkflowJSON) {\n return {\n links: graph.links,\n groups: graph.groups,\n nodes: graph.nodes.sort((a, b) => {\n if (typeof a.id === 'number' && typeof b.id === 'number') {\n return a.id - b.id\n }\n return 0\n })\n }\n }\n return jsondiffpatch.diff(sortGraphNodes(a), sortGraphNodes(b))\n }\n}\n","import { defineStore } from 'pinia'\nimport { computed, markRaw, ref } from 'vue'\nimport { api } from '@/scripts/api'\nimport { UserFile } from './userFileStore'\nimport { ChangeTracker } from '@/scripts/changeTracker'\nimport { ComfyWorkflowJSON } from '@/types/comfyWorkflow'\nimport { getPathDetails } from '@/utils/formatUtil'\nimport { defaultGraphJSON } from '@/scripts/defaultGraph'\nimport { syncEntities } from '@/utils/syncUtil'\n\nexport class ComfyWorkflow extends UserFile {\n static readonly basePath = 'workflows/'\n\n /**\n * The change tracker for the workflow. Non-reactive raw object.\n */\n changeTracker: ChangeTracker | null = null\n /**\n * Whether the workflow has been modified comparing to the initial state.\n */\n private _isModified: boolean = false\n\n /**\n * @param options The path, modified, and size of the workflow.\n * Note: path is the full path, including the 'workflows/' prefix.\n */\n constructor(options: { path: string; modified: number; size: number }) {\n super(options.path, options.modified, options.size)\n }\n\n get key() {\n return this.path.substring(ComfyWorkflow.basePath.length)\n }\n\n get activeState(): ComfyWorkflowJSON | null {\n return this.changeTracker?.activeState ?? null\n }\n\n get initialState(): ComfyWorkflowJSON | null {\n return this.changeTracker?.initialState ?? null\n }\n\n get isLoaded(): boolean {\n return this.changeTracker !== null\n }\n\n get isModified(): boolean {\n return this._isModified\n }\n\n set isModified(value: boolean) {\n this._isModified = value\n }\n\n /**\n * Load the workflow content from remote storage. Directly returns the loaded\n * workflow if the content is already loaded.\n *\n * @param force Whether to force loading the content even if it is already loaded.\n * @returns this\n */\n async load({\n force = false\n }: { force?: boolean } = {}): Promise {\n await super.load({ force })\n if (!force && this.isLoaded) return this as LoadedComfyWorkflow\n\n if (!this.originalContent) {\n throw new Error('[ASSERT] Workflow content should be loaded')\n }\n\n // Note: originalContent is populated by super.load()\n console.debug('load and start tracking of workflow', this.path)\n this.changeTracker = markRaw(\n new ChangeTracker(\n this,\n /* initialState= */ JSON.parse(this.originalContent)\n )\n )\n return this as LoadedComfyWorkflow\n }\n\n unload(): void {\n console.debug('unload workflow', this.path)\n this.changeTracker = null\n super.unload()\n }\n\n async save() {\n this.content = JSON.stringify(this.activeState)\n // Force save to ensure the content is updated in remote storage incase\n // the isModified state is screwed by changeTracker.\n const ret = await super.save({ force: true })\n this.changeTracker?.reset()\n this.isModified = false\n return ret\n }\n\n /**\n * Save the workflow as a new file.\n * @param path The path to save the workflow to. Note: with 'workflows/' prefix.\n * @returns this\n */\n async saveAs(path: string) {\n this.content = JSON.stringify(this.activeState)\n return await super.saveAs(path)\n }\n}\n\nexport interface LoadedComfyWorkflow extends ComfyWorkflow {\n isLoaded: true\n originalContent: string\n content: string\n changeTracker: ChangeTracker\n initialState: ComfyWorkflowJSON\n activeState: ComfyWorkflowJSON\n}\n\n/**\n * Exposed store interface for the workflow store.\n * Explicitly typed to avoid trigger following error:\n * error TS7056: The inferred type of this node exceeds the maximum length the\n * compiler will serialize. An explicit type annotation is needed.\n */\nexport interface WorkflowStore {\n activeWorkflow: LoadedComfyWorkflow | null\n isActive: (workflow: ComfyWorkflow) => boolean\n openWorkflows: LoadedComfyWorkflow[]\n openedWorkflowIndexShift: (shift: number) => LoadedComfyWorkflow | null\n openWorkflow: (workflow: ComfyWorkflow) => Promise\n isOpen: (workflow: ComfyWorkflow) => boolean\n isBusy: boolean\n closeWorkflow: (workflow: ComfyWorkflow) => Promise\n createTemporary: (\n path?: string,\n workflowData?: ComfyWorkflowJSON\n ) => ComfyWorkflow\n renameWorkflow: (workflow: ComfyWorkflow, newPath: string) => Promise\n deleteWorkflow: (workflow: ComfyWorkflow) => Promise\n saveWorkflow: (workflow: ComfyWorkflow) => Promise\n\n workflows: ComfyWorkflow[]\n bookmarkedWorkflows: ComfyWorkflow[]\n persistedWorkflows: ComfyWorkflow[]\n modifiedWorkflows: ComfyWorkflow[]\n getWorkflowByPath: (path: string) => ComfyWorkflow | null\n syncWorkflows: (dir?: string) => Promise\n}\n\nexport const useWorkflowStore = defineStore('workflow', () => {\n /**\n * Detach the workflow from the store. lightweight helper function.\n * @param workflow The workflow to detach.\n * @returns The index of the workflow in the openWorkflowPaths array, or -1 if the workflow was not open.\n */\n const detachWorkflow = (workflow: ComfyWorkflow) => {\n delete workflowLookup.value[workflow.path]\n const index = openWorkflowPaths.value.indexOf(workflow.path)\n if (index !== -1) {\n openWorkflowPaths.value = openWorkflowPaths.value.filter(\n (path) => path !== workflow.path\n )\n }\n return index\n }\n\n /**\n * Attach the workflow to the store. lightweight helper function.\n * @param workflow The workflow to attach.\n * @param openIndex The index to open the workflow at.\n */\n const attachWorkflow = (workflow: ComfyWorkflow, openIndex: number = -1) => {\n workflowLookup.value[workflow.path] = workflow\n\n if (openIndex !== -1) {\n openWorkflowPaths.value.splice(openIndex, 0, workflow.path)\n }\n }\n\n /**\n * The active workflow currently being edited.\n */\n const activeWorkflow = ref(null)\n const isActive = (workflow: ComfyWorkflow) =>\n activeWorkflow.value?.path === workflow.path\n /**\n * All workflows.\n */\n const workflowLookup = ref>({})\n const workflows = computed(() =>\n Object.values(workflowLookup.value)\n )\n const getWorkflowByPath = (path: string): ComfyWorkflow | null =>\n workflowLookup.value[path] ?? null\n\n /**\n * The paths of the open workflows. It is setup as a ref to allow user\n * to reorder the workflows opened.\n */\n const openWorkflowPaths = ref([])\n const openWorkflowPathSet = computed(() => new Set(openWorkflowPaths.value))\n const openWorkflows = computed(() =>\n openWorkflowPaths.value.map((path) => workflowLookup.value[path])\n )\n const isOpen = (workflow: ComfyWorkflow) =>\n openWorkflowPathSet.value.has(workflow.path)\n\n /**\n * Set the workflow as the active workflow.\n * @param workflow The workflow to open.\n */\n const openWorkflow = async (\n workflow: ComfyWorkflow\n ): Promise => {\n if (isActive(workflow)) return workflow as LoadedComfyWorkflow\n\n if (!openWorkflowPaths.value.includes(workflow.path)) {\n openWorkflowPaths.value.push(workflow.path)\n }\n const loadedWorkflow = await workflow.load()\n activeWorkflow.value = loadedWorkflow\n console.debug('[workflowStore] open workflow', workflow.path)\n return loadedWorkflow\n }\n\n const getUnconflictedPath = (basePath: string): string => {\n const { directory, filename, suffix } = getPathDetails(basePath)\n let counter = 2\n let newPath = basePath\n while (workflowLookup.value[newPath]) {\n newPath = `${directory}/${filename} (${counter}).${suffix}`\n counter++\n }\n return newPath\n }\n\n const createTemporary = (path?: string, workflowData?: ComfyWorkflowJSON) => {\n const fullPath = getUnconflictedPath(\n ComfyWorkflow.basePath + (path ?? 'Unsaved Workflow.json')\n )\n const workflow = new ComfyWorkflow({\n path: fullPath,\n modified: Date.now(),\n size: -1\n })\n\n workflow.originalContent = workflow.content = workflowData\n ? JSON.stringify(workflowData)\n : defaultGraphJSON\n\n workflowLookup.value[workflow.path] = workflow\n return workflow\n }\n\n const closeWorkflow = async (workflow: ComfyWorkflow) => {\n openWorkflowPaths.value = openWorkflowPaths.value.filter(\n (path) => path !== workflow.path\n )\n if (workflow.isTemporary) {\n delete workflowLookup.value[workflow.path]\n } else {\n workflow.unload()\n }\n console.debug('[workflowStore] close workflow', workflow.path)\n }\n\n /**\n * Get the workflow at the given index shift from the active workflow.\n * @param shift The shift to the next workflow. Positive for next, negative for previous.\n * @returns The next workflow or null if the shift is out of bounds.\n */\n const openedWorkflowIndexShift = (shift: number): ComfyWorkflow | null => {\n const index = openWorkflowPaths.value.indexOf(\n activeWorkflow.value?.path ?? ''\n )\n\n if (index !== -1) {\n const length = openWorkflows.value.length\n const nextIndex = (index + shift + length) % length\n const nextWorkflow = openWorkflows.value[nextIndex]\n return nextWorkflow ?? null\n }\n return null\n }\n\n const persistedWorkflows = computed(() =>\n Array.from(workflows.value).filter((workflow) => workflow.isPersisted)\n )\n const syncWorkflows = async (dir: string = '') => {\n await syncEntities(\n dir ? 'workflows/' + dir : 'workflows',\n workflowLookup.value,\n (file) =>\n new ComfyWorkflow({\n path: file.path,\n modified: file.modified,\n size: file.size\n }),\n (existingWorkflow, file) => {\n existingWorkflow.lastModified = file.modified\n existingWorkflow.size = file.size\n existingWorkflow.unload()\n },\n /* exclude */ (workflow) => workflow.isTemporary\n )\n }\n\n const bookmarkStore = useWorkflowBookmarkStore()\n const bookmarkedWorkflows = computed(() =>\n workflows.value.filter((workflow) =>\n bookmarkStore.isBookmarked(workflow.path)\n )\n )\n const modifiedWorkflows = computed(() =>\n workflows.value.filter((workflow) => workflow.isModified)\n )\n\n /** A filesystem operation is currently in progress (e.g. save, rename, delete) */\n const isBusy = ref(false)\n\n const renameWorkflow = async (workflow: ComfyWorkflow, newPath: string) => {\n isBusy.value = true\n try {\n // Capture all needed values upfront\n const oldPath = workflow.path\n const wasBookmarked = bookmarkStore.isBookmarked(oldPath)\n\n const openIndex = detachWorkflow(workflow)\n // Perform the actual rename operation first\n try {\n await workflow.rename(newPath)\n } finally {\n attachWorkflow(workflow, openIndex)\n }\n\n // Update bookmarks\n if (wasBookmarked) {\n bookmarkStore.setBookmarked(oldPath, false)\n bookmarkStore.setBookmarked(newPath, true)\n }\n } finally {\n isBusy.value = false\n }\n }\n\n const deleteWorkflow = async (workflow: ComfyWorkflow) => {\n isBusy.value = true\n try {\n await workflow.delete()\n if (bookmarkStore.isBookmarked(workflow.path)) {\n bookmarkStore.setBookmarked(workflow.path, false)\n }\n delete workflowLookup.value[workflow.path]\n } finally {\n isBusy.value = false\n }\n }\n\n /**\n * Save a workflow.\n * @param workflow The workflow to save.\n */\n const saveWorkflow = async (workflow: ComfyWorkflow) => {\n isBusy.value = true\n try {\n // Detach the workflow and re-attach to force refresh the tree objects.\n const openIndex = detachWorkflow(workflow)\n try {\n await workflow.save()\n } finally {\n attachWorkflow(workflow, openIndex)\n }\n } finally {\n isBusy.value = false\n }\n }\n\n return {\n activeWorkflow,\n isActive,\n openWorkflows,\n openedWorkflowIndexShift,\n openWorkflow,\n isOpen,\n isBusy,\n closeWorkflow,\n createTemporary,\n renameWorkflow,\n deleteWorkflow,\n saveWorkflow,\n\n workflows,\n bookmarkedWorkflows,\n persistedWorkflows,\n modifiedWorkflows,\n getWorkflowByPath,\n syncWorkflows\n }\n}) as unknown as () => WorkflowStore\n\nexport const useWorkflowBookmarkStore = defineStore('workflowBookmark', () => {\n const bookmarks = ref>(new Set())\n\n const isBookmarked = (path: string) => bookmarks.value.has(path)\n\n const loadBookmarks = async () => {\n const resp = await api.getUserData('workflows/.index.json')\n if (resp.status === 200) {\n const info = await resp.json()\n bookmarks.value = new Set(info?.favorites ?? [])\n }\n }\n\n const saveBookmarks = async () => {\n await api.storeUserData('workflows/.index.json', {\n favorites: Array.from(bookmarks.value)\n })\n }\n\n const setBookmarked = (path: string, value: boolean) => {\n if (bookmarks.value.has(path) === value) return\n if (value) {\n bookmarks.value.add(path)\n } else {\n bookmarks.value.delete(path)\n }\n saveBookmarks()\n }\n\n const toggleBookmarked = (path: string) => {\n setBookmarked(path, !bookmarks.value.has(path))\n }\n\n return {\n isBookmarked,\n loadBookmarks,\n saveBookmarks,\n setBookmarked,\n toggleBookmarked\n }\n})\n","import { downloadBlob } from '@/scripts/utils'\nimport { useSettingStore } from '@/stores/settingStore'\nimport { useWorkflowStore, ComfyWorkflow } from '@/stores/workflowStore'\nimport { showConfirmationDialog, showPromptDialog } from './dialogService'\nimport { app } from '@/scripts/app'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\nimport { LGraphCanvas } from '@comfyorg/litegraph'\nimport { toRaw } from 'vue'\nimport { ComfyWorkflowJSON } from '@/types/comfyWorkflow'\nimport { blankGraph, defaultGraph } from '@/scripts/defaultGraph'\nimport { appendJsonExt } from '@/utils/formatUtil'\nimport { t } from '@/i18n'\nimport { useToastStore } from '@/stores/toastStore'\n\nasync function getFilename(defaultName: string): Promise {\n if (useSettingStore().get('Comfy.PromptFilename')) {\n let filename = await showPromptDialog({\n title: t('workflowService.exportWorkflow'),\n message: t('workflowService.enterFilename') + ':',\n defaultValue: defaultName\n })\n if (!filename) return null\n if (!filename.toLowerCase().endsWith('.json')) {\n filename += '.json'\n }\n return filename\n }\n return defaultName\n}\n\n// TODO(huchenlei): Auto Error Handling for all methods.\nexport const workflowService = {\n /**\n * Export the current workflow as a JSON file\n * @param filename The filename to save the workflow as\n * @param promptProperty The property of the prompt to export\n */\n async exportWorkflow(\n filename: string,\n promptProperty: 'workflow' | 'output'\n ): Promise {\n const workflow = useWorkflowStore().activeWorkflow\n if (workflow?.path) {\n filename = workflow.filename\n }\n const p = await app.graphToPrompt()\n const json = JSON.stringify(p[promptProperty], null, 2)\n const blob = new Blob([json], { type: 'application/json' })\n const file = await getFilename(filename)\n if (!file) return\n downloadBlob(file, blob)\n },\n /**\n * Save a workflow as a new file\n * @param workflow The workflow to save\n */\n async saveWorkflowAs(workflow: ComfyWorkflow) {\n const newFilename = await showPromptDialog({\n title: t('workflowService.saveWorkflow'),\n message: t('workflowService.enterFilename') + ':',\n defaultValue: workflow.filename\n })\n if (!newFilename) return\n\n const newPath = workflow.directory + '/' + appendJsonExt(newFilename)\n const newKey = newPath.substring(ComfyWorkflow.basePath.length)\n const workflowStore = useWorkflowStore()\n const existingWorkflow = workflowStore.getWorkflowByPath(newPath)\n\n if (existingWorkflow && !existingWorkflow.isTemporary) {\n const res = await showConfirmationDialog({\n title: t('sideToolbar.workflowTab.confirmOverwriteTitle'),\n type: 'overwrite',\n message: t('sideToolbar.workflowTab.confirmOverwrite'),\n itemList: [newPath]\n })\n\n if (res !== true) return\n\n if (existingWorkflow.path === workflow.path) {\n await this.saveWorkflow(workflow)\n return\n }\n const deleted = await this.deleteWorkflow(existingWorkflow, true)\n if (!deleted) return\n }\n\n if (workflow.isTemporary) {\n await this.renameWorkflow(workflow, newPath)\n await workflowStore.saveWorkflow(workflow)\n } else {\n const tempWorkflow = workflowStore.createTemporary(\n newKey,\n workflow.activeState as ComfyWorkflowJSON\n )\n await this.openWorkflow(tempWorkflow)\n await workflowStore.saveWorkflow(tempWorkflow)\n }\n },\n\n /**\n * Save a workflow\n * @param workflow The workflow to save\n */\n async saveWorkflow(workflow: ComfyWorkflow) {\n if (workflow.isTemporary) {\n await this.saveWorkflowAs(workflow)\n } else {\n await useWorkflowStore().saveWorkflow(workflow)\n }\n },\n\n /**\n * Load the default workflow\n */\n async loadDefaultWorkflow() {\n await app.loadGraphData(defaultGraph)\n },\n\n /**\n * Load a blank workflow\n */\n async loadBlankWorkflow() {\n await app.loadGraphData(blankGraph)\n },\n\n /**\n * Reload the current workflow\n * This is used to refresh the node definitions update, e.g. when the locale changes.\n */\n async reloadCurrentWorkflow() {\n const workflow = useWorkflowStore().activeWorkflow\n if (workflow) {\n await this.openWorkflow(workflow, { force: true })\n }\n },\n\n /**\n * Open a workflow in the current workspace\n * @param workflow The workflow to open\n * @param options The options for opening the workflow\n */\n async openWorkflow(\n workflow: ComfyWorkflow,\n options: { force: boolean } = { force: false }\n ) {\n if (useWorkflowStore().isActive(workflow) && !options.force) return\n\n const loadFromRemote = !workflow.isLoaded\n if (loadFromRemote) {\n await workflow.load()\n }\n\n await app.loadGraphData(\n toRaw(workflow.activeState) as ComfyWorkflowJSON,\n /* clean=*/ true,\n /* restore_view=*/ true,\n workflow,\n {\n showMissingModelsDialog: loadFromRemote,\n showMissingNodesDialog: loadFromRemote\n }\n )\n },\n\n /**\n * Close a workflow with confirmation if there are unsaved changes\n * @param workflow The workflow to close\n * @returns true if the workflow was closed, false if the user cancelled\n */\n async closeWorkflow(\n workflow: ComfyWorkflow,\n options: { warnIfUnsaved: boolean } = { warnIfUnsaved: true }\n ): Promise {\n if (!workflow.isLoaded) {\n return true\n }\n\n if (workflow.isModified && options.warnIfUnsaved) {\n const confirmed = await showConfirmationDialog({\n title: t('sideToolbar.workflowTab.dirtyCloseTitle'),\n type: 'dirtyClose',\n message: t('sideToolbar.workflowTab.dirtyClose'),\n itemList: [workflow.path]\n })\n // Cancel\n if (confirmed === null) return false\n\n if (confirmed === true) {\n await this.saveWorkflow(workflow)\n }\n }\n\n const workflowStore = useWorkflowStore()\n // If this is the last workflow, create a new default temporary workflow\n if (workflowStore.openWorkflows.length === 1) {\n await this.loadDefaultWorkflow()\n }\n // If this is the active workflow, load the next workflow\n if (workflowStore.isActive(workflow)) {\n await this.loadNextOpenedWorkflow()\n }\n\n await workflowStore.closeWorkflow(workflow)\n return true\n },\n\n async renameWorkflow(workflow: ComfyWorkflow, newPath: string) {\n await useWorkflowStore().renameWorkflow(workflow, newPath)\n },\n\n /**\n * Delete a workflow\n * @param workflow The workflow to delete\n * @returns `true` if the workflow was deleted, `false` if the user cancelled\n */\n async deleteWorkflow(\n workflow: ComfyWorkflow,\n silent = false\n ): Promise {\n const bypassConfirm = !useSettingStore().get('Comfy.Workflow.ConfirmDelete')\n let confirmed: boolean | null = bypassConfirm || silent\n\n if (!confirmed) {\n confirmed = await showConfirmationDialog({\n title: t('sideToolbar.workflowTab.confirmDeleteTitle'),\n type: 'delete',\n message: t('sideToolbar.workflowTab.confirmDelete'),\n itemList: [workflow.path]\n })\n if (!confirmed) return false\n }\n\n const workflowStore = useWorkflowStore()\n if (workflowStore.isOpen(workflow)) {\n const closed = await this.closeWorkflow(workflow, {\n warnIfUnsaved: !confirmed\n })\n if (!closed) return false\n }\n await workflowStore.deleteWorkflow(workflow)\n if (!silent) {\n useToastStore().add({\n severity: 'info',\n summary: t('sideToolbar.workflowTab.deleted'),\n life: 1000\n })\n }\n return true\n },\n\n /**\n * This method is called before loading a new graph.\n * There are 3 major functions that loads a new graph to the graph editor:\n * 1. loadGraphData\n * 2. loadApiJson\n * 3. importA1111\n *\n * This function is used to save the current workflow states before loading\n * a new graph.\n */\n beforeLoadNewGraph() {\n // Use workspaceStore here as it is patched in jest tests.\n const workflowStore = useWorkspaceStore().workflow\n const activeWorkflow = workflowStore.activeWorkflow\n if (activeWorkflow) {\n activeWorkflow.changeTracker.store()\n }\n },\n\n /**\n * Set the active workflow after the new graph is loaded.\n *\n * The call relationship is\n * workflowService.openWorkflow -> app.loadGraphData -> workflowService.afterLoadNewGraph\n * app.loadApiJson -> workflowService.afterLoadNewGraph\n * app.importA1111 -> workflowService.afterLoadNewGraph\n *\n * @param value The value to set as the active workflow.\n * @param workflowData The initial workflow data loaded to the graph editor.\n */\n async afterLoadNewGraph(\n value: string | ComfyWorkflow | null,\n workflowData: ComfyWorkflowJSON\n ) {\n // Use workspaceStore here as it is patched in jest tests.\n const workflowStore = useWorkspaceStore().workflow\n if (typeof value === 'string') {\n const workflow = workflowStore.getWorkflowByPath(\n ComfyWorkflow.basePath + appendJsonExt(value)\n )\n if (workflow?.isPersisted) {\n const loadedWorkflow = await workflowStore.openWorkflow(workflow)\n loadedWorkflow.changeTracker.restore()\n loadedWorkflow.changeTracker.reset(workflowData)\n return\n }\n }\n\n if (value === null || typeof value === 'string') {\n const path = value as string | null\n const tempWorkflow = workflowStore.createTemporary(\n path ? appendJsonExt(path) : undefined,\n workflowData\n )\n await workflowStore.openWorkflow(tempWorkflow)\n return\n }\n\n // value is a ComfyWorkflow.\n const loadedWorkflow = await workflowStore.openWorkflow(value)\n loadedWorkflow.changeTracker.reset(workflowData)\n loadedWorkflow.changeTracker.restore()\n },\n\n /**\n * Insert the given workflow into the current graph editor.\n */\n async insertWorkflow(workflow: ComfyWorkflow) {\n const loadedWorkflow = await workflow.load()\n const data = loadedWorkflow.initialState\n const old = localStorage.getItem('litegrapheditor_clipboard')\n // @ts-expect-error: zod issue. Should be fixed after enable ts-strict globally\n const graph = new LGraph(data)\n const canvasElement = document.createElement('canvas')\n const canvas = new LGraphCanvas(canvasElement, graph, {\n skip_events: true,\n skip_render: true\n })\n canvas.selectNodes()\n canvas.copyToClipboard()\n app.canvas.pasteFromClipboard()\n if (old !== null) {\n localStorage.setItem('litegrapheditor_clipboard', old)\n }\n },\n\n async loadNextOpenedWorkflow() {\n const nextWorkflow = useWorkflowStore().openedWorkflowIndexShift(1)\n if (nextWorkflow) {\n await this.openWorkflow(nextWorkflow)\n }\n },\n\n async loadPreviousOpenedWorkflow() {\n const previousWorkflow = useWorkflowStore().openedWorkflowIndexShift(-1)\n if (previousWorkflow) {\n await this.openWorkflow(previousWorkflow)\n }\n },\n\n /**\n * Takes an existing workflow and duplicates it with a new name\n */\n async duplicateWorkflow(workflow: ComfyWorkflow) {\n const state = JSON.parse(JSON.stringify(workflow.activeState))\n await app.loadGraphData(state, true, true, workflow.filename)\n }\n}\n","// @ts-strict-ignore\nimport type { LGraph, LGraphCanvas, LGraphNode } from '@comfyorg/litegraph'\nimport { LiteGraph } from '@comfyorg/litegraph'\n\n/**\n * Serialises an array of nodes using a modified version of the old Litegraph copy (& paste) function\n * @param nodes All nodes to be serialised\n * @param graph The graph we are working in\n * @returns A serialised string of all nodes, and their connections\n * @deprecated Format not in use anywhere else.\n */\nexport function serialise(nodes: LGraphNode[], graph: LGraph): string {\n const serialisable = {\n nodes: [],\n links: []\n }\n let index = 0\n const cloneable: LGraphNode[] = []\n\n for (const node of nodes) {\n if (node.clonable === false) continue\n\n node._relative_id = index++\n cloneable.push(node)\n }\n\n // Clone the node\n for (const node of cloneable) {\n const cloned = node.clone()\n if (!cloned) {\n console.warn('node type not found: ' + node.type)\n continue\n }\n\n serialisable.nodes.push(cloned.serialize())\n if (!node.inputs?.length) continue\n\n // For inputs only, gather link details of every connection\n for (const input of node.inputs) {\n if (!input || input.link == null) continue\n\n const link = graph.links.get(input.link)\n if (!link) continue\n\n const outNode = graph.getNodeById(link.origin_id)\n if (!outNode) continue\n\n // Special format for old Litegraph copy & paste only\n serialisable.links.push([\n outNode._relative_id,\n link.origin_slot,\n node._relative_id,\n link.target_slot,\n outNode.id\n ])\n }\n }\n\n return JSON.stringify(serialisable)\n}\n\n/**\n * Deserialises nodes and links using a modified version of the old Litegraph (copy &) paste function\n * @param data The serialised nodes and links to create\n * @param canvas The canvas to create the serialised items in\n */\nexport function deserialiseAndCreate(data: string, canvas: LGraphCanvas): void {\n if (!data) return\n\n const { graph, graph_mouse } = canvas\n canvas.emitBeforeChange()\n try {\n graph.beforeChange()\n\n const deserialised = JSON.parse(data)\n\n // Find the top left point of the boundary of all pasted nodes\n const topLeft = [Infinity, Infinity]\n for (const { pos } of deserialised.nodes) {\n if (topLeft[0] > pos[0]) topLeft[0] = pos[0]\n if (topLeft[1] > pos[1]) topLeft[1] = pos[1]\n }\n\n // Silent default instead of throw\n if (!Number.isFinite(topLeft[0]) || !Number.isFinite(topLeft[1])) {\n topLeft[0] = graph_mouse[0]\n topLeft[1] = graph_mouse[1]\n }\n\n // Create nodes\n const nodes: LGraphNode[] = []\n for (const info of deserialised.nodes) {\n const node = LiteGraph.createNode(info.type)\n if (!node) continue\n\n node.configure(info)\n\n // Paste to the bottom right of pointer\n node.pos[0] += graph_mouse[0] - topLeft[0]\n node.pos[1] += graph_mouse[1] - topLeft[1]\n\n graph.add(node, true)\n nodes.push(node)\n }\n\n // Create links\n for (const info of deserialised.links) {\n const relativeId = info[0]\n const outNode = relativeId != null ? nodes[relativeId] : undefined\n\n const inNode = nodes[info[2]]\n if (outNode && inNode) outNode.connect(info[1], inNode, info[3])\n else console.warn('Warning, nodes missing on pasting')\n }\n\n canvas.selectNodes(nodes)\n\n graph.afterChange()\n } finally {\n canvas.emitAfterChange()\n }\n}\n","// @ts-strict-ignore\nimport {\n type ComfyWidgetConstructor,\n ComfyWidgets,\n initWidgets\n} from './widgets'\nimport { ComfyUI, $el } from './ui'\nimport { api, type ComfyApi } from './api'\nimport { defaultGraph } from './defaultGraph'\nimport {\n getPngMetadata,\n getWebpMetadata,\n getFlacMetadata,\n importA1111,\n getLatentMetadata\n} from './pnginfo'\nimport { createImageHost, calculateImageGrid } from './ui/imagePreview'\nimport type { ComfyExtension, MissingNodeType } from '@/types/comfy'\nimport {\n type ComfyWorkflowJSON,\n type NodeId,\n validateComfyWorkflow\n} from '@/types/comfyWorkflow'\nimport type { ComfyNodeDef } from '@/types/apiTypes'\nimport { adjustColor, ColorAdjustOptions } from '@/utils/colorUtil'\nimport { ComfyAppMenu } from './ui/menu/index'\nimport { getStorageValue } from './utils'\nimport { ComfyWorkflow } from '@/stores/workflowStore'\nimport {\n LGraphCanvas,\n LGraph,\n LGraphNode,\n LiteGraph,\n LGraphEventMode\n} from '@comfyorg/litegraph'\nimport { ExtensionManager } from '@/types/extensionTypes'\nimport {\n ComfyNodeDefImpl,\n SYSTEM_NODE_DEFS,\n useNodeDefStore\n} from '@/stores/nodeDefStore'\nimport { INodeInputSlot, Vector2 } from '@comfyorg/litegraph'\nimport _ from 'lodash'\nimport {\n showExecutionErrorDialog,\n showLoadWorkflowWarning,\n showMissingModelsWarning\n} from '@/services/dialogService'\nimport { useSettingStore } from '@/stores/settingStore'\nimport { useToastStore } from '@/stores/toastStore'\nimport { useModelStore } from '@/stores/modelStore'\nimport type { ToastMessageOptions } from 'primevue/toast'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\nimport { useExecutionStore } from '@/stores/executionStore'\nimport { IWidget } from '@comfyorg/litegraph'\nimport { useExtensionStore } from '@/stores/extensionStore'\nimport { KeyComboImpl, useKeybindingStore } from '@/stores/keybindingStore'\nimport { useCommandStore } from '@/stores/commandStore'\nimport { shallowReactive } from 'vue'\nimport { type IBaseWidget } from '@comfyorg/litegraph/dist/types/widgets'\nimport { workflowService } from '@/services/workflowService'\nimport { useWidgetStore } from '@/stores/widgetStore'\nimport { deserialiseAndCreate } from '@/extensions/core/vintageClipboard'\nimport { st } from '@/i18n'\nimport { normalizeI18nKey } from '@/utils/formatUtil'\nimport { ISerialisedGraph } from '@comfyorg/litegraph'\n\nexport const ANIM_PREVIEW_WIDGET = '$$comfy_animation_preview'\n\nfunction sanitizeNodeName(string) {\n let entityMap = {\n '&': '',\n '<': '',\n '>': '',\n '\"': '',\n \"'\": '',\n '`': '',\n '=': ''\n }\n return String(string).replace(/[&<>\"'`=]/g, function fromEntityMap(s) {\n return entityMap[s]\n })\n}\n\ntype Clipspace = {\n widgets?: { type?: string; name?: string; value?: any }[] | null\n imgs?: HTMLImageElement[] | null\n original_imgs?: HTMLImageElement[] | null\n images?: any[] | null\n selectedIndex: number\n img_paste_mode: string\n}\n\n/**\n * @typedef {import(\"types/comfy\").ComfyExtension} ComfyExtension\n */\n\nexport class ComfyApp {\n /**\n * List of entries to queue\n * @type {{number: number, batchCount: number}[]}\n */\n #queueItems = []\n /**\n * If the queue is currently being processed\n * @type {boolean}\n */\n #processingQueue = false\n\n /**\n * Content Clipboard\n * @type {serialized node object}\n */\n static clipspace: Clipspace | null = null\n static clipspace_invalidate_handler: (() => void) | null = null\n static open_maskeditor = null\n static clipspace_return_node = null\n\n vueAppReady: boolean\n api: ComfyApi\n ui: ComfyUI\n extensions: ComfyExtension[]\n extensionManager: ExtensionManager\n _nodeOutputs: Record\n nodePreviewImages: Record\n graph: LGraph\n canvas: LGraphCanvas\n dragOverNode: LGraphNode | null\n canvasEl: HTMLCanvasElement\n // x, y, scale\n zoom_drag_start: [number, number, number] | null\n lastNodeErrors: any[] | null\n /** @type {ExecutionErrorWsMessage} */\n lastExecutionError: { node_id?: NodeId } | null\n /** @type {ProgressWsMessage} */\n progress: { value?: number; max?: number } | null\n configuringGraph: boolean\n ctx: CanvasRenderingContext2D\n bodyTop: HTMLElement\n bodyLeft: HTMLElement\n bodyRight: HTMLElement\n bodyBottom: HTMLElement\n canvasContainer: HTMLElement\n menu: ComfyAppMenu\n bypassBgColor: string\n // Set by Comfy.Clipspace extension\n openClipspace: () => void = () => {}\n\n /**\n * @deprecated Use useExecutionStore().executingNodeId instead\n */\n get runningNodeId(): string | null {\n return useExecutionStore().executingNodeId\n }\n\n /**\n * @deprecated Use useWorkspaceStore().shiftDown instead\n */\n get shiftDown(): boolean {\n return useWorkspaceStore().shiftDown\n }\n\n /**\n * @deprecated Use useWidgetStore().widgets instead\n */\n get widgets(): Record {\n if (this.vueAppReady) {\n return useWidgetStore().widgets\n }\n return ComfyWidgets\n }\n\n /**\n * @deprecated storageLocation is always 'server' since\n * https://github.com/comfyanonymous/ComfyUI/commit/53c8a99e6c00b5e20425100f6680cd9ea2652218\n */\n get storageLocation() {\n return 'server'\n }\n\n /**\n * @deprecated storage migration is no longer needed.\n */\n get isNewUserSession() {\n return false\n }\n\n constructor() {\n this.vueAppReady = false\n this.ui = new ComfyUI(this)\n this.api = api\n this.bodyTop = $el('div.comfyui-body-top', { parent: document.body })\n this.bodyLeft = $el('div.comfyui-body-left', { parent: document.body })\n this.bodyRight = $el('div.comfyui-body-right', { parent: document.body })\n this.bodyBottom = $el('div.comfyui-body-bottom', { parent: document.body })\n this.canvasContainer = $el('div.graph-canvas-container', {\n parent: document.body\n })\n this.menu = new ComfyAppMenu(this)\n this.bypassBgColor = '#FF00FF'\n\n /**\n * List of extensions that are registered with the app\n * @type {ComfyExtension[]}\n */\n this.extensions = []\n\n /**\n * Stores the execution output data for each node\n * @type {Record}\n */\n this.nodeOutputs = {}\n\n /**\n * Stores the preview image data for each node\n * @type {Record}\n */\n this.nodePreviewImages = {}\n }\n\n get nodeOutputs() {\n return this._nodeOutputs\n }\n\n set nodeOutputs(value) {\n this._nodeOutputs = value\n this.#invokeExtensions('onNodeOutputsUpdated', value)\n }\n\n getPreviewFormatParam() {\n let preview_format = this.ui.settings.getSettingValue('Comfy.PreviewFormat')\n if (preview_format) return `&preview=${preview_format}`\n else return ''\n }\n\n getRandParam() {\n return '&rand=' + Math.random()\n }\n\n static isImageNode(node) {\n return (\n node.imgs ||\n (node &&\n node.widgets &&\n node.widgets.findIndex((obj) => obj.name === 'image') >= 0)\n )\n }\n\n static onClipspaceEditorSave() {\n if (ComfyApp.clipspace_return_node) {\n ComfyApp.pasteFromClipspace(ComfyApp.clipspace_return_node)\n }\n }\n\n static onClipspaceEditorClosed() {\n ComfyApp.clipspace_return_node = null\n }\n\n static copyToClipspace(node) {\n var widgets = null\n if (node.widgets) {\n widgets = node.widgets.map(({ type, name, value }) => ({\n type,\n name,\n value\n }))\n }\n\n var imgs = undefined\n var orig_imgs = undefined\n if (node.imgs != undefined) {\n imgs = []\n orig_imgs = []\n\n for (let i = 0; i < node.imgs.length; i++) {\n imgs[i] = new Image()\n imgs[i].src = node.imgs[i].src\n orig_imgs[i] = imgs[i]\n }\n }\n\n var selectedIndex = 0\n if (node.imageIndex) {\n selectedIndex = node.imageIndex\n }\n\n ComfyApp.clipspace = {\n widgets: widgets,\n imgs: imgs,\n original_imgs: orig_imgs,\n images: node.images,\n selectedIndex: selectedIndex,\n img_paste_mode: 'selected' // reset to default im_paste_mode state on copy action\n }\n\n ComfyApp.clipspace_return_node = null\n\n if (ComfyApp.clipspace_invalidate_handler) {\n ComfyApp.clipspace_invalidate_handler()\n }\n }\n\n static pasteFromClipspace(node) {\n if (ComfyApp.clipspace) {\n // image paste\n if (ComfyApp.clipspace.imgs && node.imgs) {\n if (node.images && ComfyApp.clipspace.images) {\n if (ComfyApp.clipspace['img_paste_mode'] == 'selected') {\n node.images = [\n ComfyApp.clipspace.images[ComfyApp.clipspace['selectedIndex']]\n ]\n } else {\n node.images = ComfyApp.clipspace.images\n }\n\n if (app.nodeOutputs[node.id + ''])\n app.nodeOutputs[node.id + ''].images = node.images\n }\n\n if (ComfyApp.clipspace.imgs) {\n // deep-copy to cut link with clipspace\n if (ComfyApp.clipspace['img_paste_mode'] == 'selected') {\n const img = new Image()\n img.src =\n ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src\n node.imgs = [img]\n node.imageIndex = 0\n } else {\n const imgs = []\n for (let i = 0; i < ComfyApp.clipspace.imgs.length; i++) {\n imgs[i] = new Image()\n imgs[i].src = ComfyApp.clipspace.imgs[i].src\n node.imgs = imgs\n }\n }\n }\n }\n\n if (node.widgets) {\n if (ComfyApp.clipspace.images) {\n const clip_image =\n ComfyApp.clipspace.images[ComfyApp.clipspace['selectedIndex']]\n const index = node.widgets.findIndex((obj) => obj.name === 'image')\n if (index >= 0) {\n if (\n node.widgets[index].type != 'image' &&\n typeof node.widgets[index].value == 'string' &&\n clip_image.filename\n ) {\n node.widgets[index].value =\n (clip_image.subfolder ? clip_image.subfolder + '/' : '') +\n clip_image.filename +\n (clip_image.type ? ` [${clip_image.type}]` : '')\n } else {\n node.widgets[index].value = clip_image\n }\n }\n }\n if (ComfyApp.clipspace.widgets) {\n ComfyApp.clipspace.widgets.forEach(({ type, name, value }) => {\n const prop = Object.values(node.widgets).find(\n // @ts-expect-errorg\n (obj) => obj.type === type && obj.name === name\n )\n // @ts-expect-error\n if (prop && prop.type != 'button') {\n if (\n // @ts-expect-error\n prop.type != 'image' &&\n // @ts-expect-error\n typeof prop.value == 'string' &&\n value.filename\n ) {\n // @ts-expect-error\n prop.value =\n (value.subfolder ? value.subfolder + '/' : '') +\n value.filename +\n (value.type ? ` [${value.type}]` : '')\n } else {\n // @ts-expect-error\n prop.value = value\n // @ts-expect-error\n prop.callback(value)\n }\n }\n })\n }\n }\n\n app.graph.setDirtyCanvas(true)\n }\n }\n\n get enabledExtensions() {\n if (!this.vueAppReady) {\n return this.extensions\n }\n return useExtensionStore().enabledExtensions\n }\n\n /**\n * Invoke an extension callback\n * @param {keyof ComfyExtension} method The extension callback to execute\n * @param {any[]} args Any arguments to pass to the callback\n * @returns\n */\n #invokeExtensions(method, ...args) {\n let results = []\n for (const ext of this.enabledExtensions) {\n if (method in ext) {\n try {\n results.push(ext[method](...args, this))\n } catch (error) {\n console.error(\n `Error calling extension '${ext.name}' method '${method}'`,\n { error },\n { extension: ext },\n { args }\n )\n }\n }\n }\n return results\n }\n\n /**\n * Invoke an async extension callback\n * Each callback will be invoked concurrently\n * @param {string} method The extension callback to execute\n * @param {...any} args Any arguments to pass to the callback\n * @returns\n */\n async #invokeExtensionsAsync(method, ...args) {\n return await Promise.all(\n this.enabledExtensions.map(async (ext) => {\n if (method in ext) {\n try {\n return await ext[method](...args, this)\n } catch (error) {\n console.error(\n `Error calling extension '${ext.name}' method '${method}'`,\n { error },\n { extension: ext },\n { args }\n )\n }\n }\n })\n )\n }\n\n #addRestoreWorkflowView() {\n const serialize = LGraph.prototype.serialize\n const self = this\n LGraph.prototype.serialize = function () {\n const workflow = serialize.apply(this, arguments)\n\n // Store the drag & scale info in the serialized workflow if the setting is enabled\n if (useSettingStore().get('Comfy.EnableWorkflowViewRestore')) {\n if (!workflow.extra) {\n workflow.extra = {}\n }\n workflow.extra.ds = {\n scale: self.canvas.ds.scale,\n offset: self.canvas.ds.offset\n }\n } else if (workflow.extra?.ds) {\n // Clear any old view data\n delete workflow.extra.ds\n }\n\n return workflow\n }\n }\n\n /**\n * Adds special context menu handling for nodes\n * e.g. this adds Open Image functionality for nodes that show images\n * @param {*} node The node to add the menu handler\n */\n #addNodeContextMenuHandler(node) {\n function getCopyImageOption(img) {\n if (typeof window.ClipboardItem === 'undefined') return []\n return [\n {\n content: 'Copy Image',\n callback: async () => {\n const url = new URL(img.src)\n url.searchParams.delete('preview')\n\n const writeImage = async (blob) => {\n await navigator.clipboard.write([\n new ClipboardItem({\n [blob.type]: blob\n })\n ])\n }\n\n try {\n const data = await fetch(url)\n const blob = await data.blob()\n try {\n await writeImage(blob)\n } catch (error) {\n // Chrome seems to only support PNG on write, convert and try again\n if (blob.type !== 'image/png') {\n const canvas = $el('canvas', {\n width: img.naturalWidth,\n height: img.naturalHeight\n }) as HTMLCanvasElement\n const ctx = canvas.getContext('2d')\n let image\n if (typeof window.createImageBitmap === 'undefined') {\n image = new Image()\n const p = new Promise((resolve, reject) => {\n image.onload = resolve\n image.onerror = reject\n }).finally(() => {\n URL.revokeObjectURL(image.src)\n })\n image.src = URL.createObjectURL(blob)\n await p\n } else {\n image = await createImageBitmap(blob)\n }\n try {\n ctx.drawImage(image, 0, 0)\n canvas.toBlob(writeImage, 'image/png')\n } finally {\n if (typeof image.close === 'function') {\n image.close()\n }\n }\n\n return\n }\n throw error\n }\n } catch (error) {\n useToastStore().addAlert(\n 'Error copying image: ' + (error.message ?? error)\n )\n }\n }\n }\n ]\n }\n\n node.prototype.getExtraMenuOptions = function (_, options) {\n if (this.imgs) {\n // If this node has images then we add an open in new tab item\n let img\n if (this.imageIndex != null) {\n // An image is selected so select that\n img = this.imgs[this.imageIndex]\n } else if (this.overIndex != null) {\n // No image is selected but one is hovered\n img = this.imgs[this.overIndex]\n }\n if (img) {\n options.unshift(\n {\n content: 'Open Image',\n callback: () => {\n let url = new URL(img.src)\n url.searchParams.delete('preview')\n window.open(url, '_blank')\n }\n },\n ...getCopyImageOption(img),\n {\n content: 'Save Image',\n callback: () => {\n const a = document.createElement('a')\n let url = new URL(img.src)\n url.searchParams.delete('preview')\n a.href = url.toString()\n a.setAttribute(\n 'download',\n new URLSearchParams(url.search).get('filename')\n )\n document.body.append(a)\n a.click()\n requestAnimationFrame(() => a.remove())\n }\n }\n )\n }\n }\n\n options.push({\n content: 'Bypass',\n callback: (obj) => {\n if (this.mode === LGraphEventMode.BYPASS)\n this.mode = LGraphEventMode.ALWAYS\n else this.mode = LGraphEventMode.BYPASS\n this.graph.change()\n }\n })\n\n // prevent conflict of clipspace content\n if (!ComfyApp.clipspace_return_node) {\n options.push({\n content: 'Copy (Clipspace)',\n callback: (obj) => {\n ComfyApp.copyToClipspace(this)\n }\n })\n\n if (ComfyApp.clipspace != null) {\n options.push({\n content: 'Paste (Clipspace)',\n callback: () => {\n ComfyApp.pasteFromClipspace(this)\n }\n })\n }\n\n if (ComfyApp.isImageNode(this)) {\n options.push({\n content: 'Open in MaskEditor',\n callback: (obj) => {\n ComfyApp.copyToClipspace(this)\n ComfyApp.clipspace_return_node = this\n ComfyApp.open_maskeditor()\n }\n })\n }\n }\n }\n }\n\n #addNodeKeyHandler(node) {\n const app = this\n const origNodeOnKeyDown = node.prototype.onKeyDown\n\n node.prototype.onKeyDown = function (e) {\n if (origNodeOnKeyDown && origNodeOnKeyDown.apply(this, e) === false) {\n return false\n }\n\n if (this.flags.collapsed || !this.imgs || this.imageIndex === null) {\n return\n }\n\n let handled = false\n\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n if (e.key === 'ArrowLeft') {\n this.imageIndex -= 1\n } else if (e.key === 'ArrowRight') {\n this.imageIndex += 1\n }\n this.imageIndex %= this.imgs.length\n\n if (this.imageIndex < 0) {\n this.imageIndex = this.imgs.length + this.imageIndex\n }\n handled = true\n } else if (e.key === 'Escape') {\n this.imageIndex = null\n handled = true\n }\n\n if (handled === true) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return false\n }\n }\n }\n\n /**\n * Adds Custom drawing logic for nodes\n * e.g. Draws images and handles thumbnail navigation on nodes that output images\n * @param {*} node The node to add the draw handler\n */\n #addDrawBackgroundHandler(node) {\n const app = this\n\n function getImageTop(node) {\n let shiftY\n if (node.imageOffset != null) {\n shiftY = node.imageOffset\n } else {\n if (node.widgets?.length) {\n const w = node.widgets[node.widgets.length - 1]\n shiftY = w.last_y\n if (w.computeSize) {\n shiftY += w.computeSize()[1] + 4\n } else if (w.computedHeight) {\n shiftY += w.computedHeight\n } else {\n shiftY += LiteGraph.NODE_WIDGET_HEIGHT + 4\n }\n } else {\n shiftY = node.computeSize()[1]\n }\n }\n return shiftY\n }\n\n node.prototype.setSizeForImage = function (force) {\n if (!force && this.animatedImages) return\n\n if (this.inputHeight || this.freeWidgetSpace > 210) {\n this.setSize(this.size)\n return\n }\n const minHeight = getImageTop(this) + 220\n if (this.size[1] < minHeight) {\n this.setSize([this.size[0], minHeight])\n }\n }\n\n function unsafeDrawBackground(ctx) {\n if (!this.flags.collapsed) {\n let imgURLs = []\n let imagesChanged = false\n\n const output = app.nodeOutputs[this.id + '']\n if (output?.images) {\n this.animatedImages = output?.animated?.find(Boolean)\n if (this.images !== output.images) {\n this.images = output.images\n imagesChanged = true\n imgURLs = imgURLs.concat(\n output.images.map((params) => {\n return api.apiURL(\n '/view?' +\n new URLSearchParams(params).toString() +\n (this.animatedImages ? '' : app.getPreviewFormatParam()) +\n app.getRandParam()\n )\n })\n )\n }\n }\n\n const preview = app.nodePreviewImages[this.id + '']\n if (this.preview !== preview) {\n this.preview = preview\n imagesChanged = true\n if (preview != null) {\n imgURLs.push(preview)\n }\n }\n\n if (imagesChanged) {\n this.imageIndex = null\n if (imgURLs.length > 0) {\n Promise.all(\n imgURLs.map((src) => {\n return new Promise((r) => {\n const img = new Image()\n img.onload = () => r(img)\n img.onerror = () => r(null)\n img.src = src\n })\n })\n ).then((imgs) => {\n if (\n (!output || this.images === output.images) &&\n (!preview || this.preview === preview)\n ) {\n this.imgs = imgs.filter(Boolean)\n this.setSizeForImage?.()\n app.graph.setDirtyCanvas(true)\n }\n })\n } else {\n this.imgs = null\n }\n }\n\n const is_all_same_aspect_ratio = (imgs) => {\n // assume: imgs.length >= 2\n let ratio = imgs[0].naturalWidth / imgs[0].naturalHeight\n\n for (let i = 1; i < imgs.length; i++) {\n let this_ratio = imgs[i].naturalWidth / imgs[i].naturalHeight\n if (ratio != this_ratio) return false\n }\n\n return true\n }\n\n if (this.imgs?.length) {\n const widgetIdx = this.widgets?.findIndex(\n (w) => w.name === ANIM_PREVIEW_WIDGET\n )\n\n if (this.animatedImages) {\n // Instead of using the canvas we'll use a IMG\n if (widgetIdx > -1) {\n // Replace content\n const widget = this.widgets[widgetIdx]\n widget.options.host.updateImages(this.imgs)\n } else {\n const host = createImageHost(this)\n this.setSizeForImage(true)\n const widget = this.addDOMWidget(\n ANIM_PREVIEW_WIDGET,\n 'img',\n host.el,\n {\n host,\n getHeight: host.getHeight,\n onDraw: host.onDraw,\n hideOnZoom: false\n }\n )\n widget.serializeValue = () => undefined\n widget.options.host.updateImages(this.imgs)\n }\n return\n }\n\n if (widgetIdx > -1) {\n this.widgets[widgetIdx].onRemove?.()\n this.widgets.splice(widgetIdx, 1)\n }\n\n const canvas = app.graph.list_of_graphcanvas[0]\n const mouse = canvas.graph_mouse\n if (!canvas.pointer_is_down && this.pointerDown) {\n if (\n mouse[0] === this.pointerDown.pos[0] &&\n mouse[1] === this.pointerDown.pos[1]\n ) {\n this.imageIndex = this.pointerDown.index\n }\n this.pointerDown = null\n }\n\n let imageIndex = this.imageIndex\n const numImages = this.imgs.length\n if (numImages === 1 && !imageIndex) {\n this.imageIndex = imageIndex = 0\n }\n\n const top = getImageTop(this)\n var shiftY = top\n\n let dw = this.size[0]\n let dh = this.size[1]\n dh -= shiftY\n\n if (imageIndex == null) {\n var cellWidth, cellHeight, shiftX, cell_padding, cols\n\n const compact_mode = is_all_same_aspect_ratio(this.imgs)\n if (!compact_mode) {\n // use rectangle cell style and border line\n cell_padding = 2\n // Prevent infinite canvas2d scale-up\n const largestDimension = this.imgs.reduce(\n (acc, current) =>\n Math.max(acc, current.naturalWidth, current.naturalHeight),\n 0\n )\n const fakeImgs = []\n fakeImgs.length = this.imgs.length\n fakeImgs[0] = {\n naturalWidth: largestDimension,\n naturalHeight: largestDimension\n }\n ;({ cellWidth, cellHeight, cols, shiftX } = calculateImageGrid(\n fakeImgs,\n dw,\n dh\n ))\n } else {\n cell_padding = 0\n ;({ cellWidth, cellHeight, cols, shiftX } = calculateImageGrid(\n this.imgs,\n dw,\n dh\n ))\n }\n\n let anyHovered = false\n this.imageRects = []\n for (let i = 0; i < numImages; i++) {\n const img = this.imgs[i]\n const row = Math.floor(i / cols)\n const col = i % cols\n const x = col * cellWidth + shiftX\n const y = row * cellHeight + shiftY\n if (!anyHovered) {\n anyHovered = LiteGraph.isInsideRectangle(\n mouse[0],\n mouse[1],\n x + this.pos[0],\n y + this.pos[1],\n cellWidth,\n cellHeight\n )\n if (anyHovered) {\n this.overIndex = i\n let value = 110\n if (canvas.pointer_is_down) {\n if (!this.pointerDown || this.pointerDown.index !== i) {\n this.pointerDown = { index: i, pos: [...mouse] }\n }\n value = 125\n }\n ctx.filter = `contrast(${value}%) brightness(${value}%)`\n canvas.canvas.style.cursor = 'pointer'\n }\n }\n this.imageRects.push([x, y, cellWidth, cellHeight])\n\n let wratio = cellWidth / img.width\n let hratio = cellHeight / img.height\n var ratio = Math.min(wratio, hratio)\n\n let imgHeight = ratio * img.height\n let imgY =\n row * cellHeight + shiftY + (cellHeight - imgHeight) / 2\n let imgWidth = ratio * img.width\n let imgX = col * cellWidth + shiftX + (cellWidth - imgWidth) / 2\n\n ctx.drawImage(\n img,\n imgX + cell_padding,\n imgY + cell_padding,\n imgWidth - cell_padding * 2,\n imgHeight - cell_padding * 2\n )\n if (!compact_mode) {\n // rectangle cell and border line style\n ctx.strokeStyle = '#8F8F8F'\n ctx.lineWidth = 1\n ctx.strokeRect(\n x + cell_padding,\n y + cell_padding,\n cellWidth - cell_padding * 2,\n cellHeight - cell_padding * 2\n )\n }\n\n ctx.filter = 'none'\n }\n\n if (!anyHovered) {\n this.pointerDown = null\n this.overIndex = null\n }\n } else {\n // Draw individual\n let w = this.imgs[imageIndex].naturalWidth\n let h = this.imgs[imageIndex].naturalHeight\n\n const scaleX = dw / w\n const scaleY = dh / h\n const scale = Math.min(scaleX, scaleY, 1)\n\n w *= scale\n h *= scale\n\n let x = (dw - w) / 2\n let y = (dh - h) / 2 + shiftY\n ctx.drawImage(this.imgs[imageIndex], x, y, w, h)\n\n const drawButton = (x, y, sz, text) => {\n const hovered = LiteGraph.isInsideRectangle(\n mouse[0],\n mouse[1],\n x + this.pos[0],\n y + this.pos[1],\n sz,\n sz\n )\n let fill = '#333'\n let textFill = '#fff'\n let isClicking = false\n if (hovered) {\n canvas.canvas.style.cursor = 'pointer'\n if (canvas.pointer_is_down) {\n fill = '#1e90ff'\n isClicking = true\n } else {\n fill = '#eee'\n textFill = '#000'\n }\n } else {\n this.pointerWasDown = null\n }\n\n ctx.fillStyle = fill\n ctx.beginPath()\n ctx.roundRect(x, y, sz, sz, [4])\n ctx.fill()\n ctx.fillStyle = textFill\n ctx.font = '12px Arial'\n ctx.textAlign = 'center'\n ctx.fillText(text, x + 15, y + 20)\n\n return isClicking\n }\n\n if (numImages > 1) {\n if (\n drawButton(\n dw - 40,\n dh + top - 40,\n 30,\n `${this.imageIndex + 1}/${numImages}`\n )\n ) {\n let i =\n this.imageIndex + 1 >= numImages ? 0 : this.imageIndex + 1\n if (!this.pointerDown || !this.pointerDown.index === i) {\n this.pointerDown = { index: i, pos: [...mouse] }\n }\n }\n\n if (drawButton(dw - 40, top + 10, 30, `x`)) {\n if (!this.pointerDown || !this.pointerDown.index === null) {\n this.pointerDown = { index: null, pos: [...mouse] }\n }\n }\n }\n }\n }\n }\n }\n\n node.prototype.onDrawBackground = function (ctx) {\n try {\n unsafeDrawBackground.call(this, ctx)\n } catch (error) {\n console.error('Error drawing node background', error)\n }\n }\n }\n\n /**\n * Adds a handler allowing drag+drop of files onto the window to load workflows\n */\n #addDropHandler() {\n // Get prompt from dropped PNG or json\n document.addEventListener('drop', async (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n const n = this.dragOverNode\n this.dragOverNode = null\n // Node handles file drop, we dont use the built in onDropFile handler as its buggy\n // If you drag multiple files it will call it multiple times with the same file\n // @ts-expect-error This is not a standard event. TODO fix it.\n if (n && n.onDragDrop && (await n.onDragDrop(event))) {\n return\n }\n // Dragging from Chrome->Firefox there is a file but its a bmp, so ignore that\n if (\n event.dataTransfer.files.length &&\n event.dataTransfer.files[0].type !== 'image/bmp'\n ) {\n await this.handleFile(event.dataTransfer.files[0])\n } else {\n // Try loading the first URI in the transfer list\n const validTypes = ['text/uri-list', 'text/x-moz-url']\n const match = [...event.dataTransfer.types].find((t) =>\n validTypes.find((v) => t === v)\n )\n if (match) {\n const uri = event.dataTransfer.getData(match)?.split('\\n')?.[0]\n if (uri) {\n await this.handleFile(await (await fetch(uri)).blob())\n }\n }\n }\n })\n\n // Always clear over node on drag leave\n this.canvasEl.addEventListener('dragleave', async () => {\n if (this.dragOverNode) {\n this.dragOverNode = null\n this.graph.setDirtyCanvas(false, true)\n }\n })\n\n // Add handler for dropping onto a specific node\n this.canvasEl.addEventListener(\n 'dragover',\n (e) => {\n this.canvas.adjustMouseEvent(e)\n const node = this.graph.getNodeOnPos(e.canvasX, e.canvasY)\n if (node) {\n // @ts-expect-error This is not a standard event. TODO fix it.\n if (node.onDragOver && node.onDragOver(e)) {\n this.dragOverNode = node\n\n // dragover event is fired very frequently, run this on an animation frame\n requestAnimationFrame(() => {\n this.graph.setDirtyCanvas(false, true)\n })\n return\n }\n }\n this.dragOverNode = null\n },\n false\n )\n }\n\n /**\n * Adds a handler on paste that extracts and loads images or workflows from pasted JSON data\n */\n #addPasteHandler() {\n document.addEventListener('paste', async (e: ClipboardEvent) => {\n // ctrl+shift+v is used to paste nodes with connections\n // this is handled by litegraph\n if (this.shiftDown) return\n\n // @ts-expect-error: Property 'clipboardData' does not exist on type 'Window & typeof globalThis'.\n // Did you mean 'Clipboard'?ts(2551)\n // TODO: Not sure what the code wants to do.\n let data = e.clipboardData || window.clipboardData\n const items = data.items\n\n // Look for image paste data\n for (const item of items) {\n if (item.type.startsWith('image/')) {\n var imageNode = null\n\n // If an image node is selected, paste into it\n if (\n this.canvas.current_node &&\n this.canvas.current_node.is_selected &&\n ComfyApp.isImageNode(this.canvas.current_node)\n ) {\n imageNode = this.canvas.current_node\n }\n\n // No image node selected: add a new one\n if (!imageNode) {\n const newNode = LiteGraph.createNode('LoadImage')\n // @ts-expect-error array to Float32Array\n newNode.pos = [...this.canvas.graph_mouse]\n imageNode = this.graph.add(newNode)\n this.graph.change()\n }\n const blob = item.getAsFile()\n imageNode.pasteFile(blob)\n return\n }\n }\n\n // No image found. Look for node data\n data = data.getData('text/plain')\n let workflow: ComfyWorkflowJSON | null = null\n try {\n data = data.slice(data.indexOf('{'))\n workflow = JSON.parse(data)\n } catch (err) {\n try {\n data = data.slice(data.indexOf('workflow\\n'))\n data = data.slice(data.indexOf('{'))\n workflow = JSON.parse(data)\n } catch (error) {\n workflow = null\n }\n }\n\n if (workflow && workflow.version && workflow.nodes && workflow.extra) {\n await this.loadGraphData(workflow)\n } else {\n if (\n (e.target instanceof HTMLTextAreaElement &&\n e.target.type === 'textarea') ||\n (e.target instanceof HTMLInputElement && e.target.type === 'text')\n ) {\n return\n }\n\n // Litegraph default paste\n this.canvas.pasteFromClipboard()\n }\n })\n }\n\n /**\n * Adds a handler on copy that serializes selected nodes to JSON\n */\n #addCopyHandler() {\n document.addEventListener('copy', (e) => {\n if (!(e.target instanceof Element)) {\n return\n }\n if (\n (e.target instanceof HTMLTextAreaElement &&\n e.target.type === 'textarea') ||\n (e.target instanceof HTMLInputElement && e.target.type === 'text')\n ) {\n // Default system copy\n return\n }\n const isTargetInGraph =\n e.target.classList.contains('litegraph') ||\n e.target.classList.contains('graph-canvas-container')\n\n // copy nodes and clear clipboard\n if (isTargetInGraph && this.canvas.selected_nodes) {\n this.canvas.copyToClipboard()\n e.clipboardData.setData('text', ' ') //clearData doesn't remove images from clipboard\n e.preventDefault()\n e.stopImmediatePropagation()\n return false\n }\n })\n }\n\n /**\n * Handle mouse\n *\n * Move group by header\n */\n #addProcessMouseHandler() {\n const self = this\n\n const origProcessMouseDown = LGraphCanvas.prototype.processMouseDown\n LGraphCanvas.prototype.processMouseDown = function (e) {\n // prepare for ctrl+shift drag: zoom start\n const useFastZoom = useSettingStore().get('Comfy.Graph.CtrlShiftZoom')\n if (useFastZoom && e.ctrlKey && e.shiftKey && !e.altKey && e.buttons) {\n self.zoom_drag_start = [e.x, e.y, this.ds.scale]\n return\n }\n\n const res = origProcessMouseDown.apply(this, arguments)\n return res\n }\n const origProcessMouseMove = LGraphCanvas.prototype.processMouseMove\n LGraphCanvas.prototype.processMouseMove = function (e) {\n // handle ctrl+shift drag\n if (e.ctrlKey && e.shiftKey && self.zoom_drag_start) {\n // stop canvas zoom action\n if (!e.buttons) {\n self.zoom_drag_start = null\n return\n }\n\n // calculate delta\n let deltaY = e.y - self.zoom_drag_start[1]\n let startScale = self.zoom_drag_start[2]\n\n let scale = startScale - deltaY / 100\n\n this.ds.changeScale(scale, [\n self.zoom_drag_start[0],\n self.zoom_drag_start[1]\n ])\n this.graph.change()\n\n return\n }\n\n return origProcessMouseMove.apply(this, arguments)\n }\n }\n\n /**\n * Handle keypress\n */\n #addProcessKeyHandler() {\n const origProcessKey = LGraphCanvas.prototype.processKey\n LGraphCanvas.prototype.processKey = function (e: KeyboardEvent) {\n if (!this.graph) {\n return\n }\n\n var block_default = false\n\n if (e.target instanceof Element && e.target.localName == 'input') {\n return\n }\n\n if (e.type == 'keydown' && !e.repeat) {\n const keyCombo = KeyComboImpl.fromEvent(e)\n const keybindingStore = useKeybindingStore()\n const keybinding = keybindingStore.getKeybinding(keyCombo)\n if (keybinding && keybinding.targetSelector === '#graph-canvas') {\n useCommandStore().execute(keybinding.commandId)\n block_default = true\n }\n\n // Ctrl+C Copy\n if (e.key === 'c' && (e.metaKey || e.ctrlKey)) {\n // Trigger onCopy\n return true\n }\n\n // Ctrl+V Paste\n if (\n (e.key === 'v' || e.key == 'V') &&\n (e.metaKey || e.ctrlKey) &&\n !e.shiftKey\n ) {\n // Trigger onPaste\n return true\n }\n }\n\n this.graph.change()\n\n if (block_default) {\n e.preventDefault()\n e.stopImmediatePropagation()\n return false\n }\n\n // Fall through to Litegraph defaults\n return origProcessKey.apply(this, arguments)\n }\n }\n\n /**\n * Draws group header bar\n */\n #addDrawGroupsHandler() {\n const self = this\n const origDrawGroups = LGraphCanvas.prototype.drawGroups\n LGraphCanvas.prototype.drawGroups = function (canvas, ctx) {\n if (!this.graph) {\n return\n }\n\n var groups = this.graph.groups\n\n ctx.save()\n ctx.globalAlpha = 0.7 * this.editor_alpha\n\n for (var i = 0; i < groups.length; ++i) {\n var group = groups[i]\n\n if (!LiteGraph.overlapBounding(this.visible_area, group._bounding)) {\n continue\n } //out of the visible area\n\n ctx.fillStyle = group.color || '#335'\n ctx.strokeStyle = group.color || '#335'\n var pos = group._pos\n var size = group._size\n ctx.globalAlpha = 0.25 * this.editor_alpha\n ctx.beginPath()\n var font_size = group.font_size || LiteGraph.DEFAULT_GROUP_FONT_SIZE\n ctx.rect(pos[0] + 0.5, pos[1] + 0.5, size[0], font_size * 1.4)\n ctx.fill()\n ctx.globalAlpha = this.editor_alpha\n }\n\n ctx.restore()\n\n const res = origDrawGroups.apply(this, arguments)\n return res\n }\n }\n\n /**\n * Draws node highlights (executing, drag drop) and progress bar\n */\n #addDrawNodeHandler() {\n const origDrawNodeShape = LGraphCanvas.prototype.drawNodeShape\n const self = this\n LGraphCanvas.prototype.drawNodeShape = function (\n node,\n ctx,\n size,\n fgcolor,\n bgcolor,\n selected\n ) {\n const res = origDrawNodeShape.apply(this, arguments)\n\n const nodeErrors = self.lastNodeErrors?.[node.id]\n\n let color = null\n let lineWidth = 1\n if (node.id === +self.runningNodeId) {\n color = '#0f0'\n } else if (self.dragOverNode && node.id === self.dragOverNode.id) {\n color = 'dodgerblue'\n } else if (nodeErrors?.errors) {\n color = 'red'\n lineWidth = 2\n } else if (\n self.lastExecutionError &&\n +self.lastExecutionError.node_id === node.id\n ) {\n color = '#f0f'\n lineWidth = 2\n }\n\n if (color) {\n const shape =\n node._shape || node.constructor.shape || LiteGraph.ROUND_SHAPE\n ctx.lineWidth = lineWidth\n ctx.globalAlpha = 0.8\n ctx.beginPath()\n if (shape == LiteGraph.BOX_SHAPE)\n ctx.rect(\n -6,\n -6 - LiteGraph.NODE_TITLE_HEIGHT,\n 12 + size[0] + 1,\n 12 + size[1] + LiteGraph.NODE_TITLE_HEIGHT\n )\n else if (\n shape == LiteGraph.ROUND_SHAPE ||\n (shape == LiteGraph.CARD_SHAPE && node.flags.collapsed)\n )\n ctx.roundRect(\n -6,\n -6 - LiteGraph.NODE_TITLE_HEIGHT,\n 12 + size[0] + 1,\n 12 + size[1] + LiteGraph.NODE_TITLE_HEIGHT,\n this.round_radius * 2\n )\n else if (shape == LiteGraph.CARD_SHAPE)\n ctx.roundRect(\n -6,\n -6 - LiteGraph.NODE_TITLE_HEIGHT,\n 12 + size[0] + 1,\n 12 + size[1] + LiteGraph.NODE_TITLE_HEIGHT,\n [this.round_radius * 2, this.round_radius * 2, 2, 2]\n )\n else if (shape == LiteGraph.CIRCLE_SHAPE)\n ctx.arc(\n size[0] * 0.5,\n size[1] * 0.5,\n size[0] * 0.5 + 6,\n 0,\n Math.PI * 2\n )\n ctx.strokeStyle = color\n ctx.stroke()\n ctx.strokeStyle = fgcolor\n ctx.globalAlpha = 1\n }\n\n if (self.progress && node.id === +self.runningNodeId) {\n ctx.fillStyle = 'green'\n ctx.fillRect(\n 0,\n 0,\n size[0] * (self.progress.value / self.progress.max),\n 6\n )\n ctx.fillStyle = bgcolor\n }\n\n // Highlight inputs that failed validation\n if (nodeErrors) {\n ctx.lineWidth = 2\n ctx.strokeStyle = 'red'\n for (const error of nodeErrors.errors) {\n if (error.extra_info && error.extra_info.input_name) {\n const inputIndex = node.findInputSlot(error.extra_info.input_name)\n if (inputIndex !== -1) {\n let pos = node.getConnectionPos(true, inputIndex)\n ctx.beginPath()\n ctx.arc(\n pos[0] - node.pos[0],\n pos[1] - node.pos[1],\n 12,\n 0,\n 2 * Math.PI,\n false\n )\n ctx.stroke()\n }\n }\n }\n }\n\n return res\n }\n\n const origDrawNode = LGraphCanvas.prototype.drawNode\n LGraphCanvas.prototype.drawNode = function (node, ctx) {\n const editor_alpha = this.editor_alpha\n const old_color = node.color\n const old_bgcolor = node.bgcolor\n\n if (node.mode === LGraphEventMode.NEVER) {\n this.editor_alpha = 0.4\n }\n\n let bgColor: string\n if (node.mode === LGraphEventMode.BYPASS) {\n bgColor = app.bypassBgColor\n this.editor_alpha = 0.2\n } else {\n bgColor = old_bgcolor || LiteGraph.NODE_DEFAULT_BGCOLOR\n }\n\n const adjustments: ColorAdjustOptions = {}\n\n const opacity = useSettingStore().get('Comfy.Node.Opacity')\n if (opacity) adjustments.opacity = opacity\n\n if (useSettingStore().get('Comfy.ColorPalette') === 'light') {\n adjustments.lightness = 0.5\n\n // Lighten title bar of colored nodes on light theme\n if (old_color) {\n node.color = adjustColor(old_color, { lightness: 0.5 })\n }\n }\n\n node.bgcolor = adjustColor(bgColor, adjustments)\n\n const res = origDrawNode.apply(this, arguments)\n\n this.editor_alpha = editor_alpha\n node.color = old_color\n node.bgcolor = old_bgcolor\n\n return res\n }\n }\n\n /**\n * Handles updates from the API socket\n */\n #addApiUpdateHandlers() {\n api.addEventListener('status', ({ detail }) => {\n this.ui.setStatus(detail)\n })\n\n api.addEventListener('progress', ({ detail }) => {\n this.progress = detail\n this.graph.setDirtyCanvas(true, false)\n })\n\n api.addEventListener('executing', ({ detail }) => {\n this.progress = null\n this.graph.setDirtyCanvas(true, false)\n delete this.nodePreviewImages[this.runningNodeId]\n })\n\n api.addEventListener('executed', ({ detail }) => {\n const output = this.nodeOutputs[detail.display_node || detail.node]\n if (detail.merge && output) {\n for (const k in detail.output ?? {}) {\n const v = output[k]\n if (v instanceof Array) {\n output[k] = v.concat(detail.output[k])\n } else {\n output[k] = detail.output[k]\n }\n }\n } else {\n this.nodeOutputs[detail.display_node || detail.node] = detail.output\n }\n const node = this.graph.getNodeById(detail.display_node || detail.node)\n if (node) {\n if (node.onExecuted) node.onExecuted(detail.output)\n }\n })\n\n api.addEventListener('execution_start', ({ detail }) => {\n this.lastExecutionError = null\n this.graph.nodes.forEach((node) => {\n if (node.onExecutionStart) node.onExecutionStart()\n })\n })\n\n api.addEventListener('execution_error', ({ detail }) => {\n this.lastExecutionError = detail\n showExecutionErrorDialog(detail)\n this.canvas.draw(true, true)\n })\n\n api.addEventListener('b_preview', ({ detail }) => {\n const id = this.runningNodeId\n if (id == null) return\n\n const blob = detail\n const blobUrl = URL.createObjectURL(blob)\n // @ts-expect-error\n this.nodePreviewImages[id] = [blobUrl]\n })\n\n api.init()\n }\n\n #addConfigureHandler() {\n const app = this\n const configure = LGraph.prototype.configure\n // Flag that the graph is configuring to prevent nodes from running checks while its still loading\n LGraph.prototype.configure = function () {\n app.configuringGraph = true\n try {\n return configure.apply(this, arguments)\n } finally {\n app.configuringGraph = false\n }\n }\n }\n\n #addWidgetLinkHandling() {\n app.canvas.getWidgetLinkType = function (widget, node) {\n const nodeDefStore = useNodeDefStore()\n const nodeDef = nodeDefStore.nodeDefsByName[node.type]\n const input = nodeDef.inputs.getInput(widget.name)\n return input?.type\n }\n\n type ConnectingWidgetLink = {\n subType: 'connectingWidgetLink'\n widget: IWidget\n node: LGraphNode\n link: { node: LGraphNode; slot: number }\n }\n\n document.addEventListener(\n 'litegraph:canvas',\n async (e: CustomEvent) => {\n if (e.detail.subType === 'connectingWidgetLink') {\n const { convertToInput } = await import(\n '@/extensions/core/widgetInputs'\n )\n\n const { node, link, widget } = e.detail\n if (!node || !link || !widget) return\n\n const nodeData = node.constructor.nodeData\n if (!nodeData) return\n const all = {\n ...nodeData?.input?.required,\n ...nodeData?.input?.optional\n }\n const inputSpec = all[widget.name]\n if (!inputSpec) return\n\n const input = convertToInput(node, widget, inputSpec)\n if (!input) return\n\n const originNode = link.node\n\n originNode.connect(link.slot, node, node.inputs.lastIndexOf(input))\n }\n }\n )\n }\n\n #addAfterConfigureHandler() {\n const app = this\n const onConfigure = app.graph.onConfigure\n app.graph.onConfigure = function () {\n // Fire callbacks before the onConfigure, this is used by widget inputs to setup the config\n for (const node of app.graph.nodes) {\n node.onGraphConfigured?.()\n }\n\n const r = onConfigure?.apply(this, arguments)\n\n // Fire after onConfigure, used by primitives to generate widget using input nodes config\n for (const node of app.graph.nodes) {\n node.onAfterGraphConfigured?.()\n }\n\n return r\n }\n }\n\n /**\n * Loads all extensions from the API into the window in parallel\n */\n async #loadExtensions() {\n useExtensionStore().loadDisabledExtensionNames()\n\n const extensions = await api.getExtensions()\n\n // Need to load core extensions first as some custom extensions\n // may depend on them.\n await import('../extensions/core/index')\n await Promise.all(\n extensions\n .filter((extension) => !extension.includes('extensions/core'))\n .map(async (ext) => {\n try {\n await import(/* @vite-ignore */ api.fileURL(ext))\n } catch (error) {\n console.error('Error loading extension', ext, error)\n }\n })\n )\n }\n\n /**\n * Set up the app on the page\n */\n async setup(canvasEl: HTMLCanvasElement) {\n this.canvasEl = canvasEl\n // Show menu container for GraphView.\n this.ui.menuContainer.style.display = 'block'\n\n this.resizeCanvas()\n\n await Promise.all([\n useWorkspaceStore().workflow.syncWorkflows(),\n this.ui.settings.load()\n ])\n await this.#loadExtensions()\n\n this.#addProcessMouseHandler()\n this.#addProcessKeyHandler()\n this.#addConfigureHandler()\n this.#addApiUpdateHandlers()\n this.#addRestoreWorkflowView()\n\n this.graph = new LGraph()\n\n this.#addAfterConfigureHandler()\n\n // Make LGraphCanvas.state shallow reactive so that any change on the root\n // object triggers reactivity.\n this.canvas = new LGraphCanvas(canvasEl, this.graph)\n this.canvas.state = shallowReactive(this.canvas.state)\n\n this.ctx = canvasEl.getContext('2d')\n\n LiteGraph.alt_drag_do_clone_nodes = true\n\n this.graph.start()\n\n // Ensure the canvas fills the window\n this.resizeCanvas()\n window.addEventListener('resize', () => this.resizeCanvas())\n const ro = new ResizeObserver(() => this.resizeCanvas())\n ro.observe(this.bodyTop)\n ro.observe(this.bodyLeft)\n ro.observe(this.bodyRight)\n ro.observe(this.bodyBottom)\n\n await this.#invokeExtensionsAsync('init')\n await this.registerNodes()\n initWidgets(this)\n\n // Load previous workflow\n let restored = false\n try {\n const loadWorkflow = async (json) => {\n if (json) {\n const workflow = JSON.parse(json)\n const workflowName = getStorageValue('Comfy.PreviousWorkflow')\n await this.loadGraphData(workflow, true, true, workflowName)\n return true\n }\n }\n const clientId = api.initialClientId ?? api.clientId\n restored =\n (clientId &&\n (await loadWorkflow(\n sessionStorage.getItem(`workflow:${clientId}`)\n ))) ||\n (await loadWorkflow(localStorage.getItem('workflow')))\n } catch (err) {\n console.error('Error loading previous workflow', err)\n }\n\n // We failed to restore a workflow so load the default\n if (!restored) {\n await this.loadGraphData()\n }\n\n this.#addDrawNodeHandler()\n this.#addDrawGroupsHandler()\n this.#addDropHandler()\n this.#addCopyHandler()\n this.#addPasteHandler()\n this.#addWidgetLinkHandling()\n\n await this.#invokeExtensionsAsync('setup')\n }\n\n resizeCanvas() {\n // Limit minimal scale to 1, see https://github.com/comfyanonymous/ComfyUI/pull/845\n const scale = Math.max(window.devicePixelRatio, 1)\n\n // Clear fixed width and height while calculating rect so it uses 100% instead\n this.canvasEl.height = this.canvasEl.width = NaN\n const { width, height } = this.canvasEl.getBoundingClientRect()\n this.canvasEl.width = Math.round(width * scale)\n this.canvasEl.height = Math.round(height * scale)\n this.canvasEl.getContext('2d').scale(scale, scale)\n this.canvas?.draw(true, true)\n }\n\n private updateVueAppNodeDefs(defs: Record) {\n // Frontend only nodes registered by custom nodes.\n // Example: https://github.com/rgthree/rgthree-comfy/blob/dd534e5384be8cf0c0fa35865afe2126ba75ac55/src_web/comfyui/fast_groups_bypasser.ts#L10\n const rawDefs = Object.fromEntries(\n Object.entries(LiteGraph.registered_node_types).map(([name, node]) => [\n name,\n {\n name,\n display_name: name,\n category: node.category || '__frontend_only__',\n input: { required: {}, optional: {} },\n output: [],\n output_name: [],\n output_is_list: [],\n python_module: 'custom_nodes.frontend_only',\n description: `Frontend only node for ${name}`\n }\n ])\n )\n\n const allNodeDefs = {\n ...rawDefs,\n ...defs,\n ...SYSTEM_NODE_DEFS\n }\n\n const nodeDefStore = useNodeDefStore()\n const nodeDefArray: ComfyNodeDef[] = Object.values(allNodeDefs)\n this.#invokeExtensions('beforeRegisterVueAppNodeDefs', nodeDefArray, this)\n nodeDefStore.updateNodeDefs(nodeDefArray)\n }\n\n #translateNodeDefs(defs: Record) {\n return Object.fromEntries(\n Object.entries(defs).map(([name, def]) => [\n name,\n {\n ...def,\n display_name: st(\n `nodeDefs.${name}.display_name`,\n def.display_name ?? def.name\n ),\n description: def.description\n ? st(`nodeDefs.${name}.description`, def.description)\n : undefined,\n category: def.category\n .split('/')\n .map((category) => st(`nodeCategories.${category}`, category))\n .join('/')\n }\n ])\n )\n }\n\n async #getNodeDefs() {\n return this.#translateNodeDefs(\n await api.getNodeDefs({\n validate: useSettingStore().get('Comfy.Validation.NodeDefs')\n })\n )\n }\n\n /**\n * Registers nodes with the graph\n */\n async registerNodes() {\n // Load node definitions from the backend\n const defs = await this.#getNodeDefs()\n await this.registerNodesFromDefs(defs)\n await this.#invokeExtensionsAsync('registerCustomNodes')\n if (this.vueAppReady) {\n this.updateVueAppNodeDefs(defs)\n }\n }\n\n /**\n * Remove the impl after groupNode jest tests are removed.\n * @deprecated Use useWidgetStore().getWidgetType instead\n */\n getWidgetType(inputData, inputName: string) {\n const type = inputData[0]\n\n if (Array.isArray(type)) {\n return 'COMBO'\n } else if (`${type}:${inputName}` in this.widgets) {\n return `${type}:${inputName}`\n } else if (type in this.widgets) {\n return type\n } else {\n return null\n }\n }\n\n async registerNodeDef(nodeId: string, nodeData: ComfyNodeDef) {\n const self = this\n const node = class ComfyNode extends LGraphNode {\n static comfyClass? = nodeData.name\n // TODO: change to \"title?\" once litegraph.d.ts has been updated\n static title = nodeData.display_name || nodeData.name\n static nodeData? = nodeData\n static category?: string\n\n constructor(title?: string) {\n super(title)\n const requiredInputs = nodeData.input.required\n\n var inputs = nodeData['input']['required']\n if (nodeData['input']['optional'] != undefined) {\n inputs = Object.assign(\n {},\n nodeData['input']['required'],\n nodeData['input']['optional']\n )\n }\n const config: {\n minWidth: number\n minHeight: number\n widget?: IBaseWidget\n } = { minWidth: 1, minHeight: 1 }\n for (const inputName in inputs) {\n const _inputData = inputs[inputName]\n const type = _inputData[0]\n const options = _inputData[1] ?? {}\n const inputData = [type, options]\n const nameKey = `nodeDefs.${normalizeI18nKey(nodeData.name)}.inputs.${normalizeI18nKey(inputName)}.name`\n\n const inputIsRequired = requiredInputs && inputName in requiredInputs\n\n let widgetCreated = true\n const widgetType = self.getWidgetType(inputData, inputName)\n if (widgetType) {\n if (widgetType === 'COMBO') {\n Object.assign(\n config,\n self.widgets.COMBO(this, inputName, inputData, app) || {}\n )\n } else {\n Object.assign(\n config,\n self.widgets[widgetType](this, inputName, inputData, app) || {}\n )\n }\n if (config.widget) {\n config.widget.label = st(nameKey, inputName)\n }\n } else {\n // Node connection inputs\n const shapeOptions = inputIsRequired\n ? {}\n : { shape: LiteGraph.SlotShape.HollowCircle }\n const inputOptions = {\n ...shapeOptions,\n localized_name: st(nameKey, inputName)\n }\n this.addInput(inputName, type, inputOptions)\n widgetCreated = false\n }\n\n if (widgetCreated && config?.widget) {\n config.widget.options ??= {}\n if (!inputIsRequired) {\n config.widget.options.inputIsOptional = true\n }\n if (inputData[1]?.forceInput) {\n config.widget.options.forceInput = true\n }\n if (inputData[1]?.defaultInput) {\n config.widget.options.defaultInput = true\n }\n if (inputData[1]?.advanced) {\n config.widget.advanced = true\n }\n if (inputData[1]?.hidden) {\n config.widget.hidden = true\n }\n }\n }\n\n for (const o in nodeData['output']) {\n let output = nodeData['output'][o]\n if (output instanceof Array) output = 'COMBO'\n const outputName = nodeData['output_name'][o] || output\n const outputIsList = nodeData['output_is_list'][o]\n const shapeOptions = outputIsList\n ? { shape: LiteGraph.GRID_SHAPE }\n : {}\n const nameKey = `nodeDefs.${normalizeI18nKey(nodeData.name)}.outputs.${o}.name`\n const typeKey = `dataTypes.${normalizeI18nKey(output)}`\n const outputOptions = {\n ...shapeOptions,\n // If the output name is different from the output type, use the output name.\n // e.g.\n // - type (\"INT\"); name (\"Positive\") => translate name\n // - type (\"FLOAT\"); name (\"FLOAT\") => translate type\n localized_name:\n output !== outputName\n ? st(nameKey, outputName)\n : st(typeKey, outputName)\n }\n this.addOutput(outputName, output, outputOptions)\n }\n\n const s = this.computeSize()\n s[0] = Math.max(config.minWidth, s[0] * 1.5)\n s[1] = Math.max(config.minHeight, s[1])\n this.size = s\n this.serialize_widgets = true\n\n app.#invokeExtensionsAsync('nodeCreated', this)\n }\n\n configure(data: any) {\n // Keep 'name', 'type', 'shape', and 'localized_name' information from the original node definition.\n const merge = (\n current: Record,\n incoming: Record\n ) => {\n const result = { ...incoming }\n if (current.widget === undefined && incoming.widget !== undefined) {\n // Field must be input as only inputs can be converted\n this.inputs.push(current as INodeInputSlot)\n return incoming\n }\n for (const key of ['name', 'type', 'shape', 'localized_name']) {\n if (current[key] !== undefined) {\n result[key] = current[key]\n }\n }\n return result\n }\n for (const field of ['inputs', 'outputs']) {\n const slots = data[field] ?? []\n data[field] = slots.map((slot, i) =>\n merge(this[field][i] ?? {}, slot)\n )\n }\n super.configure(data)\n }\n }\n node.prototype.comfyClass = nodeData.name\n\n this.#addNodeContextMenuHandler(node)\n this.#addDrawBackgroundHandler(node)\n this.#addNodeKeyHandler(node)\n\n await this.#invokeExtensionsAsync('beforeRegisterNodeDef', node, nodeData)\n LiteGraph.registerNodeType(nodeId, node)\n // Note: Do not move this to the class definition, it will be overwritten\n node.category = nodeData.category\n }\n\n async registerNodesFromDefs(defs: Record) {\n await this.#invokeExtensionsAsync('addCustomNodeDefs', defs)\n\n // Register a node for each definition\n for (const nodeId in defs) {\n this.registerNodeDef(nodeId, defs[nodeId])\n }\n }\n\n loadTemplateData(templateData) {\n if (!templateData?.templates) {\n return\n }\n\n const old = localStorage.getItem('litegrapheditor_clipboard')\n\n var maxY, nodeBottom, node\n\n for (const template of templateData.templates) {\n if (!template?.data) {\n continue\n }\n\n // Check for old clipboard format\n const data = JSON.parse(template.data)\n if (!data.reroutes) {\n deserialiseAndCreate(template.data, app.canvas)\n } else {\n localStorage.setItem('litegrapheditor_clipboard', template.data)\n app.canvas.pasteFromClipboard()\n }\n\n // Move mouse position down to paste the next template below\n\n maxY = false\n\n for (const i in app.canvas.selected_nodes) {\n node = app.canvas.selected_nodes[i]\n\n nodeBottom = node.pos[1] + node.size[1]\n\n if (maxY === false || nodeBottom > maxY) {\n maxY = nodeBottom\n }\n }\n\n app.canvas.graph_mouse[1] = maxY + 50\n }\n\n localStorage.setItem('litegrapheditor_clipboard', old)\n }\n\n #showMissingNodesError(missingNodeTypes: MissingNodeType[]) {\n if (useSettingStore().get('Comfy.Workflow.ShowMissingNodesWarning')) {\n showLoadWorkflowWarning({ missingNodeTypes })\n }\n }\n\n #showMissingModelsError(missingModels, paths) {\n if (useSettingStore().get('Comfy.Workflow.ShowMissingModelsWarning')) {\n showMissingModelsWarning({\n missingModels,\n paths\n })\n }\n }\n\n async loadGraphData(\n graphData?: ComfyWorkflowJSON,\n clean: boolean = true,\n restore_view: boolean = true,\n workflow: string | null | ComfyWorkflow = null,\n { showMissingNodesDialog = true, showMissingModelsDialog = true } = {}\n ) {\n if (clean !== false) {\n this.clean()\n }\n\n let reset_invalid_values = false\n if (!graphData) {\n graphData = defaultGraph\n reset_invalid_values = true\n }\n\n if (typeof structuredClone === 'undefined') {\n graphData = JSON.parse(JSON.stringify(graphData))\n } else {\n graphData = structuredClone(graphData)\n }\n\n if (useSettingStore().get('Comfy.Validation.Workflows')) {\n // TODO: Show validation error in a dialog.\n const validatedGraphData = await validateComfyWorkflow(\n graphData,\n /* onError=*/ (err) => {\n useToastStore().addAlert(err)\n }\n )\n // If the validation failed, use the original graph data.\n // Ideally we should not block users from loading the workflow.\n graphData = validatedGraphData ?? graphData\n }\n\n workflowService.beforeLoadNewGraph()\n\n const missingNodeTypes: MissingNodeType[] = []\n const missingModels = []\n await this.#invokeExtensionsAsync(\n 'beforeConfigureGraph',\n graphData,\n missingNodeTypes\n // TODO: missingModels\n )\n for (let n of graphData.nodes) {\n // Patch T2IAdapterLoader to ControlNetLoader since they are the same node now\n if (n.type == 'T2IAdapterLoader') n.type = 'ControlNetLoader'\n if (n.type == 'ConditioningAverage ') n.type = 'ConditioningAverage' //typo fix\n if (n.type == 'SDV_img2vid_Conditioning')\n n.type = 'SVD_img2vid_Conditioning' //typo fix\n\n // Find missing node types\n if (!(n.type in LiteGraph.registered_node_types)) {\n missingNodeTypes.push(n.type)\n n.type = sanitizeNodeName(n.type)\n }\n }\n if (\n graphData.models &&\n useSettingStore().get('Comfy.Workflow.ShowMissingModelsWarning')\n ) {\n for (const m of graphData.models) {\n const models_available = await useModelStore().getLoadedModelFolder(\n m.directory\n )\n if (models_available === null) {\n // @ts-expect-error\n m.directory_invalid = true\n missingModels.push(m)\n } else if (!(m.name in models_available.models)) {\n missingModels.push(m)\n }\n }\n }\n\n try {\n // @ts-expect-error Discrepancies between zod and litegraph - in progress\n this.graph.configure(graphData)\n if (\n restore_view &&\n useSettingStore().get('Comfy.EnableWorkflowViewRestore') &&\n graphData.extra?.ds\n ) {\n // @ts-expect-error\n // Need to set strict: true for zod to match the type [number, number]\n // https://github.com/colinhacks/zod/issues/3056\n this.canvas.ds.offset = graphData.extra.ds.offset\n this.canvas.ds.scale = graphData.extra.ds.scale\n }\n } catch (error) {\n let errorHint = []\n // Try extracting filename to see if it was caused by an extension script\n const filename =\n error.fileName ||\n (error.stack || '').match(/(\\/extensions\\/.*\\.js)/)?.[1]\n const pos = (filename || '').indexOf('/extensions/')\n if (pos > -1) {\n errorHint.push(\n $el('span', {\n textContent: 'This may be due to the following script:'\n }),\n $el('br'),\n $el('span', {\n style: {\n fontWeight: 'bold'\n },\n textContent: filename.substring(pos)\n })\n )\n }\n\n // Show dialog to let the user know something went wrong loading the data\n this.ui.dialog.show(\n $el('div', [\n $el('p', {\n textContent: 'Loading aborted due to error reloading workflow data'\n }),\n $el('pre', {\n style: { padding: '5px', backgroundColor: 'rgba(255,0,0,0.2)' },\n textContent: error.toString()\n }),\n $el('pre', {\n style: {\n padding: '5px',\n color: '#ccc',\n fontSize: '10px',\n maxHeight: '50vh',\n overflow: 'auto',\n backgroundColor: 'rgba(0,0,0,0.2)'\n },\n textContent: error.stack || 'No stacktrace available'\n }),\n ...errorHint\n ]).outerHTML\n )\n\n return\n }\n for (const node of this.graph.nodes) {\n const size = node.computeSize()\n size[0] = Math.max(node.size[0], size[0])\n size[1] = Math.max(node.size[1], size[1])\n node.size = size\n if (node.widgets) {\n // If you break something in the backend and want to patch workflows in the frontend\n // This is the place to do this\n for (let widget of node.widgets) {\n if (node.type == 'KSampler' || node.type == 'KSamplerAdvanced') {\n if (widget.name == 'sampler_name') {\n if (\n typeof widget.value === 'string' &&\n widget.value.startsWith('sample_')\n ) {\n widget.value = widget.value.slice(7)\n }\n }\n }\n if (\n node.type == 'KSampler' ||\n node.type == 'KSamplerAdvanced' ||\n node.type == 'PrimitiveNode'\n ) {\n if (widget.name == 'control_after_generate') {\n if (widget.value === true) {\n // @ts-expect-error change widget type from boolean to string\n widget.value = 'randomize'\n } else if (widget.value === false) {\n // @ts-expect-error change widget type from boolean to string\n widget.value = 'fixed'\n }\n }\n }\n if (reset_invalid_values) {\n if (widget.type == 'combo') {\n if (\n !widget.options.values.includes(widget.value as string) &&\n widget.options.values.length > 0\n ) {\n widget.value = widget.options.values[0]\n }\n }\n }\n }\n }\n\n this.#invokeExtensions('loadedGraphNode', node)\n }\n\n // TODO: Properly handle if both nodes and models are missing (sequential dialogs?)\n if (missingNodeTypes.length && showMissingNodesDialog) {\n this.#showMissingNodesError(missingNodeTypes)\n }\n if (missingModels.length && showMissingModelsDialog) {\n const paths = await api.getFolderPaths()\n this.#showMissingModelsError(missingModels, paths)\n }\n await this.#invokeExtensionsAsync('afterConfigureGraph', missingNodeTypes)\n // @ts-expect-error zod types issue. Will be fixed after we enable ts-strict\n await workflowService.afterLoadNewGraph(workflow, this.graph.serialize())\n requestAnimationFrame(() => {\n this.graph.setDirtyCanvas(true, true)\n })\n }\n\n /**\n * Serializes a graph using preferred user settings.\n * @param graph The litegraph to serialize.\n * @returns A serialized graph (aka workflow) with preferred user settings.\n */\n serializeGraph(graph: LGraph = this.graph) {\n const sortNodes = useSettingStore().get('Comfy.Workflow.SortNodeIdOnSave')\n return graph.serialize({ sortNodes })\n }\n\n /**\n * Converts the current graph workflow for sending to the API.\n * Note: Node widgets are updated before serialization to prepare queueing.\n * @returns The workflow and node links\n */\n async graphToPrompt(graph = this.graph, clean = true) {\n for (const outerNode of this.graph.computeExecutionOrder(false)) {\n if (outerNode.widgets) {\n for (const widget of outerNode.widgets) {\n // Allow widgets to run callbacks before a prompt has been queued\n // e.g. random seed before every gen\n widget.beforeQueued?.()\n }\n }\n\n const innerNodes = outerNode.getInnerNodes\n ? outerNode.getInnerNodes()\n : [outerNode]\n for (const node of innerNodes) {\n if (node.isVirtualNode) {\n // Don't serialize frontend only nodes but let them make changes\n if (node.applyToGraph) {\n node.applyToGraph()\n }\n }\n }\n }\n\n const workflow = this.serializeGraph(graph)\n\n // Remove localized_name from the workflow\n for (const node of workflow.nodes) {\n for (const slot of node.inputs) {\n delete slot.localized_name\n }\n for (const slot of node.outputs) {\n delete slot.localized_name\n }\n }\n\n const output = {}\n // Process nodes in order of execution\n for (const outerNode of graph.computeExecutionOrder(false)) {\n const skipNode =\n outerNode.mode === LGraphEventMode.NEVER ||\n outerNode.mode === LGraphEventMode.BYPASS\n const innerNodes =\n !skipNode && outerNode.getInnerNodes\n ? outerNode.getInnerNodes()\n : [outerNode]\n for (const node of innerNodes) {\n if (node.isVirtualNode) {\n continue\n }\n\n if (\n node.mode === LGraphEventMode.NEVER ||\n node.mode === LGraphEventMode.BYPASS\n ) {\n // Don't serialize muted nodes\n continue\n }\n\n const inputs = {}\n const widgets = node.widgets\n\n // Store all widget values\n if (widgets) {\n for (const i in widgets) {\n const widget = widgets[i]\n if (!widget.options || widget.options.serialize !== false) {\n inputs[widget.name] = widget.serializeValue\n ? await widget.serializeValue(node, i)\n : widget.value\n }\n }\n }\n\n // Store all node links\n for (let i in node.inputs) {\n let parent = node.getInputNode(i)\n if (parent) {\n let link = node.getInputLink(i)\n while (\n parent.mode === LGraphEventMode.BYPASS ||\n parent.isVirtualNode\n ) {\n let found = false\n if (parent.isVirtualNode) {\n link = parent.getInputLink(link.origin_slot)\n if (link) {\n parent = parent.getInputNode(link.target_slot)\n if (parent) {\n found = true\n }\n }\n } else if (link && parent.mode === LGraphEventMode.BYPASS) {\n let all_inputs = [link.origin_slot]\n if (parent.inputs) {\n all_inputs = all_inputs.concat(Object.keys(parent.inputs))\n for (let parent_input in all_inputs) {\n parent_input = all_inputs[parent_input]\n if (\n parent.inputs[parent_input]?.type === node.inputs[i].type\n ) {\n link = parent.getInputLink(parent_input)\n if (link) {\n parent = parent.getInputNode(parent_input)\n }\n found = true\n break\n }\n }\n }\n }\n\n if (!found) {\n break\n }\n }\n\n if (link) {\n if (parent?.updateLink) {\n link = parent.updateLink(link)\n }\n if (link) {\n inputs[node.inputs[i].name] = [\n String(link.origin_id),\n parseInt(link.origin_slot)\n ]\n }\n }\n }\n }\n\n const node_data = {\n inputs,\n class_type: node.comfyClass\n }\n\n // Ignored by the backend.\n node_data['_meta'] = {\n title: node.title\n }\n\n output[String(node.id)] = node_data\n }\n }\n\n // Remove inputs connected to removed nodes\n if (clean) {\n for (const o in output) {\n for (const i in output[o].inputs) {\n if (\n Array.isArray(output[o].inputs[i]) &&\n output[o].inputs[i].length === 2 &&\n !output[output[o].inputs[i][0]]\n ) {\n delete output[o].inputs[i]\n }\n }\n }\n }\n\n return { workflow, output }\n }\n\n #formatPromptError(error) {\n if (error == null) {\n return '(unknown error)'\n } else if (typeof error === 'string') {\n return error\n } else if (error.stack && error.message) {\n return error.toString()\n } else if (error.response) {\n let message = error.response.error.message\n if (error.response.error.details)\n message += ': ' + error.response.error.details\n for (const [nodeID, nodeError] of Object.entries(\n error.response.node_errors\n )) {\n // @ts-expect-error\n message += '\\n' + nodeError.class_type + ':'\n // @ts-expect-error\n for (const errorReason of nodeError.errors) {\n message +=\n '\\n - ' + errorReason.message + ': ' + errorReason.details\n }\n }\n return message\n }\n return '(unknown error)'\n }\n\n async queuePrompt(number, batchCount = 1) {\n this.#queueItems.push({ number, batchCount })\n\n // Only have one action process the items so each one gets a unique seed correctly\n if (this.#processingQueue) {\n return\n }\n\n this.#processingQueue = true\n this.lastNodeErrors = null\n\n try {\n while (this.#queueItems.length) {\n ;({ number, batchCount } = this.#queueItems.pop())\n\n for (let i = 0; i < batchCount; i++) {\n const p = await this.graphToPrompt()\n\n try {\n // @ts-expect-error Discrepancies between zod and litegraph - in progress\n const res = await api.queuePrompt(number, p)\n this.lastNodeErrors = res.node_errors\n if (this.lastNodeErrors.length > 0) {\n this.canvas.draw(true, true)\n } else {\n try {\n useExecutionStore().storePrompt({\n id: res.prompt_id,\n nodes: Object.keys(p.output),\n workflow: useWorkspaceStore().workflow\n .activeWorkflow as ComfyWorkflow\n })\n } catch (error) {}\n }\n } catch (error) {\n const formattedError = this.#formatPromptError(error)\n this.ui.dialog.show(formattedError)\n if (error.response) {\n this.lastNodeErrors = error.response.node_errors\n this.canvas.draw(true, true)\n }\n break\n }\n\n for (const n of p.workflow.nodes) {\n const node = this.graph.getNodeById(n.id)\n if (node.widgets) {\n for (const widget of node.widgets) {\n // Allow widgets to run callbacks after a prompt has been queued\n // e.g. random seed after every gen\n // @ts-expect-error\n if (widget.afterQueued) {\n // @ts-expect-error\n widget.afterQueued()\n }\n }\n }\n }\n\n this.canvas.draw(true, true)\n await this.ui.queue.update()\n }\n }\n } finally {\n this.#processingQueue = false\n }\n api.dispatchCustomEvent('promptQueued', { number, batchCount })\n return !this.lastNodeErrors\n }\n\n showErrorOnFileLoad(file) {\n this.ui.dialog.show(\n $el('div', [\n $el('p', { textContent: `Unable to find workflow in ${file.name}` })\n ]).outerHTML\n )\n }\n\n /**\n * Loads workflow data from the specified file\n * @param {File} file\n */\n async handleFile(file) {\n const removeExt = (f) => {\n if (!f) return f\n const p = f.lastIndexOf('.')\n if (p === -1) return f\n return f.substring(0, p)\n }\n const fileName = removeExt(file.name)\n if (file.type === 'image/png') {\n const pngInfo = await getPngMetadata(file)\n if (pngInfo?.workflow) {\n await this.loadGraphData(\n JSON.parse(pngInfo.workflow),\n true,\n true,\n fileName\n )\n } else if (pngInfo?.prompt) {\n this.loadApiJson(JSON.parse(pngInfo.prompt), fileName)\n } else if (pngInfo?.parameters) {\n // Note: Not putting this in `importA1111` as it is mostly not used\n // by external callers, and `importA1111` has no access to `app`.\n workflowService.beforeLoadNewGraph()\n importA1111(this.graph, pngInfo.parameters)\n // @ts-expect-error zod type issue on ComfyWorkflowJSON. Should be resolved after enabling ts-strict globally.\n workflowService.afterLoadNewGraph(fileName, this.serializeGraph())\n } else {\n this.showErrorOnFileLoad(file)\n }\n } else if (file.type === 'image/webp') {\n const pngInfo = await getWebpMetadata(file)\n // Support loading workflows from that webp custom node.\n const workflow = pngInfo?.workflow || pngInfo?.Workflow\n const prompt = pngInfo?.prompt || pngInfo?.Prompt\n\n if (workflow) {\n this.loadGraphData(JSON.parse(workflow), true, true, fileName)\n } else if (prompt) {\n this.loadApiJson(JSON.parse(prompt), fileName)\n } else {\n this.showErrorOnFileLoad(file)\n }\n } else if (file.type === 'audio/flac' || file.type === 'audio/x-flac') {\n const pngInfo = await getFlacMetadata(file)\n const workflow = pngInfo?.workflow || pngInfo?.Workflow\n const prompt = pngInfo?.prompt || pngInfo?.Prompt\n\n if (workflow) {\n this.loadGraphData(JSON.parse(workflow), true, true, fileName)\n } else if (prompt) {\n this.loadApiJson(JSON.parse(prompt), fileName)\n } else {\n this.showErrorOnFileLoad(file)\n }\n } else if (\n file.type === 'application/json' ||\n file.name?.endsWith('.json')\n ) {\n const reader = new FileReader()\n reader.onload = async () => {\n const readerResult = reader.result as string\n const jsonContent = JSON.parse(readerResult)\n if (jsonContent?.templates) {\n this.loadTemplateData(jsonContent)\n } else if (this.isApiJson(jsonContent)) {\n this.loadApiJson(jsonContent, fileName)\n } else {\n await this.loadGraphData(\n JSON.parse(readerResult),\n true,\n false,\n fileName\n )\n }\n }\n reader.readAsText(file)\n } else if (\n file.name?.endsWith('.latent') ||\n file.name?.endsWith('.safetensors')\n ) {\n const info = await getLatentMetadata(file)\n // TODO define schema to LatentMetadata\n // @ts-expect-error\n if (info.workflow) {\n await this.loadGraphData(\n // @ts-expect-error\n JSON.parse(info.workflow),\n true,\n true,\n fileName\n )\n // @ts-expect-error\n } else if (info.prompt) {\n // @ts-expect-error\n this.loadApiJson(JSON.parse(info.prompt))\n } else {\n this.showErrorOnFileLoad(file)\n }\n } else {\n this.showErrorOnFileLoad(file)\n }\n }\n\n isApiJson(data) {\n // @ts-expect-error\n return Object.values(data).every((v) => v.class_type)\n }\n\n loadApiJson(apiData, fileName: string) {\n workflowService.beforeLoadNewGraph()\n\n const missingNodeTypes = Object.values(apiData).filter(\n // @ts-expect-error\n (n) => !LiteGraph.registered_node_types[n.class_type]\n )\n if (missingNodeTypes.length) {\n this.#showMissingNodesError(\n // @ts-expect-error\n missingNodeTypes.map((t) => t.class_type)\n )\n return\n }\n\n const ids = Object.keys(apiData)\n app.graph.clear()\n for (const id of ids) {\n const data = apiData[id]\n const node = LiteGraph.createNode(data.class_type)\n node.id = isNaN(+id) ? id : +id\n node.title = data._meta?.title ?? node.title\n app.graph.add(node)\n }\n\n for (const id of ids) {\n const data = apiData[id]\n const node = app.graph.getNodeById(id)\n for (const input in data.inputs ?? {}) {\n const value = data.inputs[input]\n if (value instanceof Array) {\n const [fromId, fromSlot] = value\n const fromNode = app.graph.getNodeById(fromId)\n let toSlot = node.inputs?.findIndex((inp) => inp.name === input)\n if (toSlot == null || toSlot === -1) {\n try {\n // Target has no matching input, most likely a converted widget\n const widget = node.widgets?.find((w) => w.name === input)\n // @ts-expect-error\n if (widget && node.convertWidgetToInput?.(widget)) {\n toSlot = node.inputs?.length - 1\n }\n } catch (error) {}\n }\n if (toSlot != null || toSlot !== -1) {\n fromNode.connect(fromSlot, node, toSlot)\n }\n } else {\n const widget = node.widgets?.find((w) => w.name === input)\n if (widget) {\n widget.value = value\n widget.callback?.(value)\n }\n }\n }\n }\n app.graph.arrange()\n\n for (const id of ids) {\n const data = apiData[id]\n const node = app.graph.getNodeById(id)\n for (const input in data.inputs ?? {}) {\n const value = data.inputs[input]\n if (value instanceof Array) {\n const [fromId, fromSlot] = value\n const fromNode = app.graph.getNodeById(fromId)\n let toSlot = node.inputs?.findIndex((inp) => inp.name === input)\n if (toSlot == null || toSlot === -1) {\n try {\n // Target has no matching input, most likely a converted widget\n const widget = node.widgets?.find((w) => w.name === input)\n // @ts-expect-error\n if (widget && node.convertWidgetToInput?.(widget)) {\n toSlot = node.inputs?.length - 1\n }\n } catch (error) {}\n }\n if (toSlot != null || toSlot !== -1) {\n fromNode.connect(fromSlot, node, toSlot)\n }\n } else {\n const widget = node.widgets?.find((w) => w.name === input)\n if (widget) {\n widget.value = value\n widget.callback?.(value)\n }\n }\n }\n }\n\n app.graph.arrange()\n\n // @ts-expect-error zod type issue on ComfyWorkflowJSON. Should be resolved after enabling ts-strict globally.\n workflowService.afterLoadNewGraph(fileName, this.serializeGraph())\n }\n\n /**\n * Registers a Comfy web extension with the app\n * @param {ComfyExtension} extension\n */\n registerExtension(extension: ComfyExtension) {\n if (this.vueAppReady) {\n useExtensionStore().registerExtension(extension)\n } else {\n // For jest testing.\n this.extensions.push(extension)\n }\n }\n\n /**\n * Refresh combo list on whole nodes\n */\n async refreshComboInNodes() {\n const requestToastMessage: ToastMessageOptions = {\n severity: 'info',\n summary: 'Update',\n detail: 'Update requested'\n }\n if (this.vueAppReady) {\n useToastStore().add(requestToastMessage)\n }\n\n const defs = await this.#getNodeDefs()\n for (const nodeId in defs) {\n this.registerNodeDef(nodeId, defs[nodeId])\n }\n for (let nodeNum in this.graph.nodes) {\n const node = this.graph.nodes[nodeNum]\n const def = defs[node.type]\n // Allow primitive nodes to handle refresh\n node.refreshComboInNode?.(defs)\n\n if (!def) continue\n\n for (const widgetNum in node.widgets) {\n const widget = node.widgets[widgetNum]\n if (\n widget.type == 'combo' &&\n def['input']['required'][widget.name] !== undefined\n ) {\n widget.options.values = def['input']['required'][widget.name][0]\n }\n }\n }\n\n await this.#invokeExtensionsAsync('refreshComboInNodes', defs)\n\n if (this.vueAppReady) {\n this.updateVueAppNodeDefs(defs)\n useToastStore().remove(requestToastMessage)\n useToastStore().add({\n severity: 'success',\n summary: 'Updated',\n detail: 'Node definitions updated',\n life: 1000\n })\n }\n }\n\n resetView() {\n app.canvas.ds.scale = 1\n app.canvas.ds.offset = [0, 0]\n app.graph.setDirtyCanvas(true, true)\n }\n\n /**\n * Clean current state\n */\n clean() {\n this.nodeOutputs = {}\n this.nodePreviewImages = {}\n this.lastNodeErrors = null\n this.lastExecutionError = null\n }\n\n addNodeOnGraph(\n nodeDef: ComfyNodeDef | ComfyNodeDefImpl,\n options: Record = {}\n ): LGraphNode {\n const node = LiteGraph.createNode(\n nodeDef.name,\n nodeDef.display_name,\n options\n )\n this.graph.add(node)\n return node\n }\n\n clientPosToCanvasPos(pos: Vector2): Vector2 {\n const rect = this.canvasContainer.getBoundingClientRect()\n const containerOffsets = [rect.left, rect.top]\n return _.zip(pos, this.canvas.ds.offset, containerOffsets).map(\n ([p, o1, o2]) => (p - o2) / this.canvas.ds.scale - o1\n ) as Vector2\n }\n\n canvasPosToClientPos(pos: Vector2): Vector2 {\n const rect = this.canvasContainer.getBoundingClientRect()\n const containerOffsets = [rect.left, rect.top]\n return _.zip(pos, this.canvas.ds.offset, containerOffsets).map(\n ([p, o1, o2]) => (p + o1) * this.canvas.ds.scale + o2\n ) as Vector2\n }\n\n getCanvasCenter(): Vector2 {\n const dpi = Math.max(window.devicePixelRatio ?? 1, 1)\n const [x, y, w, h] = app.canvas.ds.visible_area\n return [x + w / dpi / 2, y + h / dpi / 2]\n }\n\n public goToNode(nodeId: NodeId) {\n const graphNode = this.graph.getNodeById(nodeId)\n if (!graphNode) return\n this.canvas.animateToBounds(graphNode.boundingRect)\n }\n}\n\nexport const app = new ComfyApp()\n","import type { Keybinding } from '@/types/keyBindingTypes'\nimport { NodeBadgeMode } from '@/types/nodeSource'\nimport { LinkReleaseTriggerAction } from '@/types/searchBoxTypes'\nimport type { SettingParams } from '@/types/settingTypes'\nimport { LinkMarkerShape } from '@comfyorg/litegraph'\nimport { LiteGraph } from '@comfyorg/litegraph'\n\nexport const CORE_SETTINGS: SettingParams[] = [\n {\n id: 'Comfy.Validation.Workflows',\n name: 'Validate workflows',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.NodeSearchBoxImpl',\n category: ['Comfy', 'Node Search Box', 'Implementation'],\n experimental: true,\n name: 'Node search box implementation',\n type: 'combo',\n options: ['default', 'litegraph (legacy)'],\n defaultValue: 'default'\n },\n {\n id: 'Comfy.LinkRelease.Action',\n category: ['LiteGraph', 'LinkRelease', 'Action'],\n name: 'Action on link release (No modifier)',\n type: 'combo',\n options: Object.values(LinkReleaseTriggerAction),\n defaultValue: LinkReleaseTriggerAction.CONTEXT_MENU\n },\n {\n id: 'Comfy.LinkRelease.ActionShift',\n category: ['LiteGraph', 'LinkRelease', 'ActionShift'],\n name: 'Action on link release (Shift)',\n type: 'combo',\n options: Object.values(LinkReleaseTriggerAction),\n defaultValue: LinkReleaseTriggerAction.SEARCH_BOX\n },\n {\n id: 'Comfy.NodeSearchBoxImpl.NodePreview',\n category: ['Comfy', 'Node Search Box', 'NodePreview'],\n name: 'Node preview',\n tooltip: 'Only applies to the default implementation',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.NodeSearchBoxImpl.ShowCategory',\n category: ['Comfy', 'Node Search Box', 'ShowCategory'],\n name: 'Show node category in search results',\n tooltip: 'Only applies to the default implementation',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.NodeSearchBoxImpl.ShowIdName',\n category: ['Comfy', 'Node Search Box', 'ShowIdName'],\n name: 'Show node id name in search results',\n tooltip: 'Only applies to the default implementation',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.NodeSearchBoxImpl.ShowNodeFrequency',\n category: ['Comfy', 'Node Search Box', 'ShowNodeFrequency'],\n name: 'Show node frequency in search results',\n tooltip: 'Only applies to the default implementation',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.Sidebar.Location',\n category: ['Appearance', 'Sidebar', 'Location'],\n name: 'Sidebar location',\n type: 'combo',\n options: ['left', 'right'],\n defaultValue: 'left'\n },\n {\n id: 'Comfy.Sidebar.Size',\n category: ['Appearance', 'Sidebar', 'Size'],\n name: 'Sidebar size',\n type: 'combo',\n options: ['normal', 'small'],\n defaultValue: () => (window.innerWidth < 1600 ? 'small' : 'normal')\n },\n {\n id: 'Comfy.TextareaWidget.FontSize',\n category: ['Appearance', 'Node Widget', 'TextareaWidget', 'FontSize'],\n name: 'Textarea widget font size',\n type: 'slider',\n defaultValue: 10,\n attrs: {\n min: 8,\n max: 24\n }\n },\n {\n id: 'Comfy.TextareaWidget.Spellcheck',\n category: ['Comfy', 'Node Widget', 'TextareaWidget', 'Spellcheck'],\n name: 'Textarea widget spellcheck',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.Workflow.SortNodeIdOnSave',\n name: 'Sort node IDs when saving workflow',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.Graph.CanvasInfo',\n category: ['LiteGraph', 'Canvas', 'CanvasInfo'],\n name: 'Show canvas info on bottom left corner (fps, etc.)',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Node.ShowDeprecated',\n name: 'Show deprecated nodes in search',\n tooltip:\n 'Deprecated nodes are hidden by default in the UI, but remain functional in existing workflows that use them.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.Node.ShowExperimental',\n name: 'Show experimental nodes in search',\n tooltip:\n 'Experimental nodes are marked as such in the UI and may be subject to significant changes or removal in future versions. Use with caution in production workflows',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Node.Opacity',\n category: ['Appearance', 'Node', 'Opacity'],\n name: 'Node opacity',\n type: 'slider',\n defaultValue: 1,\n attrs: {\n min: 0.01,\n max: 1,\n step: 0.01\n }\n },\n {\n id: 'Comfy.Workflow.ShowMissingNodesWarning',\n name: 'Show missing nodes warning',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Workflow.ShowMissingModelsWarning',\n name: 'Show missing models warning',\n type: 'boolean',\n defaultValue: false,\n experimental: true\n },\n {\n id: 'Comfy.Graph.ZoomSpeed',\n category: ['LiteGraph', 'Canvas', 'ZoomSpeed'],\n name: 'Canvas zoom speed',\n type: 'slider',\n defaultValue: 1.1,\n attrs: {\n min: 1.01,\n max: 2.5,\n step: 0.01\n }\n },\n // Bookmarks are stored in the settings store.\n // Bookmarks are in format of category/display_name. e.g. \"conditioning/CLIPTextEncode\"\n {\n id: 'Comfy.NodeLibrary.Bookmarks',\n name: 'Node library bookmarks with display name (deprecated)',\n type: 'hidden',\n defaultValue: [],\n deprecated: true\n },\n {\n id: 'Comfy.NodeLibrary.Bookmarks.V2',\n name: 'Node library bookmarks v2 with unique name',\n type: 'hidden',\n defaultValue: []\n },\n // Stores mapping from bookmark folder name to its customization.\n {\n id: 'Comfy.NodeLibrary.BookmarksCustomization',\n name: 'Node library bookmarks customization',\n type: 'hidden',\n defaultValue: {}\n },\n // Hidden setting used by the queue for how to fit images\n {\n id: 'Comfy.Queue.ImageFit',\n name: 'Queue image fit',\n type: 'hidden',\n defaultValue: 'cover'\n },\n {\n id: 'Comfy.GroupSelectedNodes.Padding',\n category: ['LiteGraph', 'Group', 'Padding'],\n name: 'Group selected nodes padding',\n type: 'slider',\n defaultValue: 10,\n attrs: {\n min: 0,\n max: 100\n }\n },\n {\n id: 'Comfy.Node.DoubleClickTitleToEdit',\n category: ['LiteGraph', 'Node', 'DoubleClickTitleToEdit'],\n name: 'Double click node title to edit',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Group.DoubleClickTitleToEdit',\n category: ['LiteGraph', 'Group', 'DoubleClickTitleToEdit'],\n name: 'Double click group title to edit',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Window.UnloadConfirmation',\n name: 'Show confirmation when closing window',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.TreeExplorer.ItemPadding',\n category: ['Appearance', 'Tree Explorer', 'ItemPadding'],\n name: 'Tree explorer item padding',\n type: 'slider',\n defaultValue: 2,\n attrs: {\n min: 0,\n max: 8,\n step: 1\n }\n },\n {\n id: 'Comfy.ModelLibrary.AutoLoadAll',\n name: 'Automatically load all model folders',\n tooltip:\n 'If true, all folders will load as soon as you open the model library (this may cause delays while it loads). If false, root level model folders will only load once you click on them.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.ModelLibrary.NameFormat',\n name: 'What name to display in the model library tree view',\n tooltip:\n 'Select \"filename\" to render a simplified view of the raw filename (without directory or \".safetensors\" extension) in the model list. Select \"title\" to display the configurable model metadata title.',\n type: 'combo',\n options: ['filename', 'title'],\n defaultValue: 'title'\n },\n {\n id: 'Comfy.Locale',\n name: 'Language',\n type: 'combo',\n options: [\n { value: 'en', text: 'English' },\n { value: 'zh', text: '中文' },\n { value: 'ru', text: 'Русский' },\n { value: 'ja', text: '日本語' },\n { value: 'ko', text: '한국어' }\n ],\n defaultValue: () => navigator.language.split('-')[0] || 'en'\n },\n {\n id: 'Comfy.NodeBadge.NodeSourceBadgeMode',\n category: ['LiteGraph', 'Node', 'NodeSourceBadgeMode'],\n name: 'Node source badge mode',\n type: 'combo',\n options: Object.values(NodeBadgeMode),\n defaultValue: NodeBadgeMode.HideBuiltIn\n },\n {\n id: 'Comfy.NodeBadge.NodeIdBadgeMode',\n category: ['LiteGraph', 'Node', 'NodeIdBadgeMode'],\n name: 'Node ID badge mode',\n type: 'combo',\n options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll],\n defaultValue: NodeBadgeMode.ShowAll\n },\n {\n id: 'Comfy.NodeBadge.NodeLifeCycleBadgeMode',\n category: ['LiteGraph', 'Node', 'NodeLifeCycleBadgeMode'],\n name: 'Node life cycle badge mode',\n type: 'combo',\n options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll],\n defaultValue: NodeBadgeMode.ShowAll\n },\n {\n id: 'Comfy.ConfirmClear',\n category: ['Comfy', 'Workflow', 'ConfirmClear'],\n name: 'Require confirmation when clearing workflow',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.PromptFilename',\n category: ['Comfy', 'Workflow', 'PromptFilename'],\n name: 'Prompt for filename when saving workflow',\n type: 'boolean',\n defaultValue: true\n },\n /**\n * file format for preview\n *\n * format;quality\n *\n * ex)\n * webp;50 -> webp, quality 50\n * jpeg;80 -> rgb, jpeg, quality 80\n *\n * @type {string}\n */\n {\n id: 'Comfy.PreviewFormat',\n category: ['LiteGraph', 'Node Widget', 'PreviewFormat'],\n name: 'Preview image format',\n tooltip:\n 'When displaying a preview in the image widget, convert it to a lightweight image, e.g. webp, jpeg, webp;50, etc.',\n type: 'text',\n defaultValue: ''\n },\n {\n id: 'Comfy.DisableSliders',\n category: ['LiteGraph', 'Node Widget', 'DisableSliders'],\n name: 'Disable node widget sliders',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.DisableFloatRounding',\n category: ['LiteGraph', 'Node Widget', 'DisableFloatRounding'],\n name: 'Disable default float widget rounding.',\n tooltip:\n '(requires page reload) Cannot disable round when round is set by the node in the backend.',\n type: 'boolean',\n defaultValue: false\n },\n {\n id: 'Comfy.FloatRoundingPrecision',\n category: ['LiteGraph', 'Node Widget', 'FloatRoundingPrecision'],\n name: 'Float widget rounding decimal places [0 = auto].',\n tooltip: '(requires page reload)',\n type: 'slider',\n attrs: {\n min: 0,\n max: 6,\n step: 1\n },\n defaultValue: 0\n },\n {\n id: 'Comfy.EnableTooltips',\n category: ['LiteGraph', 'Node', 'EnableTooltips'],\n name: 'Enable Tooltips',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.DevMode',\n name: 'Enable dev mode options (API save, etc.)',\n type: 'boolean',\n defaultValue: false,\n onChange: (value) => {\n const element = document.getElementById('comfy-dev-save-api-button')\n if (element) {\n element.style.display = value ? 'flex' : 'none'\n }\n }\n },\n {\n id: 'Comfy.UseNewMenu',\n category: ['Comfy', 'Menu', 'UseNewMenu'],\n defaultValue: 'Top',\n name: 'Use new menu',\n type: 'combo',\n options: ['Disabled', 'Top', 'Bottom'],\n migrateDeprecatedValue: (value: string) => {\n // Floating is now supported by dragging the docked actionbar off.\n if (value === 'Floating') {\n return 'Top'\n }\n return value\n }\n },\n {\n id: 'Comfy.Workflow.WorkflowTabsPosition',\n name: 'Opened workflows position',\n type: 'combo',\n options: ['Sidebar', 'Topbar'],\n defaultValue: 'Topbar'\n },\n {\n id: 'Comfy.Graph.CanvasMenu',\n category: ['LiteGraph', 'Canvas', 'CanvasMenu'],\n name: 'Show graph canvas menu',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.QueueButton.BatchCountLimit',\n name: 'Batch count limit',\n tooltip:\n 'The maximum number of tasks added to the queue at one button click',\n type: 'number',\n defaultValue: 100,\n versionAdded: '1.3.5'\n },\n {\n id: 'Comfy.Keybinding.UnsetBindings',\n name: 'Keybindings unset by the user',\n type: 'hidden',\n defaultValue: [] as Keybinding[],\n versionAdded: '1.3.7'\n },\n {\n id: 'Comfy.Keybinding.NewBindings',\n name: 'Keybindings set by the user',\n type: 'hidden',\n defaultValue: [] as Keybinding[],\n versionAdded: '1.3.7'\n },\n {\n id: 'Comfy.Extension.Disabled',\n name: 'Disabled extension names',\n type: 'hidden',\n defaultValue: [] as string[],\n versionAdded: '1.3.11'\n },\n {\n id: 'Comfy.Settings.ExtensionPanel',\n name: 'Show extension panel in settings dialog',\n type: 'boolean',\n defaultValue: false,\n experimental: true,\n versionAdded: '1.3.11'\n },\n {\n id: 'Comfy.Validation.NodeDefs',\n name: 'Validate node definitions (slow)',\n type: 'boolean',\n tooltip:\n 'Recommended for node developers. This will validate all node definitions on startup.',\n defaultValue: false,\n versionAdded: '1.3.14'\n },\n {\n id: 'Comfy.LinkRenderMode',\n category: ['LiteGraph', 'Graph', 'LinkRenderMode'],\n name: 'Link Render Mode',\n defaultValue: 2,\n type: 'combo',\n options: [\n { value: LiteGraph.STRAIGHT_LINK, text: 'Straight' },\n { value: LiteGraph.LINEAR_LINK, text: 'Linear' },\n { value: LiteGraph.SPLINE_LINK, text: 'Spline' },\n { value: LiteGraph.HIDDEN_LINK, text: 'Hidden' }\n ]\n },\n {\n id: 'Comfy.Node.AutoSnapLinkToSlot',\n category: ['LiteGraph', 'Node', 'AutoSnapLinkToSlot'],\n name: 'Auto snap link to node slot',\n tooltip:\n 'When dragging a link over a node, the link automatically snap to a viable input slot on the node',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.3.29'\n },\n {\n id: 'Comfy.Node.SnapHighlightsNode',\n category: ['LiteGraph', 'Node', 'SnapHighlightsNode'],\n name: 'Snap highlights node',\n tooltip:\n 'When dragging a link over a node with viable input slot, highlight the node',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.3.29'\n },\n {\n id: 'Comfy.Node.BypassAllLinksOnDelete',\n category: ['LiteGraph', 'Node', 'BypassAllLinksOnDelete'],\n name: 'Keep all links when deleting nodes',\n tooltip:\n 'When deleting a node, attempt to reconnect all of its input and output links (bypassing the deleted node)',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.3.40'\n },\n {\n id: 'Comfy.Node.MiddleClickRerouteNode',\n category: ['LiteGraph', 'Node', 'MiddleClickRerouteNode'],\n name: 'Middle-click creates a new Reroute node',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.3.42'\n },\n {\n id: 'Comfy.RerouteBeta',\n category: ['LiteGraph', 'RerouteBeta'],\n name: 'Opt-in to the reroute beta test',\n tooltip:\n 'Enables the new native reroutes.\\n\\nReroutes can be added by holding alt and dragging from a link line, or on the link menu.\\n\\nDisabling this option is non-destructive - reroutes are hidden.',\n experimental: true,\n type: 'boolean',\n defaultValue: false,\n versionAdded: '1.3.42'\n },\n {\n id: 'Comfy.Graph.LinkMarkers',\n category: ['LiteGraph', 'Link', 'LinkMarkers'],\n name: 'Link midpoint markers',\n defaultValue: LinkMarkerShape.Circle,\n type: 'combo',\n options: [\n { value: LinkMarkerShape.None, text: 'None' },\n { value: LinkMarkerShape.Circle, text: 'Circle' },\n { value: LinkMarkerShape.Arrow, text: 'Arrow' }\n ],\n versionAdded: '1.3.42'\n },\n {\n id: 'Comfy.DOMClippingEnabled',\n category: ['LiteGraph', 'Node', 'DOMClippingEnabled'],\n name: 'Enable DOM element clipping (enabling may reduce performance)',\n type: 'boolean',\n defaultValue: true\n },\n {\n id: 'Comfy.Graph.CtrlShiftZoom',\n category: ['LiteGraph', 'Canvas', 'CtrlShiftZoom'],\n name: 'Enable fast-zoom shortcut (Ctrl + Shift + Drag)',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.4.0'\n },\n {\n id: 'Comfy.Pointer.ClickDrift',\n category: ['LiteGraph', 'Pointer', 'ClickDrift'],\n name: 'Pointer click drift (maximum distance)',\n tooltip:\n 'If the pointer moves more than this distance while holding a button down, it is considered dragging (rather than clicking).\\n\\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.',\n experimental: true,\n type: 'slider',\n attrs: {\n min: 0,\n max: 20,\n step: 1\n },\n defaultValue: 6,\n versionAdded: '1.4.3'\n },\n {\n id: 'Comfy.Pointer.ClickBufferTime',\n category: ['LiteGraph', 'Pointer', 'ClickBufferTime'],\n name: 'Pointer click drift delay',\n tooltip:\n 'After pressing a pointer button down, this is the maximum time (in milliseconds) that pointer movement can be ignored for.\\n\\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.',\n experimental: true,\n type: 'slider',\n attrs: {\n min: 0,\n max: 1000,\n step: 25\n },\n defaultValue: 150,\n versionAdded: '1.4.3'\n },\n {\n id: 'Comfy.Pointer.DoubleClickTime',\n category: ['LiteGraph', 'Pointer', 'DoubleClickTime'],\n name: 'Double click interval (maximum)',\n tooltip:\n 'The maximum time in milliseconds between the two clicks of a double-click. Increasing this value may assist if double-clicks are sometimes not registered.',\n type: 'slider',\n attrs: {\n min: 100,\n max: 1000,\n step: 50\n },\n defaultValue: 300,\n versionAdded: '1.4.3'\n },\n {\n id: 'Comfy.SnapToGrid.GridSize',\n category: ['LiteGraph', 'Canvas', 'GridSize'],\n name: 'Snap to grid size',\n type: 'slider',\n attrs: {\n min: 1,\n max: 500\n },\n tooltip:\n 'When dragging and resizing nodes while holding shift they will be aligned to the grid, this controls the size of that grid.',\n defaultValue: LiteGraph.CANVAS_GRID_SIZE\n },\n // Keep the 'pysssss.SnapToGrid' setting id so we don't need to migrate setting values.\n // Using a new setting id can cause existing users to lose their existing settings.\n {\n id: 'pysssss.SnapToGrid',\n category: ['LiteGraph', 'Canvas', 'AlwaysSnapToGrid'],\n name: 'Always snap to grid',\n type: 'boolean',\n defaultValue: false,\n versionAdded: '1.3.13'\n },\n {\n id: 'Comfy.Server.ServerConfigValues',\n name: 'Server config values for frontend display',\n tooltip: 'Server config values used for frontend display only',\n type: 'hidden',\n // Mapping from server config id to value.\n defaultValue: {} as Record,\n versionAdded: '1.4.8'\n },\n {\n id: 'Comfy.Server.LaunchArgs',\n name: 'Server launch arguments',\n tooltip:\n 'These are the actual arguments that are passed to the server when it is launched.',\n type: 'hidden',\n defaultValue: {} as Record,\n versionAdded: '1.4.8'\n },\n {\n id: 'Comfy.Queue.MaxHistoryItems',\n name: 'Queue history size',\n tooltip: 'The maximum number of tasks that show in the queue history.',\n type: 'slider',\n attrs: {\n min: 16,\n max: 256,\n step: 16\n },\n defaultValue: 64,\n versionAdded: '1.4.12'\n },\n {\n id: 'LiteGraph.Canvas.MaximumFps',\n name: 'Maxium FPS',\n tooltip:\n 'The maximum frames per second that the canvas is allowed to render. Caps GPU usage at the cost of smoothness. If 0, the screen refresh rate is used. Default: 0',\n type: 'slider',\n attrs: {\n min: 0,\n max: 120\n },\n defaultValue: 0,\n versionAdded: '1.5.1'\n },\n {\n id: 'Comfy.EnableWorkflowViewRestore',\n category: ['Comfy', 'Workflow', 'EnableWorkflowViewRestore'],\n name: 'Save and restore canvas position and zoom level in workflows',\n type: 'boolean',\n defaultValue: true,\n versionModified: '1.5.4'\n },\n {\n id: 'Comfy.Workflow.ConfirmDelete',\n name: 'Show confirmation when deleting workflows',\n type: 'boolean',\n defaultValue: true,\n versionAdded: '1.5.6'\n }\n]\n","/**\n * TODO: Migrate scripts/ui/settings.ts here\n *\n * Currently the reactive settings act as a proxy of the legacy settings.\n * Every time a setting is changed, the settingStore dispatch the change to the\n * legacy settings. Every time the legacy settings are changed, the legacy\n * settings directly updates the settingStore.settingValues.\n */\n\nimport { ref, computed } from 'vue'\nimport { defineStore } from 'pinia'\nimport { app } from '@/scripts/app'\nimport { ComfySettingsDialog } from '@/scripts/ui/settings'\nimport type { Settings } from '@/types/apiTypes'\nimport type { SettingParams } from '@/types/settingTypes'\nimport type { TreeNode } from 'primevue/treenode'\nimport type { ComfyExtension } from '@/types/comfy'\nimport { buildTree } from '@/utils/treeUtil'\nimport { CORE_SETTINGS } from '@/constants/coreSettings'\n\nexport interface SettingTreeNode extends TreeNode {\n data?: SettingParams\n}\n\nexport const useSettingStore = defineStore('setting', () => {\n const settingValues = ref>({})\n const settings = ref>({})\n\n const settingTree = computed(() => {\n const root = buildTree(\n Object.values(settings.value).filter(\n (setting: SettingParams) => setting.type !== 'hidden'\n ),\n (setting: SettingParams) => setting.category || setting.id.split('.')\n )\n\n const floatingSettings = (root.children ?? []).filter((node) => node.leaf)\n if (floatingSettings.length) {\n root.children = (root.children ?? []).filter((node) => !node.leaf)\n root.children.push({\n key: 'Other',\n label: 'Other',\n leaf: false,\n children: floatingSettings\n })\n }\n\n return root\n })\n\n function addSettings(settingsDialog: ComfySettingsDialog) {\n for (const id in settingsDialog.settingsLookup) {\n const value = settingsDialog.getSettingValue(id)\n settingValues.value[id] = value\n }\n settings.value = settingsDialog.settingsParamLookup\n\n CORE_SETTINGS.forEach((setting: SettingParams) => {\n settingsDialog.addSetting(setting)\n })\n }\n\n function loadExtensionSettings(extension: ComfyExtension) {\n extension.settings?.forEach((setting: SettingParams) => {\n app.ui.settings.addSetting(setting)\n })\n }\n\n function exists(key: string) {\n return settingValues.value[key] !== undefined\n }\n\n async function set(key: K, value: Settings[K]) {\n settingValues.value[key] = value\n await app.ui.settings.setSettingValueAsync(key, value)\n }\n\n function get(key: K): Settings[K] {\n return (\n settingValues.value[key] ?? app.ui.settings.getSettingDefaultValue(key)\n )\n }\n\n return {\n settingValues,\n settings,\n settingTree,\n addSettings,\n loadExtensionSettings,\n set,\n get,\n exists\n }\n})\n","import type { Keybinding } from '@/types/keyBindingTypes'\n\nexport const CORE_KEYBINDINGS: Keybinding[] = [\n {\n combo: {\n ctrl: true,\n key: 'Enter'\n },\n commandId: 'Comfy.QueuePrompt'\n },\n {\n combo: {\n ctrl: true,\n shift: true,\n key: 'Enter'\n },\n commandId: 'Comfy.QueuePromptFront'\n },\n {\n combo: {\n ctrl: true,\n alt: true,\n key: 'Enter'\n },\n commandId: 'Comfy.Interrupt'\n },\n {\n combo: {\n key: 'r'\n },\n commandId: 'Comfy.RefreshNodeDefinitions'\n },\n {\n combo: {\n key: 'q'\n },\n commandId: 'Workspace.ToggleSidebarTab.queue'\n },\n {\n combo: {\n key: 'w'\n },\n commandId: 'Workspace.ToggleSidebarTab.workflows'\n },\n {\n combo: {\n key: 'n'\n },\n commandId: 'Workspace.ToggleSidebarTab.node-library'\n },\n {\n combo: {\n key: 'm'\n },\n commandId: 'Workspace.ToggleSidebarTab.model-library'\n },\n {\n combo: {\n key: 's',\n ctrl: true\n },\n commandId: 'Comfy.SaveWorkflow'\n },\n {\n combo: {\n key: 'o',\n ctrl: true\n },\n commandId: 'Comfy.OpenWorkflow'\n },\n {\n combo: {\n key: 'Backspace'\n },\n commandId: 'Comfy.ClearWorkflow'\n },\n {\n combo: {\n key: 'g',\n ctrl: true\n },\n commandId: 'Comfy.Graph.GroupSelectedNodes'\n },\n {\n combo: {\n key: ',',\n ctrl: true\n },\n commandId: 'Comfy.ShowSettingsDialog'\n },\n // For '=' both holding shift and not holding shift\n {\n combo: {\n key: '=',\n alt: true\n },\n commandId: 'Comfy.Canvas.ZoomIn',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: '+',\n alt: true,\n shift: true\n },\n commandId: 'Comfy.Canvas.ZoomIn',\n targetSelector: '#graph-canvas'\n },\n // For number pad '+'\n {\n combo: {\n key: '+',\n alt: true\n },\n commandId: 'Comfy.Canvas.ZoomIn',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: '-',\n alt: true\n },\n commandId: 'Comfy.Canvas.ZoomOut',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: '.'\n },\n commandId: 'Comfy.Canvas.FitView',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: 'p'\n },\n commandId: 'Comfy.Canvas.ToggleSelected.Pin',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: 'c',\n alt: true\n },\n commandId: 'Comfy.Canvas.ToggleSelectedNodes.Collapse',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: 'b',\n ctrl: true\n },\n commandId: 'Comfy.Canvas.ToggleSelectedNodes.Bypass',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: 'm',\n ctrl: true\n },\n commandId: 'Comfy.Canvas.ToggleSelectedNodes.Mute',\n targetSelector: '#graph-canvas'\n },\n {\n combo: {\n key: '`',\n ctrl: true\n },\n commandId: 'Workspace.ToggleBottomPanelTab.logs-terminal'\n },\n {\n combo: {\n key: 'f'\n },\n commandId: 'Workspace.ToggleFocusMode'\n }\n]\n","import { defineStore } from 'pinia'\nimport { computed, Ref, ref, toRaw } from 'vue'\nimport { Keybinding, KeyCombo } from '@/types/keyBindingTypes'\nimport { useSettingStore } from './settingStore'\nimport { CORE_KEYBINDINGS } from '@/constants/coreKeybindings'\nimport type { ComfyExtension } from '@/types/comfy'\n\nexport class KeybindingImpl implements Keybinding {\n commandId: string\n combo: KeyComboImpl\n targetSelector?: string\n\n constructor(obj: Keybinding) {\n this.commandId = obj.commandId\n this.combo = new KeyComboImpl(obj.combo)\n this.targetSelector = obj.targetSelector\n }\n\n equals(other: unknown): boolean {\n const raw = toRaw(other)\n\n return raw instanceof KeybindingImpl\n ? this.commandId === raw.commandId &&\n this.combo.equals(raw.combo) &&\n this.targetSelector === raw.targetSelector\n : false\n }\n}\n\nexport class KeyComboImpl implements KeyCombo {\n key: string\n // ctrl or meta(cmd on mac)\n ctrl: boolean\n alt: boolean\n shift: boolean\n\n constructor(obj: KeyCombo) {\n this.key = obj.key\n this.ctrl = obj.ctrl ?? false\n this.alt = obj.alt ?? false\n this.shift = obj.shift ?? false\n }\n\n static fromEvent(event: KeyboardEvent) {\n return new KeyComboImpl({\n key: event.key,\n ctrl: event.ctrlKey || event.metaKey,\n alt: event.altKey,\n shift: event.shiftKey\n })\n }\n\n equals(other: unknown): boolean {\n const raw = toRaw(other)\n\n return raw instanceof KeyComboImpl\n ? this.key.toUpperCase() === raw.key.toUpperCase() &&\n this.ctrl === raw.ctrl &&\n this.alt === raw.alt &&\n this.shift === raw.shift\n : false\n }\n\n serialize(): string {\n return `${this.key.toUpperCase()}:${this.ctrl}:${this.alt}:${this.shift}`\n }\n\n toString(): string {\n return this.getKeySequences().join(' + ')\n }\n\n get hasModifier(): boolean {\n return this.ctrl || this.alt || this.shift\n }\n\n get isModifier(): boolean {\n return ['Control', 'Meta', 'Alt', 'Shift'].includes(this.key)\n }\n\n getKeySequences(): string[] {\n const sequences: string[] = []\n if (this.ctrl) {\n sequences.push('Ctrl')\n }\n if (this.alt) {\n sequences.push('Alt')\n }\n if (this.shift) {\n sequences.push('Shift')\n }\n sequences.push(this.key)\n return sequences\n }\n}\n\nexport const useKeybindingStore = defineStore('keybinding', () => {\n /**\n * Default keybindings provided by core and extensions.\n */\n const defaultKeybindings = ref>({})\n /**\n * User-defined keybindings.\n */\n const userKeybindings = ref>({})\n /**\n * User-defined keybindings that unset default keybindings.\n */\n const userUnsetKeybindings = ref>({})\n\n const keybindingByKeyCombo = computed>(() => {\n const result: Record = {\n ...defaultKeybindings.value\n }\n\n for (const keybinding of Object.values(userUnsetKeybindings.value)) {\n const serializedCombo = keybinding.combo.serialize()\n if (result[serializedCombo]?.equals(keybinding)) {\n delete result[serializedCombo]\n }\n }\n\n return {\n ...result,\n ...userKeybindings.value\n }\n })\n\n const keybindings = computed(() =>\n Object.values(keybindingByKeyCombo.value)\n )\n\n function getKeybinding(combo: KeyComboImpl) {\n return keybindingByKeyCombo.value[combo.serialize()]\n }\n\n function createKeybindingsByCommandId(keybindings: KeybindingImpl[]) {\n const result: Record = {}\n for (const keybinding of keybindings) {\n if (!(keybinding.commandId in result)) {\n result[keybinding.commandId] = []\n }\n result[keybinding.commandId].push(keybinding)\n }\n return result\n }\n\n const keybindingsByCommandId = computed>(\n () => {\n return createKeybindingsByCommandId(keybindings.value)\n }\n )\n\n function getKeybindingsByCommandId(commandId: string) {\n return keybindingsByCommandId.value[commandId] ?? []\n }\n\n const defaultKeybindingsByCommandId = computed<\n Record\n >(() => {\n return createKeybindingsByCommandId(Object.values(defaultKeybindings.value))\n })\n\n function getKeybindingByCommandId(commandId: string) {\n return getKeybindingsByCommandId(commandId)[0]\n }\n\n function addKeybinding(\n target: Ref>,\n keybinding: KeybindingImpl,\n { existOk = false }: { existOk: boolean }\n ) {\n if (!existOk && keybinding.combo.serialize() in target.value) {\n throw new Error(\n `Keybinding on ${keybinding.combo} already exists on ${\n target.value[keybinding.combo.serialize()].commandId\n }`\n )\n }\n target.value[keybinding.combo.serialize()] = keybinding\n }\n\n function addDefaultKeybinding(keybinding: KeybindingImpl) {\n addKeybinding(defaultKeybindings, keybinding, { existOk: false })\n }\n\n function addUserKeybinding(keybinding: KeybindingImpl) {\n const defaultKeybinding =\n defaultKeybindings.value[keybinding.combo.serialize()]\n const userUnsetKeybinding =\n userUnsetKeybindings.value[keybinding.combo.serialize()]\n\n // User is adding back a keybinding that was an unsetted default keybinding.\n if (\n keybinding.equals(defaultKeybinding) &&\n keybinding.equals(userUnsetKeybinding)\n ) {\n delete userUnsetKeybindings.value[keybinding.combo.serialize()]\n return\n }\n\n // Unset keybinding on default keybinding if it exists and is not the same as userUnsetKeybinding\n if (defaultKeybinding && !defaultKeybinding.equals(userUnsetKeybinding)) {\n unsetKeybinding(defaultKeybinding)\n }\n\n addKeybinding(userKeybindings, keybinding, { existOk: true })\n }\n\n function unsetKeybinding(keybinding: KeybindingImpl) {\n const serializedCombo = keybinding.combo.serialize()\n if (!(serializedCombo in keybindingByKeyCombo.value)) {\n console.warn(\n `Trying to unset non-exist keybinding: ${JSON.stringify(keybinding)}`\n )\n return\n }\n\n if (userKeybindings.value[serializedCombo]?.equals(keybinding)) {\n delete userKeybindings.value[serializedCombo]\n return\n }\n\n if (defaultKeybindings.value[serializedCombo]?.equals(keybinding)) {\n addKeybinding(userUnsetKeybindings, keybinding, { existOk: false })\n return\n }\n\n throw new Error(`Unknown keybinding: ${JSON.stringify(keybinding)}`)\n }\n\n /**\n * Update the keybinding on given command if it is different from the current keybinding.\n *\n * @returns true if the keybinding is updated, false otherwise.\n */\n function updateKeybindingOnCommand(keybinding: KeybindingImpl): boolean {\n const currentKeybinding = getKeybindingByCommandId(keybinding.commandId)\n if (currentKeybinding?.equals(keybinding)) {\n return false\n }\n if (currentKeybinding) {\n unsetKeybinding(currentKeybinding)\n }\n addUserKeybinding(keybinding)\n return true\n }\n\n function loadUserKeybindings() {\n const settingStore = useSettingStore()\n // Unset bindings first as new bindings might conflict with default bindings.\n const unsetBindings = settingStore.get('Comfy.Keybinding.UnsetBindings')\n for (const keybinding of unsetBindings) {\n unsetKeybinding(new KeybindingImpl(keybinding))\n }\n const newBindings = settingStore.get('Comfy.Keybinding.NewBindings')\n for (const keybinding of newBindings) {\n addUserKeybinding(new KeybindingImpl(keybinding))\n }\n }\n\n function loadCoreKeybindings() {\n for (const keybinding of CORE_KEYBINDINGS) {\n addDefaultKeybinding(new KeybindingImpl(keybinding))\n }\n }\n\n function loadExtensionKeybindings(extension: ComfyExtension) {\n if (extension.keybindings) {\n for (const keybinding of extension.keybindings) {\n try {\n addDefaultKeybinding(new KeybindingImpl(keybinding))\n } catch (error) {\n console.warn(\n `Failed to load keybinding for extension ${extension.name}`,\n error\n )\n }\n }\n }\n }\n\n async function persistUserKeybindings() {\n const settingStore = useSettingStore()\n // TODO(https://github.com/Comfy-Org/ComfyUI_frontend/issues/1079):\n // Allow setting multiple values at once in settingStore\n await settingStore.set(\n 'Comfy.Keybinding.NewBindings',\n Object.values(userKeybindings.value)\n )\n await settingStore.set(\n 'Comfy.Keybinding.UnsetBindings',\n Object.values(userUnsetKeybindings.value)\n )\n }\n\n function resetKeybindings() {\n userKeybindings.value = {}\n userUnsetKeybindings.value = {}\n }\n\n function isCommandKeybindingModified(commandId: string): boolean {\n const currentKeybinding: KeybindingImpl | undefined =\n getKeybindingByCommandId(commandId)\n const defaultKeybinding: KeybindingImpl | undefined =\n defaultKeybindingsByCommandId.value[commandId]?.[0]\n\n return !(\n (currentKeybinding === undefined && defaultKeybinding === undefined) ||\n currentKeybinding?.equals(defaultKeybinding)\n )\n }\n\n return {\n keybindings,\n getKeybinding,\n getKeybindingsByCommandId,\n getKeybindingByCommandId,\n addDefaultKeybinding,\n addUserKeybinding,\n unsetKeybinding,\n updateKeybindingOnCommand,\n loadUserKeybindings,\n loadCoreKeybindings,\n loadExtensionKeybindings,\n persistUserKeybindings,\n resetKeybindings,\n isCommandKeybindingModified\n }\n})\n","import { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\nimport type { ComfyExtension } from '@/types/comfy'\nimport { useErrorHandling } from '@/hooks/errorHooks'\nimport { type KeybindingImpl, useKeybindingStore } from './keybindingStore'\n\nexport interface ComfyCommand {\n id: string\n function: () => void | Promise\n\n label?: string | (() => string)\n icon?: string | (() => string)\n tooltip?: string | (() => string)\n /** Menubar item label, if different from command label */\n menubarLabel?: string | (() => string)\n versionAdded?: string\n /** If non-nullish, this command will prompt for confirmation. */\n confirmation?: string\n}\n\nexport class ComfyCommandImpl implements ComfyCommand {\n id: string\n function: () => void | Promise\n _label?: string | (() => string)\n _icon?: string | (() => string)\n _tooltip?: string | (() => string)\n _menubarLabel?: string | (() => string)\n versionAdded?: string\n confirmation?: string\n\n constructor(command: ComfyCommand) {\n this.id = command.id\n this.function = command.function\n this._label = command.label\n this._icon = command.icon\n this._tooltip = command.tooltip\n this._menubarLabel = command.menubarLabel ?? command.label\n this.versionAdded = command.versionAdded\n this.confirmation = command.confirmation\n }\n\n get label() {\n return typeof this._label === 'function' ? this._label() : this._label\n }\n\n get icon() {\n return typeof this._icon === 'function' ? this._icon() : this._icon\n }\n\n get tooltip() {\n return typeof this._tooltip === 'function' ? this._tooltip() : this._tooltip\n }\n\n get menubarLabel() {\n return typeof this._menubarLabel === 'function'\n ? this._menubarLabel()\n : this._menubarLabel\n }\n\n get keybinding(): KeybindingImpl | null {\n return useKeybindingStore().getKeybindingByCommandId(this.id)\n }\n}\n\nexport const useCommandStore = defineStore('command', () => {\n const commandsById = ref>({})\n const commands = computed(() => Object.values(commandsById.value))\n\n const registerCommand = (command: ComfyCommand) => {\n if (commandsById.value[command.id]) {\n console.warn(`Command ${command.id} already registered`)\n }\n commandsById.value[command.id] = new ComfyCommandImpl(command)\n }\n\n const registerCommands = (commands: ComfyCommand[]) => {\n for (const command of commands) {\n registerCommand(command)\n }\n }\n\n const getCommand = (command: string) => {\n return commandsById.value[command]\n }\n\n const { wrapWithErrorHandlingAsync } = useErrorHandling()\n const execute = async (\n commandId: string,\n errorHandler?: (error: any) => void\n ) => {\n const command = getCommand(commandId)\n if (command) {\n await wrapWithErrorHandlingAsync(command.function, errorHandler)()\n } else {\n throw new Error(`Command ${commandId} not found`)\n }\n }\n\n const isRegistered = (command: string) => {\n return !!commandsById.value[command]\n }\n\n const loadExtensionCommands = (extension: ComfyExtension) => {\n if (extension.commands) {\n for (const command of extension.commands) {\n registerCommand(command)\n }\n }\n }\n\n return {\n commands,\n execute,\n getCommand,\n registerCommand,\n registerCommands,\n isRegistered,\n loadExtensionCommands\n }\n})\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-tree {\\n background: \".concat(dt('tree.background'), \";\\n color: \").concat(dt('tree.color'), \";\\n padding: \").concat(dt('tree.padding'), \";\\n}\\n\\n.p-tree-root-children,\\n.p-tree-node-children {\\n display: flex;\\n list-style-type: none;\\n flex-direction: column;\\n margin: 0;\\n gap: \").concat(dt('tree.gap'), \";\\n}\\n\\n.p-tree-root-children {\\n padding: \").concat(dt('tree.gap'), \" 0 0 0;\\n}\\n\\n.p-tree-node-children {\\n padding: \").concat(dt('tree.gap'), \" 0 0 \").concat(dt('tree.indent'), \";\\n}\\n\\n.p-tree-node {\\n padding: 0;\\n outline: 0 none;\\n}\\n\\n.p-tree-node-content {\\n border-radius: \").concat(dt('tree.node.border.radius'), \";\\n padding: \").concat(dt('tree.node.padding'), \";\\n display: flex;\\n align-items: center;\\n outline-color: transparent;\\n color: \").concat(dt('tree.node.color'), \";\\n gap: \").concat(dt('tree.node.gap'), \";\\n transition: background \").concat(dt('tree.transition.duration'), \", color \").concat(dt('tree.transition.duration'), \", outline-color \").concat(dt('tree.transition.duration'), \", box-shadow \").concat(dt('tree.transition.duration'), \";\\n}\\n\\n.p-tree-node:focus-visible > .p-tree-node-content {\\n box-shadow: \").concat(dt('tree.node.focus.ring.shadow'), \";\\n outline: \").concat(dt('tree.node.focus.ring.width'), \" \").concat(dt('tree.node.focus.ring.style'), \" \").concat(dt('tree.node.focus.ring.color'), \";\\n outline-offset: \").concat(dt('tree.node.focus.ring.offset'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selectable:not(.p-tree-node-selected):hover {\\n background: \").concat(dt('tree.node.hover.background'), \";\\n color: \").concat(dt('tree.node.hover.color'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selectable:not(.p-tree-node-selected):hover .p-tree-node-icon {\\n color: \").concat(dt('tree.node.icon.hover.color'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selected {\\n background: \").concat(dt('tree.node.selected.background'), \";\\n color: \").concat(dt('tree.node.selected.color'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selected .p-tree-node-toggle-button {\\n color: inherit;\\n}\\n\\n.p-tree-node-toggle-button {\\n cursor: pointer;\\n user-select: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n overflow: hidden;\\n position: relative;\\n flex-shrink: 0;\\n width: \").concat(dt('tree.node.toggle.button.size'), \";\\n height: \").concat(dt('tree.node.toggle.button.size'), \";\\n color: \").concat(dt('tree.node.toggle.button.color'), \";\\n border: 0 none;\\n background: transparent;\\n border-radius: \").concat(dt('tree.node.toggle.button.border.radius'), \";\\n transition: background \").concat(dt('tree.transition.duration'), \", color \").concat(dt('tree.transition.duration'), \", border-color \").concat(dt('tree.transition.duration'), \", outline-color \").concat(dt('tree.transition.duration'), \", box-shadow \").concat(dt('tree.transition.duration'), \";\\n outline-color: transparent;\\n padding: 0;\\n}\\n\\n.p-tree-node-toggle-button:enabled:hover {\\n background: \").concat(dt('tree.node.toggle.button.hover.background'), \";\\n color: \").concat(dt('tree.node.toggle.button.hover.color'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selected .p-tree-node-toggle-button:hover {\\n background: \").concat(dt('tree.node.toggle.button.selected.hover.background'), \";\\n color: \").concat(dt('tree.node.toggle.button.selected.hover.color'), \";\\n}\\n\\n.p-tree-root {\\n overflow: auto;\\n}\\n\\n.p-tree-node-selectable {\\n cursor: pointer;\\n user-select: none;\\n}\\n\\n.p-tree-node-leaf > .p-tree-node-content .p-tree-node-toggle-button {\\n visibility: hidden;\\n}\\n\\n.p-tree-node-icon {\\n color: \").concat(dt('tree.node.icon.color'), \";\\n transition: color \").concat(dt('tree.transition.duration'), \";\\n}\\n\\n.p-tree-node-content.p-tree-node-selected .p-tree-node-icon {\\n color: \").concat(dt('tree.node.icon.selected.color'), \";\\n}\\n\\n.p-tree-filter-input {\\n width: 100%;\\n}\\n\\n.p-tree-loading {\\n position: relative;\\n height: 100%;\\n}\\n\\n.p-tree-loading-icon {\\n font-size: \").concat(dt('tree.loading.icon.size'), \";\\n width: \").concat(dt('tree.loading.icon.size'), \";\\n height: \").concat(dt('tree.loading.icon.size'), \";\\n}\\n\\n.p-tree .p-tree-mask {\\n position: absolute;\\n z-index: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.p-tree-flex-scrollable {\\n display: flex;\\n flex: 1;\\n height: 100%;\\n flex-direction: column;\\n}\\n\\n.p-tree-flex-scrollable .p-tree-root {\\n flex: 1;\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var props = _ref2.props;\n return ['p-tree p-component', {\n 'p-tree-selectable': props.selectionMode != null,\n 'p-tree-loading': props.loading,\n 'p-tree-flex-scrollable': props.scrollHeight === 'flex'\n }];\n },\n mask: 'p-tree-mask p-overlay-mask',\n loadingIcon: 'p-tree-loading-icon',\n pcFilterInput: 'p-tree-filter-input',\n wrapper: 'p-tree-root',\n //TODO: discuss\n rootChildren: 'p-tree-root-children',\n node: function node(_ref3) {\n var instance = _ref3.instance;\n return ['p-tree-node', {\n 'p-tree-node-leaf': instance.leaf\n }];\n },\n nodeContent: function nodeContent(_ref4) {\n var instance = _ref4.instance;\n return ['p-tree-node-content', instance.node.styleClass, {\n 'p-tree-node-selectable': instance.selectable,\n 'p-tree-node-selected': instance.checkboxMode && instance.$parentInstance.highlightOnSelect ? instance.checked : instance.selected\n }];\n },\n nodeToggleButton: 'p-tree-node-toggle-button',\n nodeToggleIcon: 'p-tree-node-toggle-icon',\n nodeCheckbox: 'p-tree-node-checkbox',\n nodeIcon: 'p-tree-node-icon',\n nodeLabel: 'p-tree-node-label',\n nodeChildren: 'p-tree-node-children'\n};\nvar TreeStyle = BaseStyle.extend({\n name: 'tree',\n theme: theme,\n classes: classes\n});\n\nexport { TreeStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'MinusIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M13.2222 7.77778H0.777778C0.571498 7.77778 0.373667 7.69584 0.227806 7.54998C0.0819442 7.40412 0 7.20629 0 7.00001C0 6.79373 0.0819442 6.5959 0.227806 6.45003C0.373667 6.30417 0.571498 6.22223 0.777778 6.22223H13.2222C13.4285 6.22223 13.6263 6.30417 13.7722 6.45003C13.9181 6.5959 14 6.79373 14 7.00001C14 7.20629 13.9181 7.40412 13.7722 7.54998C13.6263 7.69584 13.4285 7.77778 13.2222 7.77778Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-checkbox {\\n position: relative;\\n display: inline-flex;\\n user-select: none;\\n vertical-align: bottom;\\n width: \".concat(dt('checkbox.width'), \";\\n height: \").concat(dt('checkbox.height'), \";\\n}\\n\\n.p-checkbox-input {\\n cursor: pointer;\\n appearance: none;\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n padding: 0;\\n margin: 0;\\n opacity: 0;\\n z-index: 1;\\n outline: 0 none;\\n border: 1px solid transparent;\\n border-radius: \").concat(dt('checkbox.border.radius'), \";\\n}\\n\\n.p-checkbox-box {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n border-radius: \").concat(dt('checkbox.border.radius'), \";\\n border: 1px solid \").concat(dt('checkbox.border.color'), \";\\n background: \").concat(dt('checkbox.background'), \";\\n width: \").concat(dt('checkbox.width'), \";\\n height: \").concat(dt('checkbox.height'), \";\\n transition: background \").concat(dt('checkbox.transition.duration'), \", color \").concat(dt('checkbox.transition.duration'), \", border-color \").concat(dt('checkbox.transition.duration'), \", box-shadow \").concat(dt('checkbox.transition.duration'), \", outline-color \").concat(dt('checkbox.transition.duration'), \";\\n outline-color: transparent;\\n box-shadow: \").concat(dt('checkbox.shadow'), \";\\n}\\n\\n.p-checkbox-icon {\\n transition-duration: \").concat(dt('checkbox.transition.duration'), \";\\n color: \").concat(dt('checkbox.icon.color'), \";\\n font-size: \").concat(dt('checkbox.icon.size'), \";\\n width: \").concat(dt('checkbox.icon.size'), \";\\n height: \").concat(dt('checkbox.icon.size'), \";\\n}\\n\\n.p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\\n border-color: \").concat(dt('checkbox.hover.border.color'), \";\\n}\\n\\n.p-checkbox-checked .p-checkbox-box {\\n border-color: \").concat(dt('checkbox.checked.border.color'), \";\\n background: \").concat(dt('checkbox.checked.background'), \";\\n}\\n\\n.p-checkbox-checked .p-checkbox-icon {\\n color: \").concat(dt('checkbox.icon.checked.color'), \";\\n}\\n\\n.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\\n background: \").concat(dt('checkbox.checked.hover.background'), \";\\n border-color: \").concat(dt('checkbox.checked.hover.border.color'), \";\\n}\\n\\n.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-icon {\\n color: \").concat(dt('checkbox.icon.checked.hover.color'), \";\\n}\\n\\n.p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box {\\n border-color: \").concat(dt('checkbox.focus.border.color'), \";\\n box-shadow: \").concat(dt('checkbox.focus.ring.shadow'), \";\\n outline: \").concat(dt('checkbox.focus.ring.width'), \" \").concat(dt('checkbox.focus.ring.style'), \" \").concat(dt('checkbox.focus.ring.color'), \";\\n outline-offset: \").concat(dt('checkbox.focus.ring.offset'), \";\\n}\\n\\n.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box {\\n border-color: \").concat(dt('checkbox.checked.focus.border.color'), \";\\n}\\n\\n.p-checkbox.p-invalid > .p-checkbox-box {\\n border-color: \").concat(dt('checkbox.invalid.border.color'), \";\\n}\\n\\n.p-checkbox.p-variant-filled .p-checkbox-box {\\n background: \").concat(dt('checkbox.filled.background'), \";\\n}\\n\\n.p-checkbox-checked.p-variant-filled .p-checkbox-box {\\n background: \").concat(dt('checkbox.checked.background'), \";\\n}\\n\\n.p-checkbox-checked.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\\n background: \").concat(dt('checkbox.checked.hover.background'), \";\\n}\\n\\n.p-checkbox.p-disabled {\\n opacity: 1;\\n}\\n\\n.p-checkbox.p-disabled .p-checkbox-box {\\n background: \").concat(dt('checkbox.disabled.background'), \";\\n border-color: \").concat(dt('checkbox.checked.disabled.border.color'), \";\\n}\\n\\n.p-checkbox.p-disabled .p-checkbox-box .p-checkbox-icon {\\n color: \").concat(dt('checkbox.icon.disabled.color'), \";\\n}\\n\");\n};\nvar classes = {\n root: function root(_ref2) {\n var instance = _ref2.instance,\n props = _ref2.props;\n return ['p-checkbox p-component', {\n 'p-checkbox-checked': instance.checked,\n 'p-disabled': props.disabled,\n 'p-invalid': props.invalid,\n 'p-variant-filled': props.variant ? props.variant === 'filled' : instance.$primevue.config.inputStyle === 'filled' || instance.$primevue.config.inputVariant === 'filled'\n }];\n },\n box: 'p-checkbox-box',\n input: 'p-checkbox-input',\n icon: 'p-checkbox-icon'\n};\nvar CheckboxStyle = BaseStyle.extend({\n name: 'checkbox',\n theme: theme,\n classes: classes\n});\n\nexport { CheckboxStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import { equals, contains } from '@primeuix/utils/object';\nimport CheckIcon from '@primevue/icons/check';\nimport MinusIcon from '@primevue/icons/minus';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport CheckboxStyle from 'primevue/checkbox/style';\nimport { resolveComponent, openBlock, createElementBlock, mergeProps, createElementVNode, renderSlot, normalizeClass, createBlock, createCommentVNode } from 'vue';\n\nvar script$1 = {\n name: 'BaseCheckbox',\n \"extends\": BaseComponent,\n props: {\n value: null,\n modelValue: null,\n binary: Boolean,\n name: {\n type: String,\n \"default\": null\n },\n indeterminate: {\n type: Boolean,\n \"default\": false\n },\n trueValue: {\n type: null,\n \"default\": true\n },\n falseValue: {\n type: null,\n \"default\": false\n },\n variant: {\n type: String,\n \"default\": null\n },\n invalid: {\n type: Boolean,\n \"default\": false\n },\n disabled: {\n type: Boolean,\n \"default\": false\n },\n readonly: {\n type: Boolean,\n \"default\": false\n },\n required: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": null\n },\n inputId: {\n type: String,\n \"default\": null\n },\n inputClass: {\n type: [String, Object],\n \"default\": null\n },\n inputStyle: {\n type: Object,\n \"default\": null\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: CheckboxStyle,\n provide: function provide() {\n return {\n $pcCheckbox: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script = {\n name: 'Checkbox',\n \"extends\": script$1,\n inheritAttrs: false,\n emits: ['update:modelValue', 'change', 'focus', 'blur', 'update:indeterminate'],\n data: function data() {\n return {\n d_indeterminate: this.indeterminate\n };\n },\n watch: {\n indeterminate: function indeterminate(newValue) {\n this.d_indeterminate = newValue;\n }\n },\n methods: {\n getPTOptions: function getPTOptions(key) {\n var _ptm = key === 'root' ? this.ptmi : this.ptm;\n return _ptm(key, {\n context: {\n checked: this.checked,\n indeterminate: this.d_indeterminate,\n disabled: this.disabled\n }\n });\n },\n onChange: function onChange(event) {\n var _this = this;\n if (!this.disabled && !this.readonly) {\n var newModelValue;\n if (this.binary) {\n newModelValue = this.d_indeterminate ? this.trueValue : this.checked ? this.falseValue : this.trueValue;\n } else {\n if (this.checked || this.d_indeterminate) newModelValue = this.modelValue.filter(function (val) {\n return !equals(val, _this.value);\n });else newModelValue = this.modelValue ? [].concat(_toConsumableArray(this.modelValue), [this.value]) : [this.value];\n }\n if (this.d_indeterminate) {\n this.d_indeterminate = false;\n this.$emit('update:indeterminate', this.d_indeterminate);\n }\n this.$emit('update:modelValue', newModelValue);\n this.$emit('change', event);\n }\n },\n onFocus: function onFocus(event) {\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.$emit('blur', event);\n }\n },\n computed: {\n checked: function checked() {\n return this.d_indeterminate ? false : this.binary ? this.modelValue === this.trueValue : contains(this.value, this.modelValue);\n }\n },\n components: {\n CheckIcon: CheckIcon,\n MinusIcon: MinusIcon\n }\n};\n\nvar _hoisted_1 = [\"data-p-checked\", \"data-p-indeterminate\", \"data-p-disabled\"];\nvar _hoisted_2 = [\"id\", \"value\", \"name\", \"checked\", \"tabindex\", \"disabled\", \"readonly\", \"required\", \"aria-labelledby\", \"aria-label\", \"aria-invalid\", \"aria-checked\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_CheckIcon = resolveComponent(\"CheckIcon\");\n var _component_MinusIcon = resolveComponent(\"MinusIcon\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, $options.getPTOptions('root'), {\n \"data-p-checked\": $options.checked,\n \"data-p-indeterminate\": $data.d_indeterminate || undefined,\n \"data-p-disabled\": _ctx.disabled\n }), [createElementVNode(\"input\", mergeProps({\n id: _ctx.inputId,\n type: \"checkbox\",\n \"class\": [_ctx.cx('input'), _ctx.inputClass],\n style: _ctx.inputStyle,\n value: _ctx.value,\n name: _ctx.name,\n checked: $options.checked,\n tabindex: _ctx.tabindex,\n disabled: _ctx.disabled,\n readonly: _ctx.readonly,\n required: _ctx.required,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-invalid\": _ctx.invalid || undefined,\n \"aria-checked\": $data.d_indeterminate ? 'mixed' : undefined,\n onFocus: _cache[0] || (_cache[0] = function () {\n return $options.onFocus && $options.onFocus.apply($options, arguments);\n }),\n onBlur: _cache[1] || (_cache[1] = function () {\n return $options.onBlur && $options.onBlur.apply($options, arguments);\n }),\n onChange: _cache[2] || (_cache[2] = function () {\n return $options.onChange && $options.onChange.apply($options, arguments);\n })\n }, $options.getPTOptions('input')), null, 16, _hoisted_2), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('box')\n }, $options.getPTOptions('box')), [renderSlot(_ctx.$slots, \"icon\", {\n checked: $options.checked,\n indeterminate: $data.d_indeterminate,\n \"class\": normalizeClass(_ctx.cx('icon'))\n }, function () {\n return [$options.checked ? (openBlock(), createBlock(_component_CheckIcon, mergeProps({\n key: 0,\n \"class\": _ctx.cx('icon')\n }, $options.getPTOptions('icon')), null, 16, [\"class\"])) : $data.d_indeterminate ? (openBlock(), createBlock(_component_MinusIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('icon')\n }, $options.getPTOptions('icon')), null, 16, [\"class\"])) : createCommentVNode(\"\", true)];\n })], 16)], 16, _hoisted_1);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import { resolveFieldData } from '@primeuix/utils/object';\nimport SearchIcon from '@primevue/icons/search';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport IconField from 'primevue/iconfield';\nimport InputIcon from 'primevue/inputicon';\nimport InputText from 'primevue/inputtext';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TreeStyle from 'primevue/tree/style';\nimport { getAttribute, findSingle, find } from '@primeuix/utils/dom';\nimport CheckIcon from '@primevue/icons/check';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport ChevronRightIcon from '@primevue/icons/chevronright';\nimport MinusIcon from '@primevue/icons/minus';\nimport Checkbox from 'primevue/checkbox';\nimport Ripple from 'primevue/ripple';\nimport { resolveComponent, resolveDirective, openBlock, createElementBlock, mergeProps, createElementVNode, withDirectives, Fragment, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createCommentVNode, withModifiers, createTextVNode, toDisplayString, renderList, renderSlot, createVNode } from 'vue';\n\nvar script$2 = {\n name: 'BaseTree',\n \"extends\": BaseComponent,\n props: {\n value: {\n type: null,\n \"default\": null\n },\n expandedKeys: {\n type: null,\n \"default\": null\n },\n selectionKeys: {\n type: null,\n \"default\": null\n },\n selectionMode: {\n type: String,\n \"default\": null\n },\n metaKeySelection: {\n type: Boolean,\n \"default\": false\n },\n loading: {\n type: Boolean,\n \"default\": false\n },\n loadingIcon: {\n type: String,\n \"default\": undefined\n },\n loadingMode: {\n type: String,\n \"default\": 'mask'\n },\n filter: {\n type: Boolean,\n \"default\": false\n },\n filterBy: {\n type: String,\n \"default\": 'label'\n },\n filterMode: {\n type: String,\n \"default\": 'lenient'\n },\n filterPlaceholder: {\n type: String,\n \"default\": null\n },\n filterLocale: {\n type: String,\n \"default\": undefined\n },\n highlightOnSelect: {\n type: Boolean,\n \"default\": false\n },\n scrollHeight: {\n type: String,\n \"default\": null\n },\n level: {\n type: Number,\n \"default\": 0\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: TreeStyle,\n provide: function provide() {\n return {\n $pcTree: this,\n $parentInstance: this\n };\n }\n};\n\nfunction _typeof$1(o) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$1(o); }\nfunction _createForOfIteratorHelper$1(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty$1(e, r, t) { return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey$1(t) { var i = _toPrimitive$1(t, \"string\"); return \"symbol\" == _typeof$1(i) ? i : i + \"\"; }\nfunction _toPrimitive$1(t, r) { if (\"object\" != _typeof$1(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof$1(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _toConsumableArray$1(r) { return _arrayWithoutHoles$1(r) || _iterableToArray$1(r) || _unsupportedIterableToArray$1(r) || _nonIterableSpread$1(); }\nfunction _nonIterableSpread$1() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray$1(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }\nfunction _iterableToArray$1(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles$1(r) { if (Array.isArray(r)) return _arrayLikeToArray$1(r); }\nfunction _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar script$1 = {\n name: 'TreeNode',\n hostName: 'Tree',\n \"extends\": BaseComponent,\n emits: ['node-toggle', 'node-click', 'checkbox-change'],\n props: {\n node: {\n type: null,\n \"default\": null\n },\n expandedKeys: {\n type: null,\n \"default\": null\n },\n loadingMode: {\n type: String,\n \"default\": 'mask'\n },\n selectionKeys: {\n type: null,\n \"default\": null\n },\n selectionMode: {\n type: String,\n \"default\": null\n },\n templates: {\n type: null,\n \"default\": null\n },\n level: {\n type: Number,\n \"default\": null\n },\n index: null\n },\n nodeTouched: false,\n toggleClicked: false,\n mounted: function mounted() {\n this.setAllNodesTabIndexes();\n },\n methods: {\n toggle: function toggle() {\n this.$emit('node-toggle', this.node);\n this.toggleClicked = true;\n },\n label: function label(node) {\n return typeof node.label === 'function' ? node.label() : node.label;\n },\n onChildNodeToggle: function onChildNodeToggle(node) {\n this.$emit('node-toggle', node);\n },\n getPTOptions: function getPTOptions(key) {\n return this.ptm(key, {\n context: {\n index: this.index,\n expanded: this.expanded,\n selected: this.selected,\n checked: this.checked,\n leaf: this.leaf\n }\n });\n },\n onClick: function onClick(event) {\n if (this.toggleClicked || getAttribute(event.target, '[data-pc-section=\"nodetogglebutton\"]') || getAttribute(event.target.parentElement, '[data-pc-section=\"nodetogglebutton\"]')) {\n this.toggleClicked = false;\n return;\n }\n if (this.isCheckboxSelectionMode()) {\n if (this.node.selectable != false) {\n this.toggleCheckbox();\n }\n } else {\n this.$emit('node-click', {\n originalEvent: event,\n nodeTouched: this.nodeTouched,\n node: this.node\n });\n }\n this.nodeTouched = false;\n },\n onChildNodeClick: function onChildNodeClick(event) {\n this.$emit('node-click', event);\n },\n onTouchEnd: function onTouchEnd() {\n this.nodeTouched = true;\n },\n onKeyDown: function onKeyDown(event) {\n if (!this.isSameNode(event)) return;\n switch (event.code) {\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'ArrowDown':\n this.onArrowDown(event);\n break;\n case 'ArrowUp':\n this.onArrowUp(event);\n break;\n case 'ArrowRight':\n this.onArrowRight(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeft(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n this.onEnterKey(event);\n break;\n }\n },\n onArrowDown: function onArrowDown(event) {\n var nodeElement = event.target.getAttribute('data-pc-section') === 'nodetogglebutton' ? event.target.closest('[role=\"treeitem\"]') : event.target;\n var listElement = nodeElement.children[1];\n if (listElement) {\n this.focusRowChange(nodeElement, listElement.children[0]);\n } else {\n if (nodeElement.nextElementSibling) {\n this.focusRowChange(nodeElement, nodeElement.nextElementSibling);\n } else {\n var nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);\n if (nextSiblingAncestor) {\n this.focusRowChange(nodeElement, nextSiblingAncestor);\n }\n }\n }\n event.preventDefault();\n },\n onArrowUp: function onArrowUp(event) {\n var nodeElement = event.target;\n if (nodeElement.previousElementSibling) {\n this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n } else {\n var parentNodeElement = this.getParentNodeElement(nodeElement);\n if (parentNodeElement) {\n this.focusRowChange(nodeElement, parentNodeElement);\n }\n }\n event.preventDefault();\n },\n onArrowRight: function onArrowRight(event) {\n var _this = this;\n if (this.leaf || this.expanded) return;\n event.currentTarget.tabIndex = -1;\n this.$emit('node-toggle', this.node);\n this.$nextTick(function () {\n _this.onArrowDown(event);\n });\n },\n onArrowLeft: function onArrowLeft(event) {\n var togglerElement = findSingle(event.currentTarget, '[data-pc-section=\"nodetogglebutton\"]');\n if (this.level === 0 && !this.expanded) {\n return false;\n }\n if (this.expanded && !this.leaf) {\n togglerElement.click();\n return false;\n }\n var target = this.findBeforeClickableNode(event.currentTarget);\n if (target) {\n this.focusRowChange(event.currentTarget, target);\n }\n },\n onEnterKey: function onEnterKey(event) {\n this.setTabIndexForSelectionMode(event, this.nodeTouched);\n this.onClick(event);\n event.preventDefault();\n },\n onTabKey: function onTabKey() {\n this.setAllNodesTabIndexes();\n },\n setAllNodesTabIndexes: function setAllNodesTabIndexes() {\n var nodes = find(this.$refs.currentNode.closest('[data-pc-section=\"rootchildren\"]'), '[role=\"treeitem\"]');\n var hasSelectedNode = _toConsumableArray$1(nodes).some(function (node) {\n return node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true';\n });\n _toConsumableArray$1(nodes).forEach(function (node) {\n node.tabIndex = -1;\n });\n if (hasSelectedNode) {\n var selectedNodes = _toConsumableArray$1(nodes).filter(function (node) {\n return node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true';\n });\n selectedNodes[0].tabIndex = 0;\n return;\n }\n _toConsumableArray$1(nodes)[0].tabIndex = 0;\n },\n setTabIndexForSelectionMode: function setTabIndexForSelectionMode(event, nodeTouched) {\n if (this.selectionMode !== null) {\n var elements = _toConsumableArray$1(find(this.$refs.currentNode.parentElement, '[role=\"treeitem\"]'));\n event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;\n if (elements.every(function (element) {\n return element.tabIndex === -1;\n })) {\n elements[0].tabIndex = 0;\n }\n }\n },\n focusRowChange: function focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {\n firstFocusableRow.tabIndex = '-1';\n currentFocusedRow.tabIndex = '0';\n this.focusNode(lastVisibleDescendant || currentFocusedRow);\n },\n findBeforeClickableNode: function findBeforeClickableNode(node) {\n var parentListElement = node.closest('ul').closest('li');\n if (parentListElement) {\n var prevNodeButton = findSingle(parentListElement, 'button');\n if (prevNodeButton && prevNodeButton.style.visibility !== 'hidden') {\n return parentListElement;\n }\n return this.findBeforeClickableNode(node.previousElementSibling);\n }\n return null;\n },\n toggleCheckbox: function toggleCheckbox() {\n var _selectionKeys = this.selectionKeys ? _objectSpread$1({}, this.selectionKeys) : {};\n var _check = !this.checked;\n this.propagateDown(this.node, _check, _selectionKeys);\n this.$emit('checkbox-change', {\n node: this.node,\n check: _check,\n selectionKeys: _selectionKeys\n });\n },\n propagateDown: function propagateDown(node, check, selectionKeys) {\n if (check && node.selectable != false) selectionKeys[node.key] = {\n checked: true,\n partialChecked: false\n };else delete selectionKeys[node.key];\n if (node.children && node.children.length) {\n var _iterator = _createForOfIteratorHelper$1(node.children),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var child = _step.value;\n this.propagateDown(child, check, selectionKeys);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n },\n propagateUp: function propagateUp(event) {\n var check = event.check;\n var _selectionKeys = _objectSpread$1({}, event.selectionKeys);\n var checkedChildCount = 0;\n var childPartialSelected = false;\n var _iterator2 = _createForOfIteratorHelper$1(this.node.children),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var child = _step2.value;\n if (_selectionKeys[child.key] && _selectionKeys[child.key].checked) checkedChildCount++;else if (_selectionKeys[child.key] && _selectionKeys[child.key].partialChecked) childPartialSelected = true;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n if (check && checkedChildCount === this.node.children.length) {\n _selectionKeys[this.node.key] = {\n checked: true,\n partialChecked: false\n };\n } else {\n if (!check) {\n delete _selectionKeys[this.node.key];\n }\n if (childPartialSelected || checkedChildCount > 0 && checkedChildCount !== this.node.children.length) _selectionKeys[this.node.key] = {\n checked: false,\n partialChecked: true\n };else delete _selectionKeys[this.node.key];\n }\n this.$emit('checkbox-change', {\n node: event.node,\n check: event.check,\n selectionKeys: _selectionKeys\n });\n },\n onChildCheckboxChange: function onChildCheckboxChange(event) {\n this.$emit('checkbox-change', event);\n },\n findNextSiblingOfAncestor: function findNextSiblingOfAncestor(nodeElement) {\n var parentNodeElement = this.getParentNodeElement(nodeElement);\n if (parentNodeElement) {\n if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;else return this.findNextSiblingOfAncestor(parentNodeElement);\n } else {\n return null;\n }\n },\n findLastVisibleDescendant: function findLastVisibleDescendant(nodeElement) {\n var childrenListElement = nodeElement.children[1];\n if (childrenListElement) {\n var lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n return this.findLastVisibleDescendant(lastChildElement);\n } else {\n return nodeElement;\n }\n },\n getParentNodeElement: function getParentNodeElement(nodeElement) {\n var parentNodeElement = nodeElement.parentElement.parentElement;\n return getAttribute(parentNodeElement, 'role') === 'treeitem' ? parentNodeElement : null;\n },\n focusNode: function focusNode(element) {\n element.focus();\n },\n isCheckboxSelectionMode: function isCheckboxSelectionMode() {\n return this.selectionMode === 'checkbox';\n },\n isSameNode: function isSameNode(event) {\n return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role=\"treeitem\"]')));\n }\n },\n computed: {\n hasChildren: function hasChildren() {\n return this.node.children && this.node.children.length > 0;\n },\n expanded: function expanded() {\n return this.expandedKeys && this.expandedKeys[this.node.key] === true;\n },\n leaf: function leaf() {\n return this.node.leaf === false ? false : !(this.node.children && this.node.children.length);\n },\n selectable: function selectable() {\n return this.node.selectable === false ? false : this.selectionMode != null;\n },\n selected: function selected() {\n return this.selectionMode && this.selectionKeys ? this.selectionKeys[this.node.key] === true : false;\n },\n checkboxMode: function checkboxMode() {\n return this.selectionMode === 'checkbox' && this.node.selectable !== false;\n },\n checked: function checked() {\n return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].checked : false;\n },\n partialChecked: function partialChecked() {\n return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].partialChecked : false;\n },\n ariaChecked: function ariaChecked() {\n return this.selectionMode === 'single' || this.selectionMode === 'multiple' ? this.selected : undefined;\n },\n ariaSelected: function ariaSelected() {\n return this.checkboxMode ? this.checked : undefined;\n }\n },\n components: {\n Checkbox: Checkbox,\n ChevronDownIcon: ChevronDownIcon,\n ChevronRightIcon: ChevronRightIcon,\n CheckIcon: CheckIcon,\n MinusIcon: MinusIcon,\n SpinnerIcon: SpinnerIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1$1 = [\"aria-label\", \"aria-selected\", \"aria-expanded\", \"aria-setsize\", \"aria-posinset\", \"aria-level\", \"aria-checked\", \"tabindex\"];\nvar _hoisted_2 = [\"data-p-selected\", \"data-p-selectable\"];\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_SpinnerIcon = resolveComponent(\"SpinnerIcon\");\n var _component_Checkbox = resolveComponent(\"Checkbox\");\n var _component_TreeNode = resolveComponent(\"TreeNode\", true);\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createElementBlock(\"li\", mergeProps({\n ref: \"currentNode\",\n \"class\": _ctx.cx('node'),\n role: \"treeitem\",\n \"aria-label\": $options.label($props.node),\n \"aria-selected\": $options.ariaSelected,\n \"aria-expanded\": $options.expanded,\n \"aria-setsize\": $props.node.children ? $props.node.children.length : 0,\n \"aria-posinset\": $props.index + 1,\n \"aria-level\": $props.level,\n \"aria-checked\": $options.ariaChecked,\n tabindex: $props.index === 0 ? 0 : -1,\n onKeydown: _cache[4] || (_cache[4] = function () {\n return $options.onKeyDown && $options.onKeyDown.apply($options, arguments);\n })\n }, $props.level === 1 ? $options.getPTOptions('node') : _ctx.ptm('nodeChildren')), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('nodeContent'),\n onClick: _cache[2] || (_cache[2] = function () {\n return $options.onClick && $options.onClick.apply($options, arguments);\n }),\n onTouchend: _cache[3] || (_cache[3] = function () {\n return $options.onTouchEnd && $options.onTouchEnd.apply($options, arguments);\n }),\n style: $props.node.style\n }, $options.getPTOptions('nodeContent'), {\n \"data-p-selected\": $options.checkboxMode ? $options.checked : $options.selected,\n \"data-p-selectable\": $options.selectable\n }), [withDirectives((openBlock(), createElementBlock(\"button\", mergeProps({\n type: \"button\",\n \"class\": _ctx.cx('nodeToggleButton'),\n onClick: _cache[0] || (_cache[0] = function () {\n return $options.toggle && $options.toggle.apply($options, arguments);\n }),\n tabindex: \"-1\"\n }, $options.getPTOptions('nodeToggleButton')), [$props.node.loading && $props.loadingMode === 'icon' ? (openBlock(), createElementBlock(Fragment, {\n key: 0\n }, [$props.templates['nodetoggleicon'] || $props.templates['nodetogglericon'] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates['nodetoggleicon'] || $props.templates['nodetogglericon']), {\n key: 0,\n \"class\": normalizeClass(_ctx.cx('nodeToggleIcon'))\n }, null, 8, [\"class\"])) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({\n key: 1,\n spin: \"\",\n \"class\": _ctx.cx('nodetogglericon')\n }, _ctx.ptm('nodeToggleIcon')), null, 16, [\"class\"]))], 64)) : (openBlock(), createElementBlock(Fragment, {\n key: 1\n }, [$props.templates['nodetoggleicon'] || $props.templates['togglericon'] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates['nodetoggleicon'] || $props.templates['togglericon']), {\n key: 0,\n node: $props.node,\n expanded: $options.expanded,\n \"class\": normalizeClass(_ctx.cx('nodeToggleIcon'))\n }, null, 8, [\"node\", \"expanded\", \"class\"])) : $options.expanded ? (openBlock(), createBlock(resolveDynamicComponent($props.node.expandedIcon ? 'span' : 'ChevronDownIcon'), mergeProps({\n key: 1,\n \"class\": _ctx.cx('nodeToggleIcon')\n }, $options.getPTOptions('nodeToggleIcon')), null, 16, [\"class\"])) : (openBlock(), createBlock(resolveDynamicComponent($props.node.collapsedIcon ? 'span' : 'ChevronRightIcon'), mergeProps({\n key: 2,\n \"class\": _ctx.cx('nodeToggleIcon')\n }, $options.getPTOptions('nodeToggleIcon')), null, 16, [\"class\"]))], 64))], 16)), [[_directive_ripple]]), $options.checkboxMode ? (openBlock(), createBlock(_component_Checkbox, {\n key: 0,\n modelValue: $options.checked,\n binary: true,\n indeterminate: $options.partialChecked,\n \"class\": normalizeClass(_ctx.cx('nodeCheckbox')),\n tabindex: -1,\n unstyled: _ctx.unstyled,\n pt: $options.getPTOptions('nodeCheckbox'),\n \"data-p-partialchecked\": $options.partialChecked\n }, {\n icon: withCtx(function (slotProps) {\n return [$props.templates['checkboxicon'] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates['checkboxicon']), {\n key: 0,\n checked: slotProps.checked,\n partialChecked: $options.partialChecked,\n \"class\": normalizeClass(slotProps[\"class\"])\n }, null, 8, [\"checked\", \"partialChecked\", \"class\"])) : createCommentVNode(\"\", true)];\n }),\n _: 1\n }, 8, [\"modelValue\", \"indeterminate\", \"class\", \"unstyled\", \"pt\", \"data-p-partialchecked\"])) : createCommentVNode(\"\", true), $props.templates['nodeicon'] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates['nodeicon']), mergeProps({\n key: 1,\n node: $props.node,\n \"class\": [_ctx.cx('nodeIcon')]\n }, $options.getPTOptions('nodeIcon')), null, 16, [\"node\", \"class\"])) : (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 2,\n \"class\": [_ctx.cx('nodeIcon'), $props.node.icon]\n }, $options.getPTOptions('nodeIcon')), null, 16)), createElementVNode(\"span\", mergeProps({\n \"class\": _ctx.cx('nodeLabel')\n }, $options.getPTOptions('nodeLabel'), {\n onKeydown: _cache[1] || (_cache[1] = withModifiers(function () {}, [\"stop\"]))\n }), [$props.templates[$props.node.type] || $props.templates['default'] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates[$props.node.type] || $props.templates['default']), {\n key: 0,\n node: $props.node,\n selected: $options.checkboxMode ? $options.checked : $options.selected\n }, null, 8, [\"node\", \"selected\"])) : (openBlock(), createElementBlock(Fragment, {\n key: 1\n }, [createTextVNode(toDisplayString($options.label($props.node)), 1)], 64))], 16)], 16, _hoisted_2), $options.hasChildren && $options.expanded ? (openBlock(), createElementBlock(\"ul\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('nodeChildren'),\n role: \"group\"\n }, _ctx.ptm('nodeChildren')), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.node.children, function (childNode) {\n return openBlock(), createBlock(_component_TreeNode, {\n key: childNode.key,\n node: childNode,\n templates: $props.templates,\n level: $props.level + 1,\n loadingMode: $props.loadingMode,\n expandedKeys: $props.expandedKeys,\n onNodeToggle: $options.onChildNodeToggle,\n onNodeClick: $options.onChildNodeClick,\n selectionMode: $props.selectionMode,\n selectionKeys: $props.selectionKeys,\n onCheckboxChange: $options.propagateUp,\n unstyled: _ctx.unstyled,\n pt: _ctx.pt\n }, null, 8, [\"node\", \"templates\", \"level\", \"loadingMode\", \"expandedKeys\", \"onNodeToggle\", \"onNodeClick\", \"selectionMode\", \"selectionKeys\", \"onCheckboxChange\", \"unstyled\", \"pt\"]);\n }), 128))], 16)) : createCommentVNode(\"\", true)], 16, _hoisted_1$1);\n}\n\nscript$1.render = render$1;\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar script = {\n name: 'Tree',\n \"extends\": script$2,\n inheritAttrs: false,\n emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter'],\n data: function data() {\n return {\n d_expandedKeys: this.expandedKeys || {},\n filterValue: null\n };\n },\n watch: {\n expandedKeys: function expandedKeys(newValue) {\n this.d_expandedKeys = newValue;\n }\n },\n methods: {\n onNodeToggle: function onNodeToggle(node) {\n var key = node.key;\n if (this.d_expandedKeys[key]) {\n delete this.d_expandedKeys[key];\n this.$emit('node-collapse', node);\n } else {\n this.d_expandedKeys[key] = true;\n this.$emit('node-expand', node);\n }\n this.d_expandedKeys = _objectSpread({}, this.d_expandedKeys);\n this.$emit('update:expandedKeys', this.d_expandedKeys);\n },\n onNodeClick: function onNodeClick(event) {\n if (this.selectionMode != null && event.node.selectable !== false) {\n var metaSelection = event.nodeTouched ? false : this.metaKeySelection;\n var _selectionKeys = metaSelection ? this.handleSelectionWithMetaKey(event) : this.handleSelectionWithoutMetaKey(event);\n this.$emit('update:selectionKeys', _selectionKeys);\n }\n },\n onCheckboxChange: function onCheckboxChange(event) {\n this.$emit('update:selectionKeys', event.selectionKeys);\n if (event.check) this.$emit('node-select', event.node);else this.$emit('node-unselect', event.node);\n },\n handleSelectionWithMetaKey: function handleSelectionWithMetaKey(event) {\n var originalEvent = event.originalEvent;\n var node = event.node;\n var metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n var selected = this.isNodeSelected(node);\n var _selectionKeys;\n if (selected && metaKey) {\n if (this.isSingleSelectionMode()) {\n _selectionKeys = {};\n } else {\n _selectionKeys = _objectSpread({}, this.selectionKeys);\n delete _selectionKeys[node.key];\n }\n this.$emit('node-unselect', node);\n } else {\n if (this.isSingleSelectionMode()) {\n _selectionKeys = {};\n } else if (this.isMultipleSelectionMode()) {\n _selectionKeys = !metaKey ? {} : this.selectionKeys ? _objectSpread({}, this.selectionKeys) : {};\n }\n _selectionKeys[node.key] = true;\n this.$emit('node-select', node);\n }\n return _selectionKeys;\n },\n handleSelectionWithoutMetaKey: function handleSelectionWithoutMetaKey(event) {\n var node = event.node;\n var selected = this.isNodeSelected(node);\n var _selectionKeys;\n if (this.isSingleSelectionMode()) {\n if (selected) {\n _selectionKeys = {};\n this.$emit('node-unselect', node);\n } else {\n _selectionKeys = {};\n _selectionKeys[node.key] = true;\n this.$emit('node-select', node);\n }\n } else {\n if (selected) {\n _selectionKeys = _objectSpread({}, this.selectionKeys);\n delete _selectionKeys[node.key];\n this.$emit('node-unselect', node);\n } else {\n _selectionKeys = this.selectionKeys ? _objectSpread({}, this.selectionKeys) : {};\n _selectionKeys[node.key] = true;\n this.$emit('node-select', node);\n }\n }\n return _selectionKeys;\n },\n isSingleSelectionMode: function isSingleSelectionMode() {\n return this.selectionMode === 'single';\n },\n isMultipleSelectionMode: function isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n },\n isNodeSelected: function isNodeSelected(node) {\n return this.selectionMode && this.selectionKeys ? this.selectionKeys[node.key] === true : false;\n },\n isChecked: function isChecked(node) {\n return this.selectionKeys ? this.selectionKeys[node.key] && this.selectionKeys[node.key].checked : false;\n },\n isNodeLeaf: function isNodeLeaf(node) {\n return node.leaf === false ? false : !(node.children && node.children.length);\n },\n onFilterKeydown: function onFilterKeydown(event) {\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault();\n }\n this.$emit('filter', {\n originalEvent: event,\n value: event.target.value\n });\n },\n findFilteredNodes: function findFilteredNodes(node, paramsWithoutNode) {\n if (node) {\n var matched = false;\n if (node.children) {\n var childNodes = _toConsumableArray(node.children);\n node.children = [];\n var _iterator = _createForOfIteratorHelper(childNodes),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var childNode = _step.value;\n var copyChildNode = _objectSpread({}, childNode);\n if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n matched = true;\n node.children.push(copyChildNode);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n if (matched) {\n return true;\n }\n }\n },\n isFilterMatched: function isFilterMatched(node, _ref) {\n var searchFields = _ref.searchFields,\n filterText = _ref.filterText,\n strict = _ref.strict;\n var matched = false;\n var _iterator2 = _createForOfIteratorHelper(searchFields),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var field = _step2.value;\n var fieldValue = String(resolveFieldData(node, field)).toLocaleLowerCase(this.filterLocale);\n if (fieldValue.indexOf(filterText) > -1) {\n matched = true;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n if (!matched || strict && !this.isNodeLeaf(node)) {\n matched = this.findFilteredNodes(node, {\n searchFields: searchFields,\n filterText: filterText,\n strict: strict\n }) || matched;\n }\n return matched;\n }\n },\n computed: {\n filteredValue: function filteredValue() {\n var filteredNodes = [];\n var searchFields = this.filterBy.split(',');\n var filterText = this.filterValue.trim().toLocaleLowerCase(this.filterLocale);\n var strict = this.filterMode === 'strict';\n var _iterator3 = _createForOfIteratorHelper(this.value),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var node = _step3.value;\n var _node = _objectSpread({}, node);\n var paramsWithoutNode = {\n searchFields: searchFields,\n filterText: filterText,\n strict: strict\n };\n if (strict && (this.findFilteredNodes(_node, paramsWithoutNode) || this.isFilterMatched(_node, paramsWithoutNode)) || !strict && (this.isFilterMatched(_node, paramsWithoutNode) || this.findFilteredNodes(_node, paramsWithoutNode))) {\n filteredNodes.push(_node);\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n return filteredNodes;\n },\n valueToRender: function valueToRender() {\n if (this.filterValue && this.filterValue.trim().length > 0) return this.filteredValue;else return this.value;\n }\n },\n components: {\n TreeNode: script$1,\n InputText: InputText,\n InputIcon: InputIcon,\n IconField: IconField,\n SearchIcon: SearchIcon,\n SpinnerIcon: SpinnerIcon\n }\n};\n\nvar _hoisted_1 = [\"aria-labelledby\", \"aria-label\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_SpinnerIcon = resolveComponent(\"SpinnerIcon\");\n var _component_InputText = resolveComponent(\"InputText\");\n var _component_SearchIcon = resolveComponent(\"SearchIcon\");\n var _component_InputIcon = resolveComponent(\"InputIcon\");\n var _component_IconField = resolveComponent(\"IconField\");\n var _component_TreeNode = resolveComponent(\"TreeNode\");\n return openBlock(), createElementBlock(\"div\", mergeProps({\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [_ctx.loading && _ctx.loadingMode === 'mask' ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n \"class\": _ctx.cx('mask')\n }, _ctx.ptm('mask')), [renderSlot(_ctx.$slots, \"loadingicon\", {\n \"class\": normalizeClass(_ctx.cx('loadingIcon'))\n }, function () {\n return [_ctx.loadingIcon ? (openBlock(), createElementBlock(\"i\", mergeProps({\n key: 0,\n \"class\": [_ctx.cx('loadingIcon'), 'pi-spin', _ctx.loadingIcon]\n }, _ctx.ptm('loadingIcon')), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({\n key: 1,\n spin: \"\",\n \"class\": _ctx.cx('loadingIcon')\n }, _ctx.ptm('loadingIcon')), null, 16, [\"class\"]))];\n })], 16)) : createCommentVNode(\"\", true), _ctx.filter ? (openBlock(), createBlock(_component_IconField, {\n key: 1,\n unstyled: _ctx.unstyled,\n pt: _ctx.ptm('pcFilterContainer')\n }, {\n \"default\": withCtx(function () {\n return [createVNode(_component_InputText, {\n modelValue: $data.filterValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = function ($event) {\n return $data.filterValue = $event;\n }),\n autocomplete: \"off\",\n \"class\": normalizeClass(_ctx.cx('pcFilter')),\n placeholder: _ctx.filterPlaceholder,\n unstyled: _ctx.unstyled,\n onKeydown: $options.onFilterKeydown,\n pt: _ctx.ptm('pcFilter')\n }, null, 8, [\"modelValue\", \"class\", \"placeholder\", \"unstyled\", \"onKeydown\", \"pt\"]), createVNode(_component_InputIcon, {\n unstyled: _ctx.unstyled,\n pt: _ctx.ptm('pcFilterIconContainer')\n }, {\n \"default\": withCtx(function () {\n return [renderSlot(_ctx.$slots, _ctx.$slots.filtericon ? 'filtericon' : 'searchicon', {\n \"class\": normalizeClass(_ctx.cx('filterIcon'))\n }, function () {\n return [createVNode(_component_SearchIcon, mergeProps({\n \"class\": _ctx.cx('filterIcon')\n }, _ctx.ptm('filterIcon')), null, 16, [\"class\"])];\n })];\n }),\n _: 3\n }, 8, [\"unstyled\", \"pt\"])];\n }),\n _: 3\n }, 8, [\"unstyled\", \"pt\"])) : createCommentVNode(\"\", true), createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('wrapper'),\n style: {\n maxHeight: _ctx.scrollHeight\n }\n }, _ctx.ptm('wrapper')), [createElementVNode(\"ul\", mergeProps({\n \"class\": _ctx.cx('rootChildren'),\n role: \"tree\",\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel\n }, _ctx.ptm('rootChildren')), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.valueToRender, function (node, index) {\n return openBlock(), createBlock(_component_TreeNode, {\n key: node.key,\n node: node,\n templates: _ctx.$slots,\n level: _ctx.level + 1,\n index: index,\n expandedKeys: $data.d_expandedKeys,\n onNodeToggle: $options.onNodeToggle,\n onNodeClick: $options.onNodeClick,\n selectionMode: _ctx.selectionMode,\n selectionKeys: _ctx.selectionKeys,\n onCheckboxChange: $options.onCheckboxChange,\n loadingMode: _ctx.loadingMode,\n unstyled: _ctx.unstyled,\n pt: _ctx.pt\n }, null, 8, [\"node\", \"templates\", \"level\", \"index\", \"expandedKeys\", \"onNodeToggle\", \"onNodeClick\", \"selectionMode\", \"selectionKeys\", \"onCheckboxChange\", \"loadingMode\", \"unstyled\", \"pt\"]);\n }), 128))], 16, _hoisted_1)], 16)], 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseStyle from '@primevue/core/base/style';\n\nvar theme = function theme(_ref) {\n var dt = _ref.dt;\n return \"\\n.p-contextmenu {\\n background: \".concat(dt('contextmenu.background'), \";\\n color: \").concat(dt('contextmenu.color'), \";\\n border: 1px solid \").concat(dt('contextmenu.border.color'), \";\\n border-radius: \").concat(dt('contextmenu.border.radius'), \";\\n box-shadow: \").concat(dt('contextmenu.shadow'), \";\\n min-width: 12.5rem;\\n}\\n\\n.p-contextmenu-root-list,\\n.p-contextmenu-submenu {\\n margin: 0;\\n padding: \").concat(dt('contextmenu.list.padding'), \";\\n list-style: none;\\n outline: 0 none;\\n display: flex;\\n flex-direction: column;\\n gap: \").concat(dt('contextmenu.list.gap'), \";\\n}\\n\\n.p-contextmenu-submenu {\\n position: absolute;\\n display: flex;\\n flex-direction: column;\\n min-width: 100%;\\n z-index: 1;\\n background: \").concat(dt('contextmenu.background'), \";\\n color: \").concat(dt('contextmenu.color'), \";\\n border: 1px solid \").concat(dt('contextmenu.border.color'), \";\\n border-radius: \").concat(dt('contextmenu.border.radius'), \";\\n box-shadow: \").concat(dt('contextmenu.shadow'), \";\\n}\\n\\n.p-contextmenu-item {\\n position: relative;\\n}\\n\\n.p-contextmenu-item-content {\\n transition: background \").concat(dt('contextmenu.transition.duration'), \", color \").concat(dt('contextmenu.transition.duration'), \";\\n border-radius: \").concat(dt('contextmenu.item.border.radius'), \";\\n color: \").concat(dt('contextmenu.item.color'), \";\\n}\\n\\n.p-contextmenu-item-link {\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n text-decoration: none;\\n overflow: hidden;\\n position: relative;\\n color: inherit;\\n padding: \").concat(dt('contextmenu.item.padding'), \";\\n gap: \").concat(dt('contextmenu.item.gap'), \";\\n user-select: none;\\n}\\n\\n.p-contextmenu-item-label {\\n line-height: 1;\\n}\\n\\n.p-contextmenu-item-icon {\\n color: \").concat(dt('contextmenu.item.icon.color'), \";\\n}\\n\\n.p-contextmenu-submenu-icon {\\n color: \").concat(dt('contextmenu.submenu.icon.color'), \";\\n margin-left: auto;\\n font-size: \").concat(dt('contextmenu.submenu.icon.size'), \";\\n width: \").concat(dt('contextmenu.submenu.icon.size'), \";\\n height: \").concat(dt('contextmenu.submenu.icon.size'), \";\\n}\\n\\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content {\\n color: \").concat(dt('contextmenu.item.focus.color'), \";\\n background: \").concat(dt('contextmenu.item.focus.background'), \";\\n}\\n\\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content .p-contextmenu-item-icon {\\n color: \").concat(dt('contextmenu.item.icon.focus.color'), \";\\n}\\n\\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content .p-contextmenu-submenu-icon {\\n color: \").concat(dt('contextmenu.submenu.icon.focus.color'), \";\\n}\\n\\n.p-contextmenu-item:not(.p-disabled) > .p-contextmenu-item-content:hover {\\n color: \").concat(dt('contextmenu.item.focus.color'), \";\\n background: \").concat(dt('contextmenu.item.focus.background'), \";\\n}\\n\\n.p-contextmenu-item:not(.p-disabled) > .p-contextmenu-item-content:hover .p-contextmenu-item-icon {\\n color: \").concat(dt('contextmenu.item.icon.focus.color'), \";\\n}\\n\\n.p-contextmenu-item:not(.p-disabled) > .p-contextmenu-item-content:hover .p-contextmenu-submenu-icon {\\n color: \").concat(dt('contextmenu.submenu.icon.focus.color'), \";\\n}\\n\\n.p-contextmenu-item-active > .p-contextmenu-item-content {\\n color: \").concat(dt('contextmenu.item.active.color'), \";\\n background: \").concat(dt('contextmenu.item.active.background'), \";\\n}\\n\\n.p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-item-icon {\\n color: \").concat(dt('contextmenu.item.icon.active.color'), \";\\n}\\n\\n.p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-submenu-icon {\\n color: \").concat(dt('contextmenu.submenu.icon.active.color'), \";\\n}\\n\\n.p-contextmenu-separator {\\n border-top: 1px solid \").concat(dt('contextmenu.separator.border.color'), \";\\n}\\n\\n.p-contextmenu-enter-from,\\n.p-contextmenu-leave-active {\\n opacity: 0;\\n}\\n\\n.p-contextmenu-enter-active {\\n transition: opacity 250ms;\\n}\\n\");\n};\nvar classes = {\n root: 'p-contextmenu p-component',\n rootList: 'p-contextmenu-root-list',\n item: function item(_ref2) {\n var instance = _ref2.instance,\n processedItem = _ref2.processedItem;\n return ['p-contextmenu-item', {\n 'p-contextmenu-item-active': instance.isItemActive(processedItem),\n 'p-focus': instance.isItemFocused(processedItem),\n 'p-disabled': instance.isItemDisabled(processedItem)\n }];\n },\n itemContent: 'p-contextmenu-item-content',\n itemLink: 'p-contextmenu-item-link',\n itemIcon: 'p-contextmenu-item-icon',\n itemLabel: 'p-contextmenu-item-label',\n submenuIcon: 'p-contextmenu-submenu-icon',\n submenu: 'p-contextmenu-submenu',\n separator: 'p-contextmenu-separator'\n};\nvar ContextMenuStyle = BaseStyle.extend({\n name: 'contextmenu',\n theme: theme,\n classes: classes\n});\n\nexport { ContextMenuStyle as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'AngleRightIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M5.25 11.1728C5.14929 11.1694 5.05033 11.1455 4.9592 11.1025C4.86806 11.0595 4.78666 10.9984 4.72 10.9228C4.57955 10.7822 4.50066 10.5916 4.50066 10.3928C4.50066 10.1941 4.57955 10.0035 4.72 9.86283L7.72 6.86283L4.72 3.86283C4.66067 3.71882 4.64765 3.55991 4.68275 3.40816C4.71785 3.25642 4.79932 3.11936 4.91585 3.01602C5.03238 2.91268 5.17819 2.84819 5.33305 2.83149C5.4879 2.81479 5.64411 2.84671 5.78 2.92283L9.28 6.42283C9.42045 6.56346 9.49934 6.75408 9.49934 6.95283C9.49934 7.15158 9.42045 7.34221 9.28 7.48283L5.78 10.9228C5.71333 10.9984 5.63193 11.0595 5.5408 11.1025C5.44966 11.1455 5.35071 11.1694 5.25 11.1728Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import { UniqueComponentId } from '@primevue/core/utils';\nimport { nestedPosition, focus, findSingle, addStyle, getHiddenElementOuterWidth, getHiddenElementOuterHeight, getViewport, isTouchDevice } from '@primeuix/utils/dom';\nimport { resolve, isNotEmpty, isPrintableCharacter, isEmpty, findLastIndex } from '@primeuix/utils/object';\nimport { ZIndex } from '@primeuix/utils/zindex';\nimport Portal from 'primevue/portal';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport ContextMenuStyle from 'primevue/contextmenu/style';\nimport AngleRightIcon from '@primevue/icons/angleright';\nimport Ripple from 'primevue/ripple';\nimport { mergeProps, resolveComponent, resolveDirective, openBlock, createBlock, Transition, withCtx, createElementBlock, Fragment, renderList, createElementVNode, withDirectives, resolveDynamicComponent, normalizeClass, createCommentVNode, toDisplayString, createVNode } from 'vue';\n\nvar script$2 = {\n name: 'BaseContextMenu',\n \"extends\": BaseComponent,\n props: {\n model: {\n type: Array,\n \"default\": null\n },\n appendTo: {\n type: [String, Object],\n \"default\": 'body'\n },\n autoZIndex: {\n type: Boolean,\n \"default\": true\n },\n baseZIndex: {\n type: Number,\n \"default\": 0\n },\n global: {\n type: Boolean,\n \"default\": false\n },\n tabindex: {\n type: Number,\n \"default\": 0\n },\n ariaLabelledby: {\n type: String,\n \"default\": null\n },\n ariaLabel: {\n type: String,\n \"default\": null\n }\n },\n style: ContextMenuStyle,\n provide: function provide() {\n return {\n $pcContextMenu: this,\n $parentInstance: this\n };\n }\n};\n\nvar script$1 = {\n name: 'ContextMenuSub',\n hostName: 'ContextMenu',\n \"extends\": BaseComponent,\n emits: ['item-click', 'item-mouseenter', 'item-mousemove'],\n props: {\n items: {\n type: Array,\n \"default\": null\n },\n menuId: {\n type: String,\n \"default\": null\n },\n focusedItemId: {\n type: String,\n \"default\": null\n },\n root: {\n type: Boolean,\n \"default\": false\n },\n visible: {\n type: Boolean,\n \"default\": false\n },\n level: {\n type: Number,\n \"default\": 0\n },\n templates: {\n type: Object,\n \"default\": null\n },\n activeItemPath: {\n type: Object,\n \"default\": null\n },\n tabindex: {\n type: Number,\n \"default\": 0\n }\n },\n methods: {\n getItemId: function getItemId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key);\n },\n getItemKey: function getItemKey(processedItem) {\n return this.getItemId(processedItem);\n },\n getItemProp: function getItemProp(processedItem, name, params) {\n return processedItem && processedItem.item ? resolve(processedItem.item[name], params) : undefined;\n },\n getItemLabel: function getItemLabel(processedItem) {\n return this.getItemProp(processedItem, 'label');\n },\n getItemLabelId: function getItemLabelId(processedItem) {\n return \"\".concat(this.menuId, \"_\").concat(processedItem.key, \"_label\");\n },\n getPTOptions: function getPTOptions(key, processedItem, index) {\n return this.ptm(key, {\n context: {\n item: processedItem.item,\n active: this.isItemActive(processedItem),\n focused: this.isItemFocused(processedItem),\n disabled: this.isItemDisabled(processedItem),\n index: index\n }\n });\n },\n isItemActive: function isItemActive(processedItem) {\n return this.activeItemPath.some(function (path) {\n return path.key === processedItem.key;\n });\n },\n isItemVisible: function isItemVisible(processedItem) {\n return this.getItemProp(processedItem, 'visible') !== false;\n },\n isItemDisabled: function isItemDisabled(processedItem) {\n return this.getItemProp(processedItem, 'disabled');\n },\n isItemFocused: function isItemFocused(processedItem) {\n return this.focusedItemId === this.getItemId(processedItem);\n },\n isItemGroup: function isItemGroup(processedItem) {\n return isNotEmpty(processedItem.items);\n },\n onItemClick: function onItemClick(event, processedItem) {\n this.getItemProp(processedItem, 'command', {\n originalEvent: event,\n item: processedItem.item\n });\n this.$emit('item-click', {\n originalEvent: event,\n processedItem: processedItem,\n isFocus: true\n });\n },\n onItemMouseEnter: function onItemMouseEnter(event, processedItem) {\n this.$emit('item-mouseenter', {\n originalEvent: event,\n processedItem: processedItem\n });\n },\n onItemMouseMove: function onItemMouseMove(event, processedItem) {\n this.$emit('item-mousemove', {\n originalEvent: event,\n processedItem: processedItem,\n isFocus: true\n });\n },\n getAriaSetSize: function getAriaSetSize() {\n var _this = this;\n return this.items.filter(function (processedItem) {\n return _this.isItemVisible(processedItem) && !_this.getItemProp(processedItem, 'separator');\n }).length;\n },\n getAriaPosInset: function getAriaPosInset(index) {\n var _this2 = this;\n return index - this.items.slice(0, index).filter(function (processedItem) {\n return _this2.isItemVisible(processedItem) && _this2.getItemProp(processedItem, 'separator');\n }).length + 1;\n },\n onEnter: function onEnter() {\n nestedPosition(this.$refs.container, this.level);\n },\n getMenuItemProps: function getMenuItemProps(processedItem, index) {\n return {\n action: mergeProps({\n \"class\": this.cx('itemLink'),\n tabindex: -1,\n 'aria-hidden': true\n }, this.getPTOptions('itemLink', processedItem, index)),\n icon: mergeProps({\n \"class\": [this.cx('itemIcon'), this.getItemProp(processedItem, 'icon')]\n }, this.getPTOptions('itemIcon', processedItem, index)),\n label: mergeProps({\n \"class\": this.cx('itemLabel')\n }, this.getPTOptions('itemLabel', processedItem, index)),\n submenuicon: mergeProps({\n \"class\": this.cx('submenuIcon')\n }, this.getPTOptions('submenuicon', processedItem, index))\n };\n }\n },\n components: {\n AngleRightIcon: AngleRightIcon\n },\n directives: {\n ripple: Ripple\n }\n};\n\nvar _hoisted_1 = [\"tabindex\"];\nvar _hoisted_2 = [\"id\", \"aria-label\", \"aria-disabled\", \"aria-expanded\", \"aria-haspopup\", \"aria-level\", \"aria-setsize\", \"aria-posinset\", \"data-p-active\", \"data-p-focused\", \"data-p-disabled\"];\nvar _hoisted_3 = [\"onClick\", \"onMouseenter\", \"onMousemove\"];\nvar _hoisted_4 = [\"href\", \"target\"];\nvar _hoisted_5 = [\"id\"];\nvar _hoisted_6 = [\"id\"];\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_AngleRightIcon = resolveComponent(\"AngleRightIcon\");\n var _component_ContextMenuSub = resolveComponent(\"ContextMenuSub\", true);\n var _directive_ripple = resolveDirective(\"ripple\");\n return openBlock(), createBlock(Transition, mergeProps({\n name: \"p-contextmenusub\",\n onEnter: $options.onEnter\n }, _ctx.ptm('menu.transition')), {\n \"default\": withCtx(function () {\n return [($props.root ? true : $props.visible) ? (openBlock(), createElementBlock(\"ul\", mergeProps({\n key: 0,\n ref: \"container\",\n tabindex: $props.tabindex\n }, _ctx.ptm('rootList')), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function (processedItem, index) {\n return openBlock(), createElementBlock(Fragment, {\n key: $options.getItemKey(processedItem)\n }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 0,\n id: $options.getItemId(processedItem),\n style: $options.getItemProp(processedItem, 'style'),\n \"class\": [_ctx.cx('item', {\n processedItem: processedItem\n }), $options.getItemProp(processedItem, 'class')],\n role: \"menuitem\",\n \"aria-label\": $options.getItemLabel(processedItem),\n \"aria-disabled\": $options.isItemDisabled(processedItem) || undefined,\n \"aria-expanded\": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : undefined,\n \"aria-haspopup\": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, 'to') ? 'menu' : undefined,\n \"aria-level\": $props.level + 1,\n \"aria-setsize\": $options.getAriaSetSize(),\n \"aria-posinset\": $options.getAriaPosInset(index),\n ref_for: true\n }, $options.getPTOptions('item', processedItem, index), {\n \"data-p-active\": $options.isItemActive(processedItem),\n \"data-p-focused\": $options.isItemFocused(processedItem),\n \"data-p-disabled\": $options.isItemDisabled(processedItem)\n }), [createElementVNode(\"div\", mergeProps({\n \"class\": _ctx.cx('itemContent'),\n onClick: function onClick($event) {\n return $options.onItemClick($event, processedItem);\n },\n onMouseenter: function onMouseenter($event) {\n return $options.onItemMouseEnter($event, processedItem);\n },\n onMousemove: function onMousemove($event) {\n return $options.onItemMouseMove($event, processedItem);\n },\n ref_for: true\n }, $options.getPTOptions('itemContent', processedItem, index)), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock(\"a\", mergeProps({\n key: 0,\n href: $options.getItemProp(processedItem, 'url'),\n \"class\": _ctx.cx('itemLink'),\n target: $options.getItemProp(processedItem, 'target'),\n tabindex: \"-1\",\n ref_for: true\n }, $options.getPTOptions('itemLink', processedItem, index)), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), {\n key: 0,\n item: processedItem.item,\n \"class\": normalizeClass(_ctx.cx('itemIcon'))\n }, null, 8, [\"item\", \"class\"])) : $options.getItemProp(processedItem, 'icon') ? (openBlock(), createElementBlock(\"span\", mergeProps({\n key: 1,\n \"class\": [_ctx.cx('itemIcon'), $options.getItemProp(processedItem, 'icon')],\n ref_for: true\n }, $options.getPTOptions('itemIcon', processedItem, index)), null, 16)) : createCommentVNode(\"\", true), createElementVNode(\"span\", mergeProps({\n id: $options.getItemLabelId(processedItem),\n \"class\": _ctx.cx('itemLabel'),\n ref_for: true\n }, $options.getPTOptions('itemLabel', processedItem, index)), toDisplayString($options.getItemLabel(processedItem)), 17, _hoisted_5), $options.getItemProp(processedItem, 'items') ? (openBlock(), createElementBlock(Fragment, {\n key: 2\n }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), {\n key: 0,\n active: $options.isItemActive(processedItem),\n \"class\": normalizeClass(_ctx.cx('submenuIcon'))\n }, null, 8, [\"active\", \"class\"])) : (openBlock(), createBlock(_component_AngleRightIcon, mergeProps({\n key: 1,\n \"class\": _ctx.cx('submenuIcon'),\n ref_for: true\n }, $options.getPTOptions('submenuicon', processedItem, index)), null, 16, [\"class\"]))], 64)) : createCommentVNode(\"\", true)], 16, _hoisted_4)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), {\n key: 1,\n item: processedItem.item,\n hasSubmenu: $options.getItemProp(processedItem, 'items'),\n label: $options.getItemLabel(processedItem),\n props: $options.getMenuItemProps(processedItem, index)\n }, null, 8, [\"item\", \"hasSubmenu\", \"label\", \"props\"]))], 16, _hoisted_3), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_ContextMenuSub, mergeProps({\n key: 0,\n id: $options.getItemId(processedItem) + '_list',\n role: \"menu\",\n \"class\": _ctx.cx('submenu'),\n menuId: $props.menuId,\n focusedItemId: $props.focusedItemId,\n items: processedItem.items,\n templates: $props.templates,\n activeItemPath: $props.activeItemPath,\n level: $props.level + 1,\n visible: $options.isItemActive(processedItem) && $options.isItemGroup(processedItem),\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onItemClick: _cache[0] || (_cache[0] = function ($event) {\n return _ctx.$emit('item-click', $event);\n }),\n onItemMouseenter: _cache[1] || (_cache[1] = function ($event) {\n return _ctx.$emit('item-mouseenter', $event);\n }),\n onItemMousemove: _cache[2] || (_cache[2] = function ($event) {\n return _ctx.$emit('item-mousemove', $event);\n }),\n \"aria-labelledby\": $options.getItemLabelId(processedItem),\n ref_for: true\n }, _ctx.ptm('submenu')), null, 16, [\"id\", \"class\", \"menuId\", \"focusedItemId\", \"items\", \"templates\", \"activeItemPath\", \"level\", \"visible\", \"pt\", \"unstyled\", \"aria-labelledby\"])) : createCommentVNode(\"\", true)], 16, _hoisted_2)) : createCommentVNode(\"\", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, 'separator') ? (openBlock(), createElementBlock(\"li\", mergeProps({\n key: 1,\n id: $options.getItemId(processedItem),\n style: $options.getItemProp(processedItem, 'style'),\n \"class\": [_ctx.cx('separator'), $options.getItemProp(processedItem, 'class')],\n role: \"separator\",\n ref_for: true\n }, _ctx.ptm('separator')), null, 16, _hoisted_6)) : createCommentVNode(\"\", true)], 64);\n }), 128))], 16, _hoisted_1)) : createCommentVNode(\"\", true)];\n }),\n _: 1\n }, 16, [\"onEnter\"]);\n}\n\nscript$1.render = render$1;\n\nvar script = {\n name: 'ContextMenu',\n \"extends\": script$2,\n inheritAttrs: false,\n emits: ['focus', 'blur', 'show', 'hide', 'before-show', 'before-hide'],\n target: null,\n outsideClickListener: null,\n resizeListener: null,\n documentContextMenuListener: null,\n pageX: null,\n pageY: null,\n container: null,\n list: null,\n data: function data() {\n return {\n id: this.$attrs.id,\n focused: false,\n focusedItemInfo: {\n index: -1,\n level: 0,\n parentKey: ''\n },\n activeItemPath: [],\n visible: false,\n submenuVisible: false\n };\n },\n watch: {\n '$attrs.id': function $attrsId(newValue) {\n this.id = newValue || UniqueComponentId();\n },\n activeItemPath: function activeItemPath(newPath) {\n if (isNotEmpty(newPath)) {\n this.bindOutsideClickListener();\n this.bindResizeListener();\n } else if (!this.visible) {\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n }\n }\n },\n mounted: function mounted() {\n this.id = this.id || UniqueComponentId();\n if (this.global) {\n this.bindDocumentContextMenuListener();\n }\n },\n beforeUnmount: function beforeUnmount() {\n this.unbindResizeListener();\n this.unbindOutsideClickListener();\n this.unbindDocumentContextMenuListener();\n if (this.container && this.autoZIndex) {\n ZIndex.clear(this.container);\n }\n this.target = null;\n this.container = null;\n },\n methods: {\n getItemProp: function getItemProp(item, name) {\n return item ? resolve(item[name]) : undefined;\n },\n getItemLabel: function getItemLabel(item) {\n return this.getItemProp(item, 'label');\n },\n isItemDisabled: function isItemDisabled(item) {\n return this.getItemProp(item, 'disabled');\n },\n isItemVisible: function isItemVisible(item) {\n return this.getItemProp(item, 'visible') !== false;\n },\n isItemGroup: function isItemGroup(item) {\n return isNotEmpty(this.getItemProp(item, 'items'));\n },\n isItemSeparator: function isItemSeparator(item) {\n return this.getItemProp(item, 'separator');\n },\n getProccessedItemLabel: function getProccessedItemLabel(processedItem) {\n return processedItem ? this.getItemLabel(processedItem.item) : undefined;\n },\n isProccessedItemGroup: function isProccessedItemGroup(processedItem) {\n return processedItem && isNotEmpty(processedItem.items);\n },\n toggle: function toggle(event) {\n this.visible ? this.hide() : this.show(event);\n },\n show: function show(event) {\n this.$emit('before-show');\n this.activeItemPath = [];\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n focus(this.list);\n this.pageX = event.pageX;\n this.pageY = event.pageY;\n this.visible ? this.position() : this.visible = true;\n event.stopPropagation();\n event.preventDefault();\n },\n hide: function hide() {\n this.$emit('before-hide');\n this.visible = false;\n this.activeItemPath = [];\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n },\n onFocus: function onFocus(event) {\n this.focused = true;\n this.focusedItemInfo = this.focusedItemInfo.index !== -1 ? this.focusedItemInfo : {\n index: -1,\n level: 0,\n parentKey: ''\n };\n this.$emit('focus', event);\n },\n onBlur: function onBlur(event) {\n this.focused = false;\n this.focusedItemInfo = {\n index: -1,\n level: 0,\n parentKey: ''\n };\n this.searchValue = '';\n this.$emit('blur', event);\n },\n onKeyDown: function onKeyDown(event) {\n var metaKey = event.metaKey || event.ctrlKey;\n switch (event.code) {\n case 'ArrowDown':\n this.onArrowDownKey(event);\n break;\n case 'ArrowUp':\n this.onArrowUpKey(event);\n break;\n case 'ArrowLeft':\n this.onArrowLeftKey(event);\n break;\n case 'ArrowRight':\n this.onArrowRightKey(event);\n break;\n case 'Home':\n this.onHomeKey(event);\n break;\n case 'End':\n this.onEndKey(event);\n break;\n case 'Space':\n this.onSpaceKey(event);\n break;\n case 'Enter':\n case 'NumpadEnter':\n this.onEnterKey(event);\n break;\n case 'Escape':\n this.onEscapeKey(event);\n break;\n case 'Tab':\n this.onTabKey(event);\n break;\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n //NOOP\n break;\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n this.searchItems(event, event.key);\n }\n break;\n }\n },\n onItemChange: function onItemChange(event) {\n var processedItem = event.processedItem,\n isFocus = event.isFocus;\n if (isEmpty(processedItem)) return;\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey,\n items = processedItem.items;\n var grouped = isNotEmpty(items);\n var activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== parentKey && p.parentKey !== key;\n });\n if (grouped) {\n activeItemPath.push(processedItem);\n this.submenuVisible = true;\n }\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n this.activeItemPath = activeItemPath;\n isFocus && focus(this.list);\n },\n onItemClick: function onItemClick(event) {\n var processedItem = event.processedItem;\n var grouped = this.isProccessedItemGroup(processedItem);\n var selected = this.isSelected(processedItem);\n if (selected) {\n var index = processedItem.index,\n key = processedItem.key,\n level = processedItem.level,\n parentKey = processedItem.parentKey;\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return key !== p.key && key.startsWith(p.key);\n });\n this.focusedItemInfo = {\n index: index,\n level: level,\n parentKey: parentKey\n };\n focus(this.list);\n } else {\n grouped ? this.onItemChange(event) : this.hide();\n }\n },\n onItemMouseEnter: function onItemMouseEnter(event) {\n this.onItemChange(event);\n },\n onItemMouseMove: function onItemMouseMove(event) {\n if (this.focused) {\n this.changeFocusedItemIndex(event, event.processedItem.index);\n }\n },\n onArrowDownKey: function onArrowDownKey(event) {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n },\n onArrowUpKey: function onArrowUpKey(event) {\n if (event.altKey) {\n if (this.focusedItemInfo.index !== -1) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n }\n this.popup && this.hide();\n event.preventDefault();\n } else {\n var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex();\n this.changeFocusedItemIndex(event, itemIndex);\n event.preventDefault();\n }\n },\n onArrowLeftKey: function onArrowLeftKey(event) {\n var _this = this;\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var parentItem = this.activeItemPath.find(function (p) {\n return p.key === processedItem.parentKey;\n });\n var root = isEmpty(processedItem.parent);\n if (!root) {\n this.focusedItemInfo = {\n index: -1,\n parentKey: parentItem ? parentItem.parentKey : ''\n };\n this.searchValue = '';\n this.onArrowDownKey(event);\n }\n this.activeItemPath = this.activeItemPath.filter(function (p) {\n return p.parentKey !== _this.focusedItemInfo.parentKey;\n });\n event.preventDefault();\n },\n onArrowRightKey: function onArrowRightKey(event) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n if (grouped) {\n this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n this.focusedItemInfo = {\n index: -1,\n parentKey: processedItem.key\n };\n this.searchValue = '';\n this.onArrowDownKey(event);\n }\n event.preventDefault();\n },\n onHomeKey: function onHomeKey(event) {\n this.changeFocusedItemIndex(event, this.findFirstItemIndex());\n event.preventDefault();\n },\n onEndKey: function onEndKey(event) {\n this.changeFocusedItemIndex(event, this.findLastItemIndex());\n event.preventDefault();\n },\n onEnterKey: function onEnterKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var element = findSingle(this.list, \"li[id=\\\"\".concat(\"\".concat(this.focusedItemIdx), \"\\\"]\"));\n var anchorElement = element && findSingle(element, '[data-pc-section=\"itemlink\"]');\n anchorElement ? anchorElement.click() : element && element.click();\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex());\n }\n event.preventDefault();\n },\n onSpaceKey: function onSpaceKey(event) {\n this.onEnterKey(event);\n },\n onEscapeKey: function onEscapeKey(event) {\n this.hide();\n !this.popup && (this.focusedItemInfo.index = this.findFirstFocusedItemIndex());\n event.preventDefault();\n },\n onTabKey: function onTabKey(event) {\n if (this.focusedItemInfo.index !== -1) {\n var processedItem = this.visibleItems[this.focusedItemInfo.index];\n var grouped = this.isProccessedItemGroup(processedItem);\n !grouped && this.onItemChange({\n originalEvent: event,\n processedItem: processedItem\n });\n }\n this.hide();\n },\n onEnter: function onEnter(el) {\n addStyle(el, {\n position: 'absolute'\n });\n this.position();\n if (this.autoZIndex) {\n ZIndex.set('menu', el, this.baseZIndex + this.$primevue.config.zIndex.menu);\n }\n },\n onAfterEnter: function onAfterEnter() {\n this.bindOutsideClickListener();\n this.bindResizeListener();\n this.$emit('show');\n focus(this.list);\n },\n onLeave: function onLeave() {\n this.$emit('hide');\n this.container = null;\n },\n onAfterLeave: function onAfterLeave(el) {\n if (this.autoZIndex) {\n ZIndex.clear(el);\n }\n this.unbindOutsideClickListener();\n this.unbindResizeListener();\n },\n position: function position() {\n var left = this.pageX + 1;\n var top = this.pageY + 1;\n var width = this.container.offsetParent ? this.container.offsetWidth : getHiddenElementOuterWidth(this.container);\n var height = this.container.offsetParent ? this.container.offsetHeight : getHiddenElementOuterHeight(this.container);\n var viewport = getViewport();\n\n //flip\n if (left + width - document.body.scrollLeft > viewport.width) {\n left -= width;\n }\n\n //flip\n if (top + height - document.body.scrollTop > viewport.height) {\n top -= height;\n }\n\n //fit\n if (left < document.body.scrollLeft) {\n left = document.body.scrollLeft;\n }\n\n //fit\n if (top < document.body.scrollTop) {\n top = document.body.scrollTop;\n }\n this.container.style.left = left + 'px';\n this.container.style.top = top + 'px';\n },\n bindOutsideClickListener: function bindOutsideClickListener() {\n var _this2 = this;\n if (!this.outsideClickListener) {\n this.outsideClickListener = function (event) {\n var isOutsideContainer = _this2.container && !_this2.container.contains(event.target);\n var isOutsideTarget = _this2.visible ? !(_this2.target && (_this2.target === event.target || _this2.target.contains(event.target))) : true;\n if (isOutsideContainer && isOutsideTarget) {\n _this2.hide();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n },\n unbindOutsideClickListener: function unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n },\n bindResizeListener: function bindResizeListener() {\n var _this3 = this;\n if (!this.resizeListener) {\n this.resizeListener = function () {\n if (_this3.visible && !isTouchDevice()) {\n _this3.hide();\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n },\n unbindResizeListener: function unbindResizeListener() {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n },\n bindDocumentContextMenuListener: function bindDocumentContextMenuListener() {\n var _this4 = this;\n if (!this.documentContextMenuListener) {\n this.documentContextMenuListener = function (event) {\n event.button === 2 && _this4.show(event);\n };\n document.addEventListener('contextmenu', this.documentContextMenuListener);\n }\n },\n unbindDocumentContextMenuListener: function unbindDocumentContextMenuListener() {\n if (this.documentContextMenuListener) {\n document.removeEventListener('contextmenu', this.documentContextMenuListener);\n this.documentContextMenuListener = null;\n }\n },\n isItemMatched: function isItemMatched(processedItem) {\n var _this$getProccessedIt;\n return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase()));\n },\n isValidItem: function isValidItem(processedItem) {\n return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item);\n },\n isValidSelectedItem: function isValidSelectedItem(processedItem) {\n return this.isValidItem(processedItem) && this.isSelected(processedItem);\n },\n isSelected: function isSelected(processedItem) {\n return this.activeItemPath.some(function (p) {\n return p.key === processedItem.key;\n });\n },\n findFirstItemIndex: function findFirstItemIndex() {\n var _this5 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this5.isValidItem(processedItem);\n });\n },\n findLastItemIndex: function findLastItemIndex() {\n var _this6 = this;\n return findLastIndex(this.visibleItems, function (processedItem) {\n return _this6.isValidItem(processedItem);\n });\n },\n findNextItemIndex: function findNextItemIndex(index) {\n var _this7 = this;\n var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function (processedItem) {\n return _this7.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index;\n },\n findPrevItemIndex: function findPrevItemIndex(index) {\n var _this8 = this;\n var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function (processedItem) {\n return _this8.isValidItem(processedItem);\n }) : -1;\n return matchedItemIndex > -1 ? matchedItemIndex : index;\n },\n findSelectedItemIndex: function findSelectedItemIndex() {\n var _this9 = this;\n return this.visibleItems.findIndex(function (processedItem) {\n return _this9.isValidSelectedItem(processedItem);\n });\n },\n findFirstFocusedItemIndex: function findFirstFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex;\n },\n findLastFocusedItemIndex: function findLastFocusedItemIndex() {\n var selectedIndex = this.findSelectedItemIndex();\n return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex;\n },\n searchItems: function searchItems(event, _char) {\n var _this10 = this;\n this.searchValue = (this.searchValue || '') + _char;\n var itemIndex = -1;\n var matched = false;\n if (this.focusedItemInfo.index !== -1) {\n itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n });\n itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n }) : itemIndex + this.focusedItemInfo.index;\n } else {\n itemIndex = this.visibleItems.findIndex(function (processedItem) {\n return _this10.isItemMatched(processedItem);\n });\n }\n if (itemIndex !== -1) {\n matched = true;\n }\n if (itemIndex === -1 && this.focusedItemInfo.index === -1) {\n itemIndex = this.findFirstFocusedItemIndex();\n }\n if (itemIndex !== -1) {\n this.changeFocusedItemIndex(event, itemIndex);\n }\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(function () {\n _this10.searchValue = '';\n _this10.searchTimeout = null;\n }, 500);\n return matched;\n },\n changeFocusedItemIndex: function changeFocusedItemIndex(event, index) {\n if (this.focusedItemInfo.index !== index) {\n this.focusedItemInfo.index = index;\n this.scrollInView();\n }\n },\n scrollInView: function scrollInView() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;\n var id = index !== -1 ? \"\".concat(this.id, \"_\").concat(index) : this.focusedItemIdx;\n var element = findSingle(this.list, \"li[id=\\\"\".concat(id, \"\\\"]\"));\n if (element) {\n element.scrollIntoView && element.scrollIntoView({\n block: 'nearest',\n inline: 'start'\n });\n }\n },\n createProcessedItems: function createProcessedItems(items) {\n var _this11 = this;\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parentKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var processedItems = [];\n items && items.forEach(function (item, index) {\n var key = (parentKey !== '' ? parentKey + '_' : '') + index;\n var newItem = {\n item: item,\n index: index,\n level: level,\n key: key,\n parent: parent,\n parentKey: parentKey\n };\n newItem['items'] = _this11.createProcessedItems(item.items, level + 1, newItem, key);\n processedItems.push(newItem);\n });\n return processedItems;\n },\n containerRef: function containerRef(el) {\n this.container = el;\n },\n listRef: function listRef(el) {\n this.list = el ? el.$el : undefined;\n }\n },\n computed: {\n processedItems: function processedItems() {\n return this.createProcessedItems(this.model || []);\n },\n visibleItems: function visibleItems() {\n var _this12 = this;\n var processedItem = this.activeItemPath.find(function (p) {\n return p.key === _this12.focusedItemInfo.parentKey;\n });\n return processedItem ? processedItem.items : this.processedItems;\n },\n focusedItemIdx: function focusedItemIdx() {\n return this.focusedItemInfo.index !== -1 ? \"\".concat(this.id).concat(isNotEmpty(this.focusedItemInfo.parentKey) ? '_' + this.focusedItemInfo.parentKey : '', \"_\").concat(this.focusedItemInfo.index) : null;\n }\n },\n components: {\n ContextMenuSub: script$1,\n Portal: Portal\n }\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n var _component_ContextMenuSub = resolveComponent(\"ContextMenuSub\");\n var _component_Portal = resolveComponent(\"Portal\");\n return openBlock(), createBlock(_component_Portal, {\n appendTo: _ctx.appendTo\n }, {\n \"default\": withCtx(function () {\n return [createVNode(Transition, mergeProps({\n name: \"p-contextmenu\",\n onEnter: $options.onEnter,\n onAfterEnter: $options.onAfterEnter,\n onLeave: $options.onLeave,\n onAfterLeave: $options.onAfterLeave\n }, _ctx.ptm('transition')), {\n \"default\": withCtx(function () {\n return [$data.visible ? (openBlock(), createElementBlock(\"div\", mergeProps({\n key: 0,\n ref: $options.containerRef,\n \"class\": _ctx.cx('root')\n }, _ctx.ptmi('root')), [createVNode(_component_ContextMenuSub, {\n ref: $options.listRef,\n id: $data.id + '_list',\n \"class\": normalizeClass(_ctx.cx('rootList')),\n role: \"menubar\",\n root: true,\n tabindex: _ctx.tabindex,\n \"aria-orientation\": \"vertical\",\n \"aria-activedescendant\": $data.focused ? $options.focusedItemIdx : undefined,\n menuId: $data.id,\n focusedItemId: $data.focused ? $options.focusedItemIdx : undefined,\n items: $options.processedItems,\n templates: _ctx.$slots,\n activeItemPath: $data.activeItemPath,\n \"aria-labelledby\": _ctx.ariaLabelledby,\n \"aria-label\": _ctx.ariaLabel,\n level: 0,\n visible: $data.submenuVisible,\n pt: _ctx.pt,\n unstyled: _ctx.unstyled,\n onFocus: $options.onFocus,\n onBlur: $options.onBlur,\n onKeydown: $options.onKeyDown,\n onItemClick: $options.onItemClick,\n onItemMouseenter: $options.onItemMouseEnter,\n onItemMousemove: $options.onItemMouseMove\n }, null, 8, [\"id\", \"class\", \"tabindex\", \"aria-activedescendant\", \"menuId\", \"focusedItemId\", \"items\", \"templates\", \"activeItemPath\", \"aria-labelledby\", \"aria-label\", \"visible\", \"pt\", \"unstyled\", \"onFocus\", \"onBlur\", \"onKeydown\", \"onItemClick\", \"onItemMouseenter\", \"onItemMousemove\"])], 16)) : createCommentVNode(\"\", true)];\n }),\n _: 1\n }, 16, [\"onEnter\", \"onAfterEnter\", \"onLeave\", \"onAfterLeave\"])];\n }),\n _: 1\n }, 8, [\"appendTo\"]);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","\n\n\n\n\n","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bind = void 0;\nfunction bind(target, _a) {\n var type = _a.type, listener = _a.listener, options = _a.options;\n target.addEventListener(type, listener, options);\n return function unbind() {\n target.removeEventListener(type, listener, options);\n };\n}\nexports.bind = bind;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = void 0;\nvar bind_1 = require(\"./bind\");\nfunction toOptions(value) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n if (typeof value === 'boolean') {\n return {\n capture: value,\n };\n }\n return value;\n}\nfunction getBinding(original, sharedOptions) {\n if (sharedOptions == null) {\n return original;\n }\n var binding = __assign(__assign({}, original), { options: __assign(__assign({}, toOptions(sharedOptions)), toOptions(original.options)) });\n return binding;\n}\nfunction bindAll(target, bindings, sharedOptions) {\n var unbinds = bindings.map(function (original) {\n var binding = getBinding(original, sharedOptions);\n return (0, bind_1.bind)(target, binding);\n });\n return function unbindAll() {\n unbinds.forEach(function (unbind) { return unbind(); });\n };\n}\nexports.bindAll = bindAll;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = exports.bind = void 0;\nvar bind_1 = require(\"./bind\");\nObject.defineProperty(exports, \"bind\", { enumerable: true, get: function () { return bind_1.bind; } });\nvar bind_all_1 = require(\"./bind-all\");\nObject.defineProperty(exports, \"bindAll\", { enumerable: true, get: function () { return bind_all_1.bindAll; } });\n","// pulling this into a separate file so adapter(s) that don't\n// need the honey pot can pay as little as possible for it.\nexport var honeyPotDataAttribute = 'data-pdnd-honey-pot';","import { honeyPotDataAttribute } from './honey-pot-data-attribute';\nexport function isHoneyPotElement(target) {\n return target instanceof Element && target.hasAttribute(honeyPotDataAttribute);\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { isHoneyPotElement } from './is-honey-pot-element';\nexport function getElementFromPointWithoutHoneypot(client) {\n // eslint-disable-next-line no-restricted-syntax\n var _document$elementsFro = document.elementsFromPoint(client.x, client.y),\n _document$elementsFro2 = _slicedToArray(_document$elementsFro, 2),\n top = _document$elementsFro2[0],\n second = _document$elementsFro2[1];\n if (!top) {\n return null;\n }\n if (isHoneyPotElement(top)) {\n return second !== null && second !== void 0 ? second : null;\n }\n return top;\n}","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","// Maximum possible z-index\n// https://stackoverflow.com/questions/491052/minimum-and-maximum-value-of-z-index\nexport var maxZIndex = 2147483647;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { bind, bindAll } from 'bind-event-listener';\nimport { maxZIndex } from '../util/max-z-index';\nimport { honeyPotDataAttribute } from './honey-pot-data-attribute';\nvar honeyPotSize = 2;\nvar halfHoneyPotSize = honeyPotSize / 2;\n\n/**\n * `clientX` and `clientY` can be in sub pixels (eg `2.332`)\n * However, browser hitbox testing is commonly do to the closest pixel.\n *\n * → https://issues.chromium.org/issues/40940531\n *\n * To be sure that the honey pot will be over the `client` position,\n * we `.floor()` `clientX` and`clientY` and then make it `2px` in size.\n **/\nfunction floorToClosestPixel(point) {\n return {\n x: Math.floor(point.x),\n y: Math.floor(point.y)\n };\n}\n\n/**\n * We want to make sure the honey pot sits around the users position.\n * This seemed to be the most resilient while testing.\n */\nfunction pullBackByHalfHoneyPotSize(point) {\n return {\n x: point.x - halfHoneyPotSize,\n y: point.y - halfHoneyPotSize\n };\n}\n\n/**\n * Prevent the honey pot from changing the window size.\n * This is super unlikely to occur, but just being safe.\n */\nfunction preventGoingBackwardsOffScreen(point) {\n return {\n x: Math.max(point.x, 0),\n y: Math.max(point.y, 0)\n };\n}\n\n/**\n * Prevent the honey pot from changing the window size.\n * This is super unlikely to occur, but just being safe.\n */\nfunction preventGoingForwardsOffScreen(point) {\n return {\n x: Math.min(point.x, window.innerWidth - honeyPotSize),\n y: Math.min(point.y, window.innerHeight - honeyPotSize)\n };\n}\n\n/**\n * Create a `2x2` `DOMRect` around the `client` position\n */\nfunction getHoneyPotRectFor(_ref) {\n var client = _ref.client;\n var point = preventGoingForwardsOffScreen(preventGoingBackwardsOffScreen(pullBackByHalfHoneyPotSize(floorToClosestPixel(client))));\n\n // When debugging, it is helpful to\n // make this element a bit bigger\n return DOMRect.fromRect({\n x: point.x,\n y: point.y,\n width: honeyPotSize,\n height: honeyPotSize\n });\n}\nfunction getRectStyles(_ref2) {\n var clientRect = _ref2.clientRect;\n return {\n left: \"\".concat(clientRect.left, \"px\"),\n top: \"\".concat(clientRect.top, \"px\"),\n width: \"\".concat(clientRect.width, \"px\"),\n height: \"\".concat(clientRect.height, \"px\")\n };\n}\nfunction isWithin(_ref3) {\n var client = _ref3.client,\n clientRect = _ref3.clientRect;\n return (\n // is within horizontal bounds\n client.x >= clientRect.x && client.x <= clientRect.x + clientRect.width &&\n // is within vertical bounds\n client.y >= clientRect.y && client.y <= clientRect.y + clientRect.height\n );\n}\n/**\n * The honey pot fix is designed to get around a painful bug in all browsers.\n *\n * [Overview](https://www.youtube.com/watch?v=udE9qbFTeQg)\n *\n * **Background**\n *\n * When a drag starts, browsers incorrectly think that the users pointer is\n * still depressed where the drag started. Any element that goes under this position\n * will be entered into, causing `\"mouseenter\"` events and `\":hover\"` styles to be applied.\n *\n * _This is a violation of the spec_\n *\n * > \"From the moment that the user agent is to initiate the drag-and-drop operation,\n * > until the end \tof the drag-and-drop operation, device input events\n * > (e.g. mouse and keyboard events) must be suppressed.\"\n * >\n * > - https://html.spec.whatwg.org/multipage/dnd.html#drag-and-drop-processing-model\n *\n * _Some impacts_\n *\n * - `\":hover\"` styles being applied where they shouldn't (looks messy)\n * - components such as tooltips responding to `\"mouseenter\"` can show during a drag,\n * and on an element the user isn't even over\n *\n * Bug: https://issues.chromium.org/issues/41129937\n *\n * **Honey pot fix**\n *\n * 1. Create an element where the browser thinks the depressed pointer is\n * to absorb the incorrect pointer events\n * 2. Remove that element when it is no longer needed\n */\nfunction mountHoneyPot(_ref4) {\n var initial = _ref4.initial;\n var element = document.createElement('div');\n element.setAttribute(honeyPotDataAttribute, 'true');\n\n // can shift during the drag thanks to Firefox\n var clientRect = getHoneyPotRectFor({\n client: initial\n });\n Object.assign(element.style, _objectSpread(_objectSpread({\n // Setting a background color explicitly to avoid any inherited styles.\n // Looks like this could be `opacity: 0`, but worried that _might_\n // cause the element to be ignored on some platforms.\n // When debugging, set backgroundColor to something like \"red\".\n backgroundColor: 'transparent',\n position: 'fixed',\n // Being explicit to avoid inheriting styles\n padding: 0,\n margin: 0,\n boxSizing: 'border-box'\n }, getRectStyles({\n clientRect: clientRect\n })), {}, {\n // We want this element to absorb pointer events,\n // it's kind of the whole point 😉\n pointerEvents: 'auto',\n // Want to make sure the honey pot is top of everything else.\n // Don't need to worry about native drag previews, as they will\n // have been rendered (and removed) before the honey pot is rendered\n zIndex: maxZIndex\n }));\n document.body.appendChild(element);\n\n /**\n * 🦊 In firefox we can get `\"pointermove\"` events after the drag\n * has started, which is a spec violation.\n * The final `\"pointermove\"` will reveal where the \"depressed\" position\n * is for our honey pot fix.\n */\n var unbindPointerMove = bind(window, {\n type: 'pointermove',\n listener: function listener(event) {\n var client = {\n x: event.clientX,\n y: event.clientY\n };\n clientRect = getHoneyPotRectFor({\n client: client\n });\n Object.assign(element.style, getRectStyles({\n clientRect: clientRect\n }));\n },\n // using capture so we are less likely to be impacted by event stopping\n options: {\n capture: true\n }\n });\n return function finish(_ref5) {\n var current = _ref5.current;\n // Don't need this any more\n unbindPointerMove();\n\n // If the user is hover the honey pot, we remove it\n // so that the user can continue to interact with the page normally.\n if (isWithin({\n client: current,\n clientRect: clientRect\n })) {\n element.remove();\n return;\n }\n function cleanup() {\n unbindPostDragEvents();\n element.remove();\n }\n var unbindPostDragEvents = bindAll(window, [{\n type: 'pointerdown',\n listener: cleanup\n }, {\n type: 'pointermove',\n listener: cleanup\n }, {\n type: 'focusin',\n listener: cleanup\n }, {\n type: 'focusout',\n listener: cleanup\n },\n // a 'pointerdown' should happen before 'dragstart', but just being super safe\n {\n type: 'dragstart',\n listener: cleanup\n },\n // if the user has dragged something out of the window\n // and then is dragging something back into the window\n // the first events we will see are \"dragenter\" (and then \"dragover\").\n // So if we see any of these we need to clear the post drag fix.\n {\n type: 'dragenter',\n listener: cleanup\n }, {\n type: 'dragover',\n listener: cleanup\n }\n\n // Not adding a \"wheel\" event listener, as \"wheel\" by itself does not\n // resolve the bug.\n ], {\n // Using `capture` so less likely to be impacted by other code stopping events\n capture: true\n });\n };\n}\nexport function makeHoneyPotFix() {\n var latestPointerMove = null;\n function bindEvents() {\n // For sanity, only collecting this value from when events are first bound.\n // This prevents the case where a super old \"pointermove\" could be used\n // from a prior interaction.\n latestPointerMove = null;\n return bind(window, {\n type: 'pointermove',\n listener: function listener(event) {\n latestPointerMove = {\n x: event.clientX,\n y: event.clientY\n };\n },\n // listening for pointer move in capture phase\n // so we are less likely to be impacted by events being stopped.\n options: {\n capture: true\n }\n });\n }\n function getOnPostDispatch() {\n var finish = null;\n return function onPostEvent(_ref6) {\n var eventName = _ref6.eventName,\n payload = _ref6.payload;\n // We are adding the honey pot `onDragStart` so we don't\n // impact the creation of the native drag preview.\n if (eventName === 'onDragStart') {\n var _latestPointerMove;\n var input = payload.location.initial.input;\n\n // Sometimes there will be no latest \"pointermove\" (eg iOS).\n // In which case, we use the start position of the drag.\n var initial = (_latestPointerMove = latestPointerMove) !== null && _latestPointerMove !== void 0 ? _latestPointerMove : {\n x: input.clientX,\n y: input.clientY\n };\n\n // Don't need to defensively call `finish()` as `onDrop` from\n // one interaction is guaranteed to be called before `onDragStart`\n // of the next.\n finish = mountHoneyPot({\n initial: initial\n });\n }\n if (eventName === 'onDrop') {\n var _finish;\n var _input = payload.location.current.input;\n (_finish = finish) === null || _finish === void 0 || _finish({\n current: {\n x: _input.clientX,\n y: _input.clientY\n }\n });\n finish = null;\n // this interaction is finished, we want to use\n // the latest \"pointermove\" for each interaction\n latestPointerMove = null;\n }\n };\n }\n return {\n bindEvents: bindEvents,\n getOnPostDispatch: getOnPostDispatch\n };\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","/** Provide a function that you only ever want to be called a single time */\nexport function once(fn) {\n var cache = null;\n return function wrapped() {\n if (!cache) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var result = fn.apply(this, args);\n cache = {\n result: result\n };\n }\n return cache.result;\n };\n}","import { once } from '../public-utils/once';\n\n// using `cache` as our `isFirefox()` result will not change in a browser\n\n/**\n * Returns `true` if a `Firefox` browser\n * */\nexport var isFirefox = once(function isFirefox() {\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n return navigator.userAgent.includes('Firefox');\n});","import { once } from '../public-utils/once';\n\n// using `cache` as our `isSafari()` result will not change in a browser\n\n/**\n * Returns `true` if a `Safari` browser.\n * Returns `true` if the browser is running on iOS (they are all Safari).\n * */\nexport var isSafari = once(function isSafari() {\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n var _navigator = navigator,\n userAgent = _navigator.userAgent;\n return userAgent.includes('AppleWebKit') && !userAgent.includes('Chrome');\n});","import { bindAll } from 'bind-event-listener';\nimport { isSafari } from '../is-safari';\n\n/* For \"dragenter\" events, the browser should set `relatedTarget` to the previous element.\n * For external drag operations, our first \"dragenter\" event should have a `event.relatedTarget` of `null`.\n *\n * Unfortunately in Safari `event.relatedTarget` is *always* set to `null`\n * Safari bug: https://bugs.webkit.org/show_bug.cgi?id=242627\n * To work around this we count \"dragenter\" and \"dragleave\" events */\n\n// Using symbols for event properties so we don't clash with\n// anything on the `event` object\nvar symbols = {\n isLeavingWindow: Symbol('leaving'),\n isEnteringWindow: Symbol('entering')\n};\nexport function isEnteringWindowInSafari(_ref) {\n var dragEnter = _ref.dragEnter;\n if (!isSafari()) {\n return false;\n }\n return dragEnter.hasOwnProperty(symbols.isEnteringWindow);\n}\nexport function isLeavingWindowInSafari(_ref2) {\n var dragLeave = _ref2.dragLeave;\n if (!isSafari()) {\n return false;\n }\n return dragLeave.hasOwnProperty(symbols.isLeavingWindow);\n}\n(function fixSafari() {\n // Don't do anything when server side rendering\n if (typeof window === 'undefined') {\n return;\n }\n\n // rather than checking the userAgent for \"jsdom\" we can do this check\n // so that the check will be removed completely in production code\n if (process.env.NODE_ENV === 'test') {\n return;\n }\n if (!isSafari()) {\n return;\n }\n function getInitialState() {\n return {\n enterCount: 0,\n isOverWindow: false\n };\n }\n var state = getInitialState();\n function resetState() {\n state = getInitialState();\n }\n\n // These event listeners are bound _forever_ and _never_ removed\n // We don't bother cleaning up these event listeners (for now)\n // as this workaround is only for Safari\n\n // This is how the event count works:\n //\n // lift (+1 enterCount)\n // - dragstart(draggable) [enterCount: 0]\n // - dragenter(draggable) [enterCount: 1]\n // leaving draggable (+0 enterCount)\n // - dragenter(document.body) [enterCount: 2]\n // - dragleave(draggable) [enterCount: 1]\n // leaving window (-1 enterCount)\n // - dragleave(document.body) [enterCount: 0] {leaving the window}\n\n // Things to note:\n // - dragenter and dragleave bubble\n // - the first dragenter when entering a window might not be on `window`\n // - it could be on an element that is pressed up against the window\n // - (so we cannot rely on `event.target` values)\n\n bindAll(window, [{\n type: 'dragstart',\n listener: function listener() {\n state.enterCount = 0;\n // drag start occurs in the source window\n state.isOverWindow = true;\n // When a drag first starts it will also trigger a \"dragenter\" on the draggable element\n }\n }, {\n type: 'drop',\n listener: resetState\n }, {\n type: 'dragend',\n listener: resetState\n }, {\n type: 'dragenter',\n listener: function listener(event) {\n if (!state.isOverWindow && state.enterCount === 0) {\n // Patching the `event` object\n // The `event` object is shared with all event listeners for the event\n // @ts-expect-error: adding property to the event object\n event[symbols.isEnteringWindow] = true;\n }\n state.isOverWindow = true;\n state.enterCount++;\n }\n }, {\n type: 'dragleave',\n listener: function listener(event) {\n state.enterCount--;\n if (state.isOverWindow && state.enterCount === 0) {\n // Patching the `event` object as it is shared with all event listeners\n // The `event` object is shared with all event listeners for the event\n // @ts-expect-error: adding property to the event object\n event[symbols.isLeavingWindow] = true;\n state.isOverWindow = false;\n }\n }\n }],\n // using `capture: true` so that adding event listeners\n // in bubble phase will have the correct symbols\n {\n capture: true\n });\n})();","/**\n * Does the `EventTarget` look like a `Node` based on \"duck typing\".\n *\n * Helpful when the `Node` might be outside of the current document\n * so we cannot to an `target instanceof Node` check.\n */\nfunction isNodeLike(target) {\n return 'nodeName' in target;\n}\n\n/**\n * Is an `EventTarget` a `Node` from another `window`?\n */\nexport function isFromAnotherWindow(eventTarget) {\n return isNodeLike(eventTarget) && eventTarget.ownerDocument !== document;\n}","import { isFirefox } from '../is-firefox';\nimport { isSafari } from '../is-safari';\nimport { isLeavingWindowInSafari } from './count-events-for-safari';\nimport { isFromAnotherWindow } from './is-from-another-window';\nexport function isLeavingWindow(_ref) {\n var dragLeave = _ref.dragLeave;\n var type = dragLeave.type,\n relatedTarget = dragLeave.relatedTarget;\n if (type !== 'dragleave') {\n return false;\n }\n if (isSafari()) {\n return isLeavingWindowInSafari({\n dragLeave: dragLeave\n });\n }\n\n // Standard check: if going to `null` we are leaving the `window`\n if (relatedTarget == null) {\n return true;\n }\n\n /**\n * 🦊 Exception: `iframe` in Firefox (`125.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `dragLeave.relatedTarget` is element _inside_ the child `iframe`\n * (foreign element)\n *\n * Case 2: child `iframe` → parent `window`\n * `dragLeave.relatedTarget` is the `iframe` in the parent `window`\n * (foreign element)\n */\n\n if (isFirefox()) {\n return isFromAnotherWindow(relatedTarget);\n }\n\n /**\n * 🌏 Exception: `iframe` in Chrome (`124.0`)\n *\n * Case 1: parent `window` → child `iframe`\n * `dragLeave.relatedTarget` is the `iframe` in the parent `window`\n *\n * Case 2: child `iframe` → parent `window`\n * `dragLeave.relatedTarget` is `null` *(standard check)*\n */\n\n // Case 2\n // Using `instanceof` check as the element will be in the same `window`\n return relatedTarget instanceof HTMLIFrameElement;\n}","export function getBindingsForBrokenDrags(_ref) {\n var onDragEnd = _ref.onDragEnd;\n return [\n // ## Detecting drag ending for removed draggables\n //\n // If a draggable element is removed during a drag and the user drops:\n // 1. if over a valid drop target: we get a \"drop\" event to know the drag is finished\n // 2. if not over a valid drop target (or cancelled): we get nothing\n // The \"dragend\" event will not fire on the source draggable if it has been\n // removed from the DOM.\n // So we need to figure out if a drag operation has finished by looking at other events\n // We can do this by looking at other events\n\n // ### First detection: \"pointermove\" events\n\n // 1. \"pointermove\" events cannot fire during a drag and drop operation\n // according to the spec. So if we get a \"pointermove\" it means that\n // the drag and drop operations has finished. So if we get a \"pointermove\"\n // we know that the drag is over\n // 2. 🦊😤 Drag and drop operations are _supposed_ to suppress\n // other pointer events. However, firefox will allow a few\n // pointer event to get through after a drag starts.\n // The most I've seen is 3\n {\n type: 'pointermove',\n listener: function () {\n var callCount = 0;\n return function listener() {\n // Using 20 as it is far bigger than the most observed (3)\n if (callCount < 20) {\n callCount++;\n return;\n }\n onDragEnd();\n };\n }()\n },\n // ### Second detection: \"pointerdown\" events\n\n // If we receive this event then we know that a drag operation has finished\n // and potentially another one is about to start.\n // Note: `pointerdown` fires on all browsers / platforms before \"dragstart\"\n {\n type: 'pointerdown',\n listener: onDragEnd\n }];\n}","export function getInput(event) {\n return {\n altKey: event.altKey,\n button: event.button,\n buttons: event.buttons,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY\n };\n}","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","import rafSchd from 'raf-schd';\nvar scheduleOnDrag = rafSchd(function (fn) {\n return fn();\n});\nvar dragStart = function () {\n var scheduled = null;\n function schedule(fn) {\n var frameId = requestAnimationFrame(function () {\n scheduled = null;\n fn();\n });\n scheduled = {\n frameId: frameId,\n fn: fn\n };\n }\n function flush() {\n if (scheduled) {\n cancelAnimationFrame(scheduled.frameId);\n scheduled.fn();\n scheduled = null;\n }\n }\n return {\n schedule: schedule,\n flush: flush\n };\n}();\nexport function makeDispatch(_ref) {\n var source = _ref.source,\n initial = _ref.initial,\n dispatchEvent = _ref.dispatchEvent;\n var previous = {\n dropTargets: []\n };\n function safeDispatch(args) {\n dispatchEvent(args);\n previous = {\n dropTargets: args.payload.location.current.dropTargets\n };\n }\n var dispatch = {\n start: function start(_ref2) {\n var nativeSetDragImage = _ref2.nativeSetDragImage;\n // Ensuring that both `onGenerateDragPreview` and `onDragStart` get the same location.\n // We do this so that `previous` is`[]` in `onDragStart` (which is logical)\n var location = {\n current: initial,\n previous: previous,\n initial: initial\n };\n // a `onGenerateDragPreview` does _not_ add another entry for `previous`\n // onDragPreview\n safeDispatch({\n eventName: 'onGenerateDragPreview',\n payload: {\n source: source,\n location: location,\n nativeSetDragImage: nativeSetDragImage\n }\n });\n dragStart.schedule(function () {\n safeDispatch({\n eventName: 'onDragStart',\n payload: {\n source: source,\n location: location\n }\n });\n });\n },\n dragUpdate: function dragUpdate(_ref3) {\n var current = _ref3.current;\n dragStart.flush();\n scheduleOnDrag.cancel();\n safeDispatch({\n eventName: 'onDropTargetChange',\n payload: {\n source: source,\n location: {\n initial: initial,\n previous: previous,\n current: current\n }\n }\n });\n },\n drag: function drag(_ref4) {\n var current = _ref4.current;\n scheduleOnDrag(function () {\n dragStart.flush();\n var location = {\n initial: initial,\n previous: previous,\n current: current\n };\n safeDispatch({\n eventName: 'onDrag',\n payload: {\n source: source,\n location: location\n }\n });\n });\n },\n drop: function drop(_ref5) {\n var current = _ref5.current,\n updatedSourcePayload = _ref5.updatedSourcePayload;\n dragStart.flush();\n scheduleOnDrag.cancel();\n safeDispatch({\n eventName: 'onDrop',\n payload: {\n source: updatedSourcePayload !== null && updatedSourcePayload !== void 0 ? updatedSourcePayload : source,\n location: {\n current: current,\n previous: previous,\n initial: initial\n }\n }\n });\n }\n };\n return dispatch;\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { bindAll } from 'bind-event-listener';\nimport { getElementFromPointWithoutHoneypot } from '../honey-pot-fix/get-element-from-point-without-honey-pot';\nimport { isHoneyPotElement } from '../honey-pot-fix/is-honey-pot-element';\nimport { isLeavingWindow } from '../util/changing-window/is-leaving-window';\nimport { getBindingsForBrokenDrags } from '../util/detect-broken-drag';\nimport { getInput } from '../util/get-input';\nimport { makeDispatch } from './dispatch-consumer-event';\nvar globalState = {\n isActive: false\n};\nfunction canStart() {\n return !globalState.isActive;\n}\nfunction getNativeSetDragImage(event) {\n if (event.dataTransfer) {\n // need to use `.bind` as `setDragImage` is required\n // to be run with `event.dataTransfer` as the \"this\" context\n return event.dataTransfer.setDragImage.bind(event.dataTransfer);\n }\n return null;\n}\nfunction hasHierarchyChanged(_ref) {\n var current = _ref.current,\n next = _ref.next;\n if (current.length !== next.length) {\n return true;\n }\n // not checking stickiness, data or dropEffect,\n // just whether the hierarchy has changed\n for (var i = 0; i < current.length; i++) {\n if (current[i].element !== next[i].element) {\n return true;\n }\n }\n return false;\n}\nfunction start(_ref2) {\n var event = _ref2.event,\n dragType = _ref2.dragType,\n getDropTargetsOver = _ref2.getDropTargetsOver,\n dispatchEvent = _ref2.dispatchEvent;\n if (!canStart()) {\n return;\n }\n var initial = getStartLocation({\n event: event,\n dragType: dragType,\n getDropTargetsOver: getDropTargetsOver\n });\n globalState.isActive = true;\n var state = {\n current: initial\n };\n\n // Setting initial drop effect for the drag\n setDropEffectOnEvent({\n event: event,\n current: initial.dropTargets\n });\n var dispatch = makeDispatch({\n source: dragType.payload,\n dispatchEvent: dispatchEvent,\n initial: initial\n });\n function updateState(next) {\n // only looking at whether hierarchy has changed to determine whether something as 'changed'\n var hasChanged = hasHierarchyChanged({\n current: state.current.dropTargets,\n next: next.dropTargets\n });\n\n // Always updating the state to include latest data, dropEffect and stickiness\n // Only updating consumers if the hierarchy has changed in some way\n // Consumers can get the latest data by using `onDrag`\n state.current = next;\n if (hasChanged) {\n dispatch.dragUpdate({\n current: state.current\n });\n }\n }\n function onUpdateEvent(event) {\n var input = getInput(event);\n\n // If we are over the honey pot, we need to get the element\n // that the user would have been over if not for the honey pot\n var target = isHoneyPotElement(event.target) ? getElementFromPointWithoutHoneypot({\n x: input.clientX,\n y: input.clientY\n }) : event.target;\n var nextDropTargets = getDropTargetsOver({\n target: target,\n input: input,\n source: dragType.payload,\n current: state.current.dropTargets\n });\n if (nextDropTargets.length) {\n // 🩸 must call `event.preventDefault()` to allow a browser drop to occur\n event.preventDefault();\n setDropEffectOnEvent({\n event: event,\n current: nextDropTargets\n });\n }\n updateState({\n dropTargets: nextDropTargets,\n input: input\n });\n }\n function cancel() {\n // The spec behaviour is that when a drag is cancelled, or when dropping on no drop targets,\n // a \"dragleave\" event is fired on the active drop target before a \"dragend\" event.\n // We are replicating that behaviour in `cancel` if there are any active drop targets to\n // ensure consistent behaviour.\n //\n // Note: When cancelling, or dropping on no drop targets, a \"dragleave\" event\n // will have already cleared the dropTargets to `[]` (as that particular \"dragleave\" has a `relatedTarget` of `null`)\n\n if (state.current.dropTargets.length) {\n updateState({\n dropTargets: [],\n input: state.current.input\n });\n }\n dispatch.drop({\n current: state.current,\n updatedSourcePayload: null\n });\n finish();\n }\n function finish() {\n globalState.isActive = false;\n unbindEvents();\n }\n var unbindEvents = bindAll(window, [{\n // 👋 Note: we are repurposing the `dragover` event as our `drag` event\n // this is because firefox does not publish pointer coordinates during\n // a `drag` event, but does for every other type of drag event\n // `dragover` fires on all elements that are being dragged over\n // Because we are binding to `window` - our `dragover` is effectively the same as a `drag`\n // 🦊😤\n type: 'dragover',\n listener: function listener(event) {\n // We need to regularly calculate the drop targets in order to allow:\n // - dynamic `canDrop()` checks\n // - rapid updating `getData()` calls to attach data in response to user input (eg for edge detection)\n // Sadly we cannot schedule inspecting changes resulting from this event\n // we need to be able to conditionally cancel the event with `event.preventDefault()`\n // to enable the correct native drop experience.\n\n // 1. check to see if anything has changed\n onUpdateEvent(event);\n\n // 2. let consumers know a move has occurred\n // This will include the latest 'input' values\n dispatch.drag({\n current: state.current\n });\n }\n }, {\n type: 'dragenter',\n listener: onUpdateEvent\n }, {\n type: 'dragleave',\n listener: function listener(event) {\n if (!isLeavingWindow({\n dragLeave: event\n })) {\n return;\n }\n\n /**\n * At this point we don't know if a drag is being cancelled,\n * or if a drag is leaving the `window`.\n *\n * Both have:\n * 1. \"dragleave\" (with `relatedTarget: null`)\n * 2. \"dragend\" (a \"dragend\" can occur when outside the `window`)\n *\n * **Clearing drop targets**\n *\n * For either case we are clearing the the drop targets\n *\n * - cancelling: we clear drop targets in `\"dragend\"` anyway\n * - leaving the `window`: we clear the drop targets (to clear stickiness)\n *\n * **Leaving the window and finishing the drag**\n *\n * _internal drags_\n *\n * - The drag continues when the user is outside the `window`\n * and can resume if the user drags back over the `window`,\n * or end when the user drops in an external `window`.\n * - We will get a `\"dragend\"`, or we can listen for other\n * events to determine the drag is finished when the user re-enters the `window`).\n *\n * _external drags_\n *\n * - We conclude the drag operation.\n * - We have no idea if the user will drag back over the `window`,\n * or if the drag ends elsewhere.\n * - We will create a new drag if the user re-enters the `window`.\n *\n * **Not updating `input`**\n *\n * 🐛 Bug[Chrome] the final `\"dragleave\"` has default input values (eg `clientX == 0`)\n * Workaround: intentionally not updating `input` in \"dragleave\"\n * rather than the users current input values\n * - [Conversation](https://twitter.com/alexandereardon/status/1642697633864241152)\n * - [Bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1429937)\n **/\n\n updateState({\n input: state.current.input,\n dropTargets: []\n });\n if (dragType.startedFrom === 'external') {\n cancel();\n }\n }\n }, {\n // A \"drop\" can only happen if the browser allowed the drop\n type: 'drop',\n listener: function listener(event) {\n // Capture the final input.\n // We are capturing the final `input` for the\n // most accurate honey pot experience\n state.current = {\n dropTargets: state.current.dropTargets,\n input: getInput(event)\n };\n\n /** If there are no drop targets, then we will get\n * a \"drop\" event if:\n * - `preventUnhandled()` is being used\n * - there is an unmanaged drop target (eg another library)\n * In these cases, it's up to the consumer\n * to handle the drop if it's not over one of our drop targets\n * - `preventUnhandled()` will cancel the \"drop\"\n * - unmanaged drop targets can handle the \"drop\" how they want to\n * We won't call `event.preventDefault()` in this call path */\n\n if (!state.current.dropTargets.length) {\n cancel();\n return;\n }\n event.preventDefault();\n\n // applying the latest drop effect to the event\n setDropEffectOnEvent({\n event: event,\n current: state.current.dropTargets\n });\n dispatch.drop({\n current: state.current,\n // When dropping something native, we need to extract the latest\n // `.items` from the \"drop\" event as it is now accessible\n updatedSourcePayload: dragType.type === 'external' ? dragType.getDropPayload(event) : null\n });\n finish();\n }\n }, {\n // \"dragend\" fires when on the drag source (eg a draggable element)\n // when the drag is finished.\n // \"dragend\" will fire after \"drop\" (if there was a successful drop)\n // \"dragend\" does not fire if the draggable source has been removed during the drag\n // or for external drag sources (eg files)\n\n // This \"dragend\" listener will not fire if there was a successful drop\n // as we will have already removed the event listener\n\n type: 'dragend',\n listener: function listener(event) {\n // In firefox, the position of the \"dragend\" event can\n // be a bit different to the last \"dragover\" event.\n // Updating the input so we can get the best possible\n // information for the honey pot.\n state.current = {\n dropTargets: state.current.dropTargets,\n input: getInput(event)\n };\n cancel();\n }\n }].concat(_toConsumableArray(getBindingsForBrokenDrags({\n onDragEnd: cancel\n }))),\n // Once we have started a managed drag operation it is important that we see / own all drag events\n // We got one adoption bug pop up where some code was stopping (`event.stopPropagation()`)\n // all \"drop\" events in the bubble phase on the `document.body`.\n // This meant that we never saw the \"drop\" event.\n {\n capture: true\n });\n dispatch.start({\n nativeSetDragImage: getNativeSetDragImage(event)\n });\n}\nfunction setDropEffectOnEvent(_ref3) {\n var _current$;\n var event = _ref3.event,\n current = _ref3.current;\n // setting the `dropEffect` to be the innerMost drop targets dropEffect\n var innerMost = (_current$ = current[0]) === null || _current$ === void 0 ? void 0 : _current$.dropEffect;\n if (innerMost != null && event.dataTransfer) {\n event.dataTransfer.dropEffect = innerMost;\n }\n}\nfunction getStartLocation(_ref4) {\n var event = _ref4.event,\n dragType = _ref4.dragType,\n getDropTargetsOver = _ref4.getDropTargetsOver;\n var input = getInput(event);\n\n // When dragging from outside of the browser,\n // the drag is not being sourced from any local drop targets\n if (dragType.startedFrom === 'external') {\n return {\n input: input,\n dropTargets: []\n };\n }\n var dropTargets = getDropTargetsOver({\n input: input,\n source: dragType.payload,\n target: event.target,\n current: []\n });\n return {\n input: input,\n dropTargets: dropTargets\n };\n}\nexport var lifecycle = {\n canStart: canStart,\n start: start\n};","// Extending `Map` to allow us to link Key and Values together\n\nvar ledger = new Map();\nfunction registerUsage(_ref) {\n var typeKey = _ref.typeKey,\n mount = _ref.mount;\n var entry = ledger.get(typeKey);\n if (entry) {\n entry.usageCount++;\n return entry;\n }\n var initial = {\n typeKey: typeKey,\n unmount: mount(),\n usageCount: 1\n };\n ledger.set(typeKey, initial);\n return initial;\n}\nexport function register(args) {\n var entry = registerUsage(args);\n return function unregister() {\n entry.usageCount--;\n if (entry.usageCount > 0) {\n return;\n }\n // Only a single usage left, remove it\n entry.unmount();\n ledger.delete(args.typeKey);\n };\n}","/** Create a new combined function that will call all the provided functions */\nexport function combine() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n return function cleanup() {\n fns.forEach(function (fn) {\n return fn();\n });\n };\n}","export function addAttribute(element, _ref) {\n var attribute = _ref.attribute,\n value = _ref.value;\n element.setAttribute(attribute, value);\n return function () {\n return element.removeAttribute(attribute);\n };\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { combine } from '../public-utils/combine';\nimport { addAttribute } from '../util/add-attribute';\nfunction copyReverse(array) {\n return array.slice(0).reverse();\n}\nexport function makeDropTarget(_ref) {\n var typeKey = _ref.typeKey,\n defaultDropEffect = _ref.defaultDropEffect;\n var registry = new WeakMap();\n var dropTargetDataAtt = \"data-drop-target-for-\".concat(typeKey);\n var dropTargetSelector = \"[\".concat(dropTargetDataAtt, \"]\");\n function addToRegistry(args) {\n registry.set(args.element, args);\n return function () {\n return registry.delete(args.element);\n };\n }\n function dropTargetForConsumers(args) {\n // Guardrail: warn if the draggable element is already registered\n if (process.env.NODE_ENV !== 'production') {\n var existing = registry.get(args.element);\n if (existing) {\n // eslint-disable-next-line no-console\n console.warn(\"You have already registered a [\".concat(typeKey, \"] dropTarget on the same element\"), {\n existing: existing,\n proposed: args\n });\n }\n if (args.element instanceof HTMLIFrameElement) {\n // eslint-disable-next-line no-console\n console.warn(\"\\n We recommend not registering